can't read "argv": no such variable
    while executing
"lindex $argv 0"
    (in namespace eval "::request" script line 440784)
    invoked from within
"namespace eval ::request $script"
    ("::try" body line 12)

OUTPUT BUFFER:

package provide app-ordalie 1.0 proc 2GO {args} { #Load #LesTypesDeRequetes #LesRequetes #LesGO #$Requete WhatIsIt #$Requete LesLiens -> LesGO #$GO LesLiens -> LesRequetes global TableauInterrogation2GO if {[string equal -nocase $args "Load"] && ![info exists TableauInterrogation2GO(EstCharge)]} { if {[info exists TableauInterrogation2GO]} {unset TableauInterrogation2GO} set TableauInterrogation2GO(EstCharge) 1 Load2GO TableauInterrogation2GO return } if {[string equal -nocase $args "unset"]} { if {[info exists TableauInterrogation2GO]} {unset TableauInterrogation2GO} return } set Quoi [join $args ","] if {[info exists TableauInterrogation2GO($Quoi)]} { return [lsort -unique [set TableauInterrogation2GO($Quoi)]] } ###################CHARGE Fichier2GO################### if {![info exists TableauInterrogation2GO(EstCharge)]} { set TableauInterrogation2GO(EstCharge) 1 Load2GO TableauInterrogation2GO } if {![info exists TableauInterrogation2GO($Quoi)]} {return} return [lsort -unique [set TableauInterrogation2GO($Quoi)]] } proc 2Pi {} { return [expr {2.*acos(-1.)}] } proc AADansPil {file} { global Sequences global LNOrdali global ListeDesPiliersDuGroupe DecortiqueUnMSF CreeLesPiliers set Nt [llength $LNOrdali] foreach seuil {60 65 70 75 80 85 90 95 100} { set NIndi($seuil) 0 } foreach p [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)] { foreach seuil {60 65 70 75 80 85 90 95 100} { set Nb [regsub -all {\.} $p "" tmp] if {[expr ($Nt.-$Nb.)/$Nt*100] > $seuil} {incr NIndi($seuil)} } } return } proc AADuNomDuFichier {NomDuFichier {AvecAlias AvecAlias}} { global AAAlias if { ! [info exists AAAlias] } { set AAAlias(ly1) lys set AAAlias(ly2) lys set AAAlias(pha) phe set AAAlias(phb) phe set AAAlias(gla) gly set AAAlias(glb) gly } set AA3 [string range $NomDuFichier 0 2] if { $AvecAlias != "AvecAlias" && [info exists AAAlias($AA3)]} { return [set AAAlias($AA3)] } else { return $AA3 } } proc AAFrequents2 {FichierCod} { if {![file exist $FichierCod]} {return} set Nom [file tail $FichierCod] append First "$Nom\t" set LesFreq [CreeListeCodonFrequency $FichierCod] set LesFreqTrie [lsort -index 2 -decreasing $LesFreq] set LesFirst [lrange $LesFreqTrie 0 2] foreach AA $LesFirst { set aa [lindex $AA 0] set Codon [lindex $AA 1] append First "$aa\($Codon\)\t" } return $First } proc AAFrequents2PourTous {} { foreach Nom [ListeDesPABs] { set FichierCod "[RepertoireDuGenome]/codonfrequency/tables_codonfrequency/$Nom.cod" set AA [AAFrequents2 $FichierCod] append Tous "$AA\n" } return $Tous } proc AALePlusDifferent {FichierCodMusRef FichierCodSeq} { set LesDifferences [CompareDeuxTablesCodonFrequency $FichierCodMusRef $FichierCodSeq] set LePlus [lrange $LesDifferences 0 0] return $LePlus } proc AALePlusFrequent {FichierCod} { set LesFreq [CreeListeCodonFrequency $FichierCod] set LesFreqTrie [lsort -index 2 -decreasing $LesFreq] set LesFirst [lrange $LesFreqTrie 0 0] foreach AA $LesFirst { set f [lindex $AA 2] set fa [format "%.2f" $f] set AA [lreplace $AA 2 2 $fa] lappend LesFirstArr $AA } return $LesFirstArr } proc AALesPlusDifferents2 {FichierCodMusRef FichierCodSeq} { set Nom [file tail $FichierCodSeq] set LesDifferences [CompareDeuxTablesCodonFrequency $FichierCodMusRef $FichierCodSeq] set LesPlus [lrange $LesDifferences 0 2] append Plus "$Nom\t" foreach PlusDifferent $LesPlus { set aa [lindex $PlusDifferent 1] set codon [lindex $PlusDifferent 2] append Plus "$aa\($codon\)\t" } return $Plus } proc AALesPlusDifferents2PourTous {} { set FichierCodMusRef "[RepertoireDuGenome]/codonfrequency/mus.cod" foreach Nom [ListeDesPABs] { set FichierCodSeq "[RepertoireDuGenome]/codonfrequency/tables_codonfrequency/$Nom.cod" set Plus [AALesPlusDifferents2 $FichierCodMusRef $FichierCodSeq] append Tous "$Plus\n" } return $Tous } proc AALesPlusDifferentsPourTous {} { set FichierCodMusRef "[RepertoireDuGenome]/codonfrequency/mus.cod" foreach Nom [ListeDesPABs] { set FichierCodSeq "[RepertoireDuGenome]/codonfrequency/tables_codonfrequency/$Nom.cod" set LePlus [AALePlusDifferent $FichierCodMusRef $FichierCodSeq] append Tous "$LePlus\n" } return $Tous } proc AARares {FichierCod} { if {![file exist $FichierCod]} {return} set Nom [file tail $FichierCod] append First "$Nom\t" set LesFreq [CreeListeCodonFrequency $FichierCod] set LesFreqTrie [lsort -index 2 -increasing $LesFreq] set LesFreqTrieSansEnd {} foreach Ligne $LesFreqTrie { set Type [lindex $Ligne 0] if {$Type=="End"} { continue } else { lappend LesFreqTrieSansEnd $Ligne } } set LesFirst [lrange $LesFreqTrieSansEnd 0 2] foreach AA $LesFirst { set aa [lindex $AA 0] set Codon [lindex $AA 1] append First "$aa\($Codon\)\t" } return $First } proc AARaresPourTous {} { foreach Nom [ListeDesPABs] { set FichierCod "[RepertoireDuGenome]/codonfrequency/tables_codonfrequency/$Nom.cod" set AA [AARares $FichierCod] append Tous "$AA\n" } return $Tous } proc AAStart {Nom} { global LesAAsStart if {[info exists LesAAsStart($Nom)]} { return LesAAsStart($Nom) } if {[info exists LesAAsStart("EstCharge")]} { return "" } set LesAAsStart("EstCharge") 1 ChargeLesCodonsStart return [AAsStart $Nom] } proc AAType {{Qui ""}} { global AAType if {[info exists AAType($Qui)]} { return $AAType($Qui) } if {[info exists AAType("EstCharge")]} { return "" } set AAType(aliphatic) [list I L M V] set AAType(aromatic) [list F Y W] set AAType(acidic) [list D E Q N] set AAType(basic) [list H K R] set AAType(scmall) [list P A G S T] set AAType(cystein) [list C] foreach K [lsort [array names AAType]] { set V $AAType($K) lappend AAType(Types) $K foreach A $V { lappend AAType(ListOfA) $A set AAType($A) $K } } set Ordonnes {} set AAType(AlphabeticListOfAA) [lsort $AAType(ListOfA)] set AAType("EstCharge") 1 return [AAType $Qui] } proc AAduCodon {Codon {AA ""}} { global CodonToAminoAcid global FichierTranslate if {$Codon=="Reset" && [info exists CodonToAminoAcid]} {unset CodonToAminoAcid ; return ""} if {[string length $Codon] != 3 } { return "-" } if {[regexp -nocase {[^ATGC]} $Codon]} { return "X" } if { ! [info exists CodonToAminoAcid("EstCharge")]} { set CodonToAminoAcid("EstCharge") 1 set ListeDesLignes [split [ContenuDuFichier $FichierTranslate] "\n"] set IndexPointPoint [lsearch -regexp $ListeDesLignes {\.\.}] if { $IndexPointPoint == -1 } { Warne "$FichierTranslate merde."; exit} set PartieCodage [lrange $ListeDesLignes [incr IndexPointPoint 2] end] foreach Ligne $PartieCodage { set fin [expr [string first "\!" $Ligne]-1] set Interet [string range $Ligne 0 $fin] if {[info exists a]} { unset a } if {[info exists b]} { unset b } if {[info exists c]} { unset c } if {[info exists d]} { unset d } if {[info exists e]} { unset e } if {[info exists f]} { unset f } if {[info exists g]} { unset g } if {[info exists h]} { unset h } scan $Interet "%s %s %s %s %s %s %s %s %s %s" A AAA a b c d e f g h if {[info exists a]} { set CodonToAminoAcid([string toupper $a]) $A} if {[info exists b]} { set CodonToAminoAcid([string toupper $b]) $A} if {[info exists c]} { set CodonToAminoAcid([string toupper $c]) $A} if {[info exists d]} { set CodonToAminoAcid([string toupper $d]) $A} if {[info exists e]} { set CodonToAminoAcid([string toupper $e]) $A} if {[info exists f]} { set CodonToAminoAcid([string toupper $f]) $A} if {[info exists g]} { set CodonToAminoAcid([string toupper $g]) $A} if {[info exists h]} { set CodonToAminoAcid([string toupper $h]) $A} } if { ![CodonStopPossible "TGA"] } { set CodonToAminoAcid(TGA) "W" } } set CODON [string toupper $Codon] if {$AA!=""} { set CodonToAminoAcid($CODON) $AA } if { ! [info exists CodonToAminoAcid($CODON)]} { return "X" } return [set CodonToAminoAcid($CODON)] } proc ACTAYRfinder {} { # Recherche un motif en générant un mismatch (adapté récepteurs nucléaires) set FichierEntree [open "/genomics/link/STAF/fiches/Bidir/SequencesTotales.bidir" "r"] set FichierSortie [open "/genomics/link/STAF/fiches/Bidir/ACTAYRdansLesPromoteurs.bidir" "w"] Espionne "ACTAYR : Start" set J 0 set I 0 while { [gets $FichierEntree Ligne] >=0 } { incr J set Entete $Ligne gets $FichierEntree Ligne set Acc [lindex $SeqTFA(index) 0] set RegExp {ACTA[CT][AG]|[AG][GA]TAGT} set ListeDesPositions [regexp -indices -all -inline "$RegExp" $Ligne] foreach PaireDeBornes $ListeDesPositions { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] puts $FichierSortie "$Entete $NewStart $NewEnd" incr I } } Espionne "ACTAYR : End ($I ACTAYR trouves dans $J promoteurs)" close $FichierEntree close $FichierSortie } proc ACetDRdansTREMBL {} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/narcisse"] { scan $Ligne "%s %s %s" Nom BanqueId Access set Narcisse([string toupper $Access]) $Nom set Narcisse($Nom) $Access } set F [open "/prot/trembl/sp_tr_nrdb/trembl.dat" "r"] while {[gets $F Ligne]>=0} { if {[regexp "^AC" $Ligne]} { set AC $Ligne } if {[regexp "^OS" $Ligne]} { set OS $Ligne } if {[regexp "^DR EMBL" $Ligne]} { set DR $Ligne if { ! [regexp "Pyrococcus abyssi" $OS]} { continue } scan $DR "%s %s %s %s" a b c Access if { ! [regexp -nocase {Cab[0-9][0-9][0-9][0-9][0-9]} $Ligne Access]} { continue } scan $AC "%s %s" Bidon AC regsub {;} $AC "" AC set Nom "???????????????" set ACCESS [string toupper $Access] if {[info exists Narcisse($ACCESS)]} { set Nom [set Narcisse($ACCESS)] } lappend Sortie "$Nom $Access $AC" Espionne "$Nom $Access $AC" } } SauveLesLignes $Sortie dans "$RepertoireDuGenome/fiches/narcisse-a-trois" } proc ALaMain {Quoi} { global ALaMain if {[info exists ALaMain($Quoi)]} { return $ALaMain($Quoi) } if {[info exists ALaMain("EstCharge")]} { return "" } set ALaMain("EstCharge") 1 set ALaMain(gi_bsdc1_sp_q9nw68.1_) "Unknown unknown SP:q9nw68" set ALaMain(gi_26332042_dbj_bac29751.1_) "Unknown unknown dbj:bac29751" set ALaMain(gi_160703882_gb_eat79375.2_) "Unknown unknown gb:eat79375" set ALaMain(gi_157336387_emb_cao71072.1_) "Unknown unknown emb:cao71072" set ALaMain(gi_predict_edq55772.1_) "Unknown unknown edq55772" set ALaMain(gi_125525362_gb_eay73476.1_) "Unknown unknown gb_eay73476" set ALaMain(gi_116000504_emb_cal50184.1_) "Unknown unknown emb_cal50184" set ALaMain(gi_sap_dm_emb_caa56416.1_b) "Unknown unknown emb_caa56416" set ALaMain(gi_74191837_dbj_bae32869.1_) "Unknown unknown dbj_bae32869" set ALaMain(gi_30580527_sp_q9d5v6.1_syap1_) "Unknown unknown sp_q9d5v6.1_syap1" set ALaMain(gi_149035828_gb_edl90495.1_) "Unknown unknown gb_edl90495" set ALaMain(gi_14042052_dbj_bab55087.1_) "Unknown unknown dbj_bab55087" set ALaMain(gi_15779193_gb_aah14657.1_) "Unknown unknown gb_aah14657" set ALaMain(gi_62897271_dbj_bad96576.1_) "Unknown unknown dbj_bad96576" set ALaMain(gi_14189980_gb_aak55531.1_af30) "Unknown unknown gb_aak55531" set ALaMain(gi_47215840_emb_cag00695.1_) "Unknown unknown emb_cag00695" set ALaMain(gi_sap_danio_p_957236.1_) "Brachidanio rerio p_957236" set ALaMain(gi_edp29796.1_bsd-bruggia) "Brugia malayi edp29796" set ALaMain(gi_schistosoma_gb_aaw25233.1_) "schistosoma_ gb:aaw25233" set ALaMain(gi_bsd_oris_aba94285.2_) "oris_ aba94285" set ALaMain(gi_147818233_emb_can73547.1_) "Unknown unknown emb_can73547" set ALaMain(gi_162674980_gb_edq61481.1_) "Unknown unknown gb_edq61481" set ALaMain(gi_162683699_gb_edq70107.1_) "Unknown unknown gb_edq70107" set ALaMain(gi_29841361_gb_aap06393.1_) "Unknown unknown gb_aap06393" set ALaMain(gi_56753973_gb_aaw25179.1_) "Unknown unknown gb_aaw25179" set ALaMain(gi_114636465_ref_xp_001173050.) "Unknown unknown YYY:xp_001173050" set ALaMain(gi_predictprot_macala_xp_001085333.) "Unknown unknown YYY:xp_001085333" set ALaMain(gi_114052006_ref_np_001039615.) "Unknown unknown YYY:np_001039615" set ALaMain(gi_114636455_ref_xp_001173101.) "Unknown unknown YYY:xp_001173101" set ALaMain(gi_149719503_ref_xp_001505012.) "Unknown unknown YYY:xp_001505012" set ALaMain(gi_p62_hom_s_ref_np_005307.1) "Unknown unknown YYY:np_005307" set ALaMain(gi_126332087_ref_xp_001366557.) "Unknown unknown YYY:xp_001366557" set ALaMain(gi_57102734_ref_xp_534083.1) "Unknown unknown YYY:xp_534083" set ALaMain(gi_p62_mousemgb_aah52837.1) "Unknown unknown GB:aah52837" set ALaMain(gi_157816977_ref_np_001101955.) "Unknown unknown YYY:np_001101955" set ALaMain(gi_31982313_ref_np_032212.2) "Unknown unknown YYY:np_032212" set ALaMain(gi_p62_xenopustrop_np_001006921.1) "Unknown unknown YYY:np_001006921" set ALaMain(gi_118091234_ref_xp_421013.2) "Unknown unknown YYY:xp_421013" set ALaMain(gi_52219046_ref_np_001004596.1) "Unknown unknown YYY:np_001004596" set ALaMain(gi_125880724_ref_xp_001342123.) "Unknown unknown YYY:xp_001342123" set ALaMain(gi_p62putative_ref_xp_798784.1) "Unknown unknown YYY:xp_798784" set ALaMain(gi_p62_sc__010597.1) "Saccharomyces cerevisiae YYY:010597" set ALaMain(gi_45184782_ref_np_982500.1) "Unknown unknown YYY:np_982500" set ALaMain(gi_156837512_ref_xp_001642780.) "Unknown unknown YYY:xp_001642780" set ALaMain(gi_bsd_gallusgallusp_001012860) "Gallus gallus YYY:NP_001012860" set ALaMain(gi_pdb_syap1_humana_structure) "Unknown unknown PDB:1X3A_a" set ALaMain(gi_pdb_syap1_humanb_structure) "Unknown unknown PDB:1X3A_b" set ALaMain(gi_cryptosporidium_ref_xp_6660) "Unknown unknown YYY:xp_6660" set ALaMain(gi_cryptosporidium_xp_625548.1) "Unknown unknown YYY:xp_625548" set ALaMain(gi_58261118_ref_xp_567969.1) "Unknown unknown YYY:xp_567969" set ALaMain(gi_115692152_ref_xp_780429.2) "Unknown unknown YYY:xp_780429" set ALaMain(gi_158287538_ref_xp_309535.4) "Unknown unknown YYY:xp_309535" set ALaMain(gi_15233107_ref_np_191701.1) "Unknown unknown YYY:np_191701" set ALaMain(gi_149237456_ref_xp_001524605.) "Unknown unknown YYY:xp_001524605" set ALaMain(gi_159474828_ref_xp_001695527.) "Unknown unknown YYY:xp_001695527" set ALaMain(gi_predict_EDQ55772.1) "Unknown unknown YYY:EDQ55772" set ALaMain(gi_BSD_gallusgallusP_001012860.1) "Gallus gallus YYY:NP_001012860" set ALaMain(gi_PDB_syap1_HUMANa_structure_1X3A_A_1) "Homo sapiens PDB:1X3A" set ALaMain(gi_PDB_syap1_HUMANb_structure_1X3A_A_2) "Homo sapiens PDB:1X3A" set ALaMain(gi_SAP_danio_P_957236.1) "Brachydanio rerio YYY:NP_957236" set ALaMain(gi_EDP29796.1_bsd-bruggia) "Brugia malayi YYY:EDP29796" set ALaMain(gi_BSD_ORIS_ABA94285.2) "Oryza sativa SPT:ABA94285" set ALaMain(gi_bsdputat_Orizaesativ_BAD53348.1) "Oryza sativa SPT:BAD53348" return [ALaMain $Quoi] } proc ANGLES {aB aANGLE aU} { upvar $aB B upvar $aANGLE ANGLE upvar $aU U # A partir de la matrice de rotation, calcule les angles d'Euler, # l'angle de rotation et coord. spheriques de l'axe, et les cos. # directeurs de l'axe # set PI [Pi] # set PI 3.1415926 set PIS2 [expr {0.5 * $PI}] set DEGRAD [expr {$PI/180.}] set DETERM 0. set DETERM [S_deterM [M_T B]] if {$DETERM <= 0.99 || $DETERM > 1.01} { puts " =======> Determinant = $DETERM " return -1 } # Angles d'Euler set TH2 [ARCTG [expr {sqrt(pow($B(1,3),2)+pow($B(2,3),2))}] $B(3,3)] set ZETA [expr {1.-cos($TH2)}] if {$ZETA > 0.001 && $ZETA < 1.9999} { set TH1 [ARCTG $B(3,1) [expr {-$B(3,2)}]] set TH3 [ARCTG $B(1,3) $B(2,3)] } else { # Valeur arbitraire de TH3 set TH3 0. if {$ZETA <= 0.001} { set TH1 [ARCTG [expr {$B(1,2)-$B(2,1)}] [expr {$B(1,1)+$B(2,2)}]] } else { set TH1 [ARCTG [expr {$B(1,2)+$B(2,1)}] [expr {$B(1,1)-$B(2,2)}]] } } set ALPHA [expr {fmod(($TH1-$PIS2)/$DEGRAD+360.,360.)}] set BETA [expr {$TH2/$DEGRAD}] set GAMMA [expr {fmod(($TH3+$PIS2)/$DEGRAD,360.)}] set ANGLE(1) $ALPHA set ANGLE(2) $BETA set ANGLE(3) $GAMMA # ANGLE DE ROTATION ET COS. DIRECTEURS DE L'AXE set CKAPPA [expr {0.5*($B(1,1)+$B(2,2)+$B(3,3)-1.)}] set AKAPPA [ARCOS $CKAPPA] if {$CKAPPA > 0.9999} { # ROTATION NULLE. DIRECTION ARBITRAIRE set U(1) 0. set U(2) 0. set U(3) 1. } elseif {$CKAPPA < -0.999} { # ROTATION PROCHE DE 180 foreach I {1 2 3} { set ARG [expr {[set B($I,$I)]-$CKAPPA}] if {$ARG < 0.} { if {$ARG < -0.01} { puts "sqrt of zero " return -1 # exit } set ARG 0. } set U($I) [expr {sqrt($ARG/(1.-$CKAPPA))}] } # DETERMINER LE SIGNE DU PLUS GRAND COS.DIR. set I 1 foreach K {2 3} { if {[set U($K)] > [set U($I)]} {set I $K} } set K [expr {($I%3)+1}] set L [expr {($K%3)+1}] set U($I) [SIGN [set U($I)] [expr {([set B($K,$L)]-[set B($L,$K)])}]] set U($K) [SIGN [set U($K)] [expr {[set U($I)]*([set B($K,$I)]+[set B($I,$K)])}]] set U($L) [SIGN [set U($L)] [expr {[set U($I)]*([set B($L,$I)]+[set B($I,$L)])}]] } else { # ROTATION GENERALE set DSK [expr {2.*sin($AKAPPA)}] foreach I {1 2 3} { set K [expr {($I%3)+1}] set L [expr {($K%3)+1}] set U($I) [expr {([set B($K,$L)]-[set B($L,$K)])/$DSK}] } } set PSIZ [ARCOS $U(3)] set PHIZ [ARCTG $U(2) $U(1)] set ANGLE(4) [expr {$AKAPPA/$DEGRAD}] set ANGLE(5) [expr {$PSIZ/$DEGRAD}] set ANGLE(6) [expr {$PHIZ/$DEGRAD}] # Ramener a l'hemisphere nord if {$ANGLE(5) > 90.} { foreach i {1 2 3} { set U($i) [expr {-[set U($i)]}] } set ANGLE(4) [expr {-$ANGLE(4)}] set ANGLE(5) [expr {180.-$ANGLE(5)}] set ANGLE(6) [expr {$ANGLE(6)+180.}] } set ANGLE(6) [expr {fmod(($ANGLE(6)+360.),360.)}] return } proc ARCOS {A} { set absa [expr {abs($A)}] if {$absa > 1.} { if {$absa > 1.00001} { # pourrait mettre un puts pour dire .... } if {$absa > 1.01} { puts " =====> ARCOS" return # exit } set A [SIGN 1. $A] } set LARCOS [expr {acos($A)}] return $LARCOS } proc ARCTG {B A} { set ARCTG 0. if {abs($A) >= 0.00001 || abs($B) >= 0.00001} { set ARCTG [expr {atan2($B,$A)}] } return $ARCTG } proc ARPAnno {{LesFichiersTFA ""} {LesFamilles ""} {Verbose 0}} { Wup "Programme de d annotation des sous Familles D ARPs" Wup "ARPAnno: ARP Annotation Server" Wup "v 1.0" Wup " Based on BLAST," Wup " clustalw," Wup " aln_pos aln_res aln_insert," Wup " Domaines.txt Residus.txt" Wup "Jean Muller IGBMC/LBMAGM" #Repertoire contenant les banques Blast, Macs et Domaines et Residus de reference set RepARP "[RepARPAnno]" set RepTFA "$RepARP/ARP_TFA" set RepBanque "$RepARP/ARP_BLAST" set RepMACS "$RepARP/ARP_MACS" set RepSignature "$RepARP/ARP_Signature" #Repertoire contenant les resultats set RepARP_Results "[RepARPAnnoWeb]" set RepTFAResults "$RepARP_Results" set RepBlastResults "$RepARP_Results" set RepMACSResults "$RepARP_Results" #Passage au mode Verbose if { $Verbose != "0"} { set Verbose 1 } Verbose_Mode $Verbose if {$LesFichiersTFA==""} { set LesFichiersTFA [glob -nocomplain -directory "${RepTFA}_lesarps" "*.tfa"] set LesFichiersTFA [glob -nocomplain -directory "${RepTFA}_validation" "*.tfa"] } set LesFichiersASupprimer "" set LesFichiersBLASTs "" set NewMACS "" #Les Familles de proteines (Actin Orphan ARP1-11) ################################################# set LesVraisFamilles "" set LesVraisFamilles [LesFamillesDARPs] LesResultatsARPAnalyses "LesFamilles" $LesVraisFamilles "Positionne" foreach TFA $LesFichiersTFA { set AccessQuery "query_protein" set AccessDeRef "P02568" #1 Traitement du fichier d entree au format TFA ############################################### #On recupere l access (premier mot apres le chevron ">") #On ajoute query_protein a la place qui sera utilise par clustalw #On reecrit le fichier TFA dans RepTFAResults set FileName [file tail $TFA] set FichierTFA "$RepTFAResults/${FileName}" if {[regexp -nocase {^ARPAnno_[0-9]{4}_[0-9]{2}[0-9]{2}_} $FileName]} { #On vient du web on garde pour VraiAccess le nom du fichier (utilise apres pour nom.msf) set VraiAccess [string tolower [FormateLeFichierTFA $TFA $FichierTFA 1]] set VraiAccess $FileName } else { #set VraiAccess [string tolower [FormateLeFichierTFA $TFA $FichierTFA 0]] set VraiAccess [string tolower [FormateLeFichierTFA $TFA $FichierTFA 1]] if {$VraiAccess=="-1"} {Espionne "Pb FormateLeFichierTFA: $FichierTFA does not exists or is empty";return ""} set VraiAccess $FileName } set FichierLog "${FichierTFA}.log" AjouteAuARPLog "" $FichierLog LesResultatsARPAnalyses "VraiAccess" $VraiAccess "Positionne" set Categorie [InterrogeLesInfosDesARPs [string toupper $VraiAccess] Categorie] if { $Categorie == ""} { set Categorie "Unknown" } else { regsub -all {\-\-\-\-} $Categorie "" Categorie regsub "Les" $Categorie "" Categorie } if {[Verbose_Mode]} { set TextLog "><" AjouteAuARPLog "$TextLog" set TextLog ">Access $VraiAccess -- $Categorie" AjouteAuARPLog "$TextLog" } #2 Identificaction des meilleures familles d ARPs pour la query ############################################################### if {$LesFamilles != ""} { set MaxIDCutOffBlast "0.1" } else { set MaxIDCutOffBlast "0.25" } #2 On fait les Blasts contre toutes les banques blast des ARPs set LesFichiersBLASTs [BlastQueryVsARPs $FichierTFA $LesFamilles] #2 1er Filtrage des sorties BLAST dont ne retient que les meilleurs P Identity set LesFamillesIdentity [IdentifieLeMeilleurBLAST $LesFichiersBLASTs $VraiAccess $FichierLog] #2 2eme Filtrage pour se separer des identite limites set LesFamillesRetenues "" set FPIdC "" foreach FPIdC $LesFamillesIdentity { set Famille "" set PId "" set Cover "" foreach {Famille PId Cover} $FPIdC { if {$PId >= $MaxIDCutOffBlast} { LesResultatsARPAnalyses "$Famille,PId,$VraiAccess" $PId "Positionne" LesResultatsARPAnalyses "$Famille,Cover,$VraiAccess" $Cover "Positionne" lappend LesFamillesRetenues $Famille if {$PId>="0.8" && $Cover>="0.8"} { if {[regexp -nocase "actin" $Famille]} { set Texte "Your query protein is a conventional actin with [expr {$PId*100.0}]% identity shared among [expr ${Cover}*100.0]% of the sequence." LesResultatsARPAnalyses "Result" $Texte "Positionne" LesResultatsARPAnalyses "BestFamily" $Famille "Positionne" } elseif {[regexp -nocase "orphan" $Famille]} { set Texte "Your query protein is a orphan with [expr {$PId*100.0}]% identity shared among [expr ${Cover}*100.0]% of the sequence." LesResultatsARPAnalyses "Result" $Texte "Positionne" LesResultatsARPAnalyses "BestFamily" $Famille "Positionne" } } } } } if {[Verbose_Mode]} { set TextLog ">>>For $VraiAccess ($Categorie) selected family:$LesFamillesRetenues" AjouteAuARPLog "$TextLog" } #On supprime les fichiers BLASTs de toutes les familles non retenues foreach FBlast $LesFichiersBLASTs { #Q78DQ1.tfa_ARP6.blastp" set Famille "" set Famille_tmp "" set tmp "" set Famille [file tail $FBlast] regsub -nocase {.blastp$} $Famille "" Famille regexp -nocase {_([a-z]{2,4}[0-9]{1,2}|actin|orphans)$} $Famille tmp Famille_tmp if {$Famille_tmp != ""} {set Famille $Famille_tmp} if {$Famille != "" && [regexp -nocase $Famille $LesFamillesRetenues]} {continue} lappend LesFichiersASupprimer $FBlast } if {$LesFamillesRetenues == ""} { #Aucune famille n a ete retenue pour chercher si elle fait partie des ARPs set Texte "No family could be selected. Your query may not be part of Actin superfamily." LesResultatsARPAnalyses "Result" $Texte "Positionne" continue } else { #On a des resultats et on check si on a deja une famille (actin ou orphan) if {[LesResultatsARPAnalyses "Result" "LaValeurMerci"] != ""} { continue } } #3 Test de la sequence contre les alignements de references ########################################################### set AccessDeRef_OLD "" foreach Famille $LesFamillesRetenues { if {$AccessDeRef_OLD != "" && $AccessDeRef_OLD != $AccessDeRef } { set AccessDeRef $AccessDeRef_OLD set AccessDeRef_OLD "" } #On ne teste pas la famille des Actin if {[regexp -nocase "actin" $Famille]} {continue} set MACSDeRef "$RepMACS/${Famille}.rsf" set NewMACS "$RepMACSResults/${VraiAccess}_${Famille}.msf" set Res "" set Dom "" set AligneOuPas "-1" if {[Verbose_Mode]} { set TextLog ">< 2- Check $Famille family in progress (multiple alignment)><" AjouteAuARPLog "$TextLog" } #3-1 Alignement de la sequence contre les alignements de references ################################################################### set AligneOuPas [AlignQueryVsMACS $FichierTFA $MACSDeRef $NewMACS] if {$AligneOuPas=="-1"} { Espionne "Pb AlignQueryVsMACS" continue } if { [file exists $NewMACS]} { if {[file size $NewMACS]=="0"} { #Le fichier MACS est vide Espionne "Pb AlignQueryVsMACS $NewMACS, empty file." continue } } else { #Le fichier MACS n existe pas Espionne "Pb AlignQueryVsMACS $NewMACS, no file exists." Espionne "$FichierTFA $MACSDeRef $NewMACS" continue } #lappend LesFichiersASupprimer $NewMACS #3-2 Verification des Residus ############################# #Choix des access de ref de familles differentes if {$Famille == "ARP2"} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef_OLD $AccessDeRef set AccessDeRef "ARP05" } if {[Verbose_Mode]} { set TextLog ">< 2-1 Specific Residues Filter ><" AjouteAuARPLog "$TextLog" } set Res [CheckARPSpecificResiduesForQuery query_protein $VraiAccess $AccessDeRef $NewMACS $Famille] switch -exact -- $Res { "-2" { #No residues yet determined if {[Verbose_Mode]} { set TextLog "No residues yet determined for $Famille" AjouteAuARPLog "$TextLog" } } "-1" { #Probleme d alignement Espionne "Pb avec $NewMACS" } "1" { #La sequence possede tous les groupes de residus de cette famille testee #Espionne "$VraiAccess is an $Famille" } "2" { #La sequence possede les groupes de residus de cette famille testee mais egalement des Gaps #Espionne "$VraiAccess could have be an $Famille but there is too much GAP or missing sequences" } "0" { #La sequence ne possede pas les groupes de residus de cette famille testee #Espionne "$VraiAccess is not an $Famille" } } #3-3 Verification des Domaines ############################## if {$Famille == "ARP2"} { #ATTENTION ON REVIENT A LA NORMALE CAR C PAS BON POUR LES DOMAINES set AccessDeRef "$AccessDeRef_OLD" } if {[Verbose_Mode]} { set TextLog ">< 2-1 Specific Insertions Filter ><" AjouteAuARPLog "$TextLog" } set Dom [CheckARPSpecificDomainsForQuery query_protein $VraiAccess $AccessDeRef $NewMACS $Famille] switch -exact -- $Dom { "-2" { #No insertions yet determined if {[Verbose_Mode]} { set TextLog "No specific insertions yet determined for $Famille" AjouteAuARPLog "$TextLog" } } "-1" { #Probleme d alignement Espionne "Pb avec $NewMACS" } "1" { #La sequence possede tous les groupes de domaines de cette famille testee #Espionne "$VraiAccess is an $Famille" } "2" { #La sequence possede les groupes de domaines de cette famille testee mais egalement des Gaps #Espionne "$VraiAccess could have be an $Famille but there is too much GAP or missing sequences" } "0" { #La sequence ne possede pas les groupes de domaines de cette famille testee #Espionne "$VraiAccess is not an $Famille" } } } #4 Choix de l ARP ################# set Score_PId "" set Score_Cover "" set Score_Residue "" set Score_Domain "" set NbGroupOk "" set NbGroupTotal "" set NbGroupGap "" set NbDomainOk "" set NbDomainTotal "" set NbDomainGap "" if {[Verbose_Mode]} { set TextLog ">< 3- Final score calculation ><" AjouteAuARPLog "$TextLog" } set Best_Score "0.0" set Best_Family "" foreach Famille $LesFamillesRetenues { #On sort de toutes les familles il faut decider a quelle on appartient #Score est le score final d un parametre #Impact_Score est le poids d un parametre dans la decision finale #Le score final est la somme des score individuels ponderes par leur impact score #Si un score n est pas disponible sa part de score est redistribuee set Score "0.0" set Score_PId "" set Score_Cover "" set Score_Residue "" set Score_Domain "" set Impact_Score_PId "0.2" set Impact_Score_Cover "0.1" set Impact_Score_Residue "0.4" set Impact_Score_Domain "0.3" set Impact_Score_Redis "0.0" set Nb_Redis "0" set ListeImpactScores [list Impact_Score_PId Impact_Score_Cover Impact_Score_Residue Impact_Score_Domain] set Nb_Score [llength $ListeImpactScores] set Score_PId [LesResultatsARPAnalyses "$Famille,PId,$VraiAccess" PId "LaValeurMerci"] set Score_Cover [LesResultatsARPAnalyses "$Famille,Cover,$VraiAccess" Cover "LaValeurMerci"] set NbGroupOk [LesResultatsARPAnalyses "$Famille,NbGroupOk" "LaValeurMerci"] set NbGroupTotal [LesResultatsARPAnalyses "$Famille,NbGroupTotal" "LaValeurMerci"] set NbGroupGap [LesResultatsARPAnalyses "$Famille,NbGroupGap" "LaValeurMerci"] set NbDomainOk [LesResultatsARPAnalyses "$Famille,NbDomainOk" "LaValeurMerci"] set NbDomainTotal [LesResultatsARPAnalyses "$Famille,NbDomainTotal" "LaValeurMerci"] set NbDomainGap [LesResultatsARPAnalyses "$Famille,NbDomainGap" "LaValeurMerci"] #Dans le cas ou un des scores n est pas calcule. #On ne retient pas son score et on redistribue son Impact_score if {$NbGroupTotal == "" || $NbGroupTotal == "0"} { set Score_Residue 0 set Impact_Score_Redis [expr {$Impact_Score_Redis + 0.4}] set Impact_Score_Residue "0.0" incr Nb_Redis } else { #Espionne "Res $NbGroupOk -- $NbGroupTotal" #Espionne "[expr (($NbGroupOk*1.0) / $NbGroupTotal)]" set Score_Residue "[expr {($NbGroupOk*1.0) / $NbGroupTotal}]" } if {$NbDomainTotal == "" || $NbDomainTotal == "0"} { set Score_Domain 0 set Impact_Score_Redis [expr {$Impact_Score_Redis + 0.3}] set Impact_Score_Domain "0.0" incr Nb_Redis } else { #Espionne "Domain $NbDomainOk -- $NbDomainTotal" #Espionne "[expr (($NbDomainOk*1.0) / $NbDomainTotal)]" #ATTENTION ON CONSIDERE QUE UNE SEULE SEQUENCE SUFFIE POUR DIRE SI UN GROUPE EST OK ##if {$NbDomainOk != "0" && [expr $NbDomainOk + $NbDomainGap]>=[expr $NbDomainTotal]} {} if {[expr {$NbDomainOk + $NbDomainGap}]>=[expr $NbDomainTotal]} { set NbDomainOk [expr {$NbDomainOk + $NbDomainGap}] } set Score_Domain "[expr {($NbDomainOk*1.0) / $NbDomainTotal}]" } #Si on doit redistribuer l impact score sur les autres if {$Nb_Redis!="0"} { set Impact_Score_Redis [expr {($Impact_Score_Redis * 1.0) / ($Nb_Score - $Nb_Redis)}] foreach Score $ListeImpactScores { if {[set $Score]=="0.0"} { continue } else { set $Score [expr [set $Score] + $Impact_Score_Redis] } } } #Espionne "[format "Impact Score: %5.1f %5.1f %5.1f %5.1f | %5.1f %2d" $Impact_Score_PId $Impact_Score_Cover $Impact_Score_Residue $Impact_Score_Domain $Impact_Score_Redis $Nb_Redis]" #Calcul du score final set Score_PId [expr {$Score_PId * 100.0}] set Score_Cover [expr {$Score_Cover * 100.0}] set Score_Residue [expr {$Score_Residue * 100.0}] set Score_Domain [expr {$Score_Domain * 100.0}] LesResultatsARPAnalyses "$Famille,Score_PId_ini" $Score_PId "Positionne" LesResultatsARPAnalyses "$Famille,Score_Cover_ini" $Score_Cover "Positionne" LesResultatsARPAnalyses "$Famille,Score_Residue_ini" $Score_Residue "Positionne" LesResultatsARPAnalyses "$Famille,Score_Domain_ini" $Score_Domain "Positionne" #LesResultatsARPAnalyses "$Famille,Score_ini" $Score "Positionne" set Score_PId [expr {$Score_PId * $Impact_Score_PId}] set Score_Cover [expr {$Score_Cover * $Impact_Score_Cover}] set Score_Residue [expr {$Score_Residue * $Impact_Score_Residue}] set Score_Domain [expr {$Score_Domain * $Impact_Score_Domain}] set Score [expr {($Score_PId + $Score_Cover + $Score_Residue + $Score_Domain) * 1.0}] set Score [format "%5.1f" $Score] if {[Verbose_Mode]} { set TextLog "[format "%7s score: %5.1f %1s | %5.1f %5.1f %5.1f %5.1f" $Famille $Score % $Score_PId $Score_Cover $Score_Residue $Score_Domain]" AjouteAuARPLog "$TextLog" } set TabResultat($Famille,Score_PId) $Score_PId set TabResultat($Famille,Score_Cover) $Score_Cover set TabResultat($Famille,Score_Residue) $Score_Residue set TabResultat($Famille,Score_Domain) $Score_Domain set TabResultat($Famille,Score) $Score LesResultatsARPAnalyses "$Famille,Score_PId" $Score_PId "Positionne" LesResultatsARPAnalyses "$Famille,Score_Cover" $Score_Cover "Positionne" LesResultatsARPAnalyses "$Famille,Score_Residue" $Score_Residue "Positionne" LesResultatsARPAnalyses "$Famille,Score_Domain" $Score_Domain "Positionne" LesResultatsARPAnalyses "$Famille,Score" $Score "Positionne" if {[expr $Best_Score < $Score]} { set Best_Score $Score set Best_Family $Famille } } set Texte "The best family chosen for your query is $Best_Family with score = $Best_Score." LesResultatsARPAnalyses "Result" $Texte "Positionne" LesResultatsARPAnalyses "BestScore" $Best_Score "Positionne" LesResultatsARPAnalyses "BestFamily" $Best_Family "Positionne" foreach F $LesVraisFamilles { if {! [info exists TabResultat($F,Score)]} { LesResultatsARPAnalyses "$F,Score_PId" "No" "Positionne" LesResultatsARPAnalyses "$F,Score_Cover" "No" "Positionne" LesResultatsARPAnalyses "$F,Score_Residue" "No" "Positionne" LesResultatsARPAnalyses "$F,Score_Domain" "No" "Positionne" LesResultatsARPAnalyses "$F,Score" "No" "Positionne" } } if {[info exists TabResultat]} {array unset TabResultat "*"} } #5 Fin du programme on vide la memoire (fait dans ARPAnno.tcl) et on supprime les fichiers ########################################################################################## set LesFichiersASupprimer "" foreach F $LesFichiersASupprimer { if {[file exists $F]} {file delete -force $F} } #LesResultatsARPAnalyses UnsetAll #DechargeLesResidusDesARPs #DechargeLesDomainesDesARPs return "" } proc ARPAnno_Result_HTML {} { Wup "Permet de presenter les resultats sous une forme plus jolie" Wup "Affichage sous la forme d un tableau au format HTML" #On recupere le resultat final #si c une actin on le dit et c tout #si c une orphan on ajoute le lien vers le blastp contre les banques dediees set BestFam [LesResultatsARPAnalyses "BestFamily" "LaValeurMerci"] set Resultat [LesResultatsARPAnalyses "Result" "LaValeurMerci"] if {[regexp -nocase "actin" $BestFam]} { return "[join $Resultat "\n"]" } elseif {[regexp -nocase "orphan" $BestFam]} { set VraiAccess "[LesResultatsARPAnalyses "VraiAccess" "LaValeurMerci"]" set T "Orphans" set FichierBlast "${VraiAccess}_${T}.blastp" if {[file exists "[RepARPAnnoWeb]/$FichierBlast"]} { set Texte "The blast result is available here" } lappend Resultat $Texte return "[join $Resultat "\n"]" } set TexteResultat "" lappend TexteResultat "
" lappend TexteResultat "" lappend TexteResultat "" foreach F [list Family Score GID pCover pDR pDI] { lappend TexteResultat "" } lappend TexteResultat "" set VraiAccess "[LesResultatsARPAnalyses "VraiAccess" "LaValeurMerci"]" set LesVraisFamilles [LesResultatsARPAnalyses "LesFamilles" "LaValeurMerci"] foreach Famille $LesVraisFamilles { lappend TexteResultat "" set Score_PId [LesResultatsARPAnalyses "$Famille,Score_PId" "LaValeurMerci"] set Score_Cover [LesResultatsARPAnalyses "$Famille,Score_Cover" "LaValeurMerci"] set Score_Residue [LesResultatsARPAnalyses "$Famille,Score_Residue" "LaValeurMerci"] set Score_Domain [LesResultatsARPAnalyses "$Famille,Score_Domain" "LaValeurMerci"] set Score [LesResultatsARPAnalyses "$Famille,Score" "LaValeurMerci"] set Score_PId [LesResultatsARPAnalyses "$Famille,Score_PId_ini" "LaValeurMerci"] set Score_Cover [LesResultatsARPAnalyses "$Famille,Score_Cover_ini" "LaValeurMerci"] set Score_Residue [LesResultatsARPAnalyses "$Famille,Score_Residue_ini" "LaValeurMerci"] set Score_Domain [LesResultatsARPAnalyses "$Famille,Score_Domain_ini" "LaValeurMerci"] foreach V [list Score_PId Score_Cover Score_Residue Score_Domain Score] { if { [set $V] == "No"} { continue } elseif {[set $V] == ""} { set [set V] "No" } else { set [set V] [format "%5.1f" [set $V]] } } if {$Famille==[LesResultatsARPAnalyses "BestFamily" "LaValeurMerci"]} { set GoodColor "orange" } else { set GoodColor "gainsboro" } set i 0 foreach R [list $Famille $Score $Score_PId $Score_Cover $Score_Residue $Score_Domain] { incr i set Color $GoodColor if {$i=="1"} { #set FichierMSF "${VraiAccess}_${R}.xml" set FichierMSF "${VraiAccess}_${R}.msf" set FichierMSF "${VraiAccess}_${R}.html" set FichierBlast "${VraiAccess}_${R}.blastp" if {[file exists "[RepARPAnnoWeb]/$FichierMSF"]} { set R "$R" } elseif {[file exists "[RepARPAnnoWeb]/$FichierBlast"]} { set R "$R" } } if {$i=="2"} { if { $Color != "orange"} { set Color "skyblue" } set R "$R" } lappend TexteResultat "" } lappend TexteResultat "" } lappend TexteResultat "
$F
$R
" if {$Resultat != ""} { lappend TexteResultat "
" lappend TexteResultat "$Resultat" } return "[join $TexteResultat "\n"]" } proc ARPAnno_Result_Text {} { Wup "Permet de presenter les resultats sous une forme plus jolie" Wup "Affichage sous la forme d un tableau separe par des tabulations" #On recupere le resultat final #si c est une actin ou une orphan on le dit et c est tout set Resultat [LesResultatsARPAnalyses "Result" "LaValeurMerci"] if {[regexp "actin|orphan" $Resultat]} { return "$Resultat" } set TexteResultat "" set LesNoms [list Family Score GID pCover pDR pDI] set LesNoms [join $LesNoms "\t"] lappend TexteResultat "$LesNoms" set LesVraisFamilles [LesResultatsARPAnalyses "LesFamilles" "LaValeurMerci"] foreach Famille $LesVraisFamilles { set Score_PId [LesResultatsARPAnalyses "$Famille,Score_PId" "LaValeurMerci"] set Score_Cover [LesResultatsARPAnalyses "$Famille,Score_Cover" "LaValeurMerci"] set Score_Residue [LesResultatsARPAnalyses "$Famille,Score_Residue" "LaValeurMerci"] set Score_Domain [LesResultatsARPAnalyses "$Famille,Score_Domain" "LaValeurMerci"] set Score [LesResultatsARPAnalyses "$Famille,Score" "LaValeurMerci"] foreach V [list Score_PId Score_Cover Score_Residue Score_Domain Score] { if { [set $V] == "No"} { continue } elseif {[set $V] == ""} { set [set V] "No" } else { set [set V] [format "%5.1f" [set $V]] } } set Resultat [list $Famille $Score $Score_PId $Score_Cover $Score_Residue $Score_Domain] lappend TexteResultat "[join $Resultat "\t"]" } set Liste "" lappend Liste "Access" foreach F $LesVraisFamilles { lappend Liste $F } lappend TexteResultat "[join $Liste "\t"]" set VraiAccess [LesResultatsARPAnalyses "VraiAccess" "LaValeurMerci"] set Liste "" lappend Liste $VraiAccess foreach F $LesVraisFamilles { set Score [LesResultatsARPAnalyses "$F,Score" "LaValeurMerci"] if { $Score == ""} { set Score "No" } elseif {$Score != "No"} { set Score [format "%5.1f" $Score] } lappend Liste $Score } lappend TexteResultat "[join $Liste "\t"]" return "[join $TexteResultat "\n"]" #Obsolete au cas ou on veuille afficher les nombre de residus sur Max residus et pareil pour insertions #3-2 Affiche les resultats ########################## #protein|q9gzn1|arp6_human is an ARP6 # PId NbGroupOk NbGroupTotal # : 1.00 2 2 #Group : 1 2 #Result : 1/1 3/3 set PId "" set Cover "" set NbGroupOk "" set NbGroupTotal "" if {0 && $Res != "-1"} { #On recupere les donnees stockees en memoire set PId [LesResultatsARPAnalyses "$Famille,PId,$VraiAccess" PId "LaValeurMerci"] set Cover [LesResultatsARPAnalyses "$Famille,Cover,$VraiAccess" Cover "LaValeurMerci"] set NbGroupOk [LesResultatsARPAnalyses "$Famille,NbGroupOk" "LaValeurMerci"] set NbGroupTotal [LesResultatsARPAnalyses "$Famille,NbGroupTotal" "LaValeurMerci"] set Ligne [format "%-7s %-6s %-10s %-15s" "" PId NbGroupOk NbGroupTotal] Espionne "$Ligne" set Ligne [format "%-7s: %-6s %-10s %-15s" "" $PId $NbGroupOk $NbGroupTotal] Espionne "$Ligne" set Ligne1 [format "%-7s: " Group] set Ligne2 [format "%-7s: " Result] set NbGroup [LesResultatsARPAnalyses $Famille,NbGroupTotal "LaValeurMerci"] for {set Gr 1} {$Gr<=$NbGroup} {incr Gr} { append Ligne1 [format "%-5s" $Gr] set NbResiduOk [LesResultatsARPAnalyses $Famille,$Gr,NbResiduOk "LaValeurMerci"] set NbResiduTotal [LesResultatsARPAnalyses $Famille,$Gr,NbResiduTotal "LaValeurMerci"] append Ligne2 [format "%-5s" "$NbResiduOk/$NbResiduTotal"] } Espionne "$Ligne1" Espionne "$Ligne2" Espionne "" } #3-3 Affiche les resultats ########################## #protein|q9gzn1|arp6_human is an ARP6 # PId NbGroupOk NbGroupTotal # : 1.00 2 2 #Group : 1 2 #Result : 1/1 3/3 #On recupere les donnees stockees en memoire set NbDomainOk "" set NbDomainTotal "" if {0 && $Dom != "-1"} { set NbDomainOk [LesResultatsARPAnalyses "$Famille,NbDomainOk" "LaValeurMerci"] set NbDomainTotal [LesResultatsARPAnalyses "$Famille,NbDomainTotal" "LaValeurMerci"] set Ligne [format "%-7s %-11s %-15s" "" NbDomainOk NbDomainTotal] Espionne "$Ligne" set Ligne [format "%-7s %-10s %-15s" "" $NbDomainOk $NbDomainTotal] Espionne "$Ligne" set Ligne1 [format "%-7s: " Domain] set Ligne2 [format "%-7s: " Result] #set NbDomainTotal [LesResultatsARPAnalyses $Famille,NbDomainTotal "LaValeurMerci"] for {set Do 1} {$Do<=$NbDomainTotal} {incr Do} { append Ligne1 [format "%-5s" $Do] set NbAccOk [LesResultatsARPAnalyses "$Famille,$Do,NbAccOk" "LaValeurMerci"] set NbAccTeste [LesResultatsARPAnalyses "$Famille,$Do,NbAccTeste" "LaValeurMerci"] append Ligne2 [format "%-5s" "$NbAccOk/$NbAccTeste"] } Espionne "$Ligne1" Espionne "$Ligne2" Espionne "" } } proc ARPAnno_Stat {} { Wup "Permet de recuperer un certain nombre de stat sur le fontionnement de ARPAnno" #24.7.237.137 ARPAnno_0624_2338_0486 #24.7.237.137 ARPAnno_0624_2340_0723 #set LogFile "/srs6/WebTempFiles/ARPAnno/ARPAnno.log" set LogFile "[RepARPAnnoWeb]/ARPAnno.log" set Tab(Date) "" set Tab(LesDates) "" set F [open "$LogFile"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} set LigneSplitee [split $Ligne "\t"] set ID [lindex $LigneSplitee 0] set ARPAnnoID [lindex $LigneSplitee 1] #Date set Date "" regexp {^ARPAnno_([0-9][0-9])} $ARPAnnoID tmp Date if {[info exists Tab(Date,$Date)]} { #Cas ou a deja vu cette date if {[set Tab(Date)]==$Date || [set Tab(Date)]==""} { #ok pas de probleme on continue une serie de date en cours } else { set i 0 while {1} { incr i set Datetmp "${Date}_${i}" if {[info exists Tab(Date,$Datetmp)]} { continue } else { set Tab(Date) $Date set Date $Datetmp set Tab(Date,$Date) 1 lappend Tab(LesDates) $Date break } } } } else { set Tab(Date,$Date) 1 lappend Tab(LesDates) $Date Espionne ">>>>>>>>>>$Date" set Tab(Date) $Date } #Nombre de requete par date if {! [info exists TabDate($Date,request)]} { set TabDate($Date,request) "0" } incr TabDate($Date,request) #Liste des utilisateurs par date if {! [info exists TabDate($Date,user)]} { set TabDate($Date,user) "" } lappend TabDate($Date,user) $ID } close $F set ToSave "" foreach Date [set Tab(LesDates)] { set NbUser [llength [lsort -unique [set TabDate($Date,user)]]] set NbRequest [set TabDate($Date,request)] Espionne "$Date $NbRequest $NbUser" lappend ToSave [join [list $Date $NbRequest $NbUser] "\t"] } AppendAuFichier "/home/jmuller/ARPAnno.stat" [join $ToSave "\n"] return } proc ATGAenOverlap {} { set OneFour [Entre 4] set n 0 set nATGA 0 set nGTGA 0 set nTTGA 0 set nOver4A 0 set nOver4G 0 set nOver4T 0 foreach Nom [ListeDesPABs] { incr n set FN "[RepertoireDuGenome]/nuctfa/$Nom" if { ! [file exists $FN]} { continue } set SeqNuc [QueLaSequenceDuFichierTFA $FN] set Quatre [string range $SeqNuc 0 5] if { ! [info exists Cumul($Quatre)]} { set Cumul($Quatre) 0 } incr Cumul($Quatre) if {[regexp -nocase "^ATGA" $SeqNuc] } { incr nATGA set Ov [Overlap $Nom] if { ! [regexp "$OneFour bases. I begin" $Ov Match N] } { continue } incr nOver4A } if {[regexp -nocase "^GTGA" $SeqNuc] } { incr nGTGA set Ov [Overlap $Nom] if { ! [regexp "$OneFour bases. I begin" $Ov Match N] } { continue } incr nOver4G } if {[regexp -nocase "^TTGA" $SeqNuc] } { incr nTTGA set Ov [Overlap $Nom] if { ! [regexp "$OneFour bases. I begin" $Ov Match N] } { continue } incr nOver4T } } foreach {Q C} [array get Cumul] { set U [string range $Q 0 2] set D [string range $Q 3 5] lappend LL [list $Q $C [AAduCodon $U][AAduCodon $D]] } EspionneL [lsort -index 1 -integer $LL] return "$n $nATGA $nOver4A $nGTGA $nOver4G $nTTGA $nOver4T [file tail [RepertoireDuGenome]]" } proc ATV {NomFichierOuUrlPhylo {EnExec ""}} { if {$EnExec==""} { set EnExec "EnHtml" } if {$EnExec=="EnExec"} { set EnExec 1 } else { set EnExec 0 } set Nom $NomFichierOuUrlPhylo set FichierPhylo $NomFichierOuUrlPhylo if {[regexp "/" $FichierPhylo]} { set RepPhylo [file dirname $FichierPhylo] } else { if {[EstUnPAB $Nom]} { while 1 { set RepPhylo "phylosOrg" set FichierPhylo "[RepertoireDuGenome]/$RepPhylo/$Nom" if {[file exists $FichierPhylo]} { break } set RepPhylo "phylos" set FichierPhylo "[RepertoireDuGenome]/$RepPhylo/$Nom" if {[file exists $FichierPhylo]} { break } return "" } } } if {$EnExec} { if {$FichierPhylo!="" && ! [file exists $FichierPhylo]} { return "" } if {[catch {exec atv $FichierPhylo &} Message]} { return 0 } return 1 } if {[EstUnPAB $Nom]} { set UrlPhylo "[WscopeScience]&FileMoi&$RepPhylo&$Nom" } else { set UrlPhylo $NomFichierOuUrlPhylo } Html_ZeroToBody Html_Append "" Html_Append " " Html_Append "" Html_BodyToEnd return [Html_Get] } proc A_Voir_LesBanquesDesEntetesDeFrag {FichierFrag {Rep ""}} { if {$Rep==""} { set Rep "SameDir" } if {$Rep=="SameDir"} { set Rep "[file dirname $FichierFrag]" } set LesBanques {} foreach Ligne [LesLignesDuFichier $FichierFrag] { regsub {\:} $Ligne " " Ligne scan $Ligne "%s" Banque lappend LesBanques $Banque } set LesBonnesBanques {} foreach Banque $LesBanques { set Banque [file tail $Banque] set BonneBanque "$Rep/$Banque" set Nhr "$BonneBanque.nhr" if { ! [file exists $Nhr]} { FaireLire "$Nhr n'existe pas" } if {[catch {set Name [exec name $Banque]} Message]} { FaireLire "Problem with 'exec name $Banque'\ I got message \n$Message" continue } if {[regexp "^@GenDBConfigFiles" $Name]} { regsub "^@" $Name "" Name set NameDir [lindex [split $Name ":"] 0] set Ferme [lindex [split $Name ":"] 1] if {[catch {set Dir [exec name $NameDir]} Message]} { FaireLire "Problem with 'exec name $NameDir'\ I got message \n$Message" continue } set Farm "$Dir/$Ferme" if { ! [file exists $Farm]} { FaireLire "$Farm doesn't exists" ; continue } foreach B [LesBanquesDeLaFerme $Farm] { Espionne "B $B" if {[catch {set NameDeB [exec name $B]} Message]} { FaireLire "Problem with 'exec name $Banque'\ I got message \n$Message" continue } set NameDirDeB [lindex [split $NameDeB ":"] 0] if {[catch {set DirDeB [exec name $NameDirDeB]} Message]} { FaireLire "Problem with 'exec name $NameDirDeB'\ I got message \n$Message" continue } lappend LesBonnesBanques "$BonneBanque $DirDeB $NameDeB" } } else { set NameDir [lindex [split $Name ":"] 0] if {[catch {set Dir [exec name $NameDir]} Message]} { FaireLire "Problem with 'exec name $NameDir'\ I got message \n$Message" continue } lappend LesBonnesBanques "$BonneBanque $Dir $Name" } } return $LesBonnesBanques } proc AberrationParPatient {LimInf LimSup {LesPos ""} {LesNoms ""}} { # -> Compter le nb d'aberrations par patient # liste des cas #set LesCas {Oligo806 Oligo807 Oligo809 Oligo810 Oligo811 Oligo812 Oligo814 Oligo815 Oligo816 Oligo817 Oligo818 Oligo819 Oligo820 Oligo821 Oligo822 Oligo823 Oligo825 Oligo826 Oligo827} #set LesCas {BAC806 BAC807 BAC809 BAC810 BAC811 BAC812 BAC814 BAC815 BAC816 BAC817 BAC818 BAC819 BAC820 BAC821 BAC822 BAC823 BAC825 BAC826 BAC827} set LesCas {BAC806 BAC807 BAC809 BAC810 BAC811 BAC812 BAC814 BAC815 BAC816 BAC817 BAC818 BAC819 BAC820 BAC821 BAC822 BAC823 BAC825 BAC826 BAC827 Oligo806 Oligo807 Oligo809 Oligo810 Oligo811 Oligo812 Oligo814 Oligo815 Oligo816 Oligo817 Oligo818 Oligo819 Oligo820 Oligo821 Oligo822 Oligo823 Oligo825 Oligo826 Oligo827} Espionne [llength $LesCas] set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} # pour comparaison BAC vs oligo: pas possible sur chro X et Y a cause du mismatch fait pour BAC mais pas pour Oligo... #set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22} ### pour chaque fichier CGH Segmente ### foreach NomFichier $LesCas { set NomFichierSeg "$NomFichier\.seg" set FichierSeg "[RepertoireDuGenome]/PRIMA_CGH_SEG/$NomFichierSeg" #Espionne $FichierSeg set LesAberrations "" #### Pour chaque chromosome ### foreach Chromosome $ListeChro { #Espionne $Chromosome set x [InterrogeFichierSEG $FichierSeg "unset"] ChargeFichierSEG TabS $FichierSeg $Chromosome $LesPos if {[info exists TabS($FichierSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabS($FichierSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabS($FichierSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] set Val [format "%.2f" [expr $Val*1.0]] if {($Val>0 && $Val>=$LimSup) || ($Val<0 && $Val<=$LimInf)} { lappend LesAberrations "$NomFichier\t$Chromosome\t$PosInf\t$PosSup\t$Val" } } } } } #Espionne [llength $LesAberrations] lappend ListeTotale "$NomFichier\t[llength $LesAberrations]" SauveLesLignes $LesAberrations dans "[RepertoireDuGenome]/aberrations/$NomFichier$LimSup" } SauveLesLignes [lsort -decreasing -index 1 -integer $ListeTotale] dans "[RepertoireDuGenome]/aberrations/total$LimSup" return } proc AbsRef2Seq {n pos} { #set s [set ::Sequences($n)] set s [set ::Sref($n)] set s [string range $s 0 $pos] set s [string map {"." ""} $s] set pseq [expr {[string length $s] - 1}] #set pseq [string length $s] return $pseq } proc Ac1Ac2vide {} { set total 0; set D 0; set M 0; set N 0; set O 0; set P 0 set cas1 0; set cas1a 0; set cas1b 0; set cas2 0; set cas3 0; set cas4 0 foreach I [RetChip5 ListOf Index] { incr total set LesAcProt {} set TousLesGenresProt {} array unset LesGenresProt set onasourisprot 0 set ListAcsParGn {}; set BigList {} set LesAcsDna {} set genenamefait 0 set LesAcsDeLaLigne "" set Des1 [RetChip5 $I "description_customer"] set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "DNA_acc"] set Ac2 [RetChip5 $I "refseq_PIQOR"] set Ac3 [RetChip5 $I "prot_acc"] set Ac4 [RetChip5 $I "prot_acc_PIQOR"] if { ($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && (($Ac3!="" && ![regexp {\?} $Ac3]) || $Ac4!="")} { Espionne "" #Ac3=prot_acc Ac4=prot_acc_piqor incr D Espionne "ligne $I Ac3=$Ac3 Ac4=$Ac4" set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 if {$Ac3!="" && $Ac4!=""} { incr M set Ac3Ac4 "$Ac3,$Ac4" set LesAcProt [split $Ac3Ac4 ","] } elseif {$Ac3!="" && ![regexp {\?} $Ac3]} { incr N set LesAcProt [split $Ac3 ","] } elseif {$Ac4!=""} { incr O set LesAcProt [split $Ac4 ","] } set LesAcProt [ListeSansDoublon $LesAcProt] Espionne $LesAcProt foreach AcProt $LesAcProt { set GenreProt [OrgDuProt $AcProt] Espionne "AcProt $AcProt GenreProt $GenreProt" if {$GenreProt==""} { #peut mettre toutes les variables a vide Espionne "attention pas fiche" set pasfiche 1 } LConcat TousLesGenresProt $GenreProt set LesGenresProt($AcProt) $GenreProt } set TousLesGenresProt [ListeSansDoublon $TousLesGenresProt] foreach ChaqueGenreProt $TousLesGenresProt { if {[regexp {^Mus} $ChaqueGenreProt]} { set onasourisprot 1 } } if {$onasourisprot} { Espionne "cas1"; incr cas1 foreach AcProt $LesAcProt { set ListeDesAcs1 {}; set ListeDesAcs2 {}; set LesAcsDnaProv {} if {[regexp {^Mus} $LesGenresProt($AcProt)]} { set ResultParProt [AttriDesAcDnaParProt $AcProt] Espionne "ResultParProt $ResultParProt" set ResultParGb [AttriDesAcDnaParGb $AcProt] Espionne "ResultParGb $ResultParGb" if {$ResultParProt != ""} { Espionne "cas1a"; incr cas1a set ListeDesAcs1 [split $ResultParProt " "] } if {$ResultParGb != ""} { Espionne "cas1b"; incr cas1b set ListeDesAcs2 [split $ResultParGb " "] } set LesAcsDnaProv [concat $ListeDesAcs1 $ListeDesAcs2] foreach elmt $LesAcsDnaProv { LConcat LesAcsDna $elmt } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] } if {!$onasourisprot} { Espionne "cas2"; incr cas2 set genenamefait 1 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } if {!$genenamefait} { Espionne "cas3"; incr cas3 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } set BigList [concat $LesAcsDna $ListAcsParGn] set BigList [ListeSansDoublon $BigList] if {$BigList == {}} { set LesAcsDeLaLigne "" } else { set BigList [ListeSsElmtVide $BigList] set LesAcsDeLaLigne [join $BigList " "] } Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if {($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4==""} { Espionne "" incr P Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" Espionne "cas4"; incr cas4 set genenamefait 1 Espionne "$Des1 $Des2" set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] if {$ListAcsParGn == {}} { set LesAcsDeLaLigne "" } else { set ListAcsParGn [ListeSansDoublon $ListAcsParGn] set ListAcsParGn [ListeSsElmtVide $ListAcsParGn] set LesAcsDeLaLigne [join $ListAcsParGn " "] } Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } } Espionne "nombre de lignes= $total" Espionne "D $D";Espionne "M $M";Espionne "N $N";Espionne "O $O";Espionne "P $P" Espionne "cas1 $cas1";Espionne "cas1a $cas1a";Espionne "cas1b $cas1b" Espionne "cas2 $cas2";Espionne "cas3 $cas3";Espionne "cas4 $cas4" } proc Ac1Plein {} { set total 0; set C 0; set W 0; set X 0 set cas1 0; set cas1a 0; set cas1b 0; set cas1c 0 set cas2 0; set cas2a 0; set cas2b 0; set cas2c 0; set cas2d 0 set cas3 0; set cas4 0; set cas5 0; set cas6 0 foreach I [RetChip5 ListOf Index] { incr total set LesAc {} set Genre "" set TousLesGenres {} array unset LesGenres set onasouris 0 set LesAcsDna {} set LesAcProt {} set TousLesGenresProt {} array unset LesGenreAcProt set onasourisprot 0 set genenamefait 0 set ListAcsParGn {}; set BigList {} set LesAcsDeLaLigne "" set Des1 [RetChip5 $I "description_customer"] set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "DNA_acc"] set Ac2 [RetChip5 $I "refseq_PIQOR"] set Ac3 [RetChip5 $I "prot_acc"] set Ac4 [RetChip5 $I "prot_acc_PIQOR"] if { $Ac1!="" && ![regexp {\?} $Ac1] } { Espionne "" set Ac1 [string trim $Ac1] regsub -all " " $Ac1 "" Ac1 incr C Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" if {$Ac2==""} { incr W set LesAc [split $Ac1 ","] } if {$Ac2!=""} { set Ac2 [string trim $Ac2] regsub -all " " $Ac2 "" Ac2 incr X set Ac1Ac2 "$Ac1,$Ac2" set LesAc [split $Ac1Ac2 ","] } set LesAc [ListeSansDoublon $LesAc] set LesAc [ListeSsElmtVide $LesAc] Espionne $LesAc foreach Ac $LesAc { set Genre [OrgDuNmOuGb $Ac] Espionne "Ac $Ac Genre $Genre" if {$Genre == ""} {Espionne "attention pas fiches"} LConcat TousLesGenres $Genre set LesGenres($Ac) $Genre } set TousLesGenres [ListeSansDoublon $TousLesGenres] foreach ChaqueGenre $TousLesGenres { if {[regexp {^Mus} $ChaqueGenre]} { set onasouris 1 } } if {$onasouris} { Espionne "cas1"; incr cas1 foreach Ac $LesAc { set LesNmRefSeq {}; set LesNvxNm {} if {[regexp {^Mus} $LesGenres($Ac)]} { Espionne "Ac $Ac" if { ![regexp {^NM_} $Ac] && ![regexp {^XM_} $Ac] && ![regexp {^NR_} $Ac]} { set NM [MrnaRefseqUcscMouse $Ac "Nm"] Espionne "NM $NM" if { $NM != "" } { Espionne "cas1a"; incr cas1a set LesNmRefSeq [split $NM " "] foreach NmRefSeq $LesNmRefSeq { set GenreNmRefSeq [OrgDuNmOuGb $NmRefSeq] Espionne "$NmRefSeq $GenreNmRefSeq" if {[regexp {^Mus} $GenreNmRefSeq]} { LConcat LesNvxNm $NmRefSeq } } set LesNvxNm [ListeSansDoublon $LesNvxNm] set NMjoint [join $LesNvxNm " "] Espionne "NMjoint $NMjoint" LConcat LesAcsDna "$Ac $NMjoint" } else { Espionne "cas1b"; incr cas1b LConcat LesAcsDna $Ac } } else { Espionne "cas1c"; incr cas1c LConcat LesAcsDna $Ac } } } } Espionne "cas2" incr cas2 #travail sur prot Ac3=$Ac3 Ac4=$Ac4 if {$Ac3!="" || $Ac4!=""} { Espionne "cas2a"; incr cas2a if {$Ac3!="" && $Ac4!=""} { Espionne "cas2b"; incr cas2b set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 set Ac3Ac4 "$Ac3,$Ac4" set LesAcProt [split $Ac3Ac4 ","] } elseif {$Ac3!=""} { set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 Espionne "cas2c"; incr cas2c set LesAcProt [split $Ac3 ","] } elseif {$Ac4!=""} { set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 Espionne "cas2d"; incr cas2d set LesAcProt [split $Ac4 ","] } set LesAcProt [ListeSansDoublon $LesAcProt] set LesAcProt [ListeSsElmtVide $LesAcProt] EspionneL $LesAcProt foreach AcProt $LesAcProt { set GenreAcProt [OrgDuProt $AcProt] Espionne "$AcProt $GenreAcProt" if {$GenreAcProt==""} {Espionne "attention pas fiches" } LConcat TousLesGenresProt $GenreAcProt set LesGenreAcProt($AcProt) $GenreAcProt } set TousLesGenresProt [ListeSansDoublon $TousLesGenresProt] foreach ChaqueGenreProt $TousLesGenresProt { if {[regexp {^Mus} $ChaqueGenreProt]} { set onasourisprot 1 } } if {$onasourisprot} { Espionne "cas3"; incr cas3 foreach AcProt $LesAcProt { set ListeDesAcs1 {}; set ListeDesAcs2 {}; set LesAcsDnaProv {} if {[regexp {^Mus} $LesGenreAcProt($AcProt)]} { set ResultParProt [AttriDesAcDnaParProt $AcProt] Espionne "ResultParProt $ResultParProt" set ResultParGb [AttriDesAcDnaParGb $AcProt] Espionne "ResultParGb $ResultParGb" if {$ResultParProt != ""} { set ListeDesAcs1 [split $ResultParProt " "] } if {$ResultParGb != ""} { set ListeDesAcs2 [split $ResultParGb " "] } set LesAcsDnaProv [concat $ListeDesAcs1 $ListeDesAcs2] foreach elmt $LesAcsDnaProv { LConcat LesAcsDna $elmt } } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] Espionne "cas4"; incr cas4 set genenamefait 1 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } if {!$genenamefait && $Ac3=="" && $Ac4==""} { Espionne "cas5"; incr cas5 set genenamefait 1 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } if {!$genenamefait} { Espionne "cas6"; incr cas6 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } set BigList [concat $LesAcsDna $ListAcsParGn] set BigList [ListeSansDoublon $BigList] if {$BigList == {}} { set LesAcsDeLaLigne "" } else { set BigList [ListeSsElmtVide $BigList] set LesAcsDeLaLigne [join $BigList " "] } Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } } Espionne "nb de lignes= $total" Espionne "C $C";Espionne "W $W";Espionne "X $X" Espionne "cas1 $cas1";Espionne "cas1a $cas1a";Espionne "cas1b $cas1b";Espionne "cas1c $cas1c" Espionne "cas2 $cas2";Espionne "cas2a $cas2a";Espionne "cas2b $cas2b";Espionne "cas2c $cas2c";Espionne "cas2d $cas2d" Espionne "cas3 $cas3";Espionne "cas4 $cas4";Espionne "cas5 $cas5";Espionne "cas6 $cas6" } proc Ac1videAc2plein {} { set total 0; set B 0 foreach I [RetChip5 ListOf Index] { incr total set Des1 [RetChip5 $I "description_customer"] set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "DNA_acc"] set Ac2 [RetChip5 $I "refseq_PIQOR"] set Ac3 [RetChip5 $I "prot_acc"] set Ac4 [RetChip5 $I "prot_acc_PIQOR"] set LesNMs {} if {$Ac1=="" && $Ac2!=""} { incr B Espionne "ligne $I Ac1=$Ac1 et Ac2=$Ac2" set LesNMs [split $Ac2 ","] foreach NM $LesNMs { set GetzOut "" #set Commande "getz \"\(\\\[refseqrelease-acc:$NM\\\]\|\\\[refseqnew-acc:$NM\\\]\)\!\(\\\[refseqnew-acc:$NM\\\]>\\\[refseqrelease-acc:$NM\\\]\)\" \-view FastaSeqs" set Commande "getz \"\\\[refseq-acc:$NM\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} {Espionne ">bidon ficherefseqpiqor n'existe plus\natgc" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { Espionne "ATTENTION AU - 2 SEQ FASTA" } Espionne $GetzOut } } continue } } Espionne "total= $total" Espionne "B=$B" } proc AcDuId {ID {Fichier ""}} { global AcDuId if {$Fichier==""} { set Fichier "[Fiches]/IDAC.txt" } if {[info exists AcDuId($ID)]} { return $AcDuId($ID) } if {[info exists AcDuId("EstCharge")]} { return "" } set AcDuId("EstCharge") 1 foreach {N I A B} [LesLignesDuFichier $Fichier] { scan $N "%s %s" Bidon Nom if {[regexp "_" $Nom]} { continue } scan $I "%s %s" Bidon Id scan $A "%s %s" Bidon Ac regsub {\;} $Ac "" Ac set AcDuId($Id) $Ac } return [AcDuId $ID] } proc AcDuIdProt {ID} { set Commande "getz \"\\\[protein-id:$ID\\\]\" \-f acc" set GetzOut [eval exec $Commande] if { $GetzOut == "" } { set AccLu "" return $AccLu } set AccLu "" set AccLu [StringSuivant "AC" dans $GetzOut] regsub -all "\t" $AccLu"" AccLu regsub -all " " $AccLu "" AccLu return $AccLu } proc AcGnDeDesAccess {{FichierOuLesAccess ""} {FichierSortie ""}} { if {[llength $FichierOuLesAccess]==1 && [file exists $FichierOuLesAccess]} { set LesAccess {} foreach Access [LesLignesDuFichier $FichierOuLesAccess] { regsub -nocase {[^A-Z0-9\-_].*} $Access "" Access lappend LesAccess $Access } } else { set LesAccess $FichierOuLesAccess } # if {$LesAccess==""} { set LesAccess {C9K029 D3DX37 D3DX38 P0C7P4 P47985 Q13546 Q6ZNS2 Q8NBI3 Q8TCM3 Q96LT6 Q9NX33} } set I 0 while { $I < [llength $LesAccess]} { set LesA [lrange $LesAccess $I [expr [incr I 100] - 1]] foreach A $LesA G [GenenameDesAccess $LesA] D [DescriptionDesAccess $LesA] { lappend LeR "$A;$G;$D" } Espionne "$I $A;$G;$D" } if {$FichierSortie!=""} { return [SauveLesLignes $LeR dans $FichierSortie] } return $LeR } proc AccProtEtBanqueProt {} { set RepertoireProtEmbl "/genomics/link/EVImm/protembl" foreach F [lsort [glob -nocomplain "$RepertoireProtEmbl/EVI*"]] { if {![regexp {EVI0932} $F]} {continue} set Texte1 ""; set Texte2 ""; set Bq "" set Queue [file tail $F] Espionne "$Queue" foreach Ligne [LesLignesDuFichier $F] { Espionne "$Ligne" if {[regexp {^LOCUS} $Ligne]} {break} if {[regexp {^AC} $Ligne]} { scan $Ligne "%s %s" bidon AccProt regsub ";" $AccProt "" AccProt Espionne "$Queue $AccProt" set Commande1 "getz \"\\\[swissprot-acc:$AccProt\\\]\" \-vf id" set Texte1 [eval exec $Commande1] if {$Texte1!=""} { Espionne "1" set LesMots1 [split $Texte1 ":"] set Bq [lindex $LesMots1 0] set Tab($Queue) $Bq Espionne "$Bq" } if {$Texte1==""} { Espionne "2" set Commande2 "getz \"\\\[sptrembl-acc:$AccProt\\\]\" \-vf id" set Texte2 [eval exec $Commande2] set LesMots2 [split $Texte2 ":"] set Bq [lindex $LesMots2 0] set Tab($Queue) $Bq Espionne "$Bq" } break } } } #SauveLesLignes [array get Tab] dans TabCorres #array set Tab [LesLignesDuFichier toto] } proc AcceptInfoSeq {w} { global Defauts TEdit {*}[info globals "TD*"] InfosDeLaSeq toto "" set nseq [set TEdit(corr,$nseqIn)] if {$nseq in $LNOrdali} { FaireLire "Warning !\nSequence Name already exists ! Sequence Name should be unique !" return } foreach e [lsort [array names TEdit "*,*"]] { lassign [split $e ,] k nseqIn if {$k eq "corr" || $k eq "compaa" || $k eq "compGrp" || $k eq "compAll"} {continue} set r [set TEdit($e)] switch $k { "seqname" {set TDesSeqnames($nseq) $r} "access" {set TDesAccess($nseq) $r} "bid" {set TDesBId($nseq) $r} "desc" {set TDesDescriptifs($nseq) $r} "ec" { if {! [EstUnEC $r]} { FaireLire "Warning !\nThe E.C. number of sequence $nseq is badly formatted !\n It should be made of 4 positives numbers,\nseparated by a point character (.)." return } set TDesEC($nseq) $r } "taxid" {set TDesTaxId($nseq) $r} "groupe" {set TDuGroupeDesSeqs($nseq) $r} "orga" {set TDesOrganismes($nseq) $r} "frag" {set TDesFragment($nseq) $r} "lifed" {set TDesPhylum($nseq) $r} } } destroy $w EnregistreInfosSeqs ChangeNomsAff $Defauts(NomsAffiches) AfficheNomsEtSeqs RepeintNomsEtSeqs return } proc AcceptNewValues {w type what} { global EFeat LNOrdali TabSF ListeTypesDeFeatures NomTextSeq Sequences set EFeat(COk) 0 if {$what eq "dismiss"} { destroy [winfo toplevel $w] #ChangeFeatureForEditing return } set nc "" ; set nn "" ; set ns "" set nx1 "" ; set nx2 "" # residue ranges if {$type eq "newf"} { # residue range corresponds to selection set Lt [$NomTextSeq tag ranges slct] if {$Lt == {}} { FaireLire "Please do a selection first !" return } set Lpos $Lt } else { set nx1 "" ; set nx2 "" if {$EFeat(ZoneX1) != ""} { if {! [string is integer $EFeat(ZoneX1)] || ! [string is integer $EFeat(ZoneX2)]} { FaireLire "Beware !\nRange should contain integer values" return } set nx1 $EFeat(ZoneX1) set nx2 $EFeat(ZoneX2) } set Lpos $EFeat(LRanges) } # check color if {$EFeat(Color) != ""} { if {[CouleurPlusProcheDeTkCol $EFeat(Color)] == -1} { FaireLire "Beware !\nThe color specified does not exist !" return } set nc $EFeat(Color) } # check score if {$EFeat(Score) != ""} { if {! [string is double $EFeat(Score)] || ! [string is integer $EFeat(Score)]} { FaireLire "Beware !\n Score should be a real number" return } set ns $EFeat(Score) } # Note if {$EFeat(Note) != ""} { set nn [string trim $EFeat(Note)] } # current feature if {$type eq "newf"} { set ft $EFeat(Name) if {$ft eq ""} { FaireLire "Beware !\nA feature should have a name !" return } set ft [string map [list " " "_"] $ft] # update combo if necessary if {$ft ni $ListeTypesDeFeatures} { lappend ListeTypesDeFeatures $ft set ListeTypesDeFeatures [lsort -unique $ListeTypesDeFeatures] set EFeat(FTypes) [linsert $ListeTypesDeFeatures 0 "None"] $EFeat(FeatCombo) configure -values $EFeat(FTypes) set EFeat(Feat) $ft } } else { set ft $EFeat(Feat) } foreach {p1 p2} $Lpos { lassign [split $p1 .] y x1 lassign [split $p2 .] y x2 incr x2 -1 set nom [lindex $LNOrdali $y-1] if {$type eq "newf"} { # New Featue set nx1 $x1 ; set nx2 $x2 if {[string index [set Sequences($nom)] $nx1] eq "." || [string index [set Sequences($nom)] $nx2] eq "."} {set cs "global"} {set cs "local"} lappend TabSF(${nom},$ft) [list fstart $nx1 fstop $nx2 fcolor $nc fscore $ns fnote $nn fcsys $cs] } else { # New Item set Lf [set TabSF(${nom},$ft)] set i 0 foreach e $Lf { DecortiqueUneFeature $e d f c s n cs if {$d == $x1 && $f == $x2} { if {$nx1 eq ""} {set nx1 $x1} if {$nx2 eq ""} {set nx2 $x2} if {$nc eq ""} {set nc $c} if {$ns eq ""} {set ns $s} if {$nn eq ""} {set nn $n} if {$cs eq "local"} { if {[string index [set Sequences($nom)] $nx1] eq "." || [string index [set Sequences($nom)] $nx2] eq "."} {set cs "global"} {set cs "local"} } set new [list fstart $nx1 fstop $nx2 fcolor $nc fscore $ns fnote $nn fcsys $cs] break } incr i } set Lf [lreplace $Lf $i $i $new] set TabSF($nom,$ft) $Lf } } if {$type eq "edit"} { set EFeat(LItemSel) [list] } else { } set Efeat(COk) 1 destroy [winfo toplevel $w] $NomTextSeq configure -state normal $NomTextSeq tag remove slct 1.0 end $NomTextSeq configure -state disabled ChangeFeatureForEditing VueEditee 1 return } proc AccepteEtSauveDefauts {w} { global env OrdEtcDir Couleurs Defauts CoulTmp TmpDef TmpMap # Mapping if {[info exists TmpMap]} { set Lmap [list] set Le [list] foreach e [array names TmpMap "*,fg"] { lappend Le [lindex [split $e ,] 0] } foreach e [lsort $Le] { lappend Lmap [list $e [set TmpMap($e,fg)] [set TmpMap($e,bg)]] } set TmpDef(Mapping) $Lmap } array set Defauts [array get TmpDef] array set Couleurs [array get CoulTmp] unset -nocomplain TmpDef CoulTmp set f [file join $env(HOME) ".ordalierc"] if {! [catch {file copy -force -- [file join $OrdEtcDir .ordalierc] $f}]} { SauveOrdalieDefauts $f } destroy [winfo toplevel $w] font configure SeqFont -size [set Defauts(SeqFontSize)] -family [set Defauts(SeqFontFaml)] -weight [set Defauts(SeqFontWght)] SeqlabFont set Threshold [set Defauts(Threshold)] update idletasks return } proc Access2GO {Access} { if {[EstUnAccessPDB $Access]} {return} set AccessCourt $Access regsub {\-[0-9]+$} $Access "" AccessCourt set TousLesGO {} foreach Requete [Access2Requetes $AccessCourt] { if {[regexp -nocase "^go:" $Requete]} { lappend TousLesGO [string toupper $Requete] continue } foreach GO [2GO $Requete LesLiens] { set Type [GODB GO $GO LesTypes] set Def [GODB Type $Type GO $GO LesDefinitions] lappend TousLesGO [string toupper $GO] } } #Espionne "LesGODeRefDesGO [LesGODeRefDesGO $TousLesGO]" #Espionne "EnterrerLesAn [EnterrerLesAncetresGO [LesGODeRefDesGO $TousLesGO]]" #Espionne "result" return [ElimineLesRedondancesDansUneListe [EnterrerLesAncetresGO [LesGODeRefDesGO $TousLesGO]]] } proc Access2Kegg {Access} { return [PageInfo2Kegg [PageInfo $Access protein "id acc des dr"]] } proc Access2Requetes {Access} { if {[EstUnAccessPDB $Access]} {return} set AccessCourt $Access regsub {\-[0-9]+$} $Access "" AccessCourt #nG set Page [PageInfo $AccessCourt protein "DES DR Key"] set Page [PageInfo $AccessCourt uniprot "DES DR Key"] #set Page [join [LaSequenceDesBanques $Access $Access AccessOK "OnVeutNature"] "\n"] return [PageInfo2Requetes $Page] } proc AccessAlternatif {Access} { global AccessAlternatif global RepertoireDuGenome if {[info exists AccessAlternatif($Access)]} { return [set AccessAlternatif($Access)] } if {[info exists AccessAlternatif("EstCharge")]} { if {[regexp {[a-z]} $Access]} { return [AccessAlternatif [string toupper $Access]] } else { return "" } } set FichierAccessAlternatif "$RepertoireDuGenome/../accessalternatif" if { ! [file exists $FichierAccessAlternatif]} { return "" } foreach Ligne [LesLignesDuFichier $FichierAccessAlternatif] { scan $Ligne "%s %s" Ancien Nouveau set AccessAlternatif($Ancien) $Nouveau set AccessAlternatif([string toupper $Ancien]) $Nouveau set AccessAlternatif($Nouveau) $Ancien set AccessAlternatif([string toupper $Nouveau]) $Ancien } set AccessAlternatif("EstCharge") "EstCharge" return [AccessAlternatif $Access] } proc AccessCorrespondantAuxARPs {ARP} { Wup "Permet de recuperer les correspondances entre les sequences originelles et les boites gscope" global ARP2Acc if {[info exists ARP2Acc] && [info exists ARP2Acc($ARP)]} { return [set ARP2Acc($ARP)] } else { set ARP2Acc(ARP01) P42024 set ARP2Acc(ARP02) P42025 set ARP2Acc(ARP03) P38696 set ARP2Acc(ARP04) P45889 set ARP2Acc(ARP05) O15142 set ARP2Acc(ARP06) P32381 set ARP2Acc(ARP07) P45888 set ARP2Acc(ARP08) P32391 set ARP2Acc(ARP09) P47117 set ARP2Acc(ARP10) P32392 set ARP2Acc(ARP11) O96019 set ARP2Acc(ARP12) O94805 set ARP2Acc(ARP13) P80428 set ARP2Acc(ARP14) Q9V814 set ARP2Acc(ARP15) Q8N724 set ARP2Acc(ARP16) P53946 set ARP2Acc(ARP17) Q9VEC3 set ARP2Acc(ARP18) Q9GZN1 set ARP2Acc(ARP19) Q12509 set ARP2Acc(ARP20) P45890 set ARP2Acc(ARP21) Q12406 set ARP2Acc(ARP22) Q9H981 set ARP2Acc(ARP23) Q12386 set ARP2Acc(ARP24) Q9VX09 set ARP2Acc(ARP25) Q05123 set ARP2Acc(ARP26) Q9UTQ7 set ARP2Acc(ARP27) Q9NZ32 set ARP2Acc(ARP28) Q04549 set ARP2Acc(ARP29) Q9VWE8 set ARP2Acc(ARP30) Q9BYD9 set ARP2Acc(ARP31) Q9D9A6 set ARP2Acc(ARP32) Q9D9J3 set ARP2Acc(ARP33) Q9D9L5 set ARP2Acc(ARP34) Q9H568 set ARP2Acc(ARP35) Q9Y615 set ARP2Acc(ARP36) Q9Y614 set ARP2Acc(ARP37) Q9QY84 set ARP2Acc(ARP38) Q9QY83 set ARP2Acc(ARP39) Q20329 set ARP2Acc(ARP40) Q9LZY1 set ARP2Acc(ARP41) P02568 set ARP2Acc(ARP42) Q8RYC2 set ARP2Acc(ARP43) O96621 } if {[info exists ARP2Acc] && [info exists ARP2Acc($ARP)]} { return [set ARP2Acc($ARP)] } return "" } proc AccessDUneLigneBlast {Ligne {Nom ""}} { global RepertoireDuGenome Wup "Certains blast ont ! entre Access0 et Access1" regsub "!" $Ligne " " Ligne scan $Ligne "%s %s" Access0 Access1 if {[regexp {^AFF[0-9]{5}$} $Access0]} { if {[file exists "$RepertoireDuGenome/../AffyHS/nucembl/$Access0"]} { return "$RepertoireDuGenome/../AffyHS/nucembl/$Access0" } } if {[regexp "ClonV:" $Access0]} { set Vec [lindex [split $Access0 ":"] 1] if {[file exists "$RepertoireDuGenome/vecteurs/$Vec"]} { return "$RepertoireDuGenome/vecteurs/$Vec" } } if {[regexp "PABY:" $Access0]} { set PAB [lindex [split $Access0 ":"] 1] if {[file exists "$RepertoireDuGenome/../casimir/protembl/$PAB"]} { return "$RepertoireDuGenome/../casimir/protembl/$PAB" } } if {[regexp -nocase "PAE:" $Access0]} { set PAE [lindex [split $Access0 ":"] 1] if {[file exists "$RepertoireDuGenome/../Pyrobac/protembl/$PAE"]} { return "$RepertoireDuGenome/../Pyrobac/protembl/$PAE" } } if {[regexp -nocase "PFUR:" $Access0]} { set PFUR [lindex [split $Access0 ":"] 1] if {[file exists "$RepertoireDuGenome/../Pfuriosus/protembl/$PFUR"]} { return "$RepertoireDuGenome/../Pfuriok/protembl/$PFUR" } } if {[regexp "PFUR:" $Access0]} { set PFOK [lindex [split $Access0 ":"] 1] if {[file exists "$RepertoireDuGenome/../Pfuriok/protembl/$PFOK"]} { return "$RepertoireDuGenome/../Pfuriok/protembl/$PFOK" } } if { ! [info exists Access1]} { return $Access0 } Wup "Les copains" if { $Nom != "" && $Access1 != "" && [file exists "$RepertoireDuGenome/copains/$Nom/$Access1"]} { return "$Access1" } if { $Access1 != "" && [FetchTest "protein:$Access1"]} { return "protein:$Access1" } if { $Access1 != "" && [FetchTest "$Access1"]} { return "$Access1" } return $Access0 } proc AccessDeLaBoite {PAB {Quoi ""} {DefOuNon ""}} { Wup "Retourne l Access de la boite Prot mrna ou tfa originel ou boite" Wup "Attention que pour Homo sapiens" #Prot puis mrna puis nuctfa puis PAB set Access "" set OnATrouve 0 if {$Quoi=="protein"} {set OnATrouve 1} if {! $OnATrouve || $Quoi=="protein" || [string equal -nocase $Access ""]} { set Access [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" Protein Access] } if {! $OnATrouve || $Quoi=="mRNA" || [string equal -nocase $Access ""]} { set Access [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" mRNA Access] if {$Quoi=="mRNA"} {set OnATrouve 1} } if {! $OnATrouve && $Access == ""} { set FichierNuctfa "[RepertoireDuGenome]/nuctfa/$PAB" if {[file exists $FichierNuctfa]} { set Access [EnteteDuFichierTFA $FichierNuctfa "access"] } } if {$Access == "" } {set Access $PAB} if {$DefOuNon=="Definition"} { set Access [InterrogeBestProteinAndmRNAForeachOrga Access $Access Definition] } return "$Access" } proc AccessDeMonOrganisme {Nom} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" if {! [file exists $Fichier]} {return} ParseMACSIMS $Fichier macsims set Sequences $macsims(Noms) set MonOS [NotreOS] foreach Sequence $Sequences { set Organisme $macsims($Sequence,Organisme) if {[regexp "$MonOS" $Organisme]} { return $Sequence } } return "" } proc AccessDesPremieresProteines {} { set Access "" append Access "S55507\tPDIP protein disulfide-isomerase (EC 5.3.4.1) ER60 precursor - human\n" append Access "P06576\tATPB_HUMAN\n" append Access "XP_028869\tIDH1 isocitrate dehydrogenase 1 (NADP+), soluble\n" append Access "AAA52688\tHP haptoglobin precursor\n" append Access "NP_000282\tPGK1 phosphoglycerate kinase 1\n" append Access "NP_061819\tCMAS N-acetylneuraminic acid phosphate synthase; sialic acid synthase; sialic acid phosphate synthase\n" append Access "AAH03119\tATP5A1 Similar to ATP synthase, H+ transporting, mitochondrial F1 complex, alpha subunit, isoform1, cardiac muscle\n" append Access "NP_004030\tANXA2 annexin A2; annexin II; lipocortin II\n" append Access "NP_005909\tMDH2 malate dehydrogenase 2, NAD (mitochondrial)\n" append Access "NP_002809\tPSME2 proteasome (prosome, macropain) activator subunit 2 (PA28 beta); Proteasome activator subunit-2\n" append Access "1403294A\tMSMB gamma seminoprotein\n" append Access "1HTI_A \tTPI1 ChainA, Triosephosphate Isomerase (Tim) (E.C.5.3.1.1) complexed with 2-Phosphoglycolic Acid\n" append Access "NP_003177\tTAGLN transgelin; smooth muscle protein 22-alpha; 22kDA actin-binding protein; SM22-alpha\n" append Access "NP_006699\tGLO1 glyoxalase I; lactoyl glutathione lyase; lactoylglutathione lyase\n" append Access "NP_002558\tPBP prostatic binding protein; phosphatidylethanolamine binding protein\n" append Access "BAA21139\tKNP-I beta protein\n" append Access "NP_005070\tTPD52 tumor protein D52\n" append Access "NP_005498\tCFL1 cofilin 1 (non-muscle)\n" append Access "NP_003188\tTCEB1L transcription elongation factor B polypeptide 1-like; organ of Corti protein 2\n" append Access "NP_001961\tEIF5A eukaryotic translation initiation factor 5A; eIF5AI; eIF5A\n" append Access "1E3F_A\tTTR Chain A, Structure Of Human Transthyretin Complexed With BromoPhenols: A New Mode Of Binding\n" append Access "NP_001435\tFABP5 fatty acid binding protein 5 (psoriasis-associated); E-FABP\n" return $Access } proc AccessDuBanqueId {BanqueId} { regsub {^[^:]+:} $BanqueId "" BanqueId set Fiche [PageInfo $BanqueId "" acc] scan $Fiche "%s %s" ACC Access if {![info exists Access]} {return} regsub "\;$" $Access "" Access return $Access } proc AccessDuContigDuFragment {AccessDuFragment} { regsub {_[0-9]+$} $AccessDuFragment "" AccessDuContig return $AccessDuContig } proc AccessDuGI {GI} { set GI [string trim $GI] regsub "GI:" $GI "" GI set Page [PageInfo $GI genbankfull acc] if {$Page == ""} {return} scan $Page "%s %s" ACCESSION Access return $Access } proc AccessDuMiRNA {Nom} { set Fichier "[RepertoireDuGenome]/nuctfa/$Nom" set LesLignes [LesLignesDuFichier $Fichier] set Entete [lindex $LesLignes 0] set LesMots [split $Entete " "] set GN [lindex $LesMots 1] set DE [join [lrange $LesMots 2 end] " "] set Access [lindex $LesMots end] set BonDE [ExtractFromRefseq $Access AllMiRNA2907 [RepertoireDuGenome] GetDefinition] set GeneName $GN if { ! [regexp {\-V[0-9]+$} $GeneName] && [regexp {transcript variant ([0-9]+)} $BonDE Match V]} { append GeneName "-V$V" } append BonDE " from $Access" set BonneEntete ">$Nom $GeneName $BonDE" set LaSeq [lrange $LesLignes 1 end] SauveLesLignes [concat [list $BonneEntete] $LaSeq] dans "[RepertoireDuGenome]/nuctfaNew/$Nom" InformeSansDemander $Nom "ValiDE: $BonDE" InformeSansDemander $Nom "AccessRefseq: $Access" return $BonneEntete } proc AccessDuMiRNAPourTous {} { foreach Nom [ListeDesPABs] { Espionne [AccessDuMiRNA $Nom] } } proc AccessDuPlusProcheDansDisphy {Nom OrgaCherche} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/disphy/$Nom"] { scan $Ligne "%s %d %s" Orga Distance Access if {$Orga == $OrgaCherche} { return $Access } } return "" } proc AccessDuTFADeLaProteine {PAB} { Wup "Rend le banque Id du TFA" if {! [file exists $PAB]} {return ""} set F [open "$PAB"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [string range $Ligne 0 0] != ">"} {continue} regsub "^>" $Ligne "" Ligne set AccessLu "" set BanqueId "" set bidon "" scan $Ligne "%s %s %s" bidon BanqueId AccessLu } if { ($BanqueId==":" || $BanqueId=="Protein" || $BanqueId=="PROTEIN") && $AccessLu!=""} {set BanqueId $AccessLu} return $BanqueId } proc AccessDuTFADumRNA {PAB} { Wup "Rend le banque Id du TFA" if {! [file exists $PAB]} {return ""} set F [open "$PAB"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [string range $Ligne 0 0] != ">"} {continue} regsub "^>" $Ligne "" Ligne set AccessLu "" set BanqueId "" set bidon "" scan $Ligne "%s %s %s" bidon BanqueId AccessLu } if { ($BanqueId==":" || $BanqueId=="mRNA") && $AccessLu!=""} {set BanqueId $AccessLu} return $BanqueId } proc AccessEvi {Nom} { set BAcc [ExtraitInfo $Nom "BAcc"] set Access "" ScanLaListe [split $BAcc ":"] Banque Access return $Access } proc AccessFromHeader {Nom} { set Fichier "[RepertoireDuGenome]/prottfa/$Nom" if {[FileAbsent $Fichier]} { return "" } set Header [EnteteDuFichierTFA $Fichier] set Access [StringApres " from " dans $Header] return $Access } proc AccessHNR {} { foreach Nom [ListeDesPABs] { set Entete [EnteteDuFichierTFA [GscopeFile $Nom nuctfa]] set Access [lindex [LesMotsDeLaLigne $Entete] 5] InformeSansDemander $Nom "AccessProt: $Access" } exit } proc AccessNuc2GO {AccessNuc} { set LesGO {} foreach AccessProt [LesIdDeLaBanqueRelieALAccess $AccessNuc de genbankfull dans protein] { foreach GO [Access2GO $AccessProt] {lappend LesGO $GO} } return [EnterrerLesAncetresGO [LesGODeRefDesGO $LesGO]] } proc AccessOlida {access} { array set LesSequences {index {}} if {0} { # Récup les variants protéiques set varsplic "" catch {set varsplic [exec getz -e "(\[libs={varsplic}-ID:${access}*\] | \[libs-AccNumber:${access}*\])"]} foreach entry [splitFastaOlida $varsplic] { puts $entry regexp -nocase {^>((\w+)-(\d+))\|(\w+)\s+(.*)} [lindex [split $entry "\n"] 0] regMatch index protAccess variant id de # puts $index # puts $protAccess # puts $variant # puts $id # puts $entry lappend LesSequences(index) $index set LesSequences($index,access) $index set LesSequences($index,banque) "varsplic" set LesSequences($index,definition) [string trim $de] set LesSequences($index,protein) ">$entry" } exit } # Récupère les protéines set protein "" catch {set protein [exec getz -e "(\[libs={refseqp protein}-ID:${access}*\] | \[libs-AccNumber:${access}*\])"]} foreach entry [splitEmblOlida $protein] { puts $entry if {[regexp -lineanchor {^ID} $entry]} { # Entrée uniprot/embl if {[regexp -line {^DR\s+EMBL;\s+(\w+).*;\s+(\w+)\.} $entry regMatch nucAccess nucType]} { puts $nucAccess puts $nucType set nucEntry [exec getz -e "(\[libs={genbank}-AccNumber:${nucAccess}*\])"] puts $nucEntry } } } parray LesSequences # set getzOut [exec getz -e "(\[libs={genbankfull refseq refseqp protein varsplic pdb}-ID:${access}*\] | \[libs={genbankfull refseq refseqp protein varsplic}-AccNumber:${access}*\])"] } proc AccessRefseq {Nom} { return [ExtraitInfo $Nom "AccessRefseq"] } proc AccessToKeepOrNotToKeep {Access} { global MesAccessInterressants if {! [info exists MesAccessInterressants]} {MesAccessInterressants} if {[info exists MesAccessInterressants($Access)]} {return 0} else {return 1} } proc AceSubset {aAce contigIdx} { upvar $aAce ace set subset(contigIdx) $contigIdx set subset(alignmentName) $ace(alignmentName) set subset(name) $ace($contigIdx,name) set subset(length) $ace($contigIdx,length) set subset(reads) $ace($contigIdx,reads) set subset(segments) $ace($contigIdx,segments) set subset(strand) $ace($contigIdx,strand) set subset(consensus) $ace($contigIdx,consensus) set subset(basesQuality) $ace($contigIdx,basesQuality) set subset(index) $ace($contigIdx,index) set subset(lowestRelativeConsensusPosition) $ace($contigIdx,lowestRelativeConsensusPosition) foreach readIdx $ace($contigIdx,index) { set subset($readIdx,name) $ace($contigIdx,$readIdx,name) set subset($readIdx,strand) $ace($contigIdx,$readIdx,strand) set subset($readIdx,consensusPosition) $ace($contigIdx,$readIdx,consensusPosition) set subset($readIdx,length) $ace($contigIdx,$readIdx,length) set subset($readIdx,numWholeReads) $ace($contigIdx,$readIdx,numWholeReads) set subset($readIdx,numTagReads) $ace($contigIdx,$readIdx,numTagReads) set subset($readIdx,sequence) $ace($contigIdx,$readIdx,sequence) set subset($readIdx,qualityStart) $ace($contigIdx,$readIdx,qualityStart) set subset($readIdx,qualityEnd) $ace($contigIdx,$readIdx,qualityEnd) set subset($readIdx,alignmentStart) $ace($contigIdx,$readIdx,alignmentStart) set subset($readIdx,alignmentEnd) $ace($contigIdx,$readIdx,alignmentEnd) } return [array get subset] } proc AceToMacSim {inputFile {outputDir XmlContigs}} { set prefix [PreFixe] set numerotation [FormatDesNumerosPourCollection] if { ! [file isdirectory [RepertoireDuGenome]/$outputDir] } { puts "Creating [RepertoireDuGenome]/$outputDir" file mkdir [RepertoireDuGenome]/$outputDir } # Read ACE file and store results in ace array array set ace [readACEfile $inputFile] set ORFnumber 1 foreach contigIdx $ace(index) { puts $contigIdx array set contig [AceSubset ace $contigIdx] # Align sequences in the ace subset array puts "Aligning reads to consensus..." alignSequencesToConsensus contig # Generate XmlMacSim puts "Generating XmlMacSim..." set xml [generateXMLmacsim contig] # Writing... set fh [open [format "%s/%s/%s%${numerotation}" [RepertoireDuGenome] $outputDir $prefix $ORFnumber] w] puts $fh $xml close $fh incr ORFnumber } # Well done ! puts "Finished." # quickConvert $outputDir } proc ActaClusFilter {Cluster} { #Permet de retrouver dans un fichier de SBS quels sont ceux qui dans le fichier d'origine avaient un ACTACAN en 5' set FichierClu [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/Cluster4/Cluster$Cluster.tfa" "r"] set I 0 if { [file exists $ActaCluster] } { file delete $ActaCluster } while { [gets $FichierDes25 Ligne25] >=0 } { ScanLaListe $Ligne25 Sequence25 lappend Liste25 $Sequence25 } while { [gets $FichierClu LigneClu] >=0 } { incr I ScanLaListe $LigneClu SequenceClu foreach Seq $Liste25 { ScanLaListe $Seq Sequence set SBS [string range $Sequence 7 24] if { $SequenceClu == $SBS } { AppendAuFichier $ActaCluster ">Act$I" AppendAuFichier $ActaCluster "$Sequence" } } } } proc ActiChip1_0 {} { Wup "Permet de rendre la liste des PAB des oligos commandes pour ActiChip1_0" set Fichier "[RepertoireDuGenome]/fiches/ActiChip1_0.txt" global Oligo_ActiChip1_0 if {[info exists Oligo_ActiChip1_0]} { return $Oligo_ActiChip1_0 } if {! [file exists $Fichier]} {return ""} set Oligo_ActiChip1_0 "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} set PAB "" scan $Ligne "%s" PAB lappend Oligo_ActiChip1_0 $PAB } close $F set Oligo_ActiChip1_0 [lsort -unique $Oligo_ActiChip1_0] return $Oligo_ActiChip1_0 } proc ActiChip2_0 {} { Wup "Permet de rendre la liste des PAB des oligos commandes pour ActiChip2_0" set Fichier "[RepertoireDuGenome]/fiches/ActiChip2_1.txt" global Oligo_ActiChip2_0 if {[info exists Oligo_ActiChip2_0]} { return $Oligo_ActiChip2_0 } if {! [file exists $Fichier]} {return ""} set Oligo_ActiChip2_0 "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} set PAB "" scan $Ligne "%s" PAB lappend Oligo_ActiChip2_0 $PAB } close $F set Oligo_ActiChip2_0 [lsort -unique $Oligo_ActiChip2_0] return $Oligo_ActiChip2_0 } proc ActiChip2_0_Reference {File} { Wup "Cree un fichier avec la liste des PAB et des definitions" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set RepNuctfa "[RepertoireDuGenome]/nuctfa" set LesLignes "" foreach PAB [ActiChip2_0] { #On annote en recherchant les definitions set ProteinAccess "" set DesignAccess "" set Definition "" #Access utilise lors du design #un mRNA ou sequence originale (nuctfa) ####################################### set Query "$RepmRNA/$PAB" if {[file exists $Query]} { set DesignAccess [AccessDeLaBoite $PAB mRNA] } else { set Query "$RepNuctfa/$PAB" if {[file exists $Query]} { set DesignAccess [AccessDuTFADumRNA $Query] } else {set DesignAccess "$PAB"} } #Access et definition de la proteine correspondante ################################################### set ProteinAccess [AccessDeLaBoite $PAB protein] set Definition [AccessDeLaBoite $PAB protein Definition] #Definition de secours (mRNA ou access) ####################################### if { $Definition == "" && $DesignAccess != ""} { set Definition [AccessDeLaBoite $PAB mRNA Definition] if { $Definition == ""} { set Definition [lrange [DefDeAcc $DesignAccess genbankfull Def] 1 end] } } lappend LesLignes "$PAB\t$Definition" } AppendAuFichier $File [join $LesLignes "\n"] return "" } proc ActiChip3_0 {} { Wup "Permet de rendre la liste des PAB des oligos commandes pour ActiChip3_0" set Fichier "[RepertoireDuGenome]/fiches/ActiChip3_0.txt" global Oligo_ActiChip3_0 if {[info exists Oligo_ActiChip3_0]} { return $Oligo_ActiChip3_0 } if {! [file exists $Fichier]} {return ""} set Oligo_ActiChip3_0 "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} set PAB "" scan $Ligne "%s" PAB lappend Oligo_ActiChip3_0 $PAB } close $F set Oligo_ActiChip3_0 [lsort -unique $Oligo_ActiChip3_0] return $Oligo_ActiChip3_0 } proc ActiChipGenesOnWeb {{ListeDesNoms ""} {TitreSummary ""} args} { set LesHeadSup {} set I 0 foreach {PH LesV} $args { regsub "_" $PH " " PH scan $PH "%s %s" Pos Head incr Pos $I lappend LesHeadSup $Head set PosSup($Head) $Pos set K 0 foreach V $LesV { set ValSup($Head,$K) $V incr K } incr I } set FichierActinome "[RepertoireDuGenome]/TableauActiChip" set LesLignes [LesLignesDuFichier $FichierActinome] set LigneDeTete [lindex $LesLignes 0] set LesHeaders [split $LigneDeTete ";"] foreach Head $LesHeadSup { set LesHeaders [linsert $LesHeaders $PosSup($Head) $Head] } set NbHeaders [llength $LesHeaders] set Titre "Actinome Database $TitreSummary" set HeaderDuHtml "" #Html_ZeroToBody $Titre $HeaderDuHtml #Html_Append [H_Balise $Titre "h2"] Html_Append "" Html_BaliseOpen "html" Html_BaliseOpen "head" Html_Title "$Titre" Html_Append "" Html_Append "Actinome" Html_Append "
" Html_Append "
" Html_Append "Get Help" Html_Append "
" Html_Append "
" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "
" 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 } set K 0 foreach Ligne $LesLignes { Espionne "Debut$Ligne FIN" set LesValeurs [split $Ligne ";"] foreach Head $LesHeadSup { set P $PosSup($Head) set V $ValSup($Head,$K) set LesValeurs [linsert $LesValeurs $P $V] } incr I set Nom [lindex $LesValeurs 0] if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { if {$H=="ProbeSet" || $H=="Pathway"} { set LongV [string length $V] if {$LongV>=200} { set Milieu [expr $LongV / 2] set V "[string range $V 0 $Milieu]
[string range $V [expr $Milieu+1] end]" } } set Vue [BelleVueJean $H $V $Nom] lappend Liste $Vue } incr K } Html_TableFromList $Liste Html_Append "
" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "
" Html_Append "
" Html_Append "" Html_Append "Muller et al (2007) BMC Genomics doi: 10.1186/1471-2164-8-294" Html_Append "" Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "" Html_Append "If you have any problems or questions, please, feel free to contact us at jean.muller@igbmc.u-strasbg.fr" Html_Append "" Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "
" Html_BaliseClose "body" Html_BaliseClose "html" return [Html_Get "ZeroIt"] } proc AddACorrectedProteome {args} { #Telechargement des proteomes eval DownloadProteomes $args #Conversion pour Gscope FastaProteomeConverter "completeProteome.fasta" "completeConvertedProteome" #Lancement de Gscope pour la creation du projet puts "##########################################################" puts "Gscope va se lancer, réalisez les opération suivantes :" puts " - 'i need the file with all complete genomes' -->YES" puts " - 2eme fentre --> Acknowlegde" puts " - 'c'est pour un genome?' --> NO" puts " - 'c'est pour une collection?' --> YES" puts " - 'prefixe des ORFs' --> mettre un code 4 lettre (ex:AGAM pour anopheles gambiae)" puts " - 'Does it concern only one organism?' --> YES" puts " - Rentrez le nom de l'organisme" puts " - Verifiez la taxinomie" puts " - fenetre suivante --> Acknowlegde" puts " - Choisissez 'Prot: protein for blastp tblastn etc.'" puts " - Aux fenetre suivantes répondre oui pour celle demandant de charger un FASTA" puts " - CHARGEZ completeConvertedProteome.fasta !!!!! Et pas autre chose !!!" puts " - 'Do we handle DNA ?' --> NO" puts " - 'Could you browse a TFA file with all sequences?' --> YES" puts " - 'Do i keep information following each > ?' --> YES" puts " - 'Do I use Access to create Narcisse ?' --> NO" puts " - 'Do I force Access to be in position 1 ?' --> YES" puts " - Ouvrir le fichier completeConvertedProteome.fasta créé." puts " - Mettre 5 pour le nombre de Digits (ca devrait suffire, un proteome > 99999 proteine, c rare ^^)" puts " - 'I will create sequences from a TFA file, are the header as follow ...' --> YES" puts " - 'Do i use access as genename ?' --> YES" puts " - 'Do all following definitions always start with the organism name ?' --> NO" puts " - 'Can i use the Access as alias ?' --> YES" puts " - Patience ... (~12 min pour 14000 proteines)" puts " - répondre non jusqu'à la fin" puts " - quitter gscope, les instructions se relancent..." puts "##########################################################" exec gscope } proc AddACorrectedProteomeFromFile {fileName} { puts "##### ATTENTION !!!!! ###############################" puts "vos entetes doivent être sous la forme :" puts ">NUM_D_ACCESS genre espece Description_quelconque" puts "#####################################################" #recup du fichier fasta file rename $fileName "completeConvertedProteome.fasta" #Lancement de Gscope pour la creation du projet puts "##########################################################" puts "Gscope va se lancer, réalisez les opération suivantes :" puts " - 'i need the file with all complete genomes' -->YES" puts " - 2eme fentre --> Acknowlegde" puts " - 'c'est pour un genome?' --> NO" puts " - 'c'est pour une collection?' --> YES" puts " - 'prefixe des ORFs' --> mettre un code 4 lettre (ex:AGAM pour anopheles gambiae)" puts " - 'Does it concern only one organism?' --> YES" puts " - Rentrez le nom de l'organisme" puts " - Verifiez la taxinomie" puts " - fenetre suivante --> Acknowlegde" puts " - Choisissez 'Prot: protein for blastp tblastn etc.'" puts " - Aux fenetre suivantes répondre oui pour celle demandant de charger un FASTA" puts " - CHARGEZ completeConvertedProteome.fasta !!!!! Et pas autre chose !!!" puts " - 'Do we handle DNA ?' --> NO" puts " - 'Could you browse a TFA file with all sequences?' --> YES" puts " - 'Do i keep information following each > ?' --> YES" puts " - 'Do I use Access to create Narcisse ?' --> NO" puts " - 'Do I force Access to be in position 1 ?' --> YES" puts " - Ouvrir le fichier completeConvertedProteome.fasta créé." puts " - Mettre 5 pour le nombre de Digits (ca devrait suffire, un proteome > 99999 proteine, c rare ^^)" puts " - 'I will create sequences from a TFA file, are the header as follow ...' --> YES" puts " - 'Do i use access as genename ?' --> YES" puts " - 'Do all following definitions always start with the organism name ?' --> NO" puts " - 'Can i use the Access as alias ?' --> YES" puts " - Patience ... (~12 min pour 14000 proteines)" puts " - répondre non jusqu'à la fin" puts " - quitter gscope, les instructions se relancent..." puts "##########################################################" exec gscope } proc AddARedundant {redundantSequencesL currentHit} { upvar $redundantSequencesL redundantSequences upvar $currentHit hit # on a une redondance entre A et B # on cree le couple {A B} si il n'existe pas encore #set detected 0 #set where 0 set A [lindex $hit 0] set B [NomDuAlias [lindex $hit 2]] #set leCouple [list [lindex $hit 0] [NomDuAlias [lindex $hit 2]]] #puts "'$leCouple'" #si le couple existe , on le zappe #for {set x 0} {$x<[llength $redundantSequences]} {incr x} { # if { [lindex $redundantSequences $x 0]==[lindex $leCouple 0] # && [lindex $redundantSequences $x 1]==[lindex $leCouple 1] } { # set detected 1 # continue # } #} if {![info exists redundantSequences($A,$B)]} { set redundantSequences($A,$B) 1 } #if {$detected==0} { # lappend redundantSequences $leCouple #} } proc AddAliasPourMiRNA {} { foreach F [LesLignesDuFichier /genomics/link/MiRNA/ExtractFromRefseqAllMiRNA2907.fof] { set Access [file tail $F] regsub ".nuctfa" $Access "" Access scan [PremiereLigneDuFichier $F] "%s" Alias regsub ">" $Alias "" Alias set N "$Alias $F" Espionne $N lappend LesN $N } SauveLesLignes $LesN dans /genomics/link/MiRNA/ExtractFromRefseqAllMiRNA2907.fofnew exit } proc AddAnOrganismInCSV {fileName} { set output [open "paralogy" "w"] set input [open "$fileName" "r"] while {[gets $input line]!=-1} { if {$line=="" || $line=="\n" || ([string index $line 0]=="#")} {continue} set infos [split $line ";"] puts $output "[lindex $infos 0];[lindex $infos 1];[lindex $infos 2];[lindex $infos 3];[GetOrga [lindex $infos 2]];[lindex $infos 5];[lindex $infos 6]" } close $output close $input } proc AddBranch {B Tree {Index end}} { set NewBranches [linsert [Branches $Tree] $Index $B] return [NewTree [ValueOfTree $Tree] $NewBranches] } proc AddFObj {nom} { global pgl # proc is called to create the frame or # to update the objects buttons set frObjc $pgl(frObjc) set c 0 if {! [winfo exists $frObjc.f${nom}]} { set i [lindex [grid size $frObjc] 1] frame $frObjc.f${nom} -bg black -relief flat -bd 0 -highlightthickness 0 button $frObjc.f${nom}.b$c -text "- $nom" -font FontOgTitle -bg black -fg white -activeforeground yellow -activebackground black -bd 0 -relief flat -pady 0 -padx 0 -highlightthickness 0 -anchor w -justify left -command [list ToggleTabBouton $frObjc.f${nom}.b$c] button $frObjc.f${nom}.n$c -text "New" -font FontOg -bg DarkSlateGrey -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -pady 0 -padx 0 -highlightthickness 0 -anchor w -justify left -command [list DefineNewObj $nom] grid $frObjc.f${nom}.b$c -row $c -column 0 -sticky w -ipady 0 -pady 0 -padx {0 5} grid $frObjc.f${nom}.n$c -row $c -column 2 -sticky e -ipady 0 -pady 0 -padx {5 0} grid columnconfig $frObjc.f${nom} all -weight 1 # grid the whole frame grid $frObjc.f${nom} -row $i -column 0 -sticky nwe -pady 0 -ipady 0 -padx {20 1} } else { # if the frame exists , expand it if necassary if {[llength [grid slaves $frObjc.f${nom}]] == 2} { $frObjc.f${nom}.b0 invoke } } # objects buttons set Lb [winfo children $frObjc.f${nom}] set Li [lsearch -all -regexp $Lb {\.b0|\.n0}] foreach i [lreverse $Li] { set Lb [lreplace $Lb $i $i] } destroy {*}$Lb foreach objI [$nom _ListeObjets] { if {$objI eq "Index"} {continue} incr c if {[$nom _EtatDeObjet $objI]} { set col green1 } else { set col red } set obj [string range $objI 4 end] button $frObjc.f${nom}.bto$obj -text "$obj" -font FontOg -bg black -fg $col -activeforeground $col -activebackground black -bd 0 -relief flat -highlightthickness 0 -padx 0 -pady 0 -anchor w -justify left -command [list AfficheObjet $frObjc.f${nom}.bto$obj $nom $obj] button $frObjc.f${nom}.bte$obj -text "Edit" -font FontOg -bg DarkSlateGrey -fg green1 -bd 0 -relief flat -highlightthickness 0 -activeforeground green1 -activebackground black -padx 0 -pady 0 -anchor e -justify left -command [list DefineNewObj $nom $objI] button $frObjc.f${nom}.btd$obj -text "Del" -font FontOg -bg DarkSlateGrey -fg red -bd 0 -relief flat -highlightthickness 0 -activeforeground red -activebackground black -padx 0 -pady 0 -anchor e -justify left -command [list DeleteObjet $nom $objI] grid $frObjc.f${nom}.bto$obj -row $c -column 0 -sticky w -pady 0 -ipady 0 -padx {5 0} grid $frObjc.f${nom}.bte$obj -row $c -column 1 -sticky e -pady 0 -ipady 0 -padx {5 5} grid $frObjc.f${nom}.btd$obj -row $c -column 2 -sticky we -pady 0 -ipady 0 } return } proc AddGC {Path Organism Chrox bigZips} { set FichierIn [open "$Path.coord" "r"] set FichierOut [open "$Path.coo" "w"] while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne nbMatchs sequenceNumber start end matchType hs1Mistake hs2Mistake matchOut repeat if { $matchType == "F"} { set strand "+" } else { set strand "-" } set SequenceRallongee [BoutAdnDeUcscBoost [expr $start - 20] [expr $end + 20] $strand $Organism $Chrox $bigZips] set Upstream [string range $SequenceRallongee 0 19] set Downstream [string range $SequenceRallongee [expr 19 + [string length $matchOut]] [expr 41 + [string length $matchOut]]] Espionne "$SequenceRallongee $Upstream $matchOut $Downstream" } close $FichierIn close $FichierOut } proc AddInFile {Text File} { set Channel [open $File "a"] puts $Channel $Text close $Channel return $File } proc AddInfo {GscopeCode} { #set Directory [RepertoireDuGenome] #si la sequence n'est pas une sequene protein entière mais un domain ou autre avec un code perso....? que se passe t-il? set LL [LaSequenceDesBanques $GscopeCode] DecortiqueLesLignesEMBL $LL ID AC DE GN OS OC OX SequenceBrute LaDETotal InformeSansDemander $GscopeCode "ID: $ID" InformeSansDemander $GscopeCode "AC: $AC" InformeSansDemander $GscopeCode "DE: $DE" InformeSansDemander $GscopeCode "OS: $OS" InformeSansDemander $GscopeCode "OC: $OC" InformeSansDemander $GscopeCode "OX: $OX" } proc AddLabel {c elt index} { global Vrp set pos [$c coords $elt] set x1 [lindex $pos 2] set y1 [lindex $pos 3] # add if does not already exist if {[llength [$c find withtag t_$index]] == 0 } { $c create text $x1 $y1 -fill $Vrp(colLabel) -font $Vrp(font) -text "[lindex $Vrp(AA1) $index][lindex $Vrp(Nb) $index]" -tags [list label t_$index] -justify right -anchor sw } return } proc AddLeaf {Value Tree {Index end}} { return [AddBranch [NewLeaf $Value] $Tree $Index] } proc AddLinx {{Login ""} {LinkName ""} {Link ""} {Description ""} {Belongs ""}} { if {$LinkName==""} { set LinkName [Entre "FromGscope"] } if {$Login==""} { set Login [Login] } if {$Link==""} { set Link64 "" } else { set Link64 [Base64Encode $Link] } if {$Description==""} { set Desc64 "" } else { set Desc64 [Base64Encode $Description] } if {$Belongs==""} { set Belo64 "" } else { set Belo64 [Base64Encode $Belongs] } set Url "[LbgiUrl]/MyLinx.php?do=addlinx&lo=$Login&ln=$LinkName&li=$Link64&de=$Desc64&be=$Belo64" set Status [ContenuDuFichier $Url] #rR faut il le faire ici ???????????????????????? MyLinx ResetMyLinx return $Status } proc AddLinxTest {} { return [AddLinx "poch" "" "http://raymondripp.fr" "Le site de RR" "public"] } proc AddModules {file} { global TabSF array unset TabSF "*,MODULE" update ReadRawFeatureFile $file set Old $::Defauts(FichierXML) set root [file rootname $Old] set New "${root}_new.xml" SauveLAlignement XML $New puts "on sauve $New" exit } proc AddNarcisse {inputFile} { #variables globales global RepertoireDuGenome set repInfos "$RepertoireDuGenome/infos" #puts "$repInfos" #open input file set fasta_file [open $inputFile "r"] #reads input line by line set compteur 0 while {[gets $fasta_file line]!=-1} { if {$line==""} { continue } #header, correct it if {[string index $line 0]==">"} { #separation by | set infos1 [split $line "|"] lassign $infos1 origin accessNumber description regexp {>(.*)} $origin -> origin2 #puts $origin2 #pour le fasta de Alvinella pompejana if {[string length $origin2]>3} { set infos2 [split $origin2 " "] set accessNumber [lindex $infos2 0] set origin2 "file" } if {$origin2=="gi"} { set origin2 "ref" } #puts "'$origin2' '$accessNumber'" #recuperation de l'accession set numGScope [NomDuAlias $accessNumber] #puts "'$numGScope' 'Narcisse: $origin2:$accessNumber'" InformeSansDemander $numGScope "Narcisse: $origin2:$accessNumber " incr compteur } } puts " -->$compteur infos modifie" } proc AddNewAARSPDB {id Lf} { global db Tpdb if {0} { # save file in structure directory set fout [file join [MiSynPatDir] data structures ${id}.pdb] set o [open $fout w] puts $o [join $Lf \n] close $o } # Organism : # look into SOURCE cards to find the scientific name and # TaxId of the organism. set TaxId "" set Gene "" set Li [lsearch -all -regexp $Lf {^SOURCE }] foreach i $Li { set l [lindex $Lf $i] if {[regexp {ORGANISM\_TAXID\:} $l]} { set dTax [string first "TAXID:" $l] set fTax [string first ";" $l] set TaxId [string range $l $dTax+6 $fTax-1] } if {[regexp {GENE\:} $l]} { set dGen [string first "GENE:" $l] set fGen [string first ";" $l] set Gene [string range $l $dGen+5 $fGen-1] } } set Tpdb($id,taxid) $TaxId set Tpdb($id,gene) $Gene puts "taxid $TaxId" puts "gene $Gene" # check if we have a mitochondrial human structure set tMit 0 if {$TaxId == 9606} { # double check : in the title and the card set LiTitle [lsearch -all -regexp $Lf {^TITLE }] set titre "" foreach i $LiTitle { append titre [string tolower [lindex $Lf $i]] } set tMit [regexp {mitochondr} $titre] if {$tMit} { puts "==> HUMAN MITO !" } } set Tpdb($id,mito) $tMit return 1 } proc AddNewFeatEntry {n db fb code name note score} { global CpB lassign [set CpB(startstop,$n)] start stop if {$fb < $db} {return} if {$fb < $start || $db > $stop} {return} if {$db < $start} {set db $start} if {$fb > $stop} {set fb $stop} set dr [DonnePosGS $n $db] set fr [DonnePosGS $n $fb] switch $name { "BLOCK" { if($fr - $dr<4) return; if {$note eq "SBLOCK"} { set color $code } elseif {note eq "LBLOCK"} { set color 12 } } "REGION" { set color 10 } "SEQERR" { set color 3 } "ANCHOR" { set color $code } "REPEAT" { set color $code } "STRUCT" { switch $note { "PRED_HELIX" {set color VLRED} "PRED_STRAND" {set color VLGREEN} "PROP_HELIX" {set color LRED} "PROP_STRAND" {set color LGREEN} "HELIX" {set color RED} "STRAND" {set color GREEN} } } "TRANSMEM" { if {[regexp {^PRED\_} $note]} { set note "$note_$score" set color 10 } elseif {[regexp {^PROP\_} $note]} { ,set color GRAY } else { set color 1 } } "COIL" - "LOWCOMP" { if {[regexp {^PRED\_} $note]} { set color LGRAY } elseif {[regexp {^PROP\_} $note]} { set color GRAY } else { set color 6 } } "DOMAIN" { switch -regexp $note { {^PRED\_} {set color LGRAY} {^PROP\_} {set color GRAY} {^DNA\_BIND} {set color 2} {^ZN_FING} {set color 3} default {set color 1} } } "PFAM-A" - "PFAM-B" - "PROSITE" - "ELM" - "DISORDER" { if {[regexp {^PRED\_} $note]} { set color LGRAY } elseif {[regexp {^PROP\_} $note]} { set color GRAY } else { set color $code } } "SIGNAL" { switch -regexp { {^PRED\_} { set note "$note_$score" set color LGRAY } {PROP\_} {set color GRAY} "NUCLEAR" {set color 1} "CHLOROPLAST" {set color 2} "MITOCHONDRION" {set color 3} "MICROBODY" {set color 4} default {set color 5} } } "VARSPLIC" { if {[regexp {^PRED\_} $note]} { set color LGRAY } elseif {[regexp {^PROP\_} $note]} { set color GRAY } else { set color 5 } } "MOD_RES" { set color 0 switch $note { "PRED_" {set color LGRAY} "PROP_" {set color GRAY} "ACETYLATION" {set color 1} "ALKYLATION" {set color 2} "HYDROXYLATION" {set color 3} "METHYLATION" {set color 4} "PHOSPHORYLATION" {set color 5} "SULFATION" {set color 6} "PYRROLIDONE" {set color 7} "MYRISTATE" {set color 8} "PALMITATE" {set color 9} "FARNESYL" {set color 10} "GERANYL" {set color 11} "GPI-ANCHOR" {set set color 12} "N-ACYL" {set color 13} } } "SITE" { set color 0 switch -regexp $note { {^PRED\_} {set color LGRAY} {^PROP\_} {set color GRAY} "SITE" {set color 0} "ACT_SITE" {set color 1} "CARBOHYD" {set color 2} "DISULFID" {set color 3} "BINDING" {set color 4} "NP_BIND" {set color 5} "CA_BIND" {set color 6} "TRANSIT" {set color 7} "LIPID" {set color 8} "METAL" {set color 9} } } } lappend CpB(tb,$n) [list ftype $name fstart $start fstop $stop fcolor $color fscore $score fnote $note] return } proc AddObjToFObj {nom obj} { global pgl set frO "$pgl(frObjc).f${nom}" # open the "menu" corresponding to the pdb if {[llength [grid slaves $frO]] == 2} { $frO.b0 invoke } set c [lindex [grid size $frO] 1] button $frO.bto$obj -text "$obj" -font FontOg -bg black -fg green1 -activeforeground red -activebackground black -bd 0 -relief flat -highlightthickness 0 -padx 0 -pady 0 -anchor w -justify left -command [list AfficheObjet $frO.bto$obj $nom $obj] grid $frO.bto$obj -row $c -column 0 -sticky "" -columnspan 2 -pady 0 -ipady 0 -padx 0 return } proc AddOrganismToOrgaCode {{NewOrga ""} {NewOrga2 ""}} { JeMeSignale if {$NewOrga2!=""} { set NewOrga "$NewOrga $NewOrga2" } regsub "_" $NewOrga " " NewOrga set FichierOrganismes "[GscopeEtc]/gscope_listedesorganismes.txt" set FichierGlossaire "[GscopeEtc]/gscope_glossaire" set Organismes [ContenuDuFichier $FichierOrganismes] if {$NewOrga!=""} { set Organismes "$NewOrga\n$Organismes" } if { ! [PourWscope]} { set Original $Organismes FaireLire "You can add other organisms 'Genus species' ... \n Doesn't matter for the alphabetical order or duplicates\n if it's a virus please enter 'Virus homo-sapiens-hiv'" set Organismes [EntreTexte $Organismes] if {$Organismes==""} { return "" } } set Organismes [join [lsort -unique [split $Organismes "\n"]] "\n"] if {$Original!=$Organismes} { Garde $FichierOrganismes Sauve $Organismes dans $FichierOrganismes file attribute $FichierGlossaire -permissions 0775 } set LesOrganismes [split $Organismes "\n"] foreach Ligne $LesOrganismes { regsub -all { +} $Ligne " " Ligne set Ligne [string trim $Ligne] if { ! [regexp -nocase {[a-z0-9\-]+ [a-z0-9\-]+\.?} $Ligne]} { FaireLire "Invalid organism\n$Ligne\nOnly 2 words please : 'Homo sapiens'" continue } set Genre [string tolower [lindex [split $Ligne " "] 0]] set espece [string tolower [lindex [split $Ligne " "] 1]] set G [string toupper [string range $Genre 0 0]] set esp [string range $espece 0 2] set gesp [string tolower $G]$esp set Complet "$G[string range $Genre 1 end] $espece" set Pointe "$G.$espece" set Demi "$G[string range $Genre 1 3].[string range $espece 0 4]" lappend LeGlossaire "$gesp\t$Complet\t$Pointe\t$Demi" } Garde $FichierGlossaire SauveLesLignes $LeGlossaire dans $FichierGlossaire file attribute $FichierGlossaire -permissions 0775 Glossaire "Reset" return [Glossaire] } proc AddPV {} { foreach Ligne [LesLignesDuFichier /planbis/commun/dbsql/backups/PRIVILEGES_201602071520.sql] { append Ligne ";" lappend LeNew $Ligne } SauveLesLignes $LeNew dans /planbis/commun/dbsql/backups/MYSQL_PRIVILEGES_201602071520.sql } proc AddRemoveLabel {c elt} { global Vrp set t $Vrp(WText) set index [lindex [split $elt "_"] 1] set item [$c find withtag t_$index] #check if label exists if {[llength $item] == 0} { # add text AddLabel $c $elt $index } else { $c delete $item } $t see [$t index 1.$index] HighlightChar $t $index return } proc AddSeq {ID {Sequence ""}} { #UneNouvelleSequencePourGscope P12346 Auto #Normalement la procedure UneNouvelleSequencePourGscope verifie si il y aou non une nouvelle sequence. #verification que cette sequence n'existe pas deja. Dans un premier temps #Si oui reprends les resultats précédement calcule Espionne "ID: $ID" Espionne "Sequence: $Sequence" if {$Sequence!=""} { set TFAQuery ">$ID\n$Sequence" set information [UneNouvelleSequencePourGscope $TFAQuery Auto] scan $information "%s" CodeGscope AddInfo $CodeGscope } else { #Espionne "Avant UneNouvelleSequencePourGscope" set information [UneNouvelleSequencePourGscope $ID Auto] #Espionne "apres UneNouvelleSequencePourGscope" scan $information "%s" CodeGscope AddInfo $CodeGscope } return $CodeGscope } proc AddTaxToSelection {} { global LTaxSelected LShowId Tx puts "AddTo" set PAD $Tx(PAD) set n $Tx(ItemSel) puts "n= $n" if {$n eq ""} {return} set ix [lsearch $LShowId $n] puts "ix show $ix sel [lsearch $::LTaxSelected $n] user [lsearch $::LUserId $n]" puts "" if {$ix == -1} {return} set LShowId [lreplace $LShowId $ix $ix] lappend LTaxSelected $n # change outline of taxId $PAD itemconfig "R$n" -outline $Tx(fgCan) return } proc AddUser {{Login ""} {Uid ""} {Gid ""} {Prenom ""} {Nom ""} {HomeDir ""} {Shell ""} {Hash ""} {CreateDir ""}} { if {$Login==""} { set Login [Entre "Login="] } if {$Uid==""} { set Uid [Entre "Uid="] } if {$Gid==""} { set Gid [Entre "Gid=3000"] } if {$Prenom==""} { set Prenom [Entre "Prenom="] } if {$Nom==""} { set Nom [string toupper [Entre "NOM="]] } if {$HomeDir==""} { set HomeDir [Entre "Home=/maison"] } if {$Shell==""} { set Shell [Entre "Shell=/bin/bash"] } set Secret "[string tolower [string index $Prenom end][string index $Nom end]]2016" if {$Hash==""} { set Hash [Entre "Password=$Secret"] } if {$CreateDir==""} { set CreateDir "CreateDir" } if { ! [regexp {^\{} $Hash]} { set Hash [exec slappasswd -h "{SSHA}" -s $Hash] } set CreateDir [string equal -nocase "CreateDir" $CreateDir] foreach K {Login Uid Gid Prenom Nom HomeDir Shell} { regsub {[^=]*=} [set $K] "" $K set $K [string trim [set $K]] regsub { } [set $K] "-" $K if {$K=="Nom"} { set $K [string toupper [set $K]] } Espionne "$K [set $K]" } set LesNouveaux [list "$Login $Uid $Gid $Prenom $Nom $HomeDir $Shell"] set LesInfos {} set LeLdap {} foreach Ligne $LesNouveaux { lassign [split $Ligne " "] Login Uid Gid Prenom Nom HomeDir Shell Espionne $Ligne lappend LesInfos $Ligne if {$CreateDir || [OuiOuNonMemo "Je crée les répertoires ?" 0]} { file mkdir "$HomeDir/$Login" if { ! [file exists /home/$Login]} { exec ln -s $HomeDir/$Login /home/ } } lappend LeLdap "dn: uid=$Login,ou=users,dc=lbgi,dc=fr" lappend LeLdap "objectClass: inetOrgPerson" lappend LeLdap "objectClass: posixAccount" lappend LeLdap "cn: $Login" lappend LeLdap "sn: $Nom" lappend LeLdap "givenName: $Prenom" lappend LeLdap "homeDirectory: /home/$Login" lappend LeLdap "loginShell: $Shell" lappend LeLdap "uidNumber: $Uid" lappend LeLdap "gidNumber: $Gid" lappend LeLdap "userPassword: $Hash" lappend LeLdap "" incr UID } return [join $LeLdap "\n"] } proc AddUsers {} { set LesU {} # lappend LesU [AddUser collet 3356 3000 Pierre Collet /maison /bin/bash "" CreateDir] # lappend LesU [AddUser schreiner 3357 3000 Clément Schreiner /maison /bin/bash "" CreateDir] # lappend LesU [AddUser abotsi 3358 3000 Isaac Abotsi /maison /bin/bash "" CreateDir] # lappend LesU [AddUser julio 3359 3000 Julio Navarra-Lara /maison /bin/bash "" CreateDir] # lappend LesU [AddUser cardosi 3360 3000 Paul Cardosi /maison /bin/bash "" CreateDir] # lappend LesU [AddUser raaj 3361 3000 Raaj Seereekisson /maison /bin/bash "" CreateDir] # lappend LesU [AddUser michel 3362 3000 Christian Michel /maison /bin/bash "" CreateDir] # lappend LesU [AddUser parrend 3363 3000 Pierre Parrend /maison /bin/bash "" CreateDir] # lappend LesU [AddUser karim 3364 3000 Karim El-Soufi /maison /bin/bash "" CreateDir] # lappend LesU [AddUser willaume 3365 3000 Pierre Willaume /maison /bin/bash "" CreateDir] # lappend LesU [AddUser colin 3366 3000 Florent Colin /maison /bin/bash "" CreateDir] # lappend LesU [AddUser deruyver 3367 3000 Aline Deruyver /maison /bin/bash "" CreateDir] # lappend LesU [AddUser guigou 3368 3000 Fabio Guigou /maison /bin/bash "" CreateDir] # lappend LesU [AddUser masai 3369 3000 Pierre Masai /maison /bin/bash "" CreateDir] # lappend LesU [AddUser mazzu 3370 3000 Timothée Mazzucotelli /maison /bin/bash "" CreateDir] # lappend LesU [AddUser toussaint 3371 3000 Nicholas Toussaint /maison /bin/bash "" CreateDir] # lappend LesU [AddUser pasquier 3372 3000 Jean-Yves Pasquier /maison /bin/bash "" CreateDir] # lappend LesU [AddUser chene 3373 3000 Jocelyn Chene /maison /bin/bash "" CreateDir] # lappend LesU [AddUser mesny 3374 3000 Fantin Mesny /maison /usr/bin/tcsh "" CreateDir] # lappend LesU [AddUser joly 3375 3000 Mickael Joly /maison /usr/bin/tcsh "" CreateDir] # lappend LesU [AddUser leonteva 3376 3000 Anna Leonteva /maison /bin/bash "" CreateDir] # lappend LesU [AddUser huber 3377 3000 Laurine Huber /maison /bin/bash "" CreateDir] # lappend LesU [AddUser jeannin 3378 3000 Anne Jeannin /maison /bin/bash "" CreateDir] # lappend LesU [AddUser pupka 3379 3000 Cedric Pupka /maison /bin/bash "" CreateDir] # lappend LesU [AddUser lmary 3380 3000 Lora Mary /maison /bin/bash "" CreateDir] # lappend LesU [AddUser guth 3381 3000 Catherine Guth /maison /bin/bash "" CreateDir] # lappend LesU [AddUser haegelin 3382 3000 Marc Haegelin /maison /bin/bash "" CreateDir] # lappend LesU [AddUser bruyant 3383 3000 Alexandre Bruyant /maison /bin/bash "" CreateDir] # lappend LesU [AddUser mayer 3386 3000 Claudine Mayer /maison /usr/bin/tcsh "" CreateDir] # lappend LesU [AddUser durand 3387 3000 Dylan Durand /maison /usr/bin/tcsh "" CreateDir] set FichierLdap [SauveLesLignes $LesU dans "[HomeRipp]/rh/Ldap_[Date Seconds].txt"] return $FichierLdap } proc AdieuOrdali {} { global StrucAVoir tmpdebut NomFenetreOrdali Defauts if {[set olog [set Defauts(SaveLog)]] != 0} { SauveLeLog $olog } FinDBProfile if {[VueEditee]} { if {[ModeI]} { set chx [tk_dialog .chx "Warning" "Warning !\nThis alignment has not been saved !\nDo you want to save it before to quit Ordalie ?" "" 0 "Yes" "No" "Cancel"] } else { set chx 0 } switch $chx { 0 { SauveLAlignement } 1 { if {[TypeAli] eq "ORD"} { file rename -force $Defauts(FichierOBK) $Defauts(FichierORD) } } 2 {return} } } catch {$::db close} NettoieLeTmp if {[ModeI]} { if {[winfo exists .lulu]} { QuitteViandox } destroy $NomFenetreOrdali } if {! [ModeI]} { exit } else { if {$NomFenetreOrdali eq ".ordali"} { exit } else { return } } } proc AdjustFog {what} { puts "what $what" flush stdout update idletasks if {$what eq "up"} { set dadd 0.01 } else { set dadd -0.01 } if {$::fogsys ne "::GL_LINEAR"} { set den [tcl3dOglGetFloatState GL_FOG_DENSITY] set den [expr {$den + $dadd}] if {$den < 0.001} {set den 0.001} glFogf GL_FOG_DENSITY $den puts " density $den" } else { set ::fact [expr {$::fact + $dadd}] if {$::fact < 0.005} {set ::fact 0.005} #if {$::fact > 2.} {set ::fact 2.} set end [expr {$::fact*2.*$::Rad}] glFogf GL_FOG_START 0. glFogf GL_FOG_END $end puts " end $end" } $::pgl(wogl) postredisplay return } proc AdnFictifPourCollection {{Liste ""} {Rep ""} {Zoom ""} {GetWhat ""} {Max ""}} { global RepertoireDuGenome global ADN TDN RAC global DerniereBase LongueurADN Wup "Si Zoom est negatif c'est la valeur qu'on prend pour une sequence" Wup "Ca marche aussi si Rep est prottfa. Sauf pour ADN TDN et RAC (qui ne sert pas encore)" Wup "Attention ca marche aussi pour un autre projet Gscope ... mais sans creer de fichiers" if {$Liste==""} { set Liste [ListeDesPABs] } if {$GetWhat==""} { set GetWhat "SaveAndGetFilename" } if {$Rep==""} { set Rep nuctfa } if { ! [regexp "/" $Rep]} { set Rep "[RepertoireDuGenome]/$Rep" } set LongSeqConstante 999 if {$Zoom!="" && $Zoom<0} { set LongSeqConstante $Zoom; set Zoom 1 } if {$Zoom==""} { set Zoom 1 } set LongSeqConstante [expr -$LongSeqConstante] #si elle est negative on l'oublie set LongInconnu 300 if {[OuiOuNon "Do I keep frame 1 for all ORFs ?" 0]} { set LongIntergene 99 } else { set LongIntergene 100 } set i [expr ($LongIntergene/3)*3] set ADN [string repeat "n" $i] set TDN [string repeat "n" $i] set RAC [string repeat "n" $i] set LesNouvellesBornesSansMutants {} foreach PAB $Liste { if {[EstUnPABMute $PAB]} { # lappend LesNouvellesBornes "$PAB $Bornes" continue } set FiNucTFA "$Rep/$PAB" if {[file exists $FiNucTFA]} { set SeqNuc [QueLaSequenceDuFichierTFA $FiNucTFA] } else { set SeqNuc [string repeat "n" $LongInconnu] } set Orient [Box $PAB orient] if {$Orient=="F"} { set SeqF $SeqNuc } else { set SeqF [NucToReverseAndComplementNuc $SeqNuc] } append ADN $SeqF if {$LongSeqConstante<0} { set LongSeq [string length $SeqNuc] set LongSeq [expr round($LongSeq * $Zoom)] } else { set LongSeq $LongSeqConstante } if {[regexp "prottfa" $Rep]} { set LongSeq [expr $LongSeq*3] } if {$Max!=""} { set LongSeq [Maxi $Max $LongSeq] } set LongReste [expr (3-$LongSeq%3)%3] set Fin [expr $i+$LongSeq] set Debut [incr i] Box $PAB debut $Debut Box $PAB fin $Fin set Bornes "$Debut $Fin $Orient" lappend LesNouvellesBornesSansMutants "$PAB $Bornes" set i $Fin append ADN [string repeat "n" $LongReste] incr i $LongReste append ADN [string repeat "n" $LongIntergene] incr i $LongIntergene } set TDN "n[NucToReverseNuc $ADN]" set RAC "n[NucToReverseAndComplementNuc $ADN]" set LesNouvellesBornes {} foreach Ligne $LesNouvellesBornesSansMutants { lappend LesNouvellesBornes $Ligne scan $Ligne "%s" Nom foreach Mutant [LesMutantsDe $Nom "Names"] { regsub $Nom $Ligne $Mutant LigneMutant lappend LesNouvellesBornes $LigneMutant } } if {[string equal $GetWhat "GetBornesDesPABs"]} { return $LesNouvellesBornes } set FichierBornes "[RepertoireDuGenome]/fiches/bornesdespabs" if { ! [OuiOuNon "Do I modify $FichierBornes ?"]} { return "" } Garde $FichierBornes set FBPab [SauveLesLignes $LesNouvellesBornes dans $FichierBornes] return $FBPab } proc AffecteLesVariablesDeLaListe {Liste {Level 1}} { # JeMeSignale foreach Ligne $Liste { if { ! [regexp {^(Text|List|Array): } $Ligne]} { continue } set Type "" set NomDeVariable "" scan $Ligne "%s %s" Type NomDeVariable if { ! [regexp -nocase {^[a-z_]} $NomDeVariable] } { continue } lappend LesVariables $NomDeVariable regsub {\(} $NomDeVariable {\\(} NomDeVariable regsub {\)} $NomDeVariable {\\)} NomDeVariable regsub "^$Type $NomDeVariable " $Ligne "" Ligne # puts stderr [string range $Ligne 0 80] set Commande "" switch $Type { "Text:" { set Commande "set $NomDeVariable $Ligne" } "List:" { set Commande "set $NomDeVariable [ListSeria $Ligne]" } "Array:" { regsub "^_x_" $NomDeVariable "" NomDeVariable set Commande "array set $NomDeVariable [ListSeria $Ligne]" } } if {[regexp bonjour $Commande]} { Espionne $Commande } if {$Commande!=""} { uplevel $Level $Commande } } return $LesVariables } proc AffecteLesVariablesDeReponse {Reponse {Level ""}} { if {$Level==""} { set Level 2 } else { if { ! [regexp {^\#} $Level]} { incr Level } } return [AffecteLesVariablesDeLaListe [split $Reponse "\n"] $Level] } proc AffecteListeDesPABs {Liste} { global MemoAffecteListeDesPABs global ListeDesPABs if {$Liste=="Reset"} { if { ! [info exists MemoAffecteListeDesPABs]} { return [ListeDesPABs] } set ListeDesPABs $MemoAffecteListeDesPABs unset MemoAffecteListeDesPABs return $ListeDesPABs } if { ! [info exists MemoAffecteListeDesPABs]} { set MemoAffecteListeDesPABs [ListeDesPABs] } set ListeDesPABs $Liste return $ListeDesPABs } proc Affichage {LesNoms aProteines aTabSeq} { global GpeCases 2_cluster LesCases upvar $aProteines Proteines upvar $aTabSeq TabSeq set w .text frame $w pack $w -expand yes -fill both #boutons frame $w.buttons pack $w.buttons -side bottom -fill x -pady 2m button $w.buttons.sortie -text Exit -command "exit" pack $w.buttons.sortie -side left -expand 1 #fenetre centrale frame $w.text -bd 2 text $w.text.seq -relief sunken -bd 2 -xscrollcommand "$w.scrollx set" -yscrollcommand "$w.scrolly set" -height 60 -wrap none text $w.text.noms -relief sunken -bd 2 -yscrollcommand "$w.scrolly set" -height 60 -width 20 -wrap none scrollbar $w.scrolly -command "CoupleYview $w.text.noms $w.text.seq" scrollbar $w.scrollx -orient horiz -command "$w.text.seq xview" pack $w.scrolly -side right -fill y pack $w.scrollx -side bottom -expand yes -fill x pack $w.text -expand yes -fill both #ecriture des noms set chaine_noms "" foreach ns $LesNoms { append chaine_noms "$ns \n" } $w.text.noms insert end $chaine_noms #ecriture des sequences $w.text.seq tag configure c00 -background bisque1 $w.text.seq tag configure c01 -background honeydew2 $w.text.seq tag configure c02 -background LemonChiffon1 $w.text.seq tag configure c03 -background MistyRose2 $w.text.seq tag configure c04 -background azure2 $w.text.seq tag configure c10 -background SlateGray1 $w.text.seq tag configure c11 -background SteelBlue1 $w.text.seq tag configure c12 -background PaleTurquoise2 $w.text.seq tag configure c13 -background SkyBlue1 $w.text.seq tag configure c14 -background aquamarine1 $w.text.seq tag configure c20 -background gold1 $w.text.seq tag configure c21 -background RosyBrown1 $w.text.seq tag configure c22 -background Indianred1 $w.text.seq tag configure c23 -background LightSalmon1 $w.text.seq tag configure c24 -background LightPink1 $w.text.seq tag configure c30 -background MediumPurple1 $w.text.seq tag configure c31 -background orchid1 $w.text.seq tag configure c32 -background VioletRed1 $w.text.seq tag configure c33 -background HotPink2 $w.text.seq tag configure c34 -background thistle3 $w.text.seq tag configure c40 -background white $w.text.seq tag configure c41 -background yellow $w.text.seq tag configure c42 -background blue $w.text.seq tag configure c43 -background grey $w.text.seq tag configure c44 -background orange #test $w.text.seq tag configure c05 -background red $w.text.seq tag configure c15 -background red $w.text.seq tag configure c25 -background red $w.text.seq tag configure c35 -background red $w.text.seq tag configure c06 -background green $w.text.seq tag configure c16 -background green $w.text.seq tag configure c26 -background green $w.text.seq tag configure c36 -background green $w.text.seq delete 0.0 end foreach ns $LesNoms { foreach Case $LesCases gpe_case $GpeCases { set Deb [expr [lindex $Case 0]-1] set Fin [expr [lindex $Case end]-1] $w.text.seq insert end [join [lrange [set Proteines($ns)] $Deb $Fin] ""] "c[set TabSeq($ns)]$gpe_case" } $w.text.seq insert end \n } #coloration pack $w.text.seq -side right -expand yes -fill both pack $w.text.noms -side left -fill y } proc AffichageHDACroises {aLesPABs aBilan LesFamilles LesOrgCibles} { upvar $aLesPABs LesPABs upvar $aBilan Bilan global RepertoireDuGenome set lFam 0 foreach Fam $LesFamilles { set lFam [Maxi [string length $Fam] $lFam] } incr lFam 1 set lOrg 0 foreach Org $LesOrgCibles { set lOrg [Maxi [string length $Org] $lOrg] } incr lOrg 1 set BlancFam [string repeat " " $lFam] set BlancOrg [string repeat " " $lOrg] append Sortie $BlancOrg foreach Fam $LesFamilles { append Sortie [format "%${lFam}s" [llength [set LesPABs($Fam)]]] } append Sortie "\n" $BlancOrg foreach Fam $LesFamilles { append Sortie [format "%${lFam}s" $Fam] } append Sortie "\n" foreach Org $LesOrgCibles { append Sortie [format "%${lOrg}s" $Org] set NbHitsTblastn 0 foreach Fam $LesFamilles { set Tblastn [lindex [set Bilan($Fam,$Org)] 0] puts "$Org $Fam Tblastn: $Tblastn" set Couleur [CouleurHDACroises [set Bilan($Fam,$Org)]] if {$Tblastn} { incr NbHitsTblastn } if {$Couleur=="O"} { append Sortie [format "%${lFam}s" $Tblastn] } else { append Sortie [format "%${lFam}s" $Couleur] } } append Sortie " $NbHitsTblastn" "\n" $BlancOrg set NbHitsBlastp 0 foreach Fam $LesFamilles { set Blastp [lindex [set Bilan($Fam,$Org)] 1] if {$Blastp} { incr NbHitsBlastp } if {$Couleur=="O"} { append Sortie [format "%${lFam}s" $Blastp] } else { append Sortie $BlancFam } } append Sortie " $NbHitsBlastp" "\n" $BlancOrg set NbJaunes 0 foreach Fam $LesFamilles { set Jaune [lindex [set Bilan($Fam,$Org)] 2] if {$Jaune} { incr NbJaunes } if {$Couleur=="O"} { append Sortie [format "%${lFam}s" $Jaune] } else { append Sortie $BlancFam } } append Sortie " $NbJaunes" "\n" } AfficheVariable $Sortie "GrandeLargeurSansRien" EcritFichier [split $Sortie "\n"] "$RepertoireDuGenome/fiches/bilanHDAcroises_tableau" } proc Affiche {Page {Maniere ""} {NomDuFichierOrigine ""}} { return [AfficheVariable $Page $Maniere $NomDuFichierOrigine] } proc AfficheAliEnPage {Page LigneAccess Fichier} { return [AfficheVariable [PartieSegAli $Page $LigneAccess] " " $Fichier] } proc AfficheAliInOut {Nom} { global RepertoireDuGenome set Fichier "$RepertoireDuGenome/aliinout/$Nom" if { ! [file exists $Fichier]} { return "" } set Fen [AfficheFichier $Fichier] return [Illumine "accepted" $Fen] } proc AfficheArbre {Arbre} { global AfficheArbreIndent if {[EstUneFeuille $Arbre]} { Espionne "[string repeat " " $AfficheArbreIndent]+ $Arbre" return } set A1 [lindex $Arbre 0] set D1 [lindex $Arbre 1] set A2 [lindex $Arbre 2] set D2 [lindex $Arbre 3] Espionne "[string repeat " " $AfficheArbreIndent]+ $D1" incr AfficheArbreIndent AfficheArbre $A1 incr AfficheArbreIndent -1 Espionne "[string repeat " " $AfficheArbreIndent]+ $D2" incr AfficheArbreIndent AfficheArbre $A2 incr AfficheArbreIndent -1 } proc AfficheAskAddSeq {aTAddS} { global TAddS LNDG array set TAddS $aTAddS if {[winfo exists .affas]} { raise .affas return } set w .affas toplevel $w wm title $w "Add Sequences" wm protocol $w WM_DELETE_WINDOW KillParLaCroix grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 frame $w.f grid $w.f -row 0 -column 0 -sticky news grid columnconfig $w.f 0 -weight 1 # row index iR set iR 0 set wf "$w.f" label $wf.title -text "Add sequences to the alignment" -font "Helvetica 16 bold" -relief groove grid $wf.title -row $iR -column 0 -sticky w -padx 5 -pady {5 15} label $wf.lbfile -text "Sequences File name : " -relief flat grid $wf.lbfile -row [incr iR] -column 0 -sticky w -padx 5 -pady {15 5} frame $wf.ffile grid $wf.ffile -row [incr iR] -column 0 -sticky ew -padx 5 grid columnconfig $wf.ffile 0 -weight 1 entry $wf.ffile.enfile -background white -font [$wf.lbfile cget -font] -textvariable TAddS(File) button $wf.ffile.bufile -text "Browse" -background cyan -command "set TAddS(File) \[DemandeEtOuvreFichier *\]" grid $wf.ffile.enfile -row 0 -column 0 -sticky ew grid $wf.ffile.bufile -row 0 -column 1 -sticky e -padx {20 0} # align Sequences label $wf.lbali -relief flat -text "The imported sequences should be " grid $wf.lbali -row [incr iR] -column 0 -sticky w -padx 5 -pady {15 5} frame $wf.fali grid $wf.fali -row [incr iR] -column 0 -sticky ew -padx 5 grid columnconfig $wf.fali {0 1} -weight 1 radiobutton $wf.fali.align -text "aligned against the alignment (using MAFFT)" -relief flat -value 1 -variable TAddS(Align) radiobutton $wf.fali.alone -text "kept unchanged" -relief flat -value 0 -variable TAddS(Align) grid $wf.fali.align -row 0 -column 0 -sticky w -padx {30 5} grid $wf.fali.alone -row 0 -column 1 -sticky w if {[llength $LNDG] > 1} { checkbutton $wf.chkc -text "keep existing clusters" -relief flat -onvalue 1 -offvalue 0 -variable TAddS(KeepClus) grid $wf.chkc -row [incr iR] -column 0 -sticky w -padx {30 5} } # what to do with seqs already here ? label $wf.lbdup -text "If a sequence name already exists in the alignment," grid $wf.lbdup -row [incr iR] -column 0 -sticky w -pady {15 5} -padx 5 frame $wf.fck grid $wf.fck -row [incr iR] -column 0 -sticky ew -padx 5 grid columnconfig $wf.fck {0 1} -weight 1 radiobutton $wf.fck.copy -text "create a copy" -relief flat -value 0 -variable TAddS(CopySkip) radiobutton $wf.fck.skip -text "skip the imported sequence" -relief flat -value 1 -variable TAddS(CopySkip) grid $wf.fck.copy -row 0 -column 0 -sticky w -padx {30 5} grid $wf.fck.skip -row 0 -column 1 -sticky w # assign cluster label $wf.lbclu -text "The imported sequences should be :" -relief flat grid $wf.lbclu -row [incr iR] -column 0 -sticky w -pady {15 5} -padx 5 radiobutton $wf.bott -relief flat -text "inserted at the bottom of the alignment" -value "end" -variable TAddS(Position) grid $wf.bott -row [incr iR] -column 0 -sticky w -padx {30 5} frame $wf.faf grid $wf.faf -row [incr iR] -column 0 -sticky ew -padx {30 5} #grid columnconfig $wf.faf 0 -weight 1 radiobutton $wf.faf.afse -relief flat -text "inserted after this sequence :" -value "afterseq" -variable TAddS(Position) set Lseqnames [list] foreach n $::LNOrdali { if {$n ne ""} {lappend Lseqnames $n} } set width [PlusLongEltDe $Lseqnames] ttk::combobox $wf.faf.cbs -state readonly -background white -width $width -values $Lseqnames bind $wf.faf.cbs <> {set TAddS(seqInsert) [%W get]} grid $wf.faf.afse -row 0 -column 0 -sticky w grid $wf.faf.cbs -row 0 -column 1 -sticky w -padx {10 0} if {[llength $LNDG] > 1} { radiobutton $wf.clus -relief flat -text "inserted into their corresponding cluster \naccording to sequences identity" -justify left -value "cluster" -variable TAddS(Position) grid $wf.clus -row [incr iR] -column 0 -sticky w -padx {30 5} } frame $wf.but grid $wf.but -row [incr iR] -column 0 -sticky ew -pady {40 10} -padx 5 grid columnconfig $wf.but {0 1} -weigh 1 button $wf.but.dis -background red -text "Dismiss" -command [list FinAfficheAskAddSeq dismiss] button $wf.but.ok -background green1 -text " OK " -command [list FinAfficheAskAddSeq ok] grid $wf.but.dis -row 0 -column 0 -sticky w -padx 5 grid $wf.but.ok -row 0 -column 1 -sticky e -padx 5 bind $wf.but.ok "$wf.but.ok invoke" FenetreAuCentre $w $wf.but.ok configure -default active focus $wf.but.ok tkwait window $w if {$TAddS(ok)} { return [array get TAddS] } else { return "" } } proc AfficheAssocie {Source CoRepertoire {Maniere ""}} { global RepertoireDuGenome regsub -nocase {\.[a-z_]*$} $Source "" Source set Nom [file tail $Source] set CheminSource [file dirname $Source] set CheminCheminSource [file dirname $CheminSource] set RepSource [file tail $CheminCheminSource] regsub "$RepSource" $Source "$CoRepertoire" Nouveau Wup "If Nouveau not found we try CoRepertoire/Nom" foreach Nouveau [list $Nouveau "$RepertoireDuGenome/$CoRepertoire/$Nom"] { if { ! [file exists $Nouveau]} { continue } if {$Maniere=="" && [regexp "bla" $CoRepertoire]} { set Maniere "AvecAligneursAvecSegAlignement" } return [AfficheFichier $Nouveau $Maniere] } FaireLire "Sorry, no file associated to\n$Source $CoRepertoire" return "" } proc AfficheBallastDuBlastP {FichierBlastP Nom} { set TexteBallast [Ballast $FichierBlastP [RepertoireDeTravail] "" "TexteSansFichier"] return [AfficheVariable $TexteBallast "AvecGrapheAvecSegAlignementAvecAligneurs" $Nom] } proc AfficheBarreBoutons {} { global OrdEtcDir OrdMeth ListeOrdMeth FrmToolBar NomFenetreOrdali set FrmToolBar $NomFenetreOrdali.tbb frame $FrmToolBar grid $FrmToolBar -row 1 -column 0 -sticky ew -padx 5 set frm $FrmToolBar set fbopen [file join $OrdEtcDir open.gif] image create photo bopen -file $fbopen button $frm.btopen -image bopen -command OuvrirFichierAlignementDansOrdali set fbclose [file join $OrdEtcDir file_close.gif] image create photo bclose -file $fbclose button $frm.btclose -image bclose -command FermeFichier set freload [file join $OrdEtcDir file_reload.gif] image create photo breload -file $freload button $frm.btreload -image breload -command ReLoadFichier set fsave [file join $OrdEtcDir "save.gif"] image create photo bsave -file $fsave button $frm.btsave -image bsave -command SauveLAlignement set fbcut [file join $OrdEtcDir "cut.gif"] image create photo bcut -file $fbcut button $frm.btcut -image bcut -command CutLesNoms set fbcopy [file join $OrdEtcDir "copy.gif"] image create photo bcopy -file $fbcopy button $frm.btcopy -image bcopy -command CopyLesNoms set fbpaste [file join $OrdEtcDir "paste.gif"] image create photo bpaste -file $fbpaste button $frm.btpaste -image bpaste -command PasteLesNoms set fbinsp [file join $OrdEtcDir "inssep.gif"] image create photo binsp -file $fbinsp button $frm.btinsp -image binsp -command "AjouteSpaceSeq" set fbrems [file join $OrdEtcDir "remsep.gif"] image create photo brems -file $fbrems button $frm.btrems -image brems -command "EnleveSpaceSeq" set fboverview [file join $OrdEtcDir overview.gif] image create photo boverview -file $fboverview button $frm.btoverview -image boverview -command AfficheOverview set fbannote [file join $OrdEtcDir "notepad.gif"] image create photo bannote -file $fbannote #button $frm.btannote -image bannote -command [list ChangeMode annotation] set fbfind [file join $OrdEtcDir "find.gif"] image create photo bfind -file $fbfind button $frm.btfind -image bfind -command [list ChangeMode search] set fbprint [file join $OrdEtcDir "print.gif"] image create photo bprint -file $fbprint button $frm.btprint -image bprint -command PrintSetup set fbtree [file join $OrdEtcDir "buildtree.gif"] image create photo btree -file $fbtree set ::WOrdali(BtnArbres) $frm.bttree button $frm.bttree -image btree -command [list ChangeMode arbres] set fbclus [file join $OrdEtcDir "cluster.png"] image create photo bclus -file $fbclus button $frm.btclus -image bclus -command [list ChangeMode arbres] set fbeditor [file join $OrdEtcDir "editor.gif"] image create photo beditor -file $fbeditor button $frm.bteditor -image beditor -command [list ChangeMode seqlab] set fbo3d [file join $OrdEtcDir "ord3d.gif"] image create photo bo3d -file $fbo3d button $frm.bto3d -image bo3d -command [list ChangeMode superpose] grid $frm.btopen -row 0 -column 0 -sticky w grid $frm.btclose -row 0 -column 1 -sticky w grid $frm.btreload -row 0 -column 2 -sticky w grid $frm.btsave -row 0 -column 3 -sticky w grid $frm.btprint -row 0 -column 4 -sticky w -padx {1 5} grid $frm.btcut -row 0 -column 5 -sticky w -padx {5 1} grid $frm.btcopy -row 0 -column 6 -sticky w grid $frm.btpaste -row 0 -column 7 -sticky w -padx {1 5} grid $frm.btclus -row 0 -column 8 -sticky w -padx {5 1} grid $frm.btinsp -row 0 -column 9 -sticky w grid $frm.btrems -row 0 -column 10 -sticky w grid $frm.bttree -row 0 -column 11 -sticky w grid $frm.bteditor -row 0 -column 12 -sticky w grid $frm.bto3d -row 0 -column 13 -sticky w -padx {1 5} grid $frm.btfind -row 0 -column 14 -sticky w -padx {5 1} grid $frm.btoverview -row 0 -column 15 -sticky w #grid $frm.btannote -row 0 -column 16 -sticky w # grid rowconfig $frm 0 -weight 0 # grid columnconfig $frm all -weight 1 # grid columnconfig $frm {16 17} -weight 1 # grid columnconfig $frm 16 -minsize $wdt setTooltip $frm.btopen "Open" setTooltip $frm.btclose "Close" setTooltip $frm.btreload "Reload" setTooltip $frm.btsave "Save" setTooltip $frm.btcut "Cut" setTooltip $frm.btcopy "Copy" setTooltip $frm.btpaste "Paste" #setTooltip $frm.btundo "Edit backward" #setTooltip $frm.btredo "Edit forward" setTooltip $frm.btinsp "Add separator" setTooltip $frm.btrems "Remove separator" setTooltip $frm.btoverview "Alignment overview" #setTooltip $frm.btannote "Annotate alignment" setTooltip $frm.btfind "Search" setTooltip $frm.btprint "Print" setTooltip $frm.btclus "Cluster mode" setTooltip $frm.bttree "Tree building" setTooltip $frm.bteditor "Alignment editor" setTooltip $frm.bto3d "3D display" #update idletasks #MesCouleurs $frm return } proc AfficheBarreMac {} { global NomFenetreOrdali FrmVues WOrdali NomTextSeq ListeDesMacs set wv $NomFenetreOrdali.fmac set FrmVues $wv frame $FrmVues grid $FrmVues -row 2 -column 0 -sticky ew -padx 5 -pady {1 3} frame $wv.fcx grid $wv.fcx -row 0 -column 0 -sticky w label $wv.fcx.lmac -text "Alignment " -justify left -anchor w set WOrdali(combomac) $wv.fcx.cmac ttk::combobox $wv.fcx.cmac -background white -state readonly -width 40 -textvariable ::Defauts(NmMacCourant) bind $WOrdali(combomac) <> [list MiseAJourMac] grid $wv.fcx.lmac -row 0 -column 0 -sticky w -padx {1 2} grid $wv.fcx.cmac -row 0 -column 1 -sticky w -padx {2 5} frame $wv.fbt grid $wv.fbt -row 0 -column 1 -sticky e set WOrdali(BoutZones) $wv.fbt.bzon button $wv.fbt.bzon -text "View Zone" -bg cyan -command [list AfficheZonesClustering] button $wv.fbt.binf -text "Info" -bg white -command [list InfosDuMac] button $wv.fbt.bsav -text "Overwrite" -bg green1 -command [list SauveLeMac 0] button $wv.fbt.bres -text "Reset" -bg cyan -command [list MiseAJourMac reset] button $wv.fbt.bkip -text "New !" -bg green1 -command [list SauveLeMac 1] grid $wv.fbt.bzon -row 0 -column 0 -sticky e -padx {5 1} grid $wv.fbt.binf -row 0 -column 1 -sticky e -padx {1 5} grid $wv.fbt.bres -row 0 -column 2 -sticky e -padx {5 1} grid $wv.fbt.bsav -row 0 -column 3 -sticky e grid $wv.fbt.bkip -row 0 -column 4 -sticky e grid rowconfigure $wv 0 -weight 0 grid columnconfig $wv all -weight 1 return } proc AfficheBarreMenus {} { global Defauts NomFenetreOrdali Toggle FrmMenu global MenuFile MenuEdit MenuView MenuGroups MenuDisplay MenuStructure Toggle set bgm [set Defauts(BackAppli)] set w $NomFenetreOrdali set mb $w.menuBar menu $mb -tearoff 0 set mfi $w.menuBar.file set med $w.menuBar.edit set mvw $w.menuBar.view set mse $w.menuBar.sequence set mal $w.menuBar.alignement set mst $w.menuBar.structure set mto $w.menuBar.tools set min $w.menuBar.info set mhe $w.menuBar.help set MenuFile $mfi set MenuEdit $med set MenuView $mvw set MenuSequence $mse set MenuAlignement $mal set MenuStructure $mst set MenuTools $mst # create sub-menus menu $mfi -activebackground "#0083ffff0000" -foreground black menu $med -activebackground "#0083ffff0000" -foreground black menu $mvw -activebackground "#0083ffff0000" -foreground black menu $mse -activebackground "#0083ffff0000" -foreground black menu $mal -activebackground "#0083ffff0000" -foreground black menu $mst -activebackground "#0083ffff0000" -foreground black menu $mto -activebackground "#0083ffff0000" -foreground black menu $min -activebackground "#0083ffff0000" -foreground black menu $mhe -activebackground "#0083ffff0000" -foreground black # Create the munu bar itself $mb add cascade -label File -menu $mfi -underline 0 $mb add cascade -label Edit -menu $med -underline 0 $mb add cascade -label View -menu $mvw -underline 0 $mb add cascade -label Sequences -menu $mse -underline 0 $mb add cascade -label Alignment -menu $mal -underline 0 $mb add cascade -label Structures -menu $mst -underline 0 $mb add cascade -label Tools -menu $mto -underline 0 $mb add cascade -label " ? " -menu $min -underline 1 $mb add cascade -label Help -menu $mhe -underline 0 # # Menu file set mfiti "$mfi.typefilein" menu $mfiti -tearoff 0 -background $bgm $mfiti add command -label "a MSF file" -command "OuvrirFichierAlignementDansOrdali MSF" $mfiti add command -label "a Macsim/XML file" -command "OuvrirFichierAlignementDansOrdali XML" $mfiti add command -label "a TFA file" -command "OuvrirFichierAlignementDansOrdali TFA" $mfiti add command -label "a Clustal ALN file" -command "OuvrirFichierAlignementDansOrdali ALN" $mfiti add command -label "a RSF file" -command "OuvrirFichierAlignementDansOrdali RSF" $mfi add cascade -label "Open ..." -menu $mfiti -underline 0 -background $bgm $mfi add command -label "Save" -command "SauveLAlignement" # cascade "save as ..." set mfito "$mfi.typefileout" menu $mfito -tearoff 0 $mfito add command -label "MSF file" -command "SauveLAlignement MSF JLeSauveAs" $mfito add command -label "Macsim/XML file" -command "SauveLAlignement XML JLeSauveAs" $mfito add command -label "TFA file" -command "SauveLAlignement TFA JLeSauveAs" $mfito add command -label "ALN (ClustalW) file" -command "SauveLAlignement ALN JLeSauveAs" $mfito add command -label "ORD file" -command "SauveLAlignement ORD JLeSauveAs" $mfi add cascade -label "Save as ..." -menu $mfito -underline 0 # save window as .. set mfitw "$mfi.windowfileout" menu $mfitw -tearoff 0 -background $bgm $mfitw add command -label "a MSF file" -command "CreeLAlignementDeLaFenetre MSF" $mfitw add command -label "a TFA file" -command "CreeLAlignementDeLaFenetre TFA" $mfi add cascade -label "Save window as" -menu $mfitw -underline 0 $mfi add command -label "Close" -command "FermeFichier" $mfi add separator $mfi add command -label "Add sequences ..." -command "AjouteSeqs" $mfi add command -label "Add PDB ..." -command "FenetreAjoutePDB" $mfi add separator $mfi add command -label "Print" -command "PrintSetup" $mfi add separator $mfi add command -label "Quit Ordalie" -command "AdieuOrdali" # Menu edition $med add command -label "Cut" -accelerator "Ctrl-x" -command "CutLesNoms" $med add command -label "Copy" -accelerator "Ctrl-c" -command "CopyLesNoms" $med add command -label "Paste" -accelerator "Ctrl-v" -command "PasteLesNoms" $med add separator $med add command -label "Preferences" -command "AffichePreferences2" # Menu View $mvw add command -label "Bigger font" -accelerator "Ctrl-plus" -command "TailleFonte +2" $mvw add command -label "Smaller font" -accelerator "Ctrl-minus" -command "TailleFonte -2" $mvw add separator $mvw add command -label "Open Log Console" -command "ToggleAuLog" # output log cascade set mvwol $mvw.outlog menu $mvwol -tearoff 0 -background $bgm $mvwol add command -label "HTML" -command {AuLog LOutput HTML} $mvwol add command -label "Text" -command {AuLog LOutput Text} $mvw add cascade -label "Output Log as ..." -menu $mvwol $mvw add separator $mvw add command -label "Toggle Full-screen mode" -command "ToggleFullScreen" $mvw add separator set Toggle(AllSeqs) [set Defauts(ToggleAllSeqs)] set Toggle(ToolBar) [set Defauts(ToggleToolBar)] set Toggle(Feature) [set Defauts(ToggleFeature)] set Toggle(Scores) [set Defauts(ToggleScores)] set Toggle(AuLog) [set Defauts(ToggleAuLog)] set Toggle(ColRes) [set Defauts(ToggleColRes)] $mvw add checkbutton -label "Show/Hide ToolBar" -variable Toggle(ToolBar) -command ToggleToolbar $mvw add checkbutton -label "Show/Hide Scores" -variable Toggle(Scores) -command ToggleScores $mvw add checkbutton -label "Show/Hide Features" -variable Toggle(Feature) -command ToggleFeature # Menu sequence set msena "$mvw.nomsaff" $mse add cascade -label "Names as " -menu $msena -underline 0 -background $bgm menu $msena -tearoff 0 -background [set Defauts(BackAppli)] $msena add command -label "Seq. Name" -command "AutresNomsAff seqname" $msena add command -label "Accession Number" -command "AutresNomsAff access" $msena add command -label "Bank Id" -command "AutresNomsAff bid" $msena add command -label "Gen.Sp" -command "AutresNomsAff gen.sp" $mse add separator $mse add command -label "Identity Mode" -command "ChangeMode donnepci" -accelerator "Shift I" $mse add command -label "Search Mode" -command "ChangeMode search" $mse add separator $mse add command -label "retrieve Seq. info" -command "FetchInfosSeqs" $mse add command -label "Browse Seq. info" -command "MontreInfoSeq" $mse add command -label "Edit Seq. info" -command "EditInfoSeq" $mse add command -label "Sequence Vrp" -command "Ordali_Vrp" $mse add separator $mse add checkbutton -label "Show/Hide Phylum" -variable Defauts(AffPhy) -command "ColorieNomsSelonPhylum" $mse add checkbutton -label "Show/Hide group colors" -variable Defauts(AffGrp) -command "ColorieNomsSelonGroupes" $mse add checkbutton -label "Show/Hide Sec. Str." -variable Defauts(AffSS) -command ToggleSecStr # # Menu alignement $mal add command -label "Create Macsims ..." -command CreateAndDisplayMacsims $mal add separator $mal add command -label "Clusters Mode" -command "ChangeMode cluster" -accelerator "Shift G" $mal add command -label "Add separator" -command "AjouteSpaceSeq" $mal add command -label "Remove separator" -command "EnleveSpaceSeq" $mal add command -label "Remove All separators" -command "NettoieAffichage" $mal add command -label "Names Of Clusters" -command "NamesOfClusters" $mal add separator $mal add command -label "Alignment Overview" -command "AfficheOverview" $mal add command -label "Alignment Barcode" -command BarcodeAlignment $mal add command -label "Features Summary" -command "FeatureSummary" #$mal add command -label "Annotate Alignment" -command "ChangeMode annotation" $mal add separator $mal add command -label "Feature Mode" -command "ChangeMode feature" $mal add command -label "Alignment Editor" -command "ChangeMode seqlab" -accelerator "Shift E" $mal add command -label "Conservation Mode" -command "ChangeMode conservation" -accelerator "Shift C" $mal add command -label "Tree Mode" -command "ChangeMode arbres" -accelerator "Shift T" $mal add command -label "Features Editor" -command "ChangeMode feateditor" $mal add separator $mal add command -label "Toggle physicochem. col." -command "ToggleCouleursResidues" # # Menu structure $mst add command -label "Superpose Structures" -command [list ChangeMode superpose] $mst add separator $mst add command -label "Display Structures" -command "VisualiseStructure" $mst add separator $mst add command -label "Color Sec. Str by conservation" -command "ColorieSSSelonConservation" $mst add separator $mst add command -label "Save PDB" -command "SauveLesPDB" # menu tools $mto add command -label "Profile identity" -command IdentityProfileGUI # Menu info $min add command -label "About Ordali" -command "InfosSurOrdali" # Menu help $mhe add command -label "Help on Ordali" -command "LanceDoc" [winfo toplevel $NomFenetreOrdali] configure -menu $mb return } proc AfficheBilanXHda {{Selection ""}} { global RepertoireDuGenome Wup "Affiche parmi la liste des bilans, ceux voulus" set RepBilan "$RepertoireDuGenome/bilan_xhda" if {$Selection==""} { foreach FichierBilan [glob -nocomplain "$RepBilan/*"] { set LeBilan [File tail $FichierBilan] lappend LesBilans $LeBilan } set Selection [ChoixDesPresents [lsort $LesBilans]] } set Selection [join $Selection "\n"] return [CreeEtAfficheUnBilanHDACroises $Selection] } proc AfficheBootstrap {AId n} { set t [set ::Abr(Arbre,$AId)] if {[$t isleaf $n]} {return} foreach e [$t children $n] { AfficheBootstrap $AId $e } if {$n eq "root"} {return} set PAD [set ::Abr($AId,PAD)] set ir [$t get $n IdRot] set Lbox [$PAD bbox $ir] MarqueBootstrap $AId $n $Lbox $ir return } proc AfficheBoutonsAnnotation {} { global FrmBouton Anno if {[TypeAli] eq "pasdali"} {return} set wp "${FrmBouton}.fanno" frame $wp -relief sunken -bd 2 grid $wp -row 0 -column 1 -sticky ew grid rowconfig $wp all -weight 0 grid columnconfig $wp {0 1 3 4} -weight 0 grid columnconfig $wp 2 -weight 1 set Lcol [set ::Couleurs(Stock)] set Anno(fgcol) [lindex $Lcol 0] set Anno(NtagCou) "" set wcol [PlusLongEltDe $Lcol] ttk::combobox $wp.ccol -state readonly -width $wcol -values $Lcol -textvariable Anno(fgcol) bind $wp.ccol <> [list ChangeCouleurAnnotation] button $wp.bnew -text " New " -bg cyan -command [list NouvelleAnnotation] button $wp.bedt -text "Edit" -bg cyan -command [list EditeAnnotation] set Anno(WText) $wp.txt text $wp.txt -width 10 -height 3 -font "Helvetica 10" -bg white -yscrollcommand "$wp.scr set" -state normal scrollbar $wp.scr -width 8 -command "$wp.txt yview " button $wp.badd -bg yellow -text " Add " -command [list AjouteAnnotation %W] button $wp.bdel -bg red -text "Delete" -command [list DetruitAnnotation] button $wp.bret -bg green1 -text "Done !" -command [list QuitteAnnotation] grid $wp.ccol -row 0 -column 0 -columnspan 2 -sticky w grid $wp.bnew -row 1 -column 0 -sticky w -ipadx 2 grid $wp.bedt -row 1 -column 1 -sticky w -ipadx 2 grid $wp.txt -row 0 -column 2 -rowspan 3 -sticky news grid $wp.scr -row 0 -column 3 -rowspan 3 -sticky ns grid $wp.badd -row 0 -column 4 -sticky e grid $wp.bdel -row 1 -column 4 -sticky e grid $wp.bret -row 2 -column 4 -sticky e $::NomTextSeq tag configure selZone -background lightblue tkwait window $wp return } proc AfficheBoutonsArbres {} { global Defauts FrmBouton NomTextSeq ZoneTree ZoneSelect ListeTypesDeFeatures WOrdali # pre-definit variables set lg [LongueurAlignement] set lgd [expr {double($lg)}] set Defauts(TreeNBoot) [expr {int($lgd*1.15)}] while {$Defauts(TreeNBoot) % 10} { incr Defauts(TreeNBoot) } # mise en place boutons set w $FrmBouton set ws $w.treesel frame $ws -relief sunken -bd 2 grid $ws -row 0 -column 1 -sticky news -pady 5 frame $ws.falcl grid $ws.falcl -row 0 -column 0 -sticky nw -padx 5 -pady 5 label $ws.falcl.lbf -anchor w -justify left -text "Feature :" if {! [info exists ListeTypesDeFeatures]} { set ListeTypesDeFeatures {} } set wdt [PlusLongEltDe $ListeTypesDeFeatures] set LesTypes [linsert $ListeTypesDeFeatures 0 "None"] set Tree(Combo) $ws.falcl.cft ttk::combobox $ws.falcl.cft -state readonly -width $wdt -background white -values $LesTypes -textvariable TreeFeat set WOrdali(Tree,SelectAll) $ws.falcl.sal $ws.falcl.cft current 0 bind $ws.falcl.cft <> [list ChangeFeature %W] button $ws.falcl.cle -text "Clear" -background white -command "DeselectToutesLesColonnes " button $ws.falcl.sal -text "Select All" -background cyan -command "SelectionneToutesColonnes" grid $ws.falcl.lbf -row 0 -column 0 -sticky ew grid $ws.falcl.cft -row 0 -column 1 -sticky ew grid $ws.falcl.cle -row 1 -column 0 -sticky ew grid $ws.falcl.sal -row 1 -column 1 -sticky ew grid columnconfig $ws.falcl 1 -weight 1 frame $ws.frmsst grid $ws.frmsst -row 0 -column 1 -sticky nw -padx 5 -pady 5 checkbutton $ws.frmsst.pdb -text "with PDB seq" -anchor w -justify left -variable Defauts(PDBTree) -onvalue 1 -offvalue 0 checkbutton $ws.frmsst.gap -text "pairwise/global" -anchor w -justify left -variable Defauts(TypeGapTree) -onvalue "pairwise" -offvalue "global" button $ws.frmsst.loe -text "Load Tree" -background white -command LoadUnArbre grid $ws.frmsst.pdb -row 0 -column 0 -sticky ew grid $ws.frmsst.gap -row 1 -column 0 -sticky ew grid $ws.frmsst.loe -row 0 -column 1 -sticky ew grid columnconfig $ws.frmsst 0 -weight 1 frame $ws.fbtp grid $ws.fbtp -row 0 -column 2 -sticky nw -padx 5 -pady 5 set WOrdali(Tree,Bootstrap) $ws.fbtp.ynbtp checkbutton $ws.fbtp.ynbtp -text "Bootstrap" -anchor w -justify left -variable Defauts(TreeBoot) -onvalue 1 -offvalue 0 entry $ws.fbtp.nbbtp -justify right -width 5 -bg white -textvariable Defauts(TreeNBoot) grid $ws.fbtp.ynbtp -row 0 -column 0 -sticky ew grid $ws.fbtp.nbbtp -row 1 -column 0 -sticky ew grid columnconfig $ws.fbtp 0 -weight 1 set wc "$ws.control" frame $wc grid $wc -row 0 -column 3 -sticky ne -padx 5 -pady 5 set WOrdali(Tree,Draw) $wc.fin button $wc.fin -text "Draw" -background green1 -command "CalculeUnArbre" button $wc.dis -text "Return" -background orange -command "destroy $ws" grid $wc.fin -row 0 -column 0 -sticky ew grid $wc.dis -row 1 -column 0 -sticky ew grid columnconfig $wc 0 -weight 1 grid columnconfig $ws all -weight 1 # bindings BindModeSelection if {! [info exists ZoneTree]} { set ZoneTree {} } else { set ZoneSelect $ZoneTree } AfficheZonesSelectionnees $ZoneTree StockPosition MesCouleurs $FrmBouton tkwait window $ws $NomTextSeq tag remove slct 1.0 end return } proc AfficheBoutonsCherche {{prevMode ""}} { global FrmBouton Chrc # setup window pour AfficheModeCherche set Chrc(NbrOccus) "0 found" set Chrc(Motif) "" set Chrc(LOccus) {} set Chrc(IdxMotif) {} set Chrc(prevMode) $prevMode set ws "$FrmBouton.fsearch" frame $ws -relief sunken -bd 2 grid $ws -row 0 -column 1 -sticky news -pady 5 frame $ws.fse label $ws.fse.lbl1 -text "Search a sequence motif" -justify left -anchor w label $ws.fse.lbl2 -text "Motif :" -anchor w -justify left entry $ws.fse.ent -background white -width 20 -textvariable Chrc(Motif) button $ws.fse.sea -text "Search" -background yellow -command "ChercheMotif" label $ws.fse.lbnb -anchor w -justify right -textvariable Chrc(NbrOccus) grid $ws.fse.lbl1 -row 0 -column 0 -columnspan 2 -sticky nw grid $ws.fse.lbl2 -row 1 -column 0 -sticky nw grid $ws.fse.ent -row 1 -column 1 -sticky nw grid $ws.fse.sea -row 0 -rowspan 2 -column 2 -sticky nsw grid $ws.fse.lbnb -row 0 -rowspan 2 -column 3 -sticky nsw -ipadx 5 grid $ws.fse -row 0 -column 0 -sticky nw -pady 2 -padx 2 -ipadx 5 grid columnconfig $ws.fse 1 -weight 1 frame $ws.frbt button $ws.frbt.next -text "Find Next" -background cyan -command ChercheMotifSuivant button $ws.frbt.dismiss -text "Return" -background orange -command "FinCherche" grid $ws.frbt.next -row 0 -column 0 -sticky nsw grid $ws.frbt.dismiss -row 0 -column 1 -sticky nse grid $ws.frbt -row 0 -column 1 -sticky news -padx {20 2} grid columnconfig $ws.frbt 1 -weight 1 grid rowconfig $ws.frbt all -weight 1 grid columnconfig $ws 1 -weight 1 bind $ws.fse.ent {$FrmBouton.fsearch.fse.sea invoke} MesCouleurs $FrmBouton focus $ws.fse.ent tkwait window $ws return } proc AfficheBoutonsClusters {} { global FrmBouton NomTextSeq ZoneClusterisation ListeTypesDeFeatures Clus set ws $FrmBouton.clusel frame $ws -relief sunken -bd 2 grid $ws -row 0 -column 1 -sticky news -pady 5 grid columnconfig $FrmBouton 1 -weight 1 set Clus(Title) "Give a Title to your clustering" set Clus(ShowSeqOut) 1 set Clus(NewEntry) 1 # Features/Clear/Select All frame $ws.fs grid $ws.fs -row 0 -column 0 -sticky w -padx 5 -pady 5 label $ws.fs.lbf -anchor w -justify left -text "Feature :" if {! [info exists ListeTypesDeFeatures]} { set ListeTypesDeFeatures {} } set LesTypes [linsert $ListeTypesDeFeatures 0 "None"] set wdt [PlusLongEltDe $LesTypes] set Clus(Combo) $ws.fs.cft ttk::combobox $ws.fs.cft -state readonly -width $wdt -background white -values $LesTypes -textvariable ClusFeat button $ws.fs.sal -text "Select All" -background cyan -command [list SelectionneToutesColonnes] button $ws.fs.cle -text "Clear" -background white -command [list DeselectToutesLesColonnes] grid $ws.fs.lbf -row 0 -column 0 -sticky we grid $ws.fs.cft -row 0 -column 1 -sticky we grid $ws.fs.cle -row 1 -column 0 -sticky we grid $ws.fs.sal -row 1 -column 1 -sticky we grid columnconfig $ws.fs 0 -weight 1 # Criterion frame $ws.fv grid $ws.fv -row 0 -column 1 -sticky e -padx 5 -pady 5 label $ws.fv.lctr -text "Criterions : " -relief flat -anchor w -justify right menubutton $ws.fv.mctr -relief raised -text "Choose ..." -direction above -menu $ws.fv.mctr.criteres menu $ws.fv.mctr.criteres -tearoff 0 foreach f {"% identity" "length" "hydrophobicity" "pI" "aa composition"} { $ws.fv.mctr.criteres add checkbutton -label "$f" -variable Clus(LCrit,$f) -onvalue 1 -offvalue 0 } set lfdm "Life Domain" set Clus(LCrit,$lfdm) 0 $ws.fv.mctr.criteres add separator $ws.fv.mctr.criteres add command -label "Life Domain" -command {set lfdm "Life Domain" ; set ::Clus(LCrit,$lfdm) [expr {! [set ::Clus(LCrit,$lfdm)]}] ; update} # clustering methods label $ws.fv.lmet -text "Method : " -relief flat -anchor w -justify right set Lmeth [list "kmeans / DPC" "hierarchic / secator" "mixture model / AIC" "mixture model / BIC"] ttk::combobox $ws.fv.cmet -state readonly -values $Lmeth -textvariable Clus(Method) #bind $ws.fv.cmet <> NouveauClustering grid $ws.fv.lctr -row 0 -column 0 -sticky e grid $ws.fv.mctr -row 0 -column 1 -sticky ew grid $ws.fv.lmet -row 1 -column 0 -sticky e grid $ws.fv.cmet -row 1 -column 1 -sticky ew # Run button $ws.run -text "Compute" -background yellow -command NouveauClustering grid $ws.run -row 0 -column 2 -rowspan 2 -sticky ns -padx 5 -pady 5 # controls frame $ws.fc grid $ws.fc -row 0 -column 3 -sticky e -padx 5 -pady 5 grid columnconfig $ws.fc 0 -weight 1 button $ws.fc.ori -text "Reset" -background green1 -command [list DefinitionGroupes integral] button $ws.fc.noc -text "No Clusters" -background yellow -command [list NouveauClustering nogroups] grid $ws.fc.ori -row 0 -column 0 -sticky we -padx 5 grid $ws.fc.noc -row 1 -column 0 -sticky ns -padx 5 # Dismiss/New/Overwrite frame $ws.fb grid $ws.fb -row 0 -column 4 -sticky e -padx 5 -pady 5 grid columnconfig $ws.fb 0 -weight 1 button $ws.fb.cnm -text "Clusters\nNames" -bg cyan -command {NamesOfClusters} button $ws.fb.fin -text " Save " -background green1 -command GardeClustering button $ws.fb.dis -text "Return" -background green1 -command [list QuitteModeClusters $ws] grid $ws.fb.cnm -row 0 -column 0 -rowspan 2 -sticky ns -padx 5 grid $ws.fb.fin -row 0 -column 1 -sticky ew -padx 5 grid $ws.fb.dis -row 1 -column 1 -sticky ew -padx 5 grid columnconfig $ws all -weight 1 grid rowconfig $ws all -weight 0 $ws.fs.cft current 0 bind $ws.fs.cft <> [list ChangeFeature %W] #update idletasks # bindings if {! [info exists ZoneClusterisation]} {set ZoneClusterisation ""} AfficheZonesSelectionneesCluster StockPosition BindModeSelection # Tags Specifiques $::NomNomSeq tag configure SLock -foreground black -background grey MesCouleurs $FrmBouton tkwait window $ws BindModeNormal return } proc AfficheBoutonsConservation {} { global FrmBouton Cons Defauts set ws $FrmBouton.cons frame $ws -relief sunken -bd 2 grid $ws -row 0 -column 1 -sticky news -pady 5 grid columnconfig $ws 1 -weight 1 set wx "$ws.chx" frame $wx grid $wx -row 0 -column 0 -sticky nw -padx 2 -pady {2 5} grid columnconfig $wx 1 -weight 1 label $wx.lmth -text "Method : " -anchor w -justify left set ListeOrdMeth [list "Threshold" "Liu" "Mean Distances" "Vector Norm" "Multi" "BILD"] set wdt [PlusLongEltDe $ListeOrdMeth] ttk::combobox $wx.smth -width $wdt -background white -state readonly -textvariable Cons(Method) -values $ListeOrdMeth $wx.smth current 0 bind $wx.smth <> [list set ::Cons(Title) ""] label $wx.ltt -text "Title : " -anchor w -justify left set Cons(Entry) $wx.tit entry $wx.tit -bg white -textvariable Cons(Title) -width 20 set Cons(OnlyGlobal) 0 checkbutton $wx.glo -text "only global" -anchor w -justify left -relief flat -onvalue 1 -offvalue 0 -variable Cons(OnlyGlobal) set Cons(PDB) 0 checkbutton $wx.pdb -text "include PDB" -anchor w -justify left -relief flat -variable Cons(PDB) -onvalue 1 -offvalue 0 grid $wx.lmth -row 0 -column 0 -sticky new grid $wx.smth -row 0 -column 1 -sticky new grid $wx.ltt -row 1 -column 0 -sticky new grid $wx.tit -row 1 -column 1 -sticky new grid $wx.pdb -row 0 -column 2 -sticky new grid $wx.glo -row 1 -column 2 -sticky new set wc "$ws.control" frame $wc grid $wc -row 0 -column 1 -sticky nsw -padx 2 -pady 2 grid columnconfig $wc 2 -weight 1 button $wc.run -text "Compute" -bg yellow -command [list LanceCalculConservation] set Cons(Show) [set ::Toggle(Scores)] update checkbutton $wc.shh -text "Show scores " -anchor w -justify left -relief flat -onvalue 1 -offvalue 0 -variable Cons(Show) label $wc.lal -text "Show : " -anchor w -justify left set Cons(ConsCou) "None" set Cons(ListeCons) [list "None"] set wdt [PlusLongEltDe $Cons(ListeCons)] set Cons(ComboSel) $wc.call ttk::combobox $wc.call -width $wdt -background white -state readonly -textvariable Cons(ConsCou) -values $Cons(ListeCons) $wc.call current 0 bind $wc.call <> [list ChangeConservation] grid $wc.run -row 0 -rowspan 2 -column 0 -sticky nsw -ipadx 5 grid $wc.lal -row 0 -column 1 -sticky nw grid $wc.call -row 0 -column 2 -sticky new grid $wc.shh -row 1 -column 1 -columnspan 2 -sticky new -ipadx 5 grid rowconfig $wc all -weight 1 # frame save/return set wb "$ws.sds" frame $wb grid $wb -row 0 -column 2 -sticky nse -padx 2 -pady 2 button $wb.save -text " Save " -bg green1 -command [list SauveConservation] button $wb.dis -text "Return" -background green1 -command [list QuitteModeConservation $ws] grid $wb.save -row 0 -column 0 -sticky new grid $wb.dis -row 1 -column 0 -sticky new update idletasks trace add variable Cons(PDB) write PrendPDBDansPilier trace add variable Cons(Show) write ToggleScores trace add variable Cons(ConsCou) write ToggleScores tkwait window $ws return } proc AfficheBoutonsFeateditor {} { global FrmBouton ListeTypesDeFeatures EFeat TabSF TSFori LTFori NomTextSeq if {! [ModeI]} {return} if {[info exists TabSF]} { # TSFori est une sauvegarde !! array set TSFori [array get TabSF] set LTFori $ListeTypesDeFeatures } else { array set TSFori {} set LTFori [list] } set wb $FrmBouton set ws "$wb.select" frame $ws -relief sunken -bd 2 grid $ws -row 0 -column 1 -sticky news -pady 5 -padx 5 # Utilise features presentes label $ws.lbf -anchor w -justify left -text "Feature :" if {! [info exists ListeTypesDeFeatures]} { set ListeTypesDeFeatures {} } set EFeat(FTypes) [linsert $ListeTypesDeFeatures 0 "None"] set wdt [PlusLongEltDe $ListeTypesDeFeatures] set EFeat(FeatCombo) $ws.cft ttk::combobox $ws.cft -state readonly -width $wdt -background white -values $EFeat(FTypes) -textvariable EFeat(Feat) $ws.cft current 0 bind $ws.cft <> [list ChangeFeatureForEditing %W] button $ws.bnw -text "Clear selection" -bg cyan -anchor w -command [list CmdsMenuFeatures "clearsel"] button $ws.bdf -text "Delete Feature" -bg yellow -command {DeleteFeature all ""} grid $ws.lbf -row 0 -column 0 -sticky ew grid $ws.cft -row 0 -column 1 -sticky ew grid $ws.bnw -row 1 -column 0 -sticky ew -columnspan 2 grid $ws.bdf -row 0 -column 2 -sticky ew -padx 3 # frame boutons fichier feat/fet summary frame $wb.fffs set wff $wb.fffs grid $wff -row 0 -column 2 -rowspan 2 -sticky nws -padx 10 -pady 5 button $wff.ff -text "Load feat. file" -background white -command [list ReadRawFeatureFile] button $wff.sm -text "Feature summary" -background cyan -command [list FeatureSummary] grid $wff.ff -row 0 -column 0 -sticky nsw -padx 5 grid $wff.sm -row 0 -column 1 -sticky nse -padx 5 # frame boutons OK / dismiss frame $wb.fokdm set wok $wb.fokdm grid $wok -row 0 -column 3 -sticky ne -padx 5 -pady 5 button $wok.ok -text " Save " -background green1 -command [list RetourEditFeatures save] button $wok.dismiss -text "Cancel" -background red -command [list RetourEditFeatures dismiss] grid $wok.ok -row 0 -column 0 -sticky ew grid $wok.dismiss -row 1 -column 0 -sticky ew grid columnconfig $wok all -weight 0 grid rowconfig $wok all -weight 1 # bindings pour edit features # menu contextuel BindingsFeatEditor set EFeat(LItemSel) [list] set EFeat(ContextMenu) $NomTextSeq.ctxm CreateContextMenuFeature bind $NomTextSeq [list ShowContextMenuFeat] # Selection de zones $NomTextSeq configure -state normal $NomTextSeq tag configure slct -background LightGrey -foreground black $NomTextSeq configure -state disabled # some inits set EFeat(BindInit) [bindtags $NomTextSeq] set EFeat(Score) "" set EFeat(Note) "" set EFeat(Color) "" set EFeat(Name) "" set EFeat(Lx1x2) "" set EFeat(ZoneX1) "" set EFeat(ZoneX2) "" set EFeat(LItemSel) "" tkwait window $ws return } proc AfficheBoutonsFeatures {} { global FrmBouton FrmBtnFea ListeTypesDeFeatures Defauts OrdEtcDir NomNomSeq NomTextSeq EtatBtnFeat if {! [ModeI]} {return} set law $FrmBouton set wb "$FrmBouton.lesbt" set FrmBtnFea $wb frame $wb -relief sunken -bd 2 grid $wb -row 0 -column 1 -sticky news -pady 5 set LFeature [lsort -unique $ListeTypesDeFeatures] if {"Clear" ni $LFeature} { lappend LFeature "Clear" } set NFeat [llength $LFeature] set wdt [winfo reqwidth $NomTextSeq] set lg 0 foreach f $LFeature { incr lg [expr {[string length $f] + 2}] } set Fs [font measure BtnFeatFont "Z"] set Npl [expr {floor($wdt/(($lg/$NFeat)*$Fs))}] set i 0 ; set j 0 foreach f $LFeature { set flo [string tolower $f] regsub -all " " $flo "" fnsp if {[regexp {^Score\-} $f]} { set bg yellow } else { set bg green1 } button ${wb}.$fnsp -background $bg -foreground black -font BtnFeatFont -text "$f" -command [list ColorieSelonFeature $f $wb.$fnsp] grid $wb.$fnsp -padx 2 -pady 1 -row $i -column $j -sticky ew update incr j if {$j >= $Npl} { set j 0 incr i } if {! [info exists EtatBtnFeat($wb.$fnsp)]} { set EtatBtnFeat($wb.$fnsp) 0 } elseif {[EtatDuBouton "$wb.$fnsp"]} { EnfonceBtnFeature $wb.$fnsp } } grid rowconfig $wb all -weight 0 -minsize 0 grid columnconfig $wb all -weight 1 -minsize 0 update lassign [grid bbox $wb] t a x y lassign [grid size $wb] c r if {$c == 1} {set c 2} set wdt [winfo width $FrmBtnFea] set px [expr {floor(($wdt-$x)/($c-1)/2)}] foreach e [grid slaves $wb] { #grid configure $e -ipadx $px if {[$e cget -text] eq "Clear"} {$e configure -background white} } MesCouleurs $FrmBouton return } proc AfficheBoutonsOrdali {} { global boutordali boutreport FrmBouton menustatus if {! [ModeI]} {return} set wb "$FrmBouton.flab" frame $wb -relief sunken -bd 2 grid $wb -row 0 -column 1 -sticky news -pady 5 set boutordali $wb.label label $wb.label -textvariable menustatus -relief sunken -bd 2 -anchor w -bg white -justify left -font "Helvetica 12" grid $wb.label -row 0 -column 0 -sticky ew -padx 2 -pady 1 grid columnconfig $wb all -weight 1 -minsize 0 set menustatus "Hummm ..... \nEverything seems OK ....\nLet's go !" MesCouleurs $FrmBouton return } proc AfficheBoutonsPCI {} { global LNOrdali FrmBouton OrdEtcDir nsq1 nsq2 pciLbl pl1Lbl pl2Lbl LesPCI ListeTypesDeFeatures ZoneSelect ZonePCI if {[TypeAli] eq "pasdali"} {return} set LNoms "Select" foreach n $LNOrdali { if {$n ne ""} {lappend LNoms $n} } set LMx [PlusLongEltDe $LNoms] set wp "$FrmBouton.fpci" frame $wp -relief sunken -bd 2 grid $wp -row 0 -column 1 -sticky ew -pady 5 grid columnconfig $wp {1 2 3} -weight 1 frame $wp.falcl label $wp.falcl.lbf -anchor w -justify left -text "Feature :" if {! [info exists ListeTypesDeFeatures]} { set ListeTypesDeFeatures {} } set EPCI(FTypes) [linsert $ListeTypesDeFeatures 0 "None"] set wdt [PlusLongEltDe $EPCI(FTypes)] set EPCI(FeatCombo) $wp.falcl.cft ttk::combobox $wp.falcl.cft -state readonly -width $wdt -background white -values $EPCI(FTypes) -textvariable EPCI(Feat) $wp.falcl.cft current 0 bind $wp.falcl.cft <> [list ChangeFeatureForEditing %W] button $wp.falcl.cle -text "Clear" -background white -command "DeselectToutesLesColonnes " button $wp.falcl.sal -text "Select All" -background cyan -command "SelectionneToutesColonnes" grid $wp.falcl.lbf -row 0 -column 0 -sticky ew grid $wp.falcl.cft -row 0 -column 1 -sticky ew grid $wp.falcl.cle -row 1 -column 0 -sticky ew grid $wp.falcl.sal -row 1 -column 1 -sticky ew grid $wp.falcl -row 0 -column 0 -sticky nw -padx 2 grid columnconfig $wp.falcl 1 -weight 1 button $wp.bdo -background yellow -text "Compute" -command [list ComputeIdentity] grid $wp.bdo -row 0 -column 1 -sticky nsw -padx 5 -pady 5 set nsq1 [lindex $LNoms 0] set nsq2 [lindex $LNoms 0] set pciLbl "Identity :" set pl1Lbl "length 1 :" set pl2Lbl "length 2 :" frame $wp.fse ttk::combobox $wp.fse.sq1 -background white -width $LMx -height 10 -state readonly -values $LNoms -textvariable nsq1 $wp.fse.sq1 current 0 bind $wp.fse.sq1 <> {CherchePCI %W} ttk::combobox $wp.fse.sq2 -background white -width $LMx -height 10 -state readonly -values $LNoms -textvariable nsq2 $wp.fse.sq2 current 0 bind $wp.fse.sq2 <> {CherchePCI %W} label $wp.fse.lpci -textvariable pciLbl -justify left -anchor w label $wp.fse.lpl1 -textvariable pl1Lbl -justify left -anchor w label $wp.fse.lpl2 -textvariable pl2Lbl -justify left -anchor w grid $wp.fse.sq1 -row 0 -column 0 -sticky ew grid $wp.fse.sq2 -row 1 -column 0 -sticky ew grid $wp.fse.lpci -row 0 -column 1 -padx 5 -sticky ew grid $wp.fse.lpl1 -row 1 -column 1 -padx 5 -sticky ew grid $wp.fse.lpl2 -row 2 -column 1 -padx 5 -sticky ew grid $wp.fse -row 0 -column 2 -sticky nw -padx 5 -pady 5 frame $wp.frbt grid rowconfig $wp.frbt 0 -weight 1 button $wp.frbt.sum -text "Summary" -bg cyan -command [list SummaryPCI] button $wp.frbt.dis -text "Return" -background orange -command "DetruitBoutonsOrdali" grid $wp.frbt.sum -row 0 -column 0 -sticky nsew grid $wp.frbt.dis -row 0 -column 1 -sticky nsew grid $wp.frbt -row 0 -column 3 -sticky nse -padx 5 -pady 5 BindModeSelection if {! [info exists ZonePCI]} { set ZonePCI {} } else { set ZoneSelect $ZonePCI } AfficheZonesSelectionnees $ZonePCI StockPosition tkwait window $FrmBouton.fpci return } proc AfficheBoutonsSeqLab {} { global FrmBouton if {! [ModeI]} {return} set wb $FrmBouton.sl frame $wb -relief sunken -bd 2 grid $wb -row 0 -column 1 -sticky news -pady 5 frame $wb.frmgp grid $wb.frmgp -row 0 -column 0 -sticky w -padx 2 button $wb.frmgp.clear -text "Clear" -background white -width 10 -command "ClearSelections" button $wb.frmgp.ungroup -text "Ungroup" -background cyan -width 10 -command "DegroupeLesSequences" button $wb.frmgp.group -text "Group" -background cyan -width 10 -command "GroupeLesSequences" grid $wb.frmgp.clear -row 0 -column 0 -rowspan 2 -sticky news -padx {2 5} grid $wb.frmgp.group -row 0 -column 1 -sticky ew grid $wb.frmgp.ungroup -row 1 -column 1 -sticky ew grid columnconfig $wb.frmgp 0 -weight 1 grid rowconfig $wb.frmgp all -weight 0 frame $wb.frmnet grid $wb.frmnet -row 0 -column 1 -sticky w -padx 2 button $wb.frmnet.col -text "Rem col gap" -background pink -width 10 -command RemColGap checkbutton $wb.frmnet.ulock -text "Lock/Unlock Seq" -anchor w -justify left -variable ::LockSeqs -onvalue 1 -offvalue 0 -command "EtatLockSeqs" grid $wb.frmnet.ulock -row 0 -column 0 -sticky ew grid $wb.frmnet.col -row 1 -column 0 -sticky ew grid columnconfig $wb.frmnet 0 -weight 1 frame $wb.frmsv grid $wb.frmsv -row 0 -column 2 -sticky e -padx 2 button $wb.frmsv.search -text "Search Motif" -background yellow -command [list ChangeMode "search"] button $wb.frmsv.save -text "temp. save" -background cyan -command SauveTempSeqlab set bdismiss $wb.frmsv.dismiss set breturn $wb.frmsv.return button $wb.frmsv.return -text "Save & Return" -background orange -command [list RetourFenetreOrdali $wb save $breturn] button $wb.frmsv.dismiss -text "Cancel" -background red -command "RetourFenetreOrdali $wb dismiss $bdismiss" grid $wb.frmsv.save -row 0 -column 0 -sticky ew -padx {2 20} grid $wb.frmsv.search -row 1 -column 0 -sticky ew -padx {2 20} grid $wb.frmsv.return -row 0 -column 1 -sticky ew grid $wb.frmsv.dismiss -row 1 -column 1 -sticky ew grid columnconfig $wb.frmsv all -weight 1 grid rowconfig $wb.frmsv all -weight 0 grid columnconfig $wb all -weight 1 grid rowconfig $wb all -weight 1 MesCouleurs $FrmBouton update idletasks tkwait window $wb return } proc AfficheBoutonsSuperposition {} { global FrmBouton NomTextSeq ListeTypesDeFeatures if {! [ModeI]} {return} set w $FrmBouton set ws "$w.select" frame $ws -relief sunken -bd 2 grid $ws -row 0 -column 1 -sticky news -pady 5 frame $ws.falcl grid $ws.falcl -row 0 -column 0 -sticky w -padx 2 label $ws.falcl.lbf -anchor w -justify left -text "Feature :" if {! [info exists ListeTypesDeFeatures]} { set ListeTypesDeFeatures {} } set wdt [PlusLongEltDe $ListeTypesDeFeatures] set LesTypes [linsert $ListeTypesDeFeatures 0 "None"] ttk::combobox $ws.falcl.cft -state readonly -width $wdt -background white -values $LesTypes -textvariable SupFeat $ws.falcl.cft current 0 bind $ws.falcl.cft <> [list ChangeFeature %W] button $ws.falcl.cle -text "Clear" -background white -command "DeselectToutesLesColonnes " button $ws.falcl.sal -text "Select All" -background cyan -command "SelectionneToutesColonnes" grid $ws.falcl.lbf -row 0 -column 0 -sticky ew grid $ws.falcl.cft -row 0 -column 1 -sticky ew grid $ws.falcl.cle -row 1 -column 0 -sticky ew grid $ws.falcl.sal -row 1 -column 1 -sticky ew grid columnconfig $ws.falcl 1 -weight 1 frame $ws.frmsst grid $ws.frmsst -row 0 -column 1 -sticky nw -padx 2 -pady 2 # buttons for helix and sheet button $ws.frmsst.hel -text "All Helices" -background red -width 10 -command [list SelectSSDeType helix] button $ws.frmsst.she -text "All Strands" -background green1 -width 10 -command [list SelectSSDeType sheet] button $ws.frmsst.fin -text "Superpose" -background yellow -width 9 -height 2 -command "FaitSuperposition 1" button $ws.frmsst.dpl -text "Display" -background green1 -width 7 -height 2 -command "VisualiseStructure" grid $ws.frmsst.hel -row 0 -column 0 -sticky new grid $ws.frmsst.she -row 1 -column 0 -sticky new -ipadx 5 grid $ws.frmsst.fin -row 0 -rowspan 2 -column 1 -sticky news -ipady 5 grid $ws.frmsst.dpl -row 0 -rowspan 2 -column 2 -sticky news -ipady 5 grid $ws.frmsst -row 0 -column 1 -sticky news -padx 2 -pady 2 button $ws.dis -text "Return" -background orange -command "DismissSuper" grid $ws.dis -row 0 -column 2 -rowspan 2 -sticky news -padx 2 -pady 2 grid rowconfig $ws 0 -weight 0 grid columnconfig $ws all -weight 1 # bindings BindModeSelection $NomTextSeq tag bind Hel [list SelectLaFeature @%x,%y] $NomTextSeq tag bind H31 [list SelectLaFeature @%x,%y] $NomTextSeq tag bind She [list SelectLaFeature @%x,%y] $NomTextSeq tag bind Tur [list SelectLaFeature @%x,%y] AfficheZonesSelectionneesSuper StockPosition tkwait window $ws $NomTextSeq tag remove slct 1.0 end $NomTextSeq tag remove Marque 1.0 end return } proc AfficheChaqueSegmentDuBlastN {Nom {FichierBlast ""} {Selection ""}} { global RepertoireDuGenome Wup "Shows only these from Selection, all if empty" if {$FichierBlast==""} { set FichierBlast "$RepertoireDuGenome/blastn/$Nom" } if { ! [file exists $FichierBlast]} { return "" } set SeuilDuBlastN 0.001 set LesVoulus {} if {$Selection!=""} { foreach Ligne [split $Selection "\n"] { scan $Ligne "%s" Voulu lappend LesVoulus $Voulu } if {$LesVoulus=={}} { return "" } set SeuilDuBlastN 9999.9 } set LesSegments [ChaqueSegmentDuBlastN $FichierBlast $SeuilDuBlastN $LesVoulus] set Fen [AfficheVariable [join $LesSegments "\n"] "GrandeLargeur" "ChaqueSegmentDuBlast_$Nom"] if { ! [regexp "blastn" $FichierBlast]} { return "" } set B [BoutonneLaFenetre $Fen "Locs on Chromos\nGenScan output" ""] bind $B <1> "VoirLesLocalisationsDuCDNA $Nom \[selection get\]" bind $B "AfficheGenscanDuContig \[selection get\]" return } proc AfficheCompare {{FichierCompare ""} {FichierTFA1 Absent} {FichierTFA2 Absent} {NbPointsMinDansDiag 10}} { global RepertoireDuGenome if {$FichierCompare == ""} { set FichierCompare [ButineArborescence All [pwd]] } elseif {![file exists $FichierCompare]} { return "" } if {![file exists $FichierTFA2]} {set FichierTFA2 "Absent"} if {![file exists $FichierTFA1]} {set FichierTFA1 "Absent"} if {$FichierTFA1 != "Absent" && $FichierTFA2 != "Absent"} { set Seq1 [QueLaSequenceDuTFA $FichierTFA1] set Seq2 [QueLaSequenceDuTFA $FichierTFA2] } set BordX 100 set BordY 100 set ResVerti [winfo screenwidth .] set HauteurFenetre [expr ($ResVerti*1.0)*2/3] set LargeurFenetre $HauteurFenetre set HauteurAffichage [expr ($HauteurFenetre - 2*$BordY ) * 1.0] set LargeurAffichage $HauteurAffichage set TailleMaxNomQuery 100 LitFichierCompare TabCompare $FichierCompare set DQ1 [set TabCompare(DebutQuery1) ] set FQ1 [set TabCompare(FinQuery1) ] set DQ2 [set TabCompare(DebutQuery2) ] set FQ2 [set TabCompare(FinQuery2) ] set Points [set TabCompare(Points) ] set Input1 [set TabCompare(Input1) ] set Input2 [set TabCompare(Input2) ] if {[info exists TabCompare(Description1)]} { set NameQuery1 [set TabCompare(Description1)] } else { set NameQuery1 $Input1 } if {[info exists TabCompare(Description2)]} { set NameQuery2 [set TabCompare(Description2)] } else { set NameQuery2 $Input2 } if {[info exists TabCompare(Window) ]} {set Window [set TabCompare(Window) ]} if {[info exists TabCompare(Stringency)]} {set Stringency [set TabCompare(Stringency)]} if {[info exists TabCompare(WordSize) ]} {set WordSize [set TabCompare(WordSize) ]} if {[info exists TabCompare(Alphabet) ]} {set Alphabet [set TabCompare(Alphabet) ]} set LesPoints [set TabCompare(LesPoints)] set LargeurNuage [expr (abs($FQ1 - $DQ1)+1)*1.0] set HauteurNuage [expr (abs($FQ2 - $DQ2)+1)*1.0] if {$LargeurNuage <= $HauteurNuage} { set Rapport [expr $LargeurAffichage/$LargeurNuage] set LargeurMax $LargeurFenetre set HauteurMax [expr $HauteurNuage*$Rapport + 2*$BordY] } else { set Rapport [expr $HauteurAffichage/$HauteurNuage] set HauteurMax $HauteurFenetre set LargeurMax [expr $LargeurNuage*$Rapport + 2*$BordY] } set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY] $K configure -background white $K create rectangle $BordX $BordY [expr $LargeurNuage*$Rapport + $BordX] [expr $HauteurNuage*$Rapport + $BordY] -outline red if {$TailleMaxNomQuery < [string length $NameQuery1]} { set NameQ1 [string range $NameQuery1 0 $TailleMaxNomQuery] append NameQ1 "..." } else { set NameQ1 $NameQuery1 } $K create text [expr $LargeurFenetre/2] [expr $BordY*2/3 ] -text "$NameQ1" $K create text [expr $LargeurFenetre/2] [expr $HauteurMax - $BordY*2/3] -text "$NameQ1" $K create text $BordX [expr $BordY/2 ] -text "$DQ1" $K create text $BordX [expr $HauteurMax - $BordY/2] -text "$DQ1" $K create text [expr $LargeurMax - $BordX] [expr $BordY/2 ] -text "$FQ1" $K create text [expr $LargeurMax - $BordX] [expr $HauteurMax - $BordY/2] -text "$FQ1" if {$TailleMaxNomQuery < [string length $NameQuery2]} { set NameQ2 [string range $NameQuery2 0 $TailleMaxNomQuery] append NameQ2 "..." } else { set NameQ2 $NameQuery2 } regsub -all "" $NameQ2 "\n" NameQ2 regsub "^\n" $NameQ2 "" NameQ2 regsub "\n$" $NameQ2 "" NameQ2 $K create text [expr $BordX*2/3 ] [expr $HauteurFenetre/2] -text "$NameQ2" $K create text [expr $LargeurMax - $BordX*2/3] [expr $HauteurFenetre/2] -text "$NameQ2" $K create text [expr $BordX/2 ] $BordY -text "$DQ2" $K create text [expr $LargeurMax - $BordX/2] $BordY -text "$DQ2" $K create text [expr $BordX/2 ] [expr $HauteurMax - $BordY] -text "$FQ2" $K create text [expr $LargeurMax - $BordX/2] [expr $HauteurMax - $BordY] -text "$FQ2" foreach LePoint $LesPoints { set PosQ1 [lindex $LePoint 0] set PosQ2 [lindex $LePoint 1] set NbVoisins 0 set PosQ1p [expr $PosQ1 + 1 ] set PosQ1m [expr $PosQ1 - 1 ] set PosQ2p [expr $PosQ2 + 1 ] set PosQ2m [expr $PosQ2 - 1 ] if {[info exists TabCompare($PosQ1,$PosQ2p) ]} {incr NbVoisins} if {[info exists TabCompare($PosQ1p,$PosQ2p)]} {incr NbVoisins} if {[info exists TabCompare($PosQ1p,$PosQ2) ]} {incr NbVoisins} if {[info exists TabCompare($PosQ1p,$PosQ2m)]} {incr NbVoisins} if {[info exists TabCompare($PosQ1,$PosQ2m) ]} {incr NbVoisins} if {[info exists TabCompare($PosQ1m,$PosQ2m)]} {incr NbVoisins} if {[info exists TabCompare($PosQ1m,$PosQ2) ]} {incr NbVoisins} if {[info exists TabCompare($PosQ1m,$PosQ2p)]} {incr NbVoisins} if {$NbVoisins == 0 && $NbPointsMinDansDiag !=0} { continue } elseif {$NbVoisins == 0 && $NbPointsMinDansDiag ==0} { set XMin [expr ($PosQ1 - $DQ1 + 1) * $Rapport + $BordX] set YMin [expr ($PosQ2 - $DQ2 + 1) * $Rapport + $BordY] set XMax [expr ($PosQ1 - $DQ1 + 1) * $Rapport + $BordX] set YMax [expr ($PosQ2 - $DQ2 + 1) * $Rapport + $BordY] $K create rectangle $XMin $YMin $XMax $YMax -fill $Couleur -width 2 -tags [list "$NameQuery1" "$PosXMinDiag1" "$PosXMaxDiag1" "$NameQuery2" "$PosYMinDiag1" "$PosYMaxDiag1" "AvecPosition"] } else { if {![info exists DejaVuSurUneDiag1($PosQ1,$PosQ2)]} { set NbPointsAvantSurDiag1 0 while {[info exists TabCompare($PosQ1m,$PosQ2m)]} { incr NbPointsAvantSurDiag1 set PosQ2m [expr $PosQ2m - 1] set PosQ1m [expr $PosQ1m - 1] set DejaVuSurUneDiag1($PosQ1m,$PosQ2m) 1 } set PosXMinDiag1 [expr $PosQ1 - $NbPointsAvantSurDiag1] set PosYMinDiag1 [expr $PosQ2 - $NbPointsAvantSurDiag1] set NbPointsApresSurDiag1 0 while {[info exists TabCompare($PosQ1p,$PosQ2p)]} { incr NbPointsApresSurDiag1 set PosQ2p [expr $PosQ2p + 1] set PosQ1p [expr $PosQ1p + 1] set DejaVuSurUneDiag1($PosQ1p,$PosQ2p) 1 } set PosXMaxDiag1 [expr $PosQ1 + $NbPointsApresSurDiag1] set PosYMaxDiag1 [expr $PosQ2 + $NbPointsApresSurDiag1] if {[info exists LaDiagExiste($PosXMinDiag1,$PosYMinDiag1,$PosXMaxDiag1,$PosYMaxDiag1)]} {continue} set LaDiagExiste($PosXMinDiag1,$PosYMinDiag1,$PosXMaxDiag1,$PosYMaxDiag1) 1 set NbPointsSurDiag1 [expr 1 + $NbPointsApresSurDiag1 + $NbPointsAvantSurDiag1] if {$NbPointsSurDiag1 < $NbPointsMinDansDiag} {continue} set Couleur "blue" set XMin [expr ($PosXMinDiag1 - $DQ1 + 1) * $Rapport + $BordX] set YMin [expr ($PosYMinDiag1 - $DQ2 + 1) * $Rapport + $BordY] set XMax [expr ($PosXMaxDiag1 - $DQ1 + 1) * $Rapport + $BordX] set YMax [expr ($PosYMaxDiag1 - $DQ2 + 1) * $Rapport + $BordY] $K create line $XMin $YMin $XMax $YMax -fill $Couleur -width 2 -tags [list "$NameQuery1" "$PosXMinDiag1" "$PosXMaxDiag1" "$NameQuery2" "$PosYMinDiag1" "$PosYMaxDiag1" "AvecPosition"] } if {![info exists DejaVuSurUneDiag2($PosQ1,$PosQ2)]} { set NbPointsAvantSurDiag2 0 while {[info exists TabCompare($PosQ1m,$PosQ2p)]} { incr NbPointsAvantSurDiag2 set PosQ2p [expr $PosQ2p + 1] set PosQ1m [expr $PosQ1m - 1] set DejaVuSurUneDiag1($PosQ1m,$PosQ2p) 1 } set PosXMinDiag2 [expr $PosQ1 - $NbPointsAvantSurDiag2] set PosYMinDiag2 [expr $PosQ2 + $NbPointsAvantSurDiag2] set NbPointsApresSurDiag2 0 while {[info exists TabCompare($PosQ1p,$PosQ2m)]} { incr NbPointsApresSurDiag2 set PosQ2m [expr $PosQ2m - 1] set PosQ1p [expr $PosQ1p + 1] set DejaVuSurUneDiag1($PosQ1p,$PosQ2m) 1 } set PosXMaxDiag2 [expr $PosQ1 + $NbPointsApresSurDiag2] set PosYMaxDiag2 [expr $PosQ2 - $NbPointsApresSurDiag2] if {[info exists LaDiagExiste($PosXMinDiag2,$PosYMinDiag2,$PosXMaxDiag2,$PosYMaxDiag2)]} {continue} set LaDiagExiste($PosXMinDiag2,$PosYMinDiag2,$PosXMaxDiag2,$PosYMaxDiag2) 1 set NbPointsSurDiag2 [expr 1 + $NbPointsApresSurDiag2 + $NbPointsAvantSurDiag2] if {$NbPointsSurDiag2 < $NbPointsMinDansDiag} {continue} set Couleur "green" set XMin [expr ($PosXMinDiag2 - $DQ1 + 1) * $Rapport + $BordX] set YMin [expr ($PosYMinDiag2 - $DQ2 + 1) * $Rapport + $BordY] set XMax [expr ($PosXMaxDiag2 - $DQ1 + 1) * $Rapport + $BordX] set YMax [expr ($PosYMaxDiag2 - $DQ2 + 1) * $Rapport + $BordY] $K create line $XMin $YMin $XMax $YMax -fill $Couleur -width 2 -tags [list "$NameQuery1" "$PosXMinDiag1" "$PosXMaxDiag1" "$NameQuery2" "$PosYMinDiag1" "$PosYMaxDiag1" "AvecPosition"] } } } regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "TailleMinDesDiags Default / NoLimit / X"] bind $B <1> "AfficheCompare $FichierCompare $FichierTFA1 $FichierTFA2 10" bind $B <2> "AfficheCompare $FichierCompare $FichierTFA1 $FichierTFA2 0" bind $B <3> "AfficheCompare $FichierCompare $FichierTFA1 $FichierTFA2 \[Entre\]" if {$FichierTFA1 != "Absent" && $FichierTFA2 != "Absent"} { if {$Seq1 != "" && $Seq2 != ""} { $K bind "AvecPosition" <1> "AfficheDiagonaleCorrespondante $K $Seq1 $Seq2" } } return $K } proc AfficheContigComplet {Selection} { foreach Ligne [split $Selection "\n"] { set Ligne [OteSuperfluPourFetch $Ligne] scan $Ligne "%s" AccessDuFragment set F [AfficheVariable [ContigComplet $AccessDuFragment] "AvecBlaste" $AccessDuFragment] } return $F } proc AfficheCorrelationClustersOperons {} { global TableauOrf2Cluster2Operon set CO [CorrelationClustersOperons TCCO] set LesXs [lindex $CO 0] set LesYs [lindex $CO 1] DessineBilanHDACroises $LesXs $LesYs TCCO "CorrelationClustersOperons" } proc AfficheDansOmac {} { global COmac global Defauts global EquivalenceZone global OrdEtcDir global StrucAVoir global NomEtSeqAssPDB DefinitStructuresAVoir if {$StrucAVoir == "return"} {return} OuvreFichierSortieO if {$COmac == ""} {return} FaireAttendre "Please wait ...\nSuperposing structures ..." IlFautVoir "! " IlFautVoir "! To execute the Ordali macro, type :" IlFautVoir "! " IlFautVoir "! @ord" IlFautVoir "! " IlFautVoir "! [DonneDateEtHeure] " IlFautVoir "! " IlFautVoir "DebutMc ord" IlFautVoir "read [file join $OrdEtcDir color_rgb.dat]" IlFautVoir "read [file join $OrdEtcDir color_names.dat]" IlFautVoir "sketch_setup sphere solid 1" set CmdSup {} if {[info exists EquivalenceZone]} { if {[set Defauts(MethodeSuper)]=="lsq"} { set CmdSup [SuperAvecO] } else { SuperAvecOrdali AppliqueSuperposition } } foreach elt $StrucAVoir { set idx [lsearch -regexp $NomEtSeqAssPDB $elt] set cible [lindex $NomEtSeqAssPDB $idx] scan $cible "%s %s %s" pdb NSAss MolId set chn [string index $MolId 5] set MolId [string range $MolId 0 3] set RepS [CalculeSpheres $chn $MolId] } foreach elt $StrucAVoir { set idx [lsearch -regexp $NomEtSeqAssPDB $elt] set cible [lindex $NomEtSeqAssPDB $idx] scan $cible "%s %s %s" pdb NomSeqAss MolId set chn [string index $MolId 5] set MolId [string range $MolId 0 3] set fpdb [file tail [SigneFichier $pdb]] file copy -force $pdb $fpdb IlFautVoir "s_a_i" IlFautVoir "[pwd]/$fpdb" IlFautVoir "$MolId" IlFautVoir "PDB" if {$RepS} {IlFautVoir "draw ${elt}sf"} } foreach c $CmdSup { foreach sousc [split $c \n] { IlFautVoir $sousc } } TraceObjetDansO $StrucAVoir set mref [lindex $StrucAVoir 0] if {[set Defauts(MethodeSuper)] == "lsq"} { foreach elt $StrucAVoir { if {$elt != $mref} { IlFautVoir "rot_tran_obj .lsq_rt_${elt}2$mref ${elt}sf" } } } if {$RepS} { foreach elt $StrucAVoir { set idx [lsearch -regexp $NomEtSeqAssPDB $elt] set cible [lindex $NomEtSeqAssPDB $idx] scan $cible "%s %s %s" pdb NSAss MolId set chn [string index $MolId 5] set MolId [string range $MolId 0 3] CalculeSpheres $chn $MolId EcritSpheres $MolId } } if {[set Defauts(Balibase)]} {PeintCAEnCouleur} IlFautVoir "FinDbMc" IlFautVoir "FinOMac" FaireLaSuite .superpopo return } proc AfficheDansPyMOL {} { DefinitStructuresAVoir if {$StrucAVoir == "return"} {return} update foreach elt $StrucAVoir { set idx [lsearch -regexp $NomEtSeqAssPDB $elt] set cible [lindex $NomEtSeqAssPDB $idx] scan $cible "%s %s %s" pdb NomSeqAss MolId set chn [string index $MolId 5] set MolId [string range $MolId 0 3] set deja -1 if {[info exists DisplayMolecule]} { set deja [lsearch $DisplayMolecule $MolId] } if {$deja == -1} { set fpdb [file tail [SigneFichier $pdb]] puts "on regarde $fpdb" file copy -force $pdb $fpdb IlFautVoir "load $fpdb" lappend DisplayMolecule $MolId } } # load $pdb , object-name # show cartoon , object-name # hide lines , object-name # set smooth_loops=0 , object-name # de-smooth le cartoon --> Ca trave # color cyan , object-name # tout en cyan # color cyan , object-name//res1:res2/ # color cyan , (resi and chain ) return } proc AfficheDansRasMol {} { global ListePDB global StrucAVoir global InitRasMol global Defauts global ReponseRasmol global RasM set InitRasMol 1 FenetreControlesRasMol IlFautVoir "zap" IlFautVoir "rotate all" IlFautVoir "background [set Defauts(Background)]" IlFautVoir "set cartoons 6" IlFautVoir "set menus off" set i 1 set r 0 foreach mold $StrucAVoir { set idx [lsearch [ExtraitListeDeListe $ListePDB 0] $mold] lassign [lindex $ListePDB $idx] mol fpdb IlFautVoir "load pdb $fpdb" if {[info exists ReponseRasmol]} { set nfois 0 while {[lsearch -regexp $ReponseRasmol "Experiment"] == -1} { update incr nfois if {$nfois >= 10} {break} } set inmr [string first " NMR" $ReponseRasmol] if {$inmr != -1} { set RasM(mol$r,Exp) "NMR" set RasM(mol$r,Sel) "restrict */1" } else { set RasM(mol$r,Exp) "X-RAY" set RasM(mol$r,Sel) "select all" } } IlFautVoir "molecule $i" IlFautVoir [set RasM(mol$r,Sel)] IlFautVoir "colour grey" TraceObjetDansRasMol $mol incr i incr r } return } proc AfficheDansVMD {} { global StrucAVoir global ListePDB if {$StrucAVoir eq "return"} {return} if {$StrucAVoir eq {}} {return} foreach mold $StrucAVoir { set idx [lsearch [ExtraitListeDeListe $ListePDB 0] $mold] lassign [lindex $ListePDB $idx] mol fpdb set chn [DonneChainDeAccessPDB $mol] set MolId [DonneIdDeAccessPDB $mol] IlFautVoir "NouvelleMolecule $fpdb $MolId $chn" } return } proc AfficheDansViandox {} { global pgl Rad OrdaliDir StrucAVoir Liste3dMol # Deja passe par la if {[info exists pgl(wogl)]} { raise [winfo toplevel $pgl(wogl)] update idletasks return } # On y va ! Initialisation set ObjDone [expr {[LoadObjFromDB] > 0}] # Liste des structures pour la combobox set Liste3dMol [list] foreach e $StrucAVoir { lappend Liste3dMol [DonneIdDeAccessPDB $e] } set cx 0. ; set cy 0. ; set cz 0. set zmin 999999. ; set zmax -999999. set ymin 999999. ; set ymax -999999. set xmin 999999. ; set xmax -999999. set cmp 0 ; set ZeRad 1. foreach mold $StrucAVoir { set nom [DonneIdDeAccessPDB $mold] set chn [DonneChainDeAccessPDB $mold] lappend ListeObjPDB $nom lassign [$nom bbox] xm ym zm xx yx zx if {$zm < $zmin} {set zmin $zm} if {$zx > $zmax} {set zmax $zx} if {$ym < $ymin} {set ymin $ym} if {$yx > $ymax} {set ymax $yx} if {$xm < $xmin} {set xmin $xm} if {$xx > $xmax} {set xmax $xx} #if {$zeRad < [$nom radius]} {set ZeRad [$nom radius]} if {! $ObjDone} { if {$::Defauts(PrecomputeSrf)} { $nom newObj "SF${nom}$chn" $nom select chain $chn $nom ribbons "SF${nom}$chn" $nom surface "SF${nom}$chn" $nom render "SF${nom}$chn" } #$nom newObj "CP${nom}$chn" #$nom select chain $chn #$nom CPK "CP${nom}$chn" #$nom render "CP${nom}$chn" } if {1} { $nom newObj "CT${nom}$chn" $nom select chain $chn $nom catrace "CT${nom}$chn" $nom render "CT${nom}$chn" } if {1} { if {! $ObjDone} { $nom newObj "AL${nom}$chn" $nom select chain $chn $nom atomes "AL${nom}$chn" $nom render "AL${nom}$chn" update $nom newObj "CA${nom}$chn" $nom select chain $chn $nom ribbons "CA${nom}$chn" #$nom setboite "CA${nom}$chn" $chn $nom render "CA${nom}$chn" } } if {0} { $nom newObj "CP${nom}$chn" $nom select chain $chn $nom CPK "CP${nom}$chn" $nom render "CP${nom}$chn" } } set pgl(xCen) [expr {($xx+$xm)/2.}] set pgl(yCen) [expr {($yx+$ym)/2.}] set pgl(zCen) [expr {($zx+$zm)/2.}] set Rad [expr {sqrt( ($xmax-$xmin)**2 + ($ymax-$ymin)**2 + ($zmax-$zmin)**2) / 2.}] set pgl(Rad) $Rad # backclip = z near (z neg) set pgl(backclip) [expr {-0.1 * $Rad}] # frontclip = z far set pgl(frontclip) [expr { 2.1 * $Rad}] set pgl(eyeX) 0.0 set pgl(eyeY) 0.0 set pgl(eyeZ) $pgl(frontclip) set pgl(fogStart) [expr {0.3*$Rad}] set pgl(fogEnd) [expr {0.6*$Rad}] AfficheFenetreOpengl set LFPDB {} foreach mold $StrucAVoir { set nom [DonneIdDeAccessPDB $mold] set chn [DonneChainDeAccessPDB $mold] if {$nom ni $LFPDB} { AddFObj $nom lappend LFPDB $nom } lassign [$nom center] x y z set cx [expr {$cx + $x}] set cy [expr {$cy + $y}] set cz [expr {$cz + $z}] incr cmp } if {$cmp != 0} { set cx [expr {$cx/$cmp}] set cy [expr {$cy/$cmp}] set cz [expr {$cz/$cmp}] } TousObjetsOff #ToggleAllOff update set pgl(xCen) $cx set pgl(yCen) $cy set pgl(zCen) $cz set pgl(fogStart) [expr {abs($cz)}] set pgl(fogEnd) [expr {0.9*($Rad-abs($cz))}] Update3DMatrices $pgl(wogl) postredisplay return } proc AfficheDiagonaleCorrespondante {K Seq1 Seq2} { set Liste [$K find withtag current] set Blanc "" set NbBaseParLigne 50 foreach Diag $Liste { set NameQuery1 [lindex [$K gettags $Diag] 0] set PosMin1 [lindex [$K gettags $Diag] 1] set PosMax1 [lindex [$K gettags $Diag] 2] set NameQuery2 [lindex [$K gettags $Diag] 3] set PosMin2 [lindex [$K gettags $Diag] 4] set PosMax2 [lindex [$K gettags $Diag] 5] set FragSeq1 [string range [string trim $Seq1] [expr $PosMin1-11] [expr $PosMax1+9] ] set LeFragSeq1 [split $FragSeq1 ""] set FragSeq2 [string range [string trim $Seq2] [expr $PosMin2-11] [expr $PosMax2+9] ] set LeFragSeq2 [split $FragSeq2 ""] set NBaseTotale [string length $FragSeq1] set InterSeq "" for {set i 0} {$i < $NBaseTotale} {incr i} { set Base1 [lindex $LeFragSeq1 $i] set Base2 [lindex $LeFragSeq2 $i] if {$Base1 == $Base2} { if {$Base1 != "N"} { append InterSeq "\|" } else { append InterSeq " " } } else { append InterSeq " " } } set ResteDeSeq1 $FragSeq1 set ResteDeSeq2 $FragSeq2 set ResteDeInterSeq $InterSeq set Debut1 [expr $PosMin1-10] set Debut2 [expr $PosMin2-10] set PosMin1 "$PosMin1-10" set PosMax1 "$PosMax1+10" set PosMin2 "$PosMin2-10" set PosMax2 "$PosMax2+10" set Alignement "" if {1<[expr ($NBaseTotale*1.0)/($NbBaseParLigne*1.0)]} { if {[expr $NBaseTotale/$NbBaseParLigne]== [expr ($NBaseTotale*1.0)/($NbBaseParLigne*1.0)] } { set NbLignes [expr $NBaseTotale/$NbBaseParLigne] } else { set NbLignes [expr $NBaseTotale/$NbBaseParLigne + 1] } for {set Ligne 1} {$Ligne <= $NbLignes} {incr Ligne} { set LigneSeq1 [string range $ResteDeSeq1 0 [expr $NbBaseParLigne-1]] set LigneSeq2 [string range $ResteDeSeq2 0 [expr $NbBaseParLigne-1]] set LigneInterSeq [string range $ResteDeInterSeq 0 [expr $NbBaseParLigne-1]] if {$Ligne == 1} { set LigneSeq1 [format "%11s %s %-11s\n" $PosMin1 $LigneSeq1 $NbBaseParLigne] set LigneSeq2 [format "%11s %s %-11s\n" $PosMin2 $LigneSeq2 $NbBaseParLigne] set LigneInterSeq [format "%11s %s\n" $Blanc $LigneInterSeq] append Alignement "$NameQuery1\n" append Alignement $LigneSeq1 append Alignement $LigneInterSeq append Alignement $LigneSeq2 append Alignement "$NameQuery2\n\n\n" set ResteDeSeq1 [string range $ResteDeSeq1 $NbBaseParLigne end] set ResteDeSeq2 [string range $ResteDeSeq2 $NbBaseParLigne end] set ResteDeInterSeq [string range $ResteDeInterSeq $NbBaseParLigne end] } elseif {$Ligne == $NbLignes} { set Min1 [expr $Debut1 + ($Ligne-1)*$NbBaseParLigne] set Min2 [expr $Debut2 + ($Ligne-1)*$NbBaseParLigne] set LigneSeq1 [format "%11s %s %-11s\n" $Min1 $LigneSeq1 $PosMax1] set LigneSeq2 [format "%11s %s %-11s\n" $Min2 $LigneSeq2 $PosMax2] set LigneInterSeq [format "%11s %s\n" $Blanc $LigneInterSeq] append Alignement $LigneSeq1 append Alignement $LigneInterSeq append Alignement $LigneSeq2 break } else { set Min1 [expr $Debut1 + ($Ligne-1)*$NbBaseParLigne] set Min2 [expr $Debut2 + ($Ligne-1)*$NbBaseParLigne] set Max1 [expr $Min1 + $NbBaseParLigne] set Max2 [expr $Min2 + $NbBaseParLigne] set LigneSeq1 [format "%11s %s %-11s\n" $Min1 $LigneSeq1 $Max1] set LigneSeq2 [format "%11s %s %-11s\n" $Min2 $LigneSeq2 $Max2] set LigneInterSeq [format "%11s %s\n" $Blanc $LigneInterSeq] append Alignement $LigneSeq1 append Alignement $LigneInterSeq append Alignement "$LigneSeq2\n\n\n" set ResteDeSeq1 [string range $ResteDeSeq1 $NbBaseParLigne end] set ResteDeSeq2 [string range $ResteDeSeq2 $NbBaseParLigne end] set ResteDeInterSeq [string range $ResteDeInterSeq $NbBaseParLigne end] } } } else { set LigneFrag1 [format "%11s %s %-11s\n" $PosMin1 $FragSeq1 $PosMax1] set LigneFrag2 [format "%11s %s %-11s\n" $PosMin2 $FragSeq2 $PosMax2] set Ali [format "%11s %s\n" $Blanc $InterSeq] append Alignement "$NameQuery1\n" append Alignement $LigneFrag1 append Alignement $Ali append Alignement $LigneFrag2 append Alignement "$NameQuery2\n" } AfficheVariable "$Alignement" "AvecRien" "Input1 - Input2" } } proc AfficheDistances {} { global pgl set $pgl(TextDeDist) [list] if {$pgl(Dist2Show) == {} } {return} glColor3fv $pgl(DistColor) glLineStipple 3 0xAAAA glEnable GL_LINE_STIPPLE foreach e $pgl(Dist2Show) { lassign $e v1 v2 dst glBegin GL_LINES glVertex3fv $v1 glVertex3fv $v2 glEnd lappend pgl(TextDeDist) {*}[V_VV $v1 + [V_SV 0.5 * [V_VV $v2 - $v1]]] [format " %4.1f A" $dst] } glDisable GL_LINE_STIPPLE return # recup de la matrice de modelisation set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set modmat [tcl3dVectorToList $mvmatrix 16] # recup de la matrice de projection set pjmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_PROJECTION_MATRIX $pjmatrix set projmat [tcl3dVectorToList $pjmatrix 16] # Recup du viewport set viewmat [tcl3dVector GLint 4] glGetIntegerv GL_VIEWPORT $viewmat set viewport [tcl3dVectorToList $viewmat 4] # print the string glMatrixMode GL_MODELVIEW glPushMatrix glLoadIdentity foreach v $Lx text $Lt { lassign $v x y z set xa [expr {[lindex $modmat 0]*$x + [lindex $modmat 4]*$y + [lindex $modmat 8]*$z + [lindex $modmat 12]}] set ya [expr {[lindex $modmat 1]*$x + [lindex $modmat 5]*$y + [lindex $modmat 9]*$z + [lindex $modmat 13]}] set za [expr {[lindex $modmat 2]*$x + [lindex $modmat 6]*$y + [lindex $modmat 10]*$z + [lindex $modmat 14]}] glRasterPos3f $xa $ya $za printString $text } glPopMatrix glFlush return } proc AfficheDownloadPDB {} { global StrucAVoir DwnPDB set w ".dwnpdb" toplevel $w wm protocol $w WM_DELETE_WINDOW KillParLaCroix grid rowconfig $w 0 -weight 1 -minsize 0 grid columnconfig $w 0 -weight 0 -minsize 0 grid columnconfig $w 1 -weight 1 -minsize 0 grid columnconfig $w 2 -weight 0 -minsize 0 label $w.l -text "Please specify PDB files to be used" -anchor w set i 1 foreach s $StrucAVoir { label $w.l$i -text "$s" entry $w.e$i -bg white -width 25 -textvariable DwnPDB($i) button $w.b$i -text "browse ..." -bg cyan -width 10 -command [list eval set DwnPDB($i) \[DemandeEtOuvreFichier pdb 1\]] grid $w.l$i -padx 10 -pady 1 -row $i -column 0 -rowspan 1 -columnspan 1 -sticky news grid $w.e$i -padx 1 -pady 1 -row $i -column 1 -rowspan 1 -columnspan 1 -sticky news grid $w.b$i -padx 10 -pady 1 -row $i -column 2 -rowspan 1 -columnspan 1 -sticky news incr i } frame $w.f button $w.f.ok -background green1 -text " OK " -command [list FinAfficheDownloadPDB "" $w] button $w.f.dis -bg red -text "Cancel" -command [list FinAfficheDownloadPDB dismiss $w] pack $w.f.dis $w.f.ok -side left -expand 1 grid $w.l -padx 10 -pady 10 -row 0 -column 0 -rowspan 1 -columnspan 3 -sticky news grid $w.f -padx 10 -pady 10 -row $i -column 0 -rowspan 1 -columnspan 3 -sticky news FenetreAuCentre $w MesCouleurs $w tkwait window $w return } proc AfficheExtraitOligoDuTFA {K PAB} { Wup "Affiche la sequence tfa de l oligo du PAB voulu" set Id [$K find withtag current] set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Dir [lindex $MesTags 5] set TFADeOligo [ExtraitOligoDuTFA $PAB $NomOligo $Dir] return [AfficheVariable [join $TFADeOligo "\n"] "AvecFormateAvecBlaste" "$Dir/$PAB"] } proc AfficheFenetreOpengl {} { global OrdEtcDir pgl # define fonts if {"FontOg" ni [font names]} { font create FontOg -family Helvetica -size 10 -weight normal } if {"FontOgTitle" ni [font names]} { font create FontOgTitle -family Helvetica -size 10 -weight bold } rename EnvoieLesObjets EnvoieLesObjets_wait rename EnvoieLesObjetsTmp EnvoieLesObjets # define window set wgl .ordogl toplevel $wgl wm title $wgl $pgl(appName) wm protocol $wgl WM_DELETE_WINDOW KillParLaCroix wm withdraw $wgl $wgl configure -background black # put FaireAttendre window on top if {[winfo exists .fattendre]} { focus -force .fattendre raise .fattendre wm attributes .fattendre -topmost 1 update idletasks } set frInfo [frame $wgl.f1 -bg black -bd 0 -relief flat -highlightthickness 0] set frCtrl [frame $wgl.f2 -bg black -bd 0 -relief flat -highlightthickness 0] set frObjc [frame $wgl.f3 -bg black -bd 0 -relief flat -highlightthickness 0] set frTogl [frame $wgl.f4 -bg black -bd 0 -relief flat -highlightthickness 0] set frFonc [frame $wgl.f5 -bg black -bd 0 -relief flat -highlightthickness 0] set pgl(frInfo) $frInfo set pgl(frCtrl) $frCtrl set pgl(frTogl) $frTogl set pgl(frObjc) $frObjc set pgl(frFonc) $frFonc # frame Banniere set fmacsim [file join $OrdEtcDir "MACSIM_30px_cut_transparent.gif"] image create photo macsim # macsim read $fmacsim -shrink macsim read $fmacsim set pgl(TextInfo) "Ordalie Structure Viewer" label $frInfo.imgm -image macsim -anchor w -bd 0 -bg black -padx 30 -pady 10 label $frInfo.linf -bg black -fg magenta -anchor w -justify left -bd 0 -textvariable pgl(TextInfo) grid $frInfo.imgm -row 0 -column 0 -padx {20 10} grid $frInfo.linf -row 0 -column 1 -padx {1 20} -sticky ew grid columnconfig $frInfo 1 -weight 1 # frame Control global Mol3dCou Obj3dCou Feat3dCou global ListeTypesDeFeatures ListeFeat43d global Liste3dMol if {! [info exists Liste3dMol]} { set Liste3dMol {} } set Mol3dCou "" set Obj3dCou "" set Feat3dCou "None" set ListeFeat43d [MetAJourFeaturesViandox] trace add variable ListeTypesDeFeatures write MetAJourFeaturesViandox frame $frCtrl.f1 -bd 0 -highlightthickness 0 -relief flat -bg black label $frCtrl.f1.txt1 -relief flat -bd 0 -bg black -fg white -text "Molecule :" -anchor w -justify left -highlightthickness 0 combobox::combobox $frCtrl.f1.co1 -background black -foreground white -width 6 -editable false -textvariable Mol3dCou -listvar Liste3dMol grid $frCtrl.f1.txt1 -row 0 -column 0 -sticky "" grid $frCtrl.f1.co1 -row 0 -column 1 -sticky ew trace add variable Mol3dCou write UpdateMol3dObjets frame $frCtrl.f2 -bd 0 -highlightthickness 0 -relief flat -bg black label $frCtrl.f2.txt2 -anchor e -bg black -fg white -text "Object :" -relief flat -bd 0 -anchor w -justify left -highlightthickness 0 global ListeMol3dObjets combobox::combobox $frCtrl.f2.co2 -background black -foreground white -width 6 -editable false -textvariable Obj3dCou -listvar ListeMol3dObjets grid $frCtrl.f2.txt2 -row 0 -column 0 -sticky "" grid $frCtrl.f2.co2 -row 0 -column 1 -sticky ew frame $frCtrl.f3 -bd 0 -highlightthickness 0 -relief flat -bg black label $frCtrl.f3.txt3 -bg black -fg white -text "Feature 1 :" -anchor w -justify left -highlightthickness 0 combobox::combobox $frCtrl.f3.co3 -background black -foreground white -width 10 -editable false -textvariable Feat3dCou -command [list UpdateMolObjFeat] -listvar ListeFeat43d grid $frCtrl.f3.txt3 -row 0 -column 0 -sticky "" grid $frCtrl.f3.co3 -row 0 -column 1 -sticky ew bind $frCtrl.f3.co3 <> [list UpdateMolObjFeat] frame $frCtrl.f4 -bd 0 -highlightthickness 0 -relief flat -bg black label $frCtrl.f4.txt4 -bg black -fg white -anchor w -justify left -highlightthickness 0 -text "Feature 2 :" combobox::combobox $frCtrl.f4.co4 -background black -foreground white -width 10 -editable false -textvariable Feat3dCou2 -command [list UpdateMolObjFeat] -listvar ListeFeat43d grid $frCtrl.f4.txt4 -row 0 -column 0 -sticky "" grid $frCtrl.f4.co4 -row 0 -column 1 -sticky ew bind $frCtrl.f4.co4 <> [list UpdateMolObjFeat] grid $frCtrl.f1 -row 0 -column 0 -sticky w -padx 20 grid $frCtrl.f2 -row 0 -column 1 -sticky "" -padx 20 grid $frCtrl.f3 -row 0 -column 2 -sticky "" -padx 20 grid $frCtrl.f4 -row 0 -column 3 -sticky e -padx 20 grid columnconfig $frCtrl all -weight 1 # frame OpenGL # Fenetre Togl set pgl(wogl) $frTogl.c togl $frTogl.c -width $pgl(width) -height $pgl(height) -double true -depth true -reshapeproc Togl_ReshapeFonct -createproc Togl_CreateFonct -displayproc Togl_DisplayFonct grid $frTogl.c -row 0 -column 0 -sticky news grid columnconfig $frTogl 0 -weight 1 grid rowconfig $frTogl 0 -weight 1 # Frame Fonctions button $frFonc.ca -text "\u2022Reset" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command {ResetFonctions} button $frFonc.ci -text "\u2022Clear Ids" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command [list ClearIDs] button $frFonc.cd -text "\u2022Clear Distances" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command [list ClearDistances] set pgl(BoutonDistance) "$frFonc.ds" button $frFonc.ds -text "\u2022Distance" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command [list MeasureDistance] set pgl(BoutonCenter) "$frFonc.ct" button $frFonc.ct -text "\u2022Centre On Atom" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command [list CentreOnAtome $frFonc.ct] button $frFonc.pr -text "\u2022Print" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command {PrintOgl} button $frFonc.fs -text "\u2022Full Screen" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command {ToggleWindowMode} button $frFonc.st -text "\u2022Stereo" -bg black -fg cyan -activeforeground yellow -activebackground black -bd 0 -relief flat -highlightthickness 0 -anchor w -command [list NYI] button $frFonc.cl -text "Close" -bg forestgreen -fg white -activeforeground red -activebackground forestgreen -highlightthickness 0 -anchor w -command [list QuitteViandox] grid $frFonc.ca -row 0 -column 0 -pady 0 -sticky nwe grid $frFonc.ci -row 1 -column 0 -pady 0 -sticky nwe grid $frFonc.cd -row 2 -column 0 -pady 0 -sticky nwe grid $frFonc.ds -row 3 -column 0 -pady 0 -sticky nwe grid $frFonc.ct -row 4 -column 0 -pady 0 -sticky nwe grid $frFonc.pr -row 5 -column 0 -pady 0 -sticky nwe grid $frFonc.fs -row 6 -column 0 -pady 0 -sticky nwe grid $frFonc.st -row 7 -column 0 -pady 0 -sticky nwe grid $frFonc.cl -row 8 -column 0 -pady 20 -sticky swe grid rowconfig $frFonc 8 -weight 1 # Frame Objects frame $frObjc.onoff -bg black -relief flat -bd 0 -highlightthickness 0 button $frObjc.onoff.allon -bg black -fg cyan -activeforeground yellow -activebackground black -text "All On" -font FontOg -bd 0 -highlightthickness 0 -anchor w -justify left -padx 0 -relief flat -command [list TousObjetsOn] button $frObjc.onoff.alloff -bg black -fg cyan -activeforeground yellow -activebackground black -font FontOg -text "All Off" -anchor e -justify right -padx 0 -relief flat -bd 0 -highlightthickness 0 -command [list TousObjetsOff] grid $frObjc.onoff.allon -row 0 -column 0 -sticky w -ipadx 10 grid $frObjc.onoff.alloff -row 0 -column 1 -sticky e -ipadx 10 grid columnconfig $frObjc.onoff all -weight 1 grid $frObjc.onoff -row 0 -column 0 -sticky we -pady 0 -ipady 0 -padx {20 1} grid columnconfig $frObjc all -weight 1 # Grille Generale grid $frInfo -row 0 -column 0 -columnspan 3 -sticky ew grid $frCtrl -row 1 -column 0 -columnspan 3 -sticky ew grid $frObjc -row 2 -column 0 -sticky news -pady 15 grid $frTogl -row 2 -column 1 -sticky news -pady 15 grid $frFonc -row 2 -column 2 -sticky news -pady 15 grid rowconfigure $wgl 2 -weight 1 grid columnconfig $wgl 1 -weight 1 # Bindings bind $frTogl.c {PickAtom %x %y %W} # bind $frFonc.c.c {CenterAtom %x %y %W} set ::BQx [expr {$pgl(width)/2}] set ::BQy [expr {$pgl(height)/2}] bind $frTogl.c {set ::BQx %x ; set ::BQy %y} #bind $frTogl.c <1> "LClick %x %y" #bind $frTogl.c "LDrag %x %y %W" bind $frTogl.c {QDrag %x %y} bind $frTogl.c <2> {set cx %x; set cy %y} bind $frTogl.c <3> {set cx %x; set cy %y} bind $frTogl.c {Mouse TraXY %x %y %W} bind $frTogl.c <4> {HandleZoom 0.03 %W} bind $frTogl.c <5> {HandleZoom -0.03 %W} #bind $wgl {AdieuOrdali} bind $wgl [list ToggleWindowMode] bind $wgl [list ToggleShowFrame] bind $wgl {PrintOgl} bind $wgl {ToggleWindowMode escape} set ::fact 0.1 bind $wgl {AdjustFog up} bind $wgl {AdjustFog down} set ::fogon 1 bind $wgl {FogOnOff} set ::fogsys "::GL_EXP2" bind $wgl {ChangeFogSys} set ::fogcoords "fog" bind $wgl {FogCoords} set ::eyepos "zero" #bind $wgl {EyePos} wm deiconify $wgl FenetreAuCentre $wgl # put FaireAttendre window on top if {[winfo exists .fattendre]} { focus -force .fattendre raise .fattendre wm attributes .fattendre -topmost 1 update idletasks } update idletasks rename EnvoieLesObjets EnvoieLesObjetsTmp rename EnvoieLesObjets_wait EnvoieLesObjets Update3DMatrices EnvoieLesObjets #glFlush #$pgl(Wogl) postredisplay return } proc AfficheFenetreOrdali {} { global Defauts NomFenetreOrdali set menustatus " " set w $NomFenetreOrdali grid rowconfig $w {0 1 2 4 5 6} -weight 0 grid rowconfig $w 3 -weight 1 grid columnconfig $w 0 -weight 1 AfficheBarreMenus AfficheBarreBoutons AfficheBarreMac AfficheFrameSequences AfficheFrameScores AfficheFrameFeatures AfficheFrameDebug AfficheBoutonsOrdali LesDefauts BackAppliOri [$w cget -background] return } proc AfficheFenetreSeqlab {} { global TScrollX TScrollY FrmSequence LNOrdali global NomNomSeq NomTextSeq wtx wxx LongueurTotale set width [$NomTextSeq cget -width] set height [$NomTextSeq cget -height] $FrmSequence.biotextsequence configure -width $width -height $height grid forget $FrmSequence.textsequence grid $FrmSequence.biotextsequence -row 0 -column 1 -rowspan 1 -columnspan 2 -sticky news set NomTextSeq $FrmSequence.biotextsequence $TScrollX configure -command {CoupleX} $TScrollY configure -command {CoupleY} update idletasks FenetreAuCentre [winfo toplevel $NomTextSeq] return } proc AfficheFetch {Selection {NomDuFichierOrigine ""}} { global RepertoireDuGenome global AccessDejaVus LogWscope "AfficheFetch $Selection" Wup "On cherche la sequence et on l'affiche" Gs "Frame" if {[regexp " " $NomDuFichierOrigine]} { foreach Mot [split $NomDuFichierOrigine " "] { if {[regexp "/" $Mot]} { set NomDuFichierOrigine $Mot ; break } } } if {[regexp " " $NomDuFichierOrigine]} { scan $NomDuFichierOrigine "%s" NomDuFichierOrigine } set FormatVoulu "" if {$NomDuFichierOrigine=="OnVeutNature"} { set FormatVoulu "OnVeutNature" set NomDuFichierOrigine "" } if {[regexp "^OnVeut" $NomDuFichierOrigine]} { set FormatVoulu $NomDuFichierOrigine set NomDuFichierOrigine "" } set Nom "" if {$NomDuFichierOrigine != "" } { set Nom [file tail $NomDuFichierOrigine] Wup "NomDuFichierOrigine peut finir par Nom (de PAB)" if { ! [YaPABdans $Nom]} { Wup "Recherche du pab si c'est un copain" set Nom [file tail [file dirname $NomDuFichierOrigine]] } if { ! [YaPABdans $Nom]} { set Nom "" } } Wup "Si Nom n'est pas vide c'est qu'on a affaire a un PAB" set LesFramesFetchees {} set Liste [split $Selection "\n"] foreach Ligne $Liste { if { ! [regexp -nocase {[a-z0-9_]} $Ligne]} { continue } set Ligne [OteSuperfluPourFetch $Ligne] scan $Ligne "%s" aPDB Espionne $aPDB if {[EstUnAccessPDB $aPDB]} { if {[info exists DejaVu($aPDB)]} { continue } set DejaVu($aPDB) 1 if {[set LaFramePDB [AffichePDB $aPDB]]!=""} { lappend LesFramesFetchees $LaFramePDB continue } } set BanqueId "" set Access "" Wup "On cherche d'abord Access dans la ligne" if { [regexp "^Query=" $Ligne] } { Wup "C'est une ligne Query" set Access [QueryDeLaLigne $Ligne] } elseif { [regexp "^Name:" $Ligne] } { Wup "C'est une ligne d'un MSF" set Access [lindex [split $Ligne " "] 1] } elseif { [regexp {^(AC|ID) } $Ligne] } { Wup "C'est une ligne d'un EMBL" scan $Ligne "%s %s" AC Access } elseif {[regexp -nocase {^[a-z0-9_]+=[a-z0-9_]+ } $Ligne]} { Wup "Ligne descriptif" regsub "=" $Ligne " " Access_BanqueId scan $Access_BanqueId "%s %s" Access BanqueId } elseif {[regexp {^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+[ !]* [a-zA-Z0-9_]+} $Ligne]} { Wup "Ligne blast" regsub "!" $Ligne " " BanqueId_Access scan $BanqueId_Access "%s %s" BanqueId Access } elseif { [regexp {^[a-zA-Z0-9_]+: +[a-zA-Z0-9_]+} $Ligne]} { Wup "Ligne du type 'Clef: access'" scan $Ligne "%s %s" Bidon Access } else { scan $Ligne "%s" Access } if {$BanqueId==""} { set BanqueId $Access } if {$Nom!="" && [OnTraiteUneCollection]} { set FichierCopain "$RepertoireDuGenome/coembl/$Nom/$Access" if {[file exists $FichierCopain]} { if {[info exists DejaVu($FichierCopain)]} { continue } set DejaVu($FichierCopain) 1 lappend LesFramesFetchees [AfficheVariable [ContenuDuFichier $FichierCopain] "AvecBlasteAvecFormate" "$FichierCopain"] continue } } if {[info exists DejaVu($BanqueId,$Access)]} { continue } set AccessOk "" set LaSeqDesBan [LaSequenceDesBanques $BanqueId $Access AccessOk $FormatVoulu] set Sequence [join $LaSeqDesBan "\n"] if {$Sequence!=""} { set DejaVu($BanqueId,$Access) 1 lappend LesFramesFetchees [AfficheVariable $Sequence "AvecBlasteAvecFormate" $AccessOk] continue } Wup "Ici on n'a toujours rien trouve ... " set FichierMSF "$RepertoireDuGenome/msf/$Nom" if {[info exists DejaVu($FichierMSF)]} { continue } if {[YaPABdans $Nom] && [file exists $FichierMSF]} { set Sequence [UneSequenceDuMSF $FichierMSF $Access] set TFA [SequenceFormatTFA $Sequence $Access "protbrut"] if {$TFA!=""} { set DejaVu($FichierMSF) 1 lappend LesFramesFetchees [AfficheVariable $TFA "AvecBlasteAvecFormate"] continue } } } if {[llength $LesFramesFetchees]>0} { return [lindex $LesFramesFetchees 0] } } proc AfficheFetchFromTaxoLine {Ligne {Titre ""}} { if {[regexp "\n" $Ligne]} { set LesFen {} foreach Li [split $Ligne "\n"] { lappend LesFen [AfficheFetchFromTaxoLine $Li $Titre] } return $LesFen } set iDernierDoubleBlanc [string last " " $Ligne] set Access "" scan [string range $Ligne $iDernierDoubleBlanc end] "%s" Access return [AfficheFetch $Access $Titre] } proc AfficheFicheInfo {K} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id] set Nom [lindex $MesTags 0] set Fichier "$RepertoireDuGenome/bilan/$Nom" if {![file exists $Fichier]} { set Fichier "$RepertoireDuGenome/ProtAndmRNA/$Nom" } if {[file exists $Fichier]} { set Texte [ContenuDuFichier $Fichier] AfficheVariable $Texte "" $Fichier } else { SeeAby Show $Nom } return } proc AfficheFichier {Fichier {Maniere ""}} { if { $Fichier == "" } return "" if { [FileAbsent $Fichier]} { if { ! [regexp {.gz$} $Fichier] && [FileExists "$Fichier.gz"]} { return [AfficheFichier "$Fichier.gz" $Maniere] } FaireLire "I wanted to show the file \n$Fichier\n It doesn't exist. Sorry." return "" } if {[file isdirectory $Fichier]} { set Page "[file dirname $Fichier]\n" if { ! [regexp "/" $Page]} { set Page "./$Page" } append Page [join [lsort [glob -nocomplain "$Fichier/*"]] "\n"] } else { if {[EstUnFichierImage $Fichier]} { return [ShowImage $Fichier] } set Page [ContenuDuFichier $Fichier] } return [Affiche $Page $Maniere $Fichier] } proc AfficheFournisseur {Selection} { if {[regexp "\n" $Selection]} { foreach Ligne $Selection { AfficheFournisseur $Ligne } return "" } if { ! [regexp {P[0-9]+} $Selection P]} { return "" } set Fournis [Fournisseur $P] if {$Fournis==""} { return [AfficheVariable "Sorry. No order file was found for $P" "" "OrderFileOf_$P"] } scan $Fournis "%s %s" Lieu Fichier set Page "$Fichier\n$Lieu" if {[file exists $Fichier]} { append Page "\n[ContenuDuFichier $Fichier]" } set Fen [AfficheVariable $Page "AvecOli" "OrderFileOf_$P"] Illumine $P $Fen return $Fen } proc AfficheFrameDebug {} { # Debuggage # Permet de resourcer un fichier (merci rR) # Permet d'executer une commande global FAS CAE NomFenetreOrdali FrmDebug set FrmDebug "$NomFenetreOrdali.fdev" frame $FrmDebug grid $FrmDebug -row 6 -column 0 -sticky ew -padx 10 -pady 1 grid columnconfig $FrmDebug {0 2} -weight 0 grid columnconfig $FrmDebug 1 -weight 1 grid rowconfig $FrmDebug 0 -weight 0 if {! [Devlpt]} {return} label $FrmDebug.lblc -text "Command" entry $FrmDebug.entc -background white -textvariable CAE button $FrmDebug.okc -text " OK " -bg green1 -command "uplevel #0 \[$FrmDebug.entc get\]" grid $FrmDebug.lblc -column 0 -row 0 -sticky e grid $FrmDebug.entc -column 1 -row 0 -sticky ew grid $FrmDebug.okc -column 2 -row 0 -sticky w update return } proc AfficheFrameFeatures {} { global FrmBouton FrmImgM NomNomSeq NomFenetreOrdali OrdEtcDir set FrmBouton $NomFenetreOrdali.fbout frame $FrmBouton grid $FrmBouton -row 5 -column 0 -padx 10 -pady 10 -sticky news frame $FrmBouton.fimg grid $FrmBouton.fimg -row 0 -column 0 -sticky "" grid columnconfig $FrmBouton 0 -weight 0 grid columnconfig $FrmBouton 1 -weight 1 grid rowconfig $FrmBouton 0 -weight 1 set wmac "$FrmBouton.fimg.limg" set Wdt [expr {[winfo reqwidth $NomNomSeq] - 10}] set fmacsim [file join $OrdEtcDir "MACSIM_50px_cut_transparent.gif"] image create photo macsim macsim read $fmacsim -shrink label $wmac -image macsim -anchor n -width $Wdt grid $wmac -row 0 -column 0 -sticky news grid columnconfig $FrmBouton.fimg 0 -weight 0 grid rowconfig $FrmBouton.fimg 0 -weight 0 return } proc AfficheFrameScores {} { global FrmScores NomFenetreOrdali set w $NomFenetreOrdali set FrmScores "$w.scores" frame $FrmScores grid $FrmScores -row 4 -column 0 -sticky ew return } proc AfficheFrameSequences {} { global LNOrdali Defauts TScrollX TScrollY NomFenetreOrdali global NomNomSeq NomTextSeq FrmSequence SearchNom global wtn wtx wxx wxn set w $NomFenetreOrdali set FrmSequence "$w.lessequences" frame $FrmSequence grid $FrmSequence -row 3 -column 0 -padx 5 -sticky news # # widgets to display names of sequences, and # sequences, with their scrollbars # set TScrollX $w.lessequences.scrollxseq set TScrollY $w.lessequences.scrolly set NomNomSeq $w.lessequences.textnomseq set NomTextSeq $w.lessequences.textsequence set wxn $NomNomSeq set wxx $NomTextSeq set wtx "$FrmSequence.biotextsequence" # Names if {[info exists LNOrdali]} { set WdtNom [expr {[PlusLongEltDe $LNOrdali]+1}] puts "WdtNom $WdtNom in" puts [set Defauts(LongNom)] if {$WdtNom > [set Defauts(LongNom)]} { set WdtNom [set Defauts(LongNom)] } } else { set WdtNom 10 } puts "WdtNom $WdtNom" text $w.lessequences.textnomseq -relief sunken -bd 2 -font SeqFont -cursor left_ptr -yscrollcommand "$FrmSequence.scrolly set" -setgrid 1 -width $WdtNom -wrap none -foreground black -background white -selectforeground black -selectbackground white -inactiveselectbackground white -state disabled -selectborderwidth 0 -autoseparators 0 -undo 1 -highlightthickness 0 # Sequences : biotext widget for seqlab , # text widget otherwise biotext $FrmSequence.biotextsequence -yscrollcommand "FromScrollYBiotext2Names" -xscrollcommand "$TScrollX set" -height 20 -width 60 -relief flat -class Biotext -bd 0 text $w.lessequences.textsequence -xscrollcommand "$FrmSequence.scrollxseq set" -yscrollcommand "$FrmSequence.scrolly set" -relief sunken -height 20 -width 60 -bd 2 -cursor left_ptr -font SeqFont -wrap none -state disabled -foreground black -background white -insertwidth 6 -insertbackground yellow -selectborderwidth 0 -autoseparators 0 -undo 1 -highlightthickness 0 # position ruler text $w.lessequences.regle -bd 0 -state disabled -font SeqFont -cursor left_ptr -foreground black -background white -xscrollcommand "$w.lessequences.scrollxseq set" -setgrid 1 -wrap none -height 2 scrollbar $w.lessequences.scrollxseq -orient horiz -command [list CoupleX] -width 8 -bd 2 scrollbar $w.lessequences.scrolly -width 8 -command "CoupleY" -bd 2 # Frame to display cursor position in sequence frame $w.lessequences.fpos -width 17 -relief sunken -bd 1 grid $w.lessequences.fpos -row 3 -column 1 -sticky w label $w.lessequences.fpos.tposg -text "gen " -relief flat -width 4 -anchor w label $w.lessequences.fpos.vposg -textvariable XGen -relief flat -width 4 -anchor w label $w.lessequences.fpos.tposs -text " seq " -relief flat -width 5 -anchor w label $w.lessequences.fpos.vposs -textvariable XSeq -relief flat -width 4 -anchor w grid $w.lessequences.fpos.tposg -row 0 -column 0 -sticky w grid $w.lessequences.fpos.vposg -row 0 -column 1 -sticky w grid $w.lessequences.fpos.tposs -row 0 -column 2 -sticky w grid $w.lessequences.fpos.vposs -row 0 -column 3 -sticky w grid columnconfig $w.lessequences.fpos all -weight 0 grid rowconfig $w.lessequences.fpos 0 -weight 0 # entry to search for a sequence name entry $w.lessequences.srcnom -width [expr {$WdtNom-2}] -textvariable SearchNom -relief groove -bd 2 -background white bind $w.lessequences.srcnom [list ChercheNom] # then gridify all that ! grid $w.lessequences.textnomseq -row 0 -column 0 -sticky news grid $w.lessequences.scrolly -row 0 -column 3 -sticky ns grid $w.lessequences.textsequence -row 0 -column 1 -columnspan 2 -sticky news grid $w.lessequences.srcnom -row 1 -column 0 -sticky w grid $w.lessequences.regle -row 1 -column 1 -columnspan 2 -sticky ew # ATTENTION # on laisse la row 2 vide pour y mettre # le profil de conservation si besoin ! grid $w.lessequences.scrollxseq -row 3 -column 2 -sticky ew grid rowconfig $FrmSequence 0 -weight 1 grid rowconfig $FrmSequence {1 2 3} -weight 0 grid columnconfig $FrmSequence {0 1 3} -weight 0 grid columnconfig $FrmSequence 2 -weight 1 $NomTextSeq tag configure TagZoneClus -background green1 -foreground red #update idletasks return } proc AfficheGenscanDuContig {Selection} { Wup "Shows Genscan output for all contig of selection" if {$Selection==""} { return "" } set F "" foreach Ligne [split $Selection "\n"] { scan $Ligne "%s" ChroContig set FichierGSC [GenScanEnStock $ChroContig "FileNamePlease"] if {$FichierGSC==""} { continue } set F [AfficheFichier $FichierGSC "AvecRien"] set B [BoutonneLaFenetre $F "See DNA of sel.\nBlastP sel. prot" ""] $B configure -background "green" bind $B <1> "VoirADNduContig $ChroContig \[selection get\]" bind $B "Blaste P \[selection get\]" } return $F } proc AfficheGroupesDansSeqlab {} { global LNSeqlab global LSSeqlab global NomTextSeq global NomNomSeq global LNDG global SDG $NomNomSeq configure -state normal set Q 1 set P 0 set LStmp {} set LNtmp {} foreach g $LNDG { if {$g == "GroupeToutLeMonde"} {continue} $NomTextSeq insert $Q.0 " \n" $NomNomSeq insert $Q.0 " \n" set LNSeqlab [linsert $LNSeqlab $P " "] lappend LStmp " " lappend LNtmp " " incr Q incr P foreach s [set SDG($g)] { set i [lsearch $LNSeqlab $s] set y [expr {$i+1}] set dmpT [$NomTextSeq dump -tag $y.0 $y.0 lineend] set LtagT [TagsDuDump $dmpT] set Seq [$NomTextSeq get $y.0 "$y.0 lineend"] lappend LNtmp $s lappend LStmp $Seq set LNSeqlab [lreplace $LNSeqlab $i $i] set LNSeqlab [linsert $LNSeqlab $P $s] $NomTextSeq delete $y.0 [expr {$y+1}].0 $NomTextSeq insert $Q.0 "${Seq}\n" $NomNomSeq delete $y.0 [expr {$y+1}].0 if {[regexp {^PDB_[0-9]} $s]} { set t PDB } else { set t "" } $NomNomSeq insert $Q.0 "$s\n" $t foreach {t x1 x2} $LtagT { $NomTextSeq tag add $t $Q.$x1 $Q.$x2 } incr Q incr P } } set LNSeqlab $LNtmp set LSSeqlab $LStmp $NomNomSeq configure -state disabled return } proc AfficheHelp {{Quoi ""}} { Wup "Permet de donner une petite aide pour les commandes disponibles" set Texte "" append Texte "Graph Panel:\n" append Texte "------------\n" append Texte " Panel that allows you display or hide,\n" append Texte " \tGraph itself\n" append Texte " \tAverage\n" append Texte " \tAll or none\n\n" append Texte "GC Content:\n" append Texte "-----------\n" append Texte " Upper Value: 100% GC bases\n" append Texte " Middle Value: Average composition in GC bases\n" append Texte " Lower Value: 100% AT bases\n" append Texte " Enter Display the %GC of the current Position\n\n" append Texte "Tm Content:\n" append Texte "-----------\n" append Texte " Upper Value: maximum Tm value\n" append Texte " Middle Value: Average Tm value\n" append Texte " Lower Value: minimum Tm value\n" append Texte " Enter Display the Tm of the current Position\n\n" append Texte "Identity Percent (Blastn):\n" append Texte "--------------------------\n" append Texte " Upper Value: 100% Id\n" append Texte " Middle Value: Average Id percent\n" append Texte " Lower Value: 0% Id\n" append Texte " Enter Display the %Id of the current Position\n\n" append Texte "Sequence Content (Blastn):\n" append Texte "--------------------------\n" append Texte " Upper Value: maximum number of sequence\n" append Texte " Middle Value: Average number of sequence\n" append Texte " Lower Value: minimum number of sequence\n" append Texte " Enter Display the number of sequence under the current Position\n\n" append Texte "Query:\n" append Texte "------\n" append Texte " Mouse 1 Basic nucleic informations (GC, length, Tm ...)\n" append Texte " Mouse 2 Fetch Sequence (informations from the bank)\n" append Texte " Mouse 3 Display Query s Sequence in fasta format\n\n" append Texte "Oligonucleotide (Probe):\n" append Texte "------------------------\n" append Texte " Enter Display Information about the current Oligo\n" append Texte " Mouse 1 Display the Position regarding the Query\n" append Texte " Mouse 2 Display Oligo s specificity\n" append Texte " Mouse 3 Display Oligo s Sequence (fasta format)\n" append Texte " Shift -2 Display Oligo s specificity in detail\n" append Texte " Control-1 Select the oligonucleotide for that database\n" append Texte " Control-2 Select the oligonucleotide as X-Selection" if {$Quoi=="DuBouton"} { after idle { .fairelire.msg configure -wraplength 10i -background red -font "Courier 12"} tk_dialog .fairelire "Please press OK" "$Texte" {} 0 Acknowledge catch {destroy .fairelire} return "" } else {return $Texte} } proc AfficheHelpDuPrimer {{Quoi ""}} { Wup "Permet de donner une petite aide pour les commandes disponibles" set Texte "" append Texte "Graph Panel:\n" append Texte "------------\n" append Texte " Panel that allows you display or hide,\n" append Texte " \tGraph itself\n" append Texte " \tAverage\n" append Texte " \tAll or none\n\n" append Texte "GC Content:\n" append Texte "-----------\n" append Texte " Upper Value: 100% GC bases\n" append Texte " Middle Value: Average composition in GC bases\n" append Texte " Lower Value: 100% AT bases\n" append Texte " Enter Display the %GC of the current Position\n\n" append Texte "Tm Content:\n" append Texte "-----------\n" append Texte " Upper Value: maximum Tm value\n" append Texte " Middle Value: Average Tm value\n" append Texte " Lower Value: minimum Tm value\n" append Texte " Enter Display the Tm of the current Position\n\n" append Texte "Query:\n" append Texte "------\n" append Texte " Mouse 1 Basic nucleic informations (GC, length, Tm ...)\n" append Texte " Mouse 2 Fetch Sequence (informations from the bank)\n" append Texte " Mouse 3 Display Query s Sequence in fasta format\n\n" append Texte "Primer:\n" append Texte "-------\n" append Texte " Enter Display Information about the current Primer\n" append Texte " Mouse 1 Display the Position regarding the Query\n" append Texte " Mouse 2 Display Primer s informations\n\n" append Texte "Amplified Region:\n" append Texte "-----------------\n" append Texte " Enter Display Information about the current Region\n" append Texte " Mouse 1 Display the Position regarding the Query\n" append Texte " Mouse 2 Display Region s sequence" if {$Quoi=="DuBouton"} { after idle {.fairelire.msg configure -wraplength 10i -background red -font "Courier 12"} tk_dialog .fairelire "Please press OK" "$Texte" {} 0 Acknowledge catch {destroy .fairelire} return "" } else {return $Texte} } proc AfficheHelpInfoDeMaSequence {{Quoi ""}} { Wup "Permet de donner une petite aide pour les commandes disponibles" set Texte "" append Texte "Designing Help:\n" append Texte "---------------\n" append Texte "You are able to display, select and save designing area(s).\n" append Texte " Shift -1 Show position on the query\n" append Texte " Control-1 Put one Flag for area selection\n\n" append Texte " Mouse 1(Green button) Show previously areas (in the Panel)\n" append Texte " Mouse 2(Green button) Save areas (!!It overwrite previous!!)\n" append Texte " Mouse 3(Green button) Clear areas\n" append Texte "Graph Panel:\n" append Texte "------------\n" append Texte " Panel that allows you display or hide,\n" append Texte " \tGraph itself\n" append Texte " \tAverage\n" append Texte " \tAll or none\n\n" append Texte "GC Content:\n" append Texte "-----------\n" append Texte " Upper Value: 100% GC bases\n" append Texte " Middle Value: Average composition in GC bases\n" append Texte " Lower Value: 100% AT bases\n" append Texte " Enter Display the %GC of the current Position\n\n" append Texte "Tm Content:\n" append Texte "-----------\n" append Texte " Upper Value: maximum Tm value\n" append Texte " Middle Value: Average Tm value\n" append Texte " Lower Value: minimum Tm value\n" append Texte " Enter Display the Tm of the current Position\n\n" append Texte "Query:\n" append Texte "------\n" append Texte " Mouse 2 Fetch Sequence (informations from the bank)\n" append Texte " Mouse 3 Display Query s Sequence in fasta format" if {$Quoi=="DuBouton"} { after idle {.fairelire.msg configure -wraplength 10i -background red -font "Courier 12"} tk_dialog .fairelire "Please press OK" "$Texte" {} 0 Acknowledge catch {destroy .fairelire} return "" } else {return $Texte} } proc AfficheHelpOligoArray {{Quoi ""}} { Wup "Permet de donner une petite aide pour les commandes disponibles" set Texte "" append Texte "GC Content:\n" append Texte " Upper Value: 100% GC bases\n" append Texte " Middle Value: Average composition in GC bases\n" append Texte " Lower Value: 100% AT bases\n" append Texte " Enter Display the %GC of the current Position\n" append Texte "Query:\n" append Texte " Mouse 2 Fetch Sequence (informations from the bank)\n" append Texte " Mouse 3 Display Query's Sequence in fasta format\n" append Texte "Oligonucleotide (Probe):\n" append Texte " Mouse 1 Display the Position regarding the Query\n" append Texte " Mouse 2 Display Oligo's specificity\n" append Texte " Mouse 3 Display Oligo's Sequence (fasta format)\n" append Texte " Enter Display Information about the current Oligo" if {$Quoi=="DuBouton"} { return "[AfficheVariable $Texte "SansRien" "Help"]" } else {return $Texte} } proc AfficheInfoBulle {K X Y Action} { Wup "Permet d avoir des InfoBulles pour des Id dans un canvas" Wup "Ces InfosBulles sont independantes du canvas" catch {destroy .infobulle} if {$Action=="Leave"} {return ""} set Id [$K find withtag current] set MesTags [$K gettags $Id] set Texte [lindex $MesTags 1] #Les coordonnees de l Id a InfoBuller set MesCoords [$K coords $Id] set Xmin [lindex $MesCoords 0] set Xmax [lindex $MesCoords 2] set Ymin [lindex $MesCoords 1] set Ymax [lindex $MesCoords 3] #Cas particulier des lignes verticales on prend comme repere la position de la souris if {$Ymin==$Ymax} {set Xmin $X;set Xmax $X} #Correction pour ceux avec seulement 2 coordonnees if {$Xmax==""} {set Xmax $Xmin} if {$Ymax==""} {set Ymax $Ymin} #Il nous faut les mensurations de l objet a InfoBuller if {$Xmax>$Xmin} { set TagLargeur [expr $Xmax-$Xmin] } else { set TagLargeur [expr $Xmin-$Xmax] set Xtmp $Xmin set Xmin $Xmax set Xmax $Xtmp } if {$Ymax>$Ymin} { set TagHauteur [expr $Ymax-$Ymin] } else { set TagHauteur [expr $Ymin-$Ymax] set Ytmp $Ymin set Ymin $Ymax set Ymax $Ytmp } #Les positions initiales du canvas contenant Id set PosX [winfo rootx $K] set PosY [winfo rooty $K] #Correction pour le facteur de Zoom set Facteurx [ZoomFacteur $K X] #set Facteury [ZoomFacteur $K Y] set Xmin [expr $Xmin/$Facteurx] set Xmax [expr $Xmax/$Facteurx] #Creation du InfoBulle independant du canvas toplevel .infobulle -background "black" wm overrideredirect .infobulle 1 label .infobulle.label -text "$Texte" -relief "flat" -font {Courier 8} -background "lightyellow" -foreground "black" -padx "2" -pady "0" -anchor "w" -justify "left" #1 Creation pack .infobulle.label -side "left" -padx "1" -pady "1" #2 On Oublie wm withdraw .infobulle update if {! [winfo exists .infobulle]} {return ""} #3 Recuperation des mensurations set MessageLargeur [winfo width .infobulle] set MessageHauteur [winfo height .infobulle] if {$MessageLargeur=="1" && $MessageHauteur=="1"} { set MessageLargeur [winfo reqwidth .infobulle] set MessageHauteur [winfo reqheight .infobulle] } #4 Ajustement des positions de l InfoBulle #4 Par rapport a l objet a infobuller #4 Par rapport a sa position sur l ecran #Sur Beaufort le withdraw empeche d avoir la taille de la fenetre voir mise a jour #Mais le reqwidth et le reqheight contourne le pb set OnForceADroite 1 set OnForceEnBas 0 if {$MessageHauteur==1} {set OnForceADroite 0} if {$MessageLargeur==1} {set OnForceEnBas 1} set EcranHauteur [winfo screenheight .] set EcranLargeur [winfo screenwidth .] if {$OnForceADroite && $X > [expr $EcranLargeur/2]} { #On affiche a gauche incr X -15 while {$X>$Xmin} {incr X -15} set PosX [expr $PosX - $MessageLargeur +$X] } else { #On affiche a droite incr X 15 while {$X<$Xmax} {incr X 15} set PosX [expr $PosX + $X] } if {$OnForceEnBas || $Y< 50} { #On affiche en bas incr Y 10 set PosY [expr $PosY + $Y] } else { #On affiche en haut incr Y -10 set PosY [expr $PosY - $MessageHauteur +$Y] } set PosX [format "%.0f" $PosX] set PosY [format "%.0f" $PosY] #Ajustement final des positions de l InfoBulle et positionnement if {$PosX<0} { #On sort de l ecran par la gauche set PosX 0 } elseif {[expr $PosX + $MessageLargeur]> $EcranLargeur} { #On sort de l ecran par le droite set PosX [expr $EcranLargeur - $MessageLargeur] } if {$PosY<0} { #On sort de l ecran par le dessus set PosY 0 } elseif {[expr $PosY + $MessageHauteur]> $EcranHauteur} { #On sort de l ecran par le dessous set PosY [expr $EcranHauteur - $MessageHauteur] } wm geometry .infobulle +${PosX}+${PosY} bind .infobulle "destroy .infobulle" bind .infobulle <1> "destroy .infobulle" bind $K "destroy .infobulle" #5 Apres avoir oublie la fenetre on se souvient wm deiconify .infobulle return "" } proc AfficheLEnvironnementDeGscope {{Comment ""} {Quoi ""}} { global env global InfoScript global FichierGscopeSource global WithPackage if {$Comment==""} { set Comment "Show" } set LaPage {} catch {lappend LaPage [format "%-30s %s" RunningSince "[CaVa RunningSinceDate] as [CaVa Science]"] } catch {lappend LaPage [format "%-30s %s" HostName [Hostname]]} catch {lappend LaPage [format "%-30s %s" Dialog [DialogPort "GetAll"]]} catch {lappend LaPage [format "%-30s %s" GscopeDir [GscopeDir]]} catch {lappend LaPage [format "%-30s %s" GscopeContrib [GscopeContrib]] } catch {lappend LaPage [format "%-30s %s" GscopeSource $FichierGscopeSource]} catch {lappend LaPage [format "%-30s %s" RepertoireDuGenome [RepertoireDuGenome]]} catch {lappend LaPage [format "%-30s %s" RepertoireDeTravail [RepertoireDeTravail]]} catch {lappend LaPage [format "%-30s %s" HumanGenomeDir [HumanGenomeDir]]} catch {lappend LaPage [format "%-30s %s" OntologyDir [OntologyDir]]} catch {lappend LaPage ""} catch {lappend LaPage [format "%-30s %s" script [InfoScript]] } catch {lappend LaPage ""} catch {lappend LaPage [format "%-30s %s" OutsideCSTB [OutsideCSTB]] } lappend LaPage "" foreach P [array names WithPackage] { if {[regexp "Default" $P]} { continue } lappend LaPage [format "%-30s %s" "Pack $P" [WithPackage $P]] } if {$Quoi!="WithoutEnv"} { lappend LaPage "" foreach V [array names env] { lappend LaPage [format "%-30s %s" $V [set env($V)]] } } set Display "not set" if {[info exists env(DISPLAY)]} { set Display $env(DISPLAY) } lappend LaPage [format "%-30s %s" DISPLAY $Display] set Page [join $LaPage "\n"] if {$Comment=="GetItAsText"} { return $Page } if {[PourWscope]} { return [Html_DuTexteTelQuel $Page] } if {$Comment=="GetIt"} { return $Page } return [AfficheVariable $Page "" "Gscope's environment"] } proc AfficheLaProc {Procedure} { Wup "Shows the proc Procedure or lappend to the called procs" scan [string trim $Procedure] "%s" Procedure if {[info procs $Procedure]=={}} { return "" } set Args [info args $Procedure] set Body [info body $Procedure] set TexteProc "$Procedure {$Args} {\n$Body\n}" if {[PourWscope]} { return [Html_DuTexteTelQuel $TexteProc] } return [ShowText $TexteProc "SansFetchAvecRienAvecCallProcGrandeLargeur" $Procedure] } proc AfficheLaQuery {K FichierQuery} { Wup "Permet d afficher la sequence tfa de la query" if {! [file exists $FichierQuery]} { if {[regexp {/} $FichierQuery]} { set PAB [file tail $FichierQuery] } else { set PAB $FichierQuery } set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set Repnuctfa "[RepertoireDuGenome]/nuctfa" if { [file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else {set FichierQuery ""} } if {$FichierQuery == ""} {return [AfficheVariable "No sequence file for $FichierQuery"]} set LeTFADeLaQuery [join [LesLignesDuFichier $FichierQuery] "\n"] return "[AfficheVariable $LeTFADeLaQuery "" "$FichierQuery"]" } proc AfficheLaRechercheDansLesBody {{Texte ""}} { set LesTrouvees [RechercheDansLesBody $Texte] if {$LesTrouvees=={}} { return "" } return [ShowText [join $LesTrouvees "\n"] "SansFetchAvecRienAvecAffiProc" "Procs containing your text."] } proc AfficheLaSeqTFA {K Action} { global RepertoireDuGenome regsub ".canvas" $K ".message" M catch {destroy $M} set Id [$K find withtag current] set MesTags [$K gettags $Id] set DQ [lindex $MesTags 0] set FQ [lindex $MesTags 1] set DS [lindex $MesTags 2] set FS [lindex $MesTags 3] set Strand [lindex $MesTags 4] set Type [lindex $MesTags 5] set nType [lindex $MesTags 6] set SeqTFA [lindex $MesTags 7] AfficheVariable $SeqTFA "AvecFormateAvecBlaste" return "" } proc AfficheLaSequenceDeLOligo {K PAB} { Wup "Affiche la sequence tfa de l oligo du PAB voulu" Wup "Mise a jour pour InterrogeInfoDeOligo" set Id [$K find withtag current] set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Dir [lindex $MesTags 5] set Fichier "$Dir/${PAB}.oligo" if {! [file exists $Fichier]} { set Fichier "$Dir/$PAB" if {! [file exists $Fichier]} {return ""} } set Entete ">$PAB $NomOligo" set Sequence [InterrogeInfoDeLOligo $Fichier $NomOligo Sequence] set TFADeOligo [join [list $Entete $Sequence] "\n"] return [AfficheVariable $TFADeOligo "AvecFormateAvecBlaste" "$Dir/$PAB"] } proc AfficheLabels {} { if {$::pgl(Text2Show) == {} } { return } else { set Lxt $::pgl(Text2Show) if {$::pgl(TextDeDist) != {}} { lappend Lxt {*}$::pgl(TextDeDist) } } # recup de la matrice de modelisation set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set modmat [tcl3dVectorToList $mvmatrix 16] # recup de la matrice de projection set pjmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_PROJECTION_MATRIX $pjmatrix set pgl(projmat) [tcl3dVectorToList $pjmatrix 16] set projmat $pgl(projmat) # Recup du viewport set viewmat [tcl3dVector GLint 4] glGetIntegerv GL_VIEWPORT $viewmat set pgl(viewport) [tcl3dVectorToList $viewmat 4] set viewport $pgl(viewport) # print the string glMatrixMode GL_MODELVIEW glPushMatrix glLoadIdentity foreach {x y z text} $Lxt { set xa [expr {[lindex $modmat 0]*$x + [lindex $modmat 4]*$y + [lindex $modmat 8]*$z + [lindex $modmat 12]}] set ya [expr {[lindex $modmat 1]*$x + [lindex $modmat 5]*$y + [lindex $modmat 9]*$z + [lindex $modmat 13]}] set za [expr {[lindex $modmat 2]*$x + [lindex $modmat 6]*$y + [lindex $modmat 10]*$z + [lindex $modmat 14]}] glRasterPos3f $xa $ya $za printString $text } glPopMatrix return } proc AfficheLeBlastNDuContig {K x y} { global RepertoireDuGenome set Id [$K find withtag current] set QueryFraction [lindex [$K gettags $Id] 0] scan $QueryFraction "%s %s" Contig Fraction set w [AfficheFichier "$RepertoireDuGenome/blastn/TTH-$Contig" "AvecRien"] Illumine $Fraction $w } proc AfficheLeClusterXHda {Nom} { set LeClusterXHda [LeClusterXHda $Nom] if {$LeClusterXHda=={}} { FaireLire "No cluster available" return "" } foreach PAB $LeClusterXHda { set DE [DefinitionApproximative $PAB] lappend LeTexte "$PAB $DE" } #Jean a rajoute Tri et bind3 set Texte [join $LeTexte "\n"] set Fen [AfficheVariable $Texte "AvecRien" "${Nom}_X-HDA_cluster"] set B [BoutonneLaFenetre $Fen "X-HDA Sel/Sort\nAll/Sort\nInfoClust/OntoClust/Dpc"] bind $B <1> "CreeEtAfficheUnBilanHDACroises \[selection get\]" bind $B <2> "CreeEtAfficheUnBilanHDACroises \[selection get\] AvecTri" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\]" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\] AvecTri" bind $B "AfficheLesInfosDuCluster" bind $B "OntologyDesClusters \[set PagePropre($Fen)\]" bind $B "DpcShow" $B configure -background "green" return $Fen } proc AfficheLeNombreDeResidusDansLesDomaines {FichierMSF FichierBornes} { foreach Ligne [LesLignesDuFichier $FichierBornes] { scan $Ligne "%s %s" D F set LesComptes [LeNombreDeResidusDansLeDomaine $FichierMSF $D $F] EspionneL $LesComptes foreach Compte $LesComptes { scan $Compte "%s %d" Access nRes if { ! [info exists DejaVu($Access)]} { lappend LesAccess $Access } set DejaVu($Access) 1 lappend LesResultats($Access) $D $F $nRes } } foreach Access $LesAccess { set Ligne [format "%-10s" $Access] foreach {D F nRes} [set LesResultats($Access)] { append Ligne [format "%5s-%4s=%4s " $D $F $nRes] } lappend LesLignes $Ligne } return [AfficheVariable [join $LesLignes "\n"] "" "ResidueCountOf_$FichierMSF"] } proc AfficheLePlot {K} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id] set Chro [lindex $MesTags 0] set TypeCGH [lindex $MesTags 4] ### transformation de la val en log base 10 (oligo CGH) en log base 2 if {$TypeCGH!="CGH"} { set Val [format "%.2f" [expr [lindex $MesTags 3] *1.0]] set Val [format "%.2f" [expr $Val*log(10)/log(2)] *1.0] set Posinf [lindex $MesTags 1] set Possup [lindex $MesTags 2] regsub -all {^0*} $Posinf "" Posinf regsub -all {^0*} $Possup "" Possup set PosMid [expr $Posinf + (($Possup*1.0 - $Posinf*1.0)/2)] } else { set Val [format "%.2f" [expr [lindex $MesTags 2] *1.0]] set PosMid [lindex $MesTags 1] } set Texte "$Chro\nPosMid: $PosMid\nLog2ratio: $Val" ac_AfficheVariable "$Texte" "" "Summary" return "$Texte" } proc AfficheLePlotAffy {K} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id] set ProbeSet [lindex $MesTags 0] set PosMid [lindex $MesTags 1] set Val [format "%.2f" [expr [lindex $MesTags 2] *1.0]] if {[lindex $MesTags 3]!="Affy"} { set C [lindex $MesTags 3] regsub -all "chr" $C " chr" C set Texte "$ProbeSet\nPosMid: $PosMid\nVal: $Val\n!!! This probeset is multi-located ($C)!!!" ac_AfficheVariable "$Texte" "" "Warning" } else { set Texte "$ProbeSet\nPosMid: $PosMid\nVal: $Val" ac_AfficheVariable "$Texte" "" "Summary" } return "$Texte" } proc AfficheLeSpectreGC {K MinSpectreY MaxSpectreY} { global RepertoireDuGenome set FichierSpectre "$RepertoireDuGenome/fiches/spectregcxy" if { ! [file exists $FichierSpectre]} { return } set HauteurDuSpectreY [expr $MaxSpectreY-$MinSpectreY] set LesCoordonnees "" set n 0 set PremiereLigne 1 foreach Ligne [LesLignesDuFichier $FichierSpectre] { if {$PremiereLigne} { scan $Ligne "%d %d" xMin yMin set PremiereLigne 0 set DeuxiemeLigne 1 continue } if {$DeuxiemeLigne} { scan $Ligne "%d %d" xMax yMax set DeuxiemeLigne 0 set TroisiemeLigne 1 continue } if {$TroisiemeLigne} { scan $Ligne "%d %d" x yMoyen set TroisiemeLigne 0 $K create line $xMin [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $xMax [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $K create line $xMin [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $xMax [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $K create line $xMin [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $xMax [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] continue } scan $Ligne "%d %d" x y set XY " $x [expr $MaxSpectreY-($y-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] " append LesCoordonnees $XY if {[incr n] > 100} { eval $K create line $LesCoordonnees set LesCoordonnees $XY set n 1 } } if { $n > 1 } { eval $K create line $LesCoordonnees } } proc AfficheLeSpectreGCDUneListe {K UneListe XDebutQuery XFinQuery MinSpectreY MaxSpectreY {OneNtPixel ""} {ColorLine black} {TagDuGraph GC}} { global RepertoireDuGenome Wup "Affiche le spectre GC pour IllustreOligo" if {$OneNtPixel==""} {set OneNtPixel 1} set HauteurDuSpectreY [expr $MaxSpectreY-$MinSpectreY] set n 0 set PremiereLigne 1 foreach Ligne $UneListe { if {$PremiereLigne} { scan $Ligne "%d %d" xMin yMin #Mise a l echelle plus debut de la query #set xMin [expr $XDebutQuery + [expr $xMin * $OneNtPixel]] set VraiyMin [expr $yMin*1.0] set yMin 0 set PremiereLigne 0 set DeuxiemeLigne 1 continue } if {$DeuxiemeLigne} { scan $Ligne "%d %d" xMax yMax #set xMax [expr $XFinQuery + [expr $xMax * $OneNtPixel]] #set xMax [expr $XDebutQuery + [expr $xMax * $OneNtPixel]] set VraiyMax [expr $yMax*1.0] set yMax 100 set DeuxiemeLigne 0 set TroisiemeLigne 1 continue } if {$TroisiemeLigne} { scan $Ligne "%f %f" x yMoyen #set xMin [expr $x * $OneNtPixel] set TroisiemeLigne 0 $K create text [expr $XDebutQuery-5] [expr $MaxSpectreY-($HauteurDuSpectreY/4)+(($HauteurDuSpectreY/4)/2)] -text "% GC" -tags [list "" "Echelle $yMin a $yMax\nMin $VraiyMin Max $VraiyMax" "Affichable" "OligoGraph" "$TagDuGraph"] -fill $ColorLine -anchor e #Ligne 0% de GC $K create line $XDebutQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] -fill $ColorLine #Ligne Moyenne $K create line $XDebutQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "Moy GC [format "%4.1f" $yMoyen]%" "Affichable" "OligoGraph" "$TagDuGraph" "AverageGC"] -fill $ColorLine -dash {6 4} #Ligne 100% de GC $K create line $XDebutQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] -fill $ColorLine continue } scan $Ligne "%f %f" x y set X [expr $XDebutQuery + [expr $x * $OneNtPixel]] set Y [expr $MaxSpectreY-((($y-$yMin)*($HauteurDuSpectreY))/($yMax-$yMin))] incr n if { $n > 1 } { $K create line [set Coordonnees(LastX)] [set Coordonnees(LastY)] $X $Y -tags [list "" "[format "%.1f" [expr ([set Coordonnees(VraiY)]+$y)/2]] % GC" "Affichable" "OligoGraph" "$TagDuGraph"] -fill $ColorLine set n 1 } set Coordonnees(VraiY) $y set Coordonnees(LastX) $X set Coordonnees(LastY) $Y lappend LesPoints "$X $Y $y" } foreach Coord $LesPoints { set X [lindex $Coord 0] set Y [lindex $Coord 1] set GC [lindex $Coord 2] $K create line $X $Y $X $Y -fill "$ColorLine" -tags [list "" "[format "%.1f" $GC] % GC" "Affichable" "OligoGraph" "$TagDuGraph"] } if {[info exists Coordonnees]} {array unset Coordonnees} return "" } proc AfficheLeSpectreGCenCouleur {K PosLineY} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/spectregc"] { scan $Ligne "%d %d %s" d f Couleur if {[regexp "green" $Couleur]} { continue } $K create line $d $PosLineY $f $PosLineY -fill $Couleur -width 5 } } proc AfficheLeSpectreIdDUneListe {K UneListe XDebutQuery XFinQuery MinSpectreY MaxSpectreY {OneNtPixel ""} {ColorLine black} {TagDuGraph ""}} { global RepertoireDuGenome Wup "Affiche le spectre du Nb de sequence pour IllustreOligo" if {$OneNtPixel==""} {set OneNtPixel 1} set HauteurDuSpectreY [expr $MaxSpectreY-$MinSpectreY] set n 0 set PremiereLigne 1 foreach Ligne $UneListe { if {$PremiereLigne} { scan $Ligne "%d %f" yMin VraiyMin set PremiereLigne 0 set DeuxiemeLigne 1 continue } if {$DeuxiemeLigne} { scan $Ligne "%d %f" yMax VraiyMax set DeuxiemeLigne 0 set TroisiemeLigne 1 continue } if {$TroisiemeLigne} { scan $Ligne "%d %f" yMoyen VraiyMoyen set TroisiemeLigne 0 $K create text [expr $XDebutQuery-5] [expr $MaxSpectreY-(2*$HauteurDuSpectreY/4)+(($HauteurDuSpectreY/4)/2)] -text "% Id" -tags [list "" "$TagDuGraph\nEchelle $yMin a $yMax\nMin $VraiyMin Max $VraiyMax" "Affichable" "OligoGraph" "$TagDuGraph"] -fill $ColorLine -anchor e #Ligne min de nb seq 0 $K create line $XDebutQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] #Ligne Moyenne $K create line $XDebutQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "Moy Id [format "%4.1f" $yMoyen]%" "Affichable" "OligoGraph" "$TagDuGraph" "Average$TagDuGraph"] -fill "$ColorLine" -dash {6 4} #Ligne de max nbseq $K create line $XDebutQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] continue } scan $Ligne "%f %f" x y set X [expr $XDebutQuery + [expr $x * $OneNtPixel]] set Y [expr $MaxSpectreY-((($y-$yMin)*($HauteurDuSpectreY))/($yMax-$yMin))] incr n if {$n > 1} { $K create line [set Coordonnees(LastX)] [set Coordonnees(LastY)] $X $Y -tags [list "" "[format "%.1f" [expr ([set Coordonnees(VraiY)]+$y)/2]] % Id" "Affichable" "OligoGraph" "$TagDuGraph"] -fill "$ColorLine" set n 1 } set Coordonnees(VraiY) $y set Coordonnees(LastX) $X set Coordonnees(LastY) $Y lappend LesPoints "$X $Y $y" } foreach Coord $LesPoints { set X [lindex $Coord 0] set Y [lindex $Coord 1] set Id [lindex $Coord 2] $K create line $X $Y $X $Y -fill "$ColorLine" -tags [list "" "[format "%.1f" $Id] % Id" "Affichable" "OligoGraph" "$TagDuGraph"] } if {[info exists Coordonnees]} {array unset Coordonnees} return "" } proc AfficheLeSpectreNbSequenceDUneListe {K UneListe XDebutQuery XFinQuery MinSpectreY MaxSpectreY {OneNtPixel ""} {ColorLine black} {TagDuGraph ""}} { global RepertoireDuGenome Wup "Affiche le spectre du Nb de sequence pour IllustreOligo" if {$OneNtPixel==""} {set OneNtPixel 1} set HauteurDuSpectreY [expr $MaxSpectreY-$MinSpectreY] set n 0 set PremiereLigne 1 foreach Ligne $UneListe { if {$PremiereLigne} { scan $Ligne "%d %f" yMin VraiyMin set PremiereLigne 0 set DeuxiemeLigne 1 continue } if {$DeuxiemeLigne} { scan $Ligne "%d %f" yMax VraiyMax set DeuxiemeLigne 0 set TroisiemeLigne 1 continue } if {$TroisiemeLigne} { scan $Ligne "%d %f" yMoyen VraiyMoyen set TroisiemeLigne 0 $K create text [expr $XDebutQuery-5] [expr $MaxSpectreY-(4*$HauteurDuSpectreY/4)+(($HauteurDuSpectreY/4)/2)] -text "nSeq" -tags [list "" "$TagDuGraph\nEchelle $yMin a $yMax\nMin $VraiyMin Max $VraiyMax" "Affichable" "OligoGraph" "$TagDuGraph"] -fill $ColorLine -anchor e #Ligne min de nb seq 0 $K create line $XDebutQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] #Ligne Moyenne $K create line $XDebutQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "Moy NbSeq [format "%3.1f" $yMoyen]" "Affichable" "OligoGraph" "$TagDuGraph" "Average$TagDuGraph"] -fill "$ColorLine" -dash {6 4} #Ligne de max nbseq $K create line $XDebutQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] continue } scan $Ligne "%d %d" x y set X [expr $XDebutQuery + [expr $x * $OneNtPixel]] set Y [expr $MaxSpectreY-((($y-$yMin)*($HauteurDuSpectreY))/($yMax-$yMin))] incr n if {$n > 1} { $K create line [set Coordonnees(LastX)] [set Coordonnees(LastY)] $X $Y -tags [list "" "[expr ([set Coordonnees(VraiY)]+$y)/2] seq(s)" "Affichable" "OligoGraph" "$TagDuGraph"] -fill "$ColorLine" set n 1 } set Coordonnees(VraiY) $y set Coordonnees(LastX) $X set Coordonnees(LastY) $Y lappend LesPoints "$X $Y $y" } foreach Coord $LesPoints { set X [lindex $Coord 0] set Y [lindex $Coord 1] set NbSq [lindex $Coord 2] $K create line $X $Y $X $Y -fill "$ColorLine" -tags [list "" "$NbSq seq(s)" "Affichable" "OligoGraph" "$TagDuGraph"] } if {[info exists Coordonnees]} {array unset Coordonnees} return "" } proc AfficheLeSpectreTmDUneListe {K UneListe XDebutQuery XFinQuery MinSpectreY MaxSpectreY {OneNtPixel ""} {ColorLine black} {TagDuGraph ""}} { global RepertoireDuGenome Wup "Affiche le spectre du Tm pour IllustreOligo" if {$OneNtPixel==""} {set OneNtPixel 1} set HauteurDuSpectreY [expr $MaxSpectreY-$MinSpectreY] set n 0 set PremiereLigne 1 foreach Ligne $UneListe { if {$PremiereLigne} { scan $Ligne "%f %f" yMin VraiyMin set PremiereLigne 0 set DeuxiemeLigne 1 continue } if {$DeuxiemeLigne} { scan $Ligne "%f %f" yMax VraiyMax set DeuxiemeLigne 0 set TroisiemeLigne 1 continue } if {$TroisiemeLigne} { scan $Ligne "%f %f" yMoyen VraiyMoyen set TroisiemeLigne 0 $K create text [expr $XDebutQuery-5] [expr $MaxSpectreY-(3*$HauteurDuSpectreY/4)+(($HauteurDuSpectreY/4)/2)] -text "Tm" -tags [list "" "$TagDuGraph\nMin $VraiyMin Max $VraiyMax " "Affichable" "OligoGraph" "$TagDuGraph"] -fill $ColorLine -anchor e #Ligne min de nb seq 0 $K create line $XDebutQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMin-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] #Ligne Moyenne $K create line $XDebutQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMoyen-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "Moy Tm [format "%4.1f" $yMoyen]°C" "Affichable" "OligoGraph" "$TagDuGraph" "Average$TagDuGraph"] -fill "$ColorLine" -dash {6 4} #Ligne de max nbseq $K create line $XDebutQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] $XFinQuery [expr $MaxSpectreY-($yMax-$yMin)*($HauteurDuSpectreY)/($yMax-$yMin)] -tags [list "" "OligoGraph" "$TagDuGraph"] continue } scan $Ligne "%f %f" x y set X [expr $XDebutQuery + [expr $x * $OneNtPixel]] set Y [expr $MaxSpectreY-($y-$yMin)*($HauteurDuSpectreY*1.0)/($yMax-$yMin)] incr n if {$n > 1} { $K create line [set Coordonnees(LastX)] [set Coordonnees(LastY)] $X $Y -tags [list "" "[format "%.1f" [expr ([set Coordonnees(VraiY)]+$y)/2]] °C" "Affichable" "OligoGraph" "$TagDuGraph"] -fill "$ColorLine" set n 1 } set Coordonnees(VraiY) $y set Coordonnees(LastX) $X set Coordonnees(LastY) $Y lappend LesPoints "$X $Y $y" } foreach Coord $LesPoints { set X [lindex $Coord 0] set Y [lindex $Coord 1] set Tm [lindex $Coord 2] $K create line $X $Y $X $Y -fill "$ColorLine" -tags [list "" "[format "%.1f" $Tm] °C" "Affichable" "OligoGraph" "$TagDuGraph"] } if {[info exists Coordonnees]} {array unset Coordonnees} return "" } proc AfficheLesAliEnPage {Page Selection Fichier} { set LesSel [split $Selection "\n"] if {[PourWscope]} { set s [lindex $LesSel 0] return [AfficheAliEnPage $Page $s $Fichier] } foreach s $LesSel { AfficheAliEnPage $Page $s $Fichier } } proc AfficheLesAutresCandidats {K PAB} { Wup "Permet d afficher les candidats de l oligo" Wup "On ajoute les boutons pour les liens vers les banques" set Id [$K find withtag current] set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Dir [lindex $MesTags 5] set LesAccessDef [LesAccessDefDeLOligo $PAB $NomOligo $Dir] if {$LesAccessDef==""} {return ""} set Fen [AfficheVariable [join $LesAccessDef "\n"] "" "$NomOligo de $PAB dans [file tail $Dir]"] set FenB "$Fen.buttons" TouchePour $FenB NouvelleGamme TouchePour $FenB NouvelleCouleur "white" set D [TouchePour $FenB "FastaCmd" ""] TouchePour $FenB NouvelleCouleur "green" TouchePour $FenB "Sel" "catch {SauveLesInfosDe $K Win \[FastaCmd \[selection get\]\]}" TouchePour <2> "/All" "catch {SauveLesInfosDe $K Win \[FastaCmd \[set PagePropre($Fen)\]\]}" TouchePour <3> "/Complete" "catch {SauveLesInfosDe $K Win \[FastaCmd \[selection get\] Complet\]}" set Texte [format "%-10s" "Buttons below:"] append Texte [format "\n%-10s" "To retrieve sequence in fasta format from blast database"] append Texte [format "\n%-10s" "To retrieve sequence header (access and definition)"] set_balloon $D "$Texte" $D configure -state disabled -disabledforeground "black" TouchePour $FenB NouvelleGamme TouchePour $FenB NouvelleCouleur "white" set B [TouchePour $FenB "Link Uniseq To" ""] TouchePour $FenB NouvelleCouleur "green" TouchePour $FenB "Unigene ID Sel" "catch {SauveLesInfosDe $K Win \[LeUnigeneDeUniseq_GUI \[selection get\]\]}" TouchePour <2> "/All" "catch {SauveLesInfosDe $K Win \[LeUnigeneDeUniseq_GUI \[set PagePropre($Fen)\]\]}" TouchePour $FenB NouvelleGamme TouchePour $FenB NouvelleCouleur "green" TouchePour $FenB "Genbank Sel" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] uniseq genbank All\]}" TouchePour <2> "/Id" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\]\]}" TouchePour <3> "/All" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[set PagePropre($Fen)\]\]}" TouchePour $FenB "Protein Sel" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] uniseq protein All\]}" TouchePour <2> "/Id" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] uniseq protein\]}" TouchePour <3> "/All" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[set PagePropre($Fen)\] uniseq protein\]}" set Texte [format "%-10s" "Buttons below:"] append Texte [format "\n%-10s" "To Link Unigene to Genbank or to Protein database"] append Texte [format "\n%-10s" "Allows to retrieve access only (Id and all) or complete entry (Sel.)"] append Texte [format "\n%-10s" "Allows to retrieve also Unigene (Ug.xxx) id from Uniseq (HS#xxx)"] set_balloon $B "$Texte" $B configure -state disabled -disabledforeground "black" return $Fen } proc AfficheLesAutresCandidatsComplet {K PAB} { Wup "Permet d afficher les candidats de l oligo avec leur pourcentages d identite et leur nb bases contigues" Wup "On ajoute les boutons pour les liens vers les banques" set Id [$K find withtag current] set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Dir [lindex $MesTags 5] set Debut [lindex $MesTags 2] set Fin [lindex $MesTags 3] set LesAccessDef [LesAccessStatCompletes "$Dir/${PAB}.log" $Debut $Fin] if {$LesAccessDef==""} {return ""} set Fen [AfficheVariable [join $LesAccessDef "\n"] "" "$NomOligo de $PAB dans [file tail $Dir]"] set FenB "$Fen.buttons" TouchePour $FenB NouvelleGamme TouchePour $FenB NouvelleCouleur "white" set D [TouchePour $FenB "FastaCmd" ""] TouchePour $FenB NouvelleCouleur "green" TouchePour $FenB "Sel" "catch {SauveLesInfosDe $K Win \[FastaCmd \[selection get\]\]}" TouchePour <2> "/All" "catch {SauveLesInfosDe $K Win \[FastaCmd \[set PagePropre($Fen)\]\]}" TouchePour <3> "/Complete" "catch {SauveLesInfosDe $K Win \[FastaCmd \[selection get\] Complet\]}" set Texte [format "%-10s" "Buttons below:"] append Texte [format "\n%-10s" "To retrieve sequence in fasta format from blast database"] append Texte [format "\n%-10s" "To retrieve sequence header (access and definition)"] set_balloon $D "$Texte" $D configure -state disabled -disabledforeground "black" TouchePour $FenB NouvelleGamme TouchePour $FenB NouvelleCouleur "white" set B [TouchePour $FenB "Link Uniseq To" ""] TouchePour $FenB NouvelleCouleur "green" TouchePour $FenB "Unigene ID Sel" "catch {SauveLesInfosDe $K Win \[LeUnigeneDeUniseq_GUI \[selection get\]\]}" TouchePour <2> "/All" "catch {SauveLesInfosDe $K Win \[LeUnigeneDeUniseq_GUI \[set PagePropre($Fen)\]\]}" TouchePour $FenB NouvelleGamme TouchePour $FenB NouvelleCouleur "green" TouchePour $FenB "Genbank Sel" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] uniseq genbank All\]}" TouchePour <2> "/Id" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\]\]}" TouchePour <3> "/All" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[set PagePropre($Fen)\]\]}" TouchePour $FenB "Protein Sel" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] uniseq protein All\]}" TouchePour <2> "/Id" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] uniseq protein\]}" TouchePour <3> "/All" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[set PagePropre($Fen)\] uniseq protein\]}" set Texte [format "%-10s" "Buttons below:"] append Texte [format "\n%-10s" "To Link Unigene to Genbank or to Protein database"] append Texte [format "\n%-10s" "Allows to retrieve access only (Id and all) or complete entry (Sel.)"] append Texte [format "\n%-10s" "Allows to retrieve also Unigene (Ug.xxx) id from Uniseq (HS#xxx)"] set_balloon $B "$Texte" $B configure -state disabled -disabledforeground "black" return $Fen } proc AfficheLesAutresCandidatsOligoArray {K PAB} { Wup "Permet d'afficher les candidats de l'oligo" set Id [$K find withtag current] set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Dir [lindex $MesTags 5] set LesAccessDef [LesAccessDefDeLOligoArray $PAB $NomOligo $Dir] set Fen [AfficheVariable [join $LesAccessDef "\n"] "" "$NomOligo de $PAB dans $Dir"] #set texte ["$Fen.frame.list" get 0 end] set B [BoutonneLaFenetre $Fen "Getz\nuniseq > genbank Sel/Id/All Id\nuniseq > protein Sel/Id/All Id\ngenbank > protein Sel/Id/All Id"] bind $B <1> "GetzUniseq_GUI $K \[selection get\] uniseq genbank EntreeComplete" bind $B <2> "GetzUniseq_GUI $K \[selection get\] uniseq genbank AccessDef" bind $B <3> "GetzUniseq_GUI $K \[set PagePropre($Fen)\] uniseq genbank AccessDef" bind $B "GetzUniseq_GUI $K \[selection get\] uniseq protein EntreeComplete" bind $B "GetzUniseq_GUI $K \[selection get\] uniseq protein AccessDef" bind $B "GetzUniseq_GUI $K \[set PagePropre($Fen)\] uniseq protein AccessDef" bind $B "GetzUniseq_GUI $K \[selection get\] genbank protein EntreeComplete" bind $B "GetzUniseq_GUI $K \[selection get\] genbank protein AccessDef" bind $B "GetzUniseq_GUI $K \[set PagePropre($Fen)\] genbank protein AccessDef" $B configure -background "green" return $Fen #return "[AfficheVariable [join $LesAccessDef "\n"] "" "$NomOligo de $PAB dans $Dir"]" } proc AfficheLesBAC {K} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id] set Chro [lindex $MesTags 0] set Deb [lindex $MesTags 1] set Fin [lindex $MesTags 2] set Nom [lindex $MesTags 3] set Id [lindex $MesTags 4] set IntId [lindex $MesTags 5] set Texte "$Nom\n$Chro\nFrom $Deb\nTo $Fin\nName: $Nom\nID: $Id\nInternationalID: $IntId" ac_AfficheVariable "$Texte" "" "Summary" return "$Texte" } proc AfficheLesBlastXDesHitsMultiples {Nom} { foreach Fichier [LesBlastXDesHitsMultiples $Nom] { AfficheFichier $Fichier "AvecSegAlignement" } return } proc AfficheLesBoutonsNonOpen {{V ""}} { global LesBoutonsNonOpen # if {$V==""} { set V [Vitrine "GetVitrine"] } foreach b $LesBoutonsNonOpen { pack $b -fill both } } proc AfficheLesConcernesDeCeRang {K X Y Fichier} { global RepertoireDuGenome global NotreOS global PABRetenus Wup "if K is an Organism then return LesAtteints (for PourGif)" if {[regexp {^\.} $K]} { set PourGif 0 } else { set PourGif 1 } regsub "orgaetsesplaces" $Fichier "distancesphylo.[Glossaire $NotreOS Court]" FichierDPh regsub "orgaetsesplaces" $Fichier "pabretenus" FichierDesRetenus set TailFDR [file tail $FichierDesRetenus] if { ! [info exists PABRetenus($TailFDR)] && [file exists $FichierDesRetenus]} { set PABRetenus($TailFDR) 1 foreach Ligne [LesLignesDuFichier $FichierDesRetenus] { scan $Ligne "%s" Nom set PABRetenus($TailFDR,$Nom) 1 } } if { ! [file exists $FichierDPh]} { FaireLire "I can't find $FichierDPh" return "" } if {$PourGif} { set Orga [Glossaire $K Court] set Score $X set Rang $Y set Rep "" } else { set Id [$K find withtag current] set Orga [Glossaire [lindex [$K gettags $Id] 0] Court] set Score [lindex [$K gettags $Id] 1] set Rang [lindex [$K gettags $Id] 2] set Rep "$RepertoireDuGenome/" } set LesAtteints {} foreach Ligne [LesLignesDuFichier $FichierDPh] { set LesMots [split $Ligne " "] set Nom [lindex $LesMots 0] set Ieme [lsearch -exact $LesMots $Orga] if { [expr ($Ieme-1)/3] == [expr $Rang-1] } { if { ! [info exists PABRetenus($TailFDR)] || [info exists PABRetenus($TailFDR)] && [info exists PABRetenus($TailFDR,$Nom)]} { lappend LesAtteints "${Rep}msf/$Nom $Ligne" } } } if {$PourGif} { return $LesAtteints } if {[llength $LesAtteints]>0} { AfficheVariable [join $LesAtteints "\n"] "AvecShowSansFetch" } else { FaireLire "Sorry I can't find the associated alignments ... I'm so messy ..." } } proc AfficheLesConditionsDeTmEtDeTaille {{PAB ""} {Taille ""} {Tm ""} {AvecAffiche 0}} { Wup "Affiche les resultats du Test pour tous les PABs et dans plusieurs conditions de Tm et de taille" #ChargeLeTableauDesTestsSurLeTmEtLaTaille TabRes "StatOligoPossible" $PAB $Taille $Tm ChargeLeTableauDesTestsSurLeTmEtLaTaille TabRes "StatOligoPossible_60.new" $PAB $Taille $Tm CalculLesMeilleursConditionsDeTmEtDeTaille TabRes if {$PAB==""} {set LesPABs [set TabRes(LesPABs)]} else {set LesPABs $PAB} Espionne "Test pour les PABs des meilleures conditions de Tm ([set TabRes(LesTms)]) et de Taille ([set TabRes(LesLongueurs)]) qui genere le plus grand nombre de sondes." foreach PAB $LesPABs { if {$PAB=="ACT1165"} {continue} if {$AvecAffiche} {Espionne "\nMeilleur Tm pour toutes les conditions de Taille"} foreach Length [set TabRes(LesLongueurs)] { set LeMeilleurTm [set TabRes($PAB,$Length,LeMeilleurTm)] #Incremente le nb des meilleurs pour chaque Tm de toutes les conditions incr TabRes(nbMeilleurTm,$LeMeilleurTm) incr TabRes($Length,$LeMeilleurTm,nbMeilleurTm) lappend TabRes($Length,$LeMeilleurTm,nbMeilleurTm,LesPABs) $PAB if {$AvecAffiche} { set PerAccept [set TabRes($PAB,$Length,$LeMeilleurTm,PercentAccepted)] set PerRej [set TabRes($PAB,$Length,$LeMeilleurTm,PercentRejected)] set Accepted [set TabRes($PAB,$Length,$LeMeilleurTm,NbAccepted)] set Rejected [set TabRes($PAB,$Length,$LeMeilleurTm,NbRejected)] set GCAccepted [set TabRes($PAB,$Length,$LeMeilleurTm,GCAccept)] set GCRejected [set TabRes($PAB,$Length,$LeMeilleurTm,GCReject)] Espionne "$PAB $Length $LeMeilleurTm $Accepted $PerAccept $Rejected $PerRej $GCAccepted $GCRejected" } } if {$AvecAffiche} {Espionne "\nMeilleur Taille pour toutes les conditions de Tm"} foreach Tm [set TabRes(LesTms)] { set LaMeilleureTaille [set TabRes($PAB,$Tm,LaMeilleureTaille)] #Incremente le nb des meilleurs pour chaque Taille de toutes les conditions incr TabRes(nbMeilleureTaille,$LaMeilleureTaille) #incr TabRes($LaMeilleureTaille,$Tm,nbMeilleureTaille) #lappend TabRes($LaMeilleureTaille,$Tm,nbMeilleureTaille,LesPABs) $PAB if {$AvecAffiche} { set PerAccept [set TabRes($PAB,$LaMeilleureTaille,$Tm,PercentAccepted)] set PerRej [set TabRes($PAB,$LaMeilleureTaille,$Tm,PercentRejected)] set Accepted [set TabRes($PAB,$LaMeilleureTaille,$Tm,NbAccepted)] set Rejected [set TabRes($PAB,$LaMeilleureTaille,$Tm,NbRejected)] set GCAccepted [set TabRes($PAB,$LaMeilleureTaille,$Tm,GCAccept)] set GCRejected [set TabRes($PAB,$LaMeilleureTaille,$Tm,GCReject)] Espionne "$PAB $LaMeilleureTaille $Tm $Accepted $PerAccept $Rejected $PerRej $GCAccepted $GCRejected" } } #Calcul des meilleures conditions pour chaque PAB #Taille vs Tm actif #Tm vs Taille inactif set LeMeilleurTmDuPAB [set TabRes($PAB,LeMeilleurTm)] set LaTailleDeLeMeilleurTm [set TabRes($PAB,LaTailleDeLeMeilleurTm)] #Espionne "$PAB $LaTailleDeLeMeilleurTm $LeMeilleurTmDuPAB" if {![info exists TabRes($LaTailleDeLeMeilleurTm,$LeMeilleurTmDuPAB,nbMeilleurTmDeTous)]} { set TabRes($LaTailleDeLeMeilleurTm,$LeMeilleurTmDuPAB,nbMeilleurTmDeTous) 1 } else { incr TabRes($LaTailleDeLeMeilleurTm,$LeMeilleurTmDuPAB,nbMeilleurTmDeTous) 1 } lappend TabRes($LaTailleDeLeMeilleurTm,$LeMeilleurTmDuPAB,nbMeilleurTmDeTous,LesPABs) $PAB # set LaMeilleureTailleDuPAB [set TabRes($PAB,LaMeilleureTaille)] # set LeTmDeLaMeilleureTailleDuPAB [set TabRes($PAB,LeTmDeLaMeilleureTaille)] # if {![info exists TabRes($LaMeilleureTailleDuPAB,$LeTmDeLaMeilleureTailleDuPAB,nbMeilleurTailleDeTous)]} { # set TabRes($LaMeilleureTailleDuPAB,$LeTmDeLaMeilleureTailleDuPAB,nbMeilleurTailleDeTous) 1 # } else { # incr TabRes($LaMeilleureTailleDuPAB,$LeTmDeLaMeilleureTailleDuPAB,nbMeilleurTailleDeTous) 1 # } } set NbTotalPAB [set TabRes(nbPAB)] set NbTotalTaille [set TabRes(nbTaille)] set NbTotalTm [set TabRes(nbTm)] Espionne "Nombre de fois que le Tm est le meilleur:" #Rq:On divise par le nombre de Taille foreach Tm [set TabRes(LesTms)] { set Valeur [set TabRes(nbMeilleurTm,$Tm)] set Percent [expr 100.0*$Valeur/$NbTotalTaille] Espionne "$Tm\t[format "%6d\t%2.1f" $Valeur $Percent] %" } Espionne "Total: $NbTotalTaille = PAB ($NbTotalPAB) * NbTaille ([llength [set TabRes(LesLongueurs)]])\n" Espionne "Nombre de fois que la Taille est la meilleure:" #Rq:On divise par le nombre de Tm foreach Taille [set TabRes(LesLongueurs)] { set Valeur [set TabRes(nbMeilleureTaille,$Taille)] set Percent [expr (100.0*$Valeur)/$NbTotalTm] Espionne "$Taille\t[format "%6d\t%2.1f" $Valeur $Percent] %" } Espionne "Total: $NbTotalTm = PAB ($NbTotalPAB) * NbTm ([llength [set TabRes(LesTms)]])\n" Espionne "Meilleures conditions (Tm pour chaque Taille) en considerant a chaque fois tous les PABs:" foreach Taille [set TabRes(LesLongueurs)] { set Valeur "Nombre" set Percent "Pourcent" Espionne "$Taille\t--\t$Valeur\t$Percent\txGC Total\txGC Accepted" set Total 0 foreach Tm [set TabRes(LesTms)] { if {! [info exists TabRes($Taille,$Tm,nbMeilleurTm)]} { set Nb 0 } else { set Nb [set TabRes($Taille,$Tm,nbMeilleurTm)] } set Total [expr $Total+$Nb] if {! [info exists TabRes($Taille,$Tm,nbMeilleurTm,LesPABs)]} { set MoyenneDuGCDesPAB 0.0 set MoyenneDuGCDesAccepted 0.0 } else { set ListePABs [set TabRes($Taille,$Tm,nbMeilleurTm,LesPABs)] set NbPAB [llength $ListePABs] set ATGCDesPABTotal 0 set GCAcceptedTotal 0 foreach PAB $ListePABs { set ATGC [CompositionATGCDuPAB $PAB GC] set ATGCDesPABTotal [expr $ATGCDesPABTotal+$ATGC] set GCAccepted [set TabRes($PAB,$Taille,$Tm,GCAccept)] #set GCRejected [set TabRes($PAB,$Taille,$Tm,GCReject)] set GCAcceptedTotal [expr $GCAcceptedTotal+$GCAccepted] } if {$NbPAB=="0"} { set MoyenneDuGCDesPAB 0.0 set MoyenneDuGCDesAccepted 0.0 } else { set MoyenneDuGCDesPAB [format " %.1f" [expr (1.0*$ATGCDesPABTotal)/$NbPAB]] set MoyenneDuGCDesAccepted [format " %.1f" [expr (1.0*$GCAcceptedTotal)/$NbPAB]] } } Espionne "--\t$Tm\t$Nb\t--\t$MoyenneDuGCDesPAB\t$MoyenneDuGCDesAccepted" } Espionne "--\t--\t$Total\t[format "%.1f" [expr 100.0*($Total*1.0)/($NbTotalPAB)]]" } Espionne "PAB au total: $NbTotalPAB PAB(s)" Espionne "\n" Espionne "Meilleures conditions (Tm pour chaque Taille) ultimes:" set CompteurDePAB 0 foreach Taille [set TabRes(LesLongueurs)] { set Valeur "Nombre" set Percent "Pourcent" Espionne "$Taille\t--\t$Valeur\t$Percent\txGC Total\txGC Accepted" set Total 0 foreach Tm [set TabRes(LesTms)] { if {! [info exists TabRes($Taille,$Tm,nbMeilleurTmDeTous)]} { set Nb 0 } else { set Nb [set TabRes($Taille,$Tm,nbMeilleurTmDeTous)] } set Total [expr $Total+$Nb] if {! [info exists TabRes($Taille,$Tm,nbMeilleurTmDeTous,LesPABs)]} { set MoyenneDuGCDesPAB 0.0 set MoyenneDuGCDesAccepted 0.0 } else { set ListePABs [set TabRes($Taille,$Tm,nbMeilleurTmDeTous,LesPABs)] set NbPAB [llength $ListePABs] set ATGCDesPABTotal 0 set GCAcceptedTotal 0 foreach PAB $ListePABs { incr CompteurDePAB 1 set ATGC [CompositionATGCDuPAB $PAB GC] set ATGCDesPABTotal [expr $ATGCDesPABTotal+$ATGC] set GCAccepted [set TabRes($PAB,$Taille,$Tm,GCAccept)] #set GCRejected [set TabRes($PAB,$Taille,$Tm,GCReject)] set GCAcceptedTotal [expr $GCAcceptedTotal+$GCAccepted] } if {$NbPAB=="0"} { set MoyenneDuGCDesPAB 0.0 set MoyenneDuGCDesAccepted 0.0 } else { set MoyenneDuGCDesPAB [format " %.1f" [expr (1.0*$ATGCDesPABTotal)/$NbPAB]] set MoyenneDuGCDesAccepted [format " %.1f" [expr (1.0*$GCAcceptedTotal)/$NbPAB]] } } Espionne "--\t$Tm\t$Nb\t--\t$MoyenneDuGCDesPAB\t$MoyenneDuGCDesAccepted" } Espionne "--\t--\t$Total\t[format "%.1f" [expr 100.0*($Total*1.0)/($NbTotalPAB)]]" } Espionne "PAB au total: $CompteurDePAB PAB(s)" return "" } proc AfficheLesConditionsDeTmEtDeTailleDePAB {PAB} { Wup "Affiche les resultats du Test pour un PAB en particulier et dans plusieurs conditions de Tm et de taille" ChargeLeTableauDesTestsSurLeTmEtLaTaille TabRes "StatOligoPossible" $PAB if {$PAB==""} {set LesPABs [set TabRes(LesPABs)]} else {set LesPABs $PAB} set ListeSortie {} foreach PAB $LesPABs { foreach Length [set TabRes(LesLongueurs)] { foreach Tm [set TabRes(LesTms)] { set PerAccept [set TabRes($PAB,$Length,$Tm,PercentAccepted)] set PerRej [set TabRes($PAB,$Length,$Tm,PercentRejected)] set Accepted [set TabRes($PAB,$Length,$Tm,NbAccepted)] set Rejected [set TabRes($PAB,$Length,$Tm,NbRejected)] lappend ListeSortie [list $PAB $Length $Tm $Accepted $PerAccept $Rejected $PerRej] } } } return $ListeSortie } proc AfficheLesCouleursEtSignifications {K} { global TypeCouleur set LesNomSignif [LesSignificationsAssocieesAuxORFs $K] set OldSignif "trululuyoupiii" set LaSortie {} foreach Ligne $LesNomSignif { scan $Ligne "%s" Nom set Signif [StringSuivant " " dans $Ligne] if {$Signif!=$OldSignif} { set N 0 } lappend LaSortie "$Nom [incr N] $Signif" set OldSignif $Signif } return [AfficheVariable [join $LaSortie "\n"] "AvecShow"] } proc AfficheLesDescriptifs {Source {Ordre MemeOrdre} {QuoiRetourner ""} {LesAccessOrdonnes ""} {LesClefs ""} {NomOrigine ""}} { #rR Source can be Texte, a file or descriptif/Nom msf/Nom rsf/Nom blast/Nom etc. #rR il y a une petite confusion a regler pour LesAccessOrdonnees #rR attention je croyais que ca marcherait si on donne une source qui n'est pas du même projet !!! #rR ca ne marche pas si on prend MemeOrdre qu'un fichier Macsim par exemple car LeDescriptif est trop spécfique au projet Gscope :'( A VOIR Wup "Attention: blast doesn't rearrange the order of the file" if {[regexp "\n" $Source]} { set TmpMSF "[TmpFile].msf" Sauve $Source dans $TmpMSF set NomOuFichier $TmpMSF } else { set NomOuFichier $Source while {[FileAbsent $NomOuFichier]} { set Possible "[RepertoireDuGenome]/$NomOuFichier" if {[FileExists $Possible]} { set NomOuFichier $Possible; break } if {[EstUnPAB $NomOuFichier]} { #rR on priviligie le MSF set Possible "[RepertoireDuGenome]/msf/$NomOuFichier" if {[FileExists $Possible]} { set NomOuFichier $Possible; break } } if {[regexp "rsf" $NomOuFichier]} { set Queue [file tail $NomOuFichier] set Possible "[RepertoireDuGenome]/macsimRsf/$Queue" if {[FileExists $Possible]} { set NomOuFichier $Possible; break } } FaireLire "I can not find $NomOuFichier" return "" } } if {$NomOrigine==""} { set NomOrigine $NomOuFichier } set Nom [file tail $NomOrigine] set RepDesc "[RepertoireDuGenome]/descriptifs" set PossibleRepDesc "[file dirname [file dirname $Source]]/descriptifs" if {[file exists $PossibleRepDesc/$Nom]} { set RepDesc $PossibleRepDesc } if { 0 && [regexp "/" $NomOuFichier] && [file exists $NomOuFichier]} { #rR a mis 0 ... 20150521 ..................................................... ca merde ... si le projet n'est pas le RepertoireDuGenome set FichierDescriptif $NomOuFichier } else { set FichierDescriptif "$RepDesc/$Nom" } set FichierModele "NeDoitPasExister" if {[FileAbsent $FichierDescriptif]} { return "" } if {$Ordre=="Natif"} { set LesDes [LesLignesDuFichier $FichierDescriptif] ; set NomOuFichier $FichierDescriptif } if {$Ordre=="MemeOrdre" && [regexp -nocase "msf|clustal" $NomOuFichier]} { DecortiqueUnMSF $NomOuFichier LesAccessOrdonnes } if {$Ordre=="MemeOrdre" && [regexp -nocase "rsf" $NomOuFichier]} { DecortiqueUnRSF $NomOuFichier LesAccessOrdonnes } if {$Ordre=="MemeOrdre" && [regexp -nocase "blast" $NomOuFichier]} { DecortiqueBlast $NomOuFichier 0.001 "SansLimiteDeNombre" Query lBA LesAccessOrdonnes lDE lProfil lPN } if {$Ordre=="MemeOrdre" && [regexp -nocase "aliinout" $NomOuFichier]} { set LesAccessOrdonnes [LesAccessDuAliInOut $NomOuFichier] } if {$Ordre=="MemeOrdre" && [regexp -nocase "disphy" $NomOuFichier]} { set LesAccessOrdonnes [FromDisphy $NomOuFichier] } if {$Ordre=="MemeOrdre" && [regexp -nocase "apns" $NomOuFichier]} { set LesAccessOrdonnes [LesAccessDuAPN $NomOuFichier] } if {[info exists LesAccessOrdonnes] && $LesAccessOrdonnes!=""} { if { ! [info exists lBA]} { set lBA $LesAccessOrdonnes } foreach Access $LesAccessOrdonnes BA $lBA { set Des [LeDescriptif $Access $Nom] if {[regexp "no description" $Des]} { regsub {^[^\:]+:} $BA "" BA set Des [LeDescriptif $BA $Nom] } lappend LesDes $Des } } else { set LesDes [LesLignesDuFichier $FichierDescriptif] } foreach Descriptif $LesDes { set BeauDes [MiseEnPageDuDescriptif $Descriptif $LesClefs] lappend LesBeauxDes $BeauDes } if {[info exists TmpMSF] && [file exists $TmpMSF]} { file delete -force $TmpMSF } if { $QuoiRetourner == "PourGif" } { return [join $LesBeauxDes "\n"] } elseif { $QuoiRetourner == "LaListe" } { return $LesBeauxDes } else { return [AfficheVariable [join $LesBeauxDes "\n"] "GrandeLargeurAvecAligneurs" $NomOrigine] } } proc AfficheLesDescriptifsDuMSF {NomOuFichier} { global LesDescriptifs set Nom [file tail $NomOuFichier] if {[regexp "/" $NomOuFichier] && [file exists $NomOuFichier]} { set Fichier $NomOuFichier } else { set Fichier "[RepertoireDuGenome]/msf/$Nom" } if { ! [file exists $Fichier]} { return "" } set MSFdesCopains [expr [OnTraiteUneCollection] && [YaPABdans $Nom]] set LesAccess {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "//" $Ligne]} { break } if { ! [regexp "Name\:" $Ligne]} { continue } scan $Ligne "%s %s" Name Access if {[info exists LesDescriptifs($Access)]} { continue } lappend LesAccess $Access } if {$LesAccess!={} && ! $MSFdesCopains} { PrepareLesSequencesDesBanques $LesAccess $LesAccess } set AuMoinsUneDescription 0 foreach Access $LesAccess { if {[info exists LesDescriptifs($Access)]} { set Descriptif [set LesDescriptifs($Access)] } else { if {0 && $MSFdesCopains} { set LesLignesEMBL [split [CoCherche "embl" $Nom $Access] "\n"] } else { set LesLignesEMBL [LaSequenceDesBanques $Access $Access AccessOK "OnVeutEMBL"] } if {$LesLignesEMBL=={} } { lappend Liste "$Access (no description)" continue } DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX set Descriptif "$Access OS:$OS GN:$GN DE:$DE ID:$ID AC:$AC OC:$OC OX: $OX" set LesDescriptifs($Access) $Descriptif } lappend Liste [MiseEnPageDuDescriptif $Descriptif] set AuMoinsUneDescription 1 } if { ! $AuMoinsUneDescription || ! [info exists Liste]} { return "" } return [AfficheVariable [join $Liste "\n"] "AvecAligneurs" $Fichier] } proc AfficheLesFichiers {Selection {Maniere ""}} { set Dernier "" foreach Ligne [split $Selection "\n"] { foreach Fichier [split $Ligne " "] { if {[FileAbsent $Fichier]} {continue} set Dernier [AfficheFichier $Fichier $Maniere] } } return $Dernier } proc AfficheLesFichiersApresSplit {Selection {Maniere ""}} { FaireLire "AfficheLesFichiersApresSplit obsolete, use AfficheLesFichiers" return [AfficheLesFichiers $Selection $Maniere] } proc AfficheLesFragmentsDeMutation {Nom} { set LesFragments [CombineLesFragments $Nom "MutationFragments"] Espionne $LesFragments while {[OuiOuNon "Do we continue to combine these fragments ?"]} { set LesFragments [CombineLesFragments $Nom $LesFragments] } return $LesFragments } proc AfficheLesGenes {K} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id] set Chro [lindex $MesTags 0] set Deb [lindex $MesTags 1] set Fin [lindex $MesTags 2] set Nom [lindex $MesTags 3] set Brin [lindex $MesTags 4] set Debcds [lindex $MesTags 5] set Fincds [lindex $MesTags 6] set NbExons [lindex $MesTags 7] set ExonStarts [lindex $MesTags 8] set ExonEnds [lindex $MesTags 9] set ProtID [lindex $MesTags 10] set DefProt [lindex $MesTags [expr [llength $MesTags] -3]] set Texte "$Nom\n$Chro\nFrom: $Deb\nTo: $Fin\nStrand: $Brin\nStart_cds: $Debcds\nEnd_cds: $Fincds\nNbExons: $NbExons\nProtein_ID: $ProtID\nDef: $DefProt" ac_AfficheVariable "$Texte" "" "Summary" return "$Texte" } proc AfficheLesInfosDeMaSequence {PAB} { Wup "Montre les regions interessantes" set Indice [file tail $PAB] regsub -all {\.} $Indice "" Indice set w ".lesinfosdemaseq$Indice" if {[winfo exists $w]} {wm deiconify $w;raise $w;return ""} else {toplevel $w} wm geometry $w +300+100 wm title $w "Information for $PAB" wm resizable $w false false set FInfo "$w.frameinfo" frame $FInfo -borderwidth "3" -relief "groove" pack $FInfo -fill both -expand true #Attention il faut une query, sinon pas de taille .... set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set Repnuctfa "[RepertoireDuGenome]/nuctfa" set FichierQuery $PAB if {[regexp {/} $PAB]} {set PAB [file tail $PAB]} if { [file exists $FichierQuery]} { set FichierQuery $FichierQuery } elseif {[file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else {Espionne "No Input File for the Query ($PAB)";destroy $w;return ""} set Police {-family "arial" -size 12 -weight bold} set CouleurOutline "black" set LargeurMax [expr [winfo screenwidth .] * 2/3] set HauteurMax [expr [winfo screenheight .] * 1/2] set LargeurFenetre [expr [winfo screenwidth .] * 2/3] set HauteurFenetre [expr [winfo screenheight .] * 1/2] set XMilieu [expr $LargeurMax/2] set BordureX 50.0 set BordureY 50.0 set Intervalle 10.0 set EpaisseurBoite 15.0 #Position du Graph content set YDebutGraph [expr 0 + $BordureY] set YFinGraph [expr $YDebutGraph + 100] #Position de la query set XDebutQuery [expr 0 + $BordureX] set YDebutQuery [expr $YFinGraph + 10] set XFinQuery [expr $LargeurMax - $BordureX] set YFinQuery [expr $YDebutQuery + $EpaisseurBoite] #Besoin de la taille de la query pour conversion et affichage set AccessQuery [AccessDuTFADumRNA $FichierQuery] set SeqQuery [QueLaSequenceDuFichierTFA $FichierQuery] if {$SeqQuery==""} {Espionne "$FichierQuery no sequence available";return ""} set TailleQueryNt [string length $SeqQuery] #Rapport du nombre de pixel pour un nt set OneNtPixel [expr ($XFinQuery-$XDebutQuery)/($TailleQueryNt - 1)] #Debut des Oligos set YDebutDeOligo [expr $YFinQuery + $Intervalle] set K "$FInfo.canvas" canvas $K -width $LargeurFenetre -height $HauteurFenetre $K configure -height $YDebutDeOligo $K configure -background "grey" SauveLesInfosDe $K MonPAB $PAB #On modifie le comportement lors de la destruction de la fenetre principale #Ceci pour vider les infos stockees wm protocol $w WM_DELETE_WINDOW "DetruitLesInfosDe $K;after 10 destroy $w" #Le Masque pour les graphes $K create rectangle [expr $XDebutQuery-40] [expr $YDebutGraph-4] [expr $XFinQuery+40] [expr $YFinGraph+4] -fill "gray97" -outline "gray97" -tags [list "" "Masque"] #Affiche la petite aide $K create oval [expr $XDebutQuery-30] [expr $YDebutGraph-30] [expr $XDebutQuery-10] [expr $YDebutGraph-10] -fill "green" -outline "white" $K create text [expr $XDebutQuery-20] [expr $YDebutGraph-20] -text "?" -tags [list "" "[AfficheHelpInfoDeMaSequence]" "Affichable"] -anchor "center" #Affichage du Tm content #On recupere la methode de Tm par defaut choisie et on la remet apres set TmDefault [LesParametresDuDesign TmMethod "LaValeurMerci"] LesParametresDuDesign TmMethod "NearestNeighbor" "Positionne" set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange" "TmNN" } LesParametresDuDesign TmMethod $TmDefault "Positionne" #Affichage du GC content set GCResults [PosEtGCDeLaRegion $SeqQuery $TailleQueryNt] if {$GCResults !=""} { AfficheLeSpectreGCDUneListe $K $GCResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel } #Affiche la query $K create rectangle $XDebutQuery $YDebutQuery $XFinQuery $YFinQuery -outline "$CouleurOutline" -fill "red" -tags "Query" $K create text [expr $XDebutQuery-5.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "1" -font "$Police" -anchor "e" $K create text [expr $XFinQuery +5.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "$TailleQueryNt" -font "$Police" -anchor "w" $K create text $XMilieu [expr 1*$BordureY/3] -text "Sequence Informations from $PAB" -font "$Police" -anchor "center" -justify "center" #La fiche contenant les infos set FicheInfo "" set Text "$FInfo.text" set ListBoxSBH "$FInfo.xscroll" set ListBoxSBV "$FInfo.yscroll" scrollbar $ListBoxSBH -orient "horizontal" -command "$Text xview" scrollbar $ListBoxSBV -orient "vertical" -command "$Text yview" text $Text -state "disabled" -wrap "word" -font "courier 10" -xscrollcommand "$ListBoxSBH set" -yscrollcommand "$ListBoxSBV set" set FicheInfo [LesInfosDeBaseDeMaSequence $SeqQuery] foreach element [split $FicheInfo "\n"] { $Text configure -state normal $Text insert "end" "$element\n" $Text configure -state disabled } #Les boutons set ButtonFrame "$FInfo.buttonframe" set ActionButton "$ButtonFrame.button1" set DestroyButton "$ButtonFrame.button2" set LCharpente1 "$ButtonFrame.lcharpente1" set LCharpente2 "$ButtonFrame.lcharpente2" set ZoneButton1 "$ButtonFrame.zbutton1" set ZoneButton2 "$ButtonFrame.zbutton2" #set ZoneButton3 "$ButtonFrame.zbutton3" frame $ButtonFrame -borderwidth "3" -relief "groove" button $ActionButton -background "yellow" -text "Graph Panel / Add / Delete" bind $ActionButton <1> "Graph_Panel $K" bind $ActionButton <2> "AjouteUnGraph $K $FichierQuery $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel" bind $ActionButton <3> "SupprimeUnGraph $K" set Texte [format "%-10s" "Panel to change graph display (order,color)"] append Texte [format "\n%-10s" "Allow to add or delete graph"] append Texte [format "\n%-10s" "Allow to search items in oligo display text"] set_balloon $ActionButton "$Texte" button $DestroyButton -background "red" -text "Close / Help" -command "eval \[wm protocol $w WM_DELETE_WINDOW\]" bind $DestroyButton <2> "AfficheHelpInfoDeMaSequence DuBouton" button $ZoneButton1 -background "green" -text "Area(s) Draw / Clear / Save" bind $ZoneButton1 <1> "MontreLesZones $K $XDebutQuery $XFinQuery $YDebutGraph $OneNtPixel" bind $ZoneButton1 <2> "ClearLesZones $K" bind $ZoneButton1 <3> "SauveLesZones $K" set Texte [format "%-10s" "Allow to show (defined), clear or save designing area(s)"] set_balloon $ZoneButton1 "$Texte" button $ZoneButton2 -background "green" -text "Reset for $PAB / all" bind $ZoneButton2 <1> "ResetLesZones $K" bind $ZoneButton2 <2> "ResetAllLesZones $K" set Texte [format "%-10s" "Allow to clear saved design areas"] set_balloon $ZoneButton2 "$Texte" #button $ZoneButton3 -background "yellow" -text "Zoom In / Out / Reset" # bind $ZoneButton3 <1> "zoom $K 1.25 1.25" # bind $ZoneButton3 <2> "zoom $K 0.8 0.8" # bind $ZoneButton3 <3> "ResetZoom $K" label $LCharpente1 -background "#808FFF" -relief "groove" label $LCharpente2 -background "#808FFF" -relief "groove" pack $K -fill both -side top pack $ButtonFrame -fill both -side top -expand true pack $LCharpente1 -fill both -side left -expand true pack $DestroyButton -fill y -side left #pack $ZoneButton3 -fill y -side left pack $ActionButton -fill y -side left pack $ZoneButton1 -fill y -side left pack $ZoneButton2 -fill y -side left pack $LCharpente2 -fill both -side left -expand true pack $ListBoxSBV -fill y -side right pack $Text -fill both -expand true pack $ListBoxSBH -fill x -side bottom $K bind "Affichable" "AfficheInfoBulle $K %x %y Enter" $K bind "Affichable" "AfficheInfoBulle $K %x %y Leave" $K bind "Query" <2> "AfficheFetch $AccessQuery OnVeutNature" $K bind "Query" <3> "AfficheLaQuery $K $FichierQuery" bind $K "PositionneLesZones $K %x %y $XDebutQuery $XFinQuery $YDebutGraph $OneNtPixel" bind $K "ViseurDeSeq $K %x %y $XDebutQuery $XFinQuery $YDebutGraph $YFinQuery $OneNtPixel" bind $K "ViseurDeSeq $K %x %y $XDebutQuery $XFinQuery $YDebutGraph $YFinQuery $OneNtPixel" return "" } proc AfficheLesInfosDuCluster {} { set ClusterOuNom [Entre "ClusterOuNom: "] if {[regexp "^ClusterOuNom:" $ClusterOuNom]} { regsub "^ClusterOuNom: " $ClusterOuNom "" ClusterOuNom } scan $ClusterOuNom "%s" ClusterOuNom Espionne "Question $ClusterOuNom" set Fen [AfficheVariable [LesInfosDuCluster $ClusterOuNom] "" "Les Info de $ClusterOuNom"] return $Fen } proc AfficheLesMembresDeLaFamille {Nom} { set MembresDeLaFamille [LesMembresDeLaFamille $Nom] set Texte [join $MembresDeLaFamille "\n"] set Fen [AfficheVariable $Texte "AvecRien" "${Nom}Les Membres de sa Famille"] #Jean a rajoute set B [BoutonneLaFenetre $Fen "X-HDA Sel/Sort\nAll/Sort\nInfo Cluster//DpcShow"] #set B [BoutonneLaFenetre $Fen "Show X-HDA sel/all"] bind $B <1> "CreeEtAfficheUnBilanHDACroises \[selection get\]" bind $B <2> "CreeEtAfficheUnBilanHDACroises \[selection get\] AvecTri" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\]" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\] AvecTri" bind $B "AfficheLesInfosDuCluster" bind $B "DpcShow" $B configure -background "green" return $Fen } proc AfficheLesOligo {K} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id] set Chro [lindex $MesTags 0] set Deb [lindex $MesTags 1] set Fin [lindex $MesTags 2] set Nom [lindex $MesTags 3] set Id [lindex $MesTags 4] set Access [lindex $MesTags 5] set GN [lindex $MesTags 6] set Des [lindex $MesTags 7] set Texte "$Nom\n$Chro\nFrom $Deb\nTo $Fin\nName: $Nom\nID: $Id\nAccessions: $Access\nGeneName: $GN\nDescription: $Des" ac_AfficheVariable "$Texte" "" "Summary" return "$Texte" } proc AfficheLesOrthologuesFamiliersDuBlastP {Nom} { set LesOF [LesOrthologuesFamiliersDuBlastP $Nom] return [AfficheVariable [join $LesOF "\n"] "AvecRien" $Nom] } proc AfficheLesPartsDeCamembert {K X Y Action} { set H [winfo screenheight .] set L [winfo screenwidth .] regsub ".canvas" $K ".message" M catch {destroy $M} if {$Action=="Leave"} { return "" } set Id [$K find withtag current] set MesTags [$K gettags $Id] set PetiteLegende [lindex $MesTags 1] set GrandeLegende [lindex $MesTags 2] if {$GrandeLegende != ""} {set Texte $GrandeLegende} else {set Texte $PetiteLegende} return [AfficheVariable $Texte] } proc AfficheLesPoints {} { global LongueurTotale LNDG SDG NomTextSeq LesPointsDuGroupe Couleurs set NbrGrp [expr {[llength $LNDG] - 2}] if {$NbrGrp <= 1} {return} $NomTextSeq configure -state normal $NomTextSeq tag configure PtBack -background LightGray set Idx 1 set ng 1 set NbrSeq 0 set IdxGrp 1 foreach NmGrp $LNDG { if {$NmGrp eq "GroupeToutLeMonde"} {continue} if {$NmGrp eq "bidon"} {continue} if {$NmGrp eq "grise"} {continue} set col [RGBDeLaCouleur [CouleurDuGroupe $IdxGrp]] $NomTextSeq tag configure Pt$NmGrp -foreground $col -background LightGray set y [expr {$Idx+$NbrSeq+($ng-1)*2}] # $NomTextSeq delete $y.0 "$y.0 lineend - 1c" $NomTextSeq delete $y.0 "$y.0 lineend" $NomTextSeq insert $y.0 [set LesPointsDuGroupe($NmGrp)] $NomTextSeq tag add PtBack $y.0 "$y.0 lineend" set Li [regexp -all -indices -inline {\*} [set LesPointsDuGroupe($NmGrp)]] foreach c $Li { lassign $c d f $NomTextSeq tag add Pt$NmGrp $y.$d } set NbrSeq [expr {$NbrSeq + [llength [set SDG($NmGrp)]]}] incr ng incr IdxGrp } $NomTextSeq configure -state disabled return } proc AfficheLesProcs {{LesQuelles ""} {Liste ""}} { Wup "Shows the names and args of all Procs" Gs "Frame" if { ! [PourWscope] && ! [AutorisationPourPsy] } { return "" } set WithRef [PourWscope] set LesBonnes {} foreach Procedure [LesProceduresExistantes] { set Args [info args $Procedure] #AAAAAAAAAAAAAAAAAAAAAAAAAAFFFFFFFFFFFFFFFFFIIIIIIIIIIIIIIIIIINNNNNNNNNNNNNNNNNNNIIIIIIIIIIIIIRRR set MotProc $Procedure # if {$WithRef} { set MotProc " "/Ppcr" "AfficheRec1 \[selection get\] Ppcr" TouchePour <3> "/Vect" "AfficheRec1 \[selection get\] Vecteur" return $Fen } proc AfficheLesRec2 {{UnRec ""}} { if {$UnRec==""} { set Liste [Rec2 LaListeDes Rec2] } else { set Liste [list $UnRec] } set LaPage {} foreach R $Liste { lappend LaPage "[format %-27s $R] Rec2 in [Rec2 $R Vecteur] of [Rec2 $R R1] Rec1 [Rec2 $R Rec1Description]" } set Page [join $LaPage "\n"] set Fen [AfficheVariable $Page "AvecRec2" ListOfRec2] if {$Fen==""} { return "" } set Clavier "$Fen.buttons" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "magenta" TouchePour $Clavier "It's File" "AfficheRec2 \[selection get\] Fichier" TouchePour <2> "/Rec1" "AfficheRec2 \[selection get\] Rec1" TouchePour <3> "/Vector" "AfficheRec2 \[selection get\] Vecteur" return $Fen } proc AfficheLesSortiesBlast {Selection} { foreach NomDuFichierBlast [split $Selection "\n"] { AfficheUneSortieBlast $NomDuFichierBlast } } proc AfficheLesSortiesDuBallast {FichierBlastP {Quoi rsf}} { regsub {/co[a-z]+/} $FichierBlastP "/coballast/" FichiersBallast regsub -nocase {\.[a-z_]*$} $FichiersBallast "" FichiersBallast set Fichier "$FichiersBallast.$Quoi" Espionne $Fichier if { ! [file exists $Fichier]} { return "" } return [AfficheFichier $Fichier "Avec$Quoi"] } proc AfficheLesSourcesDeGscope {{PathType ""} {AvecMain ""} {WithoutOrdali ""}} { set LesSourcesDeGscope [LesSourcesDeGscope $PathType $AvecMain] set Page [join $LesSourcesDeGscope "\n"] set Fen [AfficheVariable $Page "AvecShowFile" "LesSourcesDeGscope_$PathType"] set B [BoutonneLaFenetre $Fen "Path exact/abs/rel" ""] bind $B <1> "AfficheLesSourcesDeGscope Exact $AvecMain" bind $B <2> "AfficheLesSourcesDeGscope Absolute $AvecMain" bind $B <3> "AfficheLesSourcesDeGscope Relativ $AvecMain" $B configure -background "green" } 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 AfficheLesStructuresSecondairesDeLActin {} { Wup "Article ARP permet d afficher la numerotation des elements de structures secondaires et leur positions" set NbHelix [LePCIDuResidu Helix Number] for {set i 1} {$i<=$NbHelix} {incr i} { set D [LePCIDuResidu Helix $i Reference Debut] set F [LePCIDuResidu Helix $i Reference Fin] Espionne "H${i} ${D}-${F}" } set NbSheet [LePCIDuResidu Sheet Number] for {set i 1} {$i<=$NbSheet} {incr i} { set D [LePCIDuResidu Sheet $i Reference Debut] set F [LePCIDuResidu Sheet $i Reference Fin] Espionne "S${i} ${D}-${F}" } return "" } proc AfficheLesmiRNAs {K} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id] set Chro [lindex $MesTags 0] set Deb [lindex $MesTags 1] set Fin [lindex $MesTags 2] set Nom [lindex $MesTags 3] set Texte "$Nom\n$Chro\nFrom $Deb\nTo $Fin" ac_AfficheVariable "$Texte" "" "Summary" return "$Texte" } proc AfficheListe {Liste {Maniere ""} {NomDuFichierOrigine ""}} { return [Affiche [join $Liste "\n"] $Maniere $NomDuFichierOrigine] } proc AfficheLogDesMSF {Selection} { foreach MSF [split $Selection "\n"] { AfficheLogDuMSF $MSF } } proc AfficheLogDuMSF {MSF} { global LogDuMSF if {[info exists LogDuMSF($MSF)]} { set Log [set LogDuMSF($MSF)] } else { regsub {.out} $MSF {.log} logmsf regsub {.msf$} $logmsf {} Log } if {[info exists Log]} { AfficheFichier $Log "AvecRien" } } proc AfficheMapping {FichierBlast {BanquesId ""} {SensGeneralDeS ""} {ExpectDeRef ""} {TailleMaxDesRAS NoCompress}} { global RepertoireDuGenome set Repertoire [RepertoireDeTravail] if {$ExpectDeRef == "" } {set ExpectDeRef "100"} if {![file exists $FichierBlast]} {return "toto"} set FichierTFA "" if {[EstUnPAB [file tail $FichierBlast]]} { set Nom [file tail $FichierBlast] set Dir [file dirname $FichierBlast] if {$Dir == "."} {set Dir [pwd]} set DirDuRepertoireDuGenome [lindex [split $Dir "/"] end] if {[regexp "^blastn|^blastx" $DirDuRepertoireDuGenome]} { set FichierTFA "$RepertoireDuGenome/nucmask/$Nom" if {![file exists $FichierTFA]} { set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" } } elseif {[regexp "^blastp|^tblastn" $DirDuRepertoireDuGenome]} { if {[file exists "$RepertoireDuGenome/genscanpredictions/$Nom"]} { set FichierTFA "$RepertoireDuGenome/genscanpredictions/$Nom" } else { set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" } } elseif {[regexp "^mrnablast" $DirDuRepertoireDuGenome]} { set FichierTFA "$RepertoireDuGenome/mrnahuman/$Nom" } } if {![file exists $FichierTFA]} {set FichierTFA ""} set LargeurMax [expr [winfo screenwidth .] - 200] set HauteurMax [expr [winfo screenheight .]*3/4] set LargeurFenetre [expr [winfo screenwidth .] - 200] set HauteurFenetre [expr [winfo screenheight .]*3/4] set HBox 25.0 set HSmallBox 10.0 set BordY 50.0 set BordX 125.0 set EcartY 1.0 set CentreX [expr $LargeurMax/2] set PosYEnteteDeQ 8 set PosYEnteteDeS [expr $HauteurMax - $PosYEnteteDeQ] set Police "Courier 10" set YNomQuery [expr $BordY*2/3] set YTypeDeBlast [expr $BordY/4] set TailleMaxNomQuery 100 set XTexteGauche [expr $BordX/2] set XTexteDroite [expr $LargeurMax - $BordX/2] set YTailleQ [expr $BordY + $HBox/2] set YTailleS [expr $HauteurMax - $BordY - $HBox/2] set LesBanquesId [split $BanquesId "\n"] if {$BanquesId==""} {set BId [set tab(1)];set LesBanquesId [list "$BId"]} DepouilleLeBlast tab $FichierBlast "" "" $LesBanquesId set Database [set tab(Database) ] set TypeDeBlast [set tab(TypeDeBlast)] set TypeDeBlast "$TypeDeBlast: $Database" set NomQuery [set tab(Query)] if {$TailleMaxNomQuery < [string length $NomQuery]} { set PetitNomQuery [string range $NomQuery 0 $TailleMaxNomQuery] append PetitNomQuery "..." } else { set PetitNomQuery $NomQuery } if {$TailleMaxDesRAS == ""} { set TailleMaxDesRAS 500 } elseif {$TailleMaxDesRAS == "NoCompress"} { set TailleMaxDesRAS "1e200" } else { if {![EstCeUnNombre $TailleMaxDesRAS]} { set TailleMaxDesRAS "500" } } foreach BanqueId $LesBanquesId { scan $BanqueId "%s" BanqueId set ToutesLesRegions [ToutesLesRegionsDeLaQuery tab $FichierBlast $BanqueId $FichierTFA] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] $K configure -background white if {[lindex [lindex $ToutesLesRegions 0] 5] != ""} { set PresenceDUnSubject 1 } else { set PresenceDUnSubject 0 } set TailleQ [lindex [lindex $ToutesLesRegions 0] 2] set TailleS [lindex [lindex $ToutesLesRegions 0] 5] set TailleReduiteS $TailleS set TailleReduiteQ $TailleQ set LesRegionsDeLaQuery {} set LesRegionsDuSubject {} set LesRegionsAvecLesDeux {} set CalculSensS 0 foreach UneRegion $ToutesLesRegions { set DebutQ [lindex $UneRegion 0] set FinQ [lindex $UneRegion 1] set DebutS [lindex $UneRegion 3] set FinS [lindex $UneRegion 4] set TypeRegion [lindex $UneRegion 6] set Sens [SensDeLaRegion $TypeRegion] if { $DebutS != "" && $FinS != ""} { set Diffs [expr $FinS - $DebutS + 1] if {$Sens == "+"} { set CalculSensS [expr $CalculSensS + $Diffs] } elseif {$Sens == "-"} { set CalculSensS [expr $CalculSensS + $Diffs] } } if {$DebutQ != "" && $FinQ != ""} { lappend LesRegionsDeLaQuery $UneRegion } if {$DebutS != "" && $FinS != ""} { lappend LesRegionsDuSubject $UneRegion } if {$DebutS != "" && $FinS != "" && $DebutQ != "" && $FinQ != ""} { lappend LesRegionsAvecLesDeux $UneRegion } if { $DebutS != "" && $FinS != "" && $TypeRegion == "RAS"} { set DiffS [expr $FinS - $DebutS + 1] if {$TailleMaxDesRAS<$DiffS} { set TailleReduiteS [expr $TailleReduiteS - $DiffS + $TailleMaxDesRAS] } } elseif {$DebutQ != "" && $FinQ != "" && $TypeRegion == "RAS"} { set DiffQ [expr $FinQ - $DebutQ + 1] if {$TailleMaxDesRAS<$DiffQ} { set TailleReduiteQ [expr $TailleReduiteQ - $DiffQ + $TailleMaxDesRAS] } } } if {$SensGeneralDeS == ""} { if {$CalculSensS < 0} { set SensGeneralDeS "-" } else { set SensGeneralDeS "+" } } #########QUERY############################## #########QUERY############################## set OldXDebutQ "" set OldXFinQ "" set OldYDebutQ "" set OldYFinQ "" set RapportQ [expr ($LargeurMax - 2 * $BordX) / $TailleReduiteQ] set ModifTailleQ 0 set LesRegionsOccupees {} foreach Region $LesRegionsDeLaQuery { ######### COLORING######################## set ColorOutLine "white" set TypeRegion [lindex $Region 6] if {$TypeRegion == "" && [regexp "BLASTP" $TypeDeBlast]} { set TypeRegion "Prot / Prot" } set Sens [SensDeLaRegion $TypeRegion] set ColorFill [ColoriageDuMapping $TypeRegion] #########QUERY############################## if {[lindex $Region 0] == "" || [lindex $Region 1] == ""} {continue} set DebutQ [lindex $Region 0] set FinQ [lindex $Region 1] if {$DebutQ == $FinQ} { set XDebutQ [expr $BordX + ($DebutQ - 0.5 - $ModifTailleQ) * $RapportQ ] set XFinQ [expr $BordX + ($FinQ + 0.5 - $ModifTailleQ) * $RapportQ ] } else { set XDebutQ [expr $BordX + ($DebutQ - $ModifTailleQ) * $RapportQ ] set XFinQ [expr $BordX + ($FinQ - $ModifTailleQ) * $RapportQ ] } if {$TypeRegion == "RAS"} { set DiffQ [expr $FinQ - $DebutQ + 1] if {$DiffQ > $TailleMaxDesRAS} { set ColorFill "darkgrey" set XFinQ [expr $BordX + ([lindex $Region 0] - $ModifTailleQ + $TailleMaxDesRAS) * $RapportQ ] set ModifTailleQ [expr $ModifTailleQ + $DiffQ - $TailleMaxDesRAS] } } set NbRecouvrement [RecouvrementDeLaRegion $DebutQ $FinQ $LesRegionsOccupees "Etendre"] if {$NbRecouvrement >= 40} {set NbRecouvrement 40} if {$NbRecouvrement == 0} { set YDebutQ $BordY set YFinQ [expr $YDebutQ + $HBox] } else { set YDebutQ [expr $BordY + $HBox + ($NbRecouvrement * $EcartY) + ($NbRecouvrement-1) * $HSmallBox] set YFinQ [expr $YDebutQ + $HSmallBox] } set LesCoordonnees [list "$XDebutQ" "$XFinQ" "$YDebutQ" "$YFinQ" "$ColorFill"] set TabQ($DebutQ,$FinQ) $LesCoordonnees set LeDebutEtLaFin [list "$DebutQ" "$FinQ"] lappend LesRegionsOccupees $LeDebutEtLaFin } set LesRegionsDuSubject [lsort -increasing -integer -index 3 [lsort -decreasing -integer -index 4 $LesRegionsDuSubject]] #######SUBJECT############################### #######SUBJECT############################### if {[lindex [lindex $ToutesLesRegions 0] 5]!= ""} { set RapportS [expr ($LargeurMax - 2 * $BordX) / $TailleReduiteS] set YFinS [expr $HauteurMax - $BordY] set YDebutS [expr $YFinS - $HBox] } set ModifTailleS 0 set ModifTailleQ 0 foreach Region $LesRegionsDuSubject { ######### COLORING######################## set ColorOutLine "white" set TypeRegion [lindex $Region 6] if {$TypeRegion == "" && [regexp "BLASTP" $TypeDeBlast]} { set TypeRegion "Prot / Prot" } set ColorFill [ColoriageDuMapping $TypeRegion] #######SUBJECT############################### if {[lindex $Region 3] == "" || [lindex $Region 4] == ""} {continue} set DebutS [lindex $Region 3] set FinS [lindex $Region 4] set XDebutS [expr $BordX + ($DebutS - $ModifTailleS) * $RapportS ] set XFinS [expr $BordX + ($FinS - $ModifTailleS) * $RapportS ] if {$TypeRegion == "RAS"} { set DiffS [expr $FinS - $DebutS + 1] if {$DiffS > $TailleMaxDesRAS} { set ColorFill "darkgrey" set XFinS [expr $BordX + ($DebutS - $ModifTailleS + $TailleMaxDesRAS) * $RapportS ] set ModifTailleS [expr $ModifTailleS + $DiffS - $TailleMaxDesRAS] } } set LesCoordonnees [list "$XDebutS" "$XFinS" "$YDebutS" "$YFinS" "$ColorFill"] set TabS($DebutS,$FinS) $LesCoordonnees } $K create text $CentreX $YTypeDeBlast -text "$TypeDeBlast" -font "$Police" $K create text $CentreX $YNomQuery -text "$PetitNomQuery" -font "$Police" $K create text $XTexteGauche $YTailleQ -text "1" -font "$Police" $K create text $XTexteDroite $YTailleQ -text "$TailleQ" -font "$Police" if {$PresenceDUnSubject} { $K create text $CentreX [expr $HauteurMax - $YNomQuery] -text "$BanqueId" -font "$Police" if {$SensGeneralDeS == "+"} { $K create text $XTexteGauche $YTailleS -text "1" -font "$Police" -anchor w $K create text $XTexteDroite $YTailleS -text "$TailleS" -font "$Police" -anchor e } else { $K create text $XTexteDroite $YTailleS -text "1" -font "$Police" -anchor e $K create text $XTexteGauche $YTailleS -text "$TailleS" -font "$Police" -anchor w } } foreach UneRegion $ToutesLesRegions { set XDebutQ "" set XFinQ "" set XDebutS "" set XFinS "" set DebutQ [lindex $UneRegion 0] set FinQ [lindex $UneRegion 1] set DebutS [lindex $UneRegion 3] set FinS [lindex $UneRegion 4] set TypeRegion [lindex $UneRegion 5] set Sens [SensDeLaRegion $TypeRegion] if { $DebutQ != "" && $FinQ != "" && $DebutS == "" && $FinS == "" } { set LesCoordonnees [set TabQ($DebutQ,$FinQ)] set XDebutQ [lindex $LesCoordonnees 0] set XFinQ [lindex $LesCoordonnees 1] set YDebutQ [lindex $LesCoordonnees 2] set YFinQ [lindex $LesCoordonnees 3] set ColorFill [lindex $LesCoordonnees 4] $K create rectangle $XDebutQ $YDebutQ $XFinQ $YFinQ -outline $ColorOutLine -fill $ColorFill } elseif {$DebutS != "" && $FinS != "" && $DebutQ == "" && $FinQ == "" } { set LesCoordonnees [set TabS($DebutS,$FinS)] if {$SensGeneralDeS == "+"} { set XDebutS [lindex $LesCoordonnees 0] set XFinS [lindex $LesCoordonnees 1] } else { set XDebutS [expr $LargeurMax - [lindex $LesCoordonnees 0]] set XFinS [expr $LargeurMax - [lindex $LesCoordonnees 1]] } set YDebutS [lindex $LesCoordonnees 2] set YFinS [lindex $LesCoordonnees 3] set ColorFill [lindex $LesCoordonnees 4] $K create rectangle $XDebutS $YDebutS $XFinS $YFinS -outline $ColorOutLine -fill $ColorFill } elseif {$DebutS != "" && $FinS != "" && $DebutQ != "" && $FinQ != "" } { set LesCoordonnees [set TabQ($DebutQ,$FinQ)] set XDebutQ [lindex $LesCoordonnees 0] set XFinQ [lindex $LesCoordonnees 1] set YDebutQ [lindex $LesCoordonnees 2] set YFinQ [lindex $LesCoordonnees 3] set ColorFill [lindex $LesCoordonnees 4] set LesCoordonnees [set TabS($DebutS,$FinS)] set YDebutS [lindex $LesCoordonnees 2] set YFinS [lindex $LesCoordonnees 3] if {$SensGeneralDeS == "+"} { set XDebutS [lindex $LesCoordonnees 0] set XFinS [lindex $LesCoordonnees 1] } else { set XDebutS [expr $LargeurMax - [lindex $LesCoordonnees 0]] set XFinS [expr $LargeurMax - [lindex $LesCoordonnees 1]] } set ColorFill [lindex $LesCoordonnees 4] $K create rectangle $XDebutQ $YDebutQ $XFinQ $YFinQ -outline $ColorOutLine -fill $ColorFill $K create rectangle $XDebutS $YDebutS $XFinS $YFinS -outline $ColorOutLine -fill $ColorFill $K create line $XDebutQ $YFinQ $XDebutS $YDebutS -fill $ColorFill $K create line $XFinQ $YFinQ $XFinS $YDebutS -fill $ColorFill } } regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "Show Blast/Subject/Fetch\nMosaic"] bind $B <1> "AfficheFichier $FichierBlast AvecSegAlignementAvecAligneurs" bind $B <2> "AfficheLesAliEnPage \[ContenuDuFichier $FichierBlast\] $BanqueId $FichierBlast" bind $B <3> "AfficheFetch $BanqueId OnVeutNature" bind $B "IllustreLeBlast $FichierBlast" set C [BoutonneLaFenetre $w "Color" "CouleursDesBoites"] set S [BoutonneLaFenetre $w "Direction + / - / Default\n Compression Default / x / None"] bind $S <1> "AfficheMapping $FichierBlast $BanqueId + $ExpectDeRef $TailleMaxDesRAS" bind $S <2> "AfficheMapping $FichierBlast $BanqueId - $ExpectDeRef $TailleMaxDesRAS" bind $S <3> "AfficheMapping $FichierBlast $BanqueId \"\" $ExpectDeRef $TailleMaxDesRAS" bind $S "AfficheMapping $FichierBlast $BanqueId $SensGeneralDeS $ExpectDeRef \"\"" bind $S "AfficheMapping $FichierBlast $BanqueId $SensGeneralDeS $ExpectDeRef \[Entre\]" bind $S "AfficheMapping $FichierBlast $BanqueId $SensGeneralDeS $ExpectDeRef NoCompress" } return $K } proc AfficheMedline {Selection} { Wup "Calls Jean-Marie Wurtz's program to fetch medline's http file." foreach Ligne [split $Selection "\n"] { catch {unset Uid} if {[regexp "^RX" $Ligne]} { catch {set Uid [IntegerApres "MEDLINE;" dans $Ligne]} } elseif {[regexp "PMID:" $Ligne]} { catch {set Uid [IntegerApres "PMID:" dans $Ligne]} } else { continue } if { ! [info exists Uid] || ! [regexp {^[0-9]+$} $Uid] } { continue } AfficheVariable [exec medhttp $Uid] "AvecRien" } } proc AfficheMesPABs {} { foreach PAB [ListeDesPABs] { Espionne "$PAB [Alias $PAB]" } } proc AfficheModeAnnotation {} { AfficheBoutonsAnnotation return } proc AfficheModeArbres {} { AfficheBoutonsArbres BindModeNormal return } proc AfficheModeCherche {{prevMode ""}} { AfficheBoutonsCherche $prevMode return } proc AfficheModeClusters {} { InitSeqsOut 0 AfficheBoutonsClusters return } proc AfficheModeConservation {} { AfficheBoutonsConservation return } proc AfficheModeFeateditor {} { array set ::Tori [array get ::TabSF] AfficheBoutonsFeateditor unset -nocomplain ::Tori return } proc AfficheModeFeatures {} { global LFeatCourantes if {! [info exists LFeatCourantes]} { set LFeatCourantes [list] } AfficheBoutonsFeatures return } proc AfficheModeOrdali {} { AfficheBoutonsOrdali BindModeNormal return } proc AfficheModePCI {} { AfficheBoutonsPCI BindModeNormal return } proc AfficheModeSeqlab {} { global NomTextSeq Toggle NomNOmSeq LesDefauts AffSS 1 CacheStrSecDansAlignement if {[set Toggle(Scores)]} { set Toggle(Scores) 0 ToggleScores } EmulationSeqLab BindModeSeqlab AfficheBoutonsSeqLab return } proc AfficheModeSuperposition {} { global ListePDB if {[TypeAli] eq "pasdali"} {return} # pas , ou 1 seul , pdb if {! [info exists ListePDB] || $ListePDB == {}} { FaireLire "No 3D structures in this alignment !" return } if {[llength $ListePDB] == 1} { set ::StrucAVoir $ListePDB VisualiseStructure } else { AfficheBoutonsSuperposition } BindModeNormal return } proc AfficheMoi {args} { set Pro [lindex $args 0] if { ! [HtmlAuthorize $Pro]} { Expe "Error from Gscope : $Pro isn't authorized" ; return "" } set Retour [eval $args] return [Html_DuTexteTelQuel $Retour] } proc AfficheMsfFamily {Nom} { global RepertoireDuGenome set Famille [NomDeFamille $Nom] if {$Famille=="UnknownFamily"} { return "" } set Fichier "$RepertoireDuGenome/msffamily/$Famille.msf" if { ! [file exists $Fichier]} { return "" } return [AfficheFichier $Fichier "GrandeLargeurAvecEtudeMSF"] } proc AfficheMsfOfFamiliarOrganisms {NomOrigine} { set Nom [file tail $NomOrigine] set FamMsf [MsfOfFamiliarOrganisms $Nom] if {$FamMsf==""} { return "" } return [AfficheVariable $FamMsf "AvecEtudeMSFGrandeLargeur" $NomOrigine] } proc AfficheNomsEtSeqs {} { global Defauts NomsAffiches LSOrdali NomNomSeq NomTextSeq TScrollY if {! [ModeI]} {return} set YPos [$TScrollY get] EffaceWNomsWSeqs $NomNomSeq configure -state normal $NomNomSeq tag configure PDB -foreground black -background red -underline 1 $NomNomSeq insert end [join $NomsAffiches "\n"] $NomNomSeq configure -state disabled if {[QuelMode] ne "seqlab"} { $NomTextSeq configure -state normal $NomTextSeq insert end [join $LSOrdali "\n"] $NomTextSeq configure -state disabled } $TScrollY set {*}$YPos return } proc AfficheNuc {Boite} { set Nom [Box $Boite nom] if { $Nom=="" } { return "" } set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] set SeqNuc [BoutADN $Debut $Fin $Orient] set NucTFA [SequenceFormatTFA $SeqNuc "$Nom $Debut $Fin $Orient" "nucbrut"] return [AfficheVariable $NucTFA "AvecBlasteAvecFormateAvecVoisinsSansFetch" $Nom] } proc AfficheORGAorgaDesMSFs {{Etat ""}} { foreach Nom [ListeDesPABs] { lappend LesORGAorga "$Nom [ORGAorgaDesMSFs $Nom $Etat]" } AfficheVariable [join $LesORGAorga "\n"] "AvecRien" "OrthologuesInCompleteGenomes" } proc AfficheObjet {w nom obj} { global pgl if {[$w cget -foreground] eq "green1"} { $nom ObjetOff $obj $w configure -foreground red } else { $nom ObjetOn $obj $w configure -foreground green1 } DefineLabels2Show set pgl(SelectionList) "" $pgl(wogl) postredisplay return } proc AfficheOperonsCommunsAuxClusters {} { set Fichier "[RepertoireDuGenome]/fiches/operons_communs" set Texte [ContenuDuFichier $Fichier] regsub -all "\t" $Texte " " Texte while {[regexp " " $Texte]} { regsub -all " " $Texte " " Texte } return [AfficheVariable $Texte "AvecOpCom" $Fichier] } proc AfficheOverview {} { global Ovw FrmBtnFea LNDG ListeTypesDeFeatures NomTextSeq # alignement vide if {[TypeAli] eq "pasdali"} {return} if {[QuelMode] eq "seqlab"} { FaireLire "Not available in Editor mode !" return } # configure features FaireAttendre "Please wait ...\nDrawing alignment overview ..." if {! [info exists Ovw]} { set Ovw(Groupes) $LNDG set Ovw(Liste) [list 1] set Id 1 } else { set Id [expr {[lindex [set Ovw(Liste)] end] + 1}] } MetAJourFeaturesOverview # define new overview set Ovw(O$Id,Feat) "automatic" set Ovw(O$Id,Mac) [MacCourant] set w ".overview$Id" toplevel $w wm title $w "Overview No $Id" wm iconname $w "Overview $Id" wm protocol $w WM_DELETE_WINDOW KillParLaCroix wm resizable $w 0 0 set Ovw(O$Id,w) "$w.c" canvas $w.c -height 300 -width 500 -background white pack $w.c -side top -expand 1 set wc "$w.c" frame $w.btn pack $w.btn -expand 1 -fill x -side bottom -padx 5 -pady 10 ttk::combobox $w.btn.combo -background white -state readonly -height 0 -textvariable Ovw(O$Id,Feat) -values $Ovw(LFeat) -width $Ovw(FeatWidth) $w.btn.combo index 0 bind $w.btn.combo <> "MetAJourDessinOverview $Id %W" pack $w.btn.combo -side left -expand 1 frame $w.btn.fpm button $w.btn.fpm.btm -text "-" -background cyan -command [list ChangeEchelleOverview $Id "moins"] button $w.btn.fpm.btp -text "+" -background cyan -command [list ChangeEchelleOverview $Id "plus"] pack $w.btn.fpm.btm $w.btn.fpm.btp -side left pack $w.btn.fpm -side left button $w.btn.btprt -text "Print" -background yellow -command [list PrintCanvas $wc png] pack $w.btn.btprt -side left -expand 1 button $w.btn.btclose -text "Close" -background green1 -command [list DetruitOverview $Id] pack $w.btn.btclose -side left -expand 1 # MesCouleurs $w CalculeOverview $Id if {[info exists FrmBtnFea] && [QuelMode] eq "feature"} { foreach c [winfo children $FrmBtnFea] { if {[EtatDuBouton $c]} { set f [lindex [$c cget -command] 1] DessineFeatureSurOverview $Id "" $f 1 } } } FaireLaSuite .wover trace add execution RepeintNomsEtSeqs leave MetAJourOverview trace add variable ListeTypesDeFeatures write MetAJourFeaturesOverview # position new window set h 0 foreach top [winfo children .] { if {[string first ".overview" $top] != 0} { continue } if {$top eq $w} { continue } incr h [winfo height $top] } wm geometry $w +0+$h update idletasks return $Id } proc AffichePDB {aPDB} { JeMeSignale set TextePDB [TextePDB $aPDB "Ref"] if {$TextePDB==""} { return "" } return [AfficheVariable $TextePDB "AvecPDB"] } proc AffichePeptideSort {Nom {Page ""} {ShowEnzymes ""}} { if {[EstUnPAB $Nom]} { set Texte [PeptideSort $Nom $ShowEnzymes] } elseif {$Page!=""} { set Texte [PeptideSort $Page $ShowEnzymes] } elseif {$Nom!=""} { set Texte [PeptideSort $Nom $ShowEnzymes] } else { return "" } if {$Texte==""} { return "" } scan $Nom "%s" Titre return [AfficheVariable $Texte "AvecRien" $Titre] } proc AffichePeptideSortPourLesFusions {{LesFiFu ""} {ChoixPourCoupure ""} {AvecAffichage ""}} { if {$AvecAffichage=="SansAffichage"} { set AvecAffichage 0 } else { set AvecAffichage 1 } if {$LesFiFu==""} { set LesFiFu [glob -nocomplain "[RepertoireDuGenome]/fusion/*.nuctfa"] set LesFiFu [ChoixDesPresents $LesFiFu] } if {$LesFiFu=="AllFusion"} { set LesFiFu [glob -nocomplain "[RepertoireDuGenome]/fusion/*.nuctfa"] } if {$LesFiFu==""} { return "" } if {[llength [split $ChoixPourCoupure " "]]==5} { set ChoixCoupure $ChoixPourCoupure } else { set ChoixCoupure [ChoixDUnSiteDeCoupure $ChoixPourCoupure] } set LongCoupP "" scan $ChoixCoupure "%s %s %d %s %d" Coupure CoupN LongCoupN CoupP LongCoupP # if {$LongCoupP==""} { return {} } foreach FiFu $LesFiFu { set Nom [file tail $FiFu] regsub ".nuctfa" $Nom "" Nom regsub ".prottfa" $FiFu ".nuctfa" FiFuN lappend LesNoms $Nom set SeqN [QueLaSequenceDuTFA $FiFuN] set SeqP [SeqNucToSeqPro $SeqN] set Zone(Seq) "Full" set LesVariablesSeq [list "Seq"] if {$Coupure!="SansCoupure"} { set iDebutCoupure [string first $CoupN [string toupper $SeqN]] set lastDebutCoupure [string last $CoupN [string toupper $SeqN]] if {$iDebutCoupure!=$lastDebutCoupure} { FaireLire "At least two sites for $Coupure are possible. \nI'll take the first one : $iDebutCoupure" } if {$iDebutCoupure>=0} { set GaucheSeqN [string range $SeqN 0 [expr $iDebutCoupure+$LongCoupN-1]] set DroiteSeqN [string range $SeqN [expr $iDebutCoupure+$LongCoupN] end] } set GaucheSeqP [SeqNucToSeqPro $GaucheSeqN] set DroiteSeqP [SeqNucToSeqPro $DroiteSeqN] lappend LesVariablesSeq "GaucheSeq" "DroiteSeq" set Zone(GaucheSeq) "Left" set Zone(DroiteSeq) "Righ" } foreach VariableSeq $LesVariablesSeq { set CR [CodonsRares [set [set VariableSeq]N] "AvecBlanc"] set PepSort [PeptideSort [set [set VariableSeq]P]] if {[info exists TPep]} { unset TPep } DecortiquePeptideSort $PepSort "" TPep set Residues [set TPep(Residues)] set Molecularweight [set TPep(Molecularweight)] set Charged [set TPep(Charged)] set Isoelectricpoint [set TPep(Isoelectricpoint)] set SeqCompressee "" append SeqCompressee [string range [set [set VariableSeq]P] 0 5] append SeqCompressee "..." append SeqCompressee [string range [set [set VariableSeq]P] end-5 end] set ZoNom [string range "[set Zone($VariableSeq)]_$Nom" 0 36] lappend LesFragments [format "%-40.40s %4d %3d %10.2f %5.2f %s %s" $ZoNom $Residues $Charged $Molecularweight $Isoelectricpoint $SeqCompressee $CR ] } } set LesFragments [LesLignesTrieesSurUneClefEntete $LesFragments [list 0 3 1]] if {$AvecAffichage} { FaireLire "I'll show you the report. Please don't forget to save it." AfficheVariable [join $LesFragments "\n"] "AvecTriFragments" PeptideSortSurFusion } else { set LesNR1 {} foreach Nom $LesNoms { regsub {_[^_]+$} $Nom "" NR1 lappend LesNR1 $NR1 } set NomFusRep [join [lsort -unique $LesNR1] "-"] set FichierReport "[RepertoireDuGenome]/fusionreport/${NomFusRep}_[Date].txt" return [SauveLesLignes $LesFragments dans $FichierReport] } return $LesFragments } proc AffichePof {{Quoi ""}} { if {$Quoi==""} { set Quoi "PofOl_PofPPCR_PofMut_PofSeq" } set Retour {} if {[regexp "AllPs" $Quoi]} { set LesPofOl [PofOl "LesPofOl"] set LesPofMut [PofMut "LesPofMut"] set LesPofSeq [PofSeq "LesPofSeq"] set LesPs [lsort [concat $LesPofOl $LesPofMut $LesPofSeq]] foreach TextP $LesPs { scan $TextP "%s" P set DejaVu($P) 1 } foreach P [Oli "LaListeMerci"] { if {[info exists DejaVu($P)]} { continue } lappend LesPs [Oli $P "AllOnOneLine"] } set FO [AfficheListe $LesPs "AvecOliAvecFiOl" "PofOl_PofMut_PofSeq"] lappend Retour $FO } if {[regexp "PofOl" $Quoi]} { set FO [AfficheListe [PofOl "LesPofOl"] "AvecOliAvecFiOl" "PofOligos"] lappend Retour $FO } if {[regexp "PofMut" $Quoi]} { set FO [AfficheListe [PofMut "LesPofMut"] "AvecOliAvecFiOl" "PofMutation"] lappend Retour $FO } if {[regexp "PofSeq" $Quoi]} { set FO [AfficheListe [PofSeq "LesPofSeq"] "AvecOliAvecFiOl" "PofSequencing"] lappend Retour $FO } if {[regexp "PofPPCR" $Quoi]} { set FP [AfficheListe [PofPPCR "5_3"] "AvecOliAvecFiPPCR" "PofPPCR"] lappend Retour $FP } return $Retour } proc AffichePosGenSeq {w {pos ""}} { # return conditions if {[TypeAli] eq "pasdali" || [QuelMode] eq "seqlab" || $pos eq ""} {return} lassign [split [$w index $pos] .] y x if {! [string is integer -strict $y]} {return} if {[set nom [lindex $::LNOrdali $y-1]] eq ""} {return} set ::XGen [expr {$x+1}] set ::XSeq [DonnePosGS $nom $x] return } proc AffichePosGenSeqSL {w {pos ""}} { # ==> Pour le Mode SeqLab !! # # return conditions if {[TypeAli] eq "pasdali"} {return} update idletasks lassign [split [$w index $pos] .] y x if {! [string is integer -strict $y]} {return} if {[set nom [lindex $::LNSeqlab $y-1]] eq ""} {return} set ::XGen [expr {$x+1}] set ::XSeq [DonnePosGS_SL $nom $w $y $x] return } proc AffichePositionOligo {K X Y Action {Id ""}} { Wup "Affiche a droite et a gauche la position de l oligo sur la query" global PositionExisteDeja if {$Id == ""} {set Id [$K find withtag current]} set MesTags [$K gettags $Id] set MesCoords [$K coords $Id] set Nom [lindex $MesTags 4] set Banque [lindex $MesTags 5] if {! [info exists PositionExisteDeja($K,$Id)]} {set PositionExisteDeja($K,$Id) 0} if {$Action=="Hide" || [set PositionExisteDeja($K,$Id)]=="1"} { set PositionExisteDeja($K,$Id) 0 set Texte " " set Id "" foreach Id [$K find withtag "Position"] { if {[lindex [$K gettags $Id] 0] != $Nom || [lindex [$K gettags $Id] 1] !=$Banque} {continue} $K itemconfigure $Id -text $Texte } return "" } set PositionExisteDeja($K,$Id) 1 set Xmin [lindex $MesCoords 0] set Xmax [lindex $MesCoords 2] set Ymin [lindex $MesCoords 1] set Ymax [lindex $MesCoords 3] $K create text [expr $Xmin-3] [expr (($Ymax-$Ymin)/2)+$Ymin] -text [lindex $MesTags 2] -tags [list $Nom $Banque "Position"] -anchor "e" $K create text [expr $Xmax+3] [expr (($Ymax-$Ymin)/2)+$Ymin] -text [lindex $MesTags 3] -tags [list $Nom $Banque "Position"] -anchor "w" return "" } proc AffichePositionOligoPourTous {K X Y Action} { Wup "Affiche a droite et a gauche la position de tous les oligos par rapport a la query" EffacePositionOligoPourTous $K $X $Y set LesId [$K find withtag "Positionner"] foreach Id $LesId { AffichePositionOligo $K $X $Y $Action $Id } return "" } proc AffichePourLaFamilleHDACroises {K Quoi} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set Famille [lindex $MesTags 1] if {$Quoi==1} { if {[EstUnPAB $Famille]} {return [SearchOnBoard $Famille]} set LesMembres [LesMembresDeLaFamilleHDACroises $Famille] return [AfficheVariable [join $LesMembres "\n"] "" "HDA_family_members_$Famille"] } if {$Quoi==2} { if {[EstUnPAB $Famille]} {return [AfficheLesMembresDeLaFamille $Famille]} } if {$Quoi==3} { if {[EstUnPAB $Famille]} {return [AfficheLeClusterXHda $Famille]} } return "" } proc AffichePreferences {} { global Defauts global TmpDef global TypeCons global Couleurs global TypeText if {[winfo exists .prf]} {return} set oldGrab [grab current] if {$oldGrab ne ""} {set oldStatus [grab status $oldGrab]} set oldFocus [focus] array set TmpDef [array get Defauts] toplevel .prf wm title .prf "Preferences" wm protocol .prf WM_DELETE_WINDOW KillParLaCroix frame .prf.fnb pack .prf.fnb -side top -expand 1 -fill both set w ".prf.fnb.nb" NoteBook $w -side top -activebackground green -bd 2 -arcradius 4 -bg [set Defauts(BackAppli)] $w insert 0 gen -text "General" $w insert 1 col -text "Colors" $w insert 2 cns -text "Conservation" $w insert 3 dbs -text "Databases" $w insert 4 str -text "Structure" # Frame General set pgen [$w getframe gen] label $pgen.lbl -text "Ordalie appearance parameters" -font "Helvetica 14 bold" -anchor w -justify left label $pgen.lac -text "Application background color : " -anchor w -justify left button $pgen.bac -bg [set TmpDef(BackAppli)] -command "ChangeCouleurAppli $pgen.bac" -height 1 button $pgen.bca -text "Apply" -bg green1 -command "AppliqueBackColor" -height 1 label $pgen.whl -text "Mouse Wheel controls :" -anchor w -justify left label $pgen.lwy -text "Vertical scrolling " -anchor w -justify left entry $pgen.ewy -width 3 -bg white -textvariable TmpDef(DeltaYScroll) -justify right label $pgen.wuy -text " line(s)" -anchor w -justify left label $pgen.lwx -text "Horizontal scrolling " -anchor w -justify left entry $pgen.ewx -width 3 -bg white -textvariable TmpDef(DeltaXScroll) -justify right label $pgen.wux -text " character(s)" -anchor w -justify left grid $pgen.lbl -row 0 -column 0 -columnspan 4 -pady {10 20} -sticky ew grid $pgen.fntl -row 1 -column 0 -sticky news grid $pgen.ffml -row 1 -column 1 -sticky news grid $pgen.fsiz -row 1 -column 2 -sticky news grid $pgen.fwgh -row 1 -column 3 -sticky news grid $pgen.lac -row 2 -column 0 -columnspan 2 -ipady 30 -sticky ew grid $pgen.bac -row 2 -column 2 -sticky ew grid $pgen.bca -row 2 -column 3 -sticky ew grid $pgen.whl -row 3 -column 0 -columnspan 4 -pady {30 5} -sticky news grid $pgen.lwy -row 4 -column 1 -sticky news grid $pgen.ewy -row 4 -column 2 -sticky news grid $pgen.wuy -row 4 -column 3 -sticky news grid $pgen.lwx -row 5 -column 1 -sticky news grid $pgen.ewx -row 5 -column 2 -sticky news grid $pgen.wux -row 5 -column 3 -sticky news # Frame couleurs d'ordalie set pcol [$w getframe col] # Frame Conservation set pcns [$w getframe cns] grid columnconfig $pcns {1 2} -weight 1 label $pcns.lbl -text "Click on the buttons to change the colors assigned\nto the different conservation types" -anchor w -justify left set i 0 foreach Type [lrange $TypeCons 0 2] { incr i scan [set Couleurs($Type)] "%s %s" fg bg label $pcns.l$Type -text [set TypeText($Type)] -anchor w button $pcns.f$Type -bg $fg -activebackground $fg -width 4 -command "ChangeCouleur $Type $fg $pcns.f$Type" button $pcns.b$Type -bg $bg -activebackground $bg -width 4 -command "ChangeCouleur $Type $bg $pcns.b$Type" grid $pcns.l$Type -row $i -column 0 -sticky w grid $pcns.f$Type -row $i -column 1 -sticky w grid $pcns.b$Type -row $i -column 2 -sticky w } grid $pcns.lbl -row 0 -column 0 -columnspan 3 -sticky we -pady {10 0} label $pcns.lblm -text "For the Threshold Method :\nDefine the threshold above which a column is said\nto be conserved" -justify left label $pcns.sclb -text "Threshold " -anchor w -justify left scale $pcns.scal -from 0 -to 100 -orient horiz -showvalue true -variable TmpDef(Threshold) -width 8 -length 75 grid $pcns.lblm -row 4 -column 0 -columnspan 3 -sticky ew -pady {20 5} grid $pcns.sclb -row 5 -column 0 -columnspan 1 -sticky w grid $pcns.scal -row 5 -column 1 -columnspan 2 -sticky news label $pcns.sim -text "Use similarity" -anchor w -justify left radiobutton $pcns.simy -text "Yes" -variable Defauts(SimiGris) -relief flat -value "1" radiobutton $pcns.simn -text "No" -variable Defauts(SimiGris) -relief flat -value "0" grid $pcns.sim -row 6 -column 0 -sticky w grid $pcns.simy -row 6 -column 1 grid $pcns.simn -row 6 -column 2 # Frame Databases set pdbs [$w getframe dbs] label $pdbs.ldbs -justify left -anchor w -text "Ordalie retrieves some information using distant\n databases. You may change the defaults ones to\n yours. IMPORTANT ! The XXXX stands for the Id\n to be retrieved, and it must be specified in your url !" -font "Helvetica 14 bold" label $pdbs.lpdb -text "Protein Data Bank (PDB) location :" -justify left -anchor w entry $pdbs.epd1 -bg white -textvariable TmpDef(UrlPdbWorld) entry $pdbs.epd2 -bg white -textvariable TmpDef(UrlPdbHome) label $pdbs.lsrs -text "Sequence Retrieval System (SRS) location :" -justify left -anchor w entry $pdbs.esr1 -bg white -textvariable TmpDef(UrlSRSWorld) entry $pdbs.esr2 -bg white -textvariable TmpDef(UrlSRSHome) label $pdbs.lbrd -text "Biological Information Retrieval Database (BIRD) location :" -justify left -anchor w entry $pdbs.ebr1 -bg white -textvariable TmpDef(UrlPdbHoan) grid $pdbs.ldbs -row 0 -column 0 -sticky news -pady {10 5} grid $pdbs.lpdb -row 1 -column 0 -sticky news -pady {20 1} grid $pdbs.epd1 -row 2 -column 0 -sticky news grid $pdbs.epd2 -row 3 -column 0 -sticky news grid $pdbs.lsrs -row 4 -column 0 -sticky news -pady {20 1} grid $pdbs.esr1 -row 5 -column 0 -sticky news grid $pdbs.esr2 -row 6 -column 0 -sticky news grid $pdbs.lbrd -row 7 -column 0 -sticky news -pady {20 1} grid $pdbs.ebr1 -row 8 -column 0 -sticky news -pady {0 10} # Frame Structure set pstr [$w getframe str] # Fin notebook pack $w -fill both -expand yes $w compute_size $w raise gen # Frame boutons OK, Dismiss, etc ... frame .prf.fbt -relief flat pack .prf.fbt -side bottom -fill x -expand 1 set w ".prf.fbt" button $w.dis -text "Dismiss" -bg red -command [list DismissDefauts .prf] button $w.sav -text "Save" -bg yellow -command [list SauveLesDefauts] button $w.ok -text " OK " -bg green1 -command [list AccepteDefauts .prf] pack $w.dis $w.sav $w.ok -side left -expand 1 -padx 10 -pady 10 # MesCouleurs .prf FenetreAuCentre .prf grab -global .prf focus .prf tkwait window .prf focus $oldFocus if {$oldGrab ne ""} { if {$oldStatus eq "global"} { grab -global $oldGrab } else { grab $Grab } } return } proc AffichePreferences2 {} { global PrfListe LesItems OldPrf FrmPref TmpDef CoulTmp Couleurs Defauts if {[winfo exists .prf]} { raise .prf return } set oldGrab [grab current] if {$oldGrab ne ""} {set oldStatus [grab status $oldGrab]} set oldFocus [focus] array set TmpDef [array get Defauts] array set CoulTmp [array get Couleurs] toplevel .prf wm title .prf "Preferences" wm protocol .prf WM_DELETE_WINDOW KillParLaCroix raise .prf set LesItems {General Sequences Databases Conservation Editor "3D Display" Trees} set Larg [PlusLongEltDe $LesItems] frame .prf.fnb pack .prf.fnb -side top -expand 0 -fill both -pady 5 -padx 5 set w ".prf.fnb" set PrfListe ".prf.fnb.lst" listbox $w.lst -width $Larg -height 20 -selectmode single -borderwidth 3 -highlightthickness 0 -disabledforeground black -bg white -fg black # Frame pref labelframe $w.frm -relief groove -font "Helvetica 14 bold" set FrmPref "$w.frm" # Frame Boutons OK dismiss default frame $w.btn button $w.btn.cancel -text "Cancel" -background red -command [list DismissDefauts $w] button $w.btn.defaut -text "Default" -background yellow -command [list RemetDefauts $PrfListe] button $w.btn.cebon -text " OK " -background green1 -command [list AccepteEtSauveDefauts $w] grid $w.btn.cancel -row 0 -column 0 grid $w.btn.defaut -row 0 -column 1 grid $w.btn.cebon -row 0 -column 2 grid columnconfig $w.btn {0 1 2} -weight 1 grid rowconfig $w.btn 0 -weight 0 grid $w.lst -row 0 -column 0 -rowspan 2 -sticky ns -padx 5 -pady 5 grid $w.frm -row 0 -column 1 -sticky news -pady {5 1} -padx 5 -ipady 5 grid $w.btn -row 1 -column 1 -sticky wes -padx 10 -pady 10 grid columnconfig $w 0 -weight 0 grid columnconfig $w 1 -weight 0 grid rowconfig $w 0 -weight 0 grid rowconfig $w 1 -weight 0 $w.lst insert 0 {*}$LesItems $w.lst selection set 0 update set h1 [winfo height $w.lst] set h2 [winfo height $w.btn] $w.frm configure -height [expr {$h1-$h2}] set OldPrf "General" EnvoiePrfGeneral wm protocol .prf WM_DELETE_WINDOW AdieuOrdali MesCouleurs .prf FenetreAuCentre .prf bind $w.lst <1> {} #bind $w.lst "DefinitPrfItem %W \[selection get\]" bind $w.lst <> "DefinitPrfItem %W \[selection get\]" return } proc AfficheProfileResults {} { global WProfile package require Tk set w .prfrst catch {destroy $w} toplevel $w set WProfile "$w.f.text" set wp "$w.f" frame $wp scrollbar $wp.scroll -width 8 -command "$wp.text yview " text $wp.text -height 25 -width 80 -yscrollcommand "$wp.scroll set" -font "courier 14 bold" -bg black -fg white pack $wp.text -fill both -side left -expand 1 pack $wp.scroll -side left -fill y pack $wp -side top set wb "$w.b" frame $wb -bg black button $wb.calls -text "Nb Calls" -bg cyan -command {SortBy calls} button $wb.avgrn -text "avgRunTime" -bg cyan -command {SortBy avgRn} button $wb.total -text "totalTime" -bg cyan -command {SortBy total} button $wb.exclu -text "exclusiveTime" -bg cyan -command {SortBy exclu} button $wb.avgex -text "avgExcTime" -bg cyan -command {SortBy avgEx} button $wb.print -text "Save" -bg yellow -command {SauveProfile} button $wb.close -text " Close " -bg green1 -command {CloseProfileResults} pack $wb.calls $wb.avgrn $wb.total $wb.exclu $wb.avgex $wb.print $wb.close -side left -expand 1 pack $wb -side bottom -expand 1 -fill x -pady 20 InitDataProfile $wb.calls invoke bind $wp.text [list DumpFunction %W @%x,%y] tkwait window $w return } proc AfficheProfileSegment {Selection Maniere Fichier} { scan $Selection "%s" Access set Page [ProfileSegment "$Access,$Fichier"] return [AfficheVariable $Page "" "${Access}_of_$Fichier"] } proc AfficheRec1 {Selection {Quoi ""}} { JeMeSignale if {$Quoi==""} { set Quoi "Description" } if {[regexp "\n" $Selection]} { foreach Ligne [split $Selection "\n"] { AfficheRec1 $Ligne $Quoi } return } scan $Selection "%s" R if {$Quoi=="Description"} { return [AfficheLesRec1 $R] } if {$Quoi=="Fichier"} { return [AfficheFichier [Rec1 $R $Quoi] "AvecFormate"] } if {$Quoi=="Ppcr"} { set N [Rec1 $R "N"] return [ShowVirtualPPCR $N] } if {$Quoi=="Vecteur"} { set V [Rec1 $R "Vecteur"] set Fichier "[RepertoireDuGenome]/vecteurs/pDONR/$V" Espionne $Fichier return [AfficheFichier $Fichier "AvecFormate"] } return [AfficheVariable [Rec2 $R $Quoi]] } proc AfficheRec2 {Selection {Quoi ""}} { if {$Quoi==""} { set Quoi "Description" } if {[regexp "\n" $Selection]} { foreach Ligne [split $Selection "\n"] { AfficheRec2 $Ligne $Quoi } return } scan $Selection "%s" R if {$Quoi=="Fichier"} { return [AfficheFichier [Rec2 $R $Quoi]] } scan $Selection "%s" R if {$Quoi=="Fichier"} { return [AfficheFichier [Rec2 $R $Quoi] "AvecFormate"] } if {$Quoi=="Rec1"} { set R1 [Rec2 $R "R1"] return [AfficheLesRec1 $R1] } if {$Quoi=="Vecteur"} { set V [Rec2 $R "Vecteur"] set Fichier "[RepertoireDuGenome]/vecteurs/pDEST/$V.tfa" Espionne $Fichier return [AfficheFichier $Fichier "AvecFormate"] } return [AfficheVariable [Rec2 $R $Quoi]] } proc AfficheReduceMsf {NomOuFichier {MinAB ""}} { set MSF [ReduceMsf $NomOuFichier "GetText" $MinAB] return [AfficheVariable $MSF "AvecEtudeMSFGrandeLargeur" $NomOuFichier] } proc AfficheRegle {{w .ordali.lessequences}} { global WTexteRegle TexteWRegle Defauts if {! [ModeI]} {return} set WTexteRegle "$w.regle" $WTexteRegle configure -state normal $WTexteRegle configure -font SeqFont $WTexteRegle delete 1.0 end $WTexteRegle insert end [set TexteWRegle(Tirets)] $WTexteRegle insert end "\n" $WTexteRegle insert end [set TexteWRegle(Comptr)] $WTexteRegle tag remove sel 1.0 end $WTexteRegle configure -state disabled return } proc AfficheReordonneMSF {MSF {LesAccess ""} {FichierOrigine ""}} { if {$LesAccess=="" || $LesAccess=="Ask"} { set LesAccess [ChoixParmi {"Disphy" "Secator" "Dpc" "Oumy" "ShowSecator"}] if {$LesAccess==""} { return "" } } if {$LesAccess=="ShowSecator"} { MontreSecator $MSF } set Nom [file tail $FichierOrigine] set Fenetre [AfficheVariable [ReordonneMSF $MSF $LesAccess $Nom] "AvecEtudeMSFGrandeLargeur" "$FichierOrigine"] if {$LesAccess=="Disphy"} { return $Fenetre } set LesAGs [MontreSecator $MSF] IllumineSuivantLesGroupes $LesAGs $Fenetre MemoSelection $Fenetre Memorize return $Fenetre } proc AfficheRequeteSurLaMeilleureLocalisation {K Fichier {Qui OnlyTheBest} {LesNoms ""}} { global RepertoireDuGenome set Id [$K find withtag current] set MesTags [$K gettags $Id ] set Requete [lindex $MesTags 0 ] set LesResultats [RequeteSurLaMeilleureLocalisation $Requete $Fichier $Qui $LesNoms] if {$LesResultats != {}} { set Texte [join $LesResultats "\n"] } else { set Texte "Nothing" } AfficheVariable "$Texte" "" "Results" return "$Texte" } proc AfficheRognure {Page Selection Maniere NomDuFichierOrigine {InOut In}} { if {$InOut=="Alone"} { if {$Maniere=="Retour"} { return $Selection } return [AfficheVariable $Selection $Maniere $NomDuFichierOrigine] } set LesAccess {} foreach Ligne [split $Selection "\n"] { regsub "Name:" $Ligne "" Ligne set Access "" scan $Ligne "%s" Access if {$Access==""} { continue } lappend LesAccess $Access } set NouvellePage [MSFSelection $Page $LesAccess $InOut] if {$Maniere=="Retour"} { return $NouvellePage } return [AfficheVariable $NouvellePage $Maniere "$NomDuFichierOrigine"] } proc AfficheSequencesCorrelees {Fichier {Groupe ""}} { global RepertoireDuGenome JeMeSignale set Nom [file tail $Fichier] set Fichier "$RepertoireDuGenome/correlator/$Nom" if { ! [file exists $Fichier]} { return "" } set VasY 0 set DejaVu 0 set LesBons {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } if {$Groupe!=""} { if {[regexp "groupe :" $Ligne]} { scan $Ligne "%s %s %d" Bidon DP GroupeLu if {$GroupeLu == $Groupe} { set VasY 1 set DejaVu 1 continue } else { if {$DejaVu} { break } } } if { ! $VasY } { continue } } regsub "^>" $Ligne "" Ligne lappend LesBons $Ligne } return [AfficheVariable [join $LesBons "\n"] ""] } proc AfficheSlidingCodonRare {Page {WindowSize ""}} { set SCR [SlidingCodonRare $Page] return [AfficheVariable [join $SCR "\n"] "AvecRienGrandeLargeur" "SlidingCodonRare"] } proc AfficheSlidingCodonRarePour {{Liste ""}} { if {$Liste==""} { set Liste [MorceauxChoisis [PresentationDesPABs]] } if {$Liste=={}} { return "" } set WindowSize [ChoisisWindowSizePourSlidingCodonRare] foreach Ligne $Liste { scan $Ligne "%s" Nom set FichierTFA "[RepertoireDuGenome]/nuctfa/$Nom" if { ! [file exists $FichierTFA]} { continue } set SCR [SlidingCodonRare $FichierTFA $WindowSize] lappend LesSCRs $Ligne lappend LesSCRs [join $SCR "\n"] lappend LesSCRs "" } return [AfficheVariable [join $LesSCRs "\n"] "AvecRienGrandeLargeur" "SlidingCodonRare"] } proc AfficheSortedDistances {NomOuFichier} { set LesDistances [PairwizeDistancesInMsf "SortedDistances" $NomOuFichier] return [Graphe $LesDistances] } 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 AfficheTaxoFromTaxoLine {Ligne {Titre ""}} { set LeMessage {} foreach Li [split $Ligne "\n"] { set TaxId [lindex [LesMotsDeLaLigne $Li] 2] set Message "[format %-7s $TaxId] [TaxClass $TaxId Name]" lappend LeMessage $Message } return [AfficheListe $LeMessage "" $Titre] } proc AfficheTexte {Texte {Titre ""} {X ""} {Y ""}} { set w [NomDe fenetre] toplevel $w if {$Titre==""} { set Titre [string range $Texte 0 19] } wm title $w $Titre wm iconname $w $Titre set LesLignesDuTexte [split $Texte "\n"] set PremiereLigne [lindex $LesLignesDuTexte 0] set Hauteur [Mini 12 [Maxi 30 [llength $LesLignesDuTexte]]] set Largeur 80 foreach Ligne $LesLignesDuTexte { set Largeur [Maxi $Largeur [string length $Ligne]] } set Largeur [Mini $Largeur 180] text $w.text -wrap none -relief sunken -bd 2 -xscrollcommand "$w.scrollx set" -setgrid 1 -yscrollcommand "$w.scrolly set" -setgrid 1 -width $Largeur -height $Hauteur $w.text insert 0.0 $Texte $w.text configure -state "disable" focus $w.text frame $w.buttons pack $w.buttons -side bottom -fill x -pady 2m button $w.buttons.dismiss -background red -text "Dismiss" -command "destroy $w" pack $w.buttons.dismiss -side left -expand 1 button $w.buttons.saveas -text "Save All/Sel." bind $w.buttons.saveas <1> "SaveAs \[$w.text get 1.0 end\]" bind $w.buttons.saveas <2> "SaveAs \[$w.text get sel.first sel.last\]" pack $w.buttons.saveas -side left -expand 1 button $w.buttons.medline -text "Medline" bind $w.buttons.medline <1> "AfficheMedline \[$w.text get 1.0 end\]" pack $w.buttons.medline -side left -expand 1 scrollbar $w.scrollx -command "$w.text xview" -orient "horizontal" pack $w.scrollx -side bottom -fill x scrollbar $w.scrolly -command "$w.text yview" pack $w.scrolly -side right -fill y pack $w.text -expand yes -fill both if {$X!=""} { $w.text xview scroll $X units } if {$Y!=""} { $w.text yview scroll $Y units } return $w } proc AfficheTousLesMedlinesDeLaSequence {Sequence} { Wup "Calls Jean-Marie Wurtz's program to fetch medline's http file." Gs "Frame" set LesLignes [split $Sequence "\n"] if {[llength $LesLignes] < 1} { FaireLire "$Sequence\nis n't a sequence." return "" } set iAccess [lsearch -regexp $LesLignes {^AC}] if {$iAccess<0} { FaireLire "Sorry I can't find the Access of the sequence" return "" } scan [lindex $LesLignes $iAccess] "%s %s" AC Access regsub ";" $Access "" Access return [AfficheVariable [exec meddata $Access] "AvecRien"] } proc AfficheToutesLesDefinitions {} { #rR je sais pas si ca marche ....??????????????? set Sortie {} foreach Operon [lrange [LesOperons] 0 10] { set Premier [lindex $Operon 0] set LesDefs [Operon $Premier "Definitions"] lappend Sortie "" lappend Sortie $Operon foreach Def $LesDefs { lappend Sortie " $Def" } } return [AfficheVariable [join $Sortie "\n"] "" ""] } proc AfficheUnArbre {AId} { global Abr Defauts WOrdali set w ".arbre$AId" toplevel $w wm title $w "Tree No $AId" wm iconname $w "Tree $AId" wm protocol $w WM_DELETE_WINDOW KillParLaCroix if {[winfo exists .fattendre]} {lower $w .fattendre} frame $w.fc frame $w.fb # packing des deux frames principales grid $w.fc -row 0 -column 0 -sticky news grid $w.fb -row 1 -column 0 -sticky news grid rowconfig $w 0 -weight 1 grid columnconfig $w 0 -weight 1 # Frame canvas + ascenceurs set wc "$w.fc.c" set Abr($AId,PAD) $wc set Abr($AId,ContextMenu) $w.fc.c.menu canvas $w.fc.c -height [set Abr($AId,FHeight)] -width [set Abr($AId,FWidth)] -scrollregion [list 0 0 [set Abr($AId,PADWdt)] [set Abr($AId,PADHgt)]] -cursor hand2 -background white -relief groove -xscrollcommand "$w.fc.hs set" -yscrollcommand "$w.fc.vs set" scrollbar $w.fc.vs -command "$wc yview" -width 8 scrollbar $w.fc.hs -orient horiz -command "$wc xview" -width 8 grid $w.fc.c -row 0 -column 0 -sticky news grid $w.fc.vs -row 0 -column 1 -sticky ns grid $w.fc.hs -row 1 -column 0 -sticky ew grid rowconfig $w.fc 0 -weight 1 grid columnconfig $w.fc 0 -weight 1 grid columnconfig $w.fc 1 -weight 0 # Frame des fonctions frame $w.fb.fsrp -relief groove -borderwidth 2 set WOrdali(Tree,DenRad) $w.fb.fsrp.esra checkbutton $w.fb.fsrp.esra -text "Dendro/Radial" -anchor w -justify left -onvalue dendrogram -offvalue radial -variable Abr($AId,TypeTree) -command [list OnReDessineArbre $AId] checkbutton $w.fb.fsrp.swap -text "swap nodes" -anchor w -justify left -variable Abr($AId,Swap) -relief flat -onvalue 1 -offvalue 0 -command [list ModeSwap $AId] set Abr($AId,BReroot) "$w.fb.fsrp.reroot" checkbutton $w.fb.fsrp.reroot -text "re-root tree" -anchor w -justify left -disabledforeground dimgrey -variable Abr($AId,Reroot) -relief flat -onvalue 1 -offvalue 0 -command [list ModeReroot $AId] set Abr($AId,BCollapse) $w.fb.fsrp.col checkbutton $w.fb.fsrp.col -text "collapse tree" -anchor w -justify left -variable Abr($AId,CollapseTree) -onvalue 1 -offvalue 0 -command [list CollapseTree $AId] grid $w.fb.fsrp.esra -row 0 -column 0 -sticky we grid $w.fb.fsrp.swap -row 1 -column 0 -sticky we grid $w.fb.fsrp.reroot -row 2 -column 0 -sticky we grid rowconfig $w.fb.fsrp all -weight 0 grid columnconfig $w.fb.fsrp all -weight 1 # Frame de display infos frame $w.fb.fa -relief groove -borderwidth 2 checkbutton $w.fb.fa.phylum -text "show phylum" -anchor w -justify left -variable Abr($AId,Phylum) -onvalue 1 -offvalue 0 -command [list PeintParPhylum $AId] # show bootstrap : # different cases if dendro or radial set Abr($AId,ShowBootDen) $w.fb.fa.boots checkbutton $w.fb.fa.boots -text "show bootstrap" -anchor w -justify left -variable Abr($AId,BootShow) -onvalue 1 -offvalue 0 -command [list MontreBootstrap $AId] set Abr($AId,ShowBootRad) $w.fb.fa.fboo frame $w.fb.fa.fboo set Abr($AId,ThresBootPC) [set Defauts(ThresBootPC)] set Abr($AId,ThresBoot) [expr {1.0*$Abr($AId,ThresBootPC)*[set Defauts(TreeNBoot)]/100.}] checkbutton $w.fb.fa.fboo.b1 -text "show boot" -anchor w -justify left -variable Abr($AId,BootShow) -onvalue 1 -offvalue 0 -command [list MontreBootstrap $AId] set Abr($AId,ThrBootEnt) $w.fb.fa.fboo.e1 entry $w.fb.fa.fboo.e1 -background white -textvariable Abr($AId,ThresBootPC) -justify right -width 3 -validate none grid $w.fb.fa.fboo.b1 -row 0 -column 0 grid $w.fb.fa.fboo.e1 -row 0 -column 1 grid rowconfig $w.fb.fa.fboo 0 -weight 0 grid columnconfig $w.fb.fa.fboo all -weight 0 checkbutton $w.fb.fa.shclus -text "show clusters" -anchor w -justify left -variable Abr($AId,ShClusters) -onvalue 1 -offvalue 0 -command [list PeintParClusters $AId] grid $w.fb.fa.phylum -row 0 -column 0 -sticky we grid $w.fb.fa.fboo -row 1 -column 0 -sticky we #grid $w.fb.fa.boots -row 1 -column 0 -sticky we grid $w.fb.fa.shclus -row 2 -column 0 -sticky we grid rowconfig $w.fb.fa all -weight 0 grid columnconfig $w.fb.fa 0 -weight 1 -minsize 0 if {[TypeAli] ne "XML" && [TypeAli] ne "ORD"} { $w.fb.fa.phylum configure -state disabled } bind [set Abr($AId,ThrBootEnt)] [list ChangeThresholdBoot $AId] if {! [set Abr($AId,BootDone)]} { #$w.fb.fa.boots configure -state disabled $w.fb.fa.fboo.b1 configure -state disabled bind [set Abr($AId,ThrBootEnt)] "" } # Frame de redimentionnement de l'arbre # Deux frames : # - cartesienne pour dendrgramme (width/height) # - rotation pour radial (rot/zoom) # # Pour dendogramme set Abr($AId,FDimXY) "$w.fb.fd" frame $w.fb.ft -relief groove -borderwidth 2 set Abr($AId,FDimRZ) "$w.fb.fr" frame $w.fb.ft.f1 checkbutton $w.fb.ft.f1.tnode -text "Tag node" -variable Abr($AId,DoTagNode) -onvalue 1 -offvalue 0 -command [list ModeTagNode $AId] frame $w.fb.ft.f2 set Wdt [PlusLongEltDe [set Abr($AId,LSeq)]] set Abr($AId,DoTagleaf) 0 set Abr($AId,LeafSelOld) [lindex $Abr($AId,LSeq) 0] checkbutton $w.fb.ft.f2.ctag -text "Tag" -variable Abr($AId,DoTagLeaf) -onvalue 1 -offvalue 0 set Abr($AId,CbLTag) $w.fb.ft.f2.stag ttk::combobox $w.fb.ft.f2.stag -background white -width $Wdt -height 15 -textvariable Abr($AId,LeafSel) -state readonly -values $Abr($AId,LSeq) $w.fb.ft.f2.stag index 0 bind $w.fb.ft.f2.stag <> [list ModeTagLeaf $AId] frame $w.fb.ft.f3 set Abr($AId,AddLeg) 0 set Abr($AId,LegText) "" set Abr($AId,LegBoot) 1 set Abr($AId,LegCoul) 0 set Abr($AId,LegGap) 1 set Abr($AId,LegSites) 1 set Abr($AId,Legend) "" set Abr($AId,LegWText) "" checkbutton $w.fb.ft.f3.ckleg -text "Caption" -anchor w -justify left -onvalue 1 -offvalue 0 -variable Abr($AId,AddLeg) -command [list DefineLegend $AId define] button $w.fb.ft.f3.clr -text "Clear" -bg white -command [list DefineLegend $AId clear] grid columnconfig $w.fb.ft.f1 all -weight 1 grid rowconfig $w.fb.ft.f1 all -weight 1 grid $w.fb.ft.f1.tnode -row 0 -column 0 -sticky ew grid $w.fb.ft.f2.ctag -row 0 -column 0 -sticky ew grid $w.fb.ft.f2.stag -row 0 -column 1 -sticky ew grid columnconfig $w.fb.ft.f2 all -weight 1 grid rowconfig $w.fb.ft.f2 all -weight 1 grid $w.fb.ft.f3.ckleg -row 0 -column 0 -sticky ew grid $w.fb.ft.f3.clr -row 0 -column 1 -sticky ew grid columnconfig $w.fb.ft.f3 all -weight 1 grid rowconfig $w.fb.ft.f3 all -weight 1 #grid $w.fb.ft.f1 -row 0 -column 0 -sticky ew grid $w.fb.ft.f2 -row 1 -column 0 -sticky ew grid $w.fb.ft.f3 -row 2 -column 0 -sticky ew grid rowconfig $w.fb.ft all -weight 0 grid columnconfig $w.fb.ft all -weight 0 # # gestion labels : on ecrit quoi frame $w.fb.ff -relief groove -borderwidth 2 label $w.fb.ff.name -text "Label" -anchor w -justify left set cbw [PlusLongEltDe [set Abr(TypeAff)]] ttk::combobox $w.fb.ff.chnm -background white -height 0 -width $cbw -textvariable Abr($AId,TAff) -state readonly -values $Abr(TypeAff) bind $w.fb.ff.chnm <> [list ChangeLabelTree $AId] # gestion fonte label $w.fb.ff.ftsize -text "font size" -anchor w -justify left spinbox $w.fb.ff.fsz -readonlybackground white -width 6 -state readonly -values {6 8 10 12 14 16 18 20 22 24} -command [list FonteMode $AId size %s] label $w.fb.ff.ftwght -text "font weight" -anchor w -justify left spinbox $w.fb.ff.fwh -readonlybackground white -width 6 -state readonly -values [list normal bold] -command [list FonteMode $AId weight %s] grid $w.fb.ff.ftsize -row 0 -column 0 -sticky w grid $w.fb.ff.fsz -row 0 -column 1 -sticky ew grid $w.fb.ff.ftwght -row 1 -column 0 -sticky w grid $w.fb.ff.fwh -row 1 -column 1 -sticky ew if {[TypeAli] eq "XML" || [TypeAli] eq "ORD"} { grid $w.fb.ff.name -row 2 -column 0 -sticky w grid $w.fb.ff.chnm -row 2 -column 1 } grid rowconfig $w.fb.ff all -weight 0 grid columnconfig $w.fb.ff all -weight 0 # Print, save, close, reset frame $w.fb.fprc button $w.fb.fprc.print -text "Print" -background yellow -command [list PrintCanvas $wc png] button $w.fb.fprc.save -text "Save" -background cyan -command [list SaveTree $AId] button $w.fb.fprc.reset -text "Reset" -background white -command [list ResetArbre $AId $wc] button $w.fb.fprc.close -text "Close" -background red -command "DetruitArbre $AId" grid $w.fb.fprc.print -row 0 -column 0 grid $w.fb.fprc.save -row 1 -column 0 grid $w.fb.fprc.reset -row 0 -column 1 -pady {1 5} grid $w.fb.fprc.close -row 1 -column 1 -pady {1 5} grid rowconfig $w.fb.fprc all -weight 0 grid columnconfig $w.fb.fprc all -weight 0 # # Packing # grid $w.fb.fsrp -row 0 -column 0 -padx 5 -sticky news grid $w.fb.fa -row 0 -column 1 -padx 5 -sticky news grid $w.fb.ft -row 0 -column 2 -padx 5 -sticky news grid $w.fb.ff -row 0 -column 3 -padx 5 -sticky news grid $w.fb.fprc -row 0 -column 4 -padx 5 -sticky ne -pady {1 5} grid columnconfig $w.fb 4 -weight 1 grid rowconfig $w.fb all -weight 1 $w.fb.ff.fsz set [set Abr($AId,FontSize)] $w.fb.ff.fwh set [set Abr($AId,FontWght)] # bindings, trace , etc ... InitContextMenu CreateContextMenu $AId [set Abr($AId,ContextMenu)] bind $wc [list ShowContextMenu $AId [set Abr($AId,ContextMenu)]] bind $wc {%W scan mark %x %y} bind $wc {%W scan dragto %x %y 1} bind $wc <4> {eval %W yview scroll -1 units} bind $wc <5> {eval %W yview scroll 1 units} bind $wc {eval %W xview scroll -1 units} bind $wc {eval %W xview scroll 1 units} trace add variable Abr($AId,TypeTree) write ChangeConfigFenetre trace add variable Abr($AId,DoTagNode) write ModeTagNode trace add variable Abr($AId,DoTagLeaf) write ModeTagLeaf DefineLegend $AId clear ChangeCurseur $AId normal MesCouleurs $w FenetreAuCentre $w OnReDessineArbre $AId return } proc AfficheUneSequence {{NomDuFichier ""} {AvecManiere ""}} { global RepertoireDuGenome Gs "Frame" if { $NomDuFichier == ""} { set NomDuFichier [ButineArborescence "All"] if { $NomDuFichier == "" } { return } } return [AfficheFichier $NomDuFichier "AvecFormate$AvecManiere"] } proc AfficheUneSortieBlast {{NomDuFichier ""} {AvecManiere ""}} { global RepertoireDuGenome Gs "Frame" if { $NomDuFichier == ""} { set NomDuFichier [ButineArborescence "All"] if { $NomDuFichier == "" } { return } } if { ! [regexp "/" $NomDuFichier] && [EstUnPAB $NomDuFichier]} { set Nom $NomDuFichier set NomDuFichier "[RepertoireDuGenome]/blastp/$Nom" } return [AfficheFichier $NomDuFichier "AvecGrapheAvecSegAlignementAvecAligneurs$AvecManiere"] } proc AfficheUsageDesCodons {{Nom ""}} { if {$Nom==""} { set Nom [Entre [PreFixe]] } set UC [UsageDesCodons $Nom] set YaEuEntete 0 set YaEuPourCent 0 set LesA {} set LesCodons {} foreach Ligne [split $UC "\n"] { regsub -all {[ \t]+} $Ligne " " Ligne set Ligne [string trim $Ligne] if {$Ligne==""} { continue } set LesMots [LesMotsDuTexte $Ligne] if {[regexp -nocase {[A-Z]} $Ligne]} { set LesADeLaLigne {} set LesCodonsDeLaLigne {} foreach {A Codon} $LesMots { lappend LesA $A lappend LesCodons $Codon lappend LesADeLaLigne $A lappend LesCodonsDeLaLigne $Codon } set YaEuEntete 1 continue } if {$YaEuEntete} { set YaEuEntete 0 foreach A $LesADeLaLigne Codon $LesCodonsDeLaLigne P $LesMots { set Gde($A) $P set Gde($Codon) $P lappend LesG $P lappend LesADeG($P) $A lappend LesCodonDdeG($P) $Codon } set YaEuPourCent 1 continue } if {$YaEuPourCent} { set YaEuPourCent 0 foreach A $LesADeLaLigne Codon $LesCodonsDeLaLigne P $LesMots { set Lde($A) $P set Lde($Codon) $P lappend LesL $P lappend LesADeL($P) $A lappend LesCodonDdeL($P) $Codon } continue } } set LesG [lsort -integer -unique -decreasing $LesG] set LesL [lsort -integer -unique -decreasing $LesL] foreach Codon [list AAC AAT ACC ATC ATT CAG CTC CTG GAA GAC GAG GAT GCC GGC GGT GTA GTC GTT TAC TTC] { set X($Codon) 1 } set CodonsG "" set PourCentG "" foreach G $LesG { foreach Codon $LesCodonDdeG($G) { if {[info exists X($Codon)]} { append CircuG [format " %s %s" [AAduCodon $Codon] $Codon] } else { append CircuG [format " %s %s" " " " "] } set PourCent $G append CodonsG [format " %s %s" [AAduCodon $Codon] $Codon] append PourCentG [format " %5d" $PourCent] } } set Codons "" set PourCent "" foreach L $LesL { foreach Codon $LesCodonDdeL($L) { if {[info exists X($Codon)]} { append CircuL [format " %s %s" [AAduCodon $Codon] $Codon] } else { append CircuL [format " %s %s" " " " "] } set PourCent $L append CodonsL [format " %s %s" [AAduCodon $Codon] $Codon] append PourCentL [format " %5d" $PourCent] } } set Message $UC append Message "\n" append Message "\n" append Message $CircuG append Message "\n" append Message $CodonsG append Message "\n" append Message $PourCentG append Message "\n" append Message "\n" append Message $CircuL append Message "\n" append Message $CodonsL append Message "\n" append Message $PourCentL set Circu "" append Message "\n" append Message $Circu return [Affiche $Message "" "CodonUsageOf_$Nom"] } proc AfficheVariable {Page {Maniere ""} {NomDuFichierOrigine ""}} { Wup "Cette proc est le coeur de Gscope" Wup "Most used procedure ... : " Wup "Shows the text Page in a listbox, with a lot of buttons." Wup "Copyright 1999 Raymond Ripp" Gs "Frame" if {$Page==""} { return "" } global VariableDeRetour global LesFenetresDePAB global PagePropre global CurrentGenome regsub -all {[;\[\]]} $NomDuFichierOrigine " " NomDuFichierOrigine ; #rR pour éviter les mauvaises surprises car il rique d'être interprété set Nom "" set Queue [file tail $NomDuFichierOrigine] set w [NomDe fenetre] set PagePropre($w) $Page regsub -all {\t} $PagePropre($w) " " PagePropre($w) if {[info procs EstPABouTROUouTRNAouARN]!=""} { set NomPossible [file tail $NomDuFichierOrigine] if {$Nom==""} { set NomPossible [file tail $NomDuFichierOrigine] if { [EstPABouTROUouTRNAouARN $NomPossible] } { set Nom $NomPossible } } if {$Nom==""} { set NomPossible [lindex [split $NomDuFichierOrigine "_"] 0] if { [EstPABouTROUouTRNAouARN $NomPossible] } { set Nom $NomPossible } } if {$Nom==""} { set NomPossible [lindex [split $NomDuFichierOrigine "_"] end] if { [EstPABouTROUouTRNAouARN $NomPossible] } { set Nom $NomPossible } } } # if {[PourWscope]} { return [Html_DuTexteTelQuel [set PagePropre($w)]] } lappend LesFenetresDePAB($Queue) $w regsub -all " " $NomDuFichierOrigine "_" NomDuFichierOrigine if { $NomDuFichierOrigine == "" } { set NomDuFichierOrigine "Tsointsoin" } if {$Maniere=="AutoManiere" || $Maniere==""} { set Maniere [LaManierePourAffiche $NomDuFichierOrigine] } if {$Nom!="" && [info procs NomDeScene]!="" && [NomDeScene $Nom]!=""} { set Titre "[NomDeScene $Nom] $NomDuFichierOrigine" } else { set Titre "$NomDuFichierOrigine" } set Header "" # if { ! [OnTraite "RetGene"]&& [PourWscope]} { return [Html_TextToListbox [set PagePropre($w)] $Titre $Header "" "ResetAndWaqqqitForButtons"] } set Clavier $w.buttons if { ! [PourWscope]} { toplevel $w wm title $w "$Titre" wm iconname $w "$Titre" label $w.msg -wraplength 4i -justify left -text "$Titre" pack $w.msg -side top frame $Clavier pack $Clavier -side bottom -fill x -padx 3m -pady 1m } set ForValidateOnly 0 TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "red" if { [regexp "AvecRetour" $Maniere] } { if {[regexp "AvecRetourPourInforme" $Maniere]} { TouchePour $Clavier "Validate" "InformeSansDemanderParWscope $Nom \[selection get\]" "" "green" } else { TouchePour $Clavier "Validate sel." "set VariableDeRetour($w) \[selection get\]" "" "green" TouchePour <2> " /All" "set VariableDeRetour($w) \[set PagePropre($w)\]" "" TouchePour <3> " / No!" "set VariableDeRetour($w) {}" } if {[PourWscope]} { set ForValidateOnly 1 } TouchePour $Clavier NouvelleCouleur "pink" } TouchePour $Clavier "Dismiss" "Dismiss $w" TouchePour $Clavier "Dismiss_all" "DismissToutCePAB $Queue" "NoWeb" TouchePour $Clavier NouvelleCouleur "grey" TouchePour $Clavier "Display sel." "SendToWeb \[selection get\]" "WebOnly" TouchePour <2> "/Select all" "onclick='return selectAll();'" "WebOnly" TouchePour $Clavier "Save all" "SaveAs \[set PagePropre($w)\]" "NoWeb" TouchePour <2> "/sel." "SaveAs \[selection get\]" "NoWeb" TouchePour <3> " /Edit" "EditAndShow \[set PagePropre($w)\]" "NoWeb" TouchePour $Clavier "Memorize sel." "MemoSelection $w Memorize" "NoWeb" "lightyellow" TouchePour <2> "/Recall" "MemoSelection $w Recall" "NoWeb" TouchePour $Clavier NouvelleCouleur "grey" TouchePour $Clavier "Print" "ImprimeLeTexte \[set PagePropre($w)\]" TouchePour <2> "/Sort" "TrieEtAffiche \[set PagePropre($w)\] Alpha $Maniere $NomDuFichierOrigine" TouchePour <3> "/ask" "TrieEtAffiche \[set PagePropre($w)\] Ask $Maniere $NomDuFichierOrigine" TouchePour $Clavier "Copy" "clipboard clear ; clipboard append \[selection get\]" "NoWeb" TouchePour <2> "/Append" "clipboard append \[selection get\]" "NoWeb" TouchePour <3> " /Font" "PolicePourListBox Ask $w" "NoWeb" TouchePour $Clavier "Exec" "ExecuteUnBoutonDe $w" "NoWeb" TouchePour <2> "/Small" "RapetisseLesBoutonsDe $w" "NoWeb" TouchePour <3> "/Kill" "DetruitUnBoutonDe $w" "NoWeb" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "grey" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "yellow" TouchePour $Clavier "Next" "Focalise $w" "NoWeb" TouchePour <2> "/Top" "Focalise $w top" "NoWeb" TouchePour <3> "/New" "Focalise $w ask" "NoWeb" TouchePour $Clavier "Highlight [PreFixe]" "Illumine $Nom $w" "NoWeb" TouchePour <2> "/Query" "Illumine QUERY $w" "NoWeb" TouchePour $Clavier "High word" "Illumine \[Entre\] $w" "NoWeb" TouchePour <2> "/group" "IllumineLeGroupeDe $Nom $w" "NoWeb" TouchePour <3> "/?" "IllumineLeGroupeDe $Nom $w Ask $Maniere" "NoWeb" TouchePour $Clavier "Sel. In" "AfficheRognure \[set PagePropre($w)\] \[selection get\] $Maniere $NomDuFichierOrigine In" TouchePour <2> "/Out" "AfficheRognure \[set PagePropre($w)\] \[selection get\] $Maniere $NomDuFichierOrigine Out" TouchePour <3> "/Alone" "AfficheRognure \[set PagePropre($w)\] \[selection get\] $Maniere $NomDuFichierOrigine Alone" if { $Nom!="" } { TouchePour $Clavier "Informe $Nom" "Informe $Nom" TouchePour $Clavier "Narcisse" "FaireLire \[Narcisse $Nom\]" TouchePour <2> "/fetch it" "AfficheFetch \[Narcisse $Nom\]" TouchePour $Clavier "Ghost it " "Fantomise $Nom ParDecret" TouchePour <2> "/ask" "Fantomise $Nom Ask" TouchePour $Clavier "Met it " "MetIt $Nom ParDecret" TouchePour <2> "/ask" "MetIt $Nom Ask" TouchePour $Clavier "Reject it " "RejectIt $Nom ParDecret" TouchePour <2> "/ask" "RejectIt $Nom Ask" TouchePour <3> "/NoRej" "RejectIt $Nom {NoRejected ParDecret}" } TouchePour $Clavier "Search on board ..." "SearchOnBoard \[selection get\]" if {$Nom==""} { set NomX x } else { set NomX $Nom } TouchePour $Clavier "NewButton" "NouveauBouton $w New $NomX $NomDuFichierOrigine" "NoWeb" TouchePour <2> "/same" "NouveauBouton $w Same $NomX $NomDuFichierOrigine" "NoWeb" TouchePour <3> "/auto" "NouveauBouton $w Auto $NomX $NomDuFichierOrigine" "NoWeb" if {$ForValidateOnly} { TouchePour $Clavier "RefuseAll" } TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "lightgrey" TouchePour $Clavier "Description" "AfficheLesDescriptifs $NomDuFichierOrigine MemeOrdre" TouchePour <2> "/all" "AfficheLesDescriptifs $NomDuFichierOrigine Natif" TouchePour <3> "/page" "AfficheLesDescriptifs \[set PagePropre($w)\] MemeOrdre {} {} {} $Nom" TouchePour $Clavier "Taxonomy" "DessineMoiLaTaxonomy $NomDuFichierOrigine" TouchePour <2> "/all" "AfficheLesDescriptifs $NomDuFichierOrigine Natif {} {} {OX OC} $Nom" TouchePour <3> "/page" "AfficheLesDescriptifs \[set PagePropre($w)\] MemeOrdre {} {} {OX OC} $Nom" TouchePour $Clavier "FragFrom" "FragFrom $Nom" TouchePour $Clavier "SeeDNA" "SeeADN $NomDuFichierOrigine" TouchePour <2> "/6PAB" "VoisinADN $Nom" TouchePour <3> "/6txt" "VoisinADN \[set PagePropre($w)\]" TouchePour $Clavier "Compare to other" "CompareADN \[set PagePropre($w)\]" TouchePour $Clavier "Frag" "IsoleUnDomaine $Nom" TouchePour <2> "/from page" "IsoleUnDomaine \[set PagePropre($w)\]" TouchePour <3> "/nuc" "IsoleEtAfficheUnDomaineNucleique \[set PagePropre($w)\]" TouchePour $Clavier "PeptidSort" "AffichePeptideSort $Nom \[set PagePropre($w)\]" TouchePour <2> "/Enzym" "AffichePeptideSort $Nom \[set PagePropre($w)\] ShowEnzymes" TouchePour $Clavier "Res Enzym" "CheckRestrictionEnzymes for_$Nom All \[set PagePropre($w)\]" TouchePour <2> "/Sign" "CheckRestrictionEnzymes for_$Nom Signals \[set PagePropre($w)\]" TouchePour <3> "/Ask" "CheckRestrictionEnzymes for_$Nom \[Entre NdeI\] \[set PagePropre($w)\]" TouchePour $Clavier "Res Map $Nom" "RestrictionMap $Nom" TouchePour <3> "/Page" "RestrictionMap \[set PagePropre($w)\]" TouchePour $Clavier "Codon usage" "AfficheUsageDesCodons $Nom" TouchePour <2> "/Rare" "AfficheSlidingCodonRare \[set PagePropre($w)\]" TouchePour <3> "/CPS" "Cps \[selection get\] {} {} Show" TouchePour $Clavier "Hydrophobicities" "AfficheVariable \[Hydrophobicities $NomDuFichierOrigine\] AutoManiere" TouchePour $Clavier "OrthoFamily" "AfficheLesOrthologuesFamiliersDuBlastP $Nom" TouchePour $Clavier "Cluster X-HDA" "AfficheLeClusterXHda $Nom" TouchePour <2> "/MSF" "AfficheMsfFamily $Nom" TouchePour $Clavier NouvelleGamme if { $Nom!="" && ! [regexp "SansSeeAby" $Maniere]} { TouchePour $Clavier NouvelleCouleur "lightgreen" set Nicolas "Nicolas" set Moumou "Ordali" if {[OnTraiteUnGenome]} { set SecondMSF "Para" } if {[OnTraiteUneCollection]} { set SecondMSF "MSF2" } if {[OnTraiteDesCDNAs]} { set SecondMSF "Loc" ; set Moumou "allBN" ; set Nicolas "allBP"} if {[PreFixe]=="PEROX"} { set SecondMSF "Loc" ; set Moumou "allBN" ; set Nicolas "allBP"} if {[OnTraiteBalibase]} { TouchePour $Clavier "Macsim Rsf" "DessineMoiUnRSF $Nom" "" "cyan" TouchePour <2> "/Xml" "SeeAby MacsimXml $Nom" TouchePour <3> "/Html" "HtmlFromXmlMacsim $Nom {} ShowHtml" } TouchePour $Clavier "Seq" "SeeAby Seq $NomDuFichierOrigine" TouchePour <2> " /nuc" "SeeAby Nuc $NomDuFichierOrigine" TouchePour <3> " /Show" "SeeAby Show $NomDuFichierOrigine" TouchePour $Clavier "Any" "SeeAby MemoAny $NomDuFichierOrigine" TouchePour <2> "/choose" "SeeAby ChooseAny $NomDuFichierOrigine" TouchePour <3> "/all" "SeeAby AllAny $NomDuFichierOrigine" TouchePour $Clavier "Blast" "SeeAby MemoBlast $NomDuFichierOrigine" TouchePour <2> "/choose" "SeeAby ChooseBlast $NomDuFichierOrigine" TouchePour <3> "/all" "SeeAby AllBlast $NomDuFichierOrigine" TouchePour $Clavier "Msf" "SeeAby MemoMsf $NomDuFichierOrigine" TouchePour <2> "/choose" "SeeAby ChooseMsf $NomDuFichierOrigine" TouchePour <3> "/all" "SeeAby AllMsf $NomDuFichierOrigine" TouchePour $Clavier "ChangeDefaultDirs" "ReParDefaut" TouchePour $Clavier "Ordali" "Ordali $Nom" if {[file exists "[RepertoireDuGenome]/taxobla"]} { TouchePour <2> " /Taxo" "TaxonomyDuBlast $Nom" TouchePour <3> "/Outliers" "OutlierOrganismInBlast $Nom" } if {[PourWscope]} { TouchePour $Clavier "Jalview" "JalviewHtml $Nom" } if {[file exists "[RepertoireDuGenome]/blastxmultiples"]} { TouchePour $Clavier "Frameshift BlastX" "AfficheLesBlastXDesHitsMultiples $Nom" TouchePour <2> "/Loc" "FaireLire \[PossibleFrameshift $Nom\]" } if {[file exists "[RepertoireDuGenome]/fiches/Domaines"]} { TouchePour $Clavier "Show Domains" "IllustreLesDomaines $Nom" } TouchePour $Clavier "Files" "SeeAby Other $NomDuFichierOrigine" TouchePour <2> "/Other" "SeeAby OnList $NomDuFichierOrigine" TouchePour <3> "/WithDir" "ShowDirectories \[set PagePropre($w)\] $NomDuFichierOrigine" if {[OnTraiteSpine]} { TouchePour $Clavier "Xml Spine" "SeeAby SpineXml $NomDuFichierOrigine" "" "Purple" TouchePour <2> "/Macsim" "SeeAby MacsimXml $NomDuFichierOrigine" TouchePour <3> "/Html" "HtmlFromXmlMacsim $Nom {} ShowHtml" } } if { [regexp "AvecBlaste" $Maniere] || [regexp "AvecFormate" $Maniere] } { TouchePour $Clavier NouvelleCouleur "lightgreen" TouchePour $Clavier "Run BlastP" "Blaste P \[set PagePropre($w)\]" TouchePour <2> "/tN" "Blaste tN \[set PagePropre($w)\]" TouchePour <3> "/Choose" "Blaste Choix \[set PagePropre($w)\]" TouchePour $Clavier "GenScan" "RunGenScanEtAffiche \[set PagePropre($w)\]" TouchePour <2> "/RepMasker" "RunRepeatMaskerEtAffiche \[set PagePropre($w)\]" TouchePour $Clavier NouvelleCouleur "lightgreen" TouchePour $Clavier "Change format" "AfficheVariable \[FormateSequence \[set PagePropre($w)\]\] AvecFormateAvecBlasteSansFetch [file tail $NomDuFichierOrigine]" TouchePour <2> "/sel." "AfficheVariable \[FormateSequence \[selection get\]\] AvecFormateAvecBlasteSansFetch part_of_[file tail $NomDuFichierOrigine]" TouchePour $Clavier "Medline all" "AfficheTousLesMedlinesDeLaSequence \[set PagePropre($w)\]\]" TouchePour <2> "/sel." "AfficheMedline \[selection get\]" } if { [regexp "AvecAligneurs" $Maniere] } { TouchePour $Clavier "DbCl +Anchors" "RunDbClustal \[selection get\] $NomDuFichierOrigine" TouchePour <2> " / -" "RunDbClustal \[selection get\]" TouchePour $Clavier "Tfas of selection" "CreeUnTFAs \[selection get\] ShowIt" TouchePour $Clavier "BlastBase sel" "CreeUneBanqueBlast \[selection get\] [file tail $NomDuFichierOrigine]" TouchePour <2> "/all" "CreeUneBanqueBlastDuBlast $NomDuFichierOrigine" TouchePour <3> "/+q" "CreeUneBanqueBlastDuBlast $NomDuFichierOrigine AvecQuery" } if { [regexp "AvecShow" $Maniere] } { TouchePour $Clavier "Show" "AfficheLesFichiers \[selection get\] AutoManiereAvecShow" TouchePour <2> "/File" "AfficheLesFichiers \[selection get\] AutoManiereAvecShow" TouchePour <3> "/Split" "OffreLesMots \[selection get\]" } if { [regexp "AvecEtudeMSF" $Maniere] } { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "lightblue" TouchePour $Clavier "Msfcolor" "DessineMoiUnMSF \[set PagePropre($w)\] $NomDuFichierOrigine Ask" TouchePour <2> " /Xml" "Ordali $Nom ForceXml" TouchePour <3> " /RSF" "DessineMoiUnRSF $NomDuFichierOrigine" TouchePour $Clavier "ClustalX" "ClustalX \[set PagePropre($w)\] $NomDuFichierOrigine" TouchePour <2> " /NJPlot" "NJPlotMSF \[set PagePropre($w)\] $NomDuFichierOrigine" TouchePour <3> " /ATV" "ATV $NomDuFichierOrigine EnExec" TouchePour $Clavier "NorMD" "FaireLire \"memorized NorMD \[MDScore $NomDuFichierOrigine\]\"" TouchePour <2> "/Comput" "FaireLire \"just computed NorMD \[MDScore \[set PagePropre($w)\] IsText\]\"" TouchePour <3> "/2Word" "MSF2WordML $NomDuFichierOrigine" TouchePour $Clavier "StartStop" "TestCodonStartEtDeletionDuMSF $NomDuFichierOrigine" TouchePour <2> " /Sort" "AfficheReordonneMSF \[set PagePropre($w)\] Ask $NomDuFichierOrigine" TouchePour $Clavier "Ordali" "Ordali $Nom [RepertoireDuGenome]/macsimXml/$Nom.xml {} {} ForceXml" TouchePour <2> " /disp" "OrdaliDuTexteMSF \[set PagePropre($w)\] $NomDuFichierOrigine -viewer" TouchePour <3> " /sel." "OrdaliDeLaSelection \[set PagePropre($w)\] \[selection get\] $NomDuFichierOrigine" TouchePour $Clavier "MSF familiar orgs" "AfficheMsfOfFamiliarOrganisms $NomDuFichierOrigine" TouchePour $Clavier "MSF Reduce" "AfficheReduceMsf $NomDuFichierOrigine" TouchePour <2> "/Dist" "AfficheSortedDistances $NomDuFichierOrigine" TouchePour <3> "AliInOut" "AfficheAliInOut $Nom" if {[PreFixe]=="TFIIH"} { TouchePour $Clavier "Pid2a2" "Pid2a2 $Nom $NomDuFichierOrigine" } } if { [regexp "AvecGenoret" $Maniere] } { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "ForestGreen" TouchePour $Clavier "Show All Uploads" "ShowUploads" if {[regexp "AvecAllUploads" $Maniere]} { TouchePour $Clavier "Show sel. Upload" "ShowUpload \[selection get\]" } if {[regexp "AvecUpload" $Maniere]} { TouchePour $Clavier " SetGUs of sel." "SetGUsWithUpload $NomDuFichierOrigine" } TouchePour $Clavier "ShowGUs" "ShowGUs" if {[regexp "AvecGUsList" $Maniere]} { TouchePour <2> "/RemGUs" "RemGUs \[selection get\]" } } if { [regexp "AvecXbgs" $Maniere] } { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "Magenta" TouchePour $Clavier "Spine" "SpineSummary Show" TouchePour $Clavier "XML File" "CreateSpineXML" TouchePour <2> "/Show" "CreateSpineXML Show" TouchePour <3> "/sel" "CreateSpineXML \[selection get\] Show" TouchePour $Clavier "Search Organisms" "OrganismeDesXGSs" TouchePour $Clavier "Show SpineOnly" "AfficheLesSpines \[set PagePropre($w)\]" TouchePour <2> " /No" "AfficheLesSpines \[set PagePropre($w)\] KO" TouchePour $Clavier "Change Owner" "MemeOwner \[selection get\]" TouchePour <2> "/XGS" "XGSPourOwner \[selection get\]" TouchePour $Clavier "Def" "AfficheSpineDefinitions" TouchePour <2> " /Stat" "HistoDesSpineTasks AllToGether Show" TouchePour <3> " /SpOk" "HistoDesSpineTasks SpineOnly Show" } if { [regexp "AvecLog" $Maniere] } { TouchePour $Clavier "Log" "AfficheLogDuMSF $NomDuFichierOrigine" } if { [regexp "AvecAide" $Maniere] } { TouchePourClavier $Clavier "?" "AideEnLigne \[selection get\]" "" "blue" } if { [regexp "AvecSmallMSF" $Maniere] } { TouchePour $Clavier "Small align" "ShowDifferentielBlastAlignement \[selection get\]" "" "green" } if { [regexp "AvecProfileSegments" $Maniere] } { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "green" TouchePour $Clavier "ProfilSeg align" "AfficheProfileSegment \[selection get\] $Maniere $NomDuFichierOrigine" } if { [regexp "AvecSegAlignement" $Maniere] } { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "lightblue" TouchePour $Clavier "Blast segment align" "AfficheLesAliEnPage \[set PagePropre($w)\] \[selection get\] $NomDuFichierOrigine" TouchePour $Clavier "Mosaic" "IllustreLeBlast $NomDuFichierOrigine" TouchePour <2> "/Map" "AfficheMapping $NomDuFichierOrigine \[selection get\]" TouchePour <3> "/DrawBlast" "DrawBlast $NomDuFichierOrigine" TouchePour $Clavier "Localise 0.001" "AfficheChaqueSegmentDuBlastN $Nom $NomDuFichierOrigine" TouchePour <2> "/sel." "AfficheChaqueSegmentDuBlastN $Nom $NomDuFichierOrigine \[selection get\]" TouchePour $Clavier "Chromos" "IllustreLesChromosomes" TouchePour <2> "/Histo" "ChoixHistogramme" TouchePour $Clavier "HitsPN" "LesBandelettesDuBlast $NomDuFichierOrigine {} {} OnGraphe" TouchePour <2> "/SeqSizes" "TailleDesSequencesAAligner $Nom" TouchePour <3> "/ All" "LesEntetesChevronneesDuBlast \[set PagePropre($w)\] Show $NomDuFichierOrigine" TouchePour $Clavier "Bandes" "LesElusDuBlastPParBandelettes $NomDuFichierOrigine {} Show" TouchePour <2> "/Mounir" "LesElusDuBlastPParMounir $NomDuFichierOrigine {} Show" TouchePour <3> "/AuChoix" "LesElusDuBlastPParAuChoix $NomDuFichierOrigine {} Show" TouchePour $Clavier "Ballast" "AfficheBallastDuBlastP $NomDuFichierOrigine $Nom" TouchePour $Clavier "Rsf" "AfficheLesSortiesDuBallast $NomDuFichierOrigine rsf" TouchePour <2> "/lmsp" "AfficheLesSortiesDuBallast $NomDuFichierOrigine lmsp" TouchePour <3> "/pssm" "AfficheLesSortiesDuBallast $NomDuFichierOrigine pssm" TouchePour $Clavier "TopSeq" "AfficheLesSortiesDuBallast $NomDuFichierOrigine topseq" TouchePour <2> "/Tabl" "AfficheLesSortiesDuBallast $NomDuFichierOrigine table" TouchePour <3> "/Anch" "AfficheLesSortiesDuBallast $NomDuFichierOrigine anchors" if {[regexp -nocase "psiblast" $NomDuFichierOrigine]} { TouchePour $Clavier "SplitPsiBlast" "ShowLesBlastsDuPsiBlast $NomDuFichierOrigine" "lightgreen" TouchePour <2> "/first" "ShowLesBlastsDuPsiBlast $NomDuFichierOrigine 1" TouchePour <3> "/last" "ShowLesBlastsDuPsiBlast $NomDuFichierOrigine end" } regsub {\.blast[pn]?$} $NomDuFichierOrigine "" NomDuFasta append NomDuFasta ".fasta" if {[file exists $NomDuFasta]} { TouchePour $Clavier "Show fasta" "AfficheVariable \[ContenuDuFichier $NomDuFasta\]" "blue" } } if { [regexp "AvecOpCom" $Maniere] } { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "pink" TouchePour $Clavier "Operon ORFs" "ORFsDesOperonsCommuns \[selection get\] ORFsOfOperon" } if { ! [regexp "SansFetch" $Maniere]} { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "orange" set FichierAussi "" if {[OnTraiteUneCollection]} { set FichierAussi "$NomDuFichierOrigine" } if {[OnTraiteDesCDNAs]} { set FichierAussi "OnVeutNucEMBL" } TouchePour $Clavier "Fetch" "AfficheFetch \[selection get\] $FichierAussi" TouchePour <2> " /nature" "AfficheFetch \[selection get\] OnVeutNature" TouchePour <3> "/seq" "AfficheFetch \[selection get\] $NomDuFichierOrigine" TouchePour $Clavier "Split in words" "OffreLesMots \[selection get\]" TouchePour $Clavier "Contig" "AfficheContigComplet \[selection get\]" TouchePour <2> "/GenScan" "AfficheGenscanDuContig \[selection get\]" TouchePour $Clavier "Kegg" "IllustreLesPathwayDeLaBoite $Nom" TouchePour <2> "/Dev" "IllustreDevStage \[list $Nom\] 3 [Fiches]/SelectedEST" TouchePour <3> "/Tissue" "IllustreTissueType \[list $Nom\] {} 3 \[Fiches\]/SelectedEST" TouchePour $Clavier "Gene Identity Card" "GeneIdentityCard $Nom" TouchePour $Clavier "Show GOs" "ShowGOs $Nom" TouchePour $Clavier NouvelleCouleur "cyan" if {[regexp "Tparva" [RepertoireDuGenome]]} { TouchePour $Clavier "BlastP Sc" "ShowBlastFromSelection \[selection get\] blastpScReciproc" TouchePour <2> "/Yeast" "YEAHshowYeast \[selection get\]" TouchePour <3> " /Info" "Reciproc $Nom ShowInfo" TouchePour $Clavier "BlastP Eh" "ShowBlastFromSelection \[selection get\] blastpEhistolica" TouchePour <2> "/ Pf" "ShowBlastFromSelection \[selection get\] blastpPfalciparumReciproc" TouchePour <3> "/ Tb" "ShowBlastFromSelection \[selection get\] blastpTbruceiReciproc" } } if { [regexp "AvecRecap" $Maniere]} { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "ForestGreen" TouchePour $Clavier "Blast" "SeeAby MemoBlast \[selection get\]" TouchePour <2> "/choose" "SeeAby ChooseBlast \[selection get\]" TouchePour <3> "/all" "SeeAby AllBlast \[selection get\]" TouchePour $Clavier "BlastP" "SeeAby blastp \[selection get\]" TouchePour <2> "/RefseqP" "SeeAby blastprefseq-prot \[selection get\]" TouchePour $Clavier "Blastn wgs" "SeeAby blastnwgs \[selection get\]" TouchePour $Clavier "TBlastN wgs" "SeeAby tblastnwgs \[selection get\]" TouchePour <2> "/Genomes" "SeeAby tblastncompletegenomes \[selection get\]" } if {[OnTraiteDesClones]} { TouchePour $Clavier "My Oligos" "IllustreLesPrimers $Nom" "" "Magenta" TouchePour <2> "/vPPCR" "ShowLesVirtualPPCRsDuPGS $Nom" TouchePour <3> "/VEs" "ShowLesVEDidierDuPGS $Nom" if {1} { TouchePour $Clavier "vPpcr " "ShowVirtualPPCR \[selection get\]" "" "Magenta" TouchePour <2> "/choose" "ShowVirtualPPCR \[selection get\] Choose" TouchePour <3> "/all" "ShowVirtualPPCR \[selection get\] All" TouchePour $Clavier "Rec1 of vPPCR" "ShowLesRec1DuVirtualPPCR \[selection get \]" "" "Magenta" TouchePour $Clavier "Rec1 or 2 or fusion " "ShowCorrespondingFile \[selection get\]" "" "Magenta" TouchePour $Clavier "ShowVEDidier" "VEDidier \[selection get\] Show" "" "Magenta" } } if { ! [regexp "SansFetch" $Maniere] && [OnTraiteUneCollection] && ! [OnTraiteDesCDNAs] && [file tail $NomDuFichierOrigine]!=$Nom} { TouchePour $Clavier "Co-Fetch" "AfficheAssocie $NomDuFichierOrigine copains" TouchePour <2> "/BlastP" "AfficheAssocie $NomDuFichierOrigine coblastp" TouchePour <3> "/MSF" "AfficheAssocie $NomDuFichierOrigine coclustalw" TouchePour $Clavier "Co-Info" "AfficheAssocie $NomDuFichierOrigine coinfos" TouchePour <2> "/tBlastN" "AfficheAssocie $NomDuFichierOrigine cotblastn" TouchePour $Clavier "Co-modify" "InformeLeCopain $NomDuFichierOrigine" TouchePour $Clavier "Co-rsf" "AfficheLesSortiesDuBallast $NomDuFichierOrigine rsf" TouchePour <2> "/lmsp" "AfficheLesSortiesDuBallast $NomDuFichierOrigine lmsp" TouchePour <3> "/pssm" "AfficheLesSortiesDuBallast $NomDuFichierOrigine pssm" } if {[OnTraite "MSP"]} { TouchePour $Clavier NouvelleCouleur "magenta" TouchePour $Clavier "SeqCalage" "SeqCalage $Nom" } if {[OnTraite "CilioCode"]} { TouchePour $Clavier NouvelleCouleur "magenta" TouchePour $Clavier "Cilio ForCilio" "CilioBlastSummary $Nom Show blastpForCilio" TouchePour <2> "/Expect" "OrganismsInCilioBlast $Nom Graph blastpForCilio" TouchePour $Clavier "Cilio Protall" "CilioBlastSummary $Nom Show blastpProtall" TouchePour <2> "/Expect" "OrganismsInCilioBlast $Nom Graph blastpProtall" TouchePour $Clavier "Cilio Ortholog" "CilioBlastSummary $Nom Show blastpBanqueOrthologs" TouchePour <2> "/Expect" "OrganismsInCilioBlast $Nom Graph blastpBanqueOrthologs" } if {[OnTraiteDesClones]} { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "magenta" if {[regexp "AvecOli" $Maniere]} { TouchePour $Clavier "Oligo " "ShowOli \[selection get\]" TouchePour <2> "/choose" "ShowOli \[selection get\] Choose" TouchePour <3> "/all" "ShowOli \[selection get\] All" TouchePour $Clavier "ShowBlastN" "ShowBlastOfOligo \[selection get\]" TouchePour <2> "/Order" "AfficheFournisseur \[selection get\]" } if {[regexp "AvecShowItsOligos" $Maniere]} { set NA "" if {[regexp "AvecShowItsOligos_NA" $Maniere]} { set NA "_NA" } TouchePour $Clavier "Show its oligos" "ShowItsOligos \[selection get\] $NA" } if {[regexp "AvecFiOl" $Maniere]} { TouchePour $Clavier "ShowOligosFiles" "ShowOligosFiles \[selection get\]" } if {[regexp "AvecVirtualPPCR" $Maniere]} { TouchePour $Clavier "vPpcr " "ShowVirtualPPCR \[selection get\]" TouchePour <2> "/choose" "ShowVirtualPPCR \[selection get\] Choose" TouchePour <3> "/all" "ShowVirtualPPCR \[selection get\] All" TouchePour $Clavier "Rec1 of vPPCR" "ShowLesRec1DuVirtualPPCR \[selection get \]" } if {[regexp "AvecShowItsPPCR" $Maniere]} { set NA "" if {[regexp "AvecShowItsPPCR_NA" $Maniere]} { set NA "_NA" } TouchePour $Clavier "Show its PPCR" "ShowItsPPCR \[selection get\] $NA" } if {[regexp "AvecTriFragments" $Maniere]} { TouchePour $Clavier "SortFragments all" "TriFragments \[set PagePropre($w)\] Ask" TouchePour <2> "/sel." "TriFragments \[selection get\] Ask" } } if {[regexp "AvecTaxNCBI" $Maniere]} { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "lightgreen" TouchePour $Clavier "BrowseTaxNCBI" "BrowseTaxNCBI" TouchePour $Clavier "Sel. Parent" "BrowseTaxNCBI \[selection get\] Parent" TouchePour <2> "/Children" "BrowseTaxNCBI \[selection get\] Children" TouchePour <3> "/?" "BrowseTaxNCBI \[selection get\]" TouchePour $Clavier "All Parent" "BrowseTaxNCBI \[set PagePropre($w)\] Parent" TouchePour <2> "/Children" "BrowseTaxNCBI \[set PagePropre($w)\] Children" TouchePour <3> "/?" "BrowseTaxNCBI \[set PagePropre($w)\]" } if {$ForValidateOnly} { TouchePour $Clavier "ReAcceptAll" } #rR 2016/02/02 On a peut-être Postponé des TouchePour ;) set LesPostpone [TouchePour "GetPostponeAndReset"] set Cla $w.buttons foreach Action $LesPostpone { regsub -all "@F@" $Action $w Action if {[regexp "<" [lindex $Action 0]]} { TouchePour {*}$Action } else { TouchePour $Cla {*}$Action } } set Largeur 80 set Hauteur 35 if { [regexp "GrandeLargeur" $Maniere] } { set Largeur 128 } if { [regexp {SetWidth([0-9]+)} $Maniere Match Width] } { set Largeur $Width } if { [regexp {SetHeight([0-9]+)} $Maniere Match Height] } { set Hauteur $Height } if { ! [PourWscope]} { frame $w.frame -borderwidth 10 pack $w.frame -side top -expand yes -fill both scrollbar $w.frame.yscroll -command "$w.frame.list yview" scrollbar $w.frame.xscroll -command "$w.frame.list xview" -orient horizontal listbox $w.frame.list -width $Largeur -height $Hauteur -setgrid 1 -yscroll "$w.frame.yscroll set" -xscroll "$w.frame.xscroll set" -selectmode extended -background "LightGrey" -foreground "Black" -selectbackground "LightYellow" -selectforeground "Black" -font [list Courier [PolicePourListBox]] bind $w.frame.list "<4>" "%W yview scroll 1 units" bind $w.frame.list "<5>" "%W yview scroll -1 units" bind $w.frame.list "" "%W xview scroll 1 units" bind $w.frame.list "" "%W xview scroll -1 units" grid $w.frame.list -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $w.frame 0 -weight 1 -minsize 0 grid columnconfig $w.frame 0 -weight 1 -minsize 0 set nLignes 0 foreach Ligne [split [set PagePropre($w)] "\n"] { incr nLignes if { [regexp "AvecSegAlignement" $Maniere] && [regexp {^>[\./a-zA-Z]} $Ligne] && ! [regexp "AvecTout" $Maniere]} { break } $w.frame.list insert end $Ligne } } if {[PourWscope]} { set R [Html_TextToListbox [set PagePropre($w)] $w $Titre $Header "" $Maniere] if { [regexp "AvecRetour" $Maniere] } { return $R global VariableDeRetour package require Tk tkwait variable VariableDeRetour($w) set v $VariableDeRetour($w) LogWscope "apres tkwait de $Var valeur $v" unset VariableDeRetour($w) # catch {destroy $w} return $v } return $R } if {$nLignes<30} { $w.frame.list configure -height [expr $nLignes+3] } if {[regexp "AvecEtude" $Maniere] && $Nom!=""} { Illumine $Nom $w } bind $w.frame.list <3> "DecrisLaLigne %W %x %y" bind $w.frame.list "DecrisLaLigne %W %x %y Efface" if {[regexp "AvecRetour" $Maniere]} { $w.frame.list configure -background "lightgreen" } if { [regexp "AvecRetourMaisSansWait" $Maniere] } { return $w } if { [regexp "AvecRetour" $Maniere] } { tkwait variable VariableDeRetour($w) set v $VariableDeRetour($w) unset VariableDeRetour($w) catch {destroy $w} return $v } else { return $w } } proc AfficheVirtualPPCR {} { set Page [join [VirtualPPCREnStock LesResumes] "\n"] set LesQuois [VirtualPPCREnStock LesQuois] return [AfficheVariable $Page "AvecVirtualPPCR" AllVirtualPPCRs] } proc AfficheZoneContigue {Fichier {Selection ""}} { if {$Selection==""} { set Selection "FirstOnly" } if {[regexp "\n" $Selection]} { set AliasALaFin "" foreach Access [split $Selection "\n"] { if {[regexp {^ *Alias } $Access]} { set AliasALaFin $Access continue } AfficheZoneContigue $Fichier $Access } if {$AliasALaFin!=""} { AfficheZoneContigue $Fichier $AliasALaFin } return } set Access "" scan $Selection "%s %s" Nature Access if {$Access==""} { set Access $Nature } set LesHomologues [LesHomologiesDuBlastN $Fichier "AvecLaSeq" "" "SansOrga" $Access] foreach Homo $LesHomologues { set lHomo [split $Homo "\t"] set i -1 set Nom [lindex $lHomo [incr i]] set nCops [lindex $lHomo [incr i]] set nCopsSeq [lindex $lHomo [incr i]] set BanqueId [lindex $lHomo [incr i]] set OrgaHomo [lindex $lHomo [incr i]] set Identities [lindex $lHomo [incr i]] set Expect [lindex $lHomo [incr i]] set DebutQuery [lindex $lHomo [incr i]] set FinQuery [lindex $lHomo [incr i]] set DebutSbjct [lindex $lHomo [incr i]] set FinSbjct [lindex $lHomo [incr i]] set SeqQuery [lindex $lHomo [incr i]] set SeqSbjct [lindex $lHomo [incr i]] set SensSbjct 1 if {$FinSbjct < $DebutSbjct} { set SensSbjct -1 } set iQ $DebutQuery set iQTexte "" set iQTexteEstVide 1 set iS $DebutSbjct set iSTexte "" set iSTexteEstVide 1 set ConMax -1 set ConCourant 0 set ConDebCourantQ -1 set ConDebCourantS -1 set Peigne "" set PeigneN "" set ConDebQ -3 set iP 1 foreach Q [split $SeqQuery ""] S [split $SeqSbjct ""] { if {[expr $iQ%10==0] && $Q!="-" } { set iQTexteEstVide 0 append iQTexte [string range "$iQ " 0 9] } else { if {$iQTexteEstVide} { append iQTexte " " } } if {[expr $iS%10==0] && $S!="-" } { set iSTexteEstVide 0 append iSTexte [string range "$iS " 0 9] } else { if {$iSTexteEstVide} { append iSTexte " " } } if {[string equal -nocase "N" $Q]} { append PeigneN "N" } else { append PeigneN " " } if {[string equal -nocase $Q $S] || [string equal -nocase "N" $Q]} { append Peigne "|" incr ConCourant if {$ConDebCourantQ==-1} { set ConDebCourantP $iP set ConDebCourantQ $iQ set ConDebCourantS $iS } if { ! [info exists ConFinQ]} { set ConFinP $iP set ConFinQ $iQ set ConFinS $iS } if {$ConCourant>$ConMax} { set ConMax $ConCourant set ConFinP $iP set ConFinQ $iQ set ConFinS $iS if {$ConDebQ!=$ConDebCourantQ} { set ConDebP $ConDebCourantP set ConDebQ $ConDebCourantQ set ConDebS $ConDebCourantS } } } else { set ConCourant 0 append Peigne " " set ConDebCourantP -1 set ConDebCourantQ -1 set ConDebCourantS -1 } incr iP if {$Q!="-"} { incr iQ } else { append iQTexte " " } if {$S!="-"} { incr iS $SensSbjct } else { append iSTexte " " } } set iDebPeigne [expr $ConDebP - 1] set iFinPeigne [expr $ConFinP - 1] set lPeigne [expr $iFinPeigne - $iDebPeigne +1] set Peigne [string replace $Peigne $iDebPeigne $iFinPeigne [string repeat "+" $lPeigne]] if {$SensSbjct==1} { set BonConDebS $ConDebS set BonConFinS $ConFinS set EtLeSens "" } else { set BonConDebS $ConFinS set BonConFinS $ConDebS set EtLeSens "CAUTION: reverse" } lappend LaPage "$Access hit in $Fichier : $lPeigne contigous identical bases" lappend LaPage [format "%5d %5d %s" $ConDebQ $ConFinQ "from sequenced"] lappend LaPage [format "%5d %5d %s" $BonConDebS $BonConFinS "from $Access $EtLeSens"] global TextePourInformeVerificationSequencage set TextePourInformeVerificationSequencage "$BonConDebS-$BonConFinS" lappend LaPage $PeigneN lappend LaPage $iQTexte lappend LaPage $SeqQuery lappend LaPage $Peigne lappend LaPage $SeqSbjct lappend LaPage $iSTexte set Page [join $LaPage "\n"] AfficheVariable $Page "" "${Fichier}_$Access" } } proc AfficheZonesClustering {} { global Defauts WOrdali NomTextSeq LNOrdali if {[TypeAli] eq "pasdali"} {return} $NomTextSeq configure -state normal $NomTextSeq tag configure TagZoneClus -background cyan set bt $WOrdali(BoutZones) if {! [EtatBouton $bt]} { set Lz [lindex [ZonesClustering] 0] if {$Lz eq "all"} {set Lz [list [list 0 end]]} foreach z $Lz { lassign $z x1 x2 set i 1 foreach n $LNOrdali { if {$n ne ""} { lappend ltag $i.$x1 $i.$x2 } incr i } } $NomTextSeq tag add TagZoneClus {*}$ltag $bt configure -relief sunken -background red -foreground white } else { $NomTextSeq tag remove TagZoneClus 1.0 end $bt configure -relief raised -background cyan -foreground black } update idletasks $NomTextSeq configure -state disabled return } proc AfficheZonesSelectionnees {zone} { global PositionInitiale if {$zone == {}} {return} foreach z $zone { lassign $z d f set PositionInitiale "1.$d" set fin "1.$f" SelectLesColonnes $fin } unset PositionInitiale return } proc AfficheZonesSelectionneesCluster {} { global ZoneClusterisation if {! [info exists ZoneClusterisation]} {return} AfficheZonesSelectionnees $ZoneClusterisation return } proc AfficheZonesSelectionneesSuper {} { global ZoneSuperposition if {! [info exists ZoneSuperposition]} {return} AfficheZonesSelectionnees $ZoneSuperposition return } proc AffyAnno {{Ligne ""} {Colonne ""}} { #attention un nouvelle version global AffyAnno if {$Ligne==""} { set Ligne "ListOf" } if {$Colonne==""} { set Colonne "Header" } if {[info exists AffyAnno($Ligne,$Colonne)]} { return $AffyAnno($Ligne,$Colonne) } if {[info exists AffyAnno("EstCharge")]} { return "" } set AffyAnno("EstCharge") 1 set FichierAffyAnno "[RepertoireDuGenome]/fiches/AffyAnno" if {[file exists $FichierAffyAnno]} { array set AffyAnno [LesLignesDuFichier $FichierAffyAnno] return [AffyAnno $Ligne $Colonne] } set CreeFichierAffyAnno [OuiOuNon "Do I create $FichierAffyAnno ?"] set AffyAnno(ListOf,Header) {} set AffyAnno(ListOf,Index) {} set LesFichiersAffyAnno [list "/genomics/link/affyArrayAnnot/AffyAnno20070309/MGU74v2/MG_U74Av2.na22.annot.csv" "/genomics/link/affyArrayAnnot/AffyAnno20070309/MGU74v2/MG_U74Bv2.na22.annot.csv" "/genomics/link/affyArrayAnnot/AffyAnno20070309/MGU74v2/MG_U74Cv2.na22.annot.csv" "/genomics/link/affyArrayAnnot/AffyAnno20070309/MG430_2.0/Mouse430_2.na22.annot.csv" "/genomics/link/affyArrayAnnot/AffyAnno20070309/MG430A_2.0/Mouse430A_2.na22.annot.csv" ] set LesTetes {} set LesIndex {} foreach CurrentFichierAffyAnno $LesFichiersAffyAnno { Espionne "$CurrentFichierAffyAnno" set Queue [file tail $CurrentFichierAffyAnno] Espionne "$Queue" regsub -nocase {\.[^\.]+$} $Queue "" Queue Espionne "$Queue" LoadTxlAffy $CurrentFichierAffyAnno AffyAnno 0 "," set LesNouvellesTetes $AffyAnno(ListHeaderPlease,$Queue) Espionne "$LesTetes" Espionne "++" Espionne "$LesNouvellesTetes" if {$LesTetes=={}} { set LesTetes $LesNouvellesTetes } if {$LesTetes!=$LesNouvellesTetes} { FaireLire "The headers are different in [join $LesFichiersAffyAnno "\n"]" } LConcat LesIndex $AffyAnno(ListAllPlease,$Queue) } set AffyAnno(ListOf,Header) $LesTetes set AffyAnno(ListOf,Index) $LesIndex if {$CreeFichierAffyAnno} { SauveLesLignes [array get AffyAnno] dans $FichierAffyAnno } return [AffyAnno $Ligne $Colonne] } proc AffyAnnoAllFields {Probe} { foreach Tete [AffyAnno ListOf Header] { lappend LaSortie "[format %33s $Tete] [AffyAnno $Probe $Tete]" } return [join $LaSortie "\n"] } proc AffyAnnoChicken {{Ligne ""} {Colonne ""}} { global AffyAnnoChicken if {$Ligne==""} { set Ligne "ListOf" } if {$Colonne==""} { set Colonne "Header" } if {[info exists AffyAnnoChicken($Ligne,$Colonne)]} { return $AffyAnnoChicken($Ligne,$Colonne) } if {[info exists AffyAnnoChicken("EstCharge")]} { return "" } set AffyAnnoChicken("EstCharge") 1 set version "na27" set FichierAffyAnnoChicken "[RepertoireAffyAnnot $version]/Chicken/AffyAnnoChicken" if {[file exists $FichierAffyAnnoChicken]} { array set AffyAnnoChicken [LesLignesDuFichier $FichierAffyAnnoChicken] return [AffyAnnoChicken $Ligne $Colonne] } set CreeFichierAffyAnnoChicken [OuiOuNon "Do I create $FichierAffyAnnoChicken ?"] set AffyAnnoChicken(ListOf,Header) {} set AffyAnnoChicken(ListOf,Index) {} set LeFichierAffyAnnoChicken "[RepertoireAffyAnnot $version]/Chicken/Chicken.na27.annot.csv" set LesTetes {} set LesIndex {} set Queue [file tail $LeFichierAffyAnnoChicken] regsub -nocase {\.[^\.]+$} $Queue "" Queue LoadTxlAffy $LeFichierAffyAnnoChicken AffyAnnoChicken 0 "," set LesTetes $AffyAnnoChicken(ListHeaderPlease,$Queue) LConcat LesIndex $AffyAnnoChicken(ListAllPlease,$Queue) set AffyAnnoChicken(ListOf,Header) $LesTetes set AffyAnnoChicken(ListOf,Index) $LesIndex if {$CreeFichierAffyAnnoChicken} { SauveLesLignes [array get AffyAnnoChicken] dans $FichierAffyAnnoChicken } return [AffyAnnoChicken $Ligne $Colonne] } proc AffyAnnoHGU133 {{Ligne ""} {Colonne ""}} { global AffyAnnoHGU133 if {$Ligne==""} { set Ligne "ListOf" } if {$Colonne==""} { set Colonne "Header" } if {[info exists AffyAnnoHGU133($Ligne,$Colonne)]} { return $AffyAnnoHGU133($Ligne,$Colonne) } if {[info exists AffyAnnoHGU133("EstCharge")]} { return "" } set AffyAnnoHGU133("EstCharge") 1 set version "na27" set FichierAffyAnnoHGU133 "[RepertoireAffyAnnot $version]/HG-U133+2/AffyAnnoHGU133" if {[file exists $FichierAffyAnnoHGU133]} { array set AffyAnnoHGU133 [LesLignesDuFichier $FichierAffyAnnoHGU133] return [AffyAnnoHGU133 $Ligne $Colonne] } set CreeFichierAffyAnnoHGU133 [OuiOuNon "Do I create $FichierAffyAnnoHGU133 ?"] set AffyAnnoHGU133(ListOf,Header) {} set AffyAnnoHGU133(ListOf,Index) {} set LeFichierAffyAnnoHGU133 "[RepertoireAffyAnnot $version]/HG-U133+2/HG-U133_Plus_2.na27.annot.csv" set LesTetes {} set LesIndex {} Espionne "LeFichierAffyAnnoHGU133 $LeFichierAffyAnnoHGU133" set Queue [file tail $LeFichierAffyAnnoHGU133] regsub -nocase {\.[^\.]+$} $Queue "" Queue LoadTxlAffy $LeFichierAffyAnnoHGU133 AffyAnnoHGU133 0 "," set LesTetes $AffyAnnoHGU133(ListHeaderPlease,$Queue) LConcat LesIndex $AffyAnnoHGU133(ListAllPlease,$Queue) set AffyAnnoHGU133(ListOf,Header) $LesTetes set AffyAnnoHGU133(ListOf,Index) $LesIndex if {$CreeFichierAffyAnnoHGU133} { SauveLesLignes [array get AffyAnnoHGU133] dans $FichierAffyAnnoHGU133 } return [AffyAnnoHGU133 $Ligne $Colonne] } proc AffyAnnoMG430 {{Ligne ""} {Colonne ""}} { global AffyAnnoMG430 if {$Ligne==""} { set Ligne "ListOf" } if {$Colonne==""} { set Colonne "Header" } if {[info exists AffyAnnoMG430($Ligne,$Colonne)]} { return $AffyAnnoMG430($Ligne,$Colonne) } if {[info exists AffyAnnoMG430("EstCharge")]} { return "" } set AffyAnnoMG430("EstCharge") 1 set version "na27" set FichierAffyAnnoMG430 "[RepertoireAffyAnnot $version]/MG430_2.0/AffyAnnoMG430" if {[file exists $FichierAffyAnnoMG430]} { array set AffyAnnoMG430 [LesLignesDuFichier $FichierAffyAnnoMG430] return [AffyAnnoMG430 $Ligne $Colonne] } set CreeFichierAffyAnnoMG430 [OuiOuNon "Do I create $FichierAffyAnnoMG430 ?"] set AffyAnnoMG430(ListOf,Header) {} set AffyAnnoMG430(ListOf,Index) {} set LeFichierAffyAnnoMG430 "[RepertoireAffyAnnot $version]/MG430_2.0/Mouse430_2.na27.annot.csv" set LesTetes {} set LesIndex {} set Queue [file tail $LeFichierAffyAnnoMG430] regsub -nocase {\.[^\.]+$} $Queue "" Queue LoadTxlAffy $LeFichierAffyAnnoMG430 AffyAnnoMG430 0 "," set LesTetes $AffyAnnoMG430(ListHeaderPlease,$Queue) LConcat LesIndex $AffyAnnoMG430(ListAllPlease,$Queue) set AffyAnnoMG430(ListOf,Header) $LesTetes set AffyAnnoMG430(ListOf,Index) $LesIndex if {$CreeFichierAffyAnnoMG430} { SauveLesLignes [array get AffyAnnoMG430] dans $FichierAffyAnnoMG430 } return [AffyAnnoMG430 $Ligne $Colonne] } proc AffyAnnot {{Value ""}} { global AffyAnnot if {$Value!=""} { set AffyAnnot $Value } if { ! [info exists AffyAnnot]} { AffyAnnot "[GxHome]/AffyAnnot" } return $AffyAnnot } proc AffyDsRefGene {FichierAffyAnnot} { #marche pas car affy ne donne pas les coordonnes de la target sequence mais de la consensus/exemplar sequence set Version [InterrogeFichierAffyAnnotRapide $FichierAffyAnnot "genome-version-ucsc" "version"] set FichierRefGene [CorresVersionGenomeEtFichierRefGene $Version] Espionne "Version $Version" Espionne "FichierRefGene $FichierRefGene" foreach Ps [InterrogeFichierAffyAnnot $FichierAffyAnnot ListOf Id] { set ResultCur {} set Align [InterrogeFichierAffyAnnot $FichierAffyAnnot $Ps Alignments] Espionne "" Espionne "$Ps $Align" if {$Align=="---"} {lappend ResultCur "Pas Loc"; Espionne "ResultCur $ResultCur"; continue} regsub -all "///" $Align "#" Align regsub -all "//" $Align "@" Align set LesLocCompletes [split $Align "#"] foreach LocComplete $LesLocCompletes { set ResultCur {} set Loc [lindex [split [string trim $LocComplete] "@"] 0] set Loc [string trim $Loc] Espionne "$Loc" set DetailLoc [split $Loc ": -"] set DetailLoc2 [split $Loc "\(\)"] set ChromAffy [lindex $DetailLoc 0] set StartAffy [lindex $DetailLoc 1] set StopAffy [lindex $DetailLoc 2] set SensAffy [lindex $DetailLoc2 1] Espionne "LocInBetween $StartAffy $Version $ChromAffy Vide $StopAffy :" set Result [LocInBetween $StartAffy $Version $ChromAffy "" $StopAffy] Espionne "Result $Result" if {[regexp "^Between" $Result]} { lappend ResultCur "Outside from Refseq" } else { foreach In $Result { set SensIn [lindex [split $In " "] 3] if {$SensIn==$SensAffy} {lappend ResultCur $In} } } Espionne "ResultCur $ResultCur" } } } proc AffyFileToMySql {AffyFile organism} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "AffyFileToMySql|$timestamp : Start" # Prepare un fichier CSV avec des ";" en remplacant les espaces par des "_" et les ";" par des tabulations set FichierIn [open "$Path.csv" "r"] set FichierOut [open "/tmp/Affy.txt" "w"] set Alire [read $FichierIn] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "AffyFileToMySql|$timestamp : Replacements" set Alire [regsub -all -nocase -line "\",\"" $Alire ";"] set Alire [regsub -all -nocase -line "\"" $Alire ""] set Alire [regsub -all -nocase -line "Jun 30, 2009" $Alire "200907"] set Alire [regsub -all -nocase -line "///" $Alire ","] set Aecrire [regsub -all -nocase -line " // " $Alire ","] puts $FichierOut $Aecrire close $FichierIn close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "AffyFileToMySql|$timestamp : Import into mySQL" exec "/usr/bin/mysqlimport --delete --user=anno --password=ceji387. --host=[LbgiHost] --fields-terminated-by=';' ucsc$organism /home/anno/Affy.txt" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "AffyFileToMySql|$timestamp : End" } proc AffymetrixAccess {Nom} { return [ExtraitInfo $Nom "AffymetrixAccess"] } proc AffymetrixAssocie {} { global AffymetrixAssocie global RepertoireDuGenome if {[info exists AffymetrixAssocie]} { if {$AffymetrixAssocie=="NoAssociatedAffymetrix"} { return "" } return $AffymetrixAssocie } set FichierAA "$RepertoireDuGenome/fiches/affymetrixassocie" if {[file exists $FichierAA]} { scan [ContenuDuFichier $FichierAA] "%s" AffymetrixAssocie if {$AffymetrixAssocie=="NoAssociatedAffymetrix"} { return "" } return $AffymetrixAssocie } set D "" while {$D==""} { if { ! [OuiOuNon "Do You want to correlate with an associated Affymetrix Gscope ?" 0]} { set D "NoAssociatedAffymetrix" break } FaireLire "I need to know the associated Affymetrix directory.\nPlease browse for it." set D [tk_chooseDirectory -mustexist 1 -initialdir "$RepertoireDuGenome/.."] if {$D==""} { set D [Entre "NoAssociatedAffymetrix"] } } set AffymetrixAssocie [file tail $D] Sauve $AffymetrixAssocie dans $FichierAA if {$AffymetrixAssocie=="NoAssociatedAffymetrix"} { return "" } return $AffymetrixAssocie } proc Affymetrix_Chips {} { Wup "Permet de rendre le nom des repertoires des puces disponibles" global RepAffy set RepAffy [Affymetrix_Dir] if {! [file exists $RepAffy]} { set RepAffy "/genomics/g1/AffyProbes/Affymetrix/Full" if {! [file exists $RepAffy]} { return "" } } set LesPuces [glob -nocomplain -directory "$RepAffy" -tails -types "d" "*"] return "$LesPuces" } proc Affymetrix_Dir {{Dir ""}} { #Localisation du repertoire contenant les projets ou donnees fournis par Affymetrix global Affymetrix_Dir if {$Dir == ""} { if {[info exists Affymetrix_Dir] && [file exists $Affymetrix_Dir]} {return $Affymetrix_Dir} set Affymetrix_Dir "/genomics/g1/AffyProbes/Affymetrix/Full" } else { if {[file exists $Dir]} { set Affymetrix_Dir "$Dir" } } #if {[info exists Affymetrix_Dir] && [file exists $Affymetrix_Dir]} {return $Affymetrix_Dir} return $Affymetrix_Dir } proc AgentsDuBlock {d f {n ""}} { global TAg T LNOrdali MotifLen Sequences Sref if {$n eq ""} { set Lnoms $LNOrdali } else { set Lnoms $n } set LLag {} set nOk [expr {[llength $Lnoms] * 2}] for {set i $d} {$i <= ($f - $MotifLen + 1)} {incr i} { #lappend log "\n$i:" set Lag {} foreach n $Lnoms { # check if gaps between d and f set s [string range [set Sref($n)] $d $f] if {[set ig [string first "." $s]] > -1} { puts "gap in $n pos $ig :\n$s" break } else { set pos [AbsRef2Seq $n $i] foreach ag $TAg($n) { if {$TAg($ag,$n,dep) == $pos} { lappend Lag $n $ag break } } } } if {[llength $Lag] == $nOk} { lappend LLag $Lag } else { puts "manque block !!" } } return $LLag } proc AgentsRemoveColsGaps {} { global Sequences LNOrdali LSOrdali #DonneMemeLongueur Sequences #puts "\nEntre :" #ShowAlignmentAgent set Lseq [list] foreach n $LNOrdali { lappend Lseq [set Sequences($n)] } set lmax [string length [lindex $Lseq 0]] unset Sequences LSOrdali for {set i 0} {$i < $lmax} {incr i} { set p$i 1 } foreach s $Lseq { for {set i 0} {$i < $lmax} {incr i} { if {[string index $s $i] ne "."} { set p$i 0 } } } set Li [list] for {set i 0} {$i < $lmax} {incr i} { if {[set p$i]} {lappend Li $i} } set Li [lsort -decreasing -integer $Li] set LSOrdali [list] foreach n $LNOrdali s $Lseq { foreach i $Li { set s [string replace $s $i $i] } set Sequences($n) $s lappend LSOrdali $s incr lgout [string length $s] } update return } proc AideEnLigne {Selection} { global GscopeDir set LesMots [split [join [split $Selection "\n"] " "] " "] set Aucun 1 foreach Mot $LesMots { set FichierHelp "$GscopeDir/help/gscope_[string tolower $Mot]_help.txt" if {[file exists "$FichierHelp"]} { AfficheFichier "$FichierHelp" "AvecAide" set Aucun 0 } } if { $Aucun } { FaireLire "Pas d'aide disponible.\nSelectionner une ligne avec des mots en MAJUSCULE" } } proc Aiguille {Nom Couleur K Type {MilieuOuAngle milieu} {RapportAuRayonMin 0.1} {RapportAuRayonMax 0.7}} { global ParametresDuBoard global LesAutresTagsPourAiguilles set PI 3.14159 set xFin [set ParametresDuBoard($K,xFin)] set CentreX [set ParametresDuBoard($K,CentreX)] set CentreY [set ParametresDuBoard($K,CentreY)] set RayonMoyen [set ParametresDuBoard($K,RayonMoyen)] set OffsetRayonMin [set ParametresDuBoard($K,OffsetRayonMin)] set OffsetRayonMax [set ParametresDuBoard($K,OffsetRayonMax)] set RayonMin [expr $RayonMoyen*$RapportAuRayonMin] set RayonMax [expr $RayonMoyen*$RapportAuRayonMax] if {$Type == "Zero" } { set Angle [expr $PI/2] set RayonMax $RayonMoyen } else { if { $MilieuOuAngle == "angle" } { set Angle $Nom } elseif { $MilieuOuAngle == "milieu"} { set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Milieu [expr ($Debut+$Fin)/2] if {$Type=="RepereBox"} { set Orient [Box $Nom orient] if {$Orient == "F"} { set Sens 1 } else { set Sens -1 } set RayonMax [expr $RayonMoyen+$Sens*($OffsetRayonMin+$OffsetRayonMax)/2] } set Angle [expr [DecalageAngulaireRosace] + 3.14159/2 - $Milieu*2*3.14159/$xFin] } else { FaireLire "Illegal\nJeMeSignale" return } } set PosMinX [PositionCanvaActuelleX $K [expr $CentreX+$RayonMin*cos($Angle)]] set PosMinY [PositionCanvaActuelleY $K [expr $CentreY-$RayonMin*sin($Angle)]] set PosMaxX [PositionCanvaActuelleX $K [expr $CentreX+$RayonMax*cos($Angle)]] set PosMaxY [PositionCanvaActuelleY $K [expr $CentreY-$RayonMax*sin($Angle)]] if {$Type == "RepereBox"} { set Couleur "black" $K create text $PosMinX $PosMinY -text $Nom -anchor c -tag "Txt $Type" } set BindBouton3 0 set LesTags [list "Aiguille" "$Type"] if {[info exists LesAutresTagsPourAiguilles]} { set LesTags [concat $LesTags $LesAutresTagsPourAiguilles] if {[set i [lsearch $LesAutresTagsPourAiguilles "RosaceArcEnCiel"]] >= 0} { set Tag [lindex $LesAutresTagsPourAiguilles 1] set BindBouton3 1 } } $K create line $PosMinX $PosMinY $PosMaxX $PosMaxY -fill $Couleur -tag $LesTags if {$BindBouton3} { $K bind "$Tag" <3> "ManipuleLaRosace Point $K $Tag %x %y" $K bind "$Tag" "ManipuleLaRosace Release $K $Tag %x %y" $K bind "$Tag" "ManipuleLaRosace Switch $K $Tag %x %y" } } proc AiguilleLaListe {ListeNomCouleur K Type {Po ""} {Min ""} {Max ""}} { if { ! [regexp "EnPlus$" $Type]} { foreach Id [$K find withtag $Type] { $K delete $Id } } else { regsub "EnPlus$" $Type "" Type } foreach {Nom Couleur} $ListeNomCouleur { Aiguille $Nom $Couleur $K $Type $Po $Min $Max } } proc AjoutConservationMacsims {ficXml meth} { global Defauts global LNOrdali global LSOrdali global TabSF global TPosSG global TPosGS if {! [info exists Defauts]} {LesDefauts} LesDefauts Mode Batch set lgMacsims [LesLignesDuFichier $ficXml] if {[lsearch -regexp $lgMacsims "CONS_RES"] != -1} { puts "Conservations are already listed in the xml file" return 0 } DefinitionPreferences DecortiqueEtAfficheUnXML $ficXml catch {[RunMethode $meth]} Message switch $meth { "Cluster" { set ft "Cons-Multi" } "VectorNorm" { set ft "Cons-VectorN" } "MeanDistance" { set ft "Cons-MeanD" } "Ranganathan" { set ft "Cons-Ranga" } default { set ft "Cons-Multi" } } set LesCpl [array get TabSF "*,$ft"] # initialise la liste des couleurs utilisées... # je dois les fournir en tant que chiffre et non en tant que couleur! set lCol "" foreach {s e} $LesCpl { set seq [lindex [split $s ","] 0] set lgMacsD "" foreach el $e { DecortiqueUneFeature $el dg fg col score note if {[string index [lindex $LSOrdali [lsearch $LNOrdali $seq]] [expr $dg - 1]] != "."} { set pos [expr [set TPosGS($seq,[expr $dg - 1])] + 1] if {[lsearch $lCol $col] == -1} { set color [llength $lCol] lappend lCol $col } else { set color [lsearch $lCol $col] } if {$note eq "IdenGlob"} { set type "Global - rank 1" } elseif {$note eq "ConsGlob"} { set type "Global - rank 2" } else { set type "Intragroup - $note" } lappend lgMacsD "CONS_RES$pos$pos$color0.00$ft $type" } } set lgMacsims [AjouteFeatAuMacsims $lgMacsims $seq $lgMacsD] } set fOut "$ficXml" set f [open $fOut w] foreach l $lgMacsims { puts $f $l } close $f return 1 } proc AjouteAnnotation {w} { set txt [$::Anno(WText) get 1.0 end] set nom $::Anno(NtagCou) set zon [$w tag ranges $nom] DBAddAnnotation [VueCourante] $nom $txt $zon return } proc AjouteAuARPLog {{Texte ""} {Fichier ""}} { Wup "Permet de sauver dans un fichier Log les infos des resultats du process" global ARPLog if { [info exists ARPLog] && $ARPLog == ""} {return ""} if {! [info exists ARPLog] && $Fichier == ""} {return ""} if {$Fichier != ""} { set ARPLog $Fichier if {$Texte == ""} {return ""} } AppendAuFichier $ARPLog "$Texte" return "" } proc AjouteAuDumpNoms {k v i} { global DumpNoms append DumpNoms $v return } proc AjouteAuDumpText {k v i} { global DumpText append DumpText $v return } proc AjouteAuLog {Log} { Wup "Permet d ecrire dans le log du panel general (GUI) ou par defaut d ecrire sur la sortie terminal" global LBLog if {! [info exists LBLog] || $Log==""} {Espionne "$Log";return ""} $LBLog configure -state normal $LBLog insert "end" "$Log\n" $LBLog configure -state disabled #Pour se positionner a la fin du texte $LBLog see end return "" } proc AjouteAuLogPipe {txt} { global DefautsPipe global TexteDuLog global Defauts if {[set DefautsPipe(File,log)] == "verbose"} { if {! [info exists TexteDuLog]} {set TexteDuLog ""} append TexteDuLog "$txt\n" } return 1 } proc AjouteBoutonFeature {bt cmd} { global FrmBouton FrmBtnFea # Attention ! Indices de grid commencent a 0 ! set nc [expr {[lindex [grid size $FrmBtnFea] 0] - 1}] set nr [expr {[lindex [grid size $FrmBtnFea] 1] - 1}] regsub -all " " $bt "" btns set btns [string tolower $btns] button $FrmBtnFea.$btns -text "$bt" -command "$cmd" -width [string length $bt] -background green1 grid $FrmBtnFea.$btns -in $FrmBtnFea -pady 1 -padx 1 -row $nr -column $nc -rowspan 1 -columnspan 1 -sticky news return } proc AjouteDefAListeDD {FichierListeDD} { #FichierListeDD: ANALYSE/ListeDDoverlapMABAffy (45+59) 104 redondance...5 DD #Les 45 prot DD en overlap avec MAB set FichierLes45 "[RepertoireDuGenome]/ANALYSE/GO_45_MA/Les45DD" foreach Nom [CreeListePourFichierAUneColonne $FichierLes45] { set VuMAB($Nom) 1 } #Les 59 prot DD en overlap avec Affy set FichierLes59 "[RepertoireDuGenome]/ANALYSE/GO_59_Affy/Les59DD" foreach Nom [CreeListePourFichierAUneColonne $FichierLes59] { set VuAffy($Nom) 1 } set FichierTot "[RepertoireDuGenome]/ANALYSE/Tous_6july05" set FichierUniq "[RepertoireDuGenome]/ANALYSE/JR_6july05" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set ListeDesUniques [lsort -unique [CreeListePourFichierAUneColonne $FichierListeDD]] foreach Nom $ListeDesUniques { set JR [JumeauRepresentatif $Nom] if {$JR!=$Nom} {Espionne "$Nom a pour JR $JR"} set OverlapMAB 0; set OverlapAffy 0 #def set NumGeneDD [InterrogeFichierTotalDataDD $FichierTot $JR N] set AccBestProtHuman [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD AccProt] set DefBestProt [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DefProt] #expr reg pour exclure ce qui suit les premieres () set AccBestmRNA [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD AccRNA] set DefBestmRNA [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DefRNA] #GO set LesGO [InterrogeGeneOntology $FichierGO $JR LesGO] if {$AccBestProtHuman!=""} { if {$LesGO==""} {set Ontology ""} else { set Ontology "" foreach GO $LesGO { set LaDefinitionGO [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] #append Ontology "$GO $LaDefinitionGO /" set Ontology "$GO $LaDefinitionGO" break } } } else {set Ontology ""} if {[info exists VuMAB($Nom)]} {set OverlapMAB 1} if {[info exists VuAffy($Nom)]} {set OverlapAffy 1} lappend L "$Nom\t$JR\t$DefBestProt\t$AccBestmRNA\t$DefBestmRNA\t$Ontology\t$OverlapMAB\t$OverlapAffy" } return $L } proc AjouteDesGaps {{idp ""} {nb 1}} { global NomTextSeq LNSeqlab LSSeqlab ListeSeqsGroupees if {$idp eq ""} {set idp [$NomTextSeq index active]} lassign [split $idp ,] il ic set seqass [lindex $LNSeqlab $il] if {$seqass eq ""} {return} set Lseq [SeqsGroupeSeqlabDe $seqass] foreach s $Lseq { lappend LIxSeq [lsearch $LNSeqlab $s] } AjouteDesGapsATous end $nb set Rs [lrepeat $nb "."] foreach i $LIxSeq { set s [lindex $LSSeqlab $i] set s [linsert $s $ic {*}$Rs] set s [lrange $s 0 end-$nb] lset LSSeqlab $i $s } EnleveColonnesGaps return } proc AjouteDesGapsATous {pos {nb 1}} { global LSSeqlab LNSeqlab NomTextSeq $NomTextSeq insert cols $pos $nb set Rs [lrepeat $nb "."] foreach s $LSSeqlab n $LNSeqlab { if {[string trim $n] ne ""} { set s [linsert $s $pos {*}$Rs] } lappend new $s } set LSSeqlab $new return } proc AjouteEntreesBiblio {{db ""}} { if {$db==""} { set Fichier "[MiSynPatDir]/misynpat.sql" set db "root" sqlite3 $db $Fichier } set pmids [$db eval {select pmid from biblio where accepted=-1}] foreach pmid $pmids { set Linfo [eFetchREST pubmed $pmid] array set Tinfo $Linfo if { ! [info exists Tinfo($pmid,Title)] && ! [info exists Tinfo($pmid,Abstract)] && ! [info exists Tinfo($pmid,PubYear)]} { continue } lappend LesOk $pmid set titre $Tinfo($pmid,Title) set abstract $Tinfo($pmid,Abstract) set year $Tinfo($pmid,PubYear) set month "" if {[info exists Tinfo($pmid,PubMonth)]} { set month $Tinfo($pmid,PubMonth) } Espionne "$pmid $year $month $titre" Espionne "$abstract" set titre [string map {"'" "''"} $titre] set abstract [string map {"'" "''"} $abstract] $db eval {update biblio set abstract=$abstract,titre=$titre,datey=$year,datem=$month where pmid=$pmid} } return $LesOk } proc AjouteExtension {Extension} { set Rep [pwd] Espionne $Rep if {[OuiOuNon "Do you want to rename all files from\n$Rep with $Extension"]} { foreach PAB [ListeDesPABs] { set NewName "$Rep/${PAB}${Extension}" set OldName "$Rep/${PAB}" if {[file exists $OldName]} { file rename -force $OldName $NewName } } } } proc AjouteFeatAuMacsims {lgMacsims seq features} { if {[regexp {^PDB_} $seq] == 1} { set sequ [string range $seq 4 end] } else { set sequ $seq } set idx [lsearch $lgMacsims "${sequ}"] set idxD [lsearch -start $idx $lgMacsims ""] if {$idxD != -1} { set lgMacsD [lrange $lgMacsims 0 [expr $idxD - 1]] set lgMacsF [lrange $lgMacsims $idxD end] foreach feat $features { lappend lgMacsD $feat } foreach l $lgMacsF { lappend lgMacsD $l } return $lgMacsD } else { return $lgMacsims } } proc AjouteFils {pid par tid} { set Lp [set ::ATree($pid)] set Lt [set ::ATree($tid)] unset ::ATree($tid) set idx [lsearch -exact $Lp $par] set ls [llength [lrange $Lp $idx end]] lset Lt 1 $idx lappend Lp {*}[lrange $Lt 0 2] foreach {k i p} [lrange $Lt 3 end] { lappend Lp $k [incr i $ls] $p } set ::ATree($pid) $Lp return } proc AjouteGroupeToutLeMonde {} { global SDG LNDG # already here if {"GroupeToutLeMonde" in $LNDG} { return } set LNDG [linsert $LNDG 0 "GroupeToutLeMonde"] set Lt {} foreach e [array names SDG] { lappend Lt {*}[set SDG($e)] } set SDG(GroupeToutLeMonde) $Lt return } proc AjouteHS {Fichier FichierNew} { foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne $Ligne if {$Ligne==""} {continue} if {[regexp -nocase "N/A" $Ligne]} {Espionne $Ligne;continue} set LesInfos [split $Ligne "\t"] set chro [lindex $LesInfos 0] if {$chro==0} {FaireLire $Ligne} if {$chro==""} {FaireLire $Ligne} if {$chro<10} {set NewChro "HS0$chro"} else {set NewChro "HS$chro"} set NewL [lreplace $LesInfos 0 0 $NewChro] #FaireLire $NewL set NewL [join $NewL "\t"] lappend L $NewL } SauveLesLignes $L dans $FichierNew } proc AjouteLesInfoDansLaListeBox {KListBox LesInfo} { foreach Elet $LesInfo {$KListBox insert end $Elet} return } proc AjouteLesTaxonsAuFichierDeClassificationTaxonomique {aTabTaxon LesTaxonsAncestraux {LeTexte ""}} { upvar $aTabTaxon TabTaxon set Blanc " " set DernierAncetre [lindex $LesTaxonsAncestraux end] set NiveauDuDernierAncetre [llength $LesTaxonsAncestraux] lappend LeTexte "[string repeat $Blanc [expr $NiveauDuDernierAncetre - 1]]$NiveauDuDernierAncetre\t$DernierAncetre" set IndexAncetres [join $LesTaxonsAncestraux ","] if {![info exists TabTaxon($IndexAncetres,LesDescendants)]} {return $LeTexte} foreach Taxon [lsort [set TabTaxon($IndexAncetres,LesDescendants)]] { set LesTaxons [linsert $LesTaxonsAncestraux end $Taxon] set LeTexte [AjouteLesTaxonsAuFichierDeClassificationTaxonomique TabTaxon $LesTaxons $LeTexte] } return $LeTexte } proc AjouteNouveauPrefixe {we wl} { global TmpDef set e [string trim [$we get]] if {$e eq ""} {return} lappend TmpDef(PrefixesBank) $e $wl configure -state normal $wl delete 0 end $wl insert end {*}[set TmpDef(PrefixesBank)] $wl configure -state disabled $wl see end $we delete 0 end return } proc AjoutePDB {{what ok}} { global WAP LNOrdali ListePDB if {$what ne "ok"} { destroy $WAP(Win) unset WAP return } if {$WAP(File) eq ""} { FaireLire "Please supply a file name !" return } if {! [file exists $WAP(File)]} { FaireLire "The file\n$WAP(File)\ndoes not exists !" return } if {$WAP(Replace) eq ""} { FaireLire "Please select <> or give the new PDB Id" return } if {$WAP(Replace)} { if {$WAP(Id) eq "Choose"} { FaireLire "Please choose a PDB Id" return } DetruitUnPDB $WAP(Id) set pdbid $WAP(Id) } else { if {! [EstUnAccessPDB $WAP(NewId)]} { FaireLire "Please give a valid PDB Id for this structure\nIt should be on the form : NXXX_Y where N is a number (0-9), X can be a number or a letter, and Y an alphanumaric character" return } set pdbid $WAP(NewId) } LoadNouveauPDB $WAP(File) $pdbid foreach c [$pdbid _chains] { set nom [BonNomPDB ${pdbid}_$c] if {$nom in $LNOrdali && $nom ni $ListePDB} { lappend ListePDB $nom } } destroy $WAP(Win) unset WAP return } proc AjoutePourcentageMRMDansInfos {Nom} { set PourcentMasque [QuelPourcentageApresMRM $Nom] if {$PourcentMasque!="" && $PourcentMasque!=0} { InformeSansDemander $Nom "MRMPourcent: $PourcentMasque" } } proc AjoutePourcentageMRMDansInfosPourTous {} { foreach Nom [ListeDesPABs] { AjoutePourcentageMRMDansInfos $Nom } } proc AjouteProfilMoyEtRN {FichierRegine FichierSortie} { set FichierTot "[RepertoireDuGenome]/OVERLAP931/TotalData" set FichierUniq "[RepertoireDuGenome]/OVERLAP931/DataUniques" #Profil DD foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/FoldExpression_tous"] { set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 0] set Prof [lindex $LesChamps 1] if {$Prof=="+"} {set P($DD) "T"} if {$Prof=="-"} {set P($DD) "N"} if {$Prof=="0"} {set P($DD) "C"} } #Profil Virtual Northern et Northern set FichierProfilDDValidation "[RepertoireDuGenome]/totalite/ValidationProfil.txt" if {![file exists $FichierProfilDDValidation]} {return} foreach Ligne [LesLignesDuFichier $FichierProfilDDValidation] { if {$Ligne=="" || [regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set Owner [lindex $Ligne 0] set CC [lindex $Ligne 2] if {$Owner=="F"} {set CC [string toupper $CC]} if {$Owner=="I"} {regsub -all "\'" $CC "_" CC} set ProfVN [lindex $Ligne 3] set ProfNorthern [lindex $Ligne 5] set PVN($Owner,$CC) $ProfVN set PN($Owner,$CC) $ProfNorthern } #profil Macroarray set FichierMacroarray "[RepertoireDuGenome]/MembranesRegine/compar_profils_mb_gscope" foreach Ligne [LesLignesDuFichier $FichierMacroarray] { if {$Ligne==""} {continue} set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 1] set ProfMb [lindex $LesChamps 2] set PMb($DD) $ProfMb } #correspondance HNK DD set FichierCorres "[RepertoireDuGenome]/lacorrespondance" foreach Ligne [LesLignesDuFichier $FichierCorres] { if {$Ligne==""} {continue} set Ligne [split $Ligne "\t"] set New [lindex $Ligne 0]; set Old [lindex $Ligne 1] set N($Old) $New } foreach Ligne [LesLignesDuFichier $FichierRegine] { if {$Ligne==""} {continue} if {[regexp "GscopeCode" $Ligne]} {continue} set Ligne [split $Ligne "\t"] #HNK -> DD set HNK [string trim [lindex $Ligne 0]] if {$HNK!=""} { if {[info exists N($HNK)]} { set DD $N($HNK) Espionne $DD #fiches/jumeaux est une copie de 931 (931 avec jum) set JR [JumeauRepresentatif $DD] #DD -> jumeaux set FichierJumeaux "[RepertoireDuGenome]/fiches/jumeaux" set LesJumeauxDuJR [LesJumeauxDuPAB $DD $FichierJumeaux] set LesJumeaux [TousLesJumeauxDuPAB $DD $FichierJumeaux] set LesJumeaux [split $LesJumeaux " "] #jumeaux -> VN Northern du cluster set ProfilVN ""; set ProfilNorthern ""; set ProfilMb "" foreach Jumeau $LesJumeaux { set CodeClone [InterrogeFichierTotalDataDD $FichierTot $Jumeau Code] set User [InterrogeFichierTotalDataDD $FichierTot $Jumeau User] set Band [InterrogeFichierTotalDataDD $FichierTot $Jumeau Bande] #virtual northern if {[info exists PVN($User,$CodeClone)] && $ProfilVN==""} {set ProfilVN $PVN($User,$CodeClone)} set ProfilVN [string trim $ProfilVN] if {[info exists PVN($User,$CodeClone)] && $ProfilVN!="" && [string trim $PVN($User,$CodeClone)]!="" && $ProfilVN!=$PVN($User,$CodeClone)} { #Espionne "VN: $ProfilVN dif de $PVN($User,$CodeClone) de $Jumeau" if {$ProfilVN==0 && $PVN($User,$CodeClone)!=0} { set ProfilVN $PVN($User,$CodeClone) #Espionne $Jumeau } } #northern if {[info exists PN($User,$CodeClone)] && $ProfilNorthern==""} {set ProfilNorthern $PN($User,$CodeClone)} set ProfilNorthern [string trim $ProfilNorthern] if {[info exists PN($User,$CodeClone)] && $ProfilNorthern!="" && [string trim $PN($User,$CodeClone)]!="" && $ProfilNorthern!=$PN($User,$CodeClone)} { #Espionne "Northern: $ProfilNorthern et $PN($User,$CodeClone) de $jumeau" } #membrane nylon Regine if {[info exists PMb($Jumeau)] && $ProfilMb==""} {set ProfilMb $PMb($Jumeau)} set ProfilMb [string trim $ProfilMb] #if {$ProfilMb==" "} {set ProfilMb ""} if {[info exists PMb($Jumeau)] && $ProfilMb!="" && [string trim $PMb($Jumeau)]!="" && $ProfilMb!=$PMb($Jumeau)} { #Espionne "Mb: $ProfilMb et $PMb($Jumeau)" } } if {$JR!=""} { set NumGeneDD [InterrogeFichierTotalDataDD $FichierTot $DD N] set ProfilCalc [InterrogeFichierTotalDataDD $FichierTot $DD Profil] set ProfilConsensus [InterrogeFichierTotalDataDD $FichierTot $DD ProfCons] set DifE [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifE] set ProfE [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD ProfE] set DifS [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifS] set ProfS [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD ProfS] set DifU [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifU] set ProfU [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD ProfU] set DifMoy [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifMoy] set ProfMoy [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD Pmoy] AppendAuFichier $FichierSortie "$CodeClone\t$Band\t$User\t$NumGeneDD\t$HNK\t$DD\t$JR\t$LesJumeauxDuJR\t$DifE\t$ProfE\t$DifS\t$ProfS\t$DifU\t$ProfU\t$DifMoy\t$ProfMoy\t$ProfilCalc\t$ProfilConsensus\t$ProfilVN\t$ProfilNorthern\t$ProfilMb" } else { #si pas de JR, c'est un court ou conta ou nohomolog #Espionne "$DD n'est pas dans les 931avecjum" lappend Liste $DD #VN #if {[info exists PVN($User,$CodeClone)]} {set ProfilVN $PVN($User,$CodeClone)} #Profil DD #if {[info exists P($DD)]} {set ProfilCalc $P($DD)} #Profil_consensus #if {[info exists Pc($DD)]} {set ProfilConsensus $Pc($DD)} #PMoy } } else {Espionne "pb pour $HNK"} } } SauveLesLignes $Liste dans "[RepertoireDuGenome]/Regine/pbs_out" } proc AjouteRepeatDansInfos {Nom} { set Repeat [QuelRepeat $Nom] if {$Repeat!=""} { InformeSansDemander $Nom "MRM: $Repeat" } } proc AjouteRepeatDansInfosPourTous {} { foreach Nom [ListeDesPABs] { AjouteRepeatDansInfos $Nom } } proc AjouteRepeatDansInfos_old {Nom} { set Repeat [QuelRepeatApresReMasking $Nom] if {$Repeat!=""} { InformeSansDemander $Nom "MRM: $Repeat" } } proc AjouteSeqs {} { global LNSeqlab LSSeqlab LNOrdali LSOrdali LongueurTotale ListePDB HashPDB Sequences NomSeqSel TAddS LNDG SDG if {[TypeAli] eq "pasdali"} { FaireLire "There are no sequences yet.\nPlease load an alignment first." return } # not in editor mode if {[QuelMode] eq "seqlab"} { FaireLire "You can't add sequences in Editor mode !\nLeave the Editor to add sequences." return } set res [AskAddSeqs] if {$res eq ""} { return } # repere position ascenceur lassign [$::TScrollY get] yscr tmp # ok let's go VueEditee 1 FaireAttendre "Please wait ...\nLoading and parsing new sequences ..." # Load sequences et verif format set file $TAddS(File) if {[EstLeBonFormat $file TFA]} { DecortiqueUnTFA $file LNTank TTank } elseif {[EstLeBonFormat $file ALN]} { DecortiqueUnALN $file LNTank TTank } else { DecortiqueUnMSF $file LNTank TTank } # reference sequences if {[QuelMode] eq "seqlab"} { set LNomsAli $LNSeqlab set LSeqsAli [list] foreach s $LSSeqlab { lappend LSeqsAli [join $s ""] } } else { set LNomsAli $LNOrdali set LSeqsAli $LSOrdali } set y [lsearch -exact $LNomsAli $TAddS(seqInsert)] # Nettoyages divers (ou d'ete) set lgsadd 0 set LNAddSeq [list] set LSAddSeq [list] foreach n $LNTank { set s [set TTank($n)] set n [BonAccess $n] set s [BonneSequencePourAlignement $s] set nogap [string map {" " "" "~" "" "-" "" "." ""} $s] if {! [string length $nogap]} { if {[ModeI]} { FaireLire "You have empty sequences !\n>$n< will be left out !" } continue } if {$n in $LNomsAli} { # on ne duplique pas les pdb if {$n in $ListePDB} { continue } # sequence already exists switch $TAddS(CopySkip) { 1 { continue } 0 { set pi 1 while {"${n}__$pi" in $LNomsAli} { incr pi } set n "${n}__$pi" } } } set l [string length $s] set lgsadd [expr {$l>$lgsadd?$l:$lgsadd}] set n [string trim $n] set newS($n) $s lappend LNAddSeq $n lappend LSAddSeq $s } # no sequences to add if {$LNAddSeq == {} } { FaireLaSuite return } # should we align the new sequences ? set DoAlign $TAddS(Align) if {$DoAlign} { # create a TFA from alignment set aliTfa [list] foreach n $LNomsAli s $LSeqsAli { if {$n ne ""} { set s [string map {. -} $s] lappend aliTfa ">$n" $s } } set aliTfa [join $aliTfa "\n"] # create a TFA with seqs to be added set addTfa [list] foreach n $LNAddSeq s $LSAddSeq { set s [string map {. -} $s] lappend addTfa ">$n" $s } set addTfa [join $addTfa "\n"] # create MAFFT alignement if {[OutsideCSTB]} { set LnewAli [Mafft_AddSequences $aliTfa $addTfa] } else { set LnewAli [Mafft_AddSequences_local $aliTfa $addTfa] } if {$LnewAli eq ""} { if {[ModeI]} { FaireLire "Something went wrong while computing alignment !\nSequences will be added unaligned" } set DoAlign 0 } } if {! $DoAlign} { set lgsadd [DonneMemeLongueur newS] set LSAddSeq [list] foreach n $LNAddSeq { lappend LSAddSeq $newS($n) } # Ajuste longueur alignement - seq add set lscou [LongueurAlignement [QuelMode]] set d [expr {$lgsadd - $lscou}] set add [string repeat "." [expr {abs($d)}]] if {$d < 0} { # added sequences are shorter set Ltmp [list] foreach n $LNAddSeq s $LSAddSeq { append s $add set newS($n) $s lappend Ltmp $s } set LSAddSeq $Ltmp } elseif {$d > 0} { # added sequences are longer # -> adjust alignment sequences set LongueurTotale $lgsadd set Lnew [list] foreach s $LSeqsAli { if {[string trim $s] ne ""} { append s $add } lappend Lnew $s } set LSeqsAli $Lnew } } else { # sequences aligned by MAFFT DecortiqueUnTFA $LnewAli LNAligned SAligned # record aligned sequences set Lnew [list] set Ltmp [list] set Lall [concat $LNomsAli $LNAddSeq] foreach n $Lall { if {$n eq ""} { set s "" } else { set s $SAligned($n) } if {$n in $LNAddSeq} { lappend Ltmp $s } else { lappend Lnew $s } } set LSeqsAli $Lnew set LSAddSeq $Ltmp } # On traite les PDB ajoutes set ix -1 set BadPDB [list] set Sprsde [list] foreach s $LNAddSeq { incr ix if {! [EstUnAccessPDB $s]} { continue } set pdbid [DonneIdDeAccessPDB $s] set chn [DonneChainDeAccessPDB $s] if {$pdbid ni [info commands]} { set cok [LoadNouveauPDB $pdbid] if {$cok == 0} { lappend BadPDB $ix continue } elseif {$cok != 1} { # superseeded name ! # Should change set nwnm $cok set cok 1 lappend Sprsde [list $nwnm $ix] } } lappend ListePDB $s } # Bad PDBs foreach i [lsort -integer -decreasing $BadPDB] { set e [lindex $LNAddSeq $i] set Molid [DonneIdDeAccessPDB $e] set Chn [DonneChainDeAccessPDB $e] set newe "bsq${Molid}_$Chn" lset LNAddSeq $i $newe } # Superseeded names foreach e [lsort -integer -decreasing -index 1 $Sprsde] { lassign $e nwnm i set old [lindex $LNAddSeq $i] set Molid $nwnm set Chn [DonneChainDeAccessPDB $old] set newe [BonNomPDB ${Molid}_$Chn] lset LNAddSeq $i $newe } # sequences have been checked # initialise new seqs, and insert them InitInfoSeqs $LNAddSeq # insertion of new sequences if {$TAddS(Position) eq "cluster"} { # choose closest cluster to insert # each new sequence lassign [InsertionSequencesDansGroupes $LNomsAli $LSeqsAli $LNAddSeq $LSAddSeq] LNomsAli LSeqsAli } else { if {$TAddS(Position) eq "afterseq"} { set i [lsearch -exact $LNomsAli $TAddS(seqInsert)] } else { set i "end" } lassign [InsertionSequencesAPosition $LNomsAli $LSeqsAli $LNAddSeq $LSAddSeq $i] LNomsAli LSeqsAli } # recreate lists according to mode if {[QuelMode] ne "seqlab"} { set LNOrdali $LNomsAli set LSOrdali $LSeqsAli unset -nocomplain Sequences foreach n $LNOrdali s $LSOrdali { if {$n ne ""} { set Sequences($n) $s } } } else { set LNSeqlab $LNomsAli set LSSeqlab [list] foreach n $LNomsAli s $LSeqsAli { lappend LSSeqlab [split $s ""] } } InitPosSeqGenGenSeq InfosDesPDB # Calculs divers AssigneLesPoids TraiteAABizarres CalculeComposition CalculePI CalculeMolecularWeight # Update Fenetre alignement MetAJourGroupes if {[QuelMode] ne "seqlab"} { set WdtNom [PlusLongEltDe $LNOrdali] InitWRegle AfficheRegle } else { set WdtNom [PlusLongEltDe $LNSeqlab] set y [expr {$y-1}] $::NomTextSeq addseqs $LIN $y } if {$WdtNom > $::Defauts(LongNom)} { LesDefauts LongNom $WdtNom } $::NomNomSeq configure -width $WdtNom ChangeNomsAff $::Defauts(NomsAffiches) AfficheNomsEtSeqs RepeintNomsEtSeqs update idletasks # remet ascenceur CoupleY moveto $yscr FaireLaSuite return } proc AjouteSpaceSeq {} { global LNSeqlab LSSeqlab LNOrdali LSOrdali NomTextSeq NomNomSeq NomSeqSel Defauts TScrollY if {[TypeAli] eq "pasdali"} {return} if {[llength $NomSeqSel] != 1} { FaireLire "Please select one sequence below\nwhich a separator should be inserted !" return } # strore Y-scroll position lassign [$TScrollY get] ysc tmp lassign [split $NomSeqSel .] y x set i [expr {$y+1}] $NomNomSeq configure -state normal $NomNomSeq insert $i.0 "\n" $NomNomSeq configure -state disabled if {[QuelMode] ne "seqlab"} { VueEditee 1 $NomTextSeq configure -state normal $NomTextSeq insert $i.0 "\n" $NomTextSeq configure -state disabled set LNOrdali [linsert $LNOrdali $y {}] set LSOrdali [linsert $LSOrdali $y {}] } else { set LNSeqlab [linsert $LNSeqlab $y {}] set LSSeqlab [linsert $LSSeqlab $y {}] # Insert AFTER Index ... $NomTextSeq insert rows [expr {$y-1}] 1 } MetAJourGroupes #ChangeNomsAff $Defauts(NomsAffiches) #AfficheNomsEtSeqs #RepeintNomsEtSeqs # re-position at original Y CoupleY moveto $ysc return } proc AjouteUnGraph {K FichierQuery XDebutQuery XFinQuery YDebutGraph YFinGraph OneNtPixel} { Wup "Ajoute un graph a un canvas" Wup "Ex Id et NbSeq lie au blastn et Tm et GC lie a une sequence donnee" set AvecTm 0 set AvecGC 0 set AvecId 0 set AvecNbSeq 0 set AvecTmNN 0 set AvecTmWallace 0 set AvecTmDNADNA 0 set AvecTmDNARNA 0 set AvecTmRNARNA 0 set TmDefault "" FaireLire "Choose between available graph to add." set LesChoix [EntreDeux [list TmNN TmWallace TmDNADNA TmDNARNA TmRNARNA GC Id NbSeq]] if {$LesChoix == ""} {return ""} #On recupere la methode de Tm par defaut choisie et on la remet apres if {[regexp -nocase "tm" $LesChoix]} {set TmDefault [LesParametresDuDesign TmMethod "LaValeurMerci"]} foreach Choix $LesChoix { if {$Choix=="TmNN"} {set AvecTm 1;set AvecTmNN 1} if {$Choix=="TmWallace"} {set AvecTm 1;set AvecTmWallace 1} if {$Choix=="TmDNADNA"} {set AvecTm 1;set AvecTmDNADNA 1} if {$Choix=="TmDNARNA"} {set AvecTm 1;set AvecTmDNARNA 1} if {$Choix=="TmRNARNA"} {set AvecTm 1;set AvecTmRNARNA 1} if {$Choix=="GC"} {set AvecGC 1} if {$Choix=="Id"} {set AvecId 1} if {$Choix=="NbSeq"} {set AvecNbSeq 1} } if {$AvecNbSeq || $AvecId} { set FichierBlastN "" set MesBlasts "" set PAB "[file tail $FichierQuery]" regsub {.[a-zA-Z]+$} $PAB "" PAB set MesBlasts [LesInfosDe $K MesBlasts] while {1} { if {[OuiOuNon "We need a related blastn file to build graph.\nCan I use one of these blasts ?\n$MesBlasts"]} { set FichierBlastN [ChoixParmi $MesBlasts] if {! [regexp -nocase $PAB $FichierBlastN]} { FaireLire "Choose a correct blastn file according to your query sequence" } else {break} if {![OuiOuNon "Do you want to continue ?"]} {break} } else { break } } if {$FichierBlastN=="" || ! [file exists $FichierBlastN]} { FaireLire "Choose a blastn file to add two new graph to display." while {1} { #Les types de fichier autorises set types { {{Blastn Files} {.blastn}} {{All Files} * } } set FichierBlastN [tk_getOpenFile -title "Choose a blastn file" -initialdir "[RepertoireDuGenome]" -filetypes $types] if {! [regexp -nocase $PAB $FichierBlastN]} { FaireLire "Choose a correct blastn file according to your query sequence" } else {break} if {![OuiOuNon "Do you want to continue ?"]} {return ""} } } if {[file exists $FichierBlastN]} { if {$AvecId} { #Affichage du Id content du blast set IdDuGraph "" while {1} { if {[$K find withtag "Id$IdDuGraph"] != ""} { if {$IdDuGraph == ""} {set IdDuGraph 1} else {incr IdDuGraph} } else {break} } set IdResults [PosEtPIdAligneeDeLaRegion $FichierBlastN] if {$IdResults !=""} { AfficheLeSpectreIdDUneListe $K $IdResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "red" "Id$IdDuGraph" } } if {$AvecNbSeq} { #Affichage du nb de sequence du blast set IdDuGraph "" while {1} { if {[$K find withtag "NbSeq$IdDuGraph"] != ""} { if {$IdDuGraph == ""} {set IdDuGraph 1} else {incr IdDuGraph} } else {break} } set NbSeqResults [PosEtNbSequenceAligneeDeLaRegion $FichierBlastN] if {$NbSeqResults !=""} { AfficheLeSpectreNbSequenceDUneListe $K $NbSeqResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "deepskyblue2" "NbSeq$IdDuGraph" } } UnsetLesTableauxDesGraphAvecBlast } } if {$AvecGC || $AvecTm} { set SeqQuery [QueLaSequenceDuFichierTFA $FichierQuery] if {$SeqQuery==""} {Espionne "$FichierQuery no sequence available";return ""} set TailleQueryNt [string length $SeqQuery] } if {$AvecTm && $AvecTmNN && [$K find withtag {"OligoGraph" && "TmNN"}] == ""} { LesParametresDuDesign TmMethod "NearestNeighbor" "Positionne" #Affichage du Tm content set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange" "TmNN" } } if {$AvecTm && $AvecTmWallace && [$K find withtag {"OligoGraph" && "TmWallace"}] == ""} { LesParametresDuDesign TmMethod "Wallace" "Positionne" #Affichage du Tm content set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange1" "TmWallace" } } if {$AvecTm && $AvecTmDNADNA && [$K find withtag {"OligoGraph" && "TmDNADNA"}] == ""} { LesParametresDuDesign TmMethod "DNADNA" "Positionne" #Affichage du Tm content set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange2" "TmDNADNA" } } if {$AvecTm && $AvecTmDNARNA && [$K find withtag {"OligoGraph" && "TmDNARNA"}] == ""} { LesParametresDuDesign TmMethod "DNARNA" "Positionne" #Affichage du Tm content set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange3" "TmDNARNA" } } if {$AvecTm && $AvecTmRNARNA && [$K find withtag {"OligoGraph" && "TmRNARNA"}] == ""} { LesParametresDuDesign TmMethod "RNARNA" "Positionne" #Affichage du Tm content set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange4" "TmRNARNA" } } if {$AvecGC && [$K find withtag {"OligoGraph" && "GC"}] == ""} { #Affichage du GC content set GCResults [PosEtGCDeLaRegion $SeqQuery $TailleQueryNt] if {$GCResults !=""} { AfficheLeSpectreGCDUneListe $K $GCResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel } } #On recupere la methode de Tm par defaut choisie et on la remet apres LesParametresDuDesign TmMethod $TmDefault "Positionne" return "" } proc AjouteUnLien {Fichier_html {Texte ""} {URL ""}} { if {$Texte=="" || $URL==""} {return} set Ref [Html_Href $URL $Texte] set Page [ContenuDuFichierAvecReferences $Fichier_html $Texte $Ref] return $Page } proc AjouteUnOligoPourCeuxDejaFait {PAB1 PAB2 Dir1 Dir2 Quoi} { Wup "Ajoute un oligo a la liste de ceux deja designe de dir1 a dir2" Wup "Cas particulier pour un redesign et completer la liste ou faire un update de l oligo" Wup "Quoi peut etre ref de oligo ou coordonnees debut fin" Wup "Rq: on teste si un oligo existe deja si oui on propose de changer de nom ou pas (update ou pas)" set FichierACharger1 "$Dir1/${PAB1}.oligo" set FichierACharger2 "$Dir2/${PAB2}.oligo" set NomAncienOligo "" #Espionne ">>>>Try to complete $PAB1 with $Quoi<<<<" #Liste des oligos a partir de laquelle on va en rajouter un set LesOligos1 [InterrogeInfoDeLOligo $FichierACharger1 LesNoms] if {$LesOligos1 == ""} { if {[InterrogeInfoDeLOligo $FichierACharger1 NotDone]=="1"} { #Oligo non calcules Espionne "Try to complete $PAB1 but no Oligo yet designed in $Dir1" return "" } elseif {[InterrogeInfoDeLOligo $FichierACharger1 NoOligo]=="1"} { #Oligo non trouves Espionne "Try to complete $PAB1 but no Oligo found" return "" } else {Espionne "Petit probleme";return ""} } #Liste des oligos auquel on veut en rajouter un set LesOligos2 [InterrogeInfoDeLOligo $FichierACharger2 LesNoms] if {$LesOligos2 == ""} { if {[InterrogeInfoDeLOligo $FichierACharger2 NotDone]=="1"} { #Oligo non calcules Espionne "Try to complete $PAB2 but no Oligo yet designed in $Dir2" return "" } elseif {[InterrogeInfoDeLOligo $FichierACharger2 NoOligo]=="1"} { #Oligo non trouves Espionne "Try to complete $PAB2 but no Oligo found" return "" } else {Espionne "Petit probleme";return ""} } #Le nom de l oligo a ajouter set LeNomOligo "" if {[llength $Quoi]>1} { set LeNomOligo [InterrogeInfoDeLOligo $FichierACharger1 [lindex $Quoi 0] [lindex $Quoi 1] NomOligo] } else { set LeNomOligo $Quoi } if { $LeNomOligo == ""} {return ""} if {![regexp "$LeNomOligo" $LesOligos1]} {Espionne "No $LeNomOligo in $FichierACharger1";return ""} #On recupere les infos de l oligo a ajouter set Debut [InterrogeInfoDeLOligo $FichierACharger1 $LeNomOligo Debut] set Fin [InterrogeInfoDeLOligo $FichierACharger1 $LeNomOligo Fin] set Selection [join [ExtraitOligoDuTFA $PAB1 $LeNomOligo $Dir1] "\n"] #On teste dans la vieille liste si il existe deja if {[InterrogeInfoDeLOligo $FichierACharger2 $Debut $Fin NomOligo]!=""} { if {! [OuiOuNon "The Oligo for $Debut $Fin already exists\nDo I replace it ?"]} {return ""} set NomAncienOligo [InterrogeInfoDeLOligo $FichierACharger2 $Debut $Fin NomOligo] #On peut decider de faire un update simplement en gardant le nom de l oligo if {! [OuiOuNon "Should I keep the previous oligo reference (name) ?\n(Yes just for properties update)"]} {set NomAncienOligo ""} SupprimeUnOligoPourCeuxDejaFait $FichierACharger2 [InterrogeInfoDeLOligo $FichierACharger2 $Debut $Fin NomOligo] #SupprimeLeLogFileDeLOligo "$Debut $Fin" "$Dir2/${PAB2}.log" } #On change ou pas le nom de l oligo a ajouter (ou updater) set OldNom $LeNomOligo if {$NomAncienOligo!=""} { #On conserve le nom de l ancien oligo (juste un update) set LeNomOligo $NomAncienOligo } else { #On change le nom si il existe deja on incremente while {1} { if {[regexp $LeNomOligo $LesOligos2]} { regexp {Oligo([0-9]+)_} $LeNomOligo tmp Nb set OldNb $Nb incr Nb regsub "${OldNb}_" $LeNomOligo "${Nb}_" LeNomOligo } else {break} } } #Espionne "Ancien $OldNom -- Nouveau $LeNomOligo" regsub "$OldNom" $Selection "$LeNomOligo" Selection AppendAuFichier $FichierACharger2 $Selection #Espionne ">>>>Adding<<<<" #Espionne "$Selection" #Espionne ">>>>>>To<<<<<<" #Espionne "$FichierACharger2\n" return "" } proc AjouteUnOligoPourCeuxDejaFaitAuFichier {FichierACharger1 FichierACharger2 Quoi} { Wup "WARNING PROC NON TESTEES" Wup "Ajoute un oligo a la liste de ceux deja designe de dir1 a dir2" Wup "Cas particulier pour un redesign et completer la liste" Wup "Quoi peut etre ref de oligo ou coordonnees debut fin" #set FichierACharger1 "$Dir1/${PAB1}.oligo" #set FichierACharger2 "$Dir2/${PAB2}.oligo" set PAB1 [file tail $FichierACharger1] if {[regexp {\.[a-z]{3,}$} $PAB1]} {regsub {\.[a-z]{3,}$} $PAB1 "" PAB1} set Dir1 [file dirname $FichierACharger1] Espionne "$FichierACharger1 $PAB1 $Dir1" return "" Espionne ">>>>Try to complete $PAB1 with $Quoi<<<<" set LesOligos1 [InterrogeInfoDeLOligo $FichierACharger1 LesNoms] if {$LesOligos1 == ""} { if {[InterrogeInfoDeLOligo $FichierACharger1 NotDone]=="1"} { #Oligo non calcules Espionne "Try to complete $PAB1 but no Oligo yet designed in $Dir1" return "" } elseif {[InterrogeInfoDeLOligo $FichierACharger1 NoOligo]=="1"} { #Oligo non trouves Espionne "Try to complete $PAB1 but no Oligo found" return "" } else {Espionne "Petit probleme";return ""} } set LesOligos2 [InterrogeInfoDeLOligo $FichierACharger2 LesNoms] if {$LesOligos2 == ""} { if {[InterrogeInfoDeLOligo $FichierACharger2 NotDone]=="1"} { #Oligo non calcules Espionne "Try to complete $PAB2 but no Oligo yet designed in $Dir2" return "" } elseif {[InterrogeInfoDeLOligo $FichierACharger2 NoOligo]=="1"} { #Oligo non trouves Espionne "Try to complete $PAB2 but no Oligo found" return "" } else {Espionne "Petit probleme";return ""} } set LeNomOligo "" if {[llength $Quoi]>1} { set LeNomOligo [InterrogeInfoDeLOligo $FichierACharger1 [lindex $Quoi 0] [lindex $Quoi 1] NomOligo] } else { set LeNomOligo $Quoi } #Espionne "Quoi $Quoi - NomOligo $LeNomOligo" if { $LeNomOligo == ""} {return ""} if {![regexp "$LeNomOligo" $LesOligos1]} {Espionne "No $LeNomOligo in $FichierACharger1";return ""} set Debut [InterrogeInfoDeLOligo $FichierACharger1 $LeNomOligo Debut] set Fin [InterrogeInfoDeLOligo $FichierACharger1 $LeNomOligo Fin] #set Selection [join [ExtraitOligoDuTFA $PAB1 $LeNomOligo $Dir1] "\n"] set Selection [join [ExtraitOligoDuTFA2 $PAB $LeNomOligo $Dir1 [file tail $FichierACharger1]] "\n"] if {[InterrogeInfoDeLOligo $FichierACharger2 $Debut $Fin NomOligo]!=""} { if {! [OuiOuNon "Oligo for $Debut $Fin already exists\nDo I replace it ?"]} {return ""} set NomAncienOligo [InterrogeInfoDeLOligo $FichierACharger2 $Debut $Fin NomOligo] SupprimeUnOligoPourCeuxDejaFait $FichierACharger2 $NomAncienOligo #SupprimeLeLogFileDeLOligo "$Debut $Fin" "$Dir2/${PAB2}.log" } set OldNom $LeNomOligo #Espionne "NomOligo $LeNomOligo - OldNom $LeNomOligo" while {1} { if {[regexp $LeNomOligo $LesOligos2]} { #Espionne "NOmOligo $LeNomOligo - $LesOligos2" regexp {Oligo([0-9]+)_} $LeNomOligo tmp Nb #Espionne "NOmOligo $LeNomOligo - $tmp - $Nb" set OldNb $Nb incr Nb regsub "${OldNb}_" $LeNomOligo "${Nb}_" LeNomOligo } else {break} } regsub "$OldNom" $Selection "$LeNomOligo" Selection Espionne "Ajoute a $FichierACharger2 $Selection" #AppendAuFichier $FichierACharger2 $Selection #Espionne ">>>>Adding<<<<" #Espionne "$Selection" #Espionne ">>>>>>To<<<<<<" #Espionne "$FichierACharger2\n" Espionne "SupprimeUnOligoPourCeuxDejaFait $FichierACharger1 $OldNom" Espionne "Ajoute a $FichierACharger1 $Selection" #SupprimeUnOligoPourCeuxDejaFait $FichierACharger1 $OldNom #AppendAuFichier $FichierACharger1 $Selection return "" } proc AjouteUnUnderscore {Mot Position} { set LesLettres [split $Mot ""] set LeMotAvecUnderscore [linsert $LesLettres $Position "_"] set MotAvecUnderscore [join $LeMotAvecUnderscore ""] return $MotAvecUnderscore } proc AjusteAngles {AId n} { global Abr sum set t [set Abr(Arbre,$AId)] if {[$t isleaf $n]} {return $sum} if {$n eq "root"} { AjusteAnglesRoot $AId root return $sum } set RR [$t get $n RightR] set RR [expr {$RR>[Pi]?$RR-[2Pi]:$RR}] set RL [$t get $n RightL] set RL [expr {$RL>[Pi]?$RL-[2Pi]:$RL}] set LR [$t get $n LeftR] set LR [expr {$LR>[Pi]?$LR-[2Pi]:$LR}] set LL [$t get $n LeftL] set LL [expr {$LL>[Pi]?$LL-[2Pi]:$LL}] set AR [$t get $n AncesR] set AR [expr {$AR>[Pi]?$AR-[2Pi]:$AR}] set AL [$t get $n AncesL] set AL [expr {$AL>[Pi]?$AL-[2Pi]:$AL}] set NdRight [$t get $n NdRight] set NdLeft [$t get $n NdLeft] set LRLL [$t get $n LRLL] set RRRL [$t get $n RRRL] if {abs($RL-$AL) < $RRRL} { set RRAL 0. } else { set RRAL [expr {abs($RR-$AL)}] set RRAL [expr {$RRAL>[Pi]?[2Pi]-$RRAL:$RRAL}] } if {abs($LL-$RL) < $LRLL} { set LRRL 0. } else { set LRRL [expr {abs($LR-$RL)}] set LRRL [expr {$LRRL>[Pi]?[2Pi]-$LRRL:$LRRL}] } if {$LRLL > abs($LR-$AR)} { set ARLL 0. } else { set ARLL [expr {abs($AR-$LL)}] set ARLL [expr {$ARLL>[Pi]?[2Pi]-$ARLL:$ARLL}] } set AngVide [expr {$LRRL + $ARLL + $RRAL}] set angeq [expr {$AngVide/3.}] set DecTot [expr {abs($angeq-$RRAL) + abs($angeq-$LRRL) + abs($angeq-$ARLL)}] set sum [expr {$sum + $DecTot}] set tilt1 [expr {$angeq-$RRAL}] TiltArbre $AId $n $NdRight $tilt1 if {$tilt1 < 0.} { set LRRL [expr {$LRRL+abs($tilt1)}] } else { set LRRL [expr {$LRRL-abs($tilt1)}] } set tilt2 [expr {$angeq-$LRRL}] TiltArbre $AId $n $NdLeft $tilt2 puts "----- Ajsutement --------" puts "$n | R $NdRight | L $NdLeft" puts [format "RRAL %5.2f RR %5.2f AL %5.2f" $RRAL $RR $AL] puts [format "LRRL %5.2f LR %5.2f RL %5.2f" $LRRL $LR $RL] puts [format "ARLL %5.2f AR %5.2f LL %5.2f" $ARLL $AR $LL] puts [format "Ang Egaux : %6.2f Decal %6.2f" $angeq $DecTot] puts [format "tilt RRAL : %6.2f | LRRL %6.2f" $tilt1 $tilt2] puts [format "nRRAL %6.2f nLRRL %6.2f" [expr {$RRAL+$tilt1}] [expr {$LRRL+$tilt2}]] puts "" return $sum } proc AjusteAngles2 {AId n} { global Abr sum PVmL PVmR set t [set Abr(Arbre,$AId)] if {[$t isleaf $n]} {return $sum} if {$n eq "root"} { AjusteAnglesRoot $AId root return $sum } set xn [$t get $n xcoord] set yn [$t get $n ycoord] set p [$t parent $n] set xp [$t get $p xcoord] set yp [$t get $p ycoord] if {$xn == $xp && $yn == $yp} { lassign [$t children $p] e1 e2 if {$n eq $e1} {set p $e2} {set p $e1} set xp [$t get $p xcoord] set yp [$t get $p ycoord] } set NdMaxRight [$t get $n NdRight] set NdMaxLeft [$t get $n NdLeft] set NdAncesL [$t get $n NdAncesL] set NdAncesR [$t get $n NdAncesR] lassign [$t children $n] e1 e2 if {[lsearch [concat $e1 [$t descendants $e1]] $NdMaxRight] != -1} { set NdR $e1 set NdL $e2 } else { set NdR $e2 set NdL $e1 } puts "NdR $NdR" puts "NdL $NdL" set NRR [$t get $NdR NdRight] set NRL [$t get $NdR NdLeft] set NLR [$t get $NdL NdRight] set NLL [$t get $NdL NdLeft] puts "NRR $NRR NRL $NRL" puts "NLR $NLR NLL $NLL" if {0} { set Ln [concat $NdR [$t descendants $NdR]] if {[llength $Ln] == 1} { set NRL $Ln set NRR $Ln } else { lassign [NoeudLRDe $AId $n $p $Ln] NRL NRR } } set x1 [$t get $NRL xcoord] set y1 [$t get $NRL ycoord] set RL [Coords2Angle [expr {$x1-$xn}] [expr {$y1-$yn}]] if {0} { set Ln [concat $NdL [$t descendants $NdL]] if {[llength $Ln] == 1} { set NLL $Ln set NLR $Ln } else { lassign [NoeudLRDe $AId $n $p $Ln] NLL NLR } } set x2 [$t get $NLR xcoord] set y2 [$t get $NLR ycoord] set LR [Coords2Angle [expr {$x2-$xn}] [expr {$y2-$yn}]] set LL [$t get $n LeftA] while {$LL > [2Pi]} {set LL [expr {$LL - [2Pi]}]} set RR [$t get $n RightA] while {$RR > [2Pi]} {set RR [expr {$RR - [2Pi]}]} set AL [$t get $n AncesL] set AR [$t get $n AncesR] foreach v {RR RL LR LL AL AR} { set $v [expr {[set $v]>[Pi]?[set $v]-[2Pi]:[set $v]}] } set RRAL [expr {$RR-$AL}] if {$RRAL < 0.} {set RRAL [expr {[2Pi]+$RRAL}]} set RRAL [expr {$RRAL>[Pi]?[2Pi]-$RRAL:$RRAL}] set LRRL [expr {$LR-$RL}] if {$LRRL < 0.} {set LRRL [expr {[2Pi]+$LRRL}]} set LRRL [expr {$LRRL>[Pi]?[2Pi]-$LRRL:$LRRL}] set ARLL [expr {$AR-$LL}] if {$ARLL < 0.} {set ARLL [expr {[2Pi]+$ARLL}]} set ARLL [expr {$ARLL>[Pi]?[2Pi]-$ARLL:$ARLL}] set AngVide [expr {$LRRL + $ARLL + $RRAL}] set angeq [expr {$AngVide/3.}] set DecTot [expr {abs($angeq-$RRAL) + abs($angeq-$LRRL) + abs($angeq-$ARLL)}] set sum [expr {$sum + $DecTot}] set tilt1 [expr {$angeq-$RRAL}] TiltArbre $AId $n $NdR $tilt1 if {$tilt1 < 0.} { set LRRL [expr {$LRRL+abs($tilt1)}] } else { set LRRL [expr {$LRRL-abs($tilt1)}] } set tilt2 [expr {$angeq-$LRRL}] TiltArbre $AId $n $NdL $tilt2 puts "----- Ajsutement --------" puts "$n | R $NdR | L $NdL" puts [format "Nd RR %6.3f %s Nd RL %6.3f %s" $RR $NRR $RL $NRL] puts [format "Nd LR %6.3f %s Nd LL %6.3f %s" $LR $NLR $LL $NLL] puts [format "Nd AL %6.3f %s Nd AR %6.3f %s" $AL $NdAncesL $AR $NdAncesR] puts [format "RRAL %6.3f RR %6.3f AL %6.3f" $RRAL $RR $AL] puts [format "LRRL %6.3f LR %6.3f RL %6.3f" $LRRL $LR $RL] puts [format "ARLL %6.3f AR %6.3f LL %6.3f" $ARLL $AR $LL] puts [format "Ang Egaux : %6.3f Decal %6.3f" $angeq $DecTot] puts [format "tilt RRAL : %6.3f | LRRL %6.3f" $tilt1 $tilt2] puts [format "nRRAL %6.3f nLRRL %6.3f" [expr {$RRAL+$tilt1}] [expr {$LRRL+$tilt2}]] return $sum } proc AjusteAnglesRoot {AId n} { global Abr sum set t [set Abr(Arbre,$AId)] set xp [$t get $n xcoord] set yp [$t get $n ycoord] lassign [$t children $n] e1 e2 set x [$t get $e1 xcoord] set y [$t get $e1 ycoord] if {$x == $xp && $y == $yp} {set p $e2} {set p $e1} if {! [$t isleaf $e1]} { set Ln [concat $e1 [$t descendants $e1]] lassign [NoeudLRDe $AId $e1 $p $Ln] NL1 NR1 } else { set NL1 $e1 set NR1 $e1 } if {! [$t isleaf $e2]} { set Ln [concat $e2 [$t descendants $e2]] lassign [NoeudLRDe $AId $e2 $p $Ln] NL2 NR2 } else { set NR2 $e2 set NL2 $e2 } lassign [OverlapBranch $AId $NL1 $NR1 $NL2 $NR2] o1 o2 # puts "OverlapBranch $o1 $o2" set R1 [$t get $e1 RightA] set L1 [$t get $e1 LeftA] set R2 [$t get $e2 RightA] set L2 [$t get $e2 LeftA] foreach v {R1 L1 R2 L2} { while {[set $v] > [2Pi]} {set $v [expr {[set $v]-[2Pi]}]} set $v [expr {[set $v]>[Pi]?[set $v]-[2Pi]:[set $v]}] } set L1R2 [expr {abs($L1-$R2)}] if {$L1R2 > [Pi]} {set L1R2 [expr {[2Pi]-$L1R2}]} set L2R1 [expr {abs($L2-$R1)}] if {$L2R1 > [Pi]} {set L2R1 [expr {[2Pi]-$L2R1}]} set AngVide [expr {$L1R2 + $L2R1}] set angeq [expr {$AngVide/2.}] set DecTot [expr {abs($angeq-$L1R2) + abs($angeq-$L2R1)}] set sum [expr {$sum + $DecTot}] if {[$t size $e1] < [$t size $e2]} { set AngT $L1R2 set NdT $e1 } else { set AngT $L2R1 set NdT $e2 } set tilt1 [expr {$angeq-$AngT}] TiltArbre $AId root $NdT $tilt1 puts "----- ROOT Ajsutement --------" puts "$n | E1 $e1 | E2 $e2" puts [format "L1R2 %6.3f L1 %6.3f L2 %6.3f" $L1R2 $L1 $R2] puts [format "L2R1 %6.3f L2 %6.3f R1 %6.3f" $L2R1 $L2 $R1] puts [format "Ang Egaux : %6.3f Decal %6.3f" $angeq $DecTot] puts [format "tilt LRRL : %6.3f Nd tilt %s" $tilt1 $NdT] puts [format "nAngT %6.3f" [expr {$AngT+$tilt1}]] return $sum } proc AjusteCoordonneesInit {AId} { global Abr set t [set Abr(Arbre,$AId)] set PWd [set Abr($AId,PADWdt)] set PHg [set Abr($AId,PADHgt)] set Wdt [set Abr($AId,FWidth)] set Hgt [set Abr($AId,FHeight)] set LongNom [PlusLongNomAff $AId] if {! [info exists Abr($AId,DMult)]} { # set mult [expr {($Wdt-2*$LongNom)/[set Abr($AId,Dmax)]}] set mult [expr {($Wdt-2*$LongNom)/[set Abr($AId,rmax)]}] set Abr($AId,DMult) $mult } set Xmin 99999999. set Ymin 99999999. set Xmax -99999999. set Ymax -99999999. set m [set Abr($AId,DMult)] foreach d [$t nodes] { set x [expr {[$t get $d xcoord]*$m}] set y [expr {[$t get $d ycoord]*$m}] $t set $d xdes $x $t set $d ydes $y set Xmin [expr {$Xmin<$x?$Xmin:$x}] set Ymin [expr {$Ymin<$y?$Ymin:$y}] set Xmax [expr {$Xmax>$x?$Xmax:$x}] set Ymax [expr {$Ymax>$y?$Ymax:$y}] } set Abr($AId,XminR) $Xmin set Abr($AId,YminR) $Ymin set Abr($AId,XmaxR) $Xmax set Abr($AId,YmaxR) $Ymax return } proc AjusteCoordonneesInit2 {AId} { global Abr set t [set Abr(Arbre,$AId)] set PWd [set Abr($AId,PADWdt)] set PHg [set Abr($AId,PADHgt)] set Wdt [set Abr($AId,FWidth)] set Hgt [set Abr($AId,FHeight)] set sca [set Abr($AId,ScaleR)] set LongNom [PlusLongNomAff $AId] # set HgF [font metrics "TreeFont$AId" -linespace] set HgF [font configure "TreeFont$AId" -size] set rmin [set Abr($AId,rmin)] set rmax [set Abr($AId,rmax)] set sang [set Abr($AId,subangleMax)] set mult [expr {abs($HgF/($rmax*sin($sang)))}] if {0} { puts "PWd $PWd PHg $PHg Wdt $Wdt Hgt $Hgt" puts "HgF $HgF" puts "rmin $rmin" puts "rmax $rmax" puts "sang $sang" puts "mult $mult" puts "long Nom $LongNom" puts "" } # Taille de arbre sans les noms au bout # des feuilles set Xmin 99999999. set Ymin 99999999. set Xmax -99999999. set Ymax -99999999. foreach d [$t nodes] { set x [expr {$mult*[$t get $d xcoord]}] set y [expr {$mult*[$t get $d ycoord]}] # set x [expr {$sca*$mult*[$t get $d xcoord]+$LongNom}] # set y [expr {$sca*$mult*[$t get $d ycoord]+$LongNom}] $t set $d xcoord $x $t set $d ycoord $y set Xmin [expr {$Xmin<$x?$Xmin:$x}] set Ymin [expr {$Ymin<$y?$Ymin:$y}] set Xmax [expr {$Xmax>$x?$Xmax:$x}] set Ymax [expr {$Ymax>$y?$Ymax:$y}] } if {0} { puts "Min/Max SANS FEUILLES" puts "Xmin $Xmin" puts "Ymin $Ymin" puts "Xmax $Xmax" puts "Ymax $Ymax" puts "" } # Recentre Arbre sans feuille foreach d [$t nodes] { set x [expr {[$t get $d xcoord]-$Xmin}] set y [expr {[$t get $d ycoord]-$Ymin}] $t set $d xcoord $x $t set $d ycoord $y } set Xmin 0. set Ymin 0. set Xmax [expr {$Xmax-$Xmin}] set Ymax [expr {$Ymax-$Ymin}] set DX [expr {$Xmax-$Xmin}] set DY [expr {$Ymax-$Ymin}] set PlacePW [expr {$PWd - 2*$LongNom}] set PlacePH [expr {$PHg - 2*$LongNom}] if {$DX > $PlacePW || $DY > $PlacePH} { if {$DX - $PlacePW > $DY - $PlacePH} { set mult [expr {$PlacePW/$DX}] } else { set mult [expr {$PlacePH/$DY}] } } set PlaceSW [expr {$Wdt - 2*$LongNom}] set PlaceSH [expr {$Hgt - 2*$LongNom}] if {$DX < $PlaceSW && $DY < $PlaceSH} { if {$PlaceSW-$DX > $PlaceSH-$DY} { set mult [expr {$PlaceSH/$DY}] } else { set mult [expr {$PlaceSW/$DX}] } } # puts "mult apres $mult" set NXmin 99999999999. set NYmin 99999999999. set NXmax -99999999999. set NYmax -99999999999. foreach d [$t nodes] { set OldX [$t get $d xcoord] set OldY [$t get $d ycoord] set x [expr {$mult*$OldX + $LongNom}] set y [expr {$mult*$OldY + $LongNom}] $t set $d xcoord $x $t set $d ycoord $y if {[$t isleaf $d]} { lassign [CoordsNom $AId $d $x $y] x y } set NXmin [expr {$NXmin<$x?$NXmin:$x}] set NYmin [expr {$NYmin<$y?$NYmin:$y}] set NXmax [expr {$NXmax>$x?$NXmax:$x}] set NYmax [expr {$NYmax>$y?$NYmax:$y}] } set Abr($AId,XminR) $NXmin set Abr($AId,YminR) $NYmin set Abr($AId,XmaxR) $NXmax set Abr($AId,YmaxR) $NYmax if {0} { puts "Abr($AId,Xmin) $Xmin" puts "Abr($AId,Ymin) $Ymin" puts "Abr($AId,Xmax) $Xmax" puts "Abr($AId,Ymax) $Ymax" puts "" } return } proc AjusteScrollRegion {AId} { global Abr set PAD [set Abr($AId,PAD)] set Lal [$PAD bbox all] lassign $Lal x1 y1 x2 y2 set Dx [expr {$x2-$x1}] set Dy [expr {$y2-$y1}] $PAD configure -scrollregion [list $x1 $y1 $Dx $Dy] update idletasks return } proc AjusteXY {AId n px py {mult 1.}} { global Abr set t [set Abr(Arbre,$AId)] foreach xa {xO xE} ya {yO yE} { set x [$t get $n $xa] set y [$t get $n $ya] set nx [expr {($x+$px)*$mult}] set ny [expr {($y+$py)*$mult}] $t set $n $xa $nx $t set $n $ya $ny } foreach e [$t children $n] { AjusteXY $AId $e $px $py $mult } return } proc AjusteXYCart {AId n mx my {mult 1.}} { global Abr global Xmin Xmax Ymin Ymax set t [set Abr(Arbre,$AId)] set x [$t get $n xcoord] set y [$t get $n ycoord] set nx [expr {(($x+abs($Xmin))*$mx)*$mult}] set ny [expr {(($y+abs($Ymin))*$my)*$mult}] $t set $n xcoord $nx $t set $n ycoord $ny set Xmin [expr {$Xmin<$nx?$Xmin:$nx}] set Ymin [expr {$Ymin<$ny?$Ymin:$ny}] set Xmax [expr {$Xmax>$nx?$Xmax:$nx}] set Ymax [expr {$Ymax>$ny?$Ymax:$ny}] foreach e [$t children $n] { AjusteXYCart $AId $e $mx $my $mult } return } proc AlA {{file ""} args} { global LNOrdali Sequences NbSeq Mbl LSOrdali WeightMotif Sref MotifLen Lscores WeightCols LgMax MblNeg Cbl NbSeq # positive si 1, matrix , scale 1. array set Cbl [InitPAM35] array set Mbl [InitClustalMatrix blosum62 1 1.] array set MblNeg [InitClustalMatrix blosum62 0 1.] LesDefsAlA # inits InitSeuils set RenameSeq 1 # 1: poids gaussiens, 0 : 1.0 pour chqeue pos #InitWg 1 InitWg 0 AlACommandLineOptions $args puts "Inits done ..." set Lscores [list] set ok [SequencesPourAgent $file $RenameSeq] if {$ok == 0} { return 0 } puts "Sequences :\n[join $LNOrdali \n]" puts "\n-------------------------" puts "| Score Ref : [ScoreAlignmentAgents Sref]" puts "-------------------------\n" puts "Nombre seqs : $NbSeq" set LgMax 0 foreach s $LSOrdali { incr LgMax [string length [string map {"." ""} $s]] } puts "Long. cumulee : $LgMax" #PrepareSequencesAgents AgentsRemoveColsGaps puts "Start init agents ...." InitAgents puts "done !" GUIAgents set ::iter 0 #BruteForceAgents BruteForceAgents2 #exit #RunAgents return 1 } proc AlACommandLineOptions {args} { #puts "args $args" set args [lindex $args 0] #puts "[llength $args]" if {$args == "{}" } { return } if {[llength $args] % 2} { puts "Bad number of arguments ! Key-value " exit } foreach {key value} $args { switch $key { "-wmotif" { set ::WeightMotif $value } "-initw" { InitWg $value } "-wcols" { set ::WeightCols $value } "-gui" { set ::WithGUI $value set ::StepMode 1 } "-lenmotif" { set ::MotifLen $value } } } return } proc Aleatoire {{Min 0} {Max 1}} { set Alea [expr round(rand() * ($Max - $Min)) + $Min] } proc AlgoGenet {NbIndiv NbMilliSecMax} { set LesPhrasesIni [LesPhrasesMemorisees] #genere une pop aleatoire de NbIndiv set LesIndividus [InitPop $NbIndiv] #genere un maximum d'individu aleatoirement en NbMilliSecMax msec #lorsque l'un d'entre eux est meilleur que le moins bon de la pop #il le remplace alors Espionne "Old Best : [lindex [lindex $LesIndividus 0] 0]" set LesIndividus [PopAleatoire $LesIndividus $NbMilliSecMax] ##On ne garde que les meilleurs individus set LesPhrasesFinales {} set ScoreMax [lindex [lindex $LesIndividus 0] 0] foreach LIndiv $LesIndividus { set Score [lindex $LIndiv 0] if {$Score < $ScoreMax} {continue} lappend LesPhrasesFinales [join [lrange $LIndiv 1 end] " "] } ##On determine parmi les meilleurs celui qui est plus proche des phrases initiales return [MeilleurePhrase $LesPhrasesFinales $LesPhrasesIni] } proc AliCartoon {} { #rR c'est pour faire une petite animation d'un alignement (pour Renaud) #rR on part de l'alignemnet et on le des-aligne ... ;-) set K [UnCanva 200 1600 200 200] lappend Ali "..QLKIPV.YV.SLTNQTAKE" lappend Ali "TAQVKIQ........NQTAKE" lappend Ali "...VKIQVHYVDSLTNQ" set LargAli 0 foreach Seq $Ali { set LargAli [expr max($LargAli,[string length $Seq])] } set I 0 foreach Seq $Ali { set S($I) "$Seq[string repeat . [expr $LargAli-[string length $Seq]]]" incr I } set LesGaps {} foreach I [array names S] { set J 0 foreach AA [split $S($I) ""] { if { ! [regexp {[^\.]} [string range $S($I) $J end]]} { break } if {$AA=="."} { lappend LesGaps "$I $J" } incr J } } set N [llength $LesGaps] set CSGX 20 set CSGY [expr 20 + $N*50] set DeplacementY 0 set CSGY [expr 20] set Tic 0 while {1} { Cartoon $K S $CSGX $CSGY ; incr CSGY $DeplacementY FaireLire "Au suivant" if {$LesGaps=={}} { break } set L [llength $LesGaps] set Z [expr round(floor(rand()) * $L)] lassign [lindex $LesGaps $Z] I J set S($I) "[string replace $S($I) $J $J]." set LesGaps {} foreach I [array names S] { set J 0 foreach AA [split $S($I) ""] { if { ! [regexp {[^\.]} [string range $S($I) $J end]]} { break } if {$AA=="."} { lappend LesGaps "$I $J" } incr J } } } } proc AliFastaToAliBlast {AlignementFasta DQuery FQuery DSbjct FSbjct} { set NbCaractParLigne 60 regsub -all ":" $AlignementFasta "\|" AlignementFasta set Blanc " " set LesLignes [split $AlignementFasta "\n"] set LaQuery [split [string trim [lindex $LesLignes 0]] "" ] set LesBarres [split [string trim [lindex $LesLignes 1]] "" ] set LeSbjct [split [string trim [lindex $LesLignes 2]] "" ] set TailleDebut [string length [lindex [lsort -integer -decreasing [list $DQuery $DSbjct $FQuery $FSbjct]] 0]] set PremiereHomologie [lsearch $LesBarres "|"] set i 0 set n $PremiereHomologie foreach Barre $LesBarres { if {$Barre == "|"} {set n $i} incr i } set DerniereHomologie $n set LaQuery [lrange $LaQuery $PremiereHomologie $DerniereHomologie] set LesBarres [lrange $LesBarres $PremiereHomologie $DerniereHomologie] set LeSbjct [lrange $LeSbjct $PremiereHomologie $DerniereHomologie] set i 0 set AliBlast "" set LigneQuery "" set LigneBarres "" set LigneSbjct "" set DQ $DQuery set DS $DSbjct foreach ANQuery $LaQuery Barres $LesBarres ANSbjct $LeSbjct { incr i if {$i == $NbCaractParLigne} { append LigneQuery $ANQuery append LigneBarres $Barres append LigneSbjct $ANSbjct set n 0 foreach AN [split $LigneQuery ""] { if {![regexp -nocase {[ATGCNXMKRSYWVHDB]} $AN]} {continue} incr n } if {$DQuery < $FQuery} {set FQ [expr $DQ + $n - 1]} else {set FQ [expr $DQ - $n + 1]} set n 0 foreach AN [split $LigneSbjct ""] { if {![regexp -nocase {[ATGCNXMKRSYWVHDB]} $AN]} {continue} incr n } if {$DSbjct < $FSbjct} {set FS [expr $DS + $n - 1]} else {set FS [expr $DS - $n + 1]} set LigneQuery [format "Query: %-${TailleDebut}d %s %d" $DQ $LigneQuery $FQ] set LigneBarres [format "%[expr $TailleDebut + 7]s %s" $Blanc $LigneBarres ] set LigneSbjct [format "Sbjct: %-${TailleDebut}d %s %d" $DS $LigneSbjct $FS] if {$DQuery < $FQuery} {set DQ [expr $FQ+1]} else {set DQ [expr $FQ-1]} if {$DSbjct < $FSbjct} {set DS [expr $FS+1]} else {set DS [expr $FS-1]} append AliBlast "$LigneQuery\n$LigneBarres\n$LigneSbjct\n\n\n" set LigneQuery "" set LigneBarres "" set LigneSbjct "" set i 0 continue } append LigneQuery $ANQuery append LigneBarres $Barres append LigneSbjct $ANSbjct } if {$LigneQuery != ""} { set LigneQuery [format "Query: %-${TailleDebut}d %s %d" $DQ $LigneQuery $FQuery] set LigneBarres [format "%[expr $TailleDebut + 7]s %s" $Blanc $LigneBarres ] set LigneSbjct [format "Sbjct: %-${TailleDebut}d %s %d" $DS $LigneSbjct $FSbjct] append AliBlast "$LigneQuery\n$LigneBarres\n$LigneSbjct\n\n" } return $AliBlast } proc AliTest {{Option genomes} {organism mouse} {BirdVersion bird}} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|AliTest : Start" set Path "/tmp/BirdCird" # set FichierDesCoord [open "$Path.txt" "r"] set FichierDesRequetes [open "$Path.sql" "w"] #ScanLaListe $Ligne Id Chromosome Start End #puts $FichierDesRequetes "WH SQLNATIVE SELECT * FROM ucschuman.alignements, ucschuman.alignements_sequences WHERE ali_startq < $Start AND ali_endq > $End AND (ali_access = as_access) " #puts $FichierDesRequetes "WH SQLNATIVE SELECT as_access FROM ucschuman.alignements_sequences where as_access NOT IN (select ali_access from ucschuman.alignements)" #puts $FichierDesRequetes "WH SQLNATIVE SELECT count(*) FROM ucschuman.alignements where ali_access NOT IN (select as_access from ucschuman.alignements_sequences) " #puts $FichierDesRequetes "WH SQLNATIVE SELECT ali_access, count(*) from ucschuman.alignements group by ali_access having count(*) > 1" if { $Option == "count" } { #puts $FichierDesRequetes ID * DB UCSC" #puts $FichierDesRequetes WH SQLNATIVE SELECT ali_genomet FROM ucsc$Organismet.alignements WHERE ali_access NOT in (select as_access from ucsc$Organismet.alignements_sequences)" #puts $FichierDesRequetes LM 30" puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT count(*) FROM ucsc$organism.alignements" puts $FichierDesRequetes "LM 30" puts $FichierDesRequetes "//" } else { if { $Option == "genomes" } { puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT ali_organismet FROM ucsc$organism.alignements group by ali_organismet" puts $FichierDesRequetes "LM 30" puts $FichierDesRequetes "//" } } close $FichierDesRequetes exec /biolo/bird/bin/birdql_client.sh "$Path.sql" bird "$Path.res" set FichierDesRequetesExecutees [open "$Path.res" "r"] while { [gets $FichierDesRequetesExecutees Ligne] >=0 } { Espionne $Ligne } close $FichierDesRequetesExecutees set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|AliTest : End" } proc Alias {Nom} { return [ExtraitInfo $Nom "Alias"] } proc AliasAlias {A {Lequel ""} {Append ""}} { global AliasAlias if {$Append==""} { set Append "NoAppend" } set Append [string equal -nocase $Append "Append"] if {$Lequel==""} { set Lequel "Gscope" } if {[info exists AliasAlias($A,$Lequel)]} { return $AliasAlias($A,$Lequel) } if {[info exists AliasAlias("EstCharge")]} { return "" } set LesAliasGscope [lsort -dictionary [LesAliasExistants]] set FichierAliasAlias "[RepertoireDuGenome]/fiches/AliasAlias" if {[FileExists $FichierAliasAlias]} { array set AliasAlias [LesLignesDuFichier $FichierAliasAlias] } set AliasAlias("EstCharge") 1 if { ! $Append } { return [AliasAlias $A $Lequel] } foreach VE [VEDidier ListeDes VE] { Espionne $VE set ProtName [VEDidier $VE ProtName] set Organism [VEDidier $VE Organism] set Original $ProtName set ProtName [string trim $ProtName] regsub { [^ ]$} $ProtName "" ProtName set ProtOrga "${ProtName}_$Organism" regsub -all " " $ProtOrga "_" ProtOrga if {[info exists AliasAlias($ProtOrga,Gscope)]} { continue } Espionne "$ProtOrga" set LesAliasLesPlusProches [LesAliasLesPlusProches $ProtOrga] if {0 && [string equal $ProtName [lindex $LesAliasLesPlusProches 0]]} { set AliasAlias($ProtOrga,Gscope) $AliasGscope set AliasAlias($AliasGscope,Didier) $ProtOrga continue } set Ligne [VEDidier $VE] while 1 { set Meilleur [ChoixParmi [concat [list SaveAndQuit $ProtOrga $Ligne "****"] $LesAliasLesPlusProches [list "******"] $LesAliasGscope]] if {[regexp "SaveAndQuit" $Meilleur]} { if {[OuiOuNon "Do I save and quit ?"]} { break } continue } break } if {[regexp "SaveAndQuit" $Meilleur]} { break } set AliasAlias($ProtOrga,Gscope) $Meilleur set AliasAlias($Meilleur,Didier) $ProtOrga } foreach {C V} [array get AliasAlias] { ScanLaListe [split $C ","] POA Qui if {$Qui=="Gscope"} { lappend LesDidier $POA } if {$Qui=="Didier"} { lappend LesGscope $POA } } set AliasAlias(ListeDes,Gscope) [lsort $LesGscope] set AliasAlias(ListeDes,Didier) [lsort $LesDidier] SauveLesLignes [array get AliasAlias] dans $FichierAliasAlias return [AliasAlias $A $Lequel] } proc AliasDansTfaPourTous {} { if { ! [OuiOuNon "This proc read the 'alias' in the prottfa file.\n Please verify the source sode if it corresponds to what you need\n Do I continue ?"]} { return } foreach Nom [ListeDesPABs] { set FichierTfa "[RepertoireDuGenome]/prottfa/$Nom" if { ! [file exists $FichierTfa]} { continue } set Ent [EnteteDuFichierTFA $FichierTfa] if {[OuiOuNonMemo "Do I take the second word of the tfa file as the Alias?"]} { set A "" scan $Ent "%s %s" CN A regsub ">" $CN "" NomLu if {$NomLu!=$Nom} { FaireLire "$Nom has following line\n$Ent" } InformeSansDemander $Nom "Alias: $A" continue } continue set Seq [QueLaSequenceDuFichierTFA $FichierTfa] set BonTFA [SequenceFormatTFA [string toupper $Seq] "$Nom $A" "protbrut"] Espionne [Sauve $BonTFA dans $FichierTfa] } } proc AliasGeneNames {Nom} { set LesGn {} foreach PossibleAlias [list "AliasGnRna:" "AliasGnProt:" "AliasGnHuman:"] { LConcat LesGn [split [ExtraitInfo $Nom $PossibleAlias] " "] } set LesAliasGn {} set DejaVu([string toupper [ValiGN $Nom]]) 1 foreach Gn $LesGn { set GN [string toupper $Gn] if {[info exists DejaVu($GN)]} { continue } set DejaVu($GN) $Gn lappend LesAliasGn $Gn } return $LesAliasGn } proc AliasManquants {} { foreach VE [VEDidier ListeDes VE] { set D [VEDidier $VE "ProtName"] set O [VEDidier $VE "Organism"] set DO "$D$O" regsub -all " " $DO "_" DO set VEDuAlias($DO) $VE } foreach D [AliasAlias ListeDes Didier] { set G [AliasAlias $D Gscope] if {[AliasAlias $D Gscope]!=""} { continue } set Scientist "Scientist unknown" if {[info exists VEDuAlias($D)]} { set VE $VEDuAlias($D) set Scientist [VEDidier $VE Scientist] } Espionne "$D $Scientist" } exit } proc AliasParNomDuFichier {} { set FichierFOF [ButineArborescence All "[RepertoireDuGenome]"] foreach Ligne [LesLignesDuFichier $FichierFOF] Nom [ListeDesPABs] { scan $Ligne "%s %s" AliasLu FicLu set Nouveau [file tail $FicLu] if {0 && [Alias $Nom]!=$AliasLu} { FaireLire "Attention pour $Nom $AliasLu != [Alias $Nom]" } Espionne "InformeSansDemander $Nom =Alias: $Nouveau" InformeSansDemander $Nom "=Alias: $Nouveau" } exit } proc AliasPourClonage {Nom} { global AliasPourClonage if {[info exists AliasPourClonage($Nom)]} { return [set AliasPourClonage($Nom)] } set Alias "" if {$Alias==""} { set Alias [Alias $Nom] } if {$Alias==""} { set Alias [Narcisse $Nom] } if {$Alias==""} { set Alias $Nom } set AliasPourClonage($Nom) $Alias return $Alias } proc AliasPourTous {} { global RepertoireDuGenome FaireLire "Please browse for the file .fof containing 'Alias ... ... ...'" set FOF [ButineArborescence "All" "$RepertoireDuGenome"] set Numero 0 foreach Ligne [LesLignesDuFichier $FOF] { if { ! [regexp -nocase {[A-Z0-9_]} $Ligne]} { continue } catch {unset Nom} catch {unset Ver} catch {unset OrigineBlastP} catch {unset OrigineBallast} catch {unset OrigineMSF} set NbLus [scan $Ligne "%s %s %s %s %s %s" Alias OrigineVer OrigineBlastP OrigineBallast OrigineMSF SecondMSF] if {$NbLus < 2} { if {[OuiOuNon "$Ligne\n missing values. Do I stop ?"]} { exit } continue } set Nom [format "%s%[FormatDesNumerosPourCollection]" [PreFixe] [incr Numero]] InformeSansDemander $Nom "=Alias: $Alias" } } proc AlignAgent {} { global iTag set chx [chooseCouple] lassign $chx seq1 ag1 seq2 puts "choose $chx" lassign [FindAgentFriend {*}$chx] ag2 score seuil if {$::debug} { DebugAgents $seq1 $ag1 $seq2 $ag2 $score $seuil } if {$ag2 eq "skip"} { #.l configure -background "#770000" append ::Lab " ==> SKIP $seq1 $::TAg($ag1,$seq1,seq)" return -1 } #.l configure -background black append ::Lab " $seq1 $::TAg($ag1,$seq1,seq) $seq2 $::TAg($ag2,$seq2,seq) [format %6.3f $score]" if {$::StepMode} { puts "\nSHOW 1" set iTag 0 ShowPairGUIAgent $seq1 $ag1 $seq2 $ag2 MemorisePair $seq1 $ag1 $seq2 $ag2 } set move [ShouldMoveAgents $seq1 $ag1 $seq2 $ag2] if {$move} { SlideAgent $seq1 $ag1 $seq2 $ag2 if {$::StepMode} { UpdateGUI set iTag 0 ShowPairGUIAgent $seq1 $ag1 $seq2 $ag2 2 } AgentsRemoveColsGaps UpdateGUI } return $move } proc AlignQueryVsMACS {{FichierTFA ""} {FichierMSF ""} {OutputMSF ""}} { Wup "Permet d aligner une sequence au format Fasta contre un MACS de reference" Wup "L alignement est realise par clustalw et le mode profile" if {$FichierMSF=="" || $FichierTFA=="" || $OutputMSF==""} {return "-1"} #Alignement de la sequence du fichier TFA contre le MACS set Output_Profile "" set Clustal_Profile "clustalw" #set Clustal_Profile "/biolo/clustal/bin/clustalw" if {[catch {set Output_Profile [exec $Clustal_Profile -profile1=$FichierMSF -profile2=$FichierTFA -sequences -output=gcg -outfile=$OutputMSF ]} Message]} { Espionne ">>>AlignQueryVsMACS $FichierMSF" Espionne "pb $Message" return "-1" } else { set FichierDND $FichierTFA regsub -nocase ".tfa$" $FichierDND ".dnd" FichierDND if {[file exists $FichierDND]} { file delete -force $FichierDND } return "1" } } proc AlignRDNA2Prot {p r} { # first check length set pdg [string map [list "." ""] $p] # stop codon set Lstop [list tag taa tga TAG TAA TGA] if {[string range $r end-2 end] in $Lstop} { set r [string range $r 0 end-3] } # diff of 3 may be due to missing initiaor M if {abs( ([string length $pdg]*3) - [string length $r]) == 3} { # May be a missing leading M if {[string index $p 0] ne "M" && [string range $r 0 2] in [list atg ATG]} { set r [string range $r 3 end] } } if {([string length $pdg]*3) != [string length $r]} { puts "PB ! RNA [string length $r] Prot [expr {[string length $pdg]*3}]" return "" } set i 0 set Lc [split $p ""] set al "" foreach c $Lc { if {$c eq "."} { append al "..." } else { append al [string range $r [expr {$i*3}] [expr {$i*3+2}]] incr i } } return $al } proc Aligne3PdeADN {Nom Devant DebutDevant FinDevant Derriere DebutDerriere FinDerriere Orient} { global RepertoireDuGenome global Commandes global ADN TDN RAC global NePlusFaireAligne3P if { ! [info exists NePlusFaireAligne3P]} { set NePlusFaireAligne3P 1 } if { $Orient == "F" } { set ListeDes3Frames {a b c} } else { set ListeDes3Frames {f e d} } if { $NePlusFaireAligne3P || ! [OuiOuNon "Je lance 3 alignements ?"]} { return "a faire." } if { ! [info exists ADN]} { ChargeADNetTDNetRAC } set NomDesSequences "" if {[YaPABdans $Nom]} { set FichierBlast "$RepertoireDuGenome/blastp/$Nom" } if {[regexp "TROU" $Nom]} { set FichierBlast "$RepertoireDuGenome/trousblastp/$Nom" } if { $Devant == "Laisser" } { set SequenceDevant [BoutADN $DebutDevant $FinDevant $Orient] } set LongueurPepDevant [expr ($FinDevant-$DebutDevant+1)/3] if { $Derriere == "Laisser" } { set SequenceDerriere [BoutADN $DebutDerriere $FinDerriere $Orient] } set LongueurPepDerriere [expr ($FinDerriere-$DebutDerriere+1)/3] set Sens [expr $Orient=="F" ? -1 : 1] foreach Frame $ListeDes3Frames { set CasseDevant "toupper" if { $Devant == "Changer" } { incr DebutDevant $Sens incr FinDevant $Sens set SequenceDevant [BoutADN $DebutDevant $FinDevant $Orient] set SequenceDevant [string tolower $SequenceDevant] set CasseDevant "tolower" set NomDeLaSequence "${Nom}_${LongueurPepDevant}_${Frame}" } set CasseDerriere "toupper" if { $Derriere == "Changer" } { incr DebutDerriere $Sens incr FinDerriere $Sens set SequenceDerriere [BoutADN $DebutDerriere $FinDerriere $Orient] set SequenceDerriere [string tolower $SequenceDerriere] set CasseDerriere "tolower" set NomDeLaSequence "${Nom}_${Frame}_${LongueurPepDerriere}" } append NomDesSequences "$NomDeLaSequence " set SequenceADN "$SequenceDevant$SequenceDerriere" set SeqGCG [NucToGCG $SequenceADN $NomDeLaSequence] set iPP [string first "\.\." $SeqGCG] set EncoreDevant $LongueurPepDevant set EncoreDerriere $LongueurPepDerriere catch {unset VraiDebutDevant VraiDebutDerriere} for {set i $iPP} {$i < [string length $SeqGCG]} {incr i} { if {[regexp {[a-zA-Z\*]} [string range $SeqGCG $i $i]]} { if { $EncoreDevant } { if { ! [info exists VraiDebutDevant]} { set VraiDebutDevant $i } set VraiFinDevant $i incr EncoreDevant -1 } else { if { $EncoreDerriere } { if { ! [info exists VraiDebutDerriere]} { set VraiDebutDerriere $i } set VraiFinDerriere $i incr EncoreDerriere -1 } } } } set LowerSeqGCG " [string range $SeqGCG 0 [expr $VraiDebutDevant-1]] [string $CasseDevant [string range $SeqGCG $VraiDebutDevant $VraiFinDevant]] [string $CasseDerriere [string range $SeqGCG $VraiDebutDerriere end]]" set iL [expr [string first "Length" $LowerSeqGCG]-1] set BonneSeqGCG "$NomDeLaSequence[string range $LowerSeqGCG $iL end]" set FichierPEP [Sauve $BonneSeqGCG dans $NomDeLaSequence] foreach Aligneur [Aligneurs] { if { [Aligneurs $Aligneur] } { set MSF [AligneLesHomologuesDuBlastContreSeq $Aligneur $FichierBlast $FichierPEP] lappend ListeDesMSF $MSF } } } set Fenetre [AfficheVariable [join $ListeDesMSF "\n"] "AvecShowAvecEtudeMSF" "Wait all be Highlighted ...\nThen reselect and press a function. "] BoutonneLaFenetre $Fenetre "Log" "AfficheLogDesMSF \[selection get\]" foreach Fichier $ListeDesMSF { set LaFenetreDesMSF($Fichier) $Fenetre } return "Aligne3P est lance sur $NomDesSequences" } proc AligneContrePDB {Lseqpdb aLbinhe aLbinsh aLbintu aLseqpdn aLseqadn} { upvar $aLbinhe Lbinhe $aLbinsh Lbinsh $aLbintu Lbintu $aLseqpdn Lseqpdn $aLseqadn Lseqadn set i 0 set Lh [list] ; set Ls [list] ; set Lt [list] set Lp [list] ; set La [list] foreach a $Lseqpdb { if {$a eq "-"} { lappend Lh X lappend Ls X lappend Lt X lappend Lp X lappend La XXX } else { lappend Lh [lindex $Lbinhe $i] lappend Ls [lindex $Lbinsh $i] lappend Lt [lindex $Lbintu $i] lappend Lp [lindex $Lseqpdn $i] lappend La [lindex $Lseqadn $i] incr i } } set Lbinhe $Lh set Lbinsh $Ls set Lbintu $Lt set Lseqpdn $Lp set Lseqadn $La return } proc AligneLesHomologuesDuBlast {Aligneur FichierBlast} { global RepertoireDuGenome set SeuilExpect 1e-3 set MaxLongueurDuBlast 50 DecortiqueBlast $FichierBlast $SeuilExpect $MaxLongueurDuBlast Query lBanqueId lAccess lDE lProfil lPN set Nom [file tail $Query] if {[YaPABdans $Nom]} { set lHomos "$RepertoireDuGenome/prottfa/$Nom" } elseif {[regexp "TROU" $Nom]} { set lHomos "$RepertoireDuGenome/trousprottfa/$Nom" } else { set lHomos $Query } if { [info exists lBanqueId] && [llength $lBanqueId] > 0 } { foreach BanqueId $lBanqueId Access $lAccess { if {[FetchTest $BanqueId]} { lappend lHomos $BanqueId continue } if {[FetchTest "protein:$Access"]} { lappend lHomos "protein:$Access" continue } Warne "$BanqueId $Access introuvable" } } set Destination "$RepertoireDuGenome/${Aligneur}/$Nom" if { [llength $lHomos] < 2 } { Warne "$Aligneur inutile. Pas de sequences a aligner dans $FichierBlast" return "" return [Sauve "$Aligneur inutile. Pas de sequences a aligner dans $FichierBlast" dans $Destination] } set Selection [join $lHomos "\n"] set MSF [AlignePar $Aligneur $Selection "Interactif" $Nom] file rename $MSF $Destination return $Destination } proc AligneLesHomologuesDuBlastContreSeq {Aligneur FichierBlast {Seq ""}} { global RepertoireDuGenome set SeuilExpect 1e-3 set MaxLongueurDuBlast 50 DecortiqueBlast $FichierBlast $SeuilExpect $MaxLongueurDuBlast Query lBanqueId lAccess lDE lProfil lPN set Nom [file tail $Query] if { $Seq == ""} { set Seq $Query } set lHomos [linsert $lAccess 0 $Seq] if { [llength $lHomos] < 2 } { return "" } set Selection [join $lHomos "\n"] set MSF [AlignePar $Aligneur $Selection "Batch" $Nom] return $MSF } proc AlignePar {Aligneur Selection Mode {NomOuNum ""}} { global Commandes if { $NomOuNum == ""} { set NomNum [pid].[NomDe ""] } if { [regexp {^[a-zA-Z]} $NomOuNum ] } { set NomNum ${NomOuNum}[NomDe ""] } if { [regexp {^[0-9]} $NomOuNum ] } { set NomNum $NomOuNum } if { [regexp {^\.[0-9]} $NomOuNum ] } { set NomNum $NomOuNum } set Tmp tmp.$NomNum if { $Mode == "Batch" } { set In $Tmp.$Aligneur.inp set Out $Tmp.$Aligneur.out set Log $Tmp.$Aligneur.log set FOF [FichierFOF $Selection $Tmp] SauveLesLignes [FOFtoTFAs $FOF] dans $In catch {set Canal [open "| [set Commandes($Aligneur)] $In $Out $Log"]} Message fconfigure $Canal -blocking false -buffering line fileevent $Canal readable "ClosCanalEtMontreMSF $Aligneur $Canal $Out.msf $Log" Warne "$Aligneur est lance en batch" return "$Out.msf" } if { $Mode == "Interactif" } { set In $Tmp.inp Sauve [ConcatLesTFAs $Selection] dans $In set LesFichiersCrees [list "$In"] foreach Ali [split $Aligneur "+"] { set Out $Tmp.$Ali.out set Log $Tmp.$Ali.log Warne "$Ali lance en interactif ... un peu de patience. Merci." eval exec "[set Commandes($Aligneur)] $In $Out $Log" Warne " ... j'ai fini." File delete -force $Out File delete -force $Log lappend LesFichiersCrees "$Out.msf" } if {[regexp "+" $Aligneur]} { return $LesFichierCrees } else { return "$Out.msf" } } } proc AlignementDeLaSelection {K} { set Liste [$K find withtag current] foreach Id $Liste { set BId [lindex [$K gettags $Id] 0] set Alignement [lindex [$K gettags $Id] 2] AfficheVariable $Alignement "AvecRien" "$BId" } } proc AlignementDesSelections {{Zone ""} aSAli} { upvar $aSAli SAli global NomSeqSel Sequences LNOrdali set LesNoms {} set LesSequences {} set LesNomsDesSeqs $LNOrdali if {[info exists NomSeqSel] && [llength $NomSeqSel] > 3} { set Li {} foreach p $NomSeqSel { lassign [split $p .] y x incr y -1 lappend Li $y } } else { for {set i 0} {$i < [llength $LesNomsDesSeqs]} {incr i} { lappend Li $i } } if {! [llength $Zone]} { set Zone [list [list 0 [expr {[LongueurDeLAlignement]-1}]]] } set LVide {} foreach i $Li { set Nm [lindex $LesNomsDesSeqs $i] if {$Nm eq ""} {continue} set sbrut [set Sequences($Nm)] set s "" foreach z $Zone { lassign $z x1 x2 append s [string range $sbrut $x1 $x2] } set tmp [string map [list "." "" Z "" " " "" X ""] $s] if {[string trim $tmp] eq ""} { lappend LVide $i continue } lappend LesNoms $Nm lappend LesSequences $s } set SAli {} foreach n $LesNoms s $LesSequences { lappend SAli $n $s } return $LVide } proc AlignementDynamique {Liste} { if {0} { set LesPaires {} foreach Ligne [LesLignesDuFichier $Liste] {lappend LesPaires [split $Ligne "\t"]} set LesPaires [lsort -index 1 -integer -increasing $LesPaires] } else { set LesPaires [lsort -index 1 -integer -increasing $Liste] } set LesRangQ {} set LesRangS {} foreach LaPaire $LesPaires { set RangQ [lindex $LaPaire 0] set RangS [lindex $LaPaire 1] lappend LesRangQ $RangQ lappend LesRangS $RangS set TabScore($RangQ,$RangS) [lindex $LaPaire 2] } set ScoreMax 0 set LesRangQ [lsort -unique -increasing -integer $LesRangQ] set LesRangS [lsort -unique -increasing -integer $LesRangS] set nRangQ [llength $LesRangQ] set nRangS [llength $LesRangS] set LaDernierePaireDuScoreOpt {} for {set i 0} {$i < $nRangQ} {incr i} { for {set j 0} {$j < $nRangS} {incr j} { set RangQ [lindex $LesRangQ $i] set RangS [lindex $LesRangQ $j] if {![info exists TabScore($RangQ,$RangS)]} {continue} set Score [set TabScore($RangQ,$RangS)] set ScoreOptPrec 0 set LaMeilleurePairePrec {} foreach RangQPrec [lrange $LesRangQ 0 [expr $i - 1]] { foreach RangSPrec [lrange $LesRangS 0 [expr $j - 1]] { if {![info exists TabScore($RangQPrec,$RangSPrec)]} {continue} set ScorePrec [set TabScore($RangQPrec,$RangSPrec)] if {[info exists TabScoreOpt($RangQPrec,$RangSPrec)]} { set ScoreOptDeLaPaire [set TabScoreOpt($RangQPrec,$RangSPrec)] } else { set ScoreOptDeLaPaire [set TabScore($RangQPrec,$RangSPrec)] } if {$ScoreOptPrec < $ScoreOptDeLaPaire} { set ScoreOptPrec $ScoreOptDeLaPaire set LaMeilleurePairePrec [list $RangQPrec $RangSPrec $ScorePrec] } } } set TabScoreOpt($RangQ,$RangS,LaMeilleurePairePrec) $LaMeilleurePairePrec set ScoreOpt [expr $Score + $ScoreOptPrec] set TabScoreOpt($RangQ,$RangS) $ScoreOpt if {$ScoreMax < $ScoreOpt} { set ScoreMax $ScoreOpt set LaDernierePaireDuScoreOpt [list $RangQ $RangS $Score] } } } set LesMeilleursRangs {} while {$LaDernierePaireDuScoreOpt != {}} { set RangQ [lindex $LaDernierePaireDuScoreOpt 0] set RangS [lindex $LaDernierePaireDuScoreOpt 1] lappend LesMeilleursRangs $LaDernierePaireDuScoreOpt set LaDernierePaireDuScoreOpt [set TabScoreOpt($RangQ,$RangS,LaMeilleurePairePrec)] } return [lsort -index 0 -integer $LesMeilleursRangs] } proc AlignementEssai {Nom} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" set FichierSortie "[RepertoireDuGenome]/annotation/$Nom.ali" ParseMACSIMS $Fichier macsims set LesNomsSequences $macsims(Noms) foreach NomSequence $LesNomsSequences { set Ali $macsims($NomSequence,Sequence) Espionne $Ali } } proc AlignementEssai1 {} { foreach Nom [ListeDesPABs] { Espionne $Nom set FichierMacsims "[RepertoireDuGenome]/macsims2/$Nom.xml" if {[file exists $FichierMacsims]} {continue} FichierMsfPourGOAnno $Nom "Sans" set FichierAlignement "[RepertoireDuGenome]/annotation/$Nom.msf" if {! [file exists $FichierAlignement]} {continue} set RepertoireDuMsf "annotation" MacsimManu $Nom $RepertoireDuMsf } } proc Aligneurs {{LeQuel ""} {Defaut ""}} { Wup "Returns array Aligneurs, AligneursCoches or Aligneur($LeQuel)" global Aligneurs AligneursCoches AligneursDefaut if { ! [info exists Aligneurs]} { set Aligneurs(clustalw) 1 set Aligneurs(dialign) 0 set Aligneurs(pileup) 0 set Aligneurs(prrp) 0 foreach {a ValAligneurs} [array get Aligneurs] { set AligneursDefaut($a) $ValAligneurs if {$ValAligneurs} { set AligneursCoches($a) $ValAligneurs } } } if {$LeQuel==""} { return [array names Aligneurs] } if {$LeQuel=="Coches"} { return [array names AligneursCoches] } if { $Defaut == "" } { if {[info exists Aligneurs($LeQuel)]} { return [set Aligneurs($LeQuel)] } else { return 0 } } else { if {[info exists AligneursDefaut($LeQuel)]} { return [set AligneursDefaut($LeQuel)] } else { return 0 } } } proc Alignons {PourQui {NomATraiter ""}} { global RepertoireDuGenome global ListeDesPABs global NotreOS set OnEffaceBallast 0 if {$NomATraiter == "" } { set Liste [ListeDesPABs] } else { set Liste [list $NomATraiter] } if {$PourQui=="Paralogues"} { set RepertoireMSF "$RepertoireDuGenome/msfparalogues" File mkdir $RepertoireMSF } set Conserve 1 if {[llength [glob -nocomplain "$RepertoireMSF/*"]] > 0} { set Conserve [OuiOuNon "Should I keep the existing files in $RepertoireMSF"] } foreach Nom $Liste { Espionne "Je vais traiter $Nom" set FichierMSF "$RepertoireMSF/$Nom" set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" if {$PourQui=="Paralogues" && [ParaloguesDe $Nom]=={}} { continue } if { ! [file exists $FichierBlastP]} { continue } if { $Conserve && [file exists $FichierMSF] } { continue } if {[file exists "$RepertoireDuGenome/ballast/$Nom"]} { set FichierBallast "$RepertoireDuGenome/ballast/$Nom" } else { set FichierBallast [Ballast $FichierBlastP] } if {$FichierBallast != "" && [regexp -nocase "fatal error" [join [LesPremieresLignesDuFichier $FichierBallast 10]] "\n"]} { set FichierBallast "" } if {$PourQui=="Paralogues"} { set LaSelectionUnique [ParaloguesDe $Nom "apn"] EspionneL $LaSelectionUnique Espionne [llength $LaSelectionUnique] if {[llength $LaSelectionUnique] == 0} { continue } } else { set LaSelectionUnique [CreeLaListeLesCopains $FichierBlastP "blastp"] if {[llength $LaSelectionUnique] == 0} { Warne "$Nom pas de sequences a aligner" Sauve "NoSequencesToAlign" dans $FichierMSF continue } } set Selection "$RepertoireDuGenome/protembl/$Nom $Nom 0.0 $NotreOS\n" append Selection [join $LaSelectionUnique "\n"] set StatusDbClustal [DbClustal $Nom $FichierMSF $Selection "AvecSelection"] if {$OnEffaceBallast && [file exists $FichierBallast]} { File delete -force $FichierBallast foreach FichierBallastExt [glob -nocomplain "$FichierBallast.*"] { File delete -force $FichierBallastExt } } if {$StatusDbClustal=="OK"} { continue } if {$StatusDbClustal=="PasDeSequencesAAligner"} { Warne "$Nom pas de sequences a aligner ou erreur dans l'alignement." Sauve "NoSequencesToAlignOrError" dans $FichierMSF continue } if {$StatusDbClustal=="YaLog"} { continue } } } proc AlignonsLesParalogues {} { global RepertoireDuGenome global NotreOS global NotreOrga set FichierParalogues "$RepertoireDuGenome/fiches/paralogues.blastp" if { ! [file exists $FichierParalogues]} { LesParaloguesDuBlastP } Alignons Paralogues } proc AligntSeulContreTous {nm seq} { global OrdTmpDir set In1 [file join ${OrdTmpDir} tmp1] set In2 [file join ${OrdTmpDir} tmp2] set Out [file join ${OrdTmpDir} tmp2g] set Log [file join ${OrdTmpDir} tmp3] CreeLeTfa $In1 set f [open $In2 w] puts $f ">$nm" set D 0 while {$D < [string length $seq]} { set F [expr {$D + 59}] set L [string range $seq $D $F] puts $f "$L" incr D 60 } close $f BatchClustalwProfile $In1 $In2 $Out $Log -outorder=input set tmp [DecortiqueUnMSF $Out NomSeq LesSeqAli] set LNewSeqAli [array get LesSeqAli] catch {file delete -force $In1 $In2 $Log $Out} return $LNewSeqAli } proc AllAboutVE {} { FaireLire "Je ne sais pas ce que fait AllAboutVE ..." set LesLignes [list "VE\tProtein\tVector\tStart\tEnd\tPGS\tRec2\tDescription"] foreach VE [VE ListOf VE] { set Proteine [VE $VE "Protein"] set Vecteur [VE $VE "Vector"] set Bornes [VE $VE "Domain_Boundaries"] set Debut 1 set Fin "98765" regsub "/" $Bornes " " Bornes scan $Bornes "%d %d" Debut Fin set Nom [NomDuAlias $Proteine] if {$Nom==""} { continue } Espionne "$Proteine $Nom" set Trouve 0 foreach R2 [Rec2 $Nom LesRec2] { set V2 [Rec2 $R2 Vecteur] set Descr [Rec2 $R2 Description] set PDF [StringApres " Ppcr for $Nom " dans $Descr] set LesPDF [split $PDF "-"] set D [lindex $LesPDF end-1] set F [lindex $LesPDF end] regsub -- "\\-$D\\-$F$" $PDF "" P regsub ".$" $P "" P if {[string equal -nocase $P $Proteine] && $D==$Debut && $F==$Fin} { set Trouve 1 break } } if { ! $Trouve} { continue } set Ligne "$VE\t$P\t$Vecteur\t$Debut\t$Fin\t$Nom\t$R2\t$Descr" lappend LesLignes $Ligne } return [SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/fiches/AllAboutVE.csv"] } proc AllCC {} { set Lsys [lsort [glob [MiSynPatDir]/data/alignments/*_WithModules.xml]] file delete -force logc foreach file $Lsys { exec ordali $file -exe CompteConsDiscri -downloadpdb 0 >> logc } set Ll [LesLignesDuFichier logc] set Ls [lsearch -all $Ll "System *"] set Lres [list] foreach {d f} $Ls { lappend Lres {*}[lrange $Ll $d $f-1] lappend Lres {} } file delete cd.txt set o [open cd.txt w] puts $o [join $Lres \n] close $o exit } proc AllClustering {} { set Lf [glob ./hubert/mmaic/sel*_50..acc] set Lacc [list] foreach f $Lf { set Lacc [concat $Lacc [LesLignesDuFichier $f]] } set o [open "All_clustering.acc" w] puts $o [join $Lacc \n] close $o exit } proc AllEleGen {{Qui ""} {Quoi ""} {Ou ""}} { global AllEleGen #rR EleGene permet d'interroger tous les chromosomes en même temps #rR Ce n'est qu'une mémorisation de EleGen Chromo par Chromo #rR Attention ! Pour le charger plus vite il exists un fichier Memo #rR Si onchange quelque chose (programme ou données de départ il faut le recharger #rR pour cela qds Zero AllEleGen Redo_ #rR (doit être fait en qds (donc au nom de ripp) pour avoir les droits !!!!!!) set FichierMemo "[AnnotRep]/AllEleGen.txt" if {[regexp -nocase "^ReDo_" $Qui]} { if {[file exists $FichierMemo]} { file delete $FichierMemo } if {[info exists AllEleGen]} { unset AllEleGen } regsub -nocase "^ReDo_" $Qui "" Qui return [AllEleGen $Qui $Quoi $Ou] } if {$Ou!=""} { set Ou [AnnotType $Ou "T"] } if {[info exists AllEleGen($Qui,$Quoi,$Ou)]} { if { 0 && [PourWscope]} { return "
[join $AllEleGen($Qui,$Quoi,$Ou) \n]\n
" } return $AllEleGen($Qui,$Quoi,$Ou) } if {[info exists AllEleGen("EstCharge")]} { if { 0 && [info exists AllEleGen($Qui,$Quoi,)]} { Espionne coucou; return $AllEleGen($Qui,$Quoi,) } return "" } set AllEleGen("EstCharge") 1 if {[file exists $FichierMemo]} { array set AllEleGen [ContenuDuFichier $FichierMemo] return [AllEleGen $Qui $Quoi $Ou] } foreach Chr [lrange [ListOfChr] 0 end] { set LesGn [EleGen $Chr "F" ListOf Gn] set AllEleGen($Chr,ListOfGn,) $LesGn foreach Gn $LesGn { lappend AllEleGen(ListOf,Gn,) $Gn set AllEleGen($Gn,Chr,) $Chr set AllEleGen($Gn,ListOfD,) [EleGen $Chr "F" $Gn ListOfD] set AllEleGen($Gn,ListOfF,) [EleGen $Chr "F" $Gn ListOfF] set Left [lindex $AllEleGen($Gn,ListOfD,) 0] set Right [lindex $AllEleGen($Gn,ListOfF,) end] set AllEleGen($Gn,Cover,) "$Left $Right" set AllEleGen($Gn,Size,) [expr $Right-$Left+1] } foreach T [AnnotType ListOf T] { foreach Gn [EleGen $Chr $T ListOf Gn] { if {$Gn=="" || $Gn=="NA"} { continue } lappend AllEleGen(ListOf,Gn,$T) $Gn set AllEleGen($Gn,ListOfD,$T) [EleGen $Chr $T $Gn ListOfD] set AllEleGen($Gn,ListOfF,$T) [EleGen $Chr $T $Gn ListOfF] set Left [lindex $AllEleGen($Gn,ListOfD,$T) 0] set Right [lindex $AllEleGen($Gn,ListOfF,$T) end] set AllEleGen($Gn,Cover,$T) "$Left $Right $Chr" set AllEleGen($Gn,Size,$T) [expr $Right-$Left+1] set AllEleGen($Gn,ListOf,Id) [EleGene $Chr $T $Gn ListOfId] foreach Id $AllEleGen($Gn,ListOf,Id) { set AllEleGen($Id,Gn,) } } #rR on pourrait encore tout mémoriser pour les Id ... } } Sauve [array get AllEleGen] dans $FichierMemo return [AllEleGen $Qui $Quoi $Ou] } proc AllForGo {} { InformeFromOiPourTous InformeGoPourTous MyGenesFromGo MyGOsFromGene } proc AllGenesToTfa {Path} { #Compteurs : set CompteurLus 0 set CompteurEcrit 0 # Générer les requetes à partir des coordonnées # ============================================= set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|AllGenesToTfa : Building genes queries" set FichierDesAccess [open "$Path.acc" "r"] set FichierDesRequetes [open "/tmp/AllGenesToTfa.bql" "w"] set CompteurLus 0 while { [gets $FichierDesAccess Ligne1] >=0 } { ScanLaListe $Ligne1 Distance NM incr CompteurLus set Moins "-" set Plus "+" puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT name FROM ucsc$Organism.refgene" puts $FichierDesRequetes "#" } close $FichierDesRequetes close $FichierDesAccess set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|AllGenesToTfa : Executing NP queries" exec /biolo/bird/bin/birdql_client.sh /tmp/AllGenesToTfa.bql bird /tmp/AllGenesToTfa.res set FichierDesRequetesExecutees [open "/tmp/AllGenesToTfa.res" "r"] set FichierDesRequetes2 [open "/tmp/AllGenesToTfa2.bql" "w"] while { [gets $FichierDesRequetesExecutees Header] >=0 } { gets $FichierDesRequetesExecutees NM puts $FichierDesRequetes2 "ID $NM DB REFSEQ" puts $FichierDesRequetes2 "FM FASTA" puts $FichierDesRequetes2 "LM 1" puts $FichierDesRequetes2 "#" } close $FichierDesRequetesExecutees close $FichierDesRequetes2 exec /biolo/bird/bin/birdql_client.sh /tmp/AllGenesToTfa2.bql bird /tmp/AllGenesToTfa2.res set FichierDesRequetesExecutees2 [open "/tmp/AllGenesToTfa2.res" "r"] set FichierMiddle [open "$Path.mid" "w"] while { [gets $FichierDesRequetesExecutees2 Header] >=0 } { puts $FichierMiddle $Header gets $FichierDesRequetesExecutees2 Sequence set Sequence [string trim $Sequence] puts $FichierMiddle $Sequence } close $FichierMiddle close $FichierDesRequetesExecutees2 set FichierMiddle [open "$Path.mid" "r"] set FichierOut [open "$Path.tfa" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|AllGenesToTfa : Purging bird file" while { [gets $FichierMiddle LigneMiddle] >= 0} { if { $LigneMiddle != "" } { puts $FichierOut $LigneMiddle } } close $FichierOut close $FichierMiddle set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne " - read : $CompteurLus" Espionne " - found proteins : $CompteurProt" Espionne " - blasted : $CompteurBlast" Espionne " - written : $CompteurEcrits" Espionne "$timestamp|AllGenesToTfa : End" } proc AllGlobals {{Show ""}} { set Show [string equal -nocase $Show "Show"] set LeTexte {} foreach G [lsort [info globals]] { global $G if {[array exists $G]} { lappend LeTexte "****************************** array $G" foreach {C V} [lrange [array get $G] 0 19] { lappend LeTexte " $C [string range $V 0 60]" } lappend LeTexte "************************************ $G" } else { lappend LeTexte "$G [string range [set $G] 0 60]" } } set Texte [join $LeTexte "\n"] if {$Show} { return [AfficheVariable $Texte "" "AllGlobals"] } return $Texte } proc AllInteractions {FichierSortie Org Seuil} { CanalSqlString set TaxId [TaxIdOrg $Org] regsub " " $Org "_" Org foreach {Pi1 Pi2 Cs} [SqlExec "select protein_id_a, protein_id_b, combined_score from network.protein_protein_links where combined_score >= '$Seuil' and protein_id_a in (select protein_id from items.proteins_names where species_id = $TaxId) order by combined_score DESC;" "GetList"] { set Pn1 [PreferredName $Pi1 $Org] set Pn2 [PreferredName $Pi2 $Org] set Ligne "$Pi1\t$Pn1\t$Pi2\t$Pn2\t$Cs" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans $FichierSortie CanalSqlDisconnect } proc AllPromotorsATCGbackground {Path Organism Upstream Downstream {Database GeCo}} { Espionne "WhatIsMyATCGbackground: Start" set FichierDesRequetes [open "/tmp/WhatIsMyATCGbackground.bql" "w"] set RequetesExecutees "/tmp/WhatIsMyATCGbackground.res" Espionne "WhatIsMyATCGbackground: Building queries" puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT chrom, txStart, txEnd, strand FROM ucsc$Organism.$Database where typegene ='Protein' order by chrom, txStart" puts $FichierDesRequetes "LM 35000" puts $FichierDesRequetes "//" close $FichierDesRequetes Espionne "WhatIsMyATCGbackground: Executing queries" #BirdFetch "/tmp/WhatIsMyATCGbackground.bql" "/tmp/WhatIsMyATCGbackground.res" set FichierDesRequetesExecutees [open "$RequetesExecutees" "r"] set FichierDesCoordonnees [open "$Path.coo" "w"] gets $FichierDesRequetesExecutees Ligne Espionne "WhatIsMyATCGbackground: Writing coordinates" set I 0 while { [gets $FichierDesRequetesExecutees Ligne] > 0 } { incr I ScanLaPipe $Ligne chrom txStart txEnd strand if { $strand == "+"} { set TSS $txStart set promotorStart [expr $TSS - $Upstream] set promotorEnd [expr $TSS + $Downstream] } else { set TSS $txEnd set promotorEnd [expr $TSS + $Upstream] set promotorStart [expr $TSS - $Downstream] } puts $FichierDesCoordonnees "$I $chrom $promotorStart $promotorEnd $strand" } close $FichierDesCoordonnees #GetProm "$Path" 0 0 set FichierDesSequences [open "$Path.pro" "r"] set A 0 set T 0 set C 0 set G 0 set Chars 0 Espionne "WhatIsMyATCGbackground: Counting letters" while { [gets $FichierDesSequences Header] > 0 } { gets $FichierDesSequences Sequence set CharArray [split $Sequence ""] foreach Char $CharArray { if { $Char == "A" } { incr A incr Chars } if { $Char == "T" } { incr T incr Chars } if { $Char == "C" } { incr C incr Chars } if { $Char == "G" } { incr G incr Chars } } } set FA [expr (100*$A)/$Chars] set FT [expr (100*$T)/$Chars] set FC [expr (100*$C)/$Chars] set FG [expr (100*$G)/$Chars] Espionne "WhatIsMyATCGbackground: A=$FA" Espionne "WhatIsMyATCGbackground: T=$FT" Espionne "WhatIsMyATCGbackground: C=$FC" Espionne "WhatIsMyATCGbackground: G=$FG" Espionne "WhatIsMyATCGbackground: End" } proc AllToTitle {Texte} { set AlphAvant 0 foreach C [split $Texte ""] { if {$AlphAvant} { append Nouveau [string tolower $C] } else { append Nouveau [string toupper $C] } set AlphAvant [regexp -nocase {[a-z]} $C] } return $Nouveau } proc All_bz {PhyloTree All_bzLogFile} { ### all_bz program execution from the TBA suite ### # generates all blastz commands for pairs of specified sequences # Espionne "All_bz ..." #set Commande "exec [PATH all_bz] + \"$PhyloTree\" >& $All_bzLogFile" set Commande "exec all_bz + \"$PhyloTree\" >& $All_bzLogFile" puts $Commande if {[catch {eval $Commande} Message]} {Espionne $Message;return} return } proc AllerRetour {In {Out ""} {N ""}} { if {$Out==""} { set Out "${In}_new" } if {$N==""} { set N 1 } set Liste [LesLignesDuFichier $In] set ListeRetourne [RetourneLaListe $Liste] set LiiL [concat $Liste $ListeRetourne] set Finale {} foreach i [NombresEntre 1 $N] { set Finale [concat $Finale $LiiL] } return [SauveLesLignes $Finale dans $Out] } proc AllowIllegalCharactersInTFA {{Valeur ""}} { global AllowIllegalCharactersInTFA if { $Valeur=="ResetAllValues"} { if {[info exists AllowIllegalCharactersInTFA]} { unset AllowIllegalCharactersInTFA } set Valeur 0 } if { ! [info exists AllowIllegalCharactersInTFA]} { set AllowIllegalCharactersInTFA(Level) 1 set AllowIllegalCharactersInTFA(1) 0 } if {[regexp "Previous" $Valeur]} { if {$AllowIllegalCharactersInTFA(Level)>1} { incr AllowIllegalCharactersInTFA(Level) -1 } return [AllowIllegalCharactersInTFA] } if {$Valeur!=""} { if {[regexp -nocase {[1YVA]} $Valeur]} { set Valeur 1 } else { set Valeur 0 } incr AllowIllegalCharactersInTFA(Level) set AllowIllegalCharactersInTFA($AllowIllegalCharactersInTFA(Level)) $Valeur } return $AllowIllegalCharactersInTFA($AllowIllegalCharactersInTFA(Level)) } proc AllumeLaSelection {K PAB LesDirs} { Wup "Highlight les oligos deja selectionnes (fichier .selection) en distinguant les differentes sources" DeselectionneLesSelectionnes $K foreach Dir $LesDirs { set FichierSelection "$Dir/${PAB}.selection" if {![file exists $FichierSelection]} {continue} set F [open "$FichierSelection"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [string range $Ligne 0 0] != ">"} {continue} if { [regexp -nocase "NoOligo" $Ligne]} {break} set LigneSplitee [split $Ligne "\t"] set Entete [lindex $LigneSplitee 0] set NomOligo [lindex $Entete 1] set LesId [$K find withtag "$NomOligo && Boite && $Dir"] foreach Id $LesId { set MesTags [$K gettags $Id] $K itemconfigure $Id -outline "black" $K itemconfigure $Id -width "2" $K itemconfigure $Id -dash {6 4 2 4} $K addtag "Selected" withtag $Id } } close $F } return "" } proc AllumeLaXSelection {K PAB LesDirs} { Wup "Highlight les oligos croisee deja selectionnes (fichier .croisee) en distinguant les differentes sources" DeselectionneLesXSelectionnes $K foreach Dir $LesDirs { set FichierSelection "$Dir/$PAB.croisee" if {![file exists $FichierSelection]} {continue} set F [open "$FichierSelection"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [string range $Ligne 0 0] != ">"} {continue} if { [regexp -nocase "NoOligo" $Ligne]} {break} set LigneSplitee [split $Ligne "\t"] set Entete [lindex $LigneSplitee 0] set NomOligo [lindex $Entete 1] set LesId [$K find withtag "$NomOligo && Boite && $Dir"] foreach Id $LesId { set MesTags [$K gettags $Id] set MesCoords [$K coords $Id] set Xmin [lindex $MesCoords 0] set Xmax [lindex $MesCoords 2] set Ymin [expr [lindex $MesCoords 1]-([lindex $MesCoords 3]-[lindex $MesCoords 1])/4] set Ymax [expr [lindex $MesCoords 3]+([lindex $MesCoords 3]-[lindex $MesCoords 1])/4] $K create line $Xmin $Ymin $Xmax $Ymax -tags [list "XSelect" "Trace" "$NomOligo"] -fill "black" -width 4 $K create line $Xmin $Ymax $Xmax $Ymin -tags [list "XSelect" "Trace" "$NomOligo"] -fill "black" -width 2 $K addtag "XSelect" withtag $Id } } close $F } return "" } proc AlphaNum {} { global TokCourant set Courant "" if {[regexp -nocase {[a-z_]} $TokCourant]} { set Courant $TokCourant } if {$Courant==""} { return "AlphaNumNonValideCarNonAlphaEnDebut" } while {[regexp -nocase {[a-z_0-9]} [Tok]]} { append Courant $TokCourant } return $Courant } proc AlviCreePpcrProt {} { set RepPpcrProt "[RepertoireDuGenome]/ppcrprot" foreach Nom [ListeDesPABs] { set TfaPpcr [ContenuDuFichier [GscopeFile $Nom "ppcr"]] set Entete [EnteteDuTexteTFA $TfaPpcr] set PcrNuc [QueLaSequenceDuTexteTFA $TfaPpcr] set PosATG [string first "ATG" $PcrNuc] set PosStop [StopProchain $PcrNuc $PosATG] incr PosStop -1 if {$PosStop <0} { set PosStop "end" } set PcrPro [SeqNucToSeqPro [string range $PcrNuc $PosATG $PosStop]] set TfaPpcrProt [SequenceFormatTFA $PcrPro $Entete "protbrut"] Espionne $TfaPpcrProt Sauve $TfaPpcrProt dans "$RepPpcrProt/$Nom" } } proc AlviVerif {} { foreach Ligne [LesLignesDuFichier "[Fiches]/OligosF.csv"] LigneR [LesLignesDuFichier "[Fiches]/OligosR.csv"] { ScanLaListe [split $Ligne ";"] OligoNameF OligoF Bidon1 Bidon2 Bidon3 NotesF regexp {BOX[0-9]+} $NotesF Nom ScanLaListe [split $LigneR ";"] OligoNameR OligoR Bidon1 Bidon2 Bidon3 NotesR set OligoRSens [NucToReverseAndComplementNuc $OligoR] regexp {BOX[0-9]+} $NotesR NomR if {$Nom!=$NomR} { FaireLire COUCOU } set SeqOliNucF [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nucoligo"]] regsub {^ATG} $SeqOliNucF "" SeqF regsub {.+CATATG} $OligoF "" SeF set SeqOliNucR [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nucoligo"]] set SeR [string range $SeqOliNucR end-25 end] Espionne Espionne "$OligoNameF $OligoF [string range $NotesF 0 60]" Espionne " $SeF" Espionne " [string range $SeqF 0 20]" Espionne "$OligoNameR $OligoRSens [string range $NotesR 0 60]" if {[regexp "RunOff" $NotesR]} { set SeR "RunOff" } Espionne " $SeR" } } proc AlwaysTrue {Nom} { return 1 } proc AmontAval {TypeDeSequence NomFichier} { # Cree deux fichiers avec les SBS avant et apres les genes # Déclaration des fichiers set PathIn "/tmp/Conservation/Implications/" set FichierDes230000enrichi [open "$PathIn$TypeDeSequence/$NomFichier" "r"] set FichierDesSequencesUpstream "$PathIn$TypeDeSequence/Upstream$NomFichier" set FichierDesSequencesDownstream "$PathIn$TypeDeSequence/Downstream$NomFichier" set PathOut1 $FichierDesSequencesUpstream set PathOut2 $FichierDesSequencesDownstream # Suppressions des éventuelles versions précédentes des fichiers if { [file exists $FichierDesSequencesUpstream] } { file delete $FichierDesSequencesUpstream } if { [file exists $FichierDesSequencesDownstream] } { file delete $FichierDesSequencesDownstream } while { [gets $FichierDes230000enrichi Ligne] >=0 } { set DistanceAlaBorneDeExonOuIntron -999999999999999 ScanLaListe $Ligne StafID ChromosomeH StartH EndH Acc Deb Fin Orientation Distance ExonOuIntron CdsOuPas UtrOuPas DebutExonOuIntron FinExonOuIntron DebutOuFinExonOuIntron DistanceAlaBorneDeExonOuIntron OccupationExonOuIntron if { $DistanceAlaBorneDeExonOuIntron == -999999999999999 } { if { $Distance <= 0 } { AppendAuFichier $FichierDesSequencesUpstream $Ligne } else { AppendAuFichier $FichierDesSequencesDownstream $Ligne } } } Espionne "" Espionne "Execution terminee ! Fichier écrit dans $PathOut1 et $PathOut2" } proc AnaBalAgent {} { package require sqlite3 set db root sqlite3 $db res.sql set Lmat [ListeDesMatrices] set Lsco [ListeDesScores] set Lwgt [list 0 1] set Llen [ListeDesMotiflen] foreach mat $Lmat { foreach sco $Lsco { foreach wgt $Lwgt { foreach len $Llen { set Ns [$db eval {select count(s.pk_segment) from segment as s, ln_analyse_segment as las, analyse as a where a.score = $sco and a.matrix = $mat and a.weight = $wgt and a.motiflen = $len and a.pk_analyse = las.pk_analyse and las.pk_segment = s.pk_segment}] set Nb [$db eval {select count(s.pk_segment) from segment as s, ln_analyse_segment as las, analyse as a where a.score = $sco and a.matrix = $mat and a.weight = $wgt and a.motiflen = $len and a.pk_analyse = las.pk_analyse and las.pk_segment = s.pk_segment}] if {$Ns == 0} { continue } set Ns0 [$d eval {select count(s.pk_segment) from segment as s, ln_analyse_segment as las, analyse as a where a.score = $sco and a.matrix = $mat and a.weight = $wgt and a.motiflen = $len and a.pk_analyse = las.pk_analyse and las.pk_segment = s.pk_segment and s.rank = 0.0}] set Ns1 [$d eval {select count(s.pk_segment) from segment as s, ln_analyse_segment as las, analyse as a where a.score = $sco and a.matrix = $mat and a.weight = $wgt and a.motiflen = $len and a.pk_analyse = las.pk_analyse and las.pk_segment = s.pk_segment and s.max = 1}] lappend Lres $sco $mat $wgt $len [expr {100*$Ns0/$Ns}] [expr {100*($Ns0 + $Ns1)/$Ns}] $Ns } } } } $d close set Lres [lsort -stride 7 -index 5 -integer $Lres] foreach {sc mat wgt len pc pc1 ns} $Lres { puts "$sc $mat $wgt $len | $pc $pc1 $ns" } exit } proc AnaMeth {} { DefinitionPreferences set Llim -99999999999. set v -2.0 while {$v < 2.01} { lappend Llim $v $v set v [expr {$v + 0.1}] } lappend Llim 99999999999. set LMethods [list Norm Thompson Ranganatan VolPol Liu Liu2 RPCA Entrop1 Entrop2 EnpCube] foreach meth $LMethods { puts "\n$meth" set Ll [LesLignesDuFichier ${meth}.dat] set ListeV [list] foreach l $Ll { lappend ListeV [split $l \t]] } puts " ncol in [llength [lindex $ListeV 0]]" #set Lgr [Tclcluspack $ListeV -dt coordinates -cm mm -nbc aic -wc] exec /biolo/cluspack/binNew/cluspack $meth.dat -dt=coordinates -cm=mm -nbc=aic -wc set Ll [LesLignesDuFichier $meth.clu] set Lv [list] set Lgr [list] foreach l [lrange $Ll 2 end] { set l [string trim $l] if {$l eq ""} {continue} if {[regexp {^Cluster} $l]} { if {$Lv != {}} { lappend Lgr $Lv } set Lv [list] continue } lappend Lv [split $l \t] } lappend Lgr $Lv puts " nbr clusters [llength $Lgr]" set Nj [llength [lindex [lindex $Lgr 0] 0]] puts " ncol out $Nj" set Lx [list] for {set x 1} {$x < $Nj} {incr x} { lappend Lx $x } set i 1 set Ly [list] foreach g $Lgr { set Nv [llength $g] puts " cluster $i : $Nv" set ylab "cluster $i - $Nv" if {$Nv < 5} { continue } set Lyv [list] for {set j 1} {$j < $Nj} {incr j} { set Lv [ExtraitListeDeListe $g $j] set mx [expr max([join $Lv ,])] set S [::tcl::mathop::+ {*}$Lv] lappend Lyv [expr {$S/$Nv*100.}] } set sum [expr [join $Lyv +]] set titre "$meth - cluster $i" if {$i == 1} { set col black } else { set col [CouleurDuGroupe $i] } lappend Ly [list $Lyv $col $ylab] incr i } DoRPlot $Lx $Ly $titre "${meth}.pdf" } exit } proc AnaPfam {} { global LNOrdali LSOrdali TDesPCI set fmt "%8s %6d %4d %6d %6d %6.2f %6.2f" set Ll [LesLignesDuFichier Summary_Pfam.txt] set o [open Summary_Pfam2.txt w] foreach l $Ll { regsub -all { +} [string trim $l] " " l lassign [split $l " "] pf nseq lgt maxg ming puts "Traite $pf :" puts " nseq $nseq" puts " lgt $lgt" puts " maxg $maxg" puts " ming $ming" set f [file join /home moumou work moumou BenchPfam $pf] puts " file $f" set LNOrdali [list] DecortiqueUnTFA $f LNOrdali Sequences set SAli [list] set LSOrdali [list] foreach n $LNOrdali { lappend SAli $n [set Sequences($n)] lappend LSOrdali [set Sequences($n)] } CalculeLesPCIGenerique $SAli TDesPCI #CalculeLesPCI "" "" "" "" 1 # moyenne et ecart-type set i 1 set m 0. set s2 0. foreach n1 [lrange $LNOrdali 0 end-1] { foreach n2 [lrange $LNOrdali $i end] { set v [lindex [set TDesPCI($n1,$n2)] 0] set m [expr {$m + $v}] set s2 [expr {$s2 + $v*$v}] } incr i } set Ni [expr {$nseq*($nseq-1)/2}] set m [expr {$m/$Ni}] set sd [expr {100.*sqrt($s2/$Ni - $m*$m)}] set m [expr {100.*$m}] puts " --> m - sd : [format %6.2f $m] [format %6.2f $sd]" puts "" puts $o [format $fmt $pf $nseq $lgt $maxg $ming $m $sd] unset Sequences unset TDesPCI update } close $o exit } proc AnaProsite {} { package require sqlite3 set db root sqlite3 $db /home/moumou/Prosite/Prosite.sql set Lp [$db eval {select accession, pattern, uniprot_id, uniprot_type from prosite where type = 'PATTERN'}] puts "[llength $Lp]" set pris 0 foreach {ac pat lid ltype} $Lp { if {! [regexp {\[} $pat]} {continue} if {[regexp {\{} $pat]} {continue} if {$lid == "NULL"} {continue} set Lbid {} foreach id $lid ty $ltype { if {$ty eq "N" || $ty eq "P" || $ty eq "T"} { lappend Lbid $id } } if {[llength $Lbid] < 10} {continue} incr pris puts "$ac" puts "$pat" puts "lg $ac [llength $Lbid]" puts "" } puts "nb bons prosite : $pris" exit } proc AnaTaxId {} { source euka.taxid foreach a [array names TT] { lappend Lt [set TT($a)] } set Lt [lsort -unique -index 1 $Lt] puts "[llength $Lt]" puts "[join $Lt \n]" return } proc AnalyseBalibaseAgent {} { global TabSF LNOrdali CacheStrSecDansAlignement foreach b [array names TabSF "*,BLOCK"] { lassign [split $b ,] seq tmp foreach f $TabSF($b) { DecortiqueUneFeature $f dg fg col sc nt lappend Block($dg,$fg) $seq } } # cheche block communs set nSeq [llength $LNOrdali] set Lbck [list] foreach k [array names Block] { if {[llength $Block($k)] == $nSeq} { lassign [split $k ,] dg fg puts "=> $k" lappend Lbck $dg $fg } } set lgt [LongueurDeLAlignement] for {set i 0} {$i < $lgt} {incr i} { set p$i 0 } foreach {d f} $Lbck { #lassign [split $k ,] d f for {set j $d} {$j <= $f} {incr j} { set p$j 1 } } set dep -1 ; set fin -1 for {set i 0} {$i < $lgt} {incr i} { if {[set p$i]} { puts "p$j" if {$dep == -1} { set dep $i } } else { if {$dep != -1} { set fin [expr {$i-1}] puts "$dep - $fin" set dep -1 } } } #exit } proc AnalyseCoreBlocksAgent {Lblocks} { global TAg T LNOrdali MotifLen set Lres [list] foreach {d f} $Lblocks { if {($f - $d + 1) < $MotifLen} { continue } puts "\nBlock : $d --- $f" set Lbck [list Block $d $f] set LLag [AgentsDuBlock $d $f] set log "Block $d $f" set Lseg [list] set iDep $d foreach Lag $LLag { #puts "Lag: $Lag" #set log [RankBlockChaines $Lag] #set rep [RankBlockAllConnectes $Lag] set rep [RankBlockAllConnectes2 $Lag] if {$rep == -1} { lappend log "not all connected" } else { lassign $rep srk min max nZero nSup lappend log "rank all $iDep [format %8.3f $srk] $min $max $nZero $nSup" lappend Lseg [list $MotifLen $srk $min $max $nZero $nSup] } puts [join $log \n] set log {} incr iDep } lappend Lbck $Lseg lappend Lres $Lbck } return $Lres } proc AnalyseFichierBalibase {{args ""}} { global Mbl Cbl MotifLen LNOrdali Sequences Lref Sref LesDefauts Mode batch LesDefauts TypeAli XML LesDefsAlA #LesDefauts FichierXML $f # override MotifLen if {$args ne ""} { lassign $args f len deb fin matrix typeScore Wgt set MotifLen $len set Lbornes [list $deb $fin] } else { # defauts set MotifLen 13 set matrix blosum62 set deb "" set typeScore sop set Wgt 0 set Lbornes [CoreBlocksDuXML] } set ok [DecortiqueXmlAgent $f] if {$ok == 0} { puts "Problem loading alignment !" puts "file : $f\n" return [list] } puts "f= $f MotifLen $MotifLen" set lgt [LongueurDeLAlignement] set nbS 0 foreach n $::LNOrdali { if {$n ne ""} {incr nbS} } set Lres [list $f $nbS $lgt $len $matrix $typeScore $Wgt] InitMatrix $matrix set RenameSeq 1 if {0} { array set Sref [array get Sequences] set Ltmp {} foreach n $LNOrdali { if {$n ne ""} {lappend Ltmp $n} } set LNOrdali $Ltmp foreach n $LNOrdali { set s [string map {"." ""} $Sequences($n)] set Sequences($n) $s } #set ok [SequencesPourAgent "" $RenameSeq] } SequencesPourAgent "" 1 # 1: poids gaussiens, 0 : 1.0 pour chqeue pos #InitWg 1 #InitWg 0 InitWg $Wgt set nAgents [InitAgentsAnaBal] set nball [expr {$nAgents * $nAgents}] puts "all pairs $nball" puts "n/2 pairs [expr {$nAgents * $nAgents/2}]" set nab 0 foreach {d f} $Lbornes { set LLag [AgentsDuBlock $d $f] foreach lag $LLag { incr nab [llength $lag] } } puts "agents dans block $nab" puts "nblock * agents [expr {$nab * $nAgents}]" #exit InitTypeScore $typeScore #::profiler::reset if {$deb eq ""} { ComputeScoreAllPairsAgents $Lbornes } else { ComputeScorePairsDuBlockAgents $deb $fin } #AfficheProfileResults set ok [AnalyseCoreBlocksAgent $Lbornes] if {$ok == 0} { puts "Problem in dblock !" return 0 } else { lappend Lres $ok } if {0} { set lor [lsort [lor [info globals] $::VariablesAuDepart]] #puts "\nlor\n[join $lor \n]" foreach v $lor { if {$v eq "VariablesAuDepart"} { puts "FOUND !" continue } if {[array exists ::$v]} { #puts "delete $v" array unset ::$v } unset -nocomplain ::$v } #puts "verif [join [lsort [lor $::VariablesAuDepart [info globals]]] \n]" update } puts "FinalResult\n$Lres" #exit return $Lres } proc AnalyseGlobaleOverlap {FichierOverlap {TumorType 3T} {IntMin 0} {FCAffy 0.0} {FCDD 0.0}} { #FichierOverlap=/OVERLAP931NEW/Overlap.final (333 overlaps DD-Affy avec les profils etc...) #HOP: a ajouter aux genes correles car la RT-PCR a nie le profil du gel DD #aucune target Affy dont les 4 valeurs de detection egales A ou M n'est acceptee #TumorType: E, S, ou U, ou 3T (moy des 3 T) # --- #set Fichier "[RepertoireDuGenome]/OVERLAP931NEW/820DD.27may05" #set L [CreeListePourFichierAUneColonne $Fichier] #foreach DD $L {set Vu($DD) 1} # --- set NbComparaisons 0 set NbMemeProfil 0 set NbN 0 set NbT 0 set TN 0 set NT 0 set LesFaibles "" set Liste "" set n 0 set nbcomplexes 0 foreach Ligne [LesLignesDuFichier $FichierOverlap] { set Ligne [string trim $Ligne] if {$Ligne ==""} {continue} set LesChamps [split $Ligne "\t"] incr n #1: Exclure les affy non detectes (que des A ou M) set dd [lindex $LesChamps 1] # Ajout --- #if {![info exists Vu($dd)]} {continue} # Fin ajout --- set TAR [lindex $LesChamps 2] set Detn [lindex $LesChamps 22] set Dete [lindex $LesChamps 23] set Dets [lindex $LesChamps 24] set Detu [lindex $LesChamps 25] if {($Detn=="A" || $Detn=="M") && ($Dete=="A" || $Dete=="M") && ($Dets=="A" || $Dets=="M") && ($Detu=="A" || $Detu=="M")} { lappend LesAbsents $TAR continue } #2: Exclure les overlaps avec FC inferieur au seuil fixe ####a:recup data Fold DD et Affy if {$TumorType=="E"} { set FoldAffy [lindex $LesChamps 30] set FoldDD [lindex $LesChamps 10] set ProfilAffy [lindex $LesChamps 31] set ProfilDD [lindex $LesChamps 11] } if {$TumorType=="S"} { set FoldAffy [lindex $LesChamps 32] set FoldDD [lindex $LesChamps 12] set ProfilAffy [lindex $LesChamps 33] set ProfilDD [lindex $LesChamps 13] } if {$TumorType=="U"} { set FoldAffy [lindex $LesChamps 34] set FoldDD [lindex $LesChamps 14] set ProfilAffy [lindex $LesChamps 35] set ProfilDD [lindex $LesChamps 15] } if {$TumorType=="3T"} { set FoldAffy [lindex $LesChamps 36] set FoldDD [lindex $LesChamps 16] set ProfilAffy [lindex $LesChamps 37] set ProfilDD [lindex $LesChamps 17] } ####b: exclure les genes qui rentrent pas ds les criteres de stringence if {$FCAffy!=0 && $FCDD!=0} { #si les cutoff sont differents de zero. if {$FoldAffy>0 && $FoldAffy<=$FCAffy} {continue} if {$FoldAffy<0 && $FoldAffy>=(-$FCAffy)} {continue} if {$FoldDD!="" && $FoldDD!=0} { # if {$FoldDD>0 && $FoldDD<=$FCDD} {continue} if {$FoldDD<0 && $FoldDD>=(-$FCDD)} {continue} } } #3:Exclure les affy avec les intensites par exemple inferieures a 650 set Intn [lindex $LesChamps 26] set Inte [lindex $LesChamps 27] set Ints [lindex $LesChamps 28] set Intu [lindex $LesChamps 29] if {$Intn<=$IntMin && $Inte<=$IntMin && $Ints<=$IntMin && $Intu<=$IntMin} { lappend LesFaibles $TAR continue } #3: Comparer profils du DD (profilgel ou profilcalc ou profilcons) avec profil affy set ProfilCalcDD [lindex $LesChamps 18] set ProfilConsDD [lindex $LesChamps 19] if {$ProfilDD==$ProfilAffy || $ProfilCalcDD==$ProfilAffy || $ProfilConsDD==$ProfilAffy} { incr NbMemeProfil lappend Liste $Ligne if {$ProfilAffy=="N"} {incr NbN} if {$ProfilAffy=="T"} {incr NbT} } else { #ne pas compter les complexes if {($ProfilDD=="" || $ProfilDD==0) && ($ProfilConsDD=="" || $ProfilConsDD=="?" || $ProfilConsDD=="0") && $ProfilCalcDD=="C" } { incr nbcomplexes continue } if {$ProfilAffy=="N"} {incr TN} if {$ProfilAffy=="T"} {incr NT} lappend ListeProfOpp $Ligne } incr NbComparaisons lappend ListeComplete $Ligne #3: compare fc #if {$FoldDD>0 && $FoldAffy<0} {incr TN} #if {$FoldDD<0 && $FoldAffy>0} {Espionne $dd;incr NT} } #Espionne $LesAbsents Espionne "absents: [llength $LesAbsents]" Espionne "lesfaibles: [llength $LesFaibles]" Espionne "nb complexes: $nbcomplexes" Espionne "$NbMemeProfil sur $NbComparaisons" Espionne [llength $Liste] SauveLesLignes $Liste dans "[RepertoireDuGenome]/OVERLAP931NEW/ListeDesGenesAuxProfilsCorreles_1et3_pour820final" Espionne "$NbN N, $NbT T" Espionne "dd T et affy N: $TN - NT: $NT" Espionne "nb profils opposes : [llength $ListeProfOpp]" #Espionne $ListeProfOpp #SauveLesLignes $ListeProfOpp dans "[RepertoireDuGenome]/OVERLAP931NEW/esp_ListeDesGenesAuxProfilsOpposes_3T" #set PercentN [expr $NbN*1.0/($NbComparaisons-$NbT)] #set PercentT [expr $NbT*1.0/($NbComparaisons-$NbN)] #Espionne "percent N: $PercentN -- T: $PercentT" set Percent [expr $NbMemeProfil*1.0/$NbComparaisons] #Espionne [llength $ListeComplete] #SauveLesLignes $ListeComplete dans "[RepertoireDuGenome]/OVERLAP931NEW/PourGraphRatio" return $Percent } proc AnalyseGlobaleOverlap_pourCorrelFC {FichierOverlap {TumorType 3T} {IntMin 0} {FCAffy 0.0} {FCDD 0.0}} { #FichierOverlap ANALYSE/Overlap.final (333 overlaps DD-Affy avec les profils etc..) #aucune target Affy dont les 4 valeurs de detection sont egales A ou M n'est acceptee #TumorType: E, S, ou U, ou 3T (moy des 3 T) set NbComparaisons 0 set NbMemeProfil 0 set NbN 0 set NbT 0 set TN 0 set NT 0 set LesFaibles "" set Liste "" set n 0 set nbcomplexes 0 foreach Ligne [LesLignesDuFichier $FichierOverlap] { set Ligne [string trim $Ligne] if {$Ligne ==""} {continue} set LesChamps [split $Ligne "\t"] incr n #1: Exclure les affy non detectes (que des A ou M) set dd [lindex $LesChamps 1] set TAR [lindex $LesChamps 2] set Detn [lindex $LesChamps 22] set Dete [lindex $LesChamps 23] set Dets [lindex $LesChamps 24] set Detu [lindex $LesChamps 25] if {($Detn=="A" || $Detn=="M") && ($Dete=="A" || $Dete=="M") && ($Dets=="A" || $Dets=="M") && ($Detu=="A" || $Detu=="M")} { lappend LesAbsents $TAR continue } #correction #if {$Detn=="A" || $Detn=="M"} {continue} #if {($Dete=="A" || $Dete=="M") && #($Dets=="A" || $Dets=="M") && #($Detu=="A" || $Detu=="M")} { #continue #} #2: Exclure les overlaps avec FC inferieur au seuil fixe ####a:recup data Fold DD et Affy if {$TumorType=="E"} { set FoldAffy [lindex $LesChamps 30] set FoldDD [lindex $LesChamps 10] set ProfilAffy [lindex $LesChamps 31] set ProfilDD [lindex $LesChamps 11] } if {$TumorType=="S"} { set FoldAffy [lindex $LesChamps 32] set FoldDD [lindex $LesChamps 12] set ProfilAffy [lindex $LesChamps 33] set ProfilDD [lindex $LesChamps 13] } if {$TumorType=="U"} { set FoldAffy [lindex $LesChamps 34] set FoldDD [lindex $LesChamps 14] set ProfilAffy [lindex $LesChamps 35] set ProfilDD [lindex $LesChamps 15] } if {$TumorType=="3T"} { set FoldAffy [lindex $LesChamps 36] set FoldDD [lindex $LesChamps 16] set ProfilAffy [lindex $LesChamps 37] set ProfilDD [lindex $LesChamps 17] } ####b: exclure les genes qui rentrent pas ds les criteres de stringence #test sur minimum de stringence - arguments fournis: FCAffy et FCDD if {$FoldAffy>0 && $FoldAffy<=$FCAffy} {continue} if {$FoldAffy<0 && $FoldAffy>=(-$FCAffy)} {continue} if {$FoldDD!="" && $FoldDD!=0} { if {$FoldDD>0 && $FoldDD<=$FCDD} {continue} if {$FoldDD<0 && $FoldDD>=(-$FCDD)} {continue} } #if {[regexp "DD0037" $Ligne]} {FaireLire "$dd dd: $FoldDD affy: $FoldAffy"} #3:Exclure les affy avec les intensites inf a 650 set Intn [lindex $LesChamps 26] set Inte [lindex $LesChamps 27] set Ints [lindex $LesChamps 28] set Intu [lindex $LesChamps 29] if {$Intn<=$IntMin && $Inte<=$IntMin && $Ints<=$IntMin && $Intu<=$IntMin} { lappend LesFaibles $TAR continue } #voir quand T et N sont faibles alors T/N fort. set MoyenneDesT [format "%.3f" [expr ($Inte+ $Ints + $Intu)/3]] #if {$Intn<800 && $MoyenneDesT<800} { #set FoldMoy -[expr $In($CodeAffy)*1.0/$MoyenneDesT]; set PMoy "N" #Espionne "$TAR N:$Intn T:$MoyenneDesT -DetN :$Detn" #continue #} #3: Comparer profils du DD (profilgel ou profilcalc ou profilcons) avec profil affy set ProfilCalcDD [lindex $LesChamps 18] set ProfilConsDD [lindex $LesChamps 19] if {$ProfilDD==$ProfilAffy || $ProfilCalcDD==$ProfilAffy || $ProfilConsDD==$ProfilAffy} { #Exclure ceux ou le profildd s'oppose au profil calc ou cons qui est comme le profil affy ...cad s'oppose au profil affy #if {$ProfilDD!=$ProfilCalcDD || $ProfilDD!=$ProfilConsDD} {continue} #if {$ProfilDD!=$ProfilAffy} {continue} #Comment: de toute facon la courbe reste la meme avec une diminution de la correlation qd FCAffy est entre 8 et 12 a peu pres incr NbMemeProfil lappend Liste $Ligne if {$ProfilAffy=="N"} {incr NbN} if {$ProfilAffy=="T"} {incr NbT} } else { #ne pas compter les complexes if {($ProfilDD=="" || $ProfilDD==0) && ($ProfilConsDD=="" || $ProfilConsDD=="?" || $ProfilConsDD=="0") && $ProfilCalcDD=="C" } { incr nbcomplexes continue } if {$ProfilAffy=="N"} {incr TN} if {$ProfilAffy=="T"} {incr NT} lappend ListeProfOpp $Ligne } incr NbComparaisons lappend ListeComplete $Ligne #T/N #Espionne "T: $MoyenneDesT" #Espionne "N: $Inte" } #Espionne [llength $ListeComplete] EspionneL $ListeComplete #Espionne "$NbMemeProfil meme profil - opp: [llength $ListeProfOpp] -nbcompar:$NbComparaisons" set Percent [expr $NbMemeProfil*1.0/$NbComparaisons] #Espionne $ListeProfOpp return "$Percent $NbMemeProfil $NbComparaisons exclus:$nbcomplexes" } proc AnalyseLeBlastN {Fichier {BanqueBlast ""}} { global RepertoireDuGenome if { ! [file exists $Fichier]} { set FichierDeLOrga "$RepertoireDuGenome/blastn/[file tail $Fichier]" if { ! [file exists $FichierDeLOrga]} { FaireLire "Sorry, I can't find \n $Fichier \n nor \n $FichierDeLOrga" return "" } set Fichier $FichierDeLOrga } CreeLesBornesDuBlastN $Fichier $BanqueBlast LesZonesDuBlastNEnOverlap $Fichier exit } proc AnalyseLesDbClustal {} { if { [OuiOuNon "Do I run analysis on DBClustal outputs ? "]} { set DisPhy [OuiOuNon "CreeDistancesPhyloAvecLesMSFs ?"] set PIPS [OuiOuNon "CreeLesFichiersPIClustalwEtPSClustalw ?"] set Oo [OuiOuNon "ORGAorgaDesMSFs ?"] set PhylOr [OuiOuNon "PhylumsOrthologues ?"] set Para [OuiOuNon "AlignonsLesParalogues ?"] set TCSD [OuiOuNon "TestCodonStartEtDeletionDuMSFPourTous ?"] set TCSC [OuiOuNon "StartCodonClusterPourTous and CreeStartCodonReport ?"] set Diff [OuiOuNon "DifferentielBlastAlignementPourTous ?"] if { $DisPhy } { CreeDistancesPhyloAvecLesMSFs } if { $PIPS } { CreeLesFichiersPIClustalwEtPSClustalw} if { $Oo } { ORGAorgaDesMSFs "CreateIt" } if { $PhylOr } { PhylumsOrthologues bidon } if { $Para } { AlignonsLesParalogues } if { $TCSD } { TestCodonStartEtDeletionDuMSFPourTous } if { $TCSC } { StartCodonClusterPourTous ; CreeStartCodonReport } if { $Diff } { DifferentielBlastAlignementPourTous } } } proc AnalyseLesTBlastN {{BanqueTBlastN ""}} { global RepertoireDuGenome set BanqueTBlastN [WhichBanqueTBlastN $BanqueTBlastN] set LaTotale 0 if {[OuiOuNon "Do I run all analysis for tBlastN ?\n ouatapetbn, orthotblastn, ootblastn, two genes cluster, ... ?"]} { set LaTotale 1 } if {[file exists "$RepertoireDuGenome/tblastn$BanqueTBlastN"] && ! [file exists "$RepertoireDuGenome/fiches/ouatapetbn.$BanqueTBlastN"]} { if {$LaTotale || [OuiOuNon "Do I create fiches/ouatapetbn.$BanqueTBlastN ?"]} { CreeOuATapeTBlastN $BanqueTBlastN } } if {[file exists "$RepertoireDuGenome/fiches/ouatapetbn.$BanqueTBlastN"] && ! [file exists "$RepertoireDuGenome/fiches/orthotblastn"]} { if {$LaTotale || [OuiOuNon "Do I create orthotblastn ?"]} { CreeOrthoTBlastN } } if {[file exists "$RepertoireDuGenome/fiches/orthotblastn"] && ! [file exists "$RepertoireDuGenome/fiches/ootblastn"]} { if {$LaTotale || [OuiOuNon "Do I create ootblastn ?"]} { ORGAorgaDesTBlastNs "CreateIt" } } if {[file exists "$RepertoireDuGenome/fiches/ouatapetbn.$BanqueTBlastN"] && ! [file exists "$RepertoireDuGenome/fiches/organismesayantmemeoperon"]} { if {$LaTotale || [OuiOuNon "Do I run TwoGeneClusterAnalysis ?"]} { CreeLeFichierOrganismesAyantMemeOperon genomes } } if {[file exists "$RepertoireDuGenome/fiches/ouatapetbn.$BanqueTBlastN"] && [info exists Org1] && ! [file exists "$RepertoireDuGenome/fiches/orthologuesdans$Org1"]} { if {$LaTotale || [OuiOuNon "Do I check for orthologs in $Org1 and $Org2 ? "]} { foreach Orga [LesOrganismesTresProches] { CreeLeFichierOrthologueDans $Orga } } } } proc AnalyseLongueurSequence {} { global RepertoireDuGenome set LaListeDesPetits {} foreach Nom [ListeDesPABs] { set longueur [string length [QueLaSequenceDuFichierTFA "$RepertoireDuGenome/nuctfa/$Nom"]] if {$longueur < 9} {lappend LaListeDesPetits $Nom} } Espionne $LaListeDesPetits } proc AnalyseMoi {args} { PourWscope 1 return [Html_DuTexteTelQuel [join $args " "]] } proc AnalyseNucMask {{Commentaire ""}} { global RepertoireDuGenome set Rep "$RepertoireDuGenome/nucmask" set LesMasked {} set LesPartiellementMasked {} set LesTotalementMasked {} set N 0 set n1 0 set n2 0 foreach Fichier [ glob -nocomplain "$Rep/*.m" ] { set Contenu [ ContenuDuFichier $Fichier] scan $Contenu "%s %s %s %s" CodeGscope TypeMask CodeClone User regsub -all ">" $CodeGscope "" CodeGscope if {$TypeMask != "NoRepeatToMask" } { incr N lappend LesMasked $CodeGscope } if {$TypeMask == "PartiallyMasked"} { incr n1 lappend LesPartiellementMasked $CodeGscope continue } if {$TypeMask == "TotallyMasked"} { incr n2 lappend LesTotalementMasked $CodeGscope continue } } if {$Commentaire== "partiel" } { Espionne "Partially Masked cDNAs: $n1" Espionne "List of the partially Masked cDNAs: \n $LesPartiellementMasked" exit } if {$Commentaire== "total" } { Espionne "Totally Masked cDNAs: $n2" Espionne "List of the totally Masked cDNAs: \n $LesTotalementMasked" exit } Espionne "Masked cDNAs: $N" set Pourcent [expr round ($N/2899.0 *100)] Espionne "Percent/HeadNeck3: $Pourcent %" Espionne "Partially Masked cDNAs: $n1" Espionne "Totally Masked cDNAs: $n2" Espionne "Total liste: \n $LesMasked " FaireLire ok return $LesMasked } proc AnalyseNucMaskAndReMask {{Comment ""}} { global RepertoireDuGenome set Rep "$RepertoireDuGenome/nucMaskAndReMask" set LesMRM {} set LesPartiellementMRM {} set LesTotalementMRM {} set N 0 set n1 0 set n2 0 foreach Fichier [ glob -nocomplain "$Rep/*.mrm" ] { set Contenu [ ContenuDuFichier $Fichier] scan $Contenu "%s %s %s %s %s %s" CodeGscope CodeClone User TypeMask Pourcent Fin regsub -all ">" $CodeGscope "" CodeGscope regsub -all "%" $Pourcent "" Pourcent if {$TypeMask != "NoRepeatToMRM" } { incr N lappend LesMRM $CodeGscope } if {$TypeMask == "PartiallyMRM"} { incr n1 lappend LesPartiellementMRM $CodeGscope continue } if {$TypeMask == "TotallyMRM"} { incr n2 lappend LesTotalementMRM $CodeGscope continue } } if {$Comment== "partiel" } { Espionne "Partially MRM cDNAs: $n1" Espionne "List of the partially MRM cDNAs: \n $LesPartiellementMRM" exit } if {$Comment== "total" } { Espionne "Totally MRM cDNAs: $n2" Espionne "List of the totally MRM cDNAs: \n $LesTotalementMRM" exit } Espionne "MRM cDNAs: $N" set Pourcent [expr round ($N/2899.0 *100)] Espionne "Percent/HeadNeck3: $Pourcent %" Espionne "Partially MRM cDNAs: $n1" Espionne "Totally MRM cDNAs: $n2" Espionne "Total liste: \n $LesMRM " #SauveLesLignes $LesMRM dans "$RepertoireDuGenome/listeDesPABsMRM" } proc AnalyseNucReMask {{Comment ""}} { global RepertoireDuGenome set Rep "$RepertoireDuGenome/nucremask" set LesRemasques {} set LesPartiellementReMasques {} set LesTotalementReMasques {} set N 0 set n1 0 set n2 0 foreach Fichier [ glob -nocomplain "$Rep/*.rm" ] { set Contenu [ ContenuDuFichier $Fichier] scan $Contenu "%s %s %s %s %s %s %s" CodeGscope CodeClone User TypeMask Pourcent TypeRepeat Fin regsub -all ">" $CodeGscope "" CodeGscope regsub -all "%" $Pourcent "" Pourcent if {$TypeMask != "NoSequenceToReMask" && $TypeMask != "NoRepeatToReMask" } { incr N lappend LesRemasques $CodeGscope } if {$TypeMask == "PartiallyReMasked"} { incr n1 lappend LesPartiellementRemasques $CodeGscope continue } if {$TypeMask == "TotallyReMasked"} { incr n2 lappend LesTotalementReMasques $CodeGscope continue } } if {$Comment== "partiel" } { Espionne "Partially remasked cDNAs: $n1" Espionne "List of the partially remasked cDNAs: \n $LesPartiellementRemasques" exit } if {$Comment== "total" } { Espionne "Totally remasked cDNAs: $n2" Espionne "List of the totally remasked cDNAs: \n $LesTotalementReMasques" exit } Espionne "Remasked cDNAs: $N" set Pourcent [expr round ($N/2899.0 *100)] Espionne "Percent/HeadNeck3: $Pourcent %" Espionne "Partially remasked cDNAs: $n1" Espionne "Totally remasked cDNAs: $n2" Espionne "Total liste: \n $LesRemasques " SauveLesLignes $LesRemasques dans "$Rep/lesremasques" } proc AnalyseResAffymetrix_ProbeSet {FichierAffy} { Wup "Permet d obtenir des stats sur le resultat des recherche blat et des NM associes aux ProbeSet Affy" set nbProbeSet 0 set F [open "$FichierAffy"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {! [regexp {^>>>} $Ligne]} {continue} #Espionne "$Ligne" set LigneSplitee [split $Ligne "\t"] set NbRefSeqTrouve 0 set ProbeSetID "" set LesRefSeqTrouves "" set RefSeqAffy "" set DefAffy "" set ProbeSetNoBlat 0 set ProbeSetNoIds 0 set RefSeqTrouve 0 set NbRefSeqTrouve 0 set ProbeSetID [lindex $LigneSplitee 0] set LesRefSeqTrouves [split [lindex $LigneSplitee 1] " "] set RefSeqAffy [lindex $LigneSplitee 2] set DefAffy [lindex $LigneSplitee 3] #Nombre de RefSeq trouve par ProbeSet if { [regexp -nocase "no ids" $LesRefSeqTrouves]} { set ProbeSetNoIds "1" set NbRefSeqTrouve "0" set LesRefSeqTrouves "" set RefSeqTrouve "0" } elseif {[regexp -nocase "no blat hit" $Ligne]} { set ProbeSetNoBlat "1" set LesRefSeqTrouves "" set RefSeqTrouve "0" } else { set NbRefSeqTrouve [llength $LesRefSeqTrouves] set RefSeqTrouve 1 set NbRefSeqTrouve2 [regexp -all "NM_" $LesRefSeqTrouves] if {$NbRefSeqTrouve != $NbRefSeqTrouve2} { Espionne "$ProbeSetID\t$NbRefSeqTrouve\t$NbRefSeqTrouve2" } } #Nombre de ProbetSet ou on a pas trouve un RefSeq if {! [info exists TabResAffy(nbProbeSetNoIds)]} { set TabResAffy(nbProbeSetNoIds) 0 } if {$ProbeSetNoIds} { incr TabResAffy(nbProbeSetNoIds) } #Nombre de ProbetSet ou on a pas trouve de genome if {! [info exists TabResAffy(nbProbeSetNoBlat)]} { set TabResAffy(nbProbeSetNoBlat) 0 } if {$ProbeSetNoBlat} { incr TabResAffy(nbProbeSetNoBlat) } #Nombre de ProbetSet ou on a trouve un RefSeq if {! [info exists TabResAffy(nbProbeSetTrouve)]} { set TabResAffy(nbProbeSetTrouve) 0 } if {$RefSeqTrouve} { incr TabResAffy(nbProbeSetTrouve) } #Nombre de ProbeSet Affy a trouve if {! [info exists TabResAffy(nbProbeSetAvecNMAffy)]} { set TabResAffy(nbProbeSetAvecNMAffy) 0 } if {[regexp -nocase "NM_" $RefSeqAffy] || [regexp -nocase "NM_" $DefAffy]} { incr TabResAffy(nbProbeSetAvecNMAffy) set NMPourProbeSet 1 } else { set NMPourProbeSet 0 } #Nombre de ProbetSet ou on a trouve un RefSeq et valide set RefSeqValide 0 if {$NMPourProbeSet} { if {$RefSeqTrouve} { foreach Acc $LesRefSeqTrouves { if {[regexp -nocase $Acc $RefSeqAffy] || [regexp -nocase $Acc $DefAffy]} { #Espionne "$Acc - $RefSeqAffy" set RefSeqValide 1 break } #Espionne "$ProbeSetID -- $Acc - $RefSeqAffy" } } } else { if {! [info exists TabResAffy(nbRefSeqEnPlus)]} { set TabResAffy(nbRefSeqEnPlus) 0 } if {$RefSeqTrouve} { incr TabResAffy(nbRefSeqEnPlus) } } incr nbProbeSet #Nombre de ProbeSet valide entre Affy et RefSeaq trouve if {! [info exists TabResAffy(nbValide)]} { set TabResAffy(nbValide) 0 } if {$RefSeqValide} { incr TabResAffy(nbValide) } if {! [info exists TabResAffy(nbTrouve,$NbRefSeqTrouve)]} { set TabResAffy(nbTrouve,$NbRefSeqTrouve) 0 } incr TabResAffy(nbTrouve,$NbRefSeqTrouve) if {! [info exists TabResAffy(LesnbTrouve)]} { set TabResAffy(LesnbTrouve) "" } lappend TabResAffy(LesnbTrouve) $NbRefSeqTrouve } close $F set TabResAffy(LesnbTrouve) [lsort -unique -integer -increasing [set TabResAffy(LesnbTrouve)]] Espionne "Affymetrix HG-U133 Plus ProbeSet Analysis" Espionne "Nb ProbeSet: $nbProbeSet" Espionne "Nb ProbeSet avec NM (Affy): [set TabResAffy(nbProbeSetAvecNMAffy)]" Espionne "Nb ProbeSet avec NM trouve: [set TabResAffy(nbProbeSetTrouve)]" Espionne "Nb ProbeSet sans NM: [set TabResAffy(nbProbeSetNoIds)]" Espionne "Nb ProbeSet sans Blat: [set TabResAffy(nbProbeSetNoBlat)]" Espionne "Nb ProbeSet Total: [expr [set TabResAffy(nbProbeSetTrouve)]+[set TabResAffy(nbProbeSetNoIds)]+[set TabResAffy(nbProbeSetNoBlat)]]" Espionne "Nb ProbeSet valide: [set TabResAffy(nbValide)]" #Espionne "Percent Valide: [expr ([set TabResAffy(nbValide)]*100.0)/[set TabResAffy(nbProbeSetTrouve)]]" Espionne "Percent Valide par rapport Affy: [expr ([set TabResAffy(nbValide)]*100.0)/[set TabResAffy(nbProbeSetAvecNMAffy)]]" Espionne "Nb ProbeSet en plus d Affy: [set TabResAffy(nbRefSeqEnPlus)]" foreach Nb [set TabResAffy(LesnbTrouve)] { Espionne "$Nb\t[set TabResAffy(nbTrouve,$Nb)]" } return "" } proc AnalyseSelections {outOf} { LesDefauts DefinitionPreferences InitComparaison global SDG global ListeDesAcidesAmines global TableauCouleurEtGroupe global Threshold global Defauts global TypeCons global ConsRef global ListeDesConsensusDuGroupe global Sequences global lesTypes if {$outOf == ""} { set lesTypes [list "_nature" "_mounir" "_bandelettes" "_luc"] set repIn "msf_nature/Rascal/Leon" } else { set lesTypes [list "_Selnature" "_Selmounir" "_Selbandelettes" "_Selluc"] set repIn "msf_Selnature" } set fileOut {} set file {} puts "Info\tNature\tSelMounir\tSelBandelettes\tSelLuc" set Lpab [ListeDesPABs] set Lpab [lrange $Lpab 269 end] #set Lpab "nPDB054" foreach f $Lpab { set lNbSeq {} set lNbSeqId {} set lNbClus {} set lNbIdGlob {} set lNbCGlob {} set lNbSGlob {} set lRandInd {} if {![file exists [file join [RepertoireDuGenome] ${repIn} $f]]} {continue} if {[lsearch [LesLignesDuFichier [file join [RepertoireDuGenome] ${repIn} $f]] "NoSequenceToAlign"] == 0} {continue} foreach type $lesTypes { # mode Batch pour travailler sans interface graphique LesDefauts Mode "Batch" LesDefauts CheckSeq 0 set Threshold [set Defauts(Threshold)] if {$outOf == ""} { set file [file join [RepertoireDuGenome] "msf$type" "Rascal" "Leon" $f] set ficComp "/usr/tmp/${f}_nature.clu" } else { set file [file join [RepertoireDuGenome] "msf$type" $f] set ficComp "/usr/tmp/${f}_Selnature.clu" } DecortiqueEtAfficheUnMSF $file DefinitionGroupes "dpc" RunOrdali RecupereReference set grps($type) [array get SDG] set data($type) [RecupereDonneesGlobales $type] lappend lNbSeq [lindex [set data($type)] 0] lappend lNbClus [lindex [set data($type)] 1] lappend lNbIdGlob [lindex [set data($type)] 2] lappend lNbCGlob [lindex [set data($type)] 3] lappend lNbSGlob [lindex [set data($type)] 4] #mise en evidence des residus Globaux (identite, conservation et similarite) set lR$type [TabGlobaux $f [set data($type)] $outOf] # traitement du fichier resu de la clusterisation # comparaison des clusters obtenus pour chacune des selection par rapport a la ref # calcul d un indice de conservation set fileOut "/usr/tmp/${f}.dpc" set fic "/usr/tmp/${f}${type}.clu" file copy -force $fileOut $fic if {![regexp "nature" $type]} { set lstat($type) [CompCluster $ficComp $fic] lappend lRandInd [string range [lindex [set lstat($type)] 0] 0 3] lappend lNbSeqId [lindex [set lstat($type)] 1] } else { array set SeqN [array get Sequences] } FermeFichier } set lCommunsGlobaux [DetermineNbGlobauxCommuns [set lR[lindex $lesTypes 1]] [set lR[lindex $lesTypes 2]] [set lR[lindex $lesTypes 3]] [set lR[lindex $lesTypes 0]]] #determination des groupes communs set ListeCorrespondance [DetermineGroupesEquivalents [array get grps] [array get data] [array get SeqN]] puts "\n" puts "${f}_NbSeqTot\t[lindex $lNbSeq 0]\t[lindex $lNbSeq 1]\t[lindex $lNbSeq 2]\t[lindex $lNbSeq 3]" puts "${f}_NbSeqIden\t[lindex $lNbSeq 0]\t[lindex $lNbSeqId 0]\t[lindex $lNbSeqId 1]\t[lindex $lNbSeqId 2]" puts "${f}_NbIdGlob\t[lindex $lNbIdGlob 0]\t[lindex $lNbIdGlob 1]\t[lindex $lNbIdGlob 2]\t[lindex $lNbIdGlob 3]" puts "${f}_NbIdGlobCom\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 0] 0]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 0] 1]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 0] 2]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 0] 3]" puts "${f}_NbConsGlob\t[lindex $lNbCGlob 0]\t[lindex $lNbCGlob 1]\t[lindex $lNbCGlob 2]\t[lindex $lNbCGlob 3]" puts "${f}_NbConsGlobCom\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 1] 0]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 1] 1]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 1] 2]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 1] 3]" puts "${f}_NbSimiGlob\t[lindex $lNbSGlob 0]\t[lindex $lNbSGlob 1]\t[lindex $lNbSGlob 2]\t[lindex $lNbSGlob 3]" puts "${f}_NbSimiGlobCom\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 2] 0]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 2] 1]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 2] 2]\t[lindex [ExtraitListeDeListe $lCommunsGlobaux 2] 3]" puts "${f}_NbClusTot\t[lindex $lNbClus 0]\t[lindex $lNbClus 1]\t[lindex $lNbClus 2]\t[lindex $lNbClus 3]" puts "${f}_aRandIndex\t1\t[lindex $lRandInd 0]\t[lindex $lRandInd 1]\t[lindex $lRandInd 2]" for {set i 1} {$i<=[lindex $lNbClus 0]} {incr i} { puts "${f}_Cl${i}-SqId-IdGrCom\t[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 4]] 0]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 3]] 0]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 1]] 0]\t[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 4]] 1]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 3]] 1]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 1]] 1]\t[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 4]] 2]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 3]] 2]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 1]] 2]\t[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 4]] 3]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 3]] 3]-[lindex [ExtraitListeDeListe $ListeCorrespondance [expr $i * 4 - 1]] 3]" } # efface fichiers crees pour la clusterisation dans /usr/tmp foreach fic [glob -nocomplain /usr/tmp/*${f}*] { file delete -force $fic } } return 1 } proc AnalyseSortieBlastADNc {{Liste ""}} { #Attention au gap=> ok #Attention aux n if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set RepertoireSortieBlast "[RepertoireDuGenome]/blastnSuperSouris" set total 0; set statcas0 0; set statcas2a 0; set statcas2b 0; set statcas1 0; set lesout 0 set statcas2c 0; set statcas2d 0; set statcas2cd 0 foreach Nom $Liste { set File "$RepertoireSortieBlast/$Nom" set LesBons {} incr total set Queue [file tail $File] #Espionne "$Queue" set NbSujet [AskBlast $File NbSubject] #Espionne "NbSujet $NbSujet" if {$NbSujet==0} { incr statcas0 continue } set cas1 0; set cas2 0; set cas2a 0; set cas2b 0; set cas2c 0; set cas2d 0 for {set j 1} {$j<=$NbSujet} {incr j} { set BId [AskBlast $File Subject $j] #Espionne "BId $BId" set NbSegment [AskBlast $File BanqueId $BId NbSegment] #Espionne "NbSegment $NbSegment" for {set i 1} {$i<=$NbSegment} {incr i} { set LesLignesFinales {} set PId [AskBlast $File BanqueId $BId Segment $i Identities] set Gap [AskBlast $File BanqueId $BId Segment $i Gaps] regexp {([0-9]+)/([0-9]+) (\([0-9]+%\))} $PId Tmp nbId nbTot Pourcentage regsub -all {\(} $Pourcentage "" Pourcentage regsub -all {\)} $Pourcentage "" Pourcentage regsub % $Pourcentage "" Pourcentage #Espionne "PId $PId" #Espionne "++$nbId $nbTot $Pourcentage" #Espionne "Gap $Gap" #Espionne "$nbTot $Pourcentage $Gap" if {$nbTot<60} {set cas1 1} if {$nbTot>60} { set cas2 1 if {$Pourcentage == "100"} { set cas2a 1 lappend LesBons $BId } if {$Pourcentage != "100"} { set cas2b 1 set Align [AskBlast $File BanqueId $BId Segment $i Align] Espionne "$Align" set LesLignes [split $Align "\n"] set LesLignes [ListeSsElmtVide $LesLignes] foreach Ligne $LesLignes { if {[regexp {^Query} $Ligne]} { set index [string first ":" $Ligne] set result [regexp -start $index -inline {[a-z]} $Ligne] set indexfinal [string first $result $Ligne $index] #Espionne "result $result" #Espionne "indexfinal $indexfinal" continue } if {[regexp {^Sbjct} $Ligne]} {continue} if {![regexp {\|} $Ligne]} {continue} #Espionne "1$Ligne" set Ligne [string range $Ligne $indexfinal end] #Espionne "2$Ligne" lappend LesLignesFinales $Ligne } set LeResult [join $LesLignesFinales ""] #Espionne $LeResult set LesTraits [split $LeResult ""] set nombredetrait [llength $LesTraits] set Max 0; set nbtrait 0; set nbelmt 0 foreach Trait $LesTraits { incr nbelmt #Espionne "++$Trait" if {$Trait=="|"} { incr nbtrait } if {$Trait!="|"} { #Espionne "$nbtrait" if {$nbtrait>$Max} {set Max $nbtrait} set nbtrait 0 } if {$nbelmt==$nombredetrait} { #Espionne "$nbtrait" if {$nbtrait>$Max} {set Max $nbtrait} set nbtrait 0 } } if {$Max>=60} { lappend LesBons $BId set cas2c 1 } elseif {$Max<60} { set cas2d 1 } } } #Espionne "$cas1 $cas2 $cas2a $cas2b $cas2c $cas2d" } } if {$cas2a} { incr statcas2a #Espionne "$Queue oui" } elseif {$cas2b} { incr statcas2b #Espionne "$Queue test" if {$cas2c && $cas2d} { incr statcas2cd #Espionne "$Queue ouietnonaptest" } elseif {$cas2c && !$cas2d} { incr statcas2c #Espionne "$Queue ouiaptest" } elseif {!$cas2c && $cas2d} { incr statcas2d #Espionne "$Queue nonaptest" } } elseif {$cas1} { incr statcas1 #Espionne "$Queue non" } else { incr lesout #Espionne "$Queue out" } set LesBons [ListeSansDoublon $LesBons] set LaChaineBonne [join $LesBons " "] if {$LesBons =={}} { Espionne "BanqueADNc: No" InformeSansDemander $Queue "BanqueADNc: No" } if {$LesBons!={}} { Espionne "BanqueADNc: Yes $LaChaineBonne" InformeSansDemander $Queue "BanqueADNc: Yes $LaChaineBonne" } } #Espionne "total $total" #Espionne "statcas0 $statcas0" #Espionne "statcas2a $statcas2a" #Espionne "statcas2b $statcas2b" #Espionne "statcas2cd $statcas2cd" #Espionne "statcas2c $statcas2c" #Espionne "statcas2d $statcas2d" #Espionne "statcas1 $statcas1" #Espionne "lesout $lesout" } proc AnalyseSortieBlastMagos {} { set LesLignesEcrites {} set File "/genomics/link/retinalFateForLaetitia/blastponms2phDB/recapResuBlastOnMs2phDB" set LesLignes [LesLignesDuFichier $File] set total 0; set bon 0; set mauvais 0; set intermediarymauvais 0; set intermediarybon 0; set saispas 0 foreach Ligne $LesLignes { incr total set LigneEcrite "" if {[regexp {^pab} $Ligne]} {continue} set Elmts [split $Ligne "\t"] set IdBlast [lindex $Elmts 0] set Query [AskBlast $IdBlast Query] set LesElmtsQuery [split $Query " "] set Nom [lindex $LesElmtsQuery 1] set AccMouse [lindex $Elmts 1] set AccHuman [lindex $Elmts 2] set expect [lindex $Elmts 3] set CommandeMouse "getz \"\\\[protein-acc:$AccMouse\\\]\" \-f gen" set GetzOutMouse [eval exec $CommandeMouse] set CommandeHuman "getz \"\\\[protein-acc:$AccHuman\\\]\" \-f gen" set GetzOutHuman [eval exec $CommandeHuman] if {$expect=="0.0"} { Espionne "$Ligne => bon" incr bon if {$IdBlast=="evi022" || $IdBlast=="evi030" || $IdBlast=="evi036" || $IdBlast=="evi056"} { continue } if {$IdBlast=="evi014"} { set LigneEcrite "$IdBlast\t$Nom\tP04001" lappend LesLignesEcrites $LigneEcrite continue } set LigneEcrite "$IdBlast\t$Nom\t$AccHuman" lappend LesLignesEcrites $LigneEcrite } elseif {$expect>"1"} { Espionne "$Ligne => mauvais" incr mauvais } elseif {$expect>1.e-50} { Espionne "$Ligne => intermediarymauvais" incr mauvais } elseif {$expect<=1.e-118} { Espionne "$Ligne => intermediarybon" incr intermediarybon if {$IdBlast=="evi005" || $IdBlast=="evi008"} { continue } set LigneEcrite "$IdBlast\t$Nom\t$AccHuman" lappend LesLignesEcrites $LigneEcrite } else { Espionne "$Ligne => saispas" incr saispas if {$IdBlast=="evi013" || $IdBlast=="evi037" || $IdBlast=="evi046"} { continue } set LigneEcrite "$IdBlast\t$Nom\t$AccHuman" lappend LesLignesEcrites $LigneEcrite } Espionne "LigneEcrite $LigneEcrite" } Espionne "total $total" Espionne "bon $bon" Espionne "mauvais $mauvais" Espionne "intermediarybon $intermediarybon" Espionne "saispas $saispas" SauveLesLignes $LesLignesEcrites dans "[RepertoireDuGenome]/MagosLesRetinalFateHuman" } proc AnalyseTabulatedFile {f} { set cont [ContenuDuFichier $f] set cont [string map {"\t\|\n" "LuCkYlUc67"} $cont] set cont [string map {"\n" " "} $cont] set cont [string map {"LuCkYlUc67" "\n"} $cont] set Ll [split $cont \n] foreach l $Ll { set Lix [regexp -all -inline -indices {\t\|\t} $l] set i 0 set dp 0 foreach li $Lix { lassign $li dc fc lappend C($i) [string range $l $dp $dc-1] set dp [expr {$fc+1}] incr i } lappend C($i) [string range $l $dp end] } foreach col [lsort -integer [array names C]] { #puts "[lrange $C($col) 0 4]" set lg [PlusLongEltDe $C($col)] set v [PlusLongEltDe $C($col) val] puts "$col $lg $v" } unset -nocomplain C return exit } proc AnalyseTestClusterPos {f} { set Ll [LesLignesDuFichier $f] set res {} set vutype 0 foreach l $Ll { if {[regexp {^type } $l]} { if {$res != {} } { lappend LRes $res } set res [lindex [split $l " "] 1] set vutype 1 } if {[regexp {^\t} $l] && $vutype} { lappend res [lindex [split $l " "] end] } } lappend LRes $res set fmt "%14s |[string repeat "%6.3f" 3] |[string repeat "%6.3f" 3]" # Trie sur Identite (1er cluster) puts "Tri sur Sum (sens+spec) : Identite" set LRes [lsort -real -decreasing -index 3 $LRes] foreach e $LRes { puts [format $fmt {*}$e] } # Trie sur global (1er et 2eme cluster) puts "\nTri sur Sum (sens+spec) : global" set LRes [lsort -real -decreasing -index 6 $LRes] foreach e $LRes { puts [format $fmt {*}$e] } exit } proc AnalyseValeursPropres {Le} { set s 0. foreach e $Le { set s [expr {$s+$e}] } foreach e $Le { lappend Ic [expr {$e/$s*100.}] } puts "\nEignevalues :" set fmt "%s |%7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f" puts [format $fmt "Abs" {*}[lrange $Le 0 9]] puts [format $fmt "Rel" {*}[lrange $Ic 0 9]] puts [format $fmt "Abs" {*}[lrange $Le 10 19]] puts [format $fmt "Rel" {*}[lrange $Ic 10 19]] puts "" return } proc AnalyseVecteursPropres {Ev {Cen 0}} { puts "" if {$Cen} {set Ev [CentreVecteur $Ev} set iPaaP [CorrelationAxe $Ev] set Av [VecteurDeAAIndex $iPaaP] set ccp [CoefficientCorrelation $Ev $Av] puts [format "%s %6.3f" "Coef.Corr = " $ccp] puts "" return [list $iPaaP $ccp] } proc AnalysissoftwareInput {} { if { ! [WithWebService "Gx" "TestIfExists"]} { WithWebService "Gx" 1 } InfoFromAnalysissoftwareInput set LesTetes "name,description,reference" foreach Name [InfoFromAnalysissoftwareInput ListOf Name] { set Existant [GxDbSqlExec "select pk_analysissoftware from analysissoftware where name='$Name';" "GetFirstValue"] if {$Existant!=""} { return "" } set name [InfoFromAnalysissoftwareInput $Name "name" ] set description [InfoFromAnalysissoftwareInput $Name "description" ] set reference [InfoFromAnalysissoftwareInput $Name "reference" ] set Ligne "'$name','$description','$reference'" Espionne "$Ligne" set Commande "insert into analysissoftware ($LesTetes) values ($Ligne);" Espionne "$Commande" set status [GxDbSqlExec $Commande] } return $status } proc AncetreCommun {A B {Quoi ""}} { Wup "On part des feuilles et on remonte une fois l'un une fois l'autre jusqu'a trouver un commun" if {$Quoi==""} { set Quoi "IdCommun" } if {[regexp {[^0-9]} $A]} { set A [Tax $A] } if {[regexp {[^0-9]} $B]} { set B [Tax $B] } if {$A=="" || $B==""} { return "" } set ParentsDeA [list $A] set ParentsDeB [list $B] set AuTourDeA 1 while 1 { set AncetreA [lindex $ParentsDeA end] set AncetreB [lindex $ParentsDeB end] #Espionne "A=$ParentsDeA/$AncetreA/[Tax $AncetreA]/ B=$ParentsDeB/$AncetreB/[Tax $AncetreB]/" if {[set iA [lsearch -exact $ParentsDeA $AncetreB]]>=0} { if {[string equal -nocase $Quoi "IdCommun" ]} { return $AncetreB } if {[string equal -nocase $Quoi "TwoLists" ]} { return [list [lrange $ParentsDeA 0 $iA] $ParentsDeB] } return [Tax $AncetreB $Quoi] } if {[set iB [lsearch -exact $ParentsDeB $AncetreA]]>=0} { if {[string equal -nocase $Quoi "IdCommun" ]} { return $AncetreA } if {[string equal -nocase $Quoi "TwoLists" ]} { return [list $ParentsDeA [lrange $ParentsDeB 0 $iB]] } return [Tax $AncetreA $Quoi] } if { $AuTourDeA && $AncetreA<=1} { set AuTourDeA 0 } if { ! $AuTourDeA && $AncetreB<=1} { set AuTourDeA 1 } if {$AuTourDeA} { set AncetreA [Tax $AncetreA "RankedParent"] if {$AncetreA==""} { return "" } lappend ParentsDeA $AncetreA set AuTourDeA 0 } else { set AncetreB [Tax $AncetreB "RankedParent"] if {$AncetreB==""} { return "" } lappend ParentsDeB $AncetreB set AuTourDeA 1 } } } proc AncetreCommunDeLaListe {Liste {Quoi ""}} { if {$Quoi=="" || $Quoi=="IdCommun"} { set Quoi "TaxId" } set A [lindex $Liste 0] set A [Tax $A "TaxId"] set LesAutres [lrange $Liste 1 end] while {$LesAutres!={}} { set B [lindex $LesAutres 0] set LesAutres [lrange $LesAutres 1 end] set A [AncetreCommun $A $B] } set R [Tax $A $Quoi] return $R } proc AncetresDe {n} { global T set Lanc $n if {[info exists T($n,par)]} { set p $T($n,par) } else { return $n } while {$p >= -1} { lappend Lanc $p set f $p if {[info exists T($f,par)]} { set p $T($f,par) } else { break } } return $Lanc } proc AnchorsCoherents {FichierTFA FichierAnchors NomOuFichierBlast} { global RepertoireDuGenome JeMeSignale Wup "If the names in the TFA and Anchors don't correspond I change in the TFA" Wup " in Ballast I do otherwize and change in the Anchor file." if { ! [regexp -nocase {[0-9a-z_]} $FichierAnchors]} { return "" } foreach Ligne [LesLignesDuFichier $FichierTFA] { if { ! [regexp "^>" $Ligne]} { continue } regsub ">" $Ligne "" Ligne scan $Ligne "%s" AccessTFA set ACCESSTFA [string toupper $AccessTFA] set EstDansTFA($ACCESSTFA) 1 set Beau($ACCESSTFA) $AccessTFA } set LesAnchorsAChanger {} foreach Ligne [LesLignesDuFichier $FichierAnchors] { if { ! [regexp "^seq\:" $Ligne]} { continue } set AccessAnchor "" scan $Ligne "%s %s %s" Seq Bidon AccessAnchor set ACCESSANCHOR [string toupper $AccessAnchor] if {[info exists EstDansTFA($ACCESSANCHOR)]} { continue } set MauvaisAnchors($ACCESSANCHOR) 1 lappend LesAnchorsAChanger $AccessAnchor } if {$LesAnchorsAChanger=={}} { return $FichierAnchors } set FichierBlast $NomOuFichierBlast if { ! [regexp "/" $NomOuFichierBlast] || ! [file exists $FichierBlast]} { set Nom $NomOuFichierBlast set FichierBlast "$RepertoireDuGenome/blastp/$Nom" } if { ! [file exists $FichierBlast]} { return $FichierAnchors } DecortiqueBlast $FichierBlast "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess { regsub {\:} $BanqueId "|" BanqueId if {[regexp "mol\:protein" $Access]} { set Access $BanqueId } set BANQUEID [string toupper $BanqueId] set ACCESS [string toupper $Access] if {[info exists DejaVu($BANQUEID)] || [info exists DejaVu($ACCESS)]} { FaireLire "Deja vu $BanqueID $Access !! " } set Beau($BANQUEID) $BanqueId set Beau($ACCESS) $Access if {$BANQUEID!=$ACCESS} { set Autre($BANQUEID) $ACCESS set Autre($ACCESS) $BANQUEID } } set NouveauxAnchors {} foreach Ligne [LesLignesDuFichier $FichierAnchors] { if { ! [regexp "^seq\:" $Ligne]} { lappend NouveauxAnchors $Ligne ; continue } set AccessAnchor "" scan $Ligne "%s %s %s" Seq Bidon AccessAnchor set ACCESSANCHOR [string toupper $AccessAnchor] if { ! [info exists MauvaisAnchors($ACCESSANCHOR)]} { lappend NouveauxAnchors $Ligne continue } if { ! [info exists Autre($ACCESSANCHOR)]} { if { [EstUnAccessPDB $ACCESSANCHOR] && [regexp "_$" $ACCESSANCHOR]} { regsub "_$" $ACCESSANCHOR "" AUTREACC } else { lappend NouveauxAnchors $Ligne continue } } else { set AUTREACC [set Autre($ACCESSANCHOR)] } if { ! [info exists EstDansTFA($AUTREACC)]} { lappend NouveauxAnchors $Ligne continue } set BeauNouveau [set Beau($AUTREACC)] set NouvelleLigne [SubstitueAvecBlancsDevant $Ligne $AccessAnchor $BeauNouveau] lappend NouveauxAnchors $NouvelleLigne } SauveLesLignes $NouveauxAnchors dans "$FichierAnchors.coherent2" return [SauveLesLignes $NouveauxAnchors dans "$FichierAnchors.coherent"] } proc AnchorsCount {Nom} { global AnchorsCount global RepertoireDuGenome if {[info exists AnchorsCount($Nom)]} { return [set AnchorsCount($Nom)] } if {[info exists AnchorsCount("EstCharge")]} { return [set AnchorsCount("EstCharge")] } set FichierAnchorsCount "$RepertoireDuGenome/fiches/anchors_count" while { ! [file exists $FichierAnchorsCount]} { if { ! [OuiOuNon "Do I count, NOW, the anchors in each alignment ?"]} { set AnchorsCount("EstCharge") -2 return [AnchorsCount $Nom] } else { set LesAnchors {} foreach PAB [ListeDesPABs] { set FichierMSF "$RepertoireDuGenome/msf/$PAB" if { ! [file exists $FichierMSF]} { continue } set Entete [string toupper [LesPremieresLignesDuFichier $FichierMSF 5]] if { ! [regexp -nocase "ANCHORS" $Entete]} { set N -3 } else { set N [IntegerApres "ANCHORS" dans $Entete] } lappend LesAnchors "$PAB $N" } SauveLesLignes $LesAnchors dans $FichierAnchorsCount } } set AnchorsCount("EstCharge") -1 foreach Ligne [LesLignesDuFichier $FichierAnchorsCount] { scan $Ligne "%s %d" NomLu N lappend AnchorsCount(LaListeMerci) $N set AnchorsCount($NomLu) $N } return [AnchorsCount $Nom] } proc AncienChangePreferences {} { global Couleurs global TypeCons global TypeText global SphDef global Defauts set w .pref toplevel $w wm title $w "Preferences" wm iconname $w "Preferences" frame $w.colors pack $w.colors -side top -fill x grid rowconfig $w.colors 0 -weight 1 -minsize 0 grid columnconfig $w.colors 0 -weight 0 -minsize 0 label $w.colors.global -text "Global conservation" -relief sunken # pack $w.colors.global -side top grid $w.colors.global -in $w.colors -padx 1 -pady 20 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky w set EltCo 0 set EltLi 0 foreach Type $TypeCons { if {$EltCo == "9"} { set EltCo 0 incr EltLi } if {[lsearch $TypeCons $Type] == "3"} { incr EltLi label $w.colors.group -text "Group conservation" grid $w.colors.group -in $w.colors -padx 1 -pady 10 -row $EltLi -column $EltCo -rowspan 1 -columnspan 1 -sticky w incr EltLi } if {[lsearch $TypeCons $Type] == "9"} { incr EltLi label $w.colors.inter -text "Inter-Group conservation" grid $w.colors.inter -in $w.colors -padx 1 -pady 10 -row $EltLi -column $EltCo -rowspan 1 -columnspan 1 -sticky w incr EltLi } if {[lsearch $TypeCons $Type] == "15"} { incr EltLi label $w.colors.points -text "Points" grid $w.colors.points -in $w.colors -padx 1 -pady 10 -row $EltLi -column $EltCo -rowspan 1 -columnspan 1 -sticky w incr EltLi } scan [set Couleurs($Type)] "%s %s" fg bg label $w.colors.l$Type -text [set TypeText($Type)] grid $w.colors.l$Type -in $w.colors -padx 1 -pady 1 -row $EltLi -column $EltCo -rowspan 1 -columnspan 1 -sticky w incr EltCo button $w.colors.f$Type -background $fg -activebackground $fg -command "ChangeCouleur $Type $fg $w.colors.f$Type" grid $w.colors.f$Type -in $w.colors -padx 1 -pady 1 -row $EltLi -column $EltCo -rowspan 1 -columnspan 1 -sticky w incr EltCo button $w.colors.b$Type -background $bg -activebackground $bg -command "ChangeCouleur $Type $bg $w.colors.b$Type" grid $w.colors.b$Type -in $w.colors -padx 1 -pady 1 -row $EltLi -column $EltCo -rowspan 1 -columnspan 1 -sticky w incr EltCo } labelframe $w.control -relief groove -borderwidth 2 -text "Ordali Control Panel" grid rowconfig $w.control 0 -weight 1 -minsize 0 grid columnconfig $w.control 0 -weight 0 -minsize 0 label $w.control.sph -text "Ordali Spheres" radiobutton $w.control.sphmean -text "Mean Volume" -variable SphDef -relief flat -value "Mean" radiobutton $w.control.sphhbnd -text "Mean Volume + HB" -variable SphDef -relief flat -value "HBond" label $w.control.sim -text "Use similarity" radiobutton $w.control.simy -text "Yes" -variable Defauts(SimiGris) -relief flat -value "1" radiobutton $w.control.simn -text "No" -variable Defauts(SimiGris) -relief flat -value "0" label $w.control.slg -text "Select length" radiobutton $w.control.slgy -text "Yes" -variable Defauts(SelectionLong) -relief flat -value "1" radiobutton $w.control.slgn -text "No" -variable Defauts(SelectionLong) -relief flat -value "0" label $w.control.sln -text "Select name" radiobutton $w.control.slny -text "Yes" -variable Defauts(SelectionNom) -relief flat -value "1" radiobutton $w.control.slnn -text "No" -variable Defauts(SelectionNom) -relief flat -value "0" label $w.control.chk -text "Check sequences" radiobutton $w.control.chky -text "Yes" -variable Defauts(CheckSeq) -relief flat -value "1" radiobutton $w.control.chkn -text "No" -variable Defauts(CheckSeq) -relief flat -value "0" label $w.control.grnc -text "Group Consensus 80%" radiobutton $w.control.grncy -text "Yes" -variable Defauts(ConsNGrp) -relief flat -value "1" radiobutton $w.control.grncn -text "No" -variable Defauts(ConsNGrp) -relief flat -value "0" set fontsize [lindex [split $fontext] 1] set fontsizeold $fontsize if {[lindex [split $fontext] 2] != ""} { set fontclas [lindex [split $fontext] 2] set fontclasold $fontclas } else { set fontclas "normal" } label $w.control.fntl -text "Alignment font : CourierNew " tk_optionMenu $w.control.fnts fontsize 6 8 10 12 14 tk_optionMenu $w.control.fntc fontclas normal bold label $w.control.pds -text "Weighted sequences " radiobutton $w.control.pdsy -text "Yes" -variable Defauts(Poids) -relief flat -value "1" radiobutton $w.control.pdsn -text "No" -variable Defauts(Poids) -relief flat -value "0" grid $w.control.sph -in $w.control -padx 1 -pady 3 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky w grid $w.control.sphmean -in $w.control -padx 1 -pady 3 -row 1 -column 1 -rowspan 1 -columnspan 1 -sticky w grid $w.control.sphhbnd -in $w.control -padx 10 -pady 3 -row 1 -column 2 -rowspan 1 -columnspan 1 -sticky w grid $w.control.sim -in $w.control -padx 1 -pady 3 -row 1 -column 3 -rowspan 1 -columnspan 1 -sticky w grid $w.control.simy -in $w.control -padx 1 -pady 3 -row 1 -column 4 -rowspan 1 -columnspan 1 -sticky w grid $w.control.simn -in $w.control -padx 10 -pady 3 -row 1 -column 5 -rowspan 1 -columnspan 1 -sticky w grid $w.control.slg -in $w.control -padx 1 -pady 3 -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky w grid $w.control.slgy -in $w.control -padx 1 -pady 3 -row 2 -column 1 -rowspan 1 -columnspan 1 -sticky w grid $w.control.slgn -in $w.control -padx 10 -pady 3 -row 2 -column 2 -rowspan 1 -columnspan 1 -sticky w grid $w.control.sln -in $w.control -padx 1 -pady 3 -row 2 -column 3 -rowspan 1 -columnspan 1 -sticky w grid $w.control.slny -in $w.control -padx 1 -pady 3 -row 2 -column 4 -rowspan 1 -columnspan 1 -sticky w grid $w.control.slnn -in $w.control -padx 10 -pady 3 -row 2 -column 5 -rowspan 1 -columnspan 1 -sticky w grid $w.control.chk -in $w.control -padx 1 -pady 3 -row 3 -column 0 -rowspan 1 -columnspan 1 -sticky w grid $w.control.chky -in $w.control -padx 1 -pady 3 -row 3 -column 1 -rowspan 1 -columnspan 1 -sticky w grid $w.control.chkn -in $w.control -padx 10 -pady 3 -row 3 -column 2 -rowspan 1 -columnspan 1 -sticky w grid $w.control.grnc -in $w.control -padx 1 -pady 3 -row 3 -column 3 -rowspan 1 -columnspan 1 -sticky w grid $w.control.grncy -in $w.control -padx 1 -pady 3 -row 3 -column 4 -rowspan 1 -columnspan 1 -sticky w grid $w.control.fntl -in $w.control -padx 10 -pady 3 -row 4 -column 0 -rowspan 1 -columnspan 1 -sticky w grid $w.control.fnts -in $w.control -padx 10 -pady 3 -row 4 -column 1 -rowspan 1 -columnspan 1 -sticky w grid $w.control.fntc -in $w.control -padx 10 -pady 3 -row 4 -column 2 -rowspan 1 -columnspan 1 -sticky w grid $w.control.pds -in $w.control -padx 1 -pady 3 -row 5 -column 0 -rowspan 1 -columnspan 1 -sticky w grid $w.control.pdsy -in $w.control -padx 1 -pady 3 -row 5 -column 1 -rowspan 1 -columnspan 1 -sticky w grid $w.control.pdsn -in $w.control -padx 10 -pady 3 -row 5 -column 2 -rowspan 1 -columnspan 1 -sticky w pack $w.control -side top -anchor w -padx 10 -pady 10 frame $w.btnstrc pack $w.btnstrc -side bottom -pady 10 button $w.btnstrc.cebon -text " OK " -background green1 -command "TermineChangePreferences $w" pack $w.btnstrc.cebon -side left MesCouleurs $w return } proc AncienNom {Nom} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/lacorrespondance"] { scan $Ligne "%s %s" new old if {$new==$Nom} { return $old } } } proc AncienNomsParmiLes555PCA {FichierCorrespondance} { foreach Ligne [LesLignesDuFichier $FichierCorrespondance] { set Old [lindex $Ligne 0] set PCA [lindex $Ligne 1] set Datas($PCA) $Old } set b 0 foreach Nom [ListeDesPABs] { if {[info exists Datas($Nom)]} { set OldNom $Datas($Nom) if {[regexp "PROS" $OldNom]} { incr b } } } return $b } proc AngleDansRosace {R X {Y ""} {CentreX ""} {CentreY ""}} { global ParametresDuBoard set PI 3.14159 if {[regexp -nocase {[a-z]} $X]} { set Nom $X set PosADN [Milieu $Nom] set Heure [expr $PosADN*2*$PI/[LongueurADN]] set Angle [expr -$PI/2 - $Heure]] set Angle [expr $Angle + [DecalageAngulaireRosace]] set Angle [Entre0Et2PI [expr -$PI/2 - $Heure]] return $Angle } if {$CentreX == ""} { set CentreX [set ParametresDuBoard($R,CentreX)] set CentreY [set ParametresDuBoard($R,CentreY)] } if {$R == "CoordonneesVraies"} { set xVrai $X set yVrai $Y } else { set xVrai [$R canvasx $X] set yVrai [$R canvasy $Y] } set x [expr $xVrai-$CentreX] set y [expr $yVrai-$CentreY] if {[expr abs($x) < 1] && [expr abs($y) < 1]} { return 0.0 } if {[expr abs($x) < 1] && [expr $y > 0]} { set Angle [expr $PI/2] } elseif {[expr abs($x) < 1] && [expr $y < 0]} { set Angle [expr 3*$PI/2] } else { set Angle [expr atan($y*1.0/$x)] if {$x<0} { set Angle [expr $Angle + $PI] } set Angle [expr $Angle + [DecalageAngulaireRosace]] set Angle [Entre0Et2PI $Angle] } return $Angle } proc AngleDeg {Angle {Unite r}} { #rR quand il n'y a pas de r on force le r if {[regexp -nocase "^r" $Unite]} { set Angle [expr ($Angle*180.)/[Pi]] } return $Angle } proc AngleEntre {V1 V2} { #lM 2014/05/21 # angle qui ramene V1 sur V2 set nV1 [V_nV $V1] set nV2 [V_nV $V2] if {[llength $nV2] == 2} { lassign $nV1 x1 y1 lassign $nV2 x2 y2 set sca [S_VV $nV1 * $nV2] set vct [expr {$x1*$y2-$x2*$y1}] set ang [expr {atan2($vct,$sca)}] if {$ang < 0.0} { set ang [expr {$ang + [2Pi]}] } return $ang } set cos [S_VV $nV1 * $nV2] set vec [Vectoriel $nV1 $nV2] set sin [S_nV $vec] set vec [V_nV $vec] set verif [V_nV [Vectoriel $nV1 $vec]] set sver [S_VV $verif * $nV2] puts " cos $cos" puts " sin $sin" puts " verif $verif" puts " sver $sver" set ang [expr {atan2($sin,$cos)}] puts " ang [AngleDeg $ang]" if {$ang < 0.} { set ang [expr {$ang + [2Pi]}] } return $ang } proc AngleLRAncetres {AId n} { global Abr set t [set Abr(Arbre,$AId)] if {[$t isleaf $n]} {return} if {$n eq "root"} {return} set x [$t get $n xcoord] set y [$t get $n ycoord] set p [$t parent $n] lassign [$t children $p] e1 e2 set xp [$t get $p xcoord] set yp [$t get $p ycoord] if {$x == $xp && $y == $yp} { if {$n eq $e1} {set p $e2} {set p $e1} } ::struct::tree tmpT tmpT deserialize [$t serialize] tmpT delete $n # ATTENTION ! Ordre inverse ! On regarde VERS la racine !! set Ln [tmpT nodes] if {[llength $Ln] > 2} { lassign [NoeudLRDe $AId $n $p $Ln 1] Nr Nl } else { lassign $Ln n1 n2 if {$n1 eq "root"} {set Ln $n2} {set Ln $n1} set Nr $Ln set Nl $Ln } set xaR [$t get $Nr xcoord] set yaR [$t get $Nr ycoord] set Ang [Coords2Angle [expr {$xaR-$x}] [expr {$yaR-$y}]] set AR $Ang set xaL [$t get $Nl xcoord] set yaL [$t get $Nl ycoord] set Ang [Coords2Angle [expr {$xaL-$x}] [expr {$yaL-$y}]] set AL $Ang puts "----- Ancetre Gauche/Droite ----------------" puts [format "AL %6.3f AR %6.3f" $AL $AR] puts "NdL $Nl NdR $Nr" tmpT destroy $t set $n AncesR $AR $t set $n AncesL $AL $t set $n NdAncesL $Nl $t set $n NdAncesR $Nr return } proc AngleMaxGaucheDroite {AId n} { global Abr set t [set Abr(Arbre,$AId)] if {[$t isleaf $n]} {return} # if {$n eq "root"} {exir} puts "--- Min Max Gauche/Droit ---------" puts [format "Nd n : %s | x=%7.2f y=%7.2f" $n [$t get $n xcoord] [$t get $n ycoord]] set NdL [$t get $n NdLeft] set NdR [$t get $n NdRight] set LNdL [concat $NdL [$t descendants $NdL]] set LNdR [concat $NdR [$t descendants $NdR]] set LMM [AnglesMinMaxDe $AId $n $LNdL] lassign $LMM Am Ax Sum set Am2 [expr {$Am>[Pi]?$Am-[2Pi]:$Am}] set Ax2 [expr {$Ax>[Pi]?$Ax-[2Pi]:$Ax}] set Sum2 [expr {$Sum>[Pi]?$Sum-[2Pi]:$Sum}] puts "Am2 $Am2 Ax2 $Ax2 Sum2 $Sum2" set LRLL [expr {abs($Sum2-$Am2)+abs($Ax2-$Sum2)}] if {$LRLL > [Pi]} {set obtu 1} {set obtu 0} if {abs($Ax-$Am) > [Pi] && ! $obtu} { if {$Am < $Ax} { $t set $n LeftL $Am $t set $n LeftR $Ax } else { $t set $n LeftL $Ax $t set $n LeftR $Am } } else { if {$Am > $Ax} { $t set $n LeftL $Am $t set $n LeftR $Ax } else { $t set $n LeftL $Ax $t set $n LeftR $Am } } set LMM [AnglesMinMaxDe $AId $n $LNdR] lassign $LMM Am Ax Sum set Am2 [expr {$Am>[Pi]?$Am-[2Pi]:$Am}] set Ax2 [expr {$Ax>[Pi]?$Ax-[2Pi]:$Ax}] set Sum2 [expr {$Sum>[Pi]?$Sum-[2Pi]:$Sum}] set RRRL [expr {abs($Sum2-$Am2)+abs($Ax2-$Sum2)}] if {$RRRL > [Pi]} {set obtu 1} {set obtu 0} if {abs($Ax-$Am) > [Pi] && ! $obtu} { if {$Am < $Ax} { $t set $n RightL $Am $t set $n RightR $Ax } else { $t set $n RightL $Ax $t set $n RightR $Am } } else { if {$Am > $Ax} { $t set $n RightL $Am $t set $n RightR $Ax } else { $t set $n RightL $Ax $t set $n RightR $Am } } $t set $n LRLL $LRLL $t set $n RRRL $RRRL puts [format "Nd L %s | LL %5.2f LR %5.2f LRLL %5.2f" [$t get $n NdLeft] [$t get $n LeftL] [$t get $n LeftR] [$t get $n LRLL]] puts [format "Nd R %s | RL %5.2f RR %5.2f RRRL %5.2f" [$t get $n NdRight] [$t get $n RightL] [$t get $n RightR] [$t get $n RRRL]] puts "" return } proc AngleRad {Angle {Unite d}} { #rR quand il n'y a pas de degres on force degre if {[regexp -nocase "^d" $Unite]} { set Angle [expr ($Angle*[Pi])/180.] } return $Angle } proc Angle_R {R} { return [lindex $R 0] } proc AnglesMinMaxDe {AId n Le} { global Abr set t [set Abr(Arbre,$AId)] set Am 999. set Ax -999. set x [$t get $n xcoord] set y [$t get $n ycoord] set p [$t parent $n] set xp [$t get $p xcoord] set yp [$t get $p ycoord] set AnP [Coords2Angle [expr {$x-$xp}] [expr {$y-$yp}]] foreach d $Le { set xd [$t get $d xcoord] set yd [$t get $d ycoord] set Ang [Coords2Angle [expr {$xd-$x}] [expr {$yd-$y}]] if {$Ang < $Am} {set Am $Ang} if {$Ang > $Ax} {set Ax $Ang} } return [list $Am $Ax $AnP] } proc AnimateurSVP {IpCafe} { global CafeDesSciencesDir global Cafe DecortiqueIpCafe "$IpCafe" Ip Cafe PotinsDeQuestion "AnimateurSVP IpCafe $Ip $Cafe" set SocketteAnimateur "" while {[catch {set SocketteAnimateur [socket $Ip $Cafe]} Message] && [regexp "address already in use" $Message]} { PotinsDeQuestion "attente Sockette $SocketteAnimateur du $Ip $Cafe already in use ..." set SocketteAnimateur "" after 1000 } if {$SocketteAnimateur!=""} { PotinsDeQuestion "SocketteAnimateur $SocketteAnimateur"; return $SocketteAnimateur #rR on avait un SocketteAnimateur en marche. ************************************** } #rR pas d'animateur, on en cree un. **************************************************** set Hostname [info hostname] regsub {\..*} $Hostname "" HostnameCourt set RemoteShell "rsh $Ip -n" if {$Ip==$HostnameCourt || $Ip=="localhost" || [regexp {^127\.0} $Ip]} { set RemoteShell "" } set BiolOuQuoi "[string range $CafeDesSciencesDir 0 4]..." PotinsDeQuestion "exec $RemoteShell $BiolOuQuoi/cafe_des_sciences.tcl $Ip:$Cafe" eval exec $RemoteShell $CafeDesSciencesDir/cafe_des_sciences.tcl "$Ip:$Cafe" & after 1000 set Encore 10 while { [catch {set SocketteAnimateur [socket $Ip $Cafe]} MessageCafeFerme] } { if { ! [incr Encore -1] } { PotinsDeQuestion "erreur: J'abandonne socket $Ip $Cafe" return "erreur: Abandon animateur socket $Ip $Cafe \nAfter execution of \nexec $RemoteShell $CafeDesSciencesDir/cafe_des_sciences.tcl $Ip:$Cafe \n I got the message : $MessageCafeFerme" } PotinsDeQuestion "$Encore attente socket $Ip $Cafe : $MessageCafeFerme" after 1000 } PotinsDeQuestion "SocketteAnimateur $SocketteAnimateur" return $SocketteAnimateur } proc AnneGraph {args} { set file [lindex $args 0] set Ll [LesLignesDuFichier $file] set fx 1. set step 25 set Diam 50 set OffX 20 set Lcol [list red brown orange green yellow dimgrey cyan pink magenta blue] toplevel .anne canvas .anne.c -width 1000 -height 1000 -background "#0000ff" pack .anne.c set w ".anne.c" set MaxX 0 set MaxY 0 set i 0 foreach l [lrange $Ll 1 end] { set j 0 foreach v [lrange [split $l "\t"] 1 end] { set col [lindex $Lcol $j] set r [expr $v * $Diam / 2] set ym [expr (10-$j)*$step - $r] set yx [expr (10-$j)*$step + $r] set xm [expr $i*$step - $r + $OffX] set xx [expr $i*$step + $r + $OffX] $w create oval $xm $ym $xx $yx -fill $col -outline black incr j if {$yx > $MaxY} {set MaxY $yx} if {$xx > $MaxX} {set MaxX $xx} } incr i } set MaxX [expr $MaxX + $OffX] $w configure -height $MaxY -width $MaxX return } proc Anne_CluspackGridChoixSecatorDPC {NomATraiter} { # cette proc de Anne utilise les procs de Luc (proc LanceurCluspack) # NB: LanceurCluspack peut passer a DPC si secator "plante" ou l'inverse. Ca arrive sur certains alignements. # !!! il est necessaire de lancer "setgscoperr NomDuProjet" puis "setordalilm" !!! # version cree mais momentanement non utilisee # en effet, problemes observes avec secator : # determine parfois des groupes contenant 1 seule sequence # a choisi en attendant de travailler avec DPC uniquement!! #global PipeCollection global PipeQuery set InInitLeon [file join [RepertoireDuGenome] leon $NomATraiter] set InLeon [file join [RepertoireDuGenome] cluspack ${NomATraiter}.msf] # placement du fichier d alignement dans le bon repertoire pour n avoir pas # a deplacer les fichiers ensuite File copy -force $InInitLeon $InLeon # fichier ".clu" cree quel que soit la methode de clusterisation utilisee set OutClu [file join [RepertoireDuGenome] cluspack ${NomATraiter}.clu] # les autres fichiers sont crees uniquement par secator set OutNJ [file join [RepertoireDuGenome] cluspack ${NomATraiter}.nj] set OutDst [file join [RepertoireDuGenome] cluspack ${NomATraiter}.dst] if {! [file exists $InLeon]} {return 0} set NbAccess 0 # determination du nombre de sequences dans l alignement set cmd "grep -c \"Name\" $InLeon" set NbAccess [eval exec $cmd] # quel que soit le programme de clusterisation le debut de la commande est la meme set commande "LanceurCluspack $InLeon alignment" if {$NbAccess > 100} { set Moi "dpc" puts $Moi set LAutre "secator" set arg "dpc kmeans 0.001" set FileClustering "${InLeon}.clu" } else { set Moi "secator" puts $Moi set LAutre "dpc" set arg "secator bionj" set FileClustering "${InLeon}.clu" } if {[catch {eval $commande $arg} Message]} { Espionne $Message Espionne "Problem with $InLeon with $Moi je vais utiliser $LAutre" if {$LAutre == "secator"} { catch {[$commande secator bionj]} } else { catch {[$commande dpc kmeans 0.001]} } } File delete -force $InLeon if {[file exists $OutNJ]} { File delete -force $OutNJ } if {[file exists $OutDst]} { File delete -force $OutDst } return 1 } proc AnnotRep {} { return "/genomics/link/EleGen/code" } proc AnnotType {{Qui ""} {Quoi ""}} { global AnnotType if {[info exists AnnotType($Qui,$Quoi)]} { return $AnnotType($Qui,$Quoi) } if {[info exists AnnotType("EstCharge")]} { set QUI [string range [string toupper $Qui] 0 3] if {[info exists AnnotType($QUI,$Quoi)]} { return $AnnotType($QUI,$Quoi) } return "" } set AnnotType("EstCharge") 1 set LesTypesCodes {} lappend LesTypesCodes "genes_intergenic 1 Intergene" lappend LesTypesCodes "enhancers_fantom 2 Enhancer" lappend LesTypesCodes "genes_1to5kb 3 1to5kb" lappend LesTypesCodes "genes_introns 4 Intron" lappend LesTypesCodes "genes_promoters 5 Promoter" lappend LesTypesCodes "genes_intronexonboundaries 6 Boundary" lappend LesTypesCodes "genes_3UTRs 7 3UTR" lappend LesTypesCodes "genes_5UTRs 8 5UTR" lappend LesTypesCodes "genes_firstexons 9 1stExon" lappend LesTypesCodes "genes_exons X Exon" foreach TC $LesTypesCodes { scan $TC "%s %s %s" Type T Code lappend AnnotType(ListOf,Type) $Type lappend AnnotType(ListOf,T) $T lappend AnnotType(ListOf,Code) $Code set AnnotType($Type,Type) $Type set AnnotType($Type,T) $T set AnnotType($Type,Code) $Code set AnnotType($T,Type) $Type set AnnotType($T,T) $T set AnnotType($T,Code) $Code set AnnotType($Code,Type) $Type set AnnotType($Code,T) $T set AnnotType($Code,Code) $Code set AnnotType([string range [string toupper $Code] 0 3],Type) $Type set AnnotType([string range [string toupper $Code] 0 3],T) $T set AnnotType([string range [string toupper $Code] 0 3],Code) $Code } set AnnotType(F,Type) Final set AnnotType(F,T) F set AnnotType(F,Code) Final return [AnnotType $Qui $Quoi] } proc AnnotVerif {Chr Q} { #set Final [ContenuDuFichier "[AnnotRep]/${Chr}_Final"] set Xdn$Q [ContenuDuFichier "[AnnotRep]/${Chr}_Xdn$Q"] set D 0 set F $D set Previous "." set LesBornes {} foreach X [split [set Xdn$Q] ""] { if {$X eq "."} { if {$Previous ne "."} { lappend LesBornes "$D $F" } incr D incr F } else { incr F } set Previous $X } return $LesBornes } proc AnnotXdn {{Chr ""}} { set Rep [AnnotRep] set FichierAnnot "$Rep/$Chr.annot" set FichierTypes "$Rep/AnnotTypes.txt" # "chr19" 481674 481793 120 "*" "enhancer:28085" NA NA NA "hg19_enhancers_fantom" # "chr19" 10654633 10655632 1000 "+" "promoter:66212" "uc010dxj.3" "84971" "ATG4D" "hg19_genes_promoters" set LesXdn {} set Min 999999999999 set Max -1 foreach Ligne [LesLignesDuFichier $FichierAnnot] { regsub -all {\"} $Ligne "" Ligne set LesMots [LesMotsDeLaLigne $Ligne] lassign $LesMots Ch Start Stop Length Brin Id Ucsc Gi Gn Type regsub {[a-z]+[0-9]+_} $Type "" Type lappend LesBornes($Type) "$Start $Stop" set InfoDe($Type,$Stop) $Ligne lappend LesGn $Gn set Min [Mini $Start $Min] set Max [Maxi $Stop $Max] } foreach Type [AnnotType ListOf Type] T [AnnotType ListOf T] { Espionne Espionne $Type if { ! [info exists LesBornes($Type)]} { Espionne "Bornes pour $Type non trouve"; continue } set I 0 set LesDF $LesBornes($Type) set LesDFTries [lsort -integer -index 0 $LesDF] Espionne "[llength $LesDFTries] element a traiter" set LesDFRetenus $LesDFTries set Superpose 1 set I 0 set J 1 set DF1 [lindex $LesDFTries $I] set DF2 [lindex $LesDFTries $J] set LesBons {} set LesInfos {} Espionne "$J $DF1 $DF2 avant boucle pour $Type" while 1 { if {$J%100==1} { Espionne "$J $DF1 $DF2" } lassign $DF1 D1 F1 lassign $DF2 D2 F2 if {$D1==$D2} { set F2 [Maxi $F1 $F2] set DF1 "$D1 $F2" incr J set DF2 [lindex $LesDFTries $J] if {$DF2==""} { # Espionne $DF1 lappend LesBons $DF1 lassign $DF1 D F lappend LesInfos "$DF1\t$InfoDe($Type,$F)" break } # Espionne "D1=D2" continue } if {$D2<=$F1} { set DF1 "$D1 [Maxi $F1 $F2]" incr J set DF2 [lindex $LesDFTries $J] if {$DF2==""} { # Espionne $DF1 lappend LesBons $DF1 lassign $DF1 D F lappend LesInfos "$DF1\t$InfoDe($Type,$F)" break } # Espionne "D2<=F1" continue } if {$F2<=$F1} { incr J set DF2 [lindex $LesDFTries $J] if {$DF2==""} { # Espionne $DF1 lappend LesBons $DF1 lassign $DF1 D F lappend LesInfos "$DF1\t$InfoDe($Type,$F)" break } # Espionne "F2<=F1" continue } if {$F1==$D2} { set DF1 "$D1 $F2" incr J set DF2 [lindex $LesDFTries $J] if {$DF2==""} { # Espionne $DF1 lappend LesBons $DF1 lassign $DF1 D F lappend LesInfos "$DF1\t$InfoDe($Type,$F)" break } # Espionne "F1=D2" continue } if {$F1<$D2} { # Espionne "$DF1" lappend LesBons "$DF1" lassign $DF1 D F lappend LesInfos "$DF1\t$InfoDe($Type,$F)" set DF1 $DF2 incr J set DF2 [lindex $LesDFTries $J] if {$DF2==""} { lappend LesBons "$DF1" lassign $DF1 D F lappend LesInfos "$DF1\t$InfoDe($Type,$F)" break } # Espionne "F1="X"} { if {$XX ne "."} { append Final $XX ; continue } } if {$Ultime>="9"} { if {$X9 ne "."} { append Final $X9 ; continue } } if {$Ultime>="8"} { if {$X8 ne "."} { append Final $X8 ; continue } } if {$Ultime>="7"} { if {$X7 ne "."} { append Final $X7 ; continue } } if {$Ultime>="6"} { if {$X6 ne "."} { append Final $X6 ; continue } } if {$Ultime>="5"} { if {$X5 ne "."} { append Final $X5 ; continue } } if {$Ultime>="4"} { if {$X4 ne "."} { append Final $X4 ; continue } } if {$Ultime>="3"} { if {$X3 ne "."} { append Final $X3 ; continue } } if {$Ultime>="2"} { if {$X2 ne "."} { append Final $X2 ; continue } } append Final $X1 } set FicFinal "[AnnotRep]/${Chr}_Final.$Ultime" set o [open $FicFinal "w"] puts $o $Final flush $o close $o return $FicFinal } proc AnnotationEC {Nom SequencesDuGroupe} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" if {! [file exists $Fichier]} { return "none" } set ListeDesECs {} ParseMACSIMS $Fichier macsims foreach Sequence $SequencesDuGroupe { set EC $macsims($Sequence,EC) if {$EC == "0.0.0.0"} {continue} regsub -all "EC " $EC "" EC regsub -all "EC_" $EC "" EC lappend ListeDesECs "$EC" lappend ListeDesECsAvecAccess [list $Sequence $EC] } set ECRetenu [ECDominant $ListeDesECs 0.7] if {$ECRetenu == ""} {set ECRetenu "none"} if {$ECRetenu != "none"} { set DefinitionEC [EnzymeCommission $ECRetenu] return [list $ECRetenu $DefinitionEC $ListeDesECsAvecAccess] } else { return "$ECRetenu" } } proc AnnotationGO {Nom AvecOuSansOrganismeEtudie} { FichierMsfPourGOAnno $Nom "$AvecOuSansOrganismeEtudie" RecreeLeFichierClust $Nom "$AvecOuSansOrganismeEtudie" LanceurGOAnno $Nom } proc AnnotationXml {FichierAnnotation {Quoi ""} args} { #FichierAnnotation "" "FichierMacsims.xml" ?"query"? #FichierAnnotation "GO" "FichierGeneOntology.xml" #FichierAnnotation "EC" "SortieDeProcedureEC" #FichierAnnotation "DE" "SortieDeProcedureMeilleureDef" #FichierAnnotation "PFAM" "SortieDeProcedurePFAM" # Lit xml existant ou crée document vide if {[file isfile $FichierAnnotation]} { set fh [open $FichierAnnotation "r"] dom parse -channel $fh doc close $fh $doc documentElement root } else { dom createDocument "annotation" doc $doc documentElement root #$root appendChild [$doc createElement "macsims"] #$root appendChild [$doc createElement "ec"] #$root appendChild [$doc createElement "gene_ontology"] #$root appendChild [$doc createElement "definition"] #$root appendChild [$doc createElement "pfam"] } # Création des noeuds principaux s'ils n'existent pas encore foreach n [list "macsims" "ec" "gene_ontology" "definition" "pfam"] { if {[llength [$root selectNodes "/annotation/$n"]] == 0} { $root appendChild [$doc createElement $n] } } if {$Quoi eq ""} { set FichierMacsims [lindex $args 0] set Query [lindex $args 1] if {$Query eq ""} {set Query [regexp -inline {^[^.]+} [file tail $FichierMacsims]]} if {[file isfile $FichierMacsims]} { # Tente de parser le fichier MACSIMS set retryCount 5 while {$retryCount && [catch { ParseMACSIMS $FichierMacsims macsims }]} { incr retryCount -1 } if {!$retryCount} {error "Probleme avec $FichierMacsims"} # Récupère le groupe de la query set groupeQuery $macsims(Groupe,$macsims($Query,Groupe)) # Récupère le noeud macsims set macsimsNode [$root selectNodes "/annotation/macsims"] # Supprime tous les noeud enfants foreach node [$macsimsNode childNodes] {$node delete} # ... et les attributs foreach attrib [$macsimsNode attributes] {$macsimsNode removeAttribute $attrib} # Crée les commandes de creation de noeuds dom createNodeCmd "elementNode" AnnotationXml::normd dom createNodeCmd "elementNode" AnnotationXml::cluster dom createNodeCmd "elementNode" AnnotationXml::query dom createNodeCmd "elementNode" AnnotationXml::access dom createNodeCmd "textNode" AnnotationXml::text $macsimsNode appendFromScript { AnnotationXml::normd {AnnotationXml::text $macsims(Alignement,Score)} AnnotationXml::cluster "size" [llength $groupeQuery] { AnnotationXml::query {AnnotationXml::text $Query} foreach nom $groupeQuery { if {$nom ne $Query} { AnnotationXml::access {AnnotationXml::text $nom} } } } } } } elseif {$Quoi eq "EC"} { set SortieDeProcedure [lindex $args 0] if {[llength $SortieDeProcedure] == 3} { set commun [lindex $SortieDeProcedure 0] set lClasses [lindex $SortieDeProcedure 1] set lECs [lindex $SortieDeProcedure 2] } else { set commun "" set lClasses "" set lECs "" } # Récupère le noeud ec set ecNode [$root selectNodes "/annotation/ec"] # Supprime tous les noeud enfants foreach node [$ecNode childNodes] {$node delete} # ... et les attributs foreach attrib [$ecNode attributes] {$ecNode removeAttribute $attrib} if {$commun ne "" && $lClasses ne "" && $lECs ne ""} { # Crée les commandes de creation de noeuds dom createNodeCmd "elementNode" AnnotationXml::common dom createNodeCmd "elementNode" AnnotationXml::classes dom createNodeCmd "elementNode" AnnotationXml::class dom createNodeCmd "elementNode" AnnotationXml::sources dom createNodeCmd "elementNode" AnnotationXml::source dom createNodeCmd "textNode" AnnotationXml::text $ecNode appendFromScript { AnnotationXml::common {AnnotationXml::text $commun} AnnotationXml::classes { foreach {classe def} $lClasses { AnnotationXml::class "number" $classe {AnnotationXml::text $def} } } AnnotationXml::sources { foreach liste $lECs { foreach {access ec} $liste {} AnnotationXml::source "ec" $ec { AnnotationXml::text $access } } } } } } elseif {$Quoi eq "GO"} { set FichierGeneOntology [lindex $args 0] if {[file isfile $FichierGeneOntology]} { # Parse le fichier GOAnno ParseGOAnno $FichierGeneOntology goanno # Récupère toute la hiérarchie go des parents set ascendants {} foreach go [concat $goanno(GPO,BiologicalProcess,GOs) $goanno(GPO,CellularComponent,GOs) $goanno(GPO,MolecularFunction,GOs)] { set ascendants [concat $ascendants [TousLesAscendantsGO $go]] } set ascendants [lsort -dictionary -index 2 [lsort -unique $ascendants]] # Récupère le noeud gene ontology set goNode [$root selectNodes "/annotation/gene_ontology"] # Supprime tous les noeud enfants foreach node [$goNode childNodes] {$node delete} # ... et les attributs foreach attrib [$goNode attributes] {$goNode removeAttribute $attrib} # Crée les commandes de creation de noeuds dom createNodeCmd "elementNode" AnnotationXml::gpo dom createNodeCmd "elementNode" AnnotationXml::hierarchy dom createNodeCmd "elementNode" AnnotationXml::go dom createNodeCmd "textNode" AnnotationXml::text $goNode appendFromScript { AnnotationXml::gpo { foreach {type xmlType ontoType} [list "BiologicalProcess" "biological_process" "process" "CellularComponent" "cellular_component" "component" "MolecularFunction" "molecular_function" "function"] { foreach go $goanno(GPO,$type,GOs) { set niv [lsort -unique [Onto $ontoType $go "LesNiveaux"]] set parents [Onto $ontoType $go "LesParents"] AnnotationXml::go "id" $go "type" $xmlType "levels" $niv "parents" $parents { AnnotationXml::text $goanno(GPO,$type,$go,Definition) } } } } AnnotationXml::hierarchy { foreach goList $ascendants { foreach {go type niv def parents} $goList {} if {$type == "process"} { set type "biological_process" } elseif {$type == "component"} { set type "cellular_component" } elseif {$type == "function"} { set type "molecular_function" } AnnotationXml::go "id" $go "type" $type "levels" $niv "parents" $parents { AnnotationXml::text $def } } } } } } elseif {$Quoi eq "DE"} { set SortieDeProcedure [lindex $args 0] set score [lindex $SortieDeProcedure 0] set def [lindex $SortieDeProcedure 1] # Récupère le noeud gene ontology set deNode [$root selectNodes "/annotation/definition"] # Supprime tous les noeud enfants foreach node [$deNode childNodes] {$node delete} # ... et les attributs foreach attrib [$deNode attributes] {$deNode removeAttribute $attrib} if {$score ne "" && $def ne ""} { # Crée les commandes de creation de noeuds dom createNodeCmd "textNode" AnnotationXml::text $deNode setAttribute "score" $score $deNode appendFromScript { AnnotationXml::text $def } } } elseif {$Quoi eq "PFAM"} { set SortieDeProcedure [lindex $args 0] # Récupère le noeud pfam set pfNode [$root selectNodes "/annotation/pfam"] # Supprime tous les noeud enfants foreach node [$pfNode childNodes] {$node delete} # ... et les attributs foreach attrib [$pfNode attributes] {$pfNode removeAttribute $attrib} if {[llength $SortieDeProcedure] != 0} { # Crée les commandes de creation de noeuds dom createNodeCmd "elementNode" AnnotationXml::pfam_a dom createNodeCmd "textNode" AnnotationXml::text $pfNode appendFromScript { foreach lPf $SortieDeProcedure { foreach {access type accessPf dePf from longueurSeq} $lPf {} AnnotationXml::pfam_a "access" $accessPf "from" $from "length" $longueurSeq { AnnotationXml::text $dePf } } } } } # Sauve le fichier set fh [open $FichierAnnotation "w"] puts $fh "" $doc asXML -channel $fh -doctypeDeclaration 0 close $fh $doc delete } proc AnnotationXmlPourPAB {pab} { set RepertoireAnnotation "[RepertoireDuGenome]/annotation" if {![file isdirectory $RepertoireAnnotation]} {file mkdir $RepertoireAnnotation} set FichierAnnotation "$RepertoireAnnotation/$pab.xml" set FichierMacsims "[RepertoireDuGenome]/macsims/$pab.xml" if {[file isfile $FichierMacsims]} { # Extrait groupe macsims de la query ParseMACSIMS $FichierMacsims macsims set groupeQuery $macsims(Groupe,$macsims($pab,Groupe)) set posQuery [lsearch -exact $groupeQuery $pab] set groupeQuery [lreplace $groupeQuery $posQuery $posQuery] # Annotation MACSIMS AnnotationXml $FichierAnnotation "" $FichierMacsims # Annotation EC AnnotationXml $FichierAnnotation "EC" [AnnotationEC $pab $groupeQuery] # Annotation GOAnno set FichierGOAnno "[RepertoireDuGenome]/GeneOntology/$pab.xml" AnnotationXml $FichierAnnotation "GO" $FichierGOAnno # Annotation meilleure definition Vero AnnotationXml $FichierAnnotation "DE" [MeilleuresDefinitions2_0 $groupeQuery] } } proc AnnotationcDNAParBlastX {{BlastX2Protein yes} {Overwrite yes} {ForbiddenWord ""} {Liste ""}} { # remplissage des fiches infos a partir du BlastX # creation recapitulatif defdublastx.out dans fiches # en tenant compte de BlastX2Protein.out si arg1 yes if {$Liste == ""} { set Liste [ListeDesPABs] } if {$BlastX2Protein=="yes"} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/BlastX2Protein.out"] { scan $Ligne "%s %s %s" ORF toto Homolog if {$Homolog=="no"} { set Homo($ORF) 0 } else { set Homo($ORF) 1 } } } foreach ORF $Liste { Espionne $ORF if {$Overwrite=="no" && [file exists "[RepertoireDuGenome]/infos/$ORF"]} { continue } else { set Sortie [BestDefinitionOfBlastX $ORF 0.001 $ForbiddenWord] if {$Sortie=="" || ![set Homo($ORF)]} { InformeSansDemander $ORF "=DE_BlastX: unknown" InformeSansDemander $ORF "=OS_BlastX: unknown" InformeSansDemander $ORF "=OC_BlastX: unknown" continue } if { ! [regexp {(.*)\(from} $Sortie Match Def]} { set Def "unknown" } set FinSortie [StringSuivant "(from " dans $Sortie] regsub -all {\)[^\)]*$} $FinSortie "" FinSortie scan $FinSortie "%s %s" Genre Espece regsub {\.} $Espece "" Espece set Espece [string tolower $Espece] set Access [lindex [split $FinSortie " "] end-1] InformeSansDemander $ORF "=DE_BlastX: $Def" InformeSansDemander $ORF "=OS_BlastX: $Genre $Espece $Access" if {$Espece=="sp"} { InformeSansDemander $ORF "=OC_BlastX: [OCduOS "$Genre"]" } else { InformeSansDemander $ORF "=OC_BlastX: [OCduOS "$Genre $Espece"]" } } } FicheDefDuBlastX } proc AnnoteBali {{fIn ""}} { global VariablesAuDepart LesDefauts LesDefauts TypeAli XML LesDefauts Mode "Batch" DefinitionPreferences InitialiseCouleurs set VariablesAuDepart [info globals] if {$fIn eq ""} { set BDir /home/moumou/Balibase3/bb3_release set Ldir [lsort [glob -types d [file join $BDir RV*]]] } else { set Ldir "." } foreach d $Ldir { puts "\n====================" puts "= [file tail $d]" puts "====================\n" if {$fIn eq ""} { set Lf [glob [file join $d *.xml]] } else { set Lf $fIn } foreach f $Lf { if {[regexp {^BBS} [file tail $f]]} { continue } puts "\n => [file tail $f]" set fout "[string range $f 0 end-4]_luc.xml" set ford "[string range $f 0 end-4].ord" if {[file exists $fout]} { if {[file exists $ford]} { continue } file delete -force $fout } set FichierXML $f LesDefauts FichierXML $FichierXML puts "\n => [file tail $f]" set fout "[string range $f 0 end-4]_luc.xml" puts "outfile : $fout" LoadingAlignement InitInfoSeqs MetAJourGroupes update set YaSt 0 ; set YaBl 0 set ft ActiveSite foreach p $::ListePDB { set nom [DonneIdDeAccessPDB $p] set chn [DonneChainDeAccessPDB $p] set Lsite [$nom GiveVar Site] if {$Lsite == {} } { continue } unset -nocomplain St array set St $Lsite set Lft [list] set Lres [$nom _resnumber -chain $chn -polymer] foreach s [array names St] { foreach {r c nm} [set St($s)] { if {$c ne $chn} { continue } if {$r ni $Lres} { continue } set x [DonnePosSG $p $r] if {$x == -1 || $x == ""} { continue } lappend Lft [list "fstart" $x "fstop" $x "fcolor" magenta "fscore" 0.0 "fnote" $s "fcsys" local] } } if {$Lft != {} } { set YaSt 1 set ::TabSF(${p},$ft) $Lft } } # rajoute BLOCK comme feature # Trash ... set Ll [LesLignesDuFichier $f] set i [lsearch -regexp $Ll {colsco-data}] incr i set l [lindex $Ll $i] if {[set ib [string first "<" $l]] != -1} { set l [string range $l 0 $ib-1] } set l [string map [list "\n" ""] $l] regsub -all { +} $l " " l set Lv [split [string trim $l] " "] set ft "BLOCK" set i 0 ; set dg -1 ; set nbb 1 set Lft [list] foreach v $Lv { if {$v} { if {$dg == -1} { set dg $i } set fg $i } else { if {$dg != -1} { lappend Lft [list "fstart" $dg "fstop" $fg "fcolor" orange "fscore" 0.0 "fnote" Block_$nbb "fcsys" local] incr nbb set dg -1 } } incr i } if {$dg != -1} { lappend Lft [list "fstart" $dg "fstop" [expr {$i-1}] "fcolor" orange "fscore" 0.0 "fnote" Block_$nbb "fcsys" local] } if {$Lft != {} } { set YaBl 1 foreach n $::LNOrdali { if {$n eq ""} {continue} set ::TabSF(${n},$ft) $Lft } } if {$YaSt || $YaBl} { if {$YaSt} { puts " --> Site" } if {$YaBl} { puts " --> Blocks" } CreeLeMacsim $fout } if {$::ListePDB != {} } { CreeObjBali $f } VueEditee 1 SauveLAlignement ORD JLeSauveAs FermeFichier } } exit } proc AnnoteLeXMLDesARPs {{FichierXML ""} {FichierXMLOut ""}} { package require tdom Wup "Permet de modifier un fichier XML au format macsim pour y ajouter des informations" Wup "Ajout des positions des residus discriminants (1 couleur par groupe de residu)" Wup "Ajout des domaines (Family Insertion) avec 1 couleur par domaine." Wup "PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF POUR LA FAMILLE ARP2" Wup "ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES" if {$FichierXMLOut == ""} {return ""} set Famille "" set LesAccessAVirer "" #1 Recuperation de la famille d ARP (primordial) ################################################ set Famille [file tail $FichierXML] set Famille_tmp "" regsub -nocase ".xml" $Famille "" Famille regexp -nocase {_([a-z]{2,4}[0-9]{1,2}|actin|orphans)$} $Famille tmp Famille_tmp if {$Famille_tmp != ""} {set Famille $Famille_tmp} set AccessDeRef "P02568" set AccessDeRef_OLD "" #2 Preparation Parsing XML avec TDOM # Recuperation du noeud initial du XML set MacsimXml [ContenuDuFichier $FichierXML] set IdXML [dom parse $MacsimXml] set NoeudMacsim [$IdXML documentElement] set RId [$NoeudMacsim selectNodes "alignment"] if {$RId == ""} {return ""} if {$Famille == "ARP2"} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef_OLD $AccessDeRef set AccessDeRef "ARP05" } #3 Traitement de la reference #3-1 Recuperation du noeud initial de la Sequence de reference #P02568 set qRef "//*\[string(seq-name)='$AccessDeRef'\]/*\[name(.)='seq-data'\]" set nRef [$RId selectNodes "$qRef"] set sRef [$nRef selectNodes string(.)] #3-2 Calcul des positions absolue par rapport a l alignement ############################################################ PositionAutreDe Absolue 1 $sRef #3-2-1 Pour les RESIDUS discriminants set LesGroupesDeResidus [InterrogeLesResidusDesARPs $Famille LesGroupes] foreach Groupe $LesGroupesDeResidus { set LesPositionsDesRes [InterrogeLesResidusDesARPs $Famille Groupe $Groupe Access $AccessDeRef LesPositions] #Espionne "Pos: $LesPositionsDesRes" foreach Pos $LesPositionsDesRes { #on veut la position absolue set PosAbs [PositionAutreDe Relative $Pos $sRef] set TabPosAbsDeRel(Absolue,$Groupe,$Pos) $PosAbs #Espionne "$Pos -- $PosAbs" } } if {$AccessDeRef_OLD != ""} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef $AccessDeRef_OLD #3 Traitement de la reference #3-1 Recuperation du noeud initial de la Sequence de reference #P02568 set qRef "" set nRef "" set sRef "" set qRef "//*\[string(seq-name)='$AccessDeRef'\]/*\[name(.)='seq-data'\]" set nRef [$RId selectNodes "$qRef"] set sRef [$nRef selectNodes string(.)] PositionAutreDe Absolue 1 $sRef } #3-2-2 Pour les DOMAINS discriminants set LesPositionsDesDomaines [InterrogeLesDomainesDesARPs $Famille $AccessDeRef IN LesPositions] #1 On ne possede que la borne gauche de l insertion on ajoute donc + 1 pour avoir la fin # PosD PosD+1 # | | # TMYPGIADRMQKEITALA...........PSTMKIKIIAPPERKYS # TMYPGLPSRLERELKQLYLERVLKGDVEKLSKFKIRIEDPPRRKHM # | | # InD InF set MaxLengthIN "8" set LesDFPositionsDesDomaines "" foreach Position $LesPositionsDesDomaines { #On test si le domaine est specifique (conserve) pour toutes les proteines de la famille set SpeOuPas [InterrogeLesDomainesDesARPs $Famille $AccessDeRef $Position Remarque] if {$SpeOuPas == "" || [regexp -nocase "not specific" $SpeOuPas]} {continue} set Taille [InterrogeLesDomainesDesARPs $Famille $AccessDeRef $Position Taille] if {$Taille == "" || $Taille < $MaxLengthIN} {continue} lappend LesDFPositionsDesDomaines $Position lappend LesDFPositionsDesDomaines [expr {$Position + 1}] } foreach {PosD PosF} $LesDFPositionsDesDomaines { #on veut la position absolue #set AccessDeRef "P02568" #Attention probleme quand on a une insertion en N-terminal (on prend comme valeur absolue 1) #Attention on triche if {$PosD == "1" && $AccessDeRef == "P02568"} { set PosDAbs "1" set PosFAbs [PositionAutreDe Relative [expr {$PosF -1}] $sRef] } else { set PosDAbs [PositionAutreDe Relative $PosD $sRef] set PosFAbs [PositionAutreDe Relative $PosF $sRef] } set TabPosAbsDeRel(Absolue,Domain,$PosD) $PosDAbs set TabPosAbsDeRel(Absolue,Domain,$PosF) $PosFAbs #Espionne "$Pos -- $PosAbs" } #4 Recuperation de l ensemble des Noms de sequence et des sequences elle memes # On va ensuite parcourir en parallel les 2 listes set qAcc "//seq-name" set nAcc [$RId selectNodes "$qAcc"] foreach Node $nAcc { set Acc [$Node selectNodes string(.)] lappend LesAcc $Acc } set qAcc "//seq-data" set nAcc [$RId selectNodes "$qAcc"] foreach Node $nAcc { set sAcc [$Node selectNodes string(.)] lappend LesSeqAcc $sAcc } #4 Boucle sur les 2 listes en parallele ####################################### foreach Acc $LesAcc Seq $LesSeqAcc { # #R #11 #5 #0.00 #R # set LesFItems "" #Le noeud de la sequence pour ajouter a l arbre set qRef "//*\[string(seq-name)='$Acc'\]/descendant::*\[name()='seq-info'\]" set nRef [$RId selectNodes "$qRef"] set VNodeRef [$nRef selectNodes "name(.)"] #Stockage des Access des ARPs a ne pas retenir (ex: ARP02) if {[regexp -nocase {^arp[0-9]{1,2}} $Acc]} { lappend LesAccessAVirer $Acc } #5 Traitement des donnees sur les residus ######################################### set LesFItems "" set i 0 lappend LesFItems "" if {$Famille == "ARP2"} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef_OLD $AccessDeRef set AccessDeRef "ARP05" } foreach Groupe $LesGroupesDeResidus { set LesPositionsDesRes [InterrogeLesResidusDesARPs $Famille Groupe $Groupe Access $AccessDeRef LesPositions] #Espionne "Pos: $LesPositionsDesRes" incr i #On remet les couleurs a 0 if {$i>15} {set i 1} set Color $i foreach Pos $LesPositionsDesRes { if {$Pos == ""} {Espionne "Pos vide"} if {$Color == ""} {Espionne "Color vide"} if {$Famille == ""} {Espionne "Famille vide"} #Recuperation de la valeur du Residu set Residu [InterrogeLesResidusDesARPs $Famille $AccessDeRef $Pos Res] #Recuperation des positions absolues set PosAbs [set TabPosAbsDeRel(Absolue,$Groupe,$Pos)] set PosRel [PositionAutreDe Absolue $PosAbs $Seq] set PosOk "$PosAbs" #Espionne "$Acc -- $PosAbs - $PosRel -- $Residu" set Item "" append Item "" append Item "Specific" append Item "$PosOk" append Item "$PosOk" append Item "$Color" append Item "" #append Item "\"Residue $Residu\"" append Item "AbsolutePosition Residue $Residu in $PosRel" append Item "" lappend LesFItems "$Item" } } #6 Traitement des donnees sur les domaines ########################################## if {$AccessDeRef_OLD != ""} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef $AccessDeRef_OLD } set i 0 foreach {PosD PosF} $LesDFPositionsDesDomaines { incr i #On remet les couleurs a 0 if {$i>15} {set i 1} set Color $i if {$PosD == "" || $PosF == ""} {Espionne "Pos vide"} if {$Color == ""} {Espionne "Color vide"} if {$Famille == ""} {Espionne "Famille vide"} #Recuperation des positions absolues pour les relatives set PosAbsD [set TabPosAbsDeRel(Absolue,Domain,$PosD)] set PosRelD [PositionAutreDe Absolue $PosAbsD $Seq] #Pour les problemes de insertions en N-terminal if {$PosRelD== "0"} {set PosRelD "1"} set PosDOk "$PosAbsD" set PosAbsF [set TabPosAbsDeRel(Absolue,Domain,$PosF)] set PosRelF [PositionAutreDe Absolue $PosAbsF $Seq] set PosFOk "$PosAbsF" #Espionne "$Acc -- $PosAbsD + $PosRelD | $PosAbsF + $PosRelF" set Item "" append Item "" append Item "Specific" append Item "$PosDOk" append Item "$PosFOk" append Item "$Color" append Item "" append Item "AbsolutePosition Domain $PosRelD-$PosRelF" append Item "" lappend LesFItems "$Item" } lappend LesFItems "" $nRef appendXML [join $LesFItems "\n"] } #7 On se debarasse des sequences qui sont genantes #7-1 Les access P02568_* set AccessDeRef "P02568" set qRef "/macsim/alignment/sequence\[contains(.,'${AccessDeRef}_')\]" set nRef [$RId selectNodes "$qRef"] foreach Node $nRef { set sRef [$Node delete] } #7-2 Les access genants des ARP (ex: ARP02) foreach Acc $LesAccessAVirer { set qRef "/macsim/alignment/sequence\[contains(.,'${Acc}')\]" set nRef [$RId selectNodes "$qRef"] foreach Node $nRef { set sRef [$Node delete] } } #8 Sauvegarde du fichier XML ############################ if {[file exists $FichierXMLOut]} { file delete -force $FichierXMLOut } #Attention le fichier XML doit contenir pour etre utilise (clustalw) les 2 entetes suivants # # #Le dernier est obtenue par l option doctypeDeclaration de asXML set EnteteXML "" set f [open $FichierXMLOut w] puts $f $EnteteXML puts $f [$IdXML asXML -doctypeDeclaration 1 -indent 2] close $f return "$FichierXMLOut" } proc AnnoteLeXMLDesARPs_article {{FichierXML ""} {FichierXMLOut ""}} { package require tdom Wup "Pour faire le fichier html de l alignement pour l article" Wup "Permet de modifier un fichier XML au format macsim pour y ajouter des informations" Wup "Ajout des positions des residus discriminants (1 couleur par groupe de residu)" Wup "Ajout des domaines (Family Insertion) avec 1 couleur par domaine." Wup "PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF POUR LA FAMILLE ARP2" Wup "ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES" if {$FichierXMLOut == ""} {return ""} set Famille "" set LesAccessAVirer "" #1 Preparation Parsing XML avec TDOM # Recuperation du noeud initial du XML set MacsimXml [ContenuDuFichier $FichierXML] set IdXML [dom parse $MacsimXml] set NoeudMacsim [$IdXML documentElement] set RId [$NoeudMacsim selectNodes "alignment"] if {$RId == ""} {return ""} #2 Recuperation de l ensemble des Noms de sequence et des sequences elle memes # On va ensuite parcourir en parallel les 2 listes set qAcc "//seq-name" set nAcc [$RId selectNodes "$qAcc"] foreach Node $nAcc { set Acc [$Node selectNodes string(.)] lappend LesAcc $Acc } set qAcc "//seq-data" set nAcc [$RId selectNodes "$qAcc"] foreach Node $nAcc { set sAcc [$Node selectNodes string(.)] lappend LesSeqAcc $sAcc } #3 Boucle sur les 2 listes en parallele ####################################### foreach Acc $LesAcc Seq $LesSeqAcc { set LesDFPositionsDesDomaines "" #3-1 Recuperation de la famille d ARP (primordial) ################################################## if {[regexp -nocase {separator} $Acc]} { #Espionne "$Acc" lappend LesAccessAVirer $Acc } if {[regexp -nocase {reference\-\-\-\-_} $Acc]} { #Espionne "$Acc" lappend LesAccessAVirer $Acc } if {[regexp -nocase {1yag_a_2} $Acc]} { #Espionne "$Acc" lappend LesAccessAVirer $Acc } if {[regexp -nocase {\-\-\-\-Nt_Kato2001\-\-\-\-} $Acc]} { #Espionne "$Acc" lappend LesAccessAVirer $Acc } if {[regexp -nocase {\-\-\-\-Dimerization\-\-\-\-} $Acc]} { #Espionne "$Acc" lappend LesAccessAVirer $Acc } if {[regexp -nocase {\-\-\-\-NES\-\-\-\-} $Acc]} { #Espionne "$Acc" lappend LesAccessAVirer $Acc } if {[regexp {\-\-\-\-} $Acc]} {continue} set Categorie [InterrogeLesInfosDesARPs [string toupper $Acc] Categorie] if { $Categorie == ""} { set Categorie "Unknown" continue } else { regsub -all {\-\-\-\-} $Categorie "" Categorie regsub "Les" $Categorie "" Categorie } set Famille $Categorie #Espionne ">> $Acc -- $Famille" if {! [info exists TabPosAbsDeRel($Famille)]} { #Espionne "On fait la famille $Famille" #4 Recuperation des positions absolues des differents features (domaines et residus) #################################################################################### set AccessDeRef "P02568" set AccessDeRef_OLD "" if {$Famille == "ARP2"} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef_OLD $AccessDeRef set AccessDeRef "ARP05" } #4 Traitement de la reference #4-1 Recuperation du noeud initial de la Sequence de reference #P02568 set qRef "//*\[string(seq-name)='$AccessDeRef'\]/*\[name(.)='seq-data'\]" set nRef [$RId selectNodes "$qRef"] set sRef [$nRef selectNodes string(.)] #4-2 Calcul des positions absolue par rapport a l alignement ############################################################ PositionAutreDe Absolue 1 $sRef #4-2-1 Pour les RESIDUS discriminants set LesGroupesDeResidus [InterrogeLesResidusDesARPs $Famille LesGroupes] foreach Groupe $LesGroupesDeResidus { set LesPositionsDesRes [InterrogeLesResidusDesARPs $Famille Groupe $Groupe Access $AccessDeRef LesPositions] #Espionne "Pos: $LesPositionsDesRes" foreach Pos $LesPositionsDesRes { #on veut la position absolue set PosAbs [PositionAutreDe Relative $Pos $sRef] set TabPosAbsDeRel($Famille,Absolue,$Groupe,$Pos) $PosAbs #Espionne "$Pos -- $PosAbs" } } set TabPosAbsDeRel($Famille,LesGroupesDeResidus) $LesGroupesDeResidus if {$AccessDeRef_OLD != ""} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef $AccessDeRef_OLD #3 Traitement de la reference #3-1 Recuperation du noeud initial de la Sequence de reference #P02568 set qRef "" set nRef "" set sRef "" set qRef "//*\[string(seq-name)='$AccessDeRef'\]/*\[name(.)='seq-data'\]" set nRef [$RId selectNodes "$qRef"] set sRef [$nRef selectNodes string(.)] PositionAutreDe Absolue 1 $sRef } #4-2-2 Pour les DOMAINS discriminants set LesPositionsDesDomaines [InterrogeLesDomainesDesARPs $Famille $AccessDeRef IN LesPositions] #1 On ne possede que la borne gauche de l insertion on ajoute donc + 1 pour avoir la fin # PosD PosD+1 # | | # TMYPGIADRMQKEITALA...........PSTMKIKIIAPPERKYS # TMYPGLPSRLERELKQLYLERVLKGDVEKLSKFKIRIEDPPRRKHM # | | # InD InF set MaxLengthIN "8" set LesDFPositionsDesDomaines "" foreach Position $LesPositionsDesDomaines { #On test si le domaine est specifique (conserve) pour toutes les proteines de la famille set SpeOuPas [InterrogeLesDomainesDesARPs $Famille $AccessDeRef $Position Remarque] if {$SpeOuPas == "" || [regexp -nocase "not specific" $SpeOuPas]} {continue} set Taille [InterrogeLesDomainesDesARPs $Famille $AccessDeRef $Position Taille] if {$Taille == "" || $Taille < $MaxLengthIN} {continue} lappend LesDFPositionsDesDomaines $Position lappend LesDFPositionsDesDomaines [expr {$Position + 1}] } set TabPosAbsDeRel($Famille,LesDFPositionsDesDomaines) $LesDFPositionsDesDomaines foreach {PosD PosF} $LesDFPositionsDesDomaines { #on veut la position absolue #set AccessDeRef "P02568" #Attention probleme quand on a une insertion en N-terminal (on prend comme valeur absolue 1) #Attention on triche if {$PosD == "1" && $AccessDeRef == "P02568"} { set PosDAbs "1" set PosFAbs [PositionAutreDe Relative [expr {$PosF -1}] $sRef] } else { set PosDAbs [PositionAutreDe Relative $PosD $sRef] set PosFAbs [PositionAutreDe Relative $PosF $sRef] } set TabPosAbsDeRel($Famille,Absolue,Domain,$PosD) $PosDAbs set TabPosAbsDeRel($Famille,Absolue,Domain,$PosF) $PosFAbs #Espionne "$Pos -- $PosAbs" } #Ok la famille est faite set TabPosAbsDeRel($Famille) "1" } else { #On recupere les groupes de residus et les Debut/Fin des domaines a checker set LesGroupesDeResidus [set TabPosAbsDeRel($Famille,LesGroupesDeResidus)] set LesDFPositionsDesDomaines [set TabPosAbsDeRel($Famille,LesDFPositionsDesDomaines)] } # #R #11 #5 #0.00 #R # set LesFItems "" #Le noeud de la sequence pour ajouter a l arbre set qRef "//*\[string(seq-name)='$Acc'\]/descendant::*\[name()='seq-info'\]" set nRef [$RId selectNodes "$qRef"] set VNodeRef [$nRef selectNodes "name(.)"] #Stockage des Access des ARPs a ne pas retenir (ex: ARP02) if {[regexp -nocase {^arp[0-9]{1,2}} $Acc]} { lappend LesAccessAVirer $Acc } #5 Traitement des donnees sur les residus ######################################### set LesFItems "" set i 0 lappend LesFItems "" if {$Famille == "ARP2"} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef_OLD $AccessDeRef set AccessDeRef "ARP05" } foreach Groupe $LesGroupesDeResidus { set LesPositionsDesRes [InterrogeLesResidusDesARPs $Famille Groupe $Groupe Access $AccessDeRef LesPositions] #Espionne "Pos: $LesPositionsDesRes" incr i #On remet les couleurs a 0 if {$i>15} {set i 1} set Color $i foreach Pos $LesPositionsDesRes { if {$Pos == ""} {Espionne "Pos vide"} if {$Color == ""} {Espionne "Color vide"} if {$Famille == ""} {Espionne "Famille vide"} #Recuperation de la valeur du Residu set Residu [InterrogeLesResidusDesARPs $Famille $AccessDeRef $Pos Res] #Recuperation des positions absolues set PosAbs [set TabPosAbsDeRel($Famille,Absolue,$Groupe,$Pos)] set PosRel [PositionAutreDe Absolue $PosAbs $Seq] set PosOk "$PosAbs" #Espionne "$Acc -- $PosAbs - $PosRel -- $Residu" set Item "" append Item "" append Item "Specific" append Item "$PosOk" append Item "$PosOk" append Item "$Color" append Item "" #append Item "\"Residue $Residu\"" append Item "AbsolutePosition Residue $Residu in $PosRel" append Item "" lappend LesFItems "$Item" } } #6 Traitement des donnees sur les domaines ########################################## if {$AccessDeRef_OLD != ""} { #PROBLEME DE POSITIONS PAR RAPPORT A L ACTINE DE REF #ATTENTION ON REVIENT A LA NORMALE PAR APRES CAR C PAS BON POUR LES DOMAINES set AccessDeRef $AccessDeRef_OLD } set i 0 foreach {PosD PosF} $LesDFPositionsDesDomaines { incr i #On remet les couleurs a 0 if {$i>15} {set i 1} set Color $i if {$PosD == "" || $PosF == ""} {Espionne "Pos vide"} if {$Color == ""} {Espionne "Color vide"} if {$Famille == ""} {Espionne "Famille vide"} #Recuperation des positions absolues pour les relatives set PosAbsD [set TabPosAbsDeRel($Famille,Absolue,Domain,$PosD)] set PosRelD [PositionAutreDe Absolue $PosAbsD $Seq] #Pour les problemes de insertions en N-terminal if {$PosRelD== "0"} {set PosRelD "1"} set PosDOk "$PosAbsD" set PosAbsF [set TabPosAbsDeRel($Famille,Absolue,Domain,$PosF)] set PosRelF [PositionAutreDe Absolue $PosAbsF $Seq] set PosFOk "$PosAbsF" #Espionne "$Acc -- $PosAbsD + $PosRelD | $PosAbsF + $PosRelF" set Item "" append Item "" append Item "Specific" append Item "$PosDOk" append Item "$PosFOk" append Item "$Color" append Item "" append Item "AbsolutePosition Domain $PosRelD-$PosRelF" append Item "" lappend LesFItems "$Item" } lappend LesFItems "" $nRef appendXML [join $LesFItems "\n"] } #7 On se debarasse des sequences qui sont genantes #7-1 Les access P02568_* set AccessDeRef "P02568" set qRef "/macsim/alignment/sequence\[contains(.,'${AccessDeRef}_')\]" set nRef [$RId selectNodes "$qRef"] foreach Node $nRef { set sRef [$Node delete] } #7-2 Les access genants des ARP (ex: ARP02) foreach Acc $LesAccessAVirer { set qRef "/macsim/alignment/sequence\[contains(.,'${Acc}')\]" set nRef [$RId selectNodes "$qRef"] foreach Node $nRef { set sRef [$Node delete] } } #8 Sauvegarde du fichier XML ############################ if {[file exists $FichierXMLOut]} { file delete -force $FichierXMLOut } #Attention le fichier XML doit contenir pour etre utilise (clustalw) les 2 entetes suivants # # #Le dernier est obtenue par l option doctypeDeclaration de asXML set EnteteXML "" set f [open $FichierXMLOut w] puts $f $EnteteXML puts $f [$IdXML asXML -doctypeDeclaration 1 -indent 2] close $f return "$FichierXMLOut" } proc AnnoteNonAnnotes {} { global LNOrdali TDesDescriptifs TDesOrganismes TDesTaxId TDuLineage TDesPhylum set L2gi [list] foreach n $LNOrdali { if {$n eq ""} {continue} if {[EstUnRefseq $n]} { lappend L2gi $n } if {[set TDesOrganismes($n)] eq ""} { lappend L2gi $n } } set L2gi [lsort -unique $L2gi] puts "\nL2gi $L2gi" set Lgi [Convert2GI protein $L2gi] puts "Lgi $Lgi" # retrieve basic information array set T [eSummaryREST protein $Lgi] set Ltn [list] ; set Lti [list] foreach gi $Lgi n $L2gi { # GI not found if {$gi eq $n} {continue} if {[info exists T($gi,Title)]} { set TDesDescriptifs($n) [set T($gi,Title)] } if {[info exists T($gi,TaxId)]} { set tid [set T($gi,TaxId)] set TDesTaxId($n) $tid lappend Ltn $n lappend Lti $tid } } if {$Ltn != {} } { array set X [eFetchREST taxonomy $Lti] parray X foreach n $Ltn id $Lti { if {[info exists X($id,Lineage)]} { set lin [split [set X($id,Lineage)] ;] set TDuLineage($n) $lin set TDesPhylum($n) [lindex $lin 1] set TDesOrganismes($n) [set X($id,ScientificName)] } } } VueEditee 1 SauveLAlignement XML JLeSauveAs puts "" foreach n $::LNOrdali { if {$n eq ""} { puts ";;" continue } set o [set TDesOrganismes($n)] set p [set TDuLineage($n)] puts "$n;$o;$p" } exit } proc AnnotePfam {} { global LNOrdali LSOrdali Rpfm foreach n $LNOrdali s $LSOrdali { if {$n eq ""} { continue } set s [string map {"." ""} $s] trace add variable Rpfm($n) write TraitePfamScanResult set Rpfm($n,id) [after idle "LaunchPfamScan $n $s"] } puts "Rpfm" foreach k [array names ::Rpfm] { puts "$k $::Rpfm($k)" } return } proc AnnoteXml {Qui Quoi AccessDeRef FichierXml FichierResultat} { #Espionne "Dans le AnnoteXml: $AccessDeRef" #Espionne "->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->FichierXml: $FichierXml" package require tdom set EnteteXML "" Wup "Permet de modifier un fichier XML au format macsim pour y ajouter des informations" #2 Preparation Parsing XML avec TDOM # Recuperation du noeud initial du XML set MacsimXml [ContenuDuFichier $FichierXml] set IdXML [dom parse $MacsimXml] set NoeudMacsim [$IdXML documentElement] set RId [$NoeudMacsim selectNodes "alignment"] if {$RId == ""} { $RId delete $NoeudMacsim delete $IdXML delete return "" } while 1 { set qRef "//*\[string(seq-name)='$AccessDeRef'\]/descendant::*\[name()='ftable'\]" set nRef [$RId selectNodes "$qRef"] if {$nRef!=""} { break } set qRef "//*\[string(seq-name)='$AccessDeRef'\]/descendant::*\[name()='seq-info'\]" set nRef [$RId selectNodes "$qRef"] if {$nRef==""} { $RId delete $NoeudMacsim delete $IdXML delete return "" } $nRef appendXML "" } set LesIndicesDesSegments [Interroge$Qui $FichierResultat $Quoi] foreach I $LesIndicesDesSegments { set DebFin [Interroge$Qui $FichierResultat $Quoi $I] set Deb "" set Fin "" regsub {\-} $DebFin " " DebFin scan $DebFin "%d %d" Deb Fin if {$Deb==""} { $RId delete $NoeudMacsim delete $IdXML delete return "" } switch ${Qui}_$Quoi { "GlobPlot_Disorder" { set Color 4 #Espionne "GlobPlot color 1" } "GlobPlot_GlobDoms" { set Color 5 #Espionne "GlobPlot color 1" } "DisEMBL_LOOPS" { set Color 11 #Espionne "DisEMBL color 2" } "DisEMBL_HOTLOOPS" { set Color 21 #Espionne "DisEMBL color 2" } "DisEMBL_REM465" { set Color 19 #Espionne "DisEMBL color 2" } "FoldIndex_pds" { set Color 6 #Espionne "FoldIndex color 3" } "Ronn_DR" { set Color 13 #Espionne "Ronn color 4" } default { set Color 1 } } #Espionne "Color: $Color" #set Color 25 set FType "KOANNO" if {[regexp "${Qui}$Quoi$" $AccessDeRef]} { set FType "AllPredictions" } set Item "" append Item "" append Item "$FType" append Item "$Deb" append Item "$Fin" append Item "$Color" append Item "0" #$Qui $Quoi append Item "${Qui}_$Quoi" append Item "" $nRef appendXML $Item } set Status [SauveTDom $IdXML $EnteteXML $FichierXml] $RId delete $NoeudMacsim delete $IdXML delete return $Status } proc AnnoteXmlParTousPourUnAccess {Access FichierXml LesResultats} { foreach FichierResultat $LesResultats { if { [FileAbsent $FichierResultat]} { continue } set Queue [file tail $FichierResultat] regsub -nocase {Resultat\.html$} $Queue "" AP set P [StringApres "${Access}_" dans $AP] set P [BonneOrthographePour $P] set BonAnnoteXml [QuelAnnoteXmlPour $P] if {$BonAnnoteXml==""} { continue } set Status [$BonAnnoteXml ${Access}_$P $FichierXml $FichierResultat] } return $FichierXml } proc AnnoteXmlPourDisEMBL {Access FichierXml FichierResultat} { set LesTypes [list "LOOPS" "HOTLOOPS" "REM465"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_DisEMBL$" $Access]} { set EtType "$Type" } AnnoteXml "DisEMBL" $Type ${Access}$EtType $FichierXml $FichierResultat } #global InfoDisEMBL; if {[info exists InfoDisEMBL]} { #Espionne "Unset InfoDisEMBL" #array unset InfoDisEMBL #} #ressayer cela mais avec une ,* DechargeDisEMBL $FichierResultat } proc AnnoteXmlPourDisEMBLX {Access FichierXml FichierResultat} { set LesTypes [list "LOOPS" "HOTLOOPS" "REM465"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_DisEMBL$" $Access]} { set EtType "$Type" } #AnnoteXml "DisEMBL" $Type ${Access}$EtType $FichierXml $FichierResultat InterrogeDisEMBL $FichierResultat $Type } } proc AnnoteXmlPourFoldIndex {Access FichierXml FichierResultat} { set LesTypes [list "pds"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_FoldIndex$" $Access]} { set EtType "$Type" } AnnoteXml "FoldIndex" $Type ${Access}$EtType $FichierXml $FichierResultat } #global InfoFoldIndex; if {[info exists InfoFoldIndex]} { #Espionne "Unset InfoFoldIndex" # array unset InfoFoldIndex #} DechargeFoldIndex $FichierResultat } proc AnnoteXmlPourFoldIndexX {Access FichierXml FichierResultat} { set LesTypes [list "pds"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_FoldIndex$" $Access]} { set EtType "$Type" } InterrogeFoldIndex $FichierResultat $Type } #DechargeFoldIndex $FichierResultat } proc AnnoteXmlPourGlobPlot {Access FichierXml FichierResultat} { set LesTypes [list "Disorder" "GlobDoms"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_GlobPlot$" $Access]} { set EtType "$Type" } AnnoteXml "GlobPlot" $Type ${Access}$EtType $FichierXml $FichierResultat } #global InfoGlobPlot; if {[info exists InfoGlobPlot]} { #Espionne "Unset InfoGlobPlot" # array unset InfoGlobPlot #} DechargeGlobPlot $FichierResultat } proc AnnoteXmlPourGlobPlotX {Access FichierXml FichierResultat} { set LesTypes [list "Disorder" "GlobDoms"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_GlobPlot$" $Access]} { set EtType "$Type" } InterrogeGlobPlot $FichierResultat $Type } #DechargeGlobPlot $FichierResultat } proc AnnoteXmlPourLesAccess {LesAccess RepParent FichierXml} { set varGlo [info globals] set Status "" foreach Access $LesAccess { set Rep "$RepParent/$Access" if { [FileAbsent $Rep]} { continue } set Status [AnnoteXmlPourUnAccess $Access $Rep $FichierXml] } Espionne "dans AnnoteXMLPourLesAccess" foreach v1 [info globals] { if {$v1 in $varGlo} {continue} puts $v1 } return $Status #verifie les variable global } proc AnnoteXmlPourRonn {Access FichierXml FichierResultat} { set LesTypes [list "DR"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_Ronn$" $Access]} { set EtType "$Type" } AnnoteXml "Ronn" $Type ${Access}$EtType $FichierXml $FichierResultat } #global InfoRonn; if {[info exists InfoRonn]} { #Espionne "Unset InfoRonn" # array unset InfoRonn #} DechargeRonn $FichierResultat } proc AnnoteXmlPourRonnX {Access FichierXml FichierResultat} { set LesTypes [list "DR"] if {$Access=="LesTypes"} { return $LesTypes } set EtType "" foreach Type $LesTypes { if {[regexp "_Ronn$" $Access]} { set EtType "$Type" } InterrogeRonn $FichierResultat $Type } #DechargeRonn $FichierResultat } proc AnnoteXmlPourUnAccess {Access Rep FichierXml} { #set LIGlobals [info globals] set Status "" foreach FichierResultat [glob -nocomplain "$Rep/{$Access}_*"] { regsub -nocase {Resultat\.html$} $FichierResultat "" AP set P [StringApres "${Access}_" dans $AP] set BonAnnoteXml [QuelAnnoteXmlPour $P] if {$BonAnnoteXml==""} { continue } set Status [$BonAnnoteXml $Access $FichierXml $FichierResultat] } #Espionne "Avant la boucle de globals INfo" #foreach v [info globals] { # if {$v in $LIGlobals} {continue} # puts "variable tjours presente: $v" #} return $Status } proc AnyBal {f} { global ListePDB LConsSA global LNOrdali LSOrdali Sequences PABCourant OrdTmpDir FichierMSF Defauts SDG NomSeqSel global NId NCo NTt NConsDansId NConsDansCo NConsDansTt TableScore LNorMD global VariablesAuDepart TNResConsNSA TNResConsSA LongueurTotale LongTot NAli LongTot global NBench global TResSeeAsId TResSeeAsCo TResSeeAsTt TResId TResCo TResTt # Construction du set de residu conserves set Lcons [list] set Lden [list] unset -nocomplain Tden foreach p $ListePDB { unset -nocomplain St set nom [DonneIdDeAccessPDB $p] set chn [DonneChainDeAccessPDB $p] set Lsite [$nom GiveVar Site] array set St $Lsite foreach s [array names St] { foreach {r c nm} [set St($s)] { if {$c eq $chn} { set x [DonnePosSG $p $r] if {$x != -1 && $x != ""} { incr x if {$x ni $Lcons} { lappend Lcons $x } lappend Tden($x) $p $r $nm lappend Lden $x } } } } } set l [DenombreLaListe $Lden] set LConsSA [list] foreach e $l { puts "e= $e" lassign $e k v if {$v != 1} {lappend LConsSA $k} } if {$LConsSA == {} } {return 0} if {$Lcons == {} } {return 0} #set LConsSA $Lcons puts "Liste cons :" puts "[join [DenombreLaListe $Lden] \n]" puts "Tableau :" parray Tden set Ntypes [list Norm Thompson Ranganatan VolPol Liu Liu2 RPCA Entrop1 Entrop2] set grp "" foreach tnom $Ntypes { unset -nocomplain TableScore foreach t $tnom { ScoreDe$t $grp } set rep1 [VerificationAvantCalculs] if {! $rep1} { puts "Une des methode foireuse !!" puts "skip alignement\n" set BontousTypes 0 break } set BonTousTypes 1 set rep2 [LanceLesCalculs $tnom $grp 0 bali] if {$rep2} { set tmp_TResSeeAsId($tnom) $NConsDansId set tmp_TResSeeAsCo($tnom) $NConsDansCo set tmp_TResSeeAsTt($tnom) $NConsDansTt set tmp_TResId($tnom) $NId set tmp_TResCo($tnom) $NCo set tmp_TResTt($tnom) $NTt } else { puts "fail for method $tnom" set BonTousTypes 0 break } } if {$BonTousTypes} { incr LongTot $LongueurTotale incr NAli incr NBench [llength $LConsSA] foreach tnom $Ntypes { incr TResSeeAsId($tnom) [set tmp_TResSeeAsId($tnom)] incr TResSeeAsCo($tnom) [set tmp_TResSeeAsCo($tnom)] incr TResSeeAsTt($tnom) [set tmp_TResSeeAsTt($tnom)] incr TResId($tnom) [set tmp_TResId($tnom)] incr TResCo($tnom) [set tmp_TResCo($tnom)] incr TResTt($tnom) [set tmp_TResTt($tnom)] } } return } proc Appartient {LIndividu LesIndividus} { set AppartientIlALaPop 0 foreach UnIndividu $LesIndividus { if {$LIndividu == $UnIndividu} {set AppartientIlALaPop 1;break} } return $AppartientIlALaPop } proc Appel {frm index} { global OrdHlpDir set tags [$frm tag names $index] set i [lsearch -glob $tags help-*] if {$i < 0} { return } set cursor [$frm cget -cursor] $frm configure -cursor watch update set helpfile [string range [lindex $tags $i] 5 end] uplevel [list source [file join $OrdHlpDir $helpfile.tcl]] update $frm configure -cursor $cursor $frm tag add visited "$index linestart +1 chars" "$index lineend -1 chars" } proc AppendAuFichier {Fichier Ligne} { set Canal [open $Fichier "a"] puts $Canal $Ligne close $Canal return $Fichier } proc AppendAuFichier_CACHEparRR {Fichier Ligne} { set Canal [open $Fichier "a"] puts $Canal $Ligne close $Canal return $Fichier } proc AppendEtRetourneDistance {Arbre Distance} { global ListeDistanceDeChaqueFeuille global MiniOuSomme JeMeSignale if { $Distance == "Inconnue" } { if {[EstUneFeuille $Arbre]} { if {[CetteFeuilleEstLaCible $Arbre]} { if {$MiniOuSomme == "Mini"} { set Distance 9999999. } else { set Distance 0.0 } return $Distance } else { return "Inconnue" } } else { Dedouble $Arbre G x D y set RetourG [AppendEtRetourneDistance $G "Inconnue"] if { $RetourG != "Inconnue"} { if {$MiniOuSomme == "Mini"} { set Dis [Mini $RetourG [Mini $x $y]] } else { set Dis [expr $RetourG+$x+$y] } AppendEtRetourneDistance $D $Dis if {$MiniOuSomme == "Mini"} { set Dis [Mini $RetourG $x] } else { set Dis [expr $RetourG+$x] } return $Dis } set RetourD [AppendEtRetourneDistance $D "Inconnue"] if { $RetourD != "Inconnue"} { if {$MiniOuSomme == "Mini"} { set Dis [Mini $RetourD [Mini $x $y]] } else { set Dis [expr $RetourD+$y+$x] } AppendEtRetourneDistance $G $Dis if {$MiniOuSomme == "Mini"} { set Dis [Mini $RetourD $y] } else { set Dis [expr $RetourD+$y] } return $Dis } return "Inconnue" } } else { if {[EstUneFeuille $Arbre]} { lappend ListeDistanceDeChaqueFeuille "[NomDeLaFeuille $Arbre] $Distance" return $Distance } else { Dedouble $Arbre G x D y if {$MiniOuSomme == "Mini"} { set Dis [Mini $Distance $x] } else { set Dis [expr $Distance+$x] } AppendEtRetourneDistance $G $Dis if {$MiniOuSomme == "Mini"} { set Dis [Mini $Distance $y] } else { set Dis [expr $Distance+$y] } AppendEtRetourneDistance $D $Dis } } } proc AppendFOF {{Rep ""} {NewRep ""} {FichierFOF ""}} { Wup "Takes all TFA files from Rep and creates a normalised version with the PS as access" if {$FichierFOF==""} { set Projet [file tail [RepertoireDuGenome]] set FichierFOF "[RepertoireDuGenome]/$Projet.fof" } if {$Rep==""} { set Rep [ChoixDuRepertoire "[RepertoireDuGenome]/"] } if { ! [regexp "^/" $Rep]} { set Rep "[RepertoireDuGenome]/$Rep" } if {$NewRep==""} { set NewRep "[file dirname $Rep]/NewTFA" } if { ! [regexp "^/" $NewRep]} { set NewRep "[RepertoireDuGenome]/$NewRep" } if {[FileAbsent $NewRep]} { file mkdir $NewRep } Espionne $Rep foreach Fichier [lsort [glob -nocomplain "$Rep/*"]] { Espionne $Fichier set Queue [file tail $Fichier] regsub {^[A-Z]+_[^_]+_} $Queue "" PS set Entete [EnteteDuFichierTFA $Fichier] set Seq [QueLaSequenceDuFichierTFA $Fichier] regsub {>[^ ]+ } $Entete "" DE set TFA [SequenceFormatTFA $Seq "$PS $DE" "nucbrut"] Espionne $TFA set FicTFA "$NewRep/$Queue" Sauve $TFA dans $FicTFA lappend LeNouveauFOF "$PS $FicTFA" } if {[file exists $FichierFOF]} { Garde $FichierFOF } AppendAuFichier $FichierFOF [join $LeNouveauFOF "\n"] return $FichierFOF } proc AppendLaProc {SousProcedure Procedure} { global LesSousProcedures if {[info procs $SousProcedure]=={}} { return } lappend LesSousProcedures($Procedure) $SousProcedure } proc AppendPierre {} { global CanalPierre NomDuFichierPierre if { [info exists CanalPierre] } { ClosPierre } if { ! [info exists NomDuFichierPierre] } { set NomDuFichierPierre "pierre" } set CanalPierre [open $NomDuFichierPierre a] return $CanalPierre } proc AppendUneDemarcation {K {NomDuFichier ""}} { if {$NomDuFichier == ""} { set NomDuFichier [ButineArborescence] } if {$NomDuFichier == ""} { return "" } set Y 100 set Etiquette "NoValue" foreach Ligne [LesLignesDuFichier $NomDuFichier] { if {[regexp {"#Don't remove this line it marks the end."} $Ligne]} { break } if {[regexp {^\#} $Ligne]} { continue } if { ! [regexp -nocase {[a-z0-9]} $Ligne]} { continue } set n [scan $Ligne "%s %s %s" Nom Y Etiq] DemarcationEnPosition $K "v" $Nom $Y $Etiq } return $NomDuFichier } proc AppletCmd {w arglist} { # puts "AppletCmd: w=$w arglist=$arglist" label $w -text "The Applet $w" -bd 2 -relief raised } proc AppliqueBackColor {} { global TmpDef Defauts set Defauts(BackAppli) [set TmpDef(BackAppli)] ChangeTkOptions foreach e [wm stackorder .] { wm withdraw $e update idletasks wm deiconify $e } return LesDefauts BackAppliOri [set Defauts(BackAppli)] LesDefauts BackAppli [set TmpDef(BackAppli)] update foreach e [winfo children .] { if {[regexp "BWIDGET" [string toupper $e]]} {continue} MesCouleurs $e } update idletasks return } proc AppliqueCouleurs {type w} { global NomNomSeq ListePDB if {[QuelMode] eq "seqlab"} { global LNSeqlab LSSeqlab set LesSeqs $LSSeqlab set LesNoms $LNSeqlab } else { global LNOrdali LSOrdali set LesSeqs $LSOrdali set LesNoms $LNOrdali } # configuration tags set Lgaa [list STAC DE ILMV FYW P RK Q G HN SPC] # set Lfreg [list "S|T|A|C" "D|E" "I|L|M|V" "F|Y|W" "p" "R|K" "Q" "G" "H|N" "\\\."] set Lfreg [list "S|T|A|C" "D|E" "I|L|M|V" "F|Y|W" "P" "R|K" "Q" "G" "H|N"] set y 0 foreach s $LesSeqs n $LesNoms { incr y if {$n eq ""} {continue} if {$n in $ListePDB} {continue} foreach a $Lgaa freg $Lfreg { set lt {} set lv [regexp -all -inline -indices -- $freg $s] foreach e $lv { lassign $e d f lappend lt $y.$d $y.[expr {$f+1}] } if {$lt != {}} {$w tag add Tag$a {*}$lt} } } update idletasks return } proc AppliqueFeature {ft} { global NomTextSeq NomNomSeq ListeTypesDeFeatures LNOrdali LesNomsDesSeqsOld TabSF ScoreMeth Defauts if {! [ModeI]} {return} $NomTextSeq configure -state normal if {$ft eq "Clear" || $ft eq "None"} { set Ltags [$NomTextSeq tag names] set ToDelete [lsearch -all -inline -regexp $Ltags "^(FX_|FDisp_)"] if {$ToDelete != {}} { $NomTextSeq tag delete {*}$ToDelete } ResetDesBoutons $NomTextSeq configure -state disabled MetAJourDessinOverview -1 "" "None" 1 if {[lsearch -regexp $ListeTypesDeFeatures "Cons-T"] != -1} { EnleveLesPoints } return } set ftnsp [string map [list " " ""] $ft] set Lt [$NomTextSeq tag names] set LaFeat [lsearch -regexp -all -inline $Lt "_${ftnsp}_"] if {$LaFeat ne ""} { set isPresent 1 } else { set isPresent 0 } if {$isPresent} { $NomTextSeq tag delete {*}$LaFeat $NomTextSeq configure -state disabled MetAJourDessinOverview -1 "" $ft 0 if {[QuelMode] eq "feature" && [regexp "Cons-" $ft]} { setTooltip [BtnDeLaFeature $ft] "" } if {[regexp "Cons-T" $ft]} { EnleveLesPoints } return } if {[regexp {^Cons\-|^Score\-} $ft]} { if {[set ScoreMeth($ft,Edit)]} { $NomTextSeq tag configure "EdtFnd_${ftnsp}_1" -background "#ffdddd" $NomTextSeq tag add "EdtFnd_${ftnsp}_1" 1.0 end if {[QuelMode] eq "feature"} { setTooltip [BtnDeLaFeature $ft] "Beware ! Conservation is not valid anymore\nas the alignment has changed !" } } if {[regexp "Cons-T" $ft]} { #AfficheLesPoints } DessineLesScores $ft } set LFeatUse {} array set ToTag {} foreach key [array names TabSF "*,$ft"] { lassign [split $key ,] nom tmp set i [expr {[lsearch $LNOrdali $nom] + 1}] foreach f [set TabSF($nom,$ft)] { set fcol "black" DecortiqueUneFeature $f dg fg col sco note if {$Defauts(RemovePropagated) && [string range $note 0 4] eq "PROP_"} { continue } incr fg set LeTag "FX_${ftnsp}_$col" lappend ToTag($LeTag) $i.$dg $i.$fg if {$LeTag ni $LFeatUse} { if {$col eq "black" || $col eq "DimGray"} { set fcol "white" } $NomTextSeq tag configure $LeTag -foreground $fcol -background $col lappend LFeatUse $LeTag } if {$note ne ""} { set lanote [string map [list " " "_"] $note] $NomTextSeq tag configure "FDisp_$lanote" -foreground black lappend ToTag(FDisp_${ftnsp}_$lanote) $i.$dg $i.$fg } } } foreach e [array names ToTag] { set Lt [list] $NomTextSeq tag add $e {*}$ToTag($e) if {0} { lassign [split [lindex $ToTag($e) 0] .] yc xd lassign [split [lindex $ToTag($e) 1] .] yc xf foreach {p1 p2} [lrange $ToTag($e) 2 end] { lassign [split $p1 .] y x1 lassign [split $p2 .] y x2 if {$xf != ($x1+1) || $yc != $y} { lappend Lt $yc.$xd $yc.$xf set xd $x1 set yc $y } set xf $x2 } lappend Lt $yc.$xd $yc.$xf $NomTextSeq tag add $e {*}$Lt } } $NomTextSeq configure -state disabled MetAJourDessinOverview -1 "" $ft 1 return } proc AppliqueRotation {V R T} { set Vt [V_MV $R * $V] set NewV [V_VV $Vt + $T] return $NewV } proc AppliqueSuperposition {} { global ListePDB StrucAVoir db foreach nmch [lrange $StrucAVoir 1 end] { set elt [DonneIdDeAccessPDB $nmch] set chn [DonneChainDeAccessPDB $nmch] array set TM [$elt GiveVar Rot] array set TT [$elt GiveVar Trans] set M [M_T TM] set T [V_T TT] lassign $M aM bM cM lassign $T t1 t2 t3 set pdb $elt $db eval {begin transaction} set Lr [$db eval {select a.x,a.y,a.z,a.pk_atoms from atoms as a, chains as c, pdb as p where p.name=$pdb and c.pk_pdb=p.pk_pdb and c.name=$chn and a.pk_chains=c.pk_chains}] foreach {x y z ix} $Lr { set nx [VMT $x $y $z $aM $t1] set ny [VMT $x $y $z $bM $t2] set nz [VMT $x $y $z $cM $t3] $db eval {update atoms set x=$nx, y=$ny, z=$nz where pk_atoms=$ix} } $db eval {commit} $elt _Dimensions $elt ResetDrawing } return } proc AppliqueWidth {AId val} { set inc [expr {[set ::Abr($AId,Increment)] + $val}] if {$inc < 5} {return} set ::Abr($AId,Increment) $inc OnReDessineArbre $AId return } proc AppliqueZoom {AId val x y} { global Abr if {$val eq "zplus"} {set val 0.1} {set val -0.1} set Abr($AId,ScaleR) [expr {$val+[set Abr($AId,ScaleR)]}] if {[set Abr($AId,ScaleR)] < 0.1} {set Abr($AId,ScaleR) 0.1} OnReDessineArbre $AId return } proc ArClade {{Qui ""} {Quoi ""}} { global ArClade if {[info exists ArClade($Qui,$Quoi)]} { return $ArClade($Qui,$Quoi) } if {[info exists ArClade("EstCharge")]} { if {[info exists ArClade($Qui,OX)]} { set OX $ArClade($Qui,OX) if {[info exists ArClade($OX,$Quoi)]} { return $ArClade($OX,$Quoi) } } return "" } set ArClade("EstCharge") 1 set LesClades [LesLignesDuFichier "/genomics/link/OI/fiches/PhylAr_ListOf_PhyOS.txt"] set LesClades [OrderedClades $LesClades] foreach Name $LesClades { set OX [Tax $Name TaxId] if {$OX==""} { #FaireLire "$Name has no TaxId. I'll use Archaea instead" set Name "Archaea" set OX [Tax $Name TaxId] } set ArClade($Name,Name) $Name set ArClade($OX,OX) $OX set ArClade($Name,OX) $OX set ArClade($OX,Name) $Name lappend ArClade(ListOf,OX) $OX lappend ArClade(ListOf,Name) $Name } set ArClade(ListOf,AllOX) $ArClade(ListOf,OX) set ArClade(ListOf,AllName) $ArClade(ListOf,Name) foreach Name [list Bacteria Eukaryota Viruses] { set OX [Tax $Name TaxId] if {$Name=="root"} { set Name "Other" } lappend ArClade(ListOf,AllOX) $OX lappend ArClade(ListOf,AllName) $Name } return [ArClade $Qui $Quoi] } proc ArCladeOLD {{Qui ""} {Quoi ""}} { global ArClade if {[info exists ArClade($Qui,$Quoi)]} { return $ArClade($Qui,$Quoi) } if {[info exists ArClade("EstCharge")]} { if {[info exists ArClade($Qui,OX)]} { set OX $ArClade($Qui,OX) if {[info exists ArClade($OX,$Quoi)]} { return $ArClade($OX,$Quoi) } } return "" } set ArClade("EstCharge") 1 set Fichier "/home/ripp/vrac/ArClade.txt" set ArClade(Filename,) $Fichier foreach Ligne [LesLignesDuFichier $Fichier] { set Name [string trim $Ligne " \t"] if {$Name==""} { continue } regsub -all " " $Name "_" Name set OX [Tax $Name TaxId] if {$OX==""} { #FaireLire "$Name has no TaxId. I'll use Archaea instead" set Name "Archaea" set OX [Tax $Name TaxId] } set ArClade($Name,Name) $Name set ArClade($OX,OX) $OX set ArClade($Name,OX) $OX set ArClade($OX,Name) $Name lappend ArClade(ListOf,OX) $OX lappend ArClade(ListOf,Name) $Name } set ArClade(ListOf,OX) [lsort -unique $ArClade(ListOf,OX)] set ArClade(ListOf,Name) [lsort -unique $ArClade(ListOf,Name)] foreach A $ArClade(ListOf,OX) { foreach B $ArClade(ListOf,OX) { if {$A==$B} { continue } if {[JeSuisTonAncetre $A $B]} { set ArClade($A,AncestorOf_$B) 1 } } } set ArClade(ListOf,OrderedOX) [lsort -command CompareArCladeAncestor $ArClade(ListOf,OX)] foreach OX $ArClade(ListOf,OrderedOX) { lappend ArClade(ListOf,OrderedName) $ArClade($OX,Name) } #parray ArClade foreach D [list Bacteria Eukaryota Virus] { set N [Tax $D Name] if {$N=="root"} { set N "Other" } lappend ArClade(ListOf,OrderedOX) $D lappend ArClade(ListOf,OrderedName) $N } return [ArClade $Qui $Quoi] } proc ArCladeOf {{Qui ""} {Quoi ""}} { global ArCladeOf if {$Quoi=="Clade"} { set Quoi "Name" } if {[regexp -nocase "taxid" $Quoi]} { set Quoi "OX" } if {$Quoi=="" && [regexp {^[0-9]+$} $Qui]} { set Quoi "OX" } if {$Quoi=="" && ! [regexp {^[0-9]+$} $Qui]} { set Quoi "Name" } if {[info exists ArCladeOf($Qui,Quoi)]} { return $ArCladeOf($Qui,$Quoi) } set OX [Tax $Qui TaxId] set OS [Tax $Qui Name] foreach CX [ArClade ListOf OrderedOX] CS [ArClade ListOf OrderedName] { if {[JeSuisTonAncetre $CX $OX]} { set ArCladeOf($OX,OX) $CX set ArCladeOf($OS,OX) $CX set ArCladeOf($OX,Name) $CS set ArCladeOf($OS,Name) $CS if {[info exists ArCladeOf($OX,$Quoi)]} { return $ArCladeOf($OX,$Quoi) } } } return "" } proc Arboot {} { global TokCourant if { ! [regexp {^\(} $TokCourant]} { set FeuilleDist [FeuilleDist] if {[regexp "NonValide" $FeuilleDist]} { return "ArbootNonValideCar$FeuilleDist" } return $FeuilleDist } Tok set Gauche [Arboot] if {[regexp "NonValide" $Gauche]} { return "ArbootNonValideCar$Gauche" } if { ! [regexp {\,} $TokCourant]} { return "ArbootNonValideCarSansVirgule" } Tok set Droite [Arboot] if {[regexp "NonValide" $Droite]} { return "ArbootNonValideCar$Droite" } if { ! [regexp {\)} $TokCourant]} { return "ArbootNonValideCarSansFermante" } Tok set ValeurDist [ValeurDist] if {[regexp "NonValide" $ValeurDist]} { return "ArbootNonValideCar$ValeurDist" } if {[regexp {^\[} $TokCourant]} { set ValeurBoot [ValeurBoot] if {[regexp "NonValide" $ValeurBoot]} { return "ArbootNonValideCar$ValeurBoot" } } else { set ValeurBoot 0 } return [list $Gauche $Droite $ValeurDist $ValeurBoot] } proc ArbreAgent {iSeq} { global Larbres TAg T DoTour LNOrdali DoTour if {$DoTour} { return } set n [lindex $LNOrdali $iSeq] if {($iSeq + 1) == [llength $LNOrdali]} { set iSeq -1 set DoTour 1 } # cherche dans seq suivante incr iSeq set nf [lindex $LNOrdali $iSeq] if {$DoTour} { foreach agn $TAg($n) { lappend Larbres [list $n $agn] } return $Larbres } foreach agn $TAg($n) { #set Lp [LiensAgent $n $agn $nf] set Lp [lsearch -all -exact -inline -index 0 $T($n,$agn) $nf] set Ltmp [list] foreach arbre [ArbreAgent $iSeq] { foreach l $Lp { lassign $l n2 ag2 sc2 lappend Ltmp [concat $arbre $n2 $ag2] } } #lappend Larbres {*}$Ltmp set Larbres $Ltmp } #ArbreAgent $iSeq return $Larbres } proc ArbreBootstrapEnListe {TextePH} { regsub -all "\n" $TextePH "" t regsub -all {\:[0-9]\.[0-9]*} $t ":" t regsub -all {[\]\[]} $t "" t regsub -all {\(} $t {[list } t regsub -all "," $t " " t regsub -all ":," $t ":" t regsub -all {:\)} $t ":" t regsub -all ":" $t " " t regsub -all {\)} $t {]} t regsub -all {;} $t "" t exit eval set Arbre $t if {[llength $Arbre] == 4} { set Arbre [list [list [lindex $Arbre 0] [lindex $Arbre 1] [lindex $Arbre 3]] [lindex $Arbre 2] [lindex $Arbre 3]] } return $Arbre } proc ArbreBootstrapEnListeOld {TextePH} { regsub -all "\n" $TextePH "" t regsub -all {[0-9]\.[0-9]*} $t "" t regsub -all {[\]]} $t "" t regsub -all {[\[]} $t "" t regsub -all {\:\)} $t ":9999.\)" t regsub -all {\(} $t {[list } t regsub -all "," $t " " t regsub -all ":" $t " " t regsub -all {\)} $t {]} t regsub -all {;} $t "" t eval set Arbre $t if {[llength $Arbre] == 6} { set Arbre [list [lrange $Arbre 0 3] 0.0 [lindex $Arbre 4] [lindex $Arbre 5]] } return $Arbre } proc ArbreDesClasses {} { Degrave T NicePrintOfTree $T exit if {[]} {} } proc ArbreEnListe {TextePH} { regsub -all "\n" $TextePH "" t regsub -all {\(} $t {[list } t regsub -all "," $t " " t regsub -all ":" $t " " t regsub -all {\)} $t {]} t regsub -all {;} $t "" t eval set Arbre $t if {[llength $Arbre] == 6} { set Arbre [list [lrange $Arbre 0 3] 0.0 [lindex $Arbre 4] [lindex $Arbre 5]] } return $Arbre } proc ArcInit {} { global StrucAVoir gDemo LoadTkAndPackages rename EnvoieLesObjets Envoie_wait rename Cubes EnvoieLesObjets set StrucAVoir [list] Initialisation # Font to be used in the Tk listbox. set gDemo(listFont) {-family {Courier} -size 18 -weight bold} # Display mode. set gDemo(fullScreen) false # Window size. set gDemo(winWidth) 640 set gDemo(winHeight) 480 set ::ArcBall [tcl3dNewArcBall 640 480] set ::Transform [tcl3dVector GLfloat 16] set ::ThisRot [tcl3dVector GLfloat 16] set ::LastRot [tcl3dVector GLfloat 16] set ::ThisQuat [tcl3dVector GLfloat 4] update ArcStart .top.fr.toglwin postredisplay return } proc ArcLaListe {ListeNomCouleur R Type {MilieuOuAngle milieu} {RayonMinimum ""} {RayonMaximum ""}} { Wup "Creates the arcs associated to each element of the list" global ParametresDuBoard Wup "Pour les fleches a l'envers c'est code 'Reverse\NomOuAngle' " set PI 3.14159 set DeltaAnglePourFlecheDeg 1.5 set DeltaAnglePourFlecheRad [expr $DeltaAnglePourFlecheDeg*$PI/180.] set CentreX [set ParametresDuBoard($R,CentreX)] set CentreY [set ParametresDuBoard($R,CentreY)] set RayonMoyen [set ParametresDuBoard($R,RayonMoyen)] set OffsetRayonMin [set ParametresDuBoard($R,OffsetRayonMin)] set OffsetRayonMax [set ParametresDuBoard($R,OffsetRayonMax)] set IemeCouche [set ParametresDuBoard($R,IemeCouche)] set Rayon $RayonMinimum set Gauche [expr $CentreX-$Rayon] set Haut [expr $CentreY-$Rayon] set Droite [expr $CentreX+$Rayon] set Bas [expr $CentreY+$Rayon] set InRayon [expr $Rayon*(1-0.9*$DeltaAnglePourFlecheRad)] set OutRayon [expr $Rayon*(1+0.9*$DeltaAnglePourFlecheRad)] set n [llength $ListeNomCouleur] set CumulF 0 set CumulR 0 set OldCouleur "CACADOIE" foreach {NomOuAngle Couleur} [concat $ListeNomCouleur [list "NomBidon" "CouleurPourFin"]] { if {[regexp {^Reverse_} $NomOuAngle]} { set Orientation "R" incr CumulR } else { set Orientation "F" incr CumulF } regsub {^Reverse_} $NomOuAngle "" NomOuAngle set Etiquette " " if {$Couleur != $OldCouleur && $OldCouleur != "CACADOIE"} { if {$OldCouleur=="VIDE"} { set NonVide 0 } else { set NonVide 1 } set i_ [string first "_" $OldCouleur] if {$i_ < 0} { set VraieCouleur $OldCouleur } else { set Etiquette [string range $OldCouleur [incr i_ 1] end] set VraieCouleur [string range $OldCouleur 0 [incr i_ -2]] } if {$CumulF>=$CumulR} { set Orientation "F" set NewStart [expr $Start+$DeltaAnglePourFlecheRad] set Queue $NewStart set Pointe $Start } else { set Orientation "R" set NewStart $Start set Pointe [expr $Start+$Extent] set Queue [expr $Pointe-$DeltaAnglePourFlecheRad] } set NewExtent [expr $Extent-$DeltaAnglePourFlecheRad] set Repeche 0 if {$Etiquette=="B" && [expr abs($Extent) < 2*$PI*5000./[LongueurADN]]} { set Repeche 1 } set Noye 0 if {$Etiquette=="D5" && [expr abs($Extent) < 2*$PI*30000./[LongueurADN]]} { set Noye 1 } Espionne "$Etiquette [expr $Extent*[LongueurADN]/(2*$PI)] $Repeche $Noye" if {$Repeche || (! $Noye && $NonVide && [expr abs($Extent) > 2*$PI*19000./[LongueurADN]])} { set IdArc [$R create arc $Gauche $Haut $Droite $Bas -width 7 -start [expr $NewStart*180/$PI] -extent [expr $NewExtent*180/$PI] -style "arc" -outline $VraieCouleur -tags "Zone"] set InQueueX [expr ($Gauche+$Droite)/2 + $InRayon*cos($Queue)] set InQueueY [expr ($Haut+$Bas)/2 - $InRayon*sin($Queue)] set OutQueueX [expr ($Gauche+$Droite)/2 + $OutRayon*cos($Queue)] set OutQueueY [expr ($Haut+$Bas)/2 - $OutRayon*sin($Queue)] set PointeX [expr ($Gauche+$Droite)/2 + $Rayon*cos($Pointe)] set PointeY [expr ($Haut+$Bas)/2 - $Rayon*sin($Pointe)] if { 0 } { $R create polygon $PointeX $PointeY $InQueueX $InQueueY $OutQueueX $OutQueueY $PointeX $PointeY -fill $VraieCouleur -outline $VraieCouleur -tags "Fleche" } else { FlecheSurArc $R $IdArc $Orientation } set EtiqX [expr ($Gauche+$Droite)/2 + 1.00*$OutRayon*cos($Start+$Extent/2)] set EtiqY [expr ($Haut+$Bas)/2 - 1.00*$OutRayon*sin($Start+$Extent/2)] $R create text $EtiqX $EtiqY -text $Etiquette -anchor c -font {Courier 10} -tags "Etiquette" } unset Start set CumulF 0 set CumulR 0 } if {$Couleur == "CouleurPourFin"} { break } if {$MilieuOuAngle == "angle"} { set Angle $NomOuAngle } elseif {$MilieuOuAngle == "milieu"} { set Angle [AngleDansRosace $R $Nom] } if { ! [info exist Start]} { set Start $Angle } set Extent [EntreMinEtMax [expr $Angle-$Start] [expr -$PI] $PI] set OldCouleur $Couleur } } proc ArcStart {} { CreateWindow ResetRotations PrintInfo [format "Running on %s with a %s (OpenGL %s, Tcl %s)" $::tcl_platform(os) [glGetString GL_RENDERER] [glGetString GL_VERSION] [info patchlevel]] return } proc ArchaeaGenomesDeClaudine {{GetWhat ""}} { OiDomain A foreach OS [OiCode ListOf OS] { scan $OS "%s %s" Ge Es set GeEs "$Ge$Es" set OX [OiCode $OS OX] #Espionne "$OX $GeEs \t\t$OS" lappend LesOXde($GeEs) $OX } set LesGS {} set Rates 0 set LesMemes {} set LesCommeSoeur {} set LesRates {} set LesClaudine {} set NbAvecSoeur 0 foreach G [ClaudineArchaea ListOf G] { set GX [ClaudineArchaea $G OX] set GS [ClaudineArchaea $G "Organism_Name"] set OS [OiCode $GX OS] set Clade [ArCladeOf $GX Name] lappend LesClaudine [format "%s %9d %-50s %s %s %s" $G $GX $GS Clade = $Clade] if {$OS!=""} { set Meme($GX) 1 lappend LesMemes [format "%-9s %9d %-50s %-80s %s" $G $GX $GS $OS Clade = $Clade] continue } set LesParents [list $GX] set PX $GX while {$OS==""} { set PX [QuestionDeScience EVImm "ret Tax $PX Parent"] if {$PX=="" || $PX==1} { break } lappend LesParents $PX set OS [OiCode $PX OS] if {$OS!=""} { Espionne "$LesParents $OS" } } set LesSoeurs {} set PX [QuestionDeScience EVImm "ret Tax $GX Parent"] if {$PX!="" && $PX!=1} { foreach OXSoeur [QuestionDeScience EVImm "ret Tax $PX Children"] { set OS [OiCode $OXSoeur OS] if {$OS!=""} { lappend LesSoeurs "$OS OX = $OXSoeur" set YaSoeur($OXSoeur) 1 } } if {$LesSoeurs!={}} { incr NbAvecSoeur lappend LesCommeSoeur "" lappend LesCommeSoeur "$G $GX $Clade" lappend LesCommeSoeur $GS foreach Soeur $LesSoeurs { lappend LesCommeSoeur $Soeur } } if {$LesSoeurs!={}} { continue } } lappend LesRates [format "%9s %9d %-40s %s %s %s" $G $GX $GS Clade = $Clade] } foreach OX [OiCode ListOf OX] { if {[info exists Meme($OX)]} { lappend LesMemeQueYannis $OX continue } lappend LesNouveauxDeYannis "$OX [OiCode $OX OS]" } set LesNouveauxDeYannis [lsort -index 1 $LesNouveauxDeYannis] # return [AfficheListe $LesClaudine "" "Ceux de Claudine"] Espionne "[llength $LesClaudine] de Claudine" Espionne "[llength $LesMemes] Memes" Espionne "$NbAvecSoeur AvecSoeur" Espionne "[llength $LesRates] Rates" Espionne "[llength [OiCode ListOf OX]] de Yannis" Espionne "[llength $LesNouveauxDeYannis] Nouveaux chez Yannis" set LesFenetres {} lappend LesFenetres [AfficheListe $LesClaudine "" "Ceux de Claudine"] lappend LesFenetres [AfficheListe $LesMemes "" "LesMemes"] # lappend LesFenetres [AfficheListe $LesCommeSoeur "" "LesSoeurs"] lappend LesFenetres [AfficheListe $LesRates "" "LesRates"] lappend LesFenetres [AfficheListe $LesNouveauxDeYannis "" "LesNouveauxDeYannis"] lappend LesFenetres [AfficheListe [OiCode ListOf Info] "" "Ceux de Yannis"] return $LesFenetres } proc ArchiveBatch {{batchName ""} {batchDate ""}} { # Connect to database #canalSqlAssemblyDb NSAssemblyDb::getCanal # Retrieve pk and names of contigs in batch set sql "SELECT c.pk_contig, s.name FROM assembly AS a, contig AS c, sequence AS s WHERE a.pk_assembly = c.pk_assembly AND c.consensus_pk_sequence = s.pk_sequence AND a.name = '$batchName' AND a.date = '$batchDate'" set pkContigs [SqlExec $sql GetList] if {[llength $pkContigs] < 1} { puts "Batch $batchName ($batchDate) does not exists" exit 1 } # BEGIN THE TRANSACTION SqlExec "BEGIN" foreach {pkC nameC} $pkContigs { puts "Archiving $nameC" # Retrieve read names in contig pkC set readNames [SqlExec "SELECT name FROM sequence WHERE pk_contig = $pkC" GetList] if {[llength $readNames] < 1} { puts "ERROR: no reads in $nameC" exit 1 } # Insert read names into history table foreach rN $readNames { SqlExecWithStatus "INSERT INTO history(pk_contig, read_name) VALUES($pkC, '$rN')" } # Remove reads of table sequence SqlExecWithStatus "DELETE FROM sequence WHERE pk_contig = $pkC" } # Mark the batch as archived SqlExecWithStatus "UPDATE assembly SET archived = true WHERE name = '$batchName' AND date = '$batchDate'" # FINISH THE TRANSACTION SqlExec "COMMIT" # Disconnect CanalSqlDisconnect } proc AretesDuCube {a1 b1 c1 d1 a2 b2 c2 d2} { # Face haut glBegin GL_LINES glVertex3fv $a1 glVertex3fv $b1 glEnd glBegin GL_LINES glVertex3fv $b1 glVertex3fv $c1 glEnd glBegin GL_LINES glVertex3fv $c1 glVertex3fv $d1 glEnd glBegin GL_LINES glVertex3fv $d1 glVertex3fv $a1 glEnd # face bas glBegin GL_LINES glVertex3fv $a2 glVertex3fv $b2 glEnd glBegin GL_LINES glVertex3fv $b2 glVertex3fv $c2 glEnd glBegin GL_LINES glVertex3fv $c2 glVertex3fv $d2 glEnd glBegin GL_LINES glVertex3fv $d2 glVertex3fv $a2 glEnd # Poteaux glBegin GL_LINES glVertex3fv $a1 glVertex3fv $a2 glEnd glBegin GL_LINES glVertex3fv $b1 glVertex3fv $b2 glEnd glBegin GL_LINES glVertex3fv $c1 glVertex3fv $c2 glEnd glBegin GL_LINES glVertex3fv $d1 glVertex3fv $d2 glEnd return } proc ArkaeaLike {Orga} { if {[PyroLike $Orga] || [regexp "mjan|aful|mthe|aper|ssol|saci|mvan|hsal|hvol|hcut|hhal|damb|dmob|dthe|dsp" $Orga]} { return 1 } return 0 } proc ArrayFromSerial {Texte aT} { upvar $aT T return [ArrayFromSeriallist [SeriallistFromSerial $Texte] T] } proc ArrayFromSeriallist {Liste aT} { upvar $aT T foreach {K V} [lindex $Liste 1] { set T([ValueFromSeriallist $K]) [ValueFromSeriallist $V] } return $aT } proc ArrayRecap {PourCas} { set LongPourCas [llength $PourCas] Espionne "LongPourCas= $LongPourCas" set somme 0 foreach elmt $PourCas { set somme [expr $somme+$elmt] if {[info exists DejaVu($elmt)]} { incr DejaVu($elmt) continue } set DejaVu($elmt) 1 } Espionne "somme= $somme" set MoyPourCas [expr $somme/$LongPourCas] Espionne "MoyPourCas= $MoyPourCas" set grand 0; set petit 100 set Resultat [array get DejaVu] foreach Cle [array names DejaVu] { if {$Cle>$grand} {set grand $Cle} if {$Cle<$petit} {set petit $Cle} } return "$grand $petit\n$Resultat" } proc ArraytypeEnAttente {} { set name "Ret13K" set type "spotted DNA/cDNA" set manufacturer "Cepko lab" set probesetcount "12243 mouse clones" set description "The Ret13K microarray includes 12,243 mouse clones including BMAP mouse retinal clones and 220 clones from the Incyte mouse unigene 1 collection. The cDNA inserts were amplified from replica plate cultures by PCR, purified and mechanically spotted onto polylysine-coated microscope slides using an OmniGrid robotic spotter (GeneMachines, San Carlo, CA)." set url "NA" set Ligne "$name;$type;$manufacturer;$probesetcount;$description;$url" lappend LesLignes $Ligne if {[ArraytypeWithPipeWork]} { CreateArray InitValues 1 "New" "0" $name $type $manufacturer $probesetcount $description $url set Serial [PhpSerialize InitValues "i"] Espionne $Serial lappend LesCreations [WebService "Gx" FromPipeWork "pipeworkname" "GXManageArraytype" "serialinitvalues" $Serial] } } proc ArraytypeInput {{LesFichiers ""}} { if { ! [WithWebService "Gx" "TestIfExists"]} { WithWebService "Gx" 1 } if {$LesFichiers=="" } { set LesFichiers [LesAffyAnnot] } if {$LesFichiers=="DansLeBonOrdre"} { set LesFichiers [LesAffyAnnotDansLeBonOrdre] } set LesCreations {} foreach File $LesFichiers { set Queue [file tail $File] set Chip [string range $Queue 0 [expr [string first "." $Queue] -1]] LConcat LesCreations [ChargeArraytype $Chip] foreach MultiChip [MesMultiChip $Chip] { if {[info exists DejaVu($MultiChip)]} { continue } set DejaVu($MultiChip) 1 LConcat LesCreations [ChargeArraytype $MultiChip] } } return $LesCreations } proc ArraytypeWithPipeWork {{Qui ""} {Valeur ""}} { global ArraytypeWithPipeWork if {$Qui==""} { set Qui "Gx" } if {$Valeur!=""} { set ArraytypeWithPipeWork($Qui) $Valeur} if {[info exists ArraytypeWithPipeWork($Qui)]} { return $ArraytypeWithPipeWork($Qui) } set ArraytypeWithPipeWork($Qui) 1 return [ArraytypeWithPipeWork $Qui] } proc AsciiToInteger {A} { set I -1 scan $A "%c" I return $I } proc AskAddSeqs {} { global TAddS LNDG set TAddS(File) "" set TAddS(Align) 1 set TAddS(CopySkip) 0 set TAddS(Position) "end" set TAddS(seqInsert) "" if {[llength $LNDG] > 1} { set TAddS(KeepClus) 1 } else { set TAddS(KeepClus) 0 } set TAddS(File) "add_jaris.tfa" set TAddS(Position) "end" set TAddS(seqInsert) "Q5ZAV6" set TAddS(Align) 1 set res [array get TAddS] if {[ModeI]} { set res [AfficheAskAddSeq $res] } # if result is empty then leave AddSeq return $res } proc AskAnchors {args} { #unset #$FileAnchors IdDeRef #$FileAnchors LesId #$FileAnchors Id $Id NbLMS #$FileAnchors Id $Id LMS $n Pos #$FileAnchors Id $Id LMS $n Beg #$FileAnchors Id $Id LMS $n End #$FileAnchors Id $Id LMS $n Len global TabDesAnchorsDeBallast if {$args == ""} {return} set PremArg [lindex $args 0] if {[string equal -nocase $PremArg "unset"]} { if {[info exists TabDesAnchorsDeBallast ]} {unset TabDesAnchorsDeBallast} return } if {![file exists $PremArg]} {return} set Quoi [join $args ","] if {[info exists TabDesAnchorsDeBallast($Quoi)]} {return [set TabDesAnchorsDeBallast($Quoi)]} if {[info exists TabDesAnchorsDeBallast($PremArg,EstCharge)]} {return} set TabDesAnchorsDeBallast($PremArg,EstCharge) 1 LoadAnchors TabDesAnchorsDeBallast $PremArg if {[info exists TabDesAnchorsDeBallast($Quoi)]} {return [set TabDesAnchorsDeBallast($Quoi)]} return } proc AskBlast {args} { #$FileBlast Exists #unset #unsetfile $FileBlast #$FileBlast TypeDeBlast #$FileBlast Database #$FileBlast Query #$FileBlast Taille #$FileBlast NbSubject #$FileBlast Subject $nSubject #$FileBlast BanqueId $BId Access #$FileBlast BanqueId $BId Definition #$FileBlast BanqueId $BId Taille #$FileBlast BanqueId $BId SubjectBrut #$FileBlast BanqueId $BId NbSegment #$FileBlast BanqueId $BId Segment $nSegment AlignBrut #$FileBlast BanqueId $BId Segment $nSegment Score #$FileBlast BanqueId $BId Segment $nSegment Expect #$FileBlast BanqueId $BId Segment $nSegment Identities #$FileBlast BanqueId $BId Segment $nSegment Positives #$FileBlast BanqueId $BId Segment $nSegment Gaps #$FileBlast BanqueId $BId Segment $nSegment Orientation #$FileBlast BanqueId $BId Segment $nSegment Align #$FileBlast BanqueId $BId Segment $nSegment AlignLineaire #$FileBlast BanqueId $BId Segment $nSegment AlignBrut #$FileBlast BanqueId $BId Segment $nSegment DQ #$FileBlast BanqueId $BId Segment $nSegment FQ #$FileBlast BanqueId $BId Segment $nSegment DS #$FileBlast BanqueId $BId Segment $nSegment FS global TableauContennantLesInformationsDuBlast if {$args == ""} {return} if {[string equal -nocase [lindex $args 0] "unset"]} { if {[info exists TableauContennantLesInformationsDuBlast]} {unset TableauContennantLesInformationsDuBlast} return } if {[string equal -nocase [lindex $args 0] "unsetfile"]} { set File [lindex $args 1] if {$File == "" || ![file exists $File] || ![info exists TableauContennantLesInformationsDuBlast]} {return} array unset TableauContennantLesInformationsDuBlast "$File*" if {0} { foreach Index [array name TableauContennantLesInformationsDuBlast] { if {![regexp "^$File" $Index]} {continue} unset TableauContennantLesInformationsDuBlast($Index) } } return } set FileBlast [lindex $args 0] if {![file exists $FileBlast]} {return} set Quoi [join $args ","] if {[info exists TableauContennantLesInformationsDuBlast($Quoi)]} {return [set TableauContennantLesInformationsDuBlast($Quoi)]} if {[info exists TableauContennantLesInformationsDuBlast($FileBlast,Exists)]} {return} set TableauContennantLesInformationsDuBlast($FileBlast,Exists) 1 LoadBlast TableauContennantLesInformationsDuBlast $FileBlast if {[info exists TableauContennantLesInformationsDuBlast($Quoi)]} {return [set TableauContennantLesInformationsDuBlast($Quoi)]} return } proc AskBlastMoi {} { DecortiqueBlast $Fichier "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN } proc AskClust_Gretta {args} { global TabClust_Gretta ####PROCEDURE HYPER SPECIFIQUE DE GRETTA#### set QUOI [join $args ","] if {[info exists TabClust_Gretta($QUOI) ]} {return [set TabClust_Gretta($QUOI)]} if {[info exists TabClust_Gretta(Loaded)]} {return} set TabClust_Gretta(Loaded) 1 set NbCluster 6 set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierSel "[RepertoireDuGenome]/Data/20040910_SelectionDesBoites.txt" set TabClust_Gretta(LesClusters) {} set TabClust_Gretta(LesAffy) {} set TabClust_Gretta(LesNoms) {} set F [open $FichierSel] set i 0 while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set Ligne [split $Ligne "\t"] set Affy [lindex $Ligne 0] set Cluster [lindex $Ligne 1] if {![info exists TabClust_Gretta(Cluster,$Cluster,LesAffy)]} { set TabClust_Gretta(Cluster,$Cluster,LesAffy) {} set TabClust_Gretta(Cluster,$Cluster,LesNoms) {} lappend TabClust_Gretta(LesClusters) $Cluster } if {![info exists TabClust_Gretta(Affy,$Affy,LesClusters)]} { set TabClust_Gretta(Affy,$Affy,LesClusters) {} lappend TabClust_Gretta(LesAffy) $Affy } lappend TabClust_Gretta(Affy,$Affy,LesClusters) $Cluster incr i set TabAffy($Cluster,$Affy) 1 } close $F foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesNoms] { set Affy [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] set LesExpressions [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom LesExpressions] for {set i 0} {$i < $NbCluster} {incr i} { set Cluster [expr $i + 1] set Expr [lindex $LesExpressions $i] if {$Expr < 0} {continue} if {![info exists TabAffy($Cluster,$Affy)]} {continue} if {![info exists TabClust_Gretta(Nom,$Nom,LesClusters)]} { set TabClust_Gretta(Nom,$Nom,LesClusters) {} lappend TabClust_Gretta(LesNoms) $Nom } lappend TabClust_Gretta(Nom,$Nom,LesClusters) $Cluster lappend TabClust_Gretta(Cluster,$Cluster,LesNoms) $Nom } } if { [info exists TabClust_Gretta($QUOI) ]} {return [set TabClust_Gretta($QUOI)]} return } proc AskCorrespondances {args} { ### Interroge le fichier de correspondances ### global TableauCorrespondances #unset #FileCorrespondances NbGscopeBox #FileCorrespondances LesClusters #FileCorrespondances GscopeBox $GscopeBox #... #a completer # set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauCorrespondances]} {unset TableauCorrespondances} return } set Quoi [join $args ","] if {[info exists TableauCorrespondances($Quoi)]} { return [set TableauCorrespondances($Quoi)]} if {![file exists $FirstArg]} { return } if {[info exists TableauCorrespondances($FirstArg,EstCharge)]} { return } set TableauCorrespondences($FirstArg,EstCharge) 1 LoadCorrespondances TableauCorrespondances $FirstArg if {[info exists TableauCorrespondances($Quoi)]} { return [set TableauCorrespondances($Quoi)]} return } proc AskDBTSS {args} { ### Interroge la banque DBTSS ### global TableauDBTSS #unset #LesId #$Id Organism #$Id SeqTFA #$IdCourt Organism #$IdCourt SeqTFA set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauDBTSS]} {unset TableauDBTSS} return } set Quoi [join $args ","] if {[info exists TableauDBTSS($Quoi) ]} { return [set TableauDBTSS($Quoi)]} if {[info exists TableauDBTSS(EstCharge)]} { return } set TableauDBTSS(EstCharge) 1 LoadDBTSS TableauDBTSS if {[info exists TableauDBTSS($Quoi)]} { return [set TableauDBTSS($Quoi)]} return } proc AskEPDIdOrga {args} { ### Interroge le fichier EPDIdOrga ### global TableauEPDIdOrga #unset #LesEPDIds #LesEPDOrgas #LesEPDOrganisms #LesEPDOrganismsLongs #EPDOrga $EPDOrga LesEPDIds #EPDId $EPDId EPDOrga #EPDId $EPDId EPDOrganism #EPDId $EPDId EPDOrganismLong set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauEPDIdOrga]} {unset TableauEPDIdOrga} return } set Quoi [join $args ","] if {[info exists TableauEPDIdOrga($Quoi)]} { return [set TableauEPDIdOrga($Quoi)]} if {[info exists TableauEPDIdOrga(EstCharge)]} { return } set TableauEPDIdOrga(EstCharge) 1 LoadEPDIdOrga TableauEPDIdOrga if {[info exists TableauEPDIdOrga($Quoi)]} { return [set TableauEPDIdOrga($Quoi)]} return } proc AskEPDOrgas {args} { ### Interroge le fichier EPDOrgas ### global TableauEPDOrgas #unset #LesEPDOrgas #LesEPDOrganisms #LesEPDOrganismsLongs #EPDOrga $EPDOrga EPDOrganism #EPDOrga $EPDOrga EPDOrganismLong #EPDOrganism $EPDOrganism EPDOrganismLong set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauEPDOrgas]} {unset TableauEPDOrgas} return } set Quoi [join $args ","] if {[info exists TableauEPDOrgas($Quoi)]} { return [set TableauEPDOrgas($Quoi)]} if {[info exists TableauEPDOrgas(EstCharge)]} { return } set TableauEPDOrgas(EstCharge) 1 LoadEPDOrgas TableauEPDOrgas if {[info exists TableauEPDOrgas($Quoi)]} { return [set TableauEPDOrgas($Quoi)]} return } proc AskEponine {args} { ### Interroge le fichier eponine ### global TableauEponine #unset #FileEponine NbEponines --> nb eponinepredictions dans le FileEponine #FileEponine LesEponines --> liste des indices des Eponines #FileEponine n $n D #FileEponine n $n F #FileEponine n $n Sens #FileEponine n $n Score set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauEponine]} {unset TableauEponine} return } set Quoi [join $args ","] if {[info exists TableauEponine($Quoi)]} { return [set TableauEponine($Quoi)]} if {![file exists $FirstArg]} { return } if {[info exists TableauEponine($FirstArg,EstCharge)]} { return } set TableauEponine($FirstArg,EstCharge) 1 LoadEponine TableauEponine $FirstArg if {[info exists TableauEponine($Quoi)]} { return [set TableauEponine($Quoi)]} return } proc AskFileInfosDuFileTFAs {args} { ### Interroge le fichier FileInfosDuFileTFAs ### global TableauInfosDuFileTFAs #unsetall #unsetfile $FileInfosDuFileTFAs #$FileInfosDuFileTFAs LesSeqNames #$FileInfosDuFileTFAs SeqName $SeqName Id #$FileInfosDuFileTFAs SeqName $SeqName SeqLength #$FileInfosDuFileTFAs SeqName $SeqName Entete set FirstArg [lindex $args 0] if {$FirstArg == "unsetall"} { if {[info exists TableauInfosDuFileTFAs]} {unset TableauInfosDuFileTFAs} return } if {[string equal -nocase $FirstArg "unsetfile"]} { set File [lindex $args 1] if {$File == "" || ![file exists $File] || ![info exists TableauInfosDuFileTFAs]} {return} foreach Index [array name TableauInfosDuFileTFAs] { if {![regexp "^$File" $Index]} {continue} unset TableauInfosDuFileTFAs($Index) } return } set Quoi [join $args ","] if {[info exists TableauInfosDuFileTFAs($Quoi)]} {return [set TableauInfosDuFileTFAs($Quoi)]} if {![file exists $FirstArg]} {return} if {[info exists TableauInfosDuFileTFAs($FirstArg,EstCharge)]} {return} set TableauInfosDuFileTFAs(EstCharge) 1 LoadFileInfosDuFileTFAs TableauInfosDuFileTFAs $FirstArg if {[info exists TableauInfosDuFileTFAs($Quoi)]} {return [set TableauInfosDuFileTFAs($Quoi)]} return } proc AskFirstEF {args} { #unset #FileFirstEF LesSens #FileFirstEF Sens $Sens LesPredictions #FileFirstEF Sens $Sens Prediction $Prediction LesRangs #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang DPromoter #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang FPromoter #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang PPromoter #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang DExon #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang FExon #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang PExon #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang PDonor #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang InfoCpG #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang DCpG #FileFirstEF Sens $Sens Prediction $Prediction Rang $Rang FCpG global TableauFirstEF set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauFirstEF]} {unset TableauFirstEF} return } set Quoi [join $args ","] if {[info exists TableauFirstEF($Quoi)]} { return [set TableauFirstEF($Quoi)]} if {![file exists $FirstArg] || [info exists TableauFirstEF($FirstArg,EstCharge)]} { return } set TableauFirstEF($FirstArg,EstCharge) 1 LoadFirstEF TableauFirstEF $FirstArg if {[info exists TableauFirstEF($Quoi)]} { return [set TableauFirstEF($Quoi)]} return } proc AskForNumberingGenbank {} { global AskForNumberingGenbank if {[info exists AskForNumberingGenbank]} { return $AskForNumberingGenbank } if {[OuiOuNon "Something is wrong with numbering genbank ORFs\n Don't panic ... \n Do I stop to ask for your help ?"]} { set AskForNumberingGenbank 0 return 0 } if {[OuiOuNon "Do I always ask for your help ?"]} { set AskForNumberingGenbank 1 } return 1 } proc AskGOAnalyse {args} { global TabGOAnalyseXML #unset #unsetfile $FichierXML #$FichierXML IdMin #$FichierXML NorMDMin #$FichierXML PMin #$FichierXML FMin #$FichierXML LesMethodes #$FichierXML LesAccess #$FichierXML Query Id #$FichierXML Query Name #$FichierXML Fichier MSF #$FichierXML Fichier CLUST #$FichierXML Methode $Methode LesTypes #$FichierXML Methode $Methode Type $Type LesGO #$FichierXML Methode $Methode Type $Type GO $GO LesAccess #$FichierXML Methode $Methode Type $Type GO $GO NbAccess #$FichierXML Methode $Methode LesAccess #$FichierXML Methode $Methode Access $Access Types $Type LesGO #$FichierXML Methode $Methode Access $Access LesTypes #$FichierXML Type $Type GO $GO Definition set PremierArg [lindex $args 0] if {[string equal -nocase $PremierArg "unsetall"]} { unset TabGOAnalyseXML return } if {[string equal -nocase $PremierArg "unsetfile"]} { set File [lindex $args 1] if {$File == "" || ![file exists $File] || ![info exists TabGOAnalyseXML]} {return} foreach Index [array name TabGOAnalyseXML] { Espionne $Index if {![regexp "^$File" $Index]} {continue} unset TabGOAnalyseXML($Index) } return } set Quoi [join $args ","] #Espionne $args if {![file exists $PremierArg]} {return} if {[info exists TabGOAnalyseXML($Quoi) ]} {return [set TabGOAnalyseXML($Quoi)]} if {[info exists TabGOAnalyseXML($PremierArg,EstCharge)]} {return} set TabGOAnalyseXML($PremierArg,EstCharge) 1 LoadGOAnalyse TabGOAnalyseXML $PremierArg if {[info exists TabGOAnalyseXML($Quoi) ]} {return [set TabGOAnalyseXML($Quoi)]} return } proc AskGOGraph {args} { #AskGOGraph search id $GO #AskGOGraph search name $name #AskGOGraph search synonym $synonym #AskGOGraph $GO get name #AskGOGraph $GO get namespace #AskGOGraph $GO get alternateIDs #AskGOGraph $GO get definition #AskGOGraph $GO get synonyms #AskGOGraph $GO get xrefs #AskGOGraph $GO get parents #AskGOGraph $GO get childs #AskGOGraph $GO get allParents #AskGOGraph $GO get allChilds LoadGOGraph switch -regexp [lindex $args 0] { "^search$" { set search [lindex $args 2] switch -exact [lindex $args 1] { "id" { if {[GOGraph node exists $search]} { return $search } regsub -all {\"} $search {\\\0} search return [GOGraph nodes -filter "lsearchNodeKeyGraphFilter -exact alternateIDs \"$search\""] } "name" { return [GOGraph nodes -key name -value $search] } "synonym" { regsub -all {\"} $search {\\\0} search return [GOGraph nodes -filter "lsearchNodeKeyGraphFilter -exact synonyms \"$search\""] } } } "^GO:\\d+" { set GO [AskGOGraph search id [lindex $args 0]] if {![GOGraph node exists $GO]} {return ""} switch -exact [lindex $args 1] { "get" { set key [lindex $args 2] switch -exact $key { "name" - "namespace" - "alternateIDs" - "definition" - "synonyms" - "xrefs" { if {[GOGraph node keyexists $GO $key]} { return [GOGraph node get $GO $key] } return "" } "parents" { return [GOGraph nodes -out $GO] } "childs" { return [GOGraph nodes -in $GO] } "allParents" { set allParents {} foreach parent [AskGOGraph $GO get parents] { lappend allParents $parent set parentParents [AskGOGraph $parent get allParents] if {[llength $parentParents] != 0} { set allParents [concat $allParents $parentParents] } } return $allParents } "allChilds" { set allChilds {} foreach child [AskGOGraph $GO get childs] { lappend allChilds $child set childChilds [AskGOGraph $child get allChilds] if {[llength $childChilds] != 0} { set allChilds [concat $allChilds $childChilds] } } return $allChilds } } } } } } error "[lindex [info level 0] 0]: could not parse arguments \"$args\"" } proc AskLMS {args} { global TabDesLMSEtDesMotifsDuBallast if {$args == ""} {return} set PremArg [lindex $args 0] if {[string equal -nocase $PremArg "unset"]} { unset TabDesLMSEtDesMotifsDuBallast return } if {![file exists $PremArg]} {return} set Quoi [join $args ","] if {[info exists TabDesLMSEtDesMotifsDuBallast($Quoi)]} {return [set TabDesLMSEtDesMotifsDuBallast($Quoi)]} if {[info exists TabDesLMSEtDesMotifsDuBallast($PremArg,EstCharge)]} {return} set TabDesLMSEtDesMotifsDuBallast($PremArg,EstCharge) 1 LoadLMS TabDesLMSEtDesMotifsDuBallast $PremArg if {[info exists TabDesLMSEtDesMotifsDuBallast($Quoi)]} {return [set TabDesLMSEtDesMotifsDuBallast($Quoi)]} return } proc AskLesPagesInfos {args} { global TabDesPagesInfosEnMemoire set FirstArg [lindex $args 0] if {$FirstArg == "set"} { set Access [lindex $args 1] set PageInfo [lindex $args 2] set TabDesPagesInfosEnMemoire($Access) $PageInfo return } if {$FirstArg == "unset"} { if {[info exists TabDesPagesInfosEnMemoire]} {unset TabDesPagesInfosEnMemoire} return } if {$FirstArg == "ask"} { set Id [lindex $args 1] if {![info exists TabDesPagesInfosEnMemoire($Id)]} {return} return [set TabDesPagesInfosEnMemoire($Id)] } if {$FirstArg == "load"} { set LesId [lindex $args 1] set Banque [lindex $args 2] foreach ListeId [LaListeSplittee $LesId "100"] { TabLesPageInfos TabDesPagesInfosEnMemoire $ListeId $Banque } return } return } proc AskMSF {args} { global TabSequencesDesProteinesDansMSF #unset #$FileMSF LesAccess #$FileMSF $Access -> sequence set PremierArg [lindex $args 0] if {$PremierArg == "unset"} { if {[info exists TabSequencesDesProteinesDansMSF]} {unset TabSequencesDesProteinesDansMSF} return } if {![file exists $PremierArg]} {return} if {[info exists TabSequencesDesProteinesDansMSF] && ![info exists TabSequencesDesProteinesDansMSF($PremierArg,EstCharge)]} { unset TabSequencesDesProteinesDansMSF } set Quoi [lindex $args 1] if {[info exists TabSequencesDesProteinesDansMSF($Quoi)]} { return [set TabSequencesDesProteinesDansMSF($Quoi)] } if {[info exists TabSequencesDesProteinesDansMSF($PremierArg,EstCharge)]} {return} if {[info exists TabSequencesDesProteinesDansMSF]} {unset TabSequencesDesProteinesDansMSF} set TabSequencesDesProteinesDansMSF($PremierArg,EstCharge) 1 DecortiqueUnMSF $PremierArg TabSequencesDesProteinesDansMSF(LesAccess) TabSequencesDesProteinesDansMSF if {![info exists TabSequencesDesProteinesDansMSF($Quoi)]} {return} return [set TabSequencesDesProteinesDansMSF($Quoi)] } proc AskMatch {args} { ### Interroge la sortie du programme match ### #unset #FileMatch LesMotifs #FileMatch Motif $MotifId NbPresence #FileMatch Motif $MotifId n $i Debut #FileMatch Motif $MotifId n $i Fin #FileMatch Motif $MotifId n $i Sens #FileMatch Motif $MotifId n $i Sequence #FileMatch Motif $MotifId n $i ScoreCore #FileMatch Motif $MotifId n $i ScoreMotif global TableauMatchSearches set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauMatchSearches]} {unset TableauMatchSearches} return } set Quoi [join $args ","] if {[info exists TableauMatchSearches($Quoi)]} { return [set TableauMatchSearches($Quoi)]} if {![file exists $FirstArg] || [info exists TableauMatchSearches($FirstArg,EstCharge)]} { return } set TableauMatchSearches($FirstArg,EstCharge) 1 LoadMatch TableauMatchSearches $FirstArg if {[info exists TableauMatchSearches($Quoi)]} { return [set TableauMatchSearches($Quoi)]} return } proc AskMatchMatrixAccess2Id2Name {args} { ### Interroge le fichier d'informations sur la librairie de matrices de Match ### global TableauMatchMatrixAccess2Id2Name #unset #Access $Access Id #Access $Access Name #Id $Id Access #Id $Id Name set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TableauMatchMatrixAccess2Id2Name]} {unset TableauMatchMatrixAccess2Id2Name} return } set File [MatchDir MatrixLibrary] set Quoi [join $args ","] if {$FirstArg == "Id"} {regsub -all {\$} $Quoi "_" Quoi} if {[info exists TableauMatchMatrixAccess2Id2Name($File,$Quoi)]} { return [set TableauMatchMatrixAccess2Id2Name($File,$Quoi)]} if {![file exists $File]} { return } if {[info exists TableauMatchMatrixAccess2Id2Name($File,EstCharge)]} { return } set TableauMatchMatrixAccess2Id2Name($File,EstCharge) 1 LoadMatchMatrixAccess2Id2Name TableauMatchMatrixAccess2Id2Name $File if {[info exists TableauMatchMatrixAccess2Id2Name($File,$Quoi)]} { return [set TableauMatchMatrixAccess2Id2Name($File,$Quoi)]} return } proc AskOptionsDeDrawBlast {args} { global TabOptionsDeDrawBlast set FirstArg [lindex $args 0] if {[string equal $FirstArg "unsetall"]} { if {[info exists TabOptionsDeDrawBlast]} {unset TabOptionsDeDrawBlast} return } if {[string equal $FirstArg "set"]} { set Qui [join [lrange $args 1 end-1] ","] set Quoi [lindex $args end ] set TabOptionsDeDrawBlast($Qui) $Quoi return } if {[string equal $FirstArg "append"]} { set Qui [join [lrange $args 1 end-1] ","] set Quoi [lindex $args end ] if {![info exists TabOptionsDeDrawBlast($Qui)]} {set TabOptionsDeDrawBlast($Qui) {}} lappend TabOptionsDeDrawBlast($Qui) $Quoi return } set Qui [join [lrange $args 1 end] ","] if {[string equal $FirstArg "unset"]} { if {![info exists TabOptionsDeDrawBlast($Qui)]} {return} unset TabOptionsDeDrawBlast($Qui) return } if {[string equal $FirstArg "exists"]} { if {![info exists TabOptionsDeDrawBlast($Qui)]} {return 0} return 1 } if {[string equal $FirstArg "ask"]} { if {![info exists TabOptionsDeDrawBlast($Qui)]} {return} return [set TabOptionsDeDrawBlast($Qui)] } return } proc AskPrositeScan {Lseq} { set result [PrositeWebService -seq $Lseq] package require json set dres [::json::json2dict $result] set val [dict get $dres matchset] set i 1 foreach e $val { foreach {k v} $e { set Tres($i,$k) $v #puts "\t$k $v" } incr i } return [array get Tres] } proc AskTOLDBUpdates {} { set db [InitTaxDB] unset -nocomplain ::db set res [list] $db eval {begin transaction} lappend res [$db eval {select value from admin where var = 'goldUpdate'}] lappend res [$db eval {select value from admin where var = 'taxoUpdate'}] $db eval {commit} $db close update return $res } proc AskUCSC {args} { ### Frederic Chalmel, Biozentrum Basel, 2005 ### ### ask du fichier refSeqAli.txt ### ### Liste des access de mRNA RefSeq de l'organisme considere: ### $File ListOfID --> liste des access de mRNA RefSeq ### Localisation des mRNA RefSeq sur le chromosome: ### $File ID $ID ListOfPosition --> liste $ID $SeqFrom $SeqTo $Chr $ChrFrom $ChrTo $Strand ### Carte exonique: ### $File ID $ID Chrom $Chr From $ChrFrom To $ChrTo Strand $Strand ListOfPosition ### --> liste de [list $ID $Start1 $End1 $Chr $Start2 $End2 $Strand] global TabUCSCLocation # proc AskUCSC args -> %File ListOfID -> return the list of the ID # proc AskUCSC args -> %File ID %ID ListOfPosition -> return the list of the position of the %ID ID on the genome set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TabUCSCLocation]} {unset TabUCSCLocation} return } if {$FirstArg == "unsetfile"} { set File [lindex $args 1] if {$File == "" || ![file exists $File] || ![info exists TabUCSCLocation]} {return} foreach Index [array name TabUCSCLocation] { if {![regexp "^$File" $Index]} {continue} unset TabUCSCLocation($Index) } return } set File $FirstArg set ARG [join $args ","] if {[info exists TabUCSCLocation($ARG)] } {return [set TabUCSCLocation($ARG)]} if {[info exists TabUCSCLocation($File,Loaded)]} {return} LoadUCSC TabUCSCLocation $File if {[info exists TabUCSCLocation($ARG)] } {return [set TabUCSCLocation($ARG)]} return } proc AssemblyDbTools {{dbName ""}} { while {$dbName==""} { if {[OnTraite Bathy2010]} { set dbName "Bathymodiolus"; break } } NSAssemblyDb::setCanal $dbName set win [toplevel [NomDe fenetre]] wm title $win "Assembly database tools" set libEditButton [button $win[NomDe button] -text "Library editor" -command "LibraryEditorGui"] pack $libEditButton -fill x set popDbButton [button $win[NomDe button] -text "Populate database" -command "PopulateAssemblyDbGui"] pack $popDbButton -fill x #rR Specific Bathyumodiolus !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if {$dbName!="Bathymodiolus"} { return 0 } set popBathyButton [button $win[NomDe button] -text "Populate Bathymodiolus with Bathy2010" -command "PopulateBathy2010"] pack $popBathyButton -fill x return 0 } proc AssignNbInternal {n} { global Tx set Lgen [DonneGenealogieMem $n] set cum 0 foreach g $Lgen { set isI $Tx(isInt,$g) if {$isI} { set Tx(NbInt,$g) 0 incr cum } else { set Tx(NbInt,$g) $cum if {$cum} { set cum 0 } } } return } proc AssignSeqToGroup {} { global LNDG SDG GroupeDeLaSequence TDuGroupeDesSeqs set Lg [lsearch -all -inline -regexp $LNDG {Group[0-9]+}] if {[llength $Lg] > 0} { set Lg [lrange $LNDG 1 end] } else { set Lg "GroupeToutLeMonde" } foreach g $Lg { if {$g eq "GroupeToutLeMonde"} { set ng "Group0" } else { set ng $g } foreach n [set SDG($g)] { set GroupeDeLaSequence($n) $ng set TDuGroupeDesSeqs($n) $ng } } if {! [info exists GroupeDeLaSequence]} { foreach n [set SDG(GroupeToutLeMonde)] { set GroupeDeLaSequence($n) "Group0" } } return } proc AssigneBootstrap {AId} { global TSum Abr HashRef set t [set Abr(Arbre,$AId)] foreach n [$t nodes] { if {[$t isleaf $n]} {continue} if {$n eq "root"} { set v 1000000 } elseif {! [info exists TSum($n)]} { puts "no TSum for $n" set v 0 } else { set v [set TSum($n)] } $t set $n nboot $v } set Ser [$t serialize] set Abr(ArbreSer,$AId) $Ser return } proc AssigneGroupesDuRSF {} { global NomsGrpIntegral global LesNomsSeqGrpIntegral global LNOrdali global LeGroupeDesSeqs global TabRSF set NomsGrpIntegral {} foreach nom $LNOrdali { if {! [info exists TabRSF($nom,group)]} {continue} set grp [set TabRSF($nom,group)] if {[lsearch $NomsGrpIntegral "Group$grp"]==-1} { lappend NomsGrpIntegral "Group$grp" } lappend LesNomsSeqGrpIntegral(Group$grp) $nom } return } proc AssigneGroupesIntegral {} { global LeGroupeDesSeqs global TDuGroupeDesSeqs global DocMacsim global NomsGrpIntegral global LesNomsSeqGrpIntegral global LNOrdali global TabRSF catch {unset NomsGrpIntegral} catch {unset LesNomsSeqGrpIntegral} if {[info exists TabRSF]} { AssigneGroupesDuRSF return } foreach nom $LNOrdali { if {[string trim $nom] eq ""} {continue} set grp [set TDuGroupeDesSeqs($nom)] lappend NomsGrpIntegral $grp lappend LesNomsSeqGrpIntegral($grp) $nom } set NomsGrpIntegral [lsort -unique $NomsGrpIntegral] return } proc AssigneLePoidsDesSeqs {} { global LePoidsDesSeqs global IdXml global LesPoidsDesSequences global LNOrdali global FichierMSF global FichierXML set LePoidsDesSeqs {} if {[info exists FichierMSF]} { LitLesPoidsDuMSF $FichierMSF foreach n $LNOrdali { set p [set LesPoidsDesSequences($n)] lappend LePoidsDesSeqs $p } } if {[info exists FichierXML]} { ExtraitLesPoids $IdXml LePoidsDesSeqs } return } proc AssigneLePoint {aa NmGrp pos} { global LNDG ListeDesPiliersDuGroupe set aa [string toupper $aa] set YaPoint 1 foreach groupe [lrange $LNDG 1 end] { if {[string compare $groupe $NmGrp] && $YaPoint} { set PilierCompare [lrange [set ListeDesPiliersDuGroupe($groupe)] $pos $pos] set YaPoint [expr {![regexp $aa $PilierCompare]}] } } return $YaPoint } proc AssigneLesPoids {{nmgrp ""}} { global LesPoidsDesSequences Defauts Sequences LNOrdali OrdTmpDir if {! [set Defauts(Poids)] && ![set Defauts(Poids2)] && ![set Defauts(Poids3)]} { foreach s $LNOrdali { set LesPoidsDesSequences($s) 1. } return } set in [file join $OrdTmpDir "in"] set out [file join $OrdTmpDir "out"] CreeLeTfa $in $nmgrp eval exec "calcule_weight $in $out" LitLesPoidsDuMSF $out $nmgrp file delete -force $in file delete -force $out return } proc AssigneTagsCouleursDesAA {} { global NomTextSeq TagCouleurAA foreach t {STAC DE HN G P Q ILMV RK FYW} { foreach a [split $t ""] { set TagCouleurAA($a) $t set TagCouleurAA([string tolower $a]) $t } } set conftag [ExtraitTable "[TypeSeq]"] foreach c $conftag { lassign $c n f b $NomTextSeq tag configure Tag$n -foreground $f -background $b } return } proc AssigneValParPos {} { global TableScore global ListeScore global LNOrdali global SDG global LNDG global ListeDesPiliersDuGroupe global TestCourant RecupereReference CreeFeaturesOrdali foreach g [lrange $LNDG 0 end-1] { if {[info exists TableScore]} { array unset TableScore catch {unset TableScore} } puts "Nom Grp : $g" puts "NSeqs : [llength $SDG($g)]" if {$g == "GroupeToutLeMonde"} {set g ""} ScoreDeRosace $g ScoreDeThompson $g ScoreDeRanganatan $g CreeListeScore $g # fait les differentes combinaisons de parametres # # norm dsp nVp mcos dist Ranganatan # 0 1 2 3 4 5 # n p v m d g LanceLesCalculs 5 $g LanceLesCalculs 4 $g LanceLesCalculs 0 $g LanceLesCalculs 45 $g LanceLesCalculs 045 $g } return } proc AtomePicke {Lr} { global RasM foreach l $Lr { if {[string first "Atom: " $l] == 0} { scan $l "Atom: %s %d Group: %s %d Chain: %s" atName atNb resName resNb chain set RasM(Picked) [list $atName $resName $resNb $chain] set RasM(AtLabel) "$resName $resNb $atName , $chain" } } return } proc Atomes2Grille {bbox Lc Lx Lan} { set Step [set ::Defauts(Sampling)] set Offset [expr {$::SpS(Offset)+1}] set OffX $Offset set OffY $Offset set OffZ $Offset puts "Step $Step" puts "Offset $Offset" lassign $bbox xm xx ym yx zm zx set xmi [expr {int($xm*$Step)-1}] set ymi [expr {int($ym*$Step)-1}] set zmi [expr {int($zm*$Step)-1}] set xxi [expr {int($xx*$Step)+1}] set yxi [expr {int($yx*$Step)+1}] set zxi [expr {int($zx*$Step)+1}] lassign $Lc xc yc zc set xci [expr {round($xc*$Step)}] set yci [expr {round($yc*$Step)}] set zci [expr {round($zc*$Step)}] # faut Offset sur chaque bord set resX [expr {int($xx-$xm+0.5)*$Step+1+2*$Offset}] set resY [expr {int($yx-$ym+0.5)*$Step+1+2*$Offset}] set resZ [expr {int($zx-$zm+0.5)*$Step+1+2*$Offset}] # Faut que la resolution de la grille soit un # multiple de 3 set k 4 set Extra 0 while {$resX % (1*$Step) || $resX % ($k*$Step) } { incr Extra set resX [expr {int($xx-$xm+0.5)*$Step+1+2*$OffX+$Extra}] } set Extra 0 while {$resY % (1*$Step) || $resY % ($k*$Step) } { incr Extra set resY [expr {int($yx-$ym+0.5)*$Step+1+2*$OffY+$Extra}] } set Extra 0 while {$resZ % (1*$Step) || $resZ % ($k*$Step) } { incr Extra set resZ [expr {int($zx-$zm+0.5)*$Step+1+2*$OffZ+$Extra}] } puts "\nresX $resX resY $resY resZ $resZ" for {set k 0} {$k < $resZ } {incr k} { for {set j 0} {$j < $resY } {incr j} { for {set i 0} {$i < $resX } {incr i} { set T($i,$j,$k) 0 } } } set g [open coord w] foreach rx $Lx lna $Lan { foreach v $rx an $lna { lassign $v x y z puts $g [format " %8.3f %8.3f %8.3f" $x $y $z] set x [expr {round($x-$xm)*$Step+1+$OffX}] set y [expr {round($y-$ym)*$Step+1+$OffY}] set z [expr {round($z-$zm)*$Step+1+$OffZ}] FillTheBox T $x $y $z $an #set T($x,$y,$z) 1. } } close $g puts "fill table T [llength [array names T]]" foreach e [array names T] { lassign [split $e ,] i j k if {($i < 0 || $i >= $resX) || ($j < 0 || $j >= $resY) || ($k < 0 || $k >= $resZ)} {puts $e} } set Lv [list] lappend Lv [list $resX $resY $resZ] #ExpandMask T $resX $resY $resZ #ExpandMask T $resX $resY $resZ #ExpandMask T $resX $resY $resZ #ExpandMask T $resX $resY $resZ #ContractMask T $resX $resY $resZ #ContractMask T $resX $resY $resZ #ContractMask T $resX $resY $resZ #ContractMask T $resX $resY $resZ #ExpandMask T $resX $resY $resZ #ExpandMask T $resX $resY $resZ #ContractMask T $resX $resY $resZ set f [open test w] #lappend Lv [list 8 8 8] puts "" for {set k 0} {$k < $resZ } {incr k} { for {set j 0} {$j < $resY } {incr j} { for {set i 0} {$i < $resX } {incr i} { lappend Lp [set T($i,$j,$k)] puts -nonewline $f [set T($i,$j,$k)] if {[set T($i,$j,$k)] == 0} { puts -nonewline "." } else { puts -nonewline "O" } } puts "" } puts "\n" } close $f puts "$resX $resY $resZ" exit lappend Lv $Lp set Ltrg [mctcl $Lv] return $Ltrg } proc AttendLeSavant {Animateur Ip Cafe Science Ident} { global SavantSpecialise if { [eof $Animateur] } { #PotinsDeQuestion "AttendLeSavant $Animateur $Ip $Cafe $Science recu 'eof'" close $Animateur return } if { [gets $Animateur Reponse] == -1 } { #PotinsDeQuestion "$Animateur $Ip $Cafe $Science mauvaise reponse" return } if { 0 && ! [EstUnSavant $Reponse]} { #PotinsDeQuestion "$Animateur $Ip $Cafe $Science a retourne $Reponse qui n'est pas un savant." return } set SavantSpecialise($Science,$Cafe,$Ident) $Reponse } proc AttendreLeFichier {Fichier {TimeOut ""}} { set Attente 1000 while { 1 } { if {[file exists $Fichier]} { return $Fichier } if {$TimeOut != "" } { set TimeOut [expr $TimeOut-$Attente] if {$TimeOut<0} { return "" } } after $Attente } } proc AttendreLeFichierDuServeurWscope {Fichier {TimeOut ""}} { set Attente 1000 while { 1 } { if {[file exists $Fichier]} { return $Fichier } if {$TimeOut != "" } { set TimeOut [expr $TimeOut-$Attente] if {$TimeOut<0} { return "" } } after $Attente } } proc AttendreTantQueExiste {Fichier {TimeOut 60000}} { while {[file exists $Fichier]} { after $TimeOut } return $Fichier } proc AttriCoord {} { set Fichier "/genomics/link/EVI0/parser/f2attritoutaccess" set LesLignes [LesLignesDuFichier $Fichier] set A 0; set B 0 set AccessSansCoord {} set JaiTrouveLigne 0 foreach Ligne $LesLignes { if {[regexp {^ligne} $Ligne]} { set JaiTrouveLigne 1 set NumLigne [StringApres "ligne" dans $Ligne] puts $NumLigne continue } if {$JaiTrouveLigne} { #pr RA if {![regexp {^Les} $Ligne]} { incr A continue } set LesAccess [string range $Ligne [expr [string first " " $Ligne]+1] end] puts "$LesAccess" #pr SsAccess if {[regexp "vide" $LesAccess]} { incr B continue } set ListeDesAccess [split $LesAccess " ,"] foreach Access $ListeDesAccess { set chr [LocUcsc $Access chrom] set txstart [LocUcsc $Access txStart] set txend [LocUcsc $Access txEnd] set cdsstart [LocUcsc $Access cdsStart] set cdsend [LocUcsc $Access cdsEnd] puts "$Access=$chr $txstart - $txend" #puts "$Access=$cdsstart - $cdsend" if {$txstart==""} { lappend AccessSansCoord "$NumLigne=>$Access" } } } set JaiTrouveLigne 0 } set nb [llength $AccessSansCoord] puts "nb d'access sans coord= $nb" puts "nb de ra= $A" puts "nb ss access= $B" SauveLesLignes $AccessSansCoord dans /genomics/link/EVI0/parser/LesLignesSansCoord.txt } proc AttriDesAcDna {} { set A 0; set B 0; set C 0; set Pr 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] set jaitrouve 0 set genenamefait 0 set AccDna "" set LAccDna {} set LesAccDna {} if { [regexp {^RA[0-9]+} $Des1] } { continue } if { [regexp {\?} $Ac1] } { continue } if { $Ac1!="" } { incr A Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 =>$A" if {$Ac2==""} { incr B set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { puts "pour $I, prend Ac1=$Ac1 et NM=$NM (A)" } else { puts "pour $I, prend Ac1=$Ac1 (Abis)" } } else { puts "pour $I, prend Ac1=$Ac1 (B)" } } if {[regexp {^Homo$} $Genre]} { incr Pr puts "pour ligne $I, travail sur prot Ac3=$Ac3 Ac4=$Ac4=>$Pr (C)" if { [regexp "," $Ac3] } {puts "attention le prog ne prend pas en compte ce cas"} set GenreP3 [OrgDuProt [string trim $Ac3]] if { $GenreP3 == "" } { #jamais ce cas puts "pls=>ligne=$I Acc=$Ac3 Id=attention PAS FICHESpls\n" if {$Ac4 == ""} { puts "dois prendre la def" } if {$Ac4 != ""} { puts "dois prendre prot_acc_piqor"} continue } if {[regexp {^Homo} $GenreP3]} { if {$Ac4!=""} { #cherche nm de prot_acc_piqor if { [regexp "," $Ac4] } {puts "attention2 le prog ne prend pas en compte ce cas"} set ListeAc4 [split $Ac4 ","] foreach ChaqueAc4 $ListeAc4 { set AccDna [AttriDesAcDnaParProt $ChaqueAc4] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (D)" set LAccDna [split $AccDna " "] foreach Q $LAccDna {LConcat LesAccDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc4] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (E)" set LAccDna [split $AccDna " "] foreach S $LAccDna {LConcat LesAccDna $S} } } } set LesAccDna [lsort -unique $LesAccDna] set LesAccDna [join $LesAccDna " "] puts "pour $I, prend accdna=$LesAccDna (Ebis)" } else { set genenamefait 1 #voir avec la def set AccDna [AttriDesAcDnaParGeneName $Des1 $Des2] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (F)" } } if {$genenamefait == 0 && $AccDna == ""} { set AccDna [AttriDesAcDnaParGeneName $Des1 $Des2] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (G)" } } if {$AccDna == ""} { puts "pas d'acccess" lappend LesLignesPauvres $I } } if {[regexp {^Mus} $GenreP3]} { if {$Ac4!=""} { #jamais ce cas set AccsProt "$Ac3,$Ac4" puts "acess prot=$AccsProt" set ListeAccsProt [split $AccsProt ","] foreach ChaqueAccProt $ListeAccsProt { #recupere nm set AccDna [AttriDesAcDnaParProt $ChaqueAccProt] if {$AccDna!=""} { puts "chaqueaccprot=$ChaqueAccProt a acc dna $AccDna (H)" set LAccDna [split $AccDna " "] foreach Q $LAccDna {LConcat LesAccDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAccProt] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (I)" set LAccDna [split $AccDna " "] foreach S $LAccDna {LConcat LesAccDna $S} } } } set LesAccDna [lsort -unique $LesAccDna] set LesAccDna [join $LesAccDna " "] puts "pour $I, prend accdna=$LesAccDna (Ibis)" } else { #recupere que prot_acc set AccDna [AttriDesAcDnaParProt $Ac3] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (J)" set LAccDna [split $AccDna " "] foreach Q $LAccDna {LConcat LesAccDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $Ac3] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (K)" set LAccDna [split $AccDna " "] foreach S $LAccDna {LConcat LesAccDna $S} } } set LesAccDna [lsort -unique $LesAccDna] set LesAccDna [join $LesAccDna " "] puts "pour $I, prend accdna=$LesAccDna (Kbis)" } if {$AccDna == ""} { set AccDna [AttriDesAcDnaParGeneName $Des1 $Des2] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (L)" } } if {$AccDna == ""} { puts "pas d'access" lappend LesLignesPauvres $I } } } } if {$Ac2!=""} { incr C if { $Ac1==$Ac2 } { puts "pour $I, prend refseq=$Ac2 (meme numero dans DNA_acc et refseq)(1)" set jaitrouve 1 } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { puts "pour $I, prend refseq=$Ac2 (meme numero dans DNA_acc et refseq)(2)" set jaitrouve 1 } } } if { $jaitrouve==0 } { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { puts "pour $I, prend Ac1=$Ac1 et Ac2=$Ac2 et NM=$NM (3)" set ListeAc2 [split $Ac2 ","] set ListeNM [split $NM " "] set Tout [concat $ListeAc2 $ListeNM] set Tout [lsort -unique $Tout] puts "pour $I, prend Ac1=$Ac1 et Ac2+NM=$Tout (3bis)" } else { puts "pour $I, prend Ac1=$Ac1 et Ac2=$Ac2 (4)" } } else { puts "pour $I, prend Ac1=$Ac1 et Ac2=$Ac2 (5)" } } if {[regexp {^Homo$} $Genre]} { puts "pour $I, prend que refseq=$Ac2 (6)" } } } } } foreach LignePauvre $LesLignesPauvres { puts "lignepauvre=$LignePauvre" } set nbdepauvre [llength $LesLignesPauvres] Espionne "nbdepauvre=$nbdepauvre" Espionne "$Pr=nb de ligne ou on se sert de la prot" Espionne "$A=nb de ligne ac dna_acc" Espionne "$B=nb de ligne ac dna_acc et ss refseq_piqor" Espionne "$C=nb de ligne ac dna_acc et ac refseq_piqor" } proc AttriDesAcDnaClient {} { set total 0; set D 0; set E 0; set F 0; set G 0 foreach I [RetChip5 ListOf Index] { set AC [RetChip5 $I "DNA_acc"] if {[regexp {\?} $AC]} {set AC ""} if { $AC!="" } { set LesAc [split $AC ","] foreach Ac $LesAc { incr total if { [regexp "^NM_" $Ac] || [regexp "^XM_" $Ac] || [regexp "^NR_" $Ac] } { incr D puts "la ligne $I a deja un no NM=$Ac" } else { incr E set NM [MrnaRefseqUcscMouse $Ac "Nm"] if { $NM != "" } { incr F puts "pour $I, Ac=$Ac correspond a $NM ($F)" } else { incr G puts "pour $I, Ac=$Ac correspond a rien" } } } } } Espionne "il y a $total access DNA_acc" Espionne "il y a $D access qui ont deja un NM dans DNA_acc" Espionne "il y a $E access qui ont un access transforme" Espionne "il y a $F access qui ont 1 corresp" Espionne "il y a $G access qui ont pas corresp" } proc AttriDesAcDnaClient_AEffacer {} { set D 0 set E 0 set F 0 foreach I [RetChip2 ListOf Index] { set Ac [RetChip2 $I "DNA_acc"] if { $Ac!="" } { if { [regexp "," $Ac] } { puts "attention il y a pls access sur une ligne" } if { [regexp "^NM_" $Ac] } { incr D #puts "la ligne $I a deja un no NM=$Ac" } else { incr E set NM [MrnaRefseqUcscMouse $Ac "Nm"] if { $NM != "" } { puts "pour $I, Ac=$Ac correspond a $NM ($F)" incr F } else { lappend LesPauvres $Ac } } } else { continue } } SauveLesLignes $LesPauvres dans [Fiches]/lesPauvres.txt set nb [llength $LesPauvres] Espionne "il y a $D lignes qui ont deja un NM dans DNA_acc" Espionne "il y a $E lignes qui ont un access transforme" Espionne "il y a $nb lignes qui ont pas corresp" Espionne "il y a $F lignes qui ont 1 corresp" } proc AttriDesAcDnaParGb {AC} { set LesAcsGbDeLaLigne {} set GetzOut ""; set GetzOutRs "" set CommandeRs "getz \"\\\[protein-acc:$AC\\\] > \(\\\[refseq-mol:mRNA\\\] & \\\[refseq-org:Mus musculus\\\]\)\" \-vf acc" set GetzOutRs [eval exec $CommandeRs] if { $GetzOutRs != "" } { #Espionne "Acc=$AC getzoutRs=$GetzOutRs" set LesLignesDeGetzOutRs [split $GetzOutRs "\n"] foreach LigneDeGetzOutRs $LesLignesDeGetzOutRs { set AcRs "" scan $LigneDeGetzOutRs "%s %s" Ref AcRs #Espionne "acrs=$AcRs" LConcat LesAcsGbDeLaLigne $AcRs } } if {$GetzOutRs == ""} { set Commande "getz \"\\\[protein-acc:$AC\\\] > \(\\\[genbankfull-mol:mRNA\\\] & \\\[genbankfull-org:Mus musculus\\\]\)\ \" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut!=""} { #Espionne "Acc=$AC getzoutGb=$GetzOut" set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref ""; set AcGb ""; set mRNAGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb #Espionne "acgb=$AcGb" LConcat LesAcsGbDeLaLigne $AcGb if {![regexp {^NM_} $AcGb]} { set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] #Espionne "mRNAGb $mRNAGb" if {$mRNAGb != ""} { #Espionne "un NM=$mRNAGb correspond a access AcGb=$AcGb" set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { set GenreChaqmRNAGb [OrgDuNmOuGb $ChaqmRNAGb] #Espionne "$ChaqmRNAGb $GenreChaqmRNAGb" if {[regexp {^Mus} $GenreChaqmRNAGb]} { LConcat LesAcsGbDeLaLigne $ChaqmRNAGb } } } } } } if {$GetzOut == ""} { set LesAcsGbDeLaLigne "" #Espionne "Acc=$AC getzout=vide pas fiche ou pas mrna" } } set LesAcsGbDeLaLigne [ListeSansDoublon $LesAcsGbDeLaLigne] set LesAcsGbDeLaLigne [join $LesAcsGbDeLaLigne " "] return $LesAcsGbDeLaLigne } proc AttriDesAcDnaParGb_AEffacer {AC} { set LesAcsGbDeLaLigne {} set GetzOut "" set Commande "getz \"\\\[protein-acc:$AC\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { set LesAcsGbDeLaLigne "" #puts "Acc=$AC getzout=vide pas fiche ou pas mrna" } if {$GetzOut != ""} { #puts "Acc=$AC getzout=$GetzOut" set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" set mRNAGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb #puts "acgb=$AcGb" LConcat LesAcsGbDeLaLigne $AcGb if {![regexp {^NM_} $AcGb]} { set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { #puts "un NM=$mRNAGb correspond a access AcGb=$AcGb" set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesAcsGbDeLaLigne $ChaqmRNAGb } } } } } set LesAcsGbDeLaLigne [ListeSansDoublon $LesAcsGbDeLaLigne] set LesAcsGbDeLaLigne [join $LesAcsGbDeLaLigne " "] return $LesAcsGbDeLaLigne } proc AttriDesAcDnaParGeneName {DescriC DescriM} { set LesNMsDeLaLigne {} set LesGeneNames {} set DescriMOri $DescriM set ListeNm {}; set ListmRNA {}; set ListmRNA1 {} set LesLignes1 {}; set LesLignes2 {} set LesNMs2 ""; set ListeNm2 {}; set mRNA12 {}; set ListmRNA12 {} #Espionne "descrimori=$DescriMOri" set IPF [string first ")" $DescriM] if {$IPF>0} { set DescriM [string range $DescriM 0 [incr IPF -1]] regsub -all {[\(\:]} $DescriM " " DescriM regsub -all -nocase { OR } $DescriM " " DescriM set LesGeneNames [LesMotsDeLaLigne $DescriM] set DescriM [string trim $DescriM] #Espionne "descrim=$DescriM" } scan $DescriC "%s" DescriC set DescriC [string trim $DescriC] regsub -all {\(} $DescriC "" DescriC regsub -all {\)} $DescriC "" DescriC #Espionne "DescriC= $DescriC" set LesDescriC [split $DescriC ","] foreach LeDescriC $LesDescriC { lappend LesGeneNames $LeDescriC } if {$LesGeneNames == {} } { return "" } set LesGeneNames [ListeSsElmtVide $LesGeneNames] set LesGeneNames [ListeSansDoublon $LesGeneNames NoCase] #Espionne "lesgenenames=$LesGeneNames" foreach GN $LesGeneNames { if {[regexp {^Neo} $GN]} {continue} #if {[regexp {^RA} $GN]} {continue} #Espionne "GN $GN" set LesNMs [RefLinkUcscMouse $GN NM] #Espionne "LesNMs $LesNMs" if {$LesNMs!=""} { #Espionne "1" set ListeNm [split $LesNMs " "] foreach ChaqueNM $ListeNm { set GenreChaqueNM [OrgDuNmOuGb $ChaqueNM] #Espionne "$ChaqueNM $GenreChaqueNM" if {[regexp {^Mus} $GenreChaqueNM]} { #Espionne "ChaqueNM $ChaqueNM" LConcat LesNMsDeLaLigne $ChaqueNM if { ![regexp {^NM_} $ChaqueNM] || ![regexp {^XM_} $ChaqueNM] || ![regexp {^NR_} $ChaqueNM] } { set mRNA1 [MrnaRefseqUcscMouse $ChaqueNM "Nm"] #Espionne "mRNA1 $mRNA1" if {$mRNA1 != ""} { #Espionne "un NM=$mRNA1 correspond a access $ChaqueNM" set ListmRNA1 [split $mRNA1 " "] foreach ChaqmRNA1 $ListmRNA1 { set GenreChaqmRNA1 [OrgDuNmOuGb $ChaqmRNA1] #Espionne "$ChaqmRNA1 $GenreChaqmRNA1" if {[regexp {^Mus} $GenreChaqmRNA1]} { #Espionne "ChaqmRNA1 $ChaqmRNA1" LConcat LesNMsDeLaLigne $ChaqmRNA1 } } } } } } } set LesNMs2 [RefGeneUcscMouse $GN Name] #Espionne "LesNMs2 $LesNMs2" if {$LesNMs2!=""} { #Espionne "2" set ListeNm2 [split $LesNMs2 " "] foreach ChaqueNM2 $ListeNm2 { set GenreChaqueNM2 [OrgDuNmOuGb $ChaqueNM2] #Espionne "$ChaqueNM2 $GenreChaqueNM2" if {[regexp {^Mus} $GenreChaqueNM2]} { #Espionne "ChaqueNM2 $ChaqueNM2" LConcat LesNMsDeLaLigne $ChaqueNM2 if { ![regexp {^NM_} $ChaqueNM2] || ![regexp {^XM_} $ChaqueNM2] || ![regexp {^NR_} $ChaqueNM2] } { set mRNA12 [MrnaRefseqUcscMouse $ChaqueNM2 "Nm"] #Espionne "mRNA12 $mRNA12" if {$mRNA12 != ""} { #Espionne "un NM=$mRNA12 correspond a access $ChaqueNM2" set ListmRNA12 [split $mRNA12 " "] foreach ChaqmRNA12 $ListmRNA12 { set GenreChaqmRNA12 [OrgDuNmOuGb $ChaqmRNA12] #Espionne "$ChaqmRNA12 $GenreChaqmRNA12" if {[regexp {^Mus} $GenreChaqmRNA12]} { #Espionne "ChaqmRNA12 $ChaqmRNA12" LConcat LesNMsDeLaLigne $ChaqmRNA12 } } } } } } } #Espionne "GN2 $GN" set Commande1 "getz \"\(\(\\\[refseq-Gene:$GN\\\] > parent\) \& \\\[refseq-Organism:mus musculus\\\]\)\" \-f acc" set GetzOut1 [eval exec $Commande1] set LesLignes1 [split $GetzOut1 "\n"] foreach Ligne1 $LesLignes1 { #Espionne "Ligne1 $Ligne1" if {![regexp {^ACCESSION} $Ligne1]} { continue } else { scan $Ligne1 "%s %s" bidon Acc1 if {[regexp {^NW} $Acc1] || [regexp {^NT} $Acc1] || [regexp {^NC} $Acc1]} { continue } else { #Espionne "Acc1 $Acc1" LConcat LesNMsDeLaLigne $Acc1 } } } #Espionne "GN3 $GN" set Commande2 "getz \"\(\(\\\[genbankfull-Gene:$GN\\\] > parent\) \& \\\[genbankfull-Organism:mus musculus\\\]\)\" \-f acc" set GetzOut2 [eval exec $Commande2] set LesLignes2 [split $GetzOut2 "\n"] foreach Ligne2 $LesLignes2 { #Espionne "Ligne2 $Ligne2" if {![regexp {^ACCESSION} $Ligne2]} { continue } else { scan $Ligne2 "%s %s" bidon Acc2 #Espionne "Acc2 $Acc2" LConcat LesNMsDeLaLigne $Acc2 set mRNA [MrnaRefseqUcscMouse $Acc2 "Nm"] if {$mRNA != ""} { #Espionne "un NM=$mRNA correspond a access $Acc2" set ListmRNA [split $mRNA " "] foreach ChaqmRNA $ListmRNA { set GenreChaqmRNA [OrgDuNmOuGb $ChaqmRNA] #Espionne "$ChaqmRNA $GenreChaqmRNA" if {[regexp {^Mus} $GenreChaqmRNA]} { #Espionne "ChaqmRNA $ChaqmRNA" LConcat LesNMsDeLaLigne $ChaqmRNA } } } } } } set LesNMsDeLaLigne [ListeSansDoublon $LesNMsDeLaLigne] #Espionne $LesNMsDeLaLigne #set LesNMsDeLaLigne [join $LesNMsDeLaLigne " "] return $LesNMsDeLaLigne } proc AttriDesAcDnaParGeneName2 {} { set LesLignes [NomLigne ListeDes Lignes] foreach Ligne $LesLignes { set TousLesNoms [NomLigne $Ligne Noms] set ListeDesNoms [split $TousLesNoms " "] foreach Nom $ListeDesNoms { set Fichier "[RepertoireDuGenome]/nuctfa/$Nom" set LesLignes [LesLignesDuFichier $Fichier] set premiereligne [lindex $LesLignes 0] if {[regexp "bidon" $premiereligne]} { regsub "EVI" $Nom "" NomSsEvi set LesElmts [split $NomSsEvi ""] set NomSsEvi [string range $NomSsEvi 0 end-1] if {[lindex $LesElmts 0]=="0"} { set NomSsEvi [string range $NomSsEvi 1 end] } lappend LesLignesBidons $NomSsEvi } } } Espionne "$LesLignesBidons" foreach Ligne $LesLignesBidons { Espionne "" Espionne "$Ligne" set DescriC [RetChip5 $Ligne "description_customer"] set DescriM [RetChip5 $Ligne "description_memorec"] set LesNMsDeLaLigne {} set LesGeneNames {} set DescriMOri $DescriM set ListeNm {}; set ListmRNA {}; set ListmRNA1 {} set LesLignes1 {}; set LesLignes2 {} set LesNMs2 ""; set ListeNm2 {}; set mRNA12 {}; set ListmRNA12 {} Espionne "descrimori=$DescriMOri" set IPF [string first ")" $DescriM] if {$IPF>0} { set DescriM [string range $DescriM 0 [incr IPF -1]] regsub -all {[\(\:]} $DescriM " " DescriM regsub -all -nocase { OR } $DescriM " " DescriM set LesGeneNames [LesMotsDeLaLigne $DescriM] set DescriM [string trim $DescriM] Espionne "descrim=$DescriM" } scan $DescriC "%s" DescriC set DescriC [string trim $DescriC] regsub -all {\(} $DescriC "" DescriC regsub -all {\)} $DescriC "" DescriC Espionne "DescriC= $DescriC" set LesDescriC [split $DescriC ","] foreach LeDescriC $LesDescriC { lappend LesGeneNames $LeDescriC } if {$LesGeneNames == {} } { Espionne "pas de genename" continue } set LesGeneNames [ListeSsElmtVide $LesGeneNames] set LesGeneNames [ListeSansDoublon $LesGeneNames NoCase] Espionne "lesgenenames=$LesGeneNames" foreach GN $LesGeneNames { if {[regexp {^Neo} $GN]} {continue} Espionne "GN $GN" set Commande1 "getz \"\(\\\[refseq-AllText:$GN\\\] \& \\\[refseq-Organism:mus musculus\\\]\)\" \-f acc" set GetzOut1 [eval exec $Commande1] Espionne "GetzOut1 $GetzOut1" set LesLignes1 [split $GetzOut1 "\n"] foreach Ligne1 $LesLignes1 { #Espionne "Ligne1 $Ligne1" if {![regexp {^ACCESSION} $Ligne1]} { continue } else { scan $Ligne1 "%s %s" bidon Acc1 if {[regexp {^NW} $Acc1] || [regexp {^NT} $Acc1] || [regexp {^NC} $Acc1]} { continue } else { #Espionne "Acc1 $Acc1" LConcat LesNMsDeLaLigne $Acc1 } } } set Commande2 "getz \"\(\\\[genbankfull-AllText:$GN\\\] \& \\\[genbankfull-Organism:mus musculus\\\]\)\" \-f acc" set GetzOut2 [eval exec $Commande2] Espionne "GetzOut2 $GetzOut2" set LesLignes2 [split $GetzOut2 "\n"] foreach Ligne2 $LesLignes2 { #Espionne "Ligne2 $Ligne2" if {![regexp {^ACCESSION} $Ligne2]} { continue } else { scan $Ligne2 "%s %s" bidon Acc2 #Espionne "Acc2 $Acc2" LConcat LesNMsDeLaLigne $Acc2 set mRNA [MrnaRefseqUcscMouse $Acc2 "Nm"] if {$mRNA != ""} { Espionne "un NM=$mRNA correspond a access $Acc2" set ListmRNA [split $mRNA " "] foreach ChaqmRNA $ListmRNA { set GenreChaqmRNA [OrgDuNmOuGb $ChaqmRNA] # Espionne "$ChaqmRNA $GenreChaqmRNA" if {[regexp {^Mus} $GenreChaqmRNA]} { #Espionne "ChaqmRNA $ChaqmRNA" LConcat LesNMsDeLaLigne $ChaqmRNA } } } } } Espionne "Chez Homme" set Commande3 "getz \"\(\(\\\[refseq-Gene:$GN\\\] > parent\) \& \\\[refseq-Organism:mus musculus\\\]\)\" \-f acc" set GetzOut3 [eval exec $Commande3] Espionne "GetzOut3 $GetzOut3" set Commande4 "getz \"\(\(\\\[genbankfull-Gene:$GN\\\] > parent\) \& \\\[genbankfull-Organism:mus musculus\\\]\)\" \-f acc" set GetzOut4 [eval exec $Commande4] Espionne "GetzOut4 $GetzOut4" set Commande5 "getz \"\(\\\[refseq-AllText:$GN\\\] \& \\\[refseq-Organism:homo sapiens\\\]\)\" \-f acc" set GetzOut5 [eval exec $Commande5] Espionne "GetzOut5 $GetzOut5" set Commande6 "getz \"\(\\\[genbankfull-AllText:$GN\\\] \& \\\[genbankfull-Organism:homo sapiens\\\]\)\" \-f acc" set GetzOut6 [eval exec $Commande6] Espionne "GetzOut6 $GetzOut6" } set LesNMsDeLaLigne [ListeSansDoublon $LesNMsDeLaLigne] set LesNMsDeLaLigne [join $LesNMsDeLaLigne " "] Espionne $LesNMsDeLaLigne } } proc AttriDesAcDnaParGeneName_AEffacer {DescriC DescriM} { set LesNMsDeLaLigne {} set LesGeneNameMemorec {} set DescriMOri $DescriM # Espionne "descrimori=$DescriMOri" set IPF [string first ")" $DescriM] if {$IPF>0} { set DescriM [string range $DescriM 0 [incr IPF -1]] regsub -all {[\(\:]} $DescriM " " DescriM regsub -all -nocase { OR } $DescriM " " DescriM set LesGeneNameMemorec [LesMotsDeLaLigne $DescriM] #Espionne "descrim=$DescriM" #Espionne "lesgenenamememorec=$LesGeneNameMemorec" } if {$LesGeneNameMemorec != {}} { foreach GN $LesGeneNameMemorec { set LesNMs [RefLinkUcscMouse $GN NM] #puts "++$LesNMs" LConcat LesNMsDeLaLigne $LesNMs } } scan $DescriC "%s" DescriC #Espionne "descriC=$DescriC" if {$DescriC != ""} { set LesNMs [RefLinkUcscMouse $DescriC NM] #puts "--$LesNMs" LConcat LesNMsDeLaLigne $LesNMs } set LesNMsDeLaLigne [ListeSansDoublon $LesNMsDeLaLigne] set LesNMsDeLaLigne [join $LesNMsDeLaLigne " "] return $LesNMsDeLaLigne } proc AttriDesAcDnaParProt {AC} { set LesAccDeLaLigne "" set IdLu [IdDuProt $AC] set Nm [LocUcsc $IdLu] #Espionne "$AC $IdLu nm=$Nm" if { $Nm=="" } { #Espionne "pas d'accessnm" set retour "" } if { $Nm!="" } { set ListNm [split $Nm " "] foreach ChaqNm $ListNm { if { [regexp {^NM_} $ChaqNm] || [regexp {^XM_} $ChaqNm] || [regexp {^NR_} $ChaqNm] } { #Espionne "cet acc=$ChaqNm a deja un numero nm" set GenreChaqNm [OrgDuNmOuGb $ChaqNm] #Espionne "GenreChaqNm= $GenreChaqNm" if {[regexp {^Mus} $GenreChaqNm]} { #Espionne "ChaqNm $ChaqNm" LConcat LesAccDeLaLigne $ChaqNm } } else { #Espionne "chaqnm=$ChaqNm" LConcat LesAccDeLaLigne $ChaqNm set mRNA [MrnaRefseqUcscMouse $ChaqNm "Nm"] if {$mRNA != ""} { #Espionne "un NM=$mRNA correspond a access $ChaqNm" set ListmRNA [split $mRNA " "] foreach ChaqmRNA $ListmRNA { set GenreChaqmRNA [OrgDuNmOuGb $ChaqmRNA] if {[regexp {^Mus} $GenreChaqmRNA]} { #Espionne "ChaqmRNA $ChaqmRNA" LConcat LesAccDeLaLigne $ChaqmRNA } } } } } set LesAccDeLaLigne [ListeSansDoublon $LesAccDeLaLigne] set LesAccDeLaLigne [join $LesAccDeLaLigne " "] set retour $LesAccDeLaLigne } return $retour } proc AttriDesAcDnaParProt_AEffacer {AC} { #puts "acess=$AC" set IdLu [IdDuProt $AC] #puts "idlu=$IdLu" set Nm [LocUcsc $IdLu] #puts "nm=$Nm" if { $Nm=="" } { #puts "pas d'accessnm" set retour "" } if { $Nm!="" } { set ListNm [split $Nm " "] foreach ChaqNm $ListNm { if { [regexp {^NM_} $ChaqNm] } { #puts "cet acc=$ChaqNm a deja un numero nm" LConcat LesAccDeLaLigne $ChaqNm } else { #puts "chaqnm=$ChaqNm" LConcat LesAccDeLaLigne $ChaqNm set mRNA [MrnaRefseqUcscMouse $ChaqNm "Nm"] if {$mRNA != ""} { #puts "un NM=$mRNA correspond a access $ChaqNm" set ListmRNA [split $mRNA " "] foreach ChaqmRNA $ListmRNA { LConcat LesAccDeLaLigne $ChaqmRNA } } } } set LesAccDeLaLigne [ListeSansDoublon $LesAccDeLaLigne] set LesAccDeLaLigne [join $LesAccDeLaLigne " "] set retour $LesAccDeLaLigne } return $retour } proc AttriDesAcDna_AEffacer {} { set A 0 set B 0 set C 0 set Pr 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] set jaitrouve 0 set genenamefait 0 set AccDna "" set LAccDna {} set LesAccDna {} if { [regexp {^RA[0-9]+} $Des1] } { continue } if { [regexp {\?} $Ac1] } { continue } if { $Ac1!="" } { incr A puts "ligne $I Ac1=$Ac1 Ac2=$Ac2 =>$A" if {$Ac2==""} { incr B set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { puts "pour $I, prend Ac1=$Ac1 et NM=$NM (A)" } else { puts "pour $I, prend Ac1=$Ac1 (Abis)" } } else { puts "pour $I, prend Ac1=$Ac1 (B)" } } if {[regexp {^Homo$} $Genre]} { incr Pr puts "pour ligne $I, travail sur prot Ac3=$Ac3 Ac4=$Ac4=>$Pr (C)" if { [regexp "," $Ac3] } {puts "attention le prog ne prend pas en compte ce cas"} set GenreP3 [OrgDuProt [string trim $Ac3]] if { $GenreP3 == "" } { #jamais ce cas puts "pls=>ligne=$I Acc=$Ac3 Id=attention PAS FICHESpls\n" if {$Ac4 == ""} { puts "dois prendre la def" } if {$Ac4 != ""} { puts "dois prendre prot_acc_piqor"} continue } if {[regexp {^Homo} $GenreP3]} { if {$Ac4!=""} { #cherche nm de prot_acc_piqor if { [regexp "," $Ac4] } {puts "attention2 le prog ne prend pas en compte ce cas"} set ListeAc4 [split $Ac4 ","] foreach ChaqueAc4 $ListeAc4 { set AccDna [AttriDesAcDnaParProt $ChaqueAc4] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (D)" set LAccDna [split $AccDna " "] foreach Q $LAccDna {LConcat LesAccDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc4] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (E)" set LAccDna [split $AccDna " "] foreach S $LAccDna {LConcat LesAccDna $S} } } } set LesAccDna [lsort -unique $LesAccDna] set LesAccDna [join $LesAccDna " "] puts "pour $I, prend accdna=$LesAccDna (Ebis)" } else { set genenamefait 1 #voir avec la def set AccDna [AttriDesAcDnaParGeneName $Des1 $Des2] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (F)" } } if {$genenamefait == 0 && $AccDna == ""} { set AccDna [AttriDesAcDnaParGeneName $Des1 $Des2] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (G)" } } if {$AccDna == ""} { puts "pas d'acccess" lappend LesLignesPauvres $I } } if {[regexp {^Mus} $GenreP3]} { if {$Ac4!=""} { #jamais ce cas set AccsProt "$Ac3,$Ac4" puts "acess prot=$AccsProt" set ListeAccsProt [split $AccsProt ","] foreach ChaqueAccProt $ListeAccsProt { #recupere nm set AccDna [AttriDesAcDnaParProt $ChaqueAccProt] if {$AccDna!=""} { puts "chaqueaccprot=$ChaqueAccProt a acc dna $AccDna (H)" set LAccDna [split $AccDna " "] foreach Q $LAccDna {LConcat LesAccDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAccProt] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (I)" set LAccDna [split $AccDna " "] foreach S $LAccDna {LConcat LesAccDna $S} } } } set LesAccDna [lsort -unique $LesAccDna] set LesAccDna [join $LesAccDna " "] puts "pour $I, prend accdna=$LesAccDna (Ibis)" } else { #recupere que prot_acc set AccDna [AttriDesAcDnaParProt $Ac3] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (J)" set LAccDna [split $AccDna " "] foreach Q $LAccDna {LConcat LesAccDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $Ac3] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (K)" set LAccDna [split $AccDna " "] foreach S $LAccDna {LConcat LesAccDna $S} } } set LesAccDna [lsort -unique $LesAccDna] set LesAccDna [join $LesAccDna " "] puts "pour $I, prend accdna=$LesAccDna (Kbis)" } if {$AccDna == ""} { set AccDna [AttriDesAcDnaParGeneName $Des1 $Des2] if {$AccDna!=""} { puts "pour $I, prend accdna=$AccDna (L)" } } if {$AccDna == ""} { puts "pas d'access" lappend LesLignesPauvres $I } } } } if {$Ac2!=""} { incr C if { $Ac1==$Ac2 } { puts "pour $I, prend refseq=$Ac2 (meme numero dans DNA_acc et refseq)(1)" set jaitrouve 1 } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { puts "pour $I, prend refseq=$Ac2 (meme numero dans DNA_acc et refseq)(2)" set jaitrouve 1 } } } if { $jaitrouve==0 } { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { puts "pour $I, prend Ac1=$Ac1 et Ac2=$Ac2 et NM=$NM (3)" set ListeAc2 [split $Ac2 ","] set ListeNM [split $NM " "] set Tout [concat $ListeAc2 $ListeNM] set Tout [lsort -unique $Tout] puts "pour $I, prend Ac1=$Ac1 et Ac2+NM=$Tout (3bis)" } else { puts "pour $I, prend Ac1=$Ac1 et Ac2=$Ac2 (4)" } } else { puts "pour $I, prend Ac1=$Ac1 et Ac2=$Ac2 (5)" } } if {[regexp {^Homo$} $Genre]} { puts "pour $I, prend que refseq=$Ac2 (6)" } } } } } foreach LignePauvre $LesLignesPauvres { puts "lignepauvre=$LignePauvre" } set nbdepauvre [llength $LesLignesPauvres] Espionne "nbdepauvre=$nbdepauvre" Espionne "$Pr=nb de ligne ou on se sert de la prot" Espionne "$A=nb de ligne ac dna_acc" Espionne "$B=nb de ligne ac dna_acc et ss refseq_piqor" Espionne "$C=nb de ligne ac dna_acc et ac refseq_piqor" } proc AttriDesSsDnaAcProt {} { #pour prot_acc_piqor tous sont souris set W 0; set K 0; set J 0 set pauv 0 set accpauv 0 set mixte 0 set refseq 0 set genbank 0 set vraimentpauv 0 set F 0 foreach I [RetChip5 ListOf Index] { set Des1 [RetChip5 $I "description_customer"] set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "refseq_PIQOR"] set Ac2 [RetChip5 $I "DNA_acc"] set Ac3 [RetChip5 $I "prot_acc_PIQOR"] set Ac4 [RetChip5 $I "prot_acc"] set jaitrouvemixte 0 set ListProt {} set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set G 0 set pastrouveprtsaccprot 0 if {$Ac1=="" && $Ac2==""} { if {$Ac3!="" && $Ac4!=""} { set Ac "$Ac3,$Ac4" set ListProt [split $Ac ","] set ListProt [lsort -unique $ListProt] foreach Prot $ListProt { set IdLu1 [IdDuProt $Prot] set NM [LocUcsc $IdLu1] LConcat LesIdsDeLaLigne $IdLu1 LConcat LesNmsDeLaLigne $NM } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] puts "2col=>ligne=$I Accs=$Ac3 et $Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne" continue } if {$Ac3!=""} { incr W Espionne "\n$Ac3 de la ligne $I (col prot_acc_piqor)=>$W" if {[regexp "," $Ac3]} {incr K} else {incr J} set SesAcs [split $Ac3 ","] foreach Ac $SesAcs { set IdLu2 ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" set IdLu2 [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu2 if {$IdLu2 == ""} { puts "ligne=$I Acc=$Ac3 Id=PAS FICHES" set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } set NM [LocUcsc $IdLu2] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { puts "un NM=$mRNA correspond a access chaqnm=$ChaqNM" set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts "ligne=$I Acc=$Ac getzout=vide pas fiche ou pas mrna" } if {$GetzOut != ""} { incr G; incr F puts "ligne=$I Acc=$Ac3 getzout=$GetzOut" set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb puts "acgb=$AcGb" LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { puts "un NM=$mRNAGb correspond a access AcGb=$AcGb" set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { incr accpauv puts "cet access_prot n'a pas d'access_mrna" lappend LesAccsPauvres $Ac } } if { [llength $SesAcs] != [llength $LesIdsDeLaLigne] } { puts "tous les access n'ont pas d'ID" #ok } if { $LesNmsDeLaLigne != {} && [llength $LesIdsDeLaLigne] > [llength $LesNmsDeLaLigne] } { puts "attention certn id correspondent pas a un nm" #ok } if { $LesNmsDeLaLigne == {} && $LesAcsGbDeLaLigne != {} && [llength $SesAcs] > [llength $LesAcsGbDeLaLigne] } { set pastrouveprtsaccprot 1 #ligne 507 puts "attention certn acc_prot correspondent pas a un gb" } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { [llength $LesIdsDeLaLigne] > 1 } { puts "plus d'un id" } if { $LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {} } { incr mixte set jaitrouvemixte 1 if { $LesmRNADeLaLigne != {} || $LesmRNAGbDeLaLigne !={} } { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne" puts "acgb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne AcGb=$LesAcsGbDeLaLigne" } } if { ! $jaitrouvemixte && $LesNmsDeLaLigne != {} } { incr refseq if { $LesmRNADeLaLigne != {} } { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne" } } if { ! $jaitrouvemixte && $LesAcsGbDeLaLigne != {} } { incr genbank if { $pastrouveprtsaccprot } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (1)" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne (2)" } } if { $LesAcsParGNDeLaLigne!={} } { if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (3)" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (4)" } } } if { ! $pastrouveprtsaccprot } { if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (5)" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne (6)" } } } if { $LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={} } { incr pauv puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne pas d'access" lappend LesLignesPauvres "ligne=$I access=$Ac3" set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { incr vraimentpauv puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne vraiment pas d'access" lappend LesLignesVraimentPauvres "ligne=$I access=$Ac3" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne" } } } } } Espionne "\n$W=nombre de lignes avec access prot ds col prot_acc_piqor" Espionne "$K=nombre qui ont pls access ds col prot_acc_piqor" Espionne "$J=nombre qui ont un access ds col prot_acc_piqor\n" Espionne "$accpauv=nb d'acc_prot sans access_mrna" Espionne "$mixte=nb de lignes ac mrna_refseq et ac mrna_genbank" Espionne "$refseq=nb de lignes ac mrna_refseq" Espionne "$genbank=nb de lignes ac mrna_genbank" Espionne "$pauv=nb de lignes ou il y a aucun access_mrna qui correspond" Espionne "$vraimentpauv=nb de lignes ou il y a vraiment pas d'access_mrna\n" foreach x $LesLignesPauvres {puts "x=$x"} foreach y $LesLignesVraimentPauvres {puts "y=$y"} } proc AttriDesSsDnaAcProt2 {} { #pour prot_acc dois prendre en compte que les souris set W 0 set K 0 set J 0 set A 0 set B 0 set Z 0 set accpauv 0 set mixte 0 set refseq 0 set genbank 0 set pauv 0 set vraimentpauv 0 set pauvSsSouris 0 set vraimentpauvSsSouris 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "refseq_PIQOR"] set Ac2 [RetChip2 $I "DNA_acc"] set Ac4 [RetChip2 $I "prot_acc"] if { [regexp {^RA[0-9]+} $Des1] } { continue } if { [regexp {\?} $Ac4] } { continue } set jaitrouvemixte 0 set pls 0 set PasSouris 0 set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set cont 0 set LigneQueSouris 0 set PauvSsSouris 0 set SsFicheProt 0 set dejafait1 0 set dejafait2 0 set vide 0 if {$Ac1=="" && $Ac2==""} { if {$Ac4!=""} { incr W Espionne "\n$Ac4 de la ligne $I (col prot_acc)=>$W" if { [regexp "," $Ac4] } { set pls 1 incr K } else { incr J } set SesAcs [split $Ac4 ","] foreach Ac $SesAcs { set GenreLu ""; set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" set GenreLu [OrgDuProt $Ac] if { $GenreLu == "" } { puts "ligne=$I Acc=$Ac Id=PAS FICHES PROT" set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesIdsDeLaLigne $IdLu LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } if { $GenreLu != "" && ![regexp -nocase {^Mus} $GenreLu]} { if {! $pls} { incr Z incr PasSouris puts "$Ac4=pas souris=>$Z" set cont 1; break } if {$pls} { incr PasSouris puts "$Ac=pas souris passe suivant=>PasSouris=$PasSouris" continue } } set IdLu [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu set NM [LocUcsc $IdLu] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { puts "un NM=$mRNA correspond a access chaqnm=$ChaqNM" set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts "ligne=$I Acc=$Ac getzout=PAS FICHES GB ou pas mrna" } if {$GetzOut != ""} { puts "ligne=$I Acc=$Ac getzout=$GetzOut" set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb puts "acgb=$AcGb" LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { puts "un NM=$mRNAGb correspond a access AcGb=$AcGb" set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { incr accpauv puts "cet access_prot n'a pas d'access_mrna" lappend LesAccsPauvres $Ac if {$pls} {incr vide} } } if { [llength $SesAcs] == $PasSouris } { puts "la ligne $I a que des access non souris" set LigneQueSouris 1 } if { [expr [llength $SesAcs] - $PasSouris] != [llength $LesIdsDeLaLigne] } { puts "tous les access n'ont pas d'ID" set SsFicheProt 1 } if { $LesNmsDeLaLigne != {} && [llength $LesIdsDeLaLigne] > [llength $LesNmsDeLaLigne] } { puts "attention certn id ne correspondent pas a un nm" incr A } if { $LesNmsDeLaLigne == {} && $LesAcsGbDeLaLigne != {} && [llength $SesAcs] > [llength $LesAcsGbDeLaLigne] } { puts "attention certn acc_prot correspondent pas a un gb" incr B } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { [llength $LesIdsDeLaLigne] > 1 } { puts "plus d'un id" } if { $LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {} } { incr mixte set jaitrouvemixte 1 if { $LesmRNADeLaLigne != {} || $LesmRNAGbDeLaLigne !={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne" puts "acgb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (1)" } else { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne AcGb=$LesAcsGbDeLaLigne (2)" } } if { ! $jaitrouvemixte && $LesNmsDeLaLigne != {} } { incr refseq if { $LesmRNADeLaLigne != {} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne (3)" } else { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne (4)" } } if { ! $jaitrouvemixte && $LesAcsGbDeLaLigne != {} } { incr genbank if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (5)" } else { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne (6)" } } if { $cont || $LigneQueSouris } { set dejafait1 1 incr pauvSsSouris puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'access souris (8)" lappend LesLignesSsSouris "ligne=$I access=$Ac4" set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { incr vraimentpauvSsSouris puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne vraiment pas d'access souris (8b)" lappend LesLignesVraimentSsSouris "ligne=$I access=$Ac4" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (8t)" } } if { $LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={} } { set dejafait2 1 incr pauv puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'access (7)" lappend LesLignesPauvres "ligne=$I access=$Ac4" set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { incr vraimentpauv puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne vraiment pas d'access (7b)" lappend LesLignesVraimentPauvres "ligne=$I access=$Ac4" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (7t)" } } if { !$dejafait1 && !$dejafait2 && $SsFicheProt } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'autres infos pr cette ligne (9)" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (9b)" } } if { !$dejafait1 && !$dejafait2 && !$SsFicheProt && $vide>0 } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'autres infos pr cette ligne (10)" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (10b)" } } } } } Espionne "\n$W=nombre de lignes avec access prot ds col prot_acc" Espionne "$K=nombre qui ont pls access ds col prot_acc" Espionne "$J=nombre qui ont un access ds col prot_acc\n" Espionne "$Z=nombre de lignes avec UN access prot non souris" Espionne "$A=nombre de lignes ou certn id ne correspondent pas a un nm" Espionne "$B=nombre de lignes ou certn acc_prot na correspondent pas a un gb\n" Espionne "$accpauv=nb d'acc_prot sans access_mrna" Espionne "$mixte=nb de lignes ac mrna_refseq et ac mrna_genbank" Espionne "$refseq=nb de lignes ac mrna_refseq" Espionne "$genbank=nb de lignes ac mrna_genbank" Espionne "$pauv=nb de lignes ou il y a aucun access_mrna qui correspond" Espionne "$vraimentpauv=nb de lignes ou il y a vraiment pas d'access_mrna\n" foreach x $LesLignesPauvres {puts "x=$x"} foreach y $LesLignesVraimentPauvres {puts "y=$y"} Espionne "$pauvSsSouris=nb de lignes sans access souris" Espionne "$vraimentpauvSsSouris=nb de lignes ou il y a vraiment pas d'access souris" foreach v $LesLignesSsSouris {puts "v=$v"} foreach w $LesLignesVraimentSsSouris {puts "w=$w"} } proc AttriDesSsDnaAcProt2_AEffacer {} { #pour prot_acc dois prendre en compte que les souris set W 0 set K 0 set J 0 set A 0 set B 0 set Z 0 set accpauv 0 set mixte 0 set refseq 0 set genbank 0 set pauv 0 set vraimentpauv 0 set pauvSsSouris 0 set vraimentpauvSsSouris 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "refseq_PIQOR"] set Ac2 [RetChip2 $I "DNA_acc"] set Ac4 [RetChip2 $I "prot_acc"] if { [regexp {^RA[0-9]+} $Des1] } { continue } if { [regexp {\?} $Ac4] } { continue } set jaitrouvemixte 0 set pls 0 set PasSouris 0 set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set cont 0 set LigneQueSouris 0 set PauvSsSouris 0 set SsFicheProt 0 set dejafait1 0 set dejafait2 0 set vide 0 if {$Ac1=="" && $Ac2==""} { if {$Ac4!=""} { incr W Espionne "\n$Ac4 de la ligne $I (col prot_acc)=>$W" if { [regexp "," $Ac4] } { set pls 1 incr K } else { incr J } set SesAcs [split $Ac4 ","] foreach Ac $SesAcs { set GenreLu "" set IdLu "" set NM "" set mRNA "" set AcGb "" set mRNAGb "" set GenreLu [OrgDuProt $Ac] if { $GenreLu == "" } { puts "ligne=$I Acc=$Ac Id=PAS FICHES PROT" set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesIdsDeLaLigne $IdLu LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } if { $GenreLu != "" && ![regexp -nocase {^Mus} $GenreLu]} { if {! $pls} { incr Z incr PasSouris puts "$Ac4=pas souris=>$Z" set cont 1; break } if {$pls} { incr PasSouris puts "$Ac=pas souris passe suivant=>PasSouris=$PasSouris" continue } } set IdLu [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu set NM [LocUcsc $IdLu] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { puts "un NM=$mRNA correspond a access chaqnm=$ChaqNM" set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts "ligne=$I Acc=$Ac getzout=PAS FICHES GB ou pas mrna" } if {$GetzOut != ""} { puts "ligne=$I Acc=$Ac getzout=$GetzOut" set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb puts "acgb=$AcGb" LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { puts "un NM=$mRNAGb correspond a access AcGb=$AcGb" set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { incr accpauv puts "cet access_prot n'a pas d'access_mrna" lappend LesAccsPauvres $Ac if {$pls} {incr vide} } } if { [llength $SesAcs] == $PasSouris } { puts "la ligne $I a que des access non souris" set LigneQueSouris 1 } if { [expr [llength $SesAcs] - $PasSouris] != [llength $LesIdsDeLaLigne] } { puts "tous les access n'ont pas d'ID" set SsFicheProt 1 } if { $LesNmsDeLaLigne != {} && [llength $LesIdsDeLaLigne] > [llength $LesNmsDeLaLigne] } { puts "attention certn id ne correspondent pas a un nm" incr A } if { $LesNmsDeLaLigne == {} && $LesAcsGbDeLaLigne != {} && [llength $SesAcs] > [llength $LesAcsGbDeLaLigne] } { puts "attention certn acc_prot correspondent pas a un gb" incr B } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { [llength $LesIdsDeLaLigne] > 1 } { puts "plus d'un id" } if { $LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {} } { incr mixte set jaitrouvemixte 1 if { $LesmRNADeLaLigne != {} || $LesmRNAGbDeLaLigne !={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne" puts "acgb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (1)" } else { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne AcGb=$LesAcsGbDeLaLigne (2)" } } if { ! $jaitrouvemixte && $LesNmsDeLaLigne != {} } { incr refseq if { $LesmRNADeLaLigne != {} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne (3)" } else { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne (4)" } } if { ! $jaitrouvemixte && $LesAcsGbDeLaLigne != {} } { incr genbank if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (5)" } else { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne (6)" } } if { $cont || $LigneQueSouris } { set dejafait1 1 incr pauvSsSouris puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'access souris (8)" lappend LesLignesSsSouris "ligne=$I access=$Ac4" set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { incr vraimentpauvSsSouris puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne vraiment pas d'access souris (8b)" lappend LesLignesVraimentSsSouris "ligne=$I access=$Ac4" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (8t)" } } if { $LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={} } { set dejafait2 1 incr pauv puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'access (7)" lappend LesLignesPauvres "ligne=$I access=$Ac4" set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { incr vraimentpauv puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne vraiment pas d'access (7b)" lappend LesLignesVraimentPauvres "ligne=$I access=$Ac4" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (7t)" } } if { !$dejafait1 && !$dejafait2 && $SsFicheProt } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'autres infos pr cette ligne (9)" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (9b)" } } if { !$dejafait1 && !$dejafait2 && !$SsFicheProt && $vide>0 } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne pas d'autres infos pr cette ligne (10)" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac4 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (10b)" } } } } } Espionne "\n$W=nombre de lignes avec access prot ds col prot_acc" Espionne "$K=nombre qui ont pls access ds col prot_acc" Espionne "$J=nombre qui ont un access ds col prot_acc\n" Espionne "$Z=nombre de lignes avec UN access prot non souris" Espionne "$A=nombre de lignes ou certn id ne correspondent pas a un nm" Espionne "$B=nombre de lignes ou certn acc_prot na correspondent pas a un gb\n" Espionne "$accpauv=nb d'acc_prot sans access_mrna" Espionne "$mixte=nb de lignes ac mrna_refseq et ac mrna_genbank" Espionne "$refseq=nb de lignes ac mrna_refseq" Espionne "$genbank=nb de lignes ac mrna_genbank" Espionne "$pauv=nb de lignes ou il y a aucun access_mrna qui correspond" Espionne "$vraimentpauv=nb de lignes ou il y a vraiment pas d'access_mrna\n" foreach x $LesLignesPauvres {puts "x=$x"} foreach y $LesLignesVraimentPauvres {puts "y=$y"} Espionne "$pauvSsSouris=nb de lignes sans access souris" Espionne "$vraimentpauvSsSouris=nb de lignes ou il y a vraiment pas d'access souris" foreach v $LesLignesSsSouris {puts "v=$v"} foreach w $LesLignesVraimentSsSouris {puts "w=$w"} } proc AttriDesSsDnaAcProt_AEffacer {} { #pour prot_acc_piqor tous sont souris set W 0 set K 0 set J 0 set pauv 0 set accpauv 0 set mixte 0 set refseq 0 set genbank 0 set vraimentpauv 0 set F 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "refseq_PIQOR"] set Ac2 [RetChip2 $I "DNA_acc"] set Ac3 [RetChip2 $I "prot_acc_PIQOR"] set Ac4 [RetChip2 $I "prot_acc"] if { [regexp {^RA[0-9]+} $Des1] } { continue } set jaitrouvemixte 0 set ListProt {} set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set G 0 set pastrouveprtsaccprot 0 if {$Ac1=="" && $Ac2==""} { if {$Ac3!="" && $Ac4!=""} { set Ac "$Ac3,$Ac4" set ListProt [split $Ac ","] set ListProt [lsort -unique $ListProt] foreach Prot $ListProt { set IdLu1 [IdDuProt $Prot] set NM [LocUcsc $IdLu1] LConcat LesIdsDeLaLigne $IdLu1 LConcat LesNmsDeLaLigne $NM } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] #puts "2col=>ligne=$I Accs=$Ac3 et $Ac4 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne" continue } if {$Ac3!=""} { incr W Espionne "\n$Ac3 de la ligne $I (col prot_acc_piqor)=>$W" if {[regexp "," $Ac3]} { incr K } else { incr J } set SesAcs [split $Ac3 ","] foreach Ac $SesAcs { set IdLu2 "" set NM "" set mRNA "" set AcGb "" set mRNAGb "" set IdLu2 [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu2 if { $IdLu2 == "" } { puts "ligne=$I Acc=$Ac Id=PAS FICHES" set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } set NM [LocUcsc $IdLu2] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { puts "un NM=$mRNA correspond a access chaqnm=$ChaqNM" set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts "ligne=$I Acc=$Ac getzout=vide pas fiche ou pas mrna" } if {$GetzOut != ""} { incr G; incr F puts "ligne=$I Acc=$Ac getzout=$GetzOut" set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb puts "acgb=$AcGb" LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { puts "un NM=$mRNAGb correspond a access AcGb=$AcGb" set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { incr accpauv puts "cet access_prot n'a pas d'access_mrna" lappend LesAccsPauvres $Ac } } if { [llength $SesAcs] != [llength $LesIdsDeLaLigne] } { puts "tous les access n'ont pas d'ID" #ok } if { $LesNmsDeLaLigne != {} && [llength $LesIdsDeLaLigne] > [llength $LesNmsDeLaLigne] } { puts "attention certn id correspondent pas a un nm" #ok } if { $LesNmsDeLaLigne == {} && $LesAcsGbDeLaLigne != {} && [llength $SesAcs] > [llength $LesAcsGbDeLaLigne] } { set pastrouveprtsaccprot 1 #ligne 507 puts "attention certn acc_prot correspondent pas a un gb" } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { [llength $LesIdsDeLaLigne] > 1 } { puts "plus d'un id" } if { $LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {} } { incr mixte set jaitrouvemixte 1 if { $LesmRNADeLaLigne != {} || $LesmRNAGbDeLaLigne !={} } { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne" puts "acgb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne AcGb=$LesAcsGbDeLaLigne" } } if { ! $jaitrouvemixte && $LesNmsDeLaLigne != {} } { incr refseq if { $LesmRNADeLaLigne != {} } { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne mRNA=$LesmRNADeLaLigne" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne NM=$LesNmsDeLaLigne" } } if { ! $jaitrouvemixte && $LesAcsGbDeLaLigne != {} } { incr genbank if { $pastrouveprtsaccprot } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (1)" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne (2)" } } if { $LesAcsParGNDeLaLigne!={} } { if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (3)" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne AcParGn=$LesAcsParGNDeLaLigne (4)" } } } if { ! $pastrouveprtsaccprot } { if {$LesmRNAGbDeLaLigne !={}} { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne mRNAGb=$LesmRNAGbDeLaLigne (5)" } else { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcGb=$LesAcsGbDeLaLigne (6)" } } } if { $LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={} } { incr pauv puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne pas d'access" lappend LesLignesPauvres "ligne=$I access=$Ac3" set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] if { $LesAcsParGNDeLaLigne=={} } { incr vraimentpauv puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne vraiment pas d'access" lappend LesLignesVraimentPauvres "ligne=$I access=$Ac3" } if { $LesAcsParGNDeLaLigne!={} } { puts "ligne=$I Acc=$Ac3 Id=$LesIdsDeLaLigne AcParGn=$LesAcsParGNDeLaLigne" } } } } } Espionne "\n$W=nombre de lignes avec access prot ds col prot_acc_piqor" Espionne "$K=nombre qui ont pls access ds col prot_acc_piqor" Espionne "$J=nombre qui ont un access ds col prot_acc_piqor\n" Espionne "$accpauv=nb d'acc_prot sans access_mrna" Espionne "$mixte=nb de lignes ac mrna_refseq et ac mrna_genbank" Espionne "$refseq=nb de lignes ac mrna_refseq" Espionne "$genbank=nb de lignes ac mrna_genbank" Espionne "$pauv=nb de lignes ou il y a aucun access_mrna qui correspond" Espionne "$vraimentpauv=nb de lignes ou il y a vraiment pas d'access_mrna\n" foreach x $LesLignesPauvres {puts "x=$x"} foreach y $LesLignesVraimentPauvres {puts "y=$y"} } proc AttriDesSsDnaSsProt {} { set LaSortie {} set LesVides {} #set FichierLigne "[RepertoireDuGenome]/parser/ligssacc2" #ac RA set FichierLigne "[RepertoireDuGenome]/parser/ligssacc2ssra" #ss RA set LesLignes [LesLignesDuFichier $FichierLigne] foreach Ligne $LesLignes { Espionne "$Ligne" # if {$Ligne != 304 } {continue} set LesNMsDeLaLigne {} set LesGeneNameMemorec {} set DescriM [RetChip2 $Ligne description_memorec] set DescriMOri $DescriM set IPF [string first ")" $DescriM] #Espionne $IPF if {$IPF>0} { set DescriM [string range $DescriM 0 [incr IPF -1]] regsub -all {[\(\:]} $DescriM " " DescriM regsub -all -nocase { OR } $DescriM " " DescriM set LesGeneNameMemorec [LesMotsDeLaLigne $DescriM] #Espionne $DescriM #Espionne $LesGeneNameMemorec } if {$LesGeneNameMemorec != {}} { foreach GN $LesGeneNameMemorec { set LesNMs [RefLinkUcscMouse $GN NM] puts "++$LesNMs" LConcat LesNMsDeLaLigne $LesNMs } } set DescriC [RetChip2 $Ligne description_customer] scan $DescriC "%s" DescriC Espionne $DescriC if {$DescriC != ""} { set LesNMs [RefLinkUcscMouse $DescriC NM] puts "--$LesNMs" LConcat LesNMsDeLaLigne $LesNMs } set LesNMsDeLaLigne [ListeSansDoublon $LesNMsDeLaLigne] if {$LesNMsDeLaLigne=={}} { lappend LesVides "$Ligne $DescriMOri" ; continue } lappend LaSortie "$Ligne [join $LesNMsDeLaLigne " "] $DescriMOri " } set LongS [llength $LaSortie] set LongV [llength $LesVides] AfficheVariable [join $LesVides "\n"] "" "Vides" AfficheVariable [join $LaSortie "\n"] Espionne "longueur de LaSortie = $LongS" Espionne "longueur de LesVides = $LongV" #pas de puts dans commande dans ce cas } proc AttriDesSsDnaSsProt_AEffacer {} { set LaSortie {} set LesVides {} #set FichierLigne "[RepertoireDuGenome]/parser/ligssacc2" #ac RA set FichierLigne "[RepertoireDuGenome]/parser/ligssacc2ssra" #ss RA set LesLignes [LesLignesDuFichier $FichierLigne] foreach Ligne $LesLignes { Espionne "$Ligne" # if {$Ligne != 304 } {continue} set LesNMsDeLaLigne {} set LesGeneNameMemorec {} set DescriM [RetChip2 $Ligne description_memorec] set DescriMOri $DescriM set IPF [string first ")" $DescriM] #Espionne $IPF if {$IPF>0} { set DescriM [string range $DescriM 0 [incr IPF -1]] regsub -all {[\(\:]} $DescriM " " DescriM regsub -all -nocase { OR } $DescriM " " DescriM set LesGeneNameMemorec [LesMotsDeLaLigne $DescriM] #Espionne $DescriM #Espionne $LesGeneNameMemorec } if {$LesGeneNameMemorec != {}} { foreach GN $LesGeneNameMemorec { set LesNMs [RefLinkUcscMouse $GN NM] puts "++$LesNMs" LConcat LesNMsDeLaLigne $LesNMs } } set DescriC [RetChip2 $Ligne description_customer] scan $DescriC "%s" DescriC Espionne $DescriC if {$DescriC != ""} { set LesNMs [RefLinkUcscMouse $DescriC NM] puts "--$LesNMs" LConcat LesNMsDeLaLigne $LesNMs } set LesNMsDeLaLigne [ListeSansDoublon $LesNMsDeLaLigne] if {$LesNMsDeLaLigne=={}} { lappend LesVides "$Ligne $DescriMOri" ; continue } lappend LaSortie "$Ligne [join $LesNMsDeLaLigne " "] $DescriMOri " } set LongS [llength $LaSortie] set LongV [llength $LesVides] AfficheVariable [join $LesVides "\n"] "" "Vides" AfficheVariable [join $LaSortie "\n"] Espionne "longueur de LaSortie = $LongS" Espionne "longueur de LesVides = $LongV" #pas de puts dans commande dans ce cas } proc AttriTout {} { set total 0; set B 0; set C 0; set D 0; set E 0 set LesLignesPauvres {} foreach I [RetChip5 ListOf Index] { incr total set Des1 [RetChip5 $I "description_customer"] set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "DNA_acc"] set Ac2 [RetChip5 $I "refseq_PIQOR"] set Ac3 [RetChip5 $I "prot_acc"] set Ac4 [RetChip5 $I "prot_acc_PIQOR"] set jaitrouvednaacc 0 set jaitrouve 0 set jaitrouveRA 0 set jaitrouvegn 0 set genenamefait 0 set jaitrouveprot 0 set LesGenresP3 {} set AccDna "" set ListeDesAcs {} set LesAcsDna {} set LesAcsDeLaLigne "" set pls 0 set PasSouris 0 set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set LesAcsParGNDeLaLigne "" set LesAcsDeLaLigneList {} set cont 0 set LigneQueSouris 0 set SsFicheProt 0 set vide 0 puts "Ac1 $Ac1 Ac2 $Ac2" if {$Ac1=="" && $Ac2!=""} { incr B puts "ligne $I Ac1=$Ac1 et Ac2=$Ac2" set LesNMs [split $Ac2 ","] foreach NM $LesNMs { #set Commande "getz \"\(\\\[refseqrelease-acc:$NM\\\]\|\\\[refseqnew-acc:$NM\\\]\)\!\(\\\[refseqnew-acc:$NM\\\]>\\\[refseqrelease-acc:$NM\\\]\)\" \-view FastaSeqs" set Commande "getz \"\\\[refseq-acc:$NM\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts ">bidon ficherefseqpiqor n'existe plus\natgc" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } puts $GetzOut } } continue } if { $Ac1!="" && ![regexp {\?} $Ac1] } { set jaitrouvednaacc 1 incr C puts "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" if {$Ac2==""} { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set LesAcsDeLaLigne "$Ac1 $NM" } else { set LesAcsDeLaLigne $Ac1 } } else { set LesAcsDeLaLigne $Ac1 } } if {[regexp {^Homo$} $Genre]} { #travail sur prot Ac3=$Ac3 Ac4=$Ac4 set LesAcs3 [split $Ac3 ","] foreach ChaqAc3 $LesAcs3 { set GenreAc3 [OrgDuProt $ChaqAc3] LConcat LesGenresP3 $GenreAc3 } set LesGenresP3 [lsort -unique $LesGenresP3] if { [llength $LesGenresP3] > 1 } { puts "attention ilya pls genres pour cette ligne" } set GenreP3 [join $LesGenresP3 " "] if { $GenreP3 == "" } { #jamais ce cas; je ne le traite pas #puts "pls=>ligne=$I Acc=$Ac3 Id=attention PAS FICHESpls\n" if {$Ac4 == ""} { puts "dois prendre la def" } if {$Ac4 != ""} { puts "dois prendre prot_acc_piqor"} continue } if {[regexp {^Homo} $GenreP3]} { if {$Ac4!=""} { set ListeAc4 [split $Ac4 ","] foreach ChaqueAc4 $ListeAc4 { set AccDna [AttriDesAcDnaParProt $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach T $ListeDesAcs {LConcat LesAcsDna $T} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set genenamefait 1 set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$genenamefait == 0 && $LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } if {[regexp {^Mus} $GenreP3]} { if {$Ac4!=""} { set AccsProt "$Ac3,$Ac4" set ListeAccsProt [split $AccsProt ","] foreach ChaqueAccProt $ListeAccsProt { set AccDna [AttriDesAcDnaParProt $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set ListeAc3 [split $Ac3 ","] foreach ChaqueAc3 $ListeAc3 { set AccDna [AttriDesAcDnaParProt $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } if {$LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } } } if {$Ac2!=""} { if { $Ac1==$Ac2 } { set LesAcsDeLaLigne $Ac2 set jaitrouve 1 } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 set jaitrouve 1 break } } } if { $jaitrouve==0 } { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set ListeAc1 [split $Ac1 ","] set ListeAc2 [split $Ac2 ","] set ListeNM [split $NM " "] set Tout [concat $ListeAc1 $ListeAc2 $ListeNM] set Tout [ListeSansDoublon $Tout] set LesAcsDeLaLigne [join $Tout " "] } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } if {[regexp {^Homo$} $Genre]} { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 } } #jaitrouve } #refseqpiqorpasvide } #dnaaccpas vide if { $Ac1=="" && $Ac2=="" && ($Ac3!="" || $Ac4!="")} { #Ac3=prot_acc Ac4=prot_acc_piqor incr D set jaitrouveprot 1 puts "ligne $I Ac3=$Ac3 Ac4=$Ac4" if { [regexp "," $Ac3] || [regexp "," $Ac4] } { set pls 1 } set LesAcs3 [split $Ac3 ","] set LesAcs4 [split $Ac4 ","] set LesAcs3et4 [concat $LesAcs3 $LesAcs4] set SesAcs [split $LesAcs3et4 " "] foreach Ac $SesAcs { set GenreLu ""; set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" set GenreLu [OrgDuProt $Ac] if { $GenreLu == "" } { set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesIdsDeLaLigne $IdLu LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } if { $GenreLu != "" && ![regexp -nocase {^Mus} $GenreLu]} { if {! $pls} { incr PasSouris set cont 1; break } if {$pls} { incr PasSouris continue } } set IdLu [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu set NM [LocUcsc $IdLu] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut != ""} { set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { if {$pls} {incr vide} } } if { [llength $SesAcs] == $PasSouris } { set LigneQueSouris 1 } if { [expr [llength $SesAcs] - $PasSouris] != [llength $LesIdsDeLaLigne] } { set SsFicheProt 1 } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { ($cont || $LigneQueSouris) || ($LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={}) || ($SsFicheProt) || ($vide>0) } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne $LesAcsParGNDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } if { $LesNmsDeLaLigne != {} || $LesAcsGbDeLaLigne != {} || ($LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {}) } { set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } } if {($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4==""} { puts "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" set jaitrouvegn 1 incr E set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$jaitrouvednaacc || $jaitrouveprot || $jaitrouvegn} { if {$LesAcsDeLaLigne != ""} { set ListeFinal [split $LesAcsDeLaLigne " "] foreach ChaqueFinal $ListeFinal { set GetzOut "" if { [regexp {^NM_} $ChaqueFinal] || [regexp {^NR_} $ChaqueFinal] } { set Commande "getz \"\(\\\[refseqrelease-acc:$ChaqueFinal\\\]\|\\\[refseqnew-acc:$ChaqueFinal\\\]\)\!\(\\\[refseqnew-acc:$ChaqueFinal\\\]>\\\[refseqrelease-acc:$ChaqueFinal\\\]\)\" \-view FastaSeqs" #set Commande "getz \"\\\[refseq-acc:$ChaqueFinal\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] set GetzOut [string range $GetzOut [string last ">r" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } } if { ![regexp {^NM_} $ChaqueFinal] && ![regexp {^NR_} $ChaqueFinal] } { set Commande "getz \"\\\[genbankfull-acc:$ChaqueFinal\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if { [regexp {^>gen.+>gen} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } } if {$GetzOut == ""} { puts ">bidon fichedna n'existe plus\natcg" } if {$GetzOut != ""} { puts $GetzOut } } } if {$LesAcsDeLaLigne == ""} { puts ">bidon pas d'access\natcg" lappend LesLignesPauvres "$I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" } } } #foreach set NbPauvres [llength $LesLignesPauvres] lappend LesLignesPauvres "$NbPauvres = nb de ligne Pauvres" SauveLesLignes $LesLignesPauvres dans [RepertoireDuGenome]/fiches/LesLignesPauvres Espionne "$B =nb ac refseq_piqor ms pas dna_acc" Espionne "$C =nb ac dna_acc" Espionne "$D =nb ac prot" Espionne "$E =nb ac rien" } proc AttriToutAccess {} { set A 0; set B 0; set C 0; set D 0; set E 0 set LesLignesPauvres {} foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] set jaitrouvednaacc 0 set jaitrouve 0 set jaitrouveRA 0 set jaitrouvegn 0 set genenamefait 0 set jaitrouveprot 0 set LesGenresP3 {} set AccDna "" set ListeDesAcs {} set LesAcsDna {} set LesAcsDeLaLigne "" set pls 0 set PasSouris 0 set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set LesAcsParGNDeLaLigne "" set LesAcsDeLaLigneList {} set cont 0 set LigneQueSouris 0 set SsFicheProt 0 set vide 0 if { [regexp {^RA[0-9]+} $Des1] } { Espionne "ligne $I Des1=$Des1 Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" incr A set RA1324 ""; set AccmRNA1 ""; set Genre1 ""; set AccmRNA2 ""; set Genre2 "" set Fichier "/genomics/link/Ret1324/fiches/Orf2Cluster2Access2Def2Expression" set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { scan $Ligne "%s %s %s %s" RA1324 x y RA2717 if {$Des1==$RA2717} { set JaiTrouveCorresEntre1324Et2717 1 Espionne "RA1324=$RA1324" if {[file exists "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"]} { set LAcRa1 [ContenuDuFichier "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"] scan $LAcRa1 "%s %s %s %s %s" x y AccmRNA1 z Genre1 } set Fichier2 "/genomics/link/Ret1324/fiches/AccessDesProteinesEtDesmRNAsChoisis" set LesLignes2 [LesLignesDuFichier $Fichier2] foreach Ligne2 $LesLignes2 { scan $Ligne2 "%s %s %s %s" NumRA AccProt AccmRNA Genre if {$RA1324==$NumRA} { set jaitrouvecorres 1 set AccmRNA2 $AccmRNA set Genre2 $Genre if {[string equal $AccmRNA2 "NomRNA"]} { set AccmRNA2 "" } if {[string equal $Genre2 "NoOrganism"]} { set Genre2 "" } } } Espionne "AccmRNA1=$AccmRNA1 Genre1=$Genre1 AccmRNA2=$AccmRNA2 Genre2=$Genre2\n" } } if {!$JaiTrouveCorresEntre1324Et2717} { Espionne "pas de corresp" Espionne "AccmRNA1=$AccmRNA1 Genre1=$Genre1 AccmRNA2=$AccmRNA2 Genre2=$Genre2\n" } continue } if {$Ac1=="" && $Ac2!=""} { incr B Espionne "ligne $I Ac1=$Ac1 et Ac2=$Ac2" Espionne "LesAcsDeLaLigne= $Ac2" continue } if { $Ac1!="" && ![regexp {\?} $Ac1] } { set jaitrouvednaacc 1 incr C Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2" if {$Ac2==""} { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set LesAcsDeLaLigne "$Ac1 $NM" } else { set LesAcsDeLaLigne $Ac1 } } else { set LesAcsDeLaLigne $Ac1 } } if {[regexp {^Homo$} $Genre]} { #travail sur prot Ac3=$Ac3 Ac4=$Ac4 set LesAcs3 [split $Ac3 ","] foreach ChaqAc3 $LesAcs3 { set GenreAc3 [OrgDuProt $ChaqAc3] lappend LesGenresP3 $GenreAc3 } set LesGenresP3 [lsort -unique $LesGenresP3] if { [llength $LesGenresP3] > 1 } {Espionne "attention ilya pls genres pour cette ligne" } set GenreP3 [join $LesGenresP3 " "] if { $GenreP3 == "" } { #jamais ce cas; je ne le traite pas #Espionne "pls=>ligne=$I Acc=$Ac3 Id=attention PAS FICHESpls\n" if {$Ac4 == ""} {Espionne "dois prendre la def" } if {$Ac4 != ""} {Espionne "dois prendre prot_acc_piqor"} continue } if {[regexp {^Homo} $GenreP3]} { if {$Ac4!=""} { set ListeAc4 [split $Ac4 ","] foreach ChaqueAc4 $ListeAc4 { set AccDna [AttriDesAcDnaParProt $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach T $ListeDesAcs {LConcat LesAcsDna $T} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set genenamefait 1 set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$genenamefait == 0 && $LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } if {[regexp {^Mus} $GenreP3]} { if {$Ac4!=""} { set AccsProt "$Ac3,$Ac4" set ListeAccsProt [split $AccsProt ","] foreach ChaqueAccProt $ListeAccsProt { set AccDna [AttriDesAcDnaParProt $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set ListeAc3 [split $Ac3 ","] foreach ChaqueAc3 $ListeAc3 { set AccDna [AttriDesAcDnaParProt $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } if {$LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } } } if {$Ac2!=""} { if { $Ac1==$Ac2 } { set LesAcsDeLaLigne $Ac2 set jaitrouve 1 } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 set jaitrouve 1 break } } } if { $jaitrouve==0 } { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set ListeAc1 [split $Ac1 ","] set ListeAc2 [split $Ac2 ","] set ListeNM [split $NM " "] set Tout [concat $ListeAc1 $ListeAc2 $ListeNM] set Tout [ListeSansDoublon $Tout] set LesAcsDeLaLigne [join $Tout " "] } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } if {[regexp {^Homo$} $Genre]} { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 } } #jaitrouve } #refseqpiqorpasvide } #dnaaccpas vide if { $Ac1=="" && $Ac2=="" && ($Ac3!="" || $Ac4!="")} { #Ac3=prot_acc Ac4=prot_acc_piqor incr D set jaitrouveprot 1 Espionne "ligne $I Ac3=$Ac3 Ac4=$Ac4" if { [regexp "," $Ac3] || [regexp "," $Ac4] } { set pls 1 } set LesAcs3 [split $Ac3 ","] set LesAcs4 [split $Ac4 ","] set LesAcs3et4 [concat $LesAcs3 $LesAcs4] set SesAcs [split $LesAcs3et4 " "] foreach Ac $SesAcs { set GenreLu "" set IdLu "" set NM "" set mRNA "" set AcGb "" set mRNAGb "" set GenreLu [OrgDuProt $Ac] if { $GenreLu == "" } { set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesIdsDeLaLigne $IdLu LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } if { $GenreLu != "" && ![regexp -nocase {^Mus} $GenreLu]} { if {! $pls} { incr PasSouris set cont 1; break } if {$pls} { incr PasSouris continue } } set IdLu [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu set NM [LocUcsc $IdLu] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut != ""} { set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { if {$pls} {incr vide} } } if { [llength $SesAcs] == $PasSouris } { set LigneQueSouris 1 } if { [expr [llength $SesAcs] - $PasSouris] != [llength $LesIdsDeLaLigne] } { set SsFicheProt 1 } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { ($cont || $LigneQueSouris) || ($LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={}) || ($SsFicheProt) || ($vide>0) } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne $LesAcsParGNDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } if { $LesNmsDeLaLigne != {} || $LesAcsGbDeLaLigne != {} || ($LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {}) } { set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } } if {($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4==""} { Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" set jaitrouvegn 1 incr E set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$jaitrouvednaacc || $jaitrouveprot || $jaitrouvegn} { if {$LesAcsDeLaLigne != ""} { Espionne "LesAcsDeLaLigne= $LesAcsDeLaLigne" } if {$LesAcsDeLaLigne == ""} {Espionne "LesAcsDeLaLigne= vide"} } } #foreach Espionne "$A =nb de RA" Espionne "$B =nb ac refseq_piqor ms pas dna_acc" Espionne "$C =nb ac dna_acc" Espionne "$D =nb ac prot" Espionne "$E =nb ac rien" } proc AttriToutAccess_AEffacer {} { set A 0 set B 0 set C 0 set D 0 set E 0 set LesLignesPauvres {} foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] set jaitrouvednaacc 0 set jaitrouve 0 set jaitrouveRA 0 set jaitrouvegn 0 set genenamefait 0 set jaitrouveprot 0 set LesGenresP3 {} set AccDna "" set ListeDesAcs {} set LesAcsDna {} set LesAcsDeLaLigne "" set pls 0 set PasSouris 0 set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set LesAcsParGNDeLaLigne "" set LesAcsDeLaLigneList {} set cont 0 set LigneQueSouris 0 set SsFicheProt 0 set vide 0 if { [regexp {^RA[0-9]+} $Des1] } { puts "ligne $I Des1=$Des1 Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" incr A set RA1324 ""; set AccmRNA1 ""; set Genre1 ""; set AccmRNA2 ""; set Genre2 "" set Fichier "/genomics/link/Ret1324/fiches/Orf2Cluster2Access2Def2Expression" set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { scan $Ligne "%s %s %s %s" RA1324 x y RA2717 if {$Des1==$RA2717} { set JaiTrouveCorresEntre1324Et2717 1 puts "RA1324=$RA1324" if {[file exists "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"]} { set LAcRa1 [ContenuDuFichier "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"] scan $LAcRa1 "%s %s %s %s %s" x y AccmRNA1 z Genre1 } set Fichier2 "/genomics/link/Ret1324/fiches/AccessDesProteinesEtDesmRNAsChoisis" set LesLignes2 [LesLignesDuFichier $Fichier2] foreach Ligne2 $LesLignes2 { scan $Ligne2 "%s %s %s %s" NumRA AccProt AccmRNA Genre if {$RA1324==$NumRA} { set jaitrouvecorres 1 set AccmRNA2 $AccmRNA set Genre2 $Genre if {[string equal $AccmRNA2 "NomRNA"]} { set AccmRNA2 "" } if {[string equal $Genre2 "NoOrganism"]} { set Genre2 "" } } } Espionne "AccmRNA1=$AccmRNA1 Genre1=$Genre1 AccmRNA2=$AccmRNA2 Genre2=$Genre2\n" } } if {!$JaiTrouveCorresEntre1324Et2717} { puts "pas de corresp" Espionne "AccmRNA1=$AccmRNA1 Genre1=$Genre1 AccmRNA2=$AccmRNA2 Genre2=$Genre2\n" } continue } if {$Ac1=="" && $Ac2!=""} { incr B puts "ligne $I Ac1=$Ac1 et Ac2=$Ac2" puts "LesAcsDeLaLigne= $Ac2" continue } if { $Ac1!="" && ![regexp {\?} $Ac1] } { set jaitrouvednaacc 1 incr C puts "ligne $I Ac1=$Ac1 Ac2=$Ac2" if {$Ac2==""} { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set LesAcsDeLaLigne "$Ac1 $NM" } else { set LesAcsDeLaLigne $Ac1 } } else { set LesAcsDeLaLigne $Ac1 } } if {[regexp {^Homo$} $Genre]} { #travail sur prot Ac3=$Ac3 Ac4=$Ac4 set LesAcs3 [split $Ac3 ","] foreach ChaqAc3 $LesAcs3 { set GenreAc3 [OrgDuProt $ChaqAc3] lappend LesGenresP3 $GenreAc3 } set LesGenresP3 [lsort -unique $LesGenresP3] if { [llength $LesGenresP3] > 1 } { puts "attention ilya pls genres pour cette ligne" } set GenreP3 [join $LesGenresP3 " "] if { $GenreP3 == "" } { #jamais ce cas; je ne le traite pas #puts "pls=>ligne=$I Acc=$Ac3 Id=attention PAS FICHESpls\n" if {$Ac4 == ""} { puts "dois prendre la def" } if {$Ac4 != ""} { puts "dois prendre prot_acc_piqor"} continue } if {[regexp {^Homo} $GenreP3]} { if {$Ac4!=""} { set ListeAc4 [split $Ac4 ","] foreach ChaqueAc4 $ListeAc4 { set AccDna [AttriDesAcDnaParProt $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach T $ListeDesAcs {LConcat LesAcsDna $T} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set genenamefait 1 set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$genenamefait == 0 && $LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } if {[regexp {^Mus} $GenreP3]} { if {$Ac4!=""} { set AccsProt "$Ac3,$Ac4" set ListeAccsProt [split $AccsProt ","] foreach ChaqueAccProt $ListeAccsProt { set AccDna [AttriDesAcDnaParProt $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set ListeAc3 [split $Ac3 ","] foreach ChaqueAc3 $ListeAc3 { set AccDna [AttriDesAcDnaParProt $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } if {$LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } } } if {$Ac2!=""} { if { $Ac1==$Ac2 } { set LesAcsDeLaLigne $Ac2 set jaitrouve 1 } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 set jaitrouve 1 break } } } if { $jaitrouve==0 } { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set ListeAc1 [split $Ac1 ","] set ListeAc2 [split $Ac2 ","] set ListeNM [split $NM " "] set Tout [concat $ListeAc1 $ListeAc2 $ListeNM] set Tout [ListeSansDoublon $Tout] set LesAcsDeLaLigne [join $Tout " "] } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } if {[regexp {^Homo$} $Genre]} { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 } } #jaitrouve } #refseqpiqorpasvide } #dnaaccpas vide if { $Ac1=="" && $Ac2=="" && ($Ac3!="" || $Ac4!="")} { #Ac3=prot_acc Ac4=prot_acc_piqor incr D set jaitrouveprot 1 puts "ligne $I Ac3=$Ac3 Ac4=$Ac4" if { [regexp "," $Ac3] || [regexp "," $Ac4] } { set pls 1 } set LesAcs3 [split $Ac3 ","] set LesAcs4 [split $Ac4 ","] set LesAcs3et4 [concat $LesAcs3 $LesAcs4] set SesAcs [split $LesAcs3et4 " "] foreach Ac $SesAcs { set GenreLu "" set IdLu "" set NM "" set mRNA "" set AcGb "" set mRNAGb "" set GenreLu [OrgDuProt $Ac] if { $GenreLu == "" } { set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesIdsDeLaLigne $IdLu LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } if { $GenreLu != "" && ![regexp -nocase {^Mus} $GenreLu]} { if {! $pls} { incr PasSouris set cont 1; break } if {$pls} { incr PasSouris continue } } set IdLu [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu set NM [LocUcsc $IdLu] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut != ""} { set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { if {$pls} {incr vide} } } if { [llength $SesAcs] == $PasSouris } { set LigneQueSouris 1 } if { [expr [llength $SesAcs] - $PasSouris] != [llength $LesIdsDeLaLigne] } { set SsFicheProt 1 } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { ($cont || $LigneQueSouris) || ($LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={}) || ($SsFicheProt) || ($vide>0) } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne $LesAcsParGNDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } if { $LesNmsDeLaLigne != {} || $LesAcsGbDeLaLigne != {} || ($LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {}) } { set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } } if {($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4==""} { puts "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" set jaitrouvegn 1 incr E set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$jaitrouvednaacc || $jaitrouveprot || $jaitrouvegn} { if {$LesAcsDeLaLigne != ""} { puts "LesAcsDeLaLigne= $LesAcsDeLaLigne" } if {$LesAcsDeLaLigne == ""} {puts "LesAcsDeLaLigne= vide"} } } #foreach Espionne "$A =nb de RA" Espionne "$B =nb ac refseq_piqor ms pas dna_acc" Espionne "$C =nb ac dna_acc" Espionne "$D =nb ac prot" Espionne "$E =nb ac rien" } proc AttriToutLesBidonAcAccNonExistant {} { set total 0; set B 0; set C 0; set W 0; set X 0; set D 0; set M 0; set N 0; set O 0; set P 0 set cas1 0; set cas1a 0; set cas1b 0; set cas1c 0 set cas2 0; set cas2a 0; set cas2b 0; set cas2c 0; set cas2d 0 set cas3 0; set cas4 0; set cas5 0; set cas6 0 set cas7 0; set cas7a 0; set cas7b 0; set cas8 0; set cas9 0; set cas10 0; set cas11 0 set LesLignesPauvres {} set ListeI {87 178 200 220 1197 1289 1367 1431 1602 1702 1949} foreach I $ListeI { incr total Espionne $I set Des1 [RetChip5 $I "description_customer"] Espionne $Des1 set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "DNA_acc"] set Ac2 [RetChip5 $I "refseq_PIQOR"] set Ac3 [RetChip5 $I "prot_acc"] set Ac4 [RetChip5 $I "prot_acc_PIQOR"] set LesNMs {} set LesAc {} set Genre "" set TousLesGenres {} array unset LesGenres set onasouris 0 set LesAcsDna {} set LesAcProt {} set TousLesGenresProt {} array unset LesGenreAcProt set onasourisprot 0 set genenamefait 0 set ListAcsParGn {}; set BigList {} set LesAcsDeLaLigne "" if { $Ac1!="" && ![regexp {\?} $Ac1] } { set Ac1 [string trim $Ac1] regsub -all " " $Ac1 "" Ac1 incr C Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" incr W set LesAc [split $Ac1 ","] set LesAc [ListeSansDoublon $LesAc] set LesAc [ListeSsElmtVide $LesAc] foreach Ac $LesAc { set Genre [OrgDuNmOuGb $Ac] Espionne "Ac $Ac Genre $Genre" #if {$Genre == ""} {Espionne "attention pas fiches"} LConcat TousLesGenres $Genre set LesGenres($Ac) $Genre } set TousLesGenres [ListeSansDoublon $TousLesGenres] foreach ChaqueGenre $TousLesGenres { if {[regexp {^Mus} $ChaqueGenre]} { set onasouris 1 } } if {$onasouris} { Espionne "cas1" incr cas1 foreach Ac $LesAc { set LesNmRefSeq {}; set LesNvxNm {} if {[regexp {^Mus} $LesGenres($Ac)]} { #Espionne "Ac $Ac" if { ![regexp {^NM_} $Ac] && ![regexp {^XM_} $Ac] && ![regexp {^NR_} $Ac]} { set NM [MrnaRefseqUcscMouse $Ac "Nm"] #Espionne "NM $NM" if { $NM != "" } { Espionne "cas1a" incr cas1a set LesNmRefSeq [split $NM " "] foreach NmRefSeq $LesNmRefSeq { set GenreNmRefSeq [OrgDuNmOuGb $NmRefSeq] #Espionne "$NmRefSeq $GenreNmRefSeq" if {[regexp {^Mus} $GenreNmRefSeq]} { LConcat LesNvxNm $NmRefSeq } } set LesNvxNm [ListeSansDoublon $LesNvxNm] set NMjoint [join $LesNvxNm " "] Espionne "NMjoint $NMjoint" LConcat LesAcsDna "$Ac $NMjoint" } else { Espionne "cas1b" incr cas1b LConcat LesAcsDna $Ac } } else { Espionne "cas1c" incr cas1c LConcat LesAcsDna $Ac } } } } #Espionne "cas2" incr cas2 #travail sur prot Ac3=$Ac3 Ac4=$Ac4 if {$Ac3!="" || $Ac4!=""} { Espionne "cas2a" incr cas2a if {$Ac3!="" && $Ac4!=""} { Espionne "cas2b" incr cas2b set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 set Ac3Ac4 "$Ac3,$Ac4" set LesAcProt [split $Ac3Ac4 ","] } elseif {$Ac3!=""} { set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 Espionne "cas2c" incr cas2c set LesAcProt [split $Ac3 ","] } elseif {$Ac4!=""} { set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 Espionne "cas2d" incr cas2d set LesAcProt [split $Ac4 ","] } set LesAcProt [ListeSansDoublon $LesAcProt] set LesAcProt [ListeSsElmtVide $LesAcProt] foreach AcProt $LesAcProt { set GenreAcProt [OrgDuProt $AcProt] Espionne "$AcProt $GenreAcProt" #if {$GenreAcProt==""} {Espionne "attention pas fiches" } LConcat TousLesGenresProt $GenreAcProt set LesGenreAcProt($AcProt) $GenreAcProt } set TousLesGenresProt [ListeSansDoublon $TousLesGenresProt] foreach ChaqueGenreProt $TousLesGenresProt { if {[regexp {^Mus} $ChaqueGenreProt]} { set onasourisprot 1 } } if {$onasourisprot} { Espionne "cas3" incr cas3 foreach AcProt $LesAcProt { set ListeDesAcs1 {}; set ListeDesAcs2 {}; set LesAcsDnaProv {} if {[regexp {^Mus} $LesGenreAcProt($AcProt)]} { set ResultParProt [AttriDesAcDnaParProt $AcProt] Espionne "ResultParProt $ResultParProt" set ResultParGb [AttriDesAcDnaParGb $AcProt] Espionne "ResultParGb $ResultParGb" if {$ResultParProt != ""} { set ListeDesAcs1 [split $ResultParProt " "] } if {$ResultParGb != ""} { set ListeDesAcs2 [split $ResultParGb " "] } set LesAcsDnaProv [concat $ListeDesAcs1 $ListeDesAcs2] foreach elmt $LesAcsDnaProv { LConcat LesAcsDna $elmt } } } } if {!$onasourisprot} { set LesAcsDna [ListeSansDoublon $LesAcsDna] Espionne "cas4" incr cas4 set genenamefait 1 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } } if {!$genenamefait && ($ListAcsParGn == {} && $LesAcsDna == {})} { Espionne "cas6" incr cas6 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } set BigList [concat $LesAcsDna $ListAcsParGn] set BigList [ListeSansDoublon $BigList] if {$BigList == {}} { set LesAcsDeLaLigne "" } else { set BigList [ListeSsElmtVide $BigList] set LesAcsDeLaLigne [join $BigList " "] } Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if { ($Ac1=="" || [regexp {\?} $Ac1]) && (($Ac3!="" && ![regexp {\?} $Ac3]) || $Ac4!="")} { #Ac3=prot_acc Ac4=prot_acc_piqor incr D Espionne "ligne $I Ac3=$Ac3 Ac4=$Ac4" set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 if {$Ac3!="" && $Ac4!=""} { incr M set Ac3Ac4 "$Ac3,$Ac4" set LesAcProt [split $Ac3Ac4 ","] } elseif {$Ac3!="" && ![regexp {\?} $Ac3]} { incr N set LesAcProt [split $Ac3 ","] } elseif {$Ac4!=""} { incr O set LesAcProt [split $Ac4 ","] } set LesAcProt [ListeSansDoublon $LesAcProt] foreach AcProt $LesAcProt { set GenreProt [OrgDuProt $AcProt] Espionne "AcProt $AcProt GenreProt $GenreProt" #if {$GenreProt==""} {Espionne "attention pas fiche"} LConcat TousLesGenresProt $GenreProt set LesGenresProt($AcProt) $GenreProt } set TousLesGenresProt [ListeSansDoublon $TousLesGenresProt] foreach ChaqueGenreProt $TousLesGenresProt { if {[regexp {^Mus} $ChaqueGenreProt]} { set onasourisprot 1 } } if {$onasourisprot} { Espionne "cas7" incr cas7 foreach AcProt $LesAcProt { set ListeDesAcs1 {}; set ListeDesAcs2 {}; set LesAcsDnaProv {} if {[regexp {^Mus} $LesGenresProt($AcProt)]} { set ResultParProt [AttriDesAcDnaParProt $AcProt] Espionne "ResultParProt $ResultParProt" set ResultParGb [AttriDesAcDnaParGb $AcProt] Espionne "ResultParGb $ResultParGb" if {$ResultParProt != ""} { Espionne "cas7a" incr cas7a set ListeDesAcs1 [split $ResultParProt " "] } if {$ResultParGb != ""} { Espionne "cas7b" incr cas7b set ListeDesAcs2 [split $ResultParGb " "] } set LesAcsDnaProv [concat $ListeDesAcs1 $ListeDesAcs2] foreach elmt $LesAcsDnaProv { LConcat LesAcsDna $elmt } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] } if {!$onasourisprot} { Espionne "cas8" incr cas8 set genenamefait 1 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } if {!$genenamefait && ($ListAcsParGn=={} && $LesAcsDna=={})} { Espionne "cas9" incr cas9 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } set BigList [concat $LesAcsDna $ListAcsParGn] set BigList [ListeSansDoublon $BigList] if {$BigList == {}} { set LesAcsDeLaLigne "" } else { set BigList [ListeSsElmtVide $BigList] set LesAcsDeLaLigne [join $BigList " "] } Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if {($Ac1=="" || [regexp {\?} $Ac1]) && ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4==""} { incr P Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" Espionne "cas10" incr cas10 set genenamefait 1 Espionne "$Des1 $Des2" set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] if {$ListAcsParGn == {}} { set LesAcsDeLaLigne "" } else { set ListAcsParGn [ListeSansDoublon $ListAcsParGn] set ListAcsParGn [ListeSsElmtVide $ListAcsParGn] set LesAcsDeLaLigne [join $ListAcsParGn " "] } Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if {$genenamefait == 0 && $LesAcsDeLaLigne == ""} { Espionne "cas11" incr cas11 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] if {$ListAcsParGn == {}} { set LesAcsDeLaLigne "" } else { set ListAcsParGn [ListeSansDoublon $ListAcsParGn] set ListAcsParGn [ListeSsElmtVide $ListAcsParGn] set LesAcsDeLaLigne [join $ListAcsParGn " "] } Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if {$LesAcsDeLaLigne == ""} { set LignePauvre "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" lappend LesLignesPauvres $LignePauvre Espionne ">bidon trouve pas \natgc" } else { foreach Acs $LesAcsDeLaLigne { if { [regexp "^NM_" $Acs] || [regexp "^XM_" $Acs] || [regexp "^NR_" $Acs] } { set GetzOut "" set Commande "getz \"\\\[refseq-acc:$Acs\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} {Espionne ">bidon fiche n'existe plus\natgc" } if {$GetzOut != ""} { if { [regexp {^>ref.+>ref} $GetzOut] } { if {$I==178 || $I==1197} {set GetzOut [string range $GetzOut [string first ">" $GetzOut] [expr [string last ">" $GetzOut] - 1]] } Espionne "ATTENTION AU - 2 SEQ FASTA" } else { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] } Espionne $GetzOut } } else { set GetzOut "" set Commande "getz \"\\\[genbankfull-acc:$Acs\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} {Espionne ">bidon fiche n'existe plus\natgc" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { Espionne "ATTENTION AU - 2 SEQ FASTA" } Espionne $GetzOut } } } } } set longdespauvres [llength $LesLignesPauvres] SauveLesLignes $LesLignesPauvres dans [RepertoireDuGenome]/fiches/LesLignesPauvres.txt Espionne "nombre de lignes= $total" Espionne "B=$B";Espionne "C $C";Espionne "W $W";Espionne "X $X" Espionne "D $D";Espionne "M $M";Espionne "N $N";Espionne "O $O";Espionne "P $P" Espionne "cas1 $cas1";Espionne "cas1a $cas1a";Espionne "cas1b $cas1b";Espionne "cas1c $cas1c" Espionne "cas2 $cas2";Espionne "cas2a $cas2a";Espionne "cas2b $cas2b";Espionne "cas2c $cas2c";Espionne "cas2d $cas2d" Espionne "cas3 $cas3";Espionne "cas4 $cas4";Espionne "cas5 $cas5";Espionne "cas6 $cas6" Espionne "cas7 $cas7";Espionne "cas7a $cas7a";Espionne "cas7b $cas7b" Espionne "cas8 $cas8";Espionne "cas9 $cas9";Espionne "cas10 $cas10";Espionne "cas11 $cas11" Espionne "nombre de lignes pauvres = $longdespauvres" } proc AttriToutRA {} { set A 0 set Z 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set jaitrouveRA 0 if { [regexp {^RA[0-9]+} $Des1] } { incr A puts "ligne $I Des1=$Des1" set Fichier "/genomics/link/Ret1324/fiches/Orf2Cluster2Access2Def2Expression" set LesLignes [LesLignesDuFichier $Fichier] set Fichier2 "/genomics/link/Ret1324/fiches/AccessDesProteinesEtDesmRNAsChoisis" set LesLignes2 [LesLignesDuFichier $Fichier2] foreach Ligne $LesLignes { scan $Ligne "%s %s %s %s" RA1324 x y RA2717 if {$Des1==$RA2717} { set jaitrouveRA 1 puts "=>Des1=$Des1 == Ret1324=$RA1324" if {[file exists "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"]} { set LeTfaDeRa [ContenuDuFichier "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"] scan $LeTfaDeRa "%s %s %s" x y AccmRNA if {$LeTfaDeRa==""} { puts "UN FICHIER MS PAS DE SEQ" } if {$LeTfaDeRa!=""} { puts "OK1=>$AccmRNA" #puts $LeTfaDeRa } } else { incr Z puts "PAS DE FICHIER" lappend LesSsFiches "ligne $I Des1=$Des1 Ret1324=$RA1324" } foreach Ligne2 $LesLignes { scan $Ligne2 "%s %s %s" RA1324b AccmRNA2 if {$RA1324b == $RA1324} { puts "OK2=>$AccmRNA2" } else { puts "pas d'access trouve ac blastx" } } } } if {!$jaitrouveRA} { puts "PAS DE CORRES" } } } Espionne "$A =nb de ligne RA" Espionne "$Z =nb de lignes sans fichier" foreach X $LesSsFiches { puts $X } } proc AttriToutRA_AEffacer {} { set A 0 set Z 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set jaitrouveRA 0 if { [regexp {^RA[0-9]+} $Des1] } { incr A puts "ligne $I Des1=$Des1" set Fichier "/genomics/link/Ret1324/fiches/Orf2Cluster2Access2Def2Expression" set LesLignes [LesLignesDuFichier $Fichier] set Fichier2 "/genomics/link/Ret1324/fiches/AccessDesProteinesEtDesmRNAsChoisis" set LesLignes2 [LesLignesDuFichier $Fichier2] foreach Ligne $LesLignes { scan $Ligne "%s %s %s %s" RA1324 x y RA2717 if {$Des1==$RA2717} { set jaitrouveRA 1 puts "=>Des1=$Des1 == Ret1324=$RA1324" if {[file exists "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"]} { set LeTfaDeRa [ContenuDuFichier "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$RA1324"] scan $LeTfaDeRa "%s %s %s" x y AccmRNA if {$LeTfaDeRa==""} { puts "UN FICHIER MS PAS DE SEQ" } if {$LeTfaDeRa!=""} { puts "OK1=>$AccmRNA" #puts $LeTfaDeRa } } else { incr Z puts "PAS DE FICHIER" lappend LesSsFiches "ligne $I Des1=$Des1 Ret1324=$RA1324" } foreach Ligne2 $LesLignes { scan $Ligne2 "%s %s %s" RA1324b AccmRNA2 if {$RA1324b == $RA1324} { puts "OK2=>$AccmRNA2" } else { puts "pas d'access trouve ac blastx" } } } } if {!$jaitrouveRA} { puts "PAS DE CORRES" } } } Espionne "$A =nb de ligne RA" Espionne "$Z =nb de lignes sans fichier" foreach X $LesSsFiches { puts $X } } proc AttriToutRefseqPiqor {} { set B 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] if { [regexp {^RA[0-9]+} $Des1] } {continue} if {$Ac1=="" && $Ac2!=""} { incr B puts "ligne $I Ac1=$Ac1 et Ac2=$Ac2" set LesNMs [split $Ac2 ","] foreach NM $LesNMs { set Commande "getz \"\(\\\[refseqrelease-acc:$NM\\\]\|\\\[refseqnew-acc:$NM\\\]\)\!\(\\\[refseqnew-acc:$NM\\\]>\\\[refseqrelease-acc:$NM\\\]\)\" \-view FastaSeqs" #set Commande "getz \"\\\[refseq-acc:$NM\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts "attention fiche n'existe plus" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } puts $GetzOut } } } } Espionne "$B = nb de ligne ac refseqpiqor et ss dnaacc" } proc AttriToutRefseqPiqor_AEffacer {} { set B 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] if { [regexp {^RA[0-9]+} $Des1] } {continue} if {$Ac1=="" && $Ac2!=""} { incr B puts "ligne $I Ac1=$Ac1 et Ac2=$Ac2" set LesNMs [split $Ac2 ","] foreach NM $LesNMs { set Commande "getz \"\(\\\[refseqrelease-acc:$NM\\\]\|\\\[refseqnew-acc:$NM\\\]\)\!\(\\\[refseqnew-acc:$NM\\\]>\\\[refseqrelease-acc:$NM\\\]\)\" \-view FastaSeqs" #set Commande "getz \"\\\[refseq-acc:$NM\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts "attention fiche n'existe plus" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } puts $GetzOut } } } } Espionne "$B = nb de ligne ac refseqpiqor et ss dnaacc" } proc AttriToutStat {} { set total 0; set A 0; set B 0; set C 0; set D 0; set E 0; set F 0; set G 0; set H 0 set J 0; set K 0; set L 0; set M 0 foreach I [RetChip5 ListOf Index] { incr total set Des1 [RetChip5 $I "description_customer"] set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "DNA_acc"] set Ac2 [RetChip5 $I "refseq_PIQOR"] set Ac3 [RetChip5 $I "prot_acc"] set Ac4 [RetChip5 $I "prot_acc_PIQOR"] if { $Ac1=="" && $Ac2!="" } { incr A } if { $Ac1!="" && ![regexp {\?} $Ac1] } { incr B if {$Ac2==""} { incr C if {$Ac3 == "" && $Ac4 == ""} {incr D} if {$Ac3 == "" && $Ac4 != ""} {incr E} if {$Ac3 != "" && $Ac4 == ""} {incr F} if {$Ac3 != "" && $Ac4 != ""} {incr G} } if {$Ac2!=""} {incr H} } if { ($Ac1 == "" || [regexp {\?} $Ac1]) && $Ac2 == "" } { incr J if { ($Ac3!="" && ![regexp {\?} $Ac3]) || $Ac4!="" } { incr K } if { ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4=="" } { incr L } } } Espionne "total $total" Espionne "A $A";Espionne "B $B";Espionne "C $C";Espionne "D $D";Espionne "E $E";Espionne "F $F" Espionne "G $G";Espionne "H $H";Espionne "J $J";Espionne "K $K";Espionne "L $L";Espionne "M $M" } proc AttriToutVf {} { set total 0; set B 0; set C 0; set W 0; set X 0; set D 0; set M 0; set N 0; set O 0; set P 0 set cas1 0; set cas1a 0; set cas1b 0; set cas1c 0 set cas2 0; set cas2a 0; set cas2b 0; set cas2c 0; set cas2d 0 set cas3 0; set cas4 0; set cas5 0; set cas6 0 set cas7 0; set cas7a 0; set cas7b 0; set cas8 0; set cas9 0; set cas10 0; set cas11 0 set LesLignesPauvres {} foreach I [RetChip5 ListOf Index] { #if {$I>=11} {continue} if {$I!=87} {continue} incr total set Des1 [RetChip5 $I "description_customer"] set Des2 [RetChip5 $I "description_memorec"] set Ac1 [RetChip5 $I "DNA_acc"] set Ac2 [RetChip5 $I "refseq_PIQOR"] set Ac3 [RetChip5 $I "prot_acc"] set Ac4 [RetChip5 $I "prot_acc_PIQOR"] set LesNMs {} set LesAc {} set Genre "" set TousLesGenres {} array unset LesGenres set onasouris 0 set LesAcsDna {} set LesAcProt {} set TousLesGenresProt {} array unset LesGenreAcProt set onasourisprot 0 set genenamefait 0 set ListAcsParGn {}; set BigList {} set LesAcsDeLaLigne "" if {$Ac1=="" && $Ac2!=""} { incr B Espionne "ligne $I Ac1=$Ac1 et Ac2=$Ac2" set Ac2 [string trim $Ac2] regsub -all " " $Ac2 "" Ac2 set LesNMs [split $Ac2 ","] set LesNMs [ListeSansDoublon $LesNMs] set LesNMs [ListeSsElmtVide $LesNMs] set LesAcsDeLaLigne [join $LesNMs " "] } if { $Ac1!="" && ![regexp {\?} $Ac1] } { set Ac1 [string trim $Ac1] regsub -all " " $Ac1 "" Ac1 incr C Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" if {$Ac2==""} { incr W set LesAc [split $Ac1 ","] } if {$Ac2!=""} { set Ac2 [string trim $Ac2] regsub -all " " $Ac2 "" Ac2 incr X set Ac1Ac2 "$Ac1,$Ac2" set LesAc [split $Ac1Ac2 ","] } set LesAc [ListeSansDoublon $LesAc] set LesAc [ListeSsElmtVide $LesAc] foreach Ac $LesAc { set Genre [OrgDuNmOuGb $Ac] #Espionne "Ac $Ac Genre $Genre" #if {$Genre == ""} {Espionne "attention pas fiches"} LConcat TousLesGenres $Genre set LesGenres($Ac) $Genre } set TousLesGenres [ListeSansDoublon $TousLesGenres] foreach ChaqueGenre $TousLesGenres { if {[regexp {^Mus} $ChaqueGenre]} { set onasouris 1 } } if {$onasouris} { #Espionne "cas1" incr cas1 foreach Ac $LesAc { set LesNmRefSeq {}; set LesNvxNm {} if {[regexp {^Mus} $LesGenres($Ac)]} { #Espionne "Ac $Ac" if { ![regexp {^NM_} $Ac] && ![regexp {^XM_} $Ac] && ![regexp {^NR_} $Ac]} { set NM [MrnaRefseqUcscMouse $Ac "Nm"] #Espionne "NM $NM" if { $NM != "" } { #Espionne "cas1a" incr cas1a set LesNmRefSeq [split $NM " "] foreach NmRefSeq $LesNmRefSeq { set GenreNmRefSeq [OrgDuNmOuGb $NmRefSeq] #Espionne "$NmRefSeq $GenreNmRefSeq" if {[regexp {^Mus} $GenreNmRefSeq]} { LConcat LesNvxNm $NmRefSeq } } set LesNvxNm [ListeSansDoublon $LesNvxNm] set NMjoint [join $LesNvxNm " "] #Espionne "NMjoint $NMjoint" LConcat LesAcsDna "$Ac $NMjoint" } else { #Espionne "cas1b" incr cas1b LConcat LesAcsDna $Ac } } else { #Espionne "cas1c" incr cas1c LConcat LesAcsDna $Ac } } } } #Espionne "cas2" incr cas2 #travail sur prot Ac3=$Ac3 Ac4=$Ac4 if {$Ac3!="" || $Ac4!=""} { #Espionne "cas2a" incr cas2a if {$Ac3!="" && $Ac4!=""} { #Espionne "cas2b" incr cas2b set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 set Ac3Ac4 "$Ac3,$Ac4" set LesAcProt [split $Ac3Ac4 ","] } elseif {$Ac3!=""} { set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 #Espionne "cas2c" incr cas2c set LesAcProt [split $Ac3 ","] } elseif {$Ac4!=""} { set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 #Espionne "cas2d" incr cas2d set LesAcProt [split $Ac4 ","] } set LesAcProt [ListeSansDoublon $LesAcProt] set LesAcProt [ListeSsElmtVide $LesAcProt] foreach AcProt $LesAcProt { set GenreAcProt [OrgDuProt $AcProt] #Espionne "$AcProt $GenreAcProt" #if {$GenreAcProt==""} {Espionne "attention pas fiches" } LConcat TousLesGenresProt $GenreAcProt set LesGenreAcProt($AcProt) $GenreAcProt } set TousLesGenresProt [ListeSansDoublon $TousLesGenresProt] foreach ChaqueGenreProt $TousLesGenresProt { if {[regexp {^Mus} $ChaqueGenreProt]} { set onasourisprot 1 } } if {$onasourisprot} { #Espionne "cas3" incr cas3 foreach AcProt $LesAcProt { set ListeDesAcs1 {}; set ListeDesAcs2 {}; set LesAcsDnaProv {} if {[regexp {^Mus} $LesGenreAcProt($AcProt)]} { set ResultParProt [AttriDesAcDnaParProt $AcProt] #Espionne "ResultParProt $ResultParProt" set ResultParGb [AttriDesAcDnaParGb $AcProt] #Espionne "ResultParGb $ResultParGb" if {$ResultParProt != ""} { set ListeDesAcs1 [split $ResultParProt " "] } if {$ResultParGb != ""} { set ListeDesAcs2 [split $ResultParGb " "] } set LesAcsDnaProv [concat $ListeDesAcs1 $ListeDesAcs2] foreach elmt $LesAcsDnaProv { LConcat LesAcsDna $elmt } } } } if {!$onasourisprot} { set LesAcsDna [ListeSansDoublon $LesAcsDna] #Espionne "cas4" incr cas4 set genenamefait 1 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } } if {!$genenamefait && ($ListAcsParGn == {} && $LesAcsDna == {})} { #Espionne "cas6" incr cas6 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } set BigList [concat $LesAcsDna $ListAcsParGn] set BigList [ListeSansDoublon $BigList] if {$BigList == {}} { set LesAcsDeLaLigne "" } else { set BigList [ListeSsElmtVide $BigList] set LesAcsDeLaLigne [join $BigList " "] } #Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if { ($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && (($Ac3!="" && ![regexp {\?} $Ac3]) || $Ac4!="")} { #Espionne Ac3=prot_acc Ac4=prot_acc_piqor incr D Espionne "ligne $I Ac3=$Ac3 Ac4=$Ac4" set Ac3 [string trim $Ac3] regsub -all " " $Ac3 "" Ac3 set Ac4 [string trim $Ac4] regsub -all " " $Ac4 "" Ac4 if {$Ac3!="" && $Ac4!=""} { incr M set Ac3Ac4 "$Ac3,$Ac4" set LesAcProt [split $Ac3Ac4 ","] } elseif {$Ac3!="" && ![regexp {\?} $Ac3]} { incr N set LesAcProt [split $Ac3 ","] } elseif {$Ac4!=""} { incr O set LesAcProt [split $Ac4 ","] } set LesAcProt [ListeSansDoublon $LesAcProt] foreach AcProt $LesAcProt { set GenreProt [OrgDuProt $AcProt] #Espionne "AcProt $AcProt GenreProt $GenreProt" #if {$GenreProt==""} {Espionne "attention pas fiche"} LConcat TousLesGenresProt $GenreProt set LesGenresProt($AcProt) $GenreProt } set TousLesGenresProt [ListeSansDoublon $TousLesGenresProt] foreach ChaqueGenreProt $TousLesGenresProt { if {[regexp {^Mus} $ChaqueGenreProt]} { set onasourisprot 1 } } if {$onasourisprot} { #Espionne "cas7" incr cas7 foreach AcProt $LesAcProt { set ListeDesAcs1 {}; set ListeDesAcs2 {}; set LesAcsDnaProv {} if {[regexp {^Mus} $LesGenresProt($AcProt)]} { set ResultParProt [AttriDesAcDnaParProt $AcProt] #Espionne "ResultParProt $ResultParProt" set ResultParGb [AttriDesAcDnaParGb $AcProt] #Espionne "ResultParGb $ResultParGb" if {$ResultParProt != ""} { #Espionne "cas7a" incr cas7a set ListeDesAcs1 [split $ResultParProt " "] } if {$ResultParGb != ""} { #Espionne "cas7b" incr cas7b set ListeDesAcs2 [split $ResultParGb " "] } set LesAcsDnaProv [concat $ListeDesAcs1 $ListeDesAcs2] foreach elmt $LesAcsDnaProv { LConcat LesAcsDna $elmt } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] } if {!$onasourisprot} { #Espionne "cas8" incr cas8 set genenamefait 1 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] } if {!$genenamefait && ($ListAcsParGn=={} && $LesAcsDna=={})} { #Espionne "cas9" incr cas9 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] set genenamefait 1 } set BigList [concat $LesAcsDna $ListAcsParGn] set BigList [ListeSansDoublon $BigList] if {$BigList == {}} { set LesAcsDeLaLigne "" } else { set BigList [ListeSsElmtVide $BigList] set LesAcsDeLaLigne [join $BigList " "] } #Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if {($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4==""} { incr P Espionne "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" #Espionne "cas10" incr cas10 set genenamefait 1 #Espionne "$Des1 $Des2" set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] if {$ListAcsParGn == {}} { set LesAcsDeLaLigne "" } else { set ListAcsParGn [ListeSansDoublon $ListAcsParGn] set ListAcsParGn [ListeSsElmtVide $ListAcsParGn] set LesAcsDeLaLigne [join $ListAcsParGn " "] } #Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } if {$genenamefait == 0 && $LesAcsDeLaLigne == ""} { #Espionne "cas11" incr cas11 set ListAcsParGn [AttriDesAcDnaParGeneName $Des1 $Des2] if {$ListAcsParGn == {}} { set LesAcsDeLaLigne "" } else { set ListAcsParGn [ListeSansDoublon $ListAcsParGn] set ListAcsParGn [ListeSsElmtVide $ListAcsParGn] set LesAcsDeLaLigne [join $ListAcsParGn " "] } #Espionne "LesAcsDeLaLigne $LesAcsDeLaLigne" } #temporaire if {$LesAcsDeLaLigne == ""} { set LignePauvre "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" lappend LesLignesPauvres $LignePauvre Espionne "bidon trouve pas" } else { Espionne "$LesAcsDeLaLigne" foreach Acs $LesAcsDeLaLigne { if { [regexp "^NM_" $Acs] || [regexp "^XM_" $Acs] || [regexp "^NR_" $Acs] } { set GetzOut "" set Commande "getz \"\\\[refseq-acc:$Acs\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} {Espionne "$Acs bidon fiche n'existe plus" } if {$GetzOut != ""} {Espionne "$Acs ok"} } else { set GetzOut "" set Commande "getz \"\\\[genbankfull-acc:$Acs\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} {Espionne "$Acs bidon fiche n'existe plus" } if {$GetzOut != ""} {Espionne "$Acs ok"} } } } #temporaire } set longdespauvres [llength $LesLignesPauvres] SauveLesLignes $LesLignesPauvres dans [RepertoireDuGenome]/fiches/NewLesLignesPauvres.txt Espionne "nombre de lignes= $total" Espionne "B=$B";Espionne "C $C";Espionne "W $W";Espionne "X $X" Espionne "D $D";Espionne "M $M";Espionne "N $N";Espionne "O $O";Espionne "P $P" Espionne "cas1 $cas1";Espionne "cas1a $cas1a";Espionne "cas1b $cas1b";Espionne "cas1c $cas1c" Espionne "cas2 $cas2";Espionne "cas2a $cas2a";Espionne "cas2b $cas2b";Espionne "cas2c $cas2c";Espionne "cas2d $cas2d" Espionne "cas3 $cas3";Espionne "cas4 $cas4";Espionne "cas5 $cas5";Espionne "cas6 $cas6" Espionne "cas7 $cas7";Espionne "cas7a $cas7a";Espionne "cas7b $cas7b" Espionne "cas8 $cas8";Espionne "cas9 $cas9";Espionne "cas10 $cas10";Espionne "cas11 $cas11" Espionne "nombre de lignes pauvres = $longdespauvres" } proc AttriTout_AEffacer {} { set A 0 set B 0 set C 0 set D 0 set E 0 set LesLignesPauvres {} foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] set jaitrouvednaacc 0 set jaitrouve 0 set jaitrouveRA 0 set jaitrouvegn 0 set genenamefait 0 set jaitrouveprot 0 set LesGenresP3 {} set AccDna "" set ListeDesAcs {} set LesAcsDna {} set LesAcsDeLaLigne "" set pls 0 set PasSouris 0 set LesIdsDeLaLigne {} set LesNmsDeLaLigne {} set LesmRNADeLaLigne {} set LesAcsGbDeLaLigne {} set LesmRNAGbDeLaLigne {} set LesAcsParGNDeLaLigne "" set LesAcsDeLaLigneList {} set cont 0 set LigneQueSouris 0 set SsFicheProt 0 set vide 0 if { [regexp {^RA[0-9]+} $Des1] } { incr A puts ">bidon raligne $I Des1=$Des1\natcg" # if {[file exists "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$Des1"]} {set LeTfaDeRa [ContenuDuFichier "/genomics/link/Ret1324/mrnatfa_Mus_musculus/$Des1"]; puts $LeTfaDeRa} else {puts "attention fichera n'existe plus" } continue } if {$Ac1=="" && $Ac2!=""} { incr B puts "ligne $I Ac1=$Ac1 et Ac2=$Ac2" set LesNMs [split $Ac2 ","] foreach NM $LesNMs { set Commande "getz \"\(\\\[refseqrelease-acc:$NM\\\]\|\\\[refseqnew-acc:$NM\\\]\)\!\(\\\[refseqnew-acc:$NM\\\]>\\\[refseqrelease-acc:$NM\\\]\)\" \-view FastaSeqs" #set Commande "getz \"\\\[refseq-acc:$NM\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} { puts ">bidon ficherefseqpiqor n'existe plus\natgc" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } puts $GetzOut } } continue } if { $Ac1!="" && ![regexp {\?} $Ac1] } { set jaitrouvednaacc 1 incr C puts "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" if {$Ac2==""} { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set LesAcsDeLaLigne "$Ac1 $NM" } else { set LesAcsDeLaLigne $Ac1 } } else { set LesAcsDeLaLigne $Ac1 } } if {[regexp {^Homo$} $Genre]} { #travail sur prot Ac3=$Ac3 Ac4=$Ac4 set LesAcs3 [split $Ac3 ","] foreach ChaqAc3 $LesAcs3 { set GenreAc3 [OrgDuProt $ChaqAc3] lappend LesGenresP3 $GenreAc3 } set LesGenresP3 [lsort -unique $LesGenresP3] if { [llength $LesGenresP3] > 1 } { puts "attention ilya pls genres pour cette ligne" } set GenreP3 [join $LesGenresP3 " "] if { $GenreP3 == "" } { #jamais ce cas; je ne le traite pas #puts "pls=>ligne=$I Acc=$Ac3 Id=attention PAS FICHESpls\n" if {$Ac4 == ""} { puts "dois prendre la def" } if {$Ac4 != ""} { puts "dois prendre prot_acc_piqor"} continue } if {[regexp {^Homo} $GenreP3]} { if {$Ac4!=""} { set ListeAc4 [split $Ac4 ","] foreach ChaqueAc4 $ListeAc4 { set AccDna [AttriDesAcDnaParProt $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc4] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach T $ListeDesAcs {LConcat LesAcsDna $T} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set genenamefait 1 set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$genenamefait == 0 && $LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } if {[regexp {^Mus} $GenreP3]} { if {$Ac4!=""} { set AccsProt "$Ac3,$Ac4" set ListeAccsProt [split $AccsProt ","] foreach ChaqueAccProt $ListeAccsProt { set AccDna [AttriDesAcDnaParProt $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAccProt] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } else { set ListeAc3 [split $Ac3 ","] foreach ChaqueAc3 $ListeAc3 { set AccDna [AttriDesAcDnaParProt $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach Q $ListeDesAcs {LConcat LesAcsDna $Q} } if {$AccDna==""} { set AccDna [AttriDesAcDnaParGb $ChaqueAc3] if {$AccDna!=""} { set ListeDesAcs [split $AccDna " "] foreach S $ListeDesAcs {LConcat LesAcsDna $S} } } } set LesAcsDna [ListeSansDoublon $LesAcsDna] set LesAcsDeLaLigne [join $LesAcsDna " "] } if {$LesAcsDeLaLigne == ""} { set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } } } } if {$Ac2!=""} { if { $Ac1==$Ac2 } { set LesAcsDeLaLigne $Ac2 set jaitrouve 1 } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 set jaitrouve 1 break } } } if { $jaitrouve==0 } { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus$} $Genre]} { if { ![regexp {^NM_} $Ac1] } { set NM [MrnaRefseqUcscMouse $Ac1 "Nm"] if { $NM != "" } { set ListeAc1 [split $Ac1 ","] set ListeAc2 [split $Ac2 ","] set ListeNM [split $NM " "] set Tout [concat $ListeAc1 $ListeAc2 $ListeNM] set Tout [ListeSansDoublon $Tout] set LesAcsDeLaLigne [join $Tout " "] } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } else { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne "$Ac1 $Ac2" } } if {[regexp {^Homo$} $Genre]} { regsub -all "," $Ac2 " " Ac2 set LesAcsDeLaLigne $Ac2 } } #jaitrouve } #refseqpiqorpasvide } #dnaaccpas vide if { $Ac1=="" && $Ac2=="" && ($Ac3!="" || $Ac4!="")} { #Ac3=prot_acc Ac4=prot_acc_piqor incr D set jaitrouveprot 1 puts "ligne $I Ac3=$Ac3 Ac4=$Ac4" if { [regexp "," $Ac3] || [regexp "," $Ac4] } { set pls 1 } set LesAcs3 [split $Ac3 ","] set LesAcs4 [split $Ac4 ","] set LesAcs3et4 [concat $LesAcs3 $LesAcs4] set SesAcs [split $LesAcs3et4 " "] foreach Ac $SesAcs { set GenreLu "" set IdLu "" set NM "" set mRNA "" set AcGb "" set mRNAGb "" set GenreLu [OrgDuProt $Ac] if { $GenreLu == "" } { set IdLu ""; set NM ""; set mRNA ""; set AcGb ""; set mRNAGb "" LConcat LesIdsDeLaLigne $IdLu LConcat LesNmsDeLaLigne $NM LConcat LesmRNADeLaLigne $mRNA LConcat LesAcsGbDeLaLigne $AcGb LConcat LesmRNAGbDeLaLigne $mRNAGb continue } if { $GenreLu != "" && ![regexp -nocase {^Mus} $GenreLu]} { if {! $pls} { incr PasSouris set cont 1; break } if {$pls} { incr PasSouris continue } } set IdLu [IdDuProt $Ac] LConcat LesIdsDeLaLigne $IdLu set NM [LocUcsc $IdLu] if {$NM!=""} { set ListNM [split $NM " "] foreach ChaqNM $ListNM { LConcat LesNmsDeLaLigne $ChaqNM if { ![regexp {^NM_} $ChaqNM] } { set mRNA [MrnaRefseqUcscMouse $ChaqNM "Nm"] if {$mRNA != ""} { set ListemRNA [split $mRNA " "] foreach ChaqmRNA $ListemRNA { LConcat LesmRNADeLaLigne $ChaqmRNA } } } } } if {$NM==""} { set Commande "getz \"\\\[protein-acc:$Ac\\\] > \\\[genbankfull-mol:mRNA\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut != ""} { set LesLignesDeGetzOut [split $GetzOut "\n"] foreach LigneDeGetzOut $LesLignesDeGetzOut { set Ref "" set AcGb "" scan $LigneDeGetzOut "%s %s" Ref AcGb LConcat LesAcsGbDeLaLigne $AcGb set mRNAGb [MrnaRefseqUcscMouse $AcGb "Nm"] if {$mRNAGb != ""} { set ListemRNAGb [split $mRNAGb " "] foreach ChaqmRNAGb $ListemRNAGb { LConcat LesmRNAGbDeLaLigne $ChaqmRNAGb } } } } } if { $NM=="" && $AcGb=="" } { if {$pls} {incr vide} } } if { [llength $SesAcs] == $PasSouris } { set LigneQueSouris 1 } if { [expr [llength $SesAcs] - $PasSouris] != [llength $LesIdsDeLaLigne] } { set SsFicheProt 1 } set LesIdsDeLaLigne [lsort -unique $LesIdsDeLaLigne] set LesNmsDeLaLigne [lsort -unique $LesNmsDeLaLigne] set LesmRNADeLaLigne [lsort -unique $LesmRNADeLaLigne] set LesAcsGbDeLaLigne [lsort -unique $LesAcsGbDeLaLigne] set LesmRNAGbDeLaLigne [lsort -unique $LesmRNAGbDeLaLigne] if { ($cont || $LigneQueSouris) || ($LesNmsDeLaLigne=={} && $LesAcsGbDeLaLigne=={}) || ($SsFicheProt) || ($vide>0) } { set LesAcsParGNDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne $LesAcsParGNDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } if { $LesNmsDeLaLigne != {} || $LesAcsGbDeLaLigne != {} || ($LesNmsDeLaLigne != {} && $LesAcsGbDeLaLigne != {}) } { set LesAcsDeLaLigneList [concat $LesNmsDeLaLigne $LesmRNADeLaLigne $LesAcsGbDeLaLigne $LesmRNAGbDeLaLigne] set LesAcsDeLaLigneList [ListeSansDoublon $LesAcsDeLaLigneList] set LesAcsDeLaLigne [join $LesAcsDeLaLigneList " "] } } if {($Ac1=="" || [regexp {\?} $Ac1]) && $Ac2=="" && ($Ac3=="" || [regexp {\?} $Ac3]) && $Ac4==""} { puts "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" set jaitrouvegn 1 incr E set LesAcsDeLaLigne [AttriDesAcDnaParGeneName $Des1 $Des2] } if {$jaitrouvednaacc || $jaitrouveprot || $jaitrouvegn} { if {$LesAcsDeLaLigne != ""} { set ListeFinal [split $LesAcsDeLaLigne " "] foreach ChaqueFinal $ListeFinal { set GetzOut "" if { [regexp {^NM_} $ChaqueFinal] || [regexp {^NR_} $ChaqueFinal] } { set Commande "getz \"\(\\\[refseqrelease-acc:$ChaqueFinal\\\]\|\\\[refseqnew-acc:$ChaqueFinal\\\]\)\!\(\\\[refseqnew-acc:$ChaqueFinal\\\]>\\\[refseqrelease-acc:$ChaqueFinal\\\]\)\" \-view FastaSeqs" #set Commande "getz \"\\\[refseq-acc:$ChaqueFinal\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] set GetzOut [string range $GetzOut [string last ">r" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } } if { ![regexp {^NM_} $ChaqueFinal] && ![regexp {^NR_} $ChaqueFinal] } { set Commande "getz \"\\\[genbankfull-acc:$ChaqueFinal\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if { [regexp {^>gen.+>gen} $GetzOut] } { puts "ATTENTION AU - 2 SEQ FASTA" } } if {$GetzOut == ""} { puts ">bidon fichedna n'existe plus\natcg" } if {$GetzOut != ""} { puts $GetzOut } } } if {$LesAcsDeLaLigne == ""} { puts ">bidon pas d'access\natcg" lappend LesLignesPauvres "$I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" } } } #foreach set NbPauvres [llength $LesLignesPauvres] set f [open LesLignesPauvres.txt w] puts $f "$NbPauvres = nb de ligne Pauvres" foreach Ligne $LesLignesPauvres { puts $f $Ligne } close $f Espionne "$A =nb de RA" Espionne "$B =nb ac refseq_piqor ms pas dna_acc" Espionne "$C =nb ac dna_acc" Espionne "$D =nb ac prot" Espionne "$E =nb ac rien" } proc AttributeNodeFromKEGG {} { #Les pathways doivent provenir du meme orga set ListPathway [list "hsa04210" "hsa04610" "hsa04660" "hsa04662" "hsa04062"] lappend LesLignes "Pn\tQueryColor" lappend LesLignesTest "Pn\tQueryColor" foreach Path $ListPathway { set LesGns {} regexp {([a-z]+)([0-9]+)} $Path tmp Org Id set File "/home/poidevin/ordi/bilbault/FromKegg/${Path}.gene" Espionne "$File" foreach Ligne [LesLignesDuFichier $File] { LConcat LesGns [split [lindex [split $Ligne "\t\["] 1] " ,"] } set LesGns [ListeSansDoublon $LesGns] foreach Gn $LesGns { set Gn [string trim $Gn] if {$Gn==""} {continue} lappend LesLignesTest "$Gn\t$Path" lappend DejaVu($Gn) $Path } } foreach Clef [array names DejaVu] { if {[llength $DejaVu($Clef)]>1} { set Id [join $DejaVu($Clef) "_"] lappend LesLignes "$Clef\t$Id" lappend LesCombi $DejaVu($Clef) } else { lappend LesLignes "$Clef\t$DejaVu($Clef)" } } set LesCombi [ListeSansDoublon $LesCombi] EspionneL $LesCombi SauveLesLignes $LesLignesTest dans "/home/poidevin/ordi/bilbault/AttributeNodeFromKEGGTest2" SauveLesLignes $LesLignes dans "/home/poidevin/ordi/bilbault/AttributeNodeFromKEGG" } proc AttributsDeLaBalise {Item aTexte {Rogner NePasRogner}} { upvar $aTexte Texte ValeurDeLaBalise $Item $aTexte $Rogner A return $A } proc AuChoixDuBlast {NomDuFichier {FichierSortie ""}} { if {$FichierSortie==""} { set FichierSortie "GetText" } set f $NomDuFichier set nomori [file join [RepertoireDuGenome] "tfasdescopains_nature" $NomDuFichier] set Nom [file tail $NomDuFichier] if {[EstUnPAB $NomDuFichier]} { set Fichier "[RepertoireDuGenome]/blastp/$Nom" } else { set Fichier $NomDuFichier } if {! [file exists $Fichier]} {return ""} set LBlast [LesLignesDuFichier $Fichier] set lsm {} set lPN {} set LDPN {} set LDDPN {} set MaxListe 5000 set SeuilExpect 0.001 DecortiqueBlast $LBlast $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lProfil lPN if {[llength $lPN] < 5} { set LesElus $lBanqueId if {$FichierSortie=="GetList"} { return $LesElus } if {$FichierSortie=="GetText"} { set LeBlast [join $LBlast "\n"] return $LeBlast } if {$FichierSortie=="Show"} { return [AfficheVariable $LeBlast "AvecSegAlignement" "MounirReducedOf_/$Nom"] } return [Sauve $LeBlast dans $FichierSortie] } # Transformation E-values # set lPN [LisseCourbe $lPN] foreach e $lPN { if {$e == 0.0} {set e "1.0e-300"} set e [expr log($e)] lappend llogPN $e } set Eder [lindex $lPN end] # Calcul des derivee premiere, seconde et tierce set LDPN [Derivee $llogPN] # set LDPN [LisseCourbe $LDPN] set LDPN [linsert $LDPN 0 -300.] set LD2PN [Derivee $LDPN] set LD2PN [linsert $LD2PN 0 300.] # set LD2PN [linsert $LD2PN end 300.] set LD3PN [Derivee $LD2PN] set LD3PN [linsert $LD3PN 0 300.] # set LD3PN [linsert $LD3PN end 300. 300.] # fait tri # Met toujours le Premier lappend LesElus [lindex $lBanqueId 0] set nelus 0 set i 0 set LDt [lrange $LD3PN 0 end] set LBt [lrange $lBanqueId 0 end] foreach e $LDt { if {$i == 0 || $i == 1} { incr i continue } set icou [expr $i-1] set Flag 0 if {$e < 0.0} { set prev [lindex $LDt ${icou}] if {$prev > 0.0} { lappend LesElus [lindex $LBt $icou] lappend Lid $icou set Flag 1 incr nelus } } if {$nelus >= 500} {break} incr i } foreach i $LesElus { if {$i == ""} {continue} lappend res $i } set LesElus $res if {$FichierSortie=="GetList"} { return $LesElus } if {$FichierSortie=="GetText"} { set LeReduit [BlastReduit $Fichier $LesElus] set Reduit [join $LeReduit "\n"] return $Reduit } if {$FichierSortie=="Show"} { return [AfficheVariable $Reduit "AvecSegAlignement" "MounirReducedOf_/$Nom"] } return [Sauve $Reduit dans $FichierSortie] } proc AuCongelo {{Action ""}} { set LesAvaries {} set LesAvariesAFaire {} set LesAFaire {} foreach Nom [ListeDesPABs] { set P [DernierePoele $Nom] set C [DernierCongelo $Nom] if {$P==""} { continue } Espionne "$Nom = $P = $C =" if {$C==""} { Espionne "$P" lappend LesAFaire $P } if {$C!="" && ([set TC [file mtime $C]] < [set TP [file mtime $P]])} { lappend LesAFaire $P lappend LesAvaries "$Nom [Date Nice $TC] [Date Nice $TP]" lappend LesAvariesAFaire $C } } Espionne ".............................. LesAvaries" EspionneL $LesAvaries Espionne ".............................. LesAFaire" EspionneL $LesAFaire if { ! [OuiOuNon "Je congele effectivement ?"]} { return "" } set LesFaits {} foreach A $LesAvariesAFaire { exec mv $A /tempor/grid/poubelle/ } foreach P $LesAFaire { exec mv $P /tempor/grid/congelo/ lappend LesFaits "/tempor/grid/congelo/[file tail $P]" } return $LesFaits } proc AuLog {{args ""}} { global TexteDuLog Toggle NomFenetreOrdali wtlog Defauts switch [lindex $args 0] { "-nonewline" { set bn "" set txt [lindex $args 1] } "LClean" { set TexteDuLog "" return } "LOutput" { set what [lindex $args 1] if {$what eq ""} {set what HTML} set fout [lindex $args 2] set add [lindex $args 3] OutputTLog $what "$TexteDuLog" $fout $add return } default { set bn "\n" set txt "$args" } } # voir ordali_tlog .... if {$::Defauts(OnlyTLog) && ! [regexp {^@} $txt]} { set txt "@text $txt" } if {[regexp {^\@text} $txt]} { regsub -all "\n" $txt "AlALiGNe" txt } append TexteDuLog "${txt}$bn" return } proc AuLogOld {args} { global TexteDuLog Toggle NomFenetreOrdali wtlog Defauts if {![info exists TexteDuLog]} {set TexteDuLog ""} if {[lindex $args 0] eq "-nonewline"} { set bn "" set txt [lindex $args 1] } else { set bn "\n" set txt [join $args " "] } if {! [ModeI] || ! [info exists Toggle]} { # Dans tous les cas on ajoute au texte append TexteDuLog "$txt${bn}" return } if {$Toggle(AuLog)} { if {! [info exists wtlog]} { set wlog ".wlog" toplevel $wlog wm title $wlog "Ordali Log Console" wm iconname $wlog "ordali log" wm protocol $wlog WM_DELETE_WINDOW KillParLaCroix lower $wlog $NomFenetreOrdali set wtlog "$wlog.frmt.text" frame $wlog.frmt scrollbar $wlog.frmt.scroll -width 8 -command "$wlog.frmt.text yview " text $wlog.frmt.text -height 25 -width 80 -yscrollcommand "$wlog.frmt.scroll set" -font "Courier 10" -bg white pack $wlog.frmt.text -fill both -side left -expand 1 pack $wlog.frmt.scroll -side left -fill y pack $wlog.frmt -side top frame $wlog.frmb pack $wlog.frmb -side bottom -fill x -padx 5 -pady 10 button $wlog.frmb.save -text " Save " -background green1 -command "SauveLeLog" button $wlog.frmb.clear -text " Close " -background red -command "DetruitLogConsole" pack $wlog.frmb.clear $wlog.frmb.save -side left -expand 1 set y [expr {[winfo screenheight $wlog] - 2*[winfo reqheight $wlog]}] wm geom $wlog +0+$y $wtlog insert end "$TexteDuLog${bn}" $wtlog see end } $wtlog insert end "$txt${bn}" $wtlog see end } # Dans tous les cas on ajoute au texte append TexteDuLog "$txt${bn}" return } proc AuLogWindow {{args JSuisBidon}} { global TexteDuLog Toggle NomFenetreOrdali wtlog Defauts LogTampon inBeginLog switch [lindex $args 0] { "-nonewline" { set bn "" set txt [lindex $args 1] } "LOutput" { set what [lindex $args 1] OutputTLog $what "$TexteDuLog" return } default { set bn "\n" set txt [join $args " "] } } # voir ordali_tlog .... if {[regexp {^\@text} $txt]} { regsub -all "\n" $txt "AlALiGNe" txt } if {! [info exists wtlog]} { set inBeginLog 0 set wlog ".wlog" toplevel $wlog wm title $wlog "Ordali Log Console" wm iconname $wlog "ordali log" wm protocol $wlog WM_DELETE_WINDOW KillParLaCroix lower $wlog $NomFenetreOrdali set wtlog "$wlog.frmt.text" frame $wlog.frmt scrollbar $wlog.frmt.scroll -width 8 -command "$wlog.frmt.text yview " text $wlog.frmt.text -height 25 -width 80 -yscrollcommand "$wlog.frmt.scroll set" -font "Courier 10" -bg white pack $wlog.frmt.text -fill both -side left -expand 1 pack $wlog.frmt.scroll -side left -fill y pack $wlog.frmt -side top if {$::tcl_platform(platform) ne "unix"} { bind $wlog.frmt.text {%W yview scroll [expr {-%D/120}] units ; break} } else { bind $wlog.frmt.text <4> {%W yview scroll -[set Defauts(DeltaYScroll)] units ; break} bind $wlog.frmt.text <5> {%W yview scroll [set Defauts(DeltaYScroll)] units ; break} } frame $wlog.frmb pack $wlog.frmb -side bottom -fill x -padx 5 -pady 10 button $wlog.frmb.save -text " Save " -background green1 -command "SauveLeLog" button $wlog.frmb.clear -text " Clear " -background white -command {DetruitLogConsole clear} button $wlog.frmb.destroy -text " Close " -background red -command [list ToggleAuLog] pack $wlog.frmb.destroy $wlog.frmb.clear $wlog.frmb.save -side left -expand 1 set y [expr {[winfo screenheight $wlog] - 2*[winfo reqheight $wlog]}] wm geom $wlog +0+$y if {[set toPrint [OutputTLog Text $TexteDuLog]] ne ""} { $wtlog insert end $toPrint $wtlog see end } } if {$txt ne "JSuisBidon"} { append TexteDuLog "${txt}$bn" if {[set toPrint [TraiteLogTampon "${txt}$bn"]] ne ""} { $wtlog insert end $toPrint $wtlog see end } } return } proc AuPif {{Min 0} {Max 1} {Type Int}} { if {![EstCeUnNombre $Min] || ![EstCeUnNombre $Max]} {return ""} if {$Max <= $Min} {return ""} set Diff [expr $Max - $Min] set Nombre [expr rand() * $Diff + $Min] if {$Type == "Int"} { set Nombre [expr round($Nombre)] } return $Nombre } proc AuSecours {{quoi ""}} { if {$quoi != ""} { demo help-$quoi return } set w .help toplevel $w wm title $w "Help on Ordali" set widgetDemo 1 set font {Helvetica 14} frame $w.buttons pack $w.buttons -side bottom -fill x -pady 2m button $w.buttons.ok -background green1 -text "OK" -command "destroy $w" pack $w.buttons.ok -anchor s -expand 1 frame $w.statusBar label $w.statusBar.lab -text " " -relief sunken -bd 1 -font $font -anchor w label $w.statusBar.foo -width 8 -relief sunken -bd 1 -font $font -anchor w pack $w.statusBar.lab -side left -padx 2 -expand yes -fill both pack $w.statusBar.foo -side left -padx 2 pack $w.statusBar -side bottom -fill x -pady 2 frame $w.textFrame pack $w.textFrame -expand 1 -fill both text $w.textFrame.t -yscroll "$w.textFrame.s set" -wrap word -width 60 -height 30 -font $font -setgrid 1 -highlightthickness 0 -padx 4 -pady 2 -takefocus 0 scrollbar $w.textFrame.s -orient vertical -command "$w.textFrame.t yview" -highlightthickness 0 -takefocus 0 pack $w.textFrame.s -side right -fill y pack $w.textFrame.t -expand 1 -fill both -padx 1 # Create a bunch of tags to use in the text widget, such as those for # section titles and demo descriptions. Also define the bindings for # tags. $w.textFrame.t tag configure title -font {Helvetica 24 bold} # We put some "space" characters to the left and right of each demo description # so that the descriptions are highlighted only when the mouse cursor # is right over them (but not when the cursor is to their left or right) # $w.textFrame.t tag configure demospace -lmargin1 1c -lmargin2 1c $w.textFrame.t tag configure center -justify center if {[winfo depth $w] == 1} { $w.textFrame.t tag configure demo -lmargin1 1c -lmargin2 1c -underline 1 $w.textFrame.t tag configure visited -lmargin1 1c -lmargin2 1c -underline 1 $w.textFrame.t tag configure hot -background black -foreground white } else { $w.textFrame.t tag configure demo -lmargin1 1c -lmargin2 1c -foreground blue -underline 1 $w.textFrame.t tag configure visited -lmargin1 1c -lmargin2 1c -foreground "#303080" -underline 1 $w.textFrame.t tag configure hot -foreground red -underline 1 } $w.textFrame.t tag bind demo {Appel .help.textFrame.t [.help.textFrame.t index {@%x,%y}]} set lastLine "" $w.textFrame.t tag bind demo { set lastLine [.help.textFrame.t index {@%x,%y linestart}] .help.textFrame.t tag add hot "$lastLine +1 chars" "$lastLine lineend -1 chars" .help.textFrame.t config -cursor hand2 showStatus .help.textFrame.t [.help.textFrame.t index {@%x,%y}] } $w.textFrame.t tag bind demo { .help.textFrame.t tag remove hot 1.0 end .help.textFrame.t config -cursor xterm .help.statusBar.lab config -text "" } $w.textFrame.t tag bind demo { set newLine [.help.textFrame.t index {@%x,%y linestart}] if {[string compare $newLine $lastLine] != 0} { .help.textFrame.t tag remove hot 1.0 end set lastLine $newLine set tags [.help.textFrame.t tag names {@%x,%y}] set i [lsearch -glob $tags help-*] if {$i >= 0} { .help.textFrame.t tag add hot "$lastLine +1 chars" "$lastLine lineend -1 chars" } } } # Create the text for the text widget. $w.textFrame.t insert end "Ordali help" {title center} $w.textFrame.t insert end { This is the Ordali help. It is organize in a hierarchical manner. You can at any time remove the help pages open in clicking the Dismiss All button. } $w.textFrame.t insert end "General" title $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "1. What is Ordali ?" {demo help-general} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "2. Main principles" {demo help-principes} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "3. Further Developments" {demo help-whatnext} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end \n {} "File Menu" title $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "1. Open ..." {demo help-open} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "2. Close ..." {demo help-close} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "3. Change Preferences" {demo help-preferences} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "3. Save Database" {demo help-savedb} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "3. Load Database" {demo help-loaddb} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end \n {} "Groups" title $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t insert end "1. Without scrollbars." {demo help-entry1} $w.textFrame.t insert end " \n " {demospace} $w.textFrame.t configure -state disabled focus $w.textFrame.s $w.textFrame.t configure -state disabled } proc Aujourdhui {} { scan [Today] "%s %s %s %s" S J M A set Aujourdhui "[Traduction $S francais] $J [Traduction $M francais] $A" return $Aujourdhui } proc AutoPathes {} { set RivetBob [list /usr/lib/tcltk/rivet2.1 /usr/lib/tcltk/rivet2.1/rivet-tcl /usr/lib/tcltk/rivet2.1/packages /usr/lib/tcltk/rivet2.1/packages-local /usr/lib/tcltk/rivet2.1 /usr/share/tcltk/tcl8.5 /usr/share/tcltk /usr/lib /usr/local/lib/tcltk /usr/local/share/tcltk /usr/lib/tcltk/x86_64-linux-gnu /usr/lib/tcltk /usr/share/tcltk/tcllib1.15 . /usr /local/ActiveTcl/lib /usr/local/ActiveTcl/lib/tcllib1.14 /usr/local/ActiveTcl/lib/tcl3d0.4.1 /usr/local/ActiveTcl/lib/tklib0.4 /usr/local/ActiveTcl/lib/tclx8.4] set RivetEna [list /usr/lib/tcltk/rivet2.1 /usr/lib/tcltk/rivet2.1/rivet-tcl /usr/lib/tcltk/rivet2.1/packages /usr/lib/tcltk/rivet2.1/packages-local /usr/lib/tcltk/rivet2.1 /usr/share/tcltk/tcl8.5 /usr/share/tcltk /usr/lib /usr/local/lib/tcltk /usr/local/share/tcltk /usr/lib/tcltk/x86_64-linux-gnu /usr/lib/tcltk /usr/share/tcltk/tcllib1.15 . /usr/local/ActiveTcl/lib /usr/lib/tclx8.4 /usr/local/ActiveTcl/lib/tcl3d0.4.1 /usr/local/ActiveTcl/lib/tcllib1.14 /usr/local/ActiveTcl/lib/tklib0.4] EspionneL [ListsComplement $RivetEna $RivetBob] exit } proc AutorisationPourPsy {} { global AutorisationPourPsy if { ! [info exists AutorisationPourPsy]} { set AutorisationPourPsy -3 } if { $AutorisationPourPsy==1 } { return 1 } if { $AutorisationPourPsy==0 } { return 0 } set Cou [Entre "Donnez la plus belle couleur pour une 2cv : "] incr AutorisationPourPsy if { ! [regexp -nocase "rouge" $Cou] } { return 0 } set AutorisationPourPsy 1 return 1 } proc AutreAccessDansGM {X} { global LesAccessBanqueDeDecrypthon LesAccessDecrypthonDeBanque if {[info exists LesAccessBanqueDeDecrypthon($X)]} { return [set LesAccessBanqueDeDecrypthon($X)] } if {[info exists LesAccessDecrypthonDeBanque($X)]} { return [set LesAccessDecrypthonDeBanque($X)] } if {[info exists LesAccessDecrypthonDeBanque("EstCharge")]} { return "" } set LesAccessDecrypthonDeBanque("EstCharge") 1 set file2 "/decrypthon/XRefs/GM_REFS"; foreach Ligne [LesLignesDuFichier $file2] { scan $Ligne "%s %s" AD AB lappend LesAccessBanqueDeDecrypthon($AD) $AB lappend LesAccessDecrypthonDeBanque($AB) $AD } return [AutreAccessDansGM $X] } proc AutreAccessDansXref {X} { global LesAccessProtDeDecrypthon LesAccessDecrypthonDeProt if {[info exists LesAccessProtDeDecrypthon($X)]} { return [set LesAccessProtDeDecrypthon($X)] } if {[info exists LesAccessDecrypthonDeProt($X)]} { return [set LesAccessDecrypthonDeProt($X)] } if {[info exists LesAccessDecrypthonDeProt("EstCharge")]} { return "" } set LesAccessDecrypthonDeProt("EstCharge") 1 set file1 "/decrypthon/XRefs/xrefs_red.dump"; foreach Ligne [LesLignesDuFichier $file1] { scan $Ligne "%s %s" AD AP lappend LesAccessProtDeDecrypthon($AD) $AP lappend LesAccessDecrypthonDeProt($AP) $AD } return [AutreAccessDansXref $X] } proc AutreCode {X} { global RepertoireDuGenome global AutreCode if { ! [info exists AutreCode]} { foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/lookup"] { scan $Ligne "%s %s" Nom AA set AutreCode($Nom) $AA set AutreCode($AA) $Nom } } return [set AutreCode($X)] } proc AutreCodeLuc {X} { if {! [info exists ::AutreCodeLuc]} { InitCode3l1l } if {[info exists ::AutreCodeLuc($X)]} { return [set ::AutreCodeLuc($X)] } else { set n [string length $X] switch $n { 1 {return "XXX"} 3 {return "X"} } } } proc AutreTest {CodeGscope} { set RepertoireDeDomaines "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope" #faut que je test Si y a un fichier MSF pour ne pas avoir de message d'erreur!! set r [glob -directory $RepertoireDeDomaines *.msf] foreach fichier $r { Espionne "R: $r" } } proc AutreTest2 {CodeGscope} { Espionne $CodeGscope } proc AutresNomsAff {quoi} { ChangeNomsAff $quoi AfficheNomsEtSeqs RepeintNoms return } proc AvecKegg {Nom} { global AvecKegg if {[info exists AvecKegg($Nom)]} { return $AvecKegg($Nom) } if {[info exists AvecKegg("EstCharge")]} { return "NotAvailable" } set AvecKegg("EstCharge") 1 set FK [Fiches "Kegg"] if {[FileAbsent $FK]} { return 0 } foreach Ligne [LesLignesDuFichier $FK] { set NomLu "" scan $Ligne "%s" NomLu if {[regexp "Nothing" $Ligne]} { set AvecKegg($NomLu) "Nothing" } else { set AvecKegg($NomLu) "Yes" } } return [AvecKegg $Nom] } proc AvecPkTable {Table} { if {[regexp -nocase "RetinoBase" $Table]} { return 1 } if {[WithinGenoret] || [WithinFed]} { return 0 } if {[regexp -nocase "^LN_" $Table]} { return 0 } return 0 return 1 } proc AverageEntropy {LesNbDesClustersDesBranches {NbTotDesBranches ""}} { if {$NbTotDesBranches == ""} { foreach LesNbDesClustersDeLaBranche $LesNbDesClustersDesBranches { foreach Nb $LesNbDesClustersDeLaBranche { set NbTotDesBranches [expr $NbTotDesBranches + $Nb] } } } set AverageEntropy 0 foreach LesNbDesClustersDeLaBranche $LesNbDesClustersDesBranches { set NbDeLaBranche 0 foreach Nb $LesNbDesClustersDeLaBranche {set NbDeLaBranche [expr $NbDeLaBranche + $Nb]} set Entropy [Entropy $LesNbDesClustersDeLaBranche] set PBranche [expr $NbDeLaBranche * 1.0 / $NbTotDesBranches] set AverageEntropy [expr $AverageEntropy + $PBranche * $Entropy] } return $AverageEntropy } proc Axe_R {R} { return [lrange $R 1 end] } proc BAIOX {Ligne {AcceptIdOnly ""}} { set AcceptIdOnly [string equal -nocase "AcceptIdOnly" $AcceptIdOnly] scan $Ligne "%s" BAI set B ""; set Ac "" ; set Id ""; set OX "" lassign [split $BAI "|"] B Ac Id set OX [IntegerApres "OX=" dans $Ligne] if {$B eq "" || $Ac eq "" || $Id eq "" || $OX eq ""} { if {$AcceptIdOnly} { set Ac "Access$BAI" set Id $BAI } else { FaireLire "$Ligne\nsomething is wrong" } } return [list $B $Ac $Id $OX] } proc BBox3D {L} { set xm 9999. ; set ym 9999. ; set zm 9999. set xx -9999. ; set yx -9999. ; set zx -9999. foreach v $L { lassign $v x y z if {$x < $xm} {set xm $x} if {$y < $ym} {set ym $y} if {$z < $zm} {set zm $z} if {$x > $xx} {set xx $x} if {$y > $yx} {set yx $y} if {$z > $zx} {set zx $z} } return [list $xm $xx $ym $yx $zm $zx] } proc BCMT {} { global PfamDir BCM_setup #cd $PfamDir LitLeTFA PF01405.12 LNOrdali Sequences #DecortiqueUnTFA PF00001.16 LNOrdali Sequences puts "len ori [string length [set Sequences([lindex $LNOrdali 0])]]" BCM_SamplePfam PF01405.12 LNOrdali Sequences foreach n $LNOrdali { lappend Ls [set Sequences($n)] } puts "len avant [string length [lindex $Ls 0]]" #set Ls [lrange $Ls 0 15] #set LNOrdali [lrange $LNOrdali 0 15] set Lso [EnleveColonnesGaps $LNOrdali $Ls] puts "len apres [set ap [string length [lindex $Lso 0]]]" if {$ap == 0} { foreach n $LNOrdali s $Ls { puts "$n $s" } } exit } proc BCM_AnalyseRes {} { global db GR Lrm set db root sqlite3 $db bench.sql $db eval {begin transaction} set GR(vis) [list] set Lgap [lsort -real [$db eval {select distinct gapthr from results}]] puts "Number of gap thresholds [llength $Lgap]" set GR(Lgap) $Lgap set Lmeth [list] set Largs [$db eval "select args from results where gapthr=[lindex $Lgap 0]"] foreach a $Largs { lassign [lindex $a 0] id file meth cm lappend Lmeth $meth } set Lmeth [lsort -unique $Lmeth] set GR(Lmeth) $Lmeth puts "Number of scoring methods [llength $Lmeth]" set Lcm [$db eval {select distinct cm from results}] set GR(Lcm) $Lcm puts "Number of clustering methods [llength $Lcm]" puts "List of parameters done ..." # Decoupage d'analyse set Llim [list 0. 100. 0. 30. 30. 50. 50. 100.] foreach {a b} $Llim { lappend GR(Llim) "$a $b" } # pfam stats set Lplni [$db eval {select pfamid,lgt,nseqs,idm from pfam}] foreach {pfid lgt nseqs idm} $Lplni { lappend Lpfamid $pfid lappend Llgt $lgt lappend Lnseqs $nseqs lappend Lidm $idm } puts "" puts "---------------------------------------" puts "# Brut Pfam stats " puts "---------------------------------------" puts "" foreach {deb fin} $Llim { set midm 0.0 ; set mseqs 0.0 ; set mlgt 0.0 set midm2 0.0 ; set mseqs2 0.0 ; set mlgt2 0.0 set count 0 foreach idm $Lidm nseqs $Lnseqs lgt $Llgt { if {! ($idm >= $deb && $idm < $fin)} { continue } set midm [expr {$midm + $idm}] set mlgt [expr {$mlgt + $lgt}] set mseqs [expr {$mseqs + $nseqs}] set midm2 [expr {$midm2 + $idm*$idm}] set mlgt2 [expr {$mlgt2 + $lgt*$lgt}] set mseqs2 [expr {$mseqs2 +$nseqs*$nseqs}] incr count } puts "# $deb - $fin " puts "Number of elements .. $count" set midm [expr {$midm / $count}] set sdidm [expr {sqrt($midm2/double($count) - $midm*$midm)}] puts [format "mean/sd identity .... %6.2f/%6.2f" $midm $sdidm] set mlgt [expr {double($mlgt) / $count}] set sdlgt [expr {sqrt(double($mlgt2)/$count - $mlgt*$mlgt)}] puts [format "mean/sd length ...... %6.2f/%6.2f" $mlgt $sdlgt] set mseqs [expr {double($mseqs) / $count}] set sdseqs [expr {sqrt(double($mseqs2)/$count - $mseqs*$mseqs)}] puts [format "mean/sd nbr seqs .... %6.2f/%6.2f" $mseqs $sdseqs] } # global stats foreach pfid $Lpfamid { set LSA [$db eval {select r.posAl from residues as r, pfam as p where r.pk_pfam=p.pk_pfam and p.pfamid=$pfid and (r.type='CSA' or r.type='Prosite') }] set tmp [list] foreach e $LSA { if {[string is list -strict $e]} { lappend tmp {*}$e } elseif {$e eq "" || $e == {} || $e eq "{}"} { continue } else { lappend tmp $e } } set LSA [lsort -unique -integer $tmp] set TLSA($pfid) $LSA } puts "List of Pfam done ..." puts "" if {0} { GAR $db eval {commit} $db close return } array set Lrm [list] foreach {pcmin pcmax} $Llim { # take pfam under consideration set Lpfamid [lsort -unique -dictionary [$db eval {select pfamid from pfam where idm > $pcmin and idm <= $pcmax}]] set LSpfamid [list] set nLSA 0 foreach z $Lpfamid { lappend LSpfamid "'$z'" incr nLSA [llength [set TLSA($z)]] } # gap threshold foreach gt $Lgap { # methodes clustering foreach cm $Lcm { unset -nocomplain T set Lpkresag [$db eval "select pk_results,job,args from results where job in ([join $LSpfamid ,]) and cm=''$cm'' and gapthr=$gt"] set Lpkres [list] foreach {pk job ar} $Lpkresag { lassign [lindex $ar 0] tmp tmp mth tmp lappend T($mth,pkr) $pk set T($pk) $job } # par methode de scoring set nTot 0 foreach meth $Lmeth { set Lpkres [set T($meth,pkr)] if {$Lpkres == {}} { puts "Aucune valeur !\n" continue } set npkr [llength $Lpkres] set nTP 0 ; set nFP 0 set nTN 0 ; set nFN 0 set nFind 0 foreach pkr $Lpkres { set Lfl [$db eval {select pos,lgt from results where pk_results=$pkr}] lassign $Lfl Lfind lgt set Lfind [lsort -unique -integer $Lfind] incr nFind [llength $Lfind] set pfid [set T($pkr)] set LSA [set TLSA($pfid)] incr nTot $lgt set TP [ListsIntersection $Lfind $LSA] set nbTP [llength $TP] set FN [lor $LSA $Lfind from1] set nbFN [llength $FN] set FP [lor $LSA $Lfind from2] set nbFP [llength $FP] set nbTN [expr {$lgt - [llength $LSA] - $nbFN}] foreach v {TP FP TN FN} { incr n$v [set nb$v] } } # Sens= VraiPos / (VraiPos + FauxNeg) set sens [expr {1.0*$nTP/($nTP+$nFN)}] # Spec= VraiNeg / (VraiNeg +FauxPos) set spec [expr {1.0*$nTN/($nTN+$nFP)}] # Power set power [expr {$sens+$spec-1.}] lappend Lrm($pcmin,$pcmax,$gt,$cm) [list $meth $sens $spec $power $nTot $nLSA $nFind $npkr] } } } } GAR $db eval {commit} $db close return # # Create output foreach {pcmin pcmax} $Llim { set Ltot [list] puts "\n==================" puts "# $pcmin - $pcmax" puts "------------------\n" foreach gt $Lgap { set tmp [lindex [array names Lrm "$pcmin,$pcmax,$gt,*"] 0] lassign [lindex $Lrm($tmp) 0] x y z k nTot nLSA nFind nres puts "" puts "Gap Threshold ..........: $gt" puts "Nbr total colonnes .....: $nTot" puts "Nbr sites vrais ........: $nLSA" foreach cm $Lcm { puts "Clustering method ......: $cm\n" set Lval [list] foreach v [lsort [set Lrm($pcmin,$pcmax,$gt,$cm)]] { lassign $v meth sens spec power nTot nLSA nFind npkr lappend Lval $v lappend Ltot [list {*}$v $gt $cm] puts [format "%6.4f %6.4f %6.4f | %4d | %s" $sens $spec $power $npkr $meth] } # 10 meilleurs sens foreach {titre idx} [list Sensibility 1 Specificity 2 Power 3] { puts "\n$titre" set Lval [lsort -decreasing -real -index $idx $Lval] set i 1 puts " | sensib specif power | sco. meth." foreach v [lrange $Lval 0 9] { lassign $v me ss sp pw nf puts [format "%2d | %6.4f %6.4f %6.4f | %5d | %s" $i $ss $sp $pw $nf $me] incr i } } puts "" } } # stats globales puts "\n======================" puts "| Best of " puts "======================\n" foreach {titre idx} [list Sensibility 1 Specificity 2 Power 3] { puts "\n$titre" set Ltot [lsort -decreasing -real -index $idx $Ltot] set i 1 puts " | sensib specif power | gapT ClusM " foreach v [lrange $Ltot 0 9] { lassign $v me ss sp pw tmp tmp tmp gt cm puts [format "%2d | %6.4f %6.4f %6.4f | %4.2f %s %s" $i $ss $sp $pw $gt $cm $me] incr i } } } $db eval {commit} $db close exit } proc BCM_CheckIDs {Lpdb2id pfamid} { global LNOrdali Sequences LSOrdali # cree id "propres" set tmp [list] foreach n $LNOrdali { lappend tmp [lindex [split $n "/"] 0] } set Ldel [list] foreach {pk id} $Lpdb2id { if {$id ni $tmp} { lappend Ldel $pk puts " !! $id not present !!" } } # enleve de Lpdbid if {$Ldel != {}} { set nl [list] foreach {pk id} $Lpdb2id { if {$pk in $Ldel} {continue} lappend nl $pk $id } set Lpdb2id $nl } return $Lpdb2id } proc BCM_CreateJobs2Do {} { global Dbcm dres # - liste pfam2do set Lpkpfam [lsort -integer [$::db eval {select pk_pfam from pfam}]] #set Lpkpfam [lrange $Lpkpfam 0 50] puts "nbr pfam a faire : [llength $Lpkpfam]" $dres eval {begin transaction} foreach pk $Lpkpfam { $dres eval {insert into tests values (NULL,$pk,NULL,'-1',0)} lappend Lj2d [list $pk ""] } $dres eval {commit} puts "Nbr jobs a faire [llength $Lpkpfam]" return $Lj2d } proc BCM_CreateJobs2Do_Tests {{PTest ""}} { global Dbcm db if {$PTest eq ""} { # - liste pfam2do set Lpkpfam [BCM_TriePfam2Do] } else { set Lpkpfam [$db eval {select pk_pfam from pfam where pfamid=$PTest}] } puts "nbr pfam a faire : [llength $Lpkpfam]" # liste des fonction scoring # -> 5 paquets (cf Valdar) : # - symbol frequency # - symbol entropy # - stereochemical # - stereochemically sensitive entropy SSE # - substitution matrix # #set Lmeth [list Liu Dist Liu2 VolPol RPCA Williamson Kabat Entrop1] #set Lmeth [list Thompson Liu2 RPCA Williamson Kabat Entrop1] set Lmeth [list BILD Thompson Entrop1 Liu2 Williamson Kabat RPCA Norm SanderSP Peivar Karlin Valdar Capra Wang Caffrey] set LGrMeth [list [list Kabat] [list Norm RPCA] [list Wang Capra] [list Entrop1 Williamson Caffrey] [list Karlin BILD Thompson SanderSP Valdar Peivar Liu2]] # -> faire les paires entre categories set Lmdbl [list] if {1} { set i 1 ; set tmp [list] foreach g1 [lrange $LGrMeth 0 end-1] { foreach g2 [lrange $LGrMeth $i end] { foreach m1 $g1 { foreach m2 $g2 { lappend tmp [list $m1 $m2] } } } incr i } set Lmdbl $tmp } # -> faire les triplets set Lmtpl [list] if {0 && [llength $Lmeth] > 2} { set i 1; set j 2; set tmp [list] foreach m1 [lrange $Lmeth 0 end-2] { foreach m2 [lrange $Lmeth $i end-1] { foreach m3 [lrange $Lmeth $j end] { lappend tmp [list $m1 $m2 $m3] } incr j } incr i } set Lmtpl $tmp } if {$Lmdbl != {} } { lappend Lmeth {*}$Lmdbl } if {$Lmtpl != {} } { lappend Lmeth {*}$Lmtpl } # clustering methods set Lmclus [list mixturemodel secator dpc] set Lj2d [list] foreach pk $Lpkpfam { set pfamid [$db eval {select pfamid from pfam where pk_pfam=$pk}] set fpfam [lindex [lsort [glob -nocomplain [file join /genomics/link/Pfam "${pfamid}*"]]] end] foreach m $Lmeth { foreach cm $Lmclus { lappend Lj2d [list $pfamid [list $pk $fpfam $m $cm]] } } } puts "Nbr jobs [llength $Lj2d]" return $Lj2d } proc BCM_CreeBenchmarkPfam {} { global db dps ConsRef PfamDir ListePDB LNOrdali Sequences T BCM_setup set dps rpros sqlite3 $dps Prosite.sql set db root sqlite3 $db bench.sql # Inits set ListePDB [list] # CSA BCM_LoadCSADB # - pdbmap : lien pfam <-> pdb # -> prend id pdb et id pfam $db eval {begin transaction} set Lpf [lsort -unique -dictionary [$db eval {select pfamid from pdbmap}]] puts "nbr of pfam .... : [llength $Lpf]" #set fin 10 set fin end foreach pfamid [lrange $Lpf 0 $fin] { puts "\n$pfamid" puts "----------" set pfile [lindex [lsort [glob -nocomplain [file join $PfamDir "${pfamid}*_smp"]]] end] set pk [lindex [$db eval {select pk_pfam from pfam where pfamid=$pfamid}] 0] # Read alignment puts "reading [file join $PfamDir $pfile]" DecortiqueUnTFA [file join $PfamDir $pfile] LNOrdali Sequences foreach n $LNOrdali { set nid [lindex [split $n "/"] 0] set T($nid) $n } # -> cherche pdb du pfam set Lpdbv [$db eval {select pdbid,chn,acc,id,pdeb,pfin,sdeb,sfin from pdbmap where pfamid=$pfamid}] puts "Nbr potentials PDB .....: [expr {[llength $Lpdbv]/8}]" # -> dans CSA # -> corespondance res CSA -> ali pfam BCM_MapCSA2Pfam $Lpdbv $pfile # -> residues interface # -> correspondance res interface -> ali pfam BCM_MapInterface2Pfam $Lpdbv $pfile # -> residues PROSITE BCM_MapProsite2Pfam $Lpdbv $pfile unset -nocomplain LNOrdali Sequences T LSOrdali update } $db eval {commit} $db close $dps close exit } proc BCM_CreeThread {} { global TDT thread::errorproc BCM_ThreadError set Id [thread::create] set TDT($Id) $Id thread::configure $Id -unwindonerror 1 thread::send $Id { set GscopeDir $env(GSCOPEDIR) set OrdaliDejaSource 1 source [file join $GscopeDir gscope_source.tcl] set OrdaliDir $env(ORDALIDIR) set OrdaliDejaSource 0 source [file join $OrdaliDir src ordali_source.tcl] InitLesDefauts LesDefauts Mode batch package require Thread #LoadTclPackages #package require tclcluspack package require tclordalie #package require sqlite3 set VariablesAuDepart [info globals] source /home/moumou/gscopublic/bcm.tcl source /home/moumou/gscopublic/bcm_setup.tcl source /home/moumou/gscopublic/bcm_run.tcl BCM_setup } puts "thread $Id created ([llength [thread::names]]) ...\n" flush stdout trace add variable TDT($Id) write BCM_RecupResults update return $Id } proc BCM_DoTests {} { global db dres CestFini TDT nThreads TMaster nDone Dbcm package require Thread puts "[DonneDateEtHeure]" set TMaster [thread::id] puts "\nThread Master : $TMaster\n" BCM_setup set nDone 0 # old table set db root sqlite3 $db bench.sql file delete -force dres.sql set dres [FabriqueDeTables $Dbcm(TableRes) dres dres.sql] # creation des jobs #set dres dres #sqlite3 $dres dres2.sql BCM_CreateJobs2Do set CestFini 0 # Creation des threads et preserved set nThreads 20 #set nThreads 135 set listeID [list] thread::errorproc BCM_ThreadError for {set i 1} {$i < $nThreads} {incr i} { set Id [BCM_CreeThread] lappend ListeID $Id } foreach Id $ListeID { BCM_DonneUnJob $Id } # lance l'event loop du master vwait CestFini foreach a [array names TDT "tid*"] { if {[regexp {,} $a]} {continue} puts "trace $a [join [trace info variable $a] \n]" } $db close # Creation des Index $dres eval {begin transaction} $dres eval {create index idx_results on results (pk_tests,cm, gapthr, TP, FP, TN, FN)} $dres eval {commit} $dres close puts "[DonneDateEtHeure]" exit } proc BCM_DonneUnJob {lId} { global CestFini nDone TDT dres db set pkmin [$dres eval {select min(pk_tests) from tests where thread='-1'}] if {! [string is integer -strict $pkmin]} { puts "\nAll done !\nReleasing threads $lId ...\nNbr threads [llength [thread::names]]\n" set CestFini 1 update return } set pkpfmeth [$dres eval {select pk_tests,pk_pfam,smeth from tests where pk_tests=$pkmin}] lassign $pkpfmeth pktest pkpfam Lmeth $dres eval {update tests set thread=$lId where pk_tests=$pkmin} set pfamid [$db eval {select pfamid from pfam where pk_pfam=$pkpfam}] set fpfam [glob [file join /home/moumou/work/moumou/BenchPfam "${pfamid}*"]] # cherche Vrai Positifs #set LVP [lsort -unique [$db eval {select posAl from residues where pk_pfam=$pkpfam}]] #pdbid set Lpdb2id [$db eval {select pk_pdbmap,id from pdbmap where pfamid=$pfamid}] #set TDT($lId,Data) [list $pkpfam $pfam $Lmeth] set TDT($lId,Data) [list $pkpfam $fpfam] #thread::send -async $lId [list ::BCM_ThreadExe $pkpfam $pfam $Lmeth $LVP] TDT($lId) thread::send -async $lId [list ::BCM_ThreadExe $pkpfam $fpfam $Lpdb2id] TDT($lId) #puts "pkpfmeth $pkmin $pkpfmeth pour $lId" incr nDone if {! ($nDone % 1000)} { puts "... $nDone done ([llength [thread::names]]) [DonneDateEtHeure]" flush stdout update idletasks } update return } proc BCM_Init {} { global db PfamDir Dbcm Tsite # Init variables BCM_setup # cree db pour : # -> CSA #file delete -force bench.sql set db [FabriqueDeTables $Dbcm(tables) "" bench2.sql] puts "tables crees ..." # traite pdb mapped to pfam set Ll [LesLignesDuFichier [file join $PfamDir pdbmap]] puts "Nbr pdb mappes..... : [llength $Ll]" set badnum 0 foreach l $Ll { set l [string map [list ";" ""] $l] set Lv [split $l "\t"] lassign $Lv idpdb chn pdf nmpfam idpfam acc adf lassign [split $pdf -] pd pf if {! [string is integer -strict $pd] || ! [string is integer -strict $pf]} { incr badnum continue } lassign [split $adf -] ad af if {! [info exists Psite($idpdb,$chn)]} { set Psite($idpdb,$chn) [list] } lappend Psite($idpdb,$chn) [list $pd $pf $idpfam $acc $ad $af] } puts "bad numbering ..... : $badnum" puts "" puts "Cross-check with CSA" set Lcsa [lsort -unique [BCM_LoadCSADB]] set nsite 0 set Lpdb [list] ; set Lacc [list] $db eval {begin transaction} foreach k [array names Psite] { lassign [split $k ,] pdbid chn lappend Lpdb $pdbid set Ls [list] foreach kt [array names Tsite "$k,*"] { lappend Ls {*}[set Tsite($kt)] } foreach Ldf [set Psite($k)] { lassign $Ldf deb fin pfamid acc ad af lappend Lacc $acc foreach v $Ls { lassign $v nm nb if {$nb >= $deb && $nb <= $fin} { $db eval {insert into pdbmap values (NULL,$pfamid,$pdbid,$chn,$deb,$fin,$acc,NULL,$ad,$af)} incr nsite } } } } $db eval {commit} puts "bad numbering ..... : $badnum" puts "Nbr sites ......... : $nsite" puts "Nbr pdbs .......... : [llength [lsort -unique $Lpdb]]" set Lacin [lsort -unique $Lacc] set Lid [IDMapping "ACC+ID" ID $Lacin] puts "" puts "doublons access :" puts " in [llength $Lacc]" puts " unique [llength $Lacin]" $db eval {begin transaction} set i 0 foreach acc $Lacin id $Lid { if {$id eq ""} { lappend Ldel $acc } else { $db eval {update pdbmap set id=$id where acc=$acc} incr i } } puts "Nbr UNmapped Access : [llength $Ldel]" puts "Nbr mappend........ : $i" foreach acc $Ldel { $db eval {delete from pdbmap where acc=$acc} } puts "-> reste en db..... : [$db eval {select count(pk_pdbmap) from pdbmap}]" $db eval {commit} if {0} { # doublons PFAM/ID pdb $db eval {begin transaction} set Lv [$db eval {select pfamid,id from pdbmap}] set Lpi [list] foreach {p i} $Lv { lappend Lpi [list $p $i] } set Lpi [lsort -unique $Lpi] set Ldel [list] foreach e $Lpi { lassign $e p i set Lv [$db eval {select pk_pdbmap,sdeb,sfin from pdbmap where pfamid=$p and id=$i}] set Ltpl [list] foreach {a b c} $Lv { lappend Ltpl [list $a $b $c] } set Ltpl [lsort -unique -index 1 -integer $Ltpl] # is here only once if {[llength $Ltpl] == 1} { continue } set Lv [list] foreach e $Ltpl { lappend Lv {*}$e } set Lv [lassign $Lv pkm sd0 sf0] set lmax [expr {$sf0-$sd0+1}] foreach {pk sd sf} $Lv { if {$sd >= $sf0} { # new range set sd0 $sd set sf0 $sf set pkm $pk set lmax [expr {$sf0-$sd0+1}] continue } if {($sf - $sd + 1) > $lmax} { # don't keep old max lappend Ldel $pkm # define new max set pkm $pk set sd0 $sd set sf0 $sf set lmax [expr {$sf0-$sd0+1}] } else { # not a max, delete lappend Ldel $pk } } } puts "doublon ID deb/fin par Pfam : [llength $Ldel]" if {[llength $Ldel] > 0} { $db eval "delete from pdbmap where pk_pdbmap in ([join $Ldel ,])" } $db eval {commit} $db eval {vacuum} puts "" puts "TOTAL ENTRIES...... : [$db eval {select count(pk_pdbmap) from pdbmap}]" } # udate pfam table set Lv [lsort -unique [$db eval {select pfamid from pdbmap}]] $db eval {begin transaction} foreach pfamid $Lv { $db eval {insert into pfam values(NULL,$pfamid,NULL,NULL,NULL,NULL,NULL)} } $db eval {commit} $db eval {vacuum} # indexes $db eval {create index idx_pdbmap on pdbmap (pfamid, pdbid, chn, pdeb, pfin, acc, id, sdeb, sfin)} $db eval {create index idx_pfam on pfam (pfamid, nseqs, lgt)} $db close exit return } proc BCM_LoadCSA {} { global Tsite set Ll [LesLignesDuFichier [file join /home moumou ordali typify csa CSA_2_2_12.dat]] set nris 0 foreach e [lrange $Ll 1 end] { # PDB ID,SITE NUMBER,RESIDUE TYPE,CHAIN ID,RESIDUE NUMBER,CHEMICAL FUNCTION,EVIDENCE TYPE,LITERATURE ENTRY lassign [split $e ,] pdbid snb rtype chn rnmr tmp tmp tmp set pdbid [string toupper $pdbid] if {[set res [AutreCodeLuc $rtype]] eq "XXX"} { continue } if {! [info exists Tsite($pdbid,$chn,$snb)]} { set Tsite($pdbid,$chn,$snb) [list] } lappend Tsite($pdbid,$chn,$snb) [list $res $rnmr] lappend Lpdb $pdbid incr nris } set Lpdb [lsort -unique $Lpdb] puts "CSA :" puts "-----" puts "Nombre pdbId .......... :[llength $Lpdb]" puts "Nombre res in sites ... : $nris" puts "" return $Lpdb } proc BCM_LoadCSADB {} { global Tsite if {[file exists sites_csa_data.tcl]} { source [file join /home moumou ordali typify sites_csa_data.tcl] foreach k [array names Tsite] { incr nris [llength $Tsite($k)] } puts "CSA :" puts "-----" puts " ==> from file >sites_csa_data.tcl<" puts "Nombre pdbId .......... : [llength $Lpdb]" puts "Nombre res in sites ... : $nris" puts "" return $Lpdb } sqlite3 d [file join /home moumou ordali typify CSA_TABLES.db] d eval {begin transaction} # recupere sites annotes set La [d eval {select pdbId,type,number,chain,siteNumber from CSA_catalyticResidues}] # prend les homologues set Lh [d eval {select pdbId,residue,number,chain,siteNumber from CSA_homologueResidues}] set Lsites [concat $La $Lh] d eval {commit} d close # traitement set Lpdb [list] foreach {pdbid type nbr chn snb} $Lsites { set pdbid [string toupper $pdbid] set type [string toupper $type] if {[AutreCodeLuc $type] eq "X"} { continue } if {$pdbid ni $Lpdb} { lappend Lpdb $pdbid } if {! [info exists Tsite($pdbid,$chn,$snb)]} { set Tsite($pdbid,$chn,$snb) [list] } set add [list $type $nbr] if {$add ni [set Tsite($pdbid,$chn,$snb)]} { lappend Tsite($pdbid,$chn,$snb) $add incr nris } } puts "CSA :" puts "-----" puts "Nombre pdbId .......... : [llength $Lpdb]" puts "Nombre res in sites ... : $nris" puts "" return $Lpdb } proc BCM_MapCSA2Pfam {Lpdbv pfam} { global db PfamDir Tsite ConsRef LNOrdali Sequences T set pfamid [lindex [split [file tail $pfam] .] 0] set pk [lindex [$db eval {select pk_pfam from pfam where pfamid=$pfamid}] 0] set nsf 0 foreach {pdb chn acc id pd pf sd sf} $Lpdbv { if {! [info exists T($id)]} { puts "error !" puts "no T for $id (pdb $pdb acc $acc" #exit continue } set idn [set T($id)] # are there some CSA sites ? set La [array names Tsite "$pdb,$chn,*"] if {$La == {}} { puts "No CSA sites found in $pdb $chn !" continue } # take correspondance set nsf 0 foreach a $La { set Lres [set Tsite($a)] foreach rtn $Lres { lassign $rtn res rnb set rnm [AutreCodeLuc $res] # out from alignment if {$rnb < $pd || $rnb > $pf} { continue } # Correspondance # # PDB : 11 14 18 # Seq : 15 18 22 # : A.DEF...GF...IL # Ali : 1 4 8 # Mem : 0 3 7 # set x [expr {$rnb+($sd-$pd)-$sd}] set c [DonnePosSG $idn $x] lappend ConsRef($pf,CSA) $c $db eval {insert into residues values(NULL,$pk,$x,$c,'CSA')} incr nsf } } } puts "Nombre site CSA ...... : $nsf" return } proc BCM_MapInterface2Pfam {Lpdbv pfam} { global PfamDir ConsRef db LNOrdali Sequences T # pdb list to retreive set Lpdb [list] foreach {pdb chn acc id pd pf sd sf} $Lpdbv { lappend Lpdb $pdb } set nri 0 set pk [lindex [$db eval {select pk_pfam from pfam where pfamid=$pfamid}] 0] foreach {pdb chn acc id pd pf sd sf} $Lpdbv { if {! [info exists T($id)]} { puts "$id not present !" continue } set n [set T($id)] # -> search PDBe interface ID pdb set xml [PDBeInterface $pdb] if {[string range $xml 0 5] ne " retrieve interface residues for chain set Lres [ResiduesInterface $xml $pdb $chn] if {$Lres == {}} { puts "Pas de residue interface in $pdb $chn !" continue } # take correspondance set nri 0 foreach r $Lres { lassign $r rnb res set rnm [AutreCodeLuc $res] # out from alignment if {$rnb < $pd || $rnb > $pf} { continue } # Correspondance # # 15 18 22 # A.DEF...GF...IL # 1 4 8 # 0 3 7 # set x [expr {$rnb+($sd-$pd)-$sd}] set c [DonnePosSG $n $x] lappend ConsRef($pf,Int) $c $db eval {insert into residues values(NULL,$pk,$x,$c,'Interface')} incr nri } } puts "Nombre residue Interface .. : $nri" return } proc BCM_Pdb2Pfam {pfamid Lpdb2id} { # checking if PDB IDs are present set Lpdb2id [BCM_CheckIDs $Lpdb2id $pfamid] # -> stats de pfam ID : # nseq, lg, min-max gaps, pci m - sd set Lout [BCM_PfamStats $pfamid $Lpdb2id] return $Lout } proc BCM_PfamStats {pfamid Lpdb2id} { global PfamDir LPCI LNOrdali Sequences LSOrdali set Nseq [llength $LNOrdali] puts " Nombre sequences ..... : $Nseq" set Lgt [string length [set Sequences([lindex $LNOrdali 0])]] puts " Longueur initiale .... : $Lgt" # Nbr pdb dans le pfam puts " IDs mapped to pdb .... : [expr {[llength $Lpdb2id]/2}]" # 1st sampling if more than 5000 seqs if {$Nseq > 5000} { puts "==> too many seqs -> samplling 3000" BCM_SamplePfam $Lpdb2id $pfamid LNOrdali Sequences 5000 set Nseq [llength $LNOrdali] set LSOrdali [list] foreach n $LNOrdali { lappend LSOrdali [set Sequences($n)] } } # remove seqs with 100% identity BCM_RemoveIdentities $Lpdb2id $pfamid LNOrdali Sequences set LSOrdali [list] foreach n $LNOrdali { lappend LSOrdali [set Sequences($n)] } # PROSITE filter set fname "[TmpFile toto /tmp].[thread::id]" EcritLeTfa $fname $LNOrdali $LSOrdali set Lps [LesPrositesDuTFA $fname] file delete -force $fname file delete -force "${fname}.out" set Lnp [list] if {$Lps != {} } { foreach {acc Lv} $Lps { foreach {p Lp} $Lv { lappend TP($p) $acc } } set Lpat [array names TP] puts " Patterns PROSITES ..... : $Lpat" set Lnp [list] ; set Lpf [list] # align final < 500 seqs, so set ThrProsite 500 foreach p $Lpat { set nocc [llength [set TP($p)]] puts " $p $nocc" if {$nocc > $ThrProsite} { lappend Lnp $p } } # prosite patterns have been choosen if {[llength $Lnp] > 1} { set Lpf [set TP([lindex $Lnp 0])] foreach p [lrange $Lnp 1 end] { set Lpf [land $Lpf [set TP($p)]] } } elseif {[llength $Lnp] == 1} { set Lpf [set TP($Lnp)] } if {[llength $Lpf] > 0} { puts " Nbr seq prosite ... : [llength $Lpf]" set LNOrdali $Lpf # # ATTENTION ! # ici on ENLEVE les pdb qui n'ont pas le # motif prosite !! set Lidn [list] foreach n $LNOrdali { lappend Lidn [lindex [split $n /] 0] } set Ldel [list] foreach {pk id} $Lpdb2id { if {$id ni $Lidn} { lappend Ldel $pk } } if {$Ldel != {} } { set nl [list] foreach {pk id} $Lpdb2id { if {$pk in $Ldel} {continue} lappend nl $pk $id } set Lpdb2id $nl } } set LSOrdali [list] foreach n $LNOrdali { lappend LSOrdali [set Sequences($n)] } } puts "" # final sampling set Nseq [llength $LNOrdali] if {$Nseq > 500} { puts "==> too many seqs -> 1000" BCM_SamplePfam $Lpdb2id $pfamid LNOrdali Sequences set Nseq [llength $LNOrdali] set LSOrdali [list] foreach n $LNOrdali { lappend LSOrdali [set Sequences($n)] } } # final round of gap removal set LSOrdali [EnleveColonnesGaps] unset -nocomplain Sequences foreach n $LNOrdali s $LSOrdali { set Sequences($n) $s } set Lgt [string length [set Sequences([lindex $LNOrdali 0])]] puts " Longueur actuelle .... : $Lgt" # compute identities set SAli [list] foreach n $LNOrdali { lappend SAli $n [set Sequences($n)] } set LPCI [CalculeLesPCIGenerique $SAli] array set TPCI $LPCI # write stats ... set pf $pfamid set Nseq [llength $LNOrdali] set Lgt [string length [set Sequences([lindex $LNOrdali 0])]] puts " Nbr sequences ........ : $Nseq" puts " Longueur ............. : $Lgt" # moyenne et ecart-type set Lv [list] foreach a $LNOrdali { foreach b $LNOrdali { lappend Lv "$a,$b" [set TPCI($a,$b)] } } lassign [SM_StatPCI $Lv] m sd tmp tmp set PCIm $m set PCIsd $sd puts " Identite moyenne ..... : [format %6.2f $m]" puts " Identite ecart-type .. : [format %6.2f $sd]" set Lout [list $Nseq $Lgt $m $sd $Lnp] return $Lout } proc BCM_Puts {txt} { global PTxt if {! [info exists PTxt]} {set PTxt ""} if {$txt eq "decharge"} {return $PTxt} append PTxt "$txt\n" return } proc BCM_RecupResults {a b op} { global TDT db dres set Lres [set TDT($b)] if {[string range $Lres 0 4] ne "tid0x" || ! [string is list -strict $Lres]} { # on est en train de traiter une erreur !! puts "==> $b : $Lres\n$::errorInfo" after 1000 set tid $b trace remove variable TDT($tid) write BCM_RecupResults set Larg [set TDT(${tid},Data)] if {[thread::exists $tid]} { catch {thread::release $tid} } array unset TDT "${tid}*" update set pkt [$dres eval {select pk_tests from tests where thread=$tid}] # met le job du thread à -1 $dres eval {update tests set res=-1,thread=0 where pk_tests=$pkt} puts "sort error\n$pkt $Larg [llength [thread::names]]" set b [BCM_CreeThread] after 1000 BCM_DonneUnJob $b update return } lassign $Lres Id pkpfam smeth Lval if {$b ne $Id} { puts "\nProblem\n$b ne $Id !" flush stdout set b $Id } update idletasks set pkt [$dres eval {select pk_tests from tests where thread=$tid}] $dres eval {update tests set res=$ires,thread='0' where pk_tests=$pkt} set pfamid [$db eval {select pfamid from pfam where pk_pfam=$pkpfam}] lassign $Lval Nseq Lgt m sd Lpro $db eval {insert into pfam values(NULL,'$pfamid',NULL,$Nseq,$Lgt,$m,$sd)} foreach p $Lpro { $db eval {insert into propfam values(NULL,'$p','$pfamid')} } update BCM_DonneUnJob $b return if {0} { set YaErr 0 set LErr [list] if {[llength $Lval] == 0} { set YaErr 1 lappend LErr "Aucune valeurs !" } set Lcm [list "'dpc'" "'mm'" "'secator'"] foreach res $Lval { lassign $res cm gap Lpos if {$cm ni $Lcm} {set YaErr 1} if {! [string is double $gap]} {set YaErr 1} if {! [string is list -strict $Lpos]} {set YaErr 1} if {$YaErr} { lappend LErr $res } else { if {[catch {$dres eval "insert into results values(NULL,$pkt,[join $res ,])"} Msg]} { set YaErr 1 lappend LErr $res lappend LErr $Msg } } } set ires 1 if {$YaErr} { puts "\nProblem $b!\npkt $pkt smeth $smeth pfam $pkpfam\n[join $LErr \n]\n" flush stdout set ires -1 } $dres eval {update tests set res=$ires,thread='0' where pk_tests=$pkt} update BCM_DonneUnJob $b } return } proc BCM_RemoveIdentities {Lpdb2id pfamid aL aS} { upvar $aL L $aS S foreach n $L { set sq [set S($n)] if {[info exists TDes3000($sq)]} {continue} set TDes3000($sq) 1 set pn [lindex [split $n / ] 0] set NDes3000($pn) 1 lappend Lsd $n } # # ACHTUNG ! # a same pdbid can be present several times ! # as several zones can match the current pfam ! set Lpdbid [list] foreach {pk id} $Lpdb2id { lappend Lpdbid $id } set add 0 ; set prs 0 foreach n $L { set idn [lindex [split $n "/"] 0] if {$idn in $Lpdbid} { if {$n ni $Lsd} { lappend Lsd $n incr add } else { incr prs } update } } puts " PDB in db ....... : [llength $Lpdbid]" puts " PDB presents .... : $prs" puts " PDB rajoutes .... : $add" update return } proc BCM_SamplePfam {Lpdb2id pfamid aL aS {Nsmp 500}} { upvar $aL L $aS S set Lpris [list] ; set Lres [list] set lg [llength $L] set n 0 while {$n < $Nsmp} { set i [expr {int(rand()*$lg)}] if {$i in $Lpris} {continue} lappend Lres [lindex $L $i] lappend Lpris $i incr n } # check if we have corresponding pdbs in sample # # ACHTUNG ! # a same pdbid can be present several times ! # as several zones can match the current pfam ! set Lpdbid [list] foreach {pk id} $Lpdb2id { lappend Lpdbid $id } set add 0 ; set prs 0 foreach n $L { set idn [lindex [split $n "/"] 0] if {$idn in $Lpdbid} { if {$n ni $Lres} { lappend Lres $n incr add } else { incr prs } update } } puts " PDB in db ....... : [llength $Lpdbid]" puts " PDB presents .... : $prs" puts " PDB rajoutes .... : $add" # cree le nouveau pfam set Lseq [list] foreach n $Lres { lappend Lseq [set S($n)] set A($n) [set S($n)] } unset S set L $Lres array set S [array get A] update return } proc BCM_SplitPfamBrut {} { # take the fasta pfam file from ftp # split it into PFxxxxx files cd /genomics/link/Pfam set f [open Pfam-A.fasta r] set open 0 ; set pf "" ; set Lpf [list] while {[gets $f l] >= 0} { if {[string index $l 0] eq ">"} { # nouvelle seq set lori $l regsub -all { +} [string trim $l] " " l set l [string map [list " " ";"] $l] set pf [lindex [split $l ";"] 2] lappend Tpf($pf) $lori } else { lappend Tpf($pf) $l } } foreach pf [array names Tpf] { set o [open $pf w] puts $o [join [set Tpf($pf)] \n] close $o } exit } proc BCM_StatDB {} { global db BCM_setup set db root sqlite3 $db bench.sql $db eval {begin transaction} set nZero 0 set nColCSA 0 ; set nColInt 0 ; set nCol 0 set lgtCSA 0 ; set lgtInt 0 ; set lgtT 0 set npCSA 0 ; set npInt 0 ; set npT 0 set Lpkpfam [$db eval {select pk_pfam,pfamid from pfam}] foreach {pkpfam pfam} $Lpkpfam { set nInt [$db eval {select count(pk_residues) from residues where pk_pfam=$pkpfam and type='Interface'}] set nCSA [$db eval {select count(pk_residues) from residues where pk_pfam=$pkpfam and type='CSA'}] set nPro [$db eval {select count(pk_residues) from residues where pk_pfam=$pkpfam and type='Prosite'}] if {$nInt == 0 && $nCSA == 0 && $nPro == 0} { incr nZero continue } set lgt [$db eval {select lgt from pfam where pk_pfam=$pkpfam}] if {$nInt != 0 && $nCSA != 0 && $nPro != 0} { incr npT incr nCol $nInt incr nCol $nCSA incr nCol $nPro incr lgtT $lgt } elseif {$nCSA == 0} { incr npInt incr nColInt $nInt incr lgtInt $lgt } else { incr npCSA incr nColCSA $nCSA incr lgtCSA $lgt } } $db eval {commit} $db close set fmt "%3d %5d %6d %5.2f" puts "Zero $nZero" puts "CSA+Int : [format $fmt $npT $nCol $lgtT [expr {100.*$nCol/$lgtT}]]" puts "que Int : [format $fmt $npInt $nColInt $lgtInt [expr {100.*$nColInt/$lgtInt}]]" puts "que CSA : [format $fmt $npCSA $nColCSA $lgtCSA [expr {100.*$nColCSA/$lgtCSA}]]" exit } proc BCM_ThreadError {tid stack} { global TDT nThreads dres TMaster if {$tid eq $TMaster} { puts "\nMASTER Error\n$stack\n" flush stdout return } puts stdout "\nError dans le thread $tid\n$stack" flush stdout trace remove variable TDT($tid) write BCM_RecupResults set Larg [set TDT($tid,Data)] after 100 if {[thread::exists $tid]} { puts "... deleting thread $tid" flush stdout thread::release $tid } array unset TDT "${tid}*" update set pkt [$dres eval {select pk_tests from tests where thread=$tid}] # met le job du thread à -1 $dres eval {update tests set res=-1,thread=0 where pk_tests=$pkt} if {[llength [thread::names]] < $nThreads} { set Id [BCM_CreeThread] after 1000 BCM_DonneUnJob $Id } update return } proc BCM_ThreadExe {pkpfam fpfam Lpdb2id} { global Sequences LNOrdali LSOrdali set tid [thread::id] set t1 [clock milliseconds] unset -nocomplain Sequences LNOrdali LSOrdali set pfamid [lindex [split [file tail $fpfam] .] 0] # lit le fichier DecortiqueUnTFA $fpfam LNOrdali Sequences set Lout [BCM_Pdb2Pfam $pfamid $Lpdb2id] # finish EcritLeTfa "${fpfam}_smp" $::LNOrdali $::LSOrdali #FermeFichier set LRT [list $tid $pkpfam "" $Lout] return $LRT } proc BCM_ThreadExe_Tests {pkpfam pfam Lmscore LVP} { global Sequences LNOrdali LSOrdali ListeDesPiliersDuGroupe LNDG SDG TbScores ListeScore LongueurTotale ConsMeth # use executable -> exe or library -> lib set how "exe" #set how "lib" #puts "[thread::id] start job ..." #flush stdout set tid [thread::id] set t1 [clock milliseconds] unset -nocomplain Sequences LNOrdali LSOrdali unset -nocomplain SDG LNDG TbScores ListeDesPiliersDuGroupe set pfamid [lindex [split [file tail $pfam] .] 0] # lit le fichier DecortiqueUnTFA $pfam LNOrdali Sequences set LongueurTotale [string length [set Sequences([lindex [array names Sequences] 0])]] # calcule score set LNDG GroupeToutLeMonde set SDG(GroupeToutLeMonde) $LNOrdali CreeLesPiliers # prepare pour scores set TbScores(Lcols) $Lmscore if {[llength $Lmscore] > 1} { set Scale 1 } else { set Scale 0 } set LRT [list $tid $pkpfam $Lmscore] set Lrcm [list] set Lthrgap [list 0.005 0.1 0.25 0.5 0.7] #set Lthrgap [list 0.01] foreach pcgap $Lthrgap { LesDefauts PCThrGap $pcgap unset -nocomplain ListeScore array unset TbScores "Score,*" update foreach mscore $Lmscore { set sco [ScoreDe$mscore [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)]] if {$Scale} { set sco [CentreData $sco -999.0] } set TbScores(Score,$mscore) $sco } CreeListeScore set Lori $ListeScore set LgS [llength $ListeScore] if {$LgS < 2} { # Probleme : nb cols < 2 puts "\nListeScore=0\n$Lmscore $pcgap $pfamid" flush stdout continue } if {$how eq "exe"} { set o [file tempfile fdat] foreach l $Lori { puts $o [join $l \t] } close $o update idletasks catch {file copy $fdat [file tail $fdat]} } # pour chaque meth clustering set Lres [list] foreach cm [list dpc mixturemodel secator] { set Lval $Lori # Fait clusters switch $cm { "dpc" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm kmeans -nbc dpc -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=kmeans -nbc=dpc -wc] } set lab dpc } "secator" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm hierar -nbc secator -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=hierar -nbc=secator -wc] } set lab secator } "mixturemodel" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm mm -nbc aic -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=mm -nbc=aic -wc] } set lab mm } } if {$how eq "exe"} { if {[catch {exec {*}$cmd >& ${tid}.log} Msg]} { puts stderr "Pb Cluspack\n$Msg" puts stderr "[ContenuDuFichier ${tid}.log]" flush stderr } # lit clusters if {[file exists "${fdat}.clu"]} { set Lres [TraiteResultatClustering "${fdat}.clu" ""] } else { puts "log cluspack :\n[ContenuDuFichier ${tid}.log]" flush stdout continue } file delete -force ${tid}.log ${fdat}.clu } else { set fdeb [open deb.txt w] puts $fdeb [join $Lval \n] puts $fdeb "------------" puts $fdeb [join $Lgr \n] close $fdeb set Lres [TraiteResultatClusteringTcl $Lgr ""] } set Ltrouve [lindex $Lres 1] set res [list "'$lab'" $pcgap $Ltrouve $LgS] lappend Lrcm $res } if {$how eq "exe"} { file delete -force [file tail $fdat] $fdat } } FermeFichier lappend LRT $Lrcm return $LRT } proc BCM_TriePfam2Do {} { global db BCM_setup set Lbonpk [list] set Lpk [$db eval {select pk_pfam from pfam where nseqs > 5}] puts "Lpk [llength $Lpk]" foreach pk $Lpk { set nres [$db eval {select count(pk_residues) from residues where pk_pfam=$pk}] if {$nres > 0} { lappend Lbonpk $pk } } return [lsort -integer -unique $Lbonpk] } proc BCM_UploadPfam {} { global TPfam # take the fasta pfam file from ftp # split it into PFxxxxx files cd /genomics/link/Pfam set f [open Pfam-A.fasta r] set open 0 ; set pf "" ; set Lpf [list] while {[gets $f l] >= 0} { if {[string index $l 0] eq ">"} { # nouvelle seq set lori $l regsub -all { +} [string trim $l] " " l set l [string map [list " " ";"] $l] set pf [lindex [split $l ";"] 2] lappend TPfam($pf) $lori } else { lappend TPfam($pf) $l } } return } proc BCM_corrDB {} { BCM_setup set db root sqlite3 $db bench.sql $db eval {begin transaction} set Lpkpfs [$db eval {select pk_pfam,pfamid from pfam}] set chm [file join /home moumou work moumou BenchPfam] foreach {pk pf} $Lpkpfs { set f [glob [file join $chm "${pf}*_smp"]] LitLeTFA $f Ln Sq set lg [string length [set Sq([lindex $Ln 0])]] $db eval {update pfam set lgt=$lg where pk_pfam=$pk} unset -nocomplain Sq set Ln {} } $db eval {commit} $db close exit } proc BCM_setup {} { global Dbcm PfamDir set PfamDir "/genomics/link/Pfam/" set Dbcm(tables) " - pdbmap : mapping pdb pfam { . pk_pdbmap P . pfamid V7 . pdbid V4 . chn V1 . pdeb I . pfin I . acc V20 . id V20 . sdeb I . sfin I } - propfam : lien prosite - pfam { . pk_propfam P . prosite V7 nom du prosite (PS00118) . pfamid V7 nom pfam (PF00068) } - pfam : info sur le pfam { . pk_pfam P . pfamid V7 . name V128 . nseqs I . lgt I . idm R identite moyenne . idsd R sd de identite } - residues : residues conserves dans les pfam { . pk_residues P . pk_pfam I . posSq I . posAl I . type V3 } - results : resultat de test { . pk_results P . pk_tests I . job V128 . args T . cm V12 clustering method . gapthr R threshold pour gap . pos T positions list . lgt I length of alignment with gapthr } " set Dbcm(TableRes) " - tests : tests a faire { . pk_tests P . job T . args T methodes scoring . thread V32 . res I -1 error, 0 pas fait, 1 ok } " return } proc BLASTDatabase_ICDS {{FichierIn ""} {FichierOut ""}} { Wup "Permet de creer une banque blast a partir du fichier TFA" if {$FichierIn == ""} { set RepBanque "[RepertoireDuGenome]" set FichierIn [glob -nocomplain -directory "$RepBanque" "*.fasta"] } if {! [file exists $FichierIn]} {return ""} if {$FichierOut == ""} { regsub {\.[a-z]+$} $FichierIn "" FichierOut } set Title "ICDS_[file tail $FichierIn]" set Cmdformadb "formatdb -i $FichierIn -o T -t $Title -p F -n $FichierOut" if {[catch {eval exec $Cmdformadb} Message]} {Warne "Error in Formatdb command:\n>>>>$Message"} return "" } proc BLAT {{query ""} {output ""} {Databases ""} {Outstyle BLAST}} { Wup "BLAT program is BLAST Like Alignment Tool" Wup "It is optimised to align mRNA or DNA fragment onto genomes" Wup "BLAT can be run in Server way with complete database indexes loaded in memory." Wup "gfServer permits to load and start a server." Wup "gfClient permits to submit sequences to the server." Wup "Output can be set to looks like blast output" if {$Databases=="" || $query=="" || $output==""} { Espionne "BLAT use is database (or file containing list of database) query and output." Espionne "BLAT database can be fasta or pultiple fasta files or .nib (BLAT own Format)" return "" } if {! [file exists $query] || ! [file exists $Databases]} { Espionne "Problem with own of query and Databases files do not exists." return "" } if {[regexp -nocase "blast" $Outstyle]} { set Outstyle [string tolower $Outstyle] } #/biolo/blatSrc/bin/blat mouse.tfa human.tfa /genomics/g1/Actin/nuctfa/ACT0001 -q=rna -out=blast ACT0001.blat set BLAT "[BLATDIR]/blat" set Option "-out=$Outstyle" set CommandeBlat "eval exec $BLAT $Databases $query $Option $output" if {[catch {eval $CommandeBlat} Message]} { Espionne "Problem with $output" Espionne $Message } return $output } proc BLATDIR {} { Wup "BLAT bin or source directory" global BLATSourceDir if {[info exists BLATSourceDir] && [file exists $BLATSourceDir]} {return $BLATSourceDir} set BLATSourceDir "/biolo/blatSrc/bin/x86_64" return $BLATSourceDir } proc BLATGenomeDir {Genome} { Wup "Genome directory" return "[UCSCGenomeDir $Genome]" } proc BLATGenomePort {Genome} { Wup "Genome associated Port for BLAT" global BLATGenomePort if {[info exists BLATGenomePort($Genome)]} {return [set BLATGenomePort($Genome)]} switch -exact -- $Genome { "human" {set BLATGenomePort($Genome) 50000} "mouse" {set BLATGenomePort($Genome) 51000} "mstigr" {set BLATGenomePort($Genome) 52000} "default" {return ""} } if {[info exists BLATGenomePort($Genome)]} {return [set BLATGenomePort($Genome)]} return "" } proc BLATPourTous {DirIn DirOut Databases {Outstyle BLAST}} { if {! [file exists "[RepertoireDuGenome]/${DirIn}"]} { Espionne "Problem input directory do not exists." return "" } if {![file exists "[RepertoireDuGenome]/${DirOut}"]} { file mkdir "[RepertoireDuGenome]/${DirOut}" } if {! [file exists $Databases]} { Espionne "Problem with Databases files do not exists." return "" } if {[regexp -nocase "blast" $Outstyle]} { set Outstyle [string tolower $Outstyle] } set LesPABs [ListeDesPABs] foreach PAB $LesPABs { set input "[RepertoireDuGenome]/$DirIn/${PAB}" set output "[RepertoireDuGenome]/$DirOut/${PAB}" #Espionne "BLAT $PAB $output $Databases $Outstyle" BLAT $input $output $Databases $Outstyle } return "" } proc BLATServerName {} { Wup "Server Name associated for BLAT" global BLATServerName if {[info exists BLATServerName(Server)]} {return [set BLATServerName(Server)]} set BLATServerName(Server) "star6" if {[info exists BLATServerName(Server)]} {return [set BLATServerName(Server)]} return "" } proc BLAT_client {{Input ""} {Output ""} {DirOuGenome ""} {Outstyle ""} {Host ""} {Port ""} {OptionSup ""}} { Wup "BLAT program is BLAST Like Alignment Tool" Wup "It is optimised to align mRNA or DNA fragment onto genomes" Wup "BLAT can be run in Server way with complete database indexes loaded in memory." Wup "gfServer permits to load and start a server." Wup "gfClient permits to submit sequences to the server." Wup "Output can be set to looks like blast output" if {$Input == ""} { Espionne "BLAT_client Usage is: Input \[complete file path\] Output \[same\] Organism \[human mouse\] (optional Outstyle \[blast\] Host \[star6\] Port \[linked to Organism\])" return "" } if {$Output == ""} { set FileExt [file extension $Input] if {$FileExt != ""} { regsub "$FileExt" $Input ".blat" Output } else { set Output "${Input}.blat" } } if {$Port == ""} {set Port [BLATGenomePort $DirOuGenome]} if {$Host == ""} {set Host [BLATServerName]} if {$Outstyle == ""} {set Outstyle "blast"} if {[regexp -nocase "blast" $Outstyle]} { set Outstyle [string tolower $Outstyle] } set OptionsClient "-out=$Outstyle" if {$OptionSup!=""} { append OptionsClient " $OptionSup" } #/biolo/blatSrc/bin/gfClient [BLATServerName] 50000 ACT0015 ACT0015.blat -out=blast set BLAT "[BLATDIR]/gfClient" #Le "" dans la commande correspond a l option nibDir qui est le chemin relatif ou sont situe les fichier .nib" set CommandeBlat "$BLAT $Host $Port \"\" $Input $Output $OptionsClient" Espionne "$CommandeBlat" if {[catch {eval exec $CommandeBlat} Message]} { Espionne "Problem with $Output" Espionne $Message } return "" } proc BLAT_clientPourTous {{DirIn ""} {DirOut ""} {DirOuGenome ""} {Outstyle ""} {Host ""} {Port ""} {OptionSup ""}} { Wup "BLAT program is BLAST Like Alignment Tool" Wup "It is optimised to align mRNA or DNA fragment onto genomes" Wup "BLAT can be run in Server way with complete database indexes loaded in memory." Wup "gfServer permits to load and start a server." Wup "gfClient permits to submit sequences to the server." Wup "Output can be set to looks like blast output" #DirIn directory where to find queries tfa files #DirOut directory where to store results if {$DirIn=="" && $DirOut==""} { #Espionne "BLAT_clientPourTous Usage is: DirIn \[Input complete dir path\] DirOut \[same for output\] Organism \[human mouse\] (optional Outstyle \[blast\] Host \[star6\] Port \[linked to Organism\])" return "" } if {! [file exists "[RepertoireDuGenome]/${DirIn}"]} { Espionne "Problem input directory do not exists." return "" } if {![file exists "[RepertoireDuGenome]/${DirOut}"]} { file mkdir "[RepertoireDuGenome]/${DirOut}" } if {$Port ==""} {set Port [BLATGenomePort $DirOuGenome]} if {$Host ==""} {set Host [BLATServerName]} if {$Outstyle==""} {set Outstyle "blast"} if {[regexp -nocase "blast" $Outstyle]} { set Outstyle [string tolower $Outstyle] } set LesPABs "" #set LesPABs [ListeDesPABs] if {$LesPABs == ""} { set LesPABs [glob -nocomplain -directory "$DirIn" -tails "*"] } if {! [BLAT_server_Running $DirOuGenome]} { Espionne "BLAT Server for $DirOuGenome is not running." #Espionne "Trying to launch it." #BLAT_server Start $DirOuGenome $Host $Port return "" } foreach PAB $LesPABs { set Input "[RepertoireDuGenome]/$DirIn/${PAB}" set Output "[RepertoireDuGenome]/$DirOut/${PAB}" if {[file exists $Output]} {continue} #Espionne "BLAT $PAB $Output $DirOuGenome $Outstyle" BLAT_client $Input $Output $DirOuGenome $Outstyle $Host $Port $OptionSup } return "" } proc BLAT_clientPourTousBoost {{DirIn ""} {DirOut ""} {DirOuGenome ""} {Outstyle ""} {Host ""} {Port ""} {OptionSup ""} {ListeATraiter ""}} { if {$DirIn=="" && $DirOut==""} { Espionne "BLAT_clientPourTous Usage is: DirIn \[Input complete dir path\] DirOut \[same for output\] Organism \[human mouse\] (optional Outstyle \[blast\] Host \[star6\] Port \[linked to Organism\])" return "" } if { ! [regexp "/" $DirIn]} { set DirIn "[RepertoireDuGenome]/$DirIn" } if {! [file exists $DirIn]} { Espionne "Problem input directory doesn't not exists." return "" } if { ! [regexp "/" $DirOut]} { set DirOut "[RepertoireDuGenome]/$DirOut" } if {![file exists $DirOut]} { file mkdir $DirOut } if {$Port ==""} {set Port [BLATGenomePort $DirOuGenome]} if {$Host ==""} {set Host [BLATServerName]} if {$Outstyle==""} {set Outstyle "blast"} if {[regexp -nocase "blast" $Outstyle]} { set Outstyle [string tolower $Outstyle] } if {$ListeATraiter=="ListeDesPABs"} { set ListeATraiter [ListeDesPABs] } if {$ListeATraiter == ""} { set ListeATraiter [glob -nocomplain -directory $DirIn -tails "*"] } if {! [BLAT_server_Running $DirOuGenome]} { Espionne "BLAT Server for $DirOuGenome is not running." #Espionne "Trying to launch it." #BLAT_server Start $DirOuGenome $Host $Port return "" } set I 9999 foreach PAB $ListeATraiter { set Input "$DirIn/$PAB" set Output "$DirOut/$PAB" if {[file exists $Output]} {continue} if {[incr I]>100} { # Espionne "I'll run BLAT $Input $Output $DirOuGenome $Outstyle" set I 0 } BLAT_client $Input $Output $DirOuGenome $Outstyle $Host $Port $OptionSup } return "" } proc BLAT_clientPourTousRR {{DirIn ""} {DirOut ""} {DirOuGenome ""} {Outstyle ""} {Host ""} {Port ""} {OptionSup ""} {ListeATraiter ""}} { Wup "If DirIn has no / we use RepretoireDuGenome/DirIn" Wup "If DirOut has no / we use RepretoireDuGenome/DirOut" Wup "BLAT program is BLAST Like Alignment Tool" Wup "It is optimised to align mRNA or DNA fragment onto genomes" Wup "BLAT can be run in Server way with complete database indexes loaded in memory." Wup "gfServer permits to load and start a server." Wup "gfClient permits to submit sequences to the server." Wup "Output '''[[Known Bugs]]''' can be set to looks like blast output" #DirIn directory where to find queries tfa files #DirOut directory where to store results if {$DirIn=="" && $DirOut==""} { Espionne "BLAT_clientPourTous Usage is: DirIn \[Input complete dir path\] DirOut \[same for output\] Organism \[human mouse\] (optional Outstyle \[blast\] Host \[star6\] Port \[linked to Organism\])" return "" } if { ! [regexp "/" $DirIn]} { set DirIn "[RepertoireDuGenome]/$DirIn" } if {! [file exists $DirIn]} { Espionne "Problem input directory doesn't not exists." return "" } if { ! [regexp "/" $DirOut]} { set DirOut "[RepertoireDuGenome]/$DirOut" } if {![file exists $DirOut]} { file mkdir $DirOut } if {$Port ==""} {set Port [BLATGenomePort $DirOuGenome]} if {$Host ==""} {set Host [BLATServerName]} if {$Outstyle==""} {set Outstyle "blast"} if {[regexp -nocase "blast" $Outstyle]} { set Outstyle [string tolower $Outstyle] } if {$ListeATraiter=="ListeDesPABs"} { set ListeATraiter [ListeDesPABs] } if {$ListeATraiter == ""} { set ListeATraiter [glob -nocomplain -directory $DirIn -tails "*"] } if {! [BLAT_server_Running $DirOuGenome]} { Espionne "BLAT Server for $DirOuGenome is not running." #Espionne "Trying to launch it." #BLAT_server Start $DirOuGenome $Host $Port return "" } set I 9999 foreach PAB $ListeATraiter { set Input "$DirIn/$PAB" set Output "$DirOut/$PAB" if {[file exists $Output]} {continue} if {[incr I]>100} { Espionne "I'll run BLAT $Input $Output $DirOuGenome $Outstyle" set I 0 } BLAT_client $Input $Output $DirOuGenome $Outstyle $Host $Port $OptionSup } return "" } proc BLAT_server {{Quoi ""} {DirOuGenome ""} {Host ""} {Port ""} {OptionSup ""}} { Wup "BLAT program is BLAST Like Alignment Tool" Wup "It is optimised to align mRNA or DNA fragment onto genomes" Wup "BLAT can be run in Server way with complete database indexes loaded in memory." Wup "gfServer permits to load and start a server." Wup "gfClient permits to submit sequences to the server." Wup "Output can be set to looks like blast output" set OptionsServer "-log=[TmpFile blatServer].log" if {$OptionSup!=""} { append OptionsServer " $OptionSup" } #Quoi start - Start the server by calculating indexes and stores them into memory # stop - Stop the server # status - To get status and usage level of the server # files - To get input files list #/biolo/blatSrc/bin/gfServer start star6 50000 *.nib if {$Quoi == "" || $DirOuGenome == ""} { Espionne "BLAT_server usage is: BLAT_server Quoi DirOuGenome Host (option) Port (option)" Espionne "Quoi can be: start, stop, status or files." Espionne "DirOuGenome can be: mouse, human." return "" } set Out "" #1 On recupere les valeurs de chacun des parametres if {$Host == ""} {set Host [BLATServerName]} if {$Port == ""} {set Port [BLATGenomePort $DirOuGenome]} if {$Port == ""} { Espionne "Problem with $DirOuGenome, Port can not be set." return "" } set DirNib [BLATGenomeDir $DirOuGenome] if {$DirNib == ""} { Espionne "Problem with $DirOuGenome, no directory can be defined." return "" } else { set DirNib "$DirNib/blat/*.nib" } #2 On definit la commande BLAT a executer set BLAT "[BLATDIR]/gfServer" switch -exact -- $Quoi { "start" { #Test si le serveur tourne deja if {[BLAT_server_Running $DirOuGenome $Host $Port]} { Espionne "BLAT server already running for $DirOuGenome." Espionne "You can not run it twice." return "" } else { Espionne "BLAT server will be launched for $DirOuGenome." global env set HOST $env(HOST) if {[regexp -nocase "[BLATServerName]" $HOST]} { #Espionne "On est sur $HOST - [BLATServerName] normalement." set CommandeBlat "$BLAT $OptionsServer $Quoi $Host $Port [glob $DirNib]" } else { #Espionne "On est sur $HOST - autre normalement." set CommandeBlat "rsh [BLATServerName] $BLAT $OptionsServer $Quoi $Host $Port [glob $DirNib] " #set CommandeBlat "rsh [BLATServerName] $BLAT $Quoi $Host $Port [glob $DirNib] > /home/jmuller/blat.tmp" } Espionne $CommandeBlat if {[catch {set Out [eval exec $CommandeBlat &]} Message]} { return $Message } else { return 1 } } } "stop" {set CommandeBlat "$BLAT $Quoi $Host $Port"} "status" {set CommandeBlat "$BLAT $Quoi $Host $Port"} "files" {set CommandeBlat "$BLAT $Quoi $Host $Port"} "default" {return ""} } if {[catch {set Out [eval exec $CommandeBlat]} Message]} { #Erreur normale pour status on n'affiche rien if {$Quoi=="status" && [regexp -nocase "Couldn't connect to" $Message]} { return 0 } Espionne "Problem with $CommandeBlat" Espionne $Message return "" } #Rq: Out contient pour # start le numero UID du process (ex: 2331894) # stop le numero UID du process (ex: 2331894) # status la liste des arguments du server # files la liste des fichiers charges return $Out } proc BLAT_server_Running {{DirOuGenome ""} {Host ""} {Port ""}} { Wup "Permet de savoir si un serveur existe deja pour le genome" if {$DirOuGenome == ""} { Espionne "Problem no Genome set." Espionne "Usage is: BLAT_server_Running DirOuGenome Host (option) Port (option)" return "" } if {$Host == ""} {set Host [BLATServerName]} if {$Port == ""} {set Port [BLATGenomePort $DirOuGenome]} if {$Port == ""} { Espionne "Problem with $DirOuGenome, Port can not be set." return "" } set Quoi "status" set State [BLAT_server $Quoi $DirOuGenome $Host $Port] Espionne "State: -- $State --" if {$State == 0} { #Espionne "BLAT server for $DirOuGenome is not running." set Reply 0 } elseif {$State == ""} { Espionne "BLAT server satus request has a problem." set Reply 0 } else { #Espionne "BLAT server for $DirOuGenome is running." set Reply 1 } return "$Reply" } proc BaClon {args} { global BaClon if {$args=={}} { return [list "BaClon LesSujets PGS" "BaClon LesOligos PGS" "BaClon LesOligosDuCouple PGS Sujet" "BaClon Trio PGS Sujet P"] } if {$args=="Save"} { set FichierBaClon "[RepertoireDuGenome]/fiches/baclon" SauveLesLignes [array get BaClon] dans $FichierBaClon return $FichierBaClon } set Quoi [join $args ","] if {[info exists BaClon($Quoi)]} { return [set BaClon($Quoi)] } if {[info exists BaClon(EstCharge)]} { return "" } set FichierBaClon "[RepertoireDuGenome]/fiches/baclon" if {[file exists $FichierBaClon]} { array set BaClon [LesLignesDuFichier $FichierBaClon] } set BaClon(EstCharge) 1 if {[info exists BaClon($Quoi)]} { return [set BaClon($Quoi)] } return "" } proc BaClonAppend {args} { global BaClon set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] if {[info exists BaClon($Quoi)] && [lsearch -exact [set BaClon($Quoi)] $Valeur]>-1} { return [set BaClon($Quoi)] } return [lappend BaClon($Quoi) $Valeur] } proc BaClonExists {args} { global BaClon if {$args=={}} { return [info exists BaClon(EstCharge)]} set Quoi [join $args ","] return [info exists BaClon($Quoi)] } proc BaClonSet {args} { global BaClon set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] return [set BaClon($Quoi) $Valeur] } proc BaClonUnset {args} { global BaClon set Quoi [join $args ","] catch {unset BaClon($Quoi)} } proc BaList {{RV ""}} { if {$RV==""} { return [ListeDesPABs] } set BaList {} foreach Nom [ListeDesPABs] { if {[RVof $Nom]==$RV} { lappend BaList $Nom } } return $BaList } proc BalibaseCorrectLink {} { if {1} { cd [RepertoireDuGenome] cd "tfas" foreach RV [glob "../RV*"] { Espionne $RV foreach P [glob -nocomplain "$RV/*.tfa"] { set F [file tail $P] regsub {\..*} $F "" Nom Espionne "ln -sf $P $Nom" exec ln -sf $P $Nom } } } if {1} { cd [RepertoireDuGenome] cd "msf" foreach RV [glob "../RV*"] { Espionne $RV foreach P [glob -nocomplain "$RV/*.msf"] { set F [file tail $P] regsub {\..*} $F "" Nom Espionne "ln -sf $P $Nom" exec ln -sf $P $Nom } } } } proc BalibaseCreateBlastDatabase {} { foreach Nom [ListeDesPABs] { set FichierTFAs [GscopeFile $Nom "tfas"] foreach Access [LaSequenceDuTFAs $FichierTFAs "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $FichierTFAs $Access] regsub ">$Access" $TFA ">${Nom}_$Access" New lappend LesNew $New } } return [SauveLesLignes $LesNew dans "[RepertoireDuGenome]/banques/BalibaseAllProt"] } proc BalibaseFile {Nom {Type ""}} { if {$Type==""} { set Type "xml" } set RepRV "[RepertoireBalibase]/RV[RVof $Nom]" if {$Type=="rsf"} { return "$RepRV/$Nom.rsf" } if {$Type=="xml"} { return "$RepRV/$Nom.xml" } if {$Type=="tfa"} { return "$RepRV/$Nom.tfa" } return "[RepertoireBalibase]/$Type/$Nom" } proc Ballast {FichierBlastP {RepertoireDestination ""} {Query ""} {TexteSansFichier ""}} { global RepertoireDuGenome global OptionsBallastPourJulie Wup "ATTENTION : Ballast puts BanqueId instead of Access so we change back if necessary" set AvecAccessAuLieuDeBanqueId 1 set Nom [file tail $FichierBlastP] if {$Query==""} { set Query $Nom } Espionne "$Query $Nom $FichierBlastP" if { $FichierBlastP==$Nom || ! [file exists $FichierBlastP]} { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } if {$RepertoireDestination == ""} { set RepertoireDestination "$RepertoireDuGenome/ballast" } if { ! [File isdirectory $RepertoireDestination]} { File mkdir $RepertoireDestination } set Destination "$RepertoireDestination/$Nom" set Message "" set CommandeBallast "ballast -p $FichierBlastP -o $Destination -anchors -noext -queryname $Query" if {[info exists OptionsBallastPourJulie]} { append CommandeBallast " $OptionsBallastPourJulie" } Espionne $CommandeBallast if {[catch {eval exec $CommandeBallast} Message]} { if {[regexp -nocase "Segmentation fault" $Message]} { Warne "Don't worry about this message ..." Warne $Message Warne "Don't worry about this message ... be happy." return "" } if {[regexp -nocase "error" $Message]} { Warne "Don't worry about this message ..." Warne $Message Warne "Don't worry about this message ... be happy." return "" } Warne "Don't worry about this message ..." Warne " Ballast failed with message on next line :" Warne $Message Warne "Don't worry about this message ... be happy." return "" } if {[regexp -nocase " error" [join [LesPremieresLignesDuFichier $Destination 10]] "\n"]} { Warne "Don't worry about this message ..." Warne [join [LesPremieresLignesDuFichier $Destination 5] "\n"] Warne "FATAL Error in Ballast Output" Warne "Don't worry about this message ... be happy." return "" } if {$AvecAccessAuLieuDeBanqueId} { set FichierAPNs "$RepertoireDuGenome/apns/$Nom" if {[file exists "$FichierAPNs"]} { foreach Ligne [LesLignesDuFichier $FichierAPNs] { set Access "" scan $Ligne "%s %s" BanqueId Access if { ! [regexp -nocase {[a-z_0-9]} $Access]} { continue } set BanqueId [string toupper $BanqueId] set AccessDuBanqueId($BanqueId) $Access } } else { DecortiqueBlast $FichierBlastP "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess { if {$Access=="mol:protein"} { set Access $BanqueId } if { ! [regexp -nocase {[a-z_0-9]} $Access]} { continue } set BanqueId [string toupper $BanqueId] set AccessDuBanqueId($BanqueId) $Access } } set FichierAnchors "$Destination.anchors" foreach Ligne [LesLignesDuFichier $FichierAnchors] { scan $Ligne "%s %s %s" seq nom BanqueIdOriginal if {$seq == "seq:"} { regsub {\|} $Ligne "_" Ligne regsub {\|} $BanqueIdOriginal "_" BanqueIdOriginal set BanqueId [string toupper $BanqueIdOriginal] regsub "_" $BanqueId ":" BanqueId if {[info exists AccessDuBanqueId($BanqueId)]} { set Access [set AccessDuBanqueId($BanqueId)] } else { set Access $BanqueIdOriginal } set NouvelleLigne [SubstitueAvecBlancsDevant $Ligne $BanqueIdOriginal $Access] lappend NouveauAnchors $NouvelleLigne } else { lappend NouveauAnchors $Ligne } } Espionne $FichierAnchors Espionne [SauveLesLignes $NouveauAnchors dans $FichierAnchors] } if { $TexteSansFichier != "TexteSansFichier"} { return $Destination } else { set Texte [ContenuDuFichier $Destination] File delete -force $Destination foreach FichierBallastExt [glob -nocomplain "$Destination.*"] { File delete -force $FichierBallastExt } return $Texte } } proc BallastExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./ballast" } if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { return [file join $OrdBinDir "ballast"] } else { return "/biolo/ballast/bin/ballast" } } else { set lexe [file join $OrdBinDir "ballast.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc BallastGrid {NomATraiter} { global PipeQuery global PipeCollection if {$PipeCollection} { set FichierBlastP [file join [RepertoireDuGenome] blastp $NomATraiter] set Destination [file join [RepertoireDuGenome] ballast $NomATraiter] set FichierAncres [file join [RepertoireDuGenome] ballast $NomATraiter.anchors] if {[file exists $Destination]} {return 1} } else { set Destination "[file rootname $NomATraiter].ballast" set FichierBlastP "[file rootname ${NomATraiter}].blastp" set FichierAncres "[file rootname $NomATraiter].ballast.anchors" } set Ll [LesLignesDuFichier $FichierBlastP] if {[llength $Ll] < 10} { Espionne "Something wrong with BlastP file" return 0 } set CommandeBallast "[BallastExe] -p $FichierBlastP -o $Destination -anchors -noext -queryname $PipeQuery" catch {eval exec $CommandeBallast} Message #AF # historiquement, on ne retournait ok = 1 que si le fichier destination etait cree # finalement, on retourne systematiquement ok = 1 car avoir les ancres n est pas une condition obligatoire mais un plus... set ok 1 ## if {[file exists $FichierAncres]} { AjouteAuLogPipe "ballast = ok" } else { AjouteAuLogPipe "ballast failed" } return $ok } proc BallastPourLesAffyEN {} { BallastPourTous [ListeDesDifferentiellementExprimesSansJumeaux] } proc BallastPourTous {{LesNoms ""} {AvecLMS 1}} { #global OptionsBallastPourJulie #global OptionsBallastPourJulieDemande global RepertoireDuGenome #set OptionsBallastPourJulie [Entre "-dbclustal 0.000001"] #set OptionsBallastPourJulieDemande 1 set RepBlast "$RepertoireDuGenome/blastp" set RepBallast "$RepertoireDuGenome/ballast" if {![file exists $RepBallast]} {File mkdir $RepBallast} set Keep 0 if {[OuiOuNon "If some files already exist, would you want to conserv them?"]} {set Keep 1} if {$AvecLMS} { set RepLMS "$RepertoireDuGenome/lms" if {![file exists $RepLMS]} {File mkdir $RepLMS} } if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { set FichierBlastP "$RepBlast/$Nom" if {![file exists $FichierBlastP]} {continue} if {[file exists "$RepBallast/$Nom"] && $Keep} {continue} BallastUnBlastP $FichierBlastP $RepBallast if {$AvecLMS} {Sauve [FichierLMSDesAccessDuBallast "$RepBallast/$Nom"] dans "$RepLMS/$Nom"} } return "" } proc BallastUnBlastP {Fichier {RepertoireDestination ""}} { global RepertoireDeTravail if {$RepertoireDestination==""} { set RepertoireDestination $RepertoireDeTravail } set Query [QueryDuFichierBlast $Fichier] set Destination [Ballast $Fichier $RepertoireDestination $Query] return [ContenuDuFichier $Destination] } proc BallastUnPAB {Nom {RepertoireDestination ""}} { global RepertoireDuGenome global RepertoireDeTravail if {$RepertoireDestination==""} { set RepertoireDestination $RepertoireDeTravail } set Query $Nom set Fichier "$RepertoireDuGenome/blastp/$Nom" set Destination [Ballast $Fichier $RepertoireDestination $Query] return [ContenuDuFichier $Destination] } proc BandesCytoPourLesJRDunChromo {chromo} { set LesGenesDuChromo [LesJRTouchantUnChromo $chromo] set LesNoms [split $LesGenesDuChromo " "] set LesBandesDuChromo {} foreach Nom $LesNoms { set LesBandes [BandesCytologiques $Nom] if {$LesBandes==""} {continue} set LaPremiereBande [lindex $LesBandes 0] lappend LesBandesDuChromo "$Nom: $LaPremiereBande\n" } set LesBandesDuChromoTriees [lsort -index 1 $LesBandesDuChromo] set BandesTriees [join $LesBandesDuChromoTriees ""] return $BandesTriees } proc BandesCytologiques {Nom} { set LesBandesAPartirDucontig [BandesCytologiquesAPartirDuContig $Nom] if {$LesBandesAPartirDucontig!="" && $LesBandesAPartirDucontig!=" "} { set Bandes [split $LesBandesAPartirDucontig " "] set Nb [llength $Bandes] if {$Nb==1} { #Espionne "avec numero contig " return $LesBandesAPartirDucontig } } set AccessRNA [ExtraitAccessDuRNA $Nom] if {$AccessRNA!=""} { set LesBandes [LesBandesCytologiquesDeLorganisme $AccessRNA] if {$LesBandes!=""} { set Band [split $LesBandes " "] set N [llength $Band] if {$N==1} { #Espionne "avec access du mRNA" return $LesBandes } } } set DefinitionRNA [EssaiExtraitDefinitionRNA $Nom] set LesBandesAPartirDeDef [LesBandesCytologiquesDeLorganisme $DefinitionRNA] if {$LesBandesAPartirDeDef!=""} { set bb [split $LesBandesAPartirDeDef " "] set Nbd [llength $bb] if {$Nbd==1} { #Espionne "avec un nom, nom de gene?" return $LesBandesAPartirDeDef } } if {$DefinitionRNA!=""} { set Contig [ContigDuPremierHitDuBlast $Nom] set LesBandesChromo [LesBandesCytologiquesDeLorganisme $Contig "$DefinitionRNA"] if {$LesBandesChromo!=""} { #Espionne "avec contig et le nom extrait de def rna" return $LesBandesChromo } } #si on ne remplit aucune condition ci-dessus: set AccessRNA [ExtraitAccessDuRNA $Nom] if {$AccessRNA!=""} { set LesBandes [LesBandesCytologiquesDeLorganisme $AccessRNA] if {$LesBandes!=""} { #Espionne "avec access mRNA:" return $LesBandes } } if {$LesBandesAPartirDucontig!="" && $LesBandesAPartirDucontig!=" "} { #Espionne "avec numero contig:" return $LesBandesAPartirDucontig } } proc BandesCytologiquesAPartirDuContig {Nom} { set LesBandes {} set Contig [ContigDuPremierHitDuBlast $Nom] if {$Contig!=""} { set LesBandesDuContig [LesBandesCytologiquesDeLorganisme $Contig] if {$LesBandesDuContig==""} {return ""} return $LesBandesDuContig } else {return ""} } proc BandesTrouveesEtMoyen {Nom} { set LesBandesAPartirDucontig [BandesCytologiquesAPartirDuContig $Nom] if {$LesBandesAPartirDucontig!=""} { set Bandes [split $LesBandesAPartirDucontig " "] set Nb [llength $Bandes] set Contig [ContigDuPremierHitDuBlast $Nom] if {$Nb==1} { return "$Nom\t$Contig\t$LesBandesAPartirDucontig" } } set AccessRNA [ExtraitAccessDuRNA $Nom] if {$AccessRNA!=""} { set LesBandesAPartirDeAccessRNA [LesBandesCytologiquesDeLorganisme $AccessRNA] set Band [split $LesBandesAPartirDeAccessRNA " "] set N [llength $Band] if {$N==1} { return "$Nom\t$AccessRNA\t$LesBandesAPartirDeAccessRNA" } } set DefinitionRNA [EssaiExtraitDefinitionRNA $Nom] set LesBandesAPartirDeDef [LesBandesCytologiquesDeLorganisme $DefinitionRNA] if {$LesBandesAPartirDeDef!=""} { set Positions [split $LesBandesAPartirDeDef " "] set Nbd [llength $Positions] if {$Nbd==1} { return "$Nom\t$DefinitionRNA\t$LesBandesAPartirDeDef" } } if {$DefinitionRNA!=""} { set Contig [ContigDuPremierHitDuBlast $Nom] set LesBandesAPartirDuContigEtDefRNA [LesBandesCytologiquesDeLorganisme $Contig "$DefinitionRNA"] if {$LesBandesAPartirDuContigEtDefRNA!=""} { set BandesCyto [split $LesBandesAPartirDuContigEtDefRNA " "] set nn [llength $BandesCyto] return "$Nom\t$Contig\t$DefinitionRNA\t$LesBandesAPartirDuContigEtDefRNA" } } #si aucune de ces conditions remplies set AccessRNA [ExtraitAccessDuRNA $Nom] if {$AccessRNA!=""} { set LesBandes [LesBandesCytologiquesDeLorganisme $AccessRNA] if {$LesBandes!=""} { return "$Nom\t$AccessRNA\t$LesBandes" } } set Contig [ContigDuPremierHitDuBlast $Nom] if {$LesBandesAPartirDucontig!="" && $LesBandesAPartirDucontig!=" "} { return "$Nom\t$Contig\t$LesBandesAPartirDucontig" } } proc BandesTrouveesEtMoyenAffymetrix {Nom} { set LesBandesAPartirDucontig [BandesCytologiquesAPartirDuContig $Nom] if {$LesBandesAPartirDucontig!=""} { set Bandes [split $LesBandesAPartirDucontig " "] set Nb [llength $Bandes] set Contig [ContigDuPremierHitDuBlast $Nom] if {$Nb==1} { return "$Nom\t$Contig\t$LesBandesAPartirDucontig" } } set DefinitionRNA [DefinitionDuGeneAffymetrix $Nom] set LesBandesAPartirDeDef [LesBandesCytologiquesDeLorganisme $DefinitionRNA] if {$LesBandesAPartirDeDef!=""} { set Positions [split $LesBandesAPartirDeDef " "] set Nbd [llength $Positions] if {$Nbd==1} { return "$Nom\t$DefinitionRNA\t$LesBandesAPartirDeDef" } } if {$DefinitionRNA!=""} { set Contig [ContigDuPremierHitDuBlast $Nom] set LesBandesAPartirDuContigEtDefRNA [LesBandesCytologiquesDeLorganisme $Contig "$DefinitionRNA"] if {$LesBandesAPartirDuContigEtDefRNA!=""} { set BandesCyto [split $LesBandesAPartirDuContigEtDefRNA " "] set nn [llength $BandesCyto] return "$Nom\t$Contig\t$DefinitionRNA\t$LesBandesAPartirDuContigEtDefRNA" } } #si aucune de ces conditions remplie set Contig [ContigDuPremierHitDuBlast $Nom] if {$LesBandesAPartirDucontig!="" && $LesBandesAPartirDucontig!=" "} { return "$Nom\t$Contig\t$LesBandesAPartirDucontig" } } proc BannierePlateforme {} { lappend Banniere "" lappend Banniere "" lappend Banniere "" lappend Banniere "" lappend Banniere "
" lappend Banniere "" lappend Banniere "\"Go" lappend Banniere "
" lappend Banniere "
" set Banniere [join $Banniere "\n"] return $Banniere } proc BannisLePAB {Nom {Garde ""}} { set LesExistants [glob -nocomplain "[RepertoireDuGenome]/*/$Nom"] set LesDaEx {} foreach Existant $LesExistants { set Date [file mtime $Existant] lappend LesDaEx [list $Date $Existant] } set LesDaEx [lsort -index 0 $LesDaEx] set LesExistants {} foreach DaEx $LesDaEx { lappend LesExistants [lindex $DaEx 1] } set LesBannis [MorceauxChoisis $LesExistants "" "Select the files You want to delete"] foreach Banni $LesBannis { file delete -force $Banni } return $LesBannis } proc BanqueBlastString {TaxId} { set fichierFasta "/tmp/String$TaxId" if {![file isfile "$fichierFasta.phr"]} { CreeFichierFastaDesProteinesString $fichierFasta $TaxId exec formatdb -i $fichierFasta -p T file delete $fichierFasta } return $fichierFasta } proc BanqueEvi {Nom} { set BAcc [ExtraitInfo $Nom "BAcc"] set Banque "" ScanLaListe [split $BAcc ":"] Banque Access return $Banque } proc BanqueIdDeLAccess {Access} { set Fiche [PageInfo $Access genbank id] if {$Fiche != ""} { scan $Fiche "%s %s" ID BanqueId return $BanqueId } set Fiche [PageInfo $Access protein id] if {$Fiche != ""} { scan $Fiche "%s %s" LOCUS BanqueId return $BanqueId } return "" } proc BanqueIdDeLaPageInfo {PageInfo} { foreach Ligne [split $PageInfo "\n"] { if {[regexp -nocase {^ID |^LOCUS } $Ligne]} { set Id "" scan $Ligne "%s %s" EnteteID Id return $Id } } return } proc BanqueIdDeLaProt_PageInfo {PageInfo} { set BanqueId "" foreach Ligne [split $PageInfo "\n"] { if {![regexp "^ID " $Ligne]} {continue} scan $Ligne "%s %s" ID BanqueId break } return $BanqueId } proc BarcodeAlignment {} { global DS set DS(AliLg) [LongueurDeLAlignement] set DS(Pfam) 0 set DS(AddGrps) 0 set DS(AddPDB) 0 CreeLesPiliers BarcodeFrame BarcodeBackFigure BarcodeTraceAliFig return } proc BarcodeBackFigure {} { global DS SDG LNDG TDesSeqnames ListePDB set Can [set DS(Can)] $Can delete all # Trace one rectangle per group set YOffset 0 set x1 $DS(StartX) set x2 [expr {$DS(StartX) + $DS(LaneW)}] set y1 $DS(StartY) set Lnames [lrange $LNDG 1 end] set xn [expr {$x1 - 10}] set hn [lindex [font metrics FigF] 5] set DS(IdBegin) [$Can create text $x1 $y1 -justify center -anchor s -text "1" -font FigF] set DS(IdEnd) [$Can create text $x2 $y1 -justify center -anchor s -text "[set DS(AliLg)]" -font FigF] set fonte FigF set YOffset 10 for {set i 0} {$i < ([llength $LNDG]-1)} {incr i} { set n [lindex $LNDG $i+1] set y2 [expr {$y1 + $DS(LaneH)}] $Can create rectangle $x1 $y1 $x2 $y2 -fill LightGrey -tags [list "R$n"] set yn [expr {$y1 + ($y2-$y1)/2}] $Can create text $xn $yn -justify right -anchor e -font "$fonte" -text $n -tag T$n if {$DS(AddPDB) && [set DS($n,PDB)] != {}} { set Ln [list] foreach e [set DS($n,PDB)] { lappend Ln [string range $e 4 end] } set Spdb [join $Ln " "] $Can create text $x2 $yn -text "$Spdb" -justify left -anchor w -font FigPDB } set y1 [expr {$y2 + $YOffset}] } set DS(StopY) $y1 FenetreAuCentre $DS(Toplevel) return } proc BarcodeClose {} { global DS destroy $DS(Toplevel) unset DS return } proc BarcodeDrawPfam {} { global TabSF DS LNDG if {"FPfam" ni [font names]} { font create FPfam -size 14 } set Lr [BarcodeExtractPfam] # decale Id set Can $DS(Can) $Can itemconfigure $DS(IdBegin) -justify right -anchor e $Can itemconfigure $DS(IdEnd) -justify left -anchor w if {[llength $LNDG] == 1} { set LG $LNDG } else { set LG [lrange $LNDG 1 end] } set n [lindex $LG 0] set bb [$Can bbox [$Can find withtag R$n]] set lgt $DS(AliLg) lassign $bb x1 y1 x2 y2 set h $DS(LaneH) set x1 $DS(StartX) set YOffset 10 foreach e $Lr { lassign $e Id d f c n set xd [expr {$x1+int(1.0*$DS(LaneW)/$lgt*$d)}] set xf [expr {$x1+int(1.0*$DS(LaneW)/$lgt*$f)}] BarcodeEntetePfam $n $xd $xf $c set i -1 set y1 $DS(StartY) foreach g $LG { incr i set y2 [expr {$y1 + $h}] if {[PfamDansGroupe $g $Id $d $f]} { set yd [expr {$y1-6}] set yf [expr {$y2+6}] $Can create rectangle $xd $yd $xf $yf -fill $c -outline $c -tags PFam } set y1 [expr {$y2 + $YOffset}] } } $Can lower PFam return } proc BarcodeEntetePfam {n d f c} { global DS set y1 $DS(StartY) regsub -all "_" [string trim $n] " " n set w [font measure FPfam $n] set lb [regexp -all -inline -indices { } $n] set lb [lsort -decreasing -index 0 -integer $lb] set note $n set i 0 while {$w > ($f - $d + 1)} { set ib [lindex [lindex $lb $i] 0] set note "[string range $n 0 $ib-1]\n[string range $n $ib+1 end]" set w [font measure FPfam [string range $n 0 $ib-1]] incr i } set Can $DS(Can) set xn [expr {$d + ($f - $d + 1)/2}] set yn [expr {$DS(StartY) - 10}] # entete deja la set ie [$Can find closest $xn $yn] if {$ie ne ""} { lassign [$Can bbox $ie] tmp yn tmp tmp } set id [$Can create text $xn $yn -text "$note" -font FPfam -fill white -anchor s -justify center] lassign [$Can bbox $id] tmp y1 tmp y2 $Can create rectangle $d $y1 $f $y2 -fill $c -outline $c -tags entete $Can raise $id return } proc BarcodeExtractPfam {} { global TabSF DS # 1 recupere les TYPES de pfam presents set Lp [array names TabSF "*,PFAM*"] set Ltp [list] foreach e $Lp { lassign [split $e ,] n p lappend Ltp $p } set Ltp [lsort -unique $Ltp] # 2 recupere les ID/noms pfam foreach p $Ltp { set Ln [array names TabSF "*,$p"] foreach n $Ln { foreach e [set TabSF($n)] { DecortiqueUneFeature $e d f c tmp note lassign [BarcodeTraitePfam $note] Id txt lappend Trbrut($Id) [list $d $f $c $txt] } } } set Lr [TrieZonesPfam Trbrut] return $Lr } proc BarcodeFrame {} { global DS ListeTypesDeFeatures set DS(StartX) 300 set DS(StartY) 200 set DS(LaneW) 800 set DS(LaneH) 50 if {"FigF" ni [font names]} { font create FigF -family Helvetica -size 28 font create FigMito -family Helvetica -size 28 -underline 1 font create FigCyto -family Helvetica -size 28 -slant italic font create FigCyMi -family Helvetica -size 28 -slant italic -underline 1 font create FigPDB -family Helvetica -size 14 -slant italic -underline 1 } set w .barcode set DS(Toplevel) $w toplevel $w frame $w.css grid $w.css -row 0 -column 0 -sticky news grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 set Can $w.css.can set DS(Can) $Can canvas $w.css.can -scrollregion [list 0 0 2000 2000] -width 750 -height 420 -yscrollcommand "$w.css.scy set" -xscrollcommand "$w.css.scx set" -background white scrollbar $w.css.scy -orient vertical -command "$w.css.can yview" scrollbar $w.css.scx -orient horizontal -command "$w.css.can xview" grid $w.css.can -row 0 -column 0 -sticky news grid $w.css.scy -row 0 -column 1 -sticky ns grid $w.css.scx -row 1 -column 0 -sticky ew grid rowconfig $w.css 0 -weight 1 grid columnconfig $w.css 0 -weight 1 frame $w.cb grid $w.cb -row 1 -column 0 -sticky ew set Lfeat [linsert $ListeTypesDeFeatures 0 Select] set wdt [PlusLongEltDe $Lfeat] set DS(FeatSel) [lindex $Lfeat 0] ttk::combobox $w.cb.cbox -values $Lfeat -width $wdt -background white -foreground black -state readonly -textvariable DS(FeatSel) $w.cb.cbox index 0 bind $w.cb.cbox <> "" checkbutton $w.cb.pfam -text " PFAM " -onvalue 1 -offvalue 0 -variable DS(Pfam) checkbutton $w.cb.pdb -text " PDB " -onvalue 1 -offvalue 0 -variable DS(AddPDB) checkbutton $w.cb.grp -text " Groups " -onvalue 1 -offvalue 0 -variable DS(AddGrps) button $w.cb.close -text "Close" -background red -command BarcodeClose button $w.cb.print -text "Print" -background yellow -command {PrintCanvas "$w.css.can" png} grid $w.cb.cbox -row 0 -column 0 -padx 20 grid $w.cb.pfam -row 0 -column 1 grid $w.cb.pdb -row 0 -column 2 grid $w.cb.grp -row 0 -column 3 grid $w.cb.print -row 0 -column 4 grid $w.cb.close -row 0 -column 5 -padx 20 grid columnconfig $w all -weight 1 grid columnconfig $w.cb all -weight 1 grid rowconfig $w 0 -weight 1 bind $Can {%W scan mark %x %y} bind $Can {%W scan dragto %x %y 1} trace add variable DS(Pfam) write BarcodeView trace add variable DS(AddPDB) write BarcodeView trace add variable DS(AddGrps) write BarcodeView FenetreAuCentre $w return } proc BarcodeTracageFeature {n Lf} { global DS set Can $DS(Can) set bb [$Can bbox [$Can find withtag R$n]] lassign $bb x1 y1 x2 y2 incr y1 2 incr y2 -2 set Lg $DS(AliLg) set ctr 0 foreach f $Lf { lassign $f d f c set xd [expr {$x1+int(1.0*$DS(LaneW)/$Lg*$d)}] set xf [expr {$x1+int(1.0*$DS(LaneW)/$Lg*$f)}] if {$ctr} { # INDEL = contour de la zone $Can create rectangle $xd $y1 $xf $y2 -width 6 -outline $c } else { # residue = trace ligne if {$d == $f} { $Can create line $xd $y1 $xd $y2 -fill $c -width 3 } else { $Can create rectangle $xd $y1 $xf $y2 -fill $c -outline $c } } } return } proc BarcodeTraceAliFig {} { global DS db ListeDesPiliersDuGroupe LNDG if {[llength $LNDG] == 1} { set Lg $LNDG } else { set Lg [lrange $LNDG 1 end] } foreach n $Lg { set i 0 set plg [string length [lindex $ListeDesPiliersDuGroupe($n) 0]] set DS(Dep) -1 set DS(Contig) 0 for {set i 0} {$i < $DS(AliLg)} {incr i} { set p [string map [list "." ""] [lindex $ListeDesPiliersDuGroupe($n) $i]]] set pl [string length $p] if {100.*$pl/$plg >= 10 } { BarcodeTracePilierFig [expr {$i+1}] $n } } BarcodeTracePilierFig $i $n 1 $DS(Can) lower R$n } return } proc BarcodeTraceFeatureFig {} { global DS TabSF LNOrdali SDG LNDG if {[llength $LNDG] == 1} { set Lg $LNDG } else { set Lg [lrange $LNDG 1 end] } set ft $DS(FeatSel) foreach n $Lg { set Lfaf [list] set Ls [set SDG($n)] foreach nom $Ls { if {! [info exists TabSF($nom,$ft)]} { continue } foreach e [set TabSF($nom,$ft)] { DecortiqueUneFeature $e d f c tmp note lappend Lfaf [list $d $f $c] } } set Lfaf [lunique [lsort -integer -index 1 $Lfaf]] BarcodeTracageFeature $n $Lfaf } return } proc BarcodeTracePilierFig {i n {fin 0}} { global DS if {! $DS(Contig)} { set DS(Contig) 1 set DS(Dep) $i } elseif {$DS(Dep)+$DS(Contig) == $i} { incr DS(Contig) if {$fin} { set fin 0 } else { return } } set c $DS(Can) set bb [$c bbox [$c find withtag R$n]] lassign $bb x1 y1 x2 y2 set ic1 [expr {int(double($DS(LaneW))/$DS(AliLg)*$DS(Dep))}] set xi1 [expr {$x1+$ic1}] set ic2 [expr {int(double($DS(LaneW))/$DS(AliLg)*($DS(Dep)+$DS(Contig)))}] set xi2 [expr {$x1+$ic2}] if {$xi1 == $xi2} { $c create line $xi1 $y1 $xi1 $y2 -fill DarkSlateGrey } else { $c create rectangle $xi1 $y1 $xi2 $y2 -fill DarkSlateGrey -outline DarkSlateGrey } set DS(Contig) 1 set DS(Dep) $i return } proc BarcodeTraitePfam {n} { if {[regexp {^PROP_} $n]} { set n [string range $n 5 end] } set Li [regexp -inline -indices {_from_} $n] if {$Li != ""} { set i [lindex [lindex $Li 0] 0] set n [string range $n 0 $i-1] } set Id [string range $n 0 6] set tx [string range $n 8 end] return [list $Id $tx] } proc BarcodeTriePfam {l} { set l [lsort -index 1 -integer $l] set Lr [list] lassign [lindex $l 0] id1 d1 f1 c1 t1 set Done 0 foreach e [lrange $l 1 end] { if {$Done} { lappend Lr [list $id1 $d1 $f1 $c1 $t1 $s] } else { set Done 1 } lassign $e id2 d2 f2 c2 t2 # inclusion if {$d2 <= $f1} { set s 1 } else { set s 0 } lassign $e id1 d1 f1 c1 t1 } lappend Lr [list $id1 $d1 $f1 $c1 $t1 $s] return $Lr } proc BarcodeView {args} { global Defauts DS BarcodeBackFigure BarcodeTraceAliFig BarcodeTraceFeatureFig if {$DS(Pfam)} { BarcodeDrawPfam } return } proc Barycentre {LesXY} { set SX 0 set SY 0 set N [expr [llength $LesXY]/2] if {$N<1} { return {0. 0.} } foreach {X Y} $LesXY { set SX [expr $SX+$X] set SY [expr $SY+$Y] } return [list [expr 1.0*$SX/$N] [expr 1.0*$SY/$N]] } proc Barycentre3D {L} { set i 0 set xc 0 ; set yc 0 ; set zc 0 foreach t $L { lassign $t x y z set xc [expr {$xc + $x}] set yc [expr {$yc + $y}] set zc [expr {$zc + $z}] incr i } set xc [expr {$xc/$i}] set yc [expr {$yc/$i}] set zc [expr {$zc/$i}] return [list $xc $yc $zc] } proc BasculeLibs {from to} { # mise a jour librairies tcl # # Quand on installe nouvelle version de Tcl, # il faut ramener toutes les librairies qui # existaient dans l'ancienne version vers la # nouvelle, A L'EXCLUSION DES LIBS DE TCL LUI MEME # # from : top directory of OLD tcl install # to : top directory of NEW Tcl install set home [pwd] cd /usr/local cd [file join $from lib] set Lfrom [glob -type d *] cd /usr/local cd [file join $to lib] set Lto [glob -type d *] set Llib [lor $Lfrom $Lto "from1"] cd /usr/local foreach l $Llib { set in [file join $from lib $l] set out [file join $to lib $l] file copy -force $in $out } cd $home exit } proc Base10 {Texte} { regsub " " $Texte "" Texte if {[regexp "^\-" $Texte]} { set PlusOuMoins "-" } else { set PlusOuMoins "" } regsub {^[\-0]*} $Texte "" Texte if {$Texte==""} { set Texte 0 } return "$PlusOuMoins$Texte" } proc Base64Decode {Texte} { package require base64 return [::base64::decode $Texte] } proc Base64Encode {Texte {KeepEqual ""}} { #rR depuis 20150310 le defaut est d'enlever les trailing = #rR les = sont rajoutes pour qu'il y ait un mltiple de 4 octets set KeepEqual [string equal -nocase "KeepEqual" $KeepEqual] package require base64 set B64 [::base64::encode -wrapchar "" $Texte] if { ! $KeepEqual } { set B64 [string trim $B64 "="] } return $B64 } proc Base64Test {{Texte TRULULU}} { Espionne "Texte >>>$Texte<<<" set B64 [Base64Encode $Texte] Espionne "B64 >>>$B64<<< [string length $B64]" set D64 [Base64Decode $B64] Espionne "DecB64 >>>$D64<<<" set B64 [Base64Encode $Texte KeepEqual] Espionne "B64 >>>$B64<<< KeepEqual [string length $B64]" set D64 [Base64Decode $B64] Espionne "DecB64 >>>$D64<<< KeepEqual" } proc BaseCount {} { foreach T [concat [AnnotType ListOf T] [list F]] { set Total 0 foreach Chr [ListOfChr] { foreach D [EleGen $Chr $T ListOf D] F [EleGen $Chr $T ListOf F] { set Size [expr $F-$D+1] incr Total $Size } } if {0} { set FichierMotMap "[AnnotRep]/MotifsMapping.txt" set Type [AnnotType $T Type] if {$T==7 || $T==8 || $T==9} { set FichierMotMap "[AnnotRep]/MotifsMapping$T.txt" } if {$T=="F"} { set NbMotif [MotifMapping $T Nb Motif] } else { set NbMotif [exec grep -c $Type $FichierMotMap] } } set Ratio 0 if {$NbMotif!=""} { set Ratio [expr (1000000000*$NbMotif)/$Total] } set Code [AnnotType $T Code] Espionne [format "%9s %7d %11d %7d pour 1Gb" $Code $NbMotif $Total $Ratio] } } proc BashFromTcsh {{FileT ""} {FileB ""}} { if {$FileB==""} { set FileB "$FileT.bash" } if {[file exists $FileT]} { set T [ContenuDuFichier $FileT] } else { set T $FileT } set LeOld [split $T "\n"] set LeNew {} set PremiereLigne 1 foreach Ligne [split $T "\n"] { Espionne $Ligne # if {[regexp "set NoGcg=1" $Ligne]} { exit } set New $Ligne if {$PremiereLigne && [regexp {^#!.*/tcsh} $New]} { set New "#!/bin/bash\n#rR converted from tcsh by BashFromTcsh" set PremiereLigne 0 lappend LeNew $New continue } if {[regexp {([ \t]*)(set)([ \t]+)([^=]+)(=)([ \t]*)(\$<)} $New Match B1 Set B2 Var B3 Egal B4 Chevron]} { set New "${B1}read $Var" } set YaSet 0 set YaSetenv 0 if {[regexp {(^|[ \t]+)set([ \t]+)([^ \t=]+)} $New]} { set YaSet 1 regsub {(^|[ \t]+)set([ \t]+)([^ \t=]+)} $New "\\1\\3@=@" New } if {[regexp {(^|[ \t]+)setenv([ \t]+)([^ \t]+)} $New]} { set YaSetenv 1 regsub {(^|[ \t]+)setenv([ \t]+)([^ \t]+)} $New "\\1export \\3@=@" New } if {$YaSet || $YaSetenv} { regsub {([ \t]*)@=@=?([ \t]*)} $New "\\1@=@" New if {[regexp {@=@([^0-9\"\'].*)$} $New]} { # regsub {@=@([^0-9].*)$} $New "@=@\"\\1\"" New } regsub {@=@} $New "=" New } if {[regexp {(^[ \t]*)(alias)([ \t]+)([^ \t]+)([ \t]+)(.*)} $New Match B1 Alias B2 Nom B3 Valeur]} { if { ! [regexp {[\"\']} $Valeur]} { regsub -all "\"" $Valeur "\\\"" Valeur set Valeur "\"$Valeur\"" } set New "$B1$Alias$B2$Nom=$Valeur" } # B1 If B2 Op Exp B3 Clo Suite if {[regexp {(^[ \t]*)(if)([ \t]+)(\()([^\)]+)([ \t]*)(\))(.*)} $New Match B1 If B2 Open Exp B3 Close Suite]} { set Exp [string trim $Exp] # set OBash "\[\[" # set CBash "\]\]" set OBash "test" set CBash " " set EBash $Exp # set EBash [string map {"==" "-eq" "!=" "-ne" "<" "-lt" ">" "-gt" "<=" "-le" ">=" "-ge"} $Exp] set EBash [string map {"<" "\\<" ">" "\\>-gt"} $Exp] regsub -nocase -all {\$\?([a-z0-9_]+)} $EBash "$\{\\1\+x\}" EBash set Suite [string trim $Suite] if {$Suite=="then"} { set Suite "; then" } else { set Suite "; then $Suite ; fi" } set New "${B1}if $OBash $EBash $CBash $Suite" Espionne Espionne $Ligne Espionne $New lappend LeNew $New continue } if {[regexp {(^[ \t]*)(endif)(.*)} $New Match B1 EndIf Suite]} { set New "${B1}fi" lappend LeNew $New continue } Espionne $Ligne if {[regexp {(^[ \t]*)(unset(env)?)([ \t]+)(.*)} $New Match B1 Unset Env B2 Suite]} { set New "${B1}unset$B2$Suite" lappend LeNew $New Espionne "B1 =$B1=" Espionne "unset=$Unset=" Espionne "B2 =$B2=" Espionne "Suite=$Suite=" } lappend LeNew $New } SauveLesLignes $LeNew dans $FileB exec meld $FileT $FileB & exit AfficheListe $LeOld "" "TCSH" AfficheListe $LeNew "AvecRetour" "BASH" return $LeNew } proc BatchClustalw {args} { global tcl_platform global OrdTmpDir global OrdaliDir if {[llength $args] != 0 } { set in1 [file tail [lindex $args 0]] set out [file tail [lindex $args 1]] set log [file tail [lindex $args 2]] set Argmt [join [lrange $args 3 end] " "] set tmpadel [file join $OrdTmpDir "tmp*"] file delete -force $tmpadel file delete -force $log file delete -force $out.msf set DndName [file join $OrdTmpDir "${in1}.dnd"] set Commande "[ClustalwExe] $in1 -output=gscope $Argmt >& $log" if {[regexp -nocase "windows" $tcl_platform(platform)]} { regsub -all " -" $Commande " /" Commande } cd $OrdTmpDir eval exec $Commande file delete -force $DndName file rename -force "${in1}.msf" [SigneFichier "$in1.msf"] cd $OrdaliDir } return } proc BatchClustalwProfile {args} { global tcl_platform global OrdTmpDir global OrdaliDir if {[llength $args] != 0 } { set In1 [file tail [lindex $args 0]] set In2 [file tail [lindex $args 1]] set Out [file tail [lindex $args 2]] set log [file tail [lindex $args 3]] set Argmt [join [lrange $args 4 end] " "] set tmpadel [file join $OrdTmpDir "tmp*"] file delete -force $tmpadel file delete -force $log file delete -force $Out.msf set DndName "${In2}.dnd" set Commande "[ClustalwExe] -profile1=$In1 -profile2=$In2 -outfile=$Out -output=gscope $Argmt >& $log" if {[regexp -nocase "windows" $tcl_platform(platform)]} { regsub -all " -" $Commande " /" Commande } cd $OrdTmpDir eval exec $Commande file delete -force $DndName cd $OrdaliDir } return } proc Bathy2010 {{Action ""}} { if {$Action==""} { set Action "ShowGetSave" } set FicTfaOri "[BathyCompositionContig NameOf Directory]/DeIsa/touteslesbathy.tfa" set FicTfaNew "[BathyCompositionContig NameOf Directory]/DeIsa/Bathy2010.tfa" set i 0 foreach Access [LaSequenceDuTFAs $FicTfaOri "LaListeDesAccess"] { incr i set TFA [LaSequenceDuTFAs $FicTfaOri $Access] set Entete [string trim [EnteteDuTexteTFA $TFA]] set Seq [QueLaSequenceDuTexteTFA $TFA] set A "" if {[regexp {>(CL([0-9]+)Contig([0-9]+))} $Entete Match CLContig]} { set A $CLContig set Reads [BathyCompositionContig $CLContig "Reads"] set Libraries [BathyCompositionContig $CLContig "Libraries"] set R [llength $Reads] set L [llength $Libraries] set E ">$A $R reads from $L libraries" set New [SequenceFormatTFA $Seq $E "nucbrut"] } if {[regexp {>(IN0[A-Z]+([0-9]+)([^\.]+)).SCF} $Entete Match Nom I Y]} { set A $Nom set E ">$A SSH$I library $Y" set New [SequenceFormatTFA $Seq $E "nucbrut"] } if {[regexp {>(SSH([0-9]+)\.([0-9]+)([^\.]+)\.ab1)} $Entete Match Nom I Y D]} { set A "SSH$I.$Y" set Lib "SSH$I" if { ! [regexp {_\-_([^_]+)_([0-9\-]+)_(.+)} $D Match Z Date Id]} { FaireLire "couaccouac" } set E ">$A $Lib library $Z $Date $Id" set New [SequenceFormatTFA $Seq $E "nucbrut"] } if {[set X [regexp {>BA[0-9]+[ \t](IN0[A-Z]+([0-9]+)([^ \t]+))} $Entete Match Nom I Y]]} { set A $Nom set E ">$A Stress library $Y" set New [SequenceFormatTFA $Seq $E "nucbrut"] } if {$A==""} {FaireLire "$Entete was not recognized"; continue } if {[info exists DejaVu($A)]} { Espionne "$A" # set AutreTFA [StringSuivant " " dans $DejaVu($A)] set AutreTFA $DejaVu($A) if {$TFA!=$AutreTFA} { FaireLire "duplication access" } continue } lappend LeNew $New set DejaVu($A) "$TFA" } if {[regexp -nocase "Show" $Action]} {set Fen [AfficheListe $LeNew] } if {[regexp -nocase "Save" $Action]} {set Fic [SauveLesLignes $LeNew dans $FicTfaNew] } if {[regexp -nocase "GetShow" $Action]} {return $Fen } if {[regexp -nocase "GetSave" $Action]} {return $Fic } return "" } proc BathyCompositionContig {{Qui ""} {Quoi ""}} { global BCC if {$Qui ==""} { set Qui "Show" } if {$Quoi==""} { set Quoi "Resume" } if {[info exists BCC($Qui,$Quoi)]} { return $BCC($Qui,$Quoi) } if {[info exists BCC("EstCharge")]} { if {$Qui=="Show"} { return [AfficheListe $BCC(ListOf,$Quoi)] } if {[info exists BCC("EstCharge")]} { return "" } } set BCC("EstCharge") 1 set Bathy2010Dir "/genomics/link/Bathy2010" set BCC(NameOf,Directory) $Bathy2010Dir set LesPerdus {} foreach Ligne [LesLignesDuFichier "$Bathy2010Dir/DeIsa/composition_contigs.txt"] { if { ! [regexp {CL([0-9]+)Contig([0-9]+)} $Ligne CLContig CL C] } { continue } if {[info exists BCC($CLContig,Reads)]} { FaireLire "$CLContig deja vu !"; } set Libraries {} set Reads {} foreach Mot [split $Ligne " "] { if { ! [regexp {(IN0ACC([0-9]+)([^\.]+)).SCF} $Mot Match Read I Y]} { lappend LesPerdus $Mot; continue } set BCC($CLContig,CL) $CL set BCC($CLContig,C) $C lappend Reads $Read lappend Libraries "SSH$I" } set Reads [lsort -dictionary -unique $Reads] set Libraries [lsort -dictionary -unique $Libraries] set BCC($CLContig,Reads) $Reads set BCC($CLContig,Libraries) $Libraries lappend LesCLContig $CLContig } set BCC(ListOf,CLContig) [lsort -dictionary -unique $LesCLContig] foreach CLContig $LesCLContig { if { ! [regexp {CL([0-9]+)Contig([0-9]+)} $CLContig Bidon CL C] } { FaireLire "couac" } set Resume "$CLContig $CL $C : [join $Reads " "]" set BCC($CLContig,Resume) $Resume lappend LeResume $Resume } set BCC(ListOf,Resume) $LeResume return [BathyCompositionContig $Qui $Quoi] } proc BeauDessin {} { set K [UnCanva] $K create rectangle 100 100 200 300 -fill "red" pack $K } proc BeauGN {GN} { return $GN } proc BeauScore {} { foreach Ligne [LesLignesDuFichier outlierscore] { scan $Ligne "%s %s" Nom S if {$S==""} { set S -2} set B [format "%8.1e" $S] Espionne $B lappend LesBeaux "$Nom $B" } SauveLesLignes $LesBeaux dans "[RepertoireDuGenome]/fiches/outlierscorebeaux" exit } proc BeginWarning2HTML {aT} { upvar $aT tbl set style "font-style:bold;color:red;" if {$tbl(Id) ne ""} { Html_Append "
" } else { Html_Append "
" } Html_Append "
" return } proc BelleBanque {} { set FichierTFA "[RepertoireDuGenome]/banques/protenplus" set S 0 set C 0 set B 0 foreach Access [LaSequenceDuTFAs $FichierTFA "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $FichierTFA $Access] set Entete [EnteteDuTexteTFA $TFA] Espionne "$Access" if {[regexp "^s" $Access]} { set A "SCB:Spur[format %3.3d [incr S]] $Entete" } if {[regexp "^c" $Access]} { set A "SCB:Cint[format %3.3d [incr C]] $Entete" } if {[regexp "^A" $Access]} { set A "SCB:$Access $Entete" } set Seq [QueLaSequenceDuTexteTFA $TFA] set New [SequenceFormatTFA $Seq $A "protbrut"] lappend LaNouvelle $New } set Nouvelle [join $LaNouvelle "\n"] return [Sauve $Nouvelle dans "$FichierTFA.bellebanque"] } proc BelleGauche {Texte} { set BeauTexte [format "%-12s " $Texte] if {[regexp -nocase {[a-z]} $BeauTexte]} { set TexteHTML "
$BeauTexte" } else { set TexteHTML $BeauTexte } return $TexteHTML } proc BelleLigne {Ligne} { set LesMots [LesMotsDeLaLigne $Ligne] ScanLaListe $LesMots P G E A set O [lindex $LesMots end] set Reste [join [lrange $LesMots 4 end] " "] set Belle [format "%-30s %-10s %s %-10s %10s %-20s" $P $O $Reste $G $E $A] return $Belle } proc BelleVue {H V Nom} { if {$H=="ProbeSetId" || $H=="ProbeSet"} {return [H_Href $V "http://genoret.igbmc.fr/genoret/Project/igbmc/evimm/testGscopeLaetitia.php?GscopeID=$Nom" "target='_blank'"]} #if {$H=="ProbeSetId"} {return [H_Href $V "[LbgiUrl]/SignalIntensityImage/$Nom*" "target='_blank'"]} if {$H=="GscopeId"} {return [H_Href $V "[WscopeScience]&FileMoi&$Nom" "target='_blank'"]} if {$H=="Description"} {return [H_Href $V "[WscopeScience]&FileMoi¬es&$Nom" "target='_blank'"]} if {$H=="TissueTypes" || $H=="TissueType"} { return [H_Href $V "[LbgiUrl]/jpg_of_TissType/${Nom}_TissType.jpg" "target='_blank'"] } if {$H=="DevStages"} { return [H_Href $V "[LbgiUrl]/jpg_of_DevStage/${Nom}_DevStage.jpg" "target='_blank'"] } if {$H=="AccessmRNA"} { return [H_Href $V [WgetzSurWeb "$V" "" "GetUrl"] "target='_blank'"] } if {$H=="AccessProt"} { return [H_Href $V [WgetzSurWeb "$V" "" "GetUrl"] "target='_blank'"] } if {$H=="CopainsDesCompulsory"} { return [H_Href $V "[WscopeScience]&InterrogeCopainsDesCompulsory&$Nom" "target='_blank'"] } if {$H=="cDNA"} { return [H_Href $V "[WscopeScience]&FileMoi&ResultcDNA/RecapInfoADNc&$Nom" "target='_blank'"] } return $V } proc BelleVueJean {H V Nom} { if {$H=="RetscopeId"} { return [H_Href $V "[WscopeScience]&FileMoi&FastaFiles&$Nom" "target='_blank'"] } if {$H=="NucAccessionNumber"} { return [H_Href $V [WgetzSurWeb "$V" "" "GetUrl"] "target='_blank'"] } if {$H=="ProtAccessionNumber"} { return [H_Href $V [WgetzSurWeb "$V" "" "GetUrl"] "target='_blank'"] } return $V } 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 BellesCouleurs {} { set Max 0 foreach Ligne [LesLignesDuFichier "$GscopeEtc/gscope_couleurs.txt"] { scan $Ligne "%s %s" C H set Hexa($C) $H set Color($H) $C set Max [Maxi [string length $C] $Max] lappend LesCs $C } foreach C $LesCs { set H [set Hexa($C)] set c [string tolower $C] set Ligne [format " %-${Max}s => \"%s\"," "\"$c\"" $H] Espionne $Ligne } exit } proc BenEnteteTFA {filename} { set found 0 if {[FileAbsent "[RepertoireDuGenome]/prottfa/$filename"]} {return "file absent"} set FIC [open "[RepertoireDuGenome]/prottfa/$filename" "r"] while {[gets $FIC line]!=-1} { if {[string index $line 0]==">"} { set found 1 close $FIC if {[string index $line end]=="\n"} { return [string range $line 0 end-1] } else { return $line } } } if {$found==0} { puts "Aucune entete fasta pour $filename" } close $FIC return "" } proc BenSeqLength {filename} { global RepertoireDuGenome set length 0 set FIC [open "$RepertoireDuGenome/prottfa/$filename" "r"] #puts "'$RepertoireDuGenome/prottfa/$filename'" while {[gets $FIC line]!=-1} { if {[string index $line 0]==">"} { continue } if {[string index $line end]=="\n"} { set length [expr $length+[string length $line]-1] } else { set length [expr $length+[string length $line]] } } close $FIC #puts "'$length'" return $length } proc BenjiLaMalice {mode} { if { $mode == $::GL_SELECT } { global TLabList if {! [info exists TLabList]} { global Cor set TLabList [glGenLists 1] glNewList $TLabList GL_COMPILE_AND_EXECUTE set Cor(0) [list "Text P0" {0.0 0.0 0.0}] glInitNames glPushName 0 glLoadName 0 glBegin GL_POINTS glVertex3f 0.0 0.0 0.0 glEnd set Cor(2) [list "Text P2" {1.0 0.0 0.0}] glLoadName 2 glBegin GL_POINTS glVertex3f 1.0 0.0 0.0 glEnd set Cor(4) [list "Text P4" {0.0 1.0 0.0}] glLoadName 4 glBegin GL_POINTS glVertex3f 0.0 1.0 0.0 glEnd set Cor(6) [list "Text P6" {0.0 0.0 -1.0}] glLoadName 6 glBegin GL_POINTS glVertex3f 0.0 0.0 -1.0 glEnd glEndList } else { # puts "===> Call List !" # glCallList $PickList } } else { glBegin GL_TRIANGLES glColor3f 1.0 0.0 0.0 # light_color3f 1.0 0.0 0.0 glNormal3f 1.0 0.0 0.0 glVertex3f 0.0 0.0 0.0 # light_color3f 0.0 1.0 0.0 glColor3f 0.0 1.0 0.0 glNormal3f 1.0 0.0 0.0 glVertex3f 0.0 0.0 1.0 # light_color3f 0.0 0.0 1.0 glColor3f 0.0 0.0 1.0 glNormal3f 1.0 0.0 0.0 glVertex3f 0.0 1.0 0.0 if {0} { glColor3f 1.0 1.0 1.0 glNormal3f 0.0 1.0 0.0 glVertex3f 0.0 0.0 0.0 glColor3f 0.0 0.0 1.0 glNormal3f 0.0 1.0 0.0 glVertex3f 1.0 0.0 0.0 glColor3f 1.0 0.0 0.0 glNormal3f 0.0 1.0 0.0 glVertex3f 0.0 0.0 -1.0 glColor3f 0.0 1.0 0.0 glVertex3f 0.0 1.0 0.0 glColor3f 0.0 0.0 1.0 glVertex3f 1.0 0.0 0.0 glColor3f 1.0 0.0 0.0 glVertex3f 0.0 0.0 -1.0 glColor3f 1.0 1.0 1.0 glVertex3f 0.0 0.0 0.0 glColor3f 0.0 0.0 1.0 glVertex3f 1.0 0.0 0.0 glColor3f 0.0 1.0 0.0 glVertex3f 0.0 1.0 0.0 } glEnd } return } proc BestDE {Nom} { if {[set ValiDE [ExtraitInfo $Nom "ValiDE:"]] !=""} { return $ValiDE } if {[set DE [ExtraitInfo $Nom "DE:"]] !=""} { return $DE } if {[set DraftDE [ExtraitInfo $Nom "DraftDE:"]]!=""} { return $DraftDE } return "" } proc BestDefinitionOfBlastP {Nom {SeuilExpect ""} {ForbidenWordInDE ""} {RepDuBlast ""}} { global RepertoireDuGenome global NotreOS global NotreOrga Wup "Attention ca marche AUSSI pour BlastX avec RepDuBlast" if {$RepDuBlast==""} { set RepDuBlast "blastp" } if {$ForbidenWordInDE==""} { set ForbidenWordInDE "hypotheticalxxxxxxxxxxxxxxxxxxxx" } if {$SeuilExpect==""} { set SeuilExpect 0.001 } set FichierBlastP "$RepertoireDuGenome/$RepDuBlast/$Nom" if { ! [file exists $FichierBlastP]} { return "No blastp" } DecortiqueBlast $FichierBlastP "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess DE $lDE PN $lPN { if {$PN>$SeuilExpect} { continue } if {[regexp -nocase {^UniRef[0-9]+_(.+)} $BanqueId Match A]} { set Access $A } if {[regexp {\:} $BanqueId]} { set N [StringApres ":" dans $BanqueId] if {[EstUnPAB $N]} {continue} } if {$DE=="" || [regexp -nocase $ForbidenWordInDE $DE]} { continue } if {[EstUnAccessPDB $BanqueId]} { set aPDB $BanqueId set OS [OrganismeDuPDB $aPDB] set DE [TextePDB $aPDB "KEYWDS"] } else { if {[regexp -nocase {^UniRef[0-9]+_(.+)*} $Access Match Acc]} { set Access $Acc } # set OS [QuestionDeScience QuidSeq "QuidOSOfAC $Access"] set OS "" set DE "" #rR j'ai interverti les DecortiqueLesLignesEMBL avec LesChampsInteressantsDuAccess if {1 || $OS==""} { set LEmbl [LaSequenceDesBanques $BanqueId $Access AOk "OnVeutEmbl"] if {$LEmbl=={}} { continue } DecortiqueLesLignesEMBL $LEmbl IDlu AClu DElu GNlu OSlu OClu OXlu set OS $OSlu set DE $DElu regsub -all {[ \n\t]+} $DE " " DE set DE [string trim $DE] } if {$DE==""} { ScanLaListe [LesChampsInteressantsDuAccess $Access $Access "OS" "DE" ] OS DE } regsub -all {[ \n\t]+} $DE " " DE set DE [string trim $DE] set OS [string trim $OS] } if {$DE=="" || $OS==""} { continue } if {$OS==$NotreOS} { continue } return "$DE (from $OS $Access expect=$PN)" return $DE } return "" } proc BestDefinitionOfBlastPPourTous {} { foreach Nom [ListeDesPABs] { set DE [BestDefinitionOfBlastP $Nom] if {$DE==""} { continue } Espionne "$Nom $DE" InformeSansDemander $Nom "DE_BlastP: $DE" } } proc BestDefinitionOfBlastX {Nom {SeuilExpect ""} {ForbidenWordInDE ""} {RepDuBlast ""}} { if {$RepDuBlast==""} { set RepDuBlast "blastx" } return [BestDefinitionOfBlastP $Nom $SeuilExpect $ForbidenWordInDE $RepDuBlast] } proc BestDefinitionOfBlastXPourTous {} { foreach Nom [ListeDesPABs] { set DE [BestDefinitionOfBlastX $Nom] if {$DE==""} { continue } Espionne "$Nom $DE" InformeSansDemander $Nom "DE_BlastX: $DE" } } proc BestDefinitionOfDbClustal {Nom} { global NotreOS global NotreOrga foreach {Orga Dist Access} [LesOrgaDistAccessDesOrthologues $Nom] { if {$Orga==$NotreOrga} { continue } if {[EstUnAccessPDB $Access]} { set OS [OrganismeDuPDB $Access] set DE [TextePDB $Access "KEYWDS"] } else { set OS [OrgaDuAccess $Access] set DE [DefinitionDuAccess $Access] } if {$DE=="" || [regexp -nocase "hypothetical" $DE]} { continue } return "$DE (from $OS $Access dist=$Dist)" } return "" } proc BestDefinitionOfDbClustalPourTous {} { foreach Nom [ListeDesPABs] { set DE [BestDefinitionOfDbClustal $Nom] Espionne "$Nom $DE" InformeSansDemander $Nom "DE_DbClustal: $DE" } } proc BestDefinitionOfLeon {Nom} { set NotreOS [NotreOS] set NotreOrga [NotreOrga] set NotreTaxId [NotreTaxId] set FichierLeon "[RepertoireDuGenome]/leonLeo/$Nom" if { ! [file exists $FichierLeon]} { set FichierLeon "[RepertoireDuGenome]/leonLeo/$Nom.msf" } if { ! [file exists $FichierLeon]} { return "" } set n [DecortiqueUnMSF $FichierLeon LesNomsDeSequences] foreach NomSeq $LesNomsDeSequences] { set Dae [DaedalusHit $NomSeq $Nom] if {$Dae!=""} { set TaxId [ChampDaedalus TaxId $NomSeq $Nom] if {$TaxId==$NotreTaxId} { continue } } set Orga if {$Orga==$NotreOrga} { continue } if {[EstUnAccessPDB $Access]} { set OS [OrganismeDuPDB $Access] set DE [TextePDB $Access "KEYWDS"] } else { set OS [OrgaDuAccess $Access] set DE [DefinitionDuAccess $Access] } if {$DE=="" || [regexp -nocase "hypothetical" $DE]} { continue } return "$DE (from $OS $Access dist=$Dist)" } return "" } proc BestDefinitionOfLeonPourTous {} { foreach Nom [ListeDesPABs] { set DE [BestDefinitionOfLeon $Nom] if {$DE==""} { continue } Espionne "$Nom $DE" InformeSansDemander $Nom "DE_Leon: $DE" } } proc BestGCAnalysis {{Sequence ""}} { Wup "Permet de lancer les analyses pour determiner le meilleur GC pour un groupe de sequence" if {$Sequence==""} { set LesQuerys [LesParametresDuDesign Query "LaValeurMerci"] } else { set LesQuerys $Sequence } if {$LesQuerys==""} {return ""} foreach Q $LesQuerys { ChargeGCCount $Q } CalculLaMoyenneGCCount IllustreGCCount DechargeGCCount return "" } proc BestGN {Nom} { if {[set ValiGN [ExtraitInfo $Nom "ValiGN:"]] !=""} { return $ValiGN } if {[set GN [ExtraitInfo $Nom "GN:"]] !=""} { return $GN } if {[set DraftGN [ExtraitInfo $Nom "DraftGN:"]]!=""} { return $DraftGN } return "" } proc BestGeneId {Nom} { set G [NIAG $Nom G] if {$G!=""} { return $G } } proc BestHitReciproc {Nom {BlastDir ""} {CutPN ""} {HitOnly ""}} { if { ! [regexp "/" $BlastDir]} { set BlastDir [RepertoireDuGenome]/$BlastDir } if {$CutPN==""} { set CutPN 1.0e-3 } set FiBlast "$BlastDir/$Nom" if {[FileAbsent $FiBlast]} { return "NoBlastFile" } set N [DecortiqueBlast $FiBlast $CutPN 1 aQuery lBanqueId lAccess lDE] if {$N==0} { return "NoHitFound" } set BanqueId [lindex $lBanqueId 0] if {$HitOnly=="HitOnly"} { return $BanqueId } set Access [lindex $lAccess 0] set AccessOk "" set LeHit [LaSequenceDesBanques $BanqueId $Access AccessOk] if {$LeHit=={}} { return "NoSequenceFor$AccessOk" } set Hit [join $LeHit "\n"] set Hit [SequenceFormatTFA $Hit] set Racine [file tail [RepertoireDuGenome]] set SortieBlast [Blast "blastp" $Hit "retourne" "[RepertoireDuGenome]/banques/$Racine"] if {$SortieBlast==""} { return "NoBlastResultFor$AccessOk" } Sauve $SortieBlast dans "${BlastDir}Reciproc/$AccessOk" set MaxValable 1 set N [DecortiqueBlast $SortieBlast $CutPN $MaxValable aQuery lBanqueId lAccess lDE] foreach BanqueId $lBanqueId { if {$BanqueId==$Nom} { return $AccessOk } } return "NoReciprocalHitFor$AccessOk" } proc BestHitReciprocPourTous {{BlastDir ""} {CutPN ""} {HitOnly ""}} { set Bla [file tail $BlastDir] foreach Nom [ListeDesPABs] { set Reciproc [BestHitReciproc $Nom $BlastDir $CutPN $HitOnly] Espionne "$Nom Reciproc1_$Bla: $Reciproc" InformeSansDemander $Nom "Reciproc1_$Bla: $Reciproc" } } proc BestHumanHit {Nom} { lappend LesVoulus "SY[NomDeMSP $Nom A]M_HUMAN" lappend LesVoulus "SY[NomDeMSP $Nom A]_HUMAN" foreach Voulu $LesVoulus { foreach Ligne [LesLignesDuFichier [GscopeFile $Nom "blastp"]] { if { ! [regexp {^>([^ ]+) } $Ligne Match BAI]} { continue } set Access [lindex [split $BAI "|"] end] if {$Access=="$Voulu"} { return $Access } } } set LesPossibles {} set Max 55 foreach Ligne [LesLignesDuFichier [GscopeFile $Nom "blastp"]] { if {[incr Max -1]==0} { break } if { ! [regexp {>([^ ]+) } $Ligne Match BAI]} { continue } set Access [lindex [split $BAI "|"] end] if {[regexp "_HUMAN$" $Access]} { return $Access } lappend LesPossibles $Access } return [ChoixParmi $LesPossibles] } proc BestInformePourBathy {} { foreach Nom [ListeDesPABs] { set Info [ExtraitInfo $Nom] set OSBlastX [ExtraitInfo $Nom "OS_BlastX:"] if {[regexp -nocase {([A-Z]+) ([a-z]+) ([a-z0-9]+)} $OSBlastX Match Genre Espece Access]} { set LEmbl [LaSequenceDesBanques $Access] DecortiqueLesLignesEMBL $LEmbl ID AC DE GN OS OC OX SequenceBrute LaDETotal InformeSansDemander $Nom "BestAccess: $Access" InformeSansDemander $Nom "BestID: $ID" InformeSansDemander $Nom "BestAC: $AC" InformeSansDemander $Nom "BestDE: $DE" InformeSansDemander $Nom "BestGN: $GN" InformeSansDemander $Nom "BestOS: $OS" InformeSansDemander $Nom "BestOC: $OC" InformeSansDemander $Nom "BestOX: $OX" } } } proc BestLocalisation {Nom {IdMin 0.8}} { set TailleFragment 100000 set FLocmRNAHsap "[RepertoireDuGenome]/Localisation/mRNAHsapLocalisation_Human" if {[file exists $FLocmRNAHsap]} {set LocmRNAHsapExiste 1} else {set LocmRNAHsapExiste 0} set FLocProttfa "[RepertoireDuGenome]/Localisation/ProttfaLocalisation_Human" if {[file exists $FLocProttfa ]} {set LocProttfaExiste 1} else {set LocProttfaExiste 0} set FLocBox "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human" if {[file exists $FLocBox ]} {set LocBoxExiste 1} else {set LocBoxExiste 0} set LeTexte {} set EstCeQueLaProteineEstOK 1 set EstCeQueLemRNAHumanEstOK 1 if { [file exists "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesContigsChoisis"] || [file exists "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis"]} { #Validite de la proteine de ref (sequence presente et bon %Id avec seq initiale) if { ([InterrogeProtAndmRNAChoisis $Nom SeqChoisie ] != "SeqOK" || [InterrogeProtAndmRNAChoisis $Nom InfoSeqChoisie] != "") && ([InterrogeProtAndContigChoisis $Nom SeqChoisie] != "SeqOK" || [InterrogeProtAndContigChoisis $Nom InfoSeqChoisie] != "") } { set EstCeQueLaProteineEstOK 0 } } if { [file exists "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga"] } { #Validite du mrna humain (sequence presente et bon %Id avec proteine de ref) set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$AccessmRNA == "" || [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessmRNA Identity] < $IdMin} { set EstCeQueLemRNAHumanEstOK 0 } } set LesLoc [InterrogeLocalisation $FLocBox Nom $Nom] set LesLocProt [InterrogeLocalisation $FLocProttfa Nom $Nom] set LesLocmRNA [InterrogeLocalisation $FLocmRNAHsap Nom $Nom] #si la proteine est bonne et le mrna humain est bon on utilise la localisation du mrna humain #si seulement la proteine est bonne on utilise la localisation de la proteine de ref #si ni la proteine de ref ni le mrna humain ne sont valides, on utilise la localisation de la sequence par defaut if {$EstCeQueLemRNAHumanEstOK && $LocmRNAHsapExiste && $LesLocmRNA != {}} { set LesLoc $LesLocmRNA } elseif {$EstCeQueLaProteineEstOK && $LocProttfaExiste && $LesLocProt != {}} { set LesLoc $LesLocProt } foreach LaLoc $LesLoc { if {0} { set Chrom [NumeroDuChromosome [lindex $LaLoc 9]] set DChrom [lindex $LaLoc 10] set FChrom [lindex $LaLoc 11] set BC [join [LesBandesCytologiquesDeLaRegion $Chrom $DChrom $FChrom] " "] set LaLoc [lreplace $LaLoc 19 19 $BC] } set Ligne [join $LaLoc "\t"] lappend LeTexte $Ligne } return $LeTexte } proc BestTmAnalysis {{Sequence ""}} { Wup "Permet de lancer les analyses pour determiner le meilleur Tm pour un groupe de sequence" if {$Sequence==""} { set LesQuerys [LesParametresDuDesign Query "LaValeurMerci"] } else { set LesQuerys $Sequence } if {$LesQuerys==""} {return ""} foreach Q $LesQuerys { ChargeTmCount $Q } CalculLaMoyenneTmCount IllustreTmCount DechargeTmCount return "" } proc BetterStartCodon {} { foreach Nom [ListeDesPABs] { set Rapport [StartCodonReport $Nom "Rapport"] if { ! [regexp "Wrong_Start_Codon" $Rapport]} { continue } scan $Rapport "%s %s" W AsPos regsub -all {[^0-9]} $AsPos "" Pos if {$Pos<2} { continue } set PosN [expr ($Pos-1)*3] set OldDebut [Box $Nom debut] set OldFin [Box $Nom fin] set Orient [Box $Nom orient] if {$Orient=="F"} { Box $Nom debut [expr $OldDebut + $PosN] } else { Box $Nom fin [expr $OldFin - $PosN] } set OldSD [ShineDalgarno $Nom] set SD [CreeLesFichiersDesShineDalgarnoDesPABs "" $Nom "RendreEtat"] set nBases 0 set OldnBases 0 set Over [Overlap $Nom] foreach Over [split $Over "/"] { if { ! [regexp "I begin in" $Over]} { continue } scan $Over "%s %d" Bidon OldnBases set nBases [expr $OldnBases - $PosN] break } Espionne [format "%s %4s Overlap de %3d a %3d SD: %7s %s" $Nom $AsPos $OldnBases $nBases $SD $OldSD] } exit } proc BetterTaxId {TaxId} { global BetterTaxId if {[info exists BetterTaxId($TaxId)]} { return [set BetterTaxId($TaxId)] } if {[info exists BetterTaxId("EstCharge")]} { return $TaxId } foreach Ligne [LesLignesDuFichier "/genomics/link/Common/fiches/TaxNCBI/merged.dmp"] { scan $Ligne "%s %s %s" Old Bidon New set BetterTaxId($Old) $New } foreach Ligne [LesLignesDuFichier "/genomics/link/Common/fiches/TaxNCBI/better_de_rr.dmp"] { scan $Ligne "%s %s" Old New set BetterTaxId($Old) $New } set BetterTaxId("EstCharge") 1 return [BetterTaxId $TaxId] } proc Between0And2Pi {Angle} { set Pi [Pi] while {$Angle < 0} { set Angle [expr $Angle + 2*$Pi] } while {$Angle >= 2*$Pi} { set Angle [expr $Angle - 2*$Pi] } return $Angle } proc BiCoordOnly {} { # Sert à virer la fin des lignes pour ne garder que les coordonnées set FichierDesBiDir [open "[Fiches]/Bidir/1000/SBSDansLes847promoteurs.txt" "r"] set FichierDesCoord [open "[Fiches]/Bidir/1000/SBSDansLes847promoteurs.coord" "w"] while { [gets $FichierDesBiDir Ligne] >=0 } { ScanLaListe $Ligne Intergene Chromosome Start End Reste puts $FichierDesCoord "$Intergene $Chromosome $Start $End +" } } proc BiDansBi {Path} { # Verifie si, dans la liste des Bidi, il n'y a pas un gene qui s'est intercalé Espionne "BiDansBi : Debut" Espionne "BiDansBi : Constitution des requetes" set FichierDesBidir [open "$Path.coord" "r"] set FichierDesRequetes [open "/tmp/BiDansBi.bql" "w"] while { [gets $FichierDesBidir Ligne] >=0 } { ScanLaListe $Ligne Chromosome StartIntergene EndIntergene puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT access, name, typegene, chrom, txStart, txEnd, strand FROM ucschuman.GeCo WHERE txStart>$StartIntergene AND txEnd<$EndIntergene AND chrom='$Chromosome' AND pseudogene='no' " puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "#" } close $FichierDesBidir close $FichierDesRequetes Espionne "BiDansBi : Execution des requetes" exec /biolo/bird/bin/birdql_client.sh /tmp/BiDansBi.bql bird /tmp/BiDansBi.res set FichierDesRequetesExecutees [open "/tmp/BiDansBi.res" "r"] set FichierDesErreurs [open "$Path.err" "w"] set NumeroIntergene 0 Espionne "BiDansBi : Ecriture" while { [gets $FichierDesRequetesExecutees LigneExecutee] >=0 } { incr NumeroIntergene gets $FichierDesRequetesExecutees LigneExecutee if { $LigneExecutee == "EMPTY" } { continue } else { puts $FichierDesErreurs "$NumeroIntergene $LigneExecutee" } } Espionne "BiDansBi : Fin" close $FichierDesRequetesExecutees } proc BidAccessDeLOrganisme {Orga Nom} { global RepertoireDuGenome regsub "_" $Orga " " Orga set APNsOnly 1 set SeuilExpect 0.001 set MaxListe 250 if {[info exists BidAccessDeLOrganisme(Courant)] && [set BidAccessDeLOrganisme(Courant)]!=$Nom} { unset BidAccessDeLOrganisme set BidAccessDeLOrganisme(Courant) $Nom } if {[info exists BidAccessDeLOrganisme($Nom,$Orga)]} { return [set BidAccessDeLOrganisme($Nom,$Orga)] } if {[info exists BidAccessDeLOrganisme($Nom,"EstCharge")]} { return "" } set FichierAPNs "[RepertoireDuGenome]/apns/$Nom" if {[file exists $FichierAPNs]} { set nLu 0 foreach Ligne [LesLignesDuFichier $FichierAPNs] { incr nLu scan $Ligne "%s %s %s" BanqueId Access Expect if {[EstUnAccessPDB $BanqueId]} { continue } if {$Expect > $SeuilExpect} { break } if {$nLu > $MaxListe } { break } set GEs "" regsub " *$BanqueId +$Access +$Expect *" $Ligne "" GEs if { ! [regexp -nocase {[a-z]} $GEs]} { continue } set LesGEs [split $GEs ":"] foreach GE $LesGEs { if {[info exists DejaVu($GE)]} { continue } set DejaVu($GE) 1 set BidAccessDeLOrganisme($Nom,$GE) "$BanqueId $Access $Expect" } } } if {[info exists BidAccessDeLOrganisme($Nom,$Orga)]} { return [set BidAccessDeLOrganisme($Nom,$Orga)] } if {$APNsOnly} { return "" } set OBP [OrthoBlastP $Nom $Orga] if {$OBP != "OrthoBlastPNonValide"} { if { ! $OBP } { return "" } set LesOs [OrthoBlastP $Nom] regsub " " $Orga "_" GenreEspece set i [lsearch $LesOs $GenreEspece] set Fichier "$RepertoireDuGenome/blastp/$Nom" if { ! [file exists $Fichier]} { return "" } DecortiqueBlast $Fichier 0.001 "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN Espionne "Recherche de $Orga en $i ratee" set LesBids [Zippe [lrange $lBanqueId $i end] [RetourneLaListe [lrange $lBanqueId 0 [expr $i-1]]]] set LesAccs [Zippe [lrange $lAccess $i end] [RetourneLaListe [lrange $lAccess 0 [expr $i-1]]]] foreach Bid $LesBids Access $LesAccs { foreach Organisme [split [OrgaDuAccess $Access Complet $Bid] ":"] { if {[Glossaire $Organisme Complet]==$Orga} { return "$Bid $Access" } } } return "" } return "" } proc Bidon {} { global Sequences global LNOrdali foreach mol {"11as" "12as"} { ExtraitSeqEtStrDuPdb "$mol.pdb" "" "${mol}_A" global PDB_[set mol]_Sequence puts "$mol A : [set PDB_[set mol]_Sequence(A)]" set Sequences(${mol}_A) [set PDB_[set mol]_Sequence(A)] lappend LNOrdali "${mol}_A" ExtraitSeqEtStrDuPdb "$mol.pdb" "" "${mol}_B" puts "$mol B : [set PDB_[set mol]_Sequence(B)]" set Sequences(${mol}_B) [set PDB_[set mol]_Sequence(B)] lappend LNOrdali "${mol}_B" } CreeLeTfa "toto.tfa" exit } proc Bidon_LoadImage {imgName} { set retVal [catch {set phImg [image create photo -file $imgName]} err1] if { $retVal != 0 } { error "Error reading image $texName ($err1)" } else { set w [image width $phImg] set h [image height $phImg] set z [tcl3dPhotoChans $phImg] set texImg [tcl3dVectorFromPhoto $phImg] image delete $phImg } if {$z == 3} { set type $::GL_RGB } else { set type $::GL_RGBA } return [list $texImg $w $h $type] } proc BigBlast {expectLimit} { puts ">>>> creation de la banque pour le blast" CreeUneBanqueBlast "./proteomeToBlast.fasta" "BIGBANK" puts ">>>> lancement du BIGBLAST" exec gscope "yes" "BlastPPourTousOptionFiltre2" "" "BIGBANK" "" "$expectLimit" "F" } proc BiggestHeader {Fichier} { set Max 0 foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase "^>" $Ligne]} { continue } set L [string length $Ligne] if {$L>$Max} { set Max $L set Biggest $Ligne } } return "$Max $Biggest" } proc BiggestHeaderPourTous {{Rep ""}} { if {$Rep==""} { set Rep "." } foreach Fasta [lsort [glob -nocomplain "$Rep/*"]] { set R [BiggestHeader $Fasta] scan $R "%d" M if {$M>600} { Espionne "$Fasta\n$R" } } } proc BilanATTGGSurLesClustersSansLesProteinesJumelles_PO {RepPromAn} { set FichierBilanATTGGSurLesClusters "$RepPromAn/BilanATTGG" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles_old" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set LesInfos {} InterrogeDefinitionsConsensus unset InterrogeProteinesJumelles unset InterrogeOrf2Cluster2Access2Def2Expression unset foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { Espionne "Cluster -> $Cluster" # Traitement des proteines jumelles, ne garde que les proteines uniques pour chaque cluster set LesNoms {} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] { set TabDeJaVu($Cluster,$Jum) 1 } lappend LesNoms $Nom } set LesNoms [lsort -unique $LesNoms] # Bilan ATTGG a partir du fichier PromAn foreach Nom $LesNoms { set FilePromAn "$RepPromAn/$Nom.PromAn" if {![file exists $FilePromAn]} {Espionne "$FilePromAn does not exists" ; continue } set n [PromAnPanel ask $FilePromAn ResultType PatternResearch Method ATTGG n] if {$n == ""} { continue } set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesTSSDist {} for {set nATTGG 1} {$nATTGG <= $n} {incr nATTGG} { set TSSDist [PromAnPanel ask $FilePromAn ResultType "PatternResearch" Method "ATTGG" n $nATTGG TSSDist] lappend LesTSSDist $TSSDist } lappend LesInfos "$Cluster\t$Nom\t$n\t$LesTSSDist\t$MeanDef" PromAnPanel unset } } Sauve [join $LesInfos "\n"] dans $FichierBilanATTGGSurLesClusters PromAnPanel unset InterrogeDefinitionsConsensus unset InterrogeProteinesJumelles unset InterrogeOrf2Cluster2Access2Def2Expression unset return } proc BilanAnnotationAffymetrix_Morphine {Fichier} { Wup "Morphine Bilan pour creer le fichier des annotations" Wup "Fait avec Aurelie pour Katia et Jerome" set LesLignes "" lappend LesLignes "Gscope\tProbeset\tNone-None\tProttfa\tContig" foreach PAB [ListeDesPABs] { set Texte "" lappend Texte "$PAB" set Affy [AffymetrixAccess $PAB] lappend Texte $Affy set UnigeneAcc [InterrogeLesAccRSEtUG_Affymetrix $PAB AccUnigene] set RefSeqAcc [InterrogeLesAccRSEtUG_Affymetrix $PAB AccRefSeq] if {$UnigeneAcc=="None" && $RefSeqAcc=="None"} { lappend Texte "1" } else { lappend Texte "0" } if {! [file exists "[RepertoireDuGenome]/prottfa/$PAB"]} { lappend Texte "0" } else { lappend Texte "1" } if {! [file exists "[RepertoireDuGenome]/contig/$PAB"]} { lappend Texte "0" } else { lappend Texte "1" } set Texte [join $Texte "\t"] lappend LesLignes $Texte } AppendAuFichier $Fichier [join $LesLignes "\n"] return "" } proc BilanCilio {{Qui ""} {Quoi ""}} { global BilanCilio if {[OnTraite CilioCarta2014]} { return [BilanCilio2014 $Qui $Quoi] } #rR on lit le fichier Excel de Odile #rR gscope puts BilanCilio ListOf Usage if {[info exists BilanCilio($Qui,$Quoi)]} { return $BilanCilio($Qui,$Quoi) } if {[info exists BilanCilio("EstCharge")]} { regsub -all "_" $Qui " " Qi regsub -all "_" $Quoi " " Qo if {[info exists BilanCilio($Qui,$Qo)] } { return $BilanCilio($Qui,$Qo) } if {[info exists BilanCilio($Qi,$Quoi)]} { return $BilanCilio($Qi,$Quoi) } if {[info exists BilanCilio($Qui,Column)] && [info exists BilanCilio($BilanCilio($Qui,Column),$Quoi)]} { return $BilanCilio($BilanCilio($Qui,Column),$Quoi) } if {[info exists BilanCilio($Qi,Column)] && [info exists BilanCilio($BilanCilio($Qi,Column),$Quoi)]} { return $BilanCilio($BilanCilio($Qi,Column),$Quoi) } if {[info exists BilanCilio($Qui,Column)] && [info exists BilanCilio($BilanCilio($Qui,Column),$Qo)]} { return $BilanCilio($BilanCilio($Qui,Column),$Qo) } if {[info exists BilanCilio($Qi,Column)] && [info exists BilanCilio($BilanCilio($Qi,Column),$Qo)]} { return $BilanCilio($BilanCilio($Qi,Column),$Qo) } if {$Qui=="Example"} { set LesExemples {} foreach Us $BilanCilio(ListOf,Usage) { if { ! [regexp "^Bilan" $Us]} { continue } lappend LesExemples "\n$Us" set Res [eval $Us] if {[string length $Res]>100} { set Res "[string range $Res 0 132] ..." } lappend LesExemples $Res } lappend LesExemples "\nYou can run all these commands with :" lappend LesExemples "gscope puts BilanCilio N_Fungi TaxId" return [join $LesExemples "\n"] } return "" } set BilanCilio("EstCharge") 1 #rR ************************************************** attention il faut le fichier sinon return 0 si on demande exists vide autrement # set Fichier "[RepertoireDuGenome]/bilan/bilanOK.csv" set Fichier "/genomics/link/CilioCarta/bilan/bilanOK.csv" if {[FileAbsent $Fichier]} { unset BilanCilio if {$Qui=="exists"} { return 0 } return "" } set BilanCilio(exists,) 1 set ListOfUsage [list "gscope puts BilanCilio Usage" "gscope puts BilanCilio Example" "BilanCilio ListOf GscopeId" "BilanCilio ListOf UniprotId" "BilanCilio ListOf TaxId" "BilanCilio ListOf Class" "BilanCilio ListOf Clade" "" "BilanCilio 10090 Species" "BilanCilio 10090 Class" "BilanCilio 10090 Clade" "BilanCilio 10090 State" "BilanCilio 10090 TaxId" "" "BilanCilio (556484_12968) Column" "BilanCilio (556484_12968) Clade" "" "BilanCilio Y_Fungi TaxId" "BilanCilio Y_Fungi CladeContentTaxIds" "BilanCilio Y_Fungi CladeContentSpecies" "BilanCilio Y_Fungi CladeContentColumns" "BilanCilio N_Fungi Permil" "BilanCilio PR_Fungi Count" "" ] set BilanCilio(ListOf,Usage) $ListOfUsage set BilanCilio(Usage,) [join $ListOfUsage "\n"] set BilanCilio(Filename,) $Fichier set Texte [ContenuDuFichier $Fichier] regsub -all "\n\"" $Texte "\"" Texte set CladeContentTaxIds {} set CladeContentSpecies {} set CladeContentColumns {} set Prems 1 set Deuss 0 set Trois 0 set Quats 0 set N 0 foreach Ligne [split $Texte "\n"] { if {0 && [incr N]==1000} { break } if {$Prems} { set Prems 0 set Deuss 1 set LesTaxIdLus [lrange [split $Ligne ";"] 5 end] set Column 5 set CladeContentTaxIds {} set LesTaxId {} foreach TaxId $LesTaxIdLus { if {$TaxId==""} { if {$CladeContentTaxIds=={}} { break } set TaxId "([join $CladeContentTaxIds { }])" lappend BilanCilio(ListOf,CladeTaxIds) $TaxId set BilanCilio($Column,CladeContentTaxIds) $CladeContentTaxIds set BilanCilio($Column,CladeContentColumns) $CladeContentColumns set CladeContentColumns {} set CladeContentTaxIds {} } else { lappend CladeContentColumns $Column lappend CladeContentTaxIds $TaxId lappend BilanCilio(ListOf,TaxId) $TaxId } set BilanCilio($TaxId,Column) $Column set BilanCilio($Column,TaxId) $TaxId incr Column } continue } if {$Deuss} { set Trois 1 set Deuss 0 set LesEspecesLus [lrange [split $Ligne ";"] 5 end] set Column 5 set LesEspeces {} foreach Espece $LesEspecesLus { regsub { \(.+\) *$} $Espece "" Espece if {$Espece==""} { break } set TaxId $BilanCilio($Column,TaxId) if {[regexp {^[0-9]+$} $Espece]} { set TailleClade $Espece set BilanCilio($Column,CladeContentSize) $TailleClade set BilanCilio($Column,IsClade) 1 set BilanCilio($Column,CladeContentSpecies) $CladeContentSpecies lappend BilanCilio(ListOf,CladeColumn) $Column set CladeContentSpecies {} } else { lappend CladeContentSpecies $Espece lappend BilanCilio(ListOf,Species) $Espece lappend BilanCilio(ListOf,SpeciesColumn) $Column set BilanCilio($Column,TaxId) $TaxId set BilanCilio($Column,Species) $Espece set BilanCilio($Espece,TaxId) $TaxId set BilanCilio($TaxId,OS) $Espece regsub -all " " $BilanCilio($TaxId,OS) "_" BilanCilio($TaxId,OS_) } incr Column } continue } if {$Trois} { set Trois 0 set Quats 1 #rR attention il y a des ; protégés par de "" on les remplace par 1 2 3 etc. set iC 0 while {[regexp {;\"([^\"]+)\";} $Ligne Match Class]} { set ClassMemo($iC) $Class regsub {;\"([^\"])+\";} $Ligne ";$iC;" Ligne incr iC } set LesClassLus [lrange [split $Ligne ";"] 5 end] set Column 5 set LesEspeces {} foreach Class $LesClassLus { if {[info exists ClassMemo($Class)]} { set Class $ClassMemo($Class) } if {$Class==""} { break } set TaxId $BilanCilio($Column,TaxId) if {[info exists BilanCilio($Column,IsClade)]} { #rR ici on a le clade seul et non pas la classe de l'espèce. set CladeSeul $Class set BilanCilio($Column,CladeSeul) $CladeSeul #rR il faut attendre la ligne 4 pour avoir les Y PR N } else { set BilanCilio($Column,DoCount) 1 set BilanCilio($Column,TaxId) $TaxId set BilanCilio($Column,Class) $Class } lappend BilanCilio(ListOf,Class) $Class ; #rR attention les clades font partie de la liste des classes incr Column } continue } if {$Quats} { set Quats 0 set LesHeadersLus [split $Ligne ";"] set Column 0 set LesHeaders {} foreach Header $LesHeadersLus { if {$Column==0} { set Header "Comment" } regsub {\([^\(]+\)} $Header "" Header if {$Header==""} { break } set Header [string trim $Header] set Header [BonneEntetePourBilanCilio $Header] if {[regexp {^(Y|PR|N)$} $Header]} { set Etat $Header set TaxId $BilanCilio($Column,TaxId) if {[info exists BilanCilio($Column,CladeSeul)]} { set CladeSeul $BilanCilio($Column,CladeSeul) set EtatClade "${Etat}_$CladeSeul" set BilanCilio($Column,Clade) $EtatClade set BilanCilio($EtatClade,Column) $Column set BilanCilio($TaxId,Clade) $EtatClade lappend BilanCilio(ListOf,Clade) $EtatClade set Header $EtatClade } else { set Species $BilanCilio($Column,Species) set SpeciesEtat "${Species} $Etat" set BilanCilio($SpeciesEtat,Column) $Column set BilanCilio($SpeciesEtat,TaxId) $TaxId set BilanCilio($SpeciesEtat,Class) $BilanCilio($Column,Class) #set Header $SpeciesEtat set Header $Species } set BilanCilio($Column,State) $Etat } set HeaderUnderscore $Header regsub -all " " $HeaderUnderscore "_" HeaderUnderscore regsub -all {[\(\)]} $HeaderUnderscore "" HeaderUnderscore set BilanCilio($Column,Header) $HeaderUnderscore set BilanCilio($Header,Column) $Column set BilanCilio($HeaderUnderscore,Column) $Column lappend BilanCilio(ListOf,Header) $HeaderUnderscore incr Column } continue } #rR maintenant il faut lire les données et les affecter en fonction de la column set LesMots [split $Ligne ";"] lassign $LesMots Comment InGoldStandard GscopeId UniprotId InOrthoinspector set G $GscopeId lappend BilanCilio(ListOf,GscopeId) $GscopeId foreach K {Comment InGoldStandard GscopeId UniprotId InOrthoinspector} { set BilanCilio($G,$K) [set $K] } set L [llength $BilanCilio(ListOf,Header)]; incr L -1 foreach H $BilanCilio(ListOf,Header) Value [lrange $LesMots 0 $L] { set BilanCilio($G,$H) $Value } } set BilanCilio(ListOf,JoinedClade) {} foreach Clade $BilanCilio(ListOf,Clade) { regsub {^[YNPR]+_} $Clade "" JoinedClade lappend BilanCilio(ListOf,JoinedClade) $JoinedClade if { ! [info exists BilanCilio($JoinedClade,CladeContentTaxIds)]} { set BilanCilio($JoinedClade,CladeContentTaxIds) {} set BilanCilio($JoinedClade,CladeContentSpecies) {} } # LConcat BilanCilio($JoinedClade,CladeContentTaxIds) $BilanCilio($Clade,CladeContentTaxIds) # LConcat BilanCilio($JoinedClade,CladeContentSpecies) $BilanCilio($Clade,CladeContentSpecies) } set BilanCilio(ListOf,JoinedClade) [lsort -unique $BilanCilio(ListOf,JoinedClade)] foreach CladeColumn $BilanCilio(ListOf,CladeColumn) { foreach Column $BilanCilio($CladeColumn,CladeContentColumns) { set BilanCilio($Column,CladeColumn) $CladeColumn set BilanCilio($Column,Clade) $BilanCilio($CladeColumn,Clade) } } set NG 0 foreach G $BilanCilio(ListOf,GscopeId) { incr NG set U $BilanCilio($G,UniprotId) lappend BilanCilio(ListOf,UniprotId) $U set Column 0 foreach H $BilanCilio(ListOf,Header) { set BilanCilio($U,$H) $BilanCilio($G,$H) if {[info exists BilanCilio($Column,DoCount)] && $BilanCilio($G,$H)==1 } { incr BilanCilio($H,Count) $BilanCilio($G,$H)} incr Column } } foreach H $BilanCilio(ListOf,Header) { if { ! [info exists BilanCilio($H,Count)]} { set BilanCilio($H,Count) 0 } set BilanCilio($H,Permil) [expr round($BilanCilio($H,Count)*1000./$NG)] regsub -all " " $H "_" H lappend BilanCilio(ListOf,Usage) "BilanCilio HSAP00001 $H" } set BilanCilio(ListOf,UniprotId) [lsort $BilanCilio(ListOf,UniprotId)] if {0} { foreach S [array names BilanCilio "10090,*"] { regsub 10090 $S 9606 H Espionne "$S $H" set BilanCilio($H) $BilanCilio($S) } regsub -all 0 $BilanCilio(10090,State) 1 BilanCilio(9606,State) set BilanCilio(9606,Species) "Homo sapiens" set BilanCilio(9606,TaxId) 9606 } set BilanCilio(9606,Clade) $BilanCilio($BilanCilio(10090,Column),Clade) set BilanCilio(9606,State) "Y" return [BilanCilio $Qui $Quoi] } proc BilanCilio2014 {{Qui ""} {Quoi ""}} { global BilanCilio2014 #rR on lit le fichier Excel de Odile #rR gscope puts BilanCilio2014 ListOf Usage if {[info exists BilanCilio2014($Qui,$Quoi)]} { return $BilanCilio2014($Qui,$Quoi) } if {[info exists BilanCilio2014("EstCharge")]} { if {$Qui=="ListOf" && $Quoi=="Example"} { set LesExemples {} foreach Us $BilanCilio2014(ListOf,Usage) { if { ! [regexp "^Bilan" $Us]} { continue } lappend LesExemples "\n$Us" lappend LesExemples [eval $Us] } lappend LesExemples "\nYou can run all these commands with :" lappend LesExemples "gscope puts BilanCilio2014 Y_Mammalia TaxId" return [join $LesExemples "\n"] } return "" } set BilanCilio2014("EstCharge") 1 set Fichier "[RepertoireDuGenome]/fiches/bilan_presence_absence_avecgroupes_tentativescriteres.csv" if {[FileAbsent $Fichier]} { unset BilanCilio2014; return "" } set BilanCilio2014(exists,) 1 set Usage [list "gscope puts BilanCilio2014 ListOf Usage" "BilanCilio2014 ListOf Box" "BilanCilio2014 ListOf Access" "BilanCilio2014 ListOf Categories" "BilanCilio2014 ListOf TaxId" "BilanCilio2014 ListOf Class" "BilanCilio2014 ListOf Clade" "" "BilanCilio2014 10090 Class" "BilanCilio2014 10090 Clade" "BilanCilio2014 10090 State" "BilanCilio2014 10090 PA" "" "BilanCilio2014 Y_Mammalia TaxId" "BilanCilio2014 Y_Mammalia State" "BilanCilio2014 Y_Mammalia States" "BilanCilio2014 Y_Mammalia Count" "BilanCilio2014 Y_Mammalia PA" "" ] set BilanCilio2014(ListOf,Usage) $Usage set BilanCilio2014(Filename,) $Fichier set Texte [ContenuDuFichier $Fichier] regsub -all "\n\"" $Texte "\"" Texte set Prems 1 set Deuss 0 set Trois 0 set LesTaxId {} set LesTaxIdsDuG {} set LesEtatsDuG {} set LesEspecesDuG {} set LesClades {} foreach Ligne [split $Texte "\n"] { if {$Prems} { set Prems 0 set Deuss 1 set LesBox [lrange [split $Ligne ";"] 4 end] set BilanCilio2014(ListOf,Box) $LesBox continue } if {$Deuss} { set Trois 1; set Deuss 0 ; continue } if {$Trois} { set Trois 0; set BilanCilio2014(ListOf,Categories) [lrange [split $Ligne ";"] 4 end]; continue } set Classe "" if {[regexp {;\"([^\"]+)\";} $Ligne Match Classe]} { regsub {;\"([^\"])+\";} $Ligne ";Classe;" Ligne } set LesMots [split $Ligne ";"] set TaxId [string trim [lindex $LesMots 0] " -"] set Espece [string trim [lindex $LesMots 1] " -"] set Clade [string trim [lindex $LesMots 2] " -"] set Etat [string trim [lindex $LesMots 3] " -"] if {$TaxId=="" && $Espece=="" && $Clade=="" && $Etat==""} { set LesAccess [lrange $LesMots 4 end] set BilanCilio2014(ListOf,Access) $LesAccess break } set Clade "${Etat}_$Clade" regsub -all " +" $Clade "_" Clade if {[regexp {^[0-9]+$} $TaxId]} { lappend LesTaxIdsDuG $TaxId lappend LesEspecesDuG $Espece lappend LesEtatsDuG $Etat lappend LesClassesDuG $Classe lappend BilanCilio2014(ListOf,TaxId) $TaxId lappend BilanCilio2014(ListOf,Class) $Classe set BilanCilio2014($TaxId,PA) [lrange $LesMots 4 end] set BilanCilio2014($TaxId,State) $Etat set BilanCilio2014($TaxId,Class) $Classe set BilanCilio2014($Classe,TaxId) $TaxId } else { set Compte $Espece lappend BilanCilio2014(ListOf,Clade) $Clade set BilanCilio2014($Clade,Count) $Compte set BilanCilio2014($Clade,State) $Etat set BilanCilio2014($Clade,TaxId) $LesTaxIdsDuG set BilanCilio2014($Clade,Species) $LesEspecesDuG set BilanCilio2014($Clade,States) $LesEtatsDuG set BilanCilio2014($Clade,Class) $LesClassesDuG set BilanCilio2014($Clade,TaxId) $LesTaxIdsDuG set BilanCilio2014($Clade,PA) [lrange $LesMots 4 end] foreach TaxId $LesTaxIdsDuG { set BilanCilio2014($TaxId,Clade) $Clade set BilanCilio2014($TaxId,Clade) $Clade } set LesTaxIdsDuG {} set LesEtatsDuG {} set LesEspecesDuG {} } } foreach S [array names BilanCilio2014 "10090,*"] { regsub 10090 $S 9606 H Espionne "$S $H" set BilanCilio2014($H) $BilanCilio2014($S) } regsub -all 0 $BilanCilio2014(10090,PA) 1 BilanCilio2014(9606,PA) return [BilanCilio2014 $Qui $Quoi] } proc BilanCilioQds {{Qui ""} {Quoi ""}} { return [QuestionDeScience CilioCarta "ret BilanCilio $Qui $Quoi"] } proc BilanDesClusters_Gretta {FichierBoitesSelectionnees FichierOUT} { set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierGOProteo "[GODBDir]/GeneOntology_HUMAN" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" set NbCluster 6 set F [open $FichierBoitesSelectionnees] set i 0 while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set Ligne [split $Ligne "\t"] set Affy [lindex $Ligne 0] set Cluster [lindex $Ligne 1] incr i set TabAffy($Cluster,$Affy) 1 } close $F set Tab(LesClusters) {} set Tab(LesNoms) {} Espionne "Lecture du Fichier Orf2Cluster2Access2Def2Expression" foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesNoms] { set Affy [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Access] set LesExpressions [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom LesExpressions] for {set i 0} {$i < $NbCluster} {incr i} { set Cluster [expr $i + 1] if {![info exists Tab(Cluster,$Cluster,LesNoms)]} { set Tab(Cluster,$Cluster,LesNoms) {} set Tab(Cluster,$Cluster,LesIndividusGO) {} set Tab(Cluster,$Cluster,LesIndividusTT) {} set Tab(Cluster,$Cluster,LesIndividusDS) {} set Tab(Cluster,$Cluster,LesIndividusDO) {} lappend Tab(LesClusters) $Cluster } set Expr [lindex $LesExpressions $i] if {$Expr < 0} {continue} if {![info exists TabAffy($Cluster,$Affy)]} {continue} lappend Tab(LesNoms) $Nom lappend Tab(Cluster,$Cluster,LesNoms) $Nom } } if {[set Tab(LesNoms)] != {}} {set Tab(LesNoms) [lsort -unique [set Tab(LesNoms)]]} set LesIndividusGODeLaPop1 {} set LesIndividusGODeLaPopUp {} set LesIndividusGODeLaPopDown {} set LesIndividusTTDeLaPop1 {} set LesIndividusTTDeLaPopUp {} set LesIndividusTTDeLaPopDown {} set LesIndividusDSDeLaPop1 {} set LesIndividusDSDeLaPopUp {} set LesIndividusDSDeLaPopDown {} set LesIndividusDODeLaPop1 {} set LesIndividusDODeLaPopUp {} set LesIndividusDODeLaPopDown {} Espionne "Populations des clusters" foreach Cluster [set Tab(LesClusters)] { foreach Nom [set Tab(Cluster,$Cluster,LesNoms)] { if {1} { ####Tissue Type#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType]] if {$LIndividu != {}} { if {$Cluster == 1 || $Cluster == 3 || $Cluster == 5} { lappend LesIndividusTTDeLaPopDown $LIndividu } else { lappend LesIndividusTTDeLaPopUp $LIndividu } lappend Tab(Cluster,$Cluster,LesIndividusTT) $LIndividu } ####Dev Stage#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage]] if {$LIndividu != {}} { if {$Cluster == 1 || $Cluster == 3 || $Cluster == 5} { lappend LesIndividusDSDeLaPopDown $LIndividu } else { lappend LesIndividusDSDeLaPopUp $LIndividu } lappend Tab(Cluster,$Cluster,LesIndividusDS) $LIndividu } } if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { if {$Cluster == 1 || $Cluster == 3 || $Cluster == 5} { lappend LesIndividusGODeLaPopDown $LIndividu } else { lappend LesIndividusGODeLaPopUp $LIndividu } lappend Tab(Cluster,$Cluster,LesIndividusGO) $LIndividu } } if {1} { ###Domaines####################################### set LIndividu {} foreach LeDom [InterrogeDomaines $Nom LesDomaines] { set Type [lindex $LeDom 0] set Dom [lindex $LeDom 1] set Def [lindex $LeDom 2] if {$Def == ""} {continue} lappend LIndividu $Dom set Tab(Dom,$Dom,Def) $Def set Tab(Dom,$Dom,Type) $Type } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { if {$Cluster == 1 || $Cluster == 3 || $Cluster == 5} { lappend LesIndividusDODeLaPopDown $LIndividu } else { lappend LesIndividusDODeLaPopUp $LIndividu } lappend Tab(Cluster,$Cluster,LesIndividusDO) $LIndividu } } } } Espionne "OK" if {[info exists TabDeJaVu]} {unset TabDeJaVu} Espionne "Populations totales selectionnees" foreach Nom [set Tab(LesNoms)] { if {1} { ####Tissue Type#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType]] if {$LIndividu != {}} { lappend LesIndividusTTDeLaPop1 $LIndividu } ####Dev Stage#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage]] if {$LIndividu != {}} { lappend LesIndividusDSDeLaPop1 $LIndividu } } if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu != {}} { set LIndividu [lsort -unique $LIndividu] lappend LesIndividusGODeLaPop1 $LIndividu } } if {1} { ###Domaines####################################### set LIndividu {} foreach LeDom [InterrogeDomaines $Nom LesDomaines] { set Type [lindex $LeDom 0] set Dom [lindex $LeDom 1] set Def [lindex $LeDom 2] if {$Def == ""} {continue} lappend LIndividu $Dom set Tab(Dom,$Dom,Def) $Def set Tab(Dom,$Dom,Type) $Type } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend LesIndividusDODeLaPop1 $LIndividu } } } Espionne OK Espionne "Lecture Du FichierGO du Proteome" #Gene Ontology du proteome humain##### set LesIndividusGODeLaPop2 {} if {1} { foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} lappend LesIndividusGODeLaPop2 [lsort -unique $LIndividu] } } Espionne "OK" Espionne "Calcul" set LeTexte {} foreach Cluster [set Tab(LesClusters)] { set LesIndividusGO [set Tab(Cluster,$Cluster,LesIndividusGO)] set LesIndividusTT [set Tab(Cluster,$Cluster,LesIndividusTT)] set LesIndividusDS [set Tab(Cluster,$Cluster,LesIndividusDS)] set LesIndividusDO [set Tab(Cluster,$Cluster,LesIndividusDO)] ###GO GO GO GO################ foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop1] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPopDown] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tDown\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tDown\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPopUp] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tUp\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tUp\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop2] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } ####Tissue Type##################### foreach LeTT [LesZscoreDesRequetesDuGroupe $LesIndividusTT $LesIndividusTTDeLaPop1] { set TT [lindex $LeTT 0] set r [lindex $LeTT 2] if {$r <= 0} {continue} set Stat [join [lrange $LeTT 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tTissue Type\t\t\t\t$TT\t\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tTissue Type\t\t\t\t$TT\t\t$Stat" } foreach LeTT [LesZscoreDesRequetesDuGroupe $LesIndividusTT $LesIndividusTTDeLaPopDown] { set TT [lindex $LeTT 0] set r [lindex $LeTT 2] if {$r <= 0} {continue} set Stat [join [lrange $LeTT 1 end] "\t"] Espionne "Cluster $Cluster\tDown\tTissue Type\t\t\t\t$TT\t\t$Stat" lappend LeTexte "Cluster $Cluster\tDown\tTissue Type\t\t\t\t$TT\t\t$Stat" } foreach LeTT [LesZscoreDesRequetesDuGroupe $LesIndividusTT $LesIndividusTTDeLaPopUp] { set TT [lindex $LeTT 0] set r [lindex $LeTT 2] if {$r <= 0} {continue} set Stat [join [lrange $LeTT 1 end] "\t"] Espionne "Cluster $Cluster\tUp\tTissue Type\t\t\t\t$TT\t\t$Stat" lappend LeTexte "Cluster $Cluster\tUp\tTissue Type\t\t\t\t$TT\t\t$Stat" } ###Dev Stage##################### foreach LeDS [LesZscoreDesRequetesDuGroupe $LesIndividusDS $LesIndividusDSDeLaPop1] { set DS [lindex $LeDS 0] set r [lindex $LeDS 2] if {$r <= 0} {continue} set Stat [join [lrange $LeDS 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tDev Stage\t\t\t\t$DS\t\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tDev Stage\t\t\t\t$DS\t\t$Stat" } foreach LeDS [LesZscoreDesRequetesDuGroupe $LesIndividusDS $LesIndividusDSDeLaPopDown] { set DS [lindex $LeDS 0] set r [lindex $LeDS 2] if {$r <= 0} {continue} set Stat [join [lrange $LeDS 1 end] "\t"] Espionne "Cluster $Cluster\tDown\tDev Stage\t\t\t\t$DS\t\t$Stat" lappend LeTexte "Cluster $Cluster\tDown\tDev Stage\t\t\t\t$DS\t\t$Stat" } foreach LeDS [LesZscoreDesRequetesDuGroupe $LesIndividusDS $LesIndividusDSDeLaPopUp] { set DS [lindex $LeDS 0] set r [lindex $LeDS 2] if {$r <= 0} {continue} set Stat [join [lrange $LeDS 1 end] "\t"] Espionne "Cluster $Cluster\tUp\tDev Stage\t\t\t\t$DS\t\t$Stat" lappend LeTexte "Cluster $Cluster\tUp\tDev Stage\t\t\t\t$DS\t\t$Stat" } ###Domaines##################### foreach LeDO [LesZscoreDesRequetesDuGroupe $LesIndividusDO $LesIndividusDODeLaPop1] { set DO [lindex $LeDO 0] set r [lindex $LeDO 2] if {$r <= 0} {continue} set Def [set Tab(Dom,$DO,Def)] set Type [set Tab(Dom,$DO,Type)] set Stat [join [lrange $LeDO 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" } foreach LeDO [LesZscoreDesRequetesDuGroupe $LesIndividusDO $LesIndividusDODeLaPopDown] { set DO [lindex $LeDO 0] set r [lindex $LeDO 2] if {$r <= 0} {continue} set Def [set Tab(Dom,$DO,Def)] set Type [set Tab(Dom,$DO,Type)] set Stat [join [lrange $LeDO 1 end] "\t"] Espionne "Cluster $Cluster\tDown\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tDown\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" } foreach LeDO [LesZscoreDesRequetesDuGroupe $LesIndividusDO $LesIndividusDODeLaPopUp] { set DO [lindex $LeDO 0] set r [lindex $LeDO 2] if {$r <= 0} {continue} set Def [set Tab(Dom,$DO,Def)] set Type [set Tab(Dom,$DO,Type)] set Stat [join [lrange $LeDO 1 end] "\t"] Espionne "Cluster $Cluster\tUp\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tUp\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" } } Espionne "OK" Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc BilanDesordre {alignementTFA {RepRes ""}} { Wup "Permet de comptabiliser le nombre de sequences desordonnees dans l alignement hnraccess" set Sequence "" set Access "" set DebutAln 1 set FinAln 0 if {$RepRes==""} { set RepRes "/genomics/link/KoAnno/OnGoing/hnrAccess" } #Tab(LesAccess) - Liste des Access #Tab($PosAln,$Access) - Retourne a partir de la position dans l alignement (pos absolue) la pos dans Access #1 Position dans l alignement et dans la sequence set F [open "$alignementTFA"] while {[gets $F Ligne]>=0} { #>P43354 PileUp #------MPCVQAQYGSSPQGASPASQSYSY if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [string range $Ligne 0 0] == ">"} { if {$Sequence != ""} { #Espionne "$Sequence" set PosAln 0 set PosSeq 0 foreach L [split $Sequence ""] { incr PosAln if {$L == "-"} {continue} incr PosSeq set Tab($PosAln,$Access) $PosSeq #Espionne "$PosAln -- $PosSeq" if {! [info exists Tab($PosAln,NbSeq)]} { set Tab($PosAln,NbSeq) 1 } else { incr Tab($PosAln,NbSeq) } } #Espionne "Alignement Min 1 -- Max $PosAln -- $Access $PosSeq" set FinAln $PosAln set Tab($Access,Taille) $PosSeq set Sequence "" set Access "" } regsub -all {\>} $Ligne "" Ligne scan $Ligne "%s %s" Access Prog set Access [string toupper $Access] if {! [info exists Tab(LesAccess)]} { set Tab(LesAccess) $Access } else { lappend Tab(LesAccess) $Access } continue } if { $Sequence == ""} { set Sequence [string trim $Ligne] } else { append Sequence [string trim $Ligne] } } close $F if {$Sequence != ""} { set PosAln 0 set PosSeq 0 foreach L [split $Sequence ""] { incr PosAln if {$L == "-"} {continue} incr PosSeq set Tab($PosAln,$Access) $PosSeq if {! [info exists Tab($PosAln,NbSeq)]} { set Tab($PosAln,NbSeq) 1 } else { incr Tab($PosAln,NbSeq) } } set Sequence "" set Access "" } set NbAccessTotal [llength [set Tab(LesAccess)]] #1 Information par position #GlobPlot - Disorder #FoldIndex - pds #Ronn - DR #DisEMBL - LOOPS HOTLOOPS REM465 set LesMethodes [list GlobPlot FoldIndex Ronn DisEMBL] set Tab(GlobPlot,Quoi) "Disorder" set Tab(FoldIndex,Quoi) "pds" set Tab(Ronn,Quoi) "DR" set Tab(DisEMBL,Quoi) [list LOOPS HOTLOOPS REM465] #set Tab(LesAccess) "P16058" foreach Acc [set Tab(LesAccess)] { set RepAcc "$RepRes/${Acc}" #P51843_DisEmblResultat.html #P51843_FoldindexResultat.html #P51843_GlobPlotResultat.html #P51843_RonnResultat.html #Espionne "Access: $Access" foreach Method $LesMethodes { set MethodOk [BonneOrthographePour2 $Method] set Fichier "$RepAcc/${Acc}_${MethodOk}Resultat.html" #Espionne "Method: $Method" foreach Quoi [set Tab($Method,Quoi)] { #Espionne "$Quoi" set LesIs [Interroge${Method} $Fichier $Quoi] #Espionne "Interroge${Method} $Fichier $Quoi" foreach I $LesIs { set LesPosDF [Interroge${Method} $Fichier $Quoi $I] if {$LesPosDF==""} {continue} #Espionne "I: $I -- $LesPosDF" set Deb "" set Fin "" regsub {\-} $LesPosDF " " LesPosDF scan $LesPosDF "%d %d" Deb Fin if {$Deb==""|| $Fin=="" || ! [regexp {[0-9]} $Deb] || ! [regexp {[0-9]} $Fin]} {continue} for {set i $Deb} {$i<=$Fin} {incr i} { set Tab($Acc,$i,$Method,$Quoi) 1 #Espionne "$Acc $i $Method $Quoi" } } } } } set Resultat "" set Resultat "Pos" foreach Method $LesMethodes { foreach Quoi [set Tab($Method,Quoi)] { set METHOD "${Method}_${Quoi}" lappend Resultat $METHOD } } lappend Resultat "NbSeq" lappend Resultat "NbSeqTotal" Espionne "[join $Resultat "\t"]" set Method "" set Quoi "" set METHOD "" set Resultat "" for {set j $DebutAln} {$j<=$FinAln} {incr j} { lappend Resultat "$j" foreach Method $LesMethodes { foreach Quoi [set Tab($Method,Quoi)] { set METHOD "${Method}_${Quoi}" set TabRes($j,$METHOD) 0 foreach Acc [set Tab(LesAccess)] { if {! [info exists Tab($j,$Acc)]} {continue} set PosSeq [set Tab($j,$Acc)] #Espionne "1 - ${Method}_${Quoi} On passe et posequi de $j est $PosSeq pour $Acc" if {! [info exists Tab($Acc,$PosSeq,$Method,$Quoi)]} {continue} #Espionne "2 - On arrive " if {! [info exists TabRes($j,$METHOD)]} { set TabRes($j,$METHOD) 1 } else { incr TabRes($j,$METHOD) } } lappend Resultat [set TabRes($j,$METHOD)] } } lappend Resultat [set Tab($j,NbSeq)] lappend Resultat $NbAccessTotal Espionne "[join $Resultat "\t"]" set Resultat "" } return "" } proc BilanFinalPresenceAbsenceDansCategorie {Fichier FichierFinal} { #Fichier: /fiches/GeneOntology_GPO foreach Nom [ListeDesPABs] { set Vu($Nom) 1 } set ListeGO [list "GO:0006412" "GO:0006950" "GO:0008151" "GO:0016265" "GO:0007010" "GO:0007165" "GO:0008152"] foreach GO $ListeGO { foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set DD [lindex [split $Ligne "\t"] 0 ] if {[regexp -nocase $GO $Ligne] && [info exists Vu($DD)]} { #set Tab($DD,$GO) 1 if {![info exists Tab($DD,$GO)]} {set Tab($DD,$GO) 1} } } } #return [array get Tab] foreach Nom [ListeDesPABs] { set Ligne $Nom foreach GO $ListeGO { if {[info exists Tab($Nom,$GO)]} {set Ligne [concat $Ligne $Tab($Nom,$GO)]} else { set Ligne [concat $Ligne 0] } } set Ligne [join $Ligne "\t"] #lappend LeFinal $Ligne set InfosDD [InterrogeFichierFinal $Nom All] set InfosDD [join $InfosDD "\t"] lappend LeFinal "$Ligne\t$InfosDD" } SauveLesLignes $LeFinal dans $FichierFinal } proc BilanFullyMaskedDDSequences_PO {} { #################### Bilan les sequences du projet Gscope ICBP_TOPO qui ont ete entierement masquees ######### #################### cad non localisees sur le genome humain ou des séquences de vecteur pur################## #Selection des repertoires dans lesquelles sont presentes les fichiers d'information sur le masking set RepDDMaskedSeq "/home/lardenoi/These_Projets/ICBP_TOPO" set LesRep [list $RepDDMaskedSeq/20040324 $RepDDMaskedSeq/20040427_ICBP_D $RepDDMaskedSeq/20040429_ICBP_D $RepDDMaskedSeq/20040428_ICBP_U $RepDDMaskedSeq/20040512_TOPO $RepDDMaskedSeq/20040730_ICBP_D $RepDDMaskedSeq/20040730_ICBP_U $RepDDMaskedSeq/20040730_TOPO_D $RepDDMaskedSeq/20040730_TOPO_U $RepDDMaskedSeq/20040817_ICBP_D $RepDDMaskedSeq/20040817_ICBP_U $RepDDMaskedSeq/20040817_TOPO_D $RepDDMaskedSeq/20040817_TOPO_U $RepDDMaskedSeq/20040916_ICBP_D $RepDDMaskedSeq/20040916_ICBP_U $RepDDMaskedSeq/20040916_TOPO_D $RepDDMaskedSeq/20040916_TOPO_U] #set LesRep [list $RepDDMaskedSeq/MaskedDDSeq] #set FileInfos "$RepDDMaskedSeq/MaskedDDSeq/FullyMaskedSeq" #set LeTexte {} foreach Rep $LesRep { set Tab(Rep,$Rep,FullyMaskedSeq) 0 set Tab(FullyMaskedSeq) 0 } foreach Rep $LesRep { Espionne $Rep foreach File [glob -nocomplain "$Rep/*.tfa.masking.infos"] { #regsub -nocase {\.tfa.masking.infos} [file tail $File] "" SeqName #Espionne "SeqName: $SeqName" set F [open $File] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] ### Determination du nombre de DD sequences totalement masquees set TailleSeqInformative [lindex $LaLigne 2] if {$TailleSeqInformative == 0} { #Espionne "Fully masked, $File" incr Tab(Rep,$Rep,FullyMaskedSeq) incr Tab(FullyMaskedSeq) #lappend LeTexte $SeqName break } } close $F } } foreach Rep $LesRep { Espionne "Rep: $Rep" Espionne "FullyMaskedSeq: [set Tab(Rep,$Rep,FullyMaskedSeq)]" Espionne "TotalFullyMaskedSeq: [set Tab(FullyMaskedSeq)]" } #Espionne $LeTexte #Sauve [join $LeTexte "\n"] dans $FileInfos return } proc BilanGODeLaPop_Annaick {FichierPop FichierOUT} { ### Attention "FichierPop" a preciser selon etude #set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierGOProteo "[GODBDir]/GeneOntology_HUMAN" set LesIndividusGODeLaPop {} Espionne "Populations des clusters" # ListeDesPABs ou CreeListePourFichierAUneColonne FichierPop #set FichierPop "[RepertoireDuGenome]/ANALYSE/GO_45_MA/Les45DD" #set FichierPop "[RepertoireDuGenome]/ANALYSE/GO_59_Affy/Les59DD" #set FichierPop "[RepertoireDuGenome]/ANALYSE/GO_820/Les820" #set FichierPop "[RepertoireDuGenome]/ListeDesTargetsDifferentiellementExprimeesSansJumeaux" ### Procure #set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopExonhit.txt" #set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopIGBMC.txt" #set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopProteosys.txt" #set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopSSH.txt" #set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopTotale.txt" #set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopExonhitTN" # set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopExonhitHRHS" # set FichierPop "[RepertoireDuGenome]/ARTICLE/pop/PopExonhitBPHnonBPH" foreach Nom [CreeListePourFichierAUneColonne $FichierPop] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} ##### GO GO GO GO ######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} {lappend LesIndividusGODeLaPop $LIndividu} } Espionne "OK" if {[info exists TabDeJaVu]} {unset TabDeJaVu} Espionne "Lecture Du FichierGO du Proteome" #Gene Ontology du proteome humain##### set LesIndividusGODeLaPopTot {} foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} lappend LesIndividusGODeLaPopTot [lsort -unique $LIndividu] } Espionne "OK" Espionne "Calcul" set LeTexte {} ###GO GO GO GO################ foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGODeLaPop $LesIndividusGODeLaPopTot] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "$Type\t$Niv\t$GO\t$Def\t$Stat" } Espionne "OK" Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc BilanHDAParFamille {LesOrgCibles Famille LesGenORFs aBilan} { upvar $aBilan Bilan set Seuil 50 foreach {Gen ORF} $LesGenORFs { foreach Org $LesOrgCibles { set Blastp($ORF,$Org) 0 set Tblastn($ORF,$Org) 0 } set LesBlastp [QuestionDeScience $Gen "ret LesOrganismesOrthologues $ORF BlastP Presents Court"] foreach Org $LesBlastp { set Blastp($ORF,$Org) 1 } set LesTblastn [QuestionDeScience $Gen "ret LesOrganismesOrthologues $ORF TBlastN Presents Court"] foreach Org $LesTblastn { set Tblastn($ORF,$Org) 1 } foreach Org $LesOrgCibles { set Jaune($ORF,$Org) [expr [set Tblastn($ORF,$Org)] && ![set Blastp($ORF,$Org)]] } } set NbMembres [expr [llength $LesGenORFs]/2] foreach Org $LesOrgCibles { set TotP 0 set TotN 0 set TotJ 0 foreach {Gen ORF} $LesGenORFs { incr TotP [set Blastp($ORF,$Org)] incr TotN [set Tblastn($ORF,$Org)] incr TotJ [set Jaune($ORF,$Org)] } set TotP [expr round($TotP*100.0/$NbMembres)] set TotN [expr round($TotN*100.0/$NbMembres)] set TotJ [expr round($TotJ*100.0/$NbMembres)] set LeBilan [list $TotN $TotP $TotJ] set Bilan($Famille,$Org) $LeBilan } # set [QuestionDeScience $Gen "ret LesOrganismesOrthologues DbClustal Presents Court"] } proc BilanMasking {Nom} { set LeTexte {} set Fnuctfa "[RepertoireDuGenome]/nuctfa/$Nom" if {![file exists $Fnuctfa]} { return [list "$Nom\tNoSequence"] } set Taille [TailleDeLaSequenceDuFichierTFA $Fnuctfa] set nNIni [NombreDeBasesMasquees $Fnuctfa] set LesRepeats {} set Fnucm "[RepertoireDuGenome]/nucmask/$Nom.m" if {[file exists $Fnucm]} { set nNAvecMasking [NombreDeBasesMasquees $Fnucm ] set LesRepeatsDuMasking [LesRepeatsDeLEnteteDuTFA $Fnucm] set LesRepeats [concat $LesRepeats $LesRepeatsDuMasking] if {0 < [expr $nNAvecMasking - $nNIni]} { set PDuMasking "[format "%.1f" [expr (($nNAvecMasking - $nNIni) * 1.0 / $Taille) * 100]]" } else { set PDuMasking "0" } #Espionne "$Nom\tMasking\t$PDuMasking\t[join $LesRepeatsDuMasking "\t"]" lappend LeTexte "$Nom\tMasking\t$PDuMasking\t[join $LesRepeatsDuMasking "\t"]" } set Fnucrm "[RepertoireDuGenome]/nucmask/$Nom.rm" if {[file exists $Fnucrm]} { set nNAvecReMasking [NombreDeBasesMasquees $Fnucrm ] set LesRepeatsDuReMasking [LesRepeatsDeLEnteteDuTFA $Fnucrm] set LesRepeats [concat $LesRepeats $LesRepeatsDuReMasking] if {0 < [expr $nNAvecReMasking - $nNIni]} { set PDuReMasking "[format "%.1f" [expr (($nNAvecReMasking - $nNIni) * 1.0 / $Taille) * 100]]" } else { set PDuReMasking "0" } #Espionne "$Nom\tReMasking\t$PDuReMasking\t[join $LesRepeatsDuReMasking "\t"]" lappend LeTexte "$Nom\tReMasking\t$PDuReMasking\t[join $LesRepeatsDuReMasking "\t"]" } set Fnucmrm "[RepertoireDuGenome]/nucmask/$Nom.mrm" if {[file exists $Fnucmrm]} { if {0 < [expr $nNAvecReMasking + $nNAvecMasking - 2 * $nNIni]} { set PDuMRM "[format "%.1f" [expr (($nNAvecReMasking + $nNAvecMasking - 2 * $nNIni) * 1.0 / $Taille) * 100]]" } else { set PDuMRM "0" } #Espionne "$Nom\tMRM\t$PDuMRM\t[join $LesRepeats "\t"]" lappend LeTexte "$Nom\tMRM\t$PDuMRM\t[join $LesRepeats "\t"]" } if {$LeTexte != {}} {return $LeTexte} set Fnucmask "[RepertoireDuGenome]/nucmask/$Nom" if {[file exists $Fnucmask]} { set nNAvecMasking [NombreDeBasesMasquees $Fnucmask ] set LesRepeatsDuMasking [LesRepeatsDeLEnteteDuTFA $Fnucmask] set LesRepeats [concat $LesRepeats $LesRepeatsDuMasking] if {0 < [expr $nNAvecMasking - $nNIni]} { set PDuMasking "[format "%.1f" [expr (($nNAvecMasking - $nNIni) * 1.0 / $Taille) * 100]]" } else { set PDuMasking "0" } #Espionne "$Nom\tMasking\t$PDuMasking\t[join $LesRepeatsDuMasking "\t"]" lappend LeTexte "$Nom\tMasking\t$PDuMasking\t[join $LesRepeatsDuMasking "\t"]" } return $LeTexte } proc BilanOrthologie {ListeSeq} { #creation du repertoire Bilan if { ! [file exists "Bilan"]} { File mkdir Bilan } if { ! [file exists "[RepertoireDuGenome]/Bilan/Summary"]} { File mkdir [RepertoireDuGenome]/Bilan/Summary } #creation d'un tableau associatif avec le nom des especes accepter dans notre recherche d'ortholgues set Lspecies [LesLignesDuFichier [RepertoireDuGenome]/Especes.txt] #tableau associatif, code gsscope (PUZ..) associe au nom de la prot exemple TAF01 (GN dans le fichier prottembl) #parcours les sequences de la liste a traiter!!! foreach fichier $ListeSeq { set n [split $fichier "/"] set CodeProt [lindex $n [llength $n]-1] set LL [LaSequenceDesBanques "[RepertoireDuGenome]/protembl/$CodeProt"] DecortiqueLesLignesEMBL $LL ID AC DE GN #Espionne "File: $CodeProt & GN= $GN" set CodeProtAssT($CodeProt) $GN } #rangement de la liste dans l'ordre alphapbetique set key [array names CodeProtAssT] set key [lsort -dictionary $key] #PAS OUBLIER DE REMPLIR LA PREMIERE LIGNE AVEC LES SUs taf taf etc... set cmpt 1 set Torthologues(0,0) "species-SUs" foreach k $key { set Torthologues(0,$cmpt) $CodeProtAssT($k) incr cmpt } #remplir la premiere colonne set cmpt 1 foreach c $Lspecies { set Torthologues($cmpt,0) $c incr cmpt } foreach fichier $ListeSeq { set n [split $fichier "/"] set CodeProt [lindex $n [llength $n]-1] set Leslignes [LesLignesDuFichier $fichier] foreach Ligne $Leslignes { if {![regexp {^>PUZ.*} $Ligne] && [regexp {^>} $Ligne]} { regsub ">" $Ligne "" Ligne2 set ligneSpliter [split $Ligne2 " "] set specie [lindex $ligneSpliter 2] append specie " [lindex $ligneSpliter 3]" set ID [lindex $ligneSpliter 0] #Espionne "ID: $ID; specie: $specie" #si il y a deja un orthologue trouver pour cette espece if {[string trim $specie]==""} { continue } if {[info exists Torthologues([expr [lsearch -all -exact $Lspecies $specie]+1],[expr [lsearch -all -exact $key $CodeProt]+1])]} { set listete $Torthologues([expr [lsearch -all -exact $Lspecies $specie]+1],[expr [lsearch -all -exact $key $CodeProt]+1]) set tutu [lsearch -all -exact $listete $ID] #Espionne "tutu: $tutu et $Torthologues([expr [lsearch -all -exact $Lspecies $specie]+1],[expr [lsearch -all -exact $key $CodeProt]+1]) et ID:$ID" if {$tutu=="" || $tutu=="-1"} { set orthoMulti "$Torthologues([expr [lsearch -all -exact $Lspecies $specie]+1],[expr [lsearch -all -exact $key $CodeProt]+1]) - $ID" set Torthologues([expr [lsearch -all -exact $Lspecies $specie]+1],[expr [lsearch -all -exact $key $CodeProt]+1]) $orthoMulti } } else { #if {$ID=="Q8SQS4"} {Espionne "ID normal: $ID"} set Torthologues([expr [lsearch -all -exact $Lspecies $specie]+1],[expr [lsearch -all -exact $key $CodeProt]+1]) $ID } } } } for {set i 0} {$i<=[llength $Lspecies]} {incr i} { for {set y 0} {$y<=[llength $key]} {incr y} { if {[info exists Torthologues($i,$y)]} { append line "$Torthologues($i,$y)" if {$y<[llength $key]} {append line ";"} } else { if {$y<[llength $key]} { append line ";" } } } lappend fileOrtho $line set line "" } set fileResult "[RepertoireDuGenome]/Bilan/Summary/OrthologieBilan.csv" SauveLesLignes $fileOrtho dans $fileResult } proc BilanOrthologiePourTous {{directory ""}} { if {$directory == ""} { set directory [RepertoireDuGenome]/NewTfasDesCopains } set r [glob -directory $directory *] #recupere le fichier ¨¤ traiter dans tfadescopains.... et faire le traitement pour le fichier foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } lappend listSeq $fichier FinPasTouche $f } BilanOrthologie $listSeq } proc BilanPerteGainForOneFile {Quoi FileMacsims Ref} { #a readapter en regardant BilanPerteGainPfam {WithWhat} #Quoi: Pfam Block set LesLignesFic {} if {[info exists InfoQuoiRef]} { unset InfoQuoiRef } set LesQuoiRef {} set LesNamesMacsims [FromMacsims $FileMacsims ListOf Names] if {$Quoi=="Pfam"} {set LesQuoiInfoRef [FromMacsims $FileMacsims $Ref "ConcatPfam"]} if {$Quoi=="Block"} {set LesQuoiInfoRef [FromMacsims $FileMacsims $Ref "ConcatBlock"]} #Espionne "$LesQuoiInfoRef" set SeqDataRef [FromMacsims $FileMacsims $Ref "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataRef foreach InfoRef $LesQuoiInfoRef { if {$Quoi=="Pfam"} { scan $InfoRef "%s" QuoiRef set QuoiRef [string toupper $QuoiRef] regsub -nocase {^PROP_} $QuoiRef "" QuoiRef } if {$Quoi=="Block"} { set QuoiRef [lindex [split $InfoRef "/"] 0] set QuoiRef [string toupper $QuoiRef] } lappend LesQuoiRef $QuoiRef lappend InfoQuoiRef($QuoiRef) $InfoRef FstartFstop $InfoRef RFstart RFstop set AbsRef($RFstart) [PositionAbsolueDansAlignement $RFstart] set AbsRef($RFstop) [PositionAbsolueDansAlignement $RFstop] } set LesQuoiRef [lsort -unique $LesQuoiRef] foreach Name $LesNamesMacsims { set differe 0 if {[info exists InfoQuoiName]} { unset InfoQuoiName } if {[info exists DejaVu]} { unset DejaVu } if {$Quoi=="Pfam"} {set LesQuoiInfoName [FromMacsims $FileMacsims $Name "ConcatPfam"]} if {$Quoi=="Block"} {set LesQuoiInfoName [FromMacsims $FileMacsims $Name "ConcatBlock"]} set SeqDataName [FromMacsims $FileMacsims $Name "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataName #Espionne #Espionne "$Name" set LigneFic "$Name:" lappend LesLignesFic $LigneFic set LesQuoiInfoName [ListeSsElmtVide $LesQuoiInfoName] #EspionneL "$LesQuoiInfoName" #Espionne "LesGainsPertes:" if {$LesQuoiInfoName=={}} { set differe 1 foreach QuoiRef $LesQuoiRef { foreach InfoRef $InfoQuoiRef($QuoiRef) { FstartFstop $InfoRef RFstart RFstop set ResultPerdu [SitePerdu $Quoi $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] set LigneFic "$ResultPerdu" lappend LesLignesFic $LigneFic } } continue } foreach InfoName $LesQuoiInfoName { if {$Quoi=="Pfam"} { scan $InfoName "%s" QuoiName set QuoiName [string toupper $QuoiName] regsub -nocase {^PROP_} $QuoiName "" QuoiName } if {$Quoi=="Block"} { set QuoiName [lindex [split $InfoName "/"] 0] set QuoiName [string toupper $QuoiName] } lappend InfoQuoiName($QuoiName) $InfoName FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] if { ! [info exists InfoQuoiRef($QuoiName)]} { set differe 1 set ResultGagne [SiteGagne $Quoi $InfoName $Name $AbsFstart $AbsFstop $Fstart $Fstop] #Espionne "$ResultGagne" set LigneFic "$ResultGagne" lappend LesLignesFic $LigneFic } } foreach QuoiRef $LesQuoiRef { foreach InfoRef $InfoQuoiRef($QuoiRef) { FstartFstop $InfoRef RFstart RFstop if { ! [info exists InfoQuoiName($QuoiRef)]} { #if {[info exists DejaVu($QuoiRef)]} { continue } set differe 1 set ResultPerdu [SitePerdu $Quoi $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] #Espionne "$ResultPerdu" set LigneFic "$ResultPerdu" lappend LesLignesFic $LigneFic lappend DejaVu($QuoiRef) "$AbsRef($RFstart) $AbsRef($RFstop)" } else { set TousAbsents 1 foreach InfoName $InfoQuoiName($QuoiRef) { FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] #Espionne "$AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop" if {[Recouvrement $AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop]} { set TousAbsents 0 break } } if { $TousAbsents } { set differe 1 set ResultPerdu [SitePerdu $Quoi $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] #Espionne "$ResultPerdu" set LigneFic "$ResultPerdu" lappend LesLignesFic $LigneFic } } } } if {!$differe} { #Espionne " $Name rien gagne rien pris" set LigneFic " $Name rien gagne rien perdu" lappend LesLignesFic $LigneFic } } Espionne "" Espionne "Ref $Ref" EspionneL "$LesLignesFic" #SauveLesLignes $LesLignesFic dans "$RepertoireOut/$Box" } proc BilanPerteGainFromCible {} { #surement a readapter car fait apres BilanPerteGainPfam set File "/genomics/link/SpliRetMouse/CibleNaomi17092010/CibleFromNaomi_17092010.csv" foreach Ligne [LesLignesDuFichier $File] { foreach {IdOrg ClusterId} [split $Ligne ";"] { set FileMacsims "" if {$IdOrg == "SPR"} { set Org "Rat" set Science "SpliRetRat" set Repertoire "/genomics/link/SpliRetRat/comparepfam" } if {$IdOrg == "SPM"} { set Org "Mouse" set Science "SpliRetMouse" set Repertoire "/genomics/link/SpliRetMouse/comparepfam" } set ClusterId "cluster_$ClusterId" set Box [QuestionDeScience $Science "ret InterrogeBox $ClusterId Box"] if {$Box==""} {continue} set Ref [QuestionDeScience $Science "ret ExtraitInfo $Box Ref"] set RefPfam [QuestionDeScience $Science "ret ExtraitInfo $Box RefPfam"] set FileMacsims "/genomics/link/$Science/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "/genomics/link/$Science/macsimXml/$Box.orgord"} set LesPfamDeRefPfam [QuestionDeScience $Science "ret FromMacsims $FileMacsims $RefPfam ConcatPfam"] set LesId {} foreach PfamRef $LesPfamDeRefPfam { set MotsPfamRef [split $PfamRef "/"] set Pfam [lindex $MotsPfamRef 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id lappend LesId "$Id" } if {$RefPfam == $Box} {set RefPfam $Ref} lappend LesLignesResult "$ClusterId $Box" lappend LesLignesResult "Ref= $RefPfam: $LesId" foreach LigneBilan [LesLignesDuFichier "$Repertoire/$Box"] { regsub $Box $LigneBilan $Ref LigneBilan lappend LesLignesResult $LigneBilan if {![regexp {^ } $LigneBilan]} {continue} set LigneBilan [string trim $LigneBilan] set MotsLigneBilan [split $LigneBilan " "] set Acc [lindex $MotsLigneBilan 0] if {[regexp "rien gagne rien perdu" $LigneBilan]} { set Evmnt "aucun" set Pfam "" set AbsStart "" set AbsStop "" set RelStart "" set RelStop "" set LigneTab "$Box;$ClusterId;$Acc;$RefPfam;$Evmnt;;;" } else { set Evmnt [lindex $MotsLigneBilan 2] if {$Evmnt=="perdu"} {set Evmnt "perte"} if {$Evmnt=="gagne"} {set Evmnt "gain"} set Pfam [lindex $MotsLigneBilan 3] set Pfam [string trim $Pfam "\""] set index [expr [string last "\)" $LigneBilan] + 2] set SousLigneBilan [string range $LigneBilan $index end] set MotsSousLigneBilan [split $SousLigneBilan " "] set AbsStart [lindex $MotsSousLigneBilan 2] set AbsStop [lindex $MotsSousLigneBilan 3] set RelStart [lindex $MotsSousLigneBilan 6] set RelStop [lindex $MotsSousLigneBilan 7] set LigneTab "$Box;$ClusterId;$Acc;$RefPfam;$Evmnt;$Pfam;$AbsStart-$AbsStop;$RelStart-$RelStop" } lappend LesLignesTab $LigneTab } lappend LesLignesResult "" } } #SauveLesLignes $LesLignesResult dans "/genomics/link/SpliRetMouse/CibleNaomi17092010/BilanPerteGainOfCibleNaomi" #SauveLesLignes $LesLignesTab dans "/genomics/link/SpliRetMouse/CibleNaomi17092010/BilanPerteGainOfCibleNaomiInCsv.csv" } proc BilanPerteGainPfam {WithWhat} { #WithWhat est Block or Prosite #ne prends que les prosites pattern #fait bilan perte-gain en pfam et quand on conserve le pfam regarde si on a conserve tous les blocks/prosite du pfam #NB: lance une 1ere fois avec block puis avec Prosite => ecrit resultats dans le meme fichier sous repertoire BilanPerteGain # => ecrit dans BilanPerteGainFile les resultats sous forme de liste #NB: peut relancer en utilisant seulement une categorie de PFAM avec InterrogeBindingPfamDesFromGo (ou on decide quel categorie de pfam). Mais attention doit changer nom des fichiers sorties sinon ecrase. #detail proc: #pas de pfam dans la ref et le name #Name gagne pfam #Name gagne un nouveau pfam (ce pfam n existe pas dans la ref) #Name gagne un pfam existant (ce pfam existe dans la ref mais a une position differente) #ce pfam de la ref est absent dans le Name => perdu #sauf si ce Pfam de la ref est avant le debut ou apres la fin du name => tiens pas compte car peut rien dire #ce pfam de la ref est present dans le Name #sauf si ce pfam de la ref est au tout debut ou a la fin du name => tiens pas compte car peut rien dire #ce pfam de la ref est present dans le Name mais position differente => perdu #sauf si ce pfam de la ref est avant le debut ou apres la fin du name => tiens pas compte car peut rien dire #ce pfam de la ref est present dans le Name a la meme position => garde #sauf si ce Feature du pfam de la ref est elimine car le pfam du name est plus petit que le pfam de la ref et donc les Fe de la ref non contenus dans le pfam du name ne sont pas perdu => tiens pas compte #ce Feature du Pfam de la ref est absent dans le Name => perdu #sauf si ce Feature du Pfam de la ref est elimine car le debut ou la fin de la sequence se trouve dans ce Fe => tiens pas compte #ce Feature du Pfam de la ref est present dans le Name #ce Feature du Pfam de la ref est present dans le Name mais position differente => perdu #sauf si ce Feature du Pfam de la ref est elimine car le debut ou la fin de la sequence se trouve dans ce Fe => tiens pas compte #ce Feature du Pfam de la ref est present dans le Name a la meme position => garde #sauf si ce Feature du Pfam de la ref est elimine car ce Name (sa sequence) commence ou se finit dans le feature et ce feature commence plus tôt ou se finit plus tard dans la ref, donc il manquera un fragment (avant le debut ou apres la fin de la sequence du Name) => sait pas si vraiment manquant ou pb sequencage; peut rien conclure tiens pas compte (ex: SPR0429 en Cter et SPM1041 en Nter) #on perd un fragment dans ce Feature => perdu #sauf si ce Feature du Pfam de la ref est elimine car ce Name (sa sequence) commence ou se finit dans le feature et ce feature commence plus tôt ou se finit plus tard dans la ref, donc il manquera un fragment (avant le debut ou apres la fin de la sequence du Name) => sait pas si vraiment manquant ou pb sequencage; peut rien conclure tiens pas compte (ex: SPR0429 en Cter et SPM1041 en Nter) #on perd un fragment entre ce Feature garde et le suivant => perdu set RepertoireOut "[RepertoireDuGenome]/BilanPerteGain" set RepertoireOutFile "[RepertoireDuGenome]/BilanPerteGainFile" if {! [file exists $RepertoireOut]} {file mkdir $RepertoireOut} if {! [file exists $RepertoireOutFile]} {file mkdir $RepertoireOutFile} foreach Box [ListeDesPABs] { #if {[file exists "$RepertoireOut/$Box"]} {continue} #if {$Box != "SPR1881"} { continue } set Tag [ExtraitInfo $Box "Tag"] if {$Tag=="noalt"} {continue} set LesPfamInfoRef {}; set LesBlockInfoRef {}; set LesPrositeInfoRef {} set LesLignesFic {}; set LesPfamRef {} lappend LesLignesFic "With $WithWhat" if {[info exists InfoPfamRef]} { unset InfoPfamRef } if {[info exists AbsRef]} { unset AbsRef } if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set Org Mouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set Org Rat } else { set Org SpliRet } if {$Org=="SpliRet"} { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new"} } else { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} } if {![file exists $FileMacsims]} {continue} set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set LesNames [InterrogeNames $Cluster Name $Org] set RefPfam [ExtraitInfo $Box "RefPfam"] set LesPfamInfoRefBrut [FromMacsims $FileMacsims $RefPfam "ConcatPfam"] foreach PfamInfoRefBrut $LesPfamInfoRefBrut { if {[regexp "^ERROR" $PfamInfoRefBrut] || [regexp "^WARN" $PfamInfoRefBrut]} {continue} lappend LesPfamInfoRef $PfamInfoRefBrut } set SeqDataRef [FromMacsims $FileMacsims $RefPfam "SeqData"] set SeqDataRefSsGap [FromMacsims $FileMacsims $RefPfam "SeqDataSansGap"] set LongSeqRef [string length $SeqDataRefSsGap] set quisuis RefPf PositionAbsolueDansAlignement 1 $SeqDataRef if {$WithWhat=="Block"} { set LesBlockInfoRefBrut [FromMacsims $FileMacsims $RefPfam "ConcatBlock"] foreach BlockInfoRefBrut $LesBlockInfoRefBrut { if {[regexp "^ERROR" $BlockInfoRefBrut] || [regexp "^WARN" $BlockInfoRefBrut]} {continue} lappend LesBlockInfoRef $BlockInfoRefBrut } if {[info exists FeaturesDesPfamInfoRef]} { unset FeaturesDesPfamInfoRef } FeaturesDesPfam FeaturesDesPfamInfoRef $LesPfamInfoRef $LesBlockInfoRef } if {$WithWhat=="Prosite"} { set LesPrositeInfoRefBrut [FromMacsims $FileMacsims $RefPfam "ConcatProsite"] foreach PrositeInfoRefBrut $LesPrositeInfoRefBrut { if {[regexp "^ERROR" $PrositeInfoRefBrut] || [regexp "^WARN" $PrositeInfoRefBrut]} {continue} lassign [split $PrositeInfoRefBrut "/-"] PsId PsDeb PsFin scan $PsId "%s" PsId regsub -nocase {^PROP_} $PsId "" PsId set TypeProsite [TypeProsite $PsId] if {$TypeProsite == "MATRIX"} {continue} lappend LesPrositeInfoRef $PrositeInfoRefBrut } if {[info exists FeaturesDesPfamInfoRef]} { unset FeaturesDesPfamInfoRef } FeaturesDesPfam FeaturesDesPfamInfoRef $LesPfamInfoRef $LesPrositeInfoRef } # Espionne "" Espionne "$FileMacsims" # Espionne "$Box $Cluster" # Espionne "$LesNames" # Espionne "$RefPfam" # EspionneL "$LesPfamInfoRef" # Espionne "quisuis $quisuis" # Espionne "" foreach PfamInfoRef $LesPfamInfoRef { scan $PfamInfoRef "%s" PfamRef set PfamRef [string toupper $PfamRef] regsub -nocase {^PROP_} $PfamRef "" PfamRef lappend LesPfamRef $PfamRef lappend InfoPfamRef($PfamRef) $PfamInfoRef FstartFstop $PfamInfoRef RFstart RFstop set AbsRef($RFstart) [PositionAbsolueDansAlignement $RFstart] set AbsRef($RFstop) [PositionAbsolueDansAlignement $RFstop] } set LesPfamRef [ListeSansDoublon $LesPfamRef] foreach Name $LesNames { set differe 0; set differeFe 0 #if {$Name != "LA0ACA19YO10CM1"} { continue } if {![regexp "^LA" $Name] && ![regexp "^n3" $Name]} {continue} set LesPfamInfoName {}; set LesBlockInfoName {}; set LesPrositeInfoName {} if {[info exists InfoPfamName]} { unset InfoPfamName } if {$Name==$Ref} {set Name $Box} set LesPfamInfoNameBrut [FromMacsims $FileMacsims $Name "ConcatPfam"] foreach PfamInfoNameBrut $LesPfamInfoNameBrut { if {[regexp "^ERROR" $PfamInfoNameBrut] || [regexp "^WARN" $PfamInfoNameBrut]} {continue} lappend LesPfamInfoName $PfamInfoNameBrut } set SeqDataName [FromMacsims $FileMacsims $Name "SeqData"] set SeqDataNameSsGap [FromMacsims $FileMacsims $Name "SeqDataSansGap"] set LongSeqName [string length $SeqDataNameSsGap] set quisuis NamePf PositionAbsolueDansAlignement 1 $SeqDataName set AbsNameFin [PositionAbsolueDansAlignement $LongSeqName] set AbsNameDeb [PositionAbsolueDansAlignement 1] lappend LesLignesFic "-$Name:" set LesPfamInfoName [ListeSsElmtVide $LesPfamInfoName] if {$WithWhat=="Block"} { set LesBlockInfoNameBrut [FromMacsims $FileMacsims $Name "ConcatBlock"] foreach BlockInfoNameBrut $LesBlockInfoNameBrut { if {[regexp "^ERROR" $BlockInfoNameBrut] || [regexp "^WARN" $BlockInfoNameBrut]} {continue} lappend LesBlockInfoName $BlockInfoNameBrut } if {[info exists FeaturesDesPfamInfoName]} { unset FeaturesDesPfamInfoName } FeaturesDesPfam FeaturesDesPfamInfoName $LesPfamInfoName $LesBlockInfoName } if {$WithWhat=="Prosite"} { set LesPrositeInfoNameBrut [FromMacsims $FileMacsims $Name "ConcatProsite"] foreach PrositeInfoNameBrut $LesPrositeInfoNameBrut { if {[regexp "^ERROR" $PrositeInfoNameBrut] || [regexp "^WARN" $PrositeInfoNameBrut]} {continue} lassign [split $PrositeInfoNameBrut "/-"] PsId PsDeb PsFin scan $PsId "%s" PsId regsub -nocase {^PROP_} $PsId "" PsId set TypeProsite [TypeProsite $PsId] if {$TypeProsite == "MATRIX"} {continue} lappend LesPrositeInfoName $PrositeInfoNameBrut } if {[info exists FeaturesDesPfamInfoName]} { unset FeaturesDesPfamInfoName } FeaturesDesPfam FeaturesDesPfamInfoName $LesPfamInfoName $LesPrositeInfoName } # Espionne "" # Espionne "$Name ($Box)" # Espionne "$LesPfamInfoName" # Espionne "$LesBlockInfoName" # Espionne "quisuis $quisuis" # Espionne "LesGainsPertes:" if {$LesPfamInfoRef=={} && $LesPfamInfoName=={}} { #pas de Pfam dans la ref et le name if {$WithWhat=="Block"} {lappend LesLignesFic "$Name pas de pfam"} continue } foreach InfoName $LesPfamInfoName { #Name gagne Pfam scan $InfoName "%s" PfamName set PfamName [string toupper $PfamName] regsub -nocase {^PROP_} $PfamName "" PfamName lappend InfoPfamName($PfamName) $InfoName FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] #on ne prends en compte que les pfam binding set Des [InterrogeBindingPfamDesFromGo $PfamName Des] if {$Des==""} { continue } if { ! [info exists InfoPfamRef($PfamName)]} { #Name gagne un nouveau Pfam (ce Pfam n existe pas dans la ref) set differe 1 set ResultGagne [SiteGagne "Pfam" $InfoName $Name $AbsFstart $AbsFstop $Fstart $Fstop] # Espionne "ResultGagne1 $ResultGagne" lappend GagnePfam($Box) $ResultGagne if {$WithWhat=="Block"} {lappend LesLignesFic "$ResultGagne"} } else { #Name gagne un Pfam existant (ce Pfam existe dans la ref mais a une position differente) set JeSuisSeul 1 foreach PfamInfoRef $InfoPfamRef($PfamName) { FstartFstop $PfamInfoRef RFstart RFstop #ne prends pas en compte un pfam comme gagne dans les 2 cas suivants #En Nter: quand le PF01 est situe au debut de la ref et quand le PF01 du name est en amont de PF01 dans la ref(ex:SPM0005) #En Cter: quand le PF01 est situe a la fin de la ref et quand le PF01 du name est en aval de PF01 dans la ref if {$RFstart<=2 && $AbsFstop < $AbsRef($RFstart)} {set JeSuisSeul 0; break} if {$RFstop == $LongSeqRef && $AbsRef($RFstart) < $AbsFstart } {set JeSuisSeul 0; break} if {[Recouvrement $AbsFstart $AbsFstop $AbsRef($RFstart) $AbsRef($RFstop)]} { set JeSuisSeul 0 break } } if {$JeSuisSeul} { set ResultGagne [SiteGagne "Pfam" $InfoName $Name $AbsFstart $AbsFstop $Fstart $Fstop] # Espionne "ResultGagne2 $ResultGagne" lappend GagnePfam($Box) $ResultGagne if {$WithWhat=="Block"} {lappend LesLignesFic "$ResultGagne"} } } } foreach PfamRef $LesPfamRef { #on ne prends en compte que les pfam binding set Des [InterrogeBindingPfamDesFromGo $PfamRef Des] if {$Des==""} { continue } foreach PfamInfoRef $InfoPfamRef($PfamRef) { # Espionne "PfamInfoRef $PfamInfoRef" if {[info exists InfoFeatureRef ]} { unset InfoFeatureRef } if {[info exists InfoFeatureName]} { unset InfoFeatureName } if {[info exists AbsFeRef]} { unset AbsFeRef } if {[info exists AbsFeName]} { unset AbsFeName } set PosRelNameRFstart ""; set PosRelNameRFstop "" FstartFstop $PfamInfoRef RFstart RFstop set PosRelNameRFstart [PositionRelativeDansAlignement $AbsRef($RFstart)] set PosRelNameRFstop [PositionRelativeDansAlignement $AbsRef($RFstop)] if { ! [info exists InfoPfamName($PfamRef)]} { # Espionne "ce Pfam de la ref est absent dans le Name => perdu" if {($PosRelNameRFstart == 0 && $PosRelNameRFstop == 0) || ($PosRelNameRFstart == $LongSeqName && $PosRelNameRFstop == $LongSeqName)} { # Espionne "ce Pfam de la ref est avant le debut ou apres la fin du name => tiens pas compte car peut rien dire" set ResultElimine [SiteElimine "Pfam" $PfamInfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) $PosRelNameRFstart $PosRelNameRFstop] # Espionne "ResultElimine $ResultElimine" if {$WithWhat=="Block"} {lappend LesLignesFic "$ResultElimine"} continue } set differe 1 set ResultPerdu [SitePerdu "Pfam" $PfamInfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) $PosRelNameRFstart $PosRelNameRFstop] # Espionne "ResultPerdu2 $ResultPerdu" if {$WithWhat=="Block"} {lappend LesLignesFic "$ResultPerdu"} lappend PerdPfam($Box) $ResultPerdu } else { # Espionne "ce Pfam de la ref est present dans le Name" set TousAbsents 1 ; set DebOuFin 0 foreach InfoName $InfoPfamName($PfamRef) { FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] # Espionne "Recouvrement $AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop" if {[Recouvrement $AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop]} { set PfamInfoGarde $InfoName set TousAbsents 0 if {$Fstart==1 || $Fstop == $LongSeqName} { set DebOuFin 1; break } break } } if { $DebOuFin } { # Espionne "ce Pfam de la ref est au tout debut ou a la fin du name => tiens pas compte car peut rien dire" FstartFstop $PfamInfoGarde Fstart Fstop set ResultElimine [SiteElimine "Pfam" $PfamInfoGarde $Name [PositionAbsolueDansAlignement $Fstart] [PositionAbsolueDansAlignement $Fstop] $Fstart $Fstop] if {$WithWhat=="Block"} {lappend LesLignesFic "$ResultElimine"} # Espionne "ResultElimine $ResultElimine" continue } if { $TousAbsents } { # Espionne "ce Pfam de la ref est absent dans le Name mais position differente => perdu" if {($PosRelNameRFstart == 0 && $PosRelNameRFstop == 0) || ($PosRelNameRFstart == $LongSeqName && $PosRelNameRFstop == $LongSeqName)} { #ce Pfam de la ref est avant le debut ou apres la fin du name => tiens pas compte car peut rien dire set ResultElimine [SiteElimine "Pfam" $PfamInfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) $PosRelNameRFstart $PosRelNameRFstop] if {$WithWhat=="Block"} {lappend LesLignesFic "$ResultElimine"} # Espionne "$ResultElimine" continue } set differe 1 set ResultPerdu [SitePerdu "Pfam" $PfamInfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) $PosRelNameRFstart $PosRelNameRFstop] # Espionne "ResultPerdu3 $ResultPerdu" if {$WithWhat=="Block"} {lappend LesLignesFic "$ResultPerdu"} lappend PerdPfam($Box) $ResultPerdu } if { !$TousAbsents } { set differeFeDsPf 0 # Espionne "ce Pfam de la ref est present dans le Name a la meme position => garde" #le recupere dans $PfamInfoGarde set LesLignesFicProv {}; set Precedent "" if {[info exists FeSuivantDsRef]} { unset FeSuivantDsRef } if {[info exists CorresFeRefName]} { unset CorresFeRefName } FstartFstop $PfamInfoGarde Fstart Fstop set PosAbsFstart [PositionAbsolueDansAlignement $Fstart] set PosAbsFstop [PositionAbsolueDansAlignement $Fstop] set ResultGarde [SiteGarde "Pfam" $PfamInfoGarde $Name $PosAbsFstart $PosAbsFstop $Fstart $Fstop] scan $PfamInfoGarde "%s" PfamNameGarde set PfamNameGarde [string toupper $PfamNameGarde] regsub -nocase {^PROP_} $PfamNameGarde "" PfamNameGarde set PfamInfoGardeComp "$PfamNameGarde/$PosAbsFstart-$PosAbsFstop/$Fstart-$Fstop" PositionAbsolueDansAlignement 1 $SeqDataRef set quisuis RefFe set LesFeDuPfRef $FeaturesDesPfamInfoRef($PfamInfoRef) set LePremier 1 foreach FeDuPfRef $LesFeDuPfRef { lassign [split $FeDuPfRef " "] FeRef FeRefDeb FeRefFin lappend InfoFeatureRef($FeRef) $FeDuPfRef set AbsFeRef($FeRefDeb) [PositionAbsolueDansAlignement $FeRefDeb] set AbsFeRef($FeRefFin) [PositionAbsolueDansAlignement $FeRefFin] if {$WithWhat=="Block"} { if {$LePremier} {set LePremier 0; set Precedent $FeDuPfRef; continue} set FeSuivantDsRef($Precedent) $FeDuPfRef set Precedent $FeDuPfRef } } if {$WithWhat=="Block" && $Precedent !=""} { set FeSuivantDsRef($Precedent) "" } PositionAbsolueDansAlignement 1 $SeqDataName set quisuis NameFe set LesFeDuPfName $FeaturesDesPfamInfoName($PfamInfoGarde) foreach FeDuPfName $LesFeDuPfName { lassign [split $FeDuPfName " "] FeName FeNameDeb FeNameFin lappend InfoFeatureName($FeName) $FeDuPfName set AbsFeName($FeNameDeb) [PositionAbsolueDansAlignement $FeNameDeb] set AbsFeName($FeNameFin) [PositionAbsolueDansAlignement $FeNameFin] } foreach FeDuPfRef $LesFeDuPfRef { lassign [split $FeDuPfRef " "] FeRef FeRefDeb FeRefFin # Espionne "FeDuPfRef $FeDuPfRef" #ce Feature du Pfam de la ref est elimine car le Pfam du name est plus petit que le Pfam de la ref et donc les Fe de la ref non contenus dans le Pfam du name ne sont pas perdu => tiens pas compte if { ! [Recouvrement $AbsFeRef($FeRefDeb) $AbsFeRef($FeRefFin) $PosAbsFstart $PosAbsFstop]} {continue} if { ! [info exists InfoFeatureName($FeRef)]} { #ce Feature du Pfam de la ref est elimine car le debut ou la fin de la sequence se trouve dans ce Fe => tiens pas compte if { $AbsFeRef($FeRefDeb) <= $AbsNameFin && $AbsNameFin < $AbsFeRef($FeRefFin)} {continue} if { $AbsFeRef($FeRefDeb) <= $AbsNameDeb && $AbsNameDeb < $AbsFeRef($FeRefFin)} {continue} # Espionne "ce Feature du Pfam de la ref est absent dans le Name => perdu" set differe 1; set differeFe 1; set differeFeDsPf 1 set ResultFeaturePerdu [SitePerdu $WithWhat $FeRef $Name $AbsFeRef($FeRefDeb) $AbsFeRef($FeRefFin) [PositionRelativeDansAlignement $AbsFeRef($FeRefDeb)] [PositionRelativeDansAlignement $AbsFeRef($FeRefFin)] $PfamInfoGardeComp] # Espionne "ResultFeaturePerdu $ResultFeaturePerdu" lappend LesLignesFicProv $ResultFeaturePerdu lappend PerdFeDsPfam($Box) $ResultFeaturePerdu } else { # Espionne "ce Feature du Pfam de la ref est present dans le Name" set TousAbsentsFe 1 foreach FeDuPfName $InfoFeatureName($FeRef) { lassign [split $FeDuPfName " "] FeName FeNameDeb FeNameFin if {[Recouvrement $AbsFeRef($FeRefDeb) $AbsFeRef($FeRefFin) $AbsFeName($FeNameDeb) $AbsFeName($FeNameFin)]} { set FeDuPfNameGarde $FeDuPfName set CorresFeRefName($FeDuPfRef) $FeDuPfName set TousAbsentsFe 0 break } } if { $TousAbsentsFe } { #ce Feature du Pfam de la ref est elimine car le debut ou la fin de la sequence se trouve dans ce Fe => tiens pas compte if { $AbsFeRef($FeRefDeb) <= $AbsNameFin && $AbsNameFin < $AbsFeRef($FeRefFin)} {continue} if { $AbsFeRef($FeRefDeb) <= $AbsNameDeb && $AbsNameDeb < $AbsFeRef($FeRefFin)} {continue} # Espionne "ce Feature du Pfam de la ref est present dans le Name mais position differente => perdu" set differe 1; set differeFe 1; set differeFeDsPf 1 set ResultFeaturePerdu2 [SitePerdu $WithWhat $FeRef $Name $AbsFeRef($FeRefDeb) $AbsFeRef($FeRefFin) [PositionRelativeDansAlignement $AbsFeRef($FeRefDeb)] [PositionRelativeDansAlignement $AbsFeRef($FeRefFin)] $PfamInfoGardeComp] # Espionne "ResultFeaturePerdu2 $ResultFeaturePerdu2" lappend LesLignesFicProv $ResultFeaturePerdu2 lappend PerdFeDsPfam($Box) $ResultFeaturePerdu2 } if { ! $TousAbsentsFe } { # Espionne "ce Feature du Pfam de la ref est present dans le Name a la meme position => garde" lassign [split $FeDuPfNameGarde " "] FeName FeNameDeb FeNameFin set LongFeDuPfRef [expr ($FeRefFin - $FeRefDeb) + 1] set LongFeDuPfName [expr ($FeNameFin - $FeNameDeb) + 1] set DiffLong [expr $LongFeDuPfRef-$LongFeDuPfName] #ce Feature du Pfam de la ref est elimine car ce Name (sa sequence) commence ou se finit dans le feature et ce feature commence plus tôt ou se finit plus tard dans la ref, donc il manquera un fragment (avant le debut ou apres la fin de la sequence du Name) => sait pas si vraiment manquant ou pb sequencage; peut rien conclure tiens pas compte (ex: SPR0429 en Cter et SPM1041 en Nter) if {$FeNameDeb==1 && $AbsFeRef($FeRefDeb)<$AbsFeName($FeNameDeb)} {continue} if {$FeNameFin==$LongSeqName && $AbsFeRef($FeRefFin)>$AbsFeName($FeNameFin)} {continue} if {$LongFeDuPfRef > $LongFeDuPfName +3} { # Espionne "on perd un fragement dans ce Feature => perdu" set differe 1; set differeFe 1; set differeFeDsPf 1 set ResultFragmentPerdu [SitePerdu "Fragment" "Fragment ($DiffLong) dans $FeName" $Name $AbsFeName($FeNameDeb) $AbsFeName($FeNameFin) $FeNameDeb $FeNameFin $PfamInfoGardeComp] # Espionne "$ResultFragmentPerdu" lappend LesLignesFicProv $ResultFragmentPerdu lappend PerdFragmentDsFeDsPfam($Box) $ResultFragmentPerdu } } } } if {$differeFeDsPf} { #lappend LesLignesFic $ResultGarde LConcat LesLignesFic $LesLignesFicProv } if {$WithWhat=="Block"} { #Espionne "regarde trous entre 2 blocks" foreach FeDuPfRef $LesFeDuPfRef { # Espionne "FeDuPfRef $FeDuPfRef" lassign [split $FeDuPfRef " "] Bidon FeDuPfRefDeb FeDuPfRefFin if {![info exists CorresFeRefName($FeDuPfRef)]} {break} set FeDuPfNameCorres $CorresFeRefName($FeDuPfRef) lassign [split $FeDuPfNameCorres " "] FeDuPfNameCorresId FeDuPfNameCorresDeb FeDuPfNameCorresFin set FeSuivantDuPfRef $FeSuivantDsRef($FeDuPfRef) if {$FeSuivantDuPfRef== ""} {break} lassign [split $FeSuivantDuPfRef " "] Bidon FeSuivantDuPfRefDeb FeSuivantDuPfRefFin if {![info exists CorresFeRefName($FeSuivantDuPfRef)]} {break} set FeSuivantDuPfNameCorres $CorresFeRefName($FeSuivantDuPfRef) lassign [split $FeSuivantDuPfNameCorres " "] FeSuivantDuPfNameCorresId FeSuivantDuPfNameCorresDeb FeSuivantDuPfNameCorresFin set DistanceEntreLesPfRef [expr ($AbsFeRef($FeSuivantDuPfRefDeb)-$AbsFeRef($FeDuPfRefFin))-1] set DistanceEntreLesPfName [expr ($AbsFeName($FeSuivantDuPfNameCorresDeb)-$AbsFeName($FeDuPfNameCorresFin))-1] set DiffDistance [expr $DistanceEntreLesPfName - $DistanceEntreLesPfRef] if {$DistanceEntreLesPfName > $DistanceEntreLesPfRef +3} { set differe 1; set differeFe 1; set differeFeDsPf 1 #on perd un fragment entre ce Feature garde et le suivant => perdu set ResultFragmentPerdu [SitePerdu "Fragment" "Fragment ($DiffDistance) entre $FeDuPfNameCorresId $FeSuivantDuPfNameCorresId" $Name $AbsFeName($FeDuPfNameCorresFin) $AbsFeName($FeSuivantDuPfNameCorresDeb) $FeDuPfNameCorresFin $FeSuivantDuPfNameCorresDeb $PfamInfoGardeComp] lappend LesLignesFic $ResultFragmentPerdu lappend PerdFragmentEntreFeDsPfam($Box) $ResultFragmentPerdu } } } } } } } if {!$differe && $WithWhat=="Block"} { lappend LesLignesFic "$Name rien d'important" } if {!$differeFe && $WithWhat=="Prosite"} { lappend LesLignesFic "$Name rien d'important" } } if {$WithWhat=="Block"} { SauveLesLignes $LesLignesFic dans "$RepertoireOut/$Box" } if {$WithWhat=="Prosite"} { AppendAuFichier "$RepertoireOut/$Box" [join $LesLignesFic "\n"] } } foreach Clef [lsort [array names GagnePfam]] { lappend LesLignesGagnePfam "$Clef:" set LesValeurs [ListeSansDoublon $GagnePfam($Clef)] foreach Valeur $LesValeurs { lappend LesLignesGagnePfam $Valeur } } lappend LesLignesGagnePfam "nbtotal : [array size GagnePfam]" if {$WithWhat=="Block"} { SauveLesLignes $LesLignesGagnePfam dans "$RepertoireOutFile/${Org}GagnePfam" #NucAcBind } foreach Clef [lsort [array names PerdPfam]] { lappend LesLignesPerdPfam "$Clef:" set LesValeurs [ListeSansDoublon $PerdPfam($Clef)] foreach Valeur $LesValeurs { lappend LesLignesPerdPfam $Valeur } } lappend LesLignesPerdPfam "nbtotal : [array size PerdPfam]" if {$WithWhat=="Block"} { SauveLesLignes $LesLignesPerdPfam dans "$RepertoireOutFile/${Org}PerdPfam" } foreach Clef [lsort [array names PerdFeDsPfam]] { lappend LesLignesPerdFeDsPfam "$Clef:" set LesValeurs [ListeSansDoublon $PerdFeDsPfam($Clef)] foreach Valeur $LesValeurs { lappend LesLignesPerdFeDsPfam $Valeur } } lappend LesLignesPerdFeDsPfam "nbtotal : [array size PerdFeDsPfam]" SauveLesLignes $LesLignesPerdFeDsPfam dans "$RepertoireOutFile/${Org}Perd${WithWhat}DsPfam" foreach Clef [lsort [array names PerdFragmentEntreFeDsPfam]] { lappend LesLignesPerdFragmentEntreFeDsPfam "$Clef:" set LesValeurs [ListeSansDoublon $PerdFragmentEntreFeDsPfam($Clef)] foreach Valeur $LesValeurs { lappend LesLignesPerdFragmentEntreFeDsPfam $Valeur } } lappend LesLignesPerdFragmentEntreFeDsPfam "nbtotal : [array size PerdFragmentEntreFeDsPfam]" if {$WithWhat=="Block"} { SauveLesLignes $LesLignesPerdFragmentEntreFeDsPfam dans "$RepertoireOutFile/${Org}PerdFragmentEntre${WithWhat}DsPfam" } foreach Clef [lsort [array names PerdFragmentDsFeDsPfam]] { lappend LesLignesPerdFragmentDsFeDsPfam "$Clef:" set LesValeurs [ListeSansDoublon $PerdFragmentDsFeDsPfam($Clef)] foreach Valeur $LesValeurs { lappend LesLignesPerdFragmentDsFeDsPfam $Valeur } } lappend LesLignesPerdFragmentDsFeDsPfam "nbtotal : [array size PerdFragmentDsFeDsPfam]" SauveLesLignes $LesLignesPerdFragmentDsFeDsPfam dans "$RepertoireOutFile/${Org}PerdFragmentDs${WithWhat}DsPfam" } proc BilanPerteGainPfamAideParentheses {} { foreach Box [ListeDesPABs] { foreach Name $LesNames { foreach PfamRef $LesPfamRef { foreach PfamInfoRef $InfoPfamRef($PfamRef) { if { ! [info exists InfoPfamName($PfamRef)]} { # Espionne "ce Pfam de la ref est absent dans le Name => perdu" } else { # Espionne "ce Pfam de la ref est present dans le Name" if { $DebOuFin } { # Espionne "ce Pfam de la ref est au tout debut ou a la fin du name => tiens pas compte car peut rien dire" } if { $TousAbsents } { # Espionne "ce Pfam de la ref est absent dans le Name mais position differente => perdu" } if { !$TousAbsents } { # Espionne "ce Pfam de la ref est present dans le Name a la meme position => garde" foreach FeDuPfRef $LesFeDuPfRef { if { ! [info exists InfoFeatureName($FeRef)]} { # Espionne "ce Feature du Pfam de la ref est absent dans le Name => perdu" } else { # Espionne "ce Feature du Pfam de la ref est present dans le Name" if { $TousAbsentsFe } { # Espionne "ce Feature du Pfam de la ref est present dans le Name mais position differente => perdu" set differe 1; set differeBlock 1 } if { ! $TousAbsentsFe } { # Espionne "ce Feature du Pfam de la ref est present dans le Name a la meme position => garde" } } } if {$differeBlock} { #lappend LesLignesFic $ResultGarde LConcat LesLignesFic $LesLignesFicProv } if {$WithWhat=="Block"} { #Espionne "regarde trous entre 2 blocks" } } #Fin de if { !$TousAbsents } } #Fin de else } #Fin de foreach PfamInfoRef $InfoPfamRef($PfamRef) } #Fin de foreach PfamRef $LesPfamRef if {!$differe && $WithWhat=="Block"} { lappend LesLignesFic "$Name rien d'important" } if {!$differeBlock && $WithWhat=="Prosite"} { lappend LesLignesFic "$Name rien d'important" } } #Fin de foreach Name $LesNames if {$WithWhat=="Block"} { SauveLesLignes $LesLignesFic dans "$RepertoireOut/$Box" } if {$WithWhat=="Prosite"} { AppendAuFichier "$RepertoireOut/$Box" [join $LesLignesFic "\n"] } } #Fin de foreach Box [ListeDesPABs] } proc BilanPfamFrom1500 {} { set i 0 set File "/genomics/link/SpliRetMouse/BindingPfam/BindingPfamFromDes/PfamDesFrom1500.txt" foreach Ligne [LesLignesDuFichier $File] { set Des [lindex [split $Ligne "\t"] 2] if {[regexp "binding" $Des]} { #&& [regexp "DNA" $Des] Espionne "$Ligne" incr i } } Espionne "$i" #71 BindingPfam sur 964 dans mes 1500 sequences (g17/SpliRetMouse2008 + g17/SpliRetRat2008) #88 BindingPfam sur 1123 dans mes 1585 clusters (g20/SpliRetMouse2009 + g20/SpliRetRat2009) #276 BindingPfam sur 3674 dans mes 15765 clusters (g23/SpliRetMouse + g23/SpliRetRat) } proc BilanPfamFrom1500InGo {} { set LesPfam [InterrogePfamDesFrom1500 ListOf Pfam] #964 PFAM set aGo 0 foreach Pfam $LesPfam { #Espionne "" #Espionne "$Pfam" set Go [GoGetFromPfam $Pfam GOacc] #Espionne "LesGo: $Go" set LesResults {} if {$Go!=""} { incr aGo set LesGo [split $Go " "] foreach GoSeule $LesGo { set MainGo [GoChildren GO:0003674 acc] set allParents [GoGetFromGo $GoSeule GOacc "" "" Up] set ListResult [ListsIntersection $MainGo $allParents] #Espionne "$GoSeule: $ListResult" LConcat LesResults $ListResult } } set LesResults [ListeSansDoublon $LesResults] #Espionne "LesResults $LesResults" foreach Result $LesResults { if {[info exists DejaVu($Result)]} { incr DejaVu($Result) } else { set DejaVu($Result) 1 } } } #489 PFAM ont un GO Espionne "nbPfamAcGo $aGo" foreach Clef [array names DejaVu] { Espionne "$Clef [GoGetFromGo $Clef GOname " " " " Here]\t$DejaVu($Clef)" } } proc BilanProt {pdbid {aTInf ""}} { global organism # compatibilite threading if {$aTInf ne ""} { array set TInf $aTInf } else { global TInf } if {! [info exists $organism]} { file mkdir $organism } else { file delete {*}[glob [file join $organism *]] } set fout [open [file join $organism $pdbid] w] puts $fout "
"
    
    set Lcanal [list "$fout" stdout]
    foreach cnl $Lcanal {
	puts $cnl "\n-----------------------"
	puts $cnl "| PDB : $pdbid"
	puts $cnl "-----------------------"
	foreach c $TInf($pdbid,LChains) {
	    if {! $TInf($pdbid,$c,ok)} {continue}
	    
	    puts $cnl "Chain : $c"
	    set spdn [set TInf($pdbid,$c,seqpdnal)]
	    set sunp [set TInf($pdbid,$c,sequnpal)]
	    set sres [set TInf($pdbid,$c,seqresal)]
	    set spdb [set TInf($pdbid,$c,seqpdbal)]
	    set ssec [set TInf($pdbid,$c,sSS)]
	    set srsa [set TInf($pdbid,$c,seqrsa)]
	    set snac [set TInf($pdbid,$c,seqnac)]
	    # plus long est seq traduite
	    set lgt [string length $spdn]
	    for {set i 0} {$i < $lgt} {incr i 50} {
		puts $cnl [format %4d [expr {$i+1}]]
		puts $cnl "strd [string range $spdn $i $i+49]"
		puts $cnl "sunp [string range $sunp $i $i+49]"
		puts $cnl "sres [string range $sres $i $i+49]"
		puts $cnl "spdb [string range $spdb $i $i+49]"
		puts $cnl "ssec [string range $ssec $i $i+49]"
		puts $cnl "srsa [string range $srsa $i $i+49]"
		puts $cnl "snac [string range $snac $i $i+49]"
		puts $cnl ""
	    }
	}
    }
    puts $fout "
" close $fout return } proc BindBulle {} { global Bulle bind Bulle { set Bulle(set) 0 set Bulle(first) 1 set Bulle(id) [after 500 {balloon %W $Bulle(%W) %X %Y}] } bind Bulle
" incr ic } return } proc DrawTreeAllGO {KTree {LesGO ""} {OpenOuClose Close} {CheminIni ""}} { global TabAiJeVuCetteBranche set TousLesGO [GODB LesGO] if {$LesGO == ""} { set LesGO $TousLesGO set LesTypes [GODB LesTypes] } else { foreach GO [TousLesAncetresGODesGO $LesGO] {lappend LesGO $GO} set LesTypes [LesTypesDesGO $LesGO] foreach GOAbsent [LaDifferenceDeL1AvecL2 $TousLesGO moins $LesGO] {set TabDesExceptions($GOAbsent) 0} } foreach Type [GODB LesTypes] { set Chemin "$CheminIni/$Type" if {[info exists TabAiJeVuCetteBranche($KTree,$Chemin)]} {Tree:delitem $KTree $Chemin} } ImageDirectory idir ImageFile ifile set NiveauPremierGO 0 foreach Type $LesTypes { set Chemin "$CheminIni/$Type" set TabAiJeVuCetteBranche($KTree,$Chemin) 1 Tree:newitem $KTree $Chemin -image idir TreeOpenOuClose $KTree $Chemin $OpenOuClose foreach GO [GODB Type $Type Niveau $NiveauPremierGO LesGO] { if {[info exists TabDesExceptions($GO)]} {continue} PlaceNoeudDansTreeAllGO $KTree $Type $GO $Chemin "" TabDesExceptions $OpenOuClose } } if {[info exists TabTmp]} {unset TabTmp} update } proc DrawTreeOneGO {KTree {GO ""}} { global TabAiJeVuCetteBranche if {$GO == ""} {set GO [lindex [GODB Type [lindex [GODB LesTypes] 0] Niveau 0 LesGO] 0]} set LesTypes [GODB GO $GO LesTypes] set LesGO {} foreach Type $LesTypes { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {[info exists TabTmp($GO)]} {continue} set TabTmp($GO) 1 lappend LesGO $GO foreach GOSynonyme [GODB Type $Type GO $GO LesSynonymes] { if {[info exists TabTmp($GOSynonyme)]} {continue} set TabTmp($GOSynonyme) 1 lappend LesGO $GOSynonyme } } if {![info exists TabTmp]} {unset TabTmp} set LesDefinitions {} set LesRequetes {} foreach GO $LesGO { lappend LesDescendantsEtAncetres $GO foreach Type [GODB GO $GO LesTypes] { foreach Definition [GODB Type $Type GO $GO LesDefinitions] { regsub -all " |\/" $Definition "_" Definition if {[info exists TabTmp($Definition)]} {continue} set TabTmp($Definition) 1 lappend LesDefinitions $Definition } } foreach Requete [2GO $GO LesLiens] { if {[info exists TabTmp($Requete)]} {continue} set WhatIsIt [2GO $Requete WhatIsIt] lappend LesRequetes [list $WhatIsIt $Requete] set TabTmp($Requete) 1 } } if {![info exists TabTmp]} {unset TabTmp} set LesRequetes [lsort -index 0 $LesRequetes] set LesParents [concat [TousLesAncetresGODesGO $LesGO] $LesGO] ############################################################################### ImageDirectory idir ImageFile ifile set Chemin "/GO" if {[info exists TabAiJeVuCetteBranche($KTree,$Chemin)]} {Tree:delitem $KTree $Chemin} set TabAiJeVuCetteBranche($KTree,$Chemin) 1 foreach GO $LesGO { Tree:createallchildren $KTree [list [list "GO" "Open" idir] [list $GO "Open" ifile]] } set Chemin "/GO_Definitions" if {[info exists TabAiJeVuCetteBranche($KTree,$Chemin)]} {Tree:delitem $KTree $Chemin} set TabAiJeVuCetteBranche($KTree,$Chemin) 1 foreach Definition $LesDefinitions { Tree:createallchildren $KTree [list [list "GO_Definitions" "Open" idir] [list $Definition "Open" ifile]] } set Chemin "/GO_Links" if {[info exists TabAiJeVuCetteBranche($KTree,$Chemin)]} {Tree:delitem $KTree $Chemin} set TabAiJeVuCetteBranche($KTree,$Chemin) 1 foreach LaRequete $LesRequetes { set Banque [lindex $LaRequete 0] set Requete [lindex $LaRequete 1] Tree:createallchildren $KTree [list [list "GO_Links" "Open" idir] [list $Banque "Close" idir] [list $Requete "Open" ifile]] } set Chemin "/GO_ParentTerms" if {[info exists TabAiJeVuCetteBranche($KTree,$Chemin)]} {Tree:delitem $KTree $Chemin} if {$LesParents != ""} { set TabAiJeVuCetteBranche($KTree,$Chemin) 1 Tree:newitem $KTree $Chemin -image idir TreeOpenOuClose $KTree $Chemin Open DrawTreeAllGO $KTree $LesParents Open $Chemin } if {[GOUsersDB ask LesGO] != ""} { set Chemin "/GO_UsersSelection" if {[info exists TabAiJeVuCetteBranche($KTree,$Chemin)]} {Tree:delitem $KTree $Chemin} set TabAiJeVuCetteBranche($KTree,$Chemin) 1 foreach GO $LesGO { set LesAccess [lsort -unique [GOUsersDB ask GO $GO LesAccess ]] set LesRequetes [lsort -unique [GOUsersDB ask GO $GO LesRequetes ]] set LesBoitesGscope [lsort -unique [GOUsersDB ask GO $GO LesBoitesGscope]] if {$LesAccess != ""} { foreach Access $LesAccess { Tree:createallchildren $KTree [list [list "GO_UsersSelection" "Open" idir] [list "Access" "Open" idir] [list $Access "Close" ifile]] foreach Requete [GOUsersDB ask Access $Access LesRequetes] { regsub -all " |\/" $Requete "_" Requete Tree:createallchildren $KTree [list [list "GO_UsersSelection" "Open" idir] [list "Access" "Open" idir] [list $Access "Close" ifile] [list $Requete "Close" ifile]] } } } if {$LesRequetes != ""} { foreach Requete $LesRequetes { regsub -all " |\/" $Requete "_" Requete Tree:createallchildren $KTree [list [list "GO_UsersSelection" "Open" idir] [list "DomainsKeywords" "Open" idir] [list $Requete "Open" ifile]] } } if {$LesBoitesGscope != ""} { set CheminBox "$Chemin/GscopeBox" foreach LaBoite $LesBoitesGscope { set Nom [lindex $LaBoite 0] set FichierGO [lindex $LaBoite 1] regsub -all "\/" $FichierGO "|" TexteFichierGO Tree:createallchildren $KTree [list [list "GO_UsersSelection" "Open" idir] [list "GscopeBox" "Open" idir] [list $TexteFichierGO "Open" idir] [list $Nom "Close" ifile]] foreach Access [GOUsersDB ask Gscope $FichierGO Nom $Nom LesAccess] { Tree:createallchildren $KTree [list [list "GO_UsersSelection" "Open" idir] [list "GscopeBox" "Open" idir] [list $TexteFichierGO "Open" idir] [list $Nom "Close" ifile] [list $Access "Close" ifile]] } } } } } if {[info exists TabTmp]} {unset TabTmp} update } proc DrawTrigNorm {t n1 n2 n3 c} { lassign $t v1 v2 v3 glColor4fv $c glBegin GL_LINES glVertex3fv $v1 glVertex3fv $v2 glVertex3fv $v3 glVertex3fv $v1 glEnd glColor4f 1.0 0.2 0.2 1.0 glBegin GL_LINES glVertex3fv $v1 set nv [V_VV $v1 + $n1] glVertex3fv $nv glEnd glBegin GL_LINES glVertex3fv $v2 set nv [V_VV $v2 + $n2] glVertex3fv $nv glEnd glBegin GL_LINES glVertex3fv $v3 set nv [V_VV $v3 + $n3] glVertex3fv $nv glEnd return } proc DrawVrp {} { global Vrp set w .fvrp.f set Vrp(Scale) 1.0 set c $Vrp(WCanvas) if {! [set Vrp(Overwrite)]} { $c delete all set Vrp(VId) 0 } else { lassign [$c coords l0_0] xv yv t h $c move all [expr {-1.*$xv}] [expr {-1.*$yv}] incr Vrp(VId) } set xprev 0.0 set yprev 0.0 set first 1 for {set i 0} {$i < $Vrp(Sz)} {incr i} { set x [lindex $Vrp(X) $i] set y [lindex $Vrp(Y) $i] if {$first} { set col red set d [expr {2*$Vrp(DotSz)}] set first 0 } else { set d $Vrp(DotSz) set col $Vrp(colDot) } $c create line $xprev $yprev $x $y -tags [list ligne "l${Vrp(VId)}_$i"] set item [$c create oval [expr {$xprev-$d}] [expr {$yprev-$d}] [expr {$xprev+$d}] [expr {$yprev+$d}] -width 1 -outline black -fill $col -tags [list "p${Vrp(VId)}_$i" dot]] set xprev $x set yprev $y } $c raise dot if {! [set Vrp(Overwrite)]} { set cx [expr {($Vrp(MinX) + $Vrp(MaxX))/2.0}] set cy [expr {($Vrp(MinY) + $Vrp(MaxY))/2.0}] } else { lassign [$c bbox all] Vrp(MinX) Vrp(MinY) Vrp(MaxX) Vrp(MaxY) set Vrp(Cmx) [expr {($Vrp(MinX) + $Vrp(MaxX))/2.0}] set Vrp(Cmy) [expr {($Vrp(MinY) + $Vrp(MaxY))/2.0}] } set Vrp(CX) $Vrp(CmX) set Vrp(CY) $Vrp(CmY) set item [$c create line $Vrp(MinX) $Vrp(MinY) $Vrp(MaxX) $Vrp(MaxY) -fill [$c cget -background] ] $c addtag scrollregion withtag $item ShowCenter $c $Vrp(CX) $Vrp(CY) set szx2 [expr {$Vrp(Width)/2.0}] set szy2 [expr {$Vrp(Height)/2.0}] $c move all [expr {$szx2 - $Vrp(CmX)}] [expr {$szy2 - $Vrp(CmY)}] set Vrp(CX) $szx2 set Vrp(CY) $szy2 ConfigureVrp $c # show the sequence set t $Vrp(WText) $t configure -state normal $t delete 0.0 end $t insert 1.0 $Vrp(seqAA1) $t configure -state disabled -insertwidth 0 return } proc DuFinal {Chr D {F ""}} { if {$F==""} { set F [expr $D+5000] } set Final [ContenuDuFichier "[AnnotRep]/${Chr}_Final"] set Xdn3 [ContenuDuFichier "[AnnotRep]/${Chr}_Xdn3"] Espionne [string range $Xdn3 $D $F] set XdnX [ContenuDuFichier "[AnnotRep]/${Chr}_XdnX"] Espionne [string range $XdnX $D $F] return [string range $Final $D $F] } proc DuGrec {Fichier} { foreach C [split [ContenuDuFichier $Fichier] ""] { if {$C > "z" || $C == "?"} { Espionne "Grec >$C< [string range $Nouveau end-10 end]" if { ! [info exists Remplace($C)]} { set Remplace($C) [Entre] } set C [set Remplace($C)] } lappend Nouveau $C } Espionne [Sauve [join $Nouveau ""] dans $Fichier.nouveau] exit } proc DuPlotteCourant {K X Y Qui} { set LesIds [$K find withtag current] foreach Id $LesIds { set Moi [lindex [$K gettags $Id] 0] set Toi [lindex [$K gettags $Id] 1] if {[regexp -nocase {[a-z]} $Toi]} { continue } if {$Qui == "PAB"} { return $Moi } else { return $Toi } } } proc DuRSF {TexteOuFichierRSF Quoi} { set N [DecortiqueUnRSF $TexteOuFichierRSF LesNomsDesSequencesDansLOrdre Sequences TabRSF "" "AvecBornesLocales"] set TabRSF(N) $N if {[info exists TabRSF($Quoi)]} { return $TabRSF($Quoi) } return "NExistePas" } proc DumpBiotext {} { set Ls [$::NomTextSeq output all] set Ns [list] foreach s $Ls { lappend Ns [split $s ""] } set ::LSSeqlab $Ns return } proc DumpCbl {} { array set Cbl [InitPAM35] parray Cbl set laa [split $Cbl(laa) ""] set i 0 set spc " " foreach a1 $laa { set s "$a1 [string repeat $spc $i]" foreach a2 [lrange $laa $i end] { append s [format %5.1f $Cbl($a2,$a1)] } incr i puts $s } exit } proc DumpFunction {w pos} { set pos [$w index $pos] lassign [split $pos .] y x set line [$w get $y.0 "$y.0 lineend"] set func [string trim [string range $line 0 [string first " " $line]]] set Ldump [::profiler::dump "::$func"] puts "\n Function : $func" foreach {k v} $Ldump { if {[llength $v] == 1} { puts " $k : $v" } else { puts " $k :" foreach {k2 v2} $v { puts " $k2 : $v2" } } } puts "" return } proc DumpIt {AId} { global Abr set PAD $Abr($AId,PAD) foreach id [$PAD find all] { if {[$PAD type $id] eq "text"} { puts "[$PAD itemcget $id -text] [$PAD coords $id] | [$PAD itemcget $id -angle]" } } return } proc DumpLeCarre {xd yd xf yf} { global TabSF PrmPrt set Ltags [list] if {[QuelMode] ne "feature"} { return $Ltags } set Lf [LesBoutonsEnfonces] puts "Lf $Lf" puts "yd $yd yf $yf" set i $yd foreach n [lrange $PrmPrt(LNoms) $yd $yf] { foreach ft $Lf { if {! [info exists TabSF($n,$ft)]} { continue } foreach f [set TabSF($n,$ft)] { DecortiqueUneFeature $f dg fg col sco note if {$dg <= $xf && $fg >= $xd} { if {$dg < $xd} { set x1 $xd } else { set x1 $dg } if {$fg > $xf} { set x1 $xf } else { set x2 $fg } lappend Ltags [list $i $x1 $x2 $col] } } } incr i } puts [join $Ltags \n] return $Ltags set dump "" set dptg "" set dptx "" for {set i $yd} {$i <= $yf} {incr i} { set d [$NomTextSeq dump -text -tag $i.$xd $i.$xf] set TOn 0 foreach {k v ix} $d { if {! [regexp {\.} $ix]} { set ix "$i.$ix" } switch $k { "tagon" { if {$v eq "Back"} {continue} if {! [regexp {^FX_} $v] && ! [regexp {^Tag} $v]} {continue} set TOn 1 } "tagoff" { if {$v eq "Back"} {continue} if {! [regexp {^FX_} $v] && ! [regexp {^Tag} $v]} {continue} if {! $TOn} {lappend LDump $k $v "$i.$xd"} set TOn 0 } } #puts "$k $v $ix" lappend LDump $k $v $ix } if {$TOn} {lappend LDump $k $v "$i.$xf"} } return $LDump } proc DumpOrdali {{FichierDump ""}} { global NomTextSeq global NomNomSeq global WTextSequence global Defauts global OrdTmpDir if {$FichierDump==""} { if {![set Defauts(Dump)]} { set FichierDump "DumpOrdali" } else { set FichierDump [set Defauts(Dump)] } } set parent [winfo parent $NomTextSeq] set wregle $parent.regle # sort la regle puis les noms puis les seqquences set DumpRegle [$wregle dump -tag -text 1.0 end] set DumpNoms [$NomNomSeq dump -tag -text 1.0 end] set DumpTexte [$NomTextSeq dump -tag -text 1.0 end] set ltag [$NomTextSeq tag names] set ltag [lsort -unique $ltag] set fnt [$NomTextSeq cget -font ] foreach t $ltag { set fre [$NomTextSeq tag cget $t -foreground ] set bck [$NomTextSeq tag cget $t -background ] lappend lct "$t $fre $bck" } EnvoieDump "OpenFile" $FichierDump EnvoieDump font $fnt EnvoieDump tags $lct EnvoieDump regle $DumpRegle EnvoieDump noms $DumpNoms EnvoieDump texte $DumpTexte EnvoieDump "CloseFile" return } proc DumpSVG {can} { puts "entre sumpSVG" source [file join $::OrdLibDir uriencode.tcl] source [file join $::OrdLibDir tinyfileutils.tcl] source [file join $::OrdLibDir can2svg.tcl] puts "Fait le dump" can2svg::canvas2file $csn can.svg puts "Fin SVG" return } proc DumpSqliteDB {{fdb ""}} { global db catch {puts "\n########################\n[info level -1]\n"} if {$fdb ne ""} { if {! [file exists $fdb]} { puts "$fdb does not exists" return } set db root package require sqlite3 sqlite3 $db $fdb } $db eval {begin transaction} set Lt [$db eval {select tbl_name from sqlite_master}] foreach table $Lt { set result {} $db eval "PRAGMA TABLE_INFO($table)" row { lappend result $row(name) $row(type) $row(pk) } puts "$table" foreach {n t pk} $result { set v [$db eval "select count($n) from $table "] if {$pk} { set pk "PK" } else { set pk " " } puts "\t$n $pk $t $v" } } $db eval {commit} puts "\n########################\n" return } proc DumpSqliteDB_VOIRdansORDALI {{fdb ""}} { global db catch {puts "\n########################\n[info level -1]\n"} if {$fdb ne ""} { set db root sqlite3 $db $fdb } $db eval {begin transaction} set Lt [$db eval {select tbl_name from sqlite_master}] foreach table $Lt { set result {} $db eval "PRAGMA TABLE_INFO($table)" row { lappend result $row(name) } puts "$table" foreach n $result { set v [$db eval "select count($n) from $table "] puts "\t$n $v" } } $db eval {commit} puts "\n########################\n" return } proc DumpTree {AId {info none}} { global Abr set A [set Abr(Arbre,$AId)] puts "" puts "Dump Tree $A" puts "==========[string repeat = [string length $A]]" puts "" if {0} { foreach n [$A nodes] { set Lk [lsort [$A keys $n]] puts "Norud $n :" foreach k $Lk { if {$k eq "name" || $k eq "AngAbs"} {continue} puts [format "\t%s %s" $k [$A get $n $k]] } puts "" } puts "\n" } puts "Arbre :" puts "=======" DumpTreeRecur $AId root 0 $info puts "\n" return } proc DumpTreeRecur {AId n niv {info non}} { global Abr set t [set Abr(Arbre,$AId)] set pre [string repeat "\t" $niv] set res "$pre$n" if {$info ne "none"} { foreach k $info { if {[$t keyexists $n $k]} { append res "|[$t get $n $k]" } } } puts "$res" if {[$t isleaf $n]} {return} incr niv foreach e [$t children $n] { DumpTreeRecur $AId $e $niv $info } return } proc Dumple {} { puts [.t.t dump -tag -text 1.1 1.7] puts [.t.t dump -tag -text 3.1 3.7] puts [.t.t dump -tag -text 5.1 5.7] puts [.t.t dump -tag 7.1 7.6] return } proc DupliqueLaBaseGscope {{RepDestin ""}} { global RepertoireDuGenome while {1} { if {$RepDestin==""} { set RepDestin "${RepertoireDuGenome}COPY" } if { ! [regexp "/" $RepDestin]} { set RepDestin "[file dirname $RepertoireDuGenome]/$RepDestin" } if { ! [OuiOuNon "Ok to duplicate \n $RepertoireDuGenome\n to $RepDestin\n ?"]} { set RepDestin [Entre $RepDestin] } if {$RepDestin!=""} { break } if {[OuiOuNon "Do I cancel ?"]} { return "" } } while {! [file exists $RepDestin]} { if {[OuiOuNon "Please create the directory of the new gscope database \n $RepDestin OK ?"]} { continue } if {[OuiOuNon "Do I cancel ?"]} { return "" } } foreach Rep {"beton" "nuctfa" "nucembl" "prottfa" "protembl" "infos" "trnadir" "codonw"} { set Source "$RepertoireDuGenome/$Rep" set Destin "$RepDestin/$Rep" if { ! [file exists $Source]} { continue } Espionne "$Source to $Destin" if { ! [info exists $Destin]} { File mkdir $Destin } foreach Fichier [glob -nocomplain "$Source/*"] { set Nom [file tail $Fichier] File copy $Fichier "$Destin/$Nom" } } set Source "$RepertoireDuGenome/fiches" set Destin "$RepDestin/fiches" if { ! [file exists $Destin]} { File mkdir $Destin } if {[file exists $Source]} { foreach F { bornesdesarns bornesdesglimmers bornesdespabs bornesdestrnas codonstartpossible codonstoppossible coglimmer compositionenatgc createurdespabs lesorganismestresproches narcisse sd_bons sd_loin sd_mets sd_sans similarite spectregc spectregcxy startcodon_summary } { if { ! [file exists $Source/$F]} { continue } Espionne "$Source/$F to $Destin/$F" File copy "$Source/$F" "$Destin/$F" } } return } proc EBIWebService {baseUrl query} { set urlrun "$baseUrl/run/" set ok [HttpCopy $urlrun jobid $query] if {! $ok} { puts "Error sending EBI run request !" return "" } # get job status set urlstatus "$baseUrl/status/$jobid" set status "RUNNING" while {$status eq "RUNNING"} { set ok [HttpCopy $urlstatus status] if {! $ok} { puts "Error getting EBI job status !" return "" } elseif {$status eq "RUNNING"} { after 5000 } } if {$status ne "FINISHED"} { puts "Error ! EBI job status $status !" return "" } # get results set urlresult "$baseUrl/result/$jobid/out" set ok [HttpCopy $urlresult result] if {! $ok} { puts "Error getting EBI job restults !" return "" } return "[join $result " "]" } proc ECDominant {LesECs Seuil} { set X "" set M "" set LesXs "" set LesMs "" for {set i 4} {$i>0} {incr i -1} { set Meilleur [MeilleurEC $LesECs $X $M $Seuil] if {$Meilleur!=""} { break } lappend LesXs "(\[0-9\]|-)+" lappend LesMs "-" set X "[join $LesXs "."]\$" set M "[join $LesMs "."]" } return $Meilleur } proc ECduPapa {EC} { regsub -all {[^0-9\.\-]} $EC "" EC append EC ".-" regsub {(^|\.)[0-9]+\.\-} $EC ".-" EC return $EC } proc ECtoGO {EC} { set FichierECtoGO "/home/perrodou/ec2go" set JaiEC 0 foreach Ligne [LesLignesDuFichier $FichierECtoGO] { scan $Ligne "%s" ECLu regsub "EC:" $ECLu "" ECcourt if {$ECcourt == $EC} { set Suite [StringSuivant "$ECLu > " dans $Ligne] set Reste [split $Suite ";"] ScanLaListe $Reste DefinitionGO GO set DefinitionGO [string trim $DefinitionGO] set GO [string trim $GO] lappend LaListe "$GO $DefinitionGO" set JaiEC 1 } } if {! $JaiEC} {return -1} set LaListe [join $LaListe] return $LaListe } proc EFFamily {} { set Source "/home/legrand/Documents/EF_family/EF_family_id.txt" set RepDestin "/genomics/link/EFFamily/DeBaptiste" file mkdir "$RepDestin/pdb" file mkdir "$RepDestin/embl" file mkdir "$RepDestin/tfa" set i 0 foreach Ligne [LesLignesDuFichier "/home/legrand/Documents/EF_family/EF_family_id.txt"] { incr i; set Nom [format "EF%3.3d" $i] if {[regexp {([0-9]+)} [string range $Ligne 4 end] Match Domain ]} { InformeSansDemander $Nom "HasDomain: $Domain" } scan $Ligne "%s" ACCESSPDB if {$ACCESSPDB=="1QLAA2"} { set ACCESSPDB "2BS2_A" } set AccessPDB [string tolower $ACCESSPDB] if {[regexp -nocase {^([0-9][A-Z0-9]{3})([A-Z]?)} $AccessPDB Match Acc Chain]} { set AccessPDB ${Acc} if {$Chain!=""} { append AccessPDB "_$Chain" } } set Pdb [TextePDB $AccessPDB] if {$Pdb==""} { Espionne "$ACCESSPDB $AccessPDB ???????????????????????????????" continue } Espionne "$ACCESSPDB $AccessPDB OK" set Embl [EMBLduPDB $AccessPDB] set Tfa [SequenceFormatTFA $Embl "" "embl"] #Affiche "$Embl\n\n$Tfa" "AvecRetour" set FichierPdb [Sauve $Pdb dans "$RepDestin/pdb/$AccessPDB"] set FichierEmbl [Sauve $Embl dans "$RepDestin/embl/EF_$AccessPDB.embl"] set FichierTfa [Sauve $Tfa dans "$RepDestin/tfa/EF_$AccessPDB.tfa"] lappend LaListe "$AccessPDB $FichierTfa" } return [SauveLesLignes $LaListe dans "$RepDestin/liste.txt"] } proc EMBLdeGscope {Access {ACFirst ""}} { if {$ACFirst=="ACFirst"} { set ACFirst 1 } else { set ACFirst 0 } if {[regexp {[\:_]} $Access Car]} { set Nom [StringApres $Car dans $Access] } else { set Nom $Access } set G [GenomeDu $Nom] if {$G==""} {return ""} set FicEmbl "$G/protembl/$Nom" if { ! [file exists $FicEmbl]} { return "" } if { ! $ACFirst} { return [ContenuDuFichier $FicEmbl] } set LigneAC "" set LesLignesEmblSansAC {} foreach Ligne [LesLignesDuFichier $FicEmbl] { if {[regexp "^AC " $Ligne]} { set LigneAC $Ligne continue } lappend LesLignesEmblSansAC $Ligne } if {$LigneAC==""} { FaireLire "I can't find a line 'AC something' in $FicEmbl" } return "$LigneAC\n[join $LesLignesEmblSansAC "\n"]" } proc EMBLduPDB {aPDB {ACFirst ""}} { Wup "Calls TFADuPDB which calls fastacmd" Wup "if no answer searches in /catalog/blast/pdb" if {$ACFirst=="ACFirst"} { set ACFirst 1 } else { set ACFirst 0 } set OS [OrganismeDuPDB $aPDB] set OC [OCduOS $OS] set GN [MoleculeDuPDB $aPDB] if {$ACFirst} { lappend LeEMBL "AC $aPDB" lappend LeEMBL "ID $aPDB created by Gscope with pdb entry $aPDB" } else { lappend LeEMBL "ID $aPDB created by Gscope with pdb entry $aPDB" lappend LeEMBL "AC $aPDB" } lappend LeEMBL "OS $OS" lappend LeEMBL "OC $OC" set TFA [string trim [TFADuPDB $aPDB] " \n"] regsub {[^ ]* } [lindex [split $TFA "\n"] 0] "" DE if {$TFA==""} { # return "" set TFA [TfaDeLaBanqueBlast "/catalog/blast/pdb" $aPDB] } if {$TFA==""} { return "" } if {$DE==""} { set DE [TextePDB $aPDB "KEYWDS"] } if {[regexp {\.{2,} *$} $DE]} { regsub {\.{2,} *$} $DE "" DE } if {$DE!=""} { lappend LeEMBL "DE $DE" } if {$GN!=""} { lappend LeEMBL "GN $GN" } set Seq [join [lrange [split $TFA "\n"] 1 end] "\n"] regsub -all -nocase {[^A-Z]} $Seq "" Seq lappend LeEMBL [QueSequenceFormatEMBL $Seq "AvecSQ"] return [join $LeEMBL "\n"] } proc EMBLtoTFA {TexteEMBL Entete} { set LesLignesEMBL [split $TexteEMBL "\n"] return [LignesEMBLtoTFA $LesLignesEMBL $Entete] } proc EPDDir {args} { ### Information de la localisation du directory contenant EPD ### set Rep "/home/lardenoi/DB_Promoteurs/EPD/78" set FirstArg [lindex $args 0] if {$FirstArg == "" } { return $Rep } if {$FirstArg == "TFAs" } { return "$Rep/epd78.seq" } if {$FirstArg == "DBBlast" } { return "$Rep/epd78.seq" } if {$FirstArg == "EPDOrgas" } { return "$Rep/EPD_Orga2Organism2OrganismLong"} if {$FirstArg == "EPDIdOrga"} { return "$Rep/EPD_Id2Orga2Organism2OrganismLong"} return $Rep } proc ESTOuPas {FichierDesPABs FichierSortie} { #FichierDesPABs=fiches/LesPABsSansJumeauxSeqSansCourts set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] foreach Nom $L { Espionne $Nom set est 0 set FichierBlastnest "[RepertoireDuGenome]/blastnest/$Nom" #set FichierBlastnest "[RepertoireDuGenome]/blastnest-human/$Nom" if {![file exists $FichierBlastnest]} {Espionne "$FichierBlastnest doesn't exist"} set LesProchesEST [ac_LesProchesDansLeBlastBis $FichierBlastnest 0.90 0 0] if {$LesProchesEST!="" && $LesProchesEST==1} {set est 1} lappend Liste "$Nom\t$est" } Espionne [llength $Liste] set ListeTriee [lsort -unique $Liste] Espionne [llength $ListeTriee] SauveLesLignes $ListeTriee dans $FichierSortie } proc ESTs {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] set n 0 foreach Nom $Liste { set LesCops [LesMeilleursCopainsDuBlast $Nom "blastnest"] if {$LesCops=={} ||[lindex $LesCops 0]=="File not yet available" ||[lindex $LesCops 0]=="No value" ||[lindex $LesCops 0]=="No hit"} { continue } else {incr n} } return $n } proc ESTsOuGenemblPourLesLocsSansProteine {FichierClusters {Banque blastnest}} { set Liste [ListeMinimumDesJR $FichierClusters] set n 0 set RepProttfa "[RepertoireDuGenome]/prottfa" Espionne $Banque foreach Nom $Liste { if {[PolyLocalise $Nom]!="NoLocalization"} { set Fichier "$RepProttfa/$Nom" if {![file exists $Fichier]} { set LesCops [LesMeilleursCopainsDuBlast $Nom $Banque] if {$LesCops=={} ||[lindex $LesCops 0]=="File not yet available" ||[lindex $LesCops 0]=="No value" ||[lindex $LesCops 0]=="No hit"} { continue } else {incr n} } } } return $n } proc ESTsPourLesLocs {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] set n 0 foreach Nom $Liste { if {[PolyLocalise $Nom]!="NoLocalization"} { set LesCops [LesMeilleursCopainsDuBlast $Nom "blastnest"] if {$LesCops=={} ||[lindex $LesCops 0]=="File not yet available" ||[lindex $LesCops 0]=="No value" ||[lindex $LesCops 0]=="No hit"} { continue } else {incr n} } } return $n } proc EcartType {l} { if {! [llength $l]} {return -1} set sd 0. ; set s2x 0. set n [llength $l] foreach e $l { set sx [expr {$sx+$e}] set s2x [expr {$s2x+$e*$e}] } set mx [expr {$sx/$n}] set ex [expr {sqrt($s2x/$n-$mx*$mx)}] return $ex } proc EcartTypeDeLaListe {Liste} { set Var [VarianceDeLaListe $Liste] return [expr sqrt($Var)] } proc Echange {aA aB} { upvar $aA A upvar $aB B set W $A set A $B set B $W return } proc Echo {Nom} { return $Nom } proc Ecorttype {l} { set m [Moyenne $l] set n [llength $l] set s2 0. foreach e $l { set s2 [expr {$s2+$e*$e}] } return [expr {sqrt($s2/$n -$m*$m)}] } proc EcritClustersRRPS {Lfin Lgr} { set o [open clusters.dat w] foreach i $Lfin { set ig [string range [lindex $i 0] 2 end] set gr [lindex $Lgr $ig] puts $o "cluster $ig" foreach le $gr { set str [format %5d [lindex $le 0]] foreach e [lrange $le 1 end] { append str [format " %6.1f" [expr {$e*100}]] } puts $o $str } } close $o return } proc EcritData {rfile} { global TDesTaxId global TDesDescriptifs global TDesOrganismes global LNOrdali global LesSequencesAssocieesClassesCanon global S2T set Dat1 "${rfile}.dat1" set d1 [open $Dat1 w] foreach d {eukaryota archaea bacteria} c {"#ff0000" "#0000ff" "#ffff00"} { foreach s [set LesSequencesAssocieesClassesCanon($d)] { set t [set S2T($s)] puts $d1 "$t\t$c" } } close $d1 return } proc EcritEnfonctionDuSeuil {Seuil} { foreach I [list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y] { Espionne "Fichier Chromosome $I" set FichierEntree [open "/genomics/link/STAF/fiches/VDR/Conservation/Conservation-Chr$I-mouse.gapless" "r"] set FichierSortie [open "/genomics/link/STAF/fiches/VDR/Conservation/Conservation-Chr$I-mouse.best" "w"] while { [gets $FichierEntree Ligne] >=0 } { ScanLaListe $Ligne Chromosome ID DR Start End Orientation Sequence ConsensusH NbMM QuelMM HitSouris GeneH set DetailSouris [split $HitSouris "/"] set Score [lindex $DetailSouris 5] if { $Score >= $Seuil } { puts $FichierSortie $Ligne } } close $FichierEntree close $FichierSortie } } proc EcritFichier {Liste NomFichier} { set f [open $NomFichier w] foreach el $Liste { puts $f $el } close $f } proc EcritGrapheContacts {fpdb mol chn} { DecortiqueUnPDB $fpdb set Cnct [ResiduesEnContact $mol $chn] set f [open "${mol}_contact.txt" w] puts $f "${mol}_${chn}" puts $f [join $Cnct "\n"] close $f return } proc EcritLeBilanConservation {ft} { global Defauts TabSF Couleurs TypeCons TypeText LNDG set NbGrp [expr {[llength $LNDG]-2}] set LesVals {} set LesCpl [array get TabSF "*,$ft"] foreach {s e} $LesCpl { set LesVals [concat $LesVals $e] } set LesVals [lsort -unique $LesVals] AuLog "" AuLog "Ordali results summary : Residues between braces are Ordali points" AuLog "========================" AuLog "Method : $ft" set aecrire "" foreach t $TypeCons { set NP 0 set NA 0 set Lidx [lsearch -all -regexp $LesVals $t] foreach idx $Lidx { set f [lindex $LesVals $idx] DecortiqueUneFeature $f dg fg col score note if {[EstCeUnPoint $dg $t]} { set lav "($dg)" incr NP } else { set lav $dg incr NA } if {$aecrire eq ""} { set nsep [expr {19-[string length [set TypeText($t)]]}] set entete "[set TypeText($t)] [string repeat "." $nsep]:" set aecrire "$entete $lav" } else { set lg [expr {[string length $aecrire]+[string length " ,$lav"]}] set nnl [regsub "\n" $aecrire "" tmp] if {$lg-$lg*$nnl > 80} { append aecrire "\n ,$lav" } else { append aecrire " ,$lav" } } } if {$aecrire ne ""} { AuLog $aecrire set aecrire "" } } return } proc EcritLePDB {id Fichier} { global PDB_[set id]_NomAtm global PDB_[set id]_NomRes global PDB_[set id]_NmrRes global PDB_[set id]_ChnIdn global PDB_[set id]_AtmXYZ global PDB_[set id]_AtmBQ global PDB_[set id]_Header if {$Fichier eq ""} {set Fichier [DemandeEtSauveFichier "pdb"]} set f [open $Fichier w] puts $f [join [set PDB_[set id]_Header] "\n"] set i 1 foreach c [set PDB_[set id]_ChnIdn] { if {$i != 1} {puts $f "TER "} foreach nmr [set PDB_[set id]_NomRes($c)] nbr [set PDB_[set id]_NmrRes($c)] lan [set PDB_[set id]_NomAtm($c)] lax [set PDB_[set id]_AtmXYZ($c)] lab [set PDB_[set id]_AtmBQ($c)] { foreach lx $lax lb $lab n $lan { lassign $lx x y z lassign $lb b q set chn $c if {$c eq "a"} {set chn " "} set NomR [AutreCodeLuc $nmr] set ligne [format "%6s%5d %4s %3s %1s%4d %8.3f%8.3f%8.3f%6.2f%6.2f" "ATOM " $i $n $NomR $chn $nbr $x $y $z $q $b] puts $f $ligne incr i } } } puts $f "END" close $f return } proc EcritLeTfa {FilOut LesNoms LesSequences} { if {$FilOut eq ""} { set FilOut [DemandeEtSauveFichier "tfa" 1] } if {$FilOut eq ""} {return} set f [open $FilOut w] foreach Nm $LesNoms s $LesSequences { if {[string trim $Nm] eq ""} {continue} puts $f ">$Nm" set D 0 while {$D < [string length $s]} { set F [expr {$D + 59}] set Linit [string range $s $D $F] set L [string map {Z - . -} $Linit] puts $f "$L" incr D 60 } } close $f return } proc EcritListeScore {{f ""}} { global ListeScore if {$f == ""} {set f "brute.dat"} set f [open $f w] set i 1 foreach e $ListeScore { set le [join $e " "] puts $f "$i $le" incr i } close $f return } proc EcritNom {AId n x1 y1 x2 y2} { global Abr set NAff [NomAffiche $AId $n] set PAD [set Abr($AId,PAD)] set xi [SurGrille $x1] set yi [SurGrille $y1] set xf [SurGrille $x2] set yf [SurGrille $y2] set ym [expr {($yi+$yf)/2 +1}] if {$xi != $xf} { set id [$PAD create line $xi $yi $xf $yi -fill black -width 2 -tags "line-$n"] } set id [$PAD create text [expr {$xf+1}] $ym -font "TreeFont$AId" -fill black -text "$NAff" -anchor w -justify left -tags "feuille-$n"] set Lc [$PAD bbox $id] set Id [$PAD create rectangle $Lc -fill white -outline white -tags "Rfeuille-$n"] $PAD lower $Id return } proc EcritNomCart {AId n x y Angle} { global Abr while {$Angle >= [2Pi]} {set Angle [expr {$Angle-[2Pi]}]} while {$Angle <= -[2Pi]} {set Angle [expr {$Angle+[2Pi]}]} set Angle [expr {$Angle*-180./[Pi]}] if {$Angle < 0.} {set Angle [expr {$Angle+360.}]} set NAff [NomAffiche $AId $n] set PAD [set Abr($AId,PAD)] if {$Angle > 90. && $Angle < 270.} { set anc e set jus right set Angle [expr {$Angle+180.}] } else { set anc w set jus left } set id1 [$PAD create text $x $y -text " $NAff " -font "TreeFont$AId" -justify $jus -anchor $anc] set bb [$PAD bbox $id1] $PAD delete $id1 lassign $bb x1 y1 x2 y2 set Lp [list $x1 $y1 $x1 $y2 $x2 $y2 $x2 $y1] set id [$PAD create text $x $y -text " $NAff" -anchor $anc -font "TreeFont$AId" -angle $Angle -tags "feuille-$n"] set Angle [expr {-1.*$Angle}] foreach {xp yp} $Lp { lassign [TourneBoiteD $x $y $xp $yp $Angle] nx ny lappend Lc $nx $ny } set Id [$PAD create polygon $Lc -fill white -outline white -width 0 -tags "Rfeuille-$n"] $PAD lower $Id return } proc EcritNomCart85 {AId n x y Angle} { global Abr set sz [set Abr($AId,FontSize)] while {$Angle >= [2Pi]} {set Angle [expr {$Angle-[2Pi]}]} while {$Angle <= -[2Pi]} {set Angle [expr {$Angle+[2Pi]}]} if {$Angle < 0.} {set Angle [expr {$Angle+[2Pi]}]} set NAff [NomAffiche $AId $n] set PAD [set Abr($AId,PAD)] set xg $x set yg $y set f [set Abr($AId,pixfont)] lassign [pixfont measure $f $sz $NAff] w h1 h2 set Off 2 # set h $sz set h [expr {$sz+$Off}] set AngOri $Angle if {$Angle <= [PiS2]} { set Pxy [list $x [expr {$y-$h/2}] $x [expr {$y+$h/2}] [expr {$x+$w}] [expr {$y+$h/2}] [expr {$x+$w}] [expr {$y-$h/2}]] } elseif {$Angle > [PiS2] && $Angle < [Pi]} { set Angle [expr {$Angle+[Pi]}] set Pxy [list $x [expr {$y-$h/2}] $x [expr {$y+$h/2}] [expr {$x-$w}] [expr {$y+$h/2}] [expr {$x-$w}] [expr {$y-$h/2}]] } elseif {$Angle > [Pi] && $Angle < 3.*[PiS2]} { set Angle [expr {$Angle+[Pi]}] set Pxy [list $x [expr {$y-$h/2}] $x [expr {$y+$h/2}] [expr {$x-$w}] [expr {$y+$h/2}] [expr {$x-$w}] [expr {$y-$h/2}]] } else { set Pxy [list $x [expr {$y-$h/2}] $x [expr {$y+$h/2}] [expr {$x+$w}] [expr {$y+$h/2}] [expr {$x+$w}] [expr {$y-$h/2}]] } if {$Angle > [Pi]} {set Angle [expr {$Angle-[2Pi]}]} set xmin 99999 ; set xmax -999999 set ymin 99999 ; set ymax -999999 foreach {xp yp} $Pxy { lassign [TourneBoite $x $y $xp $yp $Angle] nx ny set nx [expr {round($nx)}] set ny [expr {round($ny)}] set xmin [expr {$nx<$xmin?$nx:$xmin}] set ymin [expr {$ny<$ymin?$ny:$ymin}] set xmax [expr {$nx>$xmax?$nx:$xmax}] set ymax [expr {$ny>$ymax?$ny:$ymax}] lappend Lc $nx $ny } set w2 [expr {abs($xmax-$xmin+0*$Off)}] set h2 [expr {abs($ymax-$ymin+0*$Off)}] set dy 0 set dx 0 set sh2 [expr {round(($h2+$Off)/4)}] set sw2 [expr {round(($w2+$Off)/4)}] # set sz2 [expr {round($sz/2)}] # set sz2 $sz set ian [expr {int(floor($AngOri/[PiS16]))}] switch $ian { 30 {set anc "w" ; set dy -$sh2} 31 - 32 - 0 {set anc "w"} 1 {set anc "w" ; set dy $sh2} 2 {set anc "nw" ; set dy 0} 3 - 4 {set anc "nw"} 5 {set anc "nw" ; set dy 0} 6 {set anc "n" ; set dx $sw2} 7 - 8 {set anc "n"} 9 {set anc "n" ; set dx -$sw2} 10 {set anc "ne" ; set dy 0} 11 - 12 {set anc "ne"} 13 {set anc "ne" ; set dy 0} 14 {set anc "e" ; set dy $sh2} 15 - 16 {set anc "e"} 17 {set anc "e" ; set dy -$sh2} 18 {set anc "se" ; set dy 0} 19 - 20 {set anc "se"} 21 {set anc "se" ; set dy 0} 22 {set anc "s" ; set dx -$sw2} 23 - 24 {set anc "s"} 25 {set anc "s" ; set dx $sw2} 26 {set anc "sw" ; set dy 0} 27 - 28 {set anc "sw"} 29 {set anc "sw" ; set dy 0} } set INAff [ImgDeNomPIX $f $sz $w2 $h2 $NAff $Angle] # ORIGINE image en xg yg set id [$PAD create image [expr {$x+$dx}] [expr {$y+$dy}] -anchor $anc -image $INAff -tags "feuille-$n"] set Id [$PAD create polygon $Lc -fill white -outline white -width 0 -tags "Rfeuille-$n"] $PAD lower $Id return } proc EcritNomCirculaire {AId n x1 y1 x2 y2 Angle} { global Abr global TextFeuille MemoXY if { ! [info exists TextFeuille]} { set TextFeuille -1 } incr TextFeuille set fm [font configure TreeFont$AId -family] regsub -all " " $fm "" fm set sz [font configure TreeFont$AId -size] set md [font configure TreeFont$AId -weight] set NAff [NomAffiche $AId $n] # set NAff $TextFeuille set PAD [set Abr($AId,PAD)] set xi [SurGrille $x1] set yi [SurGrille $y1] set xf [SurGrille $x2] set yf [SurGrille $y2] set yg $yf if {$Angle <= acos(0)} { set anc "nw" set xg $xf } elseif {$Angle > acos(0) && $Angle < acos(-1)} { set xg $xf set anc "ne" set Angle [expr {$Angle+acos(-1)}] } elseif {$Angle > acos(-1.) && $Angle < asin(-1)+2*acos(-1)} { set xg $xf set anc "se" set Angle [expr {$Angle+acos(-1)}] } else { set xg [expr {$xf+2}] set anc "sw" } set Angle [expr {-1.*$Angle}] set INAff [ImgDeNom $NAff $fm $sz $md $Angle] OpacifieImage $INAff white 0 set yTF $yf if {[info exists MemoXY($xf,$yf)]} {set yTF [expr {$yf + 10}] } set MemoXY($xf,$yf) 1 set id [$PAD create line $xi $yi $xf $yf -fill black -width 2] set id [$PAD create image $xg $yg -anchor $anc -image $INAff -tags "feuille-$n"] set Lc [$PAD bbox $id] set Id [$PAD create rectangle $Lc -fill white -outline white -tags "Rfeuille-$n"] $PAD lower $Id return } proc EcritPourDPC {{filout ""}} { global OrdTmpDir ListeScore if {$filout eq ""} {set filout [file join $OrdTmpDir "ficdpc.dat"]} set f [open $filout w] set nv [expr {[llength [lindex $ListeScore 0]] - 1}] set comp [llength $ListeScore] puts $f "$comp\t$nv" puts $f "" foreach s $ListeScore { puts $f [join $s "\t"] } close $f return } proc EcritSpheres {mol} { global ListeDesObjetsDansO global Defauts if {! [info exists ListeDesObjetsDansO]} {return} if {[set Defauts(SphPts)]} { if {[info exists ListeDesObjetsDansO(PTS)] != 0} { IlFautVoir "DebutDb ${mol}sf" IlFautVoir "begin ${mol}sf" IlFautVoir "colour white" } else { return } foreach s [set ListeDesObjetsDansO(PTS)] { IlFautVoir $s } IlFautVoir "end" IlFautVoir "FinDbMc" return } foreach col [array names ListeDesObjetsDansO] { if {[regexp {\_} $col]} { set IdxU [string last "_" $col] set ColOut [string range $col [expr $IdxU + 1] [expr $IdxU + 6]] } else { set ColOut $col } if {$col == "PTS"} {set ColOut "pts"} IlFautVoir "DebutDb ${mol}sf" IlFautVoir "begin ${mol}sf" if {$col == "PTS"} { IlFautVoir "colour white" } else { IlFautVoir "colour $col" } foreach sph [set ListeDesObjetsDansO($col)] { IlFautVoir $sph } IlFautVoir "end" IlFautVoir "FinDbMc" } return } proc EcritTableDistances {aT f} { upvar $aT T set foo [open $f w] set Ln [array names T] foreach e $Ln { set Le [join [split $e ,]] lappend Lnom {*}$Le } set Lnom [lsort -unique $Lnom] set pl [PlusLongEltDe $Lnom] puts $foo [format "%5d" [llength $Lnom]] foreach n1 $Lnom { set ent [format "%${pl}s" $n1] set i 0 foreach n2 $Lnom { lassign [set T($n1,$n2)] pc l1 l2 lsl set dst [expr {1.-$pc}] append ent [format "%8.4f" $dst] incr i if {$i == 8} { puts $foo $ent set ent [string repeat " " $pl] set i 0 } } puts $foo $ent } close $foo return } proc EcritUnArbre {AId {fout ""}} { global Abr if {$fout eq ""} { set fout [DemandeEtSauveFichier ph 1] if {$fout eq ""} {return} } set Abr($AId,OutPH) "" EcritUnNoeud $AId root append Abr($AId,OutPH) ";" set o [open $fout w] puts $o $Abr($AId,OutPH) close $o puts "\n$Abr($AId,OutPH)" return } proc EcritUnNoeud {AId n} { global Abr #lululu set t [set Abr(Arbre,$AId)] append Abr($AId,OutPH) "(" set ic 1 set nc [llength [$t children $n]] foreach c [$t children $n] { if {[$t isleaf $c]} { append Abr($AId,OutPH) "[$t get $c name]:[$t get $c length]" } else { EcritUnNoeud $AId $c } if {$ic < $nc} { append Abr($AId,OutPH) "," } incr ic } append Abr($AId,OutPH) ")" if {$n ne "root"} { if {$Abr($AId,BootDone)} { append Abr($AId,OutPH) "[$t get $n nboot]" } append Abr($AId,OutPH) ":[$t get $n length]" } return } proc EditAndShow {Texte {FichierPourSave ""} {Maniere ""}} { return [AfficheVariable [EntreTexte $Texte] "AvecFormate$Maniere" $FichierPourSave] } proc EditFeatureItem {} { global EFeat LNOrdali TabSF set EFeat(COk) 0 if {$EFeat(LItemSel) == {} } { FaireLire "Please select features before to edit them !" return } set Lx1x2 [list] set Lcolor [list] set Lscore [list] set Lnote [list] foreach e $EFeat(LItemSel) { lassign $e zones noteRef ft foreach {p1 p2} $zones { lassign [split $p1 .] y x1 lassign [split $p2 .] y x2 incr x2 -1 set nom [lindex $LNOrdali $y-1] foreach e [set TabSF(${nom},$ft)] { DecortiqueUneFeature $e d f col score note csys lappend Lcolor $col lappend Lnote $note lappend Lscore $score if {$d == $x1 && $f == $x2} { lappend Lx1x2 [list $x1 $x2] } } } } set Lx1x2 [lsort -unique -integer -index 0 $Lx1x2] set Lcolor [lsort -unique $Lcolor] set Lscore [lsort -unique -real $Lscore] set Lnote [lsort -unique $Lnote] set EFeat(Lx1x2) [linsert $Lx1x2 0 "Select"] set EFeat(Lcolor) [linsert $Lcolor 0 "Select"] set EFeat(Lnote) [linsert $Lnote 0 "Select"] set EFeat(Lscore) [linsert $Lscore 0 "Select"] WindowEditItem edit ChangeFeatureForEditing return } proc EditInfoSeq {} { global LNOrdali TDesSeqnames global nseqCombo TEdit nold if {[TypeAli] eq "pasdali"} {return} if {[QuelMode] eq "seqlab"} { FaireLire "Not available in Editor mode !" return } # already open .. set w ".editinfoseq" if {[winfo exists $w]} { raise $w return } if {[winfo exists $w]} { raise $w return } if {[VueEditee]} { EnregistreLeMac VueEditee 0 } set Ln [list] foreach n $LNOrdali { if {[string trim $n] eq ""} {continue} lappend Ln $n set TEdit(corr,$n) $n } set nseqCombo [lindex $Ln 0] set nold $nseqCombo set LMx [PlusLongEltDe $Ln] set LMx [expr {$LMx>20?$LMx:20}] set TEdit(mode) "edit" toplevel $w wm title $w "Edit Sequences Information" wm protocol $w WM_DELETE_WINDOW KillParLaCroix set wf "$w.f" frame $wf grid $wf -row 0 -column 0 -sticky news grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 frame $wf.top grid $wf.top -row 0 -column 0 -sticky news -pady 15 -padx 10 label $wf.top.lab -text "Sequence " set TEdit(nseqCombo) [lindex $Ln 0] ttk::combobox $wf.top.seq -background white -width $LMx -values $Ln -state readonly -textvariable TEdit(nseqCombo) $wf.top.seq index 0 bind $wf.top.seq <> [list InfosDeLaSeq %W VientDuCombo] grid $wf.top.lab -row 0 -column 0 -sticky w grid $wf.top.seq -row 0 -column 1 -sticky w frame $wf.edt -bd 2 -relief groove label $wf.edt.lsqn -text "Sequence Name : " -anchor e -justify right entry $wf.edt.esqn -bg white -textvariable TEdit(seqname) label $wf.edt.lacc -text "Accession : " -anchor e -justify right entry $wf.edt.eacc -bg white -textvariable TEdit(access) label $wf.edt.lnid -text "Bank Id : " -anchor e -justify right entry $wf.edt.enid -bg white -textvariable TEdit(bid) set TEdit(tdes) "$wf.edt.edes" set l [LgtDescriptif] set nl [expr {$l/20+1>3?$l/20+1:3}] label $wf.edt.ldes -text "Description : " -anchor e -justify right text $wf.edt.edes -relief sunken -width $LMx -height $nl -bg white label $wf.edt.lorg -text "Organism : " -anchor e -justify right entry $wf.edt.eorg -bg white -textvariable TEdit(orga) label $wf.edt.llfd -text "Life domain : " -anchor e -justify right entry $wf.edt.elfd -bg white -textvariable TEdit(lifed) label $wf.edt.ltxd -text "Taxa Id : " -anchor e -justify right entry $wf.edt.etxd -bg white -textvariable TEdit(taxid) label $wf.edt.lec -text "E.C. : " -anchor e -justify right entry $wf.edt.eec -bg white -textvariable TEdit(ec) grid $wf.edt.lsqn -row 0 -column 0 -sticky e grid $wf.edt.esqn -row 0 -column 1 -sticky w grid $wf.edt.lacc -row 1 -column 0 -sticky e grid $wf.edt.eacc -row 1 -column 1 -sticky w grid $wf.edt.lnid -row 2 -column 0 -sticky e grid $wf.edt.enid -row 2 -column 1 -sticky w grid $wf.edt.ldes -row 3 -column 0 -sticky ne grid $wf.edt.edes -row 3 -column 1 -sticky w grid $wf.edt.lorg -row 4 -column 0 -sticky e grid $wf.edt.eorg -row 4 -column 1 -sticky w grid $wf.edt.llfd -row 5 -column 0 -sticky e grid $wf.edt.elfd -row 5 -column 1 -sticky w grid $wf.edt.ltxd -row 6 -column 0 -sticky e grid $wf.edt.etxd -row 6 -column 1 -sticky w grid $wf.edt.lec -row 7 -column 0 -sticky e grid $wf.edt.eec -row 7 -column 1 -sticky w grid columnconfig $wf.edt 1 -weight 1 grid $wf.edt -row 1 -column 0 -sticky news -padx 10 -pady 5 frame $wf.btn button $wf.btn.dis -background red -text "Cancel" -command "DismissInfoSeq $w" button $wf.btn.ok -bg green1 -text " OK " -command "AcceptInfoSeq $w" grid $wf.btn.dis -row 0 -column 0 -sticky w -padx 20 grid $wf.btn.ok -row 0 -column 1 -sticky e -padx 20 grid $wf.btn -row 2 -column 0 -sticky ew -pady 15 grid columnconfig $wf.btn all -weight 1 InfosDeLaSeq "" $nseqCombo MesCouleurs $w FenetreAuCentre $w grab $w tkwait window $wf return } proc Editdb {} { set Fichier "[MiSynPatDir]/misynpat.sql" set db "root" sqlite3 $db $Fichier set pks [$db eval {select pk_synthetase from synthetase}] foreach pk $pks { $db eval {insert into jmol values ($pk,NULL,NULL,NULL,NULL,NULL)} } $db close } proc EditeClusterEntry {w} { if {$::Clus(NewEntry)} { $w delete 0 end set $::Clus(NewEntry) 0 } return } proc EditeEtCreeFichier {{Fichier ""} {Defo ""} {Ask ""}} { set Texte [EntreTexte $Defo] if {$Texte==""} { return "" } if {$Texte=="\n"} { if {[OuiOuNon "Do I cancel EditeEtCreeFichier ?"]} { return "" } if {[OuiOuNon "Do I save as an empty string (without \\n) ?"]} { set Texte "" } } if {$Fichier=="" || $Ask!=""} { set Fichier [FichierPourSaveAs $Fichier] } if {$Fichier==""} { return "" } return [Sauve $Texte dans $Fichier] } proc EditeNoteIndel {} { set laa {A C D E Fa Fb G H I L M N P R S T V W Y} set base "_lastfinal.xml" set out "_lastfinal2.xml" foreach a $laa { set f "${a}$base" set o [open "${a}$out" w] set Ll [LesLignesDuFichier $f] foreach l $Ll { if {[regexp {fnote} $l] && [regexp {type} $l]} { set l [string map [list "insertion_" ""] $l] set l [string map [list "type_" "type"] $l] set l [string map [list "type" "indel_type"] $l] } puts $o $l } close $o } exit } proc EditeSeq {quoi} { global db NomSeqSel LNOrdali $db eval {begin transaction} set pk_vue [VueCourante index] set pkvo [VisCourante] set pkvm [$db eval {select pk_vis_mere from vis where pk_vis=$pkvo}] if {! $pkvm} { # Peut pas revenir plus en amont !! Return ! $db eval {commit} return } set Lnow [$db eval {select pk_seqali from ln_vis_seqali where pk_vis=$pkvo order by pos}] set Lold [$db eval {select pk_seqali from ln_vis_seqali where pk_vis=$pkvm order by pos}] LesDefauts IxVisCourante $pkvm DetruitVis $pkvo $db eval {commit} RafraichitAffichage set NomSeqSel {} if {[llength $Lnow] < [llength $Lold]} { set Loff [lor $Lnow $Lold] set Laof [LesAccessDesSeqali $Loff] foreach n $Laof { lappend NomSeqSel "[expr {[lsearch $LNOrdali $n]+1}].0" } TagNomsSelectionnes } return } proc EditorMappingData {} { if {[info exists ::TypeSeq] && $::TypeSeq eq "DNA"} { set Lignes "A white red G black orange C white blue T black green1 U black green1 X black white N white black . black dimgrey Space white white" } else { set Lignes "I white magenta J white magenta L white magenta M white magenta V white magenta R white blue K white blue F white red Y white red W white red D white forestgreen B white forestgreen E white forestgreen Z black green1 Q black green1 P white black G black orange H black cyan N black cyan S white darkviolet T white darkviolet A white darkviolet U white darkviolet C white darkviolet X black dimgrey . black dimgrey 0 black white 1 black white 2 black white 3 black white 4 black white 5 black white 6 black white 7 black white 8 black white 9 black white Space white white" } set Lmap [list] foreach l [split $Lignes \n] { lassign [split [string trim $l] " "] n f b if {$n eq "Space"} {set n " "} lappend Lmap [list $n $f $b] } return $Lmap } proc EffaceCourant {w} { global TexteMontreCourant if {[info exists TexteMontreCourant($w)]} { $w delete $TexteMontreCourant($w) unset TexteMontreCourant($w) } } proc EffaceLeLog {LBLog} { Wup "Permet d effacer le log du panel general" global $LBLog if {$LBLog==""} {return ""} $LBLog configure -state normal $LBLog delete 0.0 end $LBLog configure -state disabled return "" } proc EffaceLesBoitesDuCanvas {K} { Wup "Permet d effacer tout sauf l entete du Illustreoligo cad les graphes et la query" set LesIds [$K find withtag {!("OligoGraph"^"Entete")}] foreach Ids $LesIds { $K delete $Ids } return "" } proc EffacePositionOligoPourTous {K X Y} { Wup "Affiche a droite et a gauche la position de tous les oligos par rapport a la query" global PositionExisteDeja set Texte " " set LesIds [$K find withtag "Positionner"] foreach Id $LesIds { if {! [info exists PositionExisteDeja($K,$Id)]} { set PositionExisteDeja($K,$Id) 0 } else { set PositionExisteDeja($K,$Id) 0 } } set Id "" foreach Id [$K find withtag "Position"] {$K itemconfigure $Id -text $Texte} return "" } proc EffaceWNomsWSeqs {} { global NomTextSeq NomNomSeq $NomNomSeq configure -state normal $NomNomSeq tag delete {*}[$NomNomSeq tag names] $NomNomSeq delete 1.0 end $NomNomSeq configure -state disabled if {[QuelMode] ne "seqlab"} { $NomTextSeq configure -state normal $NomTextSeq tag delete {*}[$NomTextSeq tag names] $NomTextSeq delete 1.0 end $NomTextSeq configure -state disabled } TagsGenerauxFenetre return } proc EffectifDUnElementDansLesBanques {Quoi {Banque genbank} {Field des}} { set Banque [string tolower $Banque] if {[string equal -nocase $Banque "genembl"]} {set Banque "genbankfull"} if {[string equal -nocase $Banque "genbank"]} {set Banque "genbankfull"} ###WARNING WARNING WARNING############### #if {[string equal -nocase $Banque "genbankfull"]} {set Banque "genbank"} ###WARNING WARNING WARNING############### if {$Banque == "genbankfull"} { ##Mise en attente si la banque est en mise à jour set FileUpdateGenbank "/gcg/Update/.genbank_update" if {[file exists $FileUpdateGenbank]} { Espionne "SRS is updating the genbank database, please wait" AttendreTantQueExiste "/gcg/Update/.genbank_update" Espionne "The genbank database updating is done" } } set Commande "[ProgPathway getz] \"\\\[$Banque-$Field:$Quoi\\\]\" -wc" catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut] || $GetzOut == ""} {return} return $GetzOut } proc EffectifDuFtdDansLaBanque {Requete {Banque est} {Orga ""}} { set Commande "[ProgPathway getz] \"\(" regsub -all -nocase {[^a-z0-9]} $Requete " " Requete set Requete [string trim $Requete] while {[regexp " " $Requete]} {regsub -all " " $Requete " " Requete} set LesRequetes [split $Requete " "] set nRequetes [llength $LesRequetes] for {set i 0} {$i < $nRequetes} {incr i} { set Mot [lindex $LesRequetes $i] append Commande " \\\[$Banque-ftd:$Mot\\\] " if {[expr $i+1] < $nRequetes} {append Commande " \& "} } append Commande "\)>$Banque" if {$Orga != ""} {append Commande " \& \\\[$Banque-org:$Orga\\\]"} append Commande "\" -c" #Espionne $Commande set n [eval exec $Commande] return $n } proc EffectifsDesGO {FichierGO} { if {![file exists $FichierGO]} {return "File does not exists!"} set LesGeneOntology {} set F [open $FichierGO] while {[gets $F Ligne] >= 0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Type [lindex $LaLigne 3] if {![info exists TabTmp($Type,nAccess)]} { set TabTmp($Type,nAccess) 0 } set GO [lindex $LaLigne 4] set Access [lindex $LaLigne 2] set Nom [lindex $LaLigne 0] set LesGO [list $GO] foreach Ancetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LesGO $Ancetre } foreach GO [lsort -unique $LesGO] { if {$GO == ""} {continue} if {![info exists TabTmp($GO)]} { lappend LesGeneOntology $GO set TabTmp($GO) 0 } if {![info exists TabTmp($Access,$Nom,$Type)]} { incr TabTmp($Type,nAccess) set TabTmp($Access,$Nom,$Type) 1 } if {![info exists TabTmp($Access,$Nom,$GO)]} { incr TabTmp($GO) set TabTmp($Access,$Nom,$GO) 1 } } } set LesGO {} foreach GO $LesGeneOntology { if {$GO == "GO:0003673"} {continue} set Type [Onto $GO Type ] if {$Type == ""} {continue} set n [set TabTmp($GO)] set nAccess [set TabTmp($Type,nAccess)] set Def [lindex [Onto $Type $GO LesDefinitions] 0] lappend LesGO [list $Type $GO $n $nAccess [expr $n * 1.0 / $nAccess] $Def] } close $F return [lsort -index 0 [lsort -index end-1 -decreasing -real $LesGO]] } proc EleCoherence {} { set LesX [EleGen Chr22 X ListOf Gn] set LesF [EleGen Chr22 F ListOf Gn] set LesN [ListsComplement $LesF $LesX] Espionne $LesN exit } proc EleGen {{Chr ""} {Type ""} {Qui ""} {Quoi ""}} { global EleGen #rR EleGen permet d'interrgoger les annotations des ELEments du GENome #rR EleGen Chr01 X ListOf Gn #rR EleGen Chr01 X NOTCH2 ListOfD #rR EleGen Chr01 X NOTCH2 ListOfF #rR EleGen Chr01 X NOTCH2 ListOfId #rR EleGen Chr01 X ListOf Id #rR EleGen Chr01 X ListOf All #rR EleGen Chr01 X exon:57053 D #rR #rR EleGen Chr01 6 ListOf Id #rR ^ the type can be 0 1 2 3 4 5 6 7 8 9 X #rR use AnnotType ListOf T to get the possible list of one letter types #rR and AnnotType 6 Type to get the Type #rR or AnnotType 6 Type to get its Code #rR use AnnotType ListOf Code to get the possible codes #rR use AnnotType ListOf Type to get the possible types #rR #rR Chr01 to Chr25 (it's also possible to use ChrX=Chr23, ChrY=Chr24, ChrM=Chr25) #rR 2017/02/24 #rR Raymond if {$Chr==""} { set Chr "Help" } if {[string equal -nocase $Chr "Help"]} { foreach Ligne [split [info body EleGen] "\n"] { if { ! [regexp "^ +#rR " $Ligne]} { continue } regsub "^ +#rR " $Ligne "" Ligne lappend LeHelp $Ligne } return [join $LeHelp "\n"] } regsub -nocase "Chr" $Chr "Chr" Chr if {[regexp -nocase {^Chr([1-9])$} $Chr Match N]} { set Chr "Chr0$N" } regsub -nocase "ChrX" $Chr "Chr23" regsub -nocase "ChrY" $Chr "Chr24" regsub -nocase "ChrM" $Chr "Chr25" set T [AnnotType $Type T] if {[info exists EleGen($Chr,$T,$Qui,$Quoi)]} { if {[PourWscope]} { return "
[join $EleGen($Chr,$T,$Qui,$Quoi) \n]\n
" } return $EleGen($Chr,$T,$Qui,$Quoi) } if {[info exists EleGen($Chr,$T,EstCharge)]} { return "" } set EleGen($Chr,$T,EstCharge) 1 # 176049 176602 chr12 176049 176602 554 + exon:415858 uc001qhw.2 440073 IQSEC3 hg19_genes_exons set FicInfo "[AnnotRep]/${Chr}_Infos$T" if {[FileAbsent $FicInfo]} { return "" } set EleGen($Chr,$T,Filename,) $FicInfo foreach Ligne [LesLignesDuFichier $FicInfo] { set LesMots [LesMotsDeLaLigne $Ligne] if {$T=="F"} { lassign $LesMots D F E DO FO C Start Stop Length Brin Id Ucsc Gi Gn Type } else { lassign $LesMots D F C Start Stop Length Brin Id Ucsc Gi Gn Type set E $T set DO $Start set FO $Stop } lappend EleGen($Chr,$T,ListOf,Id) $Id lappend EleGen($Chr,$T,ListOf,Gn) $Gn lappend EleGen($Chr,$T,ListOf,D) $D lappend EleGen($Chr,$T,ListOf,F) $F set EleGen($Chr,$T,$Id,D) $D set EleGen($Chr,$T,$Id,F) $F set EleGen($Chr,$T,$Id,Gn) $Gn set EleGen($Chr,$T,$Id,E) $E set EleGen($Chr,$T,$D,D) $D set EleGen($Chr,$T,$D,F) $F set EleGen($Chr,$T,$D,Id) $Id set EleGen($Chr,$T,$D,Gn) $Gn set EleGen($Chr,$T,$D,E) $E set EleGen($Chr,$T,$F,D) $D set EleGen($Chr,$T,$F,F) $F set EleGen($Chr,$T,$F,Id) $Id set EleGen($Chr,$T,$F,Gn) $Gn set EleGen($Chr,$T,$F,E) $E lappend EleGen($Chr,$T,$Gn,ListOfId) $Id lappend EleGen($Chr,$T,$Gn,ListOfD) $D lappend EleGen($Chr,$T,$Gn,ListOfF) $F lappend EleGen($Chr,$T,$E,ListOfId) $Id lappend EleGen($Chr,$T,$E,ListOfD) $D lappend EleGen($Chr,$T,$E,ListOfF) $F set EleGen($Chr,$T,$D,Info) $Ligne lappend EleGen($Chr,$T,ListOf,All) "$C $D $F [expr $F-$D+1] $E $Id $Gn $Type" lappend EleGen($Chr,$T,ListOf,Info) "$C $E $Ligne" } set EleGen($Chr,$T,ListOf,Id) [lsort -unique $EleGen($Chr,$T,ListOf,Id)] set EleGen($Chr,$T,ListOf,Gn) [lsort -unique $EleGen($Chr,$T,ListOf,Gn)] return [EleGen $Chr $T $Qui $Quoi] } proc ElimineChampdansInfos {Champ {Liste ""}} { Wup "ElimineChampdansInfos Domaines: EVI00020" if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { Espionne $Nom InformeParSuppressionDuChamp $Nom $Champ } } proc ElimineLesEnterres {} { global RepertoireDuGenome ChargeLesPABs foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/bornesdespabs"] { scan $Ligne "%s" Nom if {[Enterre $Nom]} { lappend ListeDesEnterres $Ligne } else { lappend ListeDesBornesDesPABs $Ligne } } set ListeDesEnterres [lsort $ListeDesEnterres] set ListeDesBornesPABs [lsort -command CompareLesMilieux $ListeDesBornesDesPABs] Espionne [SauveLesLignes $ListeDesEnterres dans "$RepertoireDuGenome/fiches/bornesdesenterres.arenommer"] Espionne [SauveLesLignes $ListeDesBornesDesPABs dans "$RepertoireDuGenome/fiches/bornesdespabs.arenommer"] } proc ElimineLesFichiersContenant {Texte} { set LesFichiers {} foreach Fichier [glob -nocomplain *] { if {[regexp "$Texte" [ContenuDuFichier $Fichier]]} { Espionne $Fichier lappend LesFichiers $Fichier } else { continue } } if {$LesFichiers != {} } { if { [OuiOuNon "Voulez-vous vraiment effacer les fichiers?"]} { foreach Fichier $LesFichiers { file delete $Fichier } } } return "The End" } proc ElimineLesFichiersNeContenantPas {Texte} { set LesFichiers {} foreach Fichier [glob -nocomplain *] { if {![regexp "$Texte" [ContenuDuFichier $Fichier]]} { Espionne $Fichier lappend LesFichiers $Fichier } else { continue } } if {$LesFichiers != {} } { if { [OuiOuNon "Voulez-vous vraiment effacer les fichiers?"]} { foreach Fichier $LesFichiers { file delete $Fichier } } } return "The End" } proc ElimineLesJRAyantLesMemesAccessDeProtOuDemRNA {FichierClusters} { #Autres jumeaux = JR ayant le meme access proteine ou mRNA. set LesAccessProt {} foreach Nom [ListeDesJR $FichierClusters] { set LesAccessProt [InterrogeProtAndmRNA $Nom Rang 1 LesProteines] if {$LesAccessProt !=""} { foreach AccessProt $LesAccessProt { lappend LesAccessNom "$AccessProt $Nom" } } else { set LesAccessRNA [InterrogeProtAndmRNA $Nom Rang 1 LesmRNAs] if {$LesAccessRNA!=""} { foreach AccessRNA $LesAccessRNA { lappend LesAccessNom "$AccessRNA $Nom" } } else { #ni prot ni mRNA lappend LesSans $Nom } } } set LesAccessNomTries [lsort -dictionary $LesAccessNom] set AccessPrec "" set ListeSansDoublons {} set NomPrec "" foreach AccessNom $LesAccessNomTries { set Nom [lindex $AccessNom end] set Access [lindex $AccessNom 0] if {$Access!=$AccessPrec && $Nom!=$NomPrec} { lappend ListeSansDoublons $Nom } set AccessPrec $Access set NomPrec $Nom } #Espionne "lessans : [llength $LesSans]" #Espionne "" #Espionne "lesavecuniques : [llength $ListeSansDoublons]" return $ListeSansDoublons } proc ElimineLesMacsimsIncomplets {} { set Rep [RepertoireDuGenome] set I 0 set N 0 foreach Nom [ListeDesPABs] { if {([incr I]%100)==0} { Espionne "au $I eme il y a deja $N problemes" } if {0 && $Nom > "HSAP99999"} { break } set FLL "leonLog/$Nom" if {[FileAbsent $Rep/$FLL]} { continue } set FLM "msfLeon/$Nom" set FLX "msfLeon/$Nom.xml" set FMX "macsimXml/$Nom" set FMR "macsimRsf/$Nom" # set NR [llength [glob -nocomplain "$Rep/$FMR*"]] if {[file exists $Rep/$FLM] && [file exists $Rep/$FLX] && [file exists $Rep/$FMX] && [file exists $Rep/$FMR] && [file exists $Rep/$FMR.tfa] && [file exists $Rep/$FMR.txt] && [file exists $Rep/$FMR.html] && ! [file exists $Rep/$FMR.log]} { continue } incr N lappend LeBilan "$Nom [file exists $Rep/$FLM] [file exists $Rep/$FLX] [file exists $Rep/$FMX] [file exists $Rep/$FMR] [file exists $Rep/$FMR.tfa] [file exists $Rep/$FMR.txt] [file exists $Rep/$FMR.html] [file exists $Rep/$FMR.log]" } set R [AfficheListe $LeBilan "AvecRetour"] foreach Ligne $R { scan $Ligne "%s" Nom foreach D [list msfLeon macsimXml macsimRsf leonLog] { foreach F [glob -nocomplain "$Rep/$D/$Nom*"] { if {[OuiOuNonMemo "Ok to delete all wrong files in macsimXml macsimRsf leonLog msfLeon"]} { file delete $F Espionne "file delete $F" } else { Espionne "file to delete $F" } } } } return $R } proc ElimineLesRedondancesDansUnFichier {Fichier} { if {![file exists $Fichier]} {return ""} set NouveauContenu "" set Contenu [ContenuDuFichier $Fichier] foreach Ligne [LesLignesDuTexte $Contenu] { set PasEncoreVu 1 foreach Ligne2 [LesLignesDuTexte $NouveauContenu] { if {$Ligne == $Ligne2} {set PasEncoreVu 0} } if {$PasEncoreVu == 1} {append NouveauContenu "$Ligne\n"} } Espionne $NouveauContenu if {[OuiOuNon "Voulez vous sauvez ces lignes\?"]} { set NewFile [SauveLeFichierSous $Fichier] Sauve $NouveauContenu dans $Fichier } return "$NouveauContenu" } proc ElimineLesRedondancesDansUneListe {Liste} { if {$Liste == {}} {return {}} set NewListe {} foreach Element $Liste { if {[info exists DejaVu($Element)]} { continue } set DejaVu($Element) 1 lappend NewListe $Element } return $NewListe } proc ElmConserveOuNon {{Qui ""} {Quoi ""}} { global ElmConserveOuNon if {[info exists ElmConserveOuNon($Qui,$Quoi)]} {return $ElmConserveOuNon($Qui,$Quoi)} Espionne "onpassela" if {[info exists ElmConserveOuNon("EstCharge")]} {return ""} set ElmConserveOuNon("EstCharge") 1 foreach Box [ListeDesPABs] { #set Box [lindex [split $Qui "-"] 0] Espionne "" Espionne "Box $Box" set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout.ordonne.reduit.elm" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ordonne.reduit.elm"} set LesNamesRef [CopsDunName $FileMacsims $Box] Espionne "$LesNamesRef" #set GroupRef [GroupDunName $FileMacsims $Box] #set LesNamesRef [NamesDunGroup $FileMacsims $GroupRef] InitPosRel2Abs $FileMacsims $LesNamesRef set LesElmInfoRef [FromMacsims $FileMacsims $Box "ConcatElm"] foreach InfoRef $LesElmInfoRef { #Espionne "InfoRef $InfoRef" lassign $InfoRef ElmRef RFstart RFstop set nbref 0; set nbconserv 0 set AbsRFstart [DonnePosRA $Box $RFstart Absolue] set AbsRFstop [DonnePosRA $Box $RFstop Absolue] set AbsInfoRef [list ${ElmRef} ${AbsRFstart} ${AbsRFstop}] #Espionne "AbsInfoRef $AbsInfoRef" foreach Name $LesNamesRef { if {[regexp "LA0AAA" $Name]} {continue} incr nbref # Espionne "$nbref $Name" set LesElmInfoName [FromMacsims $FileMacsims $Name "ConcatElm"] foreach InfoName $LesElmInfoName { lassign $InfoName ElmName Fstart Fstop set AbsFastart [DonnePosRA $Name $Fstart Absolue] set AbsFstop [DonnePosRA $Name $Fstop Absolue] if {$ElmRef eq $ElmName && $AbsRFstart==$AbsFastart && $AbsRFstop==$AbsFstop} { incr nbconserv #Espionne "$nbconserv $InfoRef $Name $InfoName" break } } } set pourcentage [expr {((100*$nbconserv)/$nbref)}] Espionne "$ElmRef $AbsRFstart $AbsRFstop $nbconserv sur $nbref (${pourcentage}%)" if {$pourcentage>70} { set ElmConserveOuNon($Box-[join $AbsInfoRef "-"],conservation) OUI } else { set ElmConserveOuNon($Box-[join $AbsInfoRef "-"],conservation) NON } } } #LesDefauts #AfficheProfileResults return [ElmConserveOuNon $Qui $Quoi] } proc EmblInfo {AccessOuTexteOuLesLignesEMBL {K ""} {GetWhat ""}} { if {[regexp "\n" $AccessOuTexteOuLesLignesEMBL]} { set LesLignesEMBL [split $AccessOuTexteOuLesLignesEMBL "\n"] } elseif {[regexp " " $AccessOuTexteOuLesLignesEMBL]} { set LesLignesEMBL AccessOuTexteLesLignesEMBL } else { set Access $AccessOuTexteOuLesLignesEMBL set LesLignesEMBL [LaSequenceDesBanques $Access] } if {$LesLignesEMBL==""} { return "" } if {$GetWhat==""} { set GetWhat "GetList" } set ListOfInfo [DecortiqueLesLignesEMBL $LesLignesEMBL] if {$K==""} { return $ListOfInfo } array set AllInfo $ListOfInfo if { ! [info exists AllInfo($K)]} { return "" } if {$GetWhat=="GetText"} { return [join $AllInfo($K) " "] } return $AllInfo($K) } proc Empreinte {pab} { global DefautsPipe global PipeCollection global lBestPdb global NQuery if {$PipeCollection} { set fileTfa [file join [RepertoireDuGenome] "prottfa" $pab] set fileNormd [file join [RepertoireDuGenome] "normd" $pab] set fileMsf [file join [RepertoireDuGenome] "msf" $pab] set fileRascal [file join [RepertoireDuGenome] "rascal" $pab] set fileLeon [file join [RepertoireDuGenome] "leon" $pab] set fileBestMsf [file join [RepertoireDuGenome] "empreinte" $pab.msf] # si une empreinte a deja ete calculee, on passe cette etape if {[file exists [file join [RepertoireDuGenome] "empreinte" ${pab}_1.empreinte]]} { return 1 } } else { set fileTfa "$pab" set fileNormd "[file rootname $pab].normd" set fileMsf "[file rootname $pab].msf" set fileRascal "[file rootname $pab].rascal.msf" set fileLeon "[file rootname $pab].leon.msf" set fileBestMsf "[file rootname $pab].best.msf" } set NQuery [VerifieInputTfa $fileTfa] # Selection du meilleur msf if {[file exists $fileNormd]} { set bmsf [DefineBestMsfPipe $fileNormd] puts "bmsf est $bmsf" # si on a 1 best MSF if {$bmsf ne "no file"} { if {$bmsf == "Leon"} { if {$lBestPdb != ""} { foreach pdb $lBestPdb { # Verifie la presence du BestPDB si le meilleur msf est leon set test [VerifPresencePDB $fileLeon $pdb] if {$test == 0} { catch {set bmsf [DefineBestMsfClRasPipe $fileNormd]} } } } } AjouteAuLogPipe "rbest vaut $bmsf" #puts "best msf : $bmsf" file copy -force [set file$bmsf] $fileBestMsf # creation de l alignement de la query avec le template if {$lBestPdb != ""} { #puts "bestPDB = ok" CreeEmpreintePipe $pab $NQuery } } return 1 } else { return 0 } } proc EmulationSeqLab {} { global NomNomSeq NomTextSeq LockSeqs global LNOrdali LSOrdali LNSeqlab LSSeqlab global Defauts ListeSeqsGroupees #bind $NomTextSeq "" "" bindtags $NomTextSeq "" #bind $NomNomSeq "" "" bindtags $NomNomSeq "" update idletasks FaireAttendre "Entering Edition mode ...\nPlease wait ..." # Contenu fenetre set sep [string repeat "." [LongueurDeLAlignement ordali]] foreach s $LSOrdali n $LNOrdali { if {$n eq ""} { lappend Ltmp $sep lappend LSSeqlab [split $sep ""] } else { lappend Ltmp $s lappend LSSeqlab [split [string trim $s] ""] } } set LNSeqlab $LNOrdali array set ListeSeqsGroupees {} # repere position ascenceur lassign [$::TScrollY get] yscr tmp lassign [$::TScrollX get] tmp xscr # change et remplit widget biotext set LockSeqs $Defauts(LockSeqs) AfficheFenetreSeqlab $NomTextSeq configure -foreground black -background DimGray #$NomTextSeq configure -foreground black -background white $NomTextSeq sequences $Ltmp $NomTextSeq mapping [set Defauts(Mapping)] $NomTextSeq map on $NomTextSeq configure -state normal update idletasks FaireLaSuite .sqat SeqlabFont # remet ascenceur CoupleY moveto $yscr CoupleX moveto $xscr return } proc EnMajuscule {Fichier {Action toupper}} { foreach Ligne [LesLignesDuFichier $Fichier] { lappend Sortie [string $Action $Ligne] } Espionne [SauveLesLignes $Sortie dans $Fichier.$Action] exit } proc EncadrementDeTexte_WordML {Texte {Bold 0} {Italic 0} {UnderLine 0} {Size 10} {Couleur black} {SurLignage white}} { global PoliceParDefautPourWordML set LeTexte {} lappend LeTexte "" if {$Bold } {lappend LeTexte [Bold_WordML ]} if {$Italic } {lappend LeTexte [Italic_WordML ]} if {$UnderLine } {lappend LeTexte [UnderLine_WordML]} lappend LeTexte [SurLignage_WordML $SurLignage] lappend LeTexte [Couleur_WordML $Couleur ] lappend LeTexte [Size_WordML $Size ] lappend LeTexte [Texte_WordML $Texte ] lappend LeTexte "" return [join $LeTexte "\n"] } proc EndTLog2HTML {} { global DebutBodyHTML Html_BodyToEnd # incsere la CSS set CSS "" if {$CSS ne ""} { Html_Insert $DebutBodyHTML $CSS } return [Html_Get] } proc EndTLog2Text {} { global TextOut lappend TextOut "" return [join $TextOut \n] } proc EndWarning2HTML {} { Html_Append "
" Html_Append "
" Html_BR return } proc EnfonceBtnFeature {w} { $w configure -relief sunken -background red -foreground white LesFeaturesUtilisees [$w cget -text] 1 return } proc EnleveColonnesGaps {{LNom ""} {LSeq ""}} { global LNSeqlab LSSeqlab LNOrdali LSOrdali set qMode [QuelMode] if {$LNom eq ""} { if {$qMode eq "seqlab"} { set LNom $LNSeqlab set LSeq $LSSeqlab } else { set LNom $LNOrdali set LSeq $LSOrdali } } set LSeqIn $LSeq if {$qMode ne "seqlab"} { set new [list] foreach s $LSeq { lappend new [split $s ""] } set LSeq $new } # Longueur de sequence set i -1 foreach n $LNom { incr i if {[string trim $n] eq ""} {continue} set Long [llength [lindex $LSeq $i]] break } for {set i 0} {$i < $Long} {incr i} { set p$i 1 } foreach s $LSeq n $LNom { if {[string trim $n] eq ""} {continue} set i 0 foreach c $s { if {$c ne "."} {set p$i 0} incr i } } set lnew [list] ; set Li [list] set NOtes 0 ; set ltmp $LSeq for {set i 0} {$i < $Long} {incr i} { if {[set p$i]} {lappend Li $i} } set Li [lreverse [lsort -integer $Li]] set NOtes [llength $Li] if {! $NOtes} {return $LSeqIn} foreach s $LSeq n $LNom { if {[string trim $n] ne ""} { foreach i $Li { set s [lreplace $s $i $i] } } if {$qMode ne "seqlab"} { set s [join $s ""] } lappend lnew $s } set LSeq $lnew return $LSeq } proc EnleveConservation {} { global ListeTypesDeFeatures Toggle set Li [lsearch -regexp -all $ListeTypesDeFeatures "Cons-"] if {$Li == {}} {return} set Li [lsort -integer -decreasing $Li] foreach i $Li { set f [lindex $ListeTypesDeFeatures $i] DetruitLaFeature $f DessineLesScores "" } if {[set Toggle(Feature)] && [QuelMode] eq "feature"} { DetruitBoutonsOrdali AfficheBoutonsFeatures } if {[set Toggle(Scores)]} { #lululu } return } proc EnleveConservationGlobale {} { global ConsMeth TbScores set LExc [concat [set ConsMeth(IdenGlob)] [set ConsMeth(ConsGlob)]] #puts "LExc $LExc" foreach e $LExc { foreach m $TbScores(Lcols) { lset TbScores(Score,$m) $e -999.0 } } return } proc EnleveDoublonOfString {File} { foreach Ligne [LesLignesDuFichier $File] { set LesMots [split $Ligne "\t"] set Initial [lindex $LesMots 1] set Copain [lindex $LesMots 3] set Score [lindex $LesMots 4] set Detail [lindex $LesMots 5] set ScoreDetail "$Score $Detail" if {[info exists DejaVu($Copain-$Initial)]} { if {$DejaVu($Copain-$Initial)!= $ScoreDetail} { Espionne "attention doublon diff pour $Copain $Initial:" Espionne "$ScoreDetail" Espionne "$DejaVu($Copain-$Initial)" } } else { set DejaVu($Initial-$Copain) $ScoreDetail lappend LesLignesNettoyees $Ligne } } SauveLesLignes $LesLignesNettoyees dans $File } proc EnleveExtension {CheminDuRepertoire} { foreach F [glob -nocomplain "$CheminDuRepertoire/*"] { regsub {\.[^\.]+$} $F "" NewF file rename -force $F $NewF } } proc EnleveExtensionParticuliere {} { set RepXml "[RepertoireDuGenome]/macsimXml" set RepRsf "[RepertoireDuGenome]/macsimRsf" foreach F [glob -nocomplain "$RepXml/*.xml"] { set QueueF [file tail $F] set LesMotsF [split $QueueF "."] set NomF [lindex $LesMotsF 0] file rename -force $F "$RepXml/$NomF" } foreach D [glob -nocomplain "$RepRsf/*.rsf"] { set QueueD [file tail $D] set LesMotsD [split $QueueD "."] set NomD [lindex $LesMotsD 0] file rename -force $D "$RepRsf/$NomD" } } proc EnleveHeader {L} { set ia [lsearch -regexp $L {^ATOM }] if {$ia != -1} { set L [lrange $L $ia end] } return $L } proc EnleveLaDerniereExtension {NameFile {EXT ""}} { if {$EXT == ""} { regsub -all {\.[^\.]+$} $NameFile "" NameFile } else { regsub -nocase -all "\.$EXT$" $NameFile "" NameFile } return $NameFile } proc EnleveLaSequenceDeMonOrganisme {Nom Sequences} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" if {! [file exists $Fichier]} {return} ParseMACSIMS $Fichier macsims set MonOS [NotreOS] foreach Sequence $Sequences { set Organisme $macsims($Sequence,Organisme) if {[regexp "$MonOS" $Organisme]} {continue} lappend ListeDesSequences $Sequence } return $ListeDesSequences } proc EnleveLesLignesVidesDunFichier {Fichier} { set NouveauFichier "" foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} append NouveauFichier "$Ligne\n" } return $NouveauFichier } proc EnleveLesPoints {} { global NomNomSeq global NomTextSeq global LNOrdali global LSSeqlab set Etat [$NomTextSeq cget -state] $NomTextSeq configure -state normal set Ls {} if {[QuelMode] eq "seqlab"} { set Ls $LSSeqlab } set Ln [split [$NomNomSeq get 1.0 end] "\n"] set i 0 foreach n $Ln { incr i if {[string trim $n] ne ""} {continue} set s [$NomTextSeq get $i.0 "$i.0 lineend"] if {! [regexp {\*} $s]} {continue} $NomTextSeq delete $i.0 "$i.0 lineend - 1 chars" if {$Ls != {}} { set Ls [lreplace $Ls [expr {$i+1}] [expr {$i+1}] " "] } } if {[QuelMode] eq "seqlab"} { set LSSeqlab $Ls } $NomTextSeq tag delete PtBack $NomTextSeq configure -state $Etat return } proc EnleveLigneVideDuFichier {Fichier} { set LesLignesFinal {} foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne!=""} { lappend LesLignesFinal $Ligne } } SauveLesLignes $LesLignesFinal dans $Fichier } proc EnleveLignesVides {Liste} { if {$Liste=={}} {set LesLignes {}} foreach Ligne $Liste { if {[string trim $Ligne]==""} {continue} lappend LesLignes $Ligne } return $LesLignes } proc EnlevePrefixeBank {l} { if {! [info exists ::Defauts] || ! [set ::Defauts(RemoveBankPrefix)]} {return $l} set l [string map [list ">" "" "lcl|" ""] $l] set ul [string toupper $l] set s [string index $l 0] if {$s ne ">"} { set s "" } set done 0 foreach b [set ::Defauts(PrefixesBank)] { set ub [string toupper $b] #lm Attention ! #lm enleve "_" comme separateur de prefixe car peut #lm poser des probleme avec access swissprot ! # #lm longueur du pattern set d [expr {[string length $s]+[string length $ub] +1}] foreach t {"\\\|" "\\\:"} { set m "${s}${ub}${t}" if {[regexp -nocase "^$m" $ul]} { if {$ub ne "PDB" && [regexp -nocase {[a-z]} [string index $ul $d]]} { set l [string range $l $d end] set done 1 break } } } if {$done} { break } } return $l } proc EnlevePrefixeBankVOIR_DANS_GSCOPE_SEQUENCES {l} { if {! [info exists ::Defauts] || ! [set ::Defauts(RemoveBankPrefix)]} {return $l} set l [string map [list ">lcl|" ">"] $l] set ul [string toupper $l] set s [string index $l 0] if {$s ne ">"} {set s ""} foreach b [set ::Defauts(PrefixesBank)] { set ub [string toupper $b] foreach t {"\\\|" "\\\:" "\\\_"} { set m "${s}${ub}${t}" set d [expr {[string length $m] -1}] if {[regexp -nocase "^${m}" $ul]} { if {$ub ne "PDB" && [regexp -nocase {[a-z]} [string index $ul [expr {$d+1}]]]} { set l [string range $l $d end] break } } } } return $l } proc EnlevePrefixeFastacmd {l} { regsub {^>lcl\|} $l ">" l return $l } proc EnleveRedondanceEntreLesRefseq {} { set FichierNew "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Refseq/refseq-new-proteic_Vertebrata" set FichierRel "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Refseq/refseq-rel-proteic_Vertebrata" foreach LigneNew [LesLignesDuFichier $FichierNew] { if {[regexp "\>" $LigneNew]} { set AccNew [lindex [split $LigneNew " "] 1] lappend LesNews $AccNew } } foreach LigneRel [LesLignesDuFichier $FichierRel] { if {[regexp "\>" $LigneRel]} { set trouve 0 set AccRel [lindex [split $LigneRel " "] 1] foreach New $LesNews { if {$AccRel==$New} { set trouve 1 break } } if {$trouve} { Espionne "$AccRel present dans les 2" } } if {!$trouve} { lappend LesLignesSelect $LigneRel } } SauveLesLignes $LesLignesSelect dans "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Refseq/NEWrefseq-rel-proteic_Vertebrata" # renomme refseq-rel-proteic_Vertebrata en refseq-rel-proteic_Vertebrata_RedondAcNew # renomme NEWrefseq-rel-proteic_Vertebrata en refseq-rel-proteic_Vertebrata } proc EnleveRedondanceRefSeq_UMCU {file Out} { Wup "Permet de supprimer la redondance existante dans Refseq sur SRS" Wup "Pb non traites par les administrateurs des banques" #Attention si il y a des doublons on garde la sequence et l entete du dernier (+ recent dans RefSeq) set Tab(LesAccess) "" set F [open "$file"] while {[gets $F Ligne]>=0} { #>refseq|NM_001718|NM_001718 Homo sapiens bone morphogenetic protein 6 (BMP6), mRNA. if { [string range $Ligne 0 0] == ">"} { set Entete $Ligne set Access "" regexp -nocase {refseq\|([a-z]+_[0-9]+)\|} $Ligne tmp Access lappend Tab(LesAccess) $Access set Tab($Access,Entete) "$Entete" set Tab($Access,Sequence) "" continue } lappend Tab($Access,Sequence) $Ligne } close $F set Liste "" set Liste [set Tab(LesAccess)] Espionne "Nb sequences:[llength $Liste]" set Liste [lsort -unique $Liste] Espionne "Nb sequences:[llength $Liste]" set ToWrite "" foreach E $Liste { lappend ToWrite [set Tab($E,Entete)] lappend ToWrite [join [set Tab($E,Sequence)] "\n"] } if {[file exists $Out]} {file delete -force $Out} AppendAuFichier $Out [join $ToWrite "\n"] return "" } proc EnleveSpaceSeq {} { global NomTextSeq NomNomSeq NomSeqSel LSOrdali LNOrdali LNSeqlab LSSeqlab Defauts TScrollY if {[TypeAli] eq "pasdali"} {return} if {[llength $NomSeqSel] != 1} { FaireLire "Please select the sequence below which the separator should be removed !" return } if {[QuelMode] ne "seqlab"} { set LNoms $LNOrdali } else { set LNoms $LNSeqlab } lassign [split $NomSeqSel .] y x set i [expr {$y+1}] if {$i >= [llength $LNoms]} {return} if {[lindex $LNoms $y] ne ""} {return} # strore Y-scroll position lassign [$TScrollY get] ysc tmp $NomNomSeq configure -state normal $NomNomSeq delete $i.0 "$i.0 lineend + 1c" $NomNomSeq configure -state disabled if {[QuelMode] ne "seqlab"} { VueEditee 1 $NomTextSeq configure -state normal $NomTextSeq delete $i.0 "$i.0 lineend + 1c" $NomTextSeq configure -state disabled set LNOrdali [lreplace $LNOrdali $y $y] set LSOrdali [lreplace $LSOrdali $y $y] } else { # Beware ! Delete AT INDEX POSITION $NomTextSeq delete rows $y set LNSeqlab [lreplace $LNSeqlab $y $y] set LSSeqlab [lreplace $LSSeqlab $y $y] } MetAJourGroupes ChangeNomsAff $Defauts(NomsAffiches) AfficheNomsEtSeqs RepeintNomsEtSeqs # re-position at original Y CoupleY moveto $ysc return } proc EnleveVersionDeAccess {acc} { if {[set i [string first "." $acc]] != -1} { set suf [string range $acc $i+1 end] if {[string is integer -strict $suf]} { set acc [string range $acc 0 $i-1] } } return $acc } proc EnleverACTACAN {Path} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EnleverACTACAN : Start" set FichierIn [open "$Path.best" "r"] set FichierOut [open "$Path.best18" "w"] set I 0 while { [gets $FichierIn Ligne] >=0} { ScanLaListe $Ligne ID Chromosome SBSStart SBSEnd SBSOrientation set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EnleverACTACAN : sequence $ID" #regsub -all -nocase {chr} $Chromosome "" Chromosome if { $SBSOrientation == "+"} { set Start [expr $SBSStart + 7] set End [expr $SBSEnd] } else { set Start [expr $SBSEnd] set End [expr $SBSStart - 7] } #set Sequence [string toupper [BoutAdnDeUcscBoost $Start $End $SBSOrientation "Homo_sapiens" $Chromosome "bigZips200603" ]] puts $FichierOut "$ID $Chromosome $Start $End $SBSOrientation" } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EnleverACTACAN : End" close $FichierOut } proc EnregistreAnnotation {vue nom txt zon} { $::db eval {insert into anno values (NULL, '$txt', '$zon')} return } proc EnregistreCluster {pk_clustering Ls name} { global db $db eval {insert into cluster values (NULL, $pk_clustering, $name)} set lastCst [$db last_insert_rowid] set pos 0 foreach i $Li { $db eval {insert into ln_seqali_cluster values ($i,$LastCst,$pos)} incr pos } return } proc EnregistreClustering {titre LNSG} { global ZoneClusterisation Clus $db eval {begin transaction} $db eval "insert into clustering values(NULL,[VueCourante index],'$titre','[set Clus(Method)]','$ZoneClusterisation')" set lastClu [$db eval {select max(pk_clus) from clustering}] foreach {g ls} $LNSG { EnregistreCluster $LastClu } $db eval {commit} return } proc EnregistreInfosSeqs {} { global db LNOrdali TDesSeqnames TDesAccess TDesBId TDesDescriptifs TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesPhylum TDesGO TDuLineage TDesHydro TDespI $db eval {begin transaction} set pkm [MacCourant] foreach n $LNOrdali { if {$n eq ""} {continue} set pksi [$db eval {select pk_seqinfo from seqinfo where seqname=$n}] foreach t {TDesSeqnames TDesAccess TDesBId TDesDescriptifs TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesPhylum TDesGO TDuLineage TDesHydro TDespI} c {seqname access bid description organism taxid fragment cgroup ec complex phylum go lineage hydrophobicity isoelectric} { set v [set ${t}($n)] #puts "$n $pksi c= $c v= >>$v<<" if {! [string is integer -strict $v] && ! [string is double -strict $v]} { if {$v eq ""} { $db eval "update seqinfo set $c=NULL where pk_seqinfo = $pksi" } else { set v [string map [list "'" "''"] $v] $db eval "update seqinfo set ${c} = '${v}' where pk_seqinfo = $pksi " } } else { $db eval "update seqinfo set $c = $v where pk_seqinfo = $pksi" } } } $db eval {commit} return } proc EnregistreLeMac {{titre ""} {desc ""}} { global db LNOrdali LSOrdali LNDG SDG ScoreMeth TDesSeqnames TabSF # Speed up the bordel $db eval {begin transaction} if {$titre eq ""} { set atitre [MacCourant name] set adesc [DescriptionDuMac] set ctitre [ClusteringDuMac name] set cdesc "" set new 0 } else { set atitre "M[NumeroNewMac] - $titre" set adesc $desc set ctitre [ClusteringDuMac name] set cdesc "" set new 1 } # Detruit mac a remplacer si besoin est if {! $new} { DetruitLeMac [MacCourant] } # C'est parti ! # Creation du Mac # Devient le mac courant $db eval {insert into mac values (NULL, $atitre, $adesc)} set pkm [$db last_insert_rowid] LesDefauts IxMacCourant $pkm LesDefauts NmMacCourant $atitre VerifSeqs # Remplit seqs du mac # Remplit features du mac set pos 0 foreach n $LNOrdali s $LSOrdali { if {$n eq ""} {continue} set sqn [set TDesSeqnames($n)] set pksi [$db eval {select pk_seqali from seqali where seqname=$sqn and seq=$s}] $db eval {insert into ln_mac_seqali values ($pkm, $pksi, $pos)} # remplit features a partir de TabSF if {! [info exists TabSF] || [set Lf [array names TabSF "${n},*"]] == {} } { incr pos continue } foreach e $Lf { lassign [split $e ,] tmp ftype foreach f [set TabSF($e)] { DecortiqueUneFeature $f fstart fstop fcolor fscore fnote fcsys $db eval {insert into featali values(NULL, $ftype, $fstart, $fstop, $fcolor, $fscore, $fnote, $fcsys)} set pkfi [$db last_insert_rowid] $db eval {insert into ln_seqali_featali values($pksi,$pkfi)} } } incr pos } # Remplit clusters $db eval {insert into clustering values(NULL, $pkm, $ctitre, $cdesc,$::ZoneClusterisation)} set pkg [$db last_insert_rowid] $db eval {insert into ln_mac_clustering values ($pkm,$pkg,$pkg)} foreach g $LNDG { if {$g eq "bidon"} {continue} if {$g eq "grise"} {continue} set Lix [LesIndexsDesSeqnames [set SDG($g)]] if {$g eq "GroupeToutLeMonde"} {set g "all"} $db eval {insert into cluster values(NULL, $pkg, $g)} set pkc [$db last_insert_rowid] set pos 0 foreach i $Lix { $db eval {insert into ln_seqali_cluster values ($i,$pkc,$pos)} incr pos } } # Remplit colscore set Ls [array names ScoreMeth "Cons-*,Edit"] foreach e $Ls { if {[set ScoreMeth($e)]} {continue} lassign [split $e ,] ft edt set name $ft if {[regexp "Cons-T" $ft]} { set type int set absent -999 } else { set type float set absent -999.0 } set root [string range $ft 5 end] if {[string last "_" $root] != -1} { set root [string range $root 0 [string last _ $ft]-1] } $db eval {insert into colmeasure values (NULL,$ft,$root)} set pk_meas [$db last_insert_rowid] $db eval {insert into ln_mac_colmeasure values ($pkm,$pk_meas)} if {! [info exists ScoreMeth($ft,ListeGrps)]} { set ScoreMeth($ft,ListeGrps) [list] } foreach g [set ScoreMeth($ft,ListeGrps)] { set data {} if {$g eq "GroupeToutLeMonde" || $g eq "all"} { set owner "all" } else { set owner "group_[string range $g 5 end]" } # recupere index colonnes ayant 1 score set Lx {} set Li [array names ScoreMeth ${ft},$g,*] if {$Li == {} } {continue} foreach v $Li { lassign [split $v ,] t m i lappend Lx $i } # insere -999. aux colonnes manquantes set c 0 foreach i [lsort -integer $Lx] { while {$c != $i} { lappend data $absent incr c } set v $ScoreMeth(${ft},$g,$i) lappend data $v incr c } set data [join $data ,] $db eval {insert into colscore values(NULL, $pk_meas, $name, $owner, $type, $owner, $data)} set pkc [$db last_insert_rowid] if {$g eq "GroupeToutLeMonde"} {set g all} set pkt [$db eval {select pk_cluster from cluster where name=$g and pk_clustering=$pkm}] $db eval {insert into ln_cluster_colscore values ($pkt,$pkc)} } } # termine ! $db eval {commit} $db eval {vacuum} return } proc EnregistreVis {Ln quoi {Lo ""}} { global db $db eval {begin transaction} set pk_vue [VueCourante index] set pkvo [VisCourante] $db eval {insert into vis values (NULL,$pk_vue, 'tmp', $pkvo)} set pk_vis [$db eval {select max(pk_vis) from vis}] set Ls [LesIndexsDesSeqs $Ln] set Li [$db eval {select pk_seqali from ln_vis_seqali where pk_vis=$pkvo order by pos}] switch $quoi { "cut" { set Lvis [lor $Li $Ls] set pos 0 foreach i $Lvis { $db eval {insert into ln_vis_seqali values ($pk_vis,$i,$pos)} incr pos } set Lg [LesClusterDeVueClus [VueCourante index] [ClusteringCourant index] index] foreach g $Lg { $db eval "delete from ln_seqali_cluster where pk_cluster=$g and pk_seqali in ([join $Ls ,])" if {[$db eval {select count(pk_seqali) from ln_seqali_cluster where pk_cluster=$g}] == 0} { $db eval {delete from cluster where pk_cluster=$g} } } } "copy" {} "paste" { set Lp [TraiteSequencesAInserer $pkvo $Lo $pk_vue] set pos 0 foreach i $Li { $db eval {insert into ln_vis_seqali values ($pk_vis,$i,$pos)} if {$i eq $Ls} { foreach x $Lp { incr pos $db eval {insert into ln_vis_seqali values ($pk_vis,$x,$pos)} } } incr pos } set c [ClusteringCourant index] set g [$db eval {select c.pk_cluster from cluster as c, ln_seqali_cluster as lsc where lsc.pk_seqali = $Ls and lsc.pk_cluster = c.pk_cluster and c.pk_clustering = $c}] set Li [$db eval {select pk_seqali from ln_seqali_cluster where pk_cluster=$g order by pos}] $db eval {delete from ln_seqali_cluster where pk_cluster=$g} set pos 0 foreach i $Li { $db eval {insert into ln_seqali_cluster values ($i,$g,$pos)} if {$i eq $Ls} { foreach x $Lp { incr pos $db eval {insert into ln_seqali_cluster values ($x,$g,$pos)} } } incr pos } } } $db eval {commit} LesDefauts IxVisCourante $pk_vis return } proc Enregistrement {acide} { global CULSecDir Wobble_[set acide] classes dateheurelancement set liste_codons {} set nom_fichier "$acide.csv" set fichier [open res/$dateheurelancement/$nom_fichier w] puts -nonewline $fichier "codon" foreach classe [lsort $classes] { puts -nonewline $fichier ";$classe" } set nbclasses [llength $classes] set momo $nbclasses foreach indices [lsort [array names Wobble_[set acide]]] { set indices_liste [split $indices ","] set codon [lindex $indices_liste 0] if {$momo == $nbclasses} { puts -nonewline $fichier "\n$codon" puts -nonewline $fichier ";[set Wobble_[set acide]($indices)]" set momo 1 } else { puts -nonewline $fichier ";[set Wobble_[set acide]($indices)]" incr momo } } puts -nonewline $fichier "\n" close $fichier return } proc EnrichiAccessToKeepOrNotToKeep {Access} { global MesAccessInterressants if {! [info exists MesAccessInterressants]} {MesAccessInterressants} if {[info exists MesAccessInterressants($Access)]} {Espionne "Pas Enrichi de $Access";return ""} else { Espionne "Enrichi de $Access" set MesAccessInterressants($Access) 1; return ""} } proc EnrichirEpouvanBlast {Rep} { # Recupere l'organisme et le NM à partir des Blast faits sur RefSeqP : EpouvanBlast2.csv en sortie set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EnrichirEpouvanBlast : Start" set FichierIn [open "$Rep/EpouvanBlast.csv" "r"] set FichierOut [open "$Rep/EpouvanBlastEnriched.csv" "w"] set FichierOut2 [open "$Rep/EpouvanBlastEnrichedOnlyWithGoodSpecies.csv" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EnrichirEpouvanBlast : Building and executing RS queries" set CompteurLus 0 set CompteurGoodEcrits 0 set CompteurEcrits 0 set Trouves 0 set NonTrouves 0 while { [gets $FichierIn Ligne] >=0 } { #ScanLaListe $Ligne numero NM Org Entry Acc Expect DB ScanLaListe $Ligne DB numero NP XP Expect Identities IndetityPercentage Positive PositivePercentage Score Gaps GapsPercentage DebutQuery FinQuery DebutTarget FinTarget" incr CompteurLus set FichierDesRequetes [open "/tmp/EnrichirEpouvanBlast$NP.bql" "w"] puts $FichierDesRequetes "ID $XP DB REFSEQ" puts $FichierDesRequetes "FD OS,DBSOURCE" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" close $FichierDesRequetes set timestamp [clock format [clock seconds] -format "%H:%M:%S"] exec /biolo/bird/bin/birdql_client.sh "/tmp/EnrichirEpouvanBlast$NP.bql" bird "/tmp/EnrichirEpouvanBlast$NP.res" file delete $FichierDesRequetes set FichierDesRequetesExecutees [open "/tmp/EnrichirEpouvanBlast$NP.res" "r"] #set FichierDesRequetes3 [open "/tmp/NpToCoord$numero.bql3" "w"] while { [gets $FichierDesRequetesExecutees Ligne2] >=0 } { if {$Ligne2 != "" } { set NMt [string trim [lindex [split $Ligne2 " "] 2]] gets $FichierDesRequetesExecutees Ligne2 set Organism [string trim [lindex [split $Ligne2 "="] 1]] regsub -all -nocase " " $Organism "_" Organism puts $FichierOut "$Ligne $NMt $Organism" incr CompteurEcrits if { $Organism == "Drosophilia_melanogaster" || $Organism == "Caenorhabditis_elegans" || $Organism == "Pan troglodytes" || $Organism == "Danio_rerio" || $Organism == "Mus_musculus" } { puts $FichierOut2 "$Ligne $NMt $Organism" incr CompteurGoodEcrits } incr Trouves } else { incr NonTrouves } } close $FichierDesRequetesExecutees file delete $FichierDesRequetes } close $FichierOut close $FichierOut2 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EnrichirEpouvanBlast : Lus : $CompteurLus" Espionne "$timestamp|EnrichirEpouvanBlast : Ecrits : $CompteurLus ($Trouves found | $NonTrouves unfound)" Espionne "$timestamp|EnrichirEpouvanBlast : dont des 4 organismes: $CompteurGoodEcrits" Espionne "End" } proc EnrichitUnArbrePhylo {{TreeIn ""} {TreeOut ""} {Quoi "Species Definition"} {DeQui Default}} { Wup "Permet d enrichir un fichier sortie de Phylip au format NH en un fichier compatible NHX (New Hampshire eXtented)." Wup "Ce format lisible par ATV (viewer d arbre phylo) permet de visualiser d autres infos." #Pour Quoi on peut prendre: #Species #Definition #Categories #EC #TaxID #Sachant que Definition Categories et EC sont en concurrences if {$TreeIn == ""} { set TreeIn "[RepertoireDuGenome]/phylos/ARP47" } if {$TreeOut == ""} { set TreeOut "[RepertoireDuGenome]/phylos/ARP49" } set F [open "$TreeIn"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set i 0 set tmp "" set DF "" set LigneTmp "" set AddedInfo "" while {[regexp -start $i -indices -nocase {([a-z0-9_]{5,}):\-*[0-9]+} $Ligne tmp DF]} { #1-0 On recupere l access ######################### set Acc [string range $Ligne [lindex $DF 0] [lindex $DF 1]] set OldTaille [string length $Ligne] set i [lindex $DF 1] set tmp "" set DF "" set Def "" set Dist "" #2-0 On recupere la distance ############################ set expr "$Acc\\:(\\\-*\[0-9\]+\\\.\[a-z0-9-\]+)" regexp -all -indices -nocase $expr $Ligne tmp DF set Dist [string range $Ligne [lindex $DF 0] [lindex $DF 1]] set i [lindex $DF 1] #3-0 On va chercher les informations supplementaires de nos access ################################################################## set AddedInfo [LesInfosSupplementairesPourATV [string toupper $Acc] $Dist $Quoi $DeQui] #4-0 On ajoute les informations supplementaires dans la ligne ############################################################# set ToSearch "${Acc}:${Dist}" regsub -nocase "$ToSearch" $Ligne "${AddedInfo}" Ligne #5-0 On repositionne le curseur au bon endroit dans la ligne ############################################################ set NewTaille [string length $Ligne] set i [expr $i + ($NewTaille - $OldTaille) + 1] set tmp "" set DF "" } lappend LesLignes $Ligne #Espionne "$Ligne" } close $F AppendAuFichier $TreeOut [join $LesLignes "\n"] return "" } proc EnrichrWebService {Lids} { package require json set baseUrl "http://amp.pharm.mssm.edu/" # add list set url "$baseUrl/Enrichr/addList" set sid [join $Lids "\n"] set query [::http::formatQuery list $sid] set ok [HttpCopy $url result $query] if {! $ok} { puts "Error submitting list to Enrichr!" return "" } # result is json set result [join $result " "] set dict [::json::json2dict $result] set jobid [dict get $result userListId] # check job set url "$baseUrl/Enrichr/enrich?userListId=$jobid&background=GO_Biological_Process_2015" set ok [HttpCopy $url result] if {! ok} { puts "Error getting Enrichr results !" return "" } } proc EnsoleilleLaSelection {Selection} { global GalerieCourante global ExpoCourante set ExpoCourante [NomDe expo] set GalerieCourante $ExpoCourante[NomDe galerie] CreeGalerie $GalerieCourante foreach Ligne [split $Selection "\n"] { set Access [lindex [split [string trim $Ligne] " "] 0] EtudieAccess $Access } ClosGalerieCourante ClosExpoCourante } proc EntammePourMeltingTemp {Seq TmVoulu {TmSiFinGC ""}} { # TmVoulu peut contenir les deux if {[regexp {([0-9\.]+) +([0-9\.]+)} $TmVoulu Match TmATGC TmGC]} { set TmVoulu $TmATGC set TmSiFinGC $TmGC } if {$TmSiFinGC==""} { set TmSiFinGC $TmVoulu } set Seq [string toupper $Seq] set Entamme "" foreach Base [split $Seq ""] { append Entamme $Base if { ! [regexp {[ATGC]} $Base]} { continue } set TM [TMDeLaSequence $Entamme] if {$TM >= $TmVoulu} { break } if {$TM >= $TmSiFinGC && ($Base=="G" || $Base=="C")} { break } } return $Entamme } proc EnterBox {K X Y} { global CouleurEnEntree oldText set Id [$K find withtag current] set CouleurEnEntree [lindex [$K itemconfig $Id -fill] 4] $K itemconfigure $Id -fill [Fard $K $X $Y] # ShowBox $K $X $Y "Enter" } proc Enterre {Nom} { set Valeur [ExtraitInfo $Nom "Enterre"] if { $Valeur == "" } { return 0 } if {[regexp -nocase -- "oui" $Valeur]} { return 1 } else { return 0 } } proc EnterrerLesAncetresGO {LesGO} { set LesGOTmp $LesGO;set LesGOExclus {} foreach GO $LesGOTmp { set GO [string toupper $GO] if {[info exists TabDejaVu($GO)]} {continue} if {0 <= [lsearch -exact $LesGOExclus $GO]} {continue} foreach Type [GODB GO $GO LesTypes] { set TousLesAncetres [TousLesAncetresGO $Type $GO] foreach GOBis $LesGOTmp { if {$GO == $GOBis || 0 <= [lsearch -exact $LesGOExclus $GOBis]} {continue} foreach Ancetre $TousLesAncetres { if {$GOBis == $Ancetre} { lappend LesGOExclus $GOBis set TabDejaVu($GOBis) 1 break } } } } } return [ListsComplement $LesGO $LesGOExclus] } proc EnterrerLesAncetresOntologiques {LesGO} { set LesGOTmp $LesGO;set LesGOExclus {} foreach GO $LesGOTmp { set GO [string toupper $GO] if {0 <= [lsearch -exact $LesGOExclus $GO]} {continue} set Type [Onto $GO Type] set TousLesAncetres [TousLesAncetresOntologiques $Type $GO] foreach GOBis $LesGOTmp { if {$GO == $GOBis || 0 <= [lsearch -exact $LesGOExclus $GOBis]} {continue} foreach Ancetre $TousLesAncetres { if {$GOBis == $Ancetre} { lappend LesGOExclus $GOBis break } } } } return [ListsComplement $LesGO $LesGOExclus] } proc EnteteARPAnno_ResultHTML {Texte {AvecOuSansRefresh SansRefresh} {URL ""}} { Wup "Permet d avoir une entete HTML jolie pour la page de resultats" #regsub -all "\n" $Texte "
" Texte set LeTexte {} lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "ARPAnno results" lappend LeTexte "" #lappend LeTexte "" lappend LeTexte "" if {$AvecOuSansRefresh == "AvecRefresh"} { if {$URL != ""} { lappend LeTexte "" } else { lappend LeTexte "" } } lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" #Banniere IGBMC ou BIPS ####################### if {[regexp -nocase "bips" [WebServer_Address]]} { #lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte " " lappend LeTexte "" lappend LeTexte "
" } lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " #lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " lappend LeTexte " " #lappend LeTexte " " lappend LeTexte " " lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "

ARPAnno

Go back to ARPAnno
$Texte$Texte
Help and Supplementary informationGo back to ARPAnno
" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" lappend LeTexte "
" lappend LeTexte "
" lappend LeTexte "" lappend LeTexte "Muller et al (2005) Mol. Biol. Cell. doi: 10.1091/mbc.E05-06-0508" lappend LeTexte "" lappend LeTexte "
" lappend LeTexte "
" lappend LeTexte "
" #lappend LeTexte " " lappend LeTexte "
" lappend LeTexte " If you have any problems or questions, please, feel free to contact us at jean.muller@igbmc.u-strasbg.fr" lappend LeTexte "
" lappend LeTexte "" lappend LeTexte "" return [join $LeTexte "\n"] } proc EnteteDesPagesWebDesICDS {Title} { set Doctype [Html_Doctype] set HtmlBegin [Html_BeginHtmlManu "white" "Courier"] set Head [Html_Header $Title] set DebutBody [Html_BeginBody] lappend Entete $Doctype lappend Entete $HtmlBegin lappend Entete $Head lappend Entete $DebutBody set Entete [join $Entete "\n"] return $Entete } proc EnteteDuFichierTFA {Fichier {Quoi all}} { return [EnteteDuTexteTFA [ContenuDuFichier $Fichier] $Quoi] } proc EnteteDuTexteTFA {Texte {Quoi all}} { set Entete "" foreach Ligne [split $Texte "\n"] { if {[regexp ">" $Ligne]} { set Entete $Ligne ; break } } if {[string tolower $Quoi]=="all"} { return $Entete } regsub ">" $Entete "" Entete set Access "" scan $Entete "%s" Access return $Access } proc Entier {} { global TokCourant set Courant "" if {[regexp {[0-9]} $TokCourant]} { set Courant $TokCourant } if {$Courant==""} { return "EntierNonValideCarNonNumeriqueEnDebut" } while {[regexp {[0-9]} [Tok]]} { append Courant $TokCourant } return $Courant } proc Entoure {Boite K} { global oldCouleurOutLine global oldLargeurOutLine if {[regexp "rond" $K]} { return "" } set Id [$K find withtag $Boite] set oldCouleurOutLine($K,$Boite) [$K itemcget $Id -outline] set oldLargeurOutLine($K,$Boite) [$K itemcget $Id -width] $K itemconfigure $Id -outline "pink" -width 8 return [$K itemcget $Id -outline] } proc Entre {{Defo ""}} { global RetourEntre global EntreToujoursDefaut if {[info exists EntreToujoursDefaut] && $EntreToujoursDefaut} { return $Defo } set w [NomDe fenetre] toplevel $w wm title $w "To validate or " wm iconname $w "" wm geometry $w +300+300 entry $w.e -width 80 -borderwidth 10 -background red -foreground white -font {Courier 14} if { $Defo != "" } { $w.e insert 0 $Defo } pack $w.e -expand 1 -fill x focus $w.e bind $w.e "set RetourEntre($w) \[$w.e get\]" bind $w.e "set RetourEntre($w) \[$w.e get\]" tkwait variable RetourEntre($w) destroy $w set Retour [set RetourEntre($w)] unset RetourEntre($w) return $Retour } proc Entre0Et2PI {Angle} { set PI 3.14159 while {$Angle < 0} { set Angle [expr $Angle + 2*$PI] } while {$Angle >= 2*$PI} { set Angle [expr $Angle - 2*$PI] } return $Angle } proc Entre0Et360 {Angle} { while {$Angle < 0} { set Angle [expr $Angle + 360] } while {$Angle >= 360} { set Angle [expr $Angle - 360] } return $Angle } proc EntreDansCoeur {K X Y {Propagate ""}} { if {$Propagate==""} { set Propagate "Propagate" } if {[regexp {ShowAlso_(.+)} $Propagate Match IdTag]} { set Id [$K find withtag $IdTag] set SmallBox 1 } else { set Id [$K find withtag current] set SmallBox 0 } set Moi [lindex [$K gettags $Id] 0] set Toi [lindex [$K gettags $Id] 1] #rR set Texte "$Moi $Toi" set LesTags [$K gettags $Id] set C [lindex $LesTags end] if {$C=="current"} { set X [lindex $LesTags end-2] set Y [lindex $LesTags end-1] } else { set X [lindex $LesTags end-1] set Y [lindex $LesTags end] } if { ! [regexp {[0-9.]+} "$X$Y"] } { return "" } set Texte [join $LesTags " "] if {$SmallBox} { set R [$K create oval [expr $X-10] [expr $Y-10] [expr $X+10] [expr $Y+10] -outline "black"] GraphesEnStock "HighlightId" $K $R # append Texte " _$R" } regsub ".canvas" $K ".message" M catch {destroy $M} message $M -borderwidth 3 -font {Courier 12} -relief raise -width 300 -text $Texte -background "lightyellow" -foreground "black" set AncreH "" set AncreV "s" if {$Y<500} { set AncreV "n" } if {$X<128} { set AncreH "e" } if {$X>384} { set AncreH "w" } set Ancre "${AncreV}${AncreH}" set XT [expr $X+30] set YT [Maxi 100 [expr $Y-30]] place $M -x [expr $X+10] -y [Maxi 100 [expr $Y-10]] -anchor $Ancre $K create text $XT $YT -text $Texte -fill red -tags "MessageAffiche" if {[string equal -nocase $Propagate "Propagate"]} { foreach KK [GraphesEnStock] { if {$KK==$K} { continue } EntreDansCoeur $KK "" "" "ShowAlso_$Moi" } } return $M } proc EntreDansSeq {K X Y} { global TitreOrigine set Id [$K find withtag current] set NomSeq [lindex [$K gettags $Id] 1] if {! [info exists TitreOrigine($K)] } { set TitreOrigine($K) [wm title [winfo toplevel $K]] } wm title [winfo toplevel $K] "$NomSeq [$K canvasx $X]" } proc EntreDeux {Liste {ListeDeTextes ""} {Invite "Select ... and validate."}} { Wup "Permet une selection entre plusieurs choix" return [lindex [LesPEtA $Liste $ListeDeTextes $Invite] 0] } proc EntreMinEtMax {Angle m M} { set D [expr $M-$m] while {$Angle < $m} { set Angle [expr $Angle + $D] } while {$Angle >= $M} { set Angle [expr $Angle - $D] } return $Angle } proc EntreTexte {{Defo ""} {BoutonsEnPlus ""} {FichierOriginePourInforme ""}} { global RetourEntreTexte global FenetreInfoOuverte global PolicePourEntreTexte if {[PourWscope]} { set Maniere $BoutonsEnPlus return [AfficheVariable $Defo $Maniere $FichierOriginePourInforme] } set w [NomDe fenetre] toplevel $w wm title $w "You can edit this text ... " wm iconname $w "Edit" set LesLignesDuTexte [split $Defo "\n"] set PremiereLigne [lindex $LesLignesDuTexte 0] if {[regexp {^Nom\: } $PremiereLigne]} { scan $PremiereLigne "%s %s" Bidon Nom set FenetreInfoOuverte($Nom) $w } set Hauteur [Maxi 10 [Mini 30 [llength $LesLignesDuTexte]]] set Largeur 80 foreach Ligne $LesLignesDuTexte { set Largeur [Maxi $Largeur [string length $Ligne]] } set Largeur [Mini $Largeur 180] set Police 12 if {[info exists PolicePourEntretexte]} { set Police $PolicePourEntreTexte } text $w.text -wrap none -relief sunken -bd 2 -font [list Courier $Police] -xscrollcommand "$w.xscroll set" -yscrollcommand "$w.yscroll set" -background "lightgreen" -width $Largeur -height $Hauteur $w.text insert 0.0 $Defo focus $w.text frame $w.buttons pack $w.buttons -side bottom -fill x -pady 2m button $w.buttons.dismiss -background red -text "Dismiss" bind $w.buttons.dismiss <1> "set RetourEntreTexte($w) \"\"" pack $w.buttons.dismiss -side left -expand 1 button $w.buttons.saveas -text "Save All/ Sel." bind $w.buttons.saveas <1> "SaveAs \[$w.text get 1.0 end\]" bind $w.buttons.saveas <2> "SaveAs \[$w.text get sel.first sel.last\]" pack $w.buttons.saveas -side left -expand 1 button $w.buttons.search -text "Next/Top/New" -background yellow -foreground black bind $w.buttons.search <1> "LocaText $w.text Next" bind $w.buttons.search <2> "LocaText $w.text Top" bind $w.buttons.search <3> "LocaText $w.text New" pack $w.buttons.search -side left -expand 1 button $w.buttons.aspect -text "Font" bind $w.buttons.aspect <1> "PolicePourEntreTexte Ask $w" pack $w.buttons.aspect -side left -expand 1 button $w.buttons.browse -text "Replace/Append/Choose\n(with other file)" bind $w.buttons.browse <1> "ButineEtRemplace $w.text" bind $w.buttons.browse <2> "ButineEtAjoute $w.text" bind $w.buttons.browse <3> "ChoisiEtAjouteChampsInfo $w.text" pack $w.buttons.browse -side left -expand 1 button $w.buttons.accept -text "Accept All / Selection" -background green -foreground black bind $w.buttons.accept <1> "set RetourEntreTexte($w) \[$w.text get 1.0 end\]" bind $w.buttons.accept <2> "set RetourEntreTexte($w) \[$w.text get sel.first sel.last\]" pack $w.buttons.accept -side left -expand 1 if {$BoutonsEnPlus!=""} { set I 0 foreach {T C} $BoutonsEnPlus { incr I button $w.buttons.plus$I -text $T -background orange -foreground black bind $w.buttons.plus$I <1> $C pack $w.buttons.plus$I -side left -expand 1 } } scrollbar $w.xscroll -command "$w.text xview" -orient "horizontal" pack $w.xscroll -side bottom -fill x scrollbar $w.yscroll -command "$w.text yview" pack $w.yscroll -side right -fill y pack $w.text -expand yes -fill both tkwait variable RetourEntreTexte($w) if {[info exists RetourEntreTexte($w)]} { set Retour [set RetourEntreTexte($w)] unset RetourEntreTexte($w) } else { set Retour "" } destroy $w regsub {\n$} $Retour "" Retour return $Retour } proc EntreeNCBI {} { #rentre la ligne obtenue sur le site NCBI #voir GiToAccessWithBird qui fait la meme chose set long [llength [InterrogeListTau ListOf GI]] set GIs [join [InterrogeListTau ListOf GI] " OR "] #OR set GIs [join [InterrogeListTauControl ListOf GI] " OR "] Espionne "$GIs" Espionne "$long" } proc Entropy {LesNbDesClusters} { set NbTot 0 foreach Nb $LesNbDesClusters {set NbTot [expr $NbTot + $Nb]} set Entropy 0 foreach NbDuCluster $LesNbDesClusters { if {$NbDuCluster == 0} {continue} set Pi [expr $NbDuCluster * 1.0 / $NbTot] set PiLnPi [expr -1 * $Pi * log($Pi)/log(2)] set Entropy [expr $Entropy + $PiLnPi] } return $Entropy } proc EnvVars {} { global env #rR attention cet env est celui du cafedessciences et pas du cgi ... :'( foreach {K V} [array get env] { lappend KVs "$K=$V=" } set Text [join $KVs "\n"] return [Html_DuTexteTelQuel $Text] } proc Environ {{Comment ""} {Quoi ""}} { if {$Comment==""} { set Comment "Short" } if {$Comment=="Short"} { set Quoi "WithoutEnv" set Comment "GetIt" } return [AfficheLEnvironnementDeGscope $Comment $Quoi] } proc EnvoieDump {Quoi {Valeur ""}} { global CanalDuDump if {$Quoi == "CloseFile"} { if {[info exists CanalDuDump]} { close $CanalDuDump unset CanalDuDump } return } if {$Quoi == "Canal"} { set CanalDuDump $Valeur return $CanalDuDump } if {$Quoi == "OpenFile"} { set CanalDuDump [open $Valeur w] return $CanalDuDump } if {![info exists CanalDuDump]} {set CanalDuDump stdout} if {$Quoi == "Retourne"} { set PutOuLap "lappend" set CanalDuDump "Retour" } else { set PutOuLap "puts" } $PutOuLap $CanalDuDump "<$Quoi>" $PutOuLap $CanalDuDump "$Valeur" $PutOuLap $CanalDuDump "" if {$Quoi == "Retourne"} { return [join $Retour "\n"] } else { return } } proc EnvoieLesObjets {} { if {$::pgl(GLMode) eq "select"} { MakeOpenglSelection } else { foreach i $::StrucAVoir { set nom [DonneIdDeAccessPDB $i] $nom display } } return } proc EnvoieLesObjets2 {} { global Ltrig Lnorm TSlist Vlist if {0} { if {[info exists Vlist]} { glCallList $Vlist } else { set Vlist [glGenLists 1] glNewList $Vlist GL_COMPILE foreach t $Ltrig n $Lnorm { glBegin GL_LINES glColor4f 0.5 0.5 0.9 1.0 TraceTriangle {*}$t $n $n $n glEnd } glEndList glCallList $Vlist } } else { if {[info exists TSlist]} { glCallList $TSlist } else { set TSlist [glGenLists 1] glNewList $TSlist GL_COMPILE if {[info exists ::FBidon]} { glPushMatrix set Lball [list [list 0.0 0.0 0.0 0.3] [list 2.0 0.0 0.0 0.6] [list 0.0 2.0 0.0 1.0] [list 0.0 0.0 2.0 1.5]] set Lcyl [list 0.1 0.3 2.0 12 1] set Laxe [list 0 [list 90. 0.0 1.0 0.0] [list -90. 1.0 0.0 0.0] [list 0. 0.0 0.0 1.0]] set Lcol [list [list 1.0 1.0 1.0] [list 1.0 0.0 0.0] [list 0.0 0.6 0.0] [list 0.0 0.0 1.0] ] set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricNormals $QObj GLU_SMOOTH foreach v $Lball c $Lcol a $Laxe { lassign $v x y z r lappend c 1.0 glMaterialfv GL_FRONT GL_SPECULAR {1.0 1.0 1.0 1.0} glMaterialfv GL_FRONT GL_SHININESS 110. glMaterialfv GL_FRONT GL_EMISSION {0. 0. 0. 1.} glMaterialfv GL_FRONT GL_AMBIENT $c glMaterialfv GL_FRONT GL_DIFFUSE $c glPushMatrix glTranslatef $x $y $z glColor4fv $c gluSphere $QObj $r 16 16 glPopMatrix if {$a != 0} { glPushMatrix glRotatef {*}$a glColor4f 1.0 1.0 1.0 1.0 gluCylinder $QObj {*}$Lcyl glPopMatrix } } gluDeleteQuadric $QObj #glPopMatrix } # # Surface # #glDisable GL_DEPTH_TEST glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glDisable GL_LIGHTING #glDisable GL_COLOR_MATERIAL #glPushMatrix foreach t $Ltrig {n n n} $Lnorm { lassign $t v1 v2 v3 glBegin GL_TRIANGLES glColor4f 0.5 0.5 0.9 0.2 glNormal3fv $n glVertex3fv $v1 glNormal3fv $n glVertex3fv $v2 glNormal3fv $n glVertex3fv $v3 glEnd } if {0} { #glEnable GL_DEPTH_TEST #glBlendFunc GL_SRC_ALPHA GL_ZERO #glClearDepth 1.0 #glBlendFunc GL_SRC_ALPHA GL_ONE #glDisable GL_COLOR_MATERIAL glMaterialfv GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE {0.0 0.0 0.0 0.0} glMaterialfv GL_FRONT_AND_BACK GL_SPECULAR {1.0 1.0 1.0 1.0} glMaterialfv GL_FRONT GL_SHININESS 110. glEnable GL_LIGHTING glDepthFunc GL_EQUAL #glEnable GL_DEPTH_TEST foreach t $Ltrig {n n n} $Lnorm { lassign $t v1 v2 v3 glBegin GL_TRIANGLES glColor4f 0.5 0.5 0.9 0.1 glNormal3fv $n glVertex3fv $v1 glNormal3fv $n glVertex3fv $v2 glNormal3fv $n glVertex3fv $v3 glEnd } glMaterialfv GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE {1.0 1.0 1.0 1.0} glDepthFunc GL_LEQUAL glEnable GL_COLOR_MATERIAL } glEnable GL_LIGHTING glDisable GL_BLEND glPopMatrix glEndList glCallList $TSlist } } return } proc EnvoieLesObjets3 {} { global Ltrig Lnorm TSlist Vlist OrdEtcDir if {[info exists TSlist]} { glCallList $TSlist return } set TSlist [glGenLists 1] glNewList $TSlist GL_COMPILE set Lball [list [list 0.0 0.0 0.0 0.3] [list 2.0 0.0 0.0 0.6] [list 0.0 2.0 0.0 1.0] [list 0.0 0.0 2.0 1.5]] set Lcyl [list 0.1 0.3 2.0 12 1] set Laxe [list 0 [list 90. 0.0 1.0 0.0] [list -90. 1.0 0.0 0.0] [list 0. 0.0 0.0 1.0]] set Lcol [list [list 1.0 1.0 1.0] [list 1.0 0.0 0.0] [list 0.0 0.6 0.0] [list 0.0 0.0 1.0] ] # Trace les boules if {1} { set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricNormals $QObj GLU_SMOOTH foreach v $Lball c $Lcol a $Laxe { lassign $v x y z r lappend c 1.0 glMaterialfv GL_FRONT GL_SPECULAR {1.0 1.0 1.0 1.0} glMaterialfv GL_FRONT GL_SHININESS 110. glMaterialfv GL_FRONT GL_EMISSION {0. 0. 0. 1.} glMaterialfv GL_FRONT GL_AMBIENT $c glMaterialfv GL_FRONT GL_DIFFUSE $c glPushMatrix glTranslatef $x $y $z glColor4fv $c gluSphere $QObj $r 16 16 glPopMatrix if {$a != 0} { glPushMatrix glRotatef {*}$a glColor4f 1.0 1.0 1.0 1.0 gluCylinder $QObj {*}$Lcyl glPopMatrix } } gluDeleteQuadric $QObj } if {0} { set col [list 0.5 0.5 0.8 1.0] foreach t $Ltrig {n1 n2 n3} $Lnorm { DrawTrigNorm $t $n1 $n2 $n3 $col } } else { # # Surface # #glDisable GL_LIGHTING #glDisable GL_COLOR_MATERIAL #glDisable GL_LIGHT0 glEnable GL_CULL_FACE glCullFace GL_BACK glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glPolygonMode GL_FRONT_AND_BACK GL_FILL glHint GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST glEnable GL_TEXTURE_2D #set FileTex "test.bmp" #set FileTex "gold.jpg" #set FileTex "glass.jpg" set FileTex [file join $OrdEtcDir "fond.png"] set phImg [image create photo -file $FileTex] set imgH [image height $phImg] set imgW [image width $phImg] set imgData [tcl3dVectorFromPhoto $phImg 1] image delete $phImg set latex [tcl3dVector GLuint 1] glGenTextures 1 $latex glBindTexture GL_TEXTURE_2D [$latex get 0] gluBuild2DMipmaps GL_TEXTURE_2D $::GL_ALPHA $imgW $imgH $::GL_ALPHA GL_UNSIGNED_BYTE $imgData $imgData delete #glTexImage2D GL_TEXTURE_2D 0 $::GL_ALPHA $imgW $imgH 0 $::GL_ALPHA GL_UNSIGNED_BYTE $imgData glEnable GL_TEXTURE_GEN_S glEnable GL_TEXTURE_GEN_T glTexEnvi GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE $::GL_REPLACE glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER $::GL_LINEAR glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER $::GL_LINEAR glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_S $::GL_REPEAT glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_T $::GL_REPEAT #glTexGenfv GL_S GL_EYE_PLANE {1.0 0.0 0.0} #glTexGenfv GL_T GL_EYE_PLANE {0.0 0.0 1.0} glTexGeni GL_S GL_TEXTURE_GEN_MODE $::GL_SPHERE_MAP glTexGeni GL_T GL_TEXTURE_GEN_MODE $::GL_SPHERE_MAP #glMaterialfv GL_BACK GL_SPECULAR {0.0 0.0 0.0 1.0} glLightModelfv GL_LIGHT_MODEL_TWO_SIDE 0.0 glLightModeli GL_LIGHT_MODEL_COLOR_CONTROL $::GL_SEPARATE_SPECULAR_COLOR #glEnable GL_ALPHA_TEST #glAlphaFunc GL_GREATER 0 glColor4f 0.2 0.2 0.05 0.05 if {1} { foreach t $Ltrig {n1 n2 n3} $Lnorm { lassign $t v1 v2 v3 glBegin GL_TRIANGLES glNormal3fv $n1 glVertex3fv $v1 glNormal3fv $n2 glVertex3fv $v2 glNormal3fv $n3 glVertex3fv $v3 glEnd } } else { glPushMatrix glTranslatef 0.0 0.0 -10.0 glutSolidTeapot 2.0 glPopMatrix } glMaterialfv GL_FRONT_AND_BACK GL_SPECULAR {1.0 1.0 1.0 1.0} glMaterialfv GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE {1.0 1.0 1.0 1.0} glLightModelfv GL_LIGHT_MODEL_TWO_SIDE 1.0 #glEnable GL_COLOR_MATERIAL glLightModeli GL_LIGHT_MODEL_COLOR_CONTROL $::GL_SINGLE_COLOR glDisable GL_BLEND glDisable GL_TEXTURE_GEN_S glDisable GL_TEXTURE_GEN_T glDisable GL_TEXTURE_2D glDisable GL_CULL_FACE #glEnable GL_LIGHTING #glEnable GL_LIGHT0 } #glPopMatrix glEndList glCallList $TSlist return } proc EnvoieLesObjets4 {} { global tRNAlist Lpts pgl if {[info exists tRNAlist]} { glCallList $tRNAlist return } set tRNAlist [glGenLists 1] glNewList $tRNAlist GL_COMPILE_AND_EXECUTE set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricNormals $QObj GLU_SMOOTH gluQuadricTexture $QObj GL_TRUE set col [list 1.0 0.3 0.6 1.0] set p0 [lindex $Lpts 0] set Rad 1.0 foreach pt [lrange $Lpts 1 end] { TraceCylindre "" $QObj $p0 $pt $col $col $Rad $Rad glPushMatrix glTranslatef {*}$p0 glColor4fv $col gluSphere $QObj 1.0 32 32 glPopMatrix set p0 $pt } glPushMatrix glTranslatef {*}$pt glColor4fv $col gluSphere $QObj 1.0 16 16 glPopMatrix gluDeleteQuadric $QObj glEndList return } proc EnvoieLesObjets5 {} { global ptlist Lpts Llbl Lnrm pgl if {[info exists ptlist]} { glCallList $ptlist #AfficheLabels $Lpts $Llbl return } set ptlist [glGenLists 1] glNewList $ptlist GL_COMPILE_AND_EXECUTE puts "Lpts [llength $Lpts]" foreach {p1 p2 p3} $Lpts {n1 n2 n3} $Lnrm { glBegin GL_LINES glVertex3fv $p1 glVertex3fv $p2 glVertex3fv $p2 glVertex3fv $p3 glVertex3fv $p3 glVertex3fv $p1 glVertex3fv $p1 glVertex3fv $n1 glVertex3fv $p2 glVertex3fv $n2 glVertex3fv $p3 glVertex3fv $n3 glEnd } glEndList #AfficheLabels $Lpts $Llbl return } proc EnvoieLesObjetsTmp {} { return } proc EnvoiePrf3DDisplay {} { global FrmPref global TmpDef set td $FrmPref $td configure -text "3D Display" label $td.lcv -text "Default background Color :" button $td.bco -background [set TmpDef(CoulVariable)] -command [list ChangeCouleurVariable $td.bco] label $td.ps -text "Precompute Surface :" radiobutton $td.ysf -text "yes" -highlightthickness 0 -relief flat -variable TmpDef(PrecomputeSrf) -value 1 radiobutton $td.nsf -text "no" -highlightthickness 0 -relief flat -variable TmpDef(PrecomputeSrf) -value 0 label $td.lramp -text "Ramp Color :" frame $td.framp set i 0 foreach c [GammeDeCouleursRVB 10] { set w "$td.framp.bcol$i" button $w -bg $c -width 1 -height 1 -command [list ChangeCouleurDeLaGamme $w] grid $w -row 0 -column $i -ipadx 0 incr i } grid $td.lcv -row 0 -column 0 -sticky w -pady 10 grid $td.bco -row 0 -column 1 -sticky w grid $td.ps -row 1 -column 0 -sticky w -pady 10 grid $td.ysf -row 1 -column 1 -sticky w grid $td.nsf -row 1 -column 2 -sticky w grid $td.lramp -row 2 -column 0 -sticky w -pady {10 1} grid $td.framp -row 3 -column 0 -columnspan 2 -sticky ew return } proc EnvoiePrfConservation {} { global TypeText CoulTmp TypeCons FrmPref TmpDef set pcns $FrmPref $pcns configure -text Conservation grid columnconfig $pcns {1 2} -weight 1 label $pcns.lbl -text "Click on the buttons to change the colors assigned\nto the different conservation types" -anchor w -justify left set i 0 foreach Type [lrange $TypeCons 0 2] { incr i lassign [set CoulTmp($Type)] fg bg label $pcns.l$Type -text [set TypeText($Type)] -anchor w button $pcns.f$Type -bg $fg -activebackground $fg -width 4 -command "ChangeCouleur $Type $fg $pcns.f$Type" button $pcns.b$Type -bg $bg -activebackground $bg -width 4 -command "ChangeCouleur $Type $bg $pcns.b$Type" grid $pcns.l$Type -row $i -column 0 -sticky w grid $pcns.f$Type -row $i -column 1 -sticky w grid $pcns.b$Type -row $i -column 2 -sticky w } grid $pcns.lbl -row 0 -column 0 -columnspan 3 -sticky we -pady {10 0} label $pcns.lblm -text "For the Threshold Method :\nDefine the threshold above which a column is said\nto be conserved" -justify left label $pcns.sclb -text "Threshold " -anchor w -justify left scale $pcns.scal -from 0 -to 100 -orient horiz -showvalue true -variable TmpDef(Threshold) -width 8 -length 75 grid $pcns.lblm -row 4 -column 0 -columnspan 3 -sticky ew -pady {20 5} grid $pcns.sclb -row 5 -column 0 -columnspan 1 -sticky w grid $pcns.scal -row 5 -column 1 -columnspan 2 -sticky news label $pcns.sim -text "Use similarity" -anchor w -justify left radiobutton $pcns.simy -text "Yes" -variable TmpDef(SimiGris) -relief flat -value "1" -highlightthickness 0 radiobutton $pcns.simn -text "No" -variable TmpDef(SimiGris) -relief flat -value "0" -highlightthickness 0 grid $pcns.sim -row 6 -column 0 -sticky w grid $pcns.simy -row 6 -column 1 grid $pcns.simn -row 6 -column 2 return } proc EnvoiePrfDatabases {} { global TmpDef FrmPref set pdbs $FrmPref $pdbs configure -text Databases label $pdbs.ldbs -justify left -anchor w -text "Ordalie retrieves some information using distant\n databases. You may change the defaults ones to\n yours. IMPORTANT ! The XXXX stands for the Id\n to be retrieved, and it must be specified in your url !" -font "Helvetica 12" label $pdbs.lpdb -text "Protein Data Bank (PDB) location :" -justify left -anchor w entry $pdbs.epd1 -bg white -textvariable TmpDef(UrlPdbWorld) entry $pdbs.epd2 -bg white -textvariable TmpDef(UrlPdbHome) label $pdbs.lsrs -text "Sequence Retrieval System (SRS) location :" -justify left -anchor w entry $pdbs.esr1 -bg white -textvariable TmpDef(UrlSRSWorld) entry $pdbs.esr2 -bg white -textvariable TmpDef(UrlSRSHome) label $pdbs.lbrd -text "Biological Information Retrieval Database (BIRD) location :" -justify left -anchor w entry $pdbs.ebr1 -bg white -textvariable TmpDef(UrlPdbHoan) grid $pdbs.ldbs -row 0 -column 0 -sticky news -pady {10 5} grid $pdbs.lpdb -row 1 -column 0 -sticky news -pady {20 1} grid $pdbs.epd1 -row 2 -column 0 -sticky news grid $pdbs.epd2 -row 3 -column 0 -sticky news grid $pdbs.lsrs -row 4 -column 0 -sticky news -pady {20 1} grid $pdbs.esr1 -row 5 -column 0 -sticky news grid $pdbs.esr2 -row 6 -column 0 -sticky news grid $pdbs.lbrd -row 7 -column 0 -sticky news -pady {20 1} grid $pdbs.ebr1 -row 8 -column 0 -sticky news -pady {0 10} return } proc EnvoiePrfEditor {} { global TmpDef FrmPref TmpMap set fe $FrmPref $fe configure -text Editor # lock sequences frame $fe.floc grid $fe.floc -row 0 -column 0 -sticky ew -pady 10 label $fe.floc.loc -text "Lock Sequences :" -anchor w -justify left -fg blue radiobutton $fe.floc.lcy -text "Yes" -variable TmpDef(LockSeqs) -relief flat -value "1" -highlightthickness 0 radiobutton $fe.floc.lcn -text "No" -variable TmpDef(LockSeqs) -relief flat -value "0" -highlightthickness 0 grid $fe.floc.loc -row 0 -column 0 -sticky w grid $fe.floc.lcy -row 1 -column 0 -sticky w -padx 10 grid $fe.floc.lcn -row 1 -column 1 -sticky w # Mapping frame $fe.fmp grid $fe.fmp -row 2 -column 0 -sticky ew -pady 10 label $fe.fmp.lmap -text "Residue Mapping Colors :" -anchor w -justify left -fg blue grid $fe.fmp.lmap -row 0 -column 0 -columnspan 9 -sticky w set r -1 set p 0 foreach l [set TmpDef(Mapping)] { lassign $l n f b set TmpMap($n,fg) $f set TmpMap($n,bg) $b if {! ($p % 9)} { incr r } if {! ($p % 3)} { label $fe.fmp.lmap$p -text "$n" -anchor w -justify left } else { button $fe.fmp.bf$p -bg $f -activebackground $f -width 2 -command "ChangeCouleurMapping $f $fe.bf$r '$n' fg" button $fe.fmp.bb$p -bg $b -activebackground $b -width 1 -command "ChangeCouleurMapping $b $fe.bb$r '$n' bg" } incr p } set r 0 for {set i 0} {$i < $p} {incr i} { if {! ($i % 9)} { incr r set c 0 } if {! ($i % 3)} { set wd "lmap" ; set pd [list 2 1] } elseif {($i % 3) == 1} { set wd "bf" ; set pd [list 1 1] } else { set wd "bb" ; set pd [list 1 2] } grid $fe.fmp.${wd}$i -row $r -column $c -padx $pd incr c } return } proc EnvoiePrfGeneral {} { global TmpDef FrmPref set pgen $FrmPref $pgen configure -text "General" label $pgen.lac -text "Application background color : " -anchor w -justify left button $pgen.bac -bg [set TmpDef(BackAppli)] -height 1 -command "ChangeCouleurAppli $pgen.bac" button $pgen.bca -text "Apply" -background green1 -height 1 -command "AppliqueBackColor" label $pgen.whl -text "Mouse Wheel controls :" -anchor w -justify left label $pgen.lwy -text "Vertical scrolling " -anchor w -justify left entry $pgen.ewy -width 3 -bg white -textvariable TmpDef(DeltaYScroll) -justify right label $pgen.wuy -text " line(s)" -anchor w -justify left label $pgen.lwx -text "Horizontal scrolling " -anchor w -justify left entry $pgen.ewx -width 3 -bg white -textvariable TmpDef(DeltaXScroll) -justify right label $pgen.wux -text " character(s)" -anchor w -justify left grid $pgen.lac -row 0 -column 0 -columnspan 2 -ipady 30 -sticky ew grid $pgen.bac -row 0 -column 2 -sticky ew grid $pgen.bca -row 0 -column 3 -sticky ew grid $pgen.whl -row 1 -column 0 -columnspan 4 -pady {30 5} -sticky news grid $pgen.lwy -row 2 -column 1 -sticky news grid $pgen.ewy -row 2 -column 2 -sticky news grid $pgen.wuy -row 2 -column 3 -sticky news grid $pgen.lwx -row 3 -column 1 -sticky news grid $pgen.ewx -row 3 -column 2 -sticky news grid $pgen.wux -row 3 -column 3 -sticky news # Fontes frame $pgen.fft grid $pgen.fft -row 4 -column 0 -columnspan 4 -sticky ew -pady 10 label $pgen.fft.lfnt -text "Editor font :" -anchor w -justify left -fg blue # search all fixed fonts set Lfont [list] foreach f [font families] { set fx [font metrics [list $f 10] -fixed] if {$fx} {lappend Lfont $f} } set Lfont [lsort $Lfont] tk_optionMenu $pgen.fft.ffml TmpDef(SeqFontFaml) {*}$Lfont tk_optionMenu $pgen.fft.fsiz TmpDef(SeqFontSize) 4 6 8 10 12 14 16 18 tk_optionMenu $pgen.fft.fwgh TmpDef(SeqFontWght) normal bold grid $pgen.fft.lfnt -row 0 -column 0 -sticky w grid $pgen.fft.ffml -row 1 -column 0 -sticky ew grid $pgen.fft.fsiz -row 1 -column 1 -sticky ew grid $pgen.fft.fwgh -row 1 -column 2 -sticky ew return } proc EnvoiePrfSequences {} { global Defauts FrmPref TmpDef set root $FrmPref $root configure -text "Sequences" # Bank Prefix set pbp "$root.bp" frame $pbp label $pbp.prf -text "Remove bank prefix :" -anchor w -justify left -fg blue radiobutton $pbp.pry -text "Yes" -variable TmpDef(RemoveBankPrefix) -relief flat -value "1" radiobutton $pbp.prn -text "No" -variable TmpDef(RemoveBankPrefix) -relief flat -value "0" grid $pbp.prf -row 0 -column 0 -sticky w grid $pbp.pry -row 0 -column 1 grid $pbp.prn -row 0 -column 2 # Ajout nouveau Prefix set paj "$root.faj" set wd [PlusLongEltDe [set Defauts(PrefixesBank)]] frame $paj label $paj.alst -text "Bank prefixes :" -fg blue -anchor w -justify left frame $paj.fls listbox $paj.fls.lpr -width $wd -height 5 -highlightthickness 0 -disabledforeground black -bg white -fg black -yscrollcommand "$paj.fls.scr set" scrollbar $paj.fls.scr -width 8 -command "$paj.fls.lpr yview" $paj.fls.lpr insert end {*}[set Defauts(PrefixesBank)] $paj.fls.lpr configure -state disabled grid $paj.fls.lpr -row 0 -column 0 -sticky ew grid $paj.fls.scr -row 0 -column 1 -sticky ns label $paj.lnew -text "Type prefix to be added :" entry $paj.ent -bg white -width 15 button $paj.badd -text " Add " -bg cyan -command [list AjouteNouveauPrefixe $paj.ent $paj.fls.lpr] grid $paj.alst -row 0 -column 0 -columnspan 3 -sticky w grid $paj.fls -row 1 -column 0 -rowspan 3 -sticky ew grid $paj.lnew -row 2 -column 1 -columnspan 2 -sticky w -padx {10 1} grid $paj.ent -row 3 -column 1 -sticky w -padx {10 1} grid $paj.badd -row 3 -column 2 -sticky ew # Couleurs euka-arke-bacte set pcl "$root.fpc" frame $pcl label $pcl.llif -text "Life Domain Colors :" -fg blue -anchor w -justify left button $pcl.beuk -text "Eukaryota" -fg [set TmpDef(FgEukaryota)] -bg [set TmpDef(BgEukaryota)] -command [list ChangeCouleurLifeDomain $pcl.beuk] button $pcl.bark -text " Archaea " -fg [set TmpDef(FgArchaea)] -bg [set TmpDef(BgArchaea)] -command [list ChangeCouleurLifeDomain $pcl.bark] button $pcl.bbac -text "Bacteria" -fg [set TmpDef(FgBacteria)] -bg [set TmpDef(BgBacteria)] -command [list ChangeCouleurLifeDomain $pcl.bbac] button $pcl.bvir -text " Viruses " -fg [set TmpDef(FgViruses)] -bg [set TmpDef(BgViruses)] -command [list ChangeCouleurLifeDomain $pcl.bvir] grid $pcl.llif -row 0 -column 0 -columnspan 3 -sticky w grid $pcl.beuk -row 1 -column 0 -sticky ew grid $pcl.bark -row 1 -column 1 -sticky ew grid $pcl.bbac -row 1 -column 2 -sticky ew grid $pbp -row 0 -column 0 -sticky ew -padx 5 -pady {20 5} grid $paj -row 1 -column 0 -sticky ew -padx 5 -pady 10 grid $pcl -row 2 -column 0 -sticky ew -padx 5 -pady 5 return } proc EnvoiePrfTrees {} { global FrmPref global TmpDef set ft $FrmPref $ft configure -text Trees label $ft.lgpr -text "Gap Removal :" radiobutton $ft.gppw -text "Pairwise" -highlightthickness 0 -relief flat -variable TmpDef(TypeGapTree) -value "pairwise" radiobutton $ft.gpgb -text "Global" -highlightthickness 0 -relief flat -variable TmpDef(TypeGapTree) -value "global" label $ft.tytr -text "Type of Tree :" radiobutton $ft.tydn -text "Dendrogram" -variable TmpDef(TypeTree) -relief flat -value "dendrogram" -highlightthickness 0 radiobutton $ft.tycl -text "Circular Tree" -variable TmpDef(TypeTree) -relief flat -value "cricular" -highlightthickness 0 label $ft.fntt -text "Tree font :" tk_optionMenu $ft.fsiz TmpDef(FontSizeTree) 6 8 10 12 14 16 tk_optionMenu $ft.fwgh TmpDef(FontWghtTree) normal bold label $ft.boot -text "Bootstrap :" radiobutton $ft.boty -text "Yes" -highlightthickness 0 -relief flat -value 1 -variable TmpDef(TreeBoot) radiobutton $ft.botn -text "No" -highlightthickness 0 -relief flat -variable TmpDef(TreeBoot) -value 0 grid $ft.lgpr -row 0 -column 0 -pady 10 -sticky w grid $ft.gppw -row 0 -column 1 -sticky w grid $ft.gpgb -row 0 -column 2 -sticky w grid $ft.tytr -row 1 -column 0 -pady 10 -sticky w grid $ft.tydn -row 1 -column 1 -sticky w grid $ft.tycl -row 1 -column 2 -sticky w grid $ft.fntt -row 2 -column 0 -pady 10 -sticky w grid $ft.fsiz -row 2 -column 1 -sticky w grid $ft.fwgh -row 2 -column 2 -sticky w grid $ft.boot -row 3 -column 0 -pady 10 -sticky w grid $ft.boty -row 3 -column 1 -sticky w grid $ft.botn -row 3 -column 2 -sticky w return } proc EnvoieZoneACloner {} { global ZoneSuperposition global LNOrdali global NomNomSeq global Sequences if {! [info exists ZoneSuperposition]} {return} set ns [llength [array names Sequences]] set NmSl {} set NmSl [$NomNomSeq tag ranges SelN] if {[llength $NmSl] != 0} { foreach {a b} $NmSl { scan $a "%d.%d" y x lappend SeqARendre $y } } else { for {set i 1} {$i <= $ns} {incr i} { lappend SeqARendre $i } } foreach e $ZoneSuperposition { set x1 [lindex $e 0] set x2 [lindex $e 1] foreach y $SeqARendre { set p1 "$y.$x1" set p2 "$y.$x2" set nom [lindex $LNOrdali [expr $y-1]] set E1 [EquivPosGenPosSeq $p1] set s1 [lindex $E1 1] set E2 [EquivPosGenPosSeq $p2] set s2 [lindex $E2 1] lappend Bornes [list $nom $s1 $s2] } } AuLog " " AuLog "Zone limits for selected organisms :" AuLog "------------------------------------" foreach e $Bornes { AuLog "[lindex $e 0] [lindex $e 1] [lindex $e 2]" } return $Bornes } proc EnzymeCommission {EC {Def ""}} { global EnzymeCommission if {$EC=="1.1.-.-"} { set Spion 1 } set EC [FormateEC $EC] if {[info exists EnzymeCommission($EC)]} { return $EnzymeCommission($EC) } if {$Def=="" && [info exists EnzymeCommission("EstCharge")]} { return "" } if { ! [info exists EnzymeCommission("EstCharge")]} { set EnzymeCommission("EstCharge") 1 ChargeEnzymeCommission return [EnzymeCommission $EC] } set Papa [ECduPapa $EC] if {[regexp {[0-9]} $Papa]} { set Ancetres [EnzymeCommission $Papa] set EnzymeCommission($EC) [concat $Ancetres [list $EC $Def]] } else { set EnzymeCommission($EC) [list $EC $Def] } return $EnzymeCommission($EC) } proc Eponine {FichierTFA FichierOUT {Threshold 0.999}} { ### Execution du programme de recherche de TSS, Eponine, sur la sequence d'un fichier TFA ### if {![file exists $FichierTFA]} { return } set FileEponine /home/lardenoi/Programmes_Promoteurs/Eponine/eponine-scan.jar catch {exec java -jar $FileEponine -seq $FichierTFA -threshold $Threshold >& $FichierOUT} Message return } proc EpouvanBlast {Rep {ExpectMax 1e-4}} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] set FichierOut [open "$Rep/EpouvanBlast.csv" "w"] set FichierOut2 [open "$Rep/EpouvanFlat.csv" "w"] Espionne "$timestamp|EvouvanBlast : Start" set Liste [glob -nocomplain -directory "$Rep/" "*.blast"] foreach FichierBlast $Liste { array unset Tableau DepouilleLeBlast Tableau $FichierBlast for {set i 1} {$i <= $Tableau(NbSubject)} {incr i} { set ID $Tableau($i) if {$Tableau($ID,1,Expect) <= $ExpectMax} { # L'expect d'un hit est le premier segment d'un hit d'ou le 1 set numero [lindex [split [file tail $FichierBlast] "."] 0] set NM [lindex [split [file tail $FichierBlast] "."] 1] set DB [lindex [split $ID ":"] 0] set Entry [lindex [split [lindex [split $ID ":"] 1] "_"] 0] set Org [lindex [split [lindex [split $ID ":"] 1] "_"] 1] set Acc $Tableau($ID,Access) set Expect $Tableau($ID,1,Expect) set Identities $Tableau($ID,1,Identities) set Positive $Tableau($ID,1,Positives) set Score $Tableau($ID,1,Score) regsub -all " " $Score "_" Score set Gaps $Tableau($ID,1,Gaps) set DebutQuery $Tableau($ID,1,DQ) set FinQuery $Tableau($ID,1,FQ) set DebutTarget $Tableau($ID,1,DS) set FinTarget $Tableau($ID,1,FS) if {$Gaps == "" || $Gaps == " " || $Gaps == " "} { set Gaps "0/all 0%" } #if { $Org == "MOUSE" || $Org == "DANRE" || $Org == "DROME" || $Org == "PANTR"} { if { [string range $DB 0 5] == "REFSEQ"} { if {$DB == "REFSEQPREL" } { set LigneOut "$DB $numero $NM $Acc $Expect $Identities $Positive $Score $Gaps $DebutQuery $FinQuery $DebutTarget $FinTarget" regsub -all {\(|\)} $LigneOut "" LigneOut puts $FichierOut $LigneOut } } else { puts $FichierOut "$DB $numero $NM $Org $Entry $Acc $Expect $Identities $Positive $Score $Gaps $DebutQuery $FinQuery $DebutTarget $FinTarget" } #} } } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EvouvanBlast : End" } proc EpurerCS {FichierIn FichierOut} { # Filtre les resultats du mapping ChIP-SEQ en virant la qualite et proposant des coordonnees chromosomiqies set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "EpurerCS : Start" set FileIn [open "$FichierIn" "r"] set FileOut [open "$FichierOut" "w"] while { [gets $FileIn Ligne] >=0 } { ScanLaListe $Ligne IDQualLen Sequence MM Coord set Longueur [lindex [split $IDQualLen ":"] 2] set NomLong [lindex [split $IDQualLen ":"] 0] set Nom [lindex [split $NomLong "_"] 0] regsub -all -nocase {Homo\_sapiens\.NCBI36\.51\.dna\_rm\.chromosome\.} $Coord "" Coord regsub -all -nocase {\:|\.} $Coord " " Coord set Chrom [lindex [split $Coord " "] 0] set Start [lindex [split $Coord " "] 2] regsub -all -nocase {\_|\@|[A-Z][0-9]} $Start "" Start set End [expr $Start + $Longueur - 1] puts $FileOut "$Nom-$Longueur chr$Chrom-$Start-$End $Sequence $MM" } close $FileIn close $FileOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "EpurerCS : End" } proc EquivPosGenPosSeq {pxy} { global NomNomSeq global NomTextSeq global NomEtSeqAssPDB global Sequences lassign [split [$NomTextSeq index $pxy] "."] y x set noms [string trim [$NomNomSeq get $y.0 "$y.0 lineend"]] set nomstatus $noms if {[regexp "PDB_" $noms]} { # recherche seq attachee au pdb. C'est la premiere non-odb # en remontant la liste set mol [string range $noms 4 7] set ny [expr {$y-1}] set tst [string range [$NomNomSeq get $ny.0 "$ny.0 lineend"] 0 3] while {$tst eq "PDB_"} { incr ny -1 set tst [string range [$NomNomSeq get $ny.0 "$ny.0 lineend"] 0 3] } set idx [lsearch -regexp $NomEtSeqAssPDB $mol] set n [lindex $NomEtSeqAssPDB $idx] scan $n "%s %s %s" PDBin NmSeqAss MolId set chn [string index $MolId 5] global PDB_[set mol]_SecStr global PDB_[set mol]_Sequence set SeqAss [set Sequences($NmSeqAss)] set SeqAlignee [lindex [set PDB_[set mol]_Sequence($chn)] 1] set nomsqas [lindex $LesNom $ny] set SeqAss [lindex $LesSeq $ny] set cxseq [CorrespondanceAliPDB $MolId $x $x $SeqAss $SeqAlignee] scan $cxseq "%d %s %s" xseq tmp tmp1 } else { set s [string range [lindex $LesSeq [expr {$y-1}]] 0 $x] regsub -all {\.} $s "" lsp regsub -all " " $lsp "" lnet set xseq [string length $lnet] } return [list $x $xseq] } proc Equivalence {seq} { global LNOrdali set test [string toupper $seq] set Idx [lsearch $LNOrdali $test] if {$Idx != -1} {return $Idx} set test [string tolower $seq] set Idx [lsearch $LNOrdali $test] if {$Idx != -1} {return $Idx} FaireLire "Error ! No associated sequence !" return } proc EquivalentDansMSF {FichierMSF Pos Ref Autre} { set G [PositionDansMSF Global $FichierMSF $Pos $Ref] return [PositionDansMSF Local $FichierMSF $G $Autre] } proc ErPHICS {OrganismeQuery Chromosome Clade {Projet Fichier} {LongueurVoulueDeChaqueCote 0} {DR ""} {SequenceQuery ""}} { # A partir d'une séquence d'un organisme, récuopére les séquences alignées par l'UCSC dans tous les organismes dispos # /!\ Vérifier les MAJ UCSC opour utiliser les derniéres versions des alignements ou pour intégrer de nouveaux alignements /! # Gestion des paths d'alignements é explorer en fonction de l'organisme query set I 1 set CompteurEcrit 0 set ResultatPHICS "" set ListeDeSortie {} if { $DR != "" } { set DRnumero [string range $DR 2 2] } set Chromotexte "-Chr" set FichierDesCoordonnees [open "/tmp/Conservation/$Projet-DR3S-MM1-Chr$Chromosome.pro" "r"] set FichierDesConservations [open "/tmp/Conservation/$Projet-Conservation-MM1-Chr$Chromosome-$Clade.txt" "w"] set FichierDesRepechesHuman [open "/tmp/Conservation/$Projet-RepechesHuman-Conservation-MM1-Chr$Chromosome.txt" "w"] set FichierDesRepechesMouse [open "/tmp/Conservation/$Projet-RepechesMouse-Conservation-MM1-Chr$Chromosome.txt" "w"] set ListeDeSortie {} if { $Clade == "mouse" } { set Alignement$I "/genomics/link/UCSCAlignements/mm9/" set Espece$I "mm9" incr I } # Boucle de stockage du fichier de Coordonnees dans une liste while { [gets $FichierDesCoordonnees LigneCoordonnees] >=0 } { lappend ListeCoordonnees $LigneCoordonnees } close $FichierDesCoordonnees unset FichierDesCoordonnees #Routine de chargement des fichiers for {set Espece 1} {$Espece < $I} {incr Espece} { set NomEspece [set Espece$Espece] set NomAlignement [set Alignement$Espece] set Path "$NomAlignement chr $Chromosome .hg18. $NomEspece .net.axt" regsub -all -nocase {\s} $Path "" Path set AlignementChromosome [open "$Path" "r"] set ListeDesAlignementsDeCetteEspece {} Espionne "Stockage des alignements du chromosome $Chromosome $OrganismeQuery avec $Clade" while { [gets $AlignementChromosome LigneAli] >=0 } { if {$LigneAli != "" } { ScanLaListe $LigneAli SeqNum ChromosomeH AlignementStartQ EndH AlignementChromosomeT AlignementStartT AlignementEndT AlignementOrientationT ScoreAli set LigneEntete [string range $ChromosomeH 0 2 ] if { $LigneEntete == "chr" } { set FullLine "$ChromosomeH $AlignementStartQ $EndH $AlignementChromosomeT $AlignementStartT $AlignementEndT $AlignementOrientationT $ScoreAli" gets $AlignementChromosome SeqH ScanLaListe $SeqH SequenceH gets $AlignementChromosome SeqM ScanLaListe $SeqM SequenceM set FullLine "$FullLine $SequenceH $SequenceM" lappend ListeDesAlignementsDeCetteEspece $FullLine set $ChromosomeH "" } } } close $AlignementChromosome unset AlignementChromosome set NumeroLigneEntree -1 set PlusAucuneChanceDeTrouver "Faux" Espionne "Balayage des coordonnees en entree" foreach Coordonnee $ListeCoordonnees { set DRQuery "DR3" incr NumeroLigneEntree set NomEspece [set Espece$Espece] set QuelMismatchs1 " " set QuelMismatchs1 " " set alias1 "" set alias2 "" set alias3 "" set alias4 "" set alias5 "" set alias6 "" set alias7 "" set alias8 "" set alias9 "" ScanLaListe $Coordonnee Acc Deb Fin Orientation Prot Distance ExonOutron UtrOuCDS DebutExonOutron FinExonOuIntron DebutOuFinExonOuIntron DistanceAlaBorneDeExonOuIntron ChromosomeQuery StartQuery EndQuery OrientationQuery SequenceQuery gID displayID alias set CoordonneeCopy $Coordonnee set Coordonnee "$ChromosomeQuery $StartQuery $EndQuery $OrientationQuery $SequenceQuery" set LongueurQ [string length $SequenceQuery] set Stockage $ResultatPHICS set input 0 set RandomOuPas "NON" set Conservation 0 set ConservesSansGap 0 set ConservesMaisGap 0 set NonConserves 0 set ConservesTotaux 0 set Retenus 0 set NonRetenus 0 set LongueurSequenceTotale [expr $EndQuery - $StartQuery] foreach Alignement $ListeDesAlignementsDeCetteEspece { set Conservation 0 ScanLaListe $Alignement ChromosomeH AlignementStartQ AlignementEndQ AlignementChromosomeT AlignementStartT AlignementEndT AlignementOrientationT ScoreAli SeQ SeT set RandomOuPas "Complet" if { [regexp -- {random} $AlignementChromosomeT] } { set RandomOuPas "Random" } if { $StartQuery >= $AlignementStartQ && $EndQuery <= $AlignementEndQ} { if { $OrientationQuery == "-" } { set SequenceRegexp [NucToReverseAndComplementNuc $SequenceQuery] } else { set SequenceRegexp $SequenceQuery } set ListeDistanceAvantQueryAvecGaps [regexp -indices -all -inline -nocase "$SequenceRegexp" $SeQ] Espionne $ListeDistanceAvantQueryAvecGaps # Si on ne retrouve pas la séquence humaine, il y a un gap chez human # On récup alors une portion plus large que la séquence souris qu'on passera au crible du pattern # si on retrouve une signature VDR (2 MM allowed) , on garde. if { [llength $ListeDistanceAvantQueryAvecGaps] == 0 } { break } # Si une séquence occure plusieurs fois dans le meme alignement, on scan pour chaque occurence # On aura donc des séquences traitées autant de fois qu'elles ont de duplicons donc des doublons dans # le fichier en sortie mais donnannt une idée des génes multirégulés set Multi 0 foreach HitRegexp $ListeDistanceAvantQueryAvecGaps { incr Multi if { $Multi > 1 } { Espionne "Multiii !" } ScanLaListe $HitRegexp StartExp EndExp set DistanceAvantQueryAvecGaps $StartExp set DistanceAvantTargetAvecGaps $StartExp set SequenceAvantQueryAvecGaps [string range $SeQ 0 [expr $DistanceAvantQueryAvecGaps - 1]] set SequenceAvantTargetAvecGaps [string range $SeT 0 [expr $DistanceAvantQueryAvecGaps - 1]] regsub -all -nocase {\-} $SequenceAvantQueryAvecGaps "" SequenceAvantQuerySansGaps regsub -all -nocase {\-} $SequenceAvantTargetAvecGaps "" SequenceAvantTargetSansGaps set DistanceAvantQuerySansGaps [ llength [split $SequenceAvantQuerySansGaps "" ]] set DistanceAvantTargetSansGaps [ llength [split $SequenceAvantTargetSansGaps "" ]] set NbGapsBeforeQ [expr $DistanceAvantQueryAvecGaps - $DistanceAvantQuerySansGaps] set NbGapsBeforeT [expr $DistanceAvantTargetAvecGaps - $DistanceAvantTargetSansGaps] set SequenceQ [string range $SeQ $DistanceAvantQueryAvecGaps [expr $DistanceAvantQueryAvecGaps - 1 + $LongueurQ] ] set SequenceT [string range $SeT $DistanceAvantQueryAvecGaps [expr $DistanceAvantQueryAvecGaps - 1 + $LongueurQ] ] set ReverseQ [NucToReverseAndComplementNuc $SequenceQ] set ReverseT [NucToReverseAndComplementNuc $SequenceT] set StartT [expr $AlignementStartT + $DistanceAvantTargetSansGaps] set EndT [expr $StartT + $LongueurQ - 1] if { $AlignementOrientationT == "-" } { set ChromoSize [ChromoSize $Clade "mm9" $AlignementChromosomeT] set StartT [ expr $ChromoSize - $StartT] set EndT [expr $StartT + $LongueurQ - 1] } set DRQuery "DR3" if { [ regexp -- {-} $SequenceT ] } { # S'il y a des gaps peu nombreux et centrés, éa peut juste changer la classe de DR ==> On les stocke break } else { set GapsChezMouse 0 } if { !$GapsChezMouse } { set DRnumero [string range $DRQuery 2 2] set ConsensusCheck "X/X/X" set GapsOuPas "SansGaps" } else { set ConsensusCheck "X/X/X" set GapsOuPas "AvecGaps" } set ResultatPHICS "$AlignementChromosomeT:$StartT-$EndT/$AlignementOrientationT/$GapsOuPas/$SequenceT/$SequenceQ/$ConsensusCheck" break } unset ListeDistanceAvantQueryAvecGaps } } lappend ListeDeSortie "$Coordonnee $ResultatPHICS $gID $displayID $alias" } set Long [llength $ListeDeSortie] Espionne $Long unset ListeDesAlignementsDeCetteEspece } #Routine de vidage de la liste de sortie dans le fichier de sortie foreach LigneSortie $ListeDeSortie { puts $FichierDesConservations $LigneSortie } close $FichierDesConservations close $FichierDesRepechesMouse close $FichierDesRepechesHuman } proc ErPattern {chr MM} { # Recherche un motif en générant un mismatch (adapté récepteurs nucléaires) set Chromosome "/genomics/link/UCSCGenomes/Homo_sapiens/bigZips200603/chr$chr.fa" set DR3 0 array unset SeqTFA array set SeqTFA [readFasta $Chromosome 0] set Acc [lindex $SeqTFA(index) 0] set RegExp {AGGTCA[ATCG][ATCG][ATCG]TGACCT} append RegExp {|TCCACT[ATCG][ATCG][ATCG]ACTGGA} if { $MM > 0 } { #Mutation dans le premier hémis-site sur le brin + append RegExp {|[TGC]GGTCA[ATCG][ATCG][ATCG]TGACCT} append RegExp {|A[TAC]GTCA[ATCG][ATCG][ATCG]TGACCT} append RegExp {|AG[TAC]TCA[ATCG][ATCG][ATCG]TGACCT} append RegExp {|AGG[GAC]CA[ATCG][ATCG][ATCG]TGACCT} append RegExp {|AGGT[GAT]A[ATCG][ATCG][ATCG]TGACCT} append RegExp {|AGGTC[GCT][ATCG][ATCG][ATCG]TGACCT} #Mutation dans le second hémi-site sur le brin + append RegExp {|AGGTCA[ATCG][ATCG][ATCG][GAC]GACCT} append RegExp {|AGGTCA[ATCG][ATCG][ATCG]T[TAC]ACCT} append RegExp {|AGGTCA[ATCG][ATCG][ATCG]TG[GTC]CCT} append RegExp {|AGGTCA[ATCG][ATCG][ATCG]TGA[GAT]CT} append RegExp {|AGGTCA[ATCG][ATCG][ATCG]TGAC[GAT]T} append RegExp {|AGGTCA[ATCG][ATCG][ATCG]TGACC[GAC]} #Mutation dans le premier hémi-site sur le brin - append RegExp {|[ACG]CCACT[ATCG][ATCG][ATCG]ACTGGA} append RegExp {|T[GAT]CACT[ATCG][ATCG][ATCG]ACTGGA} append RegExp {|TC[GAT]ACT[ATCG][ATCG][ATCG]ACTGGA} append RegExp {|TCC[GCT]CT[ATCG][ATCG][ATCG]ACTGGA} append RegExp {|TCCA[GAT]T[ATCG][ATCG][ATCG]ACTGGA} append RegExp {|TCCAC[GAC][ATCG][ATCG][ATCG]ACTGGA} #Mutation dans le second hémi-site sur le brin - append RegExp {|TCCACT[ATCG][ATCG][ATCG][TCG]CTGGA} append RegExp {|TCCACT[ATCG][ATCG][ATCG]A[ATG]TGGA} append RegExp {|TCCACT[ATCG][ATCG][ATCG]AC[ACG]GGA} append RegExp {|TCCACT[ATCG][ATCG][ATCG]ACT[ACT]GA} append RegExp {|TCCACT[ATCG][ATCG][ATCG]ACTG[ACT]A} append RegExp {|TCCACT[ATCG][ATCG][ATCG]ACTGG[GCT]} } set ListeDesPositions [regexp -indices -all -inline "$RegExp" $SeqTFA($Acc,sequence)] set DR3f [open "/tmp/Conservation/Marc-DR3-MM$MM-Chr$chr.txt" "w"] foreach PaireDeBornes $ListeDesPositions { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] set Sequence [BoutADNDeUcscBoost $NewStart $NewEnd "+" "Homo_Sapiens" $chr] puts $DR3f "chr$chr $NewStart $NewEnd $Sequence" } close $DR3f } proc ErStrander {chr} { set FichierEntree [open "/tmp/Conservation/Marc-DR3-MM0-Chr$chr.txt" "r"] set FichierSortie [open "/tmp/Conservation/Marc-DR3S-MM0-Chr$chr.txt" "w"] while { [gets $FichierEntree Ligne] >=0 } { ScanLaListe $Ligne Chromosome Start End Sequence set RegExp1 {^AGGTCA} set RegExp2 {TGACCT$} set ListeDesPlus1 [regexp -indices -all -inline "$RegExp1" $Ligne] set ListeDesPlus2 [regexp -indices -all -inline "$RegExp2" $Ligne] if { [llength $ListeDesPlus1] != 0 || [llength $ListeDesPlus2] != 0 } { puts $FichierSortie "$Chromosome $Start $End + $Sequence" } else { puts $FichierSortie "$Chromosome $Start $End - $Sequence" } } } proc EraseLeCanva {K {ListeDeTags ""} {Demander ""}} { if {$Demander==""} { set Demander 0 } if {$ListeDeTags==""} { set ListeDeTags [list "all"] if {[OuiOuNon "Do I erase ALL widgets ?"]} { set Demander 0 } elseif {[OuiOuNon "Do I ask for each widget ?"]} { set Demander 1 } } set IdCadre [$K find withtag "Cadre"] foreach Tag $ListeDeTags { set LesIds [$K find withtag $Tag] foreach Id $LesIds { if {$Id==$IdCadre} { continue } set Type [$K type $Id] if {$Demander && ! [OuiOuNon "Erase $Type ?"]} { continue } $K delete $Id } } return $K } proc ErreurMath3D {Texte} { error "Error from Math3D $Texte" } proc ErreurString {} { CanalSqlString set Sql "select protein_id,annotation, preferred_name from items.proteins where preferred_name ilike 'Olfr%' and species_id = 10090 order by preferred_name;" set LesAPN [SqlExec $Sql "GetList"] foreach {P A PN} $LesAPN { if { ! [regexp {Olfr[0-9]+} $PN]} { continue } if { ! [regexp {olfactory receptor ([0-9]+)(;|$)} $A Match N]} { continue } if { $PN=="Olfr$N" } { continue } Espionne "$P $A $PN" lappend LesFaux "$P $A $PN" } AfficheListe $LesFaux } proc EspeceNormalisee {Texte} { set ListeDesMots [split $Texte " "] if { [llength $ListeDesMots] == 0 } { set Retour $Texte } if { [llength $ListeDesMots] == 1 } { set Retour [lindex $ListeDesMots 0] } if { [llength $ListeDesMots] > 1 } { set Retour [join [lrange $ListeDesMots 0 1] " "]} return [string trim $Retour "\."] } proc Espionne {{Texte ""}} { global EspionneNon if {$Texte=="SetEspionneNON"} { set EspionneNon 1 } if {$Texte=="SetEspionneOUI"} { set EspionneNon 0 } if {[info exists EspionneNon] && $EspionneNon} { return } puts $Texte return $Texte } proc EspionneL {{Liste ""}} { Espionne [join $Liste "\n"] } proc EspionneL_CACHEparRR {{Liste ""}} { #rR a copie ici le 19/10/2006 Espionne [join $Liste "\n"] } proc Espionne_CACHEparRR {{Texte ""}} { #rR a copie ici le 19/10/2006 global EspionneNon if {[info exists EspionneNon] && $EspionneNon} { return } puts $Texte } proc EssaiAttriDesSsDnaAcProt {} { set Fichier "[RepertoireDuGenome]/essai_QqAccProt.txt" set LesAcc [LesLignesDuFichier $Fichier] foreach Acc $LesAcc { set Commande "getz \"\\\[protein-acc:$Acc\\\]\" \-f id" set GetzOut [eval exec $Commande] #puts "$Acc=>$GetzOut" set LesMots [split $GetzOut " "] set Id [lindex $LesMots 3] set NM [LocUcsc $Id] puts "$Acc=>$Id=>$NM" if {![regexp {^NM_[0-9]+$} $NM]} { puts "attention pas numero NM" } } } proc EssaiAttriDesSsDnaSsProt {} { set FichierLigne "[RepertoireDuGenome]/ligssacc" set Lignes [LesLignesDuFichier $FichierLigne] foreach Ligne $Lignes { set descri [RetChip $Ligne description_memorec] set descri2 [RetChip $Ligne description_customer] #puts "$Ligne=>descriavant=$descri" set descri [string range $descri 0 [expr [string first ":" $descri] - 1 ]] #puts "$Ligne=>descriapres=$descri" lappend LaSortie "$Ligne descri2avant=$descri2" if {[regexp { } $descri2]} {puts "$Ligne=>descri2=$descri2"} } AfficheVariable [join $LaSortie "\n"] } proc EssaiAttriToutProt {} { set D 0 set K 0 set J 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] if { [regexp {^RA[0-9]+} $Des1] } {continue} if { $Ac1=="" && $Ac2=="" && ($Ac3!="" || $Ac4!="")} { #Ac3=prot_acc Ac4=prot_acc_piqor incr D set jaitrouveprot 1 puts "ligne $I Ac3=$Ac3 Ac4=$Ac4" if { [regexp "," $Ac3] || [regexp "," $Ac4] } { set pls 1 incr K } else { incr J } set LesAcs3 [split $Ac3 ","] set LesAcs4 [split $Ac4 ","] set SesAcs [concat $LesAcs3 $LesAcs4] } } Espionne "$D =nombre de prot" Espionne "$K =nombre de prot ac virgules" Espionne "$J =nombre de prot ss virgules" } proc EssaiCamemberts {N} { set Liste [list [list coucou [list 3 blue tonton tonta] [list 4 red toutou tonta] [list 2 green toutou tonta]] [list coucou2 [list 9 blue tonton tonta] [list 2 red toutou tonta] [list 2 green toutou tonta]] [list coucou3 [list 3 blue tonton tonta] [list 4 red toutou tonta] [list 2 green toutou tonta]] [list coucou4 [list 9 blue tonton tonta] [list 2 red toutou tonta] [list 2 green toutou tonta]] [list coucou5 [list 3 blue tonton tonta] [list 4 red toutou tonta] [list 2 green toutou tonta]] [list coucou6 [list 9 blue tonton tonta] [list 2 red toutou tonta] [list 2 green toutou tonta]]] IllustreLesCamemberts_bis $Liste $N Yes } proc EssaiConcat {} { set list1 {AB10 AC10 AD10} set list2 {} set list3 {NM1 NM2 NM3} set Tout [concat $list1 $list2 $list3] foreach x $Tout { puts "++$x" } } proc EssaiExtraitDefinitionRNA {Nom} { set ResultatRechercheRNA [ExtraitDefinitionRNADesInfosAutomatiques $Nom] regsub -all {\[.*\]} $ResultatRechercheRNA " " ResultatRechercheRNA regsub -all {\{.*\}} $ResultatRechercheRNA " " ResultatRechercheRNA regsub -all {\(.*\)} $ResultatRechercheRNA " " ResultatRechercheRNA set LesMotsDeLaDef [split $ResultatRechercheRNA " "] set LesBons {} foreach mot $LesMotsDeLaDef { if {![regexp -nocase "Homo" $mot] && ![regexp -nocase "sapiens" $mot] && ![regexp -nocase "mRNA" $mot] && ![regexp -nocase "complete" $mot] && ![regexp -nocase "cds" $mot] && ![regexp -nocase "protein" $mot]&& ![regexp -nocase "clone" $mot] && ![regexp -nocase "image" $mot]&& ![regexp -nocase "mgc:" $mot]} { lappend LesBons $mot } else {continue} } regsub -all "{}" $LesBons "" LesBons return $LesBons } proc EssaiHisto {} { set Liste [list "toto" [list "coucou" "red" 3 1] [list "cici" "blue" 6 1.5] [list "caca" "green" 9 1] [list "coco" "pink" -5 1] [list "coucou" "red" 3 1] [list "cici" "blue" 6 1.5] [list "caca" "green" 9 1] [list "coco" "pink" -5 1]] IllustreLHistogramme $Liste } proc EssaiLappendEtLconcat {} { set A "Q65" set B "Y58 X25" puts "lappend" lappend liste $A foreach x $liste {puts "++$x"} lappend liste $B foreach x $liste {puts "$x"} puts "lconcat" LConcat liste2 $A foreach y $liste2 {puts "--$y"} LConcat liste2 $B foreach y $liste2 {puts "$y"} } proc EssaiPhraseConsensus {{NbIndiv 20} {NbMilliSecMax 1000}} { set LesPhrases [list "chat court dans champs" "champs vert etait grand" "chien aime chat" "chien aime chat"] LesPhrasesMemorisees $LesPhrases PhraseConsensus $LesPhrases $NbIndiv $NbMilliSecMax } proc EssaiRefseq {} { set ListeFinal {NM_008361 NM_010897 NM_011113} foreach ChaqueFinal $ListeFinal { set GetzOut "" set GetzOut2 "" set Commande "getz \"\\\[refseq-acc:$ChaqueFinal\\\]\" \-f id" set GetzOut [eval exec $Commande] set Commande2 "getz \"\\\[refseq-acc:$ChaqueFinal\\\]\" \-view FastaSeqs" set GetzOut2 [eval exec $Commande2] set GetzOut2 [string range $GetzOut2 [string last ">" $GetzOut2] end] if { [regexp {^>ref.+>ref} $GetzOut2] } { puts "ATTENTION AU - 2 SEQ FASTA" } puts $GetzOut puts $GetzOut2 } } proc EssaiTcl {} { puts $::RepertoireDuGenome exit } proc EssaiToileDAraignee {} { IllustreLaToileDAraignee [list [list cucu 0 -2 5] [list cici 4 -2 5] [list caca 5 -2 5]] cc } proc EssaiToilesDAraignee {N} { set Liste [list [list coucou [list titi 2 0 9] ] [list coucou2 [list titi 2 0 9] [list titi2 6 0 21] [list titi3 0 -10 9]] [list coucou3 [list titi 2 0 9] [list titi2 6 0 21] [list titi3 0 -10 9]] [list coucou4 [list titi 2 0 9] [list titi2 6 0 21] [list titi3 0 -10 9]] [list coucou5 [list titi 2 0 9] [list titi2 6 0 21] [list titi3 0 -10 9]] [list coucou6 [list titi 2 0 9] [list titi2 6 0 21] [list titi3 0 -10 9]]] IllustreLesToilesDAraignee $Liste $N 1 1 1 1 } proc Essaitax {} { set Fichier "[RepertoireDuGenome]/fichesannotation/mycobacterium_bovis.total" set Nb 0 set Total 0 foreach Ligne [LesLignesDuFichier $Fichier] { incr Total scan $Ligne "%s %s" A B if {$B == 1} { incr Nb } } Espionne "$Nb $Total" } proc EstCeDeLADN {FichierTFA} { if {![file exists $FichierTFA]} {return ""} return [EstCeDeLADN_Seq [ContenuDuFichier $FichierTFA]] } proc EstCeDeLADN_Seq {Seq} { foreach Ligne [split $Seq "\n"] { if {[string index $Ligne 0] == ">"} {continue} regsub -all " " $Ligne "" Ligne if {[regexp -nocase {[^ATGCNXMKRSYWVHDB]} $Ligne]} {return "0"} } return "1" } proc EstCeQueCeMotEstInterdit {Mot} { global TabDesMotsInterdits if {![info exists TabDesMotsInterdits]} { set LesMotsInterdits [list "WEAKLY" "SIMILAR" "HYPOTHETICAL" "RIKEN" "CDNA" "GENE" "FULL-LENGTH" "PUTATIVE" "ENRICHED" "LIBRARY" "CLONE" "PRODUCT" "GENE" "SUPPORTED" "UNKNOWN" "EST" "UNCLASSIFIABLE"] foreach MotInterdit $LesMotsInterdits {set TabDesMotsInterdits($MotInterdit) 1} } set Mot [string toupper $Mot] if {[info exists TabDesMotsInterdits($Mot)]} {return 1} return 0 } proc EstCeQueGO1EstUnEnfantDeGO2 {GO1 GO2} { foreach Type [GODB GO $GO1 LesTypes] { foreach Ancetre [TousLesAncetresGO $Type $GO2] {if {$Ancetre == $GO2} {return 1}} } return 0 } proc EstCeQueGO1EstUnParentDeGO2 {GO1 GO2} { foreach Type [GODB GO $GO1 LesTypes] { foreach Ancetre [TousLesAncetresGO $Type $GO2] {if {$Ancetre == $GO1} {return 1}} } return 0 } proc EstCeQueLaCompositionDeLaSequenceEstConvenable {FichierTFA {Threshold_PN 25} {Threshold_PX 50} {Threshold_PXX 75}} { if {![file exists $FichierTFA]} {return 0} set LesBiais [CalculDesBiaisEnCompositionDuFichierTFA $FichierTFA] if {$LesBiais == ""} {return 0} if {$Threshold_PN < [lindex $LesBiais 1]} {return 0} if { $Threshold_PX < [lindex $LesBiais 3] || $Threshold_PX < [lindex $LesBiais 5] || $Threshold_PX < [lindex $LesBiais 7] || $Threshold_PX < [lindex $LesBiais 9]} {return 0} if { $Threshold_PXX < [lindex $LesBiais 11] || $Threshold_PXX < [lindex $LesBiais 13] || $Threshold_PXX < [lindex $LesBiais 15] || $Threshold_PXX < [lindex $LesBiais 17] || $Threshold_PXX < [lindex $LesBiais 19] || $Threshold_PXX < [lindex $LesBiais 21]} {return 0} return 1 } proc EstCeQueLaSequenceEstConvenable {Seq ADNOuPROT NbBasesContigues} { if {$ADNOuPROT == "ADN"} { if {[regexp -nocase {[ACGTURYMKWSBDHV]{$NbBasesContigues}} $Seq]} {return 1} else {return 0} } else { if {[regexp -nocase {[ARNDCQEGHILKMFPSTWYVBZ]{$NbBasesContigues}} $Seq]} {return 1} else {return 0} } } proc EstCeQueLeClusterEstSpecifiqueDesCategories {Cluster LesCategoriesSpecifiques {LesCategories ""} {Var 0.05}} { if {$LesCategories == {}} {set LesCategories [MorceauxChoisis [lsort [O2C2O LesCategories]]]} if {$LesCategories == "CategoriesInteressantes"} {set LesCategories [LesCategoriesInteressantes]} if {$LesCategories == {}} {return 0} set LesOrgasSpecifiques {} foreach CatSpe $LesCategoriesSpecifiques { set TabTmp($CatSpe) 1 foreach OrgaSpe [O2C2O Categorie $CatSpe LesOrganismesLongs] { lappend LesOrgasSpecifiques $OrgaSpe set TabTmp($OrgaSpe) 1 } } set LesOrgasSpecifiques [ElimineLesRedondancesDansUneListe $LesOrgasSpecifiques] set P [PresenceDesOrganismesDansCluster $Cluster $LesOrgasSpecifiques] set SuisJeMauvais 0 foreach Cat $LesCategories { set LesOrgasDeLaCat [O2C2O Categorie $Cat LesOrganismesLongs] set NbTotOrga [llength $LesOrgasDeLaCat] set NbOrgasSpeDansCat 0 foreach OrgaDeLaCat $LesOrgasDeLaCat { if {[info exists TabTmp($OrgaDeLaCat)]} {incr NbOrgasSpeDansCat} } set PTheo [expr $P * $NbOrgasSpeDansCat / $NbTotOrga] set PresMin [expr $PTheo * (1 - $Var)] set PresMax [expr $PTheo * (1 + $Var)] if {$PTheo == 0} {set PresMax [expr $Var * 100]} set PDeCat [O2C2O Cluster $Cluster Categorie $Cat Presence] Espionne "$Cat $NbOrgasSpeDansCat $NbTotOrga $P" Espionne "$Cat $PresMin $PTheo $PresMax $PDeCat" if { [info exists TabTmp($Cat)] && $PDeCat <= $PresMin} {Espionne "$Cat $PDeCat pas bon";set SuisJeMauvais 1;continue} if {![info exists TabTmp($Cat)] && $PresMax < $PDeCat } {Espionne "$Cat $PDeCat pas bon";set SuisJeMauvais 1;continue} if {0} { if { [info exists TabTmp($Cat)] && $PDeCat <= $PresMin} {return 0} if {![info exists TabTmp($Cat)] && $PresMax < $PDeCat } {return 0} } } if {$SuisJeMauvais} {return 0} if {[info exists TabTmp]} {unset TabTmp} return 1 } proc EstCeQueLeFichierTFAEstConvenable {FichierTFA} { if {![EstUnFichierTFA $FichierTFA]} {return 0} set Seq [QueLaSequenceDuTFA $FichierTFA] regsub -all -nocase {n|x} $Seq "" Seq if {[string length $Seq] < 10} {return 0} return 1 } proc EstCeQueLeTFAEstConvenable {FileTFA ADNOuPROT NbBasesContigues} { set Seq [TFA2SEQ $FileTFA] return [EstCeQueLaSequenceEstConvenable $Seq $ADNOuPROT $NbBasesContigues] } proc EstCeUnNomInteressant {Nom} { set Reponse 0 foreach N [LesNoms NomsInteressants] {if {$N == $Nom} {return 1}} return $Reponse } proc EstCeUnNombre {Variable} { if {![regexp {[^e0-9\-\+\.]} $Variable] } {return 1} return 0 } proc EstCeUnPoint {pos t} { global LesPointsDuGroupe LNDG # ici on travaille avec string index --> commence a 0 incr pos -1 set ng [expr {[llength $LNDG]-2}] if {$ng > 3 && [regexp "CoulG" $t]} { set nb [string range $t 5 end] set g [lindex $LNDG $nb] set str [set LesPointsDuGroupe($g)] if {[string index $str $pos] != " "} { return 1 } else { return 0 } } if {$ng <= 3} { foreach n [lrange $LNDG 1 end-1 ] { set str [set LesPointsDuGroupe($n)] if {[string index $str $pos] != " "} { return 1 } } } return 0 } proc EstCeUnTFAOuUnTFAS {{Fichier ""}} { Wup "Test si le fichier est un tfa multiple ou pas" Wup "Retourne le nombre de chevrons par fichier" if {$Fichier == "" || ! [file exists $Fichier]} {return ""} set nbChevrons 0 set nbLigne 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr nbLigne if { [string range $Ligne 0 0] == ">"} { incr nbChevrons } #Attention on doit trouver au moins un chevron dans les 3 premieres lignes if {$nbChevrons=="0" && $nbLigne > 3} {break} } close $F return "$nbChevrons" } proc EstCeUneBandePrecise {Bande} { set DernierCaractere [string index $Bande end] if {![regexp -nocase {[a-z]} $Bande]} {return 0} if {[regexp -nocase {[a-z]} $DernierCaractere] && $DernierCaractere!="r"} { return 0 } else {return 1} } proc EstCeUnmRNACompleteCDS {BanqueId Access} { set FicheInfoDuHit [PageInfo $Access genbankfull] if {$FicheInfoDuHit == ""} {set FicheInfoDuHit [PageInfo $BanqueId genbankfull]} return [EstCeUnmRNACompleteCDS_PageInfo $FicheInfoDuHit] } proc EstCeUnmRNACompleteCDS_PageInfo {FicheInfoDuHit} { if {$FicheInfoDuHit == ""} {return 0} set LOCUS [InfoDuChampsDeLaPageGenBank $FicheInfoDuHit LOCUS ] set DEFINITION [InfoDuChampsDeLaPageGenBank $FicheInfoDuHit DEFINITION] set KEYWORDS [InfoDuChampsDeLaPageGenBank $FicheInfoDuHit KEYWORDS ] ############################## if {![regexp -nocase "mRNA|DNA" $LOCUS ]} {return 0} if { [regexp "EST" $KEYWORDS ]} {return 0} if { [regexp -nocase "HTG|GSS" $KEYWORDS ]} {return 0} if { [regexp -nocase "HTG" $LOCUS ]} {return 0} if { [regexp -nocase {exon [0-9]+} $DEFINITION ]} {return 0} if { [regexp -nocase "partial cds" $DEFINITION ]} {return 0} if {![regexp { CDS [ ]*[0-9]+\.[ ]*\.[0-9]+[ ]*} $FicheInfoDuHit]} {return 0} if { [regexp { gene [ ]*[a-z<]+} $FicheInfoDuHit]} {return 0} if { [regexp { mRNA [ ]*[a-z<]+} $FicheInfoDuHit]} {return 0} if { [regexp { intron [ ]*[0-9]} $FicheInfoDuHit]} {return 0} if { [regexp { TATA_signal } $FicheInfoDuHit]} {return 0} if { [regexp { CAAT_signal } $FicheInfoDuHit]} {return 0} if { [regexp { prim_transcript } $FicheInfoDuHit]} {return 0} if { [regexp { protein_bind } $FicheInfoDuHit]} {return 0} return 1 } proc EstCeVraimentUneNouvelleSequence {TFA {NucOuPro ""}} { set Rep "" if {[regexp "nuc" $NucOuPro]} { set Rep "nuctfa" } if {[regexp "pro" $NucOuPro]} { set Rep "prottfa" } set LesMemesAlias {} set LesMemesSeq {} set LesMemesAliasEtSeq {} set SeqNouveau [QueLaSequenceDuTexteTFA $TFA] foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] set Access [EnteteDuTexteTFA $TFA "access"] set Seq [QueLaSequenceDuPAB $Nom $Rep] set MemeAlias [string equal -nocase $Access $Alias] set MemeSeq [string equal -nocase $Seq $SeqNouveau] if {$MemeAlias} { set MemeAliasText "SameAlias" } else { set MemeAliasText "DifferentAlias" } if {$MemeSeq} { set MemeSeqText "SameSeq" } else { set MemeSeqText "DifferentSeq" } set Message "$Nom $Alias $Access $MemeAliasText $MemeSeqText" if {$MemeAlias} { lappend LesMemesAlias $Message } if {$MemeSeq} { lappend LesMemesSeq $Message } if {$MemeAlias && $MemeSeq} { lappend LesMemesAliasEtSeq $Message } } if {$LesMemesAlias=={} && $LesMemesSeq=={}} { return 1 } set FA ""; set FS ""; set FX "" if {$LesMemesAlias!={}} { set FA [AfficheListe $LesMemesAlias "" "SameAlias"] } if {$LesMemesSeq !={}} { set FS [AfficheListe $LesMemesSeq "" "SameSequence"] } if {$LesMemesAlias!={} && $LesMemesSeq!={}} { set FX [AfficheListe $LesMemesAliasEtSeq "" "SameAliasAndSequence"] } set Reponse [OuiOuNon "The new sequence exists already \n Please find the hits in the displayed lists\nDo I use it as a new sequence"] if {$FA!=""} { destroy $FA } if {$FS!=""} { destroy $FS } if {$FX!=""} { destroy $FX } return $Reponse } proc EstLeBonFormat {file format} { set format [string toupper $format] set fmt [FormatDuFichierSequence $file] if {$fmt eq $format} { return 1 } else { return 0 } } proc EstPABouTROUouTRNAouARN {Texte} { if {[EstUnPAB $Texte]} { return 1 } if {[regexp {^(TROU|TRNA|ARN)[0-9]+[nN]?} $Texte]} { return 1 } return 0 } proc EstProteineDeFusion {header} { if {[llength $header] == 1} { set Lheader [split $header \n] } else { set Lheader $header } set res 0 foreach ligne $Lheader { # On fait la recherche dans la partie "COMPND" if {[string range $ligne 0 5] ne "COMPND"} {continue} set ligne [string tolower $ligne] #Si le mot "Fusion" est mentionné, on arrête if {[string first "fusion" $ligne] != -1} { return 1 } } return 0 } proc EstSimilaire {AA1 AA2} { Wup "Permet de rendre si un residu est similaire a un auzre ou pas (ou identique)" global TabSimilarite if {! [info exists TabSimilarite]} { set LesGroupesDAA [list [list A I L M V] [list F Y W] [list D E Q N] [list K R H] [list P G S T] [list C]] foreach L $LesGroupesDAA { foreach LesAA $L { foreach AA $L { set TabSimilarite($LesAA,$AA) 1 } } } } if {[info exists TabSimilarite($AA1,$AA2)]} {return 1} else {return 0} } proc EstTropLong {d maxl} { global NbLg set i [expr [string first "Length = " $d] + 9] set pl1 [string range $d $i end] set ib [string first " " $pl1] if {$ib == -1} {set ib "end"} set l [string trim [string range $pl1 0 $ib]] if {$l > $maxl || [regexp {[^0-9]} $l] || $l == ""} { incr NbLg return 1 } else { return 0 } } proc EstUnAccUniProt {Access} { #lm taken from : #lm http://www.uniprot.org/manual/accession_numbers #rR il peut y avoir un numero de version optionnel .3 ou .12 a la fin # #lm ajoute nouveau format d accession number sur 10 chars #lm pris de http://www.uniprot.org/help/accession_numbers if {[regexp -nocase {^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}(\.[0-9]+)?$} $Access]} { return 1 } else { return 0 } #lm ancien : if {[regexp -nocase {^([A-NR-Z][0-9][A-Z][A-Z0-9][A-Z0-9][0-9]|[OPQ][0-9][A-Z0-9][A-Z0-9][A-Z0-9][0-9])(\.[0-9]+)?$} $Access]} { return 1 } else { return 0 } } proc EstUnAccessDUneBanqueBlastPDeGscope {Access} { if {[regexp -nocase {[A-Z]+AllProt[\:_]} $Access]} { return 1 } return 0 } proc EstUnAccessDeHumanContig {AccessouId} { if {[regexp -nocase {^HS[0-9]{2}\:nt[0-9]{6}} $AccessouId]} {return 1} if {[regexp -nocase {^nt[0-9]{6}_[0-9]{,3}} $AccessouId]} {return 1} if {[regexp -nocase {^nt[0-9]{6}$} $AccessouId]} {return 1} return 0 } proc EstUnAccessDeQuelleBanque {Access Banque {Banques ""}} { Wup "Permet de savoir si une sequence appartient a telle ou telle banque" if {$Banques==""} { set Banques "{swissprot sptrembl sptnew}" } set Typ1 id set Typ2 acc set Commande "getz -vf acc \"(\\\[$Banques-$Typ1: $Access\\\] | \\\[$Banques-$Typ2: $Access\\\])\"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut] || $GetzOut == ""} { return "0" } else { if {[regexp -nocase "$Banque" $GetzOut]} {return 1} else {return 0} } if {0} { set Type [list "acc" "id"] set OnARien 0 foreach Typ $Type { set Commande "getz -vf acc \"\\\[$Banques-$Typ: $Access\\\]\"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$OnARien==0 && $GetzOut == ""} { continue } else { if {[regexp -nocase "$Banque" $GetzOut]} {return 1} else {return 0} break } } } return 0 } proc EstUnAccessINTERPRO {Access} { if {[regexp -nocase {^ipr[0-9]{6}$} $Access]} {return 1} return 0 } proc EstUnAccessPDB {Access} { if {[regexp -nocase {^PDB(\||\:|_[0-9])} $Access ]} { return 1 } set Access [EnlevePrefixeBank $Access] #lm On fait au plus strict #lm Un access PDB ne peut pas etre plus long que #lm 6 caracteres : XXXX_X if {[string length $Access] > 6} {return 0} if { ! [regexp -nocase {^[0-9][a-z0-9]{3}($|_$|_.$|_..$)} $Access] } { return 0 } if { [regexp -nocase {_[0-9a-z]{3,}} $Access] } { return 0 } return 1 } proc EstUnAccessPDBVOIR_DANS_GSCOPE_SEQUENCES {Access} { set Access [EnlevePrefixeBank $Access] if {! [regexp -nocase {^[0-9][a-z0-9]{3}_.{0,1}$} $Access]} {return 0} if {[regexp -nocase {_[0-9a-z]{3,}} $Access] } { return 0} return 1 } proc EstUnAccessPDB_CACHEparRR {Access} { #rR a copie ici le 19/10/2006 if {[regexp -nocase {^PDB\|} $Access ]} { return 1 } if {[regexp -nocase {^PDB\:} $Access ]} { return 1 } if {[regexp -nocase {^PDB_[0-9]} $Access ]} { return 1 } if { ! [regexp -nocase {^[0-9][a-z0-9]{3}_?} $Access] } { return 0 } if {[regexp -nocase {_[0-9a-z]{3,}} $Access] } { return 0 } return 1 } proc EstUnAccessRefseq {Access} { if {[regexp -nocase {^ref\|} $Access ]} { return 1} return 0 } proc EstUnAccessSwissprot {Access} { if {[regexp -nocase "^SW\:" $Access]} { return 1 } else { return 0} } proc EstUnAccessVARSPLIC {AccessouId} { if {[regexp -nocase {^varsplic\:} $AccessouId]} {return 1} if {[regexp -nocase {^[0-9a-z]{6,8}\-[1-9]+} $AccessouId]} {return 1} return 0 } proc EstUnAccessVarSplic {Access} { if {[regexp -nocase {^VARSPLIC} $Access ]} { return 1} if {[regexp -nocase {^[a-z0-9]{6}-{1,2}$} $Access]} { return 1} return 0 } proc EstUnBonAccess {Access} { global Commandes if { ! [regexp {[a-zA-Z0-9_]} $Access] } { return 0 } if { [string length $Access] > 70 } { return 0 } Warne "J'examine $Access" set NombreDeSequencesOK [FetchTest $Access] return $NombreDeSequencesOK } proc EstUnBonPattern {motif} { if {$motif eq ""} {return 0} set motif [string toupper $motif] if {[regexp {[^0123456789ACDEFGHIKLMNPQRSTUVWXY,~\(\)\{\}\<\>]} $motif]} { FaireLire "Error ! Unallowed character in motif !" return 0 } set npo [regsub -all {\(} $motif "" tmp] set npf [regsub -all {\)} $motif "" tmp] set nco [regsub -all {\{} $motif "" tmp] set ncf [regsub -all {\}} $motif "" tmp] if {$npo != $npf} { FaireLire "Problem with parenthesis in motif !" return 0 } if {$nco != $ncf} { FaireLire "Problem with curly braces in motif !" return 0 } set ndb [regsub -all "<" $motif "" tmp] set nfn [regsub -all ">" $motif "" tmp] if {$ndb > 1} { FaireLire "Only one '<' allowed in motif !" return 0 } if {$nfn > 1} { FaireLire "Only one '>' allowed in motif !" return 0 } if {[regsub -all {,,+} $motif "" tmp]} { FaireLire "Too many commas in motif !" return 0 } # traite NOT operateur if {[regsub -all {~~+} $motif "" tmp]} { FaireLire "Too many tildes in motif !" return 0 } if {[set Lt [regexp -all -inline -indices {~} $motif]] != {}} { set fpred 0 set newmotif "" foreach pi $Lt { lassign $pi i i append newmotif "[string range $motif $fpred $i-1]\[^" if {[string index $motif $i+1] eq "("} { set if [expr {[string first ")" $motif $i]-1}] set id [expr {$i+2}] set fpred [expr {$if+2}] } else { set id [expr {$i+1}] set if [expr {$i+1}] set fpred [expr {$if+1}] } set cnt [string map [list "," ""] [string range $motif $id $if]] append newmotif "${cnt}\]" } append newmotif [string range $motif $fpred end] set motif $newmotif } #puts "motif til : $motif" # Traite parentheses # element a repeter ou OR set Lp [regexp -all -inline -indices {\(|\)} $motif] if {$Lp != {} } { set fpred 0 set newmotif "" foreach {po pf} $Lp { lassign $po o o lassign $pf f f if {[string index $motif $o] ne "(" || [string index $motif $f] ne ")"} { FaireLire "Badly balanced parentheses in motif !" return 0 } if {($f - $o) == 1} { FaireLire "Empty parentheses in motif !" return 0 } append newmotif [string range $motif $fpred $o-1] # analyse contenu parentheses set cnt [string range $motif $o+1 $f-1] if {[string index $cnt 0] eq "," || [string index $cnt end] eq ","} { FaireLire "Missing symbol before or after ',' in parentheses !" return 0 } if {[regexp {[^ACDEFGHIKLMNPQRSTVWXY,]} $cnt]} { FaireLire "Bad symbol in parenthesis !" return 0 } append newmotif "\[[string map [list "," ""] $cnt]\]" set fpred [expr {$f+1}] } append newmotif [string range $motif $fpred end] set motif $newmotif } # Traite curly braces # Nombre de fois set Lp [regexp -all -inline -indices {\{|\}} $motif] if {$Lp != {} } { set fpred 0 set newmotif "" foreach {po pf} $Lp { lassign $po o o lassign $pf f f if {[string index $motif $o] ne "{" || [string index $motif $f] ne "}"} { FaireLire "Badly balanced curly braces !" return 0 } append newmotif [string range $motif $fpred $o] if {($f - $o) == 1} { append newmotif "0-350000" } else { # analyse contenu curly braces set cnt [string range $motif $o+1 $f-1] if {[regexp {[^0123456789,]} $cnt]} { FaireLire "Bad symbol in curly braces !" return 0 } set cnt [string map [list "," "-"] $cnt] append newmotif $cnt } set fpred $f } append newmotif [string range $motif $f end] set motif $newmotif } # on cree le motif pour regexp set motif [string map [list "<" "^" ">" "$" "X" "."] $motif] puts "motif out : $motif" return $motif } proc EstUnBonResidu {La} { if {" N " in $La && " CA " in $La && " C " in $La && " O " in $La} {return 1} if {" P " in $La && " OP1" in $La && " O5'" in $La && " C5'" in $La && " C4'" in $La} {return 1} return 0 } proc EstUnDebutActivite {Demande} { set Clef "" scan $Demande "%s" Clef return [string equal $Clef "DebutActivite"] } proc EstUnEC {e} { if {[string trim $e] eq ""} {return 1} set Le [split $e .] if {[llength $Le] != 4} {return 0} foreach e $Le { if {! [string is integer $e]} {return 0} if {$e < 0} {return 0} } return 1 } proc EstUnEtatDesLieux {Demande} { return [string equal $Demande "EtatDesLieux"] } proc EstUnEucaryote {TaxId} { if {[regexp -nocase {[a-z]} $TaxId]} { set TaxId [Tax $TaxId] } set Class [TaxClass $TaxId "" "" TaxId] return [regexp " 2759;" $Class] } proc EstUnFairePart {Demande} { set Clef "" scan $Demande "%s" Clef return [string equal $Clef "Adieu"] } proc EstUnFichierBlastP {Fichier} { set PremierMot [join [LesPremieresLignesDuFichier $Fichier 3] ""] Espionne $PremierMot return [regexp -nocase {^[ \t\n]*BLASTP} $PremierMot] } proc EstUnFichierImage {Fichier} { return [regexp -nocase {\.jpe?g$|\.gif$|.tif$|\.tiff$|\.pnm$|\.pbm$|\.tga$} $Fichier] } proc EstUnFichierTFA {Fichier {OuTFAs ""}} { if { $Fichier == "" } {return 0} set OuTFAs [string equal $OuTFAs "OuTFAs"] set f [open $Fichier r] if {[gets $f Ligne]<0 || ! [EstUneEnteteTFA $Ligne] } { close $f ; return 0} set OnExigeSequence 1 set nChevrons 1 while {[gets $f Ligne]>=0} { if { ! [regexp -nocase {[^a-z \t]} $Ligne]} { set OnExigeSequence 0 continue } if {[regexp {>} $Ligne]} { incr nChevrons if { $OnExigeSequence || ! $OuTFAs} { close $f ; return 0 } if { ! [EstUneEnteteTFA $Ligne] } { close $f ; return 0} set OnExigeSequence 1 continue } else { close $f ; return 0 } } close $f ; return $nChevrons } proc EstUnFinActivite {Demande} { set Clef "" scan $Demande "%s" Clef return [string equal $Clef "FinActivite"] } proc EstUnFragment {BID {Access ""} {DE ""}} { if {$DE!=""} { return [regexp -nocase "FRAGMENT" $DE] } return 0 } proc EstUnFragmentGrid {d} { global NbFrg if {[regexp -nocase "fragment" $d]} { incr NbFrg return 1 } else { return 0 } } proc EstUnGI {Access} { return [string is integer -strict $Access] } proc EstUnIdOuAccSwissprot {IdOuAccess} { if {[exec getz "\[UNIPROT_SWISSPROT-id:$IdOuAccess\] | \[UNIPROT_SWISSPROT-acc:$IdOuAccess\]" -f id] == ""} { return 0 } else { return 1 } } proc EstUnIdSwissProt {Access} { #rR il n'y a que 5 caracteres pour l'Id if {[regexp -nocase {^[A-Z0-9]{1,5}_[A-Z0-9]{1,5}$} $Access]} { return 1 } return 0 } proc EstUnIdUniprot {Access} { #rR il y a jusqu'à 6 caracteres pour l'Id (c'est souvent le Acc) if {[regexp -nocase {^[A-Z0-9]{1,6}_[A-Z0-9]{1,5}$} $Access]} { return 1 } return 0 } proc EstUnP {P} { return [regexp {^P[0-9]+$} $P] } proc EstUnPAB {Texte} { if {[OnTraite "REFUNI" "NonStrict"] && [regexp {^(AGAM|SCER|XTRO)[0-9\.]+} $Texte]} { return 1 } return [regexp "^[ExpressionReguliereDesPABs]$" $Texte] } proc EstUnPABMute {PAB} { return [regexp {^mutation of } [ExtraitInfo $PAB "Muted"]] } proc EstUnRefseq {Access} { return [regexp -nocase {^(REFSEQ.?\:)?(AC|AP|NC|NG|NM|NM|NP|NP|NR|NT|NW|NW|XM|XM|XP|XP|XR|YP|YP|ZP|NS)_[0-9]{6,9}(\.[0-9]+)?$} $Access] } proc EstUnSignal {Mot} { global LesSignauxConnus global RepertoireDuGenome if { ! [info exists LesSignauxConnus]} { set LesSignauxConnus [LesSignauxDuFichier "$RepertoireDuGenome/signaux/signaux.tfa" Si Se] lappend LesSignauxConnus "TOPONcoI" lappend LesSignauxConnus "AttB1Adapter" lappend LesSignauxConnus "AttB2Adapter" } if {[lsearch -exact $LesSignauxConnus $Mot]<0} { return 0 } else { return 1 } } proc EstUnSpikeRNA_ActiChip {Acc} { Wup "Permet de savoir si un access est un des SpikeRNA de la puce ActiChip" global SpikeRNA if {[info exists SpikeRNA] && [info exists SpikeRNA($Acc)]} { return [set SpikeRNA($Acc)] } else { set LesSpikeRNA [list rca rcp1 rcbl xcp2 ltp6 ltp4 cab nac1 tim PRKase] foreach S $LesSpikeRNA { set SLow [string tolower $S] set SUp [string toupper $S] set SpikeRNA($S) 1 set SpikeRNA($SLow) 1 set SpikeRNA($SUp) 1 } } if {[info exists SpikeRNA] && [info exists SpikeRNA($Acc)]} { return [set SpikeRNA($Acc)] } else { return "0" } } proc EstUnUniProt {Access} { #lM y a mieux mais c'est plus cher if {[EstUnAccUniProt $Access]} { return 1 } if {[EstUnIdUniprot $Access]} { return 1 } if {[EstUnIdSwissProt $Access]} { return 1 } return 0 } proc EstUnVarSplic {n} { if {[regexp {^VARSPLIC} $n]} { return 1 } else { return 0 } } proc EstUneBacterie {TaxId} { if {[regexp -nocase {[a-z]} $TaxId]} { set TaxId [Tax $TaxId] } set Class [TaxClass $TaxId "" "" TaxId] return [regexp " 2;" $Class] } proc EstUneEnteteTFA {Ligne} { set PremierMot "" scan $Ligne "%s" PremierMot return [regexp {^>[^>]*$} $PremierMot] } proc EstUneFeuille {Arbre} { return [expr [llength $Arbre] == 1] } proc EstUneFusion {Nom} { return [expr ! [string equal [Fusion $Nom] ""]] Wup "Rest is obsolete" if {$Nom>="MS50000"} { return 1 } else { return 0 } } proc EstUneProtease {P} { foreach PP [list "Thrombin" "TEV2" "TEVS" "Protease3C"] { if {$P==$PP} { return 1 } } return 0 } proc EstUneScience {Demande} { return [regexp -nocase {[a-z]+[a-z_0-9]*} $Demande] } proc EstUneVariableGlobaleGenerale {variable} { if { ! [regexp {^[A-Z]} $variable]} { return 1 } if {[regexp "^Fichier" $variable]} { return 1 } if {[regexp "^Gscope" $variable]} { return 1 } if {[regexp "Wscope" $variable]} { return 1 } if {[regexp "^WithPack" $variable]} { return 1 } if {[regexp "^Commande" $variable]} { return 1 } if {[regexp "^LesBouto" $variable]} { return 1 } if {[regexp "Glossaire" $variable]} { return 1 } if {[regexp "Secret" $variable]} { return 1 } if {$variable=="OutsideCSTB"} { return 1 } if {$variable=="VersionDeGscope"} { return 1 } if {$variable=="VariableADetruire"} { return 1 } if {$variable=="RepertoireDeTravail"} { return 1 } if {$variable=="QuidSeqEstDisponible"} { return 1 } if {$variable=="ChoixParmiDansListBox"} { return 1 } if {$variable=="OrthographeCanonique"} { return 1 } if {$variable=="OrthographeCanoniqueInverse"} { return 1 } return 0 } proc EstUpDown {UD} { return [regexp -nocase {^\+?(Up|Down|Here|\-?[0-9]+)$} $UD] } proc EtatBouton {b} { if {[$b cget -relief] eq "raised"} { return 0 } else { return 1 } } proc EtatDesLieuxRedondanceRefseq {} { set FichierRn "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Refseq/refseq-new-proteic_Vertebrata" set FichierRr "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Refseq/refseq-rel-proteic_Vertebrata" set Fichier $FichierRn set i 0; set j 0; set k 0 foreach AccessRn [LaSequenceDuTFAs $Fichier "LaListeDesAccess" "" "" ForceAccessFirst] { set AccessCourtRn [string range $AccessRn [expr [string first ":" $AccessRn] + 1 ] end] lappend LesRns $AccessCourtRn set TFA [LaSequenceDuTFAs $Fichier $AccessRn] set Seq [string toupper [QueLaSequenceDuTexteTFA $TFA]] set Rn($AccessCourtRn) $Seq } set Fichier $FichierRr foreach AccessRr [LaSequenceDuTFAs $Fichier "LaListeDesAccess" "" "" ForceAccessFirst] { set trouve 0; set memeseq 0 set AccessCourtRr [string range $AccessRr [expr [string first ":" $AccessRr] + 1 ] end] foreach AccessCourtRn $LesRns { if {$AccessCourtRr==$AccessCourtRn} { set trouve 1 set TFA [LaSequenceDuTFAs $Fichier $AccessRr] set Seq [string toupper [QueLaSequenceDuTexteTFA $TFA]] if {[string equal $Rn($AccessCourtRn) $Seq ]} {set memeseq 1} break } } if {$trouve} { incr i if {$memeseq} { incr j Espionne "$AccessCourtRr present dans les 2 avec meme sequence" } else { incr k Espionne "$AccessCourtRr present dans les 2 sans meme sequence" } } } Espionne "$i cas $j meme $k diff" } proc EtatDuBouton {btn} { if {[$btn cget -relief] == "raised"} { return 0 } else { return 1 } } proc EtatLockSeqs {} { global LockSeqs NomTextSeq if {[QuelMode] ne "seqlab"} {return} $NomTextSeq lock $LockSeqs return } proc EtatSeqsOut {quoi} { global LNOrdali SeqsOut NomSeqSel if {! [info exists NomSeqSel] || $NomSeqSel == {} } {return} if {$quoi eq "bloque"} { set Etat 1 } else { set Etat 0 } foreach e $NomSeqSel { lassign [split $e .] y x set seqass [string trim [lindex $LNOrdali $y]] if {$seqass eq ""} { continue } else { set SeqsOut($seqass) $Etat } } return } proc EtatsDesVE {{Qui ""} {Quoi ""} {Quoi2 ""}} { global EtatsDesVE if {$Qui=="MeilleurTask"} { set ME [EtatsDesVE Meilleur [EtatsDesVE EtatDu $Quoi] [EtatsDesVE EtatDu $Quoi2]] return [EtatsDesVE TaskDu $ME] } if {$Qui=="Meilleur"} { set I1 [lsearch -exact [EtatsDesVE LesEtatsUnis] $Quoi] set I2 [lsearch -exact [EtatsDesVE LesEtatsUnis] $Quoi2] if {$I1<$I2} { return $Quoi2 } return $Quoi } if {$Quoi==""} { if {[info exists EtatsDesVE($Qui)]} { return $EtatsDesVE($Qui) } } if {[info exists EtatsDesVE($Qui,$Quoi)]} { return $EtatsDesVE($Qui,$Quoi) } if {[info exists EtatsDesVE("EstCharge")]} { return "" } set EtatsDesVE("EstCharge") 1 set LesEtats [list Cloned Expression_tested Soluble Purified Crystallization Crystal Structure Stopped] set LesEtatsUnis [list Cloned Expression_tested Soluble Purified Crystallization Crystal Structure] set LesTasks [list Clon Expr Solu Puri InCr Crys PDB STOP] set LesReverseEtats [RetourneLaListe $LesEtats] set LesReverseEtatsUnis [RetourneLaListe $LesEtatsUnis] set EtatsDesVE(LesEtats) $LesEtats set EtatsDesVE(LesEtatsUnis) $LesEtatsUnis set EtatsDesVE(LesTasks) $LesTasks set EtatsDesVE(LesReverseEtats) $LesReverseEtats set EtatsDesVE(LesReverseEtatsUnis) $LesReverseEtatsUnis foreach Task $LesTasks Etat $LesEtats { set EtatsDesVE(EtatDu,$Task) $Etat set EtatsDesVE(TaskDu,$Etat) $Task } return [EtatsDesVE $Qui $Quoi $Quoi2] } 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 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 EtendAuxDerniersTermes {LesTermes} { if {[llength $LesTermes]<=1} { return $LesTermes } set Premier [lindex $LesTermes 0] foreach Terme $LesTermes { if {$Terme==""} { set Terme $Premier } lappend LesBonsTermes $Terme } return $LesBonsTermes } proc EtendAuxPremiersTermes {LesTermes} { if {[llength $LesTermes]<=1} { return $LesTermes } if {[lindex $LesTermes 0]!=""} { return $LesTermes } set LaSuite [EtendAuxPremiersTermes [lrange $LesTermes 1 end]] set Premier [lindex $LaSuite 0] return [concat [list $Premier] $LaSuite] } proc Etiquette {Texte} { return [format "%-30s" $Texte] } 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 EtudeDeLaLongueurDesNonLocalises {FichierClusters} { set n 0 set Lmini 10000 set Lmaxi 0 set Somme 0 foreach JR [ListeMinimumDesJR $FichierClusters] { if {[PolyLocalise $JR]=="NoLocalization"} { incr n set Longueur [SeqLength $JR] if {$Longueur==0} {continue} set Somme [expr $Somme+$Longueur] if {$Longueur<$Lmini} {set Lmini $Longueur} if {$Longueur>$Lmaxi} {set Lmaxi $Longueur} } } set Moyenne [expr $Somme/$n] return "min:$Lmini max:$Lmaxi moyenne:$Moyenne" } proc EtudeDuMaskingDesNonLocalises {FichierClusters} { set NbNo 0 set NbPart 0 set NbTotal 0 foreach JR [ListeMinimumDesJR $FichierClusters] { if {[PolyLocalise $JR]=="NoLocalization"} { if {[QuelMasqueApresReMasking $JR]=="NoRepeatToMRM"} {incr NbNo} if {[QuelMasqueApresReMasking $JR]=="PartiallyMRM"} {incr NbPart} if {[QuelMasqueApresReMasking $JR]=="TotallyMRM"} {incr NbTotal} } } return "norepeat:$NbNo partial:$NbPart total:$NbTotal" } proc EtudieAccess {Access} { set Orga [OrgaDuFetcheAccess $Access] if { $Orga == "Inconnu" } { Warne "$Access organisme inconnu .........." return } set GN $Access if {[regexp ":" $Access]} { set GN [lindex [split $Access ":"] 1] } set gn [string tolower $GN] GrapheLesBouts [glob /chop/ripp/fodbs/topdb/$Orga/bout/$gn-topdb] } proc EtudieCourant {w} { set Access [NomDuCourant $w] EtudieAccess $Access } proc EtudieLesNucleiquesDe {GenomeCourant} { global RepertoireDuGenome global ListeDeBoites Gs "Frame" if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites } set Fichiers "$RepertoireDuGenome/nuctfa/*" set Page [join [lsort [glob $Fichiers]] "\n"] return [AfficheVariable $Page "" "$Fichiers"] } proc EtudieLesProteinesDe {GenomeCourant} { global RepertoireDuGenome global ListeDeBoites Gs "Frame" if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites } set FichiersPABs [glob "$RepertoireDuGenome/gcgs/*"] set FichiersTROUs [glob "$RepertoireDuGenome/trousgcgs/*"] set Page [join [lsort [concat $FichiersPABs $FichiersTROUs]] "\n"] return [AfficheVariable $Page "" "gcgs et trous"] } proc EtudieUneSortieMSF {{NomDuFichier ""}} { global RepertoireDuGenome Gs "Frame" if { $NomDuFichier == "" } { set NomDuFichier [ButineArborescence "All"] if { $NomDuFichier == "" } { return } } return [AfficheFichier $NomDuFichier "GrandeLargeurAvecLogAvecEtudeMSF"] } proc EvalScores {f} { global LNDG SDG LNOrdali LSOrdali Sequences NomSeqSel ListeScore ListeDesPiliersDuGroupe TbScores TableScore set NomSeqSel {} DecortiqueUnTFA $f LNOrdali Sequences set nsites [LongueurDeLAlignement] set LNDG [list GroupeToutLeMonde] set SDG(GroupeToutLeMonde) $LNOrdali set Lmeth [list BILD Thompson Entrop1 Liu2 Williamson Kabat RPCA Norm SanderSP Peivar Karlin Valdar Capra Caffrey Wang] #set Lmeth [list BILD Kabat Norm Thompson] set Lmeth [list Karlin] if {"SanderSP" in $Lmeth || "Valdar" in $Lmeth} { set Lns [list] foreach s $LNOrdali { lappend LSOrdali [set Sequences($s)] lappend Lns $s [set Sequences($s)] } set LPCI [CalculeLesPCIGenerique $Lns] } CreeLesPiliers set Lpil [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)] set lgt [PlusLongEltDe $Lmeth] LesDefauts PCThrGap 0.01 set TbScores(Lcols) $Lmeth foreach m $Lmeth { if {$m ne "SanderSP" && $m ne "Valdar"} { set t [time {set sco [ScoreDe$m $Lpil]}] } else { set t [time {set sco [ScoreDe$m $Lpil $LNOrdali $LPCI]}] } set t [lindex [split [string trim $t] " "] 0] set TbScores(Time,$m) $t set TbScores(Score,$m) $sco } #timing puts "" foreach {k v} [lsort -integer -stride 2 -index 1 [array get TbScores "Time,*"]] { lassign [split $k ,] tmp mt puts [format "%-${lgt}s %d" $mt $v] } # resultats if {1} { puts "" set unit " %6.3f" set fmt "%-${lgt}s |[string repeat $unit $nsites]" foreach a [lsort [array names TbScores "Score,*"]] { set m [lindex [split $a ,] 1] puts [format $fmt $m {*}[set TbScores($a)]] } } # Histogramme if {0} { set K [UnCanva 600 600] $K configure -background black set Lmeth [list Thompson Kabat Williamson Norm] set Lcolor [list orange cyan green1 white magenta yellow ] set icol 0 foreach m $Lmeth { set color [lindex $Lcolor $icol] set Lval [list] foreach v $TbScores(Score,$m) { if {$v != -999.0} { lappend Lval $v } } set Lval [Standardise $Lval] CreeHistogramme $Lval 100 graph $K $color set Lval [lsort -real $Lval] puts "$m [lindex $Lval 0] [lindex $Lval end]" incr icol } } return #exit } proc Evaluation {LIndividu} { set PremierMot [lindex $LIndividu 1 ] set BonusPremier [InterrogeLesEffectifsDesMots Mot $PremierMot nPremier] set DernierMot [lindex $LIndividu end] set BonusDernier [InterrogeLesEffectifsDesMots Mot $PremierMot nDernier] set Score [expr $BonusPremier + $BonusDernier] set ScoreNegatif [expr -1 * [llength [InterrogeLesEffectifsDesMots LesMots]]] set LeNouvelIndividu $LIndividu set ValPrec "" foreach Val [lrange $LIndividu 1 end] { if {$ValPrec == ""} {set ValPrec $Val;continue} if {![info exists Couple($ValPrec,$Val)]} {set Couple($ValPrec,$Val) 0} if {[InterrogeLesEffectifsDesMots Couple $ValPrec $Val nMax] == ""} { set Score [expr $Score + $ScoreNegatif] } else { set Score [expr $Score + [InterrogeLesEffectifsDesMots Couple $ValPrec $Val nMax] - [set Couple($ValPrec,$Val)]] } incr Couple($ValPrec,$Val) set ValPrec $Val } return [lreplace $LeNouvelIndividu 0 0 $Score] } proc EvalueLeDesign {PAB Dir} { Wup "Petit test rapide pour savoir si le design c bien passe en utilisant le fichier .log" Wup "Utiliser dans IllustreOligo et GUI pour mettre un warning si necessaire au design" Wup "Attention on ne recalcule rien sinon voir ReturnBestHitInDatabase ou CheckForBestHitInDatabase" set FichierLog "$Dir/${PAB}.log" set NomDeFenetre "" set NoAccess 0 set i 0 if {[file exists $FichierLog]} { set F [open "$FichierLog"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {[regexp -nocase "Query has no equivalent sequence" $Ligne]} {set NoAccess 1;break} if {$i=="6"} {break} } close $F if {$NoAccess} { set TailleTotale [expr 35 + [string length $Dir] + [string length $PAB]] if {$TailleTotale < 65} { set TailleSurDeux [expr (65 -9)/2] } elseif {$TailleTotale > 134} { set TailleTotale 134 set TailleSurDeux [format "%.0f" [expr $TailleTotale/2 -4.5]] } else { set TailleSurDeux [format "%.0f" [expr $TailleTotale/2 -4.5]] } set Texte " [string repeat "-" $TailleSurDeux] Warning [string repeat "-" $TailleSurDeux]\n Be careful with the design of $PAB in $Dir.\n No reliable access found in blast searches.\n You should check yourself the Blast results or use Check Best Hit.\n If it is verified, you should only trust the white (oligo) boxes." set NomDeFenetre [FaireSavoir_Multi $Texte "Warning"] } } return "$NomDeFenetre" } proc EvalueSiBidir {} { # Verifie si les candidats a la bidir attitude sont sur le meme chromosome et a quelle distance set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EvalueSiBidir : Start" set FichierIn [open "$Rep/ReapparierLesBidir.csv" "r"] set FichierOut [open "$Rep/EvalueSiBidir.csv" "r"] set Lus 0 set Ecrits 0 set Bidir 0 set SameStrand 0 set OtherChromosom 0 while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne Access1 Access2 Distance numero1 NM1 NP1 NMt1 Organism1 Expect1 chrom1 start1 end1 strand1 numero2 NM2 NP2 NMt2 Organism2 Expect2 chrom2 start2 end2 strand2 incr Lus if {$chrom1 == $chrom2 } { if { $strand1 != $strand2 } { if {$strand1 == "+" && $strand2 == "-"} { set DistanceP [expr $start1 - $end2] } elseif {$strand1 == "-" && $strand2 == "+"} { set DistanceP [expr $start2 - $end1] } } else { set DistanceP "SameStrand" incr SameStrand } } else { set DistanceP "OtherChromosom" incr OtherChromosom } set LigneOut "$Access1 $Access2 $Distance $DistanceP $numero1 $NM1 $NP1 $NMt1 $Organism1 $Expect1 $chrom1 $start1 $end1 $strand1 $numero2 $NM2 $NP2 $NMt2 $Organism2 $Expect2 $chrom2 $start2 $end2 $strand2" puts $FichierOut $Ligneout incr Ecrits } close $FichierIn close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EvalueSiBidir : End" Espionne "$timestamp|EvalueSiBidir : Read = $Lus" Espionne "$timestamp|EvalueSiBidir : Ecrits = $Ecrits" Espionne "$timestamp|EvalueSiBidir : * Bidir: $Bidir" Espionne "$timestamp|EvalueSiBidir : * SameStrand: $SameStrand" Espionne "$timestamp|EvalueSiBidir : * OtherChromosom = $OtherChromosom" } proc EvaluerRGKTSA {Path} { # Détecte les fichiers avec deux MM et un blanc entre les deux et les recolle (bidouille) set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EvaluerRGKTSA : Start" set FichierEntree [open "$Path.prom" "r"] set FichierSortie [open "$Path.coord" "w"] while { [gets $FichierEntree Ligne] >=0 } { ScanLaListe $Ligne DR ID chrom start end strand sequence set score [RGKTSA $sequence $DR] puts $FichierSortie "$DR $ID $chrom $start $end $strand $sequence $score" } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|EvaluerRGKTSA : End" close $FichierEntree close $FichierSortie } proc EvaluerXP {Path} { # Sert à évaluer les SBS validés expérimentalement grace à la fonction de score de STAF Espionne "EvaluerXP: Start" set I 0 set ScoreTotal 0 set Score 0 set ScoreMoyen 0 set FichierDesSequences [open "$Path.seq" "r"] set FichierDesSequencesScorees [open "$Path.lsco" "w"] while { [gets $FichierDesSequences Ligne] >=0 } { ScanLaListe $Ligne Sequence set Score [StafLogScoreFunction $Sequence] if { $Score > 0 } { incr I } Espionne $Score puts $FichierDesSequencesScorees $Score set ScoreTotal [expr $ScoreTotal + $Score] } set ScoreMoyen [expr $ScoreTotal/ $I] Espionne "EvaluerXP: Av. Score = $ScoreMoyen (on $I sequences) " Espionne "EvaluerXP: End" close $FichierDesSequencesScorees close $FichierDesSequences } proc EventNullPourNoms {} { global NomNomSeq $NomNomSeq insert 1.0 "x" $NomNomSeq delete 1.0 $NomNomSeq edit separator return } proc EventNullPourSeqs {} { global NomTextSeq $NomTextSeq insert 1.0 "x" $NomTextSeq delete 1.0 $NomTextSeq edit separator return } proc EviSummary {{GN ""}} { set LesLignes {} foreach Nom [ListeDesPABs] { if { ! [regexp -nocase $GN [ExtraitInfo $Nom "ValiGN"]]} { continue } set DE [ExtraitInfo $Nom "ValiDE"] set OS [ExtraitInfo $Nom "Organism"] set Ligne "$Nom;$GN;$OS;$DE" lappend LesLignes $Ligne } return [join $LesLignes "\n"] } proc EvolHHuProDir {} { return "[HomeRipp]/EvolHHuPro" } proc EvolutionDesDDAvecProteineNotHuman {FichierBestOverlapAvecDef FichierLoc FichierEST FichierSortie} { foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {continue} set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] if {![regexp "from Homo sapiens" $EnteteProttfa]} {lappend Liste $DD} } Espionne [llength $Liste] set L [lsort -unique $Liste] Espionne [llength $L] foreach Nom $L { set FichiermRNAHs "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {![file exists $FichiermRNAHs]} {lappend LesNotHuman $Nom} else {lappend LesHumanHomolog $Nom} } Espionne "nb not human: [llength $LesNotHuman] - nb human homolog: [llength $LesHumanHomolog]" #return $LesHumanHomolog #return $LesNotHuman #SauveLesLignes $ListeTriee dans $FichierSortie foreach Nom $LesNotHuman { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs!="" && $LesLocs!=" "} {lappend LesLocalises $Nom} else {lappend LesNoLoc $Nom} } Espionne "[llength $LesNoLoc] noloc" set L [lsort -unique $LesNoLoc] Espionne [llength $L] SauveLesLignes $L dans $FichierSortie exit #Espionne "[llength $LesLocalises] localises " #return $LesLocalises Espionne [llength [lsort -unique $LesNotHuman]] foreach Nom $LesNoLoc { set EST [InterrogeSelectedEST $FichierEST Nom $Nom LesAccess] if {$EST!=""} {lappend LesEST $Nom} } Espionne $LesEST Espionne [llength $LesEST] set Ltriee [lsort -unique $LesEST] Espionne [llength $Ltriee] foreach Nom $LesNoLoc { set NM [InterrogeFichierBestNMavecDef $FichierBestOverlapAvecDef $Nom NM] if {$NM=="" || $NM==" "} {lappend LesSansRefSeq $Nom} else {Espionne "avec nm: $Nom $NM"} } Espionne [llength $LesSansRefSeq] set L [lsort -unique $LesSansRefSeq] Espionne [llength $L] #return $Ltriee } proc ExamSupOutliers {mref mrot d f} { global db StrucAVoir set Lf $::TabSF($mref,PFAM-A) puts "Domaines PFAM" foreach f $Lf { DecortiqueUneFeature $f d f col score note set ds [DonnePosGS $mref $d] set fs [DonnePosGS $mref $f] puts "$note $ds $fs" } $db eval {begin transaction} # reference set iref [DonneIdDeAccessPDB $mref] set cref [DonneChainDeAccessPDB $mref] set Lref [$db eval {select a.x,a.y,a.z,r.rnbr from atoms as a, chains as c, pdb as p, residues as r where p.name=$iref and c.pk_pdb=p.pk_pdb and c.name=$cref and a.pk_chains=c.pk_chains and a.aname = ' CA ' and a.pk_residues = r.pk_residues and r.type = 'Protein'}] # rotated set irot [DonneIdDeAccessPDB $mrot] set crot [DonneChainDeAccessPDB $mrot] set Lrot [$db eval {select a.x,a.y,a.z,r.rnbr from atoms as a, chains as c, pdb as p, residues as r where p.name=$irot and c.pk_pdb=p.pk_pdb and c.name=$crot and a.pk_chains=c.pk_chains and a.aname = ' CA ' and a.pk_residues = r.pk_residues and r.type = 'Protein'}] $db eval {commit} # compute set moy 0.0 ; set m2 0.0 set rms 0.0 set nat 0 foreach {xr yr zr nr} $Lref {xo yo zo no} $Lrot { incr nat set xd [expr {$xo-$xr}] set yd [expr {$yo-$yr}] set zd [expr {$zo-$zr}] set d [expr {sqrt($xd**2+$yd**2+$zd**2)}] set T($nr,$no) $d set moy [expr {$moy + $d}] set m2 [expr {$m2 + $d*$d}] set rms [expr {$rms + $d*$d}] } set moy [expr {1.0*$moy/$nat}] set m2 [expr {1.0*$m2/$nat}] set rms [expr {sqrt(1.0*$rms/$nat)}] set sd [expr {1.0*$m2 - $moy*$moy}] puts [format "stats\nnatoms $nat moy %6.3f sd %6.3f rms %6.3f" $moy $sd $rms] set Lsd [list] ; set Lrms [list] foreach k [array names T] { lassign [split $k ,] n1 n2 set n1 [string trimleft $n1 0] set d $T($k) if {$d > ($moy + 1.5*$sd)} { lappend Lsd $n1 } if {$d > (1.5*$rms)} { lappend Lrms $n1 } } puts "> moy + 1.5 * sd :" set Lsd [lsort -integer $Lsd] set d -1 ; set f -1 ; set dep 1 set res "" foreach e $Lsd { if {$e != ($f + 1)} { if {! $dep} { if {$d != $f} { append res "$d-$f " } else { append res "$d " } } set d $e set f $e } else { set f $e } set dep 0 } puts "$res" puts "> 1.5 * rms:" set Lrms [lsort -integer $Lrms] set d -1 ; set f -1 ; set dep 1 set res "" foreach e $Lrms { if {$e != ($f + 1)} { if {! $dep} { if {$d != $f} { append res "$d-$f " } else { append res "$d " } } set d $e set f $e } else { set f $e } set dep 0 } puts "$res" return } proc ExchangeColumns {FilIn {FilOut ""}} { if {$FilOut==""} { set FileOut $FilIn set Ext ".txt" regexp {\.[^\.]+$} $FilOut Ext regsub {\.[^\.]+$} $FilOut "" FilOut append FilOut "_OK_$Ext" } foreach Ligne [LesLignesDuFichier $FilIn] { if { ! [regexp {\s} $Ligne Sep]} { lappend LeOut $Ligne ; continue } scan $Ligne "%s %s" A B lappend LeOut "$B$Sep$A" } return [SauveLesLignes $LeOut dans $FilOut] } proc ExecPath {prog} { # set paths(blastall) "/biolo/ncbi/bin/blastall" set paths(blastall) "blastall" set paths(ballast) "ballast" set paths(clustalw) "/biolo/clustal/bin/clustalw" set paths(rascal) "/biolo/rascal/rascal" set paths(normd) "/biolo/normd/normd" set paths(leon) "/biolo/leon/leon" set paths(cluspack) "/biolo/cluspack/bin/cluspack" set paths(macsim) "/biolo/macsim/macsim" set paths(cap3) "/biolo/cap3/cap3" return $paths($prog) } proc Execute {Commande} { return [eval $Commande] } proc ExecuteLaSelectionDeCheck {Selection} { set LesCommandes {} foreach Ligne [split $Selection "\n"] { if { ! [regexp " run " $Ligne]} { continue } lappend LesCommandes [StringSuivant " run " dans $Ligne] } set N [llength $LesCommandes] if {$N==0} { return 0 } if {$N==1 && ! [OuiOuNon "Do I execute $LesCommandes ?"]} { return [expr -$N] } if {$N>1 && ! [OuiOuNon "Do I execute all these commands\n[join $LesCommandes "\n"]\n ?"]} { FaireLire "Please select the right one and retry." return [expr -$N] } foreach Commande $LesCommandes { eval exec gscope $Commande & } return $N } proc ExecuteMacsim {FichierMsf FichierRsf} { Wup "On retourne vide si ca se passe bien, Message d'erreur si non" # exec /biolo/macsim/macsim $FichierMsf $FichierRsf set Nom [file tail $FichierMsf] regsub {\..*} $Nom "" Nom if {$Nom=="HSAP08771"} { Espionne "ExecuteMacsim $FichierMsf $FichierRsf \nen [pwd]" set RepTest "/genomics/link/CilioCarta/test" if {[catch {exec $RepTest/mon_macsim $FichierMsf $FichierRsf >& $RepTest/$Nom.log } Message]} { return $Message } return "" } Espionne "/biolo/macsim/macsim $FichierMsf $FichierRsf" if {[catch {exec /biolo/macsim/macsim $FichierMsf $FichierRsf >& /dev/null } Message]} { return $Message } return "" } proc ExecuteUnBoutonDe {w} { set Tabulation [string repeat " " [string length "Button"]] set Sel "" catch {set Sel [selection get]} foreach Bouton [LesBoutonsDeLaFrame $w.buttons] { set Texte [lindex [$Bouton configure -text] 4] regsub -all "\n" $Texte " ++ " Texte lappend LesActions "Button $Bouton $Texte" foreach SeqAct [QueFaitLeBouton $Bouton] { regsub -nocase {<[a-z0-9\-]*> } $SeqAct "" Act regsub {\[selection get\]} $Act "\{$Sel\}" Act lappend LesActions "$Tabulation $Act" } } set Action [ChoixParmi $LesActions] if {$Action=="" || [regexp "^Button" $Action]} { return "" } return [eval $Action] } proc ExisteAABizarres {nseq} { set ya 0 if {[info exists ::Warn($nseq)] && $::Warn($nseq)} { return 1 } else { return 0 } } proc ExisteAussiDansZCB {} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/ExisteAussiDansZCB.lst"] { scan $Ligne "%s %s %s %s %d" Nom B H P N set Nar [Narcisse $Nom] if {$N==0} { Espionne "$Nom $Nar" lappend LesNulsParNom "$Nom $Nar" lappend LesNulsParNar "$Nar $Nom" continue } set Bla [ContenuDuFichier "[RepertoireDuGenome]/blastnAllnucZCB/$Nom"] set Hit [StringApres "AllnucZCB:" dans $Bla] set NCB [QuestionDeScience ZCB "ret Narcisse $Hit"] Espionne "$Nom $Nar $Hit $NCB" lappend LesHitsParNom "$Nom $Nar $Hit $NCB" lappend LesHitsParNar "$Nar $Nom $Hit $NCB" lappend LesHitsParHit "$Hit $NCB $Nom $Nar " lappend LesHitsParNCB "$NCB $Hit $Nar $Nom " } set LesHitsParNom [lsort $LesHitsParNom] set LesHitsParNar [lsort $LesHitsParNar] set LesHitsParHit [lsort $LesHitsParHit] set LesHitsParNCB [lsort $LesHitsParNCB] set LesNulsParNom [lsort $LesNulsParNom] set LesNulsParNar [lsort $LesNulsParNar] SauveLesLignes $LesHitsParNom dans "[RepertoireDuGenome]/fiches/LesHitsParNomGC" SauveLesLignes $LesHitsParNar dans "[RepertoireDuGenome]/fiches/LesHitsParGC" SauveLesLignes $LesHitsParHit dans "[RepertoireDuGenome]/fiches/LesHitsParNomCB" SauveLesLignes $LesHitsParNCB dans "[RepertoireDuGenome]/fiches/LesHitsParCB" SauveLesLignes $LesNulsParNom dans "[RepertoireDuGenome]/fiches/LesNulsParNomGC" SauveLesLignes $LesNulsParNar dans "[RepertoireDuGenome]/fiches/LesNulsParNarGC" exit } proc ExisteOrthologueDans {Orga Nom} { global OrthologueDans global RepertoireDuGenome if { ! [info exists OrthologueDans]} { ChargeOrthologueDans } if { [info exists OrthologueDans($Orga,$Nom)] && [set OrthologueDans($Orga,$Nom)] } { return 1 } else { return 0 } } proc ExistingKoAnnoAccess {Access} { set RepParent [OnGoingDir] set FichierXml "$RepParent/$Access.xml" if {[FileAbsent $FichierXml]} { set FichierXml [CreeXmlAnnoteParTousPourUnAccess $Access $RepParent] } if {$FichierXml==""} { return "Sorry,but something went wrong. I didn't get a result." } set Query "HtmlFromXmlMacsim&$FichierXml&Ftype_AllPredictions" set Url "[WscopeScience]&$Query" return [HttpCopy $Url] } proc ExistingKoAnnoMsf {NomMsf} { set RepParent "[OnGoingDir]/$NomMsf" set FichierMsf "$RepParent/$NomMsf.msf" set FichierXml "$RepParent/$NomMsf.xml" if {[FileAbsent $FichierXml]} { set FichierXml [CreeXmlAnnotePourUnMsf $FichierMsf $RepParent] } if {$FichierXml==""} { return "Sorry,but something went wrong. I didn't get a result." } set Query "HtmlFromXmlMacsim&$FichierXml" set Url "[WscopeScience]&$Query" return [HttpCopy $Url] } proc ExistingKoAnnoResults {Access {Rep ""}} { if {$Rep==""} { set Rep "[OnGoingDir]/$Access" } set LesRefText {} foreach FichierResultat [glob -nocomplain "$Rep/{$Access}_*"] { regsub -nocase {Resultat\.html$} $FichierResultat "" AP set P [StringApres "${Access}_" dans $AP] if {[QuelAnnoteXmlPour $P]==""} { continue } set P [BonneOrthographePour $P] set Queue [StringSuivant "OnGoing/" dans $FichierResultat] set Ref "[WscopeScience]&FileMoi&OnGoing&$Queue&TelQuel" lappend LesRefText $Ref lappend LesRefText $P } return [Html_ListOfRefs $LesRefText "Disorder predictions for $Access"] } proc ExitProg {} { exit } proc ExonAspRS {} { set ldf "572 698 699 798 799 865 866 967 968 1063 1064 1187 1188 1234 1235 1341 1342 1411 1412 1591 1592 1699 1700 1762 1763 1915 1916 2134 2135 2245 2246 2321 2322 2509" set Lv [split $ldf \n] set o [open exon_human.feat w] puts $o "FEATURE Exons" set i 0 set d0 [lindex [lindex $Lv 0] 0] incr d0 -1 foreach l $Lv { lassign [string trim $l] d f if {($d - $d0) == 1} { set d 1 } else { set d [expr {($d-$d0)/3}] } set f [expr {(($f-$d0)-2)/3}] if {! ($i%2)} { set col green1 } else { set col yellow } puts $o "Q6PI48;LOCAL;$d;$f;$col;0.0;exon_[expr {$i+1}]" incr i } close $o exit } proc ExonicMapHuman {FileTFA FileBlast FileOut {AvecBlastOuSansBlast SansBlast} {var 0.05} {SeuilId 0.0} {SplitWithGap Yes} {AlertId 0.95} {TailleMin 10} {NbSubject 150} {ExpectDeRef 0.001}} { set FichierQuery $FileTFA set FichierBlast $FileBlast set FichierOut $FileOut if {![file exists $FichierBlast]} {return} if {![file exists $FichierQuery]} {return} Espionne "$FileTFA -> Opening the blast file" set NbSubject [AskBlast $FichierBlast NbSubject] if {$NbSubject == "" || $NbSubject == 0} {Espionne "$FileTFA -> $FichierBlast no hits found";return} set TailleQuery [AskBlast $FichierBlast Taille ] set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] Espionne "$FileTFA -> Scanning all the contig" set NbMax 0 set NbMax_Min [expr $NbMax * (1 - $var)] set LesBanqueId {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlast Subject $i] if {![string equal -nocase "hs" [string range $BId 0 1]]} {continue} regexp -nocase {([0-9a-z_]*):([0-9a-z]*)} $BId tmp Chromosome Contig if {[info exists TabTmp($BId,Nb) ]} {continue} set TabTmp($BId,Nb) 0 Espionne "$FileTFA -> $BId" foreach Base [LeProfilDeLAlignementDeLaQuery $FichierBlast $BId "BothSens"] {if {$Base != 0} {incr TabTmp($BId,Nb)}} if {[set TabTmp($BId,Nb)] < $NbMax_Min} {continue} lappend LesBanqueId $BId if {[set TabTmp($BId,Nb)] < $NbMax } {continue} set NbMax [set TabTmp($BId,Nb)] set NbMax_Min [expr $NbMax * (1 - $var)] set LesVieuxBanqueId $LesBanqueId set LesBanqueId {} foreach BId $LesVieuxBanqueId { if {[set TabTmp($BId,Nb)] < $NbMax_Min} {continue} lappend LesBanqueId $BId } } if {[info exists TabTmp]} {unset TabTmp} Espionne "$FileTFA -> done" Espionne "$FileTFA -> Computing the long area" set LesGrandesRegions [LesGrandesRegionsDeLaQueryDuBlast $FichierBlast $ExpectDeRef $NbSubject $SeuilId Yes $LesBanqueId] Espionne "$FileTFA -> Computing the short area" set LesPetitesRegions [LesPetitesRegionsDesGrandesRegions $LesGrandesRegions ] Espionne "$FileTFA -> Computing the informations of the short area" set LesInfos [LesInfosDesRegionsDansLeBlast $FichierBlast $LesPetitesRegions $LesBanqueId $SeuilId "Contig"] set LesInfos [lsort -integer -index 0 $LesInfos] Espionne "$FileTFA -> done" set LesInfos [LaConservationDesMeilleuresRegionsRepetees $LesInfos $var $TailleMin] if {0} { Espionne "" Espionne $LesGrandesRegions Espionne "" Espionne $LesPetitesRegions Espionne "" Espionne $LesInfos } Espionne "$FileTFA -> Computing the best alignment for the exonic map" set i 0 set EstCeQuIlYAUneDiff 1 while {$EstCeQuIlYAUneDiff} { incr i if {$i == 20} {break} set LesRegionsUniquesParContig {} set LesRegionsRepeteesParContig {} foreach LInfoDeLaRegion $LesInfos { set NbArea [lindex $LInfoDeLaRegion 3] if {1 == $NbArea} {lappend LesRegionsUniquesParContig $LInfoDeLaRegion} if {1 < $NbArea} {lappend LesRegionsRepeteesParContig $LInfoDeLaRegion} } set LesRegionsDansLeBonOrdreDesContigs [LesRegionsUniquesDesContigsDansLeBonOrdre $LesRegionsUniquesParContig] set LesRegionsUniquesEtRepetees [LInsertionDesRegionsRepetees $LesRegionsRepeteesParContig $LesRegionsDansLeBonOrdreDesContigs $TailleQuery] set AiJeVuUneDiff 0 if {$LesInfos != $LesRegionsUniquesEtRepetees} {set AiJeVuUneDiff 1} if {$AiJeVuUneDiff} { set LesInfos $LesRegionsUniquesEtRepetees } else { set EstCeQuIlYAUneDiff 0 } if {0} { Espionne "#########ITERATION $i###########" EspionneL $LesInfos Espionne "" EspionneL $LesRegionsUniquesParContig Espionne "" EspionneL $LesRegionsDansLeBonOrdreDesContigs Espionne "" EspionneL $LesRegionsUniquesEtRepetees } } Espionne "$FileTFA -> done" set LesRegionsUniquesRepeteesEtAbsentes [LInsertionDesRegionsAbsentes $LesRegionsUniquesEtRepetees $TailleQuery] if {$AvecBlastOuSansBlast == "AvecBlast" && $TypeDeBlast == "BLASTN"} { set LesRegionsUniquesRepeteesEtAbsentes [LesRegionsAvecLesRegionsAbsentesBlastees $FichierQuery $LesRegionsUniquesRepeteesEtAbsentes $TailleQuery 10 1e5] set LesRegionsUniquesRepeteesEtAbsentes [LInsertionDesRegionsAbsentes $LesRegionsUniquesRepeteesEtAbsentes $TailleQuery] } set LesRegionsFusionnees [LesRegionsUniquesFusionneesDesContigs $LesRegionsUniquesRepeteesEtAbsentes $TailleMin] ###Diminue le score en ne considerant pas les regions repetees => diminue le score des retropseudogenes qui n'ont pas regions repetees set LesRegionsFusionnees [LesRegionsAvecScoreModifieEnFonctionDesRegionsRepetees $LesRegionsFusionnees] if {0} { Espionne "" EspionneL $LesRegionsUniquesEtRepetees Espionne "" EspionneL $LesRegionsUniquesEtRepetees Espionne "" EspionneL $LesRegionsUniquesRepeteesEtAbsentes Espionne "" } if {0} { EspionneL $LesRegionsFusionnees } set Texte [TexteExonicMap $FichierBlast $FichierQuery $LesRegionsFusionnees $AlertId $i] Sauve $Texte dans $FichierOut return $Texte } proc ExpandCollapseAllTaxa {what action} { if {$what eq "internal"} { set key "ShowInt" } else { set key "Etat" } if {$action eq "collapse"} { set val 0 } else { set val 1 } foreach k [array names ::Tx "$key,*"] { set ::Tx($k) $val } DrawTaxo return } proc ExpandMask {aT rx ry rz} { upvar $aT T array set Q [array get T] # rajoute 1 rangee en -1 et au bord sup # en Z for {set i 0} {$i < $rx} {incr i} { for {set j 0} {$j < $ry} {incr j} { set T($i,$j,$rz) 0 set T($i,$j,-1) 0 } } # en Y for {set i 0} {$i < $rx} {incr i} { for {set k 0} {$k < $rz} {incr k} { set T($i,$ry,$k) 0 set T($i,-1,$k) 0 } } # en X for {set j 0} {$j < $ry} {incr j} { for {set k 0} {$k < $rz} {incr k} { set T($rx,$j,$k) 0 set T(-1,$j,$k) 0 } } for {set i 0} {$i < $rx} {incr i} { for {set j 0} {$j < $ry} {incr j} { for {set k 0} {$k < $rz} {incr k} { set Q($i,$j,$k) [expr {[set T([expr {$i-1}],$j,$k)] || [set Q($i,$j,$k)]}] set Q($i,$j,$k) [expr {[set T([expr {$i+1}],$j,$k)] || [set Q($i,$j,$k)]}] set Q($i,$j,$k) [expr {[set T($i,[expr {$j-1}],$k)] || [set Q($i,$j,$k)]}] set Q($i,$j,$k) [expr {[set T($i,[expr {$j+1}],$k)] || [set Q($i,$j,$k)]}] set Q($i,$j,$k) [expr {[set T($i,$j,[expr {$k-1}])] || [set Q($i,$j,$k)]}] set Q($i,$j,$k) [expr {[set T($i,$j,[expr {$k+1}])] || [set Q($i,$j,$k)]}] } } } unset T array set T [array get Q] return } proc Expe {Texte} { # LogExpe $Texte # puts $Texte return $Texte return } proc ExplodeUcsc {CoordonneesUCSC} { # Separe les coordonnees UCSC set Chromosome "" set Start "" set End "" set Strand "" set Strand [lindex [split $CoordonneesUCSC " "] 1] set Chromosome [lindex [split $CoordonneesUCSC ":"] 0] set Start [lindex [split [lindex [split [lindex [split $CoordonneesUCSC " "] 0] ":"] 1] "-"] 0] set End [lindex [split [lindex [split [lindex [split $CoordonneesUCSC " "] 0] ":"] 1] "-"] 1] set Retour "$Chromosome $Start $End" return $Retour } proc ExploseLeTFAs {FichierTFAs {Dir ""} {Nommage ""} {Ext ""}} { if {$Dir ==""} { set Dir "." } if {$Nommage==""} { set Nommage "UseFirstWord" } regsub {^\.+} $Ext "." Ext set LesCrees {} foreach Access [LaSequenceDuTFAs $FichierTFAs "LaListeDesAccess" "" "" "ForceAccessFirst"] { set Nom $Access regsub -all -nocase {[^a-z0-9\-\_\+]} $Nom "_" Nom set Fic "$Dir/$Nom$Ext" set TFA [LaSequenceDuTFAs $FichierTFAs $Access] lappend LesCrees [Sauve $TFA dans $Fic] } return $LesCrees } proc Expose {w} { global GalerieCourante global ExpoCourante if {[info exists GalerieCourante]} { Colle $w } else { pack $w -side bottom } } proc ExpressionReguliereDesPABs {} { global ConfigChargee if { ! [info exists ConfigChargee] || ! $ConfigChargee } { return "EXPRESSION_REGULIERE_DES_PABS_NON_VALIDE" } return "^[PreFixe]\[0-9\\.\]+" } proc ExtDbEntry {Accession} { return $Accession } proc ExtendFeatTo {to} { global NomTextSeq SDG TabSF EFeat Sequences LNOrdali GroupeDeLaSequence if {$EFeat(LItemSel) == {} } { FaireLire "No features items selected !" return } if {[llength $EFeat(LItemSel)] > 1} { FaireLire "Beware !\nMultiple Items have been selected !\nPlease selected only ONE item to be propagated !" return } lassign [lindex $EFeat(LItemSel) 0] zones noteRef ft if {[llength $zones] > 2} { FaireLire "Beware !\nMultiple Items have been selected !\nPlease selected only ONE item to be propagated !" return } # search for the true items inside the selected set BonFt [list] lassign $zones p1 p2 lassign [split $p1 .] y x1 lassign [split $p2 .] y x2 incr x2 -1 set nom [lindex $LNOrdali $y-1] foreach f [set TabSF($nom,$ft)] { DecortiqueUneFeature $f dg fg col sco note csys if {$note ne ""} { set nsp ${ft}_[string map [list " " _] $note] } else { set nsp "" } if {$x1 == $dg && $x2 == $fg && $nsp eq $noteRef} { lappend BonFt [list $nom $f] } } # propagation # to = 'group' or 'all' foreach e $BonFt { lassign $e nomRef feat if {$to eq "group"} { set gref [set GroupeDeLaSequence($nomRef)] } else { set gref GroupeToutLeMonde } foreach n [set SDG($gref)] { if {$n eq $nomRef} { continue } lappend TabSF($n,$ft) $feat } } ChangeFeatureForEditing return } proc ExtractFirstLinesFromBlast {blast} { set lines [split $blast "\n"] set out {} set i 0 while { $i < [llength $lines] && ![regexp "Sequences producing significant alignments" [lindex $lines $i]] } { incr i } incr i 2 while { $i < [llength $lines] && [lindex $lines $i] != "" } { lappend out [lindex $lines $i] incr i } return $out } proc ExtractFromRefseq {Access Racine Repertoire {Action ""}} { set FichierLog "$Repertoire/ExtractFromRefseq$Racine.log" set FichierFof "$Repertoire/ExtractFromRefseq$Racine.fof" set RepSeq "$Repertoire/sequences$Racine" if {[FileAbsent $RepSeq]} {file mkdir $RepSeq} set FichierNuc "$RepSeq/$Access.nuctfa" if {$Action!="GetDefinition" && [file exists $FichierNuc]} { return "$Access already extracted" } set Texte [Getz $Access refseq] if {$Texte==""} { set Message "$Access was not found" AppendAuFichier $FichierLog $Message return $Message } set F "NoCDSFound" set GN "NotFound" set OS "UnknownOS" set LaDE {} set DansDef 0 foreach Ligne [split $Texte "\n"] { if {$DansDef} { if {[regexp {^ +} $Ligne]} { set DE [string trim $Ligne] lappend LaDE $DE continue } set DansDef 0 } if {[regexp " CDS" $Ligne]} { if {$F!="NoCDSFound"} { continue } regsub -all {[^0-9]} $Ligne " " Limites scan $Limites "%d %d" D F continue } if {[regexp "/gene=" $Ligne]} { if {$GN!="NotFound"} { continue } set GN [StringApres "/gene=" dans $Ligne] regsub -all {\"} $GN "" GN continue } if {[regexp {^DEFINITION} $Ligne]} { set DansDef 1 set DE [StringSuivant "DEFINITION" dans $Ligne] lappend LaDE $DE continue } if {[regexp {^ *ORGANISM} $Ligne]} { if {$OS!="UnknownOS"} { continue } set OS [StringSuivant "ORGANISM" dans $Ligne] set OS [string trim $OS] continue } } if {$F=="NoCDSFound"} { set Message "$Access no CDS found" AppendAuFichier $FichierLog $Message return $Message } if {$GN=="NootFound"} { set GN $Access } set DE [string trim [join $LaDE " "]] if {$Action=="GetDefinition"} { return $DE } exit set NucSeqTotale [QueLaSequenceADNDuTexteGenbank $Texte] set DernierCodon [string range "n$NucSeqTotale" [expr $F-2] $F]] if {[CodonStopPossible $DernierCodon]} { incr F -3 } set NucSeq [string range "n$NucSeqTotale" $D $F] set ProSeq [SeqNucToSeqPro $NucSeq] set GeneName $GN if {[regexp {transcript variant ([0-9]+)} $DE Match V]} { append GeneName "-V$V" } set OSDE "$OS $DE" if {[regexp "^$OS" $DE]} { set OSDE $DE } set Header "$GeneName $OSDE from $Access" set N [SequenceFormatTFA $NucSeq $Header nucbrut] set P [SequenceFormatTFA $ProSeq $Header protbrut] regsub ".nuctfa$" $FichierNuc "" FichierPro append FichierPro ".prottfa" set FichierProOk [Sauve $P dans $FichierPro] set FichierNucOk [Sauve $N dans $FichierNuc] AppendAuFichier $FichierFof $FichierNucOk return "$GeneName $FichierNucOk" } proc ExtractFromRefseqPourTous {Fichier} { set Repertoire "/genomics/link/MiRNA" set Racine [file tail $Fichier] regsub {\.lst} $Racine "" Racine foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Access Espionne "I'll extract $Access" set Status [ExtractFromRefseq $Access $Racine $Repertoire] Espionne $Status } } 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 ExtractPartsFromEMBL {Fichier {I ""} {J ""}} { global ExtractPartsFromEMBL if {$I==""} { set I 0 } if {$J==""} { set J 9999999 } set LesParts {} while {[info exists ExtractPartsFromEMBL]} { if {$ExtractPartsFromEMBL(filename)!=$Fichier || $I=="close" || $ExtractPartsFromEMBL(Vu) >= $I} { catch { close $ExtractPartsFromEMBL(f) } unset ExtractPartsFromEMBL if {$I=="close"} { return } break } set f $ExtractPartsFromEMBL(f) set Vu $ExtractPartsFromEMBL(Vu) break } if { ! [info exists ExtractPartsFromEMBL]} { set f [open $Fichier "r"] set ExtractPartsFromEMBL(f) $f set ExtractPartsFromEMBL(filename) $Fichier set Vu -1 } set Prends 0 set LeCourant {} while {[gets $f Ligne]>=0} { if {[regexp {^ID } $Ligne]} { incr Vu if {$J < $Vu} { break } if {$Vu < $I } { continue } set Prends 1 lappend LeCourant $Ligne continue } if { ! $Prends } { continue } lappend LeCourant $Ligne if {[regexp "^//" $Ligne]} { lappend LesParts [join $LeCourant "\n"] set LeCourant {} if {$J == $Vu} { break } } } set ExtractPartsFromEMBL(Vu) $Vu return $LesParts } proc ExtractPartsFromGenBank {Fichier {I ""} {J ""}} { global ExtractPartsFromGenBank if {$I==""} { set I 0 } if {$J==""} { set J 99999999 } set LesParts {} while {[info exists ExtractPartsFromGenBank]} { if {$ExtractPartsFromGenBank(filename)!=$Fichier || $I=="close" || $ExtractPartsFromGenBank(Vu) >= $I} { catch { close $ExtractPartsFromGenBank(f) } unset ExtractPartsFromGenBank if {$I=="close"} { return } break } set f $ExtractPartsFromGenBank(f) set Vu $ExtractPartsFromGenBank(Vu) break } if { ! [info exists ExtractPartsFromGenBank]} { set f [open $Fichier "r"] set ExtractPartsFromGenBank(f) $f set ExtractPartsFromGenBank(filename) $Fichier set Vu -1 } set Prends 0 set LeCourant {} while {[gets $f Ligne]>=0} { if {[regexp {^LOCUS} $Ligne]} { incr Vu if {$J < $Vu} { break } if {$Vu < $I } { continue } set Prends 1 lappend LeCourant $Ligne continue } if { ! $Prends } { continue } lappend LeCourant $Ligne if {[regexp "^//" $Ligne]} { lappend LesParts [join $LeCourant "\n"] set LeCourant {} if {$J == $Vu} { break } } } set ExtractPartsFromGenBank(Vu) $Vu return $LesParts } proc ExtractRNAFromSeqGivenLoc {seq loc} { # treat location set loc [string trim [string map [list "(" " " ")" " " ">" "" "<" ""] $loc]] set cmpt [regexp -nocase "complement" $loc] set lloc [split $loc] set df [string map [list ".." " "] [lindex $lloc end]] lassign [split $df] deb fin incr deb -1 incr fin -1 # reversed set rev 0 if {$fin < $deb} { set tmp $fin set fin $deb set deb $tmp set rev 1 } set rna [string range $seq $deb $fin] if {$cmpt} { set rna [ComplementDNA $rna] set rna [string reverse $rna] } puts "d=$deb f=$fin l=[expr {$fin-$deb+1}] | [string range $rna 0 11] [string range $rna end-11 end] $cmpt $rev" return $rna } proc ExtractRandomLinesFromFile {Fichier N {Seed ""} {Start ""} {Stop ""} {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetText" } set LesLignes [LesLignesDuFichier $Fichier] if {$Stop!=""} { set LesLignes [lrange $LesLignes 0 $Stop] } if {$Start!=""} { set LesLignes [lrange $LesLignes $Start end] } set Size [llength $LesLignes] if {$Seed==""} { set Seed [expr round(1000 * rand())] expr srand($Seed) } set Selection {} while {1} { set I [expr round(rand()*$Size)] if {[info exists DejaVu($I)]} { continue } set DejaVu($I) 1 set Ligne [lindex $LesLignes $I] lappend Selection $Ligne if { ! [incr N -1] } { break } } if {$GetWhat=="GetText"} { return [join $Selection "\n"] } return $Selection } proc ExtractionDeMaSequenceDuMSF {Nom} { set FichierMsf "[RepertoireDuGenome]/annotation/$Nom.msf.temp" set FichierSortie "[RepertoireDuGenome]/annotation/$Nom.msf" set SequenceAEnlever [AccessDeMonOrganisme $Nom] foreach Ligne [LesLignesDuFichier $FichierMsf] { if {[regexp $SequenceAEnlever $Ligne]} {continue} if {$Ligne == ""} {continue} AppendAuFichier $FichierSortie "$Ligne" } } proc ExtraireCoordonnees {} { # A partir d'entete fastA, recupere leds access et interroge GeCo pour avoir les coordonnees Espionne "ExtraireCoordonnees: Debut" foreach Numero { 16 17 18 19 20 } { Espionne "ExtraireCoordonnees: Fichier $Numero" set FichierDesEntetes [open "[Fiches]/NonBiDir/NonBidir$Numero.nb" "r"] set FichierDesCoordonnees [open "[Fiches]/NonBiDir/NonBidir$Numero.coord" "w"] set FichierDesRequetes [open "/tmp/Access.bql" "w"] Espionne "ExtraireCoordonnees: Decorticage des Entetes" while { [gets $FichierDesEntetes Ligne] >=0 } { set Liste [split $Ligne "."] set Access [string trim [string range [lindex $Liste 0] 1 10]] puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT access, chrom, txStart, txEnd, strand FROM ucschuman.GeCo WHERE access='$Access' AND pseudogene='no' " puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } close $FichierDesRequetes close $FichierDesEntetes Espionne "ExtraireCoordonnees: Recuperation des coordonnees" exec /biolo/bird/bin/birdql_client.sh /tmp/Access.bql bird /tmp/Access.res Espionne "ExtraireCoordonnees: Ecriture" set FichierDesRequetesExecutees [open "/tmp/Access.res" "r"] while { [gets $FichierDesRequetesExecutees LigneE] >=0 } { ScanLaPipe $LigneE Access Start End Strand puts $FichierDesCoordonnees "$Access $Start $End $Strand" } close $FichierDesRequetesExecutees } Espionne "ExtraireCoordonnees: Fin" } proc ExtraireDe {Ligne aNom aDebut aFin aOrient} { upvar $aNom Nom upvar $aDebut Debut upvar $aFin Fin upvar $aOrient Orient regsub ">" $Ligne "" Ligne set nChampsLus [scan $Ligne "%s %d %d %s" Nom Debut Fin Orient] if {$nChampsLus == 1} { if {[OuiOuNonMemo "I couldn't read 'Debut Fin Orient' reading fiches/bornesdespabs\n Do I use default values 0 999 F ?"]} { set Debut 0 set Fin 999 set Orient "F" } else { if {[OuiOuNon "Do I exit ?"]} { Boum } return } } if { $nChampsLus == 3 } { set Orient "F" if { [expr $Fin < $Debut] } { set Temp $Debut set Debut $Fin set Fin $Temp set Orient "R" } } return } proc ExtraitAccessDuRNA {Nom} { global RepertoireDuGenome set RepInfosAuto "$RepertoireDuGenome/InfosAutomatiques" set Vu 0 set Fichier "$RepertoireDuGenome/InfosAutomatiques/$Nom" if {![file exists $Fichier]} {return ""} foreach Ligne [LesLignesDuFichier "$RepInfosAuto/$Nom"] { if {[regexp -nocase " mRNA\\ " $Ligne]} { set Refsuite [lindex $Ligne 2] return $Refsuite } else {continue} } } proc ExtraitBornesDesSS {ref} { global Sequences ListePDB set liste {} set idx [lsearch -index 0 $ListePDB $ref] set n [lindex $ListePDB $idx] lassign $n MolCh fnom set chn [DonneChainDeAccessPDB $MolCh] set MolId [DonneIdDeAccessPDB $MolCh] if {$chn eq ""} {set chn "a"} set nom [BonAccess ${MolId}_$chn] global PDB_[set MolId]_SecStr set SeqAss [set Sequences($nom)] foreach ss [set PDB_[set MolId]_SecStr($chn)] { DecortiqueSS $ss Elt NomChnDep NomResDep NomResFin Rmk if {$Elt eq "Coil"} {continue} set DebAli [CorrespondancePDBGen $nom $NomResDep] set FinAli [CorrespondancePDBGen $nom $NomResFin] lappend liste [list $Elt $DebAli $FinAli $NomResDep $NomResFin] } return $liste } proc ExtraitDRDeUniProt {Ll {what EMBL}} { set ldr {} foreach l $Ll { if {[string range $l 0 2] ne "DR "} { continue } set l [string map {";" ""} $l] regsub { +} [string trim $l] " " l set le [split $l " "] if {[lindex $le 1] ne $what} {continue} foreach e [lrange $le 2 end] { if {$e eq "-" || $e eq "ALT_INIT" || $e eq "ALT_SEQ" || $e eq "JOINED"} { break } if {$what eq "RefSeq"} { if {[string index $e 1] ne "M"} { continue } elseif {[string index $e end] eq "."} { set e [string range $e 0 end-1] } } lappend ldr $e } } return $ldr } proc ExtraitDbRefDuPdb {Lignes chncou} { set idx -1 set nmw1 "" set nmw2 "" foreach l $Lignes { if {! [regexp {^DBREF} $l]} {continue} set chn [string index $l 12] set type [string range $l 26 30] set type [string trim $type] if {$chn == $chncou && ($type eq "SWS" || $type eq "UNP")} { set nmw1 [string range $l 33 40] set nmw2 [string range $l 42 53] set nmw1 [string trim $nmw1] set nmw2 [string trim $nmw2] } } return [list $nmw1 $nmw2] } proc ExtraitDefinitionRNADesInfosAutomatiques {Nom RepCollection} { set RepertoireDeTravail [RepertoireDuGenome] set RepertoireRacine [file dirname $RepertoireDeTravail] if {$RepCollection==""} { set RepertoireDeTravail $RepertoireDeTravail } else { set RepertoireDeTravail "$RepertoireRacine/$RepCollection" } set FichierInfosAuto "$RepertoireDeTravail/InfosAutomatiques/$Nom" if {![file exists $FichierInfosAuto]} {return ""} set Vu 0 foreach Ligne [LesLignesDuFichier $FichierInfosAuto] { if {[regexp -nocase " mRNA\\ " $Ligne]} { set Ref [lindex $Ligne 1] set Refsuite [lindex $Ligne 2] #Espionne $Ref #Espionne $Refsuite set Vu 1 continue } if {$Vu==1 && [regexp -nocase " DEFINITION:" $Ligne]} { regsub -all " DEFINITION:" $Ligne "" Ligne return "$Ligne" } } } proc ExtraitDocDe {file} { set Ll [LesLignesDuFichier $file] set txt {} set deb 0 foreach l $Ll { if {[regexp "" $l]} {break} if {! $deb && ! [regexp "

" $l]} { continue } else { set deb 1 } regsub -all "
" $l "" l regsub -all "

" $l "" l regsub -all "

" $l "" l if {[regexp "

" $l]} { regsub -all "

" $l "" l regsub -all "

" $l "" l append l "\n" } if {[regexp "

" $l]} { regsub -all "

" $l "" l regsub -all "

" $l "" l append l "\n" } if {[regexp "
" $l]} { regsub -all "
" $l "" l regsub -all "
" $l "" l append l "\n" } lappend txt $l } set letexte [join $txt "\n"] puts "file : $file" puts $letexte return $letexte } proc ExtraitDonneesAffymetrix_ActiChip {{AffyResultFile ""} {OutFile ""}} { Wup "Permet d extraire les donnees Affymetrix en fonction des genes de ActiChip2" set RepAffy "[RepertoireDuGenome]/Autres_Puces/Affy/U133A_2_0/" if {$AffyResultFile==""} { set AffyResultFile "$RepAffy/Partial_Data_GV2.txt" } set F [open "$AffyResultFile"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[regexp "^Probe" $Ligne]} { lappend LesLignes $Ligne continue } set LigneSplitee [split $Ligne "\t"] set ProbeSet [lindex $LigneSplitee 0] set AccGscope [InterrogeActiChip2Affy $ProbeSet AccessGscope] if {$AccGscope == ""} {continue} set Tab($AccGscope) 1 set LigneSplitee [linsert $LigneSplitee 0 $AccGscope] #Espionne "[join $LigneSplitee "\t"]" lappend LesLignes [join $LigneSplitee "\t"] } close $F foreach PAB [InterrogeActiChip2Affy LesAccessGscope] { if {[info exists Tab($PAB)]} {continue} lappend LesLignes $PAB } AppendAuFichier $OutFile "[join $LesLignes "\n"]" return "" } proc ExtraitDonneesUMCU_ActiChip {{UMCUResultFile ""} {OutFile ""}} { Wup "Permet d extraire les donnees UMCU (du fichier .gpr) en tenant compte de ActiChip2." set RepUMCU "[RepertoireDuGenome]/Autres_Puces/UMCU" if {$UMCUResultFile==""} { set UMCUResultFile "$RepUMCU/Partial_Data_GV2.txt" } set SurLEntete 1 set LesLignes "" set F [open "$UMCUResultFile"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLEntete} { if {[regexp "^Block" $Ligne] || [regexp "^\"Block\"\t" $Ligne]} { #On quitte l entete et on sauve la derniere ligne set SurLEntete 0 set LigneSplitee [split $Ligne "\t"] set AccGscope "\"AccessGscope\"" set LigneSplitee [linsert $LigneSplitee 0 $AccGscope] lappend LesLignes [join $LigneSplitee "\t"] continue } else { #On est toujours sur l entete donc on garde lappend LesLignes $Ligne continue } } set LigneSplitee [split $Ligne "\t"] set UMCU_ID "" set AccGscope "" set UMCU_ID [lindex $LigneSplitee 4] if {[regexp {\"} $UMCU_ID]} { regsub -all {\"} $UMCU_ID "" UMCU_ID } if {$UMCU_ID == ""} {continue} set AccGscope [InterrogeActiChip2UMCU $UMCU_ID AccessGscope] #Espionne "$UMCU_ID -- $AccGscope" if {$AccGscope == ""} {continue} set Tab($AccGscope) 1 set LigneSplitee [linsert $LigneSplitee 0 $AccGscope] #Espionne "[join $LigneSplitee "\t"]" lappend LesLignes [join $LigneSplitee "\t"] } close $F foreach PAB [InterrogeActiChip2UMCU LesAccessGscope] { if {[info exists Tab($PAB)]} {continue} lappend LesLignes $PAB } AppendAuFichier $OutFile "[join $LesLignes "\n"]" return "" } proc ExtraitDuTableauPresenceAbsence {FichierIni FichierTabFinal FichierSortie} { #FichierIni=OVERLAP931NEW/Les33DDcorreles_3_1 foreach Ligne [LesLignesDuFichier $FichierIni] { if {$Ligne==""} {continue} set DD $Ligne set Vu($DD) 1 } foreach Ligne [LesLignesDuFichier $FichierTabFinal] { if {$Ligne==""} {continue} set Nom [lindex [split $Ligne "\t"] 0 ] if {[info exists Vu($Nom)]} {lappend Liste $Ligne} } Espionne [llength $Liste] SauveLesLignes $Liste dans $FichierSortie } proc ExtraitFeatures {Nom {QueryOuGroupeOuAlignement ""} {AvecOuSansOrganismeEtudie ""} {TypeFeature ""}} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" ParseMACSIMS $Fichier macsims if {$QueryOuGroupeOuAlignement == "Query"} { set LesSequences $Nom } if {$QueryOuGroupeOuAlignement == "Groupe"} { if {$AvecOuSansOrganismeEtudie == "Sans"} { set LesSequences [LesSequencesDuGroupeMacsims $Nom "Sans"] } if {$AvecOuSansOrganismeEtudie == ""} { set LesSequences [LesSequencesDuGroupeMacsims $Nom ""] } } if {$QueryOuGroupeOuAlignement == ""} { set LesSequences $macsims(Noms) if {$AvecOuSansOrganismeEtudie == "Sans"} { set LesSequences [EnleveLaSequenceDeMonOrganisme $Nom $LesSequences] } } set LesFeatures [ExtraitFeaturesDesSequences $Nom $LesSequences $TypeFeature] return "$LesFeatures" } proc ExtraitFeaturesDesSequences {Nom ListeSequences {TypeDeFeature ""}} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" ParseMACSIMS $Fichier macsims set ListeFeatures {} foreach Sequence $ListeSequences { set NbFeatures $macsims($Sequence,NbFeatures) for {set i 1} {$i <= $NbFeatures} {incr i} { set Type $macsims($Sequence,Features,$i,Type) set Note $macsims($Sequence,Features,$i,Note) set LongueurFeature $macsims($Sequence,Features,$i,Longueur) if {$TypeDeFeature == ""} { if {[regexp "PFAM" $Type]} { set PFAMTaite [TraitementDesPFAMs $Sequence $Type $Note $LongueurFeature] lappend ListeFeatures $PFAMTaite } if {[regexp "REGION" $Type] || [regexp "BLOCK" $Type] || [regexp "PHYLOBLOCK" $Type]} { set RegionTraitee [TraitementDesRegionsEtBlocks $Sequence $Type $Note $LongueurFeature] lappend ListeFeatures $RegionTraitee } } else { if {$TypeDeFeature == $Type} { if {[regexp "PFAM" $Type]} { set PFAMTaite [TraitementDesPFAMs $Sequence $Type $Note $LongueurFeature] lappend ListeFeatures "$PFAMTaite" } if {[regexp "REGION" $Type] || [regexp "BLOCK" $Type] || [regexp "PHYLOBLOCK" $Type]} { set RegionTraitee [TraitementDesRegionsEtBlocks $Sequence $Type $Note $LongueurFeature] lappend ListeFeatures "$RegionTraitee" } } } } } return $ListeFeatures } proc ExtraitGenesDuGlimmer {FichierAdn FichierGlimmer Prefixe Repertoire} { # on met x au debut pour avoir une numerotation a partir de 1 (et non pas 0) set SeqAdn "x" foreach Ligne [LesLignesDuFichier $FichierAdn] { if {[regexp ">" $Ligne]} { continue } regsub -all -nocase {[^A-Z]} $Ligne "" Ligne append SeqAdn $Ligne } set LesFichiersCrees {} foreach Ligne [LesLignesDuFichier $FichierGlimmer] { scan $Ligne "%d %d %d %s" N Debut Fin Frame if {[regexp {\+} $Frame]} { set Orient "F" } else { set Orient "R" } set Nom [format "%s%4.4d" $Prefixe $N] if {$Debut>$Fin} { set w $Debut; set Debut $Fin; set Fin $w } set Sequence [string range $SeqAdn $Debut $Fin] #il manque quelque chose ici set Long [string length $Sequence] set Entete ">$Nom $Debut $Fin $Orient $Long bp" set Texte $Entete set SeqRestante $Sequence while {[set Morceau [string range $SeqRestante 0 59]] != ""} { append Texte "\n$Morceau" set SeqRestante [string range $SeqRestante 60 end] } set FichierCree "$Repertoire/$Nom" # Sauve $Texte dans $FichierCree lappend LesFichiersCrees $FichierCree } return $LesFichiersCrees } proc ExtraitHeadDuPDB {LesLignesTmp} { set head {} set i 0 set iLA1 -1 set iLA2 -1 foreach l $LesLignesTmp { set IdxAtom [string first "ATOM " $l] if {$IdxAtom == -1} { if {[string first "HETATM" $l] != -1} {set iLA1 $i} if {[string first "MSE" $l] != -1} {set iLA2 $i} } if {$IdxAtom == -1 || $IdxAtom > 0} { lappend head $l } else { break } incr i } if {$i == [llength $LesLignesTmp]} { if {$iLA1 != -1} { set head [lrange $head 0 [expr {$iLA1-1}]] } } return $head } proc ExtraitHeadDuPDB2 {LesLignesTmp} { set head {} set IAtm [lsearch -regexp $LesLignesTmp {^ATOM |^HETATM}] if {$IAtm == -1} {set IAtm "end"} set head [lrange $LesLignesTmp 0 $IAtm] return $head } proc ExtraitIdDuTableau {CompleteId Fichier} { if {![file exists $Fichier]} { Espionne "$Fichier doesn't exist" return "" } set Id "NoId" foreach Ligne [LesLignesDuFichier $Fichier] { set LaLigne [split $Ligne "\t"] if { ![regexp {^[0-9]} [lindex $LaLigne 0]] } { continue } else { if {$CompleteId != [lindex $LaLigne 1]} { continue } else {set Id [lindex $LaLigne 2]} } } while {[regexp " " $Id] } {regsub " " $Id "" Id} return $Id } proc ExtraitInfo {Nom {Champ ""}} { global RepertoireDuGenome global ListeDeBoites global InfoEnMemoire global ListeDesContenuInfo global LesInfosRestentSurDisque if { ! [regexp -nocase {[a-z]} $Nom]} { return "" } if {0 && [info exists LesInfosRestentSurDisque]} { if { ! [file exists "$RepertoireDuGenome/infos/$Nom"]} { return "" } set Info [ContenuDuFichier "$RepertoireDuGenome/infos/$Nom"] } else { if { ! [info exists InfoEnMemoire($Nom)]} { if { ! [info exists InfoEnMemoire(Temoin)]} { foreach Boite [ListeDeBoites] { if { ! [regexp -nocase {[a-z]} $Boite]} { continue } set FichierInfo "$RepertoireDuGenome/infos/$Boite" if {[file exists $FichierInfo]} { set InfoEnMemoire($Boite) [ContenuDuFichier $FichierInfo] lappend ListeDesContenuInfo [string toupper [set InfoEnMemoire($Boite)]] } else { lappend ListeDesContenuInfo [string toupper "Nom: $Boite"] } } set InfoEnMemoire(Temoin) "Info est charge en memoire" } if {! [info exists InfoEnMemoire($Nom)]} { set FichierInfo "$RepertoireDuGenome/infos/$Nom" if {[file exists $FichierInfo]} { set InfoEnMemoire($Nom) [ContenuDuFichier $FichierInfo] } else { set InfoEnMemoire($Nom) "" } } } set Info [set InfoEnMemoire($Nom)] } #rR Attention tout est en majuscule si AllInfos if {$Nom=="AllInfos"} { return [join $ListeDesContenuInfo "\n"] } regsub {\:$} $Champ "" Champ if { $Champ == "" } { return $Info } set LesValeurs {} foreach Ligne [split $Info "\n"] { if { ! [regexp -nocase -- "^$Champ\: *" $Ligne] } { continue } regsub -nocase -- "^$Champ\: *" $Ligne "" Valeur lappend LesValeurs $Valeur } set Valeur [join $LesValeurs " / "] return $Valeur set Valeur "" set Separateur "" foreach Ligne [split $Info "\n"] { if {[regexp -nocase -- "^$Champ\:" $Ligne] } { set iValeur [expr [string first ":" $Ligne]+1] append Valeur "${Separateur}[string trim [string range $Ligne $iValeur end]]" set Separateur " / " } } return $Valeur } proc ExtraitInfoDeSortieWebDeKEGG {FichierSortieKEGG} { set Vu 0 foreach Ligne [LesLignesDuFichier $FichierSortieKEGG] { if {[regexp "\\*" $Ligne]} { #FaireLire $Ligne string trim $Ligne regsub "\\*" $Ligne "" Ligne #FaireLire $Ligne set Pathway $Ligne set Vu 1 } if {[regexp "\t" $Ligne] && $Vu==1} { set GNetc [lindex [split $Ligne "\t"] 1] set GN [lindex [split $GNetc "\; "] 0] #Espionne $GNetc #Espionne $GN set GN [string tolower $GN] set PCA [InterrogeGeneName GeneName $GN LesNoms] #Espionne "pca=$PCA" #lappend L $PCA foreach Nom $PCA { lappend Liste "$Nom\t$GN\t$Pathway" } } } #set L [join $L " "] #Espionne [llength $L] #set Lu [lsort -unique $L] #Espionne [llength $Lu] #Espionne [llength $Liste] set Lu [lsort -unique $Liste] #Espionne [llength $Lu] return $Lu } proc ExtraitKOZAK {Nom} { set AccessRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Mus musculus" "mRNA" Access] if {$AccessRNA==""} {return} set LesCoord [LesCoordonneesDuCDSDumRNA $AccessRNA] if {$LesCoord==""} {return} #transcription start site : ATG set TSS [lindex $LesCoord 0] set FichiermRNAtfa "[RepertoireDuGenome]/mrnatfa_Mus_musculus/$Nom" set Kozak [ExtraitPartieDuTfa $FichiermRNAtfa [expr $TSS-9] [expr $TSS+3]] return $Kozak } proc ExtraitLaNouvelleLocalisationApresReMasking {Nom} { global RepertoireDuGenome set Fichier "$RepertoireDuGenome/fiches/polylocalise.lesremasques" foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s" GscopeCode Loc if {$GscopeCode==$Nom} { return $Loc exit } } } proc ExtraitLaProteineDesInfosAutomatiques {Nom RepCollection} { set RepertoireDeTravail [RepertoireDuGenome] set RepertoireRacine [file dirname $RepertoireDeTravail] if {$RepCollection==""} { set RepertoireDeTravail $RepertoireDeTravail } else { set RepertoireDeTravail "$RepertoireRacine/$RepCollection" } set FichierInfosAuto "$RepertoireDeTravail/InfosAutomatiques/$Nom" if {![file exists $FichierInfosAuto]} {return ""} set Vu 0 foreach Ligne [LesLignesDuFichier $FichierInfosAuto] { if {[regexp " PROTEIN\\ " $Ligne]} { #Espionne $Ligne set Ref [lindex $Ligne 1] set Vu 1 continue } if {$Vu==1 && [regexp -nocase " DEFINITION:" $Ligne]} { regsub -all " DEFINITION:" $Ligne "" Ligne return "$Ligne" } } } proc ExtraitLeGroupeDesSeqs {id aLGS} { global LNOrdali upvar $aLGS LeGroupe set LeGroupe {} set RId [$id documentElement] foreach n $LNOrdali { set n [string trim $n] if {$n eq ""} {continue} if {[EstUnAccessPDB $n]} {set n [EnlevePrefixeBank $n]} set qds "//*\[string(seq-name)='$n'\]/descendant::*\[name()='group'\]" set nds [$RId selectNodes "$qds"] if {$nds ne ""} { set d [[lindex $nds 0] selectNodes string(.)] lappend LeGroupe $d } } return $LeGroupe } proc ExtraitLes45DuFichierGPO {FichierGPO} { set FichierPop "[RepertoireDuGenome]/ANALYSE/GO_45_MA/Les45DD" foreach Nom [CreeListePourFichierAUneColonne $FichierPop] { set Vu($Nom) 1 } foreach Ligne [LesLignesDuFichier $FichierGPO] { if {$Ligne==""} {continue} set LesElts [split $Ligne "\t"] set DD [lindex $LesElts 0] if {![info exists Vu($DD)]} {continue} else {lappend L $Ligne} } #Espionne [llength $L] return $L } proc ExtraitLesDescriptifs {id aLDes} { global LNOrdali global TDesDescriptifs set TDesDescriptifs {} set RId [$id documentElement] set TDesDescriptifs {} foreach n $LNOrdali { set qds "//*\[string(seq-name)='$n'\]/descendant::*\[name()='definition'\]" set nds [$RId selectNodes "$qds"] if {$nds != ""} { set d [$nds selectNodes string(.)] set TDesDescriptifs($n) $d } } return } proc ExtraitLesDonneesUMCU_ActiChip {{Dir ""}} { Wup "Permet d extraire les donnees UMCU (du fichier .gpr) en tenant compte de ActiChip2." if {$Dir == ""} { set Dir "[RepertoireDuGenome]/Autres_Puces/UMCU" } set LesFichiers [glob -nocomplain -directory "$Dir" "*.gpr"] foreach File $LesFichiers { set OutFile "$File" regsub -nocase ".gpr$" $OutFile "_modified.gpr" OutFile ExtraitDonneesUMCU_ActiChip $File $OutFile } return "" } proc ExtraitLesDoublons {} { set FichierAvecDoublons "/home/carles/genomes/DD2/1432.txt" #le fichier est trie set n 0 set Doublons "" set ClonePrecedent "" foreach Ligne [LesLignesDuFichier $FichierAvecDoublons] { scan $Ligne "%s" Clone if {$Clone==$ClonePrecedent} { incr n append Doublons "$Clone\n" } set ClonePrecedent $Clone } #Espionne $n return $Doublons } proc ExtraitLesLignesDunFichierPourUneListeDeDD {FichierListeDesDD FichierOuExtraire} { #ListeDesDD de la forme: "DD0001 DD0002" par ex foreach Nom [CreeListePourFichierAUneColonne $FichierListeDesDD] { set Vu($Nom) 1 } foreach Ligne [LesLignesDuFichier $FichierOuExtraire] { if {$Ligne==""} {continue} set LesElts [split $Ligne "\t"] set DD [lindex $LesElts 1] if {![info exists Vu($DD)]} {continue} else {lappend L $Ligne} } #Espionne [llength $L] return $L } proc ExtraitLesLignesDunFichierPourUneListeDonnee {FichierListe FichierOuExtraire FichierSortie} { #pour extraire par ex les lignes du fichier loc/best correspondant a une sous liste de noms gscope foreach Nom [CreeListePourFichierAUneColonne $FichierListe] { set Vu($Nom) 1 } foreach Ligne [LesLignesDuFichier $FichierOuExtraire] { if {$Ligne==""} {continue} set LesElts [split $Ligne "\t"] set Nom [lindex $LesElts 0] if {![info exists Vu($Nom)]} {continue} else {lappend L $Ligne} } Espionne [llength $L] #return $L SauveLesLignes $L dans $FichierSortie } proc ExtraitLesPoids {id aLWgt} { global LNOrdali upvar $aLWgt LnonesPoidsDesSeqs set LesPoidsDesSeqs {} set RId [$id documentElement] set LesPoidsDesSeqs {} foreach n $LNOrdali { set qds "//*\[string(seq-name)='$n'\]/descendant::*\[name()='weight'\]" set nds [$RId selectNodes "$qds"] if {$nds != ""} { set d [$nds selectNodes string(.)] lappend LesPoidsDesSeqs $d } } return $LesPoidsDesSeqs } proc ExtraitLesSeqTFADeLaPageHTMLDeEGAD {CompleteId Id PageHTML {SaveTheSeqTFAFile yes} {RepSeqTFA ""}} { if {$RepSeqTFA == ""} { set RepSeqTFA [ChoisirUnRepertoire "Choose The Saving Directory for the sequence"] } else { if {![file exists $RepSeqTFA]} {return ""} } set SuisJeSurLaSequence 0 set VoiciLaSeq "" set LesLignesDeLaPageHTML [split $PageHTML "\n"] foreach Ligne $LesLignesDeLaPageHTML { if {[regexp -nocase {[a-z]} $Ligne]} { if { $SuisJeSurLaSequence && ![regexp "protein:" $Ligne] } { append VoiciLaSeq "$Ligne\n" } if {[regexp "nucleotide:" $Ligne]} {set SuisJeSurLaSequence 1} if {[regexp "protein:" $Ligne]} {set SuisJeSurLaSequence 0} } else {continue} } set InitialId "$CompleteId" if {$Id != "NoId"} {set CompleteId "$CompleteId : $Id"} if {$VoiciLaSeq == "" } { set Entete ">$CompleteId No Sequence found in DataBase\!" Espionne $Entete if {$SaveTheSeqTFAFile == "yes"} { Sauve $Entete dans "$RepSeqTFA/InitialId.tfa" } return "$Entete" } set Entete ">$CompleteId" set SeqTFA [SequenceFormatTFA $VoiciLaSeq $Entete] if {$SaveTheSeqTFAFile == "yes"} { Sauve $SeqTFA dans "$RepSeqTFA/$InitialId.tfa" } return $SeqTFA } proc ExtraitLesSeqTFADeLaPageHTMLDeGB {CompleteId Id PageHTML {SaveTheSeqTFAFile yes} {RepSeqTFA ""}} { if {$RepSeqTFA == ""} { set RepSeqTFA [ChoisirUnRepertoire "Choose The Saving Directory for the sequence"] } else { if {![file exists $RepSeqTFA]} {return ""} } set InitialId "$CompleteId" if {$Id != "NoId"} {set CompleteId "$CompleteId : $Id"} set SuisJeSurLaSequence 0 set VoiciLaSeq "" set LesLignesDeLaPageHTML [split $PageHTML "\n"] foreach Ligne $LesLignesDeLaPageHTML { if { $SuisJeSurLaSequence && ![regexp "
" $Ligne]&& ![regexp "
" $Ligne]} { append VoiciLaSeq "$Ligne\n" } if {[regexp "
" $Ligne]} {
	    set Entete ">$CompleteId"
	    set SuisJeSurLaSequence 1
	}
	if {[regexp "
" $Ligne]} {set SuisJeSurLaSequence 0 } } regsub -all -nocase {[^a-z]} $VoiciLaSeq "" VoiciLaSeq regsub -all -nocase "\n" $VoiciLaSeq "" VoiciLaSeq if {![regexp -nocase {[a-z]} $VoiciLaSeq]} { set Entete "$CompleteId No sequence found" if {$SaveTheSeqTFAFile == "yes"} { Sauve $Entete dans "$RepSeqTFA/$InitialId.tfa" } return "" } set Entete ">$CompleteId" set SeqTFA [SequenceFormatTFA $VoiciLaSeq $Entete] if {$SaveTheSeqTFAFile == "yes"} { Sauve $SeqTFA dans "$RepSeqTFA/$InitialId.tfa" } return $SeqTFA } proc ExtraitLesSeqTFADeLaPageHTMLDeTIGR {CompleteId Id PageHTML {SaveTheSeqTFAFile yes} {RepSeqTFA ""}} { if {$RepSeqTFA == ""} { set RepSeqTFA [ChoisirUnRepertoire "Choose The Saving Directory for the sequence"] } else { if {![file exists $RepSeqTFA]} {return ""} } set InitialId "$CompleteId" if {$Id != "NoId"} {set CompleteId "$CompleteId : $Id"} set SuisJeSurLaSequence 0 set VoiciLaSeq "" set LesLignesDeLaPageHTML [split $PageHTML "\n"] foreach Ligne $LesLignesDeLaPageHTML { if { $SuisJeSurLaSequence && [regexp "" $Ligne]} { regsub -all "" $Ligne "" Ligne } if { $SuisJeSurLaSequence && [regexp "" $Ligne]} { regsub -all "" $Ligne "" Ligne } if { $SuisJeSurLaSequence && ![regexp "
" $Ligne] } { append VoiciLaSeq "$Ligne\n" } if {[regexp "
>" $Ligne]} {
	    set Entete ">$CompleteId"
	    set SuisJeSurLaSequence 1
	}
	if {[regexp "
" $Ligne]} {set SuisJeSurLaSequence 0 } } if {$VoiciLaSeq == "" } { set Entete ">$CompleteId No Sequence found in DataBase\!" if {$SaveTheSeqTFAFile == "yes"} { Sauve $Entete dans "$RepSeqTFA/$InitialId.tfa" } return "" } set Entete ">$CompleteId" set VoiciLaSeq [SequenceFormatTFA $VoiciLaSeq $Entete] if {$SaveTheSeqTFAFile == "yes"} { Sauve $VoiciLaSeq dans "$RepSeqTFA/$InitialId.tfa" } return $VoiciLaSeq } proc ExtraitLesSeqTFADeLaPageXMLDeGB {CompleteId Id PageXML {SaveTheSeqTFAFile yes} {RepSeqTFA ""}} { if {$RepSeqTFA == ""} { set RepSeqTFA [ChoisirUnRepertoire "Choose The Saving Directory for the sequence"] } else { if {![file exists $RepSeqTFA]} {return ""} } set Seq [ChercheDansPageXML "IUPACna" $PageXML] if { ! [regexp -nocase {[a-z]} $Seq]} { return "No sequence found" } set InitialId "$CompleteId" if {$Id != "NoId"} {set CompleteId "$CompleteId : $Id"} if {![regexp -nocase {[a-z]} $Seq]} { set Entete "$CompleteId No sequence found" if {$SaveTheSeqTFAFile == "yes"} { Sauve $Entete dans "$RepSeqTFA/$InitialId.tfa" } return "" } set Entete ">$CompleteId" set SeqTFA [SequenceFormatTFA $Seq $Entete] if {$SaveTheSeqTFAFile == "yes"} { Sauve $SeqTFA dans "$RepSeqTFA/$InitialId.tfa" } return $SeqTFA } proc ExtraitLesSeqTFADesFichiersHTML {{FichierTableau ""} {RepHTML ""} {SaveTheSeqTFAFile yes} {RepSeq ""}} { if {$FichierTableau == ""} { set FichierTableau [ButineArborescence All [pwd]] } else { if {![file exists $FichierTableau]} {return ""} } if {$RepHTML == ""} { set RepHTML [ChoisirUnRepertoire "Choose The HTML file directory"] } else { if {![file exists $RepHTML]} {return ""} } if {$RepSeq == ""} { set RepSeq [ChoisirUnRepertoire "Choose The Saving Directory for the sequence"] } else { if {![file exists $RepSeq]} {return ""} } if {$SaveTheSeqTFAFile == "yes"} {set Save "yes"} else {set Save "no"} foreach File [glob -nocomplain "$RepHTML/*.html"] { Espionne "$File in progress" set SeqTFA [ExtraitLesSeqTFADuFichierHTML $File $FichierTableau $Save $RepSeq] } } proc ExtraitLesSeqTFADuFichierHTML {{FichierHTML ""} {FichierTableau ""} {SaveTheSeqTFAFile yes} {RepSeq ""}} { if {$FichierHTML == ""} { set FichierHTML [ButineArborescence All [pwd]] } else { if {![file exists $FichierHTML]} {return ""} } if {$FichierTableau == ""} { set FichierTableau [ButineArborescence All [pwd]] } else { if {![file exists $FichierTableau]} {return ""} } if {$RepSeq == ""} { set RepSeq [ChoisirUnRepertoire "Choose The Saving Directory for the sequence"] } else { if {![file exists $RepSeq]} {return ""} } if {$SaveTheSeqTFAFile=="yes"} {set Save "yes"} else {set Save "no"} set CompleteId [file tail $FichierHTML] regsub ".html" $CompleteId "" CompleteId set Id [ExtraitIdDuTableau $CompleteId $FichierTableau] set PageHTML [ContenuDuFichier "$FichierHTML"] if {[regexp -nocase "ET" $CompleteId]} { ######################EGAD################################## set SeqTFA [ExtraitLesSeqTFADeLaPageHTMLDeEGAD $CompleteId $Id $PageHTML $Save $RepSeq] return "$SeqTFA" } elseif {[regexp -nocase "TC" $CompleteId]} { ######################TIGR############################## if {[regexp -nocase "data could not be found in TIGR" $PageHTML]} { set Entete ">$CompleteId data could not be found in TIGR" if {$Save == "yes"} {Sauve $Entete dans "$RepSeq/$CompleteId.tfa"} return "$Entete" } elseif {[regexp -nocase "It split into" $PageHTML]} { set JusteLeId [CorrigeId $CompleteId] foreach Ligne [split $PageHTML "\n"] { regsub "$JusteLeId" $Ligne "" Ligne while {[regexp "HREF=\"/docs/tigr-scripts/" $Ligne]} { regexp ">(TC\[0-9]*)<" $Ligne tmp NewId regsub "HREF=\"/docs/tigr-scripts/" $Ligne "" Ligne regsub ">(TC\[0-9]*)<" $Ligne "" Ligne lappend AllNewId $NewId } } set Entete ">$CompleteId split into" foreach NewId $AllNewId { append Entete " $NewId" } if {$Save == "yes"} {Sauve $Entete dans "$RepSeq/$CompleteId.tfa"} return "$Entete" } set SeqTFA [ExtraitLesSeqTFADeLaPageHTMLDeTIGR $CompleteId $Id $PageHTML $Save $RepSeq] return $SeqTFA } elseif { [regexp -nocase "AFFX" $CompleteId] || [regexp -nocase "Msa" $CompleteId]} { ######################AFFX et Msa######################## regsub ".html" $FichierHTML ".xml" FichierXML if {[regexp -nocase "The sequence has been intentionally withdrawn" $PageHTML]} { set Entete ">$CompleteId The Sequence has been intentionally withdrawn" if {$Save == "yes"} {Sauve $Entete dans "$RepSeq/$CompleteId.tfa"} return "$Entete" } #set PageXML [ContenuDuFichier "$FichierXML"] set PageHTML [ContenuDuFichier "$FichierHTML"] #set SeqTFA [ExtraitLesSeqTFADeLaPageXMLDeGB $CompleteId $Id $PageXML $Save $RepSeq] #if {$SeqTFA == "No sequence found"} { set SeqTFA [ExtraitLesSeqTFADeLaPageHTMLDeGB $CompleteId $Id $PageHTML $Save $RepSeq] #} return $SeqTFA } else { ######################GB################################ regsub ".html" $FichierHTML ".xml" FichierXML if {[regexp -nocase "The sequence has been intentionally withdrawn" $PageHTML]} { set Entete ">$CompleteId The Sequence has been intentionally withdrawn" if {$Save == "yes"} {Sauve $Entete dans "$RepSeq/$CompleteId.tfa"} return "$Entete" } #set PageXML [ContenuDuFichier "$FichierXML"] set PageHTML [ContenuDuFichier "$FichierHTML"] #set SeqTFA [ExtraitLesSeqTFADeLaPageXMLDeGB $CompleteId $Id $PageXML $Save $RepSeq] #if {$SeqTFA == "No sequence found"} { set SeqTFA [ExtraitLesSeqTFADeLaPageHTMLDeGB $CompleteId $Id $PageHTML $Save $RepSeq] #} return $SeqTFA } } proc ExtraitLesSequencesDuTFAs {FichierTFAs LesAccess} { if {$LesAccess=={}} { return "" } set E [open $FichierTFAs "r"] set LesACCESS "turlututu" foreach Access $LesAccess { set ACCESS [string toupper $Access] set Beau($ACCESS) $Access lappend LesACCESS $ACCESS } lappend LesACCESS "turlututu" set ACCESSES [join $LesACCESS "="] while {[gets $E Ligne]>=0} { if { ! [regexp "^>" $Ligne]} { if { [info exists Courant]} { lappend Sequences($Courant) $Ligne } continue } if {[info exists Courant]} { unset Courant } regsub ">" $Ligne "" LigneSansChevron scan $LigneSansChevron "%s" AccessLu set ACCESSLU [string toupper $AccessLu] if { ! [regexp "=$ACCESSLU=" $ACCESSES]} { continue } set Courant [set Beau($ACCESSLU)] lappend Sequences($Courant) $Ligne } set Sortie {} foreach Access $LesAccess { set ACCESS [string toupper $Access] if {[info exists DejaVu($ACCESS)]} { continue } set DejaVu($ACCESS) 1 if { ! [info exists Sequences($Access)]} { continue } lappend Sortie [join [set Sequences($Access)] "\n"] } return [join $Sortie "\n"] } proc ExtraitLesTFAsDesProbeSet {{FichierAffy ""} {FichierOut ""} {LesProbeSetID ""}} { Wup "Lit et extrait les ProbeSetID des puces Affymetrix au format fasta" Wup "On utilise le fichier .sif de la release Affymetrix d une puce" #/genomics/AffyProbes/Affymetrix/Full/HG-U133_Plus_2-LibFiles/HG-U133_Plus_2.sif #/genomics/AffyProbes/Affymetrix/Full/Mouse430_2/LibFiles/Mouse430_2.sif if {$FichierAffy == "" || $FichierOut == "" || $LesProbeSetID == ""} {return ""} if {[file exists $LesProbeSetID]} { set F [open "$LesProbeSetID"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} scan $Ligne "%s" ProbeSetID set Tab($ProbeSetID) 1 } close $F } else { set LesProbeSetID [split $LesProbeSetID " "] #On charge les sequences a recherchees foreach PSId $LesProbeSetID { set Tab($PSId) 1 } } set ProbeSetIDIDOk 0 set F [open "$FichierAffy"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} #L entete if { [string range $Ligne 0 0] == ">"} { set ProbeSetID "" scan $Ligne "%s" ProbeSetID regsub {\>} $ProbeSetID "" ProbeSetID #Espionne "$ProbeSetID" if {[info exists Tab($ProbeSetID)]} { AppendAuFichier $FichierOut $Ligne set ProbeSetIDIDOk 1 continue } set ProbeSetIDIDOk 0 } #La sequence if {$ProbeSetIDIDOk} { AppendAuFichier $FichierOut $Ligne } set ProbeSetIDIDOk 0 } close $F return "" } proc ExtraitLesTaxId {id aLTax} { global LesSequencesAssocieesClassesCanon global LNOrdali upvar $aLTax LesTaxId set LesTaxId {} set RId [$id documentElement] set LesSequencesAssocieesClassesCanon(eukaryota) {} set LesSequencesAssocieesClassesCanon(bacteria) {} set LesSequencesAssocieesClassesCanon(archaea) {} set LesSequencesAssocieesClassesCanon(viruses) {} set LesSequencesAssocieesClassesCanon(undefined) {} set LClass [list eukaryota archaea bacteria viruses] foreach n $LNOrdali { if {[regexp {^[0-9]} $n]} {continue} set tid "" set qds "//*\[string(seq-name)='$n'\]/descendant::*\[name()='lifedomain'\]" set nds [$RId selectNodes "$qds"] if {$nds != ""} { set tid [string tolower [$nds selectNodes string(.)]] if {[lsearch $LClass $tid] == -1 || $tid == ""} {set tid "undefined"} lappend LesTaxId ${tid} lappend LesSequencesAssocieesClassesCanon($tid) $n } else { lappend LesTaxId "undefined" lappend LesSequencesAssocieesClassesCanon(undefined) $n } } return $LesTaxId } proc ExtraitLignesAtomesDuPDB {LesLignesTmp} { set LesLignes {} # NMR structure --> PREND 1er MODELE !! set lafin "END" set idx [lsearch -regexp $LesLignesTmp "EXPDTA"] if {$idx != -1} { set ya [string first "NMR" [lindex $LesLignesTmp $idx]] if {$ya != -1} {set lafin "ENDMDL"} } # lit les atomes foreach l $LesLignesTmp { if {[regexp "^${lafin}" $l]} {break} # if {[regexp {^TER} $l]} {continue} if {[regexp {^ATOM|^HETATM|^TER} $l]} {lappend LesLignes $l} } if {[llength $LesLignes] == 0} { FaireLire "I can't find the ATOM record in your PDB file !!" } return $LesLignes } proc ExtraitListeDeListe {l n} { set nl [list] foreach e $l { lappend nl [lindex $e $n] } return $nl } proc ExtraitListeItemFeatures {id aLItFeat} { upvar $aLItFeat ListeItemFeatures set RId [$id documentElement] set LNoeudFeatures [$RId selectNodes //fitem/*] foreach n $LNoeudFeatures { set f [$n selectNodes name(.)] lappend ListeItemFeatures $f } set ListeItemFeatures [lsort -unique $ListeItemFeatures] return $ListeItemFeatures } proc ExtraitListeTypesFeatures {id aLFeat} { upvar $aLFeat ListeTypesFeatures set RId [$id documentElement] set LNoeudFeatures [$RId selectNodes //ftype] foreach n $LNoeudFeatures { set f [$n selectNodes string(.)] lappend ListeTypesFeatures $f } set ListeTypesFeatures [lsort -unique $ListeTypesFeatures] return $ListeTypesFeatures } proc ExtraitMesGOInterressants {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set Liste [split $Ligne "\} \{"] EspionneL $Liste } set MesGOs "" set MesIPRs "" foreach element $Liste { if {[regexp "GO:" $element]} {lappend MesGOs $element} if {[regexp "IPR" $element]} {lappend MesIPRs $element} } EspionneL $MesGOs EspionneL $MesIPRs return "" } proc ExtraitNoDuGroupe {a} { if {$a == ""} {return -1} set i -1 set isnb 0 while {! $isnb && $i < [string length $a]} { incr i set isnb [string is integer [string index $a $i]] } if {$isnb} { return [string range $a $i end] } else { return -1 } } proc ExtraitOligoDuTFA {PAB Oligo {Dir ""}} { Wup "Pour recuperer la sequence tfa de l oligo du PAB voulu" set Fichier "$Dir/${PAB}.oligo" if {! [file exists $Fichier]} { set Fichier "$Dir/$PAB" if {! [file exists $Fichier]} {return ""} } set MonTFAOligo "" set JeLaTiens 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} { continue } if { [string range $Ligne 0 0] == ">"} { if {! [regexp -nocase $Oligo $Ligne]} {continue} lappend MonTFAOligo $Ligne set JeLaTiens 1 continue } if {! $JeLaTiens} {continue} lappend MonTFAOligo $Ligne break } close $F return $MonTFAOligo } proc ExtraitOligoDuTFA2 {PAB Oligo {Dir ""} {Fichier ""}} { Wup "Pour recuperer la sequence tfa de l oligo du PAB voulu" if {$Fichier ==""} { set Fichier "$Dir/${PAB}.oligo" } else { set Fichier "$Dir/$Fichier" } if {! [file exists $Fichier]} { set Fichier "$Dir/$PAB" if {! [file exists $Fichier]} {return ""} } set MonTFAOligo "" set JeLaTiens 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} { continue } if { [string range $Ligne 0 0] == ">"} { if {! [regexp -nocase $Oligo $Ligne]} {continue} lappend MonTFAOligo $Ligne set JeLaTiens 1 continue } if {! $JeLaTiens} {continue} lappend MonTFAOligo $Ligne break } close $F return $MonTFAOligo } proc ExtraitPartieDuTfa {FichierTfa {Debut ""} {Fin ""}} { #attention au debut #string range commence a 0 set QueLaSequence [QueLaSequenceDuTFA $FichierTfa] set SequenceExtraite [string range $QueLaSequence [expr $Debut-1] [expr $Fin-1]] return $SequenceExtraite } proc ExtraitRNADeRefSeqXML {Lxml refseq prot} { set rna "" if {0} { set f [open toto w] puts $f $Lxml #$doc asXML -channel $f close $f } global TParser set TParser(S) {} set TParser(inKey) 0 set TParser(target) $prot set TParser(readV) 0 set TParser(seq) "" set TParser(loc) "" set p [expat -elementstartcommand Prsel -characterdatacommand Prsch -elementendcommand Prsee ] if [catch {$p parse $Lxml} res] { puts "ERROR while parsing XML ! " puts "$res" return "" } if {$TParser(seq) ne "" && $TParser(loc) ne ""} { puts "[string range $TParser(seq) 0 10] $TParser(loc)" set rna [ExtractRNAFromSeqGivenLoc $TParser(seq) $TParser(loc)] } else { set rna "" } unset -nocomplain TParser return $rna } proc ExtraitRadicalDuGroupe {a} { set i -1 set pasnb 0 while {! $pasnb} { incr i set pasnb [regexp {[0-9]} [string index $a $i]] } set ea [string range $a 0 [expr {$i-1}]] return $ea } proc ExtraitSecStrucDuPDB {Fichier {mol TRUC}} { set MolId [DonneIdDeAccessPDB $mol] set chn [DonneChainDeAccessPDB $mol] if {$chn eq ""} {set chn "a"} global PDB_[set MolId]_SecStr global PDB_[set MolId]_SSBin global PDB_[set MolId]_Header global PDB_[set MolId]_ChnIdn set LesLignes [set PDB_[set MolId]_Header] foreach chn [set PDB_[set MolId]_ChnIdn] { set ssbh [string repeat "0" [LongueurAlignement]] set ssbs [string repeat "0" [LongueurAlignement]] set SStmp {} set lhelix "PasBon" foreach l $LesLignes { set t [string range $l 0 4] switch $t { "HELIX" {set lhelix [LitHelixDansPDB $l $chn]} "SHEET" {set lhelix [LitSheetDansPDB $l $chn]} "TURN " {set lhelix [LitTurnDansPDB $l $chn]} default {continue} } if {$lhelix eq "PasBon"} {continue} set ss [OteLesBlancsEnTrop $lhelix] DecortiqueSS $ss Elmt NomChnDep NomResDep NomResFin Rmk set DebAli [CorrespondancePDBGen $mol $NomResDep] set FinAli [CorrespondancePDBGen $mol $NomResFin] lappend SStmp $ss switch $Elmt { "Alpha" { set ssbh [MetDesUnsDansSS $ssbh $DebAli $FinAli] } "Sheet" { set ssbs [MetDesUnsDansSS $ssbs $DebAli $FinAli] } } } set SStmp [lsort -integer -index 4 $SStmp] set SStmp [CombleSSParCoil $SStmp $MolId $chn] set PDB_[set MolId]_SecStr($chn) $SStmp set PDB_[set MolId]_SSBin($chn) $ssbh lappend PDB_[set MolId]_SSBin($chn) $ssbs } return } proc ExtraitSeqEtStrDuPdb {Fichier name {SeqPdb ""}} { global LNOrdali Sequences OrdTmpDir Defauts set cherchemaxcc 0 set VerifChn 0 set MolId [DonneIdDeAccessPDB $name] set chn [DonneChainDeAccessPDB $name] if {[regexp {[a-z]} $chn] || $chn eq ""} { set VerifChn 1 } if {[string trim $chn] eq ""} {set chn "a"} set rep [DecortiqueUnPDB $Fichier $MolId] if {! $rep} { if {[ModeI]} { FaireLire "Problem with PDB file !" } return 0 } global PDB_[set MolId]_NomRes1l global PDB_[set MolId]_ChnIdn global PDB_[set MolId]_Sequence set LesChaines [set PDB_${MolId}_ChnIdn] foreach cc $LesChaines { if {[lsearch [array names PDB_[set MolId]_NomRes1l] $cc] == -1} { set idx [lsearch [set PDB_[set MolId]_ChnIdn] $cc] set PDB_[set MolId]_ChnIdn [lreplace [set PDB_[set MolId]_ChnIdn] $idx $idx] } } set LesChaines [set PDB_[set MolId]_ChnIdn] if {$VerifChn} { if {[lsearch $LesChaines $chn] == -1} { FaireLire "Can't find chain $chn in pdb file $MolId !" return 0 } } set str [join [set PDB_[set MolId]_NomRes1l($chn)] ""] set PDB_[set MolId]_Sequence($chn) $str return 1 } proc ExtraitSiteActifDuPDB {lignes} { set ncou "" set lsite {} foreach l $lignes { set l " $l" if {[string range $l 1 6] != "SITE "} {continue} # site name set ns [string trim [string range $l 12 14]] if {$ns != $ncou} { if {$ncou != ""} { set site($ncou) $lsite set lsite {} } } foreach i {0 1 2 3} { set p [expr {$i * 11}] set nm$i [string range $l 19+$p 21+$p] set ch$i [string range $l 23+$p 23+$p] set rn$i [string range $l 24+$p 27+$p] set rn$i [string trim [set rn$i]] if {[set rn$i] ne ""} { lappend lsite [set rn$i] [set ch$i] [set nm$i] } } set ncou $ns } if {$lsite != {} } {set site($ncou) $lsite} set ltab {} if {[info exists site]} {set ltab [array get site]} return $ltab } proc ExtraitSourceFromRefSeqPXML {Lxml {deb 0}} { set src [ValeurDeLaBalise "Textseq-id_accession" Lxml] if {[regexp -nocase {^.(M|C|W|Z)_} $src]} { return $src } else { return "" } set rep "" if {$sdb ne ""} { set rep [$sdb selectNode string(.)] } if {$deb} { set f [open pxml w] $Id asXML -channel $f close $f } $Id delete return $rep } proc ExtraitTable {type} { global OrdEtcDir set file [file join $OrdEtcDir "table_couleurs.dat"] set LesLignes [LesLignesDuFichier $file] if {$type eq "seqlab"} {set type "Protein"} set type ">$type" set idx1 [lsearch $LesLignes $type] set sear [expr {$idx1+1}] set idx2 [lsearch -regexp [lrange $LesLignes $sear end] ">"] if {$idx2 == -1} {set idx2 end} return [lrange $LesLignes $sear $idx2] } proc ExtraitTouteInfo {Nom} { return [ExtraitInfo $Nom] } proc ExtraitYDesPos {liste} { foreach {p1 p2} $liste { lassign $p1 y x lappend ly $y } return $ly } proc ExtraitmRNADesInfosAutomatiques {Nom} { global RepertoireDuGenome set RepInfosAuto "$RepertoireDuGenome/InfosAutomatiques" if {![file exists $RepInfosAuto]} {return ""} set Vu 0 foreach Ligne [LesLignesDuFichier "$RepInfosAuto/$Nom"] { if {[regexp -nocase " mRNA\\ " $Ligne]} { set Ref [lindex $Ligne 1] set Refsuite [lindex $Ligne 2] set Vu 1 continue } if {$Vu==1 && [regexp -nocase " DEFINITION:" $Ligne]} { regsub -all " DEFINITION:" $Ligne "" Ligne return "$Ref $Refsuite $Ligne" } } } proc EyePos {} { global pgl if {$::eyepos eq "zero"} { set pgl(eyeZ) $::Rad set ::eyepos "rad" } else { set pgl(eyeZ) 0. set ::eyepos "zero" } update Update3DMatrices $::pgl(wogl) postredisplay return } proc FDeX {args} { if {$args == ""} {return} #Ini X1 Y1 X2 Y2 #Calc X #unset global aDeLEquationLineaire bDeLEquationLineaire set PremierArg [lindex $args 0] if {[string equal -nocase $PremierArg "ini"]} { set X1 [lindex $args 1] set Y1 [lindex $args 2] set X2 [lindex $args 3] set Y2 [lindex $args 4] set aDeLEquationLineaire [expr ($Y2 - $Y1) * 1.0 / ($X2 - $X1)] set bDeLEquationLineaire [expr $Y1 - $aDeLEquationLineaire * $X1] return [list $aDeLEquationLineaire $bDeLEquationLineaire] } if {![info exists aDeLEquationLineaire]} {return} if {![info exists bDeLEquationLineaire]} {return} if {[string equal -nocase $PremierArg "Calc"]} { set X [lindex $args 1] return [expr $aDeLEquationLineaire * $X + $bDeLEquationLineaire] } if {[string equal -nocase $PremierArg "unset"]} { unset aDeLEquationLineaire unset bDeLEquationLineaire } return } proc FNduLNgcg {N} { return [SNvsLNgcg $N fn] } proc FNduSNgcg {N} { return [SNvsLNgcg $N fn] } proc FOFtoTFAs {FichierDeNomsDeFichier {UseFilename ""}} { return [LOFtoTFAs [LesLignesDuFichier $FichierDeNomsDeFichier]] } proc FabriqueDeTables {stab {db ""} {fdb ""} {add 0} {drop 0}} { global OrdTmpDir if {$fdb eq "memory"} { set fdb ":memory:" } if {! $add && ! $drop} { if {$fdb ne ""} { if {[file exists $fdb]} { file delete -force $fdb } } } else { if {! [file exists $fdb]} { FaireLire "File $fdb does not exists !" return } } if {$db eq ""} { set db "rootDB_[pid]_[clock scan now]" } sqlite3 $db $fdb set Lignes [split $stab "\n"] foreach elt $Lignes { set e [string trim $elt] set pC [string index $e 0] # comment line if {$e eq "" || $pC eq "#"} { continue } elseif {$pC eq "-"} { set Luniq [list] set nom [StringApres "-" dans $e] } elseif {$pC eq "\}"} { if {$drop} { $db eval "drop table if exists $nom" } set cmd "create table $nom (" set virgule 0 foreach {c tp} $Lcle { set openp 0 set Ltype [split $tp ""] CheckGoodDBType $Ltype set Lgt [llength $Ltype] foreach telt $Ltype { switch -regexp -- $telt { "P" { if {$Lgt == 1} { set type "INTEGER PRIMARY KEY" } else { append type " PRIMARY KEY" } } "I" {set type "INTEGER"} "T" {set type "TEXT"} "R" {set type "REAL"} "V" { set type "VARCHAR(" set openp 1 } {[0-9]} { append type $telt } "F" {append type " FOREIGN KEY"} "U" {lappend Luniq $c} } } if {$openp} { append type ")" set openp 0 } if {! $virgule} { append cmd "$c $type" set virgule 1 } else { append cmd ", $c $type" } } if {$Luniq != {} } { append cmd ", unique ([join $Luniq ,])" } append cmd ")" update idletasks $db eval "$cmd" set cmd "" set Lcle {} } elseif {$pC eq "."} { set cle [StringApres "." dans $e] set type [StringApres "$cle" dans $e] lappend Lcle $cle $type } } return $db } proc FacesDuCube {c a1 b1 c1 d1 a2 b2 c2 d2} { # Face haut glBegin GL_QUADS glColor4f {*}$c set n [NormaleDe $a1 $b1 $c1] glNormal3fv $n glVertex3fv $a1 glVertex3fv $b1 glVertex3fv $c1 glVertex3fv $d1 # Face bas glColor4f {*}$c set n [NormaleDe $a1 $c2 $b2] glNormal3fv $n glVertex3fv $a2 glVertex3fv $b2 glVertex3fv $c2 glVertex3fv $d2 glColor4f {*}$c set n [NormaleDe $a1 $b1 $c1] glNormal3fv $n glVertex3fv $a1 glVertex3fv $b1 glVertex3fv $b2 glVertex3fv $a2 glColor4f {*}$c set n [NormaleDe $b1 $c1 $b2] glNormal3fv $n glVertex3fv $b1 glVertex3fv $c1 glVertex3fv $c2 glVertex3fv $b2 glColor4f {*}$c set n [NormaleDe $c1 $d1 $d2] glNormal3fv $n glVertex3fv $c1 glVertex3fv $d1 glVertex3fv $d2 glVertex3fv $c2 glColor4f {*}$c set n [NormaleDe $d1 $a1 $a2] glNormal3fv $n glVertex3fv $d1 glVertex3fv $a1 glVertex3fv $a2 glVertex3fv $d2 glEnd return } proc Factoriel {n} { if {165 < $n} {return 1e+300} if {$n < 20} { set NFact $n for {set i 2} {$i < $n} {incr i} {set NFact [expr $NFact * $i]} } else { set e 2.718 set pi 3.141592 set NFact [expr sqrt(2*$pi*$n)*pow($n*1.0/$e,$n)] } return $NFact } proc FaireAFaire {{CeQuIlFautFaire ""}} { global FichierAFaire global FichierDejaFait if {$CeQuIlFautFaire == ""} { set AFaire [LesLignesDuFichier $FichierAFaire] } else { set AFaire $CeQuIlFautFaire } foreach Ligne $AFaire { if {[regexp "^Log " $Ligne]} { regsub "^Log " $Ligne "" Texte if {[catch {eval set Texte $Texte} Message]} { AppendAuFichier $FichierDejaFait "WscopeServerError >" AppendAuFichier $FichierDejaFait "$Message" AppendAuFichier $FichierDejaFait "< WscopeServerError" } else { AppendAuFichier $FichierDejaFait $Texte } AppendAuFichier $FichierDejaFait $Ligne continue } if {[catch {eval $Ligne} Message]} { AppendAuFichier $FichierDejaFait "WscopeServerError >" AppendAuFichier $FichierDejaFait "$Message" AppendAuFichier $FichierDejaFait "< WscopeServerError" } AppendAuFichier $FichierDejaFait $Ligne } if {$CeQuIlFautFaire == ""} { File delete $FichierAFaire } } proc FaireAttendre {tx {AvecPB 0}} { global tcl_platform TFAt Defauts FAPG if {! [ModeI] && ! $Defauts(MarcheForcee)} {return} if {[info exists TFAt(WtLabel)]} { lappend TFAt(WtMsg) [$TFAt(WtLabel) cget -text] lappend TFAt(WithPB) [winfo ismapped $TFAt(WtPbar)] $TFAt(WtLabel) configure -text $tx if {$AvecPB} { grid .fattendre.f.pbar -row 1 -column 0 -sticky ew -padx 10 -pady {1 10} .fattendre.f.pbar start } else { grid forget .fattendre.f.pbar } update idletasks return } set TFAt(oldFocus) [focus] set w .fattendre toplevel $w wm title $w "Please Wait ..." wm protocol $w WM_DELETE_WINDOW KillParLaCroix wm attributes $w -topmost 1 wm resizable $w 0 0 # wm overrideredirect $w 1 if {$tcl_platform(platform) eq "macintosh"} { unsupported1 style $w dBoxProc } set FAPG 0. set TFAt(Top) $w set TFAt(WtLabel) ".fattendre.f.label" set TFAt(WtPbar) ".fattendre.f.pbar" frame $w.f label $w.f.label -background cyan -justify left -anchor nw -text $tx ttk::progressbar $w.f.pbar -variable FAPG grid $w.f.label -row 0 -column 0 -sticky news -padx 10 -pady {10 5} grid $w.f.pbar -row 1 -column 0 -sticky ew -padx 10 -pady {0 10} grid rowconfig $w.f 0 -weight 1 -minsize 0 grid columnconfig $w.f all -weight 1 -minsize 0 grid $w.f -row 0 -column 0 -sticky news grid columnconfig $w all -weight 1 grid rowconfig $w all -weight 1 if {"FontFAtt" ni [font names]} { set fdef [$w.f.label cget -font] set fml [font configure $fdef -family] set size [font configure $fdef -size] font create FontFAtt -family $fml -size $size } $w.f.label configure -font FontFAtt if {! $AvecPB} { grid forget $w.f.pbar $w.f.pbar stop } else { $w.f.pbar start } update idletasks bind $w {raise [winfo toplevel %W] ; wm attributes [winfo toplevel %W] -topmost} FenetreAuCentre $w set TFAt(oldGrab) [grab current $w] if {$TFAt(oldGrab) ne ""} { set TFAt(grabStatus) [grab status $TFAt(oldGrab)] } else { set TFAt(grabStatus) "" } grab $w focus $w MesCouleurs $w raise $w update idletasks return } proc FaireAttendreAnnaick {w ti tx} { Wup "Permet de faire attendre le user pendant que le prog travaille" Wup "Fait apparaitre une boite de dialogue pour dire ce qui se passe" global oldGrab global oldFocus global grabStatus catch {destroy $w} toplevel $w wm title $w $ti if {[winfo viewable [winfo toplevel [winfo parent $w]]] } { wm transient $w [winfo toplevel [winfo parent $w]] } label $w.label -background red -text $tx -justify left pack $w.label -padx 10 -pady 10 wm withdraw $w set x [expr {[winfo screenwidth $w]/2 - [winfo reqwidth $w]/2 - [winfo vrootx [winfo parent $w]]}] set y [expr {[winfo screenheight $w]/2 - [winfo reqheight $w]/2 - [winfo vrooty [winfo parent $w]]}] wm geom $w +$x+$y wm deiconify $w update idletasks set oldFocus [focus] set oldGrab [grab current $w] if {[string compare $oldGrab ""]} { set grabStatus [grab status $oldGrab] } grab $w focus $w #update idletasks update #tkwait visibility $w.label return "" } proc FaireLaSuite {{w ""}} { global TFAt Defauts if {! [ModeI] && ! $Defauts(MarcheForcee)} {return} if {[info exists TFAt(WtMsg)]} { $TFAt(WtLabel) configure -text [lindex $TFAt(WtMsg) end] if {[lindex $TFAt(WithPB) end]} { grid .fattendre.f.pbar -row 1 -column 0 -sticky news -padx 10 -pady {1 10} .fattendre.f.pbar start } else { grid forget .fattendre.f.pbar } set TFAt(WtMsg) [lreplace $TFAt(WtMsg) end end] set TFAt(WithPB) [lreplace $TFAt(WithPB) end end] if {! [llength $TFAt(WtMsg)]} { array unset TFAt "WtMsg" array unset TFAt "WithPB" } update return } wm protocol .fattendre WM_DELETE_WINDOW "" if {[winfo exists TFAt(oldFocus)]} { focus $TFAt(oldFocus) } else { array unset TFAt oldFocus } destroy .fattendre if {$TFAt(oldGrab) ne ""} { if {$TFAt(grabStatus) ne "global"} { catch {grab $TFAt(oldGrab)} } else { catch {grab -global $TFAt(oldGrab)} } } unset TFAt update idletasks return } proc FaireLaSuiteAnnaick {w} { Wup "Permet de faire attendre le user pendant que le prog travaille" Wup "Fait diapparaitre la boite de dialogue et remet le focus sur la precedente fenetre" global oldGrab global oldFocus global grabStatus catch {focus $oldFocus} catch {destroy $w} if {[string compare $oldGrab ""]} { if {[string compare $grabStatus "global"]} { catch {grab $oldGrab} } else { catch {grab -global $oldGrab} } } update idletasks return "" } proc FaireLesToiles {} { set FichierToilesAFaire "[Fiches]/ToilesAFaire.txt" set Liste [LesLignesDuFichier "[Fiches]/ToilesAFaire.txt"] FaireLire "I'll create the jpg for $Liste\n After creation please verify and delete $FichierToilesAFaire" CreeLesToilesPourTous $Liste if {[OuiOuNon "Do I delete $FichierToilesAFaire ?"]} { file delete $FichierToilesAFaire } } proc FaireLire {Message {Force ""}} { global FaireLireNon if {[info commands "PourWscope"]!={} && [info commands "OnTraite"]!={} && [PourWscope] && [OnTraite "RetGene"]} { return [AfficheVariable $Message] } set Force [regexp -nocase "1|Force" $Force] if { ! $Force && [info exists FaireLireNon] && $FaireLireNon} { return } if {[string length $Message] > 1500} { set Message "[string range $Message 0 499]\n ... \n ... [string range $Message end-499 end]" } package require Tk #rR 2014/08/13 rajout de NomDe set FL [NomDe faireLire] after idle [list $FL.msg configure -wraplength 10i -foreground white -background red] tk_dialog $FL "Please press OK" "$Message" {} 0 Acknowledge catch {destroy $FL} update } proc FaireSavoir {{Texte ""} {Titre ""}} { Wup "Petite boite de dialogue qui attend sa reponse sans bloquer tout le monde" Wup "Permet de retourner qq chose mais ne peut etre lance plusieurs fois car vwait fait attendre le suivant" global NomDeRetour set w [NomDe fenetre] if {$Titre==""} {set Titre $w} toplevel $w wm geometry $w +300+100 wm title $w "$Titre" wm resizable $w false false wm protocol $w WM_DELETE_WINDOW "destroy $w" if {[string length $Texte] > 1000} { set Texte "[string range $Texte 0 499]\n ... \n ... [string range $Texte end-499 end]" } set frameLabel "$w.framelabel" set frameButton "$w.framebutton" set Label "$frameLabel.label" set Button "$frameButton.b" frame $frameLabel -borderwidth "3" -relief "flat" -pady "2" -padx "10" frame $frameButton -borderwidth "3" -relief "flat" -pady "2" -padx "10" label $Label -borderwidth "1" -relief "flat" -pady "4" -padx "5" -background "red" -text "$Texte" -wraplength "10i" -justify left -font "Courier -12 bold" button $Button -text "Ok" -command "set NomDeRetour($w) $w" # button $Button -text "Ok" -command " # set w \[winfo toplevel $Button\]; # set NomDeRetour(\$w) \$w; # set Retour \[set NomDeRetour(\$w)\]; # unset NomDeRetour(\$w); # after 10 destroy \$w; # return 1" pack $frameLabel -fill both -expand true pack $frameButton -fill both -expand true pack $Label -fill x -side top -expand true pack $Button -side top vwait NomDeRetour($w) if {[info exists NomDeRetour($w)]} { set Retour [set NomDeRetour($w)] unset NomDeRetour($w) } else { set Retour "" } destroy $w return $Retour } proc FaireSavoir_Multi {{Texte ""} {Titre ""}} { Wup "Petite boite de dialogue qui attend sa reponse sans bloquer tout le monde" Wup "Attention permet de le lancer plusieurs fois en meme temps mais pas de return sous Windows" global NomDeRetour set w [NomDe fenetre] if {$Titre==""} {set Titre $w} toplevel $w wm geometry $w +300+100 wm title $w "$Titre" wm resizable $w false false wm protocol $w WM_DELETE_WINDOW "after 10 destroy $w" if {[string length $Texte] > 1000} { set Texte "[string range $Texte 0 499]\n ... \n ... [string range $Texte end-499 end]" } set frameLabel "$w.framelabel" set frameButton "$w.framebutton" set Label "$frameLabel.label" set Button "$frameButton.b" frame $frameLabel -borderwidth "3" -relief "flat" -pady "2" -padx "10" frame $frameButton -borderwidth "3" -relief "flat" -pady "2" -padx "10" label $Label -borderwidth "1" -relief "flat" -pady "4" -padx "5" -background "red" -text "$Texte" -wraplength "10i" -justify left -font "Courier -12 bold" button $Button -text "Ok" -command "eval \[wm protocol $w WM_DELETE_WINDOW\]" pack $frameLabel -fill both -expand true pack $frameButton -fill both -expand true pack $Label -fill x -side top -expand true pack $Button -side top return "$w" } proc FaireStopVMD {} { global CanalV global ListeTypeDeFeatures global clients sock catch {close $sock} catch {unset clients($sock)} catch {close $CanalV} catch {unset CanalV} trace remove variable ListeTypeDeFeatures write UpdateVMDFeatures return } proc FaitACP {} { global ListeScore set nlgn [llength $ListeScore] set ncol [llength [lindex $ListeScore 0]] set X "2 $nlgn $ncol" foreach l $ListeScore { foreach e $l { lappend X $e } } EspionneL $X nist_pca $X exit } proc FaitArbreEtData {} { global VODep LitRef set VODep [info globals] foreach s [ListeDesPABs] { puts "Traite $s" DataPourItol $s ClearVar } exit } proc FaitLignesA60 {s} { set rep "" set D 0 while {$D < [string length $s]} { set F [expr {$D + 59}] set Linit [string range $s $D $F] set L [string map [list Z - . -] $Linit] append rep "$L\n" incr D 60 } return $rep } proc FaitSuperposition {{Init 0}} { global StrucAVoir EquivalenceZone ListePDB ZoneSuperposition LNOrdali LSOrdali if {[ModeI]} { FinSuper } if {! [info exists StrucAVoir] || $Init} { ChoixPlusieursPDB } if {[llength $StrucAVoir] == 0} { return } unset -nocomplain EquivalenceZone # Verifie que les bornes des zones a superposees # existent dans les differents pdb set Nsup [VerifieZonesSuperposition] if {$Nsup < 3} { if {$Nsup == 0} { set txt "No zone" } else { set txt "Too few atomes" } FaireLire "Beware !! $txt defined to superpose structures !!" return } # Zones verified # zones in general coords. if {[llength $StrucAVoir] == 1} { set molref $StrucAVoir } else { if {[ModeI]} { set molref [ChoixPDBReference] } else { set molref [lindex $StrucAVoir 0] } } if {$molref == -1} {return} FaireAttendre "Please wait ...\nSuperposing structures ..." # Met le referent en debut de liste set i [lsearch $StrucAVoir $molref] set StrucAVoir [lreplace $StrucAVoir $i $i] set StrucAVoir [linsert $StrucAVoir 0 $molref] # Associe zone superposition en coord. generales # aux zones en coord. PDB foreach mol $StrucAVoir { set spdb [BonNomPDB $mol] set MolId [DonneIdDeAccessPDB $mol] set chn [DonneChainDeAccessPDB $mol] # boucle sur zone. # Exclue prot qui ont pas la zone foreach z $ZoneSuperposition { lassign $z x1 x2 Exc if {$mol in $Exc} { lappend EquivalenceZone($mol) "exclue" } else { lappend EquivalenceZone($mol) [list [list [DonnePosGS $spdb $x1] [DonnePosGS $spdb $x2]] $chn $spdb $Exc $x1 $x2] } } } # ecrit au Log AuLog @begin table AuLog @title Superposition zones AuLog @begin tabular AuLog @titlecols [list molecules "positions ranges"] lappend ligne "pos. alignment" foreach z [set EquivalenceZone($molref)] { set x1 [lindex $z 4] set x2 [lindex $z 5] set chn [lindex $z 1] set cx1 [string trim "$chn$x1"] set cx2 [string trim "$chn$x2"] lappend ligne "$cx1-$cx2" } AuLog @row $ligne foreach m [array names EquivalenceZone] { set ligne [list $m] foreach z [set EquivalenceZone($m)] { if {[lsearch [lindex $z 0] "exclue"] != -1} { lappend ligne "Discarded" } else { set x1 [lindex [lindex $z 0] 0] set x2 [lindex [lindex $z 0] 1] set chn [lindex $z 1] if {$chn == "a"} {set chn " "} set cx1 [string trim "$chn$x1"] set cx2 [string trim "$chn$x2"] lappend ligne "$cx1-$cx2" } } AuLog @row $ligne } AuLog @end AuLog @end # Do superposition SuperAvecOrdali AppliqueSuperposition FaireLaSuite return } proc FaitTaxSelection {} { global db LModelId Tx LTaxSelected TaxRoot LUserId LSelectableId set LTaxSelected [list] # check ... set Lsel [list] foreach id $LSelectableId { if {$Tx(NbKeep,$id) > 0} { lappend Lsel $id } } set LTaxSelected $Lsel # Add model organisms if required if {$Tx(-addmodel)} { puts "\nAdd Models : TaxRoot $TaxRoot" foreach m $LModelId { if {$TaxRoot in [DonneGenealogieMem $m]} { lappend LTaxSelected $m } } } set LTaxSelected [lsort -unique -integer $LTaxSelected] puts "Selected TaxIds : [llength $LTaxSelected]" puts "-----------------" foreach i $LTaxSelected { puts "[format %7d $i] | $Tx(Rank,$i) $Tx(Name,$i)" foreach a [DonneGenealogieMem $i] { set Tx(Etat,$a) 1 } set Tx(Etat,$i) -1 } return } proc FaitTracage {what} { global TypeRep DListCou pgl TSList Rad RadMol Rc LesVecs mol set TypeRep $what set w $pgl(wogl) if {[info exists TSList($what)]} { set DListCou [set TSList($what)] set Rad [set Rc($what)] } else { switch $what { "ribbon" { if {$LesVecs == {} } {return} set TSList($what) [glGenLists 1] set DListCou [set TSList($what)] glNewList [set TSList($what)] GL_COMPILE use_light glBegin GL_TRIANGLES set k 0 foreach {v1 v2 v3} $LesVecs { glNormal3fv $v1 light_color3f {*}$v2 glVertex3fv $v3 if {$k < 3} { puts [format "v1 %8.3f %8.3f %8.3f" {*}$v1] puts [format "v3 %8.3f %8.3f %8.3f" {*}$v3] puts "" incr k } } glEnd set Rad $RadMol set Rc($what) $RadMol } "stick" { set TSList($what) [glGenLists 1] set DListCou [set TSList($what)] glNewList [set TSList($what)] GL_COMPILE CalculeStick [set TSList($what)] $mol set Rad $RadMol set Rc($what) $RadMol } "fildefer" { set TSList($what) [glGenLists 1] set DListCou [set TSList($what)] glNewList [set TSList($what)] GL_COMPILE CalculeFilDeFer [set TSList($what)] $mol set Rad $RadMol set Rc($what) $RadMol } "benjilamalice" { use_light set pgl(xCen) 0.0 set pgl(yCen) 0.0 set pgl(zCen) 0.0 set Rc($what) 2. set Rad 2. set TSList($what) [glGenLists 1] set DListCou [set TSList($what)] glNewList [set TSList($what)] GL_COMPILE_AND_EXECUTE BenjiLaMalice trace puts "j'ai fait la benji experience !" } } glEndList } Update3DMatrices $pgl(wogl) postredisplay return } proc FaitTrieListe {} { lappend LesLignes "Chr2 9963 10526 1" lappend LesLignes "Chr1 15963 16526 1" lappend LesLignes "Chr1 10963 12526 1" lappend LesLignes "Chr1 14963 15526 1" lappend LesLignes "Chr1 20963 21526 1" lappend LesLignes "Chr2 12596 13526 1" lappend LesLignes "Chr2 15423 16526 1" set LesLignes [lsort -command TrieList -increasing $LesLignes] return $LesLignes } proc FamiliarOrganism {Genre {Espece ""}} { global FamiliarOrganism global RepertoireDuGenome if {$Espece==""} { set O $Genre } else { set O "$Genre $Espece" } if {[info exists FamiliarOrganism($O)]} { return [set FamiliarOrganism($O)] } set Orga [Glossaire $O Complet] if {$Orga==""} { set Orga $O } if {[info exists FamiliarOrganism($Orga)]} { return [set FamiliarOrganism($Orga)] } if {[info exists FamiliarOrganism ]} { return [set FamiliarOrganism("NotFound")] } set Fichier "$RepertoireDuGenome/fiches/familiar_organism" if {[file exists $Fichier]} { Wup "We do it first for the most common used" foreach G [LesGenomesComplets] { set C [Glossaire $G Court] set FamiliarOrganism($G) 0 set FamiliarOrganism($C) 0 } set FamiliarOrganism(LaListeMerci) {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } if {[regexp {^ *\#} $Ligne]} { continue } set OrgaLu [string trim $Ligne] if {[Glossaire $OrgaLu Court]==""} { if {[regexp -nocase {^ERROR} [set Bon [Tax $OrgaLu "Name"]]]} { FaireLire "For familiar organism\nI don't know the organism \n$OrgaLu\n I'll skip it" continue } set OrgaLu $Bon } lappend FamiliarOrganism(LaListeMerci) $OrgaLu set FamiliarOrganism($OrgaLu) 1 set FamiliarOrganism([Glossaire $OrgaLu Court]) 1 } set FamiliarOrganism("NotFound") 0 return [FamiliarOrganism $O] } set LaFamille {} while {[OuiOuNon "Do You want to define 'Familiar Organisms' ?"]} { if {[OuiOuNon "Do You want to copy or link an other 'FamiliarOrganism' file ?"]} { set Autre [ButineArborescence "All" "$RepertoireDuGenome/.."] if {$Autre==""} { continue } if {[OuiOuNon "Do I link \n$Autre\n to \n$Fichier\n ?"]} { exec ln -s $Autre $Fichier } elseif {[OuiOuNon "Do I copy it ?"]} { File copy $Autre $Fichier } return [FamiliarOrganism $O] } set LaFamille [ChoixDesPresents [LesGenomesComplets]] set Other "" while {[OuiOuNon "Do You want to add other organisms to the familiar organisms list ?" 0]} { set Other [Entre $Other] set BonOther [Glossaire $Other Complet] if {$BonOther==""} { FaireLire "I don't know the organism $Other" } else { lappend LaFamille $BonOther } } if {[OuiOuNon "[join $LaFamille "\n"]\n\nOK ?"]} { break } } if {$LaFamille=={}} { if { ! [OuiOuNon "Do You want to save 'Familiar Organisms' as an empty list ?"]} { set FamiliarOrganism("NotFound") 0 set FamiliarOrganism(LaListeMerci) {} return [FamiliarOrganism $O] } } SauveLesLignes $LaFamille dans $Fichier return [FamiliarOrganism $O] } proc FamiliarOrganismsInMSF {Nom} { set Nom [file tail $Nom] set FichierMSF "[RepertoireDuGenome]/msf/$Nom" DecortiqueUnMSF $FichierMSF LesAccess set LesAccessInteressants {} foreach Access $LesAccess { set TaxIds [TaxIdDuAccess $Access $Nom] if {$TaxIds==""} { continue } foreach TaxId [split $TaxIds " "] { if {$TaxId==""} { continue } if {[FamiliarTaxId $TaxId]} { lappend LesAccessInteressants $Access break } } } return $LesAccessInteressants } proc FamiliarTaxId {TaxId {Quoi ""}} { global FamiliarTaxId if {$Quoi==""} { set Quoi "Test" } if {[info exists FamiliarTaxId($TaxId,$Quoi)]} { return [set FamiliarTaxId($TaxId,$Quoi)] } if {[info exists FamiliarTaxId("TaxIdEstCharge")]} { return 0 } set FamiliarTaxId("TaxIdEstCharge") 1 set FichierFOWTI "[RepertoireDuGenome]/fiches/familiar_organism_with_taxid" while { ! [file exists $FichierFOWTI]} { if { ! [OuiOuNon "Can I create the file\n$FichierFOWTI\nusing familiar_organism ?"]} {return 0} TaxIdOfFamiliarOrganisms } foreach Ligne [LesLignesDuFichier $FichierFOWTI] { scan $Ligne "%s %s %d" G E OX set FamiliarTaxId($OX,All) $Ligne set FamiliarTaxId($OX,Test) 1 lappend FamiliarTaxId(LaListeMerci,Test) $Ligne } return [FamiliarTaxId $TaxId $Quoi] } proc Family {Nom} { return [ExtraitInfo $Nom "Family"] } proc Fantome {Nom} { set Valeur [ExtraitInfo $Nom "Fantome"] if { $Valeur == "" } { return 0 } if {[regexp -nocase -- "oui" $Valeur]} { return 1 } else { return 0 } } 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 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 Fard {K X Y} { global TypeFard global KanvaAColorer set Nom [Box [BoiteDuCourant $K $X $Y] nom] set KanvaAColorer $K set Couleur [CouleurParTypeEtNom [set TypeFard($K)] $Nom $K] unset KanvaAColorer return $Couleur } proc FastAllStar {} { array set tableau [readFasta "/genomics/link/STAF/Raphael/RaphaelAllSequences.tfa"] foreach Entete $tableau(index) { set fh [open "/genomics/link/STAF/Raphael/$Entete.tfa" w] puts $fh [formatFasta $tableau($Entete,header) $tableau($Entete,sequence) 60] close $fh } } proc FastMEExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./fastme" } if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { return [file join $OrdBinDir "fastme"] } else { return "/biolo/fastme/bin/fastme" } } else { set lexe [file join $OrdBinDir "fastme.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc FastaCmd {LesAcc {Complet ""} {AvecAffichage 1} {Banque ""}} { Wup "Pour les access unigene on recupere la definition par fastacmd" #Il faudrait mettre un defaut commme genbank par exemple set Results "" foreach Acc $LesAcc { if { [regexp "UG:Hs" $Acc]} { set CommandeFastaCmd "fastacmd -d unigenehs -s $Acc" } elseif {[regexp "RSHUM:" $Acc]} { set CommandeFastaCmd "fastacmd -d rshuman -s $Acc" } elseif {$Banque != ""} { set CommandeFastaCmd "fastacmd -d $Banque -s $Acc" } else { set CommandeFastaCmd "" #Espionne "Default fastacmd pour $Acc" continue } if {$CommandeFastaCmd==""} {continue} set FastaCmdOut "" if {[catch {set FastaCmdOut [eval exec $CommandeFastaCmd]} Message]} { #Espionne "$Message" } if {![info exists FastaCmdOut]} {continue} if {$FastaCmdOut == ""} {set FastaCmdOut "No Result for $Acc"} if {$Complet == ""} { lappend Results [lindex [split $FastaCmdOut "\n"] 0] } else {lappend Results $FastaCmdOut} } if {$AvecAffichage} { return "[AfficheVariable [join $Results "\n"] "AvecFormateAvecBlaste" "FastaCmd search result"]" } else { return "[join $Results "\n"]" } } proc FastaCmd_Affymetrix {Acc {Complet ""}} { Wup "Pour les access presents dans Affymetrix on recupere la definition par fastacmd" set RepAffy "[RepertoireDuGenome]/Autres_Puces/Affy/U133A_2_0/" set RepBanque "$RepAffy/Banque_Blast" set CommandeFastaCmd "fastacmd -d \"$RepBanque/HG-U133A_2\" -s $Acc" set FastaCmdOut "" catch {set FastaCmdOut [eval exec $CommandeFastaCmd]} Message if {! [info exists FastaCmdOut]} {return ""} if {$FastaCmdOut==""} {set FastaCmdOut "No Result for $Acc"} if {$Complet ==""} { lappend Results [lindex [split $FastaCmdOut "\n"] 0] } else {lappend Results $FastaCmdOut} return "[AfficheVariable [join $Results "\n"] "AvecFormateAvecBlaste"]" } proc FastaCmd_Ontario {LesAcc {Complet ""}} { Wup "Pour les access presents dans EST on recupere la definition par fastacmd" #set CommandeFastaCmd "fastacmd -d \"[RepertoireDuGenome]/Autres_Puces/Affy/U133A_2_0/Banque_Blast/HG-U133A_2\" -s $Acc" set CommandeFastaCmd "fastacmd -d EST_Chips -s $Acc" set FastaCmdOut "" catch {set FastaCmdOut [eval exec $CommandeFastaCmd]} Message if {! [info exists FastaCmdOut]} {return ""} if {$FastaCmdOut==""} {set FastaCmdOut "No Result for $Acc"} if {$Complet ==""} { lappend Results [lindex [split $FastaCmdOut "\n"] 0] } else {lappend Results $FastaCmdOut} return "[AfficheVariable [join $Results "\n"] "AvecFormateAvecBlaste"]" } proc FastaCmd_UMCU {LesAcc {Complet ""}} { Wup "Pour les access presents dans UMCU on recupere la definition par fastacmd" set CommandeFastaCmd "fastacmd -d UMCU_HUMANV2 -s $Acc" set FastaCmdOut "" catch {set FastaCmdOut [eval exec $CommandeFastaCmd]} Message if {! [info exists FastaCmdOut]} {return ""} if {$FastaCmdOut==""} {set FastaCmdOut "No Result for $Acc"} if {$Complet ==""} { lappend Results [lindex [split $FastaCmdOut "\n"] 0] } else {lappend Results $FastaCmdOut} return "[AfficheVariable [join $Results "\n"] "AvecFormateAvecBlaste"]" } proc FastaForBlast {{Qui ""} {Quoi ""} {FastaFile ""} {NewFastaFile ""}} { global FastaForBlast set RemovePipeFromHeader [OuiOuNon "Do I replace >sp|ac|id with >ID AC" 0 ] #rR on lit le fichier fasta fourni par Uniprot et si RemeovePipeFromHeader on modifie sp|ac|id en SPT:ID AC #rR on rajoute aussi OX=9606 en fin d'entete (attentio avant j'avais OX: ... !) #rR les statistiques peuvent se faire apres création du nouveau fasta avec StatFromFasta ci-dessous set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {$Qui=="-"} { set Qui "" } if {$Quoi=="-"} { set Quoi "" } if {$FastaFile!=""} { if {[info exists FastaForBlast(FASTAFILE,)]} { if {$FastaForBlast(FASTAFILE,)!=$FastaFile} { unset FastaForBlast } } set FastaFileToSet $FastaFile set NewFastaFileToSet $NewFastaFile } if {[info exists FastaForBlast($Qui,$Quoi)]} { return $FastaForBlast($Qui,$Quoi) } if {[info exists FastaForBlast("EstCharge")]} { if {[info exists FastaForBlast($Qui,ID)]} { set ID [string toupper $FastaForBlast($Qui,ID)] if {[info exists FastaForBlast($ID,$Quoi)]} { return $FastaForBlast($ID,$Quoi) } } if {[info exists FastaForBlast($Qui,TAXID)]} { set TID $FastaForBlast($Qui,TAXID) if {[info exists FastaForBlast($TID,$Quoi)]} { return $FastaForBlast($TID,$Quoi) } } return "" } if { ! [info exists FastaFileToSet]} { FaireLire "Please give the name of the FastaFile" return "" } set FastaForBlast(FASTAFILE,) $FastaFileToSet set FastaForBlast(NEWFASTAFILE,) $NewFastaFileToSet set FastaForBlast("EstCharge") 1 set FastaFile $FastaForBlast(FASTAFILE,) set Queue [file tail $FastaFile] set OnGarde 1 set LeTFAACreer {} set FlushSize 10000 set iFlush 0 set DejaStocke 0 if {$FastaForBlast(NEWFASTAFILE,)==""} { set CreateNew 0 } else { set CreateNew 1 if {[file exists $FastaForBlast(NEWFASTAFILE,)]} { if {[OuiOuNon "$FastaForBlast(NEWFASTAFILE,)\n already exists. Do I overwrite"]} { file delete $FastaForBlast(NEWFASTAFILE,) } else { if { ! [OuiOuNon "$FastaForBlast(NEWFASTAFILE,)\n already exists. Do I append"]} { return "" } } } } set MaxiPourTestons -10000 ;#rR 100 pour limité, -100 pour illimité set F [open $FastaForBlast(FASTAFILE,) "r"] while {1} { set OnBreak [expr [gets $F Ligne] < 0 ] if { ! $OnBreak } { regsub -all " +" $Ligne " " Ligne set Ligne [string trim $Ligne] if {$Ligne==""} { continue } #rR dans sequence if { ! [regexp "^>" $Ligne]} { lappend LeTFAACreer $Ligne continue } } #rR on a un chevron #rR on traite d'abord le précédent if {[info exists Courant]} { if {$OnGarde} { if {[incr MaxiPourTestons -1]==0} { set OnBreak 1 } set ID [string toupper $Id] set COURANT [string toupper $Courant] lappend FastaForBlast(LISTOF,IDS) $Id lappend FastaForBlast(LISTOF,ACS) $Ac lappend FastaForBlast($MemoTaxId,IDS) $Id lappend FastaForBlast($MemoTaxId,ACS) $Ac if { ! $CreateNew} { #set FastaForBlast($COURANT,TFA) [join $LeTFACourant "\n"] set FastaForBlast($ID,ID) $Id set FastaForBlast($ID,AC) $Ac set FastaForBlast($ID,TAXID) $MemoTaxId } incr iFlush if {$CreateNew && ($iFlush>=$FlushSize || ($iFlush>0 && $OnBreak))} { AppendAuFichier $FastaForBlast(NEWFASTAFILE,) [join $LeTFAACreer "\n"] incr DejaStocke $iFlush Espionne "$DejaStocke sequences already done." set LeTFAACreer {} set iFlush 0 } } } if {$OnBreak} { break } #rR on traite l'entête if { ! [regexp {^>([^ ]+) (.+)} $Ligne Match AI D]} { FaireLire "pas bon $Ligne" lappend LeNew $Ligne continue } set TexteTaxId "" if {[regexp {\|} $Ligne]} { #rR on espere >Banque|Ac|Id Definition... (attention à l'ordre) set ResteDeLaLigne "" regexp {^>([^ ]+) (.+)} $Ligne Match BAI ResteDeLaLigne set Banque "" set Ac "" set Id "" lassign [split $BAI "|"] Banque Ac Id if {$Ac==""} { set Ac $BAI } if {$Id==""} { set Id $Ac } if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } } else { #rR on espere >Banque:Id Ac Definition... (Attention à l'ordre Id avant Ac) set Banque "" set Id "" set Ac "" set ResteDeLaLigne "" regexp {^>([^ ]+) ([^ ]+) (.+)} $Ligne Match Id Ac ResteDeLaLigne if {[regexp {([^\:]+)\:(.+)} $Id Match B I]} { set Banque $B set Id $I } if {$Ac==""} { set Ac $Id } if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } } set TexteBanque "" # on laisse comme c'est if {[string equal -nocase "sp" $Banque]} { set Banque "SW" } # on laisse comme c'est if {[string equal -nocase "tr" $Banque]} { set Banque "TR" } #rR supprimé 20160708 *************************************************** if {$Banque!=""} { set TexteBanque "$Banque:" } set Gn "" regexp {GN=([^ ]+)} $Ligne Match Gn set TextGn "" if {$Gn!=""} { set TextGn " GN=$Gn" } set FullOs "Unknown unknown" if {[regexp { OS=(.+)} $Ligne Match FullOsWithJunk]} { regsub {[A-Z][A-Z]=.*} $FullOsWithJunk "" FullOs set FullOs [string trim $FullOs] } set TexteTaxId "" set TaxId [TaxParQdsMemo $FullOs] if {$TaxId!=""} { lappend LesTaxId $TaxId set TexteTaxId " OX=$TaxId" set FastaForBlast($TaxId,FULLOS) $FullOs } if {$RemovePipeFromHeader} { set Entete ">$TexteBanque$Id $Ac $ResteDeLaLigne$TexteTaxId" } else { set Entete "$Ligne$TexteTaxId" } lappend LeTFAACreer $Entete set Courant $Id set COURANT [string toupper $Courant] set MemoTaxId $TaxId set ID [string toupper $Id] set AC [string toupper $Ac] if { ! $CreateNew} { if {$ID!=$AC} { set FastaForBlast($AC,ID) $ID } set FastaForBlast($ID,FULLOS) $FullOs } set FULLOS [string toupper $FullOs] set FastaForBlast($FULLOS,TAXID) $TaxId } set LesTaxId [lsort -unique $LesTaxId] set FastaForBlast(LISTOF,TAXID) $LesTaxId foreach TaxId $LesTaxId { if { ! [info exists FastaForBlast($TaxId,IDS)]} { FaireLire "$TaxId empty" ; continue } set FullOs $FastaForBlast($TaxId,FULLOS) lappend FastaForBlast(LISTOF,FULLOS) "$FullOs" lappend FastaForBlast(LISTOF,TAXIDOS) "${TaxId}_$FullOs" set nOK [llength $FastaForBlast($TaxId,IDS)] lappend FastaForBlast(LISTOF,COUNT) "$nOK $TaxId $FullOs" } set FastaForBlast(LISTOF,TAXID) [join $FastaForBlast(LISTOF,TAXID) "\n"] set FastaForBlast(LISTOF,TAXIDOS) [join $FastaForBlast(LISTOF,TAXIDOS) "\n"] set FastaForBlast(LISTOF,FULLOS) [join $FastaForBlast(LISTOF,FULLOS) "\n"] set FastaForBlast(LISTOF,COUNT) [join $FastaForBlast(LISTOF,COUNT) "\n"] if {$CreateNew} { set FichierStat "$FastaForBlast(NEWFASTAFILE,).stat" set FastaForBlast(STAT,FILENAME) [Sauve $FastaForBlast(LISTOF,COUNT) dans $FichierStat] } return [FastaForBlast $Qui $Quoi] } proc FastaLineWidth {{W ""}} { global FastaLineWidth set Default 60 if {$W!=""} { set FastaLineWidth $W } if {[regexp -nocase "Default" $W]} { set FastaLineWidth $Default } if { ! [info exists FastaLineWidth]} { set FastaLineWidth $Default } return $FastaLineWidth } proc FastaMARegionExtractionThroughMAF {FastaMAFile Ordered_ProjectedMAFFile RefSeqFile DMA FMA} { ### Extrait un ali fasta de la region definie par DQ et FQ ### #RefSeqFile == File containing the Reference Sequence for the MAF File #puts "DQ: $DQ ; FQ: $FQ ; DMA: $DMA ; FMA: $FMA" set ReducedFastaMAFile "$FastaMAFile\_$DMA\_$FMA.tfaMAreduced" Maf2fasta $RefSeqFile $Ordered_ProjectedMAFFile $ReducedFastaMAFile fasta $DMA $FMA] return $ReducedFastaMAFile } proc FastaN {FichierTFA {FichierTFAOuBanque human} {FichierFasta ""} {Expect 0.001} {m 0} {N ""} {AddOpt ""}} { if {![file exists $FichierTFA]} {return ""} if { [string equal -nocase $FichierTFAOuBanque "genbank"]} { set Banque "%B" } elseif {[string equal -nocase $FichierTFAOuBanque "genembl"]} { set Banque "%B" } elseif {[string equal -nocase $FichierTFAOuBanque "est" ]} { set Banque "%C" } elseif {[string equal -nocase $FichierTFAOuBanque "genomes"]} { set Banque "%E" } elseif {[string equal -nocase $FichierTFAOuBanque "human" ]} { set Banque "%F" } elseif {[file exists $FichierTFAOuBanque]} { set Banque $FichierTFAOuBanque } else { set Banque "$FichierTFAOuBanque 12" } set NomFichier [file tail $FichierTFA] if {$FichierFasta == ""} {set FichierFasta "$FichierTFA.fastan"} Espionne "$FichierTFA against $FichierTFAOuBanque DataBase : $Banque" if {$N != ""} { set ParN "-N $N" } else { set ParN "" } set CommandeFastaN "exec /gcg/extensions/bin/fasta_t -z 0 -H -E $Expect -m $m $AddOpt $ParN -O $FichierFasta -q $FichierTFA \"$Banque\"" #eval $CommandeFastaN if {![catch {eval $CommandeFastaN} Message]} {Espionne $Message} return $FichierFasta } proc FastaNAvecAffichage {FichierTFA {FichierTFAOuBanque human} {FichierFasta ""} {Expect 0.001} {m 0} {N ""}} { set Fichier [FastaN $FichierTFA $FichierTFAOuBanque $FichierFasta $Expect $N $m] Espionne "$FichierTFA displaying ..." AfficheVariable [ContenuDuFichier $Fichier] AvecSegAlignement $Fichier return $Fichier } proc FastaNToBlastN {FichierFasta FichierBlast} { set MaxLongNomSbjct 39 if {![file exists $FichierFasta]} {return ""} set SuisJeSurLEnteteDeFasta 1 set SuisJeSurLaDescriptionDeLaQuery 0 set SuisJeSurLaDescriptionDeLaBanque 0 set SuisJeSurLEnteteDesSequences 0 set SuisJeSurLaDescriptionDeLAlignement 0 set SuisJeSurLaDescriptionDeLaQuery 0 set SuisJeSurLaDescriptionDuSubject 0 set SuisJeSurLaSequenceDeLaQuery 0 set SuisJeSurLaSequenceDuSubject 0 set SuisJeSurLaSequenceDesBarres 0 set LesSbjctDansEntete {} set LesSbjctDansAli {} set F [open $FichierFasta] while {[gets $F Ligne]>=0} { if {[regexp ">>><<<" $Ligne]} {break} if {![regexp -nocase {[a-z:]} $Ligne]} {continue} if {!$SuisJeSurLaDescriptionDeLaQuery && [regexp {, ([0-9]*) nt$} $Ligne tmp TailleSequence]} { set SuisJeSurLaDescriptionDeLaQuery 1 regsub $tmp $Ligne "" Ligne set NomQuery [string trim $Ligne] continue } if {$SuisJeSurLaDescriptionDeLaQuery && ([regexp " vs " $Ligne] && [regexp " library" $Ligne])} { set SuisJeSurLaDescriptionDeLaBanque 1 regsub -nocase " vs " $Ligne "" Ligne regsub -nocase " library" $Ligne "" Ligne set NomBanque [string trim $Ligne] set SuisJeSurLaDescriptionDeLaQuery 0 set SuisJeSurLaDescriptionDeLaBanque 1 continue } if {$SuisJeSurLaDescriptionDeLaBanque && [regexp {([0-9]+) residues in ([ 0-9]+)} $Ligne tmp NbLetters NbSequences]} { set NbSequences [string trim NbSequences] set SuisJeSurLaDescriptionDeLaBanque 0 continue } if {!$SuisJeSurLEnteteDesSequences && [regexp "^The best scores are: " $Ligne]} { set SuisJeSurLEnteteDeFasta 0 set SuisJeSurLEnteteDesSequences 1 continue } if {$SuisJeSurLEnteteDeFasta} {continue} if { $SuisJeSurLEnteteDesSequences && ![regexp "^>" $Ligne]} { regsub -all {(gnl\|BL_ORD_ID\|[0-9]+ +|lcl\|)} $Ligne "" Ligne while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LaLigne [split $Ligne " "] set NomSbjct [string range [lindex $Ligne 0] 0 $MaxLongNomSbjct] if {![regexp -nocase {[0-9a-z]} $NomSbjct]} {unset NomSbjct;continue} if {![info exists TabEntete($NomSbjct)]} { lappend LesSbjctDansEntete $NomSbjct set TailleSbjct [lindex $LaLigne end-3] regsub "\\(" $TailleSbjct "" TailleSbjct regsub "\\)" $TailleSbjct "" TailleSbjct set TabEntete($NomSbjct,Taille) $TailleSbjct set TabEntete($NomSbjct,Des) [join [lrange $LaLigne 1 end-3] " "] set TabEntete($NomSbjct) 0 } incr TabEntete($NomSbjct) set i [set TabEntete($NomSbjct)] set TabEntete($NomSbjct,$i,Score) [lindex $LaLigne end-1] set TabEntete($NomSbjct,$i,Expect) [lindex $LaLigne end ] if {[info exists NomSbjct]} {unset NomSbjct} continue } if {[regexp {^>{3}} $Ligne]} {continue} if {[regexp {^>{2}} $Ligne]} { regsub {^>{2}} $Ligne "" Ligne if {[info exists NomSbjct]} { set i [set TabAli($NomSbjct)] set SeqBarres [set TabAli($NomSbjct,$i,SeqBarres)] set PosIni [string first ":" $SeqBarres] set PosFin [string last ":" $SeqBarres] regsub -all {\-} $SeqBarres " " SeqBarres set SeqBarres [string range $SeqBarres $PosIni $PosFin] set SeqQuery [string range [set TabAli($NomSbjct,$i,SeqQuery)] $PosIni $PosFin] set SeqSbjct [string range [set TabAli($NomSbjct,$i,SeqSbjct)] $PosIni $PosFin] set DQ [set TabAli($NomSbjct,$i,DQ)] set FQ [set TabAli($NomSbjct,$i,FQ)] set DS [set TabAli($NomSbjct,$i,DS)] set FS [set TabAli($NomSbjct,$i,FS)] set Alignement [string tolower "$SeqQuery\n$SeqBarres\n$SeqSbjct"] set TabAli($NomSbjct,$i,Alignement) [AliFastaToAliBlast $Alignement $DQ $FQ $DS $FS] unset NomSbjct } set EnAiJeDejaVuUn 0 set SuisJeSurLEnteteDesSequences 0 set SuisJeSurLaSequenceDeLaQuery 0 set SuisJeSurLaSequenceDuSubject 0 set SuisJeSurLaSequenceDesBarres 0 set SuisJeSurLaDescriptionDeLAlignement 1 regsub -all {(gnl\|BL_ORD_ID\|[0-9]+ +|lcl\|)} $Ligne "" Ligne while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LaLigne [split [string trim $Ligne] " "] set NomSbjct [string range [lindex $LaLigne 0] 0 $MaxLongNomSbjct] set Description [join [lrange $LaLigne 1 end] " "] if {![info exists TabAli($NomSbjct)]} { set TabAli($NomSbjct) 0 set TabAli($NomSbjct,Description) $Description #Espionne "set TabAli($NomSbjct,Description) $Description" lappend LesSbjctDansAli $NomSbjct } incr TabAli($NomSbjct) set i [set TabAli($NomSbjct)] set TabAli($NomSbjct,$i,SeqQuery) "" set TabAli($NomSbjct,$i,SeqBarres) "" set TabAli($NomSbjct,$i,SeqSbjct) "" continue } if {[regexp -nocase {; al_cons} $Ligne]} { set SuisJeSurLaDescriptionDeLaQuery 0 set SuisJeSurLaDescriptionDuSubject 0 set SuisJeSurLaSequenceDuSubject 0 set SuisJeSurLaSequenceDeLaQuery 0 set SuisJeSurLaSequenceDesBarres 1 continue } if {[regexp {^>{1}} $Ligne]} { set SuisJeSurLaDescriptionDeLAlignement 0 if {$EnAiJeDejaVuUn} { set SuisJeSurLaSequenceDeLaQuery 0 set SuisJeSurLaDescriptionDeLaQuery 0 set SuisJeSurLaDescriptionDuSubject 1 set SuisJeSurLaSequenceDuSubject 0 } else { set SuisJeSurLaDescriptionDeLaQuery 1 set SuisJeSurLaDescriptionDuSubject 0 set SuisJeSurLaSequenceDeLaQuery 0 set SuisJeSurLaSequenceDuSubject 0 } set EnAiJeDejaVuUn 1 continue } if {$SuisJeSurLaDescriptionDeLAlignement} { set i [set TabAli($NomSbjct)] if {[regexp -nocase {fa_frame: ([rf])} $Ligne tmp Frame]} { if {$Frame == "f"} {set TabAli($NomSbjct,$i,Sens) "Plus / Plus" ;continue} if {$Frame == "r"} {set TabAli($NomSbjct,$i,Sens) "Plus / Minus";continue} } if {[regexp -nocase {fa_z-score:[ ]+([e0-9\.\+]*)} $Ligne tmp Score]} { set TabAli($NomSbjct,$i,Score) $Score continue } if {[regexp -nocase {fa_expect:[ ]+([e0-9\.\-\+]*)} $Ligne tmp Expect]} { set TabAli($NomSbjct,$i,Expect) $Expect continue } if {[regexp -nocase {fa_ident:[ ]+([0-9\.]*)} $Ligne tmp Identity]} { set TabAli($NomSbjct,$i,Identity) [expr $Identity*100] continue } if {[regexp -nocase {sw_ident:[ ]+([0-9\.]*)} $Ligne tmp Identity]} { set TabAli($NomSbjct,$i,Identity) [expr $Identity*100] continue } continue } if {$SuisJeSurLaDescriptionDeLaQuery} { set i [set TabAli($NomSbjct)] if {[regexp -nocase {al_start:[ ]+([0-9]+)} $Ligne tmp DQ]} { set TabAli($NomSbjct,$i,DQ) $DQ continue } if {[regexp -nocase {al_stop:[ ]+([0-9]+)} $Ligne tmp FQ]} { set TabAli($NomSbjct,$i,FQ) $FQ continue } if {[regexp -nocase {al_display_start:[ ]+([0-9]+)} $Ligne tmp Start]} { set TabAli($NomSbjct,$i,QueryStart) $Start set SuisJeSurLaDescriptionDeLaQuery 0 set SuisJeSurLaSequenceDeLaQuery 1 continue } continue } if {$SuisJeSurLaDescriptionDuSubject} { set i [set TabAli($NomSbjct)] set Sens [set TabAli($NomSbjct,$i,Sens)] if {[regexp -nocase {al_start:[ ]+([0-9]+)} $Ligne tmp DS]} { set TabAli($NomSbjct,$i,DS) $DS if {[set TabAli($NomSbjct,Taille)] < $DS} {set TabAli($NomSbjct,Taille) $DS} continue } if {[regexp -nocase {al_stop:[ ]+([0-9]+)} $Ligne tmp FS]} { set TabAli($NomSbjct,$i,FS) $FS if {[set TabAli($NomSbjct,Taille)] < $FS} {set TabAli($NomSbjct,Taille) $FS} continue } if {[regexp -nocase {al_display_start: ([0-9]+)} $Ligne tmp Start]} { set TabAli($NomSbjct,$i,SbjctStart) $Start set SuisJeSurLaDescriptionDuSubject 0 set SuisJeSurLaDescriptionDeLaQuery 0 set SuisJeSurLaSequenceDeLaQuery 0 set SuisJeSurLaSequenceDuSubject 1 continue } if {![info exists TabAli($NomSbjct,Taille)] && [regexp -nocase {sq_len:[ ]+([0-9]+)} $Ligne tmp Taille]} { set TabAli($NomSbjct,Taille) $Taille continue } continue } if {$SuisJeSurLaSequenceDeLaQuery} { set i [set TabAli($NomSbjct)] append TabAli($NomSbjct,$i,SeqQuery) $Ligne continue } if {$SuisJeSurLaSequenceDuSubject} { set i [set TabAli($NomSbjct)] append TabAli($NomSbjct,$i,SeqSbjct) $Ligne continue } if {$SuisJeSurLaSequenceDesBarres} { set i [set TabAli($NomSbjct)] append TabAli($NomSbjct,$i,SeqBarres) $Ligne continue } } close $F if {[info exists NomSbjct]} { set i [set TabAli($NomSbjct)] set SeqBarres [set TabAli($NomSbjct,$i,SeqBarres)] set PosIni [string first ":" $SeqBarres] set PosFin [string last ":" $SeqBarres] regsub -all {\-} $SeqBarres " " SeqBarres set SeqBarres [string range $SeqBarres $PosIni $PosFin] set SeqQuery [string range [set TabAli($NomSbjct,$i,SeqQuery)] $PosIni $PosFin] set SeqSbjct [string range [set TabAli($NomSbjct,$i,SeqSbjct)] $PosIni $PosFin] set DQ [set TabAli($NomSbjct,$i,DQ)] set FQ [set TabAli($NomSbjct,$i,FQ)] set DS [set TabAli($NomSbjct,$i,DS)] set FS [set TabAli($NomSbjct,$i,FS)] set Alignement [string tolower "$SeqQuery\n$SeqBarres\n$SeqSbjct"] set TabAli($NomSbjct,$i,Alignement) [AliFastaToAliBlast $Alignement $DQ $FQ $DS $FS] } ####DESCRIPTION DU BLAST############### set LeTextBlast {} lappend LeTextBlast "BLASTN from FASTAn \[Dec-14-2001\]\n\n" lappend LeTextBlast "Reference: FASTAn converted in BLASTn format.\n" lappend LeTextBlast "Query= $NomQuery" lappend LeTextBlast " \($TailleSequence letters\)\n" lappend LeTextBlast "Database: $NomBanque" lappend LeTextBlast " $NbSequences sequences; $NbLetters total letters\n" lappend LeTextBlast "Searching...................................................done\n\n" if {$LesSbjctDansAli == {}} { lappend LeTextBlast " ***** No hits found ******" } else { lappend LeTextBlast " Score E" lappend LeTextBlast "Sequences producing significant alignments: (bits) Value\n" ####LES HITS DU BLAST############### foreach Sbjct [ElimineLesRedondancesDansUneListe $LesSbjctDansEntete] { set Description [set TabAli($Sbjct,Description)] set Entete "$Sbjct $Description" if {[string length $Entete] < 67} { set Taille [string length $Entete] set nDiff [expr 67 - $Taille] append Entete [string repeat " " $nDiff] } else { set Entete [string range $Entete 0 66] } set Score [set TabAli($Sbjct,1,Score)] set Expect [set TabAli($Sbjct,1,Expect)] set ScoreEtExpect [format " %5s %-6s" $Score $Expect] append Entete $ScoreEtExpect lappend LeTextBlast [string trim $Entete] } lappend LeTextBlast "" ####LES ALIGNEMENTS DU BLAST############### foreach Sbjct [ElimineLesRedondancesDansUneListe $LesSbjctDansAli] { set Taille [set TabAli($Sbjct,Taille)] set Description [set TabAli($Sbjct,Description)] lappend LeTextBlast "\n>$Sbjct $Description" lappend LeTextBlast " Length = $Taille\n" set n [set TabAli($Sbjct)] for {set i 1} {$i <= $n} {incr i} { set Score [set TabAli($Sbjct,$i,Score)] set Expect [set TabAli($Sbjct,$i,Expect)] lappend LeTextBlast " Score = $Score bits, Expect = $Expect" set Identity [set TabAli($Sbjct,$i,Identity)] set NbBases [expr abs([set TabAli($Sbjct,$i,FQ)] - [set TabAli($Sbjct,$i,DQ)]) + 1] set NbBasesCorrectes [expr round($NbBases * $Identity / 100)] lappend LeTextBlast " Identities = $NbBasesCorrectes/$NbBases ($Identity\%)" set Sens [set TabAli($Sbjct,$i,Sens)] lappend LeTextBlast " Strand = $Sens\n\n" set Alignement [set TabAli($Sbjct,$i,Alignement)] lappend LeTextBlast "$Alignement" } } } lappend LeTextBlast " Database: $NomBanque" Sauve [join $LeTextBlast "\n"] dans $FichierBlast return $FichierBlast } proc FastaPourGscope {Fichier {Sortie ""} {GenreDef ""} {EspeceDef ""}} { FaireLire "Attention il y a mieux ... voir FromOrthoInspector" #rR ceci doit etre réécrit car l'os est mal traité on n'a pas le strain # c'est surtout pour orthoinspector où il y a 2 type de fasta if {$GenreDef==""} { set GenreDef "Unknown" } if {$EspeceDef==""} { set EspeceDef "unknown" } if {$Sortie==""} { set Sortie "$Fichier.NEW" } Espionne $Fichier foreach Ligne [LesLignesDuFichier $Fichier] { regsub -all " +" $Ligne " " Ligne set Ligne [string trim $Ligne] if {$Ligne==""} { continue } # if {[regexp "Trichoplax" $Ligne]} { Espionne $Ligne } if {[regexp ">" $Ligne]} { if { ! [regexp {^>([^ ]+) (.+)} $Ligne Match AI D]} { # FaireLire "pas bon $Ligne" lappend LeNew $Ligne continue } regsub { OS=.*} $D "" D regsub { GN=.*} $D "" D regsub -all ";" $D " " D set D [string trim $D " _,"] set Ac "" set Id "" lassign [split $AI "|"] Banque Ac Id if {$Ac==""} { set Ac $AI } if {$Id==""} { set Id $Ac } set Genre $GenreDef set Espece $EspeceDef set Gn "" regexp {GN=([^ ]+)} $Ligne Match Gn set TextGn "" if {$Gn!=""} { set TextGn " GN=$Gn" } set Entete ">$Id $Ac $Genre $Espece $D $TextGn" lappend LeNew $Entete } else { lappend LeNew $Ligne } } if {$Sortie=="GetList"} { return $LeNew } if {$Sortie=="GetText"} { return [join $LeNew "\n"] } return [SauveLesLignes $LeNew dans $Sortie] } proc FastaPourGscopePourTous {DirSource DirDestin} { foreach Fichier [glob -nocomplain "$DirSource/*.fasta"] { set Queue [file tail $Fichier] set Destin "$DirDestin/$Queue" set N [FastaPourGscope $Fichier $Destin] Espionne $N lappend LesNouveaux $N } return $LesNouveaux } proc FastaProteomeConverter {inputFile outputFile} { puts "########################################" puts "--Convertion des fasta pour Gscope--" puts "########################################" puts ">>> modification des entetes" #compteur set n 0 #open input file set fasta_file [open $inputFile "r"] #create output file set FIC [open "$outputFile.fasta" "w"] #reads input line by line while {[gets $fasta_file line]!=-1} { if {$line==""} { continue } #header, correct it ############################################## ### CAS OU ON A DE l'UNIPROT if {[string index $line 0]==">" && ([string index $line 1]=="s" || [string index $line 1]=="t")} { incr n set oldLine $line set newLine "" #vars set orga "" set geneName "" set tout "" #separation by | set infos1 [split $oldLine "|"] lassign $infos1 origin accessNumber description #search of OS (organism), comments and GN (gene name) in description variable regexp {\[(.*? .*?)\]} $description tout orga set mots [split $orga " "] set orga [concat [lindex $mots 0] [lindex $mots 1]] regexp {\](.*)} $description tout seul #composition of the new line append newLine ">$accessNumber $orga $seul" #"puts "'$newLine'" puts $FIC "$newLine" ############################################## ### CAS OU ON A DU REFSEQ (via icarus) } elseif {[string index $line 0]==">" && ([string index $line 1]=="r")} { incr n set oldLine $line set newLine "" #vars set orga "" set geneName "" set def "" #separation by | set infos1 [split $oldLine "|"] lassign $infos1 origin accessNumber description #search of OS (organism), comments and GN (gene name) in description variable regexp {\[(.*? .*?)\]} $description tout orga set mots [split $orga " "] set orga [concat [lindex $mots 0] [lindex $mots 1]] regexp {\](.*)} $description tout seul #composition of the new line append newLine ">$accessNumber $orga $seul" #"puts "'$newLine'" puts $FIC "$newLine" } else { #no header, just write puts $FIC "$line" } } close $fasta_file close $FIC puts " -->OK : $n entetes fasta converties." } proc FastacmdExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./fastacmd" } if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { return [file join $OrdBinDir "fastacmd"] } else { return "/biolo/ncbi/bin/fastacmd" } } else { set lexe [file join $OrdBinDir "fastacmd.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc FeatureSequence {Seq} { #rR on cree une list BeforeSeq 1 3, Seq_1 4 8, Gap_1 8 12, Seq_2 13 20, AfterSeq 20 30 set DansEntame 1 set DansQueue 0 set FinEntame 0 set LesFeatures {} set I 0 set L 0 set DebCourant 1 set DebLocal 0 set FinLocal 0 foreach AA [split $Seq ""] { incr I set IsSeq [regexp -nocase {[a-z]} $AA] if {$IsSeq} { incr L ; incr FinLocal } if { ! [info exists WasSeq]} { set WasSeq [expr ! $IsSeq] } if { $IsSeq==$WasSeq } { incr FinCourant ; set WasSeq $IsSeq; continue } if {[info exists FinCourant]} { lappend LesFeatures "$WasSeq $DebCourant $FinCourant $DebLocal $FinLocal" } set DebCourant $I set FinCourant $I set DebLocal $L set FinLocal $L set WasSeq $IsSeq } if { ! [info exists WasSeq]} { return {} } lappend LesFeatures "$WasSeq $DebCourant $FinCourant $DebLocal $FinLocal" set LesFeatureSequence {} set NS 0 set NG -1 set Last [llength $LesFeatures] set I 0 set L 0 foreach F $LesFeatures { incr I scan $F "%d %d %d %d %d" T D F DL FL if {$T==1} { incr NS ; incr L; lappend LaFeatureSequence "Seq_$NS $D $F $DL $FL" ; continue } if {$NS==0} { if {$NG==-1} { lappend LaFeatureSequence "BeforeSeq $D $F $DL $FL" ; set NG 0; continue } } else { incr NG if {$I==$Last} { lappend LaFeatureSequence "AfterSeq $D $F $DL $FL" } else { lappend LaFeatureSequence "Gap_$NG $D $F $DL $FL" } } } return $LaFeatureSequence } proc FeatureSummary {} { global EFeat NomSeqSel LNOrdali LSOrdali Defauts ListeTypesDeFeatures TabSF if {! [info exists TabSF]} { FaireLire "No features in this alignment !" return } set w ".fitsum" if {[winfo exists $w]} { raise $w return } set EFeat(SumWindow) $w toplevel $w wm title $w "Features Summary" wm iconname $w "Feat. Sum." wm protocol $w WM_DELETE_WINDOW KillParLaCroix if {[winfo exists .fattendre]} {lower $w .fattendre} # inits set EFeat(ShowNote) 0 set EFeat(FontSize) [set Defauts(FontSizeTree)] set EFeat(FontWght) [set Defauts(FontWghtTree)] if {"FontFeat" ni [font names]} { font create FontFeat -family "Courier" -size $EFeat(FontSize) } # frame canvas + scrollbars frame $w.fc set EFeat(PADWdt) [set Defauts(CanvasWSFeat)] set EFeat(PADHgt) [set Defauts(CanvasHSFeat)] set EFeat(FWidth) [set Defauts(FWidthSFeat)] set EFeat(FHeight) [set Defauts(FHeightSFeat)] set wc "$w.fc.c" set EFeat(PAD) $wc set wdt [PlusLongEltDe $LNOrdali] set wdt [expr {$wdt < 20 ? $wdt : 20}] set EFeat(Listbox) $w.fc.lsb set EFeat(ListboxListe) [list] listbox $w.fc.lsb -listvariable EFeat(ListboxListe) -width $wdt -font SeqFont -selectmode extended -yscrollcommand "$w.fc.vb set" bind $w.fc.lsb <> {PickSeq [%W curselection]} scrollbar $w.fc.vb -command "$w.fc.lsb yview" -width 8 entry $w.fc.ent -background white -bd 2 -relief groove -font SeqFont -width $wdt -textvariable EFeat(SearchNom) bind $w.fc.ent [list ChercheNomDansListe] canvas $w.fc.c -width [set EFeat(FWidth)] -height [set EFeat(FHeight)] -scrollregion [list 0 0 [set EFeat(PADWdt)] [set EFeat(PADHgt)]] -cursor hand2 -background white -relief groove -xscrollcommand "$w.fc.hs set" -yscrollcommand "$w.fc.vs set" scrollbar $w.fc.vs -command "$wc yview" -width 8 scrollbar $w.fc.hs -orient horiz -command "$wc xview" -width 8 grid $w.fc.lsb -row 0 -column 0 -sticky ns grid $w.fc.ent -row 1 -column 0 -sticky ew grid $w.fc.vb -row 0 -column 1 -sticky ns -padx {0 5} grid $w.fc.c -row 0 -column 2 -sticky news grid $w.fc.vs -row 0 -column 3 -sticky ns grid $w.fc.hs -row 1 -column 2 -sticky ew grid $w.fc -row 0 -column 0 -sticky news -padx 5 -pady {5 1} grid rowconfig $w.fc 0 -weight 1 grid columnconfig $w.fc {0 2} -weight 1 # Frame control frame $w.fb -bd 2 -relief groove # frame noms set wn $w.fb.fnm frame $wn label $wn.shw -text "Show " -anchor w -justify left spinbox $wn.nsf -readonlybackground white -state readonly -textvariable EFeat(NomsAff) -width 9 -values {"Seq. Name" Accession "Bank Id"} -command [list UpdateListboxSeqFeat] set EFeat(NomsAff) Accession label $wn.lsz -text "Font size " -anchor w -justify left spinbox $wn.ssz -width 3 -readonlybackground white -state normal -textvariable EFeat(FontSize) -values {6 8 10 12 14 16 18 20 22 24} -command [list ChangeFontEFeat %s] grid $wn.shw -row 0 -column 0 -sticky w grid $wn.nsf -row 0 -column 1 -sticky e -padx {1 5} grid $wn.lsz -row 0 -column 2 -sticky e -padx {5 1} grid $wn.ssz -row 0 -column 3 -sticky w grid $wn -row 0 -column 0 -sticky nw -pady 2 -padx 2 grid columnconfig $wn {1 3} -weight 1 # frame features set wb $w.fb.fft frame $wb set wdt [PlusLongEltDe $ListeTypesDeFeatures] menubutton $wb.mft -relief raised -width $wdt -text "Features" -menu $wb.mft.feat menu $wb.mft.feat -tearoff 0 # Switch on features used foreach f [ListeDesFeaturesUtilisees] { set EFeat(LFeat,$f) 1 } foreach f $ListeTypesDeFeatures { $wb.mft.feat add checkbutton -label "$f" -variable EFeat(LFeat,$f) -onvalue 1 -offvalue 0 -command [list TracageFeatureSummary] } grid $wb.mft -column 0 -row 0 -sticky ew grid $wb -row 0 -column 1 -sticky new -padx 2 -pady 2 grid columnconfig $w.fb.fft all -weight 1 # Control : show note set wn $w.fb.fctrl frame $wn checkbutton $wn.ckn -relief flat -anchor w -justify left -text "Notes as Balloon " -onvalue 1 -offvalue 0 -variable EFeat(ShowNote) -command {ShowFeatNote} grid $wn.ckn -row 0 -column 0 -columnspan 2 -sticky ew grid $wn -column 2 -row 0 -sticky w -pady 2 -padx 5 # frame buttons set wp $w.fb.fokpt frame $wp button $wp.bok -background green1 -text " Close " -command [list RetourFeatSummary] button $wp.prt -background yellow -text " Print " -command [list PrintCanvas $wc png] grid $wp.prt -column 0 -row 0 -sticky ew grid $wp.bok -column 1 -row 0 -sticky ew grid columnconfig $wp 0 -weight 1 grid $wp -row 0 -column 3 -sticky nse -pady 2 -padx 2 grid $w.fb -row 1 -column 0 -sticky ew -padx 5 -pady 5 grid columnconfig $w.fb 3 -weight 1 grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 # bindings divers (et d'ete) set PAD [set EFeat(PAD)] bind $PAD {%W scan mark %x %y} bind $PAD {%W scan dragto %x %y 1} bind $PAD <4> {eval %W yview scroll -1 units} bind $PAD <5> {eval %W yview scroll 1 units} bind $PAD {eval %W xview scroll -1 units} bind $wc {eval %W xview scroll 1 units} $PAD bind TNote {CentreAliOnFeat %x %y} # initialize listbox # seq. selected in main window are set here too set EFeat(ListboxListe) $LNOrdali foreach n $LNOrdali { if {$n ne ""} { set EFeat(LMSeq,$n) 0 set EFeat(NSeq,$n) $n } } foreach e $NomSeqSel { lassign [split $e .] y x set n [lindex $LNOrdali $y-1] set EFeat(LMSeq,$n) 1 $EFeat(Listbox) itemconfigure $y -background black -foreground white } TracageFeatureSummary MesCouleurs $w FenetreAuCentre $w return $w } proc FeaturesDesPfam {aFeatures LesPf LesFe} { #LesFe peut être block or prosite #donne les blocks ou les prosites d un pfam upvar $aFeatures Features foreach Fe $LesFe { lassign [split $Fe "/-"] FeName Deb Fin scan $FeName "%s" FeName regsub -nocase {^PROP_} $FeName "" FeName foreach x [NombresEntre $Deb $Fin] { lappend YaFe($x) [list $FeName $Deb $Fin] } } foreach Pf $LesPf { set Features($Pf) {} if {![regexp {^[PRO]*_?PF[0-9]+ [^/]+/([0-9]+)\-([0-9]+)} $Pf Match Deb Fin]} {continue} foreach x [NombresEntre $Deb $Fin] { if {![info exists YaFe($x)]} {continue} LConcat Features($Pf) $YaFe($x) } set Features($Pf) [ListeSansDoublon $Features($Pf)] set Features($Pf) [lsort -command CompareIntegerInFeaturesDesPfam $Features($Pf)] } return } proc FeaturesdesMacsims {Name} { global LNOrdali LSOrdali TabSF ListeTypeDeFeatures unset -nocomplain LNOrdali LSOrdali TabSF ListeTypesDeFeatures Sequences TDesAccess set Fichier "[MiSynPatDir]/misynpat.sql" set db "root" sqlite3 $db $Fichier set Lfeatin [list] set system [string index $Name 0] try { set fileMacsim "[MiSynPatDir]/data/alignments/${system}_maj.xml" } on error {result options} { Espionne -options $options $result continue } DecortiqueUnXml2 $fileMacsim InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF ::global {*}[info globals "TD*"] update set Lsqn [list] ; set Lseq [list] ; set Lacc [list] foreach n $LNOrdali s $LSOrdali { if {$n eq ""} {continue} lappend Lsqn $n lappend Lacc [set TDesAccess($n)] lappend Lseq $s } regsub -all {\.} $Lseq {\-} Lseq set idmito [lsearch -glob -inline $Lsqn "${system}mi*_Homo.sapi"] set indexseqmito [lsearch -glob $Lsqn "$idmito"] set seqmitoG [lindex $Lseq $indexseqmito] set accmito [lindex $Lacc $indexseqmito] regsub -all {\-} $seqmitoG {} seqmitoL set lenght [string length $seqmitoL] lappend Lfeatin "'$lenght'" $db eval {update synthetase set accession=$accmito where sName=$Name} foreach key [array names TabSF "${system}mi*_Homo.sapi,*"] { lassign [split $key ,] nom feat Espionne $feat if {$feat eq "MODULE"} { foreach ft $TabSF($key) { DecortiqueUneFeature $ft start stop col score note csys lappend Lfeatin "'$nom $start $stop $col $note'" } } } set featin [join $Lfeatin ","] Espionne $featin #$db eval {update synthetase set seq=$featin where sName=$Name} } proc FeaturesdunMacsims {} { global LNOrdali LSOrdali TabSF ListeTypeDeFeatures #set Names [$db eval {select sName from synthetase}] set Name "SARS2" # recupere les données MACSIMS set system [string index $Name 0] set fileMacsim "[MiSynPatDir]/data/alignments/${system}_maj.xml" Espionne "$Name" Espionne "$system" Espionne "$fileMacsim" DecortiqueUnXml2 $fileMacsim InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF global {*}[info globals "TD*"] foreach key [array names TabSF "${system}mi*_Homo.sapi,*"] { lassign [split $key ,] nom feat Espionne $feat if {$feat eq "PFAM-A"} { foreach ft $TabSF($key) { DecortiqueUneFeature $ft start stop col score note csys Espionne "$nom : $start $stop $col $note," } } } } proc FenetreAjoutePDB {} { if {[TypeAli] eq "pasdali" || [QuelMode] eq "seqlab"} { return } global ListePDB WAP set w .apdb if {[winfo exists $w]} { raise $w return } set Lid [list] foreach e $ListePDB { lappend Lid [DonneIdDeAccessPDB $e] } set Lid [lsort -unique $Lid] set Lid [linsert $Lid 0 "Choose"] set WAP(Win) $w toplevel $w wm title $w "Add PDB" grid columnconfig $w 0 -weight 1 set wf $w.ffile frame $wf grid columnconfig $wf 1 -weight 1 set WAP(File) "" label $wf.lbl -text "File : " -relief flat entry $wf.ent -background white -textvariable WAP(File) button $wf.but -text "Browse" -background cyan -command "set WAP(File) \[DemandeEtOuvreFichier PDB\]" grid $wf.lbl -row 0 -column 0 -sticky w grid $wf.ent -row 0 -column 1 -sticky ew grid $wf.but -row 0 -column 2 -sticky ew grid $wf -row 0 -column 0 -sticky ew -padx 5 -pady 5 set wr $w.frad frame $wr set WAP(Replace) 0 radiobutton $wr.rre -text "Replace PDB " -relief flat -value 1 -variable WAP(Replace) ttk::combobox $wr.cbb -state readonly -background white -width 6 -values $Lid -textvariable WAP(Id) radiobutton $wr.ren -relief flat -text "PDB Id :" -value 0 -variable WAP(Replace) entry $wr.eid -bg white -width 4 -textvariable WAP(NewId) grid $wr.ren -row 0 -column 0 -sticky w -padx {1 10} grid $wr.eid -row 0 -column 1 -sticky ew grid $wr.rre -row 1 -column 0 -sticky w -padx {1 10} grid $wr.cbb -row 1 -column 1 -sticky ew set pad [expr {round([winfo reqwidth $wf.lbl])}] grid $wr -row 1 -column 0 -sticky w -padx $pad -pady {1 5} $wr.cbb current 0 set wb $w.but frame $wb button $wb.dis -text "Cancel" -background red -command [list AjoutePDB dismiss] button $wb.ok -text " OK " -background green1 -command [list AjoutePDB ok] grid $wb.dis -row 0 -column 0 -sticky w -padx 10 grid $wb.ok -row 0 -column 1 -sticky e -padx 10 grid columnconfig $wb all -weight 1 grid $wb -row 2 -column 0 -sticky ew -padx 5 -pady {15 10} FenetreAuCentre $w tkwait window $w return } proc FenetreAuCentre {f} { # wm protocol [winfo toplevel $f] WM_DELETE_WINDOW { } # wm withdraw [winfo toplevel $f] # update idletasks lassign [TotalWSize $f] w h set x [expr {[winfo screenwidth $f]/2 - $w/2}] set y [expr {[winfo screenheight $f]/2 - $h/2}] if {$x < 0} {set x 10} if {$y < 0} {set y 10} wm geom [winfo toplevel $f] +$x-$y return } proc FenetreControlesRasMol {} { global StrucAVoir global RasM global ListeTypesDeFeatures MetAJourFeaturesRasmol set RasM(FeatWidth) [PlusLongEltDe [set RasM(LFeat)]] set RasM(LStyle) [list "cartoon" "wireframe" "trace" "ribbons"] set RasM(StyleWidth) [PlusLongEltDe [set RasM(LStyle)]] set tw .fcviewer toplevel $tw wm title $tw "Rasmol Control" wm protocol $tw WM_DELETE_WINDOW KillParLaCroix frame $tw.f pack $tw.f -padx 5 -pady 5 label $tw.f.lbl -text "RasMol Control Panel" -anchor w -justify center -font "Helvetica 12 bold" pack $tw.f.lbl -side top -expand 1 -fill x -pady 10 frame $tw.f.c pack $tw.f.c -side top -expand 1 -fill both set w "$tw.f.c" set i 1 set r 0 foreach elt $StrucAVoir { set RasM(mol$r,Name) $elt set RasM(mol$r,Style) [lindex [set RasM(LStyle)] 0] set RasM(mol$r,PrevFeat) [lindex [set RasM(LFeat)] 0] set RasM(mol$r,PrevStyle) [lindex [set RasM(LStyle)] 0] set RasM(mol$r,Feat) [lindex [set RasM(LFeat)] 0] set RasM(mol$r,See) 1 lappend RasM(LMols) [list $r $i] label $w.li$i -text "$i" -width 1 -justify left checkbutton $w.ck$i -variable RasM(mol$r,See) -command [list ShowMoleculeDansRasMol $r $i] -onvalue 1 -offvalue 0 label $w.ln$i -text "$elt" -width 6 -justify left combobox $w.cs$i -background white -editable false -height 0 -textvariable RasM(mol$r,Style) -command [list StructStyleDansRasMol $r $i] -width $RasM(StyleWidth) -listvar RasM(LStyle) combobox $w.cf$i -background white -editable false -height 0 -textvariable RasM(mol$r,Feat) -command [list DessineFeatureDansRasMol $r $i] -width $RasM(FeatWidth) -listvar RasM(LFeat) grid $w.li$i -row $r -column 0 -rowspan 1 -columnspan 1 grid $w.ck$i -row $r -column 1 -rowspan 1 -columnspan 1 -padx 0 grid $w.ln$i -row $r -column 2 -rowspan 1 -columnspan 1 -padx 5 grid $w.cs$i -row $r -column 3 -rowspan 1 -columnspan 1 -padx 5 grid $w.cf$i -row $r -column 4 -rowspan 1 -columnspan 1 -padx 5 incr r incr i } set fb "$tw.f.fbt" frame $fb pack $fb -side bottom -fill both -expand 1 -pady 20 button $fb.print -text "Print" -background yellow -command [list PrintRasMol] button $fb.close -text "Close" -background green1 -command [list CloseRasMol] set RasM(AtLabel) " " label $fb.lab -bg white -anchor w -justify left -relief sunken -textvariable RasM(AtLabel) button $fb.centre -text "Centre" -width 6 -bg cyan -command [list CentreRasMol ] grid rowconfig $fb {0 1} -weight 1 grid columnconfig $fb 1 -weight 1 grid $fb.print -row 1 -column 0 grid $fb.close -row 1 -column 2 grid $fb.lab -row 0 -column 0 -columnspan 2 -sticky we grid $fb.centre -row 0 -column 2 MesCouleurs .fcviewer wm geometry .fcviewer +0+0 trace add variable LFeatCourantes write UpdateDessinRasmol trace add variable ListeTypesDeFeatures write MetAJourFeaturesRasmol return } proc FenetreVrp {} { global ListeTypesDeFeatures Vrp set w .fvrp catch {destroy $w} toplevel $w wm title $w "Ordalie Vrp ..." wm iconname $w "vrp" grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 frame $w.f grid $w.f -row 0 -column 0 -sticky news grid columnconfig $w.f 0 -weight 1 grid rowconfig $w.f 0 -weight 1 set w .fvrp.f # frame canvas du vrp frame $w.vrp set c $w.vrp.c set Vrp(WCanvas) $c scrollbar $w.vrp.vscroll -command "$c yview" -width 8 scrollbar $w.vrp.hscroll -orient horiz -command "$c xview" -width 8 canvas $c -scrollregion [list 0 0 $Vrp(Width) $Vrp(Height)] -width $Vrp(Width) -height $Vrp(Height) -cursor hand2 -background white -xscrollcommand "$w.vrp.hscroll set" -yscrollcommand "$w.vrp.vscroll set" grid $w.vrp.c -row 0 -column 0 -sticky news grid $w.vrp.vscroll -row 0 -column 1 -sticky ns grid $w.vrp.hscroll -row 1 -column 0 -sticky ew grid $w.vrp -row 0 -column 0 -sticky news -padx 5 -pady 5 grid rowconfig $w.vrp 0 -weight 1 -minsize 0 grid columnconfig $w.vrp 0 -weight 0 -minsize 0 grid columnconfig $w.vrp 1 -weight 0 -minsize 0 # Frame de controle set w $w.bot frame $w # frame de la sequence de la proteine set t $w.text frame $t set Vrp(WText) $t.txt text $t.txt -xscrollcommand "txtScroll $t" -setgrid true -height 1 -wrap none -background white # show residue number begin end label $t.resbeg -text [format "%4d" $Vrp(BegRes)] -width 4 label $t.resend -text [format "%-4d" $Vrp(EndRes)] -width 4 scrollbar $t.scroll -orient horiz -command "scrollTxt $t" -width 8 grid $t.resbeg -row 0 -column 0 -sticky e grid $t.txt -row 0 -column 1 -sticky ew grid $t.resend -row 0 -column 2 -sticky w grid $t.scroll -row 1 -column 1 -sticky ew grid $t -row 0 -column 0 -columnspan 2 -sticky ew -pady {2 5} grid columnconfig $t 1 -weight 1 # frame seq et feat set wb $w frame $wb.sf -relief groove label $wb.sf.lseq -text "Sequence " set wsq [PlusLongEltDe [set Vrp(NameList)]] ttk::combobox $wb.sf.cseq -background white -state readonly -textvariable Vrp(seqSelName) -width $wsq -values $Vrp(NameList) $wb.sf.cseq index 0 bind $wb.sf.cseq <> [list DessineVrpDe] checkbutton $wb.sf.over -text "Overdraw " -anchor w -justify left -onvalue 1 -offvalue 0 -variable Vrp(Overwrite) label $wb.sf.lfeat -text "Feature" set wft [PlusLongEltDe $ListeTypesDeFeatures] set Vrp(ListFeat) [linsert $ListeTypesDeFeatures 0 "None"] set Vrp(UseFeat) [lindex $Vrp(ListFeat) 0] ttk::combobox $wb.sf.cfea -background white -state readonly -textvariable Vrp(UseFeat) -width $wft -values $Vrp(ListFeat) $wb.sf.cfea index 0 bind $wb.sf.cfea <> [list ColorieVrpSelon %W VientDuCombo] grid $wb.sf.lseq -row 0 -column 0 -sticky ew grid $wb.sf.cseq -row 0 -column 1 -sticky ew grid $wb.sf.over -row 1 -column 0 -columnspan 2 -sticky w grid $wb.sf.lfeat -row 0 -column 2 -sticky ew -padx {10 1} grid $wb.sf.cfea -row 0 -column 3 -sticky ew grid $wb.sf -row 1 -column 0 -sticky w grid columnconfig $wb.sf {1 3} -weight 1 # frame boutons frame $wb.fb button $wb.fb.circle -text "Circle" -bg cyan -command [list VrpCircle] button $wb.fb.print -text "Print" -bg yellow -command [list Printcanvas $Vrp(WCanvas) png] button $wb.fb.close -text "Close" -bg green1 -command [list destroy .fvrp] grid $wb.fb.circle -row 0 -column 0 -sticky ew -ipadx 2 grid $wb.fb.print -row 0 -column 1 -sticky ew -ipadx 2 grid $wb.fb.close -row 0 -column 2 -sticky ew -ipadx 2 grid $wb.fb -row 1 -column 1 -sticky e grid $w -row 1 -column 0 -sticky ew -padx 5 -pady 5 grid columnconfig $w all -weight 1 BindingsVrp $Vrp(WCanvas) $Vrp(WText) MesCouleurs .fvrp FenetreAuCentre .fvrp update idletasks return } proc FermeFichier {{DoSave nosave}} { global NomNomSeq NomTextSeq VariablesAuDepart db Defauts CompteurDeMac # DoSave = if {$DoSave eq "save" && [VueEditee]} { set chx [tk_dialog .chx "Warning" "Warning !\nThis alignment has not been saved !\nDo you want to save it before to quit Ordalie ?" "" 0 "Yes" "No" "Cancel"] switch $chx { 0 { SauveLAlignement } 1 { if {[TypeAli] eq "ORD"} { file rename -force $Defauts(FichierOBK) $Defauts(FichierORD) } } 2 {return} } } catch {$db close} set CompteurDeMac 0 if {[info exists ::ListePDB]} { foreach a $::ListePDB { lassign $a mol tmp set mol "::[DonneIdDeAccessPDB $mol]" if {[info commands "::$mol"] ne ""} { $mol destroy } } update } DetruitInfoSeqs if {[ModeI]} { $NomNomSeq configure -state normal $NomNomSeq delete 1.0 end $NomNomSeq edit reset bindtags $NomNomSeq $NomNomSeq foreach b [bind $NomNomSeq] { bind $NomNomSeq $b "" } bindtags $NomNomSeq [list $NomNomSeq Text . all] $NomNomSeq configure -state disabled $NomTextSeq configure -state normal $NomTextSeq delete 1.0 end $NomTextSeq edit reset bindtags $NomTextSeq $NomTextSeq foreach b [bind $NomTextSeq] { bind $NomTextSeq $b "" } bindtags $NomTextSeq [list $NomTextSeq Text . all] $NomTextSeq configure -state disabled } # remember if we arrive as interactive or batch mode set Mode [ModeI] #DetruitVariablesSaufDepart foreach v {Sequences LNOrdali LSOrdali LNSeqlab LSSeqlab TabSF LNDG SDG ListeTypesDeFeatures TColScore} { global $v unset -nocomplain $v } LesDefauts LesDefauts Mode $Mode if {[ModeI]} { $::WOrdali(combomac) configure -values [list] DetruitBoutonsOrdali AfficheBoutonsOrdali LesDefauts dispmode "ordali" #BindModeNormal } # inits ... set ::Threshold [set Defauts(Threshold)] set ::ListeTypesDeFeatures {} set ::NomSeqSel {} set ::BufferSeq {} set ::LongueurTotale 0 set ::ListeTypesDeFeatures [list] array set ::TabSF {} set ::BufNTimes "" DefinitionPreferences InitialiseCouleurs PrintSetup "defauts" update return } proc FermeFichierPipe {} { global VariablesAuDepart set Lv [info globals] foreach v $Lv { if {$v eq "VariablesAuDepart"} {continue} if {[lsearch $VariablesAuDepart $v] != -1} {continue} global $v if {[info exists $v]} {unset $v} } update return } proc FetchCat {Access {Quoi ""}} { #rR completement obsolete car fetch n'existe plus return "" return [exec fetchcat $Access $Quoi] } proc FetchContig {Selection} { global RepertoireDuGenome foreach Ligne [split $Selection "\n"] { if { ! [regexp -nocase {[a-z0-9]+\:[a-z0-9_]+} $Ligne BanqueId]} { continue } set GCG [FetchCat $BanqueId] if {$GCG==""} { continue } AfficheVariable $GCG "AvecFormate" $BanqueId } } proc FetchDeLaSelection {K} { set Liste [$K find withtag current] foreach Id $Liste { set BId [lindex [$K gettags $Id] 0] AfficheFetch $BId OnVeutNature } } proc FetchInfosSeqs {{Liste ""}} { global LNOrdali ListePDB {*}[info globals "TD*"] if {[TypeAli] eq "pasdali" && $Liste eq ""} { return } if {[QuelMode] eq "seqlab"} { FaireLire "Not available in Editor mode !" return } if {$Liste eq ""} { set Liste $LNOrdali } set Lid [list] set Lref [list] set Luni [list] foreach n $Liste { if {$n eq "" || $n in $ListePDB} { continue } # refseq/GI if {[EstUnRefseq $n] || [string is integer $n]} { lappend Lref $n } elseif {[EstUnUniProt $n]} { lappend Luni $n } else { lappend Lother $n } lappend Lid $n } # for refseq array set R [InfosFromRefSeq $Lref] foreach acc $Lref { if {! [info exists R($acc,Desc)]} { continue } foreach t {TDesDescriptifs TDesTaxId TDuLineage TDesOrganismes TDesPhylum} k {Desc TaxId Lineage Organism Phylum} { set ${t}($acc) [set R($acc,$k)] } if {[set TDesAccess($acc)] eq [set TDesSeqnames($acc)]} { set TDesAccess($acc) [set R($acc,GI)] } } # from UniProt #puts "Luni \n[join $Luni \n]" array set T [InfosFromUniProt $Luni] #parray T foreach acc $Luni { if {! [info exists T($acc,Desc)]} { continue } foreach t {TDesDescriptifs TDesTaxId TDuLineage TDesOrganismes TDesPhylum} k {Desc TaxId Lineage Organism Phylum} { set ${t}($acc) [set T($acc,$k)] } } return } proc FetchNoms {Access} { #rR completement obsolete car fetch n'existe plus return "" return [FetchCat $Access LesNoms] } proc FetchService {} { global LNOrdali ListePDB if {0} { EB-eye : http://www.ebi.ac.uk/ebisearch/service.ebi?wsdl biomart http://webservices.genouest.org/typedservices/BioMart.wsdl } set Lrefseq [list] ; set Luniprot [list] foreach n $LNOrdali { if {$n eq ""} {continue} if {$n in $ListePDB} {continue} if {[EstUnRefseq $n]} { lappend Lrefseq $n } else { lappend Luniprot $n } } if {$Lrefseq != {}} { } return } proc FetchTest {Access} { #rR completement obsolete car fetch n'existe plus return 0 return [FetchCat $Access "LeTest"] } proc FetchUniprotPost {Lid} { set url "http://www.uniprot.org/batch/" set file tmp set type "text/plain" set res [form-data::post $url "file" $type $Lid [list file $file format txt]] set Lembl [SplitLesEMBL $res] return $Lembl } proc Fetche {Access} { global RepertoireDuGenome global Commandes LogWscope "Dans Fetche $Access" return [SequenceDesBanques $Access] if {[file exists $Access]} { return [ContenuDuFichier $Access] } if {[regexp "^PAB" $Access] && [file exists "$RepertoireDuGenome/../casimir/protembl/$Access"]} { return [ContenuDuFichier "$RepertoireDuGenome/../casimir/protembl/$Access"] } if {[regexp {^AFF[0-9]{5}$} $Access] && [file exists "$RepertoireDuGenome/../AffyHS/nucembl/$Access"]} { return [ContenuDuFichier "$RepertoireDuGenome/../AffyHS/nucembl/$Access"] } if {[regexp {PAE[0-9]+} $Access] && [file exists "$RepertoireDuGenome/../Pyrobac/protembl/$Access"]} { return [ContenuDuFichier "$RepertoireDuGenome/../Pyrobac/protembl/$Access"] } if {[regexp "PFUR" $Access] && [file exists "$RepertoireDuGenome/../Pfuriosus/protembl/$Access"]} { return [ContenuDuFichier "$RepertoireDuGenome/../Pfuriosus/protembl/$Access"] } if {[regexp "PFOK" $Access] && [file exists "$RepertoireDuGenome/../Pfuriok/protembl/$Access"]} { return [ContenuDuFichier "$RepertoireDuGenome/../Pfuriok/protembl/$Access"] } if { ([YaPABenDebutDe $Access] || [regexp "/[ExpressionReguliereDesPABs]$" $Access]) && [file exists "$RepertoireDuGenome/prottfa/[file tail $Access]"]} { return [ContenuDuFichier "$RepertoireDuGenome/prottfa/[file tail $Access]"] } if { [regexp {^TROU[0-9]+[A-F]$} $Access] || [regexp "/[ExpressionReguliereDesPABs]\[A-F\]$" $Access] } { return [ContenuDuFichier "$RepertoireDuGenome/trousprottfa/[file tail $Access]"] } if { [regexp {^TROU[0-9]+N$} $Access] || [regexp "/[ExpressionReguliereDesPABs]N$" $Access] } { return [ContenuDuFichier "$RepertoireDuGenome/nuctfa/[file tail $Access]"] } if {[regsub -- {_$} $Access {} AccessTronque] && [file exists "$RepertoireDuGenome/tmpdir/$AccessTronque"]} { return [ContenuDuFichier "$RepertoireDuGenome/tmpdir/$AccessTronque"] } if {[file exists "$RepertoireDuGenome/prrpgcgs/$Access"]} { return [ContenuDuFichier "$RepertoireDuGenome/prrpgcgs/$Access"] } if {[file exists "$RepertoireDuGenome/tmpdir/$Access"]} { return [ContenuDuFichier "$RepertoireDuGenome/tmpdir/$Access"] } if {[file exists "$RepertoireDuGenome/tmpdir/[string tolower $Access]"]} { return [ContenuDuFichier "$RepertoireDuGenome/tmpdir/[string tolower $Access]"] } if {[file exists $Access]} { return [ContenuDuFichier $Access] } if {[EstUnBonAccess $Access]} { return [FetchCat $Access] } if {[regsub -- {_$} $Access {} AccessTronque]} { return [Fetche $AccessTronque] } if { ! [regexp {[:/]} $Access]} { return [Fetche ":$Access"] } if { [regexp {[:]} $Access] && ! [regexp "protein" $Access] } { regsub -- {[a-zA-Z_^:]*:} $Access "protein:" AccessDansBanqueGCG return [Fetche "$AccessDansBanqueGCG"] } return "" } proc FetcheBox {K X Y {Quoi Show}} { global RepertoireDuGenome if {[YaPABouTROUouTRNAouARNdans $X]} { set Boite $X } else { set Boite [BoiteDuCourant $K $X $Y] } if { $Boite == "" } { return } set Nom [Box $Boite nom] if {[regexp "GLIMMER" $Nom]} { return [AfficheNuc $Nom] } return [SeeAby $Quoi $Nom] set Fichier "BidonBidon" if { [YaPABdans $Nom] } { set Fichier "$RepertoireDuGenome/msf/$Nom" } if { [regexp {TROU[0-9]*[A-F]} $Nom] } { set Fichier "$RepertoireDuGenome/trousmsf/$Nom" } if { [regexp {TROU[0-9]*N} $Nom] } { set Fichier "$RepertoireDuGenome/trousmsf/$Nom" } if { [regexp {TRNA|ARN} $Nom] } { set Fichier "$RepertoireDuGenome/msf/$Nom" } if {[file exists $Fichier]} { return [SeeAby Show $Nom] } if { [YaPABdans $Nom] } { set Fichier "$RepertoireDuGenome/prottfa/$Nom" } if { [regexp {TROU[0-9]*[A-F]} $Nom] } { set Fichier "$RepertoireDuGenome/trousprottfa/$Nom" } if { [regexp {TROU[0-9]*N} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" } if { [regexp {TRNA|ARN} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" } if {[file exists $Fichier]} { return [AfficheFichier $Fichier "AvecSeeBlastAvecBlasteAvecFormate"] } if { [YaPABdans $Nom] } { set Fichier "$RepertoireDuGenome/ver/$Nom" } if { [regexp {TROU[0-9]*[A-F]} $Nom] } { set Fichier "$RepertoireDuGenome/trousprottfa/$Nom" } if { [regexp {TROU[0-9]*N} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" } if { [regexp {TRNA|ARN} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" } if {[file exists $Fichier]} { return [AfficheFichier $Fichier "AvecSeeBlastAvecBlasteAvecFormate"] } } proc FetcheCourant {w} { return [AfficheFetch [NomDuCourant $w]] } proc FeuilleDist {} { global TokCourant set LabelFeuille [AlphaNum] if {[regexp "NonValide" $LabelFeuille]} { return "FeuilleDistNonValideCar$LabelFeuille" } set ValeurDist [ValeurDist] if {[regexp "NonValide" $ValeurDist]} { return "FeuilleDistNonValideCar$ValeurDist" } return [list $LabelFeuille $ValeurDist] } proc FiSeqOl {P} { if {$P=="LaListeMerci"} { foreach F [glob -nocomplain "[RepertoireDuGenome]/oligos/P*.tfa"] { set NomP [file tail $F] regsub ".tfa$" $NomP "" NomP lappend LesPs $NomP } return $LesPs } return "[RepertoireDuGenome]/oligos/$P.tfa" } proc FiabiliteFonction {Nom} { set FF [string range [ExtraitInfo $Nom "Fonction"] 0 0] if { $FF == "" } { return 0 } return $FF } proc FicheDefDuBlastX {} { set Sortie [list] foreach ORF [LesPABsDansLOrdre] { lappend Sortie "$ORF [ExtraitInfo $ORF "DE_BLASTX"]" } EcritFichier $Sortie "[RepertoireDuGenome]/fiches/defdublastx.out" } proc FicheEMBLPourProttfaVidePourTous {} { foreach F [glob -nocomplain "[RepertoireDuGenome]/protemblVide/*"] { set Nom [file tail $F] Espionne "$Nom" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set LesLignes [LesLignesDuFichier $FichierProttfa] set PremiereLigne [lindex $LesLignes 0] set LesMots [LesMotsDeLaLigne $PremiereLigne] set IndexProt [expr [llength $LesMots] -1] set AccessProt [lindex $LesMots $IndexProt] Espionne "**$AccessProt" set LesLignesEMBL [LaSequenceDesBanques $AccessProt "OnVeutEMBL"] Espionne "--$LesLignesEMBL" if {$LesLignesEMBL == {}} { continue } set FichierEMBL "[GscopeFile $Nom protembl]" set D [SauveLesLignes $LesLignesEMBL dans $FichierEMBL] Espionne "$Nom $AccessProt [file tail $D]\n[join $LesLignesEMBL "\n"]" } } proc FicheInfos_PG16_140Seq {{FichierTableau ""}} { global RepertoireDuGenome if {$FichierTableau == ""} { FaireLire "Choisir le fichier contenant le tableau" set FichierTableau [ButineArborescence All [pwd]] } set Owner "TL" set i 0 set F [open $FichierTableau] while {[gets $F Ligne]>=0} { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} incr i if {$i == 1} {continue} set Info "" set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 4] set AFFY [lindex $LaLigne 5] set Access [lindex $LaLigne 1] append Info "Nom: $Nom\nCodeClone: $Access\nAffymetrix: $AFFY\nOwnerOfCDNA: $Owner\n" set WT1 [lindex $LaLigne 6 ] set WT2 [lindex $LaLigne 8 ] set AvWT [lindex $LaLigne 10] set RD11 [lindex $LaLigne 11] set RD12 [lindex $LaLigne 13] set AvRD [lindex $LaLigne 15] set WTRD1 [lindex $LaLigne 16] set RD1WT [lindex $LaLigne 17] set PR [lindex $LaLigne 18] set Brain [lindex $LaLigne 20] set PRBrain [lindex $LaLigne 22] set Description [lindex $LaLigne 23] append Info "Expression WT: 35d_WT_1 $WT1\t35d_WT_2 $WT2\tAverage_WT $AvWT\n" append Info "Expression RD1: 35d_rd1_1 $RD11\t35d_rd1_2 $RD12\tAverage_rd1 $AvRD\n" append Info "Expression PR: $PR\n" append Info "Expression BRAIN: $Brain\n" append Info "FOLD: WT/rd1 $WTRD1\trd1/WT $RD1WT\tPR/BRAIN $PRBrain\n" append Info "Description: $Description\n" set FileInfo "$RepertoireDuGenome/infos/$Nom" Sauve $Info dans $FileInfo Espionne $Info } close $F return "" } proc FicheInfos_bbkkvv {{FichierTableau ""}} { global RepertoireDuGenome if {$FichierTableau == ""} { FaireLire "Choisir le fichier contenant le tableau" set FichierTableau [ButineArborescence All [pwd]] } set Owner "TL" set i 0 set F [open $FichierTableau] while {[gets $F Ligne]>=0} { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} incr i if {$i == 1} {continue} set Info "" set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 4] set CodeClone "[lindex $LaLigne 1] [lindex $LaLigne 5]" append Info "Nom: $Nom\nCodeClone: $CodeClone\nOwnerOfCDNA: $Owner\n" set WT1 [lindex $LaLigne 6 ] set WT2 [lindex $LaLigne 8 ] set AvWT [lindex $LaLigne 10] set RD11 [lindex $LaLigne 11] set RD12 [lindex $LaLigne 13] set AvRD [lindex $LaLigne 15] set Fold [lindex $LaLigne 16] set PR [lindex $LaLigne 17] set Brain [lindex $LaLigne 19] set Description [lindex $LaLigne 21] append Info "Expression: Fold=$Fold ; wt 1=$WT1 ; wt 2=$WT2 ; Average wt=$AvWT ; rd1 1=$RD11 ; rd1 2=$RD12 ; Average rd=$AvRD ; PR=$PR ; Brain=$Brain\n" append Info "Description: $Description\n" set FileInfo "$RepertoireDuGenome/infos/$Nom" Sauve $Info dans $FileInfo Espionne $Info } close $F return "" } proc FicheMoi {{Qui ""} {Comment ""}} { PourWscope 1 if {$Qui==""} { set LesFiches [lsort [glob "[RepertoireDuGenome]/fiches/*"]] set LesRefText {} foreach Fichier $LesFiches { set Fiche [file tail $Fichier] lappend LesRefText "[WscopeScience]&FicheMoi&$Fiche" $Fiche } return [Html_ListOfRefs $LesRefText "

Please click to see the corresponding file

"] } if {$Comment==""} { set Comment "EnHTML" } set LesProbable {} lappend LesProbable "[RepertoireDuGenome]/fiches/$Qui" #rR on peut en rajouter d'autres ici ##################################################rR" if {[regexp "^rR/" $Qui]} { regsub "^rR/" $Qui "[HomeRipp]/" Qui lappend LesProbable $Qui } foreach Probable $LesProbable { if {[FileAbsent $Probable]} { continue } set Titre "[file tail [RepertoireDuGenome]]/fiches/$Qui" set Texte [ContenuDuFichier $Probable] #rR un peu de pudeur ... if {[file tail $Qui]=="gscope_canalsql.tcl"} { regsub -all {\{ *set Password [^\}]*\}} $Texte "{ set Password xxxxxx }" Texte } if {[regexp {\.html?$} $Qui]} { return $Texte } return [Html_DuTexteTelQuel $Texte $Titre] } return "Sorry, I can't find the file $Qui" } proc Fiches {{Fichier ""}} { if {$Fichier==""} { return "[RepertoireDuGenome]/fiches" } return "[RepertoireDuGenome]/fiches/$Fichier" } proc FichesInfosGscope_Table {{FichierTableau ""} {Save yes}} { global RepertoireDuGenome if {![file exists "$RepertoireDuGenome/beton/miniconfig"]} {return ""} foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/beton/miniconfig"] { if {![regexp "^PrefixeDesORFs " $Ligne]} {continue} regsub "^PrefixeDesORFs " $Ligne "" Ligne set BoxName [string trim $Ligne] break } if {$BoxName == ""} {return ""} if {$FichierTableau == ""} {set FichierTableau [ButineArborescence All [pwd]] } set RepTFA "$RepertoireDuGenome/nuctfa" set RepInfos "$RepertoireDuGenome/mRNAAndProt/EnteteInfos" if {![file exists $RepInfos]} {File mkdir "$RepInfos"} if {![file exists $FichierTableau ]} {return ""} foreach Ligne [LesLignesDuFichier $FichierTableau] { set NewInfos "" set LesInfos [split $Ligne "\t"] if {![regexp {^[0-9]} [lindex $LesInfos 0]] } { set PosCompleteId [lsearch $LesInfos "Probe set name"] set PosAccess [lsearch $LesInfos "Access" ] set PosBanque [lsearch $LesInfos "Banque" ] set PosRefGscope [lsearch $LesInfos "Ref Gscope" ] set PosDescription [lsearch $LesInfos "Description" ] set PosCategory [lsearch $LesInfos "Category" ] set PosSeqInfos [lsearch $LesInfos "Seq infos" ] set PosAverageWT [lsearch $LesInfos "Average WT" ] set PosAWT [lsearch $LesInfos "A WT" ] set PosAverageRd1 [lsearch $LesInfos "Average Rd1" ] set PosARd1 [lsearch $LesInfos "A Rd1" ] set PosFold [lsearch $LesInfos "Fold" ] continue } elseif {[regexp -nocase "No File" $Ligne]} { continue } else { set RefGscope [lindex $LesInfos $PosRefGscope] regexp "^($BoxName\[0-9]*)" $RefGscope tmp IdGscope set IdGscope [string trim $IdGscope] set IdGscopeDeRef $IdGscope set Owner "TL" set SeqInfos [lindex $LesInfos $PosSeqInfos] set CompleteId [lindex $LesInfos $PosCompleteId] set Access [lindex $LesInfos $PosAccess] set Banque [lindex $LesInfos $PosBanque] set AverageWT [lindex $LesInfos $PosAverageWT] set AWT [lindex $LesInfos $PosAWT] set AverageRd1 [lindex $LesInfos $PosAverageRd1] set ARd1 [lindex $LesInfos $PosARd1] set Fold [lindex $LesInfos $PosFold] set DescriptionTL [lindex $LesInfos $PosDescription] set CategoryTL [lindex $LesInfos $PosCategory] set InfoDeBoiteRef "Nom: $IdGscope\nCompleteId: $CompleteId\nAccess: $Access\nBanque: $Banque\nOwner of cDNA: $Owner\nExpression: Average WT=$AverageWT ; A WT=$AWT ; Average Rd1=$AverageRd1 ; A Rd1=$ARd1 ; Fold=$Fold\nDescription TL: $DescriptionTL\nCategory TL: $CategoryTL" set LesRefGscopesDesSplittes {} set LesAccessDesSplittes {} if {[regexp "split into" $RefGscope] && [regexp "Split into" $SeqInfos]} { regsub "$IdGscope split into " $RefGscope "" RefGscope append InfoDeBoiteRef "\nSplit into: $RefGscope" set LesRefGscopesDesSplittes [split $RefGscope " "] regsub "Split into " $SeqInfos "" SeqInfos set LesAccessDesSplittes [split $SeqInfos " "] if {[llength $LesRefGscopesDesSplittes] != [llength $LesAccessDesSplittes]} { Espionne "$IdGscope: ERROR" } } if {$Save == "yes"} {Sauve $InfoDeBoiteRef dans "$RepInfos/$IdGscope"} for {set i 0} {$i < [llength $LesAccessDesSplittes]} {incr i} { set Access [lindex $LesAccessDesSplittes $i] set IdGscope [lindex $LesRefGscopesDesSplittes $i] set IdGscope [string trim $IdGscope] set InfoDeBoiteRef "Nom: $IdGscope\nCompleteId: $CompleteId\nAccess: $Access\nBanque: $Banque\nOwner of cDNA: $Owner\nExpression: Average WT=$AverageWT ; A WT=$AWT ; Average Rd1=$AverageRd1 ; A Rd1=$ARd1 ; Fold=$Fold\nDescription TL: $DescriptionTL\nCategory TL: $CategoryTL" append InfoDeBoiteRef "\nFrom: $IdGscopeDeRef" if {$Save == "yes"} {Sauve $InfoDeBoiteRef dans "$RepInfos/$IdGscope"} } } } } proc FichierAccess2FichierTFAs {FichierAccess FichierTFAs} { if {![file exists $FichierAccess]} {return} set F [open $FichierAccess] set i 0 while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} scan $Ligne "%s" Access incr i Espionne "$Access\t$i" set SeqTFA [PageInfo $Access "genbank" "seq"] if {$SeqTFA == ""} {set SeqTFA ">$Access not found"} regsub "^>" $SeqTFA "" SeqTFA set PosAutreSeq [string first ">" $SeqTFA] if {0 < $PosAutreSeq} {set SeqTFA [string range $SeqTFA 0 [expr $PosAutreSeq - 1]]} set SeqTFA [SequenceFormatTFA [QueLaSequenceDuTexteTFA ">$SeqTFA"] ">$Access"] AppendAuFichier $FichierTFAs $SeqTFA } close $F return } proc FichierAjoutePN6et7_TL {File1 File2 FileOut} { set F [open $File1] while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Access [string toupper [lindex $LaLigne 0]] if {$Access == ""} {continue} set Tab($Access,PN6,rd1) [lindex $LaLigne 2] set Tab($Access,PN7,rd1) [lindex $LaLigne 3] set Tab($Access,PN6,wt) [lindex $LaLigne 4] set Tab($Access,PN7,wt) [lindex $LaLigne 5] } close $F Espionne OK set n 0 set LeTexte {} set F [open $File2] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} incr n set LaLigne [split $Ligne "\t"] if {$n == 1} { set NbColDeRef [llength $LaLigne] lappend LeTexte "$Ligne\t6d wt\t6d rd1\t7d wt\t7d rd1" continue } set NbCol [llength $LaLigne] if {$NbCol < $NbColDeRef} { for {set i $NbCol} {$i < $NbColDeRef} {incr i} { lappend LaLigne "" } } set Access [string toupper [lindex $LaLigne 3]] if {$Access == ""} {continue} Espionne $Access if {[info exists Tab($Access,PN6,wt)]} { lappend LaLigne [set Tab($Access,PN6,wt)] } else { lappend LaLigne "" } if {[info exists Tab($Access,PN6,rd1)]} { lappend LaLigne [set Tab($Access,PN6,rd1)] } else { lappend LaLigne "" } if {[info exists Tab($Access,PN7,wt)]} { lappend LaLigne [set Tab($Access,PN7,wt)] } else { lappend LaLigne "" } if {[info exists Tab($Access,PN7,rd1)]} { lappend LaLigne [set Tab($Access,PN7,rd1)] } else { lappend LaLigne "" } lappend LeTexte [join $LaLigne "\t"] } close $F Sauve [join $LeTexte "\n"] dans $FileOut return } proc FichierAnchorsPour {Nom} { global RepertoireDuGenome global OptionsBallastPourJulie set FichierAnchors "$RepertoireDuGenome/ballast/$Nom.anchors" if {[file exists $FichierAnchors]} { return $FichierAnchors } Wup "Il faut le creer" set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" if { ! [file exists $FichierBlastP]} { return "" } if { ! [info exists OptionsBallastPourJulie] && [file exists "$RepertoireDuGenome/ballast/$Nom"]} { set FichierBallast "$RepertoireDuGenome/ballast/$Nom" } else { set FichierBallast [Ballast $FichierBlastP] } if {$FichierBallast != "" && [regexp -nocase "fatal error" [join [LesPremieresLignesDuFichier $FichierBallast 10]] "\n"]} { set FichierBallast "" } if {$FichierBallast==""} { return "" } return "$FichierBallast.anchors" } proc FichierBestGeneOntologyPourTous {{LesNoms ""} {FileGOOut ""} {P 0.8} {FractionDuMax 0.5} {NormMDMin 0.3} {NbGOParTypePourLesMSF ""}} { if {$FileGOOut == ""} {set FileGOOut "[RepertoireDuGenome]/fiches/GeneOntology"} set FileGOProttfa "[RepertoireDuGenome]/fiches/GeneOntology_prottfa" set FileGOMSF "[RepertoireDuGenome]/fiches/GeneOntology_clustersdesmsf" set RepMSF "[RepertoireDuGenome]/msf" if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set LesOntologies {} foreach Nom $LesNoms { Espionne $Nom set FileMSF "$RepMSF/$Nom" ###Determination du cluster du msf contenant notre proteine###### set Cluster "" set AiJeVuUneProt 0 foreach AccessProttfa [InterrogeGeneOntology $FileGOProttfa $Nom LesAccess] { set AiJeVuUneProt 1 set Cluster [InterrogeGeneOntology $FileGOMSF $Nom Access $AccessProttfa Groupe] if {$Cluster == ""} { AppendAuFichier "[RepertoireDuGenome]/fiches/GeneOntology.log" "$Nom $AccessProttfa" break } } if {!$AiJeVuUneProt} {continue} if {$Cluster == "" } { set LesAccess [InterrogeGeneOntology $FileGOMSF $Nom LesAccess] } else { set LesAccess [InterrogeGeneOntology $FileGOMSF $Nom Groupe $Cluster LesAccess] } ###Calcul du NormMD des selectionnes###### set NormMD -9999.0 if {[file exists $FileMSF]} {set NormMD [MDScoreAvecSelectionDuFichier $FileMSF $LesAccess]} ###Selection des GO les plus representatifs de ce cluster####### ###On y ajoute les GO de notre proteine afin d'avoir les GO les plus precis possibles en considerant que les GO de notre proteine sont les meilleurs### set LesGO [InterrogeGeneOntology $FileGOProttfa $Nom LesGO] set TousLesGO $LesGO if {$NormMDMin <= $NormMD} { foreach Access $LesAccess { foreach GO [InterrogeGeneOntology $FileGOMSF Access $Access LesGO] { if {$GO == ""} {continue} lappend TousLesGO $GO } } set LesGO [concat $LesGO [LaSelectionDesMeilleursGO $TousLesGO $P $FractionDuMax $NbGOParTypePourLesMSF]] } if {$LesGO == {}} { lappend LesOntologies [join [list $Nom $Cluster $Nom "NoOntologyFound"] "\t"] continue } ###On elimine les ancetres et les doublons### foreach GO [EnterrerLesAncetresOntologiques [ElimineLesRedondancesDansUneListe $LesGO]] { set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set LesAncetres [TousLesAncetresOntologiques $Type $GO] set Ontologie [join [list $Nom $Cluster $Nom "$Type" "$GO" "$Def" "[join $LesAncetres "\t"]"] "\t"] Espionne $Ontologie lappend LesOntologies $Ontologie } } Sauve [join $LesOntologies "\n"] dans $FileGOOut return } proc FichierBestLocalisation {{LesNoms ""} {NameFichierOUT BestLocalisation_Human} {IdMin 0.8}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} if {![file exists "[RepertoireDuGenome]/Localisation"]} {file mkdir "[RepertoireDuGenome]/Localisation"} set TailleFragment 100000 set FichierOUT "[RepertoireDuGenome]/Localisation/$NameFichierOUT" set FLocmRNAHsap "[RepertoireDuGenome]/Localisation/mRNAHsapLocalisation_Human" if {[file exists $FLocmRNAHsap]} {set LocmRNAHsapExiste 1} else {set LocmRNAHsapExiste 0} set FLocProttfa "[RepertoireDuGenome]/Localisation/ProttfaLocalisation_Human" if {[file exists $FLocProttfa ]} {set LocProttfaExiste 1} else {set LocProttfaExiste 0} set FLocBox "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human" if {[file exists $FLocBox ]} {set LocBoxExiste 1} else {set LocBoxExiste 0} set LeTexte {} foreach Nom $LesNoms { set EstCeQueLaProteineEstOK 1 set EstCeQueLemRNAHumanEstOK 1 if { [file exists "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesContigsChoisis"] || [file exists "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis"]} { #Validite de la proteine de ref (sequence presente et bon %Id avec seq initiale) if { ([InterrogeProtAndmRNAChoisis $Nom SeqChoisie ] != "SeqOK" || [InterrogeProtAndmRNAChoisis $Nom InfoSeqChoisie] != "") && ([InterrogeProtAndContigChoisis $Nom SeqChoisie] != "SeqOK" || [InterrogeProtAndContigChoisis $Nom InfoSeqChoisie] != "") } { set EstCeQueLaProteineEstOK 0 } } if { [file exists "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga"] } { #Validite du mrna humain (sequence presente et bon %Id avec proteine de ref) set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$AccessmRNA == "" || [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessmRNA Identity] < $IdMin} { set EstCeQueLemRNAHumanEstOK 0 } } set LesLoc [InterrogeLocalisation $FLocBox Nom $Nom] set LesLocProt [InterrogeLocalisation $FLocProttfa Nom $Nom] set LesLocmRNA [InterrogeLocalisation $FLocmRNAHsap Nom $Nom] #si la proteine est bonne et le mrna humain est bon on utilise la localisation du mrna humain #si seulement la proteine est bonne on utilise la localisation de la proteine de ref #si ni la proteine de ref ni le mrna humain ne sont valides, on utilise la localisation de la sequence par defaut if {$EstCeQueLemRNAHumanEstOK && $LocmRNAHsapExiste && $LesLocmRNA != {}} { set LesLoc $LesLocmRNA } elseif {$EstCeQueLaProteineEstOK && $LocProttfaExiste && $LesLocProt != {}} { set LesLoc $LesLocProt } foreach LaLoc $LesLoc { if {0} { set Chrom [NumeroDuChromosome [lindex $LaLoc 9]] set DChrom [lindex $LaLoc 10] set FChrom [lindex $LaLoc 11] set BC [join [LesBandesCytologiquesDeLaRegion $Chrom $DChrom $FChrom] " "] set LaLoc [lreplace $LaLoc 19 19 $BC] } set Ligne [join $LaLoc "\t"] Espionne $Ligne lappend LeTexte $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierBestProteinAndmRNAForeachOrgaPourTous {{LesNoms ""} {IdDesProtId 0.99} {IdMinStrict 0.3}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FichierOut "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" set RepMSF "[RepertoireDuGenome]/msf" set Continue 0 if {[file exists $FichierOut]} { if {[OuiOuNon "$FichierOut exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $FichierOut] { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] set Orga [lindex $LaLigne 1] if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} if {![info exists DejaVu($Nom,$Orga)]} {set DejaVu($Nom,$Orga) 1} } } else { if {[OuiOuNon "$FichierOut exists.\nWould you want to deltree this file?"]} { File delete -force $FichierOut } } } foreach Nom $LesNoms { if {[info exists DejaVu($Nom)]} {continue} set FichierMSF "$RepMSF/$Nom" if {![file exists $FichierMSF ]} {continue} if {![DecortiqueUnMSF $FichierMSF LesAccess Sequences]} {continue} set Tab($Nom,LesOrgas) {} Espionne $Nom foreach Access $LesAccess { set Access [string toupper $Access] if {$Access == $Nom } {continue} if {[EstUnAccessPDB $Access]} {continue} set Id1 [IDdansMSF $FichierMSF $Query $Access SelonB] if {$Id1 < $IdMinStrict} {continue} set Id2 [IDdansMSF $FichierMSF $Query $Access SelonA] if {$Id2 < $IdMinStrict} {continue} if {$Id1 < $Id2} {set Id $Id1} else {set Id $Id2} foreach Orga [lsort -unique [LesOrgasDeLAccess $Access]] { if {[info exists Tab($Nom,$Orga,$Access)]} {continue} set Tab($Nom,$Orga,$Access) [list $Access $Id] if {![info exists Tab($Nom,$Orga,LesProteines)]} { set Tab($Nom,$Orga,LesProteines) {} lappend Tab($Nom,LesOrgas) $Orga } lappend Tab($Nom,$Orga,LesProteines) [list $Access $Id] } } foreach Orga [lsort -unique [set Tab($Nom,LesOrgas)]] { if {$Continue && [info exists DejaVu($Nom,$Orga)]} {continue} set LesProteines [set Tab($Nom,$Orga,LesProteines)] set LaProteine [lindex [lsort -index end -real -decreasing $LesProteines] 0] set AccessDeRef [lindex $LaProteine 0] set LesProteinesSelect {} set LesmRNAsSelect {} foreach LaProteine $LesProteines { set AccessProt [lindex $LaProteine 0] set IdAvecAccessDeRef [IDdansMSF $FichierMSF $AccessDeRef $AccessProt SelonB] if {$IdAvecAccessDeRef < $IdDesProtId} {continue} set IdAvecAccessDeRef [IDdansMSF $FichierMSF $AccessDeRef $AccessProt SelonA] if {$IdAvecAccessDeRef < $IdDesProtId} {continue} set PageInfoProt [PageInfo $AccessProt protein] set SeqProtDeRef [string toupper [string trim [LaSequenceDuTexteEMBL $PageInfoProt]]] regsub -nocase {^[M]*} $SeqProtDeRef "" SeqProtDeRef set TailleProt [TailleDeLaProt_PageInfo $PageInfoProt] lappend LesProteinesSelect [list $AccessProt $Id $TailleProt $PageInfoProt] foreach AccessGB [LesmRNAsDeLaProt_PageInfo $PageInfoProt] { set PageInfoGB [PageInfo $AccessGB genbankfull] if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfoGB]} {continue} set EstCeLeMemeOrga 0 foreach OrgaDumRNA [LesOrgasDeLaPage_PageInfo $PageInfoGB] { if {[string equal -nocase $OrgaDumRNA $Orga]} {set EstCeLeMemeOrga 1;break} } if {!$EstCeLeMemeOrga} {continue} set SeqProtDumRNA [string toupper [string trim [SeqProtDumRNA_PageInfo $PageInfoGB]]] regsub -nocase {^[M]*} $SeqProtDumRNA "" SeqProtDumRNA set EstCeLaMemeProt 0 if {$SeqProtDumRNA == $SeqProtDeRef} {set EstCeLaMemeProt 1} set Taille [TailleDeLAcNuc_PageInfo $PageInfoGB ] lappend LesmRNAsSelect [list $AccessGB $Taille $PageInfoGB $AccessProt $Id $TailleProt $PageInfoProt $EstCeLaMemeProt] } } if {$LesProteinesSelect == {}} {continue} if {$LesmRNAsSelect == {}} { set LaProteine [lindex [lsort -index 2 -real -decreasing $LesProteinesSelect] 0] set AccessProt [lindex $LaProteine 0] set Id [IDdansMSF $FichierMSF $Nom $AccessProt SelonA] set TailleDeLaProt [lindex $LaProteine 2] set PageInfoProt [lindex $LaProteine 3] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " "] Espionne "$Nom\t$Orga\tProtein\t$AccessProt\t$TailleProt\t$Id\t$DefProt" AppendAuFichier $FichierOut "$Nom\t$Orga\tProtein\t$AccessProt\t$TailleProt\t$Id\t$DefProt" continue } else { set LemRNA [lindex [lsort -index 7 -real -decreasing [lsort -index 1 -real -decreasing $LesmRNAsSelect] ] 0] set AccessGB [lindex $LemRNA 0] set TailleGB [lindex $LemRNA 1] set PageInfoGB [lindex $LemRNA 2] set DefGB [join [LaDefinitionDeLAcNuc_PageInfo $PageInfoGB] " "] set AccessProt [lindex $LemRNA 3] set Id [IDdansMSF $FichierMSF $Nom $AccessProt SelonA] set TailleProt [lindex $LemRNA 5] set PageInfoProt [lindex $LemRNA 6] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " "] set EstCeLaMemeProt [lindex $LemRNA 7] if {!$EstCeLaMemeProt} {set QuEstCe "Variant"} else {set QuEstCe ""} Espionne "$Nom\t$Orga\tProtein\t$AccessProt\t$TailleProt\t$Id\t$DefProt" AppendAuFichier $FichierOut "$Nom\t$Orga\tProtein\t$AccessProt\t$TailleProt\t$Id\t$DefProt" Espionne "$Nom\t$Orga\tmRNA\t$AccessGB\t$TailleGB\t$Id\t$DefGB\t$QuEstCe" AppendAuFichier $FichierOut "$Nom\t$Orga\tmRNA\t$AccessGB\t$TailleGB\t$Id\t$DefGB\t$QuEstCe" } } if {[info exists Sequences]} {unset Sequences} if {[info exists LesAccess]} {unset LesAccess} if {[info exists Tab ]} {unset Tab} } return } proc FichierBilanClustersXHdaFusionnes {{SeuilDistance 200}} { set Fichier "[RepertoireDuGenome]/fiches/bilan_fusionclustersXHda_seuilDistanceDPC$SeuilDistance" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_ClustersXHda" set LesInfos {} foreach Cl1 [O2C2O LesClusters] { foreach Cl2 [O2C2O LesClusters] { if {$Cl1 == $Cl2} {continue} if {$Cl1 == 114 || $Cl2 == 114} {continue} if {[info exists TabTmp($Cl1,$Cl2)] || [info exists TabTmp($Cl2,$Cl1)]} {continue} set TabTmp($Cl1,$Cl2) 1;set TabTmp($Cl2,$Cl1) 1 Espionne "$Cl1 $Cl2" set Dist [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 Distance] if {$Dist > $SeuilDistance} {continue} if {[info exists Tab($Cl1,CE)] && [info exists Tab($Cl2,CE)]} { set CEDeCl1 [set Tab($Cl1,CE)] set CEDeCl2 [set Tab($Cl2,CE)] if {$CEDeCl1 == $CEDeCl2} {continue} #if {![info exists Tab($CEDeCl2,LesCE)]} {set Tab($Cl2,CE) [set Tab($CEDeCl2,CE)]} foreach Cluster [set Tab($CEDeCl2,LesCE)] { set Tab($Cluster,CE) [set Tab($Cl1,CE)] lappend Tab($CEDeCl1,LesCE) $Cluster } lappend Tab($CEDeCl1,LesCE) $CEDeCl2 if {[info exists Tab($CEDeCl2,LesCE)]} {unset Tab($CEDeCl2,LesCE)} continue } if {[info exists Tab($Cl1,CE)] && ![info exists Tab($Cl2,CE)]} { set CEDeCl1 [set Tab($Cl1,CE)] lappend Tab($CEDeCl1,LesCE) $Cl2 set Tab($Cl2,CE) $CEDeCl1 continue } if {[info exists Tab($Cl2,CE)] && ![info exists Tab($Cl1,CE)]} { set CEDeCl2 [set Tab($Cl2,CE)] lappend Tab($CEDeCl2,LesCE) $Cl1 set Tab($Cl1,CE) $CEDeCl2 continue } set Tab($Cl1,CE) $Cl1 set Tab($Cl2,CE) $Cl1 set Tab($Cl1,LesCE) [list $Cl1 $Cl2] } } set NbClusters 0 set NbOrfsFusionnees 0 foreach Cl [O2C2O LesClusters] { if {![info exists Tab($Cl,CE)]} {lappend LesInfos $Cl;incr NbClusters} if { [info exists Tab($Cl,LesCE)]} { set LesCE [lsort -unique [set Tab($Cl,LesCE)]] lappend LesInfos [join $LesCE "\t"] incr NbClusters foreach CE $LesCE { set TCl [O2C2O Cluster $CE TailleCluster] set NbOpCl [O2C2O Cluster $CE NbOperonsDansCluster] set PAllOrga [O2C2O Cluster $CE Categorie AllOrganism Presence] set POrgasInt [O2C2O Cluster $CE Categorie OrganismeInteressant Presence] set PBact [O2C2O Cluster $CE Categorie Bacteria Presence] set PFirm [O2C2O Cluster $CE Categorie Firmicutes Presence] set PProteo [O2C2O Cluster $CE Categorie Proteobacteria Presence] set PArchaea [O2C2O Cluster $CE Categorie Archaea Presence] set PEu [O2C2O Cluster $CE Categorie Eukaryota Presence] incr NbOrfsFusionnees $TCl set InfoCl "$CE\t$TCl\t$NbOpCl\t$PAllOrga\t$POrgasInt\t$PBact\t$PFirm\t$PProteo\t$PArchaea\t$PEu" foreach Def [InterrogeGeneOntology $FichierGO Groupe $CE Type "process" LesDefinitions] { append InfoCl "\t$Def"} lappend LesInfos $InfoCl } } } Espionne $NbClusters Espionne $NbOrfsFusionnees EspionneL $LesInfos Sauve [join $LesInfos "\n"] dans $Fichier return } proc FichierBilanGOTissueTypeDevStageDomainesSurClusters_AL {FichierOUT} { set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierGOProteo "[GODBDir]/GeneOntology_HUMAN" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" Espionne "Populations des clusters" foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set Tab(Cluster,$Cluster,LesIndividusGO) {} set Tab(Cluster,$Cluster,LesIndividusTT) {} set Tab(Cluster,$Cluster,LesIndividusDS) {} set Tab(Cluster,$Cluster,LesIndividusDO) {} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $Fichier Cluster $Cluster LesNoms] { if {1} { ####Tissue Type#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType]] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusTT) $LIndividu } ####Dev Stage#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage]] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusDS) $LIndividu } } if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusGO) $LIndividu } } if {1} { ###Domaines####################################### set LIndividu {} foreach LeDom [InterrogeDomaines $Nom LesDomaines] { set Type [lindex $LeDom 0] set Dom [lindex $LeDom 1] set Def [lindex $LeDom 2] if {$Def == ""} {continue} lappend LIndividu $Dom set Tab(Dom,$Dom,Def) $Def set Tab(Dom,$Dom,Type) $Type } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusDO) $LIndividu } } } } Espionne "OK" if {[info exists TabDeJaVu]} {unset TabDeJaVu} set LesIndividusGODeLaPop1 {} set LesIndividusTTDeLaPop1 {} set LesIndividusDSDeLaPop1 {} set LesIndividusDODeLaPop1 {} Espionne "Populations totales selectionnees" foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesNoms] { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {1} { ####Tissue Type#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType]] if {$LIndividu != {}} { lappend LesIndividusTTDeLaPop1 $LIndividu } ####Dev Stage#################################### set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage]] if {$LIndividu != {}} { lappend LesIndividusDSDeLaPop1 $LIndividu } } if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu != {}} { set LIndividu [lsort -unique $LIndividu] lappend LesIndividusGODeLaPop1 $LIndividu } } if {1} { ###Domaines####################################### set LIndividu {} foreach LeDom [InterrogeDomaines $Nom LesDomaines] { set Type [lindex $LeDom 0] set Dom [lindex $LeDom 1] set Def [lindex $LeDom 2] if {$Def == ""} {continue} lappend LIndividu $Dom set Tab(Dom,$Dom,Def) $Def set Tab(Dom,$Dom,Type) $Type } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend LesIndividusDODeLaPop1 $LIndividu } } } Espionne OK Espionne "Lecture Du FichierGO du Proteome" #Gene Ontology du proteome humain##### set LesIndividusGODeLaPop2 {} if {1} { foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} lappend LesIndividusGODeLaPop2 [lsort -unique $LIndividu] } } Espionne "OK" Espionne "Calcul" set LeTexte {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set LesIndividusGO [set Tab(Cluster,$Cluster,LesIndividusGO)] set LesIndividusTT [set Tab(Cluster,$Cluster,LesIndividusTT)] set LesIndividusDS [set Tab(Cluster,$Cluster,LesIndividusDS)] set LesIndividusDO [set Tab(Cluster,$Cluster,LesIndividusDO)] ###GO GO GO GO################ foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop1] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop2] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } ####Tissue Type##################### foreach LeTT [LesZscoreDesRequetesDuGroupe $LesIndividusTT $LesIndividusTTDeLaPop1] { set TT [lindex $LeTT 0] set r [lindex $LeTT 2] if {$r <= 0} {continue} set Stat [join [lrange $LeTT 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tTissue Type\t\t\t\t$TT\t\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tTissue Type\t\t\t\t$TT\t\t$Stat" } ###Dev Stage##################### foreach LeDS [LesZscoreDesRequetesDuGroupe $LesIndividusDS $LesIndividusDSDeLaPop1] { set DS [lindex $LeDS 0] set r [lindex $LeDS 2] if {$r <= 0} {continue} set Stat [join [lrange $LeDS 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tDev Stage\t\t\t\t$DS\t\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tDev Stage\t\t\t\t$DS\t\t$Stat" } ###Domaines##################### foreach LeDO [LesZscoreDesRequetesDuGroupe $LesIndividusDO $LesIndividusDODeLaPop1] { set DO [lindex $LeDO 0] set r [lindex $LeDO 2] if {$r <= 0} {continue} set Def [set Tab(Dom,$DO,Def)] set Type [set Tab(Dom,$DO,Type)] set Stat [join [lrange $LeDO 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" } } Espionne "OK" Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierBilanMaskingPourTous {{LesNoms ""}} { set File "[RepertoireDuGenome]/fiches/BilanMasking" if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set LeTexte {} foreach Nom $LesNoms { foreach Ligne [BilanMasking $Nom] {lappend LeTexte $Ligne} } if {$LeTexte == {}} {return} Sauve [join $LeTexte "\n"] dans $File return $LeTexte } proc FichierBilanProteinesPourTous_PO_OLD {{FichierOut ""}} { #!!! Procedure transformee en proc FichierBilanProteines_ComparaisonDDExperiencesPourTous_PO #set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression_573.200408031437" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression_DD2_2254.20041029" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set LeTexte {} lappend LeTexte [join [list Name ID Cluster GeneName MeanDef GPOFunc GPOProc GPOComp Method AccessProt DefProt TailleProt OrgaProt AccessmRNA DefmRNA TaillemRNA OrgamRNA AccessContig OrgaContig ID_VSSeqIni ID_ContigVSProt] "\t"] Espionne $FichierOCADE foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { set FileProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {[info exists TabDeJaVu($Cluster,$Nom) ]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} set Ligne [join [FichierBilanProteines_PO $Nom] "\t"] Espionne $Ligne lappend LeTexte $Ligne } } if {$FichierOut != ""} {Sauve [join $LeTexte "\n"] dans $FichierOut} return } proc FichierBilanProteines_ComparaisonDDExperiencesPourTous_PO {} { set FichierOut "[RepertoireDuGenome]/fiches/BilanProteines_ComparaisonDDExperiences" set LesDDExperiences [list DD1 DD2] set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set LeTexte {} lappend LeTexte [join [list Name ID DDExperience Cluster LesDDExperiences LesJumelles GeneName MeanDef GPOFunc GPOProc GPOComp Method AccessProt DefProt TailleProt OrgaProt AccessmRNA DefmRNA TaillemRNA OrgamRNA AccessContig OrgaContig ID_VSSeqIni ID_ContigVSProt] "\t"] ###Premier cyle de boucles pour rassembler les infos sur les jumelles entre DDExperience### Espionne "Premier cycle" foreach DDExperience $LesDDExperiences { Espionne "$DDExperience" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression_$DDExperience" if {![file exists $FichierOCADE]} {Espionne "$FichierOCADE does not exists" ; return} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { #LesDDExperiences pour Nom if {![info exists TabJumelleDDExperiences($Nom,LesDDExperiences)]} { set TabJumelleDDExperiences($Nom,LesDDExperiences) {} } if {![info exists TabJumelleDDExperiences($Nom,$DDExperience)]} { set TabJumelleDDExperiences($Nom,$DDExperience) 1 lappend TabJumelleDDExperiences($Nom,LesDDExperiences) $DDExperience } #LesDDExperiences pour chaque proteine jumelle foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] { if {[info exists TabJumelleDDExperiences($Jum,$DDExperience)]} {continue} if {![info exists TabJumelleDDExperiences($Jum,LesDDExperiences)]} { set TabJumelleDDExperiences($Jum,LesDDExperiences) {} } set TabJumelleDDExperiences($Jum,$DDExperience) 1 lappend TabJumelleDDExperiences($Jum,LesDDExperiences) $DDExperience } #Espionne "Nom,$Nom: [set TabJumelleDDExperiences($Nom,LesDDExperiences)]" foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] { #Espionne "Jum,$Jum: [set TabJumelleDDExperiences($Jum,LesDDExperiences)]" } } } } ###Second cyle de boucles pour ecrire les infos dans le fichier de sortie### ###On insere l'info LesDDExperiences dans la sortie de la proc FichierBilanProteines_ComparaisonDDExperiences_PO Espionne "Second cycle" foreach DDExperience $LesDDExperiences { Espionne $DDExperience set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression_$DDExperience" if {![file exists $FichierOCADE]} {Espionne "$FichierOCADE does not exists" ; return} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { Espionne $Cluster foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { #Pour une DDExperience, l'info est ajoutee dans le fichier pour seulement une des prot jumelles # si plusieurs jumelles sont presentes dans un meme cluster de la meme DDExperience if {[info exists TabDeJaVu($DDExperience,$Cluster,$Nom) ]} {continue} set TabDeJaVu($DDExperience,$Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] { set TabDeJaVu($DDExperience,$Cluster,$Jum) 1 } set LesInfos [FichierBilanProteines_ComparaisonDDExperiences_PO $Nom $FichierOCADE $DDExperience] set LesDDExperiences [set TabJumelleDDExperiences($Nom,LesDDExperiences)] set LesInfos [linsert $LesInfos 4 $LesDDExperiences] set Ligne [join $LesInfos "\t"] Espionne $Ligne lappend LeTexte $Ligne } } } Sauve [join $LeTexte "\n"] dans $FichierOut InterrogeProteinesJumelles unset return } proc FichierBilanProteines_ComparaisonDDExperiences_PO {Nom FichierOCADE DDExperience} { set FileGOXML "[RepertoireDuGenome]/GeneOntology/$Nom.xml" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] set AccessIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access ] ###LesProteinesJumelles### set LesJumelles [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] ###Les noms des genes des proteines du même cluster de msf que la proteine de ref### set GeneNameTxt "" if {[InterrogeGeneName $Nom LesGeneNames] != ""} { set LesGeneNames {} foreach GN [InterrogeGeneName $Nom LesGeneNames] { if {$GN == ""} {continue} set N [InterrogeGeneName $Nom GeneName $GN n] regsub -nocase {^[a-z0-9]+\=} [string trim $GN] "" GN lappend LesGeneNames [list $GN $N] } if {$LesGeneNames != {}} { set LesGeneNamesEtLeurEffectif {} foreach LeGN [lsort -index 1 -decreasing -integer $LesGeneNames] { lappend LesGeneNamesEtLeurEffectif "[lindex $LeGN 0] ([lindex $LeGN 1])" } set GeneNameTxt [join $LesGeneNamesEtLeurEffectif " ; "] } } ###Mean Definition### set MeanDefTxt [InterrogeDefinitionsConsensus $Nom Definition] ###Commencons maintenant le boulot pour la meilleure proteine trouvee#### set MethodTxt "" set AccessProtTxt "" set DefProtTxt "" set LengthProtTxt "" set OrgaProtTxt "" set AccessmRNATxt "" set DefmRNATxt "" set LengthmRNATxt "" set OrgamRNATxt "" set PID1Txt "" set PID2Txt "" set AccessContTxt "" set OrgaContTxt "" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set TailleProt [TailleDeLaSequenceDuFichierTFA $FichierProttfa] set InfoSeq [InterrogeProtAndmRNAChoisis $Nom SeqChoisie] if {$InfoSeq != ""} { if {$InfoSeq == "SeqOK"} { set MethodTxt "ProtAndmRNA" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {![string equal -nocase $AccessProt "NoProtein"]} { set AccessProtTxt $AccessProt set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProtTxt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LengthProtTxt [TailleDeLaProt_PageInfo $PageInfoProt] set OrgaProtTxt [join [LesOrgasDeLaPage_PageInfo $PageInfoProt] " ; "] } if {![string equal -nocase $AccessmRNA "NomRNA"]} { set AccessmRNATxt $AccessmRNA set PageInfomRNA [PageInfo $AccessmRNA genbankfull "id acc des org"] set DefmRNATxt [join [LaDefinitionDeLAcNuc_PageInfo $PageInfomRNA] " " ] set OrgamRNATxt [join [LesOrgasDeLaPage_PageInfo $PageInfomRNA] " ; "] set LengthmRNATxt [TailleDeLAcNuc_PageInfo $PageInfomRNA] } set Rang 1 set Id [InterrogeProtAndmRNA $Nom Rang $Rang Id] if {$Id != ""} {set PID1Txt [format "%.1f" [expr $Id * 100]]} } else { set AccessProt [string toupper [InterrogeContigAndProt $Nom Protein Access]] if {$AccessProt != ""} { set MethodTxt "Contig" set AccessProtTxt $AccessProt set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProtTxt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LengthProtTxt [TailleDeLaProt_PageInfo $PageInfoProt] set OrgaProtTxt [join [LesOrgasDeLaPage_PageInfo $PageInfoProt] " ; "] set AccessContTxt [string toupper [InterrogeContigAndProt $Nom Contig Access]] set OrgaContTxt [InterrogeContigAndProt $Nom Contig Organisme] set Id [InterrogeContigAndProt $Nom Contig Identity ] if {$Id != ""} {set PID1Txt [format "%.1f" [expr $Id * 100]]} set Id [InterrogeContigAndProt $Nom Protein Identity ] if {$Id != ""} {set PID2Txt [format "%.1f" [expr $Id * 100]]} } } } set GPOFuncTxt "" set GPOProcTxt "" set GPOCompTxt "" foreach Type [list "function" "process" "component"] { set LeTexte {} foreach GO [AskGOAnalyse $FileGOXML Methode GPO Type $Type LesGO] { set Def [AskGOAnalyse $FileGOXML Type $Type GO $GO Definition] lappend LeTexte $Def } if {$Type == "function" } {set GPOFuncTxt [join $LeTexte " ; "]} if {$Type == "process" } {set GPOProcTxt [join $LeTexte " ; "]} if {$Type == "component"} {set GPOCompTxt [join $LeTexte " ; "]} } return [list $Nom $AccessIni $DDExperience $Cluster $LesJumelles $GeneNameTxt $MeanDefTxt $GPOFuncTxt $GPOProcTxt $GPOCompTxt $MethodTxt $AccessProtTxt $DefProtTxt $LengthProtTxt $OrgaProtTxt $AccessmRNATxt $DefmRNATxt $LengthmRNATxt $OrgamRNATxt $AccessContTxt $OrgaContTxt $PID1Txt $PID2Txt] } proc FichierBilanProteines_PO_OLD {Nom} { #!!! Procedure transformee en proc FichierBilanProteines_ComparaisonDDExperiences_PO #set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression_573.200408031437" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression_DD2_2254.20041029" set FileGOXML "[RepertoireDuGenome]/GeneOntology/$Nom.xml" set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] set AccessIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] ###Les noms des genes des proteines du même cluster de msf que la proteine de ref### set GeneNameTxt "" if {[InterrogeGeneName $Nom LesGeneNames] != ""} { set LesGeneNames {} foreach GN [InterrogeGeneName $Nom LesGeneNames] { if {$GN == ""} {continue} set N [InterrogeGeneName $Nom GeneName $GN n] regsub -nocase {^[a-z0-9]+\=} [string trim $GN] "" GN lappend LesGeneNames [list $GN $N] } if {$LesGeneNames != {}} { set LesGeneNamesEtLeurEffectif {} foreach LeGN [lsort -index 1 -decreasing -integer $LesGeneNames] { lappend LesGeneNamesEtLeurEffectif "[lindex $LeGN 0] ([lindex $LeGN 1])" } set GeneNameTxt [join $LesGeneNamesEtLeurEffectif " ; "] } } ###Mean Definition### set MeanDefTxt [InterrogeDefinitionsConsensus $Nom Definition] ###Commencons maintenant le boulot pour la meilleure proteine trouvee#### set MethodTxt "" set AccessProtTxt "" set DefProtTxt "" set LengthProtTxt "" set OrgaProtTxt "" set AccessmRNATxt "" set DefmRNATxt "" set LengthmRNATxt "" set OrgamRNATxt "" set PID1Txt "" set PID2Txt "" set AccessContTxt "" set OrgaContTxt "" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set TailleProt [TailleDeLaSequenceDuFichierTFA $FichierProttfa] set InfoSeq [InterrogeProtAndmRNAChoisis $Nom SeqChoisie] if {$InfoSeq != ""} { if {$InfoSeq == "SeqOK"} { set MethodTxt "ProtAndmRNA" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {![string equal -nocase $AccessProt "NoProtein"]} { set AccessProtTxt $AccessProt set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProtTxt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LengthProtTxt [TailleDeLaProt_PageInfo $PageInfoProt] set OrgaProtTxt [join [LesOrgasDeLaPage_PageInfo $PageInfoProt] " ; "] } if {![string equal -nocase $AccessmRNA "NomRNA"]} { set AccessmRNATxt $AccessmRNA set PageInfomRNA [PageInfo $AccessmRNA genbankfull "id acc des org"] set DefmRNATxt [join [LaDefinitionDeLAcNuc_PageInfo $PageInfomRNA] " " ] set OrgamRNATxt [join [LesOrgasDeLaPage_PageInfo $PageInfomRNA] " ; "] set LengthmRNATxt [TailleDeLAcNuc_PageInfo $PageInfomRNA] } set Rang 1 set Id [InterrogeProtAndmRNA $Nom Rang $Rang Id] if {$Id != ""} {set PID1Txt [format "%.1f" [expr $Id * 100]]} } else { set AccessProt [string toupper [InterrogeContigAndProt $Nom Protein Access]] if {$AccessProt != ""} { set MethodTxt "Contig" set AccessProtTxt $AccessProt set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProtTxt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LengthProtTxt [TailleDeLaProt_PageInfo $PageInfoProt] set OrgaProtTxt [join [LesOrgasDeLaPage_PageInfo $PageInfoProt] " ; "] set AccessContTxt [string toupper [InterrogeContigAndProt $Nom Contig Access]] set OrgaContTxt [InterrogeContigAndProt $Nom Contig Organisme] set Id [InterrogeContigAndProt $Nom Contig Identity ] if {$Id != ""} {set PID1Txt [format "%.1f" [expr $Id * 100]]} set Id [InterrogeContigAndProt $Nom Protein Identity ] if {$Id != ""} {set PID2Txt [format "%.1f" [expr $Id * 100]]} } } } set GPOFuncTxt "" set GPOProcTxt "" set GPOCompTxt "" foreach Type [list "function" "process" "component"] { set LeTexte {} foreach GO [AskGOAnalyse $FileGOXML Methode GPO Type $Type LesGO] { set Def [AskGOAnalyse $FileGOXML Type $Type GO $GO Definition] lappend LeTexte $Def } if {$Type == "function" } {set GPOFuncTxt [join $LeTexte " ; "]} if {$Type == "process" } {set GPOProcTxt [join $LeTexte " ; "]} if {$Type == "component"} {set GPOCompTxt [join $LeTexte " ; "]} } return [list $Nom $AccessIni $Cluster $GeneNameTxt $MeanDefTxt $GPOFuncTxt $GPOProcTxt $GPOCompTxt $MethodTxt $AccessProtTxt $DefProtTxt $LengthProtTxt $OrgaProtTxt $AccessmRNATxt $DefmRNATxt $LengthmRNATxt $OrgamRNATxt $AccessContTxt $OrgaContTxt $PID1Txt $PID2Txt] } proc FichierBlastPDuPAB {Nom} { global RepertoireDuGenome return "$RepertoireDuGenome/blastp/$Nom" } proc FichierBlastReduit {FichierBlast NewFichierBlast {EnFonctionDe Expect} {SeuilOuValeurs 0.001} {Keep ""}} { #EnFonctionDe -> # LesBIdToKeep # LesBIdToEliminate # LesSegmentsDesBIdToKeep # LesAccessToKeep # LesAccessToEliminate # LesOrgaToKeep # LesOrgaToEliminate # LesmRNAsToKeep # LesmRNAsToEliminate # SensToKeep # SensToEliminate # Expect # Score # JusteLePremierAlignementDesSubjects # LesRegionsToEliminate (Elimination des segments possedant ces regions) # LesRegionsToKeep (Segments possedant les regions a conserver) # NbSubjectMax # NbAliMax # TailleAlignementMin # TailleAlignementMax # Positives # PositivesWithoutFilter # Identity # IdentityWithoutFilter # NbPositivesSurTailleQuery # NbPositivesSurTailleQueryWithoutFilter # RegionsAligneesSurRegionsAlignables # RegionsAligneesSurRegionsDansAlignement # RegionsAligneesSurRegionsDansAlignementSubject # RegionsAligneesSurTailleQuery # RegionsAligneesSurTailleSubject # RegionsAligneesSurTailleQueryDansLeMeilleurDesSens # RegionsAligneesSurTailleSubjectDansLeMeilleurDesSens set FichierTmp "[TmpFile].reduceblast" if {$FichierBlast != $NewFichierBlast} { if {[file exists $NewFichierBlast]} { if {$Keep == ""} { #if {[OuiOuNon "$NewFichierBlast exists, Would you want to conserv it?"]} {set Keep 1} else {set Keep 0} set Keep 0 } if {$Keep == 1 } {return} File delete -force $NewFichierBlast } } set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] set LesBId {} foreach LeSubject [LaSelectionDesSegmentsDuBlast $FichierBlast $EnFonctionDe $SeuilOuValeurs] { set BId [lindex $LeSubject 0] lappend LesBId $BId set ExpectDeRef 1e200 set ScoreDeRef 0 set LesSegments [lindex $LeSubject 1] set TabTmp($BId) $LesSegments foreach Segment $LesSegments { set TabTmp($BId,$Segment) 1 set Score [AskBlast $FichierBlast BanqueId $BId Segment $Segment Score ] set Expect [AskBlast $FichierBlast BanqueId $BId Segment $Segment Expect] scan $Score "%f" Score if {$Expect < $ExpectDeRef} {set ExpectDeRef $Expect} if {$ScoreDeRef < $Score } {set ScoreDeRef $Score } } set TabTmp($BId,Score) $ScoreDeRef set TabTmp($BId,Expect) $ExpectDeRef } set F [open $FichierBlast] set LeTexte {} while {[gets $F Ligne]>=0} { lappend LeTexte $Ligne if {$LesBId == {} && [regexp -nocase "^Searching......." $Ligne]} {break} if {[regexp -nocase "^Sequences producing significant" $Ligne] } {break} } close $F AppendAuFichier $FichierTmp "[join $LeTexte "\n"]\n" if {$LesBId == {}} { AppendAuFichier $FichierTmp "\n***** No hits found ******\n" } else { set LeTexte {} foreach BId $LesBId { set Access [AskBlast $FichierBlast BanqueId $BId Access] set Definition [AskBlast $FichierBlast BanqueId $BId Definition] set Score [set TabTmp($BId,Score)] set Expect [set TabTmp($BId,Expect)] set Entete "$BId $Access $Definition" if {[string length $Entete] < 67} { set Taille [string length $Entete] set nDiff [expr 67 - $Taille] append Entete [string repeat " " $nDiff] } else { set Entete [string range $Entete 0 66] } set ScoreEtExpect [format " %5s %-6s" $Score $Expect] append Entete $ScoreEtExpect lappend LeTexte $Entete } AppendAuFichier $FichierTmp [join $LeTexte "\n"] set LeTexte {} foreach BId $LesBId { set Access [AskBlast $FichierBlast BanqueId $BId Access] set Definition [AskBlast $FichierBlast BanqueId $BId Definition] set Taille [AskBlast $FichierBlast BanqueId $BId Taille] set Description "\n>$BId $Access $Definition" set AiJeDejaEcris 0 while {$Description != ""} { if {$AiJeDejaEcris} {set Description " $Description"} set n [string length $Description] if {$n < 80} { lappend LeTexte "$Description" set Description "" } else { lappend LeTexte [string range $Description 0 80] set Description [string range $Description 81 end] } set AiJeDejaEcris 1 } lappend LeTexte " Length = $Taille\n" if {![info exists TabTmp($BId)]} {continue} foreach Seg [set TabTmp($BId)] { lappend LeTexte [AskBlast $FichierBlast BanqueId $BId Segment $Seg AlignBrut] } } AppendAuFichier $FichierTmp [join $LeTexte "\n"] } if {[info exists TabTmp]} {unset TabTmp} AskBlast unsetfile $FichierBlast set F [open $FichierBlast] set LeTexte {} set SuisJeSurLaFinDuBlast 0 while {[gets $F Ligne]>=0} { if {[regexp -nocase "^ Database: " $Ligne]} {set SuisJeSurLaFinDuBlast 1} if {$SuisJeSurLaFinDuBlast} {lappend LeTexte $Ligne} } close $F AppendAuFichier $FichierTmp [join $LeTexte "\n"] File rename -force $FichierTmp $NewFichierBlast return $NewFichierBlast } proc FichierBlastReduitPourTous {RepBlast RepBlastOut {EnFonctionDe Expect} {SeuilOuValeurs 0.001} {Keep ""}} { if {$Keep == ""} {if {[OuiOuNon "if some files exists in $RepBlastOut, Would you want to conserv them?"]} {set Keep 1} else {set Keep 0}} if {![file exists $RepBlastOut]} {File mkdir $RepBlastOut} foreach File [glob -nocomplain "$RepBlast/*"] { if {![file exists $File]} {continue} Espionne $File set NameFile [file tail $File] set FileNew "$RepBlastOut/$NameFile" FichierBlastReduit $File $FileNew $EnFonctionDe $SeuilOuValeurs $Keep } return "" } proc FichierBoxLocalisation {{NameFileLoc BoxLocalisation_Human} {NameRepBlast blastnhuman} {ExpectMax 0.001} {NbSbjctMax 250}} { global RepertoireDuGenome set RepLocHuman "[HumanGenomeDir]/Localisation" set FichierContigs "$RepLocHuman/seq_contig.md" if {![file exists $FichierContigs]} { Espionne "$FichierContigs does not exist" return "" } set FichierBandesCytos "$RepLocHuman/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set RepLoc "$RepertoireDuGenome/Localisation" if {![file exists $RepLoc]} {File mkdir "$RepLoc"} set FileLoc "$RepertoireDuGenome/Localisation/$NameFileLoc" set RepBlast "$RepertoireDuGenome/$NameRepBlast" ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos ChargeContigsDesChromosomes Contigs $FichierContigs set TailleContig 100000 set LesNoms [ListeDesPABs] if {[file exists $FileLoc]} { if {[OuiOuNon "$FileLoc exists.\nIf the file is not finished would you want to continue?"]} { set F [open $FileLoc] while {[gets $F Ligne]>=0} { scan $Ligne "%s" Nom if {[info exists TabTmp($Nom)]} {continue} set TabTmp($Nom) 1 } close $F set LesNoms {} foreach Nom [ListeDesPABs] { if {[info exists TabTmp($Nom)]} {continue} lappend LesNoms $Nom } if {[info exists TabTmp]} {unset TabTmp} } } foreach Nom $LesNoms { set FichierBlastGenome "$RepBlast/$Nom" if {![file exists $FichierBlastGenome]} {AppendAuFichier $FileLoc [list $Nom NoBlastFile];continue} if {[info exists TabBlast]} {unset TabBlast} DepouilleLeBlast TabBlast $FichierBlastGenome $ExpectMax $NbSbjctMax set NbSubjectDansBlast [set TabBlast(NbSubject)] if {![info exists TabBlast(NbSubject)]} {AppendAuFichier $FileLoc [list $Nom NoLoc];continue} if {[set TabBlast(NbSubject)] == 0} {AppendAuFichier $FileLoc [list $Nom NoLoc];continue} ### Definition des variables de references pour definir la monolocalisation####### set ContigDeRef [set TabBlast(1)] set LeContigDeRef [LeContig $ContigDeRef] set ChromDeRef [lindex $LeContigDeRef 0] set AccessDeRef [lindex $LeContigDeRef 1] set NbFragment [lindex $LeContigDeRef 3] set BorneFragment [expr $NbFragment*$TailleContig] set ScoreDeRef [set TabBlast($ContigDeRef,1,Score) ] regexp {^([e0-9\.\+]*) bits} $ScoreDeRef tmp ScoreDeRef set ExpectDeRef [set TabBlast($ContigDeRef,1,Expect)] set DQDeRef [set TabBlast($ContigDeRef,1,DQ)] set FQDeRef [set TabBlast($ContigDeRef,1,FQ)] set DSDeRef [expr [set TabBlast($ContigDeRef,1,DS)] + $BorneFragment] set FSDeRef [expr [set TabBlast($ContigDeRef,1,FS)] + $BorneFragment] if {$FSDeRef < $DSDeRef} {set tmp $FSDeRef;set FSDeRef $DSDeRef;set DSDeRef $tmp} ##########Determination de la monolocalisation################################# set LesSubjectsPoly {} set ListePoly {} set ListeMayBe {} set NbSubjct 0 set LesContigs {} set AiJeDejaVuLaRef 0 for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set Contig [set TabBlast($i)] set Expect [set TabBlast($Contig,1,Expect)] if {$ExpectMax < $Expect} {continue} incr NbSubjct if {$NbSbjctMax <= $NbSubjct} {break} set Score [set TabBlast($Contig,1,Score)] lappend LesContigs $Contig set LeContig [LeContig $Contig] set Access [lindex $LeContig 1] set NbFragment [lindex $LeContig 3] if {![info exists TabBlast($Access,ExpectDeRef)]} {set TabBlast($Access,ExpectDeRef) $Expect} if {![info exists TabBlast($Access,ScoreDeRef) ]} {set TabBlast($Access,ScoreDeRef) $Score} set BorneFragment [expr $NbFragment*$TailleContig] set Score [set TabBlast($Contig,1,Score) ] regexp {^([e0-9\.\+]*) bits} $Score tmp Score set DQ [set TabBlast($Contig,1,DQ) ] set FQ [set TabBlast($Contig,1,FQ) ] set DS [expr [set TabBlast($Contig,1,DS)] + $BorneFragment] set FS [expr [set TabBlast($Contig,1,FS)] + $BorneFragment] if {$FS < $DS} {set tmp $FS;set FS $DS;set DS $tmp} if {$Access == $AccessDeRef} { if { $ExpectDeRef <= $Expect && $ScoreDeRef <= $Score && $DQ == $DQDeRef && $FQ == $FQDeRef } { if { $AiJeDejaVuLaRef && $DSDeRef != $DS && $FSDeRef != $FS} { lappend ListePoly $Access lappend LesSubjectsPoly $i } if { !$AiJeDejaVuLaRef && $DSDeRef == $DS && $FSDeRef == $FS} { lappend ListePoly $Access lappend LesSubjectsPoly $i set AiJeDejaVuLaRef 1 } } } else { if {$ExpectDeRef <= $Expect && $ScoreDeRef <= $Score} { lappend ListePoly $Access lappend LesSubjectsPoly $i } else { lappend ListeMayBe $Access } } } set nPoly [llength $ListePoly] set nMayBe [llength $ListeMayBe] if {$nPoly == 1 && $nMayBe == 0} { set InfoLocalisation "MonoLoc" } elseif {$nPoly == 1 && $nMayBe != 0} { set InfoLocalisation "MayBePolyLoc" } elseif {1 < $nPoly} { set InfoLocalisation "PolyLoc" } elseif {$nPoly == 0 && $nMayBe == 0} { set InfoLocalisation "NoLoc" } if {$InfoLocalisation == "NoLoc"} {AppendAuFichier $FileLoc [list $Nom NoLoc];continue} ############################################################## if {[info exists TabTmp]} {unset TabTmp} set LesLocalisations {} set i 0 foreach Contig $LesContigs { incr i set LeContig [LeContig $Contig] set Chromosome [lindex $LeContig 0] set Access [lindex $LeContig 1] set Fragment [lindex $LeContig 2] set NbFragment [lindex $LeContig 3] set BorneFragment [expr $NbFragment*$TailleContig] set ExpectDeRef [set TabBlast($Access,ExpectDeRef)] set ScoreDeRef [set TabBlast($Access,ScoreDeRef)] regexp {^([e0-9\.\+]*) bits} $ScoreDeRef tmp ScoreDeRef set NbSegment [set TabBlast($Contig,NbSegment)] for {set j 1} {$j <= $NbSegment} {incr j} { set PId [PourcentageDIdentiteDuSegmentDeLId_TabBlast TabBlast $Contig $j] set Expect [set TabBlast($Contig,$j,Expect)] if {$ExpectMax < $Expect} {continue} set Info "" if {($InfoLocalisation == "MonoLoc" || $InfoLocalisation == "MayBePolyLoc") && $i == 1 && $j == 1} { set Info "BestLoc" } elseif { $InfoLocalisation == "PolyLoc" && [regexp $i [join $LesSubjectsPoly " "]] && $j == 1} { set Info "BestPolyLoc" } set Score [set TabBlast($Contig,$j,Score) ] regexp {^([e0-9\.\+]*) bits} $Score tmp Score set Orientation [set TabBlast($Contig,$j,Orientation)] set Sens [SensDeLaRegion $Orientation] set DQ [set TabBlast($Contig,$j,DQ) ] set FQ [set TabBlast($Contig,$j,FQ) ] if {$FQ < $DQ} {set tmp $FQ;set FQ $DQ;set DQ $tmp} set DS [expr [set TabBlast($Contig,$j,DS)] + $BorneFragment] set FS [expr [set TabBlast($Contig,$j,FS)] + $BorneFragment] if {$FS < $DS} {set tmp $FS;set FS $DS;set DS $tmp} if {[info exists TabTmp($DQ,$FQ,$DS,$FS)]} {continue} set TabTmp($DQ,$FQ,$DS,$FS) 1 set LesBandesCytologiques [LesBandesCytologiquesDeLaLocalisation $Access $DS $FS ] set LesCoordonnees [CoordonneesSurChromosome $Access $DS $FS $Sens] set DSurChr [lindex $LesCoordonnees 1] set FSurChr [lindex $LesCoordonnees 2] set SensSurChr [lindex $LesCoordonnees 3] lappend LesLocalisations [list $Nom $InfoLocalisation $ExpectDeRef $Expect $ScoreDeRef $Score [format "%.2f" $PId] $DQ $FQ $Chromosome $DSurChr $FSurChr $SensSurChr $Access $Fragment $DS $FS $Orientation $Sens [join $LesBandesCytologiques " "] $Info] } } foreach Loc [lsort -index 9 [lsort -index 13 [lsort -index 4 -real -decreasing [lsort -integer -index 7 [lsort -integer -index 8 $LesLocalisations]]]]] { Espionne $Loc AppendAuFichier $FileLoc [join $Loc "\t"] } } return $FileLoc } proc FichierCaracteristiquesClustersFusionnesParDistanceDPC {{SeuilDistance 200}} { set Fichier "[RepertoireDuGenome]/fiches/caracteristiques_clXHda_fusionnnes_DistanceDPC$SeuilDistance" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_ClustersXHda" set LesInfos {} set NbDoublons 0 foreach Cl1 [O2C2O LesClusters] { foreach Cl2 [O2C2O LesClusters] { set LInfo {} if {[info exists TabTmp($Cl1,$Cl2)] || [info exists TabTmp($Cl2,$Cl1)]} {continue} if {$Cl1 == $Cl2} {continue} set TabTmp($Cl1,$Cl2) 1 set TabTmp($Cl2,$Cl1) 1 set Dist [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 Distance] if {$Dist > $SeuilDistance} {continue} set Dist [format "%.1f" $Dist] incr NbDoublons set NbCommonOp [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 NbOperonsCommuns] Espionne "$Cl1\t$Cl2\t$Dist\t$NbCommonOp" lappend LesInfos "$Cl1\t$Cl2\t$Dist\t$NbCommonOp" foreach Cluster [list $Cl1 $Cl2] { set TCl [O2C2O Cluster $Cluster TailleCluster] set NbOpCl [O2C2O Cluster $Cluster NbOperonsDansCluster] set PAllOrga [O2C2O Cluster $Cluster Categorie AllOrganism Presence] set POrgasInt [O2C2O Cluster $Cluster Categorie OrganismeInteressant Presence] set PBact [O2C2O Cluster $Cluster Categorie Bacteria Presence] set PFirm [O2C2O Cluster $Cluster Categorie Firmicutes Presence] set PProteo [O2C2O Cluster $Cluster Categorie Proteobacteria Presence] set PArchaea [O2C2O Cluster $Cluster Categorie Archaea Presence] set PEu [O2C2O Cluster $Cluster Categorie Eukaryota Presence] set Info "$Cluster\t$TCl\t$NbOpCl\t$PAllOrga\t$POrgasInt\t$PBact\t$PFirm\t$PProteo\t$PArchaea\t$PEu" foreach Def [InterrogeGeneOntology $FichierGO Groupe $Cluster Type "process" LesDefinitions] {append Info "\t$Def"} Espionne $Info lappend LesInfos $Info } } } Espionne $NbDoublons Sauve [join $LesInfos "\n"] dans $Fichier return } proc FichierCategoriesPhylogenetiques {{LesOrganismes ""}} { global RepertoireDuGenome set LeTexte {} if {$LesOrganismes == {}} {set LesOrganismes [LesGenomesComplets]} foreach Organisme $LesOrganismes { set LOrga {} set OrgaCourt [Glossaire $Organisme Court] set OC [OCduOS $Organisme] if {$OC == "ClassUnknown" && $Organisme == "Buchnera sp."} {set OC [OCduOS "Buchnera aphidicola"]} regsub "\.$" $OC "" OC regsub -all "; " $OC ";" OC set LesTaxons [split $OC ";"] lappend LOrga $Organisme lappend LOrga $OrgaCourt foreach Taxon $LesTaxons {lappend LOrga $Taxon} if {[FamiliarOrganism $Organisme]} {lappend LOrga "OrganismeInteressant"} lappend LeTexte [join $LOrga "\t"] } EspionneL $LeTexte set Fichier "$RepertoireDuGenome/fiches/categories_phylogenetiques" Sauve [join $LeTexte "\n"] dans $Fichier return $Fichier } proc FichierChiffresMaskingDesClusters_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" if {![file exists $Fichier]} {return} set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] set FichierOut "[RepertoireDuGenome]/PourTL/ChiffresMaskingDesClusters" set Tab(All,LesNoms) $LesNoms set Tab(All,NbSeqTot) 0 set Tab(All,NbSeqContig) 0 set Tab(All,NbSeqmRNA) 0 set Tab(All,NbSeqNoProt) 0 set Tab(All,TailleSeqTot) 0 set Tab(All,TailleSeqContig) 0 set Tab(All,TailleSeqmRNA) 0 set Tab(All,TailleSeqNoProt) 0 foreach Etat [InterrogeBilanMasking LesEtats] { set Tab(All,$Etat,NbSeqTot) 0 set Tab(All,$Etat,NbSeqTot50) 0 set Tab(All,$Etat,NbSeqTot90) 0 set Tab(All,$Etat,NbRepeatTot) 0 set Tab(All,$Etat,PMaskingTot) 0 set Tab(All,$Etat,NbSeqmRNA) 0 set Tab(All,$Etat,NbSeqmRNA50) 0 set Tab(All,$Etat,NbSeqmRNA90) 0 set Tab(All,$Etat,NbRepeatmRNA) 0 set Tab(All,$Etat,PMaskingmRNA) 0 set Tab(All,$Etat,NbSeqContig) 0 set Tab(All,$Etat,NbSeqContig50) 0 set Tab(All,$Etat,NbSeqContig90) 0 set Tab(All,$Etat,NbRepeatContig) 0 set Tab(All,$Etat,PMaskingContig) 0 set Tab(All,$Etat,NbSeqNoProt) 0 set Tab(All,$Etat,NbSeqNoProt50) 0 set Tab(All,$Etat,NbSeqNoProt90) 0 set Tab(All,$Etat,NbRepeatNoProt) 0 set Tab(All,$Etat,PMaskingNoProt) 0 } foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {![info exists Tab($Cluster,LesNoms)]} { Espionne "Cluster $Cluster" lappend LesClusters $Cluster set Tab($Cluster,LesNoms) {} set Tab($Cluster,NbSeqTot) 0 set Tab($Cluster,NbSeqContig) 0 set Tab($Cluster,NbSeqmRNA) 0 set Tab($Cluster,NbSeqNoProt) 0 set Tab($Cluster,TailleSeqTot) 0 set Tab($Cluster,TailleSeqContig) 0 set Tab($Cluster,TailleSeqmRNA) 0 set Tab($Cluster,TailleSeqNoProt) 0 foreach Etat [InterrogeBilanMasking LesEtats] { set Tab($Cluster,$Etat,NbSeqTot) 0 set Tab($Cluster,$Etat,NbSeqTot50) 0 set Tab($Cluster,$Etat,NbSeqTot90) 0 set Tab($Cluster,$Etat,NbRepeatTot) 0 set Tab($Cluster,$Etat,PMaskingTot) 0 set Tab($Cluster,$Etat,NbSeqmRNA) 0 set Tab($Cluster,$Etat,NbSeqmRNA50) 0 set Tab($Cluster,$Etat,NbSeqmRNA90) 0 set Tab($Cluster,$Etat,NbRepeatmRNA) 0 set Tab($Cluster,$Etat,PMaskingmRNA) 0 set Tab($Cluster,$Etat,NbSeqContig) 0 set Tab($Cluster,$Etat,NbSeqContig50) 0 set Tab($Cluster,$Etat,NbSeqContig90) 0 set Tab($Cluster,$Etat,NbRepeatContig) 0 set Tab($Cluster,$Etat,PMaskingContig) 0 set Tab($Cluster,$Etat,NbSeqNoProt) 0 set Tab($Cluster,$Etat,NbSeqNoProt50) 0 set Tab($Cluster,$Etat,NbSeqNoProt90) 0 set Tab($Cluster,$Etat,NbRepeatNoProt) 0 set Tab($Cluster,$Etat,PMaskingNoProt) 0 } } lappend Tab($Cluster,LesNoms) $Nom set TailleBoite [string length [QueLaSequenceDuTFA "[RepertoireDuGenome]/nuctfa/$Nom"]] incr Tab($Cluster,TailleSeqTot) $TailleBoite incr Tab($Cluster,NbSeqTot) incr Tab(All,TailleSeqTot) $TailleBoite incr Tab(All,NbSeqTot) foreach Etat [InterrogeBilanMasking $Nom LesEtats] { set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] if {$P == "" || $P <= 0} {continue} set n [llength [InterrogeBilanMasking $Nom Etat $Etat LesRepeats]] set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] incr Tab($Cluster,$Etat,NbSeqTot) incr Tab($Cluster,$Etat,NbRepeatTot) $n set Tab($Cluster,$Etat,PMaskingTot) [expr [set Tab($Cluster,$Etat,PMaskingTot)] + $P] if {50 <= $P} {incr Tab($Cluster,$Etat,NbSeqTot50)} if {90 <= $P} {incr Tab($Cluster,$Etat,NbSeqTot90)} incr Tab(All,$Etat,NbSeqTot) incr Tab(All,$Etat,NbRepeatTot) $n if {50 <= $P} {incr Tab(All,$Etat,NbSeqTot50)} if {90 <= $P} {incr Tab(All,$Etat,NbSeqTot90)} set Tab(All,$Etat,PMaskingTot) [expr [set Tab($Cluster,$Etat,PMaskingTot)] + $P] } if {[InterrogeProtAndmRNAChoisis $Nom SeqChoisie] == "SeqOK"} { incr Tab($Cluster,NbSeqmRNA) incr Tab($Cluster,TailleSeqmRNA) $TailleBoite incr Tab(All,NbSeqmRNA) incr Tab(All,TailleSeqmRNA) $TailleBoite foreach Etat [InterrogeBilanMasking $Nom LesEtats] { set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] if {$P == "" || $P <= 0} {continue} set n [llength [InterrogeBilanMasking $Nom Etat $Etat LesRepeats]] set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] incr Tab($Cluster,$Etat,NbSeqmRNA) incr Tab($Cluster,$Etat,NbRepeatmRNA) $n set Tab($Cluster,$Etat,PMaskingmRNA) [expr [set Tab($Cluster,$Etat,PMaskingmRNA)] + $P] if {50 <= $P} {incr Tab($Cluster,$Etat,NbSeqmRNA50)} if {90 <= $P} {incr Tab($Cluster,$Etat,NbSeqmRNA90)} incr Tab(All,$Etat,NbSeqmRNA) if {50 <= $P} {incr Tab(All,$Etat,NbSeqmRNA50)} if {90 <= $P} {incr Tab(All,$Etat,NbSeqmRNA90)} incr Tab(All,$Etat,NbRepeatmRNA) $n set Tab(All,$Etat,PMaskingmRNA) [expr [set Tab($Cluster,$Etat,PMaskingmRNA)] + $P] } } elseif {[InterrogeProtAndContigChoisis $Nom SeqChoisie] == "SeqOK"} { incr Tab($Cluster,NbSeqContig) incr Tab($Cluster,TailleSeqContig) $TailleBoite incr Tab(All,NbSeqContig) incr Tab(All,TailleSeqContig) $TailleBoite foreach Etat [InterrogeBilanMasking $Nom LesEtats] { set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] if {$P == "" || $P <= 0} {continue} set n [llength [InterrogeBilanMasking $Nom Etat $Etat LesRepeats]] set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] incr Tab($Cluster,$Etat,NbSeqContig) incr Tab($Cluster,$Etat,NbRepeatContig) $n set Tab($Cluster,$Etat,PMaskingContig) [expr [set Tab($Cluster,$Etat,PMaskingContig)] + $P] if {50 <= $P} {incr Tab($Cluster,$Etat,NbSeqContig50)} if {90 <= $P} {incr Tab($Cluster,$Etat,NbSeqContig90)} incr Tab(All,$Etat,NbSeqContig) if {50 <= $P} {incr Tab(All,$Etat,NbSeqContig50)} if {90 <= $P} {incr Tab(All,$Etat,NbSeqContig90)} incr Tab(All,$Etat,NbRepeatContig) $n set Tab(All,$Etat,PMaskingContig) [expr [set Tab($Cluster,$Etat,PMaskingContig)] + $P] } } else { incr Tab($Cluster,NbSeqNoProt) incr Tab($Cluster,TailleSeqNoProt) $TailleBoite incr Tab(All,NbSeqNoProt) incr Tab(All,TailleSeqNoProt) $TailleBoite foreach Etat [InterrogeBilanMasking $Nom LesEtats] { set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] if {$P == "" || $P <= 0} {continue} set n [llength [InterrogeBilanMasking $Nom Etat $Etat LesRepeats]] set P [InterrogeBilanMasking $Nom Etat $Etat PMasked] incr Tab($Cluster,$Etat,NbSeqNoProt) incr Tab($Cluster,$Etat,NbRepeatNoProt) $n set Tab($Cluster,$Etat,PMaskingNoProt) [expr [set Tab($Cluster,$Etat,PMaskingNoProt)] + $P] if {50 <= $P} {incr Tab($Cluster,$Etat,NbSeqNoProt50)} if {90 <= $P} {incr Tab($Cluster,$Etat,NbSeqNoProt90)} incr Tab(All,$Etat,NbSeqNoProt) if {50 <= $P} {incr Tab(All,$Etat,NbSeqNoProt50)} if {90 <= $P} {incr Tab(All,$Etat,NbSeqNoProt90)} incr Tab(All,$Etat,NbRepeatNoProt) $n set Tab(All,$Etat,PMaskingNoProt) [expr [set Tab($Cluster,$Etat,PMaskingNoProt)] + $P] } } } set LesInfos {} lappend LesClusters "All" foreach Cluster $LesClusters { Espionne $Cluster set Type "mRNA/Prot" set NbSeq [set Tab($Cluster,NbSeqmRNA)] set Taille [expr [set Tab($Cluster,TailleSeqmRNA)] * 1.0 / $NbSeq] set LInfo [list $Cluster $Type $NbSeq $Taille] foreach Etat [InterrogeBilanMasking LesEtats] { set NbSeqM [set Tab($Cluster,$Etat,NbSeqmRNA)] set NbSeqM50 [set Tab($Cluster,$Etat,NbSeqmRNA50)] set NbSeqM90 [set Tab($Cluster,$Etat,NbSeqmRNA90)] if {$NbSeqM == 0} {lappend LInfo $Etat 0 0 0 0 0;continue} set NbRepeatMoyen [expr [set Tab($Cluster,$Etat,NbRepeatmRNA)] * 1.0 / $NbSeqM] set PMasking [expr [set Tab($Cluster,$Etat,PMaskingmRNA)] * 1.0 / $NbSeqM] lappend LInfo $Etat $NbSeqM $NbSeqM50 $NbSeqM90 $NbRepeatMoyen $PMasking } lappend LesInfos [join $LInfo "\t"] set Type "Contig" set NbSeq [set Tab($Cluster,NbSeqContig)] set Taille [expr [set Tab($Cluster,TailleSeqContig)] * 1.0 / $NbSeq] set LInfo [list $Cluster $Type $NbSeq $Taille] foreach Etat [InterrogeBilanMasking LesEtats] { set NbSeqM [set Tab($Cluster,$Etat,NbSeqContig)] set NbSeqM50 [set Tab($Cluster,$Etat,NbSeqContig50)] set NbSeqM90 [set Tab($Cluster,$Etat,NbSeqContig90)] if {$NbSeqM == 0} {lappend LInfo $Etat 0 0 0 0 0;continue} set NbRepeatMoyen [expr [set Tab($Cluster,$Etat,NbRepeatContig)] * 1.0 / $NbSeqM] set PMasking [expr [set Tab($Cluster,$Etat,PMaskingContig)] * 1.0 / $NbSeqM] lappend LInfo $Etat $NbSeqM $NbSeqM50 $NbSeqM90 $NbRepeatMoyen $PMasking } lappend LesInfos [join $LInfo "\t"] set Type "NoProt" set NbSeq [set Tab($Cluster,NbSeqNoProt)] set Taille [expr [set Tab($Cluster,TailleSeqNoProt)] * 1.0 / $NbSeq] set LInfo [list $Cluster $Type $NbSeq $Taille] foreach Etat [InterrogeBilanMasking LesEtats] { set NbSeqM [set Tab($Cluster,$Etat,NbSeqNoProt)] set NbSeqM50 [set Tab($Cluster,$Etat,NbSeqNoProt50)] set NbSeqM90 [set Tab($Cluster,$Etat,NbSeqNoProt90)] if {$NbSeqM == 0} {lappend LInfo $Etat 0 0 0 0 0;continue} set NbRepeatMoyen [expr [set Tab($Cluster,$Etat,NbRepeatNoProt)] * 1.0 / $NbSeqM] set PMasking [expr [set Tab($Cluster,$Etat,PMaskingNoProt)] * 1.0 / $NbSeqM] lappend LInfo $Etat $NbSeqM $NbSeqM50 $NbSeqM90 $NbRepeatMoyen $PMasking } lappend LesInfos [join $LInfo "\t"] set Type "Tot" set NbSeq [set Tab($Cluster,NbSeqTot)] set Taille [expr [set Tab($Cluster,TailleSeqTot)] * 1.0 / $NbSeq] set LInfo [list $Cluster $Type $NbSeq $Taille] foreach Etat [InterrogeBilanMasking LesEtats] { set NbSeqM [set Tab($Cluster,$Etat,NbSeqTot)] set NbSeqM50 [set Tab($Cluster,$Etat,NbSeqTot50)] set NbSeqM90 [set Tab($Cluster,$Etat,NbSeqTot90)] if {$NbSeqM == 0} {lappend LInfo $Etat 0 0 0 0 0;continue} set NbRepeatMoyen [expr [set Tab($Cluster,$Etat,NbRepeatTot)] * 1.0 / $NbSeqM] set PMasking [expr [set Tab($Cluster,$Etat,PMaskingTot)] * 1.0 / $NbSeqM] lappend LInfo $Etat $NbSeqM $NbSeqM50 $NbSeqM90 $NbRepeatMoyen $PMasking } lappend LesInfos [join $LInfo "\t"] } EspionneL $LesInfos Sauve [join $LesInfos "\n"] dans $FichierOut return } proc FichierChiffresSurDensiteChromosomique_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierOUT "[RepertoireDuGenome]/PourTL/DensiteChromosomique" set FRepartGenes "[HumanGenomeDir]/Localisation/RepartitionDesGenes" set FRepartSeq "[RepertoireDuGenome]/Localisation/RepartitionSurGenome" if {![file exists $FRepartGenes] || ![file exists $FRepartSeq]} {return} set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" if {![file exists $Fichier]} {return} set LesClusters [lsort -unique [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters]] set LesNoms [lsort -unique [LesNoms $PABouNomsInteressantsouListeouFichier]] foreach Nom $LesNoms {set Tab($Nom) 1} set LeTexte {} set NbSeqTotAllCluster [llength $LesNoms] set NbGenesTot [llength [lsort -unique [InterrogeRepartitionSurGenome $FRepartGenes LesElements]]] foreach Chromosome [InterrogeRepartitionSurGenome $FRepartGenes LesChromosomes] { foreach TypeDeRegion [InterrogeRepartitionSurGenome $FRepartGenes Chromosome $Chromosome LesTypesDeRegion] { foreach Region [InterrogeRepartitionSurGenome $FRepartGenes Chromosome $Chromosome TypeDeRegion $TypeDeRegion LesRegions] { set NbGenes [InterrogeRepartitionSurGenome $FRepartGenes Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Region NbElements] set Taille [InterrogeRepartitionSurGenome $FRepartGenes Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Region Taille] set D [InterrogeRepartitionSurGenome $FRepartGenes Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Region Debut] set F [InterrogeRepartitionSurGenome $FRepartGenes Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Region Fin] set NbSeqAllCluster 0 set PGenes [expr $NbGenes * 1.0 / $NbGenesTot] set EspacesGenes 0 if {$NbGenes != 0} {set EspaceGenes [expr $Taille * 1.0 / $NbGenes]} foreach ClusterDeRef $LesClusters { set NbSeqTot [llength [InterrogeOrf2Cluster2Access2Def2Expression $Fichier Cluster $ClusterDeRef LesNoms]] set NbSeq 0 foreach Nom [InterrogeRepartitionSurGenome $FRepartSeq Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Region LesElements] { if {![info exists Tab($Nom)]} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {$Cluster != $ClusterDeRef} {continue} incr NbSeqAllCluster incr NbSeq } set PSeq 0 if {$NbSeqTot != 0} {set PSeq [expr $NbSeq * 1.0 / $NbSeqTot]} set EspaceSeq 0 if {$NbSeq != 0} {set EspaceSeq [expr $Taille * 1.0 / $NbSeq]} if {$NbSeqTot == 0 || $NbGenes == 0} { set Biais 0 } else { set Biais [expr $NbGenesTot * $NbSeq * 100.0 / ($NbSeqTot * $NbGenes * 1.0)] } Espionne "$ClusterDeRef\t$Chromosome\t$TypeDeRegion\t$Region\t$D\t$F\t$Taille\t$NbSeq\t$NbSeqTot\t$PSeq\t$EspaceSeq\t$NbGenes\t$NbGenesTot\t$PGenes\t$EspaceGenes\t$Biais" lappend LeTexte "$ClusterDeRef\t$Chromosome\t$TypeDeRegion\t$Region\t$D\t$F\t$Taille\t$NbSeq\t$NbSeqTot\t$PSeq\t$EspaceSeq\t$NbGenes\t$NbGenesTot\t$PGenes\t$EspaceGenes\t$Biais" } set PSeq 0 if {$NbSeqTotAllCluster != 0} {set PSeq [expr $NbSeqAllCluster * 1.0 / $NbSeqTotAllCluster]} set EspaceSeq 0 if {$NbSeqAllCluster != 0} {set EspaceSeq [expr $Taille * 1.0 / $NbSeqAllCluster]} if {$NbSeqTotAllCluster == 0 || $NbGenes == 0} { set Biais 0 } else { set Biais [expr $NbGenesTot * $NbSeqAllCluster * 100.0 / ($NbSeqTotAllCluster * $NbGenes * 1.0)] } Espionne "AllCluster\t$Chromosome\t$TypeDeRegion\t$Region\t$D\t$F\t$Taille\t$NbSeqAllCluster\t$NbSeqTotAllCluster\t$PSeq\t$EspaceSeq\t$NbGenes\t$NbGenesTot\t$PGenes\t$EspaceGenes\t$Biais" lappend LeTexte "AllCluster\t$Chromosome\t$TypeDeRegion\t$Region\t$D\t$F\t$Taille\t$NbSeqAllCluster\t$NbSeqTotAllCluster\t$PSeq\t$EspaceSeq\t$NbGenes\t$NbGenesTot\t$PGenes\t$EspaceGenes\t$Biais" } } } Sauve [join $LeTexte "\n"] dans $FichierOUT } proc FichierChiffresSurDomainesDesClusters_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants} {IdMinDesDomaines 0.75}} { set FichierOut "[RepertoireDuGenome]/PourTL/ChiffresDomainesDesClusters" set LesNoms [lsort -unique [LesNoms $PABouNomsInteressantsouListeouFichier]] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set N 0 set LesClusters {} foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {[InterrogeProtAndmRNAChoisis $Nom SeqChoisie] != "SeqOK" && [InterrogeProtAndContigChoisis $Nom SeqChoisie] != "SeqOK"} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {![info exists Tab($Cluster,R)]} { lappend LesClusters $Cluster set Tab($Cluster,R) 0 set Tab($Cluster,LesDomaines) {} } foreach LeDomaine [InterrogeDomaines $Nom LesDomaines] { set Id [lindex $LeDomaine end] if {$Id < $IdMinDesDomaines} {continue} set Type [lindex $LeDomaine 0 ] if {$Type == "FEATURE" } {continue} set Def [lindex $LeDomaine 2 ] if {$Def == "" } {continue} set Domaine [lindex $LeDomaine 1 ] if {[info exists TabDejaVu($Nom,$Domaine)]} {continue} set TabDejaVu($Nom,$Domaine) 1 set Tab($Domaine,Def) $Def if {![info exists Tab($Domaine,n)]} {set Tab($Domaine,n) 0} if {![info exists Tab($Cluster,$Domaine,r)]} { lappend Tab($Cluster,LesDomaines) $Domaine set Tab($Cluster,$Domaine,r) 0 } incr Tab($Domaine,n) incr Tab($Cluster,$Domaine,r) } incr Tab($Cluster,R) incr N } set LeTexte {} foreach Cluster $LesClusters { set R [set Tab($Cluster,R)] foreach Domaine [set Tab($Cluster,LesDomaines)] { set Def [set Tab($Domaine,Def)] set n [set Tab($Domaine,n)] set r [set Tab($Cluster,$Domaine,r)] set Zscore [ZScore $r $R $n $N] lappend LeTexte "$Cluster\t$Domaine\t$Def\t$r\t$R\t$n\t$N\t$Zscore" Espionne "$Cluster\t$Domaine\t$Def\t$r\t$R\t$n\t$N\t$Zscore" } } Sauve [join $LeTexte "\n"] dans $FichierOut return } proc FichierChiffresSurGODesClusters_AL {FichierGO FichierGOProteo FichierOut {NiveauGOMin 0} {ZscoreMin 0} {nMin 1}} { set LesNoms [ListeDesPABs] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set N 0 InterrogeOrf2Cluster2Access2Def2Expression unset InterrogeProteinesJumelles unset InterrogeGeneOntology unset Espionne "GO Projet" #Gene Ontology du projet#### foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} incr N #Espionne "$Cluster $Nom" if {![info exists Tab(Cluster,$Cluster,R) ]} { set Tab(Cluster,$Cluster,R) 0 set Tab(Cluster,$Cluster,LesGO) {} } incr Tab(Cluster,$Cluster,R) set LesGO {} foreach GO [lsort -unique [InterrogeGeneOntology $FichierGO $Nom LesGO]] { foreach Type [GODB GO $GO LesTypes] { set Tab($GO,Type) $Type set Niveau [lindex [lsort -integer [GODB Type $Type GO $GO LesNiveaux]] 0] if {$NiveauGOMin <= $Niveau} {lappend LesGO $GO} foreach GOAncetre [lsort -unique [InterrogeGeneOntology $FichierGO GO $GO LesAncetres]] { set Tab($GOAncetre,Type) $Type set Niveau [lindex [lsort -integer [GODB Type $Type GO $GOAncetre LesNiveaux]] 0] if {$NiveauGOMin <= $Niveau} {lappend LesGO $GOAncetre} } } } foreach GO [lsort -unique $LesGO] { if {![info exists Tab(GO,$GO,n) ]} {set Tab(GO,$GO,n) 0} if {![info exists Tab(GO,$GO,Cluster,$Cluster,r)]} { set Tab(GO,$GO,Cluster,$Cluster,r) 0 lappend Tab(Cluster,$Cluster,LesGO) $GO } incr Tab(GO,$GO,Cluster,$Cluster,r) incr Tab(GO,$GO,n) } } Espionne "GO Proteome humain" if {1} { #Gene Ontology du proteome humain##### set NProteo 0 foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { incr NProteo set LesGO {} foreach GO [lsort -unique [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO]] { foreach Type [GODB GO $GO LesTypes] { set Tab($GO,Type) $Type set Niveau [lindex [lsort -integer [GODB Type $Type GO $GO LesNiveaux]] 0] if {$NiveauGOMin <= $Niveau} {lappend LesGO $GO} foreach GOAncetre [lsort -unique [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres]] { set Niveau [lindex [lsort -integer [GODB Type $Type GO $GOAncetre LesNiveaux]] 0] set Tab($GOAncetre,Type) $Type if {$NiveauGOMin <= $Niveau} {lappend LesGO $GOAncetre} } } } foreach GO [lsort -unique $LesGO] { if {![info exists Tab(GO,$GO,nProteo)]} {set Tab(GO,$GO,nProteo) 0} incr Tab(GO,$GO,nProteo) } } } set LeTexte {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set R [set Tab(Cluster,$Cluster,R)] Espionne $Cluster set LesGO {} foreach GO [set Tab(Cluster,$Cluster,LesGO)] { set r [set Tab(GO,$GO,Cluster,$Cluster,r)] set n [set Tab(GO,$GO,n)] set Zscore [ZScore $r $R $n $N] if {$Zscore < $ZscoreMin || $n < $nMin} {continue} lappend LesGO $GO foreach Type [GODB GO $GO LesTypes] { set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set rSurR [expr $r * 1.0 / $R] set nSurN [expr $n * 1.0 / $N] set nMoinsr [expr $n - $r] set NMoinsR [expr $N - $R] set nMoinsrSurNMoinsR [expr $nMoinsr * 1.0 / $NMoinsR] if {1} { set ZscoreProteo 0 set nProteo 0 set nSurNProteo 0 set nMoinsrProteo 0 set NMoinsRProteo 0 set nMoinsrSurNMoinsRProteo 0 if {[info exists Tab(GO,$GO,nProteo)]} { set nProteo [set Tab(GO,$GO,nProteo)] set ZscoreProteo [ZScore $r $R $nProteo $NProteo] set nSurNProteo [expr $nProteo * 1.0 / $NProteo] set nMoinsrProteo [expr $nProteo - $r] set NMoinsRProteo [expr $NProteo - $R] set nMoinsrSurNMoinsRProteo [expr $nMoinsrProteo * 1.0 / $NMoinsRProteo] } set Ligne "$Cluster\t$Type\t$GO\t$r\t$R\t$rSurR\t$n\t$N\t$nSurN\t$nMoinsr\t$NMoinsR\t$nMoinsrSurNMoinsR\t$Zscore\t$nProteo\t$NProteo\t$nSurNProteo\t$nMoinsrProteo\t$NMoinsRProteo\t$nMoinsrSurNMoinsRProteo\t$ZscoreProteo\t$Def" } else { set Ligne "$Cluster\t$Type\t$GO\t$r\t$R\t$rSurR\t$n\t$N\t$nSurN\t$nMoinsr\t$NMoinsR\t$nMoinsrSurNMoinsR\t$Zscore\t$Def" } set Tab($GO,Ligne) $Ligne } } foreach GO $LesGO { set r [set Tab(GO,$GO,Cluster,$Cluster,r)] set EstCeQueJeSuisLAncetreDUnAutreGOEtMonEffectifProvientIlUniquementDeLui 0 foreach GO2 $LesGO { if {$GO == $GO2} {continue} set r2 [set Tab(GO,$GO2,Cluster,$Cluster,r)] if {[EstCeQueGO1EstUnParentDeGO2 $GO $GO2] && $r == $r2} { set EstCeQueJeSuisLAncetreDUnAutreGOEtMonEffectifProvientIlUniquementDeLui 1 } } set Ligne [set Tab($GO,Ligne)] if {$EstCeQueJeSuisLAncetreDUnAutreGOEtMonEffectifProvientIlUniquementDeLui} {set Ligne "$Ligne\tParent"} lappend LeTexte $Ligne #Espionne $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOut InterrogeOrf2Cluster2Access2Def2Expression unset InterrogeProteinesJumelles unset InterrogeGeneOntology unset return } proc FichierChiffresSurGODesClusters_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants} {NiveauGOMin 0} {ZscoreMin 1} {nMin 5}} { set FichierOut "[RepertoireDuGenome]/PourTL/ChiffresDesClustersSurGO.new" set LesNoms [lsort -unique [LesNoms $PABouNomsInteressantsouListeouFichier]] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" set FichierGOProteo "[RepertoireDuGenome]/../Ontology/GeneOntology_HUMAN" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set N 0 #Gene Ontology du projet#### foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {[InterrogeProtAndmRNAChoisis $Nom SeqChoisie] != "SeqOK" && [InterrogeProtAndContigChoisis $Nom SeqChoisie] != "SeqOK"} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} incr N #Espionne "$Cluster $Nom" if {![info exists Tab(Cluster,$Cluster,R)]} { set Tab(Cluster,$Cluster,R) 0 set Tab(Cluster,$Cluster,LesGO) {} } incr Tab(Cluster,$Cluster,R) set LesGO {} foreach GO [lsort -unique [EnterrerLesAncetresOntologiques [InterrogeGeneOntology $FichierGO $Nom LesGO]]] { set Type [Onto $GO Type] set Tab($GO,Type) $Type set Niveau [lindex [lsort -integer [Onto $Type $GO LesNiveaux]] 0] if {$NiveauGOMin <= $Niveau} {lappend LesGO $GO} foreach GOAncetre [TousLesAncetresOntologiques $Type $GO] { set Tab($GOAncetre,Type) $Type set Niveau [lindex [lsort -integer [Onto $Type $GOAncetre LesNiveaux]] 0] if {$NiveauGOMin <= $Niveau} {lappend LesGO $GOAncetre} } } foreach GO [lsort -unique $LesGO] { if {![info exists Tab(GO,$GO,n) ]} {set Tab(GO,$GO,n) 0} if {![info exists Tab(GO,$GO,Cluster,$Cluster,r)]} { set Tab(GO,$GO,Cluster,$Cluster,r) 0 lappend Tab(Cluster,$Cluster,LesGO) $GO } incr Tab(GO,$GO,Cluster,$Cluster,r) incr Tab(GO,$GO,n) } } if {1} { #Gene Ontology du proteome humain##### set NProteo 0 foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { incr NProteo set LesGO {} foreach GO [lsort -unique [EnterrerLesAncetresOntologiques [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO]]] { set Type [Onto $GO Type] set Tab($GO,Type) $Type set Niveau [lindex [lsort -integer [Onto $Type $GO LesNiveaux]] 0] if {$NiveauGOMin <= $Niveau} {lappend LesGO $GO} foreach GOAncetre [TousLesAncetresOntologiques $Type $GO] { set Niveau [lindex [lsort -integer [Onto $Type $GOAncetre LesNiveaux]] 0] set Tab($GOAncetre,Type) $Type if {$NiveauGOMin <= $Niveau} {lappend LesGO $GOAncetre} } } foreach GO [lsort -unique $LesGO] { if {![info exists Tab(GO,$GO,nProteo)]} {set Tab(GO,$GO,nProteo) 0} incr Tab(GO,$GO,nProteo) } } } set LeTexte {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set R [set Tab(Cluster,$Cluster,R)] Espionne $Cluster set LesGO {} foreach GO [set Tab(Cluster,$Cluster,LesGO)] { set r [set Tab(GO,$GO,Cluster,$Cluster,r)] set n [set Tab(GO,$GO,n)] set Zscore [ZScore $r $R $n $N] if {$Zscore < $ZscoreMin || $n < $nMin} {continue} lappend LesGO $GO set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set rSurR [expr $r * 1.0 / $R] set nSurN [expr $n * 1.0 / $N] set nMoinsr [expr $n - $r] set NMoinsR [expr $N - $R] set nMoinsrSurNMoinsR [expr $nMoinsr * 1.0 / $NMoinsR] if {1} { set ZscoreProteo 0 set nProteo 0 set nSurNProteo 0 set nMoinsrProteo 0 set NMoinsRProteo 0 set nMoinsrSurNMoinsRProteo 0 if {[info exists Tab(GO,$GO,nProteo)]} { set nProteo [set Tab(GO,$GO,nProteo)] set ZscoreProteo [ZScore $r $R $nProteo $NProteo] set nSurNProteo [expr $nProteo * 1.0 / $NProteo] set nMoinsrProteo [expr $nProteo - $r] set NMoinsRProteo [expr $NProteo - $R] set nMoinsrSurNMoinsRProteo [expr $nMoinsrProteo * 1.0 / $NMoinsRProteo] } set Ligne "$Cluster\t$Type\t$GO\t$r\t$R\t$rSurR\t$n\t$N\t$nSurN\t$nMoinsr\t$NMoinsR\t$nMoinsrSurNMoinsR\t$Zscore\t$nProteo\t$NProteo\t$nSurNProteo\t$nMoinsrProteo\t$NMoinsRProteo\t$nMoinsrSurNMoinsRProteo\t$ZscoreProteo\t$Def" } else { set Ligne "$Cluster\t$Type\t$GO\t$r\t$R\t$rSurR\t$n\t$N\t$nSurN\t$nMoinsr\t$NMoinsR\t$nMoinsrSurNMoinsR\t$Zscore\t$Def" } set Tab($GO,Ligne) $Ligne } foreach GO $LesGO { set r [set Tab(GO,$GO,Cluster,$Cluster,r)] set EstCeQueJeSuisLAncetreDUnAutreGOEtMonEffectifProvientIlUniquementDeLui 0 foreach GO2 $LesGO { if {$GO == $GO2} {continue} set r2 [set Tab(GO,$GO2,Cluster,$Cluster,r)] if {[EstCeQueGO1EstUnParentDeGO2 $GO $GO2] && $r == $r2} { set EstCeQueJeSuisLAncetreDUnAutreGOEtMonEffectifProvientIlUniquementDeLui 1 } } set Ligne [set Tab($GO,Ligne)] if {$EstCeQueJeSuisLAncetreDUnAutreGOEtMonEffectifProvientIlUniquementDeLui} {set Ligne "$Ligne\tParent"} lappend LeTexte $Ligne Espionne $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOut return } proc FichierChiffresSurLesProteinesTrouveesPourChaqueCluster {{PABouNomsInteressantsouListeouFichier PAB}} { set FichierOUT "[RepertoireDuGenome]/fiches/ChiffresSurLesProteinesTrouveesPourChaqueCluster" set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierIPO "[RepertoireDuGenome]/fiches/GeneOntology_prottfa" set FichierGPO "[RepertoireDuGenome]/fiches/GeneOntology" set NbSeq 0 set NbEST 0 set NbProtTot 0 set NbProtFrommRNA 0 set NbProtFrommRNAOK 0 set NbProtFrommRNANo 0 set NbProtFromContig 0 set NbProtTotUniques 0 set LesProteinesUniquesPourChaqueCluster {} foreach Nom [lsort -unique [LesNoms $PABouNomsInteressantsouListeouFichier]] { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] set Access [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Access] if {![info exists Tab($Cluster,NbSeq)]} { set Tab($Cluster,NbSeq) 0 set Tab($Cluster,NbEST) 0 set Tab($Cluster,NbProtTot) 0 set Tab($Cluster,NbProtFrommRNA) 0 set Tab($Cluster,NbProtFrommRNAOK) 0 set Tab($Cluster,NbProtFrommRNANo) 0 set Tab($Cluster,NbProtFromContig) 0 set Tab($Cluster,NbProtTotUniques) 0 set Tab($Cluster,NbProtWithGOTermsIPO) 0 set Tab($Cluster,NbGOTermsIPO) 0 set Tab($Cluster,NbProtWithGOTermsGPO) 0 set Tab($Cluster,NbGOTermsGPO) 0 } incr NbSeq incr Tab($Cluster,NbSeq) if {0} { set Info [PageInfo $Access est acc] Espionne "$Nom\t$Info" if {$Info != ""} { incr NbEST incr Tab($Cluster,NbEST) } } #On ne considere que les proteines# if {[InterrogeProtAndmRNAChoisis $Nom SeqChoisie] != "SeqOK" && [InterrogeProtAndContigChoisis $Nom SeqChoisie] != "SeqOK"} {continue} incr NbProtTot set LesJumeaux [lsort -unique [InterrogeProteinesJumelles $Nom LesProteinesJumelles]] if {![info exists TabDeJaVu($Nom)]} { set TabDeJaVu($Nom) 1 incr NbProtTotUniques foreach Jum $LesJumeaux {set TabDeJaVu($Jum) 1} } if {![info exists TabDeJaVu($Cluster,$Nom)]} { set TabDeJaVu($Cluster,$Nom) 1 lappend LesProteinesUniquesPourChaqueCluster $Nom incr Tab($Cluster,NbProtTotUniques) foreach Jum $LesJumeaux {set TabDeJaVu($Cluster,$Jum) 1} } incr Tab($Cluster,NbProtTot) if {[InterrogeProtAndmRNAChoisis $Nom SeqChoisie] == "SeqOK"} { incr NbProtFrommRNA if {[InterrogeProtAndmRNAChoisis $Nom InfoSeqChoisie] == ""} { incr Tab($Cluster,NbProtFrommRNAOK) incr NbProtFrommRNAOK } else { incr Tab($Cluster,NbProtFrommRNANo) incr NbProtFrommRNANo } incr Tab($Cluster,NbProtFrommRNA) } if {[InterrogeProtAndContigChoisis $Nom SeqChoisie] == "SeqOK"} { incr NbProtFromContig incr Tab($Cluster,NbProtFromContig) } } set NbGOTermsIPO 0 set NbProtWithGOTermsIPO 0 set NbGOTermsGPO 0 set NbProtWithGOTermsGPO 0 set Tab(LesTypes) {} foreach Nom $LesProteinesUniquesPourChaqueCluster { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] foreach Type [Onto LesTypes] { if {![info exists Tab($Type,NbProtWithGOTermsIPO) ]} {set Tab($Type,NbProtWithGOTermsIPO) 0} if {![info exists Tab($Cluster,$Type,NbProtWithGOTermsIPO)]} {set Tab($Cluster,$Type,NbProtWithGOTermsIPO) 0} if {![info exists Tab($Type,NbProtWithGOTermsGPO) ]} {set Tab($Type,NbProtWithGOTermsGPO) 0} if {![info exists Tab($Cluster,$Type,NbProtWithGOTermsGPO)]} {set Tab($Cluster,$Type,NbProtWithGOTermsGPO) 0} } set LesIPO [EnterrerLesAncetresOntologiques [InterrogeGeneOntology $FichierIPO $Nom LesGO]] if {$LesIPO != ""} { incr NbProtWithGOTermsIPO incr Tab($Cluster,NbProtWithGOTermsIPO) foreach IPO $LesIPO { set Type [Onto $IPO Type] if {![info exists Tab($Type,NbGOTermsIPO)]} {set Tab($Type,NbGOTermsIPO) 0} if {![info exists Tab($Cluster,$Type,NbGOTermsIPO)]} {set Tab($Cluster,$Type,NbGOTermsIPO) 0} incr NbGOTermsIPO incr Tab($Type,NbGOTermsIPO) incr Tab($Cluster,NbGOTermsIPO) incr Tab($Cluster,$Type,NbGOTermsIPO) } } foreach Type [lsort -unique [InterrogeGeneOntology $FichierIPO $Nom LesTypes]] { incr Tab($Type,NbProtWithGOTermsIPO) incr Tab($Cluster,$Type,NbProtWithGOTermsIPO) } set LesGPO [EnterrerLesAncetresOntologiques [InterrogeGeneOntology $FichierGPO $Nom LesGO]] if {$LesGPO != ""} { incr NbProtWithGOTermsGPO incr Tab($Cluster,NbProtWithGOTermsGPO) foreach GPO $LesGPO { set Type [Onto $GPO Type] if {![info exists Tab($Type,NbGOTermsGPO)]} {set Tab($Type,NbGOTermsGPO) 0} if {![info exists Tab($Cluster,$Type,NbGOTermsGPO)]} {set Tab($Cluster,$Type,NbGOTermsGPO) 0} incr NbGOTermsGPO incr Tab($Type,NbGOTermsGPO) incr Tab($Cluster,NbGOTermsGPO) incr Tab($Cluster,$Type,NbGOTermsGPO) } } foreach Type [lsort -unique [InterrogeGeneOntology $FichierGPO $Nom LesTypes]] { incr Tab($Type,NbProtWithGOTermsGPO) incr Tab($Cluster,$Type,NbProtWithGOTermsGPO) } } set LeTexte "" lappend LeTexte "NbSeq\t$NbSeq" lappend LeTexte "NbEST\t$NbEST" lappend LeTexte "NbProtTot\t$NbProtTot" lappend LeTexte "NbProtTot From mRNAorProt\t$NbProtFrommRNA" lappend LeTexte "NbProtTot From mRNAorProt OK\t$NbProtFrommRNAOK" lappend LeTexte "NbProtTot From mRNAorProt Warning\t$NbProtFrommRNANo" lappend LeTexte "NbProtTot From Contig\t$NbProtFromContig" lappend LeTexte "NbProtTot Uniques\t$NbProtTotUniques" lappend LeTexte "NbProtTot Uniques Avec IPO terms\t$NbProtWithGOTermsIPO" lappend LeTexte "NbProtTot Uniques Avec GPO terms\t$NbProtWithGOTermsGPO" lappend LeTexte "Nb IPO terms Tot\t$NbGOTermsIPO" lappend LeTexte "Nb GPO terms Tot\t$NbGOTermsGPO" foreach Type [Onto LesTypes] { lappend LeTexte "NbProt with $Type IPO terms\t[set Tab($Type,NbProtWithGOTermsIPO)]" lappend LeTexte "NbProt with $Type GPO terms\t[set Tab($Type,NbProtWithGOTermsGPO)]" lappend LeTexte "Nb $Type IPO terms\t[set Tab($Type,NbGOTermsIPO)]" lappend LeTexte "Nb $Type GPO terms\t[set Tab($Type,NbGOTermsGPO)]" } lappend LeTexte "" foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { lappend LeTexte "Cluster $Cluster" lappend LeTexte "NbSeq\t[set Tab($Cluster,NbSeq)]" lappend LeTexte "NbProtTot\t[set Tab($Cluster,NbProtTot)]" lappend LeTexte "NbProtTot From mRNAorProt\t[set Tab($Cluster,NbProtFrommRNA)]" lappend LeTexte "NbProtTot From mRNAorProt OK\t[set Tab($Cluster,NbProtFrommRNAOK)]" lappend LeTexte "NbProtTot From mRNAorProt Warning\t[set Tab($Cluster,NbProtFrommRNANo)]" lappend LeTexte "NbProtTot From Contig\t[set Tab($Cluster,NbProtFromContig)]" lappend LeTexte "NbProtTot Uniques\t[set Tab($Cluster,NbProtTotUniques)]" lappend LeTexte "NbProtTot Uniques Avec IPO Terms\t[set Tab($Cluster,NbProtWithGOTermsIPO)]" lappend LeTexte "NbProtTot Uniques Avec GPO Terms\t[set Tab($Cluster,NbProtWithGOTermsGPO)]" lappend LeTexte "Nb IPO terms Tot\t[set Tab($Cluster,NbGOTermsIPO)]" lappend LeTexte "Nb GPO terms Tot\t[set Tab($Cluster,NbGOTermsGPO)]" foreach Type [Onto LesTypes] { lappend LeTexte "NbProt with $Type IPO terms\t[set Tab($Cluster,$Type,NbProtWithGOTermsIPO)]" lappend LeTexte "NbProt with $Type GPO terms\t[set Tab($Cluster,$Type,NbProtWithGOTermsGPO)]" lappend LeTexte "Nb $Type IPO terms\t[set Tab($Cluster,$Type,NbGOTermsIPO)]" lappend LeTexte "Nb $Type GPO terms\t[set Tab($Cluster,$Type,NbGOTermsGPO)]" } lappend LeTexte "" } Sauve [join $LeTexte "\n"] dans $FichierOUT EspionneL $LeTexte return } proc FichierChiffresSurLesProteinesTrouveesPourChaqueCluster_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierOUT "[RepertoireDuGenome]/PourTL/ChiffresSurLesProteinesTrouveesPourChaqueCluster" set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierIPO "[RepertoireDuGenome]/fiches/GeneOntology_prottfa" set FichierGPO "[RepertoireDuGenome]/fiches/GeneOntology" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set NbSeq 0 set NbEST 0 set NbProtTot 0 set NbProtFrommRNA 0 set NbProtFrommRNAOK 0 set NbProtFrommRNANo 0 set NbProtFromContig 0 set NbProtTotUniques 0 set LesProteinesUniquesPourChaqueCluster {} foreach Nom [lsort -unique [LesNoms $PABouNomsInteressantsouListeouFichier]] { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] set Access [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Access] if {![info exists Tab($Cluster,NbSeq)]} { set Tab($Cluster,NbSeq) 0 set Tab($Cluster,NbEST) 0 set Tab($Cluster,NbProtTot) 0 set Tab($Cluster,NbProtFrommRNA) 0 set Tab($Cluster,NbProtFrommRNAOK) 0 set Tab($Cluster,NbProtFrommRNANo) 0 set Tab($Cluster,NbProtFromContig) 0 set Tab($Cluster,NbProtTotUniques) 0 set Tab($Cluster,NbProtWithGOTermsIPO) 0 set Tab($Cluster,NbGOTermsIPO) 0 set Tab($Cluster,NbProtWithGOTermsGPO) 0 set Tab($Cluster,NbGOTermsGPO) 0 } incr NbSeq incr Tab($Cluster,NbSeq) if {1} { set Info [PageInfo $Access est acc] Espionne "$Nom\t$Info" if {$Info != ""} { incr NbEST incr Tab($Cluster,NbEST) } } #On ne considere que les proteines# if {[InterrogeProtAndmRNAChoisis $Nom SeqChoisie] != "SeqOK" && [InterrogeProtAndContigChoisis $Nom SeqChoisie] != "SeqOK"} {continue} incr NbProtTot set LesJumeaux [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] if {![info exists TabDeJaVu($Nom)]} { set TabDeJaVu($Nom) 1 incr NbProtTotUniques foreach Jum $LesJumeaux {set TabDeJaVu($Jum) 1} } if {![info exists TabDeJaVu($Cluster,$Nom)]} { set TabDeJaVu($Cluster,$Nom) 1 lappend LesProteinesUniquesPourChaqueCluster $Nom incr Tab($Cluster,NbProtTotUniques) foreach Jum $LesJumeaux {set TabDeJaVu($Cluster,$Jum) 1} } incr Tab($Cluster,NbProtTot) if {[InterrogeProtAndmRNAChoisis $Nom SeqChoisie] == "SeqOK"} { incr NbProtFrommRNA if {[InterrogeProtAndmRNAChoisis $Nom InfoSeqChoisie] == ""} { incr Tab($Cluster,NbProtFrommRNAOK) incr NbProtFrommRNAOK } else { incr Tab($Cluster,NbProtFrommRNANo) incr NbProtFrommRNANo } incr Tab($Cluster,NbProtFrommRNA) } if {[InterrogeProtAndContigChoisis $Nom SeqChoisie] == "SeqOK"} { incr NbProtFromContig incr Tab($Cluster,NbProtFromContig) } } set NbGOTermsIPO 0 set NbProtWithGOTermsIPO 0 set NbGOTermsGPO 0 set NbProtWithGOTermsGPO 0 set Tab(LesTypes) {} foreach Nom $LesProteinesUniquesPourChaqueCluster { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] foreach Type [Onto LesTypes] { if {![info exists Tab($Type,NbProtWithGOTermsIPO) ]} {set Tab($Type,NbProtWithGOTermsIPO) 0} if {![info exists Tab($Cluster,$Type,NbProtWithGOTermsIPO)]} {set Tab($Cluster,$Type,NbProtWithGOTermsIPO) 0} if {![info exists Tab($Type,NbProtWithGOTermsGPO) ]} {set Tab($Type,NbProtWithGOTermsGPO) 0} if {![info exists Tab($Cluster,$Type,NbProtWithGOTermsGPO)]} {set Tab($Cluster,$Type,NbProtWithGOTermsGPO) 0} } set LesIPO [EnterrerLesAncetresOntologiques [InterrogeGeneOntology $FichierIPO $Nom LesGO]] if {$LesIPO != ""} { incr NbProtWithGOTermsIPO incr Tab($Cluster,NbProtWithGOTermsIPO) foreach IPO $LesIPO { set Type [Onto $IPO Type] if {![info exists Tab($Type,NbGOTermsIPO)]} {set Tab($Type,NbGOTermsIPO) 0} if {![info exists Tab($Cluster,$Type,NbGOTermsIPO)]} {set Tab($Cluster,$Type,NbGOTermsIPO) 0} incr NbGOTermsIPO incr Tab($Type,NbGOTermsIPO) incr Tab($Cluster,NbGOTermsIPO) incr Tab($Cluster,$Type,NbGOTermsIPO) } } foreach Type [lsort -unique [InterrogeGeneOntology $FichierIPO $Nom LesTypes]] { incr Tab($Type,NbProtWithGOTermsIPO) incr Tab($Cluster,$Type,NbProtWithGOTermsIPO) } set LesGPO [EnterrerLesAncetresOntologiques [InterrogeGeneOntology $FichierGPO $Nom LesGO]] if {$LesGPO != ""} { incr NbProtWithGOTermsGPO incr Tab($Cluster,NbProtWithGOTermsGPO) foreach GPO $LesGPO { set Type [Onto $GPO Type] if {![info exists Tab($Type,NbGOTermsGPO)]} {set Tab($Type,NbGOTermsGPO) 0} if {![info exists Tab($Cluster,$Type,NbGOTermsGPO)]} {set Tab($Cluster,$Type,NbGOTermsGPO) 0} incr NbGOTermsGPO incr Tab($Type,NbGOTermsGPO) incr Tab($Cluster,NbGOTermsGPO) incr Tab($Cluster,$Type,NbGOTermsGPO) } } foreach Type [lsort -unique [InterrogeGeneOntology $FichierGPO $Nom LesTypes]] { incr Tab($Type,NbProtWithGOTermsGPO) incr Tab($Cluster,$Type,NbProtWithGOTermsGPO) } } set LeTexte {} lappend LeTexte "NbSeq\t$NbSeq" lappend LeTexte "NbEST\t$NbEST" lappend LeTexte "NbProtTot\t$NbProtTot" lappend LeTexte "NbProtTot From mRNAorProt\t$NbProtFrommRNA" lappend LeTexte "NbProtTot From mRNAorProt OK\t$NbProtFrommRNAOK" lappend LeTexte "NbProtTot From mRNAorProt Warning\t$NbProtFrommRNANo" lappend LeTexte "NbProtTot From Contig\t$NbProtFromContig" lappend LeTexte "NbProtTot Uniques\t$NbProtTotUniques" lappend LeTexte "NbProtTot Uniques Avec IPO terms\t$NbProtWithGOTermsIPO" lappend LeTexte "NbProtTot Uniques Avec GPO terms\t$NbProtWithGOTermsGPO" lappend LeTexte "Nb IPO terms Tot\t$NbGOTermsIPO" lappend LeTexte "Nb GPO terms Tot\t$NbGOTermsGPO" foreach Type [Onto LesTypes] { lappend LeTexte "NbProt with $Type IPO terms\t[set Tab($Type,NbProtWithGOTermsIPO)]" lappend LeTexte "NbProt with $Type GPO terms\t[set Tab($Type,NbProtWithGOTermsGPO)]" lappend LeTexte "Nb $Type IPO terms\t[set Tab($Type,NbGOTermsIPO)]" lappend LeTexte "Nb $Type GPO terms\t[set Tab($Type,NbGOTermsGPO)]" } lappend LeTexte "" foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { lappend LeTexte "Cluster $Cluster" lappend LeTexte "NbSeq\t[set Tab($Cluster,NbSeq)]" lappend LeTexte "NbProtTot\t[set Tab($Cluster,NbProtTot)]" lappend LeTexte "NbProtTot From mRNAorProt\t[set Tab($Cluster,NbProtFrommRNA)]" lappend LeTexte "NbProtTot From mRNAorProt OK\t[set Tab($Cluster,NbProtFrommRNAOK)]" lappend LeTexte "NbProtTot From mRNAorProt Warning\t[set Tab($Cluster,NbProtFrommRNANo)]" lappend LeTexte "NbProtTot From Contig\t[set Tab($Cluster,NbProtFromContig)]" lappend LeTexte "NbProtTot Uniques\t[set Tab($Cluster,NbProtTotUniques)]" lappend LeTexte "NbProtTot Uniques Avec IPO Terms\t[set Tab($Cluster,NbProtWithGOTermsIPO)]" lappend LeTexte "NbProtTot Uniques Avec GPO Terms\t[set Tab($Cluster,NbProtWithGOTermsGPO)]" lappend LeTexte "Nb IPO terms Tot\t[set Tab($Cluster,NbGOTermsIPO)]" lappend LeTexte "Nb GPO terms Tot\t[set Tab($Cluster,NbGOTermsGPO)]" foreach Type [Onto LesTypes] { lappend LeTexte "NbProt with $Type IPO terms\t[set Tab($Cluster,$Type,NbProtWithGOTermsIPO)]" lappend LeTexte "NbProt with $Type GPO terms\t[set Tab($Cluster,$Type,NbProtWithGOTermsGPO)]" lappend LeTexte "Nb $Type IPO terms\t[set Tab($Cluster,$Type,NbGOTermsIPO)]" lappend LeTexte "Nb $Type GPO terms\t[set Tab($Cluster,$Type,NbGOTermsGPO)]" } lappend LeTexte "" } Sauve [join $LeTexte "\n"] dans $FichierOUT EspionneL $LeTexte return } proc FichierChiffresSurTissueTypeEtDevStageDesClusters_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierOut "[RepertoireDuGenome]/PourTL/ChiffresTissueTypeDevStageDesClusters" set LesNoms [lsort -unique [LesNoms $PABouNomsInteressantsouListeouFichier]] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set N [llength $LesNoms] set LesClusters {} foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {![info exists Tab($Cluster,R)]} { set Tab($Cluster,R) 0 set Tab($Cluster,LesTissues) {} set Tab($Cluster,LesDS) {} lappend LesClusters $Cluster } incr Tab($Cluster,R) set LesTissues {} foreach TissueTypeOld [InterrogeTissueType $Nom LesTissues] { if {1} { set TissueType [TissueTypesGeneraux $TissueTypeOld [list EYE BRAIN]] } else { set TissueType [TissueTypesGeneraux $TissueTypeOld] } lappend LesTissues $TissueType } foreach TissueType [lsort -unique $LesTissues] { if {![info exists Tab(TissueType,$TissueType,n)]} {set Tab(TissueType,$TissueType,n) 0} if {![info exists Tab($Cluster,TissueType,$TissueType,r)]} { set Tab($Cluster,TissueType,$TissueType,r) 0 lappend Tab($Cluster,LesTissues) $TissueType } incr Tab(TissueType,$TissueType,n) incr Tab($Cluster,TissueType,$TissueType,r) } set LesDS {} foreach DSOld [InterrogeDevStage $Nom LesDevStages] {lappend LesDS [DevStagesGeneraux $DSOld]} foreach DS [lsort -unique $LesDS] { if {![info exists Tab(DevStage,$DS,n)]} {set Tab(DevStage,$DS,n) 0} if {![info exists Tab($Cluster,DevStage,$DS,r)]} { set Tab($Cluster,DevStage,$DS,r) 0 lappend Tab($Cluster,LesDS) $DS } incr Tab(DevStage,$DS,n) incr Tab($Cluster,DevStage,$DS,r) } } set LeTexte {} foreach Cluster $LesClusters { set R [set Tab($Cluster,R)] foreach Tissue [set Tab($Cluster,LesTissues)] { set n [set Tab(TissueType,$Tissue,n) ] set r [set Tab($Cluster,TissueType,$Tissue,r)] set Zscore [ZScore $r $R $n $N] lappend LeTexte "$Cluster\tTissueType\t$Tissue\t$r\t$R\t$n\t$N\t$Zscore" Espionne "$Cluster\tTissueType\t$Tissue\t$r\t$R\t$n\t$N\t$Zscore" } foreach DS [set Tab($Cluster,LesDS)] { set n [set Tab(DevStage,$DS,n) ] set r [set Tab($Cluster,DevStage,$DS,r)] set Zscore [ZScore $r $R $n $N] lappend LeTexte "$Cluster\tDevStage\t$DS\t$r\t$R\t$n\t$N\t$Zscore" Espionne "$Cluster\tDevStage\t$DS\t$r\t$R\t$n\t$N\t$Zscore" } } Sauve [join $LeTexte "\n"] dans $FichierOut return } proc FichierCl1Cl2OperonsCommuns {} { global RepertoireDuGenome set Fichier "$RepertoireDuGenome/fiches/cl1_cl2_operons_communs" set LesInfos {} foreach Cluster1 [O2C2O LesClusters] { #Espionne $Cluster1 foreach Cluster2 [O2C2O LesClusters] { if {[info exists TabTmp($Cluster1,$Cluster2)]} {continue} if {$Cluster1 == $Cluster2} {continue} set TabTmp($Cluster1,$Cluster2) 1 set TabTmp($Cluster2,$Cluster1) 1 set LesOperonsCommuns [LesOperonsCommunsEntreClusters $Cluster1 $Cluster2] set NbOperonsCommuns [llength $LesOperonsCommuns] lappend LesInfos "$Cluster1\t$Cluster2\t$NbOperonsCommuns\t[join $LesOperonsCommuns "\t"]" } } #Espionne $LesInfos Sauve [join $LesInfos "\n"] dans $Fichier if {[info exists TabTmp]} {unset TabTmp} return $Fichier } proc FichierClusters {Fichier} { #Cree le fichier "clusters" et le sauve dans fiches #ce fichier est celui qui sera lu dans proc CreeLesNouvellesBornesDesPABs #Complete le fichier des jumeaux (qui est deja trie) : jumeaux_Overlap par ex set TexteComplete [CompleteLeFichierDesJumeaux $Fichier] set FichierDesClusters "[RepertoireDuGenome]/fiches/clusters" if {![file exists $FichierDesClusters] || [file exists $FichierDesClusters] && [OuiOuNon "Do you want to replace the file clusters ?"]} { Sauve $TexteComplete dans $FichierDesClusters } if {[OuiOuNon "Do you want to run again BornesDesPABs?"]} { CreeLesNouvellesBornesDesPABs "[RepertoireDuGenome]/fiches/clusters" } } proc FichierClustersFinal {FichierClusters} { set TexteDuNouveauFichier "" foreach JR [ListeDesJR $FichierClusters] { if {[info exists Vu($JR)]} {continue} set LesJumeauxDuJR {} set LesJRIdentiques {} set LesJumeaux {} set lesJumeauxTries {} set LesJumeauxDesJRIdentiques {} set LesJumeauxDuJumeauR {} set LesJumeauxDuJR [LesJumeauxDuPAB $JR $FichierClusters] set LesJRIdentiques [LesJRsAvecMemesAccessDeProtOuDemRNAPourUnPAB $JR $FichierClusters] foreach JumeauR $LesJRIdentiques { set Vu($JumeauR) 1 set LesJumeauxDuJumeauR [LesJumeauxDuPAB $JumeauR $FichierClusters] set LesJumeauxDesJRIdentiques [concat $LesJumeauxDesJRIdentiques $LesJumeauxDuJumeauR] } set LesJumeaux [concat $JR $LesJumeauxDuJR $LesJRIdentiques $LesJumeauxDesJRIdentiques] set lesJumeauxTries [TrieLesJumeauxParLongueurDecroissante $LesJumeaux] if {$lesJumeauxTries!=""} { append TexteDuNouveauFichier "$lesJumeauxTries\n" } } return $TexteDuNouveauFichier } proc FichierClustersFusionnes {DistanceMax NbOperonsCommunsMin ZscoreMinDuCluster DiffZscoreMinClusterEtClusterFusionne {NiveauGOMin_process ""} {NiveauGOMin_function ""} {NiveauGOMin_component ""}} { Wup "ATTENTION il faut mettre une valeur dans au moins un des types d'ontology pour obtenir un resultat" set File "[RepertoireDuGenome]/fiches/ClustersApresFusion" set i 0 set LesClustersFusionnes {} foreach Cluster [O2C2O LesClusters] { if {[info exists TabTmp($Cluster)]} {continue} set TabTmp($Cluster) 1 set LesClustersProches [LesClustersProchesDuCluster $Cluster $DistanceMax $NbOperonsCommunsMin $ZscoreMinDuCluster $DiffZscoreMinClusterEtClusterFusionne $NiveauGOMin_process $NiveauGOMin_function $NiveauGOMin_component] incr i set nNouveauCluster [expr $i - 1] lappend LesClustersFusionnes "$nNouveauCluster\t[join [lsort $LesClustersProches] "\t"]" foreach Cluster $LesClustersProches {set TabTmp($Cluster) 1} } Espionne "NbCluster $i" Sauve [join $LesClustersFusionnes "\n"] dans $File return $LesClustersFusionnes } proc FichierComparaisonsDesGODesDeuxClusters {C1 C2 TypeDeRef FichierOrf2Cluster FichierCompare FichierGO} { set LesGO {} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster LesNoms] { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster $Nom Cluster] if {$Cluster != $C1 && $Cluster != $C2} {continue} if {1} { if {$Cluster == $C1} { set Fold [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster $Nom PointTemporel 8d Fold rd1 sur wt] if {$Fold == "" || $Fold <3} {continue} } if {$Cluster == $C2} { set Fold [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster $Nom PointTemporel 8d Fold rd1 sur wt] if {$Fold == "" || $Fold <3} {continue} } } if {![info exists Tab($Cluster,NbProtAvecGO)]} { set Tab($Cluster,NbProtAvecGO) 0 } if {[InterrogeGeneOntology $FichierGO $Nom LesGO] != {}} { incr Tab($Cluster,NbProtAvecGO) } Espionne "$Nom $Cluster" foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [Onto $GO Type] if {$TypeDeRef != $Type} {continue} Espionne $GO if {![info exists Tab($GO)]} { set Tab($GO) 0 lappend LesGO $GO } if {![info exists Tab($Cluster,NbGO)]} { set Tab($Cluster,NbGO) 0 } if {![info exists Tab($GO,$Cluster)]} { set Tab($GO,$Cluster) 0 } incr Tab($Cluster,NbGO) incr Tab($GO,$Cluster) } } set NbProtDansC1 [llength [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster Cluster $C1 LesNoms]] set NbProtDansC2 [llength [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster Cluster $C2 LesNoms]] foreach GO $LesGO { set Type [Onto $GO Type] set Definition [lindex [Onto $Type $GO LesDefinitions] 0] set nC1 0 if {[info exists Tab($GO,$C1)]} {set nC1 [set Tab($GO,$C1)]} set nC2 0 if {[info exists Tab($GO,$C2)]} {set nC2 [set Tab($GO,$C2)]} set NbGOC1 0 if {[info exists Tab($C1,NbGO)]} {set NbGOC1 [set Tab($C1,NbGO)]} set NbGOC2 0 if {[info exists Tab($C2,NbGO)]} {set NbGOC2 [set Tab($C2,NbGO)]} set NbProtAvecGODansC1 0 if {[info exists Tab($C1,NbProtAvecGO)]} {set NbProtAvecGODansC1 [set Tab($C1,NbProtAvecGO)]} set NbProtAvecGODansC2 0 if {[info exists Tab($C2,NbProtAvecGO)]} {set NbProtAvecGODansC2 [set Tab($C2,NbProtAvecGO)]} Espionne "$GO\t$Definition\t$nC1\t$NbProtAvecGODansC1\t$NbProtDansC1\t$NbGOC1\t$nC2\t$NbProtAvecGODansC2\t$NbProtDansC2\t$NbGOC2" AppendAuFichier $FichierCompare "$GO\t$Definition\t$nC1\t$NbProtAvecGODansC1\t$NbProtDansC1\t$NbGOC1\t$nC2\t$NbProtAvecGODansC2\t$NbProtDansC2\t$NbGOC2" } return } proc FichierComparaisonsEntreOperonsEtClusters {} { global RepertoireDuGenome set LesInfos {} Wup "Operon Number of ORFs in operon Number of clusters in operon Cluster Number of ORFs in cluster Number of operons in cluster Percentage of presence of the total organisms Percentage of presence of the Diabacs Percentage of presence of the Bacteria Percentage of presence of the Firmicutes Percentage of presence of the Proteobacteria Percentage of presence of the Archaebacteria Percentage of presence of the Eukaryota Cluster 2 Percentage of presence of the total organisms Distance between cluster and cluster 2 Number of common ORFs between cluster and operon Common ORF between cluster and operon Definition of common ORF between cluster and operon" set LesOperons [lsort -integer [O2C2O LesOperons]] foreach Operon $LesOperons { set LesClustersDeLOperon [lsort -integer [O2C2O Operon $Operon LesClusters]] set nClInOp [O2C2O Operon $Operon NbClustersDansOperon] set TOp [O2C2O Operon $Operon TailleOperon] foreach Cluster $LesClustersDeLOperon { set TCl [O2C2O Cluster $Cluster TailleCluster] set nOpInCl [O2C2O Cluster $Cluster NbOperonsDansCluster] set LesOrfsEnCommun [lsort [O2C2O Cluster $Cluster Operon $Operon LesOrfsEnCommun]] set nOrfsEnCommun [O2C2O Cluster $Cluster Operon $Operon NbOrfsEnCommun] set LesDefinitions {} set PresenceOrgas [O2C2O Cluster $Cluster Categorie AllOrganism Presence] set PresenceDiabacs [O2C2O Cluster $Cluster Categorie OrganismeInteressant Presence] set PresenceBacteries [O2C2O Cluster $Cluster Categorie Bacteria Presence] set PresenceFirmicutes [O2C2O Cluster $Cluster Categorie Firmicutes Presence] set PresenceProteobacteries [O2C2O Cluster $Cluster Categorie Proteobacteria Presence] set PresenceArchaebacteries [O2C2O Cluster $Cluster Categorie Archaea Presence] set PresenceEucaryotes [O2C2O Cluster $Cluster Categorie Eukaryota Presence] foreach Orf $LesOrfsEnCommun { lappend LesDefinitions [O2C2O Orf $Orf Definition] } foreach Cluster2 $LesClustersDeLOperon { set Distance [format "%.1f" [O2C2O Cluster1 $Cluster Cluster2 $Cluster2 Distance]] set PresenceOrgas2 [O2C2O Cluster $Cluster2 Categorie AllOrganism Presence] foreach OrfEnCommun $LesOrfsEnCommun Definition $LesDefinitions { Espionne [set Info [list $Operon $TOp $nClInOp $Cluster $TCl $nOpInCl $PresenceOrgas $PresenceDiabacs $PresenceBacteries $PresenceFirmicutes $PresenceProteobacteries $PresenceArchaebacteries $PresenceEucaryotes $Cluster2 $PresenceOrgas2 $Distance $nOrfsEnCommun $OrfEnCommun $Definition ]] lappend LesInfos $Info } } } } set LeTexte {} foreach LInfo [lsort -integer -index 0 $LesInfos] { lappend LeTexte [join $LInfo "\t"] } set Fichier "$RepertoireDuGenome/fiches/comparaisons_operons_clusters" Sauve [join $LeTexte "\n"] dans $Fichier set LeTexte {} foreach LInfo [lsort -integer -index 3 $LesInfos] { lappend LeTexte [join $LInfo "\t"] } set Fichier "$RepertoireDuGenome/fiches/comparaisons_clusters_operons" Sauve [join $LeTexte "\n"] dans $Fichier return $Fichier } proc FichierContigAndProtPourTous {{LesNoms ""} {APartirDe ""} {IdMin 0.8}} { set Fichier "[RepertoireDuGenome]/fiches/ContigAndProt" if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set Continue 0 if {[file exists $Fichier]} { if {[OuiOuNon "$Fichier exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $Fichier] { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} } if {[info exists DejaVu($Nom)]} {unset DejaVu($Nom)} } else { if {[OuiOuNon "$Fichier exists.\nWould you want to deltree this file?"]} { File delete -force $Fichier } } } set LAiJeVu 0 foreach Nom $LesNoms { Espionne $Nom if {$APartirDe != ""} { if {$Nom == $APartirDe} {set LAiJeVu 1} if {!$LAiJeVu} {continue} } if {[file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} #if {[file exists "[RepertoireDuGenome]/prottfa/$Nom"] && ![regexp -nocase "CONTIG" [EnteteDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"]]} {continue} if {$Continue && [info exists DejaVu($Nom)]} {continue} set LaProt [LaMeilleureProteineDuMeilleurContig $Nom 0.001 0.05 10000 $IdMin] if {$LaProt == {}} { AppendAuFichier $Fichier "$Nom\tNoContigFound" } else { AppendAuFichier $Fichier [join $LaProt "\t"] } } FichierTFADesProteinesDesContigsPourTous $LesNoms $IdMin return $Fichier } proc FichierDeClassificationTaxonomique {} { global RepertoireDuGenome set FichierTaxon "[RepTaxonomie]/ClassificationTaxonomique" foreach Orga [Glossaire "" EntierComplet] { regsub {\.$} $Orga "" Orga if {[info exists TabTaxon($Orga)]} {continue} set Taxon [OCduOS $Orga] if {$Taxon == "ClassUnknown"} {continue} regsub {\.$} $Taxon "" Taxon regsub -all { *; *} $Taxon ";" Taxon set LesTaxons [linsert [split $Taxon ";"] 0 "LUCA"] lappend LesTaxons $Orga Espionne $LesTaxons for {set i 1} {$i < [llength $LesTaxons]} {incr i} { set Taxon [lindex $LesTaxons $i ] set LesAncetres [lrange $LesTaxons 0 [expr $i - 1]] set IndexAncetres [join $LesAncetres ","] if {![info exists TabTaxon($IndexAncetres,LesDescendants)]} {set TabTaxon($IndexAncetres,LesDescendants) {}} if {![info exists TabTaxon($IndexAncetres,$Taxon)]} { lappend TabTaxon($IndexAncetres,LesDescendants) $Taxon set TabTaxon($IndexAncetres,$Taxon) 1 } } } set LeTexte [AjouteLesTaxonsAuFichierDeClassificationTaxonomique TabTaxon [list "LUCA"]] Sauve [join $LeTexte "\n"] dans $FichierTaxon return $LeTexte } proc FichierDefinitionDesProteinesPourTous {FichierOut FichierO2C2A2D2E {Id 0.98}} { if {![file exists $FichierO2C2A2D2E]} {return} set LesDefinitions {} set LesNoms [ListeDesPABs] foreach Nom $LesNoms { Espionne "$Nom" set AccessClone [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom Access ] set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom Cluster ] set Def [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom Definition] set Fold35dRd1Wt [format "%.1f" [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel 35 Fold rd1 sur wt ]] set Fold35dWtRd1 [format "%.1f" [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel 35 Fold wt sur rd1]] set Fold8dRd1Wt [format "%.1f" [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel 8 Fold rd1 sur wt ]] set Fold8dWtRd1 [format "%.1f" [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel 8 Fold wt sur rd1]] set FichierProtTFA "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FichierProtTFA]} { Espionne "$Nom\t$Cluster\t$AccessClone\t$Fold35dRd1Wt\t$Fold35dWtRd1\t$Fold8dRd1Wt\t$Fold8dWtRd1\t\t\t\t$Def" lappend LesDefinitions "$Nom\t$Cluster\t$AccessClone\t$Fold35dRd1Wt\t$Fold35dWtRd1\t$Fold8dRd1Wt\t$Fold8dWtRd1\t\t\t\t$Def" continue } if {[info exists TabFeuille]} {unset TabFeuille} if {[info exists TabAncetre]} {unset TabAncetre} set Info [InterrogeProtAndmRNAChoisis $Nom InfoSeqChoisie] if {$Info == "NoSeq"} { Espionne "$Nom\t$Cluster\t$AccessClone\t$Fold35dRd1Wt\t$Fold35dWtRd1\t$Fold8dRd1Wt\t$Fold8dWtRd1\t\t\t\t$Def" lappend LesDefinitions "$Nom\t$Cluster\t$AccessClone\t$Fold35dRd1Wt\t$Fold35dWtRd1\t$Fold8dRd1Wt\t$Fold8dWtRd1\t\t\t\t$Def" continue } set LesAccess {} set Access [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {![string equal -nocase $Access "NoProtein"]} { lappend LesAccess $Access } set FileMSF "[RepertoireDuGenome]/msf/$Nom" if {[file exists $FileMSF]} { set LesAccess [concat $LesAccess [LesAccessDesProteinesIdentiquesDansMSF $FileMSF $Nom $Id]] } foreach Access [ElimineLesRedondancesDansUneListe $LesAccess] { set PageInfo [PageInfo $Access protein "ID ORG DES"] if {$PageInfo == ""} {continue} set DefProt [string trim [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "]] if {$DefProt == ""} {continue} if {[info exists TabTmp($Nom,$DefProt)]} {continue} set TabTmp($Nom,$DefProt) 1 set Orgas [join [LesOrgasDeLaPage_PageInfo $PageInfo] " "] Espionne "$Nom\t$Cluster\t$AccessClone\t$Fold35dRd1Wt\t$Fold35dWtRd1\t$Fold8dRd1Wt\t$Fold8dWtRd1\t$Access\t$Orgas\t$DefProt\t$Def" lappend LesDefinitions "$Nom\t$Cluster\t$AccessClone\t$Fold35dRd1Wt\t$Fold35dWtRd1\t$Fold8dRd1Wt\t$Fold8dWtRd1\t$Access\t$Orgas\t$DefProt\t$Def" } } if {[info exists TabTmp]} {unset TabTmp} Sauve [join $LesDefinitions "\n"] dans $FichierOut return } proc FichierDefinitionsConsensusPourTous {{LesNoms ""} {IdDesProtId 0.98} {NormMDMin 0.5} {NbMilliSecMax 30000} {NbIndiv 20}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FileBestDef "[RepertoireDuGenome]/fiches/DefinitionsConsensus" if {![file exists $FileBestDef]} {File delete -force $FileBestDef} set Continue 0 if {[file exists $FileBestDef]} { if {[OuiOuNon "$FileBestDef exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $FileBestDef] { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} } } else { if {[OuiOuNon "$FileBestDef exists.\nWould you want to deltree this file?"]} { File delete -force $FileBestDef } } } foreach Nom $LesNoms { Espionne $Nom if {$Continue && [info exists DejaVu($Nom)]} {continue} set FileMSF "[RepertoireDuGenome]/msf/$Nom" set FileClust "${FileMSF}.clust" set Def "$Nom\t[DefinitionConsensus $Nom $FileMSF $FileClust $IdDesProtId $NormMDMin $NbMilliSecMax $NbIndiv]" Espionne $Def AppendAuFichier $FileBestDef $Def } return } proc FichierDesBoitesSelectionneesPourArticle_TL {FileOCADE FileBoiteSelected FileGOSelected FileGO FileOut {PABouNomsInteressantsouListeouFichier NomsInteressants}} { set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] set F [open $FileBoiteSelected] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set TabBoxToKeep($Ligne) 1 } close $F set F [open $FileGOSelected] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Cluster [lindex $LaLigne 0] set GO [lindex $LaLigne 2] set TabGOToKeep($Cluster,$GO) 1 } close $F set LesBoitesSelect {} foreach Nom $LesNoms { if {[info exists TabBoxToKeep($Nom)]} {lappend LesBoitesSelect $Nom;continue} set FileProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FileProttfa]} {continue} set Entete [EnteteDuFichierTFA $FileProttfa] if {[regexp -nocase "from contig" $Entete]} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FileOCADE $Nom Cluster ] set LAiJeTrouve 0 foreach GO [InterrogeGeneOntology $FileGO $Nom LesGO] { if {[info exists TabGOToKeep($Cluster,$GO)]} { set LAiJeTrouve 1 break } foreach Type [GODB GO $GO LesTypes] { foreach GOAncetre [TousLesAncetresGO $Type $GO] { if {[info exists TabGOToKeep($Cluster,$GOAncetre)]} { set LAiJeTrouve 1 break } } if {$LAiJeTrouve} {break} } if {$LAiJeTrouve} {break} } if {!$LAiJeTrouve} {continue} lappend LesBoitesSelect $Nom } set LeTexte {} set LesPointsTemporels [InterrogeOrf2Cluster2Access2Def2Expression $FileOCADE LesPointsTemporels] set LesConditions [InterrogeOrf2Cluster2Access2Def2Expression $FileOCADE LesConditions] set LaLigne [list Name Cluster Access] foreach When $LesPointsTemporels { foreach What $LesConditions { lappend LaLigne "$When $What" } } lappend LaLigne "Mean Definition" lappend LaLigne "GO Definitions" lappend LeTexte [join $LaLigne "\t"] foreach Nom [lsort -unique $LesBoitesSelect] { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FileOCADE $Nom Cluster ] set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FileOCADE $Nom Access ] set LaLigne [list $Nom $Cluster $AccIni] foreach When $LesPointsTemporels { foreach What $LesConditions { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FileOCADE $Nom PointTemporel $When Condition $What Expression] lappend LaLigne $Expr } } set GODef "" foreach GO [InterrogeGeneOntology $FileGO $Nom LesGO] { set Def [join [InterrogeGeneOntology $FileGO GO $GO LaDefinition] " "] if {$GODef != ""} {append GODef " ; $Def";continue} append GODef $Def } lappend LaLigne $MeanDef lappend LaLigne $GODef lappend LeTexte [join $LaLigne "\t"] } Sauve [join $LeTexte "\n"] dans $FileOut return } proc FichierDevStagePourTous {NameRepBlastnEST {AllOrgaouJustMyOrga AllOrga} {IdDeRef 0.95} {LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FichierDevStage "[RepertoireDuGenome]/fiches/DevStage" set Continue 0 if {[file exists $FichierDevStage]} { if {[OuiOuNon "$FichierDevStage exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $FichierDevStage] { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] set Access [lindex $LaLigne 1] if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} set DejaVu($Nom,$Access) 1 } if {[info exists DejaVu($Nom)]} {unset DejaVu($Nom)} } else { if {[OuiOuNon "$FichierDevStage exists.\nWould you want to deltree this file?"]} { File delete -force $FichierDevStage } } } foreach Nom $LesNoms { if {$Continue && [info exists DejaVu($Nom)]} {continue} set FichierBlastnEST "[RepertoireDuGenome]/$NameRepBlastnEST/$Nom" if {![file exists $FichierBlastnEST]} {continue} if {[info exists TabBlast]} {unset TabBlast} DepouilleLeBlast TabBlast $FichierBlastnEST if {![info exists TabBlast(NbSubject)]} {continue} set OrgaDeRef [OrganismeDuPAB $Nom] set NbSubject [set TabBlast(NbSubject)] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [set TabBlast($i)] set Access [set TabBlast($BId,Access)] if {$Continue && [info exists DejaVu($Nom,$Access)]} {continue} Espionne "$Nom\t$BId\t$Access" set PAlignees [PourcentageDesBasesAligneesSurToutesLesBasesAlignables_TabBlast TabBlast $BId] if {$PAlignees < $IdDeRef} {continue} set PAlignables [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables_TabBlast TabBlast $BId] if {$PAlignables < $IdDeRef} {continue} set Page [PageInfo $BId est] set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] if {$AllOrgaouJustMyOrga != "AllOrga"} { set EstCeUnDesOrga 0 foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} {set EstCeUnDesOrga 1;break} } if {!$EstCeUnDesOrga} {continue} } set LesDevStages [LesDevStageDeLAcNuc_PageInfo $Page] if {$LesDevStages == {}} {continue} foreach DevStage $LesDevStages { foreach Orga $LesOrgas { Espionne "$Nom\t$Access\t$Orga\t$DevStage" AppendAuFichier $FichierDevStage "$Nom\t$Access\t$Orga\t$DevStage" } } } } return } proc FichierDistancesPondereesParPresencesEntreTousLesClusters {} { set LesClusters [O2C2O LesClusters] global RepertoireDuGenome set RepDPP "$RepertoireDuGenome/DistancesPondereesParPresence" if {![file exists $RepDPP]} {file mkdir $RepDPP} foreach Categorie [O2C2O LesCategories] { Espionne "Categorie : $Categorie" set LeTexte {} set FichierDPP "$RepDPP/$Categorie" set LesOrganismes [O2C2O Categorie $Categorie LesOrganismesLongs] foreach Cluster1 $LesClusters { set P1 [O2C2O Cluster $Cluster1 Categorie $Categorie Presence] set LesDistancesPondereesParPresences {} foreach Cluster2 $LesClusters { set P2 [O2C2O Cluster $Cluster2 Categorie $Categorie Presence] set D [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance] lappend LesDistancesPondereesParPresences [expr ($D / 100) * abs($P1 - $P2)] } lappend LeTexte [join $LesDistancesPondereesParPresences " "] } EspionneL $LeTexte Sauve [join $LeTexte "\n"] dans $FichierDPP } return } proc FichierDomainesPourTous {{LesNoms ""} {IdDesProtId 0.98} {NormMDMin 0.5} {ProportionMinDuDomaineDeLaQuery 0.75}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set RepMSF "[RepertoireDuGenome]/msf" set FileDomaines "[RepertoireDuGenome]/fiches/Domaines" ###Pour reprendre si le programme s'est arrete##### if {![file exists $FileDomaines]} {File delete -force $FileDomaines} set Continue 0 if {[file exists $FileDomaines]} { if {[OuiOuNon "$FileDomaines exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $FileDomaines] { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} } } else { if {![OuiOuNon "$FileDomaines exists.\nWould you want to Keep this file?"]} { File delete -force $FileDomaines } else { return } } } foreach Nom $LesNoms { Espionne $Nom if {[info exists Tab]} {unset Tab} if {$Continue && [info exists DejaVu($Nom)]} {continue} set File "$RepMSF/$Nom" if {![file exists $File]} {continue} foreach LeDomaineDeRef [LesDomainesDeLaBoite $Nom $IdDesProtId $NormMDMin $ProportionMinDuDomaineDeLaQuery] { Espionne $LeDomaineDeRef AppendAuFichier $FileDomaines [join $LeDomaineDeRef "\t"] } } return } proc FichierEMBL2TFA {FichierEMBL FichierTFA Entete} { if {![file exists $FichierEMBL]} {return} set TexteEMBL [ContenuDuFichier $FichierEMBL] Sauve [EMBLtoTFA $TexteEMBL $Entete] dans $FichierTFA return } proc FichierEffectifDesDevStageTrouvesDansLaBanque {FichierDevStage {Orga ""} {Banque est}} { if {![file exists $FichierDevStage]} {return} set FichierEffectifDesDevStage "[RepertoireDuGenome]/fiches/EffectifsDesDevStage" set LesInfos {} foreach DevStage [lsort -unique [InterrogeDevStage LesDevStages]] { set n [EffectifDuFtdDansLaBanque $DevStage $Banque $Orga] if {$n == ""} {set n 0} Espionne "$DevStage\t$n" lappend LesInfos "$DevStage\t$n" } Sauve [join $LesInfos "\n"] dans $FichierEffectifDesDevStage return } proc FichierEffectifDesTissueTypeTrouvesDansLaBanque {FichierTissueType {Orga ""} {Banque est}} { if {![file exists $FichierTissueType]} {return} set FichierEffectifDesTissueType "[RepertoireDuGenome]/fiches/EffectifsDesTissueType" set LesInfos {} foreach Tissue [lsort -unique [InterrogeTissueType LesTissues]] { set n [EffectifDuFtdDansLaBanque $Tissue $Banque $Orga] if {$n == ""} {set n 0} Espionne "$Tissue\t$n" lappend LesInfos "$Tissue\t$n" } Sauve [join $LesInfos "\n"] dans $FichierEffectifDesTissueType return } proc FichierEffectifsDesGOs_TousLesClustersXHda {prottfaORblastpORclustersdesmsf} { set Fichiern "[RepertoireDuGenome]/fiches/EffectifsDesGOs_nGO_$prottfaORblastpORclustersdesmsf" set FichierP "[RepertoireDuGenome]/fiches/EffectifsDesGOs_pourcentageGO_$prottfaORblastpORclustersdesmsf" set FichierGO "[RepertoireDuGenome]/OntologyDesClustersXHda/GeneOntology_${prottfaORblastpORclustersdesmsf}_clusterXhda" set Tab(LesTypes) {} set Tab(LesGOs) {} set Tab(LesDefinitions) {} foreach Cluster [O2C2O LesClusters] { Espionne $Cluster set FichierGODuClust "${FichierGO}_$Cluster" if {![file exists $FichierGODuClust]} {Espionne $FichierGODuClust;continue} foreach LInfoGO [EffectifsDesGO $FichierGODuClust] { set Type [lindex $LInfoGO 0] if {$Type == ""} {Espionne $LInfoGO} set GO [lindex $LInfoGO 1] set nGO [lindex $LInfoGO 2] set nAccess [lindex $LInfoGO 3] set PourcentageGO [lindex $LInfoGO 4] set DefGO [lindex $LInfoGO 5] if {![info exists Tab(Cluster,$Cluster,LesTypes)]} { set Tab(Cluster,$Cluster,LesTypes) {} set Tab(Cluster,$Cluster,LesGOs) {} set Tab(Cluster,$Cluster,LesDefinitions) {} } if {![info exists Tab(Cluster,$Cluster,Type,$Type,LesGOs)]} { set Tab(Cluster,$Cluster,Type,$Type,LesGOs) {} set Tab(Cluster,$Cluster,Type,$Type,LesDefinitions) {} lappend Tab(Cluster,$Cluster,LesTypes) $Type set Tab(Cluster,$Cluster,Type,$Type,nAccess) $nAccess } lappend Tab(Cluster,$Cluster,LesGOs) $GO lappend Tab(Cluster,$Cluster,Type,$Type,LesGOs) $GO lappend Tab(Cluster,$Cluster,Type,$Type,LesDefinitions) $DefGO lappend Tab(Cluster,$Cluster,LesDefinitions) $DefGO set Tab(Cluster,$Cluster,GO,$GO,n) $nGO set Tab(Cluster,$Cluster,GO,$GO,Pourcentage) $PourcentageGO if {![info exists Tab(Type,$Type,LesGOs)]} { lappend Tab(LesTypes) $Type set Tab(Type,$Type,LesGOs) {} } if {![info exists Tab(GO,$GO,Definition)]} { set Tab(GO,$GO,Definition) $DefGO lappend Tab(LesGOs) $GO } if {![info exists Tab(Type,$Type,GO,$GO,LesClusters)]} { lappend Tab(Type,$Type,LesGOs) $GO } lappend Tab(Type,$Type,GO,$GO,LesClusters) $Cluster } } if {[set Tab(LesTypes)] == {}} {return} set LeTexten {} set LeTexteP {} foreach Type [set Tab(LesTypes)] { foreach GO [set Tab(Type,$Type,LesGOs)] { set Lignen [list $Type $GO] set LigneP [list $Type $GO] foreach Cluster [O2C2O LesClusters] { if {![info exists Tab(Cluster,$Cluster,GO,$GO,n)]} { set n 0 } else { set n [set Tab(Cluster,$Cluster,GO,$GO,n)] } if {![info exists Tab(Cluster,$Cluster,GO,$GO,Pourcentage)]} { set P 0 } else { set P [format "%.1f" [expr 100 * [set Tab(Cluster,$Cluster,GO,$GO,Pourcentage)]]] } lappend Lignen $n lappend LigneP $P } Espionne $Lignen Espionne $LigneP lappend LeTexten [join $Lignen "\t"] lappend LeTexteP [join $LigneP "\t"] } } Sauve [join $LeTexten "\n"] dans $Fichiern Sauve [join $LeTexteP "\n"] dans $FichierP return } proc FichierEnrichissementDesClusters {FichierOUT} { set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierGOProteo "[GODBDir]/GeneOntology_HUMAN" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" Espionne "Populations des clusters" set Tab(LesNoms) {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { if {$Cluster == "PN10"} {continue} Espionne "Cluster: $Cluster" foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $Fichier Cluster $Cluster LesNoms] { lappend Tab(LesNoms) $Nom if {1} { ####Tissue Type#################################### Espionne "Tissue Type" set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType]] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusTT) $LIndividu } ####Dev Stage#################################### Espionne "Dev Stage" set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage]] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusDS) $LIndividu } } if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## Espionne "GO" set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusGO) $LIndividu } } if {1} { ###Domaines####################################### Espionne "Domaines" set LIndividu {} foreach LeDom [InterrogeDomaines $Nom LesDomaines] { set Type [lindex $LeDom 0] set Dom [lindex $LeDom 1] set Def [lindex $LeDom 2] if {$Def == ""} {continue} lappend LIndividu $Dom set Tab(Dom,$Dom,Def) $Def set Tab(Dom,$Dom,Type) $Type } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusDO) $LIndividu } } } } Espionne "OK" if {[info exists TabDeJaVu]} {unset TabDeJaVu} Espionne "Populations totales selectionnees" set LesIndividusGODeLaPop1 {} set LesIndividusTTDeLaPop1 {} set LesIndividusDSDeLaPop1 {} set LesIndividusDODeLaPop1 {} foreach Nom [set Tab(LesNoms)] { if {1} { ####Tissue Type#################################### Espionne "Tissue Type" set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType]] if {$LIndividu != {}} { lappend LesIndividusTTDeLaPop1 $LIndividu } ####Dev Stage#################################### Espionne "Dev Stage" set LIndividu [lsort -unique [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage]] if {$LIndividu != {}} { lappend LesIndividusDSDeLaPop1 $LIndividu } } if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## Espionne "GO" set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu != {}} { set LIndividu [lsort -unique $LIndividu] lappend LesIndividusGODeLaPop1 $LIndividu } } if {1} { ###Domaines####################################### Espionne "Domaines" set LIndividu {} foreach LeDom [InterrogeDomaines $Nom LesDomaines] { set Type [lindex $LeDom 0] set Dom [lindex $LeDom 1] set Def [lindex $LeDom 2] if {$Def == ""} {continue} lappend LIndividu $Dom set Tab(Dom,$Dom,Def) $Def set Tab(Dom,$Dom,Type) $Type } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend LesIndividusDODeLaPop1 $LIndividu } } } Espionne "OK" Espionne "Lecture Du FichierGO du Proteome" #Gene Ontology du proteome humain##### set LesIndividusGODeLaPop2 {} if {1} { foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} lappend LesIndividusGODeLaPop2 [lsort -unique $LIndividu] } } Espionne "OK" Espionne "Calcul" set LeTexte {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { if {$Cluster == "PN10"} {continue} set LesIndividusGO [set Tab(Cluster,$Cluster,LesIndividusGO)] set LesIndividusTT [set Tab(Cluster,$Cluster,LesIndividusTT)] set LesIndividusDS [set Tab(Cluster,$Cluster,LesIndividusDS)] set LesIndividusDO [set Tab(Cluster,$Cluster,LesIndividusDO)] ###GO GO GO GO################ Espionne "Calcul GO" foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop1] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop2] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } ####Tissue Type##################### Espionne "Calcul Tissue Type" foreach LeTT [LesZscoreDesRequetesDuGroupe $LesIndividusTT $LesIndividusTTDeLaPop1] { set TT [lindex $LeTT 0] set r [lindex $LeTT 2] if {$r <= 0} {continue} set Stat [join [lrange $LeTT 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tTissue Type\t\t\t\t$TT\t\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tTissue Type\t\t\t\t$TT\t\t$Stat" } ###Dev Stage##################### Espionne "Calcul Dev Stage" foreach LeDS [LesZscoreDesRequetesDuGroupe $LesIndividusDS $LesIndividusDSDeLaPop1] { set DS [lindex $LeDS 0] set r [lindex $LeDS 2] if {$r <= 0} {continue} set Stat [join [lrange $LeDS 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tDev Stage\t\t\t\t$DS\t\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tDev Stage\t\t\t\t$DS\t\t$Stat" } ###Domaines##################### Espionne "Calcul Domaines" foreach LeDO [LesZscoreDesRequetesDuGroupe $LesIndividusDO $LesIndividusDODeLaPop1] { set DO [lindex $LeDO 0] set r [lindex $LeDO 2] if {$r <= 0} {continue} set Def [set Tab(Dom,$DO,Def)] set Type [set Tab(Dom,$DO,Type)] set Stat [join [lrange $LeDO 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tDomaines\tType\t$Type\t\t$DO\t$Def\t$Stat" } } Espionne "OK" Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierEnrichissementGODesClusters {FichierOUT} { ### Reduction de la proc FichierEnrichissementDesClusters a la GO seulement set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierGOProteo "[GODBDir]/GeneOntology_HUMAN" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" Espionne "Populations des clusters" set Tab(LesNoms) {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { Espionne "Cluster: $Cluster" foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $Fichier Cluster $Cluster LesNoms] { lappend Tab(LesNoms) $Nom if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## #Espionne "GO" set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } set LIndividu [lsort -unique $LIndividu] if {$LIndividu != {}} { lappend Tab(Cluster,$Cluster,LesIndividusGO) $LIndividu } } } } Espionne "OK" if {[info exists TabDeJaVu]} {unset TabDeJaVu} Espionne "Populations totales selectionnees" set LesIndividusGODeLaPop1 {} foreach Nom [set Tab(LesNoms)] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} if {1} { #####GO GO GO GO######################################## Espionne "GO" set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu != {}} { set LIndividu [lsort -unique $LIndividu] lappend LesIndividusGODeLaPop1 $LIndividu } } } Espionne "OK" Espionne "Lecture Du FichierGO du Proteome" #Gene Ontology du proteome humain##### set LesIndividusGODeLaPop2 {} if {1} { foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} lappend LesIndividusGODeLaPop2 [lsort -unique $LIndividu] } } Espionne "OK" Espionne "Calcul" set LeTexte {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set LesIndividusGO [set Tab(Cluster,$Cluster,LesIndividusGO)] ###GO GO GO GO################ Espionne "Calcul GO" foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop1] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tAll\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop2] { set GO [lindex $LeGO 0] set r [lindex $LeGO 2] if {$r <= 0} {continue} set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] Espionne "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" lappend LeTexte "Cluster $Cluster\tHumanProteome\tGO\tType\t$Type\t$Niv\t$GO\t$Def\t$Stat" } } Espionne "OK" Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierExisteGrid {fquery} { global PipeCollection if {$PipeCollection} { set fquery [file join "[RepertoireDuGenome]" "prottfa" "${fquery}"] } return [file exists $fquery] } proc FichierExonicMapHuman {Nom RepTFA RepBlast RepOut {AvecBlastOuSansBlast SansBlast} {var 0.05} {SeuilId None} {SplitWithGap Yes} {AlertId 0.95} {TailleMin 10}} { set FichierOut "$RepOut/$Nom" set FichierQuery "$RepTFA/$Nom" set FichierBlast "$RepBlast/$Nom" set FichierOut "$RepOut/$Nom" if {![file exists $FichierBlast]} {return} if {![file exists $FichierQuery]} {return} set NbSubject 50 set ExpectDeRef 1e-3 set TailleMin 10 Espionne "$Nom -> Opening the blast file" DepouilleLeBlast TabBlast $FichierBlast $ExpectDeRef $NbSubject if {![info exists TabBlast(NbSubject)]} {Espionne "$Nom -> $FichierBlast no hits found";return ""} set TailleQuery [set TabBlast(Taille)] set TypeDeBlast [set TabBlast(TypeDeBlast)] Espionne "$Nom -> Scanning all the contig" set NbMax 0 set NbMax_Min [expr $NbMax * (1 - $var)] set LesBanqueId {} set NbSubject [set TabBlast(NbSubject)] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [set TabBlast($i)] if {![string equal -nocase "hs" [string range $BId 0 1]]} {continue} regexp -nocase {([0-9a-z_]*):([0-9a-z]*)} $BId tmp Chromosome Contig if {[info exists TabTmp($BId,Nb) ]} {continue} set TabTmp($BId,Nb) 0 Espionne "$Nom -> $BId" foreach Base [LeProfilDeLAlignementDeLaQuery_TabBlast TabBlast $BId "BothSens"] {if {$Base != 0} {incr TabTmp($BId,Nb)}} if {[set TabTmp($BId,Nb)] < $NbMax_Min} {continue} lappend LesBanqueId $BId if {[set TabTmp($BId,Nb)] < $NbMax } {continue} set NbMax [set TabTmp($BId,Nb)] set NbMax_Min [expr $NbMax * (1 - $var)] set LesVieuxBanqueId $LesBanqueId set LesBanqueId {} foreach BId $LesVieuxBanqueId { if {[set TabTmp($BId,Nb)] < $NbMax_Min} {continue} lappend LesBanqueId $BId } } if {[info exists TabTmp]} {unset TabTmp} Espionne "$Nom -> done" Espionne "$Nom -> Computing the long area" set LesGrandesRegions [LesGrandesRegionsDuBlast TabBlast $LesBanqueId $SeuilId $SplitWithGap] Espionne "$Nom -> Computing the short area" set LesPetitesRegions [LesPetitesRegionsDesGrandesRegions $LesGrandesRegions ] Espionne "$Nom -> Computing the informations of the short area" set LesInfos [LesInfosDesRegionsDansLeBlast_TabBlast TabBlast $LesPetitesRegions $LesBanqueId $SeuilId "Contig"] set LesInfos [lsort -integer -index 0 $LesInfos] Espionne "$Nom -> done" set LesInfos [LaConservationDesMeilleuresRegionsRepetees $LesInfos $var $TailleMin] Espionne "$Nom -> Computing the best alignment for the exonic map" set i 0 set EstCeQuIlYAUneDiff 1 while {$EstCeQuIlYAUneDiff} { incr i if {$i == 10} {break} set LesRegionsUniquesParContig {} set LesRegionsRepeteesParContig {} foreach LInfoDeLaRegion $LesInfos { set NbArea [lindex $LInfoDeLaRegion 3] if {1 == $NbArea} {lappend LesRegionsUniquesParContig $LInfoDeLaRegion} if {1 < $NbArea} {lappend LesRegionsRepeteesParContig $LInfoDeLaRegion} } set LesRegionsDansLeBonOrdreDesContigs [LesRegionsUniquesDesContigsDansLeBonOrdre $LesRegionsUniquesParContig] set LesRegionsUniquesEtRepetees [LInsertionDesRegionsRepetees $LesRegionsRepeteesParContig $LesRegionsDansLeBonOrdreDesContigs $TailleQuery] set AiJeVuUneDiff 0 if {$LesInfos != $LesRegionsUniquesEtRepetees} {set AiJeVuUneDiff 1} if {$AiJeVuUneDiff} { set LesInfos $LesRegionsUniquesEtRepetees } else { set EstCeQuIlYAUneDiff 0 } if {0} { Espionne "#########ITERATION $i###########" EspionneL $LesInfos Espionne "" EspionneL $LesRegionsUniquesParContig Espionne "" EspionneL $LesRegionsDansLeBonOrdreDesContigs Espionne "" EspionneL $LesRegionsUniquesEtRepetees } } Espionne "$Nom -> done" set LesRegionsUniquesRepeteesEtAbsentes [LInsertionDesRegionsAbsentes $LesRegionsUniquesEtRepetees $TailleQuery] if {$AvecBlastOuSansBlast == "AvecBlast" && $TypeDeBlast == "BLASTN"} { set LesRegionsUniquesRepeteesEtAbsentes [LesRegionsAvecLesRegionsAbsentesBlastees $FichierQuery $LesRegionsUniquesRepeteesEtAbsentes $TailleQuery 10 1e5] set LesRegionsUniquesRepeteesEtAbsentes [LInsertionDesRegionsAbsentes $LesRegionsUniquesRepeteesEtAbsentes $TailleQuery] } set LesRegionsFusionnees [LesRegionsUniquesFusionneesDesContigs $LesRegionsUniquesRepeteesEtAbsentes $TailleMin] if {0} { Espionne "" EspionneL $LesRegionsUniquesEtRepetees Espionne "" EspionneL $LesRegionsUniquesEtRepetees Espionne "" EspionneL $LesRegionsUniquesRepeteesEtAbsentes Espionne "" EspionneL $LesRegionsFusionnees Espionne "" EspionneL $LesRegionsFusionnees } set Texte [TexteExonicMap_TabBlast TabBlast $Nom $FichierQuery $FichierBlast $LesRegionsFusionnees $AlertId $i] Espionne $Texte Sauve $Texte dans $FichierOut return $Texte } proc FichierExonicMapHumanPourTous {{NameRepTFA ""} {NameRepBlast ""} {DNAOrPROTEIN DNA} {AvecBlastOuSansBlast SansBlast} {LesNoms ""} {var 0.05} {SeuilId None} {SplitWithGap Yes} {AlertIdMin 0.8} {AlertIdMax 0.95} {Expect 0.001} {NbSubject 50} {TailleMin 10}} { set Banque "human" set Keep 0 if {[OuiOuNon "If some files exists. Would you want to conserve them?"]} {set Keep 1} set RepTFA "[RepertoireDuGenome]/$NameRepTFA" if {$NameRepBlast == ""} { if {$DNAOrPROTEIN == "DNA"} { set RepBlast "[RepertoireDuGenome]/${NameRepTFA}_blastn$Banque" } else { set RepBlast "[RepertoireDuGenome]/${NameRepTFA}_tblastn$Banque" } } else { set RepBlast "[RepertoireDuGenome]/$NameRepBlast" } if {![file exists $RepBlast]} {File mkdir $RepBlast} set RepOut "[RepertoireDuGenome]/${NameRepTFA}_exonicmap" if {![file exists $RepOut]} {File mkdir $RepOut } if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne "$Nom -> exonic map" set FileTFA "$RepTFA/$Nom" set FileTFAm "${FileTFA}.m" set FileBlast "$RepBlast/$Nom" set FileOut "$RepOut/$Nom" if {![file exists $FileTFA]} {continue} if {![EstCeQueLeFichierTFAEstConvenable $FileTFA]} {continue} set AlertId $AlertIdMax if {![regexp -nocase "Homo sapiens" [EnteteDuFichierTFA $FileTFA]]} {set AlertId $AlertIdMin} Espionne "$Nom -> blast against human genome" if {!$Keep || ![file exists $FileBlast]} { if {$DNAOrPROTEIN == "DNA"} { if {!$Keep || ![file exists $FileTFAm]} { set SeqTFA [MasqueLesRepeatsDuFichier $FileTFA] set Entete [EnteteDuTexteTFA $SeqTFA] set Seq [QueLaSequenceDuTexteTFA $SeqTFA] set LesRegions {} set LesRegions [concat $LesRegions [MasquePolyN $Seq "A" 9]] set LesRegions [concat $LesRegions [MasquePolyN $Seq "T" 9]] set LesRegions [concat $LesRegions [MasquePolyN $Seq "C" 9]] set LesRegions [concat $LesRegions [MasquePolyN $Seq "G" 9]] set SeqTFA [SequenceFormatTFA [MasqueLesRegions $Seq $LesRegions "N"] $Entete] Sauve $SeqTFA dans $FileTFAm } BlastNDuFichier $FileTFAm $Banque $FileBlast T $NbSubject $Expect 0 } else { TBlastNDuFichier $FileTFA $Banque 1 $FileBlast } } Espionne "$Nom -> exonic map in progress..." if {!$Keep || ![file exists $FileOut]} { FichierExonicMapHuman $Nom $RepTFA $RepBlast $RepOut $AvecBlastOuSansBlast $var $SeuilId $SplitWithGap $AlertId $TailleMin } } return } proc FichierFOF {Selection {Tmp ""}} { global RepertoireDuGenome global AccessDejaVus global FOFDejaVu Wup "Creates a file of filenames, each of one contains one of the sequences listed in the text Selection" JeMeSignale if { $Tmp == "" } { set FOF "tmp.[pid][NomDe ""].fof" } else { set FOF "$Tmp.fof" } if { [FormatDeLaSequence $Selection] == "tfas" } { TFAStoGCGs $Selection dans $FOF return "$FOF" } if {[info exists FOFDejaVu($Selection)]} { Sauve $FOFDejaVu($Selection) dans $FOF return "$FOF" } set Liste [split $Selection "\n"] catch {unset AccessDejaVus} foreach Ligne $Liste { if { [regexp "^Query=" $Ligne] } { set Access [QueryDeLaLigne $Ligne] lappend ListeFOF $Access set QueryAccess [file tail $Access] continue } set AccessOuFichier [lindex [split [string trim $Ligne] " "] 0] if { $AccessOuFichier == "" } { continue } set ListeDeFichiers [glob -nocomplain -- $AccessOuFichier] if { $ListeDeFichiers != "" } { foreach f $ListeDeFichiers { if {[file exists $f]} { lappend ListeFOF $f } } continue } if {[regexp {\*} $AccessOuFichier]} { set ListeDeAccess [split [FetchNoms $AccessOuFichier] " "] if { [llength $ListeDeAccess] != 0 } { foreach f $ListeDeAccess { lappend ListeFOF [Sauve [FetchCat "$f"] dans "[RepertoireDetravail]/$f"] } } continue } set Access $AccessOuFichier if {[regexp {^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+[ !]* [a-zA-Z0-9_]+} $Ligne]} { set Access [AccessDUneLigneBlast $Ligne] if {[regexp {/} $Access]} { lappend ListeFOF $Access continue } } if { [regexp {\:} $Access] } { set Banque [lindex [split $Access ":"] 0] set NomDeAccess [lindex [split $Access ":"] 1] } else { set NomDeAccess $Access } if {[info exists Banque]} { set Sequence [Fetche "$Banque:$NomDeAccess"] if { $Sequence != "" } { lappend ListeFOF [Sauve $Sequence dans "[RepertoireDeTravail]/$NomDeAccess"] continue } } set Sequence [Fetche "protein:$NomDeAccess"] if { $Sequence != "" } { lappend ListeFOF [Sauve $Sequence dans "[RepertoireDeTravail]/$NomDeAccess"] continue } set Sequence [Fetche "$NomDeAccess"] if { $Sequence != "" } { lappend ListeFOF [Sauve $Sequence dans "[RepertoireDeTravail]/$NomDeAccess"] continue } } Sauve [join $ListeFOF "\n"] dans $FOF set FOFDejaVu($Selection) [ContenuDuFichier $FOF] return "$FOF" } proc FichierFirstEFPourTous {NameRepTFA {LesNoms ""}} { set RepTFA "[RepertoireDuGenome]/$NameRepTFA" if {![file exists $RepTFA]} {continue} if {$LesNoms == "" } {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne $Nom set FichierTFA "$RepTFA/$Nom" if {![file exists $FichierTFA]} {continue} set FichierOUT "$FichierTFA.firstef" FirstEF $FichierTFA $FichierOUT } return } proc FichierFusionClXHDAParDistanceEtZscore {{SeuilDistance 300} {SeuilZscore 8} {SeuilDiffZScore 0} {LesTypes process}} { set FichierDonnees "[RepertoireDuGenome]/fiches/ZScoreDesClustersFusionnesParBestOntologyProttfaEtClusters" set FichierOut "[RepertoireDuGenome]/fiches/FusionClXHDAParDistanceEtZscore_${SeuilDistance}_${SeuilZscore}" set TypeDeRef [join $LesTypes " "] set F [open $FichierDonnees] set LesInfos {} while {[gets $F Ligne] >= 0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Cl1 [lindex $LaLigne 0 ] set Cl2 [lindex $LaLigne 1 ] if {$Cl1 == $Cl2 } {continue} set Type [lindex $LaLigne 4 ] if {$LesTypes != ""} {if {![regexp $Type $TypeDeRef]} {continue}} set Dist [lindex $LaLigne 2 ] if {$Dist > $SeuilDistance } {continue} set Z1 [lindex $LaLigne 6 ] if {$Z1 < $SeuilZscore } {continue} set DiffZ [lindex $LaLigne 8 ] if {$DiffZ < $SeuilDiffZScore} {continue} set GO [lindex $LaLigne 5 ] if {![info exists Tab($Cl1,LesClustersProches)]} { set Tab($Cl1,LesClustersProches) {} set Tab($Cl1,LesGOEnCommunAvecLesClustersProches) {} } if {![info exists Tab($Cl1,$Cl2,LesGOEnCommun)]} { lappend Tab($Cl1,LesClustersProches) $Cl2 set Tab($Cl1,$Cl2,LesGOEnCommun) {} } if {![info exists Tab($Cl1,$GO,LesClustersProches)]} { set Tab($Cl1,$GO,LesClustersProches) {} lappend Tab($Cl1,LesGOEnCommunAvecLesClustersProches) $GO } if {![info exists TabTmp($Cl1,$Cl2,$GO)]} { set TabTmp($Cl1,$Cl2,$GO) 1 lappend Tab($Cl1,$GO,LesClustersProches) $Cl2 lappend Tab($Cl1,$Cl2,LesGOEnCommun) $GO } } if {[info exists TabTmp]} {unset TabTmp} close $F set LesInfos {} foreach Cl1 [O2C2O LesClusters] { if {![info exists Tab($Cl1,LesGOEnCommunAvecLesClustersProches)]} {continue} foreach GO [set Tab($Cl1,LesGOEnCommunAvecLesClustersProches)] { if {![info exists Tab($Cl1,$GO,LesClustersProches)]} {continue} set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set LesClustersProchesReciproquement {} foreach Cl2 [lsort -unique [set Tab($Cl1,$GO,LesClustersProches)]] { if {![info exists Tab($Cl2,LesClustersProches)]} {continue} set AiJeVuMonCl1 0 foreach ClusterProcheDeCl2 [set Tab($Cl2,LesClustersProches)] { if {$ClusterProcheDeCl2 == $Cl1} {set AiJeVuMonCl1 1;break} } if {$AiJeVuMonCl1} {lappend LesClustersProchesReciproquement $Cl2} } if {$LesClustersProchesReciproquement == {}} {continue} set Clusters [join $LesClustersProchesReciproquement "\t"] Espionne "$Cl1\t$Type\t$GO\t$Def\t$Clusters" lappend LesInfos "$Cl1\t$Type\t$GO\t$Def\t$Clusters" } } Sauve [join $LesInfos "\n"] dans $FichierOut return } proc FichierFusionDeClustersXHdaDansOperonsParDistanceDPC {{SeuilDistanceDPCEntreClusters 200}} { global RepertoireDuGenome set FileClustersFusionnes "$RepertoireDuGenome/fiches/clustersXHda_dansoperons_fusionnes_distanceDPC" set LesInfos {} set LesClustersFusionnes {} set i 0 foreach Operon [O2C2O LesOperons] { Espionne $Operon foreach Cluster1 [O2C2O Operon $Operon LesClusters] { foreach Cluster2 [O2C2O Operon $Operon LesClusters] { set LInfo {} if {[info exists TabTmp($Cluster1,$Cluster2)]} {continue} if {$Cluster1 == $Cluster2} {continue} set TabTmp($Cluster1,$Cluster2) 1 set TabTmp($Cluster2,$Cluster1) 1 set Distance [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance] if {$Distance > $SeuilDistanceDPCEntreClusters} {continue} lappend LesInfos "$Operon\t$Cluster1\t$Cluster2\t$Distance" lappend LesClustersFusionnes $Cluster1 lappend LesClustersFusionnes $Cluster2 incr i } } } #EspionneL $LesInfos Espionne $i set LesClustersFusionnes [lsort -unique $LesClustersFusionnes] Espionne $LesClustersFusionnes Espionne [llength $LesClustersFusionnes] set NbOrfsClustersFusionnes 0 foreach ClusterFusionne $LesClustersFusionnes { set NbOrfs [O2C2O Cluster $ClusterFusionne TailleCluster] incr NbOrfsClustersFusionnes $NbOrfs } Espionne $NbOrfsClustersFusionnes Sauve [join $LesInfos "\n"] dans $FileClustersFusionnes if {[info exists TabTmp]} {unset TabTmp} return $FileClustersFusionnes } proc FichierFusionDeClustersXHdaParDistanceDPC {{SeuilDistanceDPCEntreClusters 200}} { global RepertoireDuGenome set FileClustersFusionnes "$RepertoireDuGenome/fiches/clustersXHdafusionnes_distanceDPC" set LesInfos {} set LesClustersFusionnes {} set i 0 foreach Cluster1 [O2C2O LesClusters] { foreach Cluster2 [O2C2O LesClusters] { set LInfo {} if {[info exists TabTmp($Cluster1,$Cluster2)]} {continue} if {$Cluster1 == $Cluster2} {continue} set TabTmp($Cluster1,$Cluster2) 1 set TabTmp($Cluster2,$Cluster1) 1 set Distance [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance] if {$Distance > $SeuilDistanceDPCEntreClusters} {continue} lappend LesInfos "$Cluster1\t$Cluster2\t$Distance" Espionne "$Cluster1\t$Cluster2\t$Distance" lappend LesClustersFusionnes $Cluster1 lappend LesClustersFusionnes $Cluster2 incr i } } set LesClustersFusionnes [lsort -unique $LesClustersFusionnes] Espionne $LesClustersFusionnes Espionne [llength $LesClustersFusionnes] set NbOrfsClustersFusionnes 0 foreach ClusterFusionne $LesClustersFusionnes { set NbOrfs [O2C2O Cluster $ClusterFusionne TailleCluster] incr NbOrfsClustersFusionnes $NbOrfs } Espionne $NbOrfsClustersFusionnes Sauve [join $LesInfos "\n"] dans $FileClustersFusionnes if {![info exists TabTmp]} {unset TabTmp} return $FileClustersFusionnes } proc FichierFusionDesClXHDA {{SeuilD 300} {SeuilZ 8} {SeuilDiffZ 0}} { set FichierOut "[RepertoireDuGenome]/fiches/FusionClXHDAParDistanceEtZscore_${SeuilDistance}_${SeuilZscore}" set ToutesLesFusionsDeClusters {} foreach Cluster [O2C2O LesClusters] { if {[info exists TabTmp($Cluster)]} {continue} set LesClustersProches [list $Cluster] set LesClustersProches [LesClustersProches $Cluster $SeuilD $SeuilZ $SeuilDiffZ] foreach ClusterProche $LesClustersProches { set TabTmp($Cluster) 1 } lappend ToutesLesFusionsDeClusters $LesClustersProches } set LesClustersFusionnesTot [linsert $] set TypeDeRef [join $LesTypes " "] set F [open $FichierDonnees] set LesInfos {} while {[gets $F Ligne] >= 0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Cl1 [lindex $LaLigne 0 ] set Cl2 [lindex $LaLigne 1 ] if {$Cl1 == $Cl2 } {continue} set Type [lindex $LaLigne 4 ] if {$LesTypes != ""} {if {![regexp $Type $TypeDeRef]} {continue}} set Dist [lindex $LaLigne 2 ] if {$Dist > $SeuilDistance } {continue} set Z1 [lindex $LaLigne 6 ] if {$Z1 < $SeuilZscore } {continue} set DiffZ [lindex $LaLigne 8 ] if {$DiffZ < $SeuilDiffZScore} {continue} set GO [lindex $LaLigne 5 ] if {![info exists Tab($Cl1,LesClustersProches)]} { set Tab($Cl1,LesClustersProches) {} set Tab($Cl1,LesGOEnCommunAvecLesClustersProches) {} } if {![info exists Tab($Cl1,$Cl2,LesGOEnCommun)]} { lappend Tab($Cl1,LesClustersProches) $Cl2 set Tab($Cl1,$Cl2,LesGOEnCommun) {} } if {![info exists Tab($Cl1,$GO,LesClustersProches)]} { set Tab($Cl1,$GO,LesClustersProches) {} lappend Tab($Cl1,LesGOEnCommunAvecLesClustersProches) $GO } if {![info exists TabTmp($Cl1,$Cl2,$GO)]} { set TabTmp($Cl1,$Cl2,$GO) 1 lappend Tab($Cl1,$GO,LesClustersProches) $Cl2 lappend Tab($Cl1,$Cl2,LesGOEnCommun) $GO } } if {[info exists TabTmp]} {unset TabTmp} close $F set LesInfos {} foreach Cl1 [O2C2O LesClusters] { if {![info exists Tab($Cl1,LesGOEnCommunAvecLesClustersProches)]} {continue} foreach GO [set Tab($Cl1,LesGOEnCommunAvecLesClustersProches)] { if {![info exists Tab($Cl1,$GO,LesClustersProches)]} {continue} set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set LesClustersProchesReciproquement {} foreach Cl2 [lsort -unique [set Tab($Cl1,$GO,LesClustersProches)]] { if {![info exists Tab($Cl2,LesClustersProches)]} {continue} set AiJeVuMonCl1 0 foreach ClusterProcheDeCl2 [set Tab($Cl2,LesClustersProches)] { if {$ClusterProcheDeCl2 == $Cl1} {set AiJeVuMonCl1 1;break} } if {$AiJeVuMonCl1} {lappend LesClustersProchesReciproquement $Cl2} } if {$LesClustersProchesReciproquement == {}} {continue} set Clusters [join $LesClustersProchesReciproquement "\t"] Espionne "$Cl1\t$Type\t$GO\t$Def\t$Clusters" lappend LesInfos "$Cl1\t$Type\t$GO\t$Def\t$Clusters" } } Sauve [join $LesInfos "\n"] dans $FichierOut return } proc FichierGO2Type {FichierGO} { set Type "" regsub {\.ontology} [file tail $FichierGO] "" Type return $Type } proc FichierGOPourPlessy {FichierAcc FichierOut {NiveauGOMin 2}} { set LesAccess {} set LeTexte {} set F [open $FichierAcc] set i 0 while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set Access $Ligne if {![info exists Tab($Access,LesGO)]} { lappend LesAccess $Access set Tab($Access,LesGO) {} } else { continue } incr i #if {10<$i} {break} set LesAccessProt [LesIdDeLaBanqueRelieALAccess $Access de genbankfull dans protein] set AiJeVuUneProt 0 foreach AccessProt $LesAccessProt { set AiJeVuUneProt 1 set AiJeVuDeGO 0 foreach GO [Access2GO $AccessProt] { foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Ligne "$Access\t$AccessProt\t$Type\t$GO\t$Def" Espionne $Ligne lappend LeTexte $Ligne set AiJeVuDeGO 1 lappend Tab($Access,LesGO) $GO } } if {$AiJeVuDeGO} {continue} set Ligne "$Access\t$AccessProt" Espionne $Ligne lappend LeTexte $Ligne } if {$AiJeVuUneProt} {continue} set Ligne $Access Espionne $Ligne lappend LeTexte $Ligne } close $F set LesGODeRef {} set LesAccess [lsort -unique $LesAccess] set NbAccess [llength $LesAccess] set NbAccessAvecGO 0 set NbGO 0 foreach Access $LesAccess { set LesGO [lsort -unique [EnterrerLesAncetresGO [set Tab($Access,LesGO)]]] if {$LesGO == {}} {continue} incr NbAccessAvecGO set LesGO [lsort -unique [concat $LesGO [TousLesAncetresGODesGO $LesGO]]] foreach GO $LesGO { Espionne "$Access $GO" if {![info exists Tab($GO,n)]} { lappend LesGODeRef $GO set Tab($GO,n) 0 } incr Tab($GO,n) incr NbGO } } foreach GO $LesGODeRef { set n [set Tab($GO,n)] foreach Type [GODB GO $GO LesTypes] { set Niv [lindex [lsort -real [GODB Type $Type GO $GO LesNiveaux]] 0] if {$Niv < $NiveauGOMin} {continue} set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] Espionne "$Type\t$GO\t$Niv\t$n\t$NbGO\t$NbAccessAvecGO\t$NbAccess\t$Def" lappend LeTexte "$Type\t$GO\t$Niv\t$n\t$NbGO\t$NbAccessAvecGO\t$NbAccess\t$Def" } } Sauve [join $LeTexte "\n"] dans $FichierOut return } proc FichierGeneNamePourTous {{LesNoms ""} {IdDesProtId 0.98} {NormMDMin 0.5}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FichierGeneName "[RepertoireDuGenome]/fiches/GeneName" set Continue 0 if {[file exists $FichierGeneName]} { if {[OuiOuNon "$FichierGeneName exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $FichierGeneName] { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] set Access [lindex $LaLigne 1] if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} set DejaVu($Nom,$Access) 1 } if {[info exists DejaVu($Nom)]} {unset DejaVu($Nom)} } else { if {[OuiOuNon "$FichierGeneName exists.\nWould you want to deltree this file?"]} { File delete -force $FichierGeneName } } } foreach Nom $LesNoms { if {$Continue && [info exists DejaVu($Nom)]} {continue} foreach Access [LesAccessProchesDeLaProteineDeRef $Nom $IdDesProtId AvecCluster $NormMDMin] { if {[EstUnAccessPDB $Access]} {continue} set Page [PageInfo $Access protein] set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] foreach GeneName [LesGeneNameDeLAccess_PageInfo $Page] { foreach Orga $LesOrgas { Espionne "$Nom\t$Access\t$Orga\t$GeneName" AppendAuFichier $FichierGeneName "$Nom\t$Access\t$Orga\t$GeneName" } } } } return } proc FichierGeneOntologyChoisi {FichierGO {FichierGOOut ""} {FichierOrf2Cluster ""} {FichierGOChoisi ""}} { if {$FichierGOOut == ""} {set FichierGOOut "[RepertoireDuGenome]/fiches/GeneOntology_choosen"} if {$FichierGOChoisi == ""} {set FichierGOChoisi "[RepertoireDuGenome]/fiches/ChoosenOntology"} if {![file exists $FichierGOChoisi ]} {return} if {$FichierOrf2Cluster == ""} {set FichierOrf2Cluster "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression"} if {![file exists $FichierOrf2Cluster]} {return} if {![file exists $FichierGO ]} {return} foreach Nom [ListeDesPABs] { Espionne $Nom set LesGOChoisis {} set LesGO {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LesGO $GO foreach GOPere [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LesGO $GOPere } } foreach GO [ElimineLesRedondancesDansUneListe $LesGO] { if {[InterrogeChoosenGeneOntology $FichierGOChoisi GOChoisi $GO Type] == ""} {continue} lappend LesGOChoisis $GO } if {$LesGOChoisis == {}} { set Tab($Nom,LesGOChoisis) {} continue } set Tab($Nom,LesGOChoisis) [EnterrerLesAncetresOntologiques [ElimineLesRedondancesDansUneListe $LesGOChoisis]] } foreach Nom [ListeDesPABs] { Espionne $Nom set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster $Nom Cluster] if {![info exists Tab($Nom,LesGOChoisis)]} { AppendAuFichier $FichierGOOut "$Nom\t$Cluster\t$Nom\tNoOntologyFound" continue } if {[set Tab($Nom,LesGOChoisis)] == ""} { AppendAuFichier $FichierGOOut "$Nom\t$Cluster\t$Nom\tNoOntologyFound" continue } foreach GO [set Tab($Nom,LesGOChoisis)] { set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set Ancetres [join [TousLesAncetresOntologiques $Type $GO] "\t"] AppendAuFichier $FichierGOOut "$Nom\t$Cluster\t$Nom\t$Type\t$GO\t$Def\t$Ancetres" } } return } proc FichierGeneOntologyDesBlastPPourTous {{Expect 1e-10} {NbSubject 10} {LesNoms ""}} { set RepBlastP "[RepertoireDuGenome]/blastp" set FichierOntology "[RepertoireDuGenome]/fiches/GeneOntology_blastp" if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} set Continue 0 if {[file exists $FichierOntology]} { if {[OuiOuNon "$FichierOntology exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" set LesLignes {} foreach Ligne [LesLignesDuFichier $FichierOntology] { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] if {$Nom == ""} {continue} if {[lindex $LaLigne 2] == "NoProteinFound"} {continue} lappend LesLignes $Ligne if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} } Sauve [join $LesLignes "\n"] dans $FichierOntology } else { if {[OuiOuNon "$FichierOntology exists.\nWould you want to deltree this file?"]} { File delete -force $FichierOntology } } } foreach Nom $LesNoms { if {$Continue && [info exists DejaVu($Nom)]} {continue} set FichierBlast "$RepBlastP/$Nom" Espionne "$Nom -> Gene Ontology of blastp $FichierBlast" if {![file exists $FichierBlast]} {continue} set LesHits [LesHitsDuBlast_FC $FichierBlast $Expect 1e200] if {$LesHits == {}} {continue} set i 0 set LesOntologies {} foreach LeHit $LesHits { set BId [lindex $LeHit 0] if {[EstUnAccessPDB $BId]} {continue} incr i if {$NbSubject < $i} {break} set AccessProt [string toupper [lindex $LeHit 1]] Espionne $AccessProt foreach LOntologie [GeneOntologyDeLAccess $AccessProt] { AppendAuFichier $FichierOntology "$Nom\t$i\t[join $LOntologie "\t"]" } } } return } proc FichierGeneOntologyDesClustersDeMSFPourTous {{LesNoms ""}} { set RepMSF "[RepertoireDuGenome]/msf" set FichierOntology "[RepertoireDuGenome]/fiches/GeneOntology_clustersdesmsf" if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set Continue 0 if {[file exists $FichierOntology]} { if {[OuiOuNon "$FichierOntology exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" set LesLignes {} foreach Ligne [LesLignesDuFichier $FichierOntology] { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] if {$Nom == ""} {continue} if {[lindex $LaLigne 2] == "NoProteinFound"} {continue} lappend LesLignes $Ligne if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} } Sauve [join $LesLignes "\n"] dans $FichierOntology } else { if {[OuiOuNon "$FichierOntology exists.\nWould you want to deltree this file?"]} { File delete -force $FichierOntology } } } foreach Nom $LesNoms { if {$Continue && [info exists DejaVu($Nom)]} {continue} set FichierClust "$RepMSF/${Nom}.clust" Espionne "$Nom -> Gene Ontology of clusters of msf $FichierClust" if {![file exists $FichierClust]} {continue} set LesClusters [InterrogeLesClustersDesMSF $FichierClust LesClusters] if {$LesClusters == {}} {continue} foreach Cluster [lsort $LesClusters] { set LesAccess [InterrogeLesClustersDesMSF $FichierClust Cluster $Cluster LesAccess] if {$LesAccess == {}} {continue} foreach Access $LesAccess { #Elimine les pdb### if {[EstUnAccessPDB $Access]} {continue} set SuisJeSurLaQuery 0 if {$Access == $Nom} { set Access [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {[string equal -nocase $Access "NoProtein"]} { set Access [InterrogeContigAndProt $Nom Protein Access] } if {$Access == ""} {continue} set SuisJeSurLaQuery 1 } Espionne "$Nom $Cluster $Access" foreach LOntologie [GeneOntologyDeLAccess $Access] { if {$SuisJeSurLaQuery} {set LOntologie [lreplace LOntologie 0 0 $Nom]} AppendAuFichier $FichierOntology "$Nom\t$Cluster\t[join $LOntologie "\t"]" } } } InterrogeLesClustersDesMSF unset } return } proc FichierGeneOntologyDesClustersFusionnesPourTous {FichierGO {LesNoms ""} {FileGOOut ""} {P 0.70} {FractionDuMax 0.7} {NbGOParTypePourLesMSF ""}} { if {$FileGOOut == ""} {set FileGOOut "[RepertoireDuGenome]/fiches/GeneOntology_ClustersFusionnes"} if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne $Nom set ClusterXHDA [O2C2O Orf $Nom Cluster] set ClusterFusionne [O2C2O Cluster $ClusterXHDA ClusterFusionne] if {![info exists TabGO($ClusterFusionne,LesGO)]} {set TabGO($ClusterFusionne,LesGO) {}} ###Determination du cluster du msf contenant notre proteine###### foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {$GO == ""} {continue} lappend TabGO($ClusterFusionne,LesGO) $GO } } set LesOntologies {} foreach ClusterFusionne [O2C2O LesClustersFusionnes] { if {![info exists TabGO($ClusterFusionne,LesGO)]} { lappend LesOntologies [join [list $ClusterFusionne $ClusterFusionne $ClusterFusionne "NoOntologyFound"] "\t"] continue } set LesGO [set TabGO($ClusterFusionne,LesGO)] ###Selection des GO les plus representatifs de ce cluster####### set LesGO [LaSelectionDesMeilleursGO $LesGO $P $FractionDuMax $NbGOParTypePourLesMSF] if {$LesGO == {}} { lappend LesOntologies [join [list $ClusterFusionne $ClusterFusionne $ClusterFusionne "NoOntologyFound"] "\t"] continue } ###On elimine les ancetres et les doublons### foreach GO [EnterrerLesAncetresOntologiques [ElimineLesRedondancesDansUneListe $LesGO]] { set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set LesAncetres [TousLesAncetresOntologiques $Type $GO] set Ontologie [join [list $ClusterFusionne $ClusterFusionne $ClusterFusionne $Type $GO $Def [join $LesAncetres "\t"]] "\t"] Espionne $Ontologie lappend LesOntologies $Ontologie } } Sauve [join $LesOntologies "\n"] dans $FileGOOut return } proc FichierGeneOntologyDesClustersXHDAPourTous {FichierGO {LesNoms ""} {FileGOOut ""} {P 0.70} {FractionDuMax 0.7} {NbGOParTypePourLesMSF ""}} { if {$FileGOOut == ""} {set FileGOOut "[RepertoireDuGenome]/fiches/GeneOntology_ClustersXHda"} if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne $Nom set ClusterXHDA [O2C2O Orf $Nom Cluster] if {![info exists TabGO($ClusterXHDA,LesGO)]} {set TabGO($ClusterXHDA,LesGO) {}} ###Determination du cluster du msf contenant notre proteine###### foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {$GO == ""} {continue} lappend TabGO($ClusterXHDA,LesGO) $GO } } set LesOntologies {} foreach ClusterXHDA [O2C2O LesClusters] { if {![info exists TabGO($ClusterXHDA,LesGO)]} { lappend LesOntologies [join [list $ClusterXHDA $ClusterXHDA $ClusterXHDA "NoOntologyFound"] "\t"] continue } set LesGO [set TabGO($ClusterXHDA,LesGO)] ###Selection des GO les plus representatifs de ce cluster####### set LesGO [LaSelectionDesMeilleursGO $LesGO $P $FractionDuMax $NbGOParTypePourLesMSF] if {$LesGO == {}} { lappend LesOntologies [join [list $ClusterXHDA $ClusterXHDA $ClusterXHDA "NoOntologyFound"] "\t"] continue } ###On elimine les ancetres et les doublons### foreach GO [EnterrerLesAncetresOntologiques [ElimineLesRedondancesDansUneListe $LesGO]] { set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set LesAncetres [TousLesAncetresOntologiques $Type $GO] set Ontologie [join [list $ClusterXHDA $ClusterXHDA $ClusterXHDA $Type $GO $Def [join $LesAncetres "\t"]] "\t"] Espionne $Ontologie lappend LesOntologies $Ontologie } } Sauve [join $LesOntologies "\n"] dans $FileGOOut return } proc FichierGeneOntologyDesNomsInteressants_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierOUT "[RepertoireDuGenome]/fiches/GeneOntology_NomsInteressants" foreach Nom [LesNoms $PABouNomsInteressantsouListeouFichier] {set Tab($Nom) 1} set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" set LeTexte {} set F [open $FichierGO] while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set Nom [lindex [split $Ligne "\t"] 0] if {![info exists Tab($Nom)]} {continue} Espionne $Ligne AppendAuFichier $FichierOUT $Ligne } close $F return } proc FichierGeneOntologyDesProttfaPourTous {{LesNoms ""} {Id 0.98}} { set FichierOntology "[RepertoireDuGenome]/fiches/GeneOntology_prottfa" if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} set ToutesLesOntologies {} set Continue 0 if {[file exists $FichierOntology]} { if {[OuiOuNon "$FichierOntology exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $FichierOntology] { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] if {$Nom == ""} {continue} if {[lindex $LaLigne 2] == "NoProteinFound"} {continue} lappend ToutesLesOntologies $LaLigne if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} } } else { if {[OuiOuNon "$FichierOntology exists.\nWould you want to deltree this file?"]} { File delete -force $FichierOntology } } } foreach Nom $LesNoms { if {$Continue && [info exists DejaVu($Nom)]} {continue} Espionne "$Nom -> Gene Ontology of prottfa" set FichierProtTFA "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FichierProtTFA]} {continue} if {[info exists TabFeuille]} {unset TabFeuille} if {[info exists TabAncetre]} {unset TabAncetre} set Access [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {[string equal -nocase $Access "NoProtein"]} { set Access [InterrogeContigAndProt $Nom Protein Access] } set FileMSF "[RepertoireDuGenome]/msf/$Nom" set LesAccess {} if {$Access != ""} {lappend LesAccess $Access} if {[file exists $FileMSF]} { set LesAccess [concat $LesAccess [LesAccessDesProteinesIdentiquesDansMSF $FileMSF $Nom $Id]] } if {$LesAccess == {}} {continue} set LesOntologies {} foreach Access [ElimineLesRedondancesDansUneListe $LesAccess] { if {$Access == ""} {continue} foreach LOntologie [GeneOntologyDeLAccess $Access] { set LOntologie [linsert $LOntologie 0 $Nom] set LOntologie [linsert $LOntologie 1 1] set GO [lindex $LOntologie 4] set TabFeuille($GO) 0 foreach Ancetre [lindex $LOntologie 6] { set TabAncetre($Ancetre) 1 } lappend LesOntologies $LOntologie } } if {$LesOntologies == {}} {continue} foreach LOntologie $LesOntologies { set GO [lindex $LOntologie 4] if {[info exists TabAncetre($GO)]} {continue} set n [set TabFeuille($GO)] if {1 <= $n} {continue} Espionne $LOntologie incr TabFeuille($GO) lappend ToutesLesOntologies $LOntologie } } set LeTexte {} foreach LOntology [lsort -index 0 [lsort -index 1 $ToutesLesOntologies]] { lappend LeTexte [join $LOntology "\t"] } Sauve [join $LeTexte "\n"] dans $FichierOntology return $ToutesLesOntologies } proc FichierGeneOntologyDuProteome {FichierOut {Organism "Homo sapiens"}} { Espionne "Database searches running ..." set Commande "[ProgPathway getz] \"\\\[swissprot\-org:$Organism\\\] \| \\\[sptrembl\-org:$Organism\\\] \" \-f id" #set Commande "[ProgPathway getz] \"\\\[swissprot\-org:$Organism\\\] \" \-f id" if {[catch {set Out [eval exec $Commande]} Message]} {Espionne $Message;return} Espionne "Database searches OK ..." set LePaquetDId {} set LesPaquetsDId {} set NbIdParPaquets 1000 set i 0 foreach Ligne [split $Out "\n"] { set BId [BanqueIdDeLaProt_PageInfo $Ligne] if {$BId == ""} {continue} incr i if {$i < $NbIdParPaquets} {lappend LePaquetDId $BId;continue} lappend LePaquetDId $BId lappend LesPaquetsDId $LePaquetDId set i 0 set LePaquetDId {} } if {$LePaquetDId != {}} {lappend LesPaquetsDId $LePaquetDId} set LeTexte {} set NbProt 0 foreach LePaquetDId $LesPaquetsDId { AskLesPagesInfos load $LePaquetDId protein foreach BId $LePaquetDId { set Page [AskLesPagesInfos ask $BId] if {$Page == ""} {continue} set LesAccess [LesAccessDeLaPageInfo $Page] set LAiJeDejaVu 0 foreach Access $LesAccess { if {[info exists TabDejaVu($Access)]} {set LAiJeDejaVu 1} set TabDejaVu($Access) 1 } if {$LAiJeDejaVu} {continue} incr NbProt set LesGO [PageInfo2GO $Page] if {$LesGO == {}} { set Ligne "$BId\t$NbProt\t$BId\tNoOntologyFound" Espionne $Ligne lappend LeTexte $Ligne continue } foreach GO $LesGO { foreach Type [GODB GO $GO LesTypes] { set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Ancetres [join [TousLesAncetresGO $Type $GO] "\t"] set Ligne "$BId\t$NbProt\t$BId\t$Type\t$GO\t$Def\t$Ancetres" Espionne $Ligne lappend LeTexte $Ligne } } } AskLesPagesInfos unset } if {$LeTexte == {}} {return} Sauve [join $LeTexte "\n"] dans $FichierOut return } proc FichierGenomesEukaryotes {} { global RepertoireDuGenome global LesGenomesComplets set LesOrgaEukaryotes {} foreach Orga $LesGenomesComplets { set Phylum [PhylumDuOrganisme $Orga] if {$Phylum != "E"} {continue} lappend LesOrgaEukaryotes $Orga } lappend LesOrgaEukaryotes "Homo sapiens" set File "$RepertoireDuGenome/fiches/lesgenomeseukaryotes" if {$LesOrgaEukaryotes == {}} {return ""} Sauve [join $LesOrgaEukaryotes "\n"] dans $File return $File } proc FichierHTML {Nom} { set Fichier "[RepertoireDuGenome]/bilan/$Nom" set NomFichier [file tail $Fichier] set TexteHtml [Html_DuTexteTelQuel $Fichier $NomFichier] set Fichier_html "[RepertoireDuGenome]/BilanHTML/$NomFichier.html" Sauve $TexteHtml dans $Fichier_html } proc FichierHTMLPourTous {Prefix} { foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/bilan/$Prefix*"] { Espionne $Fichier set NomFichier [file tail $Fichier] set TexteHtml [Html_DuTexteTelQuel $Fichier $NomFichier] if {![file exists "[RepertoireDuGenome]/bilan/html_nolink"]} {File mkdir "[RepertoireDuGenome]/bilan/html_nolink"} set Fichier_html "[RepertoireDuGenome]/bilan/html_nolink/$NomFichier.html" Sauve $TexteHtml dans $Fichier_html } } proc FichierKEGGPourTous {{LesNoms ""} {IdDesProtId 0.98} {NormMDMin 0.5}} { set FichierKEGG "[RepertoireDuGenome]/fiches/Kegg" if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set JeContinue 0 if {[file exists $FichierKEGG] && [OuiOuNon "$FichierKEGG exists. Would you want to continue?"]} { set JeContinue 1 foreach Ligne [LesLignesDuFichier $FichierKEGG] { if {$Ligne == ""} {continue} scan $Ligne "%s" Nom set TabDejaVu($Nom) 1 } } set FichierGeneOntology [ChoixParmi [glob -nocomplain "[RepertoireDuGenome]/fiches/GeneOntology*"]] foreach Nom $LesNoms { if {$JeContinue && [info exists TabDejaVu($Nom)]} {continue} Espionne $Nom set FileMSF "[RepertoireDuGenome]/msf/$Nom" set FileClust "${FileMSF}.clust" foreach Ligne [KEGG $Nom $FileMSF $FileClust $IdDesProtId $NormMDMin] { AppendAuFichier $FichierKEGG $Ligne } } return } proc FichierLMS {Nom ReInitialise} { global RepertoireDuGenome set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" if {![file exists $FichierTFA]} { Espionne "$Nom -> $FichierTFA does not exist." return "" } if {[QueLaSequenceDuTFA $FichierTFA] == ""} { Espionne "$Nom -> $FichierTFA empty" return "" } set RepLMS "$RepertoireDuGenome/lms" if {![file exists $RepLMS]} {File mkdir $RepLMS} set FichierLMS "$RepLMS/$Nom" if {[file exists $FichierLMS] && $ReInitialise == 0} {return ""} set Rep [RepertoireDeTravail] set FichierBlast "$Rep/${Nom}.blastp" set EditCommand 0 set Banque "protall" set Expect 10000 set Filtre 1 set ShowSubject 10000 Espionne "$Nom -> blastp" BlastPPourBallast $FichierTFA $FichierBlast $EditCommand $Banque $Expect $Filtre $ShowSubject if {[file exists $FichierBlast]} {Espionne "$FichierBlast exists"} Espionne "$Nom -> ballast" BallastUnBlastP $FichierBlast $Rep set FichierBallast $FichierBlast Espionne "$Nom -> Extracting the number of LMS for all the Access" set Texte [FichierLMSDesAccessDuBallast $FichierBallast] Espionne "$Nom -> Saving the results in $FichierLMS" Sauve $Texte dans "$FichierLMS" Espionne "$Nom -> Destroying the ballast files" foreach File [glob -nocomplain "$Rep/$FichierBallast"] { File delete -force "$File" File delete -force "$File.anchors" File delete -force "$File.anclist" File delete -force "$File.list" File delete -force "$File.mask" File delete -force "$File.motifs" File delete -force "$File.msf" File delete -force "$File.prof" } return "" } proc FichierLMSDesAccessDuBallast {FichierBallast} { global RepertoireDuGenome if {![file exists $FichierBallast]} { Espionne "$FichierBallast does not exist." return "" } set FichierMotifs "$FichierBallast.motifs" if {![file exists $FichierMotifs]} { Espionne "$FichierMotifs does not exist." return "" } set FichierAnchors "$FichierBallast.anchors" if {![file exists $FichierAnchors]} { Espionne "$FichierAnchors does not exist." return "" } set LesLMS {} set nLMS 0 foreach Ligne [LesLignesDuFichier $FichierMotifs] { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} if {[regexp "Suggested Words" $Ligne]} {continue} set Ligne [string trim $Ligne] scan $Ligne "%d %s %d" DebutLMS Separateur FinLMS incr nLMS lappend LesLMS [list "$DebutLMS" "$FinLMS" "$nLMS"] } set LesAccess {} foreach Ligne [LesLignesDuFichier $FichierAnchors] { if {![regexp -nocase "seq:" $Ligne]} {continue} if {[info exists LMS]} {unset LMS} if {[info exists Access] } {unset Access } if {[info exists Position]} {unset Position} scan $Ligne "%s %s %s %s %d %s %d" Seq Query Access Pos Pos1 Beg Position if {![info exists TabAccess($Access)]} { lappend LesAccess $Access set TabAccess($Access) {} } set TrouveLeLMS 0 foreach LeLMS $LesLMS { set Debut [lindex $LeLMS 0] set Fin [lindex $LeLMS 1] if { $Debut <= $Position && $Position <= $Fin} { set nLMS [lindex $LeLMS 2] lappend TabAccess($Access) $nLMS set TrouveLeLMS 1 break } } if {$TrouveLeLMS == 0} { Espionne "$Nom -> ERROR $Access $Position ERROR" } } set Texte "" foreach Access $LesAccess { append Texte "ID $Access\n" set LesnLMSs [set TabAccess($Access)] set NbCar 0 append Texte "CA " foreach nLMS $LesnLMSs { set n [string length $nLMS] set NbCar [expr $NbCar + $n] if {100 < $NbCar} {set NbCar 0;append Texte "\nCA "} append Texte "$nLMS;" } append Texte "\nDR prot;$Access;prot." append Texte "\n//\n" } return $Texte } proc FichierLMSPourTous {{LesNoms ""}} { global RepertoireDuGenome set RepLMS "$RepertoireDuGenome/lms" if {![file exists $RepLMS]} {File mkdir $RepLMS} set ReInitialise 1 if {0 < [llength [glob -nocomplain "$RepLMS/*"]]} { if {[OuiOuNon "Some files exists in $RepLMS\nDo I conserv them?"]} {set ReInitialise 0} } if {$LesNoms == {} } {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { FichierLMS $Nom $ReInitialise } return "" } proc FichierLesOperons {} { ###Creation du fichier contenant tous les operons### set FileOperons "[RepertoireDuGenome]/fiches/operons" if {[file exists $FileOperons]} { set LesOperons [LesLignesDuFichier $FileOperons] return $LesOperons } set LesOperons {} set LOperon {} set PremierDejaMis 0 set i 0 foreach Orf [ListeDesPABs] { set Liste [ListeDesOrganismesAyantMemeOperon $Orf] set Voisin [lindex $Liste 0] set LesOrgas [lrange $Liste 1 end] set SuisJeDansUnOperon 0 foreach Orga $LesOrgas { if { [TooCloseOrganism $Orga]} { continue } if { ![OrgaInteressant $Orga]} { continue } set SuisJeDansUnOperon 1 } if {$SuisJeDansUnOperon} { if { ! $PremierDejaMis } { incr i lappend LOperon $i $Voisin set PremierDejaMis 1 } lappend LOperon $Orf } else { if {[llength $LOperon] > 1} { Espionne $LOperon lappend LesOperons $LOperon } set PremierDejaMis 0 set LOperon {} } } if {[llength $LOperon] > 1} { Espionne $LOperon lappend LesOperons $LOperon } Sauve [join $LesOperons "\n"] dans $FileOperons return $LesOperons } proc FichierMacsimPourTous {{LesNoms ""}} { set RepRSF "[RepertoireDuGenome]/rsf" if {![file exists $RepRSF]} {File mkdir $RepRSF} set RepMSF "[RepertoireDuGenome]/msf" set Keep 1 if {[OuiOuNon "If some files exists in $RepRSF, Do you want to delete them?"]} {set Keep 0} if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne $Nom set FileRSF "$RepRSF/$Nom" set FileMSF "$RepMSF/$Nom" if {![file exists $FileMSF]} {continue} if {$Keep && [file exists $FileRSF]} {continue} Macsim $FileMSF $FileRSF } return } proc FichierMemeNomMaisDifferent {} { set Rep1 [ChoisirUnRepertoire "Choisir Le Repertoire 1"] set Rep2 [ChoisirUnRepertoire "Choisir Le Repertoire 2"] foreach File1 [glob -nocomplain "$Rep1/*"] { set Name [file tail $File1] if {![file exists "$Rep2/Name"]} {continue} set File2 "$Rep2/Name" if {[ContenuDuFichier $File1] == [ContenuDuFichier $File2]} { continue } else { Espionne $Name } } } proc FichierMiniConfig {} { global RepertoireDuGenome return "$RepertoireDuGenome/beton/miniconfig" } proc FichierModAssocie {NomSeq3d FiMsf3d} { set Rep [file dirname $FiMsf3d] set FichierMod "$Rep/$NomSeq3d/${NomSeq3d}_20.mod" if {[file exists $FichierMod]} { return $FichierMod } Wup "the Lego mod file doesn't exist. We'll create it" set RepForSeq "$Rep/$NomSeq3d" set FiPdb "$RepForSeq/${NomSeq3d}.pdb" set FiMod "$RepForSeq/${NomSeq3d}_20.mod" set FiFa "$RepForSeq/${NomSeq3d}.fa" Lego FiPdb FiMod FiFa if {[file exists $FiMod]} { return $FiMod } FaireLire "I can't create the .mod file for \n$NomSeq3d $FiMsf3d" return "" } proc FichierMsfPourGOAnno {Nom AvecOuSansOrganismeEtudie} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" set FichierSortie "[RepertoireDuGenome]/annotation/$Nom.msf.temp" set FichierSortie2 "[RepertoireDuGenome]/annotation/$Nom.msf" exec clustalw -infile=$Fichier -output=gcg -convert -outfile=$FichierSortie if {! [file exists $Fichier]} {return} if {$AvecOuSansOrganismeEtudie == "Sans"} { ExtractionDeMaSequenceDuMSF $Nom if {! [file exists $FichierSortie]} {return} file copy -force $FichierSortie $FichierSortie2 file delete -force $FichierSortie } else { if {! [file exists $FichierSortie]} {return} file copy -force $FichierSortie $FichierSortie2 file delete -force $FichierSortie } } proc FichierNbGOParBoite {FichierGO {FichierOrf2Cluster ""} {FichierEffectif ""}} { if {$FichierOrf2Cluster == ""} {set FichierOrf2Cluster "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression"} if {$FichierEffectif == ""} {set FichierEffectif "[RepertoireDuGenome]/fiches/NbGOParBoite"} if {![file exists $FichierGO]} {return} foreach Nom [ListeDesPABs] { Espionne $Nom set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster $Nom Cluster] set Access [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster $Nom Access ] foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [Onto $GO Type ] set Def [lindex [Onto $Type $GO LesDefinitions] 0] if {![info exists Tab($Nom,$Type,n)]} { set Tab($Nom,$Type,n) 0 set Tab($Nom,$Type,LesDefs) {} } incr Tab($Nom,$Type,n) lappend Tab($Nom,$Type,LesDefs) $Def } foreach Type [InterrogeGeneOntology $FichierGO LesTypes] { set n 0 set Def "" if {[info exists Tab($Nom,$Type,n) ]} { set n [set Tab($Nom,$Type,n) ] set Def [join [set Tab($Nom,$Type,LesDefs)] ";"] } Espionne "$Nom\t$Cluster\t$Access\t$Type\t$n\t$Def" AppendAuFichier $FichierEffectif "$Nom\t$Cluster\t$Access\t$Type\t$n\t$Def" } } return } proc FichierNewOCADE_TL {FileIn FileOut} { if {$FileIn == $FileOut} {return} foreach Nom [LesNoms NomsInteressants] {set TabOK($Nom) 1} set i 0 set F [open $FileIn] set LesLignes {} while {[gets $F Ligne]>=0} { if {[regexp {^\#} $Ligne]} {lappend LesLignes $Ligne} set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] set Def [lindex $LaLigne 3] if {![info exists TabOK($Nom)]} {continue} incr i set Ext [format "%4.4d" $i] set NewNom "RA$Ext" set NewDef "$Nom $Def" set LaLigne [lreplace $LaLigne 0 0 $NewNom] set LaLigne [lreplace $LaLigne 3 3 $NewDef] Espionne $LaLigne lappend LesLignes [join $LaLigne "\t"] } close $F if {$LesLignes == {}} {return} Sauve [join $LesLignes "\n"] dans $FileOut return } proc FichierNomLocMethodeMeanDefGeneName_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierOUT "[RepertoireDuGenome]/PourTL/Nom_Clust_Loc_Methode_Access_Orga_Def_MeanDef_GeneName" set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set LeTexte {} foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster ] set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Access ] set DefIni [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Definition] ###GeneName######### set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i if {$i > 3} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName " ; "] ###DefinitionMoyenne##### set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] ###AccessDeProt#### set Def "" set Methode "Prot/mRNA" set Access [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {$Access == "NOPROTEIN" || $Access == ""} { set Methode "Contig" set Access [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$Access == "NOPROTEIN" || $Access == ""} { set Access "" set Methode "NoProtein" } } set Orgas "" if {$Access != ""} { set PI [PageInfo $Access protein "id acc des org"] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] set Def [join [LaDefinitionDeLaProt_PageInfo $PI] " "] } set LesLoc {} foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set LesBC {} foreach BC [split [lindex $Loc 19] " "] {lappend LesBC $BC} set Chrom [lindex $Loc 9] set Deb [Mini [lindex $Loc 10] [lindex $Loc 11]] set Fin [Maxi [lindex $Loc 10] [lindex $Loc 11]] set Sens [lindex $Loc 12] lappend LesLoc "$Chrom [join $LesBC " "] $Deb $Fin $Sens" } Espionne "$Nom\t$Cluster\t$AccIni\t$DefIni\t[join $LesLoc " ; "]\t$Methode\t$Access\t$Orgas\t$Def\t$MeanDef\t$GN" lappend LeTexte "$Nom\t$Cluster\t$AccIni\t$DefIni\t[join $LesLoc " ; "]\t$Methode\t$Access\t$Orgas\t$Def\t$MeanDef\t$GN" } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierNomLocTissueDSMethodeMeanDefGeneNameGO {FichierOUT} { set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" #Espionne "Lecture du Fichier $FichierOCADE" set LesAccess {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { set Methode "Protein" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { if {$AccessmRNA != "NOMRNA" && $AccessmRNA != ""} { set Methode "mRNA" set AccessProt $AccessmRNA } else { set Methode "Contig" set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { set AccessProt "" set Methode "NoProtein" } } } if {$AccessProt != "" && ![info exists TabTmp($AccessProt)]} { set TabTmp($AccessProt) 1 lappend LesAccess $AccessProt } set Tab($Nom,Access) $AccessProt set Tab($Nom,Methode) $Methode set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set NameQueryProt "QUERY_PROTEIN" set Id 0.98 set LesAccessProches [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $NameQueryProt $Id] Espionne "\n$Nom\n$LesAccessProches" set Tab($Nom,LesAccessProches) {} foreach AccessProt $LesAccessProches { set TabTmp($AccessProt) 1 lappend Tab($Nom,LesAccessProches) $AccessProt lappend LesAccess $AccessProt } AskMSF $FichierMSF unset } } Espionne "Database is loading..." AskLesPagesInfos load $LesAccess protein Espionne "Database loaded..." set LeTexte {} #Espionne "Lecture du Fichier $FichierGO" foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access ] set DefIni [join [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] ""] ####EST########################## set LesTissues {} foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $Tissue n] lappend LesTissues [list "$Tissue ($n)" $n] } set LesTissuesDefinitifs {} set i 0 foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { incr i if {$i > 5} {break} lappend LesTissuesDefinitifs [lindex $LeTissue 0] } set Tissues [join $LesTissuesDefinitifs ";"] set LesDS {} foreach DS [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DS n] lappend LesDS [list "$DS ($n)" $n] } set LesDSDefinitifs {} set i 0 foreach LeDS [lsort -index 1 -decreasing -integer $LesDS] { incr i if {$i > 5} {break} lappend LesDSDefinitifs [lindex $LeDS 0] } set DS [join $LesDSDefinitifs ";"] ####PROT############################# set Methode [set Tab($Nom,Methode)] set Def "" set Orgas "" set Acc [set Tab($Nom,Access)] if {$Acc != ""} { set PI [AskLesPagesInfos ask $Acc] set Def [string trim [join [LaDefinitionDeLaProt_PageInfo $PI] ";"]] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] } if {$Def == ""} { if {$Acc != ""} {lappend LesAcc $Acc} set LesAcc {} set LesDef {} set LesOrgas {} set Methode "ClosestProt" foreach AccessProche [lsort -unique [set Tab($Nom,LesAccessProches)]] { set PI [AskLesPagesInfos ask $AccessProche] set Def [join [LaDefinitionDeLaProt_PageInfo $PI] ";"] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] lappend LesAcc $AccessProche lappend LesDef $Def lappend LesOrgas $Orgas } set Acc [join $LesAcc ";"] set Def [join $LesDef ";"] set Orgas [join $LesOrgas ";"] } ###DefinitionMoyenne##### set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i #if {$i > 3} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName ";"] ####GO########## set LesGO {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LesGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] } set GO [join $LesGO ";"] ####LOCALISATION####################### set LesLoc {} if {1} { foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set LesBC {} foreach BC [split [lindex $Loc 19] " "] {lappend LesBC $BC} set Chrom [lindex $Loc 9] set Deb [Mini [lindex $Loc 10] [lindex $Loc 11]] set Fin [Maxi [lindex $Loc 10] [lindex $Loc 11]] set Sens [lindex $Loc 12] lappend LesLoc "$Chrom [join $LesBC " "] $Deb $Fin $Sens" } set Loc [join $LesLoc ";"] } set Ligne "$Nom\t$Cluster\t$AccIni\t$DefIni\t$Loc\t$Tissues\t$DS\t$Methode\t$Acc\t$Orgas\t$Def\t$MeanDef\t$GN\t$GO" regsub -all ";" $Ligne " ; " Ligne Espionne $Ligne lappend LeTexte $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierNomLocTissueDSMethodeMeanDefGeneNameGO_Gretta {FichierBoitesSelectionnees FichierPValue FichierOUT} { set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" set NbCluster 6 set F [open $FichierPValue] while {[gets $F Ligne]>=0} { if {[string trim $Ligne] == ""} {continue} set LaLigne [split $Ligne "\t"] set Affy [lindex $LaLigne 0] set Cluster [lindex $LaLigne 1] set LesValues [lrange $LaLigne 2 6] set Tab($Affy,$Cluster,LesValues) $LesValues } close $F #Espionne "Lecture du Fichier $FichierBoitesSelectionnees" set F [open $FichierBoitesSelectionnees] set i 0 while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set Ligne [split $Ligne "\t"] set Affy [lindex $Ligne 0] set Cluster [lindex $Ligne 1] incr i set TabAffy($Cluster,$Affy) 1 } close $F set LesAccess {} #Espionne "Lecture du Fichier $FichierOCADE" foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesNoms] { set Affy [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] set LesExpressions [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom LesExpressions] for {set i 0} {$i < $NbCluster} {incr i} { set Cluster [expr $i + 1] if {![info exists Tab(Cluster,$Cluster,LesNoms)]} { set Tab(Cluster,$Cluster,LesNoms) {} lappend Tab(LesClusters) $Cluster } set Expr [lindex $LesExpressions $i] if {$Expr < 0} {continue} if {![info exists TabAffy($Cluster,$Affy)]} {continue} set Methode "Protein" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { if {$AccessmRNA != "NOMRNA" && $AccessmRNA != ""} { set Methode "mRNA" set AccessProt $AccessmRNA } else { set Methode "Contig" set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { set AccessProt "" set Methode "NoProtein" } } } if {$AccessProt != "" && ![info exists TabTmp($AccessProt)]} { set TabTmp($AccessProt) 1 lappend LesAccess $AccessProt } set Tab($Nom,Access) $AccessProt set Tab($Nom,Methode) $Methode lappend Tab(Cluster,$Cluster,LesNoms) $Nom } } foreach Cluster [set Tab(LesClusters)] { if {![info exists Tab(Cluster,$Cluster,LesNoms)]} {continue} foreach Nom [set Tab(Cluster,$Cluster,LesNoms)] { if {[info exists TabTmp($Nom)]} {continue} set TabTmp($Nom) 1 set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set NameQueryProt "QUERY_PROTEIN" set Id 0.98 set LesAccessProches [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $NameQueryProt $Id] Espionne "\n$Nom\n$LesAccessProches" set Tab($Nom,LesAccessProches) {} foreach AccessProt $LesAccessProches { set TabTmp($AccessProt) 1 lappend Tab($Nom,LesAccessProches) $AccessProt lappend LesAccess $AccessProt } AskMSF $FichierMSF unset } } Espionne "Database is loading..." AskLesPagesInfos load $LesAccess protein Espionne "Database loaded..." set LeTexte {} #Espionne "Lecture du Fichier $FichierGO" foreach Cluster [set Tab(LesClusters)] { if {![info exists Tab(Cluster,$Cluster,LesNoms)]} {continue} foreach Nom [set Tab(Cluster,$Cluster,LesNoms)] { set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access ] set DefIni [join [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] ""] set LesValues [set Tab($AccIni,$Cluster,LesValues)] set PValue [join $LesValues "\t"] ####EST########################## set LesTissues {} foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $Tissue n] lappend LesTissues [list "$Tissue ($n)" $n] } set LesTissuesDefinitifs {} set i 0 foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { incr i if {$i > 5} {break} lappend LesTissuesDefinitifs [lindex $LeTissue 0] } set Tissues [join $LesTissuesDefinitifs ";"] set LesDS {} foreach DS [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DS n] lappend LesDS [list "$DS ($n)" $n] } set LesDSDefinitifs {} set i 0 foreach LeDS [lsort -index 1 -decreasing -integer $LesDS] { incr i if {$i > 5} {break} lappend LesDSDefinitifs [lindex $LeDS 0] } set DS [join $LesDSDefinitifs ";"] ####PROT############################# set Methode [set Tab($Nom,Methode)] set Def "" set Orgas "" set Acc [set Tab($Nom,Access)] if {$Acc != ""} { set PI [AskLesPagesInfos ask $Acc] set Def [string trim [join [LaDefinitionDeLaProt_PageInfo $PI] ";"]] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] } if {$Def == ""} { if {$Acc != ""} {lappend LesAcc $Acc} set LesAcc {} set LesDef {} set LesOrgas {} set Methode "ClosestProt" foreach AccessProche [lsort -unique [set Tab($Nom,LesAccessProches)]] { set PI [AskLesPagesInfos ask $AccessProche] set Def [join [LaDefinitionDeLaProt_PageInfo $PI] ";"] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] lappend LesAcc $AccessProche lappend LesDef $Def lappend LesOrgas $Orgas } set Acc [join $LesAcc ";"] set Def [join $LesDef ";"] set Orgas [join $LesOrgas ";"] } ###DefinitionMoyenne##### set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i #if {$i > 3} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName ";"] ####GO########## set LesGO {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LesGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] } set GO [join $LesGO ";"] ####LOCALISATION####################### set LesLoc {} foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set LesBC {} foreach BC [split [lindex $Loc 19] " "] {lappend LesBC $BC} set Chrom [lindex $Loc 9] set Deb [Mini [lindex $Loc 10] [lindex $Loc 11]] set Fin [Maxi [lindex $Loc 10] [lindex $Loc 11]] set Sens [lindex $Loc 12] lappend LesLoc "$Chrom [join $LesBC " "] $Deb $Fin $Sens" } set Loc [join $LesLoc ";"] set Ligne "$Nom\t$Cluster\t$AccIni\t$PValue\t$DefIni\t$Loc\t$Tissues\t$DS\t$Methode\t$Acc\t$Orgas\t$Def\t$MeanDef\t$GN\t$GO" regsub -all ";" $Ligne " ; " Ligne Espionne $Ligne lappend LeTexte $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierNomTousLocTissueDSMethodeMeanDefGeneNameGO {FichierOUT} { # proc de Frederic Chalmel acev modification pour compter TOUS des ESTs # (par tissues et developmental stages, l'original donne des 5 plus frequents) # modification par wr, 31/10/05 set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" #Espionne "Lecture du Fichier $FichierOCADE" set LesAccess {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { set Methode "Protein" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { if {$AccessmRNA != "NOMRNA" && $AccessmRNA != ""} { set Methode "mRNA" set AccessProt $AccessmRNA } else { set Methode "Contig" set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { set AccessProt "" set Methode "NoProtein" } } } if {$AccessProt != "" && ![info exists TabTmp($AccessProt)]} { set TabTmp($AccessProt) 1 lappend LesAccess $AccessProt } set Tab($Nom,Access) $AccessProt set Tab($Nom,Methode) $Methode set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set NameQueryProt "QUERY_PROTEIN" set Id 0.98 set LesAccessProches [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $NameQueryProt $Id] Espionne "\n$Nom\n$LesAccessProches" set Tab($Nom,LesAccessProches) {} foreach AccessProt $LesAccessProches { set TabTmp($AccessProt) 1 lappend Tab($Nom,LesAccessProches) $AccessProt lappend LesAccess $AccessProt } AskMSF $FichierMSF unset } } Espionne "Database is loading..." AskLesPagesInfos load $LesAccess protein Espionne "Database loaded..." set LeTexte {} #Espionne "Lecture du Fichier $FichierGO" foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access ] set DefIni [join [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] ""] ####EST########################## set LesTissues {} foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $Tissue n] lappend LesTissues [list "$Tissue ($n)" $n] } set LesTissuesDefinitifs {} set i 0 foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { incr i ##orig de Fred donne des 5 plus frequents: ## if {$i > 5} {break} lappend LesTissuesDefinitifs [lindex $LeTissue 0] } set Tissues [join $LesTissuesDefinitifs ";"] set LesDS {} foreach DS [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DS n] lappend LesDS [list "$DS ($n)" $n] } set LesDSDefinitifs {} set i 0 foreach LeDS [lsort -index 1 -decreasing -integer $LesDS] { incr i ##orig de Fred donne des 5 plus frequents: ## if {$i > 5} {break} lappend LesDSDefinitifs [lindex $LeDS 0] } set DS [join $LesDSDefinitifs ";"] ####PROT############################# set Methode [set Tab($Nom,Methode)] set Def "" set Orgas "" set Acc [set Tab($Nom,Access)] if {$Acc != ""} { set PI [AskLesPagesInfos ask $Acc] set Def [string trim [join [LaDefinitionDeLaProt_PageInfo $PI] ";"]] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] } if {$Def == ""} { if {$Acc != ""} {lappend LesAcc $Acc} set LesAcc {} set LesDef {} set LesOrgas {} set Methode "ClosestProt" foreach AccessProche [lsort -unique [set Tab($Nom,LesAccessProches)]] { set PI [AskLesPagesInfos ask $AccessProche] set Def [join [LaDefinitionDeLaProt_PageInfo $PI] ";"] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] lappend LesAcc $AccessProche lappend LesDef $Def lappend LesOrgas $Orgas } set Acc [join $LesAcc ";"] set Def [join $LesDef ";"] set Orgas [join $LesOrgas ";"] } ###DefinitionMoyenne##### set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i #if {$i > 3} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName ";"] ####GO########## set LesGO {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LesGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] } set GO [join $LesGO ";"] ####LOCALISATION####################### set LesLoc {} if {1} { foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set LesBC {} foreach BC [split [lindex $Loc 19] " "] {lappend LesBC $BC} set Chrom [lindex $Loc 9] set Deb [Mini [lindex $Loc 10] [lindex $Loc 11]] set Fin [Maxi [lindex $Loc 10] [lindex $Loc 11]] set Sens [lindex $Loc 12] lappend LesLoc "$Chrom [join $LesBC " "] $Deb $Fin $Sens" } set Loc [join $LesLoc ";"] } set Ligne "$Nom\t$Cluster\t$AccIni\t$DefIni\t$Loc\t$Tissues\t$DS\t$Methode\t$Acc\t$Orgas\t$Def\t$MeanDef\t$GN\t$GO" regsub -all ";" $Ligne " ; " Ligne Espionne $Ligne lappend LeTexte $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierNomTousLocTissueDSMethodeMeanDefGeneNameSepGO {FichierOUT} { # proc de Frederic Chalmel acev modification pour compter TOUS des ESTs # (par tissues et developmental stages, l'original donne des 5 plus frequents) # modification par wr, 31/10/05 set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" #Espionne "Lecture du Fichier $FichierOCADE" set LesAccess {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { set Methode "Protein" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { if {$AccessmRNA != "NOMRNA" && $AccessmRNA != ""} { set Methode "mRNA" set AccessProt $AccessmRNA } else { set Methode "Contig" set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { set AccessProt "" set Methode "NoProtein" } } } if {$AccessProt != "" && ![info exists TabTmp($AccessProt)]} { set TabTmp($AccessProt) 1 lappend LesAccess $AccessProt } set Tab($Nom,Access) $AccessProt set Tab($Nom,Methode) $Methode set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set NameQueryProt "QUERY_PROTEIN" set Id 0.98 set LesAccessProches [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $NameQueryProt $Id] Espionne "\n$Nom\n$LesAccessProches" set Tab($Nom,LesAccessProches) {} foreach AccessProt $LesAccessProches { set TabTmp($AccessProt) 1 lappend Tab($Nom,LesAccessProches) $AccessProt lappend LesAccess $AccessProt } AskMSF $FichierMSF unset } # close foreach Nom } # close foreach Cluster Espionne "Database is loading..." AskLesPagesInfos load $LesAccess protein Espionne "Database loaded..." set LeTexte {} #Espionne "Lecture du Fichier $FichierGO" foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access ] set DefIni [join [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] ""] ####EST########################## set LesTissues {} foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $Tissue n] lappend LesTissues [list "$Tissue ($n)" $n] } set LesTissuesDefinitifs {} set i 0 foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { incr i ##orig de Fred donne des 5 plus frequents: ## if {$i > 5} {break} lappend LesTissuesDefinitifs [lindex $LeTissue 0] } set Tissues [join $LesTissuesDefinitifs ";"] set LesDS {} foreach DS [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DS n] lappend LesDS [list "$DS ($n)" $n] } set LesDSDefinitifs {} set i 0 foreach LeDS [lsort -index 1 -decreasing -integer $LesDS] { incr i ##orig de Fred donne des 5 plus frequents: ## if {$i > 5} {break} lappend LesDSDefinitifs [lindex $LeDS 0] } set DS [join $LesDSDefinitifs ";"] ####PROT############################# set Methode [set Tab($Nom,Methode)] set Def "" set Orgas "" set Acc [set Tab($Nom,Access)] if {$Acc != ""} { set PI [AskLesPagesInfos ask $Acc] set Def [string trim [join [LaDefinitionDeLaProt_PageInfo $PI] ";"]] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] } if {$Def == ""} { if {$Acc != ""} {lappend LesAcc $Acc} set LesAcc {} set LesDef {} set LesOrgas {} set Methode "ClosestProt" foreach AccessProche [lsort -unique [set Tab($Nom,LesAccessProches)]] { set PI [AskLesPagesInfos ask $AccessProche] set Def [join [LaDefinitionDeLaProt_PageInfo $PI] ";"] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] lappend LesAcc $AccessProche lappend LesDef $Def lappend LesOrgas $Orgas } set Acc [join $LesAcc ";"] set Def [join $LesDef ";"] set Orgas [join $LesOrgas ";"] } ###DefinitionMoyenne##### set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i #if {$i > 3} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName ";"] ####GO########## Espionne "$Nom -> start GO section" # ... \t$Def\t$MeanDef\t$GN\t$GO -> $MeanDef\t$GN\t$GOfu\t$GOco\t$GOpr" set LesGO {} set GO {} set GOfu {} set GOco {} set GOpr {} # foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { # orig de Fred # lappend LesGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] # orig de Fred # } # orig de Fred # set GO [join $LesGO ";"] # orig de Fred # new code, wr 20/10/06 Espionne "$Nom -> GO, start new" set FileGOXML "[RepertoireDuGenome]/GeneOntology/$Nom.xml" set LesGOAvecLiens {} set LesTypes [AskGOAnalyse $FileGOXML Methode GPO LesTypes] if {$LesTypes != {}} { foreach Type $LesTypes { Espionne "check current type: $Type" foreach GO [AskGOAnalyse $FileGOXML Methode GPO Type $Type LesGO] { set Def [AskGOAnalyse $FileGOXML Type $Type GO $GO Definition] #set TexteType [format "%-9s" $Type] set GoEtDef "$GO $Def" #regsub -all {\{} $GoEtDef "" GoEtDef #regsub -all {\}} $GoEtDef "" GoEtDef # above 2 lines should remove "{" and "}" if {[regexp "function" $Type]} {lappend GOfu "$GoEtDef"} if {[regexp "component" $Type]} {lappend GOco "$GoEtDef"} if {[regexp "process" $Type]} {lappend GOpr "$GoEtDef"} } } } ####LOCALISATION####################### set LesLoc {} if {1} { foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set LesBC {} foreach BC [split [lindex $Loc 19] " "] {lappend LesBC $BC} set Chrom [lindex $Loc 9] set Deb [Mini [lindex $Loc 10] [lindex $Loc 11]] set Fin [Maxi [lindex $Loc 10] [lindex $Loc 11]] set Sens [lindex $Loc 12] lappend LesLoc "$Chrom [join $LesBC " "] $Deb $Fin $Sens" } set Loc [join $LesLoc ";"] } set Ligne "$Nom\t$Cluster\t$AccIni\t$DefIni\t$Loc\t$Tissues\t$DS\t$Methode\t$Acc\t$Orgas\t$Def\t$MeanDef\t$GN\t$GOfu\t$GOco\t$GOpr" regsub -all ";" $Ligne " ; " Ligne Espionne $Ligne lappend LeTexte $Ligne } } # close foreach Cluster from "Lecture du Fichier $FichierGO" Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierOMIMPourTous {{LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FichierOUT "[RepertoireDuGenome]/fiches/OMIM" set FichierLoc [ChoixDuFichierLocalisationHuman] set LeTexte {} foreach Nom $LesNoms { foreach LaLoc [InterrogeLocalisation $FichierLoc Nom $Nom] { if {![regexp -nocase "best" [lindex $LaLoc 20]]} {continue} set Chrom [lindex $LaLoc 9] set DS [Mini [lindex $LaLoc 10] [lindex $LaLoc 11]] set FS [Maxi [lindex $LaLoc 10] [lindex $LaLoc 11]] foreach LeOMIM [LesOMIMDeLaRegion $Chrom $DS $FS] { set LesGeneName [lindex $LeOMIM 5] set Qui [string trim [string toupper [lindex $LesGeneName 0]]] regsub -all -nocase {[^0-9a-z_]} $Qui "" Qui set Quoi "OMIM" if {[InterrogeRetNet RetNet $Qui LesInfos] != ""} {set Quoi "RetNet"} set LesBornes [lindex $LeOMIM 2] set DOMIM [lindex $LesBornes 0] set FOMIM [lindex $LesBornes 1] if {1000000 < [expr $FOMIM - $DOMIM]} {continue} set Def [join [concat [list [lindex $LeOMIM 9]] [lindex $LeOMIM 10]] ", "] Espionne "$Nom\t$Chrom\t$DS\t$FS\t$Quoi\t$Qui\t$Def\t$DOMIM\t$FOMIM" lappend LeTexte "$Nom\t$Chrom\t$DS\t$FS\t$Quoi\t$Qui\t$Def\t$DOMIM\t$FOMIM" } } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierOntologyDesAccess {FichierAccessouLesAccess FileSave} { if {[file exists $FichierAccess]} { set LesAccess [LesLignesDuFichier $FichierAccess] } else { set LesAccess $FichierAccessouLesAccess } set LesOntologies {} foreach Ligne $LesAccess { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} scan $Ligne "%s" Access Espionne "$Access" set NewLine "" set LesGO [Access2GO $Access] if {$LesGO == {}} { set NewLine "$Access\tNoOntologyFound\tNoOntologyFound\tNoOntologyFound" lappend LesOntologies $NewLine Espionne $NewLine } else { foreach Type [LesTypesOntologiques] { foreach GO $LesGO { if {![OntoExists $Type $GO LesDefinitions]} {continue} foreach Definition [Onto $Type $GO LesDefinitions] { set NewLine "$Access\t$Type\t$GO\t$Definition" lappend LesOntologies $NewLine Espionne $NewLine } } } } } Sauve [join $LesOntologies "\n"] dans $FileSave return $LesOntologies } proc FichierOperons2ClustersNourrisParDesOperonsCommuns {} { global RepertoireDuGenome set LesInfos {} Wup "Operon Distance between cluster1 and cluster2 Considered operon Cluster1 Orf belonging to the considered operon and to cluster1 Cluster2 Orf belonging to the considered operon and to cluster2" set LesOperons [O2C2O LesOperons] foreach Operon $LesOperons { set LesClusters [O2C2O Operon $Operon LesClusters] foreach Cluster1 $LesClusters { foreach Cluster2 $LesClusters { if {$Cluster1 == $Cluster2} {continue} set Distance [format "%.1f" [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance]] set LesOrfs1 [O2C2O Cluster $Cluster1 LesOrfs] foreach Orf1 $LesOrfs1 { set Operon1 [O2C2O Orf $Orf1 Operon] if {$Operon1 == ""} {continue} set LesOrfs2 [O2C2O Cluster $Cluster2 LesOrfs] foreach Orf2 $LesOrfs2 { set Operon2 [O2C2O Orf $Orf2 Operon] if {$Operon2 == "" || $Operon1 != $Operon2} {continue} if {[info exists TabTmp(Operon,$Operon,Cl1,$Cluster1,Orf1,$Orf1,Cl2,$Cluster2,Orf2,$Orf2)]} {continue} set TabTmp(Operon,$Operon,Cl1,$Cluster1,Orf1,$Orf1,Cl2,$Cluster2,Orf2,$Orf2) 1 if {[info exists TabTmp(Operon,$Operon,Cl1,$Cluster2,Orf1,$Orf2,Cl2,$Cluster1,Orf2,$Orf1)]} {continue} set TabTmp(Operon,$Operon,Cl1,$Cluster2,Orf1,$Orf2,Cl2,$Cluster1,Orf2,$Orf1) 1 Espionne [set Info [list $Operon $Distance $Operon1 $Cluster1 $Orf1 $Cluster2 $Orf2]] lappend LesInfos $Info } } } } } set LeTexte {} foreach LInfo [lsort -integer -index 0 $LesInfos] { lappend LeTexte [join $LInfo "\t"] } set Fichier "$RepertoireDuGenome/fiches/clusters_nourris_par_operons_communs" Sauve [join $LeTexte "\n"] dans $Fichier return $Fichier } proc FichierOperons2DistancesEntreClustersPondereesParPresences {} { global RepertoireDuGenome set LesInfos {} set LesOrganismes [O2C2O LesOrganismesLongs] set LesDiabacs [O2C2O Categorie OrganismeInteressant LesOrganismesLongs] set LesBacteries [O2C2O Categorie Bacteria LesOrganismesLongs] set LesFirmicutes [O2C2O Categorie Firmicutes LesOrganismesLongs] set LesProteobacteries [O2C2O Categorie Proteobacteria LesOrganismesLongs] set LesArchaebacteries [O2C2O Categorie Archaea LesOrganismesLongs] set LesEucaryotes [O2C2O Categorie Eukaryota LesOrganismesLongs] Espionne "LesOrganismes : $LesOrganismes \n" Espionne "LesDiabacs : $LesDiabacs \n" Espionne "LesBacteries : $LesBacteries \n" Espionne "LesFirmicutes : $LesFirmicutes \n" Espionne "LesProteobacteries : $LesProteobacteries \n" Espionne "LesArchaebacteries : $LesArchaebacteries \n" Espionne "LesEucaryotes : $LesEucaryotes \n" Wup "Operon Distance between cluster1 and cluster2 Cluster1 Cluster2 Distance between the clusters balanced according to the presence of the total organisms Distance between the clusters balanced according to the presence of the Diabacs Distance between the clusters balanced according to the presence of the Bacteria Distance between the clusters balanced according to the presence of the Firmicutes Distance between the clusters balanced according to the presence of the Proteobacteria Distance between the clusters balanced according to the presence of the Archaebacteria Distance between the clusters balanced according to the presence of the Eukaryota Orf belonging to the considered operon and to the cluster1 Orf belonging to the considered operon and to the cluster2" set LesOperons [O2C2O LesOperons] foreach Operon $LesOperons { set LesClusters [O2C2O Operon $Operon LesClusters] foreach Cl $LesClusters { #Bact pour Bacteries, Firm pour Firmicutes, Proteo pour Proteobacteries # Archae pour Archaebacteries, Eu pour Eucaryotes set TabP($Cl,Orgas) [O2C2O Cluster $Cl Categorie AllOrganism Presence] set TabP($Cl,Diabacs) [O2C2O Cluster $Cl Categorie OrganismeInteressant Presence] set TabP($Cl,Bact) [O2C2O Cluster $Cl Categorie Bacteria Presence] set TabP($Cl,Firm) [O2C2O Cluster $Cl Categorie Firmicutes Presence] set TabP($Cl,Proteo) [O2C2O Cluster $Cl Categorie Proteobacteria Presence] set TabP($Cl,Archae) [O2C2O Cluster $Cl Categorie Archaea Presence] set TabP($Cl,Eu) [O2C2O Cluster $Cl Categorie Eukaryota Presence] } foreach Cl1 $LesClusters { set LesOrfsEnCommunCl1 [O2C2O Operon $Operon Cluster $Cl1 LesOrfsEnCommun] set Orf1 [lindex $LesOrfsEnCommunCl1 0] foreach Cl2 $LesClusters { if {$Cl1 == $Cl2} {continue} set Dist [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 Distance] set LesOrfsEnCommunCl2 [O2C2O Operon $Operon Cluster $Cl2 LesOrfsEnCommun] set Orf2 [lindex $LesOrfsEnCommunCl2 0] #DPD signifie Distance Ponderee Par Presences set DPP_Orgas [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 DistancePondereeParPresences]] set DPP_Diabacs [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 DistancePondereeParPresences]] set DPP_Bact [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 DistancePondereeParPresences]] set DPP_Firm [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 DistancePondereeParPresences]] set DPP_Proteo [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 DistancePondereeParPresences]] set DPP_Archae [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 DistancePondereeParPresences]] set DPP_Eu [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 DistancePondereeParPresences]] set Dist [format "%.1f" [O2C2O Cluster1 $Cl1 Cluster2 $Cl2 Distance]] Espionne [set Info [list $Operon $Dist $Cl1 $Cl2 $DPP_Orgas $DPP_Diabacs $DPP_Bact $DPP_Firm $DPP_Proteo $DPP_Archae $DPP_Eu $Orf1 $Orf2]] lappend LesInfos $Info } } } set LeTexte {} foreach LInfo [lsort -integer -index 0 $LesInfos] { lappend LeTexte [join $LInfo "\t"] } set Fichier "$RepertoireDuGenome/fiches/operons2distances_ponderees_par_presences" Sauve [join $LeTexte "\n"] dans $Fichier return $Fichier } proc FichierOrf2Cluster2Access2Def2Expression {} { set FichierSave "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set Entete "#Nom \tCluster \tAccess \tDefinition" AppendAuFichier $FichierSave $Entete set LesQuery [lsort -increasing [ListeDesPABs]] LesAccessEtDefDesActins TabActin "[RepertoireDuGenome]/DeLBMAGM/TousLesGenes.txt" set Cluster none foreach PAB $LesQuery { set Corps "" set Access [OwnerOfCDNA $PAB] if {[info exists TabActin($Access)]} { set Definition [set TabActin($Access)] } else {set Definition "No Definition"} lappend Corps $PAB lappend Corps $Cluster lappend Corps $Access lappend Corps $Definition set Corps [join $Corps "\t"] AppendAuFichier $FichierSave $Corps } return "" } proc FichierOrf2Cluster2Operon {} { global RepertoireDuGenome set FileOrf2Cluster2Operon "$RepertoireDuGenome/fiches/orf2cluster2operon" set FileCluster2Orf2Operon "$RepertoireDuGenome/fiches/cluster2orf2operon" set LInfoGlobale {} set LInfoGlobaleBis {} foreach Orf [ListeDesPABs] { set Cluster [InfoDuCluster $Orf Numero] if {$Cluster == "" || [regexp -nocase "No info available for " $Cluster]} { set Cluster "Not in Cluster" set TailleCluster "Not in Cluster" } else { set TailleCluster [InfoDuCluster $Orf Taille] } set Operon [Operon $Orf Numero] if {$Operon == ""} { set Operon "Not in Operon" set TailleOperon "Not in Operon" } else { set TailleOperon [Operon $Orf Taille] } set Definition [DefinitionApproximative $Orf] regsub -nocase "\\\(taken from database\\\)" $Definition "" Definition set Definition [string trim $Definition] Espionne "$Orf\t$Cluster\t$TailleCluster\t$Operon\t$TailleOperon\t$Definition" lappend LInfoGlobale "$Orf\t$Cluster\t$TailleCluster\t$Operon\t$TailleOperon\t$Definition" lappend LInfoGlobaleBis "$Cluster\t$TailleCluster\t$Orf\t$Operon\t$TailleOperon\t$Definition" } #Sauve [join $LInfoGlobale "\n"] dans $FileOrf2Cluster2Operon set LInfoGlobaleBis [lsort -index 0 $LInfoGlobaleBis] Espionne $LInfoGlobaleBis Sauve [join $LInfoGlobaleBis "\n"] dans $FileCluster2Orf2Operon return $LInfoGlobaleBis } proc FichierOrgImportantsDesEukaryotes {} { global RepertoireDuGenome set File "$RepertoireDuGenome/fiches/orgimportant" set FileGenomesEukaryotes "$RepertoireDuGenome/fiches/lesgenomeseukaryotes" set Texte "" set LesOrganismes {} if {[OuiOuNon "Would you want to add all eukaryotic organism having a complete genome ?"]} { if {![file exists $FileGenomesEukaryotes] && [OuiOuNon "Would you want to create the file with the eukaryotic organism having a complete genome ?"]} { FichierGenomesEukaryotes } if {[file exists $FileGenomesEukaryotes]} { foreach Orga [LesGenomesEukaryotes] {lappend LesOrganismes $Orga } } } if {[OuiOuNon "Would you want to add your favorite organisms ?"]} { foreach Orga [LaSelectionDeNoe] { lappend LesOrganismes $Orga } } while {[OuiOuNon "Would you want to add an other organism to that list ?"]} { set Orga [Entre] set BonOrg [Glossaire $Orga Complet] if {$BonOrg==""} { if {![OuiOuNon "The organism $Orga doesn't exist\nDo you want to select it?"]} { continue } } elseif {$BonOrg!=$Orga} { if {[OuiOuNon "Your organism $Orga \n seems to be \n $BonOrg \n Do I keep $BonOrg ?"]} { set Orga $BonOrg } else { if {![OuiOuNon "Do I keep $Orga ?"]} { continue } } } if {$Orga != "" } {lappend LesOrganismes $Orga} } if {$LesOrganismes == {}} {return ""} Sauve [join [ElimineLesRedondancesDansUneListe $LesOrganismes] "\n"] dans $File return $File } proc FichierPathway {Pathway {OrganismeOuOrgaCourt ""} {Extension conf}} { if {$OrganismeOuOrgaCourt != ""} { set OrgaC [InterrogeGenomeKEGG Organisme $OrganismeOuOrgaCourt OrgaCourt] if {$OrgaC == ""} {set OrgaC $OrganismeOuOrgaCourt} } else { set OrgaC "map" } set File "[KEGGDir $OrgaC]/${OrgaC}${Pathway}.${Extension}" if {[file exists $File]} {return $File} set File "[KEGGDir $OrgaC]/${OrgaC}${Pathway}hsa.${Extension}" if {[file exists $File]} {return $File} foreach File [glob -nocomplain "[KEGGDir $OrgaC]/${OrgaC}${Pathway}*.${Extension}"] { return $File } return "[KEGGDir $OrgaC]/${OrgaC}${Pathway}.${Extension}" } proc FichierPolyLocalise {FichierLocalisation} { global RepertoireDuGenome global FichierPolyLocaliseDefaut if {![file exists $FichierLocalisation]} {return ""} foreach Ligne [LesLignesDuFichier $FichierLocalisation] { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} set LaLigne [split $Ligne "\t"] set Info [lindex $LaLigne end] if {$Info == "BestLoc" || $Info == "BestPolyLoc"} { set Nom [lindex $LaLigne 0] set InfoLoc [lindex $LaLigne 1] if {[info exists TabLoc($Nom)]} {continue} if {$InfoLoc == "MonoLoc"} { set NewInfo "MonoLocalization" } elseif {$InfoLoc == "MayBePolyLoc"} { set NewInfo "MayBePolyLocalization" } elseif {$InfoLoc == "PolyLoc"} { set NewInfo "PolyLocalization" } elseif {$InfoLoc == "NoLoc"} { set NewInfo "NoLocalization" } else { set NewInfo "NoBlastFile" } set TabLoc($Nom) $NewInfo } } set LeNewPolyLocalise "" foreach Nom [ListeDesPABs] { if {![info exists TabLoc($Nom)]} {set NewInfo "NoLocalization"} else {set NewInfo [set TabLoc($Nom)]} lappend LeNewPolyLocalise "$Nom $NewInfo" } EspionneL $LeNewPolyLocalise set FichierPolyLocaliseDefaut "$RepertoireDuGenome/fiches/polylocalise" Sauve [join $LeNewPolyLocalise "\n"] dans $FichierPolyLocaliseDefaut return "" } proc FichierPourDPC_bbkkvv {FichierPourDPC {FichierTableau ""}} { if {$FichierTableau == ""} { FaireLire "Choisir le fichier contenant le tableau" set FichierTableau [ButineArborescence All [pwd]] } set Texte "" set nBox 0 set i 0 set F [open $FichierTableau] while {[gets $F Ligne]>=0} { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} incr i if {$i == 1} {continue} set LaLigne [split $Ligne "\t"] set Info [lindex $LaLigne 3 ] if {$Info == "Not found" || $Info == "Not DNA"} {continue} incr nBox set Nom [lindex $LaLigne 4 ] set AvWT [lindex $LaLigne 10] set AvRD [lindex $LaLigne 15] set PR [lindex $LaLigne 17] set Brain [lindex $LaLigne 19] append Texte "$Nom\t$AvRD\t$AvWT\t$PR\t$Brain\n" } close $F set Texte "$nBox\t4\n$Texte" Sauve $Texte dans $FichierPourDPC return $Texte } proc FichierPourSaveAs {{RepertoireEtFichier ""}} { global RepertoireInitial if {[info exists OuiOuNonToujoursParDefaut] && $OuiOuNonToujoursParDefaut} { if { $RepertoireEtFichier!="" && ! [file isdirectory $RepertoireEtFichier]} { return $RepertoireEtFichier } } if {$RepertoireEtFichier==""} { set RepertoireEtFichier "unnamed" } if {[regexp {/$} $RepertoireEtFichier]} { regsub {/$} $RepertoireEtFichier "" Rep set Fic "" } else { set Rep [file dirname $RepertoireEtFichier] set Fic [file tail $RepertoireEtFichier] } if {$Rep!=""} { set RepertoireInitial $Rep } if {$Fic!=""} { set FichierInitial "$Fic" } if { ! [info exists RepertoireInitial]} { set RepertoireInitial [pwd] } if { ! [info exists FichierInitial]} { set FichierInitial "unnamed"} set Fichier [tk_getSaveFile -title "File to create" -initialfile $FichierInitial -initialdir $RepertoireInitial] if { $Fichier == "" } { return ""} set RepertoireInitial [file dirname $Fichier] return $Fichier } proc FichierPourWolfgang {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set LaLigne {} set AccessmRNA [AccessEvi $Nom] set LesProbeSetId {} foreach ProbeSetId [lsort -unique [AffyAnno $AccessmRNA "Probe_Set_ID"]] { lappend LesProbeSetId $ProbeSetId } if {$LesProbeSetId=={}} { continue } else { set PSI [join $LesProbeSetId ","] lappend LaLigne $Nom lappend LaLigne $PSI } set Ligne [join $LaLigne ";"] Espionne $Ligne lappend LesLignes $Ligne } #return $LesLignes } proc FichierPpcrSansAttBAdapter {Fichier} { set Entete [EnteteDuFichierTFA $Fichier "all"] if { ! [regexp {AttB[12]_?Adapter} $Entete]} { return $Fichier } set Seq [QueLaSequenceDuFichierTFA $Fichier] if { ! [regexp -nocase [SEQAttB1Adapter] $Seq] && ! [regexp -nocase [SEQAttB2Adapter] $Seq]} { return $Fichier } if { ! [regexp [SEQAttB1] $Seq]} { regsub -nocase [SEQAttB1Adapter] $Seq [SEQAttB1] Seq } if { ! [regexp [SEQAttB2] $Seq]} { regsub -nocase [SEQAttB2Adapter] $Seq [SEQAttB2] Seq } regsub -nocase {AttB1_?Adapter} $Entete "AttB1" Entete regsub -nocase {AttB2_?Adapter} $Entete "AttB2" Entete return [Sauve [SequenceFormatTFA $Seq $Entete "nucbrut"] dans "[TmpFile].tfa"] } proc FichierPresenceDesOrganismesDansTousLesClusters {} { global RepertoireDuGenome set Fichier "$RepertoireDuGenome/fiches/presences_tous_clusters" set LesCategories [O2C2O LesCategories] set Info ">Cluster" foreach Categorie $LesCategories {append Info "\t$Categorie"} set LesInfos [list $Info] foreach Cluster [O2C2O LesClusters] { Espionne $Cluster set LInfo [list $Cluster] foreach Categorie $LesCategories { set LesOrgas [O2C2O Categorie $Categorie LesOrganismesLongs] lappend LInfo [PresenceDesOrganismesDansCluster $Cluster $LesOrgas] } Espionne $LInfo lappend LesInfos [join $LInfo "\t"] } EspionneL $LesInfos Sauve [join $LesInfos "\n"] dans $Fichier return $Fichier } proc FichierProtAndmRNA {Nom {IdMin 0.8} {IdMax 0.95} {ExpectMax 0.001} {NbSubject 500}} { set RepOut "[RepertoireDuGenome]/ProtAndmRNA" if {![file exists $RepOut]} {File mkdir $RepOut} set FileOut "$RepOut/$Nom" set FBmRNA "[RepertoireDuGenome]/blastnmrna/$Nom" if {![file exists $FBmRNA]} { Espionne "$Nom -> $FBmRNA does not exist.\nPlease create it with \'BlastNmRNAPourTous\'." return } set FBProt "[RepertoireDuGenome]/blastx/$Nom" if {![file exists $FBProt]} { Espionne "$Nom -> $FBProt does not exist. Please create it." return } set OrgaDeRef [OrganismeDuPAB $Nom] Espionne "$Nom -> Prot. extraction" DepouilleLeBlast TabBlastX $FBProt $ExpectMax $NbSubject set LesProteinesBrutes [LesProteinesDuBlast_TabBlast TabBlastX] Espionne "$Nom -> mRNA extraction" DepouilleLeBlast TabBlastN $FBmRNA $ExpectMax $NbSubject set LesmRNAsBruts [LesmRNAsDuBlast_TabBlast TabBlastN] set LesmRNAs {} set LesProteines {} set LesCandidatsTmp {} ###Elimine les mRNAs et les proteines identiques############################################# ###Elimine les mRNAs codant pour les memes proteines et ceux references par la meme proteine### foreach LemRNA $LesmRNAsBruts { set Access [lindex $LemRNA 1 ] set Orga [lindex $LemRNA 12] if {[info exists TabTmp($Orga,$Access)]} {continue} set TabTmp($Orga,$Access) 1 set LesProtsDumRNA [lindex $LemRNA 14] set LesProteinesEquivalentes $LesProtsDumRNA set LesmRNAsEquivalents $Access foreach UnAutremRNA $LesmRNAsBruts { set Orga2 [lindex $UnAutremRNA 12 ] set Access2 [lindex $UnAutremRNA 1 ] if {![string equal -nocase $Orga $Orga2] || [string equal -nocase $Access $Access2]} {continue} set AiJeUneProtEnCommun 0 foreach Prot2 [lindex $UnAutremRNA 14] { foreach Prot $LesProtsDumRNA {if {$Prot == $Prot2} {set AiJeUneProtEnCommun 1;break}} if {$AiJeUneProtEnCommun} {break} } if {!$AiJeUneProtEnCommun} {continue} lappend LesmRNAsEquivalents $Access2 set TabTmp($Orga,$Access2) 1 foreach Prot2 [lindex $UnAutremRNA 14] {lappend LesProteinesEquivalentes $Prot2} } foreach UneProteine $LesProteinesBrutes { set Orga2 [lindex $UneProteine 12] if {$Orga2 != $Orga} {continue} set Access2 [lindex $UneProteine 1 ] set SuisJeUnDeSesmRNAs 0 foreach mRNA2 [lindex $UneProteine 14] {if {$mRNA2 == $Access} {set SuisJeUnDeSesmRNAs 1;break}} if {!$SuisJeUnDeSesmRNAs} {continue} lappend LesProteinesEquivalentes $Access2 foreach mRNA2 [lindex $UneProteine 14] { lappend LesmRNAsEquivalents $mRNA2 set TabTmp($Orga,$mRNA2) 1 } } set LemRNA [lreplace $LemRNA 14 14 [ElimineLesRedondancesDansUneListe $LesProteinesEquivalentes]] set LemRNA [lreplace $LemRNA 1 1 [ElimineLesRedondancesDansUneListe $LesmRNAsEquivalents ]] lappend LesmRNAs $LemRNA lappend LesCandidatsTmp $LemRNA } ###Elimine les Proteines codees par les memes mRNAs et celles referencees par le meme mRNA### foreach LaProt $LesProteinesBrutes { set Access [lindex $LaProt 1 ] set Orga [lindex $LaProt 12 ] if {[info exists TabTmp($Orga,$Access)]} {continue} set TabTmp($Orga,$Access) 1 set LesmRNAsDeLaProt [lindex $LaProt 14] set LesmRNAsEquivalents $LesmRNAsDeLaProt set LesProteinesEquivalentes $Access foreach UneAutreProt $LesProteinesBrutes { set Orga2 [lindex $UneAutreProt 12] set Access2 [lindex $UneAutreProt 1 ] if {$Orga != $Orga2 || $Access == $Access2} {continue} set AiJeUnmRNAEnCommun 0 foreach mRNA2 [lindex $UneAutreProt 14] { foreach mRNA $LesmRNAsDeLaProt {if {$mRNA == $mRNA2} {set AiJeUnmRNAEnCommun 1;break}} if {$AiJeUnmRNAEnCommun} {break} } if {!$AiJeUnmRNAEnCommun} {continue} lappend LesProteinesEquivalentes $Access2 set TabTmp($Orga,$Access2) 1 foreach mRNA2 [lindex $UneAutreProt 14] {lappend LesmRNAsEquivalents $mRNA2} } foreach UnmRNA $LesmRNAsBruts { set Orga2 [lindex $UnmRNA 12] if {$Orga2 != $Orga} {continue} set Access2 [lindex $UnmRNA 1 ] set SuisJeUneDeSesProteines 0 foreach Prot2 [lindex $UnmRNA 14] {if {$Prot2 == $Access} {set SuisJeUneDeSesProteines 1;break}} if {!$SuisJeUneDeSesProteines} {continue} lappend LesmRNAsEquivalents $Access2 foreach Prot2 [lindex $UnmRNA 14] { lappend LesProteinesEquivalentes $Prot2 set TabTmp($Orga,$Prot2) 1 } } set LaProt [lreplace $LaProt 14 14 [ElimineLesRedondancesDansUneListe $LesmRNAsEquivalents ]] set LaProt [lreplace $LaProt 1 1 [ElimineLesRedondancesDansUneListe $LesProteinesEquivalentes]] lappend LesProteines $LaProt lappend LesCandidatsTmp $LaProt } ###################################################################################################### #########Elimination des proteines ou des mRNAs homologues ######################### set LesCandidatsTmp [lsort -integer -decreasing -index 10 $LesCandidatsTmp] set LesCandidatsTmp [lsort -real -decreasing -index 7 $LesCandidatsTmp] set LesCandidatsTmp [lsort -integer -decreasing -index 8 $LesCandidatsTmp] if {[info exists TabTmp]} {unset TabTmp} set LesCandidats {} foreach LeCandidat $LesCandidatsTmp { set Orga [lindex $LeCandidat 12] set LesAccess [lindex $LeCandidat 1] set EnAiJeDejaVuUn 0 foreach Access $LesAccess { if {![info exists TabTmp($Orga,$Access)]} {set TabTmp($Orga,$Access) 1;continue} set EnAiJeDejaVuUn 1;break } if {$EnAiJeDejaVuUn} {continue} set EnAiJeDejaVuUn 0 foreach Ref [lindex $LeCandidat 14] { if {![info exists TabTmp($Orga,$Ref)]} {set TabTmp($Orga,$Ref) 1;continue} set EnAiJeDejaVuUn 1;break } if {$EnAiJeDejaVuUn} {continue} lappend LesCandidats $LeCandidat } ############################################################################### #######PRESENTATION DU FICHIER################################################# set LeTexte "" set Taille 0 if {[info exists TabBlastX(Taille)]} { set Taille [set TabBlastX(Taille)] } elseif {[info exists TabBlastN(Taille)]} { set Taille [set TabBlastN(Taille)] } lappend LeTexte "Box: $Nom" lappend LeTexte "LengthBox: $Taille" PourcentagesDeMasking Repeat $Nom if {[info exists Repeat(Masking)] } { lappend LeTexte "Masking: [set Repeat(Masking)]"} if {[info exists Repeat(ReMasking)]} { lappend LeTexte "ReMasking: [set Repeat(ReMasking)]" } if {[info exists Repeat(MRM)] } { lappend LeTexte "MRM: [set Repeat(MRM)]" } set i 0 foreach LeCandidat $LesCandidats { incr i set BId [lindex $LeCandidat 0 ] set LesAccess [lindex $LeCandidat 1 ] set Taille [lindex $LeCandidat 2 ] set TailleCDS [lindex $LeCandidat 3 ] set Sens [lindex $LeCandidat 4 ] set Expect [lindex $LeCandidat 5 ] set Score [lindex $LeCandidat 6 ] set Id [lindex $LeCandidat 7 ] set Nb [lindex $LeCandidat 8 ] set NbIn5UTR [lindex $LeCandidat 9 ] set NbInCDS [lindex $LeCandidat 10 ] set NbIn3UTR [lindex $LeCandidat 11 ] set Orga [lindex $LeCandidat 12 ] set Def [lindex $LeCandidat 13 ] set LesRefs [lindex $LeCandidat 14 ] set QuiSuisJe [lindex $LeCandidat end] set EstCeNotreOrga 0 set EstCeUnParalogue 0 set SuisJeDansLeCDS 0 set LesRefsAbsentes {} set LesAccessAbsents {} if {$Orga == $OrgaDeRef} {set EstCeNotreOrga 1 } if {$EstCeNotreOrga } {set IdDeRef $IdMax} else {set IdDeRef $IdMin} if {$Id < $IdDeRef } {set EstCeUnParalogue 1 } if {$NbInCDS != 0 } {set SuisJeDansLeCDS 1 } if {$QuiSuisJe == "PROTEIN"} { set AutreType "mRNA" ;set LesAutres $LesmRNAsBruts ;set LesMemes $LesProteinesBrutes } else { set AutreType "PROTEIN";set LesAutres $LesProteinesBrutes;set LesMemes $LesmRNAsBruts } foreach Ref $LesRefs { set LAiJeVu 0 foreach UnAutre $LesAutres { if {$Orga != [lindex $UnAutre 12]} {continue} if {$Ref == [lindex $UnAutre 1 ]} {set LAiJeVu 1;break} } if {!$LAiJeVu} {lappend LesRefsAbsentes $Ref } } foreach Jumeau $LesAccess { set LAiJeVu 0 foreach UnMeme $LesMemes { if {$Orga != [lindex $UnMeme 12]} {continue} if {$Jumeau == [lindex $UnMeme 1 ]} {set LAiJeVu 1;break} } if {!$LAiJeVu} {lappend LesAccessAbsents $Jumeau} } lappend LeTexte "" lappend LeTexte "Rank: $i" lappend LeTexte "Type: $QuiSuisJe" lappend LeTexte "BanqueId_Access: $BId [lindex $LesAccess 0]" if {1 < [llength $LesAccess]} { lappend LeTexte "EquivalentAccess: [join [lrange $LesAccess 1 end] " "]" } if {$LesAccessAbsents != {}} { lappend LeTexte "AbsentAccess: [join $LesAccessAbsents " "]" } lappend LeTexte "Definition: $Def" lappend LeTexte "Organism: $Orga" lappend LeTexte "Length: $Taille" if {$LesRefs != {}} { lappend LeTexte "[format "%-20s" "$AutreType:"] [join $LesRefs " "]" } if {$SuisJeDansLeCDS && $LesRefsAbsentes != {}} { lappend LeTexte "[format "%-20s" "Absent$AutreType:"] [join $LesRefsAbsentes " "]" } if {$QuiSuisJe == "PROTEIN"} { lappend LeTexte "NTot: $Nb" } else { lappend LeTexte "NTot_5UTR_CDS_3UTR: [format "%-6s%-6s%-5s%-6s" $Nb $NbIn5UTR $NbInCDS $NbIn3UTR]" } lappend LeTexte "Expect_Score_Id: [format "%-8s%-8.1f%.2f" $Expect $Score $Id]" if {$EstCeUnParalogue} { lappend LeTexte "WARNING: MayBeAParalogue ([expr round($Id*100)]%)" } } Sauve [join $LeTexte "\n"] dans $FileOut return $LeTexte } proc FichierProtAndmRNAPourTous {{LesNoms ""} {IdMin 0.8} {IdMax 0.95} {ExpectMax 0.001} {NbSubject 500}} { set RepOut "[RepertoireDuGenome]/ProtAndmRNA" if {![file exists $RepOut]} {File mkdir $RepOut} set Keep 0 if {0 < [llength [glob -nocomplain "$RepOut/*"]]} { if {[OuiOuNon "Some Files exist in $RepOut\nDo you want to keep these files?"]} {set Keep 1} } if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne "$Nom..." if {$Keep && [file exists "$RepOut/$Nom"]} {continue} FichierProtAndmRNA $Nom $IdMin $IdMax $ExpectMax $NbSubject } FichierTFADesProteinesChoisiesPourTous $LesNoms 1 return } proc FichierProteinesHypothetical {} { set LesInfos {} set LesOrfsHypothetical {} set i 0 foreach Orf [O2C2O LesOrfs] { if {[regexp -nocase "hypothetical" [O2C2O Orf $Orf Definition]]} { incr i lappend LesOrfsHypothetical $Orf } } Sauve [join [lsort -unique $LesOrfsHypothetical] "\n"] dans "[RepertoireDuGenome]/fiches/hypothetical_proteins" return $LesOrfsHypothetical } proc FichierProteinesJumelles {{IdDesProtId 0.98} {LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FichierOUT "[RepertoireDuGenome]/fiches/ProteinesJumelles" if {[OuiOuNon "Two proteins are considered equal if the identity between them is [expr $IdDesProtId*100] %\nWould you want to change this threshold?"]} { set IdDesProtId [Entre $IdDesProtId] } set LesNoms [lsort -unique $LesNoms] foreach Nom $LesNoms { if { ! [regexp -nocase {[a-z]} $Nom]} { continue } set Tab($Nom,LesAccess) {} Espionne $Nom set FileMSF "[RepertoireDuGenome]/msf/$Nom" if {![file exists $FileMSF]} {continue} AskMSF unset if {[AskMSF $FileMSF $Nom] != ""} { set Query $Nom } elseif {[AskMSF $FileMSF "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" } else { continue } foreach Access [LesProteinesIdentiquesDuMSF $FileMSF $Query $IdDesProtId] { if {$Access == $Query} {continue} set Access [string toupper $Access] if {![info exists Tab($Access,LesNoms)]} {set Tab($Access,LesNoms) {}} lappend Tab($Nom,LesAccess) $Access set Tab($Nom,$Access) 1 lappend Tab($Access,LesNoms) $Nom } AskMSF unset } set LeTexte {} foreach Nom $LesNoms { if { ! [regexp -nocase {[a-z]} $Nom]} { continue } if {[info exists DejaVu($Nom)]} {continue} set LesAccess [set Tab($Nom,LesAccess)] if {$LesAccess == {}} {continue} set LesJumeaux [list $Nom] ##Je regarde les boites ayant vu ces proteines foreach Access $LesAccess { foreach NomJum [set Tab($Access,LesNoms)] { lappend LesJumeaux $NomJum set DejaVu($NomJum) 1 foreach Access [set Tab($NomJum,LesAccess)] { foreach NomJum2 [set Tab($Access,LesNoms)] { lappend LesJumeaux $NomJum2 set DejaVu($NomJum2) 1 } } } } set Ligne [join [lsort -unique $LesJumeaux] "\t"] lappend LeTexte $Ligne Espionne $Ligne } return [Sauve [join $LeTexte "\n"] dans $FichierOUT] } proc FichierProttfaLocalisation {{LesNoms ""} {NameFile ProttfaLocalisation_Human}} { if {![file exists "[RepertoireDuGenome]/Localisation"]} {file mkdir "[RepertoireDuGenome]/Localisation"} set FileLoc "[RepertoireDuGenome]/Localisation/$NameFile" if {[file exists $FileLoc]} { if {[OuiOuNon "$FileLoc exists. Would you want to keep this file ?"]} {return} File delete -force $FileLoc } set TailleFragment 100000 set LeTexte {} if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { set FileEM "[RepertoireDuGenome]/prottfa_exonicmap/$Nom" if {![file exists $FileEM]} {continue} set LesRangs [InterrogeFichierExonicMap $FileEM LesRangs] set BestLoc "BestLoc" set InfoLoc "MonoLoc" if {1 < [llength $LesRangs]} {set InfoLoc "PolyLoc";set BestLoc "BestPolyLoc"} foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FileEM Rang $Rang Chromosome] set Contig [InterrogeFichierExonicMap $FileEM Rang $Rang Contig ] set LesContigsFrag [InterrogeFichierExonicMap $FileEM Rang $Rang ContigFragments] set nChiffresFragContig [string length [lindex $LesContigsFrag 0]] set NbExonicAreas [InterrogeFichierExonicMap $FileEM Rang $Rang NbExonicAreas] if {$NbExonicAreas <= 0} {continue} set LesRegions {} for {set i 1} {$i <= $NbExonicAreas} {incr i} { set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i nAli ] set Id [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i Identity] lappend LesRegions [list $i $nAli $Id] } set LesRegions [lsort -index 1 -real -decreasing [lsort -index 2 -real -decreasing $LesRegions]] set nAliMax [lindex [lindex $LesRegions 0] 1] set EstCeLePremier 1 foreach LaRegion $LesRegions { set Info "" if {$EstCeLePremier} {set Info $BestLoc;set EstCeLePremier 0} set ExonArea [lindex $LaRegion 0] set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea nAli ] set Id [expr [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Identity]/100] set DQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DQ ] set FQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FQ ] set DS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DS ] set FS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FS ] set Orient [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Orientation] set Sens [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Sens ] set Fragments "" if {0 < $nChiffresFragContig} { set FragmentMin [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Mini $DS $FS] / $TailleFragment)]] set FragmentMax [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Maxi $DS $FS] / $TailleFragment)]] set Fragments $FragmentMin if {$FragmentMin != $FragmentMax} {set Fragments [string trim "$FragmentMin $FragmentMax"]} } set LaLocSurLeChrom [CoordonneesSurChromosome $Contig $DS $FS $Sens] set DChrom [lindex $LaLocSurLeChrom 1] set FChrom [lindex $LaLocSurLeChrom 2] set SensChrom [lindex $LaLocSurLeChrom 3] set BandesCyto {} foreach LaBC [LesBandesCytologiquesDeLaRegion [NumeroDuChromosome $Chromosome] $DChrom $FChrom] { lappend BandesCyto [lindex $LaBC 0] } set BandesCyto [join $BandesCyto " "] set EMax "" set E "" set Ligne "$Nom\t$InfoLoc\t$EMax\t$E\t$nAliMax\t$nAli\t$Id\t$DQ\t$FQ\t$Chromosome\t$DChrom\t$FChrom\t$SensChrom\t$Contig\t$Fragments\t$DS\t$FS\t$Orient\t$Sens\t$BandesCyto\t$Info\tprottfa" Espionne $Ligne lappend LeTexte $Ligne } } InterrogeFichierExonicMap unset } Sauve [join $LeTexte "\n"] dans $FileLoc return } proc FichierRecapExp2PsClus {PkExperiment} { #abandon genere trop gros fichier, choisit de le faire a la volee CanalSqlBioArrayBase set FichierSortie "[RepertoireDuGenome]/transcriptomique/ConeSpe/FichierClusterExp2" set LesLignes {} foreach {Ps Ex SoAn SoCl Cl} [SqlExec "select p.probeset_id, e.pk_experiment, a.name, c.clu_description, lncep.clusternumber from retinobase3.ln_clu_exp_pro lncep, retinobase3.cluster c, retinobase3.analysissoftware a, retinobase3.experiment e, retinobase3.probeset p where lncep.pk_experiment = e.pk_experiment and lncep.pk_probeset = p.pk_probeset and lncep.pk_cluster = c.pk_cluster and lncep.pk_software = a.pk_software and e.pk_experiment = '$PkExperiment' order by e.pk_experiment, a.name, c.clu_description" "GetList"] { lappend LesLignes "$Ps\t$Ex\t$SoAn\t$SoCl\t$Cl" } CanalSqlDisconnect Sauve [join $LesLignes "\n"] dans $FichierSortie } proc FichierRecapitulatif {Nom {IdMin 0.8} {IdMax 0.95}} { set LesAccessAvecDesLiens {} set RepRecap "[RepertoireDuGenome]/BilanHTML" if {![file exists $RepRecap]} {File mkdir $RepRecap} set FichierRecap "$RepRecap/$Nom.html" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierNuctfa "[RepertoireDuGenome]/nuctfa/$Nom" set FichierBoxLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human" set FichierProtLoc "[RepertoireDuGenome]/Localisation/ProttfaLocalisation_Human" set FichiermRNALoc "[RepertoireDuGenome]/Localisation/mRNAHsapLocalisation_Human" set FichierBestLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set FichierIPO "[RepertoireDuGenome]/fiches/GeneOntology_prottfa" set FichierGPO "[RepertoireDuGenome]/fiches/GeneOntology" set FichierProttfaExonicMap "[RepertoireDuGenome]/prottfaexonicmap/$Nom" set FichierClustMSF "[RepertoireDuGenome]/msf/$Nom.clust" set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" InterrogeBilanMasking unset InterrogeSelectedEST unset if {0} { InterrogeTissueType unset InterrogeDevStage unset } InterrogeLocalisation unset InterrogeGeneName unset InterrogeDefinitionsConsensus unset InterrogeProtAndmRNAChoisis unset InterrogeProtAndmRNA unset InterrogeContigAndProt unset InterrogeProtAndContigChoisis unset InterrogeLesClustersDesMSF unset InterrogeBestProteinAndmRNAForeachOrga unset InterrogeDomaines unset AskGOAnalyse unset InterrogeMesKEGG unset AskMSF unset AskBlast unset if {[AskMSF $FichierMSF $Nom] != ""} { set NameQueryProt $Nom } elseif {[AskMSF $FichierMSF "QUERY_PROTEIN"] != ""} { set NameQueryProt "QUERY_PROTEIN" } else { set NameQueryProt "" } Espionne "$Nom -> Name ; Access ; Definition ; Length ; Organism" set LeTexte {} lappend LeTexte [H_Color [H_Balise [H_Bold [H_Center "Initial DATA"]] H3] royalblue ] lappend LeTexte "" lappend LeTexte [H_Bold "Name: $Nom"] if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] != ""} { set AccessSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] lappend LeTexte "Access: $AccessSeq" lappend LesAccessAvecDesLiens $AccessSeq } if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] != ""} { set DefinitionSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] lappend LeTexte "Definition: $DefinitionSeq" } if {[file exists $FichierNuctfa]} { set TailleSeq [TailleDeLaSequenceDuFichierTFA $FichierNuctfa] lappend LeTexte "Length: $TailleSeq pb" } set OrganismeSeq [OrganismeDuPAB $Nom] lappend LeTexte "Organism: $OrganismeSeq" if {$OrganismeSeq == "Homo sapiens"} {set IdDeRef $IdMax} else {set IdDeRef $IdMin} set PIdDeRef [format "%.1f" [expr $IdDeRef * 100]] set PIdMin [format "%.1f" [expr $IdMin * 100]] ###Cluster dans lequel se trouve la sequence#### Espionne "$Nom -> cluster" if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] != ""} { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] lappend LeTexte "Cluster: $Cluster" } ###Les expressions sur les puces affymetrix##### Espionne "$Nom -> expression" if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom LesExpressions] != ""} { set LesTemps [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesPointsTemporels] set LesConditions [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesConditions ] set LaLigneTemps [list [format "%-10s" ""]] foreach Temps $LesTemps {lappend LaLigneTemps [format "%-6s" $Temps]} lappend LeTexte "" lappend LeTexte [H_Bold "Expression:"] lappend LeTexte [join $LaLigneTemps ""] foreach Condition $LesConditions { set LaLigneCondition [list [format "%-10s" $Condition]] foreach Temps $LesTemps { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Condition $Condition PointTemporel $Temps Expression] if {$Expr == ""} {lappend LaLigneCondition [format "%-6s" ""];continue} lappend LaLigneCondition [format "%-6.0f" $Expr] } lappend LeTexte [join $LaLigneCondition ""] } } ###Les informations relatives au masking, remasking et mrm#### Espionne "$Nom -> Masking ; ReMasking ; Masking and ReMasking" if {[InterrogeBilanMasking $Nom LesEtats] != ""} { lappend LeTexte "" foreach Etat [InterrogeBilanMasking $Nom LesEtats] { if {[InterrogeBilanMasking $Nom Etat $Etat PMasked] == ""} {continue} set PMasked [InterrogeBilanMasking $Nom Etat $Etat PMasked ] set NbRepeat [InterrogeBilanMasking $Nom Etat $Etat NbRepeat] lappend LeTexte [H_Bold "Masking of the Eukaryotic Repeats:"] if {$NbRepeat != 0} { lappend LeTexte [H_Color "$Etat PMasked: ${PMasked}%" red] lappend LeTexte [H_Color "$Etat NbRepeat: $NbRepeat" red] } else { lappend LeTexte "$Etat PMasked: ${PMasked}%" lappend LeTexte "$Etat NbRepeat: $NbRepeat" } set LesRepeatsEtLeurEffectif {} foreach Repeat [InterrogeBilanMasking $Nom Etat $Etat LesRepeats] { set n [InterrogeBilanMasking $Nom Etat $Etat Repeat $Repeat n] lappend LesRepeatsEtLeurEffectif [list $Repeat $n] } set LesRepeats {} foreach LeRepeat [lsort -index 1 -integer -decreasing $LesRepeatsEtLeurEffectif] { lappend LesRepeats "[lindex $LeRepeat 0] ([lindex $LeRepeat 1])" } if {$LesRepeats != {}} { lappend LeTexte "$Etat Repeat:" lappend LeTexte [join $LesRepeats " ; "] } } } lappend LeTexte "" lappend LeTexte "" lappend LeTexte [H_Color [H_Balise [H_Bold [H_Center "Expression DATA"]] H3] royalblue ] lappend LeTexte "" lappend LeTexte [H_Bold "Tissue Type:"] ###Tissue Type######### Espionne "$Nom -> Tissue Type" if {[InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] != ""} { set LesTissues {} foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] { if {$Tissue == ""} {continue} lappend LesTissues [list $Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $Tissue n]] } if {$LesTissues != {}} { set LesTissuesEtLeurEffectif {} foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { lappend LesTissuesEtLeurEffectif "[lindex $LeTissue 0] ([lindex $LeTissue 1])" } lappend LeTexte [join $LesTissuesEtLeurEffectif " ; "] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } ###Development Stage######### Espionne "$Nom -> Development stage" lappend LeTexte "" lappend LeTexte [H_Bold "Development Stage:"] if {[InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] != ""} { set LesDevStage {} foreach DevStage [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] { if {$DevStage == ""} {continue} lappend LesDevStage [list $DevStage [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DevStage n]] } if {$LesDevStage != {}} { set LesDevStageEtLeurEffectif {} foreach LeDevStage [lsort -index 1 -decreasing -integer $LesDevStage] { lappend LesDevStageEtLeurEffectif "[lindex $LeDevStage 0] ([lindex $LeDevStage 1])" } lappend LeTexte [join $LesDevStageEtLeurEffectif " ; "] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } if {0} { ###Tissue Type######### Espionne "$Nom -> Tissue Type" if {[InterrogeTissueType $Nom LesTissues] != ""} { set LesTissues {} foreach Tissue [InterrogeTissueType $Nom LesTissues] { if {$Tissue == ""} {continue} lappend LesTissues [list $Tissue [InterrogeTissueType $Nom Tissue $Tissue n]] } if {$LesTissues != {}} { set LesTissuesEtLeurEffectif {} foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { lappend LesTissuesEtLeurEffectif "[lindex $LeTissue 0] ([lindex $LeTissue 1])" } lappend LeTexte [join $LesTissuesEtLeurEffectif " ; "] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } ###Development Stage######### Espionne "$Nom -> Development stage" lappend LeTexte "" lappend LeTexte [H_Bold "Development Stage:"] if {[InterrogeDevStage $Nom LesDevStages] != ""} { set LesDevStage {} foreach DevStage [InterrogeDevStage $Nom LesDevStages] { if {$DevStage == ""} {continue} lappend LesDevStage [list $DevStage [InterrogeDevStage $Nom DevStage $DevStage n]] } if {$LesDevStage != {}} { set LesDevStageEtLeurEffectif {} foreach LeDevStage [lsort -index 1 -decreasing -integer $LesDevStage] { lappend LesDevStageEtLeurEffectif "[lindex $LeDevStage 0] ([lindex $LeDevStage 1])" } lappend LeTexte [join $LesDevStageEtLeurEffectif " ; "] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } } ###Localisation de la sequence sur le genome humain### lappend LeTexte "" lappend LeTexte "" lappend LeTexte [H_Color [H_Balise [H_Bold [H_Center "Closest complete genome locations"]] H3] royalblue ] Espionne "$Nom -> localisation on human genome" set AiJeAuMoinsUneLoc 0 set LesLocalisations_Texte {} if {[file exists $FichierBoxLoc]} { set AiJeAuMoinsUneLoc 1 if {[InterrogeLocalisation $FichierBoxLoc Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichierBoxLoc Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] set Warning "" if {$InfoLoc != "MonoLoc"} {set Warning $InfoLoc} foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation 20] != "BestLoc" && [lindex $LaLocalisation 20] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10] set F [lindex $LaLocalisation 11] set Sens [lindex $LaLocalisation 12] set Contig [lindex $LaLocalisation 13] set BCyto [lindex $LaLocalisation 19] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] if {$Id < $IdDeRef} { if {$Warning != ""} {set Warning "$Warning ;"} set Warning "$Warning Id < $PIdDeRef%" } lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Query" $Chromosome $D $F $Sens $Contig $BCyto $PId [H_Color $Warning red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Query" "" "" "" "" "" "" "" [H_Color "Not found" red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Query" "" "" "" "" "" "" "" [H_Color "No file" orange]] } if {[file exists $FichierProtLoc]} { set AiJeAuMoinsUneLoc 1 if {[InterrogeLocalisation $FichierProtLoc Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichierProtLoc Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] set Warning "" if {$InfoLoc != "MonoLoc"} {set Warning $InfoLoc} foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation 20] != "BestLoc" && [lindex $LaLocalisation 20] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10] set F [lindex $LaLocalisation 11] set Sens [lindex $LaLocalisation 12] set Contig [lindex $LaLocalisation 13] set BCyto [lindex $LaLocalisation 19] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] if {$Id < $IdDeRef} { if {$Warning != ""} {set Warning "$Warning ;"} set Warning "$Warning Id < $PIdDeRef%" } lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Protein" $Chromosome $D $F $Sens $Contig $BCyto $PId [H_Color $Warning red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Protein" "" "" "" "" "" "" "" [H_Color "Not found" red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Protein" "" "" "" "" "" "" "" [H_Color "No file" orange]] } if {[file exists $FichiermRNALoc]} { set AiJeAuMoinsUneLoc 1 if {[InterrogeLocalisation $FichiermRNALoc Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichiermRNALoc Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] set Warning "" if {$InfoLoc != "MonoLoc"} {set Warning $InfoLoc} foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation 20] != "BestLoc" && [lindex $LaLocalisation 20] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10] set F [lindex $LaLocalisation 11] set Sens [lindex $LaLocalisation 12] set Contig [lindex $LaLocalisation 13] set BCyto [lindex $LaLocalisation 19] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] if {$Id < $IdDeRef} { if {$Warning != ""} {set Warning "$Warning ;"} set Warning "$Warning Id < $PIdDeRef%" } lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "mRNA Human" $Chromosome $D $F $Sens $Contig $BCyto $PId [H_Color $Warning red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "mRNA Human" "" "" "" "" "" "" "" [H_Color "Not found" red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "mRNA Human" "" "" "" "" "" "" "" [H_Color "No file" orange]] } if {[file exists $FichierBestLoc]} { set AiJeAuMoinsUneLoc 1 if {[InterrogeLocalisation $FichierBestLoc Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichierBestLoc Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] set Warning "" if {$InfoLoc != "MonoLoc"} {set Warning $InfoLoc} foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation 20] != "BestLoc" && [lindex $LaLocalisation 20] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10] set F [lindex $LaLocalisation 11] set Sens [lindex $LaLocalisation 12] set Contig [lindex $LaLocalisation 13] set BCyto [lindex $LaLocalisation 19] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] if {$Id < $IdDeRef} { if {$Warning != ""} {set Warning "$Warning ;"} set Warning "$Warning Id < $PIdDeRef%" } lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Best" $Chromosome $D $F $Sens $Contig $BCyto $PId [H_Color $Warning red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Best" "" "" "" "" "" "" "" [H_Color "Not found" red]] } } else { lappend LesLocalisations_Texte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Best" "" "" "" "" "" "" "" [H_Color "No file" orange]] } lappend LeTexte "" lappend LeTexte [H_Bold "Locations on Human genome:"] if {$AiJeAuMoinsUneLoc} { lappend LeTexte [format "%-12s %-10s %-10s %-10s %-7s %-10s %-10s %-6s %s" "Sequence" "Chromosome" "From" "to" "strand" "Contig" "CytoBand" "Id (%)" "Warning"] foreach TexteLoc $LesLocalisations_Texte {lappend LeTexte $TexteLoc} } lappend LeTexte "" lappend LeTexte "" lappend LeTexte [H_Color [H_Balise [H_Bold [H_Center "Protein definition"]] H3] royalblue ] ###Les noms des genes des proteines du meme cluster de msf que la proteine de ref### Espionne "$Nom -> Gene name" lappend LeTexte "" lappend LeTexte [H_Bold "Gene Name:"] if {[InterrogeGeneName $Nom LesGeneNames] != ""} { set LesGeneNames {} foreach GN [InterrogeGeneName $Nom LesGeneNames] { if {$GN == ""} {continue} lappend LesGeneNames [list $GN [InterrogeGeneName $Nom GeneName $GN n]] } if {$LesGeneNames != {}} { set LesGeneNamesEtLeurEffectif {} foreach LeGN [lsort -index 1 -decreasing -integer $LesGeneNames] { lappend LesGeneNamesEtLeurEffectif "[lindex $LeGN 0] ([lindex $LeGN 1])" } lappend LeTexte [join $LesGeneNamesEtLeurEffectif " ; "] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } ###Mean Definition### Espionne "$Nom -> MeanDefinition" lappend LeTexte "" lappend LeTexte [H_Bold "Mean Definition:"] set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] if {$MeanDef != ""} { lappend LeTexte [H_Bold "$MeanDef"] } else { lappend LeTexte [H_Color "Warning -> None" orange] } ###Commencons maintenant le boulot pour la meilleure proteine trouvee#### Espionne "$Nom -> best protein found" set AccessDuChoisi "" set InfoSeq [InterrogeProtAndmRNAChoisis $Nom SeqChoisie] set TailleProt [TailleDeLaSequenceDuFichierTFA $FichierProttfa] set AiJeTrouveUneProteineDeRef 0 if {$InfoSeq != ""} { if {$InfoSeq == "SeqOK"} { set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {![string equal -nocase $AccessProt "NoProtein"]} { set AccessDuChoisi $AccessProt lappend LesAccessAvecDesLiens $AccessDuChoisi set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LesOrganismes [LesOrgasDeLaPage_PageInfo $PageInfoProt] if {$LesOrganismes == ""} { set LesOrganismes [list [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi]] } } if {[string equal -nocase $AccessProt "NoProtein"] && ![string equal -nocase $AccessmRNA "NomRNA"]} { set AccessProt "NoAccess" set DefProt "NoDef" set LesOrganismes [list [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi]] set From "mRNA complete CDS of BLASTN against genembl DB" lappend LesAccessAvecDesLiens $AccessmRNA set AccessDuChoisi $AccessmRNA } if {![string equal -nocase $AccessProt "NoProtein"] || ![string equal -nocase $AccessmRNA "NomRNA"]} { set Rang [lindex [InterrogeProtAndmRNA $Nom Access $AccessDuChoisi LesRangs] 0] set Type [InterrogeProtAndmRNA $Nom Rang $Rang Type ] if {$Type == "mRNA"} {set From "mRNA complete CDS from BLASTN against genembl DB"} else {set From "BLASTX against protein DB"} lappend LeTexte "" lappend LeTexte [H_Bold "Closest neigbour protein:"] lappend LeTexte "Protein Access: $AccessProt" lappend LeTexte "Protein Definition: $DefProt" lappend LeTexte "Protein Organisms: [join $LesOrganismes " ; "]" lappend LeTexte "Protein Length: $TailleProt AA" lappend LeTexte "Protein From: $From" set AiJeTrouveUneProteineDeRef 1 set DejaVu($AccessProt) 1 lappend LesAccessAvecDesLiens $AccessProt set IdDeLaProtAvecSeq $IdMin foreach Orga $LesOrganismes { if {$Orga == $OrganismeSeq} {set IdDeLaProtAvecSeq $IdMax} } set PIdDeLaProtAvecSeq [format "%.1f" [expr $IdDeLaProtAvecSeq * 100]] set Id [InterrogeProtAndmRNA $Nom Rang $Rang Id] if {$Id != ""} { set PId [format "%.1f" [expr $Id * 100]] if {$Type != "mRNA"} { lappend LeTexte "Protein Identity: $PId%" if {$Id != "" && $Id < $IdDeLaProtAvecSeq} { lappend LeTexte [H_Color "WARNING the identity with the sequence is only $PId% (< $PIdDeLaProtAvecSeq%)" red] } } } if {$AccessmRNA != "NomRNA" && $Type == "mRNA"} { lappend LesAccessAvecDesLiens $AccessmRNA set PageInfomRNA [PageInfo $AccessmRNA genbankfull "id acc des org"] set DefmRNA [join [LaDefinitionDeLAcNuc_PageInfo $PageInfomRNA] " " ] set Organismes [join [LesOrgasDeLaPage_PageInfo $PageInfomRNA] " ; "] set TaillemRNA [TailleDeLAcNuc_PageInfo $PageInfomRNA] lappend LeTexte "" lappend LeTexte [H_Bold "mRNA:"] lappend LeTexte "mRNA Access: $AccessmRNA" lappend LeTexte "mRNA Definition: $DefmRNA" lappend LeTexte "mRNA Organisms: $Organismes" lappend LeTexte "mRNA Length: $TaillemRNA pb" if {$Id != ""} { lappend LeTexte "mRNA Identity: $PId%" if {$Id < $IdDeLaProtAvecSeq} { lappend LeTexte [H_Color "WARNING the identity with the sequence is only $PId% (< $PIdDeLaProtAvecSeq%)" red] } } lappend LesAccessAvecDesLiens $AccessmRNA set DejaVu($AccessmRNA) 1 } } InterrogeProtAndmRNA unset } else { set AccessProt [string toupper [InterrogeContigAndProt $Nom Protein Access]] if {$AccessProt != ""} { lappend LesAccessAvecDesLiens $AccessProt set AccessDuChoisi $AccessProt set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LesOrganismes [LesOrgasDeLaPage_PageInfo $PageInfoProt] set Organismes [join $LesOrganismes " ; " ] set From "Contig from BLASTN against genembl DB" set AccessContig [string toupper [InterrogeContigAndProt $Nom Contig Access]] lappend LesAccessAvecDesLiens $AccessContig set TailleContig [InterrogeContigAndProt $Nom Contig Taille ] set OrgaContig [InterrogeContigAndProt $Nom Contig Organisme] lappend LeTexte "" lappend LeTexte [H_Bold "Closest neighbour protein:"] lappend LeTexte "Protein Access: $AccessProt" lappend LeTexte "Protein Definition: $DefProt" lappend LeTexte "Protein Organisms: $Organismes" lappend LeTexte "Protein Length: $TailleProt AA" lappend LeTexte "Protein From: $From" set AiJeTrouveUneProteineDeRef 1 set DejaVu($AccessProt) 1 set Id [InterrogeContigAndProt $Nom Protein Identity ] set PId [format "%.1f" [expr $Id * 100]] set IdDeRefDeLaProtAvecContig $IdMin foreach Orga $LesOrganismes { if {$Orga == $OrgaContig} {set IdDeRefDeLaProtAvecContig $IdMax} } set PIdDeRefDeLaProtAvecContig [format "%.1f" [expr $IdDeRefDeLaProtAvecContig * 100]] lappend LeTexte "Identity with Contig: $PId%" if {$Id < $IdDeRefDeLaProtAvecContig} { lappend LeTexte [H_Color "WARNING the identity with the sequence is only $PId% (< $PIdDeRefDeLaProtAvecContig%)" red] } lappend LeTexte "" lappend LeTexte [H_Bold "CONTIG:"] lappend LeTexte "Contig Access: $AccessContig" lappend LeTexte "Contig Organism: $OrgaContig" lappend LeTexte "Contig Length: $TailleContig pb" set DejaVu($AccessContig) 1 set Id [InterrogeContigAndProt $Nom Contig Identity ] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte "Identity with sequence: $PId%" if {$Id < $IdDeRef} { lappend LeTexte [H_Color "WARNING the identity with the sequence is only $PId% (< $PIdDeRef%)" red] } } } } if {!$AiJeTrouveUneProteineDeRef} { lappend LeTexte [H_Color "Warning -> Not found" red] } ###Recherche des proteines identiques a 98%" set LesAccessDesChoisi {} if {$AccessDuChoisi != ""} {lappend LesAccessDesChoisi $AccessDuChoisi} Espionne "$Nom -> other proteins with at least 98% of identity with the best protein" lappend LeTexte "" lappend LeTexte [H_Bold "Others Proteins with at least 98% of identity with the closest neighbour protein:"] set LesAccessDesProteinesIdentiquesDansMSF [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $NameQueryProt 0.98] if {$LesAccessDesProteinesIdentiquesDansMSF != ""} { AskLesPagesInfos load $LesAccessDesProteinesIdentiquesDansMSF protein set LesAccessDesIdentiques {} foreach Access $LesAccessDesProteinesIdentiquesDansMSF { set PageInfo [AskLesPagesInfos ask $Access] if {$PageInfo == ""} {continue} set Access [string toupper $Access] if {[info exists DejaVu($Access)]} {continue} set DejaVu($Access) 1 lappend LesAccessAvecDesLiens $Access lappend LesAccessDesChoisi $Access set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] set Taille [TailleDeLaProt_PageInfo $PageInfo] foreach Orga $LesOrgas { lappend LesAccessDesIdentiques "$Access ; Protein ; $Taille AA ; $Orga ; $Def" } } if {$LesAccessDesIdentiques != {}} { foreach LAccessIdentique $LesAccessDesIdentiques { lappend LeTexte $LAccessIdentique } } else { lappend LeTexte [H_Color "Warning -> None" orange] } AskLesPagesInfos unset } else { lappend LeTexte [H_Color "Warning -> None" orange] } if {0} { ###recherche des mRNAs et des proteines CrossLinked#### Espionne "$Nom -> mRNAs and proteins cross-linked" lappend LeTexte "" lappend LeTexte [H_Bold "Others CrossLinked Protein and mRNA complete CDS Accession:"] if {$LesAccessDesChoisi != {}} { set LesAccessCrossLinked [LesCrossLinkedDesAccess $LesAccessDesChoisi] if {$LesAccessCrossLinked != {}} { set LeTexteDesCrossLinked {} foreach LAccessCL [lsort -index 1 $LesAccessCrossLinked] { set Access [string toupper [lindex $LAccessCL 0]] if {[info exists DejaVu($Access)]} {continue} set DejaVu($Access) 1 lappend LesAccessAvecDesLiens $Access set Quoi [lindex $LAccessCL 1] set Taille [lindex $LAccessCL 2] if {$Quoi == "mRNA" } {set Taille "$Taille bp"} if {$Quoi == "Protein"} {set Taille "$Taille AA"} set Orga [lindex $LAccessCL 3] set Def [lindex $LAccessCL 4] lappend LeTexteDesCrossLinked "$Quoi ; $Access ; $Taille ; $Orga ; $Def" } if {$LeTexteDesCrossLinked != {}} { set LeTexte [concat $LeTexte $LeTexteDesCrossLinked] } else { lappend LeTexte [H_Color "Warning -> None" orange] } } } else { lappend LeTexte [H_Color "Warning -> None" orange] } } lappend LeTexte "" lappend LeTexte "" lappend LeTexte [H_Color [H_Balise [H_Bold [H_Center "Multiple Alignment of Complete Sequences (MACS)"]] H3] royalblue ] ###Enfin le MSF c'etait pas trop tot#### Espionne "$Nom -> informations about multiple alignment" lappend LeTexte "" lappend LeTexte [H_Bold "MACS:"] set AvecMSF 0 if {[file exists $FichierMSF] && [DecortiqueUnMSF $FichierMSF LesAccess Sequences]} { set AvecMSF 1 set NbAccess [llength $LesAccess ] set NormMDTot [MDScore $FichierMSF "CalculeMoi"] lappend LeTexte "Nb proteins: $NbAccess" lappend LeTexte "NormMD: $NormMDTot" if { $NormMDTot < 0.3} {lappend LeTexte [H_Color "WARNING the quality of the alignment is bad" red] } if {0.3 <= $NormMDTot && $NormMDTot < 0.5} {lappend LeTexte [H_Color "WARNING the quality of the alignment is medium" orange]} } else { lappend LeTexte [H_Color "Warning -> MSF file is not valid or does not exist" orange] } lappend LeTexte "" lappend LeTexte [H_Bold "MACS Clustering (sub-family determination) :"] if {[InterrogeLesClustersDesMSF $FichierClustMSF LesClusters] != "" && $AvecMSF} { set LesClusters [InterrogeLesClustersDesMSF $FichierClustMSF LesClusters] set NbClusters [llength $LesClusters] set ClusterDeLaProt [InterrogeLesClustersDesMSF $FichierClustMSF Access $NameQueryProt Cluster ] set LesAccess [InterrogeLesClustersDesMSF $FichierClustMSF Cluster $ClusterDeLaProt LesAccess] set NbAccess [llength $LesAccess] set NormMDDuClust [MDScoreAvecSelectionDuFichier $FichierMSF $LesAccess] lappend LeTexte "Nb clusters: $NbClusters" lappend LeTexte "Cluster of our protein: $ClusterDeLaProt" lappend LeTexte "Nb proteins in our cluster: $NbAccess" lappend LeTexte "NormMD of our Cluster: $NormMDDuClust" if { $NormMDDuClust < 0.3} {lappend LeTexte [H_Color "WARNING the quality of the alignment is bad" red]} if {0.3 <= $NormMDDuClust && $NormMDDuClust < 0.5} {lappend LeTexte [H_Color "WARNING the quality of the alignment is medium" orange]} InterrogeLesClustersDesMSF unset } else { lappend LeTexte [H_Color "Warning -> No sub-family determination detected" orange] } ###Human prot and mRNA found in MACS lappend LeTexte "" lappend LeTexte "" lappend LeTexte [H_Color [H_Balise [H_Bold [H_Center "Closest Human protein and mRNA complete CDS (MACS)"]] H3] royalblue ] lappend LeTexte "" lappend LeTexte [H_Bold "Closest Human Protein :"] if {[InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "Protein" Access] != ""} { set AccessProtHsap [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "Protein" Access] set Definition [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProtHsap Definition] set Identity [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessProtHsap Identity ] set Taille [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProtHsap Taille ] set Orgas [join [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProtHsap LesOrganismes] ";"] set PId [format "%.1f" [expr $Identity * 100]] lappend LesAccessAvecDesLiens $AccessProtHsap lappend LeTexte "Protein Access: $AccessProtHsap" lappend LeTexte "Protein Definition: $Definition" lappend LeTexte "Protein Organisms: $Orgas" lappend LeTexte "Protein Length: $Taille AA" lappend LeTexte "Protein Identity: $PId %" if {$Identity < $IdMin} { lappend LeTexte [H_Color "WARNING the identity with the sequence is only $PId% (< $PIdMin%)" red] } #mRNA human lappend LeTexte "" lappend LeTexte [H_Bold "Closest Human mRNA complete CDS :"] if {[InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "mRNA" Access] != ""} { set AccessmRNAHsap [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "mRNA" Access] set Definition [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProtHsap Definition] set Taille [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNAHsap Taille ] set Orgas [join [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProtHsap LesOrganismes] ";"] lappend LesAccessAvecDesLiens $AccessmRNAHsap lappend LeTexte "mRNA Access: $AccessmRNAHsap" lappend LeTexte "mRNA Definition: $Definition" lappend LeTexte "mRNA Organisms: $Orgas" lappend LeTexte "mRNA Length: $Taille bp" } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } ###Domaines### lappend LeTexte "" lappend LeTexte "" lappend LeTexte [H_Color [H_Balise [H_Bold [H_Center "Propagation of the information of the MACS"]] H3] royalblue ] lappend LeTexte "" lappend LeTexte [H_Bold "Domains with at least 80 % of similarity :"] if {[InterrogeDomaines $Nom LesDomaines] != ""} { foreach LeDomaine [lsort -index 0 [lsort -index 3 -real [InterrogeDomaines $Nom LesDomaines]]] { set Type [lindex $LeDomaine 0] if {$Type == "FEATURE"} {continue} set Id [lindex $LeDomaine 5] if {$Id < $IdMin} {continue} set TexteId "[format "%.1f" [expr $Id*100]] %" set Domaine [lindex $LeDomaine 1] set Def [lindex $LeDomaine 2] set Debut [lindex $LeDomaine 3] set Fin [lindex $LeDomaine 4] if {$Type == "INTERPRO"} {lappend LesAccessAvecDesLiens $Domaine} lappend LeTexte [format "%-10s %-10s from %-6s to %-6s with %-8s : %s" $Type $Domaine $Debut $Fin $TexteId $Def] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } ###Initial Protein Ontology et Global Protein Ontology#### Espionne "$Nom -> IPO" set FileGOXML "[RepertoireDuGenome]/GeneOntology/$Nom.xml" set LesGOAvecLiens {} lappend LeTexte "" lappend LeTexte [H_Bold "Initial Protein GENE ONTOLOGY (IPO) :"] set LesTypes [AskGOAnalyse $FileGOXML Methode IPO LesTypes] if {$LesTypes != {}} { foreach Type $LesTypes { foreach GO [AskGOAnalyse $FileGOXML Methode IPO Type $Type LesGO] { set Def [AskGOAnalyse $FileGOXML Type $Type GO $GO Definition] set TexteType [format "%-9s" $Type] lappend LeTexte "$TexteType $GO $Def" lappend LesGOAvecLiens $GO } } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } Espionne "$Nom -> GPO" lappend LeTexte "" lappend LeTexte [H_Bold "Global Protein GENE ONTOLOGY (GPO) :"] set LesTypes [AskGOAnalyse $FileGOXML Methode GPO LesTypes] if {$LesTypes != {}} { foreach Type $LesTypes { foreach GO [AskGOAnalyse $FileGOXML Methode GPO Type $Type LesGO] { set Def [AskGOAnalyse $FileGOXML Type $Type GO $GO Definition] set TexteType [format "%-9s" $Type] lappend LeTexte "$TexteType $GO $Def" lappend LesGOAvecLiens $GO } } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } AskGOAnalyse unset if {0} { Espionne "$Nom -> KEGG" lappend LeTexte "" lappend LeTexte [H_Bold "KEGG : KEGG"] if {[InterrogeMesKEGG $Nom LesKegg] != ""} { foreach Kegg [InterrogeMesKEGG $Nom LesKegg] { set Def [InterrogeMesKEGG Kegg $Kegg Definition] lappend LeTexte [format "%-8s %-8s %s" "KEGG" $Kegg $Def] } foreach Pathway [InterrogeMesKEGG $Nom LesPathway] { set Def [InterrogeMesKEGG Pathway $Pathway Definition] lappend LeTexte [format "%-8s %-8s %s" "PATHWAY" $Pathway $Def] } } else { lappend LeTexte [H_Color "Warning -> Not found" orange] } } Espionne "$Nom -> mise en forme" set TexteEnForme {} foreach Ligne $LeTexte { lappend TexteEnForme $Ligne lappend TexteEnForme [H_BR] } while {[regexp -all -nocase {<[a-z0-9]+[ ]{2}} $TexteEnForme tmp]} { set tmpnew [string trim $tmp] regsub -all $tmp $TexteEnForme "$tmpnew " TexteEnForme } while {[regexp {[ ]{2}} $TexteEnForme tmp]} { regsub -all " " $tmp "\\\\\\ " tmpnew regsub -all $tmp $TexteEnForme $tmpnew TexteEnForme } set TexteEnForme [join $TexteEnForme "\n"] foreach Access [lsort -unique $LesAccessAvecDesLiens] { set Access [string toupper $Access] if {[info exists TabDejaVu($Access)]} {continue} set TabDejaVu($Access) 1 regsub -nocase -all $Access $TexteEnForme [H_HrefGetz $Access $Access "PROTEIN GENBANKFULL INTERPRO" acc] TexteEnForme } foreach GO [lsort -unique $LesGOAvecLiens] { regsub -nocase -all $GO $TexteEnForme [H_HrefGetz $GO $GO "GO" id] TexteEnForme } set TexteEnForme [H_Font $TexteEnForme] Html_ZeroToBody Html_Append $TexteEnForme Html_BodyToEnd set Texte [Html_Get] Sauve $Texte dans $FichierRecap return } proc FichierRecapitulatifControl {} { set Ligne "GI;ProteinNameFromRam;AccessionNumber;ProteinIDPoulet;PreferredNamePoulet;ProteinIDHomme;PreferredNameHomme;ProteinIDMouse;PreferredNameMouse" lappend LesLignes $Ligne Espionne "$LesLignes" foreach GI [InterrogeListTauControl ListOf GI] { set ProteinName [InterrogeListTauControl $GI ProteinName] set GetzOutpdb ""; set GetzOut ""; set SeqGbTfa ""; set TfaProt "" set Access [InterrogeSortieNcbiControl $GI Access] set DB [InterrogeSortieNcbiControl $GI DB] if {[regexp "pdb" $DB]} { set FichierRequete "/genomics/link/Tau/GSTControl/entreepdb.bql" set FichierSortie "/genomics/link/Tau/GSTControl/sortiepdb.txt" set Elmt [split $Access "_"] set accesspdb [lindex $Elmt 0] set chain [lindex $Elmt 1] lappend LesLignesBird "ID * DB PDB" lappend LesLignesBird "WH SQLNATIVE SELECT distinct dr.dbaccession from pdb.header as h , pdb.dbref as dr where h.idcode='$accesspdb' and dr.chainid='$chain' and h.oid=dr.key_fk" lappend LesLignesBird "FM CSV" SauveLesLignes $LesLignesBird dans $FichierRequete BirdForceHoan $FichierRequete $FichierSortie foreach LigneFic [LesLignesDuFichier $FichierSortie] { if {[regexp "Query" $LigneFic]} {continue} set NvAcc $LigneFic } set FichierTfaPoulet "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/fastaquery/$NvAcc" set PIDPoulet [BlastPStringMoi $FichierTfaPoulet 9031] set PNPoulet [PreferedNameStringFromProteins $PIDPoulet] set FichierTfaHomme "/genomics/link/Tau/GSTControl/BlastpSurStringHomme/fastaquery/$NvAcc" set PIDHomme [BlastPStringMoi $FichierTfaHomme 9606] set PNHomme [PreferedNameStringFromProteins $PIDHomme] set FichierTfaMouse "/genomics/link/Tau/GSTControl/BlastpSurStringMouse/fastaquery/$NvAcc" set PIDMouse [BlastPStringMoi $FichierTfaMouse 10090] set PNMouse [PreferedNameStringFromProteins $PIDMouse] set Ligne "$GI;$ProteinName;$Access/$NvAcc;$PIDPoulet;$PNPoulet;$PIDHomme;$PNHomme;$PIDMouse;$PNMouse" lappend LesLignes $Ligne } else { set FichierTfaPoulet "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/fastaquery/$Access" set PIDPoulet [BlastPStringMoi $FichierTfaPoulet 9031] set PNPoulet [PreferedNameStringFromProteins $PIDPoulet] set FichierTfaHomme "/genomics/link/Tau/GSTControl/BlastpSurStringHomme/fastaquery/$Access" set PIDHomme [BlastPStringMoi $FichierTfaHomme 9606] set PNHomme [PreferedNameStringFromProteins $PIDHomme] set FichierTfaMouse "/genomics/link/Tau/GSTControl/BlastpSurStringMouse/fastaquery/$Access" set PIDMouse [BlastPStringMoi $FichierTfaMouse 10090] set PNMouse [PreferedNameStringFromProteins $PIDMouse] set Ligne "$GI;$ProteinName;$Access;$PIDPoulet;$PNPoulet;$PIDHomme;$PNHomme;$PIDMouse;$PNMouse" lappend LesLignes $Ligne } } SauveLesLignes $LesLignes dans "/genomics/link/Tau/GSTControl/FichierRecapitulatifControl.txt" } proc FichierRecapitulatifDes1500PourOligo {} { set Repertoire "/genomics/link/EVImm/Arnaud/nuctfa1500Final" foreach File [glob -nocomplain "$Repertoire/*"] { set Nom [file tail $File] set Access [StringApres ":" dans [lindex [LesLignesDuFichier $File] 0]] set Ligne "$Nom $Access" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/Arnaud/FichierFinalDes1500" } proc FichierRecapitulatifDesClusters_PO {FichierOUT} { set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set PMaskingMax 0.95 set LesClusters [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] set LesNoms [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesNoms] set NbNoms [llength $LesNoms] set RepMasked "[RepertoireDuGenome]/nucmask" set RepProttfa "[RepertoireDuGenome]/prottfa" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set LeTexte {} lappend LeTexte "Cluster\tNumber of Sequences\tNumber of Sequences after masking\tNumber of Proteins\tNumber of Non redundant Proteins\tNumber of Protein annotated in terms of Process GO\tNumber of Protein annotated in terms of Function GO\tNumber of Protein annotated in terms of Component GO\tNumber of Full-length mRNA" set LeTextePourcentage {} lappend LeTextePercent "Cluster\tSequences/All Sequences\tSAM/Sequences\tProteins/SAM\tNRP/Proteins\tProcess/NRP\tFunction/NRP\tComponent/NRP\tmRNA/NRP" foreach Cluster $LesClusters { set LesNoms [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] set NbTot [llength $LesNoms] set NbNonMasked 0 set NbProt 0 set NbProtNonRedondantes 0 set NbmRNAHsap 0 set NbProtAvecGOProcess 0 set NbProtAvecGOFunction 0 set NbProtAvecGOComponent 0 foreach Nom $LesNoms { Espionne "$Cluster -> $Nom" set FileMasked "$RepMasked/$Nom" set PMasking [PourcentageDeSequenceMasquee $FileMasked] if {$PMasking != "" && $PMasking < $PMaskingMax} {incr NbNonMasked} if {![file exists "$RepProttfa/$Nom"]} {continue} incr NbProt if {[info exists TabTmp($Nom)]} {continue} set TabTmp($Nom) 1 incr NbProtNonRedondantes foreach Jum [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles] { set ClusterJum [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Jum Cluster] if {$Cluster != $ClusterJum} {continue} set TabTmp($Jum) 1 } set GOProcess 0 set GOFunction 0 set GOComponent 0 foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [InterrogeGeneOntology $FichierGO GO $GO Type] if {$Type == "process" && $GOProcess == 0} { incr GOProcess incr NbProtAvecGOProcess } if {$Type == "function" && $GOFunction == 0} { incr GOFunction incr NbProtAvecGOFunction } if {$Type == "component" && $GOComponent == 0} { incr GOComponent incr NbProtAvecGOComponent } } if {![file exists "$RepmRNA/$Nom"]} {continue} incr NbmRNAHsap } set PTot [format "%.2f" [expr $NbTot * 100.0 / $NbNoms ]] set PNonMasked [format "%.2f" [expr $NbNonMasked * 100.0 / $NbTot ]] set PProt [format "%.2f" [expr $NbProt * 100.0 / $NbNonMasked ]] set PProtNonRedondantes [format "%.2f" [expr $NbProtNonRedondantes * 100.0 / $NbProt ]] set PmRNAHsap [format "%.2f" [expr $NbmRNAHsap * 100.0 / $NbProtNonRedondantes]] set PProtAvecGOProcess [format "%.2f" [expr $NbProtAvecGOProcess * 100.0 / $NbProtNonRedondantes]] set PProtAvecGOFunction [format "%.2f" [expr $NbProtAvecGOFunction * 100.0 / $NbProtNonRedondantes]] set PProtAvecGOComponent [format "%.2f" [expr $NbProtAvecGOComponent * 100.0 / $NbProtNonRedondantes]] lappend LeTexte "$Cluster\t$NbTot\t$NbNonMasked\t$NbProt\t$NbProtNonRedondantes\t$NbProtAvecGOProcess\t$NbProtAvecGOFunction\t$NbProtAvecGOComponent\t$NbmRNAHsap" lappend LeTextePercent "$Cluster\t$PTot\t$PNonMasked\t$PProt\t$PProtNonRedondantes\t$PProtAvecGOProcess\t$PProtAvecGOFunction\t$PProtAvecGOComponent\t$PmRNAHsap" } if {$LeTexte == {}} {return} set Texte [join $LeTexte "\n"] set TextePercent [join $LeTextePercent "\n"] regsub -all {\.} $TextePercent "," TextePercent Sauve "$Texte\n\nNRP\tNon Redundant Proteins\nSAM\tSequences After Masking\n$TextePercent" dans $FichierOUT return } proc FichierRecapitulatifDesZscoreDesGODesClusters_PO {FichierRecapitulatifGODesClusters} { Espionne "RecapitulatifDesZscoreDesGODesClusters running ..." if {![file exists $FichierRecapitulatifGODesClusters]} {return} set Tab(LesGO) {} set Tab(LesClusters) {} set Tab(LesPop) {} set F [open $FichierRecapitulatifGODesClusters] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Cluster [lindex $LaLigne 0] set Pop [lindex $LaLigne 1] set GO [lindex $LaLigne 2] set Type [lindex $LaLigne 3] set Niv [lindex $LaLigne 4] set Def [lindex $LaLigne 5] set r [lindex $LaLigne 6] set R [lindex $LaLigne 7] set n [lindex $LaLigne 8] set N [lindex $LaLigne 9] set Zscore [lindex $LaLigne 10] regsub {\,} $Zscore "." Zscore regsub {^Cluster } $Cluster "" Cluster set BigCluster "" regexp -nocase {^([^_]+)_} $Cluster tmp BigCluster if {![info exists TabTmp($Cluster)]} { set TabTmp($Cluster) 1 lappend Tab(LesClusters) $Cluster } regsub {^Pop } $Pop "" Pop if {$Pop == "HumanProteome"} { set Pop "${Pop}_$BigCluster" } if {![info exists Tab($Pop,LesClusters)]} { set Tab($Pop,LesClusters) {} set Tab($Pop,LesGO) {} lappend Tab(LesPop) $Pop } if {![info exists TabTmp($Pop,$Cluster)]} { set TabTmp($Pop,$Cluster) 1 lappend Tab($Pop,LesClusters) $Cluster } if {![info exists TabTmp($Pop,$GO)]} { set TabTmp($Pop,$GO) 1 lappend Tab($Pop,LesGO) $GO } set Tab($GO,Info) "$GO\t$Type\t$Niv\t$Def" set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore) $Zscore set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,r) $r #Espionne "r: [set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,r)]" set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,R) $R set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,n) $n set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,N) $N } close $F foreach Pop [set Tab(LesPop)] { set Tab($Pop,LeTexte) {} set Tab($Pop,Entete) [list GO Type Level Definition Population] foreach Cluster [set Tab($Pop,LesClusters)] { lappend Tab($Pop,Entete) "$Cluster Zscore r R n N" } lappend Tab($Pop,Entete) "ZscoreMax" set Tab($Pop,Entete) [join [set Tab($Pop,Entete)] "\t"] } foreach Pop [set Tab(LesPop)] { foreach GO [set Tab($Pop,LesGO)] { set Info [set Tab($GO,Info)] set ZscoreMax -1e200 set LaLigne [list $Info] lappend LaLigne $Pop foreach Cluster [set Tab($Pop,LesClusters)] { if {![info exists Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore)]} { set Zscore "" } else { set Zscore [set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore)] if {$ZscoreMax < $Zscore} {set ZscoreMax $Zscore} lappend LaLigne $Zscore ###################################################################################### # 20050429 # J'en suis la, cette info n'existe pas, je ne sais pas pourquoi!!!!!!!!!!!!!!!!! ###################################################################################### set r [set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,r)] lappend LaLigne $r set R [set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,R)] lappend LaLigne $R set n [set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,n)] lappend LaLigne $n set N [set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore,$Zscore,N)] lappend LaLigne $N } } lappend LaLigne $ZscoreMax lappend Tab($Pop,LeTexte) $LaLigne } set LeTexte {} lappend LeTexte [set Tab($Pop,Entete)] foreach LaLigne [lsort -decreasing -real -index end [set Tab($Pop,LeTexte)]] { set Ligne [join $LaLigne "\t"] #Espionne $Ligne lappend LeTexte $Ligne } set Texte [join $LeTexte "\n"] regsub -all {\.} $Texte "," Texte Sauve $Texte dans "$FichierRecapitulatifGODesClusters.$Pop" } return } proc FichierRecapitulatifDesZscoreDesGODesClusters_PO_OLD {FichierRecapitulatifGODesClusters} { if {![file exists $FichierRecapitulatifGODesClusters]} {return} set Tab(LesGO) {} set Tab(LesClusters) {} set Tab(LesPop) {} set F [open $FichierRecapitulatifGODesClusters] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Cluster [lindex $LaLigne 0] set Pop [lindex $LaLigne 1] set GO [lindex $LaLigne 2] set Type [lindex $LaLigne 3] set Niv [lindex $LaLigne 4] set Def [lindex $LaLigne 5] set Zscore [lindex $LaLigne 6] regsub {\,} $Zscore "." Zscore regsub {^Cluster } $Cluster "" Cluster set BigCluster "" regexp -nocase {^([^_]+)_} $Cluster tmp BigCluster if {![info exists TabTmp($Cluster)]} { set TabTmp($Cluster) 1 lappend Tab(LesClusters) $Cluster } regsub {^Pop } $Pop "" Pop if {$Pop == "HumanProteome"} { set Pop "${Pop}_$BigCluster" } if {![info exists Tab($Pop,LesClusters)]} { set Tab($Pop,LesClusters) {} set Tab($Pop,LesGO) {} lappend Tab(LesPop) $Pop } if {![info exists TabTmp($Pop,$Cluster)]} { set TabTmp($Pop,$Cluster) 1 lappend Tab($Pop,LesClusters) $Cluster } if {![info exists TabTmp($Pop,$GO)]} { set TabTmp($Pop,$GO) 1 lappend Tab($Pop,LesGO) $GO } set Tab($GO,Info) "$GO\t$Type\t$Niv\t$Def" set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore) $Zscore } close $F foreach Pop [set Tab(LesPop)] { set Tab($Pop,LeTexte) {} set Tab($Pop,Entete) [list GO Type Level Definition Population] foreach Cluster [set Tab($Pop,LesClusters)] { lappend Tab($Pop,Entete) "$Cluster Zscore" } lappend Tab($Pop,Entete) "ZscoreMax" set Tab($Pop,Entete) [join [set Tab($Pop,Entete)] "\t"] } foreach Pop [set Tab(LesPop)] { foreach GO [set Tab($Pop,LesGO)] { set Info [set Tab($GO,Info)] set ZscoreMax -1e200 set LaLigne [list $Info] lappend LaLigne $Pop foreach Cluster [set Tab($Pop,LesClusters)] { if {![info exists Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore)]} { set Zscore "" } else { set Zscore [set Tab($GO,Cluster,$Cluster,Pop,$Pop,Zscore)] if {$ZscoreMax < $Zscore} {set ZscoreMax $Zscore} } lappend LaLigne $Zscore } lappend LaLigne $ZscoreMax lappend Tab($Pop,LeTexte) $LaLigne } set LeTexte {} lappend LeTexte [set Tab($Pop,Entete)] foreach LaLigne [lsort -decreasing -real -index end [set Tab($Pop,LeTexte)]] { set Ligne [join $LaLigne "\t"] Espionne $Ligne lappend LeTexte $Ligne } set Texte [join $LeTexte "\n"] regsub -all {\.} $Texte "," Texte Sauve $Texte dans "$FichierRecapitulatifGODesClusters.$Pop" } return } proc FichierRecapitulatifGODesClusters_PO {FichierOUT {nMin 3} {ZscoreMin 1} {NivMin 3} {RapportEntreNbIndivEtTaillePopMin 0.05}} { set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierGOProteo "[GODBDir]/GeneOntology_HUMAN" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" Espionne "Populations des clusters" set Tab(LesNoms) {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set Tab(Cluster,$Cluster,LesIndividusGO) {} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $Fichier Cluster $Cluster LesNoms] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 lappend Tab(LesNoms) $Nom foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} set LIndividu [lsort -unique $LIndividu] lappend Tab(Cluster,$Cluster,LesIndividusGO) $LIndividu } } Espionne "OK" if {[info exists TabDeJaVu]} {unset TabDeJaVu} set LesBigClusters {} Espionne "Populations totales selectionnees" foreach Nom [set Tab(LesNoms)] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] set BigCluster "" regexp -nocase {^([^_]+)_} $Cluster tmp BigCluster if {![info exists TabLesIndividusGODeLaPop($BigCluster)]} { set TabLesIndividusGODeLaPop($BigCluster) {} } if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu != {}} { set LIndividu [lsort -unique $LIndividu] lappend TabLesIndividusGODeLaPop($BigCluster) $LIndividu } } Espionne "OK" Espionne "Lecture Du FichierGO du Proteome" #Gene Ontology du proteome humain##### set LesIndividusGODeLaPop2 {} foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} lappend LesIndividusGODeLaPop2 [lsort -unique $LIndividu] } Espionne "OK" Espionne "Calcul" set LeTexte {} set LeTexteRed {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set LesIndividusGO [set Tab(Cluster,$Cluster,LesIndividusGO)] set BigCluster "" regexp -nocase {^([^_]+)_} $Cluster tmp BigCluster ###GO GO GO GO################ set LesIndividusGODeLaPop [set TabLesIndividusGODeLaPop($BigCluster)] foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop] { set GO [lindex $LeGO 0] set Z [lindex $LeGO 1] set r [lindex $LeGO 2] set R [lindex $LeGO 3] set n [lindex $LeGO 4] set N [lindex $LeGO 5] set Stat [join [lrange $LeGO 1 end] "\t"] set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] if {$r <= 0 || $n <= 0} {continue} set Ligne "Cluster $Cluster\tPop $BigCluster\t$GO\t$Type\t$Niv\t$Def\t$r\t$R\t$n\t$N\t$Stat" lappend LeTexte $Ligne if {$NivMin <= $Niv && $RapportEntreNbIndivEtTaillePopMin <= [expr $r * 1.0 / $R] && $nMin <= $n && $ZscoreMin <= $Z} { #Espionne $Ligne lappend LeTexteRed $Ligne } } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop2] { set GO [lindex $LeGO 0] set Z [lindex $LeGO 1] set r [lindex $LeGO 2] set R [lindex $LeGO 3] set n [lindex $LeGO 4] set N [lindex $LeGO 5] set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] if {$r <= 0 || $n <= 0} {continue} set Ligne "Cluster $Cluster\tPop HumanProteome\t$GO\t$Type\t$Niv\t$Def\t$r\t$R\t$n\t$N\t$Stat" lappend LeTexte $Ligne if {$NivMin <= $Niv && $RapportEntreNbIndivEtTaillePopMin <= [expr $r * 1.0 / $R] && $nMin <= $n && $ZscoreMin <= $Z} { #Espionne $Ligne lappend LeTexteRed $Ligne } } } Espionne "OK" set Texte [join $LeTexte "\n"] regsub -all {\.} $Texte "," Texte SaveInFile $Texte $FichierOUT set Texte [join $LeTexteRed "\n"] regsub -all {\.} $Texte "," Texte SaveInFile $Texte "$FichierOUT.red" FichierRecapitulatifDesZscoreDesGODesClusters_PO $FichierOUT FichierRecapitulatifDesZscoreDesGODesClusters_PO "$FichierOUT.red" return } proc FichierRecapitulatifGODesClusters_PO_OLD {FichierOUT} { set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierGOProteo "[GODBDir]/GeneOntology_HUMAN" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set NivMin 3 set RapportEntreNbIndivEtTaillePopMin 0.05 #set nMin 10 set nMin 3 #set ZscoreMin 1 set ZscoreMin 1 Espionne "Populations des clusters" set Tab(LesNoms) {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set Tab(Cluster,$Cluster,LesIndividusGO) {} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $Fichier Cluster $Cluster LesNoms] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 lappend Tab(LesNoms) $Nom foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} set LIndividu [lsort -unique $LIndividu] lappend Tab(Cluster,$Cluster,LesIndividusGO) $LIndividu } } Espionne "OK" if {[info exists TabDeJaVu]} {unset TabDeJaVu} set LesBigClusters {} Espionne "Populations totales selectionnees" foreach Nom [set Tab(LesNoms)] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] set BigCluster "" regexp -nocase {^([^_]+)_} $Cluster tmp BigCluster if {![info exists TabLesIndividusGODeLaPop($BigCluster)]} { set TabLesIndividusGODeLaPop($BigCluster) {} } if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} #####GO GO GO GO######################################## set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu != {}} { set LIndividu [lsort -unique $LIndividu] lappend TabLesIndividusGODeLaPop($BigCluster) $LIndividu } } Espionne OK Espionne "Lecture Du FichierGO du Proteome" #Gene Ontology du proteome humain##### set LesIndividusGODeLaPop2 {} foreach GeneProteo [lsort -unique [InterrogeGeneOntology $FichierGOProteo LesNoms]] { set LIndividu {} foreach GO [InterrogeGeneOntology $FichierGOProteo $GeneProteo LesGO] { lappend LIndividu $GO foreach GOAncetre [InterrogeGeneOntology $FichierGOProteo GO $GO LesAncetres] { lappend LIndividu $GOAncetre } } if {$LIndividu == {}} {continue} lappend LesIndividusGODeLaPop2 [lsort -unique $LIndividu] } Espionne "OK" Espionne "Calcul" set LeTexte {} set LeTexteRed {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set LesIndividusGO [set Tab(Cluster,$Cluster,LesIndividusGO)] set BigCluster "" regexp -nocase {^([^_]+)_} $Cluster tmp BigCluster ###GO GO GO GO################ set LesIndividusGODeLaPop [set TabLesIndividusGODeLaPop($BigCluster)] foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop] { set GO [lindex $LeGO 0] set Z [lindex $LeGO 1] set r [lindex $LeGO 2] set R [lindex $LeGO 3] set n [lindex $LeGO 4] set N [lindex $LeGO 5] set Stat [join [lrange $LeGO 1 end] "\t"] set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] if {$r <= 0 || $n <= 0} {continue} set Ligne "Cluster $Cluster\tPop $BigCluster\t$GO\t$Type\t$Niv\t$Def\t$Stat" lappend LeTexte $Ligne if {$NivMin <= $Niv && $RapportEntreNbIndivEtTaillePopMin <= [expr $r * 1.0 / $R] && $nMin <= $n && $ZscoreMin <= $Z} { Espionne $Ligne lappend LeTexteRed $Ligne } } foreach LeGO [LesZscoreDesRequetesDuGroupe $LesIndividusGO $LesIndividusGODeLaPop2] { set GO [lindex $LeGO 0] set Z [lindex $LeGO 1] set r [lindex $LeGO 2] set R [lindex $LeGO 3] set n [lindex $LeGO 4] set N [lindex $LeGO 5] set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] set Niv [lindex [GODB Type $Type GO $GO LesNiveaux ] 0] set Stat [join [lrange $LeGO 1 end] "\t"] if {$r <= 0 || $n <= 0} {continue} set Ligne "Cluster $Cluster\tPop HumanProteome\t$GO\t$Type\t$Niv\t$Def\t$Stat" lappend LeTexte $Ligne if {$NivMin <= $Niv && $RapportEntreNbIndivEtTaillePopMin <= [expr $r * 1.0 / $R] && $nMin <= $n && $ZscoreMin <= $Z} { Espionne $Ligne lappend LeTexteRed $Ligne } } } Espionne "OK" set Texte [join $LeTexte "\n"] regsub -all {\.} $Texte "," Texte Sauve $Texte dans $FichierOUT set Texte [join $LeTexteRed "\n"] regsub -all {\.} $Texte "," Texte Sauve $Texte dans "$FichierOUT.red" FichierRecapitulatifDesZscoreDesGODesClusters_PO $FichierOUT FichierRecapitulatifDesZscoreDesGODesClusters_PO "$FichierOUT.red" return } proc FichierRecapitulatifPourTous {{LesNoms ""} {IdMin 0.8} {IdMax 0.95}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set RepRecap "[RepertoireDuGenome]/BilanHTML" if {![file exists $RepRecap]} {File mkdir $RepRecap} set Keep 0 if {[OuiOuNon "If some file exists in $RepRecap, Do you want to conserv them?"]} {set Keep 1} set LeTexteIndex {} foreach Nom $LesNoms { Espionne $Nom if {[file exists "$RepRecap/$Nom.html"] && $Keep} {continue} Espionne "$Nom -> Bilan" FichierRecapitulatif $Nom $IdMin $IdMax Espionne "$Nom -> Bilan done" } return } proc FichierRecapitulatifRedondanceDesProteinesInterClusters_PO {FichierOUT} { ####ATTENTION La redondance est calculee par rapport au nombre de proteines identifiees dans le cluster #### et non pas par rapport au nombre de sequences dans ce cluster set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set LesNoms [lsort -unique [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesNoms]] set LesClusters [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] foreach C1 $LesClusters { foreach C2 $LesClusters { set Tab($C1,$C2) 0 } } set RepProttfa "[RepertoireDuGenome]/prottfa" foreach Nom $LesNoms { if {![file exists "$RepProttfa/$Nom"]} {continue} Espionne $Nom set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] #Elimine les redondances des jumeaux dans 1 cluster donne if {[info exists TabTmp($Cluster,$Nom)]} {continue} set TabTmp($Cluster,$Nom) 1 incr Tab($Cluster,$Cluster) foreach Jum [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles] { set ClusterJum [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Jum Cluster] if {$ClusterJum == $Cluster} {set TabTmp($Cluster,$Jum) 1;continue} #Elimine les redondances dans les autres clusters avec lesquels le cluster etudie se compare if {[info exists TabTmp($Cluster,$Nom,$ClusterJum)]} {continue} set TabTmp($Cluster,$Nom,$ClusterJum) 1 incr Tab($Cluster,$ClusterJum) } } set LeTexte {} set LaLigne {} lappend LaLigne "Cluster" foreach Cluster $LesClusters {lappend LaLigne $Cluster} lappend LeTexte [join $LaLigne "\t"] set LeTexteP {} set LaLigneP {} lappend LaLigneP "Cluster" foreach Cluster $LesClusters {lappend LaLigneP $Cluster} lappend LeTexteP [join $LaLigneP "\t"] set LeTexteP2 {} set LaLigneP2 {} lappend LaLigneP2 "Cluster" foreach Cluster $LesClusters {lappend LaLigneP2 $Cluster} lappend LeTexteP2 [join $LaLigneP2 "\t"] foreach C1 $LesClusters { set NTot [set Tab($C1,$C1)] set LaLigne {} set LaLigneP {} set LaLigneP2 {} lappend LaLigne $C1 lappend LaLigneP $C1 lappend LaLigneP2 $C1 foreach C2 $LesClusters { set NTot2 [set Tab($C2,$C2)] set n [set Tab($C1,$C2)] lappend LaLigne $n lappend LaLigneP [format "%.2f" [expr $n * 100.0 / $NTot ]] lappend LaLigneP2 [format "%.2f" [expr $n * 100.0 / ($NTot + $NTot2 - $n)]] } lappend LeTexte [join $LaLigne "\t"] lappend LeTexteP [join $LaLigneP "\t"] lappend LeTexteP2 [join $LaLigneP2 "\t"] } if {$LeTexte == {}} {return} set Texte [join $LeTexte "\n"] set TexteP [join $LeTexteP "\n"] set TexteP2 [join $LeTexteP2 "\n"] regsub -all {\.} $TexteP "," TexteP regsub -all {\.} $TexteP2 "," TexteP2 Sauve "$Texte\n\n\n$TexteP\n\n\n$TexteP2" dans $FichierOUT return } proc FichierRecapitulatifTau {} { set Ligne "GI;ProteinNameFromRam;AccessionNumber;ProteinIDPoulet;PreferredNamePoulet;ProteinIDHomme;PreferredNameHomme;ProteinIDMouse;PreferredNameMouse" lappend LesLignes $Ligne Espionne "$LesLignes" foreach GI [InterrogeListTau ListOf GI] { set ProteinName [InterrogeListTau $GI Name] set GetzOutpdb ""; set GetzOut ""; set SeqGbTfa ""; set TfaProt "" set Access [InterrogeSortieNcbi $GI Access] set DB [InterrogeSortieNcbi $GI DB] if {[regexp "pdb" $DB]} { set FichierRequete "/genomics/link/Tau/GSTRdCVF/entreepdb.bql" set FichierSortie "/genomics/link/Tau/GSTRdCVF/sortiepdb.txt" set Elmt [split $Access "_"] set accesspdb [lindex $Elmt 0] set chain [lindex $Elmt 1] lappend LesLignesBird "ID * DB PDB" lappend LesLignesBird "WH SQLNATIVE SELECT distinct dr.dbaccession from pdb.header as h , pdb.dbref as dr where h.idcode='$accesspdb' and dr.chainid='$chain' and h.oid=dr.key_fk" lappend LesLignesBird "FM CSV" SauveLesLignes $LesLignesBird dans $FichierRequete BirdForceHoan $FichierRequete $FichierSortie foreach LigneFic [LesLignesDuFichier $FichierSortie] { if {[regexp "Query" $LigneFic]} {continue} set NvAcc $LigneFic } set FichierTfaPoulet "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/fastaquery/$NvAcc" set PIDPoulet [BlastPStringMoi $FichierTfaPoulet 9031] set PNPoulet [PreferedNameStringFromProteins $PIDPoulet] set FichierTfaHomme "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/fastaquery/$NvAcc" set PIDHomme [BlastPStringMoi $FichierTfaHomme 9606] set PNHomme [PreferedNameStringFromProteins $PIDHomme] set FichierTfaMouse "/genomics/link/Tau/GSTRdCVF/BlastpSurStringMouse/fastaquery/$NvAcc" set PIDMouse [BlastPStringMoi $FichierTfaMouse 10090] set PNMouse [PreferedNameStringFromProteins $PIDMouse] set Ligne "$GI;$ProteinName;$Access/$NvAcc;$PIDPoulet;$PNPoulet;$PIDHomme;$PNHomme;$PIDMouse;$PNMouse" lappend LesLignes $Ligne } else { set FichierTfaPoulet "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/fastaquery/$Access" set PIDPoulet [BlastPStringMoi $FichierTfaPoulet 9031] set PNPoulet [PreferedNameStringFromProteins $PIDPoulet] set FichierTfaHomme "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/fastaquery/$Access" set PIDHomme [BlastPStringMoi $FichierTfaHomme 9606] set PNHomme [PreferedNameStringFromProteins $PIDHomme] set FichierTfaMouse "/genomics/link/Tau/GSTRdCVF/BlastpSurStringMouse/fastaquery/$Access" set PIDMouse [BlastPStringMoi $FichierTfaMouse 10090] set PNMouse [PreferedNameStringFromProteins $PIDMouse] set Ligne "$GI;$ProteinName;$Access;$PIDPoulet;$PNPoulet;$PIDHomme;$PNHomme;$PIDMouse;$PNMouse" lappend LesLignes $Ligne } } SauveLesLignes $LesLignes dans "/genomics/link/Tau/GSTRdCVF/FichierRecapitulatif.txt" } proc FichierRecapitulatifTotal_PO {FichierOUT} { #Nom Cluster JumMemeCluster nJumMemeCluster JumClust2 nJumClust2 JumClust3 nJumClust3 .... DefIni Loc Tissue DS Methode MeanDef GeneName GO set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set NbTissuesEtDSMax 10 set NbGeneNameMax 5 set LesClusters [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] set LesNoms [lsort -unique [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesNoms ]] foreach Cluster $LesClusters {set Tab(Cluster,$Cluster,LesNomsDeRef) {}} foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] if {[info exists TabTmp($Nom)]} {continue} if {![info exists Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles)]} { set TabTmp($Nom) 1 ###INI### set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles) {} set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles) 0 foreach Clust $LesClusters { set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$Clust) {} set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesAccIniDesJumellesDuCluster,$Clust) {} set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$Clust) 0 } ######### lappend Tab(Cluster,$Cluster,LesNomsDeRef) $Nom incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$Cluster) incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles) } foreach Jum [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles] { if {$Nom == $Jum} {continue} set ClusterJum [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Jum Cluster] set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Jum Access ] if {$Cluster == $ClusterJum} {set TabTmp($Jum) 1} lappend Tab(Cluster,$Cluster,NomDeRef,$Nom,LesAccIniDesJumellesDuCluster,$ClusterJum) $AccIni lappend Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$ClusterJum) $Jum lappend Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles) $Jum incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$ClusterJum) incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles) } } if {[info exists TabTmp]} {unset TabTmp} set LesAccess {} foreach Cluster $LesClusters { foreach Nom [set Tab(Cluster,$Cluster,LesNomsDeRef)] { set Methode "Protein" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { if {$AccessmRNA != "NOMRNA" && $AccessmRNA != ""} { set Methode "mRNA" set AccessProt $AccessmRNA } else { set Methode "Contig" set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { set AccessProt "" set Methode "NoProtein" } } } if {$AccessProt != "" && ![info exists TabTmp($AccessProt)]} { set TabTmp($AccessProt) 1 lappend LesAccess $AccessProt } set Tab($Nom,Access) $AccessProt set Tab($Nom,Methode) $Methode set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set NameQueryProt "QUERY_PROTEIN" set Id 0.98 set LesAccessProches [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $NameQueryProt $Id] Espionne "\n$Nom\n$LesAccessProches" set Tab($Nom,LesAccessProches) {} foreach AccessProt $LesAccessProches { set TabTmp($AccessProt) 1 lappend Tab($Nom,LesAccessProches) $AccessProt lappend LesAccess $AccessProt } AskMSF $FichierMSF unset } } Espionne "Database is loading..." AskLesPagesInfos load $LesAccess protein Espionne "Database loaded..." set LeTexte {} set LaLigne [list GScopeID Cluster ID HumanLoc Tissues DevStages Method ProtID Organism Definition MeanDefinition GeneNames "GO Process" "GO Function" "GO Component"] foreach ClusterJum $LesClusters { lappend LaLigne "Cluster $ClusterJum Twins" "Cluster $ClusterJum TwinsID" "Cluster $ClusterJum NbTwins" } lappend LaLigne "Total Twins" "Total NbTwins" lappend LeTexte [join $LaLigne "\t"] #Espionne "Lecture du Fichier $FichierGO" foreach Cluster $LesClusters { foreach Nom [set Tab(Cluster,$Cluster,LesNomsDeRef)] { set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access ] #set DefIni [join [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] ""] set LesJumelles [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$Cluster)] lappend LesJumelles $Nom ####EST########################## set LesTissues {} set LesDS {} foreach Jum $LesJumelles { foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Jum LesTissueType] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Jum TissueType $Tissue n] if {![info exists TabTmp($Nom,$Tissue,n)]} { set TabTmp($Nom,$Tissue,n) 0 lappend LesTissues $Tissue } incr TabTmp($Nom,$Tissue,n) $n } foreach DS [InterrogeSelectedEST $FichierSelectedEST Nom $Jum LesDevStage] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Jum DevStage $DS n] if {![info exists TabTmp($Nom,$DS,n)]} { set TabTmp($Nom,$DS,n) 0 lappend LesDS $DS } incr TabTmp($Nom,$DS,n) $n } } set LesTissuesAvecEffectifs {} foreach Tissue $LesTissues { set n [set TabTmp($Nom,$Tissue,n)] lappend LesTissuesAvecEffectifs [list "$Tissue ($n)" $n] } set LesDSAvecEffectifs {} foreach DS $LesDS { set n [set TabTmp($Nom,$DS,n)] lappend LesDSAvecEffectifs [list "$DS ($n)" $n] } set LesTissuesDefinitifs {} set i 0 foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissuesAvecEffectifs] { incr i if {$i > $NbTissuesEtDSMax} {break} lappend LesTissuesDefinitifs [lindex $LeTissue 0] } set Tissues [join $LesTissuesDefinitifs ";"] set LesDSDefinitifs {} set i 0 foreach LeDS [lsort -index 1 -decreasing -integer $LesDSAvecEffectifs] { incr i if {$i > $NbTissuesEtDSMax} {break} lappend LesDSDefinitifs [lindex $LeDS 0] } set DS [join $LesDSDefinitifs ";"] ####PROT############################# set Methode [set Tab($Nom,Methode)] set Def "" set Orgas "" set Acc [set Tab($Nom,Access)] if {$Acc != ""} { set PI [AskLesPagesInfos ask $Acc] set Def [string trim [join [LaDefinitionDeLaProt_PageInfo $PI] ";"]] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] } if {$Def == ""} { if {$Acc != ""} {lappend LesAcc $Acc} set LesAcc {} set LesDef {} set LesOrgas {} set Methode "ClosestProt" foreach AccessProche [lsort -unique [set Tab($Nom,LesAccessProches)]] { set PI [AskLesPagesInfos ask $AccessProche] foreach Def [LaDefinitionDeLaProt_PageInfo $PI] { set Def [string trim $Def] if {$Def == ""} {continue} lappend LesDef $Def } foreach Orga [LesOrgasDeLaPage_PageInfo $PI] { set Orga [string trim $Orga] lappend LesOrgas $Orga } lappend LesAcc $AccessProche } set Acc [join $LesAcc ";"] set Def [join [lsort -unique $LesDef ] ";"] set Orgas [join [lsort -unique $LesOrgas] ";"] } ###DefinitionMoyenne##### set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i if {$i > $NbGeneNameMax} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName ";"] ####GO########## set LesGOProcess {} set LesGOFunction {} set LesGOComponent {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [InterrogeGeneOntology $FichierGO GO $GO Type] set DefGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] if {$Type == "function" } {lappend LesGOFunction $DefGO} if {$Type == "process" } {lappend LesGOProcess $DefGO} if {$Type == "component"} {lappend LesGOComponent $DefGO} } set GOProcess [join $LesGOProcess ";"] set GOFunction [join $LesGOFunction ";"] set GOComponent [join $LesGOComponent ";"] ####LOCALISATION####################### set LesLoc {} foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set LesBC {} foreach BC [split [lindex $Loc 19] " "] {lappend LesBC $BC} set Chrom [lindex $Loc 9] set Deb [Mini [lindex $Loc 10] [lindex $Loc 11]] set Fin [Maxi [lindex $Loc 10] [lindex $Loc 11]] set Sens [lindex $Loc 12] lappend LesLoc "$Chrom [join $LesBC " "] $Deb $Fin $Sens" } set Loc [join $LesLoc ";"] set LaLigne [list $Nom $Cluster $AccIni $Loc $Tissues $DS $Methode $Acc $Orgas $Def $MeanDef $GN $GOProcess $GOFunction $GOComponent] foreach ClusterJum $LesClusters { set AccIni [join [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesAccIniDesJumellesDuCluster,$ClusterJum)] ";"] set Jum [join [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$ClusterJum)] ";"] set n [set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$ClusterJum)] lappend LaLigne $Jum $AccIni $n } set Jum [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles)] set n [set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles)] lappend LaLigne $Jum $n set Ligne [join $LaLigne "\t"] regsub -all ";" $Ligne " ; " Ligne Espionne $Ligne lappend LeTexte $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierRecapitulatifTotal_RSEtUG_Affy {FichierOUT} { Wup "Creation d un fichier recapitulatif pour les projet Morphine et Marker" Wup "Utilisation du fichier BilanRecapitulatifTotal, Annotation Affymetrix de la puce en question Mouse430_2" #Nom Cluster JumMemeCluster nJumMemeCluster JumClust2 nJumClust2 JumClust3 nJumClust3 .... DefIni Loc Tissue DS Methode MeanDef GeneName GO set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set NbTissuesEtDSMax 10 set NbGeneNameMax 5 set LesClusters [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] set LesNoms [lsort -unique [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesNoms ]] foreach Cluster $LesClusters { set Tab(Cluster,$Cluster,LesNomsDeRef) {} } foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] lappend Tab(Cluster,$Cluster,LesNomsDeRef) $Nom if {[info exists TabTmp($Nom)]} {continue} if {![info exists Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles)]} { set TabTmp($Nom) 1 ###INI### set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles) {} set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles) 0 foreach Clust $LesClusters { set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$Clust) {} set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesAccIniDesJumellesDuCluster,$Clust) {} set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$Clust) 0 } ######### #lappend Tab(Cluster,$Cluster,LesNomsDeRef) $Nom incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$Cluster) incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles) } foreach Jum [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles] { if {$Nom == $Jum} {continue} set ClusterJum [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Jum Cluster] set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Jum Access ] if {$Cluster == $ClusterJum} {set TabTmp($Jum) 1} lappend Tab(Cluster,$Cluster,NomDeRef,$Nom,LesAccIniDesJumellesDuCluster,$ClusterJum) $AccIni lappend Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$ClusterJum) $Jum lappend Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles) $Jum incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$ClusterJum) incr Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles) } } if {[info exists TabTmp]} {unset TabTmp} Espionne "$LesNoms" Espionne "[llength $LesNoms]" foreach Cluster $LesClusters { Espionne "[lsort [set Tab(Cluster,$Cluster,LesNomsDeRef)]]" Espionne "[llength [set Tab(Cluster,$Cluster,LesNomsDeRef)]]" } set LesAccess {} foreach Cluster $LesClusters { foreach Nom [set Tab(Cluster,$Cluster,LesNomsDeRef)] { set Methode "Protein" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { if {$AccessmRNA != "NOMRNA" && $AccessmRNA != ""} { set Methode "mRNA" set AccessProt $AccessmRNA } else { set Methode "Contig" set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$AccessProt == "NOPROTEIN" || $AccessProt == ""} { set AccessProt "" set Methode "NoProtein" } } } if {$AccessProt != "" && ![info exists TabTmp($AccessProt)]} { set TabTmp($AccessProt) 1 lappend LesAccess $AccessProt } set Tab($Nom,Access) $AccessProt set Tab($Nom,Methode) $Methode set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set NameQueryProt "QUERY_PROTEIN" set Id 0.98 set LesAccessProches [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $NameQueryProt $Id] Espionne "\n$Nom\n$LesAccessProches" set Tab($Nom,LesAccessProches) {} foreach AccessProt $LesAccessProches { set TabTmp($AccessProt) 1 lappend Tab($Nom,LesAccessProches) $AccessProt lappend LesAccess $AccessProt } AskMSF $FichierMSF unset } } Espionne "Database is loading..." AskLesPagesInfos load $LesAccess protein Espionne "Database loaded..." set LeTexte {} set LaLigne [list GScopeID Cluster ID "Affymetrix initial Def" "Affymetrix Def" HumanLoc Tissues DevStages RefSeq RefSeqDefinition Unigene Uniseq UnigeneDefinition "RS UG Twins" Method ProtID Organism Definition MeanDefinition GeneNames "GO Process" "GO Function" "GO Component"] foreach ClusterJum $LesClusters { lappend LaLigne "Cluster $ClusterJum Twins" "Cluster $ClusterJum TwinsID" "Cluster $ClusterJum NbTwins" } lappend LaLigne "Total Twins" "Total NbTwins" lappend LeTexte [join $LaLigne "\t"] #Espionne "Lecture du Fichier $FichierGO" foreach Cluster $LesClusters { foreach Nom [set Tab(Cluster,$Cluster,LesNomsDeRef)] { set AccIni [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access ] #set DefIni [join [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] ""] #MODIF JEAN if {[info exists Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$Cluster)]} { set LesJumelles [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$Cluster)] lappend LesJumelles $Nom } else { set LesJumelles $Nom } ####EST########################## set LesTissues {} set LesDS {} foreach Jum $LesJumelles { foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Jum LesTissueType] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Jum TissueType $Tissue n] if {![info exists TabTmp($Nom,$Tissue,n)]} { set TabTmp($Nom,$Tissue,n) 0 lappend LesTissues $Tissue } incr TabTmp($Nom,$Tissue,n) $n } foreach DS [InterrogeSelectedEST $FichierSelectedEST Nom $Jum LesDevStage] { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Jum DevStage $DS n] if {![info exists TabTmp($Nom,$DS,n)]} { set TabTmp($Nom,$DS,n) 0 lappend LesDS $DS } incr TabTmp($Nom,$DS,n) $n } } set LesTissuesAvecEffectifs {} foreach Tissue $LesTissues { set n [set TabTmp($Nom,$Tissue,n)] lappend LesTissuesAvecEffectifs [list "$Tissue ($n)" $n] } set LesDSAvecEffectifs {} foreach DS $LesDS { set n [set TabTmp($Nom,$DS,n)] lappend LesDSAvecEffectifs [list "$DS ($n)" $n] } set LesTissuesDefinitifs {} set i 0 foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissuesAvecEffectifs] { incr i if {$i > $NbTissuesEtDSMax} {break} lappend LesTissuesDefinitifs [lindex $LeTissue 0] } set Tissues [join $LesTissuesDefinitifs ";"] set LesDSDefinitifs {} set i 0 foreach LeDS [lsort -index 1 -decreasing -integer $LesDSAvecEffectifs] { incr i if {$i > $NbTissuesEtDSMax} {break} lappend LesDSDefinitifs [lindex $LeDS 0] } set DS [join $LesDSDefinitifs ";"] ####PROT############################# set Methode [set Tab($Nom,Methode)] set Def "" set Orgas "" set Acc [set Tab($Nom,Access)] if {$Acc != ""} { set PI [AskLesPagesInfos ask $Acc] set Def [string trim [join [LaDefinitionDeLaProt_PageInfo $PI] ";"]] set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] } if {$Def == ""} { if {$Acc != ""} {lappend LesAcc $Acc} set LesAcc {} set LesDef {} set LesOrgas {} set Methode "ClosestProt" foreach AccessProche [lsort -unique [set Tab($Nom,LesAccessProches)]] { set PI [AskLesPagesInfos ask $AccessProche] foreach Def [LaDefinitionDeLaProt_PageInfo $PI] { set Def [string trim $Def] if {$Def == ""} {continue} lappend LesDef $Def } foreach Orga [LesOrgasDeLaPage_PageInfo $PI] { set Orga [string trim $Orga] lappend LesOrgas $Orga } lappend LesAcc $AccessProche } set Acc [join $LesAcc ";"] set Def [join [lsort -unique $LesDef ] ";"] set Orgas [join [lsort -unique $LesOrgas] ";"] } ###DefinitionMoyenne##### set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i if {$i > $NbGeneNameMax} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName ";"] ####GO########## set LesGOProcess {} set LesGOFunction {} set LesGOComponent {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [InterrogeGeneOntology $FichierGO GO $GO Type] set DefGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] if {$Type == "function" } {lappend LesGOFunction $DefGO} if {$Type == "process" } {lappend LesGOProcess $DefGO} if {$Type == "component"} {lappend LesGOComponent $DefGO} } set GOProcess [join $LesGOProcess ";"] set GOFunction [join $LesGOFunction ";"] set GOComponent [join $LesGOComponent ";"] ####LOCALISATION####################### set LesLoc {} foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set LesBC {} foreach BC [split [lindex $Loc 19] " "] {lappend LesBC $BC} set Chrom [lindex $Loc 9] set Deb [Mini [lindex $Loc 10] [lindex $Loc 11]] set Fin [Maxi [lindex $Loc 10] [lindex $Loc 11]] set Sens [lindex $Loc 12] lappend LesLoc "$Chrom [join $LesBC " "] $Deb $Fin $Sens" } set Loc [join $LesLoc ";"] #### REFSEQ et UNIGENE set LesAccRefSeq [InterrogeLesAccRSEtUG_Affymetrix $Nom AccRefSeq] set DefRefSeq [InterrogeLesAccRSEtUG_Affymetrix $Nom DefRefSeq] set LesAccUnigene [InterrogeLesAccRSEtUG_Affymetrix $Nom AccUnigene] set LesAccUniseq [InterrogeLesAccRSEtUG_Affymetrix $Nom AccUniseq] set DefUnigene [InterrogeLesAccRSEtUG_Affymetrix $Nom DefUniseq] #Espionne "$Nom -- $LesAccRefSeq $DefRefSeq $LesAccUnigene $LesAccUniseq $DefUnigene" set OriDefAffy "" set DefAffy "" set OriDefAffy [InterrogeOriginalAnnotAffymetrix Mouse430_2 $AccIni "Gene Title"] set DefAffy [InterrogeLesAnnotAffymetrix Mouse430_2 $AccIni "Gene Title"] set JumeauRSetUG [JumeauLesAccRSEtUG_Affymetrix $Nom LesPAB] if { $JumeauRSetUG == ""} { set JumeauRSetUG "None" } ###################### set LaLigne [list $Nom $Cluster $AccIni $OriDefAffy $DefAffy $Loc $Tissues $DS $LesAccRefSeq $DefRefSeq $LesAccUnigene $LesAccUniseq $DefUnigene $JumeauRSetUG $Methode $Acc $Orgas $Def $MeanDef $GN $GOProcess $GOFunction $GOComponent] #MODIF JEAN if {[info exists Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles)]} { foreach ClusterJum $LesClusters { set AccIni [join [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesAccIniDesJumellesDuCluster,$ClusterJum)] ";"] set Jum [join [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumellesDuCluster,$ClusterJum)] ";"] set n [set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumellesDuCluster,$ClusterJum)] lappend LaLigne $Jum $AccIni $n } set Jum [set Tab(Cluster,$Cluster,NomDeRef,$Nom,LesJumelles)] set n [set Tab(Cluster,$Cluster,NomDeRef,$Nom,NbJumelles)] lappend LaLigne $Jum $n } set Ligne [join $LaLigne "\t"] regsub -all ";" $Ligne " ; " Ligne Espionne $Ligne lappend LeTexte $Ligne } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierRecapitulatifTp180 {} { set Ligne "Box;Name;ProteinIDHomme;PreferredNameHomme;ProteinIDLevure;PreferredNameLevure" lappend LesLignes $Ligne set FichierDesSelectionnes "[RepertoireDuGenome]/string/YesScNoTb.tfa" foreach Ligne [LesLignesDuFichier $FichierDesSelectionnes] { if {[regexp "^TP" $Ligne]} { set Box [lindex [split $Ligne " "] 0] set Name [InfHomolog $Box infogetlocus] set FichierTfaHomme "[RepertoireDuGenome]/prottfa/$Box" set FichierOutHomme "[RepertoireDuGenome]/string/BlastpSurStringHomme/resultblast/$Box.blastp" set PIDHomme [BlastPStringGeneral $FichierTfaHomme $FichierOutHomme 9606] set PNHomme [PreferedNameStringFromProteins $PIDHomme] set FichierTfaLevure [InfHomolog $Box filename] set FichierOutLevure "[RepertoireDuGenome]/string/BlastpSurStringLevure/resultblast/$Box.blastp" set PIDLevure [BlastPStringGeneral $FichierTfaLevure $FichierOutLevure 4932] set PNLevure [PreferedNameStringFromProteins $PIDLevure] set Ligne "$Box;$Name;$PIDHomme;$PNHomme;$PIDLevure;$PNLevure" lappend LesLignes $Ligne } } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/string/FichierRecapitulatif.txt" } proc FichierRecapitulatifTp80 {} { set Ligne "Box;Name;ProteinIDHomme;PreferredNameHomme;ProteinIDLevure;PreferredNameLevure" lappend LesLignes $Ligne set FichierDesSelectionnes "[RepertoireDuGenome]/string/80/bilanP62.csv" foreach Ligne [LesLignesDuFichier $FichierDesSelectionnes] { set LesMotsDeLaLigne [split $Ligne ";"] set Box [lindex $LesMotsDeLaLigne 2] if {![regexp "^TP" $Box]} {continue} set Name [InfHomolog $Box infogetlocus] set FichierTfaHomme "[RepertoireDuGenome]/prottfa/$Box" set FichierOutHomme "[RepertoireDuGenome]/string/80/BlastpSurStringHomme/resultblast/$Box.blastp" set PIDHomme [BlastPStringGeneral $FichierTfaHomme $FichierOutHomme 9606] set PNHomme [PreferedNameStringFromProteins $PIDHomme] set FichierTfaLevure [InfHomolog $Box filename] set FichierOutLevure "[RepertoireDuGenome]/string/80/BlastpSurStringLevure/resultblast/$Box.blastp" set PIDLevure [BlastPStringGeneral $FichierTfaLevure $FichierOutLevure 4932] set PNLevure [PreferedNameStringFromProteins $PIDLevure] set Ligne "$Box;$Name;$PIDHomme;$PNHomme;$PIDLevure;$PNLevure" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/string/80/FichierRecapitulatif.txt" } proc FichierRepartitionDesBoitesSurGenome {{FichierLoc ""}} { set FichierOUT "[RepertoireDuGenome]/Localisation/RepartitionSurGenome" if {$FichierLoc == ""} {set FichierLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human"} set LesChromosomes [InterrogeBandesCytologiques LesChromosomes] set LeTexte {} foreach Chromosome $LesChromosomes { set Chromo [NumeroDuChromosome $Chromosome] set TailleChr [InterrogeContigsDesChromosomes $Chromo Taille] set LesNomsDuChromosome {} set JusteLesNomsDuChromosome {} foreach Nom [lsort -unique [InterrogeLocalisation $FichierLoc Chromosome $Chromosome LesNoms]] { if {$Nom == ""} {continue} foreach LaLoc [InterrogeLocalisation $FichierLoc Chromosome $Chromosome $Nom] { set Info [lindex $LaLoc 20] if {![string equal -nocase "BestLoc" $Info]} {continue} set DMin [Mini [lindex $LaLoc 10] [lindex $LaLoc 11]] set FMax [Maxi [lindex $LaLoc 10] [lindex $LaLoc 11]] lappend LesNomsDuChromosome [list $Nom $DMin $FMax] lappend JusteLesNomsDuChromosome $Nom } } ###Distribution sur le chromosome set TypeDeRegion "Chromosome" set Debut 1 set Fin $TailleChr set n [llength $LesNomsDuChromosome] Espionne "$Chromosome\t$TypeDeRegion\t$Chromosome\t$Debut\t$Fin\t$n\t[join $JusteLesNomsDuChromosome "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Chromosome\t$Debut\t$Fin\t$n\t[join $JusteLesNomsDuChromosome "\t"]" ####Distribution sur les cytoband##### set TypeDeRegion "CytoBand" set LesBandesP [lsort -unique -decreasing [InterrogeBandesCytologiques $Chromosome LesBandesP]] set LesBandesQ [lsort -unique -increasing [InterrogeBandesCytologiques $Chromosome LesBandesQ]] set Debut 1 foreach Bande [concat $LesBandesP $LesBandesQ] { set LesInfos [InterrogeBandesCytologiques $Chromosome $Bande] set Fin [lindex $LesInfos 0] set Fin [expr round($Fin * 1E6)] set TailleBande [expr round($Fin - $Debut + 1)] set LesNoms {} foreach LeNom $LesNomsDuChromosome { set Nom [lindex $LeNom 0] set DMin [lindex $LeNom 1] set FMax [lindex $LeNom 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesNoms $Nom } set n [llength $LesNoms] Espionne "$Chromosome\t$TypeDeRegion\t$Bande\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Bande\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" set Debut [expr $Fin + 1] } ###Distribution sur les contigs set TypeDeRegion "Contig" set LesNoms {} foreach Contig [InterrogeContigsDesChromosomes $Chromo LesContigs] { set LesInfos [InterrogeContigsDesChromosomes $Chromo $Contig] set Debut [Mini [lindex $LesInfos 0] [lindex $LesInfos 1]] set Fin [Maxi [lindex $LesInfos 0] [lindex $LesInfos 1]] set Sens [lindex $LesInfos 2] if {$Sens == 0} {continue} set LesNoms {} foreach LeNom $LesNomsDuChromosome { set Nom [lindex $LeNom 0] set DMin [lindex $LeNom 1] set FMax [lindex $LeNom 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesNoms $Nom } set n [llength $LesNoms] Espionne "$Chromosome\t$TypeDeRegion\t$Contig\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Contig\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" } ###Distribution sur Region de 1e6bp### set TypeDeRegion "1e6bp" set TailleRegion 1e6 set NbRegions [expr round (($TailleChr/$TailleRegion)-0.5)] set Reste [expr round($TailleChr) % round($TailleRegion)] set Area 0 set LesRegions {} set Debut 1 for {set i 1} {$i <= $NbRegions} {incr i} { incr Area set Fin [expr round($Debut + $TailleRegion - 1)] lappend LesRegions [list $Area $Debut $Fin] set Debut [expr $Fin + 1] } if {$Reste != 0} { incr Area lappend LesRegions [list $Area $Debut $TailleChr] } foreach LaRegion $LesRegions { set Area [lindex $LaRegion 0] set Debut [lindex $LaRegion 1] set Fin [lindex $LaRegion 2] set LesNoms {} foreach LeNom $LesNomsDuChromosome { set Nom [lindex $LeNom 0] set DMin [lindex $LeNom 1] set FMax [lindex $LeNom 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesNoms $Nom } set n [llength $LesNoms] Espionne "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" } ###Distribution sur Region de 1e7bp### set TypeDeRegion "1e7bp" set TailleRegion 1e7 set NbRegions [expr round (($TailleChr/$TailleRegion)-0.5)] set Reste [expr round($TailleChr) % round($TailleRegion)] set Area 0 set LesRegions {} set Debut 1 for {set i 1} {$i <= $NbRegions} {incr i} { incr Area set Fin [expr round($Debut + $TailleRegion - 1)] lappend LesRegions [list $Area $Debut $Fin] set Debut [expr $Fin + 1] } if {$Reste != 0} { incr Area lappend LesRegions [list $Area $Debut $TailleChr] } foreach LaRegion $LesRegions { set Area [lindex $LaRegion 0] set Debut [lindex $LaRegion 1] set Fin [lindex $LaRegion 2] set LesNoms {} foreach LeNom $LesNomsDuChromosome { set Nom [lindex $LeNom 0] set DMin [lindex $LeNom 1] set FMax [lindex $LeNom 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesNoms $Nom } set n [llength $LesNoms] Espionne "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesNoms "\t"]" } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierRepartitionDesGenesSurGenome {} { set FichierOUT "[HumanGenomeDir]/Localisation/RepartitionDesGenes" set NFLocus "seq_locus_tr.md" set LesChromosomes [InterrogeBandesCytologiques LesChromosomes] set LeTexte {} foreach Chromosome $LesChromosomes { set Chromo [NumeroDuChromosome $Chromosome] set TailleChr [InterrogeContigsDesChromosomes $Chromo Taille] set LesGenesDuChromosome {} foreach Gene [lsort -unique [InterrogeFichierMapViewer $NFLocus Chromosome $Chromo LesElements]] { if {$Gene == ""} {continue} set DMin "" set FMax "" set LesInfos [InterrogeFichierMapViewer $NFLocus Chromosome $Chromo Element $Gene LesLocalisations] foreach LInfo $LesInfos { set D [Mini [lindex $LInfo 3] [lindex $LInfo 4]] if {$DMin == ""} {set DMin $D} set F [Maxi [lindex $LInfo 3] [lindex $LInfo 4]] if {$FMax == ""} {set FMax $F} if {$D < $DMin} {set DMin $D} if {$FMax < $F } {set FMax $F} } if {$DMin == "" || $FMax == ""} {continue} lappend LesGenesDuChromosome [list $Gene $DMin $FMax] } ###Distribution sur le chromosome set TypeDeRegion "Chromosome" set Debut 1 set Fin $TailleChr set n [llength $LesGenesDuChromosome] Espionne "$Chromosome\t$TypeDeRegion\t$Chromosome\t$Debut\t$Fin\t$n\t[join $LesGenesDuChromosome "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Chromosome\t$Debut\t$Fin\t$n\t[join $LesGenesDuChromosome "\t"]" ####Distribution sur les cytoband##### set TypeDeRegion "CytoBand" set LesBandesP [lsort -unique -decreasing [InterrogeBandesCytologiques $Chromosome LesBandesP]] set LesBandesQ [lsort -unique -increasing [InterrogeBandesCytologiques $Chromosome LesBandesQ]] set Debut 1 foreach Bande [concat $LesBandesP $LesBandesQ] { set LesInfos [InterrogeBandesCytologiques $Chromosome $Bande] set Fin [lindex $LesInfos 0] set Fin [expr round($Fin * 1E6)] set TailleBande [expr round($Fin - $Debut + 1)] set LesGenes {} foreach LeGene $LesGenesDuChromosome { set Gene [lindex $LeGene 0] set DMin [lindex $LeGene 1] set FMax [lindex $LeGene 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesGenes $Gene } set n [llength $LesGenes] Espionne "$Chromosome\t$TypeDeRegion\t$Bande\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Bande\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" set Debut [expr $Fin + 1] } ###Distribution sur les contigs set TypeDeRegion "Contig" set LesGenes {} foreach Contig [InterrogeContigsDesChromosomes $Chromo LesContigs] { set LesInfos [InterrogeContigsDesChromosomes $Chromo $Contig] set Debut [Mini [lindex $LesInfos 0] [lindex $LesInfos 1]] set Fin [Maxi [lindex $LesInfos 0] [lindex $LesInfos 1]] set Sens [lindex $LesInfos 2] if {$Sens == 0} {continue} set LesGenes {} foreach LeGene $LesGenesDuChromosome { set Gene [lindex $LeGene 0] set DMin [lindex $LeGene 1] set FMax [lindex $LeGene 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesGenes $Gene } set n [llength $LesGenes] Espionne "$Chromosome\t$TypeDeRegion\t$Contig\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Contig\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" } ###Distribution sur Region de 1e6bp### set TypeDeRegion "1e6bp" set TailleRegion 1e6 set NbRegions [expr round (($TailleChr/$TailleRegion)-0.5)] set Reste [expr round($TailleChr) % round($TailleRegion)] set Area 0 set LesRegions {} set Debut 1 for {set i 1} {$i <= $NbRegions} {incr i} { incr Area set Fin [expr round($Debut + $TailleRegion - 1)] lappend LesRegions [list $Area $Debut $Fin] set Debut [expr $Fin + 1] } if {$Reste != 0} { incr Area lappend LesRegions [list $Area $Debut $TailleChr] } foreach LaRegion $LesRegions { set Area [lindex $LaRegion 0] set Debut [lindex $LaRegion 1] set Fin [lindex $LaRegion 2] set LesGenes {} foreach LeGene $LesGenesDuChromosome { set Gene [lindex $LeGene 0] set DMin [lindex $LeGene 1] set FMax [lindex $LeGene 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesGenes $Gene } set n [llength $LesGenes] Espionne "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" } ###Distribution sur Region de 1e7bp### set TypeDeRegion "1e7bp" set TailleRegion 1e7 set NbRegions [expr round (($TailleChr/$TailleRegion)-0.5)] set Reste [expr round($TailleChr) % round($TailleRegion)] set Area 0 set LesRegions {} set Debut 1 for {set i 1} {$i <= $NbRegions} {incr i} { incr Area set Fin [expr round($Debut + $TailleRegion - 1)] lappend LesRegions [list $Area $Debut $Fin] set Debut [expr $Fin + 1] } if {$Reste != 0} { incr Area lappend LesRegions [list $Area $Debut $TailleChr] } foreach LaRegion $LesRegions { set Area [lindex $LaRegion 0] set Debut [lindex $LaRegion 1] set Fin [lindex $LaRegion 2] set LesGenes {} foreach LeGene $LesGenesDuChromosome { set Gene [lindex $LeGene 0] set DMin [lindex $LeGene 1] set FMax [lindex $LeGene 2] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DMin $FMax]} {continue} lappend LesGenes $Gene } set n [llength $LesGenes] Espionne "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" lappend LeTexte "$Chromosome\t$TypeDeRegion\t$Area\t$Debut\t$Fin\t$n\t[join $LesGenes "\t"]" } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierRequeteSEACI {FichierSortie {TypeRequete Interpro} {FichierDistribution ""}} { global RepertoireDuGenome set RepertoireSEACI "$RepertoireDuGenome/srsSEACI" set Texte "Foreach:\$I=getz \'\[seaci\-cat:\*\]\' \-lv\| cut \-d \' \' \-f 5 \| sort \-n" if {$TypeRequete == "Interpro"} { append Texte "\nSeparator:;" append Texte "\n\$R1=\(\[seaci\-cat:\$I\]\)\n\$R2=protein" append Texte "\nDisplay:\-f dbxref \|grep InterPro\|perl \-e \'while\(<>\)\{~s/DR InterPro;//g;print;\}\' \|cut \-d \" \" \-f2" append Texte "\nOutput:>$FichierSortie" set SiDistribution "\nDistribution:\[protein\-dbxref:ipr\*]\nDistribution_output:$FichierDistribution" } elseif {$TypeRequete == "EC"} { append Texte "\nSeparator:)" append Texte "\n\$R1=\(\[seaci\-cat:\$I\]\)\n\$R2=protein" append Texte "\nDisplay:\-f des\|grep \'EC \'\|perl \-e \'while\(<>\)\{~s/DE //g;print;\}'\|ec_extract.tcl" #append Texte "\nDisplay:\-f des\|grep \'EC \'\|perl \-e \'while\(<>\)\{~s/DE //g;print;\}'\|ec_extract.tcl" append Texte "\nOutput:>$FichierSortie" set SiDistribution "\nDistribution:\[protein\-des:/^ec /\]\nDistribution_output:$FichierDistribution" #set SiDistribution "\nDistribution:\[protein\-des:/^\[0\-9\\\\-\]\+\\\\.\[0\-9\\\\-\]\+\\\\.\[0\-9\\\\-\]\+\\\\.\[0\-9\\\\-\]\+\$/\]\nDistribution_output:$FichierDistribution" } elseif {$TypeRequete == "Keywords" } { append Texte "\nSeparator:\.\;" append Texte "\n\$R1=\(\[seaci\-cat:\$I\]\)\n\$R2=protein" append Texte "\nDisplay:\-f key\|perl \-e \'while\(<>\)\{~s/KW //g;print;\}\'" append Texte "\nOutput:>$FichierSortie" set SiDistribution "\n\Distribution:\[protein\-key:\*\]\nDistribution_output:$FichierDistribution" } if {$FichierDistribution != ""} {append Texte $SiDistribution} append Texte "\nQuery:\(\(\$R1\)>\(\$R2\)\)" return $Texte } proc FichierRetNetPourTous {{LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FichierOUT "[RepertoireDuGenome]/fiches/RetNet" set FichierLoc [ChoixDuFichierLocalisationHuman] set LeTexte {} foreach Nom $LesNoms { foreach LaLoc [InterrogeLocalisation $FichierLoc Nom $Nom] { if {![regexp -nocase "best" [lindex $LaLoc end]]} {continue} set Chrom [lindex $LaLoc 9] set DS [Mini [lindex $LaLoc 10] [lindex $LaLoc 11]] set FS [Maxi [lindex $LaLoc 10] [lindex $LaLoc 11]] foreach LeOMIM [LesOMIMDeLaRegion $Chrom $DS $FS] { set LesGeneName [lindex $LeOMIM 5] set Qui [string trim [string toupper [lindex $LesGeneName 0]]] regsub -all -nocase {[^0-9a-z_]} $Qui "" Qui set Quoi "OMIM" if {[InterrogeRetNet RetNet $Qui LesInfos] != ""} {set Quoi "RetNet"} if {$Quoi != "RetNet"} {continue} set LesBornes [lindex $LeOMIM 2] set DOMIM [lindex $LesBornes 0] set FOMIM [lindex $LesBornes 1] if {50000000 < [expr $FOMIM - $DOMIM]} {continue} set Def [join [concat [list [lindex $LeOMIM 9]] [lindex $LeOMIM 10]] ", "] Espionne "$Nom\t$Chrom\t$DS\t$FS\t$Quoi\t$Qui\t$Def\t$DOMIM\t$FOMIM" lappend LeTexte "$Nom\t$Chrom\t$DS\t$FS\t$Quoi\t$Qui\t$Def\t$DOMIM\t$FOMIM" } foreach LeRetNet [LesRetNetDeLaRegion $Chrom $DS $FS] { set Qui [string trim [string toupper [lindex $LeRetNet 0]]] regsub -all -nocase {[^0-9a-z_]} $Qui "" Qui set LesBornes [lindex $LeRetNet 2] set DRetNet [lindex $LesBornes 0] set FRetNet [lindex $LesBornes 1] if {50000000 < [expr $FRetNet - $DRetNet]} {continue} set Def [lindex $LeRetNet 5] Espionne "$Nom\t$Chrom\t$DS\t$FS\tRetNet\t$Qui\t$Def\t$DRetNet\t$FRetNet" lappend LeTexte "$Nom\t$Chrom\t$DS\t$FS\tRetNet\t$Qui\t$Def\t$DRetNet\t$FRetNet" } } } Sauve [join $LeTexte "\n"] dans $FichierOUT return } proc FichierSDT {} { set LesLignes {} set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set Repertoire "/genomics/link/EVImm/Arnaud/nuctfa1500Final" set Ligne "GscopeId;mRNA GeneName;Synonyms;mRNA Description;mRNA AccessionNumber;Localisation;Cytoband;Status;Protein GeneName;Protein Description;Protein AccessionNumber;GoComponent;GoFunction;GoProcess;IdMGI" lappend LesLignes $Ligne foreach File [glob -nocomplain "$Repertoire/*"] { set Ligne "" set Nom [file tail $File] set AccessNuc [StringApres ":" dans [lindex [LesLignesDuFichier $File] 0]] set Access [AccessEvi $Nom] if {$AccessNuc!=$Access} { Espionne "$Nom" } set GnmRNA [ExtraitInfo $Nom "ValiGN"] set Alias [RecupereSynonyms $Nom] set Des [ExtraitInfo $Nom "ValiDE"] set AccARN [AccessEvi $Nom] set LocUcsc [ExtraitInfo $Nom "LocUcscFrom200602"] set CytoBand [ExtraitInfo $Nom "CytoBand"] set Status [ExtraitInfo $Nom "Status"] set Status [string range $Status 0 [expr [string first "\(" $Status] - 1]] set GnProt [ExtraitInfo $Nom "ValiGNProt"] set DesProt [ExtraitInfo $Nom "ValiDEProt"] set IdAccProt [ExtraitInfo $Nom "IdAccProt"] set LesProt [split $IdAccProt " "] set AccProt [lindex $LesProt 1] set IdMgi [ExtraitInfo $Nom "MGI"] regsub -all ";" $GnmRNA "," GnmRNA regsub -all ";" $Alias "," Alias regsub -all ";" $Des "," Des regsub -all ";" $AccARN "," AccARN regsub -all ";" $LocUcsc "," LocUcsc regsub -all ";" $CytoBand "," CytoBand regsub -all ";" $Status "," Status regsub -all ";" $GnProt "," GnProt regsub -all ";" $DesProt "," DesProt regsub -all ";" $AccProt "," AccProt if {$Nom=="EVI08520" || $Nom=="EVI08530" || $Nom=="EVI22270" || $Nom=="EVI24960" || $Nom=="EVI18700" || $Nom=="EVI24390" || $Nom=="EVI02810" || $Nom=="EVI07650" || $Nom=="EVI07660" || $Nom=="EVI14380" || $Nom=="EVI17090" || $Nom=="EVI24420" || $Nom=="EVI25020" || $Nom=="EVI25030" || $Nom=="EVI25040"} { set Ligne "$Nom;$GnmRNA;$Alias;$Des;$AccARN;$LocUcsc;$CytoBand;$Status;;;;;;;$IdMgi" lappend LesLignes $Ligne continue } set LesComponent {}; set LesFunction {}; set LesProcess {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [InterrogeGeneOntology $FichierGO GO $GO Type] set DefGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] set IdEtDefGO "$GO:$DefGO" if {[regexp {component} $Type]} {lappend LesComponent $IdEtDefGO} if {[regexp {function} $Type]} {lappend LesFunction $IdEtDefGO} if {[regexp {process} $Type]} {lappend LesProcess $IdEtDefGO} } set LesComponent [ListeSansDoublon $LesComponent] set LesFunction [ListeSansDoublon $LesFunction] set LesProcess [ListeSansDoublon $LesProcess] set comp [join $LesComponent ","] set func [join $LesFunction ","] set proce [join $LesProcess ","] set Ligne "$Nom;$GnmRNA;$Alias;$Des;$AccARN;$LocUcsc;$CytoBand;$Status;$GnProt;$DesProt;$AccProt;$comp;$func;$proce;$IdMgi" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/Arnaud/STD" } proc FichierSizeMSF {} { global RepertoireDuGenome set File "$RepertoireDuGenome/fiches/sizemsf" set atleast 40 if {[OuiOuNon "At least $atleast first sequences are studied\n Would you want to change this number?"]} { set atleast [Entre] } set nOrgInt 70 if {[OuiOuNon "$nOrgInt sequences of your favorite organism will be study\n Would you want to change this number?"]} { set nOrgInt [Entre] } set nPDB 30 if {[OuiOuNon "$nPDB pdb will be study\n Would you want to change this number?"]} { set nPDB [Entre] } set Expect 0.001 if {[OuiOuNon "The threshold of the expect value is $Expect\n Would you want to change this number?"]} { set Expect [Entre] } set Texte "$atleast $nOrgInt $nPDB $Expect respectively : at_least max_with_complete_genomes max_pdb expect" Sauve $Texte dans $File return $File } proc FichierSwDuPdb {Lignes chnin} { global LNOrdali set idx -1 set noms [ExtraitDbRefDuPdb $Lignes $chnin] set nom1 [lindex $noms 0] set nom2 [lindex $noms 1] if {$nom1 != "" && $nom2 != ""} { set idx "none" if {[lsearch $LNOrdali $nom1] != -1} { set idx [lsearch $LNOrdali $nom1] } if {[lsearch $LNOrdali $nom2] != -1} { set idx [lsearch $LNOrdali $nom2] } } if {$idx == "none"} { return $nom1 } if {[regexp {[0-9]} $idx]} { return $idx } return -1 } proc FichierTFA2EST {FichierTFA Organism ProgrammeConsensus {IDMin 0.95} {IDMax 0.95} {TailleAliMin 50}} { ############################################################################################# ### ### ### Reconstruction du mRNA full-length a partir d'une sequence de type DNA (ou proteine?) ### ### ### ############################################################################################# if {![file exists $FichierTFA]} {return} set FichierTFAMasked "$FichierTFA.masked" set FichierBlastnEST "$FichierTFA.blastnest" set FichierBlastnESTReduced "$FichierTFA.blastnest.reduced" set FichierTFAsEST "$FichierTFA.esttfas" set FichierEST "$FichierTFA.est" set FichierMSF "$FichierTFA.msf" set FichierTFAConsensus "$FichierTFA.consensustfa" set FichierESTInfo "$FichierTFA.estinfos" ###Initialisation du tableau servant à la creation du fichierout contenant le sort de chaque EST CreerFichierInfoESTConstructionmRNAFullLength "ini" ########################################################################## ### Selection de la population d'EST correspondant à la sequence query ### ########################################################################## ### 1- Elimination des repeats sur la sequence initiale ### Espionne "Repeat masker running..." if {![file exists $FichierTFAMasked]} { set MaskedTFA [MasqueLesRepeatsDuFichier $FichierTFA $Organism] Sauve $MaskedTFA dans $FichierTFAMasked } Espionne "Repeat masker done." ### 2- BlastnEST filtre du TFA masque contre la banque d'EST ### Espionne "BlastnEST running ..." if {![file exists $FichierBlastnEST]} { set Commande "eval exec blastall -p blastn -i \$FichierTFAMasked -o \$FichierBlastnEST -d /blast/est -v 2000 -K 0 -b 2000 -e 0.1 -F T" if {[catch {eval $Commande} Message]} {Espionne "$Message\nProblem with $FichierBlastnEST"} } Espionne "BlastnEST done." ###Met tous les BId dans le tableau et les considere selectionnes pour l'instant ###Changera cette info lors de chaque etape de selection set LesBIdDesESTTot [LesBanqueIdDuBlast $FichierBlastnEST 1e200 1e200] foreach BId $LesBIdDesESTTot {CreerFichierInfoESTConstructionmRNAFullLength Id $BId "Selected"} ### 3- Recherche des EST du TFA avec Id min, TailleAliMin et meme Orga ### Espionne "BlastnEST reduction running ..." if {![file exists $FichierBlastnESTReduced]} {set FichierBlastnESTReduced [BlastDesMeilleursESTDuBlast $FichierBlastnEST $FichierTFA $Organism $IDMax $TailleAliMin]} Espionne "BlastnEST reduction done." #Determination des BId des EST elimines lors de cette etape de selection set LesBIdDesEST [LesBanqueIdDuBlast $FichierBlastnESTReduced 1e200 1e200] set LesBIdDesESTElimines [LaDifferenceDeL1AvecL2 $LesBIdDesESTTot Moins $LesBIdDesEST] #Dans le tableau pour construire le fichierout precise la raison de l'elimination de chacun de ces EST foreach BId $LesBIdDesESTElimines { CreerFichierInfoESTConstructionmRNAFullLength Id $BId "Eliminated through blastnest selection (Bad ID, Organism or too small alignment)" } #Les EST selectionnes a cette etape sont ceux presents dans le blastnEST reduced set LesBIdDesESTTot $LesBIdDesEST ############################################################################################## ### Selection des EST participant a la creation du consensus, cad elimination de ceux ### ### ayant une extension après une queue polyA ou T en dehors de l'alignement avec la query ### ############################################################################################## ### 1- Ajout de la query aux EST du fichier d'entree du programme de consensus ### set LesSeqTFAs [list [SequenceFormatTFA [QueLaSequenceDuTFA $FichierTFA] "QUERY"]] ### 2-Elimination des EST ayant une extension (ex: debut 5' UTR autre mRNA) apres la queue polyA ou T### #On tolere une extension de 10 nucleotides derriere la queue polyA ou polyT Espionne "EST with extension after polyA/T elimination running ..." set ExtensionMax 10 set LesBIdDesEST {} foreach SeqTFA [LesSeqTFAsDesBanqueId $LesBIdDesESTTot est $Organism] { if { [info exists BId]} {unset BId} scan $SeqTFA ">%s" BId if {![info exists BId] || [AskBlast $FichierBlastnESTReduced BanqueId $BId Segment 1 Orientation] == ""} {continue} ### Detection des queues poly A et T sur chaque EST selectionne set LesRegionsPolyA [LesRegionsDetecteesPolyNDuTFA $SeqTFA A 10 0.95 2 5] set LesRegionsPolyT [LesRegionsDetecteesPolyNDuTFA $SeqTFA T 10 0.95 2 5] ### Reverse and complement des EST en minus ### Creation nouvelle sequence "reverse and complement" au format TFA pour ces EST set Entete $BId set Seq [QueLaSequenceDuTexteTFA $SeqTFA] if {[SensDeLaRegion [AskBlast $FichierBlastnESTReduced BanqueId $BId Segment 1 Orientation]] == "-"} { set Entete "$BId reverse and complement" set Seq [NucToReverseAndComplementNuc $Seq ] } set SeqTFA [SequenceFormatTFA $Seq $Entete] ### Conservation des EST ne contenant ni queue polyA ni queue polyT parmi les EST selectionnes if {$LesRegionsPolyA == "" && $LesRegionsPolyT == ""} { lappend LesBIdDesEST $BId lappend LesSeqTFAs $SeqTFA continue } ##### Traitement des EST ayant une queue polyA et/ou T ##### #Coordonnees de l'alignement query/EST dans blast selon la sequence de l'EST, sachant que #le debut DS est la plus petite position #la fin FS est la plus grande position set DS [Mini [AskBlast $FichierBlastnESTReduced BanqueId $BId Segment 1 DS] [AskBlast $FichierBlastnESTReduced BanqueId $BId Segment 1 FS]] set FS [Maxi [AskBlast $FichierBlastnESTReduced BanqueId $BId Segment 1 DS] [AskBlast $FichierBlastnESTReduced BanqueId $BId Segment 1 FS]] set TailleS [AskBlast $FichierBlastnESTReduced BanqueId $BId Taille] # Selection de la region polyA ou T la plus longue parmi toutes les regions detectees pour un EST set LesRegionsPolyAouT [concat $LesRegionsPolyA $LesRegionsPolyT] set LaRegionPolyAouT [lindex [lsort -real -decreasing -index 2 $LesRegionsPolyAouT] 0] #D Debut de la region polyA ou T selectionnee set D [lindex $LaRegionPolyAouT 0] #F Fin de la region polyA ou T selectionnee set F [lindex $LaRegionPolyAouT 1] set PolyQuoi [lindex $LaRegionPolyAouT 3] #Attention, on n'espionne que les BId des EST ayant une region poly A ou T Espionne "BId : $BId" ###Elimination des EST ayant une extension en aval de la queue poly A ### de taille > tolerance de 10 nucleotides ### et dont le polyA n'est pas present dans l'alignement de la query avec cet EST ###Elimination des EST ayant une extension et une queue polyA en amont de l'alignement avec la query if {$PolyQuoi == "A"} { if {($ExtensionMax < [expr $TailleS - $F + 1] && $FS < $F ) || $F < $DS} {continue} Espionne "EST OK" } ###Elimination des EST ayant une extension en amont de la queue poly T > tolerance de 10 nucl ### et dont le polyT n'est pas present dans l'alignement de la query avec cet EST ###Elimination des EST ayant une extension et une queue polyT en aval de l'alignement avec la query if {$PolyQuoi == "T"} { if {($ExtensionMax < [expr $D - 1] && $D < $DS) || $FS < $D } {continue} Espionne "EST OK" } #Stockage des BId des EST selectionnes lappend LesBIdDesEST $BId lappend LesSeqTFAs $SeqTFA } if {[AskBlast $FichierBlastnESTReduced Exists]} {AskBlast unsetfile $FichierBlastnESTReduced} Espionne "EST with extension after polyA/T elimination done." #Dans le tableau pour construire le fichierout precise la raison de l'elimination de chacun de ces EST set LesBIdDesESTElimines [LaDifferenceDeL1AvecL2 $LesBIdDesESTTot Moins $LesBIdDesEST] foreach BId $LesBIdDesESTElimines { CreerFichierInfoESTConstructionmRNAFullLength Id $BId "Eliminated due to a supplementary extension after/before polyA/T" } Sauve [join $LesSeqTFAs "\n"] dans $FichierTFAsEST ####################################### Modification ################################ ######## Ordonne les EST par query puis taille croissante ########################### ######## dans le fichier d'entree du programme de consensus pour le msf ########### Espionne "Modification running..." set LesTFAs [split [ContenuDuFichier $FichierTFAsEST] ">"] set LesTailles {} foreach TFA $LesTFAs { if {$TFA == ""} {continue} set TFA ">$TFA" if {[info exists BId]} {unset BId} scan $TFA ">%s" BId #Espionne "BId: $BId" set SeqTFA [QueLaSequenceDuTexteTFA $TFA ] #Espionne "SeqTFA: $SeqTFA" set TailleTFA [string length $SeqTFA] #Espionne "TailleTFA:$TailleTFA" lappend LesTaillesTFA [list $BId $TailleTFA] set Tab($BId,SeqTFA) $SeqTFA if {$BId == "QUERY"} {set Tab(QUERY,SeqTFA) $SeqTFA} } set LesSeqTFA {} lappend LesSeqTFA [SequenceFormatTFA [set Tab(QUERY,SeqTFA)] "QUERY"] foreach LaTailleDuBId [lsort -index 1 -real -increasing $LesTaillesTFA] { set BId [lindex $LaTailleDuBId 0 ] set SeqTFA [set Tab($BId,SeqTFA) ] set UneSeqTFA [SequenceFormatTFA $SeqTFA $BId] if {$BId == "QUERY"} {continue} lappend LesSeqTFA $UneSeqTFA } Sauve [join $LesSeqTFA "\n"] dans $FichierTFAsEST Espionne "Modification done." ################## Fin Modification ############################### ####################################################################################### ### Creation et selection du consensus a partir de la query et des EST selectionnes ### ### par le programme de consensus specifie en argument ### ####################################################################################### #############Pour POA################# if {[string equal -nocase $ProgrammeConsensus "POA"]} { ### 1- Execution de POA avec creation de consensus ### if {[string equal -nocase $ProgrammeConsensus "POA"]} { Espionne "POA with the selected EST running ..." POADuTFAs $FichierTFAsEST $FichierMSF 1 MSF Espionne "POA with the selected EST done." } ### 2- Identification de query, des EST et des consensus dans le msf ### Espionne "POA EST and consensus selection running ..." ###Selection des sequences d'EST et consensus dans le MSF DecortiqueUnMSF $FichierMSF LesId Sequences set LesConsensus {} set TousLesEST {} Espionne "Les Id du MSF : $LesId" foreach Id $LesId { if {[string equal -nocase $Id "QUERY"]} {continue} if {[regexp -nocase "^CONSEN" $Id ]} {lappend LesConsensus $Id;continue} lappend TousLesEST $Id } Espionne "TousLesConsensus $LesConsensus" ### 3- Selection des bons consensus: seuil d'identite (ID) avec query ### set LesBonsConsensus {} Espionne "Consensus selection running..." foreach Consensus [ElimineLesRedondancesDansUneListe $LesConsensus] { set IdDuConsensus [IDdansMSF $FichierMSF "QUERY" $Consensus "SelonA"] set SequenceConsensus [set Sequences($Consensus) ] regsub -nocase -all {[^atcg]} $SequenceConsensus "" SequenceConsensus set TailleConsensus [string length $SequenceConsensus ] Espionne "$Consensus $IdDuConsensus $TailleConsensus" Espionne "$SequenceConsensus" if {$IdDuConsensus < $IDMax} {continue} lappend LesBonsConsensus $Consensus } Espionne "Consensus selection done." if {$LesBonsConsensus == {}} { Espionne "Best Consensus : $LesBonsConsensus" Espionne "No consensus selected, ID lower than the threshold $IDMax" return } Espionne "Best Consensus : $LesBonsConsensus" ### 4- Determination des seq TFA des bons consensus ### set SeqTFADuCons "" set NbMaxEST 0 foreach Consensus $LesBonsConsensus { set Seq [set Sequences($Consensus)] regsub -nocase -all {[^atcg]} $Seq "" Seq Espionne "$Consensus" #Espionne "Taille [string length $Seq]" lappend LesSeqTFADesCons [SequenceFormatTFA $Seq $Consensus] ### 5- Selection du meilleur consensus #Identification des EST de chaque bon consensus: seuil ID avec le consensus ### set Tab(Consensus,$Consensus,LesEST) {} foreach EST $TousLesEST { Espionne "coucou2" set IdDeLEST [IDdansMSF $FichierMSF $EST $Consensus "SelonA"] #Espionne "$Consensus $EST $IdDeLEST" #Les EST ayant servi a la creation du consensus ont au moins IDMin d'identite avec ce consensus if {$IdDeLEST < $IDMin} {continue} lappend Tab(Consensus,$Consensus,LesEST) $EST } set LesEST [set Tab(Consensus,$Consensus,LesEST)] set NbEST [llength $LesEST] #Selection du consensus ayant ete construit a partir du plus grand nombre d'EST if {$NbEST <= $NbMaxEST} {continue} set LeConsensusSelectionne $Consensus Espionne "Le Consensus selectionne : $LeConsensusSelectionne" set SeqTFADuCons [SequenceFormatTFA $Seq $Consensus] set NbMaxEST $NbEST set LesESTSelectionnes $LesEST Espionne "Les EST du consensus selectionne : $LesEST" } Espionne "POA consensus and EST selection done." set SeqConsensusSelectionne [set Sequences($LeConsensusSelectionne)] regsub -nocase -all {[^atcg]} $SeqConsensusSelectionne "" SeqConsensusSelectionne set TailleConsensusSelectionne [string length $SeqConsensusSelectionne] Espionne "Consensus Selectionne : $LeConsensusSelectionne $TailleConsensusSelectionne" #Dans le tableau pour construire le fichierout precise la raison de l'elimination de chacun de ces EST set LesESTElimines [LaDifferenceDeL1AvecL2 $TousLesEST Moins $LesESTSelectionnes] foreach BId $LesESTElimines { CreerFichierInfoESTConstructionmRNAFullLength Id $BId "Eliminated because not in the selected consensus" } #Creation du fichierout a partir du tableau prealablement rempli a chaque etape CreerFichierInfoESTConstructionmRNAFullLength "write" $FichierESTInfo Sauve $SeqTFADuCons dans $FichierTFAConsensus } #############Pour CAP3################# if {[string equal -nocase $ProgrammeConsensus "CAP3"]} { ### 1- Execution de CAP3 avec creation de consensus ### if {[string equal -nocase $ProgrammeConsensus "CAP3"]} { Espionne "CAP3 with the selected EST running ..." CAP3DuTFAs $FichierTFAsEST Espionne "CAP3 with the selected EST done." } } AskBlast "unset" return } proc FichierTFADeLaProteineDuContig {Nom {IdMin 0.8}} { set RepProtTFA "[RepertoireDuGenome]/prottfa" if {![file exists $RepProtTFA]} {File mkdir $RepProtTFA} set FichierProtTFA "$RepProtTFA/$Nom" set FichierAccDesProtEtDesContigsChoisis "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesContigsChoisis" set Prot [InterrogeContigAndProt $Nom Protein Access] if {$Prot == ""} {return} set Contig [InterrogeContigAndProt $Nom Contig Access] set IdProt [InterrogeContigAndProt $Nom Protein Identity] if {$IdProt < $IdMin} {return} set OrgaContig [InterrogeContigAndProt $Nom Contig Organisme] set OrgaProt [InterrogeContigAndProt $Nom Protein Organisme] set IdProt [InterrogeContigAndProt $Nom Protein Identity] set Identity [expr round($IdProt * 100)] set Entete "$Nom PROTEIN $Prot from $OrgaProt from CONTIG $Contig from $OrgaContig ${Identity}%" Espionne $Entete set Warning "" AppendAuFichier $FichierAccDesProtEtDesContigsChoisis "$Nom\t$Prot\t$Contig\t$OrgaProt\tSeqOK\t$Warning" if {1} { set Def [PageInfo $Prot protein "des"] set SeqProt [SequenceDeLAccess $Prot protein] set SeqTFA [SequenceFormatTFA $SeqProt $Entete] Sauve $SeqTFA dans $FichierProtTFA return $SeqTFA } } proc FichierTFADesOrganismes {{LesOrganismes Noe} {mRNAouProtein mRNA} {LesNoms ""} {IdMin 0.8}} { if {$LesOrganismes == "Noe"} {set LesOrganismes [LaSelectionDeNoe ]} if {$LesOrganismes == "" } {set LesOrganismes [MorceauxChoisis [lsort [InterrogeBestProteinAndmRNAForeachOrga LesOrganismes]]]} if {$LesOrganismes == "" } {return} if {$LesNoms == ""} {set LesNoms [InterrogeBestProteinAndmRNAForeachOrga LesNoms]} if {$mRNAouProtein == "mRNA"} { foreach Organisme $LesOrganismes { regsub -all " " $Organisme "_" OrgaTexte set RepTFA "[RepertoireDuGenome]/mrnatfa_$OrgaTexte" if {![file exists $RepTFA]} {File mkdir $RepTFA} } set Banque "genbank" } else { foreach Organisme $LesOrganismes { regsub -all " " $Organisme "_" OrgaTexte set RepTFA "[RepertoireDuGenome]/prottfa_$OrgaTexte" if {![file exists $RepTFA]} {File mkdir $RepTFA} } set Banque "protein" } set Keep 1 if {![OuiOuNon "if some files exist, do you want to conserve them?"]} {set Keep 0} foreach Organisme $LesOrganismes { regsub -all " " $Organisme "_" OrgaTexte if {$mRNAouProtein == "mRNA" } {set RepTFA "[RepertoireDuGenome]/mrnatfa_$OrgaTexte"} if {$mRNAouProtein == "Protein"} {set RepTFA "[RepertoireDuGenome]/prottfa_$OrgaTexte"} foreach Nom $LesNoms { Espionne "$Nom $Organisme" set FileTFA "$RepTFA/$Nom" if {[file exists $FileTFA] && $Keep} {continue} set Access [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme $Organisme $mRNAouProtein Access] if {$Access == ""} {continue} set SeqTFA [PageInfo $Access $Banque seq] if {$SeqTFA == ""} {continue} set Id [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $Access Identity] if {$Id < $IdMin} {set Warning " WARNING the percent of identity with the query protein is $Id (< $IdMin)"} else {set Warning ""} set SeqTFA [SequenceFormatTFA [QueLaSequenceDuTexteTFA $SeqTFA] "$Nom $mRNAouProtein $Access from ${Organisme}$Warning"] Espionne $SeqTFA Sauve $SeqTFA dans $FileTFA } } return } proc FichierTFADesProteinesChoisiesPourTous {{LesNoms ""} {Rang 1}} { if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} set RepProtTFA "[RepertoireDuGenome]/prottfa" if {![file exists $RepProtTFA]} {File mkdir $RepProtTFA} set FichierAccDesProtEtDesmRNAsChoisis "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" if {[file exists $FichierAccDesProtEtDesmRNAsChoisis]} { if {![OuiOuNon "$FichierAccDesProtEtDesmRNAsChoisis exists\nDo you want to conserv them?"]} { File delete -force $FichierAccDesProtEtDesmRNAsChoisis } } set Keep 0 if {0 < [glob -nocomplain "$RepProtTFA/*"]} { if {[OuiOuNon "Some files exist in $RepProtTFA.\nWould you want to conserv them?"]} {set Keep 1} } foreach Nom $LesNoms { set FichierProtTFA "$RepProtTFA/$Nom" if {[file exists $FichierProtTFA] && $Keep} {continue} Espionne [TFADeLaProteineChoisie $Nom $Rang] } return } proc FichierTFADesProteinesDesContigsPourTous {{LesNoms ""} {IdMin 0.80}} { if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} set RepProtTFA "[RepertoireDuGenome]/prottfa" if {![file exists $RepProtTFA]} {File mkdir $RepProtTFA} set FichierAccDesProtEtDesContigsChoisis "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesContigsChoisis" set Keep 1 if {0 < [llength [glob -nocomplain "$RepProtTFA/*"]]} { if {![OuiOuNon "Some files exist in $RepProtTFA.\nWould you want to conserv them?"]} { if {[file exists $FichierAccDesProtEtDesContigsChoisis]} {File delete -force $FichierAccDesProtEtDesContigsChoisis} set Keep 0 } } foreach Nom $LesNoms { set FichierProtTFA "$RepProtTFA/$Nom" if {[file exists $FichierProtTFA] && $Keep} {continue} FichierTFADeLaProteineDuContig $Nom $IdMin } return } proc FichierTFADesRegionsPromotricesPourTous {NameRepTFAIni {TailleFenetreMin 10000} {TailleFenetreMax 10000} {LesNoms ""}} { set RepTFA "[RepertoireDuGenome]/$NameRepTFAIni" set RepExonicMap "[RepertoireDuGenome]/${NameRepTFAIni}_exonicmap" if {![file exists $RepTFA] || ![file exists $RepExonicMap]} {return} set RepPromoteur "[RepertoireDuGenome]/${NameRepTFAIni}_promoter" if {![file exists $RepPromoteur]} {File mkdir $RepPromoteur} if {$LesNoms == "" } {set LesNoms [MorceauxChoisis [ListeDesPABs]]} if {0 < [llength [glob -nocomplain "$RepPromoteur/*"]]} { if {[OuiOuNon "Some files exist in $RepPromoteur, would you want to conserv them?"]} { set Keep 1 } else { set Keep 0 } } else { set Keep 1 } foreach Nom $LesNoms { set FichierCExon "$RepExonicMap/$Nom" if {![file exists $FichierCExon]} {continue} set FichierPromoteur "$RepPromoteur/$Nom" if {$Keep && [file exists $FichierPromoteur]} {continue} set SeqTFA [TFADeLaRegionPromotrice $Nom $FichierCExon $TailleFenetreMin $TailleFenetreMax] if {$SeqTFA == ""} {continue} Sauve $SeqTFA dans $FichierPromoteur } return "" } proc FichierTFAsAleatoireTIGR {FileId FileTFAs FileTFAsOut {NbSeq 1000}} { if {![file exists $FileId ]} {return} if {![file exists $FileTFAs]} {return} set LesId {} set F [open $FileId] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {![regexp -nocase {^>([0-9a-z]+)} $Ligne tmp Id]} {continue} lappend LesId $Id } close $F set LesIdSelect {} set n 0 while {$n < $NbSeq} { set LesIdOld $LesId set NbId [llength $LesIdOld] set i [Aleatoire 0 [expr $NbId - 1]] set Id [lindex $LesIdOld $i] if {[info exists TabDejaVu($Id]} {continue} set TabDejaVu($Id) 1 lappend LesIdSelect $Id set LesId {} if {0 < $i } {set LesId [concat $LesId [lrange $LesIdOld 0 [expr $i - 1] ] ]} if {$i < [expr $NbId - 1]} {set LesId [concat $LesId [lrange $LesIdOld [expr $i + 1] [expr $NbId - 1] ] ]} incr n } Espionne [llength $LesIdSelect] set LesTFAs {} foreach SeqTFA [split [ContenuDuFichier $FileTFAs] ">"] { set SeqTFA [string trim $SeqTFA] if {$SeqTFA == ""} {continue} set SeqTFA ">$SeqTFA" if {![regexp -nocase {^>([0-9a-z]+)} $SeqTFA tmp Id]} {continue} if {![info exists TabDejaVu($Id)]} {continue} lappend LesTFAs $SeqTFA } Espionne [llength $LesTFAs] Sauve [join $LesTFAs "\n"] dans $FileTFAsOut return } proc FichierTFAsDeTousLesVariants {FichierOUT {AvecOuSansSeqIni Sans}} { #Entree : FichierOUT = NomDuFichierDeSortie # AvecOuSansSeqIni = "Avec" ou "Sans" la sequence initiale de l'id avec les variants #Sortie : Le fichier au format TFA des toutes les sequences des variants #Si le fichier existe je le supprime if {[file exists $FichierOUT]} {file delete -force $FichierOUT} ##Commande de getz pour extraire toutes les sequences possédant le champs "alternative products" dans CC set Commande "[ProgPathway getz] \"\\\[protein\-all:alternative products\\\]\"" catch {set Out [eval exec $Commande]} Message #Pour chaque Id que getz me renvoie foreach Id [split $Out "\n"] { #Je ne les utilise qu'une fois if {[info exists TabDejaVu($Id)]} {continue} else {set TabDejaVu($Id) 1} Espionne $Id #Appelle de la procedure LesSeqTFADesVariants qui retourne toutes les sequences TFA des variants d'un access set LesSeqTFA [LesSeqTFADesVariants $Id $AvecOuSansSeqIni] #Il doit y avoir au moins une sequence sans compter la sequence initiale set NbSeqTFA [llength $LesSeqTFA] if { ($NbSeqTFA < 1 && [string equal -nocase $AvecOuSansSeqIni "Sans"]) || ($NbSeqTFA <= 1 && [string equal -nocase $AvecOuSansSeqIni "Avec"])} {continue} #Pour chacune de ces sequences, je les enregistre dans le Fichier de sortie foreach SeqTFA $LesSeqTFA { Espionne $SeqTFA AppendAuFichier $FichierOUT $SeqTFA } } return } proc FichierTFAsDesHitsDuBallast {FichierTFAs FichierBallast {NbHitsMax 2000} {NbPDBMax 30} {AvecFragment 0}} { set LesTFAs [LesTFAsDesHitsDuBallast $FichierBallast $NbHitsMax $NbPDBMax $AvecFragment] if {$LesTFAs != {}} {Sauve [join $LesTFAs "\n"] dans $FichierTFAs} return } proc FichierTFAsDesNucTFASelected {FileOut} { set LesNoms [LesNoms NomsInteressants] set LesTFAs {} foreach Nom $LesNoms { set nuctfa "[RepertoireDuGenome]/nuctfa/$Nom" if {![file exists $nuctfa]} {continue} set Entete [EnteteDuFichierTFA $nuctfa] regsub {>[^ ]+ \: } $Entete ">" Entete Espionne $Entete set Seq [QueLaSequenceDuFichierTFA $nuctfa] lappend LesTFAs [SequenceFormatTFA $Seq $Entete] } if {$LesTFAs == {}} {return} Sauve [join $LesTFAs "\n"] dans $FileOut } proc FichierTFAsNonRedondant {FichierTFAs {NouveauFichier ""}} { if {$NouveauFichier==""} { set NouveauFichier $FichierTFAs } foreach Access [LaSequenceDuTFAs $FichierTFAs "LaListeDesAccess" "" "@"] { if {[regexp "@" $Access]} { continue } Espionne $Access lappend LeNouveau [LaSequenceDuTFAs $FichierTFAs $Access] } return [SauveLesLignes $LeNouveau dans $NouveauFichier] } proc FichierTabDomain {{listeSequence ""} TypeDeDomain} { set IdenticalInformation {} set Concat "" set Rep "" set listeDomain {} #creation d'un repertoire #definir le fichier de sauvegarde dans le switch switch $TypeDeDomain { "pfam" { set Concat "ConcatPfam" set Rep "[RepertoireDuGenome]/GPfam" } "domain" { set Concat "ConcatDomain" set Rep "[RepertoireDuGenome]/GDomain" } "region" { set Concat "ConcatRegion" set Rep "[RepertoireDuGenome]/GRegion" } } #prends uniquement le fichier PUZ set domainByGroupe {} foreach Seqcible $listeSequence { set newFile "$Rep/$Seqcible" append newFile "Tab" #faire un test si contien color alors continu #if {[regexp {PUZ[0-9]+Color} $fichier] || [regexp {PUZ[0-9]+Length} $fichier]} { # continue #} Espionne "-->$Seqcible" set fichier "$Rep/$Seqcible" #faut sauvegarder dans ce repertoire les images et les py mais sous quel nom je gere les groupes avec des chiffres? set mes_lignes [LesLignesDuFichier $fichier] #parcours le fichier chaque ligne correspond à une liste de protein qui ont les meme domaines foreach ligne $mes_lignes { #recupere les proteins par groupe de domaine set proteins [split [lindex [split $ligne "="] 1] ";"] foreach protName $proteins { set lignebyProt "" if { [file exists "[RepertoireDuGenome]/macsimXml/$Seqcible.aj"]} { set fileMacsim "[RepertoireDuGenome]/macsimXml/$Seqcible.aj" } else { set fileMacsim "[RepertoireDuGenome]/macsimXml/$Seqcible" } #voir si je dois modifie la partie sue la recherche de l'organisme set OS [OrgaDuAccess $protName] if {$OS=="Inconnu inconnu"} { set OS [FromMacsims $fileMacsim $protName "OrganismLong"] } if {$OS=="" || $OS=="Inconnu inconnu" || $OS==" "} { set OS [getOrgaTfasDesCopains "" $Seqcible $protName] } #recupere la taille de la sequence set lengthSeq [FromMacsims $fileMacsim $protName "Length"] #Espionne "prot: $protName; Orga: $OS" append lignebyProt "$OS;$protName;$lengthSeq" #ici recupere les pfams set annotation [FromMacsims $fileMacsim $protName $Concat] #boucle sur ces annotations foreach an $annotation { #recupere les positions pour chaque annotation set pos [split [lindex [split $an "/"] 1] "-"] set deb [lindex $pos 0] set end [lindex $pos 1] #AJOUT ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! la ligne de dessous verifie!!!!! set an [lindex [split $an " "] 0] #test ici---------------- #set inf [lindex [split $an "/"] 0] if {[regexp {(.*)from.*} $an a p]} { set an $p } elseif {[regexp {(.*)/.*} $an a p] } { set an $p } #ne le faire que si y a un _ sinon provoque des erreurs if {[regexp {^PROP_(.*)} $an a p]} { set an $p } #et faire le append dans lignebyprot sous la forme -> ;$domain|$deb-$fin append lignebyProt ";$an|$deb-$end" } lappend domainByGroupe $lignebyProt } lappend domainByGroupe "#" } } #ici sauvegarde ce nouveia fichier SauveLesLignes $domainByGroupe dans $newFile } proc FichierTabDomainPourTous {{directory ""} TypeDeDomain} { #type de domain peut etre Domain ou Pfam etc... #faire le boulot pour l'ensemble des TAFs if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set r [glob -directory $directory *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } FichierTabDomain $f $TypeDeDomain FinPasTouche $f } } proc FichierTableauTXT2HTML {FichierTableau FichierOut} { set LeTexteHTML {} lappend LeTexteHTML "" lappend LeTexteHTML "Supplementary Information" lappend LeTexteHTML "" lappend LeTexteHTML "" lappend LeTexteHTML "

Supplementary Information

" lappend LeTexteHTML "" set LesStylesHTML {} set LesCasesHTML {} set i 0 set F [open $FichierTableau] while {[gets $F Ligne]>=0} { if {[string trim $Ligne] == ""} {continue} incr i Espionne $Ligne set LaLigne [split $Ligne "\t"] set LaLigneDuTableau [list ""] for {set j 0} {$j < [llength $LaLigne]} {incr j} { set Style "style$j" set Element [string trim [lindex $LaLigne $j]] if {$Element == ""} {set Element " "} if {$i <= 1} { lappend LesStylesHTML "" lappend LaLigneDuTableau "" continue } if {$j == 0 && [file exists "./${Element}.html"]} { lappend LaLigneDuTableau "" } else { lappend LaLigneDuTableau "" } } if {$i <= 1} {lappend LaLigneDuTableau ""} lappend LesCasesHTML [join $LaLigneDuTableau ""] } close $F foreach LigneDeStyle $LesStylesHTML {lappend LeTexteHTML $LigneDeStyle} foreach LigneDuTab $LesCasesHTML {lappend LeTexteHTML $LigneDuTab} lappend LeTexteHTML "
$Element$Element$Element
" lappend LeTexteHTML "" Sauve [join $LeTexteHTML "\n"] dans $FichierOut return } proc FichierTfaFromFichierTfaWithoutNumbers {FichierTFA {NouveauFichierTFA ""}} { if {$NouveauFichierTFA==""} { set NouveauFichierTFA [FichierPourSaveAs $FichierTFA] } if {$NouveauFichierTFA=="SameFile"} { set NouveauFichierTFA $FichierTFA } set TexteTFA [ContenuDuFichier $FichierTFA] set NouveauTFA [TexteTfaFromTexteTfaWithoutNumbers $TexteTFA] return [Sauve $NouveauTFA dans $NouveauFichierTFA] } proc FichierTissueTypePourTous {NameRepBlastnEST {AllOrgaouJustMyOrga AllOrga} {IdDeRef 0.95} {LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set FichierTissueType "[RepertoireDuGenome]/fiches/TissueType" set Continue 0 if {[file exists $FichierTissueType]} { if {[OuiOuNon "$FichierTissueType exists.\nWould you want to continue?"]} { set Continue 1 set Nom "" foreach Ligne [LesLignesDuFichier $FichierTissueType] { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] set Access [lindex $LaLigne 1] if {![info exists DejaVu($Nom)]} {set DejaVu($Nom) 1} set DejaVu($Nom,$Access) 1 } if {[info exists DejaVu($Nom)]} {unset DejaVu($Nom)} } else { if {[OuiOuNon "$FichierTissueType exists.\nWould you want to deltree this file?"]} { File delete -force $FichierTissueType } } } foreach Nom $LesNoms { if {$Continue && [info exists DejaVu($Nom)]} {continue} set FichierBlastnEST "[RepertoireDuGenome]/$NameRepBlastnEST/$Nom" if {![file exists $FichierBlastnEST]} {continue} if {[info exists TabBlast]} {unset TabBlast} DepouilleLeBlast TabBlast $FichierBlastnEST if {![info exists TabBlast(NbSubject)]} {continue} set OrgaDeRef [OrganismeDuPAB $Nom] set NbSubject [set TabBlast(NbSubject)] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [set TabBlast($i)] set Access [set TabBlast($BId,Access)] if {$Continue && [info exists DejaVu($Nom,$Access)]} {continue} Espionne "$Nom\t$BId\t$Access" set PAlignees [PourcentageDesBasesAligneesSurToutesLesBasesAlignables_TabBlast TabBlast $BId] if {$PAlignees < $IdDeRef} {continue} set PAlignables [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables_TabBlast TabBlast $BId] if {$PAlignables < $IdDeRef} {continue} set Page [PageInfo $BId est] set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] if {$AllOrgaouJustMyOrga != "AllOrga"} { set EstCeUnDesOrga 0 foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} {set EstCeUnDesOrga 1;break} } if {!$EstCeUnDesOrga} {continue} } set LesTissues [LesTissuesDeLAcNuc_PageInfo $Page] if {$LesTissues == {}} {continue} foreach Tissue $LesTissues { foreach Orga $LesOrgas { Espionne "$Nom\t$Access\t$Orga\t$Tissue" AppendAuFichier $FichierTissueType "$Nom\t$Access\t$Orga\t$Tissue" } } } } return } proc FichierValidationDPC {FileDPC NMin} { set F [open $FileDPC] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Taille [llength $LaLigne] if {$Taille <=2} {continue} set Id [lindex $LaLigne 0] if {$Taille < $NMin} { Espionne "$Id taille $Taille < $NMin" } set AiVuUneValeurDiffDeZero 0 for {set i 1} {$i < $Taille} {incr i} { set V [lindex $LaLigne $i] if {$V != 0.0} {set AiVuUneValeurDiffDeZero 1;break} } if {!$AiVuUneValeurDiffDeZero} { Espionne "$Id que des 0" Espionne [PageInfo $Id protein des] Espionne $Ligne return } } close $F } proc FichierZScoreDesGODesClusters {FichierOrf2Cluster FichierGO FichierOut} { if {![file exists $FichierOrf2Cluster ]} {return} if {![file exists $FichierGO ]} {return} set LesGO {} if {![info exists Tab(NbGO)]} {set Tab(NbGO) 0} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster LesClusters] { if {![info exists Tab($Cluster,NbGO)]} {set Tab($Cluster,NbGO) 0} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster Cluster $Cluster LesNoms] { set LesGODeLaBoite {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LesGODeLaBoite $GO foreach GOAncetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LesGODeLaBoite $GO } } foreach GO [lsort -unique $LesGODeLaBoite] { incr Tab(NbGO) incr Tab($Cluster,NbGO) if {![info exists Tab($Cluster,$GO,n)]} {set Tab($Cluster,$GO,n) 0} incr Tab($Cluster,$GO,n) if {![info exists Tab($GO,n)]} { lappend LesGO $GO set Tab($GO,n) 0 } incr Tab($GO,n) } } } set LesGODesClusters {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster LesClusters] { foreach GO $LesGO { if {$GO == "GO:0003673"} {continue} Espionne "$Cluster $GO" set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set r 0 if {[info exists Tab($Cluster,$GO,n)]} {set r [set Tab($Cluster,$GO,n)]} set n 0 if {[info exists Tab($GO,n) ]} {set n [set Tab($GO,n) ]} set R 0 if {[info exists Tab($Cluster,NbGO) ]} {set R [set Tab($Cluster,NbGO) ]} set N 0 if {[info exists Tab(NbGO) ]} {set N [set Tab(NbGO) ]} set ZScore [ZScore $r $R $n $N] lappend LesGODesClusters [list $Cluster $Type $GO $Def $r $R $n $N $ZScore] } } if {$LesGODesClusters == {}} {continue} foreach LInfo [lsort -index 0 [lsort -index 8 -real -decreasing $LesGODesClusters]] { Espionne $LInfo AppendAuFichier $FichierOut [join $LInfo "\t"] } return } proc FichierZScoreDesGeneOntologyDesClustersSurGOBoites {FichierGO FichierOut} { foreach Cluster [O2C2O LesClusters] { set Tab($Cluster,LesGO) {} foreach Nom [O2C2O Cluster $Cluster LesOrfs] { set LesGO {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend LesGO $GO foreach Ancetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] {lappend LesGO $Ancetre} } foreach GO [lsort -unique $LesGO] { set Type [Onto $GO Type] if {![info exists Tab($Type,NbGO) ]} {set Tab($Type,NbGO) 0} incr Tab($Type,NbGO) if {![info exists Tab($Type,$Cluster,NbGO)]} {set Tab($Type,$Cluster,NbGO) 0} incr Tab($Type,$Cluster,NbGO) if {![info exists Tab($GO,n)]} {set Tab($GO,n) 0} incr Tab($GO,n) if {![info exists Tab($Cluster,$GO,n)]} { lappend Tab($Cluster,LesGO) $GO set Tab($Cluster,$GO,n) 0 } incr Tab($Cluster,$GO,n) } } } foreach Cluster [O2C2O LesClusters] { set LesGOEtLeurZScore {} foreach GO [set Tab($Cluster,LesGO)] { set Type [Onto $GO Type] set r [set Tab($Cluster,$GO,n) ] set n [set Tab($GO,n) ] set R [set Tab($Type,$Cluster,NbGO)] set N [set Tab($Type,NbGO) ] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set ZScore [ZScore $r $R $n $N] #if {$ZScore <= 0} {continue} lappend LesGOEtLeurZScore [list $Cluster $Type $GO $Def $r $R $n $N $ZScore] } foreach LeGO [lsort -index 1 [lsort -real -decreasing -index end $LesGOEtLeurZScore]] { Espionne $LeGO AppendAuFichier $FichierOut [join $LeGO "\t"] } } return } proc FichierZScoreDesGeneOntologyDesClustersSurGOClusters {FichierGO FichierOut} { foreach Cluster [lsort -unique [InterrogeGeneOntology $FichierGO LesGroupes]] { set Tab($Cluster,LesGO) {} foreach GO [InterrogeGeneOntology $FichierGO Groupe $Cluster LesGO] { lappend Tab($Cluster,LesGO) $GO foreach Ancetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend Tab($Cluster,LesGO) $Ancetre } } foreach GO [lsort -unique [set Tab($Cluster,LesGO)]] { set Type [Onto $GO Type] if {![info exists Tab($Type,NbGO) ]} {set Tab($Type,NbGO) 0} incr Tab($Type,NbGO) if {![info exists Tab($Type,$Cluster,NbGO)]} {set Tab($Type,$Cluster,NbGO) 0} incr Tab($Type,$Cluster,NbGO) if {![info exists Tab($GO,n)]} {set Tab($GO,n) 0} incr Tab($GO,n) if {![info exists Tab($Cluster,$GO,n)]} {set Tab($Cluster,$GO,n) 0} incr Tab($Cluster,$GO,n) } } foreach Cluster [InterrogeGeneOntology $FichierGO LesGroupes] { set LesGOEtLeurZScore {} foreach GO [lsort -unique [set Tab($Cluster,LesGO)]] { set Type [Onto $GO Type] set r [set Tab($Cluster,$GO,n) ] set n [set Tab($GO,n) ] set R [set Tab($Type,$Cluster,NbGO)] set N [set Tab($Type,NbGO) ] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set ZScore [ZScore $r $R $n $N] #if {$ZScore <= 0} {continue} lappend LesGOEtLeurZScore [list $Cluster $Type $GO $Def $r $R $n $N $ZScore] } foreach LeGO [lsort -index 1 [lsort -real -decreasing -index end $LesGOEtLeurZScore]] { Espionne $LeGO AppendAuFichier $FichierOut [join $LeGO "\t"] } } return } proc FichierZscoreDesClustersFusionnes {{ZscoreMinDuCluster 0} {NiveauGOMin_process ""} {NiveauGOMin_function ""} {NiveauGOMin_component ""}} { set FichierBestGOProttfa "[RepertoireDuGenome]/fiches/GeneOntology" set FichierGOClustersFusionnes "[RepertoireDuGenome]/fiches/GeneOntology_ClustersFusionnes" set FichierOut "[RepertoireDuGenome]/fiches/ZScoreDesClustersFusionnes" set LesClustersFusionnes [O2C2O LesClustersFusionnes] foreach ClusterFusionne $LesClustersFusionnes { ### Selection des GO en fonction de leur niveau dans l'arbre ### ### Premier niveau interessant est 3 en process et 2 en function ### foreach GO [InterrogeGeneOntology $FichierGOClustersFusionnes Groupe $ClusterFusionne LesGO] { set Type [Onto $GO Type] ### on n'etudie que les types pour lesquels on a determine un seuil minimal ### if {$Type == "" || ![info exists NiveauGOMin_$Type]} {continue} set NiveauGOMin [set NiveauGOMin_$Type ] set NiveauDuGO [NiveauMinDuGO $GO $Type] if {$NiveauDuGO == "" || $NiveauGOMin == "" || $NiveauDuGO < $NiveauGOMin} {continue} set TabTmp(Cluster,$ClusterFusionne,$GO) 1 foreach Ancetre [InterrogeGeneOntology $FichierGOClustersFusionnes GO $GO LesAncetres] { set NiveauDuGO [NiveauMinDuGO $Ancetre $Type] if {$NiveauDuGO == "" || $NiveauGOMin == "" || $NiveauDuGO < $NiveauGOMin} {continue} set TabTmp(Cluster,$ClusterFusionne,$Ancetre) 1 } } ### Liste de tous les GO interessants d'un cluster, chaque GO est mis autant de fois ### qu'il est present dans le cluster ### set TabZScoreDesGeneOntologyDesClustersFusionnes($ClusterFusionne,LesGO) {} foreach Clust [O2C2O ClusterFusionne $ClusterFusionne LesClusters] { foreach Nom [O2C2O Cluster $Clust LesOrfs] { foreach GO [InterrogeGeneOntology $FichierBestGOProttfa $Nom LesGO] { if {[info exists TabTmp($Nom,$GO)]} {continue} set TabTmp($Nom,$GO) 1 if {[info exists TabTmp(Cluster,$ClusterFusionne,$GO)]} { lappend TabZScoreDesGeneOntologyDesClustersFusionnes($ClusterFusionne,LesGO) $GO } foreach Ancetre [InterrogeGeneOntology $FichierBestGOProttfa GO $GO LesAncetres] { if {[info exists TabTmp($Nom,$Ancetre)]} {continue} set TabTmp($Nom,$Ancetre) 1 if {[info exists TabTmp(Cluster,$Clust,$Ancetre)]} { lappend TabZScoreDesGeneOntologyDesClustersFusionnes($ClusterFusionne,LesGO) $Ancetre } } } } } ### Determine les differents effectifs de GO necessaires pour le calcul du Zscore ### foreach GO [set TabZScoreDesGeneOntologyDesClustersFusionnes($ClusterFusionne,LesGO)] { set Type [Onto $GO Type] if {![info exists TabZScoreDesGeneOntologyDesClustersFusionnes($Type,NbGO)]} { set TabZScoreDesGeneOntologyDesClustersFusionnes($Type,NbGO) 0 } ### N ### incr TabZScoreDesGeneOntologyDesClustersFusionnes($Type,NbGO) if {![info exists TabZScoreDesGeneOntologyDesClustersFusionnes($Type,$ClusterFusionne,NbGO)]} { set TabZScoreDesGeneOntologyDesClustersFusionnes($Type,$ClusterFusionne,NbGO) 0 } ### R ### incr TabZScoreDesGeneOntologyDesClustersFusionnes($Type,$ClusterFusionne,NbGO) if {![info exists TabZScoreDesGeneOntologyDesClustersFusionnes($GO,n) ]} { set TabZScoreDesGeneOntologyDesClustersFusionnes($GO,n) 0 } ### n ### incr TabZScoreDesGeneOntologyDesClustersFusionnes($GO,n) if {![info exists TabZScoreDesGeneOntologyDesClustersFusionnes($ClusterFusionne,$GO,n) ]} { set TabZScoreDesGeneOntologyDesClustersFusionnes($ClusterFusionne,$GO,n) 0 } ### r ### incr TabZScoreDesGeneOntologyDesClustersFusionnes($ClusterFusionne,$GO,n) } } if {[info exists TabTmp]} {unset TabTmp} ### GO du cluster d'interet conserve si zscore >= seuil ### set LeTexte {} foreach Cluster $LesClustersFusionnes { set LesGODuCluster {} foreach GO [lsort -unique [set TabZScoreDesGeneOntologyDesClustersFusionnes($Cluster,LesGO)]] { set Type [Onto $GO Type] set r [set TabZScoreDesGeneOntologyDesClustersFusionnes($Cluster,$GO,n) ] set R [set TabZScoreDesGeneOntologyDesClustersFusionnes($Type,$Cluster,NbGO) ] set n [set TabZScoreDesGeneOntologyDesClustersFusionnes($GO,n) ] set N [set TabZScoreDesGeneOntologyDesClustersFusionnes($Type,NbGO) ] set ZScore [ZScore $r $R $n $N ] if {$ZScore < $ZscoreMinDuCluster} {continue} set Def [lindex [Onto $Type $GO LesDefinitions] 0] lappend LesGODuCluster [list $Cluster $Type $GO $Def $r $R $n $N $ZScore] } foreach LeGODuCluster [lsort -index 1 [lsort -decreasing -real -index end $LesGODuCluster]] { lappend LeTexte [join $LeGODuCluster "\t"] } } Sauve [join $LeTexte "\n"] dans $FichierOut return $LeTexte } proc Fichier_4_ChiffresSurLesProteinesTrouveesDeRetPolyQ_These {Fichier} { set Rep [RepertoireDuGenome] set FichierOCADE "$Rep/fiches/Orf2Cluster2Access2Def2Expression" set LesNoms [AskClust_Gretta LesNoms ] set LesClusters [AskClust_Gretta LesClusters] lappend LesClusters "Total" foreach Cluster $LesClusters { set Tab($Cluster,NbSeq) 0 set Tab($Cluster,NoProt) 0 set Tab($Cluster,NbProtTot) 0 set Tab($Cluster,NbProtContig) 0 set Tab($Cluster,NbProt) 0 set Tab($Cluster,NbProtCont,moinsde1000) 0 set Tab($Cluster,NbProtCont,1001a2000) 0 set Tab($Cluster,NbProtCont,2001a3000) 0 set Tab($Cluster,NbProtCont,3001a4000) 0 set Tab($Cluster,NbProtCont,4001a5000) 0 set Tab($Cluster,NbProtCont,plusde5000) 0 set Tab($Cluster,NbProt,5UTR) 0 set Tab($Cluster,NbProt,CDS) 0 set Tab($Cluster,NbProt,3UTR) 0 set Tab($Cluster,NbProt,5UTRCDS) 0 set Tab($Cluster,NbProt,CDS3UTR) 0 set Tab($Cluster,NbProt,5UTRCDS3UTR) 0 set Tab($Cluster,Prot,Mouse) 0 set Tab($Cluster,Prot,Human) 0 set Tab($Cluster,Prot,Rat) 0 set Tab($Cluster,Prot,Other) 0 } foreach Cluster $LesClusters { if {$Cluster == "Total"} { set LesN $LesNoms } else { set LesN [AskClust_Gretta Cluster $Cluster LesNoms] } foreach Nom $LesN { Espionne "$Cluster $Nom" incr Tab($Cluster,NbSeq) set FTFA "$Rep/prottfa/$Nom" if {![file exists $FTFA]} {incr Tab($Cluster,NoProt);continue} incr Tab($Cluster,NbProtTot) set AccProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {($AccProt != "NOPROTEIN" && $AccmRNA != "") || ($AccmRNA != "NOMRNA" && $AccmRNA != "")} { incr Tab($Cluster,NbProt) set CDS [InterrogeProtAndmRNA $Nom Rang 1 NbElementsDeLaQuery DansLeCDS ] set 5UTR [InterrogeProtAndmRNA $Nom Rang 1 NbElementsDeLaQuery DansLe5UTR] set 3UTR [InterrogeProtAndmRNA $Nom Rang 1 NbElementsDeLaQuery DansLe3UTR] set ID [InterrogeProtAndmRNA $Nom Rang 1 Id ] set Orga [InterrogeProtAndmRNA $Nom Rang 1 Organism ] if {$Orga == "Mus musculus"} { incr Tab($Cluster,Prot,Mouse) } elseif {$Orga == "Homo sapiens"} { incr Tab($Cluster,Prot,Human) } elseif {$Orga == "Rattus norvegicus"} { incr Tab($Cluster,Prot,Rat) } else { incr Tab($Cluster,Prot,Other) } if {$5UTR != 0 && $CDS == 0 && $3UTR == 0} {incr Tab($Cluster,NbProt,5UTR) } if {$5UTR == 0 && $CDS != 0 && $3UTR == 0} {incr Tab($Cluster,NbProt,CDS) } if {$5UTR == 0 && $CDS == 0 && $3UTR != 0} {incr Tab($Cluster,NbProt,3UTR) } if {$5UTR != 0 && $CDS != 0 && $3UTR == 0} {incr Tab($Cluster,NbProt,5UTRCDS) } if {$5UTR == 0 && $CDS != 0 && $3UTR != 0} {incr Tab($Cluster,NbProt,CDS3UTR) } if {$5UTR != 0 && $CDS != 0 && $3UTR != 0} {incr Tab($Cluster,NbProt,5UTRCDS3UTR)} continue } set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$AccessProt != ""} { incr Tab($Cluster,NbProtContig) set Orga [InterrogeContigAndProt $Nom Contig Organisme] set ID [InterrogeContigAndProt $Nom Protein Identity ] set DIST [InterrogeContigAndProt $Nom Protein Distance ] if {$DIST <= 1000 } {incr Tab($Cluster,NbProtCont,moinsde1000)} if {1001 <= $DIST && $DIST < 2000} {incr Tab($Cluster,NbProtCont,1001a2000) } if {2001 <= $DIST && $DIST < 3000} {incr Tab($Cluster,NbProtCont,2001a3000) } if {3001 <= $DIST && $DIST < 4000} {incr Tab($Cluster,NbProtCont,3001a4000) } if {4001 <= $DIST && $DIST < 5000} {incr Tab($Cluster,NbProtCont,4001a5000) } if {5001 <= $DIST } {incr Tab($Cluster,NbProtCont,plusde5000) } if {$Orga == "Mus musculus"} { incr Tab($Cluster,Prot,Mouse) } elseif {$Orga == "Homo sapiens"} { incr Tab($Cluster,Prot,Human) } elseif {$Orga == "Rattus norvegicus"} { incr Tab($Cluster,Prot,Rat) } else { incr Tab($Cluster,Prot,Other) } continue } } } set LeTexte {} lappend LeTexte "Cluster\tNombre de sequences\tPas de proteines\tNombre de Proteines\tNombre de proteines souris\tNombre de proteines rat\tNombre de proteines humaine\tNombre de proteines appartenant a d'autres organismes\tNombre de proteines trouvees par les deux protocoles classiques\t5'UTR\t5'UTR et CDS\tCDS\tCDS et 3'UTR\t3'UTR\t5'UTR, CDS et 3'UTR\tNombre de proteines trouvees par le protocole indirect\tmoins de 1000\t1001 a 2000\t2001 a 3000\t3001 a 4000\t4001 a 5000\tplus de 5000" foreach Cluster $LesClusters { set NbSeq [set Tab($Cluster,NbSeq) ] set NoProt [set Tab($Cluster,NoProt) ] set NbProtTot [set Tab($Cluster,NbProtTot) ] set NbProtContig [set Tab($Cluster,NbProtContig) ] set NbProt [set Tab($Cluster,NbProt) ] set Nbmoinsde1000 [set Tab($Cluster,NbProtCont,moinsde1000)] set Nb1001a2000 [set Tab($Cluster,NbProtCont,1001a2000) ] set Nb2001a3000 [set Tab($Cluster,NbProtCont,2001a3000) ] set Nb3001a4000 [set Tab($Cluster,NbProtCont,3001a4000) ] set Nb4001a5000 [set Tab($Cluster,NbProtCont,4001a5000) ] set Nbplusde5000 [set Tab($Cluster,NbProtCont,plusde5000) ] set NbProt5UTR [set Tab($Cluster,NbProt,5UTR) ] set NbProtCDS [set Tab($Cluster,NbProt,CDS) ] set NbProt3UTR [set Tab($Cluster,NbProt,3UTR) ] set NbProt5UTRCDS [set Tab($Cluster,NbProt,5UTRCDS) ] set NbProtCDS3UTR [set Tab($Cluster,NbProt,CDS3UTR) ] set NbProt5UTRCDS3UTR [set Tab($Cluster,NbProt,5UTRCDS3UTR) ] set NbMouse [set Tab($Cluster,Prot,Mouse) ] set NbHuman [set Tab($Cluster,Prot,Human) ] set NbRat [set Tab($Cluster,Prot,Rat) ] set NbOther [set Tab($Cluster,Prot,Other) ] lappend LeTexte "$Cluster\t$NbSeq\t$NoProt\t$NbProtTot\t$NbMouse\t$NbRat\t$NbHuman\t$NbOther\t$NbProt\t$NbProt5UTR\t$NbProt5UTRCDS\t$NbProtCDS\t$NbProtCDS3UTR\t$NbProt3UTR\t$NbProt5UTRCDS3UTR\t$NbProtContig\t$Nbmoinsde1000\t$Nb1001a2000\t$Nb2001a3000\t$Nb3001a4000\t$Nb4001a5000\t$Nbplusde5000" } Sauve [join $LeTexte "\n"] dans $Fichier return } proc Fichier_6_ChiffresSurApportDeGOAnnoDesProteinesDeRetPolyQ_These {Fichier} { set Rep [RepertoireDuGenome] set FichierOCADE "$Rep/fiches/Orf2Cluster2Access2Def2Expression" set RepGOXML "$Rep/GeneOntology" set LesNoms [AskClust_Gretta LesNoms] #set LesClusters [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] set LesClusters [AskClust_Gretta LesClusters] lappend LesClusters "Total" foreach Cluster $LesClusters { set Tab($Cluster,NbProtIPO) 0 set Tab($Cluster,NbProtIPO_Func) 0 set Tab($Cluster,NbProtIPO_Proc) 0 set Tab($Cluster,NbProtIPO_Comp) 0 set Tab($Cluster,NbAnnoIPO) 0 set Tab($Cluster,NbAnnoIPO_Func) 0 set Tab($Cluster,NbAnnoIPO_Proc) 0 set Tab($Cluster,NbAnnoIPO_Comp) 0 set Tab($Cluster,NbProtGPO) 0 set Tab($Cluster,NbProtGPO_Func) 0 set Tab($Cluster,NbProtGPO_Proc) 0 set Tab($Cluster,NbProtGPO_Comp) 0 set Tab($Cluster,NbAnnoGPO) 0 set Tab($Cluster,NbAnnoGPO_Func) 0 set Tab($Cluster,NbAnnoGPO_Proc) 0 set Tab($Cluster,NbAnnoGPO_Comp) 0 set Tab($Cluster,NbProt) 0 } foreach Cluster $LesClusters { if {$Cluster == "Total"} { set LesN $LesNoms } else { set LesN [AskClust_Gretta Cluster $Cluster LesNoms] } foreach Nom $LesN { Espionne "$Cluster $Nom" set FileGOXML "$Rep/GeneOntology/$Nom.xml" set FPTFA "$Rep/prottfa/$Nom" AskGOAnalyse unset if {![file exists $FPTFA ]} {continue} incr Tab($Cluster,NbProt) if {![file exists $FileGOXML]} {continue} set nIPOTot 0 set nGPOTot 0 set Func 0 set Proc 0 set Comp 0 #function set LesIPO [AskGOAnalyse $FileGOXML Methode IPO Type "function" LesGO] set nIPO [llength $LesIPO] set LesGPO [AskGOAnalyse $FileGOXML Methode GPO Type "function" LesGO] set nGPO [llength $LesGPO] if {$nGPO < $nIPO} {set nGPO $nIPO} if {0 < $nIPO} {incr Tab($Cluster,NbProtIPO_Func)} if {0 < $nGPO} {incr Tab($Cluster,NbProtGPO_Func)} incr nIPOTot $nIPO incr nGPOTot $nGPO incr Tab($Cluster,NbAnnoIPO_Func) $nIPO incr Tab($Cluster,NbAnnoGPO_Func) $nGPO #process set LesIPO [AskGOAnalyse $FileGOXML Methode IPO Type "process" LesGO] set nIPO [llength $LesIPO] set LesGPO [AskGOAnalyse $FileGOXML Methode GPO Type "process" LesGO] set nGPO [llength $LesGPO] if {$nGPO < $nIPO} {set nGPO $nIPO} if {0 < $nIPO} {incr Tab($Cluster,NbProtIPO_Proc)} if {0 < $nGPO} {incr Tab($Cluster,NbProtGPO_Proc)} incr nIPOTot $nIPO incr nGPOTot $nGPO incr Tab($Cluster,NbAnnoIPO_Proc) $nIPO incr Tab($Cluster,NbAnnoGPO_Proc) $nGPO #component set LesIPO [AskGOAnalyse $FileGOXML Methode IPO Type "component" LesGO] set nIPO [llength $LesIPO] set LesGPO [AskGOAnalyse $FileGOXML Methode GPO Type "component" LesGO] set nGPO [llength $LesGPO] if {$nGPO < $nIPO} {set nGPO $nIPO} if {0 < $nIPO} {incr Tab($Cluster,NbProtIPO_Comp)} if {0 < $nGPO} {incr Tab($Cluster,NbProtGPO_Comp)} incr nIPOTot $nIPO incr nGPOTot $nGPO incr Tab($Cluster,NbAnnoIPO_Comp) $nIPO incr Tab($Cluster,NbAnnoGPO_Comp) $nGPO #All if {0 < $nIPOTot} {incr Tab($Cluster,NbProtIPO)} if {0 < $nGPOTot} {incr Tab($Cluster,NbProtGPO)} incr Tab($Cluster,NbAnnoIPO) $nIPOTot incr Tab($Cluster,NbAnnoGPO) $nGPOTot } AskGOAnalyse unset } set LeTexte {} lappend LeTexte "Groupe\tNombre de proteines\tNombre de proteines annotees avec IPO\tNombre de proteines annotees avec GPO\tNombre de proteines annotees avec IPO en processus\tNombre de proteines annotees avec GPO en processus\tNombre de proteines annotees avec IPO en fonction\tNombre de proteines annotees avec GPO en fonction\tNombre de proteines annotees avec IPO en compartiment cellulaire\tNombre de proteines annotees avec GPO en compartiment cellulaire\tNombre de termes GO trouves avec IPO\tNombre de termes GO trouves avec GPO\tNombre de termes GO trouves avec IPO en processus\tNombre de termes GO trouves avec GPO en processus\tNombre de termes GO trouves avec IPO en fonction\tNombre de termes GO trouves avec GPO en fonction\tNombre de termes GO trouves avec IPO en compartiment cellulaire\tNombre de termes GO trouves avec GPO en compartiment cellulaire" foreach Cluster $LesClusters { set NbProtIPO [set Tab($Cluster,NbProtIPO) ] set NbProtIPO_Func [set Tab($Cluster,NbProtIPO_Func)] set NbProtIPO_Proc [set Tab($Cluster,NbProtIPO_Proc)] set NbProtIPO_Comp [set Tab($Cluster,NbProtIPO_Comp)] set NbAnnoIPO [set Tab($Cluster,NbAnnoIPO) ] set NbAnnoIPO_Func [set Tab($Cluster,NbAnnoIPO_Func)] set NbAnnoIPO_Proc [set Tab($Cluster,NbAnnoIPO_Proc)] set NbAnnoIPO_Comp [set Tab($Cluster,NbAnnoIPO_Comp)] set NbProtGPO [set Tab($Cluster,NbProtGPO) ] set NbProtGPO_Func [set Tab($Cluster,NbProtGPO_Func)] set NbProtGPO_Proc [set Tab($Cluster,NbProtGPO_Proc)] set NbProtGPO_Comp [set Tab($Cluster,NbProtGPO_Comp)] set NbAnnoGPO [set Tab($Cluster,NbAnnoGPO) ] set NbAnnoGPO_Func [set Tab($Cluster,NbAnnoGPO_Func)] set NbAnnoGPO_Proc [set Tab($Cluster,NbAnnoGPO_Proc)] set NbAnnoGPO_Comp [set Tab($Cluster,NbAnnoGPO_Comp)] set NbProt [set Tab($Cluster,NbProt) ] lappend LeTexte "$Cluster\t$NbProt\t$NbProtIPO\t$NbProtGPO\t$NbProtIPO_Proc\t$NbProtGPO_Proc\t$NbProtIPO_Func\t$NbProtGPO_Func\t$NbProtIPO_Comp\t$NbProtGPO_Comp\t$NbAnnoIPO\t$NbAnnoGPO\t$NbAnnoIPO_Proc\t$NbAnnoGPO_Proc\t$NbAnnoIPO_Func\t$NbAnnoGPO_Func\t$NbAnnoIPO_Comp\t$NbAnnoGPO_Comp" } set Texte [join $LeTexte "\n"] Sauve $Texte dans $Fichier return $Texte } proc FichiermRNAHsapLocalisation {{LesNoms ""} {NameFile mRNAHsapLocalisation_Human}} { if {![file exists "[RepertoireDuGenome]/Localisation"]} {file mkdir "[RepertoireDuGenome]/Localisation"} set FileLoc "[RepertoireDuGenome]/Localisation/$NameFile" if {[file exists $FileLoc]} { if {[OuiOuNon "$FileLoc exists. Would you want to keep this file ?"]} {return} File delete -force $FileLoc } set TailleFragment 100000 set LeTexte {} if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { set FileEM "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap/$Nom" if {![file exists $FileEM]} {continue} set LesRangs [InterrogeFichierExonicMap $FileEM LesRangs] set BestLoc "BestLoc" set InfoLoc "MonoLoc" if {1 < [llength $LesRangs]} {set InfoLoc "PolyLoc";set BestLoc "BestPolyLoc"} foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FileEM Rang $Rang Chromosome] set Contig [InterrogeFichierExonicMap $FileEM Rang $Rang Contig ] set LesContigsFrag [InterrogeFichierExonicMap $FileEM Rang $Rang ContigFragments] set nChiffresFragContig [string length [lindex $LesContigsFrag 0]] set NbExonicAreas [InterrogeFichierExonicMap $FileEM Rang $Rang NbExonicAreas] if {$NbExonicAreas <= 0} {continue} set LesRegions {} for {set i 1} {$i <= $NbExonicAreas} {incr i} { set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i nAli ] set Id [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i Identity] lappend LesRegions [list $i $nAli $Id] } set LesRegions [lsort -index 1 -real -decreasing [lsort -index 2 -real -decreasing $LesRegions]] set nAliMax [lindex [lindex $LesRegions 0] 1] set EstCeLePremier 1 foreach LaRegion $LesRegions { set Info "" if {$EstCeLePremier} {set Info $BestLoc;set EstCeLePremier 0} set ExonArea [lindex $LaRegion 0] set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea nAli ] set Id [expr [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Identity]/100] set DQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DQ ] set FQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FQ ] set DS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DS ] set FS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FS ] set Orient [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Orientation] set Sens [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Sens ] set Fragments "" if {0 < $nChiffresFragContig} { set FragmentMin [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Mini $DS $FS] / $TailleFragment)]] set FragmentMax [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Maxi $DS $FS] / $TailleFragment)]] set Fragments $FragmentMin if {$FragmentMin != $FragmentMax} {set Fragments [string trim "$FragmentMin $FragmentMax"]} } set LaLocSurLeChrom [CoordonneesSurChromosome $Contig $DS $FS $Sens] set DChrom [lindex $LaLocSurLeChrom 1] set FChrom [lindex $LaLocSurLeChrom 2] set SensChrom [lindex $LaLocSurLeChrom 3] set BandesCyto {} foreach LaBC [LesBandesCytologiquesDeLaRegion [NumeroDuChromosome $Chromosome] $DChrom $FChrom] { lappend BandesCyto [lindex $LaBC 0] } set BandesCyto [join $BandesCyto " "] set EMax "" set E "" set Ligne "$Nom\t$InfoLoc\t$EMax\t$E\t$nAliMax\t$nAli\t$Id\t$DQ\t$FQ\t$Chromosome\t$DChrom\t$FChrom\t$SensChrom\t$Contig\t$Fragments\t$DS\t$FS\t$Orient\t$Sens\t$BandesCyto\t$Info\tmrnatfa_Homo_sapiens" Espionne $Ligne lappend LeTexte $Ligne } } InterrogeFichierExonicMap unset } Sauve [join $LeTexte "\n"] dans $FileLoc return } proc FichiersGeneOntologyParClusterXHda {FichierGO} { if {![file exists $FichierGO]} {return} set RepOntologyClustersXHda "[RepertoireDuGenome]/OntologyDesClustersXHda" if {![file exists $RepOntologyClustersXHda]} {file mkdir $RepOntologyClustersXHda} set NomFichier [file tail $FichierGO] set Fichier "$RepOntologyClustersXHda/$NomFichier" set F [open $FichierGO] while {[gets $F Ligne] >= 0} { set LaLigne [split $Ligne "\t"] set Orf [lindex $LaLigne 0] set Cluster [O2C2O Orf $Orf Cluster] set FichierOut "${Fichier}_clusterXhda_$Cluster" AppendAuFichier $FichierOut $Ligne } close $F return } proc FichiersHTMLAvecLiens {Nom {Prefix ""}} { if {$Nom==""} {return ""} set Fichier_html "[RepertoireDuGenome]/bilan/html_nolink/$Nom.html" Espionne $Fichier_html set NomFichierHtml [file tail $Fichier_html] set LesTexteRef {} if {$Prefix=="SSH"} { lappend LesTexteRef "Forschungszentrum Karlsruhe" "http://www.fzk.de/" lappend LesTexteRef "Chromosomal localisation:" "localisation_SSH.gif" } if {$Prefix=="HNK"} { lappend LesTexteRef "IGBMC" "http://www-igbmc.u-strasbg.fr/" lappend LesTexteRef "Chromosomal localisation:" "localisation_HNK.gif" } if {$Prefix=="PROS"} { lappend LesTexteRef "ProteoSys" "http://www.proteosys.com/" lappend LesTexteRef "Chromosomal localisation:" "localisation_PROS.gif" } lappend LesTexteRef "ProCureBioPharm" "http://www-igbmc.u-strasbg.fr/projets/ProCureBioPharm/" lappend LesTexteRef "Access/Clone:" "sequences/$NomFichierHtml" lappend LesTexteRef "Multiple alignment:" "msf/$NomFichierHtml" set Page [ContenuDuFichierAvecReferences $Fichier_html $LesTexteRef] #set TexteHtml [Html_DuTexteTelQuel $Page $Nom] Sauve $Page dans "[RepertoireDuGenome]/bilan/$NomFichierHtml" } proc FichiersHTMLAvecLiensPourTous {Prefix} { foreach Fichier_html [glob -nocomplain "[RepertoireDuGenome]/bilan/html_nolink/*.html"] { Espionne $Fichier_html set NomFichierHtml [file tail $Fichier_html] #Espionne $NomFichierHtml regsub ".html" $NomFichierHtml "" Nom #Espionne $Nom set LesTexteRef {} if {$Prefix=="SSH"} { lappend LesTexteRef "Forschungszentrum Karlsruhe" "http://www.fzk.de/" lappend LesTexteRef "Chromosomal localisation:" "localisation_SSH.gif" } if {$Prefix=="HNK"} { lappend LesTexteRef "IGBMC" "http://www-igbmc.u-strasbg.fr/" lappend LesTexteRef "Chromosomal localisation:" "localisation_HNK.gif" } if {$Prefix=="PROS"} { lappend LesTexteRef "ProteoSys" "http://www.proteosys.com/" lappend LesTexteRef "Chromosomal localisation:" "localisation_PROS.gif" } lappend LesTexteRef "ProCureBioPharm" "http://www-igbmc.u-strasbg.fr/projets/ProCureBioPharm/" lappend LesTexteRef "Access/Clone:" "sequences/$Nom" lappend LesTexteRef "Multiple alignment:" "msf/$Nom" set Page [ContenuDuFichierAvecReferences $Fichier_html $LesTexteRef] Sauve $Page dans "[RepertoireDuGenome]/bilan/$NomFichierHtml" } } proc FichiersModifiesParMRM {} { global RepertoireDuGenome set Tableau "" set AncienNom "" foreach Ligne [LesLignesDuFichier "${RepertoireDuGenome}/CompareMaskReMask.txt"] { scan $Ligne "%s %d %d %d %s" Nom Taille masking remasking suite if {[regexp " ReMasked " $Ligne] && $AncienNom != $Nom} { set LigneDuTableau [format "%s %4s\n" $Nom $Taille] append Tableau $LigneDuTableau set AncienNom $Nom } else {continue} } Espionne $Tableau if {[OuiOuNon "Do I save these Results ?"]} { set Fichier [FichierPourSaveAs "${RepertoireDuGenome}/BilanMRM/BilanMRM.txt"] if {$Fichier!=""} { Sauve $Tableau dans $Fichier } } } proc FichiersPrimers_TL {FichierNom RepPrimer RepPrimerSelect} { if {![file exists $RepPrimerSelect]} {file mkdir $RepPrimerSelect} foreach Nom [LesLignesDuFichier $FichierNom] { set Nom [string trim $Nom] if {$Nom == ""} {continue} foreach File [glob -nocomplain -directory $RepPrimer "$Nom*"] { set NameFile [file tail $File] set FileOut "$RepPrimerSelect/$NameFile" if {[file exists $FileOut]} {continue} Espionne "$Nom : $File -> $FileOut" file copy -force $File $FileOut } } return } proc FichiersRecapitulatifs_PO {} { set RepData "[RepertoireDuGenome]/DataAnalysis" if {![file exists $RepData]} {file mkdir $RepData} FichierRecapitulatifTotal_PO "$RepData/1_RecapitulatifTotal.txt" FichierRecapitulatifDesClusters_PO "$RepData/2_RecapitulatifDesClusters.txt" FichierRecapitulatifRedondanceDesProteinesInterClusters_PO "$RepData/3_RecapitulatifRedondanceDesProteinesInterClusters.txt" FichierRecapitulatifGODesClusters_PO "$RepData/4_RecapitulatifGODesClusters.txt" return } proc FichiersSEACI2FichierGO {FichierSansExtension {Sauve 1}} { set Fichier $FichierSansExtension set FichierGO "${Fichier}.go" Charge2GO Tab2GO foreach File [list "${Fichier}.ipr" "${Fichier}.ec" "${Fichier}.kw"] { if {![file exists $File]} {Warne "$File does not exist";continue} ChargeLesResultatsDeSEACI TabSEACI $File } if {![info exists TabSEACI(LesCategories)]} {return ""} set LesCategoriesAvecGO {} foreach Cat [set TabSEACI(LesCategories)] { if { ![info exists TabSEACI($Cat,LesRequetes)]} {continue} foreach Requete [set TabSEACI($Cat,LesRequetes)] { set n [set TabSEACI($Cat,$Requete)] set Requete [CorrigeLaRequete $Requete] if {![info exists Tab2GO($Requete)]} {continue} if {![info exists TabTmp($Cat)]} { set Tableau($Cat,LesRequetes) {} lappend LesCategoriesAvecGO $Cat set TabTmp($Cat) 1 } foreach GO [set Tab2GO($Requete)] { if {![info exists Tableau($Cat,$GO)]} { lappend Tableau($Cat,LesRequetes) $GO set Tableau($Cat,$GO) 0 } incr Tableau($Cat,$GO) $n } } } if {[info exists TabTmp]} {unset TabTmp} set Texte "" foreach Cat $LesCategoriesAvecGO { if {![info exists Tableau($Cat,LesRequetes)]} {continue} append Texte "\n$Cat\n" set TexteRequetes "" set EntryCount 0 foreach Requete [set Tableau($Cat,LesRequetes)] { set n [set Tableau($Cat,$Requete)] incr EntryCount $n append TexteRequetes " \n" append TexteRequetes " $Requete\n" append TexteRequetes " $n\n" append TexteRequetes " \n" } append Texte "$EntryCount\n" append Texte $TexteRequetes append Texte "\n" } if {$Sauve} {Sauve $Texte dans $FichierGO} return $Texte } proc FichiersSEACI2FichierGOPourTous {{LesNoms ""}} { global RepertoireDuGenome set FichierDistributionSansExt "$RepertoireDuGenome/lms/Distribution" FichiersSEACI2FichierGO $FichierDistributionSansExt if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne "$Nom -> Requete 2 GO" set FichierSansExt "$RepertoireDuGenome/lms/$Nom" FichiersSEACI2FichierGO $FichierSansExt } return "" } proc FichiersTFADesDDDesSousRep {} { # DD pour Differential Display # ### Conversion des seq de clones de DD en format TFA ### ### Renomme les fichiers selon le nom de repertoire dans lequel ils sont ### ### Attention modifier i selon la numerotation voulue ### ### En une seule etape fait un fichier tfas ds le rep . des seq presentes dans les differents ### ### sous repertoires ### ### !!! Qd des seq de x exp diff sont donnees le meme jour ### ### !!! Qd on commence un projet car i est a 0 pour tous les repertoires ### set n 2 # Fichier de correspondances: clone - fichier ini - nouvel access - fichierTFA # set LesCorrespondances {} foreach Rep [list "20040324_ICBP_Down" "20040324_ICBP_Up" "20040324_TOPO_Down" "20040324_TOPO_Up"] { if {$Rep == "20040324_ICBP_Down"} {set NameDeRef "ICBP_D"} if {$Rep == "20040324_ICBP_Up" } {set NameDeRef "ICBP_U"} if {$Rep == "20040324_TOPO_Down"} {set NameDeRef "TOPO_D"} if {$Rep == "20040324_TOPO_Up" } {set NameDeRef "TOPO_U"} set i 0 # Pour tous les fichiers .seq des repertoires donnes foreach File [glob -nocomplain "./$Rep/*.seq"] { incr i # Numerotation des sequences tfa set Name [format "%s%${n}.${n}d" $NameDeRef $i] set Clone [file tail $File] regsub -nocase {\.seq$} $Clone "" Clone set Entete "$Name $Clone" set FileTFA "./$Name.tfa" set Seq "" foreach Ligne [LesLignesDuFichier $File] {append Seq [string trim $Ligne]} set SeqTFA [SequenceFormatTFA $Seq $Entete] #Espionne "$FileTFA $Entete\n$SeqTFA" Sauve $SeqTFA dans $FileTFA lappend LesCorrespondances "$Clone\t$File\t$Name\t$FileTFA" } } Sauve [join $LesCorrespondances "\n"] dans "./Correspondances.txt" return } proc FichiersTFADesDDDuSousRep {SousRep NameDeRef i} { # DD pour Differential Display # ### Conversion des seq de clones de DD en format TFA ### ### Renomme les fichiers selon le nom de repertoire dans lequel ils sont ### ### Attention, modifier i selon la numerotation voulue, == numero de derniere seq existante de cette exp ### ### Attention, modifier NameDeRef selon l'appellation des seq voulue == type d'exp ### ### En une seule etape fait un fichier tfas ds le rep . des seq presentes dans le SousRepertoire ### ### Qd des seq d'une seule exp sont donnees le meme jour ### #ex NameDeRef "ICBP_U" set n 2 # Fichier de correspondances: clone - fichier ini - nouvel access - fichierTFA # set LesCorrespondances {} # Pour tous les fichiers .seq du sous repertoire ou sont les seq foreach File [glob -nocomplain "./$SousRep/*.seq"] { Espionne $File incr i # Numerotation des sequences tfa set Name [format "%s%${n}.${n}d" $NameDeRef $i] set Clone [file tail $File] regsub -nocase {\.seq$} $Clone "" Clone set Entete "$Name $Clone" set FileTFA "./$Name.tfa" set Seq "" foreach Ligne [LesLignesDuFichier $File] {append Seq [string trim $Ligne]} set SeqTFA [SequenceFormatTFA $Seq $Entete] #Espionne "$FileTFA $Entete\n$SeqTFA" Sauve $SeqTFA dans $FileTFA lappend LesCorrespondances "$Clone\t$File\t$Name\t$FileTFA" } #Espionne [join $LesCorrespondances "\n"] Espionne "Correspondances_$NameDeRef.txt" Sauve [join $LesCorrespondances "\n"] dans "./Correspondances_$NameDeRef.txt" return } proc FichiersTFADuTableau {{FichierTable ""}} { if {$FichierTable == ""} { set FichierTable [ButineArborescence All [pwd]] } elseif {![file exists $FichierTable]} { return "" } set OneFilePerAccess 0 if {[OuiOuNon "Would you want to save each TFA sequence?"] } { set OneFilePerAccess 1 set RepTFAs [ChoisirUnRepertoire "Choose The Directory"] } set OneFileForAllAccess 0 if {[OuiOuNon "Would you want to save all your TFA sequence in AllSequence.tfa?"] } { if {![file exists $RepTFAs]} {[ChoisirUnRepertoire "Choose The Directory"]} set OneFileForAllAccess 1 } set ToutesLesSequencesTFA "" foreach Ligne [LesLignesDuFichier $FichierTable] { set LaLigne [split $Ligne "\t"] if {![regexp {[0-9]} [lindex $LaLigne 0]]} {continue} if {[lindex $LaLigne 3] != "GB"} { Espionne [lindex $LaLigne 1] continue } set Access [lindex $LaLigne 2] set Seq [SequenceDeLAccess $Access] if {$Seq == ""} { Espionne "$Access not found in database" set SeqTFA ">$Access not found" } else { set Entete ">$Access" set SeqTFA [SequenceFormatTFA $Seq $Entete] } if {$OneFilePerAccess == 1} { Espionne "$RepTFAs/$Access.tfa" Sauve $SeqTFA dans "$RepTFAs/$Access.tfa" } append ToutesLesSequencesTFA "$SeqTFA\n" } if {$OneFileForAllAccess == 1} {Sauve $ToutesLesSequencesTFA dans "$RepTFAs/AllSequence.tfa"} return $ToutesLesSequencesTFA } proc FilDeFerDe {liste pdbid} { global Tbond global PDB_[set pdbid]_AtmXYZ global PDB_[set pdbid]_NomAtm global PDB_[set pdbid]_NomRes # set Lch [lrange [array names PDB_[set pdbid]_AtmXYZ] 1 end] set Lch "A" foreach c $Lch { set LNat [set PDB_[set pdbid]_NomAtm($c)] set LNrs [set PDB_[set pdbid]_NomRes($c)] set Lxyz [set PDB_[set pdbid]_AtmXYZ($c)] set first 1 foreach Lx $Lxyz La $LNat r1 $LNrs { set r [AutreCodeLuc $r1] foreach a $La x $Lx { set Ar([string trim $a]) $x } foreach bd [set Tbond($r)] { lassign $bd a b if {$a eq "C-" || $b eq "C-"} {continue} set col1 [CouleurDeAtome $a] set col2 [CouleurDeAtome $b] TraceLigne $liste [set Ar($a)] [set Ar($b)] $col1 $col2 } if {$first} { set first 0 } else { TraceLigne $liste [set Ar(N)] $Cx [CouleurDeAtome "N"] [CouleurDeAtome "C"] } set Cx [set Ar(C)] unset Ar } } return } proc FilDeFerDe2 {liste pdbid} { global Tbond global PDB_[set pdbid]_AtmXYZ global PDB_[set pdbid]_NomAtm global PDB_[set pdbid]_NomRes # set Lch [lrange [array names PDB_[set pdbid]_AtmXYZ] 1 end] set Lch "A" foreach c $Lch { set LNat [set PDB_[set pdbid]_NomAtm($c)] set LNrs [set PDB_[set pdbid]_NomRes($c)] set Lxyz [set PDB_[set pdbid]_AtmXYZ($c)] set first 1 set colN [CouleurDeAtome "N"] set colCA [CouleurDeAtome "C"] set colC ${colCA} set colO [CouleurDeAtome "O"] foreach Lx $Lxyz La $LNat r1 $LNrs { set r [AutreCodeLuc $r1] # Trace N-CA CA-C C-O TraceLigne $liste [lindex $Lx 0] [lindex $Lx 1] ${colN} ${colCA} TraceLigne $liste [lindex $Lx 1] [lindex $Lx 2] ${colCA} ${colC} TraceLigne $liste [lindex $Lx 2] [lindex $Lx 3] ${colC} ${colO} if {$r ne "GLY"} { TraceLigne $liste [lindex $Lx 1] [lindex $Lx 4] ${colC} ${colC} if {$r ne "ALA"} { set Lb1 [lrange $Lx 4 end-1] set Ll1 [lrange $La 4 end-1] set i 5 foreach a1 $Lb1 l1 $Ll1 { set Lb2 [lrange $Lx $i end] set Ll2 [lrange $La $i end] foreach a2 $Lb2 l2 $Ll2 { if {[Dist2 $a1 $a2] <= 3.8025} { TraceLigne $liste $a1 $a2 [CouleurDeAtome $l1] [CouleurDeAtome $l2] } } incr i } } } if {$first} { set first 0 } else { TraceLigne $liste [lindex $Lx 0] $Cx ${colN} ${colC} } set Cx [lindex $Lx 2] } } return } proc File {Commande args} { Wup "Copyright 1999 Raymond Ripp" Wup "Tcl8.2 accepts much more 'file' commands then earlier versions" Wup " I wrote 'File' to try to run with these old versions" if {[info tclversion] >= 8.2} { return [eval file $Commande $args] } else { set Args $args if {[regexp -nocase "win" $tcl_platform(os)]} { if {[lindex $Args 0]=="-force"} { set Args [lreplace $args 0 0 "/Y"] } switch $Commande { "delete" { set Commande "erase" } } } else { if {[lindex $Args 0]=="-force"} { set Args [lreplace $args 0 0 "-f"] } switch $Commande { "delete" { set Commande "rm" } "rename" { set Commande "mv" } "copy" { set Commande "cp" } } } return [eval exec $Commande $Args] } } proc File2Line {File} { return [split [File2Text $File] "\n"] } proc File2Text {File} { if {![file exists $File]} {return} set f [open $File r] set Text [read -nonewline $f] close $f return $Text } proc FileAbsent {Fichier} { if {[FileExists $Fichier]} { return 0 } else { return 1 } } proc FileAttributeNode {} { set FileDw "/genomics/link/STRING_DW/STRING/10090" set FileUp "/genomics/link/STRING_UP/STRING/10090" set i 0 foreach Dw [LesLignesDuFichier $FileDw] { incr i set PNDw [PreferedNameStringFromProteins $Dw] if {[regexp "^ENS" $PNDw]} { set GnFromEnsembl [GnDesFromEnsembl $PNDw peptide Mus_musculus Gn] if {$GnFromEnsembl!=""} { set PNDw "$PNDw/$GnFromEnsembl" } else { set DesFromEnsembl [GnDesFromEnsembl $PNDw peptide Mus_musculus Des] if {$DesFromEnsembl!=""} {set PNDw "$PNDw/$DesFromEnsembl"} } } Espionne "$i $Dw $PNDw DW" set Ligne "$Dw\t$PNDw\tDW" lappend LesLignes $Ligne } foreach Up [LesLignesDuFichier $FileUp] { incr i set PNUp [PreferedNameStringFromProteins $Up] if {[regexp "^ENS" $PNUp]} { set GnFromEnsembl [GnDesFromEnsembl $PNUp peptide Mus_musculus Gn] if {$GnFromEnsembl!=""} { set PNUp "$PNUp/$GnFromEnsembl" } else { set DesFromEnsembl [GnDesFromEnsembl $PNUp peptide Mus_musculus Des] if {$DesFromEnsembl!=""} {set PNUp "$PNUp/$DesFromEnsembl"} } } Espionne "$i $Up $PNUp UP" set Ligne "$Up\t$PNUp\tUP" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "/genomics/link/STRING_DW/STRING_DWUP/AttributeNode" } proc FileBilan {Liste} { Espionne "Creation du fichier BilanGeneral" set file {} if { ! [file exists "[RepertoireDuGenome]/Bilan/Summary"]} { File mkdir [RepertoireDuGenome]/Bilan/Summary } lappend file "SU;Nb of orthologs;Nb of Pfam;Nb of PDB;Nb of Interaction" foreach fichier $Liste { set n [split $fichier "/"] set filename [lindex $n [llength $n]-1] append line "$filename;" #Espionne "file: $filename" #modification ne pas prendre se fichier pas complet (ou faux) utiliser les fichiers du repertoires NewTfasDesCopains #set nbOrtho [expr [comptNbOrtho "[RepertoireDuGenome]/OrthoResult/$filename.fasta"] -1] set nbOrtho [expr [comptNbOrtho "[RepertoireDuGenome]/NewTfasDesCopains/$filename"] -1] append line "$nbOrtho;" set nbPfam [NBPfam "[RepertoireDuGenome]/macsimXml/$filename"] append line "$nbPfam;" set nbPDB [NbPdb [RepertoireDuGenome]/pdb/$filename] append line "$nbPDB;" #Resourdre le probleme des nomns de fichier pour String... corresponds pas aux codes utiliser actulement PUZ... #comment connaitre le nom du repertoire dans StringRep... set rep [glob -directory [RepertoireDuGenome]/StringRep *] foreach re $rep { #Espionne "$re/$filename" set nbInt [NbInt $re/$filename] append line "$nbInt;" } lappend file $line set line "" } set fileResult "[RepertoireDuGenome]/Bilan/Summary/bilan.csv" SauveLesLignes $file dans $fileResult } proc FileBilanPourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set r [glob -directory $directory *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } lappend listSeq $fichier FinPasTouche $f } FileBilan $listSeq } proc FileDBTSS {Nom NameRepTFA {IdMin 0.3} {Expect 0.001} {NbSubject 20} {Filter F}} { ###Execute la recherche dans DBTSS sur la sequence d'un fichier TFA set FileTFA "[RepertoireDuGenome]/$NameRepTFA/$Nom" if {![file exists $FileTFA]} { return } set FileDBTSS "$FileTFA.DBTSS" FileDBTSSSearches $FileTFA $FileDBTSS $IdMin $Expect $NbSubject $Filter return } proc FileDBTSS2DBBlast {} { ###Conversion des fichiers hspromoter.seq et mmpromoter.seq de DBTSS en fichiers .tfas### ###Insertion de l'info organisme dans l'entete de la sequence, HSA ou MMU### set LesSequencesTFAs {} foreach FichiersSeqDBTSS [DBTSSDir "Seq"] { Espionne $FichiersSeqDBTSS set NameFile [file tail $FichiersSeqDBTSS] if {[regexp "^mm" $NameFile]} { set Org "MMU" set Organism "Mus musculus" } elseif {[regexp "^hs" $NameFile]} { set Org "HSA" set Organism "Homo sapiens" } else { set Org "UNK" set Organism "Unknown unknown" } Espionne "$FichiersSeqDBTSS $Organism $Org" set F [open $FichiersSeqDBTSS] while {[gets $F Ligne]>=0} { set LesInfos [split $Ligne "\t" ] set Entete [string trim [lrange $LesInfos 0 8]] #Espionne $Entete if {[regexp -nocase {^>([0-9_a-z]+)} $Entete tmp Access]} { regsub ">$Access" $Entete ">$Org:$Access $Access" Entete } #Espionne $Entete set Seq [string trim [lindex $LesInfos 9]] set SeqTFA [SequenceFormatTFA $Seq $Entete] #Espionne $SeqTFA lappend LesSequencesTFAs $SeqTFA } close $F } if {$LesSequencesTFAs == {}} {return} Sauve [join $LesSequencesTFAs "\n"] dans [DBTSSDir "TFAs"] TFAs2DB [DBTSSDir "TFAs"] return } proc FileDBTSSPourTous {NameRepTFA {LesNoms ""} {IdMin 0.3} {Expect 0.001} {NbSubject 20} {Filter F}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne "$Nom -> DBTSS searches" FileDBTSS $Nom $NameRepTFA $IdMin $Expect $NbSubject $Filter } return } proc FileDPC2FileGO {FichierDPC {FichierGODesDPC ""}} { if {![file exists $FichierDPC]} {Warne "$FichierDPC does not exist";return ""} set TexteOnto "" set F [open $FichierDPC] while {[gets $F Ligne]>=0} { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} if {[regexp "^Number of clusters" $Ligne]} {continue} if {[regexp {^Cluster [0-9]*} $Ligne]} {scan $Ligne "%s %d" Clust nClust;continue} scan $Ligne "%s" Access set LesGO [Access2GO $Access] if {$LesGO == {} } { set Texte "$nClust\t$Access\tNoOntologyFound\n" Espionne $Texte append TexteOnto $Texte } else { foreach GO $LesGO { set Type [Onto $GO Type] set Definition [lindex [Onto $Type $GO LesDefinitions] 0] set Ancetres [join [TousLesAncetresOntologiques $Type $GO] "\t"] set Texte "$nClust\t$Access\t$Type\t$GO\t$Definition\t$Ancetres\n" Espionne $Texte append TexteOnto $Texte } } } close $F if {$FichierGODesDPC != ""} { Espionne $TexteOnto Sauve $TexteOnto dans $FichierGODesDPC } else { if {[OuiOuNon "Would You want to save these results ?"]} { set FichierGODesDPC "${FichierDPC}.ontology" if {[OuiOuNon "Would You want to save these results in $FichierGODesDPC ?"]} { Sauve $TexteOnto dans $FichierGODesDPC } else { FaireLire "Choose the name file" set FichierGODesDPC [Entre $FichierGODesDPC] if {![regexp -nocase {[0-9a-z]} $FichierGODesDPC]} {return $TexteOnto} Sauve $TexteOnto dans $FichierGODesDPC } } } return $TexteOnto } proc FileEPDIdOrga {{FileEPDTFAs ""} {FileOUT ""}} { ### Creation du fichier EPD_Id2Orga2Organism2OrganismLong dans [EPDDir ""] ### AskEPDOrgas unset # FileEPDTFAs == db avec les seq TFA de EPD if {$FileEPDTFAs == ""} {set FileEPDTFAs [EPDDir "TFAs" ]} if {$FileOUT == ""} {set FileOUT [EPDDir "EPDIdOrga"]} set LesInfos {} # Pour chaque access du fichier TFAs foreach EPDId [LaSequenceDuTFAs $FileEPDTFAs "LaListeDesAccess"] { # Extraction du TFA correspondant set TFA [LaSequenceDuTFAs $FileEPDTFAs $EPDId] if {$TFA == ""} {continue} set Entete [EnteteDuTexteTFA $TFA] set LEntete [split $Entete " "] set EPDId [regsub ">" [lindex $LEntete 0] ""] regexp -nocase {^[^\(\[]+} [lindex $LEntete 2] OrgaEPDId set OrganismEPDId [AskEPDOrgas EPDOrga $OrgaEPDId EPDOrganism ] set OrganismLongEPDId [AskEPDOrgas EPDOrga $OrgaEPDId EPDOrganismLong] lappend LesInfos "$EPDId\t$OrgaEPDId\t$OrganismEPDId\t$OrganismLongEPDId" #Espionne "$EPDId\t$OrgaEPDId\t$OrganismEPDId\t$OrganismLongEPDId" } #Espionne [join $LesInfos "\n"] AskEPDOrgas unset Sauve [join $LesInfos "\n"] dans $FileOUT return } proc FileEPDOrgas {{FileEPDOrgasTxt ""} {FileOUT ""}} { ### Creation du fichier EPD_Orga2Organism2OrganismLong dans [EPDDir ""] ### #FileEPDOrgasTxt == EPD_Species_Codes.txt qui est fait a la main if {$FileEPDOrgasTxt == ""} {set FileEPDOrgasTxt [EPDDir ""]/EPD_Species_Codes.txt} if {$FileOUT == ""} {set FileOUT [EPDDir "EPDOrgas"]} set LesInfos {} foreach Ligne [LesLignesDuFichier $FileEPDOrgasTxt] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne " "] set EPDOrga [lindex $LaLigne 0] set EPDOrganism [join [lrange $LaLigne 1 2 ]] set EPDOrganismLong [join [lrange $LaLigne 1 end]] lappend LesInfos "$EPDOrga\t$EPDOrganism\t$EPDOrganismLong" } #Espionne [join $LesInfos "\n"] Sauve [join $LesInfos "\n"] dans $FileOUT return } proc FileExists {Fichier} { return [file exists $Fichier] } proc FileFirstEF {Nom NameRepTFA {IdMin 0.3} {Expect 0.001} {NbSubject 20} {Filter F}} { ###Execute la recherche dans FirstEF sur la sequence d'un fichier TFA set FileTFA "[RepertoireDuGenome]/$NameRepTFA/$Nom" if {![file exists $FileTFA]} { return } set FileFirstEF "$FileTFA.FirstEF" FirstEF $FileTFA $FileFirstEF return } proc FileFirstEFPourTous {NameRepTFA {LesNoms ""} {IdMin 0.3} {Expect 0.001} {NbSubject 20} {Filter F}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { Espionne "$Nom -> FirstEF searches" FileFirstEF $Nom $NameRepTFA $IdMin $Expect $NbSubject $Filter } return } proc FileInfosDuFileTFAs {FileTFAs FileOUT} { ### Creation d'un fichier contenant l'ensemble des infos du fileTFAs ### ### Ces infos sont: SeqName Id SeqLength Entete ### if {![file exists $FileTFAs]} {Espionne "FileTFAs $FileTFAs does not exists" ;return} set LesInfos {} set i 0 foreach TFA [LesTFADuFileTFAs $FileTFAs] { if {$TFA == ""} {continue} incr i ### 1- Extraction de l'information du FileTFAs ### set Entete [TFA2Header $TFA ] set Seq [TFA2SEQ $TFA ] #set LesRes [split $Seq "" ] set TailleSeq [string length [string trim $Seq]] ### Avant le scan car si le scan ne donne rien la variable Id n'est pas creee set TFAEntete ">$Entete" set Id $Entete scan $TFAEntete ">%s" Id set SeqName "Seq$i" ### 2- Stockage de l'information du FileTFAs dans le FileOUT ### #set Infos "$SeqName\t$Entete\t$Id\t$Seq\t$TailleSeq\t$LesRes" set Infos "$SeqName\t$Id\t$TailleSeq\t$Entete" lappend LesInfos $Infos } SaveInFile [join $LesInfos "\n"] $FileOUT return } proc FileMaskedAndReMasked {Nom} { global RepertoireDuGenome set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" set FichierTFAMasque "$RepertoireDuGenome/nucmask/$Nom.m" set FichierTFAReMasque "$RepertoireDuGenome/nucmask/$Nom.rm" set FichierTFAMasqueEtReMasque "$RepertoireDuGenome/nucmask/$Nom.mrm" if { ! [file exists $FichierTFA ] || ! [file exists $FichierTFAMasque ] || ! [file exists $FichierTFAReMasque ] || ! [file exists $FichierTFAMasqueEtReMasque]} { return "" } AfficheVariable "[ContenuDuFichier $FichierTFA]\n [ContenuDuFichier $FichierTFAMasque]\n [ContenuDuFichier $FichierTFAReMasque]\n [ContenuDuFichier $FichierTFAMasqueEtReMasque]" } proc FileMoi {{Quoi ""} {Qui ""} {Comment ""}} { if {[regexp " " $Quoi] && $Qui==""} { set Qui [split $Quoi " "] set Quoi "SearchList" } PourWscope 1 set AboutRetinalGene 0 set LesRefText {} if {$Quoi=="InterrogeCopainsDesCompulsory"} { set TexteHtml [InterrogeCopainsDesCompulsory $Qui] if {$TexteHtml!=""} { return $TexteHtml } } if {($Quoi=="" && $Qui=="") || $Quoi=="BaList" || $Quoi=="SearchList" || $Quoi=="GscopeIdsList" || $Quoi=="RetinalGeneList"} { if {$Quoi=="BaList"} { set Liste [BaList $Qui] set Quoi "" set Qui "" } elseif {$Quoi=="GscopeIdsList"} { set Liste [split $Qui " "] set Quoi "" set Qui "" } elseif {$Quoi=="SearchList"} { set Liste [RepereBox $Qui "AllPlease"] set Quoi "" set Qui "" } elseif {$Quoi=="RetinalGeneList"} { set Liste [RetinalGene "ListAll" "GscopeIds"] set AboutRetinalGene 1 set Quoi "" set Qui "" } else { set Liste [ListeDesPABs] } if {[PourWscope]} { foreach Nom $Liste { if {[OnTraiteSpine]} { set SurNom [SpineID $Nom] } elseif {$AboutRetinalGene} { set SurNom [RetinalGene "GeneNameOf" $Nom] } else { set SurNom [Alias $Nom] if {$SurNom==""} { set SurNom [ExtraitInfo $Nom "ValiGN"] } } set Info "$Nom\t$SurNom\t[string range [DefinitionRapide $Nom] 0 80]" if {[OnTraiteEVImm] || [OnTraiteGGmm] || [OnTraiteGGWmm] || [OnTraiteEVIhs] || [OnTraiteGGhs] || [OnTraiteGGWhs]} { set RRC [RecapitulatifRetChipCourt $Nom] if {$RRC!=""} { regsub -all ";" $RRC " " RRC } lappend LesRefText "[WscopeScience]&GeneIdentityCard&$Nom" $Info } else { lappend LesRefText "[WscopeScience]&FileMoi&$Nom" $Info } } if {$Comment=="TelQuel"} { return [join $LesRefText "\n"] } return [Html_ListOfRefs $LesRefText "

Please click on a [PreFixe]

" "PleaseSplitText"] } foreach Nom $Liste { set Info [format "%s %-8s %s" $Nom [Alias $Nom] [DefinitionRapide $Nom]] lappend LesNoms $Nom lappend LesInfos $Info } set Qui [ChoixParmiJoli $LesNoms {} $LesInfos] if {$Qui==""} { return "" } return [FileMoi $Qui] } if {[EstUnPAB $Quoi]} { set W $Qui set Qui $Quoi set Quoi $W } set PosMacsim 0 if {$Quoi==""} { if {[PourWscope]} { DerniereVisite $Qui set MacsimHtml 0 set LesRefText {} LConcat LesRefText [WscopeLinks "FileMoi" $Qui] set PosMacsim [llength $LesRefText] foreach Rep [lsort [LesRepertoiresPossiblesPour $Qui "HtmlAussi" "Vite"]] { if {$Rep=="macsimHtml"} { set MacsimHtml 1 } set DescDuRepertoire [DescDuRepertoire $Rep] lappend LesRefText "[WscopeScience]&FileMoi&$Rep&$Qui" "$Rep\t$DescDuRepertoire" if {$Rep=="macsimXml" } { set Rep "macsimHtml" set DescDuRepertoire [DescDuRepertoire $Rep] set R "[WscopeScience]&FileMoi&$Rep&$Qui" set T "$Rep\t$DescDuRepertoire" lappend LesRefText $R $T set LesRefText [linsert $LesRefText $PosMacsim $R $T] set RepJal "macsimJalview" set DescDuRepertoire [DescDuRepertoire $RepJal] set R "[WscopeScience]&JalviewHtml&$Qui" set T "$RepJal\t$DescDuRepertoire" lappend LesRefText $R $T set LesRefText [linsert $LesRefText $PosMacsim $R $T] } if {[regexp "phylo" $Rep] } { set Rep "AtvOf$Rep" set DescDuRepertoire [DescDuRepertoire $Rep] lappend LesRefText "[WscopeScience]&ATV&$Qui" "$Rep\t$DescDuRepertoire" } if {$Rep=="msf" } { set Rep "msfToHtml" set DescDuRepertoire [DescDuRepertoire $Rep] lappend LesRefText "[WscopeScience]&FileMoi&$Rep&$Qui" "$Rep\t$DescDuRepertoire" continue } if {[regexp "msf" $Rep] } { set RepOri $Rep set Rep "msfToHtml" set DescDuRepertoire [DescDuRepertoire $Rep] lappend LesRefText "[WscopeScience]&FileMoi&$Rep&$RepOri/$Qui" "${RepOri}ToHtml\t$DescDuRepertoire" } } if {$LesRefText=={}} { return "I didn't found any file about $Qui" } return [Html_ListOfRefs $LesRefText "

$Qui [Alias $Qui] [DefinitionRapide $Qui]
please click

" "PleaseSplitText"] } set Quoi [ChoixParmi [LesRepertoiresPossiblesPour $Qui]] if {$Quoi==""} { return "" } } if {$Quoi!="" && $Qui==""} { return "Sorry Target not available" } if {$Comment==""} { set Comment "EnHTML" } set Titre "[file tail [RepertoireDuGenome]]/$Quoi/$Qui" set EstUnJpg 0 set EstDejaEnHtml 0 set Probable "[RepertoireDuGenome]/$Quoi/$Qui" while 1 { if {[regexp {^[0-9][0-9][0-9]$} $Quoi] && [string equal [string range [Date] 6 8] $Quoi] } { if {[file exists $Qui]} { set Probable $Qui } } if {[file exists $Probable]} { set EstDejaEnHtml [regexp -nocase {\.html?$} $Probable] break } if {[file exists "$Probable.html"]} { append Probable ".html" set EstDejaEnHtml 1 break } if {$Quoi=="^AtvOf"} { set TexteHtml [ATV $Qui] if {$TexteHtml!=""} { return $TexteHtml } } if {$Quoi=="msfToHtml"} { set TexteHtml [HtmlFromMsf $Qui] if {$TexteHtml!=""} { return $TexteHtml } } if {$Quoi=="macsimHtml"} { set TexteHtml [HtmlFromXmlMacsim $Qui] if {$TexteHtml!=""} { return $TexteHtml } } if {[regexp "jpg_of_" $Quoi] } { set Type [StringApres "jpg_of" dans $Quoi] set ProPro "$Probable$Type.jpg" if {[FileExists $ProPro]} { append Probable "$Type.jpg" set EstUnJpg 1 break } } if {[regexp -nocase ".jpg$" $Probable] } { set EstUnJpg 1 break } return "Sorry $Quoi/$Qui does not exist or cannot be created" } if { [regexp -nocase "TelQuel" $Comment] || $EstDejaEnHtml } { set R [ContenuDuFichier $Probable] if { ! $EstDejaEnHtml & [regexp -nocase "AvecPre" $Comment] } { return "
$R
" } return $R } if {$EstUnJpg} { return [Html_DuFichierJpg $Probable] } if {[EstUnPAB $Qui]} { return [SeeAby $Quoi $Qui] } return [Html_DuTexteTelQuel [ContenuDuFichierAvecReferences $Probable] $Titre] return [Html_DuTexteTelQuel [ContenuDuFichier $Probable] $Titre] } proc FileMoiAlias {{Qui ""} {Quoi ""} {Comment ""}} { #rR Attention Qui Quoi et non pas Quoi Qui" if {[set Nom [NomDuAlias $Qui]]==""} { return [Html_DuTexteTelQuel "Sorry, I found nothing about $Qui"] } return [FileMoi $Quoi $Nom $Comment] } proc FileMoiRetinalGene {{Qui ""} {Quoi ""} {Comment ""}} { #rR Attention Qui Quoi et non pas Quoi Qui" if {[set Nom [lindex [RetinalGene GscopeIdsOf $Qui] 0]]==""} { return [Html_DuTexteTelQuel "Sorry, I found nothing about $Qui"] } return [FileMoi $Quoi $Nom $Comment] } proc FileMoiSearchList {{Qui ""} {Comment ""}} { return [FileMoi "SearchList" $Qui $Comment] } proc FileMoiSignalIntensityImages {Nom} { set Titre "All images for Signal Intensityof $Nom" Html_ZeroToBody Html_Banner Wscope Html_Append $Titre foreach FicImage [glob -nocomplain "[RepertoireDuGenome]/transcriptomique/SignalIntensityImages/$Nom*.png"] { set Queue [file tail $FicImage] Html_Append "
" Html_Append "" } return [Html_Get] } proc FileNom2Cluster2Access2Def2Expressions_DDdata {FichierCorrespondances RepData ITini} { #################################################################################### ### Aide a l'elaboratiuon du fichier Orf2Cluster2Access2Def2Expression ### ### pour le projet Gscope ICBP_TOPO a partir des donnees de differential display ### #################################################################################### if {![file exists $FichierCorrespondances]} {Espionne "Warning: Matching file $FichierCorrespondances does not exists" ; return } set F [open $FichierCorrespondances] set LesInfos {} while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Clone [lindex $LaLigne 0] set FileSeq [lindex $LaLigne 1] set Name [lindex $LaLigne 2] set FileTFA [lindex $LaLigne 3] #Espionne "Clone: $Clone\nFileSeq: $FileSeq\nName: $Name\nFileTFA: $FileTFA" if {$ITini< 1000} {set Nom "IT0$ITini"} else {set Nom "IT$ITini"} if {[regexp "ICBP_D" $Name]} {set Cluster "ICBP_D"} if {[regexp "ICBP_U" $Name]} {set Cluster "ICBP_U"} if {[regexp "TOPO_D" $Name]} {set Cluster "TOPO_D"} if {[regexp "TOPO_U" $Name]} {set Cluster "TOPO_U"} #Espionne "$Name $Cluster" set Def "$Nom $Name $Clone" if {$Cluster == "ICBP_D"} {set LesExpressions "1\t-1\t-1\t-1"} if {$Cluster == "ICBP_U"} {set LesExpressions "-1\t1\t-1\t-1"} if {$Cluster == "TOPO_D"} {set LesExpressions "-1\t-1\t1\t-1"} if {$Cluster == "TOPO_U"} {set LesExpressions "-1\t-1\t-1\t1"} lappend LesInfos "$Nom\t$Cluster\t$Clone\t$Def\t$LesExpressions" incr ITini #EspionneL $LesInfos } set FileOUT "$RepData/Nom2Cluster2Access2Def2Expressions_$Cluster" Sauve [join $LesInfos "\n"] dans $FileOUT return } proc FileTFADNA2Prot {FileTFA FileOut {Frame1ou2ou3 Frame1}} { if {![file exists $FileTFA]} {return} set TFA [File2Text $FileTFA] set TFAProt [TFADNA2Prot $TFA $Frame1ou2ou3] Sauve $TFAProt dans $FileOut return $TFAProt } proc FileTFAsDesGenesStat3AComparer_Gretta {FileGene FileTFAsOUT} { set LesTFAs {} set F [open $FileGene] set i 0 while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] set Ligne [split $Ligne "\t"] set Gene [lindex $Ligne 0] Espionne $Gene if {[info exists GetzOut]} {unset GetzOut} set Commande "[ProgPathway getz] \" \( \\\[protein-gen:$Gene*\\\] & \\\[protein-org:Mus musculus\\\] \)>\\\[genbankfull-des:mRNA\\\] \" -f seq -sf fasta" catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut] || $GetzOut == ""} { set Commande "[ProgPathway getz] \" \( \\\[protein-gen:$Gene*\\\] & \\\[protein-org:Rattus norvegicus\\\] \)>\\\[genbankfull-des:mRNA\\\] \" -f seq -sf fasta" catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut] || $GetzOut == ""} { Espionne "$Gene Not found" lappend LesTFAs ">$Gene Stat3 No sequence found" continue } } set i 0 foreach TFA [split $GetzOut ">"] { set TFA [string trim $TFA] if {$TFA == ""} {continue} incr i set TFA ">$Gene\$$i Stat3 $TFA" lappend LesTFAs $TFA } } close $F Sauve [join $LesTFAs "\n"] dans $FileTFAsOUT return } proc FilesPromAn {FileContigTFA DebutFirstExonPrediction FinFirstExonPrediction SensFirstExonPrediction FileAllPromAn FileSelectedPromAn {BorneDebutRechercheMotifs 2500} {BorneFinRechercheMotifs 500} {LesPattern ""} {Access ""} {Organism "Homo sapiens"} {IdMin 0.3} {Expect 0.001} {NbSubject 20} {Filter F} {nVar 0.05}} { ##### Creation du fichier d'analyse de promoteur a partir d'une séquence d'ARNm +/- x pb ##### #LesInfos : Type Debut Fin Sens TSSLoc TSSDist Identity Name Orga LesInfosSup if {![file exists $FileContigTFA]} { Espionne "$FileContigTFA does not exists" ; return } ############################### Sequence genomique ini et premier exon ############################### ### 1- Informations sur la sequence genomique de depart Espionne "GenomicSequence" PromAnPanel ini $FileAllPromAn "GenomicSequence" PromAnPanel ini $FileSelectedPromAn "GenomicSequence" foreach LaLigne [LaSequenceGenomiquePourPromAn $FileContigTFA $DebutFirstExonPrediction $Access $Organism] { PromAnPanel add $FileAllPromAn [join $LaLigne "\t"] PromAnPanel add $FileSelectedPromAn [join $LaLigne "\t"] } ### 2- Informations sur le premier exon provenant de la carte exonique Espionne "FirstExon" PromAnPanel ini $FileAllPromAn "FirstExon" PromAnPanel ini $FileSelectedPromAn "FirstExon" foreach LaLigne [LePremierExonDumRNAPourPromAn $DebutFirstExonPrediction $FinFirstExonPrediction $SensFirstExonPrediction $Access $Organism] { PromAnPanel add $FileAllPromAn [join $LaLigne "\t"] PromAnPanel add $FileSelectedPromAn [join $LaLigne "\t"] ###TSSDeRefFinal = le TSS de reference final suite au 1er exon, DBTSS et EPD pour la selection du meilleur eponine... ###par defaut = celui du 1er exon, le restera si pas de DBTSS et pas de EPD selectionnes set Tab(TSSDeRef,TSSDeRefFinal) [lindex $LaLigne 5] Espionne "First exon, TSSDeRef: [set Tab(TSSDeRef,TSSDeRefFinal)]" } ############################### Localisation du promoteur, du TSS ou du premier exon ############################### ### 3- Information sur les hits DBTSS Espionne "DBTSS" PromAnPanel ini $FileAllPromAn "DBTSS" PromAnPanel ini $FileSelectedPromAn "DBTSS" set nMax 0 set LesLignes {} foreach LaLigne [LesEPDouDBTSSSelectedPourPromAn $FileContigTFA "DBTSS" $IdMin $Expect $NbSubject $Filter $DebutFirstExonPrediction $nVar] { if {$LaLigne == ""} { continue } PromAnPanel add $FileAllPromAn [join $LaLigne "\t"] ### Selection selon le sens if {[lindex $LaLigne 4] == "-"} { continue } ### Calcul de nMax set n [expr [lindex $LaLigne 7] * 1.0 / [TailleSequenceEPDOuDBTSS "DBTSS"]] if {$n > $nMax} {set nMax $n} lappend LesLignes $LaLigne } ### Selection selon nMax set LesSelectedTSSDist {} set LesSelectedLignes {} foreach LaLigne $LesLignes { set n [expr [lindex $LaLigne 7] * 1.0 / [TailleSequenceEPDOuDBTSS "DBTSS"]] if {$n < [expr $nMax * (1 - $nVar)]} { continue } lappend LesSelectedTSSDist [expr abs([lindex $LaLigne 6])] lappend LesSelectedLignes $LaLigne } #### Si plusieurs hits selectionnes, garde au final celui avec la TSSDist minimum foreach SelectedLigne $LesSelectedLignes { if {[expr abs([lindex $SelectedLigne 6])] != [MiniDeLaListe $LesSelectedTSSDist]} { continue } PromAnPanel add $FileSelectedPromAn [join $SelectedLigne "\t"] ###Si une DBTSS est selectionne, le TSSDeRefFinal devient le TSS de DBTSS set Tab(TSSDeRef,TSSDeDBTSS) [lindex $SelectedLigne 5] set Tab(TSSDeRef,TSSDistDeDBTSS) [lindex $SelectedLigne 6] set VATSSDistDeDBTSS [expr abs([set Tab(TSSDeRef,TSSDistDeDBTSS)])] #Espionne "VATSSDistDeDBTSS: $VATSSDistDeDBTSS" set Tab(TSSDeRef,TSSDeRefFinal) [set Tab(TSSDeRef,TSSDeDBTSS)] set Tab(TSSDeRef,$VATSSDistDeDBTSS,TSSLoc) [set Tab(TSSDeRef,TSSDeDBTSS)] break } #Espionne "DBTSS TSSDeRef,TSSDeDBTSS: [set Tab(TSSDeRef,TSSDeDBTSS)]" #Espionne "DBTSS TSSDeRef,TSSDistDeDBTSS: [set Tab(TSSDeRef,TSSDistDeDBTSS)]" #Espionne "DBTSS TSSDeRef,TSSDeRefFinal: [set Tab(TSSDeRef,TSSDeRefFinal)]" #Espionne "DBTSS TSSDeRef,TSSDistDBTSS,TSSLoc: $VATSSDistDeDBTSS [set Tab(TSSDeRef,$VATSSDistDeDBTSS,TSSLoc)]" ### 4- Information sur les hits EPD Espionne "EPD" PromAnPanel ini $FileAllPromAn "EPD" PromAnPanel ini $FileSelectedPromAn "EPD" set nMax 0 set LesLignes {} foreach LaLigne [LesEPDouDBTSSSelectedPourPromAn $FileContigTFA "EPD" $IdMin $Expect $NbSubject $Filter $DebutFirstExonPrediction $nVar] { if {$LaLigne == ""} { continue } PromAnPanel add $FileAllPromAn [join $LaLigne "\t"] ###Selection selon le sens et selon nMax if {[lindex $LaLigne 4] == "-"} { continue } ###Calcul de nMax set n [expr [lindex $LaLigne 7] * 1.0 / [TailleSequenceEPDOuDBTSS "EPD"]] if {$n > $nMax} {set nMax $n} lappend LesLignes $LaLigne } set LesSelectedEPDDist {} set LesSelectedLignes {} foreach LaLigne $LesLignes { set n [expr [lindex $LaLigne 7] * 1.0 / [TailleSequenceEPDOuDBTSS "EPD"]] if {$n < [expr $nMax * (1 - $nVar)]} { continue } lappend LesSelectedEPDDist [expr abs([lindex $LaLigne 6])] lappend LesSelectedLignes $LaLigne } ####Si plusieurs hits selectionnes, garde au final celui avec la EPDDist minimum foreach SelectedLigne $LesSelectedLignes { if {[expr abs([lindex $SelectedLigne 6])] != [MiniDeLaListe $LesSelectedEPDDist]} { continue } PromAnPanel add $FileSelectedPromAn [join $SelectedLigne "\t"] ###Si pas de DBTSS selectionne, le TSS de ref devient celui du EPD selectionne set Tab(TSSDeRef,TSSDeEPD) [lindex $SelectedLigne 5] set Tab(TSSDeRef,TSSDistDeEPD) [lindex $SelectedLigne 6] set VATSSDistDeEPD [expr abs([set Tab(TSSDeRef,TSSDistDeEPD)])] #Espionne "VATSSDistDeEPD: $VATSSDistDeEPD" set Tab(TSSDeRef,$VATSSDistDeEPD,TSSLoc) [set Tab(TSSDeRef,TSSDeEPD)] if {![info exists Tab(TSSDeRef,TSSDeDBTSS)]} { set Tab(TSSDeRef,TSSDeRefFinal) [set Tab(TSSDeRef,TSSDeEPD)] } ###Si DBTSS et EPD selectionnes, le TSSDeRef devient celui le plus proche du TSS initial du 1er exon if {[info exists Tab(TSSDeRef,TSSDeDBTSS)] && [info exists Tab(TSSDeRef,TSSDeEPD)]} { #set TSSDistMin [Mini [set Tab(TSSDeRef,TSSDistDeDBTSS)] [set Tab(TSSDeRef,TSSDistDeEPD)]] set TSSDistMin [Mini $VATSSDistDeDBTSS $VATSSDistDeEPD] #Espionne "TSSDistMin: $TSSDistMin" set Tab(TSSDeRef,TSSDeRefFinal) [set Tab(TSSDeRef,$TSSDistMin,TSSLoc)] } break } #Espionne "EPD TSSDeRef,TSSDeEPD: [set Tab(TSSDeRef,TSSDeEPD)]" #Espionne "EPD TSSDeRef,TSSDistDeEPD: [set Tab(TSSDeRef,TSSDistDeEPD)]" #Espionne "EPD TSSDeRef,TSSDistEPD,TSSLoc: $VATSSDistDeEPD [set Tab(TSSDeRef,$VATSSDistDeEPD,TSSLoc)]" ###Determination de la localisation du TSS de reference set TSSDeRefLoc [set Tab(TSSDeRef,TSSDeRefFinal)] Espionne "TSSDeRefLoc: $TSSDeRefLoc" ### 5- Information sur la localisation du premier exon selon FirstEF Espionne "FirstEF" PromAnPanel ini $FileAllPromAn "FirstEF" PromAnPanel ini $FileSelectedPromAn "FirstEF" PromAnPanel ini $FileAllPromAn "FirstEFCpG" PromAnPanel ini $FileSelectedPromAn "FirstEFCpG" set LesFirstEFTypes {} foreach Ligne [LesFirstEFSelectedPourPromAn $FileContigTFA $DebutFirstExonPrediction] { set FirstEFType [lindex $Ligne 0] if {![info exists Tab(FirstEFType,$FirstEFType)]} { set Tab(FirstEFType,$FirstEFType) 1 lappend LesFirstEFTypes $FirstEFType } } foreach FirstEFType $LesFirstEFTypes { Espionne "FirstEFType: $FirstEFType" set Tab($FirstEFType,LesSensSelectedLignes) {} set Tab($FirstEFType,MinTSSDeRefDist) 1e200 foreach Ligne [LesFirstEFSelectedPourPromAn $FileContigTFA] { if {[lindex $Ligne 0] != $FirstEFType} {continue} PromAnPanel add $FileAllPromAn [join $Ligne "\t"] ###Selection selon le sens, elimination des "-" if {[lindex $Ligne 4] == "-"} { continue } lappend Tab($FirstEFType,LesSensSelectedLignes) $Ligne ###Calcul de la distance minimale du TSS predit par rapport a la TSSDeRefLoc deduite du protocole, DBTSS et EPD set Tab($FirstEFType,TSSDeRefDist) [expr abs([lindex $Ligne 5] - $TSSDeRefLoc)] if {[set Tab($FirstEFType,TSSDeRefDist)] < [set Tab($FirstEFType,MinTSSDeRefDist)]} {set Tab($FirstEFType,MinTSSDeRefDist) [set Tab($FirstEFType,TSSDeRefDist)]} } Espionne "MinTSSDeRefDist: [set Tab($FirstEFType,MinTSSDeRefDist)]" } foreach FirstEFType $LesFirstEFTypes { foreach SensSelectedLigne [set Tab($FirstEFType,LesSensSelectedLignes)] { set TSSDeRefDist [expr abs([lindex $Ligne 5] - $TSSDeRefLoc)] if {$TSSDeRefDist != [set Tab($FirstEFType,MinTSSDeRefDist)]} {continue} PromAnPanel add $FileSelectedPromAn [join $SensSelectedLigne "\t"] break } } ### 6- Information sur la localisation du TSS selon Eponine Espionne "Eponine" PromAnPanel ini $FileAllPromAn "Eponine" PromAnPanel ini $FileSelectedPromAn "Eponine" set LesSensSelectedLignes {} set MinTSSDeRefDist 1e200 set LEponineSelected {} foreach Ligne [LesEponineSelectedPourPromAn $FileContigTFA $DebutFirstExonPrediction] { PromAnPanel add $FileAllPromAn [join $Ligne "\t"] ###Selection selon le sens, elimination des "-" if {[lindex $Ligne 4] == "-"} { continue } lappend LesSensSelectedLignes $Ligne ###Calcul de la distance minimale du TSS predit par rapport a la TSSDeRefLoc deduite du protocole, DBTSS et EPD set TSSDeRefDist [expr abs([lindex $Ligne 5] - $TSSDeRefLoc)] if {$MinTSSDeRefDist <= $TSSDeRefDist} {continue} set LEponineSelected $Ligne } if {$LEponineSelected != {}} { PromAnPanel add $FileSelectedPromAn [join $LEponineSelected "\t"] } ### 7- Information sur la structure du gene selon GenScan Espionne "GenScan" PromAnPanel ini $FileAllPromAn "GenScan" PromAnPanel ini $FileSelectedPromAn "GenScan" foreach LaLigne [LesGenScanSelectedPourPromAn $FileContigTFA $DebutFirstExonPrediction] { PromAnPanel add $FileAllPromAn [join $LaLigne "\t"] ###Selection selon le sens, elimination des "-" if {[lindex $LaLigne 4] != "-"} { PromAnPanel add $FileSelectedPromAn [join $LaLigne "\t"] } } ############################### Localisation de motifs stricts et de leur reverse ############################### ### 8- Information sur les pattern exactement localises Espionne "Pattern" set LesLignes {} foreach Pattern $LesPattern { PromAnPanel ini $FileAllPromAn $Pattern PromAnPanel ini $FileSelectedPromAn $Pattern foreach LaLigne [LesPatternSelectedPourPromAn $FileContigTFA $Pattern $DebutFirstExonPrediction] { PromAnPanel add $FileAllPromAn [join $LaLigne "\t"] ###Selection des motifs entre -$BorneDebutRechercheMotifs/+$BorneFinRechercheMotifs par rapport au TSS de ref determine par protocole Freddy sans tenit compte de DBTSS ni de EPD set LocDebutRechercheMotifs [expr $DebutFirstExonPrediction - $BorneDebutRechercheMotifs] set LocFinRechercheMotifs [expr $DebutFirstExonPrediction + $BorneFinRechercheMotifs] set Debut [lindex $LaLigne 2] set Fin [lindex $LaLigne 3] if {$Debut < $LocDebutRechercheMotifs || $Fin > $LocFinRechercheMotifs} {continue} PromAnPanel add $FileSelectedPromAn [join $LaLigne "\t"] } } ############################### TFBS (Transcription Factor Binding Site) search ############################### ### 9- Information sur les TFBS localises par le programme Match sur la DB Transfac professional Espionne "Match" set MinTSSDeRefDist 1e200 set LesProfile [list MinFN MinFNGood MinFP MinFPGood MinSum MinSumGood] ###Recherche de TFBS entre $DebutMatchSeq et $FinMatchSeq par rapport au TSS determine par protocole Freddy # Donc Masking de la sequence TFA ini au dela de$DebutMatchSeq et $FinMatchSeq -> seq d'entree de Match # # -1 car si DebutMatchSeq = 2500, on masque jusqu'a la base precedente # +1 car masque par ex a partir de 101 si $FinMatchSeq = 100 set DebutMatchSeq $BorneDebutRechercheMotifs set FinMatchSeq $BorneFinRechercheMotifs set FinRegionGaucheAMasquer [expr $DebutFirstExonPrediction - $DebutMatchSeq -1] set DebutRegionDroiteAMasquer [expr $DebutFirstExonPrediction + $FinMatchSeq +1] set TailleSeqTFA [TailleDeLaSequenceDuFichierTFA $FileContigTFA] set LesRegionsAMasquer [list [list 1 $FinRegionGaucheAMasquer] [list $DebutRegionDroiteAMasquer $TailleSeqTFA]] #Masking set FileTFAMatchMasked "$FileContigTFA.Match.masked" MasqueLesRegionsDuFichierTFA $FileContigTFA $FileTFAMatchMasked $LesRegionsAMasquer "N" foreach Profile $LesProfile { Espionne "Match -> $Profile" PromAnPanel ini $FileAllPromAn "Match_$Profile" PromAnPanel ini $FileSelectedPromAn "Match_$Profile" foreach Ligne [LesMatchTFBSSelectedPourPromAn $FileTFAMatchMasked $Profile $DebutFirstExonPrediction] { PromAnPanel add $FileAllPromAn [join $Ligne "\t"] PromAnPanel add $FileSelectedPromAn [join $Ligne "\t"] } } return } proc FilesPromAnPourTous {BorneDebutRechercheMotifs BorneFinRechercheMotifs {LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [MorceauxChoisis [ListeDesPABs]]} set RepContigTFA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_promoter" set RepEM "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap" InterrogeFichierExonicMap unset InterrogeBestProteinAndmRNAForeachOrga unset set LesPattern [list "TATAAA" "ATTGG"] set Organism "Homo sapiens" set IdMin 0.3 set Expect 0.001 set NbSubject 20 set Filter F set nVar 0.05 foreach Nom $LesNoms { set FileContigTFA "$RepContigTFA/$Nom" set FileEM "$RepEM/$Nom" set FileAllPromAn "$RepContigTFA/$Nom.AllPromAn" set FilePromAn "$RepContigTFA/$Nom.PromAn" if {[file exists $FilePromAn]} {continue} if {![file exists $FileEM] || ![file exists $FileContigTFA]} {continue} set Access [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme $Organism "mRNA" Access] Espionne "$Nom -> PromAn $Access $Organism" set Entete [EnteteDuFichierTFA $FileContigTFA] set DebutFirstExon 10000 regexp {BeforeStart ([0-9]+)} $Entete tmp DebutFirstExon set DebutFirstExon [expr $DebutFirstExon + 1] set DQ [InterrogeFichierExonicMap $FileEM Rang 1 ExonArea 1 DQ] set FQ [InterrogeFichierExonicMap $FileEM Rang 1 ExonArea 1 FQ] set TailleExon [expr $FQ - $DQ + 1] set FinFirstExon [expr $DebutFirstExon + $TailleExon - 1] set Sens "+" FilesPromAn $FileContigTFA $DebutFirstExon $FinFirstExon $Sens $FileAllPromAn $FilePromAn $BorneDebutRechercheMotifs $BorneFinRechercheMotifs $LesPattern $Access $Organism $IdMin $Expect $NbSubject $Filter $nVar } InterrogeFichierExonicMap unset InterrogeBestProteinAndmRNAForeachOrga unset return } proc FilesTFADuDBTSSTFAs {FileTFAs} { ### Creation d'autant de fichier TFA qu'il y a de seq dans un fichier TFAs ### ### Utilisation: seqlab ne prend pas de fichier tfas... ### ###attention, ajouter en automatique le mkdir!!!### if {[regexp ".DBTSS.tfa" $FileTFAs]} { set Rep [regsub ".DBTSS.tfas" $FileTFAs "" ] #Espionne "Rep $Rep" } foreach TFA [split [ContenuDuFichier $FileTFAs] ">"] { if {$TFA == ""} {continue} set TFA ">$TFA" set Entete [EnteteDuTexteTFA $TFA] #Espionne $Entete set Id [lindex $Entete 0] regsub ">" $Id "" Id #Espionne $Id set FileOUT "$Rep/$Id.tfa" Espionne $FileOUT Sauve $TFA dans $FileOUT } return } proc FilesTFADuFileTFAs {FileTFAs} { foreach TFA [LesTFADuFileTFAs $FileTFAs] { set Entete [TFA2Header $TFA] regsub ">" $Entete "" Entete set FileTFA "$Entete.tfa" SaveInFile $TFA $FileTFA Espionne "$FileTFA\n$TFA" } return } proc FillTheBox {aT i j k an} { upvar $aT T foreach v [set ::SpS($an)] { lassign $v a b c set T([expr {$i+$a}],[expr {$j+$b}],[expr {$k+$c}]) 1 } return if {0} { foreach a {-1 0 1} { foreach b {-1 0 1} { foreach c {-1 0 1} { set T([expr {$i+$a}],[expr {$j+$b}],[expr {$k+$c}]) 5 } } } } else { foreach a {-1 0 1} { set T([expr {$i+$a}],$j,$k) 5 } foreach b {-1 0 1} { set T($i,[expr {$j+$b}],$k) 5 } foreach c {-1 0 1} { set T($i,$j,[expr {$k+$c}]) 5 } } return } proc FilsDe {n1 ag1} { global T LNOrdali DeuxTours set i [lsearch -exact $LNOrdali $n1] if {$i == ([llength $LNOrdali] - 1)} { set i -1 set DeuxTours 1 } set nf [lindex $LNOrdali $i+1] set Lf [lsearch -inline -all -exact -index 0 $T($n1,$ag1) $nf] set res [list] foreach f $Lf { lassign $f nf agf scf if {[llength $T($nf,$agf)] > 0} { lappend res $f } } return $res } proc FilsDeRR {P} { global T LNOrdali DeuxTours if { ! [info exists T]} { set LNOrdali [list s01 s02 s03 s04 s05 s06 s07 s08] array set T [ContenuDuFichier "/home/moumou/Agents/filsde.dat"] } lassign [split $P ,] n1 ag1 set i [lsearch -exact $LNOrdali $n1] if {$i == ([llength $LNOrdali] - 1)} { set i -1 set DeuxTours 1 } set nf [lindex $LNOrdali $i+1] set Lf [lsearch -inline -all -exact -index 0 [lrange $T($n1,$ag1) 0 end] $nf] set res [list] foreach f $Lf { lassign $f nf agf scf if {[llength $T($nf,$agf)] > 0} { lappend res "$nf,$agf" } } return $res } proc FilsDeRROLD {P} { set FilsDe(A) { B C D E} set FilsDe(B) { C E} set FilsDe(C) {A E} set FilsDe(D) { C E} set FilsDe(E) {A D } if {[info exists FilsDe($P)]} { return $FilsDe($P) } return "" } proc FilterGrid {NomATraiter} { global PipeQuery global PipeCollection global DefautsPipe global lBestPdb global laddSeq if {$PipeCollection} { set fquery [file join [RepertoireDuGenome] prottfa $NomATraiter] set fblast [file join [RepertoireDuGenome] blastp $NomATraiter] set balfile [file join [RepertoireDuGenome] ballast "${NomATraiter}"] set balancf [file join [RepertoireDuGenome] ballast "${NomATraiter}.anchors"] set outfile [file join [RepertoireDuGenome] tfasdescopains $NomATraiter] set toAddFile [file join [RepertoireDuGenome] tfasdescopainsAdd $NomATraiter] } else { set fquery "$NomATraiter" set fblast "[file rootname $NomATraiter].blastp" set balfile "[file rootname $NomATraiter].ballast" set balancf "[file rootname $NomATraiter].ballast.anchors" set outfile "[file rootname $NomATraiter].copains" set toAddFile "[file rootname $NomATraiter].copainsAdd" } set lBestPdb "" if {[file exists $outfile]} { return 1 } global NbLg global NbFrg set NbLg 0 set NbFrg 0 set Bank [set DefautsPipe(Filter,bank)] set method [set DefautsPipe(Filter,method)] set MaxLength [set DefautsPipe(Filter,length)] set VerifFrag [set DefautsPipe(Filter,fragment)] set MaxListe [set DefautsPipe(Filter,maxseq)] set SeuilExpect [set DefautsPipe(Filter,expect)] set EnleveVarSplic [set DefautsPipe(Filter,varsplic)] set AddPdb [set DefautsPipe(Filter,addpdb)] # Traite BLAST set queryname $PipeQuery set Lqueryseq [lrange [LesLignesDuFichier $fquery] 1 end] set LBlast [LesLignesDuFichier $fblast] DecortiqueBlastGrid $LBlast 9999. 5000 Query lBanqueId lAccess lDE lProfil lPN "LongDescription" set N10m3 0 set LesElus {} set nBId {} set nAcc {} set nPN {} set nDE {} foreach acc $lAccess bid $lBanqueId des $lDE pn $lPN { if {$pn > $SeuilExpect} {break} incr N10m3 if {[EstTropLong $des $MaxLength]} {continue} if {$VerifFrag && [EstUnFragmentGrid $des]} {continue} if {$EnleveVarSplic && [EstUnVarSplic $bid]} {continue} if {[EstUnAccessPDB [EnlevePrefixeBank $bid]] || [EstUnAccessRefseq [EnlevePrefixeBank $bid]]} { set acc [EnlevePrefixeBank $bid] } if {$pn == 0.} {set pn "1e-200"} lappend nAcc $acc lappend nBId $bid lappend nPN $pn lappend nDE $des } puts "la meth de filtre est $method" switch $method { "none" {set LesElus [TriNature $SeuilExpect $MaxListe $nBId $nPN]} "mounir" {set LesElus [TriMounir $SeuilExpect $MaxListe $nBId $nPN]} "fdd" {set LesElus [TriFDD $SeuilExpect $MaxListe $nBId $nPN]} "alea" {set LesElus [TriAlea $SeuilExpect $MaxListe $nBId $nPN]} "strips" {set LesElus [TriStrips $SeuilExpect $MaxListe $nBId $nBId $nPN $nDE]} "euca" {set LesElus [TriEuca $SeuilExpect $MaxListe $nBId $nPN]} "meta" {set LesElus [TriMeta $SeuilExpect $MaxListe $nBId $nPN]} "vert" {set LesElus [TriVert $SeuilExpect $MaxListe $nBId $nPN]} "cami" {set LesElus [TriCami $SeuilExpect $MaxListe $nBId $nPN]} "splice" {set LesElus [TriSplice $SeuilExpect $MaxListe $nBId $nAcc $nPN $nDE]} default {set LesElus [TriNature $SeuilExpect $MaxListe $nBId $nPN]} } # ATTENTION ! LesElus contient des BankID !! set nElus [llength $LesElus] if {! $nElus} { Espionne "ERROR ! No sequences selected !" AjouteAuLogPipe "filter failed" return 0 } set ap $nAcc set bp $nBId if {[file exists $balfile]} { if {[set DefautsPipe(Filter,add)]} { set LesElus [RajoutBallastGrid $balfile $LesElus $SeuilExpect $MaxListe $MaxLength nBId nAcc] } } set LesElus [lunique $LesElus] if {[QuelProjet] eq "ms2phdb"} { set lBestPdb [TrouveBestPDB $NomATraiter] puts "lbestpdb est $lBestPdb" # ote les pdb template de la liste des elus # seront rajoute par la suite foreach pdb $lBestPdb { set ic [lsearch $LesElus "PDB:$pdb"] puts "ic vaut $ic" if {$ic != -1} { set LesElus [lreplace $LesElus $ic $ic] } } } if {$AddPdb ne ""} { if {[EstUnAccessPDB $AddPdb]} { set ic [lsearch $LesElus $AddPdb] if {$ic != -1} { set LesElus [lreplace $LesElus $ic $ic] } } } # Recupere les sequences bases sur leur bid # variable res contient tout l'output set o [open "[pid]_toto.lst" w] puts $o [join $LesElus "\n"] close $o set res {} catch {exec [FastacmdExe] -i [pid]_toto.lst -d $Bank} Msg if {[string first "\[fastacmd\]" $Msg] != -1} { Espionne "Error in Fastacmd ! Aborting \n$Msg" AjouteAuLogPipe "filter failed" return 0 } file delete -force [pid]_toto.lst # Recupere les noms pour l'instant set ls [split $Msg "\n"] foreach l $ls { if {[string index $l 0] ne ">"} {continue} set l [EnlevePrefixeFastacmd $l] if {[regexp -nocase {gi\|} [EnlevePrefixeBank $l]]} { set l [split $l "|"] set Ac "[lindex $l 2]|[lindex $l 3]|" set bid $Ac } else { set ib [PremierBlanc $l] if {$ib ne "end"} {incr ib -1} set bid [string range $l 1 $ib] set Ac [lindex $nAcc [lsearch $nBId $bid]] if {$Ac eq ""} {set Ac $bid} } set Var [regexp {^VARSPLIC} $bid] set Swp [regexp {^SW} $bid] set Spt [regexp {^SPT} $bid] if {$Var} { set tmp $Ac set Ac $bid set bid $tmp } set Ac [EnlevePrefixeBank $Ac] set bid [EnlevePrefixeBank $bid] if {[info exists SeqPris($Ac)]} { if {$Var} {set SeqPris($Ac) [linsert [set SeqPris($Ac)] end $bid]} if {$Swp} {set SeqPris($Ac) [linsert [set SeqPris($Ac)] 0 $bid]} if {$Spt} {set SeqPris($Ac) [linsert [set SeqPris($Ac)] 0 $bid]} } else { if {$Var} { set SeqPris($Ac) $Ac } else { set SeqPris($Ac) $bid } } } puts "SeqPris($Ac) est du coup [set SeqPris($Ac)]" # Tableau SeqPris est indexe par Accession foreach e [array names SeqPris] { set L [set SeqPris($e)] set i 0 foreach s $L { if {! $i} { set SeqPris($s) $e } else { set nom "${e}__$i" set SeqPris($s) $nom } incr i } } # set YaQuery [info exists SeqPris($queryname)] set lAcOut {} foreach l $ls { if {[string index $l 0] eq ">"} { set l [EnlevePrefixeFastacmd $l] if {[regexp -nocase {gi\|} [EnlevePrefixeBank $l]]} { set l [split $l "|"] set Ac "[lindex $l 2]|[lindex $l 3]|" set bid $Ac } else { set ib [PremierBlanc $l] if {$ib ne "end"} {incr ib -1} set bid [string range $l 1 $ib] } if {[EstUnVarSplic $bid]} { set Ac [EnlevePrefixeBank $bid] } else { set Ac [set SeqPris([EnlevePrefixeBank $bid])] } if { [regexp "UniRef90" $Ac] } { regsub "UniRef90_" $Ac "" Ac } lappend lAcOut $Ac set l ">${Ac}" } lappend res $l } if {[file exists $balancf]} { DecortiqueAncresBallast $balancf Qu Ob Ps B1 B2 Ln Wg set fout [open $balancf w] puts $fout "Ballast 0.000000" foreach q $Qu o $Ob p $Ps d $B1 f $B2 l $Ln w $Wg { set o [EnlevePrefixeBank $o] if { [regexp "UniRef90" $o] } { regsub "UniRef90_" $o "" o } if {[lsearch $lAcOut $o] == -1} { if {[info exists SeqPris($o)]} {set o [set SeqPris($o)]} } set fmt [format "seq: %15s %15s\tpos: %10d\tbeg: %10d %10d\tlen: %6d\tweight: %6.2f\n" $q $o $p $d $f $l $w] puts $fout $fmt } close $fout } if {$AddPdb ne ""} { if {[EstUnAccessPDB $AddPdb]} { set AddPdb [EnlevePrefixeBank $AddPdb] set idPdb [DonneIdDeAccessPDB $AddPdb] set seq [creePDBAvecX $idPdb $AddPdb] # si la recuperation de la sequence s est bien passee if {[llength $seq] > 10} { set seq [join $seq ""] lappend res ">[EnlevePrefixeBank $AddPdb]" lappend res $seq } } } #AF if {[QuelProjet] eq "ms2phdb"} { if {$lBestPdb != {}} { foreach pdb $lBestPdb { set idPdb [DonneIdDeAccessPDB $pdb] catch {set seq [creePDBAvecX $idPdb $pdb]} if {$seq ne "Error"} { set seq [join $seq ""] lappend res ">$pdb" lappend res $seq } else { puts "pb recuperation PDB $pdb" } } } } # possibilite de fournir un fichier contenant des sequences # a ajouter a l alignement - contient des sequences au format fasta # on va le definir quand le projet est intitule addSeq if {[QuelProjet] eq "addSeq"} { # ajoute ces sequences dans la liste qui va remplir le fichier copains # cree une liste qui va contenir l ensemble des sequences qui devront etre presentes dans l'alignement final set laddSeq "" if {[file exists $toAddFile]} { set lignes [LesLignesDuFichier $toAddFile] set toW 0 foreach lg $lignes { if {[regexp {^>} $lg]} { regsub {> +} $lg {>} lg if {[lsearch -exact $res "$lg"] == -1} { lappend res [lindex $lg 0] lappend laddSeq [string range [lindex $lg 0] 1 end] set toW 1 } else { set toW 0 } } elseif {$toW == 1} { lappend res $lg } } } } ## if {[lsearch -exact $res ">${queryname}"] == -1} { set letfa [concat ">$queryname" $Lqueryseq $res] } else { set letfa $res } if {$queryname eq ""} { set x [lsearch -exact $letfa ">$queryname"] set letfa [lreplace $letfa $x $x ">query"] set PipeQuery "query" } set letfa [join $letfa "\n"] set f [open $outfile w] puts $f $letfa close $f #si le fichier copains existe et qu il contient plus d une sequence if {[file exists $outfile] && [llength [lsearch -regexp -all $letfa "^>"]] > 1} { AjouteAuLogPipe "filter = ok" return 1 } else { # si on a 1 seul copain, le pipe doit s arreter! AjouteAuLogPipe "filter failed" return 0 } } proc FilterLeaf {t n} { $t isleaf $n } proc FilterTax2Draw {} { global db LTaxSelected LTaxIds Tx LUserId Lfeuilles LModelId LSelectableId puts "Filter :" puts "LModel [llength $LModelId]" puts "LSelected [llength $LTaxSelected]" puts "LUserId [llength $LUserId]\n" set LShowId $LSelectableId set LTaxIds [lsort -unique -integer [concat $LTaxSelected $LShowId]] puts "-> LTaxIds : [llength $LTaxIds]" return } proc FilterWithAny {FicWithAny ListOrFile TaxId IdentifiersFile {NewFile ""}} { JeMeSignale if {$NewFile == ""} { set NewFile $FicWithAny } set LesNvLignes {} foreach Ligne [LesLignesDuFichier $FicWithAny] { if {[regexp "^PIDInitial" $Ligne]} { lappend LesNvLignes $Ligne continue } set IdInteractant [lindex [split $Ligne "\t"] 2] if {[FromStringList $IdInteractant $IdentifiersFile]} { lappend LesNvLignes $Ligne continue } if {[FromUserList $IdInteractant $ListOrFile $TaxId]} { lappend LesNvLignes $Ligne } } return [SauveLesLignes $LesNvLignes dans $NewFile] } proc FiltrageListeGC {liste} { # verification de l existence d une entree HGMD pour chacun des genes # a savoir que le nom de gene peut differer d une banque a l autre # on fait donc une double verification # - existence du lien sur la fiche GeneCards # - sinon, on verifie qu une entree HGMD avec le nom de gene courant n existe pas # recuperation de l identifiant Uniprot associe a chaque gene GC # retourne la liste des access Uniprot OK pour integrer MS2PH-db global RepAJourGC set fileRecap [file join $RepAJourGC "recapGene"] set fileListe [file join $RepAJourGC "listeProtGC"] set url1 "http://www.genecards.org/cgi-bin/carddisp.pl?gene=XXXX" set newList "" set rf [open $fileRecap w] set lf [open $fileListe w] puts $rf "GeneCards\tUniprot\tHGMD" # pour chaque element de la liste foreach e $liste { set idUniprot "" set idHgmd "" # creation de l url qui va bien, fonction du gene courant regsub "XXXX" $url1 $e newurl set LeslignesGC "" # copie des lignes de l url set x [HttpCopy $newurl LesLignesGC] # si la copie s'est bien deroulee if {$x == 1} { set idxHgmd [lsearch -regexp $LesLignesGC "Human Gene Mutation Database"] if {$idxHgmd != -1} { # si on a un lien direct vers la HGMD # recuperation du nom de gene utilise dans HGMD set ligne [lindex $LesLignesGC $idxHgmd] set ligne [string range $ligne [string first "Human Gene Mutation Database" $ligne] end] set idxbeg [expr [string first "('aaa')\">" $ligne] + 11] set idxend [expr [string first "" $ligne] - 1] set idHgmd [string trim [string range $ligne $idxbeg $idxend]] } #recuperation de l'id uniprot set idxUniprot [lsearch -regexp $LesLignesGC "UniProt/Swiss-Prot:
" $ligne] + 11] set idxend [expr [string first "" $ligne] - 1] set idHgmd [string trim [string range $ligne $idxbeg $idxend]] } else { set idxOmim [lsearch -regexp $LesLignesGC "OMIM:"] if {$idxOmim != -1} { set idHgmd "aa" } else { # si on a pas de lien vers HGMD dans la fiche GC # on verifie qu il n existe pas une fiche HGMD avec le nom de gene GC ### --> probleme de restriction d acces via lbgi.fr ... #set url "http://www.hgmd.cf.ac.uk/ac/gene.php?gene=$e" #set Leslignes {} # copie des lignes de l url #set x [HttpCopy $url LesLignes] # si la copie s'est bien deroulee #if {$x == 1 } {} # on verifie que la page ne presente pas un message d'erreur # if {[lsearch -regex $LesLignes "We are sorry."] == -1} {} #set idHgmd $e # {} #{} } } #recuperation de l'id uniprot set idxUniprot [lsearch -regexp $LesLignesGC "UniProt/Swiss-Prot: 1} {set seuil [expr {$seuil/100.}]} set thr [expr {int($seuil*$lga)}] set i 0 foreach p [set ListeDesPiliersDuGroupe($gtm)] { set l [string length [string map [list "." ""] $p]] if {$l >= $thr} { set ok 1 } else { set ok 0 } foreach g $LNDG { if {$ok} { lappend Npil($g) [lindex [set ListeDesPiliersDuGroupe($g)] $i] } else { lappend Npil($g) [set pgap($g)] } } incr i } unset -nocomplain ListeDesPiliersDuGroupe array set ListeDesPiliersDuGroupe [array get Npil] return } proc FiltreMaladies {nom liste} { set LaCentrale "[MagosDir]/Centrale" set ficMs2ph [file join $LaCentrale "listeMs2ph_new"] set ficHomol [file join $LaCentrale "listeHomol_new"] source $ficMs2ph source $ficHomol set FileOut "$nom.disease" set f [open $FileOut w] foreach e $liste { if {[info exists ExistsM($e)]} { puts $f "ms2ph\t$e" continue } if {[info exists ExistsH($e)]} { puts $f "homologues\t$e" } } close $f return 1 } proc FiltrerLesOrganismes {Rep} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|FiltrerLesOrganismes : Start" set FichierIn [open "$Rep/NpToCoord.csv" "r"] set FichierOut [open "$Rep/EpouvanBlast2.csv" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] set CompteurLus 0 while { [gets $FichierIn Ligne] >=0 } { if { [regexp {troglodytes|Drosophila_melanogaster|Caenorhabditis|Danio|Mus} $Ligne] } { puts $FichierOut $Ligne } } close $FichierIn close $FichierOut Espionne "$timestamp|FiltrerLesOrganismes : End" } proc FinAfficheAskAddSeq {what} { global TAddS if {$what eq "dismiss"} { set TAddS(ok) 0 update destroy .affas return "" } # check sequence file set file $TAddS(File) if {$file eq "" || ! [file exists $file]} { FaireLire "The file >$file< does not exists !" return } set format [FormatDuFichierSequence $file] if {$format ni {MSF TFA ALN}} { FaireLire "Beware ! You can only add sequence(s) as a TFA, MSF or CLUSTAL (ALN) file !" return } set TAddS(ok) 1 update destroy .affas return } proc FinAfficheDownloadPDB {{quoi ""} {w ""}} { global DwnPDB StrucAVoir ListePDB if {$quoi eq "dismiss"} { destroy $w return } foreach i [array names DwnPDB] { set n [set DwnPDB($i)] if {$n eq ""} {return} if {! [file exists $n]} { FaireLire "Error !\nThe file :\n${n}\ndoes not exist !" return } } set i 1 foreach s $StrucAVoir { set Nom [string trim [set DwnPDB($i)]] set ix [lsearch -regexp $ListePDB $s] set m [lindex $ListePDB $ix] set pdbid [DonneIdDeAccessPDB $m] set chn [DonneChainDeAccessPDB $m] if {[info commands $pdbid] ne ""} { $pdbid destroy } set cok [LoadNouveauPDB $pdbid $Nom] } return } proc FinCentreAtome {args} { set ::AtomePique "" $::pgl(BoutonCenter) configure -fg cyan bind $::pgl(wogl) {set ::BQx %x ; set ::BQy %y} return } proc FinCherche {} { global NomTextSeq Chrc if {$Chrc(prevMode) eq "seqlab"} { $NomTextSeq tag state off $NomTextSeq map on } $NomTextSeq tag delete Cherche $NomTextSeq configure -background white -foreground black unset -nocomplain Chrc update idletasks DetruitBoutonsOrdali return } proc FinChoixNbCluster {quoi} { if {$quoi eq "dismiss"} {set ::NbGr -1} DetruitBoutonsOrdali return } proc FinChoixPDBReference {quoi} { global Retour global chxmolref if {$chxmolref eq "" && $quoi eq "OK"} {return} if {$quoi eq "OK"} {set Retour $chxmolref} {set Retour -1} return } proc FinChoixPlusieursPDB {w {quoi ""}} { global Retour Defauts lesbts StrucAVoir NomEtSeqAssPDB set StrucAVoir {} if {$quoi eq "dismiss"} { set Retour 1 return } set LSel {} foreach l $lesbts { set v [$l cget -variable] global $v if {[set $v] ne ""} {lappend LSel [set $v]} } if {! [llength $LSel]} { set Retour 1 return } if {[set Defauts(Viewer)] eq "RasMol" && [llength $LSel] > 5} { FaireLire "Error !\nRasMol accepts a maximum of 5 molecules !" return } set StrucAVoir $LSel set Retour 1 return } proc FinColorieSSParams {quoi} { global PSS if {$PSS(MeanRef) eq "ref" && $PSS(PDBRef) eq ""} { return } set w $PSS(Top) destroy $w if {$quoi ne "ok"} { unset PSS } update return } proc FinDBProfile {} { global TPS if {! [info exists TPS]} { #puts "==> Pas de TPS <==" return } foreach v [array names TPS "*,fois"] { set i [join [lrange [split $v ,] 0 end-1] ,] set res [expr {1.0*[set TPS($i,time)]/[set TPS($v)]}] set sql [lsort -unique [set TPS($i,sql)]] lappend LR [list $i [set TPS($v)] $res $sql] } set LR [lsort -real -index 2 $LR] puts "\n== PROFILING DB ===" puts "===================" foreach e $LR { lassign $e s i t q puts "" puts [format "%s %d %10.1f %s" $s $i $t $q] } return } proc FinDemandeTitre {quoi w} { global TiDe if {$quoi eq "save"} { set titre [$TiDe(Wtitre) get 1.0 end] if {[string trim $titre] eq ""} {return} } else { set titre "" } set TiDe(titre) $titre set TiDe(desc) [$TiDe(Wdesc) get 1.0 end] set TiDe(ctitre) [$TiDe(Wctitre) get 1.0 end] set TiDe(cdesc) [$TiDe(Wcdesc) get 1.0 end] foreach v [array names TiDe] { if {[string index [set TiDe($v)] end] eq "\n"} {set TiDe($v) [string range [set TiDe($v)] 0 end-1]} } destroy $w return } proc FinDemarrage {{w ""}} { if {! [ModeI]} { return } if {$w eq ""} { catch {destroy $w.dmg} } else { destroy [winfo toplevel $w.dmg] } update idletasks return } proc FinDoc_WordML {{PortaitOrLandscape Landscape}} { set LeTexte {} if {$PortaitOrLandscape == "Landscape"} { lappend LeTexte "" lappend LeTexte "" lappend LeTexte "" } lappend LeTexte "" lappend LeTexte "" return [join $LeTexte "\n"] } proc FinJob {nom} { global PipTmpDir set lf [glob -nocomplain $nom*] foreach f $lf { exec gzip $f } set lf [glob -nocomplain $nom*.gz] catch {eval exec tar -cf $nom.tar $lf} Message catch {eval file delete -force $lf} Message return } proc FinNewObj {quoi} { global NwOj NwOjR if {$quoi eq "ok"} { # check if we have a new name set NwOj(Obj) [string trim $NwOj(Obj)] if {$NwOj(Obj) eq "objname" || $NwOj(Obj) eq ""} { FaireLire "Please give a name to the new object !" return } regsub -all -- {-|\.|:} $NwOj(Obj) "_" NwOj(Obj) set mol $NwOj(Mol) set pdb "::$mol" if {! $NwOj(Edit)} { if {[ObjectAlreadyExists $NwOj(Obj)]} { FaireLire "This object already exists !\nPlease give an other name !" return } # define the object $pdb newObj $NwOj(Obj) } $pdb assignSelection $NwOj(Obj) [array get NwOjR] $pdb render $NwOj(Obj) if {! $NwOj(Edit)} { AddFObj $mol } VueEditee 1 } update idletasks destroy $NwOj(Toplevel) unset NwOj unset -nocomplain NwOjR $::pgl(wogl) postredisplay return } proc FinPCI {} { DetruitBoutonsOrdali AfficheBoutonsOrdali return } proc FinPasTouche {Nom} { PasTouche $Nom "fin" } proc FinSauvePDBParams {quoi} { global SP if {$quoi eq "ok"} { if {$SP(ChnAll) eq "all"} { set chn "all" } else { set chn $SP(LaChn) } if {$SP(ResAll) eq "all"} { set d "all" ; set f "all" } else { if {! [string is integer -strict $SP(ResFrom)] || ! [string is integer -strict $SP(ResTo)]} { FaireLire "Warning !\nPlease supply a valid residue range !" return } set d $SP(ResFrom) set f $SP(ResTo) } set nom [DonneIdDeAccessPDB $SP(Mol)] $nom save $chn $d $f } trace remove variable SP(Mol) write DonneChainesDe destroy $SP(Top) unset SP return } proc FinSuper {} { global NomTextSeq PositionInitiale $NomTextSeq tag remove slct 1.0 end bind $NomTextSeq <1> bind $NomTextSeq <2> bind $NomTextSeq <3> bind $NomTextSeq $NomTextSeq tag bind Hel $NomTextSeq tag bind H31 $NomTextSeq tag bind She $NomTextSeq tag bind Tur return } proc FindAgentFriend {n1 a1 n2} { global TAg set scmax -99999999. set agmax "skip" set Lasc [list] foreach a2 $TAg($n2) { if {! $TAg($a2,$n2,active)} {continue} lassign [ScoreAgentsPair $n1 $a1 $n2 $a2] score seuil if {$score ne "skip"} { lappend Lasc $score $seuil $a2 } } if {[llength $Lasc] == 0} { return [list "skip" -999999 -999999] } set Lasc [lrange [lsort -decreasing -real -stride 3 -index 0 $Lasc] 0 19] return [list [lindex $Lasc 2] [lindex $Lasc 0] [lindex $Lasc 1]] set scref [lindex $Lasc 0] set Lscag [list $scref [lindex $Lasc 1]] foreach {sc ix} [lrange $Lasc 2 end] { if {($scref-$sc) > 0.2*$scref} { lappend Lscag $sc $ix } } # indexes starts at 0, so -1 set max [expr {[llength $Lscag]/2 - 1}] # rand() gives float entre (0,1) inclusifs set ix [expr {2 * round(rand() * $max)}] set ag [lindex $Lscag $ix+1] set sc [lindex $Lscag $ix] return [list $ag $sc] } proc FindDiscriDe {f} { global TabSF LNOrdali SDG LNDG ListeDesPiliersDuGroupe ListeScore ConsMeth TbScores # Inits Ordali LesDefauts TypeAli "XML" LesDefauts FichierXML $f # Load file DecortiqueUnXml2 $f InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF global {*}[info globals "TD*"] CreeLesPiliers LesDefauts PCThrGap 0.1 unset -nocomplain ListeScore array unset TbScores "Score,*" update set Lmscore [list Kabat Norm] set Lmscore [list Kabat] set TbScores(Lcols) $Lmscore foreach mscore $Lmscore { set sco [ScoreDe$mscore [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)]] if {[llength $Lmscore] > 1} { set sco [ReScale $sco] } set TbScores(Score,$mscore) $sco } CreeListeScore set Lval $ListeScore puts [join [lrange $Lval 0 5] "\n"] puts "" set Lval [lsort -index 1 -real $Lval] puts [join [lrange $Lval 0 3] "\n"] puts "..." puts [join [lrange $Lval end-3 end] "\n"] puts "" set Lval $ListeScore # Fait conservation globales set Lres [list] set Lgr [Tclcluspack $Lval -dt coordinates -cm hierar -nbc secator -wc] set Lres [TraiteResultatClusteringTcl $Lgr ""] set Ltrouve [lindex $Lres 1] # efface les conserves puts "ConsMeth IdenGlob [llength $ConsMeth(IdenGlob)] | $ConsMeth(IdenGlob)" set ConsMeth(ConsGlob) [list] puts "" # recup cons-t80 pre-calcule set n [lindex $SDG(GroupeToutLeMonde) 0] set Liden [list] ; set Lcons [list] foreach ft [set TabSF($n,Cons-T80)] { DecortiqueUneFeature $ft d f c tmp note if {[regexp "IdenGlob" $note]} { lappend Liden [expr {$d - 1}] } if {[regexp "ConsGlob" $note]} { lappend Lcons [expr {$d - 1}] } } # 498 qspQ # 521 R foreach i $Liden { puts "$i [lindex $ListeDesPiliersDuGroupe(GroupeToutLeMonde) $i]" } set Liden [lsort -integer $Liden] set Lcons [lsort -integer $Lcons] puts "Iden :" puts "Liden $Liden" puts "Liden [llength $Liden] Ltrou [llength $Ltrouve]" puts "land [llength [land $Liden $Ltrouve]]" puts "" puts "Cons :" puts "Lcons [llength $Lcons] Ltrou [llength $Ltrouve]" puts "land [llength [land $Lcons $Ltrouve]]" #exit puts "" # pour chaque groupe on calcule conservation unset -nocomplain TbScores set TbScores(Lcols) Kabat foreach gr [lrange $LNDG 1 end] { set Lsco [ScoreDeKabat $ListeDesPiliersDuGroupe($gr)] set TbScores(Score,Kabat) $Lsco CreeListeScore $gr set Lval $ListeScore set Lgr [Tclcluspack $Lval -dt coordinates -cm hierar -nbc secator -wc] set Lres [TraiteResultatClusteringTcl $Lgr "" $gr] set Ltrouve [lindex $Lres 1] puts "\nGroupe $gr" puts "trouve $Ltrouve" puts "ConsMeth $ConsMeth($gr)" set i 0 foreach p $ListeDesPiliersDuGroupe($gr) s1 $Lsco s2 $TbScores(Score,Kabat) { puts [format "%4d %6.2f %6.2f %s" $i $s1 $s2 $p] incr i } unset -nocomplain ListeScore } # Definit discriminant # Pour chaque groupe # - prend conserve du groupe, son score Norm # - regarde si il est conserve dans autres groupe, et prend # son core Norm set Ldis [list] foreach g1 [lrange $LNDG 1 end] { puts "Group 1 $g1" set Lp1 [set ConsMeth($g1)] puts "Lp1 $Lp1" foreach p1 $Lp1 { if {$p1 in $Ldis} {continue} set pil1 [lindex $ListeDesPiliersDuGroupe($g1) $p1] puts [format "%4d %s" $p1 $pil1] lassign [DispersionDeColonne $pil1] v1 ang1 ec1 puts [format " V1 %6.3f %6.3f | ang1 %5.2f | ec1 %5.2f" {*}[V_nV $v1] $ang1 $ec1] set isOverlap 0 foreach g2 [lrange $LNDG 1 end] { if {$g1 eq $g2} {continue} set nseq [string length [lindex $ListeDesPiliersDuGroupe($g2) 0]] set ThrGap [DefineGapThreshold $nseq] puts " Group 2 $g2" # on prend colonne correspondante dans groupe 2 set pil2 [lindex $ListeDesPiliersDuGroupe($g2) $p1] if {[string length [string map {"." ""} $pil2]] < $ThrGap} { continue } puts [format " %4d %s" $p1 $pil2] lassign [DispersionDeColonne $pil2] v2 ang2 ec2 puts [format " V2 %6.3f %6.3f | ang2 %5.2f | ec2 %5.2f" {*}[V_nV $v2] $ang2 $ec2] set over [ColonneOverlap $v1 $v2 $ang1 $ang2 $ec1 $ec2] incr isOverlap $over if {$over} { puts "overlap" } else { puts "discri" } } if {! $isOverlap} { lappend Ldis $p1 lappend Tdis($g1) $p1 } } } # recupere discri du xml foreach gr [lrange $LNDG 1 end] { set n [lindex $SDG($gr) 0] foreach ft [set TabSF($n,Discri)] { DecortiqueUneFeature $ft d f c tmp note if {! [regexp -nocase {^indel} $note]} { for {set i $d} {$i <= $f} {incr i} { lappend TX($gr) $i lappend Ld $i } } } } puts "" set Ldis [lsort -unique -integer $Ldis] puts "Ldis [llength $Ldis] | $Ldis" set Ld [lsort -unique -integer $Ld] puts "Ld [llength $Ld] | $Ld" puts "land [llength [land $Ldis $Ld]]" foreach g [lrange $LNDG 1 end] { puts "" puts "Groupe $g" set Lg [list] if {[info exists Tdis($g)]} { set Lg $Tdis($g) puts "Tdis [lsort -unique -integer $Tdis($g)]" } set Lx [list] if {[info exists TX($g)]} { set Lx $TX($g) puts "TX [lsort -unique -integer $TX($g)]" } puts "land [llength [land $Lg $Lx]]" } exit return } proc FindNbEspece {t} { set Rank [$::db eval {select Rank from taxonomy where taxid=$t}] if {$Rank eq "Species"} { incr ::nSpecies return } set Lfils [$::db eval {select taxid from taxonomy where Parent=$t}] puts "Lfils [llength $Lfils]" foreach f $Lfils { FindNbEspece $f } return } proc FindNode {Value T} { #returns the first node with that value return [lindex [PathToNode $Value $T "value"] end] } proc FindOligosForSerena {} { foreach Ligne [LesLignesDuFichier [RepertoireDuGenome]/AllStopOligosForSerena.txt] { scan $Ligne "%s" P set IGBMC [StringApres ">" dans [ContenuDuFichier [RepertoireDuGenome]/blastnoligo20060518/$P]] Espionne "$IGBMC [Oli $P Description]" } exit } proc FindPatternDansADNetRAC {Pattern} { global ADN TDN RAC if { ! [info exists ADN]} { ChargeADNetTDNetRAC } set PatternPourRegexp $Pattern regsub -all {[oO]} $PatternPourRegexp "\[GC\]" PatternPourRegexp regsub -all {[iI]} $PatternPourRegexp "\[AT\]" PatternPourRegexp regsub -all {[nN]} $PatternPourRegexp "\[ATGCX\]" PatternPourRegexp set Courant 0 while {[regexp -nocase -indices $PatternPourRegexp [string range $ADN $Courant end] Indices]} { foreach {Debut Fin} $Indices { incr Debut $Courant incr Fin $Courant puts "F [string range $ADN [expr $Debut-6] [expr $Debut -1]] [string range $ADN [expr $Debut] [expr $Fin]] [string range $ADN [expr $Fin+1] [expr $Fin+6]] $Debut $Fin" } set Courant [incr Debut 1] } set lRAC [string length $RAC] set Courant 0 while {[regexp -nocase -indices $PatternPourRegexp [string range $RAC $Courant end] Indices]} { foreach {Debut Fin} $Indices { incr Debut $Courant incr Fin $Courant puts "R [string range $RAC [expr $Debut-6] [expr $Debut - 1]] [string range $RAC [expr $Debut] [expr $Fin]] [string range $RAC [expr $Fin+1] [expr $Fin+6]] [expr $lRAC - $Debut] [expr $lRAC - $Fin]" } set Courant [incr Debut 1] } } proc FindRedundancy {redundantSequencesL fileName minIdentity} { ## Liste des sequences redondantes ## niveau 0 : groupes de sequences redondantes ## niveau 1 : sequences redondantes entre elles upvar $redundantSequencesL redundantSequences set mainBlastTab [DecortiqueBlastCommeBlat $fileName] set hitCompteur 0 foreach hit $mainBlastTab { #puts "''''''$hit'''''''''''" #puts " ------------ analyse hit $hitCompteur ------------" incr hitCompteur # si le query hit sur lui meme on passe if {[lindex $hit 2]==[Alias [lindex $hit 0]]} { #puts "yop! on zappe le blast vers lui meme" continue } #on compare si %identity superieur à minIdentity set identity [lindex $hit 7] set identQuery 0 set identHit 0 set foo 0 regexp {(.*)/(.*?)} $identity foo identQuery identHit set identValue [expr 100.*$identQuery/$identHit] #puts "% identite : $identValue" if { $identValue>=$minIdentity } { # on va verifier si le hit respect le %identite # si oui, et qu'il est de taille inferieure à la query, c un redondant set queryLength [lindex $hit 1] set hitLength [lindex $hit 4] set leftHit [lindex $hit 11] set rightHit [lindex $hit 12] if {$leftHit==1 && $rightHit==$hitLength} { #puts "longueur query/hit : $leftHit : $rightHit==$hitLength" #AddARedundant redundantSequences hit # on a une redondance entre A et B # on cree le couple {A B} si il n'existe pas encore set A [lindex $hit 0] set B [NomDuAlias [lindex $hit 2]] if {![info exists redundantSequences($A,$B)]} { set redundantSequences($A,$B) 1 } } #if {$queryLength>=$hitLength} { # #creation du couple de redondance # AddARedundant redundantSequences hit #} } } } proc FindTcl {fic {dir .}} { set LesTrouves {} set LesF [lsort [glob -nocomplain -- [file join $dir $fic]]] foreach F $LesF { lappend LesTrouves $F } set Ld [lsort [glob -directory $dir -type d -nocomplain -- *]] foreach d $Ld { if {[file type $d]=="link"} { continue } set LesR [FindTcl $fic $d] foreach R $LesR { lappend LesTrouves $R } } return $LesTrouves } proc FindTclAll {fic {dir .}} { global ResFind set r [glob -directory $dir -nocomplain -- $fic] if {$r != ""} { lappend ResFind $r } set Ld [glob -directory $dir -type d -nocomplain -- *] foreach dir $Ld { set r [FindTcl $fic $dir] if {$r != ""} {lappend ResFind $r} } if {[info exists ResFind]} { return $ResFind } else { return "" } } proc FindVector {V} { global FindVector set V [string toupper $V] if {[info exists FindVector($V)]} { return $FindVector($V) } if {[info exists FindVector("EstCharge")]} { return "" } foreach File [LesVecteurs] { set Vec [file tail $File] regsub {\..*} $Vec "" Vec set VEC [string toupper $Vec] set FindVector($Vec) $File set FindVector($VEC) $File set FindVector(NAMEOF_$Vec) $Vec set FindVector(NAMEOF_$VEC) $Vec } set FindVector("EstCharge") 1 return [FindVector $V] } proc FinsFlo {} { foreach F [glob "sc*gene.tfa"] { set Seq [QueLaSequenceDuFichierTFA $F] set Fin [string range $Seq end-53 end] set RAC [NucToReverseAndComplementNuc $Fin] set Nom [string range $F 2 5] Espionne "$Nom $Fin $RAC" } exit } proc FirstEF {FichierTFA FichierOUT} { ### Execution du programme FirstEF sur la sequence d'un fichier TFA ### if {![file exists $FichierTFA]} {return} catch {exec /gcg/extensions/bin/firstef $FichierTFA $FichierOUT} Message return } proc FirstElementFromSerial {Texte} { set LesKV [ListFromSerial $Texte] set V [lindex $LesKV 0] return $V } proc FittingParRotation {Ev1 Ev2 Ev3 Av1 Av2 Av3 {Cen 0} {MAE 0}} { if {$Cen} { for {set i 1} {$i < 4} {incr i} { set Ev$i [CentreVecteur [set Ev$i]] set Av$i [CentreVecteur [set Av$i]] if {$MAE} { set Av$i [MiseALEchelle [set Ev$i] [set Av$i]] } } } set i 1 foreach x1 $Ev1 y1 $Ev2 z1 $Ev3 x2 $Av1 y2 $Av2 z2 $Av3 { set W($i) 1. set XX(1,$i,1) $x1 set XX(2,$i,1) $y1 set XX(3,$i,1) $z1 set XX(1,$i,2) $x2 set XX(2,$i,2) $y2 set XX(3,$i,2) $z2 incr i } set Ni [expr $i - 1] set resup [COMPARORTHO XX W Rot Trans] set rms [lindex $resup 0] set mxd [lindex $resup 1] puts "Evec <---> Vaa :: rms = $rms ; max dev = $mxd" set MRot [M_T Rot] set VTrans [V_T Trans] set NVa1 {} set NVa2 {} set NVa3 {} foreach x $Av1 y $Av2 z $Av3 { set v [list $x $y $z] set Ln [AppliqueRotation $v $MRot $VTrans] lassign $Ln nx ny nz lappend NVa1 $nx lappend NVa2 $ny lappend NVa3 $nz } puts "" puts "X = Coef.Corr eigenvec et NVa [CoefficientCorrelation $Ev1 $NVa1]" puts "Y = Coef.Corr eigenvec et NVa [CoefficientCorrelation $Ev2 $NVa2]" puts "Z = Coef.Corr eigenvec et NVa [CoefficientCorrelation $Ev3 $NVa3]" puts "" set laa [split "ARNDCQEGHILKMFPSTWYV" ""] foreach x $NVa1 y $NVa2 z $NVa3 a $laa { puts [format "%s | %7.4f" $a [S_nV [list $x $y $z]]] } puts "" puts "V1 $NVa1" puts "V2 $NVa2" puts "V3 $NVa3" puts "" return } proc FlagFeatureScore {e} { foreach f [array names ::ScoreMeth "*,Edit"] { set ::ScoreMeth($f) $e } return } proc FlatFileDrawBlast {w} { set FichierBlast [AskOptionsDeDrawBlast ask $w FichierBlast] if {![file exists $FichierBlast]} {return} if {![AskOptionsDeDrawBlast exists $w ListBox]} { AskOptionsDeDrawBlast set $w ListBox [DrawInfo Brut ""] } set ListBox [AskOptionsDeDrawBlast ask $w ListBox] if {![winfo exists $ListBox] } { AskOptionsDeDrawBlast set $w ListBox [DrawInfo Brut ""] } set ListBox [AskOptionsDeDrawBlast ask $w ListBox] $ListBox delete 0 end foreach Ligne [LesLignesDuFichier $FichierBlast] {$ListBox insert end $Ligne} return } proc Fleche {K DebX DebY FinX FinY args} { Wup "Je crains que Fleche demande un canvas avec X et Y de meme nature ... isotropes" Wup " => meme facteurs d'echelle sur X et Y." set Width 6. set Fill "grey" set OutLineWidth 1 set OutLine "black" set ArrowWidth 2 set ArrowDirection "end" set FlatSide "none" foreach {Option Valeur} $args { if {$Valeur==""} { set Valeur "\"\"" } switch -regexp -- $Option { "-width$" { set Width $Valeur } "-outlinewidth$" { set OutLineWidth $Valeur } "-outline$" { set OutLine $Valeur } "-fill$" { set Fill $Valeur } "-arrowwidth$" { set ArrowWidth $Valeur } "-arrowwidthstart$" { set ArrowWidthStart $Valeur } "-arrowwidthend$" { set ArrowWidthEnd $Valeur } "-arrowdirection$" { set ArrowDirection $Valeur } "-flatside$" { set FlatSide $Valeur } } } if { ! [info exists ArrowWidthStart]} { if {[regexp "both|start" $ArrowDirection]} { set ArrowWidthStart $ArrowWidth } else { set ArrowWidthStart 0 } } if { ! [info exists ArrowWidthEnd]} { if {[regexp "both|end" $ArrowDirection]} { set ArrowWidthEnd $ArrowWidth } else { set ArrowWidthEnd 0 } } set w [expr $Width/2.] set fStart [expr -$ArrowWidthStart*$w] set fEnd [expr $ArrowWidthEnd*$w] set Long [expr sqrt(($FinX-$DebX)*($FinX-$DebX) + ($FinY-$DebY)*($FinY-$DebY))] if {$Long==0} { return "" } if {[expr abs($fStart)] > $Long} { set fStart [expr $Long*$fStart/abs($fStart)] } if {[expr abs($fEnd)] > $Long} { set fEnd [expr $Long*$fEnd /abs($fEnd)] } if {[expr abs($fEnd)+abs($fStart)] > $Long} { set fEnd [expr $Long*$fEnd /(2*abs($fEnd)) ] set fStart [expr $Long*$fStart/(2*abs($fStart))] set w [expr abs($fEnd)] } set AxeX [expr ($FinX-$DebX)/$Long] set AxeY [expr ($FinY-$DebY)/$Long] set PerX [expr -$AxeY] set PerY [expr $AxeX] set MemoPerY $PerY set aX [expr $DebX+$w*$PerX] set aY [expr $DebY+$w*$PerY] set GardeS 0 Wup "Si on fait une fleche arriere et si ... " set sX [expr ($DebX+$FinX)/2] set sY [expr ($DebY+$FinY)/2] set mX [expr $DebX-$fStart*$AxeX] set mY [expr $DebY-$fStart*$AxeY] if {[expr ($DebX-$sX)*($DebX-$sX)+($DebY-$sY)*($DebY-$sY)] < [expr ($DebX-$mX)*($DebX-$mX)+($DebY-$mY)*($DebY-$mY)]} { set sX $mX set sY $mY set GardeS 1 } set f $fEnd set mX [expr $FinX-$f*$AxeX] set mY [expr $FinY-$f*$AxeY] if { ! $GardeS } { set sX [expr ($DebX+$FinX)/2] set sY [expr ($DebY+$FinY)/2] if {[expr ($FinX-$sX)*($FinX-$sX)+($FinY-$sY)*($FinY-$sY)] < [expr ($FinX-$mX)*($FinX-$mX)+($FinY-$mY)*($FinY-$mY)]} { set sX $mX set sY $mY set GardeS 1 } } if {[regexp "right$" $FlatSide]} { set PerY 0 } lappend Trace [expr $sX+$w*$PerX] lappend Trace [expr $sY+$w*$PerY] lappend Trace [expr $mX+$w*$PerX] lappend Trace [expr $mY+$w*$PerY] lappend Trace [expr $mX+$f*$PerX] lappend Trace [expr $mY+$f*$PerY] lappend Trace $FinX lappend Trace $FinY set PerY $MemoPerY if {[regexp "left$" $FlatSide]} { set PerY 0 } lappend Trace [expr $mX-$f*$PerX] lappend Trace [expr $mY-$f*$PerY] lappend Trace [expr $mX-$w*$PerX] lappend Trace [expr $mY-$w*$PerY] set f [expr $fStart] set w [expr -$w] set mX [expr $DebX-$f*$AxeX] set mY [expr $DebY-$f*$AxeY] if { ! $GardeS} { set sX [expr ($DebX+$FinX)/2] set sY [expr ($DebY+$FinY)/2] if {[expr ($DebX-$sX)*($DebX-$sX)+($DebY-$sY)*($DebY-$sY)] < [expr ($DebX-$mX)*($DebX-$mX)+($DebY-$mY)*($DebY-$mY)]} { set sX $mX set sY $mY } } set PerY $MemoPerY if {[regexp "^left" $FlatSide]} { set PerY 0 } lappend Trace [expr $sX+$w*$PerX] lappend Trace [expr $sY+$w*$PerY] lappend Trace [expr $mX+$w*$PerX] lappend Trace [expr $mY+$w*$PerY] lappend Trace [expr $mX+$f*$PerX] lappend Trace [expr $mY+$f*$PerY] lappend Trace $DebX lappend Trace $DebY set PerY $MemoPerY if {[regexp "^right" $FlatSide]} { set PerY 0 } lappend Trace [expr $mX-$f*$PerX] lappend Trace [expr $mY-$f*$PerY] lappend Trace [expr $mX-$w*$PerX] lappend Trace [expr $mY-$w*$PerY] lappend Trace [lindex $Trace 0] lappend Trace [lindex $Trace 1] return [eval $K create polygon $Trace -width $OutLineWidth -fill $Fill -outline $OutLine] } proc FlecheSurArc {R Id {Orientation F}} { Wup "Puts an arrow at the end of the arc Id (clock-wize if Forward ...)" set PI 3.14159 set DeltaAnglePourFlecheDeg 1.5 set DeltaAnglePourFlecheRad [expr $DeltaAnglePourFlecheDeg*$PI/180.] scan [$R coords $Id] "%f %f %f %f" G H D B set Rayon [expr ($D-$G)/2] set InRayon [expr $Rayon*(1-0.9*$DeltaAnglePourFlecheRad)] set OutRayon [expr $Rayon*(1+0.9*$DeltaAnglePourFlecheRad)] set Start [$R itemcget $Id -start] set Extent [$R itemcget $Id -extent] set Couleur [$R itemcget $Id -outline] Espionne "$Start $Extent" if {$Extent>0} { set NewExtent [expr $Extent-$DeltaAnglePourFlecheDeg] if {$Orientation=="F"} { set NewStart [expr $Start+$DeltaAnglePourFlecheDeg] set Pointe $Start set Queue $NewStart } else { set NewStart $Start set Queue [expr $Start+$NewExtent] set Pointe [expr $Start+$Extent] } } else { set NewExtent [expr $Extent+$DeltaAnglePourFlecheDeg] if {$Orientation=="F"} { set NewStart $Start set Queue [expr $Start+$NewExtent] set Pointe [expr $Start+$Extent] } else { set NewStart [expr $Start+$DeltaAnglePourFlecheDeg] set Pointe $Start set Queue $NewStart } } set Queue [expr $Queue*$PI/180] set Pointe [expr $Pointe*$PI/180] $R itemconfigure $Id -start $NewStart -extent $NewExtent set InQueueX [expr ($G+$D)/2 + $InRayon*cos($Queue)] set InQueueY [expr ($H+$B)/2 - $InRayon*sin($Queue)] set OutQueueX [expr ($G+$D)/2 + $OutRayon*cos($Queue)] set OutQueueY [expr ($H+$B)/2 - $OutRayon*sin($Queue)] set PointeX [expr ($G+$D)/2 + $Rayon*cos($Pointe)] set PointeY [expr ($H+$B)/2 - $Rayon*sin($Pointe)] $R create polygon $PointeX $PointeY $InQueueX $InQueueY $OutQueueX $OutQueueY $PointeX $PointeY -fill $Couleur -outline $Couleur -tags "Fleche" } proc Flo {} { set FichierHtml "[RepertoireDuGenome]/nucleardbpdblist.html" set FichierTxt "[RepertoireDuGenome]/nucleardbpdblist.txt" set Texte [ContenuDuFichier nucleardbpdblist.html] set Table [ValeurDeLaBalise Table Texte] set Li 0 set LesEnregistrements {} while 1 { set Ligne [ValeurDeLaBalise tr Table] incr Li if {$Ligne==""} { break } set Co 0 set LesMots {} while {1} { set Cellule [ValeurDeLaBalise td Ligne] incr Co if {$Cellule==""} { break } set Span [ValeurDeLaBalise span Cellule] regsub -all "\n" $Span " " Span regsub {} $Span "" Span if {[regexp -nocase {" $Sequence]]==0} { if {[set iDL [string first "\n" $Sequence 1]]>1} { if {[string first ">" $Sequence $iDL]>0} { return "tfas" } else {return "tfa"} } } if {[regexp "^ID " $Sequence]} { if {[regexp {[^p\.]\.\.[ \t]*\n} $Sequence]} { return "gcg" } return "embl" } if {[regexp {[^\.]\.\.[ \t]*\n} $Sequence]} { return "gcgmaybe" } if {[regexp -nocase {[^a-zA-Z0-9\.\n\t \*]} $Sequence]} { return "Inconnu" } if {[regexp -nocase {[^ATGCX0-9\.\n\t \*]} $Sequence]} { return "protbrut" } return "nucbrut" } proc FormatDeLaSequenceDuFichier {Fichier} { return [FormatDeLaSequence [ContenuDuFichier $Fichier]] } proc FormatDeLaSequence_l {Sequence} { return [FormatDeLaSequence [join $Sequence "\n"]] } proc FormatDesNumerosPourCollection {{OrfNumbering ""}} { global RepertoireDuGenome global FormatDesNumerosPourCollection if {$OrfNumbering!="" && [info exists FormatDesNumerosPourCollection]} { unset FormatDesNumerosPourCollection } if {[info exists FormatDesNumerosPourCollection]} { return $FormatDesNumerosPourCollection } set Fichier "$RepertoireDuGenome/fiches/format_orf_numbering" if {[file exists $Fichier]} { scan [ContenuDuFichier $Fichier] "%s" FormatDesNumerosPourCollection return $FormatDesNumerosPourCollection } set FormatDesNumerosPourCollection "" while {$FormatDesNumerosPourCollection==""} { if {$OrfNumbering==""} { FaireLire "Howmany digits do we use for ORF numbering ? \n(1 from 1 to 9, 2 from 01 to 99, 3 from 001 to 999, etc.)" set N [Entre 3] } else { set N $OrfNumbering } if {[regexp {^[1-9]+$} $N]} { break } if {$OrfNumbering!=""} { FaireLire "Illegal OrfNumbering $OrfNumbering. I'll ask you for a correct value." } set OrfNumbering "" } set FormatDesNumerosPourCollection "$N.${N}d" Sauve $FormatDesNumerosPourCollection dans $Fichier return $FormatDesNumerosPourCollection } proc FormatDesNumerosPourCollectionDuGenome {{Genome ""}} { if {$Genome==""} { set Genome [RepertoireDuGenome] } if { ! [regexp "/" $Genome]} { set Genome "[GscopeDatabaseDir $Genome]" } set Fichier "$Genome/fiches/format_orf_numbering" if {[FileExists $Fichier]} { scan [ContenuDuFichier $Fichier] "%s" F return $F } set FichierBornes "$Genome/fiches/bornesdespabs" scan [ContenuDuFichier $FichierBornes] "%s" PremierNom if { ! [regexp {[0-9]+$} $PremierNom Match]} { return "" } set N [string length $Match] return "$N.${N}d" } proc FormatDesNumerosPourCollectionDuProjet {{Projet ""}} { return [FormatDesNumerosPourCollectionDuGenome $Projet] } proc FormatDuFichierSequence {file} { if {[file exists $file]} { set l [ContenuDuFichier $file] } else { set l $file } set l [string trimleft $l "\n"] set Entete [string range $l 0 5] switch -regexp $Entete { {^\<\?xml } {set fmt XML} {^\} {set fmt TFA} {^SQLite} {set fmt ORD} {^CLUSTA} {set fmt ALN} default {set fmt "unknown"} } if {$fmt eq "unknown"} { set Lt [split [string range $l 0 2000] "\n"] set Ix [lsearch -regexp $Lt {MSF:.+Type:.+Check:.+\.\.}] if {$Ix != -1} {set fmt MSF} } return $fmt } proc FormatMode {mode} { array set modes { 0 --- 1 --x 2 -w- 3 -wx 4 r-- 5 r-x 6 rw- 7 rwx } set mode [format %o [expr $mode & 07777]] set owner $modes([string index $mode 0]) set group $modes([string index $mode 1]) set world $modes([string index $mode 2]) return "${owner}${group}${world}" } proc FormatSize {size} { set string "" while { $size > 0 } { set rem [expr $size % 1000] set size [expr $size / 1000] if { $size > 0 } { set rem [format "%03d" $rem] } if { $string != "" } { set string "$rem,$string" } else { set string "$rem" } } return $string } proc FormatageEntete {Entete {PourQui ""} {P ""}} { JeMeSignale set BelleEntete $Entete if {[regexp "sequencing oligo" $Entete]} { set LesSeqOli {} foreach E [split $Entete "+"] { scan $E "%s" SeqOli if {$LesSeqOli!={}} { regsub {SeqOli(Rac|)_} $SeqOli " " SeqOli } lappend LesSeqOli $SeqOli } if {$P!=""} { set BelleEntete "$P " } else { set BelleEntete "" } append BelleEntete [join $LesSeqOli " "] return $BelleEntete } if {[regexp "mutation oligo" $Entete]} { set LesMutOli {} foreach E [split $Entete "+"] { scan $E "%s" MutOli if {$LesMutOli!={}} { regsub {MutOli(Rac|)_} $MutOli " " MutOli } lappend LesMutOli $MutOli } if {$P!=""} { set BelleEntete "$P " } else { set BelleEntete "" } append BelleEntete [join $LesMutOli " "] return $BelleEntete } if {$PourQui==""} { set PourQui "PourCommande" } set TM "" if {[regexp { tm[53]p_[0-9]+} $Entete Match]} { set TM [string trim $Match] } set LesLis [DecomposeLaLigne $Entete] Espionne $LesLis set LesSujets [lindex $LesLis 0] set LesAvs [lindex $LesLis 1] set LesAps [lindex $LesLis 2] set Sujet [join $LesSujets " "] set SigAv [join $LesAvs "_"] set SigAp [join $LesAps "_"] if {[regexp "PourOligo" $PourQui]} { if {$SigAv!=""} { if {[regexp "BrocOli" $Entete] && [regexp "PourOligoNonBrocOli" $PourQui]} { set SigAvNB [StringApres " replaces " dans $Entete] Espionne $SigAvNB if {$SigAvNB==""} { FaireLire "Ca merde avec le BrocOli $Entete" } else { set SigAv $SigAvNB } } set BelleEntete "$P 5' oligo with signal $SigAv for $Sujet" } if {$SigAp!=""} { if {[regexp "BrocOli" $Entete] && [regexp "PourOligoNonBrocOli" $PourQui]} { set SigApNB [StringApres " replaces " dans $Entete] if {$SigApNB==""} { FaireLire "Ca merde avec le BrocOli $Entete" } else { set SigAp $SigApNB } } set BelleEntete "$P 3' oligo with signal $SigAp for $Sujet" } if {$SigAv=="" && $SigAp==""} { set BelleEntete "$P oligo without signal for $Sujet" } if {[regexp "BrocOli" $Entete]} { if {[regexp "PourOligoNonBrocOli" $PourQui]} { set CuttedSignal [StringApres "BrocOli with" dans $Entete] set FullSignal [StringApres " replaces " dans $Entete] set TexteBrocOli "RebuildedBrockenOli of $CuttedSignal" } else { set TexteBrocOli "BrocOli [StringSuivant "BrocOli " dans $Entete] seeFull AfterMe" } append BelleEntete " $TexteBrocOli" } } if {$PourQui=="PourCommande"} { set PremierSujet [lindex $LesSujets 0] set Racine "trululuturlu" if {[regexp {^[^\-]+\-} $PremierSujet Match]} { set Racine $Match } set LesAutresSujets {} foreach AutreSujet [lrange $LesSujets 1 end] { regsub $Racine $AutreSujet "" AutreSujet lappend LesAutresSujets $AutreSujet } set AutresSujets "[join $LesAutresSujets " "]" if {$P!=""} { set BelleEntete "$P " } else { set BelleEntete "" } set TexteBrocOli "" if {[regexp "BrocOli" $Entete]} { set TexteBrocOli " BrocOli [StringSuivant "BrocOli " dans $Entete]" } if {$SigAv!=""} { append BelleEntete "${SigAv}_$PremierSujet $AutresSujets $TexteBrocOli $TM" } if {$SigAp!=""} { append BelleEntete "${PremierSujet}_$SigAp $AutresSujets $TexteBrocOli $TM" } if {$SigAv=="" && $SigAp==""} { append BelleEntete "$PremierSujet $AutresSujets $TexteBrocOli $TM" } } return $BelleEntete } proc FormateEC {EC} { regsub -all {[^0-9\.\-]} $EC "" EC return $EC } proc FormateLeFichierTFA {{FichierTFA ""} {FichierOut ""} {Modification 1}} { Wup "Permet d ajouter comme access query_protein et de retourner le vrai access dans le fichier TFA" if {! [file exists $FichierTFA] || $FichierTFA == ""} {return "-1"} #Creation du Fichier TFA utilise pour l alignement #On recupere l access (premier mot apres le chevron ">") #On ajoute query_protein a la place qui sera utilise par clustalw #Si modification est a 1 on ecrit dans le fichier set FileTmp "${FichierTFA}_tmp" if {[file exists $FileTmp]} { file delete -force $FileTmp } set LesLignes "" set F [open "$FichierTFA"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { set LigneSplitee [split $Ligne " "] set Access [lindex $LigneSplitee 0] regsub "^>" $Access "" Access set Access [string tolower $Access] if {$Modification && $Access!="query_protein"} { regsub -nocase "^>$Access" $Ligne ">query_protein $Access" Ligne } } lappend LesLignes $Ligne } close $F AppendAuFichier $FileTmp [join $LesLignes "\n"] regsub -all {\|} $Access "_" Access #On supprime le fichier original et on le remplace par le nouveau avec query_protein if {$FichierOut == ""} { file delete -force $FichierTFA file copy -force $FileTmp $FichierTFA } else { file copy -force $FileTmp $FichierOut } file delete -force $FileTmp return $Access } proc FormateLesCoordonnees {args} { foreach aC $args { upvar $aC C set LeF {} foreach N [split $C " "] { set FN [format "%.1f" $N] lappend LeF $FN } set C [join $LeF " "] } return } proc FormateSequence {Sequence {NouveauFormat ""} {AncienFormat ""}} { if {$AncienFormat==""} { set AncienFormat [FormatDeLaSequence $Sequence] } if {$NouveauFormat==""} { set LesNouveauxPossibles [list "to-TFA-without-numbers" "to-TFA" "to-EMBL" "to-GCG" "nuc-to-prot-TFA" "nuc-to-prot-EMBL" "nuc-to-prot-GCG" "TFA-to-reverse-TFA" "TFA-to-complement-TFA" "TFA-to-rev-and-comp-TFA" "nuc-to-reverse" "nuc-to-complement" "nuc-to-rev-and-comp" ] set N [llength $LesNouveauxPossibles] set I [ChoixParmiJoli [NombresEntre 1 $N] "" $LesNouveauxPossibles] if {$I==""} { return "" } set NouveauFormat [lsearch $LesNouveauxPossibles [expr $I-1]] } if { $AncienFormat == "tfas" && $NouveauFormat == "to-GCG" } { FaireLire "Multiple TFA to GCG is not yet possible" return "" } set II 0 if { $I==[incr II]} { return [TexteTfaFromTexteTfaWithoutNumbers $Sequence]} if { $I==[incr II]} { return [SequenceFormatTFA $Sequence "" $AncienFormat]} if { $I==[incr II]} { return [SequenceFormatEMBL $Sequence "" $AncienFormat]} if { $I==[incr II]} { return [SequenceFormatGCG $Sequence "" $AncienFormat]} if { $I==[incr II]} { return [NucToProtTFA $Sequence "" $AncienFormat]} if { $I==[incr II]} { return [NucToProtEMBL $Sequence "" $AncienFormat]} if { $I==[incr II]} { return [NucToProtGCG $Sequence "" $AncienFormat]} if { $I==[incr II]} { return [TFAToReverseTFA $Sequence ""]} if { $I==[incr II]} { return [TFAToComplementTFA $Sequence ""]} if { $I==[incr II]} { return [TFAToReverseAndComplementTFA $Sequence ""]} if { $I==[incr II]} { return [NucToReverseNuc $Sequence]} if { $I==[incr II]} { return [NucToComplementNuc $Sequence]} if { $I==[incr II]} { return [NucToReverseAndComplementNuc $Sequence]} return "" } proc FormeBidon {} { set Lx [list [list [list 0.0 0.0 0.0] [list 2.0 0.0 0.0] [list 0.0 2.0 0.0] [list 0.0 0.0 2.0]]] set La [list [list 1 29 29 29]] set bb [list 0.0 2.0 0.0 2.0 0.0 2.0] set Lc [list 1.0 1.0 1.0] set Laai [list] foreach rx $Lx lna $La { foreach v $rx an $lna { lassign $v x y z lappend Laai [list $x $y $z $an 1] } } package require tsurf global Ltrig Lnorm Lvert lassign [tsurf -expand 2 -contract 2 -smooth -connolly $Laai] Lvec Lnrm foreach {a b c d e f g h i} $Lvec { set v1 [list $a $b $c] set v2 [list $d $e $f] set v3 [list $g $h $i] lappend Lvert $v1 $v2 $v3 set t [list $v1 $v2 $v3] lappend Ltrig $t } set Lnorm [list] foreach {x y z} $Lnrm { lappend Lnorm [list $x $y $z] } #lassign [SortTriangles $Ltrig $Lnorm] Ltrig Lnorm return #Atomes2Grille $bb $Lc $Lx $La #exit } proc FormulaireOliWeb {} { set LH {} lappend LH [H_Open [H_BalAtt [H_Pivot] FORM "ACTION [WscopeServer]?ProGS&TraiteOliWebOrder METHOD post"]] lappend LH "Select all 5' signals" lappend LH [H_BR] lappend LH [H_MorceauxChoisis [LesSignaux] "SigAv"] lappend LH [H_BR] lappend LH "Cut and Paste your nucleic sequence" lappend LH [H_BR] lappend LH [H_TexteArea "" "Sequence"] lappend LH [H_BR] lappend LH "If necessary give fragment limits" lappend LH [H_TexteArea "" "Fragment" 1 20] lappend LH " please use following conventions" lappend LH [H_Open [H_Balise [H_Pivot] PRE]] lappend LH "Counting AMINO ACIDS :" lappend LH " 25 58 (from Amino acid 25 to Amino Acid 58) ***USE ONLY NUMBERS***)" lappend LH "or G25 H58 (from Glycine 25 to Histidine 58 ***USE UPPERCASE LETTERS***)" lappend LH "Counting NUCLEIC BASES :" lappend LH " g62 n97 (from guanine 62 to base 97 ***USE LOWERCASE LETTERS***)" lappend LH [H_Close] lappend LH "Select all 3' signals" lappend LH [H_MorceauxChoisis [LesSignaux] "SigAp"] lappend LH [H_BalAtt "" INPUT "VALUE Reset TYPE reset"] lappend LH [H_BalAtt "" INPUT "VALUE Submit TYPE submit"] lappend LH [H_Close] return [join $LH "\n"] } proc FouR {Debut Fin} { if {$Debut <= $Fin} { return "F" } else { return "R" } } proc FouinePourLesAccess {LesAccess {RepParent ""}} { if {$RepParent==""} { set RepParent "." } set TousLesFichiersCrees {} foreach Access $LesAccess { set Rep "$RepParent/$Access" if { ! [file exists $Rep]} { file mkdir $Rep } set MesFichiersCrees [FouinePourUnAccess $Access $Rep] if {[regexp "^Show" $MesFichiersCrees]} { return $MesFichiersCrees } LConcat TousLesFichiersCrees $MesFichiersCrees } return $TousLesFichiersCrees } proc FouinePourLesAccessX {LesAccess {RepParent ""}} { if {$RepParent==""} { set RepParent "." } set TousLesFichiersCrees {} foreach Access $LesAccess { set Rep "$RepParent/$Access" if { ! [file exists $Rep]} { file mkdir $Rep } set MesFichiersCrees [FouinePourUnAccessX $Access $Rep] if {[regexp "^Show" $MesFichiersCrees]} { return $MesFichiersCrees } LConcat TousLesFichiersCrees $MesFichiersCrees } return $TousLesFichiersCrees } proc FouinePourUnAccess {{Access ""} {Rep ""}} { if {$Rep==""} { set Rep "." } if {$Access==""} { FaireLire "Please give an accession number of a protein" set Access [Entre "P10827"] } set Sequence "" catch { set TexteEmbl [join [LaSequenceDesBanques $Access] "\n"] set Sequence [QueLaSequenceDuTexteEMBL $TexteEmbl] } #GLOBPLOT #http://globplot.embl.de/cgiDict.py?key=process&SP_entry=PRIO_HUMAN #http://globplot.embl.de/cgiDict.py?key=process&sequence_string=SEQ #modifie pour avoir la sequence au lieu du SP?? set Site "http://globplot.embl.de/cgiDict.py" set Url $Site append Url "?key=" append Url "process" append Url "&SP_entry=" append Url $Access append Url "&sequence_string=" append Url "" append Url "¶ms=" append Url "RL" append Url "&peak_frame_dis=" append Url 5 append Url "&join_frame_dis=" append Url 4 append Url "&do_smart=" append Url "true" append Url "&peak_frame_dom=" append Url 74 append Url "&join_frame_dom=" append Url 15 append Url "&plot_title=" append Url "titreduplot" #Perform SMART/Pfam domain prediction #les parametres ne sont pas les meme que les parametres par defaut du site web #ici les valeurs sont 5 et 5 , sur le site 10 et 10 append Url "&smooth_frame_1=" append Url 10 append Url "&smooth_frame_2=" append Url 10 set LesLignes {} Espionne "Je surfe sur $Url" if {[catch {HttpCopy $Url LesLignes} Message]} { return "Show $Message" } if {$LesLignes!={}} { set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_GlobPlotResultat.html"] lappend LesFichiersCrees $Fic } #DisEMBL set Site "http://dis.embl.de/cgiDict.py" set LesCVs {} lappend LesCVs "key=process" lappend LesCVs "SP_entry=$Access" lappend LesCVs "sequence_string=" lappend LesCVs "smooth_frame=8" lappend LesCVs "peak_frame=8" lappend LesCVs "join_frame=4" lappend LesCVs "fold_coils=1.20" lappend LesCVs "fold_rem465=1.20" lappend LesCVs "fold_hotloops=1.40" lappend LesCVs "plot_title=" lappend LesCVs "doApplet=true" lappend LesCVs "tango_PH=7.40" lappend LesCVs "tango_T=278.15" lappend LesCVs "tango_I=0.05" lappend LesCVs "tango_TFE=0.00" lappend LesCVs "fold_tango=1.00" set CVs [join $LesCVs "&"] set Url "$Site?$CVs" set LesLignes {} Espionne "Je surfe sur $Url" catch {HttpCopy $Url LesLignes} if {$LesLignes!={}} { set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_DisEmblResultat.html"] lappend LesFichiersCrees $Fic } #Disopred if {0} { set Site "http://bioinf.cs.ucl.ac.uk:8000/servlet/DisoPack.jonservlet" set LesCVs {} lappend LesCVs "Sequence=$Sequence" lappend LesCVs "falseRate=2" lappend LesCVs "SecStructPred=on" lappend LesCVs "Output=opnone" lappend LesCVs "Email=brelivet@igbmc.u-strasbg.fr" lappend LesCVs "ShortName=toto" set CVs [join $LesCVs "&"] set Url "$Site?$CVs" set LesLignes {} Espionne "Je surfe sur $Url" # catch {HttpCopy $Url LesLignes} if {$LesLignes!={}} { EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_DisopredResultat.html"] lappend LesFichiersCrees $Fic } } #FoldIndex if {$Sequence!=""} { set Site "http://bip.weizmann.ac.il/fldbin/findex" set LesCVs {} lappend LesCVs "fn=zzz" lappend LesCVs "w=51" lappend LesCVs "t=1" lappend LesCVs "sq=$Sequence" lappend LesCVs "ys=1.0" set CVs [join $LesCVs "&"] set Url "$Site?$CVs" set LesLignes {} #Espionne "Je surfe sur $Url" catch {HttpCopy $Url LesLignes} if {$LesLignes!={}} { #EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_FoldindexResultat.html"] lappend LesFichiersCrees $Fic } } #Ronn if {$Sequence!=""} { set Site "http://www.strubi.ox.ac.uk/RONN" set Query [::http::formatQuery sequence $Sequence display_probs n] set LesLignes {} #Espionne "Je surfe sur $Site\npar post de\n$Query" catch {HttpCopy $Site LesLignes $Query} if {$LesLignes!={}} { #EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_RonnResultat.html"] lappend LesFichiersCrees $Fic } } #Norsp if {0} { set Site "http://cubic.bioc.columbia.edu/cgi-bin/var/database/norsp/submit" set LesCVs {} lappend LesCVs "usr-email=brelivet@igbmc.u-strasbg.fr" lappend LesCVs "sequence=$Sequence" lappend LesCVs "opt-nors-verbose=1" lappend LesCVs "opt-ret-html=0" lappend LesCVs "opt-ret-store=1" lappend LesCVs "opt-esp-nors-ws=70" lappend LesCVs "opt-exp-nors-seccut=12" lappend LesCVs "opt-exp-nors-acclen=0" set CVs [join $LesCVs "&"] set Url $Site set Query $CVs #Espionne "Je surfe sur $Url" # catch {HttpCopy $Url LesLignes $Query} if {$LesLignes!={}} { #EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_NorspResultat.html"] lappend LesFichiersCrees $Fic } } return $LesFichiersCrees } proc FouinePourUnAccessX {{Access ""} {Rep ""}} { if {$Rep==""} { set Rep "." } if {$Access==""} { FaireLire "Please give an accession number of a protein" set Access [Entre "P10827"] } set Sequence "" catch { set TexteEmbl [join [LaSequenceDesBanques $Access] "\n"] set Sequence [QueLaSequenceDuTexteEMBL $TexteEmbl] } if {$Sequence==""} { set list [split $Rep "/"] set Fichier [RepertoireDuGenome]/tfasdescopains/[lindex $list [llength $list]-2] #Espionne "Fichier: $Fichier" set TFA [LaSequenceDuTFAs $Fichier $Access] set Sequence [QueLaSequenceDuTexteTFA $TFA] #Espionne "Sequence: $Sequence" # set ::attente 0 # after 3000 {set ::attente 1} # vwait ::attente } #GLOBPLOT #http://globplot.embl.de/cgiDict.py?key=process&SP_entry=PRIO_HUMAN #http://globplot.embl.de/cgiDict.py?key=process&sequence_string=SEQ #modifie pour avoir la sequence au lieu du SP?? set Site "http://globplot.embl.de/cgiDict.py" set Url $Site append Url "?key=" append Url "process" append Url "&SP_entry=" append Url $Access append Url "&sequence_string=" #modif avant append Url "" append Url $Sequence append Url "¶ms=" append Url "RL" append Url "&peak_frame_dis=" append Url 5 append Url "&join_frame_dis=" append Url 4 append Url "&do_smart=" append Url "true" append Url "&peak_frame_dom=" append Url 74 append Url "&join_frame_dom=" append Url 15 append Url "&plot_title=" append Url "titreduplot" #Perform SMART/Pfam domain prediction #les parametres ne sont pas les meme que les parametres par defaut du site web #ici les valeurs sont 5 et 5 , sur le site 10 et 10 append Url "&smooth_frame_1=" append Url 10 append Url "&smooth_frame_2=" append Url 10 set LesLignes {} #Espionne "Je surfe sur $Url" if {[catch {HttpCopy $Url LesLignes} Message]} { return "Show $Message" } if {$LesLignes!={}} { set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_GlobPlotResultat.html"] lappend LesFichiersCrees $Fic #Espionne "SauveLesLignes globplot" } #DisEMBL set Site "http://dis.embl.de/cgiDict.py" set LesCVs {} lappend LesCVs "key=process" lappend LesCVs "SP_entry=$Access" lappend LesCVs "sequence_string=$Sequence" lappend LesCVs "smooth_frame=8" lappend LesCVs "peak_frame=8" lappend LesCVs "join_frame=4" lappend LesCVs "fold_coils=1.20" lappend LesCVs "fold_rem465=1.20" lappend LesCVs "fold_hotloops=1.40" lappend LesCVs "plot_title=" lappend LesCVs "doApplet=true" lappend LesCVs "tango_PH=7.40" lappend LesCVs "tango_T=278.15" lappend LesCVs "tango_I=0.05" lappend LesCVs "tango_TFE=0.00" lappend LesCVs "fold_tango=1.00" set CVs [join $LesCVs "&"] set Url "$Site?$CVs" set LesLignes {} #Espionne "Je surfe sur $Url" catch {HttpCopy $Url LesLignes} if {$LesLignes!={}} { set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_DisEmblResultat.html"] lappend LesFichiersCrees $Fic } #Disopred if {0} { set Site "http://bioinf.cs.ucl.ac.uk:8000/servlet/DisoPack.jonservlet" set LesCVs {} lappend LesCVs "Sequence=$Sequence" lappend LesCVs "falseRate=2" lappend LesCVs "SecStructPred=on" lappend LesCVs "Output=opnone" lappend LesCVs "Email=brelivet@igbmc.u-strasbg.fr" lappend LesCVs "ShortName=toto" set CVs [join $LesCVs "&"] set Url "$Site?$CVs" set LesLignes {} #Espionne "Je surfe sur $Url" # catch {HttpCopy $Url LesLignes} if {$LesLignes!={}} { #EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_DisopredResultat.html"] lappend LesFichiersCrees $Fic } } #FoldIndex if {$Sequence!=""} { set Site "http://bip.weizmann.ac.il/fldbin/findex" set LesCVs {} lappend LesCVs "fn=zzz" lappend LesCVs "w=51" lappend LesCVs "t=1" lappend LesCVs "sq=$Sequence" lappend LesCVs "ys=1.0" set CVs [join $LesCVs "&"] set Url "$Site?$CVs" set LesLignes {} #Espionne "Je surfe sur $Url" catch {HttpCopy $Url LesLignes} if {$LesLignes!={}} { #EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_FoldindexResultat.html"] lappend LesFichiersCrees $Fic } } #Ronn if {$Sequence!=""} { set Site "http://www.strubi.ox.ac.uk/RONN" set Query [::http::formatQuery sequence $Sequence display_probs n] set LesLignes {} #Espionne "Je surfe sur $Site\npar post de\n$Query" catch {HttpCopy $Site LesLignes $Query} if {$LesLignes!={}} { #EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_RonnResultat.html"] lappend LesFichiersCrees $Fic } } #Norsp if {0} { set Site "http://cubic.bioc.columbia.edu/cgi-bin/var/database/norsp/submit" set LesCVs {} lappend LesCVs "usr-email=brelivet@igbmc.u-strasbg.fr" lappend LesCVs "sequence=$Sequence" lappend LesCVs "opt-nors-verbose=1" lappend LesCVs "opt-ret-html=0" lappend LesCVs "opt-ret-store=1" lappend LesCVs "opt-esp-nors-ws=70" lappend LesCVs "opt-exp-nors-seccut=12" lappend LesCVs "opt-exp-nors-acclen=0" set CVs [join $LesCVs "&"] set Url $Site set Query $CVs #Espionne "Je surfe sur $Url" # catch {HttpCopy $Url LesLignes $Query} if {$LesLignes!={}} { #EspionneL $LesLignes set Fic [SauveLesLignes $LesLignes dans "$Rep/${Access}_NorspResultat.html"] lappend LesFichiersCrees $Fic } } return $LesFichiersCrees } proc FouinePourUnMsf {FichierMsf {RepParent ""}} { if {$RepParent==""} { set RepParent "." } set NombreDeSequences [DecortiqueUnMSF $FichierMsf LesSequencesDansLOrdre] set TousLesFichiers [FouinePourLesAccess $LesSequencesDansLOrdre $RepParent] } proc FouinePourUnMsfX {FichierMsf {RepParent ""}} { if {$RepParent==""} { set RepParent "." } set NombreDeSequences [DecortiqueUnMSF $FichierMsf LesSequencesDansLOrdre] #est-ce que le set sert à quelque chose. set TousLesFichiers [FouinePourLesAccessX $LesSequencesDansLOrdre $RepParent] } proc FourBasesOverlap {} { foreach f [glob "/genomics/*/fiches/overlap"] { set Genome [file tail [file dirname [file dirname $f]]] set L [llength [LesLignesDuFichier $f]] if {$L==0} { continue } set N [regexp -all " 4 bases. I begin" [ContenuDuFichier $f]] set P [expr (100*$N)/$L] lappend Sortie [format "%2d%s %s" $P "%" $Genome] } return $Sortie } proc Fourmis {{X ""} {Y ""} {S ""} {H ""} {L ""} {W ""}} { LesDefauts source /home/ripp/gscope/gscope_fourmis.tcl global TFB if {$X!=""} { set TFB(dimX) $X } if {$Y!=""} { set TFB(dimY) $Y } if {$S!=""} { set TFB(step) $S } if {$H!=""} { set TFB(headFourmi) $H } if {$L!=""} { set TFB(lenFourmi) $L } if {$W!=""} { set TFB(widFourmi) $W } return [DrawFourmis] } proc Fournisseur {P {Val ""}} { global Fournisseur if {$Val!=""} { if { ! [info exists Fournisseur($P)]} { set Fournisseur($P) $Val lappend Fournisseur(LaListeDesPs) $P } else { append Fournisseur($P) $Val } return [set Fournisseur(LaListeDesPs)] } if {[info exists Fournisseur($P)]} { return [set Fournisseur($P)] } if {[info exists Fournisseur("EstCharge")]} { return "" } set Fournisseur("EstCharge") 1 array set Fournisseur [LesLignesDuFichier "[RepertoireDuGenome]/fiches/fournisseur"] foreach PLu [array names Fournisseur] { scan [set Fournisseur($PLu)] "%s" Fournis lappend Fournisseur($Fournis) $PLu lappend Fournisseur(LaListeDesPs) $PLu } return [Fournisseur $P] } proc FragFrom {Nom {Start ""} {StopVoulu ""}} { if {$Start==""} { set Start [Entre 1] } if {$StopVoulu==""} { set StopVoulu 999999 } scan $Start "%d %d" Start StopVoulu set Seq "n[QueLaSequenceDuFichierTFA [GscopeFile $Nom nuctfa]]" set Frag [string range $Seq $Start end] set Stop [expr $Start+2] set YaStop 0 set NewNuc "" foreach {A B C} [split "${Frag}zzz" ""] { if {$C=="z"} { break } set Codon "$A$B$C" append NewNuc $Codon if {[CodonStopPossible $Codon]} { if {$Stop<$StopVoulu && [OuiOuNon "I found a Stop at $Stop < your stop $StopVoulu\nDo I ignore it ?"]} { } else { set YaStop 1 break } } if {$StopVoulu<=$Stop} { break } incr Stop 3 } set Entete "$Nom-$Start-$Stop" if { ! $YaStop} { append Entete " stop not in the original sequence" } set NewPro [SeqNucToSeqPro $NewNuc] set ProTFA [SequenceFormatTFA $NewPro $Entete "protbrut"] set NucTFA [SequenceFormatTFA $NewNuc $Entete "nucbrut"] regsub -all " " $Entete "_" E set FN [AfficheVariable $NucTFA "AvecFormate" "Nucleic_Fragment_of_$E"] set FP [AfficheVariable $ProTFA "AvecFormate" "Proteic_Fragment_of_$E"] return $FN } proc FragmentDuFichierTFA {FichierTFA {Debut ""} {Fin ""} {Comment ""} {FichierSortie ""}} { set Entete [EnteteDuFichierTFA $FichierTFA] set Seq [QueLaSequenceDuFichierTFA $FichierTFA] set Long [string length $Seq] while {$Debut==""} { set DF [Entre "1 $Long"] set Fin "" scan $DF "%d %d" Debut Fin if {$Fin==""} { set Debut "" } } set D $Debut set F $Fin incr D -1 incr F -1 set Frag [string range $Seq $D $F] regsub { |$} $Entete "-$Debut-$Fin " NouvelleEntete set TFA [SequenceFormatTFA $Frag "$NouvelleEntete" brut] if {[string equal -nocase $Comment "sequence"]} { return $Frag } if {[string equal -nocase $Comment "tfa"]} { return $TFA } if {[string equal -nocase $Comment "file"]} { if {$FichierSortie==""} { set FichierSortie [FichierPourSaveAs]} return [Sauve $TFA dans $FichierSortie] } return $TFA } 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 Frechin {} { foreach Ligne [LesLignesVitales AllGat.txt] { if {[regexp ".txt" $Ligne]} { set Ftxt $Ligne continue } scan $Ligne "%s" Access set Seq [QueLaSequenceDuFichierTFA $Ftxt] set TFA [SequenceFormatTFA $Seq $Ligne "nucbrut"] Espionne $TFA Sauve $TFA dasn "$Access.tfa" lappend LesNouveaux "$Access /genomics/link/ProGS/atelier/Frechin/$Access.tfa" } return $LesNouveaux } proc FreewrapGscope {{GscopeExeDestin ""} {RepDestin ""} {RepRepDestin ""}} { if { ! [OuiOuNon "Ok to create gscope.exe with freewrap ?"]} { return ""} while {$GscopeExeDestin==""} { set GscopeExeDestin [FichierPourSaveAs "[GscopeDir]/gscope.exe"] if {$GscopeExeDestin!=""} { break } if {[OuiOuNon "Do I cancel freewrap of gscope ?"]} { return ""} } set LesSourcesDeGscope [LesSourcesDeGscope "Relatif" "AvecMain"] set RepSource [GscopeDir] while {$RepDestin=="" || [regexp " " $RepDestin] } { set RepDestin [TmpFile GscopeToWrap $RepRepDestin] if {[regexp " " $RepDestin]} { FaireLire "It seems that the name of the temporary directory\n$RepDestin\n contains unwanted characters (' '). Please browse for a directory where I can create this directory." set RepRepDestin [ChoixDuRepertoire] } } set LesBonsSourcesDeGscope {} foreach Source $LesSourcesDeGscope { set FicSource "$RepSource/$Source" if { ! [file exists $FicSource]} { FaireLire "I can't find $Fichier. \nI'll skipp" } regsub $RepSource $FicSource $RepDestin FicDestin set Rep [file dirname $FicDestin] while {[CreeLeRepertoire $Rep]==""} { if {[OuiOuNon "I can't create $Rep. Do I stop ?"]} { return "" } } file copy $FicSource $FicDestin lappend LesBonsSourcesDeGscope $Source } set GscopeExe "$RepDestin/gscope.exe" NousAllonsAuBoulot $RepDestin SauveLesLignes $LesBonsSourcesDeGscope dans "LesSourcesPourFreewrap.txt" exec c:/bin/freewrap/freewrapBLT.exe -f LesSourcesPourFreewrap.txt OnRevientDuBoulot if { ! [file exists $GscopeExe]} { FaireLire "$GscopeExe\nwas not created. I'll cancel" return "" } while {[catch {file copy -force $GscopeExe $GscopeExeDestin} Message]} { if { ! [OuiOuNon "I couldn't copy \n $GscopeExe \n to \n $GscopeExeDestin\n Do I try again ?" 0]} { return "Error $GscopeExe not copied to $GscopeExeDestin" } } return $GscopeExeDestin } proc Friedlander {FichierFriedlander NotreFichierTot FichierSeqSelect FichierOUT} { foreach Nom [lsort -unique [LesNoms NomsInteressants]] {set Tab(Nom,$Nom) 1} set F [open $FichierSeqSelect] while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Nom [string toupper [string trim [lindex $LaLigne 0]]] if {![info exists Tab(Nom,$Nom)]} {continue} set Affy [string toupper [string trim [lindex $LaLigne 4]]] set Tab(AffySelected,$Affy) $Nom } set F [open $NotreFichierTot] while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Affy [string toupper [lindex $LaLigne 4]] set Acc [string toupper [lindex $LaLigne 3]] set Tab(NosDonnees,$Affy) $Ligne set Tab(NosDonnees,$Acc) $Ligne } close $F set i 0 set LesLignes {} set F [open $FichierFriedlander] while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set AiJeRencontrePouA 0 set AiJeRencontreAffy 0 set PosDePouA -1 set PouA "" set Affy "" foreach Element $LaLigne { if {!$AiJeRencontrePouA} {incr PosDePouA} if {!$AiJeRencontrePouA && $Element == "\"\"\"P\"\"\""} { set PouA "P" set AiJeRencontrePouA 1 } if {!$AiJeRencontrePouA && $Element == "\"\"\"A\"\"\"" } { set PouA "A" set AiJeRencontrePouA 1 } if {!$AiJeRencontreAffy && [regexp -nocase {_at$|_st$} $Element]} { set AiJeRencontreAffy 1 set Access $ElementDAvant set Affy $Element break } set ElementDAvant $Element } if {$Access == ""} {set Access $Affy} set Access [string trim [string toupper $Access]] set Affy [string trim [string toupper $Affy ]] set LesExpressions [lrange $LaLigne [expr $PosDePouA] [expr $PosDePouA + 8]] if {!$AiJeRencontrePouA} {Espionne coucou; break} if {!$AiJeRencontreAffy} {Espionne coucou; break} if {![info exists Tab(NosDonnees,$Affy)]} { if {![info exists Tab(NosDonnees,$Acc)]} { Espionne $Ligne continue } else { set InfosDeNosDonnees [set Tab(NosDonnees,$Acc)] } } else { set InfosDeNosDonnees [set Tab(NosDonnees,$Affy)] } incr i set Selected "" if {[info exists Tab(AffySelected,$Affy)]} { set Selected [set Tab(AffySelected,$Affy)] } set Expressions [join $LesExpressions "\t"] lappend LesLignes "$InfosDeNosDonnees\t$Access\t$Affy\t$Expressions\t$Selected" } close $F Espionne $i Sauve [join $LesLignes "\n"] dans $FichierOUT return } proc FroMac {args} { if {[PourWscope]} { return [FromMacsim {*}$args] } set Commande "ret FromMacsim [join $args { }]" set Res [QuestionDeScience Zero $Commande] return $Res } proc FromDbClustalToLeon {Nom} { set FichierDbClustal "[RepertoireDuGenome]/msfdbclustal/$Nom" set FichierRascal "[RepertoireDuGenome]/msfrascal/$Nom" set FichierLeon "[RepertoireDuGenome]/msfleon/$Nom" if {[]} {} } proc FromDisphy {NomOuFichier} { global RepertoireDuGenome global FromDisphy Wup "returns the list of all accesses and stores the distances in memory" set M [string toupper $NomOuFichier] if {[info exists FromDisphy($M)]} { return [set FromDisphy($M)] } if {[info exists FromDisphy]} { unset FromDisphy } set Nom [file tail $NomOuFichier] set FichierDisphy $NomOuFichier if { ! [file exists $FichierDisphy]} { set FichierDisphy "$RepertoireDuGenome/disphy/$Nom" } if { ! [file exists $FichierDisphy]} { return {} } set LesAccess {} foreach Ligne [LesLignesDuFichier $FichierDisphy] { set Access "" scan $Ligne "%s %s %s" Orga Dis Access if {$Access==""} { continue } set ACCESS [string toupper $Access] set FromDisphy($ACCESS) $Dis lappend LesAccess $Access } set FromDisphy($NomOuFichier) $LesAccess return $LesAccess } proc FromDisphyOf {A B} { FromDisphy $A return [FromDisphy $B] } proc FromDumpOrdaliToCanvasOrHtml {Dump {KorH ""} {DecalX 0} {DecalY 0} {aExtremeX ""} {aExtremeY ""}} { global CouleurTag global GaucheOrdali if {$aExtremeX!=""} { upvar $aExtremeX ExtremeX } if {$aExtremeY!=""} { upvar $aExtremeY ExtremeY } set TexteHTML "" if {[regexp {^\.} $KorH] && ![regexp "/" $$KorH]} { set K $KorH set OnCanva 1 set OnHTML 0 } else { set FichierHTML $KorH set K "" if {$FichierHTML==""} { set FichierHTML "[TmpFile ordali].html" } set OnCanva 0 set OnHTML 1 } set CouleurTag "CouleurTagParDefaut" set LeDump [split $Dump "\n"] set Fonte [ValeurDeLaBalise "font" Dump "Rogner"] set Tags [ValeurDeLaBalise "tags" Dump "Rogner"] set Regle [ValeurDeLaBalise "regle" Dump "Rogner"] set Noms [ValeurDeLaBalise "noms" Dump "Rogner"] set Texte [ValeurDeLaBalise "texte" Dump "Rogner"] regsub -all "\n" $Regle "" Regle regsub -all "\n" $Noms "" Noms regsub -all "\n" $Texte "" Texte eval set LesCouleurs [list $Tags] if {$OnCanva} { CouleurOrdali "Create" $LesCouleurs } if {$OnHTML } { append TexteHTML "Ordali" CouleurOrdali "CreateHTML" $LesCouleurs TexteHTML append TexteHTML "\n
"
    }

    set AttendFermante 0
    set ExtremeX $DecalX
    set ExtremeY $DecalY
    
    foreach {Action TexteDesToken} [list  "Nommer" $Noms   "RegleH" $Regle  "Taguer" $Texte  "RegleB" $Regle ] {
	foreach Token [split $TexteDesToken " "] {
	    if {[regexp {\}$} $Token]} {
		set AttendFermante 0
		if {[info exists Mot]} {
		    append Mot " $Token"
		} else {
		    set Mot $Token
		}
	    }
	    if {$AttendFermante} {
		append Mot " $Token"
		continue
	    }
	    if { ! [info exists Mot] && [regexp {^\{} $Token]} {
		set AttendFermante 1
		set Mot $Token
		continue
	    }
	    
	    if { ! [info exists Mot]} {
		set Mot $Token
	    }
	    
	    if { ! [info exists Key]} {
		set Key $Mot
		unset Mot
		continue
	    }
	    if { ! [info exists Value]} {
		set Value $Mot
		unset Mot
		continue
	    }
	    set Index $Mot
	    
	    switch $Key {
		"tagon"   { Tagon  $Value $Index $K } 
		"tagoff"  { Tagoff $Value $Index $K } 
		"text"    {
		    if {$OnCanva} { set LoinXY [TextOnCanva $Value $Index $K $DecalX $DecalY]}
		    if {$OnHTML } {
			if {$Action=="RegleH"} { set Index [expr -$Index] }
			if {$Action=="RegleB"} { set Index [expr  $Index + 9999.0] }
			if {$Action=="Nommer"} {
			    set Y [expr int($Index)]
			    regsub -all -nocase {[^a-z0-9_]} $Value "" Nom
			    set GaucheOrdali($Y) $Nom
			} else {
			    set LoinXY [TextOnHTML  $Value $Index TexteHTML]
			    scan $LoinXY "%d %d" LoinX LoinY
			    set ExtremeX [Maxi $ExtremeX $LoinX]
			    set ExtremeY [Maxi $ExtremeY $LoinY]
			}
		    }
		} 
		"default" { }
	    }
	    unset Key Value Index Mot
	}
    }
    incr ExtremeX 1
    incr ExtremeY 1
    if {$OnHTML} {
	append TexteHTML "\n
\n\n" if {$FichierHTML=="RetourneTexteHTML"} { return $TexteHTML } else { return [Sauve $TexteHTML dans $FichierHTML] } } return $K } proc FromEutilsNCBI {Id {Db ""} {Format ""}} { if {$Db=="" && [regexp {^rs([0-9]+)$} $Id Match N]} { set Id $N set Db "snp" } if {$Format==""} { set Format "XML" } set Query "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=$Db&id=$Id&report=$Format" set Page [HttpGetTextFromUrl $Query] return $Page regsub -nocase {^.+]*>\n*} $Page "" Page regsub -nocase {.*} $Page "" Page regsub -all {\<} $Page "<" Page regsub -all {\>} $Page ">" Page regsub -all {\"} $Page "\"" Page return $Page } proc FromFasta {FichierTFA {FichierGCG ""}} { if {![file exists $FichierTFA]} { return "" } set FicGCG "[TmpFile].gcg" exec clustalw $FichierTFA -convert -output=gcg -outfile=$FicGCG if {[file exists $FicGCG]} { file copy -force $FicGCG $FichierGCG file delete $FicGCG return FichierGCG } FaireLire "FromFasta n'existe plus" #suite obsolete set FichierTFATmp "[TmpFile].tfa" file copy $FichierTFA $FichierTFATmp exec fromfasta -NUC $FichierTFATmp -LIS if {![file exists "fromfasta.list"]} {return ""} foreach Ligne [LesLignesDuFichier "fromfasta.list"] { if { ! [regexp {Begin:[0-9]} $Ligne]} {continue} scan $Ligne "%s" FichierGCGCree } file delete -force "fromfasta.list" if {![file exists $FichierGCGCree]} {return ""} if {$FichierGCG==""} { return $FichierGCGCree } file copy -force $FichierGCGCree $FichierGCG return $FichierGCG } proc FromInfoOfGenBankToEMBL {LesInfosGenBank {OnVeut ""}} { EspionneL $LesInfosGenBank Wup "Maybe it will work only if there is ONE gene in the file" Wup " Otherwise it takes the last" set Gene "" set Product "" set OS "Inconnu inconnu" set OC "Unknown class" set Access "Unknown" foreach Ligne $LesInfosGenBank { if {[regexp "/Access=" $Ligne]} { set Access [StringSuivant "/Access=" dans $Ligne] } if {[regexp "/OS=" $Ligne]} { set OS [StringSuivant "/OS=" dans $Ligne] regsub {\.$} $OS "" OS } if {[regexp "/OC=" $Ligne]} { set OC [StringSuivant "/OC=" dans $Ligne] } if {[regexp "/DEFINITION=" $Ligne]} { set Definition [StringSuivant "/DEFINITION=" dans $Ligne] set Definition [string trim $Definition] } if {[regexp "/DNA=" $Ligne]} { set SeqNuc [StringSuivant "/DNA=" dans $Ligne] } if {[regexp "/translation=" $Ligne]} { set SeqPro [StringSuivant "/translation=" dans $Ligne] } if {[regexp "/gene=" $Ligne]} { set Gene [StringSuivant "/gene=" dans $Ligne] } if {[regexp "/product=" $Ligne]} { set Product [StringSuivant "/product=" dans $Ligne] } if {[regexp "/note=" $Ligne]} { set Note [StringSuivant "/note=" dans $Ligne] } } if {$Product=="" && [info exists Definition]} { set Product $Definition } if {$OnVeut=="prot" && ! [info exists SeqPro]} { if {[info exists SeqNuc] && [regexp -nocase {[^ATGC]} $SeqNuc]} { set SeqPro $SeqNuc unset SeqNuc } } if {$OnVeut=="" && [info exists SeqPro] && [info exists SeqNuc]} { set OnVeut "nuc" } if {$OnVeut=="" && [info exists SeqPro] && ! [info exists SeqNuc]} { set OnVeut "prot" } if {$OnVeut=="" && ! [info exists SeqPro] && [info exists SeqNuc]} { set OnVeut "nuc" } if {[info exists SeqPro] && $OnVeut=="prot"} { set ProtEMBL "" set LongP [expr [string length $SeqPro]] append ProtEMBL "ID $Access PRELIMINARY; PRT; $LongP AA." append ProtEMBL "\nAC $Access" append ProtEMBL "\nOS $OS." append ProtEMBL "\nOC $OC" if {$Product!=""} { append ProtEMBL "\nDE $Product" } if {$Gene!=""} { append ProtEMBL "\nGN $Gene" } append ProtEMBL "\nCC -!- taken by Gscope from a GenBank file" append ProtEMBL "\n[QueSequenceFormatEMBL $SeqPro AvecSQ]" return $ProtEMBL } if {[info exists SeqNuc] && $OnVeut=="nuc"} { set NucEMBL "" set LongN [expr [string length $SeqNuc]] append NucEMBL "ID $Access PRELIMINARY; DNA; $LongN bases." append NucEMBL "\nAC $Access" append NucEMBL "\nOS $OS." append NucEMBL "\nOC $OC" if {$Product!=""} { append NucEMBL "\nDE $Product" } if {$Gene!=""} { append NucEMBL "\nGN $Gene" } append NucEMBL "\nCC -!- taken by Gscope from a GenBank file" append NucEMBL "\n[QueSequenceFormatEMBL $SeqNuc AvecSQ]" return $NucEMBL } return "" } proc FromInterproWeb {} { package require http set Url "http://www.biomart.org/biomart/martservice?type=registry" set LaQuery [list ATTRIBUTES entry.default.entry_attributes.entry_id|entry.default.entry_attributes.entry_short_name|entry.default.entry_attributes.entry_name|entry.default.entry_attributes.entry_type|entry.default.entry_attributes.pos_from|entry.default.entry_attributes.protein_ac|entry.default.entry_attributes.protein_name|entry.default.entry_attributes.pos_to|entry.default.entry_attributes.match_score|entry.default.entry_attributes.protein_database_name|entry.default.entry_attributes.protein_tax_id FILTERS "entry.default.filter_page.protein_ac.\"P12345,P12346\"" formatter TSV ] set Query [::http::formatQuery {*}$LaQuery] # append Url "&ATTRIBUTES=entry.default.entry_attributes.entry_id|entry.default.entry_attributes.entry_short_name|entry.default.entry_attributes.entry_name|entry.default.entry_attributes.entry_type|entry.default.entry_attributes.pos_from|entry.default.entry_attributes.protein_ac|entry.default.entry_attributes.protein_name|entry.default.entry_attributes.pos_to|entry.default.entry_attributes.match_score|entry.default.entry_attributes.protein_database_name|entry.default.entry_attributes.protein_tax_id&FILTERS=entry.default.filter_page.protein_ac.P12345&FORMAT=TSV" # append Url "&ATTRIBUTES=entry.default.entry_attributes.entry_id&FILTERS=entry.default.filter_page.protein_ac.P12345&FORMAT=TSV" append Url "&$Query" set R [ContenuDuFichier $Url] return $R } proc FromList {Liste {GetWhat ""} {ExprFunction ""}} { if {$GetWhat=="Iterate"} { set LeNew {} foreach V $Liste { set N [expr [set ExprFunction]($V)] lappend LeNew $N } return $LeNew } set Sum 0 set Length 0 set Min [lindex $Liste 0] set Max [lindex $Liste 0] foreach X $Liste { incr Length set Sum [expr $Sum + $X] if {$Min > $X} { set Min $X } if {$Max < $X} { set Max $X } } if {$Length==0} { return "" } set Average [expr 1.0*$Sum/$Length] set SumDeviation 0 foreach X $Liste { set SumDeviation [expr $SumDeviation + ($Average-$X)*($Average-$X)] } if {$Length==1} { set Deviation 0.0 } else { set Deviation [expr sqrt(1.0*$SumDeviation/($Length-1))] } if {[info exists $GetWhat]} { set Valeur [set $GetWhat] if {$ExprFunction!=""} { set Valeur [expr [set ExprFunction]($Valeur)] } return $Valeur } return "$Average $Deviation $Min $Max $Sum $Length" } proc FromMacsim {{Qui ""} {Quoi ""} {Quid ""}} { LogWscope "FromMacsim =$Qui=$Quoi=$Quid=" #rR Attention Laetita a elle un FromMacsims avec s #rR Mis à jour par Raymond 2016/04/06 #rR FromMacsim permet d'interroger n'importe quel macsims au format XML #rR On utilise DecortiqueUnMacsimXml qui crée pleins de variables globales #rR La liste des variables globales existantes est accessible par #rR FromMacsim FichierMacsims ListOfList #rR FromMacsim FichierMacsims ListOfArray #rR On indexe tout par le nom du fichier ou par le MD5 du Texte xml s'il est fourni #rR Quand on interroge un Projet Gscope particulier (par exemple CilioCarta2014) le nom CIL123 suffit #rR FromMacsim CIL006 ListOfList (rend la liste des listes qu'on peut interroger) #rR FromMacsim CIL006 AlnName #rR FromMacsim CIL006 LNOrdali #rR FromMacsim CIL006 ListOfNames (rend la liste des noms des sequences) #rR FromMacsim CIL006 ListOfFeatureType #rR FromMacsim CIL006 Sequences get (rend la liste cle valeur cle valeur ...) #rR FromMacsim CIL006 Sequences G1PUE7_MYOLU (rend la sequence) ....... les array sont créés à la première demande puis stockés ;) #rR FromMacsim CIL006 BLOCK G1PUE7_MYOLU (rend les features BLOCK) #rR Les couleurs sont valables pour tous les macsims ;) #rR FromMacsim MacsimsColor (rend la liste cle valeur cle valeur des Colorations utilisées) #rR FromMacsim MacsimsColor names (rend les cles des Colorations utilisées) #rR FromMacsim MacsimsColor ConsGlob (rend le couple foreground background pour les Conservation Globales) #rR FromMacsim MacsimsColor Stock (rend les couleurs utilisées pour les Features) #rR FromMacsim MacsimsColor 4 (rend la quatrième couleur utilisée pour les Features) #rR On peut mettre un nom complet de fichier #rR FromMacsim /ici/ou/la/toto.xml #rR ou pour tout projet Gscope #rR FromMacsim ProjetGscope/Prefixe12345 (qui évite de mettre /genomics/link/ProjetGscope/macsimXml/Prefixe12345) if {$Qui==""} { set Qui "Help" } global FromMacsim global Defauts Couleurs if { ! [info exists Couleurs] } { LesDefauts DefinitionPreferences set FromMacsim(MacsimsColor) [array get Couleurs] } if {$Qui=="MacsimsColor"} { if {$Quoi=="" || $Quoi=="get"} { return $FromMacsim(MacsimsColor) } if {$Quoi=="names"} { return [array names Couleurs] } if {[info exists Couleurs($Quoi)]} { return $Couleurs($Quoi) } if {[regexp {^[0-9]+$} $Quoi]} { return [lindex $Couleurs(Stock) $Quoi] } return "" } if { ! [info exists FromMacsim(PackageMD5Loaded)]} { package require md5 set FromMacsim(PackageLoaded) 1 } if {$Qui=="Color"} { set LeHelp {} foreach Ligne [split [info body FromMacsim] "\n"] { if { ! [regexp " +#rR" $Ligne]} { continue } lappend LeHelp $Ligne } return [join $LeHelp "\n"] } if {$Qui=="Help"} { set LeHelp {} foreach Ligne [split [info body FromMacsim] "\n"] { if { ! [regexp " +#rR" $Ligne]} { continue } lappend LeHelp $Ligne } return [join $LeHelp "\n"] } if {$Qui=="UnsetAll"} { array unset FromMacsim set FromMacsim(PackageLoaded) 1 return "" } if {[regexp "\n" $Qui]} { set MD5 [::md5::md5 -hex $Qui] } else { set MD5 $Qui } if {$Quoi=="unset"} { if { ! [info exists FromMacsim($MD5,MD5)]} { return "" } foreach Arr $FromMacsim($MD5,ListOfMemArr) { array unset $Arr } array unset FromMacsim "$MD5,*" return "" } if {[info exists FromMacsim($MD5,$Quoi)]} { if {$Quid==""} { return $FromMacsim($MD5,$Quoi) } else { #rR Attention, là on fait un traitement spécial ... on crée les array à la demande et on les mémorise pour plus tard ;) if {[info exists FromMacsim($MD5,$Quoi,$Quid)]} { return $FromMacsim($MD5,$Quoi,$Quid) } if {$Quid=="get"} { return $FromMacsim($MD5,$Quoi) } if { ! [info exists FromMacsim($MD5,Array_$Quoi)]} { set Arr "Array_[::md5::md5 -hex Array_${Quoi}_$MD5]" lappend FromMacsim($MD5,ListOfMemArr) $Arr set FromMacsim($MD5,Array_$Quoi) $Arr global [set Arr] #rR 20170112 set ::[set Arr]($Quid) $FromMacsim($MD5,$Quoi) ;#rR a verifier c'est louche !!!!!!!!!!je ne comprends plus !!!!!!!!!!!!!!!!!!!!!!!! array set ::[set Arr] $FromMacsim($MD5,$Quoi) } if {[info exists FromMacsim($MD5,Array_$Quoi)]} { set Arr $FromMacsim($MD5,Array_$Quoi) if {$Quid=="names"} { return [array names ::[set Arr]] } if {[info exists ::[set Arr]($Quid)]} { return [set ::[set Arr]($Quid)] } return "" } } } if {[info exists FromMacsim($MD5,$Quoi)]} { return $FromMacsim($MD5,$Quoi) } if {[info exists FromMacsim($MD5,EstCharge)]} { return "" } if {[regexp "\n" $Qui]} { set Xml $Qui } else { set Xml "" if {[FileExists $Qui]} { set Xml [ContenuDuFichier $Qui] } elseif {[FileAbsent $Qui] && [file exists [GscopeFile $Qui "macsimXml"]]} { set Qui [GscopeFile $Qui "macsimXml"] set Xml [ContenuDuFichier $Qui] } elseif {[regexp -nocase {^([^/]+)/(.+)$} $Qui Match Rep Pab]} { if {[FileExists "/genomics/link/$Rep/macsimXml/$Pab"]} { set Xml [ContenuDuFichier "/genomics/link/$Rep/macsimXml/$Pab"] } } if {$Xml==""} { return "" } } set FromMacsim($MD5,MD5) $MD5 set FromMacsim($MD5,EstCharge) 1 set MacsimsVariables [DecortiqueUnMacsimXml $Xml] lassign $MacsimsVariables LesL LesT foreach L $LesL { set FromMacsim($MD5,$L) [set ::$L] } foreach T $LesT { set FromMacsim($MD5,$T) [array get ::$T] } set FromMacsim($MD5,ListOfList) $LesL set FromMacsim($MD5,ListOfArray) $LesT set LesFeatureType {} foreach {K V} [array get ::TabSF] { if {$K=="Imito_Homo.sapi"} { EspionneL $V } foreach Feature $V { set LesMots [split $Feature " "] lassign $LesMots coord LG ftype FT fstart FStart fstop Fstop fcolor FColor fscore FScore fnote set FNote [join [lrange $V 13 end] " "] lappend LesFeatureType $FT lappend FromMacsim($MD5,$FT) $Feature lappend FromMacsim($MD5,$FT,$K) $Feature } } set FromMacsim($MD5,ListOfFeatureType) [lsort -unique $LesFeatureType] set FromMacsim($MD5,ListOfNames) $::LNOrdali lappend FromMacsim($MD5,ListOfList) ListOfFeatureType ListOfNames # attention on triche un peu là if {$Quoi=="MacsimsColor"} { return [FromMacsim $Quoi $Quid] } return [FromMacsim $MD5 $Quoi $Quid] } proc FromMacsims {FichierMacsim Qui Quoi} { #pour un name dans un fichier macsims global CarDuMacs set FichierMacsim [TheTrueMacsimsFile $FichierMacsim] # if {$Qui==""} {return "il me faut un name"} if {[info exists CarDuMacs(FichierMacsim)] && $CarDuMacs(FichierMacsim)!=$FichierMacsim} { unset CarDuMacs } if {[info exists CarDuMacs($Qui,$Quoi)]} { return $CarDuMacs($Qui,$Quoi) } if {[info exists CarDuMacs("EstCharge")]} { return "" } set CarDuMacs("EstCharge") 1 set CarDuMacs(FichierMacsim) $FichierMacsim package require tdom set fh [open $FichierMacsim "r"] dom parse -channel $fh doc close $fh $doc documentElement root set LesSeq [$root selectNodes "//sequence"] foreach seq $LesSeq { set Name [$seq selectNodes "string(./seq-name)"] lappend LesNames $Name set LesConcatMacsims {}; set LesPFAMMacsims {} set LesConcatDOMAIN {}; set LesDOMAINMacsims {} set LesConcatSTRUCT {}; set LesSTRUCTMacsims {} set LesConcatREGION {}; set LesREGIONMacsims {} set LesConcatPROSITE {}; set LesPROSITEMacsims {} set LesConcatELM {}; set LesELMMacsims {} set LesConcatBLOCK {}; set LesBLOCKMacsims {} set LesConcatKOANNO {}; set LesKOANNOMacsims {} set SeqData [$seq selectNodes "string(./seq-data)"] regsub -all {\-} $SeqData "" SeqDataSansGap set SeqDataSansGap [string trim $SeqDataSansGap] if {[regexp "^ENS" $Name] || [regexp "^GST" $Name]} { set Organism [lindex [split $Name "_"] 1] set OrganismLong "" if {[regexp "^ENS" $Name]} { set ENS [string range $Name 0 5] if {[regexp {[0-9]} $ENS]} { set ENS [string range $Name 0 2] } set OrganismLong [InterrogeCorresEnsEtOS $ENS OS] } } else { set TextOrganism [$seq selectNodes "string(./seq-info/organism)"] set TextOrganism [string trim $TextOrganism] set LesMotsOrganism [split $TextOrganism " "] set Organism [lindex $LesMotsOrganism 0] set OrganismLong "[lindex $LesMotsOrganism 0] [lindex $LesMotsOrganism 1]" } set Group [$seq selectNodes "string(./seq-info/group)"] set Length [$seq selectNodes "string(./seq-info/length)"] foreach noeud_PFAM [$seq selectNodes ".//fitem\[ftype=\"PFAM-A\"\]"] { set PFAMMacsims [$noeud_PFAM selectNodes "string(./fnote)"] set StartMacsims [$noeud_PFAM selectNodes "string(./fstart)"] set StopMacsims [$noeud_PFAM selectNodes "string(./fstop)"] #foreach noeud_PFAM [$seq selectNodes ".//fitem\[ftype=\"PFAM-A\"\]/fnote"] #lappend LesPFAMMacsims [$noeud_PFAM selectNodes "string(./text())"] lappend LesConcatMacsims "$PFAMMacsims/$StartMacsims-$StopMacsims" lappend LesPFAMMacsims $PFAMMacsims } foreach noeud_DOMAIN [$seq selectNodes ".//fitem\[ftype=\"DOMAIN\"\]"] { set DOMAINMacsims [$noeud_DOMAIN selectNodes "string(./fnote)"] set StartDOMAIN [$noeud_DOMAIN selectNodes "string(./fstart)"] set StopDOMAIN [$noeud_DOMAIN selectNodes "string(./fstop)"] lappend LesConcatDOMAIN "$DOMAINMacsims/$StartDOMAIN-$StopDOMAIN" lappend LesDOMAINMacsims $DOMAINMacsims } foreach noeud_STRUCT [$seq selectNodes ".//fitem\[ftype=\"STRUCT\"\]"] { set STRUCTMacsims [$noeud_STRUCT selectNodes "string(./fnote)"] set StartSTRUCT [$noeud_STRUCT selectNodes "string(./fstart)"] set StopSTRUCT [$noeud_STRUCT selectNodes "string(./fstop)"] lappend LesConcatSTRUCT "$STRUCTMacsims/$StartSTRUCT-$StopSTRUCT" lappend LesSTRUCTMacsims $STRUCTMacsims } foreach noeud_REGION [$seq selectNodes ".//fitem\[ftype=\"REGION\"\]"] { set REGIONMacsims [$noeud_REGION selectNodes "string(./fnote)"] set StartREGION [$noeud_REGION selectNodes "string(./fstart)"] set StopREGION [$noeud_REGION selectNodes "string(./fstop)"] lappend LesConcatREGION "$REGIONMacsims/$StartREGION-$StopREGION" lappend LesREGIONMacsims $REGIONMacsims } foreach noeud_PROSITE [$seq selectNodes ".//fitem\[ftype=\"PROSITE\"\]"] { set PROSITEMacsims [$noeud_PROSITE selectNodes "string(./fnote)"] set StartPROSITE [$noeud_PROSITE selectNodes "string(./fstart)"] set StopPROSITE [$noeud_PROSITE selectNodes "string(./fstop)"] lappend LesConcatPROSITE "$PROSITEMacsims/$StartPROSITE-$StopPROSITE" lappend LesPROSITEMacsims $PROSITEMacsims } foreach noeud_ELM [$seq selectNodes ".//fitem\[ftype=\"ELM\"\]"] { set ELMMacsims [string toupper [$noeud_ELM selectNodes "string(./fnote)"]] set StartELM [$noeud_ELM selectNodes "string(./fstart)"] set StopELM [$noeud_ELM selectNodes "string(./fstop)"] lappend LesConcatELM [list $ELMMacsims $StartELM $StopELM] lappend LesELMMacsims $ELMMacsims } foreach noeud_BLOCK [$seq selectNodes ".//fitem\[ftype=\"BLOCK\"\]"] { set BLOCKMacsims [$noeud_BLOCK selectNodes "string(./fnote)"] set StartBLOCK [$noeud_BLOCK selectNodes "string(./fstart)"] set StopBLOCK [$noeud_BLOCK selectNodes "string(./fstop)"] lappend LesConcatBLOCK "$BLOCKMacsims/$StartBLOCK-$StopBLOCK" lappend LesBLOCKMacsims $BLOCKMacsims } foreach noeud_KOANNO [$seq selectNodes ".//fitem\[ftype=\"KOANNO\"\]"] { set KOANNOMacsims [$noeud_KOANNO selectNodes "string(./fnote)"] set StartKOANNO [$noeud_KOANNO selectNodes "string(./fstart)"] set StopKOANNO [$noeud_KOANNO selectNodes "string(./fstop)"] lappend LesConcatKOANNO "$KOANNOMacsims/$StartKOANNO-$StopKOANNO" lappend LesKOANNOMacsims $KOANNOMacsims } #trie les features du Nter vers Cter set LesConcatMacsims [lsort -increasing -command CompareIntegerFromMacsims $LesConcatMacsims] set LesConcatDOMAIN [lsort -increasing -command CompareIntegerFromMacsims $LesConcatDOMAIN] set LesConcatSTRUCT [lsort -increasing -command CompareIntegerFromMacsims $LesConcatSTRUCT] set LesConcatREGION [lsort -increasing -command CompareIntegerFromMacsims $LesConcatREGION] set LesConcatPROSITE [lsort -increasing -command CompareIntegerFromMacsims $LesConcatPROSITE] set LesConcatELM [lsort -increasing -command CompareIntegerFromMacsims $LesConcatELM] set LesConcatBLOCK [lsort -increasing -command CompareIntegerFromMacsims $LesConcatBLOCK] set LesConcatKOANNO [lsort -increasing -command CompareIntegerFromMacsims $LesConcatKOANNO] set CarDuMacs($Name,JustPfam) $LesPFAMMacsims set CarDuMacs($Name,ConcatPfam) $LesConcatMacsims set CarDuMacs($Name,SeqDataSansGap) $SeqDataSansGap set CarDuMacs($Name,SeqData) $SeqData set CarDuMacs($Name,Organism) $Organism set CarDuMacs($Name,OrganismLong) $OrganismLong set CarDuMacs($Name,Group) $Group set CarDuMacs($Name,Length) $Length set CarDuMacs($Name,JustElm) $LesELMMacsims set CarDuMacs($Name,ConcatElm) $LesConcatELM set CarDuMacs($Name,JustBlock) $LesBLOCKMacsims set CarDuMacs($Name,ConcatBlock) $LesConcatBLOCK set CarDuMacs($Name,JustDomain) $LesDOMAINMacsims set CarDuMacs($Name,ConcatDomain) $LesConcatDOMAIN set CarDuMacs($Name,JustStruct) $LesSTRUCTMacsims set CarDuMacs($Name,ConcatStruct) $LesConcatSTRUCT set CarDuMacs($Name,JustRegion) $LesREGIONMacsims set CarDuMacs($Name,ConcatRegion) $LesConcatREGION set CarDuMacs($Name,JustProsite) $LesPROSITEMacsims set CarDuMacs($Name,ConcatProsite) $LesConcatPROSITE set CarDuMacs($Name,JustKoanno) $LesKOANNOMacsims set CarDuMacs($Name,ConcatKoanno) $LesConcatKOANNO } $doc delete set CarDuMacs(ListOf,Names) $LesNames return [FromMacsims $FichierMacsim $Qui $Quoi] } proc FromMenu {w mode} { if {[QuelMode] in {"ordali" "feature"}} { ChangeMode $mode } return } proc FromNCBI {Id {Db ""} {Format ""}} { if {$Db==""} { set Db "nucleotide" if {[regexp "^NP" $Id]} { set Db "protein" } } set Query "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?db=$Db&val=$Id" set Page [HttpGetTextFromUrl $Query] regsub -nocase -nocase {^.+]*>\n*} $Page "" Page regsub -nocase -nocase {.*} $Page "" Page regsub -all {\<} $Page "<" Page regsub -all {\>} $Page ">" Page regsub -all {\"} $Page "\"" Page return $Page } proc FromNCBI2 {Id {Db ""} {Format ""}} { if {$Db==""} { set Db "nucleotide" if {[regexp "^NP" $Id]} { set Db "protein" } } set Query "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?db=$Db&val=$Id" set Page [HttpCopy $Query] regsub -nocase {^.+
\n*} $Page "" Page
    regsub -nocase {
.*} $Page "" Page regsub -all {\<} $Page "<" Page regsub -all {\>} $Page ">" Page regsub -all {\"} $Page "\"" Page return $Page } proc FromOrthoInspector {{Qui ""} {Quoi ""}} { #rR Lit les fasta de OrthoInspector #rR global FromOrthoInspector set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {[info exists FromOrthoInspector($Qui,$Quoi)]} { return $FromOrthoInspector($Qui,$Quoi) } if {[info exists FromOrthoInspector("EstCharge")]} { if {[info exists FromOrthoInspector($Qui,ID)]} { set ID [string toupper $FromOrthoInspector($Qui,ID)] if {[info exists FromOrthoInspector($ID,$Quoi)]} { return $FromOrthoInspector($ID,$Quoi) } } if {[info exists FromOrthoInspector($Qui,TAXID)]} { set TID $FromOrthoInspector($Qui,TAXID) if {[info exists FromOrthoInspector($TID,$Quoi)]} { return $FromOrthoInspector($TID,$Quoi) } } return "" } set FromOrthoInspector("EstCharge") 1 set OnGarde 0 set Rep [OrganismFromOrthoInspector Rep] set FromOrthoInspector(REP,) $Rep set LesTaxId [OrganismFromOrthoInspector ListOf TaxId] set Testons 0 ;#rR pour test ******** if {$Testons} { set LesTaxId [list 9606 9823 764100 4577 6182 7668] } set FromOrthoInspector(LISTOF,TAXID) [join $LesTaxId "\n"] foreach TaxId $LesTaxId { set OsDuFichier [OrganismFromOrthoInspector $TaxId FullOs] set OsCourtDuFichier [OrganismFromOrthoInspector $TaxId Os] lappend FromOrthoInspector(LISTOF,FULLOS) $OsDuFichier set FromOrthoInspector($TaxId,FULLOS) $OsDuFichier set Fichier [OrganismFromOrthoInspector $TaxId Filename] set Queue [file tail $Fichier] set LeTFACourant {} set LesLignes [LesLignesDuFichier $Fichier] lappend LesLignes ">CESTFINIPOURCEFICHIER" set OsDansFichier "" set MaxiPourTestons 100 ;#rR 100 ou -1 pour tout if {[info exists Courant]} { unset Courant } foreach Ligne $LesLignes { if {$Testons && [incr MaxiPourTestons -1]==0} { break } regsub -all " +" $Ligne " " Ligne set Ligne [string trim $Ligne] if {$Ligne==""} { continue } #rR dans sequence if { ! [regexp "^>" $Ligne]} { if {[regexp -nocase {[^A-Z]} $Ligne]} { if {[string index $Ligne end]=="*"} { set Ligne [string range $Ligne 0 end-1] } if {[regexp -nocase {[^A-Z\*]} $Ligne Match]} { #rR la, il y a meme autre chose lappend FromOrthoInspector(LISTOF,BAD) "$Queue $Courant $Ligne" FaireLire "Dans $Queue $Courant \n$Ligne" set OnGarde 0 continue } if {[regexp -nocase {\*} $Ligne Match]} { #FaireLire "Dans $Queue $Courant \n$Ligne" lappend FromOrthoInspector(LISTOF,OSWHITHSTAR) $Queue lappend FromOrthoInspector($TaxId,STAR) $Courant set OnGarde 0 continue } } if {$Ligne!=""} { set OnGarde 1 lappend LeTFACourant $Ligne } continue } #rR on a un chevron #rR on traite d'abord le précédent if {[info exists Courant]} { if {$OnGarde} { set ID [string toupper $Id] set COURANT [string toupper $Courant] set FromOrthoInspector($COURANT,TFA) [join $LeTFACourant "\n"] set FromOrthoInspector($ID,ID) $Id set FromOrthoInspector($ID,AC) $Ac lappend FromOrthoInspector(LISTOF,IDS) $Id lappend FromOrthoInspector(LISTOF,ACS) $Ac lappend FromOrthoInspector($TaxIdDuCourant,IDS) $Id lappend FromOrthoInspector($TaxIdDuCourant,ACS) $Ac set FromOrthoInspector($ID,TAXID) $TaxIdDuCourant } } if {$Ligne==">CESTFINIPOURCEFICHIER"} { break } #rR on traite l'entête if { ! [regexp {^>([^ ]+) (.+)} $Ligne Match AI D]} { FaireLire "pas bon $Ligne" lappend LeNew $Ligne continue } set TexteBanque "" if {[regexp {\|} $Ligne]} { regexp {^>([^ ]+) (.+)} $Ligne Match AI D set Banque "" set Ac "" set Id "" lassign [split $AI "|"] Banque Ac Id if {$Ac==""} { set Ac $AI } if {$Id==""} { set Id $Ac } regsub {OS=.*} $D "" D regsub {GN=.*} $D "" D regsub -all ";" $D " " D set D [string trim $D " _,"] if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } if {$Banque!=""} { set TexteBanque " BANK=$Banque" } } else { regexp {^>([^ ]+) ([^ ]+) (.+)} $Ligne Match Id Ac D regsub {OS=.*} $D "" D regsub {GN=.*} $D "" D regsub -all ";" $D " " D set D [string trim $D " _,"] if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } #rR Traitement spécial pour lui ....................... il y a tr ou gn à la fin des Id ou Ac if {$TaxId==7668} { regsub {(tr|sp|gn)$} $Id "" Id } if {$TaxId==7668} { regsub {(tr|sp|gn)$} $Ac "" Ac } } set Gn "" regexp {GN=([^ ]+)} $Ligne Match Gn set TextGn "" if {$Gn!=""} { set TextGn " GN=$Gn" } regsub { (GN|PE|SV)=.*} $Ligne "" LigneSansGN set FullOs "Unknown unknown" set OsDansEntete "" if {[regexp { OS=(.+)} $LigneSansGN Match FullOs]} { regsub -all " " $FullOs "_" FullOs regsub -all "/" $FullOs "and" FullOs set OsDansEntete $FullOs } lassign [split $FullOs "_"] G E set Entete ">$Id $Ac $G $E $D $TextGn OS=$OsDuFichier TAXID=$TaxId$TexteBanque" set LeTFACourant [list $Entete] if {$OsDansEntete==""} { set OsDansFichier $FullOs } if {$OsDansEntete!=$OsDuFichier && $OsDansEntete!=$OsCourtDuFichier} { set Message "Dans $Queue\n$OsDansEntete differe de \n$OsDuFichier\n\n$OsDansEntete differe de \n$OsCourtDuFichier" if {0 && ! [info exists MessageLu($Message)]} { FaireLire "$Message" set MessageLu($Message) 1 } } set Courant $Id set COURANT [string toupper $Courant] set TaxIdDuCourant $TaxId set ID [string toupper $Id] set AC [string toupper $Ac] if {$ID!=$AC} { set FromOrthoInspector($AC,ID) $ID } set FromOrthoInspector($ID,FULLOS) $FullOs set FULLOS [string toupper $FullOs] set FromOrthoInspector($FULLOS,TAXID) $TaxId } set FromOrthoInspector([string toupper $OsDuFichier],TAXID) $TaxId } set FromOrthoInspector(LISTOF,STAR) {} set FromOrthoInspector(LISTOF,COUNTSTAR) {} foreach TaxId $LesTaxId { if { ! [info exists FromOrthoInspector($TaxId,IDS)]} { FaireLire "$TaxId empty" ; continue } set FullOs $FromOrthoInspector($TaxId,FULLOS) lappend FromOrthoInspector(LISTOF,TAXIDOS) "${TaxId}_$FullOs" set nOK [llength $FromOrthoInspector($TaxId,IDS)] lappend FromOrthoInspector(LISTOF,COUNT) "$nOK $TaxId $FullOs" if {[info exists FromOrthoInspector($TaxId,STAR)]} { set nKO [llength $FromOrthoInspector($TaxId,STAR)] lappend FromOrthoInspector(LISTOF,COUNTSTAR) "$nKO $nOK $TaxId $FullOs" } } set FromOrthoInspector(LISTOF,TAXIDOS) [join $FromOrthoInspector(LISTOF,TAXIDOS) "\n"] set FromOrthoInspector(LISTOF,FULLOS) [join $FromOrthoInspector(LISTOF,FULLOS) "\n"] set FromOrthoInspector(LISTOF,COUNT) [join $FromOrthoInspector(LISTOF,COUNT) "\n"] set FromOrthoInspector(LISTOF,STAR) [join $FromOrthoInspector(LISTOF,STAR) "\n"] set FromOrthoInspector(LISTOF,COUNTSTAR) [join $FromOrthoInspector(LISTOF,COUNTSTAR) "\n"] return [FromOrthoInspector $Qui $Quoi] } proc FromParser {{Qui ""} {Quoi ""} {ParserFile ""}} { global FromParser if {$ParserFile==""} { if { ! [info exists FromParser(ParserFile)]} { return "" } set ParserFile $FromParser(ParserFile) } set FromParser(ParserFile) $ParserFile if {[info exists FromParser($Qui,$Quoi,$ParserFile)]} { return $FromParser($Qui,$Quoi,$ParserFile) } if {[info exists FromParser("EstCharge",$ParserFile)]} { return "" } set FromParser("EstCharge",$ParserFile) 1 set MaxNbInteract 0 foreach Ligne [LesLignesDuFichier $ParserFile] { foreach {IdString PN NbInteract MyNbInteract bidon2 bidon3} [split $Ligne "\t"] { set MaxNbInteract [expr max($MaxNbInteract,$NbInteract)] lappend FromParser(ListOf,IdString,$ParserFile) $IdString set FromParser($IdString,NbInteract,$ParserFile) $NbInteract set FromParser($IdString,MyNbInteract,$ParserFile) $MyNbInteract } } set FromParser(Max,NbInteract,$ParserFile) $MaxNbInteract return [FromParser $Qui $Quoi $ParserFile] } proc FromProtUrl {url lolo papa} { #rR merci de me dupliquer dans misynpat_tools.tcl et gscope_outils.tcl foreach X {lolo papa} { if {[regexp {^([0-9]+)([^0-9].+)$} [set $X] M K V]} { set N "" foreach p [split $K ""] { append N [string index $V $p] } set $X $N } } #rR from D. J. Hagberg Wiki Tcl set auth "Basic [Base64Encode $lolo:$papa]" set headerl [list Authorization $auth] set tok [http::geturl $url -headers $headerl] set res [http::data $tok] http::cleanup $tok return $res } proc FromRef {Ref Champ} { if { ! [regexp -nocase {[a-z_0-9]} $Ref]} { return "" } set Liste {} foreach Ligne [split $Ref "\n"] { if {[regexp "^$Champ" $Ligne]} { regsub "$Champ " $Ligne "" Texte lappend Liste [string trim $Texte] } } return [join $Liste " "] } proc FromRetnetForAffy {Qui {Quoi ""}} { #attention le gene name doit etre en majuscules global FromRetnetForAffy if {[info exists FromRetnetForAffy($Qui,$Quoi)]} { return $FromRetnetForAffy($Qui,$Quoi) } if {[info exists FromRetnetForAffy("EstCharge")]} { return "" } set FromRetnetForAffy("EstCharge") 1 foreach Ligne [LesLignesDuFichier "/genomics/link/EVImm/parser2008/FromRetNet/RetNet_Symbols_Diseases_UTF8.csv"] { if {[regexp ^RetNet $Ligne]} {continue} if {[regexp ^Symbol $Ligne]} {continue} set elmt [split $Ligne ";"] set Gn [lindex $elmt 0] set Dis1 [lindex $elmt 1] set Dis2 [lindex $elmt 2] set FromRetnetForAffy($Gn,Dis1) $Dis1 set FromRetnetForAffy($Gn,Dis2) $Dis2 lappend FromRetnetForAffy(ListOf,Gn) $Gn } return [FromRetnetForAffy $Qui $Quoi] } proc FromScrollYBiotext2Names {args} { # le widget biotext envoie un ordre pour que la scrollbar # se reajuste EN TANT QUE WIDGET, pas qu'elle renvoie les # infos aux widget auxquels elle est attaché, sinon on # ferait une boucle ! # mais il faut quand meme mettre à jour le widget noms $::NomNomSeq yview moveto [lindex $args 0] $::TScrollY set {*}$args return } proc FromStringList {Qui {File ""}} { global FromStringList if {$File!=""} { if {[info exists FromStringList(CurrentFile)]} { if {$File==$FromStringList(CurrentFile)} { return [FromStringList $Qui] } } if {[info exists FromStringList]} { unset FromStringList } set FromStringList(CurrentFile) $File foreach Ligne [LesLignesDuFichier $File] { set IdString [string trim $Ligne] set FromStringList($IdString) 1 lappend FromStringList(ListOf) $IdString } } if {[info exists FromStringList($Qui)]} { return $FromStringList($Qui) } return 0 } proc FromSummary {{Qui ""} {Quoi ""} {SummaryFile ""}} { global FromSummary if {$SummaryFile==""} { if { ! [info exists FromSummary(SummaryFile)]} { return "" } set SummaryFile $FromSummary(SummaryFile) } set FromSummary(SummaryFile) $SummaryFile if {[info exists FromSummary($Qui,$Quoi,$SummaryFile)]} { return $FromSummary($Qui,$Quoi,$SummaryFile) } if {[info exists FromSummary("EstCharge",$SummaryFile)]} { return "" } set FromSummary("EstCharge",$SummaryFile) 1 foreach Ligne [LesLignesDuFichier $SummaryFile] { foreach {IdInitial IdString PN Bidon} [split $Ligne ";"] { if {$IdInitial=="Initial"} {continue} lappend FromSummary($IdString,PN,$SummaryFile) $PN lappend FromSummary($IdString,IdInitial,$SummaryFile) $IdInitial lappend FromSummary($IdInitial,IdString,$SummaryFile) $IdString lappend FromSummary($IdInitial,PN,$SummaryFile) $PN lappend FromSummary($PN,IdInitial,$SummaryFile) $IdInitial lappend FromSummary($PN,IdString,$SummaryFile) $IdString lappend FromSummary(ListOf,IdInitial,$SummaryFile) $IdInitial lappend FromSummary(ListOf,IdString,$SummaryFile) $IdString } } ListeSansDoublon $FromSummary($IdString,PN,$SummaryFile) ListeSansDoublon $FromSummary($IdString,IdInitial,$SummaryFile) ListeSansDoublon $FromSummary($IdInitial,IdString,$SummaryFile) ListeSansDoublon $FromSummary($IdInitial,PN,$SummaryFile) ListeSansDoublon $FromSummary(ListOf,IdInitial,$SummaryFile) ListeSansDoublon $FromSummary(ListOf,IdString,$SummaryFile) return [FromSummary $Qui $Quoi $SummaryFile] } proc FromTkCol {{Qui ""} {Quoi ""}} { #rR TkCol connait toutes les couleurs TkCol(aquamarine) = 127 255 212 #rR FromTkCol fournit l'un en fonction de l'autre et aussi les listes #rR nom est le nom de la couleur n le meme sans blanc #rR FromTkCol répond même avec une mauvaise casse ;-) global TkCol FromTkCol set Quoi [string tolower $Quoi] if {[info exists FromTkCol($Qui,$Quoi)]} { return $FromTkCol($Qui,$Quoi) } if {[info exists FromTkCol("EstCharge")]} { set QUI [string toupper $Qui] regsub -all " " $QUI "" QUI if {[info exists FromTkCol($QUI,$Quoi)]} { return $FromTkCol($QUI,$Quoi) } return "" } set FromTkCol("EstCharge") 1 if { ! [info exists TkCol]} { InitTkCol } foreach {Nom Rgb} [array get TkCol] { regsub -all " " $Nom "" n set NOM [string toupper $Nom] set N [string toupper $n] set FromTkCol($Nom,rgb) $Rgb set FromTkCol($n,rgb) $Rgb set FromTkCol($NOM,rgb) $Rgb set FromTkCol($N,rgb) $Rgb set FromTkCol($Nom,nom) $Nom set FromTkCol($n,nom) $Nom set FromTkCol($NOM,nom) $Nom set FromTkCol($N,nom) $Nom set FromTkCol($Nom,n) $n set FromTkCol($n,n) $n set FromTkCol($NOM,n) $n set FromTkCol($N,n) $n lappend FromTkCol($Rgb,nom) $Nom lappend FromTkCol($Rgb,n) $n lappend FromTkCol(LISTOF,nom) $Nom lappend FromTkCol(LISTOF,n) $n lappend FromTkCol(LISTOF,rgb) $Rgb } set FromTkCol(LISTOF,nom) [concat $FromTkCol(LISTOF,nom) $FromTkCol(LISTOF,n)] set FromTkCol(LISTOF,nom) [lsort -unique $FromTkCol(LISTOF,nom)] set FromTkCol(LISTOF,n) [lsort -unique $FromTkCol(LISTOF,n)] return [FromTkCol $Qui $Quoi] } proc FromUserList {Qui {ListOrFile ""} {TaxId ""}} { global FromUserList if {$ListOrFile!=""} { if {[info exists FromUserList(CurrentFile)]} { if {$ListOrFile==$FromUserList(CurrentFile)} { return [FromUserList $Qui] } } if {[info exists FromUserList]} { unset FromUserList } set FromUserList(CurrentFile) $ListOrFile if {[file isfile $ListOrFile]} { set LesLignes [LesLignesDuFichier $ListOrFile] } else { set LesLignes $ListOrFile } foreach Ligne $LesLignes { set Nom [string trim $Ligne " \"\'"] set Source "FromGn" if {[regexp -nocase {^[0-9]+$} $Nom]} { set Source "FromString" } if {[regexp -nocase {_at} $Nom]} { set Source "FromAffy" } if {[regexp -nocase {^(NM|NP)[_0-9\.]+} $Nom]} { set Source "FromNM" } switch $Source { "FromAffy" { set IdString [ProtIDStringFromAffx $Nom $TaxId] } "FromNM" { set IdString [ProtIDStringFromNM $Nom $TaxId] } "FromGn" { set IdString [ProtIDStringFromGn $Nom $TaxId] } "FromString" { set IdString $Nom } } if {$IdString!=""} { set NOM [string toupper $Nom] set FromUserList($NOM) 1 set FromUserList($IdString) 1 lappend FromUserList(LISTOF) $Nom lappend FromUserList(LISTOF) $IdString } } set FromUserList(LISTOF) [lsort -unique $FromUserList(LISTOF)] } set QUI [string toupper $Qui] if {[info exists FromUserList($QUI)]} { return $FromUserList($QUI) } return 0 } proc FromYannis {{Qui ""} {Quoi ""}} { #rR Lit les fasta de Yannis #rR en utilisant OrganismFromYannis qui lit tous les ficheirs d'un repertoire global FromYannis set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {[info exists FromYannis($Qui,$Quoi)]} { return $FromYannis($Qui,$Quoi) } if {[info exists FromYannis("EstCharge")]} { if {[info exists FromYannis($Qui,ID)]} { set ID [string toupper $FromYannis($Qui,ID)] if {[info exists FromYannis($ID,$Quoi)]} { return $FromYannis($ID,$Quoi) } } if {[info exists FromYannis($Qui,TAXID)]} { set TID $FromYannis($Qui,TAXID) if {[info exists FromYannis($TID,$Quoi)]} { return $FromYannis($TID,$Quoi) } } return "" } set FromYannis("EstCharge") 1 set OnGarde 0 set Rep [OrganismFromYannis Rep] set FromYannis(REP,) $Rep set LesTaxId [OrganismFromYannis ListOf TaxId] set Testons 0 ;#rR pour test ******** if {$Testons} { set LesTaxId [list 9606 9823 764100 4577 6182 7668] } set FromYannis(LISTOF,TAXID) [join $LesTaxId "\n"] foreach TaxId $LesTaxId { set OsDuFichier [OrganismFromYannis $TaxId FullOs] set OsCourtDuFichier [OrganismFromYannis $TaxId Os] lappend FromYannis(LISTOF,FULLOS) $OsDuFichier set FromYannis($TaxId,FULLOS) $OsDuFichier set Fichier [OrganismFromYannis $TaxId Filename] set Queue [file tail $Fichier] set LeTFACourant {} set LesLignes [LesLignesDuFichier $Fichier] lappend LesLignes ">CESTFINIPOURCEFICHIER" set OsDansFichier "" set MaxiPourTestons 100 ;#rR 100 ou -1 pour tout if {[info exists Courant]} { unset Courant } foreach Ligne $LesLignes { if {$Testons && [incr MaxiPourTestons -1]==0} { break } regsub -all " +" $Ligne " " Ligne set Ligne [string trim $Ligne] if {$Ligne==""} { continue } #rR dans sequence if { ! [regexp "^>" $Ligne]} { if {[regexp -nocase {[^A-Z]} $Ligne]} { if {[string index $Ligne end]=="*"} { set Ligne [string range $Ligne 0 end-1] } if {[regexp -nocase {[^A-Z\*]} $Ligne Match]} { #rR la, il y a meme autre chose lappend FromYannis(LISTOF,BAD) "$Queue $Courant $Ligne" FaireLire "Dans $Queue $Courant \n$Ligne" set OnGarde 0 continue } if {[regexp -nocase {\*} $Ligne Match]} { #FaireLire "Dans $Queue $Courant \n$Ligne" lappend FromYannis(LISTOF,OSWHITHSTAR) $Queue lappend FromYannis($TaxId,STAR) $Courant set OnGarde 0 continue } } if {$Ligne!=""} { set OnGarde 1 lappend LeTFACourant $Ligne } continue } #rR on a un chevron #rR on traite d'abord le précédent if {[info exists Courant]} { if {$OnGarde} { set ID [string toupper $Id] set COURANT [string toupper $Courant] set FromYannis($COURANT,TFA) [join $LeTFACourant "\n"] set MemoTaxId $MemoTaxIdDuCourant($COURANT) set FromYannis($ID,ID) $Id set FromYannis($ID,AC) $Ac lappend FromYannis(LISTOF,IDS) $Id lappend FromYannis(LISTOF,ACS) $Ac lappend FromYannis($MemoTaxId,IDS) $Id lappend FromYannis($MemoTaxId,ACS) $Ac set FromYannis($ID,TAXID) $MemoTaxId } } if {$Ligne==">CESTFINIPOURCEFICHIER"} { break } #rR on traite l'entête if { ! [regexp {^>([^ ]+) (.+)} $Ligne Match AI D]} { FaireLire "pas bon $Ligne" lappend LeNew $Ligne continue } set TexteBanque "" if {[regexp {\|} $Ligne]} { regexp {^>([^ ]+) (.+)} $Ligne Match AI D set Banque "" set Ac "" set Id "" lassign [split $AI "|"] Banque Ac Id if {$Ac==""} { set Ac $AI } if {$Id==""} { set Id $Ac } regsub {OS=.*} $D "" D regsub {GN=.*} $D "" D regsub -all ";" $D " " D set D [string trim $D " _,"] if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } if {$Banque!=""} { set TexteBanque " BANK=$Banque" } } else { regexp {^>([^ ]+) ([^ ]+) (.+)} $Ligne Match Id Ac D regsub {OS=.*} $D "" D regsub {GN=.*} $D "" D regsub -all ";" $D " " D set D [string trim $D " _,"] if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } #rR Traitement spécial pour lui ....................... il y a tr ou gn à la fin des Id ou Ac if {$TaxId==7668} { regsub {(tr|sp|gn)$} $Id "" Id } if {$TaxId==7668} { regsub {(tr|sp|gn)$} $Ac "" Ac } } set Gn "" regexp {GN=([^ ]+)} $Ligne Match Gn set TextGn "" if {$Gn!=""} { set TextGn " GN=$Gn" } regsub { (GN|PE|SV)=.*} $Ligne "" LigneSansGN set FullOs "Unknown unknown" set OsDansEntete "" if {[regexp { OS=(.+)} $LigneSansGN Match FullOs]} { regsub -all " " $FullOs "_" FullOs regsub -all "/" $FullOs "and" FullOs set OsDansEntete $FullOs } lassign [split $FullOs "_"] G E set Entete ">$Id $Ac $G $E $D $TextGn OS=$OsDuFichier TAXID=$TaxId$TexteBanque" set LeTFACourant [list $Entete] if {$OsDansEntete==""} { set OsDansFichier $FullOs } if {$OsDansEntete!=$OsDuFichier && $OsDansEntete!=$OsCourtDuFichier} { set Message "Dans $Queue\n$OsDansEntete differe de \n$OsDuFichier\n\n$OsDansEntete differe de \n$OsCourtDuFichier" if {0 && ! [info exists MessageLu($Message)]} { FaireLire "$Message" set MessageLu($Message) 1 } } set Courant $Id set COURANT [string toupper $Courant] set MemoTaxIdDuCourant($COURANT) $TaxId set ID [string toupper $Id] set AC [string toupper $Ac] if {$ID!=$AC} { set FromYannis($AC,ID) $ID } set FromYannis($ID,FULLOS) $FullOs set FULLOS [string toupper $FullOs] set FromYannis($FULLOS,TAXID) $TaxId } set FromYannis([string toupper $OsDuFichier],TAXID) $TaxId } set FromYannis(LISTOF,STAR) {} set FromYannis(LISTOF,COUNTSTAR) {} foreach TaxId $LesTaxId { if { ! [info exists FromYannis($TaxId,IDS)]} { FaireLire "$TaxId empty" ; continue } set FullOs $FromYannis($TaxId,FULLOS) lappend FromYannis(LISTOF,TAXIDOS) "${TaxId}_$FullOs" set nOK [llength $FromYannis($TaxId,IDS)] lappend FromYannis(LISTOF,COUNT) "$nOK $TaxId $FullOs" if {[info exists FromYannis($TaxId,STAR)]} { set nKO [llength $FromYannis($TaxId,STAR)] lappend FromYannis(LISTOF,COUNTSTAR) "$nKO $nOK $TaxId $FullOs" } } set FromYannis(LISTOF,TAXIDOS) [join $FromYannis(LISTOF,TAXIDOS) "\n"] set FromYannis(LISTOF,FULLOS) [join $FromYannis(LISTOF,FULLOS) "\n"] set FromYannis(LISTOF,COUNT) [join $FromYannis(LISTOF,COUNT) "\n"] set FromYannis(LISTOF,STAR) [join $FromYannis(LISTOF,STAR) "\n"] set FromYannis(LISTOF,COUNTSTAR) [join $FromYannis(LISTOF,COUNTSTAR) "\n"] return [FromYannis $Qui $Quoi] } proc FstartFstop {Info aFstart aFstop} { upvar $aFstart Fstart upvar $aFstop Fstop # set LesChamps [split $Info "/"] # set FF [lindex $LesChamps 1] set FF [lindex [split $Info "/"] 1] # regsub {\-} $FF " " FF # scan $FF "%d %d" Fstart Fstop lassign [split $FF -] Fstart Fstop return $FF } proc FstartFstop2 {Info} { set FF [lindex [split $Info "/"] 1] lassign [split $FF -] Fstart Fstop return [list $Fstart $Fstop] } proc FusioFile {} { # Ajoute le contenu d'un fichier é un autre de meme taille (ajoute la séquence aux localisations) set FichierDes230000 [open "/tmp/Conservation/MappingTotalNV3.txt" "r"] set FichierDesRallonges [open "/tmp/Conservation/SequencesDes230000rallongeesDe7Upstream.txt" "r"] set FichierDes230000enrichi "/tmp/Conservation/PourPhilippe.txt" set PathOut $FichierDes230000enrichi if { [file exists $FichierDes230000enrichi] } { file delete $FichierDes230000enrichi } while { [gets $FichierDesRallonges LigneRallongee] >=0 } { ScanLaListe $LigneRallongee ID SequenceRallongee gets $FichierDes230000 Ligne AppendAuFichier $FichierDes230000enrichi " $SequenceRallongee $Ligne" } Espionne "Execution terminee. Le fichier a été écrit dans $PathOut" } proc FusioLignes {Chromosome} { while { [gets $FichierEntree1 Ligne1] >=0 } { set MM1 " " set MM2 " " ScanLaListe $Ligne1 ChroX DRX IDX StartX EndX BrinX SequenceX ScoreX NbMismatchsX MM1 MM2 gets $FichierEntree2 Ligne2 ScanLaListe $Ligne2 ID Chro Start Fin AccessG1 StartG1 FinG1 Brin1 DTSS1 Exon1 UTR1 ExonStart ExonFin BorneProche DEXON AccessG2 StartG2 EndG2 BrinG2 DTSS2 Avis1 AccessG3 StartG3 EndG3 BrinG3 DTSS3 Avis2 puts $FichierSortie "$ChroX $DRX $IDX $StartX $EndX $BrinX $SequenceX $AccessG1 $StartG1 $FinG1 $Brin1 $DTSS1 $Exon1 $UTR1 $ExonStart $ExonFin $BorneProche $DEXON $AccessG2 $StartG2 $EndG2 $BrinG2 $DTSS2 $Avis1 $AccessG3 $StartG3 $EndG3 $BrinG3 $DTSS3 $Avis2 $ScoreX $NbMismatchsX $MM1@$MM2" puts $FichierSortie "$ChroX $DRX $IDX $StartX $EndX $BrinX $SequenceX $AccessG1 $StartG1 $FinG1 $Brin1 $DTSS1 $Exon1 $UTR1 $ExonStart $ExonFin $BorneProche $DEXON $AccessG2 $StartG2 $EndG2 $BrinG2 $DTSS2 $Avis1 $AccessG3 $StartG3 $EndG3 $BrinG3 $DTSS3 $Avis2 $ScoreX $NbMismatchsX $MM1@$MM2" } close $FichierEntree1 close $FichierEntree2 close $FichierSortie } proc FusioMismatchs {} { set FichierIn [open "/tmp/VDR/VDR.coord" "r"] set FichierOut [open "/tmp/VDR/VDR.coo" "w"] while { [gets $FichierIn Ligne] >= 0 } { set MM1 "" set MM2 "" ScanLaListe $Ligne Chromosome DR ID Start End Strand Sequence Score NbMM MM1 MM2 set MM "M" if { $MM1 != ""} { set MM "$MM@$MM1" } if { $MM2 != ""} { set MM "$MM@$MM2" } set LigneOut "$DR $ID $Chromosome $Start $End $Strand $Sequence $Score $NbMM $MM" puts $FichierOut $LigneOut } close $FichierIn close $FichierOut } proc Fusion {Nom} { return [ExtraitInfo $Nom "Fusion"] } proc Fusion5P {{Qui ""} {Quoi ""}} { global Fusion5P if {$Qui==""} { set Qui "LaListeDes" set Quoi "Fusions" } if {$Quoi==""} { set Quoi "Description" } if {$Quoi=="Sequence"} { set Fichier [Fusion5P $Qui "Fichier"] if {$Fichier==""} { return "" } return [QueLaSequenceDuFichierTFA $Fichier] } if {[info exists Fusion5P($Qui,$Quoi)]} { return [set Fusion5P($Qui,$Quoi)] } if {[info exists Fusion5P("EstCharge")]} { return [set Fusion5P("EstCharge")] } set FichierFusion5P "[RepertoireDuGenome]/fiches/fusion" set Fusion5P("EstCharge") "" if {[file exists $FichierFusion5P]} { array set Fusion5P [LesLignesDuFichier $FichierFusion5P] return [Fusion5P $Qui $Quoi] } set Fusion5P(LaListeDes,Fichiers) {} set Fusion5P(LaListeDes,Fusions) {} foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/fusion/*"] { set Queue [file tail $Fichier] set Entete [EnteteDuFichierTFA $Fichier] if {$Entete==""} { continue } set Fus [EnteteDuFichierTFA $Fichier "access"] regsub "Fus_" $Fus "" R2 set Fusion5P($Fus,Rec2) $R2 lappend Fusion5P(LaListeDes,Fichiers) $Fichier lappend Fusion5P(LaListeDes,Fusions) $Fus } set Fusion5P(LaListeDes,Fichiers) [lsort [set Fusion5P(LaListeDes,Fichiers)]] set Fusion5P(LaListeDes,Fusions) [lsort [set Fusion5P(LaListeDes,Fusions)]] SauveLesLignes [array get Fusion5P] dans $FichierFusion5P return [Fusion5P $Qui $Quoi] } proc FusionMM {Path} { # Détecte les fichiers avec deux MM et un blanc entre les deux et les recolle (bidouille) set FichierEntree [open "$Path.pro" "r"] set FichierSortie [open "$Path.pro" "w"] gets $FichierEntree Ligne set Reste1 "" set Reste2 "" set Reste3 "" while { [gets $FichierEntree Ligne] >=0 } { ScanLaListe $Ligne Acc Deb Fin Orientation Distance ExonOutron UtrOuCDS DebutExonOutron FinExonOuIntron DebutOuFinExonOuIntron DistanceAlaBorneDeExonOuIntron ChromosomeQuery DRQuery IdQuery StartQuery EndQuery OrientationQuery SequenceQuery ScoreQuery NbMismatchQuery MM1 MM2 Reste1 Reste2 Reste3 if { $NbMismatchQuery > 0} { set MM1 "M@$MM1@$MM2" set MM2 "" } else { set MM1 "M@" set MM2 "" } puts $FichierSortie "$Acc $Deb $Fin $Orientation $Distance $ExonOutron $UtrOuCDS $DebutExonOutron $FinExonOuIntron $DebutOuFinExonOuIntron $DistanceAlaBorneDeExonOuIntron $ChromosomeQuery $DRQuery $IdQuery $StartQuery $EndQuery $OrientationQuery $SequenceQuery $ScoreQuery $NbMismatchQuery $MM1 $MM2 $Reste1 $Reste2 $Reste3 " } } proc FusionMMdansDRx {Path} { Espionne "FusionMMdansDRx: Start" set FichierEntree [open "$Path.coo" "r"] set FichierSortie [open "$Path.coord" "w"] while { [gets $FichierEntree Ligne] >=0 } { regsub -all -nocase {\sS} $Ligne "@" LigneOut puts $FichierSortie $LigneOut } Espionne "FusionMMdansDRx: End" } 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 FusionneLesGenscan {LeGscA LeGscB TailleTroncon} { set Offset $TailleTroncon set Coupure [DernierPointDeCoupure $LeGscA $LeGscB $TailleTroncon] Espionne $Coupure if {$Coupure==-1} { set A [lindex $LeGscA 0] set B [lindex $LeGscB 0] FaireLire "I cannot merge these two GenScan outputs\n $A \ $B" return "" } set OldP "" foreach Ligne $LeGscA { if {[regexp "^Sequence" $Ligne]} { scan $Ligne "%s %s" S Access set Ligne "$S $Access Genscan outputs from overlapping contigs merged by Gscope after $Coupure" lappend Sortie $Ligne continue } if { ! [regexp {^ *[0-9]+\.[0-9]+} $Ligne]} { lappend Sortie $Ligne continue } scan $Ligne "%s %s %s %d %d" PE Type Sens D F if {$D >= $Coupure} { break } scan [split $PE "."] "%d %d" P E if {$OldP!=$P} { lappend LesPremiersPs $P } set OldP $P set DernierP $P lappend Sortie $Ligne } set OnAttend 1 set NouveauP $DernierP set OldP "" foreach Ligne $LeGscB { if { $OnAttend && ! [regexp {^ *[0-9]+\.[0-9]+} $Ligne]} { continue } if {[regexp "Predicted peptide" $Ligne]} { lappend Sortie $Ligne lappend Sortie " " break } if { ! [regexp {^ *[0-9]+\.[0-9]+} $Ligne]} { lappend Sortie $Ligne continue } scan $Ligne "%s %s %s %d %d" PE Type Sens D F set NouveauD [expr $D + $Offset] set NouveauF [expr $F + $Offset] if {$NouveauD<$Coupure} { continue } set OnAttend 0 scan [split $PE "."] "%d %d" P E if {$P!=$OldP} { incr NouveauP lappend LesSecondsPs $P lappend LesNouveauxPs $NouveauP } regsub $P $Ligne $NouveauP Ligne set OldP $P regsub " $D " $Ligne " $NouveauD " Ligne regsub " $F " $Ligne " $NouveauF " Ligne lappend Sortie $Ligne } DecortiqueGenScan All All Numbers [join $LeGscA "\n"] foreach P $LesPremiersPs { set Texte [DecortiqueGenScan $P All "TFAo"] lappend Sortie $Texte lappend Sortie " " } DecortiqueGenScan All All Numbers [join $LeGscB "\n"] foreach P $LesSecondsPs N $LesNouveauxPs { set Texte [DecortiqueGenScan $P All "TFAo"] regsub "predicted_peptide_$P" $Texte "predicted_peptide_$N" Texte lappend Sortie $Texte lappend Sortie " " } return $Sortie } proc FusionneLesRepEnUnSeul_PO {RepIni RepFin FileO2C2A2D2E FileCorrespondances} { ### A servi a mettre ttes les DDseq (et les fichiers du masking) des differents repertoires indexes pas date dans un seul repertoire ### ### Fusionne ts les fichiers contenus dans le RepIni dans le RepFin ### ### Stocke ttes les infos concernant les DDseq dans le FileCorrespondance ### # Lit le fichier O2C2A2D2E, stocke les correspondances entre BOXGscope, BOXProject, BOXIniSeq et les infos correspondantes # set F [open $FileO2C2A2D2E] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set LaDef [split [lindex $LaLigne 3] " "] set BOXGscope [lindex $LaDef 0] set BOXProject [lindex $LaDef 1] set BOXIniSeq [lindex $LaDef 2] if {[info exists Tab($BOXProject,BOXGscope)]} {Espionne "Gros PBL avec $Ligne";exit} set Tab($BOXProject,BOXGscope) $BOXGscope set Tab($BOXProject,BOXIniSeq) $BOXIniSeq set Tab($BOXProject,LesInfos) $LaLigne } close $F # Ds le repertoire ini, considere tous les repertoires commencant par 20 # # Creation du fichier de correspondances avec ttes les infos dispo sur chaque DDseq # set LeTexte {} set NbSeq 0 set NbSeqI 0 foreach Rep [glob -nocomplain "$RepIni/20*"] { set NameRep [file tail $Rep] set Date "" regexp {^([0-9]+)} $NameRep tmp Date Espionne "DIRECTORY $NameRep $Date" foreach TypeFichier [list "ICBP_D" "ICBP_U" "TOPO_D" "TOPO_U"] { foreach File [glob -nocomplain "$Rep/$TypeFichier*"] { set NameFile [file tail $File] set n "ERREUR" regexp {_[DU]{1}([0-9]+)} $NameFile tmp n if {$n == "ERREUR"} { Espionne "GROS PBL avec $File" exit } set BOXProject "$TypeFichier$n" if {[regexp {\.tfa\.masking\.infos$} $File]} { # determination des infos du masking # set VRG [join [LesInfosDuVRGMasking $File] "\t"] incr NbSeqI # definition de ttes les infos concernant les DDseq # set BOXGscope [set Tab($BOXProject,BOXGscope)] set BOXIniSeq [set Tab($BOXProject,BOXIniSeq)] set LesInfosDeOCADE [set Tab($BOXProject,LesInfos)] set Cluster [lindex $LesInfosDeOCADE 1 ] set Def [lindex $LesInfosDeOCADE 3 ] set Expr [join [lrange $LesInfosDeOCADE 4 end] "\t"] set Ligne "$BOXGscope\t$BOXProject\t$BOXIniSeq\tHomo sapiens\t$Date\t$Cluster\t$Def\t$VRG\t$Expr" Espionne $Ligne lappend LeTexte $Ligne } if {[regexp {\.tfa$} $File]} {incr NbSeq} File copy -force $File "$RepFin/$NameFile" } } } Sauve [join $LeTexte "\n"] dans $FileCorrespondances Espionne $NbSeq Espionne $NbSeqI return } proc FusionneLesResultatsDeAffy_TL {FileOut FileIdAffy RepIdProtAffy ExtensionIdProtAffy} { set i 0 set iProt 0 foreach File [lsort -unique [glob -nocomplain -directory $RepIdProtAffy "*.$ExtensionIdProtAffy"]] { Espionne $File set F [open $File] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {![regexp {^[0-9]+} $Ligne]} {continue} set LaLigne [split $Ligne "\t"] set Id [lindex $LaLigne 0] if {[info exists TabDejaVu($Id)]} {continue} set TabDejaVu($Id) 1 incr i set Prots [lindex $LaLigne 1] if {$Prots == "---"} {continue} regsub -all " /// " $Prots " " Prots set LesProts [split $Prots " "] set Tab($Id) $LesProts incr iProt } close $F } Espionne $i Espionne $iProt set LeTexte {} set F [open $FileIdAffy] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set Id $Ligne if {![info exists Tab($Id)]} { lappend LeTexte "$Id" } else { set Prots [join [set Tab($Id)] "\t"] lappend LeTexte "$Id\t$Prots" } } close $F EspionneL $LeTexte Sauve [join $LeTexte "\n"] dans $FileOut return } 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 FusionneMutationMTMPourTous {} { foreach Type [MutationMTM ListOf Possible Type] { FusionneMutationMTM $Type } } proc FusionnerLesCSV {Tail} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|FusionnerLesCSV: Start" set nbLignesOut 0 set FichierEntete [open "chrY$Tail.csv" "r"] set FichierSortie [open "Total$Tail.csv" "w"] gets $FichierEntete Entete puts $FichierSortie $Entete incr nbLignesOut close $FichierEntete foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 "X" "Y"} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|FusionnerLesCsv: Adding chr$I data" set FichierCsv [open "chr$I$Tail.csv" "r"] gets $FichierCsv Entete while { [gets $FichierCsv Ligne] >=0 } { incr nbLignesOut puts $FichierSortie $Ligne } close $FichierCsv } close $FichierSortie set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|FusionnerLesCSV: End ($nbLignesOut written)" } proc FusionnerSelonMM2 {} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "FusionnerSelonMM2 : Start" foreach J {0 1 2 3 4 5 6} { foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y} { set Fichier1MM [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-1MM.coord" "r"] set Fichier2MM [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-2MM.coord" "r"] set FichierOut [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-unperfect.coord" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "FusionnerSelonMM2 : DR$J / Chromosome $I => Ajout des MM1" while { [gets $Fichier1MM Ligne1] >=0 } { puts $FichierOut $Ligne1 } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "FusionnerSelonMM2 : DR$J / Chromosome $I => Ajout des MM2" while { [gets $Fichier2MM Ligne2] >=0 } { puts $FichierOut $Ligne2 } close $Fichier1MM close $Fichier2MM close $FichierOut file delete "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-1MM.coord" file delete "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-2MM.coord" } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "FusionnerSelonMM2 : End" } proc GAR {} { global db GR LoadTkAndPackages ChangeTkOptions option add *Label.background black option add *Label.foreground white set GR(Lcm) [linsert $GR(Lcm) 0 "All"] set GR(Lgap) [linsert $GR(Lgap) 0 "All"] font create GRFont -family Helvetica -size 22 -weight bold ttk::style configure Combobox -font GRFont ttk::style configure TLabel -font GRFont ttk::style configure TButton -font GRFont set w .gar frame $w -bg black grid $w -row 0 -column 0 -sticky news grid columnconfig . all -weight 1 grid rowconfig . all -weight 1 frame $w.fchx -bg black grid $w.fchx -row 0 -column 0 -sticky ew label $w.fchx.lcm -font GARFont -text "Clus. Meth." -anchor w -justify right set GR(cm) [lindex $GR(Lcm) 0] ttk::combobox $w.fchx.ccm -state readonly -values $GR(Lcm) -textvariable GR(cm) label $w.fchx.lgp -font GARFont -text "Gap Thr." -anchor w -justify right set GR(gap) [lindex $GR(Lgap) 0] ttk::combobox $w.fchx.cgp -state readonly -values $GR(Lgap) -textvariable GR(gap) label $w.fchx.llm -font GARFont -text "Limits" -anchor w -justify right set GR(lim) [lindex $GR(Llim) 0] ttk::combobox $w.fchx.clm -state readonly -values $GR(Llim) -textvariable GR(lim) grid $w.fchx.lcm -row 0 -column 0 -sticky w grid $w.fchx.ccm -row 0 -column 1 -sticky ew grid $w.fchx.lgp -row 0 -column 2 -sticky w grid $w.fchx.cgp -row 0 -column 3 -sticky ew grid $w.fchx.llm -row 0 -column 4 -sticky w grid $w.fchx.clm -row 0 -column 5 -sticky ew frame $w.fbou -bg black grid $w.fbou -row 1 -column 0 -sticky ew button $w.fbou.brun -font GARFont -bg green1 -text "\nRUN\n" -command {TrieBCMRes cree} button $w.fbou.bsns -font GARFont -bg cyan -text "Sensibility" -command {TrieBCMRes sens} button $w.fbou.bspc -font GARFont -bg cyan -text "Specifity" -command {TrieBCMRes spec} button $w.fbou.bpwr -font GARFont -bg cyan -text "Power" -command {TrieBCMRes power} label $w.fbou.lbi -font "Courier 12 bold" -bg black -fg white -textvariable GR(LabelInfo) -justify left -anchor w grid $w.fbou.brun -row 0 -column 0 -sticky w -padx {10 50} grid $w.fbou.bsns -row 0 -column 1 -sticky w grid $w.fbou.bspc -row 0 -column 2 -sticky w grid $w.fbou.bpwr -row 0 -column 3 -sticky w grid $w.fbou.lbi -row 1 -column 0 -columnspan 4 -sticky ew set GR(text) $w.txt text $w.txt -font "Courier 12 bold" -bg black -fg white grid $w.txt -row 3 -column 0 -sticky news grid columnconfigure $w all -weight 1 grid rowconfigure $w 3 -weight 1 return } proc GCContent {Nom} { return [CompositionEn GC $Nom] } proc GCGtoTFA {TexteGCG {Entete ""}} { return [SequenceFormatTFA $Texte "Entete" "gcg"] } proc GCGtoTFAPourToutLeRepertoire {} { foreach F [glob "*.nuc"] { set Nom [file tail $F] regsub {\.nuc} $Nom "" Nom set TFA [SequenceFormatTFA [ContenuDuFichier $F] "$Nom Cloning vector $Nom" "gcg"] Espionne [Sauve $TFA dans "$Nom.tfa"] } exit } proc GCLevel {Nom} { set GC [CompositionEn GC $Nom] return [QuelInterval $GC [LesSeuilsGC] [LesSeuilsGC "SignificationMerci"]] } proc GCPanel {LeCanvasPere} { Wup "Panel de choix d affichage et de couleur du graphes du meilleur GC" set LesTmpGraphes [LesGraphesDeLOligo $LeCanvasPere] if {$LesTmpGraphes==""} {return ""} set GrapheTopLevel "$LeCanvasPere.bestgcgraphe" if {[winfo exists $GrapheTopLevel]} { wm deiconify $GrapheTopLevel raise $GrapheTopLevel return "" } else {toplevel $GrapheTopLevel} wm geometry $GrapheTopLevel +300+100 wm title $GrapheTopLevel "Best GC Selection" wm resizable $GrapheTopLevel false false set FrameGraphe "$GrapheTopLevel.bestgcframe" frame $FrameGraphe -borderwidth "3" -relief "groove" pack $FrameGraphe -expand "true" -side "top" -fill "both" set NbGraph [llength $LesTmpGraphes] set NbRow 0 set IndGraph 0 set LesGraphes "" foreach G $LesTmpGraphes { if {$G=="GC"} { set LesGraphes [linsert $LesGraphes 0 $G] continue } lappend LesGraphes $G } foreach Graphe $LesGraphes { incr IndGraph incr NbRow set TagOrId $Graphe set Graphe [string tolower $Graphe] set PetiteFrameGraphe "$FrameGraphe.f$Graphe" set LGraph "$PetiteFrameGraphe.l$Graphe" set BGrOn "$PetiteFrameGraphe.bgon$Graphe" set BGrOff "$PetiteFrameGraphe.bgoff$Graphe" set BMoyOn "$PetiteFrameGraphe.bmoyon$Graphe" set BMoyOff "$PetiteFrameGraphe.bmoyoff$Graphe" set BColor1 "$PetiteFrameGraphe.bcolor1$Graphe" set BColor2 "$PetiteFrameGraphe.bcolor2$Graphe" frame $PetiteFrameGraphe -borderwidth "0" -relief "groove" label $LGraph -text "$TagOrId" -padx "2" -borderwidth "3" -relief "groove" -background "orange" button $BGrOn -text "On" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Raiser $LeCanvasPere ${TagOrId}Lines" button $BGrOff -text "Off" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Lower $LeCanvasPere ${TagOrId}Lines" button $BMoyOn -text "On" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Raiser $LeCanvasPere ${TagOrId}Plot" button $BMoyOff -text "Off" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Lower $LeCanvasPere ${TagOrId}Plot" button $BColor1 -text "Color" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -background deepskyblue2 -command "LePanneauDeCouleursDuGraph $BColor1 $LeCanvasPere ${TagOrId}Lines" button $BColor2 -text "Color" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -background deepskyblue2 -command "LePanneauDeCouleursDuGraph $BColor1 $LeCanvasPere ${TagOrId}Plot" grid $PetiteFrameGraphe -sticky ewns grid $LGraph -row $NbRow -column 0 -sticky ewns -rowspan 2 grid $BGrOn -row $NbRow -column 1 -sticky ewns grid $BGrOff -row $NbRow -column 2 -sticky ewns grid $BMoyOn -row $NbRow -column 3 -sticky ewns grid $BMoyOff -row $NbRow -column 4 -sticky ewns incr NbRow grid $BColor1 -row $NbRow -column 1 -sticky ewns -columnspan 2 grid $BColor2 -row $NbRow -column 3 -sticky ewns -columnspan 2 if {$IndGraph==1} { set DismissB "$PetiteFrameGraphe.destroybutton" set LDuGraph "$PetiteFrameGraphe.ldugraph" set LDuMoyenne "$PetiteFrameGraphe.ldumoyenne" button $DismissB -text "Exit" -anchor "center" -padx "3" -background "red" -borderwidth "2" -relief groove -activebackground "red" -overrelief "sunken" -command "destroy $GrapheTopLevel" label $LDuGraph -text "Lines" -anchor "center" -padx "2" -background "#808FFF" -borderwidth "3" -relief groove label $LDuMoyenne -text "Plot" -anchor "center" -padx "2" -background "#808FFF" -borderwidth "3" -relief groove grid $DismissB -row 0 -column 0 -sticky ewns grid $LDuGraph -row 0 -column 1 -sticky ewns -columnspan 2 grid $LDuMoyenne -row 0 -column 3 -sticky ewns -columnspan 2 } if {$IndGraph==$NbGraph} { set LAllDuGr "$PetiteFrameGraphe.lalldugraph" set BAllGrOn "$PetiteFrameGraphe.ballgon" set BAllGrOff "$PetiteFrameGraphe.ballgoff" label $LAllDuGr -text "Both" -anchor "center" -padx "2" -relief "groove" -background "green3" -borderwidth "3" button $BAllGrOn -text "On" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "Raiser $LeCanvasPere OligoGraph" button $BAllGrOff -text "Off" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "Lower $LeCanvasPere OligoGraph" incr NbRow grid $LAllDuGr -row $NbRow -column 0 -sticky ewns grid $BAllGrOn -row $NbRow -column 1 -sticky ewns -columnspan 2 grid $BAllGrOff -row $NbRow -column 3 -sticky ewns -columnspan 2 } grid columnconfigure $PetiteFrameGraphe 0 -weight 1 grid columnconfigure $PetiteFrameGraphe 1 -weight 0 grid columnconfigure $PetiteFrameGraphe 2 -weight 0 grid columnconfigure $PetiteFrameGraphe 3 -weight 0 grid columnconfigure $PetiteFrameGraphe 4 -weight 0 } return "" } proc GCrna {} { LitLeTFA 250ori_rna.tfa Lor Sor set fmt "%-20s %6.2f %6.2f %6.2f %6.2f" puts "Protein Name A C G T " foreach n $::LNOrdali { if {$n ne ""} {lappend LNO $n} } foreach l [LesLignesDuFichier 250ori.corr] { lassign [split $l "\t"] gi prot nuc lappend Lcor [list $gi $prot $nuc] } foreach n $Lor o $LNO { set i [lsearch -index 2 $Lcor $n] lassign [lindex $Lcor $i] gi prot nuc lassign [ContenuEnGC [set Sor($n)]] a c g t if {[set phy [set ::TDesPhylum($o)]] eq ""} { set phy "unknown" } set org [set ::TDesOrganismes($o)] set Lorg [split $org " "] if {[string index [lindex $Lorg 1] 0] ne "("} { set org [join [lrange $Lorg 0 1] " "] } lappend Lrst [list $gi $phy $org $o $n $a $c $g $t] } foreach e [lsort -index 7 -real -decreasing $Lrst] { lassign $e gi phy org o n a c g t puts "$gi ($phy) $org | $o" puts [format $fmt $n $a $c $g $t] } exit } proc GIDeBanqueIdAccess {BanqueId Access} { set Version [PageInfo $BanqueId genbankfull gid] if {$Version == ""} { set Version [PageInfo $Access genbankfull gid] } set GI "" regexp " GI:(\[0-9]*)" $Version tmp GI return $GI } proc GIDeLAccess {BIdOuAccess} { set Version [PageInfo $BIdOuAccess genbankfull gid] if {$Version == ""} { set Version [PageInfo $BIdOuAccess genbankfull gid] } set GI "" regexp " GI:(\[0-9]*)" $Version tmp GI return $GI } proc GNdeAful {Nom} { if {[scan [lindex [DonneesAful [NomDuMeilleurAful $Nom]] 0] "%s %s %s %s" AF RoFa Orga GN] == 4 } { return $GN } else { return "zzzz" } } proc GNduMarque {Marque} { set tid [lindex [split $Marque :] 0] set tc [lindex [split $Marque :] 1] return [lindex [split [$tc itemcget [expr $tid +1] -text ] "\n"] 0] } proc GOAnalyse {AccessQuery FichierMSF FichierClust FichierOUT {NomQuery QUERY_PROTEIN} {IdMin 0.98} {NorMDMin 0.3} {PMin 0.8} {FMin 0.5}} { Espionne "GO -> IPO" set LesGOIPO [IPO $AccessQuery ] Espionne "GO -> PPO" set LesGOPPO [PPO $FichierMSF $NomQuery $IdMin ] Espionne "GO -> MSO" set LesGOMSO [MSO $FichierClust $FichierMSF $NomQuery $NorMDMin $PMin $FMin] Espionne "GO -> GPO" set LesTypes [GODB LesTypes] set TabGO(IPO,LesGO) {} set TabGO(PPO,LesGO) {} set TabGO(MSO,LesGO) {} foreach Type $LesTypes { set TabGO(IPO,Type,$Type,LesGO) {} set TabGO(PPO,Type,$Type,LesGO) {} set TabGO(MSO,Type,$Type,LesGO) {} set TabGO(GPO,Type,$Type,LesGO) {} } #########IPO IPO IPO############# foreach LeGO $LesGOIPO { set GO [lindex $LeGO 0] set Type [lindex $LeGO 1] set Def [lindex $LeGO 2] regsub -all -nocase {[^0-9a-z\.\-_\:]} $Def " " Def if {![info exists TabGO(IPO,Type,$Type,GO,$GO,nAccess)]} { set TabGO(IPO,Type,$Type,GO,$GO,nAccess) 1 set TabGO(IPO,Type,$Type,GO,$GO,LesAccess) {} lappend TabGO(IPO,Type,$Type,LesGO) $GO lappend TabGO(IPO,LesGO) $GO } if {![info exists TabGO(Type,$Type,GO,$GO,Definition)]} { set TabGO(Type,$Type,GO,$GO,Definition) $Def } lappend TabGO(IPO,Type,$Type,GO,$GO,LesAccess) $AccessQuery } #########PPO PPO PPO############# foreach LeGO $LesGOPPO { set GO [lindex $LeGO 0] set Type [lindex $LeGO 1] set Def [lindex $LeGO 2] regsub -all -nocase {[^0-9a-z\.\-_\:]} $Def " " Def set nAcc [lindex $LeGO 3] set LesAcc [lindex $LeGO 4] if {![info exists TabGO(PPO,Type,$Type,GO,$GO,nAccess)]} { set TabGO(PPO,Type,$Type,GO,$GO,nAccess) $nAcc set TabGO(PPO,Type,$Type,GO,$GO,LesAccess) {} lappend TabGO(PPO,Type,$Type,LesGO) $GO lappend TabGO(PPO,LesGO) $GO } if {![info exists TabGO(Type,$Type,GO,$GO,Definition)]} { set TabGO(Type,$Type,GO,$GO,Definition) $Def } foreach Acc $LesAcc {lappend TabGO(PPO,Type,$Type,GO,$GO,LesAccess) $Acc} } #########MSO MSO MSO############# foreach LeGO $LesGOMSO { set GO [lindex $LeGO 0] set Type [lindex $LeGO 1] set Def [lindex $LeGO 2] regsub -all -nocase {[^0-9a-z\.\-_\:]} $Def " " Def set nAcc [lindex $LeGO 3] set LesAcc [lindex $LeGO 4] if {![info exists TabGO(MSO,Type,$Type,GO,$GO,nAccess)]} { set TabGO(MSO,Type,$Type,GO,$GO,nAccess) $nAcc set TabGO(MSO,Type,$Type,GO,$GO,LesAccess) {} lappend TabGO(MSO,Type,$Type,LesGO) $GO lappend TabGO(MSO,LesGO) $GO } if {![info exists TabGO(Type,$Type,GO,$GO,Definition)]} { set TabGO(Type,$Type,GO,$GO,Definition) $Def } foreach Acc $LesAcc {lappend TabGO(MSO,Type,$Type,GO,$GO,LesAccess) $Acc} } #########GPO GPO GPO############# foreach LeGO [GPO [set TabGO(IPO,LesGO)] [set TabGO(PPO,LesGO)] [set TabGO(MSO,LesGO)]] { set GO [lindex $LeGO 0] set Type [lindex $LeGO 1] set Def [lindex $LeGO 2] regsub -all -nocase {[^0-9a-z\.\-_\:]} $Def " " Def if {![info exists TabGO(GPO,Type,$Type,GO,$GO,nAccess)]} { set TabGO(GPO,Type,$Type,GO,$GO,nAccess) 0 set TabGO(GPO,Type,$Type,GO,$GO,LesAccess) {} lappend TabGO(GPO,Type,$Type,LesGO) $GO } if {![info exists TabGO(Type,$Type,GO,$GO,Definition)]} { set TabGO(Type,$Type,GO,$GO,Definition) $Def } } #######Fichier XML####################### set LeTexte {} lappend LeTexte "" ###DTD interne ########################### lappend LeTexte "" lappend LeTexte "\t" lappend LeTexte "\t\t" lappend LeTexte "\t\t" lappend LeTexte "\t\t\t" lappend LeTexte "\t\t\t" lappend LeTexte "\t\t" set Types [join $LesTypes ", "] lappend LeTexte "\t\t\t" lappend LeTexte "\t\t\t" lappend LeTexte "\t\t\t" lappend LeTexte "\t\t\t" foreach Type $LesTypes { lappend LeTexte "\t\t\t\t" lappend LeTexte "\t\t\t\t\t" lappend LeTexte "\t\t\t\t\t" lappend LeTexte "\t\t\t\t\t\t" } lappend LeTexte "\]>" ###DTD interne ########################### lappend LeTexte "" lappend LeTexte "\t" if {[file exists $FichierMSF ]} {lappend LeTexte "\t\t$FichierMSF" } if {[file exists $FichierClust]} {lappend LeTexte "\t\t$FichierClust"} lappend LeTexte "\t" lappend LeTexte "\t" lappend LeTexte "\t\t" foreach Type $LesTypes { lappend LeTexte "\t\t\t<$Type>" foreach GO [set TabGO(IPO,Type,$Type,LesGO)] { set NbAccess [set TabGO(IPO,Type,$Type,GO,$GO,nAccess)] set Def [set TabGO(Type,$Type,GO,$GO,Definition) ] lappend LeTexte "\t\t\t\t" foreach Acc [set TabGO(IPO,Type,$Type,GO,$GO,LesAccess)] { lappend LeTexte "\t\t\t\t\t$Acc" } lappend LeTexte "\t\t\t\t" } lappend LeTexte "\t\t\t" } lappend LeTexte "\t\t" lappend LeTexte "\t\t" foreach Type $LesTypes { lappend LeTexte "\t\t\t<$Type>" foreach GO [set TabGO(PPO,Type,$Type,LesGO)] { set NbAccess [set TabGO(PPO,Type,$Type,GO,$GO,nAccess)] set Def [set TabGO(Type,$Type,GO,$GO,Definition) ] lappend LeTexte "\t\t\t\t" foreach Acc [set TabGO(PPO,Type,$Type,GO,$GO,LesAccess)] { lappend LeTexte "\t\t\t\t\t$Acc" } lappend LeTexte "\t\t\t\t" } lappend LeTexte "\t\t\t" } lappend LeTexte "\t\t" lappend LeTexte "\t\t" foreach Type $LesTypes { lappend LeTexte "\t\t\t<$Type>" foreach GO [set TabGO(MSO,Type,$Type,LesGO)] { set NbAccess [set TabGO(MSO,Type,$Type,GO,$GO,nAccess)] set Def [set TabGO(Type,$Type,GO,$GO,Definition) ] lappend LeTexte "\t\t\t\t" foreach Acc [set TabGO(MSO,Type,$Type,GO,$GO,LesAccess)] { lappend LeTexte "\t\t\t\t\t$Acc" } lappend LeTexte "\t\t\t\t" } lappend LeTexte "\t\t\t" } lappend LeTexte "\t\t" lappend LeTexte "\t\t" foreach Type $LesTypes { lappend LeTexte "\t\t\t<$Type>" foreach GO [set TabGO(GPO,Type,$Type,LesGO)] { set NbAccess [set TabGO(GPO,Type,$Type,GO,$GO,nAccess)] set Def [set TabGO(Type,$Type,GO,$GO,Definition) ] lappend LeTexte "\t\t\t\t" foreach Acc [set TabGO(GPO,Type,$Type,GO,$GO,LesAccess)] { lappend LeTexte "\t\t\t\t\t$Acc" } lappend LeTexte "\t\t\t\t" } lappend LeTexte "\t\t\t" } lappend LeTexte "\t\t" lappend LeTexte "\t" lappend LeTexte "" Sauve [join $LeTexte "\n"] dans $FichierOUT return $FichierOUT } proc GOCommunsEntreClusters {Cl1 Cl2 FichierGO TypeGO} { if {$FichierGO == ""} {return} set LesInfos {} foreach Groupe [InterrogeGeneOntology $FichierGO LesGroupes] { if {$Groupe != $Cl1 && $Groupe != $Cl2} {continue} } foreach Cl [list $Cl1 $Cl2] { set LesGODuCl [InterrogeGeneOntology $FichierGO Groupe $Cl LesGO] foreach GODuCl $LesGODuCl { set Type [InterrogeGeneOntology $FichierGO GO $GODuCl Type] Espionne "$Cl $GODuCl $Type" lappend Tab($Cl,$Type,LesGO) $GODuCl } } set LesTypes [InterrogeGeneOntology $FichierGO LesTypes] Espionne $LesTypes foreach Cl [list Cl1 Cl2] { foreach Type $LesTypes { set LesGO [set Tab($Cl,$Type,LesGO)] lappend LesInfos "$Cl\t$Type\t$LesGO" } } Espionne $LesInfos if {0} { foreach Linfo $LesInfos { set Cluster [lindex $Linfo 0] set LesGO [lindex $Linfo 1 end] foreach GO $LesGO { set LesAncetres [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] } } } return } proc GODB {args} { # OPTIONS de GODB # Load # Exists (...) # set (...) valeur # append (...) valeur # unset (...) # unset # LesTypes # LesGO # Type $Type LesGO # GO $GO LesTypes # Type $Type GO $GO LesSynonymes # Type $Type GOSynonyme $Synonyme GODeRef # Type $Type GO $GO LesNiveaux # Type $Type LesNiveaux # Type $Type Niveau $Niveau LesGO # Type $Type GO $GO LesEC # Type $Type GO $GO LesParents # Type $Type GO $GO LesConstituants # Type $Type GO $GO LesContributions # Type $Type GO $GO LesEnfants # Type $Type GO $GO LesDefinitions # set GONothing "GO:nothing" # Type $Type Nothing # Type $Type GO $GONothing LesSynonymes # Type $Type GO $GONothing LesNiveaux # Type $Type GO $GONothing LesEC # Type $Type GO $GONothing LesParents # Type $Type GO $GONothing LesConstituants # Type $Type GO $GONothing LesContributions # Type $Type GO $GONothing LesEnfants # Type $Type TousLesGO # Type $Type LesNiveaux global TableauArbreGeneOntology set FirstArg [lindex $args 0] if {[string equal -nocase $FirstArg "Exists"]} { if {![info exists TableauArbreGeneOntology]} {return 0} set Quoi [join [lrange $args 1 end] ","] if {$Quoi == ""} {return 0} return [info exists TableauArbreGeneOntology($Quoi)] } if {[string equal -nocase $FirstArg "append"]} { if {![info exists TableauArbreGeneOntology]} {return} set Quoi [join [lrange $args 1 end-1] ","] set Valeur [lindex $args end] if {$Quoi == ""} {return} return [lappend TableauArbreGeneOntology($Quoi) $Valeur] } if {[string equal -nocase $FirstArg "set"]} { if {![info exists TableauArbreGeneOntology]} {return} set Quoi [join [lrange $args 1 end-1] ","] set Valeur [lindex $args end] if {$Quoi == ""} {return} return [set TableauArbreGeneOntology($Quoi) $Valeur] } if {[string equal -nocase $FirstArg "unset"]} { if {![info exists TableauArbreGeneOntology]} {return} set Quoi [join [lrange $args 1 end] ","] if {$Quoi == ""} { return [info exists TableauArbreGeneOntology] } else { catch {unset TableauArbreGeneOntology($Quoi)} } return } if {[string equal -nocase $FirstArg "Load"] && ![info exists TableauArbreGeneOntology(EstCharge)]} { if {[info exists TableauArbreGeneOntology]} {unset TableauArbreGeneOntology} set TableauArbreGeneOntology(EstCharge) 1 LoadGODB TableauArbreGeneOntology return } set Quoi [join $args ","] if {[info exists TableauArbreGeneOntology($Quoi)]} {return [set TableauArbreGeneOntology($Quoi)] } if {[info exists TableauArbreGeneOntology(EstCharge)]} {return} LoadGODB TableauArbreGeneOntology set TableauArbreGeneOntology(EstCharge) 1 if {[info exists TableauArbreGeneOntology($Quoi)]} { return [set TableauArbreGeneOntology($Quoi)] } return } proc GODBDir {} { global RepGODBDir global RepertoireDuGenome if {[info exists RepertoireDuGenome]} { set Rep "[OntologyDir]" if {![file exists $Rep]} {return} set RepGODBDir $Rep } else { set Rep "[ProgSourceDir]/GODB" if {![file exists $Rep]} {return} set RepGODBDir $Rep } return $RepGODBDir } proc GOEnrichmentWebService {Lids} { set url "http://david.abcc.ncifcrf.gov/api.jsp?" set Largs [list] set tool "chartReport" lappend Largs "tool=$tool" set type "UNIPROT_ID" set type "UNIPROT_ID" lappend Largs "type=$type" set annot "GOTERM_BP_ALL,GOTERM_CC_ALL,GOTERM_MF_ALL" lappend Largs "annot=$annot" set sid [join $Lids ,] lappend Largs "ids=$sid" set args [join $Largs "&"] append url "$args" puts "$url" if {[string length $url] > 2048} { puts "url length [string length $url]" exit } set res [HttpCopy $url] return $res } proc GOPanel {{w ""}} { global LesAccessPourLeGO global AccessPourLeGO global LesProjGscopePourLeGO global ProjGscopePourLeGO global LesBoxGscopePourLeGO global BoxGscopePourLeGO global LesBlastPPourLeGO global BlastPPourLeGO global LesFichiersDPC2GO global FichierDPC2GO global LesGOPourLeGO global GOPourLeGO global LesRequetesPourLeGO global RequetePourLeGO global TabValidationDesGO global TypeSelectionne global OptionsSelect global DensitySelect set DensitySelect "No" set TypeSelectionne [lindex [LesTypesOntologiques] 0] set OptionsSelect "OnlyMyGO" set LesAccessPourLeGO {} set LesProjGscopePourLeGO {} set LesBoxGscopePourLeGO {} set LesBlastPPourLeGO {} set LesGOPourLeGO {} set LesRequetesPourLeGO {} set LesFichiersDPC2GO {} if {$w == ""} {set w "."} else {toplevel $w} wm geometry $w +300+100 wm title $w "ONTOLOGY PANEL" wm resizable $w false false if {$w == "."} {set w ""} set FRequetes "$w.frequetes" set FType "$w.ftype" set FDensity "$w.fdensity" set FOptions "$w.foptions" set FBoutons "$w.fboutons" frame $FRequetes -borderwidth 3 -relief ridge frame $FType -borderwidth 3 -relief ridge frame $FDensity -borderwidth 3 -relief ridge frame $FOptions -borderwidth 3 -relief ridge frame $FBoutons -borderwidth 3 -relief ridge pack $FRequetes -side top -fill both pack $FType -fill x pack $FDensity -fill x pack $FOptions -fill x pack $FBoutons -fill x set LTitre "$FRequetes.ltitre" label $LTitre -text "ONTOLOGY" -borderwidth 3 -relief ridge pack $LTitre -side top -fill x ###Access### set FAccess "$FRequetes.faccess" set LAccess "$FAccess.laccess" set EAccess "$FAccess.eaccess" set BAccess "$FAccess.baccess" frame $FAccess label $LAccess -text "Access or Id" -background yellow -width 20 -anchor w entry $EAccess -textvariable AccessPourLeGO button $BAccess -text "ADD" -background RoyalBlue -command { set AccessPourLeGO [string toupper $AccessPourLeGO] if { ![info exists TabValidationDesGO($AccessPourLeGO)] && [regexp -nocase {[0-9a-z]} $AccessPourLeGO]} { Espionne $AccessPourLeGO set TabValidationDesGO($AccessPourLeGO) 1 lappend LesAccessPourLeGO $AccessPourLeGO set AccessPourLeGO "" } } ###Gscope### set FProjGscope "$FRequetes.fprojgscope" set LProjGscope "$FProjGscope.lprojgscope" set EProjGscope "$FProjGscope.eprojgscope" set BProjGscope "$FProjGscope.bprojgscope" frame $FProjGscope label $LProjGscope -text "Gscope DataBase" -background yellow -width 20 -anchor w entry $EProjGscope -textvariable ProjGscopePourLeGO button $BProjGscope -text "ADD" -background RoyalBlue -command { if { [file exists [GscopeDatabaseDir $ProjGscopePourLeGO]] && ![info exists TabValidationDesGO($ProjGscopePourLeGO)] && [regexp -nocase {[0-9a-z]} $ProjGscopePourLeGO]} { Espionne $ProjGscopePourLeGO set TabValidationDesGO($ProjGscopePourLeGO) 1 lappend LesProjGscopePourLeGO $ProjGscopePourLeGO set ProjGscopePourLeGO "" } } ###Gscope Box### set FBoxGscope "$FRequetes.fboxgscope" set LBoxGscope "$FBoxGscope.lboxgscope" set EBoxGscope "$FBoxGscope.eboxgscope" set BBoxGscope "$FBoxGscope.bboxgscope" frame $FBoxGscope label $LBoxGscope -text "Gscope Box" -background yellow -width 20 -anchor w entry $EBoxGscope -textvariable BoxGscopePourLeGO button $BBoxGscope -text "ADD" -background RoyalBlue -command { if { ![info exists TabValidationDesGO($BoxGscopePourLeGO)] && [regexp -nocase {[0-9a-z]} $BoxGscopePourLeGO]} { Espionne $BoxGscopePourLeGO set TabValidationDesGO($BoxGscopePourLeGO) 1 lappend LesBoxGscopePourLeGO $BoxGscopePourLeGO set BoxGscopePourLeGO "" } } ###BlastP### set FBlastP "$FRequetes.fblastp" set LBlastP "$FBlastP.lblastp" set EBlastP "$FBlastP.eblastp" set BBlastP "$FBlastP.bblastp" frame $FBlastP label $LBlastP -text "Blast P or X or Ballast" -background yellow -width 20 -anchor w entry $EBlastP -textvariable BlastPPourLeGO button $BBlastP -text "ADD" -background RoyalBlue -command { if { [file exists $BlastPPourLeGO] && ![info exists TabValidationDesGO($BlastPPourLeGO)] && [regexp -nocase {[0-9a-z]} $BlastPPourLeGO]} { Espionne $BlastPPourLeGO set TabValidationDesGO($BlastPPourLeGO) 1 lappend LesBlastPPourLeGO $BlastPPourLeGO set BlastPPourLeGO "" } } ###FichierDPC### set FFichierDPC "$FRequetes.ffichierdpc" set LFichierDPC "$FFichierDPC.lfichierdpc" set EFichierDPC "$FFichierDPC.efichierdpc" set BFichierDPC "$FFichierDPC.bfichierdpc" frame $FFichierDPC label $LFichierDPC -text "Fichier DPC to GO" -background yellow -width 20 -anchor w entry $EFichierDPC -textvariable FichierDPC2GO button $BFichierDPC -text "ADD" -background RoyalBlue -command { if { [file exists $FichierDPC2GO] && ![info exists TabValidationDesGO($FichierDPC2GO)] && [regexp -nocase {[0-9a-z]} $FichierDPC2GO]} { Espionne $FichierDPC2GO set TabValidationDesGO($FichierDPC2GO) 1 lappend LesFichiersDPC2GO $FichierDPC2GO set FichierDPC2GO "" } } ###GO### set FGO "$FRequetes.fgo" set LGO "$FGO.lgo" set EGO "$FGO.ego" set BGO "$FGO.bgo" frame $FGO label $LGO -text "access GO" -background yellow -width 20 -anchor w entry $EGO -textvariable GOPourLeGO button $BGO -text "ADD" -background RoyalBlue -command { if { ![info exists TabValidationDesGO($GOPourLeGO)] && [regexp -nocase {[0-9a-z]} $GOPourLeGO]} { Espionne $GOPourLeGO set TabValidationDesGO($GOPourLeGO) 1 lappend LesGOPourLeGO $GOPourLeGO set GOPourLeGO "" } } ###requete### set Frequete "$FRequetes.frequete" set Lrequete "$Frequete.lrequete" set Erequete "$Frequete.erequete" set Brequete "$Frequete.brequete" frame $Frequete label $Lrequete -text "EC or IPR or Keywords" -background yellow -width 20 -anchor w entry $Erequete -textvariable RequetePourLeGO button $Brequete -text "ADD" -background RoyalBlue -command { if { ![info exists TabValidationDesGO(RequetePourLeGO)] && [regexp -nocase {[0-9a-z]} $RequetePourLeGO]} { Espionne $RequetePourLeGO set TabValidationDesGO($RequetePourLeGO) 1 lappend LesRequetesPourLeGO $RequetePourLeGO set RequetePourLeGO "" } } ##Choix Type##### label "$FType.ltype" -text "Select the ontology type" -anchor center pack "$FType.ltype" -fill both -side top foreach UnType [LesTypesOntologiques] { radiobutton "$FType.rb$UnType" -text "$UnType" -variable TypeSelectionne -value "$UnType" pack configure "$FType.rb$UnType" -side left -fill x } ###Choix Density#### label "$FDensity.ldensity" -text "Select the density options" -anchor center pack "$FDensity.ldensity" -fill both -side top radiobutton "$FDensity.rboption1" -text "Access" -variable DensitySelect -value "Access" pack configure "$FDensity.rboption1" -side left -fill x radiobutton "$FDensity.rboption2" -text "Box" -variable DensitySelect -value "Box" pack configure "$FDensity.rboption2" -side left -fill x radiobutton "$FDensity.rboption3" -text "Requetes" -variable DensitySelect -value "Requetes" pack configure "$FDensity.rboption3" -side left -fill x radiobutton "$FDensity.rboption4" -text "All" -variable DensitySelect -value "All" pack configure "$FDensity.rboption4" -side left -fill x radiobutton "$FDensity.rboption5" -text "None" -variable DensitySelect -value "No" pack configure "$FDensity.rboption5" -side left -fill x ##Choix Options##### label "$FOptions.loptions" -text "Select the drawing options" -anchor center pack "$FOptions.loptions" -fill both -side top radiobutton "$FOptions.rboption1" -text "Only My GO" -variable OptionsSelect -value "OnlyMyGO" pack configure "$FOptions.rboption1" -side left -fill x radiobutton "$FOptions.rboption2" -text "All and My GO" -variable OptionsSelect -value "AllAndMyGO" pack configure "$FOptions.rboption2" -side left -fill x radiobutton "$FOptions.rboption3" -text "Not My GO" -variable OptionsSelect -value "NotDisplayMyGO" pack configure "$FOptions.rboption3" -side left -fill x ####Bouton#### set BFermer "$FBoutons.bfermer" button $BFermer -text "DISMISS" -background red -command "destroy $w" set BReset "$FBoutons.breset" button $BReset -text "RESET" -background orange -command "ResetMesGO" set BAfficherCheese "$FBoutons.baffichercheese" button $BAfficherCheese -text "DRAW Pie-chart" -background green -command {ChargeLesGO $TypeSelectionne $OptionsSelect $DensitySelect Cheese} set BAfficherTree "$FBoutons.baffichertree" button $BAfficherTree -text "DRAW Tree" -background green -command {ChargeLesGO $TypeSelectionne $OptionsSelect $DensitySelect Tree} pack $FAccess -side top -fill x pack $LAccess -side left -fill both pack $EAccess -side left -fill both pack $BAccess -side left -fill both pack $FProjGscope -side top -fill x pack $LProjGscope -side left -fill both pack $EProjGscope -side left -fill both pack $BProjGscope -side left -fill both pack $FBoxGscope -side top -fill x pack $LBoxGscope -side left -fill both pack $EBoxGscope -side left -fill both pack $BBoxGscope -side left -fill both pack $FBlastP -side top -fill x pack $LBlastP -side left -fill both pack $EBlastP -side left -fill both pack $BBlastP -side left -fill both pack $FFichierDPC -side top -fill x pack $LFichierDPC -side left -fill both pack $EFichierDPC -side left -fill both pack $BFichierDPC -side left -fill both pack $FGO -side top -fill x pack $LGO -side left -fill both pack $EGO -side left -fill both pack $BGO -side left -fill both pack $Frequete -side top -fill x pack $Lrequete -side left -fill both pack $Erequete -side left -fill both pack $Brequete -side left -fill both pack $BFermer -side left pack $BReset -side left pack $BAfficherTree -side right pack $BAfficherCheese -side right return "" } proc GOPanelFindProtein {{w ""} {Option ""}} { if {[string equal -nocase $Option "exit"]} { GOUsersDB unset destroy $w if {[winfo children .] == ""} {exit} return } if {[winfo children .] != ""} { set w ".panelfindprotein" if {[winfo exists $w]} {return} toplevel $w } else { set w "." $w config -bd 3 -relief flat } wm title $w "GOPanelFindProtein" wm iconname $w "GOPanelFindProtein" global ListBoxDePanleFindProtein if {![GODB EstCharge]} {GODB Load} if {![2GO EstCharge]} {2GO Load} if {$w == "."} {set w ""} set FrameChoix "$w.framechoix" set FrameLaunch "$w.framelaunch" set Combo "$FrameChoix.combo" set Entry "$FrameChoix.entry" set ButtonOK "$FrameChoix.bok" set ButtonDel "$FrameChoix.bdel" set ButtonVal "$FrameLaunch.blaunch" frame $FrameChoix frame $FrameLaunch combobox $Combo -borderwidth 1 -textvariable QuelTypeDEntryPourLaGeneOntology -editable false -highlightthickness 1 -width 25 entry $Entry -borderwidth 1 -textvariable QuelEntryPourLaGeneOntology button $ButtonOK -borderwidth 1 -text "OK" button $ButtonDel -borderwidth 1 -text "DEL" button $ButtonVal -borderwidth 1 -text "LAUNCH" pack $FrameChoix -fill x -side top pack $FrameLaunch -fill x -side top pack $Combo -fill both -side left pack $Entry -fill both -side left pack $ButtonOK -fill both -side left pack $ButtonDel -fill both -side left pack $ButtonVal -fill both -side bottom foreach Element [list "GO term" "GO file" "Exactly this Keywords" "Containing this Keywords" "Organism"] {$Combo list insert end $Element} $Combo configure -width 25 -command { ComboboxStartOfCommand if {[regexp " file$" $QuelTypeDEntryPourLaGeneOntology]} { set QuelEntryPourLaGeneOntology [DrawChooseFile "Choose the $QuelTypeDEntryPourLaGeneOntology" "."] } ComboboxEndOfCommand } set LabelLog "$w.labellog" label $LabelLog -text "Log information" pack $LabelLog -side top -expand 0 -fill x set FrameInfo "$w.frameinfo" frame $FrameInfo pack $FrameInfo -side top -expand yes -fill both set ListBox "$FrameInfo.list" set ListBoxDePanleFindProtein $ListBox scrollbar $FrameInfo.yscroll -command "$ListBox yview" scrollbar $FrameInfo.xscroll -command "$ListBox xview" -orient horizontal set Largeur 60 set Hauteur 10 listbox $ListBox -width $Largeur -height $Hauteur -setgrid 1 -yscroll "$FrameInfo.yscroll set" -xscroll "$FrameInfo.xscroll set" -selectmode extended -background "LightGrey" -foreground "Black" -selectbackground "LightYellow" -selectforeground "Black" -font "courier 10" grid $FrameInfo.list -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $FrameInfo.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $FrameInfo.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $FrameInfo 0 -weight 1 -minsize 0 grid columnconfig $FrameInfo 0 -weight 1 -minsize 0 $ButtonOK configure -command { if {$QuelTypeDEntryPourLaGeneOntology == "GO term" } {set Type "GO" } if {$QuelTypeDEntryPourLaGeneOntology == "GO file" } {set Type "GOF"} if {$QuelTypeDEntryPourLaGeneOntology == "Exactly this Keywords" } {set Type "EKW" } if {$QuelTypeDEntryPourLaGeneOntology == "Containing this Keywords"} {set Type "CKW" } if {$QuelTypeDEntryPourLaGeneOntology == "Organism" } {set Type "OS" } set Entry $QuelEntryPourLaGeneOntology AjouteLesInfoDansLaListeBox "$ListBoxDePanleFindProtein" [list "\#Entry $Type $Entry"] set QuelEntryPourLaGeneOntology "" } $ButtonDel configure -command { set QuelEntryPourLaGeneOntology "" } $ButtonVal configure -command { ValidLaListeBoxDePanelFindProtein "$ListBoxDePanleFindProtein" set QuelEntryPourLaGeneOntology "" } set BoutonReset "$w.buttonresetlog" button $BoutonReset -borderwidth 1 -text "Reset the Log information" pack $BoutonReset -fill x -side top -expand 0 $BoutonReset configure -command "$ListBox delete 0 end" ##Boutons de sauvegarde################## set FrameSauve "$w.framesauve" frame $FrameSauve pack $FrameSauve -fill x -side top -expand 0 set BoutonSauveLog "$FrameSauve.buttonsavelog" button $BoutonSauveLog -borderwidth 1 -text "Save all the Log info" pack $BoutonSauveLog -fill x -side left -expand 1 $BoutonSauveLog configure -command "SauveContenuDeLaListeDuPanelFindProtein $ListBox All" set BoutonSauveId "$FrameSauve.buttonsaveid" button $BoutonSauveId -borderwidth 1 -text "Save all the ID" pack $BoutonSauveId -fill x -side left -expand 1 $BoutonSauveId configure -command "SauveContenuDeLaListeDuPanelFindProtein $ListBox JustID" set BoutonSauveTFA "$FrameSauve.buttonsavetfa" button $BoutonSauveTFA -borderwidth 1 -text "Save all the TFAs" pack $BoutonSauveTFA -fill x -side left -expand 1 $BoutonSauveTFA configure -command "SauveContenuDeLaListeDuPanelFindProtein $ListBox JustTFA" #################################################### set BoutonExit "$w.buttonexit" button $BoutonExit -borderwidth 1 -text "CLOSE" pack $BoutonExit -fill x -side bottom -expand 0 if {$w == ""} {set w "."} $BoutonExit configure -command "GOPanelFindProtein $w exit" } proc GOPanelGOEnrichment {{w ""} {Option ""}} { if {[string equal -nocase $Option "exit"]} { destroy $w GOUsersDB unset if {[winfo children .] == ""} {exit} return } if {[winfo children .] != ""} { set w ".panelgoenrichment" if {[winfo exists $w]} {return} toplevel $w } else { set w "." $w config -bd 3 -relief flat } wm title $w "GOPanelGOEnrichment" wm iconname $w "GOPanelGOEnrichment" if {![GODB EstCharge]} {GODB Load} if {![2GO EstCharge]} {2GO Load} global LePanelPrincipalDuGOEnrichment ChefDOrchestreDuCalculDEnrichissement ini ChefDOrchestreDuCalculDEnrichissement append w $w if {$w == "."} {set w ""} set FrameGroupe "$w.framegroupe" set LabelGroupe "$FrameGroupe.label" set ComboGroupe "$FrameGroupe.combo" set EntryGroupe "$FrameGroupe.entry" set ButtonOKGroupe "$FrameGroupe.bok" set ButtonDelGroupe "$FrameGroupe.bdel" set FramePop "$w.framepopulation" set LabelPop "$FramePop.label" set ComboPop "$FramePop.combo" set EntryPop "$FramePop.entry" set ButtonOKPop "$FramePop.bok" set ButtonDelPop "$FramePop.bdel" set FrameLaunch "$w.framelaunch" set ButtonVal "$FrameLaunch.blaunch" ################################################" set FrameThreshold "$w.framethreshold" set LabelMin "$FrameThreshold.lmin" set LabelMax "$FrameThreshold.lmax" set Labelr "$FrameThreshold.lr" set EntryrMin "$FrameThreshold.ermin" set EntryrMax "$FrameThreshold.ermax" set LabelR "$FrameThreshold.lgrandr" set EntryRMin "$FrameThreshold.egrandrmin" set EntryRMax "$FrameThreshold.egrandrmax" set Labeln "$FrameThreshold.ln" set EntrynMin "$FrameThreshold.enmin" set EntrynMax "$FrameThreshold.enmax" set LabelN "$FrameThreshold.lgrandn" set EntryNMin "$FrameThreshold.egrandnmin" set EntryNMax "$FrameThreshold.egrandnmax" set LabelZscore "$FrameThreshold.lzscore" set EntryZscoreMin "$FrameThreshold.ezscoremin" set EntryZscoreMax "$FrameThreshold.ezscoremax" ################################################## set FrameCanva "$w.framecanva" frame $FrameGroupe label $LabelGroupe -text "Group" -width 15 -anchor w combobox $ComboGroupe -borderwidth 1 -textvariable QuelTypeDEntryPourLeGroupe -editable false -highlightthickness 1 -width 25 entry $EntryGroupe -borderwidth 1 -textvariable QuelEntryPourLeGroupe button $ButtonOKGroupe -borderwidth 1 -text "OK" button $ButtonDelGroupe -borderwidth 1 -text "DEL" frame $FramePop label $LabelPop -text "Population" -width 15 -anchor w combobox $ComboPop -borderwidth 1 -textvariable QuelTypeDEntryPourLaPop -editable false -highlightthickness 1 -width 25 entry $EntryPop -borderwidth 1 -textvariable QuelEntryPourLaPop button $ButtonOKPop -borderwidth 1 -text "OK" button $ButtonDelPop -borderwidth 1 -text "DEL" frame $FrameLaunch button $ButtonVal -borderwidth 1 -text "LAUNCH" ########THRESHOLD########################################### frame $FrameThreshold -borderwidth 1 label $LabelMin -text "Threshold min" label $LabelMax -text "Threshold Max" label $Labelr -text "r" entry $EntryrMin -borderwidth 1 -textvariable rMin entry $EntryrMax -borderwidth 1 -textvariable rMax label $LabelR -text "R" entry $EntryRMin -borderwidth 1 -textvariable RMin entry $EntryRMax -borderwidth 1 -textvariable RMax label $Labeln -text "n" entry $EntrynMin -borderwidth 1 -textvariable nMin entry $EntrynMax -borderwidth 1 -textvariable nMax label $LabelN -text "N" entry $EntryNMin -borderwidth 1 -textvariable NMin entry $EntryNMax -borderwidth 1 -textvariable NMax label $LabelZscore -text "z score" entry $EntryZscoreMin -borderwidth 1 -textvariable ZscoreMin entry $EntryZscoreMax -borderwidth 1 -textvariable ZscoreMax ####################################### frame $FrameCanva pack $FrameGroupe -fill x -side top pack $LabelGroupe -fill both -side left pack $ComboGroupe -fill both -side left pack $EntryGroupe -fill both -side left pack $ButtonOKGroupe -fill both -side left pack $ButtonDelGroupe -fill both -side left pack $FramePop -fill x -side top pack $LabelPop -fill both -side left pack $ComboPop -fill both -side left pack $EntryPop -fill both -side left pack $ButtonOKPop -fill both -side left pack $ButtonDelPop -fill both -side left set BoutonReset "$w.buttonresetlog" button $BoutonReset -borderwidth 1 -text "Reset All" pack $BoutonReset -fill x -side top -expand 0 pack $FrameLaunch -fill x -side top pack $ButtonVal -fill both -side bottom ############Threshold#################### pack $FrameThreshold -fill x -side top -expand 0 grid $LabelMin -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $LabelMax -row 0 -column 2 -rowspan 1 -columnspan 1 -sticky nsew grid $Labelr -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryrMin -row 1 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryrMax -row 1 -column 2 -rowspan 1 -columnspan 1 -sticky nsew grid $LabelR -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryRMin -row 2 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryRMax -row 2 -column 2 -rowspan 1 -columnspan 1 -sticky nsew grid $Labeln -row 3 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $EntrynMin -row 3 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $EntrynMax -row 3 -column 2 -rowspan 1 -columnspan 1 -sticky nsew grid $LabelN -row 4 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryNMin -row 4 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryNMax -row 4 -column 2 -rowspan 1 -columnspan 1 -sticky nsew grid $LabelZscore -row 5 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryZscoreMin -row 5 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryZscoreMax -row 5 -column 2 -rowspan 1 -columnspan 1 -sticky nsew $EntryrMin delete 0 end $EntryrMax delete 0 end $EntryRMin delete 0 end $EntryRMax delete 0 end $EntrynMin delete 0 end $EntrynMax delete 0 end $EntryNMin delete 0 end $EntryNMax delete 0 end $EntryZscoreMin delete 0 end $EntryZscoreMax delete 0 end $EntryrMin insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur rMin ] $EntryrMax insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur rMax ] $EntryRMin insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur RMin ] $EntryRMax insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur RMax ] $EntrynMin insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur nMin ] $EntrynMax insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur nMax ] $EntryNMin insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur NMin ] $EntryNMax insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur NMax ] $EntryZscoreMin insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur ZscoreMin] $EntryZscoreMax insert 0 [ChefDOrchestreDuCalculDEnrichissement set Valeur ZscoreMax] ####################################### pack $FrameCanva -fill both -side top -expand 1 set BoutonExit "$w.buttonexit" button $BoutonExit -borderwidth 1 -text "CLOSE" pack $BoutonExit -fill x -side bottom -expand 0 #set BoutonSauve "$w.buttonsave" #button $BoutonSauve -borderwidth 1 -text "Save results as" #pack $BoutonSauve -fill x -side bottom -expand 0 if {$w == ""} {set w "."} set HauteurMax [expr [winfo screenheight .] * 1.0 / 2] set LargeurMax [expr [winfo screenwidth .] * 2.0 / 3] set HauteurFenetre [expr [winfo screenheight .] * 1.0 / 2] set LargeurFenetre [expr [winfo screenwidth .] * 2.0 / 3] set KCanva [Canva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre NoY "" "" $FrameCanva] set LePanelPrincipalDuGOEnrichment [list $KCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre $FrameCanva] $KCanva configure -background white ##################################################### foreach Element [ChefDOrchestreDuCalculDEnrichissement "LesTypesDEntry"] { $ComboPop list insert end $Element $ComboGroupe list insert end $Element } $ComboGroupe configure -width 25 -command { ComboboxStartOfCommand if {[regexp " file$" $QuelTypeDEntryPourLeGroupe]} { set QuelEntryPourLeGroupe [DrawChooseFile "Choose the $QuelTypeDEntryPourLeGroupe" "."] } ComboboxEndOfCommand } $ComboPop configure -width 25 -command { ComboboxStartOfCommand if {[regexp " file$" $QuelTypeDEntryPourLaPop]} { set QuelEntryPourLaPop [DrawChooseFile "Choose the $QuelTypeDEntryPourLaPop" "."] } ComboboxEndOfCommand } $BoutonExit configure -command "GOPanelGOEnrichment $w exit" #$BoutonSauve configure -command "" $BoutonReset configure -command { ChefDOrchestreDuCalculDEnrichissement "Unset" set QuelEntryPourLeGroupe "" set QuelEntryPourLaPop "" } $ButtonDelGroupe configure -command { ChefDOrchestreDuCalculDEnrichissement "UnsetGroup" set QuelEntryPourLeGroupe "" } $ButtonDelPop configure -command { ChefDOrchestreDuCalculDEnrichissement "UnsetPopulation" set QuelEntryPourLaPop "" } $ButtonOKGroupe configure -command { ChefDOrchestreDuCalculDEnrichissement "AppendGroup" $QuelTypeDEntryPourLeGroupe $QuelEntryPourLeGroupe set QuelEntryPourLeGroupe "" } $ButtonOKPop configure -command { ChefDOrchestreDuCalculDEnrichissement "AppendPopulation" $QuelTypeDEntryPourLaPop $QuelEntryPourLaPop set QuelEntryPourLaPop "" } $ButtonVal configure -command { ChefDOrchestreDuCalculDEnrichissement "append" Valeur rMin $rMin ChefDOrchestreDuCalculDEnrichissement "append" Valeur rMax $rMax ChefDOrchestreDuCalculDEnrichissement "append" Valeur RMin $RMin ChefDOrchestreDuCalculDEnrichissement "append" Valeur RMax $RMax ChefDOrchestreDuCalculDEnrichissement "append" Valeur nMin $nMin ChefDOrchestreDuCalculDEnrichissement "append" Valeur nMax $nMax ChefDOrchestreDuCalculDEnrichissement "append" Valeur NMin $NMin ChefDOrchestreDuCalculDEnrichissement "append" Valeur NMax $NMax ChefDOrchestreDuCalculDEnrichissement "append" Valeur ZscoreMin $ZscoreMin ChefDOrchestreDuCalculDEnrichissement "append" Valeur ZscoreMax $ZscoreMax set LesZscore [ChefDOrchestreDuCalculDEnrichissement "Calcul" ] set KCanva [ChefDOrchestreDuCalculDEnrichissement "Affiche" $LesZscore] if {$KCanva != ""} { $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Enter" $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Leave" } set QuelEntryPourLeGroupe "" set QuelEntryPourLaPop "" } $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Enter" $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Leave" return } proc GOPanelHisto {{w ""} {Option ""}} { if {[string equal -nocase $Option "exit"]} { destroy $w GOUsersDB unset if {[winfo children .] == ""} {exit} return } if {[winfo children .] != ""} { set w ".panelgohisto" if {[winfo exists $w]} {return} toplevel $w } else { set w "." $w config -bd 3 -relief flat } wm title $w "GOPanelHisto" wm iconname $w "GOPanelHisto" if {![GODB EstCharge]} {GODB Load} if {![2GO EstCharge]} {2GO Load} global LePanelPrincipalDuGOHisto ChefDOrchestreDuGOHisto ini ChefDOrchestreDuGOHisto append w $w if {$w == "."} {set w ""} set FrameGroupe "$w.framegroupe" set LabelGroupe "$FrameGroupe.label" set ComboGroupe "$FrameGroupe.combo" set EntryGroupe "$FrameGroupe.entry" set ButtonOKGroupe "$FrameGroupe.bok" set ButtonDelGroupe "$FrameGroupe.bdel" set FrameLaunch "$w.framelaunch" set ButtonVal "$FrameLaunch.blaunch" ################################################" set FrameThreshold "$w.framethreshold" set LabelMin "$FrameThreshold.lmin" set LabelMax "$FrameThreshold.lmax" set Labeln "$FrameThreshold.ln" set EntrynMin "$FrameThreshold.enmin" set EntrynMax "$FrameThreshold.enmax" set LabelNiv "$FrameThreshold.lniv" set EntryNivMin "$FrameThreshold.enivmin" set EntryNivMax "$FrameThreshold.enivmax" ################################################## set FrameCanva "$w.framecanva" frame $FrameGroupe label $LabelGroupe -text "Group" -width 15 -anchor w combobox $ComboGroupe -borderwidth 1 -textvariable QuelTypeDEntryPourLeGroupe -editable false -highlightthickness 1 -width 25 entry $EntryGroupe -borderwidth 1 -textvariable QuelEntryPourLeGroupe button $ButtonOKGroupe -borderwidth 1 -text "OK" button $ButtonDelGroupe -borderwidth 1 -text "DEL" frame $FrameLaunch button $ButtonVal -borderwidth 1 -text "LAUNCH" ########THRESHOLD########################################### frame $FrameThreshold -borderwidth 1 label $LabelMin -text "Threshold min" label $LabelMax -text "Threshold Max" label $Labeln -text "n" entry $EntrynMin -borderwidth 1 -textvariable nMin entry $EntrynMax -borderwidth 1 -textvariable nMax label $LabelNiv -text "Niveau" entry $EntryNivMin -borderwidth 1 -textvariable NivMin entry $EntryNivMax -borderwidth 1 -textvariable NivMax ####################################### frame $FrameCanva pack $FrameGroupe -fill x -side top pack $LabelGroupe -fill both -side left pack $ComboGroupe -fill both -side left pack $EntryGroupe -fill both -side left pack $ButtonOKGroupe -fill both -side left pack $ButtonDelGroupe -fill both -side left set BoutonReset "$w.buttonresetlog" button $BoutonReset -borderwidth 1 -text "Reset All" pack $BoutonReset -fill x -side top -expand 0 pack $FrameLaunch -fill x -side top pack $ButtonVal -fill both -side bottom ############Threshold#################### pack $FrameThreshold -fill x -side top -expand 0 grid $LabelMin -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $LabelMax -row 0 -column 2 -rowspan 1 -columnspan 1 -sticky nsew grid $Labeln -row 3 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $EntrynMin -row 3 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $EntrynMax -row 3 -column 2 -rowspan 1 -columnspan 1 -sticky nsew grid $LabelNiv -row 4 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryNivMin -row 4 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $EntryNivMax -row 4 -column 2 -rowspan 1 -columnspan 1 -sticky nsew $EntrynMin delete 0 end $EntrynMax delete 0 end $EntryNivMin delete 0 end $EntryNivMax delete 0 end $EntrynMin insert 0 [ChefDOrchestreDuGOHisto set Valeur nMin ] $EntrynMax insert 0 [ChefDOrchestreDuGOHisto set Valeur nMax ] $EntryNivMin insert 0 [ChefDOrchestreDuGOHisto set Valeur NivMin ] $EntryNivMax insert 0 [ChefDOrchestreDuGOHisto set Valeur NivMax ] ####################################### pack $FrameCanva -fill both -side top -expand 1 set BoutonExit "$w.buttonexit" button $BoutonExit -borderwidth 1 -text "CLOSE" pack $BoutonExit -fill x -side bottom -expand 0 set BoutonSauve "$w.buttonsave" button $BoutonSauve -borderwidth 1 -text "Save results as" pack $BoutonSauve -fill x -side bottom -expand 0 if {$w == ""} {set w "."} set HauteurMax [expr [winfo screenheight .] * 1.0 / 2] set LargeurMax [expr [winfo screenwidth .] * 2.0 / 3] set HauteurFenetre [expr [winfo screenheight .] * 1.0 / 2] set LargeurFenetre [expr [winfo screenwidth .] * 2.0 / 3] set KCanva [Canva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre NoY "" "" $FrameCanva] set LePanelPrincipalDuGOHisto [list $KCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre $FrameCanva] $KCanva configure -background white ##################################################### foreach Element [ChefDOrchestreDuGOHisto "LesTypesDEntry"] { $ComboGroupe list insert end $Element } $ComboGroupe configure -width 25 -command { ComboboxStartOfCommand if {[regexp " file$" $QuelTypeDEntryPourLeGroupe]} { set QuelEntryPourLeGroupe [DrawChooseFile "Choose the $QuelTypeDEntryPourLeGroupe" "."] } ComboboxEndOfCommand } $BoutonExit configure -command "GOPanelHisto $w exit" #$BoutonSauve configure -command "" $BoutonReset configure -command { ChefDOrchestreDuGOHisto "Unset" set QuelEntryPourLeGroupe "" } $ButtonDelGroupe configure -command { ChefDOrchestreDuGOHisto "UnsetGroup" set QuelEntryPourLeGroupe "" } $ButtonOKGroupe configure -command { ChefDOrchestreDuGOHisto "AppendGroup" $QuelTypeDEntryPourLeGroupe $QuelEntryPourLeGroupe set QuelEntryPourLeGroupe "" } $BoutonSauve configure -command { ChefDOrchestreDuGOHisto "append" Valeur nMin $nMin ChefDOrchestreDuGOHisto "append" Valeur nMax $nMax ChefDOrchestreDuGOHisto "append" Valeur NivMin $NivMin ChefDOrchestreDuGOHisto "append" Valeur NivMax $NivMax set TousLesGO [ChefDOrchestreDuGOHisto "Calcul"] ChefDOrchestreDuGOHisto "Save" $TousLesGO } $ButtonVal configure -command { ChefDOrchestreDuGOHisto "append" Valeur nMin $nMin ChefDOrchestreDuGOHisto "append" Valeur nMax $nMax ChefDOrchestreDuGOHisto "append" Valeur NivMin $NivMin ChefDOrchestreDuGOHisto "append" Valeur NivMax $NivMax set TousLesGO [ChefDOrchestreDuGOHisto "Calcul" ] set KCanva [ChefDOrchestreDuGOHisto "Affiche" $TousLesGO] if {$KCanva != ""} { $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Enter" $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Leave" } set QuelEntryPourLeGroupe "" } $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Enter" $KCanva bind "GO" "AfficheInfoBulle $KCanva %x %y Leave" return } proc GOPanelTree {{w ""} {Option ""}} { global TreeAllGODePanelTree global TreeOneGODePanelTree if {[string equal -nocase $Option "exit"]} { GOUsersDB unset destroy $w if {[winfo children .] == ""} {exit} return } if {[winfo children .] != ""} { set w ".paneltree" if {[winfo exists $w]} {return} toplevel $w } else { set w "." $w config -bd 3 -relief flat } wm title $w "GOPanelTree" wm iconname $w "GOPanelTree" if {![GODB EstCharge]} {GODB Load} if {![2GO EstCharge]} {2GO Load} GOUsersDB "ini" if {$w == "."} {set w ""} set FrameChoix "$w.framechoix" set FrameLaunch "$w.framelaunch" set Combo "$FrameChoix.combo" set Entry "$FrameChoix.entry" set ButtonOK "$FrameChoix.bok" set ButtonDel "$FrameChoix.bdel" set ButtonVal "$FrameLaunch.blaunch" frame $FrameChoix frame $FrameLaunch combobox $Combo -borderwidth 1 -textvariable QuelTypeDEntryPourLaGeneOntology -editable false -highlightthickness 1 entry $Entry -borderwidth 1 -textvariable QuelEntryPourLaGeneOntology button $ButtonOK -borderwidth 1 -text "OK" button $ButtonDel -borderwidth 1 -text "DEL" button $ButtonVal -borderwidth 1 -text "LAUNCH" pack $FrameChoix -fill x -side top pack $FrameLaunch -fill x -side top pack $Combo -fill both -side left pack $Entry -fill both -side left pack $ButtonOK -fill both -side left pack $ButtonDel -fill both -side left pack $ButtonVal -fill both -side bottom foreach Element [GOUsersDB "LesTypesDEntry"] {$Combo list insert end $Element} $Combo configure -width 30 -command { ComboboxStartOfCommand if {[regexp " file$" $QuelTypeDEntryPourLaGeneOntology]} { set QuelEntryPourLaGeneOntology [DrawChooseFile "Choose the $QuelTypeDEntryPourLaGeneOntology" "."] } ComboboxEndOfCommand } $ButtonOK configure -command { GOUsersDB "append" $QuelTypeDEntryPourLaGeneOntology $QuelEntryPourLaGeneOntology set QuelEntryPourLaGeneOntology "" } $ButtonDel configure -command { set QuelEntryPourLaGeneOntology "" GOUsersDB "unset" } $ButtonVal configure -command { set KTreeAllGO $TreeAllGODePanelTree set KTreeOneGO $TreeOneGODePanelTree set LesGO [GOUsersDB "valid"] set OpenOuClose "Close" if {$LesGO != ""} {set OpenOuClose "Open"} DrawTreeAllGO $KTreeAllGO $LesGO $OpenOuClose "" DrawTreeOneGO $KTreeOneGO "" set QuelEntryPourLaGeneOntology "" } set FrameTree "$w.frametree" frame $FrameTree pack $FrameTree -fill both -expand 1 -side top if {1} { set KLeft "$FrameTree.frameleft" set KTreeAllGO "$KLeft.wtree" set TreeAllGODePanelTree $KTreeAllGO if {![winfo exists $KLeft]} { frame $KLeft -bg grey pack $KLeft -fill both -expand 1 -side left ############All GO -> frame left######################### Tree:create $KTreeAllGO -width 400 -height 600 -yscrollcommand "$KLeft.sby set" -xscrollcommand "$KLeft.sbx set" scrollbar $KLeft.sby -orient vertical -command "$KTreeAllGO yview" scrollbar $KLeft.sbx -orient horizontal -command "$KTreeAllGO xview" grid $KTreeAllGO -row 0 -column 0 -sticky news grid $KLeft.sby -row 0 -column 1 -sticky news grid $KLeft.sbx -row 1 -column 0 -sticky news grid rowconfigure $KLeft 0 -weight 1 grid columnconfigure $KLeft 0 -weight 1 ######################################################### $KTreeAllGO bind x <1> { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl set lbl [file tail $lbl] if {[regexp -nocase {(GO:[0-9]+)} $lbl tmp GO]} { set KTreeOneGO "$TreeOneGODePanelTree" DrawTreeOneGO $KTreeOneGO $GO } } $KTreeAllGO bind x { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl if {[regsub -all "/" $lbl "" tmp] <= 5} {Tree:open %W $lbl} else {Tree:openallchildren %W $lbl} set lbl [file tail $lbl] if {[regexp -nocase {(GO:[0-9]+)} $lbl tmp GO]} { set KTreeOneGO "$TreeOneGODePanelTree" DrawTreeOneGO $KTreeOneGO $GO } } $KTreeAllGO bind x { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl if {[regsub -all "/" $lbl "" tmp] <= 5} {Tree:open %W $lbl} else {Tree:closeallchildren %W $lbl} set lbl [file tail $lbl] if {[regexp -nocase {(GO:[0-9]+)} $lbl tmp GO]} { set KTreeOneGO "$TreeOneGODePanelTree" DrawTreeOneGO $KTreeOneGO $GO } } $KTreeAllGO bind x { Tree:open %W [Tree:labelat %W %x %y] } } ######################################################### DrawTreeAllGO $KTreeAllGO "" Close "" ######################################################### } if {1} { set KRight "$w.frametree.frameright" set KTreeOneGO "$KRight.wtree" set TreeOneGODePanelTree $KTreeOneGO if {![winfo exists $KRight]} { ######################################################### frame $KRight -bg grey pack $KRight -fill y -expand 0 -side right ############One GO -> frame right######################### Tree:create $KTreeOneGO -width 400 -height 600 -yscrollcommand "$KRight.sby set" -xscrollcommand "$KRight.sbx set" scrollbar $KRight.sby -orient vertical -command "$KTreeOneGO yview" scrollbar $KRight.sbx -orient horizontal -command "$KTreeOneGO xview" grid $KTreeOneGO -row 0 -column 0 -sticky news grid $KRight.sby -row 0 -column 1 -sticky news grid $KRight.sbx -row 1 -column 0 -sticky news grid rowconfigure $KRight 0 -weight 1 grid columnconfigure $KRight 0 -weight 1 ######################################################### $KTreeOneGO bind x <1> { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl set lbl [file tail $lbl ] if {[regexp -nocase {(GO:[0-9]+)} $lbl tmp GO]} { set KTreeOneGO "$TreeOneGODePanelTree" DrawTreeOneGO $KTreeOneGO $GO } } $KTreeOneGO bind x <3> { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl set dir [file dirname $lbl ] set lbl [file tail $lbl ] set lblPere [file tail $dir ] set lblGdPere [file tail [file dirname $dir]] if {[string equal -nocase $lblPere "access"]} { DrawInfo Access $lbl } if {[string equal -nocase $lblGdPere "gscopebox"]} { regsub -all "\\|" $lblPere "/" lblPere DrawInfo Box $lblPere $lbl } if {[regexp -nocase {^ipr[0-9]+$} $lbl]} { DrawInfo Interpro $lbl } } $KTreeOneGO bind x { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl Tree:openallchildren %W $lbl } $KTreeOneGO bind x { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl Tree:closeallchildren %W $lbl } $KTreeOneGO bind x { Tree:open %W [Tree:labelat %W %x %y] } } ######################################################### DrawTreeOneGO $KTreeOneGO "" ######################################################### } set FrameExit "$w.frameexit" if {$w == ""} {set w "."} frame $FrameExit pack $FrameExit -fill x -side bottom -expand 1 set BoutonExit "$FrameExit.buttonexit" button $BoutonExit -borderwidth 1 -text "CLOSE" pack $BoutonExit -fill x -side bottom -expand 0 $BoutonExit configure -command "GOPanelTree $w Exit" } proc GOPanelTreeBall {{w ""} {Option ""}} { if {[string equal -nocase $Option "exit"]} { GOUsersDB unset destroy $w if {[winfo children .] == ""} {exit} return } if {[winfo children .] != ""} { set w ".paneltreeball" if {[winfo exists $w]} {return} toplevel $w } else { set w "." $w config -bd 3 -relief flat } wm title $w "GOPanelTreeBall" wm iconname $w "GOPanelTreeBall" global AiJeUnCanvaAfficheSurLePanelPrincipal global LePanelPrincipalDuTreeBall if {![GODB EstCharge]} {GODB Load} if {![2GO EstCharge]} {2GO Load} GOUsersDB "ini" if {$w == "."} {set w ""} set FrameChoix "$w.framechoix" set FrameLaunch "$w.framelaunch" set Combo "$FrameChoix.combo" set Entry "$FrameChoix.entry" set ButtonOK "$FrameChoix.bok" set ButtonDel "$FrameChoix.bdel" set ButtonVal "$FrameLaunch.blaunch" frame $FrameChoix frame $FrameLaunch combobox $Combo -borderwidth 1 -textvariable QuelTypeDEntryPourLaGeneOntology -editable false -highlightthickness 1 entry $Entry -borderwidth 1 -textvariable QuelEntryPourLaGeneOntology button $ButtonOK -borderwidth 1 -text "OK" button $ButtonDel -borderwidth 1 -text "DEL" button $ButtonVal -borderwidth 1 -text "LAUNCH" pack $FrameChoix -fill x -side top pack $FrameLaunch -fill x -side top pack $Combo -fill both -side left pack $Entry -fill both -side left pack $ButtonOK -fill both -side left pack $ButtonDel -fill both -side left pack $ButtonVal -fill both -side bottom set FrameCanva "$w.framecanva" frame $FrameCanva pack $FrameCanva -fill both -side top foreach Element [GOUsersDB "LesTypesDEntry"] {$Combo list insert end $Element} $Combo configure -width 30 -command { ComboboxStartOfCommand if {[regexp " file$" $QuelTypeDEntryPourLaGeneOntology]} { set QuelEntryPourLaGeneOntology [DrawChooseFile "Choose the $QuelTypeDEntryPourLaGeneOntology" "."] } ComboboxEndOfCommand } $ButtonOK configure -command { GOUsersDB "append" $QuelTypeDEntryPourLaGeneOntology $QuelEntryPourLaGeneOntology set QuelEntryPourLaGeneOntology "" } $ButtonDel configure -command { set QuelEntryPourLaGeneOntology "" GOUsersDB "unset" } $ButtonVal configure -command { set LesGO [GOUsersDB "valid"] Espionne $LesGO set LargeurMax [lindex $LePanelPrincipalDuTreeBall 1] set HauteurMax [lindex $LePanelPrincipalDuTreeBall 2] set LargeurFenetre [lindex $LePanelPrincipalDuTreeBall 3] set HauteurFenetre [lindex $LePanelPrincipalDuTreeBall 4] if {$AiJeUnCanvaAfficheSurLePanelPrincipal} { DrawGOTreeBall $LesGO $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre } else { set AiJeUnCanvaAfficheSurLePanelPrincipal 1 set KCanva [lindex $LePanelPrincipalDuTreeBall 0] DrawGOTreeBall $LesGO $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre $KCanva } set QuelEntryPourLaGeneOntology "" } set HauteurMax [expr [winfo screenheight .] * 2.0 / 3] set LargeurMax [expr [winfo screenwidth .] * 2.0 / 3] set HauteurFenetre [expr [winfo screenheight .] * 2.0 / 3] set LargeurFenetre [expr [winfo screenwidth .] * 2.0 / 3] set KCanva [Canva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre NoY "" "" $FrameCanva] $KCanva configure -background white set LePanelPrincipalDuTreeBall [list $KCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set AiJeUnCanvaAfficheSurLePanelPrincipal 0 set FrameExit "$w.frameexit" frame $FrameExit pack $FrameExit -fill x -side bottom -expand 1 set BoutonExit "$FrameExit.buttonexit" button $BoutonExit -borderwidth 1 -text "CLOSE" pack $BoutonExit -fill x -side bottom -expand 0 if {$w == ""} {set w "."} $BoutonExit configure -command "GOPanelTreeBall $w Exit" return } proc GOSearchPourTous_Gretta {FichierBoitesSelectionnees FichierOut LesGODeRef {LesClustersDeRef ""}} { AskLesPagesInfos unset set LeTexte {} foreach GO $LesGODeRef { set Type [lindex [GODB GO $GO LesTypes ] 0] set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] foreach Ligne [GOSearch_Gretta $FichierBoitesSelectionnees $GO $LesClustersDeRef] { set Ligne "$GO\t$Def\t$Ligne" Espionne $Ligne lappend LeTexte $Ligne } } AskLesPagesInfos unset Sauve [join $LeTexte "\n"] dans $FichierOut return } proc GOSearch_Gretta {FichierBoitesSelectionnees LesGODeRef {LesClustersDeRef ""}} { set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" set NbCluster 6 foreach CDeRef $LesClustersDeRef {set TabTmp($CDeRef) 1} foreach GO $LesGODeRef {set TabTmp($GO) 1} #Espionne "Lecture du Fichier $FichierBoitesSelectionnees" set F [open $FichierBoitesSelectionnees] set i 0 while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set Ligne [split $Ligne "\t"] set Affy [lindex $Ligne 0] set Cluster [lindex $Ligne 1] incr i set TabAffy($Cluster,$Affy) 1 } close $F set LesAccess {} set Tab(LesClusters) {} #Espionne "Lecture du Fichier $FichierOCADE" foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesNoms] { set Affy [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] set LesExpressions [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom LesExpressions] for {set i 0} {$i < $NbCluster} {incr i} { set Cluster [expr $i + 1] if {![info exists Tab(Cluster,$Cluster,LesNoms)]} { set Tab(Cluster,$Cluster,LesNoms) {} lappend Tab(LesClusters) $Cluster } set Expr [lindex $LesExpressions $i] if {$Expr < 0} {continue} if {![info exists TabAffy($Cluster,$Affy)]} {continue} set Access [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {$Access == "NOPROTEIN" || $Access == ""} { set Methode "Contig" set Access [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] if {$Access == "NOPROTEIN" || $Access == ""} { set Access "" set Methode "NoProtein" } } if {$Access != "" && [AskLesPagesInfos ask $Access] == ""} {lappend LesAccess $Access} set Tab($Nom,Access) $Access lappend Tab(Cluster,$Cluster,LesNoms) $Nom } } Espionne "Database is loading..." AskLesPagesInfos load $LesAccess protein Espionne "Database loaded..." set LeTexte {} #Espionne "Lecture du Fichier $FichierGO" foreach Cluster [set Tab(LesClusters)] { if {![info exists Tab(Cluster,$Cluster,LesNoms)]} {continue} foreach Nom [set Tab(Cluster,$Cluster,LesNoms)] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom) ]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} set LAiJeTrouve 0 foreach HigherGO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {[info exists TabTmp($HigherGO)]} {set LAiJeTrouve 1;break} foreach LowerGO [InterrogeGeneOntology $FichierGO GO $HigherGO LesAncetres] { if {[info exists TabTmp($LowerGO)]} {set LAiJeTrouve 1;break} } if {$LAiJeTrouve} {break} } if {$LAiJeTrouve} { set MeanDef [InterrogeDefinitionsConsensus $Nom Definition] set LesGN {} foreach GeneName [InterrogeGeneName $Nom LesGeneNames] { if {$GeneName == ""} {continue} set n [InterrogeGeneName $Nom GeneName $GeneName n] lappend LesGN [list "$GeneName ($n)" $n] } #seulement les 3 premiers GN set LesGeneName {} set i 0 foreach LeGN [lsort -index 1 -decreasing -integer $LesGN] { incr i if {$i > 3} {break} lappend LesGeneName [lindex $LeGN 0] } set GN [join $LesGeneName " ; "] set AccessProt [set Tab($Nom,Access)] set PI [AskLesPagesInfos ask $AccessProt] set Orgas "" set Def "" if {$AccessProt != ""} { set Orgas [join [LesOrgasDeLaPage_PageInfo $PI] ";"] set Def [join [LaDefinitionDeLaProt_PageInfo $PI] " "] } set Access [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] lappend LeTexte "$Nom\t$Access\t$Cluster\t$AccessProt\t$Orgas\t$Def\t$GN\t$MeanDef" } } } return $LeTexte } proc GOToKeepOrNotToKeep {Access} { global MesGOInterressants if {! [info exists MesGOInterressants]} {MesGOInterressants} if {[info exists MesGOInterressants($Access)]} {return 0} else {return 1} } proc GOTools {{w ""} {Option ""}} { #lm rajout package require combobox catch {namespace import ::combobox::*} if {[string equal -nocase $Option "exit"]} { destroy $w if {[winfo children .] == ""} {exit} return } if {[winfo children .] != ""} { set w [NomDe gotools] if {[winfo exists $w]} {return} toplevel $w } else { set w "." $w config -bd 3 -relief flat } wm title $w "GOTools" wm iconname $w "GOTools" if {![GODB EstCharge]} {GODB Load} if {![2GO EstCharge]} {2GO Load} if {$w == "."} {set w ""} set BoutonTree "${w}.boutontree" set BoutonTreeBall "${w}.boutontreeball" set BoutonFindProtein "${w}.boutonfindprotein" set BoutonGOEnrichment "${w}.boutongoenrichment" set BoutonGOHisto "${w}.boutongohisto" set BoutonClose "${w}.boutonclose" if {$w == ""} {set w "."} button $BoutonTree -borderwidth 1 -text "GO Tree" button $BoutonTreeBall -borderwidth 1 -text "GO Tree Ball" button $BoutonFindProtein -borderwidth 1 -text "Find Protein" button $BoutonGOEnrichment -borderwidth 1 -text "GO Enrichement" button $BoutonGOHisto -borderwidth 1 -text "GO Histo" button $BoutonClose -borderwidth 1 -text "CLOSE" pack $BoutonTree -side top -fill both -expand 1 pack $BoutonTreeBall -side top -fill both -expand 1 pack $BoutonFindProtein -side top -fill both -expand 1 pack $BoutonGOEnrichment -side top -fill both -expand 1 pack $BoutonGOHisto -side top -fill both -expand 1 pack $BoutonClose -side top -fill both -expand 1 $BoutonTree configure -command "GOPanelTree" $BoutonTreeBall configure -command "GOPanelTreeBall" $BoutonFindProtein configure -command "GOPanelFindProtein" $BoutonGOEnrichment configure -command "GOPanelGOEnrichment" $BoutonGOHisto configure -command "GOPanelHisto" $BoutonClose configure -command "GOTools $w exit" return } proc GOTotalObserve {Fichier {GO ""} {Distribution 0}} { if {$Distribution==1} { set Fichier "/home/carles/genomes/AffyHS/lms/Distribution.go" } else { if {$Fichier=="/home/carles/genomes/AffyHS/lms/Distribution.go"} {return ""} } if {[ContenuDuFichier $Fichier]==""} {return ""} #Espionne $Fichier set Total 0 set Vu 0 foreach Ligne [LesLignesDuFichier $Fichier] { if {$Vu==1} { if {[regexp "\" $Ligne]} { regsub "\" $Ligne "" Ligne regsub "\" $Ligne "" Ligne set Total [expr $Ligne + $Total] set Vu 0 continue } } if {[regexp "text" $Ligne]} { regsub "\" $Ligne "" Ligne regsub "\" $Ligne "" Ligne regsub -all " " $Ligne "" Ligne set AccessGO $Ligne #Espionne $AccessGO if {$AccessGO==$GO} { set Vu 1 } } } return $Total } proc GOTotalTheorique {Fichier {Distribution 0}} { if {$Distribution==1} { set Fichier "/home/carles/genomes/AffyHS/lms/Distribution.go" } else { if {$Fichier=="/home/carles/genomes/AffyHS/lms/Distribution.go"} {return ""} } if {[ContenuDuFichier $Fichier]==""} {return ""} #Espionne $Fichier set Total 0 foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "entry_count" $Ligne]} { #chaque LMS regsub "\" $Ligne "" Ligne regsub "\" $Ligne "" Ligne #Espionne $Ligne set Total [expr $Total+ $Ligne] } } return $Total } proc GOUsersDB {args} { #LesTypesDEntry #ini #append $TypeDEntry $Entry #Valid #unset #ask GO $GO LesAccess #ask GO $GO LesRequetes #ask GO $GO LesBoitesGscope #ask Access $Access lesRequetes #ask Gscope $FichierGOBoiteGscope Nom $Nom LesAccess global TabLesLiensPourLaGeneOntology set FirstElet [lindex $args 0] if {$FirstElet == ""} {return} if {[string equal -nocase $FirstElet "LesTypesDEntry"]} { return [list "GO term" "GO term file" "Access" "Access file" "Links2GO (Domains, Keywords)" "Blast file" "MSF file" "Clustering file" "Gscope GO file"] } if {[string equal -nocase $FirstElet "ini"]} { set TabLesLiensPourLaGeneOntology(LesGO) {} set TabLesLiensPourLaGeneOntology(LesAccess) {} set TabLesLiensPourLaGeneOntology(LesRequetes) {} set TabLesLiensPourLaGeneOntology(LesBoitesGscope) {} return } if {[string equal -nocase $FirstElet "unset"]} { if {[info exists TabLesLiensPourLaGeneOntology]} {unset TabLesLiensPourLaGeneOntology} GOUsersDB Ini return } if {![info exists TabLesLiensPourLaGeneOntology]} {return} if {[string equal -nocase $FirstElet "valid"]} { set LesGOSelectionnes {} foreach LaBoite [set TabLesLiensPourLaGeneOntology(LesBoitesGscope)] { set Nom [lindex $LaBoite 0] set FichierGO [lindex $LaBoite 1] Espionne "Gscope Box : $Nom from $FichierGO" set TousLesGODeLaBoite {} set LesAccessAvecUnLien {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { lappend TousLesGODeLaBoite $GO lappend LesGOSelectionnes $GO foreach Type [GODB GO $GO LesTypes] { set GO [string toupper [GODB Type $Type GOSynonyme $GO GODeRef]] if {$GO == ""} {continue} foreach GOParent [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { set GOParent [string toupper [GODB Type $Type GOSynonyme $GOParent GODeRef]] if {$GOParent == ""} {continue} lappend TousLesGODeLaBoite $GOParent } } } foreach GO [lsort -unique $TousLesGODeLaBoite] { if {![info exists TabLesLiensPourLaGeneOntology(GO,$GO,LesAccess) ]} { set TabLesLiensPourLaGeneOntology(GO,$GO,LesAccess) {} } if {![info exists TabLesLiensPourLaGeneOntology(GO,$GO,LesBoitesGscope)]} { set TabLesLiensPourLaGeneOntology(GO,$GO,LesBoitesGscope) {} } if {![info exists TabTmp($FichierGO,$Nom,$GO)]} { set TabTmp($FichierGO,$Nom,$GO) 1 lappend TabLesLiensPourLaGeneOntology(GO,$GO,LesBoitesGscope) $LaBoite } foreach Access [InterrogeGeneOntology $FichierGO $Nom LesAccess] { if {$Access == $Nom || $Access == "QUERY_PROTEIN"} {continue} lappend TabLesLiensPourLaGeneOntology(GO,$GO,LesAccess) $Access } } set TabLesLiensPourLaGeneOntology(Gscope,$FichierGO,Nom,$Nom,LesAccess) [lsort -unique $LesAccessAvecUnLien] } foreach Access [set TabLesLiensPourLaGeneOntology(LesAccess)] { Espionne "Access : $Access" set LesGODeLAccess {} set LesRequetesAvecUnLien {} foreach Requete [Access2Requetes $Access] { foreach GO [2GO $Requete LesLiens] { foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {$GO == ""} {continue} lappend LesRequetesAvecUnLien $Requete lappend LesGODeLAccess [string toupper $GO] } } } set TabLesLiensPourLaGeneOntology(Access,$Access,LesRequetes) [lsort -unique $LesRequetesAvecUnLien] set LesGO [lsort -unique $LesGODeLAccess] foreach GO $LesGO {lappend LesGOSelectionnes [string toupper $GO]} foreach GO [concat $LesGO [lsort -unique [TousLesAncetresGODesGO $LesGO]]] { if {![info exists TabLesLiensPourLaGeneOntology(GO,$GO,LesAccess)]} {set TabLesLiensPourLaGeneOntology(GO,$GO,LesAccess) {}} lappend TabLesLiensPourLaGeneOntology(GO,$GO,LesAccess) $Access } } foreach Requete [set TabLesLiensPourLaGeneOntology(LesRequetes)] { regsub "EC |EC:" $Requete "" Requete Espionne "Domains or Keywords : $Requete" set LesGODeLaRequete {} foreach GO [2GO $Requete LesLiens] { foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {$GO == ""} {continue} lappend LesGOSelectionnes [string toupper $GO] } } foreach GO [lsort -unique [concat [2GO $Requete LesLiens] [TousLesAncetresGODesGO [2GO $Requete LesLiens]]]] { foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {$GO == ""} {continue} if {![info exists TabLesLiensPourLaGeneOntology(GO,$GO,LesRequetes)]} {set TabLesLiensPourLaGeneOntology(GO,$GO,LesRequetes) {}} lappend TabLesLiensPourLaGeneOntology(GO,$GO,LesRequetes) $Requete } } } foreach GO [set TabLesLiensPourLaGeneOntology(LesGO)] { Espionne "GO term : $GO" foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {$GO == ""} {continue} lappend LesGOSelectionnes [string toupper $GO] } } set LesGOSelectionnes [EnterrerLesAncetresGO [lsort -unique $LesGOSelectionnes]] set TabLesLiensPourLaGeneOntology(LesGO) $LesGOSelectionnes return $LesGOSelectionnes } if {[string equal -nocase $FirstElet "append"]} { set QuelTypeDEntryPourLaGeneOntology [string trim [lindex $args 1]] set QuelEntryPourLaGeneOntology [string trim [lindex $args 2]] if {$QuelEntryPourLaGeneOntology == "" || $QuelTypeDEntryPourLaGeneOntology == ""} {return} if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "GO term"]} { lappend TabLesLiensPourLaGeneOntology(LesGO) $QuelEntryPourLaGeneOntology } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "GO term file"]} { if {![file exists $QuelEntryPourLaGeneOntology]} {return} foreach GO [DrawEntreDeux [LesLignesDuFichier $QuelEntryPourLaGeneOntology]] { scan $GO "%s" GO lappend TabLesLiensPourLaGeneOntology(LesGO) $GO } } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "Access"]} { lappend TabLesLiensPourLaGeneOntology(LesAccess) $QuelEntryPourLaGeneOntology } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "Access file"]} { if {![file exists $QuelEntryPourLaGeneOntology]} {return} foreach Access [DrawEntreDeux [LesLignesDuFichier $QuelEntryPourLaGeneOntology]] { scan $Access "%s" Access lappend TabLesLiensPourLaGeneOntology(LesAccess) $Access } } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "Links2GO (Domains, Keywords)"]} { lappend TabLesLiensPourLaGeneOntology(LesRequetes) $QuelEntryPourLaGeneOntology } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "Blast file" ]} { foreach Access [DrawChoixDesHitsDuBlast $QuelEntryPourLaGeneOntology] { lappend TabLesLiensPourLaGeneOntology(LesAccess) $Access } } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "Clustering file"]} { foreach Access [DrawChoixDesHitsDuClustering $QuelEntryPourLaGeneOntology] { lappend TabLesLiensPourLaGeneOntology(LesAccess) $Access } } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "MSF file" ]} { foreach Access [DrawChoixDesHitsDuMSF $QuelEntryPourLaGeneOntology] { Espionne $Access lappend TabLesLiensPourLaGeneOntology(LesAccess) $Access } } if {[string equal -nocase $QuelTypeDEntryPourLaGeneOntology "Gscope GO file" ]} { foreach LaBoiteGscope [DrawChoixDesBoitesDuProjetGscope $QuelEntryPourLaGeneOntology] { lappend TabLesLiensPourLaGeneOntology(LesBoitesGscope) $LaBoiteGscope } } return } if {[string equal -nocase $FirstElet "ask"]} { set args [join [lrange $args 1 end] ","] if {$args == "" || ![info exists TabLesLiensPourLaGeneOntology($args)]} {return} return [set TabLesLiensPourLaGeneOntology($args)] } return } proc GPG {{Qui ""} {Quoi ""}} { global GPG if {$Quoi=="pk_gpaintgene"} { set Quoi "pk" } if {[info exists GPG($Qui,$Quoi)]} { return $GPG($Qui,$Quoi) } if {[info exists GPG("EstCharge")]} { return "" } set GPG("EstCharge") 1 CanalSqlGenoret #rR attention pk_gpaintgene devient pk set Headers "pk_gpaintgene gpid name description accessnum entrezid rnaprobe orientation hybridtemp washtemp stage strain sectionplane resol dissecdate dissectime textoriginal" set Sql "select * from imanno.gpaintgene" set R [SqlExec $Sql "GetList"] set GPG(ListOf,keys) [list pk gpid name accessnum entrezid rnaprobe description] set Bidon 12345 set Seed 12345; expr srand($Seed) set Method "SRAND" set GPG(ListOf,Random) {} foreach {pk gpid name description accessnum entrezid rnaprobe orientation hybridtemp washtemp stage strain sectionplane resol dissecdate dissectime textoriginal} $R { if {$Method=="SRAND"} { set Random [expr rand()] while {[info exists DejaVu($Random)]} { set Random [expr rand()] } } else { if {$entrezid=="" || $rnaprobe=="" || [regexp {[^0-9]} $entrezid] || [regexp {[^0-9]} $rnaprobe]} { set Random [expr [incr Bidon]*13+[incr Bidon]*7] } else { set Random [expr $entrezid*13+$rnaprobe*7] } set Random [string range $Random 1 end-1] while {[info exists DejaVu($Random)]} { Espionne "Rand deja vu $Random" ; set Random [expr $Random*17] } } set DejaVu($Random) 1 lappend GPG(ListOf,Random) $Random if {[info exists DejaVu($name)]} { FaireLire "DejaVu $name" } foreach K $GPG(ListOf,keys) { set GPG($pk,$K) [set $K] set GPG($name,$K) [set $K] lappend GPG(ListOf,$K) [set $K] } set GPG($Random) $pk } set GPG(ListOf,Random) [lsort $GPG(ListOf,Random)] foreach K $GPG(ListOf,keys) { set GPG(ListOf,$K) [lsort -unique $GPG(ListOf,$K)] } lappend GPG(ListOf,keys) nom set LesRandomises {} set I 10000 foreach Random $GPG(ListOf,Random) { set pk $GPG($Random) incr I 10 set nom [format "IA%5.5d" $I] set GPG($pk,nom) $nom set LesValeurs {} foreach K $GPG(ListOf,keys) { lappend LesValeurs $GPG($pk,$K) } lappend GPG(ListOf,NomName) "$GPG($pk,nom) $GPG($pk,name)" lappend LesRandomises $LesValeurs } set GPG(Get,All) $LesRandomises CanalSqlDisconnect return [GPG $Qui $Quoi] } proc GPL13607GPL14550 {} { #est ce que toutes les ps de GPL13607 se retrouvent bien dans GPL14550 set First "[HomeRipp]/GxHome/AgilentAnnot/GPL13607_family.soft" set Second "[HomeRipp]/GxHome/AgilentAnnot/GPL14550_family.soft" set LetsGo 0 set PremiereFois 1 set S [open $Second r] while {[gets $S Ligne] >= 0} { if {[regexp "^!platform_table_begin" $Ligne]} {set LetsGo 1; continue} if {[regexp "^!platform_table_end" $Ligne]} {break} if {!$LetsGo} {continue} if {$PremiereFois} { set PremiereFois 0 continue } set LesMots [split $Ligne "\t"] set PsS [lindex $LesMots 1] set VuDansS($PsS) 1 } set LetsGo 0 set PremiereFois 1 set F [open $First r] while {[gets $F Ligne] >= 0} { if {[regexp "^!platform_table_begin" $Ligne]} {set LetsGo 1; continue} if {[regexp "^!platform_table_end" $Ligne]} {break} if {!$LetsGo} {continue} if {$PremiereFois} { set PremiereFois 0 continue } set LesMots [split $Ligne "\t"] set PsF [lindex $LesMots 1] if {![info exists VuDansS($PsF)]} { Espionne "on trouve pas $PsF"} } } proc GPO {LesGODeIPO LesGODePPO LesGODeMSO} { #OUT = [list GOTerm1 GOTerm2 ....] #GPO Global Protein Ontology set LesGOSelected {} foreach GO [EnterrerLesAncetresGO [lsort -unique [concat $LesGODeIPO $LesGODePPO $LesGODeMSO]]] { foreach Type [GODB GO $GO LesTypes] { set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] lappend LesGOSelected [list $GO $Type $Def 0 $Def] } } return [lsort -index 1 $LesGOSelected] } proc GPS {Path {GPStype VDR} {Organisme human} {Typegene all} {Database pureGene} {Limite 2000}} { # Prend le gène le plus proche des SBS , qu'importe le sens, en 3' ou en 5', et recalcule la distance au TSS en vu d'un mapping # V2.0 : Génère au préalable toutes les requétes BIRD, les envoie, puis les traite #Compteurs : set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : Start" set CompteurLus 0 set CompteurImprobables 0 set CompteurAmont 0 set CompteurIn 0 set Ecrit 0 set CompteurExons 0 set LigneP "" set LigneG "" set FirstTime "Oui" set Moins "-" set Plus "+" # Générer les requetes à partir des coordonnées # ============================================= set FichierDesCoordonnees [open "$Path.coo" "r"] set FichierDesRequetes [open "/tmp/$Path.bql" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : Building queries" #Premiere requetes a DOPA pour savoir quels organismes elle contient puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT DISTINCT(ali_organismet) FROM ucsc$Organisme.alignements ORDER BY ali_organismet ASC" puts $FichierDesRequetes "#" set queryCount 1 while { [gets $FichierDesCoordonnees LigneCoordonnees] >=0 } { set LigneCoordonnees [string trim $LigneCoordonnees] if {$GPStype == "VDR"} { ScanLaListe $LigneCoordonnees ID ChromosomeH StartH EndH OrientationH MM1 MM2 SequenceH set DR [lindex [regexp -inline {\DR[0-6]} $Path] 0] } if {$GPStype == "STAF"} { ScanLaListe $LigneCoordonnees ID ChromosomeH StartH EndH OrientationH ActacaH SequenceH ScoreH UpstreamH DownstreamH } if {$GPStype == "Classic"} { ScanLaListe $LigneCoordonnees ID ChromosomeH StartH EndH OrientationH } if { $Typegene == "protein" } { set Operateur "=" set Operand "\'protein\'" } if { $Typegene == "noncoding" } { set Operateur "<>" set Operand "\'Protein\'" } if { $Typegene == "all" } { set Operateur "<>" set Operand "' '" } if {[lindex [string range $ChromosomeH 0 0] 0] != "c" } { set Chromosome "chr$ChromosomeH" } else { set Chromosome "$ChromosomeH" } #In puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT * FROM ucsc$Organisme.$Database WHERE chrom='$Chromosome' and txStart<=$StartH and txEnd>=$EndH and typegene$Operateur$Operand and pseudogene='no' ORDER BY txStart DESC fetch first 1 rows only" puts $FichierDesRequetes "//" #AP puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT * FROM ucsc$Organisme.$Database WHERE chrom='$Chromosome' and $EndH<=txStart and strand='$Plus' and typegene$Operateur$Operand and pseudogene='no' ORDER BY txSTART ASC fetch first 1 rows only" puts $FichierDesRequetes "//" #AI puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT * FROM ucsc$Organisme.$Database WHERE chrom='$Chromosome' and $EndH<=txStart and strand='$Moins' AND typegene$Operateur$Operand and pseudogene='no' ORDER BY txSTART ASC fetch first 1 rows only" puts $FichierDesRequetes "//" #BI puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT * FROM ucsc$Organisme.$Database WHERE chrom='$Chromosome' and $StartH>=txEnd and strand='$Plus' AND typegene$Operateur$Operand and pseudogene='no' ORDER BY txEND DESC fetch first 1 rows only" puts $FichierDesRequetes "//" #BP puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT * FROM ucsc$Organisme.$Database WHERE chrom='$Chromosome' and $StartH>=txEnd and strand='$Moins' AND typegene$Operateur$Operand and pseudogene='no' ORDER BY txEND DESC fetch first 1 rows only" puts $FichierDesRequetes "//" #PHICS puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT * FROM ucsc$Organisme.alignements WHERE ali_chroq='$Chromosome' AND ali_startq <= $StartH AND ali_endq >= $EndH ORDER BY ali_genomet DESC" puts $FichierDesRequetes "//" set queryCount [expr $queryCount + 5] } close $FichierDesRequetes close $FichierDesCoordonnees # Envoyer et réceptionner les requetes # ==================================== set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : Executing $queryCount queries" set FichierDesRequetes [open "/tmp/$Path.bql" "r"] exec /biolo/bird/bin/birdql_client.sh "/tmp/$Path.bql" "bird" "/tmp/$Path.res" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : Deleting query file" file delete "/tmp/$Path.bql" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : Parsing results" set FichierDesCoordonnees [open "$Path.coo" "r"] set FichierDesAccessFavorables [open "$Path.favo" "w"] set FichierTotal [open "$Path.csv" "w"] if {$GPStype == "VDR"} { set EnteteOut "BS|ID;BS|Type;BS|Chrom;BS|Start;BS|End;BS|strand;BS|Sequence;BS|repeat;BS|P1;BS|P2;BS|P3;BS|P4;BS|P5;BS|P6;BS|P7;BS|P8;BS|P9;BS|P10;BS|P11;BS|P12;NearestGene|Access;NearestGene|Start;NearestGene|End;NearestGene|Strand;NearestGene|ExonOuIntron;NearestGene|ExonOuIntronNum;NearestGene|UtrOuCDS;NearestGene|DebutExonOuIntron;NearestGene|FinExonOuIntron;NearestGene|DebutOuFinExonOuIntron;NearestGene|DistanceAlaBorneDeExonOuIntron;NearestGene|id;NearestGene|name;NearestGene|mRNA;NearestGene|spID;NearestGene|spDisplayID;NearestGene|geneSymbol;NearestGene|protAcc;NearestGene|description;NearestGene|typegene;NearestGene|pseudogene;NearestGene|span;NearestGene|spanloc;NearestGene|confidence;NearestGene|dTSS;GeneOnMinus|Access;GeneOnMinus|Start;GeneOnMinus|End;GeneOnMinus|strand;GeneOnMinus|id;GeneOnMinus|name;GeneOnMinus|mRNA;GeneOnMinus|spID;GeneOnMinus|spDisplayID;GeneOnMinus|geneSymbol;GeneOnMinus|protAcc;GeneOnMinus|description;GeneOnMinus|typegene;GeneOnMinus|pseudogene;GeneOnMinus|span;GeneOnMinus|spanloc;GeneOnMinus|confidence;GeneOnMinus|dTSS;GeneOnMinus|Guess;GeneOnPlus|Access;GeneOnPlus|Start;GeneOnPlus|End;GeneOnPlus|strand;GeneOnPlus|id;GeneOnPlus|name;GeneOnPlus|mRNA;GeneOnPlus|spID;GeneOnPlus|spDisplayID;GeneOnPlus|geneSymbol;GeneOnPlus|protAcc;GeneOnPlus|description;GeneOnPlus|typegene;GeneOnPlus|pseudogene;GeneOnPlus|span;GeneOnPlus|spanloc;GeneOnPlus|confidence;GeneOnPlus|dTSS;GeneOnPlus|Guess" } if {$GPStype == "STAF"} { set EnteteOut "BS|ID;BS|Chrom;BS|Start;BS|End;BS|strand;BS|Actaca;BS|Sequence;BS|Upstream;BS|Downstream;BS|Score;BS|LogScore;NearestGene|Access;NearestGene|Start;NearestGene|End;NearestGene|Strand;NearestGene|ExonOuIntron;NearestGene|ExonOuIntronNum;NearestGene|UtrOuCDS;NearestGene|DebutExonOuIntron;NearestGene|FinExonOuIntron;NearestGene|DebutOuFinExonOuIntron;NearestGene|DistanceAlaBorneDeExonOuIntron;NearestGene|id;NearestGene|name;NearestGene|mRNA;NearestGene|spID;NearestGene|spDisplayID;NearestGene|geneSymbol;NearestGene|protAcc;NearestGene|description;NearestGene|typegene;NearestGene|pseudogene;NearestGene|span;NearestGene|spanloc;NearestGene|confidence;NearestGene|dTSS;GeneOnMinus|Access;GeneOnMinus|Start;GeneOnMinus|End;GeneOnMinus|strand;GeneOnMinus|id;GeneOnMinus|name;GeneOnMinus|mRNA;GeneOnMinus|spID;GeneOnMinus|spDisplayID;GeneOnMinus|geneSymbol;GeneOnMinus|protAcc;GeneOnMinus|description;GeneOnMinus|typegene;GeneOnMinus|pseudogene;GeneOnMinus|span;GeneOnMinus|spanloc;GeneOnMinus|confidence;GeneOnMinus|dTSS;GeneOnMinus|Guess;GeneOnPlus|Access;GeneOnPlus|Start;GeneOnPlus|End;GeneOnPlus|strand;GeneOnPlus|id;GeneOnPlus|name;GeneOnPlus|mRNA;GeneOnPlus|spID;GeneOnPlus|spDisplayID;GeneOnPlus|geneSymbol;GeneOnPlus|protAcc;GeneOnPlus|description;GeneOnPlus|typegene;GeneOnPlus|pseudogene;GeneOnPlus|span;GeneOnPlus|spanloc;GeneOnPlus|confidence;GeneOnPlus|dTSS;GeneOnPlus|Guess" } if {$GPStype == "Classic"} { set EnteteOut "BS|ID;BS|Chrom;BS|Start;BS|End;BS|strand;NearestGene|Access;NearestGene|Start;NearestGene|End;NearestGene|Strand;NearestGene|ExonOuIntron;NearestGene|ExonOuIntronNum;NearestGene|UtrOuCDS;NearestGene|DebutExonOuIntron;NearestGene|FinExonOuIntron;NearestGene|DebutOuFinExonOuIntron;NearestGene|DistanceAlaBorneDeExonOuIntron;NearestGene|id;NearestGene|name;NearestGene|mRNA;NearestGene|spID;NearestGene|spDisplayID;NearestGene|geneSymbol;NearestGene|protAcc;NearestGene|description;NearestGene|typegene;NearestGene|pseudogene;NearestGene|span;NearestGene|spanloc;NearestGene|confidence;NearestGene|dTSS;GeneOnMinus|Access;GeneOnMinus|Start;GeneOnMinus|End;GeneOnMinus|strand;GeneOnMinus|id;GeneOnMinus|name;GeneOnMinus|mRNA;GeneOnMinus|spID;GeneOnMinus|spDisplayID;GeneOnMinus|geneSymbol;GeneOnMinus|protAcc;GeneOnMinus|description;GeneOnMinus|typegene;GeneOnMinus|pseudogene;GeneOnMinus|span;GeneOnMinus|spanloc;GeneOnMinus|confidence;GeneOnMinus|dTSS;GeneOnMinus|Guess;GeneOnPlus|Access;GeneOnPlus|Start;GeneOnPlus|End;GeneOnPlus|strand;GeneOnPlus|id;GeneOnPlus|name;GeneOnPlus|mRNA;GeneOnPlus|spID;GeneOnPlus|spDisplayID;GeneOnPlus|geneSymbol;GeneOnPlus|protAcc;GeneOnPlus|description;GeneOnPlus|typegene;GeneOnPlus|pseudogene;GeneOnPlus|span;GeneOnPlus|spanloc;GeneOnPlus|confidence;GeneOnPlus|dTSS;GeneOnPlus|Guess" } set FichierDesRequetesExecutees [open "/tmp/$Path.res" "r"] # Recuperation des divers organismes de Dopa en prévision des enetetes @L gets $FichierDesRequetesExecutees EntetePHICS set Organismes {} while {[gets $FichierDesRequetesExecutees organism] >= 0} { set isQuery [string range $organism 0 4] if { $isQuery != "Query"} { if { $GPStype == "Classic"} { set EnteteOut "$EnteteOut;$organism|genome;$organism|chrom;$organism|start;$organism|end;$organism|strand;$organism|sequence" } if { $GPStype == "STAF"} { set EnteteOut "$EnteteOut;$organism|genome;$organism|chrom;$organism|start;$organism|end;$organism|strand;$organism|BestProbScoreSeq;$organism|proba;$organism|ProbShift;$organism|BestLogScoreSeq;$organism|logScore;$organism|LogShift;$organism|DDLS" } if { $GPStype == "VDR"} { set EnteteOut "$EnteteOut;$organism|genome;$organism|chrom;$organism|start;$organism|end;$organism|strand;$organism|BestProbScoreSeq;$organism|proba;$organism|ProbShift" } set TableauP($organism,genomet) "@" set TableauP($organism,chroT) "@" set TableauP($organism,StartT) "@" set TableauP($organism,EndT) "@" set TableauP($organism,strandT) "@" set TableauP($organism,sequenceEvalueeProba) "@" set TableauP($organism,scoreTarget) "@" set TableauP($organism,decalageProba) "@" set TableauP($organism,sequenceEvalueeLog) "@" set TableauP($organism,logScoreTarget) "@" set TableauP($organism,decalageLog) "@" set TableauP($organism,DDLS) "@" lappend Organismes $organism } else { break } } puts $FichierTotal $EnteteOut # Suppressions des éventuelles versions précédentes des fichiers # ============================================================== #Balayage du fichier de coordonées en entrée. Chaque lecture entraine 5 lectures du fichier de résultat BQL (1 "IN", 2 "Before" et 2 "After") set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : Scanning coordinates" set bs 0 while { [gets $FichierDesCoordonnees LigneCoordonnees] >=0 } { #Initialisations #--------------- set Separator ";" set LocAI "EMPTY" set LocAI2 "EMPTY" set accessAI "@" set txStartAI "@" set txEndAI "@" set strandAI "@" set LocAP "EMPTY" set LocAP2 "EMPTY" set accessAP "@" set txStartAP "@" set txEndAP "@" set strandAP "@" set LocBI "EMPTY" set LocBI2 "EMPTY" set accessBI "@" set txStartBI "@" set txEndBI "@" set strandBI "@" set LocBP "EMPTY" set LocBP2 "EMPTY" set accessBP "@" set txStartBP "@" set txEndBP "@" set strandBP "@" set LocIn "EMPTY" set AccIn "@" set txStartIn "@" set txEndIn "@" set OrientationIn "@" set ExonOuIntron "@" set UtrOuCDS "@" set DebutExonOuIntron "@" set FinExonOuIntron "@" set DebutOuFinExonOuIntron "@" set DistanceAlaBorneDeExonOuIntron "@" set descriptionBI "@" set descriptionBP "@" set descriptionAI "@" set descriptionBP "@" set descriptionIn "@" #Staf: #---- #ScanLaListe $LigneCoordonnees DR ID ChromosomeH StartH EndH OrientationH SequenceH Score NbMismatch Mismatchs if {$GPStype == "VDR"} { set P1 "N" set P2 "N" set P3 "N" set P4 "N" set P5 "N" set P6 "N" set P7 "N" set P8 "N" set P9 "N" set P10 "N" set P11 "N" set P12 "N" ScanLaListe $LigneCoordonnees ID ChromosomeH StartH EndH OrientationH MM1 MM2 SequenceH if {[regexp {[a t c g N]} $SequenceH]} { set repeat "Y" } else { set repeat "N" } set DR [lindex [regexp -inline {DR[0-6]} $Path] 0] Espionne "DR$DR" set Nb1 [lindex [split $MM1 "@"] 0] set Nb2 [lindex [split $MM2 "@"] 0] if {$Nb1 == 1} { set Position1MM1 [lindex [split [lindex [split $MM1 "@"] 1] "/"] 1] set P$Position1MM1 "O" } if {$Nb1 == 2} { set Position1MM1 [lindex [split [lindex [split $MM1 "@"] 1] "/"] 1] set P$Position1MM1 "O" set Position2MM1 [lindex [split [lindex [split $MM1 "@"] 1] "/"] 2] set P$Position2MM1 "O" } if {$Nb2 == 1} { set Position1MM2 [lindex [split [lindex [split $MM1 "@"] 1] "/"] 1] set P$Position1MM2 "O" } if {$Nb1 == 2} { set Position1MM2 [lindex [split [lindex [split $MM2 "@"] 1] "/"] 1] set Position1MM2 [expr $Position1MM2 + 6] set P$Position1MM2 "O" set Position2MM2 [lindex [split [lindex [split $MM2 "@"] 1] "/"] 2] set Position2MM2 [expr $Position2MM2 + 6] set P$Position2MM2 "O" } set mistakeMap "$P1;$P2;$P3;$P4;$P5;$P6;$P7;$P8;$P9;$P10;$P11;$P12" set LigneCoordonnees "$ID $ChromosomeH $StartH $EndH $OrientationH $SequenceH $mistakeMap" } #GPS CLASSIC: if {$GPStype == "STAF"} { ScanLaListe $LigneCoordonnees ID ChromosomeH StartH EndH OrientationH ActacaH SequenceH ScoreH UpstreamH DownstreamH set LogScoreH [StafLogScoreFunction $SequenceH] } if {$GPStype == "Classic"} { ScanLaListe $LigneCoordonnees ID ChromosomeH StartH EndH OrientationH } regsub -all -nocase "," $LigneCoordonnees "." LigneCoordonnees #Resultats du In #--------------- if {[info exist LigneResultat]} { ScanLaListe $LigneResultat QueryIDin regsub -all -nocase {Query\[|\]} $QueryIDin "" QueryIDin } gets $FichierDesRequetesExecutees LigneResultat if { $LigneResultat != "EMPTY" } { ScanLaPipe $LigneResultat binIn accessIn chromIn strandIn txStartIn txEndIn cdsStartIn cdsEndIn exonCountIn exonStartsIn exonEndsIn idIn name2In cdsStartStatIn cdsEndStatIn exonFramesIn nameIn mRNAIn spIDIn spDisplayIDIn geneSymbolIn refseqIn protAccIn descriptionIn typegeneIn pseudogeneIn spanIn spanlocIn confidenceIn referenceIn regsub -all -nocase {[\s;\|\(\)]} $descriptionIn "." descriptionIn regsub -all -nocase {[\s;\|\(\)]} $confidenceIn "." confidenceIn regsub -all -nocase {[\s;\|\(\)]} $spanIn "." spanIn regsub -all -nocase {[\s;\|\(\)]} $spanlocIn "." spanlocIn if { $typegeneIn == "protein" } { set LocIne "$accessIn;$chromIn;$txStartIn;$txEndIn;$strandIn;$exonStartsIn;$exonEndsIn;$exonCountIn;$cdsStartIn;$cdsEndIn" set LocInBQL [LocInBQL $StartH $LocIne $Separator] set LocIn "$LocInBQL;$idIn;$name2In;$mRNAIn;$spIDIn;$spDisplayIDIn;$geneSymbolIn;$protAccIn;$descriptionIn;$typegeneIn;$pseudogeneIn;$spanIn;$spanlocIn;$confidenceIn" } else { set LocIn "$accessIn;$txStartIn;$txEndIn;$strandIn;@;@;@;@;@;@;@;$idIn;$name2In;@;@;@;@;@;$descriptionIn;$typegeneIn;$pseudogeneIn;$spanIn;$spanlocIn;$confidenceIn" } } else { set LocIn "EMPTY" set accessIn "@" set txStartIn "999999999999" set txEndIn "999999999999" set strandIn "@" set idIn "@" set name2In "@" set descriptionIn "@" set typegeneIn "@" set pseudogeneIn "@" set spanIn "@" set spanlocIn "@" set confidenceIn "@" } #Resultats du AP #--------------- gets $FichierDesRequetesExecutees LigneResultat ScanLaListe $LigneResultat QueryIDBeforeI gets $FichierDesRequetesExecutees LigneResultat if { $LigneResultat != "EMPTY" } { ScanLaPipe $LigneResultat binAP accessAP chromAP strandAP txStartAP txEndAP cdsStartAP cdsEndAP exonCountAP exonStartsAP exonEndsAP idAP name2AP cdsStartStatAP cdsEndStatAP exonFramesAP nameAP mRNAAP spIDAP spDisplayIDAP geneSymbolAP refseqAP protAccAP descriptionAP typegeneAP pseudogeneAP spanAP spanlocAP confidenceAP referenceAP regsub -all -nocase {[\s;\|\(\)]} $descriptionAP "." descriptionAP regsub -all -nocase {[\s;\|\(\)]} $confidenceAP "." confidenceAP regsub -all -nocase {[\s;\|\(\)]} $spanAP "." spanAP regsub -all -nocase {[\s;\|\(\)]} $spanlocAP "." spanlocAP if { $typegeneAP != "protein" && $typegeneAP != "Protein"} { set LocAP "$accessAP;$txStartAP;$txEndAP;$strandAP;$idAP;$name2AP;@;@;@;@;@;$descriptionAP;$typegeneAP;$pseudogeneAP;$spanAP;$spanlocAP;$confidenceAP" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocAP2 "$accessAP;$txStartAP;$txEndAP;$strandAP;@;@;@;@;@;@;@;$idAP;$name2AP;@;@;@;@;@;$descriptionAP;$typegeneAP;$pseudogeneAP;$spanAP;$spanlocAP;$confidenceAP" } else { set LocAP "$accessAP;$txStartAP;$txEndAP;$strandAP;$idAP;$name2AP;$mRNAAP;$spIDAP;$spDisplayIDAP;$geneSymbolAP;$protAccAP;$descriptionAP;$typegeneAP;$pseudogeneAP;@;@;@" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocAP2 "$accessAP;$txStartAP;$txEndAP;$strandAP;@;@;@;@;@;@;@;$idAP;$name2AP;$mRNAAP;$spIDAP;$spDisplayIDAP;$geneSymbolAP;$protAccAP;$descriptionAP;$typegeneAP;$pseudogeneAP;@;@;@" } } else { set accessAP "@" set txStartAP "999999999999" set txEndAP "999999999999" set strandAP "@" set idAP "@" set name2AP "@" set descriptionAP "@" set typegeneAP "@" set pseudogeneAP "@" set spanAP "@" set spanlocAP "@" set confidenceAP "@" } #Resultats du AI #--------------- gets $FichierDesRequetesExecutees LigneResultat ScanLaListe $LigneResultat QueryIDBeforeP gets $FichierDesRequetesExecutees LigneResultat if { $LigneResultat != "EMPTY" } { ScanLaPipe $LigneResultat binAI accessAI chromAI strandAI txStartAI txEndAI cdsStartAI cdsEndAI exonCountAI exonStartsAI exonEndsAI idAI name2AI cdsStartStatAI cdsEndStatAI exonFramesAI nameAI mRNAAI spIDAI spDisplayIDAI geneSymbolAI refseqAI protAccAI descriptionAI typegeneAI pseudogeneAI spanAI spanlocAI confidenceAI referenceAI regsub -all -nocase {[\s;\|\(\)]} $descriptionAI "." descriptionAI regsub -all -nocase {[\s;\|\(\)]} $confidenceAI "." confidenceAI regsub -all -nocase {[\s;\|\(\)]} $spanAI "." spanAI regsub -all -nocase {[\s;\|\(\)]} $spanlocAI "." spanlocAI if { $typegeneAI != "protein" } { set LocAI "$accessAI;$txStartAI;$txEndAI;$strandAI;$idAI;$name2AI;@;@;@;@;@;$descriptionAI;$typegeneAI;$pseudogeneAI;$spanAI;$spanlocAI;$confidenceAI" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocAI2 "$accessAI;$txStartAI;$txEndAI;$strandAI;@;@;@;@;@;@;@;$idAI;$name2AI;@;@;@;@;@;$descriptionAI;$typegeneAI;$pseudogeneAI;$spanAI;$spanlocAI;$confidenceAI" } else { set LocAI "$accessAI;$txStartAI;$txEndAI;$strandAI;$idAI;$name2AI;$mRNAAI;$spIDAI;$spDisplayIDAI;$geneSymbolAI;$protAccAI;$descriptionAI;$typegeneAI;$pseudogeneAI;@;@;@" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocAI2 "$accessAI;$txStartAI;$txEndAI;$strandAI;@;@;@;@;@;@;@;$idAI;$name2AI;$mRNAAI;$spIDAI;$spDisplayIDAI;$geneSymbolAI;$protAccAI;$descriptionAI;$typegeneAI;$pseudogeneAI;@;@;@" } } else { set accessAI "@" set txStartAI "999999999999" set txEndAI "999999999999" set strandAI "@" set idAI "@" set name2AP "@" set descriptionAI "@" set typegeneAI "@" set pseudogeneAI "@" set spanAI "@" set spanlocAI "@" set confidenceAI "@" } #Resultats du BI #--------------- gets $FichierDesRequetesExecutees LigneResultat ScanLaListe $LigneResultat QueryIDAfterI gets $FichierDesRequetesExecutees LigneResultat if { $LigneResultat != "EMPTY" } { ScanLaPipe $LigneResultat binBI accessBI chromBI strandBI txStartBI txEndBI cdsStartBI cdsEndBI exonCountBI exonStartsBI exonEndsBI idBI name2BI cdsStartStatBI cdsEndStatBI exonFramesBI nameBI mRNABI spIDBI spDisplayIDBI geneSymbolBI refseqBI protAccBI descriptionBI typegeneBI pseudogeneBI spanBI spanlocBI confidenceBI referenceBI regsub -all -nocase {[\s;\|\(\)]} $descriptionBI "." descriptionBI regsub -all -nocase {[\s;\|\(\)]} $confidenceBI "." confidenceBI regsub -all -nocase {[\s;\|\(\)]} $spanBI "." spanBI regsub -all -nocase {[\s;\|\(\)]} $spanlocBI "." spanlocBI if { $typegeneBI != "protein" } { set LocBI "$accessBI;$txStartBI;$txEndBI;$strandBI;$idBI;$name2BI;@;@;@;@;@;$descriptionBI;$typegeneBI;$pseudogeneBI;$spanBI;$spanlocBI;$confidenceBI" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocBI2 "$accessBI;$txStartBI;$txEndBI;$strandBI;@;@;@;@;@;@;@;$$idBI;$name2BI;@;@;@;@;@;$descriptionBI;$typegeneBI;$pseudogeneBI;$spanBI;$spanlocBI;$confidenceBI" } else { set LocBI "$accessBI;$txStartBI;$txEndBI;$strandBI;$idBI;$name2BI;$mRNABI;$spIDBI;$spDisplayIDBI;$geneSymbolBI;$protAccBI;$descriptionBI;$typegeneBI;$pseudogeneBI;@;@;@" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocBI2 "$accessBI;$txStartBI;$txEndBI;$strandBI;@;@;@;@;@;@;@;$idBI;$name2BI;$mRNABI;$spIDBI;$spDisplayIDBI;$geneSymbolBI;$protAccBI;$descriptionBI;$typegeneBI;$pseudogeneBI;@;@;@" } } else { set accessBI "@" set txStartBI "999999999999" set txEndBI "999999999999" set strandBI "@" set idBI "@" set name2BI "@" set descriptionBI "@" set typegeneBI "@" set pseudogeneBI "@" set spanBI "@" set spanlocBI "@" set confidenceBI "@" } #Resultats du BP #---------------- gets $FichierDesRequetesExecutees LigneResultat ScanLaListe $LigneResultat QueryIDAfterP gets $FichierDesRequetesExecutees LigneResultat if { $LigneResultat != "EMPTY" } { ScanLaPipe $LigneResultat binBP accessBP chromBP strandBP txStartBP txEndBP cdsStartBP cdsEndBP exonCountBP exonStartsBP exonEndsBP idBP name2BP cdsStartStatBP cdsEndStatBP exonFramesBP nameBP mRNABP spIDBP spDisplayIDBP geneSymbolBP refseqBP protAccBP descriptionBP typegeneBP pseudogeneBP spanBP spanlocBP confidenceBP referenceBP regsub -all -nocase {[\s;\|\(\)]} $descriptionBP "." descriptionBP regsub -all -nocase {[\s;\|\(\)]} $confidenceBP "." confidenceBP regsub -all -nocase {[\s;\|\(\)]} $spanBP "." spanBP regsub -all -nocase {[\s;\|\(\)]} $spanlocBP "." spanlocBP if { $typegeneBP != "protein" } { set LocBP "$accessBP;$txStartBP;$txEndBP;$strandBP;$idBP;$name2BP;@;@;@;@;@;$descriptionBP;$typegeneBP;$pseudogeneBP;$spanBP;$spanlocBP;$confidenceBP" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocBP2 "$accessBP;$txStartBP;$txEndBP;$strandBP;@;@;@;@;@;@;@;$idBP;$name2BP;@;@;@;@;@;$descriptionBP;$typegeneBP;$pseudogeneBP;$spanBP;$spanlocBP;$confidenceBP" } else { set LocBP "$accessBP;$txStartBP;$txEndBP;$strandBP;$idBP;$name2BP;$mRNABP;$spIDBP;$spDisplayIDBP;$geneSymbolBP;$protAccBP;$descriptionBP;$typegeneBP;$pseudogeneBP;@;@;@" #Duplication en laissant la place pour un comportement "LocIn" s'il gagne le combat CandidatProx set LocBP2 "$accessBP;$txStartBP;$txEndBP;$strandBP;@;@;@;@;@;@;@;$idBP;$name2BP;$mRNABP;$spIDBP;$spDisplayIDBP;$geneSymbolBP;$protAccBP;$descriptionBP;$typegeneBP;$pseudogeneBP;@;@;@" } } #Resultats de PHICS #------------------ gets $FichierDesRequetesExecutees LigneResultat ScanLaListe $LigneResultat QueryIDPHICS gets $FichierDesRequetesExecutees LigneResultat set isQuery [string range $LigneResultat 0 4] while { $isQuery != "Query" && $isQuery != "" } { if {$isQuery != "EMPTY"} { set TableauP($organism,genomet) "@" set TableauP($organism,chroT) "@" set TableauP($organism,StartT) "@" set TableauP($organism,EndT) "@" set TableauP($organism,strandT) "@" set TableauP($organism,sequenceEvalueeProba) "@" set TableauP($organism,scoreTarget) "@" set TableauP($organism,decalageProba) "@" set TableauP($organism,sequenceEvalueeProba) "@" if { $GPStype == "STAF"} { set TableauP($organism,logScoreTarget) "@" set TableauP($organism,decalageLog) "@" set TableauP($organism,DDLS) "@" } set genomet "@" set chroT "@" set StartT "@" set EndT "@" set strandT "@" set sequenceTargetDesiree "@" set sequenceEvalueeProba "@" set sequenceEvalueeLog "@" set scoreTarget "@" set decalageProba "@" set logScoreTarget "@" set decalageLog "@" set DDLS "@" set sequenceG "@" set sequenceD "@" ScanLaPipe $LigneResultat access genomeq genomet id organismet chroq startq endq chrot startt endt strandt score sequenceq sequencet #On positionne la sequence query comme si elle ne contenait pas de gaps set startDansAliIdeal [expr $StartH - $startq] set longueurQuery [expr $EndH - $StartH + 1] set sequenceAvantQueryIdeale [string range $sequenceq 0 [expr $startDansAliIdeal - 1]] set nbGapsAvantQueryIdeale 0 set nbGapstotal 0 #Astuce : On remplace les gaps par des gaps, en utilisant un compteur pour savoir combien il y en a avant ce start idéal. # Ce nombre permettra de se deplacer d'autant vers la droite pour se positionner correctement. #Au fur et a mesure qu'on avance dans la sequence pour enlever les gaps on continue de les compter et d'avancer dans la sequence set nbGapsAvantQueryIdeale [regexp -all -nocase {\-} $sequenceAvantQueryIdeale] set startDecaleDansAli [expr $startDansAliIdeal + $nbGapsAvantQueryIdeale] set nbGapstotal $nbGapsAvantQueryIdeale set nbGapstrans $nbGapstotal set condition "TRUE" while {$condition == "TRUE"} { set nbGapsAvantQueryIdeale 0 set sequenceAvantQueryIdeale [string range $sequenceq 0 [expr $startDecaleDansAli - 1]] set nbGapsAvantQueryIdeale [regexp -all -nocase {\-} $sequenceAvantQueryIdeale] set nbGapstotal $nbGapsAvantQueryIdeale if {$nbGapstotal == $nbGapstrans} { set sequenceQueryDecalee [string range $sequenceq $startDecaleDansAli [expr $startDecaleDansAli + $longueurQuery -1]] set condition "FALSE" } else { set nbGapstrans $nbGapstotal set startDecaleDansAli [expr $startDansAliIdeal + $nbGapsAvantQueryIdeale] } } # Il se peut toujours qu'on tombe sur un gap en première instance. # Donc on se ballade sur cette nouvelle query et on compte le nombre de gaps qu'on rencontre avant de trouver une reelle base set nbGapsAuDebutQueryDecalee 0 for {set c 0} {$c < $longueurQuery} {incr c} { set base [string range $sequenceQueryDecalee $c $c] if {$base == "-"} { incr nbGapsAuDebutQueryDecalee } else { break } } # Enfin le bon start : set startQueryDecaleeSansGapsAuDepart [expr $startDecaleDansAli + $nbGapsAuDebutQueryDecalee] # ... mais pas tout a fait la bonne sequence... set sequenceQueryDecaleeAvecBonStart [string range $sequenceq $startQueryDecaleeSansGapsAuDepart [expr $startQueryDecaleeSansGapsAuDepart + $longueurQuery - 1]] # ... en effet, il peut demeurer des gaps dans la query, rien de bien grave mais ça décale le "end" # donc on compte ces gaps: set nbGapsDansQueryDecaleeAvecBonStart 0 set nbGapsDansQueryDecaleeAvecBonStart [regexp -all -nocase {\-} $sequenceQueryDecaleeAvecBonStart] # et voila le bon End: set longueurCorrecte [expr $longueurQuery + $nbGapsDansQueryDecaleeAvecBonStart] # Du coup, la bonne sequence query finale devient : set sequenceQueryDesiree [string range $sequenceq $startQueryDecaleeSansGapsAuDepart [expr $startQueryDecaleeSansGapsAuDepart + $longueurCorrecte - 1]] set sequenceQueryDesiree [string toupper $sequenceQueryDesiree] if { $nbGapsDansQueryDecaleeAvecBonStart > 0 } { set precisionGapsHuman $nbGapsDansQueryDecaleeAvecBonStart } else { set precisionGapsHuman "" } # Protocole inverse pour la target : on commence par recuperer la sequence alignee avec le bon start set sequenceTargetDesiree [string toupper [string range $sequencet $startQueryDecaleeSansGapsAuDepart [expr $startQueryDecaleeSansGapsAuDepart + $longueurQuery - 1]]] set sequenceG [string toupper [string range $sequencet [expr $startQueryDecaleeSansGapsAuDepart - 1 ] [expr $startQueryDecaleeSansGapsAuDepart + $longueurQuery - 2]]] set sequenceD [string toupper [string range $sequencet [expr $startQueryDecaleeSansGapsAuDepart + 1 ] [expr $startQueryDecaleeSansGapsAuDepart + $longueurQuery]]] set sequenceTargetDesireeR [NucToReverseAndComplementNuc $sequenceTargetDesiree] set sequenceGR [NucToReverseAndComplementNuc $sequenceG] set sequenceDR [NucToReverseAndComplementNuc $sequenceD] regsub -all {\-} $sequenceTargetDesiree "_" sequenceTargetDesiree regsub -all {\-} $sequenceG "_" sequenceG regsub -all {\-} $sequenceD "_" sequenceD regsub -all {\-} $sequenceTargetDesireeR "_" sequenceTargetDesireeR regsub -all {\-} $sequenceGR "_" sequenceGR regsub -all {\-} $sequenceDR "_" sequenceDR # Scoring set decalageProba "C" set sequenceEvalueeProba $sequenceTargetDesiree if {$GPStype == "STAF"} { set scoreTarget [StafScoreFunctionFois $sequenceTargetDesiree] set scoreG [StafScoreFunctionFois $sequenceG] set scoreD [StafScoreFunctionFois $sequenceD] set scoreTargetR [StafScoreFunctionFois $sequenceTargetDesireeR] set scoreGR [StafScoreFunctionFois $sequenceGR] set scoreDR [StafScoreFunctionFois $sequenceDR] set logScoreTarget [StafLogScoreFunction $sequenceTargetDesiree] set logScoreG [StafLogScoreFunction $sequenceG] set logScoreD [StafLogScoreFunction $sequenceD] set logScoreTargetR [StafLogScoreFunction $sequenceTargetDesireeR] set logScoreGR [StafLogScoreFunction $sequenceGR] set logScoreDR [StafLogScoreFunction $sequenceDR] if {$logScoreTarget <$logScoreTarget && ![regexp -all -nocase {\-} $sequenceTargetDesireeR]} { set logScoreTarget $logScoreTargetR set decalageLog "R" set sequenceEvalueeLog $sequenceTargetDesireeR } if {$logScoreTarget < $logScoreG && ![regexp -all -nocase {\-} $sequenceG]} { set logScoreTarget $logScoreG set decalageLog "G" set sequenceEvalueeLog $sequenceG } if {$logScoreTarget < $logScoreD && ![regexp -all -nocase {\-} $sequenceD]} { set logScoreTarget $logScoreD set decalageLog "D" set sequenceEvalueeLog $sequenceD } if {$logScoreTarget < $logScoreGR && ![regexp -all -nocase {\-} $sequenceGR]} { set logScoreTarget $logScoreGR set decalageLog "GR" set sequenceEvalueeLog $sequenceGR } if {$logScoreTarget < $logScoreDR && ![regexp -all -nocase {\-} $sequenceDR]} { set logScoreTarget $logScoreDR set decalageLog "DR" set sequenceEvalueeLog $sequenceDR } } if {$GPStype == "VDR"} { Espionne "yataaa" flush stdout set scoreTarget [lindex [split [RGKTSA $sequenceTargetDesiree $DR] " "] 0] set scoreG [lindex [split [RGKTSA $sequenceG $DR] " "] 0] set scoreD [lindex [split [RGKTSA $sequenceD $DR] " "] 0] set scoreTargetR [lindex [split [RGKTSA $sequenceTargetDesireeR $DR] " "] 0] set scoreGR [lindex [split [RGKTSA $sequenceGR $DR] " "] 0] set scoreDR [lindex [split [RGKTSA $sequenceDR $DR] " "] 0] if {$scoreTarget < $scoreTargetR && ![regexp -all -nocase {\-} $sequenceTargetDesireeR] } { set scoreTarget $scoreTargetR set decalageProba "R" set sequenceEvalueeProba $sequenceTargetDesireeR } if {$scoreTarget < $scoreG && ![regexp -all -nocase {\-} $sequenceG] } { set scoreTarget $scoreG set decalageProba "G" set sequenceEvalueeProba $sequenceG } if {$scoreTarget < $scoreD && ![regexp -all -nocase {\-} $sequenceD]} { set scoreTarget $scoreD set decalageProba "D" set sequenceEvalueeProba $sequenceD } if {$scoreTarget < $scoreGR && ![regexp -all -nocase {\-} $sequenceGR] } { set scoreTarget $scoreGR set decalageProba "GR" set sequenceEvalueeProba $sequenceGR } if {$scoreTarget < $scoreDR && ![regexp -all -nocase {\-} $sequenceDR]} { set scoreTarget $scoreDR set decalageProba "DR" set sequenceEvalueeProba $sequenceDR } } # et la sequence qui la précède pour compter les gaps : set sequenceTargetAvantDesiree [string range $sequencet 0 $startQueryDecaleeSansGapsAuDepart] set nbGapsAvantTarget 0 set nbGapsAvantTarget [regexp -all -nocase {\-} $sequenceTargetAvantDesiree] # Si on tombe sur un Gap, on prend la coordonnee d'avant # Le reel Start de la target devient (CM = CH - GH - AH + AM - GM): set StartT [expr $StartH - $startq + $nbGapsAvantQueryIdeale + $nbGapsAuDebutQueryDecalee + $startt - $nbGapsAvantTarget] # pour connaitre le reel End fin de la target, il faut ajouter la longueur mais retirer les gaps interieurs eventuels, qu'il convient de calculer set nbGapsDansTarget [regexp -all -nocase {\-} $sequenceTargetDesiree] set EndT [ expr $StartT + $longueurQuery - $nbGapsDansTarget -1] set TableauP($organismet,genomet) $genomet set TableauP($organismet,chroT) $chrot set TableauP($organismet,StartT) $StartT set TableauP($organismet,EndT) $EndT set TableauP($organismet,strandT) $strandt regsub -all -nocase {\-} $sequenceTargetDesiree "Z" sequenceTargetDesiree set TableauP($organismet,sequenceEvalueeProba) $sequenceEvalueeProba set TableauP($organismet,scoreTarget) $scoreTarget set TableauP($organismet,decalageProba) $decalageProba if {$GPStype == "STAF"} { set TableauP($organismet,sequenceEvalueeLog) $sequenceEvalueeLog set TableauP($organismet,logScoreTarget) $logScoreTarget set TableauP($organismet,decalageLog) $decalageLog set TableauP($organismet,DDLS) [expr abs($LogScoreH - $logScoreTarget)] } gets $FichierDesRequetesExecutees LigneResultat set isQuery [string range $LigneResultat 0 4] } else { gets $FichierDesRequetesExecutees LigneResultat set isQuery [string range $LigneResultat 0 4] } } set LigneP "" foreach organism $Organismes { if {$GPStype == "STAF"} { set LigneP "$LigneP$TableauP($organism,genomet);$TableauP($organism,chroT);$TableauP($organism,StartT);$TableauP($organism,EndT);$TableauP($organism,strandT);$TableauP($organism,sequenceEvalueeProba);$TableauP($organism,scoreTarget);$TableauP($organism,decalageProba);$TableauP($organism,sequenceEvalueeLog);$TableauP($organism,logScoreTarget);$TableauP($organism,decalageLog);$TableauP($organism,DDLS);" } if {$GPStype == "Classic"} { set LigneP "$LigneP$TableauP($organism,genomet);$TableauP($organism,chroT);$TableauP($organism,StartT);$TableauP($organism,EndT);$TableauP($organism,strandT);$TableauP($organism,sequenceEvalueeProba);" } if {$GPStype == "VDR"} { set LigneP "$LigneP$TableauP($organism,genomet);$TableauP($organism,chroT);$TableauP($organism,StartT);$TableauP($organism,EndT);$TableauP($organism,strandT);$TableauP($organism,sequenceEvalueeProba);$TableauP($organism,scoreTarget);$TableauP($organism,decalageProba);" } } if { $LocAP == "EMPTY" || $LocAP == ""} { set txStartAP 999999999999999 set txEndAP 999999999999999 } if { $LocAI == "EMPTY" || $LocAI == ""} { set txStartAI 999999999999999 set txEndAI 999999999999999 } if { $LocBP == "EMPTY" || $LocBP == "" } { set txStartBP -99999999999999 set txEndBP -99999999999999 } if { $LocBI == "EMPTY" || $LocBI == "" } { set txStartBI -99999999999999 set txEndBI -99999999999999 } set DistanceBP [expr $StartH - $txEndBP] set DistanceBI [expr $StartH - $txEndBI] set DistanceAP [expr $txStartAP - $EndH] set DistanceAI [expr $txStartAI - $EndH] #Espionne "Tata $DistanceAP $DistanceBP $DistanceAI $DistanceBI" if { $DistanceAI >= $DistanceAP } { set DistanceAfter "-$DistanceAP" set DistanceAfterDeCalcul $DistanceAP set CandidatAfterBQL "$LocAP2;$DistanceAfter" } else { set DistanceAfter $DistanceAI set DistanceAfterDeCalcul $DistanceAI set CandidatAfterBQL "$LocAI2;$DistanceAfter" } if { $DistanceBI >= $DistanceBP } { set DistanceBefore "-$DistanceBP" set DistanceBeforeDeCalcul $DistanceBP set CandidatBeforeBQL "$LocBP2;$DistanceBefore" } else { set DistanceBefore $DistanceBI set DistanceBeforeDeCalcul $DistanceBI set CandidatBeforeBQL "$LocBI2;$DistanceBefore" } # Définition du candidat à la proximité # ------------------------------------- if { $LocIn == "EMPTY" || $LocIn == "" } { if { $DistanceBeforeDeCalcul > $DistanceAfterDeCalcul } { set CandidatProx $CandidatAfterBQL } else { set CandidatProx $CandidatBeforeBQL } } else { if {$OrientationIn == "-"} { set DistanceIn [expr $txEndIn - $StartH] } else { set DistanceIn [expr $StartH - $txStartIn] } set CandidatProx "$LocIn;$DistanceIn" if { $DistanceIn <= $Limite } { set LigneG "$CandidatProx" #regsub -all -nocase {\s} $LigneG "\t" LigneG puts $FichierDesAccessFavorables $LigneG } } # Définition des candidats à la régulation # ---------------------------------------- # Test si cette séquence régule le gène sur le brin + # --------------------------------------------------- if { $LocAP != "EMPTY" && $LocAP != "" } { set CandidatRegul1 "$LocAP;-$DistanceAP" if { $DistanceAP <= $Limite } { set Avis1 "Favorable" set LigneG "$CandidatRegul1" regsub -all -nocase {\s} $LigneG "\t" LigneG puts $FichierDesAccessFavorables $LigneG } else { set Avis1 "Unfavorable" } } else { set CandidatRegul1 "@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@" set Avis1 "@" } # Test si cette séquence régule le gène sur le brin - # --------------------------------------------------- if { $LocBP != "EMPTY" && $LocBP != "" } { set CandidatRegul2 "$LocBP;-$DistanceBP" if { $DistanceBP <= $Limite } { set Avis2 "Favorable" set LigneG "$CandidatRegul2" regsub -all -nocase {\s} $LigneG "\t" LigneG puts $FichierDesAccessFavorables $LigneG } else { set Avis2 "Unfavorable" } } else { set CandidatRegul2 "@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@" set Avis2 "@" } # On veut toujours le gène avant sur le brin moins et le gène aprés sur le brin plus. La procédure ne tient pas compte des orientations des gènes. Donc : # --> Si le SBS est en ori "-" : on veut le gène qui suit (pour la proc, le gène qui précéde en "-") et le gène qui débute (qui suit en "+" pour la proc) aprés sur l'autre brin. # --> Si le SBS eWhatIsMyUCSC est en ori "+" : on veut le gène qui suit (pour la proc, le gène qui suit en "+") et le gène qui débute (qui précéde en "-" pour la proc) avant sur l'autre brin. #Donc dans tous les cas, on veut le précédent "-" et le suivant "+". set LigneG "$CandidatProx;$CandidatRegul1;$Avis1;$CandidatRegul2;$Avis2" regsub -all -nocase {\t|\s} $LigneG " " LigneG if {$GPStype == "STAF"} { regsub -all -nocase {\-} $ActacaH "Z" ActacaH regsub -all -nocase {\-} $SequenceH "Z" SequenceH regsub -all -nocase {\-} $DownstreamH "Z" $DownstreamH regsub -all -nocase {\-} $UpstreamH "Z" UpstreamH puts $FichierTotal "$ID;$ChromosomeH;$StartH;$EndH;$OrientationH;$ActacaH;$SequenceH;$UpstreamH;$DownstreamH;$ScoreH;$LogScoreH;$LigneG;$LigneP" } if {$GPStype == "Classic"} { puts $FichierTotal "$ID;$ChromosomeH;$StartH;$EndH;$OrientationH;$LigneG;$LigneP" } if {$GPStype == "VDR"} { puts $FichierTotal "$ID;$DR;$ChromosomeH;$StartH;$EndH;$OrientationH;$SequenceH;$repeat;$mistakeMap;$LigneG;$LigneP" } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : Closing and deleting files" file delete "/tmp/$Path.res" close $FichierDesAccessFavorables close $FichierTotal set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|GPS : End" } proc GUIAgents {} { global NbSeq LNOrdali Sref iTag set iTag 0 #set ::Start 0 set ::DoStep 0 #set ::StepMode 1 set ::FaireLireNon 1 if {! $::WithGUI} { set ::Start 1 return } LoadTkAndPackages label .l -background black -foreground white -font "CourierNew 24 bold" -justify left -anchor w -textvariable ::Lab text .t -height $NbSeq -bd 2 -background black -foreground white -font "Courier 24 bold" -wrap none -xscrollcommand ".scr set " scrollbar .scr -orient horiz -command ".t xview " -width 8 text .tref -height $NbSeq -bd 2 -background black -foreground white -font "Courier 24 bold" -wrap none frame .fbut -background black button .fbut.ss -text " Start/Stop " -bg green -fg white -command StartStop button .fbut.gr -text " Graphe " -bg cyan -command GrapheScore checkbutton .fbut.cks -fg white -bg black -text "Step by Step" -onvalue 1 -offvalue 0 -variable ::StepMode button .fbut.bsp -fg white -bg "#550a0a" -text "One Step" -command [list DoOneStep] grid .fbut.gr -row 0 -column 0 -sticky n -padx 10 -pady 10 grid .fbut.ss -row 1 -column 0 -sticky n -padx 10 -pady 10 grid .fbut.cks -row 2 -column 0 -sticky n grid .fbut.bsp -row 3 -column 0 -sticky n set ic -1 #incr ic #grid .fbut -column $ic -row 0 -rowspan 3 -sticky ns -padx 10 incr ic grid .l -column $ic -row 0 -sticky ew grid .t -column $ic -row 1 -sticky ew -ipady 5 grid .scr -column $ic -row 2 -sticky ew grid .tref -column $ic -row 3 -sticky ew grid columnconfig . all -weight 1 grid rowconfig . all -weight 1 #wm attributes . -fullscreen 1 focus .t bind all SeeTag bind all GrapheScore bind all StartStop bind all ToggleStepMode bind all DoOneStep #bind .t [list SpyAgent %W @%x,%y] #bind .t [list ClearSpy] bind .t {.t xview scroll -[set Defauts(DeltaXScroll)] units ; break} bind .t {.t xview scroll [set Defauts(DeltaXScroll)] units ; break} trace add variable Lscores write GrapheScore set Tref [list] foreach n $LNOrdali { lappend Tref $Sref($n) } set Tref [join $Tref \n] .tref insert end $Tref FenetreAuCentre [winfo toplevel .t] return } proc GUISampleTOL {} { global Tx db TaxRoot InitTaxDB LoadTkAndPackages ChangeTkOptions GUITaxInitialise ChangeTkOptions if {[winfo children .] == {} } { # create a general frame set wroot . set w .guitax frame $w grid $w -row 0 -column 0 -sticky news } else { # SampleTOLGUI is launched from another application set w .guitax set wroot $w toplevel $w } wm title $wroot "Sample TOL GUI" wm iconname $wroot "SampleTOL" wm protocol $wroot WM_DELETE_WINDOW KillParLaCroix wm withdraw $wroot # title frame frame $w.ftit grid $w.ftit -row 0 -column 0 -sticky w -pady {5 30} label $w.ftit.lb1 -font "Helvetica 20 bold italic" -text "SoTOL " -anchor w -justify left label $w.ftit.lb2 -text "Parameters for sampling taxa of the Tree Of Life" -font "Helvetica 10 bold" -anchor w -justify left grid $w.ftit.lb1 -row 0 -column 0 -sticky w grid $w.ftit.lb2 -row 0 -column 1 -sticky w -padx 20 # compulsory items frame $w.fcp grid $w.fcp -row 1 -column 0 -sticky ew label $w.fcp.lbnb -text "Number of samples : " -justify right -anchor w -font TaxFontWdgBold set Tx(-ntaxa) "" entry $w.fcp.ennb -bg white -font TaxFontWdg -textvariable Tx(-ntaxa) label $w.fcp.lbro -text "Root : " -font TaxFontWdgBold -justify right -anchor w entry $w.fcp.enro -bg white -font TaxFontWdg -textvariable Tx(-root) label $w.fcp.lbmo -text "Model Organisms : " -justify right -anchor w -font TaxFontWdgBold button $w.fcp.btmo -bg cyan -font TaxFontWdg -text "Show list ..." -command ShowModelOrganismsList grid $w.fcp.lbnb -row 0 -column 0 -sticky e -pady 2 grid $w.fcp.ennb -row 0 -column 1 -sticky ew -pady 2 grid $w.fcp.lbro -row 1 -column 0 -sticky e -pady 2 grid $w.fcp.enro -row 1 -column 1 -sticky ew -pady 2 grid $w.fcp.lbmo -row 2 -column 0 -sticky e -pady 2 grid $w.fcp.btmo -row 2 -column 1 -sticky ew -pady 2 grid columnconfig $w.fcp 1 -weight 1 # frame add models frame $w.fad grid $w.fad -row 2 -column 0 -sticky ew -pady {30 10} label $w.fad.lbad -text "Add Model Organisms : " -font TaxFontWdgBold -justify left -anchor w set Tx(chxmodel) 1 radiobutton $w.fad.rad -text "Add to selection" -font TaxFontWdg -relief flat -value 1 -highlightthickness 0 -variable Tx(chxmodel) radiobutton $w.fad.rin -text "Pick in selection" -font TaxFontWdg -relief flat -value 0 -highlightthickness 0 -variable Tx(chxmodel) radiobutton $w.fad.rdc -text "Don't care " -font TaxFontWdg -relief flat -value -1 -highlightthickness 0 -variable Tx(chxmodel) grid $w.fad.lbad -row 0 -column 0 -columnspan 3 -sticky w grid $w.fad.rad -row 1 -column 0 -sticky e grid $w.fad.rin -row 1 -column 1 -sticky e grid $w.fad.rdc -row 1 -column 2 -sticky e grid columnconfig $w.fad all -weight 1 # frame 'all' or 'representative' organisms frame $w.far grid $w.far -row 3 -column 0 -sticky ew -pady {30 10} label $w.far.lbad -text "Organisms to use : " -font TaxFontWdgBold -justify left -anchor w set Tx(-useorgs) "representative" radiobutton $w.far.rad -text "Use ALL complete genomes" -font TaxFontWdg -relief flat -value "all" -highlightthickness 0 -variable Tx(-useorgs) radiobutton $w.far.rin -text "Use a repreesntative for each Species" -font TaxFontWdg -relief flat -value "representative" -highlightthickness 0 -variable Tx(-useorgs) grid $w.far.lbad -row 0 -column 0 -columnspan 3 -sticky w grid $w.far.rad -row 1 -column 0 -sticky e grid $w.far.rin -row 1 -column 1 -sticky e grid columnconfig $w.far all -weight 1 # User Organisms List frame $w.fus grid $w.fus -row 4 -column 0 -sticky ew -pady 10 label $w.fus.lus -text "User selected taxa Ids : " -justify right -anchor w -font TaxFontWdgBold set Tx(-userids) "" set Tx(-UserFile) "" entry $w.fus.eus -bg white -font TaxFontWdg -textvariable Tx(-UserFile) button $w.fus.bus -text "Browse ..." -font TaxFontWdg -bg cyan -command BrowseUserSelectedTaxIdFile label $w.fus.lsh -text "Show taxa Ids : " -justify right -anchor w -font TaxFontWdgBold set Tx(-ShowFile) "" entry $w.fus.esh -bg white -font TaxFontWdg -textvariable Tx(-ShowFile) button $w.fus.bsh -text "Browse ..." -font TaxFontWdg -bg cyan -command BrowseShowTaxIdFile grid $w.fus.lus -row 0 -column 0 -sticky e grid $w.fus.eus -row 0 -column 1 -sticky ew grid $w.fus.bus -row 0 -column 2 -sticky e grid $w.fus.lsh -row 1 -column 0 -sticky e grid $w.fus.esh -row 1 -column 1 -sticky ew grid $w.fus.bsh -row 1 -column 2 -sticky e grid columnconfig $w.fus 1 -weight 1 # frame controls frame $w.fct grid $w.fct -row 5 -column 0 -sticky ew -pady {100 10} button $w.fct.bdi -text "Exit" -font TaxFontWdg -bg red -command "destroy $wroot" button $w.fct.bok -text " OK " -font TaxFontWdg -bg green1 -command {SampleTOL gui} grid $w.fct.bdi -row 0 -column 0 -sticky w -padx 30 grid $w.fct.bok -row 0 -column 1 -sticky e -padx 30 grid columnconfig $w.fct all -weight 1 grid columnconfig $w all -weight 1 grid columnconfig $wroot all -weight 1 wm deiconify $wroot MesCouleurs $wroot FenetreAuCentre $wroot return } proc GUITaxInitialise {} { global Tx Defauts # Init fonts and drawing parameters if {"TaxFont" ni [font names]} { font create TaxFont -family Helvetica -size [set Defauts(FontSizeTree)] -weight [set Defauts(FontWghtTree)] } if {"TaxFontWdgBold" ni [font names]} { font create TaxFontWdgBold -family Helvetica -size 10 -weight bold font create TaxFontWdg -family Helvetica -size 10 -weight normal } if {"BalloonFont" ni [font names]} { font create BalloonFont -family Helvetica -size [set Defauts(FontSizeTree)] -weight [set Defauts(FontWghtTree)] } LesDefauts BackAppli "#995533" LesDefauts ForeAppli "white" # Allow use of FaireAttendre LesDefauts MarcheForcee 1 # dimensions set Tx(PADWdt) [set Defauts(CanvasWTree)] set Tx(PADHgt) [set Defauts(CanvasHTree)] set Tx(FWidth) [set Defauts(FWidthTree)] set Tx(FHeight) [set Defauts(FHeightTree)] set Tx(FontSize) [set Defauts(FontSizeTree)] set Tx(FontWght) [set Defauts(FontWghtTree)] set Tx(NfoisX) 1. set Tx(NfoisY) 1.1 set Tx(ScaleR) 1. set Tx(Rotate) 0. set Tx(OffsetX) [expr {10 + [font measure TaxFont "55555"]}] set Tx(OffsetY) [expr {int([set Tx(NfoisY)]*[lindex [font metrics TaxFont] 5])}] set Increment 100. set Tx(Increment) $Increment parray Tx return } proc GUIViewSampleTOL {} { global Tx db TaxRoot InitTaxDB LoadTkAndPackages ChangeTkOptions # define if we come from gui or command line if {[winfo exists .guitax]} { if {[winfo toplevel .guitax] eq ".guitax"} { destroy .guitax } else { destroy {*}[winfo children .] } } # create window if {[winfo children .] == {} } { # create a general frame set wroot . set w .gtax frame $w grid $w -row 0 -column 0 -sticky news } else { # SampleTOLGUI is launched from another application set w .gtax set wroot $w toplevel $w } wm title $wroot "Sample TOL GUI" wm iconname $wroot "SampleTOL" wm protocol $wroot WM_DELETE_WINDOW QuitSampleTOL wm withdraw $wroot # title frame frame $w.ftit grid $w.ftit -row 0 -column 0 -sticky w label $w.ftit.lb1 -font "Helvetica 20 bold italic" -text "SoTOL" -anchor w -justify left label $w.ftit.lb2 -text "Sampled taxa of the Tree Of Life" -font "Helvetica 12 bold" -anchor w -justify left grid $w.ftit.lb1 -row 0 -column 0 -sticky w grid $w.ftit.lb2 -row 0 -column 1 -sticky w -padx 20 # frame text frame $w.ftxt grid $w.ftxt -row 1 -column 0 -sticky ew -pady 5 set Tx(WLin) $w.ftxt.lbl set Tx(WLin,text) "" label $w.ftxt.lbl -height 2 -bg yellow -fg black -bd 2 -relief groove -anchor w -justify left -textvariable Tx(WLin,text) grid $w.ftxt.lbl -row 0 -column 0 -sticky ew grid columnconfig $w.ftxt 0 -weight 1 # search frame frame $w.fsea grid $w.fsea -row 2 -column 0 -sticky ew label $w.fsea.lbl -text "Search taxa ID/Name : " -bg white set Tx(SearchEnt) "" entry $w.fsea.ent -textvariable Tx(SearchEnt) -bg white button $w.fsea.bdo -text "Search" -bg green1 -command SearchTaxIdOrName button $w.fsea.bnx -text "Next" -bg cyan -command {DoTaxaSearch next} button $w.fsea.bpr -text "Prev" -bg cyan -command {DoTaxaSearch prev} button $w.fsea.bet -text "Expand All Taxo" -bg green1 -fg white -command {ExpandCollapseAllTaxa taxa expand} button $w.fsea.bct -text "Collapse All Taxa" -bg orange -fg white -command {ExpandCollapseAllTaxa taxa collapse} button $w.fsea.bei -text "Expand All Internals" -bg blue -fg white -command {ExpandCollapseAllTaxa internal expand} button $w.fsea.bci -text "Collapse All Internals" -bg magenta -fg white -command {ExpandCollapseAllTaxa internal collapse} grid $w.fsea.lbl -row 0 -column 0 -sticky w grid $w.fsea.ent -row 0 -column 1 -sticky w grid $w.fsea.bdo -row 0 -column 2 -sticky w grid $w.fsea.bnx -row 0 -column 3 -sticky w -padx {40 2} grid $w.fsea.bpr -row 0 -column 4 -sticky w -padx 1 grid $w.fsea.bet -row 0 -column 5 -sticky e -padx {20 1} grid $w.fsea.bct -row 0 -column 6 -sticky e -padx {1 20} grid $w.fsea.bei -row 0 -column 7 -sticky e -padx {20 1} grid $w.fsea.bci -row 0 -column 8 -sticky e -padx {1 20} bind $w.fsea.ent SearchTaxIdOrName # frame canvas set Tx(PAD) $w.fcan.c set Tx(ContextMenu) $w.fcan.c.ctxmn set Tx(fgCan) white set Tx(bgCan) black frame $w.fcan grid $w.fcan -row 3 -column 0 -sticky news canvas $w.fcan.c -height [set Tx(FHeight)] -width [set Tx(FWidth)] -scrollregion [list 0 0 [set Tx(PADWdt)] [set Tx(PADHgt)]] -cursor hand2 -background $Tx(bgCan) -relief groove -xscrollcommand "$w.fcan.hs set" -yscrollcommand "$w.fcan.vs set" scrollbar $w.fcan.vs -command "$w.fcan.c yview" -width 8 scrollbar $w.fcan.hs -orient horiz -command "$w.fcan.c xview" -width 8 grid $w.fcan.c -row 0 -column 0 -sticky news grid $w.fcan.vs -row 0 -column 1 -sticky ns grid $w.fcan.hs -row 1 -column 0 -sticky ew grid rowconfig $w.fcan 0 -weight 1 grid columnconfig $w.fcan 0 -weight 1 grid columnconfig $w.fcan 1 -weight 0 # control frame, buttons, etc ... frame $w.fctr grid $w.fctr -row 4 -column 0 -sticky ew -pady 5 -padx 5 # frame font frame $w.fctr.ffnt -relief groove -bd 2 grid $w.fctr.ffnt -row 0 -column 0 -sticky w label $w.fctr.ffnt.ftsize -text "Font size" -anchor w -justify left spinbox $w.fctr.ffnt.fsz -readonlybackground white -width 6 -state readonly -values {6 8 10 12 14 16 18 20 22 24} -command [list TaxFontMode size %s] label $w.fctr.ffnt.ftwght -text "Font weight" -anchor w -justify left spinbox $w.fctr.ffnt.fwh -readonlybackground white -width 6 -state readonly -values [list normal bold] -command [list TaxFontMode weight %s] grid $w.fctr.ffnt.ftsize -row 0 -column 0 -sticky w grid $w.fctr.ffnt.fsz -row 0 -column 1 -sticky w grid $w.fctr.ffnt.ftwght -row 1 -column 0 -sticky w grid $w.fctr.ffnt.fwh -row 1 -column 1 -sticky w # frame show taxa frame $w.fctr.fsht -relief groove -bd 2 grid $w.fctr.fsht -row 0 -column 1 -sticky w -padx 5 set Tx(-toshow) "def" radiobutton $w.fctr.fsht.ral -text "all taxa" -justify left -relief flat -value "all" -highlightthickness 0 -variable Tx(-toshow) -command {ChangeTaxa2Show} radiobutton $w.fctr.fsht.rde -text "defined" -justify left -relief flat -value "def" -highlightthickness 0 -variable Tx(-toshow) -command {ChangeTaxa2Show} grid $w.fctr.fsht.ral -row 0 -column 0 -sticky w grid $w.fctr.fsht.rde -row 1 -column 0 -sticky w # sub-frame buttons frame $w.fctr.fprc grid $w.fctr.fprc -row 0 -column 2 -sticky w button $w.fctr.fprc.print -text "Print" -background yellow -command "PrintCanvas $w.fcan.c png" button $w.fctr.fprc.save -text "Save" -background cyan -command {WriteSelectedTaxId} button $w.fctr.fprc.reset -text "Reset" -background white -command {} button $w.fctr.fprc.close -text "Close" -background red -command "QuitSampleTOL $w" grid $w.fctr.fprc.print -row 0 -column 0 grid $w.fctr.fprc.save -row 1 -column 0 grid $w.fctr.fprc.reset -row 0 -column 1 grid $w.fctr.fprc.close -row 1 -column 1 grid rowconfig $w.fctr.fprc all -weight 0 grid columnconfig $w.fctr.fprc all -weight 0 grid rowconfig $w.fctr all -weight 0 grid columnconfig $w.fctr all -weight 0 grid rowconfigure $w all -weight 0 grid rowconfigure $w 3 -weight 1 grid columnconfigure $w all -weight 1 if {$w ne $wroot} { grid rowconfigure $wroot all -weight 1 grid columnconfigure $wroot all -weight 1 } MesCouleurs $wroot update idletasks # bindings bind all {QuitSampleTOL} set PAD $Tx(PAD) bind $PAD {%W scan mark %x %y} bind $PAD {%W scan dragto %x %y 1} bind $PAD <4> {%W yview scroll -1 units} bind $PAD <5> {%W yview scroll 1 units} bind $PAD {%W xview scroll -1 units} bind $PAD {%W xview scroll 1 units} #InitTax2Draw puts "start drawing" DrawTaxo puts "end drawing" #AfficheProfileResults wm attributes $wroot -fullscreen 1 wm deiconify $wroot lassign [$PAD bbox all] x1 y1 x2 y2 #$PAD move all [expr {-$x1+20}] [expr {-$y1+20}] set dx [expr {$x2-$x1+50}] set dy [expr {$y2-$y1+50}] if {$dx < $Tx(PADWdt)} {set dx $Tx(PADWdt)} if {$dy < $Tx(PADHgt)} {set dy $Tx(PADHgt)} $PAD configure -scrollregion [list 0 0 $dx $dy] # contextual menu : add/remove from selection CreateContextMenuTax bind $PAD [list ShowContextMenuTax %W %x %y] $PAD bind Arrow {ToggleTaxArrow %W} $PAD bind IntFlag {ToggleTaxInternal %W} $PAD bind sensor [list ShowLineage %W %x %y] $PAD bind sensor [list ShowRankOfNode %W %x %y] $PAD bind sensor {%W delete crank} #BindRankToTaxaItem update idletasks if {0} { source uriencode.tcl source tinyfileutils.tcl source can2svg.tcl can2svg::canvas2file $PAD can.svg } return } proc Gag {} { Gs "WindowText" # Cette procedure retourne la page du labo return [ContenuDuFichier "./logag.html"] } proc GagneOuPerdUnBinding {GardeOuNonUnPfamQcq} { #peut etre a adapter car fait apres BilanPerteGainPfam {WithWhat} #ne considere que les LA CONTIG entier #GardeOuNonUnPfamQcq OUI ou NON set BoxWithBinding 0; set BoxConcernes 0 foreach Box [ListeDesPABs] { set LesLignesFic {}; set trouveAuMoinsUnBinding 0; set nbLA 0; set nbannule 0; set nbinvariant 0 if {[info exists InfoPfamRef]} { unset InfoPfamRef } set LesPfamRef {} if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set Org Mouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set Org Rat } else { set Org SpliRet } set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set LesNames [InterrogeNames $Cluster Name $Org] set RefPfam [ExtraitInfo $Box "RefPfam"] set NbPFAMRef [InterrogeRefPfam $Box-$RefPfam nombrePFAMMacsims] set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} set LaRefEtLesNames [concat [list $Box $RefPfam] $LesNames] set LaRefEtLesNames [ListeSansDoublon $LaRefEtLesNames] set LesPfamStartStop {}; set LesPfamStartStopNonRedondant {} set LesPfamStartStop [LesPfamStartStop $FileMacsims $LaRefEtLesNames $Box $Ref] if {$LesPfamStartStop=={}} {continue} set LesPfamStartStopNonRedondant [LesPfamStartStopNonRedondant $LesPfamStartStop] set NbPfamDuneBoite [llength $LesPfamStartStopNonRedondant] #Espionne "$Box $LesPfamStartStopNonRedondant $NbPfamDuneBoite" foreach PfamDuneBoite $LesPfamStartStopNonRedondant { set PfamDuneBoite [lindex [split $PfamDuneBoite " "] 0] #AVANT #set Des [InterrogePfamDesFrom1500 $PfamDuneBoite Des] #if {[regexp "binding" $Des]} { #&& [regexp "DNA" $Des] #set trouveAuMoinsUnBinding 1 #set PfamBinding($PfamDuneBoite) 1 #} else { #set PfamBinding($PfamDuneBoite) 0 #} set Des [InterrogeBindingPfamDesFromGo $PfamDuneBoite Des] if {$Des==""} { set PfamBinding($PfamDuneBoite) 0 } else { set PfamBinding($PfamDuneBoite) 1 set trouveAuMoinsUnBinding 1 } } if {!$trouveAuMoinsUnBinding} {continue} if {$NbPfamDuneBoite<=1} {continue} incr BoxWithBinding #Espionne "" #Espionne "$Box $Cluster" set LesPfamInfoRef [FromMacsims $FileMacsims $RefPfam "ConcatPfam"] set SeqDataRef [FromMacsims $FileMacsims $RefPfam "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataRef #Espionne "$FileMacsims" #Espionne "LesNames $LesNames" #Espionne "RefPfam $RefPfam $NbPFAMRef" #EspionneL "$LesPfamInfoRef" foreach InfoRef $LesPfamInfoRef { if {[regexp "ERROR" $InfoRef]} { #ds le cas ou j'ai ERROR dans InfoRef regsub -nocase {^ERROR_} $InfoRef "" InfoRef } scan $InfoRef "%s" PfamRef if {[regexp "/" $PfamRef]} { #ds le cas ou j'ai ERROR dans InfoRef set PfamRef [lindex [split $PfamRef "/"] 0] } set PfamRef [string toupper $PfamRef] regsub -nocase {^PROP_} $PfamRef "" PfamRef lappend LesPfamRef $PfamRef lappend InfoPfamRef($PfamRef) $InfoRef FstartFstop $InfoRef RFstart RFstop set AbsRef($RFstart) [PositionAbsolueDansAlignement $RFstart] set AbsRef($RFstop) [PositionAbsolueDansAlignement $RFstop] } set LesPfamRef [lsort -unique $LesPfamRef] #Espionne "LesPfamRef:$LesPfamRef" foreach Name $LesNames { if {![regexp "^LA" $Name]} {continue} if {[regexp "CONTIG5$" $Name] || [regexp "CONTIG3$" $Name]} {continue} incr nbLA set differe 0; set perdu 0 if {[info exists InfoPfamName]} { unset InfoPfamName } if {[info exists DejaVu]} { unset DejaVu } if {$Name==$Ref} {set Name $Box} set LesPfamInfoName [FromMacsims $FileMacsims $Name "ConcatPfam"] set SeqDataName [FromMacsims $FileMacsims $Name "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataName #Espionne "$Box $Name" set LesPfamInfoName [ListeSsElmtVide $LesPfamInfoName] #EspionneL "$LesPfamInfoName" #Espionne "LesGainsPertes:" if {$LesPfamInfoName=={}} { set differe 1 set perdu $NbPFAMRef foreach PfamRef $LesPfamRef { if {!$PfamBinding($PfamRef)} {continue} foreach InfoRef $InfoPfamRef($PfamRef) { FstartFstop $InfoRef RFstart RFstop set ResultPerdu [SitePerdu Pfam $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] if {$GardeOuNonUnPfamQcq=="NON"} { set LigneFic "$ResultPerdu" lappend LesLignesFic $LigneFic } } } } else { foreach InfoName $LesPfamInfoName { scan $InfoName "%s" PfamName set PfamName [string toupper $PfamName] regsub -nocase {^PROP_} $PfamName "" PfamName if {!$PfamBinding($PfamName)} {continue} lappend InfoPfamName($PfamName) $InfoName FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] if { ! [info exists InfoPfamRef($PfamName)]} { set differe 1 set ResultGagne [SiteGagne Pfam $InfoName $Name $AbsFstart $AbsFstop $Fstart $Fstop] set LigneFic "$ResultGagne" lappend LesLignesFic $LigneFic } } #Espionne "InfoPfamName: [array names InfoPfamName]" foreach PfamRef $LesPfamRef { if {!$PfamBinding($PfamRef)} {continue} foreach InfoRef $InfoPfamRef($PfamRef) { FstartFstop $InfoRef RFstart RFstop if { ! [info exists InfoPfamName($PfamRef)]} { #if {[info exists DejaVu($PfamRef)]} { continue } set differe 1 set ResultPerdu [SitePerdu Pfam $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] incr perdu set LigneFic "$ResultPerdu" lappend LesLignesFic $LigneFic lappend DejaVu($PfamRef) "$AbsRef($RFstart) $AbsRef($RFstop)" } else { set TousAbsents 1 foreach InfoName $InfoPfamName($PfamRef) { FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] #Espionne "$AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop" if {[Recouvrement $AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop]} { set TousAbsents 0 break } } if { $TousAbsents } { set differe 1 set ResultPerdu [SitePerdu Pfam $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] incr perdu set LigneFic "$ResultPerdu" lappend LesLignesFic $LigneFic } } } } } #Espionne "" #Espionne "$Box $Cluster" #Espionne "$FileMacsims" #Espionne "LesNames $LesNames" #Espionne "RefPfam $RefPfam $NbPFAMRef" #EspionneL "$LesPfamInfoRef" #Espionne "differe $differe" if {!$differe} { incr nbinvariant #Espionne " $Name rien gagne rien pris en BindingPfam" #set LigneFic " $Name rien gagne rien perdu en BindingPfam" #lappend LesLignesFic $LigneFic } else { #Espionne "$Name a perdu $perdu BindingPFAM" if {$GardeOuNonUnPfamQcq=="OUI"} { if {$perdu==$NbPFAMRef} { incr nbannule #Espionne "a annule" } } } } set nbnulle [expr $nbinvariant + $nbannule] if {$LesLignesFic!={} && $nbLA!=$nbnulle} { incr BoxConcernes Espionne "" Espionne "$Box $Cluster" EspionneL "$LesLignesFic" } #SauveLesLignes $LesLignesFic dans "$RepertoireOut/$Box" } Espionne "" Espionne "BoxWithBinding $BoxWithBinding" Espionne "BoxConcernes $BoxConcernes" } proc GammeDeCouleurBlancVersRouVouB {RouVouB NbCouleurs} { set pi 3.141592 if {$NbCouleurs <=1} { if {$RouVouB == "R"} {return [list red ]} if {$RouVouB == "B"} {return [list blue ]} if {$RouVouB == "G"} {return [list green]} } set BHexa [Deci2Hexa 255] set VHexa [Deci2Hexa 255] set RHexa [Deci2Hexa 255] set LesCouleurs {} for {set i $NbCouleurs} {0 <= $i} {incr i -1} { set Couleur [expr round(255.0/$NbCouleurs * $i)] set HexaCouleur [Deci2Hexa $Couleur] if {[string length $HexaCouleur] == 1} {set HexaCouleur "0$HexaCouleur"} if {$RouVouB == "R"} {set VHexa $HexaCouleur;set BHexa $HexaCouleur} if {$RouVouB == "V"} {set BHexa $HexaCouleur;set RHexa $HexaCouleur} if {$RouVouB == "B"} {set VHexa $HexaCouleur;set RHexa $HexaCouleur} lappend LesCouleurs "\#$RHexa$VHexa$BHexa" } return $LesCouleurs } proc GammeDeCouleurRouVouB {RouVouB NbCouleurs} { set pi 3.141592 if {$NbCouleurs <=1} { if {$RouVouB == "R"} {return [list red ]} if {$RouVouB == "B"} {return [list blue ]} if {$RouVouB == "G"} {return [list green]} } set BHexa "0[Deci2Hexa 0]" set VHexa "0[Deci2Hexa 0]" set RHexa "0[Deci2Hexa 0]" set LesCouleurs {} for {set i 0} {$i <= $NbCouleurs} {incr i} { set Couleur [expr round(255.0/$NbCouleurs * $i)] set HexaCouleur [Deci2Hexa $Couleur] if {[string length $HexaCouleur] == 1} {set HexaCouleur "0$HexaCouleur"} if {$RouVouB == "R"} {set RHexa $HexaCouleur} if {$RouVouB == "V"} {set VHexa $HexaCouleur} if {$RouVouB == "B"} {set BHexa $HexaCouleur} lappend LesCouleurs "\#$RHexa$VHexa$BHexa" } return $LesCouleurs } proc GammeDeCouleursDeGris {NbCouleurs {Ordre Degrade}} { if {$NbCouleurs <= 1} {return [list "white"]} set LesCouleurs {} for {set i 0} {$i < $NbCouleurs} {incr i} { set Val [expr {255 - round($i * 255.0 / $NbCouleurs)}] set HexaVal [Deci2Hexa $Val] lappend LesCouleurs "\#$HexaVal$HexaVal$HexaVal" } if {$Ordre eq "Random"} { return [lsort -command TrieAleatoirement $LesCouleurs] } else { return $LesCouleurs } } proc GammeDeCouleursDeGris_CHALMEL {NbCouleurs {Ordre Degrade}} { Wup "Ordre Degrade, Random" set pi 3.141592 if {$NbCouleurs <=1} {return [list "white"]} # set AngleEcart [expr ($pi/2) / ($NbCouleurs - 1)] set LesCouleurs {} for {set i 0} {$i < $NbCouleurs} {incr i} { if {0} { set Angle [expr $AngleEcart * $i * 1.0] set Val [expr round(sin($Angle + $pi/2) * 255.0)] set HexaVal [Deci2Hexa $Val] if {[string length $HexaVal] == 1} {set HexaVal "0$HexaVal"} } set Val [expr 255 - round($i * 255.0 / $NbCouleurs)] set HexaVal [Deci2Hexa $Val] if {[string length $HexaVal] == 1} {set HexaVal "0$HexaVal"} lappend LesCouleurs "\#$HexaVal$HexaVal$HexaVal" } if {$Ordre == "Random"} { return [lsort -command TrieAleatoirement $LesCouleurs] } else { return $LesCouleurs } } proc GammeDeCouleursRNV {NbCouleurs} { set pi 3.141592 set B 0 set BHexa [Deci2Hexa $B] if {[string length $BHexa] == 1} {set BHexa "0$BHexa"} if {$NbCouleurs <=1} {return [list "black"]} set AngleEcart [expr 2 * $pi / (($NbCouleurs - 1))] set LesCouleurs {} for {set i 0} {$i < $NbCouleurs} {incr i} { set Angle [expr $AngleEcart * $i] if {$Angle < [expr $pi]} { set V 0 set R [expr round((cos($Angle)/2+0.5) * 255)] } else { set R 0 set V [expr round((cos($Angle)/2+0.5) * 255)] } set RHexa [Deci2Hexa $R] if {[string length $RHexa] == 1} {set RHexa "0$RHexa"} set VHexa [Deci2Hexa $V] if {[string length $VHexa] == 1} {set VHexa "0$VHexa"} lappend LesCouleurs "\#$RHexa$VHexa$BHexa" } return $LesCouleurs } proc GammeDeCouleursRV {NbCouleurs} { set pi 3.141592 set B 0 set BHexa [Deci2Hexa $B] if {[string length $BHexa] == 1} {set BHexa "0$BHexa"} if {$NbCouleurs <=1} {return [list "black"]} set AngleEcart [expr $pi / (($NbCouleurs - 1))] set LesCouleurs {} for {set i 0} {$i < $NbCouleurs} {incr i} { set Angle [expr $AngleEcart * $i] if {0 < [expr sin($Angle) ]} {set R [expr round(sin($Angle) * 0.67 * 255)]} else {set R 0} if {0 < [expr sin($Angle-$pi/2) ]} {set V [expr round(sin($Angle-$pi/2) * 255)]} else {set V 0} set RHexa [Deci2Hexa $R] if {[string length $RHexa] == 1} {set RHexa "0$RHexa"} set VHexa [Deci2Hexa $V] if {[string length $VHexa] == 1} {set VHexa "0$VHexa"} lappend LesCouleurs "\#$RHexa$VHexa$BHexa" } return $LesCouleurs } proc GammeDeCouleursRVB {NbCouleurs {Ordre Degrade}} { if {$NbCouleurs <= 1} {return [list "blue"]} set AngleEcart [expr {[Pi] / ($NbCouleurs - 1)}] set LesCouleurs {} for {set i 0} {$i < $NbCouleurs} {incr i} { set Angle [expr {$AngleEcart * $i}] if {0 < sin($Angle+[PiS2])} {set R [expr {round(sin($Angle+[PiS2])* 255)}]} else {set R 0} if {0 < sin($Angle)} {set V [expr {round(sin($Angle) * 255)}]} else {set V 0} if {0 < sin($Angle-[PiS2])} {set B [expr {round(sin($Angle-[PiS2])* 255)}]} else {set B 0} set RHexa [Deci2Hexa $R] set VHexa [Deci2Hexa $V] set BHexa [Deci2Hexa $B] lappend LesCouleurs "\#$RHexa$VHexa$BHexa" } if {$Ordre == "Random"} { return [lsort -command TrieAleatoirement $LesCouleurs] } else { return $LesCouleurs } } proc GammeDeCouleursRVB_CHALMEL {NbCouleurs {Ordre Degrade}} { Wup "Ordre Degrade, Random" set pi 3.141592 if {$NbCouleurs <=1} {return [list "blue"]} set AngleEcart [expr $pi / ($NbCouleurs - 1)] set LesCouleurs {} for {set i 0} {$i < $NbCouleurs} {incr i} { set Angle [expr $AngleEcart * $i] if {0 < [expr sin($Angle+$pi/2) ]} {set R [expr round(sin($Angle+$pi/2)* 255)]} else {set R 0} if {0 < [expr sin($Angle) ]} {set V [expr round(sin($Angle) * 255)]} else {set V 0} if {0 < [expr sin($Angle-$pi/2 )]} {set B [expr round(sin($Angle-$pi/2)* 255)]} else {set B 0} set RHexa [Deci2Hexa $R] if {[string length $RHexa] == 1} {set RHexa "0$RHexa"} set VHexa [Deci2Hexa $V] if {[string length $VHexa] == 1} {set VHexa "0$VHexa"} set BHexa [Deci2Hexa $B] if {[string length $BHexa] == 1} {set BHexa "0$BHexa"} lappend LesCouleurs "\#$RHexa$VHexa$BHexa" } if {$Ordre == "Random"} { return [lsort -command TrieAleatoirement $LesCouleurs] } else { return $LesCouleurs } } proc GammeDeCouleursVBR {NbCouleurs {Ordre Degrade}} { Wup "Ordre Degrade, Random" set pi 3.141592 if {$NbCouleurs <=1} { return [list "green"]} set AngleEcart [expr $pi / ($NbCouleurs - 1)] set LesCouleurs {} for {set i 0} {$i < $NbCouleurs} {incr i} { set Angle [expr $AngleEcart * $i] if {0 < [expr sin($Angle+$pi/2) ]} {set V [expr round(sin($Angle+$pi/2)* 255)]} else {set V 0} if {0 < [expr sin($Angle) ]} {set B [expr round(sin($Angle) * 255)]} else {set B 0} if {0 < [expr sin($Angle-$pi/2 )]} {set R [expr round(sin($Angle-$pi/2)* 255)]} else {set R 0} set VHexa [Deci2Hexa $V] if {[string length $VHexa] == 1} {set VHexa "0$VHexa"} set BHexa [Deci2Hexa $B] if {[string length $BHexa] == 1} {set BHexa "0$BHexa"} set RHexa [Deci2Hexa $R] if {[string length $RHexa] == 1} {set RHexa "0$RHexa"} lappend LesCouleurs "\#$RHexa$VHexa$BHexa" } if {$Ordre == "Random"} { return [lsort -command TrieAleatoirement $LesCouleurs] } else { return $LesCouleurs } } proc GappedSeqAAFromGappedSeq3d {GappedSeq3d FichierOuListeA5 {Seq3d ""}} { if {[llength $FichierOuListeA5]==1} { ScanLaListe [Seq3dAndA5From $Fichier$FichierOuListeA5] Seq3d LesA5 } else { set LesA5 $FichierOuListeA5 } set i 0 set GappedSeqAA "" foreach G [split $GappedSeq3d ""] { if {[regexp -nocase {[a-z]} $G]} { set A5 [lindex $LesA5 $i] set AA [string range $A5 0 1] if {$Seq3d!=""} { set D [string index $Seq3d $i] if { ! [string equal -nocase $G $D]} { FaireLire "Problem in GappedSeqAAFromGappedSeq3d\n $G should be $D" } } incr i } else { set AA "$G$G" } append GappedSeqAA $AA } return $GappedSeqAA } proc Garde {Fichier {Granularity Seconde} {AndDelete ""}} { if { ! [file exists $Fichier]} { return "" } if {[regexp -nocase "AndDelete" $Granularity]} { set AndDelete $Granularity set Ganularity "" } if {$Granularity=="Minute"} { set Time 60000 set Extension [Date] } else { set Time 1000 set Extension [Date "Seconds"] } set Nouveau "$Fichier.$Extension" if {[file exists $Nouveau]} { after $Time ; return [Garde $Fichier $Granularity $AndDelete] } File copy -force $Fichier $Nouveau if {[file exists $Nouveau]} { if {[regexp -nocase "AndDelete" $AndDelete] && [file exists $Fichier]} { file delete $Fichier } return $Nouveau } return "" } proc GardeClustering {{quoi new}} { global Clus SDG LNDG MetAJourGroupes if {$quoi eq "new"} { lassign [DemandeTitreEtDescDuMac] titre desc ctitre cdesc set Clus(Titre) $titre EnregistreLeMac $titre "[DescriptionDuMac]" MetAJourWMacs } else { EnregistreLeMac } set Clus(NewEntry) 1 set Clus(Method) "User" LogClustering return } proc GardePierre {} { global CanalPierre NomDuFichierPierre ClosPierre if { [file exists $NomDuFichierPierre] } { if {[Garde $NomDuFichierPierre]==""} { FaireLire "I Couldn't make a backup of $NomDuFichierPierre" } File delete -force $NomDuFichierPierre } } proc GardeQueLesMinusculesDesDescriptifs {} { Wup "Avant les descriptifs etaient essentiellement en majuscule" Wup " S'il y a conflit ... je ne garde que le minuscule." set OldAccess "" set OldLigne "" foreach Ligne [LesLignesDuFichier "lesdescriptifs"] { set iEgal [string first "=" $Ligne] set Access [string range $Ligne 0 [incr iEgal -1]] set Descriptif [string range $Ligne [incr iEgal 2] end] if {$OldAccess==$Access} { set OldLigne "" } if {$OldLigne!=""} { lappend BonnesLignes $OldLigne } set OldAccess "" set OldLigne $Ligne set OldAccess $Access set OldDescriptif $Descriptif } if {$Ligne!=""} { lappend BonnesLignes $Ligne } SauveLesLignes $BonnesLignes dans "lesdescriptifs.nouveau" } proc GardeUnBindingETPerdUnNonBinding {} { #peut etre a adapter car fait apres BilanPerteGainPfam {WithWhat} set BoxWithBinding 0; set BoxConcernes 0 foreach Box [ListeDesPABs] { set LesLignesFic {}; set trouveAuMoinsUnBinding 0; set nbLA 0; set nbannule 0; set nbinvariant 0 if {[info exists InfoPfamRef]} { unset InfoPfamRef } set LesPfamRef {} if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set Org Mouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set Org Rat } else { set Org SpliRet } set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set LesNames [InterrogeNames $Cluster Name $Org] set RefPfam [ExtraitInfo $Box "RefPfam"] set RefPfam "NM_011624" set NbPFAMRef [InterrogeRefPfam $Box-$RefPfam nombrePFAMMacsims] set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} set LaRefEtLesNames [concat [list $Box $RefPfam] $LesNames] set LaRefEtLesNames [ListeSansDoublon $LaRefEtLesNames] set LesPfamStartStop {}; set LesPfamStartStopNonRedondant {} set LesPfamStartStop [LesPfamStartStop $FileMacsims $LaRefEtLesNames $Box $Ref] if {$LesPfamStartStop=={}} {continue} set LesPfamStartStopNonRedondant [LesPfamStartStopNonRedondant $LesPfamStartStop] set NbPfamDuneBoite [llength $LesPfamStartStopNonRedondant] #Espionne "" #Espionne "$Box $TousLesPfamDuneBoite $NbPfamDuneBoite" foreach PfamDuneBoite $LesPfamStartStopNonRedondant { set PfamDuneBoite [lindex [split $PfamDuneBoite " "] 0] set Des [InterrogeBindingPfamDesFromGo $PfamDuneBoite Des] if {$Des==""} { set PfamBinding($PfamDuneBoite) 0 } else { set PfamBinding($PfamDuneBoite) 1 set trouveAuMoinsUnBinding 1 } } if {!$trouveAuMoinsUnBinding} {continue} if {$NbPfamDuneBoite<=1} {continue} incr BoxWithBinding #Espionne "$Box $Cluster" set LesPfamInfoRef [FromMacsims $FileMacsims $RefPfam "ConcatPfam"] set SeqDataRef [FromMacsims $FileMacsims $RefPfam "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataRef #Espionne "$FileMacsims" #Espionne "LesNames $LesNames" #Espionne "RefPfam $RefPfam $NbPFAMRef" #EspionneL "$LesPfamInfoRef" foreach InfoRef $LesPfamInfoRef { if {[regexp "ERROR" $InfoRef]} { #ds le cas ou j'ai ERROR dans InfoRef regsub -nocase {^ERROR_} $InfoRef "" InfoRef } scan $InfoRef "%s" PfamRef if {[regexp "/" $PfamRef]} { #ds le cas ou j'ai ERROR dans InfoRef set PfamRef [lindex [split $PfamRef "/"] 0] } set PfamRef [string toupper $PfamRef] regsub -nocase {^PROP_} $PfamRef "" PfamRef lappend LesPfamRef $PfamRef lappend InfoPfamRef($PfamRef) $InfoRef FstartFstop $InfoRef RFstart RFstop set AbsRef($RFstart) [PositionAbsolueDansAlignement $RFstart] set AbsRef($RFstop) [PositionAbsolueDansAlignement $RFstop] } set LesPfamRef [lsort -unique $LesPfamRef] #Espionne "LesPfamRef:$LesPfamRef" foreach Name $LesNames { if {![regexp "^LA" $Name]} {continue} if {[regexp "CONTIG5$" $Name] || [regexp "CONTIG3$" $Name]} {continue} incr nbLA set LesLignesFicTemp {} set differe 0; set perdu 0; set gardebinding 0; set gagnebinding 0; set perdPfamAutre 0 if {[info exists InfoPfamName]} { unset InfoPfamName } if {[info exists DejaVu]} { unset DejaVu } if {$Name==$Ref} {set Name $Box} set LesPfamInfoName [FromMacsims $FileMacsims $Name "ConcatPfam"] set SeqDataName [FromMacsims $FileMacsims $Name "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataName #Espionne #Espionne "$Name" set LesPfamInfoName [ListeSsElmtVide $LesPfamInfoName] #EspionneL "$LesPfamInfoName" #Espionne "LesGainsPertes:" if {$LesPfamInfoName=={}} { set differe 1 set perdu $NbPFAMRef #Espionne "$Name a tout perdu" #set LigneFic "$Name a tout perdu" #lappend LesLignesFic $LigneFic } else { foreach InfoName $LesPfamInfoName { #gagne un binding scan $InfoName "%s" PfamName set PfamName [string toupper $PfamName] regsub -nocase {^PROP_} $PfamName "" PfamName lappend InfoPfamName($PfamName) $InfoName FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] if {!$PfamBinding($PfamName)} {continue} if { ! [info exists InfoPfamRef($PfamName)]} { set differe 1 set gagnebinding 1 set ResultGagne [SiteGagne Pfam $InfoName $Name $AbsFstart $AbsFstop $Fstart $Fstop] set LigneFic "$ResultGagne" lappend LesLignesFicTemp $LigneFic } } #Espionne "InfoPfamName: [array name InfoPfamName]" foreach PfamRef $LesPfamRef { if {$PfamBinding($PfamRef)} { #Espionne "$PfamRef est un binding" if {[info exists InfoPfamName($PfamRef)]} { set gardebinding 1 foreach InfoName $InfoPfamName($PfamRef) { FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] foreach InfoRef $InfoPfamRef($PfamRef) { FstartFstop $InfoRef RFstart RFstop if {[Recouvrement $AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop]} { set ResultGarde [SitePfamGarde $InfoName $Name $AbsFstart $AbsFstop $Fstart $Fstop] #Espionne "$ResultGarde" set LigneFic "$ResultGarde" lappend LesLignesFicTemp $LigneFic } } } } continue } else { #Espionne "$PfamRef n est pas un binding" #perd un PFAM non binding foreach InfoRef $InfoPfamRef($PfamRef) { #Espionne "InfoRef $InfoRef $PfamRef" FstartFstop $InfoRef RFstart RFstop if { ! [info exists InfoPfamName($PfamRef)]} { #Espionne "\t entre1" set differe 1 set perdPfamAutre 1 set ResultPerdu [SitePerdu Pfam $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] incr perdu #Espionne "$ResultPerdu" set LigneFic "$ResultPerdu" lappend LesLignesFicTemp $LigneFic lappend DejaVu($PfamRef) "$AbsRef($RFstart) $AbsRef($RFstop)" } else { set TousAbsents 1 foreach InfoName $InfoPfamName($PfamRef) { FstartFstop $InfoName Fstart Fstop set AbsFstart [PositionAbsolueDansAlignement $Fstart] set AbsFstop [PositionAbsolueDansAlignement $Fstop] #Espionne "$AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop" if {[Recouvrement $AbsRef($RFstart) $AbsRef($RFstop) $AbsFstart $AbsFstop]} { set TousAbsents 0 break } } if { $TousAbsents } { #Espionne "\t entre2" set differe 1 set perdPfamAutre 1 set ResultPerdu [SitePerdu Pfam $InfoRef $Name $AbsRef($RFstart) $AbsRef($RFstop) [PositionRelativeDansAlignement $AbsRef($RFstart)] [PositionRelativeDansAlignement $AbsRef($RFstop)]] incr perdu #Espionne "$ResultPerdu" set LigneFic "$ResultPerdu" lappend LesLignesFicTemp $LigneFic } } } } } } #Espionne "" #Espionne "$Box $Cluster" #Espionne "$FileMacsims" #Espionne "LesNames $LesNames" #Espionne "RefPfam $RefPfam $NbPFAMRef" #EspionneL "$LesPfamInfoRef" #Espionne "differe $differe gardebinding $gardebinding perdPfamAutre $perdPfamAutre perdu $perdu" if {!$differe} { incr nbinvariant #Espionne "$Name pasinterressant" #Espionne " $Name pas interressant" #set LigneFic " $Name pas interressant" #lappend LesLignesFic $LigneFic } else { #Espionne "$Name a perdu $perdu PFAM non binding" if {$gardebinding && $perdPfamAutre} { #Espionne "$Name bon" LConcat LesLignesFic $LesLignesFicTemp } else { incr nbannule #Espionne "a annule" } } } #Espionne "nbLA= $nbLA nbinvariant= $nbinvariant nbannule= $nbannule" set nbnulle [expr $nbinvariant + $nbannule] if {$LesLignesFic!={} && $nbLA!=$nbnulle} { incr BoxConcernes Espionne "" Espionne "$Box $Cluster" EspionneL "$LesLignesFic" } } Espionne "" Espionne "BoxWithBinding $BoxWithBinding" Espionne "BoxConcernes $BoxConcernes" } proc GaussProbability {x mean stdev} { set exponent [expr {exp(-(pow($x-$mean,2)/(2*pow($stdev,2))))}] return [expr {(1 / (sqrt(2*acos(-1.)) * $stdev)) * $exponent}] } proc GbEnStock {GB} { global GbEnStock if {[info exists GbEnStock($GB)]} { return $GbEnStock($GB) } if {[info exists GbEnStock("EstCharge")]} { return "" } set GbEnStock("EstCharge") 1 set FichierGbEnStock "[Fiches]/GbEnStock" set Redondance 0 foreach Ligne [LesLignesDuFichier $FichierGbEnStock] { if { ! [regexp -nocase {[a-z0-9/]} $Ligne]} { continue } if {[regexp {^LOCUS +[A-Z]} $Ligne]} { set GbLu [StringApres LOCUS dans $Ligne] if {[info exists GbEnStock($GbLu)]} { set Redondance 1 ; unset GbEnStock($GbLu)} set GbCourant $GbLu set GbEnStock($GbCourant) $Ligne lappend LesGbLus $GbLu continue } if {[regexp {^ACCESSION +[A-Z]} $Ligne]} { set GbEnStock($GbCourant,Accession) [StringApres "ACCESSION" dans $Ligne] } append GbEnStock($GbCourant) "\n$Ligne" if {[regexp "//" $Ligne] && [info exists GbEnStock($GbCourant,Accession)]} { set GbEnStock($GbEnStock($GbCourant,Accession)) $GbEnStock($GbCourant) } } if {$Redondance} { set FichierGbEnStockNew [TmpFile] foreach GbLu $LesGbLus { AppendAuFichier $FichierGbEnStockNew $GbEnStock($GbLu) } Garde $FichierGbEnStock file rename -force $FichierGbEnStockNew $FichierGbEnStock } return [GbEnStock $GB] } proc GbsParLigne {I} { global GbsParLigne if {[info exists GbsParLigne($I)]} { return $GbsParLigne($I) } if {[info exists GbsParLigne("EstCharge")]} { return {} } set GbsParLigne("EstCharge") 1 set FichierGbsParLigne "[Fiches]/GbsParLigne" array set GbsParLigne [LesLignesDuFichier $FichierGbsParLigne] foreach {C Vs} [array get GbsParLigne] { foreach V [split $Vs " "] { if {[info exists GbsParLigne($V)]} { lappend GbsParLigne(GbMultiple) $V } lappend GbsParLigne($V) $C } } set GbsParLigne(GbMultiple) [lsort -unique $GbsParLigne(GbMultiple)] set GbsParLigne(Vide) {} foreach L [RetChip ListOf Index] { if {[GbsParLigne $L]=={}} { lappend GbsParLigne(Vide) $L } } return [GbsParLigne $I] } proc GeEsFrom {OS} { #rR Normalement on prend Hom sa #rR Mais traitement spécial pour les bactéries qui commencent pas Bac (comme Bacteri Bacill ...) if {[string index [OiDomain] 0]=="B" && [string range [string totitle $Ge] 0 2]=="Bac"} { set Ge "B" set FinOS [string range $OS [string first " " $OS] end] regsub -all " " $FinOS "" FinOS regsub -all -nocase {[^a-z0-9]} $FinOS "" FinOS regsub -all {[0-9]} $FinOS "d" FinOS append FinOS "xxxxxx" set Es [string range $FinOS 0 3] } else { scan $OS "%s %s" Ge Es set Ge [string range $Ge 0 2] set Es [string range $Es 0 1] } set GeEs [string totitle "$Ge$Es"] regsub -all {[0-9]} $GeEs "d" GeEs return $GeEs } proc GenBankToEMBL {FichierOuListeOuTexte {FichierEMBL ""}} { set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGenBank OS OC SeqADN $FichierOuListeOuTexte]] "\n"] if {$FichierEMBL!=""} { SauveLesLignes $LesLignesEMBL dans $FichierEMBL } return [join $LesLignesEMBL "\n"] } proc GenPeptDuNcbi {Id} { #retourne Fiche GenPept du NCBI nettoye(sans balise, sans lien) set Url "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?db=protein&id=" set UrlId "$Url$Id" set Texte [ContenuDuFichier $UrlId] set Fiche [ValeurDeLaBalise "pre" Texte] foreach {regMatch contenu} [regexp -all -line -inline {]*)?>([^<]*?)
} $Fiche] { #Espionne "--[regsub -all {[\[\]\{\}\(\)\\\.\+\*\?]} $regMatch {\\\0}]--" regsub [regsub -all -line {[\[\]\{\}\(\)\\\.\+\*\?]} $regMatch {\\\0}] $Fiche $contenu Fiche #Espionne "++$regMatch++" #Espionne "--$contenu--" } #exit #regsub -all -line {]*)?>(.*?)} $Fiche {&1} Fiche return $Fiche } proc GenScan {FichierTFAOuTexte {FichierGSC ""} {TailleTroncon 300000} {TailleOverlap 300000}} { set Previens 1 if {$FichierGSC==""} { set RetourFichierGSC 0 } else { set RetourFichierGSC 1 } if {$FichierGSC=="ReturnTmpfilePlease"} { set FichierGSC "" } if {$FichierGSC!="" && [file exists $FichierGSC]} { if { ! [OuiOuNon "$FichierGSC already exists. Overwrite ?"]} { return $FichierGSC } } if {[regexp "^>" $FichierTFAOuTexte]} { set CleanTFA 1 set FichierTFA [Sauve $FichierTFAOuTexte dans "[TmpFile].tfa"] if {$FichierGSC==""} { regsub "\.tfa$" $FichierTFA ".gsc" FichierGSC } } else { set CleanTFA 0 set FichierTFA $FichierTFAOuTexte } if {$FichierGSC==""} { set FichierGSC "[TmpFile].gsc" } Espionne "$FichierTFA $FichierGSC" set MaxSizeForGenScan [expr $TailleTroncon + $TailleOverlap + 10000] if {[string length [QueLaSequenceDuTFA $FichierTFA]] < $MaxSizeForGenScan} { set Message "" catch {exec genscan "/biolo/genscan/HumanIso.smat" $FichierTFA > $FichierGSC} Message } else { foreach FichierTronconTFA [TronconneLeFichierTFA $FichierTFA $TailleTroncon $TailleOverlap "UseSameNameOnTmp"] { regsub ".tfa$" $FichierTronconTFA "" FichierTronconGSC set FichierTronconGSC "$FichierTronconGSC.gsc" GenScan $FichierTronconTFA $FichierTronconGSC $TailleTroncon $TailleOverlap lappend LesTronconsGSC $FichierTronconGSC } ReassembleLesTronconsGenscan $LesTronconsGSC $TailleTroncon $FichierGSC } if { ! [file exists $FichierGSC]} { if {$Previens} { Espionne "GenScan didn't work. See $FichierTFA" return "" } set GSG "" } set GSC [ContenuDuFichier $FichierGSC] if {$Previens && ! [regexp -nocase {[a-z]} $GSC]} { FaireLire "Genscan produced an empty output $FichierGSC\nand the following error message : \n$Message" } if {$CleanTFA} { File delete -force $FichierTFA } if {$RetourFichierGSC} { return $FichierGSC } File delete -force $FichierGSC return $GSC } proc GenScanEnStock {Access {GSC ""}} { global RepertoireDuGenome set RetourFileNamePlease 0 if {[regexp -nocase "^FileNamePlease" $GSC]} { set RetourFileNamePlease 1 set GSC "" } set Access [AccessDuContigDuFragment $Access] regsub {\:} $Access "_" Access set Access [string toupper $Access] set Stock "[RepertoireDuGenome]/stockgenscan" while { ! [file exists $Stock]} { if {[OuiOuNon "$Stock doesn't exist.\nDo I link to an existing directory ?"]} { set Ancien [tk_chooseDirectory -mustexist 1 -initialdir "[RepertoireDuGenome]/.."] if {$Ancien==""} { continue } exec ln -s $Ancien $Stock continue } if {[OuiOuNon "$Stock doesn't exist.\nDo I create directory ?"]} { File mkdir $Stock continue } } set Fichier "$Stock/$Access" if {$GSC==""} { if {[file exists $Fichier]} { if {$RetourFileNamePlease} { return $Fichier } else { return [ContenuDuFichier $Fichier] } return "" } } else { if { ! [regexp -nocase "^GENSCAN" $GSC] && ! [OuiOuNon "This text :\n [string range $GSC 0 100]\n...\n doesn't look like a GenScan text.\n Are You sure to want to store it in $Fichier ?" 0]} { return "" } return [Sauve $GSC dans $Fichier] } } proc GenScanEnStockPourTous {{Contig ""}} { global RepertoireDuGenome if {$Contig==""} { set Liste [glob "$RepertoireDuGenome/stockcontigs/*"] } else { set Liste [list "$RepertoireDuGenome/stockcontigs/$Contig"] } foreach FichierTFA $Liste { set Contig [file tail $FichierTFA] set FichierGSC "$RepertoireDuGenome/stockgenscan/$Contig" if {[file exists $FichierGSC]} { continue } Espionne [GenScan $FichierTFA $FichierGSC] } } proc GenScanExec {FichierTFA FichierOUT} { ### Execution du programme GenScan sur la sequence d'un fichier TFA ### if {![file exists $FichierTFA]} { return } catch {exec genscan "/biolo/genscan/HumanIso.smat" $FichierTFA > $FichierOUT} Message return } proc GenVrpFromData {laseq} { global Vrp VrpC set seq [string map [list . ""] $laseq] set xprev 0.0 ; set yprev 0.0 set cmx 0.0 ; set cmy 0.0 set minX 99999. ; set minY 99999. set maxX -99999. ; set maxY -99999. set Vrp(seqgen) $laseq set Vrp(seqAA1) $seq set Vrp(seqSS) {} set Vrp(SS) {} set Vrp(AA1) [split $seq ""] set newX {} ; set newY {} set Vrp(Sz) [llength $Vrp(AA1)] set Vrp(Nb) {} for {set i 0} {$i < $Vrp(Sz)} {incr i} { set aa [lindex $Vrp(AA1) $i] set hx $VrpC(HydX,$aa) set hy $VrpC(HydY,$aa) set x [expr {$Vrp(ScaleOrig)*$hx + $xprev}] set y [expr {$Vrp(ScaleOrig)*$hy + $yprev}] lappend newX $x lappend newY $y lappend Vrp(Nb) [expr {$i + 1}] set xprev $x set yprev $y set cmx [expr {$cmx + $x}] set cmy [expr {$cmy + $y}] } set minX [expr min([join $newX ,])] set minY [expr min([join $newY ,])] set maxX [expr max([join $newX ,])] set maxY [expr max([join $newY ,])] set Vrp(X) $newX set Vrp(Y) $newY set Vrp(CmX) [expr {$cmx / ($Vrp(Sz)+1)}] set Vrp(CmY) [expr {$cmy / ($Vrp(Sz)+1)}] set Vrp(MinX) $minX set Vrp(MinY) $minY set Vrp(MaxX) $maxX set Vrp(MaxY) $maxY set Vrp(SzX) [expr {($Vrp(MaxX) - $Vrp(MinX))/2}] set Vrp(SzY) [expr {($Vrp(MaxY) - $Vrp(MinY))/2}] return } proc GeneEtendu {Nom {Quoi ""}} { global GeneEtendu global RepertoireDuGenome Wup "Quoi can be Old, Color, Signification" if {$Quoi==""} { set Quoi "Ancien" } if {[info exists GeneEtendu($Nom,$Quoi)]} { return [set GeneEtendu($Nom,$Quoi)] } if {[info exists GeneEtendu("EstCharge",$Quoi)]} { return [set GeneEtendu("EstCharge",$Quoi)] } set Fichier "$RepertoireDuGenome/fiches/genesetendus.diff" if { ! [file exists $Fichier]} { set GeneEtendu("EstCharge",Old) "NoFile" set GeneEtendu("EstCharge",Color) "white" set GeneEtendu("EstCharge",Signification) "NoFile" set GeneEtendu(LaListeMerci,Old) "NoFile" set GeneEtendu(LaListeMerci,Color) "white" set GeneEtendu(LaListeMerci,Signification) "NoFile" return [GeneEtendu $Nom $Quoi] } foreach {Old New} [LesLignesDuFichier $Fichier] { scan $Old "%s" NomLu regsub -nocase {[a-z]*} $NomLu [PreFixe] NomLu set GeneEtendu($NomLu,Old) $Old set GeneEtendu($NomLu,Color) "red" set GeneEtendu($NomLu,Signification) "GeneWasExtended" lappend GeneEtendu(LaListeMerci,Old) $Old } set GeneEtendu("EstCharge",Old) "NoExtension" set GeneEtendu("EstCharge",Color) "green" set GeneEtendu("EstCharge",Signification) "NoExtension" set GeneEtendu(LaListeMerci,Color) [list "green" "red" "white"] set GeneEtendu(LaListeMerci,Signification) [list "NoExtension" "GeneWasExtended" "NoFile"] return [GeneEtendu $Nom $Quoi] } proc GeneIdWithGoDict {{Bdd ""}} { } proc GeneIdentityCard {Nom} { set NomOrigine $Nom if { ! [EstUnPAB $Nom]} { set LesIds [GscopeIdsOfGeneName $Nom "WithSynonyms"] set Nom [lindex $LesIds 0] } if { ! [EstUnPAB $Nom]} { if {[PourWscope]} { return [Html_DuTexteTelQuel "Sorry, I didn't find $NomOrigine"] } return "" } set Gn [ExtraitInfo $Nom "ValiGN"] set GnProt [ExtraitInfo $Nom "ValiGNProt"] set Alias [RecupereSynonyms $Nom] set Des [ExtraitInfo $Nom "ValiDE"] set DesProt [ExtraitInfo $Nom "ValiDEProt"] set DesUcsc [ExtraitInfo $Nom "ValiDEUcsc"] set AccARN [AccessEvi $Nom] set IdAccProt [ExtraitInfo $Nom "IdAccProt"] set LesProt [split $IdAccProt " "] set AccProt [lindex $LesProt 1] set Status [ExtraitInfo $Nom "Status"] set RetChip [ExtraitInfo $Nom "RetChip"] set Homologene [ExtraitInfo $Nom "HomologeneId"] set LocUcsc [ExtraitInfo $Nom "LocUcscFrom200602"] set LocCourt [lindex [split $LocUcsc " "] 0] set RetinaEst [ExtraitInfo $Nom "TissueType"] set ProbeSet [ExtraitInfo $Nom "ProbeSetId"] set ADNc [ExtraitInfo $Nom "BanqueADNc"] set IdMgi [ExtraitInfo $Nom "MGI"] set Pathway [ExtraitInfo $Nom "Pathways"] set FileMagos "[RepertoireDuGenome]/fiches/MagosLesRetinalFateHuman" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set LesGnEtAlias [split $Alias ","] lappend LesGnEtAlias $Gn set GnEtAlias [string trim [join [lsort -unique $LesGnEtAlias] ","] ","] if {$GnEtAlias==""} { set GnEtAlias "NoGeneNameNoAliasFound" } set RnaExpressionProfiles "http://www.tigem.it/RPexp/gene_data.php?gene_symbol=[string toupper $Gn]" set ImAnnoReference "[GenoretUrl]/Project/phrame.php?action=imannoShowAllConceptAnnot&cadre=1&organ=1&names=$GnEtAlias" set EurExpressReference "http://www.eurexpress.org/ee/databases/tdbsearch?mode=search&page=&searchField=All&searchValue=$Gn&Submit=Go" InterrogeGeneOntology unset set LesComponent {}; set LesFunction {}; set LesProcess {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [InterrogeGeneOntology $FichierGO GO $GO Type] set DefGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] set IdDefGO "$GO:$DefGO" if {[regexp {component} $Type]} {lappend LesComponent $IdDefGO} if {[regexp {function} $Type]} {lappend LesFunction $IdDefGO} if {[regexp {process} $Type]} {lappend LesProcess $IdDefGO} } set LesComponent [ListeSansDoublon $LesComponent] set LesFunction [ListeSansDoublon $LesFunction] set LesProcess [ListeSansDoublon $LesProcess] set comp [join $LesComponent ","] set func [join $LesFunction ","] set proce [join $LesProcess ","] #set Repertoire "[RepertoireDuGenome]/GeneIdentityCard" #if {![file exists $Repertoire]} {File mkdir $Repertoire} #set Fichier "$Repertoire/$Nom.html" set trouvehom 0 foreach Ligne [LesLignesDuFichier $FileMagos] { set LesElmts [split $Ligne "\t"] set NomEvi [lindex $LesElmts 1] set HumanProt [lindex $LesElmts 2] if {$Nom==$NomEvi} { set trouvehom 1 set HumanProt [lindex $LesElmts 2] break } } if {!$trouvehom} {set HumanProt ""} # set LienProteomic [GenoretProteomicsLinks $Nom All] #set LienProteomic [join $LienProteomic "\n"] #if {$LienProteomic==""} {set LienProteomic "proteomic data not yet established"} set Titre "Gene Identity Card for $Nom" Html_ZeroToBody $Titre Html_Append "

Gene Identity Card: $Nom - $Gn

" Html_Append "
" Html_Append "" Html_Append [H_Balise [H_Bold [H_Center "General Information"]] H2] Html_Append "" Html_Append "
"
    Html_Append [MiseEnLigne Name                    : "$Nom" "b"]

    Html_Append [MiseEnLigne "mRNA Gene Name"        : $Gn "b"]
    Html_Append [MiseEnLigne "Protein Gene Name"     : $GnProt]
    Html_Append [MiseEnLigne "Aliases Gene Name"     : $Alias]
    Html_Append [MiseEnLigne] 
    Html_Append [MiseEnLigne "mRNA Description"      : $Des]
    Html_Append [MiseEnLigne "Ucsc Description"      : $DesProt]
    Html_Append [MiseEnLigne "Protein Description"   : $DesUcsc]
    Html_Append [MiseEnLigne] 
    Html_Append [MiseEnLigne "mRNA Accession Number" :  "$AccARN"]
    Html_Append [MiseEnLigne  "Prot Accession Number" :  "$AccProt"]
    Html_Append [MiseEnLigne] 
    Html_Append [MiseEnLigne  "Status" : $Status]
    Html_Append [MiseEnLigne  "RetChip" : $RetChip] 
    Html_Append 
Html_Append "" Html_Append [H_Balise [H_Bold [H_Center "External Links"]] H2] Html_Append "" Html_Append "
"
    Html_Append [MiseEnLigne "Localisation" :  "$LocUcsc"]
    Html_Append [MiseEnLigne "Homologene" :  "$Homologene"]
    Html_Append [MiseEnLigne "MGI" :  "$IdMgi"]
    Html_Append [MiseEnLigne "GeneCards" :  "$Gn"]
    Html_Append [MiseEnLigne "UCSC" :  "$Gn"]
    Html_Append "
" Html_Append "" Html_Append [H_Balise [H_Bold [H_Center "Internal Data"]] H2] Html_Append "" Html_Append "
"
    Html_Append "Gene Ontology with GoAnno:"
    Html_Append [MiseEnLigne "component" : $comp "" 4]
    Html_Append [MiseEnLigne "function" : $func "" 4]
    Html_Append [MiseEnLigne "process" : $proce "" 4]
    Html_Append "
" Html_Append "
"

    Html_Append "Expression Data:"
    Html_Append [MiseEnLigne "Transcriptomic" :  "$ProbeSet  See all radars  Create Radar for all experiments"  "" 4]
    Html_Append [MiseEnLigne "EST" :  "$RetinaEst" "" 4]
    Html_Append [MiseEnLigne "cDNA" :  "$ADNc" "" 4]
    Html_Append [MiseEnLigne "ISH Embryo 14.5" :  "ImAnno" "" 4]
    Html_Append [MiseEnLigne "EurExpress" :  "EurExpress" "" 4]
    Html_Append [MiseEnLigne "RNA profile" :  "Retinis Pigmentosa Genes Expression Atlas Database" "" 4]

    set LesRef [GenoretProteomicsLinks $Nom Ref]

    if {$LesRef=={}} {
	Html_Append [MiseEnLigne "Proteomic" : "proteomic data not yet established" "" 4]
    } else {
	set Clef "Proteomic"
	foreach Ref $LesRef {
	    set LienProteomic "$Ref [join [GenoretProteomicsLinks $Nom$Ref Columns] " / "]"
	    Html_Append [MiseEnLigne $Clef : $LienProteomic "" 4]
	    regsub -all {.} $Clef " " Clef
	}
    }
    Html_Append "
" Html_Append "
"
    Html_Append [MiseEnLigne "Pathways" : $Pathway]
    Html_Append [MiseEnLigne "DevStage" :  "DevStage"]
    Html_Append "
" Html_Append "
"
    Html_Append [MiseEnLigne "MACSIMS" :  "Html Jalview"]
    if {$HumanProt!=""} {
	Html_Append [MiseEnLigne "MAGOS with Human prot" :  "$HumanProt"]
    }    
    if {$HumanProt==""} {
	Html_Append [MiseEnLigne "MAGOS with Human prot" : "No corresponding human protein in MS2PH-db"]
    }
    set XpertComment [ExtraitInfo $Nom "XpertComment:"]
    regsub -all " / " $XpertComment "\n" XpertComment
    if {$XpertComment!=""} {
	foreach Ligne [split $XpertComment "\n"] {
	    Html_Append [MiseEnLigne "XpertComment" : "$Ligne"]
	}
    }
    Html_Append [MiseEnLigne "XpertComment" : "Add your comment"]    

    Html_Append "
" Html_BR Html_BR #Html_Append "" Html_BodyToEnd set Texte [Html_Get "ZeroIt"] if { ! [PourWscope]} { return [AfficheVariable [SansBalises $Texte] "" "GeneIdentityCard/$Nom"] } return $Texte } proc GeneIdentityCardAnnaick {Nom} { set Gn [ExtraitInfo $Nom "ValiGN"] set Des [ExtraitInfo $Nom "ValiDE"] set BAcc [ExtraitInfo $Nom "BAcc"] set AccARN [lindex [split $BAcc ":"] 1] set IdAccProt [ExtraitInfo $Nom "IdAccProt"] set LesProt [split $IdAccProt " "] set AccProt [lindex $LesProt 1] set Homologene [ExtraitInfo $Nom "HomologeneId"] set LocUcsc [ExtraitInfo $Nom "LocUcsc"] set LocCourt [lindex [split $LocUcsc " "] 0] set ProbeSet [ExtraitInfo $Nom "ProbeSetId"] set Interaction [ExtraitInfo $Nom "Interaction"] set FichierKegg "[RepertoireDuGenome]/fiches/Kegg" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" InterrogeGeneOntology unset set LesComponent {}; set LesFunction {}; set LesProcess {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [InterrogeGeneOntology $FichierGO GO $GO Type] set DefGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] set IdDefGO "$GO:$DefGO" if {[regexp {component} $Type]} {lappend LesComponent $IdDefGO} if {[regexp {function} $Type]} {lappend LesFunction $IdDefGO} if {[regexp {process} $Type]} {lappend LesProcess $IdDefGO} } set LesComponent [ListeSansDoublon $LesComponent] set LesFunction [ListeSansDoublon $LesFunction] set LesProcess [ListeSansDoublon $LesProcess] set comp [join $LesComponent ","] set func [join $LesFunction ","] set proce [join $LesProcess ","] #set Repertoire "[RepertoireDuGenome]/GeneIdentityCard" #if {![file exists $Repertoire]} {File mkdir $Repertoire} #set Fichier "$Repertoire/$Nom.html" set LesPath {} foreach NumeroPathway [InterrogeMesKEGG $Nom LesPathway] { set DefPathway [InterrogeMesKEGG Pathway $NumeroPathway Definition] set NumDefPath "$NumeroPathway: $DefPathway" lappend LesPath $NumDefPath } set Pathway [join $LesPath ","] set Titre "Gene Identity Card for $Nom" Html_ZeroToBody $Titre Html_Append "

Gene Identity Card: $Gn

" Html_BR #Html_Append [H_Color toto red] Html_Append "" Html_Append [H_Balise [H_Bold [H_Center "General Information"]] H2] Html_Append "" Html_Append "
"
    Html_Append [MiseEnLigne Name                    : "$Nom" "b"]

    Html_Append [MiseEnLigne "Gene Name"        : $Gn "b"]
    Html_Append [MiseEnLigne "Description"      : $Des]
    Html_Append [MiseEnLigne "mRNA Accession Number" :  "$AccARN"]
    Html_Append [MiseEnLigne  "Prot Accession Number" :  "$AccProt"]
    Html_Append 
Html_Append "" Html_Append [H_Balise [H_Bold [H_Center "External Links"]] H2] Html_Append "" Html_Append "
"
    Html_Append [MiseEnLigne "Localisation" :  "$LocUcsc"]
    Html_Append [MiseEnLigne "GeneCards" :  "$Gn"]
    Html_Append "
" Html_Append "" Html_Append [H_Balise [H_Bold [H_Center "Internal Data"]] H2] Html_Append "" Html_Append "
"
    Html_Append "Gene Ontology with GoAnno:"
    Html_Append [MiseEnLigne "component" : $comp "" 4]
    Html_Append [MiseEnLigne "function" : $func "" 4]
    Html_Append [MiseEnLigne "process" : $proce "" 4]
    Html_Append "
" Html_Append "
"
    Html_Append "EST:"
    Html_Append [MiseEnLigne "TissueType" :  "TissueType" "" 4]
    Html_Append [MiseEnLigne "DevStage" :  "DevStage" "" 4]
    Html_Append "
" Html_Append "
"
    Html_Append [MiseEnLigne "ProbesetId" : $ProbeSet]
    Html_Append "
" Html_Append "
"
    Html_Append [MiseEnLigne "Pathways" : $Pathway]
    Html_Append [MiseEnLigne "Interaction" : $Interaction]
    Html_Append "
" Html_Append "
"
    Html_Append [MiseEnLigne "MACSIMS" :  "Html Jalview"]
    Html_Append "
" Html_BR Html_BR #Html_Append "" Html_BodyToEnd return [Html_Get "ZeroIt"] } proc GeneNameDeLaListe {Fichier} { set LesAccessAliasDefinition {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z]} $Ligne]} {continue} scan $Ligne "%s" Access set LesLignesEMBL [LaSequenceDesBanques $Access "OnVeutEMBL"] set EMBL [join $LesLignesEMBL "\n"] set ChampsInteressants [ChampsInteressantsDansTexteEMBL $EMBL] set GN "" set DE "" set LaDE {} foreach Champ [split $ChampsInteressants "\n"] { if {[regexp "^GN " $Champ]} { set GN [VraiGNDeLaLigneGN $Champ] } if {[regexp "^DE " $Champ]} { regsub "^DE *" $Champ "" DE lappend LaDE $DE } } set DE [join $LaDE " "] Espionne "$Access $GN $DE" lappend LesAccessAliasDefinition "$Access $GN $DE" } Espionne [SauveLesLignes $LesAccessAliasDefinition dans "[HomeRipp]/MS2PH.txt"] } proc GeneOntology {Nom FichierGOXML {IPOouPPOouMSOouGPO GPO}} { if {![file exists $FichierGOXML]} {return} AskGOAnalyse unset set Query [AskGOAnalyse $FichierGOXML Query Name] if {$Query == ""} {return} set FileClust [AskGOAnalyse $FichierGOXML Fichier CLUST] set Cluster [InterrogeLesClustersDesMSF $FileClust Access $Query Cluster] set LeTexte {} foreach Type [AskGOAnalyse $FichierGOXML Methode $IPOouPPOouMSOouGPO LesTypes] { foreach GO [AskGOAnalyse $FichierGOXML Methode $IPOouPPOouMSOouGPO Type $Type LesGO] { set Def [AskGOAnalyse $FichierGOXML Type $Type GO $GO Definition] set LesAncetres [TousLesAncetresGO $Type $GO] lappend LeTexte [concat [list $Nom $Cluster $Nom $Type $GO $Def] $LesAncetres] } } return $LeTexte } proc GeneOntologyDeLAccess {AccessProt} { set AccessProt [string toupper $AccessProt] set LesGO [Access2GO $AccessProt] if {$LesGO == {}} {return [list [list $AccessProt "NoOntologyFound"]]} set LesOntologies {} foreach GO [EnterrerLesAncetresOntologiques $LesGO] { set Type [Onto $GO Type] set Definition [lindex [Onto $Type $GO LesDefinitions] 0] set LesAncetres [TousLesAncetresOntologiques $Type $GO] lappend LesOntologies [list $AccessProt "$Type" "$GO" "$Definition" "[join $LesAncetres "\t"]"] } return [lsort -index 0 $LesOntologies] } proc GeneQuid {args} { #rR AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAttention if {[Hostname]=="bob"} { return [ContenuDuFichier "http://lbgi.fr/wscoperr?GeneQuid&[join $args &]"] } set R [QuestionDeScience "GeneQuid" "ret [join $args { }]"] LogWscope $R return $R } proc GenemapKey {} { set Texte " 1 - Numbering system, in the format Chromosome.Map_Entry_Number 2 - Month entered 3 - Day entered 4 - Year entered 5 - Cytogenetic location 6 - Gene Symbols 7 - Gene Status 8 - Title 9 - Title, cont. 10 - MIM Number 11 - Method 12 - Comments 13 - Comments, cont. 14 - Disorders each disorder is followed by its MIM number, if different from that of the locus, and phenotype mapping method (see below. Allelic disorders are separated by a semi-colon. 15 - Disorders, cont. 16 - Disorders, cont. 17 - Mouse correlate 18 - Reference" return $Texte } proc GenenameDesAccess {Liste {GetWhat ""} {Database ""}} { if {$Database==""} { set Database "uniprot" } if {$GetWhat==""} { set GetWhat "ListOfGN" } set LesAG {} set LesGN {} if {[regexp {[ \,\;\n\t]} $Liste]} { regsub -all {[ \,\;\n\t]+} $Liste "," Liste set Liste [split [string trim $Liste ","] ","] } foreach Ligne $Liste { if { ! [regexp -nocase {[a-z]} $Ligne]} {continue} scan $Ligne "%s" Access set GN [BirdWeb $Database $Access "GN"] regsub {\;.*} $GN "" GN if {[regexp {=(.+)} $GN Match Name]} { set GN $Name } lappend LesAG $Access $GN lappend LesAeG "$Access=$GN" if {$GN!=""} { lappend LesGN $GN } } set R $LesAG if {[regexp -nocase "ListOfAeG" $GetWhat]} { set R $LesAeG } if {[regexp -nocase "ListOfGN" $GetWhat]} { set R $LesGN } if {[regexp -nocase "AsText" $GetWhat]} { return [join $R ","] } return $R } proc Generaliste {CanalClient} { #rR procedure par défaut qui discute en tant que serveur de socket set CloseCanal 0 #rR le while ne sert qu'à faire break puisqu'on fait return à chaque fois ... #rR j'ai dû bidouiller pour que le php recoive quelque chose ...il faut fermer le canal ... mais attention y a eu modif ... while {[gets $CanalClient Question] >= 0} { #Espionne "Question en entree =$Question=" if {[regexp "\n?FinDeMessage\n?$" $Question]} { regsub "\n?FinDeMessage\n?$" $Question "" Question set CloseCanal 1 if {$Question==""} { break } } # puts $CanalClient "Question=$Question=" # flush $CanalClient if {$Question=="CloseCanal"} { set CloseCanal 1 ; break } # set R [eval $Question] #Espionne "Vais faire eval de =$Question=" if {[catch {set R [eval $Question]} Message]} { Espionne "recu message $Message" puts $CanalClient $Message close $CanalClient return $Message } #Espionne "Vais envoyer =$R=" puts $CanalClient $R flush $CanalClient if {$CloseCanal} { close $CanalClient } return $R } if {$CloseCanal || [eof $CanalClient]} { # puts $CanalClient "Salut" # flush $CanalClient close $CanalClient } return "$CanalClient is closed" } proc GenereCases {LissageOK TailleSeq} { global GpesColonnes TailleFenetre NbPos global sommes_col LesCases TabCol GpeCases #attribue un numero de gpe aux colonnes (tableau TabCol qui commence a 1) if {!$LissageOK} { set nListe 0 foreach Liste $GpesColonnes { foreach i $Liste { set TabCol($i) $nListe } incr nListe } } else { for {set i 1} {$i<=$NbPos} {incr i} { set Numero [lsearch -regexp $GpesColonnes $i] for {set j 1} {$j<=$TailleFenetre} {incr j} { set TabCol([expr ($i-1)*$TailleFenetre+$j]) $Numero } } } #creation de la liste de cases #les colonnes appartenant a un meme groupe et contigues forment une case set LesCases [list] set GpeCases [list] set i 1 while {$i<=$TailleSeq} { set ListeIntermed [list $i] while {$i<$TailleSeq && ([set TabCol($i)]==[set TabCol([expr $i+1])])} { incr i lappend ListeIntermed $i } lappend GpeCases [set TabCol($i)] lappend LesCases $ListeIntermed incr i } } proc GenereFragments {{Comment ""} {Fichier ""} {PAB ""} {FichierTFAs ""}} { while {$Comment==""} { if {[OuiOuNon "Do You want to used an already created fragment file ?"]} { set Fichier [ButineArborescence "All" $Fichier] if {$Fichier!=""} { set Comment "FromExisting" break } } if {[OuiOuNon "Do You have a file with predefined fragments ?\n ... containing lines as follow : \nPGS048 2 234\nPGS048 56 234\nPGS050 1 565"]} { set Comment "Predefinis" break } if {[OuiOuNon "Do You have a file with limits for one sequence ?\n ... containing lines as follow : \n1\n24\n55\n777"]} { set Comment "AvecLimites" break } if {[OuiOuNon "Do You want to give the limits ?"]} { set Fichier "AskForLimits" set Comment "AvecLimites" break } if {[OuiOuNon "Do I cancel ?"]} { return "" } } set LeTFAs {} set LesFicN {} set LesFicP {} if {$Comment=="Predefinis"} { while {$Fichier==""} { FaireLire "Please browse for the file containing the fragment limits (PGS Start End(must be +1) Alias)." set Fichier [ButineArborescence "All" "."] if {$Fichier=="" && [OuiOuNon "Do I cancel ?"]} { return "" } } FaireLire "Please choose the directory to store the all isolate files (nuctfa and prottfa)" set Rep [tk_chooseDirectory -mustexist 1 -initialdir "."] set LesNomDuAlias {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z0-9]} $Ligne]} { continue } set Frag "" set Alias "" set AliasBis "" scan $Ligne "%s %s %s %s %s" PAB Debut Fin Alias AliasBis Espionne "PAB $PAB Debut $Debut Fin $Fin Alias $Alias AliasBis $AliasBis" if { ! [regexp {^b?[0-9]+$} $Debut]} { set Frag $Debut set Debut $Fin set Fin $Alias set Alias $AliasBis } if {$Alias==""} { set Alias [AliasPourClonage $PAB] } if {$Fin=="end"} { set FicN "[RepertoireDuGenome]/nuctfa/$PAB" set SeqN [QueLaSequenceDuFichierTFA $FicN] set L [string length $SeqN] set CodonEnd [string range $SeqN end-2 end] if {[CodonStopPossible $CodonEnd]} { set Fin [expr $L-3] } else { set Fin $L } set Fin [expr $Fin/3] } regexp {^([^_])+} $Alias NomDuAlias if { ! [info exists DejaVu($NomDuAlias)]} { lappend LesNomDuAlias $NomDuAlias } set DejaVu($NomDuAlias) 1 Espionne "$PAB $Frag $Debut $Fin $Alias" set LesSequencesNP [IsoleUnDomaine $PAB $Debut $Fin "RetournerSeqNucAndSeqPro"] ScanLaListe $LesSequencesNP SeqN SeqP set FicN "$Rep/$Alias-$Debut-$Fin.nuctfa" set FicP "$Rep/$Alias-$Debut-$Fin.prottfa" set EnteteN "$Alias-$Debut-$Fin [string length $SeqN] bases" set EnteteP "$Alias-$Debut-$Fin [string length $SeqP] AAs" set TfaN [SequenceFormatTFA $SeqN $EnteteN "nucbrut"] lappend LeTFAs $TfaN lappend LesFicN [Sauve $TfaN dans $FicN] if { ! [regexp "b" $Debut] && ! [regexp "b" $Fin] } { set TfaP [SequenceFormatTFA $SeqP $EnteteP "protbrut"] lappend LesFicP [Sauve $TfaP dans $FicP] } } } elseif {$Comment=="AvecLimites" || $Comment=="FromExisting"} { set LesFragments {} if {$Comment=="FromExisting"} { set LesFragments [LesLignesDuFichier $Fichier] } if {$LesFragments=={} } { if {$Fichier=="" && [OuiOuNon "can You browse for a file with limits ?"]} { set Fichier [ButineArborescence "All" "./"] } if {$Fichier=="" && [OuiOuNon "Do I cancel ?"]} { return "" } while {$PAB==""} { FaireLire "Please enter a [PreFixe] number" set PAB [Entre [PreFixe]] set FichierTfa "[RepertoireDuGenome]/nuctfa/$PAB" if {[file exists $FichierTfa]} { break } if {[OuiOuNon "$FichierTfa\doesn't exists.\nDo I cancel ?"]} { return "" } set PAB "" } if {$Fichier=="AskForLimits"} { set Bornes "" while {$Bornes==""} { set SeqN [QueLaSequenceDuFichierTFA $FichierTfa] set Start [string range $SeqN 0 2] set Stop [string range $SeqN end-2 end] set AvantStop [string range $SeqN end-2 end] set Commentaire "($Start ... $Stop [AAduCodon $Start] [AAduCodon $Stop]) Please give the end position + 1" set D 1 set F [string length $SeqN] set Dp [expr ($D-1)/3+1] set Fp [expr ($F-3)/3+1] set Bornes [Entre "$Dp $Fp $Commentaire"] if {$Bornes=="" && [OuiOuNon "Do I cancel ?"]} { return "" } } regsub { *\(.*$} $Bornes "" Bornes Espionne $Bornes while {[regexp " " $Bornes]} { regsub -all " " $Bornes " " Bornes } set LesBornesDesFragments [split [string trim $Bornes] " "] } else { set LesBornesDesFragments [LesLignesDuFichier $Fichier] } set LesFragments {} while {$LesFragments=={}} { set LesFragments [CombineLesFragments $PAB $LesBornesDesFragments] if {$LesFragments=={} && [OuiOuNon "Do I cancel GenereFragments ? "]} { return "" } } if {[OuiOuNon "Do I save these fragments in a file ?"]} { set FicFrags [FichierPourSaveAs "./[Alias $PAB].frag"] if {$FicFrags==""} { return "" } SauveLesLignes $LesFragments dans $FicFrags } } FaireLire "Please choose the directory to store the isolate files (nuctfa and prottfa)" set Rep [tk_chooseDirectory -mustexist 1 -initialdir "."] set LesNomDuAlias {} foreach Fragment $LesFragments { scan $Fragment "%s %s %s %s" PAB Frag Debut Fin Espionne "$PAB $Frag $Debut $Fin" set Alias [AliasPourClonage $PAB] set NomDuAlias "" regexp {^([^_])+} $Alias NomDuAlias if { ! [info exists DejaVu($NomDuAlias)]} { lappend LesNomDuAlias $NomDuAlias } set DejaVu($NomDuAlias) 1 set LesSequencesNP [IsoleUnDomaine $PAB $Debut $Fin "RetournerSeqNucAndSeqPro"] ScanLaListe $LesSequencesNP SeqN SeqP Espionne "SeqN $PAB $Frag $Debut $Fin $SeqN" Espionne "SeqP $PAB $Frag $Debut $Fin $SeqP" set FicN "$Rep/$Alias-$Debut-$Fin.nuctfa" set FicP "$Rep/$Alias-$Debut-$Fin.prottfa" set EnteteN "$Alias-$Debut-$Fin [string length $SeqN] bases" set EnteteP "$Alias-$Debut-$Fin [string length $SeqP] AAs" set TfaN [SequenceFormatTFA $SeqN $EnteteN "nucbrut"] lappend LeTFAs $TfaN lappend LesFicN [Sauve $TfaN dans $FicN] if { ! [regexp "b" $Debut] && ! [regexp "b" $Fin] } { set TfaP [SequenceFormatTFA $SeqP $EnteteP "protbrut"] lappend LesFicP [Sauve $TfaP dans $FicP] } } } set NomConstruction [join $LesNomDuAlias "-"] while {$FichierTFAs==""} { FaireLire "Please give a name for the TFAs construction file" set FichierTFAs [FichierPourSaveAs "./$NomConstruction.tfa"] if {$FichierTFAs=="" && [OuiOuNon "Do I cancel GenereFragments ?"]} { return "" } } SauveLesLignes $LeTFAs dans $FichierTFAs return $FichierTFAs } proc GenereOligos {{Construction ""} {SavSapFavFap ""}} { Wup "Construction is the name of a TFAs file" Wup "SavSapFavFap a list of LesAvants LesApres FichierDesAvants FichierDesApres" while {$SavSapFavFap==""} { set SavSapFavFap [ChoisisFichierSignauxEtSignaux] if {$SavSapFavFap=={} && [OuiOuNon "Do You want an empty list of signals ?"]} { break } if {$SavSapFavFap=={} && [OuiOuNon "Do I cancel GenereOligos ?"]} { return {} } } if {$Construction==""} { FaireLire "Please choose only ONE construction file" set Construction [lindex [LesFichiersDeType "Construction"] 0] if {$Construction=="" && [OuiOuNon "Do I cancel GenereOligos ?"]} { return {} } } set Sortie [OligosEtProduitsPCR $Construction $SavSapFavFap] return $Sortie } proc GenereTabSeq {LesNoms aTabSeq} { global GpesSequences upvar $aTabSeq TabSeq #Attribue un numero de groupes aux sequences (TabSeq($seq)) #Constitue une liste (NbSeqGpe) avec le nombre de seq par groupe foreach seq $LesNoms { set TabSeq($seq) [lsearch -regexp $GpesSequences $seq] } } proc GenererMatrice {LongueurDesSequences} { # Générateur de matrice de poids é partir d'une liste de séquences set Carac "" set SequencesTFA [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/HMM/XP" "r"] set FichierTransfac "[Fiches]/Profile/Transfac.lib" if { [file exists $FichierTransfac] } { file delete $FichierTransfac } set I 1 set NbLignes 0 set Un 0 #AppendAuFichier $FichierTransfac "A T C G" AppendAuFichier $FichierTransfac "AC STAF" AppendAuFichier $FichierTransfac "ID STAF" AppendAuFichier $FichierTransfac "NA STAF" AppendAuFichier $FichierTransfac "MATR_LENGTH $LongueurDesSequences" AppendAuFichier $FichierTransfac "CORE_START 3" AppendAuFichier $FichierTransfac "CORE_LENGTH 3xé" AppendAuFichier $FichierTransfac "MAXIMAL 7234.2041" AppendAuFichier $FichierTransfac "MINIMAL 0.0000" AppendAuFichier $FichierTransfac "THRESHOLD 0.6624" AppendAuFichier $FichierTransfac "WEIGHTS" array unset Tableau foreach base [list "A" "C" "G" "T"] { for {set I 1} {$I<=$LongueurDesSequences} {incr I} { set Tableau($I,$base) 0 } } while { [gets $SequencesTFA Ligne] >=0 } { for {set I 1} {$I<=$LongueurDesSequences} {incr I} { set Carac [string index $Ligne [expr $I - 1] ] incr Tableau($I,$Carac) } } for {set I 1} {$I<=$LongueurDesSequences} {incr I} { set ligne {} # set ConsensusPos [string index $Consensus [expr $I - 1] ] foreach base [list "A" "C" "G" "T"] { lappend ligne "$base:$Tableau($I,$base)" } AppendAuFichier $FichierTransfac "$I $ligne" } AppendAuFichier $FichierTransfac "//" } proc GenesDansLesSegmentsOligoAmplifOuDelet {LimInf LimSup {LesPos ""} {LesNoms ""}} { # liste les genes Refseq et Genbank selon le fichier UCSC refLink.txt (MaJ Jan 2007) # et elmimine la redondance # Liste des cas set LesCas {Oligo806 Oligo807 Oligo809 Oligo810 Oligo811 Oligo812 Oligo814 Oligo815 Oligo816 Oligo817 Oligo818 Oligo819 Oligo820 Oligo821 Oligo822 Oligo823 Oligo825 Oligo826 Oligo827} Espionne [llength $LesCas] # Liste chromosomes set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} ################## UCSC ################### # Remarque : UCSC regroupe des access Genbank et des access Refseq # Version Genome Humain : NCBI Build 36 # Version UCSC : April 2006 pour knownGene.txt (position des genes) # Version UCSC : Jan 2007 pour refLink.txt (lien entre NM et NP) # ftp://hgdownload.cse.ucsc.edu/goldenPath/currentGenomes/Homo_sapiens/database ########################################### # Position des genes set FichierLocGenes "[RepertoireDuGenome]/PRIMA_Affichage/HumanAllGenesUCSC" if {![file exists $FichierLocGenes] || $FichierLocGenes == ""} {return ""} foreach Chromosome $ListeChro { ChargeFichierLoc TabG $FichierLocGenes $Chromosome $LesNoms if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabG($FichierLocGenes,Chromosome,$Chromosome,$Nom)] { set DebutGene [lindex $LInfo 1] set FinGene [lindex $LInfo 2] set Deb($Chromosome,$Nom) $DebutGene set Fin($Chromosome,$Nom) $FinGene } } } } # pour chaque fichier CGH Segmente foreach NomFichier $LesCas { set NomFichierSeg "$NomFichier\.seg" set FichierSeg "[RepertoireDuGenome]/PRIMA_CGH_SEG/$NomFichierSeg" # Pour chaque chromosome foreach Chromosome $ListeChro { set x [InterrogeFichierSEG $FichierSeg "unset"] ChargeFichierSEG TabS $FichierSeg $Chromosome $LesPos if {[info exists TabS($FichierSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabS($FichierSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabS($FichierSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] set Val [format "%.2f" [expr $Val*1.0]] #($Val>0 && $Val>=$LimSup) || ($Val<0 && $Val<=$LimInf) if {($Val>0 && $Val>=$LimSup) || ($Val<0 && $Val<=$LimInf)} { # Quels genes? if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { # Pour chaque Gene foreach Name [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { # Soit le gene est : |-------------| # 1 : a cheval sur le debut du segment ***** # 2 : a cheval sur la fin du segment | ***** # 3 : au sein du segment | ***** | # 4 : par dela le segment ******************* # remarque: le cas 4 n'est pas rencontre ds les tests faits if {$PosInf>=$Deb($Chromosome,$Name) && $PosInf<=$Fin($Chromosome,$Name) || $PosSup>=$Deb($Chromosome,$Name) && $PosSup<=$Fin($Chromosome,$Name) || $PosInf<=$Deb($Chromosome,$Name) && $PosSup>=$Fin($Chromosome,$Name) || $PosInf>=$Deb($Chromosome,$Name) && $PosSup<=$Fin($Chromosome,$Name)} { lappend LesGenes $Name } } } } } } } } } Espionne [llength $LesGenes] set LesGenesU [lsort -unique $LesGenes] Espionne [llength $LesGenesU] #return $LesGenes set LesGbSansRef "" set LesGenesUniques "" foreach Gene $LesGenesU { if {[regexp "NM" $Gene]} { if {![info exists Vu($Gene)]} {set Vu($Gene) 1; lappend LesGenesUniques $Gene} } else { #Espionne $Gene set Commande "getz \"\\\[genbankfull-acc:$Gene\\\]\\\>\\\[refseq-org:Homo sapiens\\\]\" \-vf acc" set GetzOut [eval exec $Commande] if {$GetzOut==""} { lappend LesGbSansRef $Gene #Espionne "no seq for $Gene" } else { set LesElts [split $GetzOut "\t"] foreach Elt $LesElts { if {[regexp "\:" $Elt]} { continue } elseif {![info exists Vu($Elt)]} { set Vu($Elt) 1 lappend LesGenesUniques $Elt } } } } } SauveLesLignes $LesGbSansRef dans "/genomics/link/Procure/LesGbSansRef" SauveLesLignes $LesGenesUniques dans "/genomics/link/Procure/LesGenesCGHOligoSEG06_uniq" return } proc GenesFromOmimHitsFromFile {{File ""} {WithinGeneList ""}} { set WithAllGenes 1 if {$WithinGeneList!=""} { set WithAllGenes 0 if {[llength $WithinGeneList]==1 && [file exists $WithinGeneList]} { set WithinGeneList [LesLignesDuFichier $WithinGeneList] } foreach Ligne $WithinGeneList { regsub -all {[ \,/]+} $Ligne " " Ligne foreach Gn [split [string trim $Ligne] " "] { set GN [string toupper $Gn] set WithGene($GN) 1 lappend LesGN $GN } } set LesGN [lsort -unique $LesGN] FaireLire "il y a [llength $LesGN] genes differents dans $WithinGeneList" } set LaSortie {} foreach O [OmimHitsFromFile $File "ListOf" "O"] { foreach Gn [MorbidMap $O "Gn"] { lappend LesGn $Gn lappend LesOduGn($Gn) $O } } set LesGn [lsort -unique $LesGn] foreach Gn $LesGn { if { ! $WithAllGenes } { set GN [string toupper $Gn] if { ! [info exists WithGene($GN)]} { continue } } set LesOduGn($Gn) [lsort -unique $LesOduGn($Gn)] foreach O $LesOduGn($Gn) { set Dis [join [MorbidMap $O "Di"] " /// "] lappend LaSortie "$Gn\t$O\t$Dis" } } return $LaSortie } proc GenesFromZone {Debut Fin Org Chr {Strand ""} {FromWhere ""}} { Wup "Attention UCSC compte a partir de 0" if {$FromWhere==""} { set FromWhere "refGene" } set org [string tolower $Org] set fromwhere [string tolower $FromWhere] set Where "chrom='$Chr' and txstart>=$Debut and txend<=$Fin" if {$Strand!=""} { if {$Strand=="F"} { set Strand "+" } if {$Strand=="R"} { set Strand "-" } append Where " and strand='$Strand'" } set Query "select NAME, TXSTART, TXEND, STRAND from ucsc$org.$fromwhere where $Where order by TXSTART" set Racine [Bird $Query "documentelement"] set LesLignes {} foreach Noeud [$Racine selectNodes "resultset"] { set TxStart [$Noeud selectNodes "string(TXSTART)"] set TxEnd [$Noeud selectNodes "string(TXEND)"] set Strand [$Noeud selectNodes "string(STRAND)"] set Name [$Noeud selectNodes "string(NAME)"] set Ligne "$TxStart $TxEnd $Strand $Name" lappend LesLignes $Ligne } return $LesLignes } proc GenesJamaisExprimes {} { set nomtotal 0; set nomssps 0; set nomsspsMG430 0 set nomattention 0; set nommerdique 0 set nomfalse 0; set nomtrue 0 set nomplusdefalse 0; set nomplusdetrue 0 set nomquoi 0 set LesLignes [NomLigne ListeDes Lignes] set nblignes 0 set unnom 0; set plsnom 0 foreach Ligne $LesLignes { incr nblignes set ListeDesNoms {}; set BonneListeDesNoms {} set TousLesNoms [NomLigne $Ligne Noms] set ListeDesNoms [split $TousLesNoms " "] set NbDeNomPrUneLigne [llength $ListeDesNoms] if {[llength $ListeDesNoms]==1} { incr unnom set BonneListeDesNoms $ListeDesNoms } if {[llength $ListeDesNoms]>1} { incr plsnom set BonneListeDesNoms [split [RangeMoi get EviOf $Ligne] " "] } Espionne "" Espionne "Ligne $Ligne" foreach Nom $BonneListeDesNoms { Espionne "" set pssscall 0; set LesCallcgrma {} incr nomtotal set false 0; set true 0 set Gn [ExtraitInfo $Nom "ValiGN"] set ProbesSet [ExtraitInfo $Nom "ProbeSetId"] if {$ProbesSet=="no value" || $ProbesSet==""} { incr nomssps Espionne "$Nom n'a pas probeset" continue } set LesProbesSet [split $ProbesSet ","] Espionne "$Nom" foreach Ps $LesProbesSet { set Ligne {} set Callcgrma [TrouveLesJamaisExprimes $Ps OuiNon] Espionne "$Ps $Callcgrma" lappend LesCallcgrma $Callcgrma #EspionneL "1LesCallcgrma $LesCallcgrma" if {$Callcgrma=="FALSE"} {incr false} if {$Callcgrma=="TRUE"} {incr true} } Espionne "nbfalse= $false" Espionne "nbtrue = $true" set LesCallcgrma [ListeSsElmtVide $LesCallcgrma] #EspionneL "LesCallcgrma $LesCallcgrma" if {$true=="0" && $false=="0" && $LesCallcgrma== {} } { incr nomsspsMG430 Espionne "$Nom pas probeset MG430" } elseif {$true=="0" && $false=="0"} { incr nomattention Espionne "$Nom est attention" } elseif {$true==$false} { incr nommerdique Espionne "$Nom est merdique" } elseif {$true=="0"} { incr nomfalse Espionne "$Nom est false" } elseif {$false=="0"} { incr nomtrue Espionne "$Nom est true" } elseif {$true<$false} { set nbcallF [expr $true + $false] set pourcentagedefaulse [expr ($false*100)/$nbcallF] lappend Lespourcentagedefaulse $pourcentagedefaulse incr nomplusdefalse Espionne "$Nom est plus false $pourcentagedefaulse" } elseif {$true>$false} { set nbcallT [expr $true + $false] set pourcentagedetrue [expr ($true*100)/$nbcallT] lappend Lespourcentagedetrue $pourcentagedetrue incr nomplusdetrue Espionne "$Nom est plus true $pourcentagedetrue" } else { incr nomquoi Espionne "$Nom est quoi" } } } set Lespourcentagedefaulse [ListeSansDoublon $Lespourcentagedefaulse] set Lespourcentagedetrue [ListeSansDoublon $Lespourcentagedetrue] Espionne "nblignes $nblignes" Espionne "nomtotal $nomtotal" Espionne "nomssps $nomssps" Espionne "nomsspsMG430 $nomsspsMG430" Espionne "nomattention $nomattention" Espionne "nommerdique $nommerdique" Espionne "nomfalse $nomfalse" Espionne "nomtrue $nomtrue" Espionne "nomplusdefalse $nomplusdefalse" Espionne "nomplusdetrue $nomplusdetrue" Espionne "nomquoi $nomquoi" Espionne "Lespourcentagedefaulse $Lespourcentagedefaulse" Espionne "Lespourcentagedetrue $Lespourcentagedetrue" } proc GenesSurPlamides {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s %s %s %s" FichPlasmide SeqPrimer NomDuPrimer NouCter set Sens "Direct" set PosN [PositionDuPatternDansFichierTFA $SeqPrimer $FichPlasmide $Sens "NA" "Circulaire"] if {$PosNuc==-1} { set Sens "RaC" set PosN [PositionDuPatternDansFichierTFA $SeqPrimer $FichPlasmide $Sens "NA" "Circulaire"] } if {$PosNuc==-1} { FaireLire "I didn't find $SeqPrimer in $FichPlasmide" continue } Espionne "$Ligne $PosNuc $Sens" } exit } proc GenomeDu {Nom} { global RepertoireDuGenome global GenomeDu regsub -all {[0-9]} $Nom "" Prefixe if {[info exists GenomeDu($Prefixe)]} { return [set GenomeDu($Prefixe)] } if {[regexp "^TRNA|^ARN|^GLIMMER" $Nom]} { FaireLire "Desole. Je ne puis trouver le genome de $Nom." return "" } if {[info exists GenomeDu("EstCharge")]} { return "" } foreach FichierBornes [glob "/genomics/link/*/fiches/bornesdespabs"] { set NomGscope [file tail [file dirname [file dirname $FichierBornes]]] if {[regexp -nocase {^Old|Old$|^Hidden|Hidden$} $NomGscope]} { continue } scan [PremiereLigneDuFichier $FichierBornes] "%s" NomLu regsub -all {[0-9]} $NomLu "" PrefixeLu regsub "/fiches/bornesdespabs" $FichierBornes "" Genome lappend GenomeDu($PrefixeLu) $Genome } set GenomeDu("EstCharge") "EstCharge" return [GenomeDu $Nom] } proc Genomics {} { global Genomics if {[info exists Genomics]} { return $Genomics } set Genomics "/genomics" if {[file exists $Genomics]} { return $Genomics } global RepertoireDuGenome if { [info exists RepertoireDuGenome]} { set Genomics [file dirname $RepertoireDuGenome] if { ! [regexp {/g[0-9][0-9]?$} $Genomics] && [file exists $Genomics]} { return $Genomics } } set Genomics [tk_chooseDirectory -mustexist 1 -title "Please browse for the genomics directory which should contain your Gscope project"] return $Genomics } proc GenomicsFree {{Qui ""}} { set LesDisques [GenomicsPossibles] lappend LesDisques "/" foreach GG $LesDisques { if {[FileAbsent $GG]} { continue } set G [file tail $GG] if {$G==""} { set G "/" } if {$GG!="/" && ! [regexp {^g[0-9]+$} $G]} {continue } set df [exec df -P -k $GG] set LesMots [LesMotsDeLaLigne $df] set LesBons [lrange $LesMots end-4 end] set g "/" ScanLaListe $LesBons T U F g set FF [format "%5.1f" [expr (1.0*$F)/1000000]] if {$Qui==$G} { return $FF } lappend LesFree "$GG $FF" } set Free [join $LesFree "\n"] if {[PourWscope]} { return "
$Free
" } if {$Qui=="GetText"} { return $Free } return $LesFree } proc GenomicsLinks {{DoIt ""}} { if {$DoIt==""} { set DoIt "Ask" } if {[string equal -nocase $DoIt "Ask"]} { set DoIt [OuiOuNon "Dans /genomics/link\nj'enleve les liens inexistants, je cree les manquants. \nSi tu n'es pas sûr, on fait d'abord un tour pour rien, je te repose la question à la fin.\n Je le fais pour de bon tout de suite ?" 0] } else { set DoIt [string equal -nocase $DoIt "DoIt"] } cd /genomics set LesLinks [glob -type link "/genomics/link/*"] set LesDelete {} set LesNouveaux {} set LesExistants {} if { ! $DoIt} { lappend LesNouveaux "cd /genomics/link" } foreach Link $LesLinks { if {[file type $Link]!="link"} { continue } set File [file readlink $Link] if {[file exists $File]} { lappend LesExistants $File; continue } Espionne "file delete $Link" if {$DoIt} { file delete $Link ; lappend LesDelete $Link } else { lappend LesDelete "rm $Link" } } cd /genomics/link set LesRepPossible {} LConcat LesRepPossible [glob -nocomplain -type d "/gstock/*"] LConcat LesRepPossible [glob -nocomplain -type d "/gstock/ProGscope/*/*"] LConcat LesRepPossible [glob -nocomplain -type d "/gstock/user/*/*"] foreach F $LesRepPossible { set Queue [file tail $F] if {[regexp {lost\+found} $Queue]} { continue } if {[regexp Projets_Manu $F]} { continue } #rR pour ne pas relinker les /genomics/g... if {[info exists DejaVu($Queue)]} { FaireLire "$F\n deja vu \n$DejaVu($Queue)" } set DejaVu($Queue) $F set Link "/genomics/link/$Queue" if {[file exists $Link]} { continue } Espionne "ln -sf $F" if {$DoIt} { exec ln -sf $F lappend LesNouveaux $Link lappend LesExistants $Link } else { lappend LesNouveaux "ln -sf $F" } } set Message "ToDo" AfficheListe $LesDelete "" "LesDelete $Message" AfficheListe $LesNouveaux "" "LesNouveaux $Message" AfficheListe $LesExistants "" "LesExistants" if { ! $DoIt && [OuiOuNon "Je refais un tour pour exécuter toutes les instructions ?"]} { return [GenomicsLinks "DoIt"] } return $LesExistants } proc GenomicsPossibles {} { set Possible [list "[Genomics]/link"] return $Possible } proc GenomicsSubDir {Dir} { set Queue [file tail $Dir] foreach Possible [GenomicsPossibles] { if {[file isdirectory $Possible/$Queue]} { return $Possible } } if {[file exists $Dir]} { return $Dir } return "[Genomics]" } proc GenomiqueComparativeParBlast {{RepBlast ""}} { set LaRecap {} set Libre [string repeat " " 35] if { ! [PourWscope]} { set Vide "" foreach Nom [ListeDesPABs] { lappend LaRecap "$Libre$Vide $Nom [Alias $Nom]" append Vide " " } } lappend LaRecap "$Libre 1 2 3 4 5" lappend LaRecap "$Libre 12345678901234567890123456789012345678901234567890" # set LO [OrganismesPourGenomiqueComparative] set LO [OrganismePresent RankedListOf AllOrganisms $RepBlast] set I 0 foreach RO $LO { incr I scan $RO "%s %s %s" R G E if {$E==""} { set E $G ; set G $R; set R $I } set O "$G $E" Espionne $O set C [OCduOS $O] set Recap "[format "%4d %-30s" $R $O] " foreach Nom [ListeDesPABs] { if {[OrganismePresent $Nom $O]==""} { append Recap " " } else { append Recap "X" } } append Recap " $C" lappend LaRecap $Recap } set Recap [join $LaRecap "\n"] set Bank [file tail $RepBlast] if {[PourWscope]} { set Header "

Genomique Comparative pour [PreFixe] par $Bank

" append Header "\n
See all [PreFixe] in an other window.
" return [Html_DuTexteTelQuel $Recap "GenomiqueComparative_$Bank" $Header] } set F [AfficheVariable $Recap "AvecRecap" "GenomiqueComparative_$Bank"] return $F } proc GenoretGenesUrl {} { set GenoretGenesUrl "http://genoret.lbgi.fr/GenoretGenes" return $GenoretGenesUrl } proc GenoretProteomicsLinks {{Qui ""} {Quoi ""}} { global GenoretProteomicsLinks if {$Qui == "Reset" && [info exists GenoretProteomicsLinks]} { unset GenoretProteomicsLinks ; return "" } if {$Qui==""} { set Qui "ListOf"; set Quoi "EVI" } if {$Quoi == ""} { set Quoi "All" } if {[info exists GenoretProteomicsLinks($Qui,$Quoi)]} { return $GenoretProteomicsLinks($Qui,$Quoi) } if {[info exists GenoretProteomicsLinks("EstCharge")]} { return "" } set GenoretProteomicsLinks("EstCharge") 1 set GenoretProteomicsLinks(ListOf,EVI) {} foreach Ligne [LesLignesDuFichier "[HomeRipp]/GenoretWww/Proteomics/GenoretGenesLinks.txt"] { scan $Ligne "%s %s" Nom Queue regsub { " $Ligne]} { lappend LesHeaders $Ligne } } } set LaListe {} set Organisme "" foreach Ligne $LesHeaders { if { ! [regexp -nocase {[a-z]+} $Ligne ]} { continue } regsub ">" $Ligne "" Ligne set Ligne [string toupper $Ligne] scan $Ligne "%s" BanqueNIdNF if { ! [regexp ":" $BanqueNIdNF] && [info exists BonBA($BanqueNIdNF)]} { regsub "^$BanqueNIdNF" $Ligne [set BonBA($BanqueNIdNF)] Ligne set BanqueNIdNF $BanqueNIdNF } set DebutFragment 1 if {[regexp "FROM BASE" $Ligne]} { set DebutFragment [IntegerApres "FROM BASE" dans $Ligne] } if {[regexp "from:" $Ligne]} { set DebutFragment [IntegerApres "FROM:" dans $Ligne] } ScanLaListe [split $BanqueNIdNF ":"] BanqueN IdNF set BanqueN [string toupper $BanqueN] set BanqueNIdNF "$BanqueN:$IdNF" regexp -nocase {[a-z]+} $BanqueN Banque set Nba 0 if {[regexp {[0-9]+} $BanqueN Nlu]} { set Nba $Nlu } set OriginalBanqueN($Banque,$Nba) $BanqueN set F 0 set IdN $IdNF if {[regexp "_" $IdNF]} { ScanLaListe [split $IdNF "_"] IdN F } regexp -nocase {[a-z]+} $IdN Id set Nid 0 if {[regexp -nocase {[0-9]+} $IdN Nlu]} { set Nid [Base10 $Nlu] } set OriginalIdN($Banque,$Nba,$Id,$Nid) $IdN set OriginalIdNF($Banque,$Nba,$Id,$Nid,$F) $IdNF set OriginalLigne($Banque,$Nba,$Id,$Nid,$F) $BanqueNIdNF if { ! [info exists OrganismeDe($Banque)]} { set Organisme "" if {[regexp -nocase { [A-Za-z0-9_]+ [A-Z][a-z]+ [a-z]+\.?} $Ligne Match]} { regsub -nocase { [A-Za-z0-9_]+ } $Match "" Organisme set Organisme [Glossaire $Organisme Complet] } if {$Organisme==""} { if {$Banque=="BUCH"} { set Organisme "Buchnera sp" } if {$Banque=="BBURG"} { set Organisme "Borrelia burgdorferi" } if {$Banque=="BBUR"} { set Organisme "Borrelia burgdorferi" } if {$Banque=="DRA"} { set Organisme "Deinococcus radiodurans" } if {$Banque=="STYP"} { set Organisme "Salmonella typhi" } if {$Banque=="SYNE"} { set Organisme "Synechocystis sp" } if {$Banque=="AERO"} { set Organisme "Aeropyrum pernix" } if {$Banque=="YE"} { set Organisme "Saccharomyces cerevisiae" } if {$Organisme!=""} { set Organisme [Glossaire $Organisme Complet] } } if {$Organisme==""} { set Organisme [Glossaire $Banque Complet] } while {$Organisme==""} { FaireLire "$Ligne\n no organism detected.\n Please help me ..." set OrganismePropose [Entre] set Organisme [Glossaire $OrganismePropose Complet] if {$Organisme!=""} { break } if {[OuiOuNon "I don't know $OrganismePropose as organism name\n Do You want to keep it ?" ]} { set Organisme $OrganismePropose break } } set OrganismeDe($Banque) $Organisme } Espionne "$Banque $Nba $Id $Nid $F $DebutFragment $Organisme" lappend LaListe [list $Banque $Nba $Id $Nid $F $DebutFragment] } set LaListeBanque [lsort -index 0 $LaListe] set LaListe {} foreach Element $LaListeBanque { ScanLaListe $Element Banque Nba Id Nid F DebutFragment if {[lsearch -exact $LesGenomesEnSouches $Banque]!=-1} { set OriIdN [set OriginalIdN($Banque,$Nba,$Id,$Nid)] set OriIdNF [set OriginalIdNF($Banque,$Nba,$Id,$Nid,$F)] set OriLign [set OriginalLigne($Banque,$Nba,$Id,$Nid,$F)] set OriginalIdN($Banque,$Nba,$Id,$Nid) $OriIdN set OriginalIdNF($Banque,$Nba,$Id,$Nid,$F) $OriIdNF set OriginalLigne($Banque,$Nba,$Id,$Nid,$F) $OriLign } if {[lsearch -exact $LesGenomesEnSouchesChromosomiques $Banque]!=-1} { set OriIdN [set OriginalIdN($Banque,$Nba,$Id,$Nid)] set OriIdNF [set OriginalIdNF($Banque,$Nba,$Id,$Nid,$F)] set OriLign [set OriginalLigne($Banque,$Nba,$Id,$Nid,$F)] set Nid $Nba set Nba 0 set OriginalIdN($Banque,$Nba,$Id,$Nid) $OriIdN set OriginalIdNF($Banque,$Nba,$Id,$Nid,$F) $OriIdNF set OriginalLigne($Banque,$Nba,$Id,$Nid,$F) $OriLign } lappend LaListe [list $Banque $Nba $Id $Nid $F $DebutFragment] } foreach Element [lsort -index 0 $LaListe] { ScanLaListe $Element Banque Nba Id Nid F DebutFragment lappend SaListe($Banque) [list $Banque $Nba $Id $Nid $F $DebutFragment] if {[info exists DejaVu($Banque)]} { continue } set DejaVu($Banque) 1 lappend LesBanquesDansLOrdre $Banque } foreach Banque $LesBanquesDansLOrdre { foreach Element [lsort -index 2 [set SaListe($Banque)]] { ScanLaListe $Element BanqueLu Nba Id Nid F DebutFragment lappend SaListe($BanqueLu,$Id) [list $BanqueLu $Nba $Id $Nid $F $DebutFragment] if {[info exists DejaVu($BanqueLu,$Id)]} { continue } set DejaVu($BanqueLu,$Id) 1 lappend LesBanquesIdDansLOrdre "$BanqueLu,$Id" } } foreach BanqueId $LesBanquesIdDansLOrdre { foreach Element [lsort -integer -index 3 [set SaListe($BanqueId)]] { ScanLaListe $Element BanqueLu Nba Id Nid F DebutFragment lappend SaListe($BanqueLu,$Id,$Nid) [list $BanqueLu $Nba $Id $Nid $F $DebutFragment] # Espionne "BanqueIdN $BanqueLu $Nba $Id $Nid $F $DebutFragment" if {[info exists DejaVu($BanqueLu,$Id,$Nid)]} { continue } set DejaVu($BanqueLu,$Id,$Nid) 1 lappend LesBanquesIdNDansLOrdre "$BanqueLu,$Id,$Nid" } } ScanLaListe {-1 -1 -1 -1 -1 -1} oBanqueLu oNba oId oNid oF oDebutFragment foreach BanqueIdN $LesBanquesIdNDansLOrdre { set SaListe($BanqueIdN) [lsort -integer -index 5 [set SaListe($BanqueIdN)]] foreach Element [set SaListe($BanqueIdN)] { ScanLaListe $Element BanqueLu Nba Id Nid F DebutFragment if {$BanqueLu != $oBanqueLu || $Nba != $oNba} { set Offset 0 } if {$BanqueLu == $oBanqueLu && $Nba == $oNba && ($Id != $oId || $Nid != $oNid)} { set Offset [expr $oDebutFragment + 200000] } set NewDebutFragment [expr $Offset+$DebutFragment] set OffsetDuFragment [expr $NewDebutFragment - 1] set Organisme [set OrganismeDe($BanqueLu)] set BA [set OriginalLigne($BanqueLu,$Nba,$Id,$Nid,$F)] set B [lindex [split $BA ":"] 0] Espionne "$B $BA" set TaxId [TaxIdDuGenomeComplet $B] while {$TaxId==""} { if {[info exists DejaDemandeTaxID($B)]} { set TaxId [set DejaDemandeTaxID($B)] break } set OB [Glossaire $B "Complet"] set TOB [Tax $OB] FaireLire "I couldn't find TaxIdDuGenomeComplet $B\nPlease help me. $B could be '$OB'\nits TaxId is '$TOB'" set TaxId [Entre $TOB] } set DejaDemandeTaxID($B) $TaxId if { ! [info exists DejaVerifie($TaxId)]} { set Name [Tax $TaxId Name] if { ! [regexp $Organisme $Name]} { FaireLire "$TaxId = $Name is not $Organisme" } set DejaVerifie($TaxId) $Organisme } else { if {[set DejaVerifie($TaxId)]!=$Organisme} { FaireLire "$TaxId was [set DejaVerifie($TaxId)] now I found $Organisme" } } lappend Sortie "$BA $BanqueLu $Nba $Id $Nid $F $DebutFragment $OffsetDuFragment $Organisme $TaxId" set oElement $Element ScanLaListe $oElement oBanqueLu oNba oId oNid oF set oDebutFragment $NewDebutFragment } } return [SauveLesLignes $Sortie dans $FichierFragments] } proc GereLesZoneEtiquettee {K x y ItemType Action} { global DernierXDeZoneEtiquettee DernierYDeZoneEtiquettee global DernierStartDeZoneEtiquettee global ZoneEtiquetteeTouchee global LesCouleursDeZoneEtiquettee global LesTaillesDeZoneEtiquettee global CouleurDuFond global ParametresDuBoard set PI 3.14159 set X [$K canvasx $x] set Y [$K canvasy $y] set xFin [set ParametresDuBoard($K,xFin)] set CentreX [set ParametresDuBoard($K,CentreX)] set CentreY [set ParametresDuBoard($K,CentreY)] if { ! [info exists LesCouleursDeZoneEtiquettee] } { set LesCouleursDeZoneEtiquettee {} lappend LesCouleursDeZoneEtiquettee "black" lappend LesCouleursDeZoneEtiquettee "grey" lappend LesCouleursDeZoneEtiquettee "white" lappend LesCouleursDeZoneEtiquettee "blue" lappend LesCouleursDeZoneEtiquettee "lightblue" lappend LesCouleursDeZoneEtiquettee "yellow" lappend LesCouleursDeZoneEtiquettee "green" lappend LesCouleursDeZoneEtiquettee "orange" lappend LesCouleursDeZoneEtiquettee "red" lappend LesCouleursDeZoneEtiquettee "purple" lappend LesCouleursDeZoneEtiquettee $CouleurDuFond set LesTaillesDeZoneEtiquettee {"Raise" "Lower" "Extent" "Copy" "Other" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20} } if {$Action == "Motion"} { if { $ItemType=="arc" } { set DeltaX [expr $x-$DernierXDeZoneEtiquettee] set DeltaY [expr $y-$DernierYDeZoneEtiquettee] set DernierStartDeZoneEtiquettee [expr $DernierStartDeZoneEtiquettee + $DeltaX] $K itemconfigure $ZoneEtiquetteeTouchee -start $DernierStartDeZoneEtiquettee } else { $K move $ZoneEtiquetteeTouchee [expr $x-$DernierXDeZoneEtiquettee] [expr $y-$DernierYDeZoneEtiquettee] } set DernierXDeZoneEtiquettee $x set DernierYDeZoneEtiquettee $y return } set ZoneEtiquetteeTouchee [$K find withtag current] if {$Action == "Point"} { set ZoneEtiquetteeTouchee [$K find withtag current] set DernierXDeZoneEtiquettee $x set DernierYDeZoneEtiquettee $y if { $ItemType=="arc"} { set DernierStartDeZoneEtiquettee [$K itemcget $ZoneEtiquetteeTouchee -start] } return } if {$Action == "Erase"} { if { ! [OuiOuNon "Do you really want to erase this $ItemType"]} { return 0 } $K delete $ZoneEtiquetteeTouchee return 1 } if {$Action == "ModifCouleur"} { set Couleur [ChoixParmi [concat $LesCouleursDeZoneEtiquettee "NewColor"] [concat $LesCouleursDeZoneEtiquettee "white"]] if {$Couleur == ""} { return "" } if {$Couleur == "NewColor"} { set Couleur [PaletteDeCouleurs] if {$Couleur == ""} { return "" } lappend LesCouleursDeZoneEtiquettee $Couleur } if { $ItemType=="polygone"} { $K itemconfigure $ZoneEtiquetteeTouchee -fill $Couleur $K itemconfigure $ZoneEtiquetteeTouchee -outline $Couleur return $Couleur } if { $ItemType=="arc"} { $K itemconfigure $ZoneEtiquetteeTouchee -outline $Couleur return $Couleur } if { $ItemType=="text" || $ItemType=="line"} { $K itemconfigure $ZoneEtiquetteeTouchee -fill $Couleur return $Couleur } } if {$Action == "ModifTaille"} { set Taille [ChoixParmi $LesTaillesDeZoneEtiquettee] if {$Taille == ""} { return "" } if {$ItemType == "arc" && $Taille == "Copy"} { set Extent [$K itemcget $ZoneEtiquetteeTouchee -extent] $K itemconfigure $ZoneEtiquetteeTouchee -extent [expr $Extent*[Entre 0.9]] return } if {$ItemType == "arc" && $Taille == "Extent"} { set Extent [$K itemcget $ZoneEtiquetteeTouchee -extent] $K itemconfigure $ZoneEtiquetteeTouchee -extent [expr $Extent*[Entre 0.9]] return } if {$Taille == "Raise"} { $K raise $ZoneEtiquetteeTouchee return "Raise" } if {$Taille == "Lower"} { $K raise $ZoneEtiquetteeTouchee return "Lower" } if {$ItemType == "line" && $Taille == "Arrow"} { set AvAr [$K itemcget $ZoneEtiquetteeTouchee -arrow] if {$AvAr=="first"} { set AvAr "last" } else { set AvAr "first" } $K itemconfigure $ZoneEtiquetteeTouchee -arrow $AvAr return } if {$Taille == "Other"} { set Taille [Entre 21] if {$Taille == ""} { return "" } lappend LesTaillesDeZoneEtiquettee $Taille } if { $ItemType=="arc" || $ItemType=="line" } { $K itemconfigure $ZoneEtiquetteeTouchee -width $Taille return $Taille } if { $ItemType=="text"} { $K itemconfigure $ZoneEtiquetteeTouchee -font [list Courier $Taille] return $Taille } } if {$Action == "ModifTexte"} { set Texte [Entre] if {$Texte == ""} { return "" } if { $ItemType=="text"} { $K itemconfigure $ZoneEtiquetteeTouchee -text $Texte return $Texte } } } proc GestionDesClones {} { set LesEtapes [MorceauxChoisis [list 10_MutateSequence 11_CreateOligosForMutation 13_CreateOligosForSequencing 15_GenereFragments 16_GenereOligos 22_CommandeOligos 23_StockeOligos 31_RecombinaisonPremiere 32_DepartSequencage 33_VerificationSequencage 41_RecombinaisonSeconde 42_Extension5Prime 51_AfficheFusionEtCoupure 52_CoupureDesADNCirculaires 55_OligAuto 60_WebOrder 70_AnalyseDesSequences] "" "Please select one or more steps to perform."] set SortieMutateSequence "" set SortieCreateOligosForMutation "" set SortieGenereFragments "" set SortieGenereOligos "" set FichierOligos "" set FichierProduitsPCR "" set FichierStockeOligos "" set SortieCommandeOligos "" set SortieStockeOligos "" set SortieRecombinaisonPremiere "" set SortieRecombinaisonSeconde "" set SortieExtension5Prime "" set SortieDepartSequencage "" set SortieVerificationSequencage "" set SortieCoupureDesADNCirculaires "" set OldEtape "" foreach Etape [lsort $LesEtapes] { regsub {[0-9A-Z]+_} $Etape "" Etape if {$Etape=="StockeOligos" && $OldEtape=="CommandeOligos"} { continue } if {$Etape=="GenereFragments" && $OldEtape=="CreateOligosForMutation"} { continue } if {$Etape=="GenereOligos" && $OldEtape=="CreateOligosForMutation"} { continue } if {$Etape=="GenereFragments" && $OldEtape=="CreateOligosForSequencing"} { continue } if {$Etape=="GenereOligos" && $OldEtape=="CreateOligosForSequencing"} { continue } set OldEtape $Etape switch -regexp $Etape { "MutateSequence" { while 1 { set FichierDesMutations "" if {[OuiOuNon "Can You browse for a file with lines containing\n PGS018 PGS518 S379R -M1 ( creates PGS518 alias hRAR-M1 )\n PGS018 PGS618 S379R E245A -M2 ( creates PGS618 alias hRAR-M2 )\n PGS025 PGS525 S379R E245A =MutedRARg ( creates PGS525 alias MutedRARg )"]} { set FichierDesMutations [ButineArborescence "All"] if {$FichierDesMutations==""} { continue } break } else { if {[OuiOuNon "Do You want to enter [PreFixe] and mutation code ?"]} { break } if {[OuiOuNon "Do we cancel MutateSequence ?"]} { continue } if {[OuiOuNon "Do we cancel the whole process ?"]} { return "" } } } if {$FichierDesMutations==""} { set SortieMutateSequence [MutateSequence] } else { set SortieMutateSequence [MutateSequencesListedIn $FichierDesMutations] } while {[OuiOuNon "Do I save the description file of these mutations ?"]} { regsub {\.codemut.*$} $FichierDesMutations "" FichierDesMutationsFaites set FichierDesMutationsFaites "$FichierDesMutationsFaites.mutedone" set FichierDesMutationsFaites [FichierPourSaveAs $FichierDesMutationsFaites] if {$FichierDesMutationsFaites==""} { continue } Sauve $SortieMutateSequence dans $FichierDesMutationsFaites break } } "CreateOligosForMutation" { set FichierOuTexteOliMut "" if {$SortieMutateSequence!=""} { set FichierOuTexteOliMut $SortieMutateSequence } else { if {[OuiOuNon "can You browse for a file with lines containing\n PGS018 PGS518 S379R\n PGS018 PGS618 S379R E245A\n PGS025 PGS525 Q334T I289W P345LL"]} { set FichierOuTexteOliMut [ButineArborescence All] } } set SortieCreateOligosForMutation [CreateOligosForMutation $FichierOuTexteOliMut] set FichierOligos $SortieCreateOligosForMutation } "CreateOligosForSequencing" { set FichierOuTexteOliSeq "" while 1 { if {[OuiOuNon "Do You have a file with [PreFixe]s or fragments to sequence ?"]} { set FichierOuTexteOliSeq [ButineArborescence All] } elseif {[OuiOuNon "Do You want to enter it ?"]} { FaireLire "Remember that you can add lines with (AA count)\n PGS160 SeqCheck\n PGS161 120 989" set CancelOFOFS 0 while { $FichierOuTexteOliSeq==""} { set FichierOuTexteOliSeq [string trim [EntreTexte] "\n"] Espionne $FichierOuTexteOliSeq if {$FichierOuTexteOliSeq==""} { if {[OuiOuNon "May be You forgot to Validate\nTry again ?"]} { continue } if {[OuiOuNon "Do You want to cancel CreationOfOligosForSequencing ?"]} { set CancelOFOFS 1 break } } } if {$CancelOFOFS} { break } } if {$FichierOuTexteOliSeq!=""} { break } if {[OuiOuNon "Do You want to cancel CreationOfOligosForSequencing ?"]} { break } } if {$FichierOuTexteOliSeq==""} { set SortieCreateOligosForSequencing "" } else { set SortieCreateOligosForSequencing [CreateOligosForSequencing $FichierOuTexteOliSeq] } set FichierOligos $SortieCreateOligosForSequencing } "GenereFragments" { set SortieGenereFragments [GenereFragments] } "GenereOligos" { set SortieGenereOligos [GenereOligos $SortieGenereFragments] set FichierOligos [lindex $SortieGenereOligos 0] set FichierProduitsPCR [lindex $SortieGenereOligos 1] } "CommandeOligos|StockeOligos" { if {$FichierOligos==""} { set LesFichiersOligos [LesFichiersDeType "Oligo"] } else { set LesFichiersOligos [list $FichierOligos] } set StockeOnly "" if {[regexp "StockeOligos" $Etape]} { set StockeOnly "StockeOnly" } set SortieCommandeOligos [CommandeOligos $LesFichiersOligos $StockeOnly] } "RecombinaisonPremiere" { set RepPPCR "[RepertoireDuGenome]/ppcr" if {$FichierProduitsPCR==""} { set LesFichiersUnProduitPCR {} foreach FichierProduitsPCR [LesFichiersDeType "Ppcr"] { if {[regexp "ppcr_virtuels" $FichierProduitsPCR]} { set LesNouveauxFichiersUnProduitPCR [list $FichierProduitsPCR] } else { if {[OuiOuNonMemo "Do I keep the filenames for single TFA file instead of Use_access"]} { if {[string first ">" [ContenuDuFichier $FichierProduitsPCR] 2]>-1} { FaireLire "Attention there are more than 1 sequence in $FichierProduitsPCR\n I'll split it, using the access as filename" set LesNouveauxFichiersUnProduitPCR [LesFichiersUnAUnDuTFAs $FichierProduitsPCR $RepPPCR "Use_access_but_remove_signals"] } else { set LesNouveauxFichiersUnProduitPCR $FichierProduitsPCR } } else { set LesNouveauxFichiersUnProduitPCR [LesFichiersUnAUnDuTFAs $FichierProduitsPCR $RepPPCR "Use_access_but_remove_signals"] } } LConcat LesFichiersUnProduitPCR $LesNouveauxFichiersUnProduitPCR } } else { set LesFichiersUnProduitPCR [LesFichiersUnAUnDuTFAs $FichierProduitsPCR $RepPPCR "Use_access_but_remove_signals"] } set FichierVecteur [LesFichiersDeType "pDONR"] set NomVec [file tail $FichierVecteur] regsub ".tfa$" $NomVec "" NomVec set LesFichiersRecombinaisonPremiere {} foreach FichierUnPPCR $LesFichiersUnProduitPCR { set Queue [file tail $FichierUnPPCR] regsub "\.tfa$" $Queue "" Queue set FichierRecombinaison "[RepertoireDuGenome]/rec1/${Queue}_$NomVec" lappend LesFichiersRecombinaisonPremiere [Recombinaison $FichierUnPPCR $FichierVecteur $FichierRecombinaison "" "Premiere"] } set SortieRecombinaisonPremiere $LesFichiersRecombinaisonPremiere Rec1 ReLoad } "DepartSequencage" { if {$SortieRecombinaisonPremiere!=""} { set Source $SortieRecombinaisonPremiere } else { set Source "" } set SortieDepartSequencage [DepartSequencage $Source] } "VerificationSequencage" { set Source [ChoixParmi [list "GATC" "GetMacSeq" "AskForSequence"]] set BanqueSpecif "" while {[OuiOuNon "Do I use a [PreFixe] specific blast database for all sequences You'll choose" 0]} { while 1 { set SpecifPGS [Entre [PreFixe]] if {[EstUnPAB $SpecifPGS]} { break } set SpecifPGS [NomDuAlias $SpecifPGS] if {[EstUnPAB $SpecifPGS]} { break } } if {$SpecifPGS==""} { continue } set BanqueSpecif "Specif_$SpecifPGS" set BanqueSpecif [CreeLaBanqueBlastClonage $BanqueSpecif $SpecifPGS] break } set SortieVerificationSequencage [VerificationSequencage $Source $BanqueSpecif] } "RecombinaisonSeconde" { if {$SortieRecombinaisonPremiere!=""} { set LesFichiersRecombinaisonPremiere $SortieRecombinaisonPremiere } else { set LesFichiersRecombinaisonPremiere [LesFichiersDeType "Rec1"] } set LesFichierVecteur [LesFichiersDeType "pDEST"] set LesFichiersRecombinaisonSeconde {} foreach FichierRec1 $LesFichiersRecombinaisonPremiere { foreach FichierVecteur $LesFichierVecteur { set NomVecteur [file tail $FichierVecteur] regsub ".tfa$" $NomVecteur "" NomVecteur regsub "/rec1/" $FichierRec1 "/rec2/" FichierRec2 regsub ".tfa$" $FichierRec2 "" FichierRec2 append FichierRec2 "_$NomVecteur" lappend LesFichiersRecombinaisonSeconde [Recombinaison $FichierRec1 $FichierVecteur $FichierRec2 "" "Seconde"] } } set SortieRecombinaisonSeconde $LesFichiersRecombinaisonSeconde Rec2 ReLoad } "Extension5Prime" { if {$SortieRecombinaisonSeconde!=""} { set LesFichiersRecombinaisonSeconde $SortieRecombinaisonSeconde } else { set LesFichiersRecombinaisonSeconde [LesFichiersDeType "Rec2"] } set LesFiFuN {} foreach FichierRec2 $LesFichiersRecombinaisonSeconde { set FiFuNP [CreeLesFichiersExtension5PrimeDeRec2 $FichierRec2] if {$FiFuNP!=""} { scan $FiFuNP "%s" FiFuN lappend LesFiFuN $FiFuN } } set SortieExtension5Prime $LesFiFuN } "AfficheFusionEtCoupure" { if {$SortieExtension5Prime!=""} { set LesFiFuN $SortieExtension5Prime } else { set LesFiFuN [LesFichiersDeType "Fusion"] } if {$LesFiFuN!=""} { set LesPep [AffichePeptideSortPourLesFusions $LesFiFuN "Ask"] } } "CoupureDesADNCirculaires" { set SortieCoupureDesADNCirculaires [CoupureDesADNCirculaires] } "OligAuto" { set SortieOligAuto [OligAuto] } "WebOrder" { set SortieWebOrder [WebOrder] } } } } proc GetAbsolutePath {dir} { set saved [pwd] cd $dir set path [pwd] cd $saved return $path } proc GetEnsemblWeb {url} { set t [::http::geturl $url] upvar #0 $t state set i [lsearch $state(meta) "Location"] set new [lindex $state(meta) $i+1] set pre [string range $url 0 [string first "g" $url]+1] set url ${pre}$new ::http::cleanup $t set t [::http::geturl $url] upvar #0 $t state set res $state(body) ::http::cleanup $t return $res } proc GetEnsemblWebMARIE {url} { #rR le lele est chez poidevin set t [::http::geturl $url] upvar #0 $t state set i [lsearch $state(meta) "Location"] set new [lindex $state(meta) $i+1] set pre [string range $url 0 [string first "g" $url]+1] set url ${pre}$new ::http::cleanup $t set t [::http::geturl $url] upvar #0 $t state set res $state(body) ::http::cleanup $t return $res } proc GetEquivNonBiDir {Sort} { # Recupere pour chaque promoteur bidir de longuer N un promoteur non-bidir de taille identique Espionne "GetEquivNonBiDir : Start" set ListeDesDistancesNatives {} set ListeDesDistancesCroissantes {} set ListeDesDistancesDecroissantes {} Espionne "GetEquivNonBiDir : Stockage des distances" set FichierDesDistances [open "/genomics/link/STAF/fiches/Bidir/1000/TaillesIntergenes.bidir" "r"] while { [gets $FichierDesDistances LigneD] >= 0 } { lappend ListeDesDistancesNatives $LigneD lappend ListeDesDistancesCroissantes $LigneD lappend ListeDesDistancesDecroissantes $LigneD } close $FichierDesDistances lsort -increasing $ListeDesDistancesCroissantes lsort -decreasing $ListeDesDistancesDecroissantes foreach NumNonBidir { 01 02 03 04 05 06 07 08 09 10 } { set I 0 set nbLignes 0 set FichierDesNonBidir [open "/genomics/link/STAF/fiches/NonBiDir/NonBidir.847.$NumNonBidir.nb" "r"] if {$Sort == "Natif" } { set FichierDesSequencesNonBidirNatives [open "/genomics/link/STAF/fiches/NonBiDir/NonBiDir$NumNonBidir.n.pnb" "w"] set FichierDesSequencesNonBidirNativesEtendues [open "/genomics/link/STAF/fiches/NonBiDir/NonBiDir$NumNonBidir.n.pnbe" "w"] } if {$Sort == "Croissant" } { set FichierDesSequencesNonBidirCroissantes [open "/genomics/link/STAF/fiches/NonBiDir/NonBiDir$NumNonBidir.c.pnb" "w"] set FichierDesSequencesNonBidirCroissantesEtendues [open "/genomics/link/STAF/fiches/NonBiDir/NonBiDir$NumNonBidir.c.pnbe" "w"] } if {$Sort == "Decroissant" } { set FichierDesSequencesNonBidirDecroissantes [open "/genomics/link/STAF/fiches/NonBiDir/NonBidir$NumNonBidir.d.pnb" "w"] set FichierDesSequencesNonBidirDecroissantesEtendues [open "/genomics/link/STAF/fiches/NonBiDir/NonBidir$NumNonBidir.d.pnbe" "w"] } Espionne "GetEquivNonBiDir : Fichier $NumNonBidir" while { [gets $FichierDesNonBidir LigneNB] >= 0} { incr nbLignes Espionne "GetEquivNonBiDir ($NumNonBidir): Ligne $nbLignes" ScanLaListe $LigneNB AccessNB ChromNB StartNB EndNB StrandNB set DistanceNative [lindex $ListeDesDistancesNatives $I] set DistanceCroissante [lindex $ListeDesDistancesCroissantes $I] set DistanceDecroissante [lindex $ListeDesDistancesDecroissantes $I] if { $StrandNB == "-" } { set Temp $EndNB set EndNB $StartNB set StartNB $Temp set StartPromoteurNatif $StartNB set EndPromoteurNatif [expr $StartPromoteurNatif + $DistanceNative] set StartPromoteurNatifEtendu [expr $StartPromoteurNatif - 400] set EndPromoteurNatifEtendu [expr $EndPromoteurNatif + 400] set StartPromoteurCroissant $StartNB set EndPromoteurCroissant [expr $StartPromoteurCroissant + $DistanceCroissante] set StartPromoteurCroissantEtendu [expr $StartPromoteurCroissant - 400] set EndPromoteurCroissantEtendu [expr $EndPromoteurCroissant + 400] set StartPromoteurDecroissant $StartNB set EndPromoteurDecroissant [expr $StartPromoteurDecroissant + $DistanceDecroissante] set StartPromoteurDecroissantEtendu [expr $StartPromoteurDecroissant - 400] set EndPromoteurDecroissantEtendu [expr $EndPromoteurDecroissant + 400] } else { set EndPromoteurNatif $StartNB set StartPromoteurNatif [expr $EndPromoteurNatif - $DistanceNative] set EndPromoteurNatifEtendu [expr $EndPromoteurNatif + 400] set StartPromoteurNatifEtendu [expr $StartPromoteurNatif - 400] set EndPromoteurCroissant $StartNB set StartPromoteurCroissant [expr $EndPromoteurCroissant - $DistanceCroissante] set EndPromoteurCroissantEtendu [expr $EndPromoteurCroissant + 400] set StartPromoteurCroissantEtendu [expr $StartPromoteurCroissant - 400] set EndPromoteurDecroissant $StartNB set StartPromoteurDecroissant [expr $EndPromoteurDecroissant - $DistanceDecroissante] set EndPromoteurDecroissantEtendu [expr $EndPromoteurDecroissant + 400] set StartPromoteurDecroissantEtendu [expr $StartPromoteurDecroissant - 400] } regsub -all {chr} $ChromNB "" ChromNB if {$Sort == "Natif" } { set SequenceNative [BoutAdnDeUcscBoost $StartPromoteurNatif $EndPromoteurNatif $StrandNB "Homo_sapiens" $ChromNB "bigZips200603" ] set SequenceNativeEtendue [BoutAdnDeUcscBoost $StartPromoteurNatifEtendu $EndPromoteurNatifEtendu $StrandNB "Homo_sapiens" $ChromNB "bigZips200603" ] regsub -all {a|t|c|g} $SequenceNative "N" SequenceNative regsub -all {a|t|c|g} $SequenceNativeEtendue "N" SequenceNativeEtendue puts $FichierDesSequencesNonBidirNatives ">$AccessNB" puts $FichierDesSequencesNonBidirNatives $SequenceNative puts $FichierDesSequencesNonBidirNativesEtendues ">$AccessNB" puts $FichierDesSequencesNonBidirNativesEtendues $SequenceNativeEtendue flush $FichierDesSequencesNonBidirNatives flush $FichierDesSequencesNonBidirNativesEtendues } if {$Sort == "Croissant" } { set SequenceCroissante [BoutAdnDeUcscBoost $StartPromoteurCroissant $EndPromoteurCroissant $StrandNB "Homo_sapiens" $ChromNB "bigZips200603" ] set SequenceCroissanteEtendue [BoutAdnDeUcscBoost $StartPromoteurCroissantEtendu $EndPromoteurCroissantEtendu $StrandNB "Homo_sapiens" $ChromNB "bigZips200603" ] regsub -all {a|t|c|g} $SequenceCroissante "N" SequenceCroissante regsub -all {a|t|c|g} $SequenceCroissanteEtendue "N" SequenceCroissanteEtendue puts $FichierDesSequencesNonBidirCroissantes ">$AccessNB" puts $FichierDesSequencesNonBidirCroissantes $SequenceCroissante puts $FichierDesSequencesNonBidirCroissantesEtendues ">$AccessNB" puts $FichierDesSequencesNonBidirCroissantesEtendues $SequenceCroissanteEtendue flush $FichierDesSequencesNonBidirCroissantes flush $FichierDesSequencesNonBidirCroissantesEtendues } if {$Sort == "Decroissant" } { set SequenceDecroissante [BoutAdnDeUcscBoost $StartPromoteurDecroissant $EndPromoteurDecroissant $StrandNB "Homo_sapiens" $ChromNB "bigZips200603" ] set SequenceDecroissanteEtendue [BoutAdnDeUcscBoost $StartPromoteurDecroissantEtendu $EndPromoteurDecroissantEtendu $StrandNB "Homo_sapiens" $ChromNB "bigZips200603" ] regsub -all {a|t|c|g} $SequenceDecroissante "N" SequenceDecroissante regsub -all {a|t|c|g} $SequenceDecroissanteEtendue "N" SequenceDecroissanteEtendue puts $FichierDesSequencesNonBidirDecroissantes ">$AccessNB" puts $FichierDesSequencesNonBidirDecroissantes $SequenceDecroissante puts $FichierDesSequencesNonBidirDecroissantesEtendues ">$AccessNB" puts $FichierDesSequencesNonBidirDecroissantesEtendues $SequenceDecroissanteEtendue flush $FichierDesSequencesNonBidirDecroissantes flush $FichierDesSequencesNonBidirDecroissantesEtendues } incr I } if {$Sort == "Natif" } { close $FichierDesSequencesNonBidirNatives close $FichierDesSequencesNonBidirNativesEtendues } if {$Sort == "Croissant" } { close $FichierDesSequencesNonBidirCroissantes close $FichierDesSequencesNonBidirCroissantesEtendues } if {$Sort == "Decroissant" } { close $FichierDesSequencesNonBidirDecroissantes close $FichierDesSequencesNonBidirDecroissantesEtendues } close $FichierDesNonBidir } Espionne "GetEquivNonBiDir : End" } proc GetExons {Path Organisme Database {BirdVersion bird} {DateGenome 200603}} { set FichierDesCoordonnees [open "$Path.txt" "r"] set FichierDesCoordonnees [open "$Path.txt" "r"] set FichierDesRequetes [open "$Path.sql" "w"] set I 0 set J 0 set OldName "" while { [gets $FichierDesCoordonnees LigneCoordonnee] >=0 } { ScanLaListe $LigneCoordonnee Gene Chromosome Start End Strand set Start [expr $Start - 1] set End [expr $End + 1] puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE select access, name, chrom, cdsStart, cdsEnd, exoncount, exonStarts, exonEnds, strand from ucsc$Organisme.$Database Where txStart >= $Start AND txEnd <= $End AND chrom='$Chromosome'" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } close $FichierDesRequetes close $FichierDesCoordonnees Espionne "GetExons : Execution des requetes" BirdFetch "$Path.sql" "$BirdVersion" "$Path.result" set FichierDesRequetesExecutees [open "$Path.result" "r"] Espionne "GetExons : Traitement des resultats" while { [gets $FichierDesRequetesExecutees LigneResultat] >=0 } { set SequenceExonsConcatenes "" incr J gets $FichierDesRequetesExecutees LigneResultat set LigneResultat [split $LigneResultat "|"] ScanLaListe $LigneResultat Access Name Chromosome cdsStart cdsEnd ExonCount LesExonStarts LesExonEnds Strand if { $Name != "Pseudogene"} { if { $Access != $OldName && $J != 1 } { set FichierDesExonsConcatenes [open "$Path.$Access.concat" "w"] set SequenceExonsConcatenes "" } set ListeDesStarts [split $LesExonStarts ","] set ListeDesEnds [split $LesExonEnds ","] for {set I 1} {$I <= $ExonCount} {incr I} { set StartE [lindex $ListeDesStarts $I] set EndE [lindex $ListeDesEnds $I] if {$StartE != "" && $End !=""} { Espionne "Traitement de l'Exon $I de $Access" regsub -all {chr} $Chromosome "" Chrox #Espionne "$StartE $EndE $Strand $Organisme $Chrox" #set Sequence [BoutAdnDeUcscBoost $StartE $EndE $Strand $Organisme $Chrox "bigZips$DateGenome"] set SequenceExonsConcatenes "$SequenceExonsConcatenes$Sequence" #set FichierTfaMonoExon [open "$Path.$Access.Exon$I.tfa" "w"] #puts $FichierTfaMonoExon ">$Access Exon$I $Chromosome:$StartE-$EndE" if { $StartE >= $cdsStart && $EndE <= $cdsEnd} { set UTRouCDS "CDS" } elseif { $StartE <= $cdsStart && $EndE <= $cdsEnd} { set UTRouCDS "Half5" } elseif { $StartE >= $cdsStart && $EndE >= $cdsEnd } { set UTRouCDS "Half3" } elseif { $StartE > $cdsEnd } { set UTRouCDS "3-UTR" } elseif { $EndE < $cdsStart } { set UTRouCDS "5-UTR" } else { Espionen "Erreur CDS/UTR" } puts $FichierTfaMonoExon "ID $Access Exon$I $Chromosome $StartE $EndE $strand UTRouCDS" #puts $FichierTfaMonoExon "$Sequence" #close $FichierTfaMonoExon } } Espionne "$Name $OldName $J" if { $Access != $OldName && $J != 1 } { Espionne "Ecriture du fichier des exons de $Name" puts $FichierDesExonsConcatenes ">$Access ExonConcatenes" puts $FichierDesExonsConcatenes $SequenceExonsConcatenes close $FichierDesExonsConcatenes } set OldName $Access } } } proc GetExons2 {Path {Organisme human} {Database GeCo} {DateGenome 200603}} { set FichierDesCoordonnees [open "/tmp/$Path.coord" "w"] set FichierDesRequetes [open "/tmp/$Path.sql" "w"] set I 0 set J 0 set ID 0 set OldName "" CanalSqlUcscHuman foreach LigneResultat [SqlExec "SELECT access, name, chrom, cdsStart, cdsEnd, exoncount, exonStarts, exonEnds, strand FROM ucsc$Organisme.$Database Where typeGene='protein' and pseudogene='no' ORDER BY chrom, txStart" "-list"] { ScanLaListe $LigneResultat Access Name Chromosome cdsStart cdsEnd ExonCount LesExonStarts LesExonEnds Strand set ListeDesStarts [split $LesExonStarts ","] set ListeDesEnds [split $LesExonEnds ","] for {set I 1} {$I <= $ExonCount} {incr I} { set StartE [lindex $ListeDesStarts $I] set EndE [lindex $ListeDesEnds $I] if {$StartE != "" && $EndE !=""} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|GetExon: Traitement de l'Exon $I de $Access" if { $StartE >= $cdsStart && $EndE <= $cdsEnd} { set UTRouCDS "CDS" } elseif { $StartE <= $cdsStart && $EndE <= $cdsEnd} { set UTRouCDS "Half5" } elseif { $StartE >= $cdsStart && $EndE >= $cdsEnd } { set UTRouCDS "Half3" } elseif { $StartE > $cdsEnd } { set UTRouCDS "3-UTR" } elseif { $EndE < $cdsStart } { set UTRouCDS "5-UTR" } elseif { $StartE < $cdsStart && $EndE > $cdsEnd} { set UTRouCDS "Spanning" } else { Espionne "Erreur CDS/UTR $StartE-$EndE ?? $cdsStart-$cdsEnd" set UTRouCDS "Error" } if { $Strand == "+" } { set StartP [expr $StartE - 500] set EndP [expr $StartE - 1] set StartP2 [expr $EndE + 1] set EndP2 [expr $StartE + 500] } else { set StartP $EndE set EndP [expr $EndE + 500] set StartP2 [expr $StartE - 500] set EndP2 [expr $StartE - 1] } regsub -all -nocase {chr} $Chromosome "" Chrox #set SequenceB [BoutAdnDeUcscBoost $StartP $EndP $Strand $Organisme $Chrox "bigZips$DateGenome"] #set SequenceA [BoutAdnDeUcscBoost $StartP2 $EndP2 $Strand $Organisme $Chrox "bigZips$DateGenome"] incr ID #puts $FichierDesCoordonnees "$ID $Access Exon$I $Chromosome $StartE $EndE $Strand $UTRouCDS $SequenceB $SequenceA" puts $FichierDesCoordonnees "$ID $Access Exon$I $Chromosome $StartE $EndE $Strand $ExonCount" } } } close $FichierDesCoordonnees } proc GetFastaHeadersForPABs {listeDesPABs} { set lesPABs [split $listeDesPABs ", "] set res "pas bon" foreach PAB $lesPABs { #AppendAuFichier [LogDir]/bibib $PAB append res "[BenEnteteTFA $PAB]," } return $res } proc GetFreetextFromSql {Nom} { set Retour [SqlExec "select FREETEXT from MACSIMS where FREETEXT like '%GscopeID $Nom\n%'" "GetFirstValue"] Espionne $Retour exit } proc GetFromGATC {{SourceDir ""} {LocalDir ""}} { if {$LocalDir==""} { FaireLire "Please browse for the local directory to store the .tfa files" set LocalDir [tk_chooseDirectory -mustexist 1 -initialdir "./"] if {$LocalDir==""} { return "" } } if {$SourceDir==""} { FaireLire "Please browse for the directory containing the .seq sequences" set Rep [tk_chooseDirectory -mustexist 1 -initialdir "[pwd]"] if {$Rep==""} { return "" } set SourceDir $Rep } set LesDispos [lsort [glob -nocomplain -type f "$SourceDir/*.seq"]] set LesChoix [MorceauxChoisis $LesDispos] set LesFichiersTFA {} set LesSeq {} foreach Choix $LesChoix { set Queue [file tail $Choix] regsub ".seq$" $Queue "" NomDeBapteme set Destin "$LocalDir/$NomDeBapteme.tfa" if {[file exists $Destin]} { if { ! [OuiOuNon "$Destin already exists.\n Do I overwrite ?"]} { continue } } set Seq [ContenuDuFichier $Choix] if {[regexp "edited with PhredPhrap" $Seq]} { set ID [StringApres "ID: " dans $Seq] if {$ID==$NomDeBapteme} { regsub ">" $Seq ">$ID " Seq } else { FaireLire "$Choix contains no ID with $ID\n$Seq" } set FichierTFA [Sauve $Seq dans $Destin] } else { FaireLire "I didn't find 'edited with PhredPhrap' in $Choix\nI'll continue expecting fastaformat, gcgformat or raw sequence" if {[regexp {^>} $Seq]} { set TFA $Seq } elseif {[regexp {\.\. *\n} $Seq]} { set TFA [SequenceFormatTFA $Seq $NomDeBapteme "gcgmaybe"] } else { regsub -all {[ \n\t0-9]} $Seq "" Seq if {[regexp -nocase {[^ATGCN]} $Seq]} { FaireLire "The sequence file $Choix contains illegal characters\n$Seq" } set TFA [SequenceFormatTFA $Seq $NomDeBapteme "nucbrut"] } set FichierTFA [Sauve $TFA dans $Destin] } lappend LesFichiersTFA $FichierTFA } return $LesFichiersTFA } proc GetGlobal {Var} { global $Var if { ! [info exists $Var]} { return "NotExists" } return [set $Var] } proc GetInfosOfTaxIds {LidIn} { unset -nocomplain ::db set db [InitTaxDB] set db "dbtaxo" set dbtaxo "/genomics/link/taxonomy/uniprot_taxonomy/uniprot_taxonomy.sql" package require sqlite3 sqlite3 $db $dbtaxo set Lid [list] foreach id $LidIn { if {[string is integer -strict $id]} { lappend Lid $id } } set Ldata [$db eval "select taxid,Name,Lineage from taxonomy where taxid in ([join $Lid ,])"] $db close update return $Ldata } proc GetMacSeq {{SourceDir ""} {LocalDir ""} {User ""}} { set RepDe(huet) "titus:/us1/user/SEQUENCEUR/HUET_Tiphaine" set RepDe(eiler) "titus:/us1/user/SEQUENCEUR/EILER_Sylvia" set RepDe(dock) "titus:/us1/user/SEQUENCEUR/Dock-Bregeon" set RepDe(wassim) "titus:/us1/user/SEQUENCEUR/ABDULRAHMAN_Wassim" set RepDe(fmichel) "titus:/us1/user/SEQUENCEUR/MICHEL_Fabrice" set RepDe(djbusso) "titus:/us1/user/SEQUENCEUR/BUSSO_Didier" set RepDe(arnaud) "titus:/us1/user/SEQUENCEUR/POTERSZMAN_Arnaud" set RepDe(flatter) "titus:/us1/user/SEQUENCEUR/FLATTER_Eric" set RepDe(desseric) "titus:/us1/user/SEQUENCEUR/DESSERICH_Vincent" set RepDe(brelivet) "titus:/us1/user/SEQUENCEUR/BRELIVET_Yann" set RepDe(bey) "titus:/us1/user/SEQUENCEUR/BEY_Gilbert" set RepDe(iwema) "titus:/us1/user/SEQUENCEUR/IWEMA_Thomas" set RepDe(billas) "titus:/us1/user/SEQUENCEUR/BILLAS_Isabelle" set RepDe(flatter) "titus:/us1/user/SEQUENCEUR/FLATTER_Eric" set RepDe(ruff) "titus:/us1/user/SEQUENCEUR/RUFF_Marc" set RepDe(eddy) "titus:/us1/user/SEQUENCEUR/TROESCH_Edouard" set RepDe(troffer) "titus:/us1/user/SEQUENCEUR/TROFFER-Nathalie" set RepDe(uhring) "titus:/us1/user/SEQUENCEUR/UHRING_Muriel" set RepDe(ripp) "titus:[HomeRipp]/SEQUENCAGE" foreach U [lsort [array names RepDe]] { lappend LesRepDe [set RepDe($U)] } lappend LesRepDe "Other" if {$LocalDir==""} { FaireLire "Please browse for the local directory to store the tfa files" set LocalDir [tk_chooseDirectory -mustexist 1 -initialdir "./"] if {$LocalDir==""} { return "" } } if {[regexp "titus\:" $SourceDir] || ($SourceDir=="" && [OuiOuNon "Do I connect to titus to search for sequences ?"])} { global env if {$User==""} { set User [set env(USER)] } while { ! [OuiOuNon "Do I use User $User to connect to Titus ?"]} { set User [Entre $User] if {$User=="" && [OuiOuNon "Do I cancel GetMacSeq ?"]} { return "" } } set SourceDir "titus:/us1/user/SEQUENCEUR/[string totitle $User]" if {[info exists RepDe($User)]} { set SourceDir [set RepDe($User)] } while { ! [OuiOuNon "Do I search in \n$SourceDir directory ?"]} { set SourceDir [ChoixParmi $LesRepDe] if {$SourceDir!="Other" && $SourceDir!=""} { break } set SourceDir [Entre $SourceDir] if {$SourceDir=="" && [OuiOuNon "Do I cancel GetMacSeq ?" ]} { return "" } } regsub "^titus\:" $SourceDir "" UserDir set Dispos [exec rsh titus -l $User ls $UserDir/*.seq] if {$Dispos==""} { return "" } } elseif { $SourceDir!="" || [OuiOuNon "Do I browse for raw DNA files ?"]} { set Rep [tk_chooseDirectory -mustexist 1 -initialdir "[pwd]"] if {$Rep==""} { return "" } set Dispos [join [lsort [glob -nocomplain -type f "$Rep/*.seq"]] "\n"] } set LesChoix [MorceauxChoisis [split $Dispos "\n"]] set LesFichiersTFA {} set LesSeq {} foreach Choix $LesChoix { set Queue [file tail $Choix] regsub ".seq$" $Queue "" NomDeBapteme set Destin "$LocalDir/$NomDeBapteme.tfa" if {[file exists $Destin]} { if { ! [OuiOuNon "$Destin already exists.\n Do I overwrite ?"]} { continue } } set ChromaSurTitus "" if {[regexp "^titus\:" $SourceDir]} { set FichierSurTitus "$SourceDir/$Queue" Espionne $FichierSurTitus regsub ".seq$" $FichierSurTitus ".ab1" ChromaSurTitus set FiSeq [TmpFile].seq exec rcp $FichierSurTitus $FiSeq if { ! [file exists $FiSeq]} { FaireLire "Problem executing\nrcp $FichierSurTitus [TmpFile].seq" continue } set Seq [ContenuDuFichier $FiSeq] File delete -force $FiSeq } else { set Seq [ContenuDuFichier $Choix] } if {[regexp {\.\. *\n} $Seq]} { set TFA [SequenceFormatTFA $Seq $NomDeBapteme "gcgmaybe"] } else { regsub -all {[ \n\t0-9]} $Seq "" Seq if {[regexp -nocase {[^ATGCN]} $Seq]} { FaireLire "The sequence file $Choix contains illegal characters\n$Seq" } set TFA [SequenceFormatTFA $Seq $NomDeBapteme "nucbrut"] } set FichierTFA [Sauve $TFA dans $Destin] if {$ChromaSurTitus!=""} { regsub ".tfa$" $FichierTFA "" ChromaIci append ChromaIci ".ab1" if {[catch { exec rcp $ChromaSurTitus $ChromaIci } Message]} { FaireLire "I tried \nexec rcp $ChromaSurTitus $ChromaIci\and got the message\n$Message" } } lappend LesFichiersTFA $FichierTFA } return $LesFichiersTFA } proc GetMacsimSFromSql {Nom} { set Retour [SqlExec "select MACSIMSXML from MACSIMS where FREETEXT like '%GscopeID $Nom\n%'" "GetFirstValue"] Espionne $Retour exit } proc GetMailsFromDB {first last} { global db CMDef TMail set Lrep [$db eval {select m.uid, m.sender, m.subject, m.date, m.attachment, m.read, m.answered from mail as m, folder as f where f.pk_mailbox = $CMDef(pk_mailbox) and f.name = $CMDef(currFolder) and m.pk_folder = f.pk_folder and m.uid > $first and m.uid <= $last}] set Lmail [list] foreach {uid send subj date atta read answ} $Lrep { set send [DisplayFrom $send] set date [clock format $date -format "%G/%m/%d %H:%M:%S"] lappend Lmail [list $send $subj $date] lappend TMail(Read) $read lappend TMail(Answ) $answ lappend TMail(Atta) $atta lappend TMail(UID) $uid } return $Lmail } proc GetMailsFromServer {first last} { global CMDef db TMail FaireAttendre "Please wait ...\nLoading messages from server ..." set imapID $CMDef(imapID) set LfieldsIn [list uid from: to: Subject: date: flags bodystructure] set Lminfo [::imap4::fetch $imapID $first:$last -inline {*}$LfieldsIn] # now fill database and table set Lmails [list] $db eval {begin transaction} foreach Linfo $Lminfo { set Warn 0 lassign $Linfo uid from to subject date flags bodystructure # Treat infomation for both database and display set Lfrom [lmap w [split $from " "] { DecodeWord $w }] set from [join $Lfrom] set fromDis [DisplayFrom $from] set from [string map {' ''} $from] # get the epoch corresponding to date-time set date [string trim $date] if {$date ne ""} { #set date [::mime::parsedatetime $date clock] set date [::rfc2822::parseDate $date] set dateDis [clock format $date -format "%G/%m/%d %H:%M:%S"] } else { set dateDis "" set Warn 1 } # Subject: set subject [::mime::field_decode $subject] set subjectDis $subject set subject [string map {' ''} $subject] # treat flags set read 0 ; set answered 0 foreach flag $flags { switch -regexp -- $flag { {Seen} {set read 1} {Answered} {set answered 1} {Forwarded} {set forwarded 1} {Recent} {set read 0} default { puts "unkflag $flag" } } } # is there an attachment set isAtta [CheckAttachment $bodystructure] # To: set to [string map {' ''} $to] if {$isAtta} { # bullet \u2022 set v "*" } else { set v "" } # debug if {$Warn} { puts "\n$from\n$to\n$subject\n$flags" } # for display use lappend Lmails [list $v $fromDis $subjectDis $dateDis] lappend TMail(Read) $read lappend TMail(Answ) $answered lappend TMail(Atta) $isAtta lappend TMail(UID) $uid # for database insertion $db eval {insert into mail values(NULL,$CMDef(currFolderPk),$uid,$from,$to,$subject,$date,$isAtta,$read,$answered)} } $db eval {commit} FaireLaSuite return $Lmails } proc GetOrderOfAlignment {TexteOuNomOuFichierRSF {WhichOne ""}} { set Order [DessineMoiUnRSF $TexteOuNomOuFichierRSF "" "" "GetOrder"] if {$WhichOne==""} { set WhichOne "Normal" } if {[regexp -nocase "Alpha" $WhichOne]} { set Order [lsort -dictionary $Order] } if {[regexp -nocase "Rever" $WhichOne]} { set Order [lreverse $Order] } if {[regexp {[0-9]+} $WhichOne Match]} { set Order [lrange $Order 0 [incr Match -1]] } return $Order } proc GetOrga {PAB} { set entete [BenEnteteTFA $PAB] set mots [split $entete " "] set orga [concat [lindex $mots 2] [lindex $mots 3]] return $orga } proc GetPdbForNgl {{Access ""}} { return [TextePDB $Access All "" "OnTheWeb"] } proc GetPicture {} { foreach Ligne [LesLignesDuFichier GetPicture.html] { set F $Ligne set J [file tail $F] set D [file dirname $F] regsub ".JPG" $J ".jpg" j Espionne "$D/www*/thumbs/$j" set T [glob -nocomplain "$D/www*/thumbs/$j"] Espionne "T $T" if {$T==""} { continue } lappend LeHtml "
" lappend LeHtml "
" lappend LeHtml "
" lappend LeHtml "
" } SauveLesLignes $LeHtml dans GP.html exit } proc GetQS {Fichier} { set WQuery 1 set Query "" set Sujet "" foreach Ligne [LesLignesDuFichier $Fichier] { if {$WQuery && ! [regexp {^Query\:} $Ligne] } { continue } set WQuery 0 if {[regexp {^>} $Ligne]} { break } if {[regexp {^Query\:} $Ligne]} { scan $Ligne "%s %d %s %d" bidon D Q F append Query $Q continue } if {[regexp {^Sbjct\:} $Ligne]} { scan $Ligne "%s %d %s %d" bidon D S F append Sujet $S continue } } return [list $Query $Sujet] } proc GetRad {l} { global RadMol xc yc zc pgl foreach a {xc yc zc xm ym zm xx yx zx} { set $a 0.0 } foreach {a x} {xm 1. ym 1. zm 1. xx -1. yx -1. zx -1.} { set $a [expr {$x*999.0}] } foreach e $l { lassign $e x y z foreach a {x y z} b {xm ym zm} c {xx yx zx} { if {[set $a] < [set $b]} {set $b [set $a]} if {[set $a] > [set $c]} {set $c [set $a]} } } foreach a {xc yc zc} b {xm ym zm} c {xx yx zx} { set $a [expr {0.5 * ([set $c] + [set $b])}] } set RadMol -999999. set RadMol [expr {sqrt(($xx-$xm)**2 + ($yx-$ym)**2 + ($zx-$zm)**2) / 2.}] if {0} { foreach {xt yt zt} [list $xm $ym $zm $xx $yx $zx] { set d [expr {sqrt(($xt-$xc)*($xt-$xc) + ($yt-$yc)*($yt-$yc) + ($zt-$zc)*($zt-$zc))}] if {$d > $RadMol} {set RadMol $d} } } set pgl(xMin) $xm set pgl(yMin) $ym set pgl(zMin) $zm set pgl(xMax) $xx set pgl(yMax) $yx set pgl(zMax) $zx set pgl(xc) $xc set pgl(yc) $yc set pgl(zc) $zc if {0} { puts "radius : $RadMol" set fmt [format "Centre : %6.2f %6.2f %6.2f" $pgl(xc) $pgl(yc) $pgl(zc)] puts "$fmt" set fmt [format "Minimum : %6.2f %6.2f %6.2f" $pgl(xMin) $pgl(yMin) $pgl(zMin)] puts "$fmt" set fmt [format "Maximum : %6.2f %6.2f %6.2f" $pgl(xMax) $pgl(yMax) $pgl(zMax)] puts "$fmt" } return $RadMol } proc GetSignification {Couleur K} { global SignificationEnStock if {$Couleur == "ToutesLesCouleursPossibles"} { if {[info exists SignificationEnStock($K)]} { return [set SignificationEnStock($K)] } else { return "" } } if {[info exists SignificationEnStock($Couleur,$K)]} { return [set SignificationEnStock($Couleur,$K)] } else { return "" } } proc GetTables {{NameStart ""}} { return [$::db eval "select distinct(tbl_name) from sqlite_master where (type = \"table\") and (tbl_name like \"${NameStart}%\")"] } proc Get_covered {MAFFile1 MAFFile2 Get_coveredMafFile} { ### Execution du programme get_covered ### # prend deux fichiers maf en entree # # ? # if {![file exists $File1]} {Espionne "File1: $File1 does not exists" ; return} if {![file exists $File2]} {Espionne "File2: $File2 does not exists" ; return} #set Commande "exec [PATH get_covered] $File1 $File2 > $Get_coveredMafFile" set Commande "exec get_covered $File1 $File2 > $Get_coveredMafFile" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $Get_coveredMafFile } proc Getz {Access args} { set Tous [regexp {\|} $Access] set LesOptions {} if {$args=={}} { # set Banques "\{swissprot sptrembl\}" set Banques "\{uniprot\}" } else { set LesBanques {} set YaOption 0 foreach Banque $args { if {$YaOption} { set YaOption 0 lappend LesOptions $Banque continue } if {[regexp {^\-} $Banque]} { set YaOption 1 lappend LesOptions $Banque continue } set Banque [string tolower $Banque] if {[info exists DejaVu($Banque)]} { continue } set DejaVu($Banque) 1 lappend LesBanques "$Banque" } set Banques "\\{[join $LesBanques " "]\\}" } if {$LesOptions=={}} { set Options "-e" } else { set Options [join $LesOptions " "] } if {[regexp -nocase "Decrypthon" $Banques]} { set LesClefs [list "DR" "AccNumber" "ID" "DBxref"] } else { set LesClefs [list "AccNumber" "ID" "DBxref"] } foreach Clef $LesClefs] { if {$Clef=="DBxref" && ! [regexp -nocase {[A-Z]{3}[0-9]{4,}} $Access]} { return "" } if {$Clef=="DBxref"} { set Etoile "*" } else { set Etoile "" } set Commande "getz $Options \"\\\[$Banques-$Clef: $Access$Etoile\\\]\"" if {[info exists GetzOut]} { unset GetzOut } catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && [regexp -nocase {[a-z]} $GetzOut]} { if {$Tous || [regexp -nocase "Decrypthon" $Banques]} { return $GetzOut } else { return [UnSeulGetz $GetzOut] } } } return "" } proc GetzUniseq_GUI {K Access {Banques uniseq} {Link genbank} {Option AccessDef}} { Wup "Affiche grace a getz les liens dans Link pour les Access dans Banques" Wup "Option EntreeComplete == sortie getz de toute l entree" Wup "Option AccessDef == sortie getz avec juste Id et Def" set GetzOut [LeGetzUniseq $Access $Banques $Link $Option] if {$GetzOut==""} {set GetzOut "No link from $Banques to $Link available for [join $Access " "]"} set Fen [AfficheVariable $GetzOut "AvecFormateAvecBlaste" "$Banques to $Link"] if {$Link=="genbank"} { set FenB "$Fen.buttons" TouchePour $FenB NouvelleGamme TouchePour $FenB NouvelleCouleur "white" set B [TouchePour $FenB "Link GenBank To" ""] TouchePour $FenB NouvelleCouleur "green" TouchePour $FenB "Protein Sel" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] genbank protein All\]}" TouchePour <2> "/Id" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[selection get\] genbank protein\]}" TouchePour <3> "/All" "catch {SauveLesInfosDe $K Win \[GetzUniseq_GUI $K \[set PagePropre($Fen)\] genbank protein\]}" set Texte [format "%-10s" "To Link Genbank access to Protein access"] append Texte [format "\n%-10s" "Allows to retrieve access only (Id and all) or complete entry (Sel.)"] set_balloon $B "$Texte" $B configure -state disabled -disabledforeground "black" } return $Fen } proc GiToAccessWithBird {FichierEntree} { #set Fichier "/home/poch/pab87_rajout.liste" foreach Ligne [LesLignesDuFichier $FichierEntree] { if {$Ligne==""} { continue } lappend ListeGI [lindex $Ligne 0] } set LesGI [join $ListeGI ","] lappend LesLignes "ID $LesGI DB Entrez_protein" lappend LesLignes "FM FLAT" set FileBql [SauveLesLignes $LesLignes dans "[TmpFile].bql"] set FileTxt [TmpFile].txt BirdForceHoan $FileBql $FileTxt foreach LigneFic [LesLignesDuFichier $FileTxt] { if {[regexp "LOCUS" $LigneFic]} { lappend LesLignesResult $LigneFic } if {[regexp "DEFINITION" $LigneFic]} { lappend LesLignesResult $LigneFic } if {[regexp "VERSION" $LigneFic]} { lappend LesLignesResult $LigneFic lappend LesLignesResult "" } } SauveLesLignes $LesLignesResult dans "GiToAccess.txt" file delete $FileBql file delete $FileTxt } proc GiToAccessWithBirdOLD {} { # Nv database pour GI: Entrez_nucleotide et Entrez_protein set ListeGI [InterrogeListTau ListOf GI] set LesGI [join $ListeGI ","] lappend LesLignes "ID $LesGI DB Entrez_nucleotide" lappend LesLignes "FM FLAT" SauveLesLignes $LesLignes dans "/genomics/link/EVImm/Tau/requeteessaiNuc.bql" } proc GiveMeThisOrthologs {nomRepertoireDesBlast {listeDesOrgasAAnalyser ""} {outputType ""} {seuilExpect ""} {proteomeFasta ""}} { global RepertoireDuGenome set listeBlast [ListeDesPABs2] set RepBlast "$RepertoireDuGenome/$nomRepertoireDesBlast" array set putOrtho {} array set putOrthoOrga {} array set putOrthoAnalysed {} array set noHomology {} array set noHitsIn {} #Variables par défaut if {$seuilExpect==""} {set seuilExpect 0.001} if {$proteomeFasta==""} {set proteomeFasta "proteomeToBlast.fasta"} if {$outputType=="" || $outputType=="toLogs"} {set outputType 1} if {$outputType=="toScreen"} {set outputType 0} #pour essais, limitation des boucles set debut 0 set fin [llength $listeBlast] #set aTester {{0 100} {15000 15100} {30000 30100}} #set aTester {{76733 76738}} set aTester [list [list 0 $fin]] set enModeTest 0 puts "###debut : [Maintenant]" #l'analyse va se faire en plusieurs temps #on va la faire plusieurs fois, chaque fois par rapport à un autre organisme #on aura donc pr chaque proteine d'un orga Oj, les relation de paralogie vis #à vis de O1,O2...Oj ############################################################################# set listeOrgas [ConcernedOrganisms $proteomeFasta] puts " -->Voici la liste des organismes détectés :" foreach o $listeOrgas { puts " - $o" } puts " Si l'un des organismes apparait plusieurs fois, corrigez vos fichiers !" puts " ex: Xenopus (Silurana) ==>> Xenopus tropicalis" #Si on ne veut que certains des organismes if {$listeDesOrgasAAnalyser!=""} { if {[llength $listeDesOrgasAAnalyser]<2} { puts "ERREUR !!!!! vous devez spécifier AU MOINS 2 organismes valides" exit } #on vérif que tous les orgas donnés existent bien dans les protéomes initiaux foreach elt $listeDesOrgasAAnalyser { if {[lsearch -exact $listeOrgas $elt]==-1} { puts "ERREUR !!!!! un des organismes n'est pas dans la base --> $elt" exit } } set listeOrgas $listeDesOrgasAAnalyser } puts " -->Voici la liste des organismes demandés pour l'analyse :" foreach o $listeOrgas { puts " - $o" } #chargement des bornes des organismes puts " -->Chargement des bornes des organismes (/fiches/lienspabparorga)" set FICBORNES [open "$RepertoireDuGenome/fiches/lienspabparorga" "r"] while {[gets $FICBORNES line]!=-1} { if {[string index $line 0]=="#"} {continue} set infos [split $line ";"] set bornes([lindex $infos 0]) [list [lindex $infos 2] [lindex $infos 3]] } close $FICBORNES #liste des numéros de pab qui vont être analysés (seulement ceux des organismes concernés set listeComplete {} foreach couple $aTester { puts " * Rangs à analyser : $couple" for {set i [lindex $couple 0]} {$i<[lindex $couple 1]} {incr i} { lappend listeComplete $i } } if {$enModeTest!=1} { set listeComplete {} foreach {key val} [array get bornes] { if {[lsearch -exact $listeOrgas $key]!=-1} { puts " $key : blasts [lindex $bornes($key) 0] à [lindex $bornes($key) 1]" for {set i [lindex $bornes($key) 0]} {$i<[expr [lindex $bornes($key) 1]+1]} {incr i} { lappend listeComplete $i } } } } puts " --> [llength $listeComplete] sorties blast vont etre analysées" puts "#####################################################################" puts " --> Analyse des hits des blasts" foreach num $listeComplete { #variables d'état set sameOrga 1 set previousOrga "" if {![info exists onEstSur] } {set onEstSur ""} set hitOrthoNum 1 array set tabHit {} #analyse du blast set i $num set queryPAB [lindex $listeBlast [expr $i-1]] set fileName "$RepBlast/$queryPAB" set resumeDuBlast [LesHitsDuBlast $fileName $seuilExpect] #extraction infos query ######################## set queryDescription [BenEnteteTFA $queryPAB] set mots [split $queryDescription " "] set queryOrga [concat [lindex $mots 2] [lindex $mots 3]] set queryAccess [lindex $mots 1] #si le blast n'est pas d'une proteine dans notre liste d'organismes if {[lsearch -exact $listeOrgas $queryOrga]==-1} {continue} if {$queryOrga!=$onEstSur} { puts " - Passage aux blasts de $queryOrga [Maintenant]" } set onEstSur $queryOrga #analyse des hits ################### ## comme on ne considere pas certains organisme; le numero du hit sera donc décalé set decalage 0 for {set hitNum 1} {$hitNum<[expr [llength $resumeDuBlast]+1]} {incr hitNum} { set currentHit [lindex $resumeDuBlast [expr $hitNum-1]] #extraction infos du hit set hitPAB [lindex $currentHit 0] set hitAccess [lindex $currentHit 1] set mots [split $currentHit " "] set hitOrga [concat [lindex $mots 2] [lindex $mots 3]] set currentExpect [lindex $mots end] #si le hits n'est pas sur un organisme à analyser, on zappe if {[lsearch -exact $listeOrgas $hitOrga]==-1} { incr decalage -1 continue } #comparaison organismes : des qu'on arrive dans un hit sur un orga different #on passe à 0. Permet de reperer les eventuels in-paralogues if {$queryOrga!=$hitOrga} {set sameOrga 0} #si le hit est vers lui-meme, on zappe if {$queryPAB==$hitPAB} {continue} #On note quel est l'organisme en question, on incrementera le compteur #quand on a un autre hit pour cette organisme if {![info exists countOrga($hitOrga)] || ($countOrga($hitOrga)==0)} { set countOrga($hitOrga) 1 } else { incr countOrga($hitOrga) } #si on respect le seuil d'expect if {$currentExpect<=$seuilExpect} { #si orga different if {!$sameOrga && $queryOrga!=$hitOrga} { #si c'est le premier hit sur un organisme particulier, #putOrthoAnalysed($queryPAB,$hitPAB) n'existe pas, on le note 1 #le second (putOrthoAnalysed($queryPAB,$hitPAB) existe) est noté 2 ... etc ... if {[info exists putOrthoAnalysed($queryPAB,$hitPAB)]} { continue } set putOrthoAnalysed($queryPAB,$hitPAB) [list [expr $hitNum+$decalage] $countOrga($hitOrga) $hitOrga] lappend putOrtho($queryPAB) $hitPAB #puts "putOrtho($queryPAB) $hitPAB : $putOrtho($queryPAB)" lappend putOrthoOrga($queryPAB) $hitOrga #puts "putOrthoOrga($queryPAB) $hitOrga : $putOrthoOrga($queryPAB)" #puts "putOrthoAnalysed($queryPAB,$hitPAB) [expr $hitNum+$decalage] $countOrga($hitOrga) $hitOrga" } } } #si un des organisme n'est pas visé par la query, son countOrga($key) #sera toujours à zero ou non initialisé foreach orga $listeOrgas { if {$orga==$queryOrga} {continue} if {[info exists putOrthoOrga($queryPAB)]} { if {[lsearch -exact $putOrthoOrga($queryPAB) $orga]==-1} { lappend noHitsIn($queryPAB) $orga } } } #si putOrtho($queryPAB) n'existe pas, on a pas de hit vers un organisme autre #on retient les proteines qui n'ont donc pas d'homologie du tout if {![info exists putOrtho($queryPAB)]} { set noHomology($queryPAB) 1 #puts "noHomology($queryPAB) : $noHomology($queryPAB)" } #remise à 0 du compteur d'organismes après chaque blast foreach {key val} [array get countOrga] { set countOrga($key) 0 } } #Alignements pipealin #LaunchPipesForGroups putInPara putOrtho $debut $fin puts " --> Création des couples d'orthologues avec RBH" #Recherche des groupes d'ortho avec best hit reciproque #le tableau se presente comme suit : # tab(A,B)= {orga1 orga2} la query A (orga1) a fait best hit reciproque sur le hit B (orga2) # tab(B,A)= {orga2 orga1} est juste le symetrique array set reciprocalHitOrtho {} foreach PABs $listeBlast { if {[info exists putOrtho($PABs)]} { foreach PAB $putOrtho($PABs) { #pour zapper le best hit dans le sens inverse if {[info exists reciprocalHitOrtho($PABs,$PAB)] || [info exists reciprocalHitOrtho($PAB,$PABs)]} {continue} #si les hits dans les 2 sens existent et qu'ils sont les bests (=1) if {[info exists putOrthoAnalysed($PABs,$PAB)] && [info exists putOrthoAnalysed($PAB,$PABs)] && ([lindex $putOrthoAnalysed($PABs,$PAB) 1]==1) && ([lindex $putOrthoAnalysed($PAB,$PABs) 1]==1)} { lappend reciprocalHitOrtho($PABs,$PAB) [lindex $putOrthoAnalysed($PAB,$PABs) 2] lappend reciprocalHitOrtho($PABs,$PAB) [lindex $putOrthoAnalysed($PABs,$PAB) 2] lappend reciprocalHitOrtho($PAB,$PABs) [lindex $putOrthoAnalysed($PABs,$PAB) 2] lappend reciprocalHitOrtho($PAB,$PABs) [lindex $putOrthoAnalysed($PAB,$PABs) 2] } } } } #puts " --> Création des tri-clusters d'orthologues" #Creation des Regroupements par 3 array set triCluster {} #foreach A $listeBlast { # if {[info exists putOrtho($A)]} { # foreach Xa $putOrtho($A) { # foreach Xb $putOrtho($A) { # if {[info exists reciprocalHitOrtho($Xa,$Xb)] && [info exists reciprocalHitOrtho($Xb,$Xa)] } { # if {[info exists reciprocalHitOrtho($Xa,$A)] && [info exists reciprocalHitOrtho($A,$Xa)] # && [info exists reciprocalHitOrtho($Xb,$A)] && [info exists reciprocalHitOrtho($Xa,$Xb)]} { # #on cree le tri-cluster # set triCluster($A,$Xa,$Xb) [list [info exists reciprocalHitOrtho($A,$Xa)] # [info exists reciprocalHitOrtho($Xa,$A)] # [info exists reciprocalHitOrtho($Xb,$A)]] # } # } # } # } # } #} puts "###fin de l'algorithme: [Maintenant]" puts "###creation du fichier homology.csv + orthology.csv" puts "###creation du fichier no_homology.csv + no_orthology.csv" CreateOrthologyDatas reciprocalHitOrtho putOrthoAnalysed noHomology noHitsIn puts "###creation du fichier achevée [Maintenant]" puts "###affichage/creation des logs des résultats" ShowOrthologyResults reciprocalHitOrtho triCluster putOrthoAnalysed $outputType puts "###fin des affichage/creation [Maintenant]" } proc GiveMeThisParalogs {nomRepertoireDesBlast listeDesOrgasAAnalyser {outputType ""} {pipealign ""} {seuilExpect ""} {proteomeFasta ""}} { global RepertoireDuGenome set listeBlast [ListeDesPABs2] set RepBlast "$RepertoireDuGenome/$nomRepertoireDesBlast" #Variables par défaut if {$outputType=="" || $outputType=="toLogs"} {set outputType 1} if {$outputType=="toScreen"} {set outputType 0} if {$pipealign==""} {set $pipealign "F"} if {$seuilExpect==""} {set seuilExpect 0.001} if {$proteomeFasta==""} {set proteomeFasta "$RepertoireDuGenome/proteomeToBlast.fasta"} #pour essais, limitation des boucles set debut 0 set fin [llength $listeBlast] #set aTester {{1938 1940} {2765 2767} {22395 22397} {32525 32527} {34401 34403}} #set aTester {{1900 1903}} set aTester [list [list 0 $fin]] set enModeTest 0 puts "###debut : [Maintenant]" #l'analyse va se faire en plusieurs temps #on va la faire plusieurs fois, chaque fois par rapport à un autre organisme #on aura donc pr chaque proteine d'un orga Oj, les relation de paralogie vis #à vis de O1,O2...Oj ############################################################################# set listeOrgas [ConcernedOrganisms $proteomeFasta] puts " -->Voici la liste des organismes disponibles :" foreach o $listeOrgas {puts " - $o"} puts " Si l'un des organismes apparait plusieurs fois, corrigez vos fichiers !" puts " ex: Xenopus (Silurana) ==>> Xenopus tropicalis" #Si on ne veut que certains des organismes if {$listeDesOrgasAAnalyser!=""} { if {[llength $listeDesOrgasAAnalyser]<2} { puts "ERREUR !!!!! vous devez spécifier AU MOINS 2 organismes valides" exit } #on vérif que tous les orgas donnés existent bien dans les protéomes initiaux foreach elt $listeDesOrgasAAnalyser { if {[lsearch -exact $listeOrgas $elt]==-1} { puts "ERREUR !!!!! un des organismes n'est pas dans la base --> $elt" exit } } set listeOrgas $listeDesOrgasAAnalyser } puts " -->Voici la liste des organismes demandés pour l'analyse :" foreach o $listeOrgas {puts " - $o" } #chargement des bornes des organismes puts " -->Chargement des bornes des organismes (/fiches/lienspabparorga)" set FICBORNES [open "$RepertoireDuGenome/fiches/lienspabparorga" "r"] while {[gets $FICBORNES line]!=-1} { if {[string index $line 0]=="#"} {continue} set infos [split $line ";"] set bornes([lindex $infos 0]) [list [lindex $infos 2] [lindex $infos 3]] } close $FICBORNES #liste des numéros de pab qui vont être analysés (seulement ceux des organismes concernés) set listeComplete {} foreach couple $aTester { puts " * Rangs à analyser : $couple" for {set i [lindex $couple 0]} {$i<[lindex $couple 1]} {incr i} { lappend listeComplete $i } } if {$enModeTest!=1} { set listeComplete {} foreach {key val} [array get bornes] { if {[lsearch -exact $listeOrgas $key]!=-1} { puts " $key : blasts [lindex $bornes($key) 0] à [lindex $bornes($key) 1]" for {set i [lindex $bornes($key) 0]} {$i<[expr [lindex $bornes($key) 1]+1]} {incr i} { lappend listeComplete $i } } } } puts " --> [llength $listeComplete] sorties blast vont etre analysées" ################################################################################################### puts "#####################################################################" puts " --> Analyse des hits des blasts (étape trèèèès longue, environ 1h pour 30000 blast)" foreach num $listeComplete { set i $num #variables d'état set previousOrga "" if {![info exists onEstSur] } {set onEstSur ""} set fileName "$RepBlast/[lindex $listeBlast [expr $i-1]]" #puts $fileName array set tabBlast {} array set tabHit {} #analyse du blast DepouilleLeBlast2 tabBlast $fileName #extraction infos query set queryDescription $tabBlast(Query) set mots [split $queryDescription " "] set queryOrga [concat [lindex $mots 2] [lindex $mots 3]] ###PATCH###################################################################### if {$queryOrga=="Xenopus (Silurana)" || $queryOrga=="Xenopus _Silurana_"} {set queryOrga "Xenopus tropicalis"} ###/PATCH###################################################################### set queryPAB [lindex $mots 0] set queryAccess [lindex $mots 1] #si le blast n'est pas d'une proteine dans notre liste d'organismes if {[lsearch -exact $listeOrgas $queryOrga]==-1} {continue} if {$queryOrga!=$onEstSur} { puts " - Passage aux blasts de $queryOrga [Maintenant]" } set onEstSur $queryOrga puts [expr $tabBlast(NbSubject)+1] #analyse des hits ################### ## comme on ne considere pas certains organisme; le numero du hit sera donc décalé set decalage 0 for {set hitNum 1} {$hitNum<[expr $tabBlast(NbSubject)+1]} {incr hitNum} { #extraction infos du hit set ID $tabBlast($hitNum) set hitAccess $tabBlast($ID,Access) set hitBrut $tabBlast($ID,SubjectBrut) set mots [split $hitBrut " "] regexp {>(.*)} [lindex $mots 0] foo hitPAB set hitDefinition $tabBlast($ID,Definition) set mots [split $hitDefinition " "] set hitOrga [concat [lindex $mots 0] [lindex $mots 1]] ###PATCH###################################################################### if {$hitOrga=="Xenopus (Silurana)" || $hitOrga=="Xenopus _Silurana_"} {set hitOrga "Xenopus tropicalis"} ###/PATCH###################################################################### #si le hits n'est pas sur un organisme à analyser, on zappe if {[lsearch -exact $listeOrgas $hitOrga]==-1} { incr decalage -1 continue } set description "" for {set m 2} {$m<[llength $mots]} {incr m} { append description "[lindex $mots $m]" } #on ajoute ce hit à la liste complete des PAB rencontrés pour ce blast lappend tabHit($queryPAB) $hitPAB lappend tabHitOrga($queryPAB) $hitOrga #On note quel est l'organisme en question, on incrementera le compteur #quand on a un autre hit pour cette organisme #si l'organisme n'a pas encore été rencontré ou si c un nouveau blast, on part à 1 if {![info exists countOrga($hitOrga)] || ($countOrga($hitOrga)==0)} { set countOrga($hitOrga) 1 } else { incr countOrga($hitOrga) } #tests sur les segments HSP for {set hsp 1} {$hsp<[expr $tabBlast($ID,NbSegment)+1]} {incr hsp} { #si on respect le seuil d'expect if {$tabBlast($ID,$hsp,Expect)<=$seuilExpect} { #servira a la creation de no_hits_in_orga if {[info exists matrice([expr $hitNum+$decalage],$countOrga($hitOrga),$hitOrga)]} {continue} if {![info exists expectOK($queryPAB,[expr $hitNum+$decalage])]} { set expectOK($queryPAB,[expr $hitNum+$decalage]) $tabBlast($ID,$hsp,Expect) } set matrice([expr $hitNum+$decalage],$countOrga($hitOrga),$hitOrga) $hitPAB #puts "[expr $hitNum+$decalage], $countOrga($hitOrga), $hitOrga : # $hitPAB : $tabBlast($ID,$hsp,Expect) < $seuilExpect" } } } #tous les hits pour ce PAB sont analysés ############################################### #remise à 0 du compteur lié aux organismes foreach {key val} [array get countOrga] {set countOrga($key) 0} #remise à 0 du décalage set decalage 0 #création des listes d'inPara/orgas #################################### #les listes résultantes seront de la forme #listeDesRapportsInPara(PAB,organismeSeuil)={PAB1, PAB2, PAB3,...} array set listeDesRapportsInPara {} foreach orga $listeOrgas { #si c'est lui meme, on zappe if {$orga==$queryOrga} {continue} #si il n'y avait aucun hit tout court if {![info exists tabHit($queryPAB)]} {continue} set nbreHit [llength $tabHit($queryPAB)] set limitFounded 0 for {set i 0} {$i<$nbreHit} {incr i} { #si on tombe sur l'orga seuil, on quitte la boucle if {[info exists matrice([expr $i+1],1,$orga)]} {set limitFounded 1} #si la premiere occurence de l'orga seuil arrive lorsque qu'on a deja #depassé le seuil d'expect, c'est comme si il n'était pas là if {[info exists expectOK($queryPAB,[expr $i+1])]} { if {$limitFounded && $expectOK($queryPAB,[expr $i+1])>$seuilExpect} { #puts "aucun hit sur $orga pour $queryPAB, PAR LIMITE DE SEUIL" array unset listeDesRapportsInPara "$queryPAB,$orga" } } #sinon on rempli la liste if {!$limitFounded} { #si c bien une seq du meme orga if {[lindex $tabHitOrga($queryPAB) $i]==$queryOrga} { #si le seuil a été respecté (on met i+1 car les hits sont comptabilisés de 1 à n precedement) if {[info exists expectOK($queryPAB,[expr $i+1])]} { if {$expectOK($queryPAB,[expr $i+1])<=$seuilExpect} { lappend listeDesRapportsInPara($queryPAB,$orga) [lindex $tabHit($queryPAB) $i] } } } } else {break} } } #passage au PAB suivant array unset matrice array unset expectOK } #regroupement des differents rapports pour valider l'in-paralogie ################################################################################ #tri des relation ou + que 1 vers lui-meme foreach {key liste} [array get listeDesRapportsInPara] { set keys [split $key ","] if {[lindex $keys 0]!=[lindex $liste 0]} { putLog "ca sent le roussi : $key --> '$liste'" "caSentLeRoussi.log" } if {[llength $liste]!=1} { set listeDesRapportsInPara($key) [lsort -dictionary $liste] #on marque qu'il a été trié set rapportsInParaTries($key) 1 } } #recherche des listes communes organisme par organisme array set rapportsInParaValides {} array set rapportsInParaRejetes {} array set sansRapportsInPara {} foreach {key val} [array get rapportsInParaTries] { if {[info exists listeDesRapportsInPara($key)]} { set celuiDeBase [lindex [split $key ","] 0] set orga [lindex [split $key ","] 1] set listeAAnalyser $listeDesRapportsInPara($celuiDeBase,$orga) #si les inparas ont déjà été validé par un autre $celuiDeBase if {[info exists rapportsInParaValides($listeAAnalyser,$orga)]} {continue} #on recherche si pour chaque element Xn de la liste A , la liste B correspondant à ce #meme element Xn est similaire set countOK 0 foreach PAB1 $listeAAnalyser { #on zappe lui-meme if {$PAB1==$celuiDeBase} { incr countOK continue } if {[info exists listeDesRapportsInPara($PAB1,$orga)]} { #on cherche si une meme liste/ss-liste existe pour chaque PAB de la liste set countOKpourSL 0 foreach PAB2 $listeAAnalyser { if {[lsearch -exact $listeDesRapportsInPara($PAB1,$orga) $PAB2]!=-1} { incr countOKpourSL } } #si le nombre dans la sous-liste correspond bien au nombre de la liste #c'est qu'on a vérif toutes les correspondances avec succés #on a donc un un succés de plus pour la listeAAnalyser if {$countOKpourSL==[llength $listeAAnalyser]} {incr countOK} } } #tri selon le résultat $countOK/$aTrouver set aTrouver [llength $listeAAnalyser] if {$countOK==$aTrouver && $aTrouver>1} { set rapportsInParaValides($listeAAnalyser,$orga) "$countOK/$aTrouver" #puts "rapportsInParaValides($listeAAnalyser,$orga) $countOK/$aTrouver" } elseif {$aTrouver==1} { set sansRapportsInPara($celuiDeBase,$orga) "$countOK/$aTrouver" } else { set rapportsInParaRejetes($celuiDeBase,$listeAAnalyser,$orga) "$countOK/$aTrouver" } } } puts "###fin des calculs [Maintenant]" puts "###creation des fichiers paralogy.csv / no_paralogy.csv / partial_paralogy.csv" CreateParalogyDatas rapportsInParaValides rapportsInParaRejetes sansRapportsInPara puts "###creation du fichier achevée [Maintenant]" puts "###affichage/creation des logs des résultats" ShowParalogyResults rapportsInParaValides rapportsInParaRejetes sansRapportsInPara $outputType puts "###fin des affichage/creation [Maintenant]" ### Option pipealign CREATION DES ALIGNEMENTS POUR TOUS LES GROUPES D'IN-PARA ############################################################################### if {$pipealign=="T"} { puts " et debut du pipe: [Maintenant]" LaunchPipesForInParas sansDoublons puts "###fin du pipe: [Maintenant]" } } 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 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 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 GlimmersPerdus {{Quoi LesPerdus}} { set n 0 foreach G [ListeDesGLIMMERs] { if { ! [regexp "EstCharge" [CoGlimmer $G]]} { continue } lappend LesPerdus $G set Debut [Box $G debut] set Fin [Box $G fin] set Orient [Box $G orient] set Long [expr abs($Fin-$Debut+1)] if {$Long<300} { lappend LesPerdusPetits "$G $Long" } else { lappend LesPerdusGrands "$G $Long" } } return "[set $Quoi]\n[llength [set $Quoi]]" } proc GlobRecursif {{Pattern ""} {Directory ""} {DirOnly ""} {FollowLinks ""}} { set FollowLinks [string equal -nocase $FollowLinks "FollowLinks"] if {$Directory==""} { set Directory "." } if {$Pattern==""} { set Pattern "*" } set GlobRecursif {} if {$DirOnly=="DirOnly"} { foreach Dir [glob -nocomplain -type "d" -- [file join $Directory $Pattern]] { if { ! $FollowLinks && [file type $Dir]=="link"} { continue } lappend GlobRecursif $Dir } } else { #ici on peut aussi choper les dir si pattern matche une dir foreach Local [lsort -unique [glob -nocomplain -- [file join $Directory $Pattern]]] { if {! $FollowLinks && [file type $Local]=="link"} { continue } set Local [encoding convertto [encoding system] $Local] lappend GlobRecursif $Local } } foreach Dir [lsort -unique [glob -nocomplain -type "d" -- [file join $Directory *]]] { if { ! $FollowLinks && [file type $Dir]=="link"} { continue } set Dir [encoding convertto [encoding system] $Dir] foreach SousLocal [GlobRecursif $Pattern $Dir $DirOnly] { lappend GlobRecursif $SousLocal } } return $GlobRecursif } proc Glossaire {{Organisme ""} {Champ ""} {ChampSiOrgaSur2 ""}} { global Glossaire FichierGlossaire global GlossaireDesClasses global OrganismePrioritaire #rR Pour plus qu'il se plante on rend la meme chose if {[FileAbsent $FichierGlossaire]} { return $Organisme } if {$Organisme==""} { set Organisme "ListOf"; set Champ "All" } set OOri $Organisme; set COri $Champ; if {$Organisme=="Reset"} { if {[info exists Glossaire]} { unset Glossaire } return "" } if {$ChampSiOrgaSur2!=""} { set Organisme "$Organisme $Champ" set Champ $ChampSiOrgaSur2 } if {$Champ==""} { set Champ "Complet" } regsub " sp$" $Organisme " sp." Organisme regsub -all -nocase {[^a-z0-9_\-'\.]} $Organisme " " Organisme set Organisme [OrthographeCanonique $Organisme] set Organisme [OrganismePrioritaire $Organisme] if {$Organisme=="" || $Organisme=="Unknown unknown" || $Organisme=="uunk" || $Organisme=="unkn" } { set Organisme "Inconnu inconnu" } regsub " " $Organisme "_" OrgaUnderscore if {[info exists Glossaire($OrgaUnderscore,$Champ)]} { return [set Glossaire($OrgaUnderscore,$Champ)] } set OrgaUnderscore [string totitle $OrgaUnderscore] if {[info exists Glossaire($OrgaUnderscore,$Champ)]} { return [set Glossaire($OrgaUnderscore,$Champ)] } set ORGANISME [string toupper $Organisme] if {[info exists Glossaire($ORGANISME,MonComplet)]} { return [Glossaire $Glossaire($ORGANISME,MonComplet) $Champ] } if {[info exists Glossaire("EstCharge")]} { return "" } set Glossaire("EstCharge") 1 #rR Attention: if Organisme has : it's a list of organisms if {0 && [regexp ":" $Organisme]} { foreach O [SplitOrgas $Organisme] { lappend GlosO [Glossaire $O $Champ] } return [join $GlosO ":"] } set Espece "" scan $Organisme "%s %s" Genre Espece set Organisme $Genre if {$Espece!=""} { append Organisme " $Espece" } if {[regexp -nocase {(^hsp|^H\.sp)[\.]*$} $Organisme]} { set Organisme "Halobacterium sp" } if {[regexp -nocase {(^bsp|^B\.sp)[\.]*$} $Organisme]} { set Organisme "Buchnera sp" } if {[regexp -nocase {(^ssp|^S\.sp)[\.]*$} $Organisme]} { set Organisme "Synechocystis sp" } if {[regexp -nocase {(^mtub|^M\.tub)$} $Organisme]} { set Organisme "Mycobacterium tuberculosis" } if {[regexp -nocase {(^rpro|^R\.pro)$} $Organisme]} { set Organisme "Rickettsia prowazekii" } if {[regexp -nocase {(^mthe|^M\.the)$} $Organisme]} { set Organisme "Methanobacterium thermoautotrophicum" } if {[regexp -nocase {^M.thermoautotrop} $Organisme]} { set Organisme "Methanobacterium thermoautotrophicum" } if {[regexp -nocase {^paer$} $Organisme]} { set Organisme "Pseudomonas aeruginosa" } if {[regexp -nocase {^pae$} $Organisme]} { set Organisme "Pyrobaculum aerophilum" } if {[regexp -nocase {^upar$} $Organisme]} { set Organisme "Ureaplasma urealyticum" } if {[regexp -nocase {^rmel$} $Organisme]} { set Organisme "Sinorhizobium meliloti" } if {[regexp -nocase {^rlot$} $Organisme]} { set Organisme "Mesorhizobium loti" } # if {[info exists Glossaire($Organisme,$Champ)]} { return [set Glossaire($Organisme,$Champ)] } foreach Ligne [LesLignesDuFichier "$FichierGlossaire.classes"] { scan $Ligne "%s %s" Genre Espece set Classe [join [lrange [split $Ligne " "] 2 end] " "] set GlossaireDesClasses(${Genre}_$Espece) $Classe } set i 0 set ListeDuGlossaire [LesLignesDuFichier $FichierGlossaire] set LongGlossaire [llength $ListeDuGlossaire] foreach Ligne $ListeDuGlossaire { lappend Glossaire(ListOf,All) $Ligne set lili [split $Ligne "\t"] set Court [lindex $lili 0] set Complet [lindex $lili 1] set COMPLET [string toupper $Complet] set Pointe [lindex $lili 2] set Demi [lindex $lili 3] set Couleur [Nuance [expr {[incr i]*1.0/$LongGlossaire}]] set Angle [expr {$i*2*3.141592/$LongGlossaire}] regsub " " $Complet "_" Orga regsub {\.$} $Court "" Court set Glossaire($Orga,Orga) $Orga set Glossaire($Orga,Court) $Court set Glossaire($Orga,Complet) $Complet set Glossaire($Orga,COMPLET) $COMPLET set Glossaire($Orga,Pointe) $Pointe set Glossaire($Orga,Demi) $Demi set Glossaire($Orga,Couleur) $Couleur set Glossaire($Orga,Angle) $Angle set Glossaire($Orga,Tout) ":$Court:$Complet:$COMPLET:$Pointe:$Demi:$Orga:" if {[info exists GlossaireDesClasses($Orga)]} { set Classe [set GlossaireDesClasses($Orga)] } else { set Classe "ClassUnknown" } set Glossaire($Orga,Classe) $Classe lappend Glossaire(ListOf,Organismes) $Orga lappend Glossaire(ListOf,Complet) [set Glossaire($Orga,Complet)] lappend Glossaire(ListOf,Entier) [set Glossaire($Orga,Tout)] } set Glossaire(Pyrobaculum_aerophilum,Court) "pae" set Orga "Inconnu_inconnu" set Glossaire($Orga,Orga) $Orga set Glossaire($Orga,Court) "iinc" set Glossaire($Orga,Complet) "Inconnu inconnu" set Glossaire($Orga,COMPLET) "INCONNU INCONNU" set Glossaire($Orga,Pointe) "I.inconnu" set Glossaire($Orga,Demi) "Inco.incon" set Glossaire($Orga,Couleur) grey set Glossaire($Orga,Angle) 5. set Glossaire($Orga,Tout) ":Inconnu:Inconnu inconnu:INCONNU INCONNU:I.inconnu:Inco.incon:$Orga:" set Glossaire($Orga,Classe) "ClassUnknown" lappend Glossaire(ListOf,Organismes) $Orga lappend Glossaire(ListOf,Complet) [set Glossaire($Orga,Complet)] lappend Glossaire(ListOf,Entier) [set Glossaire($Orga,Tout)] foreach Orga $Glossaire(ListOf,Organismes) { if { ! [regexp -nocase {[a-z]} $Orga]} { continue } foreach Field [split $Glossaire($Orga,Tout) ":"] { if {$Field==""} { continue } set FIELD [string toupper $Field] if {$FIELD==[string toupper $Orga]} { continue } lappend Glossaire(ListOf,FIELD) $FIELD set Glossaire($FIELD,MonComplet) $Orga } } set Glossaire(ListOf,FIELD) [lsort -unique $Glossaire(ListOf,FIELD)] if {[string equal -nocase $Champ "Couleur"] } { return "grey" } return [Glossaire $OOri $COri] #rR ****************************************************** Wup "Faudra faire la suite proprement" set OrgaInconnu "Inconnu_inconnu" if {[info exists Glossaire($OrgaInconnu,$Champ)]} { return [set Glossaire($OrgaInconnu,$Champ)] } return "" } proc GnDesFromEnsembl {IdEnsemblProt TypeEnsembl Orga Quoi {Short ""}} { #avant utilisais [ContenuDuFichier $UrlId] mais ne marche plus avec une adresse incomplete (http://www.ensembl.org/Homo_sapiens/Gene/Summary?g=ENSG00000211592) mais que avec l'adresse complete (http://www.ensembl.org/Homo_sapiens/Gene/Summary?g=ENSG00000211592;r=2:89156674-89157196;t=ENST00000390237) Mais on ne connait pas cette 2eme partie de l'adresse donc ca ne marche plus, donc luc a cree GetEnsemblWeb pour regler ce probleme global GnDesFromEnsembl if {$TypeEnsembl==""} { set TypeEnsembl "test" } set TypeEnsembl [string tolower $TypeEnsembl] if {[regexp -nocase "Gn" $Quoi] && [info exists GnDesFromEnsembl($IdEnsemblProt,$TypeEnsembl,$Orga,Gn)]} { return $GnDesFromEnsembl($IdEnsemblProt,$TypeEnsembl,$Orga,Gn) } if {[regexp -nocase "Des" $Quoi] && [info exists GnDesFromEnsembl($IdEnsemblProt,$TypeEnsembl,$Orga,Des)]} { return $GnDesFromEnsembl($IdEnsemblProt,$TypeEnsembl,$Orga,Des) } #Orga peut etre Gallus_gallus, Homo_sapiens, Mus_musculus, Saccharomyces_cerevisiae #Quoi peut etre Gn Des ou GnDes on rend le premier trouve set type "" if {[regexp -nocase "gene" $TypeEnsembl]} { set type "g" } if {[regexp -nocase "transcript" $TypeEnsembl]} { set type "t" } if {[regexp -nocase "protein" $TypeEnsembl]} { set type "p" } if {[regexp -nocase "test" $TypeEnsembl]} { if {[regexp -nocase {ENS[A-Z]*([A-Z])[0-9]+} $IdEnsemblProt Match Lettre]} { set type [string tolower $Lettre] } } if {$type==""} {FaireLire "TypeEnsembl must be gene or transcript or protein or test ($IdEnsemblProt)"; return ""} set Site "http://www.ensembl.org" set Url "$Site/$Orga/Gene/Summary?$type=" set UrlId "$Url$IdEnsemblProt" #set Texte [ContenuDuFichier $UrlId] set Texte [GetEnsemblWeb $UrlId] if {[regexp -nocase "Gn" $Quoi]} { set Panel [StringSuivant "class=\"panel js_panel" dans $Texte] set Zone [StringSuivant "
Name
" dans $Panel] set Ligne [ValeurDeLaBalise "a" Zone] set Gn $Ligne #set Gn [lindex [split $Ligne " "] 1] #set Gn [string trim $Gn " \n\t"] if {$Short=="Short"} { regsub -all -nocase {[^a-z0-9_\-\+\(\)]} [string range $Gn 0 19] "_" Gn } set GnDesFromEnsembl($IdEnsemblProt,$TypeEnsembl,$Orga,Gn) $Gn if {$Gn!=""} { return $Gn } } if {[regexp -nocase "Des" $Quoi]} { set Content [StringSuivant "class=\"content\"" dans $Texte] set Des [ValeurDeLaBalise "dd" Content] set Des [string range $Des 0 [string first "\[" $Des]-1] set Des [string trim $Des " \n\t"] if {$Short=="Short"} { regsub -all -nocase {[^a-z0-9_\-\+\(\)]} [string range $Des 0 34] "_" Des } set GnDesFromEnsembl($IdEnsemblProt,$TypeEnsembl,$Orga,Des) $Des return $Des } return "" } proc GnFromUniprotData {{FicAc ""} {FicGn ""}} { foreach Ac [LesLignesDuFichier $FicAc] { set GN [QuestionDeScience GeneQuid "ret UniprotData $Ac GN"] if {$GN==""} { continue } set Name [StringApres "Name=" dans $GN] regsub ";" $Name "" Gn lappend LesGn $Gn } return [SauveLesLignes $LesGn dans $FicGn] } proc GoAncestors {Id {Quoi ""} {JoinCar ""} {RecordsJoinCar ""}} { return [GoGetFromGo $Id $Quoi $JoinCar $RecordsJoinCar "Up"] } proc GoChildren {IdOrNameOrAcc {Quoi ""} {JoinCar ""} {RecordsJoinCar ""}} { set Id "" if {[regexp {^[0-9]+$} $IdOrNameOrAcc]} { set Id $IdOrNameOrAcc } if {$Id==""} { set Id [GoInfo $IdOrNameOrAcc "id"] } if {$Id==""} { regsub -all "_" $IdOrNameOrAcc " " Name set Id [GoInfo $Name "id"] } if {$Id==""} { return "" } return [GoNext "Down" $Id $Quoi $JoinCar $RecordsJoinCar] } proc GoCollectInfo {Info} { global GoCollectInfo if {$Info=="ReSeT"} { if {[info exists GoCollectInfo]} { unset GoCollectInfo } return {} } if {$Info=="GeTiT"} { if {[info exists GoCollectInfo]} { return $GoCollectInfo } return {} } LConcat GoCollectInfo $Info return $GoCollectInfo } proc GoGetAncestorsForSet {{GoSet ""} {GetWhat ""} {WhatJoinCar ""} {JoinCar ""} {RecordsJoinCar ""} {ListJoinCar ""}} { set UpDown "Bidon" UpDownCommeIlFaut UpDown JoinCar RecordsJoinCar ListJoinCar if {[regexp "/" $GoSet]} { set GoSet [split $GoSet "/"] } #rR par defaut on rend GO=GOacc name@Goparent name@GOacc name puis à la ligne etc. if {$GetWhat==""} { set GetWhat "GOacc,name" } if {$WhatJoinCar ==""} { set WhatJoinCar " " } if {$JoinCar ==""} { set JoinCar "@" } if {$RecordsJoinCar==""} { set RecordsJoinCar "=" } if {$ListJoinCar ==""} { set ListJoinCar "\n" } set LesGo {} foreach Ligne $GoSet { scan $Ligne "%s" Go if {$Go=="" || $Go=="all"} { continue } lappend LesGo $Go set Id [GoInfo $Go Id] set InSet($Id) 1 lappend LesId $Id set IdDuGo($Go) $Id } set IdDuAll [GoInfo "all" GOid] foreach Id $LesId { foreach A [GoAncestors $Id] { if {$A=="" || $A==$IdDuAll} { continue } if { ! [info exists InSet($Id)]} { continue } lappend KeepedAncestors($Id) [GoInfo $A $GetWhat $WhatJoinCar] } } set LeResultat {} foreach Go $LesGo { set Id $IdDuGo($Go) lappend LeResultat [join [list $Go [join $KeepedAncestors($Id) $JoinCar]] $RecordsJoinCar] } return [join $LeResultat $ListJoinCar] } proc GoGetEnrichment {{GenesA ""} {GenesB ""} {GetWhat ""}} { if {$GenesA==""} { set GenesA [ContenuDuFichier "[GoStore]/genesA.txt"] } if {$GenesB==""} { set GenesB [ContenuDuFichier "[GoStore]/genesB.txt"] } #Sauve $GenesA dans [HomeRipp]/geneA.txt #Sauve $GenesB dans [HomeRipp]/geneB.txt if {$GetWhat=="" && [PourWscope]} { set GetWhat "GetText" } set LesGenesA [split $GenesA ","] set LesGenesB [split $GenesB ","] set LA [Maxi 1 [llength $LesGenesA]] set LB [Maxi 1 [llength $LesGenesB]] set LesInfosA [GoGetInfosFromGeneListByGO $GenesA "GetGoCountGenes" "GOacc,name" Up] set LesInfosB [GoGetInfosFromGeneListByGO $GenesB "GetGoCountGenes" "GOacc,name" Up] set LesGo {} set LesGoA {} set LesGoB {} foreach Infos $LesInfosA { set GoInfo [lindex $Infos 0] set N [lindex $Infos 1] set GnA [lindex $Infos 2] set Go [scan $GoInfo "%s"] lappend LesGo $Go lappend LesGoA $Go set CountADe($Go) $N set InfoADe($Go) $GoInfo set InfoDe($Go) $GoInfo set GnADe($Go) $GnA } foreach Infos $LesInfosB { set GoInfo [lindex $Infos 0] set N [lindex $Infos 1] set GnB [lindex $Infos 2] set Go [scan $GoInfo "%s"] lappend LesGo $Go lappend LesGoB $Go set CountBDe($Go) $N set InfoBDe($Go) $GoInfo set InfoDe($Go) $GoInfo set GnBDe($Go) $GnB } set LesGo [lsort -unique $LesGo] foreach Go $LesGo { set GnAB {} if {[info exists GnADe($Go)] && [info exists GnBDe($Go)]} { set GnAB [ListsIntersection $GnADe($Go) $GnBDe($Go)] } set NAB [llength $GnAB] set NA 0 ; if {[info exists CountADe($Go)]} { set NA $CountADe($Go) } set NB 0 ; if {[info exists CountBDe($Go)]} { set NB $CountBDe($Go) } set SA [expr int(floor((1000.*$NA)/$LA+0.5))] set SB [expr int(floor((1000.*$NB)/$LB+0.5))] if {$SB==0} { set AB 99.99 } else { set AB [expr 1.0*$SA/$SB] } lappend LeR [format "Q/R %5.2f = %4d / %4d %4d %4d %4d %s" $AB $SA $SB $NA $NB $NAB $InfoDe($Go)] } set LeR [lsort -decreasing -command CompareGoCounts $LeR] if {$GetWhat=="GetText"} { return [join $LeR "\n"] } return $LeR } proc GoGetFromGene {{Qui ""} {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {UpDown ""}} { UpDownCommeIlFaut UpDown JoinCar RecordsJoinCar CanalSqlGeneOntology if {$Quoi==""} { set Quoi "GO" } if { ! [regexp -nocase "^GO" $Quoi]} { set Sql "select $Quoi from gene_product g where symbol='$Qui' and species_id=[GoSpecies]" #Espionne $Sql set R [SqlExec $Sql] if {$R=={}} { set Sql "select g.$Quoi from gene_product g, gene_product_synonym s where g.species_id=[GoSpecies] and s.product_synonym='$Qui' and s.gene_product_id=g.id" set R [SqlExec $Sql] } if {$JoinCar!=""} { set R [join $R $JoinCar] } return $R } set DoUp [expr {[string equal -nocase $UpDown "Up"] && [regexp -nocase "^GO" $Quoi]}] regsub -nocase "^GO" $Quoi "" Quoi if {$Quoi==""} { set Quoi "id" } set GpId [lindex [GoGetFromGene $Qui "id"] 0] if {$GpId==""} { return "" } set LesTQ {} foreach Q [split $Quoi ","] { set TQ "t.$Q" if {[regexp {\.} $Q]} { set TQ $Q } lappend LesTQ $TQ } set TQs [join $LesTQ ","] set Sql "select distinct $TQs from term t, gene_product g, association a where $GpId=g.id and g.id=a.gene_product_id and a.is_not=0 and a.term_id=t.id and t.term_type in [GoTermTypeIn] ;" #LogWscope $Sql set FlatOuList "" set DoList [expr ! [string equal $RecordsJoinCar ""] || ! [string equal $JoinCar ""]] if {$DoList} { if {$RecordsJoinCar=="GetList"} { set RecordsJoinCar "" } set FlatOuList "-list" } set R [SqlExec $Sql $FlatOuList] if {$DoUp} { set LeNouveauR {} foreach r $R { lappend LeNouveauR $r set r [lindex $r 0] set LesAncetres [GoGetFromGo $r $Quoi "" "" Up] foreach a $LesAncetres { lappend LeNouveauR $a } } set LeNouveauR [lsort -unique $LeNouveauR] set R $LeNouveauR } if {$DoList} { set LesRecords {} foreach r $R { if {$JoinCar!=""} { set r [join $r $JoinCar] } lappend LesRecords $r } set R $LesRecords set JoinCar $RecordsJoinCar } if {$JoinCar!=""} { set R [join $R $JoinCar] } return $R } proc GoGetFromGeneList {List {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {ListJoinCar ""} {UpDown ""}} { JeMeSignale UpDownCommeIlFaut UpDown JoinCar RecordsJoinCar ListJoinCar set List [string trim $List " ,;"] if {[regexp {[\,;]} $List]} { set List [split $List ",;"] } else { set List [list $List] } package require md5 set MD5 [md5::md5 -hex $List] set GoStoreFile "[GoStore]/$MD5.txt" if {[FileExists $GoStoreFile]} { LogWscope "On va utiliser $GoStoreFile pour une liste de longueur [llength $List]" set LeGV [ContenuDuFichier $GoStoreFile] } else { LogWscope "On va faire GoGetFromGeneList sur une liste de longueur [llength $List]" set LeGV {} foreach Gene $List { LogWscope $Gene set GV "$Gene=[GoGetFromGene $Gene $Quoi $JoinCar $RecordsJoinCar $UpDown]" lappend LeGV $GV } if {[llength $List]>10} { Sauve $LeGV dans $GoStoreFile } } LogWscope "GoGetFromGeneList va renvoyer [llength $LeGV] records" if {$ListJoinCar=="" || $ListJoinCar=="GetList"} { return $LeGV } return [join $LeGV $ListJoinCar] } proc GoGetFromGeneListAsLists {LesGenes {Quoi ""} {UpDown ""}} { if {$UpDown==""} { set UpDown "Up" } if {$Quoi==""} { set Quoi "GOacc,name" } set JC "@" set RJ "!" if {[PourWscope]} { set LesGosParGene [GoGetFromGeneList $LesGenes $Quoi $JC $RJ GetList $UpDown] } else { #rR attention il faudrait appeler la bonne science BON, GOMF ou EVImm set LesGosParGene [QuestionDeScience EVImm "ret GoGetFromGeneList $LesGenes $Quoi $JC $RJ GetList $UpDown"] } set LesGeneAvecGos {} foreach GeneGosInfos $LesGosParGene { if { ! [regexp {([^=]+)=(.*)} $GeneGosInfos Match Gene GosInfos]} { continue } set LesGosInfos [split $GosInfos $RJ] set LesInfos {} foreach GoInfos $LesGosInfos { set LesInfosDuGo [split $GoInfos $JC] lappend LesInfos $LesInfosDuGo } lappend LesGeneAvecGos [list $Gene $LesInfos] } return $LesGeneAvecGos } proc GoGetFromGo {{IdOrNameOrAcc ""} {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {UpDown ""}} { UpDownCommeIlFaut UpDown JoinCar RecordsJoinCar if {$UpDown ==""} { set UpDown "Here" } if {$Quoi ==""} { set Quoi "GOid" } if {$IdOrNameOrAcc==""} { set IdOrNameOrAcc "molecular_function" } CanalSqlGeneOntology set Id "" if {[regexp {^[0-9]+$} $IdOrNameOrAcc]} { set Id $IdOrNameOrAcc } if {$Id==""} { set Id [GoInfo $IdOrNameOrAcc "id"] } if {$Id==""} { regsub -all "_" $IdOrNameOrAcc " " Name set Id [GoInfo $Name "id"] } if {$Id==""} { return "" } GoCollectInfo "ReSeT" set MaxLevel "" set Moi "0" if {[regexp {^\+} $UpDown]} { set Moi "+0" regsub {^\+} $UpDown "" UpDown } if {[regexp {^\-?[0-9]+$} $UpDown Level]} { if {$Level<0} { set UpDown "Up" } else { set UpDown "Down" } set MaxLevel [expr abs($Level)] if {$MaxLevel==0} { set UpDown "Here" } } GoWalk $UpDown $Id $Moi $Quoi $MaxLevel $JoinCar set LesInfos [GoCollectInfo "GeTiT"] set LesUniques {} if {$JoinCar==""} { foreach LesSousInfos $LesInfos { foreach Info $LesSousInfos { lappend LesUniques $Info } } } else { set LesUniques $LesInfos } # set LesUniques [lsort -unique $LesUniques] set LesUniques [ListeSansDoublon $LesUniques] if {$RecordsJoinCar!="" && $RecordsJoinCar!="GetList" } { set LesUniques [join $LesUniques $RecordsJoinCar] } return $LesUniques } proc GoGetFromGoList {List {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {ListJoinCar ""} {UpDown ""}} { UpDownCommeIlFaut UpDown JoinCar RecordsJoinCar ListJoinCar set List [string trim $List " ,;"] if {[regexp ";" $List]} { set List [split $List ";"] } elseif {[regexp "\," $List]} { if {[regexp {^([0-9]+|GO\:[0-9]+)(\,([0-9]+|GO\:[0-9]+))*$} $List]} { set List [split $List ","] } } else { set List [list $List] } set LeGV {} foreach Go $List { lappend LeGV "$Go=[GoGetFromGo $Go $Quoi $JoinCar $RecordsJoinCar $UpDown]" } if {$ListJoinCar=="" || $ListJoinCar=="GetList"} { return $LeGV } return [join $LeGV $ListJoinCar] } proc GoGetFromPfam {{Qui ""} {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {UpDown ""}} { UpDownCommeIlFaut UpDown JoinCar RecordsJoinCar CanalSqlGeneOntology if {$Quoi==""} { set Quoi "GO" } if { ! [regexp -nocase "^GO" $Quoi]} { set Sql "select $Quoi from dbxref where xref_key='$Qui' and xref_dbname = 'Pfam'" set R [SqlExec $Sql] if {$JoinCar!=""} { set R [join $R $JoinCar] } return $R } regsub -nocase "^GO" $Quoi "" Quoi if {$Quoi==""} { set Quoi "id" } set DbId [lindex [GoGetFromPfam $Qui "id"] 0] if {$DbId==""} {return ""} set LesTQ {} foreach Q [split $Quoi ","] { set TQ "t.$Q" if {[regexp {\.} $Q]} { set TQ $Q } lappend LesTQ $TQ } set TQs [join $LesTQ ","] set Sql "select distinct $TQs from dbxref d, term_dbxref l, term t where $DbId=d.id and d.id=l.dbxref_id and l.term_id=t.id and t.term_type in [GoTermTypeIn] ;" set FlatOuList "" set DoList [expr ! [string equal $RecordsJoinCar ""] || ! [string equal $JoinCar ""]] if {$DoList} { if {$RecordsJoinCar=="GetList"} { set RecordsJoinCar "" } set FlatOuList "-list" } set R [SqlExec $Sql $FlatOuList] if {$DoList} { set LesRecords {} foreach r $R { if {$JoinCar!=""} { set r [join $r $JoinCar] } lappend LesRecords $r } set R $LesRecords set JoinCar $RecordsJoinCar } if {$JoinCar!=""} { set R [join $R $JoinCar] } return $R } proc GoGetFromPfamList {List {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {ListJoinCar ""} {UpDown ""}} { UpDownCommeIlFaut UpDown JoinCar RecordsJoinCar ListJoinCar set List [string trim $List " ,;"] if {[regexp {[\,;]} $List]} { set List [split $List ",;"] } else { set List [list $List] } set LePV {} foreach Pfam $List { lappend LePV "$Gene=[GoGetFromPfam $Pfam $Quoi $JoinCar $RecordsJoinCar $UpDown]" } if {$ListJoinCar=="" || $ListJoinCar=="GetList"} { return $LePV } return [join $LePV $ListJoinCar] } proc GoGetInFile {Fichier args} { #rR c'est trop long de passer par Wscope, on memorise direct dans un fichier ... Pour GO2000 en particulier set Res [eval $args] return [Sauve $Res dans $Fichier] } proc GoGetInfosFromGeneListByGO {LesGenes {GetWhat ""} {Quoi ""} {UpDown ""}} { if {$GetWhat==""} { set GetWhat "GetGoCountGenes" } set LesGeneAvecGos [GoGetFromGeneListAsLists $LesGenes $Quoi $UpDown] set LesGo {} foreach GeneGosInfos $LesGeneAvecGos { lassign $GeneGosInfos Gene LesInfos foreach GoInfos $LesInfos { set Go [lindex $GoInfos 0] lappend LesGo $Go lappend GenesFrom($Go) $Gene set Infos($Go) $GoInfos } } set LesGos [lsort -unique $LesGo] set LesGoCount {} set LesGoCountGenes {} foreach Go $LesGos { set MyGenes [lsort -unique $GenesFrom($Go)] set N [llength $MyGenes] set Info [join $Infos($Go) " "] lappend LesGoCount [list $Info $N] lappend LesGoCountGenes [list $Info $N $MyGenes] } if {$GetWhat=="GetGoCount"} { return $LesGoCount } if {$GetWhat=="GetGoCountGenes"} { return $LesGoCountGenes } return $LesGoCountGenes } proc GoGetShowFromGeneList {LesGn} { set GeneNames [join $LesGn ","] set LesGnGO [GoGetFromGeneList $GeneNames "GOacc,name" "" "\t"] foreach GnGO $LesGnGO { if {[regexp {^([^=]+)=(.*)$} $GnGO Match Gn GOsPropres]} { set GOs $GOsPropres lappend LesGenesEtLeursGOs "\n$Gn *************" } foreach GO [split $GOs "\t"] { lassign $GO GoAcc GoName lappend LesGoAcc $GoAcc lappend LesGoName $GoName set GoAccName "$GoAcc $GoName" lappend LesGenesEtLeursGOs "$Gn $GoAccName" lappend LesGenesDu($GoAccName) $Gn set LesGenesDu($GoAccName) [lsort -unique $LesGenesDu($GoAccName)] } } set LesNombres {} set LesGOsEtLeursGenes [list "#GeneCount GO Genes"] foreach {GoAccName Genes} [array get LesGenesDu] { set Nombre [llength $Genes] lappend LesNombres $Nombre lappend LesGoDeLaLongueur($Nombre) $GoAccName } set LesNombres [lsort -integer -unique -decreasing $LesNombres] foreach Nombre $LesNombres { foreach GoAccName $LesGoDeLaLongueur($Nombre) { lappend LesGOsEtLeursGenes " $Nombre $GoAccName" set Genes [join $LesGenesDu($GoAccName) " "] set TexteAAfficher $Genes while {[string length $TexteAAfficher]>80} { set Debut [string range $TexteAAfficher 0 79] set iDBlanc [string last " " $Debut] set BonDebut [string range $TexteAAfficher 0 $iDBlanc-1] set TexteAAfficher [string range $TexteAAfficher $iDBlanc+1 end] lappend LesGOsEtLeursGenes "[string repeat { } 40] $BonDebut" } if {$TexteAAfficher != ""} { lappend LesGOsEtLeursGenes "[string repeat { } 40] $TexteAAfficher" } } } set LesFenetres {} #set F [AfficheListe $LesGenesEtLeursGOs "GrandeLargeur" "Genes With their GOs"] lappend LesFenetres [AfficheListe $LesGOsEtLeursGenes "GrandeLargeur" "GOs with their genes"] return $LesFenetres } proc GoInfo {Id Keys {JoinCar ""} {RecordsJoinCar ""}} { regsub -all "'" $Id "''" Id if {$Id==""} { set Id "NotFindableId" } set LesValeurs {} CanalSqlGeneOntology if {[regexp -nocase "^PFAM" $Keys]} { regsub -nocase "PFAM" $Keys "" Keys if {$Keys==""} { set Keys "xref_key" } set LesK {} set ListeVide {} foreach K [split $Keys ","] { set TK "d.$K" if {[regexp {\.} $K]} { set TK $K } lappend LesTK $TK lappend ListeVide "" } set TKs [join $LesTK ","] set Sql "select $TKs from dbxref d, term_dbxref td, term t where t.id = $Id and t.id = td.term_id and td.dbxref_id = d.id and (d.xref_dbname = 'Pfam' or d.xref_dbname = 'PfamB');" } elseif {[regexp -nocase "^GENE" $Keys]} { regsub -nocase "GENE" $Keys "" Keys if {$Keys==""} { set Keys "symbol" } set LesK {} set ListeVide {} foreach K [split $Keys ","] { set TK "g.$K" if {[regexp {\.} $K]} { set TK $K } lappend LesTK $TK lappend ListeVide "" } set TKs [join $LesTK ","] set SpeciesId [GoSpecies] set Sql "select $TKs from term t, gene_product g, association a where g.species_id=$SpeciesId and a.gene_product_id=g.id and a.is_not=0 and a.term_id=t.id and t.id=$Id;" } else { regsub "^GO" $Keys "" Keys if {$Keys==""} { set Keys "id" } set LesK {} set ListeVide {} foreach K [split $Keys ","] { set TK "$K" if {[regexp {\.} $K]} { set TK $K } lappend LesTK $TK lappend ListeVide "" } set Where "where name='notFindableGo'" if {[regexp {[a-z]} $Id]} { set Where "where name='$Id' and is_obsolete=0" } if {[regexp {^[0-9]+$} $Id]} { set Where "where id=$Id and is_obsolete=0" } if {[regexp {^GO\:} $Id]} { set Where "where acc='$Id' and is_obsolete=0" } set Sql "select $Keys from term $Where;" } set LesValeurs [SqlExec $Sql "-list"] if {$JoinCar==""} { if {$LesValeurs=={}} { return {} } return [list $LesValeurs] } if {$LesValeurs=={}} { set LesValeursJointes [join $ListeVide $JoinCar] } else { set LesValeursJointes {} foreach LesChamps $LesValeurs { set Valeur [join $LesChamps $JoinCar] lappend LesValeursJointes $Valeur } } if {$RecordsJoinCar=="" || $RecordsJoinCar=="GetList"} { return $LesValeursJointes } if {$RecordsJoinCar=="GetFirstvalue"} { return [lindex $LesValeursJointes 0]} return [join $LesValeursJointes $RecordsJoinCar] } proc GoNext {UpDown Id {Quoi ""} {JoinCar ""} {RecordsJoinCar ""}} { CanalSqlGeneOntology if {$Id=="" || $Id=="{}"} { return {} } if {[string equal -nocase $UpDown "Down"]} { set Source "term1_id" set Destin "term2_id" } else { set Source "term2_id" set Destin "term1_id" } regsub -nocase "^GO" $Quoi "" Quoi if {$Quoi==""} { set Quoi "id" } set LesTQ {} foreach Q [split $Quoi ","] { set TQ "t.$Q" if {[regexp {\.} $Q]} { set TQ $Q } lappend LesTQ $TQ } set TQs [join $LesTQ ","] if { ! [regexp {^[0-9]+$} $Id]} { set Id [GoInfo $Id "id"] } set FlatOuList "-flatlist" if {$JoinCar!=""} { set FlatOuList "-list" } set IsA [SqlExec "select id from term where name='is_a'"] set PartOf [SqlExec "select id from term where name='part_of'"] set Relatives [SqlExec "select $TQs from term t, term2term l where l.$Source=$Id and l.$Destin=t.id and (l.relationship_type_id=$IsA or l.relationship_type_id=$PartOf) and t.is_obsolete=0;" $FlatOuList] if {$JoinCar!=""} { set LesR {} foreach R $Relatives { set Champ [join $R $JoinCar] lappend LesR $Champ } set Relatives $LesR } if {$RecordsJoinCar!=""} { set Relatives [join $Relatives $RecordsJoinCar] } return $Relatives } proc GoOntology {Go} { CanalSqlGeneOntology if { ! [regexp {^GO\:[0-9]+$} $Go]} { set Go [GoGetFromGo $Go "GOacc"] } set Sql "select term_type from term where acc='$Go'" set O [SqlExec $Sql] return $O } proc GoParents {IdOrNameOrAcc {Quoi ""} {JoinCar ""} {RecordsJoinCar ""}} { set Id "" if {[regexp {^[0-9]+$} $IdOrNameOrAcc]} { set Id $IdOrNameOrAcc } if {$Id==""} { set Id [GoInfo $IdOrNameOrAcc "id"] } if {$Id==""} { regsub -all "_" $IdOrNameOrAcc " " Name set Id [GoInfo $Name "id"] } if {$Id==""} { return "" } return [GoNext "Up" $Id $Quoi $JoinCar $RecordsJoinCar] } proc GoSpecies {{Qui ""} {Quoi ""} {JoinCar ""} {RecordsJoinCarNeSertPasEncore ""}} { global GoSpecies if {$Quoi=="All"} { set Quoi "*" } if {$Qui=="" && [info exists GoSpecies]} { return $GoSpecies } set DefSpe "" if {$DefSpe=="" && [regexp -nocase "hu" [RepertoireDuGenome]]} { set DefSpe "Homo sapiens" } ;#rR a ameliorer !! if {$DefSpe=="" && [OnTraite "BON"]} { set DefSpe "Homo sapiens" } if {$DefSpe=="" && [OnTraite "GOSc"]} { set DefSpe "Saccharomyces cerevisiae S288c" } if {$DefSpe=="" && [NotreOX]!=""} { set DefSpe "ncbi_taxa_id_[NotreOX]" } if {$DefSpe==""} { set DefSpe "Mus musculus" } if {$Qui==""} { set Qui $DefSpe } if {$Quoi==""} { set Quoi "id" } set SetDefault [expr [string equal -nocase $Quoi "SetDefault"]] if {$SetDefault} { set Quoi "id" } CanalSqlGeneOntology if {[regexp "select " $Qui]} { return [SqlExec $Sql] } set Where "id=$Qui" if {[regexp -nocase "^ncbi_taxa_id" $Qui]} { regsub -all {[^0-9]} $Qui "" NcbiTaxaId set Where "ncbi_taxa_id=$NcbiTaxaId" } elseif {[regexp {[ _]} $Qui]} { regsub "_" $Qui " " Qui scan $Qui "%s" Genre regsub "$Genre " $Qui "" Espece set Where "genus='$Genre' and species='$Espece'" } set Sql "select $Quoi from species where $Where" set R [SqlExec $Sql] if {$JoinCar!=""} { set R [join $R $JoinCar] } if {$SetDefault} { set GoSpecies $R } return $R } proc GoStore {} { return "[HomeRipp]/GxWww/GoStore" } proc GoTermType {} { if {[OnTraite "GOMF"]} { return [list "molecular_function"] } if {[OnTraite "BON"]} { return [list "molecular_function"] } return [list "biological_process" "cellular_component" "molecular_function"] } proc GoTermTypeIn {} { set Types [join [GoTermType] "','"] set In "('$Types')" return $In } proc GoTestAll {} { Espionne [GoSpecies] Espionne [GoSpecies] Espionne [GoSpecies "Homo sapiens" "SetDefault"] Espionne [GoSpecies] Espionne [GoSpecies "Mus musculus" "SetDefault"] Espionne [GoSpecies] Espionne [GoSpecies "ncbi_taxa_id9606" "SetDefault"] Espionne [GoSpecies] Espionne [GoSpecies "Mus musculus" "SetDefault"] #rR et ca marche sans quote avec underscore ( _ est mieux pour le web) Espionne [GoSpecies Mus_musculus "genus,species,common_name"] Espionne [GoGetFromGo "cyclin protein" GENE] Espionne [GoGetFromGo "cyclin protein" PFAM] Espionne [GoGetFromGo "cyclin binding" "GENEsymbol,full_name" "="] EspionneL [GoGetFromGene pax6 "GOacc,name,a.assocdate" "" "GetList"] } proc GoWalk {UpDown Id Level Keys {MaxLevel ""} {JoinCar ""}} { if {$MaxLevel==""} { set MaxLevel 999999 } #Espionne "Walk [string repeat " " $Level] $Id [GoInfo $Id "acc,name" "=" "GetFirstValue"]" #rR on met +1 pour ne pas prendre le starting GO mais que les fils if {[regexp {^\+} $Level]} { regsub {^\+} $Level "" Level } else { GoCollectInfo [GoInfo $Id $Keys $JoinCar] } if {[string equal -nocase $UpDown "Here"]} { return } incr Level if {$Level>$MaxLevel} { return } set Relatives [GoNext $UpDown $Id] foreach R $Relatives { if {$R==1} { continue } GoWalk $UpDown $R $Level $Keys $MaxLevel $JoinCar } return } proc GoldArchaea {{Qui ""} {Quoi ""}} { global GoldArchaea if {[info exists GoldArchaea($Qui,$Quoi)]} { return $GoldArchaea($Qui,$Quoi) } if {[info exists GoldArchaea($Qui,Go)]} { set Go $GoldArchaea($Qui,Go) if {[info exists GoldArchaea($Go,$Quoi)]} { return $GoldArchaea($Go,$Quoi) } } if {[info exists GoldArchaea("EstCharge")]} { return "" } set GoldArchaea("EstCharge") 1 set Fichier "/home/ripp/gscope/archaeaTax.txt" foreach Ligne [LesLignesDuFichier $Fichier] { lassign [split $Ligne "\t"] Go OS Dom OX Date set Go [string trim $Go] set OS [string trim $OS] set OX [string trim $OX] set Dom [string trim $Dom] set Date [string trim $Date] set GoldArchaea($Go,Go) $Go set GoldArchaea($Go,OS) $OS set GoldArchaea($Go,OX) $OX set GoldArchaea($Go,Dom) $Dom set GoldArchaea($Go,Date) $Date lappend GoldArchaea(ListOf,Go) $Go lappend GoldArchaea(ListOf,OS) $OS lappend GoldArchaea(ListOf,OX) $OX set GoldArchaea($OS,Go) $Go set GoldArchaea($OX,Go) $Go } return [GoldArchaea $Qui $Quoi] } proc Gonfle {w Tag {ScaleX gonfle} {ScaleY 1.0}} { global ScaleCumuleDeGonfle OrigXCumuleDeGonfle OrigYCumuleDeGonfle global ScrollRectangleOriginal IdScrollRectangle Gs "UpdateK" if {[regexp "rond" $w]} { FaireLire "Sorry, the Zoom doesn't work for Rosace." return } set K $w.canvas set ScroHor $w.hscroll set ScroVer $w.vscroll scan "[$ScroHor get]" "%f %f" g d scan "[$ScroVer get]" "%f %f" b h set RatioHor [expr ($g + $d)/2] set RatioVer [expr ($b + $h)/2] scan [$K cget -scrollregion] "%f %f %f %f" xMin yMin xMax yMax set CentreHor [expr $xMin + $RatioHor*($xMax-$xMin)] set CentreVer [expr $yMin + $RatioVer*($yMax-$yMin)] if {[regexp "expo" $K]} { set CentreHor 0 set CentreVer 0 } if {[PourWscope]} { set ScaleGonfle 2.0 } else { set ScaleGonfle 1.1 } if { $ScaleY == "gonfle" } { set Scaley $ScaleGonfle } if { $ScaleY == "degonfle" } { set Scaley [expr 1./$ScaleGonfle] } if { $ScaleX == "gonfle" } { set Scalex $ScaleGonfle set Scaley 1.0 } else { set Scalex $ScaleX set Scaley 1.0 } if { $ScaleX == "degonfle" } { set Scalex [expr 1./$ScaleGonfle] set Scaley 1.0 } if { $ScaleY != "1.0"} { set Scaley $ScaleY } if { $ScaleY == "gonfle" } { set Scaley $ScaleGonfle } if { $ScaleY == "degonfle" } { set Scaley [expr 1./$ScaleGonfle] } if { $ScaleX == "reset" } { scan [$K coords [set IdScrollRectangle($K)]] "%f %f %f %f" xMin yMin xMax yMax scan [set ScrollRectangleOriginal($K)] "%f %f %f %f" xMinO yMinO xMaxO yMaxO set Scalex [expr ($xMaxO-$xMinO)*1.0/($xMax-$xMin)] set Scaley [expr ($yMaxO-$yMinO)*1.0/($yMax-$yMin)] } $K scale $Tag $CentreHor $CentreVer $Scalex $Scaley $K configure -scrollregion [$K coords [set IdScrollRectangle($K)]] return $K } proc GoodAccessForHam {} { set Fichier "all_172.tfas" set Texte [ContenuDuFichier $Fichier] regsub ".tfas$" $Fichier "_OK.tfas" NewFichier regsub -all -nocase {(>[a-z0-9\-_\+]+)([\,\.]+)} $Texte {\1} BonTexte return [Sauve $BonTexte dans $NewFichier] } 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 GoodUnixFileNames {{Rep ""}} { if {$Rep==""} { set Rep "./" } foreach F [lsort [glob -nocomplain "$Rep/*"]] { regsub -nocase -all {[^A-Z0-9_\-\.\+\#\~\\]} $F "_" G Espionne "$F\n$G" file rename $F $G } return } proc GrandFrereDuMutant {Nom} { return [LesMutantsDe $Nom "SonGrandFrere"] } proc GraphDesTaillesPourLesNoLoc {FichierClusters} { foreach JR [ListeMinimumDesJR $FichierClusters] { if {[PolyLocalise $JR]=="NoLocalization"} { set L [SeqLength $JR] if {$L==0} { continue } set L [expr $L/100] lappend LesLongueurs $L } } Histogramme $LesLongueurs Graphe } proc GraphDesTaillesPourTous {} { foreach Nom [ListeDesPABs] { set L [SeqLength $Nom] if {$L==0} { continue } set L [expr $L/100] lappend LesLongueurs $L } Histogramme $LesLongueurs Graphe } proc GraphDesTaillesPourTousLesJR {FichierClusters} { foreach JR [ListeDesJR $FichierClusters] { set L [SeqLength $JR] if {$L==0} { continue } set L [expr $L/100] lappend LesLongueurs $L } Histogramme $LesLongueurs Graphe } proc GraphMLPourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set r [glob -directory $directory *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } set fileIn "[RepertoireDuGenome]/StringRep/String/$f" set fileOut "[RepertoireDuGenome]/StringRep/String/$f.xml" CreationGrpahML $fileIn $fileOut FinPasTouche $f } } proc Graph_Panel {LeCanvasPere} { Wup "Panel de choix d affichage et de couleur des differents graphes Tm GC ID NbSeq" set LesGraphes [LesGraphesDeLOligo $LeCanvasPere] if {$LesGraphes==""} {return ""} set GrapheTopLevel "$LeCanvasPere.graphepanel" if {[winfo exists $GrapheTopLevel]} { wm deiconify $GrapheTopLevel raise $GrapheTopLevel return "" } else {toplevel $GrapheTopLevel} wm geometry $GrapheTopLevel +300+100 wm title $GrapheTopLevel "Graph Selection" wm resizable $GrapheTopLevel false false set FrameGraphe "$GrapheTopLevel.lesgraphesframe" frame $FrameGraphe -borderwidth "3" -relief "groove" pack $FrameGraphe -expand "true" -side "top" -fill "both" set IndGraph 0 set NbGraph [llength $LesGraphes] #Trie pour avoir GC et Tm devant les autres if {[regexp "GC" $LesGraphes]} {set GraphesOrdonnes "GC"} foreach G $LesGraphes { if {[regexp -nocase "Tm" $G]} {lappend GraphesOrdonnes $G} else {continue} } foreach G $LesGraphes { if {$G=="GC" || [regexp -nocase "Tm" $G]} {continue} else {lappend GraphesOrdonnes $G} } set LesGraphes $GraphesOrdonnes unset GraphesOrdonnes foreach Graphe $LesGraphes { incr IndGraph set TagOrId $Graphe set Graphe [string tolower $Graphe] set PetiteFrameGraphe "$FrameGraphe.f$Graphe" set LGr "$PetiteFrameGraphe.l$Graphe" set BGrOn "$PetiteFrameGraphe.bgon$Graphe" set BGrOff "$PetiteFrameGraphe.bgoff$Graphe" set BMoyOn "$PetiteFrameGraphe.bmoyon$Graphe" set BMoyOff "$PetiteFrameGraphe.bmoyoff$Graphe" set BColor "$PetiteFrameGraphe.bcolor$Graphe" frame $PetiteFrameGraphe -borderwidth "0" -relief "groove" label $LGr -text "$TagOrId" -padx "2" -borderwidth "3" -relief "groove" -background "orange" button $BGrOn -text "On" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Raiser $LeCanvasPere $TagOrId" button $BGrOff -text "Off" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Lower $LeCanvasPere $TagOrId" button $BMoyOn -text "On" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Raiser $LeCanvasPere Average${TagOrId}" button $BMoyOff -text "Off" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Lower $LeCanvasPere Average${TagOrId}" button $BColor -text "C" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -background "#808FFF" #bind $LGr "LePanneauDeCouleursDuGraph $LGr $K $TagOrId" #bind $BColor "LePanneauDeCouleursDuGraph $BColor $K $TagOrId" bind $BColor <1> "LePanneauDeCouleursDuGraph $BColor $LeCanvasPere $TagOrId" grid $PetiteFrameGraphe -sticky ewns grid $LGr -row 1 -column 0 -sticky ewns grid $BGrOn -row 1 -column 1 -sticky ewns grid $BGrOff -row 1 -column 2 -sticky ewns grid $BMoyOn -row 1 -column 3 -sticky ewns grid $BMoyOff -row 1 -column 4 -sticky ewns grid $BColor -row 1 -column 5 -sticky ewns if {$IndGraph==1} { set DismissB "$PetiteFrameGraphe.destroybutton" set LDuGraph "$PetiteFrameGraphe.ldugraph" set LDuMoy "$PetiteFrameGraphe.ldumoyenne" set LDeDeco "$PetiteFrameGraphe.ldedeco" button $DismissB -text "Exit" -anchor "center" -padx "3" -background "red" -borderwidth "2" -relief "groove" -activebackground "red" -overrelief "sunken" -command "destroy $GrapheTopLevel" label $LDuGraph -text "Graph" -anchor "center" -padx "2" -background "#808FFF" -borderwidth "3" -relief "groove" label $LDuMoy -text "Average" -anchor "center" -padx "2" -background "#808FFF" -borderwidth "3" -relief "groove" label $LDeDeco -text "" -anchor "center" -padx "2" -background "green3" -borderwidth "3" -relief "groove" grid $DismissB -row 0 -column 0 -sticky ewns grid $LDuGraph -row 0 -column 1 -sticky ewns -columnspan 2 grid $LDuMoy -row 0 -column 3 -sticky ewns -columnspan 2 grid $LDeDeco -row 0 -column 5 -sticky ewns } if {$IndGraph==$NbGraph} { set LAllDuGr "$PetiteFrameGraphe.lalldugraph" set BAllGrOn "$PetiteFrameGraphe.ballgon" set BAllGrOff "$PetiteFrameGraphe.ballgoff" set BAllAvOn "$PetiteFrameGraphe.ballaon" set BAllAvOff "$PetiteFrameGraphe.ballaoff" set LDeDeco "$PetiteFrameGraphe.ldedeco2" label $LAllDuGr -text "All" -anchor "center" -padx "2" -relief "groove" -background "green3" -borderwidth "3" button $BAllGrOn -text "On" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "Raiser $LeCanvasPere OligoGraph" button $BAllGrOff -text "Off" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "Lower $LeCanvasPere OligoGraph" button $BAllAvOn -text "On" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "RaiseLesAverageDeLOligo $LeCanvasPere" button $BAllAvOff -text "Off" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "LowerLesAverageDeLOligo $LeCanvasPere" label $LDeDeco -text "" -anchor "center" -padx "2" -relief "groove" -background "green3" -borderwidth "3" grid $LAllDuGr -row 2 -column 0 -sticky ewns grid $BAllGrOn -row 2 -column 1 -sticky ewns grid $BAllGrOff -row 2 -column 2 -sticky ewns grid $BAllAvOn -row 2 -column 3 -sticky ewns grid $BAllAvOff -row 2 -column 4 -sticky ewns grid $LDeDeco -row 2 -column 5 -sticky ewns } grid columnconfigure $PetiteFrameGraphe 0 -weight 1 grid columnconfigure $PetiteFrameGraphe 1 -weight 0 grid columnconfigure $PetiteFrameGraphe 2 -weight 0 grid columnconfigure $PetiteFrameGraphe 3 -weight 0 grid columnconfigure $PetiteFrameGraphe 4 -weight 0 } return "" } proc Graphe {LesX {LesY ""} {K ""} {Couleur ""} {Largeur ""} {Hauteur ""} {CigCsd ""} {AvecAxes ""} {Titre ""} {LaListeDesTags ""} {DotOnly ""} {BindOnly ""} {LargeurMax ""} {HauteurMax ""}} { global BornesDuGraphe if {$BindOnly!=""} { set LesBind [split $BindOnly "_"] set BindOnly 1 } else { set BindOnly 0 } set DotOnly [string equal -nocase "DotOnly" $DotOnly] set EnBatons 0 if {$LesY=="EnBatons"} { set LesY {} ; set EnBatons 1 } if {$LesY=="Regulier"} { set LesY {}} if {$Couleur==""} { set Couleur "black" } if {$Largeur==""} { if {$K==""} { set Largeur 512 } else { set Largeur [lindex [$K configure -width] 4] } } if {$Hauteur==""} { if {$K==""} { set Hauteur 512 } else { set Hauteur [lindex [$K configure -height] 4] } } if {$CigCsd=={}} { set CigCsd [list [expr $Largeur*0.05] [expr $Hauteur*0.05] [expr $Largeur*0.95] [expr $Hauteur*0.95]] } ScanLaListe $CigCsd GaucheX BasY DroiteX HautY if {$LargeurMax==""} { set LargeurMax $Hauteur } if {$HauteurMax==""} { set HauteurMax $Hauteur } set LongX [llength $LesX] if {$LongX==0} { return "" } if {$LesY=={}} { set LesY $LesX if {$EnBatons} { set LesY [lreplace $LesY -1 -1 0] } set LongY [llength $LesY] set LesX [NombresEntre 0 [expr $LongY-1]] } if {[info exists BornesDuGraphe($K)]} { ScanLaListe [set BornesDuGraphe($K)] MinX MinY MaxX MaxY } else { set MinX [MiniDeLaListe $LesX] set MaxX [MaxiDeLaListe $LesX] set MinY [MiniDeLaListe $LesY] set MaxY [MaxiDeLaListe $LesY] set NoDistorsion 0 if {$NoDistorsion} { set MinX [Mini $MinX $MinY] set MinY $MinX set MaxX [Maxi $MaxX $MaxY] set MaxY $MaxX } set BornesDuGrapheCourant [list $MinX $MinY $MaxX $MaxY] } if {$MinX==$MaxX} { set PlageX 1 } else { set PlageX [expr $MaxX - $MinX] } if {$MinY==$MaxY} { set PlageY 1 } else { set PlageY [expr $MaxY - $MinY] } set AX [expr 1.0*($DroiteX-$GaucheX)/$PlageX] set AY [expr 1.0*($HautY -$BasY )/$PlageY] set BX [expr $GaucheX-$AX*$MinX] set BY [expr $BasY -$AY*$MinY] if {$K==""} { if {$EnBatons} { set K [UnCanva $LargeurMax $HauteurMax $Hauteur $Largeur "" $Titre] } else { set K [UnCanva $LargeurMax $HauteurMax $Largeur $Hauteur "" $Titre] } set BornesDuGraphe($K) $BornesDuGrapheCourant GraphesEnStock $K } foreach X $LesX Y $LesY { lappend Lesx [expr $AX*$X + $BX] lappend Lesy [expr $AY*$Y + $BY] } set Zerox [expr $AX*0 + $BX] set Zeroy [expr $AY*0 + $BY] set Oldx [lindex $Lesx 0] set OldyM [expr $HauteurMax-[lindex $Lesy 0]] set Prems 1 set MargeX 0 set MargeY 0 set BatonColors [list LightGreen LightBlue] set iBC 0 set nBC [llength $BatonColors] set os 4 Espionne $HauteurMax foreach x $Lesx y $Lesy X $LesX Y $LesY LesTags $LaListeDesTags { set yM [expr $HauteurMax-($y)] lappend LesTags "|" $X $Y $x $yM if {$EnBatons} { set Color [lindex $BatonColors [expr [incr iBC]%$nBC]] $K create rectangle [expr $Zeroy + $MargeY] [expr $Oldx + $MargeX] [expr $y + $MargeY] [expr $x + $MargeX] -fill $Color if {[lindex $LesTags 0]!="|"} { $K create text [expr $Zeroy + $MargeY +10] [expr $x + $MargeX -2] -text [lindex $LesTags 0] -anchor nw -tag "tissue" } } else { $K create oval [expr $x-$os] [expr $yM-$os] [expr $x+$os] [expr $yM+$os] -fill $Couleur -outline $Couleur -tag [linsert $LesTags 1 oval] if { ! $DotOnly} { $K create line $Oldx [expr $OldyM] $x [expr $yM] -fill $Couleur -tag [linsert $LesTags 1 line] } } set Oldx $x set OldyM $yM } if {$BindOnly} { foreach B $LesBind { $K bind $B "EntreDansCoeur $K %x %y" $K bind $B "SortDeCoeur $K %x %y" } } else { $K bind "all" "EntreDansCoeur $K %x %y" $K bind "all" "SortDeCoeur $K %x %y" } $K raise "tissue" return $K } proc GrapheDesFrequences {File} { foreach Ligne [LesLignesDuFichier $File] { scan $Ligne "%d %d" x y lappend Lesx $x lappend Lesy $y } Graphe $Lesx $Lesy } proc GrapheDuFichier {{Fichier ""}} { if {$Fichier!=""} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%f %f" X Y lappend LesX $X lappend LesY $Y } return [Graphe $LesX $LesY "" "blue" 800 600] } } proc GrapheDuPourcentageDeNPourLesNoLoc {FichierClusters} { foreach JR [ListeMinimumDesJR $FichierClusters] { if {[PolyLocalise $JR]=="NoLocalization"} { set Longueur [SeqLength $JR] if {$Longueur==0} {continue} set Sequence [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/nuctfa/$JR"] set LesLettres [split $Sequence ""] set n 0 foreach Lettre $LesLettres { if {$Lettre=="N"} {incr n} } set Pourcent [expr $n*100/$Longueur] set P [expr $Pourcent/1] lappend LesPourcentagesDeN $P } } Histogramme $LesPourcentagesDeN Graphe } proc GrapheDuPourcentageDeNPourTousLesLocs {FichierClusters} { foreach JR [ListeMinimumDesJR $FichierClusters] { if {[PolyLocalise $JR]!="NoLocalization"} { set Longueur [SeqLength $JR] if {$Longueur==0} {continue} set Sequence [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/nuctfa/$JR"] set LesLettres [split $Sequence ""] set n 0 foreach Lettre $LesLettres { if {$Lettre=="N"} {incr n} } set Pourcent [expr $n*100/$Longueur] set P [expr $Pourcent/1] lappend LesPourcentagesDeN $P } } Histogramme $LesPourcentagesDeN Graphe } proc GrapheExpressedTissuesOLD {} { set LesSi [string trim [string repeat "100 400 800 400 000 400 400 800 400 000 " 7]] set K [Graphe $LesSi "EnBatons" "" "" 1000 500 "" "" "ExpressTiss" $LesSi] $K create text 300 10 -text "Signal Intensities" -font {Arial 14} } proc GrapheScore {{a ""} {b ""} {op ""}} { global Lscores K if {[info exists K]} { destroy $K } set K [Graphe $Lscores] bind all {destroy $k} $K configure -background black $K itemconfig Cadre -fill black #return set Lv [lsort -real $Lscores] set max [lindex $Lv end] set min [lindex $Lv 0] puts "\nScores : [llength $Lscores] $min $max" $K itemconfig oval -fill white return } proc GrapheVecItem {Fichier} { foreach XYZP [VecItem $Fichier] { foreach {x y z pl} $XYZP { Espionne $XYZP lappend LesX $x lappend LesY $y } Graphe $LesX $LesY } } proc GraphesEnStock {{Quoi ""} {K ""} {R ""}} { global GraphesEnStock global GraphesEnStockInfo if {$Quoi==""} { set Quoi "GetList" } if { ! [info exists GraphesEnStock]} { set GraphesEnStock {} } if {[string equal -nocase "GetList" $Quoi]} { return $GraphesEnStock } if {[string equal -nocase "Reset" $Quoi]} { set Old $GraphesEnStock set GraphesEnStock {} return $Old } if {[string equal -nocase "HighlightId" $Quoi]} { if {$R==""} { if {[info exists GraphesEnStockInfo($K,HighlightId)]} { return $GraphesEnStockInfo($K,HighlightId) } else { return "" } } set GraphesEnStockInfo($K,HighlightId) $R return $GraphesEnStockInfo($K,HighlightId) } if {[string equal -nocase "Remove" $Quoi]} { set I [lsearch $GraphesEnStock $K] set GraphesEnStock [lreplace $GraphesEnStock $I $I] return $GraphesEnStock } if {[regexp "^\." $Quoi]} { set K $Quoi if { ! [regexp {(.*).canvas} $K Match w]} { return $GraphesEnStock} set D "$w.buttons.dismiss" $D configure -command "GraphesEnStock Remove $K; destroy $w" lappend GraphesEnStock $Quoi return $GraphesEnStock } return $GraphesEnStock } proc Graphiste {LesOrdresPourGIF ValWidth ValHeight X1 Y1 X2 Y2 CheminGIF {OnVeutLeTexte 1} {OnVeutLesArcs 1}} { global CommandeCanvart global GraphisteDir set ValWidth [expr int($ValWidth)] set ValHeight [expr int($ValHeight)] set RepertoireLog "" if {[info exists GraphisteDir]} { set RepertoireLog "$GraphisteDir/log" } if {$RepertoireLog=="" || ! [file writable $RepertoireLog]} { set RepertoireLog "[RepertoireDeTravail]/log" } if { ![file exists $RepertoireLog] } { file mkdir $RepertoireLog } if {[regexp "/gd" $CommandeCanvart]} { set OrdrePourGIF [string trim [join $LesOrdresPourGIF "\n"]] set f [open "|$CommandeCanvart $ValWidth $ValHeight $X1 $Y1 $X2 $Y2 $CheminGIF $OnVeutLeTexte 2>/dev/null" "w"] puts $f $OrdrePourGIF flush $f close $f return "OK" } if {[regexp "^java" $CommandeCanvart]} { if {$OnVeutLeTexte} { set TexteOuNon "yes" } else { set TexteOuNon "no" } if {$OnVeutLesArcs} { set ArcsOuNon "yes" } else { set ArcsOuNon "no" } set AvecLog 1 if {$AvecLog} { set fico [open "$RepertoireLog/entreecanvart.log" "w"] puts $fico [string trim [join $LesOrdresPourGIF "\n"]] close $fico } set f [open "|$CommandeCanvart -width $ValWidth -height $ValHeight -box $X1 $Y1 $X2 $Y2 -output $CheminGIF -nodecompose -text $TexteOuNon -arc $ArcsOuNon >& $RepertoireLog/sortiecanvart.log" "w"] puts $f [string trim [join $LesOrdresPourGIF "\n"]] flush $f close $f return "OK" } } proc Grave {VariableDeGrave} { upvar $VariableDeGrave ContenuVariableDeGrave set Pierre [AppendPierre] puts $Pierre "" puts $Pierre "#Debut $VariableDeGrave" set lElements [uplevel "array names $VariableDeGrave"] if {[llength $lElements]==0} { puts $Pierre "set $VariableDeGrave [list $ContenuVariableDeGrave]" } else { foreach e $lElements { puts $Pierre "set $VariableDeGrave\($e\) [list $ContenuVariableDeGrave($e)]" } } puts $Pierre "#Fin $VariableDeGrave" } proc Grid2Gscope {dirGrid dirGscope PGS {NJob 0}} { if {! [file exists $dirGscope]} {file mkdir $dirGscope} cd $dirGscope set GPtmp [file join $dirGscope tmp] set GPlog [file join $dirGscope log] set GPfiches [file join $dirGscope fiches] set GPbeton [file join $dirGscope beton] set GPprottfa [file join $dirGscope prottfa] set GPtfa [file join $dirGscope tfasdescopains] set GPblastp [file join $dirGscope blastp] set GPballast [file join $dirGscope ballast] set GPmsf [file join $dirGscope msf] set GPinout [file join $dirGscope inout] set GPleon [file join $dirGscope leon] set GPrascal [file join $dirGscope rascal] set GPnormd [file join $dirGscope normd] set GPcluspack [file join $dirGscope cluspack] foreach v [info locals GP*] { if {! [file exists $v]} {file mkdir [set $v]} } set Lfile [glob -directory $dirGrid -nocomplain -- *.tar] set Lfile [lsort -command TrieFileGrid $Lfile] set nd [string length [llength $Lfile]] set format "%s%0${nd}d" foreach f $Lfile { set fdel [glob -nocomplain -directory "$dirGscope/tmp" -- *] foreach e $fdel { file delete -force $e } file copy -force $f [file join $dirGscope tmp $f] cd [file join $dirGscope tmp] catch {exec tar -xf $f} set lgz [glob -nocomplain *.gz] foreach e $lgz { exec gunzip -f $e } set No [NumeroDuJob $PGS] set PGSN "$PGS$No" Espionne "Traite $PGSN" set prefix "" set ltfa [glob -nocomplain *.tfa] foreach f $ltfa { if {[regexp {\-} $f]} {continue} set prefix [string range $f 0 end-4] break } # Traitement prottfa if {[file exists "${prefix}.tfa"]} { file rename -force "${prefix}.tfa" "$GPprottfa/$PGSN" } # Traitement tfas des copains set filroot "${prefix}-filter-OUT" if {[file exists "$filroot"]} { file rename -force "$filroot" "$GPtfa/$PGSN" } # Traitement blast set blaroot "${prefix}-blastall-OUT" if {[file exists "$blaroot.blastp"]} { file rename -force "$blaroot.blastp" "$GPblastp/$PGSN" } # Traitement ballast set balroot "${prefix}-ballast-OUT" if {[file exists $balroot]} { file rename -force $balroot "$GPballast/$PGSN" } if {[file exists "${balroot}.anchors"]} { file rename -force "${balroot}.anchors" "$GPballast/$PGSN.anchors" } if {[file exists "${balroot}.prof"]} { file rename -force "${balroot}.prof" "$GPballast/$PGSN.prof" } if {[file exists "${balroot}.motifs"]} { file rename -force "${balroot}.motifs" "$GPballast/$PGSN.motifs" } # traitement clustalw set clusroot "${prefix}-clustalw-OUT.msf" if {[file exists $clusroot]} { file rename -force "$clusroot" "$GPmsf/$PGSN" } # Traitement de rascal set rasroot "${prefix}-rascal-OUT.msf" if {[file exists $rasroot]} { file rename -force "$rasroot" "$GPrascal/$PGSN" } # Traitement de leon set leonroot "${prefix}-leon-OUT.msf" if {[file exists $leonroot]} { file rename -force "$leonroot" "$GPleon/$PGSN" } # Traitement de leon set norroot "${prefix}-normd-OUT.list" if {[file exists $norroot]} { file rename -force "$norroot" "$GPnormd/$PGSN" } # Traitement de Cluspack set croot "${prefix}cluspackOUT.clu" if {[file exists $croot]} { file rename -force "$croot" "$GPcluspack/$PGSN" } } exit } proc GrilladesEnCours {{Qui ""} {Quoi ""}} { global GEC #rR Attention c'est pas très clair : OI utilise surtout les liens et ici on se sert des fiheirs dans fiches. A CLARIFIER !!!" if {[info exists GEC($Qui,$Quoi)]} { if {[PourWscope]} { return [join $GEC($Qui,$Quoi) "\n"] } return $GEC($Qui,$Quoi) } if {[info exists GEC("EstCharge")]} { return "" } set GEC("EstCharge") 1 set GEC(ListOf,Science) {} set GEC(ListOf,PP) {} set GEC(ListOf,PassePlat) {} #rR les passeplats sont tries ... du coup c'est le dernier qui est pris en compte pour une science set LesFichesPassePlats [lsort [glob -nocomplain "/genomics/link/*/fiches/PassePlat_*"]] set LesScience {} foreach FichePassePlat $LesFichesPassePlats { Espionne $FichePassePlat set Science [file tail [file dirname [file dirname $FichePassePlat]]] set PassePlat [ContenuDuFichier $FichePassePlat] set GEC($Science,PassePlat) $PassePlat set PP [file tail $PassePlat] set GEC($PP,Science) $Science lappend GEC(ListOf,Science) $Science lappend GEC(ListOf,PP) $PP lappend GEC(ListOf,PassePlat) $PassePlat } set GEC(ListOf,Info) {} foreach Science $GEC(ListOf,Science) { set LienPP "/genomics/link/$Science/fiches/passeplat" set PassePlat $GEC($Science,PassePlat) set NbGrillades [llength [glob -nocomplain "$PassePlat/blastp/*"]] set GEC($Science,NbGrillades) $NbGrillades if { ! [file exists $LienPP]} { if {[OuiOuNon "$LienPP does not exist. Do I create it ?" 0] } { file link -symbolic $LienPP "$PassePlat/blastp" } } lappend GEC(ListOf,Info) [format "%-10s %6d on %s" $Science $NbGrillades $PassePlat] } set GEC(,) [join $GEC(ListOf,Info) "\n"] return [GrilladesEnCours $Qui $Quoi] } proc GrilladinPourOi {{ProjName ""} {FastaFile ""} {BlastDatabase ""} {OptionsBlast ""}} { if {$ProjName==""} { set ProjName "BlastongOi" } if {$FastaFile==""} { set FastaFile [GscopeFile $ProjName "oip"] } if {$BlastDatabase==""} { set BlastDatabase [LocaliseBlastPDataBase] } #f {$OptionsBlast==""} { set OptionsBlast "-W 3 -e 1.0e-5 -v 5000 -b 5000 -K 0 -F F -C 2" } if {$OptionsBlast==""} { set OptionsBlast "-word_size 3 -evalue 1.0e-5 -max_target_seqs 5000 -comp_based_stats 2" } set PassePlat "" if {[ValidBlastDatabaseForGrilladin $BlastDatabase]} { set ProjNameWithDate "${ProjName}_[Date]" set DBSizeTxt [BlastDatabaseSize $BlastDatabase] scan $DBSizeTxt "%d" DBSize Espionne "Grillade::creerPoeleBlastOi ProjectName $ProjNameWithDate Input $FastaFile DB $BlastDatabase DBsize $DBSize BlastOpts $OptionsBlast" set PassePlat [Grillade::creerPoeleBlastOi ProjectName $ProjNameWithDate Input $FastaFile DB $BlastDatabase DBsize $DBSize BlastOpts $OptionsBlast] if {[regexp -nocase "^Error" $PassePlat]} { set Message "Error. Something is wrong with Grilladin. I got the error message $PassePlat" } #rR Ici on fait DEUX choses : on crée un lien et on crée un fichier dans fiches ........................... c'est le lien qui est bon ! #rR Tcl ne veut pas pointer si la cible n'existe pas :file link -symbolic "[RepertoireDuGenome]/passeplat" "$PassePlat/blastp" exec ln -sf "$PassePlat" "[RepertoireDuGenome]/PassePlat_$ProjNameWithDate" AppendAuFichier [Fiches PassePlat_$ProjNameWithDate] $PassePlat set Message "Warning. I launched Grilladin for $ProjName. Blast files will be available at $PassePlat" return $Message } else { set Message "Error. Sorry the blast database '$BlastDatabase' is not a valid blast database for Grilladin" } return $Message } proc GrosGetz {Fichier} { set LesAccess [LesLignesDuFichier $Fichier] foreach Access $LesAccess { set ACCESS [string toupper $Access] set MoiAussi($ACCESS) 1 } set Accesses [join $LesAccess "|"] # Espionne [QuestionDeScience QuidSeq "QuidOSsOfACs $Accesses"] # exit set CommandeGetz "getz -e \"\\\[\{swissprot sptrembl\}-acc: $Accesses\\\]\"" set Texte [eval exec $CommandeGetz] set LaSeq {} foreach Ligne [split $Texte "\n"] { if {[regexp "^AC " $Ligne]} { regsub -all "\;" $Ligne " " Ligne set LesAccessRecus [split $Ligne " "] set AccessOK "Inconnu" foreach Access $LesAccessRecus { set ACCESS [string toupper $Access] if {[info exists MoiAussi($ACCESS)]} { set AccessOK $Access } } } if {[regexp "^//" $Ligne]} { lappend LaSeq $Ligne set Seq [join $LaSeq "\n"] lappend LesSeqs $Seq set MaSeq($AccessOK) $Seq set LaSeq {} } else { lappend LaSeq $Ligne } } foreach Access $LesAccess { set ACCESS [string toupper $Access] Espionne "\n$Access" if { ! [info exists MaSeq($ACCESS)]} { Espionne "$Access ................................................ non trouve" } else { Espionne [set MaSeq($ACCESS)] } } exit } proc GroupDeMaSelection {Box} { set RepertoireProches "[RepertoireDuGenome]/ProchesQuery85" if {[regexp -nocase "Mouse" [RepertoireDuGenome]] || [regexp -nocase "Rat" [RepertoireDuGenome]]} { set FileProches "$RepertoireProches/${Box}.proches" set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} } else { set Cluster [ExtraitInfo $Box "Cluster"] set FileProches "$RepertoireProches/${Cluster}.proches" set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new"} } foreach Name [LesLignesDuFichier $FileProches] { set Group [FromMacsims $FileMacsims $Name Group] lappend LesGroup $Group #Espionne "\t $Name $Group" } set LesGroup [ListeSansDoublon $LesGroup] #Espionne "\t \t LesGroup $LesGroup" return $LesGroup } proc GroupDunName {FileMacsims NameVoulu} { set FileMacsims [TheTrueMacsimsFile $FileMacsims] set fh [open $FileMacsims "r"] dom parse -channel $fh doc close $fh $doc documentElement root foreach seq [$root selectNodes "//sequence"] { set Name [$seq selectNodes "string(./seq-name)"] set Group [$seq selectNodes "string(./seq-info/group)"] if {$Name == $NameVoulu} { $doc delete return $Group } } $doc delete } proc GroupEtNonSubgroupDansXml {} { foreach Nom [ListeDesPABs] { set Fichier "[RepertoireDuGenome]/macsimXml/$Nom" if { ! [file exists $Fichier]} { continue } set LesBonnes {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "" $Ligne]} { continue } lappend LesBonnes $Ligne } SauveLesLignes $LesBonnes dans $Fichier } exit } proc GroupMacsimsAvecFnote {{In ""} {Ou ""}} { set I 0 set LeNew {} foreach Ligne [LesLignesDuFichier $In] { if {[regexp {} $Ligne]} { set PreviousI $I ; set LigneDuGroup $Ligne} if {[regexp {Group([0-9]+)} $Ligne Match G]} { if { ! [info exists DejaVu($PreviousI)]} { regsub {[0-9]+} $LigneDuGroup "$G" NewG set LeNew [lreplace $LeNew $PreviousI $PreviousI $NewG] set DejaVu($PreviousI) 1 } } lappend LeNew $Ligne incr I } return [SauveLesLignes $LeNew dans $Ou] } proc GroupeDpc {Nom {Query SameAs} {InOut Out}} { global GroupeDpc Wup "Attention GroupeDpc ne calcule pas il ne donne que la valeur" Wup "il faut avoir fait GroupeSecator en positionnant ExecutableSecator a dpc" Wup "Ca devrait marcher si il y a le FichierSortieDpc" set OnAppend 0 if {$Query=="" || $Query=="SameAs"} { set Query $Nom } set QueryEstNom [string equal -nocase $Query $Nom] set OnVeutToutLeMonde 0 set OnVeutToutLeMondeAvecGroupe 0 if {$InOut=="ToutLeMonde"} { set OnVeutToutLeMonde 1 set Query "CacheToiQueryQuOnNeTeTrouvePas" } elseif {$InOut=="ToutLeMondeAvecGroupe"} { set OnVeutToutLeMondeAvecGroupe 1 set Query "CacheToiQueryQuOnNeTeTrouvePas" } else { set OutQuery [string equal -nocase $InOut "Out"] } set QUERY [string toupper $Query] if {[info exists GroupeDpc($QUERY)]} { set LeGroupe [set GroupeDpc($QUERY)] if {$OutQuery} { return $LeGroupe } else { return [lappend LeGroupe $Query] } } if {$QueryEstNom && [info exists GroupeDpc("EstCharge")]} { if {$OutQuery} { return {} } else { return [list $Query] } } set FichierGroupeDpc "[RepertoireDuGenome]/fiches/groupedpc" if {[file exists $FichierGroupeDpc]} { foreach Ligne [LesLignesDuFichier $FichierGroupeDpc] { scan $Ligne "%s" NomLu set NomLu [string toupper $NomLu] set GroupeDpc($NomLu) [lrange [split [string trim $Ligne] " "] 1 end] } if { ! $OnAppend} { set GroupeDpc("EstCharge") 1 return [GroupeDpc $Nom $Query $InOut] } } set LeGroupe {} set OnLeTient 0 set FichierSortieDpc "[RepertoireDuGenome]/dpc/$Nom" if { [FileAbsent $FichierSortieDpc] } { foreach Ext [list ".dpc" ".clu"] { set Possible $FichierSortieDpc$Ext if {[FileExists $Possible]} { set FichierSortieDpc $Possible ; break } } append FichierSortieDpc ".dpc" } if { [FileAbsent $FichierSortieDpc] } { return {} } foreach Ligne [LesLignesDuFichier $FichierSortieDpc] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster [0-9]|^unclustered seq} $Ligne]} { if {$OnLeTient} { break } set Numero "" scan $Ligne "%s %s" Groupe Numero if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 } set LeGroupe {} continue } scan $Ligne "%s" Access if {[string toupper $Access]==[string toupper $Query]} { set OnLeTient 1 if {$OutQuery} { continue } } lappend ToutLeMondeAvecGroupe "$Access $Numero" lappend ToutLeMonde $Access lappend LeGroupe $Access } if {$OnVeutToutLeMonde} { return $ToutLeMonde } if {$OnVeutToutLeMondeAvecGroupe} { return $ToutLeMondeAvecGroupe } if {$Groupe=="unclustered"} { return $ToutLeMonde } else { return $LeGroupe } } proc GroupeLesSequences {} { # 1 on supprime tous les groupes touches, et on cree un nouveau groupes avec les sequences selectionness # ==> 'create and delete' # # 2 on cree un nouveau groupe avec les seq s selectionnees et on les enleve de leur groupe d'origine # ==> 'create and keep' # # 3 on fait un groupe avec les seqs selectionnes + toutes celles des groupes qu'elles touchent # ==> 'fusion' global NomNomSeq NomTextSeq NomSeqSel Couleurs ListeSeqsGroupees LNSeqlab WNSeqlab if {[llength $NomSeqSel] < 2} { FaireLire "Please select at least 2 sequences first !" return } # 1 : find a name for the new group set i 1 set gcou "G$i" while {[info exists ListeSeqsGroupees($gcou)]} { incr i set gcou "G$i" } set iGrp $i set bcoul [CouleurO2Ordali [CouleurDuGroupe $iGrp]] # define tag for new group $NomNomSeq configure -state normal $NomNomSeq tag configure TC$gcou -background $bcoul -foreground black # 2 : analyse selected sequences set Liy {} ; set Ly {} set InGroups {} # yw : y dans widget, yl y dans LNSeqlab set Lseqi {} foreach e $NomSeqSel { set ing "G0" lassign [split $e .] yw x lappend Lyw $yw set yl [expr {$yw-1}] lappend Lyl $yl set seqass [lindex $LNSeqlab $yl] foreach g [array names ListeSeqsGroupees] { if {$seqass in [set ListeSeqsGroupees($g)]} { lappend InGroups $seqass $yw $yl $g set ing $g break } } lappend Lseqi $seqass $yw $yl $ing } ClearSelectionNoms if {[llength $InGroups] == 0} { # creation simple d'un groupe CreeSeqlabGroup $gcou $Lseqi set NomSeqSel {} $NomNomSeq configure -state disabled return } # Selected sequences already belong to a/some # groups. Merge or create new group # # 1 how many groups are touched ? set Lg [list] foreach {s yw yl g} $InGroups { lappend Lg $g } set Lg [lsort -unique -dictionary $Lg] set choix [tk_dialog .chx "Merge/Create" "Some sequences already belong to groups.\nDo you want to :" "" -1 "Create and Delete" "Create and Keep" "Fusion" "Cancel"] # Create and Delete if {$choix == 0} { # Create and Delete # ungroup all seqs of selected groups set Lixun {} foreach g $Lg { DetruitSeqlabGroup $g } # puts selected seqs in a new group CreeSeqlabGroup $gcou $Lseqi } elseif {$choix == 1} { # Create and Keep # remove seqs from their actual group set Lixun {} ; set Ltag {} foreach {s yw yl g} $InGroups { lappend Lixun $yl $NomNomSeq tag remove TC$g $yw.0 "$yw.0 lineend" set ig [lsearch -exact $ListeSeqsGroupees($g) $s] set ListeSeqsGroupees($g) [lreplace $ListeSeqsGroupees($g) $ig $ig] update } $NomTextSeq ungroup $Lixun # check for groups with only one sequence foreach g $Lg { if {[llength $ListeSeqsGroupees($g)] <= 1} { DetruitSeqlabGroup $g } } # create a new group with selected seqs CreeSeqlabGroup $gcou $Lseqi } else { # Fusion # search for group with lower name set pg [lindex $Lg 0] # delete groups set Lgi {} foreach g [lrange $Lg 1 end] { foreach s $ListeSeqsGroupees($g) { set yl [lsearch -exact $LNSeqlab $s] set yw [expr {$yl+1}] lappend Lgi $s $yw $yl } DetruitSeqlabGroup $g } # add all to lower group set Lyl {} ; set Ltag {} foreach {s yw yl} $Lgi { lappend Lyl $yl lappend ListeSeqsGroupees($pg) $s lappend Ltag $yw.0 "$yw.0 lineend" } # add seq with no group foreach {s yw yl g} $Lseqi { if {$g eq "G0"} { lappend Lyl $yl lappend ListeSeqsGroupees($pg) $s lappend Ltag $yw.0 "$yw.0 lineend" } } set ipg [string range $pg 1 end] $NomNomSeq tag add TC$pg {*}$Ltag $NomTextSeq group $ipg $Lyl } set NomSeqSel {} $NomNomSeq configure -state disabled return } proc GroupeOumy {Nom {Query SameAs} {InOut Out}} { global GroupeOumy Wup "Attention GroupeOumy ne calcule pas il ne donne que la valeur" Wup "il faut avoir fait GroupeSecator en positionnant ExecutableSecator a Oumy" Wup "Ca devrait marcher si il y a le FichierSortieOumy" set OnAppend 0 if {$Query=="" || $Query=="SameAs"} { set Query $Nom } set QueryEstNom [string equal -nocase $Query $Nom] set OnVeutToutLeMonde 0 set OnVeutToutLeMondeAvecGroupe 0 if {$InOut=="ToutLeMonde"} { set OnVeutToutLeMonde 1 set Query "CacheToiQueryQuOnNeTeTrouvePas" } elseif {$InOut=="ToutLeMondeAvecGroupe"} { set OnVeutToutLeMondeAvecGroupe 1 set Query "CacheToiQueryQuOnNeTeTrouvePas" } else { set OutQuery [string equal -nocase $InOut "Out"] } set QUERY [string toupper $Query] if {[info exists GroupeOumy($QUERY)]} { set LeGroupe [set GroupeOumy($QUERY)] if {$OutQuery} { return $LeGroupe } else { return [lappend LeGroupe $Query] } } if {$QueryEstNom && [info exists GroupeOumy("EstCharge")]} { if {$OutQuery} { return {} } else { return [list $Query] } } set FichierGroupeOumy "[RepertoireDuGenome]/fiches/groupeoumy" if {[file exists $FichierGroupeOumy]} { foreach Ligne [LesLignesDuFichier $FichierGroupeOumy] { scan $Ligne "%s" NomLu set NomLu [string toupper $NomLu] set GroupeOumy($NomLu) [lrange [split [string trim $Ligne] " "] 1 end] } if { ! $OnAppend} { set GroupeOumy("EstCharge") 1 return [GroupeOumy $Nom $Query $InOut] } } set LeGroupe {} set OnLeTient 0 set FichierSortieOumy "[RepertoireDuGenome]/Oumy/$Nom" if { ! [file exists $FichierSortieOumy]} { append FichierSortieOumy ".Oumy" } if { ! [file exists $FichierSortieOumy]} { return {} } foreach Ligne [LesLignesDuFichier $FichierSortieOumy] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster [0-9]|^unclustered seq} $Ligne]} { if {$OnLeTient} { break } set Numero "" scan $Ligne "%s %s" Groupe Numero if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 } set LeGroupe {} continue } scan $Ligne "%s" Access if {[string toupper $Access]==[string toupper $Query]} { set OnLeTient 1 if {$OutQuery} { continue } } lappend ToutLeMondeAvecGroupe "$Access $Numero" lappend ToutLeMonde $Access lappend LeGroupe $Access } if {$OnVeutToutLeMonde} { return $ToutLeMonde } if {$OnVeutToutLeMondeAvecGroupe} { return $ToutLeMondeAvecGroupe } if {$Groupe=="unclustered"} { return $ToutLeMonde } else { return $LeGroupe } } proc GroupeRestant {as al LR} { upvar $as SG upvar $al LG global LNOrdali NomSeqSel # Donne toutes les sequences qui : # - n'ont pas ete selectionnees pour clustering # - ont ete miises dans le groupe poubelle # all seqs set i 1 foreach n $LNOrdali { set TLi($i) 1 incr i } # remove selected foreach p $NomSeqSel { lassign [split $p .] y x set TLi($y) 0 } # add garbage seqs foreach i $LR { incr i set TLi($i) 1 } # take the rest set i 1 set Laisse [list] foreach n $LNOrdali { if {$n ne "" && [set TLi($i)]} { lappend Laisse $n } incr i } if {[llength $Laisse]} { lappend LG "GroupSeqOut" set SG(GroupSeqOut) $Laisse puts "===> GroupeRestant \n[join $Laisse \n]" } return } proc GroupeSecator {NomOuMSFOuAutre {Query SameAs} {InOut Out} {Calculate ""} {OutFile ""}} { global GroupeSecator Wup "InOut can be In, Out or ToutLeMonde, ToutLeMondeAvecGroupe," Wup "or AppendAuGroupeSecator if you want to complete the file groupesecator" Wup "OutFile can be a filename but it works only with ToCalculate." set OutQuery 0 set Racine "TrululuTrala" if {$NomOuMSFOuAutre=="AppendAuGroupeSecator"} { set OnAppend 1 set Nom "Bidon" } else { set OnAppend 0 } set NomOuMSF $NomOuMSFOuAutre set MayBeMSF $NomOuMSF set Nom [file tail $NomOuMSF] if {[file exists $MayBeMSF] && (! [EstUnPAB $Nom] || $Query!="SameAs")} { set FichierMSF $MayBeMSF if { ! [regexp "^/" $FichierMSF]} { set FichierMSF "[pwd]/$MayBeMSF" } set Calculate "ToCalculate" } if {$Query=="" || $Query=="SameAs"} { set Query $Nom } set QueryEstNom [string equal -nocase $Query $Nom] set ToCalculate [string equal -nocase $Calculate "ToCalculate"] set OnVeutToutLeMonde 0 set OnVeutToutLeMondeAvecGroupe 0 set UnGroupe 1 if {$InOut=="ToutLeMonde"} { set OnVeutToutLeMonde 1 set UnGroupe 0 set Query "CacheToiQueryQuOnNeTeTrouvePas" set ToCalculate 1 } elseif {$InOut=="ToutLeMondeAvecGroupe"} { set OnVeutToutLeMondeAvecGroupe 1 set UnGroupe 0 set Query "CacheToiQueryQuOnNeTeTrouvePas" set ToCalculate 1 } else { set OutQuery [string equal -nocase $InOut "Out"] } set QUERY [string toupper $Query] if { ! [info exists FichierMSF] || ! [file exists $FichierMSF]} { if {[info exists GroupeSecator($QUERY)]} { set LeGroupe [set GroupeSecator($QUERY)] if {$OutQuery} { return $LeGroupe } else { return [lappend LeGroupe $Query] } } if {$QueryEstNom && [info exists GroupeSecator("EstCharge")]} { if {$OutQuery} { return {} } else { return [list $Query] } } set FichierGroupeSecator "[RepertoireDuGenome]/fiches/groupesecator" if { ! $ToCalculate && [file exists $FichierGroupeSecator]} { foreach Ligne [LesLignesDuFichier $FichierGroupeSecator] { scan $Ligne "%s" NomLu set NOMLU [string toupper $NomLu] set GroupeSecator($NOMLU) [lrange [split [string trim $Ligne] " "] 1 end] } if { ! $OnAppend} { set GroupeSecator("EstCharge") 1 return [GroupeSecator $Nom $Query $InOut] } } if { $OnAppend || ! $ToCalculate && [OuiOuNonMemo "Do I create the file $FichierGroupeSecator ?" 0]} { foreach PAB [ListeDesPABs] { if {[info exists GroupeSecator($PAB)]} { continue } set FichierMSF "[RepertoireDuGenome]/msf/$PAB" if { ! [file exists $FichierMSF]} { continue } set PL [PremiereLigneDuFichier $FichierMSF] if {[regexp "Clustalw inutile|NoSequence" $PL]} { continue } set LeGroupe [GroupeSecator $PAB $PAB "Out" "ToCalculate"] set Texte "$PAB [join $LeGroupe " "]" AppendAuFichier $FichierGroupeSecator $Texte Espionne "I appended : $Texte" } return [GroupeSecator $Nom $Query $InOut] } set FichierMSF "[RepertoireDuGenome]/msf/$Nom" if { ! [file exists $FichierMSF]} { return {} } } set FichierSortie [Secator $FichierMSF] if {$FichierSortie==""} { return {} } regsub {\.[a-z]+$} $FichierSortie "" Racine set LeGroupe {} set OnLeTient 0 set Numero -1 foreach Ligne [LesLignesDuFichier $FichierSortie] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster [0-9]|^unclustered } $Ligne]} { if { ! $OnVeutToutLeMondeAvecGroupe && ! $OnVeutToutLeMonde && $OnLeTient} { break } set Numero "" scan $Ligne "%s %s" Groupe Numero if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 } set LeGroupe {} continue } scan $Ligne "%s" Access if {[string toupper $Access]==[string toupper $Query]} { set OnLeTient 1 if {$OutQuery} { continue } } lappend ToutLeMondeAvecGroupe "$Access $Numero" lappend ToutLeMonde $Access lappend LeGroupe $Access } if {[regexp "tmp" $Racine]} { foreach Fichier [glob -nocomplain "$Racine*"] { file delete $Fichier } } set Resultat $LeGroupe if {$OnVeutToutLeMonde} { set Resultat $ToutLeMonde } if {$OnVeutToutLeMondeAvecGroupe} { set Resultat $ToutLeMondeAvecGroupe } if {$UnGroupe && $Groupe=="unclustered"} { set Resultat $ToutLeMonde } if {$OutFile==""} { return $Resultat } return [SauveLesLignes $Resultat dans $OutFile] } proc GroupesDpc {aL aT how {NbGr -1}} { upvar $aL NomsGrpDpc upvar $aT LesNomsSeqGrpDpc unset -nocomplain NomsGrpDpc LesNomsSeqGrpDpc if {$how eq "ordali"} { set NmG "dpcordali" set nbc 3 } else { set NmG "dpc" if {$NbGr != -1} { set nbc dpc } else { set nbc $NbGr } } set cm kmeans set LReste [AlignementDesSelections "" SAli] if {! [llength $SAli]} { puts "GroupesZones : Pb creation ali selections" return } if {$LReste != {}} { puts "GroupesZones : [llength [lindex $LReste 1]] seqs virees, pas de seq" } set Lres [Tclcluspack $SAli -dt alignment -cm $cm -nbc $nbc -fd 0.001] ClusterSeqsDeCluspackTcl $Lres LesNomsSeqGrpDpc NomsGrpDpc return $LReste } proc GroupesPhylum {aL aT} { global LaClasseAssocieeAuxSequences LNOrdali LesSequencesAssocieesClassesCanon upvar $aL NomsGrpPhylum upvar $aT LesNomsSeqGrpPhylum set NomsGrpPhylum [list] if {! [info exists LesSequencesAssocieesClassesCanon]} { FaireLire "No phylum information available !" return 0 } set ng 1 set asso [list] foreach c {eukaryota archaea bacteria viruses undefined} { if {$c in [array names LesSequencesAssocieesClassesCanon]} { set Nm "Group$ng" lappend NomsGrpPhylum $Nm lappend asso $Nm $c set LesNomsSeqGrpPhylum($Nm) [set LesSequencesAssocieesClassesCanon($c)] incr ng } } if {$ng == 1} { FaireLire "Life domain information not available !" return 0 } if {$ng == 2} { FaireLire "Beware ! Your alignment contain only [join [array names LesNomsSeqGrpPhylum]]" return 0 } AuLog @begin blob AuLog @title Phylum Clustering : AuLog @text [MacCourant name] foreach {g c} $asso { AuLog @text $g : $c [llength [set LesNomsSeqGrpPhylum($g)]] AuLog @text [set LesNomsSeqGrpPhylum($g)] } AuLog @end ColorieNomsSelonPhylum show return 1 } proc GroupesSecator {aL aT how} { global OrdTmpDir upvar $aL NomsGrpSecator upvar $aT LesNomsSeqGrpSecator unset -nocomplain NomsGrpSecator LesNomsSeqGrpSecator set LReste [AlignementDesSelections "" SAli] if {! [llength $SAli]} { puts "GroupesZones : Pb creation ali selections" return } if {$LReste != {}} { puts "GroupesZones : [llength [lindex $LReste 1]] seqs virees, pas de seq" } set cm hierar if {$how eq "ordali"} { set NmG "secord" set nbc 3 } else { set NmG "secator" set nbc secator } set Lres [Tclcluspack $SAli -dt alignment -cm $cm -nbc $nbc -fd 0.001] ClusterSeqsDeCluspackTcl $Lres LesNomsSeqGrpSecator NomsGrpSecator return $LReste } proc GroupesZones {aL aT quoi {NbGr -1}} { upvar $aL NomsGrp upvar $aT LesNomsSeqGrp global LNOrdali OrdTmpDir ZoneSelect ZoneClusterisation catch {unset NomsGrp} catch {unset LesNomsSeqGrp} set ZoneClusterisation $ZoneSelect set LReste [AlignementDesSelections $ZoneClusterisation SAli] if {! [llength $SAli]} { puts "GroupesZones : Pb creation ali selections" return } if {$LReste != {}} { puts "GroupesZones : [llength [lindex $LReste 1]] seqs virees, pas de seq" } if {$quoi eq "dpc"} { set nbc secator set cm hierar } else { set nbc dpc set cm kmeans } set Lres [Tclcluspack $SAli -dt alignment -cm $cm -nbc $nbc -fd 0.001] ClusterSeqsDeCluspackTcl $Lres LesNomsSeqGrp NomsGrp return $LReste } proc Gs {TypeDeRetour} { # Differents types de retour : # Rien # Text # Frame } proc Gscope {{V ""} {Top ""}} { global RepertoireDuGenome global FichierMiniConfig global FichierMiniConfigSansGenome global GscopeAideSurLesBoutons global VersionDeGscopeAuBigBang VersionDeGscope if { ! [info exists RepertoireDuGenome]} {RepertoireDuGenome} if { ! [info exists CurrentGenome]} {CurrentGenome} if { ! [info exists RepertoireDeTravail]} {RepertoireDeTravail} CommandesExecPossibles if {[info exists GscopeAideSurLesBoutons] && $GscopeAideSurLesBoutons} { bind Button "+TuMontrerasCeQueFaitLeBouton %W" bind Button "+LacheLeBouton %W" } while {! [info exists VersionDeGscopeAuBigBang]} { if {[info exists FichierMiniConfig] && [file exists $FichierMiniConfig]} { ChargeMiniConfig continue } else { Glossaire hsap Court lappend LePrelude "It seems you want to create a new Gscope Project." lappend LePrelude "Gscope can manage different kinds of projects :" lappend LePrelude " - a complete genome, starting with the DNA, creating the proteome" lappend LePrelude " - a collection of proteins, genes, cDNAs, or any type of sequences, etc. " lappend LePrelude "" lappend LePrelude "Gscope can manage proteins, nucleic sequences or BOTH :" lappend LePrelude " Gscope will ask you some questions about that." lappend LePrelude "" lappend LePrelude "Gscope starts reading you original data :" lappend LePrelude " it can be " lappend LePrelude " - a fasta file containing the genome" lappend LePrelude " - a fasta file containing all your sequences" lappend LePrelude " - a file with AccessNumbers" lappend LePrelude " - a file of filenames linking to your sequencess" lappend LePrelude " - a genbank file" lappend LePrelude " - etc." lappend LePrelude "" lappend LePrelude "It's very important to provide all important information concerning your sequences" lappend LePrelude " when you start the project. Gscope integrates easily organism name, genename," lappend LePrelude " gene description, etc., if it is available in your files." lappend LePrelude " For example if your fasta files are as follow" lappend LePrelude ">Genename Organism Definition" lappend LePrelude ">AaEcR-A Aedes aegypti Ecdysone receptor isoforme-A" lappend LePrelude " or your file of filenames" lappend LePrelude "AaEcr-A /home/yourdir/seq/Ecdy.tfa" lappend LePrelude "" lappend LePrelude " Good luck ! (for any question phone to Raymond : 03 88 65 33 05)" set Prelude [join $LePrelude "\n"] FaireLire $Prelude if {[OuiOuNon "Do you have a genomic dna sequence ?"]} { CreeLaBase } elseif {[OuiOuNon "Is it a collection of proteins, genes, dna sequences, mRNAs, etc. ?"]} { CreeLaCollection } else { if {[OuiOuNon "Do I start with \n$FichierMiniConfigSansGenome\n\n[ContenuDuFichier $FichierMiniConfigSansGenome]"]} { set FichierMiniConfig $FichierMiniConfigSansGenome continue } else { if {[OuiOuNon "Do we try later ... ?"]} { exit } } } } } LesOrganismesTresProches if {$V=="NoVitrine"} { return } set Vitrine [Vitrine $V $Top] update idletasks if {0} { catch {Parle "Gscope est chargé. On peut commencer. Mais ! Malédiction ! Ils ont fait un crochet ... ils nous avaient donc repérés." "fr"} } return $Vitrine } proc GscopeBin {} { global GscopeBin return $GscopeBin } proc GscopeBoard {{Titre ""} {PourGif ""}} { global RepertoireDuGenome global ListeDeBoites global ScaleCumuleDeGonfle OrigXCumuleDeGonfle OrigYCumuleDeGonfle global ScrollRectangleOriginal IdScrollRectangle global bVisuPepCurrentGenome bVisuBlastCurrentGenome bVisuMSFCurrentGenome global CouleurDuFond global KanvaCourant global LesKanvasOuverts global Org1 Org2 global LesOrdresPourGif if {$Titre==""} { set Titre "GscopeBoard" } Gs "Canvas" if {$PourGif != ""} { set PourGif 1 set Canvas NeRienFaire set Bind NeRienFaire set Pack NeRienFaire set Fram NeRienFaire set Button NeRienFaire set Scrollbar NeRienFaire set Grid NeRienFaire set FonctionRejetteLaBoite "RejetteLaBoite" set LesOrdresPourGif {} set w "PourGif" set K "OrdrePourGif" } else { set PourGif 0 set Canvas canvas set Bind bind set Pack pack set Fram frame set Button button set Scrollbar scrollbar set Grid grid set FonctionRejetteLaBoite "NeRejettePasLaBoite" set w [NomDe board] catch {destroy $w} toplevel $w wm title $w "$Titre" wm iconname $w "$Titre" set K $w.canvas JeMeSignale "Patience" } if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites } set ScroHor $w.hscroll set ScroVer $w.vscroll set KShSv $w.grid set Boutons $w.buttons set Clavier $w.buttons scan [BoundingBox $ListeDeBoites] "%d %d" xDebut xFin set xDebut [Maxi 0 [expr $xDebut-3000]] incr xFin 1000 set CanvaSizeX [expr $xFin - $xDebut] set CanvaScroMinX [expr $xDebut] set CanvaScroMaxX [expr $xFin ] set CanvaScreenX 1024 set TxtCenX 0 set BoxMinY -20 set BoxMaxY 20 set DeltaY [expr 0.9*($BoxMaxY-$BoxMinY)] set BordHaut [expr 1.5*($BoxMaxY-$BoxMinY)] set EcraseLaFrame(a) 0.8 set EcraseLaFrame(b) 0.8 set EcraseLaFrame(c) 0.8 set EcraseLaFrame(A) 0.8 set EcraseLaFrame(B) 0.8 set EcraseLaFrame(C) 0.8 set EcraseLaFrame(T) 1.0 set EcraseLaFrame(N) 0.7 set EcraseLaFrame(Z) 1.0 set EcraseLaFrame(n) 0.7 set EcraseLaFrame(t) 1.0 set EcraseLaFrame(D) 0.8 set EcraseLaFrame(E) 0.8 set EcraseLaFrame(F) 0.8 set EcraseLaFrame(d) 0.8 set EcraseLaFrame(e) 0.8 set EcraseLaFrame(f) 0.8 set PositionDeLaFrame(a) [expr $BordHaut + 0.0*$DeltaY] set PositionDeLaFrame(b) [expr $BordHaut + 1.0*$DeltaY] set PositionDeLaFrame(c) [expr $BordHaut + 2.0*$DeltaY] set PositionDeLaFrame(A) [expr $BordHaut + 0.5*$DeltaY] set PositionDeLaFrame(B) [expr $BordHaut + 1.5*$DeltaY] set PositionDeLaFrame(C) [expr $BordHaut + 2.5*$DeltaY] set PositionDeLaFrame(T) [expr $BordHaut + 3.0*$DeltaY] set PositionDeLaFrame(N) [expr $BordHaut + 3.2*$DeltaY] set PositionDeLaFrame(Z) [expr $BordHaut + 3.5*$DeltaY] set PositionDeLaFrame(n) [expr $BordHaut + 3.8*$DeltaY] set PositionDeLaFrame(t) [expr $BordHaut + 4.0*$DeltaY] set PositionDeLaFrame(D) [expr $BordHaut + 5.5*$DeltaY] set PositionDeLaFrame(E) [expr $BordHaut + 6.5*$DeltaY] set PositionDeLaFrame(F) [expr $BordHaut + 7.5*$DeltaY] set PositionDeLaFrame(d) [expr $BordHaut + 5.0*$DeltaY] set PositionDeLaFrame(e) [expr $BordHaut + 6.0*$DeltaY] set PositionDeLaFrame(f) [expr $BordHaut + 7.0*$DeltaY] if {[OnTraiteUnGenome]} { set PositionDuSpectre [expr $BordHaut + 9.0*$DeltaY] set PosLineY [expr ($PositionDeLaFrame(a)+$PositionDeLaFrame(f))/2] } else { set PositionDuSpectre [expr $BordHaut + 2.0*$DeltaY] } set TxtCenY 0 set PosSecheLingeMinY 10 set PosSecheLingeMaxY 30 # set yHaut [expr $PositionDeLaFrame(a)-2*$BoxMinY] # set yBas [expr $PositionDeLaFrame(f)+2*$BoxMaxY] # set CanvaSizeY [expr $yBas-$yHaut] # set CanvaScroMinY [expr $yHaut - 0.1*$CanvaSizeY] # set CanvaScroMaxY [expr $yBas + 0.1*$CanvaSizeY] set CanvaScroMinY 0 set CanvaScroMaxY [expr $PositionDuSpectre + 1.2*$DeltaY] set CanvaScreenY [expr $CanvaScroMaxY-$CanvaScroMinY] set CanvaSizeY $CanvaScreenY $Fram $Boutons $Pack $Boutons -side bottom -fill x -pady 2m TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "red" set ToucheDismiss [TouchePour $Clavier "Dismiss" "DetruireLeBoard $w"] $Bind $ToucheDismiss "MainLeveeSurUnCanva $K" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "lightgrey" TouchePour $Clavier "Zoom" "Gonfle $w all " TouchePour <2> "/UnZoom" "Gonfle $w all degonfle" TouchePour <3> "/Reset" "Gonfle $w all reset reset" if { ! [PourWscope]} { TouchePour $Clavier "Vis PNG" "CanvaEnPNG $K Visible AskForFile" TouchePour <2> "/Postscr" "CanvaEnPostscript $K Visible AskForFile" TouchePour <3> "/print" "CanvaEnImpression $K Visible" TouchePour $Clavier "All PNG" "CanvaEnPNG $K OnVeutTout AskForFile" TouchePour <2> "/Postscr" "CanvaEnPostscript $K OnVeutTout AskForFile" TouchePour <3> "/print" "CanvaEnImpression $K OnVeutTout" } TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "yellow" TouchePour $Clavier "Color ORFs" "RedefinirLaCouleur $K" TouchePour <2> "/Banner" "RedefinirLaCouleurDuLinge $K" TouchePour <3> "/Which" "FaireLire \[SignificationLingeFrameFard $K\]" TouchePour $Clavier "Colors display" "AfficheLesCouleursEtSignifications $K" TouchePour <2> "/to file" "CreeLeFichierAssocieAuxCouleurs $K" TouchePour <3> " /On enter" "RedefinirLeFard $K" if { ! [PourWscope]} { TouchePour $Clavier "Action ORF-Enter" "ShowBoxAction Enter" TouchePour <2> "/Clic" "ShowBoxAction Clic" TouchePour <3> "/Show" "ShowBoxAction Which" } TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "green" TouchePour $Clavier "Search" "RepereBox \[Entre \"Nom: [PreFixe]\"\] $K" TouchePour <2> "/Next" "RepereBox Salut $K NextSansInforme" TouchePour <3> "/Info" "RepereBox Salut $K Next" TouchePour $Clavier "Nuc pos." "RepereNuc \[Entre \] $K" TouchePour <2> " /sequence" "RepereNuc \[ChoixParmi \[LocaliseSurADN\]\]\" $K" TouchePour <3> "/ Bird" "BirdGscopeSearch" TouchePour $Clavier "Chromo" "IllustreLesChromosomes" TouchePour <2> "/Histo" "ChoixHistogramme" TouchePour <3> "/Narcisse" "RepereBox \"Nom: \[Narcisse \[Entre\]\]\" $K" if { ! [PourWscope]} { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "lightgrey" TouchePour $Clavier "Sel. to file" "Presente \[LesNomsPiques\]" TouchePour <2> "/to disp" "Presente \[LesNomsPiques\]" TouchePour <3> "/Reset" "Deselecte $K" TouchePour $Clavier "Text font" "Scene $K toggle font" TouchePour <2> "/color" "Scene $K toggle fill" TouchePour $Clavier "Toggle text" "ToggleCanva $K TEXTE" TouchePour <2> "/upper line" "ToggleCanva $K Linge" } if { ! [PourWscope]} { TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "lightblue" TouchePour $Clavier "Blast: X zone" "BlastXsurZone $K" TouchePour <2> "/6P zone" "SixBlastPsurZone $K" TouchePour <3> "/6P sel Prot" "SixBlastPsurPiques \[LesNomsPiques\]" TouchePour $Clavier "Create DNA seq" "CreeLaSequenceDeLaZone $K" TouchePour <2> "/Extend DNA" "VoisinADNDeLaZone $K" TouchePour $Clavier "Create Family" "CreeLesFamillesDesSelectionnes" } # $Button $Boutons.liste -text "List\nTFA/Blast/MSF" # -background "green" -foreground "black" # $Bind $Boutons.liste <1> "$bVisuPepCurrentGenome invoke" # $Bind $Boutons.liste <2> "$bVisuBlastpCurrentGenome invoke" # $Bind $Boutons.liste <3> "$bVisuMSFCurrentGenome invoke" # $Pack $Boutons.liste -side left -expand 1 $Fram $KShSv $Scrollbar $ScroHor -orient horiz -command "$K xview" $Scrollbar $ScroVer -command "$K yview" set BetterCanvaScroMaxY $CanvaScroMaxY if {[OnTraiteDesClones]} { set BetterCanvaScroMaxY 3000 } $Canvas $K -relief sunken -borderwidth 2 -width $CanvaScreenX -height $CanvaScreenY -scrollregion [list $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $BetterCanvaScroMaxY] -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" $Pack $KShSv -expand yes -fill both -padx 1 -pady 1 $Grid rowconfig $KShSv 0 -weight 1 -minsize 0 $Grid columnconfig $KShSv 0 -weight 1 -minsize 0 $Grid $K -in $KShSv -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news $Grid $ScroVer -in $KShSv -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky news $Grid $ScroHor -in $KShSv -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news set CouleurDuFond "cadetblue" $K configure -background $CouleurDuFond set IdScrollRectangle($K) [$K create rectangle $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $BetterCanvaScroMaxY -outline $CouleurDuFond -tag [list "Cadre"]] set ScrollRectangleOriginal($K) "[$K coords [set IdScrollRectangle($K)]]" if {[OnTraiteUnGenome]} { $K create line $CanvaScroMinX $PosLineY $CanvaScroMaxX $PosLineY -fill "black" } set Patientons [$K create text 10 20 -text "Merci de patienter ... " -font {Courier 12} -anchor w] if { ! $PourGif && ! [PourWscope] && [OnTraiteUnGenome]} { AfficheLeSpectreGC $K [expr $PositionDuSpectre - $DeltaY] [expr $PositionDuSpectre + $DeltaY] } #rR set LesBoites [concat [ListeDesGLIMMERs] [ListeDesPABs] [ListeDesTRNAs] [ListeDesARNs] [ListeDesTROUs] [ListeDesFusions]] set LesBoites [concat [ListeDesPABs] [ListeDesTRNAs] [ListeDesARNs] [ListeDesTROUs] [ListeDesFusions]] foreach Boite $LesBoites { if {[$FonctionRejetteLaBoite $Boite]} { continue } set Nom [Box $Boite nom] set Frame [Box $Boite frame] set PosY [set PositionDeLaFrame($Frame)] if {[OnTraiteDesClones]} { set PosY [set PositionDeLaFrame(a)] set DebFinOri "[Box $Boite deb]_[Box $Boite fin]_[Box $Boite ori]" if { ! [info exists DejaPlace($DebFinOri)]} { set DejaPlace($DebFinOri) -1 } set IemePosY [incr DejaPlace($DebFinOri)] set PosY [expr $PosY + $IemePosY*0.9*($BoxMaxY-$BoxMinY)] } set PosMinY [expr $PosY + $BoxMinY*[set EcraseLaFrame($Frame)]] set PosMaxY [expr $PosY + $BoxMaxY*[set EcraseLaFrame($Frame)]] set PosTxtY [expr $PosY + $TxtCenY] set PosMinX [Box $Boite debut] set PosMaxX [Box $Boite fin] set PosTxtX [expr ($PosMinX+$PosMaxX)/2 + $TxtCenX] set Forme "rect" if {[regexp "TROU" $Nom] && ! [PourWscope]} { set Forme "oval" } if {[EstUneFusion $Nom]} { set Forme "oval" } if {[Fantome $Nom]} { set CouleurTrait "white" } else { set CouleurTrait "black" } if {[regexp "GLIMMER" $Nom]} { if {[regexp "^is " [CoGlimmer $Nom]]} { continue } set DecalageY 10 } else { set GlimmerOK [regexp "^is " [CoGlimmer $Nom]] set GlimmerNO [regexp "EstCharge" [CoGlimmer $Nom]] set DecalageY 0 } if {[YaPABenDebutDe $Nom] && $GlimmerNO} { $K create $Forme $PosMinX $PosMinY $PosMaxX [expr $PosMaxY+$DecalageY+10] -fill "lightgrey" -outline "black" -tags [list "Box" "Fantome_$Boite" "FetchMe"] } $K create $Forme $PosMinX $PosMinY $PosMaxX [expr $PosMaxY+$DecalageY] -fill $CouleurDuFond -outline $CouleurTrait -tags [list "Box" "$Boite" "FetchMe"] set TexteOrgAvant "" set TexteOrgApres "" if {0 && [YaPABenDebutDe $Nom] && ! [ExisteOrthologueDans $Org1 $Nom]} { set TexteOrgAvant "+ " } if {0 && [YaPABenDebutDe $Nom] && ! [ExisteOrthologueDans $Org2 $Nom]} { set TexteOrgApres " +" } if {1} { $K create text $PosTxtX $PosTxtY -text "${TexteOrgAvant}[NomDeScene $Boite]${TexteOrgApres}" -fill $CouleurTrait -font {Courier 8} -anchor center -tags [list "TEXTE" "Txt_$Nom" "FetchMe" "DispMe"] } if {[regexp "GLIMMER" $Nom]} { continue } $K create rectangle $PosMinX $PosSecheLingeMinY $PosMaxX $PosSecheLingeMaxY -tags [list "Linge" "Linge$Boite"] } Wup " ............................................et GscopeBoard crea les boites" if { ! $PourGif } { DefinirLaCouleurAuLancement $K } if {[OnTraiteUnGenome] && ! [PourWscope]} { RelieLesOperons $K $PosLineY } $K delete $Patientons if {[PourWscope]} { $K bind "FetchMe" <1> "FetcheBox $K %x %y" } else { $K bind "DispMe" "ShowBox $K %x %y Enter" $K bind "DispMe" "ShowBox $K %x %y Leave" $K bind "Box" "EnterBox $K %x %y" $K bind "Box" "LeaveBox $K %x %y" $K bind "FetchMe" <1> "FetcheBox $K %x %y" $K bind "FetchMe" "FetcheBox $K %x %y MSF" $K bind "FetchMe" "Informe \[NomDuCourant $K\]" $Bind $K <2> "$K scan mark %x %y" if {[OnTraiteDesCDNAs]} { $K bind "Box" <2> "VoirLaMeilleureLocalisationDuCDNA \[NomDuCourant $K\]" } $Bind $K "$K scan dragto %x %y" $K bind "Box" "SautParalogue $K %x %y" $K bind "Box" <3> "PiqueBox $K %x %y Fixe" $Bind $K "ShowNuc $K %x %y Point" $Bind $K "ShowNuc $K %x %y Motion" } if {$PourGif } { return $LesOrdresPourGif } ShowBoxAction EnterDefaults Gonfle $w all 0.1 set KanvaCourant $K lappend LesKanvasOuverts $K JeMeSignale "FinPatience" if {0 && [PourWscope] } { return $w } else { return $K } } proc GscopeCode {CodeClone} { global RepertoireDuGenome set Rep "$RepertoireDuGenome/nuctfa" foreach Fichier [ glob -nocomplain "$Rep/*" ] { set Contenu [ ContenuDuFichier $Fichier] scan $Contenu "%s %s" CodeGscope Clone if {$CodeClone == $Clone} { regsub -all ">" $CodeGscope "" CodeGscope return $CodeGscope } } } proc GscopeCodeAffymetrix {CodeClone} { set Rep "[RepertoireDuGenome]/nuctfa" if {[RepertoireDuGenome]=="[GscopeDatabaseDir Affy]"} { set Rep "[GscopeDatabaseDir AffyTarget]/nuctfa" } foreach Fichier [glob -nocomplain "$Rep/*" ] { set Contenu [ContenuDuFichier $Fichier] scan $Contenu "%s" Nom regsub -all ">" $Nom "" Nom set Code [ExtraitInfo $Nom "CodeClone"] if {$CodeClone == $Code} { return $Nom exit } } } proc GscopeContrib {} { global GscopeContrib if { ! [info exists GscopeContrib]} { return "" } return $GscopeContrib } proc GscopeDatabaseDir {{Dir ""} {Ask ""} {IfExists ""}} { global GscopeDatabaseDir if {$Dir==""} { return [RepertoireDuGenome] } set Queue [file tail $Dir] if {$Queue=="fem"} { return [GscopeDatabaseDir FEM] } foreach Possible [GenomicsPossibles] { set PossibleQueue $Possible/$Queue if {[file exists $PossibleQueue]} { return $PossibleQueue } } if {[string equal -nocase $Ask "Ask"]} { set GDD [ChoixDuRepertoire [Genomics]] if {$GDD!=""} { return $GDD } } if {[string equal -nocase $IfExists "IfExists"]} { return "" } return $Queue return "[GenomicsSubDir $Queue]/$Queue" } proc GscopeDir {} { global GscopeDir return $GscopeDir } proc GscopeEtc {} { global GscopeEtc return $GscopeEtc } proc GscopeEvaluates {LesMotsDeLaCommande {Master ""}} { LogWscope "dans GscopeEvaluates $LesMotsDeLaCommande" if {$Master==""} { set Master "Gscope" } set UseTk 1 if {[lindex $LesMotsDeLaCommande 0]=="-notk"} { set UseTk 0 set LesMotsDeLaCommande [lreplace $LesMotsDeLaCommande 0 0] } if {[lindex $LesMotsDeLaCommande 0]=="data"} { set RG [lindex $LesMotsDeLaCommande 1] RepertoireDuGenome $RG set LesMotsDeLaCommande [lreplace $LesMotsDeLaCommande 0 1] } if {[lindex $LesMotsDeLaCommande 0]=="PourWscope"} { PourWscope 1 set UseTk 0 set LesMotsDeLaCommande [lreplace $LesMotsDeLaCommande 0 0 yes] } if {[regexp -nocase {[a-z]} $LesMotsDeLaCommande]} { set QuoiFaire [lindex $LesMotsDeLaCommande 0] if { ! [regexp "CreeLaCollection|CreeFichierMiniConfig|InitProject" [lrange $LesMotsDeLaCommande 0 1]]} { ChargeConfig } if {$QuoiFaire == "only"} { set Sortie [eval [lrange $LesMotsDeLaCommande 1 end]] return $Sortie } if {$UseTk} { set Commande [join $LesMotsDeLaCommande " "] set PreFixe "" if {[info procs "PreFixe"]!=""} { set PreFixe [PreFixe] } set Process "$Master $PreFixe on [info hostname]\n pid [pid] since [Date Nice]" package require Tk if { ! [winfo exists .] } { wm title . "$PreFixe [string range $Commande 0 20]" button .kill -text "$Process\n\nStop execution of : \n\n$Commande\n\nby pressing Me or killing this window" -background "yellow" -command "exit" pack .kill -fill both } } if {[regexp "^yes" $QuoiFaire]} { InteractiveMode "Off" regsub "^yes" $QuoiFaire "" QuoiFaire if {$QuoiFaire==""} { set QuoiFaire "exe" } if {$QuoiFaire=="con"} { set QuoiFaire "" set LesMotsDeLaCommande [lrange $LesMotsDeLaCommande 1 end] } } set GoAhead 0 if {[regexp -nocase "(and)*continue(and)*" $QuoiFaire]} { regsub -nocase "(and)*continue(and)*" $QuoiFaire "" QuoiFaire set GoAhead 1 } if {$QuoiFaire == "puts" || $QuoiFaire == "putb" || $QuoiFaire == "putl" || $QuoiFaire == "exe"} { set Sortie [eval [lrange $LesMotsDeLaCommande 1 end]] if {$QuoiFaire == "putb" } { fconfigure stdout -translation binary; puts stdout $Sortie ; exit } if {$QuoiFaire == "putl" && $Sortie!=""} { if {[string is list $Sortie]} { set Sortie [join $Sortie "\n"] set QuoiFaire "puts" } } if {$QuoiFaire == "puts" } { puts $Sortie } if {$GoAhead} { return } exit } eval $LesMotsDeLaCommande } return } proc GscopeFile {Nom {SousRep ""}} { #rR Si Nom est vide onrend repertoire avec / a la fin if {$SousRep==""} { if {[OnTraiteDesProteines]} { set SousRep "prottfa" } else { set SousRep "nuctfa" } } return "[GscopeSubDir $SousRep]/$Nom" } proc GscopeFileContent {Nom {SousRep ""} {EnPre ""} {I ""} {J ""}} { #rR on peut lire de la ligne I à J set EnPre [regexp -nocase "Pre" $EnPre] if {$Nom==""} { return "" } set Fichier [GscopeFile $Nom $SousRep] if {[FileAbsent $Fichier]} { return "" } set Contenu [ContenuDuFichier $Fichier] if {[regexp {^[0-9]+$} $I]} { if { ! [regexp {^[0-9]+$} $J]} { set J $I } set Contenu [join [lrange [split $Contenu "\n"] $I $J] "\n"] } if {$EnPre} { return "
$Contenu
" } return $Contenu } proc GscopeID {SpineID} { global GscopeID if {[info exists GscopeID($SpineID)]} { return $GscopeID($SpineID) } if {[info exists GscopeID("EstCharge")]} { return "" } set GscopeID("EstCharge") 1 foreach Nom [ListeDesPABs] { if {[EstUnPABMute $Nom]} {continue} set S [SpineID $Nom] if {$S==""} { continue } set GscopeID($S) $Nom } return [GscopeID $SpineID] } proc GscopeIdsOfGeneName {Gn {WithSynonyms ""}} { global GscopeIdsOfGeneName set WithSynonyms [regexp -nocase "WithSynonym" $WithSynonyms] set GN [string toupper $Gn] if {[info exists GscopeIdsOfGeneName($GN)]} { return $GscopeIdsOfGeneName($GN) } if {[info exists GscopeIdsOfGeneName("EstCharge")]} { return {} } set GscopeIdsOfGeneName("EstCharge") 1 set GscopeIdsOfGeneName(LISTOFGENENAMES) {} foreach Nom [ListeDesPABs] { set ValiGN [ValiGN $Nom] if {$ValiGN==""} {continue} lappend GscopeIdsOfGeneName(LISTOFGENENAMES) $ValiGN lappend GscopeIdsOfGeneName([string toupper $ValiGN]) $Nom set LesAliasGn [AliasGeneNames $Nom] foreach GnLu $LesAliasGn { set GNLU [string toupper $GnLu] lappend GscopeIdsOfGeneName($GNLU) $Nom } lappend GscopeIdsOfGeneName(LISTOFGENENAMES) $GnLu if {$WithSynonyms} { foreach Synonym [SynonymsOfGscopeId $Nom] { set SYNONYM [string toupper $Synonym] lappend GscopeIdsOfGeneName($SYNONYM) $Nom } } } set GscopeIdsOfGeneName(LISTOFGENENAMES) [lsort -unique $GscopeIdsOfGeneName(LISTOFGENENAMES)] return [GscopeIdsOfGeneName $Gn] } proc GscopeIdsOfIdAccArnm {accarnm} { global GscopeIdsOfIdAccArnm if {[info exists GscopeIdsOfIdAccArnm($accarnm)]} { return $GscopeIdsOfIdAccArnm($accarnm) } if {[info exists GscopeIdsOfIdAccArnm("EstCharge")]} { return {} } set GscopeIdsOfIdAccArnm("EstCharge") 1 foreach Nom [ListeDesPABs] { set Acc [AccessEvi $Nom] lappend GscopeIdsOfIdAccArnm($Acc) $Nom } return [GscopeIdsOfIdAccArnm $accarnm] } proc GscopeIdsOfIdAccProt {Iap} { global GscopeIdsOfIdAccProt set IAP [string toupper $Iap] if {[info exists GscopeIdsOfIdAccProt($IAP)]} { return $GscopeIdsOfIdAccProt($IAP) } if {[info exists GscopeIdsOfIdAccProt("EstCharge")]} { return {} } set GscopeIdsOfIdAccProt("EstCharge") 1 foreach Nom [ListeDesPABs] { foreach IapLu [split [ExtraitInfo $Nom "IdAccProt:"] " "] { set IapLu [string trim $IapLu] set IAPLU [string toupper $IapLu] lappend GscopeIdsOfIdAccProt($IAPLU) $Nom lappend GscopeIdsOfIdAccProt(LISTOFIDACCPROTS) $IapLu } } set GscopeIdsOfIdAccProt(LISTOFIDACCPROTS) [lsort -unique $GscopeIdsOfIdAccProt(LISTOFIDACCPROTS)] return [GscopeIdsOfIdAccProt $Iap] } proc GscopeIdsOfProbeSet {Ps} { global GscopeIdsOfProbeSet if {[info exists GscopeIdsOfProbeSet($Ps)]} { return $GscopeIdsOfProbeSet($Ps) } if {[info exists GscopeIdsOfProbeSet("EstCharge")]} { return {} } set GscopeIdsOfProbeSet("EstCharge") 1 foreach Nom [ListeDesPABs] { set LaLigneProbesSet [ExtraitInfo $Nom "ProbeSetId:"] regsub -all "/" $LaLigneProbesSet "-OU-" LaLigneProbesSet set LesProbesSet [split $LaLigneProbesSet ","] foreach PsLu $LesProbesSet { lappend GscopeIdsOfProbeSet($PsLu) $Nom lappend GscopeIdsOfProbeSet(LISTOFProbeSet) $PsLu } } return [GscopeIdsOfProbeSet $Ps] } proc GscopeIsOpen {} { global GscopeIsOpen if {[info exists GscopeIsOpen]} { return $GscopeIsOpen } set GscopeIsOpen [InsideCSTB] return $GscopeIsOpen } proc GscopeLangue {{Langue ""}} { set Langue [string tolower $Langue] global GscopeLangue if {$Langue!=""} { set LesPossibles [list gscope english francais elsassich] if {[lsearch $LesPossibles $Langue]<0} { set Langue "" } set GscopeLangue $Langue } if { ! [info exists GscopeLangue] || $GscopeLangue==""} { set GscopeLangue "english" } return $GscopeLangue } proc GscopeSubDir {SousRep} { return "[RepertoireDuGenome]/$SousRep" } proc GscopeSynonyms {{Qui ""} {Quoi ""}} { global GscopeSynonyms if {$Qui==""} { set Qui "ListOf" } if {$Quoi==""} { set Quoi "Synonyms" } set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {[info exists GscopeSynonyms($Qui,$Quoi)]} { return $GscopeSynonyms($Qui,$Quoi) } if {[info exists GscopeSynonyms("EstCharge")]} { return "" } set GscopeSynonyms("EstCharge") 1 set GscopeSynonyms(LISTOF,SYNONYMS) {} foreach Nom [ListeDesPABs] { set LesSyn [Synonyms $Nom] foreach Syn $LesSyn { set SYN [string toupper $Syn] lappend GscopeSynonyms(LISTOF,SYNONYMS) $Syn lappend GscopeSynonyms($SYN,GSCOPEIDS) $Nom foreach S $LesSyn { lappend GscopeSynonyms($SYN,SYNONYMS) $S } } } set GscopeSynonyms(LISTOF,SYNONYMS) [lsort -unique $GscopeSynonyms(LISTOF,SYNONYMS)] foreach Syn $GscopeSynonyms(LISTOF,SYNONYMS) { set SYN [string toupper $Syn] set GscopeSynonyms($SYN,SYNONYMS) [ListeSansDoublon $GscopeSynonyms($SYN,SYNONYMS) "" "NoEmpty"] } return [GscopeSynonyms $Qui $Quoi] } proc GuideMoi {{Message ""}} { if {$Message==""} { set Message "Please choose ..." } set Science [file tail [RepertoireDuGenome]] PourWscope 1 set WikiRef "[LbgiUrl]/wikili/index.php/Gscope" if {[Science]=="ProGS"} { set WikiRef "[LbgiUrl]/wikili/index.php/Gscope_Clonage" } set N [llength [ListeDesPABs]] if {[OnTraite MSP]} { lappend LesRefText "[WscopeScience]&OuSontLesMutations" "OuSontLesMutations ?" } lappend LesRefText "[LbgiUrl]/wikili/index.php/Gscope" "Get help from Wiki" lappend LesRefText "[WscopeScience]&RechercheMoi" "Search for a gene, a description, etc..." lappend LesRefText "[WscopeScience]&FileMoi" "List all $N sequences [PreFixe]" lappend LesRefText "[WscopeScience]&FicheMoi" "List information files" lappend LesRefText "[WscopeScience]&SynonymsPourTous&&GetHtml&GscopeSyn" "List all $N sequences Synonyms" lappend LesRefText "[WscopeScience]&SynonymsPourTous&&GetHtml&SynGscope" "List all Synonyms GscopeIds" lappend LesRefText "[WscopeScience]&Environ" "Show environment" lappend LesRefText "[WscopeScience]&Inventaire" "Inventory" LConcat LesRefText [WscopeLinks] if {[PreFixe]=="HNR"} { foreach FiTxt [lsort [glob -nocomplain "[Fiches]/OrganismesPresents-*.txt"]] { regsub "[Fiches]/OrganismesPresents\-" $FiTxt "" Bank regsub ".txt" $Bank "" Bank lappend LesRefText "[WscopeServer]?HNR&GenomiqueComparativeParBlast&$Bank" "Genomique Comparative par $Bank" } } if {[Science]=="RetGene"} { lappend LesRefText "" "" lappend LesRefText "[WscopeScience]&RetGeneMutationOnWeb" "Summary of all mutations" } if {[OnTraiteUCSCGenomes]} { lappend LesRefText "" "" lappend LesRefText "[WscopeScience]&CytoBandUcsc&ListOf&Organisms" "List of available organisms for CytoBandUcsc" lappend LesRefText "[WscopeScience]&CytoBandUcsc&Human&List&Of&CytoBands" "Human CytoBands" lappend LesRefText "[WscopeScience]&CytoBandUcsc&Mouse&List&Of&CytoBands" "Mouse CytoBands" } return [Html_ListOfRefs $LesRefText "

$Message

"] } proc GxAffyGeneArrayHeaders {Qui {Quoi ""}} { global GxAffyHeaders if {[info exists GxAffyHeaders($Qui,$Quoi)]} { return $GxAffyHeaders($Qui,$Quoi) } if {[info exists GxAffyHeaders("EstCharge")]} { return "" } set GxAffyHeaders("EstCharge") 1 set Col -1 foreach Ligne [LesLignesDuFichier "/genomics/link/affyArrayAnnot/GxAffyGeneArrayHeaders.txt"] { scan $Ligne "%s" Gx if {$Gx!="genename" && $Gx!="genedescription" && $Gx!="cytoband" && $Gx!="entrezgene"} {incr Col} if {$Gx=="-"} { continue } set Affy [string trim [StringSuivant "$Gx " dans $Ligne]] lappend GxAffyHeaders($Gx,Col) $Col lappend GxAffyHeaders($Gx,Affy) $Affy set GxAffyHeaders($Affy,Gx) $Gx set GxAffyHeaders($Affy,Col) $Col lappend GxAffyHeaders(ListOf,Col) $Col lappend GxAffyHeaders(ListOf,Gx) $Gx lappend GxAffyHeaders(ListOf,Affy) $Affy } set GxAffyHeaders(ListOf,Gx) [ListeSansDoublon $GxAffyHeaders(ListOf,Gx)] return [GxAffyHeaders $Qui $Quoi] } proc GxAffyHeaders {Qui {Quoi ""}} { global GxAffyHeaders if {[info exists GxAffyHeaders($Qui,$Quoi)]} { return $GxAffyHeaders($Qui,$Quoi) } if {[info exists GxAffyHeaders("EstCharge")]} { return "" } set GxAffyHeaders("EstCharge") 1 set Col -1 foreach Ligne [LesLignesDuFichier "/genomics/link/affyArrayAnnot/GxAffyHeaders.txt"] { scan $Ligne "%s" Gx if {$Gx!="cytoband"} {incr Col} if {$Gx=="-"} { continue } set Affy [string trim [StringSuivant "$Gx " dans $Ligne]] set GxAffyHeaders($Gx,Col) $Col set GxAffyHeaders($Gx,Affy) $Affy set GxAffyHeaders($Affy,Gx) $Gx set GxAffyHeaders($Affy,Col) $Col lappend GxAffyHeaders(ListOf,Col) $Col lappend GxAffyHeaders(ListOf,Gx) $Gx lappend GxAffyHeaders(ListOf,Affy) $Affy } return [GxAffyHeaders $Qui $Quoi] } proc GxAgilentHeaders {Qui {Quoi ""} File} { global GxAgilentHeaders if {[info exists GxAgilentHeaders($Qui,$Quoi,$File)]} { return $GxAgilentHeaders($Qui,$Quoi,$File) } if {[info exists GxAgilentHeaders("EstCharge")]} { return "" } set GxAgilentHeaders("EstCharge") 1 set Col -1 # File"/genomics/link/agilentArrayAnnot/GxAgilentHeaders.txt" foreach Ligne [LesLignesDuFichier $File] { scan $Ligne "%s" Gx if {$Gx!="cytoband"} {incr Col} if {$Gx=="-"} { continue } set Agilent [string trim [StringSuivant "$Gx " dans $Ligne]] lappend GxAgilentHeaders($Gx,Col,$File) $Col lappend GxAgilentHeaders($Gx,Agilent,$File) $Agilent set GxAgilentHeaders($Agilent,Gx,$File) $Gx set GxAgilentHeaders($Agilent,Col,$File) $Col lappend GxAgilentHeaders(ListOf,Col,$File) $Col lappend GxAgilentHeaders(ListOf,Gx,$File) $Gx lappend GxAgilentHeaders(ListOf,Agilent,$File) $Agilent } set GxAgilentHeaders(ListOf,Gx,$File) [ListeSansDoublon $GxAgilentHeaders(ListOf,Gx,$File)] return [GxAgilentHeaders $Qui $Quoi $File] } proc GxData {{Value ""}} { global GxData if {$Value!=""} { set GxData $Value } if { ! [info exists GxData]} { GxData "[GxHome]/GxData" } return $GxData } proc GxDbInput {{Quoi ""} {Qui ""} {AvecWS ""}} { if {[regexp {^0 } $Qui]} { set Qui "" } if {[regexp {[ \n]} $Qui]} { set Qui [split $Qui " \n"] } if {[llength $Quoi]>1} { set LeR {} foreach Q $Quoi { set R [GxDbInput $Q $Qui] lappend LeR $R } return $LeR } if {$AvecWS==""} { set AvecWS "AvecWS" } set AvecWS [string equal -nocase $AvecWS "AvecWS"] set WithWS [WithWebService "Gx" $AvecWS] set LesPossibles [list "SourceProbesetInput" "ArraytypeInput" "ProbesetInput"] if {$Quoi=="GetList"} { return $LesPossibles } if {$Quoi==""} { set Quoi [ChoixParmi $LesPossibles] } if {$Quoi==""} { return "" } if {[lsearch $LesPossibles $Quoi]<0} { return "$Quoi is not yet possible" } set R [$Quoi $Qui] return $R } proc GxDbSqlExec {Query {Quoi ""} {Clear ""}} { #webservice ne marche pas if {0 && [WithWebService "Gx"]} { set GetWhatKey "trululu" set GetWhat "trululu" if {$Quoi!=""} { set GetWhatKey "getwhatfromserial"; set GetWhat $Quoi } set Retour [WebService "Gx" GxDbSqlExec querytext $Query $GetWhatKey $GetWhat] } else { CanalSqlGxDb set Retour [SqlExec $Query $Quoi $Clear] CanalSqlDisconnect } return $Retour } proc GxGenesFromRealExp {RealExp {AnaSoft ""} {Tag ""} {Min ""} {Max ""}} { if {$AnaSoft==""} { set AnaSoft 0 } set GeneNames [WebService "Gx" Execute querytext "PW::GXSignalIntensity&&0&$AnaSoft&$RealExp&&$Tag&$Min&$Max&GeneAsText"] set LesGeneNames {} foreach Ligne [split $GeneNames "\n"] { regsub -all {[ /]+} $Ligne " " Ligne foreach G [split [string trim $Ligne] " "] { lappend LesGeneNames $G } } set LesGeneNames [lsort -unique $LesGeneNames] return $LesGeneNames } proc GxHome {{Value ""}} { global GxHome if {$Value!=""} { set GxHome $Value } if { ! [info exists GxHome]} { GxHome "[HomeRipp]/GxHome" } return $GxHome } proc GxIlluminaHeaders {Qui {Quoi ""}} { global GxIlluminaHeaders if {[info exists GxIlluminaHeaders($Qui,$Quoi)]} { return $GxIlluminaHeaders($Qui,$Quoi) } if {[info exists GxIlluminaHeaders("EstCharge")]} { return "" } set GxIlluminaHeaders("EstCharge") 1 set Col -1 foreach Ligne [LesLignesDuFichier "/genomics/link/illuminaArrayAnnot/GxIlluminaHeaders.txt"] { scan $Ligne "%s" Gx incr Col if {$Gx=="-"} { continue } set Illumina [string trim [StringSuivant "$Gx " dans $Ligne]] lappend GxIlluminaHeaders($Gx,Col) $Col lappend GxIlluminaHeaders($Gx,Illumina) $Illumina set GxIlluminaHeaders($Illumina,Gx) $Gx set GxIlluminaHeaders($Illumina,Col) $Col lappend GxIlluminaHeaders(ListOf,Col) $Col lappend GxIlluminaHeaders(ListOf,Gx) $Gx lappend GxIlluminaHeaders(ListOf,Illumina) $Illumina } set GxIlluminaHeaders(ListOf,Gx) [ListeSansDoublon $GxIlluminaHeaders(ListOf,Gx)] return [GxIlluminaHeaders $Qui $Quoi] } proc HGNC {{Qui ""} {Quoi ""}} { global HGNC if {[string equal -nocase $Quoi "GeneName"]} { set Quoi "Approved_Symbol" } if {$Qui==""} { set Qui "ListOf" } if {$Quoi=="" && [string equal -nocase $Qui "ListOf"]} { set Quoi "Header" } if {$Quoi==""} { set Quoi "AllTxt" } set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {$Quoi=="ALLTXT" || $Quoi=="ALLLIST" || $Quoi=="ALLHTML"} { set LeTout [HGNC $Qui All] if {$LeTout==""} { return "" } foreach T [HGNC ListOf Header] V $LeTout { lappend LeRetour [format "%45s : %s" $T $V] } if {$Quoi=="ALLLIST"} { return $LeRetour } set Retour [join $LeRetour "\n"] if {$Quoi=="ALLHTML" || [PourWscope]} { return "
\n$Retour\n
" } if {$Quoi=="ALLTXT"} { return $Retour } return $Retour } if {[info exists HGNC($Qui,$Quoi)]} { return $HGNC($Qui,$Quoi) } if {[info exists HGNC("EstCharge")]} { if {[info exists HGNC($Qui,REFERENCES)]} { set FirstRef [lindex $HGNC($Qui,REFERENCES) 0] return [HGNC $FirstRef $Quoi] } return "" } set HGNC("EstCharge") 1 set FichierHGNC "[GscopeDatabaseDir UCSCGenomes]/GeneNaming/HGNC.txt" set Q [file tail $FichierHGNC] regsub -nocase {\.[^\.]+$} $Q "" Q LoadTxl $FichierHGNC Txl -1 "\t" set HGNC(FILE,NAME) $FichierHGNC set HGNC(FILE,QUEUE) $Q set HGNC(LISTOF,HEADER) $Txl(ListHeaderPlease,$Q) lappend HGNC(LISTOF,HEADER) "Source_of_information" lappend HGNC(LISTOF,HEADER) "HttpReference" set HGNC(LISTOF,INDEX) $Txl(ListAllPlease,$Q) foreach I $Txl(ListAllPlease,$Q) { set HGNCID "$Txl($I,HGNC_ID)" if { ! [regexp {^HGNC\:} $HGNCID]} { set HGNCID "HGNC:$HGNCID" } set Txl($I,HGNC_ID) $HGNCID set AS $Txl($I,Approved_Symbol) if {[info exists Txl($I,Aliases)]} { set Aliases $Txl($I,Aliases) } if {[info exists Txl($I,Synonyms)]} { set Aliases $Txl($I,Synonyms) } lappend HGNC(LISTOF,SYNOTXT) $Aliases set Previous $Txl($I,Previous_Symbols) set HGNC($AS,HGNC_ID) $I if {[info exists DejaVu($AS)]} { FaireLire "I saw already $AS $I $DejaVu($AS)" } set DejaVu($AS) $I lappend HGNC(LISTOF,APPROVED_SYMBOL) $AS set LesAlias [split $Aliases ","] set LesPrevious [split $Previous ","] set LesAliasEtPrevious [lsort -unique [concat $LesAlias $LesPrevious]] set HGNC($HGNCID,SYNONYMS) {} foreach Alias $LesAliasEtPrevious { regsub -all " " $Alias "" Alias lappend HGNC($HGNCID,LISTOFSYNONYM) $Alias lappend HGNC($AS,LISTOFSYNONYM) $Alias set ALIAS [string toupper $Alias] lappend HGNC($ALIAS,REFERENCES) $HGNCID lappend HGNC(LISTOF,ALIAS) $Alias } set LeTout {} foreach T $Txl(ListHeaderPlease,$Q) { lappend LeTout $Txl($I,$T) set HGNC($HGNCID,[string toupper $T]) $Txl($I,$T) set HGNC($AS,[string toupper $T]) $Txl($I,$T) } set HGNC($HGNCID,SOURCE_OF_INFORMATION) "Created by Gscope with download from http://www.genenames.org" lappend LeTout $HGNC($HGNCID,SOURCE_OF_INFORMATION) regsub -all {[^0-9]} $HGNCID "" HGNCIDnu set Ref "http://www.genenames.org/data/hgnc_data.php?hgnc_id=$HGNCIDnu" set TexteRef $Ref if {[PourWscope]} { set TexteRef "$Ref" } set HGNC($HGNCID,HTTPREFERENCE) $TexteRef lappend LeTout $HGNC($HGNCID,HTTPREFERENCE) set HGNC($HGNCID,ALL) $LeTout set HGNC($AS,ALL) $LeTout lappend HGNC(LISTOF,HGNC_ID) $HGNCID } set HGNC(LISTOF,SYNOTXT) [lsort -unique $HGNC(LISTOF,SYNOTXT)] set HGNC(LISTOF,ALIAS) [lsort -unique $HGNC(LISTOF,ALIAS)] set HGNC(LISTOF,SYNONYM) $HGNC(LISTOF,ALIAS) return [HGNC $Qui $Quoi] } proc HIDDEN_MiseAJourHtml {{W ""} {Action Append}} { #rR ne sert certainement a rien ..... a supprimer global MiseAJourHtml if {$W==""} { if {[info exists MiseAJourHtml]} { return $MiseAJourHtml } else { return {} } } if {$Action=="Append"} { return [lappend MiseAJourHtml $W] } if {$Action=="Reset"} { set Old [MiseAJourHtml] set MiseAJourHtml {} return $Old } } proc HMMVerif {} { # Vérifie si les séquences d'origine se retrouvent dans une sortie blast-like de HMM set FichierDesHMM [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/HMM/19vs19fs" "r"] set FichierDesTrain [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/HMM/ProfileUnfoundTotal.seq" "r"] set FichierDesOrphelins "[Fiches]/HMM/Profile-HMM-unfound.fa" set FichierDesTrouves "[Fiches]/HMM/Profile-HMM-found.fa" if { [file exists $FichierDesOrphelins] } { file delete $FichierDesOrphelins } if { [file exists $FichierDesTrouves] } { file delete $FichierDesTrouves } set Trouves 0 set Total 0 set NonTrouves 0 set Log "" while { [gets $FichierDesHMM LigneHMM] >=0 } { set Log [concat $Log $LigneHMM] } while { [gets $FichierDesTrain Ligne] >=0 } { ScanLaListe $Ligne Sequence incr Total 1 if {[regexp $Sequence $Log]} { incr Trouves 1 AppendAuFichier $FichierDesTrouves ">Staf$Trouves" AppendAuFichier $FichierDesTrouves "$Sequence" } else { incr NonTrouves 1 AppendAuFichier $FichierDesOrphelins ">Staf$NonTrouves" AppendAuFichier $FichierDesOrphelins "$Sequence" } } Espionne "Trouvés : $Trouves/$Total" } proc HTGDeLaSequenceTFA {FichierBlastnHTGReduced FichierTFA Organism} { ##################### Selection du HTG qui "centre" au mieux la sequence query ##################### ###########Ask Blast ############ if {[AskBlast $FichierBlastnHTGReduced NbSubject] == ""} { set NbSubject 0 set TailleQuery [TailleDeLaSequenceDuFichierTFA $FichierTFA] } else { set NbSubject [AskBlast $FichierBlastnHTGReduced NbSubject] set TailleQuery [AskBlast $FichierBlastnHTGReduced Taille ] } if {[AskBlast $FichierBlastnHTGReduced NbSubject]} { for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlastnHTGReduced Subject $i ] set TailleS [AskBlast $FichierBlastnHTGReduced BanqueId $BId Taille ] set NbSegment [AskBlast $FichierBlastnHTGReduced BanqueId $BId NbSegment] for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [AskBlast $FichierBlastnHTGReduced BanqueId $BId Segment $j DQ] set FQ [AskBlast $FichierBlastnHTGReduced BanqueId $BId Segment $j FQ] set DS [AskBlast $FichierBlastnHTGReduced BanqueId $BId Segment $j DS] set FS [AskBlast $FichierBlastnHTGReduced BanqueId $BId Segment $j FS] } } } ### Longueur des segments du HTG prolongeant la sequence query pour chaque subject ### ### Selection du HTG ayant le plus grand plus petit prolongement ### set LesBId [LesBanqueIdDuBlast $FichierBlastnHTGReduced] set LesPetitProlongements {} foreach BId $LesBId { Espionne $BId set TailleSubject [AskBlast $FichierBlastnHTGReduced BanqueId $BId Taille ] set NbSegment [AskBlast $FichierBlastnHTGReduced BanqueId $BId NbSegment ] set DSPremierSegment [AskBlast $FichierBlastnHTGReduced BanqueId $BId Segment 1 DS] set FSDernierSegment [AskBlast $FichierBlastnHTGReduced BanqueId $BId Segment $NbSegment FS] set TaillePremierProlongement [expr $DSPremierSegment -1 ] #Espionne $TaillePremierProlongement set TailleSecondProlongement [expr $TailleSubject - $FSDernierSegment] #Espionne $TailleSecondProlongement set PetitProlongement [MiniDeLaListe [list $TaillePremierProlongement $TailleSecondProlongement]] Espionne $PetitProlongement set TabPetitProlongement($BId,PetitProlongement) $PetitProlongement set TabPetitProlongement(PetitProlongement,$PetitProlongement,BId) $BId lappend LesPetitProlongements $PetitProlongement } Espionne $LesPetitProlongements set MeilleurPetitProlongement [MaxiDeLaListe $LesPetitProlongements] Espionne "MeilleurPetitProlongement : $MeilleurPetitProlongement" set MeilleurHTG [set TabPetitProlongement(PetitProlongement,$MeilleurPetitProlongement,BId)] Espionne "Meilleur HTG : $MeilleurHTG" AskBlast "unset" return $MeilleurHTG } proc HTMLBoard {} { foreach Ordre [GscopeBoard TitreBidon "PourGIF"] { Espionne [join [DecoupeEnSousOrdresPourGif $Ordre] "\n"] } exit } proc H_AskAndGetFile {} { } proc H_BR {} { return "
" } proc H_BalAtt {Texte Balise {LesAttVal ""}} { set BalAtt "<$Balise" foreach {Attribut Valeur} $LesAttVal { if {$Attribut eq "ValueOnly"} { append BalAtt " $Valeur" } else { append BalAtt " $Attribut=\"$Valeur\"" } } append BalAtt ">" append BalAtt $Texte append BalAtt "" return $BalAtt } proc H_Balise {Texte Balise} { set B "<$Balise>\n$Texte\n" } proc H_Balises {Texte LesBalises} { if {$LesBalises=={}} { return $Texte } set Bal [lindex $LesBalises 0] return "<$Bal>\n[H_Balises $Texte [lrange $LesBalises 1 end]]\n" } proc H_Bold {Texte} { return [H_Balise $Texte "b"] } proc H_Center {Texte} { return [H_Balise $Texte "center"] } proc H_ChoixParmi {Liste Name {AvecReset ""} {AvecSubmit ""}} { if {[regexp -nocase "AvecReset" $AvecReset] } { set AvecReset 1 } else { set AvecReset 0 } if {[regexp -nocase "AvecSubmit" $AvecSubmit]} { set AvecSubmit 1 } else { set AvecSubmit 0 } set LeTexteCP {} lappend LeTexteCP [H_Open [H_BalAtt [H_Pivot] SELECT "NAME $Name"]] lappend LeTexteCP [H_BalAtt ". . . . . . ." OPTION] foreach Ligne $Liste { lappend LeTexteCP [H_BalAtt $Ligne OPTION] } lappend LeTexteCP [H_Close] if {$AvecReset} { lappend LeTexteCP [H_BalAtt "" INPUT "VALUE Reset TYPE reset"] } if {$AvecSubmit} { lappend LeTexteCP [H_BalAtt "" INPUT "VALUE Submit TYPE submit"] } return [join $LeTexteCP "\n"] } proc H_Close {} { global H_OpenClose Wup "H_Open and H_Close allows to encapsulate a text. See Test_H_Open_Close" set Close [lindex $H_OpenClose end] set H_OpenClose [lrange $H_OpenClose 0 end-1] return $Close } proc H_Color {Texte {Couleur ""}} { if {$Couleur==""} { set Couleur "red" } set Hexa [ColorHexa $Couleur] set Color [H_BalAtt $Texte "font" [list "color" "$Hexa"]] return $Color } proc H_ColoredLetters {LesLettres LesCouleurs} { set TexteColore "" foreach Lettre $LesLettres Couleur $LesCouleurs { append TexteColore "$Lettre" } return $TexteColore } proc H_Face {Texte {Fonte ""}} { return [H_Font $Texte $Fonte] } proc H_Font {Texte {Fonte ""}} { if {$Fonte==""} { set Fonte "Courier New,Courier" } set Font [H_BalAtt $Texte "font" [list "face" "$Fonte"]] return $Font } proc H_Href {Texte Url {AutresAttributs ""}} { if {[string trim $Texte]==""} { return " "; } if {$Url==""} { set HrefUrl "href=\"#\"" } else { set HrefUrl "href=\"$Url\"" } set Href "$Texte" return $Href } proc H_HrefGetz {Texte Access Banque {AccOuId Acc}} { while {[regexp " " $Banque]} {regsub -all " " $Banque " " Banque} regsub -all " " $Banque "_SP_" Banque set URL "http://bips.u-strasbg.fr/srsbin/cgi-bin/wgetz?-newId+-e+\[{$Banque}-$AccOuId:'$Access'\]" return [H_Href $Texte $URL] } proc H_Italic {Texte} { return [H_Balise $Texte "i"] } proc H_JavascriptPourWaliLite {} { set LeJs {} lappend LeJs "" set Js [join $LeJs "\n"] return $Js } proc H_LogoBInG {} { return [H_Center [H_Href "" "[LbgiUrl]/~ripp/logoBInG.html"]] } proc H_MorceauxChoisis {Liste NomGeneric {AvecReset ""} {AvecSubmit ""} {MaxCandidats ""}} { if {[regexp -nocase "AvecReset" $AvecReset] } { set AvecReset 1 } else { set AvecReset 0 } if {[regexp -nocase "AvecSubmit" $AvecSubmit]} { set AvecSubmit 1 } else { set AvecSubmit 0 } if {$MaxCandidats==""} { set MaxCandidats 9 } set LeTexteHMC {} for {set C 1} {$C<$MaxCandidats} {incr C} { set Name [format "%s%3.3d" $NomGeneric $C] lappend LeTexteHMC [H_ChoixParmi $Liste $Name] lappend LeTexteHMC [H_BR] } if {$AvecReset} { lappend LeTexteHMC [H_BalAtt "" INPUT "VALUE Reset TYPE reset"] } if {$AvecSubmit} { lappend LeTexteHMC [H_BalAtt "" INPUT "VALUE Submit TYPE submit"] } return [join $LeTexteHMC "\n"] } proc H_Open {Texte} { global H_OpenClose Wup "H_Open and H_Close allows to encapsulate a text. See Test_H_Open_Close" set Pivot [H_Pivot] set i [string first [H_Pivot] $Texte] set Open [string range $Texte 0 [expr $i-1]] set Close [string range $Texte [expr $i+[string length $Pivot]] end] lappend H_OpenClose $Close return $Open } proc H_Pivot {} { return "JeSuIsLePiVoT" } proc H_Redirect {Url {Texte ""}} { if {$Texte==""} { set Texte "Please visit $Url" } return [H_Href $Texte $Url] } proc H_StyleClassePourBalise {Balise LesClassesValeurs {WithElement ""}} { if {[regexp {WithElement_(.+)} $WithElement Match Element]} { set WithElement 1 } else { set WithElement 0 } lappend Local "" return [join $Local "\n"] } proc H_StyleDesCouleursColSco {} { lappend LesClassesValeurs "cs0" "color:black ; background:lightgrey;" lappend LesClassesValeurs "cs1" "color:white ; background:black;" return [H_StyleClassePourBalise "span" $LesClassesValeurs "WithElement_a"] } proc H_StyleDesCouleursFtype {} { foreach Couleur [CouleurSeqlab "LaListeMerci"] { set N [CouleurSeqlab $Couleur] if {$N<0} { set N 999 } set Classe "C$N" set Fg "Magenta" set FgBg [LesCouleursSeqlabDesAAs "fg_and_bg_of_bg_$Couleur"] scan $FgBg "%s" Fg lappend LesClassesValeurs $Classe "color:$Fg ; background:$Couleur;" } return [H_StyleClassePourBalise "span" $LesClassesValeurs "WithElement_a"] } proc H_StyleDesCouleursSeqlab {} { foreach {A F B} [LesCouleursSeqlabDesAAs LaListeMerci] { lappend LesClassesValeurs $A "color:$F ; background:$B;" } return [H_StyleClassePourBalise "span" $LesClassesValeurs "WithElement_a"] } proc H_StyleImageTransdot {} { lappend LesClassesValeurs "transdot" "background-image: url(http://www-bio3d-igbmc.u-strasbg.fr/transdot.gif)" return [H_StyleClassePourBalise "img" $LesClassesValeurs] } proc H_StyleSpanPadding {} { lappend LesClassesValeurs "" "padding-top:3px; padding-bottom:3px" return [H_StyleClassePourBalise "span" $LesClassesValeurs] } proc H_TexteArea {{Texte ""} Name {Rows 5} {Cols 80}} { return [H_BalAtt $Texte TEXTAREA "name $Name rows $Rows cols $Cols"] } proc HandleZoom {n win} { global pgl if {$pgl(Zoom) > 1.} { set pgl(Zoom) [expr {$pgl(Zoom) + $n/$pgl(Zoom)}] } else { set pgl(Zoom) [expr {$pgl(Zoom) + $n*$pgl(Zoom)}] } if {$pgl(Zoom) < 0.0001} {set pgl(Zoom) 0.0001} Update3DMatrices $pgl(wogl) postredisplay return } proc HasBranches {Tree} { return [DataSet hasBranches $Tree] } proc HashExiste {l {aT ""}} { foreach v $l { set HExst($v) 1 } return [array get HExst] } proc HauteurDe {w} { global Memo return [set Memo(HauteurDe$w)] } proc HeaderFileAffy {Qui} { #exemple de Qui "/genomics/link/affyArrayAnnot/AffyAnno20080708/Mouse430_2.na26.annot.csv" foreach Ligne [LesLignesDuFichier $Qui] { if {[regexp "^#%" $Ligne]} { lappend LesLignes $Ligne } } return $LesLignes } proc HeightMode {AId val} { global Abr set Abr($AId,OffsetY) [expr {[set Abr($AId,OffsetY)] + $val}] if {$val > 0} {set quoi hplus} {set quoi hmoins} ChangeCurseur $AId $quoi OnReDessineArbre $AId set PAD [set Abr($AId,PAD)] bind $PAD [list HeightMode $AId $val] bind $PAD {} return } proc HeightOfTree {Tree} { if {[IsLeaf $Tree]} { return 1 } set Highest 0 foreach B [Branches $Tree] { set H [HeightOfTree $B] if {$H>$Highest} { set Highest $H } } return [incr Highest] } proc HelpIDMapping {{args ""}} { global TIDMap InitIDMapping puts "\nIDMapping :" puts "-----------" puts "\nIDMapping is a tool that convert a list of IDs from/to a database from/to UniProt database. Below is the list of available databases, with their abbreviation :" set lgtName [PlusLongEltDe $TIDMap(Ldbs)] foreach key [array names TIDMap "*,ID"] { lappend LID $TIDMap($key) } set lgtID [PlusLongEltDe $LID] set fmt "%-${lgtName}s %-${lgtID}s %4s" foreach cat $TIDMap(Lcat) { puts "\nCategory : $cat" foreach db $TIDMap($cat) { puts [format $fmt $db $TIDMap($db,ID) $TIDMap($db,sens)] } } puts "" puts "Usage :" puts "IDMapping " puts "\nNote : As this tool converts FROM/TO UniProt database, \t- FROM should be one of ACC+ID, ACC, ID OR \t- TO should be one of ACC or ID " exit } proc HelpSampleTOL {} { puts "\nUsage :" puts "" puts "Arguments are in the form . The following keys are available :" puts "" puts " -ntaxa : number of taxo to choose. Default 100" puts " -root : id/name of the root from which the selection should be done. Default 'cellular organism'" puts " -weighted : the number of taxa to be taken in each branch depends of the weight of this branch. Default 1" puts " -addmodel : Add model organisms to the ntaxa selected. Default 0" puts " -modelsin : The Model Organisms should be included inside the n taxa to be selected. Default 0" puts "\nNote: -addmodel and -modelsin can't be set simultaneously." puts "" puts "Model Organisms :" puts "-----------------" foreach {t n} [$::db eval {select taxid,Name from gold where Model=1}] { puts [format "%6d | %s" $t $n] } puts "" return } proc HeureDansRosace {R X {Y ""} {CentreX ""} {CentreY ""}} { set PI 3.14159 return [Entre0Et2PI [expr $PI/2+[AngleDansRosace $R $X $Y $CentreX $CentreY] ]] } proc HeureDePosADN {PosADN {Orga ""}} { Wup "Returns the clock-wize angle in radian starting at 12:00" set PI 3.14159 if {$Orga==""} { return [expr $PosADN*2*$PI/[LongueurADN]] } return [expr $PosADN*2*$PI/[LongueurADN $Orga]] } proc Hexa2Deci {Hexa {base 32}} { # Ramene valeur hexadecimale a la base donnee # 32 bits -> val entre 0 et 255 # 64 bits -> val entre 0 et 65536 # Surtout utilise pour les couleurs set div [expr {$base/4}] if {! [regexp {^0x} $Hexa]} {set Hexa "0x$Hexa"} return [expr {1.*$Hexa/((2**$div)-1)}] } proc HexaToAscii {Hex} { regsub "^%" $Hex "" Hex regsub -nocase "^ox" $Hex "" Hex set Ascii [format "%c" 0x$Hex] return $Ascii } proc HideGridedFrame {Frame} { Wup "Permet d oublier une frame griddee et de s en rappeller le moment venu" global PosFramePerdue if {[info exists PosFramePerdue] && [info exists PosFramePerdue($Frame)]} { grid $Frame unset PosFramePerdue($Frame) return "" } set PosFramePerdue($Frame) 1 grid remove $Frame return "" } proc HighlightChar {t index} { global Vrp set tg "show_$index" if {$Vrp(oldTag1) ne "" } { $t tag configure $Vrp(oldTag1) -background $Vrp(oldChar) } if {$Vrp(oldTag2) ne "" } { $t tag configure $Vrp(oldTag2) -background [$t cget -background] } $t tag add $tg 1.$index $t tag configure $tg -background $Vrp(showChar) set Vrp(oldTag2) $Vrp(oldTag1) set Vrp(oldTag1) $tg return } proc HighlightClade {Fenetre Action} { set Clade "" if {$Action=="Current"} { set Clade [CladeCourant] } if {$Action=="New"} { set Clade [CladeCourant "New"] } if {$Action=="See"} { return [CladeCourant "See"] } set Clade [Tax $Clade "TaxId"] set LesIllumines {} set Max -10 foreach Ligne [split [PagePropre $Fenetre] "\n"] { if {[incr Max -1]==0} { break } set TaxId "" scan $Ligne "%s %s %d" E S TaxId if { ! [JeSuisTonAncetre $Clade $TaxId]} { continue } lappend LesIllumines " $TaxId " } if {$LesIllumines=={}} { return {} } return [IllumineLaListe $LesIllumines $Fenetre ] } proc HistoDelta {{Clade ""} {Seuil ""} {GetWhat ""} {SelectMethod ""} {UseExpect ""}} { if {$Clade==""} { set Clade [SelectClade] } set EnTest [regexp {^(ripp|scherb)$} [Login]] # set EnTest 0 if {$UseExpect==""} { set UseExpect "UseScore" } set UseExp [string equal -nocase "UseExpect" $UseExpect] if {$GetWhat==""} { set GetWhat "Show" } if {$Seuil==""} { set Seuil 99999 } if {$Clade==""} { set Clade [ReferenceClade] } regsub -all " " $Clade "_" CladeUnderscore set Echantillonage 100 if {[OnTraite CiloCarta Like]} { set LesTaxIdsInteressants [QuestionDeScience CilioCarta "ret CladeContent $Clade"] } elseif {[OnTraite OI2017 Like]} { set LesTaxIdsInteressants [QuestionDeScience OI "ret CladeContentWithinOi2017 $Clade"] } else { FaireLire "Désolé. Il faut êrte CiloCarta LIke ou OI2017 Like" } if {[set i [lsearch $LesTaxIdsInteressants 9606]]>=0} { set LesTaxIdsInteressants [lreplace $LesTaxIdsInteressants $i $i] } set NbTaxId [llength $LesTaxIdsInteressants] foreach TaxId $LesTaxIdsInteressants { set SommeDesDeltasPour($TaxId) 0.0 set NbDeltasPour($TaxId) 0 } set LesMeilleurs {} set NbNom 0 foreach Nom [ListeDesPABs] { if {0 && $EnTest && $Nom > "HSAP20193"} { break } set LesHitsAvecDelta [LesHitsAvecDelta $Nom $LesTaxIdsInteressants $Seuil "GetList" $SelectMethod $UseExpect] if {1 && $NbNom%1000==0} { Espionne $Nom ; EspionneL $LesHitsAvecDelta } if {$LesHitsAvecDelta=={}} { continue } incr NbNom foreach HitAvecDelta $LesHitsAvecDelta { lassign $HitAvecDelta Delta Expect Score TaxId OS Reste regsub -all "\t" $OS " " OS MemOlym $Nom-$TaxId Delta $Delta MemOlym $Nom-$TaxId Info $HitAvecDelta set SommeDesDeltasPour($TaxId) [expr $SommeDesDeltasPour($TaxId)+$Delta] ;#rR attention ici on additionne des carottes et des navets !!!!!!!! car Nom différents set InfoDu($TaxId) "$OS\t$Reste" incr NbDeltasPour($TaxId) lappend LesDeltasDe($TaxId) $Delta lappend LesNomsDe($TaxId,$Delta) $Nom MemOlym $TaxId-$Delta ListOfNom $Nom MemoDelta $TaxId $Delta $Nom set BeauDelta [format "%6.0f" $Delta] if {$Delta!=$BeauDelta} { MemOlym $TaxId-$BeauDelta ListOfNom $Nom ; MemoDelta $TaxId $Delta $Nom} } } foreach TaxId $LesTaxIdsInteressants { if {$NbDeltasPour($TaxId)==0} { set Moyenne -999 } else { set Moyenne [expr $SommeDesDeltasPour($TaxId)/$NbDeltasPour($TaxId)] } set MoyenneDesDeltasPour($TaxId) $Moyenne lappend LesMoyennesDesDeltas $Moyenne lappend LesTaxIdsDeLaMoyenneDesDeltas($Moyenne) $TaxId } if {$UseExp} { set LesMoyennesDesDeltas [lsort -unique -real $LesMoyennesDesDeltas] } else { set LesMoyennesDesDeltas [lsort -decreasing -unique -real $LesMoyennesDesDeltas] } set LaSortie [list "# TailleP NombreDeDelta Moyenne TaxId Nom_de_l'espece "] foreach Moyenne $LesMoyennesDesDeltas { foreach TaxId $LesTaxIdsDeLaMoyenneDesDeltas($Moyenne) { set BelleMoyenne [format "%6.0f" $Moyenne] if { ! [info exists InfoDu($TaxId)]} { continue } lappend LaSortie "[TailleProteome $TaxId]\t$NbDeltasPour($TaxId)\t$BelleMoyenne\t$TaxId\t$InfoDu($TaxId)\t$Moyenne" } } EspionneL $LaSortie set AvecHisto 0 if {$AvecHisto} { set LargeurMax 4000 set HauteurMax 5000 set Largeur 3000 set Hauteur 2000 set K [UnCanva $LargeurMax $HauteurMax $Largeur $Hauteur] global BornesDuGraphe ; set BornesDuGraphe($K) [list -250 0 250 400] } set MinAllDelta 9999999 set MaxAllDelta -9999999 set IemeTaxId -1 foreach TaxId $LesTaxIdsInteressants { if { ! [info exists LesDeltasDe($TaxId)]} { continue } set OS [Tax $TaxId Name] regsub -all " " $OS "_" OSUnderscore incr IemeTaxId set MinAllDelta 9999999 set MaxAllDelta -9999999 foreach Delta $LesDeltasDe($TaxId) { set MinAllDelta [Mini $Delta $MinAllDelta] set MaxAllDelta [Maxi $Delta $MaxAllDelta] } } set IntAllDelta [expr ($MaxAllDelta - $MinAllDelta)/$Echantillonage] set IemeTaxId -1 foreach TaxId $LesTaxIdsInteressants { if { ! [info exists LesDeltasDe($TaxId)]} { continue } set OS [Tax $TaxId Name] regsub -all " " $OS "_" OSUnderscore incr IemeTaxId if {[info exists Cumul]} { unset Cumul } set MinDelta 9999999 set MaxDelta -9999999 foreach Delta $LesDeltasDe($TaxId) { set MinDelta [Mini $Delta $MinDelta] set MaxDelta [Maxi $Delta $MaxDelta] } set IntDelta [expr ($MaxDelta - $MinDelta)/$Echantillonage] set MinDeltaDe($TaxId) $MinDelta set MaxDeltaDe($TaxId) $MaxDelta set IntervalDeltaDe($TaxId) $IntDelta set MinCase 9999 set MaxCase -9999 foreach Delta $LesDeltasDe($TaxId) { if {$IntDelta<0.0000001} { set Case 0 } else { #set Case [expr round(($Delta - $MinDelta)/$IntDelta)] set Case [expr round(($Delta - $MinAllDelta)/$IntAllDelta)] } set MinCase [Mini $MinCase $Case] set MaxCase [Maxi $MaxCase $Case] if { ! [info exists Cumul($Case)]} { set Cumul($Case) 0 } incr Cumul($Case) set Tag($Case) $Delta foreach Nom [MemoDelta $TaxId $Delta] { set BeauDelta [format "%6.0f" $Delta] set BelleMoyenne [format "%6.0f" $Moyenne] MemoInfo $TaxId $Case "$Nom [string trim $BeauDelta] $BelleMoyenne" } } set LesX {} set LesY {} set LesTags {} set LaDistrib [list "#Delta Nb Case TaxId OS Reference_Clade"] set LesBornesDeCases [NombresEntre $MinCase $MaxCase] if { ! $UseExp} { set LesBornesDeCases [lreverse $LesBornesDeCases] } foreach Case $LesBornesDeCases { if { ! [info exists Cumul($Case)]} { set Cumul($Case) 0 } if {$Cumul($Case)==0} { continue } if { ! [info exists Tag($Case)]} { set Tag($Case) "0.0" } if { ! [info exists DeltaDeLaCase($Case)]} { set DeltaDeLaCase($Case) "0.0" } set X [expr $MinAllDelta + $Case*$IntAllDelta] lappend LesX $X lappend LesY $Cumul($Case) lappend LesTags "[format %6.0f $X]:$Cumul($Case) $OS" lappend LaDistrib "[format %6.0f $X]\t$Cumul($Case)\t$Case\tTaxId:$TaxId\tOS:$OSUnderscore\tReferenceClade:$CladeUnderscore" } MemoCase $TaxId LaDistrib $LaDistrib if {$AvecHisto} { set Couleur [Nuance [expr 1.0*$IemeTaxId/$NbTaxId]] Graphe $LesX $LesY $K $Couleur "" "" "" "" "HistoDelta" $LesTags "" "BindOnly_oval" $LargeurMax $HauteurMax } else { # set F [AfficheListe $LaDistrib "AvecCase" $OS] # set B [BoutonneLaFenetre $F "ShowHits" "ShowHitsFromTaxoBlast \[selection get\]"] # $B configure -background "Magenta" } } if {$GetWhat=="Show"} { set F [AfficheListe $LaSortie "" "Delta distribution for $Clade $Seuil $SelectMethod $UseExpect"] set B [BoutonneLaFenetre $F "Distribution" "ShowDeltaDistribution \[selection get\]"] $B configure -background "Magenta" } return $LaSortie } 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 HistoJulie {} { foreach Ligne [LesLignesDuFichier /genomics/link/Balibase30/all.seqcount] { scan $Ligne "%d" X lappend LesX $X } Histogramme $LesX Nombre } proc HistoLongueur {} { set dcdn "toto" sqlite3 $dcdn wobble.sql set db [rrps_setup] set Ltables [lsort [$dcdn eval {select tbl_name from sqlite_master}]] set Lpk [$dcdn eval "select pk_items from [lindex $Ltables 0]"] set Lseq [$db eval "select seqpdb from items where pk_items in ([join $Lpk ,])"] set Lg [list] foreach seq $Lseq { set seq [string map {- "" X "" 0 ""} $seq] lappend Lg [string length $seq] } set LesBornes [list 0 20 20 50 50 100 100 200 200 300 300 400 400 500 500 10000] set i 0 foreach {a b} $LesBornes { set N$i 0 incr i } foreach lgt $Lg { set i 0 foreach {a b} $LesBornes { if {$lgt > $a && $lgt <= $b} { incr N$i break } incr i } } set fout [open ./ToPrint/distri_lgt.html w] puts $fout "Length distribution :
"
    set out1 ""
    set out2 ""
    set i 0
    foreach {a b} $LesBornes {
	append out1 [format "%4d - %4d |" $a $b]
	append out2 [format "    %4d    |" [set N$i]]
	incr i
    }

    puts $fout $out1
    puts $fout $out2
    puts $fout "
" close $fout exit } proc HistoPremier {{Clade ""} {Seuil ""} {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "Show" } if {$Seuil==""} { set Seuil 0.001 } if {$Clade==""} { set Clade [ReferenceClade] } if {[OnTraite CiloCarta Like]} { set LesTaxIdsInteressants [QuestionDeScience CilioCarta "ret CladeContent $Clade"] } elseif {[OnTraite OI2017 Like]} { set LesTaxIdsInteressants [QuestionDeScience OI "ret CladeContentWithinOi2017 $Clade"] } else { FaireLire "Désolé il faut être LioCarta Like ou OI2017 Like" } set LesMeilleurs {} set N 0 foreach Nom [ListeDesPABs] { if {$N%100==0} { Espionne "$N $Nom" } if {$Nom>"HSAP01000"} { break } set LesPremiers [TousLesPremiersDuClade $Nom $LesTaxIdsInteressants "" "GetList"] if {$LesPremiers=={}} { continue } incr N set P [lindex $LesPremiers 0] lassign $P PN TaxId OS if { ! [info exists Cumul($TaxId)]} { set Cumul($TaxId) 0 lappend LesMeilleurs $TaxId } incr Cumul($TaxId) } set LesMeilleurs [lsort -unique $LesMeilleurs] foreach Meilleur $LesMeilleurs { set C $Cumul($Meilleur) lappend LesCumularsDe($C) $Meilleur } set LesC [array names LesCumularsDe] set LesMeilleursTries {} foreach C [lsort -decreasing -integer $LesC] { LConcat LesMeilleursTries $LesCumularsDe($C) } foreach Meilleur $LesMeilleursTries { lappend LaSortie "$Cumul($Meilleur) $Meilleur [Tax $Meilleur Name]" } return $LaSortie EspionneL $LaSortie SauveLesLignes [array get LesCumularsDe] dans "/home/scherb/gscoperso/Cumulars.txt" set LesC {} foreach C [lsort -integer [array names LesCumularsDe]] { lappend LesC $C lappend LesNC [llength $LesCumularsDe($C)] } Espionne $LesC Espionne $LesNC return [Graphe $LesC $LesNC "" "" "" "" "" "" "Histogramme coucou"] } proc HistoPremierMemo {{FichierCumulars ""}} { if {$FichierCumulars=={}} { set FichierCumulars "/home/scherb/gscoperso/Cumulars.txt" } array set LesCumularsDe [LesLignesDuFichier $FichierCumulars] parray LesCumularsDe set LesC {} foreach C [lsort -integer [array names LesCumularsDe]] { lappend LesC $C lappend LesNC [llength $LesCumularsDe($C)] } Espionne $LesC Espionne $LesNC return [Graphe $LesC $LesNC "" "" "" "" "" "" "Histogramme coucou"] } proc Histogramme {ListeDeNombres {Sortie ""}} { if {$Sortie==""} { set Sortie "Term" } set MaxLargeur 80 set MaxnN -9999 foreach n $ListeDeNombres { if { ! [info exists nN($n)] } { set nN($n) 0 } incr nN($n) if { [set nN($n)] > $MaxnN } { set MaxnN [set nN($n)] } } set ListeDeNombresTriee [lsort -integer $ListeDeNombres] set Debut [lindex $ListeDeNombresTriee 0] set Fin [lindex $ListeDeNombresTriee end] set LesN [NombresEntre $Debut $Fin] foreach n $LesN { set x 0 if {[info exists nN($n)]} { set x [set nN($n)] } if {$Sortie=="Nombre"} { if {$x==0} { continue } Espionne "[format %3d $n] $x" continue } if {$Sortie=="Term"} { set Largeur [expr int(1.0*$x*$MaxLargeur/$MaxnN)] Espionne "[format %3d $n] [string repeat "." $Largeur]" continue } if {1 || $Sortie=="Graphe"} { lappend LesY $x continue } } if {$Sortie=="Graphe"} { return [Graphe $LesN $LesY] } return [list $LesN $LesY] } proc HistogrammeDesChromosomes {{LesVariables ""} {SplitScreen 0}} { global RepertoireDuGenome set FichierFold "$RepertoireDuGenome/fiches/FoldExpression" if {![file exists $FichierFold]} {set Fold 0} else {set Fold 1} ChargeDistributionsSurChromosomes Tab chr set LesChromosomesAffiches [set Tab(LesChromosomesAffiches)] ChoixDesVariablesDeLHistogramme TabVar $LesVariables set LesVariablesDemandees {} foreach VariableDemandee [set TabVar(LesVariables)] { regsub -all " " $VariableDemandee "_" VariableDemandee lappend LesVariablesDemandees $VariableDemandee set Variable [set TabVar($VariableDemandee)] Espionne $Variable foreach Chromosome $LesChromosomesAffiches { set Valeur [set Tab($Chromosome,$Variable)] if {![info exists VMax]} {set VMax $Valeur;continue} if { $VMax < $Valeur } {set VMax $Valeur } } set Tab($VariableDemandee,Max) $VMax unset VMax } ##########AFFICHAGE################################## set LargeurMax [expr [winfo screenwidth .] - 200] set HauteurMax [expr [winfo screenheight .] - 300] set LargeurFenetre [expr [winfo screenwidth .] - 200 ] set HauteurFenetre [expr [winfo screenheight .] - 300] set BordX 50.0 set BordY 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set PoliceChromo "Courier 9 bold" set nChromosomes [llength $LesChromosomesAffiches] set nVariables [llength $LesVariablesDemandees] set LargeurChromo [expr $LargeurAffichage/(2*$nChromosomes-1)] set LargeurHisto [expr $LargeurChromo/$nVariables] set EcartEntreChromo $LargeurChromo set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] $K configure -background white set PosYMax [expr $HauteurMax - $BordY] set PosXMinDeRef $BordX set PosXMaxDeRef [expr $PosXMinDeRef+$LargeurChromo] if {$SplitScreen} { set HauteurAffichageTmp [expr ($PosYMax - $BordY)/2] set PosYDeRef [expr $HauteurAffichageTmp + $BordY] } else { set PosYDeRef $PosYMax set HauteurAffichageTmp [expr $PosYMax - $BordY] } foreach Chromosome $LesChromosomesAffiches { set i 0 set PosYTexte [expr $HauteurMax - $BordY/2] set PosXTexte [expr ($PosXMaxDeRef+$PosXMinDeRef)/2] $K create text $PosXTexte $PosYTexte -text "$Chromosome" -font "$PoliceChromo" foreach VariableDemandee $LesVariablesDemandees { set VMax [set Tab($VariableDemandee,Max) ] if {$VMax != 0} { set Facteur [expr $HauteurAffichageTmp*1.0/$VMax ] } else { set Facteur 0 } set Variable [set TabVar($VariableDemandee) ] set Valeur [set Tab($Chromosome,$Variable) ] set ColorFill [set TabVar($Variable,Couleur) ] set Unit [set TabVar($Variable,Unit) ] if {$SplitScreen && [regexp -nocase {moins|minus} $Variable]} { set PosYMin $PosYDeRef set PosYMax [expr $PosYDeRef + $Facteur*$Valeur] } else { set PosYMin [expr $PosYDeRef - $Facteur*$Valeur] set PosYMax $PosYDeRef } set PosXMin [expr $PosXMinDeRef + $i*$LargeurHisto] set PosXMax [expr $PosXMin + $LargeurHisto ] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Chromosome" "Variable"] incr i } set PosXMinDeRef [expr $PosXMax + $EcartEntreChromo] set PosXMaxDeRef [expr $PosXMinDeRef+$LargeurChromo] } $K create line $BordX $PosYDeRef [expr $LargeurMax-$BordX] $PosYDeRef -fill black $K bind "Variable" "DevoileLesHistogrammes $K %x %y Enter" $K bind "Variable" "DevoileLesHistogrammes $K %x %y Leave" regsub {\.canvas} $K "" w if {$Fold} { set B [BoutonneLaFenetre $w "Change Parameters\nSplitScreen On/Off\nNew Histogramm"] bind $B <1> "HistogrammeDesChromosomes {} $SplitScreen" bind $B "HistogrammeDesChromosomes \"$LesVariables\" 1" bind $B "HistogrammeDesChromosomes \"$LesVariables\" 0" bind $B "ChoixHistogramme" } else { set B [BoutonneLaFenetre $w "Change Parameters\nNew Histogramm"] bind $B <1> "HistogrammeDesChromosomes {}" bind $B "ChoixHistogramme" } return } proc HistogrammeDesGC {} { set Cumul 0 foreach Nom [ListeDesPABs] { set GC [CompositionEn GC $Nom] set Cumul [expr $Cumul + $GC] lappend Liste $GC } scan [MoyenneEcartMinMaxCumulLong $Liste] "%f %f %d %d" Mo Ec Mi Ma Espionne "$Mo $Ec [expr $Mo-2*$Ec] [expr $Mo+2*$Ec]" Histogramme $Liste exit } proc HistogrammeDesRegions {{LesChromosomesDeRef All} {TypeRegion ctg} {LesVariables ""} {EchelleVariablesId Yes} {EchelleChromoId Yes}} { global RepertoireDuGenome if {$TypeRegion == "chr"} {HistogrammeDesChromosomes} set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierContigs "$RepLocalisation/seq_contig.md" if {![file exists $FichierContigs]} {Espionne "$FichierContigs does not exist" ;return ""} set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} {Espionne "$FichierBandesCytos does not exist";return ""} set FichierFold "$RepertoireDuGenome/fiches/FoldExpression" if {![file exists $FichierFold]} {set Fold 0} else {set Fold 1} ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos if {$LesChromosomesDeRef == "All"} {set LesChromosomesDeRef [set LesBandesCytos(LesChromosomes)]} ##########AFFICHAGE################################## set PolicePetite "Courier 8" set Police "Courier 8" set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set HauteurFenetre [expr [winfo screenheight .] - 200] set nChromo [llength $LesChromosomesDeRef] set LaRepartition [Pavage $nChromo $LargeurMax $HauteurMax] set nChromSurX [lindex $LaRepartition 0] set nChromSurY [lindex $LaRepartition 1] set LargeurAffichage [expr $LargeurMax * 1.0 / $nChromSurX] set HauteurAffichage [expr $HauteurMax * 1.0 / $nChromSurY] set BordX [expr $LargeurAffichage * 0.1 ] set BordY [expr $HauteurAffichage * 0.1 ] set LargeurChromo [expr $LargeurAffichage * 0.04 ] set LargeurBoite [expr $LargeurAffichage * 0.01 ] set EcartEntreRepresentations [expr $LargeurAffichage * 0.1 ] set LargeurHistoMax [expr $LargeurAffichage * 4 / 15] set TailleMaxBrasP [set LesBandesCytos(TaillePMax) ] set TailleMaxBrasQ [set LesBandesCytos(TailleQMax) ] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set Facteur [expr ($HauteurAffichage - 2 * $BordY) / $TailleMaxChromo] ChoixDesVariablesDeLHistogramme TabVar $LesVariables set LesVariables [set TabVar(LesVariables)] foreach VariableDemandee $LesVariables { regsub -all " " $VariableDemandee "_" VariableDemandee lappend LesVariablesDemandees $VariableDemandee set Variable [set TabVar($VariableDemandee)] #######Determination du VMax##### if {[info exists VMax]} {unset VMax} foreach ChromosomeDeRef $LesChromosomesDeRef { ChargeDistributionsSurRegions Tab $ChromosomeDeRef $TypeRegion set LesRegions [set Tab($ChromosomeDeRef,LesRegions)] foreach Region $LesRegions { if {![info exists Tab($ChromosomeDeRef,$Region,$Variable)]} {continue} set Valeur [set Tab($ChromosomeDeRef,$Region,$Variable)] if {![info exists VMax]} {set VMax $Valeur;continue} if { $VMax < $Valeur } {set VMax $Valeur } } if {$EchelleVariablesId != "Yes" && [info exists VMax]} { set Tab($ChromosomeDeRef,$VariableDemandee,Max) $VMax unset VMax } } if {$EchelleVariablesId == "Yes"} { foreach ChromosomeDeRef $LesChromosomesDeRef { set Tab($ChromosomeDeRef,$VariableDemandee,Max) $VMax } if {[info exists VMax]} {unset VMax} } ################################## set Titre [string toupper $VariableDemandee] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre "GonfleAussiY" "$Titre"] $K configure -background white set nX 0 set nY 1 foreach ChromosomeDeRef $LesChromosomesDeRef { incr nX if {$nChromSurX < $nX} {set nX 1;incr nY} set HAfficheMin [expr ($nY - 1) * $HauteurAffichage] set HAfficheMax [expr $nY * $HauteurAffichage] set LAfficheMin [expr ($nX - 1) * $LargeurAffichage] set LAfficheMax [expr $nX * $LargeurAffichage] set TailleP [set LesBandesCytos($ChromosomeDeRef,TailleP)] set TailleQ [set LesBandesCytos($ChromosomeDeRef,TailleQ)] set TailleChromo [expr $TailleP + $TailleQ] if {$EchelleChromoId == "No"} { set Facteur [expr ($HauteurAffichage - 2 * $BordY) / ($TailleP + $TailleQ)] set TailleMaxBrasP $TailleP } set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordY + $HAfficheMin] set HPremiereRegion [expr $PosYDuCentromer - $Facteur * $TailleP] set XTexte [expr ($LAfficheMax - $LAfficheMin) / 2 + $LAfficheMin] set YTexte [expr $HAfficheMin + $BordY / 2] $K create text $XTexte $YTexte -text "$ChromosomeDeRef" -fill "blue" $K create line $LAfficheMin $PosYDuCentromer $LAfficheMax $PosYDuCentromer -fill red #$K create rectangle $LAfficheMin $HAfficheMin $LAfficheMax $HAfficheMax -outline black set XHistoMin [expr ($LAfficheMax - $LAfficheMin) * 2 / 3 + $LAfficheMin] set XChromo [expr ($LAfficheMax - $LAfficheMin) / 3 + $LAfficheMin] set PosY $PosYDuCentromer set PosXMin [expr $XChromo - $LargeurChromo / 2] set PosXMax [expr $XChromo + $LargeurChromo / 2] ####Affichage des bandes cytologiques####### set LesBandesP [lsort [set LesBandesCytos($ChromosomeDeRef,LesBandesP)]] foreach BandeP $LesBandesP { set LesInfos [set LesBandesCytos($ChromosomeDeRef,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set PosYMinAxe $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set LesBandesCytos($ChromosomeDeRef,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set LesBandesCytos($ChromosomeDeRef,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set PosYMaxAxe $PosYMax set XTaille $PosXMin $K create text $XTaille $PosYMinAxe -text "0 Mpb" -fill "green" -anchor e -font $PolicePetite $K create text $XTaille $PosYMaxAxe -text "[expr round($TailleChromo)] Mpb" -fill "green" -anchor e -font $PolicePetite ####################################### ####Affichage Des Histogrammes############ $K create line $XHistoMin $PosYMinAxe $XHistoMin $PosYMaxAxe -fill black -width 2 set LesRegions [set Tab($ChromosomeDeRef,LesRegions)] set VMax [set Tab($ChromosomeDeRef,$VariableDemandee,Max) ] if {$VMax == 0} {continue} set ColorFill [set TabVar($Variable,Couleur) ] set Unit [set TabVar($Variable,Unit) ] set FacteurX [expr $LargeurHistoMax / $VMax] set PosXMin $XHistoMin set PosYMin $HPremiereRegion $K create line $PosXMin $PosYMin [expr $PosXMin+$LargeurHistoMax] $PosYMin -fill black set TexteVMax "$VMax" $K create text [expr $PosXMin+$LargeurHistoMax] $PosYMin -text "$TexteVMax" -anchor s -font $PolicePetite foreach Region $LesRegions { if {![info exists Tab($ChromosomeDeRef,$Region,Taille)]} {continue} set Taille [expr [set Tab($ChromosomeDeRef,$Region,Taille)] / 1e6] set Valeur [set Tab($ChromosomeDeRef,$Region,$Variable) ] set PosYMax [expr $Facteur * $Taille + $PosYMin] if {$Valeur == 0} {set PosYMin $PosYMax ; continue} set PosXMax [expr $XHistoMin + $FacteurX * $Valeur] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline $ColorFill -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] set PosYMin $PosYMax } } $K bind "Variable" "DevoileLesHistogrammes $K %x %y Enter" $K bind "Variable" "DevoileLesHistogrammes $K %x %y Leave" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K" regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "Change Parameters/New Histo\nScale Variable Id./Diff.\nScale Chromo Id./Diff."] bind $B <1> "HistogrammeDesRegions \"$LesChromosomesDeRef\" $TypeRegion \{\} $EchelleVariablesId $EchelleChromoId" bind $B <2> "ChoixHistogramme" bind $B "HistogrammeDesRegions \"$LesChromosomesDeRef\" $TypeRegion \"$LesVariables\" Yes $EchelleChromoId" bind $B "HistogrammeDesRegions \"$LesChromosomesDeRef\" $TypeRegion \"$LesVariables\" No $EchelleChromoId" bind $B "HistogrammeDesRegions \"$LesChromosomesDeRef\" $TypeRegion \"$LesVariables\" $EchelleVariablesId Yes" bind $B "HistogrammeDesRegions \"$LesChromosomesDeRef\" $TypeRegion \"$LesVariables\" $EchelleVariablesId No" } return "" } proc HistogrammeDuCAI {} { foreach Nom [ListeDesPABs] { set x [CAI $Nom] if {$x!=""} { lappend LesCAI [expr round (100*$x)] } } Histogramme $LesCAI Graphe } proc HistogrammeDuFichier {Fichier {Sortie ""}} { set Liste {} foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%d" N lappend Liste $N } return [Histogramme $Liste $Sortie] } proc HistogrammeDuNombreDeCopainsDansBlast {} { global NombreDeCopainsDansBlast if { ! [info exists NombreDeCopainsDansBlast] } { ChargeNombreDeCopainsDansBlast } foreach {Nom ValNombreDeCopainsDansBlast} [array get NombreDeCopainsDansBlast] { set nCops $ValNombreDeCopainsDansBlast if { $nCops > 2 } { lappend Liste $nCops } } Histogramme $Liste } proc HistogrammeDuNombreDeParalogues {{Format Graphe}} { foreach Nom [ListeDesPABs] { set n [NombreDeParaloguesDe $Nom] if {$n>0} { lappend LesNombres $n } } Histogramme $LesNombres $Format } proc HistogrammeDuNombreDesHomologues {{Type homo}} { foreach Nom [ListeDesPABs] { lappend LaListe [NombreDeHomologues $Nom $Type] } Histogramme $LaListe } proc HistogrammeDuTas {Fichier {LesTabs ""}} { if {$LesTabs==""} { set LesTabs {10 20 30 40 50 60 70 80 90 100} } set LesSCs {} foreach Ligne [lrange [LesLignesDuFichier $Fichier] 2 end] { if { ! [YaPABdans $Ligne]} { continue } scan $Ligne "%s %d %s %d" Nom FF SC PI if {$Fichier == "rr-phor.tas" || $Fichier == "rr-pfur.tas" } { set SC XX } if {[lsearch $LesSCs $SC] < 0 } { lappend LesSCs $SC } set OldTab -1 foreach Tab $LesTabs { if {$OldTab < $PI && $PI <= $Tab} { if {[info exists Histo($SC,$Tab)]} { incr Histo($SC,$Tab) } else { set Histo($SC,$Tab) 1 } break } set OldTab $Tab } } foreach SC $LesSCs { foreach Tab $LesTabs { if {[info exists Histo($SC,$Tab)]} { puts "$SC $Tab [set Histo($SC,$Tab)]" } else { puts "$SC $Tab 0" } } } } proc HistogrammePourLePlusProcheVoisinPourTous {{OldW ""}} { global RepertoireDuGenome if {$OldW!=""} {catch {after 10 Destroy $OldW}} set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set PoliceChromo "Courier 7 bold" set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] ChargeBandesCytologiques Genome $FichierBandesCytos set TailleMaxBrasP [set Genome(TaillePMax)] set TailleMaxBrasQ [set Genome(TailleQMax)] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] set EcartEntreChromo [expr $LargeurChromo*4] set LargeurBoite [expr $EcartEntreChromo/2] set Facteur [expr $HauteurAffichage / ($TailleMaxChromo*3)] set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY] $K configure -background "white" set Titre "The nearest neighbour" $K create text [expr $LargeurAffichage/2] 20 -text "$Titre" -font "courrier 12 bold" ################################################################## set LaSerie1 {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08} lappend Les3Series $LaSerie1 set LaSerie2 {HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16} lappend Les3Series $LaSerie2 set LaSerie3 {HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} lappend Les3Series $LaSerie3 set s 0 foreach Serie $Les3Series { #Espionne $Serie incr s set PosX $BordX foreach Chromosome $Serie { set LesBandes [LesBandesPourTousLesClustersDunChromo $Chromosome] foreach Bande $LesBandes { if {[lindex $Bande 1]==""} { set Vu($Bande) 1 } else { set LesBandesContigues [split $Bande " "] foreach band $LesBandesContigues { set Vu($band) 1 } } } ##fonction de la serie if {$s==1} { set PosY $PosYDuCentromer } if {$s==2} { set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] } if {$s==3} { set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer *2)+60+60] } #### set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set TailleChromosome [expr $TailleBrasP+$TailleBrasQ] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" ##histo## set ChromDeRef [NumeroDuChromosome $Chromosome] set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] set PosAxeHisto [expr $PosXMax+10] ######### set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] if {![info exists Vu($BandeP)]} { continue } else { $K create rectangle $PosAxeHisto $PosYMin [expr $PosXMaxHisto-$EcartEntreChromo] $PosYMax -outline "blue" -fill "blue" } } set ExtremiteDuChromosome $PosYMin ##fonction de la serie if {$s==1} { set PosY $PosYDuCentromer } if {$s==2} { set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] } if {$s==3} { set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer *2)+60+60] } set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline "black" -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] if {![info exists Vu($BandeQ)]} { continue } else { $K create rectangle $PosAxeHisto $PosYMin [expr $PosXMaxHisto-$EcartEntreChromo] $PosYMax -outline "blue" -fill "blue" } } set ExtremiteBasseDuChromo $PosYMax $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill "black" -width 2 } ##PosYfonction de la serie if {$s==1} { set PosY $PosYDuCentromer } if {$s==2} { set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] } if {$s==3} { set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer *2)+60+60] } $K create line $BordX $PosY [expr $LargeurMax-$BordX] $PosY -fill red } regsub {\.canvas} $K "" w #ces 2 lignes sont necessaires pour affichage #lors du passage de la souris sur chaque region de l histo #$K bind "Variable" "DevoileLesHistogrammes $K %x %y Enter" #$K bind "Variable" "DevoileLesHistogrammes $K %x %y Leave" $K bind "Chromosome" <1> "ChromosomeSelectionne $K" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "Histogramme"] bind $B <1> "ChoixHistogramme" set Boutons "$w.buttons" } proc HitCounts {RepertoireParent} { set HitCounts [exec /home/poidevin/bin/phix -LOGIN ripp -FEDINSTANCE gx StringFun::StringInteractomeDisplay $RepertoireParent] set Reste [StringSuivant "WithAny interactions:" dans $HitCounts] lappend LesLignesHitCounts "WithAny interactions:" foreach Ligne [split $Reste "\n"] { regsub "
" $Ligne "" Ligne regsub "

" $Ligne "" Ligne regsub "

" $Ligne "" Ligne if {[regexp "Your query genes and their interactions" $Ligne]} {break} if {$Ligne !=""} {lappend LesLignesHitCounts $Ligne} } set Reste $HitCounts foreach Ligne [split $Reste "\n"] { if {[regexp "^Changing name from" $Ligne]} { lappend LesLignesHitCounts $Ligne } } return [join $LesLignesHitCounts "\n"] } 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 HitPointIndex {t index} { global Vrp set c $Vrp(WCanvas) set elt "p${Vrp(VId)}_$index" AddLabel $c $elt $index return } proc HitPointXY {c x y} { set Lt [$c gettags current] if {$Lt == {}} {return} set rex "^p${::Vrp(VId)}_\[0-9\]+\$" foreach elt $Lt { if {[regexp $rex $elt]} { AddRemoveLabel $c $elt } } return } proc HomeLinksPlanbis {} { file mkdir "/planbis/maison/homeLinks" NousAllonsAuBoulot "/maison/homeLinks" set LesLiens [glob -nocomplain *] set LesNews {} foreach Lien $LesLiens { if {[file type $Lien]!="link"} { continue } set Target [file readlink $Lien] Espionne "$Lien pointe sur $Target" regsub "^/maison" $Target "/planbis/maison" New set Queue [file tail $New] set NewLink "/planbis/maison/homeLinks/$Queue" exec ln -s $New "/planbis/maison/homeLinks/$Queue" lappend LesNews $NewLink } return $LesNews } proc HomeRipp {} { return "/home/ripp" } proc HomologDetectionAgreement {Nom {Quoi Value}} { global HomologDetectionAgreement if {$Nom=="Reset" || $Quoi=="Reset"} { if {[info exists HomologDetectionAgreement]} { unset HomologDetectionAgreement } ChoixDesGenomesCompletsPresentsAbsents Ask [LesGenomesComplets] return } if { ! [info exists HomologDetectionAgreement(Value,Value)]} { set VaCoSi [list "NoValue" "white" "HomDetectionAgree NoValue" "AllAbsent" "red" "HomDetectionAgree AllAbsent" "AllPresent" "green" "HomDetectionAgree AllPresent" "AtLeastOneMistake" "yellow" "HomDetectionAgree AtLeastOneMistake" "Variable" "orange" "HomDetectionAgree Variable" "IncoherentValue" "grey" "HomDetectionAgree IncoherentValue" ] foreach {Va Co Si} $VaCoSi { set HomologDetectionAgreement($Va,Value) $Va set HomologDetectionAgreement($Va,Color) $Co set HomologDetectionAgreement($Va,Signif) $Si } } if {[info exists HomologDetectionAgreement($Nom,Value)]} { set V [set HomologDetectionAgreement($Nom,Value)] return [set HomologDetectionAgreement($V,$Quoi)] } if {[info exists HomologDetectionAgreement("EstCharge",Value)]} { set V [set HomologDetectionAgreement("EstCharge",Value)] return [set HomologDetectionAgreement($V,$Quoi)] } set LesGENO [ChoixDesGenomesCompletsPresentsAbsents] set LesGeno {} foreach G $LesGENO { lappend LesGeno [string totitle $G] } Espionne "I'll create HomologDetectionAgreement for [join $LesGeno " "]" foreach NomLu [ListeDesPABs] { set OoN " [ORGAorgaDesTBlastNs $NomLu] " set OoP " [ORGAorgaDesBlastPs $NomLu] " set OoMA " [ORGAorgaDesMSFs $NomLu] " if {[info exists R]} { unset R } if {[info exists OldAbsent]} { unset OldAbsent } if {[info exists OldPresent]} { unset OldPresent } set Absent 0 set Present 0 set Autre 1 foreach GENO $LesGENO Geno $LesGeno { set N [regexp " $GENO " $OoN] set P [regexp " $GENO " $OoP] set M [regexp " $Geno " $OoMA] set A [regexp " $GENO " $OoMA] if {$A} { set P 1 } if { ! $N && ! $P } { continue } set Absent [expr !$P && !$N && !$A] set Present [expr $P && $N && $A] set Mistake [expr !$P && $N && !$A] set Autre [expr !$Absent && !$Present && !$Mistake] if { $Mistake } { set R "AtLeastOneMistake" ; break } if { $Autre } { set R "Variable" ; continue } if { ! [info exists OldAbsent]} { set OldAbsent $Absent } if { ! [info exists OldPresent]} { set OldPresent $Present } if {$Absent !=$OldAbsent} { set R "Variable" ; continue } if {$Present!=$OldPresent} { set R "Variable" ; continue } } if { ! [info exists R]} { if {$Absent } { set R "AllAbsent" } if {$Present} { set R "AllPresent" } if { $Autre } { set R "Variable" } } set HomologDetectionAgreement($NomLu,Value) $R } set HomologDetectionAgreement("EstCharge",Value) "NoValue" return [HomologDetectionAgreement $Nom $Quoi] } proc HomologeneIdAcGenecard {Nom} { set NM [AccessEvi $Nom] set SiteGeneCard "http://www.genecards.org/" if {[catch { set Texte [HttpGetUrl "$SiteGeneCard/cgi-bin/cardsearch.pl?search=$NM&search_type=kwd&speed=fast&mini=yes"]}] } { return "Error during HttpGetUrl" } set LesLignes [split $Texte "\n"] foreach Ligne $LesLignes { if {[regexp -nocase "homologene" $Ligne]} { set LesElts [split $Ligne "|"] foreach Elt $LesElts { if {[regexp -nocase "homologeneid" $Elt]} { set IdHomologene [StringApres "HomologeneId=" dans $Elt] #Espionne"$Nom= $IdHomologene" return $IdHomologene } } } } } proc Hostname {} { return $::env(HOST) } proc HotdogPourOi {{ProjName ""} {FastaFile ""} {BlastDatabase ""} {OptionsBlast ""}} { if {$ProjName==""} { set ProjName "BlastonhOi" } if {$FastaFile==""} { set FastaFile [GscopeFile $ProjName "oip"] } if {$BlastDatabase==""} { set BlastDatabase [LocaliseBlastPDataBase] } #f {$OptionsBlast==""} { set OptionsBlast "-W 3 -e 1.0e-5 -v 5000 -b 5000 -K 0 -F F -C 2" } if {$OptionsBlast==""} { set OptionsBlast "-word_size 3 -evalue 1.0e-5 -max_target_seqs 5000 -comp_based_stats 2" } set PassePlat "" if {[ValidBlastDatabaseForHotdog $BlastDatabase]} { set ProjNameWithDate "${ProjName}_[Date]" set DBSizeTxt [BlastDatabaseSize $BlastDatabase] scan $DBSizeTxt "%d" DBSize if {1} { Espionne "Grillade::creerPoeleBlastOiHpc ProjectName $ProjNameWithDate Input $FastaFile DB $BlastDatabase DBsize $DBSize BlastOpts $OptionsBlast" set PassePlat [Grillade::creerPoeleBlastOiHpc ProjectName $ProjNameWithDate Input $FastaFile DB $BlastDatabase DBsize $DBSize BlastOpts $OptionsBlast] } else { Espionne "" set PassePlat "/tempor/grid/poeles/$ProjName" } if {[regexp -nocase "^Error" $PassePlat]} { set Message "Error. Something is wrong with Hotdog. I got the error message $PassePlat" } #rR Tcl ne veut pas pointer si la cible n'existe pas.ON est obligé de faire un exec :(" exec ln -sf "$PassePlat" "[RepertoireDuGenome]/PassePlat_$ProjNameWithDate" AppendAuFichier [Fiches PassePlat_$ProjNameWithDate] $PassePlat set Message "Warning. I launched Hotdog for $ProjName. Blast files will be available at $PassePlat" return $Message } else { set Message "Error. Sorry the blast database '$BlastDatabase' is not a valid blast database for Grilladin" } return $Message } proc HoteCourt {{N 3}} { return [string range [Hostname] 0 [incr N -1]] } proc HrefPourGetz {Access {Banque ""}} { if {$Banque==""} { set Banque "protein" } } proc HsapiensGeneDefLoc {Query {Quoi ""}} { global HsapiensGeneDefLoc global GscopeDir set QUOI [string toupper [string index $Quoi 0]] set QUERY [string toupper $Query] if {$QUOI=="" && [regexp " " $Query]} { set QUOI G } if {$QUOI=="" && ! [regexp " " $Query]} { set QUOI D } if {[regexp "LISTEGN" $QUERY]} { set QUOI "G" } if {[regexp "LISTEDEF" $QUERY]} { set QUOI "D" } if {[info exists HsapiensGeneDefLoc($QUERY,$QUOI)]} {return [set HsapiensGeneDefLoc($QUERY,$QUOI)]} if {[info exists HsapiensGeneDefLoc] && $Quoi!="ChooseDef"} { return "" } if {[info exists HsapiensGeneDefLoc] && $Quoi=="ChooseDef"} { set LesPossibles {} set LesPossiblesAvecGn {} set LesClefs [split $Query " "] foreach Def $HsapiensGeneDefLoc(LISTEDEF,D) { set TousSontLa 1 foreach Clef $LesClefs { if { ! [regexp -nocase $Clef $Def]} { set TousSontLa 0 ; break } } if {$TousSontLa} { set DEF [string toupper $Def] lappend LesPossiblesAvecGn "[set HsapiensGeneDefLoc($DEF,G)] $Def" lappend LesPossibles $Def } } set Bonne [ChoixParmiJoli $LesPossibles "" $LesPossiblesAvecGn] return [HsapiensGeneDefLoc $Bonne G] } foreach Ligne [LesLignesDuFichier "$GscopeDir/gscope_hs_gn_def_loc.txt"] { if {[regexp "^Symbol" $Ligne]} { continue } while {[regsub -all { |\t} $Ligne " " Ligne]} {} set Ligne [string trim $Ligne] set LesMots [split $Ligne " "] set Gn [lindex $LesMots 0] set PMID [lindex $LesMots end] if {[regexp {^[0-9]{5,}$} $PMID]} { set LaDefLoc [lrange $LesMots 1 end-1] } else { set LaDefLoc [lrange $LesMots 1 end] set PMID "" } set Loc [lindex $LaDefLoc end] if {[regexp {^(X|Y|[0-9]{1,2})[pq]} $Loc] || [regexp "reserved" $Loc] || [regexp {^[0-9]+$} $Loc]} { set Def [join [lrange $LaDefLoc 0 end-1] " "] } else { set Loc "" set Def [join [lrange $LaDefLoc 0 end] " "] } set DEF [string toupper $Def] set GN [string toupper $Gn] set HsapiensGeneDefLoc($GN,D) $Def set HsapiensGeneDefLoc($GN,L) $Loc set HsapiensGeneDefLoc($DEF,G) $GN lappend HsapiensGeneDefLoc(LISTEGN,G) $Gn lappend HsapiensGeneDefLoc(LISTEDEF,D) $Def } return [HsapiensGeneDefLoc $Query $Quoi] } proc Html2Char {l} { puts $l set Li [regexp -all -inline -indices {\\[0-9]{3}} $l] if {$Li == {} } { return $l } foreach xy [lreverse $Li] { lassign $xy x y set l [string replace $l $x $y [MapCharSet octal char [string range $l $x $y]]] } return $l } proc HtmlAuthorize {NomDeProc} { if { ! [regexp -nocase {^[a-z_\:]+[\:a-z_0-9]*$} $NomDeProc]} { return 0 } return 1 } proc HtmlBlastDatabaseInventory {} { BlastDatabaseInventory "ResetAll" set LesBases [BlastDatabaseInventory ListOf ProBestFirst] set LL {} set lesClefs [list BlastDatabase Type NbSequences NbLetters DBLIST] lappend LL $lesClefs set lesTailles [dbSize [lindex $LesBases 1]] foreach base $LesBases { set type [BlastDatabaseInventory $base Type] set size [BlastDatabaseInventory $base Size] set NbSequences "" set NbLetters "" scan $size "%d %s %d %s" NbSequences sequences NbLetters letters set dbList [BlastDatabaseInventory $base DBLIST] lappend LL [list $base $type $NbSequences $NbLetters $dbList] } set lesLignes {} lappend lesLignes "" lappend lesLignes " " set PremiereLigne 1 foreach L $LL { lappend lesLignes " " foreach k $lesClefs e $L { set Cadrage "" if {$PremiereLigne} { if {$e=="DBLIST"} { set Cadrage "style='text-align:left;' " } lappend lesLignes " " } else { if {[regexp {^[0-9]+$} $e]} { set Cadrage "style='text-align:right;' " } if {$e==0} {set e ""} if {$k=="BlastDatabase"} {set BaseCourante $e} set ligne "" lappend lesLignes $ligne } } set PremiereLigne 0 lappend lesLignes " " } lappend lesLignes " " lappend lesLignes "
$e$e
" set Table [join $lesLignes "\n"] return $Table } proc HtmlBlastIllustre {{BlastFile ""} {Site ""} {ExpectDeRef ""} {NbSubject ""} {LesBIdsAutorises ""} {SelectedOrganism ""}} { if {$Site==""} { set Site [ZincrSite] } set ParamScience "science=[Science]&" if {[regexp "^palignupload" $BlastFile]} { regsub "^palignupload" $BlastFile "/tempor/palign/upload" BlastFile } if {[regexp "^palignarchive" $BlastFile]} { regsub "^palignarchive" $BlastFile "/tempor/palign/archive" BlastFile } if {[regexp "^paligndepot" $BlastFile]} { regsub "^paligndepot" $BlastFile "/tempor/palign/depot" BlastFile } if {[regexp "^palignsessions" $BlastFile]} { regsub "^palignsessions" $BlastFile "/tempor/palign/sessions" BlastFile } set Svg [IllustreLeBlast $BlastFile $ExpectDeRef $NbSubject $LesBIdsAutorises $SelectedOrganism "PourSvgFromHtmlBlastIllustre"] if {[regexp "^Sorry" $Svg]} { return $Svg } set ScriptBlastIllustre [Chabada "TemplateBlastIllustre.js" "_site_=$Site" "_paramscience_=$ParamScience"] set Html [Chabada "TemplateBlastIllustre.html" "ScriptBlastIllustre=$ScriptBlastIllustre" "Svg=$Svg" "site=$Site"] if {[regexp -nocase scope $Site]} { set Html [Chabada $Html "SpecificCss=[CssWscope]"] } return $Html } proc HtmlCompatibleColor {Color} { if {[regexp -nocase {^#[a-z0-9]{12}$} $Color]} { lassign [split $Color ""] D a b c d e f g h i j k l return "#$a$b$e$f$i$j" } package require Tk catch {set Color [ColorHexa $Color]} return $Color } proc HtmlFromMsf {NomOuFichier {Format ""} {FichierHtml ""} {TitreDeLaPage ""}} { set Nom [file tail $NomOuFichier] while 1 { set FichierMsf $NomOuFichier if {[regexp "/" $FichierMsf] && [file exists $FichierMsf]} { break } if { ! [EstUnPAB $Nom]} { break } if {[regexp "^/" $NomOuFichier]} { break } set FichierMsf "[RepertoireDuGenome]/$NomOuFichier" if {[file exists $FichierMsf]} { break } set FichierMsf "[RepertoireDuGenome]/msf/$Nom" if {[file exists $FichierMsf]} { break } return "" } set FichierXml "[TmpFile $Nom].xml" if {[catch {exec clustalw $FichierMsf -convert -outfile=$FichierXml -output=macsim} Message]} { return "$Message" } if { ! [file exists $FichierXml]} { return "" } return [HtmlFromXmlMacsim $FichierXml $Format $FichierHtml $TitreDeLaPage] } proc HtmlFromXmlMACS {NomOuFichier {Format ""} {FichierHtml ""}} { Wup "Permet la conversion d un fichier XML au format de la dtd de MACSIM en fichier HTML" Wup "Il ajoute egalement l entete et le pied de page de l interface de ARPAnno" Wup "Il colorie les residus en fonction de leur positions (voir AnnoteLeXMLDesARPs)" package require tdom Html_Zero set AvecZones 0 if {[regexp -nocase "AvecZones" $Format]} { set AvecZones 1 regsub -nocase "AvecZones" $Format "" Format } if {$Format==""} { set Format "Normal" } set CouleurNormal [string equal -nocase $Format "Normal"] set CouleurSeqLab [string equal -nocase $Format "SeqLab"] set CouleurFtype [regexp -nocase "^Ftype_(.+)" $Format Match Ftype] set DescriptionOnly [string equal -nocase "Description" $Format] set Nom [file tail $NomOuFichier] set FichierXml $NomOuFichier set Famille [file tail $FichierXml] set Famille_tmp "" regsub -nocase ".xml" $Famille "" Famille regexp -nocase {_([a-z]{2,4}[0-9]{1,2}|actin|orphans)$} $Famille tmp Famille_tmp if {$Famille_tmp != ""} {set Famille $Famille_tmp} set MacsimXml [ContenuDuFichier $FichierXml] set NoeudMacsim [[dom parse $MacsimXml] documentElement] set FichierMSF [file tail $FichierXml] regsub -nocase ".xml$" $FichierMSF ".msf" FichierMSF set Titre "ARPAnno: MACS" set Header "" set CouleurColSco 1 if {$CouleurColSco} { append Header "\n[H_StyleDesCouleursColSco]" } if {$CouleurSeqLab} { append Header "\n[H_StyleDesCouleursSeqlab]" } if {$CouleurFtype} { append Header "\n[H_StyleDesCouleursFtype]" } #Html_ZeroToBody $Titre $Header #Html_Header $Titre $Header Html_ARPAnno_BEGIN $Header set NoeudAli [$NoeudMacsim selectNodes "alignment"] set AlnName [$NoeudAli selectNodes "string(aln-name)"] #Html_Banner #Html_BackTo Html_Append "
" Html_Append "Multiple alignment results with $Famille family" Html_Append "
" Html_Append "
" Html_Append "View MSF Output File" Html_Append "
" Html_Append "
" set TexteColoring "with $Format colors" if {$Format=="Normal"} { set TexteColoring "without coloring" } if {$DescriptionOnly} { Html_BaliseOpen "span" "style='font-family:courier'" Html_BaliseOpen "table" "border='1' cellpadding='1' cellspacing='2'" set MettreRegleAvant 0 } else { Html_BaliseOpen "span" "style='font-family:courier'" Html_BaliseOpen "table" "border='0' cellpadding='0' cellspacing='0'" set MettreRegleAvant 1 } if {$AvecZones} {set MettreRegleAvant 0} set TousLesColumnScore {} foreach NoeudColumnScore [$NoeudAli selectNodes "column-score"] { if {$AvecZones || $DescriptionOnly} { break } set ColscoName [$NoeudColumnScore selectNodes "string(colsco-name)"] set ColscoOwner [$NoeudColumnScore selectNodes "string(colsco-owner)"] if {$ColscoOwner!=0} { continue } set ColscoType [$NoeudColumnScore selectNodes "string(colsco-type)"] set ColscoData [$NoeudColumnScore selectNodes "string(colsco-data)"] set LesColonnes {} if {[regexp {core.?block} $ColscoName]} { foreach Score [split [string trim $ColscoData] " "] { set Car "?" if {$Score=="-1"} { set Car "." } if {$Score=="0"} { set Car "-" } if {$Score=="1"} { set Car "|" } lappend LesColonnes $Car } } else { if {[string equal -nocase $ColscoType "int"]} { set LesCarPourInt "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" foreach Score [split $ColscoData " "] { set Car [lindex $LesCarPourInt $Score] if {$Car==""} { set Car "?" } lappend LesColonnes $Car } } } set Colonnes [join $LesColonnes ""] if {$Colonnes!="" && $MettreRegleAvant} { set MettreRegleAvant 0 set LargeurAlignement [llength $LesColonnes] Html_BaliseOpen "tr" Html_BaliseOpen "td" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap'" Html_Append [ReglePourAli $LargeurAlignement] Html_BaliseClose "td" Html_BaliseClose "tr" } Html_BaliseOpen "tr" Html_BaliseOpen "td" "bgcolor='yellow' nowrap='nowrap'" Html_Append "$ColscoName" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap' onClick='javascript:alert(\\'Column score $ColscoName\\')'" Html_Append $Colonnes Html_BaliseClose "td" Html_BaliseClose "tr" } set TousLesFtype {} foreach NoeudSequence [$NoeudAli selectNodes "sequence"] { set SeqName [$NoeudSequence selectNodes "string(seq-name)"] set NoeudInfo [$NoeudSequence selectNodes "seq-info"] set Accession [$NoeudInfo selectNodes "string(accession)"] set Definition [$NoeudInfo selectNodes "string(definition)"] set Organisme [$NoeudInfo selectNodes "string(organism)"] if {[EstUnAccessPDB $Accession]} { set Acc $Accession regsub {_.*} $Acc "" Acc } else { set Acc "uniprot:$Accession" } #Permet de ne pas mettre de lien sur les titres ou separateurs if {! [regexp {\-\-\-\-} $Acc]} { set Url [WgetzSurWeb "$Acc" "" "GetUrl"] } else { set Url "" } set SeqData [$NoeudSequence selectNodes "string(seq-data)"] regsub -all -nocase {[^\.\-a-z]} $SeqData "" SeqData set SeqData [string toupper $SeqData] set NoeudFtable [$NoeudInfo selectNodes "ftable"] if {$NoeudFtable==""} { set MesFtype {} set Ftable "" } else { set MesFtype [LaFtableDansLOrdre $NoeudFtable "TypeList"] LConcat TousLesFtype $MesFtype if {$CouleurFtype} { set Ftable [LaFtableDansLOrdre $NoeudFtable "$Ftype"] } } if {$MettreRegleAvant} { set MettreRegleAvant 0 set LargeurAlignement [string length $SeqData] Html_BaliseOpen "tr" Html_BaliseOpen "td" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap'" Html_Append [ReglePourAli $LargeurAlignement] Html_BaliseClose "td" Html_BaliseClose "tr" } Html_BaliseOpen "tr" if {$AvecZones} { } else { Html_BaliseOpen "td" "bgcolor='yellow' nowrap='nowrap'" #Permet de ne pas mettre de lien sur les titres ou separateurs if {$Url != ""} { Html_Href $SeqName $Url "title='$Definition'" } else { if {[regexp {\-\-\-\-Les} $SeqName]} { regsub {\-\-\-\-Les} $SeqName "\-\-\-\-" SeqName } Html_Append $SeqName } Html_BaliseClose "td" } if {$DescriptionOnly} { Html_BaliseOpen "td" "bgcolor='lightgreen' nowrap='nowrap'" Html_Append " $Definition " Html_BaliseClose "td" Html_BaliseOpen "td" "bgcolor='green' nowrap='nowrap'" Html_Append " $Organisme " Html_BaliseClose "td" } else { Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap' onClick='javascript:alert(\\'$SeqName $Definition $Organisme\\')'" if {$CouleurNormal} { Html_Append [LaSequenceColoree $SeqData "Normal"] } if {$CouleurSeqLab} { Html_Append [LaSequenceColoree $SeqData "Seqlab"] } if {$CouleurFtype} { Html_Append [LaSequenceColoree $SeqData "Ftype" $Ftable $AvecZones] } Html_BaliseClose "td" } Html_BaliseClose "tr" } if { ! $DescriptionOnly && ! $AvecZones} { Html_BaliseOpen "tr" Html_BaliseOpen "td" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap'" Html_Append [ReglePourAli $LargeurAlignement] Html_BaliseClose "td" Html_BaliseClose "tr" } Html_BaliseClose "table" Html_BaliseClose "span" #Html_Append " $Texte" Html_Append "" Html_ARPAnno_END #Html_BodyToEnd if {$FichierHtml=="GetHtml"} { return [Html_Get] } if {$FichierHtml=="ShowHtml"} { return [AfficheVariable [Html_Get] "" "macsimHtml/$Nom"] } return [Sauve [Html_Get] dans $FichierHtml] } proc HtmlFromXmlMacsim {NomOuFichier {Format ""} {FichierHtml ""} {TitreDeLaPage ""} {RacineForAll ""} {LinkToPipealign ""}} { global MemoXmlMacsim package require tdom set PathToXmlFile $NomOuFichier regsub "^paligndepot" $PathToXmlFile "/tempor/palign/depot" PathToXmlFile #rR il y a des - pour pouvoir mettre des defauts non vides if {$Format=="-"} { set Format "" } if {$FichierHtml=="-"} { set FichierHtml "" } if {$TitreDeLaPage=="-"} { set TitreDeLaPage "" } if {$RacineForAll=="-"} { set RacineForAll "" } if {$LinkToPipealign=="-"} { set LinkToPipealign "" } set WithoutHeader [regexp -nocase "WithoutHeader" $FichierHtml] if {$WithoutHeader} { regsub -nocase "WithoutHeader" $FichierHtml "" FichierHtml } set WithLinkToPipealign 0 if {$LinkToPipealign!=""} { set WithLinkToPipealign 1} set AvecZones 0 if {[regexp -nocase "AvecZones" $Format]} { set AvecZones 1 regsub -nocase "AvecZones" $Format "" Format } if {$Format==""} { set Format "Normal" } set CouleurNormal [string equal -nocase $Format "Normal"] set CouleurSeqLab [string equal -nocase $Format "SeqLab"] set CouleurFtype [regexp -nocase "^Ftype_(.+)" $Format Match Ftype] set DescriptionOnly [string equal -nocase "Description" $Format] set Nom [file tail $NomOuFichier] while 1 { set FichierXml $PathToXmlFile if {[regexp "/" $FichierXml]} { break } if { ! [EstUnPAB $Nom]} { break } set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom" if {[file exists $FichierXml]} { break } set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom.xml" if {[file exists $FichierXml]} { break } return "" } set LinkToRivet 0 if {[regexp -nocase "WithLinkToRivet_(.*)" $FichierHtml Match RivetLink]} { set LinkToRivet 1 set FichierHtml "DisplayHtml" } set LinkToHtml 0 if {[regexp -nocase "WithLinkToHtml_(.*)" $FichierHtml]} { set LinkToHtml 1 regsub -nocase "WithLinkToHtml_" $FichierHtml "" FichierHtml } set CreateAllHtml 0 if {[regexp "CreateAllHtml" $FichierHtml]} { if {$RacineForAll=="" || $RacineForAll=="-"} { set RacineForAll "${FichierHtml}_" } set CreateAllHtml 1 } if {$FichierHtml=="" || $FichierHtml=="-" } { set FichierHtml "GetHtml" } if {$FichierHtml=="macsimHtml"} { if {[regexp "/macsimXml/" $FichierXml]} { regsub "/macsimXml/" $FichierXml "/macsimHtml/" FichierHtml } else { set FichierHtml $FichierXml } regsub ".xml$" $FichierHtml "" FichierHtml append FichierHtml ".html" } if {0 && [info exists MemoXmlMacsim($FichierXml)]} { set NoeudMacsim $MemoXmlMacsim($FichierXml) } else { set MacsimXml [ContenuDuFichier $FichierXml] set NoeudMacsim [[dom parse $MacsimXml] documentElement] set MemoXmlMacsim($FichierXml) $NoeudMacsim } set TexteColoring "with $Format colors" if {$Format=="Normal"} { set TexteColoring "without coloring" } if {[info proc OnTraiteSpine]!="" && [OnTraiteSpine]} { set Titre "Gscope summary of $Nom for Spine" } else { set Titre $TitreDeLaPage if {$Titre=="" || $Titre=="-"} { set DateEnvoi " created [Date Nice]" set Titre "Wali-lite Macsim's output of $Nom [Alias $Nom] ($TexteColoring) $DateEnvoi" } else { append Titre " ($TexteColoring)" } } set Header "" set CouleurColSco 1 if {$CouleurColSco} { append Header "\n[H_StyleDesCouleursColSco]" } if {$CouleurSeqLab} { append Header "\n[H_StyleDesCouleursSeqlab]" } if {$CouleurFtype} { append Header "\n[H_StyleDesCouleursFtype]" } if { ! $AvecZones} { append Header "\n[H_StyleSpanPadding]" } append Header "\n[H_JavascriptPourWaliLite]" Html_ZeroToBody $Titre $Header set NoeudAli [$NoeudMacsim selectNodes "alignment"] set AlnName [$NoeudAli selectNodes "string(aln-name)"] Html_Append "
" Html_Append "Scroll " Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "
" Html_Append "" set PositionPourHeaderFixe [Html_GetPosition] Html_Append "
" if { ! $WithoutHeader } { Html_Banner Wscope } if { ! $LinkToHtml && ! $CreateAllHtml } { if {[OnTraiteSpine]} { set SpineID [ExtraitInfo $Nom "SpineID"] set SpineRef [ExtraitInfo $Nom "SpineRef"] set SpineDef [ExtraitInfo $Nom "SpineDef"] set Entete $Titre regsub "Wali\-lite" $Entete "" Entete set Entete " Wali-lite    $Entete" Html_Append [H_BalAtt $Entete "h4" "align='centre'"] lappend Liste 2 lappend Liste "border='1' cellpadding='1' cellspacing='1'" lappend Liste "" lappend Liste "bgcolor='green' nowrap='nowrap'" lappend Liste "bgcolor='orange' nowrap='nowrap'" lappend Liste "GscopeID" $Nom lappend Liste "SpineID" $SpineID lappend Liste "SpineRef" [H_Href $SpineRef [WgetzSurWeb $SpineRef "" "GetUrl"]] lappend Liste "SpineDef" $SpineDef Html_TableFromList $Liste } } set Entete $Titre regsub "Wali-lite" $Entete "" Entete set Entete " Wali-lite    $Entete" append Entete "    " append Entete "-" append Entete "  " append Entete "FontSize 12 px" append Entete "  " append Entete "+" append Entete "  " append Entete "1" append Entete "  " append Entete "5" append Entete "  " append Entete "8" append Entete "  " append Entete "10" append Entete "  " append Entete "12" append Entete "  " append Entete "14" append Entete "  " append Entete "18" Html_Append [H_BalAtt $Entete "h4"] set LaHaut [Html_GetPosition] Html_Append "
" Html_Append "" set DivAroundTheTable 0 Html_BaliseOpen "div" "id='divAlignement' style='font-family:courier; font-size:12px;'" if {$DescriptionOnly} { Html_BaliseOpen "table" "border='1' cellpadding='1' cellspacing='2'" set MettreRegleAvant 0 } else { set DivAroundTheTable 1 Html_BaliseOpen "div" "border='3' style='margin:5px;'" Html_BaliseOpen "table" "border='0' cellpadding='0' cellspacing='0'" set MettreRegleAvant 1 } if {$AvecZones} {set MettreRegleAvant 0} set TousLesColumnScore {} foreach NoeudColumnScore [$NoeudAli selectNodes "column-score"] { if {$AvecZones || $DescriptionOnly} { break } set ColscoName [$NoeudColumnScore selectNodes "string(colsco-name)"] set ColscoOwner [$NoeudColumnScore selectNodes "string(colsco-owner)"] if {$ColscoOwner!=0} { continue } set ColscoType [$NoeudColumnScore selectNodes "string(colsco-type)"] set ColscoData [$NoeudColumnScore selectNodes "string(colsco-data)"] set LesColonnes {} if {[regexp {core.?block} $ColscoName]} { foreach Score [split [string trim $ColscoData] " "] { set Car "?" if {$Score=="-1"} { set Car "." } if {$Score=="0"} { set Car "-" } if {$Score=="1"} { set Car "|" } lappend LesColonnes $Car } } else { if {[string equal -nocase $ColscoType "int"]} { set LesCarPourInt "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" foreach Score [split $ColscoData " "] { set Car [lindex $LesCarPourInt $Score] if {$Car==""} { set Car "?" } lappend LesColonnes $Car } } } set Colonnes [join $LesColonnes ""] if {$Colonnes!="" && $MettreRegleAvant} { set MettreRegleAvant 0 set LargeurAlignement [llength $LesColonnes] Html_BaliseOpen "tr" Html_BaliseOpen "td" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap'" Html_Append [ReglePourAli $LargeurAlignement] Html_BaliseClose "td" Html_BaliseClose "tr" } Html_BaliseOpen "tr" Html_BaliseOpen "td" "bgcolor='yellow' nowrap='nowrap'" Html_Append "$ColscoName" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap' onClick='javascript:alert(\\'Column score $ColscoName\\')'" Html_Append $Colonnes Html_BaliseClose "td" Html_BaliseClose "tr" } set TousLesFtype {} set PreviousGroup "" foreach NoeudSequence [$NoeudAli selectNodes "sequence"] { set SeqName [$NoeudSequence selectNodes "string(seq-name)"] set NoeudInfo [$NoeudSequence selectNodes "seq-info"] set Accession [$NoeudInfo selectNodes "string(accession)"] set Definition [$NoeudInfo selectNodes "string(definition)"] set Organisme [$NoeudInfo selectNodes "string(organism)"] set Group [$NoeudInfo selectNodes "string(group)"] if {[EstUnAccessPDB $Accession]} { set Acc $Accession regsub {_.*} $Acc "" Acc } else { set Acc "uniprot:$Accession" } #rR attention a verifier car j'y ai mis Uniprot pour depanner. set Url [WgetzSurWeb "$Acc" "" "GetUrl"] set SeqData [$NoeudSequence selectNodes "string(seq-data)"] regsub -all -nocase {[^\.\-a-z]} $SeqData "" SeqData set SeqData [string toupper $SeqData] set NoeudFtable [$NoeudInfo selectNodes "ftable"] if {$NoeudFtable==""} { set MesFtype {} set Ftable "" } else { set MesFtype [LaFtableDansLOrdre $NoeudFtable "TypeList"] LConcat TousLesFtype $MesFtype if {$CouleurFtype} { set Ftable [LaFtableDansLOrdre $NoeudFtable "$Ftype"] } } if {$MettreRegleAvant} { set MettreRegleAvant 0 set LargeurAlignement [string length $SeqData] Html_BaliseOpen "tr" Html_BaliseOpen "td" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap'" Html_Append [ReglePourAli $LargeurAlignement] Html_BaliseClose "td" Html_BaliseClose "tr" } if {$PreviousGroup!=$Group} { Html_BaliseOpen "tr" Html_BaliseOpen "td" "style='text-align:right;'" Html_Append "Group $Group" Html_BaliseClose "td" Html_BaliseClose "tr" } set PreviousGroup $Group Html_BaliseOpen "tr" if {$AvecZones} { } else { Html_BaliseOpen "td" "bgcolor='yellow' nowrap='nowrap'" Html_Href $SeqName $Url "title='$Definition' target='_blank'" Html_BaliseClose "td" } if {$DescriptionOnly} { Html_BaliseOpen "td" "bgcolor='lightgreen' nowrap='nowrap'" Html_Append " $Definition " Html_BaliseClose "td" Html_BaliseOpen "td" "bgcolor='green' nowrap='nowrap'" Html_Append " $Organisme " Html_BaliseClose "td" } else { Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap' onClick='javascript:alert(\\'$SeqName $Definition $Organisme\\')'" if {$CouleurNormal} { Html_Append [LaSequenceColoree $SeqData "Normal"] } if {$CouleurSeqLab} { Html_Append [LaSequenceColoree $SeqData "Seqlab"] } if {$CouleurFtype} { Html_Append [LaSequenceColoree $SeqData "Ftype" $Ftable $AvecZones] } Html_BaliseClose "td" } Html_BaliseClose "tr" } if { ! $DescriptionOnly && ! $AvecZones} { Html_BaliseOpen "tr" Html_BaliseOpen "td" Html_BaliseClose "td" Html_BaliseOpen "td" "color='black' bgcolor='white' nowrap='nowrap'" Html_Append [ReglePourAli $LargeurAlignement] Html_BaliseClose "td" Html_BaliseClose "tr" } if {$DivAroundTheTable} { Html_BaliseClose "div" } Html_BaliseClose "table" Html_BaliseClose "span" set AvecATV [file exists "[RepertoireDuGenome]/phylos"] set AvecAutresBoutons [expr $WithLinkToPipealign || [OnTraiteSpine] || [OnTraiteBalibase] || [OnTraitePeroxisome] || [MacsimExiste] || [OnTraite "KoAnno"]] set LesBoutons {} if {$AvecAutresBoutons} { if { ! $LinkToHtml && ! $CreateAllHtml } { lappend LesBoutons "Other infos" "FileMoi $Nom" lappend LesBoutons "Description" "HtmlFromXmlMacsim $Nom Description" if {$AvecATV} { lappend LesBoutons "ATV PhyloTree" "ATV $Nom" } } #rR je ne comprends pas bien comment c'était foutu avant car le if de AvecAutresBoutons couvrait toute la création des boutons Ftype :( } lappend LesBoutons "No colors" "HtmlFromXmlMacsim $NomOuFichier - $FichierHtml $TitreDeLaPage $RacineForAll $LinkToPipealign" lappend LesBoutons "AA colors" "HtmlFromXmlMacsim $NomOuFichier SeqLab $FichierHtml $TitreDeLaPage $RacineForAll $LinkToPipealign" set TousLesFtype [lsort -unique $TousLesFtype] foreach Ftype $TousLesFtype { lappend LesBoutons "$Ftype" "HtmlFromXmlMacsim $NomOuFichier Ftype_$Ftype $FichierHtml $TitreDeLaPage $RacineForAll $LinkToPipealign" } Html_NewLine set LeMenu {} lappend LeMenu [Html_BaliseOpen "table" "border='1' cellpadding='1' cellspacing='3'"] lappend LeMenu [Html_BaliseOpen "tr"] foreach {Text Action} $LesBoutons { if {$LinkToHtml || $CreateAllHtml} { set Quoi [lindex [split $Action " "] 2] set Queue [file tail $RacineForAll] set RfA $RacineForAll if {$RfA=="-"} { set RfA "" } if {$Queue=="-"} { set Queue "" } set UrlAction "${Queue}_$Quoi.html" if {$CreateAllHtml && ! [info exists DejaFait($Quoi)]} { set WH "" ; if {$WithoutHeader} { set WH "WithoutHeader" } lappend AllHtml [HtmlFromXmlMacsim $FichierXml $Quoi "${WH}WithLinkToHtml_${RfA}_$Quoi.html" $TitreDeLaPage $RacineForAll] set DejaFait($Quoi) 1 } } elseif {$WithLinkToPipealign} { set UrlAction "$LinkToPipealign?$Action" regsub -all " " $UrlAction {\&} UrlAction } elseif {$LinkToRivet} { set UrlAction "$RivetLink?$Action WithLinkToRivet_$RivetLink" } else { regsub -all " " $Action {\&} Action set UrlAction "[WscopeScience]&$Action" } lappend LeMenu [Html_BaliseOpen "td" "bgcolor='yellow' nowrap='nowrap'"] lappend LeMenu [Html_Href $Text $UrlAction "title='Reload alignment'"] lappend LeMenu [Html_BaliseClose "td"] } lappend LeMenu [Html_BaliseClose "tr"] lappend LeMenu [Html_BaliseOpen "tr"] foreach {Text Action} $LesBoutons { if {[regexp "Ftype_" $Action]} { regsub "Ftype_" $Action "AvecZonesFtype_" Action set Text "no text" } if {$LinkToHtml || $CreateAllHtml} { set Quoi [lindex [split $Action " "] 2] set Queue [file tail $RacineForAll] set UrlAction "${Queue}_$Quoi.html" if {$CreateAllHtml && ! [info exists DejaFait($Quoi)]} { set WH "" ; if {$WithoutHeader} { set WH "WithoutHeader" } lappend AllHtml [HtmlFromXmlMacsim $FichierXml $Quoi "${WH}WithLinkToHtml_${RacineForAll}_$Quoi.html" $TitreDeLaPage $RacineForAll] } } elseif {$WithLinkToPipealign} { set UrlAction "$LinkToPipealign?$Action" regsub -all " " $UrlAction {\&} UrlAction } elseif {$LinkToRivet} { set UrlAction "$RivetLink/$Action WithLinkToRivet_$RivetLink" } else { regsub -all " " $Action {\&} Action set UrlAction "[WscopeScience]&$Action" } lappend LeMenu [Html_BaliseOpen "td" "bgcolor='yellow' nowrap='nowrap'"] lappend LeMenu [Html_Href $Text $UrlAction "title='Reload alignment'"] lappend LeMenu [Html_BaliseClose "td"] } lappend LeMenu [Html_BaliseClose "tr"] lappend LeMenu [Html_BaliseClose "table"] lappend LeMenu [Html_NewLine] Html_Insert $LaHaut [join $LeMenu "\n"] #rR la fin du if AvecAutresBoutons était là !!!!!!!!!!!!!!!!! pourquoi ?????? set HtmlDejaFait [Html_Get] if {[regexp {(.*)} $HtmlDejaFait Match HeaderMobile]} { regsub "
" Html_BaliseOpen "html" Html_BaliseOpen "head" Html_Title "ARPAnno results" Html_Append "" if {$Header_style != ""} { Html_Append "$Header_style" } #Html_Append "" Html_Append "" Html_Append "" Html_Append "" #Banniere IGBMC ou BIPS ####################### if {[regexp -nocase "bips" [WebServer_Address]]} { #lappend LeTexte "" Html_Append "" Html_Append "" Html_Append " " Html_Append "" Html_Append "
" } Html_Append " " Html_Append " " Html_Append " " Html_Append " " Html_Append " " Html_Append " " Html_Append " " Html_Append " " #Html_Append " " #Html_Append " " Html_Append " " Html_Append " " Html_Append " " #Html_Append " " Html_Append " " #Html_Append "

ARPAnno

Go back to ARPAnno
$Texte$Texte" return [Html_Get] } proc Html_ARPAnno_END {} { Wup "ARPAnno fin de la page de presentation" Wup "Debut (Html_ARPAnno_BEGIN) TEXTE Fin (Html_ARPAnno_END)" Html_Append "
Help and Supplementary informationGo back to ARPAnno
" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "" Html_Append "
" Html_Append "
" Html_Append "" Html_Append "Muller et al (2005) Mol. Biol. Cell. doi: 10.1091/mbc.E05-06-0508" Html_Append "" Html_Append "
" Html_Append "
" Html_Append "" Html_Append "" Html_Append "" Html_Append "
" Html_Append " If you have any problems or questions, please, feel free to contact us at jean.muller@igbmc.u-strasbg.fr" Html_Append "
" Html_BaliseClose "body" Html_BaliseClose "html" return [Html_Get] } proc Html_Append {Texte} { global H lappend H $Texte return $Texte } proc Html_BR {} { return [Html_Append "
"] } proc Html_BackTo {{Nom ""}} { if {$Nom==""} { set Nom [DerniereVisite] } set BackTo {} if {1} { lappend BackTo [Html_Append ""] lappend BackTo [Html_Append "Back to "] } if {[OnTraiteEVImm] || [OnTraiteGGmm] || [OnTraiteGGWmm] || [OnTraiteEVIhs] || [OnTraiteGGhs] || [OnTraiteGGWhs] || [OnTraiteRetGene]} { lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href " Genoret" [GenoretUrl] "title='GenoretDatabase home page'"] lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href " GenoretGenes" [GenoretGenesUrl] "title='GenoretGenes home page'"] } if {1} { lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href " ICube" "http://icube.unistra.fr" "title='ICube - home page'"] lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href " CSTB" "http://icube-cstb.unistra.fr" "title='Complex Systems and Translational Bioinformatics - home page'"] lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href " LBGI" [LbgiUrl] "title='LBGI BioInformatique et Génomique Intégratives - home page'"] lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href "WelcomeToWscope" "[WscopeScience]&WelcomeToWscope" "title='Lists all Gscope Projects'"] lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href "[Science]" "[WscopeScience]" "title='[Science] general information entry point'"] lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href "List" "[WscopeScience]&FileMoi" "title='all entry points for [Science]'"] if {$Nom!=""} { lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href "$Nom" "[WscopeScience]&FileMoi&$Nom" "title='See all available data about $Nom'"] } lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href "Search" "[WscopeScience]&RechercheMoi" "title='search any word in (the infos files of) [Science]'"] } if {[OnTraiteBalibase]} { lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href "BAliBASE home page" "/balibase/index.html"] } if {[OnTraite "KoAnno"]} { lappend BackTo [Html_Append " • "] lappend BackTo [Html_Href "KoAnno home page" "http://lbgi.fr/~brelivet/KoAnno"] } if {1} { lappend BackTo [Html_Append ""] lappend BackTo [Html_NewLine] } return [join $BackTo "\n"] } proc Html_Balise {Texte Balise {Attributs ""}} { set Local {} lappend Local [Html_BaliseOpen $Balise $Attributs] lappend Local [Html_Append $Texte] lappend Local [Html_BaliseClose $Balise] return [join $Local "\n"] } proc Html_BaliseClose {Balise} { return [Html_Append ""] } proc Html_BaliseOpen {Balise {Attributs ""}} { if {$Attributs==""} { set Local "<$Balise>" } else { regsub -all {\\'} $Attributs "SiMpLeQuOtE" Attributs regsub -all {\'} $Attributs "\"" Attributs regsub -all "SiMpLeQuOtE" $Attributs "'" Attributs set Local "<$Balise $Attributs>" } return [Html_Append $Local] } proc Html_Banner {{Qui ""}} { if {$Qui==""} { set Qui "Wscope" } set Banner {} if {$Qui=="Bips"} { lappend Banner [Html_Append ""] lappend Banner [Html_Append ""] lappend Banner [Html_Append ""] lappend Banner [Html_Append ""] lappend Banner [Html_Append ""] lappend Banner [Html_Append "
"] lappend Banner [Html_Append "
"] return $Banner } if {$Qui=="Wscope" && [Science]!="Actinome"} { lappend Banner [Html_Append "
"] lappend Banner [Html_Append ""] lappend Banner [Html_Append ""] lappend Banner [Html_Append " "] lappend Banner [Html_Append " "] lappend Banner [Html_Append " "] lappend Banner [Html_Append ""] lappend Banner [Html_Append ""] lappend Banner [Html_Append " "] lappend Banner [Html_Append " "] lappend Banner [Html_Append ""] lappend Banner [Html_Append "
"] lappend Banner [Html_Append " "] lappend Banner [Html_Append "

This page is generated on the fly by Wscope from the Gscope Database [Science]

"] lappend Banner [Html_Append " "] lappend Banner [Html_Append "
"] lappend Banner [Html_BackTo] lappend Banner [Html_Append "
[CaVa]
"] lappend Banner [Html_Append "
"] set FichierHelp "[Fiches]/help.html" if {[FileAbsent $FichierHelp]} { set FichierHelp "[Fiches]/help.html" } ; #rR ????? faut trouver autre chose !! if {[FileExists $FichierHelp]} { set QueueHelp [file tail $FichierHelp] lappend Banner [Html_Append "

Get Help

"] } return [join $Banner "\n"] } } proc Html_BeginBody {} { global WithLogoBing set BeginBody "" if {[info exists WithLogoBing] && $WithLogoBing=="WithLogoBing"} { append BeginBody "\n[H_LogoBInG]" } return [Html_Append $BeginBody] } proc Html_BeginHtml {} { return [Html_Append ""] } proc Html_BeginHtmlManu {BgColor Font} { set Begin "" # set Doctype "" set Doctype "" return [Html_Append $Doctype] } proc Html_DuFichierJpg {Fichier} { #attention ne marche pas ..... set Queue [file tail $Fichier] lappend H "Content-type: image/jpeg" lappend H "Content-Disposition: inline; filename=\"$Queue\"" lappend H "Content-Transfer-Encoding: binary" lappend H "" lappend H [ContenuDuFichier $Fichier] return [join $H "\n"] } proc Html_DuScript {ScriptOuFichier} { if {$ScriptOuFichier==""} { return "" } if {[regexp " " $ScriptOuFichier]} { set Script $ScriptOuFichier } else { set Script [ContenuDuFichier $ScriptOuFichier] } lappend ToutScript "" set ToutScript [join $Script "\n"] return [Html_Append $ToutScript] } proc Html_DuTexteTelQuel {TexteOuNomDuFichier {Titre ""} {Header ""} {RefDocType ""}} { if {[regexp " " $TexteOuNomDuFichier] || ! [file exists $TexteOuNomDuFichier]} { set NomDuFichier "Raw text" set Texte $TexteOuNomDuFichier } else { set NomDuFichier $TexteOuNomDuFichier set Texte [ContenuDuFichier $NomDuFichier] } if {$Titre==""} { set Titre $NomDuFichier } if {[regexp {^ *<\?xml} $Texte]} { return $Texte } lappend Local [Html_Zero] lappend Local [Html_Doctype $RefDocType] lappend Local [Html_BeginHtml] lappend Local [Html_Header $Titre $Header] lappend Local [Html_BeginBody] lappend Local [Html_Teletype $Texte] lappend Local [Html_EndBody] lappend Local [Html_EndHtml] Html_Zero return [join $Local "\n"] } proc Html_Encapsule {TexteHtml {Titre ""} {Header ""} {RefDocType ""}} { lappend Local [Html_ZeroToBody $Header $RefDocType] lappend Local [Html_Append $TexteHtml] lappend Local [Html_BodyToEnd] return [join $Local "\n"] } proc Html_EndBody {} { return [Html_Append ""] } proc Html_EndHtml {} { return [Html_Append ""] } proc Html_Get {{ZeroIt ""}} { return [join [Html_lGet $ZeroIt] "\n"] } proc Html_GetPosition {} { global H return [llength $H] } proc Html_Header {{Titre ""} {Header ""}} { lappend Local [Html_Append ""] lappend Local [Html_Append ""] lappend Local [Html_Title "$Titre"] lappend Local [Html_UTF8] if {$Header!=""} { lappend Local [Html_Append $Header] } if {[PourWscope]} { lappend Local [Html_Append [CssWscope]] } lappend Local [Html_Append ""] return [join $Local "\n"] } proc Html_Href {Texte Url {AutresAttributs ""}} { return [Html_Append [H_Href $Texte $Url $AutresAttributs]] } proc Html_Insert {Ici Texte} { global H set H [linsert $H $Ici $Texte] return $Texte } proc Html_ListOfRefs {LesRefText {Titre ""} {PleaseSplitText ""}} { if {$PleaseSplitText=="PleaseSplitText"} { set PleaseSplitText 1 } else { set PleaseSplitText 0 } Html_ZeroToBody Html_Banner Wscope # Html_Append "
" # Html_Append "
" Html_Append $Titre lassign $LesRefText Ref0 Text0 set NbColonnes 1 if {$PleaseSplitText} { set NbColonnes [llength [split $Text0 "\t"]] } lappend Liste $NbColonnes lappend Liste "border='1' font-size='75%' cellpadding='3' cellspacing='1' class='wscope_table' style='margin:0 auto'" lappend Liste "" foreach I [NombresEntre 1 $NbColonnes] { set Couleur [CouleurDuNuancier $I $NbColonnes 0.3 0.1 "hexa" 0.7] lappend Liste "bgcolor='$Couleur' nowrap='nowrap'" } foreach {Ref Text} $LesRefText { if {$PleaseSplitText} { set PremiereFois 1 foreach Champ [split $Text "\t"] { if {$PremiereFois} { lappend Liste [H_Href $Champ $Ref] set PremiereFois 0 continue } lappend Liste $Champ } } else { lappend Liste [H_Href $Text $Ref] } } Html_TableFromList $Liste # Html_Append "
" Html_BodyToEnd return [Html_Get] } proc Html_Listbox {Texte {Fenetre ""} {Titre ""} {Maniere ""}} { global VariableToSetForWscope set VariableToSet "" if {[info exists VariableToSetForWscope]} { set VariableToSet $VariableToSetForWscope } set ClasseDuSelect "" if {[regexp "AvecRetour" $Maniere]} { set ClasseDuSelect "style='background:lightgreen;'" } set LesOptions {} set BonTexte [Html_Teletype $Texte "WithoutPre"] set Width 50 set NbLignes 5 foreach Ligne [split $BonTexte "\n"] { set Width [Maxi $Width [string length $Ligne]] regsub -all " " $Ligne {\ } LigneAvecBlanc regsub -all {\*} $Ligne "\%2A" Ligne lappend LesOptions "" incr NbLignes } set Options [join $LesOptions "\n"] incr Width 2 if {$Width >70} { set Width 70 } set Height $NbLignes if {$Height>40} { set Height 40 } regsub -all {[\.\-]} $Fenetre "_" Fenetre lappend Local "" lappend Local "
" lappend Local "
" lappend Local "" lappend Local "" lappend Local "" lappend Local "" lappend Local "" lappend Local "" lappend Local "" lappend Local "
" lappend Local [Html_TouchePour [TouchePourWscope "LesBoutonsDeLaFenetre" $Fenetre]] lappend Local "" if {[regexp "PourInforme" $Maniere]} { lappend Local "" } else { lappend Local "" } lappend Local "
" lappend Local "
" lappend Local "
" return [join $Local "\n"] } proc Html_NewLine {{Texte ""}} { return [Html_Append "
\n$Texte"] } proc Html_SymTree {LesGD} { #rR Crée un html avec deux colonnes, celle de gauche cadrée à droite et inversement (en sapin). set Css " " set LeHtml {} lappend LeHtml $Css lappend LeHtml "" lappend LeHtml " " foreach {G D} $LesGD { if {$G==""} { set G " " } if {$D==""} { set D " " } lappend LeHtml " " lappend LeHtml " " lappend LeHtml " " lappend LeHtml " " } lappend LeHtml " " lappend LeHtml "
" lappend LeHtml $G lappend LeHtml " " lappend LeHtml $D lappend LeHtml "
" set Html [join $LeHtml "\n"] return $Html } proc Html_TableFromList {Liste} { set NbColonnes [lindex $Liste 0] set AttTable [lindex $Liste 1] set AttLigne [lindex $Liste 2] foreach C [NombresEntre 0 [expr $NbColonnes - 1]] { set AttColon($C) [lindex $Liste [expr $C + 3]] } set DebutValeurs [expr $NbColonnes + 3] lappend Local [Html_BaliseOpen "table" $AttTable] set C 0 foreach Valeur [lrange $Liste $DebutValeurs end] { if {$C==0} { set TdTh "td" if {[regexp "^Please_TH_" $Valeur]} { regsub "^Please_TH_" $Valeur "" Valeur set TdTh "th" } lappend Local [Html_BaliseOpen "tr" $AttLigne] } lappend Local [Html_BaliseOpen $TdTh $AttColon($C)] lappend Local [Html_Append $Valeur] lappend Local [Html_BaliseClose $TdTh] set C [expr ($C+1)%$NbColonnes] if {$C==0} { lappend Local [Html_BaliseClose "tr"]} } lappend Local [Html_BaliseClose "table"] return [join $Local "\n"] } proc Html_Teletype {Texte {WithoutPre ""}} { set BonTexte $Texte set Remettre 0 set LesD {} set LesX {} while {[set D [string first "<<=0} { set Remettre 1 set F [string first "KeepChevrons>>>" $BonTexte] incr F [string length "KeepChevrons>>>"] set X [string range $BonTexte $D $F] regsub "<<>>" $X "" X set BonTexte [string replace $BonTexte $D $F "ChevronsARemettreIciMerci"] lappend LesX $X } regsub -all "&" $BonTexte {\&} BonTexte regsub -all "<" $BonTexte {\<} BonTexte regsub -all ">" $BonTexte {\>} BonTexte if {$Remettre} { foreach X $LesX { set D [string first "ChevronsARemettreIciMerci" $BonTexte] set F [expr $D + [string length "ChevronsARemettreIciMerci"] - 1] set BonTexte [string replace $BonTexte $D $F $X] } } if {[string equal -nocase $WithoutPre "WithoutPre"]} { return $BonTexte } set Teletype "
\n$BonTexte\n
" return [Html_Append $Teletype] } proc Html_TextToListbox {{TexteOuNomDuFichier ""} {Fenetre ""} {Titre ""} {Header ""} {RefDocType ""} {Maniere ""}} { if {[regexp " " $TexteOuNomDuFichier] || ! [file exists $TexteOuNomDuFichier]} { set NomDuFichier "Raw text" set Texte $TexteOuNomDuFichier } else { set NomDuFichier $TexteOuNomDuFichier set Texte [ContenuDuFichier $NomDuFichier] } if {$Titre==""} { set Titre $NomDuFichier } lappend Local [Html_Zero] lappend Local [Html_Doctype $RefDocType] lappend Local [Html_BeginHtml] lappend Local [Html_Header $Titre $Header] lappend Local [Html_BeginBody] lappend Local [Html_Banner Wscope] lappend Local [Html_Append "

$Titre

"] lappend Local [Html_Listbox $Texte $Fenetre $Titre $Maniere] lappend Local [Html_EndBody] lappend Local [Html_EndHtml] Html_Zero return [join $Local "\n"] } proc Html_TheEnd {} { set TheEnd "\n" return [Html_Append $TheEnd] } proc Html_Title {{Titre ""}} { if {$Titre==""} { set Titre "[Science] Wscope" } lappend Local [Html_Append ""] lappend Local [Html_Append " $Titre"] lappend Local [Html_Append ""] return [join $Local "\n"] } proc Html_TouchePour {LesBoutons} { set Local {} lappend Local "
" set CreateDiv 1 set CloseDiv 0 foreach Bouton $LesBoutons { lassign $Bouton Clavier Texte Commande Maniere Couleur if {$Couleur=="grey"} { set Couleur "lightgrey" } if {$Couleur=="green"} { set Couleur "lightgreen" } if {$Clavier=="NouvelleGamme"} { if {$CloseDiv} { lappend Local "
" ; set CloseDiv 0 } set CreateDiv 1 continue } regsub "^ */" $Texte "" NiceTexte set W1 "30ex" set W21 "16ex" ; set W22 "14ex" set W31 "16ex" ; set W32 "8ex" ; set W33 "6ex" set OnClique "onclick='jeClique(\"$NiceTexte\");'" if {[regexp "^onclick='" $Commande]} { regsub "^onclick='" $Commande "onclick='jeClique(\"$NiceTexte\");" OnClique } set B "" if {[regexp "^ */" $Texte]} { set OldB [lindex $Local end] if {[regexp "width:$W1;" $OldB]} { regsub "width:$W1;" $OldB "width:$W21;" NewOldB set Local [lreplace $Local end end] regsub "width:$W1;" $B "width:$W22;" B set B $NewOldB$B } if {[regexp "width:$W22;" $OldB]} { regsub "width:$W22;" $OldB "width:$W32;" OldB regsub "width:$W21;" $OldB "width:$W31;" OldB set Local [lreplace $Local end end] regsub "width:$W1;" $B "width:$W33;" B set B $OldB$B } lappend Local $B continue } if {$CreateDiv} { lappend Local "
" set CloseDiv 1 set CreateDiv 0 } else { lappend Local "
" } lappend Local $B } if {$CloseDiv} { lappend Local "
" ; set CloseDiv 0} lappend Local "
" return [join $Local "\n"] } proc Html_TranscriptVariants {Box {FromBodyToEnd ""}} { #set refpfaminitial 0 Espionne "$Box" set FromBodyToEnd [regexp -nocase "FromBodyToEnd" $FromBodyToEnd] if {$FromBodyToEnd} { set Titre "Transcript Variants" Html_ZeroToBody $Titre Html_Append "

$Titre

" Html_Append "
" } if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set Org Mouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set Org Rat } else { set Org SpliRet } if {$Org=="SpliRet"} { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout.ordonne.reduit" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ordonne.reduit"} } else { #set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj.reduit" set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" #if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.reduit"} if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} set FileBilan "[RepertoireDuGenome]/BilanPerteGain/$Box" } set LesPfamNettoyeDeLaRef {}; set LesPfamStartStop {}; array unset DejaVu; set LesNamesTotal {}; array unset LesLongueurs set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set Tag [ExtraitInfo $Box "Tag"] set Gn [ExtraitInfo $Box "ValiGN"] set GN [string toupper $Gn] set Des [ExtraitInfo $Box "ValiDE"] Html_Append "" Html_Append [H_Balise [H_Bold "$Cluster $Box ($Tag)"] H2] Html_Append "" Html_Append "[H_Bold $Gn]" Html_Append "     GeneCards" Html_Append "     ECgene" Html_Append "      $Des" Html_Append "
" Html_Append "
" if {![file exists $FileMacsims]} { Html_Append "no macsims" Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "
" set Texte [Html_Get] return $Texte } set LesNames [InterrogeNames $Cluster Name $Org] set RefPfam [ExtraitInfo $Box "RefPfam"] #set NbPFAMRef [InterrogeRefPfam $Box-$RefPfam nombrePFAMMacsims] LConcat LesNamesTotal $LesNames LConcat LesNamesTotal $RefPfam LConcat LesNamesTotal $Box set LesNamesTotal [ListeSansDoublon $LesNamesTotal] InitPosRel2Abs $FileMacsims $LesNamesTotal set LesPfamInfoRef [FromMacsims $FileMacsims $RefPfam "ConcatPfam"] #Html_Append "$LesPfamInfoRef" #Html_Append "
" foreach PfamInfoRef $LesPfamInfoRef { set MotsPfamInfoRef [split $PfamInfoRef "/"] set Pfam [lindex $MotsPfamInfoRef 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id set PfamNettoye "$Id" lappend LesPfamNettoyeDeLaRef $PfamNettoye FstartFstop $PfamInfoRef RFstart RFstop set Start [DonnePosRA $RefPfam $RFstart Absolue] set Stop [DonnePosRA $RefPfam $RFstop Absolue] set PfSS "$Id $Start $Stop" lappend LesPfamStartStop $PfSS set PossedePfSS($RefPfam,$PfSS) 1 } foreach PfamNettoyeDeLaRef $LesPfamNettoyeDeLaRef { if {[info exists DejaVu($PfamNettoyeDeLaRef)]} { incr DejaVu($PfamNettoyeDeLaRef) } else { set DejaVu($PfamNettoyeDeLaRef) 1 } } Html_Append "[H_Bold "Reference PFAM:"] $RefPfam" Html_Append "
" foreach Clef [array names DejaVu] { #Espionne "$Clef $DejaVu($Clef)" set Des [InterrogePfamDesFrom1500 $Clef Des] Html_Append "$DejaVu($Clef) $Clef: $Des" Html_Append "
" } foreach Name $LesNames { if {$Name==$Ref} {set Name $Box} #if {$Name==$RefPfam} {set refpfaminitial 1} set LesPfamInfoName [FromMacsims $FileMacsims $Name "ConcatPfam"] foreach PfamInfoName $LesPfamInfoName { set MotsPfamInfoName [split $PfamInfoName "/"] set Pfam [lindex $MotsPfamInfoName 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id set PfamNettoye "$Id $PfamName" FstartFstop $PfamInfoName RFstart RFstop set Start [DonnePosRA $Name $RFstart Absolue] set Stop [DonnePosRA $Name $RFstop Absolue] set PfSS "$Id $Start $Stop" lappend LesPfamStartStop $PfSS set PossedePfSS($Name,$PfSS) 1 } } set LesPfamStartStop [lsort -unique $LesPfamStartStop] set LesPfamStartStop [lsort -command TriePfSS $LesPfamStartStop] set LaCourante $LesPfamStartStop set collapse 1 while {$collapse} { if {[llength $LaCourante]<2} {break} set lA [lrange $LaCourante 0 end-1] set lB [lrange $LaCourante 1 end] set i -1 foreach A $lA B $lB { DecortiquePfSS $A PfA StartA StopA DecortiquePfSS $B PfB StartB StopB if {$PfA!=$PfB || ! [Recouvrement $StartA $StopA $StartB $StopB]} { set collapse 0 incr i continue } set StartN [Mini $StartA $StartB] set StopN [Maxi $StopA $StopB] set N "$PfA $StartN $StopN" lappend LesAnciens($N) $A $B if {[info exists LesAnciens($A)]} { #Espionne "A existe: $A values= $LesAnciens($A)" set LesAnciens($N) [lsort -unique [concat $LesAnciens($N) $LesAnciens($A)]] } if {[info exists LesAnciens($B)]} { #Espionne "B existe: $B values= $LesAnciens($B)" set LesAnciens($N) [lsort -unique [concat $LesAnciens($N) $LesAnciens($B)]] } foreach Ancien [array names LesAnciens] { #Espionne "$Ancien=$LesAnciens($Ancien)" } set collapse 1 break } if { ! $collapse } { break } set LaCourante [lreplace $LaCourante [expr $i+1] [expr $i+2] $N] #Espionne "LaCourante $LaCourante" } set LesPfamStartStopCollapse $LaCourante #Espionne "LesPfamStartStopCollapse $LesPfamStartStopCollapse" foreach Ancien [array names LesAnciens] { #Espionne "$Ancien=$LesAnciens($Ancien)" } #Espionne "" Html_Append "
"
    set TextePfSS [join $LesPfamStartStopCollapse "\t"]
    set TextePfSS [regsub -all " " $TextePfSS "-"]
    set TextePfSS [regsub -all "\t" $TextePfSS "....."]
    Html_Append [MiseEnLigneTR "AllPFAMs" : $TextePfSS "b"]
#	Html_Append [MiseEnLigneTR [H_Bold "AllPfam"] : $TextePfSS]

    foreach PfSS $LesPfamStartStopCollapse {
	if {[info exists LesAnciens($PfSS)]} {
	    set Result [DetermineLeStringLePlusLong $LesAnciens($PfSS)]
	    set longmax [lindex [split $Result "\t"] 1]
	    set LesLongueurs($PfSS) $longmax
	} else {
	    set longmax [string length $PfSS]
	    set LesLongueurs($PfSS) $longmax
	}
    }
    
    set LaRefEtLesNames [concat [list $RefPfam] $LesNames]
    set LaRefEtLesNames [ListeSansDoublon $LaRefEtLesNames]
    foreach Chacun $LaRefEtLesNames {
	#Espionne ""
	#Espionne "Chacun $Chacun"
	set Met ""
	#if $Chacun!=$RefPfam || $refpfaminitial 
	if {$Chacun!=$RefPfam} {
	    set PremierAA [YatilUneMet $Org $Cluster $Chacun]
	    if {$PremierAA=="M"} {set Met "AcMet"}
	    if {$PremierAA!="M"} {set Met "SsMet"}
	}
	if {$Chacun==$Ref} {set Chacun $Box}
	set  LesPfamStartStopDeChacun {}
	foreach PfSS $LesPfamStartStopCollapse {
	    set Mot $PfSS
	    #Espionne "1er Mot $Mot"
	    if { ! [info exists PossedePfSS($Chacun,$PfSS)]} {
		#Espionne "onentre"
		set Mot [string repeat "." $LesLongueurs($PfSS)]
		#Espionne "Mot $Mot"
	    }
	    if {[info exists LesAnciens($PfSS)]} {
		#Espionne "on entre2"
		foreach Ancien $LesAnciens($PfSS) {
		    #Espionne "Ancien $Ancien"
		    if {[info exists PossedePfSS($Chacun,$Ancien)]} {
			#Espionne "on entre3"
			#Espionne "Mot $Mot"
			set Mot [string range "$Ancien......." 0 [expr $LesLongueurs($PfSS) - 1]]
			#Espionne "Mot $Mot"
			break
		    }
		}
	    }
	    lappend LesPfamStartStopDeChacun $Mot
	}
	#Espionne "LesPfamStartStopDeChacun $LesPfamStartStopDeChacun"
	set TextePfSSDeChacun [join $LesPfamStartStopDeChacun "\t"]
	set TextePfSSDeChacun [regsub -all " " $TextePfSSDeChacun "-"]
	set TextePfSSDeChacun [regsub -all "\t" $TextePfSSDeChacun "....."]
	#[H_Italic $Met]
	if {$Chacun==$Box} {
	    Html_Append [MiseEnLigneTR "$Chacun ($Ref) $Met" : $TextePfSSDeChacun]
	} else {
	    Html_Append [MiseEnLigneTR "$Chacun $Met" : $TextePfSSDeChacun]
	}
    }
    if {![file exists $FileBilan]} {
	Html_Append "
" Html_Append "
"
	Html_Append "Summary not made"
    } else {
	set PerdPfam "No"; set GagnePfam "No"; set PerdBlockDsPfam "No"; set PerdPrositeDsPfam "No"
	set PerdFragmentEntreBlockDsPfam "No"; set PerdFragmentDsBlockDsPfam "No"; set PerdFragmentDsPrositeDsPfam "No"
	foreach Line [LesLignesDuFichier $FileBilan] {
	    set LesMots [split $Line " "]
	    if {[lindex $LesMots 1] == "gagne" && [regexp "^\"PF" [lindex $LesMots 2]]} {
		set GagnePfam "Yes"
	    }
	    if {[lindex $LesMots 1] == "perd"} {
		if {[regexp "^\"PF" [lindex $LesMots 2]]} {
		    set PerdPfam "Yes"
		} elseif {[regexp "BLOCK" [lindex $LesMots 2]]} {
		    set PerdBlockDsPfam "Yes"
		} elseif {[regexp "^\"PS" [lindex $LesMots 2]]} {
		    set PerdPrositeDsPfam "Yes"
		} elseif {[regexp "^\"Fragment" [lindex $LesMots 2]]} {
		    if {[lindex $LesMots 4] == "entre"} {
			set PerdFragmentEntreBlockDsPfam "Yes"
		    } elseif {[lindex $LesMots 4] == "dans"} {
			if {[regexp "BLOCK" [lindex $LesMots 5]]} {
			    set PerdFragmentDsBlockDsPfam "Yes"
			} elseif {[regexp "^PS" [lindex $LesMots 5]]} {
			    set PerdFragmentDsPrositeDsPfam "Yes"
			}
		    }
		}
	    }
	}
	Html_Append "
" Html_Append "
"
	Html_Append "Summary:"
	Html_Append "PerdPfam                      $PerdPfam"
	Html_Append "GagnePfam                     $GagnePfam"
	Html_Append "PerdBlockDsPfam               $PerdBlockDsPfam"
	Html_Append "PerdPrositeDsPfam             $PerdPrositeDsPfam"
	Html_Append "PerdFragmentEntreBlockDsPfam  $PerdFragmentEntreBlockDsPfam"
	Html_Append "PerdFragmentDsBlockDsPfam     $PerdFragmentDsBlockDsPfam"
	Html_Append "PerdFragmentDsPrositeDsPfam   $PerdFragmentDsPrositeDsPfam"
    }
    Html_Append "
" Html_Append "Details" Html_Append "
" Html_Append "MACSIMS with Jalview" Html_Append "      Create Radar for all experiments with software RMA" Html_Append " or dChip" if {$FromBodyToEnd} { Html_BodyToEnd set Texte [Html_Get "ZeroIt"] } else { Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "
" set Texte [Html_Get] } return $Texte } proc Html_TranscriptVariantsOld {Box {FromBodyToEnd ""}} { set refpfaminitial 0 set FromBodyToEnd [regexp -nocase "FromBodyToEnd" $FromBodyToEnd] if {$FromBodyToEnd} { set Titre "Transcript Variants" Html_ZeroToBody $Titre Html_Append "

$Titre

" Html_Append "
" } if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set Org Mouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set Org Rat } else { set Org SpliRet } if {$Org=="SpliRet"} { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout.ordonne.reduit" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ordonne.reduit"} } else { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj.reduit" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.reduit"} } set LesPfamNettoyeDeLaRef {}; set LesPfamStartStop {}; array unset DejaVu set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set LesNames [InterrogeNames $Cluster Name $Org] set RefPfam [ExtraitInfo $Box "RefPfam"] set NbPFAMRef [InterrogeRefPfam $Box-$RefPfam nombrePFAMMacsims] set Gn [ExtraitInfo $Box "ValiGN"] set Des [ExtraitInfo $Box "ValiDE"] Html_Append "" Html_Append [H_Balise [H_Bold "$Cluster $Box"] H2] Html_Append "" Html_Append "[H_Bold $Gn]" Html_Append "     GeneCards" Html_Append "      $Des" Html_Append "
" Html_Append "
" set LesPfamInfoRef [FromMacsims $FileMacsims $RefPfam "Concat"] set SeqDataRef [FromMacsims $FileMacsims $RefPfam "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataRef #Html_Append "$LesPfamInfoRef" #Html_Append "
" foreach PfamInfoRef $LesPfamInfoRef { set MotsPfamInfoRef [split $PfamInfoRef "/"] set Pfam [lindex $MotsPfamInfoRef 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id set PfamNettoye "$Id $PfamName" lappend LesPfamNettoyeDeLaRef $PfamNettoye FstartFstop $PfamInfoRef RFstart RFstop set Start [PositionAbsolueDansAlignement $RFstart] set Stop [PositionAbsolueDansAlignement $RFstop] set PfSS "$Id $Start $Stop" lappend LesPfamStartStop $PfSS set PossedePfSS($RefPfam,$PfSS) 1 } foreach PfamNettoyeDeLaRef $LesPfamNettoyeDeLaRef { if {[info exists DejaVu($PfamNettoyeDeLaRef)]} { incr DejaVu($PfamNettoyeDeLaRef) } else { set DejaVu($PfamNettoyeDeLaRef) 1 } } Html_Append "[H_Bold "PFAMs of Reference:"] $RefPfam" Html_Append "
" foreach Clef [array names DejaVu] { set MotsClef [split $Clef " "] set Id [lindex $MotsClef 0] Html_Append "$DejaVu($Clef) $Clef" Html_Append "
" } foreach Name $LesNames { if {$Name==$Ref} {set Name $Box} if {$Name==$RefPfam} {set refpfaminitial 1} set LesPfamInfoName [FromMacsims $FileMacsims $Name "Concat"] set SeqDataName [FromMacsims $FileMacsims $Name "SeqData"] PositionAbsolueDansAlignement 1 $SeqDataName foreach PfamInfoName $LesPfamInfoName { set MotsPfamInfoName [split $PfamInfoName "/"] set Pfam [lindex $MotsPfamInfoName 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id set PfamNettoye "$Id $PfamName" lappend LesPfamNettoyeDeLaName $PfamNettoye FstartFstop $PfamInfoName RFstart RFstop set Start [PositionAbsolueDansAlignement $RFstart] set Stop [PositionAbsolueDansAlignement $RFstop] set PfSS "$Id $Start $Stop" lappend LesPfamStartStop $PfSS set PossedePfSS($Name,$PfSS) 1 } } set LesPfamStartStop [lsort -unique $LesPfamStartStop] set LesPfamStartStop [lsort -command TriePfSS $LesPfamStartStop] set LaCourante $LesPfamStartStop set collapse 1 while {$collapse} { if {[llength $LaCourante]<2} {break} set lA [lrange $LaCourante 0 end-1] set lB [lrange $LaCourante 1 end] set i -1 foreach A $lA B $lB { DecortiquePfSS $A PfA StartA StopA DecortiquePfSS $B PfB StartB StopB if {$PfA!=$PfB || ! [Recouvrement $StartA $StopA $StartB $StopB]} { set collapse 0 incr i continue } set StartN [Mini $StartA $StartB] set StopN [Maxi $StopA $StopB] set N "$PfA $StartN $StopN" lappend LesAnciens($N) $A $B set collapse 1 break } if { ! $collapse } { break } set LaCourante [lreplace $LaCourante [expr $i+1] [expr $i+2] $N] } set LesPfamStartStopCollapse $LaCourante Html_Append "
"
    set TextePfSS [join $LesPfamStartStopCollapse "\t"]
    set TextePfSS [regsub -all " " $TextePfSS "-"]
    set TextePfSS [regsub -all "\t" $TextePfSS "....."]
    Html_Append [MiseEnLigneTR "AllPFAMs" : $TextePfSS "b"]
#	Html_Append [MiseEnLigneTR [H_Bold "AllPfam"] : $TextePfSS]
    
    set LaRefEtLesNames [concat [list $RefPfam] $LesNames]
    set LaRefEtLesNames [ListeSansDoublon $LaRefEtLesNames]
    foreach Chacun $LaRefEtLesNames {
	set Met ""
	if {$Chacun!=$RefPfam || $refpfaminitial} {
	    set PremierAA [YatilUneMet $Cluster $Chacun]
	    if {$PremierAA=="M"} {set Met "AcMet"}
	    if {$PremierAA!="M"} {set Met "SsMet"}
	}
	if {$Chacun==$Ref} {set Chacun $Box}
	set  LesPfamStartStopDeChacun {}
	foreach PfSS $LesPfamStartStopCollapse {
	    set Mot $PfSS
	    if { ! [info exists PossedePfSS($Chacun,$PfSS)]} {set Mot [regsub -all "." $Mot "."]}
	    if {[info exists LesAnciens($PfSS)]} {
		foreach Ancien $LesAnciens($PfSS) {
		    if {[info exists PossedePfSS($Chacun,$Ancien)]} {
			set Mot [string range "$Ancien......." 0 [expr [string length $PfSS]-1]]
			break
		    }
		}
	    }
	    lappend LesPfamStartStopDeChacun $Mot
	}
	set TextePfSSDeChacun [join $LesPfamStartStopDeChacun "\t"]
	set TextePfSSDeChacun [regsub -all " " $TextePfSSDeChacun "-"]
	set TextePfSSDeChacun [regsub -all "\t" $TextePfSSDeChacun "....."]
	#[H_Italic $Met]
	if {$Chacun==$Box} {
	    Html_Append [MiseEnLigneTR "$Chacun ($Ref) $Met" : $TextePfSSDeChacun]
	} else {
	    Html_Append [MiseEnLigneTR "$Chacun $Met" : $TextePfSSDeChacun]
	}
    }
    Html_Append "
" Html_Append "Resume" Html_Append "
" Html_Append "MACSIMS with Jalview" Html_Append "      Create Radar for all experiments with software RMA" Html_Append " or dChip" if {$FromBodyToEnd} { Html_BodyToEnd set Texte [Html_Get "ZeroIt"] } else { Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "
" Html_Append "
" set Texte [Html_Get] } return $Texte } proc Html_UTF8 {} { return [Html_Append ""] } proc Html_Zero {} { global H set H {} return {} } proc Html_ZeroToBody {{Titre ""} {Header ""} {RefDocType ""}} { lappend Local [Html_Zero] lappend Local [Html_Doctype $RefDocType] lappend Local [Html_BeginHtml] lappend Local [Html_Header $Titre $Header] lappend Local [Html_BeginBody] return [join $Local "\n"] } proc Html_lGet {{ZeroIt ""}} { global H if {$ZeroIt!="ZeroIt"} { return $H } set Tmp $H set H {} return $Tmp } proc HttpCopy {url {aliste ""} {Query ""} {args ""}} { #rR existe dans ordali/src/ordali_web.tcl et gscope/gscope_html.tcl #rR si aliste est vide on return la liste sinon #rR on return 1 et la liste dans liste #rR moumou traite aussi les redirections (jusqu'a 5 imbriquees) #rR Si jamais ca ne marche pas voir s'il n'y a pas un autre #rR HttpCopy dans un gscopublic ... #lm #lm change tous les retours pour inclure #lm ::http::cleanup qui libere la memoire #lm voir wiki if {[string range $url 0 4] eq "https"} { package require tls ::tls::init -ssl2 false -ssl3 false -tls1 true http::register https 443 tls::socket } if {$aliste eq ""} { set NothingFound "" } else { set NothingFound 0 upvar $aliste liste set liste {} } set timeout 30000 # query est une string retour de formatQuery if {$Query ne ""} { #set err [catch {set token [::http::geturl $url -timeout $timeout -query $Query]} Msg] set err [catch {set token [::http::geturl $url -query $Query]} Msg] } else { #set err [catch {set token [::http::geturl $url -timeout $timeout]} Msg] set err [catch {set token [::http::geturl $url]} Msg] } if {[info exists token]} { ::http::wait $token set Dtoken $token set ncode [::http::ncode $token] set status [::http::status $token] if {$status eq "timeout"} { set err 1 } } else { set Dtoken "none" set status "Not applicable" set ncode "No token" } #puts "ncode $ncode" #puts "status $status" #puts "Dtoken $Dtoken" if {$err || ($ncode < 200 || $ncode > 302)} { # we should clean anyway ... if {[info exists token]} { ::http::cleanup $token # ncode = 400 is a 'Bad request' if {$ncode == 400} { unset -nocomplain ::TryErrorNTimes return $NothingFound } } incr ::TryErrorNTimes if {$::TryErrorNTimes > 5} { Espionne "\n----------------------------" Espionne "Msg : $Msg" Espionne "Url : $url" Espionne "Query : $Query" Espionne "Status: $status" Espionne "Code : $ncode" Espionne "Lev 0 : [info level 0]" catch {Espionne "Lev-1 : [info level -1]"} Espionne "----------------------------\n" unset -nocomplain ::TryErrorNTimes update return $NothingFound } after 3000 update # same player shoot again return [HttpCopy $url $aliste $Query] } set WithLocation [regexp -nocase {(^| )Location ([^ ]+)( |$)} [::http::meta $token] Match a urlLocation] if { ! $WithLocation} { #rR Cas general # Data de la page set liste [split [::http::data $token] "\n"] ::http::cleanup $token unset -nocomplain ::TryHttpCopyNTimes update if {$aliste ne ""} { return 1 } else { return [join $liste "\n"] } } #rR the following is to handle URL redirects set Location $urlLocation #lm on va re-creer un token, clean this one ::http::cleanup $token update incr ::TryHttpCopyNTimes if {$::TryHttpCopyNTimes > 5} { unset -nocomplain ::TryHttpCopyNTimes update return $NothingFound } set RetourRecursif [HttpCopy [string trim $Location] $aliste $Query] unset -nocomplain ::TryHttpCopyNTimes update return $RetourRecursif } proc HttpCopyRR {url {aliste ""} {Query ""}} { #rR existe dans ordali/ordali_web.tcl et gscope/gscope_html.tcl #rR si aliste est vide on return la liste sinon #rR on return 1 et la liste dans liste #rR moumou traite aussi les redirections (jusqu'a 5 imbriquees) #rR Si jamais ca ne marche pas voir s'il n'y a pas un autre #rR HttpCopy dans un gscopublic ... #lm #lm change tous les retours pour inclure #lm ::http::cleanup qui libere la memoire #lm voir wiki if {$aliste eq ""} {set NothingFound 0} {set NothingFound ""} if {$aliste ne ""} {upvar $aliste liste} if {$Query ne ""} { set token [::http::geturl $url -query $Query] } else { set token [::http::geturl $url] } upvar #0 $token state set liste [split $state(body) "\n"] set iLocation [lsearch -exact $state(meta) "location"] #Espionne $state(meta) set SansLocation [expr {$iLocation < 0}] if { $SansLocation} { #rR Cas general ::http::cleanup $token if {$aliste ne ""} { return 1 } else { if {[info exists ::TryHttpCopyNTimes]} { unset ::TryHttpCopyNTimes } return [join $liste "\n"] } } #rR the following is to handle URL redirects set Location [lindex $state(meta) [incr iLocation]] incr ::TryHttpCopyNTimes if {$::TryHttpCopyNTimes > 5} { ::http::cleanup $token unset ::TryHttpCopyNTimes return $NothingFound } ::http::cleanup $token set RetourRecursif [HttpCopy [string trim $Location] $aliste] unset ::TryHttpCopyNTimes return $RetourRecursif } proc HttpCopyVieuxDeMoumou {url {aliste ""}} { global Ntimes if {$aliste!=""} { upvar $aliste liste } if {[catch {::http::geturl $url} token]} { #puts "Error $url : bad url or no network" return 0 } upvar #0 $token state unset token set liste [split $state(body) "\n"] foreach {name value} $state(meta) { if {[regexp -nocase ^location$ $name]} { if {! [info exists Ntimes]} { set Ntimes 1 } else { if {$Ntimes < 5} { incr Ntimes } else { return 0 } } # Handle URL redirects puts "Location: $value" unset state return [HttpCopy [string trim $value] liste] } } unset state # return 1 #rR prefererait liste au lieu de 1 return $liste } proc HttpGetTextFromUrl {Url} { set token [::http::geturl $Url -timeout 1000000] upvar #0 $token State ::http::cleanup $token unset token return $State(body) } proc HttpGetTextFromUrlRR {Url} { set token [::http::geturl $Url -timeout 1000000] upvar #0 $token State unset token return $State(body) } proc HttpGetUrl {{Url ""} {Query ""}} { if {$Url==""} { set Url "http://www.lbgi.fr/" } if {$Query==""} { set token [::http::geturl $Url -timeout 1000000 ] } else { # Quand on met -query il fait un POST sinon GET set token [::http::geturl $Url -query $Query -timeout 1000000 ] } return [::http::data $token] } proc HttpProgress {args} { puts -nonewline stderr . ; flush stderr return } proc HttpProgressRR {args} { puts -nonewline stderr . ; flush stderr return } proc HttpReferer {} { package require http set referer [::http::header "Referer"] return $referer } proc HumanFromMouse {{Qui ""} {Quoi ""}} { if {$Qui==""} { set Qui "ListOf" } if {[string equal -nocase $Qui "ListOf"]} { if {[string equal -nocase $Quoi "MouseHeader"]} { return [MGI ListOf Header] } if {[string equal -nocase $Quoi "HumanHeader"]} { return [HGNC ListOf Header] } } set M [MGI $Qui MGIID] Espionne "M $M" set H [MGIHGNC $M HGNCID] Espionne "H $H" if {$H==""} { set H [MGIHGNC $Qui HGNCID] } if {$H==""} { set H [HGNC $Qui HGNC_ID]} return [HGNC $H $Quoi] } proc HumanGenomeDir {{Repertoire ""}} { global env global HumanGenomeDir if {$Repertoire!=""} { set HumanGenomeDir $Repertoire } if { ! [info exists HumanGenomeDir]} { if {[info exists env(HUMANGENOMEDIR)]} { set HumanGenomeDir $env(HUMANGENOMEDIR) } else { set HumanGenomeDir "[GscopeDatabaseDir HumanGenome]" } } return $HumanGenomeDir } proc HumanGenomeUcsc {} { set I [open "HumanUCSC_Build37_hg17_May2004_origine" "r"] set O [open "HumanUCSC_Build37_hg17_May2004" "w"] while {[gets $I Ligne]>=0} { if {[regexp {>([^ ]+)} $Ligne Match X]} { set Ligne NotationUCSC($X,Header) } puts $O $Ligne } close $I close $O exit } proc HumanMutationDisease {{Qui ""} {Quoi ""}} { global HumanMutationDisease if {$Qui==""} { set Qui "ListOf" ; set Quoi "Gn" } if {$Quoi==""} { set Quoi "Di" } if {$Quoi=="Disease"} { set Quoi "Di" } if {$Qui!="ListOf"} { set Qui [string toupper $Qui] } if {[info exists HumanMutationDisease($Qui,$Quoi)]} { return $HumanMutationDisease($Qui,$Quoi) } if {[info exists HumanMutationDisease($Qui,Ix)]} { set LeResultat {} foreach Ix $HumanMutationDisease($Qui,Ix) { if {[info exists HumanMutationDisease($Ix,$Quoi)]} { LConcat LeResultat $HumanMutationDisease($Ix,$Quoi) } } set LeResultat [lsort -unique $LeResultat] return [join $LeResultat "///"] } if {[info exists HumanMutationDisease("EstCharge")]} { Espionne $Qui; return "" } set HumanMutationDisease("EstCharge") 1 set RepKb "/genomics/link/AmdKb" set FichierHumanMutationDisease "$RepKb/DeSM2PH/humsavar.txt" set Ix -1 foreach Ligne [LesLignesDuFichier $FichierHumanMutationDisease] { incr Ix set HumanMutationDisease($Ix,Line) $Ligne set Gn [set Ac ""] scan $Ligne "%s %s %s %s %s %s" Gn Ac Id Mu VT Rs if {$Gn=="" || $Ac==""} { continue } set Di [string range $Ligne 74 end] set Om "" regexp {\[MIM\:([^\]]+)\]} $Di Match Om lappend HumanMutationDisease($Ix,Ix) $Ix lappend HumanMutationDisease($Ix,Gn) $Gn lappend HumanMutationDisease($Ix,Ac) $Ac lappend HumanMutationDisease($Ix,Id) $Id lappend HumanMutationDisease($Ix,VT) $VT lappend HumanMutationDisease($Ix,Rs) $Rs lappend HumanMutationDisease($Ix,Di) $Di lappend HumanMutationDisease($Ix,Om) $Om lappend HumanMutationDisease($Ix,AM) "$Ac $Mu" lappend HumanMutationDisease(ListOf,Ix) $Ix lappend HumanMutationDisease(ListOf,Gn) $Gn lappend HumanMutationDisease(ListOf,Ac) $Ac lappend HumanMutationDisease(ListOf,Id) $Id lappend HumanMutationDisease(ListOf,VT) $VT lappend HumanMutationDisease(ListOf,Rs) $Rs lappend HumanMutationDisease(ListOf,Di) $Di lappend HumanMutationDisease(ListOf,Om) $Om lappend HumanMutationDisease(ListOf,AM) "$Ac $Mu" if {[info exists HumanMutationDisease($Ac,Gn)] && $HumanMutationDisease($Ac,Gn)!=$Gn} { #rR ne sert pas (theoriquement) ! FaireLire "$Ac $Gn $HumanMutationDisease($Ac,Gn)" } set HumanMutationDisease($Ac,Gn) $Gn lappend HumanMutationDisease($Ac,Ix) $Ix lappend HumanMutationDisease($Ac,Mu) $Mu lappend HumanMutationDisease($Ac,Di) $Di lappend HumanMutationDisease($Ac,Om) $Om lappend HumanMutationDisease($Ac,Rs) $Rs lappend HumanMutationDisease($Ac,VT) $VT lappend HumanMutationDisease($Gn,Ac) $Ac lappend HumanMutationDisease($Gn,Ix) $Ix lappend HumanMutationDisease($Gn,AM) "$Ac $Mu" lappend HumanMutationDisease($Gn,Di) $Di lappend HumanMutationDisease($Gn,Om) $Om lappend HumanMutationDisease($Gn,Rs) $Rs lappend HumanMutationDisease($Gn,VT) $VT lappend HumanMutationDisease($Om,Ix) $Ix } set HumanMutationDisease(ListOf,Gn) [lsort -unique $HumanMutationDisease(ListOf,Gn)] set HumanMutationDisease(ListOf,Ac) [lsort -unique $HumanMutationDisease(ListOf,Ac)] set HumanMutationDisease(ListOf,Id) [lsort -unique $HumanMutationDisease(ListOf,Id)] set HumanMutationDisease(ListOf,VT) [lsort -unique $HumanMutationDisease(ListOf,VT)] set HumanMutationDisease(ListOf,Rs) [lsort -unique $HumanMutationDisease(ListOf,Rs)] set HumanMutationDisease(ListOf,Di) [lsort -unique $HumanMutationDisease(ListOf,Di)] set HumanMutationDisease(ListOf,Om) [lsort -unique $HumanMutationDisease(ListOf,Om)] set HumanMutationDisease(ListOf,AM) [lsort -unique $HumanMutationDisease(ListOf,AM)] foreach Gn $HumanMutationDisease(ListOf,Gn) { set HumanMutationDisease($Gn,Di) {} foreach Ac $HumanMutationDisease($Gn,Ac) { LConcat HumanMutationDisease($Gn,Di) $HumanMutationDisease($Ac,Di) } set HumanMutationDisease($Gn,AM) [lsort -unique $HumanMutationDisease($Gn,AM)] set HumanMutationDisease($Gn,Rs) [lsort -unique $HumanMutationDisease($Gn,Rs)] set HumanMutationDisease($Gn,VT) [lsort -unique $HumanMutationDisease($Gn,VT)] set HumanMutationDisease($Gn,Di) [lsort -unique $HumanMutationDisease($Gn,Di)] set HumanMutationDisease($Gn,Di) [join $HumanMutationDisease($Gn,Di) "\n"] } foreach Ac $HumanMutationDisease(ListOf,Ac) { set HumanMutationDisease($Ac,Mu) [lsort -unique $HumanMutationDisease($Ac,Mu)] set HumanMutationDisease($Ac,Rs) [lsort -unique $HumanMutationDisease($Ac,Rs)] set HumanMutationDisease($Ac,VT) [lsort -unique $HumanMutationDisease($Ac,VT)] set HumanMutationDisease($Ac,Di) [lsort -unique $HumanMutationDisease($Ac,Di)] set HumanMutationDisease($Ac,Di) [join $HumanMutationDisease($Ac,Di) "\n"] } return [HumanMutationDisease $Qui $Quoi] } proc HumanSynonyms {G} { set H [HGNC $G "HGNC_ID"] if {$H==""} { return {} } set O [HGNC $H "Approved_Symbol"] set All [concat [list $O] [HGNC $H "Synonyms"]] set All [ListeSansDoublon $All] return $All } proc Hv_ChangeUnderline {args} { .hv.h.h config -underlinehyperlinks $::hv_underlineHyper Hv_RefreshFile } proc Hv_ClearBigImages {} { global ::hv_BigImages foreach b [array names ::hv_BigImages] { image delete $::hv_BigImages($b) } catch {unset ::hv_BigImages} } proc Hv_ClearOldImages {} { global ::hv_OldImages foreach fn [array names ::hv_OldImages] { image delete $::hv_OldImages($fn) } catch {unset ::hv_OldImages} } proc Hv_ClearScreen {} { set w .hv.h.h $w clear catch {unset ::hv_hotkey} Hv_ClearBigImages Hv_ClearOldImages foreach fn [array names ::hv_Images] { set ::hv_OldImages($fn) $::hv_Images($fn) } catch {unset ::hv_Images} } proc Hv_FillerImages {} { image create photo ::hv_biggray -data { R0lGODdhPAA+APAAALi4uAAAACwAAAAAPAA+AAACQISPqcvtD6OctNqLs968+w+G4kiW5omm 6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNFgsAO/// } image create photo ::hv_smgray -data { R0lGODdhOAAYAPAAALi4uAAAACwAAAAAOAAYAAACI4SPqcvtD6OctNqLs968+w+G4kiW5omm 6sq27gvH8kzX9m0VADv/ } image create photo ::hv_nogifbif -data { R0lGODdhJAAkAPEAAACQkADQ0PgAAAAAACwAAAAAJAAkAAACmISPqcsQD6OcdJqKM71PeK15 AsSJH0iZY1CqqKSurfsGsex08XuTuU7L9HywHWZILAaVJssvgoREk5PolFo1XrHZ29IZ8oo0 HKEYVDYbyc/jFhz2otvdcyZdF68qeKh2DZd3AtS0QWcDSDgWKJXY+MXS9qY4+JA2+Vho+YPp FzSjiTIEWslDQ1rDhPOY2sXVOgeb2kBbu1AAADv/ } image create photo ::hv_nogifsm -data { R0lGODdhEAAQAPEAAACQkADQ0PgAAAAAACwAAAAAEAAQAAACNISPacHtD4IQz80QJ60as25d 3idKZdR0IIOm2ta0Lhw/Lz2S1JqvK8ozbTKlEIVYceWSjwIAO/// } } proc Hv_FromEntities {txt} { return [string map [array get ::hv_froment] $txt] } proc Hv_GetArg {argname args} { foreach { keyword value } $args { if {[string index $keyword 0] == "-" } { set argum [string range $keyword 1 end] if { $argname == $argum } { return $value } } } return "" } proc Hv_HrefBinding {x y} { # koba & dg marking text .hv.h.h selection clear # set ::tkhtml::Priv(mark) $x,$y set list [.hv.h.h href $x $y] if {![llength $list]} {return} foreach {new target} $list break if {$new!=""} { global hv_LastFile set pattern $hv_LastFile# set len [string length $pattern] incr len -1 if {[string range $new 0 $len] eq $pattern} { incr len .hv.h.h yview [string range $new $len end] } else { Hv_LoadFile $new } } } proc Hv_InitIsoHtml {} { array unset ::hv_froment array unset ::hv_toent array set escapes { iexcl \xa1 cent \xa2 pound \xa3 curren \xa4 yen \xa5 brvbar \xa6 sect \xa7 uml \xa8 copy \xa9 ordf \xaa laquo \xab not \xac shy \xad reg \xae hibar \xaf deg \xb0 plusmn \xb1 sup2 \xb2 sup3 \xb3 acute \xb4 micro \xb5 para \xb6 middot \xb7 cedil \xb8 sup1 \xb9 ordm \xba raquo \xbb frac14 \xbc frac12 \xbd frac34 \xbe iquest \xbf Agrave \xc0 Aacute \xc1 Acirc \xc2 Atilde \xc3 Auml \xc4 Aring \xc5 AElig \xc6 Ccedil \xc7 Egrave \xc8 Eacute \xc9 Ecirc \xca Euml \xcb Igrave \xcc Iacute \xcd Icirc \xce Iuml \xcf ETH \xd0 Ntilde \xd1 Ograve \xd2 Oacute \xd3 Ocirc \xd4 Otilde \xd5 Ouml \xd6 times \xd7 Oslash \xd8 Ugrave \xd9 Uacute \xda Ucirc \xdb Uuml \xdc Yacute \xdd THORN \xde szlig \xdf agrave \xe0 aacute \xe1 acirc \xe2 atilde \xe3 auml \xe4 aring \xe5 aelig \xe6 ccedil \xe7 egrave \xe8 eacute \xe9 ecirc \xea euml \xeb igrave \xec iacute \xed icirc \xee iuml \xef eth \xf0 ntilde \xf1 ograve \xf2 oacute \xf3 ocirc \xf4 otilde \xf5 ouml \xf6 divide \xf7 oslash \xf8 ugrave \xf9 uacute \xfa ucirc \xfb uuml \xfc yacute \xfd thorn \xfe yuml \xff } # Convert into a form that we can use with [string map] foreach key [array names escapes] { set ::hv_froment(&$key\;) $escapes($key) } foreach { key value } [array get escapes] { set ::hv_toent($value) &$key\; } } proc Hv_LoadArgv {} { set ::hv_file {} foreach a $::argv { if {[regexp {^debug=} $a]} { scan $a "debug=0x%x" ::HtmlTraceMask } else { set ::hv_file $a } } } proc Hv_LoadBin {{binpath ""}} { if { $binpath != "" } { load $binpath Tkhtml } else { foreach f { ./tkhtml.so /usr/lib/tkhtml.so /usr/local/lib/tkhtml.so ./tkhtml.dll } { if {[file exists $f]} { if {[catch {load $f Tkhtml}]==0} break } } } } proc Hv_LoadFile {name} { set html [Hv_ReadFile $name] if {$html==""} return # translate ISO chars to HTML entities set html [Hv_ToEntities $html] Hv_ClearScreen set ::hv_LastFile $name .hv.h.h config -base $name .hv.h.h parse $html Hv_ClearOldImages } proc Hv_MainWindow {{withmenu ""} {closebutton ""} {horizbar ""} {linkcolor #0000FF} {bgcolor #FFFFFF}} { global Defauts frame .hv.mbar -bd 2 -relief raised if { $withmenu == 1 } { pack .hv.mbar -side top -fill x } menubutton .hv.mbar.file -text File -underline 0 -menu .hv.mbar.file.m pack .hv.mbar.file -side left -padx 5 set m [menu .hv.mbar.file.m] $m add command -label Open -underline 0 -command Hv_UserLoad $m add command -label Refresh -underline 0 -command Hv_RefreshFile $m add separator $m add command -label Exit -underline 1 -command exit menubutton .hv.mbar.view -text View -underline 0 -menu .hv.mbar.view.m pack .hv.mbar.view -side left -padx 5 set m [menu .hv.mbar.view.m] set ::hv_underlineHyper 1 $m add checkbutton -label {Underline Hyperlinks} -variable ::hv_underlineHyper trace add variable ::hv_underlineHyper write Hv_ChangeUnderline set ::hv_showTableStruct 0 $m add checkbutton -label {Show Table Structure} -variable ::hv_showTableStruct trace add variable ::hv_showTableStruct write Hv_ShowTableStruct set ::hv_showImages 1 $m add checkbutton -label {Show Images} -variable ::hv_showImages trace add variable ::hv_showImages write Hv_RefreshFile # Construct the main HTML viewer # frame .hv.h pack .hv.h -side top -fill both -expand 1 html .hv.h.h -yscrollcommand {.hv.h.vsb set} -xscrollcommand {.hv.f2.hsb set} -padx 5 -pady 9 -formcommand FormCmd -imagecommand ImageCmd -scriptcommand ScriptCmd -appletcommand AppletCmd -underlinehyperlinks 1 -bg $bgcolor -tablerelief flat -visitedcolor $linkcolor -unvisitedcolor $linkcolor -fontcommand Hv_PickFont # If the tracemask is not 0, then draw the outline of all # tables as a blank line, not a 3D relief. # if {$::HtmlTraceMask} { .hv.h.h config -tablerelief flat } bind .hv.h.h.x <1> {Hv_HrefBinding %x %y} # Pack the HTML widget into the main screen. # pack .hv.h.h -side left -fill both -expand 1 scrollbar .hv.h.vsb -width 8 -orient vertical -command {.hv.h.h yview} pack .hv.h.vsb -side left -fill y bind HtmlClip <4> {%W yview scroll -[set Defauts(DeltaYScroll)] units} bind HtmlClip <5> {%W yview scroll [set Defauts(DeltaYScroll)] units} frame .hv.f2 frame .hv.f2.sp -width [winfo reqwidth .hv.h.vsb] -bd 2 -relief raised scrollbar .hv.f2.hsb -orient horizontal -command {.hv.h.h xview} if { $horizbar == 1 } { pack .hv.f2.sp -side right -fill y pack .hv.f2.hsb -side top -fill x pack .hv.f2 -side top -fill x } # add close button if { $closebutton != "" } { frame .hv.bot pack .hv.bot -side bottom -fill x button .hv.bot.close -text $closebutton -command {destroy .hv} -width -12 -background green1 pack .hv.bot.close -side right -padx [winfo reqwidth .hv.h.vsb] -pady 7 } # # configure link color # .hv.h.h configure -visitedcolor $linkcolor -unvisitedcolor $linkcolor # # configure background color # .hv.h.h configure -background $bgcolor # If an argument was specified, read it into the HTML widget. # update if {$::hv_file!=""} { Hv_LoadFile $::hv_file } # This binding changes the cursor when the mouse move over # top of a hyperlink. # bind HtmlClip { set parent [winfo parent %W] set url [$parent href %x %y] if {[string length $url] > 0} { $parent configure -cursor hand2 } else { $parent configure -cursor {} } } MesCouleurs .hv FenetreAuCentre .hv } proc Hv_MoveBigImage {b} { if {![info exists ::hv_BigImages($b)]} return $b copy $::hv_BigImages($b) image delete $::hv_BigImages($b) unset ::hv_BigImages($b) update } proc Hv_PickFont {size attrs} { # puts "FontCmd: $size $attrs" set a [expr {-1<[lsearch $attrs fixed]?{courier}:{charter}}] set b [expr {-1<[lsearch $attrs italic]?{italic}:{roman}}] set c [expr {-1<[lsearch $attrs bold]?{bold}:{normal}}] set d [expr {int(12*pow(1.2,$size-4))}] list $a $d $b $c } proc Hv_ReadFile {name} { if {[catch {open $name r} fp]} { tk_messageBox -icon error -message $fp -type ok return {} } else { fconfigure $fp -translation binary set r [read $fp [file size $name]] close $fp return $r } } proc Hv_RefreshFile {args} { if {![info exists ::hv_LastFile]} return Hv_LoadFile $::hv_LastFile } proc Hv_Run {args} { set title "HTML File Viewer" set iconname "HV" set menubar "" set closebutton "" set loadargv "" set readfile "" set horizbar "" set linkcolor "" set title [eval Hv_GetArg title $args] set iconname [eval Hv_GetArg iconname $args] set menubar [eval Hv_GetArg menubar $args] set closebutton [eval Hv_GetArg closebutton $args] set loadargv [eval Hv_GetArg loadargv $args] set readfile [eval Hv_GetArg readfile $args] set horizbar [eval Hv_GetArg horizbar $args] set linkcolor [eval Hv_GetArg linkcolor $args] set bgcolor [eval Hv_GetArg bgcolor $args] set ::hv_lastDir [pwd] set ::HtmlTraceMask 0 if { $loadargv == 1 } { Hv_LoadArgv } if { $readfile != "" } { set ::hv_file $readfile } Hv_FillerImages Hv_InitIsoHtml trace remove variable ::hv_underlineHyper write Hv_ChangeUnderline trace remove variable ::hv_showImages write Hv_RefreshFile trace remove variable ::hv_showTableStruct write Hv_ShowTableStruct destroy .hv toplevel .hv wm title .hv $title wm iconname .hv $iconname set Cmd "" foreach a {menubar closebutton horizbar linkcolor bgcolor} { if {[set $a] != ""} { append Cmd [set $a] } } Hv_MainWindow 0 "Close" # eval Hv_MainWindow $Cmd } proc Hv_ShowTableStruct {args} { if {$::hv_showTableStruct} { set ::HtmlTraceMask [expr {$::HtmlTraceMask|0x8}] .hv.h.h config -tablerelief flat } else { set ::HtmlTraceMask [expr {$::HtmlTraceMask&~0x8}] .hv.h.h config -tablerelief raised } Hv_RefreshFile } proc Hv_ToEntities {txt} { return [string map [array get ::hv_toent] $txt] } proc Hv_UserLoad {} { set filetypes { {{Html Files} {.html .htm}} {{All Files} *} } set f [tk_getOpenFile -initialdir $::hv_lastDir -filetypes $filetypes] if {$f!=""} { Hv_LoadFile $f set ::hv_lastDir [file dirname $f] } } proc Hydrophobicities {Fichier {DuParalogue ""}} { global RepertoireDuGenome if {$DuParalogue==""} { set Rep "$RepertoireDuGenome/msf" } else { set Rep "$RepertoireDuGenome/msfparalogues" } set Nom [file tail $Fichier] if { ! [file exists $Fichier]} { set Fichier "$Rep/$Nom" } if { ! [file exists $Fichier]} { return {} } if {[catch {set Texte [eval exec "gesscale $Fichier -v"]} Message]} { return "" } return $Texte } proc Hydrophobicity {Nom {Quoi nHelices}} { global RepertoireDuGenome global Hydrophobicity Wup "Quoi can be nHelices Hydro or OwnHydro" if {[info exists Hydrophobicity($Nom,$Quoi)]} { return [set Hydrophobicity($Nom,$Quoi)] } if {[info exists Hydrophobicity]} { return -999 } set FichierHydrophobicity "$RepertoireDuGenome/fiches/hydrophobicity" if {[file exists $FichierHydrophobicity]} { foreach Ligne [LesLignesDuFichier $FichierHydrophobicity] { scan $Ligne "%s %d %f %f" NomLu nHelices Hydro OwnHydro set Hydrophobicity($NomLu,nHelices) $nHelices set Hydrophobicity($NomLu,OwnHydro) $OwnHydro set Hydrophobicity($NomLu,Hydro) $Hydro } set Hydrophobicity(EstChargee) 1 return [Hydrophobicity $Nom $Quoi] } if { ! [OuiOuNon "Do I calculate all hydrophobicities ?"]} { set Hydrophobicity(EstChargee) 1 return [Hydrophobicity $Nom $Quoi] } foreach PAB [ListeDesPABs] { set Texte [Hydrophobicities $PAB] if {$Texte==""} { set Hydro -2 set SonHydro -2 set nHelices -2 } else { foreach Ligne [split [Hydrophobicities $PAB] "\n"] { if {[regexp "\[ \t\]$PAB\[ \t\]+" $Ligne]} { scan $Ligne "%s %f %f %d %d" Bidon SonHydro P Long nHelices } if {[regexp "^GES " $Ligne]} { scan $Ligne "%s %f" Bidon Hydro } } } set Hydrophobicity($PAB,OwnHydro) $SonHydro set Hydrophobicity($PAB,Hydro) $Hydro set Hydrophobicity($PAB,nHelices) $nHelices lappend LesHydros "$PAB $nHelices $Hydro $SonHydro" } SauveLesLignes $LesHydros dans $FichierHydrophobicity return [Hydrophobicity $Nom $Quoi] } proc IDAndMeanPIDInMACS {{LesFichiers ""} {ARPMSFDir ""} {FichierOut ""}} { Wup "Permet de calculer le pourcentage d identite moyen au sein d un groupe de sequence" Wup "Affiche en dernier le Mean ID et le % ID de tous les access les uns contre les autres" #Format d entree du fichier #Fichier rsm msf ... #/home/julie/bin/calc_meanid Actin_Complet3_1_Propre.rsf set ARPHomeDir "[RepertoireDuGenome]/alignement_ARP/" if {$ARPMSFDir == ""} { set ARPMSFDir "$ARPHomeDir/ARPAnno/ARP_MACS/" set ARPMSFDir "$ARPHomeDir/Resultat/alignement/" set ARPMSFDir "$ARPHomeDir/Resultat/test/" } set Mean_ID "/home/julie/bin/calc_meanid" if {$FichierOut == ""} {set FichierOut "IDetPIDDesARPs"} if {$LesFichiers == ""} { set LesFichiers [glob -nocomplain -directory "$ARPMSFDir" "Actin_Complet5_0_Propre_A*"] } set LesFamilles "" Espionne $LesFichiers foreach Fichier $LesFichiers { if {[regexp "4\_3" $Fichier]} {continue} set LesResidus "" set Result "" Espionne "$Fichier" set Famille [file tail $Fichier] regsub -all {.[a-z]{2,3}$} $Famille "" Famille lappend LesFamilles $Famille AppendAuFichier $FichierOut "$Fichier" if {[catch {set LesResidus [exec $Mean_ID $Fichier]} Message]} { Espionne ">>>IDAndMeanPIDInMACS $Fichier" Espionne "pb $Message" #return "-1" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } #return "1" } } return "" } proc IDDeLaFicheEMBL {AcOuId} { package require textutil set fiche [BirdEntry $AcOuId] #if {$fiche eq ""} {error "$AcOuId: Fiche non trouvée."} if {$fiche eq ""} {return ""} #if {[llength $fiche] > 1} {error "$AcOuId: Plusieurs fiches trouvées."} if {[llength $fiche] > 1} {return ""} set fiche [lindex $fiche 0] foreach ligne [split $fiche "\n"] { if {[string range $ligne 0 1] eq "ID"} { return [lindex [string trim [string range $ligne 2 end]] 0] } } return "" } proc IDMapping {from to LId} { set LId [CheckIdsAsList $LId] # returns the converted list with converted IDs # IDs not found are replaced by the empty string # # BEWARE ! IDMapping only works from or to a # uniprot accession/bankid !! # # For the list of abbreviations of available # databases, see # http://www.uniprot.org/help/programmatic_access#id_mapping_examples # for updated available databases # Also reported below #lm 08/04/2016 # # uniprot ID/ACC = ACC+ID # uniprot ID = ID # uniprot acc = ACC # UniRef100 = NF100 # UniRef90 = NF90 # UniRef50 = NF50 # pdb = PDB_ID # refseq protein = P_REFSEQ_AC # refseq nucleot = REFSEQ_NT_ID # GI number = P_GI # set Ldbs [list ACC ID UPARC NF50 NF90 NF100 GENENAME EMBL_ID EMBL PIR UNIGENE_ID P_ENTREZGENEID P_GI P_REFSEQ_AC REFSEQ_NT_ID PDB_ID DISPROT_ID BIOGRID_ID DIP_ID MINT_ID STRING_ID CHEMBL_ID DRUGBANK_ID GUIDETOPHARMACOLOGY_ID SWISSLIPIDS_ID ALLERGOME_ID ESTHER_ID MEROPS_ID MYCOCLAP_ID PEROXIBASE_ID REBASE_ID TCDB_ID BIOMUTA_ID DMDM_ID WORLD_2DPAGE_ID DNASU_ID ENSEMBL_ID ENSEMBL_PRO_ID ENSEMBL_TRS_ID ENSEMBLGENOME_ID ENSEMBLGENOME_PRO_ID ENSEMBLGENOME_TRS_ID GENEDB_ID P_ENTREZGENEID KEGG_ID PATRIC_ID UCSC_ID VECTORBASE_ID WBPARASITE_ID ARACHNOSERVER_ID CCDS_ID CGD CONOSERVER_ID DICTYBASE_ID ECHOBASE_ID ECOGENE_ID EUHCVDB_ID EUPATHDB_ID FLYBASE_ID GENECARDS_ID H_INVDB_ID HGNC_ID HPA_ID LEGIOLIST_ID LEPROMA_ID MAIZEGDB_ID MIM_ID MGI_ID NEXTPROT_ID ORPHANET_ID PHARMGKB_ID POMBASE_ID PSEUDOCAP_ID RGD_ID SGD_ID TAIR_ID TUBERCULIST_ID WORMBASE_ID WORMBASE_TRS_ID WORMBASE_PRO_ID XENBASE_ID ZFIN_ID EGGNOG_ID GENETREE_ID HOGENOM_ID HOVERGEN_ID KO_ID OMA_ID ORTHODB_ID TREEFAM_ID BIOCYC_ID REACTOME_ID UNIPATHWAY_ID CLEANEX_ID COLLECTF_ID CHITARS_ID GENOMERNAI_ID GENEWIKI_ID NEXTBIO_ID] # check arguments if {$from ni $Ldbs && $from ne "ACC+ID"} { return [lrepeat [llength $LId] ""] } if {$to ni $Ldbs} { return [lrepeat [llength $LId] ""] } #global TIDMap #InitIDMapping # Bunches of 200 queries set url "http://www.uniprot.org/mapping/" set Lres [list] set paquets 200 set ni [expr {int([llength $LId]/$paquets)+1}] for {set i 0} {$i < $ni} {incr i} { set d [expr {$i*$paquets}] set f [expr {($i+1)*$paquets-1}] set query [::http::formatQuery from "$from" to "$to" format "tab" query "[join [lrange $LId $d $f] ,]"] set rep [HttpCopy $url "" $query] if {! [regexp {^From} $rep]} { puts "ERROR in IDMapping :" puts "Url : $url" puts "Query : $query" puts "" puts "$rep" return "" } set Lrep [split $rep \n] foreach l [lrange $Lrep 1 end] { lassign [split $l \t] in out set To($in) $out } update } set Lret [list] foreach i $LId { if {[info exists To($i)]} { set out [set To($i)] } else { set out "" } lappend Lret $out } return $Lret } proc IDdansMSF {FichierMSF ProtA ProtB {SelonAouSelonBouSelonLePlusPetitouSelonLePlusGrandouSelonAEtB SelonLePLusPetit}} { set LesAccess [AskMSF $FichierMSF LesAccess] set NombreDeSequences [llength $LesAccess] if {$NombreDeSequences<2} {return} foreach Access $LesAccess { if {[string equal -nocase $Access $ProtA]} { set SeqProtA [AskMSF $FichierMSF $Access] } if {[string equal -nocase $Access $ProtB]} { set SeqProtB [AskMSF $FichierMSF $Access] } } if {![info exists SeqProtA] || ![info exists SeqProtB]} {return -9999.9999} set SeqProtA [string toupper $SeqProtA] set SeqProtB [string toupper $SeqProtB] set nProtA [string length $SeqProtA] set nProtB [string length $SeqProtB] set CumulId 0 set LongVraieProtA 0 set LongVraieProtB 0 for {set i 0} {$i < $nProtA} {incr i} { if {$i >= $nProtB} { break } set AProtA [string range $SeqProtA $i $i] set BProtB [string range $SeqProtB $i $i] if { $AProtA != "." && $AProtA != "-"} { incr LongVraieProtA } if { $BProtB != "." && $BProtB != "-"} { incr LongVraieProtB } if { $AProtA == $BProtB } { if {$AProtA != "." && $AProtA != "-"} { incr CumulId } } } if {[string equal -nocase $SelonAouSelonBouSelonLePlusPetitouSelonLePlusGrandouSelonAEtB "SelonA" ]} { set Taille $LongVraieProtA } if {[string equal -nocase $SelonAouSelonBouSelonLePlusPetitouSelonLePlusGrandouSelonAEtB "SelonB" ]} { set Taille $LongVraieProtB } if {[string equal -nocase $SelonAouSelonBouSelonLePlusPetitouSelonLePlusGrandouSelonAEtB "SelonLePlusPetit"]} { set Taille [Maxi 1 [Mini $LongVraieProtA $LongVraieProtB]] } if {[string equal -nocase $SelonAouSelonBouSelonLePlusPetitouSelonLePlusGrandouSelonAEtB "SelonLePlusGrand"]} { set Taille [Maxi 1 [Maxi $LongVraieProtA $LongVraieProtB]] } if {[string equal -nocase $SelonAouSelonBouSelonLePlusPetitouSelonLePlusGrandouSelonAEtB "SelonAEtB" ]} { return [list [expr $CumulId * 1.0 / $LongVraieProtA] [expr $CumulId * 1.0 / $LongVraieProtB]] } return [expr $CumulId * 1.0 / $Taille] } proc IPO {Access} { #OUT = [list [list GOTerm1 Type Def 1 [list Access]] [list GOTerm2 Type Def 1 [list Access]]] #IPO Initial Protein Ontology Espionne "Access $Access -> 2GO" if {[EstUnAccessPDB $Access]} {return} set LesGOSelected {} foreach GO [Access2GO $Access] { foreach Type [GODB GO $GO LesTypes] { set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] lappend LesGOSelected [list $GO $Type $Def 1 [list $Access]] } } return [lsort -index 1 [lsort -index 3 -real -decreasing $LesGOSelected]] } proc IPRToKeepOrNotToKeep {Access} { global MesIPRInterressants if {! [info exists MesIPRInterressants]} {MesIPRInterressants} if {[info exists MesIPRInterressants($Access)]} {return 0} else {return 1} } proc IUPAC {B} { if {[string length $B] > 1} { set Tout "" foreach C [split $B ""] { append Tout [IUPAC $C] } return $Tout } set B [string toupper $B] if {$B=="A"} { return "A" } if {$B=="G"} { return "G" } if {$B=="C"} { return "C" } if {$B=="T"} { return "T" } if {$B=="U"} { return "T" } if {$B=="M"} { return "\[AC\]" } if {$B=="R"} { return "\[AG\]" } if {$B=="W"} { return "\[AT\]" } if {$B=="S"} { return "\[CG\]" } if {$B=="Y"} { return "\[CT\]" } if {$B=="K"} { return "\[GT\]" } if {$B=="V"} { return "\[ACG\]" } if {$B=="H"} { return "\[ACT\]" } if {$B=="D"} { return "\[AGT\]" } if {$B=="B"} { return "\[CGT\]" } if {$B=="N"} { return "\[ACGT\]" } return $B } proc IUPACcheck {IUPAC sequence} { set mistakesArray {} set tabIUPAC [split $IUPAC ""] set tabSequence [split $sequence ""] set regExp "" set mistakes 0 set num 0 foreach letterIUPAC $tabIUPAC { set lettre [lindex $tabSequence $num] #Espionne "IUPAC $letterIUPAC lettre $lettre" set lettre [lindex $tabSequence $num] if { $letterIUPAC != "" } { set position [expr $num + 1] if {$letterIUPAC == "A" && $lettre != "A" && $lettre != "a"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "T" && $lettre != "T" && $lettre != "t"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "C" && $lettre != "C" && $lettre != "c"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "G" && $lettre != "G" && $lettre != "g" } { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "R" && $lettre != "A" && $lettre != "a" && $lettre != "G" && $lettre != "g"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "Y" && $lettre != "C" && $lettre != "c" && $lettre != "T" && $lettre != "t"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "M" && $lettre != "C" && $lettre != "c" && $lettre != "A" && $lettre != "a"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "K" && $lettre != "T" && $lettre != "t" && $lettre != "G" && $lettre != "g"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "W" && $lettre != "A" && $lettre != "a" && $lettre != "T" && $lettre != "t"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "S" && $lettre != "C" && $lettre != "c" && $lettre != "G" && $lettre != "g"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "B" && $lettre != "C" && $lettre != "c" && $lettre != "G" && $lettre != "g" && $lettre != "T" && $lettre != "t"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "D" && $lettre != "A" && $lettre != "a" && $lettre != "G" && $lettre != "g" && $lettre != "T" && $lettre != "t"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "H" && $lettre != "A" && $lettre != "a" && $lettre != "C" && $lettre != "c" && $lettre != "T" && $lettre != "t"} { incr mistakes lappend mistakesArray $position } if {$letterIUPAC == "V" && $lettre != "A" && $lettre != "a" && $lettre != "C" && $lettre != "c" && $lettre != "G" && $lettre != "g"} { incr mistakes lappend mistakesArray $position } } incr num } return $mistakesArray } proc IUPACtoRegExp {IUPAC} { set tab [split $IUPAC ""] set regExp "" foreach letter $tab { if {$letter == "A"} { append regExp "_A" } elseif {$letter == "T"} { append regExp "_T" } elseif {$letter == "C"} { append regExp "_C" } elseif {$letter == "G"} { append regExp "_G" } elseif {$letter == "R"} { append regExp {_[AG]} } elseif {$letter == "Y"} { append regExp {_[CT]} } elseif {$letter == "M"} { append regExp {_[CA]} } elseif {$letter == "K"} { append regExp {_[TG]} } elseif {$letter == "W"} { append regExp {_[AT]} } elseif {$letter == "S"} { append regExp {_[CG]} } elseif {$letter == "B"} { append regExp {_[CTG]} } elseif {$letter == "D"} { append regExp {_[ATG]} } elseif {$letter == "H"} { append regExp {_[ATC]} } elseif {$letter == "V"} { append regExp {_[ACG]} } elseif {$letter == "N"} { append regExp {_[ATCG]} } else { Espionne "Erreur IUPACtoRegExp" } } return $regExp; } proc IUPACtoReverseAndComplementIUPAC {IUPAC} { set compIUPAC [compIUPAC $IUPAC] set reverseCompIUPAC [NucToReverseNuc $compIUPAC] return $reverseCompIUPAC; } proc IdAcChiffresOuiOuNon {Org} { if {[regexp -nocase "Mouse" $Org]} { set RepertoireSourisOthers "/genomics/link/SpliRetMouse/FichiersInitial/SOURIS_others" set RepertoireSourisTfactor "/genomics/link/SpliRetMouse/FichiersInitial/SOURIS_Tfactor" set LesRepertoires [list $RepertoireSourisTfactor $RepertoireSourisOthers] } if {[regexp -nocase "Rat" $Org]} { set RepertoireRatOthers "/genomics/link/SpliRetRat/FichiersInitial/RAT_others" set RepertoireRatTfactor "/genomics/link/SpliRetRat/FichiersInitial/RAT_Tfactor" set LesRepertoires [list $RepertoireRatTfactor $RepertoireRatOthers] } set i 0 foreach Repertoire $LesRepertoires { foreach FileST [glob -nocomplain "$Repertoire/*"] { incr i set nbtot 0; set nb 0 set cluster [lindex [split [file tail $FileST] "."] 0] set PAB [InterrogeBox $cluster Box] foreach Ligne [LesLignesDuFichier $FileST] { if {[regexp "^>" $Ligne]} { incr nbtot } if {[regexp "^>NM" $Ligne] || [regexp "^>XM" $Ligne] || [regexp "^>ENS" $Ligne] || [regexp "^>LA" $Ligne]} { incr nb } } if {$nbtot!=$nb} { Espionne "$PAB $cluster"} } } Espionne "i $i" } proc IdAcGn {{Orga ""} {Qui ""} {Quoi ""}} { global IdAcGn regsub " " $Orga "_" Orga if {$Orga==""} { set Orga "Homo_sapiens" } # if {$Orga==""} { set Orga "Saccharomyces_cerevisiae" } set Save 1 set Test 0 if {$Orga=="Test"} { set Test 1; set Save 0; set Orga "Homo_sapiens" } if {$Orga=="Save"} { set Test 1; set Save 1; set Orga "Homo_sapiens" } set FileName "[GscopeDatabaseDir Common]/fiches/IdAcGn_$Orga.txt" set SaveName "[GscopeDatabaseDir Common]/fiches/IdAcGn_$Orga-Save.txt" if {$Qui=="ReLoad"} { if {[file exists $SaveName]} { file delete $SaveName } if {[info exists IdAcGn]} { unset IdAcGn } set Qui "SaveName" } if {[info exists IdAcGn($Orga,$Qui,$Quoi)]} { return $IdAcGn($Orga,$Qui,$Quoi) } if {[info exists IdAcGn("EstCharge")]} { set QUI [string toupper $Qui] if {[info exists IdAcGn($Orga,$QUI,$Quoi)]} { return $IdAcGn($Orga,$QUI,$Quoi) } return "" } set IdAcGn("EstCharge") 1 set IdAcGn($Orga,FileName,) $FileName set IdAcGn($Orga,SaveName,) $SaveName if { ! $Test && [file exists $IdAcGn($Orga,SaveName,)]} { array set IdAcGn [LesLignesDuFichier $IdAcGn($Orga,SaveName,)] return [IdAcGn $Orga $Qui $Quoi] } set Id "ID_UNKNOWN"; set Ac "AC_UNKNOWN"; set Gn "GN_UNKNOWN" set I 0 foreach Ligne [LesLignesDuFichier $IdAcGn($Orga,FileName,)] { set Ligne [string toupper $Ligne] set LigneOriginale $Ligne regsub -all {[ ;]+} $Ligne " " Ligne set Ligne [string trim $Ligne] set LesMots [split $Ligne " "] lassign $LesMots K V1 V2 V3 if {$K eq "//"} { incr I if {0 && [incr I]> 333} { break } ;#rR attention on teste ici !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! lappend LesId $Id LConcat LesAc $LesA lappend LesGn $Gn lappend LesLe $Le set IdAcGn($Orga,$Id,Id) $Id set IdAcGn($Orga,$Id,Le) $Le set IdAcGn($Orga,$Id,Gn) $Gn set IdAcGn($Orga,$Id,Acs) $LesA set Ac [lindex $LesA 0] set IdAcGn($Orga,$Id,Ac) $Ac if {[info exists DejaVu($Id)]} { FaireLire "$Id $Ac deja vu pour $DejaVu($Id)" } foreach A $LesA { if {[info exists DejaVu($A)]} { lappend IdAcGn($Orga,Ambiguous,Ac) "$A $Id $Gn already seen in : $DejaVu($A)" } lappend DejaVu($A) "$Id $Gn" } set DejaVu($Id) $Ac lappend IdAcGn($Orga,$Gn,LeId) "$Le $Id" lappend IdAcGn($Orga,$Gn,Ids) $Id lappend IdAcGn($Orga,$Le,Ids) $Id foreach A $LesA { set IdAcGn($Orga,$A,Ac) $A set IdAcGn($Orga,$A,Id) $Id set IdAcGn($Orga,$A,Gn) $Gn lappend IdAcGn($Orga,$A,Ids) $Id lappend IdAcGn($Orga,$A,Gns) $Gn lappend IdAcGn($Orga,$Gn,Acs) $A } set Id "ID_UNKNOWN"; set Ac "AC_UNKNOWN"; set Gn "GN_UNKNOWN" continue } if {$K eq "ID"} { set Id $V1; set Le $V3; continue } if {$K eq "AC"} { set LesA [lrange $LesMots 1 end] if {[llength $LesA]>6} { set LesBonsA {} foreach A $LesA { if {[string length $A]>6} { lappend LesBonsA [string range $A 0 5] [string range $A 5 end] } else { lappend LesBonsA $A } } set LesA $LesBonsA } } if {$K eq "GN"} { set Gn $V1 regsub "NAME=" $Gn "" Gn regsub -all "/" $Gn "-" Gn regsub -all {[^a-zA-Z0-9_\-\+]} $Gn "" Gn set LesS {} if {[regexp {SYNONYMS=([^;]+);} $LigneOriginale Match Synonyms]} { if {$Gn=="ERGIC3"} { Espionne "$LigneOriginale" } regsub -all {[ /\,;]+} $Synonyms " " Synonyms ;#rR / devient separateur set LesSynonyms [split [string trim $Synonyms] " "] if {$Gn=="ERGIC3"} { Espionne $LesSynonyms } foreach Sy $LesSynonyms { regsub -all {[^a-zA-Z0-9_\.\-\+]} $Sy "" Sy lappend LesS $Sy if {[info exists IdAcGn($Orga,$Sy,GnOfSy)]} { #rR attention on ne teste plus rien si on l'a deja rencontre # if {$IdAcGn($Orga,$Sy,GnOfSy)==$Gn} { continue } # FaireLire "DejaVuSynonym $Sy de $Gn mais pour $IdAcGn($Orga,$Sy,GnOfSy)" continue } set IdAcGn($Orga,$Sy,GnOfSy) $Gn lappend LesSy $Sy } set IdAcGn($Orga,$Gn,Sys) $LesSynonyms } set LesO {} if {[regexp {ORFNAMES=([^;]+);} $LigneOriginale Match OrfNames]} { regsub -all {[ /\,;]+} $OrfNames " " OrfNames ;#rR / devient separateur set LesOrfNames [split [string trim $OrfNames] " "] foreach On $LesOrfNames { regsub -all {[^a-zA-Z0-9_\.\-\+]} $On "" On lappend LesO $On if {[info exists IdAcGn($Orga,$On,GnOfOn)]} { #rR attention on ne teste plus rien si on l'a deja rencontre # if {$IdAcGn($Orga,$On,GnOfOn)==$On} { continue } # FaireLire "DejaVuSynonym $On de $Gn mais pour $IdAcGn($Orga,$On,GnOfOn)" continue } set IdAcGn($Orga,$On,GnOfOn) $Gn lappend LesOn $On } set IdAcGn($Orga,$Gn,Ons) $LesOrfNames } } } set IdAcGn($Orga,ListOf,On) [lsort -unique $LesOn] set IdAcGn($Orga,ListOf,Sy) [lsort -unique $LesSy] set IdAcGn($Orga,ListOf,Id) [lsort -unique $LesId] set IdAcGn($Orga,ListOf,Ac) [lsort -unique $LesAc] set IdAcGn($Orga,ListOf,Gn) [lsort -unique $LesGn] set IdAcGn($Orga,ListOf,Le) [lsort -unique -integer $LesLe] set IdAcGn($Orga,NumberOf,Id) $I set IdAcGn($Orga,NumberOf,Ac) [llength $IdAcGn($Orga,ListOf,Ac)] foreach Gn $IdAcGn($Orga,ListOf,Gn) { set IdAcGn($Orga,$Gn,LeId) [lsort -decreasing -command CompareLesIntegersEnDebut $IdAcGn($Orga,$Gn,LeId)] set LeId [lindex $IdAcGn($Orga,$Gn,LeId) 0] scan $LeId "%d %s" Le Id set Ac $IdAcGn($Orga,$Id,Ac) set IdAcGn($Orga,$Gn,Gn) $Gn set IdAcGn($Orga,$Gn,Le) $Le set IdAcGn($Orga,$Gn,Id) $Id set IdAcGn($Orga,$Gn,Ac) $Ac lappend IdAcGn($Orga,ListOf,MajorId) $Id lappend IdAcGn($Orga,ListOf,MajorAc) $Ac } foreach Sy $IdAcGn($Orga,ListOf,Sy) { if {[info exists IdAcGn($Orga,$Sy,Id)]} { continue } set Gn $IdAcGn($Orga,$Sy,GnOfSy) ;#rR attention on rajoute les synonymes aux Gn set IdAcGn($Orga,$Sy,Gn) $Sy set IdAcGn($Orga,$Sy,Le) $IdAcGn($Orga,$Gn,Le) set IdAcGn($Orga,$Sy,Id) $IdAcGn($Orga,$Gn,Id) set IdAcGn($Orga,$Sy,Ac) $IdAcGn($Orga,$Gn,Ac) lappend IdAcGn($Orga,ListOf,Gn) $Sy } foreach On $IdAcGn($Orga,ListOf,On) { if {[info exists IdAcGn($Orga,$On,Id)]} { continue } set Gn $IdAcGn($Orga,$On,GnOfOn) ;#rR attention on rajoute les OrfNames aux Gn set IdAcGn($Orga,$On,Gn) $On set IdAcGn($Orga,$On,Le) $IdAcGn($Orga,$Gn,Le) set IdAcGn($Orga,$On,Id) $IdAcGn($Orga,$Gn,Id) set IdAcGn($Orga,$On,Ac) $IdAcGn($Orga,$Gn,Ac) lappend IdAcGn($Orga,ListOf,Gn) $On } set IdAcGn($Orga,ListOf,Gn) [lsort -unique $IdAcGn($Orga,ListOf,Gn)] set IdAcGn($Orga,NumberOf,Gn) [llength $IdAcGn($Orga,ListOf,Gn)] set IdAcGn($Orga,GN_UNKNOWN,Id) "ID_UNKNOWN" set IdAcGn($Orga,GN_UNKNOWN,Ac) "AC_UNKNOWN" set IdAcGn($Orga,GN_UNKNOWN,Gn) "GN_UNKNOWN" set IdAcGn($Orga,ID_UNKNOWN,Id) "ID_UNKNOWN" set IdAcGn($Orga,ID_UNKNOWN,Ac) "AC_UNKNOWN" set IdAcGn($Orga,ID_UNKNOWN,Gn) "GN_UNKNOWN" set IdAcGn($Orga,AC_UNKNOWN,Id) "ID_UNKNOWN" set IdAcGn($Orga,AC_UNKNOWN,Ac) "AC_UNKNOWN" set IdAcGn($Orga,AC_UNKNOWN,Gn) "GN_UNKNOWN" set Tout [array get IdAcGn] if { ! $Save } { SauveLesLignes $Tout dans $IdAcGn($Orga,SaveName,) } return [IdAcGn $Orga $Qui $Quoi] } proc IdAcGnForList {{Liste ""} {Quoi ""} {Orga ""} {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetList" } if {[regexp {[ \,\;\n]} $Liste]} { set Liste [regsub -all {[ \,\;\n]+} $Liste ","] set Liste [string trim $Liste] set Liste [split $Liste ","] } if {$Liste=="AllId"} { set Liste [IdAcGn $Orga "ListOf" "Id"] } if {$Liste=="AllAc"} { set Liste [IdAcGn $Orga "ListOf" "Ac"] } if {$Liste=="AllGn"} { set Liste [IdAcGn $Orga "ListOf" "Gn"] } set R {} foreach Qui $Liste { set W [list $Qui] foreach Q [split $Quoi ","] { if {$Q=="Qu"} { set X $Qui } else { set X [IdAcGn $Orga $Qui $Q] } regsub -all " " $X "," X lappend W $X } lappend R [join $W ":"] } if {$GetWhat=="GetList"} { return $R } if {$GetWhat=="GetLines"} { return [join $R "\n"] } return [join $R "/"] } proc IdCard {Document {Quoi ""}} { #rR Attention je triche pour les retour a la ligne qui compte pour 2 carac en php mais pas en tcl #rR Attention je triche en php en faisant utf8_decode pour tout les chmaps global IdCard if {$Quoi==""} { set Quoi "ListOfFields" } if {[info exists IdCard($Document,$Quoi)]} { return $IdCard($Document,$Quoi) } if {[info exists IdCard($Document,"EstCharge")]} { return "" } set IdCard($Document,"EstCharge") 1 set Url "[LbgiUrl]/puzz/phpRR/lance.php?action=IdCard::card&document=$Document&getwhat=GetCard" set Serial [ContenuDuFichier $Url] regsub -all "\n" $Serial "@!" Serial ArrayFromSerial $Serial TabCard set LesT {} set LesC {} foreach i [lsort -integer [array names TabCard]] { lassign $TabCard($i) t T c C set T [lindex $T 1] set C [lindex $C 1] regsub -all "@!" $C "\n" C lappend IdCard($Document,ListOfFields) $T set IdCard($Document,$T) $C } return [IdCard $Document $Quoi] } proc IdDBTSS2Organism {Id} { ###A partir de l'Id long de DBTSS, donne le nom de l'organisme### if {[regexp -nocase "^HSA" $Id]} {return "Homo sapiens"} if {[regexp -nocase "^MMU" $Id]} {return "Mus musculus"} return "Unknown unknown" } proc IdDuAc {AC} { set LesLignesEMBL [LaSequenceDesBanques $AC "" "OnVeutEMBL"] if {$LesLignesEMBL==""} { return "" } set ID [StringApres "ID " dans [lindex $LesLignesEMBL 0]] return $ID } proc IdDuProt {AC} { set Commande "getz \"\\\[protein-acc:$AC\\\]\" \-f id" set GetzOut [eval exec $Commande] if { $GetzOut == "" } { set IdLu "" return $IdLu exit } set Lu "" set IdLu "" scan $GetzOut "%s %s" Lu IdLu return $IdLu } proc IdDuProt_AEffacer {AC} { set Commande "getz \"\\\[protein-acc:$AC\\\]\" \-f id" set GetzOut [eval exec $Commande] if { $GetzOut == "" } { set IdLu "" return $IdLu exit } set Lu "" set IdLu "" scan $GetzOut "%s %s" Lu IdLu return $IdLu } proc IdentifiantDunIdString {protId} { foreach {Id So} [SqlExec "select protein_name, source from items.proteins_names where protein_id = '$protId';" "GetList"] { if {$So == "Ensembl" && [regexp "^ENSG" $Id]} { lappend LesIds $Id } } return $LesIds } proc IdentificationDeSavant {} { global IdentificationDeSavant if { ! [info exists IdentificationDeSavant]} { set IdentificationDeSavant 0 } incr IdentificationDeSavant if {$IdentificationDeSavant>99999} { set IdentificationDeSavant 1 } return $IdentificationDeSavant } proc IdentifieLeMeilleurBLAST {LesFichiersBLASTs AccessQuery {FichierLog ""}} { Wup "Permet de classer les resultats de BLAST dans les 10 sous familles pour une query" set RepARP "[RepARPAnno]" set RepBanque "$RepARP/ARP_BLAST" set RepARP_Results "[RepARPAnnoWeb]" set RepBlastResults "$RepARP_Results" if { $FichierLog == ""} { set FichierLog "[RepARPAnnoWeb]/IdentifieLeMeilleurBLAST.log" } #PERMET DE METTRE LA FAMILLE SI ON CONNAIT DEJA LA FAMILLE set Categorie [InterrogeLesInfosDesARPs [string toupper $AccessQuery] Categorie] regsub -all {\-\-\-\-} $Categorie "" Categorie regsub "Les" $Categorie "" Categorie if {[Verbose_Mode]} { set TextLog ">< 1- BLAST step ><" AjouteAuARPLog "$TextLog" } #L entete des resultats if {! [file exists $FichierLog]} { set Ligne "Access\tCategorie" foreach BLAST $LesFichiersBLASTs { set Famille_tmp "" set tmp "" #Query_test.tfa_ARP1 set Famille [file tail $BLAST] regexp -nocase {_([a-z]{2,4}[0-9]{1,2}|actin|orphans).blastp$} $Famille tmp Famille_tmp if {$Famille_tmp != ""} { set Famille $Famille_tmp } append Ligne "\t$Famille" } AppendAuFichier $FichierLog $Ligne } set ListeFamilleIdentity "" set Ligne "$AccessQuery\t$Categorie" foreach BLAST $LesFichiersBLASTs { #On recupere le nom de la famille qui est contenu dans le fichier BLAST set Famille_tmp "" set tmp "" set Famille [file tail $BLAST] regsub -nocase {.blastp$} $Famille "" Famille regexp -nocase {_([a-z]{2,4}[0-9]{1,2}|actin|orphans)$} $Famille tmp Famille_tmp if {$Famille_tmp != ""} { set Famille $Famille_tmp } if {[Verbose_Mode]} { set TextLog ">BLAST for $Famille" AjouteAuARPLog "$TextLog" } #Charge les resultats du Blast ############################## set BestIdGlobal 0.0 set BestCoverG 0.0 set BestBId "None" set NbSubject [AskBlast $BLAST NbSubject] #Test de la presence de la Query dans le blast ############################################## #On va rechercher le meilleur pourcentage d identite global pour chaque BLAST if {$NbSubject>0} { set MaxCoverQOverS "0.2" set PCoverSubject "" #Faut il mettre une limite au nombre de hits utilises pour la recherche du meilleur hit ? set NbSubjectLimit 50 if {[regexp -nocase "actin" $Famille]} { set NbSubjectLimit 10 } if {$NbSubject>$NbSubjectLimit} {set NbSubject $NbSubjectLimit} for {set i 1} {$i <=$NbSubject} {incr i} { set BId "" set IdGlobal "" set PCoverSubject "" set BId [AskBlast $BLAST Subject $i] #Pourcentage d identite global: Aligne sur Total dans les alignements set IdGlobal [format "%.2f" [PourcentageDIdentiteGlobal $BLAST $BId]] if {$IdGlobal > $BestIdGlobal} { #Recouvrement de Q sur S ou inversement #PCoverQuery Query par rapport au Subject #PCoverSubject Subject par rapport au Query #set PCoverQuery [PourcentageDeRecouvrement $BLAST $BId "Query"] set PCoverSubject [format "%.2f" [PourcentageDeRecouvrement $BLAST $BId "Subject"]] if {$PCoverSubject < $MaxCoverQOverS} { #Si le recouvrement de la query sur le subject est trop faible on ne le retient pas continue } else { #On garde les ID et BId du meilleur hit set BestIdGlobal $IdGlobal set BestCoverG $PCoverSubject set BestBId $BId } #Espionne "$BId -- $IdGlobal -- $PCoverSubject" continue } } } else { set BestIdGlobal "0.0" set BestIdGlobal "0.0" set BestCoverG "0.0" set BestBId "None" } set BestIdGlobal [format "%.2f" $BestIdGlobal] set BestCoverG [format "%.2f" $BestCoverG] if {[Verbose_Mode]} { set TextLog "[format "%6s %4.2f %4.2f" $BestBId $BestIdGlobal $BestCoverG]" AjouteAuARPLog "$TextLog" } append Ligne "\t${BestIdGlobal}_${BestCoverG}" lappend ListeFamilleIdentity [list $Famille $BestIdGlobal $BestCoverG] AskBlast unsetfile $BLAST } AppendAuFichier $FichierLog $Ligne set ListeFamilleIdentity [lsort -decreasing -real -index 1 $ListeFamilleIdentity] return "$ListeFamilleIdentity" } proc IdentifieLesZonesBLATPourTous {DirIn} { if {! [file exists "[RepertoireDuGenome]/${DirIn}"]} { Espionne "Problem input directory do not exists." return "" } #set LesPABs [ListeDesPABs] set LesPABs [glob -nocomplain -directory "$DirIn" -tails "*"] foreach PAB $LesPABs { IdentifieLesZonesBLAT "$DirIn/$PAB" } return "" } proc IdentifieLesZonesUCSC {Input {Quoi RefSeq}} { Wup "Identifie a partir d un blast ou d un blat les zones d identite importante sur le genome UCSC" Wup "Fait le lien avec les annotations disponibles et determine la ou les annotations pertinentes" Wup "Utilise 3 cutoff, PId du HSP, Cover du HSP avec un gene, Cover des HSP pour un gene" set Genome "mouse" #1- Chargement des infos du Blast ou du Blat set TailleQuery [AskBlast $Input Taille] set NomQuery [AskBlast $Input Query] set NbSbjct [AskBlast $Input NbSubject] if {$NbSbjct=="0" || $NbSbjct==""} {Espionne ">>>[file tail $Input]\tNo blat hit";return ""} set Profile_Base "[string repeat "0" $TailleQuery]" #Espionne ">>Q: $NomQuery -- $TailleQuery -- NbSbjct $NbSbjct" #2- Boucle sur les differents subjects set LesIDs "" set LesIDs_Sel "" set FinalCoverCutOff "70.0" for {set i 1} {$i <=$NbSbjct} {incr i} { #Le recouvrement doit etre maximal de notre Query vers Subject #A l inverse on peut etre plus souple dans le sens S vers Q set LesIDs "" set BId [AskBlast $Input Subject $i] set NbSegment [AskBlast $Input BanqueId $BId NbSegment] set Chromosome [string trim $BId] regsub "chr" $Chromosome "" Chromosome #Espionne ">> $BId -- $NbSegment -- $Chromosome" #2-1 Boucle sur les differents HSPs for {set j 1} {$j <=$NbSegment} {incr j} { #Espionne "\n numsegmt $j" set LesIDs_Tmp "" set DS "" set FS "" set DS_Tmp "" set FS_Tmp "" set Aln "" set AlnQ "" set nbN "0" set Sens "" set SensQ "" set SensS "" set PId "0.0" set PId_Tmp "" set nbId "" set nbTot "" set DQ "" set FQ "" set DQ_Tmp "" set FQ_Tmp "" set TailleHSP "" #2-1-1 Recuperation des debut et fin, PId set DS_Tmp [AskBlast $Input BanqueId $BId Segment $j DS] set FS_Tmp [AskBlast $Input BanqueId $BId Segment $j FS] set PId_Tmp [AskBlast $Input BanqueId $BId Segment $j Identities] #Espionne "DS_Tmp $DS_Tmp FS_Tmp $FS_Tmp PId_Tmp $PId_Tmp" set Aln [AskBlast $Input BanqueId $BId Segment $j AlignLineaire] set Aln [lindex [split $Aln "\n"] 0] regexp {^Query:[ ]+[0-9]+ ([a-z\-]+) [0-9]+} $Aln tmp AlnQ #Espionne "$AlnQ" set nbN [regexp -all -indices {[n]} $AlnQ] #166/201 (83%) regexp {([0-9]+)/([0-9]+) \([0-9]+%\)} $PId_Tmp Tmp nbId nbTot if {$nbId == "" || $nbTot == ""} { #Espionne "Pb avec le PId de $BId" } else { #On ajoute aux bases identiques le nombre de bases N pour palier aux pertes d identite set nbId [expr $nbId + $nbN] set PId [expr ($nbId*100.0)/$nbTot] #Espionne "PId $PId -- $nbId + nbN $nbN / $nbTot" } set Sens [AskBlast $Input BanqueId $BId Segment $j Orientation] scan $Sens "%s / %s" SensQ SensS set DQ_Tmp [AskBlast $Input BanqueId $BId Segment $j DQ] set FQ_Tmp [AskBlast $Input BanqueId $BId Segment $j FQ] if {$DQ_Tmp>$FQ_Tmp} { set FQ $DQ_Tmp set DQ $FQ_Tmp set TailleHSP [expr $DQ_Tmp - $FQ_Tmp + 1] } else { set DQ $DQ_Tmp set FQ $FQ_Tmp set TailleHSP [expr $FQ_Tmp - $DQ_Tmp + 1] } #Espionne "DQ $DQ FQ $FQ $TailleHSP" #Espionne "$BId - $PId - $DS - $FS - $Sens = $SensQ _ $SensS" #2-1-2 Corrections liees au sens sur le chromosome # Attention check a faire pour si on es Minus / Plus auquel cas on intervertit # Ceci est du a un probleme de sens biologique des sequences sondes if {$SensQ=="Plus"} {set SensQ "+"} else {set SensQ "-"} if {$SensS=="Plus"} {set SensS "+"} else {set SensS "-"} if {$SensQ == "-" && $SensS == "+"} { set SensQ "+" set SensS "-" } #Espionne "SensQ $SensQ SensS $SensS" #2-1-3 Inversion des positions selon le sens if {$FS_Tmp > $DS_Tmp} { set FS $FS_Tmp set DS $DS_Tmp } else { set FS $DS_Tmp set DS $FS_Tmp } #Espionne "Test for $DS ($DQ) $FS ($FQ) ($TailleQuery) in $Chromosome $SensS $PId" #2-1-4 Recuperation des informations presentes sur cette localisation # Utilisation a la fois le pourcentage d identite du HSP et du recouvrement # avec les genes mappes sur le genome pour decider si un HSP correspond a ce gene ou non if {$Quoi=="RefSeq"} { set LesIDs_Tmp [LocaliseLesBornesPourRefSeqMoi $DS $FS $Chromosome $SensS $PId $Genome] #Espionne "RefSeq LesIDs_Tmp $LesIDs_Tmp" } elseif {$Quoi=="All"} { set LesIDs_Tmp [LocaliseLesBornesPourRefSeqMoi $DS $FS $Chromosome $SensS $PId $Genome All] #Espionne "All LesIDs_Tmp $LesIDs_Tmp" } else { Espionne "Problem with LocaliseLesBornesPourRefSeq no Quoi (RefSeq ou All)" return "" } if {$LesIDs_Tmp != ""} { #2-1-5 Creation pour chaque ID trouve du recouvrement de la query qui sera ensuite cumulee foreach ID_Tmp $LesIDs_Tmp { #set HSPCover [expr ($TailleHSP * 100.0)/$TailleQuery] set ProfileHSP "" set ProfileHSP "[string repeat "0" [expr $DQ-1]]" append ProfileHSP "[string repeat "1" $TailleHSP]" if {$TailleQuery == $FQ} { append ProfileHSP "[string repeat "0" [expr $TailleQuery-$FQ-1]]" } else { append ProfileHSP "[string repeat "0" [expr $TailleQuery-$FQ]]" } #Espionne "$ProfileHSP" #Espionne "$TailleQuery [string length $ProfileHSP]" #lappend Tab($ID_Tmp,CoverQ) $HSPCover #lappend Tab($ID_Tmp,CoverQ) [list $DQ $FQ] if {! [info exists Tab($ID_Tmp,CoverQ)]} { set Tab($ID_Tmp,CoverQ) "" } lappend Tab($ID_Tmp,CoverQ) $ProfileHSP } set LesIDs [concat $LesIDs $LesIDs_Tmp] } } #2-1-6 Reconstruction pour chaque ID de tous les profils cumules et calcul du recouvrement de la query # Decision final basee sur le FinalCover voir $FinalCoverCutOff foreach UnID [lsort -unique $LesIDs] { set Profile_Tmp "$Profile_Base" set NbTrouve "" #Rq: Ok -- Attention si l addition depasse 9 if {! [info exists Tab($UnID,CoverQ)]} {continue} foreach Profile [set Tab($UnID,CoverQ)] { set Profile_Tmp2 "" foreach a [split $Profile_Tmp ""] b [split $Profile ""] { if {$a=="1"} {append Profile_Tmp2 1; continue} if {$b=="1"} {append Profile_Tmp2 1; continue} if {$b=="0" && $a=="0"} {append Profile_Tmp2 0; continue} } set Profile_Tmp $Profile_Tmp2 } set NbTrouve [regexp -all -indices {[1-9]} $Profile_Tmp] set FinalCover [expr ($NbTrouve*100.0)/$TailleQuery] #Espionne "$Profile_Tmp" #Espionne "$UnID -- NbTrouve: $NbTrouve / $TailleQuery = $FinalCover" if {$FinalCover > $FinalCoverCutOff} {lappend LesIDs_Sel $UnID} } } AskBlast unsetfile $Input set LesIDs_Sel [lsort -unique $LesIDs_Sel] if { $LesIDs_Sel == ""} { set LesIDs_Sel "No IDs found" } Espionne ">>>$NomQuery\t$LesIDs_Sel" return "$LesIDs_Sel" } proc IdentifieLesZonesUCSCPourTous {DirIn} { set total 0; set identique 0; set diff 0; set identiqueAll 0; set diffAll 0 set LesPABs [glob -nocomplain -directory "$DirIn" -tails "*"] foreach PAB $LesPABs { incr total Espionne "" set LesIds [IdentifieLesZonesUCSC "$DirIn/$PAB"] set LesIdsAll [IdentifieLesZonesUCSC "$DirIn/$PAB" All] Espionne "LesIds $LesIds" Espionne "LesIdsAll $LesIdsAll" set AccessExistant [AccessEvi $PAB] Espionne "AccessExistant $AccessExistant" set Gn [ExtraitInfo $PAB "ValiGN"] set AliasGnRna [ExtraitInfo $PAB "AliasGnRna"] set Des [ExtraitInfo $PAB "ValiDE"] Espionne "Gn $Gn" Espionne "AliasGnRna $AliasGnRna" Espionne "Des $Des" set DesUcsc [kgXrefUcscMouse $AccessExistant Des] set GnUcsc [kgXrefUcscMouse $AccessExistant Gn] Espionne "GnUcsc $GnUcsc" Espionne "DesUcsc $DesUcsc" set IdAccProt [ExtraitInfo $PAB "IdAccProt"] set LesProt [split $IdAccProt " "] set AccProt [lindex $LesProt 1] set Texte ""; set Texte2 "" if {$AccProt!=""} { set Commande "getz \"\\\[protein-acc:$AccProt\\\]\" \-vf gen" set Texte [eval exec $Commande] set Commande2 "getz \"\\\[protein-acc:$AccProt\\\]\" \-vf des" set Texte2 [eval exec $Commande2] } set AliasGnProt [ExtraitInfo $PAB "AliasGnProt"] Espionne "GnProt $Texte" Espionne "AliasGnProt $AliasGnProt" Espionne "DesProt $Texte2" if {[regexp $AccessExistant $LesIds]} { incr identique Espionne "c'estlememe" } else { Espionne "attention" incr diff } if {[regexp $AccessExistant $LesIdsAll]} { incr identiqueAll Espionne "c'estlememeAll" } else { Espionne "attentionAll" incr diffAll } } Espionne "total $total identique $identique diff $diff identiqueAll $identiqueAll diffAll $diffAll" return "" } proc IdentifieLesZones_UCSC {Input} { Wup "Identifie a partir d un blast ou d un blat les zones d identite importante sur le genome UCSC" Wup "Fait le lien avec les annotations disponibles et determine la ou les annotations pertinentes" Wup "Utilise 3 cutoff, PId du HSP, Cover du HSP avec un gene, Cover des HSP pour un gene" #0- Recuperation des infos diverses #0-1 Nom de la puce set GoodChip "" foreach AffyChip [Affymetrix_Chips] { if {[regexp -nocase $AffyChip $Input]} {set GoodChip $AffyChip} } #0-2 Nom du genome set Genome "" if { [regexp "^HG" $GoodChip]} { set Genome "human" } elseif {[regexp "^MG" $GoodChip]} { set Genome "mouse" } if {$Genome==""} {return ""} #1- Chargement des infos du Blast ou du Blat set TailleQuery [AskBlast $Input Taille] set NomQuery [AskBlast $Input Query] set NbSbjct [AskBlast $Input NbSubject] if {$NbSbjct=="0" || $NbSbjct==""} {Espionne ">>>[file tail $Input]\tNo blat hit\t[InterrogeLesInfosAffymetrix $GoodChip $NomQuery RefSeq]\t[InterrogeLesInfosAffymetrix $GoodChip $NomQuery Description]";return ""} set Profile_Base "[string repeat "0" $TailleQuery]" Espionne ">>Q: $NomQuery -- $TailleQuery -- NbSbjct $NbSbjct" #2- Boucle sur les differents subjects set LesIDs "" set LesIDs_Sel "" set FinalCoverCutOff "70.0" for {set i 1} {$i <=$NbSbjct} {incr i} { #Le recouvrement doit etre maximal de notre Query vers Subject #A l inverse on peut etre plus souple dans le sens S vers Q set LesIDs "" set BId [AskBlast $Input Subject $i] set NbSegment [AskBlast $Input BanqueId $BId NbSegment] set Chromosome [string trim $BId] regsub "chr" $Chromosome "" Chromosome #Espionne ">> $BId -- $NbSegment -- $Chromosome" #2-1 Boucle sur les differents HSPs for {set j 1} {$j <=$NbSegment} {incr j} { set LesIDs_Tmp "" set DS "" set FS "" set DS_Tmp "" set FS_Tmp "" set Aln "" set AlnQ "" set nbN "0" set Sens "" set SensQ "" set SensS "" set PId "0.0" set PId_Tmp "" set nbId "" set nbTot "" set DQ "" set FQ "" set DQ_Tmp "" set FQ_Tmp "" set TailleHSP "" #2-1-1 Recuperation des debut et fin, PId set DS_Tmp [AskBlast $Input BanqueId $BId Segment $j DS] set FS_Tmp [AskBlast $Input BanqueId $BId Segment $j FS] set PId_Tmp [AskBlast $Input BanqueId $BId Segment $j Identities] set Aln [AskBlast $Input BanqueId $BId Segment $j AlignLineaire] set Aln [lindex [split $Aln "\n"] 0] #Espionne "$Aln" regexp {^Query:[ ]+[0-9]+ ([a-z\-]+) [0-9]+} $Aln tmp AlnQ set nbN [regexp -all -indices {[n]} $AlnQ] #166/201 (83%) regexp {([0-9]+)/([0-9]+) \([0-9]+%\)} $PId_Tmp Tmp nbId nbTot if {$nbId == "" || $nbTot == ""} { Espionne "Pb avec le PId de $BId" } else { #On ajoute aux bases identiques le nombre de bases N pour palier aux pertes d identite set nbId [expr $nbId + $nbN] set PId [expr ($nbId*100.0)/$nbTot] #Espionne "$PId -- $nbId + $nbN / $nbTot" } set Sens [AskBlast $Input BanqueId $BId Segment $j Orientation] scan $Sens "%s / %s" SensQ SensS set DQ_Tmp [AskBlast $Input BanqueId $BId Segment $j DQ] set FQ_Tmp [AskBlast $Input BanqueId $BId Segment $j FQ] if {$DQ_Tmp>$FQ_Tmp} { set FQ $DQ_Tmp set DQ $FQ_Tmp set TailleHSP [expr $DQ_Tmp - $FQ_Tmp + 1] } else { set DQ $DQ_Tmp set FQ $FQ_Tmp set TailleHSP [expr $FQ_Tmp - $DQ_Tmp + 1] } #Espionne "$BId - $PId - $DS - $FS - $Sens = $SensQ _ $SensS" #2-1-2 Corrections liees au sens sur le chromosome # Attention check a faire pour si on es Minus / Plus auquel cas on intervertit # Ceci est du a un probleme de sens biologique des sequences sondes if {$SensQ=="Plus"} {set SensQ "+"} else {set SensQ "-"} if {$SensS=="Plus"} {set SensS "+"} else {set SensS "-"} if {$SensQ == "-" && $SensS == "+"} { set SensQ "+" set SensS "-" } #2-1-3 Inversion des positions selon le sens if {$FS_Tmp > $DS_Tmp} { set FS $FS_Tmp set DS $DS_Tmp } else { set FS $DS_Tmp set DS $FS_Tmp } #Espionne "Test for $DS ($DQ) $FS ($FQ) ($TailleQuery) in $Chromosome $SensS $PId" #2-1-4 Recuperation des informations presentes sur cette localisation # Utilisation a la fois le pourcentage d identite du HSP et du recouvrement # avec les genes mappes sur le genome pour decider si un HSP correspond a ce gene ou non set LesIDs_Tmp [LocaliseLesBornesPourRefSeq $DS $FS $Chromosome $SensS $PId $Genome] #set LesIDs_Tmp [LocaliseLesBornesPourRefSeq $DS $FS $Chromosome $SensS $PId] if {$LesIDs_Tmp != ""} { #2-1-5 Creation pour chaque ID trouve du recouvrement de la query qui sera ensuite cumulee foreach ID_Tmp $LesIDs_Tmp { #set HSPCover [expr ($TailleHSP * 100.0)/$TailleQuery] set ProfileHSP "" set ProfileHSP "[string repeat "0" [expr $DQ-1]]" append ProfileHSP "[string repeat "1" $TailleHSP]" if {$TailleQuery == $FQ} { append ProfileHSP "[string repeat "0" [expr $TailleQuery-$FQ-1]]" } else { append ProfileHSP "[string repeat "0" [expr $TailleQuery-$FQ]]" } #Espionne "$ProfileHSP" #Espionne "$TailleQuery [string length $ProfileHSP]" #lappend Tab($ID_Tmp,CoverQ) $HSPCover #lappend Tab($ID_Tmp,CoverQ) [list $DQ $FQ] if {! [info exists Tab($ID_Tmp,CoverQ)]} { set Tab($ID_Tmp,CoverQ) "" } lappend Tab($ID_Tmp,CoverQ) $ProfileHSP } set LesIDs [concat $LesIDs $LesIDs_Tmp] } } #2-1-6 Reconstruction pour chaque ID de tous les profils cumules et calcul du recouvrement de la query # Decision final basee sur le FinalCover voir $FinalCoverCutOff foreach UnID [lsort -unique $LesIDs] { set Profile_Tmp "$Profile_Base" set NbTrouve "" #Rq: Ok -- Attention si l addition depasse 9 if {! [info exists Tab($UnID,CoverQ)]} {continue} foreach Profile [set Tab($UnID,CoverQ)] { set Profile_Tmp2 "" foreach a [split $Profile_Tmp ""] b [split $Profile ""] { if {$a=="1"} {append Profile_Tmp2 1; continue} if {$b=="1"} {append Profile_Tmp2 1; continue} if {$b=="0" && $a=="0"} {append Profile_Tmp2 0; continue} } set Profile_Tmp $Profile_Tmp2 } set NbTrouve [regexp -all -indices {[1-9]} $Profile_Tmp] set FinalCover [expr ($NbTrouve*100.0)/$TailleQuery] Espionne "$Profile_Tmp" Espionne "$UnID -- NbTrouve: $NbTrouve / $TailleQuery = $FinalCover" if {$FinalCover > $FinalCoverCutOff} {lappend LesIDs_Sel $UnID} } } AskBlast unsetfile $Input set LesIDs_Sel [lsort -unique $LesIDs_Sel] if { $LesIDs_Sel == ""} { set LesIDs_Sel "No IDs found" } Espionne ">>>$NomQuery\t$LesIDs_Sel\t[InterrogeLesInfosAffymetrix $GoodChip $NomQuery RefSeq]\t[InterrogeLesInfosAffymetrix $GoodChip $NomQuery Description]" return "$LesIDs_Sel" } proc IdentiteEtSimilariteDansMSF {FichierMSF {OrgaDeReference ""}} { global RepertoireDuGenome global MatriceDeSimilarite global NotreOS global NotreOrga if { ! [info exists MatriceDeSimilarite] } { set OnAttendPP 1 set FichierSimilariteDefaut "[GscopeEtc]/gscope_similarite" set FichierSimilarite "[RepertoireDuGenome]/fiches/similarite" if { ! [file exists $FichierSimilarite]} { set FichierSimilarite $FichierSimilariteDefaut } foreach Ligne [LesLignesDuFichier $FichierSimilarite] { if { ! [regexp -nocase {[0-9a-z]} $Ligne]} { continue } if {[regexp {\.\.} $Ligne]} { regsub {\.\.} $Ligne "" Ligne while {[regexp " " $Ligne ]} { regsub -all " " $Ligne " " Ligne } set LesAAs [split [string trim $Ligne] " "] set LesAAsRestants $LesAAs set OnAttendPP 0 continue } if {$OnAttendPP} { continue } set Ligne [string toupper $Ligne] set AACourant [lindex $LesAAsRestants 0] while {[regexp " " $Ligne ]} { regsub -all " " $Ligne " " Ligne } set nRestants [llength $LesAAsRestants] set LesScores [lrange [split [string trim $Ligne] " "] 0 [incr nRestants -1]] foreach AA $LesAAsRestants Score $LesScores { set MatriceDeSimilarite($AACourant,$AA) $Score set MatriceDeSimilarite($AA,$AACourant) $Score } set LesAAsRestants [lrange $LesAAsRestants 1 end] } foreach AA $LesAAs { set Ligne "" foreach BB $LesAAs { append Ligne " [format "%4.1f" [set MatriceDeSimilarite($AA,$BB)]]" } } } if {$OrgaDeReference==""} { set OrgaDeReference $NotreOrga } set Nom [file tail $FichierMSF] set NombreDeSequences [DecortiqueUnMSF $FichierMSF LesSequencesDansLOrdre Sequences] if {$NombreDeSequences<2} { return {} } set MaxLongueurSequence [string length [set Sequences([lindex $LesSequencesDansLOrdre 0])]] if {$OrgaDeReference == "QueryInFirstPlace"} { set SeqPAB $Sequences([lindex $LesSequencesDansLOrdre 0]) } elseif {$OrgaDeReference == $NotreOrga} { if { ! [info exists Sequences($Nom)]} { return {} } set SeqPAB [set Sequences($Nom)] } else { set iOrgaRef [lsearch -regexp $LesSequencesDansLOrdre $OrgaDeReference] if {$iOrgaRef < 0} { return {} } set SeqPAB [set Sequences([lindex $LesSequencesDansLOrdre $iOrgaRef])] } set lSeqPAB [string length $SeqPAB] foreach NomSeq $LesSequencesDansLOrdre { set Seq [string toupper [set Sequences($NomSeq)]] set lSeq [string length $Seq] set CumulScore 0 set nCumulScore 0 set CumulId 0 set nCumulId 0 set Commun "" set LongVraiePAB 0 set LongVraieSeq 0 set nLesDeuxSansPoints 0 set nAuMoinsUnSansPoint 0 set PS_LongVraiePAB 0 set PS_LongVraieSeq 0 set PS_nLesDeuxSansPoints 0 set PS_nAuMoinsUnSansPoint 0 for {set i 0} {$i<$lSeqPAB} {incr i} { if {$i >= $lSeq} { break } set AA [string range $SeqPAB $i $i] set BB [string range $Seq $i $i] if { $AA!="." } { incr LongVraiePAB } if { $BB!="." } { incr LongVraieSeq } if { $AA!="." && $BB!="." } { incr nLesDeuxSansPoints } if { $AA!="." || $BB!="." } { incr nAuMoinsUnSansPoint } if { $AA!="." && $AA==$BB } { incr CumulId } if {[info exists MatriceDeSimilarite($AA,$BB)]} { if { $AA!="." } { incr PS_LongVraiePAB } if { $BB!="." } { incr PS_LongVraieSeq } if { $AA!="." && $BB!="." } { incr PS_nLesDeuxSansPoints } if { $AA!="." || $BB!="." } { incr PS_nAuMoinsUnSansPoint } set Score [set MatriceDeSimilarite($AA,$BB)] set CumulScore [expr $CumulScore + $Score] } } set PI($NomSeq) [expr $CumulId*100/[Maxi 1 $nLesDeuxSansPoints]] # set PI($NomSeq) [expr $CumulId*100/[Maxi 1 $nAuMoinsUnSansPoint] # set PI($NomSeq) [expr $CumulId*100/[Maxi 1 [Mini $LongVraiePAB $LongVraieSeq]]] set PS($NomSeq) [expr $CumulScore*1.0/[Maxi 1 $PS_nLesDeuxSansPoints]] # set PS($NomSeq) [expr $CumulScore*1.0/[Maxi 1 $PS_nAuMoinsUnSansPoint] # set PS($NomSeq) [expr $CumulScore*1.0/[Maxi 1 [Mini $PS_LongVraiePAB $PS_LongVraieSeq]]] lappend LesPIs "$NomSeq [format "%6.3f" [set PI($NomSeq)]]" lappend LesPSs "$NomSeq [format "%6.3f" [set PS($NomSeq)]]" lappend LesPIPSs "$NomSeq [format "%6.3f" [set PI($NomSeq)]] [format "%6.3f" [set PS($NomSeq)]]" } Wup "Choisir le bon .................!!!! " return $LesPIPSs return $LesPIs return $LesPSs } proc IdentityProfileGUI {} { global LNDG SDG LNOrdali ListeDesPiliersDuGroupe PrI ScoreMeth ListeTypesDeFeatures TabSF LongueurTotale Sequences PrI set ret 0 set w .prmip toplevel $w wm title $w "Identity Profile" wm iconname $w "Profile" wm protocol $w WM_DELETE_WINDOW KillParLaCroix grid columnconfig $w all -weight 1 grid rowconfig $w all -weight 1 set wf $w.f frame $wf grid $wf -row 0 -column 0 label $wf.lb -text "Identity Profile :" -font "Helvetica 14 bold" set ws $wf.fs frame $ws label $ws.lbw -text "Sliding window : " set Lgw [list 10 20 50 100] ttk::combobox $ws.cbw -state readonly -background white -width 6 -values $Lgw -textvariable PrI(win) $ws.cbw current 0 label $ws.lbs -text "Jump step size : " set Lgs [list 1 5 10 20 50] ttk::combobox $ws.cbs -state readonly -background white -width 6 -values $Lgs -textvariable PrI(jump) $ws.cbs current 0 label $ws.lbg -text "Groups : " set Lgr [list "All" "Global" {*}[lrange LNDG 1 end]] ttk::combobox $ws.cbg -state readonly -background white -width 10 -values $Lgr -textvariable PrI(grp) $ws.cbg current 0 set PrI(CSV) 0 checkbutton $ws.cks -text "Save profile data as CSV" -variable PrI(CSV) -relief flat -highlightthickness 0 -onvalue 1 -offvalue 0 grid $ws.lbw -row 0 -column 0 -sticky e -pady {10 2} grid $ws.cbw -row 0 -column 1 -sticky w -pady {10 2} grid $ws.lbs -row 1 -column 0 -sticky e -pady 2 grid $ws.cbs -row 1 -column 1 -sticky w -pady 2 grid $ws.lbg -row 2 -column 0 -sticky e -pady 2 grid $ws.cbg -row 2 -column 1 -sticky w -pady 2 grid $ws.cks -row 3 -column 0 -columnspan 2 -sticky w -pady {5 10} grid columnconfig $ws all -weight 1 set wb $wf.fb frame $wb button $wb.bok -text " OK " -background green1 -command {set PrI(ret) 1 ; destroy .prmip} button $wb.bdis -text "Dismiss" -background red -command {set PrI(ret) 0 ; destroy .prmip} grid $wb.bdis -row 0 -column 0 -sticky w grid $wb.bok -row 0 -column 1 -sticky e grid columnconfig $wb all -weight 1 grid $wf.lb -row 0 -column 0 -padx 10 -pady 10 grid $ws -row 1 -column 0 -padx 10 -pady {5 10} grid $wb -row 2 -column 0 -padx 10 -pady 10 -sticky ew FenetreAuCentre $w tkwait window $w update idletasks if {! $PrI(ret)} {return} LanceIdentityProfile if {[QuelMode] eq "feature"} { DetruitBoutonsOrdali update foreach f [grid slaves $::FrmBouton] { puts "f= $f" foreach s [grid slaves $f] { puts " s= $s" foreach q [grid slaves $s] { puts " q= $q" } } } AfficheBoutonsFeatures } return } proc IemeLigneDuFichier {Fichier i} { return [lindex [LesLignesDuFichier $Fichier] [incr i -1]] } proc IlFautVoir {cmd} { global VersViewer global COmac global Cras # O macro file if {$VersViewer == "VersOmac"} { if {[regexp "DebutDb" $cmd]} { global LCOTmp global NomDb global NomMc set LCOTmp {} set NomDb [string trim [string range $cmd 8 end]] set NomMc "" return } if {[regexp "DebutMc" $cmd]} { global LCOTmp global NomMc global NomDb set LCOTmp {} set NomMc [string trim [string range $cmd 8 end]] set NomDb "" return } if {$cmd == "FinDbMc"} { global COmac global LCOTmp global NomDb global NomMc set nl [llength $LCOTmp] if {$NomDb == ""} { set nom "@$NomMc" } else { set nom "$NomDb" } puts $COmac "$nom T $nl 50" foreach c $LCOTmp { puts $COmac $c } unset LCOTmp set NomDb "" set NomMc "" return } if {$cmd == "FinOMac"} { close $COmac } else { global LCOTmp if {![info exists LCOTmp]} { puts $COmac $cmd } else { lappend LCOTmp $cmd } } return } $VersViewer $cmd return } proc Illumine {Mot Fenetre} { if {[PourWscope]} { return } if {[regexp ".list$" $Fenetre]} { set FenetreListBox $Fenetre } else { set FenetreListBox $Fenetre.frame.list } set i 0 set AttendDebutDeSequence 1 foreach Ligne [$FenetreListBox get 0 end] { if { [regexp $Mot $Ligne] } { if {$AttendDebutDeSequence && [regexp "$Mot\[ \.\]+\[A-Z\]" $Ligne]} { set Position $i set AttendDebutDeSequence 0 } $FenetreListBox selection set $i $FenetreListBox see $i } incr i } if {[info exists Position]} { set Position [Maxi 0 [expr $Position-20]] $FenetreListBox see $Position } } proc IllumineLaListe {Liste Fenetre} { set BonneListe {} foreach Element $Liste { regsub -all {\|} $Element "\\|" Element lappend BonneListe $Element } set Mot [join $BonneListe "|"] Illumine $Mot $Fenetre } proc IllumineLeGroupeDe {Nom Fenetre {Ask ""} {Maniere ""}} { if {$Ask==""} { set Ask "Secator" } if {$Ask=="Ask"} { set Ask [ChoixParmi [list "Secator" "Dpc" "Oumy" "SecatorSelect" "DpcSelect" "OumySelect"]] } if {$Ask==""} { return "" } if {[regexp "Select" $Ask]} { set Select 1 regsub "Select" $Ask "" Ask } else { set Select 0 } foreach Access [Groupe$Ask $Nom $Nom "In"] { Illumine $Access $Fenetre } if { ! $Select} { return $Fenetre } global PagePropre set Page [set PagePropre($Fenetre)] return [AfficheRognure $Page [selection get] "GrandeLargeur$Maniere" "${Ask}_group_selection_of/$Nom"] } proc IllumineSuivantLesGroupes {LesAGs Fenetre} { set OldG Bidon set Lumiere 0 foreach Ligne $LesAGs { scan $Ligne "%s %s" A G if {$OldG!=$G} { set Lumiere [expr ! $Lumiere] } set OldG $G if {$Lumiere} { Illumine $A $Fenetre } } } proc IllustreArborescenceDeLOntology {{LesGO ""} {LesTypes ""}} { global PosYSurArbreGO if {$LesTypes == "All"} {set LesTypes [Onto LesTypes]} if {$LesGO == "All"} { set LesGO {} foreach Type $LesTypes { foreach GO [Onto $Type LesGO] {lappend LesGO $GO} } } set HauteurFenetre [expr [winfo screenheight .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set BordX [expr $LargeurFenetre * 1.0 / 20] set BordY [expr $HauteurFenetre * 1.0 / 20] set EcartX 30 set EcartY 15 set PosYSurArbreGO $BordY set Police "arial 10" set TabGOSelectionnes(LesGO) {} set TabGOSelectionnes(LesTypes) $LesTypes foreach Type $LesTypes {set TabGOSelectionnes($Type) 1} foreach GO $LesGO { set Type [Onto $GO Type] if {[info exists TabGOSelectionnes($GO)]} {continue} lappend TabGOSelectionnes(LesGO) $GO set TabGOSelectionnes($GO) 1 set TabGOSelectionnes($GO,Color) "darkgreen" foreach Ancetre [TousLesAncetresOntologiques $Type $GO] { if {[info exists TabGOSelectionnes($Ancetre)]} {continue} lappend TabGOSelectionnes(LesGO) $Ancetre set TabGOSelectionnes($Ancetre) 1 } } set LesInfos [LesInfosDesGOSurLArborescence "GO:0003673" $BordX "black" {} TabGOSelectionnes] set LargeurMax $LargeurFenetre set HauteurMax [expr 2 * $BordY + [llength $LesInfos] * $EcartY] if {$HauteurMax < $HauteurFenetre} {set HauteurMax $HauteurFenetre} set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY] foreach LInfo $LesInfos { set GO [lindex $LInfo 0] set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set X [lindex $LInfo 1] set Y [lindex $LInfo 2] if {[info exists TabGOSelectionnes($GO,Color)]} { set Color [set TabGOSelectionnes($GO,Color)] set PoliceGO "$Police bold" } else { set PoliceGO $Police set Color [lindex $LInfo 3] } $K create text $X $Y -text "$GO : $Def" -anchor w -fill $Color -font $PoliceGO set TabDejaVu($X,$Y) 1 if {$X <= $BordX} {continue} set OldX [expr $X - $EcartX] set OldY [expr $Y - $EcartY] while {![info exists TabDejaVu($OldX,$OldY)]} { if {$OldY <= $BordY} {break} set OldY [expr $OldY - $EcartY] } $K create line $X $Y $OldX $Y -fill $Color $K create line $OldX $Y $OldX $OldY -fill $Color } return } proc IllustreArbreTaxonsSelectionnes {} { set LesTaxonsInteressants [MorceauxChoisis [lsort [O2C2O LesCategories]]] IllustreLArbreTaxonomique $LesTaxonsInteressants return } proc IllustreBACCGH {Cas {LesPos ""} {LesNoms ""}} { # liste des cas if {$Cas!="meta" && $Cas!="nometa"} { set LesCas $Cas Espionne $LesCas } if {$Cas=="meta"} { set LesCas {BAC806 BAC807 BAC810 BAC817 BAC818 BAC819 BAC826 BAC827} } elseif {$Cas=="nometa"} {set LesCas {BAC808 BAC809 BAC811 BAC812 BAC814 BAC815 BAC816 BAC820 BAC821 BAC822 BAC823 BAC825}} set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoite 10 set EcartEntreRepresentations 100 #en fct du nb de plots- plus grande val- apres ascenseur. set HauteurMax [expr $BordY + [expr [llength $LesCas]-1]*$HauteurBoite + [llength $LesCas]*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set PosXMin $BordX set PosYMin [expr $HauteurMax - $BordY] set PosYMax [expr $HauteurMax - $BordY] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleGenome 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleGenome [expr ($TailleGenome*1.0) + ($TailleChromo*1.0)] } set Facteur [expr ($LargeurAffichage*1.0)/ ($TailleGenome*1.0)] # pour chaque fichier BAC foreach BAC $LesCas { Espionne $BAC if {$Cas!="meta" && $Cas!="nometa"} { set FichierCourbeBAC $BAC } else { set FichierCourbeBAC "[RepertoireDuGenome]/PRIMA_CGH/$BAC" } set NomFichierBAC [file tail $FichierCourbeBAC] # HR: #set VMax 3.12 #set VMin -1.29 # meta: set VMax 2.74 set VMin -2.85 set VMaxf $VMax set VMinf $VMin set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] if {[info exists TabC]} {unset TabC} ChargeFichierCourbeCGH TabC $FichierCourbeBAC $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set DebutCentro [expr $DebutCentro*1.0 + $TailleChroCum*1.0] set FinCentro [expr $FinCentro*1.0 + $TailleChroCum*1.0] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabC($FichierCourbeBAC,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbeBAC,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbeBAC,Chromosome,$Chromosome,$Pos)] { set PosMid [Base10 [lindex $LInfo 1]] #tenir compte des chros precedents set PosMid [expr $PosMid*1.0 + $TailleChroCum*1.0] set Val [lindex $LInfo 2] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$DebutCentro && $PosMid<=$FinCentro} { # x1 est avant le debut du centro et x2 dedans set X1 $PosMid set Y1 $Value continue } if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { # aucun point dans le centromere set X1 $PosMid set Y1 $Value } if {($X1>=$DebutCentro && $X1<=$FinCentro) && ($PosMid>=$DebutCentro && $PosMid<=$FinCentro)} { # x1 et x2 sont dans le centromere set X1 $PosMid set Y1 $Value continue } if {$X1<=$FinCentro && $PosMid>=$FinCentro && $X1>=$DebutCentro} { # x1 est avant la fin du centro et x2 apres le centromere set X1 $PosMid set Y1 $Value } set PosX1 [expr $BordX + ($X1*$Facteur*1.0)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY*1.0) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur*1.0)] set PosY2 [expr $PosYMin + ($Value*$FacteurY*1.0) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -0 #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $LesCas "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierBAC CGH plot " -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr ($TailleChroCum*1.0) + ($TailleChromo*1.0)] } set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] } #### fin boucle ### LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "Chromosome" <1> "ac_ChromosomeSelectionneCGH $K" regsub {\.canvas} $K "" w #set B [BoutonneLaFenetre $w "WithMapViewer/WithoutMapViewer\nOnlyBestLoc/All"] #bind $B <1> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] WithMapViewer" #bind $B <2> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] WithoutMapViewer" #set C [BoutonneLaFenetre $w "Histogramm"] #bind $C <1> "ChoixHistogramme" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc IllustreBACCGHseg {Cas {LesPos ""} {LesNoms ""}} { if {$Cas!="" && $Cas!="null"} { set LesCas $Cas Espionne $LesCas } set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoite 10 set EcartEntreRepresentations 100 #en fct du nb de plots- plus grande val- apres ascenseur. set HauteurMax [expr $BordY + [expr [llength $LesCas]-1]*$HauteurBoite + [llength $LesCas]*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set PosYMin [expr $HauteurMax - $BordY] set PosYMax [expr $HauteurMax - $BordY] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleGenome 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleGenome [expr ($TailleGenome*1.0) + ($TailleChromo*1.0)] } # Attention au *1.0 !!! indispensable pour windows! (sinon taille du genome, negative! donc facteur negatif) set Facteur [expr ($LargeurAffichage*1.0)/($TailleGenome*1.0)] # pour chaque fichier BAC foreach BAC $LesCas { Espionne $BAC set FichierCourbeBACSeg $BAC set NomFichierBACSeg [file tail $FichierCourbeBACSeg] # HR: set VMax 1.76 set VMin -0.89 # meta: #set VMax 1.93 #set VMin -2.23 set VMaxf $VMax set VMinf $VMin set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierSEG TabO $FichierCourbeBACSeg $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabO($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabO($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabO($FichierCourbeBACSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [expr [lindex $LInfo 3]+ $TailleChroCum] set PosSup [expr [lindex $LInfo 4]+ $TailleChroCum] set Val [lindex $LInfo 6] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] #set AfficheVMin set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $LesCas "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierBACSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr $TailleChroCum + $TailleChromo] } set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] } LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" #$K bind "Chromosome" <1> "ac_ChromosomeSelectionneSEG $K" $K bind "Chromosome" <1> "ac_ChromosomeSelectionneCGH_seg $K" regsub {\.canvas} $K "" w bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc IllustreCGH {{LesPos ""} {LesNoms ""} {w ""}} { ##################### Compulsory files ############################### set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" if {![file exists $FichierPosCentro] || ![file exists $FichierChros]} { Espionne "Either \"PosCentromeres\" or \"chromInfo\" or both files does/do not exist" return } set FichierReadme "[RepertoireDuGenome]/CGHviewer.readme" if {[file exists $FichierReadme]} { set Contenu [ContenuDuFichier $FichierReadme] ac_AfficheVariable "$Contenu" "" "CGHviewer.readme" } else { FaireLire "! WARNING !\n \"CGHviewer.readme\" does not exist" } ###################### Welcome Canva ####################################### set w ".canva" if {[winfo exists $w]} { wm deiconify $w raise $w return "" } else { toplevel $w } wm geometry $w +300+100 wm title $w "Welcome" wm resizable $w true false wm protocol $w WM_DELETE_WINDOW "destroy $w" set FParameters "$w.fparameters" frame $FParameters -relief "groove" pack $FParameters -fill both -expand no set Nom "Bienvenue" set FSetup "$FParameters.fsetup${Nom}" set LSetup "$FSetup.lsetup" frame $FSetup -background "#808080" -relief "groove" -padx "0" pack $FSetup -side top -fill both -expand no label $LSetup -background "#808FFF" -relief "groove" -text "Welcome to CGHviewer!" -font "Courier 20" -width "24" -anchor "center" pack $LSetup -side left -fill both -expand no ###################### Retrieve the CGH data ############################### ## 1) file BAC set n 0 if {[OuiOuNon "Do you have BAC-CGH-array data?"]} { if {[OuiOuNon "Is your file a tab-delimited text file?"]} { FaireLire "Please, Choose your BAC CGH-array file. Thank you!" set FichierCourbeBAC [tk_getOpenFile -title "BAC CGH-array file to open"] set NomFichierCourbeBAC [file tail $FichierCourbeBAC] regsub "$NomFichierCourbeBAC" $FichierCourbeBAC "" DirFileToOpen if {[regexp "\:" $DirFileToOpen]} {regsub {[A-Z]\:} $DirFileToOpen "" DirFileToOpen} set DirFileToOpen "\"$DirFileToOpen\"" Espionne $DirFileToOpen # ds FichierCourbeBAC y a le chemin du fichier (FaireLire $FichierCourbeBAC) # tests verifs # si fichier deja ok (le mien) passer les controles foreach Ligne [LesLignesDuFichier $FichierCourbeBAC] { incr n set Ligne [string trim $Ligne] if {$Ligne==""} {continue} if {[regexp "^HS" $Ligne]} { set RepFichierLocCGHBAC "PRIMA_CGH" set FichierLocCGHBAC "[RepertoireDuGenome]/PRIMA_CGH/CGH_BAC_Localisation" break } elseif {[regexp -nocase "LOG" $Ligne]} { set Num $n FaireLire "The line $n contains the column titles" # Chro(HS) Deb Fin (PosMid) Log2Ratio (CopyNb) Nom Id (Other) # la premiere ligne contiendrait les titres de colonnes si excel-> tab-delimited file FaireLire "Which column contains the chromosome number?" set nChro [Entre 8] FaireLire "Which column contains the chromosome start position?" set nStart [Entre 9] FaireLire "Which column contains the chromosome end position?" set nEnd [Entre 10] FaireLire "Which column contains the logratio?" set nLogRatio [Entre 16] FaireLire "Which column contains the BAC ID?" set nID [Entre 6] } if {[info exists Num]} { if {$n>$Num} { set LesElts [split $Ligne "\t"] set Chro [lindex $LesElts [expr $nChro -1]] if {[regexp {^[a-z]+} $Chro]} {set Chro [string toupper $Chro]} elseif {$Chro<10} {set Chro "0$Chro"} set Chromosome "HS$Chro" set Start [lindex $LesElts [expr $nStart -1]] set End [lindex $LesElts [expr $nEnd -1]] set PosMid [expr $Start + (($End*1.0 - $Start*1.0)/2)] set LogRatio [lindex $LesElts [expr $nLogRatio -1]] if {[regexp "," $LogRatio]} {regsub "," $LogRatio "." LogRatio} if {$LogRatio=="#N/A"} {set LogRatio ""} set ID [lindex $LesElts [expr $nID -1]] lappend LeFichierCourbeBAC "$Chromosome\t$PosMid\t$LogRatio" lappend LeFichierBACLocalisation "$Chromosome\t$Start\t$End\t$ID" } } } if {[info exists LeFichierCourbeBAC] && [info exists LeFichierBACLocalisation]} { set LeFichierCourbeBAC [lsort -command CompareChroDebut $LeFichierCourbeBAC] #set LeFichierCourbeBAC [lsort -increasing $LeFichierCourbeBAC] set LeFichierBACLocalisation [lsort -command CompareChroDebut $LeFichierBACLocalisation] set LeFichierBACLocalisation [lsort -command CompareChroFin $LeFichierBACLocalisation] #set LeFichierBACLocalisation [lsort -increasing $LeFichierBACLocalisation] set RepFichierCrees "[RepertoireDuGenome]/FichiersCrees" if {![file exists $RepFichierCrees]} {File mkdir $RepFichierCrees} set FichierCourbeBAC "$RepFichierCrees/$NomFichierCourbeBAC" set RepFichierLocCGHBAC "FichiersCrees" set FichierLocCGHBAC "$RepFichierCrees/CGH_BAC_Localisation" if {![file exists $FichierLocCGHBAC]} { SauveLesLignes $LeFichierBACLocalisation dans $FichierLocCGHBAC } SauveLesLignes $LeFichierCourbeBAC dans $FichierCourbeBAC } } else { FaireLire "Please, if you have a MS Excel file, save it as a tab-delimited text file.\nThank you" exit } set BACdata 1 } else { Espionne "No BAC data" set BACdata 0 set FichierCourbeBAC "null" set RepFichierLocCGHBAC "null" } if {[info exists Num]} {unset Num} ## 2) File oligo set n 0 if {[OuiOuNon "Do you have Oligo-CGH-array data?"]} { if {[OuiOuNon "Is your file a tab-delimited text file?"]} { FaireLire "Please, Choose your Oligo CGH-array file. Thank you!" set FichierCourbeOligo [tk_getOpenFile -title "Oligo CGH-array file to open"] set NomFichierCourbeOligo [file tail $FichierCourbeOligo] regsub "$NomFichierCourbeOligo" $FichierCourbeOligo "" DirFileToOpen if {[regexp "\:" $DirFileToOpen]} {regsub {[A-Z]\:} $DirFileToOpen "" DirFileToOpen} set DirFileToOpen "\"$DirFileToOpen\"" Espionne $DirFileToOpen # verifs data # si fichier deja ok (le mien) passer les controles foreach Ligne [LesLignesDuFichier $FichierCourbeOligo] { incr n set Ligne [string trim $Ligne] if {$Ligne==""} {continue} if {[regexp "^HS" $Ligne]} { set RepFichierLocCGHOligo "PRIMA_CGH" set FichierLocCGHOligo "[RepertoireDuGenome]/PRIMA_CGH/CGH_Oligo_Localisation" break } elseif {[regexp "^FEATURES" $Ligne] && [regexp -nocase "LOG" $Ligne]} { set Num $n FaireLire "The line $n contains the titles" # Chro Deb Fin Nom Id Access GN Def Log10Ratio (Error Pvalue) Access ProbeName (GeneName Des) # la 10 ieme ligne commencant par "FEATURES" contient les titres des colonnes FaireLire "Which column contains the chromosome number?" set nChro [Entre 12] FaireLire "Which column contains the chromosome start position?" set nStart [Entre 12] FaireLire "Which column contains the chromosome end position?" set nEnd [Entre 12] FaireLire "Which column contains the logratio?" set nLogRatio [Entre 16] FaireLire "Which column contains the probe name?" set nID [Entre 10] } if {[info exists Num]} { if {$n>$Num} { set LesElts [split $Ligne "\t"] if {$nChro==$nStart && $nStart==$nEnd} { # chro debut fin sont ensemble set Loc [lindex $LesElts [expr $nChro -1]] if {[regexp "^chr" $Loc]} { set LesEltsLoc [split $Loc ":"] set Chro [lindex $LesEltsLoc 0] if {[regexp "chr" $Chro]} {regsub "chr" $Chro "" Chro} if {$Chro<10} {set NewChro "HS0$Chro"} else {set NewChro "HS$Chro"} set Bornes [lindex $LesEltsLoc 1] set LesBornes [split $Bornes "-"] set Debut [lindex $LesBornes 0] #regsub -all {^0*} $Debut "" Debut set Debut [Base10 $Debut] set Fin [lindex $LesBornes 1] #regsub -all {^0*} $Fin "" Fin set Fin [Base10 $Fin] set PosMid [expr $Debut + (($Fin*1.0 - $Debut*1.0)/2)] } else {continue} } # else ?? set LogRatio [lindex $LesElts [expr $nLogRatio -1]] if {[regexp "," $LogRatio]} {regsub "," $LogRatio "." LogRatio} if {$LogRatio=="#N/A"} {set LogRatio ""} if {[regexp "^e" $LogRatio]} {set LogRatio "1$LogRatio"} scan $LogRatio "%f" Val set ID [lindex $LesElts [expr $nID -1]] lappend LeFichierCourbeOligo "$NewChro\t$Debut\t$Fin\t$Val" lappend LeFichierOligoLocalisation "$NewChro\t$Debut\t$Fin\t$ID" } } } if {[info exists LeFichierCourbeOligo] && [info exists LeFichierOligoLocalisation]} { # tri par ordre croissant set LeFichierCourbeOligo [lsort -command CompareChroDebut $LeFichierCourbeOligo] set LeFichierCourbeOligo [lsort -command CompareChroFin $LeFichierCourbeOligo] #set LeFichierCourbeOligo [lsort -increasing $LeFichierCourbeOligo] set LeFichierOligoLocalisation [lsort -command CompareChroDebut $LeFichierOligoLocalisation] set LeFichierOligoLocalisation [lsort -command CompareChroFin $LeFichierOligoLocalisation] #set LeFichierOligoLocalisation [lsort -increasing $LeFichierOligoLocalisation] set RepFichierCrees "[RepertoireDuGenome]/FichiersCrees" if {![file exists $RepFichierCrees]} {File mkdir $RepFichierCrees} set FichierCourbeOligo "$RepFichierCrees/$NomFichierCourbeOligo" set RepFichierLocCGHOligo "FichiersCrees" set FichierLocCGHOligo "$RepFichierCrees/CGH_Oligo_Localisation" SauveLesLignes $LeFichierCourbeOligo dans $FichierCourbeOligo if {![file exists $FichierLocCGHOligo]} { SauveLesLignes $LeFichierOligoLocalisation dans $FichierLocCGHOligo } } } else { FaireLire "Please, if you have a MS Excel file, save it as a tab-delimited text file.\nThank you" exit } set OligoData 1 } else { Espionne "No Oligo data" set OligoData 0 set FichierCourbeOligo "null" set RepFichierLocCGHOligo "null" } if {$BACdata==0 && $OligoData==0} {return} FaireAttendreAnnaick .fenetre "Running" "Please wait..." # Either BAC plot or Oligo plot or both plots will be displayed if {$BACdata==0} { set NomFichierOligo [file tail $FichierCourbeOligo] set NomFichierBAC "null" } if {$OligoData==0} { set NomFichierBAC [file tail $FichierCourbeBAC] set NomFichierOligo "null" } if {$BACdata!=0 && $OligoData!=0} { set NomFichierOligo [file tail $FichierCourbeOligo] set NomFichierBAC [file tail $FichierCourbeBAC] } ############################### Variables ################################## # Remark: for the article : the texte was done in Adobe Illustrator set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoite 10 set EcartEntreRepresentations 100 set HauteurMax [expr $BordY + $HauteurBoite + 2*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set PosYMin [expr $HauteurMax - $BordY] set PosYMax [expr $HauteurMax - $BordY] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleGenome 3076781887.0 # (TailleGenome was obtained by summing the chromosomes sizes) set Facteur [expr ($LargeurAffichage*1.0)/($TailleGenome*1.0)] ######################## Plot CGH BAC ####################################### if {$BACdata!=0} { set VMin [InterrogeFichierCourbeCGH $FichierCourbeBAC VMin] set VMax [InterrogeFichierCourbeCGH $FichierCourbeBAC VMax] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierCourbeCGH TabC $FichierCourbeBAC $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set DebutCentro [expr $DebutCentro*1.0 + $TailleChroCum*1.0] set FinCentro [expr $FinCentro*1.0 + $TailleChroCum*1.0] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabC($FichierCourbeBAC,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbeBAC,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbeBAC,Chromosome,$Chromosome,$Pos)] { set PosMid [Base10 [lindex $LInfo 1]] #tenir compte des chros precedents set PosMid [expr $PosMid*1.0 + $TailleChroCum*1.0] set Val [lindex $LInfo 2] if {$Val==""} {continue} set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$DebutCentro && $PosMid<=$FinCentro} { # x1 est avant le debut du centro et x2 dedans set X1 $PosMid set Y1 $Value continue } if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { # aucun point dans le centromere set X1 $PosMid set Y1 $Value } if {($X1>=$DebutCentro && $X1<=$FinCentro) && ($PosMid>=$DebutCentro && $PosMid<=$FinCentro)} { # x1 et x2 sont dans le centromere set X1 $PosMid set Y1 $Value continue } if {$X1<=$FinCentro && $PosMid>=$FinCentro && $X1>=$DebutCentro} { # x1 est dans le centromere et x2 apres le centromere set X1 $PosMid set Y1 $Value } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 # Echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] # Ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} # Lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 # Texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $FichierCourbeBAC $FichierCourbeOligo $RepFichierLocCGHBAC $RepFichierLocCGHOligo "Chromosome"] # Petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 # Val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" # Val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" # Echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierBAC CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr $TailleChroCum + $TailleChromo] } } ######################## Plot CGH Oligo ####################################### if {$OligoData!=0} { set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set x [InterrogeFichierCourbeCGH $FichierCourbeOligo "unset"] set y [InterrogeFichierCentromere $FichierPosCentro "unset"] set VMin [InterrogeFichierCourbeCGH $FichierCourbeOligo VMin] set VMax [InterrogeFichierCourbeCGH $FichierCourbeOligo VMax] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierCourbeCGH TabO $FichierCourbeOligo $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] # NB: Positions centromere, Tenir compte des chromosomes precedents! set DebutCentro [expr $DebutCentro*1.0 + $TailleChroCum*1.0] set FinCentro [expr $FinCentro*1.0 + $TailleChroCum*1.0] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabO($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabO($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)] { set Pos10 [Base10 $Pos] set PosMid [expr $Pos10*1.0 + $TailleChroCum*1.0] foreach LInfo [set TabO($FichierCourbeOligo,Chromosome,$Chromosome,$Pos)] { set Val [lindex $LInfo 3] if {$Val==""} {continue} set Val [expr $Val*log(10)/log(2)] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$DebutCentro && $PosMid<=$FinCentro} { # x1 est avant le debut du centro et x2 dedans set X1 $PosMid set Y1 $Value continue } if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { # aucun point dans le centromere set X1 $PosMid set Y1 $Value } if {($X1>=$DebutCentro && $X1<=$FinCentro) && ($PosMid>=$DebutCentro && $PosMid<=$FinCentro)} { # x1 et x2 sont dans le centromere set X1 $PosMid set Y1 $Value continue } if {$X1<=$FinCentro && $PosMid>=$FinCentro && $X1>=$DebutCentro} { # x1 est ds le centromere et x2 apres le centromere set X1 $PosMid set Y1 $Value } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 # Echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] # Ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} # Lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 # Texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $FichierCourbeBAC $FichierCourbeOligo $RepFichierLocCGHBAC $RepFichierLocCGHOligo "Chromosome"] # Petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 # Val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" # Val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" # Echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierOligo CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr $TailleChroCum*1.0 + $TailleChromo*1.0] } } ############################## Display, buttons ################################################## LesNomsEnStock $K $LesNoms $K bind "CGHOligo" "DevoileLePlot $K %x %y Enter" $K bind "CGHOligo" "DevoileLePlot $K %x %y Leave" $K bind "CGHOligo" <1> "AfficheLePlot $K" if {$BACdata!=0} { $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "CGH" <1> "AfficheLePlot $K" } $K bind "Chromosome" <1> "ac_ChromosomeSelectionne $K" regsub {\.canvas} $K "" w set D [BoutonneLaFenetre $w "All_seg"] $D configure -background "yellow" bind $D <1> "IllustreCGHAll_seg $DirFileToOpen" set C [BoutonneLaFenetre $w "All"] $C configure -background "orange" bind $C <1> "IllustreCGHAll $DirFileToOpen" set B [BoutonneLaFenetre $w "CBS"] $B configure -background "#808FFF" bind $B <1> "IllustreCGH_seg $NomFichierBAC $NomFichierOligo $DirFileToOpen" set A [BoutonneLaFenetre $w "WithCBS"] $A configure -background "green" bind $A <1> "IllustreCGHAvtEtApresSeg $DirFileToOpen" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" FaireLaSuiteAnnaick .fenetre return $K } proc IllustreCGHAll {DirFileToOpen} { if {$DirFileToOpen==""} {set DirFileToOpen $RepertoireDuGenome} if {[OuiOuNon "Do you want to display CGH-BAC data?"]} { FaireLire "Please, download your first file. Thank you!" set FichierCourbeBAC [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersBAC $FichierCourbeBAC while {[OuiOuNon "Do you have an other file to download?"]} { set FichierCourbeBAC [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersBAC $FichierCourbeBAC } IllustreBACCGH $LesFichiersBAC } elseif {[OuiOuNon "Do you want to display CGH-Oligo data?"]} { FaireLire "Please, download your first file. Thank you!" set FichierCourbeOligo [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersOligo $FichierCourbeOligo while {[OuiOuNon "Do you have an other file to download?"]} { set FichierCourbeOligo [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersOligo $FichierCourbeOligo } IllustreOligoCGH $LesFichiersOligo } } proc IllustreCGHAll_seg {DirFileToOpen} { if {$DirFileToOpen==""} {set DirFileToOpen $RepertoireDuGenome} if {[OuiOuNon "Do you want to display aCGH BAC segmented data?"]} { FaireLire "Please, download your first file. Thank you!" set FichierCourbeBACseg [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersBACseg $FichierCourbeBACseg while {[OuiOuNon "Do you have an other file to download?"]} { set FichierCourbeBACseg [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersBACseg $FichierCourbeBACseg } IllustreBACCGHseg $LesFichiersBACseg } elseif {[OuiOuNon "Do you want to display aCGH Oligo segmented data?"]} { FaireLire "Please, download your first file. Thank you!" set FichierCourbeOligoseg [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersOligoseg $FichierCourbeOligoseg while {[OuiOuNon "Do you have an other file to download?"]} { set FichierCourbeOligoseg [tk_getOpenFile -title "File to open" -initialdir $DirFileToOpen] lappend LesFichiersOligoseg $FichierCourbeOligoseg } IllustreOligoCGHseg $LesFichiersOligoseg } } proc IllustreCGHAvtEtApresSeg {DirFileToOpen {LesPos ""} {LesNoms ""}} { # afficher la courbe CGH avant et apres segmentation, qu'elle soit BAC ou Oligo. if {$DirFileToOpen==""} {set DirFileToOpen $RepertoireDuGenome} FaireLire "Please, download your raw data file. Thank you!" set FichierCourbeCGH [tk_getOpenFile -title "Raw data file to open" -initialdir $DirFileToOpen] FaireLire "Please, download your CBS data file. Thank you!" set FichierCourbeSEG [tk_getOpenFile -title "CBS data file to open" -initialdir $DirFileToOpen] if {![file exists $FichierCourbeCGH] || $FichierCourbeCGH == ""} {return ""} set NomFichierCGH [file tail $FichierCourbeCGH] if {![file exists $FichierCourbeSEG] || $FichierCourbeSEG == ""} {return ""} set NomFichierSEG [file tail $FichierCourbeSEG] set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] #set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 set HauteurMax [expr $BordY + $HauteurBoite + 2*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set PosYMin [expr $HauteurMax - $BordY] set PosYMax [expr $HauteurMax - $BordY] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleGenome 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleGenome [expr ($TailleGenome*1.0)+($TailleChromo*1.0)] } set Facteur [expr ($LargeurAffichage*1.0)/($TailleGenome*1.0)] ######################## Courbe CGH avant segmentation ############################# set x [InterrogeFichierCourbeCGH $FichierCourbeCGH "unset"] set VMin [InterrogeFichierCourbeCGH $FichierCourbeCGH VMin] set VMax [InterrogeFichierCourbeCGH $FichierCourbeCGH VMax] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierCourbeCGH TabC $FichierCourbeCGH $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabC($FichierCourbeCGH,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbeCGH,Chromosome,$Chromosome,LesPos)] { set PosMid $Pos set PosMid [expr $PosMid + $TailleChroCum] foreach LInfo [set TabC($FichierCourbeCGH,Chromosome,$Chromosome,$Pos)] { #tenir compte des chros precedents if {[regexp "Oligo" $NomFichierCGH] || [regexp "CL" $NomFichierCGH]} { set Val [lindex $LInfo 3] set Val [expr $Val*log(10)/log(2)] } else { set Val [lindex $LInfo 2] } set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { set X1 $PosMid set Y1 $Value continue } if {($X1>$DebutCentro && $X1<$FinCentro)||($PosMid>$DebutCentro && $PosMid<$FinCentro)} { set X1 $PosMid set Y1 $Value continue } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] #set AfficheVMin -0 set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $FichierCourbeCGH $FichierCourbeSEG "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierCGH CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr $TailleChroCum + $TailleChromo] } ######################## Courbe CGH SEG ####################################### set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set x [InterrogeFichierSEG $FichierCourbeSEG "unset"] set VMin [InterrogeFichierSEG $FichierCourbeSEG VMin] set VMax [InterrogeFichierSEG $FichierCourbeSEG VMax] #set VMin [LaValeurMinCGHSeg $FichierCourbeSEG $Chromosome] #set VMax [LaValeurMaxCGHSeg $FichierCourbeSEG $Chromosome] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierSEG TabO $FichierCourbeSEG $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabO($FichierCourbeSEG,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabO($FichierCourbeSEG,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabO($FichierCourbeSEG,Chromosome,$Chromosome,$Pos)] { set PosInf [expr [lindex $LInfo 3]+ $TailleChroCum] set PosSup [expr [lindex $LInfo 4]+ $TailleChroCum] set Val [lindex $LInfo 6] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] #set AfficheVMin -0 set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $FichierCourbeCGH $FichierCourbeSEG "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierSEG CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr $TailleChroCum + $TailleChromo] } LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "Chromosome" <1> "ac_ChromosomeSelectionneAvtEtApresSeg $K" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc IllustreCGH_seg {NomFichierBAC NomFichierOligo DirFileToOpen {LesPos ""} {LesNoms ""}} { if {$DirFileToOpen==""} {set DirFileToOpen $RepertoireDuGenome} # afficher la(les) courbe(s) CGH apres segmentation. #FaireLire "BAC file = x$NomFichierBAC x" set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] #set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 set HauteurMax [expr $BordY + $HauteurBoite + 2*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set PosYMin [expr $HauteurMax - $BordY] set PosYMax [expr $HauteurMax - $BordY] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" ### modif MG: pb avec la taille des chromos plus bas... set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleGenome 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleGenome [expr ($TailleGenome*1.0) + ($TailleChromo*1.0)] } # Attention au *1.0 !!! indispensable pour windows! (sinon taille du genome, negative! donc facteur negatif) set Facteur [expr ($LargeurAffichage*1.0)/($TailleGenome*1.0)] if {[OuiOuNon "Do you have a BAC CBS file?"]} { set FichierCourbeBACSeg [tk_getOpenFile -title "CBS BAC file to open" -initialdir $DirFileToOpen] set NomFichierBACSeg [file tail $FichierCourbeBACSeg] } else {set FichierCourbeBACSeg "null"} if {[OuiOuNon "Do you have a Oligo CBS file?"]} { set FichierCourbeOligoSeg [tk_getOpenFile -title "CBS oligo file to open" -initialdir $DirFileToOpen] set NomFichierOligoSeg [file tail $FichierCourbeOligoSeg] } else {set FichierCourbeOligoSeg "null"} ######################## Courbe CGH BAC apres segmentation ############################# # modif MG if {$FichierCourbeBACSeg!="null"} { set x [InterrogeFichierSEG $FichierCourbeBACSeg "unset"] set VMin [InterrogeFichierSEG $FichierCourbeBACSeg VMin] set VMax [InterrogeFichierSEG $FichierCourbeBACSeg VMax] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierSEG TabO $FichierCourbeBACSeg $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabO($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabO($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabO($FichierCourbeBACSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [expr [lindex $LInfo 3]+ $TailleChroCum] set PosSup [expr [lindex $LInfo 4]+ $TailleChroCum] set Val [lindex $LInfo 6] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] #set AfficheVMin -0 set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $FichierCourbeBACSeg $FichierCourbeOligoSeg "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierBACSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr $TailleChroCum + $TailleChromo] } } ######################## Courbe CGH Oligo Seg ####################################### if {$FichierCourbeOligoSeg!="null"} { set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set x [InterrogeFichierSEG $FichierCourbeOligoSeg "unset"] set VMin [InterrogeFichierSEG $FichierCourbeOligoSeg VMin] set VMax [InterrogeFichierSEG $FichierCourbeOligoSeg VMax] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] #set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierSEG TabO $FichierCourbeOligoSeg $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabO($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabO($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabO($FichierCourbeOligoSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [expr [lindex $LInfo 3]+ $TailleChroCum] set PosSup [expr [lindex $LInfo 4]+ $TailleChroCum] if {$PosSup<0} {Espionne "posinf=$PosInf et possup=$PosSup"} set Val [lindex $LInfo 6] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] #set AfficheVMin -0 set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo*1.0 + $TailleChroCum*1.0) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo*1.0 + $TailleChroCum*1.0) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo*1.0 +$TailleChroCum*1.0)* $Facteur)-($TailleChromo*1.0*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $FichierCourbeBACSeg $FichierCourbeOligoSeg "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierOligoSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr ($TailleChroCum*1.0) + ($TailleChromo*1.0)] if {$TailleChroCum<0} {FaireLire "Attention TailleChroCum=$TailleChroCum"} } } LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "Chromosome" <1> "ac_ChromosomeSelectionneSEG $K" regsub {\.canvas} $K "" w bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc IllustreDevStage {{LesNoms ""} {nParLigne 3} {FichierSelectedEST ""}} { if {$FichierSelectedEST == ""} {set FichierSelectedEST [tk_getOpenFile -title "SelectedEST File" -initialdir "[RepertoireDuGenome]/fiches"]} if {![file exists $FichierSelectedEST]} {return} if {$LesNoms == ""} {set LesNoms [MorceauxChoisis [InterrogeSelectedEST $FichierSelectedEST LesNoms]]} set Liste {} foreach Nom $LesNoms { if { ! [regexp -nocase {[a-z]} $Nom]} { continue } set LesDevStagesDeLaBoiteOrdonnes [list "DevStage expression in $Nom"] set nMin 0 set nMax 0 set LesDevStagesDeLaBoite {} set LesDevStages [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] foreach DevStage $LesDevStages { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DevStage n] if {$nMax < $n} {set nMax $n} lappend LesDevStagesDeLaBoite [list $DevStage $n $nMin] } set NbDevStage [llength $LesDevStagesDeLaBoite] if {$NbDevStage <=1} {continue} if {$NbDevStage < 3} { for {set i 1} {$i <= [expr 3-$NbDevStage]} {incr i} { lappend LesDevStagesDeLaBoite [list "" 0 0 $nMax] } } foreach LeDevStage [lsort -index 1 -real -decreasing $LesDevStagesDeLaBoite] { lappend LeDevStage $nMax lappend LesDevStagesDeLaBoiteOrdonnes $LeDevStage } lappend Liste $LesDevStagesDeLaBoiteOrdonnes } if {[llength $Liste] < $nParLigne} {set nParLigne [llength $Liste]} return [IllustreLesToilesDAraignee $Liste $nParLigne 1 1 1 0 1] } proc IllustreDevStageDesClusters {FichierCluster {LesClusters ""} {nParLigne 1} {FichierSelectedEST ""}} { if {$FichierSelectedEST == ""} {set FichierSelectedEST [tk_getOpenFile -title "SelectedEST File" -initialdir "[RepertoireDuGenome]/fiches"]} if {$LesClusters == ""} {set LesClusters [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierCluster LesClusters]]} set Liste {} foreach Cluster $LesClusters { #je calcule le tableau et les effectifs pour chaque DevStage et pour chaque groupe set Tab(Cluster,$Cluster,LesDevStages) {} set NbDevStageTot 0 foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierCluster Cluster $Cluster LesNoms] { set LesDevStages [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] foreach DevStage $LesDevStages { if {$DevStage == ""} {continue} if {![info exists Tab(Cluster,$Cluster,DevStage,$DevStage,n)]} { set Tab(Cluster,$Cluster,DevStage,$DevStage,n) 0 lappend Tab(Cluster,$Cluster,LesDevStages) $DevStage } #set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DevStage n] set n 1 incr Tab(Cluster,$Cluster,DevStage,$DevStage,n) $n incr NbDevStageTot $n } } set LesDevStagesDeLaBoiteOrdonnes [list "DevStage expression in Cluster $Cluster"] set nMin 0 set nMax 0 set LesDevStagesDeLaBoite {} foreach DevStage [set Tab(Cluster,$Cluster,LesDevStages)] { set n [set Tab(Cluster,$Cluster,DevStage,$DevStage,n)] if {$nMax < $n} {set nMax $n} lappend LesDevStagesDeLaBoite [list $DevStage $n $nMin] } set NbDevStage [llength $LesDevStagesDeLaBoite] if {$NbDevStage <=1} {continue} if {$NbDevStage < 3} { for {set i 1} {$i <= [expr 3-$NbDevStage]} {incr i} { lappend LesDevStagesDeLaBoite [list "" 0 0 $nMax] } } foreach LeDevStage [lsort -index 1 -real -decreasing $LesDevStagesDeLaBoite] { lappend LeDevStage $nMax lappend LesDevStagesDeLaBoiteOrdonnes $LeDevStage } lappend Liste $LesDevStagesDeLaBoiteOrdonnes } if {[llength $Liste] < $nParLigne} {set nParLigne [llength $Liste]} return [IllustreLesToilesDAraignee $Liste $nParLigne 1 1 1 0 1] } proc IllustreDistanceDesClustersAvecLesAutres {{SeuilMax 800} {nParLigne 3} {LesClusters ""} {LesAutresClusters ""}} { if {$LesClusters == {}} {set LesClusters [O2C2O LesClusters]} if {$LesAutresClusters == {}} {set LesAutresClusters [O2C2O LesClusters]} set ListeDeTousLesClusters {} foreach Cluster1 $LesClusters { set Liste [list "Dist Clust $Cluster1 with the others"] foreach Cluster2 $LesAutresClusters { set D [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance] if {$D == "" || $SeuilMax < $D} {continue} lappend Liste [list $Cluster2 $D 0 $SeuilMax] } if {$Liste == {}} {return} lappend ListeDeTousLesClusters $Liste } IllustreLesToilesDAraignee $ListeDeTousLesClusters $nParLigne 1 0 0 0 0 return } proc IllustreDistanceDuClusterAvecDAutresChoisis {Cluster1 {LesAutresClusters ""} {SeuilMax 800}} { set Liste {} if {$LesAutresClusters == ""} { set LesAutresClusters [MorceauxChoisis [O2C2O LesClusters]] } foreach Cluster2 $LesAutresClusters { if {$Cluster1 == $Cluster2} {continue} set D [format "%.1f" [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance]] if {$D == ""} {continue} lappend Liste [list $Cluster2 $D 0 $SeuilMax] } if {$Liste == {}} {return} IllustreLaToileDAraignee $Liste "Distance of Cluster $Cluster1 with the others" 1 1 1 0 0 return } proc IllustreDistanceDuClusterAvecLesClustersDuMemeOperon {Cluster Operon} { set Liste {} foreach Cluster2 [O2C2O Operon $Operon LesClusters] { set D [O2C2O Cluster1 $Cluster Cluster2 $Cluster2 Distance] if {$D == ""} {continue} lappend Liste [list $Cluster2 $D 0 740] } if {$Liste == {}} {return} IllustreLaToileDAraignee $Liste "Distance of Cluster $Cluster with the others" 1 1 1 1 1 return } proc IllustreDistanceDuClusterAvecTousLesAutres {Cluster1 {SeuilGroupe 10} {SeuilMax 800} {nParLigne 2}} { set LesGroupesDeClusters {} set ListeDistanceAvecTousLesClusters {} set i 0 set UnGroupeDeClusters "" foreach Cluster [O2C2O LesClusters] { Espionne "Cluster: $Cluster" incr i Espionne $i if {$i < $SeuilGroupe} { append UnGroupeDeClusters "$Cluster\t" if {$Cluster == 167} {lappend LesGroupesDeClusters $UnGroupeDeClusters} } else { append UnGroupeDeClusters "$Cluster\t" lappend LesGroupesDeClusters $UnGroupeDeClusters set i 0 set UnGroupeDeClusters "" } } Espionne [join $LesGroupesDeClusters "\n"] foreach GroupeDeClusters $LesGroupesDeClusters { set Liste [list "Distance of the cluster $Cluster1 with:"] foreach Cluster2 $GroupeDeClusters { #if {$Cluster1 == $Cluster2} {continue} set D [format "%.1f" [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance]] if {$D == ""} {continue} lappend Liste [list $Cluster2 $D 0 $SeuilMax] } lappend ListeDistanceAvecTousLesClusters $Liste } EspionneL ListeDistanceAvecTousLesClusters IllustreLesToilesDAraignee $ListeDistanceAvecTousLesClusters $nParLigne 1 1 1 0 1 return } proc IllustreDistancesPondereesDesClustersParPresences {{LesClusters ""} {LesCategories ""} {nParLigne 3} {DPPMin ""} {DPPMax ""}} { if {$LesClusters == {}} { set LesClusters [MorceauxChoisis [O2C2O LesClusters ]] } if {$LesCategories == {}} {set LesCategories [MorceauxChoisis [lsort [O2C2O LesCategories]]]} if {$LesCategories == "CategoriesInteressantes"} {set LesCategories [LesCategoriesInteressantes]} if {$LesClusters == {} || $LesCategories == {}} {return} ChargeLesDPPDesCategories TabCat $LesCategories set ListeDPPDesClusters {} foreach Cl1 $LesClusters { foreach Cl2 $LesClusters { if {$Cl1 == $Cl2} {continue} EspionneL "Cluster $Cl1 Cluster $Cl2" set Liste [list "DPP : clust $Cl1 ([O2C2O Cluster $Cl1 TailleCluster]) and $Cl2 ([O2C2O Cluster $Cl2 TailleCluster])"] foreach Cat $LesCategories { if {![info exists TabCat(Categorie,$Cat,Cluster1,$Cl1,Cluster2,$Cl2,DPP)]} { Espionne "Pas de DPP entre $Cl1 et $Cl2, bizarre!!!!" continue } set DPP [expr round([set TabCat(Categorie,$Cat,Cluster1,$Cl1,Cluster2,$Cl2,DPP)])] if {$DPP == ""} {continue} if {$DPPMin == ""} {set DPPMin [set TabCat(Categorie,$Cat,DPPMin)]} if {$DPPMax == ""} {set DPPMax [set TabCat(Categorie,$Cat,DPPMax)]} if {$DPPMax < $DPP } {set DPP $DPPMax} if {$DPP < $DPPMin} {set DPP $DPPMin} if {$Cat == "OrganismeInteressant"} {set Cat "Diabacs"} lappend Liste [list $Cat $DPP $DPPMin $DPPMax] } lappend ListeDPPDesClusters $Liste } } IllustreLesToilesDAraignee $ListeDPPDesClusters $nParLigne 1 1 1 0 1 return } proc IllustreFichierDPC {FichierDPC {MoyenneOuMediane Mediane} {AvecMemeEchelleY 1} {nParLigne 2}} { if {![file exists $FichierDPC]} {return} set Tab(LesClusters) {} set F [open $FichierDPC] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Qui [lindex $LaLigne 0] set i [expr [string first " " $Qui] -1] if {0 <= $i} { set PremierMot [string range $Qui 0 $i] if {$PremierMot == "Number"} {continue} if {$PremierMot == "Cluster"} { if {![info exists nClust]} {set nClust 0} else {incr nClust} Espionne "Cluster $nClust" lappend Tab(LesClusters) $nClust set Tab($nClust,NbSeq) 0 set Tab($nClust,LesConditions) {} continue } } if {![info exists nClust]} {continue} incr Tab($nClust,NbSeq) set LesValeurs [lrange $LaLigne 1 end] set Condition 0 foreach Val $LesValeurs { if {![info exists Tab($nClust,$Condition,LesValeurs)]} { lappend Tab($nClust,LesConditions) $Condition set Tab($nClust,$Condition,LesValeurs) {} } lappend Tab($nClust,$Condition,LesValeurs) $Val incr Condition } } close $F set LesClusters [set Tab(LesClusters)] set LesCouleurs [GammeDeCouleursRVB_CHALMEL [llength $LesClusters]] if {$AvecMemeEchelleY} {set ValYMin 1e200;set ValYMax -1e200} set ToutesLesCourbes {} foreach Cluster [set Tab(LesClusters)] { set Couleur [lindex $LesCouleurs $Cluster] set NbSeq [set Tab($Cluster,NbSeq)] set LesConditions [set Tab($Cluster,LesConditions)] if {!$AvecMemeEchelleY} {set ValYMin 1e200;set ValYMax -1e200} set LesPoints {} foreach What $LesConditions { if {![info exists Tab($Cluster,$What,LesValeurs)]} {continue} if {$MoyenneOuMediane == "Moyenne"} { set LesStats [MoyenneEcartMinMaxCumulLong [set Tab($Cluster,$What,LesValeurs)]] set Moyenne [lindex $LesStats 0] set ET [lindex $LesStats 1] if {[expr $Moyenne - $ET] < $ValYMin } {set ValYMin [expr $Moyenne - $ET]} if {$ValYMax < [expr $Moyenne + $ET]} {set ValYMax [expr $Moyenne + $ET]} lappend LesPoints [list $What $Moyenne $ET] } else { set LesStats [MedianeInterQuartileMinInterQuartileMaxExtremeMinExtremeMax [set Tab($Cluster,$What,LesValeurs)]] set Mediane [lindex $LesStats 0] set QuartMin [lindex $LesStats 1] set QuartMax [lindex $LesStats 2] set ExtrMin [lindex $LesStats 3] set ExtrMax [lindex $LesStats 4] if {$ExtrMin < $ValYMin} {set ValYMin $ExtrMin} if {$ValYMax < $ExtrMax} {set ValYMax $ExtrMax} lappend LesPoints [list $What $Mediane $QuartMin $QuartMax $ExtrMin $ExtrMax] } } Espionne "Cluster $Cluster NbSeq $NbSeq" lappend ToutesLesCourbes [list "Cluster $Cluster NbSeq $NbSeq" $ValYMin $ValYMax [list $What $Couleur $LesPoints]] } if {$ToutesLesCourbes == {}} {return} if {$AvecMemeEchelleY} { set ToutesLesCourbes_old $ToutesLesCourbes set ToutesLesCourbes {} foreach LesCourbes $ToutesLesCourbes_old { set LesCourbes [lreplace $LesCourbes 1 1 $ValYMin] set LesCourbes [lreplace $LesCourbes 2 2 $ValYMax] lappend ToutesLesCourbes $LesCourbes } } if {$MoyenneOuMediane == "Moyenne"} { IllustreLesCourbes $ToutesLesCourbes $nParLigne } else { IllustreLesCourbesAvecInterQuartile $ToutesLesCourbes $nParLigne } return } proc IllustreGCCount {} { Wup "Interface du BestGCCount" Wup "Montre le graphe cumule des valeurs de GC pour les sequences ou boites choisies" Wup "Permet de choisir, de montrer et sauver des bornes" Wup "26-04-2005 Modif pour tenir compte de step et SlidingWindow modifiable et affichage de ces infos" #Charge les Resultats set LesResultats [LesResultatsGCCount] if {$LesResultats==""} {Espionne "No results to show";return ""} set w "[NomDe fenetre]" if {[winfo exists $w]} {wm deiconify $w;raise $w;return ""} else {toplevel $w} wm geometry $w +300+100 wm title $w "Best GC analysis" #wm resizable $w false false #Frame contenant le graphe et les scrollbar ########################################### set FInfo "$w.frameinfo" frame $FInfo -borderwidth "3" -relief "groove" set Police {-family "arial" -size 12 -weight bold} set LargeurFenetre [expr [winfo screenwidth .] * 2/3] set HauteurFenetre [expr [winfo screenheight .] * 1/2] set XMilieu [expr $LargeurFenetre/2] set BordureX 50.0 set BordureY 50.0 set Intervalle 10.0 set EpaisseurBoite 15.0 #Position du Graph content set XDebutGraph [expr 0.0 + $BordureX] set XFinGraph [expr $LargeurFenetre - $BordureX -20] set YDebutGraph [expr 0.0 + $BordureY] set YFinGraph [expr $HauteurFenetre - $BordureY] set TailleXGraph [expr $XFinGraph - $XDebutGraph] set TailleYGraph [expr $YFinGraph - $YDebutGraph] #Traite les Resultats set TmpResultat "" foreach {a b} $LesResultats { switch $a { "GCMax" {set XMax $b} "GCMin" {set XMin $b} "GCMoyenne" {set GCMoyenne $b} "GCTotal" {} "NbGC" {set NbGCCalcules $b} "NbSeq" {set NbSeq $b} "default" {lappend TmpResultat [list $a $b]} } } set TailleEnX [expr $XMax - $XMin] set LesResultats [lsort -decreasing -integer -index 1 $TmpResultat] set YMax [lindex [lindex $LesResultats 0] 1] set YMin [lindex [lindex $LesResultats end] 1] set TailleEnY [expr $YMax - $YMin] #Nombre de pixel pour un pourcent de GC set RapportEnX [expr ($TailleXGraph)/($TailleEnX)] set RapportEnY [expr ($TailleYGraph)/($TailleEnY)] set K "$FInfo.canvas" set ScroHor "$FInfo.xscroll" set ScroVer "$FInfo.yscroll" scrollbar $ScroVer -command "$K yview" scrollbar $ScroHor -command "$K xview" -orient "horizontal" #Canvas pour le graphe canvas $K -width $LargeurFenetre -height $HauteurFenetre -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" $K configure -background "grey" $K configure -scrollregion [list 0.0 0.0 $XFinGraph $YFinGraph] #Rectangle de masque pour les graphes $K create rectangle [expr $XDebutGraph -2] [expr $YDebutGraph -2] [expr $XFinGraph +2] [expr $YFinGraph +2] -fill "gray97" -outline "gray97" -tags [list "" "Masque"] set ColorLine "deepskyblue2" set n 0 set LesResultats [lsort -increasing -real -index 0 $TmpResultat] foreach GCNb $LesResultats { scan $GCNb "%f %d" x y set X [expr $XDebutGraph + [expr $x * $RapportEnX] - [expr $XMin * $RapportEnX]] set Y [expr $YFinGraph - [expr $y * $RapportEnY] + [expr $YMin * $RapportEnY]] incr n if {$n > 1} { $K create line [set Coordonnees(LastX)] [set Coordonnees(LastY)] $X $Y -tags [list "" "GC $x Nb $y" "Affichable" "OligoGraph" "GC" "GCLines"] -fill $ColorLine set n 1 } set Coordonnees(VraiY) $y set Coordonnees(LastX) $X set Coordonnees(LastY) $Y $K create oval [expr $X-1] [expr $Y-1] [expr $X+1] [expr $Y+1] -width "3" -outline "darkviolet" -fill "darkviolet" -tags [list "" "GC $x Nb $y" "Affichable" "OligoGraph" "GC" "GCPlot"] } #La moyenne set XMoyenne [expr $XDebutGraph + [expr $GCMoyenne * $RapportEnX] - [expr $XMin * $RapportEnX]] $K create line $XMoyenne [expr $YFinGraph +1] $XMoyenne $YDebutGraph -tags [list "" "Mean $GCMoyenne" "Affichable" "OligoGraph" "Moyenne" "MoyenneLines"] -fill "red" $K create oval [expr $XMoyenne -1] [expr $YDebutGraph -1] [expr $XMoyenne +1] [expr $YDebutGraph +1] -width "3" -outline "red" -fill "red" -tags [list "" "Mean" "Affichable" "OligoGraph" "Moyenne" "MoyennePlot"] $K create oval [expr $XMoyenne -1] [expr $YFinGraph -1] [expr $XMoyenne +1] [expr $YFinGraph +1] -width "3" -outline "red" -fill "red" -tags [list "" "Mean" "Affichable" "OligoGraph" "Moyenne" "MoyennePlot"] $K create text $XMoyenne [expr $YFinGraph +15] -font "$Police" -text "[format "%.1f" $GCMoyenne]" -fill "yellow" -anchor "center" -tags [list "" "Mean" "OligoGraph" "Moyenne" "MoyennePlot"] #Axe des ordonnees $K create line $XDebutGraph $YFinGraph $XDebutGraph [expr $YDebutGraph -20] -arrow last -tags [list "" "Y (Nb) Axes" "Affichable" "Axes"] -width 2 $K create text $XDebutGraph [expr $YDebutGraph -25] -text "Count" -tags [list "" "Y title" "Affichable" "Edges"] -anchor "center" $K create text [expr $XDebutGraph -10] [expr $YFinGraph] -text "$YMin" -tags [list "" "Nb Min" "Affichable" "Edges"] -anchor "e" $K create text [expr $XDebutGraph -10] [expr $YDebutGraph] -text "$YMax" -tags [list "" "Nb Max" "Affichable" "Edges"] -anchor "e" #Axe des abscisses $K create line $XDebutGraph $YFinGraph [expr $XFinGraph +20] $YFinGraph -arrow last -tags [list "" "X (GC) Axes" "Affichable" "Axes"] -width 2 $K create text [expr $XFinGraph +25] $YFinGraph -text "GC %" -tags [list "" "X title" "Affichable" "Edges"] -anchor "w" $K create text [expr $XDebutGraph] [expr $YFinGraph +15] -text "$XMin" -tags [list "" "GC Min" "Affichable" "Edges"] -anchor "center" $K create text [expr $XFinGraph] [expr $YFinGraph +15] -text "$XMax" -tags [list "" "GC Max" "Affichable" "Edges"] -anchor "center" #La fiche contenant les infos set FicheInfo "" set TextFrame "$w.textframe" set Text "$TextFrame.text" #set ListBoxSBH "$TextFrame.xscroll" set ListBoxSBV "$TextFrame.yscroll" frame $TextFrame -borderwidth "3" -relief "groove" #scrollbar $ListBoxSBH -orient "horizontal" -command "$Text xview" scrollbar $ListBoxSBV -orient "vertical" -command "$Text yview" #text $Text -height "3" -state "disabled" -wrap "word" -font "courier 10" -xscrollcommand "$ListBoxSBH set" -yscrollcommand "$ListBoxSBV set" text $Text -height "3" -state "disabled" -wrap "word" -font "courier 10" -yscrollcommand "$ListBoxSBV set" set Step [LesParametresDuDesign Step "LaValeurMerci"] if {$Step ==""} {set Step 10} set SlidingWindow [LesParametresDuDesign LengthOligo "LaValeurMerci"] if {$SlidingWindow==""} {set SlidingWindow 60} set FicheInfo [list "$NbGCCalcules GC values measured for $NbSeq sequence(s) submitted\n" "Sliding Window: $SlidingWindow nt(s)\n" "Step: $Step nt(s)"] foreach element $FicheInfo { $Text configure -state normal $Text insert "end" "$element" $Text configure -state disabled } #Les boutons set ButtonFrame "$w.buttonframe" set ActionButton "$ButtonFrame.button1" set DestroyButton "$ButtonFrame.button2" set LCharpente1 "$ButtonFrame.lcharpente1" set LCharpente2 "$ButtonFrame.lcharpente2" set ZoneButton1 "$ButtonFrame.zbutton1" set ZoneButton2 "$ButtonFrame.zbutton2" set ZoneButton3 "$ButtonFrame.zbutton3" frame $ButtonFrame -borderwidth "3" -relief "groove" button $ActionButton -background "orange" -text "Graph Panel" bind $ActionButton <1> "GCPanel $K" set Texte [format "%-10s" "Panel to change graph display (order,color)"] set_balloon $ActionButton "$Texte" button $DestroyButton -background "red" -text "Close" -command "destroy $w" button $ZoneButton1 -background "green" -text "Area Draw / Clear / Save" bind $ZoneButton1 <1> "MontreLesZonesDeGC $K $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" bind $ZoneButton1 <2> "ClearLesZones $K" bind $ZoneButton1 <3> "SauveLesZonesDeGC $K" set Texte [format "%-10s" "Allow to show (defined), clear or save a GC area"] set_balloon $ZoneButton1 "$Texte" button $ZoneButton2 -background "green" -text "Reset" bind $ZoneButton2 <1> "ResetLesZonesDeGC $K" set Texte [format "%-10s" "Allow to clear saved GC area"] set_balloon $ZoneButton2 "$Texte" button $ZoneButton3 -background "yellow" -text "Zoom In / Out / Reset" bind $ZoneButton3 <1> "zoom $K 1.25 1.25" bind $ZoneButton3 <2> "zoom $K 0.8 0.8" bind $ZoneButton3 <3> "ResetZoom $K" label $LCharpente1 -background "#808FFF" -relief "groove" label $LCharpente2 -background "#808FFF" -relief "groove" pack $FInfo -fill both -expand true pack $ScroVer -fill y -side right pack $ScroHor -fill x -side bottom pack $K -fill both -side top -expand true pack $ButtonFrame -fill both -side top pack $LCharpente1 -fill both -side left -expand true pack $DestroyButton -side left pack $ZoneButton3 -side left pack $ActionButton -side left pack $ZoneButton1 -side left pack $ZoneButton2 -side left pack $LCharpente2 -fill both -side left -expand true pack $TextFrame -fill both -side top pack $ListBoxSBV -fill y -side right #pack $ListBoxSBH -fill x -side bottom pack $Text -fill both -side top -expand true Raiser $K "GCPlot" Lower $K "Edges" Lower $K "Axes" Lower $K "Masque" $K bind "Affichable" "AfficheInfoBulle $K %x %y Enter" $K bind "Affichable" "AfficheInfoBulle $K %x %y Leave" bind $K "PositionneLesZonesDeGC $K %x %y $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" bind $K "ViseurDeGC $K %x %y $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" bind $K "ViseurDeGC $K %x %y $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" #Binding pour permettre de zoomer en utilisant le 3eme bouton bind $K <3> "zoomMark $K %x %y" bind $K "zoomStroke $K %x %y" bind $K "zoomArea $K %x %y" return "" } proc IllustreGODuSelectionne {K X Y MesGO Density} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set Type [lindex $MesTags 1] set GO [lindex $MesTags 2] set Niveau [lindex $MesTags 3] IllustreOntology $Type $MesGO $Density $GO $Niveau return "" } proc IllustreGeneOntology {{LesNoms ""} {LesTypes ""} {nParLigne 3} {FichierGeneOntology ""}} { if {$FichierGeneOntology == ""} { set FichierGeneOntology [ChoixParmi [glob -nocomplain "[RepertoireDuGenome]/fiches/GeneOntology*"]] } if {$LesNoms == ""} {set LesNoms [MorceauxChoisis [InterrogeGeneOntology $FichierGeneOntology LesNoms]]} if {$LesTypes == ""} {set LesTypes [MorceauxChoisis [LesTypesOntologiques]]} set Liste {} foreach Nom $LesNoms { foreach Type $LesTypes { set LesGODeLaBoiteOrdonnes [list "Gene ontology of $Nom : $Type"] set nMin 0 set nMax 0 set LesGODeLaBoite {} set LesGO [InterrogeGeneOntology $FichierGeneOntology $Nom LesGO] foreach GO $LesGO { if {$Type != [InterrogeGeneOntology $FichierGeneOntology GO $GO Type]} {continue} set n [InterrogeGeneOntology $FichierGeneOntology $Nom GO $GO n] set Def [join [InterrogeGeneOntology $FichierGeneOntology GO $GO LaDefinition] ""] if {$nMax < $n} {set nMax $n} lappend LesGODeLaBoite [list $Def $n $nMin] } set NbGO [llength $LesGODeLaBoite] if {$NbGO < 3} { for {set i 1} {$i <= [expr 3-$NbGO]} {incr i} { lappend LesGODeLaBoite [list "" 0 0 1] } } foreach LeGO [lsort -index 1 -real -decreasing $LesGODeLaBoite] { lappend LeGO $nMax lappend LesGODeLaBoiteOrdonnes $LeGO } lappend Liste $LesGODeLaBoiteOrdonnes } } if {[llength $Liste] < $nParLigne} {set nParLigne [llength $Liste]} IllustreLesToilesDAraignee $Liste $nParLigne 1 1 1 0 1 return } proc IllustreGeneOntologyDesClusters {FichierO2C2A2D2E {LesClusters ""} {LesTypes ""} {nParLigne 1} {FichierGeneOntology ""}} { if {$FichierGeneOntology == ""} { set FichierGeneOntology [ChoixParmi [glob -nocomplain "[RepertoireDuGenome]/fiches/GeneOntology*"]] } if {$LesClusters == ""} {set LesClusters [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesClusters]]} if {$LesTypes == ""} {set LesTypes [MorceauxChoisis [InterrogeGeneOntology $FichierGeneOntology LesTypes]]} set Liste {} foreach Cluster $LesClusters { foreach Type $LesTypes { set LesGODuClusterOrdonnes [list "Gene ontology of Cluster $Cluster : $Type"] set nMin 0 set nMax 0 set LesGODuCluster {} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E Cluster $Cluster LesNoms] { set LesGO [InterrogeGeneOntology $FichierGeneOntology $Nom LesGO] if {$LesGO == ""} {continue} foreach GO $LesGO { set TypeDuGO [InterrogeGeneOntology $FichierGeneOntology GO $GO Type] if {$Type != $TypeDuGO} {continue} if {![info exists Tab($Cluster,$GO,n)]} { set Tab($Cluster,$GO,n) 0 lappend LesGODuCluster $GO } incr Tab($Cluster,$GO,n) if {$nMax < [set Tab($Cluster,$GO,n)]} {set nMax [set Tab($Cluster,$GO,n)]} } } set LesGO $LesGODuCluster set LesGODuCluster {} foreach GO $LesGO { set n [set Tab($Cluster,$GO,n)] set Def [join [InterrogeGeneOntology $FichierGeneOntology GO $GO LaDefinition] ""] if {$nMax < $n} {set nMax $n} lappend LesGODuCluster [list $Def $n $nMin $nMax] } set NbGO [llength $LesGODuCluster] if {$NbGO < 3} { for {set i 1} {$i <= [expr 3-$NbGO]} {incr i} { lappend LesGODuCluster [list "" 0 0 1] } } foreach LeGO [lsort -index 1 -real -decreasing $LesGODuCluster] { lappend LeGO $nMax lappend LesGODuClusterOrdonnes $LeGO } lappend Liste $LesGODuClusterOrdonnes } } if {[llength $Liste] < $nParLigne} {set nParLigne [llength $Liste]} IllustreLesToilesDAraignee $Liste $nParLigne 1 1 1 0 1 return } proc IllustreGeneOntologyDesClustersDeMSF {{LesNoms ""} {LesTypes ""} {nParLigne 3} {FichierGeneOntology ""}} { if {$FichierGeneOntology == ""} { set FichierGeneOntology [ChoixParmi [glob -nocomplain "[RepertoireDuGenome]/fiches/GeneOntology*"]] } if {$LesNoms == ""} {set LesNoms [MorceauxChoisis [InterrogeGeneOntology $FichierGeneOntology LesNoms]]} if {$LesTypes == ""} {set LesTypes [MorceauxChoisis [LesTypesOntologiques]]} set Liste {} foreach Nom $LesNoms { foreach Groupe [InterrogeGeneOntology $FichierGeneOntology $Nom LesGroupes] { foreach Type $LesTypes { set LesGODeLaFamilleOrdonnes [list "Gene ontology of Family $Groupe of $Nom : $Type"] set nMin 0 set nMax 0 set LesGODeLaFamille {} set LesGO [InterrogeGeneOntology $FichierGeneOntology $Nom Groupe $Groupe LesGO] foreach GO $LesGO { if {$Type != [InterrogeGeneOntology $FichierGeneOntology GO $GO Type]} {continue} set n [InterrogeGeneOntology $FichierGeneOntology $Nom Groupe $Groupe GO $GO n] set Def [join [InterrogeGeneOntology $FichierGeneOntology GO $GO LaDefinition] ""] if {$nMax < $n} {set nMax $n} lappend LesGODeLaFamille [list $Def $n $nMin] } set NbGO [llength $LesGODeLaFamille] if {$NbGO < 3} { for {set i 1} {$i <= [expr 3-$NbGO]} {incr i} { lappend LesGODeLaFamille [list "" 0 0 1] } } foreach LeGO [lsort -index 1 -real -decreasing $LesGODeLaFamille] { lappend LeGO $nMax lappend LesGODeLaFamilleOrdonnes $LeGO } lappend Liste $LesGODeLaFamilleOrdonnes } } } if {[llength $Liste] < $nParLigne} {set nParLigne [llength $Liste]} IllustreLesToilesDAraignee $Liste $nParLigne 1 1 1 0 1 return } proc IllustreLArbreTaxonomique {{LesTaxonsSelectionnes ""} {Qui OnlySelectedTaxons} {aTabTaxon ""}} { if {$aTabTaxon != ""} {upvar $aTabTaxon TabTaxon} if {![info exists TabTaxon]} {ChargeLaClassificationTaxonomique TabTaxon} if {$LesTaxonsSelectionnes == {}} { if {[OuiOuNon "Would you want to select some taxons?\nif not all will be selected."]} { set LesTaxonsSelectionnes [MorceauxChoisis [lsort [set TabTaxon(LesTaxons)]]] } } set LesPhylumsSelectionnes {} foreach TaxonSelect $LesTaxonsSelectionnes { if {![info exists TabTaxon($TaxonSelect,LesPhylums)]} {continue} lappend LesPhylumsSelectionnes [set TabTaxon($TaxonSelect,LesPhylums)] } set HauteurMax [expr [winfo screenheight .] * 2.0 /3] set LargeurMax [expr [winfo screenwidth .] * 2.0 /3] set HauteurFenetre [expr [winfo screenheight .] * 2.0 /3] set LargeurFenetre [expr [winfo screenwidth .] * 2.0 /3] set BordY 50.0 set BordX 50.0 set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set PoliceTitre "Arial 14 bold" set PoliceNiveau "Arial 12 bold" set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] $K create text [expr $LargeurFenetre/2] [expr $BordY/2] -text "Taxonomic Tree" -font $PoliceTitre set nNiveaux [set TabTaxon(NbNiveaux)] set EcartY [expr $HauteurAffichage * 1.0 / ($nNiveaux-1)] set XMin $BordX set XMax [expr $BordX + $LargeurAffichage] for {set i 1} {$i <= $nNiveaux} {incr i} { if {![info exists Y]} {set Y [expr $BordY + $HauteurAffichage]} else {set Y [expr $Y - $EcartY]} $K create text [expr $BordX /2] $Y -text "Niv $i" -font $PoliceNiveau $K create text [expr $LargeurAffichage+$BordX*3/2] $Y -text "Niv $i" -font $PoliceNiveau $K create line $XMin $Y $XMax $Y -fill grey set TabCoord($i,Y) $Y } set TabCoord(LUCA,XMin) $XMin set TabCoord(LUCA,XMax) $XMax set TabCoord(RayonMax) [expr $EcartY / 4] PlaceLesNoeudsTaxonomiquesSurLArbre $K TabCoord TabTaxon "LUCA" $LesPhylumsSelectionnes $Qui regsub {\.canvas} $K "" w $K bind "Taxon" "DevoileLeTaxon $K %x %y Enter" $K bind "Taxon" "DevoileLeTaxon $K %x %y Leave" $K bind "Taxon" <1> "IllustreLArbreTaxonomiqueDuTaxonSelectionne $K %x %y TabTaxon $Qui" set B [BoutonneLaFenetre $w "Who JustMySelectedTaxons/All"] bind $B <1> "IllustreLArbreTaxonomique $LesTaxonsSelectionnes OnlySelectedTaxons" bind $B <2> "IllustreLArbreTaxonomique $LesTaxonsSelectionnes AllTaxons" return } proc IllustreLArbreTaxonomiqueDuTaxonSelectionne {K X Y {aTabTaxon ""} {Qui OnlySelectedTaxons}} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set Taxon [lindex [lindex $MesTags 1] end] if {$aTabTaxon != ""} { upvar $aTabTaxon TabTaxon IllustreLArbreTaxonomique $Taxon $Qui TabTaxon } else { IllustreLArbreTaxonomique $Taxon $Qui } return } proc IllustreLHistogramme {Liste {VerticalOuHorizontal Vertical}} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set K [UnCanva $Largeur $Hauteur $Largeur $Hauteur WithY] set K [PlaceLHistogramme $Liste $K 0 $Hauteur 0 $Largeur $VerticalOuHorizontal] return $K } proc IllustreLaCarteExonique {NomOuFichiermRNATFA NomOuFichierExoniqueMap {LiensAvecExons Yes} {LiensAvecRepeats No} {LiensEntreExons Yes}} { global RepertoireDuGenome set FichierExoniqueMap "$RepertoireDuGenome/mrnaexonicmap/$NomOuFichierExoniqueMap" if {![file exists $FichierExoniqueMap]} { set FichierExoniqueMap $NomOuFichierExoniqueMap if {![file exists $FichierExoniqueMap]} { Espionne "$FichierExoniqueMap does not exist" return "" } } set FichiermRNATFA "$RepertoireDuGenome/mrnahuman/$NomOuFichiermRNATFA" if {![file exists $FichiermRNATFA]} { set FichiermRNATFA $NomOuFichiermRNATFA if {![file exists $FichiermRNATFA]} { Espionne "$FichiermRNATFA does not exist" return "" } } set Nom [file tail $FichierExoniqueMap] set FichierBlast "$RepertoireDuGenome/mrnablastnhuman/$Nom" if {![file exists $FichierBlast]} { set PresenceFichierBlast 0 } else { set PresenceFichierBlast 1 } set LargeurMax [expr [winfo screenwidth . ] - 200] set HauteurMax [expr [winfo screenheight .] / 2 ] set LargeurFenetre [expr [winfo screenwidth . ] - 200] set HauteurFenetre [expr [winfo screenheight .] / 2 ] set HBox 25.0 set BordY 50.0 set BordX 125.0 ChargeCarteExonique TabExon $FichierExoniqueMap if {![info exists TabExon(NbArea)] || [set TabExon(NbArea)] == 0} {return ""} set NbArea [set TabExon(NbArea) ] set Nom [set TabExon(Nom) ] set Entete [set TabExon($Nom,Entete)] set TaillemRNA [set TabExon($Nom,Taille)] set Chromosome [set TabExon(Chromosome) ] set Contig [set TabExon(Contig) ] set Strand [set TabExon(Strand) ] set Sens [set TabExon(Sens) ] set SeqmRNA [string toupper [QueLaSequenceDuTFA $FichiermRNATFA]] if {[info exists TabExon(Exon,1,nArea)]} { set nArea [set TabExon(Exon,1,nArea)] if {$nArea == 1} {set Ecart 1000} else {set Ecart 10000} } for {set nArea 1} {$nArea <= $NbArea} {incr nArea} { if { [set TabExon(Area,$nArea,Type)] == "ABSENT"} { continue } elseif {[set TabExon(Area,$nArea,Type)] == "REPEAT"} { set nSubject [set TabExon(Area,$nArea,nSubject)] for {set i 1} {$i <= $nSubject} {incr i} { set DS [set TabExon(Area,$nArea,$i,DS)] set FS [set TabExon(Area,$nArea,$i,FS)] if {![info exists DSMin]} {set DSMin $DS} if {![info exists FSMax]} {set FSMax $FS} if {$FSMax < $FS } {set FSMax $FS} if {$DS < $DSMin } {set DSMin $DS} } } else { set DS [set TabExon(Area,$nArea,DS)] set FS [set TabExon(Area,$nArea,FS)] if {![info exists DSMin]} {set DSMin $DS} if {![info exists FSMax]} {set FSMax $FS} if {$FSMax < $FS } {set FSMax $FS} if {$DS < $DSMin } {set DSMin $DS} } } set TailleRecouvrement [expr $FSMax - $DSMin + 1 ] set TailleRegion [expr $TailleRecouvrement + 2 * $Ecart ] set RapportRegion [expr ($LargeurMax - 2 * $BordX) / $TailleRegion] set RapportmRNA [expr ($LargeurMax - 2 * $BordX) / $TaillemRNA ] set LesBoites {} for {set nArea 1} {$nArea <= $NbArea} {incr nArea} { set Type [set TabExon(Area,$nArea,Type) ] set Couleur [ColoriageDesExons $Type $Sens ] set DQ [set TabExon(Area,$nArea,DQ) ] set XDQ [expr $BordX + $DQ * $RapportmRNA] set FQ [set TabExon(Area,$nArea,FQ) ] set XFQ [expr $BordX + $FQ * $RapportmRNA] if {$Type == "ABSENT"} { set nAbsent [set TabExon($DQ,$FQ,nAbsent)] set EnteteDuTFA "$Nom $DQ $FQ Absent region $nAbsent" set Seq [string range $SeqmRNA $DQ $FQ] set SeqTFA [SequenceFormatTFA $Seq $EnteteDuTFA] lappend LesBoites [list "$Type" "$DQ" "$FQ" "$XDQ" "$XFQ" {} "$Couleur" "$nAbsent" "$SeqTFA"] continue } elseif {$Type == "REPEAT"} { set nSubject [set TabExon(Area,$nArea,nSubject)] set nRepeat [set TabExon($DQ,$FQ,nRepeat)] set EnteteDuTFA "$Nom $DQ $FQ Repeated region $nRepeat" set Seq [string range $SeqmRNA $DQ $FQ] set SeqTFA [SequenceFormatTFA $Seq $EnteteDuTFA] set LesSubjects {} for {set i 1} {$i <= $nSubject} {incr i} { set DS [set TabExon(Area,$nArea,$i,DS)] set FS [set TabExon(Area,$nArea,$i,FS)] if {$Sens == "+"} { set XDS [expr $BordX + ($DS - $DSMin + 1 + $Ecart) * $RapportRegion] set XFS [expr $BordX + ($FS - $DSMin + 1 + $Ecart) * $RapportRegion] } else { set XFS [expr $BordX + ($TailleRegion - ($DS - $DSMin + 1 + $Ecart)) * $RapportRegion] set XDS [expr $BordX + ($TailleRegion - ($FS - $DSMin + 1 + $Ecart)) * $RapportRegion] } lappend LesSubjects [list "$DS" "$FS" "$XDS" "$XFS"] } lappend LesBoites [list "$Type" "$DQ" "$FQ" "$XDQ" "$XFQ" "$LesSubjects" "$Couleur" "$nRepeat" "$SeqTFA"] } else { set LesSubjects {} set DS [set TabExon(Area,$nArea,DS)] set FS [set TabExon(Area,$nArea,FS)] set nExon [set TabExon($DQ,$FQ,nExon)] set EnteteDuTFA "$Nom $DQ $FQ Exonic region $nExon" set Seq [string range $SeqmRNA $DQ $FQ] set SeqTFA [SequenceFormatTFA $Seq $EnteteDuTFA] if {$Sens == "+"} { set XDS [expr $BordX + ($DS - $DSMin + 1 + $Ecart) * $RapportRegion] set XFS [expr $BordX + ($FS - $DSMin + 1 + $Ecart) * $RapportRegion] } else { set XFS [expr $BordX + ($TailleRegion - ($DS - $DSMin + 1 + $Ecart)) * $RapportRegion] set XDS [expr $BordX + ($TailleRegion - ($FS - $DSMin + 1 + $Ecart)) * $RapportRegion] } lappend LesSubjects [list "$DS" "$FS" "$XDS" "$XFS"] lappend LesBoites [list "$Type" "$DQ" "$FQ" "$XDQ" "$XFQ" "$LesSubjects" "$Couleur" "$nExon" "$SeqTFA"] continue } } set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] $K configure -background white set Police "Courier 10" set XTexteGauche [expr $BordX/2] set XTexteDroite [expr $LargeurMax - $BordX/2] set XMilieu [expr $LargeurMax/2] set YNom [expr $BordY /3 ] set YEntete [expr $BordY * 2 / 3 ] set YDQ $BordY set YFQ [expr $YDQ + $HBox ] set YMilieuQ [expr $YDQ + ($YFQ - $YDQ)/2] $K create text $XMilieu $YNom -text "$Nom" -font "$Police" $K create text $XMilieu $YEntete -text "$Entete\t$Strand" -font "$Police" $K create text $XTexteGauche $YMilieuQ -text "1" -font "$Police" $K create text $XTexteDroite $YMilieuQ -text "$TaillemRNA" -font "$Police" set YContig [expr $HauteurMax - $BordY + $BordY / 2] set YDS [expr $HauteurMax - $BordY - $HBox ] set YFS [expr $HauteurMax - $BordY ] set YMilieuS [expr $YDS + ($YFS - $YDS)/2 ] $K create text $XMilieu $YContig -text "$Chromosome:$Contig" -font "$Police" if {$Sens == "+"} { $K create text $XTexteGauche $YMilieuS -text [expr $DSMin - $Ecart] -font "$Police" $K create text $XTexteDroite $YMilieuS -text [expr $FSMax + $Ecart] -font "$Police" set ColorFillLine "blue" } else { $K create text $XTexteGauche $YMilieuS -text [expr $FSMax + $Ecart] -font "$Police" $K create text $XTexteDroite $YMilieuS -text [expr $DSMin - $Ecart] -font "$Police" set ColorFillLine "red" } $K create line $BordX $YMilieuS [expr $LargeurMax - $BordX] $YMilieuS -fill $ColorFillLine set YMinArc [expr $YFS - $HBox/2] set YMaxArc [expr $YMinArc + $HBox] foreach LaBoite $LesBoites { set Type [lindex $LaBoite 0] set DQ [lindex $LaBoite 1] set FQ [lindex $LaBoite 2] set XDQ [lindex $LaBoite 3] set XFQ [lindex $LaBoite 4] set LesSubjects [lindex $LaBoite 5] set Couleur [lindex $LaBoite 6] set nTypeRegion [lindex $LaBoite 7] set SeqTFA [lindex $LaBoite 8] $K create rectangle $XDQ $YDQ $XFQ $YFQ -outline $Couleur -fill $Couleur -tags [list "$DQ" "$FQ" "$LesSubjects" "$LesSubjects" "$Strand" "$Type" "$nTypeRegion" "$SeqTFA" "mRNA"] if {$Type == "ABSENT"} { continue } else { foreach UnSubject $LesSubjects { set DS [lindex $UnSubject 0] set FS [lindex $UnSubject 1] set XDS [lindex $UnSubject 2] set XFS [lindex $UnSubject 3] $K create rectangle $XDS $YDS $XFS $YFS -outline $Couleur -fill $Couleur -tags [list "$DQ" "$FQ" "$DS" "$FS" "$Strand" "$Type" "$nTypeRegion" "" "Contig"] if { $Type == "EXON" && $LiensAvecExons == "Yes" && $Sens == "+"} { $K create line $XDQ $YFQ $XDS $YDS -fill $ColorFillLine $K create line $XFQ $YFQ $XFS $YDS -fill $ColorFillLine } elseif {$Type == "EXON" && $LiensAvecExons == "Yes" && $Sens == "-"} { $K create line $XDQ $YFQ $XFS $YDS -fill $ColorFillLine $K create line $XFQ $YFQ $XDS $YDS -fill $ColorFillLine } elseif {$Type == "REPEAT" && $LiensAvecRepeats == "Yes" && $Sens == "-"} { $K create line $XDQ $YFQ $XFS $YDS -fill $Couleur $K create line $XFQ $YFQ $XDS $YDS -fill $Couleur } elseif {$Type == "REPEAT" && $LiensAvecRepeats == "Yes" && $Sens == "+"} { $K create line $XDQ $YFQ $XDS $YDS -fill $Couleur $K create line $XFQ $YFQ $XFS $YDS -fill $Couleur } if {$LiensEntreExons == "Yes" && $Type == "EXON"} { if {![info exists XMinArc]} {set XMinArc $XFS;continue} set XMaxArc $XDS $K create arc $XMinArc $YMinArc $XMaxArc $YMaxArc -extent -180. -style arc -outline purple -width 2 set XMinArc $XFS } } } } $K bind "mRNA" <1> "AfficheLaSeqTFA $K Enter" $K bind "mRNA" "DevoileLesInfosDeLaBoite $K %x %y Enter" $K bind "mRNA" "DevoileLesInfosDeLaBoite $K %x %y Leave" $K bind "Contig" "DevoileLesInfosDeLaBoite $K %x %y Enter" $K bind "Contig" "DevoileLesInfosDeLaBoite $K %x %y Leave" regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "LiaisonsExons On/Off\nLiaisonsRepeat On/Off\nArc On/Off"] bind $B <1> "IllustreLaCarteExonique $FichiermRNATFA $FichierExoniqueMap Yes $LiensAvecRepeats $LiensEntreExons" bind $B <2> "IllustreLaCarteExonique $FichiermRNATFA $FichierExoniqueMap No $LiensAvecRepeats $LiensEntreExons" bind $B "IllustreLaCarteExonique $FichiermRNATFA $FichierExoniqueMap $LiensAvecExons Yes $LiensEntreExons" bind $B "IllustreLaCarteExonique $FichiermRNATFA $FichierExoniqueMap $LiensAvecExons No $LiensEntreExons" bind $B "IllustreLaCarteExonique $FichiermRNATFA $FichierExoniqueMap $LiensAvecExons $LiensAvecRepeats Yes" bind $B "IllustreLaCarteExonique $FichiermRNATFA $FichierExoniqueMap $LiensAvecExons $LiensAvecRepeats No" if {$PresenceFichierBlast} { set C [BoutonneLaFenetre $w "Other ExonicMap\nShow the ExonicMap File\nShow the blast"] bind $C <1> "ChoixCarteExonique" bind $C "AfficheFichier $FichierExoniqueMap" bind $C "AfficheFichier $FichierBlast AvecSegAlignementAvecAligneurs" } else { set C [BoutonneLaFenetre $w "Other ExonicMap\nShow the ExonicMap File"] bind $C <1> "ChoixCarteExonique" bind $C "AfficheFichier $FichierExoniqueMap" } } proc IllustreLaCourbe {Liste} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set K [UnCanva $Largeur $Hauteur $Largeur $Hauteur WithY] set K [PlaceLaCourbe $Liste $K 0 $Hauteur 0 $Largeur] return $K } proc IllustreLaCourbeAvecInterQuartile {Liste} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set K [UnCanva $Largeur $Hauteur $Largeur $Hauteur WithY] set K [PlaceLaCourbeAvecInterQuartile $Liste $K 0 $Hauteur 0 $Largeur] return $K } proc IllustreLaToileDAraignee {Liste {Titre ""} {AvecTitre 1} {AvecLegende 1} {AvecVal 1} {AvecValEchelle 1} {AvecLigne 1}} { #if {[llength $Liste] <= 2} {return} set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set K [UnCanva $Largeur $Hauteur $Largeur $Hauteur WithY] PlaceLaToileDAraignee $Liste $K 0 $Hauteur 0 $Largeur $Titre $AvecTitre $AvecLegende $AvecVal $AvecValEchelle $AvecLigne regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "Avec / Sans Titre\nAvec / Sans Legende\nAvec / Sans Ligne"] bind $B <1> "IllustreLaToileDAraignee \{$Liste\} $Titre 1 $AvecLegende $AvecVal $AvecValEchelle $AvecLigne" bind $B <2> "IllustreLaToileDAraignee \{$Liste\} $Titre 0 $AvecLegende $AvecVal $AvecValEchelle $AvecLigne" bind $B "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre 1 $AvecVal $AvecValEchelle $AvecLigne" bind $B "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre 0 $AvecVal $AvecValEchelle $AvecLigne" bind $B "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre $AvecLegende $AvecVal $AvecValEchelle 1" bind $B "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre $AvecLegende $AvecVal $AvecValEchelle 0" set C [BoutonneLaFenetre $w "Avec / Sans Val\nAvec / Sans ValEchelle"] bind $C <1> "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre $AvecLegende 1 $AvecValEchelle $AvecLigne" bind $C <2> "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre $AvecLegende 0 $AvecValEchelle $AvecLigne" bind $C "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre $AvecLegende $AvecVal 1 $AvecLigne" bind $C "IllustreLaToileDAraignee \{$Liste\} $Titre $AvecTitre $AvecLegende $AvecVal 0 $AvecLigne" return $K } proc IllustreLeBlast {{FichierBlast ""} {ExpectDeRef ""} {NbSubject ""} {LesBIdsAutorises ""} {SelectedOrganism ""} {PourSvg ""}} { #rR IllustreLeBlast a remplacé IllustreLeBlastCanva dans /home/chalmel/gscopublic/blast.tcl #rR Ecrit par Frederic Chalmel #rR Modifié par Raymond pour qu'il crée un fichier Svg pour le web ;) Espionne $PourSvg #rR pour facilietr les tests foreach Param [list FichierBlast ExpectDeRef NbSubject LesBIdsAutorises SelectedOrganism] { if {[regexp "PourSvg" [set $Param]]} { set PourSvg [set $Param] set $Param "" } } if {$PourSvg==""} { set PourSvg [PourWscope] } #rR Ca semble tordu mais c'est pour permettre l'appel depuis Affiche où on ne fait que IllustreLeBlast FichierBlast if { $PourSvg!=0 && ! [regexp "FromHtmlBlastIllustre" $PourSvg]} { return [HtmlBlastIllustre $FichierBlast "/zscope" $ExpectDeRef $NbSubject $LesBIdsAutorises $SelectedOrganism] } #rR HtmlBlastIllustre appellera IllustreLeBlast en mettant PourSvgFromHtmlBlastIllustre if {[regexp "PourSvg" $PourSvg]} { set PourSvg 1 } if {$PourSvg==""} { set PourSvg [PourWscope] } if {$ExpectDeRef ==""} { set ExpectDeRef "NoLimit" } if {$NbSubject ==""} { set NbSubject "NoLimit" } if {$SelectedOrganism==""} { set SelectedOrganism "None" } if {$FichierBlast ==""} { set FichierBlast "/home/ripp/bac/b25.blast" } # if {$FichierBlast ==""} { set FichierBlast "/genomics/link/CilioCarta/blastp/HSAP00001" } if { ! [file exists $FichierBlast]} { if {[EstUnPAB $FichierBlast]} { set FB [GscopeFile $FichierBlast "blastp"] if {[file exists $FB]} { set FichierBlast $FB } } else { return "Sorry. $FichierBlast does not exist." } } set TailleQuery [TailleDeLaQueryDuBlast $FichierBlast] if {$TailleQuery == 0} {return "Sorry. The query length is 0."} if {$ExpectDeRef == "" } {set ExpectDeRef "1e-3" } elseif {$ExpectDeRef == "NoLimit"} {set ExpectDeRef "1e200"} if {$NbSubject == "" } {set NbSubject "250" } elseif {$NbSubject == "NoLimit"} {set NbSubject "1e200"} DepouilleLeBlast TabBlast $FichierBlast $ExpectDeRef $NbSubject set FichierTFA "" if {[EstUnPAB [file tail $FichierBlast]]} { set Nom [file tail $FichierBlast] set Dir [file dirname $FichierBlast] if {$Dir == "."} {set Dir [pwd]} set DirDuRepertoireDuGenome [lindex [split $Dir "/"] end] if {[regexp "^blastn|^blastx" $DirDuRepertoireDuGenome]} { set FichierTFA "[RepertoireDuGenome]/nucmask/$Nom" if {![file exists $FichierTFA]} { set FichierTFA "[RepertoireDuGenome]/nuctfa/$Nom" } } elseif {[regexp "^blastp|^tblastn" $DirDuRepertoireDuGenome]} { if {[file exists "[RepertoireDuGenome]/genscanpredictions/$Nom"]} { set FichierTFA "[RepertoireDuGenome]/genscanpredictions/$Nom" } else { set FichierTFA "[RepertoireDuGenome]/prottfa/$Nom" } } elseif {[regexp "^mrnablast" $DirDuRepertoireDuGenome]} { set FichierTFA "[RepertoireDuGenome]/mrnahuman/$Nom" } } if {![file exists $FichierTFA]} {set FichierTFA ""} if { $SelectedOrganism == "ToPreserve"} { set LesOrganismesAConserver [LaSelectionDeNoe 1 NoSave] set LesOrganismesAEliminer {} } elseif {$SelectedOrganism == "ToEliminate"} { set LesOrganismesAEliminer [LaSelectionDeNoe 1 NoSave] set LesOrganismesAConserver {} } else { set LesOrganismesAConserver {} set LesOrganismesAEliminer {} } if {$PourSvg} { set LargeurMax 1600 set HauteurMax 1600 set LargeurFenetre $LargeurMax set HauteurFenetre $HauteurMax } else { set LargeurMax [expr [winfo screenwidth .]*1/3 - 50] set HauteurMax [expr [winfo screenheight .]*2/3 ] set LargeurFenetre [expr [winfo screenwidth .]*1/3 - 50] set HauteurFenetre [expr [winfo screenheight .]*2/3 ] } set HBox 25.0 set HSmallBox 15.0 set BordY 50.0 set BordX 200.0 set EcartY 10.0 set YTypeDeBlast [expr $BordY/4] set YNomQuery [expr $BordY*2/3] set CentreX [expr $LargeurMax/2] set XTexteGauche [expr $BordX/2] set XTexteDroite [expr $LargeurMax - $BordX/2] set YDebut $BordY set YFin [expr $YDebut + $HBox] set YTaille [expr $YDebut + ($YFin - $YDebut)/2] set TailleMaxNomQuery 100 set Police "Courier 10" set ColorOutLine "White" set ColorFillLine "black" set Rapport [expr ($LargeurMax - 2 * $BordX) / $TailleQuery] set LesRegionsMasquees [LesRegionsMasqueesDeLaQuery $FichierTFA ] set LesPetitesRegionsDuBlast [LesRegionsDuTabBlast TabBlast] set OldDebutGdeRegion 0 set OldFinGdeRegion 0 set LesGdesRegionsDuBlast {} set LesPetitesRegionsOccupees {} foreach LaPetiteRegion $LesPetitesRegionsDuBlast { set Pos [lindex $LaPetiteRegion 0] set Frequence [lindex $LaPetiteRegion 1] set Debut [lindex $LaPetiteRegion 2] set Fin [lindex $LaPetiteRegion 3] set DebutGdeRegion [lindex $LaPetiteRegion 4] set FinGdeRegion [lindex $LaPetiteRegion 5] if {$FinGdeRegion < $DebutGdeRegion} { set tmp $FinGdeRegion;set FinGdeRegion $DebutGdeRegion;set DebutGdeRegion $tmp } lappend LesPetitesRegionsOccupees [list "$Debut" "$Fin"] if {$OldDebutGdeRegion == $DebutGdeRegion && $OldFinGdeRegion == $FinGdeRegion} {continue} lappend LesGdesRegionsDuBlast [list "$DebutGdeRegion" "$FinGdeRegion"] set OldDebutGdeRegion $DebutGdeRegion set OldFinGdeRegion $FinGdeRegion } foreach UneRegionMasquee $LesRegionsMasquees { set Debut [lindex $UneRegionMasquee 0] set Fin [lindex $UneRegionMasquee 1] lappend LesPetitesRegionsDuBlast [list "0" "N" "$Debut" "$Fin"] lappend LesPetitesRegionsOccupees [list "$Debut" "$Fin"] } set LesRegionsVides [LesRegionsVidesDeLaListe $LesPetitesRegionsOccupees $TailleQuery] foreach UneRegionVide $LesRegionsVides { set Debut [lindex $UneRegionVide 0] set Fin [lindex $UneRegionVide 1] lappend LesPetitesRegionsDuBlast [list "0" "0" "$Debut" "$Fin"] } set TousBIdAutorises 1 if { $LesBIdsAutorises != "" } { set TousBIdAutorises 0 foreach BId $LesBIdsAutorises {set BIdAutorise($BId) 1} } if {![info exists TabBlast(NbSubject)]} {Espionne "NbSubject n'existe pas" ; return ""} set NbSubjectDansBlast [set TabBlast(NbSubject) ] set NomQuery [set TabBlast(Query) ] set TypeDeBlast "[set TabBlast(TypeDeBlast)]: [set TabBlast(Database)]" set PetitNomQuery $NomQuery if {$TailleMaxNomQuery < [string length $NomQuery]} { set PetitNomQuery [string range $NomQuery 0 $TailleMaxNomQuery] append PetitNomQuery "..." } set EmpilementTotal 0 set LesBIds {} for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i)] if {$TousBIdAutorises || [info exists BIdAutorise($BId)]} { lappend LesBIds $BId } } set LesBanquesId {} set i 0 foreach BId $LesBIds { incr i if {$ExpectDeRef < [set TabBlast($BId,1,Expect)] || $NbSubject < $i} {break} set Access [set TabBlast($BId,Access) ] set EstCeUnDesOrga 0 if {$LesOrganismesAEliminer != "" || $LesOrganismesAConserver != ""} { foreach Orga [LesOrganismesEnStock $BId $Access] { Espionne "$BId\t$Access\t$Orga" if { $LesOrganismesAEliminer != "" && [regexp -nocase $Orga [join $LesOrganismesAEliminer "\t"]]} { set EstCeUnDesOrga 1 break } if { $LesOrganismesAConserver != "" && [regexp -nocase $Orga [join $LesOrganismesAConserver "\t"]]} { set EstCeUnDesOrga 1 break } } if {!$EstCeUnDesOrga && $SelectedOrganism == "ToPreserve" } {continue} if { $EstCeUnDesOrga && $SelectedOrganism == "ToEliminate"} {continue} } lappend LesBanquesId $BId set NbSegment [set TabBlast($BId,NbSegment)] set NMaxSubject 0 for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [set TabBlast($BId,$j,DQ)] set FQ [set TabBlast($BId,$j,FQ)] set DS [set TabBlast($BId,$j,DS)] set FS [set TabBlast($BId,$j,FS)] if {$FQ < $DQ} {set tmp $FQ;set FQ $DQ;set DQ $tmp} set LesPetitesRegionsRecouvertes {} set NMaxSegment 0 foreach UneRegion $LesPetitesRegionsDuBlast { set Frequence [lindex $UneRegion 1] set DebutPetiteRegion [lindex $UneRegion 2] set FinPetiteRegion [lindex $UneRegion 3] if {$Frequence == 0 || $Frequence == "N" } {continue} if {![info exists Empilement($DebutPetiteRegion,$FinPetiteRegion)]} { set Empilement($DebutPetiteRegion,$FinPetiteRegion) 0 } if {$DQ <= $DebutPetiteRegion && $FinPetiteRegion <= $FQ} { incr Empilement($DebutPetiteRegion,$FinPetiteRegion) if {$NMaxSegment < [set Empilement($DebutPetiteRegion,$FinPetiteRegion)]} { set NMaxSegment [set Empilement($DebutPetiteRegion,$FinPetiteRegion)] } lappend LesPetitesRegionsRecouvertes $UneRegion } } foreach UneRegion $LesPetitesRegionsRecouvertes { set DebutPetiteRegion [lindex $UneRegion 2] set FinPetiteRegion [lindex $UneRegion 3] set Empilement($DebutPetiteRegion,$FinPetiteRegion) $NMaxSegment } set PosYSurEtagereDe($BId,$j) [expr $EmpilementTotal + $NMaxSegment] if {$NMaxSubject < $NMaxSegment} {set NMaxSubject $NMaxSegment} } set EmpilementTotal [expr $EmpilementTotal + $NMaxSubject] foreach UneRegion $LesPetitesRegionsDuBlast { set Frequence [lindex $UneRegion 1] set DebutPetiteRegion [lindex $UneRegion 2] set FinPetiteRegion [lindex $UneRegion 3] if {$Frequence == 0 || $Frequence == "N" } {continue} unset Empilement($DebutPetiteRegion,$FinPetiteRegion) } } set HauteurMax [expr 2 * $BordY + $HBox + $EmpilementTotal * ($EcartY + $HSmallBox)] if {$HauteurMax < $HauteurFenetre} { set HauteurFenetre $HauteurMax } #rR Creation du Svg ******************************************************************************** if {$PourSvg} { set K "CanvaAsSvg" set Bind "BindSvg" set BoutonneLaFenetre "BoutonneLaFenetreSvg" $K create svg $LargeurMax $HauteurMax $FichierBlast } else { set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set Bind "bind" set BoutonneLaFenetre "BoutonneLaFenetre" } $K configure -background white LesBanquesIdEnStock $K $LesBanquesId set Milieu [expr $LargeurMax/2] FormateLesCoordonnees Milieu XTexteGauche XTexteDroite YTypeDeBlast YNomQuery YTaille YTaille $K create text $Milieu $YTypeDeBlast -text "$TypeDeBlast" -font "$Police" -tags [list common "$FichierBlast" "" "" "AvecTypeDeBlast"] $K create text $Milieu $YNomQuery -text "$PetitNomQuery" -font "$Police" -tags [list common "$FichierBlast" "" "" "AvecNomQuery"] $K create text $XTexteGauche $YTaille -text "1" -font "$Police" -tags [list common "$FichierBlast" "" "" "Avec1"] $K create text $XTexteDroite $YTaille -text "$TailleQuery" -font "$Police" -tags [list common "$FichierBlast" "" "" "AvecTailleQuery"] foreach UneRegion [lsort -increasing -integer -index 2 $LesPetitesRegionsDuBlast] { set Frequence [lindex $UneRegion 1] set Debut [lindex $UneRegion 2] set Fin [lindex $UneRegion 3] set XDebut [expr $BordX + $Debut * $Rapport ] set XFin [expr $BordX + $Fin * $Rapport ] set ColorFill [ColoriageDeLaFrequence $Frequence] set PositionX($Debut) $XDebut set PositionX($Fin) $XFin set ColorFill [HtmlCompatibleColor $ColorFill] FormateLesCoordonnees XDebut YDebut XFin YFin $K create rectangle $XDebut $YDebut $XFin $YFin -outline $ColorFill -fill $ColorFill -tags [list query "$FichierBlast" "$Frequence" "" "AvecQueryFrequence"] } set YIni [expr $BordY + $HBox + $EcartY] set m 0 foreach BId [LesBanquesIdEnStock $K] { set NbSegment [set TabBlast($BId,NbSegment) ] set Expect [set TabBlast($BId,1,Expect) ] set Subject [set TabBlast($BId,SubjectBrut)] set TailleSbjct [set TabBlast($BId,Taille) ] for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [set TabBlast($BId,$j,DQ)] set FQ [set TabBlast($BId,$j,FQ)] set AlignementBrut [set TabBlast($BId,$j,AlignBrut)] set TypeRegion [set TabBlast($BId,$j,Orientation)] if {$FQ < $DQ} {set tmp $FQ;set FQ $DQ;set DQ $tmp} if {$TypeRegion == "" && [regexp "BLASTP" $TypeDeBlast]} {set TypeRegion "Prot / Prot"} set ColorFill [ColoriageDuMapping $TypeRegion] set ColorFill [HtmlCompatibleColor $ColorFill] set n [set PosYSurEtagereDe($BId,$j)] set YDebut [expr $YIni + $n * ($EcartY + $HSmallBox)] set YFin [expr $YDebut + $HSmallBox] set XDebut [set PositionX($DQ)] set XFin [set PositionX($FQ)] FormateLesCoordonnees XDebut YDebut XFin YFin $K create rectangle $XDebut $YDebut $XFin $YFin -outline black -fill $ColorFill -tags [list "$BId-$j" "$FichierBlast" "$AlignementBrut" "" "AvecAlignement"] } set XDebutLine 0 set XFinLine $LargeurMax set n [set PosYSurEtagereDe($BId,1)] set YLine [expr $YIni + $n * ($EcartY + $HSmallBox) - $EcartY/2] set YTexte [expr $YIni + $n * ($EcartY + $HSmallBox) + $HSmallBox /2] FormateLesCoordonnees XDebutLine YLine XTexteGauche YTexte XTexteDroite $K create line $XDebutLine $YLine $XFinLine $YLine -fill $ColorFillLine $K create text $XTexteGauche $YTexte -text "$BId" -font "$Police" -tags [list "$BId" "$FichierBlast" "" "$Subject" "AvecAccess" ] $K create text $XTexteDroite $YTexte -text "$TailleSbjct $Expect" -font "$Police" -tags [list "$BId" "$FichierBlast" "" "" "AvecSubject" ] } regsub {\.canvas} $K "" w if {[info exists Nom]} { set B [$BoutonneLaFenetre $w "BLAST\nShow / Browse / Other"] $Bind $B <1> "AfficheFichier $FichierBlast AvecSegAlignementAvecAligneurs" $Bind $B <2> "IllustreLeBlast \[ButineArborescence\]" $Bind $B <3> "IllustreLeBlast \[ChoisirUnBlast $Nom\]" } else { set B [$BoutonneLaFenetre $w "BLAST\nShow / Browse"] $Bind $B <1> "AfficheFichier $FichierBlast AvecSegAlignementAvecAligneurs" $Bind $B <2> "IllustreLeBlast \[ButineArborescence\]" } set C [$BoutonneLaFenetre $w "APPEARANCES\nColor Subject/Query\nDefault" ] $Bind $C <1> "CouleursDesBoites" $Bind $C <2> "CouleursDesFrequences" $Bind $C "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject \[LesBanquesIdEnStock $K UnSet\]" set S [$BoutonneLaFenetre $w "OPTIONS\nNbSubject 250 / x /NoLimit\nExpect 1e-3/ x /NoLimit\nOrga Keep/Elim/Default"] $Bind $S <1> "IllustreLeBlast $FichierBlast $ExpectDeRef {} \[LesBanquesIdEnStock $K\]" $Bind $S <2> "IllustreLeBlast $FichierBlast $ExpectDeRef \[Entre\] \[LesBanquesIdEnStock $K\]" $Bind $S <3> "IllustreLeBlast $FichierBlast $ExpectDeRef NoLimit {}" $Bind $S "IllustreLeBlast $FichierBlast {} $NbSubject \[LesBanquesIdEnStock $K\]" $Bind $S "IllustreLeBlast $FichierBlast \[Entre\] $NbSubject \[LesBanquesIdEnStock $K\]" $Bind $S "IllustreLeBlast $FichierBlast NoLimit $NbSubject {}" $Bind $S "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject \[LesBanquesIdEnStock $K\] ToPreserve" $Bind $S "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject \[LesBanquesIdEnStock $K\] ToEliminate" $Bind $S "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject" $K bind "AvecAccess" <1> "MappingDeLaSelection $K" $K bind "AvecAccess" <2> "SubjectDeLaSelection $K" $K bind "AvecAccess" <3> "FetchDeLaSelection $K" $K bind "AvecSubject" <1> "MappingDeLaSelection $K" $K bind "AvecSubject" <2> "SubjectDeLaSelection $K" $K bind "AvecSubject" <3> "FetchDeLaSelection $K" $K bind "AvecAlignement" <1> "AlignementDeLaSelection $K" $K bind "AvecAlignement" <2> "SubjectDeLaSelection $K" $K bind "AvecAlignement" <3> "FetchDeLaSelection $K" if {$PourSvg} { $K close svg return [$K ContentOf svg] } regexp {^\.[^\.]+} $K w regsub {.canvas$} $K ".buttons.dismiss" BoutonDismiss $BoutonDismiss configure -command "LesBanquesIdEnStock $K UnSet ;destroy $w" return $K } proc IllustreLeBlastCanva {FichierBlast {ExpectDeRef NoLimit} {NbSubject NoLimit} {LesBIdsAutorises ""} {SelectedOrganism None}} { global RepertoireDuGenome if {![file exists $FichierBlast]} {return ""} set TailleQuery [TailleDeLaQueryDuBlast $FichierBlast] if {$TailleQuery == 0} {return ""} if {$ExpectDeRef == "" } {set ExpectDeRef "1e-3" } elseif {$ExpectDeRef == "NoLimit"} {set ExpectDeRef "1e200"} if {$NbSubject == "" } {set NbSubject "250" } elseif {$NbSubject == "NoLimit"} {set NbSubject "1e200"} DepouilleLeBlast TabBlast $FichierBlast $ExpectDeRef $NbSubject set FichierTFA "" if {[EstUnPAB [file tail $FichierBlast]]} { set Nom [file tail $FichierBlast] set Dir [file dirname $FichierBlast] if {$Dir == "."} {set Dir [pwd]} set DirDuRepertoireDuGenome [lindex [split $Dir "/"] end] if {[regexp "^blastn|^blastx" $DirDuRepertoireDuGenome]} { set FichierTFA "$RepertoireDuGenome/nucmask/$Nom" if {![file exists $FichierTFA]} { set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" } } elseif {[regexp "^blastp|^tblastn" $DirDuRepertoireDuGenome]} { if {[file exists "$RepertoireDuGenome/genscanpredictions/$Nom"]} { set FichierTFA "$RepertoireDuGenome/genscanpredictions/$Nom" } else { set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" } } elseif {[regexp "^mrnablast" $DirDuRepertoireDuGenome]} { set FichierTFA "$RepertoireDuGenome/mrnahuman/$Nom" } } if {![file exists $FichierTFA]} {set FichierTFA ""} if { $SelectedOrganism == "ToPreserve"} { set LesOrganismesAConserver [LaSelectionDeNoe 1 NoSave] set LesOrganismesAEliminer {} } elseif {$SelectedOrganism == "ToEliminate"} { set LesOrganismesAEliminer [LaSelectionDeNoe 1 NoSave] set LesOrganismesAConserver {} } else { set LesOrganismesAConserver {} set LesOrganismesAEliminer {} } set LargeurMax [expr [winfo screenwidth .] - 50] set HauteurMax [expr [winfo screenheight .]*2/3] set LargeurFenetre [expr [winfo screenwidth .] - 50] set HauteurFenetre [expr [winfo screenheight .]*2/3] set HBox 25.0 set HSmallBox 15.0 set BordY 50.0 set BordX 200.0 set EcartY 10.0 set YTypeDeBlast [expr $BordY/4] set YNomQuery [expr $BordY*2/3] set CentreX [expr $LargeurMax/2] set XTexteGauche [expr $BordX/2] set XTexteDroite [expr $LargeurMax - $BordX/2] set YDebut $BordY set YFin [expr $YDebut + $HBox] set YTaille [expr $YDebut + ($YFin - $YDebut)/2] set TailleMaxNomQuery 100 set Police "Courier 10" set ColorOutLine "White" set ColorFillLine "black" set Rapport [expr ($LargeurMax - 2 * $BordX) / $TailleQuery] set LesRegionsMasquees [LesRegionsMasqueesDeLaQuery $FichierTFA ] set LesPetitesRegionsDuBlast [LesRegionsDuTabBlast TabBlast] set OldDebutGdeRegion 0 set OldFinGdeRegion 0 set LesGdesRegionsDuBlast {} set LesPetitesRegionsOccupees {} foreach LaPetiteRegion $LesPetitesRegionsDuBlast { set Pos [lindex $LaPetiteRegion 0] set Frequence [lindex $LaPetiteRegion 1] set Debut [lindex $LaPetiteRegion 2] set Fin [lindex $LaPetiteRegion 3] set DebutGdeRegion [lindex $LaPetiteRegion 4] set FinGdeRegion [lindex $LaPetiteRegion 5] if {$FinGdeRegion < $DebutGdeRegion} { set tmp $FinGdeRegion;set FinGdeRegion $DebutGdeRegion;set DebutGdeRegion $tmp } lappend LesPetitesRegionsOccupees [list "$Debut" "$Fin"] if {$OldDebutGdeRegion == $DebutGdeRegion && $OldFinGdeRegion == $FinGdeRegion} {continue} lappend LesGdesRegionsDuBlast [list "$DebutGdeRegion" "$FinGdeRegion"] set OldDebutGdeRegion $DebutGdeRegion set OldFinGdeRegion $FinGdeRegion } foreach UneRegionMasquee $LesRegionsMasquees { set Debut [lindex $UneRegionMasquee 0] set Fin [lindex $UneRegionMasquee 1] lappend LesPetitesRegionsDuBlast [list "0" "N" "$Debut" "$Fin"] lappend LesPetitesRegionsOccupees [list "$Debut" "$Fin"] } set LesRegionsVides [LesRegionsVidesDeLaListe $LesPetitesRegionsOccupees $TailleQuery] foreach UneRegionVide $LesRegionsVides { set Debut [lindex $UneRegionVide 0] set Fin [lindex $UneRegionVide 1] lappend LesPetitesRegionsDuBlast [list "0" "0" "$Debut" "$Fin"] } set TousBIdAutorises 1 if { $LesBIdsAutorises != "" } { set TousBIdAutorises 0 foreach BId $LesBIdsAutorises {set BIdAutorise($BId) 1} } if {![info exists TabBlast(NbSubject)]} {Espionne "NbSubject n'existe pas" ; return ""} set NbSubjectDansBlast [set TabBlast(NbSubject) ] set NomQuery [set TabBlast(Query) ] set TypeDeBlast "[set TabBlast(TypeDeBlast)]: [set TabBlast(Database)]" set PetitNomQuery $NomQuery if {$TailleMaxNomQuery < [string length $NomQuery]} { set PetitNomQuery [string range $NomQuery 0 $TailleMaxNomQuery] append PetitNomQuery "..." } set EmpilementTotal 0 set LesBIds {} for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i)] if {$TousBIdAutorises || [info exists BIdAutorise($BId)]} { lappend LesBIds $BId } } set LesBanquesId {} set i 0 foreach BId $LesBIds { incr i if {$ExpectDeRef < [set TabBlast($BId,1,Expect)] || $NbSubject < $i} {break} set Access [set TabBlast($BId,Access) ] set EstCeUnDesOrga 0 if {$LesOrganismesAEliminer != "" || $LesOrganismesAConserver != ""} { foreach Orga [LesOrganismesEnStock $BId $Access] { Espionne "$BId\t$Access\t$Orga" if { $LesOrganismesAEliminer != "" && [regexp -nocase $Orga [join $LesOrganismesAEliminer "\t"]]} { set EstCeUnDesOrga 1 break } if { $LesOrganismesAConserver != "" && [regexp -nocase $Orga [join $LesOrganismesAConserver "\t"]]} { set EstCeUnDesOrga 1 break } } if {!$EstCeUnDesOrga && $SelectedOrganism == "ToPreserve" } {continue} if { $EstCeUnDesOrga && $SelectedOrganism == "ToEliminate"} {continue} } lappend LesBanquesId $BId set NbSegment [set TabBlast($BId,NbSegment)] set NMaxSubject 0 for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [set TabBlast($BId,$j,DQ)] set FQ [set TabBlast($BId,$j,FQ)] set DS [set TabBlast($BId,$j,DS)] set FS [set TabBlast($BId,$j,FS)] if {$FQ < $DQ} {set tmp $FQ;set FQ $DQ;set DQ $tmp} set LesPetitesRegionsRecouvertes {} set NMaxSegment 0 foreach UneRegion $LesPetitesRegionsDuBlast { set Frequence [lindex $UneRegion 1] set DebutPetiteRegion [lindex $UneRegion 2] set FinPetiteRegion [lindex $UneRegion 3] if {$Frequence == 0 || $Frequence == "N" } {continue} if {![info exists Empilement($DebutPetiteRegion,$FinPetiteRegion)]} { set Empilement($DebutPetiteRegion,$FinPetiteRegion) 0 } if {$DQ <= $DebutPetiteRegion && $FinPetiteRegion <= $FQ} { incr Empilement($DebutPetiteRegion,$FinPetiteRegion) if {$NMaxSegment < [set Empilement($DebutPetiteRegion,$FinPetiteRegion)]} { set NMaxSegment [set Empilement($DebutPetiteRegion,$FinPetiteRegion)] } lappend LesPetitesRegionsRecouvertes $UneRegion } } foreach UneRegion $LesPetitesRegionsRecouvertes { set DebutPetiteRegion [lindex $UneRegion 2] set FinPetiteRegion [lindex $UneRegion 3] set Empilement($DebutPetiteRegion,$FinPetiteRegion) $NMaxSegment } set PosYSurEtagereDe($BId,$j) [expr $EmpilementTotal + $NMaxSegment] if {$NMaxSubject < $NMaxSegment} {set NMaxSubject $NMaxSegment} } set EmpilementTotal [expr $EmpilementTotal + $NMaxSubject] foreach UneRegion $LesPetitesRegionsDuBlast { set Frequence [lindex $UneRegion 1] set DebutPetiteRegion [lindex $UneRegion 2] set FinPetiteRegion [lindex $UneRegion 3] if {$Frequence == 0 || $Frequence == "N" } {continue} unset Empilement($DebutPetiteRegion,$FinPetiteRegion) } } set HauteurMax [expr 2 * $BordY + $HBox + $EmpilementTotal * ($EcartY + $HSmallBox)] if {$HauteurMax < $HauteurFenetre} { set HauteurFenetre $HauteurMax } set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] $K configure -background white LesBanquesIdEnStock $K $LesBanquesId $K create text [expr $LargeurMax/2] $YTypeDeBlast -text "$TypeDeBlast" -font "$Police" $K create text [expr $LargeurMax/2] $YNomQuery -text "$PetitNomQuery" -font "$Police" $K create text $XTexteGauche $YTaille -text "1" -font "$Police" $K create text $XTexteDroite $YTaille -text "$TailleQuery" -font "$Police" foreach UneRegion [lsort -increasing -integer -index 2 $LesPetitesRegionsDuBlast] { set Frequence [lindex $UneRegion 1] set Debut [lindex $UneRegion 2] set Fin [lindex $UneRegion 3] set XDebut [expr $BordX + $Debut * $Rapport ] set XFin [expr $BordX + $Fin * $Rapport ] set ColorFill [ColoriageDeLaFrequence $Frequence] set PositionX($Debut) $XDebut set PositionX($Fin) $XFin $K create rectangle $XDebut $YDebut $XFin $YFin -outline $ColorFill -fill $ColorFill } set YIni [expr $BordY + $HBox + $EcartY] set m 0 foreach BId [LesBanquesIdEnStock $K] { set NbSegment [set TabBlast($BId,NbSegment) ] set Expect [set TabBlast($BId,1,Expect) ] set Subject [set TabBlast($BId,SubjectBrut)] set TailleSbjct [set TabBlast($BId,Taille) ] for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [set TabBlast($BId,$j,DQ)] set FQ [set TabBlast($BId,$j,FQ)] set AlignementBrut [set TabBlast($BId,$j,AlignBrut)] set TypeRegion [set TabBlast($BId,$j,Orientation)] if {$FQ < $DQ} {set tmp $FQ;set FQ $DQ;set DQ $tmp} if {$TypeRegion == "" && [regexp "BLASTP" $TypeDeBlast]} {set TypeRegion "Prot / Prot"} set ColorFill [ColoriageDuMapping $TypeRegion] set n [set PosYSurEtagereDe($BId,$j)] set YDebut [expr $YIni + $n * ($EcartY + $HSmallBox)] set YFin [expr $YDebut + $HSmallBox] set XDebut [set PositionX($DQ)] set XFin [set PositionX($FQ)] # $K create rectangle $XDebut $YDebut $XFin $YFin -outline black -fill $ColorFill -tags [list "$BId" "$FichierBlast" "$AlignementBrut" "$Subject" "AvecAlignement"] $K create rectangle $XDebut $YDebut $XFin $YFin -outline black -fill $ColorFill -tags [list "$BId" "$FichierBlast" "$AlignementBrut" "" "AvecAlignement"] } set XDebutLine 0 set XFinLine $LargeurMax set n [set PosYSurEtagereDe($BId,1)] set YLine [expr $YIni + $n * ($EcartY + $HSmallBox) - $EcartY/2] set YTexte [expr $YIni + $n * ($EcartY + $HSmallBox) + $HSmallBox /2] $K create line $XDebutLine $YLine $XFinLine $YLine -fill $ColorFillLine $K create text $XTexteGauche $YTexte -text "$BId" -font "$Police" -tags [list "$BId" "$FichierBlast" "" "$Subject" "AvecAccess" ] $K create text $XTexteDroite $YTexte -text "$TailleSbjct $Expect" -font "$Police" -tags [list "$BId" "$FichierBlast" "" "" "AvecSubject" ] } regsub {\.canvas} $K "" w if {[info exists Nom]} { set B [BoutonneLaFenetre $w "BLAST\nShow / Browse / Other"] bind $B <1> "AfficheFichier $FichierBlast AvecSegAlignementAvecAligneurs" bind $B <2> "IllustreLeBlast \[ButineArborescence\]" bind $B <3> "IllustreLeBlast \[ChoisirUnBlast $Nom\]" } else { set B [BoutonneLaFenetre $w "BLAST\nShow / Browse"] bind $B <1> "AfficheFichier $FichierBlast AvecSegAlignementAvecAligneurs" bind $B <2> "IllustreLeBlast \[ButineArborescence\]" } set C [BoutonneLaFenetre $w "APPEARANCES\nColor Subject/Query\nDefault" ] bind $C <1> "CouleursDesBoites" bind $C <2> "CouleursDesFrequences" bind $C "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject \[LesBanquesIdEnStock $K UnSet\]" set S [BoutonneLaFenetre $w "OPTIONS\nNbSubject 250 / x /NoLimit\nExpect 1e-3/ x /NoLimit\nOrga Keep/Elim/Default"] bind $S <1> "IllustreLeBlast $FichierBlast $ExpectDeRef {} \[LesBanquesIdEnStock $K\]" bind $S <2> "IllustreLeBlast $FichierBlast $ExpectDeRef \[Entre\] \[LesBanquesIdEnStock $K\]" bind $S <3> "IllustreLeBlast $FichierBlast $ExpectDeRef NoLimit {}" bind $S "IllustreLeBlast $FichierBlast {} $NbSubject \[LesBanquesIdEnStock $K\]" bind $S "IllustreLeBlast $FichierBlast \[Entre\] $NbSubject \[LesBanquesIdEnStock $K\]" bind $S "IllustreLeBlast $FichierBlast NoLimit $NbSubject {}" bind $S "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject \[LesBanquesIdEnStock $K\] ToPreserve" bind $S "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject \[LesBanquesIdEnStock $K\] ToEliminate" bind $S "IllustreLeBlast $FichierBlast $ExpectDeRef $NbSubject" $K bind "AvecAccess" <1> "MappingDeLaSelection $K" $K bind "AvecAccess" <2> "SubjectDeLaSelection $K" $K bind "AvecAccess" <3> "FetchDeLaSelection $K" $K bind "AvecSubject" <1> "MappingDeLaSelection $K" $K bind "AvecSubject" <2> "SubjectDeLaSelection $K" $K bind "AvecSubject" <3> "FetchDeLaSelection $K" $K bind "AvecAlignement" <1> "AlignementDeLaSelection $K" $K bind "AvecAlignement" <2> "SubjectDeLaSelection $K" $K bind "AvecAlignement" <3> "FetchDeLaSelection $K" regexp {^\.[^\.]+} $K w regsub {.canvas$} $K ".buttons.dismiss" BoutonDismiss $BoutonDismiss configure -command "LesBanquesIdEnStock $K UnSet ;destroy $w" return $K } proc IllustreLeBlastSurLArbreTaxonomique {FichierBlast} { if {![file exists $FichierBlast]} {return} set LesAccess {} foreach LAccess [LesHitsDuBlast_FC $FichierBlast] {lappend LesAccess [lindex $LAccess 0]} IllustreLesAccessSurLArbreTaxonomique $LesAccess return "" } proc IllustreLeCamembert {Titre LesParts {AvecLesLegendes Yes}} { Wup "LesParts liste du type [list [list effectif Couleur PetiteLegende GrandeLegende]]" set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set K [UnCanva $Largeur $Hauteur $Largeur $Hauteur WithY] set K [PlaceLeCamembert $LesParts $K 0 $Hauteur 0 $Largeur $Titre $AvecLesLegendes] return $K } proc IllustreLeCamembertOntologique {Type {LesGO ""}} { set Titre "ONTOLOGY : $Type" if {$LesGO == {}} {set Niveau 0;set LesGO [Onto $Type $Niveau]} set GONothing [Onto $Type Nothing] set LesParts {} foreach GO $LesGO { set nRequetes 0 set LesJumeaux {} set LesBlastP {} set LesAccess {} set LesClusters {} set LesRequetes {} set LesProjetsGscope {} set LesNoms {} if {[OntoExists $Type $GO LesJumeaux ]} {set LesJumeaux [Onto $Type $GO LesJumeaux]} if {[OntoMesGOExists $Type $GO LesBlastP ]} {set LesBlastP [OntoMesGO $Type $GO LesBlastP]} if {[OntoMesGOExists $Type $GO LesAccess ]} {set LesAccess [OntoMesGO $Type $GO LesAccess]} if {[OntoMesGOExists $Type $GO LesClusters]} {set LesClusters [OntoMesGO $Type $GO LesClusters]} if {[OntoMesGOExists $Type $GO LesRequetes]} {set LesRequetes [OntoMesGO $Type $GO LesRequetes]} if {[OntoMesGOExists $Type $GO LesNoms ]} {set LesNoms [OntoMesGO $Type $GO LesNoms]} if {[OntoMesGOExists $Type $GO LesProjetsGscope]} {set LesProjetsGscope [OntoMesGO $Type $GO LesProjetsGscope]} set ToutesLesRequetes [concat $LesBlastP $LesAccess $LesRequetes $LesNoms] set nRequetes [llength $ToutesLesRequetes] if {$nRequetes == 0} {continue} set LesEnfants [Onto $Type $GO LesEnfants ] set LesContributions [Onto $Type $GO LesContributions] set LesParents [Onto $Type $GO LesParents ] set LesConstituants [Onto $Type $GO LesConstituants ] set LesDefinitions [Onto $Type $GO LesDefinitions ] set Definition [lindex $LesDefinitions 0] set PetiteLegende "$GO $Definition" set GrandeLegende "My Name is\n$Type\n\nMy Nickname is\n$GO\n\nI am\n[join $LesDefinitions "\n"]" if {$LesJumeaux != ""} {append GrandeLegende "\n\nMy twins are\n[join $LesJumeaux " ; "]"} if {$LesParents != ""} {append GrandeLegende "\n\nMy Parents are\n[join $LesParents " ; "]"} if {$LesConstituants != ""} {append GrandeLegende "\n\nI am constituted by\n[join $LesConstituants " ; "]"} if {$LesEnfants != ""} {append GrandeLegende "\n\nMy children are\n[join $LesEnfants " ; "]"} if {$LesContributions != ""} {append GrandeLegende "\n\nI contribute to\n[join $LesContributions " ; "]"} if {$nRequetes != 0 } {append GrandeLegende "\n\nNumber of hits : $nRequetes"} if {$LesAccess != ""} {append GrandeLegende "\n\n[join $LesAccess " ; "]"} if {$LesProjetsGscope != ""} {append GrandeLegende "\n\n[join $LesProjetsGscope " ; "]"} if {$LesNoms != ""} {append GrandeLegende "\n\n[join $LesNoms " ; "]"} if {$LesBlastP != ""} {append GrandeLegende "\n\n[join $LesBlastP " ; "]"} if {$LesClusters != ""} {append GrandeLegende "\n\n[join $LesClusters " ; "]"} if {$LesRequetes != ""} {append GrandeLegende "\n\n[join $LesRequetes " ; "]"} set Color "" if {$GO == $GONothing} {set Color "white"} lappend LesParts [list "$nRequetes" "$PetiteLegende" "$GrandeLegende" "$Color"] } if {$LesParts == {} } {return ""} set LesPartsDeCamembert {} foreach LaPart $LesParts Color [GammeDeCouleursRVB_CHALMEL [llength $LesParts] Random] { if {[lindex $LaPart 3] == ""} { set LaPart [linsert $LaPart 1 $Color ] } else { set LaPart [linsert $LaPart 1 [lindex $LaPart 3]] } lappend LesPartsDeCamembert $LaPart } set K [IllustreLeCamembert $Titre $LesPartsDeCamembert] regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "Ontology function/process/component\nReset all my GO"] bind $B <1> "IllustreLeCamembertOntologique function " bind $B <2> "IllustreLeCamembertOntologique process " bind $B <3> "IllustreLeCamembertOntologique component" bind $B "ResetMesGO" $K bind "Part" <1> "DiviseLeGO $K $Type \"$LesGO\"" } proc IllustreLeCamembertOntologiqueDesBoitesGscope {LesNoms {Type ""}} { if {$Type == ""} {set Type [ChoixParmi [LesTypesOntologiques]]} Espionne "LOADING ONTOLOGY..." ChargeLesGODeLaBoiteGscope $LesNoms Espionne "ONTOLOGY LOADED..." IllustreLeCamembertOntologique $Type } proc IllustreLeCamembertOntologiqueDuCluster {FichierO2C2A2D2E {Cluster ""} {Type ""}} { if {$Cluster == ""} {set Cluster [ChoixParmi [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesClusters]]} if {$Type == ""} {set Type [ChoixParmi [LesTypesOntologiques]]} set LesNoms [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E Cluster $Cluster LesNoms] Espionne "LOADING ONTOLOGY..." Espionne $LesNoms ChargeLesGODeLaBoiteGscope $LesNoms Espionne "ONTOLOGY LOADED..." IllustreLeCamembertOntologique $Type } proc IllustreLeFichierDAccessSurLArbreTaxonomique {FichierAccess} { if {![file exists $FichierAccess]} {return} IllustreLesAccessSurLArbreTaxonomique [LesLignesDuFichier $FichierAccess] return } proc IllustreLeFichierDOrganismesSurLArbreTaxonomique {FichierOrga} { if {![file exists $FichierOrga]} {return} IllustreLArbreTaxonomique [LesLignesDuFichier $FichierOrga] return } proc IllustreLePathway {Pathway {Organisme ""} {LesElementsParticuliers ""}} { set FichierGif [FichierPathway $Pathway $Organisme "gif" ] if {![file exists $FichierGif]} {set FichierGif [FichierPathway $Pathway "" "gif"]} if {![file exists $FichierGif]} {return} foreach Elet $LesElementsParticuliers {set TabTmp($Elet) 1} set FichierConf [FichierPathway $Pathway $Organisme "conf"] set FichierConfMap [FichierPathway $Pathway "" "conf"] set PhotoPathway "Pathway_$Pathway" image create photo $PhotoPathway -file $FichierGif set LargeurMax [image width $PhotoPathway] set HauteurMax [image height $PhotoPathway] set LargeurFenetre [expr [winfo screenwidth .] * 4/5] set HauteurFenetre [expr [winfo screenheight .] * 4/5] if {$LargeurMax < $LargeurFenetre} {set LargeurFenetre $LargeurMax} if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set Definition [lindex [InterrogePathway $FichierConf Definition] 0] if {$Definition == ""} { set Definition [lindex [InterrogePathway $FichierConfMap Definition] 0] } set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre NoZoom $Definition 1] $K create image 0 0 -image $PhotoPathway -anchor nw set i 0 ####Les objects du pathway appartenant à l'organisme##### foreach LaCoord [concat [InterrogePathway $FichierConf LesCoordonnees] [InterrogePathway $FichierConfMap LesCoordonnees]] { incr i set Forme [lindex $LaCoord 0] set XMin [lindex $LaCoord 1] set YMin [lindex $LaCoord 2] set XMax [lindex $LaCoord 3] set YMax [lindex $LaCoord 4] if {[info exists TabTmp($Forme,$XMin,$YMin,$XMax,$YMax)]} {continue} set LesConcernes [InterrogePathway $FichierConf Forme $Forme XMin $XMin YMin $YMin XMax $XMax YMax $YMax LesConcernes] set LesConcernesMap [InterrogePathway $FichierConfMap Forme $Forme XMin $XMin YMin $YMin XMax $XMax YMax $YMax LesConcernes] if {$LesConcernesMap != ""} {set LesConcernes [lsort -unique [concat $LesConcernes $LesConcernesMap]]} if {$LesConcernes == {}} {continue} set TabTmp($Forme,$XMin,$YMin,$XMax,$YMax) 1 set Couleur [lindex [lindex $LesConcernes 0] end] foreach LeConcerne $LesConcernesMap { set Qui [lindex $LeConcerne 1] if {[info exists TabTmp($Qui)]} {set Couleur "red";break} } ###JE PREPARE LE TEXTE QUI VA ETRE AFFICHE DANS INFOBULLE############ set Def [InterrogeKEGG Pathway $Pathway Definition] set LesNoms {} set LeTexte {} lappend LeTexte "Pathway: $Pathway" lappend LeTexte "$Def" if {$Organisme != "" || $Organisme != "map"} {lappend LeTexte "Organism: $Organisme"} foreach LeConcerne [lsort -unique -index 0 $LesConcernes] { set Qui [lindex $LeConcerne 1] set Quoi [lindex $LeConcerne 0] set LesDefinitions [lindex $LeConcerne 3] set LesLiens {} set LesPathway {} set LesPAB [InterrogeMesKEGG $Quoi $Qui LesNoms ] if {$LesPAB != ""} {set LesNoms [concat $LesNoms $LesPAB]} if {$Quoi == "Kegg"} { set LesLiens [InterrogeKEGG Kegg $Qui LesLiens ] set LesPathway [InterrogeKEGG Kegg $Qui LesPathway ] } if {$Quoi == "EC" } { set LesPathway [InterrogeECCpdRn Element $Qui LesPathway ] } if {$Quoi == "Compound"} { set LesPathway [InterrogeECCpdRn Element $Qui LesPathway] } foreach Pathway $LesPathway { set LesPAB [InterrogeMesKEGG Pathway $Qui LesNoms ] if {$LesPAB != ""} {set LesNoms [concat $LesNoms $LesPAB]} } lappend LeTexte "" lappend LeTexte "$Quoi: $Qui" foreach Def $LesDefinitions {lappend LeTexte "$Def"} foreach Link $LesLiens {lappend LeTexte "Links: $Link"} if {$LesPathway != {}} {lappend LeTexte "Linked Pathway: [join $LesPathway " "]"} } lappend LeTexte "" set LesNoms [lsort -unique $LesNoms] if {$LesNoms != {}} {lappend LeTexte "Gscope Box: [join $LesNoms " "]"} set Texte [join $LeTexte "\n"] ###FIN : JE PREPARE LE TEXTE QUI VA ETRE AFFICHE DANS INFOBULLE############ if {$Forme != "oval"} { set PhotoObject "${PhotoPathway}_Object$i" image create photo $PhotoObject $PhotoObject copy $PhotoPathway -from $XMin $YMin $XMax $YMax $K create image $XMin $YMin -image $PhotoObject -anchor nw -tags [list "Object" $Texte $Pathway $Organisme $LesConcernes $LesElementsParticuliers] $K create $Forme $XMin $YMin $XMax $YMax -outline $Couleur -width 2 } else { $K create $Forme $XMin $YMin $XMax $YMax -fill $Couleur -tags [list "Object" $Texte $Pathway $Organisme $LesConcernes $LesElementsParticuliers] } } if {[info exists TabTmp]} {unset TabTmp} InterrogePathway unset $K bind "Object" <1> "IllustreLesPathwayLies $K " $K bind "Object" "AfficheInfoBulle $K %x %y Enter" $K bind "Object" "AfficheInfoBulle $K %x %y Leave" return $K } proc IllustreLePathway_AEffacer {Pathway {Organisme ""} {LesElementsParticuliers ""}} { set FichierGif [FichierPathway $Pathway $Organisme "gif" ] if {![file exists $FichierGif]} {set FichierGif [FichierPathway $Pathway "" "gif"]} if {![file exists $FichierGif]} {return} foreach Elet $LesElementsParticuliers {set TabTmp($Elet) 1} set FichierConf [FichierPathway $Pathway $Organisme "conf"] set FichierConfMap [FichierPathway $Pathway "" "conf"] set PhotoPathway "Pathway_$Pathway" image create photo $PhotoPathway -file $FichierGif set LargeurMax [image width $PhotoPathway] set HauteurMax [image height $PhotoPathway] set LargeurFenetre [expr [winfo screenwidth .] * 4/5] set HauteurFenetre [expr [winfo screenheight .] * 4/5] if {$LargeurMax < $LargeurFenetre} {set LargeurFenetre $LargeurMax} if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set Definition [lindex [InterrogePathway $FichierConf Definition] 0] if {$Definition == ""} { set Definition [lindex [InterrogePathway $FichierConfMap Definition] 0] } set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre NoZoom $Definition 1] $K create image 0 0 -image $PhotoPathway -anchor nw set i 0 ####Les objects du pathway appartenant à l'organisme##### foreach LaCoord [concat [InterrogePathway $FichierConf LesCoordonnees] [InterrogePathway $FichierConfMap LesCoordonnees]] { incr i set Forme [lindex $LaCoord 0] set XMin [lindex $LaCoord 1] set YMin [lindex $LaCoord 2] set XMax [lindex $LaCoord 3] set YMax [lindex $LaCoord 4] if {[info exists TabTmp($Forme,$XMin,$YMin,$XMax,$YMax)]} {continue} set LesConcernes [InterrogePathway $FichierConf Forme $Forme XMin $XMin YMin $YMin XMax $XMax YMax $YMax LesConcernes] set LesConcernesMap [InterrogePathway $FichierConfMap Forme $Forme XMin $XMin YMin $YMin XMax $XMax YMax $YMax LesConcernes] if {$LesConcernesMap != ""} {set LesConcernes [lsort -unique [concat $LesConcernes $LesConcernesMap]]} if {$LesConcernes == {}} {continue} set TabTmp($Forme,$XMin,$YMin,$XMax,$YMax) 1 set Couleur [lindex [lindex $LesConcernes 0] end] foreach LeConcerne $LesConcernesMap { set Qui [lindex $LeConcerne 1] if {[info exists TabTmp($Qui)]} {set Couleur "red";break} } ###JE PREPARE LE TEXTE QUI VA ETRE AFFICHE DANS INFOBULLE############ set Def [InterrogeKEGG Pathway $Pathway Definition] set LesNoms {} set LeTexte {} lappend LeTexte "Pathway: $Pathway" lappend LeTexte "$Def" if {$Organisme != "" || $Organisme != "map"} {lappend LeTexte "Organism: $Organisme"} foreach LeConcerne [lsort -unique -index 0 $LesConcernes] { set Qui [lindex $LeConcerne 1] set Quoi [lindex $LeConcerne 0] set LesDefinitions [lindex $LeConcerne 3] set LesLiens {} set LesPathway {} set LesPAB [InterrogeMesKEGG $Quoi $Qui LesNoms ] if {$LesPAB != ""} {set LesNoms [concat $LesNoms $LesPAB]} if {$Quoi == "Kegg"} { set LesLiens [InterrogeKEGG Kegg $Qui LesLiens ] set LesPathway [InterrogeKEGG Kegg $Qui LesPathway ] } if {$Quoi == "EC" } { set LesPathway [InterrogeECCpdRn Element $Qui LesPathway ] } if {$Quoi == "Compound"} { set LesPathway [InterrogeECCpdRn Element $Qui LesPathway] } foreach Pathway $LesPathway { set LesPAB [InterrogeMesKEGG Pathway $Qui LesNoms ] if {$LesPAB != ""} {set LesNoms [concat $LesNoms $LesPAB]} } lappend LeTexte "" lappend LeTexte "$Quoi: $Qui" foreach Def $LesDefinitions {lappend LeTexte "$Def"} foreach Link $LesLiens {lappend LeTexte "Links: $Link"} if {$LesPathway != {}} {lappend LeTexte "Linked Pathway: [join $LesPathway " "]"} } lappend LeTexte "" set LesNoms [lsort -unique $LesNoms] if {$LesNoms != {}} {lappend LeTexte "Gscope Box: [join $LesNoms " "]"} set Texte [join $LeTexte "\n"] ###FIN : JE PREPARE LE TEXTE QUI VA ETRE AFFICHE DANS INFOBULLE############ if {$Forme != "oval"} { set PhotoObject "${PhotoPathway}_Object$i" image create photo $PhotoObject $PhotoObject copy $PhotoPathway -from $XMin $YMin $XMax $YMax $K create image $XMin $YMin -image $PhotoObject -anchor nw -tags [list "Object" $Texte $Pathway $Organisme $LesConcernes $LesElementsParticuliers] $K create $Forme $XMin $YMin $XMax $YMax -outline $Couleur -width 2 } else { $K create $Forme $XMin $YMin $XMax $YMax -fill $Couleur -tags [list "Object" $Texte $Pathway $Organisme $LesConcernes $LesElementsParticuliers] } } if {[info exists TabTmp]} {unset TabTmp} InterrogePathway unset $K bind "Object" <1> "IllustreLesPathwayLies $K " $K bind "Object" "AfficheInfoBulle $K %x %y Enter" $K bind "Object" "AfficheInfoBulle $K %x %y Leave" return $K } proc IllustreLesAccessSurLArbreTaxonomique {LesAccessOuBanqueId} { set LesOrgas {} AskLesPagesInfos load $LesAccessOuBanqueId foreach Access $LesAccessOuBanqueId { set Page [AskLesPagesInfos ask $Access] if {$Page == ""} {continue} foreach Orga [LesOrgasDeLaPage_PageInfo $Page] { Espionne "$Access\t$Orga" lappend LesOrgas $Orga } } AskLesPagesInfos unset if {$LesOrgas == {}} {return} IllustreLArbreTaxonomique [ElimineLesRedondancesDansUneListe $LesOrgas] return } proc IllustreLesCamemberts {LesListes {AvecLesLegendes Yes} {nParLigne 1}} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set nTot [llength $LesListes] set LesCoords [CoordonneesDesPavesVerticaux $nParLigne $nTot $Hauteur $Largeur] set LesCoords [lsort -real -decreasing -index 4 $LesCoords] set K [UnCanva $Largeur [lindex [lindex $LesCoords 0] 4] $Largeur $Hauteur WithY] foreach Liste $LesListes LaCoord [lsort -integer -index 0 $LesCoords] { ScanLaListe $LaCoord n LMin HMin LMax HMax PlaceLeCamembert [lrange $Liste 1 end] $K $HMin $HMax $LMin $LMax [lindex $Liste 0] $AvecLesLegendes } return $K } proc IllustreLesChromosomes {{LesNoms ""} {Qui OnlyTheBest} {OldW ""} {Titre ""}} { if {$OldW!=""} { catch {after 10 Destroy $OldW} } set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierLocalisation [ChoixDuFichierLocalisationHuman] if {![file exists $FichierLocalisation] || $FichierLocalisation == ""} {return ""} set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} {return ""} ChargeFoldDesSequences Expression ChargeFichierLocalisation Tab $FichierLocalisation "" $LesNoms ChargeBandesCytologiques Genome $FichierBandesCytos set PoliceChromo "Courier 9 bold" set PoliceBande "Courier 4" set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] set TailleMaxBrasP [set Genome(TaillePMax) ] set TailleMaxBrasQ [set Genome(TailleQMax) ] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] set EcartEntreChromo $LargeurChromo set LargeurBoite [expr $EcartEntreChromo/3] set Facteur [expr $HauteurAffichage / $TailleMaxChromo] set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY $Titre] set LesChromosomes [set Genome(LesChromosomes)] set PosX $BordX foreach Chromosome $LesChromosomes { set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set EnAiJeVuAuMoinsUn 0 if {![info exists Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)]} {continue} foreach Nom [set Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set Tab($FichierLocalisation,Chromosome,$Chromosome,$Nom)] { set Debut [expr [lindex $LInfo 10 ]/1.e6] set Fin [expr [lindex $LInfo 11]/1.e6] set Sens [lindex $LInfo 12] set Info [lindex $LInfo 20] if {($Qui == "OnlyTheBest" && $Info == "") || $Sens == 0} {continue} set EnAiJeVuAuMoinsUn 1 set Fold [set Expression($Nom)] lappend LInfo $Fold lappend LInfo "Box" set ColorFill [CouleurDuFold $Fold] set Var 0 if {$Qui != "OnlyTheBest" && $Info == ""} {set Var [expr $LargeurBoite * 1.5]} set PosYMin [expr $ExtremiteDuChromosome + $Debut*$Facteur] set PosYMax [expr $ExtremiteDuChromosome + $Fin *$Facteur] ##Les sequences dans le sens - par rapport au genome seront du côté gauche if {$Sens == "-"} { $K create oval [expr $PosXMin-$LargeurBoite-$Var] $PosYMin [expr $PosXMin-$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } elseif {$Sens == "+"} { ##Les sequences dans le sens + par rapport au genome seront du côté droit $K create oval [expr $PosXMax+$Var] $PosYMin [expr $PosXMax+$LargeurBoite+$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } } } set ColorText "black" if {$EnAiJeVuAuMoinsUn} {set ColorText "Red"} $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] } $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill red LesNomsEnStock $K $LesNoms regsub {\.canvas} $K "" w $K bind "Chromosome" <1> "ChromosomeSelectionne $K \[LesNomsEnStock $K\] $Qui" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "OnlyBestLoc/All"] bind $B <1> "IllustreLesChromosomes \[LesNomsEnStock $K\] OnlyTheBest" bind $B <2> "IllustreLesChromosomes \[LesNomsEnStock $K\] All " set C [BoutonneLaFenetre $w "Histogramm"] bind $C <1> "ChoixHistogramme" set Boutons "$w.buttons" return $K } proc IllustreLesChromosomesMouse {{LesNoms ""} {Qui OnlyTheBest} {OldW ""} {Titre ""}} { if {$OldW!=""} { catch {after 10 Destroy $OldW} } #set RepLocalisation "[HumanGenomeDir]/Localisation" set RepLocalisation "/genomics/link/UCSCGenomes/Mus_musculus/database" set FichierLocalisation [ChoixDuFichierLocalisationMouse] if {![file exists $FichierLocalisation] || $FichierLocalisation == ""} {return ""} set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} {return ""} ChargeFoldDesSequences Expression ChargeFichierLocalisation Tab $FichierLocalisation "" $LesNoms ChargeBandesCytologiquesMouse Genome $FichierBandesCytos set PoliceChromo "Courier 9 bold" set PoliceBande "Courier 4" set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] set TailleMaxBrasP [set Genome(TaillePMax) ] set TailleMaxBrasQ [set Genome(TailleQMax) ] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] set EcartEntreChromo $LargeurChromo set LargeurBoite [expr $EcartEntreChromo/3] set Facteur [expr $HauteurAffichage / $TailleMaxChromo] set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY $Titre] set LesChromosomes [set Genome(LesChromosomes)] set PosX $BordX foreach Chromosome $LesChromosomes { set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set EnAiJeVuAuMoinsUn 0 if {![info exists Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)]} {continue} foreach Nom [set Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set Tab($FichierLocalisation,Chromosome,$Chromosome,$Nom)] { set Debut [expr [lindex $LInfo 10 ]/1.e6] set Fin [expr [lindex $LInfo 11]/1.e6] set Sens [lindex $LInfo 12] set Info [lindex $LInfo 20] if {($Qui == "OnlyTheBest" && $Info == "") || $Sens == 0} {continue} set EnAiJeVuAuMoinsUn 1 set Fold [set Expression($Nom)] lappend LInfo $Fold lappend LInfo "Box" set ColorFill [CouleurDuFold $Fold] set Var 0 if {$Qui != "OnlyTheBest" && $Info == ""} {set Var [expr $LargeurBoite * 1.5]} set PosYMin [expr $ExtremiteDuChromosome + $Debut*$Facteur] set PosYMax [expr $ExtremiteDuChromosome + $Fin *$Facteur] ##Les sequences dans le sens - par rapport au genome seront du côté gauche if {$Sens == "-"} { $K create oval [expr $PosXMin-$LargeurBoite-$Var] $PosYMin [expr $PosXMin-$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } elseif {$Sens == "+"} { ##Les sequences dans le sens + par rapport au genome seront du côté droit $K create oval [expr $PosXMax+$Var] $PosYMin [expr $PosXMax+$LargeurBoite+$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } } } set ColorText "black" if {$EnAiJeVuAuMoinsUn} {set ColorText "Red"} $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] } $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill red LesNomsEnStock $K $LesNoms regsub {\.canvas} $K "" w $K bind "Chromosome" <1> "ChromosomeSelectionne $K \[LesNomsEnStock $K\] $Qui" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "OnlyBestLoc/All"] bind $B <1> "IllustreLesChromosomes \[LesNomsEnStock $K\] OnlyTheBest" bind $B <2> "IllustreLesChromosomes \[LesNomsEnStock $K\] All " set C [BoutonneLaFenetre $w "Histogramm"] bind $C <1> "ChoixHistogramme" set Boutons "$w.buttons" return $K } proc IllustreLesChromosomes_AL {{PABouNomsInteressantsouListeouFichier PAB} {Qui OnlyTheBest} {OldW ""} {Titre ""}} { InterrogeOrf2Cluster2Access2Def2Expression unset set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" if {$OldW!=""} { catch {after 10 Destroy $OldW} } set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierLocalisation [ChoixDuFichierLocalisationHuman] if {![file exists $FichierLocalisation] || $FichierLocalisation == ""} {return ""} set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} {return ""} ChargeFoldDesSequences Expression ChargeFichierLocalisation Tab $FichierLocalisation "" $LesNoms ChargeBandesCytologiques Genome $FichierBandesCytos set ColorCluster(0) "green" set ColorCluster(2) "orange" set ColorCluster(4) "blue" set ColorCluster(5) "red" set ColorCluster(ICBP_D) "green" set ColorCluster(ICBP_U) "orange" set ColorCluster(TOPO_U) "blue" set ColorCluster(TOPO_D) "red" set PoliceChromo "Courier 15 bold" set PoliceBande "Courier 4" set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] set TailleMaxBrasP [set Genome(TaillePMax) ] set TailleMaxBrasQ [set Genome(TailleQMax) ] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] set EcartEntreChromo $LargeurChromo set LargeurBoite [expr $EcartEntreChromo/1.3] set Facteur [expr $HauteurAffichage / $TailleMaxChromo] set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY $Titre] $K configure -background white set LesChromosomes [set Genome(LesChromosomes)] set PosX $BordX foreach Chromosome $LesChromosomes { set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique_TL $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique_TL $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set EnAiJeVuAuMoinsUn 0 set LesNomsDuChromosome {} if {[info exists Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)]} { set LesNomsDuChromosome [set Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)] } foreach Nom $LesNomsDuChromosome { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] set ColorFill [set ColorCluster($Cluster)] foreach LInfo [set Tab($FichierLocalisation,Chromosome,$Chromosome,$Nom)] { set Debut [expr [lindex $LInfo 10 ]/1E6] set Fin [expr [lindex $LInfo 11]/1E6] set Sens [lindex $LInfo 12] set Info [lindex $LInfo 20] if {($Qui == "OnlyTheBest" && $Info == "") || $Sens == 0} {continue} set EnAiJeVuAuMoinsUn 1 set Fold [set Expression($Nom)] lappend LInfo $Fold lappend LInfo "Box" set Var 0 if {$Qui != "OnlyTheBest" && $Info == ""} {set Var [expr $LargeurBoite * 1.5]} set PosYMin [expr $ExtremiteDuChromosome + $Debut*$Facteur] set PosYMax [expr $ExtremiteDuChromosome + $Fin *$Facteur] ##Les sequences du cluster 0 ou 2 ou ICBP_D ou ICBP_U seront du côté gauche if {$Cluster == 0 || $Cluster == 2 || $Cluster == "ICBP_D" || $Cluster == "ICBP_U"} { $K create oval [expr $PosXMin-$LargeurBoite-$Var] $PosYMin [expr $PosXMin-$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } else { $K create oval [expr $PosXMax+$Var] $PosYMin [expr $PosXMax+$LargeurBoite+$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } } } set ColorText "black" if {$EnAiJeVuAuMoinsUn} {set ColorText "Red"} #$K create text $PosXNomChromo $PosYNomChromoSup -text [NumeroDuChromosome $Chromosome] -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text [NumeroDuChromosome $Chromosome] -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] } $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill black -dash {1 1} LesNomsEnStock $K $LesNoms regsub {\.canvas} $K "" w $K bind "Chromosome" <1> "ChromosomeSelectionne $K \[LesNomsEnStock $K\] $Qui" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "OnlyBestLoc/All"] bind $B <1> "IllustreLesChromosomes \[LesNomsEnStock $K\] OnlyTheBest" bind $B <2> "IllustreLesChromosomes \[LesNomsEnStock $K\] All " set C [BoutonneLaFenetre $w "Histogramm"] bind $C <1> "ChoixHistogramme" set Boutons "$w.buttons" InterrogeOrf2Cluster2Access2Def2Expression unset return $K } proc IllustreLesChromosomes_Human {{LesNoms ""} {Qui OnlyTheBest} {OldW ""} {Titre ""}} { #replique de IllustreLesChromosomes de chalmel if {$OldW!=""} { catch {after 10 Destroy $OldW} } set FichierLocalisation "/genomics/link/HNR/Localisation/BestLocalisation_Human" if {![file exists $FichierLocalisation] || $FichierLocalisation == ""} {return ""} set RepLocalisation "/genomics/link/UCSCGenomes/Homo_sapiens/database" set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} {return ""} ChargeFoldDesSequences Expression ChargeFichierLocalisation Tab $FichierLocalisation "" $LesNoms ChargeBandesCytologiques Genome $FichierBandesCytos set PoliceChromo "Courier 9 bold" set PoliceBande "Courier 4" set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] set TailleMaxBrasP [set Genome(TaillePMax) ] set TailleMaxBrasQ [set Genome(TailleQMax) ] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] set EcartEntreChromo $LargeurChromo set LargeurBoite [expr $EcartEntreChromo/3] set Facteur [expr $HauteurAffichage / $TailleMaxChromo] set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY $Titre] set LesChromosomes [set Genome(LesChromosomes)] set ListeDesChromosomes [split $LesChromosomes " "] foreach elmt $ListeDesChromosomes { if {[regexp {chr[0-9]?$} $elmt]} { lappend LesUns $elmt } elseif {[regexp {chr[0-9]{2}$} $elmt]} { lappend LesDeux $elmt } else {lappend LesSexes $elmt} } set ListeDesChromosomesRangee [concat $LesUns $LesDeux $LesSexes] set LesChromosomes [join $ListeDesChromosomesRangee " "] set PosX $BordX foreach Chromosome $LesChromosomes { set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set EnAiJeVuAuMoinsUn 0 if {![info exists Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)]} { $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] continue } foreach Nom [set Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set Tab($FichierLocalisation,Chromosome,$Chromosome,$Nom)] { set Debut [expr [lindex $LInfo 10 ]/1.e6] set Fin [expr [lindex $LInfo 11]/1.e6] set Sens [lindex $LInfo 12] set Info [lindex $LInfo 20] if {($Qui == "OnlyTheBest" && $Info == "") || $Sens == 0} {continue} set EnAiJeVuAuMoinsUn 1 set Fold [set Expression($Nom)] lappend LInfo $Fold lappend LInfo "Box" set ColorFill [CouleurDuFold $Fold] set Var 0 if {$Qui != "OnlyTheBest" && $Info == ""} {set Var [expr $LargeurBoite * 1.5]} set PosYMin [expr $ExtremiteDuChromosome + $Debut*$Facteur] set PosYMax [expr $ExtremiteDuChromosome + $Fin *$Facteur] ##Les sequences dans le sens - par rapport au genome seront du cote gauche if {$Sens == "-"} { $K create oval [expr $PosXMin-$LargeurBoite-$Var] $PosYMin [expr $PosXMin-$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } elseif {$Sens == "+"} { ##Les sequences dans le sens + par rapport au genome seront du cote droit $K create oval [expr $PosXMax+$Var] $PosYMin [expr $PosXMax+$LargeurBoite+$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } } } set ColorText "black" if {$EnAiJeVuAuMoinsUn} {set ColorText "Red"} $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] } $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill red LesNomsEnStock $K $LesNoms regsub {\.canvas} $K "" w $K bind "Chromosome" <1> "ChromosomeSelectionne $K \[LesNomsEnStock $K\] $Qui" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "OnlyBestLoc/All"] bind $B <1> "IllustreLesChromosomes \[LesNomsEnStock $K\] OnlyTheBest" bind $B <2> "IllustreLesChromosomes \[LesNomsEnStock $K\] All " set C [BoutonneLaFenetre $w "Histogramm"] bind $C <1> "ChoixHistogramme" set Boutons "$w.buttons" return $K } proc IllustreLesChromosomes_TL {{PABouNomsInteressantsouListeouFichier PAB} {Qui OnlyTheBest} {OldW ""} {Titre ""}} { set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" if {$OldW!=""} { catch {after 10 Destroy $OldW} } set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierLocalisation [ChoixDuFichierLocalisationHuman] if {![file exists $FichierLocalisation] || $FichierLocalisation == ""} {return ""} set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} {return ""} ChargeFoldDesSequences Expression ChargeFichierLocalisation Tab $FichierLocalisation "" $LesNoms ChargeBandesCytologiques Genome $FichierBandesCytos set ColorCluster(0) "green" set ColorCluster(2) "orange" set ColorCluster(4) "blue" set ColorCluster(5) "red" set ColorCluster(ICBP_D) "green" set ColorCluster(ICBP_U) "orange" set ColorCluster(TOPO_U) "blue" set ColorCluster(TOPO_D) "red" set PoliceChromo "Courier 15 bold" set PoliceBande "Courier 4" set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] set TailleMaxBrasP [set Genome(TaillePMax) ] set TailleMaxBrasQ [set Genome(TailleQMax) ] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] set EcartEntreChromo $LargeurChromo set LargeurBoite [expr $EcartEntreChromo/3] set Facteur [expr $HauteurAffichage / $TailleMaxChromo] set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY $Titre] $K configure -background white set LesChromosomes [set Genome(LesChromosomes)] set PosX $BordX foreach Chromosome $LesChromosomes { set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique_TL $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique_TL $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set EnAiJeVuAuMoinsUn 0 set LesNomsDuChromosome {} if {[info exists Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)]} { set LesNomsDuChromosome [set Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)] } foreach Nom $LesNomsDuChromosome { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] set ColorFill [set ColorCluster($Cluster)] foreach LInfo [set Tab($FichierLocalisation,Chromosome,$Chromosome,$Nom)] { set Debut [expr [lindex $LInfo 10 ]/1E6] set Fin [expr [lindex $LInfo 11]/1E6] set Sens [lindex $LInfo 12] set Info [lindex $LInfo 20] if {($Qui == "OnlyTheBest" && $Info == "") || $Sens == 0} {continue} set EnAiJeVuAuMoinsUn 1 set Fold [set Expression($Nom)] lappend LInfo $Fold lappend LInfo "Box" set Var 0 if {$Qui != "OnlyTheBest" && $Info == ""} {set Var [expr $LargeurBoite * 1.5]} set PosYMin [expr $ExtremiteDuChromosome + $Debut*$Facteur] set PosYMax [expr $ExtremiteDuChromosome + $Fin *$Facteur] ##Les sequences du cluster 0 ou 2 ou ICBP_D ou ICBP_U seront du côté gauche if {$Cluster == 0 || $Cluster == 2 || $Cluster == "ICBP_D" || $Cluster == "ICBP_D"} { $K create oval [expr $PosXMin-$LargeurBoite-$Var] $PosYMin [expr $PosXMin-$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } else { $K create oval [expr $PosXMax+$Var] $PosYMin [expr $PosXMax+$LargeurBoite+$Var] $PosYMax -outline $ColorFill -fill $ColorFill -tags $LInfo } } } set ColorText "black" if {$EnAiJeVuAuMoinsUn} {set ColorText "Red"} #$K create text $PosXNomChromo $PosYNomChromoSup -text [NumeroDuChromosome $Chromosome] -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text [NumeroDuChromosome $Chromosome] -font "$PoliceChromo" -fill $ColorText -tags [list $Chromosome $FichierLocalisation "Chromosome"] } $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill black -dash {1 1} LesNomsEnStock $K $LesNoms regsub {\.canvas} $K "" w $K bind "Chromosome" <1> "ChromosomeSelectionne $K \[LesNomsEnStock $K\] $Qui" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "OnlyBestLoc/All"] bind $B <1> "IllustreLesChromosomes \[LesNomsEnStock $K\] OnlyTheBest" bind $B <2> "IllustreLesChromosomes \[LesNomsEnStock $K\] All " set C [BoutonneLaFenetre $w "Histogramm"] bind $C <1> "ChoixHistogramme" set Boutons "$w.buttons" return $K } proc IllustreLesCourbes {LesListes {nParLigne 1}} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set nTot [llength $LesListes] set LesCoords [CoordonneesDesPavesVerticaux $nParLigne $nTot $Hauteur $Largeur] set LesCoords [lsort -real -decreasing -index 4 $LesCoords] set K [UnCanva $Largeur [lindex [lindex $LesCoords 0] 4] $Largeur $Hauteur WithY] foreach Liste $LesListes LaCoord [lsort -integer -index 0 $LesCoords] { ScanLaListe $LaCoord n LMin HMin LMax HMax set K [PlaceLaCourbe $Liste $K $HMin $HMax $LMin $LMax] } return $K } proc IllustreLesCourbesAvecInterQuartile {LesListes {nParLigne 1}} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set nTot [llength $LesListes] set LesCoords [CoordonneesDesPavesVerticaux $nParLigne $nTot $Hauteur $Largeur] set LesCoords [lsort -real -decreasing -index 4 $LesCoords] set K [UnCanva $Largeur [lindex [lindex $LesCoords 0] 4] $Largeur $Hauteur WithY] foreach Liste $LesListes LaCoord [lsort -integer -index 0 $LesCoords] { ScanLaListe $LaCoord n LMin HMin LMax HMax set K [PlaceLaCourbeAvecInterQuartile $Liste $K $HMin $HMax $LMin $LMax] } return $K } proc IllustreLesDomaines {Nom {AvecOuSansLegende AvecLegende} {JusteIPR 0}} { ###titre avec access et definition de la prot de ref set AccessDuChoisi "" set InfoSeq [InterrogeProtAndmRNAChoisis $Nom SeqChoisie] if {$InfoSeq != "" && $InfoSeq == "SeqOK"} { set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {$AccessProt != "NoProtein"} {set AccessDuChoisi $AccessProt} } else { set AccessProt [string toupper [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access]] if {$AccessProt != "" } {set AccessDuChoisi $AccessProt} } set DefProt "" if {$AccessDuChoisi != ""} { set DefProt [join [LaDefinitionDeLaProt_PageInfo [PageInfo $AccessDuChoisi protein]] " " ] set Titre "$Nom $AccessDuChoisi $DefProt" } else { set Titre "$Nom NoAccess" } Espionne "$Titre $AccessDuChoisi" set NbCarParLigne 100 set LeTitre {} while {$NbCarParLigne <= [string length $Titre]} { lappend LeTitre [string range $Titre 0 [expr $NbCarParLigne-1]] set Titre [string range $Titre $NbCarParLigne end] } if {0 < [string length $Titre]} {lappend LeTitre $Titre} set Titre [join $LeTitre "\n"] ###################################################### set LargeurFenetre [expr [winfo screenwidth .] - 100] set HauteurFenetre [expr [winfo screenheight .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set Bord 100 set LargeurAffichage [expr $LargeurFenetre - 2 * $Bord] if {0} { set LargeurBoite 10 set LargeurProt 20 set Ecart 25 } else { set LargeurBoite 20 set LargeurProt 30 set Ecart 40 } set File "[RepertoireDuGenome]/msf/$Nom" if {![file exists $File]} {return} DecortiqueUnMSF $File LesSequences Sequences if {[info exists Sequences($Nom)]} { set Query $Nom } elseif {[info exists Sequences(QUERY_PROTEIN)]} { set Query "QUERY_PROTEIN" } else { return } set SeqProt [string toupper [set Sequences($Query)]] regsub -all {[^A-Z]} $SeqProt "" SeqProtSansPoint set SeqTFAProt [SequenceFormatTFA $SeqProtSansPoint [string trim "$Nom $AccessDuChoisi"]] set LaSeqProt [split $SeqProt ""] set LaSeqProtSansPoint [split $SeqProtSansPoint ""] set TailleProt [llength $LaSeqProtSansPoint ] set TabColorDuType(INTERPRO) red set TabColorDuType(PFAM) blue set TabColorDuType(FEATURE) darkgreen set LaGammeDeRouge [GammeDeCouleurRouVouB R 100] set LaGammeDeVert [GammeDeCouleurRouVouB V 100] set LaGammeDeBleu [GammeDeCouleurRouVouB B 100] for {set i 0} {$i < $TailleProt} {incr i} {set TabProfil($i) 0} set Facteur [expr $LargeurAffichage * 1.0 / $TailleProt] set LesDomaines {} foreach LeDomaine [InterrogeDomaines $Nom LesDomaines] { set Type [lindex $LeDomaine 0] if {$JusteIPR && $Type != "INTERPRO"} {continue} set Domaine [lindex $LeDomaine 1] set Def [lindex $LeDomaine 2] set Debut [lindex $LeDomaine 3] set Fin [lindex $LeDomaine 4] set Id [lindex $LeDomaine 5] set Taille [expr $Fin - $Debut + 1 ] set DX [expr $Bord + $Facteur * $Debut] set FX [expr $Bord + $Facteur * $Fin ] set Seq [join [lrange $LaSeqProtSansPoint [expr $Debut-1] [expr $Fin-1]] ""] lappend LesDomaines [list $Type $Domaine $Def $Debut $Fin $Taille $Id $Seq $DX $FX] } set XMinProt [expr $Bord + $Facteur * 1 ] set XMaxProt [expr $Bord + $Facteur * $TailleProt] set YMinProt $Bord set YMaxProt [expr $YMinProt + $LargeurProt] set YDeRef [expr $YMaxProt + $Ecart] set YMax $YDeRef set LesDomainesAvecToutesLesCoordonnees {} set TypeDeRef "" set ValMaxDeMax -1e300 foreach LeDomaine [lsort -index 0 -decreasing [lsort -index 5 -real $LesDomaines]] { set Type [lindex $LeDomaine 0 ] set Domaine [lindex $LeDomaine 1 ] set Def [lindex $LeDomaine 2 ] set Debut [lindex $LeDomaine 3 ] set Fin [lindex $LeDomaine 4 ] set Id [lindex $LeDomaine 6 ] set Seq [lindex $LeDomaine 7 ] if {$TypeDeRef == "" } {set TypeDeRef $Type} if {$TypeDeRef != $Type} { for {set i 0} {$i < $TailleProt} {incr i} {set TabProfil($i) $ValMaxDeMax} } set ValMax -1e300 for {set i [expr $Debut-1]} {$i < $Fin} {incr i} { set Val [set TabProfil($i)] if {$ValMax < $Val} {set ValMax $Val} } if {$ValMaxDeMax <= $ValMax} {set ValMaxDeMax [expr $ValMax + 1]} set YMin [expr $YDeRef + $ValMax * ($LargeurBoite + $Ecart)] set YMax [expr $YMin + $LargeurBoite ] #Espionne "$TypeDeRef $Type $Domaine $Debut $Fin $Taille $YMin $YMax $ValMaxDeMax" lappend LeDomaine $YMin $YMax lappend LesDomainesAvecToutesLesCoordonnees $LeDomaine incr ValMax for {set i [expr $Debut-1]} {$i < $Fin} {incr i} {set TabProfil($i) $ValMax} set TypeDeRef $Type } set HauteurMax [expr $YMax + $Bord] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] $K create text [expr $LargeurFenetre/2] [expr $Bord/2] -text $Titre -font "Arial 12 bold" -tags [list $Nom Box] $K create rectangle $XMinProt $YMinProt $XMaxProt $YMaxProt -fill darkgrey -outline grey -tags [list $Nom "" "" "" "" "" "SeqTFA" $SeqTFAProt] $K create text [expr $Bord/2] [expr $YMinProt + ($YMaxProt-$YMinProt)/2] -text "1" -font "Courier 12 bold" -tags [list $Nom Box] $K create text [expr $LargeurFenetre - $Bord/2] [expr $YMinProt + ($YMaxProt-$YMinProt)/2] -text "$TailleProt" -font "Courier 12 bold" -tags [list $Nom Box] set TypeDeRef "" set YOld $YDeRef foreach LeDomaine [lsort -index 10 -real $LesDomainesAvecToutesLesCoordonnees] { set Type [lindex $LeDomaine 0 ] set Domaine [lindex $LeDomaine 1 ] set Def [lindex $LeDomaine 2 ] set Debut [lindex $LeDomaine 3 ] set Fin [lindex $LeDomaine 4 ] set Id [lindex $LeDomaine 6 ] set Seq [lindex $LeDomaine 7 ] set XMin [lindex $LeDomaine 8 ] set XMax [lindex $LeDomaine 9 ] set YMin [lindex $LeDomaine 10] set YMax [lindex $LeDomaine 11] set Color [set TabColorDuType($Type)] if {![info exists Tab($Type)]} { set Tab($Type) 1 $K create text [expr $Bord/2] [expr $YMin + ($YMax-$YMin)/2] -text $Type -fill $Color -font "Courier 11 bold" } if {$TypeDeRef == "" } {set TypeDeRef $Type} if {$TypeDeRef != $Type} { set YLine [expr $YOld + ($YMin - $YOld) / 2] $K create line $XMinProt $YLine $XMaxProt $YLine -dash {2 4} -fill $Color } set PId [expr round($Id * 100)] if {$Type == "INTERPRO"} {set Couleur [lindex $LaGammeDeRouge [expr $PId - 1]]} if {$Type == "PFAM" } {set Couleur [lindex $LaGammeDeBleu [expr $PId - 1]]} if {$Type == "FEATURE" } {set Couleur [lindex $LaGammeDeVert [expr $PId - 1]]} set SeqTFA [SequenceFormatTFA $Seq "$Nom $Type $Domaine ($PId%) from $Debut to $Fin Definition $Def"] set Texte "$Type $Domaine\n$Def\nFrom $Debut to $Fin\nIdentity with this Domain : $PId %\n\n$SeqTFA" if {$AvecOuSansLegende == "AvecLegende"} { $K create text [expr $XMin + ($XMax-$XMin)/2] [expr $YMax + $Ecart/2] -text "$Type $Domaine\n$Def" -font {courier 11 bold} } #Espionne "$TypeDeRef $Type $Domaine $Debut $Fin $Taille $YMin $YMax $ValMaxDeMax $Id" $K create rectangle $XMin $YMin $XMax $YMax -fill $Couleur -outline $Color -tags [list Domaine $Texte "" "" "" "" "SeqTFA" $SeqTFA] set TypeDeRef $Type set YOld $YMax } if {[info exists Tab]} {unset Tab} $K bind "Box" <1> "AfficheFicheInfo $K" $K bind "SeqTFA" <1> "AfficheLaSeqTFA $K Enter" $K bind "Domaine" "DevoileLaValeur $K %x %y Enter" $K bind "Domaine" "DevoileLaValeur $K %x %y Leave" return } proc IllustreLesExpression {FichierO2C2A2D2E {AvecNormalisation 0} {AvecMemeEchelleY 0} {LesNoms ""} {LesConditions ""} {LesPointsTemporels ""} {nParLigne 3}} { if {![file exists $FichierO2C2A2D2E]} {return} if {$LesNoms == ""} {set LesNoms [MorceauxChoisis [ListeDesPABs]]} if {$LesConditions == ""} {set LesConditions [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesConditions]]} if {$LesPointsTemporels == ""} {set LesPointsTemporels [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesPointsTemporels]]} set LesCouleurs [GammeDeCouleursRVB_CHALMEL [llength $LesConditions]] if {$AvecMemeEchelleY} {set ValYMin 1e200;set ValYMax -1e200} set ToutesLesCourbes {} foreach Nom $LesNoms { if {$AvecNormalisation} { set LesStats [MoyenneEcartMinMaxCumulLong [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom LesExpressions]] set ExprMoyenne [lindex $LesStats 0] set ExprET [lindex $LesStats 1] } set Def [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom Definition] set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom Cluster] set i 0 set LesCourbes [list "$Nom\n$Def"] if {!$AvecMemeEchelleY} {set ValYMin 1e200;set ValYMax -1e200} foreach What $LesConditions { if {$What == ""} {continue} set LesPoints {} foreach When $LesPointsTemporels { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel $When Condition $What Expression] if {$Expr == ""} {continue} if {$AvecNormalisation} { set Expr [expr $Expr - $ExprMoyenne] if {$ExprET != 0} {set Expr [expr $Expr / $ExprET]} } if {$Expr < $ValYMin} {set ValYMin $Expr} if {$ValYMax < $Expr } {set ValYMax $Expr} lappend LesPoints [list $When $Expr 0] } if {$LesPoints == {}} {continue} set Couleur [lindex $LesCouleurs $i] incr i lappend LesCourbes [list $What $Couleur $LesPoints] } if {[llength $LesCourbes] <= 1} {continue} set LesCourbes [linsert $LesCourbes 1 $ValYMin] set LesCourbes [linsert $LesCourbes 2 $ValYMax] lappend ToutesLesCourbes $LesCourbes } if {$AvecMemeEchelleY} { set ToutesLesCourbes_old $ToutesLesCourbes set ToutesLesCourbes {} foreach LesCourbes $ToutesLesCourbes_old { set LesCourbes [lreplace $LesCourbes 1 1 $ValYMin] set LesCourbes [lreplace $LesCourbes 2 2 $ValYMax] lappend ToutesLesCourbes $LesCourbes } } IllustreLesCourbes $ToutesLesCourbes $nParLigne return } proc IllustreLesExpressionDesClusters {FichierO2C2A2D2E {MoyenneOuMediane ""} {AvecTousLesClones ""} {AvecMemeEchelleY 1} {LesClusters ""} {LesConditions ""} {LesPointsTemporels ""}} { if {![file exists $FichierO2C2A2D2E]} {return} if {$MoyenneOuMediane == ""} {set MoyenneOuMediane [ChoixParmi "Moyenne Mediane"]} if {$AvecTousLesClones == ""} { set AvecTousLesClones [ChoixParmi [list "AvecLesClones" "SansLesClones"]] if {$AvecTousLesClones == "" || $AvecTousLesClones == "SansLesClones"} { set AvecTousLesClones 0 } else { set AvecTousLesClones 1 } } if {$LesClusters == ""} {set LesClusters [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesClusters]]} if {$LesConditions == ""} {set LesConditions [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesConditions]]} if {$LesPointsTemporels == ""} {set LesPointsTemporels [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesPointsTemporels]]} set nClusters [llength $LesClusters ] set nParLigne [llength $LesConditions] set NbCouleursDExpr 100 set LesCouleursDExpression [GammeDeCouleursRNV_CHALMEL $NbCouleursDExpr] set LesCouleurs [GammeDeCouleursRVB_CHALMEL $nParLigne ] set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] if {!$AvecTousLesClones} { set LargeurGraph [expr $Largeur * 1.0 / $nParLigne ] set LargeurMax $Largeur } else { set LargeurGraph [expr $Largeur * 1.0 / ($nParLigne + 1)] set LargeurMax [expr $Largeur + $LargeurGraph] } set HauteurGraph $LargeurGraph set NbPointsTemporels [llength $LesPointsTemporels] ### +2 car bord de gauche et de droite##### set LargeurCarre [expr $LargeurGraph * 1.0 / ($NbPointsTemporels + 2)] set HauteurCarre 10 if {$AvecMemeEchelleY} {set ValYMin 1e200;set ValYMax -1e200} set HauteurMax 0 foreach Cluster $LesClusters { set nBox [llength [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E Cluster $Cluster LesNoms]] set HauteurMax [expr $HauteurMax + $HauteurGraph] if {$AvecTousLesClones} {set HauteurMax [expr $HauteurMax + $HauteurCarre * $nBox]} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E Cluster $Cluster LesNoms] { set LesExpressions {} set Tab($Nom,ExprMin) 1e200 set Tab($Nom,ExprMax) -1e200 foreach What $LesConditions { foreach When $LesPointsTemporels { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel $When Condition $What Expression] if {$Expr == ""} {continue} if {$Expr < [set Tab($Nom,ExprMin)]} {set Tab($Nom,ExprMin) $Expr} if {$Expr > [set Tab($Nom,ExprMax)]} {set Tab($Nom,ExprMax) $Expr} lappend LesExpressions $Expr } } if {$LesExpressions == {}} {continue} set LesStats [MoyenneEcartMinMaxCumulLong $LesExpressions] set ExprMoyenne [lindex $LesStats 0] set ExprET [lindex $LesStats 1] foreach What $LesConditions { foreach When $LesPointsTemporels { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel $When Condition $What Expression] if {$Expr == ""} {continue} set Expr [expr $Expr - $ExprMoyenne] if {$ExprET != 0} {set Expr [expr $Expr / $ExprET]} if {![info exists Tab($Cluster,$What,$When,LesExpr)]} {set Tab($Cluster,$What,$When,LesExpr) {}} lappend Tab($Cluster,$What,$When,LesExpr) $Expr } } } foreach What $LesConditions Couleur $LesCouleurs { if {$What == ""} {continue} set LesPointsMoyens {} if {!$AvecMemeEchelleY} {set ValYMin 1e200;set ValYMax -1e200} foreach When $LesPointsTemporels { if {![info exists Tab($Cluster,$What,$When,LesExpr)]} {continue} if {$MoyenneOuMediane == "Moyenne"} { set LesStats [MoyenneEcartMinMaxCumulLong [set Tab($Cluster,$What,$When,LesExpr)]] set Moyenne [lindex $LesStats 0] set ET [lindex $LesStats 1] if {[expr $Moyenne - $ET] < $ValYMin } {set ValYMin [expr $Moyenne - $ET]} if {$ValYMax < [expr $Moyenne + $ET]} {set ValYMax [expr $Moyenne + $ET]} lappend LesPointsMoyens [list $When $Moyenne $ET] } else { set LesStats [MedianeInterQuartileMinInterQuartileMaxExtremeMinExtremeMax [set Tab($Cluster,$What,$When,LesExpr)]] set Mediane [lindex $LesStats 0] set QuartMin [lindex $LesStats 1] set QuartMax [lindex $LesStats 2] set ExtrMin [lindex $LesStats 3] set ExtrMax [lindex $LesStats 4] if {$ExtrMin < $ValYMin} {set ValYMin $ExtrMin} if {$ValYMax < $ExtrMax} {set ValYMax $ExtrMax} lappend LesPointsMoyens [list $When $Mediane $QuartMin $QuartMax $ExtrMin $ExtrMax] } } Espionne "Cluster $Cluster NbSeq $nBox Condition $What" set Tab(Cluster,$Cluster,Condition,$What,LaCourbe) [list "Cluster $Cluster NbSeq $nBox Condition $What" $ValYMin $ValYMax [list $What $Couleur $LesPointsMoyens]] } } if {$AvecMemeEchelleY} { foreach Cluster $LesClusters { foreach What $LesConditions { if {![info exists Tab(Cluster,$Cluster,Condition,$What,LaCourbe)]} {continue} set LaCourbe [set Tab(Cluster,$Cluster,Condition,$What,LaCourbe)] set LaCourbe [lreplace $LaCourbe 1 1 $ValYMin] set LaCourbe [lreplace $LaCourbe 2 2 $ValYMax] set Tab(Cluster,$Cluster,Condition,$What,LaCourbe) $LaCourbe } } } set K [UnCanva $LargeurMax $HauteurMax $Largeur $Hauteur WithY] set YDeRef 0 foreach Cluster $LesClusters { set XDeRef 0 set HMin $YDeRef set HMax [expr $HMin + $HauteurGraph] set YDeRef $HMax foreach What $LesConditions { if {![info exists Tab(Cluster,$Cluster,Condition,$What,LaCourbe)]} { set XDeRef [expr $XDeRef + $LargeurGraph] continue } set LaCourbe [set Tab(Cluster,$Cluster,Condition,$What,LaCourbe)] set LMin $XDeRef set LMax [expr $LMin + $LargeurGraph] set XDeRef $LMax if {$MoyenneOuMediane == "Moyenne"} { set K [PlaceLaCourbe $LaCourbe $K $HMin $HMax $LMin $LMax] } else { set K [PlaceLaCourbeAvecInterQuartile $LaCourbe $K $HMin $HMax $LMin $LMax] } } if {!$AvecTousLesClones} {continue} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E Cluster $Cluster LesNoms] { if {![info exists Tab($Nom,ExprMin)]} {continue} set ExprMin [set Tab($Nom,ExprMin)] set ExprMax [set Tab($Nom,ExprMax)] if {$ExprMax <= $ExprMin} { set FactExpr 0 } else { set FactExpr [expr ($NbCouleursDExpr - 1) * 1.0 / ($ExprMax - $ExprMin)] } set HMin $YDeRef set HMax [expr $HMin + $HauteurCarre] set XDeRef 0 foreach What $LesConditions { set LMin [expr $XDeRef + $LargeurCarre] set XDeRef [expr $XDeRef + $LargeurGraph] foreach When $LesPointsTemporels { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom PointTemporel $When Condition $What Expression] if {$Expr == ""} { set LMin [expr $LMin + $LargeurCarre] continue } set LMax [expr $LMin + $LargeurCarre] if {![info exists TabTmp($Cluster,$What,$When)]} { set TabTmp($Cluster,$What,$When) 1 $K create text [expr ($LMax - $LMin) * 1.0 / 2 + $LMin] $HMin -text $When -anchor s -tags [list "$Nom" "Box"] } set i [expr round(($Expr - $ExprMin) * $FactExpr)] $K create rectangle $LMin $HMin $LMax $HMax -fill [lindex $LesCouleursDExpression $i] -tags [list "$Nom" "Box"] set LMin $LMax } } set Texte "$Cluster $Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E $Nom Definition]" $K create text $XDeRef $YDeRef -text $Texte -anchor nw -tags [list "$Nom" "Box"] set YDeRef $HMax } } $K bind "Box" <1> "AfficheFicheInfo $K" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return } proc IllustreLesHistogrammes {LesListes {nParLigne 1} {VerticalOuHorizontal Vertical}} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set nTot [llength $LesListes] set LesCoords [CoordonneesDesPavesVerticaux $nParLigne $nTot $Hauteur $Largeur] set LesCoords [lsort -real -decreasing -index 4 $LesCoords] set K [UnCanva $Largeur [lindex [lindex $LesCoords 0] 4] $Largeur $Hauteur WithY] foreach Liste $LesListes LaCoord [lsort -integer -index 0 $LesCoords] { ScanLaListe $LaCoord n LMin HMin LMax HMax set K [PlaceLHistogramme $Liste $K $HMin $HMax $LMin $LMax $VerticalOuHorizontal] } return $K } proc IllustreLesOrgasDesARPs {} { set LesCategories [InterrogeLesInfosDesARPs LesCategories] foreach Cat $LesCategories { FaireLire "Categorie $Cat" set LesAccess [InterrogeLesInfosDesARPs $Cat LesAccess] IllustreLesAccessSurLArbreTaxonomique $LesAccess } } proc IllustreLesPathwayDeLAccess {Access} { set LesPathway {} set LesRequetes {} foreach LaReq [Access2Kegg $Access] { Espionne $LaReq set Quoi [lindex $LaReq 0] set Qui [lindex $LaReq 1] lappend LesRequetes $Qui if {$Quoi != "Pathway"} {continue} lappend LesPathway $Qui } set LesK {} foreach Pathway $LesPathway { lappend LesK [IllustreLePathway $Pathway "" $LesRequetes] } return $LesK } proc IllustreLesPathwayDeLAccess_AEffacer {Access} { set LesPathway {} set LesRequetes {} foreach LaReq [Access2Kegg $Access] { Espionne $LaReq set Quoi [lindex $LaReq 0] set Qui [lindex $LaReq 1] lappend LesRequetes $Qui if {$Quoi != "Pathway"} {continue} lappend LesPathway $Qui } foreach Pathway $LesPathway { IllustreLePathway $Pathway "" $LesRequetes } return } proc IllustreLesPathwayDeLaBoite {Nom} { set LesRequetes [InterrogeMesKEGG $Nom LesPathwayEtKeggEtEC] set LesK {} foreach Pathway [InterrogeMesKEGG $Nom LesPathway ] { lappend LesK [IllustreLePathway $Pathway "" $LesRequetes] } return $LesK } proc IllustreLesPathwayDeLaBoiteEtCreeLesJpg {Nom {CreateJpg ""}} { set Rep "[RepertoireDuGenome]/jpg_of_pathways" if {! [file exists $Rep]} {file mkdir $Rep} set CreateJpg [string equal -nocase $CreateJpg "CreateJpg"] if {$CreateJpg} { package require Img } set LesRequetes [InterrogeMesKEGG $Nom LesPathwayEtKeggEtEC] foreach Pathway [InterrogeMesKEGG $Nom LesPathway ] { set FichierImage "$Rep/${Nom}_$Pathway.jpg" set K [IllustreLePathway $Pathway "" $LesRequetes] if {$CreateJpg} { regsub "\.canvas$" $K "" w wm iconify . focus $w update idletasks CanvaEnJpg $K $FichierImage after 5000 destroy $w } } return } proc IllustreLesPathwayDeLaBoite_AEffacer {Nom} { set LesRequetes [InterrogeMesKEGG $Nom LesPathwayEtKeggEtEC] foreach Pathway [InterrogeMesKEGG $Nom LesPathway ] { #IllustreLePathway $Pathway "" $LesRequetes set K [IllustreLePathway $Pathway "" $LesRequetes] } return $K } proc IllustreLesPathwayLies {K} { regsub ".canvas" $K ".message" M catch {destroy $M} set Id [$K find withtag current] set MesTags [$K gettags $Id] set Pathway [lindex $MesTags 2] set Organisme [lindex $MesTags 3] set LesConcernes [lindex $MesTags 4] set LesElementsParticuliers [lindex $MesTags 5] if {$LesConcernes == {}} {return} set FichierConf [FichierPathway $Pathway $Organisme "conf"] set FichierConfMap [FichierPathway $Pathway "" "conf"] if {![file exists $FichierConf] && ![file exists $FichierConfMap]} {return} lappend LesElementsParticuliers $Pathway foreach LeConcerne $LesConcernes { set Qui [lindex $LeConcerne 1] lappend LesElementsParticuliers $Qui set Quoi [lindex $LeConcerne 0] if {$Quoi == "Kegg"} { foreach Lien [InterrogeKEGG Kegg $Qui LesLiens] { lappend LesElementsParticuliers $Lien } } } set LesElementsParticuliers [lsort -unique $LesElementsParticuliers] EspionneL $LesConcernes Espionne $LesElementsParticuliers foreach LeConcerne $LesConcernes { set Quoi [lindex $LeConcerne 0] if {$Quoi == ""} {continue} set Qui [lindex $LeConcerne 1] set OrgaC [lindex $LeConcerne 2] set OrgaL [InterrogeGenomeKEGG OrgaCourt $OrgaC Organisme] if {$OrgaL == ""} {set OrgaL $Organisme} if {$OrgaL == "map"} {set OrgaL ""} if {$Quoi == "Pathway"} { if {$Qui == $Pathway || [info exists TabTmp($Qui)]} {continue} set TabTmp($Qui) 1 IllustreLePathway $Qui $OrgaL $LesElementsParticuliers continue } if {$Quoi == "Compound"} { foreach NewPathway [InterrogeECCpdRn Element $Qui LesPathway] { if {$NewPathway == $Pathway || [info exists TabTmp($NewPathway)]} {continue} set TabTmp($NewPathway) 1 IllustreLePathway $NewPathway $OrgaL $LesElementsParticuliers } continue } if {$Quoi == "Kegg"} { foreach NewPathway [InterrogeKEGG Kegg $Qui LesPathway] { if {$NewPathway == $Pathway || [info exists TabTmp($NewPathway)]} {continue} set TabTmp($NewPathway) 1 IllustreLePathway $NewPathway $OrgaL $LesElementsParticuliers } foreach Lien [InterrogeKEGG Kegg $Qui LesLiens] { foreach NewPathway [InterrogeECCpdRn Element $Lien LesPathway] { if {$NewPathway == $Pathway || [info exists TabTmp($NewPathway)]} {continue} set TabTmp($NewPathway) 1 IllustreLePathway $NewPathway $OrgaL $LesElementsParticuliers } continue } } if {$Quoi == "EC"} { foreach NewPathway [InterrogeECCpdRn Element $Qui LesPathway] { if {$NewPathway == $Pathway || [info exists TabTmp($NewPathway)]} {continue} set TabTmp($NewPathway) 1 IllustreLePathway $NewPathway $OrgaL $LesElementsParticuliers } continue } } if {[info exists TabTmp]} {unset TabTmp} return } proc IllustreLesPrimers {{PAB ""}} { Wup "Illustre une sortie de design de primer de PCR" #1/12/2003 if {$PAB==""} {return "Correct syntax is IllustreUneSequence PAB"} #Attention il faut une query, sinon pas de taille .... set Repnuctfa "[RepertoireDuGenome]/nuctfa" set FichierQuery $PAB if {[regexp {/} $PAB]} {set PAB [file tail $PAB]} if {[file exists $FichierQuery]} { set FichierQuery $FichierQuery } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else {Espionne "No Input File for the Query ($PAB)";return ""} set Police "Courier 12" set Police2 {-family "arial" -size 12 -weight bold} set CouleurOutline "black" set LargeurMax [expr [winfo screenwidth .] - 200] set HauteurMax [expr [winfo screenheight .] * 1/2] set LargeurFenetre [expr [winfo screenwidth .] - 200] set HauteurFenetre [expr [winfo screenheight .] * 1/2] set XMilieu [expr $LargeurMax/2] set BordureX 50.0 set BordureY 50.0 set Intervalle 15.0 set EpaisseurBoite 15.0 #Position du Graph content set YDebutGraph [expr 0 + $BordureY] set YFinGraph [expr $YDebutGraph + 100] #Position de la query set XDebutQuery [expr 0 + 2 * $BordureX] set YDebutQuery [expr $YFinGraph + 10] set XFinQuery [expr $LargeurMax - $BordureX] set YFinQuery [expr $YDebutQuery + $EpaisseurBoite] #Besoin de la taille de la query pour conversion et affichage set AccessQuery [AccessDuTFADumRNA $FichierQuery] set SeqQuery [QueLaSequenceDuFichierTFA $FichierQuery] if {$SeqQuery==""} {Espionne "$FichierQuery no sequence available";return ""} set TailleQueryNt [string length $SeqQuery] #Rapport du nombre de pixel pour un nt set OneNtPixel [expr ($XFinQuery-$XDebutQuery)/($TailleQueryNt-1)] #Attention on commence au premier nt #Debut des Oligos set YDebutDeOligo [expr $YFinQuery + $Intervalle] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre "" "Primer $PAB"] $K configure -background "grey" #Rectangle de masque pour les graphes $K create rectangle [expr $XDebutQuery-40] [expr $YDebutGraph-4] [expr $XFinQuery+5] [expr $YFinGraph+4] -fill "gray97" -outline "gray97" -tags [list "" "Masque"] #Affiche la query $K create rectangle $XDebutQuery $YDebutQuery $XFinQuery $YFinQuery -outline "$CouleurOutline" -fill "red" -tags [list "" "Query"] $K create text [expr $XDebutQuery-3.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "1" -font $Police2 -anchor "e" $K create text [expr $XFinQuery+3.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "$TailleQueryNt ([expr $TailleQueryNt/3])" -font $Police2 -anchor "w" $K create text $XMilieu [expr 1*$BordureY/3] -text "Primers from $PAB" -font $Police2 -anchor "center" -justify "center" #Affiche la petite aide $K create oval [expr $XDebutQuery-30] [expr $YDebutGraph-30] [expr $XDebutQuery-10] [expr $YDebutGraph-10] -fill "green" -outline "white" $K create text [expr $XDebutQuery-20] [expr $YDebutGraph-20] -text "?" -tags [list "" "[AfficheHelpDuPrimer]" "Affichable"] -anchor "center" #Affichage du Tm content set TmResults "" set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange" "Tm" } #Affichage du GC content set GCResults "" set GCResults [CreeLesFichiersSpectreDesGC $SeqQuery SpectreGCXY 30] if {$GCResults !=""} { AfficheLeSpectreGCDUneListe $K $GCResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel } #Construction des boites des Primers #################################### set LesPrimerSeqs "" if {0} { array set LesPPCRsADessiner [LesLignesDuFichier "[RepertoireDuGenome]/fiches/lesppcrsadessiner"] foreach Trio [set LesPPCRsADessiner($PAB)] { scan $Trio "%s %d %d %s %d %d %s %d %d" Frag dF fF A dA fA B dB fB lappend LesPrimerSeqs [list $Frag $dF $fF] lappend LesPrimerSeqs [list $A $dA $fA] lappend LesPrimerSeqs [list $B $dB $fB] } } else { set LesPrimerSeqs [InterrogeInfoDePrimer $PAB] } set NbPrimer 0 set DejaFait 0 set NomDuChef "" set YFinDeOligo [expr $YDebutDeOligo + $EpaisseurBoite] foreach PrimerSeq $LesPrimerSeqs { incr NbPrimer set NomOligo [lindex $PrimerSeq 0] set LaSequence [Oli $NomOligo SeqSubject] set XDebutDeOligoNt [lindex $PrimerSeq 1] set XFinDeOligoNt [lindex $PrimerSeq 2] set TailleOligo [expr $XFinDeOligoNt - $XDebutDeOligoNt + 1] set TailleSignal "N/A" set TaillePrimer "N/A" set GC "" set Tm "" set DirOligo "toto" #Pour le dessin des boites et repecter les tailles if {$NbPrimer=="1"} { #Une boite plus epaisse pour la sequence set DebutFrag $XDebutDeOligoNt set FinFrag $XFinDeOligoNt set LaSequence [string range $SeqQuery [expr $XDebutDeOligoNt-1] [expr $XFinDeOligoNt-1]] set NomDuChef $NomOligo } else { if {$DejaFait == "0"} { set YDebutDeOligo [expr $YDebutDeOligo +2] set YFinDeOligo [expr $YFinDeOligo -2] set DejaFait 1 } } #Nom different pour les primers if {$NbPrimer=="2" || $NbPrimer=="3"} { append NomOligo "_${NomDuChef}" set TaillePrimer [string length $LaSequence] set TailleSignal [expr $TailleOligo - $TaillePrimer] } if {$LaSequence!=""} { if {$TailleOligo == ""} {set TailleOligo [string length $LaSequence]} if {$TailleOligo>$TailleQueryNt} {set TailleOligo $TailleQueryNt} if { $GC == ""} { if {$NbPrimer=="2" || $NbPrimer=="3"} { set GC [format "%.2f" [expr (([NombreDeBaseDe $LaSequence "G|C"])/($TaillePrimer*1.0))*100.0]] } else { set GC [format "%.2f" [expr (([NombreDeBaseDe $LaSequence "G|C"])/($TailleOligo*1.0))*100.0]] } } if {$Tm == ""} { set TmWallace [CalculTmDeLaSeq $LaSequence "" "" Wallace] set TmNN [CalculTmDeLaSeq $LaSequence "" "" NearestNeighbor] set TmDNADNA [CalculTmDeLaSeq $LaSequence "" "" DNADNA] } } set CouleurBoite [CouleurDuPrimer $NbPrimer] set Texte [format "%-11s%-10s" "Id-Primer:" "$NomOligo"] append Texte [format "\n%-11s" "Length:"] append Texte [format "\n%-11s%-3s %5s" "-Signals" "$TailleSignal" "nt(s)"] append Texte [format "\n%-11s%-3s %5s" "-Primer" "$TaillePrimer" "nt(s)"] append Texte [format "\n%-11s%-3s %5s" "-Total" "$TailleOligo" "nt(s)"] append Texte [format "\n%-11s%3.2f %1s" "GC:" "$GC" "%"] append Texte [format "\n%-11s" "Tm:"] append Texte [format "\n%-11s%3.2f %5s" "-Wallace" "$TmWallace" "degree(s)"] append Texte [format "\n%-11s%3.2f %5s" "-NN" "$TmNN" "degree(s)"] append Texte [format "\n%-11s%3.2f %5s" "-DNA-DNA" "$TmDNADNA" "degree(s)"] append Texte [format "\n%-11s%3d %5s" "Begin:" "$XDebutDeOligoNt" "/ $TailleQueryNt"] append Texte [format "\n%-11s%3d %5s" "End:" "$XFinDeOligoNt" "/ $TailleQueryNt"] #Calcul positions de l oligo sur la query set XDebutDeOligo [expr $XDebutQuery + $OneNtPixel * $XDebutDeOligoNt - $OneNtPixel] set XFinDeOligo [expr $XDebutDeOligo + $OneNtPixel * $TailleOligo - $OneNtPixel] #On dessine la boite de l oligo $K create rectangle $XDebutDeOligo $YDebutDeOligo $XFinDeOligo $YFinDeOligo -outline "white" -fill "$CouleurBoite" -tags [list "" $Texte [expr (($XDebutDeOligoNt-1)/3)+1] [expr $XFinDeOligoNt/3] $NomOligo $DirOligo Affichable Positionner Boite] ##-tags [list "" $Texte $XDebutDeOligoNt $XFinDeOligoNt $NomOligo $DirOligo Affichable Positionner Boite] if {$NbPrimer=="3"} { set NbPrimer 0 set DejaFait 0 #On ajoute de l espace pour la deuxieme ligne set YDebutDeOligo [expr $YFinDeOligo + $Intervalle] set YFinDeOligo [expr $YDebutDeOligo + $EpaisseurBoite] } } PasDeCadre $K $K configure -height $YDebutDeOligo #Pour accorder la scrollbar au dernier oligo affiche $K configure -scrollregion [list 0 0 $LargeurMax $YDebutDeOligo] $K bind "Query" <1> "AfficheVariable \[LesInfosDeBaseDeMaSequence $SeqQuery \[list AvecSeqFormate AvecTaille AvecStatNuc AvecTm\]\]" $K bind "Query" <2> "AfficheFetch $AccessQuery OnVeutNature" $K bind "Query" <3> "AfficheLaQuery $K $FichierQuery" $K bind "Affichable" "AfficheInfoBulle $K %x %y Enter" $K bind "Affichable" "AfficheInfoBulle $K %x %y Leave" $K bind "Positionner" <1> "AffichePositionOligo $K %x %y Show" $K bind "Positionner" <2> "ShowPrimer $K $PAB" $K bind "Positionner" <3> "AfficheLaSequenceDeLOligo $K $PAB" $K bind "Positionner" "SelectionneOligo $K" $K bind "Positionner" "SelectionneOligoCroisee $K" regsub ".canvas$" $K "" F set B [BoutonneLaFenetre $F "Positions Show / Hide\nHelp Main / Color\nChange Acc Separator"] bind $B <1> "AffichePositionOligoPourTous $K %x %y Show" bind $B <2> "EffacePositionOligoPourTous $K %x %y" bind $B "AfficheHelpDuPrimer DuBouton" bind $B "SignificationDesCouleursDuPrimer" bind $B "ChangeDebutAccessDeDir" set I [BoutonneLaFenetre $F "Graph Panel\nSearch / Clear"] bind $I <1> "GraphPanel $K" bind $I "TrouveDansLesInfos $K" bind $I "DeselectionneLesTrouves $K" bind $K "ViseurDeSeq $K %x %y $XDebutQuery $XFinQuery $YDebutGraph $YDebutDeOligo $OneNtPixel" bind $K "ViseurDeSeq $K %x %y $XDebutQuery $XFinQuery $YDebutGraph $YDebutDeOligo $OneNtPixel" return "" } proc IllustreLesTaxonsDesARPs {} { Wup "Permet de Relire les access et les TaxId des differentes categories d ARP" Wup "Reunit les resultats dans un tableau delimite par des tabulations" set FichierSave "[RepertoireDuGenome]/BilanOrganisme" #Recuperation des categories (par ex: ----LesARP1s----) set LesCategories [InterrogeLesInfosDesARPs LesCategories] set TousLesTaxons "" #Recupeartion des organismes des categories foreach Cat $LesCategories { if {[regexp "Actin" $Cat]} {continue} set LesTaxons "" set LesTaxons [InterrogeLesInfosDesARPs $Cat LesTaxons] foreach T $LesTaxons { set Tab($Cat,$T) 1 lappend TousLesTaxons $T } } set TousLesTaxons [lsort -unique $TousLesTaxons] #Espionne "LesTaxonsTotal: [llength $TousLesTaxons] -- $TousLesTaxons" #Charge les correspondances entre le TaxId et le nom scientifique de l organisme set MesTaxons [join $TousLesTaxons " "] LesOrgasDeMesTaxID "Charge" "$MesTaxons" #Prepare l entete avec les noms scientifiques des organismes set Entete "LesCategories" foreach Tax $TousLesTaxons { set Name [LesOrgasDeMesTaxID $Tax Name] if {$Name==""} {set Name "$Tax not found"} lappend Entete $Name } #Espionne "[join $Entete "\t"]" AppendAuFichier $FichierSave "[join $Entete "\t"]" foreach Cat $LesCategories { if {[regexp "Actin" $Cat]} {continue} set Result "" foreach Taxon $TousLesTaxons { if {[info exists Tab($Cat,$Taxon)]} { lappend Result "X" } else { lappend Result "O" } } #Espionne "[join [concat $Cat [join $Result ""]] "\t"]" AppendAuFichier $FichierSave "[join [concat $Cat $Result] "\t"]" } return "" } proc IllustreLesToilesDAraignee {LesListes {nParLigne 1} {AvecTitre 1} {AvecLegende 1} {AvecVal 1} {AvecValEchelle 1} {AvecLigne 1}} { set Largeur [expr [winfo screenwidth .] - 200] set Hauteur [expr [winfo screenheight .] - 300] set nTot [llength $LesListes] set LesCoords [CoordonneesDesPavesVerticaux $nParLigne $nTot $Hauteur $Largeur] set LesCoords [lsort -real -decreasing -index 4 $LesCoords] set K [UnCanva $Largeur [lindex [lindex $LesCoords 0] 4] $Largeur $Hauteur WithY] foreach Liste $LesListes LaCoord [lsort -integer -index 0 $LesCoords] { ScanLaListe $LaCoord n LMin HMin LMax HMax PlaceLaToileDAraignee [lrange $Liste 1 end] $K $HMin $HMax $LMin $LMax [lindex $Liste 0] $AvecTitre $AvecLegende $AvecVal $AvecValEchelle $AvecLigne } regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "Avec / Sans Titre\nAvec / Sans Legende\nAvec / Sans Ligne"] bind $B <1> "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne 1 $AvecLegende $AvecVal $AvecValEchelle $AvecLigne" bind $B <2> "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne 0 $AvecLegende $AvecVal $AvecValEchelle $AvecLigne" bind $B "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre 1 $AvecVal $AvecValEchelle $AvecLigne" bind $B "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre 0 $AvecVal $AvecValEchelle $AvecLigne" bind $B "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre $AvecLegende $AvecVal $AvecValEchelle 1" bind $B "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre $AvecLegende $AvecVal $AvecValEchelle 0" set C [BoutonneLaFenetre $w "Avec / Sans Val\nAvec / Sans ValEchelle"] bind $C <1> "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre $AvecLegende 1 $AvecValEchelle $AvecLigne" bind $C <2> "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre $AvecLegende 0 $AvecValEchelle $AvecLigne" bind $C "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre $AvecLegende $AvecVal 1 $AvecLigne" bind $C "IllustreLesToilesDAraignee \{$LesListes\} $nParLigne $AvecTitre $AvecLegende $AvecVal 0 $AvecLigne" return $K } proc IllustreOligo {{PAB ""} {Directories ""}} { Wup "Illustre une sortie de design d Oligo " #Version pour visualiser plusieurs oligos de plusieurs banques en simultanee. #Refonte pour la visualisation de plusieurs oligos sur la meme ligne. #Addon GC content, Help, Color, Color Help, Id content, Nb Seq, Tm content. #Selection des oligos, sauvegarde et affichage des selectionnes et des X-selectionnes #Modif algo de visualisation avec InterrogeInfoOligo #Modif pour vider la memoire et gerer plusieurs repertoires simultanement #Modif pour chercher dans les infos de l oligo #Modif pour l absence des infos et valeurs par defaut #Modif pour ajout des coordonnees du CDS et de la carte exonique #Modif pour detruire toutes les infos en memoire #15/02/2004 set OnAPeutEtreExonicMap 0 set OnADejaFaitLesSpike 0 if {$PAB==""} {return "Correct syntax is IllustreOligo PAB ProbesDir\nfor ex: IllustreOligo ACT0001\n"} set RepOligo "[RepertoireDuGenome]/Probes" if {$Directories==""} { if {[file exists $RepOligo]} { set LesDirs "" set LaListe "" foreach File [glob -nocomplain -directory $RepOligo -types d "*"] { lappend LaListe [file tail $File] } set LaListe [EntreDeux [lsort $LaListe]] if {$LaListe==""} {AjouteAuLog "No Directories found";return ""} foreach Dir $LaListe { lappend LesDirs "$RepOligo/$Dir" } } else {AjouteAuLog "No Directories specified";return ""} } else {set LesDirs $Directories} #Attention il faut une query, sinon pas de taille .... set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set Repnuctfa "[RepertoireDuGenome]/nuctfa" set RepRefSeq "[RepertoireDuGenome]/Probes/RefSeq_TFA" set FichierQuery $PAB if {[regexp {/} $PAB]} {set PAB [file tail $PAB]} if {[file exists $FichierQuery]} { set FichierQuery $FichierQuery } elseif { [file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" set OnAPeutEtreExonicMap 1 } elseif { [file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } elseif { [regexp {^NM[0-9]{4,}} $PAB]} { set FichierQuery "$RepRefSeq/$PAB" } else {Espionne "No Input File for the Query ($PAB)";return ""} if {! [file exists "$FichierQuery"]} {Espionne "$FichierQuery does not exists ($PAB)";return ""} if {[regexp {\.masked$} $PAB]} {regsub -all {\.masked$} $PAB "" PAB} #Pour le design particulier de la banque RefSeq totale if {[regexp {^NM[0-9]{4,}} $PAB]} { set Dir "[RepertoireDuGenome]/Probes/RefSeq_Design" if {[regexp "RefSeq_Design" $LesDirs]} { set NMDIR [LeRepertoireDeRefSeq $PAB] regsub -all "RefSeq_Design" $LesDirs "RefSeq_Design/$NMDIR" LesDirs } } set Police "Courier 12" set Police2 {-family "arial" -size 12 -weight bold} set CouleurOutline "black" set LargeurMax [expr [winfo screenwidth .] - 200] set HauteurMax [expr [winfo screenheight .] * 1/2] set LargeurFenetre [expr [winfo screenwidth .] - 200] set HauteurFenetre [expr [winfo screenheight .] * 1/2] set XMilieu [expr $LargeurMax/2] set BordureX 50.0 set BordureY 50.0 set Intervalle 10.0 set EpaisseurBoite 15.0 #Position du Graph content set YDebutGraph [expr 0 + $BordureY] set YFinGraph [expr $YDebutGraph + 100] #Position de la query set XDebutQuery [expr 0 + $BordureX] #set YDebutQuery [expr $YFinGraph + 10] set YDebutQuery [expr $YFinGraph + 20] set XFinQuery [expr $LargeurMax - $BordureX] set YFinQuery [expr $YDebutQuery + $EpaisseurBoite] #Besoin de la taille de la query pour conversion et affichage set AccessQuery [AccessDuTFADumRNA $FichierQuery] set SeqQuery [QueLaSequenceDuFichierTFA $FichierQuery] if {$SeqQuery==""} {Espionne "$FichierQuery no sequence available";return ""} set TailleQueryNt [string length $SeqQuery] #Rapport du nombre de pixel pour un nt set OneNtPixel [expr ($XFinQuery-$XDebutQuery)/($TailleQueryNt-1)] #Attention on commence au premier nt #Debut des Oligos set YDebutDeOligo [expr $YFinQuery + $Intervalle] set K [UnCanvaDe $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre "Illustre Oligo Design $PAB"] #set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre "" "Illustre Oligo Design $PAB"] $K configure -background "grey" #On modifie le comportement lors de la destruction de la fenetre principale #Ceci pour tuer toutes les autres fenetres crees set w [winfo toplevel $K] wm iconify $w wm protocol $w WM_DELETE_WINDOW "DetruitLesInfosDe $K;after 10 destroy $w" #Rectangle de masque pour les graphes $K create rectangle [expr $XDebutQuery-40] [expr $YDebutGraph-4] [expr $XFinQuery+5] [expr $YFinGraph+4] -fill "gray97" -outline "gray97" -tags [list "" "Masque" "Entete"] #Affiche la query $K create rectangle $XDebutQuery $YDebutQuery $XFinQuery $YFinQuery -outline "$CouleurOutline" -fill "red" -tags [list "" "Query" "Entete"] $K create text [expr $XDebutQuery-3.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "1" -tags [list "" "Entete"] -font $Police2 -anchor "e" $K create text [expr $XFinQuery+3.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "$TailleQueryNt" -tags [list "" "Entete"] -font $Police2 -anchor "w" $K create text $XMilieu [expr 1*$BordureY/3] -text "Design from $PAB" -tags [list "" "Entete"] -font $Police2 -anchor "center" -justify "center" #Coordonnees du CDS #set CDS [LesCoordonneesDuCDSDumRNA $AccessQuery] set CDS "" if {$CDS != ""} { set DCDS [expr $XDebutQuery + $OneNtPixel * [lindex $CDS 0] - $OneNtPixel] set FCDS [expr $XDebutQuery + $OneNtPixel * [lindex $CDS 1] - $OneNtPixel] $K create line $DCDS [expr $YDebutQuery-10] $DCDS $YFinQuery -width "3" -fill "black" -tags [list "" "CDS\nBegin [lindex $CDS 0]" "Affichable" "Entete"] $K create line $FCDS [expr $YDebutQuery-10] $FCDS $YFinQuery -width "3" -fill "black" -tags [list "" "CDS\nEnd [lindex $CDS 1]" "Affichable" "Entete"] $K create text [expr $FCDS - (($FCDS-$DCDS)/2)] [expr $YDebutQuery-7] -text "CDS" -tags [list "" "Entete"] -anchor "center" -font "$Police2" } #Carte exonique #####WARNING set OnAPeutEtreExonicMap 1 set OnAPeutEtreExonicMap 0 if {$OnAPeutEtreExonicMap} { set RepExonicMap "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap" if {[file exists "$RepExonicMap/$PAB"]} { set LesCoordonnees [LesCoordonneesExonicMap "$RepExonicMap/$PAB"] set i 0 foreach DF $LesCoordonnees { incr i set DQ [expr $XDebutQuery + $OneNtPixel * [lindex $DF 0] - $OneNtPixel] set FQ [expr $XDebutQuery + $OneNtPixel * [lindex $DF 1] - $OneNtPixel] $K create rectangle $DQ [expr $YDebutQuery +5] $FQ [expr $YFinQuery -5] -fill yellow -tags [list "" "Exon $i\nD [lindex $DF 0] F [lindex $DF 1]" "Affichable" "Entete"] } } } #Affiche la petite aide $K create oval [expr $XDebutQuery-30] [expr $YDebutGraph-30] [expr $XDebutQuery-10] [expr $YDebutGraph-10] -fill "green" -tags [list "" "Entete"] -outline "white" $K create text [expr $XDebutQuery-20] [expr $YDebutGraph-20] -text "?" -tags [list "" "[AfficheHelp]" "Affichable" "Entete"] -anchor "center" #Affichage du Tm content #On recupere la methode de Tm par defaut choisie et on la remet apres set TmDefault [LesParametresDuDesign TmMethod "LaValeurMerci"] LesParametresDuDesign TmMethod "NearestNeighbor" "Positionne" set TmResults [PosEtTmDeLaRegion $SeqQuery $TailleQueryNt] if {$TmResults !=""} { AfficheLeSpectreTmDUneListe $K $TmResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "orange" "TmNN" } LesParametresDuDesign TmMethod $TmDefault "Positionne" #Affichage du GC content set GCResults "" set GCResults [PosEtGCDeLaRegion $SeqQuery $TailleQueryNt] if {$GCResults !=""} { AfficheLeSpectreGCDUneListe $K $GCResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel } #Dessine les boites des differentes sources ########################################### set IdDuGraph 0 set LesFichiersBlast "" set LesLogs "" set LesFichiersOligo "" foreach DirOligo $LesDirs { set DB [file tail $DirOligo] incr IdDuGraph set FichierBlast "$DirOligo/${PAB}.blastn" lappend LesFichiersBlast $FichierBlast if {0&&[file exists $FichierBlast]} { lappend LesFichiersBlast $FichierBlast #Affichage du Id content du blast set IdResults "" set IdResults [PosEtPIdAligneeDeLaRegion $FichierBlast] if {$IdResults !=""} { AfficheLeSpectreIdDUneListe $K $IdResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "red" "Id$IdDuGraph" } #Affichage du nb de sequence du blast set NbSeqResults "" set NbSeqResults [PosEtNbSequenceAligneeDeLaRegion $FichierBlast] if {$NbSeqResults !=""} { AfficheLeSpectreNbSequenceDUneListe $K $NbSeqResults $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel "deepskyblue2" "NbSeq$IdDuGraph" } UnsetLesTableauxDesGraphAvecBlast } #Charge le fichier pour obtenir les infos sur les oligos ######################################################## set FichierLog "$DirOligo/$PAB.log" set FichierACharger "$DirOligo/$PAB.oligo" if {[file exists $FichierLog]} {lappend LesLogs $FichierLog} if {[file exists $FichierACharger]} {lappend LesFichiersOligo $FichierACharger} set lesXDebutFinDeOligo [InterrogeInfoDeLOligo $FichierACharger LesDebutFin] if {$lesXDebutFinDeOligo == ""} { if { [InterrogeInfoDeLOligo $FichierACharger NotDone]=="1"} { set Message "No Oligo calculated for $PAB in $DirOligo" } elseif {[InterrogeInfoDeLOligo $FichierACharger NoOligo]=="1"} { set Message "No Oligo available for $PAB in $DirOligo" } else {set Message "Petit probleme"} $K create text $XMilieu $YDebutDeOligo -text "$Message" -font "$Police2" set YDebutDeOligo [expr $YDebutDeOligo + 20] continue } #Construction des boites des Oligos #Classement des bornes du Nt vers Ct (3prime vers 5prime) #Creation des boites avec plus de 40 d ecart ######################################################### if {$OnADejaFaitLesSpike == "0" && [regexp -nocase "spike" $DirOligo]} { set OnADejaFaitLesSpike 1 set RepSpike "[RepertoireDuGenome]/Probes/Spike_Athaliana" set OligoDuSpike "$RepSpike/${PAB}.oligo" if {[file exists $OligoDuSpike]} { set lesXDebutFinDesSpikes [InterrogeInfoDeLOligo $OligoDuSpike LesDebutFin] foreach UnDebutFinDesSpikes [lsort -real -increasing -index 0 $lesXDebutFinDesSpikes] { set YFinDeOligo [expr $YDebutDeOligo + $EpaisseurBoite] set NbUnrelated "" set NomOligo [InterrogeInfoDeLOligo $OligoDuSpike [lindex $UnDebutFinDesSpikes 0] [lindex $UnDebutFinDesSpikes 1] NomOligo] set LaSequence [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo Sequence] set TailleOligo [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo Taille] set GC [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo GC] set Tm [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo Tm] set ExpTm [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo ExpTm] set XDebutDeOligoNt [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo Debut] set XFinDeOligoNt [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo Fin] set NbCandidats [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo NbCandidats] set NbContigues [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo NbContigues] set LesCandidats [InterrogeInfoDeLOligo $OligoDuSpike $NomOligo LesCandidats] if {$TailleOligo == ""} {set TailleOligo [string length $LaSequence]} if {$TailleOligo>$TailleQueryNt} {set TailleOligo $TailleQueryNt} if { $GC == ""} { set GC [format "%.1f" [expr (([NombreDeBaseDe $LaSequence "G|C"])/($TailleOligo*1.0))*100.0]] } if {$Tm == ""} {set Tm [CalculTmDeLaSeq $LaSequence "" "" NearestNeighbor]} if {$ExpTm == ""} {set ExpTm [CalculTmDeLaSeq $LaSequence "" "" DNADNA]} if {$XDebutDeOligoNt == ""} {set XDebutDeOligoNt 1} if {$XFinDeOligoNt == ""} {set XFinDeOligoNt $TailleOligo} if {$NbCandidats == ""} {set NbCandidats "-1"} if {$NbContigues == ""} {set NbContigues "-1"} if {$NbUnrelated == ""} {set NbUnrelated "0"} set CouleurBoite "black" #Les infos contenues dans l info bulle #set Texte [format "%-10s%-10s" "Id-Oligo:" "$NomOligo"] set Texte [format "%-4s%-10s" "Id:" "$NomOligo"] append Texte [format "\n%-10s%-10s" "Database:" "$DB"] append Texte [format "\n%-10s%-3d %5s" "Length:" "$TailleOligo" "nt(s)"] append Texte [format "\n%-10s%3.1f %1s" "GC:" "$GC" "%"] append Texte [format "\n%-10s%3.1f %5s" "NN-Tm:" "$Tm" "degree(s)"] append Texte [format "\n%-10s%3.1f %5s" "Ex-Tm:" "$ExpTm" "degree(s)"] append Texte [format "\n%-10s%3d %5s" "Begin:" "$XDebutDeOligoNt" "/ $TailleQueryNt nt(s)"] append Texte [format "\n%-10s%3d %5s" "End:" "$XFinDeOligoNt" "/ $TailleQueryNt nt(s)"] append Texte [format "\n%-15s%2d" "X-Detected:" "$NbCandidats"] append Texte [format "\n%-15s%2d" "Contiguous:" "$NbContigues"] append Texte [format "\n%-15s%2d" "Unrelated Acc:" "$NbUnrelated"] #Calcul positions de l oligo sur la query set XDebutDeOligo [expr $XDebutQuery + $OneNtPixel * $XDebutDeOligoNt - $OneNtPixel] set XFinDeOligo [expr $XDebutDeOligo + $OneNtPixel * $TailleOligo - $OneNtPixel] #On dessine la boite de l oligo $K create rectangle $XDebutDeOligo $YDebutDeOligo $XFinDeOligo $YFinDeOligo -outline "white" -fill "$CouleurBoite" -tags [list "" $Texte $XDebutDeOligoNt $XFinDeOligoNt $NomOligo $RepSpike Affichable Positionner Boite] set YDebutDeOligo [expr $YFinDeOligo + $Intervalle] } set YDebutDeOligo [expr $YFinDeOligo + $Intervalle] } } while {1} { if {$lesXDebutFinDeOligo==""} {break} set YFinDeOligo [expr $YDebutDeOligo + $EpaisseurBoite] set OldDebut -40 foreach UnDebutFinDeOligo [lsort -real -increasing -index 0 $lesXDebutFinDeOligo] { set NbUnrelated "" set NomOligo [InterrogeInfoDeLOligo $FichierACharger [lindex $UnDebutFinDeOligo 0] [lindex $UnDebutFinDeOligo 1] NomOligo] set LaSequence [InterrogeInfoDeLOligo $FichierACharger $NomOligo Sequence] set TailleOligo [InterrogeInfoDeLOligo $FichierACharger $NomOligo Taille] set GC [InterrogeInfoDeLOligo $FichierACharger $NomOligo GC] set Tm [InterrogeInfoDeLOligo $FichierACharger $NomOligo Tm] set ExpTm [InterrogeInfoDeLOligo $FichierACharger $NomOligo ExpTm] set XDebutDeOligoNt [InterrogeInfoDeLOligo $FichierACharger $NomOligo Debut] set XFinDeOligoNt [InterrogeInfoDeLOligo $FichierACharger $NomOligo Fin] set NbCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbCandidats] set NbContigues [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbContigues] set LesCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo LesCandidats] set NbUnrelated [regexp -all {NG[0-9]+} $LesCandidats] if {$TailleOligo == ""} {set TailleOligo [string length $LaSequence]} if {$TailleOligo>$TailleQueryNt} {set TailleOligo $TailleQueryNt} if { $GC == ""} { set GC [format "%.1f" [expr (([NombreDeBaseDe $LaSequence "G|C"])/($TailleOligo*1.0))*100.0]] } if {$Tm == ""} {set Tm [CalculTmDeLaSeq $LaSequence "" "" NearestNeighbor]} if {$ExpTm == ""} {set ExpTm [CalculTmDeLaSeq $LaSequence "" "" DNADNA]} if {$XDebutDeOligoNt == ""} {set XDebutDeOligoNt 1} if {$XFinDeOligoNt == ""} {set XFinDeOligoNt $TailleOligo} if {$NbCandidats == ""} {set NbCandidats "-1"} if {$NbContigues == ""} {set NbContigues "-1"} if {$NbUnrelated == ""} {set NbUnrelated "0"} set CouleurBoite [CouleurDeLOligo $NbCandidats] #Les infos contenues dans l info bulle #set Texte [format "%-10s%-10s" "Id-Oligo:" "$NomOligo"] set Texte [format "%-4s%-10s" "Id:" "$NomOligo"] append Texte [format "\n%-10s%-10s" "Database:" "$DB"] append Texte [format "\n%-10s%-3d %5s" "Length:" "$TailleOligo" "nt(s)"] append Texte [format "\n%-10s%3.1f %1s" "GC:" "$GC" "%"] append Texte [format "\n%-10s%3.1f %5s" "NN-Tm:" "$Tm" "degree(s)"] append Texte [format "\n%-10s%3.1f %5s" "Ex-Tm:" "$ExpTm" "degree(s)"] append Texte [format "\n%-10s%3d %5s" "Begin:" "$XDebutDeOligoNt" "/ $TailleQueryNt nt(s)"] append Texte [format "\n%-10s%3d %5s" "End:" "$XFinDeOligoNt" "/ $TailleQueryNt nt(s)"] append Texte [format "\n%-15s%2d" "X-Detected:" "$NbCandidats"] append Texte [format "\n%-15s%2d" "Contiguous:" "$NbContigues"] append Texte [format "\n%-15s%2d" "Unrelated Acc:" "$NbUnrelated"] #Calcul positions de l oligo sur la query set XDebutDeOligo [expr $XDebutQuery + $OneNtPixel * $XDebutDeOligoNt - $OneNtPixel] set XFinDeOligo [expr $XDebutDeOligo + $OneNtPixel * $TailleOligo - $OneNtPixel] if {[expr $XDebutDeOligo > [expr $OldDebut+40.0]] =="1"} { #On dessine la boite de l oligo $K create rectangle $XDebutDeOligo $YDebutDeOligo $XFinDeOligo $YFinDeOligo -outline "white" -fill "$CouleurBoite" -tags [list "" $Texte $XDebutDeOligoNt $XFinDeOligoNt $NomOligo $DirOligo Affichable Positionner Boite] set OldDebut $XFinDeOligo set index [lsearch $lesXDebutFinDeOligo $UnDebutFinDeOligo] set lesXDebutFinDeOligo [lreplace $lesXDebutFinDeOligo $index $index] } } #On ajoute de l espace pour la deuxieme ligne set YDebutDeOligo [expr $YFinDeOligo + $Intervalle] } set YDebutDeOligo [expr $YDebutDeOligo + 15] #Separateur entre chaque design $K create text $XDebutQuery [expr $YDebutDeOligo-8] -text "$IdDuGraph: $DB" -font {-family "arial" -size 10 -weight bold} -anchor "w" $K create line $XDebutQuery $YDebutDeOligo $XFinQuery $YDebutDeOligo -fill "black" -width 2 set YDebutDeOligo [expr $YDebutDeOligo+$Intervalle] } #Sauve les informations importantes du canvas SauveLesInfosDe $K MonFichierQuery $FichierQuery SauveLesInfosDe $K MonAccessQuery $AccessQuery SauveLesInfosDe $K MaTailleDeQuery $TailleQueryNt SauveLesInfosDe $K MesDirs $LesDirs SauveLesInfosDe $K MesBlasts $LesFichiersBlast SauveLesInfosDe $K MesLogs $LesLogs SauveLesInfosDe $K MesFichiersOligo $LesFichiersOligo SauveLesInfosDe $K MonPAB $PAB #Pour accorder la taille de la fenetre selon la taille des resultats affiches if {$YDebutDeOligo < [winfo screenheight .] } {$K configure -height $YDebutDeOligo} #Pour accorder la scrollbar au dernier oligo affiche $K configure -scrollregion [list 0 0 $LargeurMax $YDebutDeOligo] set InfosDeBase [list AvecSeqFormate AvecTaille AvecStatNuc AvecTm] $K bind "Query" <1> "SauveLesInfosDe $K Win \[AfficheVariable \[LesInfosDeBaseDeMaSequence $SeqQuery \"$InfosDeBase\"\]\]" $K bind "Query" <2> "SauveLesInfosDe $K Win \[AfficheFetch $AccessQuery OnVeutNature\]" $K bind "Query" <3> "SauveLesInfosDe $K Win \[AfficheLaQuery $K $FichierQuery\]" $K bind "Affichable" "AfficheInfoBulle $K %x %y Enter" $K bind "Affichable" "AfficheInfoBulle $K %x %y Leave" $K bind "Positionner" <1> "AffichePositionOligo $K %x %y Show" $K bind "Positionner" <2> "SauveLesInfosDe $K Win \[AfficheLesAutresCandidats $K $PAB\]" $K bind "Positionner" <3> "SauveLesInfosDe $K Win \[AfficheLaSequenceDeLOligo $K $PAB\]" $K bind "Positionner" "SauveLesInfosDe $K Win \[AfficheLesAutresCandidatsComplet $K $PAB\]" $K bind "Positionner" "SelectionneOligo $K" $K bind "Positionner" "SelectionneOligoCroisee $K" regsub ".canvas$" $K "" F set B [BoutonneLaFenetre $F "Position Show / Hide\nHelp Main / Color\nChange Acc Separator"] bind $B <1> "AffichePositionOligoPourTous $K %x %y Show" bind $B <2> "EffacePositionOligoPourTous $K %x %y" bind $B "AfficheHelp DuBouton" bind $B "SignificationDesCouleursDeLOligo" bind $B "ChangeDebutAccessDeDir" set Texte [format "%-10s" "Display the nt positions among the query"] append Texte [format "\n%-10s" "Help for program and coloring scheme"] append Texte [format "\n%-10s" "Accession from database are stored on one line\nex:RSHUM_myprot1 RSHUM_myprot2\nIf the program does not how to separate them,\n you can help it, here it is RSHUM_"] set_balloon $B "$Texte" set C [BoutonneLaFenetre $F "Show Blast / Mosaic\nShow Log / Oligo File\nBest Hit / Self-Comp."] bind $C <1> "SauveLesInfosDe $K Win \[AfficheFichier \[ChoixParmi \[LesInfosDe $K MesBlasts\]\] AvecSegAlignement\]" bind $C <2> "IllustreLeBlast \[ChoixParmi \[LesInfosDe $K MesBlasts\]\]" bind $C <3> "SauveLesInfosDe $K Win \[DrawBlast \[ChoixParmi \[LesInfosDe $K MesBlasts\]\]\]" bind $C "SauveLesInfosDe $K Win \[AfficheFichier \[ChoixParmi \[LesInfosDe $K MesLogs\]\]\]" bind $C "SauveLesInfosDe $K Win \[AfficheFichier \[ChoixParmi \[LesInfosDe $K MesFichiersOligo\]\] t\]" bind $C "CheckForBestHitInDatabase $PAB \[ChoixParmi \[LesInfosDe $K MesDirs\]\]" bind $C "SauveLesInfosDe $K Win \[SelfComplementarity_GUI $K $PAB\]" set Texte [format "%-10s" "Display BLAST file and friendly output"] append Texte [format "\n%-10s" "Display .log or .oligo file"] append Texte [format "\n%-10s" "Check best hit in database, Self-complementarity"] set_balloon $C "$Texte" set D [BoutonneLaFenetre $F "Graph Panel\nGraph Add / Delete\nSearch / Clear"] bind $D <1> "Graph_Panel $K" bind $D "AjouteUnGraph $K $FichierQuery $XDebutQuery $XFinQuery $YDebutGraph $YFinGraph $OneNtPixel" bind $D "SupprimeUnGraph $K" bind $D "TrouveDansLesInfos $K" bind $D "DeselectionneLesTrouves $K" set Texte [format "%-10s" "Panel to change graph display (order,color)"] append Texte [format "\n%-10s" "Allow to add or delete graph"] append Texte [format "\n%-10s" "Allow to search items in oligo display text"] set_balloon $D "$Texte" set E [BoutonneLaFenetre $F "Selected / Reset / Save\nX-Selected / Reset / Save\nAuto Selection / X-Selection"] bind $E <1> "AllumeLaSelection $K $PAB \[LesInfosDe $K MesDirs\]" bind $E <2> "DeselectionneLesSelectionnes $K" bind $E <3> "SauveLesSelectionnes $K $PAB \[LesInfosDe $K MesDirs\]" bind $E "AllumeLaXSelection $K $PAB \[LesInfosDe $K MesDirs\]" bind $E "DeselectionneLesXSelectionnes $K" bind $E "SauveLesXSelectionnes $K $PAB \[LesInfosDe $K MesDirs\]" bind $E "SelectionDesOligos_GUI $PAB \[ChoixParmi \[LesInfosDe $K MesDirs\]\]" bind $E "SelectionCroiseeDesOligos_GUI $PAB \[ChoixParmi \[LesInfosDe $K MesDirs\]\] $DirOligo" set Texte [format "%-10s" "Allow to display, hide or save Selected oligo"] append Texte [format "\n%-10s" "Allow to display, hide or save X-Selected oligo"] append Texte [format "\n%-10s" "Do Selection or X-Selection"] set_balloon $E "$Texte" set F [BoutonneLaFenetre $F "Draw again / Erase / Reset\nTo Excel Sel / Project\nComplete another"] bind $F <1> "RestrictedParameter_Panel $K" bind $F <2> "EffaceLesBoitesDuCanvas $K" bind $F <3> "InterrogeInfoDeLOligo \[ChoixParmi \[LesInfosDe $K MesFichiersOligo\]\] Decharge" bind $F "UnOligoPourExcel_GUI $K $PAB" bind $F "LesOligosPourExcel_GUI \[ChoixParmi \[LesInfosDe $K MesDirs\]\]" bind $F "CompleteLaListeDesOligos_GUI $K $PAB \[ChoixParmi \[LesInfosDe $K MesDirs\]\]" set Texte [format "%-10s" "Allow to redraw results with restricted parameters"] append Texte [format "\n%-10s" "Allow to save under tab delimited file (excel)"] append Texte [format "\n%-10s" "Complete results from another design with selected oligo"] set_balloon $F "$Texte" bind $K "ViseurDeSeq $K %x %y $XDebutQuery $XFinQuery $YDebutGraph $YDebutDeOligo $OneNtPixel" bind $K "ViseurDeSeq $K %x %y $XDebutQuery $XFinQuery $YDebutGraph $YDebutDeOligo $OneNtPixel" wm deiconify $w #Check le design pour la presence de la query dans le blast #Pop up une boite de dialogue le cas echeant set FEvalue "" foreach Dir $LesDirs { set FEvalue [EvalueLeDesign $PAB $Dir] if {$FEvalue!=""} { raise $FEvalue $w SauveLesInfosDe $K Win $FEvalue } set FEvalue "" } #Binding pour permettre de zoomer en utilisant le 3eme bouton bind $K <3> "zoomMark $K %x %y" bind $K "zoomStroke $K %x %y" bind $K "zoomArea $K %x %y" return "" } proc IllustreOligoArray {{PAB ""} {Directories ""}} { Wup "Illustre une sortie OligoArray 1.0 pour l'instant" #Version pour visualiser plusieurs oligos de plusieurs banques en simultanee. #Addon GC content, Help #21/02/2003 if {$PAB==""} {return "Correct syntax is IllustreOligoArray PAB ProbesDir\nfor ex: IllustreOligoArray ACT0001"} set RepOligo "[RepertoireDuGenome]/Probes" if {$Directories!=""} { foreach Dir $Directories { if {[regexp {/} $Dir]} { lappend LesDirs [file tail $Dir] } else {lappend LesDirs $Dir} } } else { set LesDirs {} set LesDirectories "[glob -nocomplain $RepOligo/*]" foreach File $LesDirectories { if {! [file isdirectory $File]} {continue} else {lappend LaListe [file tail $File]} } set LesDirs [ChoixDesPresents $LaListe] } #Attention il faut une query, sinon pas de taille .... set RepmRNA "[RepertoireDuGenome]/mrnahuman" set Repnuctfa "[RepertoireDuGenome]/nuctfa" if {[file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else {Espionne "No File for the Query ($PAB)";return ""} set Police "Courier 12" set CouleurOutline "black" set LargeurMax [expr [winfo screenwidth .] - 200] set HauteurMax [expr [winfo screenheight .]*2/4] set LargeurFenetre [expr [winfo screenwidth .] - 200] set HauteurFenetre [expr [winfo screenheight .]*1/2] set XMilieu [expr $LargeurMax/2] set BordureX 50.0 set BordureY 50.0 set Intervalle 10.0 set EpaisseurBoite 15.0 #Position du GC content set YDebutGC [expr 0 + $BordureY] set YFinGC [expr $YDebutGC + 50] #Position de la query set XDebutQuery [expr 0 + $BordureX] set YDebutQuery [expr $YFinGC + 10] set XFinQuery [expr $LargeurMax - $BordureX] set YFinQuery [expr $YDebutQuery + $EpaisseurBoite] #Besoin de la taille de la query pour conversion et affichage set AccessQuery [AccessDuTFADumRNA $FichierQuery] set SeqQuery [QueLaSequenceDuFichierTFA $FichierQuery] set TailleQueryNt [string length $SeqQuery] set OneNtPixel [expr ($XFinQuery-$XDebutQuery)/$TailleQueryNt] #Debut des Oligos set YDebutDeOligo [expr $YFinQuery + $Intervalle] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre "" "IllustreOligoArray"] $K configure -background white #Affichage du GC content set GCResults [CreeLesFichiersSpectreDesGC $SeqQuery SpectreGCXY 30] if {$GCResults !={}} { AfficheLeSpectreGCDUneListe $K $GCResults $XDebutQuery $XFinQuery $YDebutGC $YFinGC $OneNtPixel } #Affiche la query $K create rectangle $XDebutQuery $YDebutQuery $XFinQuery $YFinQuery -outline "$CouleurOutline" -fill "red" -tags "Query" $K create text [expr $XDebutQuery-5.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "1" -font "$Police" -anchor e $K create text [expr $XFinQuery+5.0] [expr $YDebutQuery + ($EpaisseurBoite/2.0)] -text "$TailleQueryNt" -font "$Police" -anchor w $K create text $XMilieu [expr 1*$BordureY/3] -text "Oligo de $PAB dans $LesDirs" #Affiche la petite aide $K create oval [expr $XFinQuery-20] 20 $XFinQuery 40 -fill "green" -outline "green" $K create text [expr $XFinQuery-10] [expr 1*$BordureY-20] -text "?" -tags [list "" "[AfficheHelpOligoArray]" "Affichable"] #Dessine les boites des differentes sources set i 0 set LesOligos {} foreach DirOligo [lsort -unique $LesDirs] { set LesCouleurs [list "green" "blue" "grey" "black"] if {$i>3} {break} #Lit le fichier OligoArray pour obtenir les oligos set LesOligos [LitSortieOligoArray $PAB "$RepOligo/$DirOligo"] if {$LesOligos == "-1"} { $K create text $XMilieu $YDebutDeOligo -text "No Oligo Available for $PAB in $DirOligo" -font "10" set YDebutDeOligo [expr $YDebutDeOligo + 20] continue } if {$LesOligos == "-2"} { $K create text $XMilieu $YDebutDeOligo -text "No Oligo calculated for $PAB in $DirOligo" -font "10" set YDebutDeOligo [expr $YDebutDeOligo + 20] continue } set CouleurBoite [lindex $LesCouleurs $i] incr i foreach Oligo $LesOligos { set NomOligo "" set TailleOligo "" set PositionOligoDebut "" set Tm "" set TmStructure "" set DistanceDu3End "" if { ! [regexp -nocase {[a-z]+ || [0-9]+} $Oligo]} {continue} ScanLaListe $Oligo NomOligo TailleOligo Tm TmStructure DistanceDu3End ExpTm set Texte "Nom:$NomOligo\nDB:$DirOligo\nTaille:$TailleOligo nt\nTm:$Tm Degree\nExpTm:$ExpTm Degree\nTm Structure:$TmStructure Degree" #Positions de oligo set PositionOligoDebut [expr $TailleQueryNt - $DistanceDu3End] set XFinDeOligoNt [expr $PositionOligoDebut + $TailleOligo] #Calcul positions de l'oligo sur la query set XDebutDeOligo [expr $XDebutQuery + $OneNtPixel * $PositionOligoDebut] set XFinDeOligo [expr $XDebutDeOligo + $OneNtPixel * $TailleOligo] set YFinDeOligo [expr $YDebutDeOligo + $EpaisseurBoite] $K create rectangle $XDebutDeOligo $YDebutDeOligo $XFinDeOligo $YFinDeOligo -outline "$CouleurOutline" -fill "$CouleurBoite" -tags [list "" $Texte $PositionOligoDebut $XFinDeOligoNt $NomOligo $DirOligo "Affichable" "Positionner"] set YDebutDeOligo [expr $YFinDeOligo + $Intervalle] } } #Pour accorder la scrollbar au dernier oligo affiche $K configure -scrollregion [list 0 0 $LargeurMax $YDebutDeOligo] $K bind "Query" <2> "AfficheFetch $AccessQuery OnVeutNature" $K bind "Query" <3> "AfficheLaQuery $K $PAB" $K bind "Affichable" "AfficheInfoDeLOligo $K %x %y Enter" $K bind "Affichable" "AfficheInfoDeLOligo $K %x %y Leave" $K bind "Positionner" <1> "AffichePositionOligo $K %x %y Show" $K bind "Positionner" <2> "AfficheLesAutresCandidatsOligoArray $K $PAB" $K bind "Positionner" <3> "AfficheExtraitOligoDuTFA $K $PAB" regsub ".canvas$" $K "" F set B [BoutonneLaFenetre $F "Coordinates Show/Hide\nHelp"] bind $B <1> "AffichePositionOligoPourTous $K %x %y Show" bind $B <2> "AffichePositionOligoPourTous $K %x %y Hide" bind $B "AfficheHelpOligoArray DuBouton" return "" } proc IllustreOligoArrayPourTous {LesDirs {AvecPosition 0}} { Wup "Affiche pour tous les ACT present dans Dir les oligos illustre" set LesPABs {} foreach Dir $LesDirs { set UneListe [glob -nocomplain "[RepertoireDuGenome]/Probes/$Dir/*"] foreach PAB $UneListe {lappend LesPABs [file tail $PAB]} } set LesPABs [lsort -unique $LesPABs] foreach Dir $LesDirs { if {$AvecPosition} { set FichierPosition "[RepertoireDuGenome]/PositionOligo" AppendAuFichier $FichierPosition "[file tail $Dir]" } foreach PAB $LesPABs { set Queue [file tail $PAB] IllustreOligoArray $Queue $Dir $AvecPosition } } } proc IllustreOligoCGH {Cas {LesPos ""} {LesNoms ""}} { # liste des cas if {$Cas!="meta" && $Cas!="nometa" && $Cas!="cl"} { set LesCas $Cas } if {$Cas=="cl"} {set LesCas {CL_PC3 CL_DU145 CL_22rv1 CL_LNCaP} } #if {$Cas!="meta" && $Cas!="nometa"} {return} if {$Cas=="meta"} { set LesCas {Oligo806 Oligo807 Oligo810 Oligo817 Oligo818 Oligo819 Oligo826 Oligo827} } if {$Cas=="nometa"} {set LesCas {Oligo809 Oligo811 Oligo812 Oligo814 Oligo815 Oligo816 Oligo820 Oligo821 Oligo822 Oligo823 Oligo825}} Espionne $LesCas set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoite 10 set EcartEntreRepresentations 100 #en fct du nb de plots- plus grande val- apres ascenseur. set HauteurMax [expr $BordY + [expr [llength $LesCas]-1]*$HauteurBoite + [llength $LesCas]*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set PosXMin $BordX set PosYMin [expr $HauteurMax - $BordY] set PosYMax [expr $HauteurMax - $BordY] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set TailleGenome 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleGenome [expr ($TailleGenome*1.0) + ($TailleChromo*1.0)] } set Facteur [expr ($LargeurAffichage*1.0)/($TailleGenome*1.0)] # pour chaque fichier Oligo foreach Oligo $LesCas { if {$Cas!="meta" && $Cas!="nometa" && $Cas!="cl"} { set FichierCourbeOligo $Oligo } else { set FichierCourbeOligo "[RepertoireDuGenome]/PRIMA_CGH/$Oligo" } Espionne $Oligo set NomFichierOligo [file tail $FichierCourbeOligo] # HR: set VMax 5.98 set VMin -4.68 # meta: #set VMax 6.59 #set VMin -4.07 set VMaxf $VMax set VMinf $VMin set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] if {[info exists TabC]} {unset TabC} ChargeFichierCourbeCGH TabC $FichierCourbeOligo $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set DebutCentro [expr $DebutCentro*1.0 + $TailleChroCum*1.0] set FinCentro [expr $FinCentro*1.0 + $TailleChroCum*1.0] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabC($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)]} { set n 1 foreach Pos [set TabC($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)] { if {$n==1} {incr n;continue} if {$n==2} {incr n;continue} if {$n==3} {incr n;continue} if {$n==4} {incr n;continue} if {$n==5} {set n 1} set Pos10 [Base10 $Pos] set PosMid [expr $Pos10 + $TailleChroCum] foreach LInfo [set TabC($FichierCourbeOligo,Chromosome,$Chromosome,$Pos)] { set Val [lindex $LInfo 3] set Val [expr $Val*log(10)/log(2)] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$DebutCentro && $PosMid<=$FinCentro} { # x1 est avant le debut du centro et x2 dedans set X1 $PosMid set Y1 $Value continue } if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { # aucun point dans le centromere set X1 $PosMid set Y1 $Value } if {($X1>=$DebutCentro && $X1<=$FinCentro) && ($PosMid>=$DebutCentro && $PosMid<=$FinCentro)} { # x1 et x2 sont dans le centromere set X1 $PosMid set Y1 $Value continue } if {$X1<=$FinCentro && $PosMid>=$FinCentro && $X1>=$DebutCentro} { # x1 est avant la fin du centro et x2 apres le centromere set X1 $PosMid set Y1 $Value } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -0 #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo + $TailleChroCum) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo +$TailleChroCum)* $Facteur)-($TailleChromo*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $LesCas "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierOligo CGH plot " -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr ($TailleChroCum*1.0) + ($TailleChromo*1.0)] } set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] } #### fin boucle ### LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "Chromosome" <1> "ac_ChromosomeSelectionneCGH $K" regsub {\.canvas} $K "" w bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc IllustreOligoCGHseg {Cas {LesPos ""} {LesNoms ""}} { if {$Cas!="" && $Cas!="null"} { set LesCas $Cas Espionne $LesCas } set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoite 10 set EcartEntreRepresentations 100 #en fct du nb de plots- plus grande val- apres ascenseur. set HauteurMax [expr $BordY + [expr [llength $LesCas]-1]*$HauteurBoite + [llength $LesCas]*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set PosYMin [expr $HauteurMax - $BordY] set PosYMax [expr $HauteurMax - $BordY] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleGenome 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleGenome [expr ($TailleGenome*1.0) + ($TailleChromo*1.0)] } # Attention au *1.0 !!! indispensable pour windows! (sinon taille du genome, negative! donc facteur negatif) set Facteur [expr ($LargeurAffichage*1.0)/($TailleGenome*1.0)] # pour chaque fichier oligo seg foreach Oligo $LesCas { Espionne $Oligo set FichierCourbeOligoSeg $Oligo set NomFichierOligoSeg [file tail $FichierCourbeOligoSeg] # HR: #set VMax 3.52 #set VMin -2.18 # meta: set VMax 2.13 set VMin -2.39 set VMaxf $VMax set VMinf $VMin set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set TailleChroCum 0 foreach Chromosome $ListeChro { set nChromosome [NumeroDuChromosome $Chromosome] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] ChargeFichierSEG TabO $FichierCourbeOligoSeg $Chromosome $LesPos set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set X1 0;set Y1 0 set LeChromo ""; lappend LeChromo $Chromosome; lappend LeChromo "Chr" if {[info exists TabO($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabO($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabO($FichierCourbeOligoSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [expr [lindex $LInfo 3]+ $TailleChroCum] set PosSup [expr [lindex $LInfo 4]+ $TailleChroCum] if {$PosSup<0} {Espionne "posinf=$PosInf et posusp=$PosSup"} set Val [lindex $LInfo 6] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX + (($TailleChromo*1.0 + $TailleChroCum*1.0) * $Facteur)] $PosYCenter [expr $BordX + (($TailleChromo*1.0 + $TailleChroCum*1.0) * $Facteur)] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 1 #texte chro $K create text [expr $BordX + (($TailleChromo*1.0 +$TailleChroCum*1.0)* $Facteur)-($TailleChromo*1.0*$Facteur)/2] [expr $PosYCenter + 10] -text "$nChromosome" -font "$Police" -fill "Mediumblue" -tags [list $Chromosome $LesCas "Chromosome"] #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 20] -text "$NomFichierOligoSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" set TailleChroCum [expr ($TailleChroCum*1.0) + ($TailleChromo*1.0)] } set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] } LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "Chromosome" <1> "ac_ChromosomeSelectionneCGH_seg $K" regsub {\.canvas} $K "" w bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc IllustreOntology {Type {MesGO NotDisplayMyGO} {Density No} {GOIni All} {PremierNiveau ""}} { Wup "MesGO options `OnlyMyGO` `AllAndMyGO` `NotDisplayMyGO` 'Density'" set HauteurMax [expr [winfo screenheight .] - 130] set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurFenetre [expr [winfo screenheight .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100] set BordY 50.0 set BordX 50.0 set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set PoliceTitre "Arial 14 bold" set PoliceNiveau "Arial 12 bold" set LesNiveaux [Onto $Type LesNiveaux] if {$PremierNiveau == ""} {set PremierNiveau [lindex $LesNiveaux 0]} if {$GOIni == "All"} {set GOIni [lindex [Onto $Type $PremierNiveau] 0]} if {![OntoExists $Type $GOIni LesNiveaux]} {return ""} set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] $K configure -background white $K create text [expr $LargeurFenetre/2] [expr $BordY/2] -text "Gene Ontology : $Type" -font $PoliceTitre set nNiveaux [llength $LesNiveaux] set EcartY [expr $HauteurAffichage * 1.0 / ($nNiveaux-1)] set XMin $BordX set XMax [expr $BordX + $LargeurAffichage] foreach Niveau $LesNiveaux { if {![info exists Y]} { set Y [expr $BordY + $HauteurAffichage] } else { set Y [expr $Y - $EcartY] } $K create text [expr $BordX /2] $Y -text "Niv $Niveau" -font $PoliceNiveau $K create text [expr $LargeurAffichage+$BordX*3/2] $Y -text "Niv $Niveau" -font $PoliceNiveau $K create line $XMin $Y $XMax $Y -fill lightgrey set TabCoord($Niveau,Y) $Y } set TabCoord(XMin) $XMin set TabCoord(XMax) $XMax set TabCoord(RayonMax) [expr $EcartY / 4] PlaceLesGOSurLArbre $K TabCoord $Type $PremierNiveau $GOIni "" $MesGO $Density regsub {\.canvas} $K "" w set C [BoutonneLaFenetre $w "GO Function/Process/Component\nMyGO NotThem/JustThem/AllAndThem\nReset All My GO"] bind $C <1> "IllustreOntology function $MesGO $Density All " bind $C <2> "IllustreOntology process $MesGO $Density All " bind $C <3> "IllustreOntology component $MesGO $Density All " bind $C "IllustreOntology $Type NotDisplayMyGO $Density All " bind $C "IllustreOntology $Type OnlyMyGO $Density All " bind $C "IllustreOntology $Type AllAndMyGO $Density All " bind $C "ResetMesGO" set B [BoutonneLaFenetre $w "Density Access/Box/Requetes\nDensity All/None"] bind $B <1> "IllustreOntology $Type $MesGO Access All" bind $B <2> "IllustreOntology $Type $MesGO Box All" bind $B <3> "IllustreOntology $Type $MesGO Requetes All" bind $B "IllustreOntology $Type $MesGO All All" bind $B "IllustreOntology $Type $MesGO No All" $K bind "GO" "DevoileLesOntologies $K %x %y Enter" $K bind "GO" "DevoileLesOntologies $K %x %y Leave" $K bind "GO" <1> "IllustreGODuSelectionne $K %x %y $MesGO $Density " $K bind "GO" <3> "DevoileLeGO $K %x %y" $K bind "GO" "SelectionDesGODansFichier $K %x %y" return "" } proc IllustreOntologyDesAccess {LesAccess {Type ""}} { if {$Type == ""} {set Type [ChoixParmi [LesTypesOntologiques]]} foreach Access $LesAccess { Espionne $Access ChargeLesGODeLAccess $Access } if { $LesAccess != {}} { IllustreOntology $Type "OnlyMyGO" } else { IllustreOntology $Type } return "" } proc IllustreOntologyDesBoitesGscope {LesNoms {Type ""}} { if {$Type == ""} {set Type [ChoixParmi [LesTypesOntologiques]]} Espionne "LOADING ONTOLOGY..." ChargeLesGODeLaBoiteGscope $LesNoms Espionne "ONTOLOGY LOADED..." if { $LesNoms != {}} { IllustreOntology $Type "OnlyMyGO" } else { IllustreOntology $Type } return "" } proc IllustreOntologyDesGO {LesGO {Type ""}} { if {$Type == ""} {set Type [ChoixParmi [LesTypesOntologiques]]} Espionne "LOADING ONTOLOGY..." ChargeLesGODuGO $LesGO Espionne "ONTOLOGY LOADED..." IllustreOntology $Type "OnlyMyGO" return "" } proc IllustrePSORTII {{LesPABs ""}} { Wup "Permet de visualiser les localisations de PSORTII" Wup "Faire attention aux localisations cellulaires dans la liste possible" if {$LesPABs == ""} {set LesPABs [MorceauxChoisis [ListeDesPABs]]} set LesListeLoc "" foreach PAB $LesPABs { set FichierPsort "[RepertoireDuGenome]/psort/$PAB" if {! [file exists $FichierPsort]} { if {[file exists $PAB]} { set FichierPsort $PAB } } set LesLocsDuPAB [InterrogeInfoDePSORTII $FichierPsort LesLocalisations] set LesLocs [LesLocalisationDesPSORTII] #Si une localisation est manquante foreach MaLoc $LesLocsDuPAB { if {![regexp -nocase $MaLoc $LesLocs]} {lappend LesLocs $MaLoc} } set ListeLoc "" foreach Loc $LesLocs { set Percent "" set Percent [InterrogeInfoDePSORTII $FichierPsort $Loc] if {$Percent == ""} { lappend ListeLoc [list $Loc 0 0.0 100.0] continue } lappend ListeLoc [list $Loc $Percent 0.0 100.0] } set ListeLoc [linsert $ListeLoc 0 $PAB] lappend LesListeLoc $ListeLoc } set Titre "PSORTII - Localisation results for $PAB" set AvecTitre 1 set AvecLegende 1 set AvecVal 1 set AvecValEchelle 0 set AvecLigne 1 IllustreLesToilesDAraignee $LesListeLoc 3 $AvecTitre $AvecLegende $AvecVal $AvecValEchelle $AvecLigne return "" } proc IllustrePresencesDesClusters {{LesClusters ""} {nParLigne 2}} { if {$LesClusters == {}} {set LesClusters [O2C2O LesClusters]} set ListePresencesDeTousLesClusters {} set LesCategories [MorceauxChoisis [lsort [O2C2O LesCategories]]] foreach Cluster $LesClusters { Espionne $Cluster set Liste [list "Presence in cluster $Cluster"] foreach Categorie $LesCategories { set ValeurPresence [O2C2O Cluster $Cluster Categorie $Categorie Presence] if {$ValeurPresence == ""} {continue} lappend Liste [list $Categorie $ValeurPresence 0 100] } lappend ListePresencesDeTousLesClusters $Liste } EspionneL $ListePresencesDeTousLesClusters IllustreLesToilesDAraignee $ListePresencesDeTousLesClusters $nParLigne 1 1 0 0 1 return } proc IllustreSEACI {FichierSEACI {AvecPourcentage 1} {AvecDefinition 1}} { if {![file exists $FichierSEACI]} {return ""} Espionne "LOADING $FichierSEACI ..." ChargeLesResultatsDeSEACI SEACI $FichierSEACI Espionne "$FichierSEACI LOADED..." if { ![info exists SEACI(LesRequetes)] || ![info exists SEACI(LesCategories)] || [set SEACI(LesRequetes)] == {} || [set SEACI(LesCategories)] == {}} { return "" } set LesRequetes [set SEACI(LesRequetes) ] set nRequetes [llength $LesRequetes] set LesCategories [set SEACI(LesCategories)] set nCategories [llength $LesCategories] set NbMax [set SEACI(NbMax)] set NbCouleursTot $NbMax if {100 < $NbCouleursTot} {set NbCouleursTot 100} if {$AvecPourcentage} {set NbMax 100} set LesCouleurs [GammeDeCouleursRV [expr $NbCouleursTot + 1]] set ColorOutLine "yellow" ################### FENETRE ######################### set Bord 200;set PetitBord 50 set TailleBoite 25 set Ecart 0 set LargeurFenetre [expr [winfo screenwidth .] *2/3] set HauteurFenetre [expr [winfo screenheight .]*2/3] set LargeurMax [expr $nCategories * $TailleBoite + ($nCategories + 1) * $Ecart + 2 * $Bord] if {$LargeurMax < $LargeurFenetre} {set LargeurFenetre $LargeurMax} set HauteurMax [expr $nRequetes * $TailleBoite + ($nRequetes + 1) * $Ecart + 2 * $Bord] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre "GonfleAussiY" "$FichierSEACI"] $K configure -background white ################### CATEGORIE ###################### set XReq1 0 set XReq2 $LargeurMax set YCat1 [expr $Bord * 0.67 - $Ecart ] set YCat2 [expr $HauteurMax - $Bord * 0.67 - $Ecart] set Xmin [expr $Bord + $Ecart] foreach Categorie $LesCategories { set Xmax [expr $Xmin + $TailleBoite] set XCat [expr ($Xmax - $Xmin)/2 + $Xmin] set Ymin [expr $Bord + $Ecart] $K create text $XCat $YCat1 -text "$Categorie" -anchor n $K create text $XCat $YCat2 -text "$Categorie" -anchor s set nMax [set SEACI($Categorie)] foreach Requete $LesRequetes { set Ymax [expr $Ymin + $TailleBoite] set n 0 if {[info exists SEACI($Categorie,$Requete)]} {set n [set SEACI($Categorie,$Requete)]} set nCouleurs $n if {$NbCouleursTot < $nCouleurs } {set nCouleurs $NbCouleursTot} set Couleur [lindex $LesCouleurs $nCouleurs] set Pourcentage [expr round($n*100.0/$nMax)] if {$AvecPourcentage} {set Couleur [lindex $LesCouleurs $Pourcentage]} set TextRequete $Requete if {$AvecDefinition} { if {[regexp -nocase "^GO:" $Requete]} { if {![info exists TabTmp($Requete,Definition)]} { set TabTmp($Requete,Definition) 1 set TypeGO [Onto $Requete Type] set TextRequete [lindex [Onto $TypeGO $Requete LesDefinitions] 0] } } if {[regexp -nocase {^ipr[0-9]*} $Requete]} { if {![info exists TabTmp($Requete,Definition)]} { set TabTmp($Requete,Definition) 1 set TextRequete [DefinitionInterpro $Requete] } } } if {![info exists TabTmp($Requete)]} { set TabTmp($Requete) 1 set YReq [expr ($Ymax - $Ymin)/2 + $Ymin] $K create text $XReq1 $YReq -text "$TextRequete" -anchor w -tags [list "SEACI" "Text" "$Categorie" "$Requete" "$TextRequete" "$n" "$nMax" "$Pourcentage"] $K create text $XReq2 $YReq -text "$TextRequete" -anchor e -tags [list "SEACI" "Text" "$Categorie" "$Requete" "$TextRequete" "$n" "$nMax" "$Pourcentage"] } $K create rectangle $Xmin $Ymin $Xmax $Ymax -fill $Couleur -outline $ColorOutLine -tags [list "SEACI" "Case" "$Categorie" "$Requete" "$TextRequete" "$n" "$nMax" "$Pourcentage"] set Ymin [expr $Ymax + $Ecart] } set Xmin [expr $Xmax + $Ecart] } ############## ECHELLE ############################################## set YEchelleMin1 [expr $Bord * 0.33 - $Ecart - $TailleBoite / 2] set YEchelleMax1 [expr $YEchelleMin1 + $TailleBoite] set YTexteEchelle1 [expr $YEchelleMin1 - $Ecart] set YEchelleMin2 [expr $HauteurMax - $Bord * 0.33 - $Ecart - $TailleBoite / 2] set YEchelleMax2 [expr $YEchelleMin2 + $TailleBoite] set YTexteEchelle2 [expr $YEchelleMax2 + $Ecart] set NbValSurEchelle 10 if {$NbCouleursTot < $NbValSurEchelle} {set NbValSurEchelle $NbCouleursTot} set Inter [expr $NbCouleursTot * 1.0 / $NbValSurEchelle] set TailleEchelle [expr ($LargeurFenetre - 2 * $PetitBord) * 1.0 / $NbValSurEchelle] for {set i 0} {$i < $NbValSurEchelle} {incr i} { set XEchelleMin [expr $PetitBord + $Ecart + $i * $TailleEchelle] set XEchelleMax [expr $XEchelleMin + $TailleEchelle] set Val [expr round(($i + 1) * $Inter)] set nCouleurs $Val if {$NbCouleursTot < $nCouleurs} {set nCouleurs $NbCouleursTot} set Couleur [lindex $LesCouleurs $nCouleurs] $K create text $XEchelleMax $YTexteEchelle1 -text $Val -anchor s $K create rectangle $XEchelleMin $YEchelleMin1 $XEchelleMax $YEchelleMax1 -fill $Couleur -outline $ColorOutLine $K create text $XEchelleMax $YTexteEchelle2 -text $Val -anchor n $K create rectangle $XEchelleMin $YEchelleMin2 $XEchelleMax $YEchelleMax2 -fill $Couleur -outline $ColorOutLine set XEchelleMin $XEchelleMax } ################ BOUTONS ########################################### regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "Pourcentage Avec/Sans\nDefinition Avec/Sans\nOther"] bind $B <1> "IllustreSEACI $FichierSEACI 1 $AvecDefinition" bind $B <2> "IllustreSEACI $FichierSEACI 0 $AvecDefinition" bind $B "IllustreSEACI $FichierSEACI $AvecPourcentage 1" bind $B "IllustreSEACI $FichierSEACI $AvecPourcentage 0" bind $B "IllustreSEACI \[ButineArborescence\] $AvecPourcentage" $K bind "SEACI" "DevoileSEACI $K %x %y Enter" $K bind "SEACI" "DevoileSEACI $K %x %y Leave" return "" } proc IllustreTissueType {{LesNoms ""} {nMaxTissueParBoite ""} {nParLigne 3} {FichierSelectedEST ""}} { if {$FichierSelectedEST == ""} {set FichierSelectedEST [tk_getOpenFile -title "SelectedEST File" -initialdir "[RepertoireDuGenome]/fiches"]} if {$LesNoms == ""} {set LesNoms [MorceauxChoisis [InterrogeSelectedEST $FichierSelectedEST LesNoms]]} set Liste {} foreach Nom $LesNoms { if { ! [regexp -nocase {[a-z]} $Nom]} { continue } set LesTissuesDeLaBoiteOrdonnes [list "Tissue expression in $Nom"] set nMin 0 set nMax 0 set LesTissuesDeLaBoite {} set LesTissues [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] set LesTissuesDeLaBoite {} foreach Tissue $LesTissues { set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $Tissue n] if {$nMax < $n} {set nMax $n} lappend LesTissuesDeLaBoite [list $Tissue $n $nMin] } if {$LesTissuesDeLaBoite == {}} {continue} set LesTissuesDeLaBoite [lsort -index 1 -real -decreasing $LesTissuesDeLaBoite] if {$nMaxTissueParBoite != ""} {set LesTissuesDeLaBoite [lrange $LesTissuesDeLaBoite 0 [expr $nMaxTissueParBoite - 1]]} set NbTissue [llength $LesTissuesDeLaBoite] if {$NbTissue < 1} {continue} if {$NbTissue < 3} { for {set i 1} {$i <= [expr 3-$NbTissue]} {incr i} { lappend LesTissuesDeLaBoite [list "" 0 0 $nMax] } } foreach LeTissue [lsort -index 1 -real -decreasing $LesTissuesDeLaBoite] { lappend LeTissue $nMax lappend LesTissuesDeLaBoiteOrdonnes $LeTissue } lappend Liste $LesTissuesDeLaBoiteOrdonnes } if {[llength $Liste] < $nParLigne} {set nParLigne [llength $Liste]} if {$Liste == {}} {return} return [IllustreLesToilesDAraignee $Liste $nParLigne 1 1 1 0 1] } proc IllustreTissueTypeDesClusters {FichierO2C2A2D2E {LesClusters ""} {nMaxTissueParCluster ""} {nMaxTissueParBoite ""} {nParLigne 1} {FichierSelectedEST ""}} { if {$FichierSelectedEST == ""} {set FichierSelectedEST [tk_getOpenFile -title "SelectedEST File" -initialdir "[RepertoireDuGenome]/fiches"]} if {$LesClusters == ""} {set LesClusters [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesClusters]]} set Liste {} foreach Cluster $LesClusters { #je calcule le tableau et les effectifs pour chaque tissue et pour chaque groupe set Tab(Cluster,$Cluster,LesTissues) {} set NbTissueTot 0 foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E Cluster $Cluster LesNoms] { set LesAllTissues [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] #if {$nMaxTissueParBoite != ""} {if {$nMaxTissueParBoite < [llength $LesTissues]} {continue}} set LesTissues {} foreach TS $LesAllTissues { set Tissue [string toupper $TS] #if {$Tissue == "THYMUS" || $Tissue == "MAMMARY GLAND" || $Tissue == "TESTIS"} {continue} if {[regexp -nocase {^WHOLE EMBRYO INCLUDING|^INFILTRATING DUCTAL|^HEMATOPOIETIC} $Tissue]} {continue} if {$Tissue == ""} {continue} set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $TS n] lappend LesTissues [list $Tissue $n] } if {$LesTissues == {}} {continue} set LesTissues [lsort -index 1 -real -decreasing $LesTissues] if {$nMaxTissueParBoite != ""} {set LesTissues [lrange $LesTissues 0 [expr $nMaxTissueParBoite - 1]]} foreach LeTissue $LesTissues { set Tissue [lindex $LeTissue 0] if {![info exists Tab(Cluster,$Cluster,Tissue,$Tissue,n)]} { set Tab(Cluster,$Cluster,Tissue,$Tissue,n) 0 lappend Tab(Cluster,$Cluster,LesTissues) $Tissue } #set n [lindex $LeTissue 1] set n 1 incr Tab(Cluster,$Cluster,Tissue,$Tissue,n) $n incr NbTissueTot $n } } set LesTissuesDuClusterOrdonnes [list "Tissue expression in Cluster $Cluster"] set nMin 0 set nMax 0 set LesTissuesDuCluster {} foreach Tissue [set Tab(Cluster,$Cluster,LesTissues)] { set n [set Tab(Cluster,$Cluster,Tissue,$Tissue,n)] Espionne "$Cluster $Tissue $n" if {$nMax < $n} {set nMax $n} lappend LesTissuesDuCluster [list $Tissue $n $nMin] } set NbTissue [llength $LesTissuesDuCluster] if {$NbTissue <=1} {continue} if {$NbTissue < 3} { for {set i 1} {$i <= [expr 3-$NbTissue]} {incr i} { lappend LesTissuesDuCluster [list "" 0 0 $nMax] } } foreach LeTissue [lrange [lsort -index 1 -real -decreasing $LesTissuesDuCluster] 0 [expr $nMaxTissueParCluster - 1]] { lappend LeTissue $nMax lappend LesTissuesDuClusterOrdonnes $LeTissue } lappend Liste $LesTissuesDuClusterOrdonnes } if {[llength $Liste] < $nParLigne} {set nParLigne [llength $Liste]} return [IllustreLesToilesDAraignee $Liste $nParLigne 1 1 1 0 1] } proc IllustreTmCount {} { Wup "Interface du BestTmCount" Wup "Montre le graphe cumule des valeurs de Tm pour les sequences ou boites choisies" Wup "Permet de choisir, de montrer et sauver des bornes" Wup "26-04-2005 Modif pour tenir compte de step, SlidingWindow et TmMethode modifiable et affichage de ces infos" #Charge les Resultats set LesResultats [LesResultatsTmCount] if {$LesResultats==""} {Espionne "No results to show";return ""} set w "[NomDe fenetre]" if {[winfo exists $w]} {wm deiconify $w;raise $w;return ""} else {toplevel $w} wm geometry $w +300+100 wm title $w "Best Tm analysis" #wm resizable $w false false #Frame contenant le graphe et les scrollbar ########################################### set FInfo "$w.frameinfo" frame $FInfo -borderwidth "3" -relief "groove" set Police {-family "arial" -size 12 -weight bold} set LargeurFenetre [expr [winfo screenwidth .] * 2/3] set HauteurFenetre [expr [winfo screenheight .] * 1/2] set XMilieu [expr $LargeurFenetre/2] set BordureX 50.0 set BordureY 50.0 set Intervalle 10.0 set EpaisseurBoite 15.0 #Position du Graph content set XDebutGraph [expr 0.0 + $BordureX] set XFinGraph [expr $LargeurFenetre - $BordureX -20] set YDebutGraph [expr 0.0 + $BordureY] set YFinGraph [expr $HauteurFenetre - $BordureY] set TailleXGraph [expr $XFinGraph - $XDebutGraph] set TailleYGraph [expr $YFinGraph - $YDebutGraph] #Traite les Resultats set TmpResultat "" foreach {a b} $LesResultats { switch $a { "TmMax" {set XMax $b} "TmMin" {set XMin $b} "TmMoyenne" {set TmMoyenne $b} "TmTotal" {} "NbTm" {set NbTmCalcules $b} "NbSeq" {set NbSeq $b} "default" {lappend TmpResultat [list $a $b]} } } set TailleEnX [expr $XMax - $XMin] set LesResultats [lsort -decreasing -integer -index 1 $TmpResultat] set YMax [lindex [lindex $LesResultats 0] 1] set YMin [lindex [lindex $LesResultats end] 1] set TailleEnY [expr $YMax - $YMin] #Nombre de pixel pour un degre ou un nombre set RapportEnX [expr ($TailleXGraph)/($TailleEnX)] set RapportEnY [expr ($TailleYGraph)/($TailleEnY)] set K "$FInfo.canvas" set ScroHor "$FInfo.xscroll" set ScroVer "$FInfo.yscroll" scrollbar $ScroVer -command "$K yview" scrollbar $ScroHor -command "$K xview" -orient "horizontal" #Canvas pour le graphe canvas $K -width $LargeurFenetre -height $HauteurFenetre -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" $K configure -background "grey" #$K configure -scrollregion [list 0.0 0.0 $XFinGraph $YFinGraph] $K configure -scrollregion [list 0.0 0.0 $LargeurFenetre $HauteurFenetre] #Rectangle de masque pour les graphes $K create rectangle [expr $XDebutGraph -2] [expr $YDebutGraph -2] [expr $XFinGraph +2] [expr $YFinGraph +2] -fill "gray97" -outline "gray97" -tags [list "" "Masque"] set ColorLine "deepskyblue2" set n 0 set LesResultats [lsort -increasing -real -index 0 $TmpResultat] foreach TmNb $LesResultats { scan $TmNb "%f %d" x y set X [expr $XDebutGraph + [expr $x * $RapportEnX] - [expr $XMin * $RapportEnX]] set Y [expr $YFinGraph - [expr $y * $RapportEnY] + [expr $YMin * $RapportEnY]] incr n if {$n > 1} { $K create line [set Coordonnees(LastX)] [set Coordonnees(LastY)] $X $Y -tags [list "" "Tm $x Nb $y" "Affichable" "OligoGraph" "Tm" "TmLines"] -fill $ColorLine set n 1 } set Coordonnees(VraiY) $y set Coordonnees(LastX) $X set Coordonnees(LastY) $Y $K create oval [expr $X-1] [expr $Y-1] [expr $X+1] [expr $Y+1] -width "3" -outline "darkviolet" -fill "darkviolet" -tags [list "" "Tm $x Nb $y" "Affichable" "OligoGraph" "Tm" "TmPlot"] } #La moyenne set XMoyenne [expr $XDebutGraph + [expr $TmMoyenne * $RapportEnX] - [expr $XMin * $RapportEnX]] $K create line $XMoyenne [expr $YFinGraph +1] $XMoyenne $YDebutGraph -tags [list "" "Mean $TmMoyenne" "Affichable" "OligoGraph" "Moyenne" "MoyenneLines"] -fill "red" $K create oval [expr $XMoyenne -1] [expr $YDebutGraph -1] [expr $XMoyenne +1] [expr $YDebutGraph +1] -width "3" -outline "red" -fill "red" -tags [list "" "Mean" "Affichable" "OligoGraph" "Moyenne" "MoyennePlot"] $K create oval [expr $XMoyenne -1] [expr $YFinGraph -1] [expr $XMoyenne +1] [expr $YFinGraph +1] -width "3" -outline "red" -fill "red" -tags [list "" "Mean" "Affichable" "OligoGraph" "Moyenne" "MoyennePlot"] $K create text $XMoyenne [expr $YFinGraph +15] -font "$Police" -text "[format "%.1f" $TmMoyenne]" -fill "yellow" -anchor "center" -tags [list "" "Mean" "OligoGraph" "Moyenne" "MoyennePlot"] #Axe des ordonnees $K create line $XDebutGraph $YFinGraph $XDebutGraph [expr $YDebutGraph -20] -arrow last -tags [list "" "Y (Nb) Axes" "Affichable" "Axes"] -width 2 $K create text $XDebutGraph [expr $YDebutGraph -25] -text "Count" -tags [list "" "Y title" "Affichable" "Edges"] -anchor "center" $K create text [expr $XDebutGraph -10] [expr $YFinGraph] -text "$YMin" -tags [list "" "Nb Min" "Affichable" "Edges"] -anchor "e" $K create text [expr $XDebutGraph -10] [expr $YDebutGraph] -text "$YMax" -tags [list "" "Nb Max" "Affichable" "Edges"] -anchor "e" #Axe des abscisses $K create line $XDebutGraph $YFinGraph [expr $XFinGraph +20] $YFinGraph -arrow last -tags [list "" "X (Tm) Axes" "Affichable" "Axes"] -width 2 $K create text [expr $XFinGraph +25] $YFinGraph -text "Tm \°C" -tags [list "" "X title" "Affichable" "Edges"] -anchor "w" $K create text [expr $XDebutGraph] [expr $YFinGraph +15] -text "$XMin" -tags [list "" "Tm Min" "Affichable" "Edges"] -anchor "center" $K create text [expr $XFinGraph] [expr $YFinGraph +15] -text "$XMax" -tags [list "" "Tm Max" "Affichable" "Edges"] -anchor "center" #La fiche contenant les infos set FicheInfo "" set TextFrame "$w.textframe" set Text "$TextFrame.text" #set ListBoxSBH "$TextFrame.xscroll" set ListBoxSBV "$TextFrame.yscroll" frame $TextFrame -borderwidth "3" -relief "groove" #scrollbar $ListBoxSBH -orient "horizontal" -command "$Text xview" scrollbar $ListBoxSBV -orient "vertical" -command "$Text yview" #text $Text -height "4" -state "disabled" -wrap "word" -font "courier 10" -xscrollcommand "$ListBoxSBH set" -yscrollcommand "$ListBoxSBV set" text $Text -height "4" -state "disabled" -wrap "word" -font "courier 10" -yscrollcommand "$ListBoxSBV set" set Step [LesParametresDuDesign Step "LaValeurMerci"] if {$Step ==""} {set Step 10} set SlidingWindow [LesParametresDuDesign LengthOligo "LaValeurMerci"] if {$SlidingWindow==""} {set SlidingWindow 60} set TmMethode [LesParametresDuDesign TmMethod "LaValeurMerci"] if {$TmMethode ==""} {set TmMethode "NearestNeighbor"} set FicheInfo [list "$NbTmCalcules Tm values measured for $NbSeq sequence(s) submitted\n" "Tm Method: $TmMethode\n" "Sliding Window: $SlidingWindow nt(s)\n" "Step: $Step nt(s)"] foreach element $FicheInfo { $Text configure -state normal $Text insert "end" "$element" $Text configure -state disabled } #Les boutons set ButtonFrame "$w.buttonframe" set ActionButton "$ButtonFrame.button1" set DestroyButton "$ButtonFrame.button2" set LCharpente1 "$ButtonFrame.lcharpente1" set LCharpente2 "$ButtonFrame.lcharpente2" set ZoneButton1 "$ButtonFrame.zbutton1" set ZoneButton2 "$ButtonFrame.zbutton2" set ZoneButton3 "$ButtonFrame.zbutton3" frame $ButtonFrame -borderwidth "3" -relief "groove" button $ActionButton -background "orange" -text "Graph Panel" bind $ActionButton <1> "TmPanel $K" set Texte [format "%-10s" "Panel to change graph display (order,color)"] set_balloon $ActionButton "$Texte" button $DestroyButton -background "red" -text "Close" -command "destroy $w" button $ZoneButton1 -background "green" -text "Area Draw / Clear / Save" bind $ZoneButton1 <1> "MontreLesZonesDeTm $K $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" bind $ZoneButton1 <2> "ClearLesZones $K" bind $ZoneButton1 <3> "SauveLesZonesDeTm $K" set Texte [format "%-10s" "Allow to show (defined), clear or save a Tm area"] set_balloon $ZoneButton1 "$Texte" button $ZoneButton2 -background "green" -text "Range +/-5 / Reset" bind $ZoneButton2 <1> "RangeTm $K $TmMoyenne 5 5 $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" bind $ZoneButton2 <2> "ResetLesZonesDeTm $K" set Texte [format "%-10s" "Allow to display 5°C range, clear saved Tm area"] set_balloon $ZoneButton2 "$Texte" button $ZoneButton3 -background "yellow" -text "Zoom In / Out / Reset" bind $ZoneButton3 <1> "zoom $K 1.25 1.25" bind $ZoneButton3 <2> "zoom $K 0.8 0.8" bind $ZoneButton3 <3> "ResetZoom $K" label $LCharpente1 -background "#808FFF" -relief "groove" label $LCharpente2 -background "#808FFF" -relief "groove" pack $FInfo -fill both -expand true pack $ScroVer -fill y -side right pack $ScroHor -fill x -side bottom pack $K -fill both -side top -expand true pack $ButtonFrame -fill both -side top pack $LCharpente1 -fill both -side left -expand true pack $DestroyButton -side left pack $ZoneButton3 -side left pack $ActionButton -side left pack $ZoneButton1 -side left pack $ZoneButton2 -side left pack $LCharpente2 -fill both -side left -expand true pack $TextFrame -fill both -side top pack $ListBoxSBV -fill y -side right #pack $ListBoxSBH -fill x -side bottom pack $Text -fill both -side top -expand true Raiser $K "TmPlot" Lower $K "Edges" Lower $K "Axes" Lower $K "Masque" $K bind "Affichable" "AfficheInfoBulle $K %x %y Enter" $K bind "Affichable" "AfficheInfoBulle $K %x %y Leave" bind $K "PositionneLesZonesDeTm $K %x %y $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" bind $K "ViseurDeTm $K %x %y $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" bind $K "ViseurDeTm $K %x %y $XDebutGraph $XFinGraph $YDebutGraph $YFinGraph $RapportEnX $XMin" #Binding pour permettre de zoomer en utilisant le 3eme bouton bind $K <3> "zoomMark $K %x %y" bind $K "zoomStroke $K %x %y" bind $K "zoomArea $K %x %y" return "" } proc IllustreToileDevStage {Nom {CreateJpg ""}} { set Rep "[RepertoireDuGenome]/jpg_of_DevStage" if {! [file exists $Rep]} {file mkdir $Rep} set CreateJpg [string equal -nocase $CreateJpg "CreateJpg"] if {$CreateJpg} { package require Img } set FichierImage "$Rep/${Nom}_DevStage.jpg" set K [IllustreDevStage [list $Nom] 3 [Fiches]/SelectedEST] if {$K==""} {return ""} if {$CreateJpg} { regsub "\.canvas$" $K "" w wm iconify . focus $w update idletasks tkwait visibility $K CanvaEnJpg $K $FichierImage destroy $w } return $K } proc IllustreToileTissType {Nom {CreateJpg ""}} { set Rep "[RepertoireDuGenome]/jpg_of_TissType" if {! [file exists $Rep]} {file mkdir $Rep} set CreateJpg [string equal -nocase $CreateJpg "CreateJpg"] if {$CreateJpg} { package require Img } set FichierImage "$Rep/${Nom}_TissType.jpg" set K [IllustreTissueType [list $Nom] {} 3 [Fiches]/SelectedEST] if {$K == ""} {return ""} if {$CreateJpg} { regsub "\.canvas$" $K "" w wm iconify . focus $w update idletasks CanvaEnJpg $K $FichierImage destroy $w } return $K } proc IllustreUnChromosome {Chromosome {LesNoms ""} {Qui OnlyTheBest} {WithoutOrWithMapViewer WithoutMapViewer}} { set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierLocalisation [ChoixDuFichierLocalisationHuman] if {![file exists $FichierLocalisation] || $FichierLocalisation == ""} {return ""} ChargeFichierLocalisation Tab $FichierLocalisation $Chromosome $LesNoms ChargeFoldDesSequences Expression set nChromosome [NumeroDuChromosome $Chromosome] if {$WithoutOrWithMapViewer == "WithMapViewer"} { set FichierMV [ChoixParmi [glob -nocomplain "[HumanGenomeDir]/Localisation/*.md"]] } set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierContigs "$RepLocalisation/seq_contig.md" if {![file exists $FichierContigs]} { Espionne "$FichierContigs does not exist" return "" } set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 if {$WithoutOrWithMapViewer != "WithMapViewer" || $FichierMV == ""} { set HauteurMax [expr $BordY + $HauteurBoiteChromo + 2*$HauteurBoite + 3*$EcartEntreRepresentations] } else { set HauteurMax [expr $BordY + $HauteurBoiteChromo + 3*$HauteurBoite + 4*$EcartEntreRepresentations] } if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set Chromo [NumeroDuChromosome $Chromosome] ChargeContigsDesChromosomes Contigs $FichierContigs $Chromo set TailleChromo [set Contigs($Chromo,Taille)] set Taille [expr round($TailleChromo*1.0/1.e6)] set Facteur [expr $LargeurAffichage / $TailleChromo] ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos if {![info exist LesBandesCytos($Chromosome,TailleP)]} {return ""} set LesBandesP [lsort -decreasing [set LesBandesCytos($Chromosome,LesBandesP)]] set LesBandesQ [lsort [set LesBandesCytos($Chromosome,LesBandesQ)]] set LesBandesCytologiques $LesBandesP foreach BandeQ $LesBandesQ {lappend LesBandesCytologiques $BandeQ} set PosYMin [expr $HauteurMax - $BordY - $HauteurBoiteChromo] set PosYMax [expr $HauteurMax - $BordY ] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set i 0 set PosIni 0 foreach Bande $LesBandesCytologiques { set LesInfos [set LesBandesCytos($Chromosome,$Bande)] set Position [expr [lindex $LesInfos 0] * 1.e6] set TailleBande [expr round(($Position-$PosIni)/1.e6)] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosXMax [expr $BordX + ($Position*$Facteur)] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$Bande" "$TailleBande" "BandesCytologiques"] if {$i == 40} {set i 0} else {incr i 10} set PosXMin $PosXMax set PosIni $Position } $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "blue" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "blue" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*1/3] -text "$Chromosome" -font "$PoliceTitre" -fill "blue" set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set LesContigs [set Contigs($Chromo,LesContigs)] foreach Contig $LesContigs { set LesInfos [set Contigs($Chromo,$Contig)] set Debut [lindex $LesInfos 0] set Fin [lindex $LesInfos 1] set Sens [lindex $LesInfos 2] if {$Sens == 0} {continue} set Version [lindex $LesInfos 3] set ColorFill [CouleurDuSens $Sens] if {$Sens == "-"} { set PosYM [expr $PosYMax + $HauteurBoite] set PosYm [expr $PosYMin + $HauteurBoite] } elseif {$Sens == "+"} { set PosYM [expr $PosYMax - $HauteurBoite] set PosYm [expr $PosYMin - $HauteurBoite] } else { set PosYM $PosYMax set PosYm $PosYMin } set PosXMin [expr $BordX + ($Debut*$Facteur)] set PosXMax [expr $BordX + ($Fin*$Facteur)] $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline white -fill $ColorFill -tags [list "$Contig" "$Debut" "$Fin" "$Sens" "$Version" "Contig"] } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "red" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "red" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*1/3] -text "Contigs" -font "$PoliceTitre" -fill "red" set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosYCenter [expr ($PosYMax + $PosYMin)/2] if {[info exists Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set Tab($FichierLocalisation,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set Tab($FichierLocalisation,Chromosome,$Chromosome,$Nom)] { set Debut [lindex $LInfo 10 ] set Fin [lindex $LInfo 11] set Sens [lindex $LInfo 12] set Info [lindex $LInfo 20] if {($Qui == "OnlyTheBest" && $Info == "") || $Sens == 0} {continue} set Fold [set Expression($Nom)] lappend LInfo $Fold lappend LInfo "Box" set ColorFill [CouleurDuFold $Fold] set PosXMin [expr $BordX + ($Debut*$Facteur)] set PosXMax [expr $BordX + ($Fin*$Facteur)] if {$Sens == "+"} {set Var -10} elseif {$Sens == "-"} {set Var 10} if {$Qui != "OnlyTheBest" && $Info != "BestLoc"} {set Var [expr $Var * 3]} $K create oval $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline $ColorFill -fill $ColorFill -tags $LInfo } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "orange" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "orange" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "My sequences" -font "$PoliceTitre" -fill "orange" } if {$WithoutOrWithMapViewer == "WithMapViewer" && $FichierMV != ""} { set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] ChargeFichierMapViewer TabMV $FichierMV $nChromosome set NameFichierMV [file tail $FichierMV] set i 0 if {[info exists TabMV($NameFichierMV,Chromosome,$nChromosome,LesElements)]} { foreach Element [set TabMV($NameFichierMV,Chromosome,$nChromosome,LesElements)] { if {![info exists TabMV($NameFichierMV,Chromosome,$nChromosome,Element,$Element,LesLocalisations)]} {continue} set LesRegionsDeLEl [set TabMV($NameFichierMV,Chromosome,$nChromosome,Element,$Element,LesLocalisations)] if {5 < $i} {set i 0} foreach UneRegionDeLEl [lsort -integer -index 5 -decreasing $LesRegionsDeLEl] { set SensEl [lindex $UneRegionDeLEl 6] if {$SensEl == 0} {continue} set WhoIsIt [lindex $UneRegionDeLEl 0] set LesInfos [lindex $UneRegionDeLEl 1] set DebutEl [lindex $UneRegionDeLEl 3] set FinEl [lindex $UneRegionDeLEl 4] set ColorFill [CouleurDuSens $SensEl] set PosYM [expr $PosYMax - $i*$HauteurBoite] set PosYm [expr $PosYMin - $i*$HauteurBoite] set PosXMin [expr $BordX + ($DebutEl*$Facteur)] set PosXMax [expr $BordX + ($FinEl *$Facteur)] $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline "dark$ColorFill" -fill $ColorFill -tags [list "$WhoIsIt" "$LesInfos" "$DebutEl" "$FinEl" "$SensEl" "MapViewer"] } incr i } } $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*2/3] -text "MapViewer $NameFichierMV" -font "$PoliceTitre" -fill black if {[info exists TabMV]} {unset TabMV} } LesNomsEnStock $K $LesNoms $K bind "Contig" "DevoileLesContigs $K %x %y Enter" $K bind "Contig" "DevoileLesContigs $K %x %y Leave" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "Contig" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" $K bind "Box" <1> "AfficheFicheInfo $K" if {$WithoutOrWithMapViewer == "WithMapViewer"} { $K bind "MapViewer" "DevoileLesRegions $K %x %y Enter" $K bind "MapViewer" "DevoileLesRegions $K %x %y Leave" } regsub {\.canvas} $K "" w set B [BoutonneLaFenetre $w "WithMapViewer/WithoutMapViewer\nOnlyBestLoc/All"] bind $B <1> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] $Qui WithMapViewer" bind $B <2> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] $Qui WithoutMapViewer" bind $B "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] OnlyTheBest $WithoutOrWithMapViewer" bind $B "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] All $WithoutOrWithMapViewer" set C [BoutonneLaFenetre $w "Histogramm"] bind $C <1> "ChoixHistogramme" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc IllustreZScoreDesGeneOntologyDesClusters {FichierGO {LesClusters ""} {LesTypesDeGO ""} {GOChoisiOuAll GOChoisi} {ZScoreMin 1} {NiveauGOMin 2}} { set FichierO2C2A2D2E "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" if {![file exists $FichierO2C2A2D2E]} {return} if {![file exists $FichierGO ]} {return} if {$LesClusters == ""} {set LesClusters [MorceauxChoisis [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E LesClusters]]} if {$LesTypesDeGO == ""} {set LesTypesDeGO [MorceauxChoisis [InterrogeGeneOntology $FichierGO LesTypes]]} if {$GOChoisiOuAll == "GOChoisi"} { set FichierChoosenGO "[RepertoireDuGenome]/fiches/ChoosenOntology" ChargeChoosenGeneOntology TabGOChoisi $FichierChoosenGO set LesGO [set TabGOChoisi($FichierChoosenGO,LesGOChoisis)] } else { set LesGO [Onto TousLesGO] } foreach GO $LesGO {set TabGOSelectionne($GO) 1} set LesCouleurs [GammeDeCouleursRVB_CHALMEL [llength $LesTypesDeGO]] foreach Couleur $LesCouleurs Type $LesTypesDeGO {set TabTypeOK($Type) $Couleur} set Tab(LesGO) {} foreach Cluster $LesClusters { Espionne $Cluster if {![info exists Tab($Cluster,LesGO)]} {set Tab($Cluster,LesGO) {}} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierO2C2A2D2E Cluster $Cluster LesNoms] { foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [Onto $GO Type] if {![info exists TabTypeOK($Type)]} {continue} if {[NiveauMinDuGO $GO $Type] < $NiveauGOMin} {continue} if {![info exists Tab($GO,n)]} {set Tab($GO,n) 0} if {![info exists Tab($Cluster,$GO,n)]} {set Tab($Cluster,$GO,n) 0} if {![info exists Tab($Nom,$GO)] && [info exists TabGOSelectionne($GO)]} { set Tab($Nom,$GO) 1 incr Tab($GO,n) incr Tab($Cluster,$GO,n) lappend Tab($Cluster,LesGO) $GO lappend Tab(LesGO) $GO } foreach Ancetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { if {[NiveauMinDuGO $Ancetre] < $NiveauGOMin} {continue} if {![info exists Tab($Ancetre,n) ]} {set Tab($Ancetre,n) 0} if {![info exists Tab($Cluster,$Ancetre,n)]} {set Tab($Cluster,$Ancetre,n) 0} if {![info exists Tab($Nom,$Ancetre)] && [info exists TabGOSelectionne($Ancetre)]} { set Tab($Nom,$Ancetre) 1 incr Tab($Ancetre,n) incr Tab($Cluster,$Ancetre,n) lappend Tab($Cluster,LesGO) $Ancetre lappend Tab(LesGO) $Ancetre } } } } } set LesHisto {} set N [llength [set Tab(LesGO)]] foreach Cluster $LesClusters { set R [llength [set Tab($Cluster,LesGO)]] set LesValeurs {} foreach GO [lsort -unique [set Tab($Cluster,LesGO)]] { set n [set Tab($GO,n) ] set r [set Tab($Cluster,$GO,n)] set ZScore [ZScore $r $R $n $N] if {$ZScore < $ZScoreMin} {continue} set ZScore [expr ($r * 1.0 / $R) / ($n * 1.0 / $N)] #if {$r == 1} {continue} set Type [Onto $GO Type] set Def [lindex [Onto $Type $GO LesDefinitions] 0] set Couleur [set TabTypeOK($Type)] lappend LesValeurs [list "$Def $Type $GO $r $R $n $N [format "%.1f" $ZScore]" $Couleur $ZScore 0] } if {$LesValeurs == {}} {continue} set LHisto [list "Cluster $Cluster"] foreach LaValeur [lsort -index 2 -real -decreasing $LesValeurs] {lappend LHisto $LaValeur} lappend LesHisto $LHisto } if {$LesHisto == {}} {return} IllustreLesHistogrammes $LesHisto return } proc IlpTree {{Qui ""} {Quoi ""} {Fichier ""}} { global IlpTree if {$Fichier==""} { set Fichier "[HomeRipp]/rules.txt"} regsub "\.txt$" $Fichier "" FichierTsv append FichierTsv ".tsv" if {[info exists IlpTree($Qui,$Quoi)]} { return $IlpTree($Qui,$Quoi) } if {[info exists IlpTree("EstCharge")]} { return "" } set IlpTree("EstCharge") 1 set LesHeaders {} set Min 999. foreach Ligne [LesLignesDuFichier $Fichier] { regsub -all "\t\t" $Ligne "\t" Ligne set LesMots [split $Ligne "\t"] if {$LesHeaders=={}} { set LesHeaders [lrange $LesMots 1 end-1] continue } set KL [lindex $LesMots 0] set LesValeurs [lrange $LesMots 1 end-1] foreach V $LesValeurs KC $LesHeaders { # Espionne "kl=$KL= kc=$KC= $V" if {$V=="N"} { set V 0.0 } if {$V==""} {continue; set V $IlpTree($KC,$KL) } set D [expr 1. - $V] if {$D!=0.0} { set Min [Mini $Min $D] } set IlpTree($KL,$KC) $D } } set IlpTree(ListOf,Headers) $LesHeaders set LesLignes {} lappend LesLignes [join $LesHeaders "\t"] foreach KL $LesHeaders { set LaLigne {} foreach KC $LesHeaders { if { ! [info exists IlpTree($KL,$KC)]} { set IlpTree($KL,$KC) $IlpTree($KC,$KL) } set D $IlpTree($KL,$KC) # if {$D!=0.0} { set D [expr $D - $Min*0.8]} lappend LaLigne [format "%5.3f" $D] } lappend LesLignes [join $LaLigne "\t"] } if {$Qui=="GetTreeFile" || $Qui=="GetTsv"} { set TsvFile [SauveLesLignes $LesLignes dans $FichierTsv] if {$Qui=="GetTsv"} {return $TsvFile } set PhFile [ImAnnoTissueTree $TsvFile] return $PhFile } return [IlpTree $Qui $Quoi] } proc ImAnnoImage {} { set Image [ContenuDuFichier "http://zoom.gwdg.de/?fif=038/EG00002617_00007B.fpx&obj=iip,1.0&wid=501&hei=802&rgn=0.3125,0.3125,0.12500000,0.12500000&lng=en_US&vtrx=1&cvt=jpeg"] return [Sauve $Image dans "[HomeRipp]/ImAnnoImage.jpg"] } proc ImAnnoRefPour {Nom} { global ListOfRetChipAnnotated set UrlGenoretServer [GenoretServer] if { ! [info exists ListOfRetChipAnnotated]} { set ListOfRetChipAnnotated [HttpGetUrl "$UrlGenoretServer?Genoret&ListOfRetChipAnnotated"] } set R "" foreach Syno [RecupereSynonyms $Nom "AvecGN" " "] { if {[lsearch $ListOfRetChipAnnotated $Syno] >= 0} { set R $Syno ; break } } if {$R ne ""} { set Ref "$R" } else { set Ref "-" } return $Ref } proc ImAnnoTissueTree {{MatrixFile ""}} { package require fastme if {$MatrixFile==""} { set MatrixFile "[HomeRipp]/GenoretWww/ImAnno/ImAnnoEar/CorrelationMatrix.tsv" } set PhFile $MatrixFile regsub {\.tsv} $PhFile "" PhFile append PhFile ".ph" set LesLignes [LesLignesDuFichier $MatrixFile] set LesDistances {} foreach Ligne $LesLignes { if { ! [info exists LesNoms]} { regsub -all {\-} $Ligne " " Ligne set LesNoms [split $Ligne "\t"] continue } LConcat LesDistances [split $Ligne "\t"] } Espionne [llength $LesNoms] Espionne [llength $LesDistances] set Ph [fastme $LesNoms $LesDistances] return [Sauve $Ph dans $PhFile] } proc ImageCmd {args} { if {!$::hv_showImages} { return ::hv_smgray } set fn [lindex $args 0] if {[info exists ::hv_OldImages($fn)]} { set ::hv_Images($fn) $::hv_OldImages($fn) unset ::hv_OldImages($fn) return $::hv_Images($fn) } if {[catch {image create photo -file $fn} img]} { return ::hv_smgray } if {[image width $img]*[image height $img]>20000} { global ::hv_BigImages set b [image create photo -width [image width $img] -height [image height $img]] set ::hv_BigImages($b) $img set img $b after idle "Hv_MoveBigImage $b" } set ::hv_Images($fn) $img return $img } proc ImageDirectory {aImageDirect} { global DejaVuDir_$aImageDirect if {[info exists DejaVuDir_$aImageDirect]} {return $aImageDirect} set DejaVuDir_$aImageDirect 1 image create photo $aImageDirect -data { R0lGODdhEAAQAPIAAAAAAHh4eLi4uPj4APj4+P///wAAAAAAACwAAAAAEAAQAAADPVi63P4w LkKCtTTnUsXwQqBtAfh910UU4ugGAEucpgnLNY3Gop7folwNOBOeiEYQ0acDpp6pGAFArVqt hQQAO/// } return $aImageDirect } proc ImageExpand {image coef} { # check coef if {$coef < 1.0} { error "bad coef \"$coef\": should not be less than 1.0" } if {$coef - int($coef) < 1.e-4} { return [optim $image [expr {int($coef)}]] } # get the old image content set width [image width $image] set height [image height $image] if {$width * $height == 0} { error "bad image" } # create corresponding planes for {set y 0} {$y < $height} {incr y} { set r:row {} set g:row {} set b:row {} for {set x 0} {$x < $width} {incr x} { foreach {r g b} [$image get $x $y] break foreach c {r g b} { lappend $c:row [set $c] } } foreach c {r g b} { lappend $c:data [set $c:row] } } # compute the new image content set Width [expr {round($width * $coef)}] set Height [expr {round($height * $coef)}] set ey 0 set y2 0 set cy2 $Height for {set Y 0} {$Y < $Height} {incr Y} { set r:Row {} set g:Row {} set b:Row {} # y1 is the top coordinate in the old image set y1 $y2 set cy1 [expr {$Height - $cy2}] incr ey $height set y2 [expr {$ey / $Height}] set cy2 [expr {$ey % $Height}] if {$y1 == $y2} { set cy1 $cy2 } set ex 0 set x2 0 set cx2 $Width for {set X 0} {$X < $Width} {incr X} { set x1 $x2 set cx1 [expr {$Width - $cx2}] incr ex $width set x2 [expr {$ex / $Width}] set cx2 [expr {$ex % $Width}] if {$x1 == $x2} { set cx1 $cx2 } # compute pixel foreach c {r g b} { set $c 0; set _$c 0 } for {set y $y1} {$y <= $y2} {incr y} { # compute y coef switch $y $y1 { set cy $cy1 } $y2 { set cy $cy2 } default { set cy $height } if {$cy == 0} { continue } if {$cy > $height} { set cy $height } for {set x $x1} {$x <= $x2} {incr x} { # compute x coef switch $x $x1 { set cx $cx1 } $x2 { set cx $cx2 } default { set cx $width } if {$cx == 0} { continue } if {$cx > $width} { set cx $width } # weight each initial pixel by cx & cy set cxy [expr {$cx * $cy / double($width) / $height}] foreach c {r g b} { set comp [lindex [set $c:data] $y $x] incr $c [expr {round($comp * $cxy)}] set _$c [expr {[set _$c] + $cxy}] } } } set _ {} foreach c {r g b} { set comp [set $c] if {$comp > 255} { set comp 255 } lappend $c:Row $comp lappend _ [set _$c] } } foreach c {r g b} { lappend $c:Data [set $c:Row] } } # crisping for {set Y 0} {$Y < $Height} {incr Y} { set Row {} for {set X 0} {$X < $Width} {incr X} { if {$X == 0 || $X == $Width - 1 || $Y == 0 || $Y == $Height - 1} { foreach c {r g b} { set $c [lindex [set $c:Data] $Y $X] } } else { foreach c {r g b} { set c00 [lindex [set $c:Data] [expr {$Y - 1}] [expr {$X - 1}]] set c01 [lindex [set $c:Data] [expr {$Y - 1}] [expr {$X - 0}]] set c02 [lindex [set $c:Data] [expr {$Y - 1}] [expr {$X + 1}]] set c10 [lindex [set $c:Data] [expr {$Y + 0}] [expr {$X - 1}]] set c11 [lindex [set $c:Data] [expr {$Y + 0}] [expr {$X - 0}]] set c12 [lindex [set $c:Data] [expr {$Y + 0}] [expr {$X + 1}]] set c20 [lindex [set $c:Data] [expr {$Y + 1}] [expr {$X - 1}]] set c21 [lindex [set $c:Data] [expr {$Y + 1}] [expr {$X - 0}]] set c22 [lindex [set $c:Data] [expr {$Y + 1}] [expr {$X + 1}]] set cc [expr {int(1.4 * $c11 - 0.05 * ($c00 + $c01 + $c02 + $c10 + $c12 + $c20 + $c21 + $c22))}] if {$cc < 0} { set cc 0 } if {$cc > 255} { set cc 255 } set $c $cc } } lappend Row [format #%02x%02x%02x $r $g $b] } lappend Data $Row } # create the new image set Image [image create photo] # fill the new image $Image put $Data # return the new image return $Image } proc ImageExpand2 {image coef} { # check coef if {$coef < 1.0} { error "bad coef \"$coef\": should not be less than 1.0" } if {$coef - int($coef) < 1.e-4} { return [optim $image [expr {int($coef)}]] } # get the old image content set width [image width $image] set height [image height $image] if {$width * $height == 0} { error "bad image" } # create corresponding planes for {set y 0} {$y < $height} {incr y} { set r:row {} set g:row {} set b:row {} set t:row {} for {set x 0} {$x < $width} {incr x} { foreach {r g b} [$image get $x $y] break set t [$image transparency get $x $y] set t [expr {$t * 256}] foreach c {r g b t} { lappend $c:row [set $c] } } foreach c {r g b t} { lappend $c:data [set $c:row] } } # compute the new image content set Width [expr {round($width * $coef)}] set Height [expr {round($height * $coef)}] set ey 0 set y2 0 set cy2 $Height for {set Y 0} {$Y < $Height} {incr Y} { set r:Row {} set g:Row {} set b:Row {} set t:Row {} # y1 is the top coordinate in the old image set y1 $y2 set cy1 [expr {$Height - $cy2}] incr ey $height set y2 [expr {$ey / $Height}] set cy2 [expr {$ey % $Height}] if {$y1 == $y2} { set cy1 $cy2 } set ex 0 set x2 0 set cx2 $Width for {set X 0} {$X < $Width} {incr X} { set x1 $x2 set cx1 [expr {$Width - $cx2}] incr ex $width set x2 [expr {$ex / $Width}] set cx2 [expr {$ex % $Width}] if {$x1 == $x2} { set cx1 $cx2 } # compute pixel foreach c {r g b t} { set $c 0; set _$c 0 } for {set y $y1} {$y <= $y2} {incr y} { # compute y coef switch $y $y1 { set cy $cy1 } $y2 { set cy $cy2 } default { set cy $height } if {$cy == 0} { continue } if {$cy > $height} { set cy $height } for {set x $x1} {$x <= $x2} {incr x} { # compute x coef switch $x $x1 { set cx $cx1 } $x2 { set cx $cx2 } default { set cx $width } if {$cx == 0} { continue } if {$cx > $width} { set cx $width } # weight each initial pixel by cx & cy set cxy [expr {$cx * $cy / double($width) / $height}] foreach c {r g b t} { set comp [lindex [set $c:data] $y $x] incr $c [expr {round($comp * $cxy)}] set _$c [expr {[set _$c] + $cxy}] } } } set _ {} foreach c {r g b t} { set comp [set $c] if {$comp > 255} { set comp 255 } lappend $c:Row $comp lappend _ [set _$c] } } foreach c {r g b t} { lappend $c:Data [set $c:Row] } } # crisping for {set Y 0} {$Y < $Height} {incr Y} { set Row {} set tRow {} for {set X 0} {$X < $Width} {incr X} { if {$X == 0 || $X == $Width - 1 || $Y == 0 || $Y == $Height - 1} { foreach c {r g b} { set $c [lindex [set $c:Data] $Y $X] } } else { foreach c {r g b t} { set c00 [lindex [set $c:Data] [expr {$Y - 1}] [expr {$X - 1}]] set c01 [lindex [set $c:Data] [expr {$Y - 1}] [expr {$X - 0}]] set c02 [lindex [set $c:Data] [expr {$Y - 1}] [expr {$X + 1}]] set c10 [lindex [set $c:Data] [expr {$Y + 0}] [expr {$X - 1}]] set c11 [lindex [set $c:Data] [expr {$Y + 0}] [expr {$X - 0}]] set c12 [lindex [set $c:Data] [expr {$Y + 0}] [expr {$X + 1}]] set c20 [lindex [set $c:Data] [expr {$Y + 1}] [expr {$X - 1}]] set c21 [lindex [set $c:Data] [expr {$Y + 1}] [expr {$X - 0}]] set c22 [lindex [set $c:Data] [expr {$Y + 1}] [expr {$X + 1}]] set cc [expr {int(1.4 * $c11 - 0.05 * ($c00 + $c01 + $c02 + $c10 + $c12 + $c20 + $c21 + $c22))}] if {$cc < 0} { set cc 0 } if {$cc > 255} { set cc 255 } set $c $cc } } lappend Row [format #%02x%02x%02x $r $g $b] lappend tRow [expr {round($t)}] } lappend Data $Row lappend tData $tRow } # create the new image set Image [image create photo] # fill the new image $Image put $Data # set transparency for {set Y 0} {$Y < $Height} {incr Y} { for {set X 0} {$X < $Width} {incr X} { set t [lindex $tData $Y $X] set t [expr {$t > 128 ? 1 : 0}] $Image transparency set $X $Y $t } } # return the new image return $Image } proc ImageFile {aImageFile} { global DejaVuFile_$aImageFile if {[info exists DejaVuFile_$aImageFile]} {return $aImageFile} set DejaVuFile_$aImageFile 1 image create photo $aImageFile -data { R0lGODdhEAAQAPIAAAAAAHh4eLi4uPj4+P///wAAAAAAAAAAACwAAAAAEAAQAAADPkixzPOD yADrWE8qC8WN0+BZAmBq1GMOqwigXFXCrGk/cxjjr27fLtout6n9eMIYMTXsFZsogXRKJf6u P0kCADv/ } return $aImageFile } proc ImageGroupeDom {{directory ""} TypeDeDomain {position ""} {option ""}} { #modifie faire le boulot pour les pfam et les domains et autres informations.... set Concat "" set Rep "" #creation d'un repertoire #Ajoute le cas DomPfam!! Espionne "ImageGroupeDom TypeDomain: $TypeDeDomain" switch $TypeDeDomain { "pfam" { if { ! [file exists "GroupeDomain/PfamInformation"]} { File mkdir [RepertoireDuGenome]/GroupeDomain/PfamInformation } #set Concat "ConcatPfam" set Rep "GroupeDomain/PfamInformation" if {$directory==""} {set directory [RepertoireDuGenome]/GPfam} } "domain" { if { ! [file exists "GroupeDomain/DomainInformation"]} { File mkdir [RepertoireDuGenome]/GroupeDomain/DomainInformation } #set Concat "ConcatDomain" set Rep "GroupeDomain/DomainInformation" if {$directory==""} {set directory [RepertoireDuGenome]/GDomain} } "region" { if { ! [file exists "GroupeDomain/RegionInformation"]} { File mkdir [RepertoireDuGenome]/GroupeDomain/RegionInformation } #set Concat "ConcatDomain" set Rep "GroupeDomain/RegionInformation" if {$directory==""} {set directory [RepertoireDuGenome]/GRegion} } "DomPfam" { if { ! [file exists "GroupeDomain/DomPfamInformation"]} { File mkdir [RepertoireDuGenome]/GroupeDomain/DomPfamInformation } set Rep "GroupeDomain/DomPfamInformation" if {$directory==""} {set directory [RepertoireDuGenome]/GDomPfam} } } set r [glob -directory $directory *] foreach fichier $r { #faire un test si contien color alors continue if {[regexp {PUZ[0-9]+Color} $fichier] || [regexp {PUZ[0-9]+Length} $fichier] || [regexp {PUZ[0-9]+Tab} $fichier] || [regexp {PUZ[0-9]+DomMax} $fichier]} { continue } Espionne "-->$fichier" #recupere que le nom du fichier set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if { ! [file exists "[RepertoireDuGenome]/$Rep/$f"]} { File mkdir [RepertoireDuGenome]/$Rep/$f } #faut sauvegarder dans ce repertoire les images et les py mais sous quel nom je gere les groupes avec des chiffres? set mes_lignes [LesLignesDuFichier $fichier] set numgroupe 1 foreach ligne $mes_lignes { if { ! [file exists "[RepertoireDuGenome]/$Rep/$f/$numgroupe"]} { File mkdir [RepertoireDuGenome]/$Rep/$f/$numgroupe } set proteins [split [lindex [split $ligne "="] 1] ";"] foreach protName $proteins { Espionne "La protein en cours: $protName" SchematicViewNew $f $protName $TypeDeDomain $option $position if { [file exists "[RepertoireDuGenome]/macsimXml/$f.aj"]} { set fileMacsim "[RepertoireDuGenome]/macsimXml/$f.aj" } else { set fileMacsim "[RepertoireDuGenome]/macsimXml/$f" } #Espionne "apres les if else avant la recherche d'orga" #recuperation de l'organisme de la sequence set OS [OrgaDuAccess $protName] if {$OS=="Inconnu inconnu"} { set OS [FromMacsims $fileMacsim $protName "OrganismLong"] } if {$OS=="" || $OS=="Inconnu inconnu" || $OS==" "} { set OS [getOrgaTfasDesCopains "" $f $protName] } #ajouter l'espece dans le nom du fichier switch $TypeDeDomain { "pfam" { set protName ${protName}Pfam } "domain" { set protName ${protName}Domain } "region" { set protName ${protName}Region } "DomPfam" { set protName ${protName}DomPfam } } if {$position == "position"} { append protName "P" } set newProtname "$OS-$protName" #Espionne "------> scriptpython avec $protName.py" exec python $protName.py #Espionne "mv des images creer" exec mv [RepertoireDuGenome]/$protName.py [RepertoireDuGenome]/$Rep/$f/$numgroupe/$newProtname exec mv /home/luudao/www/ms2phdb/tmp/$protName.png [RepertoireDuGenome]/$Rep/$f/$numgroupe/$newProtname.png } incr numgroupe } } } proc ImagePC {image percent} { set deno [gcd $percent 100] set zoom [expr {$percent/$deno}] set subsample [expr {100/$deno}] set im1 [image create photo] $im1 copy $image -zoom $zoom set im2 [image create photo] $im2 copy $im1 -subsample $subsample image delete $im1 return im2 } proc ImagePartOf {aImageSubclassOf} { global DejaVuPartOf_$aImageSubclassOf if {[info exists DejaVuPartOf_$aImageSubclassOf]} {return $aImageSubclassOf} set DejaVuPartOf_$aImageSubclassOf 1 set FileGIF "[GODBDir]/SubclassOf.gif" if {![file exists $FileGIF]} {return} image create photo $aImageSubclassOf -file $FileGIF return $aImageSubclassOf } proc ImageShrink3 {Image coef {TargetImage ""}} { # check coef if {$coef > 1.0} { error "bad coef \"$coef\": should not be greater than 1.0" } # get the old image content set Width [image width $Image] set Height [image height $Image] if {$Width==0 || $Height==0} { error "bad image" } if {$TargetImage eq ""} { # create new image set image [image create photo] } else { set image $TargetImage } if {abs($coef - 1.0) < 1.e-4} { $image copy $Image return $image } set Factor [expr {double($Width)*$Height}] # Extract the data from the source - experiment indicates that this is the fastest way foreach row [$Image data] { set rdata {} foreach pixel $row { lappend rdata [scan $pixel "#%2x%2x%2x"] } lappend DATA $rdata } # compute the new image content set width [expr {round($Width * $coef)}] set height [expr {round($Height * $coef)}] set ey 0 set Y2 0 set cy2 $height for {set y 0} {$y < $height} {incr y} { # Y1 is the top coordinate in the old image set Y1 $Y2 set cy1 [expr {$height - $cy2}] incr ey $Height set Y2 [expr {$ey / $height}] set cy2 [expr {$ey % $height}] if {$Y1 == $Y2} { set cy1 $cy2 } set ex 0 set X2 0 set cx2 $width set row {} for {set x 0} {$x < $width} {incr x} { set X1 $X2 set cx1 [expr {$width - $cx2}] incr ex $Width set X2 [expr {$ex / $width}] set cx2 [expr {$ex % $width}] if {$X1 == $X2} { set cx1 $cx2 } # compute pixel set r 0.0 set g 0.0 set b 0.0 for {set Y $Y1} {$Y <= $Y2} {incr Y} { # compute y coef if {$Y == $Y1} { if {$cy1 == 0} continue set cy [expr {$cy1>$Height ? $Height : $cy1}] } elseif {$Y == $Y2} { if {$cy2 == 0} continue set cy [expr {$cy2>$Height ? $Height : $cy2}] } else { set cy $height } for {set X $X1} {$X <= $X2} {incr X} { # compute x coef if {$X == $X1} { if {$cx1 == 0} continue set cx [expr {$cx1>$Width ? $Width : $cx1}] } elseif {$X == $X2} { if {$cx2 == 0} continue set cx [expr {$cx2>$Width ? $Width : $cx2}] } else { set cx $width } # weight each initial pixel by cx & cy set cxy [expr {$cx * $cy / $Factor}] set pixel [lindex $DATA $Y $X] set r [expr {$r+([lindex $pixel 0] * $cxy)}] set g [expr {$g+([lindex $pixel 1] * $cxy)}] set b [expr {$b+([lindex $pixel 2] * $cxy)}] } } lappend row [format "#%02x%02x%02x" [expr {$r>255.0 ? 255 : round($r)}] [expr {$g>255.0 ? 255 : round($g)}] [expr {$b>255.0 ? 255 : round($b)}]] } lappend data $row } # fill the new image $image blank $image put $data # return the new image return $image } proc ImageSubclassOf {aImagePartOf} { global DejaVuSubclassOf_$aImagePartOf if {[info exists DejaVuSubclassOf_$aImagePartOf]} {return $aImagePartOf} set DejaVuSubclassOf_$aImagePartOf 1 set FileGIF "[GODBDir]/PartOf.gif" if {![file exists $FileGIF]} {return} image create photo $aImagePartOf -file $FileGIF return $aImagePartOf } proc Imap {} { package require imap4 package require tls #set user luc.moulinier set user raymond.ripp #set pass "#Derry5#" set pass "bmifb123" #set server mailserver.u-strasbg.fr set server 130.79.200.160 set FOLDER "INBOX.Labo" # Connect to server set ::imap4::use_ssl 1 set imap [::imap4::open $server 993] puts "imap $imap" ::imap4::login $imap $user $pass puts "login done" set Lfold [::imap4::folders $imap -inline] puts "[join $Lfold \n]" ::imap4::select $imap $FOLDER # Output all the information about that mailbox foreach info [::imap4::mboxinfo $imap] { puts "$info -> [::imap4::mboxinfo $imap $info]" } # fetch 3 records inline set fields {from: to: subject: size text fintextewwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww} foreach rec [::imap4::fetch $imap 2:5 -inline {*}$fields] { puts -nonewline "#[incr idx])" for {set j 0} {$j<[llength $fields]} {incr j} { puts "\t[lindex $fields $j] [lindex $rec $j]" } } # Show all the information available about the message ID 1 puts "Available info about message 1: [::imap4::msginfo $imap 1]" # Use the capability stuff puts "Capabilities: [::imap4::isableto $imap]" puts "Is able to imap4rev1? [::imap4::isableto $imap imap4rev1]" # Cleanup ::imap4::cleanup $imap return } proc ImgDeNom {t fm sz md ang} { global FontAsc if {! [info exists FontAsc]} {LoadFontesAscii} if {$t eq ""} {return} set Lt [split $t ""] set x0 0 set dst [image create photo] foreach c $Lt { if {![info exists FontAsc($fm,$sz,$md,$c)]} {set c " "} set phi [image create photo -data $FontAsc($fm,$sz,$md,$c)] set wdi [expr {[image width $phi]-3}] set hgi [image height $phi] set i $x0 for {set p 3} {$p < $wdi} {incr p} { for {set j 1} {$j < $hgi} {incr j} { if {! [$phi transparency get $p $j]} { $dst put [eval format #%02x%02x%02x [$phi get $p $j]] -to $i $j } } incr i } incr x0 [expr {$wdi-3}] } OpacifieImage $dst white RotateImage $dst $ang OpacifieImage $dst white 1 return $dst } proc ImgDeNomBLT {txt fm sz md angle} { package require BLT # Pour arbre radial, on se met en bold, un point c'est tout ! set md "bold" if {$angle > 90. && $angle < 270.} {set jus right} {set jus left} set fm [string trim $fm] regsub -all " " $fm "" fm set fmt "*-family-mode-R-Normal-*-size-*" regsub "family" $fmt "$fm" fmt regsub "mode" $fmt "$md" fmt regsub "size" $fmt "$sz" fmt set i 0 while {1} { if {! [::blt::bitmap exists "BltImg$i"]} {break} incr i } ::blt::bitmap compose "BltImg$i" "$txt" -font "$fmt" -rotate $angle return "BltImg$i" } proc ImgDeNomPIX {f sz w h txt angle} { set t2 [image create photo] set d [pixane create -tkphoto $t2] pixane resize $d $w $h pixane blank $d pixane color $d black pixane text $d [expr {$w/2}] [expr {$h/2}] -text $txt -font $f -size $sz -align center -valign middle -angle $angle set bon [RogneImage $t2] # OpacifieImage $bon white 0 pixane delete $d return $bon } proc ImprimeLeFichier {Fichier {Commande ""}} { global CommandePrint Gs "Ignorer" if { ! [info exists CommandePrint]} { set CommandePrint "renoir" } if {$Commande==""} { set Commande $CommandePrint } set CommandePrint "$Commande $Fichier" if {[OuiOuNon "$CommandePrint\n\nDo You want to edit this print command ?" 0]} { set CommandePrint [Entre $CommandePrint] } eval exec $CommandePrint return $Fichier } proc ImprimeLeTexte {Texte {Commande ""}} { set Fichier "[TmpFile].txt" set Fichier [Sauve $Texte dans $Fichier] if {$Fichier==""} { FaireLire "I couldn't create $Fichier for printing" return "" } if {$Commande==""} { set Commande "renoir" } return [ImprimeLeFichier $Fichier $Commande] } proc ImprimeLesOrgaEtSesPlaces {} { global RepertoireDuGenome NousAllonsAuBoulot foreach Fichier [glob "$RepertoireDuGenome/fiches/orgaetsesplaces.*"] { set Texte "\n$Fichier\n\n[ContenuDuFichier $Fichier]" set FichierTmp "tmp.[file tail $Fichier]" Sauve $Texte dans $FichierTmp eval exec renoir -l $FichierTmp } OnRevientDuBoulot exit } proc Improvement {AId n {Step 0}} { global Abr sum set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] foreach e [$t children $n] { Improvement $AId $e $Step } puts stderr "$n" set Rep [NewMaxLR $AId $n] if {1 && $Rep} { AngleLRAncetres $AId $n set tmp $sum set sum [AjusteAngles2 $AId $n] puts [format "===> dsum %5.3f sum %5.3f | %s" [expr {$sum-$tmp}] $sum $n] puts "" if {$Step && ! [$t isleaf $n]} { $PAD delete all RetraceToutCart $AId root # Entre JAttends } } return $sum } proc InLineOptions {args} { global DefautsPipe global Defauts LesDefautsDuPipe LesDefauts if {[llength $args] == 0} {return} set loptions [array names DefautsPipe] set largs [split [string trim [lindex $args 0]] " "] foreach e $largs { set ov [split [string range $e 1 end] "="] if {[lsearch $loptions [lindex $ov 0]] == -1} {continue} LesDefautsDuPipe [lindex $ov 0] [lindex $ov 1] } return } proc InStaf {Position Org Chr {FROMWHERE ""}} { global LocInStaf if {$FROMWHERE==""} { set FROMWHERE "Ucsc" } set Foc "$FROMWHERE$Org$Chr" if { ! [info exists LocInStaf($Foc)]} { if {$FROMWHERE=="Ucsc"} { set LocInStaf($Foc) [LocUcStaf ListOf$Org$Chr "StartEndName"] } if {$FROMWHERE=="Affy"} { set LocInStaf($Foc) [LocAffy ListOf$Org$Chr "StartEndName"] } } set D 0 set F [expr [llength $LocInStaf($Foc)] - 1] if {$F<$D} { return "Error NoStartEndNameAvailable" } set SENDeb [lindex $LocInStaf($Foc) 0] set SENFin [lindex $LocInStaf($Foc) end] if {$SENDeb==""||$SENFin==""} { return "Error NoGenome" } if {$Position<[lindex $SENDeb 0] || $Position>[lindex $SENFin 1]} { return "Outside $SENDeb $SENFin" } set OldAvant $SENDeb set OldApres $SENFin while 1 { #puts "$OldAvant $OldApres" #puts "$D $F" if {$F<$D} { #puts "$F $D" return "Between $OldAvant $OldApres" } set M [expr ($D+$F)/2] set SEN [lindex $LocInStaf($Foc) $M] #puts "$M $SEN" set Start [lindex $SEN 0] set End [lindex $SEN 1] if {$Start<=$Position && $Position<=$End} { set LesIns [list "In $SEN"] #Espionne "$M $SEN" set MM $M while 1 { incr MM -1 set SEN [lindex $LocInStaf($Foc) $MM] set Start [lindex $SEN 0] set End [lindex $SEN 1] if {$End==""} { break } if {$Position>$End} { break } if {$Position<$Start || $End<$Position} { continue } #Espionne "$MM $SEN" lappend LesIns "In $SEN" } set MM $M while 1 { incr MM 1 set SEN [lindex $LocInStaf($Foc) $MM] set Start [lindex $SEN 0] set End [lindex $SEN 1] if {$Start==""} { break } if {$Position<$Start} { break } if {$Position<$Start || $End<$Position} { continue } #Espionne "$MM $SEN" lappend LesIns "In $SEN" } set LesIns [lsort -unique $LesIns] return [join $LesIns " "] } if {$D==$F} { if {$Position<$Start} {set OldApres $SEN} if {$End<$Position} {set OldAvant $SEN} return "Between $OldAvant $OldApres" } if {$Position<$Start} {set OldApres $SEN set F [expr $M -1]} if {$End<$Position} {set OldAvant $SEN set D [expr $M +1]} } } proc IndexDeClustering {c} { return [$::db eval {select pk_clus from clustering where name=$c}] } proc IndexDeMac {mac} { return [$::db eval {select pk_mac from mac where name=$mac}] } proc IndexDuCluster {c} { set m [MacCourant] return [$::db eval {select c.pk_cluster from cluster as c, clustering as g where c.name=$c and c.pk_clustering=g.pk_clustering and g.pk_mac=$m}] } proc IndexDuDescrCustom {OldNew Valeur} { global IndexDuDescrCustom if {[info exists IndexDuDescrCustom($OldNew,$Valeur)]} { return $IndexDuDescrCustom($OldNew,$Valeur) } if {[info exists IndexDuDescrCustom("EstCharge")]} { return "" } set IndexDuDescrCustom("EstCharge") 1 foreach IndexA [RetChip2 ListOf Index] { set VA [RetChip2 $IndexA "description_customer"] lappend IndexDuDescrCustom(Ancien,$VA) $IndexA } foreach IndexB [RetChip3 ListOf Index] { set VB [RetChip3 $IndexB "description_customer"] lappend IndexDuDescrCustom(Nouveau,$VB) $IndexB } return [IndexDuDescrCustom $OldNew $Valeur] } proc IndexationParAccess {} { global {*}[info globals "TD*"] LesSeqsDuGroupe SDG ListeItemFeatures LesSequencesAssocieesClassesCanon Sequences LNOrdali TabSF # Verifie qu'on a un access/bid pour tout le monde foreach n [lunique $LNOrdali] { if {! [info exists TDesAccess($n)]} { set TDesAccess($n) $n } if {! [info exists TDesBId($n)]} { set TDesBId($n) $n } } # et que les access ne sont pas en double set Lacc [list] foreach n [lunique $LNOrdali] { lappend Lacc [set TDesAccess($n)] } set l1 [lsort $Lacc] set l2 [lsort -unique $Lacc] if {[llength $l1] != [llength $l2]} { FaireLire "Beware !\nThere are duplicated access, Ordalie may not work properly :\n[join [lor $l1 $l2] " "]" } # pour coloriage selon phylum dans tree, etc... foreach a [array names LesSequencesAssocieesClassesCanon] { set Ls [set LesSequencesAssocieesClassesCanon($a)] unset LesSequencesAssocieesClassesCanon($a) foreach s $Ls { if {$s ne "" && ! [EstUnAccessPDB $s]} { lappend LesSequencesAssocieesClassesCanon($a) [set TDesAccess($s)] } else { lappend LesSequencesAssocieesClassesCanon($a) $s } } } # idem pour groupes <-> sequences foreach a [array names LesSeqsDuGroupe] { set Ls [set LesSeqsDuGroupe($a)] unset LesSeqsDuGroupe($a) foreach s $Ls { if {$s eq "" || [EstUnAccessPDB $s]} { lappend LesSeqsDuGroupe($a) $s } else { lappend LesSeqsDuGroupe($a) [set TDesAccess($s)] } } } # Tableau des sequences aa foreach a [array names Sequences] { set s [set Sequences($a)] unset Sequences($a) set Sequences([set TDesAccess($a)]) $s } # et pour les pre-features foreach a [array names TabSF] { set v [set TabSF($a)] unset TabSF($a) set TabSF([set TDesAccess($a)]) $v } # Et pour tous les tableaux set Ltmp [lunique $LNOrdali] set LNOrdali [list] foreach sqn $Ltmp { set acc [set TDesAccess($sqn)] lappend LNOrdali $acc foreach t [info globals "TD*"] { if {! [info exists ${t}($sqn)]} {continue} set r [set ${t}($sqn)] unset ${t}($sqn) set ${t}($acc) $r } } return } proc InfHomolog {{Qui ""} {Quoi ""} {Ou ""}} { if {$Ou==""} { set Ou "Sc" } if {$Quoi==""} { set Quoi "GscopeId" } set R [ExtraitInfo $Qui "Reciproc1_blastp$Ou:"] if {[regexp -nocase "^No" $R]} { return "" } if {$Quoi=="GscopeId"} { return $R } set FicTfa "[RepertoireDuGenome]/prottfa$Ou/$R" if {[FileAbsent $FicTfa]} { return "" } if {[string equal -nocase $Quoi "Filename"]} { return $FicTfa } if {[string equal -nocase $Quoi "TFA"]} { return [ContenuDuFichier $FicTfa] } if {[regexp -nocase "Info" $Quoi]} { set Entete [PremiereLigneDuFichier $FicTfa] if {[regexp -nocase "Show" $Quoi]} { return [YEAHshowYeast $Entete "Show"] } set Info [YEAHshowYeast $Entete "Get"] if {[regexp -nocase "Get" $Quoi]} { if {[regexp -nocase "Locus" $Quoi]} { return [StringApres "Locus_Name...:" dans $Info] } if {[regexp -nocase "Desc" $Quoi]} { return [StringApres "Description..:" dans $Info] } if {[regexp -nocase "ORF" $Quoi]} { return [StringApres "ORF_Name.....:" dans $Info] } return $Info } return $Info } return "" } proc InfoBidir {} { # Recupere via BIRD/GeCo les infos complementaires sur les genes bidir Espionne "InfoBidir : Debut" set FichierDesAccess [open "/genomics/link/STAF/fiches/Bidir/1000/LesAccessDesGenesNonBidir.txt" "r"] #set FichierDesAccess [open "/genomics/link/STAF/fiches/Bidir/1000/LesNonBidir.nb" "r"] set FichierDesRequetes [open "/tmp/BirdInfoNonBidir.bql" "w"] set FichierDesInfos [open "/genomics/link/STAF/fiches/Bidir/1000/LesInfosNonBidir.info" "w"] set Executees "/tmp/BirdInfoBidir.res" Espionne "InfoBidir : Constitution des requetes" set accessOld "" while { [gets $FichierDesAccess Ligne] >=0 } { ScanLaListe $Ligne access chrom start end strand exonCount typegene if { $access != $accessOld } { puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT access, exonCount, chrom, txStart, TxEnd, strand, cdsStart, cdsEnd FROM ucschuman.GeCo WHERE access='$access'" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "#" } set accessOld $access } close $FichierDesRequetes Espionne "InfoBidir : Execution des requetes" BirdFetch "/tmp/BirdInfoNonBidir.bql" "/tmp/BirdInfoNonBidir.res" set FichierDesRequetesExecutees [open "/tmp/BirdInfoNonBidir.res" "r"] Espionne "InfoBidir : Post-traitement" while { [gets $FichierDesRequetesExecutees Ligne] >=0 } { set isQuery [string range $Ligne 0 4] if { $isQuery != "Query"} { Espionne "Probleme $isQuery !" } gets $FichierDesRequetesExecutees Ligne ScanLaPipe $Ligne access exonCount chrom txStart txEnd strand cdsStart cdsEnd set geneSize [expr $txEnd - $txStart] if { $strand == "+"} { set dTssCds [expr $cdsStart - $txStart] } else { set dTssCds [expr $txEnd - $cdsEnd] } puts $FichierDesInfos "$access $geneSize $exonCount $dTssCds" } Espionne "InfoBidir : Fin" close $FichierDesInfos close $FichierDesRequetesExecutees } proc InfoDeLaPage {BanqueId Access CATEGORIE} { set FicheInfoDeLAccess [join [LaSequenceDesBanques $BanqueId $Access AccessOk "OnVeutNature"] "\n"] set InfoDuChamps [InfoDuChampsDeLaPage $FicheInfoDeLAccess $CATEGORIE ] return $InfoDuChamps } proc InfoDeLaPageGenBank {BanqueId Access CATEGORIE} { set FicheInfoDeLAccess [join [LaSequenceDesBanques $BanqueId $Access AccessOk "OnVeutNature"] "\n"] set InfoDuChamps [InfoDuChampsDeLaPageGenBank $FicheInfoDeLAccess $CATEGORIE ] return $InfoDuChamps } proc InfoDeLaPageProteine {BanqueId Access CATEGORIE} { set FicheInfoDeLAccess [join [LaSequenceDesBanques $BanqueId $Access AccessOk "OnVeutNature"] "\n"] set InfoDuChamps [InfoDuChampsDeLaPageProteine $FicheInfoDeLAccess $CATEGORIE ] return $InfoDuChamps } proc InfoDeLaZone {Chr T Debut} { foreach D [EleGen $Chr $T ListOf D] F [EleGen $Chr $T ListOf F] { if {$D<=$Debut && $Debut <=$F} { return [EleGen $Chr $T $D Info] } } return "" } proc InfoDuChampDeLAccess {Access CHAMPS} { set Page [join [LaSequenceDesBanques $Access $Access AccessOk "OnVeutNature"] "\n"] set Definition [InfoDuChampsDeLaPage $Page $CHAMPS] return $Definition } proc InfoDuChampsDeLaPage {Page CATEGORIE} { set InfoDuChamps [InfoDuChampsDeLaPageProteine $Page $CATEGORIE] if {[string trim $InfoDuChamps] == ""} { set InfoDuChamps [InfoDuChampsDeLaPageGenBank $Page $CATEGORIE ] } return "$InfoDuChamps" } proc InfoDuChampsDeLaPageGenBank {PageGenBank NOMDUCHAMPS} { global RepertoireDuGenome set LesInfosNettoyes {} foreach Ligne [LeChampsDeLaPageGenBank $PageGenBank $NOMDUCHAMPS] { regsub "$NOMDUCHAMPS [ ]*" $Ligne "" Ligne set Ligne [string trim $Ligne] while {[regexp " " $Ligne] } {regsub " " $Ligne " " Ligne} lappend LesInfosNettoyes $Ligne } return [join $LesInfosNettoyes " "] } proc InfoDuChampsDeLaPageProteine {PageProteine NOMDUCHAMPS} { global RepertoireDuGenome set LesInfosNettoyes {} foreach Ligne [LeChampsDeLaPageProteine $PageProteine $NOMDUCHAMPS] { regsub "^$NOMDUCHAMPS [ ]*" $Ligne "" Ligne set Ligne [string trim $Ligne] while {[regexp " " $Ligne] } {regsub " " $Ligne " " Ligne} while {[regexp "^ " $Ligne] } {regsub "^ " $Ligne "" Ligne} lappend LesInfosNettoyes $Ligne } return [join $LesInfosNettoyes " "] } proc InfoDuCluster {{ClusterOuNom ""} {Quoi ""}} { Wup "Rend les membres du cluster Numero X ou du PAB X, sa taille, son numero" global RepertoireDuGenome global MemoTaille MemoLesMembres MemoClusterOuNom MemoNumero if {$ClusterOuNom=="LaListeMerci"} { set Quoi "LaListeMerci" } if {$ClusterOuNom==""} {return "No Query"} if {$Quoi==""} {set Quoi "Membres"} if {$Quoi!="Membres" && $Quoi!="Taille" && $Quoi!="Numero" && $Quoi!="LaListeMerci"} { return "Quoi must be Membres, Taille or Numero" } if {$Quoi=="Membres" && [info exists MemoLesMembres] && $MemoClusterOuNom==$ClusterOuNom} { return $MemoLesMembres } if {$Quoi=="Numero" && [info exists MemoNumero] && $MemoClusterOuNom==$ClusterOuNom} { return $MemoNumero } if {$Quoi=="Taille" && [info exists MemoTaille] && $MemoClusterOuNom==$ClusterOuNom} { return $MemoTaille } set FichierDesClusters "$RepertoireDuGenome/xhda/TousLesBilans_PourNuca.dpc" set LesMembresDuCluster {} set StopSurCluster 0 foreach Ligne [LesLignesDuFichier $FichierDesClusters] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster} $Ligne]} { if {$StopSurCluster} { break } set LesMembresDuCluster {} scan $Ligne "%s %s %s" Groupe Numero Taille lappend LesNumeros $Numero regsub "$Groupe +$Numero +; +size=" $Ligne "" Taille #if {! [expr $Numero==$ClusterOuNom]} {continue} if {! [string equal $Numero $ClusterOuNom]} {continue} set StopSurCluster 1 continue } scan $Ligne "%s" PAB lappend LesMembresDuCluster $PAB if {[string equal $PAB $ClusterOuNom]} { set StopSurCluster 1} # if {$PAB==$ClusterOuNom} { set StopSurCluster 1} } if {$Quoi=="LaListeMerci"} {return [lsort -integer -unique $LesNumeros]} if {! [string equal $Numero $ClusterOuNom] && [expr [lsearch -exact $LesMembresDuCluster $ClusterOuNom]<0]} { return "No info available for $ClusterOuNom" } set MemoNumero $Numero set MemoMembres $LesMembresDuCluster set MemoTaille $Taille set MemoClusterOuNom $ClusterOuNom if {$Quoi=="Numero"} {return $Numero} if {$Quoi=="Taille"} {return $Taille} if {$Quoi=="Membres"} {return $LesMembresDuCluster} } proc InfoEmbl {{Qui ""} {Quoi ""}} { global InfoEmbl if {$Quoi=="Delete"} { if { ! [info exists InfoEmbl($Qui,EstCharge)]} { return 0 } set N 0 foreach QQ $InfoEmbl($Qui,Data) { incr N unset InfoEmbl($QQ) } return $N } if {[info exists InfoEmbl($Qui,$Quoi)]} { return $InfoEmbl($Qui,$Quoi) } if {[info exists InfoEmbl($Qui,EstCharge)]} { return "" } set InfoEmbl($Qui,EstCharge) "" set LesLignesEmbl [LaSequenceDesBanques $Qui $Qui AccessOk "OnVeutEMBL"] if {$LesLignesEmbl=={}} { return "" } set Embl [join $LesLignesEmbl "\n"] set InfoEmbl($Qui,Embl) $Embl set InfoEmbl($Qui,AccessOk) $AccessOk set AllInfo [DecortiqueLesLignesEMBL $LesLignesEmbl ID AC DE GN OS OC OX SQ] foreach {K V} $AllInfo { set InfoEmbl($Qui,Info$K) $V } set SQ [string toupper $SQ] set InfoEmbl($Qui,ID) $ID set InfoEmbl($Qui,AC) $AC set InfoEmbl($Qui,DE) $DE set InfoEmbl($Qui,GN) $GN set InfoEmbl($Qui,OS) $OS set InfoEmbl($Qui,OC) $OC set InfoEmbl($Qui,OX) $OX set InfoEmbl($Qui,SQ) $SQ set InfoEmbl($Qui,Length) [string length $SQ] foreach A [split $SQ ""] { incr InfoEmbl($Qui,n$A) lappend InfoEmbl($Qui,ListOfAA) $A } set InfoEmbl($Qui,ListOfAA) [lsort -unique $InfoEmbl($Qui,ListOfAA)] set AllP {} foreach A $InfoEmbl($Qui,ListOfAA) { set InfoEmbl($Qui,p$A) [expr (100.*$InfoEmbl($Qui,n$A))/$InfoEmbl($Qui,Length)] lappend AllP "$A [format %4.1f $InfoEmbl($Qui,p$A)]" } set InfoEmbl($Qui,AllP) $AllP set InfoEmbl($Qui,AllPSort) [lsort -decreasing -index 1 -real $AllP] foreach QQ [array names InfoEmbl] { if {[regexp "^$Qui\," $QQ]} { lappend InfoEmbl($Qui,Data) $QQ } } return [InfoEmbl $Qui $Quoi] } proc InfoFromAnalysissoftwareInput {{Qui ""} {Quoi ""} {Fichier ""}} { global InfoFromAnalysissoftwareInput if {$Qui==""} { set Qui "ListOf" } if {$Quoi==""} { set Quoi "Name" } if {$Fichier==""} { if {[info exists InfoFromAnalysissoftwareInput(Courant)]} { set Fichier $InfoFromAnalysissoftwareInput(Courant) } else { set Fichier "[GxData]/ToGx/AnalysissoftwareInput.txt" } } set InfoFromAnalysissoftwareInput(Courant) $Fichier if {[info exists InfoFromAnalysissoftwareInput($Qui,$Quoi,$Fichier)]} { return $InfoFromAnalysissoftwareInput($Qui,$Quoi,$Fichier) } if {[info exists InfoFromAnalysissoftwareInput(EstCharge,$Fichier)]} { return "" } set InfoFromAnalysissoftwareInput(EstCharge,$Fichier) 1 set InfoFromAnalysissoftwareInput(ListOf,Key,$Fichier) {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp {([a-z]+) (.*)?} $Ligne Match Key Value]} { continue } if {$Key=="name"} { set NameCourant $Value lappend InfoFromAnalysissoftwareInput(ListOf,Name,$Fichier) $NameCourant } lappend InfoFromAnalysissoftwareInput(ListOf,Key,$Fichier) $Key set InfoFromAnalysissoftwareInput($NameCourant,$Key,$Fichier) $Value } set InfoFromAnalysissoftwareInput(ListOf,Key,$Fichier) [lsort -unique -command TrieKey $InfoFromAnalysissoftwareInput(ListOf,Key,$Fichier)] return [InfoFromAnalysissoftwareInput $Qui $Quoi $Fichier] } proc InfoFromArraytypeInput {{Qui ""} {Quoi ""} {Fichier ""}} { global InfoFromArraytypeInput if {$Qui==""} { set Qui "ListOf" } if {$Quoi==""} { set Quoi "Name" } if {$Fichier==""} { if {[info exists InfoFromArraytypeInput(Courant)]} { set Fichier $InfoFromArraytypeInput(Courant) } else { set Fichier "[GxData]/ToGx/ArraytypeInput.txt" } } set InfoFromArraytypeInput(Courant) $Fichier if {[info exists InfoFromArraytypeInput($Qui,$Quoi,$Fichier)]} { return $InfoFromArraytypeInput($Qui,$Quoi,$Fichier) } if {[info exists InfoFromArraytypeInput(EstCharge,$Fichier)]} { return "" } set InfoFromArraytypeInput(EstCharge,$Fichier) 1 set InfoFromArraytypeInput(ListOf,Key,$Fichier) {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp {([a-z]+) (.*)?} $Ligne Match Key Value]} { continue } if {$Key=="name"} { set NameCourant $Value lappend InfoFromArraytypeInput(ListOf,Name,$Fichier) $NameCourant } if {$Key=="composition"} { foreach Chip [split $Value ","] { lappend InfoFromArraytypeInput(ListOfMultiChip,$Chip,$Fichier) $NameCourant } } lappend InfoFromArraytypeInput(ListOf,Key,$Fichier) $Key set InfoFromArraytypeInput($NameCourant,$Key,$Fichier) $Value } set InfoFromArraytypeInput(ListOf,Key,$Fichier) [lsort -unique -command TrieKey $InfoFromArraytypeInput(ListOf,Key,$Fichier)] return [InfoFromArraytypeInput $Qui $Quoi $Fichier] } proc InfoFromClusteringInput {{Qui ""} {Quoi ""} {Fichier ""}} { global InfoFromClusteringInput if {$Qui==""} { set Qui "ListOf" } if {$Quoi==""} { set Quoi "Name" } if {$Fichier==""} { if {[info exists InfoFromClusteringInput(Courant)]} { set Fichier $InfoFromClusteringInput(Courant) } else { set Fichier "[GxData]/ToGx/ClusteringmethodInput.txt" } } set InfoFromClusteringInput(Courant) $Fichier if {[info exists InfoFromClusteringInput($Qui,$Quoi,$Fichier)]} { return $InfoFromClusteringInput($Qui,$Quoi,$Fichier) } if {[info exists InfoFromClusteringInput(EstCharge,$Fichier)]} { return "" } set InfoFromClusteringInput(EstCharge,$Fichier) 1 set InfoFromClusteringInput(ListOf,Key,$Fichier) {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp {([a-z]+) (.*)?} $Ligne Match Key Value]} { continue } if {$Key=="name"} { set NameCourant $Value lappend InfoFromClusteringInput(ListOf,Name,$Fichier) $NameCourant } lappend InfoFromClusteringInput(ListOf,Key,$Fichier) $Key set InfoFromClusteringInput($NameCourant,$Key,$Fichier) $Value } set InfoFromClusteringInput(ListOf,Key,$Fichier) [lsort -unique $InfoFromClusteringInput(ListOf,Key,$Fichier)] return [InfoFromClusteringInput $Qui $Quoi $Fichier] } proc InfoFromClustersoftwareInput {{Qui ""} {Quoi ""} {Fichier ""}} { global InfoFromClustersoftwareInput if {$Qui==""} { set Qui "ListOf" } if {$Quoi==""} { set Quoi "Name" } if {$Fichier==""} { if {[info exists InfoFromClustersoftwareInput(Courant)]} { set Fichier $InfoFromClustersoftwareInput(Courant) } else { set Fichier "[GxData]/ToGx/ClustersoftwareInput.txt" } } set InfoFromClustersoftwareInput(Courant) $Fichier if {[info exists InfoFromClustersoftwareInput($Qui,$Quoi,$Fichier)]} { return $InfoFromClustersoftwareInput($Qui,$Quoi,$Fichier) } if {[info exists InfoFromClustersoftwareInput(EstCharge,$Fichier)]} { return "" } set InfoFromClustersoftwareInput(EstCharge,$Fichier) 1 set InfoFromClustersoftwareInput(ListOf,Key,$Fichier) {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp {([a-z]+) (.*)?} $Ligne Match Key Value]} { continue } if {$Key=="namecm"} { set NameCourant $Value lappend InfoFromClustersoftwareInput(ListOf,Name,$Fichier) $NameCourant } lappend InfoFromClustersoftwareInput(ListOf,Key,$Fichier) $Key lappend InfoFromClustersoftwareInput($NameCourant,$Key,$Fichier) $Value } set InfoFromClustersoftwareInput(ListOf,Name,$Fichier) [lsort -unique $InfoFromClustersoftwareInput(ListOf,Name,$Fichier)] set InfoFromClustersoftwareInput(ListOf,Key,$Fichier) [lsort -unique $InfoFromClustersoftwareInput(ListOf,Key,$Fichier)] return [InfoFromClustersoftwareInput $Qui $Quoi $Fichier] } proc InfoInteressante {Ligne} { if {[regexp {^CNS-Adresse:} $Ligne]} { return 0 } if {[regexp {^CNS-Sequence:} $Ligne]} { return 0 } if {[regexp {^CNS-VieuxNom:} $Ligne]} { return 0 } if {[regexp {^CNS} $Ligne]} { return 1 } return 0 } proc InfoOrthologs {Nom} { set Id [ExtraitInfo $Nom "ID:"] set LesTFAsDesOrtho [OiLesTFAsDesOrthologs $Id] set LesOId {} set LesOAc {} foreach Ligne $LesTFAsDesOrtho { set O "" if { ! [regexp {^>([^ ]+) ([^$]+)} $Ligne Match O D]} {continue} lassign [split $O "|"] B Ac Id regsub { OS=.*} $D "" D regsub { GN=.*} $D "" D regsub { PE=.*} $D "" D regsub { SV=.*} $D "" D set Genre "" set Espece "" regexp {OS=([^ ]+) ([^ ]+)} $Ligne Match Genre Espece set Gn "" regexp {GN=([^ ]+)} $Ligne Match Gn # Gn / Os récupérées mais pas utilisées if {$Id!=""} { lappend LesOId $Id } if {$Ac!=""} { lappend LesOAc $Ac } } if {$LesOId=={}} { return "" } if {$LesOAc=={}} { return "" } set LesOId [lsort -unique $LesOId] set LesOAc [lsort -unique $LesOAc] set TOId "=OrthologsId: [join $LesOId " "]" set TOAc "=OrthologsAc: [join $LesOAc " "]" InformeSansDemander $Nom $TOId InformeSansDemander $Nom $TOAc return $TOId } proc InfoOrthologsPourTous {} { set LeTout {} foreach Nom [ListeDesPABs] { set TO [InfoOrthologs $Nom] lappend LeTout "$Nom $TO" } return $LeTout } proc InfoPubmed {Pmids {Qui ""} {Quoi ""}} { global InfoPubmed if {[regexp {[^0-9]} $Pmids]} { regsub -all {[^0-9]} $Pmids " " Pmids set Pmids [split [string trim $Pmids] " "] } if {[info exists InfoPubmed($Pmids,$Qui,$Quoi)]} { return $InfoPubmed($Pmids,$Qui,$Quoi) } if {[info exists InfoPubmed($Pmids,"EstCharge")]} { return "" } set InfoPubmed($Pmids,"EstCharge") 1 package require md5 set MD5 [::md5::md5 -hex $Pmids] set Fic "/home/ripp/msp/sp_$MD5" if {[file exists $Fic]} { array set InfoPubmed [ContenuDuFichier $Fic] return [InfoPubmed $Pmids $Qui $Quoi] } set InfoPubmed($Pmids,All,Title) {} set InfoPubmed($Pmids,All,Abstract) {} set InfoPubmed($Pmids,All,All) {} foreach Pmid $Pmids { if {[info exists Tinfo]} { unset Tinfo } set Linfo [eFetchREST pubmed $Pmid] array set Tinfo $Linfo # parray Tinfo set InfoPubmed($Pmids,$Pmid,All) {} foreach {K V} [array get Tinfo] { lappend InfoPubmed($Pmids,$Pmid,All) "$K=$V" } set InfoPubmed($Pmids,$Pmid,All) [join $InfoPubmed($Pmids,$Pmid,All) "\n"] if {! [info exists Tinfo($Pmid,Title)] && ! [info exists Tinfo($Pmid,Abstract)] && ! [info exists Tinfo($Pmid,PubYear)]} { lappend InfoPubmed($Pmids,ListOf,Ko) $Pmid continue } lappend InfoPubmed($Pmids,ListOf,Ok) $Pmid set InfoPubmed($Pmids,$Pmid,Title) $Tinfo($Pmid,Title) set InfoPubmed($Pmids,$Pmid,Abstract) $Tinfo($Pmid,Abstract) set InfoPubmed($Pmids,$Pmid,PubYear) $Tinfo($Pmid,PubYear) set InfoPubmed($Pmids,$Pmid,PubMonth) $Tinfo($Pmid,PubMonth) set InfoPubmed($Pmids,$Pmid,LAuthors) $Tinfo($Pmid,LAuthors) lappend InfoPubmed($Pmids,All,Title) "$Pmid $InfoPubmed($Pmids,$Pmid,Title)" lappend InfoPubmed($Pmids,All,Abstract) "$Pmid $InfoPubmed($Pmids,$Pmid,Abstract)" lappend InfoPubmed($Pmids,All,All) "$Pmid $InfoPubmed($Pmids,$Pmid,All)" } set InfoPubmed($Pmids,All,Title) [join $InfoPubmed($Pmids,All,Title) "\n"] set InfoPubmed($Pmids,All,Abstract) [join $InfoPubmed($Pmids,All,Abstract) "\n"] set InfoPubmed($Pmids,All,All) [join $InfoPubmed($Pmids,All,All) "\n"] Sauve [array get InfoPubmed] dans $Fic return [InfoPubmed $Pmids $Qui $Quoi] } proc InfoScript {} { global InfoScript if {[info exists InfoScript]} { return $InfoScript } return "" } proc InfoSurMasking {SequenceDuCDNAMasquee NombreDeBasesMasquees LesNomsDesRepeats} { #################################################### global RepertoireDuGenome set TailleDeLaSequence [string length $SequenceDuCDNAMasquee] set PourcentMasque [PourcentageArrondiSup $NombreDeBasesMasquees $TailleDeLaSequence] if {$PourcentMasque==0} { set Annotation "NoRepeatToMask EndMask" } else { if {$PourcentMasque==-1} { set Annotation "NoSequenceToMask EndMask" } else { set SeuilPourcentage 90.0 if {[expr $PourcentMasque > $SeuilPourcentage]} { set Annotation "TotallyMasked" } else { set Annotation "PartiallyMasked" } } } if {$PourcentMasque==0} { set Annotation "$Annotation" } else { set NomsDesRepeats [join $LesNomsDesRepeats " "] set Annotation "$Annotation ${PourcentMasque}% $NomsDesRepeats EndMask" } return $Annotation } proc InfoSurRemasking {SequenceDuCDNARemasquee NombreDeBasesRemasquees LesNomsDesRepeats} { #################################################### global RepertoireDuGenome # Espionne ">$LesNomsDesRepeats<" set TailleDeLaSequence [string length $SequenceDuCDNARemasquee] set PourcentReMasque [PourcentageArrondiSup $NombreDeBasesRemasquees $TailleDeLaSequence] if {$PourcentReMasque==0} { set Annotation "NoRepeatToReMask EndReMask" } else { if {$PourcentReMasque==-1} { set Annotation "NoSequenceToReMask EndReMask" } else { set SeuilPourcentage 90.0 if {[expr $PourcentReMasque > $SeuilPourcentage]} { set Annotation "TotallyReMasked" } else { set Annotation "PartiallyReMasked" } } } if {$PourcentReMasque==0} { set Annotation "$Annotation" } else { set NomsDesRepeats [join $LesNomsDesRepeats " "] set Annotation "$Annotation ${PourcentReMasque}% $NomsDesRepeats EndReMask" } return $Annotation } proc InfoUniprotMito {} { set Lacc "Q9BW92 SYTM Q5T160 SYRM Q96I59 SYNM Q96GW9 SYMM Q6PI48 SYDM Q15031 SYLM Q9NSE4 SYIM Q7L3T8 SYPM P49590 SYHM Q9UGM6 SYWM Q9Y2Z4 SYYM Q9NP81 SYSM Q5JPH6 SYEM CytoSpliced SYKM CytoMLS SYGM Q9HA77 SYCM Q5JTZ9 SYAM Q5ST30 SYVM O95363 SYFM" cd [MiSynPatDir]/data/structures set Ld [lsort [glob -type d "*ars*"]] set Lacc [string map {"\n" " "} $Lacc] regsub -all { +} $Lacc " " Lacc set Lacc [split $Lacc] set Lacc [lsort -stride 2 -index 1 $Lacc] set Luni [list] foreach {acc what} $Lacc { lappend Luni $acc } array set T [InfosFromUniProt $Luni] array set T [InfosFromRefSeq $Luni] set Kseq "mltqaavrlvrgslrktswaewghrelrlgqlapftaphkdksfsdqgselkrrlkaekkvaekeakqkelsekqlsqataaatnhttdngvgpeeesvdpnqyykirsqaihqlkvngedpyphkfhvdisltdfiqkyshlqpgdhltditlkvagrihakrasggklifydlrgegvklqvmansrnykseeefihinnklrrgdiigvqgnpgktkkgelsiipyeitllspclhmlphlhfglkdketryrqryldlilndfvrqkfiirskiityirsfldelgfleietpmmniipggavakpfityhneldmnlymriapelyhkmlvvggidrvyeigrqfrnegidlthnpefttcefymayadyhdlmeitekmvsgmvkhitgsykvtyhpdgpegqaydvdftppfrrinmveelekalgmklpetnlfeteetrkilddicvakavecppprttarlldklvgeflevtcinptficdhpqimsplakwhrskeglterfelfvmkkeicnaytelndpmrqrqlfeeqakakaagddeamfidenfctaleyglpptagwgmgidrvamfltdsnnikevllfpamkpedkkenvattdtlesttvgssv" set Kseq [string toupper $Kseq] set Gseq "--------------------------------mlraggarrfrrhplwtaqgrrlmpsprpvllrgaraalllllpprllarpslllrrslsaascapislpaaasrssmdgagaeevlaplrlavrqqgdlvrklkedkap--qvdvdkavaelkarkrvle-akelalqpkd----------divdrakmedtlkrrffydqafaiyggvsglydfgpvgcalknniiqtwrqhfiq-eeqi-leidctmltpepvlktsghvdkfadfmvkdvkngecfradhllkahlqklms--------------------------------------dkk---------------------------------csvekkse-----mesvlaqldnygqqeladlfvnynvkspitgndls---ppvsfnlmfktfigpggnmp------------------------------gylrpetaqgiflnfkrllef-nqgklpfaaaqignsfrneisprsglirvreftmaeiehfvdpsekdhpkfqnvadlhlylysakaqvsgqsar-----kmrlgdaveqgvinntvlgyfi-griylyltkvgispdklrfrqhmenemahyacdcwdaeskts-yg--wieivgcadrscydlschara---------------tkvplvaekplkepktvnvvqfepskgaigkaykkdaklvmeylaicde--cyitememllnekgeft--ietegktf---------------------------qltkd--minvkrfqktlyveevvpnviepsfglgrimytvfehtfhvreg----------------------------------------------deqrtffsfpavvapfkcsvlplsqnqe-fmpfvkelsealtrhgv-shkvddssgsigrryartdeigvafgvtidfdtvnktp-------htatlrdrdsmrqiraeiselpsivqdlang---nitwadvearyplfegqetgkketiee------------" set Gseq [string toupper [string map {- ""} $Gseq]] set fall [open "all_aars_mito.tfa" w] foreach d $Ld { cd $d set sys [string toupper [string index $d 0]] # cherche access correspondant set found 0 foreach {acc what} $Lacc { if {[string index $what 2] eq $sys} { set found 1 break } } if {! $found} { puts ">> PB $sys not found" cd .. continue } set tfa "$acc.tfa" set f [open $tfa w] switch $what { "SYGM" {set seq $Gseq} "SYKM" {set seq $Kseq} default {set seq $T($acc,Sequence)} } puts "\n$acc $what" puts "-----------" #puts "$seq" puts $f ">$acc $what" puts $f "$seq" close $f puts $fall ">$acc $what" puts $fall "$seq" #set Lres [split [DbFetchGET uniprot $Luni] \n] #set Lembl [SplitLesEMBL $Lres] cd .. } close $fall exit } proc Informe {Nom {Append ""}} { global RepertoireDuGenome global FenetreInfoOuverte global FenetreSignal global LesKanvasOuverts global ListeDesContenuInfo global InfoEnMemoire global InformeSansDemander global TypeCouleur global TypeCouleurDuLinge global RetourEntreTexte Gs "Text" # if {[PourWscope]} { return [XpertComment $Nom] } set FichierInfo "$RepertoireDuGenome/infos/$Nom" if {[regexp "\n" $Append]} { foreach Ligne [split $Append "\n"] { if {[regexp "^Nom: " $Ligne]} { continue } set Inf [Informe $Nom $Ligne] } return $Inf } if {[regexp "^=CopyOf_" $Append]} { set Source [StringApres "_" dans $Append] return [Informe $Nom [ExtraitInfo $Source]] } set Remplace [regexp "^=" $Append] regsub {^[=+]} $Append "" Append if { ! [PourWscope] && [info exists FenetreInfoOuverte($Nom)]} { raise [set FenetreInfoOuverte($Nom)] if {$Append == ""} { return "[ContenuDuFichier $FichierInfo]" } if {[OuiOuNon "$Append\n doit etre rajoute a la page info $Nom\n La page info est deja ouverte.\n Dois-je abandonner ?"]} { return -1 } if {[OuiOuNon "Dois-je le faire maintenant ?"]} { [set FenetreInfoOuverte($Nom)].text insert end "$Append\n" return -2 } FaireLire "Vous ferez, plus tard, le couper-coller pour moi. Merci." return -3 } set FenetreInfoOuverte($Nom) $Nom if {! [file exists $FichierInfo] || [file size $FichierInfo]==0} { set Information "Nom: $Nom" if {[file exists "$RepertoireDuGenome/beton/infomodele"]} { append Information "\n[ContenuDuFichier $RepertoireDuGenome/beton/infomodele]" } Sauve $Information dans $FichierInfo } if {$Remplace} { scan $Append "%s" Champ set VieuxTextePurge [InformeParSuppressionDuChamp $Nom $Champ "PourVoir"] } else { set VieuxTextePurge [ContenuDuFichier $FichierInfo] } if { [info exists InformeSansDemander] && $InformeSansDemander } { set BonTexte "$VieuxTextePurge\n$Append" } else { if {[PourWscope]} { return [EntreTexte "$VieuxTextePurge\n$Append" "AvecRetourPourInforme" $FichierInfo] } set BonTexte [EntreTexte "$VieuxTextePurge\n$Append" [list "Show $Nom" "SeeAby Show $Nom"]] } if { $BonTexte != "" } { set TexteOk [Censure "$BonTexte"] Sauve $TexteOk dans $FichierInfo set InfoEnMemoire($Nom) $TexteOk if {[info exists ListeDesContenuInfo]} { set iTrouve [lsearch -regexp $ListeDesContenuInfo [string toupper "^Nom: $Nom"]] set ListeDesContenuInfo [lreplace $ListeDesContenuInfo $iTrouve $iTrouve [string toupper $TexteOk]] } if {[PourWscope]} { return $TexteOk } if {[info exists LesKanvasOuverts]} { foreach K $LesKanvasOuverts { if { ! [info exists TypeCouleur($K)]} { continue } RetexteUneBoite $Nom [NomDeScene $Nom] $K OnColorieLesFrames 1 RecoloreUneBoite $Nom [set TypeCouleur($K)] $K OnColorieLesFrames 0 RecoloreUnLinge $Nom [set TypeCouleurDuLinge($K)] $K } } } if {[info exists FenetreSignal($Nom)]} { destroy [set FenetreSignal($Nom)] unset FenetreSignal($Nom) } unset FenetreInfoOuverte($Nom) return $BonTexte } proc InformeAccessFromHeaderPourTous {} { foreach Nom [ListeDesPABs] { set Access [AccessFromHeader $Nom] if {$Access==""} { continue } Espionne "$Nom [Alias $Nom] $Access" InformeSansDemander $Nom "AccessRefseq: $Access" } } proc InformeAccessProt {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set sansaccess 0 foreach Nom $Liste { set F "[RepertoireDuGenome]/prottfa/$Nom" set IdProt ""; set AccessProt "" set LesLignes [LesLignesDuFichier $F] set PremiereLigne [lindex $LesLignes 0] set LesMots [LesMotsDeLaLigne $PremiereLigne] set Nom [lindex $LesMots 0] regsub ">" $Nom "" Nom set compte -1 foreach Mot $LesMots { incr compte if {[string equal $Mot "from"]} { set IndexFrom $compte set IdProt [lindex $LesMots [expr $IndexFrom + 1]] set AccessProt [lindex $LesMots [expr $IndexFrom -1]] break } } if {$IdProt=="" && $AccessProt==""} { set AccessProt [lindex $LesMots 1] } if {$AccessProt==""} { #set AccessProt [AcDuId $IdProt] FaireLire "Horreur $Nom ss accessprot" } InformeSansDemander $Nom "IdAccprot: $IdProt $AccessProt" } } proc InformeAccessProtOld {} { set sansaccess 0 foreach F [glob -nocomplain "[RepertoireDuGenome]/prottfa/*"] { set IdProt ""; set AccessProt "" Espionne $F set LesLignes [LesLignesDuFichier $F] set PremiereLigne [lindex $LesLignes 0] set LesMots [LesMotsDeLaLigne $PremiereLigne] set Nom [lindex $LesMots 0] regsub ">" $Nom "" Nom set compte -1 foreach Mot $LesMots { incr compte if {[string equal $Mot "from"]} { set IndexFrom $compte set IdProt [lindex $LesMots [expr $IndexFrom + 1]] set AccessProt [lindex $LesMots [expr $IndexFrom -1]] break } } if {$IdProt=="" && $AccessProt==""} { set AccessProt [lindex $LesMots 1] } if {$AccessProt==""} { #set AccessProt [AcDuId $IdProt] FaireLire "Horreur $Nom ss accessprot" } InformeSansDemander $Nom "Id et Access prot: $IdProt $AccessProt" } } proc InformeAffyPourTous {} { foreach Nom [ListeDesPABs] { set LesProbeAccess {} set LesProbeLocUcsc {} set LocUcsc {} set LesLocAffy {} set Access [AccessEvi $Nom] if {$Access!=""} { set LocUcsc [LocUcscEvi $Access "From200503"] foreach ProbeAccess [lsort -unique [AffyAnno $Access "Probe_Set_ID"]] { lappend LesProbeAccess $ProbeAccess lappend LesLocAffy [AffyAnno $ProbeAccess "Alignments"] } set LesProbeLocUcsc [AffyAnno $LocUcsc "Probe_Set_ID"] } Espionne "" Espionne "$Nom" Espionne "Access =$Access" Espionne "ProbeAccess =$LesProbeAccess" Espionne "ProbeLocUcsc=$LesProbeLocUcsc" Espionne "LocUcsc =$LocUcsc" Espionne "LocAffy =$LesLocAffy" } } proc InformeAffyPourTousChezMoi {} { set NbNom 0; set Vides 0; set Pleins 0 set NbAcPs 0; set sit1 0; set sit2 0; set NbSsPs 0; set PSLocUcsc 0; set NbSsLoc 0; set ajeter 0 foreach Nom [ListeDesPABs] { Espionne "" incr NbNom; set LesProbeAccess {}; set LesProbeLocUcsc {}; set LesLocAffy {} set Loc ""; set LocUcsc ""; set dsles2 0 set LesLocs {}; set LesPs {} set Access [AccessEvi $Nom] if {$Access==""} { incr Vides continue } if {$Access!=""} { incr Pleins set LocUcscGbRs [ExtraitInfo $Nom "LocUcscFrom200503"] set LocUcscRs [ExtraitInfo $Nom "LocUcscRefSeqFrom200503"] if {![regexp {[0-9]+} $LocUcscGbRs] && ![regexp {[0-9]+} $LocUcscRs]} {set LocUcsc03 ""} if {[regexp {[0-9]+} $LocUcscGbRs] && [regexp {[0-9]+} $LocUcscRs]} { set dsles2 1 if {$LocUcscGbRs == $LocUcscRs} { set LocUcsc03 $LocUcscGbRs } else { set LesMotsGbRs [split $LocUcscGbRs {:- }] set startGbRs [lindex $LesMotsGbRs 1] set stopGbRs [lindex $LesMotsGbRs 2] set longGbRs [expr $stopGbRs-$startGbRs] set LesMotsRs [split $LocUcscRs {:- }] set startRs [lindex $LesMotsRs 1] set stopRs [lindex $LesMotsRs 2] set longRs [expr $stopRs-$startRs] if {$longGbRs < $longRs} { set LocUcsc03 $LocUcscRs/litige/ } else { set LocUcsc03 $LocUcscGbRs/litige/ } } } if {!$dsles2 && [regexp {[0-9]+} $LocUcscGbRs]} {set LocUcsc03 $LocUcscGbRs} if {!$dsles2 && [regexp {[0-9]+} $LocUcscRs]} {set LocUcsc03 $LocUcscRs} foreach ProbeAccess [lsort -unique [AffyAnno $Access "Probe_Set_ID"]] { lappend LesProbeAccess $ProbeAccess lappend LesLocAffy [AffyAnno $ProbeAccess "Alignments"] } set LesLocAffy [lsort -unique $LesLocAffy] set LesProbeLocUcsc [AffyAnno $LocUcsc03 "Probe_Set_ID"] set LesProbeLocUcsc [lsort -unique $LesProbeLocUcsc] } Espionne "$Nom" Espionne "Access =$Access" Espionne "LocUcscGbRs =$LocUcscGbRs" Espionne "LocUcscRs =$LocUcscRs" Espionne "LocUcsc03 =$LocUcsc03" Espionne "ProbeAccess =$LesProbeAccess" Espionne "ProbeLocUcsc=$LesProbeLocUcsc" Espionne "LocAffy =$LesLocAffy" if {$LesProbeAccess!={}} { incr NbAcPs if {$LesProbeLocUcsc!={}} { set LongLesProbeAccess [llength $LesProbeAccess] set LongLesProbeLocUcsc [llength $LesProbeLocUcsc] if {$LongLesProbeAccess > $LongLesProbeLocUcsc} { incr sit1 foreach x $LesProbeLocUcsc { set jaitrouve1 0 foreach y $LesProbeAccess { if {$x==$y} {set jaitrouve1 1; break} } if {!$jaitrouve1} { Espionne "$x n'est pas ds lesprobesaccess" } } } if {$LongLesProbeLocUcsc > $LongLesProbeAccess} { incr sit2 foreach y $LesProbeAccess { set jaitrouve2 0 foreach x $LesProbeLocUcsc { if {$y==$x} {set jaitrouve2 1; break} } if {!$jaitrouve2} { Espionne "$y n'est pas ds lesprobeslocucsc" } } } } } if {[regexp {[0-9]} $LocUcsc03]} { set chr ""; set deb ""; set fin "" set LesMots [split $LocUcsc03 {:- }] set chr [lindex $LesMots 0] set deb [lindex $LesMots 1] set fin [lindex $LesMots 2] for {set i $deb} {$i<=$fin} {incr i} { set Loc [LocInBetween $i Mouse $chr Affy] lappend LesLocs $Loc } set LesLocs [ListeSansDoublon $LesLocs] foreach x $LesLocs { Espionne "1" Espionne "$x" if {[regexp {^In} $x]} { set LesParts [split $x "In"] foreach Part $LesParts { Espionne "++$Part" string trim $Part Espionne "--$Part" lappend LesPs $Part } } if {[regexp {^Between} $x]} { lappend LesPs $x } } set LesPs [ListeSansDoublon $LesPs] foreach y $LesPs { Espionne "2" Espionne "$y" } } if {$LesProbeAccess=={}} { #Espionne "$Nom" #Espionne "Access =$Access" #Espionne "ProbeAccess =$LesProbeAccess" #Espionne "ProbeLocUcsc=$LesProbeLocUcsc" #Espionne "LocUcscGbRs =$LocUcscGbRs" #Espionne "LocUcscRs =$LocUcscRs" #Espionne "LocUcsc =$LocUcsc" #Espionne "LocAffy =$LesLocAffy" #Espionne "LocAcStart= $Loc" #Espionne "LocAcStop= $Loc" #Espionne "" incr NbSsPs if {$LesProbeLocUcsc!={}} {incr PSLocUcsc} if {![regexp {[0-9]} $LocUcsc]} {incr NbSsLoc} if {[regexp {[0-9]} $LocUcsc]} { incr ajeter #Espionne "$Nom" #Espionne "Access =$Access" #Espionne "LocUcsc =$LocUcsc" #Espionne "LocAcStart= $Loc" #Espionne "LocAcStop= $Loc" #Espionne "" } } } Espionne "" Espionne "nb total = $NbNom" Espionne "nb vide = $Vides" Espionne "nb plein = $Pleins" Espionne "" Espionne "nb ac ps = $NbAcPs" Espionne "" Espionne "nb ss ps = $NbSsPs" Espionne "nb ss ps ac pslocucsc = $PSLocUcsc" Espionne "nb ss locucsc = $NbSsLoc" Espionne "" Espionne "sit1= $sit1" Espionne "sit2= $sit2" } proc InformeAliasWithACIfNotGNPourTous {MauvaisAlias MauvaisGN} { #rR Si l'actuel Alias contient $MauvaisAlias on prend GN sauf s'il contient MauvaisGN, par defaut on prond AC foreach Nom [ListeDesPABs] { set Entete [EnteteDuFichierTFA [GscopeFile $Nom prottfa]] set Alias [ExtraitInfo $Nom Alias] if {[regexp $MauvaisAlias $Alias]} { set Alias [ExtraitInfo $Nom "GN:"] } if {[regexp $MauvaisGN $Alias]} { set Alias [ExtraitInfo $Nom "AC:"] } Espionne "$Nom $Alias" InformeSansDemander $Nom "=Alias: $Alias" } } proc InformeAvecDaedalusHitPourTous {{Quoi ""} {Qui ""}} { if {$Quoi==""} { set Quoi "OS_OC_GN_DE" } if {[regexp "OS" $Quoi]} { set FichierOrganismesDesPABs "[RepertoireDuGenome]/fiches/organismesdespabs" if {[file exists $FichierOrganismesDesPABs]} { foreach Ligne [LesLignesDuFichier $FichierOrganismesDesPABs] { scan $Ligne "%s" NomLu set DejaVu($NomLu,OS) 1 } } } if {$Qui==""} { set Qui [ListeDesPABs] } if {[EstUnPAB $Qui]} { set Qui [list $Qui] } foreach Nom $Qui { if {[EstUnPABMute $Nom]} { continue } Espionne "I'll examine $Nom" if {[regexp "OS" $Quoi] && [info exists DejaVu($Nom,OS)]} { continue } set Narcisse [Narcisse $Nom] if {[regexp "OS" $Quoi] && [regexp "^cio" $Narcisse]} { set Valeur "7719 <>" set Ligne "$Nom $Valeur" InformeSansDemander $Nom "=Organism: $Valeur" AppendAuFichier $FichierOrganismesDesPABs $Ligne if {[regexp "OC" $Quoi]} { scan $Valeur "%s" TaxId set Classe [TaxClass $TaxId "" "" Name] if {$Classe!=""} { Espionne "$Nom Taxonomy: $Classe" InformeSansDemander $Nom "=Taxonomy: $Classe" } } continue } set FHit "[RepertoireDuGenome]/daedalushits/$Nom" if { ! [file exists $FHit]} { continue } set Texte [ContenuDuFichier $FHit] set OX "" if {[info exists ExistePlusLoin]} { unset ExistePlusLoin } while {[set BH [ValeurDeLaBalise "BlastHit" Texte]]!=""} { set AC [ValeurDeLaBalise AC BH NePasRogner] set ID [ValeurDeLaBalise ID BH NePasRogner] set OX [ValeurDeLaBalise OX BH NePasRogner] set GN [ValeurDeLaBalise GN BH NePasRogner] if {[regexp "Name=" $GN]} { regsub -all ";" $GN " " set GN [StringApres "Name=" dans $GN] } set DE [ValeurDeLaBalise DE BH NePasRogner] if {[EstUnAccessPDB $Narcisse] || [string equal -nocase $ID $Narcisse] || [regexp -nocase $Narcisse $AC]} { break } if { ! [info exists ExistePlusLoin]} { set ExistePlusLoin [regexp -nocase $Narcisse $Texte] } if {$ExistePlusLoin} { continue } if { 0 && [OuiOuNon "For $Nom ID=$ID AC=$AC the hit \n$BH\nis not Narcisse $Narcisse\nDo I continue parsing\n [string range $Texte 0 500] ?"]} { continue } break } if {[regexp "OS" $Quoi] && $OX!=""} { set LesNames {} foreach TaxId [split $OX " "] { lappend LesNames "<[Tax $TaxId]>" } set Valeur "$OX <[join $LesNames "+"]>" set Ligne "$Nom $Valeur" AppendAuFichier $FichierOrganismesDesPABs $Ligne InformeSansDemander $Nom "=Organism: $Valeur" if {[regexp "OC" $Quoi]} { scan $OX "%s" TaxId set Classe [TaxClass $TaxId "" "" Name] if {$Classe!=""} { Espionne "$Nom Taxonomy: $Classe" InformeSansDemander $Nom "=Taxonomy: $Classe" } } } if {[regexp "GN" $Quoi] && $GN!=""} { InformeSansDemander $Nom "ValiGN: $GN" } if {[regexp "DE" $Quoi] && $DE!=""} { InformeSansDemander $Nom "ValiDE: $DE" } } if {[regexp "OS" $Quoi]} { return $FichierOrganismesDesPABs } return } proc InformeBathy {} { foreach Nom [ListeDesPABs] { set Entete [EnteteDuFichierTFA [GscopeFile $Nom nuctfa]] set Description [StringSuivant " " dasn $Entete] # InformeSansDemander $Nom "OriginalDescription: $Description" scan $Description "%s" Alias InformeSansDemander $Nom "Alias: $Alias" if {[regexp "^CL" $Alias]} { set Reads [BathyCompositionContig $Alias "Reads"] set Libraries [BathyCompositionContig $Alias "Libraries"] InformeSansDemander $Nom "Reads: [join $Reads " "]" InformeSansDemander $Nom "Libraries: [join $Libraries " "]" } if {[regexp "^IN0ACC" $Alias]} { set Library "" scan $Description "%s %s" Bidon Library InformeSansDemander $Nom "Reads: $Alias" InformeSansDemander $Nom "Libraries: $Library" } if {[regexp "^SSH" $Alias]} { set Library "" scan $Description "%s %s" Bidon Library InformeSansDemander $Nom "Reads: $Alias" InformeSansDemander $Nom "Libraries: $Library" } if {[regexp "^IN0ACA" $Alias]} { set Library "" scan $Description "%s %s" Bidon Library InformeSansDemander $Nom "Reads: $Alias" InformeSansDemander $Nom "Libraries: $Library" } } } proc InformeBestHumanHitPourTous {} { FaireLire "Attention ce n'est normalement pas à refaire ..." file mkdir "[RepertoireDuGenome]/prottfa_besthumanhit" file mkdir "[RepertoireDuGenome]/protembl_besthumanhit" set LaSortie {} foreach Nom [ListeDesPABs] { set BestHumanHit [BestHumanHit $Nom] Espionne "$Nom $BestHumanHit" InformeSansDemander $Nom "=BestHumanHit20170113: $BestHumanHit" set EMBL [QGQ UniprotData $BestHumanHit] set FicTfa [Sauve [SequenceFormatTFA $EMBL] dans [GscopeFile $Nom "prottfa_besthumanhit"]] set FicEmbl [Sauve $EMBL dans [GscopeFile $Nom "protembl_besthumanhit"]] lappend LaSortie $FicEmbl } return $LaSortie } proc InformeCilioCarta {} { FaireLire "Merci de vérifier cette proc, elle est peut-être obsolète" foreach Nom [ListeDesPABs] { set FicTfa [GscopeFile $Nom prottfa] scan [PremiereLigneDuFichier $FicTfa] "%s %s" N Gn set GN [CilioPep $Gn GN] if {$Gn!=$GN} { FaireLire "Ca merde pour $Nom $Gn!=$GN" } #AC ID GN GI TI PI DE SO PM CS LO CN SQ FA" foreach K [CilioPep ListOf Header] G [CilioPep ListOf GscopeHeader] { if {$G==""} { continue } set V [CilioPep $GN $K] InformeSansDemander $Nom "$G: $V" } } return } proc InformeClassePourTous {} { foreach Nom [ListeDesPABs] { set TaxOS [OrganismeDuPAB $Nom] if {$TaxOS==""} { continue } scan $TaxOS "%d" TaxId set Classe [TaxClass $TaxId "" "" Name] Espionne "$Nom Taxonomy: $Classe" InformeSansDemander $Nom "Taxonomy: $Classe" } } proc InformeCytoBand {{Liste ""}} { set total 0 set cas1 0; set cas2 0; set cas3 0; set cas4 0; set cas5 0; set cas6 0; set cas7 0; set cas8 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set LesCytoBand {} incr total #Espionne $Nom set yena2 0 set LocUcsc ""; set CytoBand1 ""; set CytoBand2 ""; set CytoBand ""; set CytoBand1bis ""; set CytoBand2bis "" set CytoBand [ExtraitInfo $Nom "CytoBand:"] set LocUcsc [ExtraitInfo $Nom "LocUcscFrom200602:"] set Attention [ExtraitInfo $Nom "SeqWarning:"] #Espionne "$LocUcsc" if {$CytoBand == ""} { if {$LocUcsc=="" || $LocUcsc=="no value"} { #Espionne "cas1" incr cas1 #Espionne "$Nom CytoBand: no value" InformeSansDemander $Nom "CytoBand: no value" } if {$LocUcsc!="" && $LocUcsc!="no value"} { #Espionne "cas2" incr cas2 #Espionne "$LocUcsc" set LesMotsLocUcsc [split $LocUcsc {:- +/}] set chrLocUcsc [lindex $LesMotsLocUcsc 0] set startLocUcsc [lindex $LesMotsLocUcsc 1] set stopLocUcsc [lindex $LesMotsLocUcsc 2] #Espionne "$chrLocUcsc $startLocUcsc $stopLocUcsc" set CytoBand1 [CytoBandUcsc Mouse $chrLocUcsc $startLocUcsc] set CytoBand2 [CytoBandUcsc Mouse $chrLocUcsc $stopLocUcsc] #Espionne "CytoBand1 $CytoBand1" #Espionne "CytoBand2 $CytoBand2" if {[regexp {/} $LocUcsc]} { set chrLocUcscbis [lindex $LesMotsLocUcsc 5] set startLocUcscbis [lindex $LesMotsLocUcsc 6] set stopLocUcscbis [lindex $LesMotsLocUcsc 7] #Espionne "$chrLocUcscbis $startLocUcscbis $stopLocUcscbis" set CytoBand1bis [CytoBandUcsc Mouse $chrLocUcscbis $startLocUcscbis] set CytoBand2bis [CytoBandUcsc Mouse $chrLocUcscbis $stopLocUcscbis] #Espionne "CytoBand1bis $CytoBand1bis" #Espionne "CytoBand2bis $CytoBand2bis" } if {$CytoBand1=="" && $CytoBand2=="" && $CytoBand1bis=="" && $CytoBand2bis==""} { #Espionne "cas3" incr cas3 #Espionne "$Nom CytoBand: no value" InformeSansDemander $Nom "CytoBand: no value" continue } if {$CytoBand1bis!="" || $CytoBand2bis!=""} { #Espionne"cas4" incr cas4 set LesCytoBand {} if {$CytoBand1!=""} {lappend LesCytoBand $CytoBand1} if {$CytoBand2!=""} {lappend LesCytoBand $CytoBand2} if {$CytoBand1bis!=""} {lappend LesCytoBand $CytoBand1bis} if {$CytoBand2bis!=""} {lappend LesCytoBand $CytoBand2bis} set LesCytoBand [ListeSansDoublon $LesCytoBand] set CytoBand [join $LesCytoBand " et "] #Espionne "$Nom CytoBand: $CytoBand" InformeSansDemander $Nom "CytoBand: $CytoBand" continue } if {$CytoBand1!="" && $CytoBand2!="" && $CytoBand1 == $CytoBand2} { #Espionne "cas5" incr cas5 set yena2 1 set CytoBand $CytoBand1 #Espionne "$Nom CytoBand: $CytoBand" InformeSansDemander $Nom "CytoBand: $CytoBand" } if {$CytoBand1!="" && $CytoBand2!="" && $CytoBand1 != $CytoBand2} { #Espionne"cas6" incr cas6 set yena2 1 set CytoBand "$CytoBand1 et $CytoBand2" #Espionne "$Nom CytoBand: $CytoBand" InformeSansDemander $Nom "CytoBand: $CytoBand" } if {!$yena2 && $CytoBand1!=""} { #Espionne"cas7" incr cas7 set CytoBand $CytoBand1 #Espionne "$Nom CytoBand: $CytoBand" InformeSansDemander $Nom "CytoBand: $CytoBand" } if {!$yena2 && $CytoBand2!=""} { #Espionne"cas8" incr cas8 set CytoBand $CytoBand2 #Espionne "$Nom CytoBand: $CytoBand" InformeSansDemander $Nom "CytoBand: $CytoBand" } } #set CytoBand [ExtraitInfo $Nom "CytoBand:"] } } #Espionne"$total" #Espionne"cas1 $cas1"; Espionne"cas2 $cas2"; Espionne"cas3 $cas3"; Espionne"cas4 $cas4"; Espionne"cas5 $cas5"; Espionne"cas6 $cas6"; Espionne"cas7 $cas7"; Espionne"cas8 $cas8" } proc InformeCytoband {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { Espionne "" Espionne "$Nom" set LesCytoBand {} set Localisation [ExtraitInfo $Nom "Localisation:"] Espionne "Localisation $Localisation" if {$Localisation=="nolocalisation"} { set CytoBand1 "nocytoband" set CytoBand2 "nocytoband" lappend LesCytoBand $CytoBand1 lappend LesCytoBand $CytoBand2 Espionne "CytoBand1 $CytoBand1" Espionne "CytoBand2 $CytoBand2" } else { set LesLocalisations [split $Localisation ","] foreach Loc $LesLocalisations { Espionne "Loc $Loc" set elmtloc [split $Loc " "] set chr [lindex $elmtloc 0] set start [lindex $elmtloc 1] set stop [lindex $elmtloc 2] set CytoBand1 [CytoBandUcsc Human $chr $start] set CytoBand2 [CytoBandUcsc Human $chr $stop] lappend LesCytoBand $CytoBand1 lappend LesCytoBand $CytoBand2 Espionne "CytoBand1 $CytoBand1" Espionne "CytoBand2 $CytoBand2" } } set LesCytoBand [ListeSansDoublon $LesCytoBand] set LesCytoBand [ListeSsElmtVide $LesCytoBand] if {[llength $LesCytoBand]>1} {Espionne "attention"} set LaCytoBand [join $LesCytoBand " AND "] Espionne "$Nom $LaCytoBand" InformeSansDemander $Nom "Cytoband: $LaCytoBand" } } proc InformeDEFromProttfaPourTous {} { #rR On traite ici le cas >Nom BID AC DE1 DE2 DE3 DEi OS= #rR et non pas le cas >Nom BID AC Genre Espesce DE1 DE2 DE3 DEi foreach Nom [ListeDesPABs] { set Entete [EnteteDuFichierTFA [GscopeFile $Nom prottfa]] set DE [lrange [split $Entete " "] 3 end] if {[set iOS [string first "OS=" $DE]]>=0} { set DE [string range $DE 0 $iOS-1] } set DE [string trim $DE] Espionne "$Nom $DE" # FaireLire "$Nom $DE" if {$DE==""} { InformeParSuppressionDuChamp $Nom "DE:" } else { InformeSansDemander $Nom "=DE: $DE" } } } proc InformeDESansOSPourTous {} { foreach Nom [ListeDesPABs] { set DE [ExtraitInfo $Nom "DE:"] if {[set iOS [string first "OS=" $DE]]>=0} { set DE [string trim [string range $DE 0 $iOS-1]] Espionne "$Nom $DE" if {$DE==""} { InformeParSuppressionDuChamp $Nom "DE:" } else { InformeSansDemander $Nom "=DE: $DE" } } } } proc InformeDesUcsc {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set AccessExistant [AccessEvi $Nom] if {$AccessExistant!=""} { set DesUcsc [kgXrefUcscMouse $AccessExistant Des] set DesUcsc [join $DesUcsc ""] #Espionne $DesUcsc set GnUcsc [kgXrefUcscMouse $AccessExistant Gn] if {$GnUcsc!=""} { #InformeSansDemander $Nom "ValiGNUcsc: $GnUcsc" } else { #InformeSansDemander $Nom "ValiGNUcsc: no value" } if {$DesUcsc!=""} { InformeSansDemander $Nom "ValiDEUcsc: $DesUcsc" } else { InformeSansDemander $Nom "ValiDEUcsc: no value" } } else { #InformSansDemander $Nom "ValiGNUcsc: no value" InformeSansDemander $Nom "ValiDEUcsc: no value" } } } proc InformeEFFamily {} { foreach Nom [ListeDesPABs] { set LL [LesLignesDuFichier [GscopeFile $Nom "protembl"]] DecortiqueLesLignesEMBL $LL ID AC DE GN OS InformeSansDemander $Nom "Alias: $AC" InformeSansDemander $Nom "Organism: $OS" } } proc InformeFromOiPourTous {} { if { ! [OuiOuNon "Merci de vérifier cette proc, elle est peut-être obsolète. Il faut peut etre mettre ValiGN ou GN DraftGN. \nJe le fais quand même ?"]} { return "" } foreach Nom [ListeDesPABs] { set FicTfa [GscopeFile $Nom prottfa] set Header [PremiereLigneDuFichier $FicTfa] set Gn [StringApres "GN=" dans $Header] if {[regexp "DRAFT_" $Gn]} { InformeSansDemander $Nom "=DraftGN: $Gn" ; set Gn "" } if {$Gn=="Fragment"} { set Gn "" } regsub "GN=.+" $Header "" Debut set LesMots [LesMotsDuTexte $Debut] set Id [lindex $LesMots 1] set Ac [lindex $LesMots 2] set De [join [lrange $LesMots 5 end] " "] if {[regexp {\|} $Id]} { lassign [split $Id "|"] B A I set Id $I set Ac $A set Ba $B set De [join [lrange $LesMots 2 end] " "] } if {$Id!=""} { InformeSansDemander $Nom "=ID: $Id" } if {$Ac!=""} { InformeSansDemander $Nom "=AC: $Ac" } if {$Gn!=""} { InformeSansDemander $Nom "=GN: $Gn" ; InformeSansDemander $Nom "=Alias: $Gn"} if {$De!=""} { InformeSansDemander $Nom "=DE: $De" } } return "" } proc InformeGeneNameForPerox {Selection} { if {[regexp "\n" $Selection]} { foreach Sel [split $Selection "\n"] { InformeGeneNameForPerox $Sel } return } scan $Selection "%s" Nom set Possible [string trim [StringSuivant $Nom dans $Selection]] if {$Possible==""} { return "" } return [Informe $Nom "ValiGN: $Possible"] } proc InformeGnEtDesProt {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { #Espionne "$Nom" set IdAccProt [ExtraitInfo $Nom "IdAccProt"] set IdAccProt [split $IdAccProt " "] set AccProt [lindex $IdAccProt 1] set Texte ""; set Texte2 "" if {$AccProt!=""} { set Commande "getz \"\\\[protein-acc:$AccProt\\\]\" \-vf gen" set Texte [eval exec $Commande] set LesMotsTexte [split $Texte "\t"] set GnProt [lindex $LesMotsTexte 1] set Commande2 "getz \"\\\[protein-acc:$AccProt\\\]\" \-vf des" set Texte2 [eval exec $Commande2] set LesMotsTexte2 [split $Texte2 "\t"] set DesProt [lindex $LesMotsTexte2 1] regsub -all "\n" $DesProt " " DesProt if {$GnProt!=""} { InformeSansDemander $Nom "ValiGNProt: $GnProt" } else { InformeSansDemander $Nom "ValiGNProt: no value" } if {$DesProt!=""} { InformeSansDemander $Nom "ValiDEProt: $DesProt" } else { InformeSansDemander $Nom "ValiDEProt: no value" } } else { InformeSansDemander $Nom "ValiGNProt: no value" InformeSansDemander $Nom "ValiDEProt: no value" } } } proc InformeGoPourTous {{LesNoms ""}} { #rR 2017/02/10 onne met plus dans les info car il aciste MyGOsFromGene et MyGenesFromGO if {$LesNoms==""} { set LesNoms [ListeDesPABs] } if {[regexp {[ \n\,\t\;\r]} $LesNoms]} { set LesNoms [LesMotsDuTexte $LesNoms] } set N 0 set LesGOs {} foreach Nom $LesNoms { Espionne $Nom set Gn "" if {$Gn==""} { set Gn [ExtraitInfo $Nom "ValiGN:"] } if {$Gn==""} { set Gn [ExtraitInfo $Nom "GN:"] } if {$Gn==""} { set Gn [ExtraitInfo $Nom "DraftGN:"] } if {$Gn==""} { continue } regsub -all {\'} $Gn "prime" Gn set GOs "" # set GOs [ExtraitInfo $Nom "GOs:"] if {$GOs==""} { set GOs [GoGetFromGene $Gn GoAcc "" "" Up] } Espionne $GOs if {[incr N]%100==0} { Espionne "$Nom:Gn:$Gn GOs: $GOs" } if {$GOs==""} { continue } #InformeSansDemander $Nom "=GOs: $GOs" lappend LesGOs "$Nom:$Gn:GOs: $GOs" } return [SauveLesLignes $LesGOs dans [Fiches "NomGnGOs.txt"]] } proc InformeHomologeneId {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set HomologeneId "" #Espionne $Nom set HomologeneId [HomologeneIdAcGenecard $Nom] if {$HomologeneId==""} { #Espionne "$Nom HomologeneId: no value" InformeSansDemander $Nom "HomologeneId: no value" } else { #Espionne "$Nom HomologeneId: $HomologeneId" InformeSansDemander $Nom "HomologeneId: $HomologeneId" } } } proc InformeIdEtAcPourTous {} { if { ! [OuiOuNon "On suppose que les prottfa sont de la forme \n>Box Id Ac"]} { return "" } set TestIt [OuiOuNon "Do I do a test only" 0] foreach Nom [ListeDesPABs] { set FicTfa [GscopeFile $Nom "prottfa"] set Entete [EnteteDuFichierTFA $FicTfa] set Id "" set Ac "" regexp {^>[^ ]+ ([^ ]+) ([^ ]+)} $Entete Match Id Ac if {$Id!="" && ! $TestIt} { InformeSansDemander $Nom "Id: $Id" } if {$Ac!="" && ! $TestIt} { InformeSansDemander $Nom "Ac: $Ac" } lappend LesIdAc "$Nom Id=$Id Ac=$Ac" } return $LesIdAc } proc InformeIdOiAndAcOiPourTous {} { set DoIt [OuiOuNon "Do I write to info files"] set leLog {} foreach Nom [ListeDesPABs] { set Id [ExtraitInfo $Nom "Id:"] set Ac [ExtraitInfo $Nom "Ac:"] set TFA [QuestionDeScience EVImm "ret FromOrthoInspector $Id tfa"] set DejaVu($Id) 1 set IdOi "" if {$TFA!=""} { set IdOi $Id } else { foreach I [UniprotHistory $Ac "IdHis"] { if {[info exists DejaVu($I)]} { continue } set DejaVu($I) 1 set TFA [QuestionDeScience EVImm "ret FromOrthoInspector $I tfa"] if {$TFA!=""} { set IdOi $I ; break } } } unset DejaVu set TFA [QuestionDeScience EVImm "ret FromOrthoInspector $Ac tfa"] set DejaVu($Ac) 1 set AcOi "" if {$TFA!=""} { set AcOi $Ac } else { foreach A [UniprotHistory $Ac "AcHis"] { if {[info exists DejaVu($A)]} { continue } set DejaVu($A) 1 set TFA [QuestionDeScience EVImm "ret FromOrthoInspector $A tfa"] if {$TFA!=""} { set AcOi $A ; break } } } unset DejaVu set Warning "" if {$Id!=$IdOi || $Ac!=$AcOi} { set Warning "********" } lappend LeLog "$Nom\t$Ac\t$AcOi\t$Id\t$IdOi\t$Warning" if {$IdOi!="" && $DoIt} { InformeSansDemander $Nom "IdOi: $IdOi" } if {$AcOi!="" && $DoIt} { InformeSansDemander $Nom "AcOi: $AcOi" } } return $LeLog } proc InformeIdRefAndAcRefPourTous {} { set TestIt [OuiOuNon "Do I do a test only" 0] set leLog {} foreach Nom [ListeDesPABs] { set Id [ExtraitInfo $Nom "Id:"] set Ac [ExtraitInfo $Nom "Ac:"] set IdAcRef [UniprotHistory $Ac "IdAcRef"] set IdRef "" set AcRef "" scan $IdAcRef "%s %s" IdRef AcRef set Warning "" if {$Id!=$IdRef || $Ac!=$AcRef} { set Warning "********" } lappend LeLog "$Nom\t$Ac\t$AcRef\t$Id\t$IdRef\t$Warning" if {$IdRef!="" && ! $TestIt} { InformeSansDemander $Nom "IdRef: $IdRef" } if {$AcRef!="" && ! $TestIt} { InformeSansDemander $Nom "AcRef: $AcRef" } } return $LeLog } proc InformeIdYaAndAcYaPourTous {} { #rR ne sert pas pour le moment car c'est les mêmes que Oi set TestIt [OuiOuNon "Do I do a test only" 0] set leLog {} foreach Nom [ListeDesPABs] { set Id [ExtraitInfo $Nom "Id:"] set Ac [ExtraitInfo $Nom "Ac:"] set TFA [QuestionDeScience EVImm "ret FromYannis $Id tfa"] set DejaVu($Id) 1 set IdYa "" if {$TFA!=""} { set IdYa $Id } else { foreach I [UniprotHistory $Ac "IdHis"] { if {[info exists DejaVu($I)]} { continue } set DejaVu($I) 1 set TFA [QuestionDeScience EVImm "ret FromYannis $I tfa"] if {$TFA!=""} { set IdYa $I ; break } } } unset DejaVu set TFA [QuestionDeScience EVImm "ret FromYannis $Ac tfa"] set DejaVu($Ac) 1 set AcYa "" if {$TFA!=""} { set AcYa $Ac } else { foreach A [UniprotHistory $Ac "AcHis"] { if {[info exists DejaVu($A)]} { continue } set DejaVu($A) 1 set TFA [QuestionDeScience EVImm "ret FromYannis $A tfa"] if {$TFA!=""} { set AcYa $A ; break } } } unset DejaVu set Warning "" if {$Id!=$IdYa || $Ac!=$AcYa} { set Warning "********" } lappend LeLog "$Nom\t$Ac\t$AcYa\t$Id\t$IdYa\t$Warning" if {$IdYa!="" && ! $TestIt} { InformeSansDemander $Nom "IdYa: $IdYA" } if {$AcYa!="" && ! $TestIt} { InformeSansDemander $Nom "AcYa: $AcYa" } } return $LeLog } proc InformeIdYaRefAndAcYaRefPourTous {} { #rR ne sert pas pour le moment car c'est les mêmes que Oi set TestIt [OuiOuNon "Do I do a test only" 0] set leLog {} foreach Nom [ListeDesPABs] { set Id [ExtraitInfo $Nom "Id:"] set Ac [ExtraitInfo $Nom "Ac:"] set IdAcRef [UniprotHistory $Ac "IdAcRef"] set IdYaRef "" set AcYaRef "" scan $IdAcRef "%s %s" IdYaRef AcYaRef set Warning "" if {$Id!=$IdYaRef || $Ac!=$AcYaRef} { set Warning "********" } lappend LeLog "$Nom\t$Ac\t$AcYaRef\t$Id\t$IdYaRef\t$Warning" if {$IdYaRef!="" && ! $TestIt} { InformeSansDemander $Nom "IdYaRef: $IdYaRef" } if {$AcYaRef!="" && ! $TestIt} { InformeSansDemander $Nom "AcYaRef: $AcYaRef" } } return $LeLog } proc InformeIdentitesDuCDNA {Nom} { global RepertoireDuGenome set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" if { ! [file exists $FichierTFA]} { return "" } set CC "" set Ow "" set Entete [PremiereLigneDuFichier $FichierTFA] if {[OnTraiteDesAffymetrix]} { scan $Entete "%s %s" NomLu AC set NomAccesAliases [lindex [split $Entete ":"] 0] set Definition [lindex [split $Entete ":"] 1] set LesAliases [lrange [split $NomAccesAliases " "] 2 end] set CC "[join $LesAliases " "]" InformeSansDemander $Nom "=AffymetrixAccess: $AC" InformeSansDemander $Nom "=OwnerOfCDNA: Affymetrix" InformeSansDemander $Nom "=GBtagsDefinition: $Definition" } else { scan $Entete "%s %s %s" NomLu CC Ow if {$Ow!=""} { InformeSansDemander $Nom "=OwnerOfCDNA: $Ow" } if {$CC==""} { return "" } } return [InformeSansDemander $Nom "=CodeClone: $CC"] } proc InformeIdentitesDuCDNAPourTous {} { foreach Nom [ListeDesPABs] { Espionne [InformeIdentitesDuCDNA $Nom] } } proc InformeLaFusionAvecProttfa {Nom} { set Fichier "[RepertoireDuGenome]/prottfafusion/$Nom" if { ! [file exists $Fichier]} { return "" } set Entete [EnteteDuFichierTFA $Fichier] regsub ">" $Entete "" Entete regsub "$Nom " $Entete "" TexteF set TexteF "Fusion: $TexteF" set Info [InformeSansDemander $Nom $TexteF] set A [StringApres "obtained by fusion of " dans $Entete] set TexteA "PartAofFusion: $Entete" InformeSansDemander $A $TexteA if {[regexp "because frameshift between" $Entete]} { set B [StringApres "obtained by fusion of $A and " dans $Entete] set TexteB "PartBofFusion: $Entete" InformeSansDemander $B $TexteB } return $Info } proc InformeLaFusionAvecProttfaPourTous {} { foreach Nom [ListeDesFusions] { if { ! [EstUneFusion $Nom]} { continue } set Info [InformeLaFusionAvecProttfa $Nom] Espionne "$Nom\n$Info" } } proc InformeLeCopain {NomAccess {Append ""}} { global RepertoireDuGenome global FenetreInfoOuverte global InformeSansDemander set Access [file tail $NomAccess] set Nom [file tail [file dirname $NomAccess]] set FichierInfo "$RepertoireDuGenome/coinfos/$Nom/$Access" if {[info exists FenetreInfoOuverte($Nom,$Access)]} { raise [set FenetreInfoOuverte($Nom,$Access)] if {$Append == ""} { return "[ContenuDuFichier $FichierInfo]" } if {[OuiOuNon "$Append\n doit etre rajoute a la page info $Nom/$Access\n La page info est deja ouverte.\n Dois-je abandonner ?"]} { return -1 } if {[OuiOuNon "Dois-je le faire maintenant ?"]} { [set FenetreInfoOuverte($Nom,$Access)].text insert end "$Append\n" return -2 } FaireLire "Vous ferez, plus tard, le couper-coller pour moi. Merci." return -3 } set FenetreInfoOuverte($Nom,$Access) "$Nom,$Access" if {! [file exists $FichierInfo]} { set Information "Nom: $Nom $Access" if {[file exists "$RepertoireDuGenome/beton/infocopainmodele"]} { append Information "\n[ContenuDuFichier $RepertoireDuGenome/beton/infocopainmodele]" } Sauve $Information dans $FichierInfo } if { [info exists InformeSansDemander] && $InformeSansDemander } { set BonTexte "[ContenuDuFichier $FichierInfo]\n$Append" } else { set BonTexte [EntreTexte "[ContenuDuFichier $FichierInfo]\n$Append"] } if { $BonTexte != "" } { set TexteOk [Censure "$BonTexte"] Sauve $TexteOk dans $FichierInfo } unset FenetreInfoOuverte($Nom,$Access) return $BonTexte } proc InformeLeCopainSansDemander {NomAccess {Append ""}} { global InformeSansDemander if {[info exists InformeSansDemander]} { set Memo $InformeSansDemander } set InformeSansDemander 1 set Retour [InformeLeCopain $NomAccess $Append] if {[info exists Memo]} { set InformeSansDemander $Memo } return $Retour } proc InformeLesClasses {} { global RepertoireDuGenome global ListeDesPABs global InformeSansDemander set InformeSansDemander 1 if { ! [info exists ListeDesPABs]} { ChargeLesPABs } foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/classes"] { scan $Ligne "%s %s %s" Nom AA Classe set Classes($Nom) $Classe } foreach Nom $ListeDesPABs { Informe $Nom "Class: [set Classes($Nom)]" } } proc InformeLesCopainsDeThetase {{Liste ""}} { global RepertoireDuGenome global InformeSansDemander set InformeSansDemander 1 if {$Liste=={}} { set Liste [ListeDesPABs] } foreach Nom $Liste { foreach FichierCopain [glob -nocomplain "$RepertoireDuGenome/copains/$Nom/*"] { set Access [file tail $FichierCopain] set LesEMBL [LaSequenceDesBanques $Access $Access AccessOK "OnVeutEMBL"] if {$LesEMBL=={}} { InformeLeCopain "$Nom/$Access" "=AltAccess: not found" continue } set SeqCopain [LaSequenceDesLignesEMBL [LesLignesDuFichier $FichierCopain]] set SeqBanque [LaSequenceDesLignesEMBL $LesEMBL] if {[string equal -nocase $SeqCopain $SeqBanque] || [string equal -nocase [string range $SeqCopain 1 end] $SeqBanque]} { InformeLeCopain "$Nom/$Access" "=AltAccess: $AccessOK" } else { InformeLeCopain "$Nom/$Access" "=AltAccess: $AccessOK but with no identical sequence" } } } } proc InformeLesMetsCorriges {} { global ListeDeBoites global RepertoireDuGenome global InformeSansDemander Wup "Je lis le fichier metscorriges qui n'est que les 1eres lignes" Wup " des fichiers gcgs contenant 'Cut ...'" set InformeSansDemander 1 foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/metscorriges"] { set Nom [lindex [split $Ligne " "] 0] set iCut [string first "Cut" $Ligne] # set iFin [expr [string first "Length" $Ligne]-1] set Zone [string range $Ligne $iCut end] set Append "NewStartCodon: $Zone" Informe $Nom $Append Espionne "\n$Nom\n$Append" } } proc InformeLocUcscEvi {{FromWhere ""} {Liste ""}} { # cas ou sup a 2 pas traiter set cas1 0; set cas2 0; set cas3 0; set cas4 0; set cas5 0; set cas6 0; set cas7 0; set cas8 0; set cas9 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set Access "" set Ligne ""; set Lignes {} set Access [AccessEvi $Nom] #Espionne "$Nom $Access" if {$Access==""} { #Espionne "cas1" incr cas1 #Espionne "$Nom LocUcscKg$FromWhere: no value" InformeSansDemander $Nom "LocUcscKg$FromWhere: no value" continue } set Lignes [LocUcscEvi $Nom $FromWhere AllLoc] set Lignes [ListeSansDoublon $Lignes] #EspionneL $Lignes if { $Lignes== ":- ()" } { #Espionne "cas2" incr cas2 #Espionne "$Nom LocUcscKg$FromWhere : no value" InformeSansDemander $Nom "LocUcscKg$FromWhere: no value" continue } set long [llength $Lignes] if {$long == 0} { #Espionne "cas3" incr cas3 #Espionne "erreur" } if {$long == 1} { #Espionne "cas4" incr cas4 set Ligne [lindex $Lignes 0] set Ligne [join [LesMotsDeLaLigne $Ligne] " "] #Espionne "$Nom LocUcscKg$FromWhere : $Ligne" InformeSansDemander $Nom "LocUcscKg$FromWhere: $Ligne" } if {$long == 2} { #Espionne "cas5" incr cas5 set Ligne [join $Lignes "/"] #Espionne "$Ligne" set 1rLocal [lindex $Lignes 0] set 2mLocal [lindex $Lignes 1] set LesMots1 [split $1rLocal ":"] set LesMots2 [split $2mLocal ":"] set chrom1 [lindex $LesMots1 0] set chrom2 [lindex $LesMots2 0] if {[regexp {random} $chrom1]} { set LesMots4 [split $chrom1 "_"] set ssrandom [lindex $LesMots4 0] if {$ssrandom == $chrom2} { # Espionne "A 2mLocal= $2mLocal" # Espionne "$Nom LocUcscKg$FromWhere: $2mLocal" InformeSansDemander $Nom "LocUcscKg$FromWhere: $2mLocal" continue } } if {[regexp {random} $chrom2]} { set LesMots5 [split $chrom2 "_"] set ssrandom2 [lindex $LesMots5 0] if {$ssrandom2 == $chrom1} { #Espionne "A 1rLocal= $1rLocal" #Espionne "$Nom LocUcscKg$FromWhere : $1rLocal" InformeSansDemander $Nom "LocUcscKg$FromWhere: $1rLocal" continue } } if {$chrom1==$chrom2} { #Espionne "cas6" incr cas6 #Espionne "$Nom LocUcscKg$FromWhere : $Ligne" InformeSansDemander $Nom "LocUcscKg$FromWhere: $Ligne" continue } if {$chrom1!=$chrom2} { if {[regexp {^NM} $Access]} { #Espionne "cas7" incr cas7 set Commande "getz \"\\\[refseq-acc:$Access\\\] > \\\[refseq_features-ftk:source\\\]\" \-t | grep chromosome" set GetzOut [eval exec $Commande] set LesMots3 [split $GetzOut {\"}] set Numero [lindex $LesMots3 1] Espionne "NCBI= chr$Numero" regsub "chr" $chrom1 "" chrom1 regsub "chr" $chrom2 "" chrom2 if {$Numero==$chrom1} { #Espionne "B 1rLocal= $1rLocal" #Espionne "$Nom LocUcscKg$FromWhere : $1rLocal" InformeSansDemander $Nom "LocUcscKg$FromWhere: $1rLocal" } if {$Numero==$chrom2} { #Espionne "B 2mLocal= $2mLocal" #Espionne "$Nom LocUcscKg$FromWhere : $2mLocal" InformeSansDemander $Nom "LocUcscKg$FromWhere: $2mLocal" } } else { #Espionne "cas8" incr cas8 #Espionne "$Nom LocUcscKg$FromWhere : $Ligne" InformeSansDemander $Nom "LocUcscKg$FromWhere: $Ligne" continue } } } if {$long > 2} { #Espionne "cas9" incr cas9 #Espionne "$Nom $Access plus de 2" EspionneL $Lignes InformeSansDemander $Nom "LocUcscKg$FromWhere: $Ligne" } } #Espionne "" #Espionne "cas1 $cas1";Espionne "cas2 $cas2";Espionne "cas3 $cas3";Espionne "cas4 $cas4";Espionne "cas5 $cas5";Espionne "cas6 $cas6";Espionne "cas7 $cas7";Espionne "cas8 $cas8";Espionne "cas9 $cas9" } proc InformeLocUcscPourTous {{Liste ""}} { set total 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set cas1 0; set cas2 0; set cas3 0; set cas4 0; set cas5 0; set cas6 0; set cas7 0; set cas8 0; set cas9 0; set cas10 0 foreach Nom $Liste { incr total set LocUcsc "" set LocUcscGbRs [ExtraitInfo $Nom "LocUcscKgFrom200602"] set LocUcscRs [ExtraitInfo $Nom "LocUcscRsFrom200602"] #Espionne "$Nom" #Espionne "$LocUcscGbRs" #Espionne "$LocUcscRs" set dsles2 0 if {![regexp {[0-9]+} $LocUcscGbRs] && ![regexp {[0-9]+} $LocUcscRs]} { #Espionne "cas1" incr cas1 set LocUcsc "no value" InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" } elseif {[regexp {[0-9]+} $LocUcscGbRs] && [regexp {[0-9]+} $LocUcscRs]} { #Espionne "cas2" incr cas2 set dsles2 1 if {$LocUcscGbRs == $LocUcscRs} { #Espionne "cas3" incr cas3 set LocUcsc $LocUcscGbRs InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" } else { if {[regexp "/" $LocUcscGbRs]} { #Espionne "cas4" incr cas4 set LesLocs [split $LocUcscGbRs {/}] foreach Loc $LesLocs { if {$Loc==$LocUcscRs} { set LocUcsc $LocUcscRs break } } #Espionne "$LocUcsc" InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" if {$LocUcsc==""} {Espionne "attention cas pas traite" } continue } if {[regexp "/" $LocUcscRs]} { #Espionne "cas5" incr cas5 set LesLocs [split $LocUcscRs {/}] foreach Loc $LesLocs { if {$Loc==$LocUcscGbRs} { set LocUcsc $LocUcscGbRs break } } #Espionne "$LocUcsc" InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" if {$LocUcsc==""} {Espionne "attention cas pas traite" } continue } #Espionne "cas6" incr cas6 set LesMotsGbRs [split $LocUcscGbRs {:- }] set startGbRs [lindex $LesMotsGbRs 1] set stopGbRs [lindex $LesMotsGbRs 2] set longGbRs [expr $stopGbRs-$startGbRs] set LesMotsRs [split $LocUcscRs {:- }] set startRs [lindex $LesMotsRs 1] set stopRs [lindex $LesMotsRs 2] set longRs [expr $stopRs-$startRs] if {$longGbRs < $longRs} { #Espionne "cas7" incr cas7 set LocUcsc $LocUcscRs*litige* InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" } else { #Espionne "cas8" incr cas8 set LocUcsc $LocUcscGbRs*litige* InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" } } } elseif {!$dsles2 && [regexp {[0-9]+} $LocUcscGbRs]} { #Espionne "cas9" incr cas9 set LocUcsc $LocUcscGbRs InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" } elseif {!$dsles2 && [regexp {[0-9]+} $LocUcscRs]} { #Espionne "cas10" incr cas10 set LocUcsc $LocUcscRs InformeSansDemander $Nom "LocUcscFrom200602: $LocUcsc" } #Espionne "$LocUcsc" } #Espionne "$total" #Espionne "cas1 $cas1";Espionne "cas2 $cas2";Espionne "cas3 $cas3";Espionne "cas4 $cas4";Espionne "cas5 $cas5";Espionne "cas6 $cas6";Espionne "cas7 $cas7";Espionne "cas8 $cas8";Espionne "cas9 $cas9";Espionne "cas10 $cas10" } proc InformeLocUcscRefSeqEvi {{FromWhere ""} {Liste ""}} { set cas1 0; set cas2 0; set cas3 0; set cas4 0; set cas5 0; set cas6 0; set cas7 0; set cas8 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { #Espionne "" set Ligne ""; set Lignes {} set Access [AccessEvi $Nom] #Espionne "$Nom $Access" if {$Access==""} { #Espionne "cas1" incr cas1 #Espionne "$Nom LocUcscRs$FromWhere: no value" InformeSansDemander $Nom "LocUcscRs$FromWhere: no value" continue } set Lignes [LocUcscRefSeqEvi $Access $FromWhere AllLoc] set Lignes [ListeSansDoublon $Lignes] #EspionneL $Lignes if { $Lignes== ":- ()" } { #Espionne "cas2" incr cas2 #Espionne "$Nom LocUcscRs$FromWhere : no value" InformeSansDemander $Nom "LocUcscRs$FromWhere: no value" continue } set long [llength $Lignes] if {$long == 0} { #Espionne "cas3" incr cas3 #Espionne "erreur" } if {$long == 1} { #Espionne "cas4" incr cas4 set Ligne [lindex $Lignes 0] set Ligne [join [LesMotsDeLaLigne $Ligne] " "] #Espionne "$Nom LocUcscRs$FromWhere : $Ligne" InformeSansDemander $Nom "LocUcscRs$FromWhere: $Ligne" } if {$long == 2} { #Espionne "cas5" incr cas5 set Ligne [join $Lignes "/"] #Espionne "$Ligne" set 1rLocal [lindex $Lignes 0] set 2mLocal [lindex $Lignes 1] set LesMots1 [split $1rLocal ":"] set LesMots2 [split $2mLocal ":"] set chrom1 [lindex $LesMots1 0] set chrom2 [lindex $LesMots2 0] if {[regexp {random} $chrom1]} { set LesMots4 [split $chrom1 "_"] set ssrandom [lindex $LesMots4 0] if {$ssrandom == $chrom2} { #Espionne "A 2mLocal= $2mLocal" #Espionne "$Nom LocUcscRs$FromWhere : $2mLocal" InformeSansDemander $Nom "LocUcscRs$FromWhere: $2mLocal" continue } } if {[regexp {random} $chrom2]} { set LesMots5 [split $chrom2 "_"] set ssrandom2 [lindex $LesMots5 0] if {$ssrandom2 == $chrom1} { #Espionne "A 1rLocal= $1rLocal" #Espionne "$Nom LocUcscRs$FromWhere : $1rLocal" InformeSansDemander $Nom "LocUcscRs$FromWhere: $1rLocal" continue } } if {$chrom1==$chrom2} { #Espionne "cas6" incr cas6 #Espionne "$Nom LocUcscRs$FromWhere : $Ligne" InformeSansDemander $Nom "LocUcscRs$FromWhere: $Ligne" continue } if {$chrom1!=$chrom2} { #Espionne "cas7" incr cas7 set Commande "getz \"\\\[refseq-acc:$Access\\\] > \\\[refseq_features-ftk:source\\\]\" \-t | grep chromosome" set GetzOut [eval exec $Commande] set LesMots3 [split $GetzOut {\"}] set Numero [lindex $LesMots3 1] #Espionne "NCBI= chr$Numero" regsub "chr" $chrom1 "" chrom1 regsub "chr" $chrom2 "" chrom2 if {$Numero==$chrom1} { #Espionne "B 1rLocal= $1rLocal" #Espionne "$Nom LocUcscRs$FromWhere : $1rLocal" InformeSansDemander $Nom "LocUcscRs$FromWhere: $1rLocal" } if {$Numero==$chrom2} { #Espionne "B 2mLocal= $2mLocal" #Espionne "$Nom LocUcscRs$FromWhere : $2mLocal" InformeSansDemander $Nom "LocUcscRs$FromWhere: $2mLocal" } } } if {$long > 2} { #Espionne "cas8" incr cas8 #Espionne "$Nom $Access plus de 2" #EspionneL $Lignes InformeSansDemander $Nom "LocUcscRs$FromWhere: $Ligne" } } #Espionne "" #Espionne "cas1 $cas1";Espionne "cas2 $cas2";Espionne "cas3 $cas3";Espionne "cas4 $cas4";Espionne "cas5 $cas5";Espionne "cas6 $cas6";Espionne "cas7 $cas7";Espionne "cas8 $cas8" } proc InformeLocandCytoband {} { #InformeSansDemander PR001 "LocUcsc: chr22:41892572-41913051 (-)" #InformeSansDemander PR002 "LocUcsc: chr13:43905660-44048701 (-)" #InformeSansDemander PR003 "LocUcsc: chr8:59150669-59223896 (+)" #InformeSansDemander PR001 "CytoBand: 22q13" #InformeSansDemander PR002 "CytoBand: 13q14" #InformeSansDemander PR003 "CytoBand: 8q12" InformeSansDemander PR001 "Interaction: LRCH4" InformeSansDemander PR002 "Interaction: beta-estradiol,CLEC11A,CTNNB1,CYP1A1,ERBB2,PAX3,TSC22D4" InformeSansDemander PR003 "Interaction: TRIM24" } proc InformeMGI {{Liste ""}} { #attention pour les nd de mito ca marche pas if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set LesMGI {}; set LesLignesResultat {} set Acc [AccessEvi $Nom] if { [regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc]} { set CommandeRs "getz \"\\\[refseq-acc:$Acc\\\]\" \-f Gene | grep /db_xref=\"MGI" if {[catch {set GetzOutRs [eval exec $CommandeRs]}]} {set GetzOutRs ""} if {$GetzOutRs==""} { InformeSansDemander $Nom "MGI: no value" continue } #Espionne $GetzOutRs set LesLignesResultat [split $GetzOutRs "\n"] foreach LigneResultat $LesLignesResultat { lappend LesMGI [StringApres ":" dans $LigneResultat] } } else { set CommandeGb "getz \"\\\[genbankfull-acc:$Acc\\\]\" \-f Gene | grep /db_xref=\"MGI" if {[catch {set GetzOutGb [eval exec $CommandeGb]}]} { set GetzOutGb "" } if {$GetzOutGb==""} { InformeSansDemander $Nom "MGI: no value" continue } set LesLignesResultat [split $GetzOutGb "\n"] foreach LigneResultat $LesLignesResultat { lappend LesMGI [StringApres ":" dans $LigneResultat] } } set LesMGI [ListeSansDoublon $LesMGI] #EspionneL "$LesMGI" if {[llength $LesMGI]>1} {Espionne "$Nom attention pls MGI"} set MGI [lindex $LesMGI 0] regsub -all "\"" $MGI "" MGI InformeSansDemander $Nom "MGI: $MGI" #Espionne "$Nom $Acc $MGI" } } proc InformeMGU4302 {} { foreach Ligne [LesLignesDuFichier [RepertoireDuGenome]/MGU4302.fof] Nom [ListeDesPABs] { scan $Ligne "%s %s" PS F set Queue [file tail $F] regsub "_$PS$" $Queue "" Acc InformeSansDemander $Nom "Alias: $PS" InformeSansDemander $Nom "Probeset: $PS" InformeSansDemander $Nom "Acc: $Acc" } } proc InformeMSP {} { CanalSql [ConnInfoForDatabase MiSynPat] set LaSortie {} foreach Nom [ListeDesPABs] { set Entete [EnteteDuFichierTFA [GscopeFile $Nom prottfa]] scan $Entete "%s %s %s %s %s %s" N Systeme A D1 D2 Access InformeSansDemander $Nom "=System: $Systeme" InformeSansDemander $Nom "=A: $A" InformeSansDemander $Nom "=AAA: [string totitle [UT $A]]" InformeSansDemander $Nom "=Definition: $D1 $D2" InformeSansDemander $Nom "=Access: $Access" set LesLignesEMBL [LaSequenceDesBanques $Access] if {$LesLignesEMBL!={}} { DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX SequenceNarcisse InformeSansDemander $Nom "=Narcisse_ID: $ID" InformeSansDemander $Nom "=Narcisse_AC: $AC" InformeSansDemander $Nom "=Narcisse_DE: $DE" InformeSansDemander $Nom "=Narcisse_GN: $GN" set EnteteNarcisse ">$Nom $Access $A $D1 $D2 $Systeme" lappend LaSortie [Sauve [SequenceFormatTFA $SequenceNarcisse $EnteteNarcisse protbrut] dans [GscopeFile $Nom prottfa_access]] } } return $LaSortie } proc InformeOrganisme {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set total 0; set lessans 0; set lesavec 0; set passeq 0; set erreur 0 set lessouris 0; set leshommes 0; set lessaispas 0 foreach Nom $Liste { #Espionne "" incr total set GetzOutRs ""; set GetzOutGb ""; set orga "" set Acc [AccessEvi $Nom] #Espionne "$Nom" if {$Acc==""} { # Espionne "passeq" incr passeq continue } #Espionne "$Acc" if {[regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc]} { set CommandeRs "getz \"\\\[refseq-acc:$Acc\\\]\" \-vf org" if {[catch {set GetzOutRs [eval exec $CommandeRs]}]} {set GetzOutRs ""} if {$GetzOutRs!=""} { set orga [StringSuivant "\t" dans $GetzOutRs] #Espionne "$GetzOutRs" #Espionne "$orga" #Espionne "oui" incr lesavec if {[regexp {^Mus} $orga]} { incr lessouris #Espionne "souris" } elseif {[regexp {^Homo sapiens} $orga]} { incr leshommes #Espionne "homme" } else {incr lessaispas #Espionne "saispas" } InformeSansDemander $Nom "Organism: $orga" } if {$GetzOutRs==""} { #Espionne "pas" incr lessans InformeSansDemander $Nom "Organism: no value" } } else { set CommandeGb "getz \"\\\[genbankfull-acc:$Acc\\\]\" \-vf org" if {[catch {set GetzOutGb [eval exec $CommandeGb]}]} { set GetzOutGb "" } if {$GetzOutGb!=""} { set orga [StringSuivant "\t" dans $GetzOutGb] #Espionne "$GetzOutGb" #Espionne "$orga" #Espionne "oui" incr lesavec if {[regexp {^Mus} $orga]} { incr lessouris #Espionne "souris" } elseif {[regexp {^Homo sapiens} $orga]} { incr leshommes #Espionne "homme" } else { incr lessaispas #Espionne "saispas" } InformeSansDemander $Nom "Organism: $orga" } if {$GetzOutGb==""} { #Espionne "pas" incr lessans InformeSansDemander $Nom "Organism: no value" } } } #Espionne "total $total" #Espionne "passeq $passeq" #Espionne "lessans $lessans" #Espionne "erreur $erreur" #Espionne "lesavec $lesavec" #Espionne "lessouris $lessouris" #Espionne "leshommes $leshommes" #Espionne "lessaispas $lessaispas" } proc InformeOrganismePourBSD {{Source ""}} { if {$Source == ""} { set Source"organismesdespabs" } if {[regexp -nocase "descriptif" $Source]} { set Source "descriptif" } if {$Source == "organismesdespabs"} { set FichierOrganisme "[RepertoireDuGenome]/fiches/organismesdespabs" while {[FileAbsent $FichierOrganisme]} { if {[OuiOuNon "$FichierOrganisme n'existe pas\nDois-je stopper ?"]} { exit } set FichierOrganisme [Entre $FichierOrganisme] } foreach Ligne [LesLignesDuFichier $FichierOrganisme] { Espionne $Ligne scan $Ligne "%s" Nom regsub "$Nom " $Ligne "" Orga InformeSansDemander $Nom "OS: $Orga" } return } if {$Source == "descriptif"} { foreach Nom [ListeDesPABs] { set FichierDescriptif [GscopeFile $Nom "descriptifs"] if {[FileAbsent $FichierDescriptif]} { set OS "Unknown unknown" } else { set Meilleur [PremiereLigneDuFichier $FichierDescriptif] set OS [ChampDuDescriptif $Meilleur "OS"] } InformeSansDemander $Nom "OS: $OS" } return } } 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 InformeParChangementEnteteDuChamp {Ancien Nouveau} { foreach Nom [ListeDesPABs] { set Valeur [ExtraitInfo $Nom $Ancien] if {$Valeur==""} { continue } Espionne "$Nom $Nouveau: $Valeur" InformeParSuppressionDuChamp $Nom $Ancien InformeSansDemander $Nom "$Nouveau: $Valeur" } } proc InformeParClonage {Nom {GenomeOrigine ""} {Champ ""}} { global RepertoireDuGenome global GenomeACloner PrefixeDuGenomeACloner if {$GenomeOrigine!=""} { set GenomeACloner $GenomeOrigine if { ! [file exists $GenomeACloner]} { set GenomeACloner "$RepertoireDuGenome/../[file tail $GenomeACloner]" set PrefixeDuGenomeACloner [PrefixeDuGenome $GenomeACloner] } if { ! [file exists $GenomeACloner]} { if { [OuiOuNon "$GenomeOrigine\n and \n$GenomeACloner\n don't exist.\n Do I cancel ?"]} { return "Cancel" } unset GenomeACloner } } while { ! [info exists GenomeACloner]} { FaireLire "Please select the genome from which the info have to be taken." set GenomeACloner [tk_chooseDirectory -mustexist 1 -initialdir "$RepertoireDuGenome/.."] if {$GenomeACloner==""} { if {[OuiOuNon "Do I cancel ?"]} { return "Cancel" } continue } set PrefixeDuGenomeACloner [PrefixeDuGenome $GenomeACloner] break } if {[file tail $GenomeACloner]==[file tail $RepertoireDuGenome]} { FaireLire "You want to clone myself ... I cancel." return "Cancel" } regsub "^[PreFixe]" $Nom $PrefixeDuGenomeACloner PAB set FichierInfo "$GenomeACloner/infos/$PAB" if { ! [file exists $FichierInfo]} { return "" } set OnAttendLeBon 1 set LesTextes {} foreach Ligne [LesLignesDuFichier $FichierInfo] { if {$OnAttendLeBon && $Ligne=="Nom: $PAB"} { set OnAttendLeBon 0 continue } if {$OnAttendLeBon} { if {[OuiOuNon "$PAB is wrong, Do You want to see the info file ?"]} { AfficheFichier $FichierInfo "SansFetch" } if {[OuiOuNon "$PAB is wrong, Do I cancel ?"]} { return "Cancel"} if {[OuiOuNon "$PAB is wrong, Do I skipp it ?"]} { return ""} if { ! [OuiOuNon "$PAB is wrong, Do I accept it ?"]} { exit } set OnAttendLeBon 0 } if {$PrefixeDuGenomeACloner!=[PreFixe]} { while {[regexp "$PrefixeDuGenomeACloner\[0-9\]+" $Ligne Match]} { regsub $PrefixeDuGenomeACloner $Match [PreFixe] NouveauMatch regsub -all $Match $Ligne $NouveauMatch Ligne } } if {$Champ!="" && ! [regexp "^$Champ: " $Ligne]} { continue } lappend LesTextes $Ligne } if {$LesTextes=={}} { return "" } set Textes [join $LesTextes "\n"] Espionne "Clonage de $PAB vers $Nom $Textes" return [InformeSansDemander $Nom $Textes] } proc InformeParClonagePourTous {{GenomeOrigine ""} {Champ ""}} { foreach Nom [ListeDesPABs] { if {[InformeParClonage $Nom $GenomeOrigine $Champ]=="Cancel"} { return "Cancel" } } } proc InformeParMiseAJourPourTous {{Commande ""} {Champ ""} {Test 0} {Ask 0}} { global RepertoireDuGenome global InformeSansDemander Wup "Evals Commande and appends it to info, field Champ if not empty." Wup "If Test is 1 nothing happends" set Test [expr $Test != 0] set Ask [expr $Ask != 0] if {$Commande==""} { set Commande [Entre "\[PutHereTheCommand \$Nom\]"] if {$Commande==""} { return "" } } if { ! [info exists InformeSansDemander]} { set InformeSansDemander 0 } set MemoInformeSansDemander $InformeSansDemander set InformeSansDemander [expr ! $Ask] set n 0 foreach Boite [ListeDeBoites] { set Nom [Box $Boite nom] eval set Valeur $Commande if {$Valeur==""} { continue } incr n if {$Champ!=""} { set Append "$Champ: $Valeur" } else { set Append $Valeur } if {$Test} { Espionne "$Nom ... $Append" } else { Informe $Nom $Append } } set InformeSansDemander $MemoInformeSansDemander return "$n infos/ files were updated" } proc InformeParNarcisse {Nom} { set Nar [Narcisse $Nom] if {$Nar==""} { Espionne "$Nom ++++" ;return "" } set Ref [RefOfAC $Nar] if {$Ref==""} { Espionne "$Nom ----" ;return "" } Espionne "$Nom $Nar" foreach Champ [LesChampsInteressantsDeNarcisse] { set Texte "${Champ}_Narcisse: [FromRef $Ref $Champ]" lappend LesTextes $Texte } set Textes [join $LesTextes "\n"] return [InformeSansDemander $Nom $Textes] } proc InformeParNarcissePourTous {} { foreach Nom [ListeDesPABs] { InformeParNarcisse $Nom } } proc InformeParProtemblPourTous {{DoIt ""}} { if {$DoIt==""} { if {[OuiOuNon "Do I really do the updates"]} { set DoIt "DoIt" } } set DoIt [string equal -nocase $DoIt "DoIt"] foreach Nom [ListeDesPABs] { set FicEmbl [GscopeFile $Nom protembl] set LesLignesEMBL [LesLignesDuFichier $FicEmbl] DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX set LesK [list ID AC DE GN OS OC OX] foreach K $LesK { set V [set $K] if {$V==""} { continue } set ClefInfo $K if {$K=="ID"} { if {$ID==$Nom} { #rR pour CilioCarta on va chercher l'ID dans le prottfa set FicTfa [GscopeFile $Nom prottfa] set Header [PremiereLigneDuFichier $FicTfa] scan $Header "%s %s" N I set A "" ; set B ""; set C "" lassign [split $I "|"] A B C if {$C!=""} { set ID $C } elseif {$B!=""} { set ID $B } else { set ID $A } } set V $ID set ClefInfo "Id" } if {$K=="AC"} { set ClefInfo "Ac" } if {$K=="DE"} { set ClefInfo "ValiDE" } if {$K=="GN"} { set ClefInfo "ValiGN" } if {$DoIt} { InformeSansDemander $Nom "=$ClefInfo: $V" } else { Espionne "InformeSansDemander $Nom =$ClefInfo: $V" } lappend LesInfos "$Nom =$ClefInfo: $V" } } return $LesInfos } 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 InformeParSuppressionDuChamp {Nom Champ {PourVoir ""}} { global RepertoireDuGenome if {$PourVoir==""} { set PourVoir 0 } else { set PourVoir 1 } Wup "Deletes all fields begining with 'Champ' in the infos files (Champ can be with or without ':' )" Wup "Attention use 'ABC:' to remove the Champ ABC (and not ABCD ...)" if {[regexp {\:} $Champ]} { regsub {\:} $Champ {\:} Champ } set FichierInfo "$RepertoireDuGenome/infos/$Nom" if { ! [file exists $FichierInfo]} { return "" } set NouvellesLignes {} set YaSuppression 0 foreach Ligne [LesLignesDuFichier $FichierInfo] { if {[regexp "^$Champ" $Ligne]} { set YaSuppression 1 continue } lappend NouvellesLignes $Ligne } if { ! $PourVoir && $YaSuppression} { SauveLesLignes $NouvellesLignes dans $FichierInfo } return [join $NouvellesLignes "\n"] } proc InformeParSuppressionDuChampPourTous {Champ} { foreach Boite [ListeDeBoites] { set Nom [Box $Boite nom] InformeParSuppressionDuChamp $Nom $Champ } return } proc InformePourTous {{Clef ""} {Commande ""}} { foreach Nom [ListeDesPABs] { set Valeur "" if {$Commande!=""} { set Valeur [eval $Commande $Nom] } #rR if {$Valeur==""} { continue } Espionne "$Nom $Clef: $Valeur" if {$Clef!=""} { InformeSansDemander $Nom "$Clef: $Valeur" } else { InformeSansDemander $Nom "" } } } proc InformePourUnNuc {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { #prevoir message quand erreur InformeRetinalTargetsAcTfa $Nom InformeRetinalTargetsSuite $Nom #ProtParGeneNamePourTous cree TabCorres ProtParGeneNamePourTous $Nom DeProtEmblVersProtTfaEvi $Nom RangeProt $Nom InformeOrganisme $Nom InformeAccessProt $Nom InformeGnEtDesProt $Nom InformeDesUcsc $Nom #InformeProbeSetID cree fichier affyanno InformeProbeSetID $Nom InformeLocUcscEvi From200602 $Nom InformeLocUcscRefSeqEvi From200602 $Nom InformeLocUcscPourTous $Nom InformeCytoBand $Nom InformeHomologeneId $Nom InformeMGI $Nom InformeSynonyms $Nom } } proc InformePourUneProt {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { InformeAccessProt $Nom DeProtVersNuc $Nom InformeRetinalTargetsAcTfa $Nom InformeRetinalTargetsSuite $Nom InformeOrganisme $Nom InformeGnEtDesProt $Nom InformeDesUcsc $Nom #InformeProbeSetID cree fichier affyanno InformeProbeSetID $Nom InformeLocUcscEvi From200602 $Nom InformeLocUcscRefSeqEvi From200602 $Nom InformeLocUcscPourTous $Nom InformeCytoBand $Nom InformeHomologeneId $Nom InformeMGI $Nom InformeSynonyms $Nom } } proc InformeProbeSetID {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set AccessmRNA [AccessEvi $Nom] set LesProbeSetId {} #verif que cest la derniere version foreach ProbeSetId [lsort -unique [AffyAnno $AccessmRNA "Probe_Set_ID"]] { lappend LesProbeSetId $ProbeSetId } if {$LesProbeSetId=={}} { InformeSansDemander $Nom "ProbeSetId: no value" } else { set PSI [join $LesProbeSetId ","] InformeSansDemander $Nom "ProbeSetId: $PSI" } } } proc InformeRDH12 {} { set Nom [NomDuAlias "RDH12"] foreach BP [RDH12 ListOf Mutations] { InformeSansDemander $Nom "GAL: $BP" } } proc InformeRefPfam {} { foreach Box [ListeDesPABs] { set RefPfam [InterrogeRefPfam $Box RefPfam] InformeSansDemander $Box "RefPfam: $RefPfam" } } proc InformeReferencePourBSD {} { foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] set GI [References [string toupper $Alias]] InformeSansDemander $Nom "OldGI: $GI" } } proc InformeRetinalTargets {} { foreach Nom [ListeDesPABs] { set Entete [EnteteDuFichierTFA "[RepertoireDuGenome]/nuctfa/$Nom"] if {[regexp "bidon" $Entete]} { set Raison [StringSuivant "bidon" dans $Entete] InformeSansDemander $Nom "SeqWarning: No sequence available $Raison" continue } set iP [string last "(" $Entete] set GN "" if {$iP>0} { set iF [string last ")" $Entete] set GN [string range $Entete [incr iP] [incr iF -1]] if {[regexp " " $GN]} { set GN "" } if {[regexp -nocase "Fragment" $GN]} { set GN "" } } if {$GN!=""} { InformeSansDemander $Nom "ValiGN: $GN" } scan $Entete "%s %s %s %s" N BId Genre Espece if {$Genre=="M."} { set Genre "Mus" } InformeSansDemander $Nom "Organism: $Genre $Espece" InformeSansDemander $Nom "BId: $BId" set DE [StringSuivant " " dans $Entete] if {$DE!=""} { InformeSansDemander $Nom "DE: $DE" } } exit } proc InformeRetinalTargetsAcTfa {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { #Espionne $Nom set Entete [EnteteDuFichierTFA "[RepertoireDuGenome]/nuctfa/$Nom"] #Espionne "1 $Entete" if {[regexp "bidon" $Entete]} { set Raison [StringSuivant "bidon" dans $Entete] InformeSansDemander $Nom "SeqWarning: No sequence available $Raison" continue } scan $Entete "%s %s %s %s" N BAcc Genre Espece if {$Genre=="M."} { set Genre "Mus" } #InformeSansDemander $Nom "Organism: $Genre $Espece" #cest mieux de faire comme apres InformeSansDemander $Nom "BAcc: $BAcc" set index [string first ":" $Entete] set i [string first " " $Entete $index] #Espionne "2 $Entete" set DE [string range $Entete [expr $i + 1] end] #Espionne "3 $DE" if {$DE!=""} { InformeSansDemander $Nom "ValiDE: $DE" } } } proc InformeRetinalTargetsSuite {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set GetzOutRs ""; set GetzOutGb ""; set LeGeneName "" set Acc [AccessEvi $Nom] #Espionne "$Nom $Acc" if { [regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc]} { set CommandeRs "getz \"\\\[refseq-acc:$Acc\\\]\" \-f Gene | grep /gene" if {[catch {set GetzOutRs [eval exec $CommandeRs]}]} {set GetzOutRs ""} if {$GetzOutRs!=""} { set LeGeneName [string range $GetzOutRs [expr [string first = $GetzOutRs] + 2] [expr [string first \" $GetzOutRs [expr [string first = $GetzOutRs] + 2]] - 1]] #Espionne "$GetzOutRs" #Espionne "$Acc $LeGeneName" if {$LeGeneName!=""} { InformeSansDemander $Nom "ValiGN: $LeGeneName" } } } else { set CommandeGb "getz \"\\\[genbankfull-acc:$Acc\\\]\" \-f Gene | grep /gene=" if {[catch {set GetzOutGb [eval exec $CommandeGb]}]} { set GetzOutGb "" } if {$GetzOutGb!=""} { set LeGeneName [string range $GetzOutGb [expr [string first = $GetzOutGb] + 2] [expr [string first \" $GetzOutGb [expr [string first = $GetzOutGb] + 2]] - 1]] #Espionne "$GetzOutGb" #Espionne "$Acc $LeGeneName" if {$LeGeneName!=""} { InformeSansDemander $Nom "ValiGN: $LeGeneName" } } } } } proc InformeSansDemander {Nom {Append ""}} { global InformeSansDemander if { ! [info exists InformeSansDemander]} { set InformeSansDemander 0 } set SauveInformeSansDemander $InformeSansDemander set InformeSansDemander 1 set Retour [Informe $Nom $Append] set InformeSansDemander $SauveInformeSansDemander return $Retour } proc InformeSansDemanderParWscope {Nom Page} { InformeSansDemander $Nom $Page return [Informe $Nom] } proc InformeSeqCheck {Selection Page} { Wup "First we take from Selectio then from Page" set Tout "$Selection\n$Page" set PGS "" set FichierBlast "BlastfileNotFound" set CodeSeqFile "CodeSequenceFileNotFound" set P "NoOligoFound" foreach Ligne [split $Tout "\n"] { if {$FichierBlast=="BlastfileNotFound" && [regexp ".blast$" $Ligne]} { set FichierBlast $Ligne set CodeSeqFile [file tail $FichierBlast] regsub {\.blast$} $CodeSeqFile "" CodeSeqFile } if {[regexp "^ PGS " $Ligne] && $PGS==""} { scan $Ligne "%s %s" Bidon PGS } if {[regexp "^ Oli " $Ligne] && $P=="NoOligoFound"} { scan $Ligne "%s %s" Bidon P } if {$FichierBlast!="BlastfileNotFound" && $CodeSeqFile!="CodeSequenceFileNotFound" && $P!="NoOligoFound"} { break } } global TextePourInformeVerificationSequencage if {[info exists TextePourInformeVerificationSequencage]} { set Bornes $TextePourInformeVerificationSequencage } else { set Bornes "" } set SeqCheck "SeqCheck: $CodeSeqFile $P $Bornes" if {$PGS==""} { return "" } if { ! [OuiOuNon "Ok to inform '$PGS' with \n$SeqCheck"]} { return "" } return [Informe $PGS $SeqCheck] } proc InformeSpineDefPourTous {} { foreach Nom [ListeDesPABs] { set DE [SpineDefinition $Nom] if {$DE==""} { continue } Espionne "$Nom $DE" InformeSansDemander $Nom "SpineDef: $DE" } } 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 InformeSpliRet {Org} { if {[regexp -nocase "Mouse" $Org]} { set LesRepertoires [LesRepertoires "Mouse" "Mod"] set Org "Mus_musculus" } if {[regexp -nocase "Rat" $Org]} { set LesRepertoires [LesRepertoires "Rat" "Mod"] set Org "Rattus_norvegicus" } set nbfic 0 foreach Repertoire $LesRepertoires { if {[regexp "others" $Repertoire]} {set Tag "other"} if {[regexp "Tfactor" $Repertoire]} {set Tag "TF"} if {[regexp "NO_ALT" $Repertoire]} {set Tag "noalt"} foreach FileInitial [glob -nocomplain "$Repertoire/*"] { set Cluster [file tail $FileInitial] regsub {\.[^\.]+$} $Cluster "" Cluster set Box [InterrogeBox $Cluster Box] set Ref [InterrogeBox $Box Ref] if {[regexp "^ENS" $Ref]} { set Gn [GnDesFromEnsembl $Ref transcript $Org Gn] set Des [GnDesFromEnsembl $Ref transcript $Org Des] } if {[regexp "^NM" $Ref] || [regexp "^XM" $Ref]} { set Names {} set CommandeDes "getz \"\\\[refseq-acc:$Ref\\\]\" \-vf des" set GetzOutDes [eval exec $CommandeDes] set Des [lindex [split $GetzOutDes "\t"] 1] set CommandeGn "getz \"\\\[refseq-acc:$Ref\\\]\" \-vf Gene" set GetzOutGn [eval exec $CommandeGn] set LesLignes [split $GetzOutGn "\n"] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Nb [llength $LesMots] lappend Names [lindex $LesMots [expr $Nb-1]] } set Names [lsort -unique $Names] if {[llength $Names] > 1 } { Espionne "attention" } set Gn [lindex $Names 0] } InformeSansDemander $Box "Cluster: $Cluster" InformeSansDemander $Box "Ref: $Ref" InformeSansDemander $Box "ValiGN: $Gn" InformeSansDemander $Box "ValiDE: $Des" InformeSansDemander $Box "Tag: $Tag" InformeSansDemander $Box "Organism: $Org" } } } proc InformeStaf {} { set L 1 foreach I [Staf ListOf Index] { incr L set Nm [string trim [Staf $I "h_Id_number"]] set Gene [string trim [Staf $I "gene"]] if {$Gene==""} { set Gene "Unknown$I" } set Name [string trim [Staf $I "name"]] set HPos [string trim [Staf $I "h_pos."]] set Seq [string trim [Staf $I "human_sequence"]] regsub -all -nocase {[^A-Z]} $Seq "" Seq set Nm2 [string trim [Staf $I "h_Id_number2"]] set Loc [string trim [Staf $I "chromosome_and_localization"]] set Orient [string trim [Staf $I "ori."]] if {$Orient=="+"} { set Orient "F" } else { set Orient "R" } set Ali [string trim [ Staf $I "alignment_human_vs_mouse"]] set CpG [string trim [ Staf $I "CpG"]] if {$CpG=="+"} { set CpG "Y" } if {$CpG=="-"} { set CpG "N" } if {$CpG=="nd"} { set CpG "U" } Espionne "$I $Nm $Gene $Name $Loc $HPos $Orient $Seq" set Alias $Gene if {[info exists DejaVu($Alias)]} { incr DejaVu($Alias) set Alias "$Gene-$DejaVu($Alias)" } else { set DejaVu($Alias) 1 } set Nom [format "[PreFixe]%4.4d" $L] set GN [ValiGN $Nom] if {[string first $Gene $GN]!=0} { FaireLire "Probleme avec $I $Gene $GN" } InformeSansDemander $Nom "ExcelLine: $L" InformeSansDemander $Nom "ExcelNm: $Nm" InformeSansDemander $Nom "ExcelDE: $Name" InformeSansDemander $Nom "ExcelHPos: $HPos" InformeSansDemander $Nom "ExcelLoc200405: $Loc" InformeSansDemander $Nom "ExcelOrient: $Orient" InformeSansDemander $Nom "ExcelAli: $Ali" InformeSansDemander $Nom "ExcelCpG: $CpG" } } proc InformeStatus {} { set tout 0; set comp 0; set optio 0; set pasassign 0 foreach Nom [ListeDesPABs] { set LesProclameurs {} incr tout Espionne "$Nom" set jaitrouve 0 regsub "EVI" $Nom "" NomSsEvi set ligne [string range $NomSsEvi 0 end-1] if {[string index $ligne 0] == 0} { set ligne [string range $ligne 1 end] if {[string index $ligne 0] == 0} { set ligne [string range $ligne 1 end] if {[string index $ligne 0] == 0} { set ligne [string range $ligne 1 end] } } } #Espionne "$ligne" set LesTetes [RetChip5 ListOf Header] set lignecomplete [RetChip5 $ligne WholeLine] set LesMots [split $lignecomplete ";"] for {set i 10} {$i<=33} {incr i} { set info "" set info [lindex $LesMots $i] if {[regexp "x" $info]} {lappend LesProclameurs [lindex $LesTetes $i]} } EspionneL $LesProclameurs if {$LesProclameurs=={}} { incr pasassign Espionne "attention pas assignation" } set Qui [join $LesProclameurs ","] if {[regexp "x" [RetChip5 $ligne "retinal_fate"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "important" [RetChip5 $ligne "remark_S.T."]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Grimm"]] && [regexp -nocase "HIF" [RetChip5 $ligne "description_memorec"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Grimm"]] && [regexp -nocase "SOCS" [RetChip5 $ligne "description_memorec"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Grimm"]] && [regexp -nocase "C1q" [RetChip5 $ligne "description_memorec"]]} { incr comp Espionne "$Nom -" set jaitrouve 1 InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Grimm"]] && [regexp -nocase "CFH" [RetChip5 $ligne "description_memorec"]]} { incr comp Espionne "$Nom -" set jaitrouve 1 InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Grimm"]] && [regexp -nocase "PEDF" [RetChip5 $ligne "description_memorec"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "marigo"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Schraermeyer"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Schraermeyer2"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "van_Heyningen"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Thierry"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Guilloneau"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Goureau"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Wissinger"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $ligne "Banfi"]]} { incr comp set jaitrouve 1 Espionne "$Nom -" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {$jaitrouve==0} { incr optio Espionne "$Nom +" InformeSansDemander $Nom "Status: optional($Qui)" } } Espionne "tout= $tout" Espionne "comp= $comp" Espionne "optio= $optio" Espionne "pasassign= $pasassign" } proc InformeStatus2 {} { set tout 0; set comp 0; set optio 0; set pasassign 0 set LesLignesExl [NomLigne ListeDes Lignes] foreach LigneExl $LesLignesExl { set TousLesNoms [NomLigne $LigneExl Noms] set ListeDesNoms [split $TousLesNoms " "] set NbDeNomPrUneLigne [llength $ListeDesNoms] if {[llength $ListeDesNoms]==1} { set BonneListeDesNoms $ListeDesNoms } if {[llength $ListeDesNoms]>1} { set BonneListeDesNoms [split [RangeMoi get EviOf $LigneExl] " "] } #Espionne "" #Espionne "$LigneExl" #Espionne "$ListeDesNoms" #Espionne "$BonneListeDesNoms" foreach Nom $ListeDesNoms { Espionne $Nom set LesProclameurs {} incr tout set jaitrouve 0 # set StatusActuel [ExtraitInfo $Nom "Status"] # Espionne "$Nom StatusActuel: $StatusActuel" set LesTetes [RetChip5 ListOf Header] set lignecomplete [RetChip5 $LigneExl WholeLine] set LesMots [split $lignecomplete ";"] for {set i 10} {$i<=33} {incr i} { set info "" set info [lindex $LesMots $i] if {[regexp "x" $info]} {lappend LesProclameurs [lindex $LesTetes $i]} } #EspionneL $LesProclameurs if {$LesProclameurs=={}} { incr pasassign Espionne "attention pas assignation" } set Qui [join $LesProclameurs ","] if {[regexp "x" [RetChip5 $LigneExl "retinal_fate"]]} { incr comp set jaitrouve 1 # Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "important" [RetChip5 $LigneExl "remark_S.T."]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Grimm"]] && [regexp -nocase "HIF" [RetChip5 $LigneExl "description_memorec"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Grimm"]] && [regexp -nocase "SOCS" [RetChip5 $LigneExl "description_memorec"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Grimm"]] && [regexp -nocase "C1q" [RetChip5 $LigneExl "description_memorec"]]} { incr comp #Espionne "$Nom -" set status compulsory($Qui) set jaitrouve 1 Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Grimm"]] && [regexp -nocase "CFH" [RetChip5 $LigneExl "description_memorec"]]} { incr comp #Espionne "$Nom -" set jaitrouve 1 set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Grimm"]] && [regexp -nocase "PEDF" [RetChip5 $LigneExl "description_memorec"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" Espionne "$Nom Status: compulsory($Qui)" set status compulsory($Qui) InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "marigo"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Schraermeyer"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Schraermeyer2"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "van_Heyningen"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Thierry"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Guilloneau"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Goureau"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Wissinger"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {[regexp "x" [RetChip5 $LigneExl "Banfi"]]} { incr comp set jaitrouve 1 #Espionne "$Nom -" set status compulsory($Qui) Espionne "$Nom Status: compulsory($Qui)" InformeSansDemander $Nom "Status: compulsory($Qui)" continue } if {$jaitrouve==0} { incr optio #Espionne "$Nom +" set status optional($Qui) Espionne "$Nom Status: optional($Qui)" InformeSansDemander $Nom "Status: optional($Qui)" } #if {$status!=$StatusActuel} #Espionne "lesstatusdiffere" #set StatusActuelDebut [string range $StatusActuel 0 [expr [string first "\(" $StatusActuel] - 1]] #set statusdebut [string range $status 0 [expr [string first "\(" $status] - 1]] #if {$statusdebut!=$StatusActuelDebut} #Espionne "compul_opt" } } } proc InformeSynonyms {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set Acc [AccessEvi $Nom] if {$Acc==""} {continue} if { [regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc] } { set Commande "getz \"\\\[refseq-acc:$Acc\\\]\" \-e" set Texte [eval exec $Commande] set LesLignes [split $Texte "\n"] set AliasGnRna [RecupereAliasGn $LesLignes] InformeSansDemander $Nom "AliasGnRna: $AliasGnRna" } if { ![regexp {^NM_} $Acc] && ![regexp {^XM_} $Acc] && ![regexp {^NR_} $Acc]} { set Commande "getz \"\\\[genbankfull-acc:$Acc\\\]\" \-e" set Texte [eval exec $Commande] set LesLignes [split $Texte "\n"] set AliasGnRna [RecupereAliasGn $LesLignes] InformeSansDemander $Nom "AliasGnRna: $AliasGnRna" } set IdetAcc [ExtraitInfo $Nom "IdAccProt"] if {$IdetAcc==""} {continue} set ListeProt [split $IdetAcc " "] if {[llength $ListeProt]>1} {set AccProt [lindex $ListeProt 1]} if {[llength $ListeProt]==1} {set AccProt [lindex $ListeProt 0]} if { ![regexp {^NP_} $AccProt] && ![regexp {^XP_} $AccProt]} { set Commande "getz \"\\\[protein-acc:$AccProt\\\]\" \-e" set Texte [eval exec $Commande] set LesLignes [split $Texte "\n"] set AliasGnProt [RecupereGeneNameAliasProt $LesLignes] InformeSansDemander $Nom "AliasGnProt: $AliasGnProt" } } AppendAuFichier [Fiches]/Alias.log "AliasGnRna: $AliasGnRna AliasGnProt: $AliasGnProt" } proc InformeValiDEPourTous {} { if { ! [OuiOuNon "On suppose que les prottfa sont de la forme \n>Box Id Ac Genre Espece Definition\n(on enlevera OS= et GN=)"]} { return "" } set TestIt [OuiOuNon "Do I do a test only" 0] foreach Nom [ListeDesPABs] { set FicTfa [GscopeFile $Nom "prottfa"] set Entete [EnteteDuFichierTFA $FicTfa] set D "" if { ! [regexp {^>[^ ]+ [^ ]+ [^ ]+ [^ ]+ [^ ]+ (.+)} $Entete Match D]} { continue } if {$D==""} { continue } regsub { OS=.*} $D "" D regsub { GN=.*} $D "" D regsub -all ";" $D " " D set D [string trim $D " _,"] if {$D!="" && ! $TestIt} { InformeSansDemander $Nom "ValiDE: $D" } lappend LesDE "$Nom ValiDE=$D" } return $LesDE } proc InformeValiGNParAlias {} { foreach Nom [ListeDesPABs] { set ValiGN [ExtraitInfo $Nom "ValiGN"] if {$ValiGN!=""} { continue } set Alias [Alias $Nom] if {$Alias==""} { continue } InformeSansDemander $Nom "=ValiGN: $Alias" } } proc InformeValiGNPourTous {} { if { ! [OuiOuNon "On suppose que les prottfa contiennent GN=\nSinon on cherche dans les banques"]} { return "" } set TestIt [OuiOuNon "Do I do a test only" 0] foreach Nom [ListeDesPABs] { set FicTfa [GscopeFile $Nom "prottfa"] set Entete [EnteteDuFichierTFA $FicTfa] set Gn "" if {[regexp {GN=([^ ]+)} $Entete Match GnLu]} { set Gn $GnLu } else { set IdRef [ExtraitInfo $Nom "IdRef:"] set AcRef [ExtraitInfo $Nom "AcRef:"] set EMBL [SequenceDesBanques $IdRef $AcRef AccessOk "OnVeutEMBL"] if {[regexp {\nGN ([^\n]+)\n} $EMBL Match GnLu]} { set Gn $GnLu } } regsub "^Name=" $Gn "" Gn regsub {\;.*} $Gn "" Gn set Gn [string trim $Gn " ;.\n"] if {$Gn!="" && ! $TestIt} { InformeSansDemander $Nom "ValiGN: $Gn" } lappend LesGn "$Nom $Gn" } return $LesGn } proc InfosClonesPhrap {FichierSequence} { set fichierOut "$FichierSequence.phrap" array set tfa [readFasta $FichierSequence] set out [open $fichierOut "w"] foreach name $tfa(index) { Espionne $name if {![regexp {^(.*)(F|R)M\d\.SCF$} $name regMatch tpl dir]} {Espionne "OUPS"; exit 1} if {$dir == "F"} {set dir "fwd"} else {set dir "rev"} puts $out [formatFasta "$tfa($name,header) TEMPLATE: $tpl DIRECTION: $dir" $tfa($name,sequence)] } close $out } proc InfosDeLaSeq {w nseqCombo {quoi edit}} { global TEdit nold {*}[info globals "TD*"] global ListeDesAcidesAmines GroupeDeLaSequence if {$nseqCombo eq "VientDuCombo"} { set nseqCombo $TEdit(nseqCombo) } if {[set TEdit(mode)] ne "edit"} { set ww [set TEdit(FWarn)] if {[winfo exists ${ww}.wrn]} { grid forget ${ww}.wrn destroy ${ww}.wrn } set nseq [set TEdit(corr,$nseqCombo)] if {[ExisteAABizarres $nseq]} { label ${ww}.wrn -background red -foreground white -text "Warning !\n The values given below\nare only indicative as this sequence\ncontains unhandled amino acids" -justify left -anchor w grid ${ww}.wrn -column 2 -row 0 -pady 10 -padx 10 -sticky w } } if {$w ne "" && [set TEdit(mode)] eq "edit"} { # nold is seqname set TEdit(desc,$nold) [string trim [[set TEdit(tdes)] get 1.0 end]] set TEdit(seqname,$nold) [set TEdit(seqname)] set TEdit(access,$nold) [set TEdit(access)] set TEdit(bid,$nold) [set TEdit(bid)] set TEdit(ec,$nold) [set TEdit(ec)] set TEdit(taxid,$nold) [set TEdit(taxid)] set TEdit(orga,$nold) [set TEdit(orga)] set TEdit(lifed,$nold) [set TEdit(lifed)] if {$nseqCombo eq ""} {return} } # nseq corrspond alors a l'access set nseq [set TEdit(corr,$nseqCombo)] set TEdit(seqname) [set TDesSeqnames($nseq)] set TEdit(access) [set TDesAccess($nseq)] set TEdit(bid) [set TDesBId($nseq)] set TEdit(desc) [set TDesDescriptifs($nseq)] set TEdit(ec) [set TDesEC($nseq)] set TEdit(groupe) [set TDuGroupeDesSeqs($nseq)] set TEdit(orga) [set TDesOrganismes($nseq)] set TEdit(frag) [set TDesFragment($nseq)] set TEdit(lifed) [set TDesPhylum($nseq)] set TEdit(taxid) [set TDesTaxId($nseq)] set TEdit(lineage) [join [set TDuLineage($nseq)]] set TEdit(pi) [format %.2f [set TDespI($nseq)]] set TEdit(molw) [format %.2f [set TDesMolW($nseq)]] set TEdit(hydro) [set TDesHydro($nseq)] set TEdit(length) [DonneLongueurDe $nseq] set TEdit(comppc) [set TDesCompos($nseq,pc)] foreach a $ListeDesAcidesAmines v [set TDesCompos($nseq,aa)] { if {$v eq ""} {set v 0.0} set TEdit(compaa,$a) [format "%5.1f" $v] } foreach a {"AILMV" "KRH" "DEQN" "FYW" "PGST"} v [set TDesCompos($nseq,pc)] { if {$v eq ""} {set v 0.0} set TEdit(compaa,$a) [format "%5.1f" $v] } foreach {a p} [CompositionAADuGroupe [set GroupeDeLaSequence($nseq)]] { set TEdit(compGrp,$a) [format %5.1f $p] } if {[set TEdit(mode)] eq "edit"} { set TEdit(seqname,$nseqCombo) [set TDesSeqnames($nseq)] set TEdit(access,$nseqCombo) [set TDesAccess($nseq)] set TEdit(bid,$nseqCombo) [set TDesBId($nseq)] set TEdit(desc,$nseqCombo) [set TDesDescriptifs($nseq)] set TEdit(ec,$nseqCombo) [set TDesEC($nseq)] set TEdit(taxid,$nseqCombo) [set TDesTaxId($nseq)] set TEdit(groupe,$nseqCombo) [set TDuGroupeDesSeqs($nseq)] set TEdit(orga,$nseqCombo) [set TDesOrganismes($nseq)] set TEdit(frag,$nseqCombo) [set TDesFragment($nseq)] set TEdit(lifed,$nseqCombo) [set TDesPhylum($nseq)] } set nold $nseqCombo if {[info exists TEdit(tdes)] && [set TEdit(mode)] eq "edit"} { [set TEdit(tdes)] delete 1.0 end [set TEdit(tdes)] insert end [set TEdit(desc,$nseqCombo)] } if {[info exists TEdit(tdes)] && [set TEdit(mode)] ne "edit"} { [set TEdit(tdes)] configure -state normal [set TEdit(tdes)] delete 1.0 end [set TEdit(tdes)] insert end [set TEdit(desc)] [set TEdit(tdes)] configure -state disabled [set TEdit(tlin)] configure -state normal [set TEdit(tlin)] delete 1.0 end [set TEdit(tlin)] insert end [set TEdit(lineage)] [set TEdit(tlin)] configure -state disabled } update idletasks return } proc InfosDesPDB {} { if {$::Defauts(DownloadPDB) eq "dont"} { return } foreach e $::ListePDB { set mol [DonneIdDeAccessPDB $e] set chn [DonneChainDeAccessPDB $e] $mol PDBInfos $chn } return } proc InfosDesProteinesRetNet {} { foreach RetNet [InterrogeRetNet LesRetNet] { Espionne "" Espionne $RetNet set Commande "[ProgPathway getz] \"\\\[protein-gen:$RetNet\\\] \& \\\[protein-org:Homo sapiens\\\]\" -f \"id acc org des seq\"" catch {set Page [eval exec $Commande]} Message if {$Page == ""} {continue} Espionne $Page } return } proc InfosDuMac {} { set w .macinfo if {[winfo exists $w]} {destroy $w} toplevel $w wm protocol $w WM_DELETE_WINDOW KillParLaCroix wm resizable $w 0 0 wm title $w "Alignment Title" wm attributes $w -topmost label $w.l -text "TO BE DONE" button $w.b -text " OK " -bg green1 -command [list QuitteInfosMac %W] pack $w.l $w.b -side top tkwait window $w return frame $w.f grid $w.f -row 0 -column 0 -sticky news -padx 5 -pady 5 label $w.f.lb -text "Alignment Information" -font "Helvetica 14 bold" -justify left -anchor w label $w.f.ltitre -text "Title" -justify left -anchor w label $w.f.titre -text "[MacCourant name]" -justify left -anchor w label $w.f.ldesc -text "Description" -justify left -anchor w text $w.f.desc -bg [set ::Defauts(BackAppli)] -wrap word label $w.f.lclu -text "Clustering" -justify left -anchor w label $w.f.clu -text "[ClusteringDuMac]" -justify left -anchor w label $w.f.ldclu -text "Method" -justify left -anchor w text $w.f.dclu -text "[ClusteringDuMac method]" -justify left -anchor w label $w.f.zone label $w.f.ngrp label $w.f.nseq label $w.f.long Title Description return } proc InfosEtBornesDuFinal {Chr {Ultime ""}} { if {$Ultime!=""} { set Ultime ".[string trim $Ultime .]" } set Final [ContenuDuFichier "[AnnotRep]/${Chr}_Final"] set Previous "." set D -1 set F $D set Sauve 0 foreach X [split $Final ""] { if {$X ne $Previous} { if {$Previous ne "."} { set Info [EleGen $Chr $Previous $D Info] if {$Info==""} { set Info [EleGen $Chr $Previous $F Info] if {$Info==""} { set Info [InfoDeLaZone $Chr $Previous $D] } } lappend LesBornes "$D $F $Previous" lappend LesInfos "$D $F $Previous $Info" set Sauve 1 } set D $F incr D incr F } else { set Sauve 0 incr F } set Previous $X } if { ! $Sauve } { set Info [EleGen $Chr $Previous $D Info] if {$Info==""} { set Info [EleGen $Chr $Previous $F Info] if {$Info==""} { set Info [InfoDeLaZone $Chr $Previous $D] } } lappend LesBornes "$D $F $Previous" lappend LesInfos "$D $F $Previous $Info" } set FicBornes [SauveLesLignes $LesBornes dans "${Chr}_BornesF$Ultime"] set FicInfos [SauveLesLignes $LesInfos dans "${Chr}_InfosF$Ultime"] return $FicInfos } proc InfosEtBornesDuFinalPourTous {{Premier ""} {Dernier ""}} { foreach Chr [ListOfChr $Premier $Dernier] { Espionne [InfosEtBornesDuFinal $Chr] } } proc InfosFromRefSeq {Lid} { if {$Lid == {} } {return {} } set Lxml [eFetchREST protein $Lid tiny] #puts "$Lxml" set RId [dom parse [join $Lxml]] set doc [$RId documentElement] array set T [list] set Ltid [list] set Lacc [list] foreach ns [$doc selectNodes //TSeq] { set tid [$ns selectNode string(./TSeq_taxid)] set acc [$ns selectNode string(./TSeq_accver)] set acc [EnleveVersionDeAccess $acc] set gi [$ns selectNode string(./TSeq_gi)] set org [$ns selectNode string(./TSeq_orgname)] set def [$ns selectNode string(./TSeq_defline)] set seq [$ns selectNode string(./TSeq_sequence)] set T($acc,TaxId) $tid set T($acc,Desc) $def set T($acc,Organism) $org set T($acc,currAC) $acc set T($acc,BId) $gi set T($acc,Sequence) $seq set T($acc,Lineage) "" set T($acc,Phylum) "" lappend Ltid $tid lappend Lacc $acc } $RId delete if {$Ltid != {} } { set o [eFetchREST taxonomy $Ltid] array set Tx $o foreach t $Ltid acc $Lacc { if {[info exists Tx($t,Lineage)]} { set Llin [split $Tx($t,Lineage) ";"] set T($acc,Lineage) $Tx($t,Lineage) if {[set ph [string trim [lindex $Llin 0]]] ne "cellular organisms"} { set T($acc,Phylum) $ph } else { set T($acc,Phylum) [string trim [lindex $Llin 1]] } } } } return [array get T] } proc InfosFromUniProt {Luni {Lsqn ""}} { if {$Luni == {} } {return {} } set Luni [lupper $Luni] set Lres [split [DbFetchGET uniprot $Luni] \n] set Lembl [SplitLesEMBL $Lres] array set T [list] foreach em $Lembl { if {[string trim $em] eq ""} {continue} unset -nocomplain tutu array set tutu [DecortiqueLesLignesEMBL $em ID AC DE GN OS OC OX Seq LaDETotal GNTotal] # access: take all of them, if we have an obsolete one set AC [string map {";" ""} [join $tutu(AC)]] regsub -all { +} [string trim $AC] " " AC set AC [split $AC] # current AC is the first of the list. set currAC [lindex $AC 0] # ID set currID $ID # find original access set acOri "" if {[set idx [lsearch -glob $Luni "$ID*"]] != -1} { set acOri [lindex $Luni $idx] } else { foreach elt $AC { if {[set idx [lsearch -glob $Luni "$elt*"]] != -1} { set acOri [lindex $Luni $idx] break } } if {$acOri eq ""} { puts "can't find $AC $ID" puts "" puts "[join $em \n]" puts "" continue } } set T($acOri,currAC) $currAC set T($acOri,BId) $ID set T($acOri,Desc) $DE set T($acOri,TaxId) $OX set T($acOri,Lineage) $OC set T($acOri,Organism) $OS set T($acOri,Sequence) $Seq set Llin [split $OC ";"] if {[set phy [string trim [lindex $Llin 0]]] ne "cellular organisms"} { set T($acOri,Phylum) $phy } else { set T($acOri,Phylum) [string trim [lindex $Llin 1]] } } return [array get T] } proc InfosSurOrdali {} { global VersionDeOrdali OrdEtcDir set fm [file join $OrdEtcDir "MACSIM_100px_transparent.gif"] image create photo imacs imacs read $fm -shrink set hgt [expr {[imacs cget -height] / 10}] set w ".info" toplevel $w wm title $w "About Ordalie ..." wm iconname $w "Info" wm resizable $w 0 0 wm protocol $w WM_DELETE_WINDOW KillParLaCroix frame $w.f pack $w.f -side top -expand 1 -fill both label $w.f.l -image imacs -height [imacs cget -height] pack $w.f.l -side left -padx 10 text $w.f.t -borderwidth 0 -font "Helvetica 14 bold" -bg "#ffffffffe0e0" -takefocus 0 -width 40 pack $w.f.t -side right -padx 10 set wt "$w.f.t" button $w.b -text " Close " -bg green1 -command "destroy $w" pack $w.b -side bottom -pady 15 $wt tag configure TresGrosGras -font "Helvetica 20 bold" $wt tag configure GrosGras -font "Helvetica 14 bold" $wt tag configure normal -font "Helvetica 12" $wt tag configure souli -underline on $wt insert end "\nOrdali " TresGrosGras $wt insert end "Version : $VersionDeOrdali\n\n\n" GrosGras $wt insert end "\251 1997-2006 Luc Moulinier and LBGI\n\n" normal $wt insert end "Bugs and comments should be address to\n" normal $wt insert end "moumou@igbmc.u-strasbg.fr" souli set hgt [expr {[regsub -all "\n" [$wt get 1.0 end] "" tmp] + 2}] $wt configure -state disabled -height $hgt MesCouleurs $w FenetreAuCentre $w tkwait window $w return } proc IniRosace {} { set lRosace [list "-3.40,A" "0.90,R" "-1.70,N" "-3.40,D" "-1.85,C" "-1.45,Q" "-3.40,E" "-5.15,G" "1.80,H" "1.50,I" "2.85,L" "-0.45,K" "2.05,M" "5.70,F" "-5.15,P" "-2.32,S" "-1.95,T" "7.45,W" "7.55,Y" "0.10,V" "0.40,A" "-4.25,R" "-1.60,N" "-2.45,D" "5.30,C" "-2.40,Q" "-1.50,E" "0.70,G" "-2.70,H" "2.75,I" "2.90,L" "-3.35,K" "2.10,M" "0.75,F" "-0.50,P" "0.20,S" "1.45,T" "-1.85,W" "-0.15,Y" "2.80,V"] return $lRosace } proc IniVolPol {} { # Tire directement de MAFFT : set lvolpol " A 31.0 8.1 R 124.0 10.5 N 56.0 11.6 D 54.0 13.0 C 55.0 5.5 Q 85.0 10.5 E 83.0 12.3 G 3.0 9.0 H 96.0 10.4 I 111.0 5.2 L 111.0 4.9 K 119.0 11.3 M 105.0 5.7 F 132.0 5.2 P 32.5 8.0 S 32.0 9.2 T 61.0 8.6 W 170.0 5.4 Y 136.0 6.2 V 84.0 5.9" # Volume/Polarite de MAFFT. # Met a l'echelle, rotation pour fitter les axes # du VRP. if {0} { set lvolpol "A -4.148493661429663 0.15375170408070496 C -2.2708161909098723 1.9304380623466315 D -2.3490527521815303 -3.1946187403435418 E -0.08019247530344983 -2.716280105425793 F 3.7533990270077893 2.135440334454238 G -6.339117377036085 -0.46125511224211607 H 0.9368828212281034 -1.4179323820776153 I 2.1104312403029724 2.135440334454238 K 2.736323730476236 -2.0329391984004364 L 2.1104312403029724 2.340442606561845 M 1.641011872673025 1.79376988094156 N -2.1925796296382143 -2.2379414705080425 P -4.031138819522176 0.22208579478324036 Q 0.07628064723986605 -1.4862664727801507 R 3.1275065368345256 -1.4862664727801507 S -4.070257100158005 -0.5979232936471869 T -1.8013968232799247 -0.18791874943197326 V -0.0019559140317918933 1.6571016995364887 W 6.7263883553307915 1.9987721530491669 Y 4.066345272094421 1.4520994274288819" } return $lvolpol } proc InitASA {} { global ASAaa ASAan set ASAaa(A) 239.0 set ASAaa(R) 384.1 set ASAaa(N) 293.2 set ASAaa(D) 282.4 set ASAaa(C) 270.2 set ASAaa(Q) 320.2 set ASAaa(E) 333.9 set ASAaa(G) 209.6 set ASAaa(H) 333.5 set ASAaa(I) 312.5 set ASAaa(L) 317.7 set ASAaa(K) 358.2 set ASAaa(M) 335.1 set ASAaa(F) 359.2 set ASAaa(P) 269.1 set ASAaa(S) 250.1 set ASAaa(T) 274.9 set ASAaa(W) 414.4 set ASAaa(Y) 371.6 set ASAaa(V) 286.3 set ASAan(A) 524.7 set ASAan(T) 479.6 set ASAan(C) 485.1 set ASAan(G) 517.1 set ASAan(U) 476.1 return } proc InitAffichage {} { if {[TypeAli] eq "pasdali"} {return} if {! [ModeI]} {return} InitWRegle AfficheRegle set menustatus "Reading File finished" MiseAJourMac MontreStrSecDansAlignement return } proc InitAgents {} { global LNOrdali TAg nAgents unset -nocomplain TAg set nAG 0 foreach n $LNOrdali { set TAg($n) [list] incr nAG [UpdateAgentsOfSeq $n] } set nAgents $nAG if {$::debug} { puts "Nombre d'agents : $nAG" } return } proc InitAgentsAnaBal {} { global LNOrdali Sequences MotifLen TAg set nAgents 0 foreach n $LNOrdali { set iAG 0 set s $Sequences($n) set lgt [string length $s] for {set i 0} {$i <= ($lgt - $MotifLen)} {incr i} { set fin [expr {$i + $MotifLen -1}] set ags [string range $s $i $fin] lappend TAg($n) $iAG set TAg($iAG,$n,active) 1 set TAg($iAG,$n,nseq) $n set TAg($iAG,$n,seq) $ags set TAg($iAG,$n,dep) $i set TAg($iAG,$n,fin) $fin set TAg($iAG,$n,mil) [expr {int(1.*(($i + $fin)/2))}] incr iAG } incr nAgents $iAG } puts "nombre d'agents : $nAgents" return $nAgents } proc InitArcBall {x y} { tcl3dMatfCopy $::ThisRot $::LastRot ; # Set Last Static Rotation To Last Dynamic One tcl3dArcBallClick $::ArcBall $x $y ; # Update Start Vector And Prepare For Dragging .top.fr.toglwin postredisplay } proc InitBalloonOnItem {w tag text} { $w bind $tag [list ShowBalloonOnItem $w $text %x %y] $w bind $tag [list after 1 $w delete cballoon] } proc InitBootstrap {AId} { global Abr HashRef set t [set Abr(Arbre,$AId)] unset -nocomplain HashRef TSum CreeBootstrapRef $t root $t set root nboot 0 return } proc InitCBS {} { global DCBS set DCBS(Tables) " - livre : { . pk_livre P . bid I . auteur V128 . titre T . genre V64 . duree V16 . resume T } " return } proc InitCBSDB {} { global DCBS db InitCBS file delete cbs.sql set db [FabriqueDeTables $DCBS(Tables) "" cbs.sql] ParseCatalogue $db close exit } proc InitCentreOverview {Id} { global NomTextSeq NomNomSeq WTexteRegle Ovw # At overview creation, # creates the mark on the overview of the center of the # center of the visible zone of the alignment, # and the square of the visible region set wc [set Ovw(O$Id,w)] set Wdt [$wc cget -width] set Hgt [$wc cget -height] # draw the visible zone of the alignment on the overview lassign [VisiblePartOfAlignment] xm ym xx yx # back to canvas coords set xcm [expr {round(1.0*$xm/[set Ovw(O$Id,Width)] *$Wdt)}] set ycm [expr {round(1.0*$ym/[set Ovw(O$Id,Height)]*$Hgt)}] set xcx [expr {round(1.0*$xx/[set Ovw(O$Id,Width)] *$Wdt)}] set ycx [expr {round(1.0*$yx/[set Ovw(O$Id,Height)]*$Hgt)}] if {[info exists Ovw(O$Id,TagRegion)]} {$wc delete [set Ovw(O$Id,TagRegion)]} set Ovw(O$Id,TagRegion) [$wc create rectangle $xcm $ycm $xcx $ycx -dash {3 3} -outline black -width 2 -tag algtRegion] # center of the region set x [expr {round($xcm + ($xcx-$xcm)/2)/[set Ovw(O$Id,Width)]*$Wdt}] set y [expr {round($ycm + ($ycx-$ycm)/2)/[set Ovw(O$Id,Height)]*$Hgt}] # create a mark for the new centre on the overview if {[info exists Ovw(O$Id,TagCentre)]} {$wc delete [set Ovw(O$Id,TagCentre)]} set Ovw(O$Id,TagCentre) [$wc create oval [expr {$x-2}] [expr {$y-2}] [expr {$x+2}] [expr {$y+2}] -fill white -outline black -tags algtCentre] return } proc InitCharsetHtml {} { set Ll [LesLignesDuFichier [file join $::OrdEtcDir charset.txt]] foreach l $Ll { if {[string first "#" $l] == 0 || [set l [string trim $l]] eq ""} { continue } regsub -all { +} $l " " l if {[string index $l 0] eq "\\"} { set l "NULL $l" } lassign $l keyboard octal hex unicode html char lappend LCharSet [list $keyboard $octal $hex $unicode $html $char] } return $LCharSet } proc InitChemicals {} { global Chm set Chm(Ac,na) 89 set Chm(Ac,nm) Actinium set Chm(Ac,wg) 227 set Chm(Ac,vdw) 0 set Chm(Ag,na) 47 set Chm(Ag,nm) Silver set Chm(Ag,wg) 107.8682 set Chm(Ag,vdw) 1.72 set Chm(Al,na) 13 set Chm(Al,nm) Aluminum set Chm(Al,wg) 26.9815 set Chm(Al,vdw) 1.7 set Chm(Am,na) 95 set Chm(Am,nm) Americium set Chm(Am,wg) 243 set Chm(Am,vdw) 0 set Chm(Ar,na) 18 set Chm(Ar,nm) Argon set Chm(Ar,wg) 39.948 set Chm(Ar,vdw) 1.88 set Chm(As,na) 33 set Chm(As,nm) Arsenic set Chm(As,wg) 74.9216 set Chm(As,vdw) 1.85 set Chm(At,na) 85 set Chm(At,nm) Astatine set Chm(At,wg) 210 set Chm(At,vdw) 0 set Chm(Au,na) 79 set Chm(Au,nm) Gold set Chm(Au,wg) 196.9665 set Chm(Au,vdw) 1.66 set Chm(B,na) 5 set Chm(B,nm) Boron set Chm(B,wg) 10.811 set Chm(B,vdw) 1.7 set Chm(Ba,na) 56 set Chm(Ba,nm) Barium set Chm(Ba,wg) 137.327 set Chm(Ba,vdw) 0 set Chm(Be,na) 4 set Chm(Be,nm) Beryllium set Chm(Be,wg) 9.0122 set Chm(Be,vdw) 1.7 set Chm(Bh,na) 107 set Chm(Bh,nm) Bohrium set Chm(Bh,wg) 264 set Chm(Bh,vdw) 0 set Chm(Bi,na) 83 set Chm(Bi,nm) Bismuth set Chm(Bi,wg) 208.9804 set Chm(Bi,vdw) 0 set Chm(Bk,na) 97 set Chm(Bk,nm) Berkelium set Chm(Bk,wg) 247 set Chm(Bk,vdw) 0 set Chm(Br,na) 35 set Chm(Br,nm) Bromine set Chm(Br,wg) 79.904 set Chm(Br,vdw) 1.85 set Chm(C,na) 6 set Chm(C,nm) Carbon set Chm(C,wg) 12.0107 set Chm(C,vdw) 1.70 set Chm(Ca,na) 20 set Chm(Ca,nm) Calcium set Chm(Ca,wg) 40.078 set Chm(Ca,vdw) 2.23 set Chm(Cd,na) 48 set Chm(Cd,nm) Cadmium set Chm(Cd,wg) 112.411 set Chm(Cd,vdw) 1.58 set Chm(Ce,na) 58 set Chm(Ce,nm) Cerium set Chm(Ce,wg) 140.116 set Chm(Ce,vdw) 0 set Chm(Cf,na) 98 set Chm(Cf,nm) Californium set Chm(Cf,wg) 251 set Chm(Cf,vdw) 0 set Chm(Cl,na) 17 set Chm(Cl,nm) Chlorine set Chm(Cl,wg) 35.453 set Chm(Cl,vdw) 1.75 set Chm(Cm,na) 96 set Chm(Cm,nm) Curium set Chm(Cm,wg) 247 set Chm(Cm,vdw) 0 set Chm(Co,na) 27 set Chm(Co,nm) Cobalt set Chm(Co,wg) 58.9332 set Chm(Co,vdw) 2.23 set Chm(Cr,na) 24 set Chm(Cr,nm) Chromium set Chm(Cr,wg) 51.9961 set Chm(Cr,vdw) 2.23 set Chm(Cs,na) 55 set Chm(Cs,nm) Cesium set Chm(Cs,wg) 132.9055 set Chm(Cs,vdw) 0 set Chm(Cu,na) 29 set Chm(Cu,nm) Copper set Chm(Cu,wg) 63.546 set Chm(Cu,vdw) 1.4 set Chm(Db,na) 105 set Chm(Db,nm) Dubnium set Chm(Db,wg) 262 set Chm(Db,vdw) 0 set Chm(Dy,na) 66 set Chm(Dy,nm) Dysprosium set Chm(Dy,wg) 162.5 set Chm(Dy,vdw) 0 set Chm(Er,na) 68 set Chm(Er,nm) Erbium set Chm(Er,wg) 167.259 set Chm(Er,vdw) 0 set Chm(Es,na) 99 set Chm(Es,nm) Einsteinium set Chm(Es,wg) 252 set Chm(Es,vdw) 0 set Chm(Eu,na) 63 set Chm(Eu,nm) Europium set Chm(Eu,wg) 151.964 set Chm(Eu,vdw) 0 set Chm(F,na) 9 set Chm(F,nm) Fluorine set Chm(F,wg) 18.9984 set Chm(F,vdw) 1.47 set Chm(Fe,na) 26 set Chm(Fe,nm) Iron set Chm(Fe,wg) 55.845 set Chm(Fe,vdw) 2.23 set Chm(Fm,na) 100 set Chm(Fm,nm) Fermium set Chm(Fm,wg) 257 set Chm(Fm,vdw) 0 set Chm(Fr,na) 87 set Chm(Fr,nm) Francium set Chm(Fr,wg) 223 set Chm(Fr,vdw) 0 set Chm(Ga,na) 31 set Chm(Ga,nm) Gallium set Chm(Ga,wg) 69.723 set Chm(Ga,vdw) 1.87 set Chm(Gd,na) 64 set Chm(Gd,nm) Gadolinium set Chm(Gd,wg) 157.25 set Chm(Gd,vdw) 0 set Chm(Ge,na) 32 set Chm(Ge,nm) Germanium set Chm(Ge,wg) 72.64 set Chm(Ge,vdw) 0 set Chm(H,na) 1 set Chm(H,nm) Hydrogen set Chm(H,wg) 1.0079 set Chm(H,vdw) 1.2 set Chm(He,na) 2 set Chm(He,nm) Helium set Chm(He,wg) 4.0026 set Chm(He,vdw) 1.4 set Chm(Hf,na) 72 set Chm(Hf,nm) Hafnium set Chm(Hf,wg) 178.49 set Chm(Hf,vdw) 0 set Chm(Hg,na) 80 set Chm(Hg,nm) Mercury set Chm(Hg,wg) 200.59 set Chm(Hg,vdw) 1.55 set Chm(Ho,na) 67 set Chm(Ho,nm) Holmium set Chm(Ho,wg) 164.9303 set Chm(Ho,vdw) 0 set Chm(Hs,na) 108 set Chm(Hs,nm) Hassium set Chm(Hs,wg) 277 set Chm(Hs,vdw) 0 set Chm(I,na) 53 set Chm(I,nm) Iodine set Chm(I,wg) 126.9045 set Chm(I,vdw) 1.98 set Chm(In,na) 49 set Chm(In,nm) Indium set Chm(In,wg) 114.818 set Chm(In,vdw) 1.93 set Chm(Ir,na) 77 set Chm(Ir,nm) Iridium set Chm(Ir,wg) 192.217 set Chm(Ir,vdw) 0 set Chm(K,na) 19 set Chm(K,nm) Potassium set Chm(K,wg) 39.0983 set Chm(K,vdw) 2.75 set Chm(Kr,na) 36 set Chm(Kr,nm) Krypton set Chm(Kr,wg) 83.8 set Chm(Kr,vdw) 2.02 set Chm(La,na) 57 set Chm(La,nm) Lanthanum set Chm(La,wg) 138.9055 set Chm(La,vdw) 0 set Chm(Li,na) 3 set Chm(Li,nm) Lithium set Chm(Li,wg) 6.941 set Chm(Li,vdw) 1.82 set Chm(Lr,na) 103 set Chm(Lr,nm) Lawrencium set Chm(Lr,wg) 262 set Chm(Lr,vdw) 0 set Chm(Lu,na) 71 set Chm(Lu,nm) Lutetium set Chm(Lu,wg) 174.967 set Chm(Lu,vdw) 0 set Chm(Md,na) 101 set Chm(Md,nm) Mendelevium set Chm(Md,wg) 258 set Chm(Md,vdw) 0 set Chm(Mg,na) 12 set Chm(Mg,nm) Magnesium set Chm(Mg,wg) 24.305 set Chm(Mg,vdw) 1.73 set Chm(Mn,na) 25 set Chm(Mn,nm) Manganese set Chm(Mn,wg) 54.938 set Chm(Mn,vdw) 2.23 set Chm(Mo,na) 42 set Chm(Mo,nm) Molybdenum set Chm(Mo,wg) 95.94 set Chm(Mo,vdw) 0 set Chm(Mt,na) 109 set Chm(Mt,nm) Meitnerium set Chm(Mt,wg) 268 set Chm(Mt,vdw) 0 set Chm(N,na) 7 set Chm(N,nm) Nitrogen set Chm(N,wg) 14.0067 set Chm(N,vdw) 1.55 set Chm(Na,na) 11 set Chm(Na,nm) Sodium set Chm(Na,wg) 22.9897 set Chm(Na,vdw) 2.27 set Chm(Nb,na) 41 set Chm(Nb,nm) Niobium set Chm(Nb,wg) 92.9064 set Chm(Nb,vdw) 0 set Chm(Nd,na) 60 set Chm(Nd,nm) Neodymium set Chm(Nd,wg) 144.24 set Chm(Nd,vdw) 0 set Chm(Ne,na) 10 set Chm(Ne,nm) Neon set Chm(Ne,wg) 20.1797 set Chm(Ne,vdw) 0 set Chm(Ni,na) 28 set Chm(Ni,nm) Nickel set Chm(Ni,wg) 58.6934 set Chm(Ni,vdw) 1.63 set Chm(No,na) 102 set Chm(No,nm) Nobelium set Chm(No,wg) 259 set Chm(No,vdw) 0 set Chm(Np,na) 93 set Chm(Np,nm) Neptunium set Chm(Np,wg) 237 set Chm(Np,vdw) 0 set Chm(O,na) 8 set Chm(O,nm) Oxygen set Chm(O,wg) 15.9994 set Chm(O,vdw) 1.52 set Chm(Os,na) 76 set Chm(Os,nm) Osmium set Chm(Os,wg) 190.23 set Chm(Os,vdw) 0 set Chm(P,na) 15 set Chm(P,nm) Phosphorus set Chm(P,wg) 30.9738 set Chm(P,vdw) 1.8 set Chm(Pa,na) 91 set Chm(Pa,nm) Protactinium set Chm(Pa,wg) 231.0359 set Chm(Pa,vdw) 0 set Chm(Pb,na) 82 set Chm(Pb,nm) Lead set Chm(Pb,wg) 207.2 set Chm(Pb,vdw) 2.02 set Chm(Pd,na) 46 set Chm(Pd,nm) Palladium set Chm(Pd,wg) 106.42 set Chm(Pd,vdw) 1.63 set Chm(Pm,na) 61 set Chm(Pm,nm) Promethium set Chm(Pm,wg) 145 set Chm(Pm,vdw) 0 set Chm(Po,na) 84 set Chm(Po,nm) Polonium set Chm(Po,wg) 209 set Chm(Po,vdw) 0 set Chm(Pr,na) 59 set Chm(Pr,nm) Praseodymium set Chm(Pr,wg) 140.9077 set Chm(Pr,vdw) 0 set Chm(Pt,na) 78 set Chm(Pt,nm) Platinum set Chm(Pt,wg) 195.078 set Chm(Pt,vdw) 1.75 set Chm(Pu,na) 94 set Chm(Pu,nm) Plutonium set Chm(Pu,wg) 244 set Chm(Pu,vdw) 0 set Chm(Ra,na) 88 set Chm(Ra,nm) Radium set Chm(Ra,wg) 226 set Chm(Ra,vdw) 0 set Chm(Rb,na) 37 set Chm(Rb,nm) Rubidium set Chm(Rb,wg) 85.4678 set Chm(Rb,vdw) 0 set Chm(Re,na) 75 set Chm(Re,nm) Rhenium set Chm(Re,wg) 186.207 set Chm(Re,vdw) 0 set Chm(Rf,na) 104 set Chm(Rf,nm) Rutherfordium set Chm(Rf,wg) 261 set Chm(Rf,vdw) 0 set Chm(Rh,na) 45 set Chm(Rh,nm) Rhodium set Chm(Rh,wg) 102.9055 set Chm(Rh,vdw) 0 set Chm(Rn,na) 86 set Chm(Rn,nm) Radon set Chm(Rn,wg) 222 set Chm(Rn,vdw) 0 set Chm(Ru,na) 44 set Chm(Ru,nm) Ruthenium set Chm(Ru,wg) 101.07 set Chm(Ru,vdw) 0 set Chm(S,na) 16 set Chm(S,nm) Sulfur set Chm(S,wg) 32.065 set Chm(S,vdw) 1.8 set Chm(Sb,na) 51 set Chm(Sb,nm) Antimony set Chm(Sb,wg) 121.76 set Chm(Sb,vdw) 0 set Chm(Sc,na) 21 set Chm(Sc,nm) Scandium set Chm(Sc,wg) 44.9559 set Chm(Sc,vdw) 2.23 set Chm(Se,na) 34 set Chm(Se,nm) Selenium set Chm(Se,wg) 78.96 set Chm(Se,vdw) 1.9 set Chm(Sg,na) 106 set Chm(Sg,nm) Seaborgium set Chm(Sg,wg) 266 set Chm(Sg,vdw) 0 set Chm(Si,na) 14 set Chm(Si,nm) Silicon set Chm(Si,wg) 28.0855 set Chm(Si,vdw) 2.1 set Chm(Sm,na) 62 set Chm(Sm,nm) Samarium set Chm(Sm,wg) 150.36 set Chm(Sm,vdw) 0 set Chm(Sn,na) 50 set Chm(Sn,nm) Tin set Chm(Sn,wg) 118.71 set Chm(Sn,vdw) 2.17 set Chm(Sr,na) 38 set Chm(Sr,nm) Strontium set Chm(Sr,wg) 87.62 set Chm(Sr,vdw) 0 set Chm(Ta,na) 73 set Chm(Ta,nm) Tantalum set Chm(Ta,wg) 180.9479 set Chm(Ta,vdw) 0 set Chm(Tb,na) 65 set Chm(Tb,nm) Terbium set Chm(Tb,wg) 158.9253 set Chm(Tb,vdw) 0 set Chm(Tc,na) 43 set Chm(Tc,nm) Technetium set Chm(Tc,wg) 98 set Chm(Tc,vdw) 0 set Chm(Te,na) 52 set Chm(Te,nm) Tellurium set Chm(Te,wg) 127.6 set Chm(Te,vdw) 2.06 set Chm(Th,na) 90 set Chm(Th,nm) Thorium set Chm(Th,wg) 232.0381 set Chm(Th,vdw) 0 set Chm(Ti,na) 22 set Chm(Ti,nm) Titanium set Chm(Ti,wg) 47.867 set Chm(Ti,vdw) 2.23 set Chm(Tl,na) 81 set Chm(Tl,nm) Thallium set Chm(Tl,wg) 204.3833 set Chm(Tl,vdw) 1.96 set Chm(Tm,na) 69 set Chm(Tm,nm) Thulium set Chm(Tm,wg) 168.9342 set Chm(Tm,vdw) 0 set Chm(U,na) 92 set Chm(U,nm) Uranium set Chm(U,wg) 238.0289 set Chm(U,vdw) 1.86 set Chm(V,na) 23 set Chm(V,nm) Vanadium set Chm(V,wg) 50.9415 set Chm(V,vdw) 2.23 set Chm(W,na) 74 set Chm(W,nm) Tungsten set Chm(W,wg) 183.84 set Chm(W,vdw) 0 set Chm(Xe,na) 54 set Chm(Xe,nm) Xenon set Chm(Xe,wg) 131.293 set Chm(Xe,vdw) 2.16 set Chm(Y,na) 39 set Chm(Y,nm) Yttrium set Chm(Y,wg) 88.9059 set Chm(Y,vdw) 0 set Chm(Yb,na) 70 set Chm(Yb,nm) Ytterbium set Chm(Yb,wg) 173.04 set Chm(Yb,vdw) 0 set Chm(Zn,na) 30 set Chm(Zn,nm) Zinc set Chm(Zn,wg) 65.39 set Chm(Zn,vdw) 1.39 set Chm(Zr,na) 40 set Chm(Zr,nm) Zirconium set Chm(Zr,wg) 91.224 set Chm(Zr,vdw) 0 foreach v [array names Chm *,na] { set na [set Chm($v)] lassign [split $v ,] n tmp set r [set Chm($n,vdw)] set Chm(${na},vdw) $r } SampleVdW InitResidueTypes return } proc InitClustalMatrix {mat {positive 0} {scale 100} {Centre 0}} { # Taken from matrices.h from ClustalW source sode # with kind permissions of J.D. Thompson. set amino_acid_order "ABCDEFGHIKLMNPQRSTVWXYZ" set Tmat(blosum30) " 4, 0, 5, -3, -2, 17, 0, 5, -3, 9, 0, 0, 1, 1, 6, -2, -3, -3, -5, -4, 10, 0, 0, -4, -1, -2, -3, 8, -2, -2, -5, -2, 0, -3, -3, 14, 0, -2, -2, -4, -3, 0, -1, -2, 6, 0, 0, -3, 0, 2, -1, -1, -2, -2, 4, -1, -1, 0, -1, -1, 2, -2, -1, 2, -2, 4, 1, -2, -2, -3, -1, -2, -2, 2, 1, 2, 2, 6, 0, 4, -1, 1, -1, -1, 0, -1, 0, 0, -2, 0, 8, -1, -2, -3, -1, 1, -4, -1, 1, -3, 1, -3, -4, -3, 11, 1, -1, -2, -1, 2, -3, -2, 0, -2, 0, -2, -1, -1, 0, 8, -1, -2, -2, -1, -1, -1, -2, -1, -3, 1, -2, 0, -2, -1, 3, 8, 1, 0, -2, 0, 0, -1, 0, -1, -1, 0, -2, -2, 0, -1, -1, -1, 4, 1, 0, -2, -1, -2, -2, -2, -2, 0, -1, 0, 0, 1, 0, 0, -3, 2, 5, 1, -2, -2, -2, -3, 1, -3, -3, 4, -2, 1, 0, -2, -4, -3, -1, -1, 1, 5, -5, -5, -2, -4, -1, 1, 1, -5, -3, -2, -2, -3, -7, -3, -1, 0, -3, -5, -3, 20, 0, -1, -2, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, -2, -1, -4, -3, -6, -1, -2, 3, -3, 0, -1, -1, 3, -1, -4, -2, -1, 0, -2, -1, 1, 5, -1, 9, 0, 0, 0, 0, 5, -4, -2, 0, -3, 1, -1, -1, -1, 0, 4, 0, -1, -1, -3, -1, 0, -2, 4" set Tmat(blosum40) " 5, -1, 5, -2, -2, 16, -1, 6, -2, 9, -1, 1, -2, 2, 7, -3, -3, -2, -4, -3, 9, 1, -1, -3, -2, -3, -3, 8, -2, 0, -4, 0, 0, -2, -2, 13, -1, -3, -4, -4, -4, 1, -4, -3, 6, -1, 0, -3, 0, 1, -3, -2, -1, -3, 6, -2, -3, -2, -3, -2, 2, -4, -2, 2, -2, 6, -1, -3, -3, -3, -2, 0, -2, 1, 1, -1, 3, 7, -1, 4, -2, 2, -1, -3, 0, 1, -2, 0, -3, -2, 8, -2, -2, -5, -2, 0, -4, -1, -2, -2, -1, -4, -2, -2, 11, 0, 0, -4, -1, 2, -4, -2, 0, -3, 1, -2, -1, 1, -2, 8, -2, -1, -3, -1, -1, -2, -3, 0, -3, 3, -2, -1, 0, -3, 2, 9, 1, 0, -1, 0, 0, -2, 0, -1, -2, 0, -3, -2, 1, -1, 1, -1, 5, 0, 0, -1, -1, -1, -1, -2, -2, -1, 0, -1, -1, 0, 0, -1, -2, 2, 6, 0, -3, -2, -3, -3, 0, -4, -4, 4, -2, 2, 1, -3, -3, -3, -2, -1, 1, 5, -3, -4, -6, -5, -2, 1, -2, -5, -3, -2, -1, -2, -4, -4, -1, -2, -5, -4, -3, 19, 0, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -2, -1, -1, 0, 0, -1, -2, -1, -2, -3, -4, -3, -2, 4, -3, 2, 0, -1, 0, 1, -2, -3, -1, -1, -2, -1, -1, 3, -1, 9, -1, 2, -3, 1, 5, -4, -2, 0, -4, 1, -2, -2, 0, -1, 4, 0, 0, -1, -3, -2, -1, -2, 5" set Tmat(blosum45) " 5, -1, 4, -1, -2, 12, -2, 5, -3, 7, -1, 1, -3, 2, 6, -2, -3, -2, -4, -3, 8, 0, -1, -3, -1, -2, -3, 7, -2, 0, -3, 0, 0, -2, -2, 10, -1, -3, -3, -4, -3, 0, -4, -3, 5, -1, 0, -3, 0, 1, -3, -2, -1, -3, 5, -1, -3, -2, -3, -2, 1, -3, -2, 2, -3, 5, -1, -2, -2, -3, -2, 0, -2, 0, 2, -1, 2, 6, -1, 4, -2, 2, 0, -2, 0, 1, -2, 0, -3, -2, 6, -1, -2, -4, -1, 0, -3, -2, -2, -2, -1, -3, -2, -2, 9, -1, 0, -3, 0, 2, -4, -2, 1, -2, 1, -2, 0, 0, -1, 6, -2, -1, -3, -1, 0, -2, -2, 0, -3, 3, -2, -1, 0, -2, 1, 7, 1, 0, -1, 0, 0, -2, 0, -1, -2, -1, -3, -2, 1, -1, 0, -1, 4, 0, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, 0, -1, -1, -1, 2, 5, 0, -3, -1, -3, -3, 0, -3, -3, 3, -2, 1, 1, -3, -3, -3, -2, -1, 0, 5, -2, -4, -5, -4, -3, 1, -2, -3, -2, -2, -2, -2, -4, -3, -2, -2, -4, -3, -3, 15, 0, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -2, -1, -2, -2, -3, -2, -2, 3, -3, 2, 0, -1, 0, 0, -2, -3, -1, -1, -2, -1, -1, 3, -1, 8, -1, 2, -3, 1, 4, -3, -2, 0, -3, 1, -2, -1, 0, -1, 4, 0, 0, -1, -3, -2, -1, -2, 4" set Tmat(blosum62) " 8, -4, 8, 0, -6, 18, -4, 8, -6, 12, -2, 2, -8, 4, 10, -4, -6, -4, -6, -6, 12, 0, -2, -6, -2, -4, -6, 12, -4, 0, -6, -2, 0, -2, -4, 16, -2, -6, -2, -6, -6, 0, -8, -6, 8, -2, 0, -6, -2, 2, -6, -4, -2, -6, 10, -2, -8, -2, -8, -6, 0, -8, -6, 4, -4, 8, -2, -6, -2, -6, -4, 0, -6, -4, 2, -2, 4, 10, -4, 6, -6, 2, 0, -6, 0, 2, -6, 0, -6, -4, 12, -2, -4, -6, -2, -2, -8, -4, -4, -6, -2, -6, -4, -4, 14, -2, 0, -6, 0, 4, -6, -4, 0, -6, 2, -4, 0, 0, -2, 10, -2, -2, -6, -4, 0, -6, -4, 0, -6, 4, -4, -2, 0, -4, 2, 10, 2, 0, -2, 0, 0, -4, 0, -2, -4, 0, -4, -2, 2, -2, 0, -2, 8, 0, -2, -2, -2, -2, -4, -4, -4, -2, -2, -2, -2, 0, -2, -2, -2, 2, 10, 0, -6, -2, -6, -4, -2, -6, -6, 6, -4, 2, 2, -6, -4, -4, -6, -4, 0, 8, -6, -8, -4, -8, -6, 2, -4, -4, -6, -6, -4, -2, -8, -8, -4, -6, -6, -4, -6, 22, 0, -2, -4, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -4, -2, -2, 0, 0, -2, -4, -2, -4, -6, -4, -6, -4, 6, -6, 4, -2, -4, -2, -2, -4, -6, -2, -4, -4, -4, -2, 4, -2, 14, -2, 2, -6, 2, 8, -6, -4, 0, -6, 2, -6, -2, 0, -2, 6, 0, 0, -2, -4, -6, -2, -4, 8" set Tmat(blosum80) " 7, -3, 6, -1, -6, 13, -3, 6, -7, 10, -2, 1, -7, 2, 8, -4, -6, -4, -6, -6, 10, 0, -2, -6, -3, -4, -6, 9, -3, -1, -7, -2, 0, -2, -4, 12, -3, -6, -2, -7, -6, -1, -7, -6, 7, -1, -1, -6, -2, 1, -5, -3, -1, -5, 8, -3, -7, -3, -7, -6, 0, -7, -5, 2, -4, 6, -2, -5, -3, -6, -4, 0, -5, -4, 2, -3, 3, 9, -3, 5, -5, 2, -1, -6, -1, 1, -6, 0, -6, -4, 9, -1, -4, -6, -3, -2, -6, -5, -4, -5, -2, -5, -4, -4, 12, -2, -1, -5, -1, 3, -5, -4, 1, -5, 2, -4, -1, 0, -3, 9, -3, -2, -6, -3, -1, -5, -4, 0, -5, 3, -4, -3, -1, -3, 1, 9, 2, 0, -2, -1, -1, -4, -1, -2, -4, -1, -4, -3, 1, -2, -1, -2, 7, 0, -1, -2, -2, -2, -4, -3, -3, -2, -1, -3, -1, 0, -3, -1, -2, 2, 8, -1, -6, -2, -6, -4, -2, -6, -5, 4, -4, 1, 1, -5, -4, -4, -4, -3, 0, 7, -5, -8, -5, -8, -6, 0, -6, -4, -5, -6, -4, -3, -7, -7, -4, -5, -6, -5, -5, 16, -1, -3, -4, -3, -2, -3, -3, -2, -2, -2, -2, -2, -2, -3, -2, -2, -1, -1, -2, -5, -2, -4, -5, -5, -6, -5, 4, -6, 3, -3, -4, -2, -3, -4, -6, -3, -4, -3, -3, -3, 3, -3, 11, -2, 0, -7, 1, 6, -6, -4, 0, -6, 1, -5, -3, -1, -2, 5, 0, -1, -2, -4, -5, -1, -4, 6" set Tmat(pam20) " 6, -5, 6, -8,-14, 10, -4, 6,-16, 8, -3, 0,-16, 2, 8, -9,-12,-15,-17,-16, 9, -3, -4,-11, -4, -5,-10, 7, -8, -2, -8, -5, -6, -7,-10, 9, -6, -7, -7, -9, -6, -3,-13,-11, 9, -8, -3,-16, -6, -5,-16, -8, -8, -7, 7, -7,-10,-17,-15,-10, -4,-12, -7, -2, -9, 7, -6,-12,-16,-13, -8, -5,-10,-13, -2, -3, 0, 11, -5, 6,-13, 1, -3,-10, -4, -1, -6, -2, -8,-11, 8, -2, -8, -9, -9, -7,-11, -7, -5,-10, -8, -8, -9, -7, 8, -5, -4,-16, -4, 0,-15, -8, 0, -9, -4, -6, -5, -5, -4, 9, -8, -9, -9,-12,-11,-10,-11, -3, -6, -1,-10, -5, -7, -5, -2, 9, -1, -2, -4, -5, -5, -7, -3, -7, -8, -5, -9, -6, -1, -3, -6, -4, 7, -1, -4, -9, -6, -7,-10, -7, -8, -3, -4, -8, -5, -3, -5, -7, -8, 0, 7, -3, -9, -7, -9, -8, -9, -7, -7, 1,-10, -3, -2, -9, -7, -8, -9, -8, -4, 7, -16,-11,-18,-17,-19, -6,-17, -8,-16,-14, -7,-15, -9,-16,-15, -3, -6,-15,-18, 13, -4, -6,-11, -7, -6, -9, -6, -6, -6, -6, -7, -6, -4, -6, -6, -7, -4, -5, -6,-13, -6, -9, -7, -5,-13, -9, 1,-16, -4, -7,-10, -8,-13, -5,-16,-14,-11, -8, -7, -8, -6, -9, 10, -4, -1,-16, 0, 6,-16, -6, -2, -7, -5, -8, -6, -4, -5, 7, -5, -6, -7, -8,-17, -6,-11, 6" set Tmat(pam60) " 5, -2, 5, -5, -9, 9, -2, 5,-10, 7, -1, 2,-10, 3, 7, -6, -8, -9,-11,-10, 8, 0, -2, -7, -2, -2, -7, 6, -5, 0, -6, -2, -3, -4, -6, 8, -3, -4, -4, -5, -4, -1, -7, -6, 7, -5, -1,-10, -2, -3,-10, -5, -4, -4, 6, -4, -7,-11, -9, -7, -1, -8, -4, 0, -6, 6, -3, -6,-10, -7, -5, -2, -6, -7, 1, 0, 2, 10, -2, 5, -7, 2, 0, -6, -1, 1, -4, 0, -5, -6, 6, 0, -4, -6, -5, -3, -7, -4, -2, -6, -4, -5, -6, -4, 7, -3, -1,-10, -1, 2, -9, -5, 2, -5, -1, -3, -2, -2, -1, 7, -5, -5, -6, -6, -6, -7, -7, 0, -4, 2, -6, -2, -3, -2, 0, 8, 1, 0, -1, -2, -2, -5, 0, -4, -4, -2, -6, -4, 1, 0, -3, -2, 5, 1, -2, -5, -3, -4, -6, -3, -5, -1, -2, -5, -2, -1, -2, -4, -4, 1, 6, -1, -5, -4, -6, -4, -5, -4, -5, 3, -6, -1, 0, -5, -4, -5, -5, -4, -1, 6, -10, -8,-12,-11,-12, -3,-11, -5,-10, -8, -4, -9, -6,-10, -9, 0, -4, -9,-11, 13, -2, -3, -6, -3, -3, -5, -3, -3, -3, -3, -4, -3, -2, -3, -3, -4, -2, -2, -3, -8, -3, -6, -5, -2, -8, -7, 3,-10, -2, -4, -7, -5, -7, -3,-10, -8, -8, -5, -5, -5, -3, -5, 9, -2, 1,-10, 2, 5,-10, -3, 0, -4, -2, -5, -4, -1, -2, 6, -2, -3, -4, -5,-11, -3, -7, 5" set Tmat(pam120) " 3, 0, 4, -3, -6, 9, 0, 4, -7, 5, 0, 3, -7, 3, 5, -4, -5, -6, -7, -7, 8, 1, 0, -4, 0, -1, -5, 5, -3, 1, -4, 0, -1, -3, -4, 7, -1, -3, -3, -3, -3, 0, -4, -4, 6, -2, 0, -7, -1, -1, -7, -3, -2, -3, 5, -3, -4, -7, -5, -4, 0, -5, -3, 1, -4, 5, -2, -4, -6, -4, -3, -1, -4, -4, 1, 0, 3, 8, -1, 3, -5, 2, 1, -4, 0, 2, -2, 1, -4, -3, 4, 1, -2, -4, -3, -2, -5, -2, -1, -3, -2, -3, -3, -2, 6, -1, 0, -7, 1, 2, -6, -3, 3, -3, 0, -2, -1, 0, 0, 6, -3, -2, -4, -3, -3, -5, -4, 1, -2, 2, -4, -1, -1, -1, 1, 6, 1, 0, 0, 0, -1, -3, 1, -2, -2, -1, -4, -2, 1, 1, -2, -1, 3, 1, 0, -3, -1, -2, -4, -1, -3, 0, -1, -3, -1, 0, -1, -2, -2, 2, 4, 0, -3, -3, -3, -3, -3, -2, -3, 3, -4, 1, 1, -3, -2, -3, -3, -2, 0, 5, -7, -6, -8, -8, -8, -1, -8, -3, -6, -5, -3, -6, -4, -7, -6, 1, -2, -6, -8, 12, -1, -1, -4, -2, -1, -3, -2, -2, -1, -2, -2, -2, -1, -2, -1, -2, -1, -1, -1, -5, -2, -4, -3, -1, -5, -5, 4, -6, -1, -2, -5, -2, -4, -2, -6, -5, -5, -3, -3, -3, -2, -3, 8, -1, 2, -7, 3, 4, -6, -2, 1, -3, -1, -3, -2, 0, -1, 4, -1, -1, -2, -3, -7, -1, -5, 4" set Tmat(pam250) " 2, 0, 3, -2, -4, 12, 0, 3, -5, 4, 0, 3, -5, 3, 4, -3, -4, -4, -6, -5, 9, 1, 0, -3, 1, 0, -5, 5, -1, 1, -3, 1, 1, -2, -2, 6, -1, -2, -2, -2, -2, 1, -3, -2, 5, -1, 1, -5, 0, 0, -5, -2, 0, -2, 5, -2, -3, -6, -4, -3, 2, -4, -2, 2, -3, 6, -1, -2, -5, -3, -2, 0, -3, -2, 2, 0, 4, 6, 0, 2, -4, 2, 1, -3, 0, 2, -2, 1, -3, -2, 2, 1, -1, -3, -1, -1, -5, 0, 0, -2, -1, -3, -2, 0, 6, 0, 1, -5, 2, 2, -5, -1, 3, -2, 1, -2, -1, 1, 0, 4, -2, -1, -4, -1, -1, -4, -3, 2, -2, 3, -3, 0, 0, 0, 1, 6, 1, 0, 0, 0, 0, -3, 1, -1, -1, 0, -3, -2, 1, 1, -1, 0, 2, 1, 0, -2, 0, 0, -3, 0, -1, 0, 0, -2, -1, 0, 0, -1, -1, 1, 3, 0, -2, -2, -2, -2, -1, -1, -2, 4, -2, 2, 2, -2, -1, -2, -2, -1, 0, 4, -6, -5, -8, -7, -7, 0, -7, -3, -5, -3, -2, -4, -4, -6, -5, 2, -2, -5, -6, 17, 0, -1, -3, -1, -1, -2, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, 0, -1, -4, -1, -3, -3, 0, -4, -4, 7, -5, 0, -1, -4, -1, -2, -2, -5, -4, -4, -3, -3, -2, 0, -2, 10, 0, 2, -5, 3, 3, -5, 0, 2, -2, 0, -3, -2, 1, 0, 3, 0, 0, -1, -2, -6, -1, -4, 3" set Tmat(pam350) " 2, 1, 3, -2, -5, 18, 1, 3, -6, 4, 1, 3, -6, 4, 4, -4, -5, -5, -6, -6, 13, 2, 1, -4, 1, 1, -6, 5, -1, 1, -4, 1, 1, -2, -2, 7, 0, -2, -3, -2, -2, 2, -2, -2, 5, -1, 1, -6, 1, 0, -6, -1, 1, -2, 5, -2, -4, -7, -4, -4, 3, -4, -2, 4, -3, 8, -1, -2, -6, -3, -2, 1, -3, -2, 3, 0, 5, 6, 0, 2, -4, 2, 2, -4, 1, 2, -2, 1, -3, -2, 2, 1, 0, -3, 0, 0, -5, 0, 0, -2, -1, -3, -2, 0, 6, 0, 2, -6, 2, 3, -5, -1, 3, -2, 1, -2, -1, 1, 1, 4, -1, 0, -4, -1, 0, -5, -2, 2, -2, 4, -3, 0, 1, 0, 2, 7, 1, 1, 0, 1, 0, -4, 1, -1, -1, 0, -3, -2, 1, 1, 0, 0, 1, 1, 0, -2, 0, 0, -3, 1, -1, 0, 0, -2, -1, 1, 1, 0, -1, 1, 2, 0, -2, -2, -2, -2, -1, -1, -2, 4, -2, 3, 2, -2, -1, -2, -3, -1, 0, 5, -7, -6,-10, -8, -8, 1, -8, -3, -6, -4, -2, -5, -5, -7, -5, 4, -3, -6, -7, 27, 0, 0, -3, -1, 0, -2, -1, 0, 0, -1, -1, 0, 0, 0, 0, -1, 0, 0, 0, -5, -1, -4, -4, 1, -5, -5, 11, -6, 0, 0, -5, 0, -2, -3, -6, -5, -5, -3, -3, -2, 1, -2, 14, 0, 2, -6, 3, 3, -6, 0, 2, -2, 1, -3, -2, 2, 0, 3, 1, 0, 0, -2, -7, 0, -5, 3" set Tmat(idmat) " 10, 0, 10, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10" set Tmat(gon40) " 92, 0, 0, -31, 0, 163, -56, 0,-135, 111, -37, 0,-140, 16, 105, -92, 0, -64,-152,-143, 126, -32, 0, -91, -51, -76,-152, 105, -65, 0, -67, -41, -40, -50, -81, 145, -76, 0, -87,-150,-106, -39,-158, -94, 104, -54, 0,-132, -47, -13,-127, -79, -34, -86, 103, -68, 0, -85,-155,-108, -13,-141, -85, 5, -85, 89, -45, 0, -63,-130, -80, -16,-114, -60, 10, -57, 16, 140, -62, 0, -83, 6, -38,-104, -40, -7, -99, -20,-112, -91, 115, -37, 0,-137, -69, -60,-128, -87, -71,-108, -62, -83,-119, -78, 124, -43, 0,-113, -32, 10,-100, -71, 0, -91, 2, -60, -35, -25, -46, 118, -61, 0, -86, -77, -50,-130, -69, -31,-103, 19, -84, -81, -47, -73, -6, 112, 0, 0, -35, -36, -41,-111, -37, -48, -95, -43, -95, -64, -11, -35, -35, -51, 99, -25, 0, -59, -47, -52, -90, -85, -46, -51, -34, -78, -44, -27, -42, -39, -52, 13, 100, -22, 0, -43,-133, -74, -58,-122, -98, 28, -82, -18, -22,-103, -86, -79, -88, -74, -25, 97, -120, 0, -68,-171,-131, -6,-108, -70, -93,-127, -71, -72,-119,-149, -87, -63, -98,-120,-115, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, -56, -98,-107, 31,-129, 5, -76, -88, -64, -66, -62,-106, -81, -75, -69, -87, -73, 1, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" set Tmat(gon80) " 75, 0, 0, -10, 0, 154, -31, 0, -93, 96, -17, 0, -94, 31, 88, -64, 0, -39,-111,-102, 114, -11, 0, -61, -26, -47,-115, 97, -39, 0, -43, -17, -17, -26, -53, 127, -43, 0, -54,-106, -73, -15,-114, -64, 86, -30, 0, -88, -21, 4, -89, -50, -12, -59, 85, -43, 0, -55,-109, -75, 7,-104, -57, 22, -58, 77, -26, 0, -39, -88, -53, 3, -83, -38, 25, -37, 31, 117, -34, 0, -55, 21, -13, -75, -18, 9, -71, -2, -79, -62, 97, -16, 0, -93, -42, -35, -93, -58, -45, -75, -37, -58, -78, -48, 114, -22, 0, -76, -9, 23, -70, -44, 14, -60, 17, -39, -19, -6, -24, 95, -36, 0, -60, -44, -23, -90, -43, -10, -71, 33, -58, -53, -22, -45, 11, 97, 14, 0, -15, -14, -19, -77, -16, -25, -62, -20, -64, -41, 5, -14, -15, -27, 78, -5, 0, -34, -24, -27, -62, -52, -24, -28, -15, -49, -25, -7, -20, -18, -27, 25, 81, -6, 0, -21, -89, -51, -31, -86, -65, 41, -54, 3, 1, -69, -57, -51, -60, -43, -9, 80, -87, 0, -43,-124, -98, 16, -81, -43, -63, -89, -44, -45, -86,-112, -62, -41, -72, -87, -80, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, 0, -32, -69, -74, 49, -94, 21, -47, -60, -35, -37, -39, -76, -53, -50, -46, -58, -47, 23, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" set Tmat(gon120) " 59, 0, 0, -1, 0, 144, -18, 0, -69, 82, -9, 0, -68, 35, 72, -48, 0, -26, -87, -78, 102, -3, 0, -45, -14, -31, -92, 90, -26, 0, -31, -7, -6, -14, -37, 110, -27, 0, -36, -80, -55, -3, -87, -48, 72, -19, 0, -64, -8, 11, -67, -34, -2, -44, 69, -30, 0, -39, -82, -57, 15, -82, -42, 28, -44, 66, -17, 0, -26, -64, -40, 11, -65, -28, 29, -27, 34, 95, -20, 0, -41, 26, -1, -58, -7, 14, -55, 5, -61, -46, 80, -6, 0, -68, -28, -22, -72, -41, -31, -56, -24, -44, -56, -32, 105, -12, 0, -56, 1, 25, -53, -30, 17, -43, 20, -30, -14, 1, -14, 74, -23, 0, -45, -27, -10, -68, -30, -1, -53, 36, -44, -38, -10, -30, 16, 83, 16, 0, -7, -5, -9, -58, -6, -14, -44, -10, -47, -29, 10, -5, -7, -15, 60, 2, 0, -21, -13, -15, -47, -35, -14, -17, -6, -34, -16, 0, -10, -9, -16, 26, 64, 0, 0, -11, -65, -38, -17, -65, -47, 42, -39, 13, 10, -50, -42, -36, -44, -28, -3, 65, -68, 0, -29, -96, -78, 27, -66, -28, -46, -68, -29, -31, -68, -89, -49, -30, -57, -67, -59, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 0, -20, -53, -56, 55, -74, 26, -31, -44, -20, -22, -28, -59, -38, -37, -35, -42, -33, 33, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" set Tmat(gon160) " 46, 0, 0, 3, 0, 135, -11, 0, -53, 70, -4, 0, -52, 34, 59, -38, 0, -18, -70, -62, 91, 2, 0, -34, -7, -21, -76, 82, -18, 0, -23, -1, -1, -7, -27, 93, -18, 0, -25, -62, -43, 3, -70, -37, 59, -12, 0, -48, -1, 13, -53, -24, 2, -35, 55, -22, 0, -29, -65, -45, 19, -67, -32, 30, -34, 57, -12, 0, -19, -50, -31, 14, -52, -21, 29, -21, 34, 76, -12, 0, -31, 26, 5, -47, -2, 15, -44, 8, -48, -36, 65, -1, 0, -52, -19, -14, -58, -30, -22, -43, -16, -35, -42, -22, 96, -7, 0, -42, 6, 23, -41, -21, 17, -32, 20, -24, -12, 5, -8, 56, -16, 0, -35, -16, -3, -53, -21, 3, -41, 35, -35, -29, -4, -21, 17, 71, 16, 0, -2, 0, -3, -45, -1, -8, -33, -4, -36, -23, 11, 0, -2, -9, 44, 5, 0, -14, -6, -8, -36, -24, -8, -12, -2, -24, -11, 3, -4, -4, -9, 23, 50, 1, 0, -6, -49, -30, -8, -52, -35, 40, -30, 17, 14, -38, -32, -27, -34, -20, 0, 53, -55, 0, -21, -78, -64, 32, -55, -19, -34, -54, -20, -22, -55, -74, -40, -24, -47, -54, -45, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -37, 0, -13, -42, -44, 56, -60, 27, -20, -35, -11, -13, -22, -48, -29, -29, -28, -32, -24, 38, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" set Tmat(gon250) " 24, 0, 0, 5, 0, 115, -3, 0, -32, 47, 0, 0, -30, 27, 36, -23, 0, -8, -45, -39, 70, 5, 0, -20, 1, -8, -52, 66, -8, 0, -13, 4, 4, -1, -14, 60, -8, 0, -11, -38, -27, 10, -45, -22, 40, -4, 0, -28, 5, 12, -33, -11, 6, -21, 32, -12, 0, -15, -40, -28, 20, -44, -19, 28, -21, 40, -7, 0, -9, -30, -20, 16, -35, -13, 25, -14, 28, 43, -3, 0, -18, 22, 9, -31, 4, 12, -28, 8, -30, -22, 38, 3, 0, -31, -7, -5, -38, -16, -11, -26, -6, -23, -24, -9, 76, -2, 0, -24, 9, 17, -26, -10, 12, -19, 15, -16, -10, 7, -2, 27, -6, 0, -22, -3, 4, -32, -10, 6, -24, 27, -22, -17, 3, -9, 15, 47, 11, 0, 1, 5, 2, -28, 4, -2, -18, 1, -21, -14, 9, 4, 2, -2, 22, 6, 0, -5, 0, -1, -22, -11, -3, -6, 1, -13, -6, 5, 1, 0, -2, 15, 25, 1, 0, 0, -29, -19, 1, -33, -20, 31, -17, 18, 16, -22, -18, -15, -20, -10, 0, 34, -36, 0, -10, -52, -43, 36, -40, -8, -18, -35, -7, -10, -36, -50, -27, -16, -33, -35, -26, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, -5, -28, -27, 51, -40, 22, -7, -21, 0, -2, -14, -31, -17, -18, -19, -19, -11, 41, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" set Tmat(gon300) " 16, 0, 0, 5, 0, 104, -1, 0, -24, 37, 1, 0, -23, 23, 27, -18, 0, -5, -37, -31, 60, 5, 0, -15, 3, -4, -42, 58, -6, 0, -10, 5, 4, 0, -10, 45, -6, 0, -7, -30, -21, 11, -36, -16, 33, -2, 0, -21, 6, 11, -26, -7, 5, -17, 24, -9, 0, -10, -32, -22, 19, -36, -14, 25, -17, 33, -5, 0, -6, -24, -16, 15, -28, -10, 22, -11, 24, 31, -1, 0, -14, 18, 9, -25, 5, 10, -22, 8, -24, -17, 27, 3, 0, -23, -4, -2, -30, -11, -8, -20, -3, -18, -19, -6, 66, -1, 0, -18, 9, 14, -20, -6, 9, -15, 13, -13, -8, 7, -1, 18, -4, 0, -17, 0, 5, -25, -6, 6, -19, 22, -18, -13, 4, -6, 13, 37, 8, 0, 1, 5, 3, -22, 4, -1, -14, 2, -17, -11, 7, 4, 2, 0, 15, 5, 0, -3, 1, 1, -17, -7, -1, -4, 2, -9, -5, 4, 2, 1, -1, 11, 17, 0, 0, 1, -23, -15, 4, -26, -15, 26, -13, 17, 15, -17, -14, -12, -15, -8, 0, 26, -29, 0, -7, -42, -36, 36, -34, -5, -13, -28, -4, -6, -30, -41, -23, -14, -27, -28, -19, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, -3, -22, -22, 46, -33, 18, -3, -17, 3, 1, -12, -25, -14, -14, -15, -15, -7, 40, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" set Tmat(gon350) " 10, 0, 0, 4, 0, 93, 0, 0, -19, 29, 1, 0, -17, 19, 20, -14, 0, -3, -30, -25, 51, 5, 0, -12, 4, -2, -35, 51, -4, 0, -8, 5, 4, 1, -7, 33, -4, 0, -5, -24, -17, 11, -29, -13, 27, -1, 0, -16, 6, 9, -21, -4, 5, -13, 18, -7, 0, -7, -25, -18, 18, -30, -11, 22, -14, 28, -4, 0, -4, -19, -13, 14, -23, -8, 19, -9, 21, 23, 0, 0, -11, 15, 9, -20, 5, 8, -18, 7, -19, -14, 20, 3, 0, -18, -2, 0, -25, -7, -5, -16, -2, -15, -14, -3, 56, 0, 0, -14, 8, 11, -16, -4, 7, -11, 10, -11, -7, 6, 0, 12, -2, 0, -13, 2, 6, -20, -4, 6, -15, 18, -14, -11, 4, -4, 10, 28, 6, 0, 1, 5, 3, -18, 5, 0, -11, 2, -13, -9, 6, 4, 2, 1, 10, 4, 0, -2, 2, 1, -13, -5, -1, -3, 2, -7, -4, 4, 2, 1, 0, 8, 11, 0, 0, 2, -18, -12, 5, -21, -11, 22, -10, 16, 14, -13, -11, -9, -12, -6, 0, 21, -24, 0, -4, -35, -29, 35, -30, -3, -9, -23, -1, -3, -24, -34, -19, -12, -22, -23, -14, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, 0, -1, -18, -17, 42, -27, 15, -1, -14, 5, 2, -10, -20, -11, -12, -12, -12, -4, 39, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" set val [set Tmat($mat)] set val [string map [list "\n" "" " " ""] $val] set Lv [split $val ,] set Laa [split $amino_acid_order ""] #lappend Laa "" set naa [llength $Laa] set ix 0 ; set min 99999999. ; set ave 0.0 for {set i 0} {$i < $naa} {incr i} { set a [lindex $Laa $i] for {set j 0} {$j <= $i} {incr j} { set b [lindex $Laa $j] set v [lindex $Lv $ix] set min [expr {$v<$min?$v:$min}] if {$a != $b} { set ave [expr {$ave + $v}] } set mtx($a,$b) [expr {$v * $scale}] set mtx($b,$a) [expr {$v * $scale}] incr ix } } set mtx(average) [expr {-1.0*$ave/($naa*($naa-1.)/2.)}] set min [expr {$min*$scale}] if {$positive && $min < 0.} { foreach k [array names mtx "*,*"] { set nv [expr {[set mtx($k)] - $min}] set mtx($k) $nv } } set mtx(laa) $amino_acid_order if {$Centre} { set M [list] foreach a $Laa { set tmp [list] foreach b $Laa { lappend tmp [set mtx($a,$b)] } lappend M $tmp } set M [CentreMatrice $M] foreach a $Laa l $M { foreach b $Laa c $l { set mtx($a,$b) $c } } } return [array get mtx] } proc InitCode3l1l {} { global AutreCodeLuc set Lcd {I ILE L LEU M MET M MSE V VAL Y TYR Y PTR W TRP C CYH C CYS C SEC R ARG E GLU Q GLN K LYS K LYX D ASP N ASN A ALA F PHE S SER S SEP P PRO P CPR H HIS G GLY T THR T TPO O HOH} foreach {Nom AA} $Lcd { set AutreCodeLuc($AA) $Nom if {$AA eq "MSE" || $AA eq "CPR" || $AA eq "CYH" || $AA eq "SEC" || $AA eq "PTR" || $AA eq "SEP" || $AA eq "TPO"} {continue} set AutreCodeLuc($Nom) $AA } return } proc InitComparaison {} { global ListeDesSimilarites ListeDesAcidesAmines # liste acides amines de Clustal set ListeDesAcidesAmines {A B C D E F G H I K L M N P Q R S T V W X Y Z} #set ListeDesAcidesAmines {A C D E F G H I K L M N P Q R S T V W Y Z} set ListeDesSimilarites {1 2 3 4 5 Z} # 1 = A,I,L,M,V # 2 = P,A,G,S,T # 3 = D,E,Q,N # 4 = F,Y,W # 5 = K,R,H # Z si sequence manquante return } proc InitConsensus {} { global ListeDesConsensusDuGroupe LNDG LongueurTotale set Cs [string repeat "#" $LongueurTotale] unset -nocomplain ListeDesConsensusDuGroupe foreach NomDeGroupe $LNDG { set ListeDesConsensusDuGroupe($NomDeGroupe) $Cs } return } proc InitContextMenu {} { global OrdEtcDir image create photo PT -file [file join $OrdEtcDir hand14.gif] image create photo ZP -file [file join $OrdEtcDir loupeplus.gif] image create photo ZM -file [file join $OrdEtcDir loupemoins.gif] image create photo RP -file [file join $OrdEtcDir rotateplus.gif] image create photo RM -file [file join $OrdEtcDir rotatemoins.gif] image create photo WE -file [file join $OrdEtcDir noeudecarte.gif] image create photo WS -file [file join $OrdEtcDir noeudserre.gif] image create photo HE -file [file join $OrdEtcDir heightecarte.gif] image create photo HS -file [file join $OrdEtcDir heightserre.gif] return } proc InitCouleursGroupes {} { global LNDG TypeCons TypeText Couleurs set NombreDeGroupes [llength $LNDG] if {$NombreDeGroupes > 1} { set ListeCol [Nuancier $NombreDeGroupes] set i 1 foreach col $ListeCol { lappend TypeCons "CoulG$i" set TypeText(CoulG$i) "Identity Group $i" set Couleurs(CoulG$i) $col incr i } } return } proc InitDBMisynpat {} { package require sqlite3 LesDefauts Mode batch set table " - synthetase { . pk_synthetase P . sName V5 . lName V40 . accession V16 . dateMod V10 . class V1 . seq T } - biblio { . pk_biblio P . pmid V16 . accepted I -1 : pas vu ; 0 refuse ; 1 accepte . abstract T . sJournal V64 . auteurs T . pages V10 . datem V10 . datey V10 . titre T . volume V4 } - mutation { . pk_mutation P . pk_biblio I . pk_disease I . pk_synthetase I . variant1 V16 . variant2 V16 } - disease { . pk_disease P . sdisease V16 . ldisease T . omim V10 . organs T } - ln_biblio_synthetase { . pk_biblio I . pk_synthetase I } - ln_disease_synthetase { . pk_disease I . pk_synthetase I } - structure { . pk_structure P . pk_synthetase I . id V4 NULL if model from PHYRES2 . seqname V32 . pcid R identity percent with human mito } " set FichierSql "./misynpat.sql" if {[file exists $FichierSql]} { file delete $FichierSql } set db [FabriqueDeTables $table "" misynpat.sql] set LsName [list AARS2 CARS2 DARS2 EARS2 FARS2 GARS HARS2 IARS2 KARS LARS2 MARS2 NARS2 PARS2 RARS2 SARS2 TARS2 VARS2 WARS2 YARS2] set LlName [list "Alanyl-tRNA synthetase" "Cysteinyl-tRNA synthetase" "Aspartyl-tRNA synthetase" "Glutamyl-tRNA synthetase" "Phenylalanyl-tRNA synthetase" "Glycyl-tRNA synthetase" "Histidyl-tRNA synthetase" "Isoleucyl-tRNA synthetase" "Lysyl-tRNA synthetase" "Leucyl-tRNA synthetase" "Methionyl-tRNA synthetase" "Asparaginyl-tRNA synthetase" "Prolyl-tRNA synthetase" "Arginyl-tRNA synthetase" "Seryl-tRNA synthetase" "Threonyl-tRNA synthetase" "Valyl-tRNA synthetase" "Tryptophanyl-tRNA synthetase" "Tyrosyl-tRNA synthetase"] set LpdbName [list AARS2 CARS2 "4AH6" EARS2 "3CMQ" GARS HARS2 IARS2 KARS LARS2 MARS2 NARS2 PARS2 RARS2 SARS2 TARS2 VARS2 WARS2 "2PID"] set Lclass [list "2" "1" "2" "1" "2" "2" "2" "1" "2" "1" "1" "2" "2" "1" "2" "2" "1" "1" "1"] set Laccess [list ] set Lsdisease [list "LBSL" "PCH6" "MLASA" "HUPRA" "PS" "ARSAL" "" "" "" "" "" "" "" "" "" ] set Lldisease [list "Leukoencephalopathy with Brain stem and Spinal cord involvement and Lactate elevation" "PontoCerebellar Hypoplasia type 6" "Myopathy, Lactic Acidosis and Sideroblastic Anemia" "HyperUricemia, Pulmonary hypertension and Renal failure in infancy and Alkalosis" "Perrault Syndrome" "Autosomal Recessive Spastic Ataxia with Leukoencephalopathy" "Early-onset Leukoencephalopathy with Thalamus and Brain stem involvment and high Lactate" "Infantil mitochondrial Alpers Encephalopathy" "Perrault Syndrome, with premature ovarian failure and hearing loss" "Early onset mt encephalopathy: microcephaly and epilepsy associated with isolated deficiency of the mt respiratory chain complex I" "Early onset mt encephalopathy: axial hypotonia and severe psychomotor delay associated with multiple mt respiratory chain defects" "Cataracts, growth hormone deficiency with short stature, partial sensorineural deafness, and peripheral neuropathy or Leigh Syndrome" "MERRF-like syndrome with severe myoclonic epilepsy, progressive spastic tetraparesis, impairment of vision, hearing and cognitive decline" "Leigh Syndrome with congenital auditory neuropathy and nonsyndromic hearing loss" "Infantil Mitochondrial Cardiomyopathy"] $db eval {begin transaction} set ::VariablesAuDepart [info globals] set Defauts(Mode) batch foreach s $LsName l $LlName c $Lclass { #set sys [string index $s 0] #set file [file join $MisyDir alignements ${sys}_VeryLastFinal.xml] #LoadingAlignment $file #"set seq [set ::Sequences($a)] #set ssg [string map {"." "" - ""} $seq] $db eval {insert into synthetase values (NULL,$s,$l,NULL,"20150101",$c,$ssg)} } foreach sd $Lsdisease ld $Lldisease { $db eval {insert into disease values (NULL,$sd,$ld,NULL,NULL)} } $db eval {commit} return } proc InitDataProfile {} { global LPV set LPV {} set Lcalls [::profiler::sortFunctions calls] foreach e $Lcalls { lassign $e p v set ProcP($p) $v } set Larun [::profiler::sortFunctions avgRuntime] foreach e $Larun { lassign $e p v lappend ProcP($p) $v } set Ltrun [::profiler::sortFunctions totalRuntime] foreach e $Ltrun { lassign $e p v lappend ProcP($p) $v } set Lexrn [::profiler::sortFunctions exclusiveRuntime] foreach e $Lexrn { lassign $e p v lappend ProcP($p) $v } set Laern [::profiler::sortFunctions avgExclusiveRuntime] foreach e $Laern { lassign $e p v lappend ProcP($p) $v } foreach n [array names ProcP] { lassign [set ProcP($n)] c a t x e if {! $c} {continue} if {$a == ""} {set a 0} if {$t == ""} {set t 0} if {$x == ""} {set x 0} if {$e == ""} {set e 0} set lv [list [string range $n 2 end] $c $a $t $x $e] lappend LPV $lv } return } proc InitEtAfficheNomSeqSecStr {widget} { global NomEtSeqAssPDB global Sequences global LNOrdali set TextAffiche "" foreach elt $NomEtSeqAssPDB { scan $elt "%s %s %s" PDB NomSeqAss MolId if {[regexp {^[0-9]} $NomSeqAss]} { set NomSeq [lindex $LNOrdali $NomSeqAss] } else { set NomSeq $NomSeqAss } set TextAffiche "[set TextAffiche][set NomSeq]\nPDB_[set MolId]\nSec. Str.\n\n" } $widget delete 0.0 end $widget insert end [set TextAffiche] $widget configure -state disabled return } proc InitFolders {folder} { global db imapID mb foreach info [::imap4::mboxinfo $imapID] { set mb($folder,$info) [::imap4::mboxinfo $imapID $info] } # Now read get the total number of messages # Carefull, this may be an empty box if {[info exists mb($folder,exists)]} { set nbMess $mb($folder,exists) } elseif {[info exists mb($folder,uidnext)]} { set nbMess [expr {$mb($folder,uidnext) - 1}] } else { set nbMess 0 } if {$nbMess == 0} {return} # fetch flags for all messages set Lf [::imap4::fetch $imapID 1:$nbMess from to subject date bodystructure] foreach {from to subject date bodystructure} $Lf { } return } proc InitFourmis {} { global TFB PAD set taille [expr {($TFB(lenFourmi) + $TFB(headFourmi))/2}] for {set i 0} {$i < $TFB(nFourmis)} {incr i} { set ok 0 while {! $ok} { set x [expr {round($TFB(dimX)*rand())}] set y [expr {round($TFB(dimY)*rand())}] # y a t il qq chose dans la boite # qui va contenir la fourmi ? set x1 [expr {$x - $taille}] set x2 [expr {$x + $taille}] set y1 [expr {$y - $taille}] set y2 [expr {$y + $taille}] if {[$PAD find overlapping $x1 $y1 $x2 $y2] == {}} { set ok 1 } } set x1 [expr {$x - $TFB(lenFourmi)/2}] set x2 [expr {$x + $TFB(lenFourmi)/2}] set y1 [expr {$y - $TFB(widFourmi)/2}] set y2 [expr {$y + $TFB(widFourmi)/2}] $PAD create polygon $x1 $y1 $x1 $y2 $x2 $y2 $x2 $y1 -fill $TFB(colFourmi) -outline $TFB(colFourmi) -tags [list fourmi corps "F$i"] set xc $x2 ; set yc $y set x1 [expr {$xc - $TFB(headFourmi)/2}] set x2 [expr {$xc + $TFB(headFourmi)/2}] set y1 [expr {$yc - $TFB(headFourmi)/2}] set y2 [expr {$yc + $TFB(headFourmi)/2}] $PAD create polygon $x1 $y1 $x2 $yc $x1 $y2 -fill $TFB(colFourmi) -outline $TFB(colFourmi) -tags [list fourmi tete "F$i"] set TFB(F$i,oldAng) 0 set TFB(F$i,angle) [BonAngle [expr {359.*rand()}]] set TFB(F$i,hasBall) 0 set TFB(F$i,lastBall) -1 set TFB(F$i,col) "" set TFB(F$i,angle) 45. TourneFourmi "F$i" OnSortPas "F$i" lappend TFB(LFourmis) $i } return } proc InitGeneticCode {} { global CodeGen set tcode " XXX X XXX PHE F TTT TTC LEU L TTA TTG CTT CTC CTA CTG ILE I ATT ATC ATA MET M ATG VAL V GTT GTC GTA GTG SER S TCT TCC TCA TCG AGT AGC PRO P CCT CCC CCA CCG THR T ACT ACC ACA ACG ALA A GCT GCC GCA GCG TYR Y TAT TAC HIS H CAT CAC GLN Q CAA CAG ASN N AAT AAC LYS K AAA AAG ASP D GAT GAC GLU E GAA GAG CYS C TGT TGC TRP W TGG TGA ARG R CGT CGC CGA CGG AGA AGG GLY G GGT GGC GGA GGG " set Lc [split $tcode \n] foreach l $Lc { if {$l eq ""} {continue} set Lv [split [string trim $l] " "] set aa3 [lindex $Lv 0] set aa1 [lindex $Lv 1] foreach cdn [lrange $Lv 2 end] { lappend CodeGen($aa3) $cdn set CodeGen($cdn) $aa1 } } return } proc InitGon250 {} { set lgon [list "# benner-gonnet matrix" "# pam := 250" "# print (DayhoffM (NewLogPAM1, pam));" "# DayMatrix(Peptide, pam=250, Simil: max=14.152, min=-5.161, max offdiag=5.080," "# del=-19.814-1.396*(k-1))" " A R N D C Q E G H I L K M F P S T W Y V B Z X *" " 2.4 -0.6 -0.3 -0.3 0.5 -0.2 0.0 0.5 -0.8 -0.8 -1.2 -0.4 -0.7 -2.3 0.3 1.1 0.6 -3.6 -2.2 0.1 0.0 0.0 0.0 -5.2" " -0.6 4.7 0.3 -0.3 -2.2 1.5 0.4 -1.0 0.6 -2.4 -2.2 2.7 -1.7 -3.2 -0.9 -0.2 -0.2 -1.6 -1.8 -2.0 0.0 0.0 0.0 -5.2" " -0.3 0.3 3.8 2.2 -1.8 0.7 0.9 0.4 1.2 -2.8 -3.0 0.8 -2.2 -3.1 -0.9 0.9 0.5 -3.6 -1.4 -2.2 0.0 0.0 0.0 -5.2" " -0.3 -0.3 2.2 4.7 -3.2 0.9 2.7 0.1 0.4 -3.8 -4.0 0.5 -3.0 -4.5 -0.7 0.5 0.0 -5.2 -2.8 -2.9 0.0 0.0 0.0 -5.2" " 0.5 -2.2 -1.8 -3.2 11.5 -2.4 -3.0 -2.0 -1.3 -1.1 -1.5 -2.8 -0.9 -0.8 -3.1 0.1 -0.5 -1.0 -0.5 0.0 0.0 0.0 0.0 -5.2" " -0.2 1.5 0.7 0.9 -2.4 2.7 1.7 -1.0 1.2 -1.9 -1.6 1.5 -1.0 -2.6 -0.2 0.2 0.0 -2.7 -1.7 -1.5 0.0 0.0 0.0 -5.2" " 0.0 0.4 0.9 2.7 -3.0 1.7 3.6 -0.8 0.4 -2.7 -2.8 1.2 -2.0 -3.9 -0.5 0.2 -0.1 -4.3 -2.7 -1.9 0.0 0.0 0.0 -5.2" " 0.5 -1.0 0.4 0.1 -2.0 -1.0 -0.8 6.6 -1.4 -4.5 -4.4 -1.1 -3.5 -5.2 -1.6 0.4 -1.1 -4.0 -4.0 -3.3 0.0 0.0 0.0 -5.2" " -0.8 0.6 1.2 0.4 -1.3 1.2 0.4 -1.4 6.0 -2.2 -1.9 0.6 -1.3 -0.1 -1.1 -0.2 -0.3 -0.8 2.2 -2.0 0.0 0.0 0.0 -5.2" " -0.8 -2.4 -2.8 -3.8 -1.1 -1.9 -2.7 -4.5 -2.2 4.0 2.8 -2.1 2.5 1.0 -2.6 -1.8 -0.6 -1.8 -0.7 3.1 0.0 0.0 0.0 -5.2" " -1.2 -2.2 -3.0 -4.0 -1.5 -1.6 -2.8 -4.4 -1.9 2.8 4.0 -2.1 2.8 2.0 -2.3 -2.1 -1.3 -0.7 0.0 1.8 0.0 0.0 0.0 -5.2" " -0.4 2.7 0.8 0.5 -2.8 1.5 1.2 -1.1 0.6 -2.1 -2.1 3.2 -1.4 -3.3 -0.6 0.1 0.1 -3.5 -2.1 -1.7 0.0 0.0 0.0 -5.2" " -0.7 -1.7 -2.2 -3.0 -0.9 -1.0 -2.0 -3.5 -1.3 2.5 2.8 -1.4 4.3 1.6 -2.4 -1.4 -0.6 -1.0 -0.2 1.6 0.0 0.0 0.0 -5.2" " -2.3 -3.2 -3.1 -4.5 -0.8 -2.6 -3.9 -5.2 -0.1 1.0 2.0 -3.3 1.6 7.0 -3.8 -2.8 -2.2 3.6 5.1 0.1 0.0 0.0 0.0 -5.2" " 0.3 -0.9 -0.9 -0.7 -3.1 -0.2 -0.5 -1.6 -1.1 -2.6 -2.3 -0.6 -2.4 -3.8 7.6 0.4 0.1 -5.0 -3.1 -1.8 0.0 0.0 0.0 -5.2" " 1.1 -0.2 0.9 0.5 0.1 0.2 0.2 0.4 -0.2 -1.8 -2.1 0.1 -1.4 -2.8 0.4 2.2 1.5 -3.3 -1.9 -1.0 0.0 0.0 0.0 -5.2" " 0.6 -0.2 0.5 0.0 -0.5 0.0 -0.1 -1.1 -0.3 -0.6 -1.3 0.1 -0.6 -2.2 0.1 1.5 2.5 -3.5 -1.9 0.0 0.0 0.0 0.0 -5.2" " -3.6 -1.6 -3.6 -5.2 -1.0 -2.7 -4.3 -4.0 -0.8 -1.8 -0.7 -3.5 -1.0 3.6 -5.0 -3.3 -3.5 14.2 4.1 -2.6 0.0 0.0 0.0 -5.2" " -2.2 -1.8 -1.4 -2.8 -0.5 -1.7 -2.7 -4.0 2.2 -0.7 0.0 -2.1 -0.2 5.1 -3.1 -1.9 -1.9 4.1 7.8 -1.1 0.0 0.0 0.0 -5.2" " 0.1 -2.0 -2.2 -2.9 0.0 -1.5 -1.9 -3.3 -2.0 3.1 1.8 -1.7 1.6 0.1 -1.8 -1.0 0.0 -2.6 -1.1 3.4 0.0 0.0 0.0 -5.2" " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.2" " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.2" " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.2" " -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 -5.2 1"] return $lgon } proc InitHydroAA {} { global THydroAA array set THydroAA {A -1.6 B 0.0 C -2.0 D 9.2 E 8.2 F -3.7 G -1.0 H 3.0 I -3.1 J 0.0 K 8.8 L -2.8 M -3.4 N 4.8 O 0.0 P 0.2 Q 4.1 R 12.3 S -0.6 T -1.2 U 0.0 V -2.6 W -1.9 X 0.0 Y 0.7 Z 0.0} return } proc InitIDMapping {} { global TIDMap if {[info exists TIDMap]} { return } set Ll [LesLignesDuFichier [file join $::OrdSrcDir idmapping.txt]] set TIDMap(Lcat) [list] set TIDMap(Ldbs) [list] set TIDMap(Lids) [list] foreach l $Ll { set l [string trim $l] if {[string index $l 0] eq "#" || $l eq ""} { continue } if {[string range $l 0 8] eq "Category:"} { set cat [string range $l 9 end] lappend TIDMap(Lcat) $cat set TIDMap($cat) [list] continue } set Lv [split $l \t] lassign $Lv name id sens lappend TIDMap($cat) $name lappend TIDMap(Ldbs) $name lappend TIDMap(Lids) $id set TIDMap($name,ID) $id set TIDMap($name,sens) $sens } return } proc InitInfoArrays {} { global TDesHydro TDesSeqnames TDespI TDesAccess TDesPhylum TDesGO TDuLineage TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesBId TDesDescriptifs TDesMolW TDesStatus TDesWeight TDesSense TDesScore TDesScore TDesLength foreach t {TDesHydro TDesSeqnames TDespI TDesAccess TDesPhylum TDesGO TDuLineage TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesBId TDesDescriptifs TDesMolW} { unset -nocomplain $t array set $t [list] } return } proc InitInfoSeqs {{liste ""}} { global {*}[info globals "TD*"] LNOrdali LNSeqlab set Ltab [info globals "TD*"] if {$liste == {}} { if {[QuelMode] ne "seqlab"} { set liste $LNOrdali } else { set liste $LNSeqlab } } array set Tid [list] foreach n $liste { if {$n eq ""} {continue} foreach t $Ltab { if {! [info exists ${t}($n)]} { if {$t eq "TDesFragment" || $t eq "TDesComplex" || $t eq "TDesTaxId"} { set v 0 } elseif {$t eq "TDesHydro" || $t eq "TDesMolW" || $t eq "TDespI"} { set v 0.0 } elseif {$t eq "TDesAccess" || $t eq "TDesSeqnames" || $t eq "TDesBId"} { set v $n } else { set v "" } set ${t}($n) $v } } if {[set TDesOrganismes($n)] eq ""} { set id [set TDesTaxId($n)] if {[string is integer -strict $id] && $id > 0} { lappend Tid(Lid) $id lappend Tid(Ln) $n } } } if {[array names Tid] != {} } { array set Tres [eSummaryREST taxonomy $Tid(Lid)] foreach id $Tid(Lid) n $Tid(Ln) { if {[info exists Tres($id,ScientificName)]} { set TDesOrganismes($n) [set Tres($id,ScientificName)] } } } update return } proc InitLesDefauts {} { global OrdaliDir OrdTmpDir OrdEtcDir OrdHlpDir OrdLibDir OrdBinDir OuiOuNonToujoursParDefaut GenomeOuCollection if {[info exists env(ORDALITMP)]} { set OrdTmpDir $env(ORDALITMP) } else { if {[info exists env(TEMP)]} { set OrdTmpDir $env(TEMP) } elseif {[info exists env(TMP)]} { set OrdTmpDir $env(TMP) } else { set OrdTmpDir "." } } set OrdHlpDir [file join $OrdaliDir help] set OrdEtcDir [file join $OrdaliDir etc] set OrdBinDir [file join $OrdaliDir bin] set OuiOuNonToujoursParDefaut 0 set GenomeOuCollection "Collection" LesDefauts return } proc InitMasses {} { global TMassesAA set TMassesAA(A) 71.0788 set TMassesAA(R) 156.1875 set TMassesAA(N) 114.1038 set TMassesAA(D) 115.0886 set TMassesAA(C) 103.1388 set TMassesAA(E) 129.1155 set TMassesAA(Q) 128.1307 set TMassesAA(G) 57.0519 set TMassesAA(H) 137.1411 set TMassesAA(I) 113.1594 set TMassesAA(L) 113.1594 set TMassesAA(K) 128.1741 set TMassesAA(M) 131.1926 set TMassesAA(F) 147.1766 set TMassesAA(P) 97.1167 set TMassesAA(S) 87.0782 set TMassesAA(T) 101.1051 set TMassesAA(W) 186.2132 set TMassesAA(Y) 163.1760 set TMassesAA(V) 99.1326 set TMassesAA(U) 150.0388 set TMassesAA(O) 237.3018 set TMassesAA(B) [expr {($TMassesAA(D)+$TMassesAA(N))/2.}] set TMassesAA(Z) [expr {($TMassesAA(E)+$TMassesAA(Q))/2.}] set TMassesAA(J) [expr {($TMassesAA(I)+$TMassesAA(L))/2.}] set TMassesAA(X) 0.0 set TMassesAA(x) 0.0 set TMassesAA(H2O) 18.01524 return } proc InitMatrix {matrix} { global Cbl Mbl array set Cbl [InitPAM35] switch $matrix { "pam15" {array set Mbl [InitPAM15]} "pam35" {array set Mbl [InitPAM35]} "blosum62_p" {array set Mbl [InitClustalMatrix blosum62 1 1.]} "blosum62_n" {array set Mbl [InitClustalMatrix blosum62 0 1.]} } return } proc InitPAM15 {} { set pam "Default scoring matrix used by GAP for the comparison of protein sequences. GAP uses the method of Needleman/Wunsch/Sellers to make alignments. Dayhoff table (Schwartz, R. M. and Dayhoff, M. O. \[1979\] in Atlas of Protein Sequence and Structure, Dayhoff, M. O. Ed, pp. 353-358, National Biomedical Research Foundation, Washington D.C.) rescaled by dividing each value by the sum of its row and column, and normalizing to a mean of 0 and standard deviation of 1.0. The value for FY (Phe-Tyr) = RW = 1.425. Perfect matches are set to 1.5 and no matches on any row are better than perfect matches. Table used by Gribskov and Burgess NAR 14(16) 6745-6763 December 29, 1986 12:46 A B C D E F G H I K L M N P Q R S T V W Y Z .. 1.5 0.2 0.3 0.3 0.3 -0.5 0.7 -0.1 0.0 0.0 -0.1 0.0 0.2 0.5 0.2 -0.3 0.4 0.4 0.2 -0.8 -0.3 0.2 A 1.1 -0.4 1.1 0.7 -0.7 0.6 0.4 -0.2 0.4 -0.5 -0.3 1.1 0.1 0.5 0.1 0.3 0.2 -0.2 -0.7 -0.3 0.6 B 1.5 -0.5 -0.6 -0.1 0.2 -0.1 0.2 -0.6 -0.8 -0.6 -0.3 0.1 -0.6 -0.3 0.7 0.2 0.2 -1.2 1.0 -0.6 C 1.5 1.0 -1.0 0.7 0.4 -0.2 0.3 -0.5 -0.4 0.7 0.1 0.7 0.0 0.2 0.2 -0.2 -1.1 -0.5 0.9 D 1.5 -0.7 0.5 0.4 -0.2 0.3 -0.3 -0.2 0.5 0.1 0.7 0.0 0.2 0.2 -0.2 -1.1 -0.5 1.1 E 1.5 -0.6 -0.1 0.7 -0.7 1.2 0.5 -0.5 -0.7 -0.8 -0.5 -0.3 -0.3 0.2 1.3 1.4 -0.7 F 1.5 -0.2 -0.3 -0.1 -0.5 -0.3 0.4 0.3 0.2 -0.3 0.6 0.4 0.2 -1.0 -0.7 0.3 G 1.5 -0.3 0.1 -0.2 -0.3 0.5 0.2 0.7 0.5 -0.2 -0.1 -0.3 -0.1 0.3 0.5 H 1.5 -0.2 0.8 0.6 -0.3 -0.2 -0.3 -0.3 -0.1 0.2 1.1 -0.5 0.1 -0.2 I 1.5 -0.3 0.2 0.4 0.1 0.4 0.8 0.2 0.2 -0.2 0.1 -0.6 0.4 K 1.5 1.3 -0.4 -0.3 -0.1 -0.4 -0.4 -0.1 0.8 0.5 0.3 -0.2 L 1.5 -0.3 -0.2 0.0 0.2 -0.3 0.0 0.6 -0.3 -0.1 -0.1 M 1.5 0.0 0.4 0.1 0.3 0.2 -0.3 -0.3 -0.1 0.4 N 1.5 0.3 0.3 0.4 0.3 0.1 -0.8 -0.8 0.2 P 1.5 0.4 -0.1 -0.1 -0.2 -0.5 -0.6 1.1 Q 1.5 0.1 -0.1 -0.3 1.4 -0.6 0.2 R 1.5 0.3 -0.1 0.3 -0.4 0.0 S 1.5 0.2 -0.6 -0.3 0.1 T 1.5 -0.8 -0.1 -0.2 V 1.5 1.1 -0.8 W 1.5 -0.6 Y 1.1 Z" set pam [split $pam \n] set header 0 set go 0 foreach l $pam { set l [string trim $l] if {$l eq ""} { continue } if {[string range $l end-1 end] eq "\.\."} { set go 1 set laa [string range $l 0 end-2] regsub -all { +} $laa " " laa set laa [split $laa " "] set i 0 continue } if {! $go} { continue } # lit scores regsub -all { +|\t} $l " " l set l [split $l " "] set a [lindex $laa $i] foreach b [lrange $laa $i end] v [lrange $l 0 end-1] { set mtx($a,$b) $v set mtx($b,$a) $v } incr i } set mtx(laa) [join $laa ""] return [array get mtx] } proc InitPAM35 {} { set pam " Default symbol comparison table used by GAP for the comparison of protein sequences. GAP uses the method of Needleman/Wunsch/Sellers to make alignments. Dayhoff table (Schwartz, R. M. and Dayhoff, M. O. (1979) in Atlas of Protein Sequence and Structure, Dayhoff, M. O. Ed, pp. 353-358, National Biomedical Research Foundation, Washington D.C.) rescaled by dividing each value by the sum of its row and column, and normalizing to a mean of 0 and standard deviation of 1.0. The value for FY (Phe-Tyr) = RW = 1.425. Perfect matches are set to 3.5 and no matches on any row are better than perfect matches. Table used by Gribskov and Burgess NAR 14(16) 6745-6763 December 29, 1986 12:46 A B C D E F G H I K L M N P Q R S T V W Y Z .. 3.5 0.2 0.3 0.3 0.3 -0.5 0.7 -0.1 0.0 0.0 -0.1 0.0 0.2 0.5 0.2 -0.3 0.4 0.4 0.2 -0.8 -0.3 0.2 A 1.1 -0.4 1.1 0.7 -0.7 0.6 0.4 -0.2 0.4 -0.5 -0.3 1.1 0.1 0.5 0.1 0.3 0.2 -0.2 -0.7 -0.3 0.6 B 3.5 -0.5 -0.6 -0.1 0.2 -0.1 0.2 -0.6 -0.8 -0.6 -0.3 0.1 -0.6 -0.3 0.7 0.2 0.2 -1.2 1.0 -0.6 C 3.5 1.0 -1.0 0.7 0.4 -0.2 0.3 -0.5 -0.4 0.7 0.1 0.7 0.0 0.2 0.2 -0.2 -1.1 -0.5 0.9 D 3.5 -0.7 0.5 0.4 -0.2 0.3 -0.3 -0.2 0.5 0.1 0.7 0.0 0.2 0.2 -0.2 -1.1 -0.5 1.1 E 3.5 -0.6 -0.1 0.7 -0.7 1.2 0.5 -0.5 -0.7 -0.8 -0.5 -0.3 -0.3 0.2 1.3 1.4 -0.7 F 3.5 -0.2 -0.3 -0.1 -0.5 -0.3 0.4 0.3 0.2 -0.3 0.6 0.4 0.2 -1.0 -0.7 0.3 G 3.5 -0.3 0.1 -0.2 -0.3 0.5 0.2 0.7 0.5 -0.2 -0.1 -0.3 -0.1 0.3 0.5 H 3.5 -0.2 0.8 0.6 -0.3 -0.2 -0.3 -0.3 -0.1 0.2 1.1 -0.5 0.1 -0.2 I 3.5 -0.3 0.2 0.4 0.1 0.4 0.8 0.2 0.2 -0.2 0.1 -0.6 0.4 K 3.5 1.3 -0.4 -0.3 -0.1 -0.4 -0.4 -0.1 0.8 0.5 0.3 -0.2 L 3.5 -0.3 -0.2 0.0 0.2 -0.3 0.0 0.6 -0.3 -0.1 -0.1 M 3.5 0.0 0.4 0.1 0.3 0.2 -0.3 -0.3 -0.1 0.4 N 3.5 0.3 0.3 0.4 0.3 0.1 -0.8 -0.8 0.2 P 3.5 0.4 -0.1 -0.1 -0.2 -0.5 -0.6 1.1 Q 3.5 0.1 -0.1 -0.3 0.2 -0.6 0.2 R 3.5 0.3 -0.1 0.3 -0.4 0.0 S 3.5 0.2 -0.6 -0.3 0.1 T 3.5 -0.8 -0.1 -0.2 V 3.5 1.1 -0.8 W 3.5 -0.6 Y 1.1 Z " set pam [split $pam \n] set header 0 set go 0 foreach l $pam { set l [string trim $l] if {$l eq ""} { continue } if {[string range $l end-1 end] eq "\.\."} { set go 1 set laa [string range $l 0 end-2] regsub -all { +} $laa " " laa set laa [split $laa " "] set i 0 continue } if {! $go} { continue } # lit scores regsub -all { +|\t} $l " " l set l [split $l " "] set a [lindex $laa $i] foreach b [lrange $laa $i end] v [lrange $l 0 end-1] { set mtx($a,$b) $v set mtx($b,$a) $v } incr i } set mtx(laa) [join $laa ""] return [array get mtx] } proc InitPETMatrix {} { # The 250 PAM PET91 matrix (Jones et al., 1992) # LIT:1814076 PMID:1633570 # Jones, D.T., Taylor, W.R. and Thornton, J.M. # The rapid generation of mutation data matrices from protein sequences # CABIOS 8, 275-282 (1992) # rows = ARNDCQEGHILKMFPSTWYV, cols = ARNDCQEGHILKMFPSTWYV set t " 2. -1.,5. 0.,0.,3. 0.,-1.,2.,5. -1.,-1.,-1.,-3.,11. -1.,2.,0.,1.,-3.,5. -1.,0.,1.,4.,-4.,2.,5. 1.,0.,0.,1.,-1.,-1.,0.,5. -2.,2.,1.,0.,0.,2.,0.,-2.,6. 0.,-3.,-2.,-3.,-2.,-3.,-3.,-3.,-3.,4. -1.,-3.,-3.,-4.,-3.,-2.,-4.,-4.,-2.,2.,5. -1.,4.,1.,0.,-3.,2.,1.,-1.,1.,-3.,-3.,5. -1.,-2.,-2.,-3.,-2.,-2.,-3.,-3.,-2.,3.,3.,-2.,6. -3.,-4.,-3.,-5.,0.,-4.,-5.,-5.,0.,0.,2.,-5.,0.,8. 1.,-1.,-1.,-2.,-2.,0.,-2.,-1.,0.,-2.,0.,-2.,-2.,-3.,6. 1.,-1.,1.,0.,1.,-1.,-1.,1.,-1.,-1.,-2.,-1.,-1.,-2.,1.,2. 2.,-1.,1.,-1.,-1.,-1.,-1.,-1.,-1.,1.,-1.,-1.,0.,-2.,1.,1.,2. -4.,0.,-5.,-5.,1.,-3.,-5.,-2.,-3.,-4.,-2.,-3.,-3.,-1.,-4.,-3.,-4.,15. -3.,-2.,-1.,-2.,2.,-2.,-4.,-4.,4.,-2.,-1.,-3.,-2.,5.,-3.,-1.,-3.,0.,9. 1.,-3.,-2.,-2.,-2.,-3.,-2.,-2.,-3.,4.,2.,-3.,2.,0.,-1.,-1.,0.,-3.,-3.,4. " set lt [split $t "\n"] set aa "ARNDCQEGHILKMFPSTWYV" set laa [split $aa ""] set i 0 foreach a $laa { set l [lindex $lt $i] set l [split $l ,] set j 0 foreach b [lrange $laa 0 $i] { set T($a,$b) [lindex $l $j] set T($b,$a) [lindex $l $j] incrj } incr i } set Lm [array get T] set Lm [AddBJToMatrix $Lm] return $Lm } proc InitPoints {} { global LesPointsDuGroupe LNDG LongueurTotale unset -nocomplain LesPointsDuGroupe set nb [string repeat " " $LongueurTotale] foreach NomDeGroupe $LNDG { set LesPointsDuGroupe($NomDeGroupe) $nb } return } proc InitPop {NbIndiv} { set LesIndividus {} #pour chaque individu de la population for {set i 0} {$i < $NbIndiv} {incr i} { #on cree un individu aleatoire #on l'evalue set LIndividu [CreeIndividu] if {[Appartient $LIndividu $LesIndividus]} {continue} lappend LesIndividus $LIndividu } #on classe les individus de la population dans l'ordre return [LesIndividusClasses $LesIndividus] } proc InitPosRel2Abs {fic Ln} { global PosRA if {[info exists PosRA]} {unset PosRA} foreach n $Ln { set SeqGap [FromMacsims $fic $n "SeqData"] regsub -all -nocase {[^A-Z]} $SeqGap "" Seq set PosRelative 0 set PosAbsolue 0 foreach C [split $SeqGap ""] { incr PosAbsolue if {$C ne "-"} { incr PosRelative #set PosRA($n,Relative,$PosRelative) $PosAbsolue set PosRA($n,Absolue,$PosRelative) $PosAbsolue } #set PosRA($n,Absolue,$PosAbsolue) $PosRelative set PosRA($n,Relative,$PosAbsolue) $PosRelative } } return } proc InitPosSeqGenGenSeq {} { return global Sequences ListePDB db TPGS TPSG if {[info exists TPGS]} { unset TPGS TPSG } lassign [Ccode_InitPosSGGS [array get Sequences]] TPosGS TPosSG foreach {n k v} $TPosGS { set TPGS($n@$k) $v } foreach {n k v} $TPosSG { set TPSG($n@$k) $v } foreach nt $ListePDB { lassign $nt n tmp if {! [info exists Sequences($n)]} {continue} set n [BonNomPDB $n] array unset TPSG "${n}@*" array unset TPGS "${n}@*" set mol [DonneIdDeAccessPDB $n] set chn [DonneChainDeAccessPDB $n] set sp [$mol _resnumber -chain $chn -polymer] set lgg [llength $sp] set sg [set Sequences($n)] set i -1 ; set c -1 ; set v [lindex $sp 0] foreach a [split $sg ""] { incr i if {$a ne "."} { incr c # c could not be greater than $lgg # it may happen if the sp != sg degape if {$c < $lgg} { set v [lindex $sp $c] } else { set v [lindex $sp end] } set TPSG($n@$v) $i } set TPGS($n@$i) $v } set TPSG($n@-1) $lgg set TPGS($n@-1) $lgg } return } proc InitPosSeqGenGenSeq_OLD {} { global Sequences TPosGS TPosSG ListePDB if {[info exists TPosSG]} { unset TPosSG TPosGS } lassign [Ccode_InitPosSGGS [array get Sequences]] TPosGS TPosSG foreach nt $ListePDB { if {! [info exists Sequences($nt)]} {continue} lassign $nt n tmp set n [BonNomPDB $n] set TPosSG [dict remove $TPosSG $n] set TPosGS [dict remove $TPosGS $n] set mol [DonneIdDeAccessPDB $n] set chn [DonneChainDeAccessPDB $n] set sp [$mol _resnumber -chain $chn -polymer] set sg [set Sequences($n)] set lgg [llength $sp] dict set TPosSG $n lgt $lgg dict set TPosGS $n lgt $lgg set i -1 set c -1 set v 0 foreach a [split $sg ""] { incr i if {$a ne "."} { incr c dict set TPosSG $n [set v [lindex $sp $c]] $i } dict set TPosGS $n $i $v } } return foreach {n seq} [array get Sequences] { #set seq [set Sequences($n)] set tmp [string map [list Z "" . ""] $seq] set lg [string length $tmp] dict set TPosSG $n lgt $lg dict set TPosGS $n lgt $lg set c -1 set i -1 foreach a [split $seq ""] { incr i if {$a ne "."} { incr c dict set TPosSG $n $c $i } dict set TPosGS $n $i $c } } return $i } proc InitPremierGroupe {} { global NombreDeGroupes LNDG SDG LNOrdali # already here, do nothing if {[info exists LNDG] && "GroupeToutLeMonde" in $LNDG} { return } set LNDG {} unset -nocomplain SDG set LNDG "GroupeToutLeMonde" foreach Nom $LNOrdali { if {[string trim $Nom] ne ""} { lappend tmp $Nom } } set SDG(GroupeToutLeMonde) $tmp set NombreDeGroupes 1 set NumeroDeGroupe 1 return } proc InitRPCA {} { set lpca "-0.03321226115344578 -0.11387825720514409 -0.22416505603164735 -0.20918526423622633 0.20138722682215107 -0.15137648641007362 -0.14400440513856536 -0.42777360088067506 -0.019577591705696975 0.2532802673970912 0.29919512078613575 -0.2134906880145011 0.09557293424375313 0.3791053228772117 -0.1283964403623 -0.21500354107131917 -0.16441814984544625 0.39728684887162297 0.22747378232324078 0.1911802387338345 0.22805692460681184 -0.0062771564423803 -0.015913385336226146 -0.005792371664023655 0.10264273871909664 -0.03090518610436776 -0.033938370405318136 0.18274445484841986 -0.17578830526813807 0.083108732593751 0.019193250960873705 0.007636490622739857 -0.025374878078663884 -0.16515347581850442 0.08174128951967097 0.12683154820269357 0.030620696769400806 -0.3398491801590555 -0.1789062118645277 0.1153223942977476 -0.009534124621060316 -0.22563399392023 0.027957348993080455 0.04512231840752419 0.34453460416856857 -0.09609904083263208 -0.25661141737339377 0.5360106253844271 -0.14136970178315464 -0.07892902460086294 -0.14428327504767074 -0.18774744259553774 -0.0614222195759302 0.02624689724748815 -0.05150025840387371 0.013382957062699822 0.1293802637083716 0.10336605301238586 0.011297589492219524 0.015831841277580794 " set lpca "-0.2550000000000008 -5.155000000000001 -6.0550000000000015 -5.455000000000002 8.945 -5.155000000000001 -6.355000000000001 -6.655000000000001 -2.3550000000000004 6.645 7.145 -7.5550000000000015 2.044999999999998 10.244999999999997 -3.755000000000001 -5.455000000000002 -3.3550000000000004 10.844999999999999 5.844999999999999 5.844999999999999 2.7570499999999996 -0.3539500000000011 0.35304999999999964 0.48104999999999976 1.5870499999999996 -0.26695000000000135 -0.6899500000000014 4.321049999999999 -2.3729500000000012 0.2650499999999987 -0.7429500000000004 0.11104999999999876 -0.6469500000000004 -2.7079500000000003 1.1250499999999999 1.995049999999999 1.0130499999999998 -4.642950000000001 -2.5829500000000003 0.9990499999999987 -0.10749999999999998 -0.3675 0.1825 0.2025 0.5025 -0.0875 -0.3975 1.1725 -0.1775 -0.3275 -0.4475 -0.2475 -0.15749999999999997 -0.07749999999999999 -0.06749999999999999 0.0825 0.3225 0.14250000000000002 -0.017499999999999988 -0.1275" return $lpca } proc InitResBox {x y n} { set c $::NwOj(Can) set x1 [expr {$x+7}] set y1 [expr {$y-20}] $c create rectangle $x $y1 $x1 $y -fill black -outline black -tags [list BgRes Nbr$n] return } proc InitResidueTypes {} { global OrdEtcDir TResidueType set Ll [LesLignesDuFichier [file join $OrdEtcDir "comp.txt"]] foreach l $Ll { lassign [split $l \t] res type tmp code set TResidueType($res,code1l) $code set type [string trim [string map [list ' "" \" "" - " "] $type]] if {[regexp {LINKING|TERMINUS} $type]} { if {[regexp {PEPTIDE} $type]} { set TResidueType($res,type) "Protein" } elseif {[regexp {RNA|DNA} $type]} { set TResidueType($res,type) "Nucleic" } else { set TResidueType($res,type) "ligand" } } else { set TResidueType($res,type) "ligand" } lappend Lt $type } return } proc InitScoreDeBILD {} { global BILDback BILDweight BILDalpha BILDAlpha package require math set data [DirichletMixtureData] set cmp -1 set weight [list] set Alpha [list] set alpha [list] for {set m 0} {$m < 20} {incr m} { incr cmp lappend weight [lindex $data $cmp] set sAlpha 0.0 set lalpha [list] for {set i 0} {$i < 20} {incr i} { incr cmp set v [lindex $data $cmp] lappend lalpha $v set sAlpha [expr {$sAlpha + $v}] } lappend alpha $lalpha lappend Alpha $sAlpha } set BILDback [list] for {set i 0} {$i < 20} {incr i} { set sBack 0.0 for {set m 0} {$m < 20} {incr m} { set sBack [expr {$sBack + [lindex $weight $m] * [lindex [lindex $alpha $m] $i] / [lindex $Alpha $m]}] } lappend BILDback $sBack } return [list $BILDback $weight $alpha $Alpha] } proc InitSeqsOut {{Etat ""}} { global Defauts SeqsOut LNOrdali LNSeqlab if {$Etat eq ""} {set Etat $Defauts(LockSeqs)} foreach s $LNOrdali { set SeqsOut($s) $Etat } return } proc InitSequences {} { global Defauts LNOrdali LSOrdali Sequences global SeqOri LesNomsDesSeqOri global NombreDeSequences LongueurTotale global OrdEtcDir Warn PBV PBW global LesPCI ListeDesFragments global ListePDB BadPDB NomEtSeqAssPDB set NombreDeSequences [llength $LNOrdali] if {! $NombreDeSequences} { return 0 } DefinitTypeAlignement LesDefauts Mapping [EditorMappingData] if {[set Defauts(RemoveQuery)]} { set iquery [lsearch -regexp -nocase $LNOrdali "query"] if {$iquery != -1} { set Qry [lindex $LNOrdali $iquery] unset Sequences($Qry) set LNOrdali [lreplace $LNOrdali $iquery $iquery] } } # Nettoyage Nom et sequences set ListePDB {} set PBV 0. set PBW "Cleaning Sequences and Names ..." set Ns [llength $LNOrdali] set LiVide [list] set i 0 foreach n $LNOrdali { set s [set Sequences($n)] set s [BonneSequencePourAlignement $s] set Sequences($n) $s set nogap [string map {"." "" " " "" "~" "" "-" ""} $s] if {! [string length $nogap]} { lappend Warn(Vide) $n set Warn($n) 1 lappend LiVide $i } incr i set PBV [expr {$PBV+100./$Ns}] } # Enleve sequences vides foreach i [lsort -integer -decreasing $LiVide] { set s [lindex $LNOrdali $i] set LNOrdali [lreplace $LNOrdali $i $i] unset Sequences($s) } foreach n $LNOrdali { lappend LSOrdali [set Sequences($n)] } lappend LNOrdali {} lappend LSOrdali {} # # Traitement PDB # TraitePDBDeLAlignement # Enleve mauvais PDB if {$BadPDB != {}} { foreach i [lsort -decreasing -integer $BadPDB] { set e [lindex $LNOrdali $i] set Molid [DonneIdDeAccessPDB $e] set Chn [DonneChainDeAccessPDB $e] set newe "bsq${Molid}_$Chn" lset LNOrdali $i $newe set seq [lindex $LSOrdali $i] unset Sequences($e) set Sequences($newe) $seq } } # traite AA bizarres (Seleno Cysteine, B et Z) TraiteAABizarres # Info generales sur alignement set NombreDeSequences [llength $LNOrdali] set Premiere [lindex $LNOrdali 0] set LongueurTotale [string length [set Sequences($Premiere)]] set NPDB [llength $ListePDB] array set SeqOri [array get Sequences] set LesNomsDesSeqOri $LNOrdali # Determine fragments set ListeDesFragments [DetermineLesFragmentsLuc] if {$ListeDesFragments != ""} { MetDesZDansSequencesDeFragments } # sec. str., setups ... des PDB InfosDesPDB # not implemented yet ... AssigneLesPoids CalculeComposition CalculePI CalculeMolecularWeight WarningsDesSeqs return 1 } proc InitSeuils {} { global Mbl Cbl foreach classe {{P A G S T} {I L M V} {D E Q N} {K R H} {F Y W}} { # calcule sum identities set sumId 0.0 foreach aa $classe { set sumId [expr {$sumId + $Cbl($aa,$aa)}] } set seuil 0.0 ; set seuilC 0.0 set nv 0 # i=1 : on tient compte de Mbl(F,F) dans # la moyenne. LE SEUIL EST PLUS HAUT # i=1 : on n'a que les couples croisés set i 1 #set i 0 foreach c1 [lrange $classe 0 end] { foreach c2 [lrange $classe $i end] { set seuil [expr {$seuil + $Mbl($c1,$c2)}] set seuilC [expr {$seuilC + $Cbl($c1,$c2)}] incr nv } incr i } puts "\nClasse : $classe" set nb [llength $classe] puts " [format [string repeat %5s $nb] {*}$classe]" set i 0 set spc " " foreach a1 [lrange $classe 0 end] { set s "$a1 [string repeat $spc $i]" foreach a2 [lrange $classe $i end] { append s [format %5.2f $Cbl($a1,$a2)] } incr i puts $s } puts "seuil ori : $seuilC" #set seuilC [expr {$seuilC + $sumId/[llength $classe]}] #set seuilC [expr {2. * $seuilC}] puts "seuil Id : $seuilC" set seuil [expr {$seuil / $nv}] set seuilC [expr {$seuilC / ($nv - 0)}] puts "seuil fin : $seuilC" foreach c $classe { set Mbl($c,classe) $seuil set Cbl($c,classe) $seuilC } } set Mbl(C,classe) $Mbl(C,C) set Cbl(C,classe) $Cbl(C,C) return } proc InitSolventArea {} { global pKa Surf SA #Residue Volume Surface Area Side Chain pKa set strSA " A 88.6 115. -999. R 173.4 225. ~12 D 111.1 150. 4.5 N 114.1 160. -999. # C a pk entre 9.1 et 9.5 -> 9.3 C 108.5 135. 9.3 E 138.4 190. 4.6 Q 143.8 180. -999. G 60.1 75. -999. H 153.2 195. 6.2 I 166.7 175. -999. L 166.7 170. -999. K 168.6 200. 10.4 M 162.9 185. -999. F 189.9 210. -999. P 112.7 145. -999. S 89.0 115. -999. T 116.1 140. -999. W 227.8 255. -999. Y 193.6 230. 9.7 V 140.0 155. -999. #a-amino pKa = 6.8 - 7.9, a-carboxyl pKa = 3.5 - 4.3 " set LSA [split $strSA \n] foreach l $LSA { set l [string trim $l] if {$l eq ""} {continue} if {[string index $l 0] eq "#"} {continue} set Lv [split $l "\t"] lassign $Lv aa surf area pka set SA($aa) $area set pKa($aa) $pka set Surf($aa) $surf } foreach aa [lsort [array names SA]] { #puts "SA($aa) >$SA($aa)<" } # References if {0} { References Volume: A.A. Zamyatin, Protein Volume in Solution, Prog. Biophys. Mol. Biol. 24(1972)107-123. Accessible surface area (calculated for the residue X in the tripeptide G-X-G) C. Chotia, The Nature of the Accessible and Buried Surfaces in Proteins, J. Mol. Biol., 105(1975)1-14. pKa: C. Tandford, Adv. Protein Chem. 17(1962)69-165. } return } proc InitTBlosum {{mat blosum62} {positive 0}} { global ListeDesAcidesAmines DistBlosum OrdEtcDir # Checked against julie's routine : OK !! array set TBlosum [InitClustalMatrix $mat $positive] #set ListeAA [lrange $ListeDesAcidesAmines 0 end-1] #set ListeAA $ListeDesAcidesAmines set ListeDesAcidesAmines $TBlosum(laa) set ListeAA $TBlosum(laa) set i 1 foreach a [lrange $ListeAA 0 end] { set DistBlosum($a,$a) 0.0 foreach b [lrange $ListeAA $i end] { set d 0. foreach c $ListeAA { set diff [expr {([set TBlosum($a,$c)]-[set TBlosum($b,$c)])/1000.}] set d [expr {$d + $diff*$diff}] } set DistBlosum($a,$b) [expr {sqrt($d)}] set DistBlosum($b,$a) [expr {sqrt($d)}] } incr i } return } proc InitTLog2HTML {} { global DebutBodyHTML Html_ZeroToBody # css de base .... Html_Append [CssBaseOrdalie] set DebutBodyHTML [Html_GetPosition] #Html_Append "

[file rootname [set ::Defauts(Fichier[TypeAli])]]

" Html_Append "

Ordalie Version $::VersionDeOrdali

" Html_Teletype "[DonneDateEtHeure]" Html_Append "
" return } proc InitTLog2Text {} { global TextOut if {[TypeAli] ne "pasdali"} { set tf "[file rootname [set ::Defauts(Fichier[TypeAli])]]" } else { set tf "Output" } lappend TextOut $tf lappend TextOut [string repeat "=" [string length $tf]] lappend TextOut "" lappend TextOut "Ordalie Version $::VersionDeOrdali" lappend TextOut "[DonneDateEtHeure]" lappend TextOut "" return } proc InitTaxDB {} { global db TaxRoot TaxDir # db already loaded if {[info exists db] && ([info command $db] ne "")} { return $db } set TaxDir [TaxDir UniProt] set TaxDir "/genomics/link/Common/fiches/TaxUniProt.20140916" set TaxDir "/home/moumou/SoTOL/" #puts "TaxDir $TaxDir" # search the database sqlite file set file sotol.sql set fileDB [file join $TaxDir $file] if {[file exists $fileDB]} { set fdb $fileDB } elseif {[file exists sotol.sql]} { set fdb sotol.sql } package require sqlite3 set db "rootTaxo" sqlite3 $db $fdb set TaxRoot 131567 #set TaxRoot [$db eval {select taxid from taxonomy where Name = "cellular organisms"}] set Lv [lsort -unique [$db eval {select var from sotol}]] #puts "\nLv $Lv\n" global {*}$Lv foreach {var key val} [$db eval {select * from sotol}] { if {$key eq ""} { set $var $val } else { set ${var}($key) $val } } foreach v $Lv { if {[array exists $v]} { #parray $v } else { #puts "$v [set $v]" } } return $db } proc InitTaxoTables {} { global db TaxDir set table " - taxonomy : uniprot { . taxid P . Mnemonic V32 . Name V32 . CommonName V32 . Synonymous V32 . OtherNames V32 . Rank V32 . Lineage T . Parent I . NbChild I . NbChildCum I . isInt I . NbInt I . isGold I . NbGold I . NbKeep I } - gold : gold table { . pk_gold P . taxid I . Goldid V16 . LegalGoldid V16 . Name V64 . NCBIProjectName V128 . NCBIBioProject V128 . ProjectType V128 . SeqStatus V64 . Status V32 . Center V128 . Funding V128 . Contact V128 . Domaine V32 . Kingdom V32 . Phylum V32 . Classe V32 . Ordrr V32 . Family V32 . Genre V32 . Espece V32 . model I } " set fdb [file join $TaxDir sotol.sql] if {[file exists $fdb]} { file delete $fdb } package require sqlite3 set db [FabriqueDeTables $table "" $fdb] return $db } proc InitTkCol {} { global TkCol ListeTkCol set TkCol(alice\ blue) [list 240 248 255] set TkCol(AliceBlue) [list 240 248 255] set TkCol(antique\ white) [list 250 235 215] set TkCol(AntiqueWhite) [list 250 235 215] set TkCol(AntiqueWhite1) [list 255 239 219] set TkCol(AntiqueWhite2) [list 238 223 204] set TkCol(AntiqueWhite3) [list 205 192 176] set TkCol(AntiqueWhite4) [list 139 131 120] set TkCol(aquamarine) [list 127 255 212] set TkCol(aquamarine1) [list 127 255 212] set TkCol(aquamarine2) [list 118 238 198] set TkCol(aquamarine3) [list 102 205 170] set TkCol(aquamarine4) [list 69 139 116] set TkCol(azure) [list 240 255 255] set TkCol(azure1) [list 240 255 255] set TkCol(azure2) [list 224 238 238] set TkCol(azure3) [list 193 205 205] set TkCol(azure4) [list 131 139 139] set TkCol(beige) [list 245 245 220] set TkCol(bisque) [list 255 228 196] set TkCol(bisque1) [list 255 228 196] set TkCol(bisque2) [list 238 213 183] set TkCol(bisque3) [list 205 183 158] set TkCol(bisque4) [list 139 125 107] set TkCol(black) [list 0 0 0] set TkCol(blanched\ almond) [list 255 235 205] set TkCol(BlanchedAlmond) [list 255 235 205] set TkCol(blue) [list 0 0 255] set TkCol(blue\ violet) [list 138 43 226] set TkCol(blue1) [list 0 0 255] set TkCol(blue2) [list 0 0 238] set TkCol(blue3) [list 0 0 205] set TkCol(blue4) [list 0 0 139] set TkCol(BlueViolet) [list 138 43 226] set TkCol(brown) [list 165 42 42] set TkCol(brown1) [list 255 64 64] set TkCol(brown2) [list 238 59 59] set TkCol(brown3) [list 205 51 51] set TkCol(brown4) [list 139 35 35] set TkCol(burlywood) [list 222 184 135] set TkCol(burlywood1) [list 255 211 155] set TkCol(burlywood2) [list 238 197 145] set TkCol(burlywood3) [list 205 170 125] set TkCol(burlywood4) [list 139 115 85] set TkCol(cadet\ blue) [list 95 158 160] set TkCol(CadetBlue) [list 95 158 160] set TkCol(CadetBlue1) [list 152 245 255] set TkCol(CadetBlue2) [list 142 229 238] set TkCol(CadetBlue3) [list 122 197 205] set TkCol(CadetBlue4) [list 83 134 139] set TkCol(chartreuse) [list 127 255 0] set TkCol(chartreuse1) [list 127 255 0] set TkCol(chartreuse2) [list 118 238 0] set TkCol(chartreuse3) [list 102 205 0] set TkCol(chartreuse4) [list 69 139 0] set TkCol(chocolate) [list 210 105 30] set TkCol(chocolate1) [list 255 127 36] set TkCol(chocolate2) [list 238 118 33] set TkCol(chocolate3) [list 205 102 29] set TkCol(chocolate4) [list 139 69 19] set TkCol(coral) [list 255 127 80] set TkCol(coral1) [list 255 114 86] set TkCol(coral2) [list 238 106 80] set TkCol(coral3) [list 205 91 69] set TkCol(coral4) [list 139 62 47] set TkCol(cornflower\ blue) [list 100 149 237] set TkCol(CornflowerBlue) [list 100 149 237] set TkCol(cornsilk) [list 255 248 220] set TkCol(cornsilk1) [list 255 248 220] set TkCol(cornsilk2) [list 238 232 205] set TkCol(cornsilk3) [list 205 200 177] set TkCol(cornsilk4) [list 139 136 120] set TkCol(cyan) [list 0 255 255] set TkCol(cyan1) [list 0 255 255] set TkCol(cyan2) [list 0 238 238] set TkCol(cyan3) [list 0 205 205] set TkCol(cyan4) [list 0 139 139] set TkCol(dark\ blue) [list 0 0 139] set TkCol(dark\ cyan) [list 0 139 139] set TkCol(dark\ goldenrod) [list 184 134 11] set TkCol(dark\ gray) [list 169 169 169] set TkCol(dark\ green) [list 0 100 0] set TkCol(dark\ grey) [list 169 169 169] set TkCol(dark\ khaki) [list 189 183 107] set TkCol(dark\ magenta) [list 139 0 139] set TkCol(dark\ olive\ green) [list 85 107 47] set TkCol(dark\ orange) [list 255 140 0] set TkCol(dark\ orchid) [list 153 50 204] set TkCol(dark\ red) [list 139 0 0] set TkCol(dark\ salmon) [list 233 150 122] set TkCol(dark\ sea\ green) [list 143 188 143] set TkCol(dark\ slate\ blue) [list 72 61 139] set TkCol(dark\ slate\ gray) [list 47 79 79] set TkCol(dark\ slate\ grey) [list 47 79 79] set TkCol(dark\ turquoise) [list 0 206 209] set TkCol(dark\ violet) [list 148 0 211] set TkCol(DarkBlue) [list 0 0 139] set TkCol(DarkCyan) [list 0 139 139] set TkCol(DarkGoldenrod) [list 184 134 11] set TkCol(DarkGoldenrod1) [list 255 185 15] set TkCol(DarkGoldenrod2) [list 238 173 14] set TkCol(DarkGoldenrod3) [list 205 149 12] set TkCol(DarkGoldenrod4) [list 139 101 8] set TkCol(DarkGray) [list 169 169 169] set TkCol(DarkGreen) [list 0 100 0] set TkCol(DarkGrey) [list 169 169 169] set TkCol(DarkKhaki) [list 189 183 107] set TkCol(DarkMagenta) [list 139 0 139] set TkCol(DarkOliveGreen) [list 85 107 47] set TkCol(DarkOliveGreen1) [list 202 255 112] set TkCol(DarkOliveGreen2) [list 188 238 104] set TkCol(DarkOliveGreen3) [list 162 205 90] set TkCol(DarkOliveGreen4) [list 110 139 61] set TkCol(DarkOrange) [list 255 140 0] set TkCol(DarkOrange1) [list 255 127 0] set TkCol(DarkOrange2) [list 238 118 0] set TkCol(DarkOrange3) [list 205 102 0] set TkCol(DarkOrange4) [list 139 69 0] set TkCol(DarkOrchid) [list 153 50 204] set TkCol(DarkOrchid1) [list 191 62 255] set TkCol(DarkOrchid2) [list 178 58 238] set TkCol(DarkOrchid3) [list 154 50 205] set TkCol(DarkOrchid4) [list 104 34 139] set TkCol(DarkRed) [list 139 0 0] set TkCol(DarkSalmon) [list 233 150 122] set TkCol(DarkSeaGreen) [list 143 188 143] set TkCol(DarkSeaGreen1) [list 193 255 193] set TkCol(DarkSeaGreen2) [list 180 238 180] set TkCol(DarkSeaGreen3) [list 155 205 155] set TkCol(DarkSeaGreen4) [list 105 139 105] set TkCol(DarkSlateBlue) [list 72 61 139] set TkCol(DarkSlateGray) [list 47 79 79] set TkCol(DarkSlateGray1) [list 151 255 255] set TkCol(DarkSlateGray2) [list 141 238 238] set TkCol(DarkSlateGray3) [list 121 205 205] set TkCol(DarkSlateGray4) [list 82 139 139] set TkCol(DarkSlateGrey) [list 47 79 79] set TkCol(DarkTurquoise) [list 0 206 209] set TkCol(DarkViolet) [list 148 0 211] set TkCol(deep\ pink) [list 255 20 147] set TkCol(deep\ sky\ blue) [list 0 191 255] set TkCol(DeepPink) [list 255 20 147] set TkCol(DeepPink1) [list 255 20 147] set TkCol(DeepPink2) [list 238 18 137] set TkCol(DeepPink3) [list 205 16 118] set TkCol(DeepPink4) [list 139 10 80] set TkCol(DeepSkyBlue) [list 0 191 255] set TkCol(DeepSkyBlue1) [list 0 191 255] set TkCol(DeepSkyBlue2) [list 0 178 238] set TkCol(DeepSkyBlue3) [list 0 154 205] set TkCol(DeepSkyBlue4) [list 0 104 139] set TkCol(dim\ gray) [list 105 105 105] set TkCol(dim\ grey) [list 105 105 105] set TkCol(DimGray) [list 105 105 105] set TkCol(DimGrey) [list 105 105 105] set TkCol(dodger\ blue) [list 30 144 255] set TkCol(DodgerBlue) [list 30 144 255] set TkCol(DodgerBlue1) [list 30 144 255] set TkCol(DodgerBlue2) [list 28 134 238] set TkCol(DodgerBlue3) [list 24 116 205] set TkCol(DodgerBlue4) [list 16 78 139] set TkCol(firebrick) [list 178 34 34] set TkCol(firebrick1) [list 255 48 48] set TkCol(firebrick2) [list 238 44 44] set TkCol(firebrick3) [list 205 38 38] set TkCol(firebrick4) [list 139 26 26] set TkCol(floral\ white) [list 255 250 240] set TkCol(FloralWhite) [list 255 250 240] set TkCol(forest\ green) [list 34 139 34] set TkCol(ForestGreen) [list 34 139 34] set TkCol(gainsboro) [list 220 220 220] set TkCol(ghost\ white) [list 248 248 255] set TkCol(GhostWhite) [list 248 248 255] set TkCol(gold) [list 255 215 0] set TkCol(gold1) [list 255 215 0] set TkCol(gold2) [list 238 201 0] set TkCol(gold3) [list 205 173 0] set TkCol(gold4) [list 139 117 0] set TkCol(goldenrod) [list 218 165 32] set TkCol(goldenrod1) [list 255 193 37] set TkCol(goldenrod2) [list 238 180 34] set TkCol(goldenrod3) [list 205 155 29] set TkCol(goldenrod4) [list 139 105 20] set TkCol(gray) [list 190 190 190] set TkCol(gray0) [list 0 0 0] set TkCol(gray1) [list 3 3 3] set TkCol(gray2) [list 5 5 5] set TkCol(gray3) [list 8 8 8] set TkCol(gray4) [list 10 10 10] set TkCol(gray5) [list 13 13 13] set TkCol(gray6) [list 15 15 15] set TkCol(gray7) [list 18 18 18] set TkCol(gray8) [list 20 20 20] set TkCol(gray9) [list 23 23 23] set TkCol(gray10) [list 26 26 26] set TkCol(gray11) [list 28 28 28] set TkCol(gray12) [list 31 31 31] set TkCol(gray13) [list 33 33 33] set TkCol(gray14) [list 36 36 36] set TkCol(gray15) [list 38 38 38] set TkCol(gray16) [list 41 41 41] set TkCol(gray17) [list 43 43 43] set TkCol(gray18) [list 46 46 46] set TkCol(gray19) [list 48 48 48] set TkCol(gray20) [list 51 51 51] set TkCol(gray21) [list 54 54 54] set TkCol(gray22) [list 56 56 56] set TkCol(gray23) [list 59 59 59] set TkCol(gray24) [list 61 61 61] set TkCol(gray25) [list 64 64 64] set TkCol(gray26) [list 66 66 66] set TkCol(gray27) [list 69 69 69] set TkCol(gray28) [list 71 71 71] set TkCol(gray29) [list 74 74 74] set TkCol(gray30) [list 77 77 77] set TkCol(gray31) [list 79 79 79] set TkCol(gray32) [list 82 82 82] set TkCol(gray33) [list 84 84 84] set TkCol(gray34) [list 87 87 87] set TkCol(gray35) [list 89 89 89] set TkCol(gray36) [list 92 92 92] set TkCol(gray37) [list 94 94 94] set TkCol(gray38) [list 97 97 97] set TkCol(gray39) [list 99 99 99] set TkCol(gray40) [list 102 102 102] set TkCol(gray41) [list 105 105 105] set TkCol(gray42) [list 107 107 107] set TkCol(gray43) [list 110 110 110] set TkCol(gray44) [list 112 112 112] set TkCol(gray45) [list 115 115 115] set TkCol(gray46) [list 117 117 117] set TkCol(gray47) [list 120 120 120] set TkCol(gray48) [list 122 122 122] set TkCol(gray49) [list 125 125 125] set TkCol(gray50) [list 127 127 127] set TkCol(gray51) [list 130 130 130] set TkCol(gray52) [list 133 133 133] set TkCol(gray53) [list 135 135 135] set TkCol(gray54) [list 138 138 138] set TkCol(gray55) [list 140 140 140] set TkCol(gray56) [list 143 143 143] set TkCol(gray57) [list 145 145 145] set TkCol(gray58) [list 148 148 148] set TkCol(gray59) [list 150 150 150] set TkCol(gray60) [list 153 153 153] set TkCol(gray61) [list 156 156 156] set TkCol(gray62) [list 158 158 158] set TkCol(gray63) [list 161 161 161] set TkCol(gray64) [list 163 163 163] set TkCol(gray65) [list 166 166 166] set TkCol(gray66) [list 168 168 168] set TkCol(gray67) [list 171 171 171] set TkCol(gray68) [list 173 173 173] set TkCol(gray69) [list 176 176 176] set TkCol(gray70) [list 179 179 179] set TkCol(gray71) [list 181 181 181] set TkCol(gray72) [list 184 184 184] set TkCol(gray73) [list 186 186 186] set TkCol(gray74) [list 189 189 189] set TkCol(gray75) [list 191 191 191] set TkCol(gray76) [list 194 194 194] set TkCol(gray77) [list 196 196 196] set TkCol(gray78) [list 199 199 199] set TkCol(gray79) [list 201 201 201] set TkCol(gray80) [list 204 204 204] set TkCol(gray81) [list 207 207 207] set TkCol(gray82) [list 209 209 209] set TkCol(gray83) [list 212 212 212] set TkCol(gray84) [list 214 214 214] set TkCol(gray85) [list 217 217 217] set TkCol(gray86) [list 219 219 219] set TkCol(gray87) [list 222 222 222] set TkCol(gray88) [list 224 224 224] set TkCol(gray89) [list 227 227 227] set TkCol(gray90) [list 229 229 229] set TkCol(gray91) [list 232 232 232] set TkCol(gray92) [list 235 235 235] set TkCol(gray93) [list 237 237 237] set TkCol(gray94) [list 240 240 240] set TkCol(gray95) [list 242 242 242] set TkCol(gray96) [list 245 245 245] set TkCol(gray97) [list 247 247 247] set TkCol(gray98) [list 250 250 250] set TkCol(gray99) [list 252 252 252] set TkCol(gray100) [list 255 255 255] set TkCol(green) [list 0 255 0] set TkCol(green\ yellow) [list 173 255 47] set TkCol(green1) [list 0 255 0] set TkCol(green2) [list 0 238 0] set TkCol(green3) [list 0 205 0] set TkCol(green4) [list 0 139 0] set TkCol(GreenYellow) [list 173 255 47] set TkCol(grey) [list 190 190 190] set TkCol(grey0) [list 0 0 0] set TkCol(grey1) [list 3 3 3] set TkCol(grey2) [list 5 5 5] set TkCol(grey3) [list 8 8 8] set TkCol(grey4) [list 10 10 10] set TkCol(grey5) [list 13 13 13] set TkCol(grey6) [list 15 15 15] set TkCol(grey7) [list 18 18 18] set TkCol(grey8) [list 20 20 20] set TkCol(grey9) [list 23 23 23] set TkCol(grey10) [list 26 26 26] set TkCol(grey11) [list 28 28 28] set TkCol(grey12) [list 31 31 31] set TkCol(grey13) [list 33 33 33] set TkCol(grey14) [list 36 36 36] set TkCol(grey15) [list 38 38 38] set TkCol(grey16) [list 41 41 41] set TkCol(grey17) [list 43 43 43] set TkCol(grey18) [list 46 46 46] set TkCol(grey19) [list 48 48 48] set TkCol(grey20) [list 51 51 51] set TkCol(grey21) [list 54 54 54] set TkCol(grey22) [list 56 56 56] set TkCol(grey23) [list 59 59 59] set TkCol(grey24) [list 61 61 61] set TkCol(grey25) [list 64 64 64] set TkCol(grey26) [list 66 66 66] set TkCol(grey27) [list 69 69 69] set TkCol(grey28) [list 71 71 71] set TkCol(grey29) [list 74 74 74] set TkCol(grey30) [list 77 77 77] set TkCol(grey31) [list 79 79 79] set TkCol(grey32) [list 82 82 82] set TkCol(grey33) [list 84 84 84] set TkCol(grey34) [list 87 87 87] set TkCol(grey35) [list 89 89 89] set TkCol(grey36) [list 92 92 92] set TkCol(grey37) [list 94 94 94] set TkCol(grey38) [list 97 97 97] set TkCol(grey39) [list 99 99 99] set TkCol(grey40) [list 102 102 102] set TkCol(grey41) [list 105 105 105] set TkCol(grey42) [list 107 107 107] set TkCol(grey43) [list 110 110 110] set TkCol(grey44) [list 112 112 112] set TkCol(grey45) [list 115 115 115] set TkCol(grey46) [list 117 117 117] set TkCol(grey47) [list 120 120 120] set TkCol(grey48) [list 122 122 122] set TkCol(grey49) [list 125 125 125] set TkCol(grey50) [list 127 127 127] set TkCol(grey51) [list 130 130 130] set TkCol(grey52) [list 133 133 133] set TkCol(grey53) [list 135 135 135] set TkCol(grey54) [list 138 138 138] set TkCol(grey55) [list 140 140 140] set TkCol(grey56) [list 143 143 143] set TkCol(grey57) [list 145 145 145] set TkCol(grey58) [list 148 148 148] set TkCol(grey59) [list 150 150 150] set TkCol(grey60) [list 153 153 153] set TkCol(grey61) [list 156 156 156] set TkCol(grey62) [list 158 158 158] set TkCol(grey63) [list 161 161 161] set TkCol(grey64) [list 163 163 163] set TkCol(grey65) [list 166 166 166] set TkCol(grey66) [list 168 168 168] set TkCol(grey67) [list 171 171 171] set TkCol(grey68) [list 173 173 173] set TkCol(grey69) [list 176 176 176] set TkCol(grey70) [list 179 179 179] set TkCol(grey71) [list 181 181 181] set TkCol(grey72) [list 184 184 184] set TkCol(grey73) [list 186 186 186] set TkCol(grey74) [list 189 189 189] set TkCol(grey75) [list 191 191 191] set TkCol(grey76) [list 194 194 194] set TkCol(grey77) [list 196 196 196] set TkCol(grey78) [list 199 199 199] set TkCol(grey79) [list 201 201 201] set TkCol(grey80) [list 204 204 204] set TkCol(grey81) [list 207 207 207] set TkCol(grey82) [list 209 209 209] set TkCol(grey83) [list 212 212 212] set TkCol(grey84) [list 214 214 214] set TkCol(grey85) [list 217 217 217] set TkCol(grey86) [list 219 219 219] set TkCol(grey87) [list 222 222 222] set TkCol(grey88) [list 224 224 224] set TkCol(grey89) [list 227 227 227] set TkCol(grey90) [list 229 229 229] set TkCol(grey91) [list 232 232 232] set TkCol(grey92) [list 235 235 235] set TkCol(grey93) [list 237 237 237] set TkCol(grey94) [list 240 240 240] set TkCol(grey95) [list 242 242 242] set TkCol(grey96) [list 245 245 245] set TkCol(grey97) [list 247 247 247] set TkCol(grey98) [list 250 250 250] set TkCol(grey99) [list 252 252 252] set TkCol(grey100) [list 255 255 255] set TkCol(honeydew) [list 240 255 240] set TkCol(honeydew1) [list 240 255 240] set TkCol(honeydew2) [list 224 238 224] set TkCol(honeydew3) [list 193 205 193] set TkCol(honeydew4) [list 131 139 131] set TkCol(hot\ pink) [list 255 105 180] set TkCol(HotPink) [list 255 105 180] set TkCol(HotPink1) [list 255 110 180] set TkCol(HotPink2) [list 238 106 167] set TkCol(HotPink3) [list 205 96 144] set TkCol(HotPink4) [list 139 58 98] set TkCol(indian\ red) [list 205 92 92] set TkCol(IndianRed) [list 205 92 92] set TkCol(IndianRed1) [list 255 106 106] set TkCol(IndianRed2) [list 238 99 99] set TkCol(IndianRed3) [list 205 85 85] set TkCol(IndianRed4) [list 139 58 58] set TkCol(ivory) [list 255 255 240] set TkCol(ivory1) [list 255 255 240] set TkCol(ivory2) [list 238 238 224] set TkCol(ivory3) [list 205 205 193] set TkCol(ivory4) [list 139 139 131] set TkCol(khaki) [list 240 230 140] set TkCol(khaki1) [list 255 246 143] set TkCol(khaki2) [list 238 230 133] set TkCol(khaki3) [list 205 198 115] set TkCol(khaki4) [list 139 134 78] set TkCol(lavender) [list 230 230 250] set TkCol(lavender\ blush) [list 255 240 245] set TkCol(LavenderBlush) [list 255 240 245] set TkCol(LavenderBlush1) [list 255 240 245] set TkCol(LavenderBlush2) [list 238 224 229] set TkCol(LavenderBlush3) [list 205 193 197] set TkCol(LavenderBlush4) [list 139 131 134] set TkCol(lawn\ green) [list 124 252 0] set TkCol(LawnGreen) [list 124 252 0] set TkCol(lemon\ chiffon) [list 255 250 205] set TkCol(LemonChiffon) [list 255 250 205] set TkCol(LemonChiffon1) [list 255 250 205] set TkCol(LemonChiffon2) [list 238 233 191] set TkCol(LemonChiffon3) [list 205 201 165] set TkCol(LemonChiffon4) [list 139 137 112] set TkCol(light\ blue) [list 173 216 230] set TkCol(light\ coral) [list 240 128 128] set TkCol(light\ cyan) [list 224 255 255] set TkCol(light\ goldenrod) [list 238 221 130] set TkCol(light\ goldenrod\ yellow) [list 250 250 210] set TkCol(light\ gray) [list 211 211 211] set TkCol(light\ green) [list 144 238 144] set TkCol(light\ grey) [list 211 211 211] set TkCol(light\ pink) [list 255 182 193] set TkCol(light\ salmon) [list 255 160 122] set TkCol(light\ sea\ green) [list 32 178 170] set TkCol(light\ sky\ blue) [list 135 206 250] set TkCol(light\ slate\ blue) [list 132 112 255] set TkCol(light\ slate\ gray) [list 119 136 153] set TkCol(light\ slate\ grey) [list 119 136 153] set TkCol(light\ steel\ blue) [list 176 196 222] set TkCol(light\ yellow) [list 255 255 224] set TkCol(LightBlue) [list 173 216 230] set TkCol(LightBlue1) [list 191 239 255] set TkCol(LightBlue2) [list 178 223 238] set TkCol(LightBlue3) [list 154 192 205] set TkCol(LightBlue4) [list 104 131 139] set TkCol(LightCoral) [list 240 128 128] set TkCol(LightCyan) [list 224 255 255] set TkCol(LightCyan1) [list 224 255 255] set TkCol(LightCyan2) [list 209 238 238] set TkCol(LightCyan3) [list 180 205 205] set TkCol(LightCyan4) [list 122 139 139] set TkCol(LightGoldenrod) [list 238 221 130] set TkCol(LightGoldenrod1) [list 255 236 139] set TkCol(LightGoldenrod2) [list 238 220 130] set TkCol(LightGoldenrod3) [list 205 190 112] set TkCol(LightGoldenrod4) [list 139 129 76] set TkCol(LightGoldenrodYellow) [list 250 250 210] set TkCol(LightGray) [list 211 211 211] set TkCol(LightGreen) [list 144 238 144] set TkCol(LightGrey) [list 211 211 211] set TkCol(LightPink) [list 255 182 193] set TkCol(LightPink1) [list 255 174 185] set TkCol(LightPink2) [list 238 162 173] set TkCol(LightPink3) [list 205 140 149] set TkCol(LightPink4) [list 139 95 101] set TkCol(LightSalmon) [list 255 160 122] set TkCol(LightSalmon1) [list 255 160 122] set TkCol(LightSalmon2) [list 238 149 114] set TkCol(LightSalmon3) [list 205 129 98] set TkCol(LightSalmon4) [list 139 87 66] set TkCol(LightSeaGreen) [list 32 178 170] set TkCol(LightSkyBlue) [list 135 206 250] set TkCol(LightSkyBlue1) [list 176 226 255] set TkCol(LightSkyBlue2) [list 164 211 238] set TkCol(LightSkyBlue3) [list 141 182 205] set TkCol(LightSkyBlue4) [list 96 123 139] set TkCol(LightSlateBlue) [list 132 112 255] set TkCol(LightSlateGray) [list 119 136 153] set TkCol(LightSlateGrey) [list 119 136 153] set TkCol(LightSteelBlue) [list 176 196 222] set TkCol(LightSteelBlue1) [list 202 225 255] set TkCol(LightSteelBlue2) [list 188 210 238] set TkCol(LightSteelBlue3) [list 162 181 205] set TkCol(LightSteelBlue4) [list 110 123 139] set TkCol(LightYellow) [list 255 255 224] set TkCol(LightYellow1) [list 255 255 224] set TkCol(LightYellow2) [list 238 238 209] set TkCol(LightYellow3) [list 205 205 180] set TkCol(LightYellow4) [list 139 139 122] set TkCol(lime\ green) [list 50 205 50] set TkCol(LimeGreen) [list 50 205 50] set TkCol(linen) [list 250 240 230] set TkCol(magenta) [list 255 0 255] set TkCol(magenta1) [list 255 0 255] set TkCol(magenta2) [list 238 0 238] set TkCol(magenta3) [list 205 0 205] set TkCol(magenta4) [list 139 0 139] set TkCol(maroon) [list 176 48 96] set TkCol(maroon1) [list 255 52 179] set TkCol(maroon2) [list 238 48 167] set TkCol(maroon3) [list 205 41 144] set TkCol(maroon4) [list 139 28 98] set TkCol(medium\ aquamarine) [list 102 205 170] set TkCol(medium\ blue) [list 0 0 205] set TkCol(medium\ orchid) [list 186 85 211] set TkCol(medium\ purple) [list 147 112 219] set TkCol(medium\ sea\ green) [list 60 179 113] set TkCol(medium\ slate\ blue) [list 123 104 238] set TkCol(medium\ spring\ green) [list 0 250 154] set TkCol(medium\ turquoise) [list 72 209 204] set TkCol(medium\ violet\ red) [list 199 21 133] set TkCol(MediumAquamarine) [list 102 205 170] set TkCol(MediumBlue) [list 0 0 205] set TkCol(MediumOrchid) [list 186 85 211] set TkCol(MediumOrchid1) [list 224 102 255] set TkCol(MediumOrchid2) [list 209 95 238] set TkCol(MediumOrchid3) [list 180 82 205] set TkCol(MediumOrchid4) [list 122 55 139] set TkCol(MediumPurple) [list 147 112 219] set TkCol(MediumPurple1) [list 171 130 255] set TkCol(MediumPurple2) [list 159 121 238] set TkCol(MediumPurple3) [list 137 104 205] set TkCol(MediumPurple4) [list 93 71 139] set TkCol(MediumSeaGreen) [list 60 179 113] set TkCol(MediumSlateBlue) [list 123 104 238] set TkCol(MediumSpringGreen) [list 0 250 154] set TkCol(MediumTurquoise) [list 72 209 204] set TkCol(MediumVioletRed) [list 199 21 133] set TkCol(midnight\ blue) [list 25 25 112] set TkCol(MidnightBlue) [list 25 25 112] set TkCol(mint\ cream) [list 245 255 250] set TkCol(MintCream) [list 245 255 250] set TkCol(misty\ rose) [list 255 228 225] set TkCol(MistyRose) [list 255 228 225] set TkCol(MistyRose1) [list 255 228 225] set TkCol(MistyRose2) [list 238 213 210] set TkCol(MistyRose3) [list 205 183 181] set TkCol(MistyRose4) [list 139 125 123] set TkCol(moccasin) [list 255 228 181] set TkCol(navajo\ white) [list 255 222 173] set TkCol(NavajoWhite) [list 255 222 173] set TkCol(NavajoWhite1) [list 255 222 173] set TkCol(NavajoWhite2) [list 238 207 161] set TkCol(NavajoWhite3) [list 205 179 139] set TkCol(NavajoWhite4) [list 139 121 94] set TkCol(navy) [list 0 0 128] set TkCol(navy\ blue) [list 0 0 128] set TkCol(NavyBlue) [list 0 0 128] set TkCol(old\ lace) [list 253 245 230] set TkCol(OldLace) [list 253 245 230] set TkCol(olive\ drab) [list 107 142 35] set TkCol(OliveDrab) [list 107 142 35] set TkCol(OliveDrab1) [list 192 255 62] set TkCol(OliveDrab2) [list 179 238 58] set TkCol(OliveDrab3) [list 154 205 50] set TkCol(OliveDrab4) [list 105 139 34] set TkCol(orange) [list 255 165 0] set TkCol(orange\ red) [list 255 69 0] set TkCol(orange1) [list 255 165 0] set TkCol(orange2) [list 238 154 0] set TkCol(orange3) [list 205 133 0] set TkCol(orange4) [list 139 90 0] set TkCol(OrangeRed) [list 255 69 0] set TkCol(OrangeRed1) [list 255 69 0] set TkCol(OrangeRed2) [list 238 64 0] set TkCol(OrangeRed3) [list 205 55 0] set TkCol(OrangeRed4) [list 139 37 0] set TkCol(orchid) [list 218 112 214] set TkCol(orchid1) [list 255 131 250] set TkCol(orchid2) [list 238 122 233] set TkCol(orchid3) [list 205 105 201] set TkCol(orchid4) [list 139 71 137] set TkCol(pale\ goldenrod) [list 238 232 170] set TkCol(pale\ green) [list 152 251 152] set TkCol(pale\ turquoise) [list 175 238 238] set TkCol(pale\ violet\ red) [list 219 112 147] set TkCol(PaleGoldenrod) [list 238 232 170] set TkCol(PaleGreen) [list 152 251 152] set TkCol(PaleGreen1) [list 154 255 154] set TkCol(PaleGreen2) [list 144 238 144] set TkCol(PaleGreen3) [list 124 205 124] set TkCol(PaleGreen4) [list 84 139 84] set TkCol(PaleTurquoise) [list 175 238 238] set TkCol(PaleTurquoise1) [list 187 255 255] set TkCol(PaleTurquoise2) [list 174 238 238] set TkCol(PaleTurquoise3) [list 150 205 205] set TkCol(PaleTurquoise4) [list 102 139 139] set TkCol(PaleVioletRed) [list 219 112 147] set TkCol(PaleVioletRed1) [list 255 130 171] set TkCol(PaleVioletRed2) [list 238 121 159] set TkCol(PaleVioletRed3) [list 205 104 127] set TkCol(PaleVioletRed4) [list 139 71 93] set TkCol(papaya\ whip) [list 255 239 213] set TkCol(PapayaWhip) [list 255 239 213] set TkCol(peach\ puff) [list 255 218 185] set TkCol(PeachPuff) [list 255 218 185] set TkCol(PeachPuff1) [list 255 218 185] set TkCol(PeachPuff2) [list 238 203 173] set TkCol(PeachPuff3) [list 205 175 149] set TkCol(PeachPuff4) [list 139 119 101] set TkCol(peru) [list 205 133 63] set TkCol(pink) [list 255 192 203] set TkCol(pink1) [list 255 181 197] set TkCol(pink2) [list 238 169 184] set TkCol(pink3) [list 205 145 158] set TkCol(pink4) [list 139 99 108] set TkCol(plum) [list 221 160 221] set TkCol(plum1) [list 255 187 255] set TkCol(plum2) [list 238 174 238] set TkCol(plum3) [list 205 150 205] set TkCol(plum4) [list 139 102 139] set TkCol(powder\ blue) [list 176 224 230] set TkCol(PowderBlue) [list 176 224 230] set TkCol(purple) [list 160 32 240] set TkCol(purple1) [list 155 48 255] set TkCol(purple2) [list 145 44 238] set TkCol(purple3) [list 125 38 205] set TkCol(purple4) [list 85 26 139] set TkCol(red) [list 255 0 0] set TkCol(red1) [list 255 0 0] set TkCol(red2) [list 238 0 0] set TkCol(red3) [list 205 0 0] set TkCol(red4) [list 139 0 0] set TkCol(rosy\ brown) [list 188 143 143] set TkCol(RosyBrown) [list 188 143 143] set TkCol(RosyBrown1) [list 255 193 193] set TkCol(RosyBrown2) [list 238 180 180] set TkCol(RosyBrown3) [list 205 155 155] set TkCol(RosyBrown4) [list 139 105 105] set TkCol(royal\ blue) [list 65 105 225] set TkCol(RoyalBlue) [list 65 105 225] set TkCol(RoyalBlue1) [list 72 118 255] set TkCol(RoyalBlue2) [list 67 110 238] set TkCol(RoyalBlue3) [list 58 95 205] set TkCol(RoyalBlue4) [list 39 64 139] set TkCol(saddle\ brown) [list 139 69 19] set TkCol(SaddleBrown) [list 139 69 19] set TkCol(salmon) [list 250 128 114] set TkCol(salmon1) [list 255 140 105] set TkCol(salmon2) [list 238 130 98] set TkCol(salmon3) [list 205 112 84] set TkCol(salmon4) [list 139 76 57] set TkCol(sandy\ brown) [list 244 164 96] set TkCol(SandyBrown) [list 244 164 96] set TkCol(sea\ green) [list 46 139 87] set TkCol(SeaGreen) [list 46 139 87] set TkCol(SeaGreen1) [list 84 255 159] set TkCol(SeaGreen2) [list 78 238 148] set TkCol(SeaGreen3) [list 67 205 128] set TkCol(SeaGreen4) [list 46 139 87] set TkCol(seashell) [list 255 245 238] set TkCol(seashell1) [list 255 245 238] set TkCol(seashell2) [list 238 229 222] set TkCol(seashell3) [list 205 197 191] set TkCol(seashell4) [list 139 134 130] set TkCol(sienna) [list 160 82 45] set TkCol(sienna1) [list 255 130 71] set TkCol(sienna2) [list 238 121 66] set TkCol(sienna3) [list 205 104 57] set TkCol(sienna4) [list 139 71 38] set TkCol(sky\ blue) [list 135 206 235] set TkCol(SkyBlue) [list 135 206 235] set TkCol(SkyBlue1) [list 135 206 255] set TkCol(SkyBlue2) [list 126 192 238] set TkCol(SkyBlue3) [list 108 166 205] set TkCol(SkyBlue4) [list 74 112 139] set TkCol(slate\ blue) [list 106 90 205] set TkCol(slate\ gray) [list 112 128 144] set TkCol(slate\ grey) [list 112 128 144] set TkCol(SlateBlue) [list 106 90 205] set TkCol(SlateBlue1) [list 131 111 255] set TkCol(SlateBlue2) [list 122 103 238] set TkCol(SlateBlue3) [list 105 89 205] set TkCol(SlateBlue4) [list 71 60 139] set TkCol(SlateGray) [list 112 128 144] set TkCol(SlateGray1) [list 198 226 255] set TkCol(SlateGray2) [list 185 211 238] set TkCol(SlateGray3) [list 159 182 205] set TkCol(SlateGray4) [list 108 123 139] set TkCol(SlateGrey) [list 112 128 144] set TkCol(snow) [list 255 250 250] set TkCol(snow1) [list 255 250 250] set TkCol(snow2) [list 238 233 233] set TkCol(snow3) [list 205 201 201] set TkCol(snow4) [list 139 137 137] set TkCol(spring\ green) [list 0 255 127] set TkCol(SpringGreen) [list 0 255 127] set TkCol(SpringGreen1) [list 0 255 127] set TkCol(SpringGreen2) [list 0 238 118] set TkCol(SpringGreen3) [list 0 205 102] set TkCol(SpringGreen4) [list 0 139 69] set TkCol(steel\ blue) [list 70 130 180] set TkCol(SteelBlue) [list 70 130 180] set TkCol(SteelBlue1) [list 99 184 255] set TkCol(SteelBlue2) [list 92 172 238] set TkCol(SteelBlue3) [list 79 148 205] set TkCol(SteelBlue4) [list 54 100 139] set TkCol(tan) [list 210 180 140] set TkCol(tan1) [list 255 165 79] set TkCol(tan2) [list 238 154 73] set TkCol(tan3) [list 205 133 63] set TkCol(tan4) [list 139 90 43] set TkCol(thistle) [list 216 191 216] set TkCol(thistle1) [list 255 225 255] set TkCol(thistle2) [list 238 210 238] set TkCol(thistle3) [list 205 181 205] set TkCol(thistle4) [list 139 123 139] set TkCol(tomato) [list 255 99 71] set TkCol(tomato1) [list 255 99 71] set TkCol(tomato2) [list 238 92 66] set TkCol(tomato3) [list 205 79 57] set TkCol(tomato4) [list 139 54 38] set TkCol(turquoise) [list 64 224 208] set TkCol(turquoise1) [list 0 245 255] set TkCol(turquoise2) [list 0 229 238] set TkCol(turquoise3) [list 0 197 205] set TkCol(turquoise4) [list 0 134 139] set TkCol(violet) [list 238 130 238] set TkCol(violet\ red) [list 208 32 144] set TkCol(VioletRed) [list 208 32 144] set TkCol(VioletRed1) [list 255 62 150] set TkCol(VioletRed2) [list 238 58 140] set TkCol(VioletRed3) [list 205 50 120] set TkCol(VioletRed4) [list 139 34 82] set TkCol(wheat) [list 245 222 179] set TkCol(wheat1) [list 255 231 186] set TkCol(wheat2) [list 238 216 174] set TkCol(wheat3) [list 205 186 150] set TkCol(wheat4) [list 139 126 102] set TkCol(white) [list 255 255 255] set TkCol(white\ smoke) [list 245 245 245] set TkCol(WhiteSmoke) [list 245 245 245] set TkCol(yellow) [list 255 255 0] set TkCol(yellow\ green) [list 154 205 50] set TkCol(yellow1) [list 255 255 0] set TkCol(yellow2) [list 238 238 0] set TkCol(yellow3) [list 205 205 0] set TkCol(yellow4) [list 139 139 0] set TkCol(YellowGreen) [list 154 205 50] set ListeTkCol [array names TkCol] return $ListeTkCol } proc InitTypeScore {type} { switch $type { "sop" { set body [info body ScoreAgentsPair] } "thompson" { set body { global Wg Sequences TAg Mbl debug Cbl MblNeg set s1 $TAg($a1,$n1,seq) set s2 $TAg($a2,$n2,seq) set Lp {} foreach c1 [split $s1 ""] c2 [split $s2 ""] { lappend Lp "$c1$c2" } set Lv [ScoreDeThompson $Lp 0] set sc 0.0 set i 0 set lg [llength $Lv] foreach v $Lv { set sc [expr {$sc + $Wg($lg,$i) * $v}] incr i } set sc [expr {$sc / $Wg($lg)}] return [list $sc 0.0] } } "bild" { set body { global Wg Sequences TAg Mbl debug Cbl MblNeg set s1 $TAg($a1,$n1,seq) set s2 $TAg($a2,$n2,seq) set Lp {} foreach c1 [split $s1 ""] c2 [split $s2 ""] { lappend Lp "$c1$c2" } set Lv [ScoreDeBILD $Lp 0] set sc 0.0 set i 0 set lg [llength $Lv] foreach v $Lv { set sc [expr {$sc + $Wg($lg,$i) * $v}] incr i } set sc [expr {$sc / $Wg($lg)}] return [list $sc 0.0] } } "norm" { set body { set s1 $::TAg($a1,$n1,seq) set s2 $::TAg($a2,$n2,seq) set score [scoreNormAgents $s1 $s2] return [list $score 0.0] } } } proc ::ScoreMotifAgents {n1 a1 n2 a2} "$body" return } proc InitWLC {lfile} { global CanvasLC global FBOnLC global FBOffLC global MaxX MaxY MinX MinY Max global Delta WinX WinY CentX CentY Radius WinScale global lcol set font -*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-* set Max [Maxi $MaxX $MaxY] set Delta 10 set Radius 200 set WinScale [expr {($Radius-2*$Delta)/$Max}] set WinX 400 set WinY 400 set CentX 200 set CentY 200 set w .lulu toplevel $w frame $w.fc grid $w.fc -row 0 -column 0 -sticky news set c $w.fc.c set CanvasLC $c canvas $c -scrollregion "0 0 $WinX $WinY" -width $WinX -height $WinY -relief raise -borderwidth 2 -background black grid $c -row 0 -column 0 -sticky news set x1 $Delta set y1 $Delta set x2 [expr $WinX - $Delta] set y2 [expr $WinY - $Delta] $c create oval $x1 $y1 $x2 $y2 -outline white -width 1 $c create line $CentX $Delta $CentX [expr $WinY-$Delta] -fill white $c create line $Delta $CentY [expr $WinX-$Delta] $CentY -fill white set FBout $w.fbout frame $FBout -bg black grid $FBout -row 0 -column 1 -sticky news button $FBout.exit -text "EXIT" -command "exit" grid $FBout.exit -row 0 -column 0 -sticky ew set cl 1 foreach f $lfile { set col [lindex $lcol [lsearch $lfile $f]] set tf [file rootname $f] button $FBout.b$tf -text " $tf " -bg $col -command [list TraceVecLC $f $col] grid $FBout.b$tf -row $cl -column 0 -sticky ew incr cl } grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 return } proc InitWRegle {} { set Lgt [LongueurDeLAlignement [QuelMode]] set Tirets [string repeat " " [expr {$Lgt + 1}]] set Comptr [string repeat " " [expr {$Lgt + 1}]] set Points [string repeat "." [expr {$Lgt + 1}]] for {set i 1} {$i <= $Lgt} {incr i 10} { if {$i != 1} { set li [string length $i] set Tirets [string replace $Tirets [expr {$i-1}] [expr {$i-1}] "|"] set Comptr [string replace $Comptr [expr {$i-1}] [expr {$i-1+$li-1}] $i] } } set ::TexteWRegle(Points) $Points set ::TexteWRegle(Tirets) $Tirets set ::TexteWRegle(Comptr) $Comptr return } proc InitWebServices {} { package require WS::Client # NCBI service # eUtils services set ret [::WS::Client::GetAndParseWsdl "http://www.ncbi.nlm.nih.gov/entrez/eutils/soap/v2.0/eutils.wsdl"] ::WS::Client::CreateStubs eUtilsService # NCBI service # eFetch services # Only works with refseq or GI accession set ret [::WS::Client::GetAndParseWsdl "http://www.ncbi.nlm.nih.gov/entrez/eutils/soap/v2.0/efetch_seq.wsdl"] ::WS::Client::CreateStubs eFetchSequenceService return } proc InitWg {DoIt} { global Wg MotifLen set len $MotifLen if {! $DoIt} { foreach k {3 5 7 9 11 13 15 17 19 21} { for {set i 0} {$i < $k} {incr i} { set Wg($k,$i) 1.0 } set Wg($k) $k. } } else { # poids gaussiens a 1.0sigme set step [expr {2./($len-1)}] set max [GaussProbability 0.0 0.0 1.0] set sum 0.0 for {set i 0} {$i < $len} {incr i} { set v [expr {-1.0 + $i * $step}] set x [GaussProbability $v 0.0 1.0] set v [expr {$x/$max}] set sum [expr {$sum + $v}] set Wg($len,$i) $v } set Wg($len) $sum if {0} { set Wg(3,0) 0.75 set Wg(3,1) 1.0 set Wg(3,2) 0.75 set Wg(3) 2.5 set Wg(5,0) 0.5 set Wg(5,1) 0.75 set Wg(5,2) 1.0 set Wg(5,3) 0.75 set Wg(5,4) 0.5 set Wg(5) 3.5 set Wg(7,0) 0.3 set Wg(7,1) 0.7 set Wg(7,2) 0.85 set Wg(7,3) 1.0 set Wg(7,4) 0.85 set Wg(7,5) 0.7 set Wg(7,6) 0.3 set Wg(7) 4.7 } } return } proc Init_C_Boot {} { return tcc::reset tcc::ccode { #include #include #include static double SeqMatch(char *seq1, char *seq2, int l) { int r, i; r = 0; for (i=0;i #include #include static double SeqMatch(char *seq1, char *seq2, int l) { int r, i; r = 0; for (i=0;i #include #include #include #include } tcc::ccommand Crand {dummy interp objc objv} { int i, seed, ip, alen; double rd; Tcl_Obj *Lrd; Tcl_GetIntFromObj(interp,objv[1],&alen); Tcl_GetIntFromObj(interp,objv[2],&seed); printf("seed %d\n",seed); fflush(stdout); srand(seed); Lrd = Tcl_NewListObj(0,NULL); for (i=0;i= 62 # A R N D C Q E G H I L K M F P S T W Y V 0.0215 0.0023 0.0178 0.0019 0.0020 0.0141 0.0022 0.0016 0.0037 0.0213 0.0016 0.0004 0.0004 0.0004 0.0119 0.0019 0.0025 0.0015 0.0016 0.0003 0.0073 0.0030 0.0027 0.0022 0.0049 0.0004 0.0035 0.0161 0.0058 0.0017 0.0029 0.0025 0.0008 0.0014 0.0019 0.0378 0.0011 0.0012 0.0014 0.0010 0.0002 0.0010 0.0014 0.0010 0.0093 0.0032 0.0012 0.0010 0.0012 0.0011 0.0009 0.0012 0.0014 0.0006 0.0184 0.0044 0.0024 0.0014 0.0015 0.0016 0.0016 0.0020 0.0021 0.0010 0.0114 0.0371 0.0033 0.0062 0.0024 0.0024 0.0005 0.0031 0.0041 0.0025 0.0012 0.0016 0.0025 0.0161 0.0013 0.0008 0.0005 0.0005 0.0004 0.0007 0.0007 0.0007 0.0004 0.0025 0.0049 0.0009 0.0040 0.0016 0.0009 0.0008 0.0008 0.0005 0.0005 0.0009 0.0012 0.0008 0.0030 0.0054 0.0009 0.0012 0.0183 0.0022 0.0010 0.0009 0.0012 0.0004 0.0008 0.0014 0.0014 0.0005 0.0010 0.0014 0.0016 0.0004 0.0005 0.0191 0.0063 0.0023 0.0031 0.0028 0.0010 0.0019 0.0030 0.0038 0.0011 0.0017 0.0024 0.0031 0.0009 0.0012 0.0017 0.0126 0.0037 0.0018 0.0022 0.0019 0.0009 0.0014 0.0020 0.0022 0.0007 0.0027 0.0033 0.0023 0.0010 0.0012 0.0014 0.0047 0.0125 0.0004 0.0003 0.0002 0.0002 0.0001 0.0002 0.0003 0.0004 0.0002 0.0004 0.0007 0.0003 0.0002 0.0008 0.0001 0.0003 0.0003 0.0065 0.0013 0.0009 0.0007 0.0006 0.0003 0.0007 0.0009 0.0008 0.0015 0.0014 0.0022 0.0010 0.0006 0.0042 0.0005 0.0010 0.0009 0.0009 0.0102 0.0051 0.0016 0.0012 0.0013 0.0014 0.0012 0.0017 0.0018 0.0006 0.0120 0.0095 0.0019 0.0023 0.0026 0.0012 0.0024 0.0036 0.0004 0.0015 0.0196 " set i 0 foreach l [split $blosum62f \n] { set l [string map {"\t" "" "\n" ""} [string trim $l]] if {[string index $l 0] eq "#" || $l eq ""} { continue } regsub -all { +} $l " " l set l [split $l " "] set a [lindex $Laa $i] for {set j 0} {$j <= $i} {incr j} { set b [lindex $Laa $j] set v [lindex $l $j] set M($a,$b) $v set M($b,$a) $v } incr i } set M(laa) $laa return [array get M] } proc InitialiseCouleurs {} { global OrdEtcDir Lookup_Couleurs set frgb [file join $OrdEtcDir "color_rgb.dat"] set fnms [file join $OrdEtcDir "color_names.dat"] set LesRGB [LesLignesDuFichier $frgb] set LesRGB [lrange $LesRGB 1 end] set LesRGB [string trim [join $LesRGB ""]] set LesRGB [split $LesRGB] set LesNms [LesLignesDuFichier $fnms] set LesNms [lrange $LesNms 1 end] set NbV [expr {3*[llength $LesNms]}] foreach {r g b} $LesRGB lacol $LesNms { set lacol [string trim $lacol] set lacolo [CouleurO2Ordali $lacol] set r [expr {int(floor($r * 255))}] set g [expr {int(floor($g * 255))}] set b [expr {int(floor($b * 255))}] set Lookup_Couleurs(${lacolo}) [list $r $g $b] set Lookup_Couleurs(${lacol}) [list $r $g $b] } return } proc InitialiseFenetreOrdali {{behave slave} w} { global Defauts VersionDeOrdali NomFenetreOrdali AExecuter APutser if {[TypeAli] ne "pasdali"} { set file [file tail [set Defauts(Fichier[TypeAli])]] set wtitle "$file - Ordalie Version $VersionDeOrdali" } else { set wtitle "Ordalie Version $VersionDeOrdali" } # pour rR set DialogPorts [DialogPort "GetAll"] if {$DialogPorts ne ""} { append wtitle " Port $DialogPorts" } if {$behave eq "slave"} { catch {destroy $w} set top "${w}_[pid]_[clock scan now]" toplevel $top } else { # master, toplevel is '.' set top . } if {! [info exists NomFenetreOrdali] || $NomFenetreOrdali eq ""} { set NomFenetreOrdali $w } wm title $top $wtitle wm iconname $top "Ordalie" wm maxsize $top [winfo screenwidth $top] [winfo screenheight $top] wm protocol $top WM_DELETE_WINDOW AdieuOrdali grid columnconfig $top 0 -weight 1 grid rowconfig $top 0 -weight 1 wm withdraw $top frame $w grid $w -row 0 -column 0 -sticky news grid rowconfig $w 0 -weight 1 grid columnconfig $w 0 -weight 1 AfficheFenetreOrdali MetAJourWMacs MesCouleurs $w FenetreAuCentre $top wm deiconify $top BindModeNormal if {[Devlpt]} { foreach a [array names Defauts] { set lg [string length $a] set aff "$a [string repeat "." [expr {30-$lg}]] :" AuLog "$aff [set Defauts($a)]" } AuLog "\n" } focus $::NomTextSeq $::NomTextSeq see 1.0 update idletasks return $NomFenetreOrdali } proc InitialisePET91 {} { # Taken from the AAIndex database # set data " # H JOND920103 # D The 250 PAM PET91 matrix (Jones et al., 1992) # R LIT:1814076 PMID:1633570 # A Jones, D.T., Taylor, W.R. and Thornton, J.M. # T The rapid generation of mutation data matrices from protein sequences # J CABIOS 8, 275-282 (1992) # M rows = ARNDCQEGHILKMFPSTWYV, cols = ARNDCQEGHILKMFPSTWYV 2. -1. 5. 0. 0. 3. 0. -1. 2. 5. -1. -1. -1. -3. 11. -1. 2. 0. 1. -3. 5. -1. 0. 1. 4. -4. 2. 5. 1. 0. 0. 1. -1. -1. 0. 5. -2. 2. 1. 0. 0. 2. 0. -2. 6. 0. -3. -2. -3. -2. -3. -3. -3. -3. 4. -1. -3. -3. -4. -3. -2. -4. -4. -2. 2. 5. -1. 4. 1. 0. -3. 2. 1. -1. 1. -3. -3. 5. -1. -2. -2. -3. -2. -2. -3. -3. -2. 3. 3. -2. 6. -3. -4. -3. -5. 0. -4. -5. -5. 0. 0. 2. -5. 0. 8. 1. -1. -1. -2. -2. 0. -2. -1. 0. -2. 0. -2. -2. -3. 6. 1. -1. 1. 0. 1. -1. -1. 1. -1. -1. -2. -1. -1. -2. 1. 2. 2. -1. 1. -1. -1. -1. -1. -1. -1. 1. -1. -1. 0. -2. 1. 1. 2. -4. 0. -5. -5. 1. -3. -5. -2. -3. -4. -2. -3. -3. -1. -4. -3. -4. 15. -3. -2. -1. -2. 2. -2. -4. -4. 4. -2. -1. -3. -2. 5. -3. -1. -3. 0. 9. 1. -3. -2. -2. -2. -3. -2. -2. -3. 4. 2. -3. 2. 0. -1. -1. 0. -3. -3. 4. # // " set Laa ARNDCQEGHILKMFPSTWYV set Lm [split $data \n] set i 0 foreach l $Lm { regsub -all { +} [string trim $l] " " l if {$l ne "" && [string index $l 0] ne "#"} { set Lv [split $l " "] set a [string index $Laa $i] for {set j 0} {$j <= $i} {incr j} { set b [string index $Laa $j] set v [lindex $Lv $j] set M($a,$b) $v set M($b,$a) $v } incr i } } return [array get M] } proc InitialiseRPCA {} { global TRPCA set Lv [split [InitRPCA] \n] lassign $Lv lx ly lz set Laa [split "ARNDCQEGHILKMFPSTWYV" ""] foreach a $Laa x [split $lx] y [split $ly] z [split $lz] { set x [expr {10.*$x}] set y [expr {10.*$y}] set z [expr {10.*$z}] set TRPCA($a) [list $x $y $z] set TRPCA(Norm$a) [S_nV [set TRPCA($a)]] } return } proc InitialiseRasMol {Canal} { global RecuperationEffectuee global tcl_platform global LiaisonCoupee set LiaisonCoupee 0 set Patientons 30 set IlEstLa 0 if {$tcl_platform(platform) != "windows"} { while {[incr Patientons -1]} { set LesInterps [winfo interps] if {[regexp "rasmol" [join $LesInterps "\n"]]} { set IlEstLa 1 break } after 2000 } if { ! $IlEstLa} { FaireLire "Can't connect to RasMol\nCanceled" return } } after 1000 update return } proc InitialiseRosace {} { global OrdEtcDir Rosace set LRos [IniRosace] set i 1 foreach l $LRos { lassign [split $l ","] v a if {$i <= 20} { set RosX($a) $v } else { set RosY($a) $v } incr i } foreach a [array names RosX] { set x [set RosX($a)] set y [set RosY($a)] set Rosace($a) [list $x $y] set Rosace(Norm$a) [S_nV [set Rosace($a)]] } return } proc InitialiseUnArbre {tree} { global Abr LNOrdali subangleMax Xmin Xmax Ymin Ymax Defauts set AId [DecortiqueUnArbre $tree] set Abr($AId,TypeTree) [set Defauts(TypeTree)] set Abr($AId,TAff) "Accession" set A [set Abr(Arbre,$AId)] # Init fonte et parametres par defauts if {"TreeFont$AId" ni [font names]} { font create "TreeFontBoot$AId" -family Helvetica -size [set Defauts(FontSizeTreeBoot)] -weight [set Defauts(FontWghtTree)] font create "TreeFont$AId" -family Helvetica -size [set Defauts(FontSizeTree)] -weight [set Defauts(FontWghtTree)] } set Abr($AId,PADWdt) [set Defauts(CanvasWTree)] set Abr($AId,PADHgt) [set Defauts(CanvasHTree)] set Abr($AId,FWidth) [set Defauts(FWidthTree)] set Abr($AId,FHeight) [set Defauts(FHeightTree)] set Abr($AId,FontSize) [set Defauts(FontSizeTree)] set Abr($AId,FontWght) [set Defauts(FontWghtTree)] set Abr($AId,NfoisX) 1. set Abr($AId,NfoisY) 1.2 set Abr($AId,ScaleR) 1. set Abr($AId,Rotate) 0. set Abr($AId,OffsetX) 5 set Abr($AId,OffsetY) [expr {int([set Abr($AId,NfoisY)]*[lindex [font metrics "TreeFont$AId"] 5])}] set Increment 50. set Abr($AId,Increment) $Increment if {[TypeAli] in [list "XML" "ORD"]} { set Abr(TypeAff) [list "Seq Name" "Accession" "BankId" "Organism" "Description" "Acc + BankId" "Acc + Orga" "Acc + Desc" "Orga + Desc"] } else { set Abr(TypeAff) "Accession" } set Abr($AId,Tag) 0 set Abr($AId,BootShow) 0 set Abr($AId,LSeq) [$A leaves] set Abr($AId,LSeqOri) [$A leaves] if {[llength [SequencesSelectionnees]] == 1} { set Abr($AId,LeafSel) [SequencesSelectionnees] } else { set Abr($AId,LeafSel) [lindex [set Abr($AId,LSeq)] 0] } # Initialisation Dessin Tree2Coordonnees $AId DataDeLArbre $AId AjusteCoordonneesInit $AId return $AId } proc InitialiseVMD {} { global ListeTypesDeFeatures global OrdLibDir VMDsend "CliVMDInit $OrdLibDir" if {[info exists ListeTypesDeFeatures]} { VMDsend "NouvelleFeatures $ListeTypesDeFeatures" } LookupCouleursVMD trace add variable ListeTypeDeFeatures write UpdateVMDFeatures return } proc InitialiseVolPol {} { global VolPol set lvp [split [IniVolPol] \n] foreach l $lvp { lassign $l n v p set VolPol($n) [list $v $p] set VolPol(Norm$n) [S_nV [set VolPol($n)]] } return } proc InitialiseVrp {} { global OrdEtcDir lastX lastY env Vrp set lastX 0 set lastY 0 set Vrp(gap) "-" set Vrp(CmX) 0 set Vrp(CmY) 0 set Vrp(MinX) 0 set Vrp(MaxX) 0 set Vrp(MinY) 0 set Vrp(MaxY) 0 set Vrp(SzX) 0 set Vrp(SzY) 0 set Vrp(ScaleOrig) 10.0 set Vrp(Nb) {} set Vrp(AA1) {} set Vrp(X) {} set Vrp(Y) {} set Vrp(SS) {} set Vrp(Sz) 0 #Graphic settings #set Vrp(font) {Helvetica 12 normal} set Vrp(fontFamily) Helvetica set Vrp(fontSize) 10 set Vrp(fontStyle) normal set Vrp(font) "$Vrp(fontFamily) $Vrp(fontSize) $Vrp(fontStyle)" set Vrp(style1) normal set Vrp(styleItalic) 0 set Vrp(styleRoman) 0 set Vrp(styleUnderline) 0 set Vrp(Scale) 1.0 set Vrp(CX) 0.0 set Vrp(CY) 0.0 set Vrp(TrX) 0.0 set Vrp(TrY) 0.0 set Vrp(Border) 10.0 set Vrp(File) "test.fle" set Vrp(fileType) fle set Vrp(Height) 400 set Vrp(Width) 700 set Vrp(DotSz) [expr {$Vrp(ScaleOrig)/4.0}] set Vrp(oldTag) "" set Vrp(oldTag1) "" set Vrp(oldTag2) "" set Vrp(showChar) red set Vrp(oldChar) lightblue set Vrp(BegRes) 0 set Vrp(EndRes) 0 set Vrp(colLabel) red set Vrp(colDot) SkyBlue2 set Vrp(cursor) [. cget -cursor] set Vrp(busyCursor) watch set VrpC(NbAA) 0 set VrpC(HydX,A) 0.0 set VrpC(HydY,A) 0.0 # landscape orientation set Vrp(printOrient) true set Vrp(seqSel) 0 set Vrp(DataAA) [file join $OrdEtcDir "rosace.txt"] set Vrp(Overwrite) 0 return } proc InsCommun {} { set FichierSqlCommun "[RepertoireDuGenome]/InsCommuns.sql" foreach Nom [ListeDesPABs] { set FichierSql [GscopeFile $Nom "macsimSql"] if {[FileAbsent $FichierSql]} { continue } lappend LeCommun [ContenuDuFichier $FichierSql] } return [SauveLesLignes $LeCommun dans $FichierSqlCommun] } proc InsereGenomicsLink {{Login ""} {OverWrite ""}} { #rR si Login finit par .tcl c'est un fichier if {[string equal -nocase $Login "OverWrite"]} { set Login ""; set OverWrite "OverWrite" } set OverWrite [string equal -nocase $OverWrite "OverWrite"] if { ! $OverWrite } { FaireLire "Now you'll change nothing. \n To OverWrite use InsereGenomicsLink Login OverWrite" } else { if { ! [OuiOuNon "I'll overwrite what I'm allowed to do. OK?"] } { exit } } set PourUnFichierPrecis 0 set LesSources [LesSourcesDeGscope] if {[regexp "\.tcl$" $Login]} { set LesSources [list $Login] set Login "" set PourUnFichierPrecis 1 } set LesMAJ {} foreach F $LesSources { if { ! [regexp ".tcl$" $F]} { continue } if {$Login!="" && ! [regexp "/$Login/" $F]} { continue } if { ! $PourUnFichierPrecis } { set F "[HomeRipp]/gscope/$F" } set LeNew {} set OK 1 foreach Ligne [LesLignesDuFichier $F] { if { ! [regexp {/genomics/g[0-9]+/} $Ligne]} { lappend LeNew $Ligne; continue } set OK 0 regsub -all {/genomics/g[0-9]+/} $Ligne "/genomics/link/" New lappend LeNew $New Espionne $Ligne Espionne $New lappend LesLignesG $Ligne $New } if {$OK} { continue } Espionne $F if { ! [file writable $F]} { FaireLire "Je ne peux pas modifier $F" continue } if {$OverWrite} { lappend LesMAJ [SauveLesLignes $LeNew dans $F] } } AfficheListe $LesMAJ set LesMAJ2 {} foreach F $LesSources { if { ! [regexp ".tcl$" $F]} { continue } if {$Login!="" && ! [regexp "/$Login/" $F]} { continue } if { ! $PourUnFichierPrecis } { set F "[HomeRipp]/gscope/$F" } set LeNew {} set OK 1 foreach Ligne [LesLignesDuFichier $F] { if { ! [regexp {/genomics/} $Ligne]} { lappend LeNew $Ligne; continue } if { [regexp {/genomics/link/} $Ligne]} { lappend LeNew $Ligne; continue } if { [regexp {/genomics/g[^/]+/} $Ligne]} { lappend LeNew $Ligne; continue } set OK 0 regsub -all {/genomics/} $Ligne "/genomics/link/" New lappend LeNew $New Espionne $Ligne Espionne $New lappend LesLignesG $Ligne $New } if {$OK} { continue } Espionne $F if { ! [file writable $F]} { FaireLire "Je ne peux pas modifier $F" continue } if {$OverWrite} { lappend LesMAJ2 [SauveLesLignes $LeNew dans $F] } } AfficheListe $LesMAJ2 } proc InsereHrefAccessDans {Ligne BanqueId {Access ""}} { set ET "EtCoMeRcIaL" set Ref "[WscopeScience] $ET AfficheMoi $ET SequenceDesBanques $ET $BanqueId $ET $Access" set HRef [H_Href $Access $Ref] regsub -all {\:} $Access "\\:" AA regsub $AA $Ligne $HRef LigneAvecRef regsub -all " $ET " $LigneAvecRef {\&} LigneAvecRef return $LigneAvecRef } proc InsereHrefSeqcheckOligoDans {Ligne S P {PGS ""}} { set LigneAvecRef $Ligne set ET "EtCoMeRcIaL" if {$P!=""} { set Ref "[WscopeScience] $ET ShowOli $ET P1456" set HRef [H_Href $P $Ref] regsub " $P " $LigneAvecRef " $HRef " LigneAvecRef } set LesFicSeq [LocaliseLesTfasDuSeqCheck $S] set LesNouvellesLignesAvecRef {} foreach FicSeq $LesFicSeq { set DirSeq [file dirname $FicSeq] set Qui [file tail $FicSeq] regsub "[RepertoireDuGenome]/" $DirSeq "" Quoi set Ref "[WscopeScience] $ET FileMoi $ET $Quoi $ET $Qui" set HRef [H_Href $S $Ref] regsub " $S " $LigneAvecRef " $HRef " NouvelleLigneAvecRef lappend LesNouvellesLignesAvecRef $NouvelleLigneAvecRef } if {$LesNouvellesLignesAvecRef!={}} { set LigneAvecRef [join $LesNouvellesLignesAvecRef "\n"] } regsub -all " $ET " $LigneAvecRef {\&} LigneAvecRef return $LigneAvecRef } proc InsereNouvelleSequence {n s} { global {*}[info globals "TD*"] db TabSF set ins "NULL" foreach t {TDesSeqnames TDesAccess TDesBId TDesDescriptifs TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesPhylum TDesGO TDuLineage TDesHydro TDespI TDesMolW} { set v [set ${t}($n)] if {! [string is integer -strict $v] && ! [string is double -strict $v]} { if {$v eq ""} { lappend ins "NULL" } else { set v [string map [list "'" "''"] $v] lappend ins "'$v'" } } else { lappend ins $v } } set sdegap [string map {" " "" "." ""} $s] lappend ins "'$sdegap'" $db eval "insert into seqinfo values ([join $ins ,])" set pki [$db last_insert_rowid] set sqn [set TDesSeqnames($n)] $db eval {insert into seqali values (NULL, $pki, $sqn, $s)} return } proc Inseredata {Table FichierCsv LesTetes} { set Commande "copy $Table ($LesTetes) FROM '$FichierCsv' DELIMITER AS ';' CSV;" Espionne "$Commande" return [GxDbSqlExec $Commande] } proc InseredataOld {Table FichierCsv LesTetes} { set Commande "copy $Table ($LesTetes) FROM '$FichierCsv' DELIMITER AS ';' CSV;" CanalSqlGxDb SqlExec $Commande CanalSqlDisconnect } proc InsertionSequencesAPosition {Lnoms Lseqs Lnadd Lsadd iInsert} { # insertion after a given seq if {$iInsert eq "end"} { # find index of last non-empty element set i [expr {[llength $Lnoms] - 1}] set nom [string trim [lindex $Lnoms $i]] while {$nom eq ""} { incr i -1 set nom [string trim [lindex $Lnoms $i]] } } incr i foreach n $Lnadd s $Lsadd { set Lnoms [linsert $Lnoms $i $n] set Lseqs [linsert $Lseqs $i $s] incr i } return [list $Lnoms $Lseqs] } proc InsertionSequencesDansGroupes {LNAli LSAli LNAdd LSAdd} { global SDG LNDG # no groups, return if {[llength $LNDG] == 1} { foreach seq $Lseq { set GroupeDeLaSequence($seq) "GroupeToutLeMonde" lappend SDG(GroupeToutLeMonde) $seq } return } foreach n $LNAli s $LSAli { if {$n ne ""} { lappend Lns $n $s } } foreach n $LNAdd s $LSAdd { lappend Lns $n $s } puts [join $Lns \n] array set TPCI [CalculeLesPCIGenerique $Lns] DefineGroupForNewSeq $LNAdd TPCI # rebuild seq list if {[llength [lsearch -regexp -all $LNDG {^Group}]] > 1} { set Lg [lrange $LNDG 1 end] } else { set Lg $LNDG } set Ln [list] ; set Ls [list] foreach g $Lg { if {! [regexp {^Group} $g]} {continue} lappend Ln {} lappend Ls {} foreach nm [set SDG($g)] { set i [lsearch -exact $Lns $nm] set sq [lindex $Lns $i+1] lappend Ls $sq lappend Ln $nm } lappend Ln {} lappend Ls {} } return [list $Ln $Ls] } proc InsideCSTB {} { global InsideCSTB global OutsideCSTB if {[info exists InsideCSTB]} { return $InsideCSTB } set HostEna "" catch {set HostEna [exec host ena]} set InsideCSTB [regexp "192.168.10.130" $HostEna] set OutsideCSTB [expr ! $InsideCSTB] return $InsideCSTB } proc InspecteListe {l {indent 0}} { if {$indent == 5 || ! [string is list -strict $l] || ! [regexp " " $l]} { puts "[string repeat $indent $indent] $l" return } incr indent foreach elt $l { InspecteListe $elt $indent } } proc InstallEnv {{p ""}} { global OrdaliDir tcl_platform env if {$p eq ""} { package require platform set p [::platform::generic] } if {$tcl_platform(platform) eq "windows"} { set odir [file join o:/ ordali] } else { set odir $env(ORDALIDIR) } switch $p { "Linux-x86" - "linux-ix86" { set rep "Linux-x86" set pre lib set suf ".so" } "Linux-x86_64" - "linux-x86_64" { set rep "Linux-x86_64" set pre lib set suf ".so" } "Windows" - "win32-ix86" { set rep Windows set pre "" set suf ".dll" } "Mac" - "macosx-ix86" { set rep MacOSX set pre "lib" set suf ".dylib" } } # first make it clean puts "cleaning ..." set home [pwd] cd [file join $OrdaliDir lib] foreach d [glob -nocomplain -type d *] { file delete -force -- $d } cd $home file delete -force [file join $OrdaliDir lib] puts "copying pure-tcl packages ..." file copy -force [file join $OrdaliDir Extensions AllPlatform] [file join $OrdaliDir lib] puts "copying platform specific packages ..." foreach pkg {"tclcluspack0.1" "tclfastme0.1" "tsurf0.1" "biotext0.1" "tclordalie0.1"} { set libin [file join $odir Extensions $pkg $rep "${pre}${pkg}$suf"] set pkgin [file join $odir Extensions $pkg $rep pkgIndex.tcl] set libout [file join $odir lib $pkg "${pre}${pkg}$suf"] set pkgout [file join $odir lib $pkg pkgIndex.tcl] # create dir file mkdir [file join $OrdaliDir lib $pkg] file copy -force $libin $libout file copy -force $pkgin $pkgout if {$pkg eq "biotext0.1"} { file copy -force [file join $odir Extensions $pkg biotext.tcl] [file join $odir lib $pkg] } } # Tcl/Tk platform specific extensions # tcl3d file copy -force [file join $odir Extensions $rep tcl3d-0.4.1 tcl3d0.4.1] [file join $odir lib] file copy -force [file join $odir Extensions $rep tcl3d-0.4.1 extlibs] [file join $odir lib] # sqlite3 file copy -force [file join $odir Extensions $rep sqlite3] [file join $odir lib] # tdom file copy -force [file join $odir Extensions $rep tdom-0.8.3] [file join $odir lib] puts "\ndone !\n" exit } proc InteRosace {Type {K ""}} { global RosaceCourante global LesInteRosacesPossibles global LesInteRosaces if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } if {$Type=="Which"} { if { ! [info exists $LesInteRosaces($K)] || [llength $LesInteRosaces($K)]==0} { FaireLire "No Interior Wheel" } else { FaireLire "[join $LesInteRosaces($K) "\n"]" } return "" } if {$Type=="New"} { AiguilleLaListe {} $K "UneListe" } if { ! [info exists LesInteRosacesPossibles]} { foreach Procedure [info procs] { if {[regexp "^RosaceDe" $Procedure]} { lappend LesInteRosacesPossibles $Procedure } } } set InteRo [ChoixParmi [concat $LesInteRosacesPossibles "Erase_all"]] if {$InteRo==""} { return "" } if {$InteRo=="Erase_all"} { AiguilleLaListe {} $K "UneListe" ; return "" } lappend LesInteRosaces($K) $InteRo $InteRo $K } proc IntegerApres {Champ dans Texte} { return [ValeurApres $Champ dans $Texte "%d"] } proc IntegerEnFin {de Texte} { return [ValeurEnFin de $Texte "%d"] } proc IntegerToAscii {I} { set Ascii [format "%c" $I] return $Ascii } proc IntegerToRGB {Couleur} { binary scan [binary format "i*" $Couleur] "c1c1c1c1" b g r v set r [expr ( $r + 0x100 ) % 0x100] set g [expr ( $g + 0x100 ) % 0x100] set b [expr ( $b + 0x100 ) % 0x100] return "$r $g $b" } proc IntegralToMb {FichierGO} { foreach Nom [ListeDesPABs] { set LesGO [InterrogeGeneOntology $FichierGO $Nom LesGO] if {$LesGO!=""} { foreach GO $LesGO { #Espionne "$Nom $GO" if {$GO=="GO:0016021"} {Espionne $Nom} } } } } proc InterGene {} { # Détermine le nombre de SBS dans les intergènes # Déclaration des fichiers set FichierDesProximites [open "/tmp/Conservation/MappingTotal.txt" "r"] set FichierLog "/tmp/Conservation/Intergenes.txt" # Suppressions des éventuelles versions précédentes des fichiers if { [file exists $FichierLog] } { file delete $FichierLog } # Compteurs : set CompteurIntergenes 0 set CompteurAval 0 set CompteurAmont 0 set CompteurAvalValide 0 set CompteurAmontValide 0 while { [gets $FichierDesProximites LigneMapping] >=0 } { set ExonOuIntron "" ScanLaListe $LigneMapping ID ChromosomeH StartH EndH Acc DebSBS FinSBS OrientationSBS DistanceAuTSS ExonOuIntron CdsOuPas UtrOuPas OccupationExonOuIntron if { $ExonOuIntron == "" } { incr CompteurIntergenes if { $DistanceAuTSS < 0 } { incr CompteurAmont if { $DistanceAuTSS > -20000 } { incr CompteurAmontValide } } else { incr CompteurAval if { $DistanceAuTSS < 20000 } { incr CompteurAvalValide } } } } AppendAuFichier $FichierLog "=====================================" AppendAuFichier $FichierLog " Statistiques du traitement InterStaf " AppendAuFichier $FichierLog "=====================================" AppendAuFichier $FichierLog " " AppendAuFichier $FichierLog "* Dans un Intergenes: $CompteurIntergenes" AppendAuFichier $FichierLog "* En 'amont' d'un gène : $CompteurAmont ($CompteurAmontValide à moins de 20kb)" AppendAuFichier $FichierLog "* En 'aval' d'un gène : $CompteurAval ($CompteurAvalValide à moins de 20kb)" } proc InteractantDes90 {} { set LesTar {}; set premierefois 1 set Fichier "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/9606.string" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^PID" $Ligne]} { continue } set LesMots [split $Ligne "\t"] set Sou [lindex $LesMots 1] set Tar [lindex $LesMots 3] if {$premierefois} { lappend LesTar $Tar set SouPrecedent $Sou set premierefois 0 continue } if {$SouPrecedent == $Sou} { lappend LesTar $Tar } else { set Targets [join $LesTar " | "] set LigneResult "$SouPrecedent;$Targets" lappend LesLignesResult $LigneResult set LesTar {} lappend LesTar $Tar } set SouPrecedent $Sou } set Targets [join $LesTar " | "] set LigneResult "$SouPrecedent;$Targets" lappend LesLignesResult $LigneResult SauveLesLignes $LesLignesResult dans "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/TousInteractantDes90" } proc InteractantDes90PourCytoscape {} { #attention voir interet de ce fichier set Fichier1 "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/9606-QueInitial.string" set Fichier2 "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/9606.string" foreach Ligne [LesLignesDuFichier $Fichier1] { if {[regexp "^PID" $Ligne]} { continue } set LesMots [split $Ligne "\t"] set GnInitial1 [lindex $LesMots 1] lappend LesGnInitial1 $GnInitial1 } set LesGnInitial1 [ListeSansDoublon $LesGnInitial1] foreach Ligne [LesLignesDuFichier $Fichier2] { set trouve 0 if {[regexp "^PID" $Ligne]} { continue } set LesMots [split $Ligne "\t"] set GnInitial2 [lindex $LesMots 1] foreach Gn1 $LesGnInitial1 { if {$GnInitial2==$Gn1} { set trouve 1 lappend LesLignesResult $Ligne break } } if {!$trouve} {Espionne "$GnInitial2 trouve pas"} } #SauveLesLignes $LesLignesResult dans "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/9606-AcTousInteractants.string" } proc InteractionPfamComplet {{repertoire ""}} { #il me faut la liste des pfams tous court.... pour faire la requete... CanalSqlDomine set listeDesPfams [ListePfamComplex] set Domain2 {} foreach pfam $listeDesPfams { if {$pfam != ""} { set idpfam [split $pfam "-"] if {[info exists PfamProt([lindex $idpfam 0])]} { #Espionne "PfamProt([lindex $idpfam 0]) existe ---> $PfamProt([lindex $idpfam 0])" set listeProt [split $PfamProt([lindex $idpfam 0]) "|"] set Vue 0; foreach prot $listeProt { #Espionne "$prot == [lindex $idpfam 1]" if {$prot==[lindex $idpfam 1]} { set Vue 1; } } if {$Vue==0} { #Espionne "dans vue 0" set pfamC $PfamProt([lindex $idpfam 0]) #Espionne "Avant: $pfamC" append pfamC "|[lindex $idpfam 1]" #Espionne "Apres: $pfamC" #Espionne "ajouter: [lindex $idpfam 0] -----> $PfamProt([lindex $idpfam 0])" set PfamProt([lindex $idpfam 0]) $pfamC #Espionne "ajouter: [lindex $idpfam 0] -----> $PfamProt([lindex $idpfam 0])" } } else { set PfamProt([lindex $idpfam 0]) "[lindex $idpfam 1]" #Espionne "[lindex $idpfam 0] ###### $PfamProt([lindex $idpfam 0])" } #Espionne "###### $PfamProt([lindex $idpfam 0])" #Espionne "[lindex $idpfam 0] ------- $PfamProt([lindex $idpfam 0])" if {$Domain2==""} { append Domain2 "'[lindex $idpfam 0]'" } else { append Domain2 ",'[lindex $idpfam 0]'" } } } #Espionne "Domaine2:" #Espionne "$Domain2" #faire la liste des pabs... set Resultat [array size 24] set Liste [ListeDesPABs] foreach pab $Liste { set protCible [ValiGN $pab] #Espionne "\t $pab : $protCible" set ListePfam [getMacsimsInf $pab ConcatPfam] #faire la requete dans la base DOMINE foreach pfam $ListePfam { set pfam [lindex [split $pfam ";"] 3] if {[regexp {(.*)from.*} $pfam a p]} { set pfam $p; } if {[regexp {^PROP_(.*).*} $pfam a p]} { set pfam $p; } set pfam [lindex [split $pfam " "] 0] #Espionne "pfam:$pfam" set requete "SELECT distinct domain2 FROM INTERACTION where Domain1='$pfam' and Domain2 in ($Domain2)" #Espionne "$requete" foreach {domaine} [SqlExec $requete ""] { #Espionne "domaine:$domaine" #recuperer la prote du domaine set protein $PfamProt($domaine) #Espionne $protein #ici faire test si existe deja... set protCle $protCible append protCle "_$protein" set value $pfam append value "-$domaine" append protCle $value #set Result($protCle) $value lappend Result $protCle #array set tabpseudo(1 , 1) {$domaine} } #valeur cle->valeur..; PF-->P1256 } } return $Result # foreach nom [lsort [array names Result]] { # puts "Valeur associée à $nom: $Result($nom)" # } # foreach {nom valeur} [array get tableau] { # puts "Valeur associée à \"$nom\": $valeur" # } # set PfamComplexL [ListePfamComplex] # foreach pfam $PfamComplexL { # set pfam # } } proc InteractiveMode {{Mode ""}} { global InteractiveMode if { ! [info exists InteractiveMode]} { set InteractiveMode 1 } if {$Mode==""} { return $InteractiveMode } set InteractiveMode 1 if {[regexp -nocase {(Batch|Off|0)} $Mode]} { set InteractiveMode 0 } set Chut [expr ! $InteractiveMode] global OuiOuNonToujoursParDefaut ; set OuiOuNonToujoursParDefaut $Chut global EspionneNon ; set EspionneNon $Chut global FaireLireNon ; set FaireLireNon $Chut global EntreToujoursDefaut ; set EntreToujoursDefaut $Chut return $InteractiveMode } proc InterpreteLaLigneDeCommande {Ligne} { global env AExecuter APutser if {[info exists env(ORDALIEONWEB)]} { set ::EspionneNon 1 } Espionne "---------------------------------------------------" Espionne "[DonneDateEtHeure]" Espionne "Program : $::argv0" Espionne "options : $::argv" Espionne "---------------------------------------------------" Espionne "" # Pour Julie, enleve les = au cas ou ... set Ligne [string map {= " "} $Ligne] regsub -all { +} $Ligne " " Ligne set Ligne [string trim $Ligne] # Pas d'arguments if {$Ligne eq ""} { puts "\ntype 'ordalie help' to access on-line arguments\n" LoadTclPackages return } set Arg1 [lindex [split $Ligne " "] 0] set Val1 [lindex [split $Ligne " "] 1] ##################### # ADMIN Ordali : # # On ne load ni packages tcl ou tk. # On execute et puis exit if {$Arg1 eq "admin"} { puts [eval {*}[lrange [split $Ligne " "] 1 end]] exit } ########################### #LoadTclPackages namespace path {::tcl::mathop ::tcl::mathfunc} # from GSCOPE : puts et exe if {$Arg1 eq "puts"} { set reponse [eval {*}[lrange [split $Ligne " "] 1 end]] TaisToi 0 puts $reponse exit #return } if {$Arg1 eq "exe"} { LesDefauts Mode batch eval {*}[lrange [split $Ligne " "] 1 end] return "dansexe" } LoadTclPackages # manage project, if {$Arg1 eq "project"} { if {$Val1 eq ""} { FaireLire "Please supply a project name !" exit } LoadTkAndPackages CheckForProject $Val1 return "stop" } # traite help if {[string tolower $Arg1] eq "help"} { set Ligne "-ordalihelp 1" } elseif {[file exists $Arg1]} { set ftype [file extension $Arg1] switch $ftype { ".macsim" - ".xml" {set type "xml"} ".tfa" - ".tfasta" - ".fasta" {set type "tfa"} ".msf" {set type "msf"} ".aln" {set type "aln"} ".rsf" {set type "rsf"} ".ord" {set type "ord"} default {set type [FormatDuFichierSequence $Arg1]} } if {$type ne ""} { set Ligne "-$type $Ligne" } } # bad argument # at this point, all arguments should start with # a '-' character if {[string index $Ligne 0] ne "-"} { FaireLire "\"$Ligne\" is not recognized or does not exists !" return } # Traite les arguments. Sont maintenant tous sous # forme de paire cle-valeur set Liste [DonneListeCleValeur $Ligne] set AExecuter "" foreach {e v} $Liste { set e [string tolower $e] switch $e { "-puts" { #puts [eval $v] set APutser $v } "-exe" { #eval $v if {[string length $AExecuter]} { append AExecuter " ; " } append AExecuter $v } "-selnom" { LesDefauts SelectionNom $v } "-time" { LeTempsDesProcs } "-showss" { LesDefauts AffSS $v } "-downloadpdb" { switch $v { "0" {set what "dont"} default {set what "internet"} } LesDefauts DownloadPDB $what } "-balibase" { LesDefauts Balibase $v LesDefauts CheckSeq 0 LesDefauts AffSS 1 } "-precompute" { LesDefauts PreCompute $v } "-msf" { set FichierMSF $v LesDefauts FichierMSF $FichierMSF LesDefauts TypeAli MSF } "-rsf" { set FichierRSF $v LesDefauts FichierRSF $FichierRSF LesDefauts TypeAli RSF } "-tfa" { set FichierTFA $v LesDefauts FichierTFA $FichierTFA LesDefauts TypeAli TFA } "-xml" { set FichierXML $v LesDefauts FichierXML $FichierXML LesDefauts TypeAli XML } "-ord" { set FichierORD $v LesDefauts FichierORD $FichierORD LesDefauts TypeAli ORD } "-aln" { set FichierALN $v LesDefauts FichierALN $FichierALN LesDefauts TypeAli ALN } "-group" { set TypeDeGroupesACreer $v LesDefauts TypeDeGroupesACreer $TypeDeGroupesACreer if {$TypeDeGroupesACreer == "fichierclu"} { set fichierclu [lindex $Liste [expr {$Idx + 2}]] LesDefauts FichierClu $fichierclu } } "-batch" { LesDefauts Mode Batch LesDefauts Exit 1 LesDefauts LogAtStartup 0 } "-mode" { LesDefauts Mode [string tolower $v] LesDefauts LogAtStartup 0 } "-convert" { set fmt [string toupper $v] LesDefauts DownloadPDB dont LesDefauts Mode Batch LesDefauts Exit 1 LesDefauts DownloadPDB none set AExecuter "SauveLAlignement $fmt JLeSauveAs" } "-project" { LesDefauts InProject 1 LesDefauts Project $v } "-devlpt" { LesDefauts Devlpt 1 } "-run" { LesDefauts Run 1 } "-dump" { if {$v ne ""} { set FichierDump $v } else { set FichierDump 1 } LesDefauts Dump $FichierDump } "-exit" { LesDefauts Exit 1 } "-checkseq" { LesDefauts CheckSeq $v } "-debug" { if {$v eq ""} {set v 1} LesDefauts Debug $v } "-clusdeb" { LesDefauts clusdeb $v } "-weight1" { LesDefauts Poids $v } "-record" { bind Button <1> {+Record %W %x %y} bind Menu <1> {+Record %W %x %y} bind Menubutton <1> {+Record %W %x %y} bind Radiobutton <1> {+Record %W %x %y} bind Checkbutton <1> {+Record %W %x %y} } "-weight2" { LesDefauts Poids2 $v } "-weight3" { LesDefauts Poids3 $v } "-savelog" { LesDefauts SaveLog $v } "-threshold" { set Threshold $v if {$v >= 51 && $v <= 100} { LesDefauts Threshold $v } } "-pdb" { set Idx [lsearch $Liste "-pdb"] set FichierPDB [lindex $Liste [expr {$Idx+1}]] LesDefauts FichierPDB $FichierPDB set SeqAssocie [lindex $Liste [expr {$Idx+2}]] LesDefauts SeqAssocie $SeqAssocie LesDefauts PDB 1 } "-view" { LesDefauts Visualize $v set FichierOMAC $v LesDefauts FichierOMAC $v } "-script" { if {[file exists $v]} { LesDefauts RunScript 1 LesDefauts Script $v } } "-ordalihelp" { OrdalieHelpOnLine exit } } } return } proc InterproScanWebService {args} { set Lquery [list] set YaEmail 0 foreach {k v} $args { switch $k { "-sequence" { lappend Lquery sequence $v } "-appl" { } "-goterms" { if {! [string is boolean $v]} { puts "Bad value for -goterms !\nShould be a boolean." continue } lappend Lquery goterms $v } "-pathways" { if {! [string is boolean $v]} { puts "Bad value for -pathways !\nShould be a boolean !" continue } lappend Lquery pathways $v } "-title" { lappend Lquery title $v } "-email" { lappend Lquery email $v set YaEmail 1 } } } if {! $YaEmail} { lappend Lquery email luc.moulinier@laposte.net } set query [::http::formatQuery {*}$Lquery] set baseUrl "http://www.ebi.ac.uk/Tools/services/rest/iprscan5" return [EBIWebService $baseUrl $query] } proc Interproscan {args} { global Interproscan if {$args=={}} { set Qui "" set Quoi "" } else { set Qui [lindex $args 0] set Quoi [join [lrange $args 1 end] ","] } if {$Qui==""} { set Qui "ListOf" ; set Quoi "Filename" } if {[info exists Interproscan($Qui,$Quoi)]} {return $Interproscan($Qui,$Quoi)} if {[info exists Interproscan("EstCharge")]} {return ""} set Interproscan("EstCharge") 1 set SpliRet 0 if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set SpliRet 1 set LesRepertoires [LesRepertoires "Mouse" "Mod"] } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set SpliRet 1 set LesRepertoires [LesRepertoires "Rat" "Mod"] } else { set RepertoireTf "[RepertoireDuGenome]/tfasdescopains" set LesRepertoires [list $RepertoireTf] } set RepertoireInterproscan "[RepertoireDuGenome]/Interproscan" set Interproscan(DirOut,) $RepertoireInterproscan set LesFichierInterproscan [glob -nocomplain "$RepertoireInterproscan/*.is"] if {$LesFichierInterproscan=={}} { file mkdir $RepertoireInterproscan foreach Repertoire $LesRepertoires { foreach FileIn [glob -nocomplain "$Repertoire/*"] { if {$SpliRet} { set Queue [file tail $FileIn] regsub {\.[^\.]+$} $Queue "" Cluster set Box [InterrogeBox $Cluster Box] } else { set Box [file tail $FileIn] } set FileOut "$Box.is" set Commande "/bips/bin/iprscan -cli -i $FileIn -o $RepertoireInterproscan/$FileOut -appl hmmpfam -format raw -goterms -iprlookup" #dans le cas ou on lance d'une lame on est redirige vers starv2 car marche pas sur lame if {![regexp "star" [info hostname]]} {set Commande "rsh starv2 $Commande"} catch {eval exec $Commande} #dans le cas ou on lance sur une machine ou iprscan n existe pas, on arrete tout pour eviter de tourner a l'infini if {[glob -nocomplain "$RepertoireInterproscan/*.is"]=={}} {return ""} } } unset Interproscan return [Interproscan $Qui $Quoi] } set Interproscan(ListOf,Filename) $LesFichierInterproscan foreach FichierInterproscan $LesFichierInterproscan { set Queue [file tail $FichierInterproscan] regsub {\.[^\.]+$} $Queue "" Box lappend Interproscan(ListOf,Box) $Box set Interproscan($Box,ListOf,IdDomain) {} foreach LigneInterproscan [LesLignesDuFichier $FichierInterproscan] { set LesMotsInterproscan [split $LigneInterproscan "\t"] set Technique [lindex $LesMotsInterproscan 3] if {$Technique!="HMMPfam"} {continue} set Name [lindex $LesMotsInterproscan 0] #enleve les extensions .CONTIG en fin de nom des clones (je ne sais plus pourquoi) #regsub {\.[^\.]+$} $Name "" Name lappend Interproscan(ListOf,Name) $Name set Interproscan(ListOf,Name) [ListeSansDoublon $Interproscan(ListOf,Name)] lappend Interproscan($Name,ListOf,Box) $Box set Interproscan($Name,ListOf,Box) [ListeSansDoublon $Interproscan($Name,ListOf,Box)] lappend Interproscan($Box,Name) $Name set Interproscan($Box,Name) [ListeSansDoublon $Interproscan($Box,Name)] set IdDomain [lindex $LesMotsInterproscan 4] set DesDomain [lindex $LesMotsInterproscan 5] set Start [lindex $LesMotsInterproscan 6] set Stop [lindex $LesMotsInterproscan 7] set Score [lindex $LesMotsInterproscan 8] lappend Interproscan($Box,$Name,IdDomain) $IdDomain set Interproscan($Box,$Name,IdDomain) [ListeSansDoublon $Interproscan($Box,$Name,IdDomain)] set Interproscan($Box,$Name,$IdDomain,DesDomain) $DesDomain #lappend car un domaine PFAM peut se trouver a deux endroits differents sur le meme Name lappend Interproscan($Box,$Name,$IdDomain,Start-Stop) $Start-$Stop set Interproscan($Box,$Name,$IdDomain,$Start-$Stop,Score) $Score lappend Interproscan($Box,ListOf,IdDomain) $IdDomain lappend Interproscan($Box,$IdDomain,ListOf,Name) $Name } set Interproscan($Box,ListOf,IdDomain) [lsort -unique $Interproscan($Box,ListOf,IdDomain)] } return [Interproscan $Qui $Quoi] } proc InterproscanFromOneFile {args} { #set FichierInterproscan "/home/brochetx/Documents/bilan_presence|absence/TAF9/RecherchePDB/test/resultInter2" #set FichierInterproscan "/genomics/link/TTL/ttl_08062009_radwen.ipr" #set FichierInterproscan "" global InterproscanFromOneFile if {$args=={}} { set Qui "" set Quoi "" } else { set Qui [lindex $args 0] set Quoi [join [lrange $args 1 end] ","] } #attention doit toujours preciser le fichier Interproscan avant de commencer ac [InterproscanFromOneFile File TonFile] if {$Qui=="File"} { if {[info exists InterproscanFromOneFile]} { unset -nocomplain InterproscanFromOneFile } set InterproscanFromOneFile(File) $Quoi return "" } if {$Qui==""} { set Qui "ListOf" ; set Quoi "Name" } if {[info exists InterproscanFromOneFile($Qui,$Quoi)]} {return $InterproscanFromOneFile($Qui,$Quoi)} if {[info exists InterproscanFromOneFile("EstCharge")]} {return ""} set InterproscanFromOneFile("EstCharge") 1 foreach LigneInterproscan [LesLignesDuFichier $InterproscanFromOneFile(File)] { set LesMotsInterproscan [split $LigneInterproscan "\t"] set Technique [lindex $LesMotsInterproscan 3] if {$Technique!="HMMPfam"} {continue} set Name [lindex $LesMotsInterproscan 0] lappend InterproscanFromOneFile(ListOf,Name) $Name set InterproscanFromOneFile(ListOf,Name) [ListeSansDoublon $InterproscanFromOneFile(ListOf,Name)] set IdDomain [lindex $LesMotsInterproscan 4] set DesDomain [lindex $LesMotsInterproscan 5] set Start [lindex $LesMotsInterproscan 6] set Stop [lindex $LesMotsInterproscan 7] set Score [lindex $LesMotsInterproscan 8] lappend InterproscanFromOneFile($Name,IdDomain) $IdDomain set InterproscanFromOneFile($Name,IdDomain) [ListeSansDoublon $InterproscanFromOneFile($Name,IdDomain)] set InterproscanFromOneFile($Name,$IdDomain,DesDomain) $DesDomain lappend InterproscanFromOneFile($Name,$IdDomain,Start-Stop) $Start-$Stop set InterproscanFromOneFile($Name,$IdDomain,$Start-$Stop,Score) $Score lappend InterproscanFromOneFile($IdDomain,ListOf,Name) $Name } return [InterproscanFromOneFile $Qui $Quoi] } proc InterproscanRattrapage {} { #NB: changer ListBox selon le cas set SpliRet 0 if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set SpliRet 1 set LesRepertoires [LesRepertoires "Mouse" "Mod"] set ListBox [list SPM0036 SPM0515 SPM1349 SPM2091 SPM2909 SPM3531 SPM4510 SPM5327 SPM5773 SPM6592] } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set SpliRet 1 set LesRepertoires [LesRepertoires "Rat" "Mod"] set ListBox [list SPR2839 SPR4847 SPR4952 SPR5284] } else { set RepertoireTf "[RepertoireDuGenome]/tfasdescopains" set LesRepertoires [list $RepertoireTf] } set RepertoireInterproscan "[RepertoireDuGenome]/Interproscan" foreach Box $ListBox { set LesElus($Box) 1 } foreach Repertoire $LesRepertoires { foreach FileIn [glob -nocomplain "$Repertoire/*"] { if {$SpliRet} { set Queue [file tail $FileIn] regsub {\.[^\.]+$} $Queue "" Cluster set Box [InterrogeBox $Cluster Box] } else { set Box [file tail $FileIn] } if {[info exists LesElus($Box)] && $LesElus($Box) == 1} { set FileOut "$Box.is" Espionne $FileOut set Commande "/bips/bin/iprscan -cli -i $FileIn -o $RepertoireInterproscan/$FileOut -appl hmmpfam -format raw -goterms -iprlookup" catch {eval exec $Commande} } } } } proc Interroge2GO {args} { global TableauInterrogation2GO if {0} { global OntoEstAuCafe if {[PreFixe]!="Onto"} { set OntoEstAuCafe 1 } if {[info exists OntoEstAuCafe] && $OntoEstAuCafe} { return [QuestionDeScience Ontology "ret Interroge2GO [join $args " "]"] } } if {$args == "unset"} { if {[info exists TableauInterrogation2GO]} {unset TableauInterrogation2GO} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogation2GO($Quoi)]} { return [lsort -unique [set TableauInterrogation2GO($Quoi)]] } ###################CHARGE Fichier2GO################### if {![info exists TableauInterrogation2GO(EstCharge)]} { set TableauInterrogation2GO(EstCharge) 1 Charge2GO TableauInterrogation2GO } if {![info exists TableauInterrogation2GO($Quoi)]} {return} return [lsort -unique [set TableauInterrogation2GO($Quoi)]] } proc InterrogeActiChip2Affy {args} { Wup "Permet de questionner les Probe_Set commun entre ActiChip et Affymetrix UG133A 2.0" Wup "Voir aussi decharge et charge" global TabActiChip_Affy #Arguments: ########### #Index est le numero unique attribue en fonction de la ligne dans le fichier affymetrix #Pour faire la correspondance entre les deux #$AccGscope Probe_Set - Nom des Probe Set (11 references) peut etre une liste # AccGscope AccessRefSeq - Access RefSeq correspondant au gscope #$AccRefSeq Probe_Set - Nom des Probe Set (11 references) peut etre une liste # AccRefSeq AccessGscope - Access gscope correspondant au RefSeq #$ProbeSetID AccessRefSeq - Access RefSeq correspondant au Probe Set (11 references) # ProbeSetID AccessGscope - Access gscope correspondant au Probe Set (11 references) #LesAccessGscope - Liste des Access Gscope disponible if {$args == "unset"} { if {[info exists TabActiChip_Affy]} {array unset TabActiChip_Affy} return "" } set Quoi [join $args ","] if { [info exists TabActiChip_Affy($Quoi)]} {return [set TabActiChip_Affy($Quoi)]} if {! [info exists TabActiChip_Affy(EstCharge)]} {set TabActiChip_Affy(EstCharge) 0} if {$Quoi=="Decharge"} { DechargeActiChip2Affy return "" } if { [info exists TabActiChip_Affy(EstVide)]} {return ""} if { [info exists TabActiChip_Affy($Quoi)]} {return [set TabActiChip_Affy($Quoi)]} ###################CHARGE le Fichier avec les ActiChip2Affy######################### if {! [info exists TabActiChip_Affy(EstCharge)] || [set TabActiChip_Affy(EstCharge)]=="0"} { set TabActiChip_Affy(EstCharge) 1 set ResultatCharge [ChargeActiChip2Affy TabActiChip_Affy] if {$ResultatCharge != ""} { set TabActiChip_Affy(EstVide) 1 return "" } } if {! [info exists TabActiChip_Affy($Quoi)]} {return ""} return [set TabActiChip_Affy($Quoi)] } proc InterrogeActiChip2Ontario {args} { Wup "Permet de questionner les sondes communes aux puces ActiChip et Ontario " Wup "Voir aussi decharge et charge" global TabOntario #Arguments: ########### # FichierACharger peut etre vide "" #$FichierACharger $GscopeAccess ProteinAccess - Access de protein correspondant au gscope access #$FichierACharger $GscopeAccess DesignAccess - Access de genbank correspondant au gscope access pour le design #$FichierACharger $GscopeAccess Definition - Definition du gscope access #$FichierACharger $GscopeAccess Chip_EST - nombre de fois que le gene est trouve sur la puce Ontario #$FichierACharger $GscopeAccess LesOriginal_Image_ID - liste des OriginalId de Ontarion #$FichierACharger $GscopeAccess LesVerified_Image_ID - liste des VerifiedId de Ontarion #$FichierACharger $GscopeAccess clusterID - Unigene cluster #$FichierACharger $Block $Row $Col - valeur a 1 si existe #$FichierACharger $Block $Row $Col GscopeAccess - Liste des Access Gscope trouve pour ce gene if {$args == "unset"} { if {[info exists TabOntario]} {array unset TabOntario} return "" } set FichierACharger [lindex $args 0] if {! [file exists "$FichierACharger"]} { set RepOntario "[RepertoireDuGenome]/Autres_Puces/Ontario" set FichierACharger "$RepOntario/Chip_EST_Gene_Present.txt" } if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" return "" } set Quoi [join [concat $FichierACharger [lrange $args 1 end]] ","] #Espionne "$Quoi" #set Quoi [join $args ","] if { [info exists TabOntario($Quoi)]} {return [set TabOntario($Quoi)]} if {! [info exists TabOntario($FichierACharger,EstCharge)]} {set TabOntario($FichierACharger,EstCharge) 0} if {$Quoi=="Decharge"} { DechargeActiChip2Ontario $FichierACharger return "" } if { [info exists TabOntario($FichierACharger,EstVide)]} {return ""} if { [info exists TabOntario($Quoi)]} {return [set TabOntario($Quoi)]} ###################CHARGE le Fichier avec les InfosOntario######################### if {! [info exists TabOntario($FichierACharger,EstCharge)] || [set TabOntario($FichierACharger,EstCharge)]=="0"} { set TabOntario($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeActiChip2Ontario TabOntario $FichierACharger] if {$ResultatCharge != ""} { set TabOntario($FichierACharger,EstVide) 1 return "" } } if {! [info exists TabOntario($Quoi)]} {return ""} return [set TabOntario($Quoi)] } proc InterrogeActiChip2UMCU {args} { Wup "Permet de questionner les Oligos communs entre ActiChip et UMCU" Wup "Utilise le fichier Chip_UMCU_Gene_Present.txt" Wup "Voir aussi decharge et charge" global TabActiChip_UMCU #Arguments: ########### #$AccGscope UMCU_ID - ID de la puce UMCU correspondant au gscope Access de ActiChip2.0 #$UMCU_ID AccessGscope - gscope Access de ActiChip2.0 correspondant a UMCU_ID de la puce UMCU #LesAccessGscope - Liste des Access Gscope disponible if {$args == "unset"} { if {[info exists TabActiChip_UMCU]} {array unset TabActiChip_UMCU} return "" } set Quoi [join $args ","] if { [info exists TabActiChip_UMCU($Quoi)]} {return [set TabActiChip_UMCU($Quoi)]} if {! [info exists TabActiChip_UMCU(EstCharge)]} {set TabActiChip_UMCU(EstCharge) 0} if {$Quoi=="Decharge"} { DechargeActiChip2UMCU return "" } if { [info exists TabActiChip_UMCU(EstVide)]} {return ""} if { [info exists TabActiChip_UMCU($Quoi)]} {return [set TabActiChip_UMCU($Quoi)]} ###################CHARGE le Fichier avec les ActiChip2UMCU######################### if {! [info exists TabActiChip_UMCU(EstCharge)] || [set TabActiChip_UMCU(EstCharge)]=="0"} { set TabActiChip_UMCU(EstCharge) 1 set ResultatCharge [ChargeActiChip2UMCU TabActiChip_UMCU] if {$ResultatCharge != ""} { set TabActiChip_UMCU(EstVide) 1 return "" } } if {![info exists TabActiChip_UMCU($Quoi)]} {return ""} return [set TabActiChip_UMCU($Quoi)] } proc InterrogeAffy_UCSC {args} { Wup "Permet de questionner les Probe_Set Affymetrix U133A 2.0 dans UCSC" Wup "Voir aussi decharge et charge" global TabAffy_UCSC #Arguments: ########### #FichierAffyUCSC, fourni par UCSC, il contient la liste des infos des localisations sur les genomes UCSC #pour chaque sequence consensus associee a un ProbeSet #Genome est le nom du genome UCSC utilise par ex: human ou mouse #$FichierAffyUCSC $Genome LesProbeSets - Liste des ProbeSets disponibles #$FichierAffyUCSC $Genome LesChromo - Liste des noms de chromosomes disponibles #$FichierAffyUCSC $Genome $Chromo LesProbeSets - Liste des ProbeSets disponibles par chromosome #$FichierAffyUCSC $Genome $ProbeSetID Chromosome - Liste des localisations chromosomique de $ProbeSetID #$FichierAffyUCSC $Genome $ProbeSetID $Chromo Debut - Liste des Debuts sur le ou les chromo de $ProbeSetID #$FichierAffyUCSC $Genome $ProbeSetID $Chromo Fin - Liste des Fins sur le ou les chromo de $ProbeSetID #$FichierAffyUCSC $Genome $ProbeSetID $Chromo Strand - Liste des Strands sur le ou les chromo de $ProbeSetID if {$args == "unset"} { if {[info exists TabAffy_UCSC]} {array unset TabAffy_UCSC} return "" } set Quoi [join $args ","] set Genome [lindex $args 1] set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { set FichierACharger "[UCSCGenomeDir $Genome]/database/affyU133Plus2.txt" if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" return "" } } set Quoi [join [concat [list $FichierACharger] [lrange $args 2 end]] ","] if { [info exists TabAffy_UCSC($Quoi)]} {return [set TabAffy_UCSC($Quoi)]} if {! [info exists TabAffy_UCSC($FichierACharger,EstCharge)]} {set TabAffy_UCSC($FichierACharger,EstCharge) 0} if {$Quoi=="Decharge"} { DechargeAffy_UCSC $FichierACharger return "" } if { [info exists TabAffy_UCSC($FichierACharger,EstVide)]} {return ""} if { [info exists TabAffy_UCSC($Quoi)]} {return [set TabAffy_UCSC($Quoi)]} ###################CHARGE le Fichier avec les Affy_UCSC######################### if {! [info exists TabAffy_UCSC($FichierACharger,EstCharge)] || [set TabAffy_UCSC($FichierACharger,EstCharge)]=="0"} { set TabAffy_UCSC($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeAffy_UCSC TabAffy_UCSC $FichierACharger] if {$ResultatCharge != ""} { set TabAffy_UCSC($FichierACharger,EstVide) 1 return "" } } if {! [info exists TabAffy_UCSC($Quoi)]} {return ""} return [set TabAffy_UCSC($Quoi)] } proc InterrogeBED {{Qui ""} {Quoi ""} {File ""}} { global InterrogeBED if {$Qui==""} { set Qui "ListOf" ; set Quoi "name" } if {$Quoi==""} { set Quoi "name" } if {[info exists InterrogeBED($Qui,$Quoi,$File)]} {return $InterrogeBED($Qui,$Quoi,$File)} if {[info exists InterrogeBED("EstCharge",$File)]} {return ""} set InterrogeBED("EstCharge",$File) 1 set LesTetes [list "chrom" "chromStart" "chromEnd" "name" "score" "strand" "thickStart" "thickEnd" "itemRgb" "blockCount" "blockSizes" "blockStarts"] foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^track" $Ligne]} {continue} set MotsDeLaLigne [split $Ligne "\t"] set Name [lindex $MotsDeLaLigne 3] set InterrogeBED($Name,line,$File) $Ligne lappend InterrogeBED(ListOf,name,$File) $Name foreach Mot $MotsDeLaLigne Tete $LesTetes { set InterrogeBED($Name,$Tete,$File) $Mot } } return [InterrogeBED $Qui $Quoi $File] } proc InterrogeBandesCytologiques {args} { global TableauBandesCytologiques #$Chromosome LesBandesP #$Chromosome LesBandesQ #$Chromosome Centromere #$Chromosome $Bande #$Chromosome TailleP #$Chromosome TailleQ #TaillePMax #TailleQMax #NbChromosomes #LesChromosomes if {$args == "unset"} { if {[info exists TableauBandesCytologiques]} {unset TableauBandesCytologiques} return } set Quoi [join $args ","] if {[info exists TableauBandesCytologiques($Quoi)]} {return [set TableauBandesCytologiques($Quoi)]} set File "[HumanGenomeDir]/Localisation/CytologicMap" if {![file exists $File]} {return} ###################CHARGE BandesCytologiques######################### if {[info exists TableauBandesCytologiques($File,EstCharge)]} {return} set TableauBandesCytologiques($File,EstCharge) 1 ChargeBandesCytologiques TableauBandesCytologiques $File if {[info exists TableauBandesCytologiques($Quoi)]} {return [set TableauBandesCytologiques($Quoi)]} return } proc InterrogeBestHitInDatabase {args} { Wup "Permet de questionner les infos de BestHitInDataBase" Wup "Voir aussi decharge et charge" global InfoDatabase #Arguments: ########### #$FichierBlast AccessDeRef - Meilleur access du blast selon les criteres appliques # FichierBlast BId - Access en reserve si n a pas passe les tests (vide si trop limite) # FichierBlast IdGlobal - Pourcentage d identite global: Aligne sur Total dans les alignements # FichierBlast PCoverQuery - Recouvrement de Query par rapport au Subject # FichierBlast PCoverSubject - Recouvrement de Subject par rapport au Query # FichierBlast InitialBId - Premier BId trouve pour pas le perdre # FichierBlast $InitialBId Aligned - Bases Alignees du premier BId trouve if {$args == "unset"} { if {[info exists InfoDatabase]} {array unset InfoDatabase} return "" } set Quoi [join $args ","] if {[info exists InfoDatabase($Quoi)]} {return [set InfoDatabase($Quoi)]} set FichierACharger [lindex $args 0] if {! [info exists InfoDatabase($FichierACharger,EstCharge)]} {set InfoDatabase($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeBestHitInDatabase $FichierACharger return "" } if { [info exists InfoDatabase($FichierACharger,EstVide)]} {return ""} if { [info exists InfoDatabase($Quoi)]} {return [set InfoDatabase($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists InfoDatabase($FichierACharger,EstCharge)] || [set InfoDatabase($FichierACharger,EstCharge)]=="0"} { set InfoDatabase($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeLesBestHitInDatabase InfoDatabase $FichierACharger] if {$ResultatCharge != ""} { set InfoDatabase($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoDatabase($Quoi)]} {return ""} return [set InfoDatabase($Quoi)] } proc InterrogeBestProteinAndmRNAForeachOrga {args} { global TableauBestProteinAndmRNAForeachOrga ### $Quoi peut etre egale a Protein ou mRNA#### #LesNoms #$Nom LesOrganismes #$Nom $Quoi LesAccess #$Nom Organisme $Orga $Quoi Access #$Nom Access $Access Identity #LesOrganismes #Access $Access LesNoms #Access $Access LesOrganismes #Access $Access Definition #Access $Access Taille #Access $Access ProteinOumRNA if {$args == "unset"} { if {[info exists TableauBestProteinAndmRNAForeachOrga]} {unset TableauBestProteinAndmRNAForeachOrga} return "" } set Quoi [join $args ","] if {[info exists TableauBestProteinAndmRNAForeachOrga($Quoi)]} { return [set TableauBestProteinAndmRNAForeachOrga($Quoi)] } set FichierBestProtAndmRNA "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" ###################CHARGE BestProtAndmRNA######################### if { [file exists $FichierBestProtAndmRNA] && ![info exists TableauBestProteinAndmRNAForeachOrga($FichierBestProtAndmRNA,EstCharge)]} { set TableauBestProteinAndmRNAForeachOrga($FichierBestProtAndmRNA,EstCharge) 1 ChargeBestProteinAndmRNAForeachOrga TableauBestProteinAndmRNAForeachOrga $FichierBestProtAndmRNA } if {![info exists TableauBestProteinAndmRNAForeachOrga($Quoi)]} {return} return [set TableauBestProteinAndmRNAForeachOrga($Quoi)] } proc InterrogeBilanMasking {args} { #LesEtats #LesNoms #$Nom LesEtats #$Nom LesRepeats #$Nom Etat $InfoMasking PMasked #$Nom Etat $InfoMasking LesRepeats #$Nom Etat $InfoMasking Repeat $Repeat n #$Nom Repeat $Repeat n #$Nom Etat $InfoMasking NbRepeat #LesRepeats #Repeat $Repeat LesNoms #Repeat $Repeat n set File "[RepertoireDuGenome]/fiches/BilanMasking" if {![file exists $File]} {return} global TableauBilanMasking if {$args == "unset"} { if {[info exists TableauBilanMasking]} {unset TableauBilanMasking} return } set Quoi [join $args ","] if {[info exists TableauBilanMasking($Quoi)]} { return [set TableauBilanMasking($Quoi)] } if {[info exists TableauBilanMasking($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauBilanMasking($File,EstCharge) 1 ChargeBilanMasking TableauBilanMasking $File if {[info exists TableauBilanMasking($Quoi)]} { return [set TableauBilanMasking($Quoi)] } return } proc InterrogeBindingPfamDesFromGo {{Qui ""} {Quoi ""}} { global InterrogeBindingPfamDesFromGo if {$Qui==""} { set Qui "ListOf"; set Quoi "Pfam" } if {[info exists InterrogeBindingPfamDesFromGo($Qui,$Quoi)]} {return $InterrogeBindingPfamDesFromGo($Qui,$Quoi)} if {[info exists InterrogeBindingPfamDesFromGo("EstCharge")]} {return ""} set InterrogeBindingPfamDesFromGo("EstCharge") 1 #set File "/genomics/link/SpliRetMouse/BindingPfam/BindingPfamFromGo/BindingPfamDesFromGo.txt" set File "/genomics/link/SpliRetMouse/BindingPfam/BindingPfamFromGo/NucleicAcidBindingPfamDesFromGo.txt" foreach Ligne [LesLignesDuFichier $File] { set elmts [split $Ligne "\t"] set Pfam [lindex $elmts 0] if {$Pfam == ""} {continue} set Des [lindex $elmts 2] set Des [string trim $Des] lappend InterrogeBindingPfamDesFromGo(ListOf,Pfam) $Pfam set InterrogeBindingPfamDesFromGo($Pfam,Des) $Des set InterrogeBindingPfamDesFromGo($Des,Pfam) $Pfam } return [InterrogeBindingPfamDesFromGo $Qui $Quoi] } proc InterrogeBox {{Qui ""} {Quoi ""}} { global InterrogeBox if {$Qui==""} { set Qui "ListOf"; set Quoi "Box" } if {[info exists InterrogeBox($Qui,$Quoi)]} {return $InterrogeBox($Qui,$Quoi)} if {[info exists InterrogeBox("EstCharge")]} {return ""} set InterrogeBox("EstCharge") 1 set RepertoireProttfa "[RepertoireDuGenome]/prottfa" foreach File [glob -nocomplain "$RepertoireProttfa/*"] { set Box [file tail $File] lappend InterrogeBox(ListOf,Box) $Box set LigneDes [lindex [LesLignesDuFichier $File] 0] set LesMotsDes [split $LigneDes " "] set Ref [lindex $LesMotsDes 4] set Cluster [lindex $LesMotsDes 1] set InterrogeBox($Box,Ref) $Ref set InterrogeBox($Box,Cluster) $Cluster set InterrogeBox($Cluster,Box) $Box } return [InterrogeBox $Qui $Quoi] } proc InterrogeCalcMeanID_Pos {args} { Wup "Permet de questionner les infos des MeanIDs obtenus par CalcMeanID_Pos" Wup "Voir aussi decharge et charge" global TabMeanIDInAln #Arguments: ########### #$Fichier LesIndices - Les indices du nombre de couples de positions #$Fichier LesPos - Les positions par couples demandees #$Fichier $Indice Pos - Les Position a cet indice #$Fichier $Indice MeanId - Le MeanId a cet indice #$Fichier $Pos Ref MeanId - Rend la valeur pour une position dans la reference (P02568) #$Fichier $Pos PDB MeanId - Rend la valeur pour une position dans la PDB (1yag) if {$args == "unset"} { if {[info exists TabMeanIDInAln]} {array unset TabMeanIDInAln} return "" } set Quoi [join $args ","] if {[info exists TabMeanIDInAln($Quoi)]} {return [set TabMeanIDInAln($Quoi)]} set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" } if {! [info exists TabMeanIDInAln($FichierACharger,EstCharge)]} {set TabMeanIDInAln($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeCalcMeanID_Pos $FichierACharger return "" } if { [info exists TabMeanIDInAln($FichierACharger,EstVide)]} {return ""} if { [info exists TabMeanIDInAln($Quoi)]} {return [set TabMeanIDInAln($Quoi)]} ###################CHARGE le Fichier avec les residus demandees######################### if {! [info exists TabMeanIDInAln($FichierACharger,EstCharge)] || [set TabMeanIDInAln($FichierACharger,EstCharge)]=="0"} { set TabMeanIDInAln($FichierACharger,EstCharge) 1 Espionne "On charge $FichierACharger" set ResultatCharge [ChargeCalcMeanID_Pos TabMeanIDInAln $FichierACharger] if {$ResultatCharge != ""} { set TabMeanIDInAln($FichierACharger,EstVide) 1 return "" } } if {![info exists TabMeanIDInAln($Quoi)]} {return ""} return [set TabMeanIDInAln($Quoi)] } proc InterrogeChoosenGeneOntology {args} { global TableauChoosenGeneOntology #$FichierChoosenGO LesGOChoisis #$FichierChoosenGO GOChoisi $GO Type if {$args == "unset"} { if {[info exists TableauChoosenGeneOntology]} { unset TableauChoosenGeneOntology } return "" } set Quoi [join $args ","] if {[info exists TableauChoosenGeneOntology($Quoi)]} { return [set TableauChoosenGeneOntology($Quoi)] } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauChoosenGeneOntology($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauChoosenGeneOntology($File,EstCharge) 1 ChargeChoosenGeneOntology TableauChoosenGeneOntology $File if {[info exists TableauChoosenGeneOntology($Quoi)]} { return [set TableauChoosenGeneOntology($Quoi)] } return } proc InterrogeCiblesSafeAcne {{Qui ""} {Quoi ""}} { global InterrogeCiblesSafeAcne if {[info exists InterrogeCiblesSafeAcne($Qui,$Quoi)]} { return $InterrogeCiblesSafeAcne($Qui,$Quoi) } if {[info exists InterrogeCiblesSafeAcne("EstCharge")]} { return "" } set InterrogeCiblesSafeAcne("EstCharge") 1 set m -1 set FileCibles "/genomics/link/SafeAcne/FichiersInitiaux/KRZYZOSIAK_SummarizedList.csv" set LesLignesDuFichier [LesLignesDuFichier $FileCibles] #Titre foreach Ligne [lrange $LesLignesDuFichier 0 1] { incr m set n -1 foreach ElmtTitre [split $Ligne ";"] { incr n regsub -all " " $ElmtTitre "_" ElmtTitre set LesTetes($m,$n) $ElmtTitre } } for {set p 0} {$p <= $n} {incr p} { set NvTitre "$LesTetes(0,$p) $LesTetes(1,$p)" set NvTitre [string trim $NvTitre] regsub -all " " $NvTitre "_" NvTitre set LesTitres($p) $NvTitre } #Data foreach Ligne [lrange $LesLignesDuFichier 2 end] { set n -1 foreach Elmt [split $Ligne ";"] { incr n if {$n==1} { set Gn $Elmt if {[regexp "/" $Gn]} { set Gn [lindex [split $Gn "/"] 0] } set Gn [string trim $Gn] lappend InterrogeCiblesSafeAcne(ListOf,Gn) $Gn continue } if {$n>1} { set Value $Elmt if {$Value>=1.2 || $Value<=-1.2} { set Cond $LesTitres($n) lappend InterrogeCiblesSafeAcne(ListOf,Cond) $Cond lappend InterrogeCiblesSafeAcne($Gn,LesCond) $Cond lappend InterrogeCiblesSafeAcne($Cond,LesGn) $Gn } } } } set InterrogeCiblesSafeAcne(ListOf,Gn) [lsort -unique $InterrogeCiblesSafeAcne(ListOf,Gn)] set InterrogeCiblesSafeAcne(ListOf,Cond) [lsort -unique $InterrogeCiblesSafeAcne(ListOf,Cond)] foreach Gn $InterrogeCiblesSafeAcne(ListOf,Gn) { set InterrogeCiblesSafeAcne($Gn,LesCond) [ListeSansDoublon $InterrogeCiblesSafeAcne($Gn,LesCond)] } foreach Cond $InterrogeCiblesSafeAcne(ListOf,Cond) { set InterrogeCiblesSafeAcne($Cond,LesGn) [ListeSansDoublon $InterrogeCiblesSafeAcne($Cond,LesGn)] } return [InterrogeCiblesSafeAcne $Qui $Quoi] } proc InterrogeClassificationTaxonomique {args} { global TableauClassificationTaxonomique if {$args == "unset"} { if {[info exists TableauClassificationTaxonomique]} { unset TableauClassificationTaxonomique } return "" } set Quoi [join $args ","] if {[info exists TableauClassificationTaxonomique($Quoi)]} { return [ElimineLesRedondancesDansUneListe [set TableauClassificationTaxonomique($Quoi)]] } set File "[RepTaxonomie]/ClassificationTaxonomique" if {![file exists $File]} {return} if {[info exists TableauClassificationTaxonomique($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauClassificationTaxonomique($File,EstCharge) 1 ChargeLaClassificationTaxonomique TableauClassificationTaxonomique if {[info exists TableauClassificationTaxonomique($Quoi)]} { return [ElimineLesRedondancesDansUneListe [set TableauClassificationTaxonomique($Quoi)]] } return } proc InterrogeClu {FileClu Qui Quoi} { global InterrogeClu if {[info exists InterrogeClu(FileClu)] && $InterrogeClu(FileClu)!=$FileClu} { unset InterrogeClu } if {[info exists InterrogeClu($Qui,$Quoi)]} { return $InterrogeClu($Qui,$Quoi) } if {[info exists InterrogeClu("EstCharge")]} { return "" } set InterrogeClu("EstCharge") 1 set InterrogeClu(FileClu) $FileClu foreach Ligne [LesLignesDuFichier $FileClu] { if {$Ligne==""} {continue} if {[regexp "^Number of clusters" $Ligne]} { set InterrogeClu(Nb,Clu) [StringApres "clusters : " dans $Ligne] } elseif {[regexp "^Cluster" $Ligne]} { set NumClu [StringApres "Cluster" dans $Ligne] set TailleClu [StringApres "size=" dans $Ligne] set InterrogeClu($NumClu,Taille) $TailleClu lappend InterrogeClu(ListOf,Clu) $NumClu } else { set Gn $Ligne lappend InterrogeClu($NumClu,ListOfGn) $Gn lappend InterrogeClu(AllClu,ListOfGn) $Gn lappend InterrogeClu($Gn,Clu) $NumClu } } return [InterrogeClu $FileClu $Qui $Quoi] } proc InterrogeClusters {{Qui ""} {Quoi ""} {Org ""}} { global InterrogeClusters if {[info exists InterrogeClusters($Qui,$Quoi,$Org)]} {return $InterrogeClusters($Qui,$Quoi,$Org)} if {[info exists InterrogeClusters("EstCharge",$Org)]} {return ""} set InterrogeClusters("EstCharge",$Org) 1 foreach File [glob -nocomplain "/genomics/link/SpliRetMouse/201404/clusters/*${Org}.fa" ] { set FileCourt [file tail $File] set LesMots [split $FileCourt "_"] set nbMot [llength $LesMots] if {$nbMot!=4} {return "$File a pas bon nombre de mot"} set Gn [lindex $LesMots 0] set Clu [lindex $LesMots 2] set Org [lindex $LesMots 3] regsub {\.fa} $Org "" Org lappend InterrogeClusters(ListOf,Clu,$Org) $Clu set InterrogeClusters($Clu,Gn,$Org) $Gn lappend InterrogeClusters($Gn,Clu,$Org) $Clu foreach Ligne [LesLignesDuFichier $File] { if {![regexp "^>" $Ligne]} {continue} set Var [string range [lindex [split $Ligne " "] 0] 1 end] lappend InterrogeClusters($Clu,Var,$Org) $Var lappend InterrogeClusters($Var,Clu,$Org) $Clu } } return [InterrogeClusters $Qui $Quoi $Org] } proc InterrogeClustersFusionnes {args} { global TableauClustersFusionnes if {$args == "unset"} { if {[info exists TableauClustersFusionnes]} { unset TableauClustersFusionnes } return "" } set Quoi [join $args ","] if {[info exists TableauClustersFusionnes($Quoi)]} { return [set TableauClustersFusionnes($Quoi)] } if {[info exists TableauClustersFusionnes(EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauClustersFusionnes(EstCharge) 1 ChargeClustersFusionnes TableauClustersFusionnes if {[info exists TableauClustersFusionnes($Quoi)]} { return [set TableauClustersFusionnes($Quoi)] } return } proc InterrogeContigAndProt {args} { global TableauInterrogationContigAndProt #unset #$Nom Contig BanqueId #$Nom Contig Access #$Nom Contig Taille #$Nom Contig Organisme #$Nom Contig Expect #$Nom Contig Identity #$Nom Contig NbAli #$Nom Protein BanqueId #$Nom Protein Access #$Nom Protein Taille #$Nom Protein Organisme #$Nom Protein Expect #$Nom Protein Score #$Nom Protein Identity #$Nom Protein NbAli #$Nom Protein Distance if {$args == "unset"} { if {[info exists TableauInterrogationContigAndProt]} {unset TableauInterrogationContigAndProt} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationContigAndProt($Quoi)]} { return [set TableauInterrogationContigAndProt($Quoi)] } set FichierContigAndProt "[RepertoireDuGenome]/fiches/ContigAndProt" ###################CHARGE ContigAndProt######################### if { [file exists $FichierContigAndProt] && ![info exists TableauInterrogationContigAndProt($FichierContigAndProt,EstCharge)]} { set TableauInterrogationContigAndProt($FichierContigAndProt,EstCharge) 1 ChargeContigAndProt TableauInterrogationContigAndProt $FichierContigAndProt } if {![info exists TableauInterrogationContigAndProt($Quoi)]} {return} return [set TableauInterrogationContigAndProt($Quoi)] } proc InterrogeContigsDesChromosomes {args} { global TableauContigsDesChromosomes #LesChromosomes #LesContigs #$Chromo LesContigs #$Chromo Taille #$Contig if {$args == "unset"} { if {[info exists TableauContigsDesChromosomes]} {unset TableauContigsDesChromosomes} return } set Quoi [join $args ","] if {[info exists TableauContigsDesChromosomes($Quoi)]} {return [set TableauContigsDesChromosomes($Quoi)]} set File "[HumanGenomeDir]/Localisation/seq_contig.md" if {![file exists $File]} {return} ###################CHARGE ContigsDesChromosomes######################### if {[info exists TableauContigsDesChromosomes($File,EstCharge)]} {return} set TableauContigsDesChromosomes($File,EstCharge) 1 ChargeContigsDesChromosomes TableauContigsDesChromosomes $File if {[info exists TableauContigsDesChromosomes($Quoi)]} {return [set TableauContigsDesChromosomes($Quoi)]} return } proc InterrogeCopainsDesCompulsory {{Qui ""} {Quoi ""}} { global InterrogeCopainsDesCompulsory if {$Quoi==""} {set Quoi "Nom"} if {[info exists InterrogeCopainsDesCompulsory($Qui,$Quoi)]} { #if {[PourWscope]} {return "
[join $InterrogeCopainsDesCompulsory($Qui,$Quoi) "\n"]
"} return $InterrogeCopainsDesCompulsory($Qui,$Quoi) } if {[info exists InterrogeCopainsDesCompulsory("EstCharge")]} { return "" } set InterrogeCopainsDesCompulsory("EstCharge") 1 #attention certains n'ont pas gn set Repertoire "[RepertoireDuGenome]/transcriptomique/LesCopainsClusterSsBigClu" set Seuil 8 set I 0 foreach Nom [ListOfCompulsoryGenes] { set LesGnsDuNom {} #Espionne "$Nom" set InterrogeCopainsDesCompulsory($Nom,Boite) {} foreach File [glob -nocomplain "$Repertoire/${Nom}-*-lesbestcops"] { #Espionne "File $File" if {[regexp "AFFX" $File]} {Espionne "Attention AFFX"} set premiereligne 1 foreach Ligne [LesLignesDuFichier $File] { if {$premiereligne} { set premiereligne 0 scan $Ligne "%s %s" nbdecombinaisoncompul bidon set TabCompul($Nom) $nbdecombinaisoncompul } set LesMots [split $Ligne " "] set nb [lindex $LesMots 0] if {$nb < $Seuil} {continue} #Espionne "nb $nb" set EviPs [lindex $LesMots 1] if {[regexp "AFFX" EviPs]} {Espionne "Attention2"} set LesEviPs [split $EviPs "-"] set Boite [lindex $LesEviPs 0] set Gn [lindex $LesMots 2] lappend InterrogeCopainsDesCompulsory($Nom,Boite) $Boite lappend InterrogeCopainsDesCompulsory($Boite,Nom) $Nom set InterrogeCopainsDesCompulsory($Boite,Nom) [lsort -unique $InterrogeCopainsDesCompulsory($Boite,Nom)] #Espionne "$Boite $Gn" } } set InterrogeCopainsDesCompulsory($Nom,Boite) [lsort -unique $InterrogeCopainsDesCompulsory($Nom,Boite)] } return [InterrogeCopainsDesCompulsory $Qui $Quoi] } proc InterrogeCorresEnsEtOS {{Qui ""} {Quoi ""}} { global InterrogeCorresEnsEtOS if {[info exists InterrogeCorresEnsEtOS($Qui,$Quoi)]} {return $InterrogeCorresEnsEtOS($Qui,$Quoi)} if {[info exists InterrogeCorresEnsEtOS("EstCharge")]} {return ""} set InterrogeCorresEnsEtOS("EstCharge") 1 foreach Ligne [LesLignesDuFichier "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/ENSEMBL61/CorresEnsEtOS"] { foreach {Ens Genre Espece} [split $Ligne " "] { set OS "$Genre $Espece" set InterrogeCorresEnsEtOS($OS,Ens) $Ens set InterrogeCorresEnsEtOS($Ens,OS) $OS } } return [InterrogeCorresEnsEtOS $Qui $Quoi] } proc InterrogeCorresJuncVar {{Qui ""} {Quoi ""} {File ""}} { global InterrogeCorresJuncVar if {$Qui==""} { set Qui "ListOf" ; set Quoi "Junction" } if {[info exists InterrogeCorresJuncVar($Qui,$Quoi,$File)]} {return $InterrogeCorresJuncVar($Qui,$Quoi,$File)} if {[info exists InterrogeCorresJuncVar("EstCharge",$File)]} {return ""} set InterrogeCorresJuncVar("EstCharge",$File) 1 foreach Ligne [LesLignesDuFichier $File] { set MotsDeLaLigne [split $Ligne "\t"] set Junction [lindex $MotsDeLaLigne 0] set LesVarJunc [lindex $MotsDeLaLigne 1] lappend InterrogeCorresJuncVar(ListOf,Junction,$File) $Junction set InterrogeCorresJuncVar($Junction,VarJunc,$File) $LesVarJunc foreach VarJunc [split $LesVarJunc " "] { set InterrogeCorresJuncVar($VarJunc,Junction,$File) $Junction } } return [InterrogeCorresJuncVar $Qui $Quoi $File] } proc InterrogeDefinitionsConsensus {args} { global TableauDefinitionConsensus #unset #$Nom Definition #LesNoms Espionne coucou1 if {$args == "unset"} { if {[info exists TableauDefinitionConsensus]} {unset TableauDefinitionConsensus} return "" } set Fichier "[RepertoireDuGenome]/fiches/DefinitionsConsensus" if {![file exists $Fichier]} {Espionne coucou ; return} set Quoi [join $args ","] if {[info exists TableauDefinitionConsensus($Quoi)]} {return [set TableauDefinitionConsensus($Quoi)]} if {[info exists TableauDefinitionConsensus(EstCharge)]} {return} ###################CHARGE Definiton consensus######################### set TableauDefinitionConsensus(EstCharge) 1 ChargeDefinitionsConsensus TableauDefinitionConsensus $Fichier if {[info exists TableauDefinitionConsensus($Quoi)]} {return [set TableauDefinitionConsensus($Quoi)]} return } proc InterrogeDevStage {args} { global TableauInterrogationDevStage #unset #LesDevStages #LesNoms #$Nom LesDevStages #$Nom LesEST #EST $Access LesDevStages #EST $Access LesNoms #EST $Access DevStage $DevStage n #DevStage $DevStage LesNoms #DevStage $DevStage LesEST #DevStage $DevStage n #$Nom DevStage $DevStage n #$Nom DevStage $DevStage LesEST #$Nom DevStage $DevStage EST $Access n if {$args == "unset"} { if {[info exists TableauInterrogationDevStage]} { unset TableauInterrogationDevStage } return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationDevStage($Quoi)]} { return [set TableauInterrogationDevStage($Quoi)] } set File1 "[RepertoireDuGenome]/fiches/DevStage" ###################CHARGE FichierExonicMap######################### if {[file exists $File1] && ![info exists TableauInterrogationDevStage($File1,EstCharge)]} { set TableauInterrogationDevStage($File1,EstCharge) 1 ChargeDevStage TableauInterrogationDevStage $File1 } set File2 "[RepertoireDuGenome]/fiches/EffectifsDesDevStage" if {[file exists $File2] && ![info exists TableauInterrogationDevStage($File2,EstCharge)]} { set TableauInterrogationDevStage($File2,EstCharge) 1 ChargeEffectifDesDevStage TableauInterrogationDevStage $File2 } if {[info exists TableauInterrogationDevStage($Quoi)]} { return [set TableauInterrogationDevStage($Quoi)] } return } proc InterrogeDisEMBL {args} { #Permet de questionner les infos de DisEMBL #Voir aussi decharge et charge global InfoDisEMBL #Utilisation: #On demande set ListeLOOPS [InterrogeDisEMBL $File LOOPS] #on boucle sur #foreach Indice $ListeLOOPS { # et on recupere la valeur par # set Valeur [InterrogeDisEMBL $File LOOPS $Indice] #} #Arguments: ########### #$Fichier LOOPS - Les valeurs de i #$Fichier LOOPS $i - Valeur de LOOPS pour $i #$Fichier HOTLOOPS - Les valeurs de i #$Fichier HOTLOOPS $i - Valeur de HOTLOOPS pour $i #$Fichier REM465 - Les valeurs de i #$Fichier REM465 $i - Valeur de REM465 pour $i if {$args == "unset"} { if {[info exists InfoDisEMBL]} {array unset InfoDisEMBL} return "" } #1 On test si c deja en memoire et si oui on retourne la valeur demandee set Quoi [join $args ","] if {[info exists InfoDisEMBL($Quoi)]} {return [set InfoDisEMBL($Quoi)]} #2 On recupere le fichier (1er argument) set FichierACharger [lindex $args 0] if {! [info exists InfoDisEMBL($FichierACharger,EstCharge)]} { set InfoDisEMBL($FichierACharger,EstCharge) 0 } #3 On decharge le cas echeant if {$Quoi=="$FichierACharger,Decharge"} { DechargeDisEMBL $FichierACharger return "" } if { [info exists InfoDisEMBL($FichierACharger,EstVide)]} {return ""} if { [info exists InfoDisEMBL($Quoi)]} {return [set InfoDisEMBL($Quoi)]} #4 On charge les resultats if {! [info exists InfoDisEMBL($FichierACharger,EstCharge)] || [set InfoDisEMBL($FichierACharger,EstCharge)]=="0"} { set InfoDisEMBL($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeDisEMBL InfoDisEMBL $FichierACharger] if {$ResultatCharge != ""} { set InfoDisEMBL($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoDisEMBL($Quoi)]} {return ""} return [set InfoDisEMBL($Quoi)] } proc InterrogeDomaines {args} { global TableauDomaines #LesNoms #$Nom LesDomaines if {$args == "unset"} { if {[info exists TableauDomaines]} {unset TableauDomaines} return "" } set Quoi [join $args ","] if {[info exists TableauDomaines($Quoi)]} {return [set TableauDomaines($Quoi)]} if {[info exists TableauDomaines(EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauDomaines(EstCharge) 1 ChargeDomaines TableauDomaines if {[info exists TableauDomaines($Quoi)]} {return [set TableauDomaines($Quoi)]} return } proc InterrogeECCpdRn {args} { #LesElements #Element $Element LesPathway global TableauInterrogationECCpdRn if {$args == "unset"} { if {[info exists TableauInterrogationECCpdRn]} {unset TableauInterrogationECCpdRn} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationECCpdRn($Quoi)]} {return [set TableauInterrogationECCpdRn($Quoi)]} if {[info exists TableauInterrogationECCpdRn(EstCharge)]} {return} ###################CHARGE Pathway######################### ChargeECCpdRn TableauInterrogationECCpdRn set TableauInterrogationECCpdRn(EstCharge) 1 if {![info exists TableauInterrogationECCpdRn($Quoi)]} {return} return [set TableauInterrogationECCpdRn($Quoi)] } proc InterrogeECDuPathway {args} { #Pathway $Pathway LesEC #Pathway $Pathway EC $EC LesDefinitions #Pathway $Pathway Definition $Definition EC global TableauInterrogationECDuPathway if {$args == "unset"} { if {[info exists TableauInterrogationECDuPathway]} {unset TableauInterrogationECDuPathway} return "" } set Pathway [lindex $args 1] set Quoi [join $args ","] if {[info exists TableauInterrogationECDuPathway($Quoi)]} {return [set TableauInterrogationECDuPathway($Quoi)]} if {[info exists TableauInterrogationECDuPathway($Pathway,EstCharge)]} {return} ###################CHARGE Pathway######################### ChargeECDuPathway TableauInterrogationECDuPathway $Pathway set TableauInterrogationECDuPathway($Pathway,EstCharge) 1 if {![info exists TableauInterrogationECDuPathway($Quoi)]} {return} return [set TableauInterrogationECDuPathway($Quoi)] } proc InterrogeEvidenceTable {{Qui ""} {Quoi ""}} { #Interroge la table score_types global InterrogeEvidenceTable if {[info exists InterrogeEvidenceTable($Qui,$Quoi)]} { return $InterrogeEvidenceTable($Qui,$Quoi) } if {[info exists InterrogeEvidenceTable("EstCharge")]} { return "" } set InterrogeEvidenceTable("EstCharge") 1 CanalSqlString foreach {ScoId ScoTy} [SqlExec "select * from network.score_types" "GetList"] { set InterrogeEvidenceTable($ScoId,ScoTy) $ScoTy set InterrogeEvidenceTable($ScoTy,ScoId) $ScoId lappend InterrogeEvidenceTable(ListOf,ScoId) $ScoId lappend InterrogeEvidenceTable(ListOf,ScoTy) $ScoTy } CanalSqlDisconnect return [InterrogeEvidenceTable $Qui $Quoi] } proc InterrogeExAs {{Qui ""} {Quoi ""}} { global InterrogeExAs if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "AnalSoft" } if {[info exists InterrogeExAs($Qui,$Quoi)]} { return $InterrogeExAs($Qui,$Quoi) } if {[info exists InterrogeExAs("EstCharge")]} { return "" } set InterrogeExAs("EstCharge") 1 set FichierNormal "[RepertoireDuGenome]/transcriptomique/MetaCluster/ExAs" #set FichierNormal "[RepertoireDuGenome]/transcriptomique/ConeSpe/Hierarchisation/ExAs" set LesTetes "Experience AnalysisSoftware" set InterrogeExAs(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $FichierNormal] { if {$Ligne==""} {continue} set LesElmts [split $Ligne "\t"] set Exp [lindex $LesElmts 0] set AnalSoft [lindex $LesElmts 1] lappend InterrogeExAs(ListOf,Exp) $Exp lappend InterrogeExAs(ListOf,AnalSoft) $AnalSoft lappend InterrogeExAs($Exp,AnalSoft) $AnalSoft foreach Tete $LesTetes Elmt $LesElmts { set InterrogeExAs($Exp,$Tete) $Elmt } } return [InterrogeExAs $Qui $Quoi] } proc InterrogeExCs {{Qui ""} {Quoi ""}} { global InterrogeExCs if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "ClusSoft" } if {[info exists InterrogeExCs($Qui,$Quoi)]} { return $InterrogeExCs($Qui,$Quoi) } if {[info exists InterrogeExCs("EstCharge")]} { return "" } set InterrogeExCs("EstCharge") 1 set FichierClust "[RepertoireDuGenome]/transcriptomique/MetaCluster/ExCs" #set FichierClust "[RepertoireDuGenome]/transcriptomique/ConeSpe/Hierarchisation/ExCs" set LesTetes "Experience ClusterSoftware" set InterrogeExCs(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $FichierClust] { if {$Ligne==""} {continue} set LesElmts [split $Ligne "\t"] set Exp [lindex $LesElmts 0] set ClusSoft [lindex $LesElmts 1] lappend InterrogeExCs(ListOf,Exp) $Exp lappend InterrogeExCs(ListOf,ClusSoft) $ClusSoft lappend InterrogeExCs($Exp,ClusSoft) $ClusSoft foreach Tete $LesTetes Elmt $LesElmts { set InterrogeExCs($Exp,$Tete) $Elmt } } return [InterrogeExCs $Qui $Quoi] } proc InterrogeFichierAffyAnnot {File Qui Quoi} { global InterrogeFichierAffyAnnot if {[info exists InterrogeFichierAffyAnnot(File)] && $InterrogeFichierAffyAnnot(File)!=$File} { unset InterrogeFichierAffyAnnot } if {[info exists InterrogeFichierAffyAnnot($Qui,$Quoi)]} { return $InterrogeFichierAffyAnnot($Qui,$Quoi) } if {[info exists InterrogeFichierAffyAnnot("EstCharge")]} { return "" } set InterrogeFichierAffyAnnot("EstCharge") 1 set InterrogeFichierAffyAnnot(File) $File foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^#%" $Ligne]} { set LesMots [split $Ligne "="] set Tete [lindex $LesMots 0] regsub "#%" $Tete "" Tete set Version [lindex $LesMots 1] set InterrogeFichierAffyAnnot($Tete,version) $Version } } set LesHeaders [TabulonsSansQuote $File "," ";" " " "GetListOfHeaders"] set LesLignesValues [TabulonsSansQuote $File "," ";" " " "GetListOfValues"] foreach LigneValues $LesLignesValues { set LesMots [split $LigneValues ";"] set i -1 foreach Mot $LesMots { incr i if {$i==0} { set Id $Mot lappend InterrogeFichierAffyAnnot(ListOf,Id) $Id continue } set InterrogeFichierAffyAnnot($Id,[lindex $LesHeaders $i]) $Mot } } return [InterrogeFichierAffyAnnot $File $Qui $Quoi] } proc InterrogeFichierAffyAnnotRapide {File Qui Quoi} { #N'interroge que l'entete (les lignes commençant par #%) #Evite d'appeler InterrogeFichierAffyAnnot, qui est long, quand on veut seulement interroger l'entete global InterrogeFichierAffyAnnotRapide if {[info exists InterrogeFichierAffyAnnotRapide(File)] && $InterrogeFichierAffyAnnotRapide(File)!=$File} { unset InterrogeFichierAffyAnnotRapide } if {[info exists InterrogeFichierAffyAnnotRapide($Qui,$Quoi)]} { return $InterrogeFichierAffyAnnotRapide($Qui,$Quoi) } if {[info exists InterrogeFichierAffyAnnotRapide("EstCharge")]} { return "" } set InterrogeFichierAffyAnnotRapide("EstCharge") 1 set InterrogeFichierAffyAnnotRapide(File) $File foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^#%" $Ligne]} { set LesMots [split $Ligne "="] set Tete [lindex $LesMots 0] regsub "#%" $Tete "" Tete set Version [lindex $LesMots 1] set InterrogeFichierAffyAnnotRapide($Tete,version) $Version } } return [InterrogeFichierAffyAnnotRapide $File $Qui $Quoi] } proc InterrogeFichierAffyRMA {args} { global TabRMA #$Fichier $Nom Val #$Fichier ValMax #$Fichier ValMin if {$args == "unset"} { if {[info exists TabRMA]} {unset TabRMA} return "" } set File [lindex $args 0] set Quoi [join $args ","] if {[info exists TabRMA($Quoi)]} {return [set TabRMA($Quoi)]} if {[info exists TabRMA($File,EstCharge)]} {Espionne "estcharge !";return} set FichierACharger [lindex $args 0] ################### CHARGE #################### set TabRMA(EstCharge) 1 ChargeFichierAffyRMA TabRMA $FichierACharger if {[info exists TabRMA($Quoi)]} {return [set TabRMA($Quoi)]} return } proc InterrogeFichierBestNMavecDef {args} { global TabNMDef #$Fichier $DD NM #$Fichier $DD Def if {$args == "unset"} { if {[info exists TabNMDef]} {unset TabNMDef} return "" } set Quoi [join $args ","] if {[info exists TabNMDef($Quoi)]} {return [set TabNMDef($Quoi)]} if {[info exists TabNMDef(EstCharge)]} {return} set FichierACharger [lindex $args 0] ################### CHARGE FichierDDTARScores #################### set TabNMDef(EstCharge) 1 ChargeFichierBestNMavecDef TabNMDef $FichierACharger if {[info exists TabNMDef($Quoi)]} {return [set TabNMDef($Quoi)]} return } proc InterrogeFichierCentromere {args} { global TabCentro #$Fichier $Chro DebutCentro #$Fichier $Chro FinCentro if {$args == "unset"} { if {[info exists TabCentro]} {unset TabCentro} return "" } set Quoi [join $args ","] if {[info exists TabCentro($Quoi)]} {return [set TabCentro($Quoi)]} set File [lindex $args 0] if {![file exists $File]} {Espionne "$File does not exist";return} if {[info exists TabCentro($File,EstCharge)]} {Espionne "coucou TabCentro est charge";return} ################### CHARGE #################### set TabCentro($File,EstCharge) 1 ChargeFichierCentromeres TabCentro $File if {[info exists TabCentro($Quoi)]} {return [set TabCentro($Quoi)]} return } proc InterrogeFichierCompletDesPFAMUniques {args} { global TabPFAMComplet #$PFAM Definition #$PFAM Nombre #$PFAM Liste if {$args == "unset"} { if {[info exists TabPFAMComplet]} {unset TabPFAMComplet} return "" } set Quoi [join $args ","] if {[info exists TabPFAMComplet($Quoi)]} {return [set TabPFAMComplet($Quoi)]} if {[info exists TabPFAMComplet(EstCharge)]} {return} ################### CHARGE FichierCompletDesPFAMUniques #################### set TabPFAMComplet(EstCharge) 1 ChargeFichierCompletDesPFAMUniques TabPFAMComplet if {[info exists TabPFAMComplet($Quoi)]} {return [set TabPFAMComplet($Quoi)]} return } proc InterrogeFichierCourbeCGH {args} { global TabPlot #unset #$File Chromosome $Chrom LesPos #$File Chromosome $Chrom $PosMid #$File VMax #$File VMin if {[regexp "unset" $args]} { if {[info exists TabPlot]} {unset TabPlot} return "" } set Quoi [join $args ","] if {[info exists TabPlot($Quoi)]} {return [set TabPlot($Quoi)]} set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TabPlot($File,EstCharge)]} {Espionne coucou;return} set FichierACharger [lindex $args 0] ################### CHARGE #################### set TabPlot($File,EstCharge) 1 #ChargeFichierCourbeCGH TabPlot $FichierACharger ChargeFichierCourbeCGH TabPlot $File if {[info exists TabPlot($Quoi)]} {return [set TabPlot($Quoi)]} return } proc InterrogeFichierDDTARScores {args} { global TabDDComplet #$Fichier $DD $TAR IdGlob #$Fichier $DD $TAR CoverS #$Fichier $DD $TAR CoverQ if {$args == "unset"} { if {[info exists TabDDComplet]} {unset TabDDComplet} return "" } set Quoi [join $args ","] if {[info exists TabDDComplet($Quoi)]} {return [set TabDDComplet($Quoi)]} if {[info exists TabDDComplet(EstCharge)]} {return} set FichierACharger [lindex $args 0] ################### CHARGE FichierDDTARScores #################### set TabDDComplet(EstCharge) 1 ChargeFichierDDTARScores TabDDComplet $FichierACharger if {[info exists TabDDComplet($Quoi)]} {return [set TabDDComplet($Quoi)]} return } proc InterrogeFichierDDUniques3T {args} { global TabDDUniquesComplet #$Fichier $N AccProt #$Fichier $N DefProt #$Fichier $N AccRNA #$Fichier $N DefRNA #$Fichier $N Warning #$Fichier $N DifE #$Fichier $N ProfE #$Fichier $N DifS #$Fichier $N ProfS #$Fichier $N DifU #$Fichier $N ProfU #$Fichier $N $DifMoy #$Fichier $N Pmoy if {$args == "unset"} { if {[info exists TabDDUniquesComplet]} {unset TabDDUniquesComplet} return "" } set Quoi [join $args ","] if {[info exists TabDDUniquesComplet($Quoi)]} {return [set TabDDUniquesComplet($Quoi)]} if {[info exists TabDDUniquesComplet(EstCharge)]} {return} set FichierACharger [lindex $args 0] ################### CHARGE FichierCompletDesDDUniques #################### set TabDDUniquesComplet(EstCharge) 1 ChargeFichierDDUniques3T TabDDUniquesComplet $FichierACharger if {[info exists TabDDUniquesComplet($Quoi)]} {return [set TabDDUniquesComplet($Quoi)]} return } proc InterrogeFichierDataAffyPourTous3T {args} { global TabAffyComplet #$Fichier $PAB Code #$Fichier $PAB Def #$Fichier $PAB DetN #$Fichier $PAB DetE #$Fichier $PAB DetS #$Fichier $PAB DetU #$Fichier $PAB IntN #$Fichier $PAB IntE #$Fichier $PAB IntS #$Fichier $PAB IntU #$Fichier $PAB FE #$Fichier $PAB PE #$Fichier $PAB FS #$Fichier $PAB PS #$Fichier $PAB FU #$Fichier $PAB PU #$Fichier $PAB FoldMoy #$Fichier $PAB ProfMoy if {$args == "unset"} { if {[info exists TabAffyComplet]} {unset TabAffyComplet} return "" } set Quoi [join $args ","] if {[info exists TabAffyComplet($Quoi)]} {return [set TabAffyComplet($Quoi)]} if {[info exists TabAffyComplet(EstCharge)]} {return} set FichierACharger [lindex $args 0] ################### CHARGE FichierCompletDesAffyUniques #################### set TabAffyComplet(EstCharge) 1 ChargeFichierDataAffyPourTous3T TabAffyComplet $FichierACharger if {[info exists TabAffyComplet($Quoi)]} {return [set TabAffyComplet($Quoi)]} return } proc InterrogeFichierExonicMap {args} { global TableauFichierExonicMap if {$args == "unset"} { if {[info exists TableauFichierExonicMap]} {unset TableauFichierExonicMap} return "" } #unset #$FichierEM LesWarning #$FichierEM NbCycles #$FichierEM Nom #$FichierEM Query FichierTFA #$FichierEM Query SeqTFA #$FichierEM Query Type #$FichierEM Query Taille #$FichierEM Query Warning #$FichierEM LesRangs #$FichierEM Rang $Rang LesWarning #$FichierEM Rang $Rang NbAliTot #$FichierEM Rang $Rang NbAreas #$FichierEM Rang $Rang NbExonicAreas #$FichierEM Rang $Rang NbAbsentAreas #$FichierEM Rang $Rang NbPolyLocAreas #$FichierEM Rang $Rang Chromosome #$FichierEM Rang $Rang Contig #$FichierEM Rang $Rang ContigFragments #$FichierEM Rang $Rang ContigLocalisation Debut #$FichierEM Rang $Rang ContigLocalisation Fin #$FichierEM Rang $Rang Sens #$FichierEM Rang $Rang LesOrientations #$FichierEM Rang $Rang Area $nArea Type #$FichierEM Rang $Rang Area $nArea $Type n #$FichierEM Rang $Rang $Type $nType DQ #$FichierEM Rang $Rang $Type $nType FQ #$FichierEM Rang $Rang $Type $nType Taille #$FichierEM Rang $Rang $Type $nType DS #$FichierEM Rang $Rang $Type $nType FS #$FichierEM Rang $Rang $Type $nType Orientation #$FichierEM Rang $Rang $Type $nType Sens #$FichierEM Rang $Rang $Type $nType nAli #$FichierEM Rang $Rang $Type $nType nAliTot #$FichierEM Rang $Rang $Type $nType Identity #$FichierEM Rang $Rang $Type $nType nContigu set Quoi [join $args ","] if {[info exists TableauFichierExonicMap($Quoi)]} { return [set TableauFichierExonicMap($Quoi)] } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauFichierExonicMap($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauFichierExonicMap($File,EstCharge) 1 ChargeExonicMap TableauFichierExonicMap $File if {[info exists TableauFichierExonicMap($Quoi)]} {return [set TableauFichierExonicMap($Quoi)]} return } proc InterrogeFichierFinal {args} { global TabFinal #--- #$DD PMoy #$DD IMoy #--- #$DD AccProt #$DD DefProt #$DD GO #$DD Pathway #$DD PFAM #$DD Papier #$DD All if {$args == "unset"} { if {[info exists TabFinal]} {unset TabFinal} return "" } set Quoi [join $args ","] if {[info exists TabFinal($Quoi)]} {return [set TabFinal($Quoi)]} if {[info exists TabFinal(EstCharge)]} {return} ################### CHARGE FichierCompletDesPFAMUniques #################### set TabFinal(EstCharge) 1 ChargeFichierFinal TabFinal if {[info exists TabFinal($Quoi)]} {return [set TabFinal($Quoi)]} return } proc InterrogeFichierHumanChromos {args} { global TabChro #$Fichier $Chro Taille if {$args == "unset"} { if {[info exists TabChro]} {unset TabChro} return "" } set Quoi [join $args ","] if {[info exists TabChro($Quoi)]} {return [set TabChro($Quoi)]} set File [lindex $args 0] if {![file exists $File]} {Espionne "$File does not exist";return} if {[info exists TabChro($File,EstCharge)]} {Espionne "est charge";return} ################### CHARGE #################### set TabChro($File,EstCharge) 1 ChargeFichierHumanChromos TabChro $File if {[info exists TabChro($Quoi)]} {return [set TabChro($Quoi)]} return } proc InterrogeFichierLoc {args} { global TableauLocalisationDesPAB #unset #$File Chromosome $Chrom LesNoms #$File Chromosome $Chrom $Nom #$File LesNoms #$File Nom $Nom ##Out Detail d'une localisation => Liste avec comme elements : #0:Chro #1:Deb #2:Fin #3:Nom #4:Id #5:Other if {$args == "unset"} { if {[info exists TableauLocalisationDesPAB]} {unset TableauLocalisationDesPAB} return } set Quoi [join $args ","] if {[info exists TableauLocalisationDesPAB($Quoi)]} { return [set TableauLocalisationDesPAB($Quoi)] } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauLocalisationDesPAB($File,EstCharge)]} {return} ###################CHARGE Localisation des boites sur genome######################### set TableauLocalisationDesPAB($File,EstCharge) 1 ChargeFichierLoc TableauLocalisationDesPAB $File if {[info exists TableauLocalisationDesPAB($Quoi)]} { return [set TableauLocalisationDesPAB($Quoi)] } return } proc InterrogeFichierMapViewer {args} { global TableauFichierMapViewer #$FichierMV LesChromosomes #$FichierMV Chromosome $Chromosome LesElements #$FichierMV Chromosome $Chromosome Element $Element LesLocalisations #Details : #0 : Id etc.. #1 : LesInfos #2 : Chromosome #3 : Debut #4 : Fin #5 : Taille #6 : Sens if {$args == "unset"} { if {[info exists TableauFichierMapViewer]} {unset TableauFichierMapViewer} return } set Quoi [join $args ","] if {[info exists TableauFichierMapViewer($Quoi)]} { return [ElimineLesRedondancesDansUneListe [set TableauFichierMapViewer($Quoi)]] } set File [lindex $args 0] if {![file exists $File]} {set File "[HumanGenomeDir]/Localisation/$File"} if {![file exists $File]} {return} set NameFile [file tail $File] set nChromo [NumeroDuChromosome [lindex $args 2]] if {[info exists TableauFichierMapViewer($NameFile,$nChromo,EstCharge)]} {return} ###################CHARGE FichierMapViewer######################### set TableauFichierMapViewer($NameFile,$nChromo,EstCharge) 1 ChargeFichierMapViewer TableauFichierMapViewer $File $nChromo if {[info exists TableauFichierMapViewer($Quoi)]} { return [set TableauFichierMapViewer($Quoi)] } return } proc InterrogeFichierOutRepeatMasker {args} { #FichierOUT LesRepeats #FichierOUT LesRegionsMasquees #FichierOUT Repeat $Repeat LesRegions #FichierOUT Debut $Debut Fin $Fin Repeat global TableauFichierOutRepeatMasker if {$args == "unset"} { if {[info exists TableauFichierOutRepeatMasker]} {unset TableauFichierOutRepeatMasker} return } set Quoi [join $args ","] if {[info exists TableauFichierOutRepeatMasker($Quoi)]} {return [set TableauFichierOutRepeatMasker($Quoi)]} set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauFichierOutRepeatMasker($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauFichierOutRepeatMasker($File,EstCharge) 1 ChargeFichierOutRepeatMasker TableauFichierOutRepeatMasker $File if {[info exists TableauFichierOutRepeatMasker($Quoi)]} {return [set TableauFichierOutRepeatMasker($Quoi)]} return } proc InterrogeFichierRefLink {args} { global TabCentro #$Fichier $NM NP #$Fichier $NM GN #$Fichier $NP NM #$Fichier $NP GN if {$args == "unset"} { if {[info exists TabRefLink]} {unset TabRefLink} return "" } set Quoi [join $args ","] if {[info exists TabRefLink($Quoi)]} {return [set TabRefLink($Quoi)]} if {[info exists TabRefLink(EstCharge)]} {return} set FichierACharger [lindex $args 0] ################### CHARGE #################### set TabRefLink(EstCharge) 1 ChargeFichierRefLink TabRefLink $FichierACharger if {[info exists TabRefLink($Quoi)]} {return [set TabRefLink($Quoi)]} return } proc InterrogeFichierSEG {args} { global TabPlot #unset #$File Chromosome $Chrom LesPos #$file $Chromosome $PosMid Val #$File VMax #$File VMin #$File Chromosome $Chrom LesDebFin if {[regexp "unset" $args]} { if {[info exists TabPlot]} {unset TabPlot} return "" } set Quoi [join $args ","] if {[info exists TabPlot($Quoi)]} {return [set TabPlot($Quoi)]} set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TabPlot($File,EstCharge)]} {Espionne coucou;return} ################### CHARGE #################### set TabPlot($File,EstCharge) 1 ChargeFichierSEG TabPlot $File if {[info exists TabPlot($Quoi)]} {return [set TabPlot($Quoi)]} return } proc InterrogeFichierTotalDataDD {args} { global TabDDComplet #$Fichier $PAB N #$Fichier $PAB JR #$Fichier $PAB Code #$Fichier $PAB User #$Fichier $PAB Bande #$Fichier $PAB AccProt #$Fichier $PAB DefProt #$Fichier $PAB AccRNA #$Fichier $PAB DefRNA #$Fichier $PAB Profil #$Fichier $PAB ProfCons if {$args == "unset"} { if {[info exists TabDDComplet]} {unset TabDDComplet} return "" } set Quoi [join $args ","] if {[info exists TabDDComplet($Quoi)]} {return [set TabDDComplet($Quoi)]} if {[info exists TabDDComplet(EstCharge)]} {return} set FichierACharger [lindex $args 0] ################### CHARGE FichierCompletDesDDUniques #################### set TabDDComplet(EstCharge) 1 ChargeFichierTotalDataDD TabDDComplet $FichierACharger if {[info exists TabDDComplet($Quoi)]} {return [set TabDDComplet($Quoi)]} return } proc InterrogeFoldIndex {args} { #Permet de questionner les infos de FoldIndex #Voir aussi decharge et charge global InfoFoldIndex #Utilisation: #On demande set ListeLOOPS [InterrogeDisEMBL $File LOOPS] #on boucle sur #foreach Indice $ListeLOOPS { # et on recupere la valeur par # set Valeur [InterrogeDisEMBL $File LOOPS $Indice] #} #Arguments: ########### #$Fichier pds - Les valeurs de i #$Fichier pds $i - Valeur de LOOPS pour $i if {$args == "unset"} { if {[info exists InfoFoldIndex]} {array unset InfoFoldIndex} return "" } #1 On test si c deja en memoire et si oui on retourne la valeur demandee set Quoi [join $args ","] if {[info exists InfoFoldIndex($Quoi)]} {return [set InfoFoldIndex($Quoi)]} #2 On recupere le fichier (1er argument) set FichierACharger [lindex $args 0] if {! [info exists InfoFoldIndex($FichierACharger,EstCharge)]} {set InfoFoldIndex($FichierACharger,EstCharge) 0} #3 On decharge le cas echeant if {$Quoi=="$FichierACharger,Decharge"} { DechargeFoldIndex $FichierACharger return "" } if { [info exists InfoFoldIndex($FichierACharger,EstVide)]} {return ""} if { [info exists InfoFoldIndex($Quoi)]} {return [set InfoFoldIndex($Quoi)]} #4 On charge les resultats if {! [info exists InfoFoldIndex($FichierACharger,EstCharge)] || [set InfoFoldIndex($FichierACharger,EstCharge)]=="0"} { set InfoFoldIndex($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeFoldIndex InfoFoldIndex $FichierACharger] if {$ResultatCharge != ""} { set InfoFoldIndex($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoFoldIndex($Quoi)]} { return ""} return [set InfoFoldIndex($Quoi)] } proc InterrogeGSEAGeneSets {Qui Quoi} { set File "/biolo/GSEA/GeneSets/msigdb.v3.0.symbols.gmt" global InterrogeGSEAGeneSets if {[info exists InterrogeGSEAGeneSets($Qui,$Quoi)]} { return $InterrogeGSEAGeneSets($Qui,$Quoi) } if {[info exists InterrogeGSEAGeneSets("EstCharge")]} { return "" } set InterrogeGSEAGeneSets("EstCharge") 1 foreach Ligne [LesLignesDuFichier $File] { set LesMots [split $Ligne "\t"] set Id [lindex $LesMots 0] set Link [lindex $LesMots 1] set LesGns [lrange $LesMots 2 end] set InterrogeGSEAGeneSets($Id,link) $Link set InterrogeGSEAGeneSets($Id,LesGns) $LesGns set InterrogeGSEAGeneSets($Id,NbGn) [llength $LesGns] } return [InterrogeGSEAGeneSets $Qui $Quoi] } proc InterrogeGeneName {args} { global TableauInterrogationGeneName #unset #LesNoms #$Nom LesGeneNames #$Nom LesProteines #Protein $Access LesGeneNames #Protein $Access LesGeneNames #Protein $Access LesNoms #GeneName $GeneName LesNoms #GeneName $GeneName LesProteines #GeneName $GeneName n #LesGeneNames #$Nom GeneName $GeneName n #$Nom GeneName $GeneName LesProteines #$Nom GeneName $GeneName Protein $Access n #Protein $Access GeneName $GeneName n if {$args == "unset"} { if {[info exists TableauInterrogationGeneName]} { unset TableauInterrogationGeneName } return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationGeneName($Quoi)]} { return [set TableauInterrogationGeneName($Quoi)] } set File1 "[RepertoireDuGenome]/fiches/GeneName" ###################CHARGE FichierExonicMap######################### if {[file exists $File1] && ![info exists TableauInterrogationGeneName($File1,EstCharge)]} { set TableauInterrogationGeneName($File1,EstCharge) 1 ChargeGeneName TableauInterrogationGeneName $File1 } if {[info exists TableauInterrogationGeneName($Quoi)]} { return [set TableauInterrogationGeneName($Quoi)] } return } proc InterrogeGeneOntology {args} { global TableauGeneOntology #unset #$FichierGeneOntology LesGroupes #$FichierGeneOntology Groupe $Groupe LesGO #$FichierGeneOntology Groupe $Groupe GO $GO n #$FichierGeneOntology Groupe $Groupe LesTypes #$FichierGeneOntology Groupe $Groupe LesNoms #$FichierGeneOntology Groupe $Groupe LesAccess #$FichierGeneOntology LesNoms #$FichierGeneOntology $Nom LesGroupes #$FichierGeneOntology $Nom LesAccess #$FichierGeneOntology $Nom LesGO #$FichierGeneOntology $Nom LesTypes #$FichierGeneOntology $Nom Access $Access LesGO #$FichierGeneOntology $Nom Access $Access LesTypes #$FichierGeneOntology $Nom Access $Access Groupe #$FichierGeneOntology $Nom Access $Access Type $Type LesGO #$FichierGeneOntology $Nom Groupe $Groupe LesAccess #$FichierGeneOntology $Nom Groupe $Groupe LesGO #$FichierGeneOntology $Nom Groupe $Groupe GO $GO n #$FichierGeneOntology $Nom Groupe $Groupe LesTypes #$FichierGeneOntology $Nom GO $GO LesAccess #$FichierGeneOntology $Nom GO $GO n #$FichierGeneOntology $Nom GO $GO LesGroupes #$FichierGeneOntology LesAccess #$FichierGeneOntology Access $Access LesGO #$FichierGeneOntology Access $Access LesNoms #$FichierGeneOntology Access $Access LesTypes #$FichierGeneOntology Access $Access LesGroupes #$FichierGeneOntology LesTypes #$FichierGeneOntology LesGO #$FichierGeneOntology GO $GO LaDefinition #$FichierGeneOntology LaDefinition $Def GO #$FichierGeneOntology GO $GO n #$FichierGeneOntology GO $GO LesAncetres #$FichierGeneOntology GO $GO Type #$FichierGeneOntology GO $GO LesAccess #$FichierGeneOntology GO $GO LesNoms #$FichierGeneOntology GO $GO LesGroupes if {$args == "unset"} { if {[info exists TableauGeneOntology]} { unset TableauGeneOntology } return "" } set Quoi [join $args ","] if {[info exists TableauGeneOntology($Quoi)]} { return [set TableauGeneOntology($Quoi)] } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauGeneOntology($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauGeneOntology($File,EstCharge) 1 ChargeGeneOntology TableauGeneOntology $File if {[info exists TableauGeneOntology($Quoi)]} { return [set TableauGeneOntology($Quoi)] } return } proc InterrogeGenomeKEGG {args} { #LesOrgaCourts #LesOrganismes #LesTaxonId #OrgaCourt $OrgaCourt Organisme #Organisme $Organisme OrgaCourt #OrgaCourt $OrgaCourt TaxonId #Organisme $Organisme TaxonId #TaxonId $TaxId Organisme #TaxonId $TaxId OrgaCourt global TableauInterrogationGenomeKEGG if {$args == "unset"} { if {[info exists TableauInterrogationGenomeKEGG]} {unset TableauInterrogationGenomeKEGG} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationGenomeKEGG($Quoi)]} { return [set TableauInterrogationGenomeKEGG($Quoi)] } set FichierGenomeKEGG "[KEGGDir]/genome" if {![file exists $FichierGenomeKEGG ]} {return} if { [info exists TableauInterrogationGenomeKEGG($FichierGenomeKEGG,EstCharge)]} {return} ###################CHARGE GenomeKEGG######################### ChargeGenomeKEGG TableauInterrogationGenomeKEGG $FichierGenomeKEGG set TableauInterrogationGenomeKEGG($FichierGenomeKEGG,EstCharge) 1 if {[info exists TableauInterrogationGenomeKEGG($Quoi)]} {return [set TableauInterrogationGenomeKEGG($Quoi)]} return } proc InterrogeGlobPlot {args} { #Permet de questionner les infos de GlobPlot #Voir aussi decharge et charge global InfoGlobPlot #Utilisation: #On demande set ListeDisorder [InterrogeGlobPlot $File Disorder] #on boucle sur #foreach Indice $ListeDisorder { # et on recupere la valeur par # set Valeur [InterrogeGlobPlot $File Disorder $Indice] #} #Arguments: ########### #$Fichier Disorder - Les valeurs de i #$Fichier Disorder $i - Valeur de Disorder pour $i #$Fichier GlobDoms - Les valeurs de i #$Fichier GlobDoms $i - Valeur de GlobDoms pour $i if {$args == "unset"} { if {[info exists InfoGlobPlot]} { Espionne "unset InfoGlobPlot" array unset InfoGlobPlot } return "" } #1 On test si c deja en memoire et si oui on retourne la valeur demandee set Quoi [join $args ","] if {[info exists InfoGlobPlot($Quoi)]} {return [set InfoGlobPlot($Quoi)]} #2 On recupere le fichier (1er argument) set FichierACharger [lindex $args 0] if {! [info exists InfoGlobPlot($FichierACharger,EstCharge)]} {set InfoGlobPlot($FichierACharger,EstCharge) 0} #3 On decharge le cas echeant if {$Quoi=="$FichierACharger,Decharge"} { DechargeGlobPlot $FichierACharger return "" } if { [info exists InfoGlobPlot($FichierACharger,EstVide)]} {return ""} if { [info exists InfoGlobPlot($Quoi)]} {return [set InfoGlobPlot($Quoi)]} #4 On charge les resultats if {! [info exists InfoDisEMBL($FichierACharger,EstCharge)] || [set InfoDisEMBL($FichierACharger,EstCharge)]=="0"} { set InfoGlobPlot($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeGlobPlot InfoGlobPlot $FichierACharger] if {$ResultatCharge != ""} { set InfoGlobPlot($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoGlobPlot($Quoi)]} {return ""} return [set InfoGlobPlot($Quoi)] } proc InterrogeHgmdParGdb {idGdb} { # cette procedure n'est plus fonctionnelle car l'IP du lbgi est reconnue et interdite d'acces par la HGMD # au lieu d'utiliser cette proc, on verifie à present la présence d'un lien vers la HGMD dans la fiche GDB (attention, pas parfait, car le lien n'est pas tjs present, meme si une entree existe)! set url1 "[LbgiUrl]/~friedric/hgmdParGDB.php" set Query [::http::formatQuery gdb $idGdb] set url "${url1}?$Query" set LesLignes {} set x [HttpCopy $url LesLignes] if {[lsearch -regexp $LesLignes "We are sorry,"] == -1} { return 1 } else { return 0 } } proc InterrogeInfoDeLOligo {args} { Wup "Permet de questionner les infos des oligos" Wup "Voir aussi decharge et charge" global InfoOligo #Arguments: ########### #$FichierOligo $NomOligo Taille - la Taille de l oligo # FichierOligo NomOligo Tm - le Tm # FichierOligo NomOligo ExpTm - le Tm avec une autre methode # FichierOligo NomOligo GC - le GC content # FichierOligo NomOligo Debut - le debut sur la query # FichierOligo NomOligo Fin - la fin sur la query # FichierOligo NomOligo NbCandidats - le nombre de candidats pouvant hybrider l oligo # FichierOligo NomOligo NbContigues - le nombre de fois ou on a eu 15 nt successifs # FichierOligo NomOligo LesCandidats - la liste des access des candidats # FichierOligo NomOligo Sequence - la sequence # FichierOligo $Debut $Fin NomOligo - le nom de l oligo # FichierOligo LesNoms - la liste des noms des oligos # FichierOligo LesDebutFin - la liste de listes des coordonnees des oligos if {$args == "unset"} { if {[info exists InfoOligo]} {array unset InfoOligo} return "" } set Quoi [join $args ","] if {[info exists InfoOligo($Quoi)]} {return [set InfoOligo($Quoi)]} set FichierACharger [lindex $args 0] if {! [info exists InfoOligo($FichierACharger,EstCharge)]} {set InfoOligo($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeInfoDeOligo $FichierACharger return "" } if { [info exists InfoOligo($FichierACharger,EstVide)]} {return ""} if { [info exists InfoOligo($Quoi)]} {return [set InfoOligo($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists InfoOligo($FichierACharger,EstCharge)] || [set InfoOligo($FichierACharger,EstCharge)]=="0"} { set InfoOligo($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeLesInfoDeLOligo InfoOligo $FichierACharger] if {$ResultatCharge != ""} { set InfoOligo($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoOligo($Quoi)]} {return ""} return [set InfoOligo($Quoi)] } proc InterrogeInfoDePSORTII {args} { Wup "Permet de questionner les infos des localisation cellulaires de POSRTII" Wup "Voir aussi decharge et charge" global PsortInfo #Arguments: ########### #$FichierPsort $Localisation - rend le pourcentage associe # FichierPsort LesLocalisation - rend les noms de toutes les localisation # FichierPsort BestLocalisation - rend la meilleure localisation if {$args == "unset"} { if {[info exists PsortInfo]} {array unset PsortInfo} return "" } set Quoi [join $args ","] if {[info exists PsortInfo($Quoi)]} {return [set PsortInfo($Quoi)]} set FichierACharger [lindex $args 0] if {[info exists PsortInfo($FichierACharger,EstVide)]} {return ""} if {$Quoi=="$FichierACharger,Decharge"} { DechargeInfoDePSORTII $FichierACharger return "" } ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists PsortInfo($FichierACharger,EstCharge)]} { set PsortInfo($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeLesInfosDePSORTII PsortInfo $FichierACharger] if {$ResultatCharge != ""} { set PsortInfo($FichierACharger,EstVide) 1 return "" } } if {![info exists PsortInfo($Quoi)]} {return ""} return [set PsortInfo($Quoi)] } proc InterrogeInfoDePrimer {args} { Wup "Permet de questionner les infos des Primers" Wup "Voir aussi charge" global InfoPrimer #Arguments: ########### #$PAB - liste Frag Primer1 Primer2 if {$args == "unset"} { if {[info exists InfoPrimer]} {array unset InfoPrimer} return "" } set Quoi [join $args ","] if {[info exists InfoPrimer($Quoi)]} {return [set InfoPrimer($Quoi)]} set PAB [lindex $args 0] if {[info exists InfoPrimer($PAB,EstVide)]} {return ""} ###################CHARGE le Fichier avec les Primers######################### if {! [info exists InfoPrimer($PAB,EstCharge)]} { set InfoPrimer($PAB,EstCharge) 1 set ResultatCharge [ChargeLesInfoDePrimer InfoPrimer $PAB] if {$ResultatCharge != ""} { set InfoPrimer($PAB,EstVide) 1 return "" } } if {![info exists InfoPrimer($Quoi)]} {return ""} return [set InfoPrimer($Quoi)] } proc InterrogeInfoDuLogDeLOligo {args} { Wup "Permet de questionner les infos contenues dans le log des oligos" Wup "Voir aussi decharge et charge" global InfoDuLogDeLOligo #Indexation sur le nom du fichier mais egalement sur les positions debut fin pour ne pas tout charger #Arguments: ########### #$Fichierlog $Debut $Fin LesCandidats - Les candidats detectes par l oligo # Fichierlog Debut Fin $Candidat IDG - Les pourcentages d idendite du candidat # Fichierlog Debut Fin $Candidat NbContigue - Le nombre de bases contigues identique # Fichierlog Debut Fin NbContigue - if {$args == "unset"} { if {[info exists InfoDuLogDeLOligo]} {array unset InfoDuLogDeLOligo} return "" } set Quoi [join $args ","] if {[info exists InfoDuLogDeLOligo($Quoi)]} {return [set InfoDuLogDeLOligo($Quoi)]} set FichierACharger [lindex $args 0] set Debut [lindex $args 1] set Fin [lindex $args 2] if {! [info exists InfoDuLogDeLOligo($FichierACharger,$Debut,$Fin,EstCharge)]} {set InfoDuLogDeLOligo($FichierACharger,$Debut,$Fin,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeLesInfosDuFichierLog $FichierACharger return "" } if { [info exists InfoDuLogDeLOligo($FichierACharger,$Debut,$Fin,EstVide)]} {return ""} if { [info exists InfoDuLogDeLOligo($Quoi)]} {return [set InfoDuLogDeLOligo($Quoi)]} ###################CHARGE le Fichier log avec les infos complementaires des Oligos################### if {! [info exists InfoDuLogDeLOligo($FichierACharger,$Debut,$Fin,EstCharge)] || [set InfoDuLogDeLOligo($FichierACharger,$Debut,$Fin,EstCharge)]=="0"} { set InfoDuLogDeLOligo($FichierACharger,$Debut,$Fin,EstCharge) 1 set ResultatCharge [ChargeLesInfosDuFichierLog InfoDuLogDeLOligo $FichierACharger $Debut $Fin] if {$ResultatCharge != ""} { set InfoDuLogDeLOligo($FichierACharger,$Debut,$Fin,EstVide) 1 return "" } } if {![info exists InfoDuLogDeLOligo($Quoi)]} {return ""} return [set InfoDuLogDeLOligo($Quoi)] } proc InterrogeIngenuityGbEtEvi {{Qui ""} {Quoi ""}} { global InterrogeIngenuityGbEtEvi if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "Evi" } if {[info exists InterrogeIngenuityGbEtEvi($Qui,$Quoi)]} { return $InterrogeIngenuityGbEtEvi($Qui,$Quoi) } if {[info exists InterrogeIngenuityGbEtEvi("EstCharge")]} { return "" } set InterrogeIngenuityGbEtEvi("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/ListeIngenuityGbAcEvi" set LesTetes "Acc Evi" set InterrogeIngenuityGbEtEvi(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set LesElmts [split $Ligne " "] set Acc [lindex $LesElmts 0] set Evi [lindex $LesElmts 1] lappend InterrogeIngenuityGbEtEvi(ListOf,Evi) $Evi lappend InterrogeIngenuityGbEtEvi(ListOf,Acc) $Acc lappend InterrogeIngenuityGbEtEvi($Acc,Evi) $Evi set InterrogeIngenuityGbEtEvi($Evi,Acc) $Acc } return [InterrogeIngenuityGbEtEvi $Qui $Quoi] } proc InterrogeIngenuityGbetGn {{Qui ""} {Quoi ""}} { global InterrogeIngenuityGbetGn if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "Evi" } if {[info exists InterrogeIngenuityGbetGn($Qui,$Quoi)]} { return $InterrogeIngenuityGbetGn($Qui,$Quoi) } if {[info exists InterrogeIngenuityGbetGn("EstCharge")]} { return "" } set InterrogeIngenuityGbetGn("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/Analysis_Rechip_Gb_20061002-all.ini" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {2000-2006 Ingenuity Systems,} $Ligne]} {continue} if {$Ligne==""} {continue} if {[regexp {^Refseq} $Ligne]} { set LesTetes [split $Ligne "\t"] set InterrogeIngenuityGbetGn(ListOf,Header) $LesTetes set OnAttendEntete 0 continue } set LesElmts [split $Ligne "\t"] set Gb [lindex $LesElmts 0] set Gn [lindex $LesElmts 1] lappend InterrogeIngenuityGbetGn(ListOf,Gb) $Gb lappend InterrogeIngenuityGbetGn(ListOf,Gn) $Gn lappend InterrogeIngenuityGbetGn($Gn,Gb) $Gb set InterrogeIngenuityGbetGn($Gb,Gn) $Gn } return [InterrogeIngenuityGbetGn $Qui $Quoi] } proc InterrogeIngenuityGnGbetPathway {{Qui ""} {Quoi ""}} { global InterrogeIngenuityGnGbetPathway if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "Evi" } if {[info exists InterrogeIngenuityGnGbetPathway($Qui,$Quoi)]} { return $InterrogeIngenuityGnGbetPathway($Qui,$Quoi) } if {[info exists InterrogeIngenuityGnGbetPathway("EstCharge")]} { return "" } set InterrogeIngenuityGnGbetPathway("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/LesPathwaysGb.txt" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {2000-2006 Ingenuity Systems} $Ligne]} {continue} if {$Ligne==""} {continue} if {[regexp {^Pathway} $Ligne]} { set LesTetes [split $Ligne "\t"] set InterrogeIngenuityGnGbetPathway(ListOf,Header) $LesTetes set OnAttendEntete 0 continue } set LesElmts [split $Ligne "\t"] set Pathway [lindex $LesElmts 0] set Gns [lindex $LesElmts 2] lappend InterrogeIngenuityGnGbetPathway(ListOf,Pathway) $Pathway set LesGenesNames [split $Gns ","] foreach Gn $LesGenesNames { lappend InterrogeIngenuityGnGbetPathway(ListOf,Gns) $Gn lappend InterrogeIngenuityGnGbetPathway($Pathway,Gns) $Gn lappend InterrogeIngenuityGnGbetPathway($Gn,Pathway) $Pathway } } return [InterrogeIngenuityGnGbetPathway $Qui $Quoi] } proc InterrogeIngenuityGnNmetPathway {{Qui ""} {Quoi ""}} { global InterrogeIngenuityGnNmetPathway if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "Evi" } if {[info exists InterrogeIngenuityGnNmetPathway($Qui,$Quoi)]} { return $InterrogeIngenuityGnNmetPathway($Qui,$Quoi) } if {[info exists InterrogeIngenuityGnNmetPathway("EstCharge")]} { return "" } set InterrogeIngenuityGnNmetPathway("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/LesPathwaysNm.txt" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {2000-2006 Ingenuity Systems} $Ligne]} {continue} if {$Ligne==""} {continue} if {[regexp {^Pathway} $Ligne]} { set LesTetes [split $Ligne "\t"] set InterrogeIngenuityGnNmetPathway(ListOf,Header) $LesTetes set OnAttendEntete 0 continue } set LesElmts [split $Ligne "\t"] set Pathway [lindex $LesElmts 0] set Gns [lindex $LesElmts 2] lappend InterrogeIngenuityGnNmetPathway(ListOf,Pathway) $Pathway set LesGenesNames [split $Gns ","] foreach Gn $LesGenesNames { lappend InterrogeIngenuityGnNmetPathway(ListOf,Gns) $Gn lappend InterrogeIngenuityGnNmetPathway($Pathway,Gns) $Gn lappend InterrogeIngenuityGnNmetPathway($Gn,Pathway) $Pathway } } return [InterrogeIngenuityGnNmetPathway $Qui $Quoi] } proc InterrogeIngenuityGnetPathway {{Qui ""} {Quoi ""}} { global InterrogeIngenuityGnetPathway if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "Evi" } if {[info exists InterrogeIngenuityGnetPathway($Qui,$Quoi)]} { return $InterrogeIngenuityGnetPathway($Qui,$Quoi) } if {[info exists InterrogeIngenuityGnetPathway("EstCharge")]} { return "" } set InterrogeIngenuityGnetPathway("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/pathway.txt" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {2000-2007 Ingenuity Systems} $Ligne]} {continue} if {$Ligne==""} {continue} if {[regexp {^Pathway} $Ligne]} { set LesTetes [split $Ligne "\t"] set InterrogeIngenuityGnetPathway(ListOf,Header) $LesTetes set OnAttendEntete 0 continue } set LesElmts [split $Ligne "\t"] set Pathway [lindex $LesElmts 0] set Gns [lindex $LesElmts 4] lappend InterrogeIngenuityGnetPathway(ListOf,Pathway) $Pathway set LesGenesNames [split $Gns ","] foreach Gn $LesGenesNames { lappend InterrogeIngenuityGnetPathway(ListOf,Gns) $Gn lappend InterrogeIngenuityGnetPathway($Pathway,Gns) $Gn lappend InterrogeIngenuityGnetPathway($Gn,Pathway) $Pathway } } return [InterrogeIngenuityGnetPathway $Qui $Quoi] } proc InterrogeIngenuityNmEtEvi {{Qui ""} {Quoi ""}} { global InterrogeIngenuityNmEtEvi if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "Evi" } if {[info exists InterrogeIngenuityNmEtEvi($Qui,$Quoi)]} { return $InterrogeIngenuityNmEtEvi($Qui,$Quoi) } if {[info exists InterrogeIngenuityNmEtEvi("EstCharge")]} { return "" } set InterrogeIngenuityNmEtEvi("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/ListeIngenuityNmAcEvi" set LesTetes "Acc Evi" set InterrogeIngenuityNmEtEvi(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set LesElmts [split $Ligne " "] set Acc [lindex $LesElmts 0] set Evi [lindex $LesElmts 1] lappend InterrogeIngenuityNmEtEvi(ListOf,Evi) $Evi lappend InterrogeIngenuityNmEtEvi(ListOf,Acc) $Acc lappend InterrogeIngenuityNmEtEvi($Acc,Evi) $Evi set InterrogeIngenuityNmEtEvi($Evi,Acc) $Acc } return [InterrogeIngenuityNmEtEvi $Qui $Quoi] } proc InterrogeIngenuityNmetGn {{Qui ""} {Quoi ""}} { global InterrogeIngenuityNmetGn if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "Evi" } if {[info exists InterrogeIngenuityNmetGn($Qui,$Quoi)]} { return $InterrogeIngenuityNmetGn($Qui,$Quoi) } if {[info exists InterrogeIngenuityNmetGn("EstCharge")]} { return "" } set InterrogeIngenuityNmetGn("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/Analysis_Retchip_Nm_20061002-all.ini" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {2000-2006 Ingenuity Systems,} $Ligne]} {continue} if {$Ligne==""} {continue} if {[regexp {^Refseq} $Ligne]} { set LesTetes [split $Ligne "\t"] set InterrogeIngenuityNmetGn(ListOf,Header) $LesTetes set OnAttendEntete 0 continue } set LesElmts [split $Ligne "\t"] set Nm [lindex $LesElmts 0] set Gn [lindex $LesElmts 1] lappend InterrogeIngenuityNmetGn(ListOf,Nm) $Nm lappend InterrogeIngenuityNmetGn(ListOf,Gn) $Gn lappend InterrogeIngenuityNmetGn($Gn,Nm) $Nm set InterrogeIngenuityNmetGn($Nm,Gn) $Gn } return [InterrogeIngenuityNmetGn $Qui $Quoi] } proc InterrogeIngenuitySwetGn {{Qui ""} {Quoi ""}} { global InterrogeIngenuitySwetGn if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {[info exists InterrogeIngenuitySwetGn($Qui,$Quoi)]} { return $InterrogeIngenuitySwetGn($Qui,$Quoi) } if {[info exists InterrogeIngenuitySwetGn("EstCharge")]} { return "" } set InterrogeIngenuitySwetGn("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Ingenuity/FileAnnot.txt" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {2000-2007 Ingenuity Systems,} $Ligne]} {continue} if {$Ligne==""} {continue} if {[regexp {^Rank} $Ligne]} { set LesTetes [split $Ligne "\t"] set InterrogeIngenuitySwetGn(ListOf,Header) $LesTetes set OnAttendEntete 0 continue } set LesElmts [split $Ligne "\t"] set Sw [lindex $LesElmts 3] set Gn [lindex $LesElmts 5] lappend InterrogeIngenuitySwetGn(ListOf,Sw) $Sw lappend InterrogeIngenuitySwetGn(ListOf,Gn) $Gn lappend InterrogeIngenuitySwetGn($Gn,Sw) $Sw set InterrogeIngenuitySwetGn($Sw,Gn) $Gn } return [InterrogeIngenuitySwetGn $Qui $Quoi] } proc InterrogeKEGG {args} { #LesPathway #LesLiens #LesKegg #LesOrganismes #Kegg $KeggNumber LesPathway #Kegg $KeggNumber Definition #Kegg $KeggNumber LesLiens #Kegg $KeggNumber LesOrganismes #Kegg $KeggNumber Organisme $Organisme LesEnzymes #Pathway $Pathway LesKegg #Pathway $Pathway Definition #Pathway $Pathway LesOrganismes #Organisme $Organisme LesKegg #Organisme $Organisme LesPathway #Lien $Elet LesKegg #Organisme $Organisme Enzyme $Enzyme LesKegg global TableauInterrogationKEGG if {$args == "unset"} { if {[info exists TableauInterrogationKEGG]} {unset TableauInterrogationKEGG} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationKEGG($Quoi)]} {return [set TableauInterrogationKEGG($Quoi)]} set FichierKEGG "[KEGGDir]/ko" if {![file exists $FichierKEGG ]} {return} if { [info exists TableauInterrogationKEGG($FichierKEGG,EstCharge)]} {return} ###################CHARGE KEGG######################### Espionne "KEGG loading..." ChargeKEGG TableauInterrogationKEGG $FichierKEGG Espionne "KEGG OK" set TableauInterrogationKEGG($FichierKEGG,EstCharge) 1 if {![info exists TableauInterrogationKEGG($Quoi)]} {return} return [set TableauInterrogationKEGG($Quoi)] } proc InterrogeLeGPRFile {args} { Wup "Permet de questionner les infos contenus dans un fichier GPR (resultat de GenePix)" Wup "Base sur le fichier .gal qui contient la position sur la plaque des sondes" global InfoLeGPRFile ############################## #GPR FILE is BLOCK ROW COLUMN# ############################## #Arguments: ########### #Quelques exemples toujours dispo #Quoi - Liste de tout ce qui interrogeable #ATF - Version du Axon Text File format #LesDataFields - Nom des colonnes de donnees #NDataFields - Nb de colonne de donnee #NbBlock - Nombre de block #NbColumn - Nombre de colonne #NbRow - Nombre de ligne #NMaxOptionalHeader - Nombre maximum de ligne dans le header if {$args == "unset"} { if {[info exists InfoLeGPRFile]} {array unset InfoLeGPRFile} return "" } set Quoi [join $args ","] if {[info exists InfoLeGPRFile($Quoi)]} {return [set InfoLeGPRFile($Quoi)]} set FichierACharger [lindex $args 0] if {[info exists InfoLeGPRFile($FichierACharger,EstVide)]} {return ""} if {$Quoi=="$FichierACharger,Decharge"} { DeChargeLeGPRFile $FichierACharger return "" } ###################CHARGE le Fichier avec les GPRFile######################### if {! [info exists InfoLeGPRFile($FichierACharger,EstCharge)]} { set InfoLeGPRFile($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeLeGPRFile InfoLeGPRFile $FichierACharger] if {$ResultatCharge != ""} { set InfoLeGPRFile($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoLeGPRFile($Quoi)]} {return ""} return [set InfoLeGPRFile($Quoi)] } proc InterrogeLeGalFile_ActiChip {args} { Wup "Permet de questionner les infos de ActiChip" Wup "Base sur le fichier .gal qui contient la position sur la plaque des sondes" global InfoGalFileActiChip ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## #Arguments: ########### #$Id Block - Block #$Id Col - Column #$Id Row - Row #$Block $Row $Column Id - Id #$Block $Row $Column Name - Name #LesIDs - Liste des Ids # #Quelques exemples toujours dispo ################################# #Quoi - Liste de tout ce qui interrogeable #ATF - Version du Axon Text File format #LesDataFields - Nom des colonnes de donnees #NDataFields - Nb de colonne de donnee #NbBlock - Nombre de block #NMaxOptionalHeader - Nombre maximum de ligne dans le header #Block[0-9] - Position du block if {$args == "unset"} { if {[info exists InfoGalFileActiChip]} {array unset InfoGalFileActiChip} return "" } set Quoi [join $args ","] if {[info exists InfoGalFileActiChip($Quoi)]} {return [set InfoGalFileActiChip($Quoi)]} ###################CHARGE le Fichier avec le GalFileActiChip######################### if {! [info exists InfoGalFileActiChip(EstCharge)]} { set InfoGalFileActiChip(EstCharge) 1 set ResultatCharge [ChargeLeGalFile_ActiChip InfoGalFileActiChip] if {$ResultatCharge != ""} { set InfoGalFileActiChip(EstVide) 1 return "" } } if {![info exists InfoGalFileActiChip($Quoi)]} {return ""} return [set InfoGalFileActiChip($Quoi)] } proc InterrogeLeGalFile_Ontario {args} { Wup "Permet de questionner les infos des puces EST Ontario" Wup "Base sur le fichier .gal qui contient la position sur la plaque des sondes" global InfoGalFile ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## #Arguments: ########### #ATTENTION Verified puis Original #$VerifiedId $OriginalId Block - Block #$VerifiedId $Id Col - Column #$VerifiedId $Id Row - Row #Double reference pour eviter les problemes lies au N/A #$Block $Row $Column VerifiedId - VerifiedId #$Block $Row $Column OriginalId - OriginalId #$Block $Row $Column Name - Name #LesIDs - Liste des couples de Verified_ID et Original_ID #Quelques exemples toujours dispo #Quoi - Liste de tout ce qui interrogeable #ATF - Version du Axon Text File format #LesDataFields - Nom des colonnes de donnees #NDataFields - Nb de colonne de donnee #NbBlock - Nombre de block #NMaxOptionalHeader - Nombre maximum de ligne dans le header #Block[0-9] - Position du block if {$args == "unset"} { if {[info exists InfoGalFile]} {array unset InfoGalFile} return "" } set Quoi [join $args ","] if {[info exists InfoGalFile($Quoi)]} {return [set InfoGalFile($Quoi)]} ###################CHARGE le Fichier avec le GalFileEST######################### if {! [info exists InfoGalFile(EstCharge)]} { set InfoGalFile(EstCharge) 1 set ResultatCharge [ChargeInfoGalFile InfoGalFile] if {$ResultatCharge != ""} { set InfoGalFile(EstVide) 1 return "" } } if {![info exists InfoGalFile($Quoi)]} {return ""} return [set InfoGalFile($Quoi)] } proc InterrogeLeIOBFile_Ontario {args} { Wup "Permet de questionner les infos des puces EST Ontario" Wup "Base sur le fichier .iob qui contient toute l info seq definition ..." global InfoIOBFile ############################# #IOB FILE is GRID COLUMN ROW# ############################# #Arguments: ########### #$sample Grid - Grid #$sample Col - Column #$sample Row - Row #$sample Statut - Statut #$sample Definition - Definition #$sample Abreviation - Gene abreviation #$sample Chromosome - chromosomal location #$sample CytoBand - cytoband location #$sample UnigeneID - UnigeneID #$sample AccessionID - AccessionID #$grid $col $row Sample - Sample ou id du spot #$grid $col $row Statut - Statut #$grid $col $row Definition - Definition du spot #$grid $col $row Abreviation - Gene abreviation #$grid $col $row Chromosome - chromosomal location #$grid $col $row CytoBand - cytoband location #$grid $col $row UnigeneID - UnigeneID #$grid $col $row AccessionID - AccessionID #LesSamples - Liste des sample ou id du fichier iob if {$args == "unset"} { if {[info exists InfoIOBFile]} {array unset InfoIOBFile} return "" } set Quoi [join $args ","] if {[info exists InfoIOBFile($Quoi)]} {return [set InfoIOBFile($Quoi)]} ###################CHARGE le Fichier avec les LeIOBFile_Ontario######################### if {! [info exists InfoIOBFile(EstCharge)]} { set InfoIOBFile(EstCharge) 1 set ResultatCharge [ChargeLeIOBFile_Ontario InfoIOBFile] if {$ResultatCharge != ""} { set InfoIOBFile(EstVide) 1 return "" } } if {![info exists InfoIOBFile($Quoi)]} {return ""} return [set InfoIOBFile($Quoi)] } proc InterrogeLesAccRSEtUG_Affymetrix {args} { Wup "Permet d interroger les infos de LesAccDefRefSeqUnigene de la puce Affymetrix" Wup "Pour le projet Gscope Affy3Marker donnera les ref RefSeq et Unigene du PAB" global InfoAccAffy #Arguments: ########### #Mieux vaut utiliser les references de la puce (Block Row Column) #Gscope Access\tAffymetrixAccess\tAccRefSeq\tIdGRefSeq\tCoverRefSeq\tDefRefSeq\tAccUnigene\tUGId\tIdGUnigene\tCoverUnigene\tDefUnigene #$AffyAccess PAB - PAB #$AffyAccess BestDefinition - BestDefinition #$PABOuAffyAccess AccRefSeq - Acc equivalent dans RefSeq #$PABOuAffyAccess IdGRefSeq - Pourcentage Identite du blastn dans RefSeq #$PABOuAffyAccess CoverRefSeq - Pourcent Id de recouvrement de la Q par rapport S du blastn dans RefSeq #$PABOuAffyAccess DefRefSeq - Definition equivalent dans RefSeq #$PABOuAffyAccess AccUniseq - Acc equivalent dans Uniseq #$PABOuAffyAccess AccUnigene - Acc equivalent dans Unigene #$PABOuAffyAccess IdGUniseq - Pourcentage Identite du blastn dans Uniseq #$PABOuAffyAccess CoverUniseq - Pourcent Id de recouvrement de la Q par rapport a S du blastn dans Uniseq #$PABOuAffyAccess DefUniseq - Definition equivalent dans Uniseq #LesAccRefSeq - Liste des Access RefSeq presents sur la puce #$AccRefSeq - Renvoi 1 si existe #$AccRefSeq AccGscope - Liste des Acc Gscope du projet PuceEST #LesAccAffymetrix - Liste des ProbetSetId presents sur la puce #$AccRefSeq ProbeSetId - Renvoi la liste des ProbeSetId attaches if {$args == "unset"} { if {[info exists InfoAccAffy]} {array unset InfoAccAffy} return "" } set Quoi [join $args ","] if {[info exists InfoAccAffy($Quoi)]} {return [set InfoAccAffy($Quoi)]} ###################CHARGE le Fichier avec les AccRSEtUGDeAffymetrix######################### if {! [info exists InfoAccAffy(EstCharge)]} { set InfoAccAffy(EstCharge) 1 set ResultatCharge [ChargeLesAccRSEtUG_Affymetrix InfoAccAffy] if {$ResultatCharge != ""} { set InfoAccAffy(EstVide) 1 return "" } } if {![info exists InfoAccAffy($Quoi)]} {return ""} return [set InfoAccAffy($Quoi)] } proc InterrogeLesAccRSEtUG_Ontario {args} { Wup "Permet d interroger les infos de LesAccDefRefSeqUnigene de la puce EST" Wup "Pour le projet Gscope PuceEST donnera les ref RefSeq et Unigene du PAB" global InfoAccOntario #Arguments: ########### #Mieux vaut utiliser les references de la puce (Block Row Column) #$PAB OriginalID - le Original_Image_ID de la puce #$PAB VerifiedID - le Verified_Image_ID de la puce #$PAB BestDefinition - La meilleure definition entre RefSeq et Uniseq #$OriginalID PAB - le PAB de Original_Image_ID de la puce #$VerifiedID PAB - le PAB de Verified_Image_ID de la puce # #$Block $Row $Column PAB - PAB #$Block $Row $Column BestDefinition - BestDefinition #$Block $Row $Column AccRefSeq - Acc equivalent dans RefSeq #$Block $Row $Column IdGRefSeq - Pourcentage Identite du blastn dans RefSeq #$Block $Row $Column CoverRefSeq - Pourcent Id de recouvrement de la Q par rapport S du blastn dans RefSeq #$Block $Row $Column DefRefSeq - Definition equivalent dans RefSeq #$Block $Row $Column AccUniseq - Acc equivalent dans Uniseq #$Block $Row $Column AccUnigene - Acc equivalent dans Unigene #$Block $Row $Column IdGUniseq - Pourcentage Identite du blastn dans Uniseq #$Block $Row $Column CoverUniseq - Pourcent Id de recouvrement de la Q par rapport a S du blastn dans Uniseq #$Block $Row $Column DefUniseq - Definition equivalent dans Uniseq # #$OriginalIDOuVerifiedIDOuPAB BestDefinition - BestDefinition #$OriginalIDOuVerifiedIDOuPAB AccRefSeq - Acc equivalent dans RefSeq #$OriginalIDOuVerifiedIDOuPAB IdGRefSeq - Pourcentage Identite du blastn dans RefSeq #$OriginalIDOuVerifiedIDOuPAB CoverRefSeq - Pourcent Id de recouvrement de la Q par rapport S du blastn dans RefSeq #$OriginalIDOuVerifiedIDOuPAB DefRefSeq - Definition equivalent dans RefSeq #$OriginalIDOuVerifiedIDOuPAB AccUniseq - Acc equivalent dans Uniseq #$OriginalIDOuVerifiedIDOuPAB AccUnigene - Acc equivalent dans Unigene #$OriginalIDOuVerifiedIDOuPAB IdGUniseq - Pourcentage Identite du blastn dans Uniseq #$OriginalIDOuVerifiedIDOuPAB CoverUniseq - Pourcent Id de recouvrement de la Q par rapport a S du blastn dans Uniseq #$OriginalIDOuVerifiedIDOuPAB DefUniseq - Definition equivalent dans Uniseq # #LesAccRefSeq - Liste des Access RefSeq presents sur la puce #$AccRefSeq - Renvoi 1 si existe #$AccRefSeq AccGscope - Liste des Acc Gscope du projet PuceEST if {$args == "unset"} { if {[info exists InfoAccOntario]} {array unset InfoAccOntario} return "" } set Quoi [join $args ","] if {[info exists InfoAccOntario($Quoi)]} {return [set InfoAccOntario($Quoi)]} ###################CHARGE le Fichier avec les AccRSEtUGDeLaPuceEST######################### if {! [info exists InfoAccOntario(EstCharge)]} { set InfoAccOntario(EstCharge) 1 set ResultatCharge [ChargeLesAccRSEtUG_Ontario InfoAccOntario] if {$ResultatCharge != ""} { set InfoAccOntario(EstVide) 1 return "" } } if {![info exists InfoAccOntario($Quoi)]} {return ""} return [set InfoAccOntario($Quoi)] } proc InterrogeLesAccessRefSeqDesPABs {args} { Wup "Permet de questionner les infos de LesAccessUnigeneDesPABs" Wup "Base sur le fichier LesAccessUgUnDesPABs qui contient les resultats des blastn vs unigene" global InfoRefSeqID #Arguments: ########### #$PAB RefSeqId - Access RefSeq # PAB LesPABs - Les PAB if {$args == "unset"} { if {[info exists InfoRefSeqID]} {array unset InfoRefSeqID} return "" } set Quoi [join $args ","] if {[info exists InfoRefSeqID($Quoi)]} {return [set InfoRefSeqID($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists InfoRefSeqID(EstCharge)]} { set InfoRefSeqID(EstCharge) 1 set ResultatCharge [ChargeInfoRefSeqID InfoRefSeqID] if {$ResultatCharge != ""} { set InfoRefSeqID(EstVide) 1 return "" } } if {![info exists InfoRefSeqID($Quoi)]} {return ""} return [set InfoRefSeqID($Quoi)] } proc InterrogeLesAccessUnigeneDesPABs {args} { Wup "Permet de questionner les infos de LesAccessUnigeneDesPABs" Wup "Base sur le fichier LesAccessUgUnDesPABs qui contient les resultats des blastn vs unigene" global InfoUnigeneID #Arguments: ########### #$PAB UnigeneId - Access Unigene # PAB UniseqId - Access Uniseq # PAB LesPABs - Les PAB if {$args == "unset"} { if {[info exists InfoUnigeneID]} {array unset InfoUnigeneID} return "" } set Quoi [join $args ","] if {[info exists InfoUnigeneID($Quoi)]} {return [set InfoUnigeneID($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists InfoUnigeneID(EstCharge)]} { set InfoUnigeneID(EstCharge) 1 set ResultatCharge [ChargeInfoUnigeneID InfoUnigeneID] if {$ResultatCharge != ""} { set InfoUnigeneID(EstVide) 1 return "" } } if {![info exists InfoUnigeneID($Quoi)]} {return ""} return [set InfoUnigeneID($Quoi)] } proc InterrogeLesAnnotAffymetrix {args} { Wup "Permet de questionner les infos de la puce Affymetrix UG133A 2.0" Wup "Voir aussi decharge et charge" global TabAnnotAffy #Arguments: ########### #Index est le numero unique attribue en fonction de la ligne dans le fichier affymetrix #Pour faire la correspondance entre les deux #ListOfProbeSet - Liste des ProbeSet disponibles #$Index RefSeq - Access RefSeq si il existe #$AccRefSeq Index - Index du RefSeq #$IndexOuAccRefSeq Probe_Set_Name - Nom du Probe Set (11 references) peut etre une liste # IndexOuAccRefSeq Description - Description # IndexOuAccRefSeq Sequence_Type - # IndexOuAccRefSeq repAccession - Access de la sequence utilisee # IndexOuAccRefSeq GeneName - Nom du gene # IndexOuAccRefSeq Product - # IndexOuAccRefSeq subcluster - Cluster Unigene # IndexOuAccRefSeq fullLengths - Les access des sequences completes if {$args == "unset"} { if {[info exists TabAnnotAffy]} {array unset TabAnnotAffy} return "" } set FichierACharger [lindex $args 0] if {! [file exists "$FichierACharger"]} { #Mouse430_2_annot.txt #HG-U133_Plus_2_annot.txt #CE FICHIER EST TELECHARGER DU SITE AFFYMETRIX .csv ET TRANSFORME EN Tab Delimited File set RepAffy "[Affymetrix_Dir]" set FichierACharger "$RepAffy/${FichierACharger}/Annotation/${FichierACharger}_annot.txt" if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" return "" } } set Quoi [join [concat $FichierACharger [lrange $args 1 end]] ","] #set Quoi [join $args ","] if { [info exists TabAnnotAffy($Quoi)]} {return [set TabAnnotAffy($Quoi)]} if {! [info exists TabAnnotAffy($FichierACharger,EstCharge)]} {set TabAnnotAffy($FichierACharger,EstCharge) 0} if {$Quoi=="Decharge"} { DechargeLesAnnotAffymetrix $FichierACharger return "" } if { [info exists TabAnnotAffy($FichierACharger,EstVide)]} {return ""} if { [info exists TabAnnotAffy($Quoi)]} {return [set TabAnnotAffy($Quoi)]} ###################CHARGE le Fichier avec les InfosAffymetrix######################### if {! [info exists TabAnnotAffy($FichierACharger,EstCharge)] || [set TabAnnotAffy($FichierACharger,EstCharge)]=="0"} { set TabAnnotAffy($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeLesAnnotAffymetrix TabAnnotAffy $FichierACharger] if {$ResultatCharge != ""} { set TabAnnotAffy($FichierACharger,EstVide) 1 return "" } } if {! [info exists TabAnnotAffy($Quoi)]} {return ""} return [set TabAnnotAffy($Quoi)] } proc InterrogeLesBornesMsmegmatis {args} { Wup "Permet de questionner les bornes des sequences de M.smegmatis" Wup "Voir aussi decharge et charge" global TabBMsmegatis #Arguments: ########### #Access est la combinaison du nom de 2 boites Gscope ex: MS00756(Acc1) et MS00758(Acc2) MS00756MS00758 #$Access Acc1 -- 1er access du couple #$Access Acc2 -- 2em access du couple #$Access D1 -- Debut de la premiere zone de PCR #$Access F1 -- Fin de la premiere zone de PCR #$Access D2 -- Debut de la deuxieme zone de PCR #$Access F2 -- Fin de la deuxieme zone de PCR if {$args == "unset"} { if {[info exists TabBMsmegatis]} {array unset TabBMsmegatis} return "" } set Quoi [join $args ","] if { [info exists TabBMsmegatis($Quoi)]} {return [set TabBMsmegatis($Quoi)]} if {! [info exists TabBMsmegatis(EstCharge)]} {set TabBMsmegatis(EstCharge) 0} if {$Quoi=="Decharge"} { DechargeLesBornesMsmegmatis return "" } if { [info exists TabBMsmegatis(EstVide)]} {return ""} if { [info exists TabBMsmegatis($Quoi)]} {return [set TabBMsmegatis($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists TabBMsmegatis(EstCharge)] || [set TabBMsmegatis(EstCharge)]=="0"} { set TabBMsmegatis(EstCharge) 1 set ResultatCharge [ChargeLesBornesMsmegmatis TabBMsmegatis] if {$ResultatCharge != ""} { set TabBMsmegatis(EstVide) 1 return "" } } if {! [info exists TabBMsmegatis($Quoi)]} {return ""} return [set TabBMsmegatis($Quoi)] } proc InterrogeLesClustersDesMSF {args} { #unset #$Fichier LesClusters #$Fichier LesAccess #$Fichier NbClusters #$Fichier Cluster $Cluster Size #$Fichier Cluster $Cluster LesAccess #$Fichier Access $Access Cluster global TableauInterrogationDesClustersDesMSF if {$args == "unset"} { if {[info exists TableauInterrogationDesClustersDesMSF]} { unset TableauInterrogationDesClustersDesMSF } return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationDesClustersDesMSF($Quoi)]} { return [set TableauInterrogationDesClustersDesMSF($Quoi)] } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauInterrogationDesClustersDesMSF($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauInterrogationDesClustersDesMSF($File,EstCharge) 1 ChargeFichierClusteringDesMSF TableauInterrogationDesClustersDesMSF $File if {[info exists TableauInterrogationDesClustersDesMSF($Quoi)]} { return [set TableauInterrogationDesClustersDesMSF($Quoi)] } return } proc InterrogeLesDomainesDesARPs {args} { Wup "Permet de questionner les domaines caracteristiques des differentes sous familles d ARP" Wup "Voir aussi decharge et charge" global LesDomainesDesARPs #Arguments: ########### #Les residus sont indexes en fonction de la famille d ARP a laquelle il appartient. #Pour acceder a la position equivalente il faut connaitre sa position (ieme residu) #dans la liste des positions de cette famille, on peut alors avoir access a la position #LesFamilles - Liste des familles presentes (ARP1, ARP2 ...) #$Famille LesAccess - Les Access d une famille #$Famille Lesi - Les numeros (rangs) des domaines #$Famille $i Type $Type - La type de domaine (IN ou DEL) pour un rang #$Famille $i Taille $Taille - La taille du domaine (IN ou DEL) pour un rang #$Famille $Access LesPositions - LesPositions contenant des domaines #$Famille $Access IN LesPositions - LesPositions des INsertions #$Famille $Access DEL LesPositions - LesPositions des DELetions #$Famille $Access $PosDomaines Type - Le type de domaine pour un access a une position #$Famille $Access $PosDomaines Taille - Le taille du domaine pour un access a une position if {$args == "unset"} { if {[info exists LesDomainesDesARPs]} {array unset LesDomainesDesARPs} return "" } set Quoi [join $args ","] if { [info exists LesDomainesDesARPs($Quoi)]} {return [set LesDomainesDesARPs($Quoi)]} if {! [info exists LesDomainesDesARPs(EstCharge)]} { set LesDomainesDesARPs(EstCharge) 0} if {$Quoi=="Decharge"} { #Espionne "Decharge $FichierACharger" DechargeLesDomainesDesARPs $FichierACharger return "" } if { [info exists LesDomainesDesARPs(EstVide)]} {return ""} if { [info exists LesDomainesDesARPs($Quoi)]} {return [set LesDomainesDesARPs($Quoi)]} ###################CHARGE le Fichier avec les residus des ARPs######################### if {! [info exists LesDomainesDesARPs(EstCharge)] || [set LesDomainesDesARPs(EstCharge)]=="0"} { set LesDomainesDesARPs(EstCharge) 1 set ResultatCharge [ChargeLesDomainesDesARPs LesDomainesDesARPs] if {$ResultatCharge != ""} { set LesDomainesDesARPs(EstVide) 1 return "" } } if {![info exists LesDomainesDesARPs($Quoi)]} {return ""} return [set LesDomainesDesARPs($Quoi)] } proc InterrogeLesEffectifsDesMots {args} { global TableauEffectifsDesMots if {[string equal -nocase $args "unset"]} { if {[info exists TableauEffectifsDesMots]} {unset TableauEffectifsDesMots} return } set Quoi [join $args ","] if {[info exists TableauEffectifsDesMots($Quoi)]} {return [set TableauEffectifsDesMots($Quoi)]} if {![info exists TableauEffectifsDesMots(EstCharge)]} { set TableauEffectifsDesMots(EstCharge) 1 set LesPhrases [LesPhrasesMemorisees] if {$LesPhrases == ""} {return} foreach LeCouple [LesEffectifsDesCouplesDeMots $LesPhrases] { set Mot1 [lindex $LeCouple 0] if {![info exists TableauEffectifsDesMots(Mot,$Mot1,LesSuivants)]} { set TableauEffectifsDesMots(Mot,$Mot1,LesSuivants) {} } set Mot2 [lindex $LeCouple 1] set n [lindex $LeCouple 2] for {set i 1} {$i <= $n} {incr i} {lappend TableauEffectifsDesMots(Mot,$Mot1,LesSuivants) $Mot2} set TableauEffectifsDesMots(Couple,$Mot1,$Mot2,n) $n set TableauEffectifsDesMots(Couple,$Mot1,$Mot2,nMax) [lindex $LeCouple 3] } set TableauEffectifsDesMots(LesMots) {} foreach LeMot [LesEffectifsDesMots $LesPhrases] { set Mot [lindex $LeMot 0] if {![info exists TableauEffectifsDesMots(Mot,$Mot,n)]} {lappend TableauEffectifsDesMots(LesMots) $Mot} set TableauEffectifsDesMots(Mot,$Mot,n) [lindex $LeMot 1] set TableauEffectifsDesMots(Mot,$Mot,nMax) [lindex $LeMot 2] } set TableauEffectifsDesMots(TousLesMots) {} foreach Mot [set TableauEffectifsDesMots(LesMots)] { set n [set TableauEffectifsDesMots(Mot,$Mot,n)] for {set i 1} {$i <= $n} {incr i} { lappend TableauEffectifsDesMots(TousLesMots) $Mot } if {![info exists TableauEffectifsDesMots(Mot,$Mot,nPremier)]} {set TableauEffectifsDesMots(Mot,$Mot,nPremier) 0} if {![info exists TableauEffectifsDesMots(Mot,$Mot,nDernier)]} {set TableauEffectifsDesMots(Mot,$Mot,nDernier) 0} } foreach LaPhrase $LesPhrases { set Premier [lindex $LaPhrase 0 ] set Dernier [lindex $LaPhrase end] incr TableauEffectifsDesMots(Mot,$Premier,nPremier) incr TableauEffectifsDesMots(Mot,$Dernier,nDernier) } set nMots [llength TousLesMots] } else { return } if {[info exists TableauEffectifsDesMots($Quoi)]} {return [set TableauEffectifsDesMots($Quoi)]} return } proc InterrogeLesInfosAffymetrix {args} { Wup "Permet de questionner les infos de la puce Affymetrix UG133A 2.0" Wup "Voir aussi decharge et charge" global TabAffy #Arguments: ########### #Index est le numero unique attribue en fonction de la ligne dans le fichier affymetrix #Pour faire la correspondance entre les deux #ListOfProbeSet - Liste des ProbeSet disponibles #$Index RefSeq - Access RefSeq si il existe #$AccRefSeq Index - Index du RefSeq #$IndexOuAccRefSeq Probe_Set_Name - Nom du Probe Set (11 references) peut etre une liste # IndexOuAccRefSeq Description - Description # IndexOuAccRefSeq Sequence_Type - # IndexOuAccRefSeq repAccession - Access de la sequence utilisee # IndexOuAccRefSeq GeneName - Nom du gene # IndexOuAccRefSeq Product - # IndexOuAccRefSeq subcluster - Cluster Unigene # IndexOuAccRefSeq fullLengths - Les access des sequences completes if {$args == "unset"} { if {[info exists TabAffy]} {array unset TabAffy} return "" } set FichierACharger [lindex $args 0] if {! [file exists "$FichierACharger"]} { set RepAffy "[Affymetrix_Dir]" set FichierACharger "$RepAffy/${FichierACharger}/LibFiles/${FichierACharger}" if {[file exists "${FichierACharger}.gin"]} { set FichierACharger "${FichierACharger}.gin" } else { set FichierACharger "${FichierACharger}.GIN" } } if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" return "" } set Quoi [join [concat $FichierACharger [lrange $args 1 end]] ","] #set Quoi [join $args ","] if { [info exists TabAffy($Quoi)]} {return [set TabAffy($Quoi)]} if {! [info exists TabAffy($FichierACharger,EstCharge)]} {set TabAffy($FichierACharger,EstCharge) 0} if {$Quoi=="Decharge"} { DechargeLesInfosAffymetrix $FichierACharger return "" } if { [info exists TabAffy($FichierACharger,EstVide)]} {return ""} if { [info exists TabAffy($Quoi)]} {return [set TabAffy($Quoi)]} ###################CHARGE le Fichier avec les InfosAffymetrix######################### if {! [info exists TabAffy($FichierACharger,EstCharge)] || [set TabAffy($FichierACharger,EstCharge)]=="0"} { set TabAffy($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeLesInfosAffymetrix TabAffy $FichierACharger] if {$ResultatCharge != ""} { set TabAffy($FichierACharger,EstVide) 1 return "" } } if {! [info exists TabAffy($Quoi)]} {return ""} return [set TabAffy($Quoi)] } proc InterrogeLesInfosDesARPs {args} { Wup "Permet de questionner les infos des oligos contenues dans le fichier pour excel" Wup "Voir aussi decharge et charge" global LesInfosDesARPs #Arguments: ########### #$Access - Rend 1 si on le possede # Access Definition - Rend la definition de la proteine # Access Organisme - Rend le ou les organismes de la proteine # Access Taxon - Rend le ou les taxons de la proteine # Access Categorie - Rend la categorie theorique de la sequence (basee sur l alignement) #$Categorie LesAccess - Rend les access presents de la categorie #$Categorie LesTaxons - Rend les Taxons presents de la categorie #LesIDs - Rend les IDs references #LesAccess - Rend les access references #LesCategories - Rend les categories if {$args == "unset"} { if {[info exists LesInfosDesARPs]} {array unset LesInfosDesARPs} return "" } set Quoi [join $args ","] if {[info exists LesInfosDesARPs($Quoi)]} {return [set LesInfosDesARPs($Quoi)]} #set FichierACharger [lindex $args 0] set RepARP "[RepARPAnno]" set FichierACharger "$RepARP/ListeAccessDesARPs" set FichierACharger "$RepARP/ListeAccessDesARPs_Def_Org" set FichierACharger "$RepARP/ListeAccessDesARPs_Id_Def_Org" if {! [info exists LesInfosDesARPs($FichierACharger,EstCharge)]} {set LesInfosDesARPs($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeLesInfosDesARPs $FichierACharger return "" } if { [info exists LesInfosDesARPs($FichierACharger,EstVide)]} {return ""} if { [info exists LesInfosDesARPs($Quoi)]} {return [set LesInfosDesARPs($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists LesInfosDesARPs($FichierACharger,EstCharge)] || [set LesInfosDesARPs($FichierACharger,EstCharge)]=="0"} { set LesInfosDesARPs($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeLesInfosDesARPs LesInfosDesARPs $FichierACharger] if {$ResultatCharge != ""} { set LesInfosDesARPs($FichierACharger,EstVide) 1 return "" } } if {![info exists LesInfosDesARPs($Quoi)]} {return ""} return [set LesInfosDesARPs($Quoi)] } proc InterrogeLesInfosDesProtsDonnees {args} { Wup "Permet de questionner les infos des oligos contenues dans le fichier pour excel" Wup "Voir aussi decharge et charge" global LesInfosDesProtsDonnees #Arguments: ########### #$Access - Rend 1 si on le possede # Access Definition - Rend la definition de la proteine # Access Organisme - Rend le ou les organismes de la proteine # Access Taxon - Rend le ou les taxons de la proteine # Access Categorie - Rend la categorie theorique de la sequence (basee sur l alignement) #$Categorie LesAccess - Rend les access presents de la categorie #$Categorie LesTaxons - Rend les Taxons presents de la categorie #LesAccess - Rend les access references #LesCategories - Rend les categories if {$args == "unset"} { if {[info exists LesInfosDesProtsDonnees]} {array unset LesInfosDesProtsDonnees} return "" } set Quoi [join $args ","] if {[info exists LesInfosDesProtsDonnees($Quoi)]} {return [set LesInfosDesProtsDonnees($Quoi)]} set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { set FichierACharger "[RepertoireDuGenome]/LesAccess_Def_Org" #Espionne "Pas de fichier par defaut ChargeLesInfosDesProtsDonnees" set args [linsert $args 0 $FichierACharger] set Quoi [join $args ","] } if {! [info exists LesInfosDesProtsDonnees($FichierACharger,EstCharge)]} {set LesInfosDesProtsDonnees($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DehargeLesInfosDesProtsDonnees $FichierACharger return "" } if { [info exists LesInfosDesProtsDonnees($FichierACharger,EstVide)]} {return ""} if { [info exists LesInfosDesProtsDonnees($Quoi)]} {return [set LesInfosDesProtsDonnees($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists LesInfosDesProtsDonnees($FichierACharger,EstCharge)] || [set LesInfosDesProtsDonnees($FichierACharger,EstCharge)]=="0"} { set LesInfosDesProtsDonnees($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeLesInfosDesProtsDonnees LesInfosDesProtsDonnees $FichierACharger] if {$ResultatCharge != ""} { set LesInfosDesProtsDonnees($FichierACharger,EstVide) 1 return "" } } if {![info exists LesInfosDesProtsDonnees($Quoi)]} {return ""} return [set LesInfosDesProtsDonnees($Quoi)] } proc InterrogeLesInfosICDS {args} { Wup "Permet de questionner les Infos des sequences de M.smegmatis" Wup "Voir aussi decharge et charge" global TabICDS #Arguments: ########### #Access est la combinaison du nom de 2 boites Gscope ex: MS00756(Acc1) et MS00758(Acc2) MS00756MS00758 #$Access Acc1 -- 1er access du couple #$Access Acc2 -- 2em access du couple #$Access D1 -- Debut de la premiere zone de PCR #$Access F1 -- Fin de la premiere zone de PCR #$Access D2 -- Debut de la deuxieme zone de PCR #$Access F2 -- Fin de la deuxieme zone de PCR if {$args == "unset"} { if {[info exists TabICDS]} {array unset TabICDS} return "" } set Quoi [join $args ","] if { [info exists TabICDS($Quoi)]} {return [set TabICDS($Quoi)]} if {! [info exists TabICDS(EstCharge)]} {set TabICDS(EstCharge) 0} if {$Quoi=="Decharge"} { DechargeLesInfosICDS return "" } if { [info exists TabICDS(EstVide)]} {return ""} if { [info exists TabICDS($Quoi)]} {return [set TabICDS($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists TabICDS(EstCharge)] || [set TabICDS(EstCharge)]=="0"} { set TabICDS(EstCharge) 1 set ResultatCharge [ChargeLesInfosICDS TabICDS] if {$ResultatCharge != ""} { set TabICDS(EstVide) 1 return "" } } if {! [info exists TabICDS($Quoi)]} {return ""} return [set TabICDS($Quoi)] } proc InterrogeLesInfosUMCU {args} { Wup "Permet de questionner les infos des puces UMCU" Wup "Base sur le fichier .txt qui contient les infos" global InfoUMCU #Arguments: ########### #$Fichier $MetaRow $MetaColumn $Row $Column DATAFIELD - Rend l info du DATAFIELD pour la position demandee # Fichier LesAccess - Liste de tous les access de sequences sur la puce UMCU # Fichier LesAccRefSeq - Liste des access RefSeq sur la puce UMCU # Fichier LesAccGenbank - Liste des access Genbank sur la puce UMCU if {$args == "unset"} { if {[info exists InfoUMCU]} {array unset InfoUMCU} return "" } set Quoi [join $args ","] if {[info exists InfoUMCU($Quoi)]} {return [set InfoUMCU($Quoi)]} set FichierACharger [lindex $args 0] if {[info exists InfoUMCU($FichierACharger,EstVide)]} {return ""} if {$Quoi=="$FichierACharger,Decharge"} { DechargeInfoUMCU $FichierACharger return "" } ###################CHARGE le Fichier avec les UMCU######################### if {! [info exists InfoUMCU($FichierACharger,EstCharge)]} { set InfoUMCU($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeInfoUMCU InfoUMCU $FichierACharger] if {$ResultatCharge != ""} { set InfoUMCU($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoUMCU($Quoi)]} {return ""} return [set InfoUMCU($Quoi)] } proc InterrogeLesOligosPourExcel {args} { Wup "Permet de questionner les infos des oligos contenues dans le fichier pour excel" Wup "Voir aussi decharge et charge" global InfoPourExcel #Arguments: ########### #$FichierOligosPourExcel LesAccess - LesAccess de references # FichierOligosPourExcel LesAccessGScope - LesAccess de gscope if {$args == "unset"} { if {[info exists InfoPourExcel]} {array unset InfoPourExcel} return "" } set Quoi [join $args ","] if {[info exists InfoPourExcel($Quoi)]} {return [set InfoPourExcel($Quoi)]} set FichierACharger [lindex $args 0] if {! [info exists InfoPourExcel($FichierACharger,EstCharge)]} {set InfoPourExcel($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeInfoDeOligo $FichierACharger return "" } if { [info exists InfoPourExcel($FichierACharger,EstVide)]} {return ""} if { [info exists InfoPourExcel($Quoi)]} {return [set InfoPourExcel($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### if {! [info exists InfoPourExcel($FichierACharger,EstCharge)] || [set InfoPourExcel($FichierACharger,EstCharge)]=="0"} { set InfoPourExcel($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeLesOligosPourExcel InfoPourExcel $FichierACharger] if {$ResultatCharge != ""} { set InfoPourExcel($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoPourExcel($Quoi)]} {return ""} return [set InfoPourExcel($Quoi)] } proc InterrogeLesRedondants {{Qui ""} {Quoi ""}} { global InterrogeLesRedondants if {[info exists InterrogeLesRedondants($Qui,$Quoi)]} {return $InterrogeLesRedondants($Qui,$Quoi)} if {[info exists InterrogeLesRedondants("EstCharge")]} {return ""} set InterrogeLesRedondants("EstCharge") 1 set File "/genomics/link/SpliRetMouse/database/LaRefEtLesAccessRedondants" foreach Ligne [LesLignesDuFichier $File] { set LesAccess [split $Ligne " "] set nbacc [llength $LesAccess] set Ref [lindex $LesAccess 0] for {set i 1} {$i < $nbacc} {incr i} { lappend InterrogeLesRedondants($Ref,LesRedond) [lindex $LesAccess $i] set InterrogeLesRedondants([lindex $LesAccess $i],LaRef) $Ref } } return [InterrogeLesRedondants $Qui $Quoi] } proc InterrogeLesResidusDesARPs {args} { Wup "Permet de questionner les residus caracteristiques des differentes sous familles d ARP" Wup "Voir aussi decharge et charge" global LesResidusDesARPs #Arguments: ########### #Les residus sont indexes en fonction de la famille d ARP a laquelle il appartient. #Pour acceder au residus il faut connaitre sa position (ieme residu) dans ls liste des residus de cette famille. #on peut alors avoir access au residu et a sa position #LesFamilles - Liste des familles presentes (ARP1, ARP2 ...) #$Famille LesGroupes - Rend pour la famille les groupes existants #$Famille Groupe $Groupe LesResidus - Rend pour LeGroupe voulu les Numeros de residus groupes #$Famille Lesi - Les numeros (rang) de residus #$Famille $i Residu - La valeur du residu pour un rang #$Famille $i Pos - La position du residu pour un rang #$Famille $AccessDeRef LesPositions - Rend les position des residus a chercher if {$args == "unset"} { if {[info exists LesResidusDesARPs]} {array unset LesResidusDesARPs} return "" } set Quoi [join $args ","] if {[info exists LesResidusDesARPs($Quoi)]} {return [set LesResidusDesARPs($Quoi)]} if {! [info exists LesResidusDesARPs(EstCharge)]} {set LesResidusDesARPs(EstCharge) 0} if {$Quoi=="Decharge"} { #Espionne "Decharge $FichierACharger" DechargeLesResidusDesARPs $FichierACharger return "" } if { [info exists LesResidusDesARPs(EstVide)]} {return ""} if { [info exists LesResidusDesARPs($Quoi)]} {return [set LesResidusDesARPs($Quoi)]} ###################CHARGE le Fichier avec les residus des ARPs######################### if {! [info exists LesResidusDesARPs(EstCharge)] || [set LesResidusDesARPs(EstCharge)]=="0"} { set LesResidusDesARPs(EstCharge) 1 set ResultatCharge [ChargeLesResidusDesARPs LesResidusDesARPs] if {$ResultatCharge != ""} { set LesResidusDesARPs(EstVide) 1 return "" } } if {![info exists LesResidusDesARPs($Quoi)]} {return ""} return [set LesResidusDesARPs($Quoi)] } proc InterrogeLibrariesRepeatMasker {args} { global TableauLibrariesRepeatMasker #LesOrganismes #LesLibraries #Librarie $Librarie LesOrganismes #Organisme $Organisme LesLibraries if {$args == "unset"} { if {[info exists TableauLibrariesRepeatMasker]} {unset TableauLibrariesRepeatMasker} return } set Quoi [join $args ","] if {[info exists TableauLibrariesRepeatMasker($Quoi) ]} {return [set TableauLibrariesRepeatMasker($Quoi)]} if {[info exists TableauLibrariesRepeatMasker(EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauLibrariesRepeatMasker(EstCharge) 1 ChargeLibrariesRepeatMasker TableauLibrariesRepeatMasker if {[info exists TableauLibrariesRepeatMasker($Quoi)]} {return [set TableauLibrariesRepeatMasker($Quoi)]} return } proc InterrogeListTau {{Qui ""} {Quoi ""}} { global InterrogeListTau if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists InterrogeListTau($Qui,$Quoi)]} {return $InterrogeListTau($Qui,$Quoi)} if {[info exists InterrogeListTau("EstCharge")]} {return ""} set InterrogeListTau("EstCharge") 1 set Fichier "/genomics/link/Tau/Dec2008/GSTRdCVF/versionfinaletableau031208_GST-RdCVFL.csv" #set Fichier "/genomics/link/Tau/Publi/Tableau010408Csv.csv" set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { set LesMots [split $Ligne ";"] if {[regexp "^function" $Ligne] || [regexp "^Protein" $Ligne]} { set LesHeaders $LesMots set InterrogeListTau(ListOf,headers) $LesHeaders continue } #set function [lindex $LesMots 0] #set Name [lindex $LesMots 1] #set GI [lindex [split [lindex $LesMots 2] "|"] 1] set Name [lindex $LesMots 1] set function [lindex $LesMots 2] set GI [lindex $LesMots 3] lappend InterrogeListTau(ListOf,GI) $GI set InterrogeListTau($GI,function) $function set InterrogeListTau($GI,Name) $Name } return [InterrogeListTau $Qui $Quoi] } proc InterrogeListTauControl {{Qui ""} {Quoi ""}} { global InterrogeListTauControl if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists InterrogeListTauControl($Qui,$Quoi)]} {return $InterrogeListTauControl($Qui,$Quoi)} if {[info exists InterrogeListTauControl("EstCharge")]} {return ""} set InterrogeListTauControl("EstCharge") 1 set Fichier "/genomics/link/Tau/Dec2008/GSTControl/versionfinaletableau031208_GST.csv" #set Fichier "/genomics/link/Tau/GSTControl/GST_interacting_proteins_laetitia.csv" set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { set LesMots [split $Ligne ";"] if {[regexp "^Protein" $Ligne]} { set LesHeaders $LesMots set InterrogeListTauControl(ListOf,headers) $LesHeaders continue } #set ProteinName [lindex $LesMots 0] #set GI [lindex [split [lindex $LesMots 1] "|"] 1] set ProteinName [lindex $LesMots 1] set GI [lindex [split [lindex $LesMots 2] "|"] 1] lappend InterrogeListTauControl(ListOf,GI) $GI set InterrogeListTauControl($GI,ProteinName) $ProteinName } return [InterrogeListTauControl $Qui $Quoi] } proc InterrogeLocalisation {args} { global TableauLocalisationDesPAB #unset #$File Chromosome $Chrom LesNoms #$File Contig $Cont LesNoms #$File Chromosome $Chrom $Nom #$File LesNoms #$File Nom $Nom ##Out Detail d'une localisation => Liste avec comme elements : #0:Nom #1:InfoLocalisation #2:ExpectDeRef #3:Expect #4:ScoreDeRef #5:Score #6:PId #7:DQ #8:FQ #9:Chrom #10:DSurChr #11:FSurChr #12:SensSurChr #13:Contig #14:Fragment #15:DSurCont #16:FSurCont #17:OrientationSurCont #18:SensSurCont #19:BandesCyto #20:Info (BestPolyLoc BestLoc) #21:source ( "" = sequence initiale ; prottfa = proteine de reference ; mrnatfa_Homo_sapiens = meilleur mRNA humain trouve if {$args == "unset"} { if {[info exists TableauLocalisationDesPAB]} {unset TableauLocalisationDesPAB} return } set Quoi [join $args ","] if {[info exists TableauLocalisationDesPAB($Quoi)]} { return [set TableauLocalisationDesPAB($Quoi)] } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauLocalisationDesPAB($File,EstCharge)]} {return} ###################CHARGE Localisation des boites sur genome######################### set TableauLocalisationDesPAB($File,EstCharge) 1 ChargeFichierLocalisation TableauLocalisationDesPAB $File if {[info exists TableauLocalisationDesPAB($Quoi)]} { return [set TableauLocalisationDesPAB($Quoi)] } return } proc InterrogeMAIA {args} { Wup "Permet de questionner les infos MAIA" Wup "Base sur le fichier .gal qui contient la position sur la plaque des sondes" global InfoMAIA ############################## #GPR FILE is BLOCK ROW COLUMN# ############################## #Arguments: ########### #Quelques exemples toujours dispo #Quoi - Liste de tout ce qui interrogeable #ATF - Version du Axon Text File format #LesDataFields - Nom des colonnes de donnees #NDataFields - Nb de colonne de donnee #NbBlock - Nombre de block #NbColumn - Nombre de colonne #NbRow - Nombre de ligne #NMaxOptionalHeader - Nombre maximum de ligne dans le header if {$args == "unset"} { if {[info exists InfoMAIA]} {array unset InfoMAIA} return "" } set Quoi [join $args ","] if {[info exists InfoMAIA($Quoi)]} {return [set InfoMAIA($Quoi)]} set FichierACharger [lindex $args 0] if {[info exists InfoMAIA($FichierACharger,EstVide)]} {return ""} if {$Quoi=="$FichierACharger,Decharge"} { DechargeInfoMAIA $FichierACharger return "" } ###################CHARGE le Fichier avec les MAIA######################### if {! [info exists InfoMAIA($FichierACharger,EstCharge)]} { set InfoMAIA($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeInfoMAIA InfoMAIA $FichierACharger] if {$ResultatCharge != ""} { set InfoMAIA($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoMAIA($Quoi)]} {return ""} return [set InfoMAIA($Quoi)] } proc InterrogeMesKEGG {args} { #unset #Type = EC ou Pathway ou Kegg #Id == access from EC ou Pathway ou Kegg #LesNoms #LesPathway #LesEC #LesKegg #LesPathwayEtKeggEtEC #$Nom LesPathwayEtKeggEtEC #$Nom LesPathway #$Nom LesEC #$Nom LesKegg #$Type $Id LesNoms #$Type $Id Definition global TableauInterrogationDeMesKEGG if {$args == "unset"} { if {[info exists TableauInterrogationDeMesKEGG]} {unset TableauInterrogationDeMesKEGG} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationDeMesKEGG($Quoi) ]} {return [set TableauInterrogationDeMesKEGG($Quoi)]} if {[info exists TableauInterrogationDeMesKEGG(EstCharge)]} {return} ###################CHARGE Pathway######################### ChargeMesKEGG TableauInterrogationDeMesKEGG set TableauInterrogationDeMesKEGG(EstCharge) 1 if {![info exists TableauInterrogationDeMesKEGG($Quoi)]} {return} return [set TableauInterrogationDeMesKEGG($Quoi)] } proc InterrogeMesOMIM {args} { global TableauFichierMesOMIM #LesOMIM #LesNoms #OMIM $OMIM LesNoms #OMIM $OMIM Definition #$Nom LesOMIM if {$args == "unset"} { if {[info exists TableauFichierMesOMIM]} {unset TableauFichierMesOMIM} return "" } set Quoi [join $args ","] if {[info exists TableauFichierMesOMIM($Quoi)]} {return [set TableauFichierMesOMIM($Quoi)]} if {[info exists TableauFichierMesOMIM(EstCharge)]} {return} ###################CHARGE Mes OMIM######################### set TableauFichierMesOMIM(EstCharge) 1 Espionne "MesOMIM is loading ..." ChargeMesOMIM TableauFichierMesOMIM Espionne "MesOMIM is loaded" if {[info exists TableauFichierMesOMIM($Quoi)]} {return [set TableauFichierMesOMIM($Quoi)]} return } proc InterrogeMesRetNet {args} { global TableauFichierMesRetNet #LesRetNet #LesNoms #RetNet $RetNet LesNoms #RetNet $RetNet Definition #$Nom LesRetNet if {$args == "unset"} { if {[info exists TableauFichierMesRetNet]} {unset TableauFichierMesRetNet} return "" } set Quoi [join $args ","] if {[info exists TableauFichierMesRetNet($Quoi)]} {return [set TableauFichierMesRetNet($Quoi)]} if {[info exists TableauFichierMesRetNet(EstCharge)]} {return} ###################CHARGE Mes RetNet######################### set TableauFichierMesRetNet(EstCharge) 1 Espionne "MesRetNet is loading ..." ChargeMesRetNet TableauFichierMesRetNet Espionne "MesRetNet is loaded" if {[info exists TableauFichierMesRetNet($Quoi)]} {return [set TableauFichierMesRetNet($Quoi)]} return } proc InterrogeMouseUbiquitin {Qui Quoi} { global InterrogeMouseUbiquitin if {$Quoi==""} { set Quoi Ubi} if {[info exists InterrogeMouseUbiquitin($Qui,$Quoi)]} { return $InterrogeMouseUbiquitin($Qui,$Quoi) } if {[info exists InterrogeMouseUbiquitin("EstCharge")]} { return "" } set InterrogeMouseUbiquitin("EstCharge") 1 set File "/genomics/link/FLD/Input/UbiquitinMouseStringId" foreach Ligne [LesLignesDuFichier $File] { set IdString [string trim $Ligne] set InterrogeMouseUbiquitin($IdString,Ubi) "YES" } return [InterrogeMouseUbiquitin $Qui $Quoi] } proc InterrogeNames {{Qui ""} {Quoi ""} {Org ""}} { #Name contient la ref global InterrogeNames if {$Qui == "Reset"} { if {[info exists InterrogeNames]} { unset InterrogeNames } return "" } if {[info exists InterrogeNames($Qui,$Quoi,$Org)]} {return $InterrogeNames($Qui,$Quoi,$Org)} if {[info exists InterrogeNames("EstCharge",$Org)]} {return ""} set InterrogeNames("EstCharge",$Org) 1 if {$Org=="Mouse"} { set LesRepertoires [LesRepertoires "Mouse" "Mod"] } if {$Org=="Rat"} { set LesRepertoires [LesRepertoires "Rat" "Mod"] } if {$Org=="SpliRet"} { set RepertoireSourisTfactor "[RepertoireDuGenome]/FichiersInitial/SOURIS_Tfactor" set LesRepertoires [list $RepertoireSourisTfactor] } foreach Repertoire $LesRepertoires { foreach File [glob -nocomplain "$Repertoire/*"] { set Cluster [file tail $File] regsub {\.[^\.]+$} $Cluster "" Cluster lappend InterrogeNames(ListOf,Cluster,$Org) $Cluster set LesAccess [LaSequenceDuTFAs $File "LaListeDesAccess" ] foreach Name $LesAccess { lappend InterrogeNames($Cluster,Name,$Org) $Name lappend InterrogeNames($Name,Cluster,$Org) $Cluster } } } return [InterrogeNames $Qui $Quoi $Org] } proc InterrogeOMIM {args} { global TableauFichierOMIM #LesOMIM #OMIM $OMIM LesInfos ###Details### ##LesInfos est une liste de liste dont chaque element est une des localisations#### ###Chaque Localisation est une liste dont les elements sont : #index 0 : OMIM number #index 1 : Chromosome #index 2 : Liste contennant la borne min et max sur le chromosome #index 3 : la localisation non-traitee donnee par OMIM #index 4 : MapEntry number #index 5 : Liste contennant les GeneName #index 6 : le status de ces Gene #index 7 : liste contennant Les methodes utilisees pour le mapping #index 8 : Commentaires #index 9 : Titre du OMIM #index 10: liste contennant Les desordres occasionnees (maladies) #index 11: liste contennant les equivalents murins #index 12: Reference #index 13: Liste contennant la date jour mois puis annee if {$args == "unset"} { if {[info exists TableauFichierOMIM]} {unset TableauFichierOMIM} return "" } set Quoi [join $args ","] if {[info exists TableauFichierOMIM($Quoi)]} {return [set TableauFichierOMIM($Quoi)]} if {[info exists TableauFichierOMIM(EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauFichierOMIM(EstCharge) 1 Espionne "OMIM is loading ..." ChargeOMIM TableauFichierOMIM Espionne "OMIM is loaded" if {[info exists TableauFichierOMIM($Quoi)]} {return [set TableauFichierOMIM($Quoi)]} return } proc InterrogeOrf2Cluster2Access2Def2Expression {args} { global TableauOrf2Cluster2Access2Def2Expression if {$args == "unset"} { if {[info exists TableauOrf2Cluster2Access2Def2Expression]} { unset TableauOrf2Cluster2Access2Def2Expression } return "" } set Quoi [join $args ","] if {[info exists TableauOrf2Cluster2Access2Def2Expression($Quoi)]} { if {![regexp "LesExpressions" $Quoi]} { return [ElimineLesRedondancesDansUneListe [set TableauOrf2Cluster2Access2Def2Expression($Quoi)]] } else { return [set TableauOrf2Cluster2Access2Def2Expression($Quoi)] } } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauOrf2Cluster2Access2Def2Expression($File,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauOrf2Cluster2Access2Def2Expression($File,EstCharge) 1 ChargeOrf2Cluster2Access2Def2Expression TableauOrf2Cluster2Access2Def2Expression $File if {[info exists TableauOrf2Cluster2Access2Def2Expression($Quoi)]} { if {![regexp "LesExpressions" $Quoi]} { return [ElimineLesRedondancesDansUneListe [set TableauOrf2Cluster2Access2Def2Expression($Quoi)]] } else { return [set TableauOrf2Cluster2Access2Def2Expression($Quoi)] } } return } proc InterrogeOriginalAnnotAffymetrix {args} { Wup "Permet de questionner les infos de la puce Affymetrix UG133A 2.0" Wup "Voir aussi decharge et charge" global OriAnnotAffy #Arguments: ########### #Index est le numero unique attribue en fonction de la ligne dans le fichier affymetrix #Pour faire la correspondance entre les deux #ListOfProbeSet - Liste des ProbeSet disponibles #$Index RefSeq - Access RefSeq si il existe #$AccRefSeq Index - Index du RefSeq #$IndexOuAccRefSeq Probe_Set_Name - Nom du Probe Set (11 references) peut etre une liste # IndexOuAccRefSeq Description - Description # IndexOuAccRefSeq Sequence_Type - # IndexOuAccRefSeq repAccession - Access de la sequence utilisee # IndexOuAccRefSeq GeneName - Nom du gene # IndexOuAccRefSeq Product - # IndexOuAccRefSeq subcluster - Cluster Unigene # IndexOuAccRefSeq fullLengths - Les access des sequences completes if {$args == "unset"} { if {[info exists OriAnnotAffy]} {array unset OriAnnotAffy} return "" } set FichierACharger [lindex $args 0] if {! [file exists "$FichierACharger"]} { #Mouse430_2_annot.txt #HG-U133_Plus_2_annot.txt #CE FICHIER EST TELECHARGER DU SITE AFFYMETRIX .csv ET TRANSFORME EN Tab Delimited File set RepAffy "[Affymetrix_Dir]" #Mouse430_2_original_annot.txt set FichierACharger "$RepAffy/${FichierACharger}/Annotation/${FichierACharger}_original_annot.txt" if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" return "" } } set Quoi [join [concat $FichierACharger [lrange $args 1 end]] ","] #set Quoi [join $args ","] if { [info exists OriAnnotAffy($Quoi)]} {return [set OriAnnotAffy($Quoi)]} if {! [info exists OriAnnotAffy($FichierACharger,EstCharge)]} {set OriAnnotAffy($FichierACharger,EstCharge) 0} if {$Quoi=="Decharge"} { DechargeOriginalAnnotAffymetrix $FichierACharger return "" } if { [info exists OriAnnotAffy($FichierACharger,EstVide)]} {return ""} if { [info exists OriAnnotAffy($Quoi)]} {return [set OriAnnotAffy($Quoi)]} ###################CHARGE le Fichier avec les InfosAffymetrix######################### if {! [info exists OriAnnotAffy($FichierACharger,EstCharge)] || [set OriAnnotAffy($FichierACharger,EstCharge)]=="0"} { set OriAnnotAffy($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeOriginalAnnotAffymetrix OriAnnotAffy $FichierACharger] if {$ResultatCharge != ""} { set OriAnnotAffy($FichierACharger,EstVide) 1 return "" } } if {! [info exists OriAnnotAffy($Quoi)]} {return ""} return [set OriAnnotAffy($Quoi)] } proc InterrogeOrtholHGU133Plus2 {{Qui ""} {Quoi ""}} { global InterrogeOrtholHGU133Plus2 if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists InterrogeOrtholHGU133Plus2($Qui,$Quoi)]} {return $InterrogeOrtholHGU133Plus2($Qui,$Quoi)} if {[info exists InterrogeOrtholHGU133Plus2("EstCharge")]} {return ""} set InterrogeOrtholHGU133Plus2("EstCharge") 1 set Fichier "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/Chicken.na25.orthologHuman.csv" foreach Ligne [LesLignesDuFichier $Fichier] { set LesMots [split $Ligne ","] if {[regexp "^\"Probe" $Ligne]} { set LesHeaders $LesMots set InterrogeOrtholHGU133Plus2(ListOf,headers) $LesHeaders continue } set PsPoulet [lindex $LesMots 0] regsub -all "\"" $PsPoulet "" PsPoulet set PucePoulet [lindex $LesMots 1] regsub -all "\"" $PucePoulet "" PucePoulet set PsOrthol [lindex $LesMots 2] regsub -all "\"" $PsOrthol "" PsOrthol set PuceOrthol [lindex $LesMots 3] regsub -all "\"" $PuceOrthol "" PuceOrthol lappend InterrogeOrtholHGU133Plus2($PsPoulet,PsOrthol) $PsOrthol } return [InterrogeOrtholHGU133Plus2 $Qui $Quoi] } proc InterrogePathway {args} { #$Fichier Pathway #$Fichier Organisme #$Fichier LesDefinitions #$Fichier LesCoordonnees #$Fichier LesCompound #$Fichier LesKegg #$Fichier Forme $Forme XMin $XMin YMin $YMin XMax $XMax YMax $YMax LesConcernes global TableauInterrogationPathway if {$args == "unset"} { if {[info exists TableauInterrogationPathway]} {unset TableauInterrogationPathway} return "" } set FichierPathway [lindex $args 0] if {![file exists $FichierPathway]} {return} set Quoi [join $args ","] if {[info exists TableauInterrogationPathway($Quoi)]} {return [set TableauInterrogationPathway($Quoi)]} if {[info exists TableauInterrogationPathway($FichierPathway,EstCharge)]} {return} ###################CHARGE Pathway######################### ChargePathway TableauInterrogationPathway $FichierPathway set TableauInterrogationPathway($FichierPathway,EstCharge) 1 if {![info exists TableauInterrogationPathway($Quoi)]} {return} return [set TableauInterrogationPathway($Quoi)] } proc InterrogePathways {args} { global TabPathways #$Fichier $Nom LesPathways if {$args == "unset"} { if {[info exists TabPathways]} {unset TabPathways} return "" } set File [lindex $args 0] set Quoi [join $args ","] if {[info exists TabPathways($Quoi)]} {return [set TabPathways($Quoi)]} if {[info exists TabPathways($File,EstCharge)]} {Espionne "estcharge !";return} set FichierACharger [lindex $args 0] ################### CHARGE #################### set TabPathways(EstCharge) 1 ChargeFichierPathways TabPathways $FichierACharger if {[info exists TabPathways($Quoi)]} {return [set TabPathways($Quoi)]} return } proc InterrogePfamDesFrom1500 {{Qui ""} {Quoi ""}} { global InterrogePfamDesFrom1500 if {$Qui==""} { set Qui "ListOf"; set Quoi "Pfam" } if {[info exists InterrogePfamDesFrom1500($Qui,$Quoi)]} {return $InterrogePfamDesFrom1500($Qui,$Quoi)} if {[info exists InterrogePfamDesFrom1500("EstCharge")]} {return ""} set InterrogePfamDesFrom1500("EstCharge") 1 set File "/genomics/link/SpliRetMouse/BindingPfam/BindingPfamFromDes/PfamDesFrom1500.txt" foreach Ligne [LesLignesDuFichier $File] { set elmts [split $Ligne "\t"] set Pfam [lindex $elmts 0] set Des [lindex $elmts 2] set Des [string trim $Des] lappend InterrogePfamDesFrom1500(ListOf,Pfam) $Pfam set InterrogePfamDesFrom1500($Pfam,Des) $Des set InterrogePfamDesFrom1500($Des,Pfam) $Pfam } return [InterrogePfamDesFrom1500 $Qui $Quoi] } proc InterrogePopulationDesClustersCorresAuProfilParticulier {Cluster ASoft CSoft} { #pour linstant ne marche qu'avec lexp 2 #AnalysisSoftware: RMA or dChip #ClusteringSoftware: ClustKMTMEV ClustKMFASABI ClustMMFASABI global InterrogePopulationDesClustersCorresAuProfilParticulier if {$CSoft=="K-Means cluster method from TMEV (TIGR MultiExperiment Viewer(MeV))"} {set CSoft "ClustKMTMEV"} if {$CSoft=="K-Means cluster method from FASABI"} {set CSoft "ClustKMFASABI"} if {$CSoft=="MixtureModel clustering method from FASABI"} {set CSoft "ClustMMFASABI"} if {$Cluster=="reset"} { catch {unset InterrogePopulationDesClustersCorresAuProfilParticulier} return "" } if {[info exists InterrogePopulationDesClustersCorresAuProfilParticulier($Cluster,$ASoft,$CSoft)]} { return $InterrogePopulationDesClustersCorresAuProfilParticulier($Cluster,$ASoft,$CSoft) } set FichierExp2RMA "[RepertoireDuGenome]/transcriptomique/ConeSpe/PopulationClustAcProfilParticulierExp2RMA" set FichierExp2dChip "[RepertoireDuGenome]/transcriptomique/ConeSpe/PopulationClustAcProfilParticulierExp2dChip" foreach LigneRMA [LesLignesDuFichier $FichierExp2RMA] { set LesElmtsRMA [split $LigneRMA " "] set CS [lindex $LesElmtsRMA 0] set Cl [lindex $LesElmtsRMA 1] set Nb [lindex $LesElmtsRMA 2] regsub {\(} $Nb "" Nb regsub {\)} $Nb "" Nb set InterrogePopulationDesClustersCorresAuProfilParticulier($Cl,RMA,$CS) $Nb } foreach LignedChip [LesLignesDuFichier $FichierExp2dChip] { set LesElmtsdChip [split $LignedChip " "] set CS [lindex $LesElmtsdChip 0] set Cl [lindex $LesElmtsdChip 1] set Nb [lindex $LesElmtsdChip 2] regsub {\(} $Nb "" Nb regsub {\)} $Nb "" Nb set InterrogePopulationDesClustersCorresAuProfilParticulier($Cl,dChip,$CS) $Nb } return [InterrogePopulationDesClustersCorresAuProfilParticulier $Cluster $ASoft $CSoft] } proc InterrogeProtAndContigChoisis {args} { global TableauInterrogationProtAndContigChoisis #$Nom ProteineChoisie Access #$Nom ContigChoisi Access #$Nom SeqChoisie #$Nom InfoSeqChoisie #$Nom OrganismeChoisi if {$args == "unset"} { if {[info exists TableauInterrogationProtAndContigChoisis]} {unset TableauInterrogationProtAndContigChoisis} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationProtAndContigChoisis($Quoi)]} { return [set TableauInterrogationProtAndContigChoisis($Quoi)] } set FichierProtEtDesContigsChoisis "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesContigsChoisis" ###################CHARGE ProtAndContig######################### if { [file exists $FichierProtEtDesContigsChoisis] && ![info exists TableauInterrogationProtAndContigChoisis($FichierProtEtDesContigsChoisis,EstCharge)]} { set TableauInterrogationProtAndContigChoisis($FichierProtEtDesContigsChoisis,EstCharge) 1 ChargeProtEtContigChoisis TableauInterrogationProtAndContigChoisis $FichierProtEtDesContigsChoisis } if {![info exists TableauInterrogationProtAndContigChoisis($Quoi)]} {return} return [set TableauInterrogationProtAndContigChoisis($Quoi)] } proc InterrogeProtAndmRNA {args} { global TableauInterrogationProtAndmRNA #$Nom Taille #$Nom Masking #$Nom ReMasking #$Nom MRM #$Nom Rang $Rang Type #$Nom Rang $Rang LesmRNAs #$Nom Rang $Rang LesProteines #$Nom Rang $Rang LesAccessEquivalents #$Nom Rang $Rang LesAccessAbsentsDuBlast #$Nom Rang $Rang LesProteinesAbsentesDuBlast #$Nom Rang $Rang LesmRNAsAbsentesDuBlast #$Nom Rang $Rang BanqueId #$Nom Rang $Rang Access #$Nom Access $Access LesRangs #$Nom Rang $Rang Definition #$Nom Rang $Rang Organism #$Nom Rang $Rang Taille #$Nom Rang $Rang NbElementsDeLaQuery DansLAlignement #$Nom Rang $Rang NbElementsDeLaQuery DansLAlignement #$Nom Rang $Rang NbElementsDeLaQuery DansLe5UTR #$Nom Rang $Rang NbElementsDeLaQuery DansLeCDS #$Nom Rang $Rang NbElementsDeLaQuery DansLe3UTR #$Nom Rang $Rang Expect #$Nom Rang $Rang Score #$Nom Rang $Rang Id #$Nom Rang $Rang LesWarning #$Nom LesRangs if {$args == "unset"} { if {[info exists TableauInterrogationProtAndmRNA]} {unset TableauInterrogationProtAndmRNA} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationProtAndmRNA($Quoi)]} { return [set TableauInterrogationProtAndmRNA($Quoi)] } set Nom [lindex $args 0] set File "[RepertoireDuGenome]/ProtAndmRNA/$Nom" ###################CHARGE ProtAndmRNA######################### if { [file exists $File] && ![info exists TableauInterrogationProtAndmRNA($File,EstCharge)]} { set TableauInterrogationProtAndmRNA($File,EstCharge) 1 ChargeProtAndmRNA TableauInterrogationProtAndmRNA $File } if {![info exists TableauInterrogationProtAndmRNA($Quoi)]} {return} return [set TableauInterrogationProtAndmRNA($Quoi)] } proc InterrogeProtAndmRNAChoisis {args} { global TableauInterrogationProtAndmRNAChoisis #$Nom ProteineChoisie Access #$Nom mRNAChoisi Access #$Nom SeqChoisie #$Nom InfoSeqChoisie #$Nom OrganismeChoisi if {$args == "unset"} { if {[info exists TableauInterrogationProtAndmRNAChoisis]} {unset TableauInterrogationProtAndmRNAChoisis} return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationProtAndmRNAChoisis($Quoi)]} { return [set TableauInterrogationProtAndmRNAChoisis($Quoi)] } set FichierProtEtDesmRNAsChoisis "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" ###################CHARGE ProtAndmRNA######################### if { [file exists $FichierProtEtDesmRNAsChoisis] && ![info exists TableauInterrogationProtAndmRNAChoisis($FichierProtEtDesmRNAsChoisis,EstCharge)]} { set TableauInterrogationProtAndmRNAChoisis($FichierProtEtDesmRNAsChoisis,EstCharge) 1 ChargeProtEtmRNAChoisis TableauInterrogationProtAndmRNAChoisis $FichierProtEtDesmRNAsChoisis } if {![info exists TableauInterrogationProtAndmRNAChoisis($Quoi)]} {return} return [set TableauInterrogationProtAndmRNAChoisis($Quoi)] } proc InterrogeProteinesJumelles {args} { #$Fichier $Nom LesProteinesJumelles #$Fichier LesNoms global TableauProteinesJumelles if {$args == "unset"} { if {[info exists TableauProteinesJumelles]} {unset TableauProteinesJumelles} return "" } set Fichier [lindex $args 0] if {![file exists $Fichier]} {return} set Quoi [join $args ","] if {[info exists TableauProteinesJumelles($Quoi)]} {return [set TableauProteinesJumelles($Quoi)]} if {[info exists TableauProteinesJumelles($Fichier,EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauProteinesJumelles($Fichier,EstCharge) 1 ChargeProteinesJumelles $Fichier TableauProteinesJumelles if {[info exists TableauProteinesJumelles($Quoi)]} {return [set TableauProteinesJumelles($Quoi)]} return } proc InterrogeProteinsNamesTable {Qui Quoi} { #interroge la table proteins_names de STRING global InterrogeProteinsNamesTable if {[info exists InterrogeProteinsNamesTable($Qui,$Quoi)]} { return $InterrogeProteinsNamesTable($Qui,$Quoi) } if {[info exists InterrogeProteinsNamesTable("EstCharge")]} { return "" } set InterrogeProteinsNamesTable("EstCharge") 1 CanalSqlString set Sql "select protein_id,species_id from items.proteins_names limit 10000" foreach {ProtId SpeId} [SqlExec $Sql "GetList"] { set InterrogeProteinsNamesTable($ProtId,SpeId) $SpeId } CanalSqlDisconnect return [InterrogeProteinsNamesTable $Qui $Quoi] } proc InterrogeRefPfam {{Qui ""} {Quoi ""}} { #mouse ou rat (selon le cas) de la liste des ProchesQuery85 avec le plus de pfam et la plus longue sequence #NB:essaye de choisir un non initial mais peut être le cas #pour la prochaine fois, prendre celui qui a le plus de pfam et les pfam les plus long global InterrogeRefPfam if {[info exists InterrogeRefPfam($Qui,$Quoi)]} {return $InterrogeRefPfam($Qui,$Quoi)} if {[info exists InterrogeRefPfam("EstCharge")]} {return ""} set InterrogeRefPfam("EstCharge") 1 foreach FileProche [glob -nocomplain "[RepertoireDuGenome]/ProchesQuery85/*"] { array unset Tableau1; array unset Tableau2 set RefPfam "" if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set Org Mouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set Org Rat } else { set Org SpliRet } if {$Org=="SpliRet"} { set Cluster [file tail $FileProche] regsub {\.[^\.]+$} $Cluster "" Cluster set Box [InterrogeBox $Cluster Box] set Ref [ExtraitInfo $Box "Ref"] } else { set Box [file tail $FileProche] regsub {\.[^\.]+$} $Box "" Box set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] } if {$Org=="SpliRet"} { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new"} } else { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} } foreach Name [LesLignesDuFichier $FileProche] { set LesPFAMMacsims {}; set LesPFAMMacsimsClean {} set LesPFAMMacsims [FromMacsims $FileMacsims $Name JustPfam] foreach PFAMMacsims $LesPFAMMacsims { if {[regexp "ERROR" $PFAMMacsims] || [regexp "WARN" $PFAMMacsims]} {continue} lappend LesPFAMMacsimsClean $PFAMMacsims } set nombrePFAMMacsims [llength $LesPFAMMacsimsClean] set LongSeq [string length [FromMacsims $FileMacsims $Name SeqDataSansGap]] lappend Tableau1($LongSeq) $Name lappend Tableau2($nombrePFAMMacsims) $Name set InterrogeRefPfam($Box-$Name,nombrePFAMMacsims) $nombrePFAMMacsims } set LesNombresPfam [array names Tableau2] set LesNombresPfam [lsort -integer -decreasing $LesNombresPfam] set LesLongSeq [array names Tableau1] set LesLongSeq [lsort -integer -decreasing $LesLongSeq] set LesNamesInitial [InterrogeNames $Cluster Name $Org] foreach maxpfam $LesNombresPfam { Espionne "maxpfam $maxpfam" Espionne "$Tableau2($maxpfam)" foreach maxlong $LesLongSeq { Espionne "maxlong $maxlong" Espionne "$Tableau1($maxlong)" set premierefois 1; set NameInitialSelec "" set ListInter [ListsIntersection $Tableau2($maxpfam) $Tableau1($maxlong)] Espionne "ListInter $ListInter" foreach NameSelec $ListInter { set cestuninitial 0 foreach NameInitial $LesNamesInitial { if {$NameInitial==$Ref} {set NameInitial $Box} if {$NameSelec==$NameInitial} { if {$premierefois} { set premierefois 0 set NameInitialSelec $NameSelec } set cestuninitial 1 ; break } } if {$cestuninitial} { continue } set Organism [lindex [split $NameSelec "_"] end] if {$Org=="Mouse"} { if {![regexp -nocase "mouse" $Organism] && ![regexp -nocase "mus" $Organism]} {continue} set RefPfam $NameSelec break } if {$Org=="Rat"} { if {![regexp -nocase "rat" $Organism] && ![regexp -nocase "rattus" $Organism]} {continue} set RefPfam $NameSelec break } } if {$RefPfam=="" && $NameInitialSelec!=""} {set RefPfam $NameInitialSelec} if {$RefPfam!=""} { break } } if {$RefPfam!=""} { break } } if {$RefPfam!=""} { set InterrogeRefPfam($Cluster,RefPfam) $RefPfam set InterrogeRefPfam($Box,RefPfam) $RefPfam } } return [InterrogeRefPfam $Qui $Quoi] } proc InterrogeRefs {{Qui ""} {Quoi ""} {Ou ""}} { #pour une ref, te donne le cluster #pour un cluster, te donne la ref #Ou: "/genomics/link/SpliRetMouse/FichiersModifUnique/RefsDesClusters" global InterrogeRefs if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {$Qui == "Reset"} { if {[info exists InterrogeRefs]} { unset InterrogeRefs } return "" } if {$Ou!=""} { if {[info exists InterrogeRefs(File,Name)] && $Ou!=$InterrogeRefs(File,Name)} { unset InterrogeRefs } set Fichier $Ou } else { if {[info exists InterrogeRefs(File,Name)]} { set Ou $InterrogeRefs(File,Name) set Fichier $Ou } else { FaireLire "Il faut donner un nom de fichier la 1ere fois" return "" } } if {[info exists InterrogeRefs($Qui,$Quoi)]} {return $InterrogeRefs($Qui,$Quoi)} if {[info exists InterrogeRefs("EstCharge")]} {return ""} set InterrogeRefs("EstCharge") 1 set InterrogeRefs(File,Name) $Fichier set LesLignes [LesLignesDuFichier $Fichier] set LesHeaders [list Cluster Ref] set InterrogeRefs(ListOf,headers) $LesHeaders foreach Ligne $LesLignes { set LesMots [split $Ligne " "] set Cluster [lindex $LesMots 0] set Ref [lindex $LesMots 1] set Ref [regsub ">" $Ref ""] set InterrogeRefs($Cluster,Ref) $Ref lappend InterrogeRefs($Ref,Cluster) $Cluster lappend InterrogeRefs(ListOf,Cluster) $Cluster } return [InterrogeRefs $Qui $Quoi] } proc InterrogeRepartitionSurGenome {args} { global TableauFichierRepartitionSurGenome #$Fichier LesChromosomes #$Fichier LesTypesDeRegion #$Fichier LesElements #$Fichier TypeDeRegion $TypeDeRegion LesRegions #$Fichier TypeDeRegion $TypeDeRegion LesChromosomes #$Fichier Element $Element LesRegions #$Fichier LesElements #$Fichier Chromosome $Chromosome LesElements #$Fichier Chromosome $Chromosome LesTypesDeRegion #$Fichier Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Qui Debut #$Fichier Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Qui Fin #$Fichier Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Qui LesElements #$Fichier Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Qui NbElements #$Fichier Chromosome $Chromosome TypeDeRegion $TypeDeRegion Region $Qui Taille #$Fichier TypeDeRegion $TypeDeRegion LesRegions if {$args == "unset"} { if {[info exists TableauFichierRepartitionSurGenome]} {unset TableauFichierRepartitionSurGenome} return "" } set Quoi [join $args ","] if {[info exists TableauFichierRepartitionSurGenome($Quoi)]} { return [set TableauFichierRepartitionSurGenome($Quoi)] } set File [lindex $args 0] if {![file exists $File]} {return} if {[info exists TableauFichierRepartitionSurGenome($File,EstCharge)]} {return} ###################CHARGE FichierRepartitionSurGenome######################### set TableauFichierRepartitionSurGenome($File,EstCharge) 1 Espionne "$File is loading ..." ChargeRepartitionSurGenome TableauFichierRepartitionSurGenome $File Espionne "$File loaded ..." if {[info exists TableauFichierRepartitionSurGenome($Quoi)]} {return [set TableauFichierRepartitionSurGenome($Quoi)]} return } proc InterrogeRetNet {args} { global TableauFichierRetNet #LesRetNet #RetNet $RetNet LesInfos ###Details### ##LesInfos est une liste de liste dont chaque element est une des localisations#### ###Chaque Localisation est une liste dont les elements sont : #index 0 : RetNet ref #index 1 : Chromosome #index 2 : Liste contennant la borne min et max sur le chromosome #index 3 : la localisation non-traitee donnee par RetNet #index 4 : Les autres noms de ce gene #index 5 : Definition if {$args == "unset"} { if {[info exists TableauFichierRetNet]} {unset TableauFichierRetNet} return "" } set Quoi [join $args ","] if {[info exists TableauFichierRetNet($Quoi)]} {return [set TableauFichierRetNet($Quoi)]} if {[info exists TableauFichierRetNet(EstCharge)]} {return} ###################CHARGE FichierExonicMap######################### set TableauFichierRetNet(EstCharge) 1 Espionne "RetNet is loading ..." ChargeRetNet TableauFichierRetNet Espionne "RetNet is loaded" if {[info exists TableauFichierRetNet($Quoi)]} {return [set TableauFichierRetNet($Quoi)]} return } proc InterrogeRetrievePIDBetweenPosInMACS {args} { Wup "Permet de questionner les infos des PIDs des domaines obtenus par RetrievePIDBetweenPosInMACSs" Wup "Voir aussi decharge et charge" global TabPIDInAln #Arguments: ########### #$Fichier Debut - Rend la position du debut du domaine (insertion) #$Fichier Fin - Rend la position de fin du domaine (insertion) #$Fichier $Access $Debut $Fin PID - Rend le pourcentage d identite de la zone par rapport a une ref #$Fichier $Access $Debut $Fin Taille - Rend la taille du domaine (insertion) if {$args == "unset"} { if {[info exists TabPIDInAln]} {array unset TabPIDInAln} return "" } set Quoi [join $args ","] if {[info exists TabPIDInAln($Quoi)]} {return [set TabPIDInAln($Quoi)]} set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" } if {! [info exists TabPIDInAln($FichierACharger,EstCharge)]} {set TabPIDInAln($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeRetrievePIDBetweenPosInMACS $FichierACharger return "" } if { [info exists TabPIDInAln($FichierACharger,EstVide)]} {return ""} if { [info exists TabPIDInAln($Quoi)]} {return [set TabPIDInAln($Quoi)]} ###################CHARGE le Fichier avec les residus demandees######################### if {! [info exists TabPIDInAln($FichierACharger,EstCharge)] || [set TabPIDInAln($FichierACharger,EstCharge)]=="0"} { set TabPIDInAln($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeRetrievePIDBetweenPosInMACS TabPIDInAln $FichierACharger] if {$ResultatCharge != ""} { set TabPIDInAln($FichierACharger,EstVide) 1 return "" } } if {![info exists TabPIDInAln($Quoi)]} {return ""} return [set TabPIDInAln($Quoi)] } proc InterrogeRetrievePositionsInMACS {args} { Wup "Permet de questionner les infos des positions des domaines obtenus par RetrievePositionsInMACSs" Wup "Voir aussi decharge et charge" global TabPosInAln #Arguments: ########### #$Fichier LesPositions - Rend toutes les positions demandees #$Fichier $Acc $Pos Position - Rend la position equivalente a la position de $Access a la$Position dans la reference #$Fichier $Acc LesPositions - Rend la position equivalente a la position de $Access a la$Position dans la reference #$Fichier $Groupe Pos - Rend la position du groupe if {$args == "unset"} { if {[info exists TabPosInAln]} {array unset TabPosInAln} return "" } set Quoi [join $args ","] if {[info exists TabPosInAln($Quoi)]} {return [set TabPosInAln($Quoi)]} set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" } if {! [info exists TabPosInAln($FichierACharger,EstCharge)]} {set TabPosInAln($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeRetrievePositionsInMACS $FichierACharger return "" } if { [info exists TabPosInAln($FichierACharger,EstVide)]} {return ""} if { [info exists TabPosInAln($Quoi)]} {return [set TabPosInAln($Quoi)]} ###################CHARGE le Fichier avec les residus demandees######################### if {! [info exists TabPosInAln($FichierACharger,EstCharge)] || [set TabPosInAln($FichierACharger,EstCharge)]=="0"} { set TabPosInAln($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeRetrievePositionsInMACS TabPosInAln $FichierACharger] if {$ResultatCharge != ""} { set TabPosInAln($FichierACharger,EstVide) 1 return "" } } if {![info exists TabPosInAln($Quoi)]} {return ""} return [set TabPosInAln($Quoi)] } proc InterrogeRetrieveResidueInMACS {args} { Wup "Permet de questionner les infos des residus obtenus par RetrieveResidueInMACSs" Wup "Voir aussi decharge et charge" global TabResInAln #Arguments: ########### #$Fichier $Access $Position Residu - Rend le residu a la position $Position #$Fichier $Groupe Pos - Rend la position du groupe if {$args == "unset"} { if {[info exists TabResInAln]} {array unset TabResInAln} return "" } set Quoi [join $args ","] if {[info exists TabResInAln($Quoi)]} {return [set TabResInAln($Quoi)]} set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" } if {! [info exists TabResInAln($FichierACharger,EstCharge)]} {set TabResInAln($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeRetrieveResidueInMACS $FichierACharger return "" } if { [info exists TabResInAln($FichierACharger,EstVide)]} {return ""} if { [info exists TabResInAln($Quoi)]} {return [set TabResInAln($Quoi)]} ###################CHARGE le Fichier avec les residus demandees######################### if {! [info exists TabResInAln($FichierACharger,EstCharge)] || [set TabResInAln($FichierACharger,EstCharge)]=="0"} { set TabResInAln($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeRetrieveResidueInMACS TabResInAln $FichierACharger] if {$ResultatCharge != ""} { set TabResInAln($FichierACharger,EstVide) 1 return "" } } if {![info exists TabResInAln($Quoi)]} {return ""} return [set TabResInAln($Quoi)] } proc InterrogeRonn {args} { #Permet de questionner les infos de Ronn #Voir aussi decharge et charge global InfoRonn if {$args == "unset"} { if {[info exists InfoRonn]} {array unset InfoRonn} return "" } #1 On test si c deja en memoire et si oui on retourne la valeur demandee set Quoi [join $args ","] if {[info exists InfoRonn($Quoi)]} {return [set InfoRonn($Quoi)]} #2 On recupere le fichier (1er argument) set FichierACharger [lindex $args 0] if {! [info exists InfoRonn($FichierACharger,EstCharge)]} {set InfoRonn($FichierACharger,EstCharge) 0} #3 On decharge le cas echeant if {$Quoi=="$FichierACharger,Decharge"} { DechargeRonn $FichierACharger return "" } if { [info exists InfoRonn($FichierACharger,EstVide)]} {return ""} if { [info exists InfoRonn($Quoi)]} {return [set InfoRonn($Quoi)]} #4 On charge les resultats if {! [info exists InfoRonn($FichierACharger,EstCharge)] || [set InfoRonn($FichierACharger,EstCharge)]=="0"} { set InfoRonn($FichierACharger,EstCharge) 1 set ResultatCharge [ChargeRonn InfoRonn $FichierACharger] if {$ResultatCharge != ""} { set InfoRonn($FichierACharger,EstVide) 1 return "" } } if {![info exists InfoRonn($Quoi)]} { return "" } return [set InfoRonn($Quoi)] } proc InterrogeSelectedEST {args} { global TabSelectedEST #unset #$File LesNoms #$File LesAccess #$File LesTissueType #$File LesDevStage #$File LesOrganism #$File Nom $Nom LesAccess #$File Nom $Nom LesTissueType #$File Nom $Nom LesDevStage #$File Nom $Nom LesOrganism #$File Access $Access LesNoms #$File Access $Access LesTissueType #$File Access $Access LesDevStage #$File Access $Access LesOrganism #$File TissueType $TissueType LesAccess #$File TissueType $TissueType LesNoms #$File DevStage $DevStage LesAccess #$File DevStage $DevStage LesNoms #$File Organism $Organism LesAccess #$File Organism $Organism LesNoms set FirstArg [lindex $args 0] if {$FirstArg == "unset"} { if {[info exists TabSelectedEST]} {unset TabSelectedEST}; return } set Quoi [join $args ","] if {[info exists TabSelectedEST($Quoi)]} {return [set TabSelectedEST($Quoi)]} if {[info exists TabSelectedEST($FirstArg,EstCharge)]} {return} if {![file exists $FirstArg]} {return} set TabSelectedEST($FirstArg,EstCharge) 1 LoadSelectedEST TabSelectedEST $FirstArg if {[info exists TabSelectedEST($Quoi)]} {return [set TabSelectedEST($Quoi)]} return } proc InterrogeSeq {{Qui ""} {Quoi ""}} { global InterrogeSeq if {[info exists InterrogeSeq($Qui,$Quoi)]} {return $InterrogeSeq($Qui,$Quoi)} if {[info exists InterrogeSeq("EstCharge")]} {return ""} set InterrogeSeq("EstCharge") 1 set FichierSw "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Uniprot/Sw_Vertebrata" set FichierTr "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Uniprot/Tr_Vertebrata" set FichierVa "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Varsplic/varsplic_Vertebrata" set FichierRn "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Refseq/refseq-new-proteic_Vertebrata" set FichierRr "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/Refseq/refseq-rel-proteic_Vertebrata" set FichierEn "/genomics/link/SpliRetMouse/database/TousLesTfasAcRedond/ENSEMBL61/Ensembl_Vertebrata" set ListeFichier [list $FichierSw $FichierTr $FichierVa $FichierRn $FichierRr $FichierEn] foreach Fichier $ListeFichier { foreach Access [LaSequenceDuTFAs $Fichier "LaListeDesAccess" "" "" ForceAccessFirst] { set TFA [LaSequenceDuTFAs $Fichier $Access] set Seq [string toupper [QueLaSequenceDuTexteTFA $TFA]] set InterrogeSeq($Access,Tfa) $TFA set InterrogeSeq($Access,Seq) $Seq lappend InterrogeSeq($Seq,Access) $Access } } return [InterrogeSeq $Qui $Quoi] } proc InterrogeSortieNcbi {{Qui ""} {Quoi ""}} { global InterrogeSortieNcbi if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists InterrogeSortieNcbi($Qui,$Quoi)]} {return $InterrogeSortieNcbi($Qui,$Quoi)} if {[info exists InterrogeSortieNcbi("EstCharge")]} {return ""} set InterrogeSortieNcbi("EstCharge") 1 #set Fichier "/genomics/link/Tau/sortie_ncbi.txt" set Fichier "/genomics/link/Tau/Dec2008/GSTRdCVF/sortie_ncbi.txt" set InterrogeSortieNcbi(ListOf,headers) [list Acc Gi] set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { if {$Ligne==""} { continue } elseif {[regexp {^[0-9]{1,2}:} $Ligne ]} { set Access [StringApres ":" dans $Ligne] set Access [string trim $Access] } elseif {[regexp {^gi\|} $Ligne ]} { set GI [lindex [split $Ligne "|"] 1] set DB [lindex [split $Ligne "|"] 2] set InterrogeSortieNcbi($GI,Access) $Access set InterrogeSortieNcbi($Access,GI) $GI set InterrogeSortieNcbi($GI,DB) $DB set InterrogeSortieNcbi($GI,Orga) $Orga } else { set index1 [expr [string first "\[" $Ligne] + 1] set index2 [expr [string first "\]" $Ligne] - 1] set Orga [string range $Ligne $index1 $index2] } } return [InterrogeSortieNcbi $Qui $Quoi] } proc InterrogeSortieNcbiControl {{Qui ""} {Quoi ""}} { global InterrogeSortieNcbiControl if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists InterrogeSortieNcbiControl($Qui,$Quoi)]} {return $InterrogeSortieNcbiControl($Qui,$Quoi)} if {[info exists InterrogeSortieNcbiControl("EstCharge")]} {return ""} set InterrogeSortieNcbiControl("EstCharge") 1 set Fichier "/genomics/link/Tau/Dec2008/GSTControl/sortie_ncbi_control.txt" set InterrogeSortieNcbiControl(ListOf,headers) [list Acc Gi] set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { if {$Ligne==""} { continue } elseif {[regexp {^[0-9]{1,2}:} $Ligne ]} { set Access [StringApres ":" dans $Ligne] set Access [string trim $Access] } elseif {[regexp {^gi\|} $Ligne ]} { set GI [lindex [split $Ligne "|"] 1] set DB [lindex [split $Ligne "|"] 2] set InterrogeSortieNcbiControl($GI,Access) $Access set InterrogeSortieNcbiControl($Access,GI) $GI set InterrogeSortieNcbiControl($GI,DB) $DB set InterrogeSortieNcbiControl($GI,Orga) $Orga } else { set index1 [expr [string first "\[" $Ligne] + 1] set index2 [expr [string first "\]" $Ligne] - 1] set Orga [string range $Ligne $index1 $index2] } } return [InterrogeSortieNcbiControl $Qui $Quoi] } proc InterrogeSpeciesTable {Qui Quoi} { #interroge la table species de STRING global InterrogeSpeciesTable if {[info exists InterrogeSpeciesTable($Qui,$Quoi)]} { return $InterrogeSpeciesTable($Qui,$Quoi) } if {[info exists InterrogeSpeciesTable("EstCharge")]} { return "" } set InterrogeSpeciesTable("EstCharge") 1 CanalSqlString set Sql "select species_id,official_name from items.species" foreach {SpeId SpeName} [SqlExec $Sql "GetList"] { set InterrogeSpeciesTable($SpeId,SpeName) $SpeName set InterrogeSpeciesTable($SpeName,SpeId) $SpeId } CanalSqlDisconnect return [InterrogeSpeciesTable $Qui $Quoi] } proc InterrogeTissueType {args} { global TableauInterrogationTissueType #unset #LesTissues #LesNoms #$Nom LesTissues #$Nom LesEST #EST $Access LesTissues #EST $Access LesNoms #EST $Access Tissue $Tissue n #Tissue $Tissue LesNoms #Tissue $Tissue LesEST #Tissue $Tissue n #$Nom Tissue $Tissue n #$Nom Tissue $Tissue LesEST #$Nom Tissue $Tissue EST $Access n if {$args == "unset"} { if {[info exists TableauInterrogationTissueType]} { unset TableauInterrogationTissueType } return "" } set Quoi [join $args ","] if {[info exists TableauInterrogationTissueType($Quoi)]} { return [set TableauInterrogationTissueType($Quoi)] } set File1 "[RepertoireDuGenome]/fiches/TissueType" ###################CHARGE FichierExonicMap######################### if {[file exists $File1] && ![info exists TableauInterrogationTissueType($File1,EstCharge)]} { set TableauInterrogationTissueType($File1,EstCharge) 1 ChargeTissueType TableauInterrogationTissueType $File1 } set File2 "[RepertoireDuGenome]/fiches/EffectifsDesTissueType" if {[file exists $File2] && ![info exists TableauInterrogationTissueType($File2,EstCharge)]} { set TableauInterrogationTissueType($File2,EstCharge) 1 ChargeEffectifDesTissueType TableauInterrogationTissueType $File2 } if {[info exists TableauInterrogationTissueType($Quoi)]} { return [set TableauInterrogationTissueType($Quoi)] } return } proc InterrogeTousLesCodesAvecUneListe {FichierSelection FichierTous} { foreach Ligne [LesLignesDuFichier $FichierTous] { scan $Ligne "%s %s" gscope codeaffy set Gscope($codeaffy) $gscope } foreach Ligne [LesLignesDuFichier $FichierSelection] { scan $Ligne "%s" codeaffy if {[info exists Gscope($codeaffy)]} { lappend LesGscope "$Gscope($codeaffy)" } else { lappend LesManquants $codeaffy } } Espionne [llength $LesGscope] return $LesManquants } proc InventOi {{Qui ""} {Quoi ""} {Defaut ""}} { LogWscope [Environ] set RG $Qui if { ! [file exists "$RG/beton"]} { return $Defaut } scan [PremiereLigneDuFichier "$RG/fiches/bornesdespabs"] "%s" Premier if {[file exists "$RG/blastp/$Premier"] && [file exists "$RG/taxobla/$Premier"]} { return "lightgreen" } if {[file exists "$RG/taxobla/$Premier"]} { return "yellow" } return "orange" } proc Inventaire {{GetWhat ""}} { if {$GetWhat==""} { set GetWhat "Show" } set Total [format "%5d" [llength [ListeDesPABs]]] set Sortie [list "$Total [PreFixe] are available\n"] foreach Toire [lsort [glob -type d "[RepertoireDuGenome]/*"]] { set Queue [file tail $Toire] set BeauQ [format "%16s" $Queue] set Rep $Toire set BeauToire [format "%-15s" $Toire] if { ! [file exists $Rep] } { lappend Sortie "$BeauToire doesn't exists." continue } set LesPABs [lsort [glob -nocomplain "$Rep/[PreFixe]*"]] set LesTous [lsort [glob -nocomplain "$Rep/*"]] set N [llength $LesPABs] set A [expr [llength $LesTous] - [llength $LesPABs]] set BeauN [format "%5d" $N] set BeauA [format "%5d" $A] if {[info exists SesPABs]} { unset SesPABs } set LesExt {} foreach PAB $LesPABs { if {[regexp "[PreFixe]\[0-9\]+(\[^0-9\]*)" $PAB Match Ext]} { lappend LesExt $Ext lappend SesPABs($Ext) $PAB } } set LesExt [lsort -unique $LesExt] if {[llength $LesExt]>1} { foreach Ext $LesExt { set LesPs $SesPABs($Ext) set N [llength $LesPs] set A [expr [llength $LesTous] - [llength $LesPs]] set BeauN [format "%5d" $N] set BeauA [format "%5d" $A] lappend Sortie "$BeauN $BeauQ [PreFixe]1234[format %-12s $Ext] files and $BeauA other files in $BeauToire" } } else { set Ext "" lappend Sortie "$BeauN $BeauQ [PreFixe]1234[format %-12s $Ext] files and $BeauA other files in $BeauToire" } } set LesFiches [lsort [glob -nocomplain "[RepertoireDuGenome]/fiches/*"]] set LesPastouche [lsort [glob -nocomplain "[RepertoireDuGenome]/pastouche/*"]] set Sortie [concat $Sortie [list "\n\n"] $LesFiches] set Sortie [concat $Sortie [list "\n\n"] $LesPastouche] if {[OnTraite OI]} { lappend Sortie "\n\n" [BlastLocalInventaire] } set LeContenuPasTouche {} foreach P [lsort [GlobRecursif "" "[RepertoireDuGenome]/pastouche"]] { if {[info exists DejaVu($P)]} { FaireLire "$P deja vu en \n$DejaVu($P)" } set DejaVu($P) $P if {[file type $P]=="directory"} { continue } lappend LeContenuPasTouche [ContenuDuFichier $P] } set ContenuPasTouche [join $LeContenuPasTouche "\n"] lappend Sortie "\nContenu des pastouche" lappend Sortie $ContenuPasTouche set Sortie [join $Sortie "\n"] #rR ............................................... on peut faire Affiche meme avec Wscope mais faut faire postpone des boutons if {[PourWscope]} { return "
$Sortie
" } if {$GetWhat=="GetText"} { return $Sortie } set F [Affiche $Sortie "AvecShow" "Inventory at [Date Nice]"] set B [BoutonneLaFenetre $F "NewInventory\nNew Check"] $B configure -background "yellow" bind $B <1> Inventaire bind $B CheckInventaire return $F } proc InventaireDeLaDatabaseClonage {} { set Choix [ChoixParmi [list "Show_OligosTogether" "Show_Oligos" "Show_VirtualPPCR" "Show_AllRec1" "Show_AllRec2" "Show_VEDidier" "Show_Localisation" "" "Show_Matrices" "Show_pDONR_pDEST" "Show_pDONR" "Show_pDEST" "Show_Signals" "Show_BrocOli" "Show_GluOli" "Show_pEntr" "Show_CoOl" "Show_Spine" "" "Show_RestEnzymes" "Show_RestEnzymesHits" "Show_RareCodon" "" "Browse_Oligos" "Browse_PPCR" ]] switch $Choix { "Show_OligosTogether" {AffichePof "AllPs"} "Show_Oligos" {AffichePof} "Show_VirtualPPCR" {AfficheVirtualPPCR} "Show_AllRec1" {AfficheLesRec1} "Show_AllRec2" {AfficheLesRec2} "Show_VEDidier" {ShowVEDidier} "Show_Localisation" {LocalisationDesVirtualPPCRs} "Show_Matrices" {InventaireDesMatrices} "Show_pDONR_pDEST" {InventaireDesVecteurs "pDONR_pDEST"} "Show_pDONR" {InventaireDesVecteurs "pDONR"} "Show_pDEST" {InventaireDesVecteurs "pDEST"} "Show_Signals" {InventaireDesSignaux "Show"} "Show_BrocOli" {InventaireDesBrocOli "Show"} "Show_GluOli" {InventaireDesGluOli "Show"} "Show_pEntr" {InventaireDesPEntr "Show"} "Show_Signals" {RestrictionEnzymes} "Show_CoOl" {CoOlPourTous} "Show_Spine" {SpineSummary "Show"} "Show_RareCodon" {AfficheSlidingCodonRarePour} "Show_RestEnzymes" {ShowRestrictionEnzyme} "Show_RestEnzymesHits" {RestrictionEnzymesStatistics "ShowHits"} "Browse_Oligos" {InventaireDesOligos} "Browse_PPCR" {InventaireDesPPCR} default {} } return $Choix } proc InventaireDesAccessDesMSF {Repertoire} { set LocalDir [pwd] cd $Repertoire set LesMSFs [glob -nocomplain "*.msf"] foreach Fichier $LesMSFs { if { ! [DecortiqueUnMSF $Fichier LesAccess Sequences]} { continue } set Fichier [file tail $Fichier] foreach Access $LesAccess { set ACCESS [string toupper $Access] lappend SesMSFs($ACCESS) $Fichier if { ! [info exists DejaVu($ACCESS)]} { lappend TousLesAccess $Access lappend TousLesACCESS $ACCESS } set DejaVu($ACCESS) 1 } } foreach Access $TousLesAccess ACCESS $TousLesACCESS { set LesMSFs [set SesMSFs($ACCESS)] if {[set N [llength $LesMSFs]] > 1} { set Texte [format "Vu %2d fois %-20s" $N $Access] foreach FicMSF $LesMSFs { append Texte [format "%-18s" $FicMSF] } Espionne $Texte } } exit } proc InventaireDesBrocOli {{Action ""}} { if {$Action==""} { set Action "Show" } return [AfficheFichier [BrocOli "FileName"]] } proc InventaireDesFichiersClonage {{Rep ""} {OnVeut AfficherTout}} { #rR depuis 2007/07/27 if {$Rep==""} { set Rep "PAY" } if {$Rep==""} { set Rep "ProGS" } if { ! [ClonInventoryExists Listes]} { ClonInventorySet Listes [Debroussaille $Rep] } set Listes [ClonInventory Listes] set LesFichiersOligos [lindex $Listes 0] set LesFichiersOligos_NA [lindex $Listes 1] set LesFichiersPPCR [lindex $Listes 2] set LesFichiersPPCR_NA [lindex $Listes 3] set LesDecomposOligos [lindex $Listes 4] set LesDecomposOligos_NA [lindex $Listes 5] set LesDecomposPPCR [lindex $Listes 6] set LesDecomposPPCR_NA [lindex $Listes 7] set LesFichiersSignaux [lindex $Listes 8] set LesCommandesDOligos [lindex $Listes 9] set TousLesAvantsGroupes {} set TousLesApresGroupes {} ClonInventorySet Oligos Sujets {} foreach Fichier $LesFichiersOligos Decompo $LesDecomposOligos { foreach Sujet [lindex $Decompo 0] LesAv [lindex $Decompo 1] LesAp [lindex $Decompo 2] { lappend TousLesAvantsGroupes [join $LesAv "_"] lappend TousLesApresGroupes [join $LesAp "_"] ClonInventoryAppend $Sujet Oligos [list $Fichier [list $Sujet $LesAv $LesAp]] ClonInventoryAppend Oligos Sujets $Sujet set CoAvAp [list $Sujet [join $LesAv " "] [join $LesAp " "]] set TexCoAvAp [join $CoAvAp " === "] ClonInventoryAppend $TexCoAvAp $Fichier } } ClonInventorySet Oligos Sujets [lsort -unique [ClonInventory Oligos Sujets]] if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherOligos"} { set Fen [AfficheVariable [join [ClonInventory Oligos Sujets] "\n"] "AvecShowItsOligos" "ConstructionsWithOligos"] if {$OnVeut=="AfficherOligos"} { return $Fen } } if {$OnVeut=="RetournerOligos"} { return [ClonInventory Oligos Sujets] } ClonInventorySet Oligos_NA Sujets {} foreach Fichier $LesFichiersOligos_NA Decompo $LesDecomposOligos_NA { set Sujet [lindex $Decompo 0] set LesAv [lindex $Decompo 1] lappend TousLesAvantsGroupes [join $LesAv "_"] set LesAp [lindex $Decompo 2] lappend TousLesApresGroupes [join $LesAp "_"] ClonInventoryAppend $Sujet Oligos_NA [list $Fichier $Decompo] ClonInventoryAppend Oligos_NA Sujets $Sujet set CoAvAp [list $Sujet [join $LesAv " "] [join $LesAp " "]] set TexCoAvAp [join $CoAvAp " === "] ClonInventoryAppend $TexCoAvAp $Fichier } ClonInventorySet Oligos_NA Sujets [lsort -unique [ClonInventory Oligos_NA Sujets]] if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherOligos_NA"} { set Fen [AfficheVariable [join [ClonInventory Oligos_NA Sujets] "\n"] "AvecShowItsOligos_NA" "ConstructionsWithOligos_NA"] if {$OnVeut=="AfficherOligos_NA"} { return $Fen } } if {$OnVeut=="RetournerOligos_NA"} { return [ClonInventory Oligos_NA Sujets] } ClonInventorySet PPCR_NA Sujets {} foreach Fichier $LesFichiersPPCR_NA Decompo $LesDecomposPPCR_NA { set Sujet [lindex $Decompo 0] set LesAv [lindex $Decompo 1] set LesAp [lindex $Decompo 2] ClonInventoryAppend $Sujet PPCR_NA [list $Fichier $Decompo] ClonInventoryAppend PPCR_NA Sujets $Sujet set CoAvAp [list $Sujet $LesAv $LesAp] set TexCoAvAp [join $CoAvAp " +++ "] ClonInventoryAppend $TexCoAvAp $Fichier } ClonInventorySet PPCR_NA Sujets [lsort -unique [ClonInventory PPCR_NA Sujets]] if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherPPCR_NA"} { set Fen [AfficheVariable [join [ClonInventory PPCR_NA Sujets] "\n"] "AvecShowItsPPCR_NA" "ConstructionsWithPPCR_NA"] if {$OnVeut=="AfficherPPCR_NA"} { return $Fen } } if {$OnVeut=="RetournerPPCR_NA"} { return [ClonInventory PPCR_NA Sujets] } ClonInventorySet PPCR Sujets {} foreach Fichier $LesFichiersPPCR Decompo $LesDecomposPPCR { set LesSu [lindex $Decompo 0] set LesAv [lindex $Decompo 1] set LesAp [lindex $Decompo 2] foreach Sujet $LesSu Avs $LesAv Aps $LesAp { ClonInventoryAppend $Sujet PPCR [list $Fichier [list $Sujet $Avs $Aps]] ClonInventoryAppend PPCR Sujets $Sujet set CoAvAp [list $Sujet $Avs $Aps] set TexCoAvAp [join $CoAvAp " +++ "] ClonInventoryAppend $TexCoAvAp $Fichier } } ClonInventorySet PPCR Sujets [lsort -unique [ClonInventory PPCR Sujets]] if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherPPCR_NA"} { set Fen [AfficheVariable [join [ClonInventory PPCR Sujets] "\n"] "AvecShowItsPPCR" "ConstructionsWithPPCR"] if {$OnVeut=="AfficherPPCR"} { return $Fen } } if {$OnVeut=="RetournerPPCR"} { return [ClonInventory PPCR Sujets] } if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherSignaux"} { set Fen [AfficheVariable [join $LesFichiersSignaux "\n"] "AvecFetch" Signaux] if {$LesFichiersSignaux!={}} { BoutonneLaFenetre $Fen "Signals inventory" "InventaireDesSignaux \[selection get\]" } } if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherLesAvantsGroupes"} { set TousLesAvantsGroupes [lsort -unique $TousLesAvantsGroupes] set Fen [AfficheVariable [join $TousLesAvantsGroupes "\n"] "SansFetch" AvantsGroupes] if {$TousLesAvantsGroupes!={}} { BoutonneLaFenetre $Fen "Groups of 5' Signals inventory" "InventaireDesSignauxGroupes \[selection get\]" } } if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherLesApresGroupes"} { set TousLesApresGroupes [lsort -unique $TousLesApresGroupes] set Fen [AfficheVariable [join $TousLesApresGroupes "\n"] "SansFetch" ApresGroupes] if {$TousLesApresGroupes!={}} { BoutonneLaFenetre $Fen "Groups of 3' Signals inventory" "InventaireDesSignauxGroupes \[selection get\]" } } if {$OnVeut=="AfficherTout" || $OnVeut=="AfficherLesCommandesDOligos"} { set Fen [AfficheVariable [join $LesCommandesDOligos "\n"] "AvecOli" CommandesDOligos] } } proc InventaireDesGluOli {{Action ""}} { if {$Action==""} { set Action "Show" } return [AfficheFichier "[RepertoireDuGenome]/fiches/GluOli.txt"] } proc InventaireDesMatrices {} { return [AfficheFichier "[RepertoireDuGenome]/fiches/matrices_of_oligos" "AvecOli"] } proc InventaireDesNMsEtGBs {} { set LesNMs {} set LesGBs {} foreach I [RetChip ListOf Index] { foreach C [list "refseq_PIQOR" "DNA_acc"] { set NM [RetChip $I $C] if { ! [regexp {^NM_[0-9]+$} $NM]} { if {[regexp "," $NM]} { set SesNMs [split $NM ","] foreach NM $SesNMs { if {[regexp {^NM_[0-9]+$} $NM]} { lappend LesNMs $NM ; lappend LesNMsDu($I) $NM; continue } } continue } } if {$NM==""} { continue } if {[regexp {^NM_[0-9]+$} $NM]} { lappend LesNMs $NM ; lappend LesNMsDu($I) $NM; continue } Espionne "GB $NM" if {[regexp {^[A-Z]+[0-9]+$} $NM]} { lappend LesGBs $NM ; lappend LesGBsDu($I) $NM; continue } } } set LesNMs [lsort -unique $LesNMs] set LesGBs [lsort -unique $LesGBs] if {[OuiOuNon "Do I look for missing NM and GB at NCBI ?"]} { set LesVides {} set Fichier "[Fiches]/GbNmFromNcbiEnStock" if {[file exists $Fichier] && [OuiOuNon "Do I replace $Fichier ?"]} { file delete $Fichier } foreach X [concat $LesNMs $LesGBs] { if {[NmEnStock $X]!=""} { continue } if {[GbEnStock $X]!=""} { continue } set NCBI [FromNCBI $X] if {$NCBI==""} { lappend LesVides $X } AppendAuFichier $Fichier $NCBI } return } SauveLesLignes [array get LesNMsDu] dans "[Fiches]/NmsParLigne" SauveLesLignes [array get LesGBsDu] dans "[Fiches]/GbsParLigne" set KeepEnStock [OuiOuNon "Do I keep existing NmEnStock (and GbEnStock) ?"] set LesRestants $LesNMs if {$KeepEnStock} { set LesRestants {} foreach NM $LesNMs { if {[NmEnStock $NM]!=""} { continue } lappend LesRestants $NM } } Espionne $LesRestants set Fichier "[Fiches]/NmEnStock" if {[file exists $Fichier] && [OuiOuNon "Do I replace $Fichier ?"]} { file delete $Fichier } while 1 { if {$LesRestants=={}} { break } set LesCourants [lrange $LesRestants 0 99] set LesRestants [lrange $LesRestants 100 end] set NMs [join $LesCourants "|"] set GetzCourant [Getz $NMs refseq] set T [regexp -all {\|} $NMs] ; incr T set N [regexp -all "//" $GetzCourant] Espionne "Recu $N sur $T" AppendAuFichier $Fichier $GetzCourant } set LesRestants $LesGBs if {$KeepEnStock} { set LesRestants {} foreach GB $LesGBs { if {[GbEnStock $GB]!=""} { continue } lappend LesRestants $GB } } Espionne $LesRestants set Fichier "[Fiches]/GbEnStock" if {[file exists $Fichier] && [OuiOuNon "Do I replace $Fichier ?"]} { file delete $Fichier } while 1 { if {$LesRestants=={}} { break } set LesCourants [lrange $LesRestants 0 99] set LesRestants [lrange $LesRestants 100 end] set GBs [join $LesCourants "|"] set GetzCourant [Getz $GBs genbank genbanknew] set T [regexp -all {\|} $GBs] ; incr T set N [regexp -all "//" $GetzCourant] Espionne "Recu $N sur $T" AppendAuFichier $Fichier $GetzCourant } exit } proc InventaireDesOligos {{Source ""}} { if {$Source==""} { set Source "Oli" } set LesPSuj {} switch $Source { "Oli" { foreach P [Oli "LaListeMerci"] { set DesP [Oli $P "Description"] regsub "^>" $DesP "" DesP lappend LesPSuj $DesP } } } AfficheVariable [join $LesPSuj "\n"] "AvecOli" "InventaireDesOligos" return } proc InventaireDesPEntr {{Action ""}} { foreach E [PEntr "ListeDesEs"] { set PE [PEntr $E] set iChamp 0 foreach Champ [split $PE ","] { incr iChamp if { ! [info exists LargeurDuChamp($iChamp)]} { set LargeurDuChamp($iChamp) 1 } set LargeurDuChamp($iChamp) [Maxi $LargeurDuChamp($iChamp) [string length $Champ]] } } set LeShow {} foreach E [PEntr "ListeDesEs"] { set PE [PEntr $E] set LaLigne "$E " set iChamp 0 foreach Champ [split $PE ","] { incr iChamp lappend LaLigne [format "%-[set LargeurDuChamp($iChamp)]s" $Champ] } lappend LeShow [join $LaLigne " "] } set Show [join $LeShow "\n"] return [AfficheVariable $Show "" "Inventory_of_PEntr"] } proc InventaireDesSignaux {{Selection ""}} { global RepertoireDuGenome set Action "" if {$Selection=="Show"} { set Action "Show" ; set Selection "" } if {$Selection==""} { set Selection "[RepertoireDuGenome]/signaux/signaux.tfa" } set LeShow {} foreach Fichier [split $Selection "\n"] { if {[info exists SeqSign]} { unset SeqSign ; unset SeqPPCR } set LesSignaux [LesSignauxDuFichier $Fichier SeqSign SeqPPCR] foreach Signal $LesSignaux { set Actuel [set SeqPPCR($Signal)] set SIGNAL [string toupper $Signal] lappend LesFichiersDuSignal($Signal) $Fichier if {[info exists Sequence($SIGNAL)]} { set Autre [set Sequence($SIGNAL)] set Actuel [set SeqPPCR($Signal)] if {$Autre!=$Actuel} { FaireLire "$Autre\n$Actuel\n\ndon't correspond for signal $Signal in\n [join [set LesFichiersDuSignal($Signal)] \n]]" } } set Sequence($SIGNAL) $Actuel set Ligne "[format "%-20s" $Signal] $Actuel" lappend LeShow $Ligne } if {$Action=="Show"} { return [AfficheVariable [join $LeShow "\n"] "" Signals_Inventory ] } while {[OuiOuNon "I would like to save these signals in a file. Can I do it ?"]} { set BonFichierDeSignaux "$RepertoireDuGenome/signaux/bons_signaux.tfa" set BonFichierDeSignaux [FichierPourSaveAs $BonFichierDeSignaux] if {$BonFichierDeSignaux==""} { continue } foreach Signal $LesSignaux { set SignalAGarder($Signal) 1 } set LeMeilleurOrdrePourLesSignaux [MorceauxChoisis [LeBonOrdrePourLesSignaux] "Please transfer all signals to the right and reorder them if necessary"] foreach Signal $LeMeilleurOrdrePourLesSignaux { if { ! [info exists SignalAGarder($Signal)]} { continue } lappend LesSeqs [SequenceFormatTFA [set SeqPPCR($Signal)] "$Signal"] set DejaVu($Signal) 1 } foreach Signal [array names SignalAGarder] { if {[info exists DejaVu($Signal)]} { continue } lappend LesSeqs [SequenceFormatTFA [set SeqPPCR($Signal)] "$Signal"] set DejaVu($Signal) 1 } return [Sauve [join $LesSeqs "\n\n"] dans $BonFichierDeSignaux] } return [lsort -unique $LesSignaux] } } proc InventaireDesSignauxGroupes {TousLesSignauxGroupes} { if {[regexp "\n" $TousLesSignauxGroupes]} { set TousLesSignauxGroupes [split $TousLesSignauxGroupes "\n"] } foreach Signaux $TousLesSignauxGroupes { set LesSignaux [split $Signaux "_"] set i 0 foreach Prems $LesSignaux { lappend LesPrems $Prems foreach Deuss [lrange $LesSignaux [incr i] end] { set Ordre($Prems,$Deuss) $Signaux if {[info exists Ordre($Deuss,$Prems)]} { if {[OuiOuNon "wrong signal order $Prems $Deuss in $Signaux \nPrevious was [set Ordre($Deuss,$Prems)] \nDo I keep the old one ?"]} { unset Ordre($Prems,$Deuss) } else { unset Ordre($Deuss,$Prems) } } } } } EspionneL [array get Ordre] set Encore 1 while {$Encore} { if {[info exists EstDeuxieme]} { unset EstDeuxieme } set Encore 0 foreach {PD Signaux} [array names Ordre] { ScanLaListe [split PD ","] Prems Deuss if {[info exists DejaVu($Prems)]} { continue } set EstDeuxieme($Deuss) $Prems } foreach {PD Signaux} [array names Ordre] { ScanLaListe [split $PD ","] Prems Deuss if {[info exists EstDeuxieme($Prems)]} { continue } if {[info exists DejaVu($Prems)]} { continue } lappend LeBonOrdre $Prems set DejaVu($Prems) 1 set Encore 1 } } foreach P [lsort -unique $LesPrems] { if {[info exists DejaVu($P)]} { continue } lappend LeBonOrdre $P } if {[OuiOuNon "Do I append this order to the signals-order-file ?"]} { set AncienOrdre [LeBonOrdrePourLesSignaux] set NouvelOrdre [concat $AncienOrdre $LeBonOrdre] set LeBonOrdre {} foreach Signal $NouvelOrdre { if {[info exists Vu($Signal)]} { continue } set Vu($Signal) 1 lappend LeBonOrdre $Signal } LeBonOrdrePourLesSignaux $LeBonOrdre "ASauver" } EspionneL $LeBonOrdre return $LeBonOrdre } proc InventaireDesVecteurs {{VecType ""}} { set LesPossibles [LesVecteurs $VecType "GetFilenames"] return [AfficheVariable [join $LesPossibles "\n"] "AvecShow" "${VecType}_Vectors"] } proc InverseTagNom {pos} { global NomSeqSel NomNomSeq set Lt {} lassign [split $pos .] y x set Lt [$NomNomSeq tag names $pos] if {"InvNm" ni $Lt} { $NomNomSeq tag add InvNm $y.0 $y.end } else { $NomNomSeq tag remove InvNm $y.0 $y.end set idx [lsearch $NomSeqSel $pos] set NomSeqSel [lreplace $NomSeqSel $idx $idx] } return } proc InverseTagNomSB {pos} { global NomNomSeq global NomSeqSel if {[$NomNomSeq tag includes InvNm $pos]} { $NomNomSeq tag cell {} $pos set idx [lsearch $NomSeqSel $pos] set NomSeqSel [lreplace $NomSeqSel $idx $idx] } else { $NomNomSeq tag cell InvNm $pos } return } proc IpSiLocalhost {Ip} { set Hostname [info hostname] regsub {\..*} $Hostname "" HostnameCourt if {$Ip=="localhost" || [regexp {^127} $Ip]} { set Ip $HostnameCourt } return $Ip } proc IsColsConsFreeSurf {Word} { set LesIsColsConsFreeSurf [list "column-score" "consensus" "freetext" "surface-accessibility" "colscor" "consensus" "freetext" "surfacc"] set i [lsearch $LesIsColsConsFreeSurf $Word] return [expr $i >= 0] } proc IsEmptyStack {{OtherStack ""}} { global OurCurrentStack OurStacks if {$OtherStack!=""} { set OurCurrentStack $OtherStack } if {! [info exists OurCurrentStack] || $OurCurrentStack==""} { return 1 } if { ! [info exists OurStacks($OurCurrentStack,StackHeight)]} { return 1 } set h [set OurStacks($OurCurrentStack,StackHeight)] return [expr $h==0] } proc IsItDNA {Sequence} { Wup "Verifie si une sequence est nucleique ou pas" if {[regexp -nocase {[^ACTGURYKMSWBDHVN]} $Sequence]} {return "-1"} else {return "1"} } proc IsLeaf {Tree} { return [DataSet isLeaf $Tree] } proc IsNuc {Sequence {ForceNucProt ""}} { if {$ForceNucProt!=""} { return ! [regexp -nocase "P" $ForceNucProt] } return ! [IsProt $Sequence] } proc IsPk {Text} { return [regexp {^[0-9]+$} $Text] } proc IsProt {Sequence {ForceNucProt ""}} { if {$ForceNucProt!=""} { set IsProt [regexp -nocase "P" $ForceNucProt] } else { set Nucs [join [PossibleNucleotides] ""] set RX "\[^$Nucs\]" set IsProt [regexp $RX $Sequence] } return $IsProt } proc IsRealAgent {a1 n1 a2 n2} { global Sequences TAg Sref LSOrdali lassign [Seq2AbsRef $n1 $a1] d1 f1 lassign [Seq2AbsRef $n2 $a2] d2 f2 if {$d1 == $d2 && $f1 == $f2} { return "*" } else { return " " } set sf1 [string range $Sref($n1) $d1 $f1] set sf2 [string range $Sref($n2) $d2 $f2] if {$sf1 eq $sf2} { return 1 } else { return 0 } } proc IsRetchip {Nom} { set Retchip [ExtraitInfo $Nom "Retchip:"] return [string equal -nocase $Retchip "Yes"] } proc IsScalar_M {M} { return [expr {![IsVector_M $M] && [IsScalar_V [V_fromM $M]]}] } proc IsScalar_V {V} { return [expr {[llength $V]==1}] } proc IsSqlNull {Valeur} { if {$Valeur==""} { return 1 } return 0 } proc IsVector_M {M} { return [expr [llength $M]!=1] } proc IsoleEtAfficheUnDomaineNucleique {{NomOuTexte ""} {DP ""} {FP ""}} { set SeqNuc [IsoleUnDomaine $NomOuTexte $DP $FP "RetournerSeqNuc"] return [AfficheVariable $SeqNuc "AvecFormate"] } proc IsoleLesLignesDuFichier {Fichier} { if {![file exists $Fichier]} {return ""} set NouveauContenu "" foreach Ligne [LesLignesDuFichier $Fichier] { if { [regexp -nocase "^AFFX" $Ligne] || [regexp -nocase "^Msa" $Ligne] || [regexp -nocase "^YEL" $Ligne]} { append NouveauContenu "$Ligne\n" } } Espionne $NouveauContenu if {[OuiOuNon "Voulez vous sauvez ces lignes\?"]} { set NewFile [SauveLeFichierSous] Sauve $NouveauContenu dans $NewFile } return "$NouveauContenu" } proc IsoleLesLignesDuFichierContenant {Fichier Query} { if {![file exists $Fichier]} {return ""} set NouveauContenu "" foreach Ligne [LesLignesDuFichier $Fichier] { if {![regexp -nocase $Query $Ligne]} {continue} append NouveauContenu "$Ligne\n" } Espionne $NouveauContenu if {[OuiOuNon "Voulez vous sauvez ces lignes\?"]} { SauveLeFichierSous } return "$NouveauContenu" } proc IsoleUnDomaine {{NomOuTexte ""} {DP ""} {FP ""} {QuoiRetourner ""}} { JeMeSignale Wup "QuoiRetourner can be RetournerSeqNuc RetournerSeqPro RetournerSeqNucAndSeqPro" Wup "QuoiRetourner can be RetournerSeqNucIfOK ..." Wup "otherwize QuoiRetourner is the list of the 2 filenames" if {[EstUnPAB $NomOuTexte]} { set Nom $NomOuTexte set FicPro "[RepertoireDuGenome]/prottfa/$Nom" set FicNuc "[RepertoireDuGenome]/nuctfa/$Nom" set SeqPro [QueLaSequenceDuFichierTFA $FicPro] set SeqNuc [QueLaSequenceDuFichierTFA $FicNuc] set Alias [AliasPourClonage $Nom] } elseif {[regexp "\n" $NomOuTexte] && [regexp {^>} $NomOuTexte]} { set FicNuc "" set FicPro "" set TFA $NomOuTexte set SeqNuc [QueLaSequenceDuTexteTFA $TFA] set LongNuc [string length $SeqNuc] set SeqPro [SeqNucToSeqPro $SeqNuc] set Entete [EnteteDuTexteTFA $TFA] scan $Entete "%s" Access regsub ">" $Access "" Access set Nom $Access set Alias $Access } set LongProt [string length $SeqPro] while {$FP==""} { FaireLire "Please enter start and stop position for the protein\n \(or 'bases nnn nnn' if nuc)" if {$DP==""} { set DP 1 } set FPpropose $LongProt set DN [expr ($DP-1)*3+1] set FN [expr ($FPpropose-1)*3+3] set SS [Entre "$DP $LongProt bases $DN $FN"] if {$SS==""} { if {[OuiOuNon "Do I cancel ?"]} { return "" } else { continue } } if {[regexp -nocase {^ *b} $SS]} { catch {unset SeqPro} scan $SS "%s %d %d" bidon DNlu FNlu if {$DNlu<$FNlu} { if {($QuoiRetourner!="RetournerSeqNuc" && $QuoiRetourner!="RetournerSeqNucIfOK") && [expr ($FNlu-$DNlu+1)%3]!=0} { FaireLire "$DNlu $FNlu doesn't correspond to a n*3 bases sequence. Please enter again." continue } set SeqN [string range $SeqNuc [expr $DNlu-1] [expr $FNlu-1]] set DPlu [expr ($DNlu-3)/3+1] set FPlu [expr ($FNlu-1)/3+1] } else { if {($QuoiRetourner!="RetournerSeqNuc" && $QuoiRetourner!="RetournerSeqNucIfOK") && [expr ($DNlu-$FNlu+1)%3]} { FaireLire "$DNlu $FNlu doesn't correspond to a n*3 bases sequence. Please enter again." continue } set SeqN [string range $SeqNuc [expr $FNlu-1] [expr $DNlu-1]] set SeqN [NucToReverseAndComplementNuc $SeqN] set LongSeqN [string length $SeqNuc] set DNlu [expr $LongSeqN-$DNlu+1] set FNlu [expr $LongSeqN-$FNlu+1] set DPlu [expr ($DNlu-3)/3+1] set FPlu [expr ($FNlu-1)/3+1] } } else { set DPlu 99999 set FPlu -9999 scan $SS "%d %d" DPlu FPlu if {$FPlu<$DPlu && [OuiOuNon "Do I reverse and complement the sequence $FPlu $DPlu ?"]} { catch {unset SeqPro} set BonneFin [strign length $SeqNuc] while {[expr $BonneeFin%3]} { incr BonneFin -1 } set SeqNuc [string range $SeqNuc 0 [expr $BonneFin-1]] set SeqNuc [NucToReverseAndComplementNuc $SeqNuc] set SeqPro [SeqNucToSeqPro $SeqNuc] set NowLongPro [string length $SeqPro] set DPlu [expr $NowLongProt-$DPlu+1] set FPlu [expr $NowLongProt-$FPlu+1] Espionne "$DNlu $FNlu $DPlu $FPlu" } } if {[regexp "RetournerSeqNuc" $QuoiRetourner] && 1<=$DNlu && $DNlu<$FNlu && $FNlu<=$LongNuc} { set DN $DNlu ; set FN $FNlu ; break } if {1<=$DPlu && $DPlu<$FPlu && $FPlu<=$LongProt} { set DP $DPlu ; set FP $FPlu ; break } FaireLire "Please choose correct limits between 1 and $LongProt" } if {[info exists SeqN]} { set SeqP [SeqNucToSeqPro $SeqN] } else { set NucOnly 1 if {[regexp "b" $DP]} { regsub "b" $DP "" DN set NucOnly 1 } else { set DN [expr ($DP-1)*3+1] } if {[regexp "b" $FP]} { regsub "b" $FP "" FN set NucOnly 1 } else { set FN [expr ($FP-1)*3+3] } set SeqN [string range $SeqNuc [expr $DN-1] [expr $FN-1]] if { $NucOnly } { set SeqP "" set FicP "" } else { if {[info exists SeqPro]} { set SeqP [string range $SeqPro [expr $DP-1] [expr $FP-1]] set SeqPVerif [SeqNucToSeqPro $SeqN] if { ! [string equal -nocase $SeqP $SeqPVerif]} { if {[OuiOuNon "$DN $FN\n$SeqP\n$SeqPVerif\n Your protein sequence is not the exact translation of the nucleic.\n Do I cancel ?"]} { return "" } } } else { set SeqP [SeqNucToSeqPro $SeqN] } } } if {$QuoiRetourner=="RetournerSeqNuc"} { return $SeqN } if {$QuoiRetourner=="RetournerSeqPro"} { return $SeqP } if {$QuoiRetourner=="RetournerSeqNucAndSeqPro"} { return [list $SeqN $SeqP] } regsub -all {.} $SeqP "& " SeqP3 set Retour [AfficheVariable "$SeqP3\n$SeqN" "AvecRetour" ""] if {$Retour==""} { return "" } if {$QuoiRetourner=="RetournerSeqNucIfOK"} { return $SeqN } if {$QuoiRetourner=="RetournerSeqProIfOK"} { return $SeqP } if {$QuoiRetourner=="RetournerSeqnucAndSeqProIfOK"} { return "$SeqN $SeqP" } while { ! [OuiOuNon "Do I save the prot and nuc in .tfa files ?"]} { if {[OuiOuNon "Do I cancel ?"]} { return "" } } set FicN "$Alias-$DP-$FP.nuctfa" set FicN [FichierPourSaveAs $FicN] if { ! $NucOnly } { set FicP "$Alias-$DP-$FP.prottfa" set FicP [FichierPourSaveAs $FicP] set TfaP [SequenceFormatTFA $SeqP "$Alias-$DP-$FP extracted from prot $Nom" "protbrut"] if {$TfaP==""} { return "" } Sauve $TfaP dans $FicP } set TfaN [SequenceFormatTFA $SeqN "$Alias-$DP-$FP extracted from nuc $Nom bases $DN to $FN" "protbrut"] if {$TfaN==""} { return "" } Sauve $TfaN dans $FicN return [list $FicP $FicN] } proc Italic_WordML {} { return "" } proc ItemHTMLFermant {Item} { global ItemHTMLFermant if {[info exists ItemHTMLFermant($Item)]} { return $ItemHTMLFermant($Item) } set Item [string tolower $Item] set LesSimples {area img ox os oc ac de gn id pn rect polyline path} if {[lsearch -exact $LesSimples $Item]>=0} { return ">" } # if {[string equal -nocase $Item "LI"]} { return "
  • " } return "" } proc Iterator {Name Action args} { global Iterator #rR Il arrive qu'on veuille imbriquer des boucles ... c'est fastidieux ... #rR Iterator permet de la faire en deux lignes #rR Il faut d'abord le créer : #rR set Name [Iterator New Init $L0 $L1 $L2] #rR Puis l'utiliser : #rR while {[Iterator $Name Next v0 v1 v2]} { ... } #rR attention les v sont sans $ #rR Le dernier indice (v2) va le plus vite !!!!!!!!!!!!!!!!!!!! #rR Attention les listes sont numerotees de 0 a 2 a l'exterieur (pour le user) #rR mais elles sont indexees de 2 a 0 dans la proc (en interne) #rR Iterator $Name Reset #rR Iterator $Name Destroy #rR set Info [Iterator Iterator Get ListOf Name] #rR set Info [Iterator $Name Get Current 2] #rR current index de L2 #rR set Info [Iterator $Name Get Current All] #rR tous les current L0 L1 L2 #rR set Info [Iterator $Name Get Max 0] #rR set Info [Iterator $Name Get Max All] #rR set Info [Iterator $Name Get Total Iter] #rR Pour les puristes on pourrait le faire en une ligne ... : #rR while {[Iterator [Iterator New Init $L0 $L1 $L2] Next v0 v1 v2]} { ... } if {$Action=="Get"} { set Qui [lindex $args 0] set Quoi [lindex $args 1] if {[regexp {^[0-9]+$} $Quoi]} { set Quoi [expr [llength $Iterator($Name,ListOf,Index)] - $Quoi -1] } if {[info exists Iterator($Name,$Qui,$Quoi)]} { return $Iterator($Name,$Qui,$Quoi) } if {$Quoi=="All"} { set LeAll {} foreach iL [RetourneLaListe $Iterator($Name,ListOf,Index)] { lappend LeAll $Iterator($Name,$Qui,$iL) } return $LeAll } return "" } if {$Action=="Next"} { set LesP $args set LesP [RetourneLaListe $LesP] set iP 0 if {$Iterator($Name,WaitsFor,Start)} { set incrNext 0 } else { set incrNext 1 } set Iterator($Name,WaitsFor,Start) 0 foreach aP $LesP { upvar $aP P set k $Iterator($Name,Current,$iP) incr k $incrNext set incrNext 0 if {$k>$Iterator($Name,Max,$iP)} { set k 0 ; set incrNext 1 } set P [lindex $Iterator($Name,List,$iP) $k] set Iterator($Name,Current,$iP) $k incr iP } if { $incrNext==0 } { return 1 } foreach iP Iterator($Name,ListOf,Index) { set Iterator($Name,Current,$iP) 0 } return 0 } if {$Name=="New"} { set Name [NomDe "iterator"] set Action "Init" } if { $Action=="Init"} { set LesL $args set LesL [RetourneLaListe $LesL] if {[info exists Iterator($Name,ListOf,Index)]} { foreach L $Iterator($Name,ListOf,Index) { unset Iterator($Name,List,$iL) unset Iterator($Name,Max,$iL) unset Iterator($Name,Current,$iL) } unset Iterator($Name,ListOf,Index) } set iL 0 set Total 1 foreach L $LesL { lappend Iterator($Name,ListOf,Index) $iL set Iterator($Name,List,$iL) $L set Iterator($Name,Max,$iL) [expr [llength $L] - 1] set Iterator($Name,Current,$iL) 0 set Total [expr $Total * [llength $L]] incr iL } set Iterator($Name,Total,Iter) $Total lappend Iterator(Iterator,ListOf,Name) $Name set Iterator($Name,WaitsFor,Start) 1 return $Name } if { $Action=="Reset"} { foreach iP $Iterator($Name,ListOf,Index) { set Iterator($Name,Current,$iP) 0 } set Iterator($Name,WaitsFor,Start) 1 return $Name } if { $Action=="Destroy"} { if {[info exists Iterator($Name,ListOf,Index)]} { foreach iL $Iterator($Name,ListOf,Index) { unset Iterator($Name,List,$iL) unset Iterator($Name,Max,$iL) unset Iterator($Name,Current,$iL) } unset Iterator($Name,ListOf,Index) unset Iterator($Name,WaitsFor,Start) return "" } set i [lsearch $Iterator(Iterator,ListOf,Name) $Name] set Iterator(Iterator,ListOf,Name) [lreplace $Iterator(Iterator,ListOf,Name) $i $i] return 1 } return "" } 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 ItsOligos {Selection {NA ""}} { return [ShowItsOligos $Selection $NA "GetThem"] } proc ItsPPCR {Selection {NA ""}} { return [ShowItsPPCR $Selection $NA "GetThem"] } proc JArreteDeBosser {Moi} { global Bosseurs if { ! [file exists $Moi]} { return 0 } file delete -force $Moi set Texte [set Bosseurs($Moi)] unset Bosseurs($Moi) unset Bosseurs($Texte) return 1 } proc JaiCommandeAuMagos {f template maxSeq filter gapped maxE db} { global PipeCollection global Defauts global OuiOuNonToujoursParDefaut ; set OuiOuNonToujoursParDefaut 1 global EspionneNon ; set EspionneNon 1 global FaireLireNon ; set FaireLireNon 1 global EntreToujoursDefaut ; set EntreToujoursDefaut 1 global JavaDisponible ; set JavaDisponible 0 NousAllonsAuBoulot "[MagosDir]/Depot" set PipeCollection 0 LesDefautsDuPipe LesDefauts LesDefautsDuPipe "File,file" $f #LesDefautsDuPipe "File,log" "verbose" LesDefautsDuPipe "Blast,d" $db LesDefautsDuPipe "Blast,v" 500 LesDefautsDuPipe "Blast,b" 500 LesDefautsDuPipe "Blast,b" 500 LesDefautsDuPipe "Filter,maxseq" $maxSeq LesDefautsDuPipe "Filter,expect" $maxE #LesDefautsDuPipe "Filter,method" strips LesDefautsDuPipe "Filter,varsplic" 1 LesDefautsDuPipe "Etapes,cluspack" 0 LesDefautsDuPipe "Etapes,macsims" 0 if {$filter == 0} { LesDefautsDuPipe "Blast,F" F } else { LesDefautsDuPipe "Blast,F" T } if {$gapped == 0} { LesDefautsDuPipe "Blast,g" F } else { LesDefautsDuPipe "Blast,g" T } # remaniement du fichier d'entree si le nom contient des caracteres speciaux set NQuery [VerifieInputTfa $f] puts "nquery est $NQuery" set log "$f-magos.log" set BestPdb 0 if {$template != "none"} { # si un template est precise if {[regexp {[a-z]} [string index $template end]]} { # si le dernier caractere est en minuscule, on le met en majuscule set template [string toupper $template end] } set BestPdb "PDB:$template" } else { # si pas de template catch {set BestPdb [PSSMpour3D $f]} } if {$BestPdb != 0} { LesDefautsDuPipe "Filter,addpdb" $BestPdb } #Espionne "best est $BestPdb" catch {[PipeGrid]} Message if { $NQuery == ""} { set NQuery "query" } set fl [open $log w] set FATarer {} # Remplissage du fichier log et creation du tar if {[file exists $f.blastp] && [file exists $f.copains]} { puts $fl "blastp = ok" lappend FATarer "$f.blastp" } else { set Lf [glob -nocomplain $f*] foreach e $Lf { file delete -force $e } OnRevientDuBoulot set url "http://pig-pbil.ibcp.fr/cgi-bin/magos/run_geno3d.py?id=XXXX&status=false" set tmp [WgetzSurWeb $f $url] exit } # Selection du meilleur msf catch {set bmsf [VerifieBestMsf $f]} # si on a 1 best MSF if {$bmsf != "no file"} { if {$bmsf == ".leon"} { # Verifie la presence du BestPDB si le meilleur msf est leon set test [VerifiePresencePDB ${f}.leon.msf $BestPdb] if {$test == 0} { catch {set bmsf [MeilleurMsfClRas $f]} } } file copy -force "${f}${bmsf}.msf" "$f.best.msf" set bmsf "$f.best.msf" puts $fl "macs = ok" lappend FATarer $bmsf # Mise en evidence des proteines impliquees dans les maladies genetiques humaines LitLeTFAMagos "$f.copains" LAcc Seqs FiltreMaladies $f $LAcc if {[file exists "$f.disease"]} { puts $fl "disease = ok" lappend FATarer "$f.disease" } # creation de l alignement de la query avec le template if {$BestPdb != 0} { catch {CreeEmpreinte $f $NQuery $BestPdb} if {[file exists "$f.empreinte"]} { puts $fl "empreinte = ok" lappend FATarer "$f.empreinte" } } # Calcul du MACSIM #catch {exec /biolo/macsim/query2first $f.tmp.xml $NQuery $f.xml} Message catch {eval exec [MacsimsExe] $bmsf "$f.tmp"} Message catch {eval exec /biolo/macsim/query2first $f.tmp.xml $NQuery $f.xml} Message # ajout des conservations dans le fichier macsims if {[file exists "$f.xml"]} { catch {[AjoutConservationMacsims $f.xml Cluster]} puts $fl "macsim = ok" lappend FATarer "$f.xml" } } close $fl if {[file exists $log]} { lappend FATarer $log } eval exec tar -cf "results-${f}.tar" $FATarer set Frayon [file join "/genomics" g6 Magos EnRayon "results-${f}.tar"] file rename -force results-${f}.tar $Frayon set Lf [glob -nocomplain $f*] foreach e $Lf { file delete -force $e } OnRevientDuBoulot set url "http://pig-pbil.ibcp.fr/cgi-bin/magos/run_geno3d.py?id=XXXX" set tmp [WgetzSurWeb $f $url] exit } proc JalviewHtml {FichierMacsim {JalviewJunkdir ""} {JalviewJunkdirUrl ""}} { set CreateWebFile 0 if {0 && [EstUnPAB $FichierMacsim] && $JalviewJunkdir=="" && $JalviewJunkdirUrl=="" } { set CreateWebFile 1 set Nom $FichierMacsim set FichierJalviewHtml "[RepertoireDuGenome]/web/$Nom.jalview.html" if {[UseExistingJalviewHtml] && [FileExists $FichierJalviewHtml]} { return [ContenuDuFichier $FichierJalviewHtml] } } if {[EstUnPAB $FichierMacsim]} { set FichierMacsim "[RepertoireDuGenome]/macsimXml/$FichierMacsim" } if {$JalviewJunkdir ==""} { set JalviewJunkdir "[HomeRipp]/www/JalviewJunkdir" } if {$JalviewJunkdirUrl==""} { set JalviewJunkdirUrl "/JalviewJunkdir" } if {[FileAbsent $FichierMacsim]} { # if {[regexp "^/" $FichierMacsim]} { return "" } if {[FileExists "$FichierMacsim.xml"]} { set FichierMacsim "$FichierMacsim.xml" } else { if {[FileExists "[RepertoireDuGenome]/$FichierMacsim"] } { set FichierMacsim "[RepertoireDuGenome]/$FichierMacsim" } } } if {[FileAbsent $FichierMacsim] && [FileExists "$FichierMacsim.gz"]} { set FichierMacsim "$FichierMacsim.gz" } if {[FileAbsent $FichierMacsim]} { return "Sorry, there is no file $FichierMacsim" } set Macsim [ContenuDuFichier $FichierMacsim] NousAllonsAuBoulot $JalviewJunkdir set Racine [TmpFile "macsim2jal" "./"] regsub {\./} $Racine "" Racine Sauve $Macsim dans $Racine.xml if {[catch {exec /biolo/macsim/macsim2jal "$Racine.xml" $Racine > [HomeRipp]/lolo.log} Message]} { OnRevientDuBoulot return "Error during macsim2jal with message=$Message=" } file delete -force $Racine.xml if {[FileAbsent $Racine.html]} { file delete -force $Racine.txt file delete -force $Racine.tfa } if {[FileAbsent $Racine.html]} { return "I didn't find $Racine.html" } if {$CreateWebFile} { set WebDir [file dirname $FichierJalviewHtml] file mkdir $WebDir regsub {.html$} $FichierJalviewHtml ".tfa" FichierJalviewTfa regsub {.html$} $FichierJalviewHtml ".txt" FichierJalviewTxt set Html [ContenuDuFichier $Racine.html] regsub -all "value=\"$Racine" $Html "value=\"$Nom.jalview" Html Sauve $Html dans $FichierJalviewHtml file copy -force $Racine.tfa $FichierJalviewTfa file copy -force $Racine.txt $FichierJalviewTxt if {[UseExistingJalviewHtml]} { return [JalviewHtml $Nom] } } set Html [ContenuDuFichier $Racine.html] OnRevientDuBoulot regsub -all "value=\"$Racine" $Html "valuetype=\"ref\" value=\"$JalviewJunkdirUrl/$Racine" Html regsub -all {archive=[^>]+\">} $Html "archive=\"[LbgiUrl]/Jalview/jalviewApplet.jar\">" Html return $Html } proc JavOO {{What ""} {Query ""} {Resource ""} {IP ""} {Port ""} {User ""} {Password ""}} { if {$What==""} { set What "Data" } # if {$Query==""} { set Query "select \"Nom des participants\" from LiLaboDef order by \"Nom des participants\";" } # if {$Resource==""} { set Resource "ListeLabo" } if {$Query==""} { set Query "select * from GUCY2D;" } if {$Resource==""} { set Resource "LCA_GUCY2D" } if {$IP==""} { set IP "olo" } if {$Port==""} { set Port 18000 } set CanalJavOO [socket $IP $Port] puts $CanalJavOO "" puts $CanalJavOO "123" puts $CanalJavOO "$Resource" puts $CanalJavOO "$Query" puts $CanalJavOO "" puts $CanalJavOO "" flush $CanalJavOO Espionne $Query set LaReponse {} while {[gets $CanalJavOO Ligne]>=0} { if {[regexp "" $Ligne]} { break } lappend LaReponse $Ligne } set Reponse [join $LaReponse "\n"] if {$What=="Data" || $What=="DataHtml"} { set Reponse [ValeurDeLaBalise "data" Reponse "NePasRogner"] } if {$What=="DataHtml"} { set Reponse "
    $Reponse
    " } return $Reponse } proc JeCommenceABosser {} { set LesBoulots [list "FantomisePourTous {} AskWhereToBegin" "EtudeCodonStart AskWhereToBegin" "CoupeAuBonMetPourTous AskWhereToBegin" ] set Boulot [ChoixParmi $LesBoulots] if {$Boulot==""} { return "" } JeVaisBosser $Boulot eval $Boulot } proc JeMeSignale {{Etat ""}} { global FenetreDePatience NiveauFenetreDePatience global JeMeSignaleInactif set Commande "\[[info level -1]\]" if { $Etat == "Get" } { return $Commande } set CommandeComplete "$Commande $Etat" if { $Etat == "GetAll" } { return $CommandeComplete } if { [info exists JeMeSignaleInactif] && $JeMeSignaleInactif } { return } if { ! [info exists NiveauFenetreDePatience] } { set NiveauFenetreDePatience 0 } Warne $CommandeComplete set Commande [lindex [split $CommandeComplete " "] 0] if { $Etat == "Patience" } { incr NiveauFenetreDePatience set FenetreDePatience($NiveauFenetreDePatience) [Patience $Commande] return [set FenetreDePatience($NiveauFenetreDePatience)] } if { $Etat == "FinPatience" } { Warne [set FenetreDePatience($NiveauFenetreDePatience)] destroy [set FenetreDePatience($NiveauFenetreDePatience)] incr NiveauFenetreDePatience -1 update return "" } return "" } proc JeSuisDescendantDe {As B} { regsub -all {[ \,;\n\t]+} $As "," As set As [split [string trim $As ","] ","] set iB [Tax $B TaxId] foreach A $As { set iA [Tax $A TaxId] set iC [AncetreCommun $iA $iB] Espionne "$iA $iB $iC" if {$iC==$iA} { return 1 } } return 0 } proc JeSuisTonAncetre {Parent Enfant} { #rR petite magouille car les clades excavata et archaeplastida n'existent pas set FichierComposition "[RepertoireDuGenome]/bilan/CompositionDuClade$Parent.txt" if {[file exists $FichierComposition]} { foreach Mot [LesMotsDuTexte [ContenuDuFichier $FichierComposition]] { if {[JeSuisTonAncetre $Mot $Enfant]} { return 1 } } return 0 } set ParId [Tax $Parent "TaxId"] set EnfId [Tax $Enfant "TaxId"] set Classe [TaxClass $EnfId "All" "Forward" "TaxId"] # regsub -all {[ ;]+} $Classe " " Classe set LesAncetres [split $Classe " ;"] if {[lsearch $LesAncetres $ParId]<0} { return 0 } return 1 } proc JeTesteLeNouveauPipeGrid {} { global PipeCollection global OrdBinDir global DefautsPipe set PipeCollection 0 LesDefautsDuPipex PipeGrid return 1 } proc JeVaisBosser {Texte} { global Bosseurs set Moi [TmpFile Bosse] set Bosseurs($Texte) $Moi set Bosseurs($Moi) $Texte return $Moi } proc JeuDeTestARPAnno {} { Wup "Lance ARPAnno sur toutes les ARPs de l article" set RepARP "[RepARPAnno]" set RepARP "/genomics/g1/ARP/alignement_ARP/ARPAnno" set RepTFA "$RepARP/ARP_TFA" set RepTFA "$RepARP/ARP_TFA_lesarps" #set RepTFA "$RepARP/ARP_TFA_validation" set LesFichiersTFA [glob -nocomplain -directory $RepTFA "*.tfa"] #set LesFichiersTFA [lrange $LesFichiersTFA 0 5] Espionne "$LesFichiersTFA [llength $LesFichiersTFA]" set i 0 foreach TFA $LesFichiersTFA { set VraiAccess "[file tail $TFA]" regsub -nocase ".tfa$" $VraiAccess "" VraiAccess set Categorie [InterrogeLesInfosDesARPs [string toupper $VraiAccess] Categorie] if { $Categorie == ""} { set Categorie "Unknown" } else { regsub -all {\-\-\-\-} $Categorie "" Categorie regsub "Les" $Categorie "" Categorie } if {![regexp -nocase {ARP[0-9]+} $Categorie]} {continue} if {![info exists TabARP($Categorie,LesAccess)]} { set TabARP($Categorie,LesAccess) "" lappend TabARP($Categorie,LesAccess) $VraiAccess } else { lappend TabARP($Categorie,LesAccess) $VraiAccess } set VraiFamille "$Categorie" set Texte [list $VraiAccess $VraiFamille] incr i #ARPAnno $TFA $VraiFamille ARPAnno $TFA set LesVraisFamilles [LesResultatsARPAnalyses "LesFamilles" "LaValeurMerci"] foreach Famille $LesVraisFamilles { if {[regexp -nocase {Actin|Orphan} $Famille]} {continue} set Score_PId [LesResultatsARPAnalyses "$Famille,Score_PId_ini" "LaValeurMerci"] set Score_Cover [LesResultatsARPAnalyses "$Famille,Score_Cover_ini" "LaValeurMerci"] set Score_Residue [LesResultatsARPAnalyses "$Famille,Score_Residue_ini" "LaValeurMerci"] set Score_Domain [LesResultatsARPAnalyses "$Famille,Score_Domain_ini" "LaValeurMerci"] foreach V [list Score_PId Score_Cover Score_Residue Score_Domain] { if { [set $V] == "No"} { continue } elseif {[set $V] == ""} { set [set V] "No" } else { set [set V] [format "%5.1f" [set $V]] } } if {$VraiFamille=="$Famille"} { set FamilleOk "1" } else { set FamilleOk "0" } foreach V [list $Famille $Score_PId $Score_Cover $Score_Residue $Score_Domain] { lappend Texte $V } if {![info exists TabARP($Famille)]} { set TabARP($Famille) "" lappend TabARP($Famille) $Texte } else { lappend TabARP($Famille) $Texte } } set Texte [join $Texte "\t"] set TabARP($VraiAccess) $Texte #Espionne "$Texte" #On vide la memoire LesResultatsARPAnalyses UnsetAll DechargeLesResidusDesARPs DechargeLesDomainesDesARPs } foreach Famille $LesVraisFamilles { if {[info exists TabARP($Famille,LesAccess)]} { Espionne "$Famille\t[llength [set TabARP($Famille,LesAccess)]]" foreach Acc [set TabARP($Famille,LesAccess)] { if {[info exists TabARP($Acc)]} { Espionne "[set TabARP($Acc)]" } } } } Espionne "$i" return "" } proc JeuDeVerifARPAnno {} { Wup "Lance ARPAnno sur toutes les ARPs trouvees par DbW" set RepARP "[RepARPAnno]" set RepARP "/genomics/g1/ARP/alignement_ARP/ARPAnno" set RepTFA "$RepARP/ARP_TFA" set RepTFA "$RepARP/ARP_TFA_lesarps" set RepTFA "$RepARP/ARP_TFA_validation" set LesFichiersTFA [glob -nocomplain -directory $RepTFA "*.tfa"] #set LesFichiersTFA [lrange $LesFichiersTFA 0 5] Espionne "$LesFichiersTFA [llength $LesFichiersTFA]" set i 0 foreach TFA $LesFichiersTFA { set VraiAccess "[file tail $TFA]" regsub -nocase ".tfa$" $VraiAccess "" VraiAccess set Categorie [InterrogeLesInfosDesARPs [string toupper $VraiAccess] Categorie] if { $Categorie == ""} { set Categorie "Unknown" } else { regsub -all {\-\-\-\-} $Categorie "" Categorie regsub "Les" $Categorie "" Categorie } #if {![regexp -nocase {ARP[0-9]+} $Categorie]} {continue} if {![info exists TabARP($Categorie,LesAccess)]} { set TabARP($Categorie,LesAccess) "" lappend TabARP($Categorie,LesAccess) $VraiAccess } else { lappend TabARP($Categorie,LesAccess) $VraiAccess } set VraiFamille "$Categorie" set Texte [list $VraiAccess $VraiFamille] incr i #ARPAnno $TFA $VraiFamille ARPAnno $TFA "" 1 set LesVraisFamilles [LesResultatsARPAnalyses "LesFamilles" "LaValeurMerci"] foreach Famille $LesVraisFamilles { if {[regexp -nocase {Actin|Orphan} $Famille]} {continue} set Impact_Score_PId "0.2" set Impact_Score_Cover "0.1" set Impact_Score_Residue "0.4" set Impact_Score_Domain "0.3" set Score_PId [LesResultatsARPAnalyses "$Famille,Score_PId_ini" "LaValeurMerci"] set Score_Cover [LesResultatsARPAnalyses "$Famille,Score_Cover_ini" "LaValeurMerci"] set Score_Residue [LesResultatsARPAnalyses "$Famille,Score_Residue_ini" "LaValeurMerci"] set Score_Domain [LesResultatsARPAnalyses "$Famille,Score_Domain_ini" "LaValeurMerci"] set Score [LesResultatsARPAnalyses "$Famille,Score" "LaValeurMerci"] foreach V [list Score_PId Score_Cover Score_Residue Score_Domain Score] { if { [set $V] == "No"} { set [set V] [format "%5.1f" "0.0"] continue } elseif {[set $V] == ""} { set [set V] [format "%5.1f" "0.0"] } else { set [set V] [format "%5.1f" [set $V]] } } set ScoreNoRedirect [expr {(($Score_PId * $Impact_Score_PId) + ($Score_Cover * $Impact_Score_Cover)+ ($Score_Residue * $Impact_Score_Residue) + ($Score_Domain * $Impact_Score_Domain)) * 1.0}] foreach V [list Score_PId Score_Cover Score_Residue Score_Domain Score ScoreNoRedirect] { if { [set $V] == "No"} { continue } elseif {[set $V] == ""} { set [set V] "No" } else { set [set V] [format "%5.1f" [set $V]] } } if {$VraiFamille=="$Famille"} { set FamilleOk "1" } else { set FamilleOk "0" } foreach V [list $Famille $Score $ScoreNoRedirect $Score_PId $Score_Cover $Score_Residue $Score_Domain] { lappend Texte $V } if {![info exists TabARP($Famille)]} { set TabARP($Famille) "" lappend TabARP($Famille) $Texte } else { lappend TabARP($Famille) $Texte } } set Texte [join $Texte "\t"] Espionne "$Texte" set TabARP($VraiAccess) $Texte #Espionne "$Texte" #On vide la memoire LesResultatsARPAnalyses UnsetAll DechargeLesResidusDesARPs DechargeLesDomainesDesARPs } foreach Famille $LesVraisFamilles { if {[info exists TabARP($Famille,LesAccess)]} { Espionne "$Famille\t[llength [set TabARP($Famille,LesAccess)]]" foreach Acc [set TabARP($Famille,LesAccess)] { if {[info exists TabARP($Acc)]} { Espionne "[set TabARP($Acc)]" } } } } Espionne "$i" return "" } proc Json {} { source "[HomeRipp]/Desktop/exp_json.tcl" Espionne [info procs ::json::*] # set TJ [ContenuDuFichier "[HomeRipp]/json.txt"] set TJ [ContenuDuFichier "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=24026985&retmode=json"] set TJ [encoding convertfrom "utf-8" $TJ] set D [::json::json2dict $TJ] return $D Espionne $TJ set D [json::json2prettydict $TJ] Espionne $D return $D exit set Pretty [PrettyDict $D] Espionne $Pretty exit set d [string first "Stoetzel" $TJ] set f [expr $d +220] Espionne [string range $TJ $d $f] exit # regsub -all {u'([^']*)'} $TJ {"\1"} TJ # Espionne [string range $TJ 0 end] set D [::json::json2dict $TJ] return $D Espionne $D exit dict for {k v} D { Espionne "k=$k" Espionne "v=$v" } # Espionne $D exit } proc JulieDefinition {Nom LesDEJ} { set Fen [SeeAby Show $Nom] set DEJ [ChoixParmiJoli $LesDEJ] if {$DEJ==""} { if {[OuiOuNon "Do we stop ?"]} { return -1 } } set Info [Informe $Nom "DEJ: $DEJ"] after 1000 destroy $Fen return $Info } proc JulieDefinitionPourTous {} { set LesDEJ [LesLignesDuFichier "[GscopeDir]/julies-definitions.txt"] set LesBeauxDEJ {} foreach DEJ $LesDEJ { regsub -all "\t" $DEJ " " DEJ while {[regexp " " $$DEJ]} { regsub -all " " $DEJ " " DEJ } lappend LesBeauxDEJ $DEJ } foreach DEJ $LesBeauxDEJ { scan $DEJ "%s" A set DEJdeA "" regsub "$A " $DEJ "" DEJdeA lappend LesDEJde($A) $DEJdeA } foreach Nom [ListeDesPABs] { set DEJ [ExtraitInfo $Nom "DEJ:"] if {$DEJ!=""} { continue } set Alias [Alias $Nom] set AliasCourt $Alias regsub "_.*" $Alias "" AliasCourt if {[info exists LesDEJde($AliasCourt)]} { set LesPossibles [lsort -unique $LesDEJde($AliasCourt)] set FenSeeAby "Bidon" if {[llength $LesPossibles]>1} { set FenSeeAby [SeeAby Show $Nom] } set DEJok [ChoixParmi $LesPossibles] set RV [ExtraitInfo $Nom "RV:"] ScanLaListe [split $RV ""] R V set RefVar "Ref$R" if {$V!=0} { set RefVar "$RefVar V$V" } set Info [Informe $Nom "DEJ: $RefVar $DEJok"] if {[winfo exists $FenSeeAby]} { after 1000 destroy $FenSeeAby } if {$Info!=""} { continue } if {[OuiOuNon "Do we stop ."]} { break } } set Retour [JulieDefinition $Nom $LesBeauxDEJ] if {$Retour==-1} { break } } } proc JumeauLesAccRSEtUG_Affymetrix {PABOuRefSeq {Quoi RefSeq}} { Wup "Permet de faire savoir qui est Jumeau de qui a paetir des infos de LesAccDefRefSeqUnigene de la puce Affymetrix" Wup "Pour le projet Gscope Affy3Marker donnera les ref RefSeq et Unigene du PAB" #$PAB RefSeq - Rend les RefSeq associes pour le PAB #$PAB Unigene - Rend les Unigene associes pour le PAB #$PAB LesPAB - Rend les PABs associes pour le PAB global JumeauLesAccRSEtUG if {$Quoi != "PAB" && $Quoi != "RefSeq" && $Quoi != "Unigene" && $Quoi != "LesPAB"} {return ""} if {[info exists JumeauLesAccRSEtUG($PABOuRefSeq)]} { if {[info exists JumeauLesAccRSEtUG($PABOuRefSeq,$Quoi)]} { return [set JumeauLesAccRSEtUG($PABOuRefSeq,$Quoi)] } else { return "" } } foreach PAB [ListeDesPABs] { set LesAccRefSeq "" set LesAccUnigene "" set JumeauLesAccRSEtUG($PAB) 1 set JumeauLesAccRSEtUG($PAB,LesPAB) "" set LesAccRefSeq [InterrogeLesAccRSEtUG_Affymetrix $PAB AccRefSeq] if {$LesAccRefSeq != "None"} { foreach RefSeq $LesAccRefSeq { if {! [info exists JumeauLesAccRSEtUG($PAB,RefSeq)]} { set JumeauLesAccRSEtUG($PAB,RefSeq) "" } lappend JumeauLesAccRSEtUG($PAB,RefSeq) $RefSeq if {! [info exists JumeauLesAccRSEtUG($RefSeq,PAB)]} { set JumeauLesAccRSEtUG($RefSeq,PAB) "" lappend JumeauLesAccRSEtUG($RefSeq,PAB) $PAB } else { Espionne "$PAB $RefSeq -- [set JumeauLesAccRSEtUG($RefSeq,PAB)]" lappend JumeauLesAccRSEtUG($RefSeq,PAB) $PAB set JumeauLesAccRSEtUG($RefSeq,PAB) [lsort -unique [set JumeauLesAccRSEtUG($RefSeq,PAB)]] set LesPABs [set JumeauLesAccRSEtUG($RefSeq,PAB)] foreach PABs $LesPABs { set JumeauLesAccRSEtUG($PABs,LesPAB) $LesPABs } } } } set LesAccUnigene [InterrogeLesAccRSEtUG_Affymetrix $PAB AccUniseq] if {$LesAccUnigene != "None"} { foreach Unigene $LesAccUnigene { if {! [info exists JumeauLesAccRSEtUG($PAB,Unigene)]} { set JumeauLesAccRSEtUG($PAB,Unigene) "" } lappend JumeauLesAccRSEtUG($PAB,Unigene) $Unigene if {! [info exists JumeauLesAccRSEtUG($Unigene,PAB)]} { set JumeauLesAccRSEtUG($Unigene,PAB) "" lappend JumeauLesAccRSEtUG($Unigene,PAB) $PAB } else { Espionne "$PAB $Unigene -- [set JumeauLesAccRSEtUG($Unigene,PAB)]" lappend JumeauLesAccRSEtUG($Unigene,PAB) $PAB set JumeauLesAccRSEtUG($Unigene,PAB) [lsort -unique [set JumeauLesAccRSEtUG($Unigene,PAB)]] set LesPABs [set JumeauLesAccRSEtUG($Unigene,PAB)] foreach PABs $LesPABs { set JumeauLesAccRSEtUG($PABs,LesPAB) $LesPABs } } } } } return "[JumeauLesAccRSEtUG_Affymetrix $PABOuRefSeq $Quoi]" } proc JumeauRepresentatif {Nom} { global JumeauRepresentatif if {[info exists JumeauRepresentatif($Nom)]} { return [set JumeauRepresentatif($Nom)] } if {[info exists JumeauRepresentatif("EstCharge")]} { return "" } set FichierDesJumeaux "[RepertoireDuGenome]/fiches/jumeaux" if { ! [file exists $FichierDesJumeaux]} { set LesFichiersJumeaux [glob -nocomplain "[RepertoireDuGenome]/fiches/jumeaux*"] if {[llength $LesFichiersJumeaux]>0} { set LesPossibles $LesFichiersJumeaux lappend LesPossibles "Run a new Jumeaux" set FichierDesJumeaux [ChoixParmi $LesPossibles] if {$FichierDesJumeaux=="Run a new Jumeaux"} { set FichierDesJumeaux "" } } } if { $FichierDesJumeaux=={} || ! [file exists $FichierDesJumeaux]} { if {[OuiOuNon "Do You want to run Jumeaux ?"]} { set FichierDesJumeaux [Jumeaux "Ask"] } } foreach Ligne [LesLignesDuFichier $FichierDesJumeaux] { set LesJumeaux [split $Ligne " "] set JR [lindex $LesJumeaux 0] lappend JumeauRepresentatif(LaListeMerci) $JR foreach J [lrange $LesJumeaux 0 end] { set JumeauRepresentatif($J) $JR } } set JumeauRepresentatif("EstCharge") 1 return [JumeauRepresentatif $Nom] } proc Jumeaux {{Source ""} {Rep ""}} { while {$Source=="" || $Source =="Ask"} { set Source [ChoixParmi [list "NoTwinsAtAll" "SeqNuc" "LocChroContig" "Overlap"]] if {$Source!=""} { break } } set FichierDesJumeaux "[RepertoireDuGenome]/fiches/jumeaux_$Source" while {[file exists $FichierDesJumeaux]} { if {[OuiOuNon "$FichierDesJumeaux already exists.\n\ Do I replace it ?"]} { File delete -force $FichierDesJumeaux break } if {[OuiOuNon "$FichierDesJumeaux already exists.\n\ Do I keep it ?"]} { return $FichierDesJumeaux } } set LesSeqNom {} if {$Source=="Overlap"} { return [ClustersDeClonesAuxLocsChevauchantes] } if {$Source=="SeqNuc"} { if {$Rep==""} { set Rep "[RepertoireDuGenome]/nuctfa" } foreach Nom [ListeDesPABs] { set Fichier "$Rep/$Nom" if { ! [file exists $Fichier]} { continue } set Seq [string toupper [QueLaSequenceDuTFA $Fichier]] lappend LesSeqNom "$Seq $Nom" } } if {$Source=="LocChroContig"} { foreach Nom [ListeDesPABs] { set LesLocCC [LesLocalisationsSurChroContig $Nom] if {$LesLocCC=={}} { continue } set LocCC [lindex $LesLocCC 0] regsub { [+\-]} $LocCC "" LocCC regsub -all { } $LocCC "_" LocCC lappend LesSeqNom "$LocCC $Nom" } } set LesSeqNom [lsort $LesSeqNom] lappend LesSeqNom "bidon bidon" set OldSeq "zzzzzz" set LaSortie {} foreach SeqNom $LesSeqNom { scan $SeqNom "%s %s" Seq Nom if {$OldSeq==$Seq} { if { ! [info exists LesMemes]} { set LesMemes $OldNom } lappend LesMemes $Nom } else { if {[info exists LesMemes]} { lappend LaSortie [join $LesMemes " "] unset LesMemes } } set OldSeq $Seq set OldNom $Nom } if {$LaSortie=={}} { Sauve "No twins were found" dans $FichierDesJumeaux } else { SauveLesLignes $LaSortie dans $FichierDesJumeaux } return $FichierDesJumeaux } proc JumeauxAccessBestProteine {Fichier1200} { foreach Ligne [LesLignesDuFichier $Fichier1200] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] set JR [lindex $LesJumeaux 0] lappend ListeDesJR $JR } Espionne [llength $ListeDesJR] Espionne [llength [lsort -unique $ListeDesJR]] #SauveLesLignes $ListeDesJR dans "[RepertoireDuGenome]/fiches/1195" foreach Nom $ListeDesJR { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] lappend L "$AccBestProtHuman $Nom" #set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] #lappend L "$AccBestmRNAHuman $Nom" } Espionne [llength $L] set Ltriee [lsort $L] #Espionne $Ltriee SauveLesLignes $Ltriee dans "[RepertoireDuGenome]/fiches/AccBestProtHuman_JR" #SauveLesLignes $Ltriee dans "[RepertoireDuGenome]/fiches/AccBestmRNAHuman_JR" set n 0; set AccPrec aaa foreach ProtDD $Ltriee { set LesElts [split $ProtDD " "] set Acc [lindex $LesElts 0]; set DD [lindex $LesElts 1] #FaireLire $Acc if {$Acc!="" && $Acc==$AccPrec} {incr n;Espionne $Acc} set AccPrec $Acc } return $n } proc JumeauxRefSeq {FichierBestNMDef FichierSortie} { foreach Nom [ListeDesPABs] { set NM [InterrogeFichierBestNMavecDef $FichierBestNMDef $Nom NM] if {$NM!=""} { lappend Liste "$Nom\t$NM" } } Espionne [llength $Liste] set L [lsort -index 1 $Liste] Espionne [llength $L] set PrevAccess "zzzzz" foreach Elt $L { set LesData [split $Elt "\t"] set DD [lindex $LesData 0] set Access [lindex $LesData 1] if {$Access==$PrevAccess} { if {![info exists LesMemes]} {lappend LesMemes $PrevDD} lappend LesMemes $DD } else { if {[info exists LesMemes]} { lappend LaSortie [join $LesMemes " "] unset LesMemes } } set PrevAccess $Access set PrevDD $DD } Espionne [llength $LaSortie] SauveLesLignes $LaSortie dans $FichierSortie foreach J $LaSortie { set LesJumeaux [split $J " "] set JR [lindex $LesJumeaux 0] if {[file exists "[RepertoireDuGenome]/prottfa/$JR"]} {lappend AvecProt $JR} } Espionne [llength $AvecProt] set l [lsort -unique $AvecProt] Espionne [llength $l] } proc JunkDir {{JunkDir ""}} { return [RepertoireDeTravail $JunkDir] } proc KEGG {Nom FileMSF FileClust {IdDesProtId 0.98} {NormMDMin 0.5}} { ####Recherche des EC appartennant aux proteines du cluster du msf si celui-ci a un bon NormMD#### if {![file exists $FileMSF]} {return [list "$Nom\tNothing"]} AskMSF unset if {[AskMSF $FileMSF $Nom] != ""} { set Query $Nom } elseif {[AskMSF $FileMSF "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" } else { return [list "$Nom\tNothing"] } set Cluster [InterrogeLesClustersDesMSF $FileClust Access $Query Cluster] if {$Cluster == "" } { set LesAccessDuMSF [InterrogeLesClustersDesMSF $FileClust LesAccess] } else { set LesAccessDuMSF [InterrogeLesClustersDesMSF $FileClust Cluster $Cluster LesAccess] } set LesAccessDesId {} foreach Access $LesAccessDuMSF { if {$Query == $Access} {continue} if {[EstUnAccessPDB $Access]} {continue} if {[IDdansMSF $FileMSF $Query $Access SelonA] < $IdDesProtId} {continue} if {[IDdansMSF $FileMSF $Query $Access SelonB] < $IdDesProtId} {continue} lappend LesAccessDesId $Access } set NormMD [MDScoreAvecSelectionDuFichier $FileMSF $LesAccessDuMSF] Espionne "$Nom -> NormMD $NormMD" if {$NormMDMin <= $NormMD} { set LesAccess [lsort -unique [concat $LesAccessDuMSF $LesAccessDesId]] } else { set LesAccess [lsort -unique $LesAccessDesId] } AskLesPagesInfos load $LesAccess protein set LesEC {} set LesKegg {} set LesPathway {} foreach Access $LesAccess { if {$Query == $Access} {continue} if {[regexp {^[0-9]} $Access]} {continue} set PageInfo [AskLesPagesInfos ask $Access] if {$PageInfo == ""} {continue} Espionne $Access foreach LaReq [PageInfo2Kegg $PageInfo] { set Quoi [lindex $LaReq 0] set Qui [lindex $LaReq 1] if {$Quoi == "Pathway"} {lappend LesPathway $Qui} if {$Quoi == "Kegg" } {lappend LesKegg $Qui} if {$Quoi == "EC" } {lappend LesEC $Qui} } } AskLesPagesInfos unset if {$LesEC == {} && $LesKegg == {} && $LesPathway == {}} {return [list "$Nom\tNothing"]} set LeTexte {} ###Il ne reste plus qu'a ecrire dans le fichier########### foreach EC [lsort -unique $LesEC ] {lappend LeTexte "$Nom\tEC\t$EC\t" } foreach Kegg [lsort -unique $LesKegg ] {lappend LeTexte "$Nom\tKegg\t$Kegg\t[InterrogeKEGG Kegg $Kegg Definition]" } foreach Pathway [lsort -unique $LesPathway] {lappend LeTexte "$Nom\tPathway\t$Pathway\t[InterrogeKEGG Pathway $Pathway Definition]"} if {$LeTexte == {}} {return [list "$Nom\tNothing"]} return $LeTexte } proc KEGGDir {{OrgaC ""}} { if {$OrgaC != ""} {return "[GscopeDatabaseDir KEGG]/pathway/$OrgaC"} return "[GscopeDatabaseDir KEGG]/pathway" } proc KPduKG {KG Organisme} { # set NP [BirdGet $NM "accession"] # regsub {\..*} $NP "" NP # return $NP set Query "select kgID, displayID, alias from ucsc$Organisme.kgprotalias Where kgID=$KG" set KP [BirdSendQueryAndGetFromUrl $Query "" "flat"] return $KP } proc KanvaCourant {} { global KanvaCourant global CurrentGenome if {[info exists KanvaCourant]} { return $KanvaCourant } set KanvaCourant [GscopeBoard $CurrentGenome] return $KanvaCourant } proc Keep1ByCluster {clusterList minIdentity} { #initialisation var + fichier set FIC [open "deletedByRedundancy.log" "w"] global RepertoireDuGenome set repTfa "/prottfa" set compteurGroupe 0 set compteurRedundant 0 #la liste final des proteines a supprimer #toutes celles a supprimer (le PAB n'apparait qu'une seule fois dans la liste) set aSupprimer [list ] puts " --> determination de la sequence à garder par cluster (sp > (tr | ref)" ################################################################################" #on cree le fichier log foreach cluster $clusterList { set currentMax 0 set currentMaxSp 0 set maxName "" set maxNameSp "" foreach proteine $cluster { #puts "$proteine" set l [BenSeqLength $proteine] if {$l==-1} {puts "probs avec la longueur de '$proteine' : $repTfa"} set origin [lindex [split [ExtraitInfo $proteine Narcisse] : ] 0] #verif si "sp" (swissprot), si oui, on garde la plus grande if {$origin=="sp" && $l > $currentMaxSp} { set currentMaxSp $l set maxNameSp "$proteine" #puts "if1 $currentMaxSp : $maxNameSp" } #recherche de la plus longue toute origine confondue if {$l > $currentMax} { set currentMax $l set maxName "$proteine" } } #si on a du swissprot, on le garde en priorité if {$currentMaxSp!=0 && $maxNameSp!=""} { set currentMax $currentMaxSp set maxName $maxNameSp #puts "if2 $currentMax : $maxName" } #max detecte, on va remplir le log ##info des groupes puts $FIC ">groupe $maxName (l=[BenSeqLength $maxName] o=[lindex [split [ExtraitInfo $maxName Narcisse] : ] 0]): [string trim [BenEnteteTFA $maxName]]" incr compteurGroupe ##info des membre foreach proteine $cluster { if {$proteine!=$maxName} { puts $FIC " $proteine (l=[BenSeqLength $proteine] o=[lindex [split [ExtraitInfo $proteine Narcisse] : ] 0]): [string trim [BenEnteteTFA $proteine]]" #si le PAB est deja dans la liste "aSupprimer", on ne le rajoute pas une 2nd fois if {[lsearch -exact $aSupprimer $proteine]==-1} { lappend aSupprimer $proteine incr compteurRedundant } } } set currentMax 0 set currentMaxSp 0 set maxName "" set maxNameSp "" } puts $FIC "### [Maintenant]" puts $FIC "### minIdentity = $minIdentity %" puts $FIC "### nbre de groupes : $compteurGroupe" puts $FIC "### nbre de redondants uniques: $compteurRedundant" close $FIC ############################################################################ #on va supprimmer les redondants de la listedesPABs #et en faire une sauvegarde puts " -->sauvegarde de bornedespabs en bornesdespabs.backup" file copy -force "$RepertoireDuGenome/fiches/bornesdespabs" "$RepertoireDuGenome/fiches/bornesdespabs.backup" file delete "$RepertoireDuGenome/fiches/bornesdespabs" set FICOUT [open "$RepertoireDuGenome/fiches/bornesdespabs" "w"] set FICIN [open "$RepertoireDuGenome/fiches/bornesdespabs.backup" "r"] #suppression des redondants dans bornedespabs.backup #et ecriture dans bornedespabscorrectes puts " -->suppression des redondants dans /infos/bornesdespabs" while {[gets $FICIN line]!=-1} { if {[lsearch -exact $aSupprimer [lindex [split $line] 0]]!=-1} { continue } puts $FICOUT $line } close $FICIN close $FICOUT puts " --> Pour infos, un fichier \"deletedByRedundancy.log\" a été créé." puts " Il contient les infos concernant ce qui a été supprimé." ############################################################################ # on garde les anciens fichiers au cas ou #si les rep de sauvegarde sont absents, on les cree if {![file exists "$RepertoireDuGenome/prottfa/backup/"]} { file mkdir $RepertoireDuGenome/prottfa/backup puts " -->creation du repertoire de sauvegarde : $RepertoireDuGenome/prottfa/backup/" } puts " -->transfert des sequences a supprimer dans $RepertoireDuGenome/prottfa/backup/" foreach PAB $aSupprimer { if {[file exists "$RepertoireDuGenome/prottfa/$PAB"]} { file rename "$RepertoireDuGenome/prottfa/$PAB" "$RepertoireDuGenome/prottfa/backup/$PAB" } } ############################################################################ # creation d'un fasta du proteome corrigé puts " -->creation du fichier du protéome corrigé : final_correctedProteome.fasta" set pref [PreFixe] set filename "final_[PreFixe]_correctedProteome.fasta" set FICOUT [open $filename "w"] RechargeListeDesPABs puts $FICOUT "### [Maintenant]" puts $FICOUT "### minIdentity = $minIdentity %" foreach PAB [ListeDesPABs] { set FICIN [open "$RepertoireDuGenome/prottfa/$PAB"] while {[gets $FICIN line]!=-1} { puts $FICOUT $line } close $FICIN } close $FICOUT } proc KeepOnlyHeader {fasta} { set FICIN [open $fasta "r"] set FICOUT [open "listeEntetesFasta" "w"] while {[gets $FICIN line]!=-1} { if {$line==""} { continue } if {[string index $line 0]==">"} { puts $FICOUT $line } } close $FICIN close $FICOUT } proc KeepOnlyInteractantUbi {Repertoire} { #set Repertoire "/genomics/link/FLD/STRING/StringCombinedFASTED_10090_201302141718" set WithAny "$Repertoire/WithAny.string" set Sandwich "$Repertoire/Sandwich.string" set QueryOnly "$Repertoire/QueryOnly.string" set LesFiles [list $WithAny $Sandwich $QueryOnly] foreach File $LesFiles { set FileShort [file tail $File] set LesParts [split $FileShort "."] set Name [lindex $LesParts 0] set Ext [lindex $LesParts 1] set NvFile "${Name}OnlyUbi.$Ext" set LesNvLignes {} foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^PIDInitial" $Ligne]} { lappend LesNvLignes $Ligne continue } set IdInteractant [lindex [split $Ligne "\t"] 2] if {[InterrogeIdentifiersString $IdInteractant Ini "$Repertoire/Identifiers"] == "YES"} { lappend LesNvLignes $Ligne continue } if {[InterrogeMouseUbiquitin $IdInteractant Ubi] == "YES"} { lappend LesNvLignes $Ligne } } SauveLesLignes $LesNvLignes dans "$Repertoire/$NvFile" } } proc KeepOnlyInteractionWithExperimentEvidence {Repertoire} { #set Repertoire "/genomics/link/FLD/STRING/StringCombinedFASTED_10090_201302141718" set WithAny "$Repertoire/WithAny.string" set Sandwich "$Repertoire/Sandwich.string" set QueryOnly "$Repertoire/QueryOnly.string" set LesFiles [list $WithAny $Sandwich $QueryOnly] foreach File $LesFiles { set FileShort [file tail $File] set LesParts [split $FileShort "."] set Name [lindex $LesParts 0] set Ext [lindex $LesParts 1] set NvFile "${Name}OnlyExp.$Ext" set LesNvLignes {} foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^PIDInitial" $Ligne]} { lappend LesNvLignes $Ligne } if {[regexp "experimental" $Ligne]} { lappend LesNvLignes $Ligne } } SauveLesLignes $LesNvLignes dans "$Repertoire/$NvFile" } } proc KeepOnlyInteractionWithExperimentEvidenceAndOnlyInteractantUbi {Repertoire} { #set Repertoire "/genomics/link/FLD/STRING/StringCombinedFASTED_10090_201302141718" set WithAny "$Repertoire/WithAny.string" set Sandwich "$Repertoire/Sandwich.string" set QueryOnly "$Repertoire/QueryOnly.string" set LesFiles [list $WithAny $Sandwich $QueryOnly] foreach File $LesFiles { set FileShort [file tail $File] set LesParts [split $FileShort "."] set Name [lindex $LesParts 0] set Ext [lindex $LesParts 1] set NvFile "${Name}OnlyExpOnlyUbi.$Ext" set LesNvLignes {} foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^PIDInitial" $Ligne]} { lappend LesNvLignes $Ligne continue } if {![regexp "experimental" $Ligne]} { continue } set IdInteractant [lindex [split $Ligne "\t"] 2] if {[InterrogeIdentifiersString $IdInteractant Ini "$Repertoire/Identifiers"] == "YES"} { lappend LesNvLignes $Ligne continue } if {[InterrogeMouseUbiquitin $IdInteractant Ubi] == "YES"} { lappend LesNvLignes $Ligne } } SauveLesLignes $LesNvLignes dans "$Repertoire/$NvFile" } } proc KeyList {K} { global KeyList if {$K=="PleaseReset"} { if {[info exists KeyList]} { unset KeyList } return "" } if {$K=="PleaseGetKeys"} { if {[info exists KeyList]} { return $KeyList } return {} } lappend KeyList $K return $K } proc KgAlias {{Qui ""} {Quoi ""}} { global KgAlias Wup "Il y 2 colonnes Id et Gn" if {[info exists KgAlias($Qui,$Quoi)]} {return $KgAlias($Qui,$Quoi)} if {[info exists KgAlias("EstCharge")]} {return ""} set KgAlias("EstCharge") 1 if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {$Quoi==""} {set Quoi "Gn"} set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/kgAlias.txt" set LesLignes [LesLignesDuFichier $Fichier] set KgAlias(ListOf,headers) [list "Id" "Gn"] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Id [lindex $LesMots 0] set Gn [lindex $LesMots 1] lappend KgAlias(ListOf,Id) $Id lappend KgAlias(ListOf,Gn) $Gn #liste des Gns correspondant a un Id lappend KgAlias($Id,Gn) $Gn #liste des Ids correspondant a un Gn lappend KgAlias($Gn,Id) $Id } set KgAlias(ListOf,Id) [lsort -unique $KgAlias(ListOf,Id)] set KgAlias(ListOf,Gn) [lsort -unique $KgAlias(ListOf,Gn)] return [KgAlias $Qui $Quoi] } proc KickOutThatName {prefix oldWord newWord} { set compteur 1 puts "'$oldWord'" #regexp -indices $oldWord "vbcy_dgy_ brucei. udgf edg" var #puts $var #unset var file mkdir "modifiedNames" for {set i 1} {$i<30000} {incr i} { set base "" if {$i<10} { append base $prefix "0000$i" if {![file exists $base]} {continue} puts ">>> modif $base $i" set input [open "./$base" "r"] set output [open "./modifiedNames/$base" "w"] } elseif {$i<100} { append base $prefix "000$i" if {![file exists $base]} {continue} puts ">>> modif $base $i" set input [open "./$base" "r"] set output [open "./modifiedNames/$base" "w"] } elseif {$i<1000} { append base $prefix "00$i" if {![file exists $base]} {continue} puts ">>> modif $base $i" set input [open "./$base" "r"] set output [open "./modifiedNames/$base" "w"] } elseif {$i<10000} { append base $prefix "0$i" if {![file exists $base]} {continue} puts ">>> modif $base $i" set input [open "./$base" "r"] set output [open "./modifiedNames/$base" "w"] } elseif {$i<100000} { append base $prefix "$i" if {![file exists $base]} {continue} puts ">>> modif $base $i" set input [open "./$base" "r"] set output [open "./modifiedNames/$base" "w"] } while {[gets $input line]!=-1} { regexp -indices $oldWord $line var if {[info exists var]} { puts "[lindex $var 0] [lindex $var 1]" puts $output [string replace $line [lindex $var 0] [lindex $var 1] "$newWord"] unset var continue } puts $output $line } close $input close $output } } proc KillParLaCroix {} { return } proc KillPython {} { set Qds [exec ps -ef | grep "python"] set LesQds [split $Qds "\n"] foreach Ligne $LesQds { Espionne $Ligne if { ! [regexp "python sv" $Ligne]} { continue } scan $Ligne "%s %d" moi Pid Espionne $Pid catch {exec kill -9 $Pid} } } proc KillQds {} { set Qds [exec ps -ef | grep "/cafedessciences/bin/qds"] set LesQds [split $Qds "\n"] foreach Ligne $LesQds { Espionne $Ligne if { ! [regexp "/usr/local/bin/tclsh .*/cafedessciences/bin/qds " $Ligne]} { continue } scan $Ligne "%s %d" moi Pid Espionne $Pid catch {exec kill -9 $Pid} } } proc KinaseBarcode {} { cd [EvolHHuProDir] foreach Ligne [LesLignesDuFichier "kinase_bilan.lst"] { set X "" set Y "unk" scan $Ligne "%s %s %s %s %s %s" K A E B X Y if {$X==""} { continue } set Xde($K) $X set Yde($K) $Y } foreach Ligne [LesLignesDuFichier "barcode.txt"] { set K "" scan $Ligne "%s" K if {$K==""} { continue } if {[info exists Xde($K)]} { set N [join [list $Xde($K) $Yde($K) $K] "_"] regsub $K $Ligne $N New lappend LeNew $New } else { lappend LeNew $Ligne } } return [SauveLesLignes $LeNew dans "KinaseBarcode.txt"] } proc KoAnno {{Access ""} {ExistingAccess ""} {NomMsf ""} {ExistingNomMsf ""}} { if {$ExistingNomMsf!=""} { return [ExistingKoAnnoMsf $ExistingNomMsf] } if { $NomMsf!=""} { return [KoAnnoMsf $NomMsf] } if {$ExistingAccess!=""} { return [ExistingKoAnnoAccess $ExistingAccess] } if { $Access!=""} { return [KoAnnoAccess $Access] } return "Please fill in One field and press Send" } proc KoAnnoAccess {Access} { if { ! [regexp -nocase {^[A-Z][A-Z0-9]+$} $Access]} { return "Sorry, it seems that $Access is not a valid protein accession number" } set RepParent [OnGoingDir] set Rep "$RepParent/$Access" if {0 && [file exists $Rep]} { return "I saw already $Access, please run it as Existing KoAnno result" } if {[FileAbsent $RepParent]} { file mkdir $RepParent } set LesFichiersCrees [FouinePourLesAccess [list $Access] $RepParent] if {[regexp "^Show " $LesFichiersCrees]} { return $LesFichiersCrees } if {$LesFichiersCrees==""} { return "Sorry something went wrong" } return [ExistingKoAnnoAccess $Access] } proc KoAnnoInfo {Access} { set Info [SequenceDesBanques $Access] return "
    $Info
    " set Url "http://bips.u-strasbg.fr/srsbin/cgi-bin/wgetz?-e+\[{swissprot_SP_sptrembl}-acc:$Access\]|\[swissprot-id:$Access\]+-vn+2" return [HttpCopy $Url] } proc KoAnnoMsf {{NomMsf ""}} { if {$NomMsf==""} { return "" } set RepParent "[OnGoingDir]/$NomMsf" set FichierMsf "$RepParent/$NomMsf.msf" if {[FileAbsent $FichierMsf]} { set Trouve "" set LesPossibles [glob -nocomplain "/tools/wwwbio3d/Receptacle/UpLoad.*_of_KoAnnoMsf_$NomMsf*"] foreach Possible $LesPossibles { set Dirna [file dirname $Possible] set Queue [file tail $Possible] set BelleQueue [StringApres "_of_KoAnnoMsf_" dans $Queue] regsub -nocase "\.msf$" $BelleQueue "" BelleQueue append BelleQueue ".msf" if {$NomMsf==$BelleQueue} { set Trouve $Possible } } if {$Possible==""} { return "Sorry, $FichierMsf doesn't exist. Please upload it." } if { ! [file exists $RepParent]} { file mkdir $RepParent } file copy $Possible $FichierMsf } set LesFichiersCrees [FouinePourUnMsf $FichierMsf $RepParent] if {$LesFichiersCrees==""} { return "Sorry something went wrong" } return [ExistingKoAnnoMsf $NomMsf] } proc KoAnnoPourTous {{Repertoire ""}} { if {$Repertoire==""} { set Repertoire [RepertoireDuGenome]/msf } set r [glob -directory $Repertoire *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } KoAnnoX $fichier FinPasTouche $f } } proc KoAnnoUpdateXmlWithMacsim {NomMsf} { set RepParent "[OnGoingDir]/$NomMsf" set FichierXml "$RepParent/$NomMsf.xml" if {[FileAbsent $FichierXml]} { return "Please create first the xml file from the multiple alignement with KoAnno" } set Status [UpdateXmlWithMacsim $FichierXml] if {[regexp -nocase "^Error|^Return" $Status]} { return $Status } return [ExistingKoAnnoMsf $NomMsf] } proc KoAnnoX {fichier} { set Repertoire [RepertoireDuGenome] set RepertoireKoAnno $Repertoire/KoAnno/ if { ! [file exists "$RepertoireKoAnno"]} { File mkdir $RepertoireKoAnno } #Espionne "msf: $fichier" set list [split $fichier "/"] set newRep $RepertoireKoAnno[lindex $list [llength $list]-1] set FichierXml $Repertoire/macsimXml/[lindex $list [llength $list]-1] if { ! [file exists "$newRep"]} { File mkdir $newRep } FouinePourUnMsfX "$fichier" "$newRep" CreeXmlAnnotePourUnMsfX "$fichier" "$newRep" } proc LAacMetOuNon {} { set RepertoireSourisOthers "/genomics/link/SpliRetMouse/FichiersInitial/SOURIS_others" set RepertoireSourisTfactor "/genomics/link/SpliRetMouse/FichiersInitial/SOURIS_Tfactor" set RepertoireRatOthers "/genomics/link/SpliRetRat/FichiersInitial/RAT_others" set RepertoireRatTfactor "/genomics/link/SpliRetRat/FichiersInitial/RAT_Tfactor" set LesRepertoires [list $RepertoireSourisTfactor $RepertoireSourisOthers $RepertoireRatTfactor $RepertoireRatOthers] foreach Repertoire $LesRepertoires { foreach File [glob -nocomplain "$Repertoire/*"] { set cluster [lindex [split [file tail $File] "."] 0] foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^>" $Ligne] } { set trouve 0 if {[regexp "^>LA" $Ligne] || [regexp "^>30" $Ligne]} { set trouve 1 set nbligne 0 } } else { if {$trouve} { set Premier [lindex [split $Ligne ""] 0] set trouve 0 if {$Premier!="M"} {Espionne "attention $cluster"} } } } } } } proc LAccessEtLaBanque {Id {FichierAvecAccess ""}} { set LesInfos {} if { [regexp "^Msa." $Id ] || [regexp "^AFFX" $Id ] } { if {![file exists $FichierAvecAccess]} { lappend LesInfos "Not found" lappend LesInfos "Not found" } else { set NewId [CorrigeId $Id] foreach Ligne [LesLignesDuFichier $FichierAvecAccess] { if {[regexp $NewId $Ligne]} { set LaLigne [split $Ligne "\t"] regsub -all " " [lindex $LaLigne 1] "" Access lappend LesInfos $Access lappend LesInfos "GB" return $LesInfos } else {continue} } if {$LesInfos == ""} { lappend LesInfos "Not Found" lappend LesInfos "Not Found" } } } elseif {[regexp "^YEL" $Id ] } { lappend LesInfos "Not Found" lappend LesInfos "Not Found" } elseif {[regexp "^TC" $Id ] } { lappend LesInfos [CorrigeId $Id] lappend LesInfos "TIGR" } elseif {[regexp "^ET" $Id ] } { lappend LesInfos [CorrigeId $Id] lappend LesInfos "EGAD" } else { lappend LesInfos [CorrigeId $Id] lappend LesInfos "GB" } return $LesInfos } proc LApercuDesGenesDuProjet {FichierClusters} { set Liste [ListeDesJR $FichierClusters] set LApercu {} set Entete "Name\tTwins\tAC Prot\tAC mRNA\tDefinition mRNA" lappend LApercu $Entete foreach Nom $Liste { set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$AccessProt=="" && $AccessmRNA==""} {continue} if {$AccessProt!=""} { set Definition [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Definition] } else { set Definition [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Definition] } if {$Definition==""} {continue} set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] lappend LApercu "$Nom\t$LesJumeaux\t$AccessProt\t$AccessmRNA\t$Definition" } return $LApercu } 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] } proc LCnk {Ln k} { set n [llength $Ln] set x 0 set Lr [list] while {$x < $k} { set Ltmp $Lr foreach e $Ltmp { set f [lindex $e end] for {set i [expr {$f+1}]} {$i < $n} {incr i} { lappend Ltmp [list {*}$e $i] } } for {set i 0} {$i < $n} {incr i} { lappend Ltmp $i } set Lr $Ltmp incr x } set Lr [lsort -unique $Lr] set Ltot [list] foreach e $Lr { if {[llength $e] == $k} { lappend Ltot $e } } set Lres [list] foreach e $Ltot { set tmp [list] foreach i $e { lappend tmp [lindex $Ln $i] } lappend Lres $tmp } return $Lres } proc LCnk_choose {Lv Ln k} { set n [llength $Ln] foreach e $Lv { set x [lindex $e end] for {set i [expr {$x + 1}]} {$i < $n} {incr i} { lappend Lr [list {*}$e $i] } } } proc LConcat {aListe ListeB} { upvar $aListe Liste if { ! [info exists Liste]} { set Liste {} } set Liste [concat $Liste $ListeB] return $Liste } proc LConcatTest {} { set L {a b c} return [LConcat L {d e f}] } proc LElectionDeMissBlast {FichierBlast LesBanquesIdEtLesAccess {Pourcentage ""} {ExpectMax ""} {NbSubject ""}} { Wup "retourne les Access classes en fonction du score, de l'expect et de leur apparition dans le blast" Wup "Liste contenant plusieurs autres listes contenant les elements suivants : BanqueId Access Expect Score Subject Classement" if {$LesBanquesIdEtLesAccess == {}} {return ""} if {![file exists $FichierBlast]} { Espionne "$FichierBlast does not exist" return "" } if {$ExpectMax == "" } {set ExpectMax "1e-3"} if {$NbSubject == "" } {set NbSubject "250" } if {$Pourcentage == ""} {set Pourcentage "0.05"} set LesListes {} set LesLaiderons {} foreach BanqueIdEtAccess $LesBanquesIdEtLesAccess { scan $BanqueIdEtAccess "%s %s" BanqueId Access set Subject [UnSubjectDuBlast $FichierBlast $BanqueId $Access] if {$Subject == ""} { set LesInfos [list "$BanqueId" "$Access" "" "" "" "0"] lappend LesLaiderons $LesInfos continue } if {[regexp {Expect\([0-9]\) = } $Subject]} { regsub {Expect\([0-9]\) = } $Subject "Expect = " Subject } regexp -nocase "Expect = (\[a-z0-9\.\-]*) " $Subject tmp Expect if {[regexp "^e" $Expect]} { set Expect "1$Expect"} regexp -nocase "Score = (\[e0-9\.\+]*) bits " $Subject tmp Score if {$Expect > $ExpectMax} { set LesInfos [list "$BanqueId" "$Access" "$Expect" "$Score" "$Subject" "0"] lappend LesLaiderons $LesInfos continue } set LesInfos [list "$BanqueId" "$Access" "$Expect" "$Score" "$Subject"] lappend LesListes $LesInfos } set LesListes [lsort -decreasing -real -index 3 [lsort -real -index 2 $LesListes]] if {$LesListes != {}} { set ExpectDeRef [lindex [lindex $LesListes 0] 2] set ScoreDeRef [lindex [lindex $LesListes 0] 3] set LeScoreMinEtMax [DePartEtDAutreDeLaValeur $ScoreDeRef $Pourcentage] set ScoreMin [lindex $LeScoreMinEtMax 0] set ScoreMax [lindex $LeScoreMinEtMax 1] set Classement 1 set LePodium {} set i "-1" foreach LesInfos $LesListes { set Expect [lindex $LesInfos 2] set Score [lindex $LesInfos 3] if {$ScoreMin <= $Score && $Score <= $ScoreMax && $ExpectDeRef == $Expect} { lappend LesInfos $Classement incr i } else { incr Classement set Classement [expr $Classement + $i] lappend LesInfos $Classement set ExpectDeRef $Expect set ScoreDeRef $Score set LeScoreMinEtMax [DePartEtDAutreDeLaValeur $ScoreDeRef $Pourcentage] set ScoreMin [lindex $LeScoreMinEtMax 0] set ScoreMax [lindex $LeScoreMinEtMax 1] set i 0 } lappend LePodium $LesInfos } } foreach LesInfos $LesLaiderons { lappend LePodium $LesInfos } return $LePodium } proc LEnteteDuGalFile {{Fichier ""}} { Wup "Permet de recuperer l entete d un GalFile pour mieux l utiliser" set RepPuceOntario "[RepertoireDuGenome]/Autres_Puces/Ontario/GalFile" if {$Fichier == ""} {set Fichier "$RepPuceOntario/SS-H19k7.gal"} set Entete "" set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #block col row name id if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLeHeader !="1" && [regexp -nocase "^ATF" $Ligne]} { set SurLeHeader 1 set NDeLigne 0 lappend Entete "$Ligne" continue } if {$SurLeHeader=="1" && $NDeLigne=="0"} { set LigneSplitee [split $Ligne "\t"] #On ajoute 1 colonne de donnee supplementaire set NMaxOptionalHeader [lindex $LigneSplitee 0] set NewLigne [join [list $NMaxOptionalHeader [expr [lindex $LigneSplitee 1]+1]] "\t"] set NDeLigne 1 lappend Entete "$NewLigne" continue } if {$SurLeHeader=="1" && [expr $NDeLigne <= $NMaxOptionalHeader]} { incr NDeLigne lappend Entete "$Ligne" continue } else {set SurLeHeader 0} break } close $F return "$Entete" } proc LIndexes {Liste args} { set L {} foreach I $args { lappend L [lindex $Liste $I] } return $L } proc LInsertionDesRegionsAbsentes {LesRegions TailleQuery} { set LesRegions [lsort -integer -index 0 $LesRegions] set LesAccessEtLeurSens {} set ToutesLesRegions {} foreach UneRegion [lsort -integer -index 0 $LesRegions] { set Access [lindex [lindex $UneRegion 4] 1] set Sens [lindex $UneRegion 6] lappend ToutesLesRegions $UneRegion if {![info exists TabTmp($Access,$Sens,LesR)]} { set TabTmp($Access,$Sens,LesR) {} lappend LesAccessEtLeurSens [list $Access $Sens] } lappend TabTmp($Access,$Sens,LesR) $UneRegion } foreach UnAccessEtUnSens $LesAccessEtLeurSens { set Access [lindex $UnAccessEtUnSens 0] set Sens [lindex $UnAccessEtUnSens 1] set LesRegionsDuContig [set TabTmp($Access,$Sens,LesR)] if {$Sens == "+"} { set LesRegionsDuContig [lsort -index 7 -integer $LesRegionsDuContig] } else { set LesRegionsDuContig [lsort -decreasing -index 7 -integer $LesRegionsDuContig] } set LesRegionsDuContig [lsort -integer -index 0 $LesRegionsDuContig] set nRegionsDuContig [llength $LesRegionsDuContig] foreach UneRA [LesRegionsAbsentesDesPetitesRegions $LesRegionsDuContig 1 $TailleQuery] { set DA [Mini [lindex $UneRA 0] [lindex $UneRA 1]] set FA [Maxi [lindex $UneRA 0] [lindex $UneRA 1]] for {set i 0} {$i < $nRegionsDuContig} {incr i} { set nR [expr $i + 1] set LaRPrec [lindex $LesRegionsDuContig $i] set LeContig [lindex $LaRPrec 4] set DPrec [Mini [lindex $LaRPrec 0] [lindex $LaRPrec 1]] set FPrec [Maxi [lindex $LaRPrec 0] [lindex $LaRPrec 1]] if {$Sens == "+"} { set DSPrec [Mini [lindex $LaRPrec 7] [lindex $LaRPrec 8]] set FSPrec [Maxi [lindex $LaRPrec 7] [lindex $LaRPrec 8]] } else { set DSPrec [Maxi [lindex $LaRPrec 7] [lindex $LaRPrec 8]] set FSPrec [Mini [lindex $LaRPrec 7] [lindex $LaRPrec 8]] } if {$nR == 1} { if {$FA < $DPrec} { if {$Sens == "+" && $DSPrec != 1} { set DSA 1 set FSA [expr $DSPrec - 1] lappend ToutesLesRegions [list $DA $FA 0 0 $LeContig "" $Sens $DSA $FSA 0 0 0] break } if {$Sens == "-"} { set DSA 1e+200 set FSA [expr $DSPrec + 1] lappend ToutesLesRegions [list $DA $FA 0 0 $LeContig "" $Sens $DSA $FSA 0 0 0] break } } } if {$nR == $nRegionsDuContig} { if {$FPrec < $DA} { if {$Sens == "+"} { set DSA [expr $FSPrec + 1] set FSA 1e+200 } else { if {$FSPrec == 1} {continue} set DSA [expr $FSPrec - 1] set FSA 1 } lappend ToutesLesRegions [list $DA $FA 0 0 $LeContig "" $Sens $DSA $FSA 0 0 0] break } continue } set LaRSuiv [lindex $LesRegionsDuContig $nR] set DSuiv [Mini [lindex $LaRSuiv 0] [lindex $LaRSuiv 1]] if {$Sens == "+"} { set DSSuiv [Mini [lindex $LaRSuiv 7] [lindex $LaRSuiv 8]] } else { set DSSuiv [Maxi [lindex $LaRSuiv 7] [lindex $LaRSuiv 8]] } if {[expr abs($FPrec - $DSuiv)] <= 1 || [expr abs($FSPrec-$DSSuiv)] <= 1} {continue} if {$DA <= $FPrec} {continue} if {$DSuiv <= $FA } {continue} if {$Sens == "+"} { set DSA [expr $FSPrec + 1] set FSA [expr $DSSuiv - 1] } else { set DSA [expr $FSPrec - 1] set FSA [expr $DSSuiv + 1] } lappend ToutesLesRegions [list $DA $FA 0 0 $LeContig "" $Sens $DSA $FSA 0 0 0] break } } } return [lsort -integer -index 0 $ToutesLesRegions] } proc LInsertionDesRegionsRepetees {LesRegionsRepetees LesRegionsUniques TailleQuery} { set LesRegionsRepetees [lsort -integer -index 0 $LesRegionsRepetees] set LesAccessEtLeurSens {} set LesRegions {} foreach UneRegionUnique [lsort -integer -index 0 $LesRegionsUniques] { set Access [lindex [lindex $UneRegionUnique 4] 1] set Sens [lindex $UneRegionUnique 6] if {![info exists TabTmp($Access,$Sens,LesRU)]} { set TabTmp($Access,$Sens,LesRU) {} lappend LesAccessEtLeurSens [list $Access $Sens] } lappend LesRegions $UneRegionUnique lappend TabTmp($Access,$Sens,LesRU) $UneRegionUnique } foreach UnAccessEtUnSens $LesAccessEtLeurSens { set Access [lindex $UnAccessEtUnSens 0] set Sens [lindex $UnAccessEtUnSens 1] foreach UneRegion $LesRegionsRepetees { set Access2 [lindex [lindex $UneRegion 4] 1] set Sens2 [lindex $UneRegion 6] if {$Access2 != $Access || $Sens2 != $Sens} {continue} set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] if {$Sens == "+"} { set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] } else { set DS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] } set LesRUDuContig [set TabTmp($Access,$Sens,LesRU)] set nRUDuContig [llength $LesRUDuContig] for {set i 0} {$i < $nRUDuContig} {incr i} { set nRU [expr $i +1] set LaRUPrec [lindex $LesRUDuContig $i] set DPrec [Mini [lindex $LaRUPrec 0] [lindex $LaRUPrec 1]] set FPrec [Maxi [lindex $LaRUPrec 0] [lindex $LaRUPrec 1]] if {$Sens == "+"} { set DSPrec [Mini [lindex $LaRUPrec 7] [lindex $LaRUPrec 8]] set FSPrec [Maxi [lindex $LaRUPrec 7] [lindex $LaRUPrec 8]] } else { set DSPrec [Maxi [lindex $LaRUPrec 7] [lindex $LaRUPrec 8]] set FSPrec [Mini [lindex $LaRUPrec 7] [lindex $LaRUPrec 8]] } if {$nRU == 1} { if {$DPrec != 1 && $F < $DPrec} { if {$Sens == "+" && $DSPrec != 1} { if {$FS < $DSPrec} { lappend LesRegions $UneRegion break } } if {$Sens == "-"} { if {$DSPrec < $FS} { lappend LesRegions $UneRegion break } } } } if {$nRU != $nRUDuContig} { set LaRUSuiv [lindex $LesRUDuContig $nRU] set DSuiv [Mini [lindex $LaRUSuiv 0] [lindex $LaRUSuiv 1]] if {$Sens == "+"} { set DSSuiv [Mini [lindex $LaRUSuiv 7] [lindex $LaRUSuiv 8]] } else { set DSSuiv [Maxi [lindex $LaRUSuiv 7] [lindex $LaRUSuiv 8]] } } else { set DSuiv $TailleQuery if {$Sens == "+"} {set DSSuiv 1e200} else {set DSSuiv 1} } if {[expr abs($FPrec - $DSuiv)] <= 1 || [expr abs($FSPrec-$DSSuiv)] <= 1} {continue} if {$D <= $FPrec} {continue} if {$DSuiv <= $F } {continue} if {$Sens == "+"} { if {$DS <= $FSPrec} {continue} if {$DSSuiv <= $FS } {continue} } else { if {$FSPrec <= $DS } {continue} if {$FS <= $DSSuiv} {continue} } lappend LesRegions $UneRegion break } } } if {[info exists TabTmp]} {unset TabTmp} foreach UnAccessEtUnSens $LesAccessEtLeurSens { set Access [lindex $UnAccessEtUnSens 0] set Sens [lindex $UnAccessEtUnSens 1] foreach UneRegion $LesRegions { set Access2 [lindex [lindex $UneRegion 4] 1] set Sens2 [lindex $UneRegion 6] if {$Access2 != $Access || $Sens2 != $Sens} {continue} set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] if {![info exists TabTmp($D,$F,n) ]} {set TabTmp($D,$F,n) 0} if {![info exists TabTmp($Access,$Sens,$D,$F,n)]} {set TabTmp($Access,$Sens,$D,$F,n) 0} incr TabTmp($D,$F,n) incr TabTmp($Access,$Sens,$D,$F,n) } } set ToutesLesRegions {} foreach UnAccessEtUnSens $LesAccessEtLeurSens { set Access [lindex $UnAccessEtUnSens 0] set Sens [lindex $UnAccessEtUnSens 1] foreach UneRegion $LesRegions { set Access2 [lindex [lindex $UneRegion 4] 1] set Sens2 [lindex $UneRegion 6] if {$Access2 != $Access || $Sens2 != $Sens} {continue} set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] set nTot [set TabTmp($D,$F,n)] set n [set TabTmp($Access,$Sens,$D,$F,n)] set UneRegion [lreplace $UneRegion 2 2 $nTot] set UneRegion [lreplace $UneRegion 3 3 $n ] lappend ToutesLesRegions $UneRegion } } return [lsort -integer -index 0 $ToutesLesRegions] } proc LNduFNgcg {N} { return [SNvsLNgcg $N ln] } proc LNduSNgcg {N} { return [SNvsLNgcg $N ln] } proc LOFtoTFAs {ListOfFiles {UseFilename ""}} { if {$UseFilename==""} { set UseFilename "UseFileName" } set UseFilename [string equal -nocase $UseFilename "UseFilename"] set LesTFAs {} foreach Fichier $ListOfFiles { if {[FileAbsent $Fichier]} { FaireLire "$Fichier\ndoesn't exist ... I'll skip it." continue } set Nom "" if {$UseFilename} { set Nom [file tail $Fichier] } set TFA [SequenceFormatTFA [ContenuDuFichier $Fichier] $Nom] lappend LesTFAs $TFA } return [join $LesTFAs "\n"] } proc LOPPI {pf} { set L [LongueurDeLaSequence $pf "prottfa"] set O [nombreCaracteristiqueAnalyse $pf "orthologie"] set P [nombreCaracteristiqueAnalyse $pf "pdb"] set F [nombreCaracteristiqueAnalyse $pf "pfam"] set I [nombreCaracteristiqueAnalyse $pf "interaction"] return "$L $O $P $F $I" } proc LPABLuc {} { return [LesLignesDuFichier [file join [RepGenLuc] prottfa ListeDesPABs]] set Ll [LesLignesDuFichier [file join [RepGenLuc] fiches bornesdespabs]] foreach l $Ll { if { ! [YaPABdans $Ligne] } { continue } ExtraireDe $Ligne Nom Debut Fin Orient set Boite $Nom lappend ListeDesPABs $Nom } return $ListeDesPABs } proc LaCategorieDeCuttOffDe {CutOff} { Wup "Permet de retourner la categorie du CutOff voulu" global CategorieDeCuttOff if {[info exists CategorieDeCuttOff($CutOff)]} { return [set CategorieDeCuttOff($CutOff)] } else { if {[info exists CategorieDeCuttOff(EstCharge)]} { return [LaCategorieDeCuttOffDe Default] } } if {! [info exists CategorieDeCuttOff($CutOff)]} { #On charge les infos set LesBoths [list GC Tm ExpTm XDebutDeOligoNt XFinDeOligoNt NbCandidats NbContigues NbUnrelated] set LesEquals [list NomOligo] set LesRegexps [list LesCandidats] set Default [list Default] #Both recherche les 2 criteres #Equal recherche exactement ce critere #Regxep recherche la presence de tous en meme temps foreach Cat [list LesBoths LesEquals LesRegexps Default] { switch -exact -- $Cat { "LesBoths" {set TypeDeCat "Both"} "LesEquals" {set TypeDeCat "Equal"} "LesRegexps" {set TypeDeCat "Regexp"} "Default" {set TypeDeCat "Regexp"} } foreach Element [set $Cat] { set CategorieDeCuttOff($Element) $TypeDeCat } } set CategorieDeCuttOff(EstCharge) 1 } return "[LaCategorieDeCuttOffDe $CutOff]" } proc LaConservationDesMeilleuresRegionsRepetees {LesRegions {var 0.05} {TailleMin 10}} { set LesRegionsRestantes {} set LesAccessEtLeurSens {} foreach UneRegion [lsort -integer -index 0 $LesRegions] { set Access [lindex [lindex $UneRegion 4] 1] set Sens [lindex $UneRegion 6] if {![info exists TabTmp($Access,$Sens,LesRR)]} { set TabTmp($Access,$Sens,LesRR) {} lappend LesAccessEtLeurSens [list $Access $Sens] } set n [lindex $UneRegion 3] if {$n <= 1} {lappend LesRegionsRestantes $UneRegion;continue} set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] if {[expr $F - $D + 1] < $TailleMin} {lappend LesRegionsRestantes $UneRegion;continue} lappend TabTmp($Access,$Sens,LesRR) $UneRegion if {![info exists TabTmp($Access,$Sens,$D,$F,nAliMax)]} { set TabTmp($Access,$Sens,$D,$F,nAliMax) 0 } set nAli [lindex $UneRegion 9 ] if {[set TabTmp($Access,$Sens,$D,$F,nAliMax)] < $nAli} { set TabTmp($Access,$Sens,$D,$F,nAliMax) $nAli } } foreach UnAccessEtUnSens $LesAccessEtLeurSens { set Access [lindex $UnAccessEtUnSens 0] set Sens [lindex $UnAccessEtUnSens 1] foreach UneRR [set TabTmp($Access,$Sens,LesRR)] { set D [Mini [lindex $UneRR 0] [lindex $UneRR 1]] set F [Maxi [lindex $UneRR 0] [lindex $UneRR 1]] set nAliMax [expr [set TabTmp($Access,$Sens,$D,$F,nAliMax)] * (1-$var)] set nAli [lindex $UneRR 9 ] if {$nAli < $nAliMax} {continue} if {![info exists TabTmp($Access,$Sens,$D,$F,n)]} { set TabTmp($Access,$Sens,$D,$F,n) 0 } if {![info exists TabTmp($D,$F,n)]} { set TabTmp($D,$F,n) 0 } incr TabTmp($Access,$Sens,$D,$F,n) incr TabTmp($D,$F,n) lappend LesRegionsRestantes $UneRR } } set ToutesLesRegions {} foreach UnAccessEtUnSens $LesAccessEtLeurSens { set Access [lindex $UnAccessEtUnSens 0] set Sens [lindex $UnAccessEtUnSens 1] foreach UneRegion $LesRegionsRestantes { set Access2 [lindex [lindex $UneRegion 4] 1] set Sens2 [lindex $UneRegion 6] if {$Access2 != $Access || $Sens2 != $Sens} {continue} set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] if {![info exists TabTmp($D,$F,n) ]} {lappend ToutesLesRegions $UneRegion;continue} set nTot [set TabTmp($D,$F,n) ] set UneRegion [lreplace $UneRegion 2 2 $nTot] if {![info exists TabTmp($Access,$Sens,$D,$F,n)]} {lappend ToutesLesRegions $UneRegion;continue} set n [set TabTmp($Access,$Sens,$D,$F,n)] set UneRegion [lreplace $UneRegion 3 3 $n ] lappend ToutesLesRegions $UneRegion } } return [lsort -integer -index 0 $ToutesLesRegions] } proc LaDefMACSIMSDe {FichierMacsims access} { package require tdom if {![file isfile $FichierMacsims]} {return ""} set fh [open $FichierMacsims "r"] set domDoc [dom parse -channel $fh] close $fh set root [$domDoc documentElement] set def [$root selectNodes "string(//sequence\[seq-name=\"$access\"\]/seq-info/definition)"] $domDoc delete return $def } proc LaDefinitionDeLAcNuc_PageInfo {PageInfo} { set Champs "DEFINITION" set LaDefinition {} set SuisJeSurLaDef 0 foreach Ligne [split $PageInfo "\n"] { if {[regexp "^$Champs" $Ligne]} { regsub "^$Champs" $Ligne "" Ligne set SuisJeSurLaDef 1 lappend LaDefinition [string trim $Ligne] continue } if {!$SuisJeSurLaDef} {continue} if {![regexp {^ } $Ligne]} {set SuisJeSurLaDef 0;break} lappend LaDefinition [string trim $Ligne] } return $LaDefinition } proc LaDefinitionDeLaProt_PageInfo {PageInfo} { set Champs "DE" set LaDefinition {} foreach DE [LeChampsDeLaPageProteine $PageInfo "DE"] { regsub "^DE" $DE "" DE set DE [string trim $DE] lappend LaDefinition $DE } return $LaDefinition } proc LaDefinition_PageInfo {PageInfo} { set LaDef [LaDefinitionDeLAcNuc_PageInfo $PageInfo] if {$LaDef == ""} {set LaDef [LaDefinitionDeLaProt_PageInfo $PageInfo]} return $LaDef } proc LaDescription2_0 {IdOuAccess} { global MemoDE set IdOuAccess [string toupper $IdOuAccess] if {[info exists MemoDE($IdOuAccess)]} {return $MemoDE($IdOuAccess)} set DE [exec getz "\[UNIPROT-id:$IdOuAccess\] | \[UNIPROT-acc:$IdOuAccess\]" -f des] if {$DE eq ""} { set MemoDE($IdOuAccess) "" } else { foreach el [split $DE "\n"] { append MemoDE($IdOuAccess) "[string trim [string range $el 2 end]] " } set MemoDE($IdOuAccess) [RecupereDescriptionRecommandeUniprot [string trim $MemoDE($IdOuAccess)]] } return $MemoDE($IdOuAccess) } proc LaDifferenceDeL1AvecL2 {Liste1 moins Liste2} { ###Rend une liste contenant les elements presents dans L1 mais pas dans L2 ###Si L2 seulement a des elements supplementaires, cette procedure ne rend rien foreach Element $Liste2 {set TabDejaVu($Element) 1} set LaDifference {} foreach Element $Liste1 { if {[info exists TabDejaVu($Element)]} {continue} lappend LaDifference $Element } return $LaDifference } proc LaFamilleElargie {ListeCandidat {Famille famille}} { Wup "Rend la liste complete FamillePoissonPecheurs PAB GDBName pour une liste access-orga" set ListeDesPABs {} foreach Candidat $ListeCandidat { set CandidatAccess [lindex $Candidat 0] set CandidatOrga [lrange $Candidat 1 end] Espionne "\nCandidat $CandidatOrga" Espionne "Access $CandidatAccess" set NomGscope [LesNomsGscopeDeLOrganisme $CandidatOrga] Espionne "Nom Gscope: $NomGscope" foreach nomG $NomGscope { Espionne $nomG if {$nomG == "BsuX"} { continue } if {$nomG == "BiZar"} { continue } if {$nomG == "VchoDemo"} { continue } set BoiteDuGenome [QuestionDeScience $nomG "ret Narcisse $CandidatAccess"] if {$BoiteDuGenome == "" && [regexp -nocase {[a-z]{3}} $CandidatAccess]} { set LeEmbl [LaSequenceDesBanques $CandidatAccess $CandidatAccess accessOk "OnVeutEMBL"] if {$LeEmbl == ""} {continue} scan [lindex $LeEmbl 1] "%s %s" bidon AC set BoiteDuGenome [QuestionDeScience $nomG "ret Narcisse $AC"] } if {$BoiteDuGenome == ""} {continue} Espionne "BoiteDuGenome $BoiteDuGenome" set ListeAccessEnPlus [QuestionDeScience $nomG "ret LesAccessDesOrganismesSample $BoiteDuGenome"] set ListeOrgaEnPlus [QuestionDeScience $nomG "ret LesAccessDesOrganismesSample $BoiteDuGenome LesOrganismesMerci"] Espionne "coucou1 $ListeAccessEnPlus" Espionne "coucou2 $ListeOrgaEnPlus" foreach AC $ListeAccessEnPlus OG $ListeOrgaEnPlus { #Espionne "$AC $OG" set PAB [NarcissePourLOrganisme $AC $OG] if {$PAB == ""} { continue } lappend ListeDesPABs $PAB lappend AdePAB($PAB) $AC set Poisson [Glossaire $OG Court] set FPP "$Famille $Poisson $nomG" if { ! [info exists FPPdePAB($PAB)] || [lsearch [set FPPdePAB($PAB)] $FPP] < 0} { lappend FPPdePAB($PAB) $FPP } } } } set LesFpPPP {} foreach PAB [lsort -unique $ListeDesPABs] { set LesPecs {} foreach FPP [set FPPdePAB($PAB)] { scan $FPP "%s %s %s" Fam Poi Pec lappend LesPecs $Pec } set Liste [concat [list $Fam $Poi] $LesPecs] set FpPPP [join $Liste "_"] lappend LesFpPPP $FpPPP set PABdeFpPPP($FpPPP) $PAB } set Sortie {} foreach FpPPP [lsort $LesFpPPP] { set PAB [set PABdeFpPPP($FpPPP)] set GDBName [file tail [GenomeDu $PAB]] lappend Sortie "$FpPPP $PAB $GDBName" } EspionneL $Sortie return $Sortie } proc LaFigureAutomatique {} { global RepertoireDuGenome global NePasDessinerLesZonesDansLaRosace global ParametresDuBoard Wup "Draws a rosace with org1 and org2 ... the dotplots have to be made before." NousAllonsAuBoulot "$RepertoireDuGenome/figure" set K [DotPlot genomes phor Proches] # RestaureUneDemarcation $K "org1.dp" # set NePasDessinerLesZonesDansLaRosace 1 set R [DemarqueLaRosace $K] # catch {unset NePasDessinerLesZonesDansLaRosace} #perdu set ParametresDuBoard($R,IemeCouche) 1 # set R [RosaceDuDotPlot $K] set K [DotPlot genomes pfur Proches] # RestaureUneDemarcation $K "org2.dp" set ParametresDuBoard($R,IemeCouche) 0 #perdu set R [DemarqueLaRosace $K] set ParametresDuBoard($R,IemeCouche) 2 # set R [RosaceDuDotPlot $K] RosaceDesPIOs "EnPlus" "" {phor pfur tmar bsub} RosaceDesTwoGenesCluster "EnPlus" "" {phor pfur tmar bsub} OnRevientDuBoulot } proc LaFigureAutomatique2002 {} { global RepertoireDuGenome global NePasDessinerLesZonesDansLaRosace global ParametresDuBoard set R [RosaceDesPIOs "EnPlus" "" {phor pfur tmar bsub}] set R [RosaceDesTwoGenesCluster "EnPlus" "" {phor pfur tmar bsub}] RecoloreLesBoites ClassesFonctionnelles $R } proc LaFigureAutomatiqueMsFinal {} { global RepertoireDuGenome global NePasDessinerLesZonesDansLaRosace global ParametresDuBoard DecalageAngulaireRosace # set R [RosaceDesPIOs "EnPlus" "" {mtub mlep}] set R [RosaceDesTwoGenesCluster "EnPlus" "" {mtub mlep}] set R [RosaceDesGCSkew "EnPlus" "" 0.75 0.80] RecoloreLesBoites "NombreDeCopainsDansBlast" $R } proc LaFrequenceDesPetitesRegions {aTabBlast {LesBanquesIdOuLesContigs All} {SeuilId None}} { upvar $aTabBlast TabBlast set TailleFragment 100000 set NbSubjectDansBlast [set TabBlast(NbSubject)] set TailleQuery [set TabBlast(Taille)] set LesBornes {} set LesGrandesRegions {} for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i)] if {[regexp {_[0-9]*} $BId]} { regexp -nocase {(HS[0-9XYUN]*):([0-9a-z]*)_([0-9]*)} $BId tmp Chromosome Contig NbFragment } else { regexp -nocase {(HS[0-9XYUN]*):([0-9a-z]*)} $BId tmp Chromosome Contig set NbFragment 0 } if {$LesBanquesIdOuLesContigs != "All"} { set EstCeUnDesId 0 foreach BIdOuContigDeRef $LesBanquesIdOuLesContigs { if {$BId == $BIdOuContigDeRef || $Contig == $BIdOuContigDeRef} { set EstCeUnDesId 1 break } } if {!$EstCeUnDesId} {continue} } if {![info exists NbFragment]} {set NbFragment 0} set NbFragment [Base10 $NbFragment] set NbSegment [set TabBlast($BId,NbSegment)] for {set j 1} {$j <= $NbSegment} {incr j} { set Identities [set TabBlast($BId,$j,Identities)] scan $Identities "%d/%d" nmRNA nmRNATot set Id [expr $nmRNA*1.0/$nmRNATot] if {$SeuilId != "None" && $Id < $SeuilId} {continue} set DQ [set TabBlast($BId,$j,DQ)] set FQ [set TabBlast($BId,$j,FQ)] set DS [expr [set TabBlast($BId,$j,DS)] + $TailleFragment*$NbFragment] set FS [expr [set TabBlast($BId,$j,FS)] + $TailleFragment*$NbFragment] set Sens [SensDeLaRegion [set TabBlast($BId,$j,Orientation)]] set LAlignement [split [set TabBlast($BId,$j,AlignLineaire)] "\n"] set AlignQuery [lindex $LAlignement 0] regsub {^Query:[0-9 ]*} $AlignQuery "" AlignQuery regsub {[0-9 ]*$} $AlignQuery "" AlignQuery set AlignQuery [string trim $AlignQuery] set AlignSubject [lindex $LAlignement 2] regsub {^Sbjct:[0-9 ]*} $AlignSubject "" AlignSubject regsub {[0-9 ]*$} $AlignSubject "" AlignSubject set AlignSubject [string trim $AlignSubject] if {[info exists Region($DQ,$FQ,$DS,$FS)]} {continue} set Region($DQ,$FQ,$DS,$FS) 1 lappend LesGrandesRegions [list "$DQ" "$FQ" "$Chromosome" "$Contig" "$DS" "$FS" "$Sens" "$AlignQuery" "$AlignSubject"] lappend LesBornes [list "$DQ"] set TabBornesDebut($DQ) "OK" lappend LesBornes [list "$FQ"] set TabBornesFin($FQ) "OK" } unset Contig unset NbFragment unset Chromosome } set LesBornes [lsort -integer -increasing -index 0 [ElimineLesRedondancesDansUneListe $LesBornes]] set LesGrandesRegions [lsort -integer -increasing -index 0 [lsort -integer -increasing -index 1 $LesGrandesRegions]] set LesPetitesRegions {} set NbRegions 0 foreach Borne $LesBornes { if {![info exists DebutDeRef]} {set DebutDeRef $Borne} if {$Borne == $DebutDeRef} { if {[info exists TabBornesFin($Borne)]} { set FinDeRef $Borne lappend LesPetitesRegions [list "$DebutDeRef" "$FinDeRef"] set DebutDeRef [expr $Borne + 1] } continue } if {[info exists TabBornesDebut($Borne)] && [info exists TabBornesFin($Borne)]} { set FinDeRef [expr $Borne - 1] incr NbRegions lappend LesPetitesRegions [list "$DebutDeRef" "$FinDeRef"] set DebutDeRef $Borne set FinDeRef $Borne incr NbRegions lappend LesPetitesRegions [list "$DebutDeRef" "$FinDeRef"] set DebutDeRef [expr $Borne +1] } elseif {[info exists TabBornesDebut($Borne)] && ![info exists TabBornesFin($Borne)]} { set FinDeRef [expr $Borne - 1] incr NbRegions lappend LesPetitesRegions [list "$DebutDeRef" "$FinDeRef"] set DebutDeRef $Borne } elseif {![info exists TabBornesDebut($Borne)] && [info exists TabBornesFin($Borne)]} { set FinDeRef $Borne incr NbRegions lappend LesPetitesRegions [list "$DebutDeRef" "$FinDeRef"] set DebutDeRef [expr $Borne + 1] } } set LesRegions $LesPetitesRegions set LesPetitesRegions {} foreach UnePetiteRegion $LesRegions { set DPR [lindex $UnePetiteRegion 0] set FPR [lindex $UnePetiteRegion 1] if {1 < $DPR && ![info exists Frequence]} { set Frequence 0 lappend LesPetitesRegions [list "1" [expr $DPR - 1] "$Frequence" {}] } set Frequence 0 set LesCoordonneesDesSubjects {} foreach UneGrandeRegion $LesGrandesRegions { set DGR [lindex $UneGrandeRegion 0] set FGR [lindex $UneGrandeRegion 1] if {$DGR <= $DPR && $FPR <= $FGR } { incr Frequence set Chromo [lindex $UneGrandeRegion 2] set Contig [lindex $UneGrandeRegion 3] set DS [lindex $UneGrandeRegion 4] set FS [lindex $UneGrandeRegion 5] set Sens [lindex $UneGrandeRegion 6] set AlignQ [lindex $UneGrandeRegion 7] set AlignS [lindex $UneGrandeRegion 8] if {$Sens == "-"} {set i -1} else {set i 1} set PosQ [expr $DGR - 1] set PosS [expr $DS - $i] foreach BaseQ [split $AlignQ ""] BaseS [split $AlignS ""] { if {$BaseQ != "-" && $BaseS != "-"} { incr PosQ incr PosS "$i" } elseif {$BaseQ == "-"} { incr PosS "$i" } elseif {$BaseS == "-"} { incr PosQ } if {$PosQ == $DPR} {set DSSurPR $PosS} if {$PosQ == $FPR} {set FSSurPR $PosS;break} } if {[info exists Subjects($DPR,$FPR,$Chromo,$Contig,$DSSurPR,$FSSurPR,$Sens)]} {continue} set Subjects($DPR,$FPR,$Chromo,$Contig,$DSSurPR,$FSSurPR,$Sens) 1 lappend LesCoordonneesDesSubjects [list "$Chromo" "$Contig" "$DSSurPR" "$FSSurPR" "$Sens"] } } lappend UnePetiteRegion $Frequence lappend UnePetiteRegion $LesCoordonneesDesSubjects lappend LesPetitesRegions $UnePetiteRegion } set FinDeLaDerniereRegion [lindex [lindex $LesPetitesRegions end] 1] if {$FinDeLaDerniereRegion != $TailleQuery} { set Frequence 0 lappend LesPetitesRegions [list [expr $FinDeLaDerniereRegion + 1] "$TailleQuery" "$Frequence" {}] } if {[info exists TabBornesDebut]} {unset TabBornesDebut} if {[info exists TabBornesFin ]} {unset TabBornesFin } return $LesPetitesRegions } proc LaFrequenceDesPetitesRegionsDeLaQueryDuBlast {FichierBlast {ExpectMax 1e200} {NbSubjectMax 1e200} {IdMin 0.0} {SplitWithGap Yes} {LesBanqueId ""}} { set TailleQ [AskBlast $FichierBlast Taille] set LesGrandesRegions [LesGrandesRegionsDeLaQueryDuBlast $FichierBlast $ExpectMax $NbSubjectMax $IdMin $SplitWithGap $LesBanqueId] set LesPetitesRegions [LesPetitesRegionsDesGrandesRegions $LesGrandesRegions ] foreach LaRegion [LesRegionsAbsentesDesPetitesRegions $LesPetitesRegions 1 $TailleQ ] { lappend LesPetitesRegions $LaRegion } set LesFrequencesDesPetitesRegions {} foreach LaPetiteRegion [lsort -index 0 -real $LesPetitesRegions] { set DPR [lindex $LaPetiteRegion 0] set FPR [lindex $LaPetiteRegion 1] set i 0 foreach LaGrandeRegion $LesGrandesRegions { set DGR [lindex $LaGrandeRegion 0] set FGR [lindex $LaGrandeRegion 1] if {[CesRegionsSontEllesOverlappantes $DPR $FPR $DGR $FGR]} {incr i} } lappend LesFrequencesDesPetitesRegions [list $DPR $FPR $i] } return $LesFrequencesDesPetitesRegions } proc LaFtableDansLOrdre {NoeudFtable {Quoi ""}} { if {$Quoi==""} {set Quoi "AllTypes"} set LesFtype {} set LesFitem {} foreach NoeudFitem [$NoeudFtable selectNodes "fitem"] { set Ftype [$NoeudFitem selectNodes "string(ftype)"] lappend LesFtype $Ftype if {$Quoi=="TypeList"} { continue } set Fstart [$NoeudFitem selectNodes "string(fstart)"] set Fstop [$NoeudFitem selectNodes "string(fstop)"] set Fcolor [$NoeudFitem selectNodes "string(fcolor)"] set Fscore [$NoeudFitem selectNodes "string(fscore)"] set Fnote [$NoeudFitem selectNodes "string(fnote)"] if {$Quoi=="$Ftype" || $Quoi=="AllTypes"} { set Fitem [list $Ftype $Fstart $Fstop $Fcolor $Fscore $Fnote] lappend LesFitem $Fitem } } if {$Quoi=="TypeList"} { set LesFtype [lsort -unique $LesFtype] return $LesFtype } set LesFitem [lsort -index 1 -integer $LesFitem] return $LesFitem } proc LaFusionDesRegionsOverlappantes {LesRegions} { set LesRegionsFusionnees {} set FinDeRef "" set DebutDeRef "" foreach LaRegion [lsort -index 0 -real [lsort -index 1 -real $LesRegions]] { set Debut [Mini [lindex $LaRegion 0] [lindex $LaRegion 1]] set Fin [Maxi [lindex $LaRegion 0] [lindex $LaRegion 1]] if {$DebutDeRef == ""} { set DebutDeRef $Debut set FinDeRef $Fin continue } #Espionne "$Debut $Fin $DebutDeRef $FinDeRef" if {[CesRegionsSontEllesOverlappantes $Debut $Fin $DebutDeRef $FinDeRef]} {set FinDeRef [Maxi $Fin $FinDeRef];continue} lappend LesRegionsFusionnees [list $DebutDeRef $FinDeRef] set DebutDeRef $Debut set FinDeRef $Fin } if {$DebutDeRef == "" || $FinDeRef == ""} {return $LesRegionsFusionnees} lappend LesRegionsFusionnees [list $DebutDeRef $FinDeRef] return $LesRegionsFusionnees } proc LaLigneAPnOsOc {Nom Candidat} { global RepertoireDuGenome global LesLignesAPnOsOc NomDuAPnOsOcCourant scan $Candidat "%s %s %f" BanqueId Access PN if { ! [info exists NomDuAPnOsOcCourant] || $NomDuAPnOsOcCourant != $Nom } { set FichierAPnOsOc "$RepertoireDuGenome/apnosoc/$Nom" if { ! [file exists $FichierAPnOsOc]} { set LesLignesAPnOsOc {} } set LesLignesAPnOsOc [LesLignesDuFichier $FichierAPnOsOc] set NomDuAPnOsOcCourant $Nom } set Ieme [lsearch -regexp $LesLignesAPnOsOc "$BanqueId $Access"] if { $Ieme < 0 } { return "" } return [lindex $LesLignesAPnOsOc $Ieme] } proc LaListeDesAccessEnPlusObtenusParGO {} { global MesAccessInterressants MesAccessInterressants #Charge la liste des Access du premier projet set Liste [ListeDesPABs] #set Liste [ListeTest] set MesAcc "" foreach PAB $Liste { set AccProt "" set Id "" set AccProt [AccessDeLaBoite $PAB protein] if {$AccProt == $PAB} {continue} lappend MesAcc $AccProt #Espionne "$PAB $AccProt" if {![info exists DejaVu($AccProt)]} {set DejaVu($AccProt) 1} else {continue} set Id [lindex [DefDeAcc $AccProt "protein" "Id"] 1] if {![info exists DejaVu($Id)]} {set DejaVu($Id) 1} else {continue} #Espionne "$PAB $AccProt $Id" if {$AccProt==""} {Espionne "No prot for $PAB $AccProt"} } set NbNew 0 set NbCommune 0 if {1} { set LesAccess [array names MesAccessInterressants] foreach Access $LesAccess { if {![info exists DejaVu($Access)]} { #EnrichiAccessToKeepOrNotToKeep $AccProt Espionne "$Access\t\t[join [lrange [DefDeAcc $Access protein Def] 1 end] " "]" incr NbNew } else { incr NbCommune } } } Espionne "Nombre de PAB [llength $Liste]" Espionne "Nombre de Proteine [llength $MesAcc]" Espionne "Sans les doubles [llength [lsort -unique $MesAcc]]" Espionne "Nombre de genes en commun $NbCommune" Espionne "Nombre de genes en plus $NbNew" #set LesAccess [array names MesAccessInterressants] #EspionneL [lsort $LesAccess] return "" } 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 LaListeNomAlias {} { set LaListe {} foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] if {$Alias==""} { set Alias "unknown" } lappend LaListe "$Nom $Alias" } return [join $LaListe "\n"] } proc LaListeRetournee {Liste} { set n [llength $Liste] if {$n == 0} {return {}} set LaListeRetournee {} for {set i [expr $n - 1]} {$i >=0} {incr i -1} { lappend LaListeRetournee [lindex $Liste $i] } return $LaListeRetournee } proc LaListeSplittee {ListeIni NbElementsParListe} { set LesListes {} set Liste $ListeIni while {0 < [llength $Liste]} { set LengthListe [llength $Liste] if {$NbElementsParListe < $LengthListe} { lappend LesListes [lrange $Liste 0 [expr $NbElementsParListe - 1]] set Liste [lrange $Liste $NbElementsParListe end ] } else { lappend LesListes [lrange $Liste 0 [expr $LengthListe - 1]] set Liste {} } } return $LesListes } proc LaListeToBeOrthologue {{PlusMinusOrgas ""}} { global ToBeOrthologue if {$PlusMinusOrgas==""} { FaireLire "Please give a list of organisms with + and - (ie. +paby -mjan -phor +hsp)" set PlusMinusOrgas [Entre] if {$PlusMinusOrgas==""} { return {} } } set Texte $PlusMinusOrgas regsub -all " " $Texte "" Texte if { ! [regexp {^(\+|\-)} $Texte]} { set Texte "+$Texte" } regsub -all {\+|\-} $Texte " &" Texte regsub "^ " $Texte "" Texte set LesVoulus {} set LesExclus {} foreach PMOrga [split $Texte " "] { regsub {^(\+|\-)} $PMOrga "" Orga if {[regexp {\+} $PMOrga]} { lappend LesVoulus $Orga } if {[regexp {\-} $PMOrga]} { lappend LesExclus $Orga } } set LesCommeIlFaut {} foreach Nom [ListeDesPABs] { set ToBeOrthologue($Nom) 0 set Presents [ORGAorgaDesMSFs $Nom "Presents"] set IlEnManqueUn 0 foreach Orga $LesVoulus { if { ! [regexp -nocase $Orga $Presents]} { set IlEnManqueUn 1 ; break } } if {$IlEnManqueUn} { continue } set YAUnExclu 0 foreach Orga $LesExclus { if {[regexp -nocase $Orga $Presents]} { set YAUnExclu 1 ; break } } if {$YAUnExclu} { continue } set ToBeOrthologue($Nom) 1 lappend LesCommeIlFaut $Nom } set ToBeOrthologue($PlusMinusOrgas) 1 return $LesCommeIlFaut } proc LaManierePourAffiche {TypeDeFichier} { set PourNotes 0 set PourNuc 0 set PourProt 0 set PourBlast 0 set PourMSF 0 set Rep [file tail [file dirname $TypeDeFichier]] if {[regexp -nocase {^notes} $Rep]} { set PourNotes 1 } if {[regexp -nocase {^(copain|tfa)} $Rep]} { set PourNuc 1 } if {[regexp -nocase {nuctfa|nucembl} $Rep]} { set PourNuc 1 } if {[regexp -nocase {prottfa|protembl} $Rep]} { set PourProt 1 } if {[regexp -nocase {(TBlast|Blast|Ballast)} $Rep]} { set PourBlast 1 } if {[regexp -nocase {(MSF|Clustal|DbClustal)} $Rep]} { set PourMSF 1 } set LesAvecs {} if {$PourNuc} { lappend LesAvecs "AvecBlaste" "AvecFormate"} if {$PourProt} { lappend LesAvecs "AvecBlaste" "AvecFormate"} if {$PourBlast} { lappend LesAvecs "AvecAligneurs" "AvecSegAlignements" } if {$PourMSF} { lappend LesAvecs "AvecEtudeMSF" "GrandeLargeur"} if {[OnTraiteDesClones]} { if {$PourNotes} { lappend LesAvecs "AvecOli" lappend LesAvecs "AvecShowItsOligos" } } set LesAvecs [lsort -unique $LesAvecs] return [join $LesAvecs ""] } proc LaMeilleureProteineDuMeilleurContig {Nom {ExpectMax 0.001} {var 0.05} {Extension 10000} {IdMin 0.8}} { set IdDeRef [expr (1 - $var)] set FBlast "[RepertoireDuGenome]/blastngenembl/$Nom" if {![file exists $FBlast]} {return [list $Nom "NoBlastFound"]} set Rep "[RepertoireDuGenome]/contig" if {![file exists $Rep]} {file mkdir $Rep} set FichierTFA "$Rep/$Nom" set FichierTFAMasked "$Rep/$Nom.m" set FichierTFATmp "[TmpFile $Nom].tfa" set FichierBlastX "$Rep/$Nom.blastx" set OrgaDeRef [OrganismeDuPAB $Nom] Espionne "$Nom -> Contig extraction" set NbSubject [AskBlast $FBlast NbSubject] if {$NbSubject == ""} {return [list $Nom "NoContigFound"]} set LesContigsBruts [lsort -decreasing -index 8 -integer [LesContigsDuBlast $FBlast $ExpectMax]] if {$LesContigsBruts == {}} {return [list $Nom "NoContigFound"]} foreach LeContig $LesContigsBruts { set BId [lindex $LeContig 0] set Orga [lindex $LeContig 12] if {$Orga != $OrgaDeRef} {continue} set PIdContig [lindex $LeContig 7] if {$PIdContig < $IdDeRef } {continue} set Access [lindex $LeContig 1] set Taille [lindex $LeContig 2] set Expect [lindex $LeContig 5] set Score [lindex $LeContig 6] set NbContig [lindex $LeContig 8] Espionne "$Nom -> Best Contig $BId $Access $Orga $PIdContig $NbContig" set D [Mini [AskBlast $FBlast BanqueId $BId Segment 1 DS] [AskBlast $FBlast BanqueId $BId Segment 1 FS]] set F [Maxi [AskBlast $FBlast BanqueId $BId Segment 1 DS] [AskBlast $FBlast BanqueId $BId Segment 1 FS]] set ExtensionMin $Extension set ExtensionMax $Extension set BorneMin [expr $D - $ExtensionMin] set BorneMax [expr $F + $ExtensionMax] if {$Taille < $BorneMax} {set BorneMax $Taille;set ExtensionMax [expr $BorneMax - $F ]} if {$BorneMin < 1 } {set BorneMin 1 ;set ExtensionMin [expr $D - $BorneMin]} set D [expr $BorneMin + $ExtensionMin] set F [expr $BorneMax - $ExtensionMax] set DNew $ExtensionMin set FNew [expr $BorneMax - $BorneMin + 1 - $ExtensionMax] set Seq [SequenceDeLAccess $BId htg] set TailleSeq [string length $Seq] if {$Taille != $TailleSeq} { Espionne "$BId length change $Taille -> $TailleSeq" continue } set Seq [string range $Seq [expr $BorneMin - 1] [expr $BorneMax - 1]] if {$Seq == ""} {continue} set Entete "$Nom contig $BId $Taille from $BorneMin to $BorneMax Query from $D to $F" set SeqTFA [SequenceFormatTFA $Seq $Entete "brut"] Sauve $SeqTFA dans $FichierTFA Sauve $SeqTFA dans $FichierTFATmp set OptionSpecies [OptionsSpeciesAutomatique $Orga] if {$OptionSpecies != "None"} { Espionne "$Nom -> contig $BId is masking with Repeatmasker with the option $OptionSpecies" set SeqTFA [MasqueLesRepeatsDuFichier $FichierTFA $OptionSpecies] Sauve $SeqTFA dans $FichierTFAMasked set FichierTFA $FichierTFAMasked } Espionne "$Nom -> $FichierTFA against protein database" PipeBlast $FichierTFA protein $FichierBlastX X 500 $ExpectMax T 4 Espionne "$Nom -> Blast OK" set LesProteines [LesProteinesLesPlusProchesDeLaRegionDuContig $FichierTFAMasked $FichierBlastX $DNew $FNew $IdMin $ExpectMax] if {$LesProteines == {}} { return [list $Nom "Contig" $BId $Access $Taille $Orga $Expect $PIdContig $NbContig "NoProteinFound"] } set LesBIdProt {} foreach LaProteine [lsort -real -increasing -index 3 $LesProteines] {lappend LesBIdProt [lindex $LaProteine 0]} AskLesPagesInfos load $LesBIdProt protein if {[info exists LaProteineDeRef]} {unset LaProteineDeRef} if {[info exists DistanceMin] } {unset DistanceMin} set NbDeRef 0 foreach LaProteine [lsort -real -increasing -index 3 $LesProteines] { set BIdProt [lindex $LaProteine 0] if {[AskLesPagesInfos ask $BIdProt] == ""} {continue} set Def [PageInfo $BIdProt protein des] if {[regexp -nocase "Fragment" $Def]} {continue} set Distance [lindex $LaProteine 3] if {![info exists DistanceMin]} {set DistanceMin [expr $Distance * (1 + $var)]} if {$DistanceMin < $Distance} {break} set Nb [lindex $LaProteine 7] if {$NbDeRef < $Nb} { set LaProteineDeRef $LaProteine set NbDeRef $Nb } } if {![info exists LaProteineDeRef]} {break} set BIdProt [lindex $LaProteineDeRef 0] set AccessProt [lindex $LaProteineDeRef 1] set TailleProt [lindex $LaProteineDeRef 2] set Distance [lindex $LaProteineDeRef 3] set ExpectProt [lindex $LaProteineDeRef 4] set ScoreProt [lindex $LaProteineDeRef 5] set PIdProt [lindex $LaProteineDeRef 6] set NbProt [lindex $LaProteineDeRef 7] set PageInfo [AskLesPagesInfos ask $BIdProt] set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set OrgaDeProt [lindex $LesOrgas 0] set EstCeUnDesOrga 0 foreach O $LesOrgas {if {[string equal -nocase $O $Orga]} {set EstCeUnDesOrga 1}} if {$EstCeUnDesOrga} {set OrgaDeProt $Orga} Espionne "$Nom -> Best Protein found $BIdProt $AccessProt $OrgaDeProt $PIdProt $NbProt" AskLesPagesInfos unset return [list $Nom "Contig" $BId $Access $Taille $Orga $Expect $PIdContig $NbContig "Protein" $BIdProt $AccessProt $TailleProt $OrgaDeProt $Distance $ExpectProt $ScoreProt $PIdProt $NbProt] } return [list $Nom "NoContigFound"] } proc LaNouvellesListeDesPABsDuDD {} { #fiches/ListeDesSansProtSansJumeaux set Fichier623 "/genomics/link/HeadNecknonrnr/fiches/ListeDesSansProtSansJumeaux" foreach Ligne [LesLignesDuFichier $Fichier623] { set Nom [lindex $Ligne 0] set Vu($Nom) 1 lappend ListeDesPABs $Nom } set Fichier555 "/genomics/link/HeadNecknonrnr/Jumeaux/Les555DDAvecProtSansDb" foreach Ligne [LesLignesDuFichier $Fichier555] { set DD [lindex $Ligne 0] if {[info exists Vu($DD)]} {Espionne "$DD doublon";continue} lappend ListeDesPABs $DD } Espionne [llength $ListeDesPABs] SauveLesLignes $ListeDesPABs dans "/genomics/link/HeadNecknonrnr/fiches/ListeDesPABs" } proc LaProteineADesVariants {Access {Quoi Etat}} { Wup "Permet de savoir si Access a des variants et le nombre" Wup "Attention il faut compter plus 1 car lui n esr pas avec dans varsplic" global TabVariant if {[info exists TabVariant($Access,$Quoi)]} { return "[set TabVariant($Access,$Quoi)]" } else { if {[info exists TabVariant]} {unset TabVariant} } set Banques "protein" set Link "varsplic" set Type [list "acc" "id"] set OnARien 0 foreach Typ $Type { set Commande "getz -vf des \"\\\[$Banques-$Typ: $Access\\\] > $Link \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$OnARien==0 && $GetzOut == ""} { set OnARien 0 continue } else { set OnARien 1 set NbVariant "[llength [split $GetzOut "\n"]]" set TabVariant($Access,NbVariant) $NbVariant break } } if {$OnARien =="1"} { set TabVariant($Access,Etat) 1 return 1 } else { set TabVariant($Access,Etat) 0 return 0 } } proc LaSelectionDeChunhuaPourProcure {Rep Fichier} { #les 19 clones selectionnes par C[GscopeDatabase hunhua sont dans le gscope Strasbg. #FichierFoldExpression "[GscopeDatabaseDir HeadNeck3]/fiches/FoldExpression" #FichierBilanMasking "[GscopeDatabaseDir HeadNeck3]/fiches/BilanMasking" #FichierKegg "[GscopeDatabaseDir HeadNeck3]/fiches/Kegg" #FichierGeneName "[GscopeDatabaseDir HeadNeck3]/fiches/GeneName" #FichierDomaines "[GscopeDatabaseDir HeadNeck3]/fiches/Domaines" #FichierBestProt "[GscopeDatabaseDir HeadNeck3]/fiches/BestProteinAndmRNAForeachOrga" #FichierHydrophobicity "[GscopeDatabaseDir /HeadNeck3/fiches/hydrophobicity" foreach JR [split [ContenuDuFichier "[GscopeDatabaseDir HeadNeck3]/procure/les19jrdechunhua"] " "] { Espionne $JR set FichierACreer "[RepertoireDuGenome]/fiches/$Fichier" if {![file exists $FichierACreer]} { foreach Ligne [LesLignesDuFichier "$Rep/fiches/$Fichier"] { set PAB [lindex $Ligne 0] if {$PAB!=$JR} {continue} if {$PAB==$JR} {lappend LeContenu $Ligne} } } } SauveLesLignes $LeContenu dans $FichierACreer return $LeContenu } proc LaSelectionDeNoe {{ReInit 0} {Save Save}} { global RepertoireDuGenome set FichierSelectionDeNoe "$RepertoireDuGenome/fiches/SelectionDeNoe" set ReInitialise [expr [string equal $ReInit "1"] || [string equal -nocase $ReInit "ReInitialise"]] if {$ReInitialise || ![file exists $FichierSelectionDeNoe]} { FaireLire "Please, choose the organisms you are specially interested in." set LaListeDesOrganismes [list "Homo sapiens" "Mus musculus" "Rattus norvegicus" "Drosophila melanogaster"] set LesOrganismes [ChoixDesPresents $LaListeDesOrganismes "" "Select organisms"] while {[OuiOuNon "Would you want to add an other organism to that list ?"]} { set NouvelOrganisme [Entre] set BonOrg [Glossaire $NouvelOrganisme Complet] if {$BonOrg==""} { if {![OuiOuNon "The organism $NouvelOrganisme doesn't exist\nDo you want to select it?"]} { continue } } elseif {$BonOrg!=$NouvelOrganisme} { if {[OuiOuNon "Your organism $NouvelOrganisme \n seems to be \n $BonOrg \n Do I keep $BonOrg ?"]} { set NouvelOrganisme $BonOrg } else { if {![OuiOuNon "Do I keep $NouvelOrganisme?"]} { continue } } } if {$NouvelOrganisme != "" } { lappend LesOrganismes $NouvelOrganisme } } if {$Save == "Save"} { Sauve [join $LesOrganismes "\n"] dans $FichierSelectionDeNoe } return $LesOrganismes } else { return [LesLignesDuFichier $FichierSelectionDeNoe] } } proc LaSelectionDesBestGO {LesGO {PMin 0.80} {FMin 0.5} {NbGOParType ""}} { set LesGO [LesGODeRefDesGO $LesGO] #Determine les effectifs de chaque GO dans un tableau indexe par le nom du GO foreach GO $LesGO { if {![info exists TabGO($GO)]} {set TabGO($GO) 0} incr TabGO($GO) } #Distingue chaque embranchement de l'arbre ontologique et calcul les effectifs de chacun des noeuds de ces embranchements set LesEmbranchementsEtLeurEffectif {} foreach GO [ElimineLesRedondancesDansUneListe $LesGO] { foreach Type [GODB GO $GO LesTypes] { #Espionne "$GO\t$Type\t[set TabGO($GO)]" if {$Type == ""} {continue} if {![info exists TabGO($Type,Lesn)]} {set TabGO($Type,Lesn) {}} foreach LEmbranchement [LesEmbranchementsGO $Type $GO] { set n 0 set LEmbranchementEtLeursEffectifs {} foreach GODeLEmbranchement $LEmbranchement { if {[info exists TabGO($GODeLEmbranchement)]} {incr n [set TabGO($GODeLEmbranchement)]} lappend LEmbranchementEtLeursEffectifs [list $Type $GODeLEmbranchement $n] } lappend TabGO($Type,Lesn) $n lappend LesEmbranchementsEtLeurEffectif $LEmbranchementEtLeursEffectifs } } } #Elimination des embranchements avec effectif trop faible (Seuil FMin * EffectifDeTousLesEmbranchements Max) et des noeuds rares (Seuil PMin * EffectifMaxDeLEmbranchement) set LesGO {} foreach LEmbranchementEtLeursEffectifs $LesEmbranchementsEtLeurEffectif { set Type [lindex [lindex $LEmbranchementEtLeursEffectifs 0 ] 0] set nMax [lindex [lindex $LEmbranchementEtLeursEffectifs end] 2] set Max [lindex [lsort -integer [set TabGO($Type,Lesn)]] end] set nMin1 [expr $Max * $FMin ] set nMin2 [expr $nMax * $PMin ] foreach LeGOEtSonEffectif $LEmbranchementEtLeursEffectifs { set Type [lindex $LeGOEtSonEffectif 0] set GO [lindex $LeGOEtSonEffectif 1] set n [lindex $LeGOEtSonEffectif 2] if {$n < $nMin1 || $n < $nMin2} {continue} set Tab($GO) $n lappend LesGO $GO break } } set LesGO [EnterrerLesAncetresGO [ElimineLesRedondancesDansUneListe $LesGO]] if {$NbGOParType == ""} { if {[info exists TabGO]} {unset TabGO} return $LesGO } set LesGO2 {} foreach GO $LesGO {set n [set TabGO($GO)];lappend LesGO2 [list $GO $n]} set LesGO {} foreach LeGO [lsort -decreasing -index 1 -integer $LesGO2] { set GO [lindex $LeGO 0] foreach Type [GODB GO $GO LesTypes] { if {![info exists TabGO($Type,n)]} {set TabGO($Type,n) 0} incr TabGO($Type,n) if {$NbGOParType < [set TabGO($Type,n)]} {continue} lappend LesGO $GO } } if {[info exists TabGO]} {unset TabGO} return $LesGO } proc LaSelectionDesEST {Nom FichierTFA FichierBlastEST {AllOrgaouJustMyOrga AllOrga} {ID 0.98} {TailleAliMin 50}} { if {![file exists $FichierTFA] || ![file exists $FichierBlastEST]} {return} AskBlast unset set FichierBlastEST [BlastDesMeilleursESTDuBlast $FichierBlastEST $FichierTFA "" $ID $TailleAliMin] set LesId [LesBanqueIdDuBlast $FichierBlastEST 1e200 1e200] set OrgaDeRef [OrganismeDuPAB $Nom] AskLesPagesInfos load $LesId est set LeTexte {} foreach Id $LesId { set Page [AskLesPagesInfos ask $Id] set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] if {$AllOrgaouJustMyOrga != "AllOrga"} { set EstCeUnDesOrga 0 foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} {set EstCeUnDesOrga 1;break} } if {!$EstCeUnDesOrga} {continue} } foreach Orga $LesOrgas {lappend LeTexte "$Nom\t$Id\tOrganism\t$Orga" } foreach Tissue [LesTissuesDeLAcNuc_PageInfo $Page] {lappend LeTexte "$Nom\t$Id\tTissueType\t$Tissue"} foreach DevStage [LesDevStageDeLAcNuc_PageInfo $Page] {lappend LeTexte "$Nom\t$Id\tDevStage\t$DevStage"} } AskBlast unset AskLesPagesInfos unset return $LeTexte } proc LaSelectionDesESTPourTous {RepTFA RepBlast FichierPop FichierOut} { set L [CreeListePourFichierAUneColonne $FichierPop] foreach Nom $L { Espionne $Nom set FichierTFA "$RepTFA/$Nom" set FichierBlastEST "$RepBlast/$Nom" if {![file exists $FichierTFA]} {continue} if {![file exists $FichierBlastEST]} {continue} lappend LaSelection [LaSelectionDesEST $Nom $FichierTFA $FichierBlastEST] } set LaSelection [join $LaSelection " "] SauveLesLignes $LaSelection dans $FichierOut } proc LaSelectionDesMeilleursGO {LesGO {P 0.80} {FractionDuMax 0.33} {NbGOParType ""}} { foreach GO $LesGO { if {![info exists TabGO($GO)]} {set TabGO($GO) 0} incr TabGO($GO) } set LesEmbranchementsEtLeurEffectif {} foreach GO [ElimineLesRedondancesDansUneListe $LesGO] { set GO [string toupper $GO] set Type [Onto $GO Type] if {$Type == ""} {continue} if {![info exists TabGO($Type,Lesn)]} {set TabGO($Type,Lesn) {}} foreach LEmbranchement [LesEmbranchementsOntologiques $Type $GO] { set n 0 set LEmbranchementEtLeursEffectifs {} foreach GODeLEmbranchement $LEmbranchement { if {[info exists TabGO($GODeLEmbranchement)]} {incr n [set TabGO($GODeLEmbranchement)]} lappend LEmbranchementEtLeursEffectifs [list $Type $GODeLEmbranchement $n] } lappend TabGO($Type,Lesn) $n lappend LesEmbranchementsEtLeurEffectif $LEmbranchementEtLeursEffectifs } } set LesGO {} foreach LEmbranchementEtLeursEffectifs $LesEmbranchementsEtLeurEffectif { set Type [lindex [lindex $LEmbranchementEtLeursEffectifs 0 ] 0] set nMax [lindex [lindex $LEmbranchementEtLeursEffectifs end] 2] set Max [lindex [lsort -integer [set TabGO($Type,Lesn)]] end] set nMin1 [expr $Max * $FractionDuMax ] set nMin2 [expr $nMax * $P ] #Espionne "$Type $Max $nMin1 $nMin2" #Espionne $LEmbranchementEtLeursEffectifs foreach LeGOEtSonEffectif $LEmbranchementEtLeursEffectifs { set Type [lindex $LeGOEtSonEffectif 0] set GO [lindex $LeGOEtSonEffectif 1] set n [lindex $LeGOEtSonEffectif 2] if {$n < $nMin1 || $n < $nMin2} {continue} set Tab($GO) $n lappend LesGO $GO break } } set LesGO [EnterrerLesAncetresOntologiques [ElimineLesRedondancesDansUneListe $LesGO]] if {$NbGOParType == ""} { if {[info exists TabGO]} {unset TabGO} return $LesGO } set LesGO2 {} foreach GO $LesGO {set n [set TabGO($GO)];lappend LesGO2 [list $GO $n]} set LesGO {} foreach LeGO [lsort -decreasing -index 1 -integer $LesGO2] { set GO [lindex $LeGO 0] set Type [Onto $GO Type] if {![info exists TabGO($Type,n)]} {set TabGO($Type,n) 0} incr TabGO($Type,n) if {$NbGOParType < [set TabGO($Type,n)]} {continue} lappend LesGO $GO } if {[info exists TabGO]} {unset TabGO} return $LesGO } proc LaSelectionDesSegmentsDuBlast {FichierBlast {EnFonctionDe Expect} {SeuilOuValeurs 0.001}} { Wup "EnFonctionDe -> LesBIdToKeep , LesBIdToEliminate , LesSegmentsDesBIdToKeep, LesAccessToKeep , LesAccessToEliminate , LesOrgaToKeep , LesOrgaToEliminate , LesmRNAsToKeep, LesmRNAsToEliminate, Expect , Score , SensToKeep, SensToEliminate , Identity, IdentityWithoutFilter, Positives, PositivesWithoutFilter, NbPositivesSurTailleQuery, NbPositivesSurTailleQueryWithoutFilter, TailleAlignementMin, TailleAlignementMax , LesRegionsToEliminate (Elimination des segments possedant ces regions), LesRegionsToKeep (Segments possedant les regions a conserver), NbSubjectMax, NbAliMax, JusteLePremierAlignementDesSubjects,RegionsAligneesSurRegionsAlignables, RegionsAligneesSurRegionsDansAlignement, RegionsAligneesSurRegionsDansAlignementSubject, RegionsAligneesSurTailleQuery, RegionsAligneesSurTailleSubject, RegionsAligneesSurTailleQueryDansLeMeilleurDesSens, RegionsAligneesSurTailleSubjectDansLeMeilleurDesSens" set LesSegmentsAConserver {} set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == ""} {return} set Mask "X" if {[string equal -nocase "BLASTN" $TypeDeBlast]} {set Mask "N"} set NbSubjectDansBlast [AskBlast $FichierBlast NbSubject] if {$NbSubjectDansBlast == "" || $NbSubjectDansBlast < 1} {return} set TailleQuery [AskBlast $FichierBlast Taille ] if {$EnFonctionDe == "LesSegmentsDesBIdToKeep"} { foreach LeBId $SeuilOuValeurs { set BId [lindex $LeBId 0] set LesSegments [lrange $LeBId 1 end] lappend LesSegmentsAConserver [list $BId $LesSegments] } return $LesSegmentsAConserver } if {$EnFonctionDe == "LesmRNAsToKeep"} { set LesBId {} for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} {lappend LesBId [AskBlast $FichierBlast Subject $i]} foreach BId [LesmRNAsDesAcNucs $LesBId] { set LesSegments {} set NbSegment [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set j 1} {$j <= $NbSegment} {incr j} {lappend LesSegments $j} Espionne $BId lappend LesSegmentsAConserver [list $BId $LesSegments] } return $LesSegmentsAConserver } if {$EnFonctionDe == "LesmRNAsToEliminate"} { set LesBId {} for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} {lappend LesBId [AskBlast $FichierBlast Subject $i]} foreach BId [LesNonmRNAsDesAcNucs $LesBId] { set LesSegments {} set NbSegment [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set j 1} {$j <= $NbSegment} {incr j} {lappend LesSegments $j} Espionne $BId lappend LesSegmentsAConserver [list $BId $LesSegments] } return $LesSegmentsAConserver } set k 0 set l 0 for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { incr k if {$EnFonctionDe == "NbSubjectMax" && $SeuilOuValeurs < $k} {break} set BId [AskBlast $FichierBlast Subject $i] set LesSegments {} set NbSegment [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set j 1} {$j <= $NbSegment} {incr j} {lappend LesSegments $j} if {$EnFonctionDe == "LesBIdToEliminate"} { set LAiJeVu 0 set BIdCourt $BId regsub -nocase {^[^\:]+\:} $BId "" BIdCourt foreach BIdDeRef $SeuilOuValeurs { regsub {^[^\:]+\:} $BIdDeRef "" BIdDeRef if {[string equal -nocase $BIdDeRef $BIdCourt]} {set LAiJeVu 1;break} } if {!$LAiJeVu} {lappend LesSegmentsAConserver [list $BId $LesSegments]} continue } if {$EnFonctionDe == "LesBIdToKeep"} { set LAiJeVu 0 set BIdCourt $BId regsub -nocase {^[^\:]+\:} $BId "" BIdCourt foreach BIdDeRef $SeuilOuValeurs { regsub {^[^\:]+\:} $BIdDeRef "" BIdDeRef if {[string equal -nocase $BIdDeRef $BIdCourt]} {set LAiJeVu 1;break} } if {$LAiJeVu} {lappend LesSegmentsAConserver [list $BId $LesSegments]} continue } set Access [AskBlast $FichierBlast BanqueId $BId Access] if {$EnFonctionDe == "LesAccessToEliminate"} { set LAiJeVu 0 foreach AccDeRef $SeuilOuValeurs { if {[string equal -nocase $AccDeRef $Access]} {set LAiJeVu 1;break} } if {!$LAiJeVu} {lappend LesSegmentsAConserver [list $BId $LesSegments]} continue } if {$EnFonctionDe == "LesAccessToKeep"} { set LAiJeVu 0 foreach AccDeRef $SeuilOuValeurs { #Espionne $Access if {[string equal -nocase $AccDeRef $Access]} {set LAiJeVu 1;break} } if {$LAiJeVu} {lappend LesSegmentsAConserver [list $BId $LesSegments]} continue } if {$EnFonctionDe == "LesOrgaToEliminate"} { set EnAiJeVuUn 0 foreach Orga [LesOrgasDeLAccess $BId] { if {[regexp -nocase $Orga [join $SeuilOuValeurs "\t"]]} {set EnAiJeVuUn 1;break} } if {!$EnAiJeVuUn} {lappend LesSegmentsAConserver [list $BId $LesSegments]} continue } if {$EnFonctionDe == "LesOrgaToKeep"} { set EnAiJeVuUn 0 foreach Orga [LesOrgasDeLAccess $BId] { #Espionne "$BId\t$Orga\t[join $SeuilOuValeurs "\t"]" if {[regexp -nocase $Orga [join $SeuilOuValeurs "\t"]]} {set EnAiJeVuUn 1;break} } if {$EnAiJeVuUn} {lappend LesSegmentsAConserver [list $BId $LesSegments]} continue } if {0 && $EnFonctionDe == "LesmRNAsToKeep"} { set PageInfo [PageInfo $BId genbank] if {[EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} { #Espionne $BId lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {0 && $EnFonctionDe == "LesmRNAsToEliminate"} { set PageInfo [PageInfo $BId genbank] if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} { #Espionne $BId lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {$EnFonctionDe == "RegionsAligneesSurRegionsAlignables"} { set P [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables $FichierBlast $BId] if {$SeuilOuValeurs < $P} { #Espionne "$BId RegionsAligneesSurRegionsAlignables $SeuilOuValeurs $P" lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {$EnFonctionDe == "RegionsAligneesSurRegionsDansAlignement"} { set P [PourcentageDIdentiteGlobal $FichierBlast $BId "Query"] if {$SeuilOuValeurs < $P} { #Espionne "$BId RegionsAligneesSurRegionsDansAlignement $SeuilOuValeurs $P" lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {$EnFonctionDe == "RegionsAligneesSurRegionsDansAlignement_Subject"} { set P [PourcentageDIdentiteGlobal $FichierBlast $BId "Subject"] if {$SeuilOuValeurs < $P} { #Espionne "$BId RegionsAligneesSurRegionsDansAlignement_Subject $SeuilOuValeurs $P" lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {$EnFonctionDe == "RegionsAligneesSurTailleQuery"} { set P [PourcentageDeRecouvrement $FichierBlast $BId "Query"] if {$SeuilOuValeurs < $P} { #Espionne "$BId RegionsAligneesSurTailleQuery $SeuilOuValeurs $P" lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {$EnFonctionDe == "RegionsAligneesSurTailleSubject"} { set P [PourcentageDeRecouvrement $FichierBlast $BId "Subject"] if {$SeuilOuValeurs < $P} { #Espionne "$BId RegionsAligneesSurTailleSubject $SeuilOuValeurs $P" lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {$EnFonctionDe == "RegionsAligneesSurTailleQueryDansLeMeilleurDesSens"} { set nSPlus [NombreDeBasesEnCommun $FichierBlast $BId "Query" "+"] set nSMoins [NombreDeBasesEnCommun $FichierBlast $BId "Query" "-"] if {$nSPlus < $nSMoins} { set P [expr $nSMoins * 1.0 / $TailleQuery] set SensSelect "-" } else { set SensSelect "+" set P [expr $nSPlus * 1.0 / $TailleQuery] } if {$SeuilOuValeurs < $P} { #Espionne "$BId RegionsAligneesSurTailleQuery $SeuilOuValeurs $P" set LesSegments {} for {set j 1} {$j <= $NbSegment} {incr j} { set Orient [AskBlast $FichierBlast BanqueId $BId Segment $j Orientation] if {[SensDeLaRegion $Orient] == $SensSelect} {lappend LesSegments $j} } lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } if {$EnFonctionDe == "RegionsAligneesSurTailleSubjectDansLeMeilleurDesSens"} { set nSPlus [NombreDeBasesEnCommun $FichierBlast $BId "Subject" "+"] set nSMoins [NombreDeBasesEnCommun $FichierBlast $BId "Subject" "-"] if {$nSPlus < $nSMoins} { set P [expr $nSMoins * 1.0 / [AskBlast $FichierBlast BanqueId $BId Taille]] set SensSelect "-" } else { set SensSelect "+" set P [expr $nSPlus * 1.0 / [AskBlast $FichierBlast BanqueId $BId Taille]] } if {$SeuilOuValeurs < $P} { #Espionne "$BId RegionsAligneesSurTailleSubjectDansLeMeilleurDesSens $SeuilOuValeurs $P" set LesSegments {} for {set j 1} {$j <= $NbSegment} {incr j} { set Orient [AskBlast $FichierBlast BanqueId $BId Segment $j Orientation] if {[SensDeLaRegion $Orient] == $SensSelect} {lappend LesSegments $j} } lappend LesSegmentsAConserver [list $BId $LesSegments] } continue } set LesSegments {} for {set j 1} {$j <= $NbSegment} {incr j} { if {$EnFonctionDe == "JusteLePremierAlignementDesSubjects"} { if {$j == 1} { #Espionne "$BId JusteLePremierAlignementDesSubjects segment $j" lappend LesSegments $j break } continue } incr l if {$EnFonctionDe == "NbAliMax" && $SeuilOuValeurs < $l} {break} if {$EnFonctionDe == "Expect"} { if {[AskBlast $FichierBlast BanqueId $BId Segment $j Expect] <= $SeuilOuValeurs} {lappend LesSegments $j} continue } if {$EnFonctionDe == "Score"} { if {[AskBlast $FichierBlast BanqueId $BId Segment $j Score] <= $SeuilOuValeurs} {lappend LesSegments $j} continue } if {$EnFonctionDe == "SensToKeep"} { if {[AskBlast $FichierBlast BanqueId $BId Segment $j Orientation] == $SeuilOuValeurs} {lappend LesSegments $j} continue } if {$EnFonctionDe == "SensToEliminate"} { if {[AskBlast $FichierBlast BanqueId $BId Segment $j Orientation] != $SeuilOuValeurs} {lappend LesSegments $j} continue } if {$EnFonctionDe == "Identity"} { set Identities [AskBlast $FichierBlast BanqueId $BId Segment $j Identities] scan $Identities "%d/%d" n nTot set Id [expr $n*1.0/$nTot] #Espionne "$BId\t$Id\t$SeuilOuValeurs" if {$SeuilOuValeurs <= $Id} {lappend LesSegments $j} continue } if {$EnFonctionDe == "IdentityWithoutFilter"} { set NbBasesFiltrees [NombreDeBasesFiltrees $FichierBlast $BId Segment $j] set Identities [AskBlast $FichierBlast BanqueId $BId Segment $j Identities] scan $Identities "%d/%d" n nTot set Id [expr $n*1.0/($nTot- $NbBasesFiltrees)] #Espionne "$BId\t$Id\t$SeuilOuValeurs" if {$SeuilOuValeurs <= $Id} {lappend LesSegments $j} continue } if {$EnFonctionDe == "Positives"} { set Positives [AskBlast $FichierBlast BanqueId $BId Segment $j Positives] scan $Positives "%d/%d" n nTot set Pos [expr $n*1.0/$nTot] #Espionne "$BId\t$Pos\t$SeuilOuValeurs" if {$SeuilOuValeurs <= $Pos} {lappend LesSegments $j} continue } if {$EnFonctionDe == "PositivesWithoutFilter"} { set NbBasesFiltrees [NombreDeBasesFiltrees $FichierBlast $BId Segment $j] set Positives [AskBlast $FichierBlast BanqueId $BId Segment $j Positives] scan $Positives "%d/%d" n nTot set Pos [expr $n*1.0/($nTot- $NbBasesFiltrees)] #Espionne "$BId\t$Pos\t$SeuilOuValeurs" if {$SeuilOuValeurs <= $Pos} {lappend LesSegments $j} continue } if {$EnFonctionDe == "NbPositivesSurTailleQueryWithoutFilter"} { set Positives [AskBlast $FichierBlast BanqueId $BId Segment $j Positives] set NbBasesFiltrees [NombreDeBasesFiltrees $FichierBlast $BId Segment $j] scan $Positives "%d" n set Pos [expr $n * 1.0 / ($TailleQuery - $NbBasesFiltrees)] #Espionne "$BId\t$Pos\t$SeuilOuValeurs" if {$SeuilOuValeurs <= $Pos} {lappend LesSegments $j} continue } if {$EnFonctionDe == "NbPositivesSurTailleQuery"} { set Positives [AskBlast $FichierBlast BanqueId $BId Segment $j Positives] scan $Positives "%d" n set Pos [expr $n * 1.0 / $TailleQuery] #Espionne "$BId\t$Pos\t$SeuilOuValeurs" if {$SeuilOuValeurs <= $Pos} {lappend LesSegments $j} continue } set DQ [Mini [AskBlast $FichierBlast BanqueId $BId Segment $j DQ] [AskBlast $FichierBlast BanqueId $BId Segment $j FQ]] set FQ [Maxi [AskBlast $FichierBlast BanqueId $BId Segment $j DQ] [AskBlast $FichierBlast BanqueId $BId Segment $j FQ]] if {$EnFonctionDe == "TailleAlignementMin"} { set TailleAli [expr $FQ-$DQ+1] if {$SeuilOuValeurs <= $TailleAli } { #Espionne "$BId segment $j TailleAli $TailleAli $SeuilOuValeurs" lappend LesSegments $j } continue } if {$EnFonctionDe == "TailleAlignementMax"} { set TailleAli [expr $FQ-$DQ+1] if {$TailleAli <= $SeuilOuValeurs} {lappend LesSegments $j} continue } if {$EnFonctionDe == "LesRegionsToKeep"} { set EnAiJeUne 0 foreach LaRegion $SeuilOuValeurs { set Debut [Mini [lindex $LaRegion 0] [lindex $LaRegion 1]] set Fin [Maxi [lindex $LaRegion 0] [lindex $LaRegion 1]] #Espionne "$DQ $FQ $Debut $Fin" if {[CesRegionsSontEllesOverlappantes $DQ $FQ $Debut $Fin]} { set EnAiJeUne 1 break } } if {$EnAiJeUne} {lappend LesSegments $j} continue } if {$EnFonctionDe == "LesRegionsToEliminate"} { set EnAiJeUne 0 foreach LaRegion $SeuilOuValeurs { set Debut [Mini [lindex $LaRegion 0] [lindex $LaRegion 1]] set Fin [Maxi [lindex $LaRegion 0] [lindex $LaRegion 1]] #Espionne "$DQ $FQ $Debut $Fin" if {[CesRegionsSontEllesOverlappantes $DQ $FQ $Debut $Fin]} { set EnAiJeUne 1 break } } if {!$EnAiJeUne} {lappend LesSegments $j} continue } lappend LesSegments $j } if {$LesSegments != {}} {lappend LesSegmentsAConserver [list $BId $LesSegments]} } return $LesSegmentsAConserver } proc LaSequenceColoree {Texte {Maniere ""} {Ftable ""} {AvecZones ""}} { set LesLettres {} set LesClasses {} if {$AvecZones==""} { set AvecZones 0 } if {$Maniere==""} { set Maniere "Seqlab" } if {$Maniere=="Normal"} { return $Texte } if {$Maniere=="Seqlab"} { foreach AA [split $Texte ""] { lappend LesLettres $AA if {$AA==" "} { set AA "Space" } if {$AA=="."} { set AA "Dot" } if {$AA=="-"} { set AA "Hyphen" } if {$AA=="~"} { set AA "Tilde" } lappend LesClasses $AA } } if {$Maniere=="Ftype"} { set ItemVide "-1 -1 -1 -1 -1 -1" PositionAutreDe Absolue 1 $Texte set Fin 0 foreach Item $Ftable { incr Fin ScanLaListe $Item Ftype Fstart Fstop Fcolor Fscore Fnote set AbsPos [regexp "^AbsolutePosition " $Fnote] if {$AbsPos} { set AvantProchain [expr $Fstart-1] set Alpha $Fstart set Omega $Fstop } else { set AvantProchain [expr [PositionAutreDe Relative $Fstart]-1] set Alpha [PositionAutreDe Relative $Fstart] set Omega [PositionAutreDe Relative $Fstop] } foreach I [NombresEntre $Fin $AvantProchain] { set ItemEnPosition($I) $ItemVide } foreach I [NombresEntre $Alpha $Omega] { set ItemEnPosition($I) $Item } set Fin $Omega } incr Fin set Max [string length $Texte] if {$Fin<=$Max} { foreach I [NombresEntre $Fin $Max] { set ItemEnPosition($I) $ItemVide } } set IGap 0 set Mot "" if {[info exists OldClasse]} { unset OldClasse } if {[info exists OldColScoNot]} { unset OldColScoNot } regsub -all -nocase {[^A-Z]} $Texte "" VraieSeq foreach AA [split $Texte ""] { incr IGap set Item $ItemEnPosition($IGap) ScanLaListe $Item Ftype Fstart Fstop Fcolor Fscore Fnote set ColScoNot "$Fcolor $Fscore $Fnote" set SS "$Fstart-$Fstop" if {$Fstart==$Fstop} { set SS $Fstart } if {[regexp "^AbsolutePosition" $Fnote]} { append SS " (absolute position)" } if {$Fscore!=""} { append SS " $Fscore" } regsub "^AbsolutePosition " $Fnote "" BelleFnote set TexteBulle "$Ftype $SS $BelleFnote" if {$Fcolor=="-1"} { set Classe "C999" } else { set Classe "C$Fcolor" } if {[info exists OldColScoNot] && $ColScoNot!=$OldColScoNot} { if {$OldItem==$ItemVide} { set Bulle "No feature" } else { set Bulle $OldTexteBulle } if {$AvecZones} { set L [string length $Mot] set Mot "" lappend LesLettres $Mot } else { lappend LesLettres [H_Href $Mot "" "title='$Bulle' alt='$Bulle' name='$Bulle'"] } lappend LesClasses $OldClasse set Mot $AA set OldColScoNot $ColScoNot set OldClasse $Classe set OldItem $Item set OldTexteBulle $TexteBulle set OldFnote $Fnote continue } set OldColScoNot $ColScoNot set OldClasse $Classe set OldItem $Item set OldTexteBulle $TexteBulle set OldFnote $Fnote append Mot $AA } if {$Mot!=""} { if {$Item==$ItemVide} { set Bulle "No feature" } else { set Bulle $OldTexteBulle } if {$AvecZones} { set L [string length $Mot] set Mot "" lappend LesLettres [H_Href $Mot "" "title='$Bulle' alt='$Bulle' name='$Bulle'"] } else { lappend LesLettres [H_Href $Mot "" "title='$Bulle' alt='$Bulle' name='$Bulle'"] } lappend LesClasses $Classe } } return [H_ColoredLetters $LesLettres $LesClasses] } proc LaSequenceConvertieSiOnVeut {LaSequence OnVeutEMBL Access} { if { ! $OnVeutEMBL } { return $LaSequence } set Format [FormatDeLaSequence_l $LaSequence] if {$Format == "embl"} { return $LaSequence } else { return [split [SequenceFormatEMBL_l $LaSequence $Access $Format] "\n"] } } proc LaSequenceDesBanques {BanqueId {Access ""} {aAccessOK ""} {OnVeutEMBL ""} {NouveauPABCourant ""}} { LogWscope "dans LaSequenceDesBanques $BanqueId" if {$OnVeutEMBL=="" && [regexp "^OnVeut" $Access]} { set OnVeutEMBL $Access set Access "" } if {$aAccessOK!=""} { upvar $aAccessOK AccessOK } global RepertoireDuGenome global LesLignesEMBLEnMemoire global AccessOKEnMemoire global ConfigChargee global QuidSeqEstDisponible global PABCourant global EviteSPTNEW set BanqueIdOriginal $BanqueId if {[regexp "\|" $BanqueId]} { regsub -nocase {^(sp|sw|lcl)\|} $BanqueId "" BanqueId } if {[regexp "\|" $BanqueId]} { lassign [split $BanqueId "|"] B A set BanqueId $B if {$Access=="" || $Access==$BanqueIdOriginal} { set Access $A } } if {[regexp "Sc306" [RepertoireDuGenome]]} { if {[regexp {^(Sc|Eh|At|Hs)[0-9]+$} $BanqueId Match]} { set RepProt "[GscopeDatabaseDir YEAH]/prottfa" set FichierTFA "$RepProt/$Match" if {[file exists $FichierTFA]} { set AccessOK $Match return [LesLignesDuFichier $FichierTFA] } } if {[regexp {^(PF)[^ ]*} $BanqueId Match]} { set RepProt "[GscopeDatabaseDir Pfalciparum]/prottfa" set FichierTFA "$RepProt/$Match" if {[file exists $FichierTFA]} { set AccessOK $Match return [LesLignesDuFichier $FichierTFA] } } if {[regexp {^(TB)[^ ]*} $BanqueId Match]} { set RepProt "[GscopeDatabaseDir Tbrucei]/prottfa" set FichierTFA "$RepProt/$Match" if {[file exists $FichierTFA]} { set AccessOK $Match return [LesLignesDuFichier $FichierTFA] } } } if {[regexp "YEAH|Tparva" [RepertoireDuGenome]]} { if {[regexp {^(Sc|Eh|At|Hs)[0-9]+$} $BanqueId Match]} { set RepProt "[GscopeDatabaseDir YEAH]/prottfa" set FichierTFA "$RepProt/$Match" if {[file exists $FichierTFA]} { set AccessOK $Match return [LesLignesDuFichier $FichierTFA] } } if {[regexp {^(PF)[^ ]*} $BanqueId Match]} { set RepProt "[GscopeDatabaseDir Pfalciparum]/prottfa" set FichierTFA "$RepProt/$Match" if {[file exists $FichierTFA]} { set AccessOK $Match return [LesLignesDuFichier $FichierTFA] } } if {[regexp {^(TB)[^ ]*} $BanqueId Match]} { set RepProt "[GscopeDatabaseDir Tbrucei]/prottfa" set FichierTFA "$RepProt/$Match" if {[file exists $FichierTFA]} { set AccessOK $Match return [LesLignesDuFichier $FichierTFA] } } } if {[regexp {^ref\|([^\|]+)} $BanqueId Match X]} { regsub {\.[0-9]*} $X "" X set BanqueId "refseq:$X" set Access "" } if {$BanqueId==""} { set BanqueId $Access} if {$Access==""} { set Access $BanqueId } if {$BanqueId=="" && $Access==""} { set AccessOK "" ; return {} } if {[regexp "^OnVeut" $Access]} { set OnVeutEMBL $Access set Access $BanqueId } set OnVeutGenBank [string equal -nocase $OnVeutEMBL "OnVeutGenBank"] set Force 1 set Previens 0 set OnExigeNature 0 if {[string equal -nocase $OnVeutEMBL "OnVeutNature"]} { set OnExigeNature 1 set OnVeutEMBL "" } if {[regexp -nocase "^EST" $BanqueId] && [string equal -nocase $OnVeutEMBL "OnVeutEMBL"]} { set OnVeutEMBL "OnVeutNucEMBL" } set OnExigeNuc 0 if {[string equal -nocase $OnVeutEMBL "OnVeutNucEMBL"]} { set OnVeutEMBL "OnVeutEMBL" set OnExigeNuc 1 } if {[string equal -nocase $OnVeutEMBL "OnVeutEMBL"]} { set OnVeutEMBL 1 } else { set OnVeutEMBL 0 } while {[regexp {^SCB\:} $BanqueId]} { set FichierTFAsSCB "/genomics/link/Riboalvi/banques/SCB" if {[FileAbsent $FichierTFAsSCB]} { break } set TFA [LaSequenceDuTFAs $FichierTFAsSCB $BanqueId] set AccessOK $BanqueId if { ! $OnVeutEMBL} { return [split $TFA "\n"] } set EMBL [SequenceFormatEMBL $TFA "" "tfa"] return [split $EMBL "\n"] } while {[regexp {^BSDProtAll\:} $BanqueId]} { set FichierTFAsBSD "/genomics/link/BSD/prottfa/$Access" if {[FileAbsent $FichierTFAsBSD]} { break } set TFA [LaSequenceDuTFAs $FichierTFAsBSD $Access] set AccessOK $BanqueId if { ! $OnVeutEMBL} { return [split $TFA "\n"] } set EMBL [SequenceFormatEMBL $TFA "" "tfa"] return [split $EMBL "\n"] } while {[regexp {^(ALVE|ALBO|ALGI)[0-9]+$} $BanqueId]} { set FichierTFAsAlvinella "/genomics/link/Riboalvi/banques/protAlvinella.tfa" if {[FileAbsent $FichierTFAsAlvinella]} { break } set TFA [LaSequenceDuTFAs $FichierTFAsAlvinella $BanqueId] set AccessOK $BanqueId if { ! $OnVeutEMBL} { return [split $TFA "\n"] } set LesOSOCOX {} lappend LesOSOCOX "OS Alvinella pompejana." lappend LesOSOCOX "OC Eukaryota; Metazoa; Annelida; Polychaeta; Palpata; Canalipalpata;" lappend LesOSOCOX "OC Terebellida; Alvinellidae; Alvinella." lappend LesOSOCOX "OX NCBI_TaxID=6376;" set OSOCOX [join $LesOSOCOX "\n"] set EMBL [SequenceFormatEMBL $TFA "" "tfa"] regsub "\nDE " $EMBL "\n$OSOCOX\nDE Hypothetical protein " EMBL return [split $EMBL "\n"] } #rR On devrait traiter tout REFSEQ avec ceci (y a pas NZ voir lbgiki) if {0 && [EstUnRefseq $Access]} { regsub -nocase {^REFSEQ.?\:} $Access "" Acc set R [BirdWeb "REFSEQ" $Acc] if {$R!=""} { set AccessOk $Acc if {$OnVeutGenBank} { return [split $R "\n"] } return [split [GenBankToEMBL $R] "\n"] } } #rR sinon on fait comme dans le temps if {0 && [regexp -nocase {^REFSEQ.*\:} $BanqueId]} { regsub -nocase {^REFSEQ.*\:} $BanqueId "" A set R [BirdWeb REFSEQ $A] if {$R!=""} { set AccessOk $Acc if {$OnVeutGenBank} { return [split $R "\n"] } return [split [GenBankToEMBL $R] "\n"] } } if {0 && [regexp -nocase {^(REFSEQ\:)?(NP|XP)_[0-9]+$} $Access]} { regsub -nocase {^REFSEQ\:} $Access "" Acc set R [BirdWeb "REFSEQP" $Acc] if {$R!=""} { set AccessOk $Acc if {$OnVeutGenBank} { return [split $R "\n"] } return [split [GenBankToEMBL $R] "\n"] } set R [Getz $Acc "refseqP" -view FastaSeqs] if {$R!=""} { set AccessOk $Acc if {$OnVeutGenBank} { return [split $R "\n"] } set iSecondChevron [string first ">" $R 2] if {$iSecondChevron>-1} { set R [string range $R 0 [incr iSecondChevron -1]] } set R [SequenceFormatEMBL $R "" "tfa" "No" "No"] return [split $R "\n"] } } if {0 && [regexp -nocase {^(REFSEQ\:)?(NM|XM)_[0-9]+$} $Access]} { regsub -nocase {^REFSEQ\:} $Access "" Acc set R [BirdWeb "REFSEQ" $Acc] if {$R!=""} { set AccessOk $Acc if {$OnVeutGenBank} { return [split $R "\n"]} return [split [GenBankToEMBL $R] "\n"] } set R [Getz $Acc "refseq" -view FastaSeqs] if {$R!=""} { set AccessOk $Acc if {$OnVeutGenBank} { return [split $R "\n"] } set iSecondChevron [string first ">" $R 2] if {$iSecondChevron>-1} { set R [string range $R 0 [incr iSecondChevron -1]] } set R [SequenceFormatEMBL $R "" "tfa" "No" "No"] return [split $R "\n"] } } if {[regexp -nocase {^HS[0-9unxy]+\:} $BanqueId BanqueHS]} { regsub {\:} $BanqueHS "" BanqueHS set BanqueHS [string tolower $BanqueHS] if {[catch {set TfaDeLaBanqueBlast [exec fastacmd -d $BanqueHS -s $BanqueId 2> /dev/null]} Message]} { return "" } if {$OnVeutEMBL} { return [split [SequenceFormatEMBL $TfaDeLaBanqueBlast "" "tfa"] "\n"] } return [split $TfaDeLaBanqueBlast "\n"] } if {[regexp -nocase {^UniRef[0-9]+} $BanqueId Match]} { if {[regexp -nocase {^UniRef[0-9]+_([A-Z][A-Z0-9]+)} $BanqueId M Acc]} { set AOk $BanqueId set R [LaSequenceDesBanques "protein:$Acc" $Acc AOkBidon $OnVeutEMBL $NouveauPABCourant] if {$R!=""} { set AccessOK $AOk return $R } } set Banque [string tolower $Match] if {[catch {set TfaDeLaBanqueBlast [exec fastacmd -d $Banque -s $BanqueId 2> /dev/null]} Message]} { set AccessOK "" return "" } if {[regexp {^>lcl\|} $TfaDeLaBanqueBlast]} { regsub {^>lcl\|} $TfaDeLaBanqueBlast ">" TfaDeLaBanqueBlast } set AccessOK $BanqueId if { ! $OnVeutEMBL} { return [split $TfaDeLaBanqueBlast "\n"]} set SeqDesBanques [SequenceFormatEMBL $TfaDeLaBanqueBlast $Access "tfa"] return [split $SeqDesBanques "\n"] } if {[regexp -nocase {Msmegmatis\:|MsAllProt\:} $BanqueId]} { set NomMs [StringApres ":" dans $BanqueId] set FicMs "[GscopeDatabaseDir Ms]/protembl/$NomMs" if {[file exists $FicMs]} { set AccessOK $BanqueId return [LesLignesDuFichier $FicMs] } set FicMs "[GscopeDatabaseDir Ms]/prottfa/$NomMs" if {[file exists $FicMs]} { set AccessOK $BanqueId set NomLu [StringApres ":" dans $$BanqueId] return [SequenceFormatEMBL [ContenuDuFichier $FicMs] $NomLu "tfa"] } } if {[regexp -nocase "VARSPLIC\:" $BanqueId]} { regsub -nocase "VARSPLIC" $BanqueId "PROT" ProtId regsub -nocase "VARSPLIC\:" $BanqueId "" AccessOK if {[regexp {_[0-9]+$} $ProtId]} { regsub {_[0-9]+$} $ProtId "" ProtId } if {[regexp {\-[0-9]+$} $ProtId]} { regsub {\-[0-9]+$} $ProtId "" ProtId } set LesLignesEMBL [LaSequenceDesBanques $ProtId] if {$LesLignesEMBL==""} { set AccessOK "" ; return "" } set SeqTFA [TfaDeLaBanqueBlast "/catalog/blast/varsplic" $BanqueId] if {$SeqTFA==""} { if {[regexp {_[0-9]+$} $BanqueId]} { regsub "_" $BanqueId "-" BanqueId } set SeqTFA [TfaDeLaBanqueBlast "/catalog/blast/varsplic" $BanqueId] if {$SeqTFA==""} { set AccessOK "" ; return "" } } set Seq [QueLaSequenceDuTexteTFA $SeqTFA] regsub "VARSPLIC\:" $BanqueId "" Id set LeNouveau {} foreach Ligne $LesLignesEMBL { if {[regexp "^ID " $Ligne]} { set Ligne "ID $Id VARSPLIC created by Gscope-varsplic.tcl from $ProtId" append Ligne "\nAC $Id;" } if {[regexp "SQ " $Ligne ]} { break } lappend LeNouveau $Ligne } lappend LeNouveau [QueSequenceFormatEMBL $Seq AvecSQ] set AccessOK $BanqueId return $LeNouveau } regsub -nocase "^RSHUM\:" $BanqueId "RSHUMAN:" BanqueId if {[regexp "RSHUMAN\:" $BanqueId]} { set Access "" } if { ! [info exists EviteSPTNEW]} { set EviteSPTNEW 1 } if {[EstUnAccessPDB $BanqueId] || $Access=="mol:protein"} { set Access $BanqueId } if { ! [regexp {\:} $BanqueId] && [regexp -nocase {(SPT|SW)[_\|]} $BanqueId]} { regsub {[_\|]} $BanqueId ":" NewBanqueId if {$BanqueId==$Access} { set Access $NewBanqueId } set BanqueId $NewBanqueId } if {$BanqueId==$Access && [regexp ":" $Access] && ! [regexp -nocase "RSHUMAN\:" $Access]} { regsub -nocase {[a-z0-9_]+\:} $Access "" Access } if {$NouveauPABCourant!=""} { set PABCourant $NouveauPABCourant } Wup "Fetch the sequence. In EMBL format if OnVeutEMBL." Wup "BanqueId or Access ? First I try Access then BanqueId" Wup "Maybe I stored before in memory ..." if {[info exists LesLignesEMBLEnMemoire($BanqueId,$Access)]} { set LesLignesEMBL [set LesLignesEMBLEnMemoire($BanqueId,$Access)] set AccessOK [set AccessOKEnMemoire($BanqueId,$Access)] return $LesLignesEMBL } if {[regexp {^ci[0-9]{10}$} $Access]} { return [LesLignesDuFichier "/genomics/link/Ciona/protembl/[CioNarcisse $Access]"] } if {[regexp {^(ensembl|gp|pironly|remtrembl|worm)\:[a-zA-Z_0-9]+$} $BanqueId]} { set TFA [LaSequenceDuTFAs "/genomics/link/petitPDBscope/banques/nrdb_specific.tfa" $BanqueId] if {$TFA==""} { return {} } if {$OnVeutEMBL} { return [split [SequenceFormatEMBL $TFA "" "tfa"] "\n"] } return $TFA } set LaSequence {} Wup "It's a file" if {[regexp "/" $BanqueId]} { if {[file exists $BanqueId]} { if {[file isdirectory $BanqueId]} { set AccessOK "" return [lsort [glob -nocomplain "$BanqueId/*"]] } set LaSequence [LesLignesDuFichier $BanqueId] # Warne "fichier $BanqueId" set AccessOK [file tail $BanqueId] set NomDuFichier [file tail $BanqueId] set GCG [join $LaSequence "\n"] if {[regexp "^LOCUS" $GCG]} { if { ! [regexp {[^\n]* [0-9]+ aa } $GCG]} { set AccessOK $Access if {$OnExigeNature} { return [split $GCG "\n"] } set FichierGB "[RepertoireDeTravail]/$NomDuFichier.gbtags" Sauve $GCG dans $FichierGB set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGBTags OS OC SeqADN $FichierGB] "nuc"] "\n"] File delete -force $FichierGB return $LesLignesEMBL } else { set AccessOK $Access if {$OnExigeNature} { return [split $GCG "\n"] } set FichierGB "[RepertoireDeTravail]/$NomDuFichier.gbk" Sauve $GCG dans $FichierGB set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGenBank OS OC SeqProt $FichierGB] "prot"] "\n"] File delete -force $FichierGB return $LesLignesEMBL } } return [LaSequenceConvertieSiOnVeut $LaSequence $OnVeutEMBL $NomDuFichier] } if { $Previens } { FaireLire "$BanqueId not found in databases." } return {} } if {[OnTraiteUneCollection] && [info exists PABCourant]} { set Copain "$RepertoireDuGenome/coembl/$PABCourant/$Access" if {[file exists $Copain]} { set AccessOK $Access set LesLignesEMBL [LesLignesDuFichier $Copain] return $LesLignesEMBL } if {[file exists "$RepertoireDuGenome/genscanpredictions/$PABCourant"]} { set Texte [ContenuDuFichier "$RepertoireDuGenome/genscanpredictions/$PABCourant"] if {[regexp "^>$Access " $Texte]} { return [split [SequenceFormatEMBL $Texte "" "tfa"] "\n"] } } } foreach SousRep {"Spine/Sequences"} { if {[file exists "$RepertoireDuGenome/$SousRep/$Access"]} { set AccessOK $Access set Texte [ContenuDuFichier "$RepertoireDuGenome/$SousRep/$Access"] set LesLignesEMBL [split [SequenceFormatEMBL $Texte] "\n"] return $LesLignesEMBL } } if {[EstUnPAB $BanqueId]} { if {[file exists "$RepertoireDuGenome/protembl/$BanqueId"]} { set AccessOK $BanqueId set LesLignesEMBL [LesLignesDuFichier "$RepertoireDuGenome/protembl/$BanqueId"] return $LesLignesEMBL } if {[file exists "$RepertoireDuGenome/nucembl/$BanqueId"]} { set AccessOK $BanqueId set LesLignesEMBL [LesLignesDuFichier "$RepertoireDuGenome/nucembl/$BanqueId"] return $LesLignesEMBL } } if {[EstUnPAB $Access]} { if {[file exists "$RepertoireDuGenome/protembl/$Access"]} { set AccessOK $Access set LesLignesEMBL [LesLignesDuFichier "$RepertoireDuGenome/protembl/$Access"] return $LesLignesEMBL } if {[file exists "$RepertoireDuGenome/nucembl/$Access"]} { set AccessOK $Access set LesLignesEMBL [LesLignesDuFichier "$RepertoireDuGenome/nucembl/$Access"] return $LesLignesEMBL } } if {[EstUnPAB $BanqueId]} { if {[file exists "$RepertoireDuGenome/prottfa/$BanqueId"]} { set AccessOK $BanqueId set LesLignesEMBL [split [SequenceFormatEMBLDuFichierTFA "$RepertoireDuGenome/prottfa/$BanqueId"] "\n"] return $LesLignesEMBL } if {[file exists "$RepertoireDuGenome/nuctfa/$BanqueId"]} { set AccessOK $BanqueId set LesLignesEMBL [split [SequenceFormatEMBLDuFichierTFA "$RepertoireDuGenome/nuctfa/$BanqueId"] "\n"] return $LesLignesEMBL } } if {[EstUnPAB $Access]} { if {[file exists "$RepertoireDuGenome/prottfa/$Access"]} { set AccessOK $Access set LesLignesEMBL [split [SequenceFormatEMBLDuFichierTFA "$RepertoireDuGenome/prottfa/$Access"] "\n"] return $LesLignesEMBL } if {[file exists "$RepertoireDuGenome/nuctfa/$Access"]} { set AccessOK $Access set LesLignesEMBL [split [SequenceFormatEMBLDuFichierTFA "$RepertoireDuGenome/nuctfa/$Access"] "\n"] return $LesLignesEMBL } } Wup "I search in seqpath" if {[file exists "$RepertoireDuGenome/seqpath"]} { foreach Ext {".pep" ".embl" ".tfa" ""} { set Liste [glob -nocomplain "$RepertoireDuGenome/seqpath/*/$Access$Ext"] foreach Fichier $Liste { set LaSequence [LesLignesDuFichier $Fichier] if {[llength $LaSequence] == 0} { continue } set AccessOK $Access return [LaSequenceConvertieSiOnVeut $LaSequence $OnVeutEMBL $Access] } } } if {[regexp "^EVImmProt\:" $BanqueId]} { set NomDuEVI [lindex [split $BanqueId ":"] 1] set FichierEVI "[GscopeDatabaseDir EVImm]/protembl/$NomDuEVI" if { ! [file exists $FichierEVI]} { if {$Force} { return {} } FaireLire "$FichierEVI not found." return {} } set LesLignesEMBL [LesLignesDuFichier $FichierEVI] set AccessOK $NomDuEVI return $LesLignesEMBL } if {[regexp "^AffyHS\:" $BanqueId]} { set NomDuAffy [lindex [split $BanqueId ":"] 1] set FichierAffy "/genomics/link/AffyHS/nucembl/$NomDuAffy" if { ! [file exists $FichierAffy]} { if {$Force} { return {} } FaireLire "$FichierAffy not found." return {} } set LesLignesEMBL [LesLignesDuFichier $FichierAffy] set AccessOK $NomDuAffy return $LesLignesEMBL } if {0 && [regexp "^PABY\:" $BanqueId]} { set NomDuPABY [lindex [split $BanqueId ":"] 1] set FichierPABY "[GscopeDatabaseDir Pabyssi]/protembl/$NomDuPABY" if { ! [file exists $FichierPABY]} { if {$Force} { return {} } FaireLire "$FichierPABY not found." return {} } set LesLignesEMBL [LesLignesDuFichier $FichierPABY] set AccessOK $NomDuPABY return $LesLignesEMBL } if {[regexp -nocase "^ClonV:" $BanqueId]} { set NomDuVec [lindex [split $BanqueId ":"] 1] set FichierVec "$RepertoireDuGenome/vecteurs/$NomDuVec" if { ! [file exists $FichierVec]} { if {$Force} { return {} } FaireLire "$FichierVec not found" return {} } set LesLignesEMBL [LesLignesDuFichier $FichierVec] set AccessOK $NomDuVec return $LesLignesEMBL } if {0 && [regexp -nocase "^PFUR:" $BanqueId]} { set NomDuPFUR [lindex [split $BanqueId ":"] 1] set FichierPFUR "[GscopeDatabaseDir Pfuriosus]/protembl/$NomDuPFUR" if { ! [file exists $FichierPFUR]} { if {$Force} { return {} } FaireLire "$FichierPFUR not found" return {} } set LesLignesEMBL [LesLignesDuFichier $FichierPFUR] set AccessOK $NomDuPFUR return $LesLignesEMBL } if {[regexp -nocase {^AFF[0-9]{5}$} $Access]} { set NomDuAffymetrix $Access set FichierAffymetrix "[GscopeDatabaseDir AffyHS]/nucembl/$NomDuAffymetrix" if { ! [file exists $FichierAffymetrix]} { if {$Force} { return {} } FaireLire "$FichierAffymetrix not found" return {} } set LesLignesEMBL [LesLignesDuFichier $FichierAffymetrix] set AccessOK $NomDuAffymetrix return $LesLignesEMBL } if {[EstUnAccessPDB $BanqueId]} { set AccessOK $BanqueId if {$OnExigeNature} { set LeNature [split [TextePDB $BanqueId] "\n"] ; #rR attention il faudrait mettre All pour avoir aussi les COORD return $LeNature } set LesLignesEMBL [split [EMBLduPDB $BanqueId] "\n"] return $LesLignesEMBL } if {[QuidSeqEstDisponible]} { set EMBL [QuestionDeScience QuidSeq "QuidRefSeqOfAC $Access"] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $Access # Warne "QuidSeq $Access" return $LesLignesEMBL } } if {[OutsideCSTB]} { set LaReponse [WgetzSurWeb $BanqueId] if {$LaReponse!={} && ! [regexp -nocase "^ERREUR" $LaReponse]} { return $LaReponse } if {[SembleEtreUnAccessVarsplic $BanqueId]} { return [LaSequenceDesBanques "VARSPLIC:$BanqueId"] } return {} } LogWscope "Avant GeneQuid UniprotData $Access" #rR GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid set EMBL [GeneQuid UniprotData $Access] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $Access # Warne "GeneQuid UniprotData $Access" return $LesLignesEMBL } set EMBL [GeneQuid UniprotData $BanqueId] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $BanqueId # Warne "GeneQuid UniprotData $BanqueId" return $LesLignesEMBL } #rR GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid GeneQuid #rR rajouté le 2014/07/09 if {[UseBirdForUniprot]} { #Espionne "I use UseBirdForUniprot to search $Access" if {[regexp {\|} $Access]} { foreach Mot [split $Access "|"] { set EMBL [BirdWeb "uniprot" $Mot] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $Access Espionne "Bird uniprot $Access" return $LesLignesEMBL } } } set EMBL [BirdWeb "uniprot" $Access] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $Access Espionne "I got the info using BirdWeb uniprot $Access" return $LesLignesEMBL } } else { #rR on prendra FromOrthoInspector ou FromYannis voir ci-dessous } set EMBL [Getz $Access] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $Access Warne "getz $Access" return $LesLignesEMBL } set EMBL [Getz $BanqueId] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $Access # Warne "getz $Access" return $LesLignesEMBL } if {[set Alternatif [AccessAlternatif $Access]]!=""} { set EMBL [Getz $Alternatif] if {[regexp "^ID " $EMBL]} { set LesLignesEMBL [split $EMBL "\n"] set AccessOK $Access # Warne "getz $Access alternatif $Alternatif" return $LesLignesEMBL } } if {[SembleEtreUnAccessVarsplic $BanqueId]} { set LesLignesEMBL [LaSequenceDesBanques "VARSPLIC:$BanqueId"] if {$LesLignesEMBL!={}} { return $LesLignesEMBL } } set GB "" if {0 && $GB==""} { set GB [BirdWeb "gbrl" $Access] } if {0 && $GB==""} { set GB [Getz $Access "GenbankFull"] } if {$GB!="" && [regexp "\nACCESSION" $GB]} { set AccessOK $Access if {$OnExigeNature} { return [split $GB "\n"] } set FichierGB "[RepertoireDeTravail]/$Access.genbank" Sauve $GB dans $FichierGB if {$OnExigeNuc} { set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGBTags OS OC SeqADN $FichierGB] "nuc"] "\n"] } else { set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGenBank OS OC SeqADN $FichierGB]] "\n"] } # File delete -force $FichierGB return $LesLignesEMBL } if {0 && $GB==""} { set GB [Getz $Access "est sts gss htg htc"] } if {$GB!="" && [regexp "\nACCESSION " $GB]} { set OnExigeNuc 1 set AccessOK $Access if {$OnExigeNature} { return [split $GB "\n"] } set FichierGB "[RepertoireDeTravail]/$Access.gbtags" Sauve $GB dans $FichierGB if {$OnExigeNuc} { set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGBTags OS OC SeqADN $FichierGB] "nuc"] "\n"] } else { set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGenBank OS OC SeqADN $FichierGB]] "\n"] } File delete -force $FichierGB return $LesLignesEMBL } if {[info exists EviteSPTNEW] && $EviteSPTNEW && [regexp -nocase "^SPTNEW" $BanqueId]} { Warne "$BanqueId $Access not found. I don't search in SPTNEW with GCG" if { 0 && $Previens } { FaireLire "$BanqueId $Access not found. I don't search in SPTNEW with GCG. I ignore it." } return {} } Wup "On ne l'a donc jamais vu ... On essaye GCG." global TryGCG if { ! [info exists TryGCG]} { set TryGCG 0 } if {$OnExigeNature || $TryGCG} { set AccessGCG $BanqueId set GCG [FetchCat $AccessGCG] if {$GCG == ""} { set AccessGCG $Access set GCG [FetchCat $AccessGCG] } if {$GCG != ""} { set GCG [QueLePremierGCG $GCG] if {[regexp "^!!NA_SEQUENCE" $GCG] && [regexp "\nACCESSION " $GCG]} { set AccessOK $Access if {$OnExigeNature} { return [split $GCG "\n"] } set FichierGB "[RepertoireDeTravail]/$Access.gbtags" Sauve $GCG dans $FichierGB set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGBTags OS OC SeqADN $FichierGB] "nuc"] "\n"] File delete -force $FichierGB return $LesLignesEMBL } if {[regexp "^!!AA_SEQUENCE" $GCG] && [regexp "\nACCESSION " $GCG]} { set AccessOK $Access if {$OnExigeNature} { return [split $GCG "\n"] } set FichierGB "[RepertoireDeTravail]/$Access.gbk" Sauve $GCG dans $FichierGB set LesLignesEMBL [split [FromInfoOfGenBankToEMBL [DecortiqueGenBank OS OC SeqProt $FichierGB] "prot"] "\n"] File delete -force $FichierGB return $LesLignesEMBL } set AccessOK $AccessGCG set LesLignesGCG [split $GCG "\n"] if { $OnExigeNature} { return $LesLignesGCG } if { ! $OnVeutEMBL } { return $LesLignesGCG } set iSQ [lsearch -regexp $LesLignesGCG "^SQ"] set Entete [lrange $LesLignesGCG 0 $iSQ] set Suite [lrange $LesLignesGCG $iSQ end] set iPP [lsearch -regexp $Suite {\.\.}] set iFin [lsearch -regexp $Suite "^ID"] if {[incr iFin -1] < 0} { set iFin "end" } set Sequence [join [lrange $Suite [incr iPP] $iFin] ""] regsub -all {[ 0-9]} $Sequence "" Sequence set LaSeqEMBL [split [QueSequenceFormatEMBL $Sequence "SansSQ"] "\n"] set LesLignesEMBL [concat $Entete $LaSeqEMBL "\n//"] return $LesLignesEMBL } } if {[OnTraite "CilioCarta"]} { set TFA [QuestionDeScience EVImm "ret FromYannis $BanqueId TFA"] if {$TFA!=""} { set AccessOK $BanqueId if {$OnVeutEMBL} { return [split [SequenceFormatEMBL $TFA $Access tfa] "\n"] } return [split $TFA "\n"] } } Warne "$BanqueId $Access not found." if { $Previens } { FaireLire "$BanqueId introuvable. Je l'ignore." } return {} } proc LaSequenceDesLignesEMBL {LesEMBL} { Wup "Return the sequence of the EMBL text" set OK 0 set Sequence "" foreach Ligne $LesEMBL { if {[regexp "^SQ" $Ligne]} { set OK 1 continue } if {$OK} { regsub -all -nocase {[^A-Z]} $Ligne "" BoutDeSeq append Sequence $BoutDeSeq } } return $Sequence } proc LaSequenceDuFichierEMBL {Fichier} { return [LaSequenceDesLignesEMBL [LesLignesDuFichier $Fichier]] } proc LaSequenceDuTFAs {FichierTFAs AccessDemande {DontMemorize ""} {CarRedon ""} {ForceAccessFirst ""} {AllowDigitOnly ""}} { global LesSequencesDuTFAs if {$DontMemorize=="DontMemorize"} { set DontMemorize 1 } else { set DontMemorize 0 } if {$CarRedon==""} { set CarRedon "_" } if {[string equal -nocase $AllowDigitOnly "AllowDigitOnly"]} { set AllowDigitOnly 1 } else { set PrefixIfDigitOnly $AllowDigitOnly if {$PrefixIfDigitOnly==""} { set PrefixIfDigitOnly "n" } set AllowDigitOnly 0 } set ForceAccessFirst [string equal -nocase $ForceAccessFirst "ForceAccessFirst"] regsub "\:" $AccessDemande "_" AccessDemande Wup "Loads the sequence corresponding to Access from a multiple tfa file (can be a blast database)" Wup "Not sure that it works well if wrong '>b:id access'" if {[info exists LesSequencesDuTFAs($FichierTFAs,$AccessDemande)]} { return [set LesSequencesDuTFAs($FichierTFAs,$AccessDemande)] } if {[info exists LesSequencesDuTFAs($FichierTFAs)]} { return "" } set nIeme 1 set Trouve 0 set I 0 #rR attention dans le temps je considerais le BanqueId comme etant du style SPT:ABCDEF #rR Maintenant c'est plutot du style SYNT_HUMAN ... #rR Du coup dans ce qui suit, ou on s'attend soit a trouver >SYNTH_HUMAN Q12345 soit >Q12345 #rR dans le premier cas on vuet avoir les deux ... #rR et pour les PDB c'est on a en general >PDB:1y18_F et pas d'access #rR pour je ne sais plus quelle raison j'ai remplace les : par _ foreach Ligne [LesLignesDuFichier $FichierTFAs] { if { ! [regexp -nocase {[\-\.\*a-z0-9_>]} $Ligne]} { continue } if { [regexp {^#} $Ligne]} { continue } if {[regexp "^>" $Ligne]} { incr I if {$DontMemorize && $Trouve} { break } regsub {^> *} $Ligne "" Ligne set AccessLu "" scan $Ligne "%s %s" BanqueId AccessLu set Meme 0 if {$ForceAccessFirst || [regexp -nocase {^PDB\:} $BanqueId] || [regexp "|" $BanqueId]} { set AccessLu $BanqueId set Meme 1 } else { # if { ! [regexp -nocase {[a-z0-9_]+\:[a-z0-9_]+} $BanqueId] } { Espionne coucou; set AccessLu $BanqueId } } regsub {\:} $BanqueId "_" Banque_Id regsub {\:} $AccessLu "_" Access_Lu if { ! [regexp -nocase {[a-z0-9]} $AccessLu]} { set Access_Lu $Banque_Id } ;#rR 2014/01/07 car il n'y a plus de Access set Access $Access_Lu #rR ATTENTION on rajoute PrefixIfDigitOnly si y a que des chiffres car y avait clustal (?) qui se plante ! if { ! $AllowDigitOnly && ! [regexp -nocase {[a-z_]} $Access_Lu]} { set Access "$PrefixIfDigitOnly$Access_Lu" } set AccessTmp $Access set nIeme 1 while {[info exists DejaVu($Access)]} { set Access "$AccessTmp$CarRedon[incr nIeme]" } if {$Meme} { set BanqueId $Access } set DejaVu($Access) 1 if {$DontMemorize && $Access!=$Access_Lu} { continue } if {$Access!=$Access_Lu && ! [regexp -nocase {[^a-z\:_0-9]} $Access_Lu]} { regsub "$Access_Lu" $Ligne $Access Ligne } set LesSequencesDuTFAs($FichierTFAs,$Access) ">$Ligne" if {$Banque_Id!=$Access && ! [info exists LesSequencesDuTFAs($FichierTFAs,$Banque_Id)]} { set LesSequencesDuTFAs($FichierTFAs,$Banque_Id) ">$Ligne" } lappend LesSequencesDuTFAs($FichierTFAs,LaListeDesAccess) $Access continue } if {$DontMemorize && $Access!=$Access_Lu} { continue } set Trouve 1 append LesSequencesDuTFAs($FichierTFAs,$Access) "\n$Ligne" if {$Banque_Id!=$Access && ! [info exists LesSequencesDuTFAs($FichierTFAs,$Banque_Id)]} { append LesSequencesDuTFAs($FichierTFAs,$Banque_Id) "\n$Ligne" } } if {$DontMemorize} { if {[info exists LesSequencesDuTFAs($FichierTFAs,$AccessDemande)]} { return [set LesSequencesDuTFAs($FichierTFAs,$AccessDemande)] } else { return "" } } set LesSequencesDuTFAs($FichierTFAs) "SontChargees" return [LaSequenceDuTFAs $FichierTFAs $AccessDemande] } proc LaSequenceDuTFAsMultiEntete {FichierTFAs Access} { global LesSequencesDuTFAs Wup "Same as LaSequenceDuTFAs execept that it accepts several access on a header line" Wup "Loads the sequence corresponding to Access from a multiple tfa file (can be a blast database)" Wup "Not sure that it works well if wrong '>b:id access'" if {[info exists LesSequencesDuTFAs($FichierTFAs,$Access)]} { return [set LesSequencesDuTFAs($FichierTFAs,$Access)] } if {[info exists LesSequencesDuTFAs($FichierTFAs)]} { return "" } foreach Ligne [LesLignesDuFichier $FichierTFAs] { if { ! [regexp -nocase {[a-z0-9_>]} $Ligne]} { continue } if {[regexp "^>" $Ligne]} { regsub "^>" $Ligne "" Ligne set LesAcessLus {} foreach Champ [split $Ligne "+"] { set AccessLu "" scan $Champ "%s" AccessLu lappend LesAccessLus $AccessLu set LesSequencesDuTFAs($FichierTFAs,$AccessLu) ">$AccessLu" lappend LesSequencesDuTFAs($FichierTFAs,LaListeDesAccess) $AccessLu } continue } foreach AccessLu $LesAccessLus { append LesSequencesDuTFAs($FichierTFAs,$AccessLu) "\n$Ligne" } } set LesSequencesDuTFAs($FichierTFAs) "SontChargees" return [LaSequenceDuTFAsMultiEntete $FichierTFAs $Access] } proc LaSequenceDuTexteEMBL {Texte} { return [LaSequenceDesLignesEMBL [split $Texte "\n"]] } proc LaSequenceGenomiquePourPromAn {FileTFA DebutTSS {Access ""} {Organism ""}} { set Seq [QueLaSequenceDuFichierTFA $FileTFA] set Taille [string length $Seq] return [list [list "GenomicSequence" "GenomicSequence" "1" $Taille "+" $DebutTSS "" "" $Access $Organism]] } proc LaTkColDe {c} { if {! [info exists ::ListeTkCol]} {InitTkCol} if {[regexp {_} $c]} { set c [string map {_ ""} $c] } set n [lsearch -inline -nocase $::ListeTkCol $c] if {$n ne ""} { return $n } else { return blue } } proc LaTotale {} { set lf [ListeDesPABs] foreach f $lf { MounirDuBlast $f } exit } proc LaTotalePourLesCDNAs {} { global RepertoireDuGenome if {! [file exists "$RepertoireDuGenome/fiches/bornesdespabs"]} { if {[OnTraiteDesAffymetrix]} { CreeBornesDesCDNAs "Affymetrix" } else { CreeBornesDesCDNAs } } ProtocoleEukaryotePourDNA } proc LaTrace {{cmd ""} {ignoredArg ""}} { global ListeProc if {! [info exists ListeProc]} { inittrace set ListeProc {} return } set cmd [lindex $cmd 0] if {[lsearch $ListeProc $cmd] == -1} { lappend ListeProc $cmd } return } proc LaTraduction {Liste {Sortie ""} {SansBlanc ""}} { global GscopeDico if {$Sortie==""} { set Sortie [GscopeLangue] } set SansBlanc [string equal -nocase $SansBlanc "SansBlanc"] if { ! [info exists GscopeDico]} { foreach FichierDico [glob -nocomplain "[GscopeEtc]/gscope_*.dic"] { if {[file exists $FichierDico]} { if {[info exists LesLangues]} { unset LesLangues } foreach Ligne [LesLignesDuFichier $FichierDico] { if {[regexp {^[ \t]*\#} $Ligne]} { continue } set LesTermes {} foreach Terme [split $Ligne ":"] { regsub -all {^[ \t]+} $Terme "" Terme regsub -all {[ \t]+$} $Terme "" Terme lappend LesTermes $Terme } if { ! [info exists LesLangues]} { set LesLangues $LesTermes set NombreDeLangues [llength $LesLangues] continue } while {[llength $LesTermes] < $NombreDeLangues} { lappend LesTermes "" } set LesTermes [EtendAuxPremiersTermes $LesTermes] set LesTermes [lrange $LesTermes 0 [expr $NombreDeLangues-1]] set LesTermes [EtendAuxDerniersTermes $LesTermes] foreach Terme $LesTermes { foreach Langue $LesLangues TermeTraduit $LesTermes { if {$Terme==""} { continue } if {$SansBlanc} { regsub -all " " $TermeTraduit "_" TermeTraduit } set GscopeDico($Terme:$Langue) $TermeTraduit } } } } } } foreach Terme $Liste { if {[info exists GscopeDico($Terme:$Sortie)]} { lappend LaTraduction [set GscopeDico($Terme:$Sortie)] } else { lappend LaTraduction $Terme } } return $LaTraduction } proc LaValeurMaxCGHBAC {FichierCourbe Chromosome {LesPos ""}} { #NB: fichiercourbe= pour 1 patient set ValMax 0 ChargeFichierCourbeCGH TabC $FichierCourbe $Chromosome $LesPos if {[info exists TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbe,Chromosome,$Chromosome,$Pos)] { set Value [lindex $LInfo 2] if {$Value>$ValMax} {set ValMax $Value} } } } return $ValMax } proc LaValeurMaxCGHOligo {FichierCourbe Chromosome {LesPos ""}} { #NB: fichiercourbe= pour 1 patient set ValMax 0 ChargeFichierCourbeCGH TabC $FichierCourbe $Chromosome $LesPos if {[info exists TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbe,Chromosome,$Chromosome,$Pos)] { set Val [lindex $LInfo 3] set Value [format "%.2f" [expr ($Val*log(10)/log(2))*1.0]] if {$Value>$ValMax} {set ValMax $Value} } } } return $ValMax } proc LaValeurMaxCGHSeg {FichierCourbe Chromosome {LesPos ""}} { #NB: fichiercourbe= pour 1 patient set ValMax 0 ChargeFichierSEG TabC $FichierCourbe $Chromosome $LesPos if {[info exists TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbe,Chromosome,$Chromosome,$Pos)] { set Value [lindex $LInfo 6] set Value [format "%.2f" [expr $Value*1.0]] if {$Value>$ValMax} {set ValMax $Value} } } } return $ValMax } proc LaValeurMinCGHBAC {FichierCourbe Chromosome {LesPos ""}} { #NB: fichiercourbe= pour 1 patient set ValMin 100 ChargeFichierCourbeCGH TabC $FichierCourbe $Chromosome $LesPos if {[info exists TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbe,Chromosome,$Chromosome,$Pos)] { set Value [lindex $LInfo 2] if {$Value<$ValMin} {set ValMin $Value} } } } return $ValMin } proc LaValeurMinCGHOligo {FichierCourbe Chromosome {LesPos ""}} { #NB: fichiercourbe= pour 1 patient set ValMin 100 ChargeFichierCourbeCGH TabC $FichierCourbe $Chromosome $LesPos if {[info exists TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbe,Chromosome,$Chromosome,$Pos)] { set Val [lindex $LInfo 3] set Value [format "%.2f" [expr ($Val*log(10)/log(2))*1.0]] if {$Value<$ValMin} {set ValMin $Value} } } } return $ValMin } proc LaValeurMinCGHSeg {FichierCourbe Chromosome {LesPos ""}} { #NB: fichiercourbe= pour 1 patient set ValMin 100 ChargeFichierSEG TabC $FichierCourbe $Chromosome $LesPos if {[info exists TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbe,Chromosome,$Chromosome,$Pos)] { set Value [lindex $LInfo 6] set Value [format "%.2f" [expr $Value*1.0]] if {$Value<$ValMin} {set ValMin $Value} } } } return $ValMin } proc LabelText {base {args ""}} { #set default values set frargs "" set txtargs "" set labargs "" set txtpack "" set labpack "" #parse arguments, assign to label/text components foreach {arg val} $args { switch -- $arg { -relief {append frargs " $arg $val " } -borderwidth {append frargs " $arg $val " } -labelfont {append labargs "-font \{$val\} " } -labelwidth {append labargs " -width $val "} -labelheight {append labargs " -height $val "} -labeltext {append labargs " -text \{$val\} "} -labeljustify {append labargs " -justify $val "} -labeltextanchor {append labargs " -anchor $val "} -labelbg - -labelbackground {append labargs " -background $val "} -labelfg - -labelforeground {append labargs " -foreground $val "} -labeltextvariable {append labargs " -textvariable $val" } -labelside { append labpack " -side $val " append txtpack " -side $val " } -labelanchor { append labpack " -anchor $val " append txtpack " -anchor $val " } -width - -height - -background - -foregroung - -bg - -fg - -font {append txtargs " $arg \{$val\} "} -textvariable { #todo: Create variable if one does not exist set variable $val set a $variable puts $a trace var ::$a wu _$a set ::${a}_ $base.$variable ################################################### #create bespoke trace handler ################################################### proc _$a {name i op} { # args passed to the fucntion # name variable name # i array index # op operation #upvar 1 $name var if {$::DEBUG} { puts ">> name: $name i: $i op: $op" #puts "[set ::${name}(${i})_]" } #deal with unset variables if { $op == "u" } { if { $i != {} } { rename _$name {} } else { rename _${name}(${i}) {} } return } #assuming variable to be an array, ie $i != NULL if {$i != {} } { #variable is and array [set ::${name}(${i})_] delete 1.0 end [set ::${name}(${i})_] insert end [set ::${name}(${i})] } else { #simple variable [set ::${name}_] delete 1.0 end [set ::${name}_] insert end [set ::${name}] } } #end proc } # end textvariable block } #end switch } #end foreach # build megawidget frame $base {*}$frargs label $base.lab {*}$labargs pack $base.lab {*}$labpack text $base.$variable {*}$txtargs pack $base.$variable {*}$txtpack -in $base if {$::DEBUG} { bind "$base.$variable" { # get variable name set tmp %W puts "%W -- [winfo parent %W]" puts "%W -- [winfo pathname [winfo id %W]]" puts [lindex [split %W .] end] } } #update variable when focus is lost bind "$base.$variable" { set a [%W get 1.0 end] set b [lindex [split %W .] end] #if {$::DEBUG} { puts "a = $a b = $b \n[set $b]" } #remove any blank lines set $b [string trimright [string trimleft $a]] } #return location return $base } proc LacheLeBouton {w} { global QuelBouton global LeBoutonQuiEstMontre catch {after cancel $QuelBouton} catch {destroy $LeBoutonQuiEstMontre} } proc Laetst {} { set RepertoireParent "/home/luudao/tmp/" set Racine String_9606_201108051443 set NomZip String_9606_201108051443.tgz exec csh -c "cd $RepertoireParent; tar -cf - $Racine | gzip -9 > $NomZip" puts "all done !" exit } proc Lana {{Qui ""} {Quoi ""}} { global Lana set IouM "Merck" if {[regexp "^s" $Qui]} { set IouM "Igbmc" } set FichierTFA "[LanaRep]/nuctfa$IouM/$Qui" set Entete [EnteteDuFichierTFA $FichierTFA] if {$IouM=="Igbmc"} { ScanLaListe [split $Entete " "] SpotID ProductID OligoName GenbankID UGCluster Symbol LLID set Def [StringSuivant "Def: " dans $Entete] set Aliases [StringSuivant "Aliases: " dans $Def] regsub { Aliases: .*} $Def "" Def } else { ScanLaListe [split $Entete " "] Reporter_ID gene_id gene locuslink accession } set Seq [QueLaSequenceDuFichierTFA $FichierTFA] if {[info exists $Quoi]} { return [set $Quoi] } return "" } proc LanaBestHits {IouM {Qui ""}} { set OldBId "" set OldQuery "" set Bidon "na -1 na na -1 -1 -1/-1 Plus/Plus -1 -1 -1 -1" foreach Ligne [LesLignesDuFichier "[LanaRep]/Hits$IouM"] { if {$Ligne==""} { continue } ScanLaListe [split $Bidon " "] Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct ScanLaListe [split $Ligne " "] Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct if {$Qui!="" && $Qui!=$Query} { continue } set QBS [StringSuivant " /" dans $Ligne] ScanLaListe [split $QBS "/"] SeqQuery Barres SeqSbjct set DHQ [Mini $DebQuery $FinQuery] set FHQ [Maxi $DebQuery $FinQuery] set LHQ [expr $FHQ-$DHQ+1] if {$FHQ==$LongQuery && ($DHQ==1 || $DHQ==2) && $Identities=="$LHQ/$LHQ"} { lappend BonsHits($Query) $Ligne Espionne $Ligne AppendAuFichier "[LanaRep]/BestHits$IouM" $Ligne } else { if { ! [info exists BonsHits($Query)]} { AppendAuFichier "[LanaRep]/BadHits$IouM" $Ligne } } set OldQuery $Query continue #rR le reste est obsolete ScanLaListe [split $Identities "/"] A B if {$A<$B} { continue } if {0 && $Identities!="$LongQuery/$LongQuery"} { continue } if {[expr $A<$LongQuery-2]} { continue } if {$OldQuery!=$Query} { Espionne "\n\n[Lana $Query Def]" } if {0 && $OldBId!=$BId} { Espionne } set OldBId $BId Espionne "$Query [format %-5s $BId] $LongQuery $Identities $DebQuery $FinQuery $DebSbjct $FinSbjct $Barres" } } proc LanaCommonTargets {{Ext ""}} { foreach Ligne [LesLignesDuFichier "[LanaRep]/TargetsIgbmc$Ext"] { scan $Ligne "%s %s" Access ProbeIgbmc lappend Igbmc($Access) $ProbeIgbmc lappend LesAccessIgbmc $Access } set LesAccessIgbmc [lsort -unique $LesAccessIgbmc] foreach Ligne [LesLignesDuFichier "[LanaRep]/TargetsMerck$Ext"] { scan $Ligne "%s %s" Access ProbeMerck lappend Merck($Access) $ProbeMerck lappend LesAccessMerck $Access } set LesAccessMerck [lsort -unique $LesAccessMerck] foreach Access $LesAccessMerck { if {[info exists Igbmc($Access)]} { AppendAuFichier "[LanaRep]/CommonTargets$Ext" "$Access [join $Igbmc($Access) /] [join $Merck($Access) /]" } } } proc LanaCreateBadNuctfa {IouM FromFile ToRep} { if {[FileAbsent $ToRep ]} { file mkdir $ToRep } foreach Ligne [LesLignesDuFichier $FromFile] { scan $Ligne "%s" Query file copy -force "[LanaRep]/nuctfa$IouM/$Query" "$ToRep/$Query" } return $ToRep } proc LanaHits {IouM} { set RepDesBla "[LanaRep]/blatblast$IouM" if {[regexp -nocase "blastn" $IouM]} { set RepDesBla "[LanaRep]/$IouM" } set FichierDesCopains "[LanaRep]/Hits$IouM" if {[file exists $FichierDesCopains] && [OuiOuNon "Do I replace $FichierDesCopains"]} { file delete $FichierDesCopains } foreach Fichier [lsort [glob "$RepDesBla/*"]] { set LesHits [DecortiqueBlat $Fichier] set LaSortie {} foreach LeHit $LesHits { ScanLaListe $LeHit Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct SeqQuery Barres SeqSbjct set Texte "$Query $LongQuery $BId $Access $Length $Score $Expect $Identities $Strand $DebQuery $FinQuery $DebSbjct $FinSbjct" append Texte " /$SeqQuery/$Barres/$SeqSbjct" lappend LaSortie $Texte } if {$LaSortie=={}} { continue } AppendAuFichier $FichierDesCopains [join $LaSortie "\n"] } return $FichierDesCopains } proc LanaIgbmc {} { # SpotID ProductID OligoName GenbankID Position Sequence Length Tm_C UGCluster Name Symbol Aliases LLID set FichierIgbmc "[LanaRep]/DeLana/puceOligoSourisIGBMC.csv" set Queue [file tail $FichierIgbmc] regsub -nocase {\.[^\.]+$} $Queue "" Queue LoadTxl $FichierIgbmc T -1 ";" set RepNuc "[LanaRep]/nuctfaIgbmc" if {[FileAbsent $RepNuc]} { file mkdir $RepNuc } set LesHeaders $T(ListHeaderPlease,$Queue) Espionne $LesHeaders foreach I $T(ListAllPlease,$Queue) { foreach Header $LesHeaders { set $Header [string trim $T($I,$Header)] if {$Header!="Name" && $Header!="Aliases"} { regsub -all " " [set $Header] "_" $Header } if {[set $Header]==""} { set $Header "na" } } regsub -all " " $LLID "" LLID regsub {s0*} $SpotID "" SpotNum regsub -all {\|+} $Aliases "|" Aliases set Entete "$SpotID $ProductID $OligoName $GenbankID $UGCluster $Symbol $LLID Def: $Name Aliases: $Aliases" #rR attention on enleve le 1er a set Sequence [string range $Sequence 1 end] set TFA [SequenceFormatTFA $Sequence $Entete "nucbrut"] set FichierTFA "$RepNuc/$SpotID" Sauve $TFA dans $FichierTFA if {$I%100==0} { Espionne $Entete } } } proc LanaLaTotale {{Etape ""}} { Wup "Il y a deux fichier Excel Igbmc et Merck sauves en .csv" Wup "On cree les nuctfa, on fait les blat, on decortique les blat pour creer les copains, on cree les .csv resultat" if {$Etape==""} { set Etape [ChoixParmi [LanaLesEtapesPossibles]] } if {$Etape=="Lana"} { LanaIgbmc LanaMerck # set Etape "BLAT_server" } if {$Etape=="BLAT_server"} { BLAT_server start mouse star6 # set Etape "BLAT_clientPourTousRR" } if {$Etape=="BLAT_clientPourTousRR"} { BLAT_clientPourTousRR "[LanaRep]/nuctfaIgbmc" "[LanaRep]/blatblastIgbmc" mouse BLAT_clientPourTousRR "[LanaRep]/nuctfaMerck" "[LanaRep]/blatblastMerck" mouse # set Etape "LanaHits" } if {$Etape=="LanaHits"} { LanaHits "Igbmc" LanaHits "Merck" # set Etape "LanaBestHits" } if {$Etape=="LanaBestHits"} { LanaBestHits "Igbmc" LanaBestHits "Merck" # set set Etape "LanaLocaliseBestHits" } if {$Etape=="LanaLocaliseBestHits"} { LanaLocaliseBestHits Igbmc LanaLocaliseBestHits Merck LanaCommonTargets # set Etape "LanaCreateNuctfaBad" } if {$Etape=="LanaCreateNuctfaBad"} { LanaCreateBadNuctfa "Igbmc" "[LanaRep]/BadHitsIgbmc" "[LanaRep]/nuctfaIgbmcBad" LanaCreateBadNuctfa "Merck" "[LanaRep]/BadHitsMerck" "[LanaRep]/nuctfaMerckBad" # set Etape "BLAT_clientPourTousRR-desBadsurHuman" } if {$Etape=="BLAT_clientPourTousRR_desBadsurHuman"} { set RepIgbmcHuman "[LanaRep]/blatblastIgbmcHuman" ; if {[FileAbsent $RepIgbmcHuman]} { file mkdir $RepIgbmcHuman } BLAT_clientPourTousRR "[LanaRep]/nuctfaIgbmcBad" $RepIgbmcHuman human # il faut faire find . -size 0 -exec rm {} \; set RepMerckHuman "[LanaRep]/blatblastMerckHuman" ; if {[FileAbsent $RepMerckHuman]} { file mkdir $RepMerckHuman } BLAT_clientPourTousRR "[LanaRep]/nuctfaMerckBad" "[LanaRep]/blatblastMerckHuman" human # il faut faire find . -size 0 -exec rm {} \; set Etape "LanaHitsHuman" } if {$Etape=="LanaHitsHuman"} { LanaHits "IgbmcHuman" LanaHits "MerckHuman" # set Etape "LanaBestHitsHuman" } if {$Etape=="LanaBestHitsHuman"} { LanaBestHits "IgbmcHuman" LanaBestHits "MerckHuman" # set Etape "LanaLocaliseBestHitsHuman" } if {$Etape=="LanaLocaliseBestHitsHuman"} { LanaLocaliseBestHits IgbmcHuman LanaLocaliseBestHits MerckHuman LanaCommonTargets Human } if {$Etape=="LanaBlastN"} { set RepQuery "[LanaRep]/nuctfaIgbmcBad" set LesQuery {} foreach Query [glob -nocomplain "[LanaRep]/nuctfaIgbmcBad/*"] { set Query [file tail $Query] lappend LesQuery $Query } BlastNPourTous Mus_musculus $LesQuery $RepQuery F 1 set RepBlastNIgbmc "[LanaRep]/blastnIgbmc" if {[FileAbsent $RepBlastNIgbmc]} {file mkdir $RepBlastNIgbmc} foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/blastnMus_musculus/*"] { set Queue [file tail $Fichier] if { ! [regexp {^s[0-9]+$} $Queue]} { continue } file copy $Fichier "$RepBlastNIgbmc/$Queue" } set RepQuery "[LanaRep]/nuctfaMerckBad" set LesQuery {} foreach Query [glob -nocomplain "[LanaRep]/nuctfaMerckBad/*"] { set Query [file tail $Query] lappend LesQuery $Query } BlastNPourTous Mus_musculus $LesQuery $RepQuery F 1 set RepBlastNMerck "[LanaRep]/blastnMerck" if {[FileAbsent $RepBlastNMerck]} {file mkdir $RepBlastNMerck} foreach Fichier [glob -nocomplain "[RepertoireDugenome]/blastnMus_musculus/*"] { set Queue [file tail $Fichier] if { ! [regexp {^[0-9]+$} $Queue]} { continue } file copy $Fichier "$RepBlastNMerck/$Queue" } # set Etape "LanaHitsBlastN" } if {$Etape=="LanaHitsBlastN"} { LanaHits "blastnIgbmc" LanaHits "blastnMerck" # set Etape "LanaBestHitsBlastN" } if {$Etape=="LanaBestHitsBlastN"} { LanaBestHits "blastnIgbmc" LanaBestHits "blastnMerck" } } proc LanaLesEtapesPossibles {} { set LesEtapesPossibles {} foreach Ligne [split [info body LanaLaTotale] "\n"] { if { ! [regexp -nocase {\$Etape==\"([a-z_0-9]+)\"} $Ligne Match Etape]} { continue } lappend LesEtapesPossibles $Etape } return $LesEtapesPossibles } proc LanaLocaliseBestHits {IouM {Qui ""}} { set FichierTargets "[LanaRep]/Targets$IouM" while {[file exists $FichierTargets]} { if {[OuiOuNon "Do I replace $FichierTargets"]} { file delete $FichierTargets ; break } if {[OuiOuNon "Do I cancel LanaLocaliseBestHits"] } { return "" } } set Org "Mouse" if {[regexp "Human" $IouM]} { set Org "Human" } set Bidon "na -1 na na -1 -1 -1/-1 Plus/Plus -1 -1 -1 -1" foreach Ligne [LesLignesDuFichier "[LanaRep]/BestHits$IouM"] { if {$Ligne==""} { continue } ScanLaListe [split $Bidon " "] Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct ScanLaListe [split $Ligne " "] Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct if {$Qui!="" && $Qui!=$Query} { continue } set Chro $BId set Milieu [expr ($DebSbjct + $FinSbjct)/2] set Locs "" if {$Locs==""} { set Locs [LocIn $Milieu $Org $Chro] } if {$Locs==""} { set Locs [LocIn $DebSbjct $Org $Chro] } if {$Locs==""} { set Locs [LocIn $FinSbjct $Org $Chro] } if {$Locs!=""} { foreach Loc [split $Locs "\n"] { ScanLaListe [LesMotsDeLaLigne $Loc] Access Deb Fin Orient AppendAuFichier $FichierTargets "$Access $Ligne === $Loc" } } } } proc LanaMerck {} { # Reporter_ID Sequence reporter_id gene_id gene locuslink accession set RepNuc "[LanaRep]/nuctfaMerck" if {[FileAbsent $RepNuc]} { file mkdir $RepNuc } set FichierMerck "[LanaRep]/DeLana/puceOligoSourisMerck.csv" set Queue [file tail $FichierMerck] regsub -nocase {\.[^\.]+$} $Queue "" Queue LoadTxl $FichierMerck T -1 ";" set LesHeaders $T(ListHeaderPlease,$Queue) Espionne $LesHeaders foreach I $T(ListAllPlease,$Queue) { foreach Header $LesHeaders { set $Header [string trim $T($I,$Header)] if {[set $Header]==""} { set $Header "na" } } if {$Sequence=="na"} { continue } regsub -all {\|+} "|$accession|" "|" accession set Entete "$Reporter_ID $gene_id $gene $locuslink $accession" set TFA [SequenceFormatTFA $Sequence $Entete "nucbrut"] set FichierTFA "$RepNuc/$Reporter_ID" Sauve $TFA dans $FichierTFA if {$I%100==0} { Espionne $Entete } } } proc LanaRep {} { return "/genomics/link/Lana" } proc LanaShow {} { global BestHit foreach IouM [list "Igbmc" "Merck"] { foreach Ligne [LesLignesDuFichier "[LanaRep]/BestHits$IouM"] { ScanLaListe [split $Ligne " "] Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct lappend BestHit($Query) $Ligne } } set F [AfficheFichier "[LanaRep]/CommonTargets" "AvecLana"] set B [BoutonneLaFenetre $F "ShowTarget" "LanaShowTarget \[selection get\]"] $B configure -background "black" -foreground "white" } proc LanaShowTarget {Selection} { global BestHit scan $Selection "%s %s %s" Access Igbmc Merck lappend LaPage $Selection lappend LaPage [LocUcsc $Access "line"] lappend LaPage "" foreach AI [split $Igbmc "/"] { lappend LaPage " [join $BestHit($AI) " \n"]" } foreach AM [split $Merck "/"] { lappend LaPage [join $BestHit($AM) "\n"] } AfficheVariable [join $LaPage "\n"] "GrandeLargeur" } proc Lance {Aligneur Selection} { global LaFenetreDesMSF set Num [NomDe ""] switch -regexp $Aligneur { "All" { foreach a [Aligneurs] { if {[Aligneurs $a]} { set MSF [AlignePar $a $Selection "Batch" $Num] lappend ListeDesMSF $MSF } } set Fenetre [AfficheVariable [join $ListeDesMSF "\n"] "AvecShowAvecEtudeMSF" "Wait all be Highlighted ...\nThen reselect and press a function. "] BoutonneLaFenetre $Fenetre "Log" "AfficheLogDesMSF \[selection get\]" foreach Fichier $ListeDesMSF { set LaFenetreDesMSF($Fichier) $Fenetre } } "clustalw|dialign|pileup|prrp" { AlignePar $Aligneur $Selection "Batch" $Num } default { } } } proc LanceAreaimol {f1 f2} { set o [open cmd.csh w] puts $o "setccp4" puts $o "areaimol xyzin $f1 xyzin2 $f2 xyzout out.pdb < outfile" puts $o "diffmode compare" puts $o "pntden 100" puts $o "output" puts $o "end" puts $o "eof" puts $o "exit" close $o catch {exec tcsh cmd.csh} Msg if {$Msg ne ""} { #puts "Msg : $Msg" } if {! [file exists outfile]} { return 0 } else { return [LesLignesDuFichier outfile] } } proc LanceCalculConservation {} { global Cons ScoreMeth set ft [PrepareRunOrdali] if {$Cons(Entry) ne ""} { set Cons(Title) [$Cons(Entry) get] } lappend Cons(ListeCons) [list $ft $Cons(Title)] if {$Cons(ComboSel) ne ""} { $Cons(ComboSel) configure -values $Cons(ListeCons) $Cons(ComboSel) current [expr {[llength $Cons(ListeCons)]-1}] } set Cons(ConsCou) $ft set ScoreMeth($ft,Title) $Cons(Title) set ScoreMeth($ft,Methode) $Cons(Method) ChangeConservation return } proc LanceDoc {} { global OrdHlpDir package require Tkhtml set file [file join $OrdHlpDir help.html] Hv_Run -readfile $file return } proc LanceElm {} { foreach Box [ListeDesPABs] { Espionne "$Box" if {[regexp -nocase "Mouse" [RepertoireDuGenome]] || [regexp -nocase "Rat" [RepertoireDuGenome]]} { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj.reduit" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.reduit"} } else { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout.ordonne.reduit" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ordonne.reduit"} } set FileElm "[RepertoireDuGenome]/fiches/regexp_all_elms_exp_manual_SsCLV" set Commande "/biolo/macsim/elm2relacs $FileMacsims $FileElm $FileMacsims.elm /tmp" catch {eval exec $Commande} } } proc LanceIdentityProfile {} { global LNDG SDG LNOrdali ListeDesPiliersDuGroupe ScoreMeth ListeTypesDeFeatures TabSF LongueurTotale Sequences PrI FaireAttendre "Please wait ...\nComputing Identity Profiles ..." if {! [info exists ListeDesPiliersDuGroupe]} { CreeLesPiliers } # groups to compute switch $PrI(grp) { "All" {set Lgrp $LNDG} "Global" {set Lgrp [lindex $LNDG 0]} default {set Lgrp $PrI(grp)} } set NPiliers [llength [set ListeDesPiliersDuGroupe([lindex $Lgrp 0])]] set wlg $PrI(win) set jmp $PrI(jump) set f "Score-Iden" lappend ListeTypesDeFeatures $f set ScoreMeth($f,ListeGrps) $Lgrp foreach g $Lgrp { set mmax -99999999.0 set mmin 99999999.0 set LPil [set ListeDesPiliersDuGroupe($g)] set id 0 set if [expr {$wlg-1}] set Nsq 0 foreach p [lrange $LPil $id $if] { set p [string map [list "." ""] $p] if {[string length $p] >= 2} { incr Nsq } } while {$if <= ($NPiliers-$wlg)} { if {$id != 0} { set pOte [lindex $LPil $id] set pAdd [lindex $LPil $if] set pOte [string map {"." ""} $pOte] set pAdd [string map {"." ""} $pAdd] if {[string length $pOte] >= 2} { incr Nsq -1 } if {[string length $pAdd] >= 2} { incr Nsq } } if {$Nsq == 0} { set istk [expr {$id+($wlg/2)-1}] set ScoreMeth($f,$g,$istk) -999. incr id $jmp incr if $jmp continue } # Create "window" alignment for PCI set SAli [list] foreach n [set SDG($g)] { lappend SAli $n [string range [set Sequences($n)] $id $if] } CalculeLesPCIGenerique $SAli TPCI set in 1 ; set nm 0 set m 0.0 foreach n1 [lrange $SDG($g) 0 end-1] { foreach n2 [lrange $SDG($g) $in end] { set m [expr {$m + [lindex $TPCI($n1,$n2) 0]}] incr nm } incr in } set m [expr {100.*$m/double($nm)}] if {$m > $mmax} {set mmax $m} if {$m < $mmin} {set mmin $m} set istk [expr {$id+($wlg/2)-1}] set ScoreMeth($f,$g,$istk) $m incr id $jmp ; incr if $jmp unset -nocomplain TPCI } set Sc($g,min) $mmin set Sc($g,max) $mmax set ScoreMeth($f,${g}-min) $mmin set ScoreMeth($f,${g}-max) $mmax } set ScoreMeth($f,Edit) 0 set ScoreMeth(ScaleGlobal) 1 FaireLaSuite if {$PrI(CSV)} { set file [DemandeEtSauveFichier csv] if {$file ne ""} { set o [open $file w] set g [lindex $Lgrp 0] set Li [list] foreach e [array names ScoreMeth "$f,$g,*"] { lappend Li [lindex [split $e ,] 2] } set Li [lsort -unique -integer $Li] foreach i $Li { set Ls [list] foreach g $Lgrp { set x [set ScoreMeth($f,$g,$i)] if {$x == -999. || $x < 0.1} { set x 0.0 } lappend Ls $x } puts $o [join $Ls ";"] } close $o } } if {1} { set file [open "vals.txt" w] foreach g $Lgrp { puts $file "$g" puts $file "[string repeat - [string length $g]]" foreach n [lsort -dictionary [array names ScoreMeth "$f,${g},*"]] { lassign [split $n ,] nf ng ni puts $file "$ni [set ScoreMeth($n)]" } puts $file "" } close $file } unset -nocomplain PrI TPCI return } proc LanceInterproScan {FileIn FileOut} { set Commande "/titan/data/iprscan/V4.8/iprscan/bin/iprscan -cli -i tmpfa -o tmpo -appl patternscan -format raw" #set Commande "/titan/data/iprscan/V4.8/iprscan/bin/iprscan -cli -i $FileIn -o $FileOut -appl patternscan -format raw -goterms -iprlookup" catch {eval exec $Commande >& iprlog} return } proc LanceInterproscanOld {Repertoire} { #repetition avec proc Interproscan #dans 2eme relance, donne nom des box au lieu nom des clusters dans repertoire Interproscan #set RepertoireSourisTfactor "/genomics/link/SpliRetMouse/FichiersModifUnique/PROT_VARIANTES_61_mai/SOURIS_Tfactor_61_mai" #set RepertoireSourisOthers "/genomics/link/SpliRetMouse/FichiersModifUnique/PROT_VARIANTES_61_mai/SOURIS_others_61_mai" #set RepertoireSourisNOALT "/genomics/link/SpliRetMouse/FichiersModifUnique/PROT_VARIANTES_61_mai/SOURIS_NO_ALT_61_mai" #set RepertoireRatTfactor "/genomics/link/SpliRetRat/FichiersModifUnique/PROT_VARIANTES_61_mai/RAT_Tfactor_61_mai" #set RepertoireRatOthers "/genomics/link/SpliRetRat/FichiersModifUnique/PROT_VARIANTES_61_mai/RAT_others_61_mai" set RepertoireRatNOALT "/genomics/link/SpliRetRat/FichiersModifUnique/PROT_VARIANTES_61_mai/RAT_NO_ALT_61_mai" set RepertoireOut "[RepertoireDuGenome]/Interproscan" if {! [file exists $RepertoireOut]} {file mkdir $RepertoireOut} set LesFileOut {} foreach FileIn [glob -nocomplain "$Repertoire/*"] { Espionne "" Espionne "$FileIn" set Queue [file tail $FileIn] regsub {\.[^\.]+$} $Queue "" Cluster set Box [InterrogeBox $Cluster Box] set FileOut "$Box.is" Espionne "$FileOut" set Commande "/bips/bin/iprscan -cli -i $FileIn -o $RepertoireOut/$FileOut -appl hmmpfam -format raw -goterms -iprlookup" Espionne "$Commande" catch {eval exec $Commande} if {[FileExists $FileOut]} { lappend LesFileOut $FileOut } } return $LesFileOut } proc LanceLeServeurWscope {} { global GscopeDir global RepertoireDuGenome global CurrentGenome global ForumWscope global FichierAFaire global FichierDejaFait set Sonnette "$ForumWscope/wscope_${CurrentGenome}_est_pret" lappend LesCommandes "Sauve $Sonnette dans $Sonnette" SauveLesLignes $LesCommandes dans $FichierAFaire after 2000 if {! [file exists $Sonnette]} { after 2000 } if { ! [file exists $Sonnette]} { after 5000 eval exec $GscopeDir/bin/gscope ToujoursFaire $CurrentGenome & after 3000 } File delete $Sonnette } proc LanceLeonMS2PH {type} { set leon "/biolo/leon/leon.tcsh" puts "On est dans Leon : pour $type" foreach pab [ListeDesPABs] { puts "traite $pab" set logFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" "${pab}.log"] set alnFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" $pab] set inFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" $pab] if {![file exists $alnFile]} { if {[file exists $inFile]} { catch {exec $leon $inFile $pab $alnFile $logFile} } } } puts "fin calcul leon" CalculNorMDMS2PH $type leon puts "fin calcul NorMD suite a Leon" return 1 } proc LanceLesBlastPString {TaxID RepertoireTfa RepertoireSortie} { #RepertoireTfa genomics/link/Tau/GSTControl/BlastpSurStringPoulet/fastaquery #RepertoireSortie genomics/link/Tau/GSTControl/BlastpSurStringPoulet set non 0 foreach FichierTFA [glob -nocomplain "$RepertoireTfa/*"] { if {[regexp ".blastp" $FichierTFA]} {continue} Espionne "" Espionne "FichierTFA $FichierTFA" set Access [file tail $FichierTFA] set PID [BlastPStringMoi $FichierTFA $TaxID] Espionne "$Access $PID" if {[info exists DejaVu($PID)]} { incr DejaVu($PID) Espionne "$PID pls" } else { set DejaVu($PID) 1 } if {$PID=="vide"} { incr non } else { set Ligne "$PID" lappend LesLignes $Ligne } } SauveLesLignes $LesLignes dans "$RepertoireSortie/$TaxID" Espionne "" Espionne "non $non" } proc LanceLesCalculs {lc ngrp relatif {what pfam}} { CreeListeScore $ngrp NormalisationColonnes # AIC/BIC - MixtureModel #puts "$lc" #puts "$::ListeScore" #set Lgr [Tclcluspack $::ListeScore -dt coordinates -cm mm -nbc aic -wc] set Lgr [Tclcluspack $::ListeScore -dt coordinates -cm kmeans -nbc dpc -wc] set order decreasing switch $what { "pfam" { set rep [LanceTestsPfam $Lgr -order $order -nomgrr $ngrp -method $lc] } "bali" { set rep [LanceTestsBali $Lgr -order $order -nomgrr $ngrp -method $lc] } default { set rep [LanceTestsPDB $Lgr -order $order -relatif $relatif -nomgrr $ngrp] } } # pour shunter Al2Co ! if {"7" in $lc} {set rep 1} return $rep } proc LanceLoc {} { foreach Box [ListeDesPABs] { Espionne "$Box" set FileTfa "[RepertoireDuGenome]/FastaMacsims/$Box" set RepertoireSortie "[RepertoireDuGenome]/Loc" if {! [file exists $RepertoireSortie]} {file mkdir $RepertoireSortie} set Commande "/biolo/WolfPsort/bin/runWolfPsortHtmlTables animal $RepertoireSortie $Box < $FileTfa" catch {eval exec $Commande} } } proc LanceMonMacsim {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set RepertoireMsf "msf" foreach Nom $Liste { Espionne $Nom set FichierMacsim "[RepertoireDuGenome]/macsim/$Nom.xml" set FichierMacsimXml "[RepertoireDuGenome]/macsimXml/$Nom" set FichierMsf "[RepertoireDuGenome]/$RepertoireMsf/$Nom" if {[file exists $FichierMacsimXml]} {continue} if {[file exists $FichierMacsim]} {continue} if {! [file exists $FichierMsf]} {continue} MacsimManu $Nom $RepertoireMsf } } proc LanceOrdali {{behave slave} {aNomFenetreOrdali ""}} { global LongueurTotale NomSeqSel BufferSeq ListeTypesDeFeatures VariablesAuDepart Threshold AExecuter APutser NomFenetreOrdali VersionDeOrdali Defauts Toggle TabSF ListeTypesDeFeatures BufNTimes upvar $aNomFenetreOrdali NomFenetreOrdali set Threshold [set Defauts(Threshold)] set ListeTypesDeFeatures {} set NomSeqSel {} set BufferSeq {} set LongueurTotale 0 array set TabSF {} set BufNTimes "" InitComparaison InitChemicals InitHydroAA InitCode3l1l DemarrageOrdali DefinitionPreferences InitialiseCouleurs PrintSetup "defauts" #::profiler::reset set fileIn [LoadingAlignement] if {[set Defauts(PreCompute)]} { PreCalculs } FinDemarrage #AfficheProfileResults # Lancement fenetre principale if {! [info exists NomFenetreOrdali] || $NomFenetreOrdali eq ""} { set w ".ordali" set NomFenetreOrdali $w } else { set w $NomFenetreOrdali } if {[ModeI]} { ChangeTkOptions InitialiseFenetreOrdali $behave $NomFenetreOrdali InitAffichage update idletasks if {[TypeAli] in {"XML" "RSF" "ORD"}} { ChangeMode "feature" } #AfficheProfileResults # Toggle if necessary ToggleScores if {! $Toggle(ToolBar)} { ToggleToolbar } if {! $Toggle(Feature)} { ToggleFeature } BindingsOrdali BindMenuItems BindModeNormal } set VariablesAuDepart [info globals] if {[set Defauts(TypeDeGroupesACreer)] != "User" && [TypeAli] != "XML"} { DefinitionGroupes [set Defauts(TypeDeGroupesACreer)] } if {[set Defauts(Run)]} {RunOrdali} if {[set Defauts(Dump)]} {DumpOrdali} if {[set Defauts(RunScript)]} { source [set Defauts(Script)] } if {$behave eq "slave"} {return $w} if {[info exists AExecuter] && $AExecuter ne ""} { eval "$AExecuter" } if {[info exists APutser] && $APutser ne ""} { puts [eval $APutser] } if {[set Defauts(Exit)]} { AdieuOrdali } return } proc LancePSScan {f} { exec perl /home/moumou/tmp/ps_scan/ps_scan.pl -r -s -d /home/moumou/tmp/ps_scan/prosite.dat $f > ${f}.out if {! [file exists ${f}.out]} { puts "==> Erreur dans psscan !!" return {} } set Ll [LesLignesDuFichier ${f}.out] file delete -force ${f}.out return $Ll } proc LancePhrap {FichierEstTFA FichierSortie {Options ""}} { set Commande "exec /gcg/extensions/bin/phrap $FichierEstTFA $Options >& FichierSortie" eval $Commande } proc LancePipe {w} { global CurrentPipe global DefautsPipe LesDefauts Mode batch set CurrentPipe(Filter,bank) [set CurrentPipe(Blast,d)] foreach e [lsort [array names CurrentPipe]] { set DefautsPipe($e) [set CurrentPipe($e)] } if {[VerifieParametres]} { PipeGrid } else { return } exit } proc LancePourLaetitiaEnSortieDeGrid {} { RenommeLesRepertoiresDeLaGrid NormdEnSortieDeGrid file copy -force "[RepertoireDuGenome]/fiches/normdensortiedegrid" "[RepertoireDuGenome]/fiches/normdensortiedegrid.grid" CluspackDeLaGrid CreeLeFichierGroupedpcDeLaGrid #NormdDesCluspackDeLaGridPourTous #CreeLeFichierNormdEnSortieDeGrid } proc LancePourLaetitiaEnSortieDePipeLocal {Nom} { RangePipeLocal $Nom NormdEnSortieDePipeLocal $Nom file copy -force "[RepertoireDuGenome]/fiches/normdensortiedegrid" "[RepertoireDuGenome]/fiches/normdensortiedegrid.grid" CreeLeFichierGroupedpcDuPipeLocal $Nom #file rename -force "[RepertoireDuGenome]/fiches/groupedpc" "[RepertoireDuGenome]/fiches/groupedpc.grid" } proc LanceProtDeProjet {f} { global OPjt set file [file join ord ${f}.ord] set log [file join Logs $f] set cmd [list ordali $file -project $OPjt(Dir) -savelog $log] exec {*}$cmd & return } proc LanceRascalMS2PH {type} { puts "pour $type" foreach pab [ListeDesPABs] { puts "traite $pab" set outFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" $pab] if {![file exists $outFile]} { set inFile [file join [RepertoireDuGenome] "msf_$type" $pab] if {[file exists $inFile]} { catch {exec rascal $inFile $outFile} } } } CalculNorMDMS2PH $type rascal LanceLeonMS2PH $type return 1 } proc LanceRecupInFoMS2PH {} { set fic "/genomics/link/MS2PH-db/list/listAcc" puts "id@@EntryName@@ListSynAccNum@@ProteinName@@ListSynProtName@@GeneName@@ListSynGeneName@@Function@@ListGO@@ListGeneOmim@@ListPhenoOmim@@" set listEntry [LesLignesDuFichier $fic] foreach e $listEntry {} #foreach e {P35520} { if { ![regexp {^[1-9]} $e]} { parseFicUniprot $e } } return 1 } proc LanceStringDesSelectionnesSur180 {TaxId} { set nbbox 0; set nbvide 0 set FichierDesSelectionnes "[RepertoireDuGenome]/string/YesScNoTb.tfa" foreach Ligne [LesLignesDuFichier $FichierDesSelectionnes] { if {[regexp "^TP" $Ligne]} { set Box [lindex [split $Ligne " "] 0] Espionne "" Espionne "$Box" incr nbbox if {$TaxId=="9606"} { set FileTfa "[RepertoireDuGenome]/prottfa/$Box" set FileOut "[RepertoireDuGenome]/string/BlastpSurStringHomme/resultblast/$Box.blastp" set RepertoireSortie "[RepertoireDuGenome]/string/BlastpSurStringHomme" } if {$TaxId=="4932"} { set FileTfa [InfHomolog $Box filename] set FileOut "[RepertoireDuGenome]/string/BlastpSurStringLevure/resultblast/$Box.blastp" set RepertoireSortie "[RepertoireDuGenome]/string/BlastpSurStringLevure" } set Result [BlastPStringGeneral $FileTfa $FileOut $TaxId] Espionne "$Result" if {$Result=="vide"} { incr nbvide } else { set Ligne "$Result" lappend LesLignes $Ligne } } } SauveLesLignes $LesLignes dans "$RepertoireSortie/$TaxId" Espionne "" Espionne "nbbox $nbbox" Espionne "nbvide $nbvide" } proc LanceStringDesSelectionnesSur80 {TaxId} { set nbbox 0; set nbvide 0 set FichierDesSelectionnes "[RepertoireDuGenome]/string/80/bilanP62.csv" foreach Ligne [LesLignesDuFichier $FichierDesSelectionnes] { #Espionne "$Ligne" set LesMotsDeLaLigne [split $Ligne ";"] set Box [lindex $LesMotsDeLaLigne 2] if {![regexp "^TP" $Box]} {continue} Espionne "++$Box" incr nbbox if {$TaxId=="9606"} { set RepertoireSortie "[RepertoireDuGenome]/string/80/BlastpSurStringHomme" set FileTfa "[RepertoireDuGenome]/prottfa/$Box" set FileOut "$RepertoireSortie/resultblast/$Box.blastp" } if {$TaxId=="4932"} { set FileTfa [InfHomolog $Box filename] set RepertoireSortie "[RepertoireDuGenome]/string/80/BlastpSurStringLevure" set FileOut "$RepertoireSortie/resultblast/$Box.blastp" } set Result [BlastPStringGeneral $FileTfa $FileOut $TaxId] Espionne "$Result" if {$Result=="vide"} { incr nbvide } else { set Ligne "$Result" lappend LesLignes $Ligne } } SauveLesLignes $LesLignes dans "$RepertoireSortie/$TaxId" Espionne "" Espionne "nbbox $nbbox" Espionne "nbvide $nbvide" } proc LanceTestLuc {} { foreach f [ListeDesPABs] { puts "traitement $f" TestSelLuc $f } return 1 } proc LanceTests {fres ident {nomgrp ""}} { global ConsRef global LNDG set IdG 0 if {$nomgrp != ""} { set IdG [lsearch $LNDG $nomgrp] incr IdG 2 } # lecture clusters. # Calcule norme moyenne de chaque cluster # Gres : Tab indexe par le residu, donne le groupe # Tres : Tab indexe par le groupe, donne les resius set Lf [LesLignesDuFichier $fres] set nc [string trim [lindex [split [lindex $Lf 0] ":"] 1]] puts "NClusters : $nc" if {$nc < 2} { set g "OneCluster" set fmt "%15s :: %4d | %5d %6d %5s | %5d %6d %5s | %5d" puts "[format $fmt $ident-$g -1 -1 -1 -1 -1 -1 -1 -1]" return } set d 2 for {set i 0} {$i < $nc} {incr i} { set ngr "gr$i" set ne [lindex [split [lindex $Lf $d] "="] 1] if {! $ne} {continue} set id [expr {$d + 1}] set if [expr {$d + $ne}] set Lv {} set SVec 0. set mv 0. set nval 0 for {set j $id} {$j <= $if} {incr j} { set vals [lindex $Lf $j] set listev [split $vals "\t"] set v [lindex $listev 0] lappend Lv $v set Gres($v) $ngr set Vec [lrange $listev 1 end] foreach e $Vec { set mv [expr {$mv + $e}] incr nval } } set Tres($ngr) $Lv set Mnorm [expr {$mv/$nval}] set TNormI($ngr) $Mnorm set TNormV($Mnorm) $ngr set d [expr {$if + 2}] } # cherche cluster avec + grde norme # nel : nbr d'element de ce cluster set lv [lsort -decreasing -real [array names TNormV]] if {$lv == {}} { puts "\t===> 1 cluster vide !!!" return } set top [set TNormV([lindex $lv 0])] set nel [llength [set Tres($top)]] set lel [set Tres($top)] set dos [set TNormV([lindex $lv 1])] set ne2 [llength [set Tres($dos)]] set le2 [set Tres($dos)] if {! [llength $lv]} { set dos -1 set ne2 0 set le2 {} } if {[ModeI]} {CreeFeaturesScore $ident $nomgrp $lel $le2} # cree tableau t(type de conservation, no de cluster) = nbr residue foreach g [array names ConsRef] { set l [set ConsRef($g)] foreach v $l { if {! [info exists Gres($v)]} {continue} set ng [set Gres($v)] if {[info exists tmp($g,$ng)]} { incr tmp($g,$ng) } else { set tmp($g,$ng) 1 } } } # Pour un type de conservation donne, # - on cherche dans combien de groupes sont contenus les residues consideres # - on prend le nbr total de residus contenus dans ces groupes set Lar [array names tmp] foreach g [array names ConsRef] { set Li [lsearch -all -inline -regexp $Lar $g] set resli {} set cmptr 0 foreach n $Li { set ln [split $n ","] set ng [lindex $ln 1] set nbr [llength [set Tres($ng)]] lappend resli [list $ng $nbr] incr cmptr $nbr } set resli [lsort -index 1 -decreasing -integer $resli] set Comp($g) $resli set LeCmptr($g) $cmptr } # Affiche resultats set fmt "%15s :: %4d | %5d %6d %5s | %5d %6d %5s | %5d" set Ltype [ReordonneTypeCons] if {$nomgrp != ""} {set nomgrp [lindex $Ltype $IdG]} # fait par type # IdenGlob # ======== set gafaire $nomgrp if {$nomgrp == ""} { set gafaire "IdenGlob" set g "IdenGlob" set g2 "ConsGlob" # if {! [llength [set ConsRef($gafaire)]]} {break} set ngrp [llength [set Comp($g)]] set nori [llength [set ConsRef($g)]] set ecar [expr {$nori - [set LeCmptr($g)]}] set pgr [lindex [lindex [set Comp($g)] 0] 0] set emg $nel set dmg [expr {$nori - $nel}] set ncons 0 if {$dmg < 0 && [info exists ConsRef($g2)]} { set lori [set ConsRef($g2)] foreach e $lel { if {[lsearch $lori $e] != -1} {incr ncons} } } puts "[format $fmt $ident-$g $nori $ngrp $ecar $pgr $emg $dmg $top $ncons]" } # EnleveCluster [set Tres($top)] # ConsGlob # ======== set g $nomgrp if {$nomgrp == ""} {set g "ConsGlob"} set ngrp [llength [set Comp($g)]] set nori [llength [set ConsRef($g)]] set ecar [expr {$nori - [set LeCmptr($g)]}] set pgr [lindex [lindex [set Comp($g)] 0] 0] set emg $ne2 set dmg [expr {$nori - $ne2}] set ncons 0 puts "[format $fmt $ident-$g $nori $ngrp $ecar $pgr $emg $dmg $top $ncons]" return } proc LanceTestsBali {Lres args} { global NId NCo NTt NConsDansId NConsDansCo NConsDansTt PABCourant LNDG LConsSA set NId 0 ; set NCo 0 ; set NTt 0 set NConsDansId 0 set NConsDansCo 0 set NConsDansTt 0 set method "dpc" set order "decreasing" set nomgrp "" set relatif 1 foreach {k v} $args { switch $k { "-nomgrp" { if {$v eq {}} {set $v ""} set nomgrp $v } "-method" {set method $v} "-order" {set order $v} "-relatif" {set relatif $v} } } # lecture clusters. # Calcule norme moyenne de chaque cluster # Gres : Tab indexe par le residu, donne le groupe # Tres : Tab indexe par le groupe, donne les resius set i 1 set vtot 0 foreach c $Lres { set ngr "gr$i" set Lv {} set mv 0. set nval 0 foreach ind $c { set listev [lrange $ind 1 end] set v [lindex $ind 0] lappend Lv $v set Gres($v) $ngr foreach e $listev { set mv [expr {$mv + $e}] incr nval incr vtot } } if {! $nval} {continue} set Tres($ngr) $Lv set Mnorm [expr {$mv/$nval}] set TNormI($ngr) $Mnorm set TNormV($Mnorm) $ngr incr i } # cherche cluster avec + grde norme # nel : nbr d'element de ce cluster set Lclus [lsort -$order -real [array names TNormV]] puts "[join $method +] : $vtot [llength $Lclus]" if {$Lclus == {}} { puts "\t===> 1 cluster vide !!" return 0 } if {[llength $Lclus] == 1} { puts "\t==> Only ONE cluster !" return 0 } set top [set TNormV([lindex $Lclus 0])] set nel [llength [set Tres($top)]] set lel [set Tres($top)] if {[llength $Lclus] <= 1} { set dos -1 set ne2 0 set le2 {} } else { set dos [set TNormV([lindex $Lclus 1])] set ne2 [llength [set Tres($dos)]] set le2 [set Tres($dos)] } set NId $nel set NCo $ne2 set NTt [expr {$nel + $ne2}] set NConsDansId 0 set NConsDansCo 0 set NConsDansTt 0 foreach e $lel { if {$e in $LConsSA} { incr NConsDansId incr NConsDansTt } } foreach e $le2 { if {$e in $LConsSA} { incr NConsDansCo incr NConsDansTt } } return 1 } proc LanceTestsPDB {Lres args} { global NId NCo NConsDansId NConsDansCo PABCourant LNDG ConsRef set method "dpc" set order "decreasing" set nomgrp "" set relatif 1 foreach {k v} $args { switch $k { "-nomgrp" { if {$v eq {}} {set $v ""} set nomgrp $v } "-method" {set method $v} "-order" {set order $v} "-relatif" {set relatif $v} } } set IdG 0 if {$nomgrp ne ""} { set IdG [lsearch $LNDG $nomgrp] incr IdG 2 } # lecture clusters. # Calcule norme moyenne de chaque cluster # Gres : Tab indexe par le residu, donne le groupe # Tres : Tab indexe par le groupe, donne les resius set i 1 foreach c $Lres { set ngr "gr$i" set Lv {} set mv 0. set nval 0 foreach ind $c { set listev [lrange $ind 1 end] set v [lindex $ind 0] lappend Lv $v set Gres($v) $ngr foreach e $listev { set mv [expr {$mv + $e}] incr nval } } if {! $nval} {continue} set Tres($ngr) $Lv set Mnorm [expr {$mv/$nval}] set TNormI($ngr) $Mnorm set TNormV($Mnorm) $ngr incr i } # cherche cluster avec + grde norme # nel : nbr d'element de ce cluster set Lclus [lsort -$order -real [array names TNormV]] if {$Lclus == {}} { puts "\t===> 1 cluster vide !!" return 0 } if {[llength $Lclus] == 1} { puts "\t==> Only ONE cluster !" return 0 } set top [set TNormV([lindex $Lclus 0])] set nel [llength [set Tres($top)]] set lel [set Tres($top)] if {[llength $Lclus] <= 1} { set dos -1 set ne2 0 set le2 {} } else { set dos [set TNormV([lindex $Lclus 1])] set ne2 [llength [set Tres($dos)]] set le2 [set Tres($dos)] } set LConsSA {} if {[info exists ConsRef($PABCourant,sa)]} { set LConsSA [set ConsRef($PABCourant,sa)] } set LConsNA {} if {[info exists ConsRef($PABCourant,nsa)]} { set LConsNA [set ConsRef($PABCourant,nsa)] } incr NId $nel incr NCo $ne2 if {[land $lel $le2] != {}} { puts "PROBLEME !" puts "Residues in both indetity and Conservation !" return 0 } foreach {a n1 n2} $LConsSA { if {$relatif} { set x1 [CorrespondanceSeqGen $PABCourant $n1] set x2 [CorrespondanceSeqGen $PABCourant $n2] } else { set x1 $n1 set x2 $n2 } if {$x1 eq "" || $x2 eq ""} { puts "$PABCourant $n1 $n2 $x1 $x2" } for {set i $x1} {$i <= $x2} {incr i} { if {$i in $lel} {incr NConsDansId} if {$i in $le2} {incr NConsDansCo} } } return 1 } proc LanceTestsPfam {Lres args} { global NId NCo NTt NConsDansId NConsDansCo NConsDansTt PABCourant LNDG set NId 0 ; set NCo 0 ; set NTt 0 set NConsDansId 0 set NConsDansCo 0 set NConsDansTt 0 set method "dpc" set order "decreasing" set nomgrp "" set relatif 1 foreach {k v} $args { switch $k { "-nomgrp" { if {$v eq {}} {set $v ""} set nomgrp $v } "-method" {set method $v} "-order" {set order $v} "-relatif" {set relatif $v} } } # lecture clusters. # Calcule norme moyenne de chaque cluster # Gres : Tab indexe par le residu, donne le groupe # Tres : Tab indexe par le groupe, donne les resius set i 1 set vtot 0 foreach c $Lres { set ngr "gr$i" set Lv {} set mv 0. set nval 0 foreach ind $c { set listev [lrange $ind 1 end] set v [lindex $ind 0] lappend Lv $v set Gres($v) $ngr foreach e $listev { set mv [expr {$mv + $e}] incr nval incr vtot } } if {! $nval} {continue} set Tres($ngr) $Lv set Mnorm [expr {$mv/$nval}] set TNormI($ngr) $Mnorm set TNormV($Mnorm) $ngr incr i } # cherche cluster avec + grde norme # nel : nbr d'element de ce cluster set Lclus [lsort -$order -real [array names TNormV]] puts "[join $method +] : $vtot [llength $Lclus]" if {$Lclus == {}} { puts "\t===> 1 cluster vide !!" return 0 } if {[llength $Lclus] == 1} { puts "\t==> Only ONE cluster !" return 0 } set top [set TNormV([lindex $Lclus 0])] set nel [llength [set Tres($top)]] set lel [set Tres($top)] if {[llength $Lclus] <= 1} { set dos -1 set ne2 0 set le2 {} } else { set dos [set TNormV([lindex $Lclus 1])] set ne2 [llength [set Tres($dos)]] set le2 [set Tres($dos)] } set LConsSA {} foreach {a x1 x2} [set ConsRef(${PABCourant},sa)] { for {set i $x1} {$i <= $x2} {incr i} { lappend LConsSA $i } } if {0 && $method eq "Norm"} { set lv [lsort -real -decreasing -index 1 $::ListeScore] puts "[join [lrange $lv 0 20] \n]" puts "LConsSA $LConsSA" puts "lel $lel" } set LConsNA {} foreach {a x1 x2} [set ConsRef(${PABCourant},nsa)] { for {set i $x1} {$i <= $x2} {incr i} { lappend LConsNA $i } } if {[land $lel $le2] != {}} { puts "PROBLEME !" puts "Residues in both indetity and Conservation !" return 0 } set NId $nel set NCo $ne2 #set NTt [expr {$nel + $ne2}] set NTt $nel set NConsDansId 0 set NConsDansCo 0 set NConsDansTt 0 #puts "lel $lel" #puts "lcsa $LConsSA" foreach e $lel { if {$e in $LConsSA} { incr NConsDansId incr NConsDansTt } if {$e in $LConsNA} { incr NConsDansCo incr NConsDansTt } } if {0} { foreach e $le2 { if {$e in $LConsNA} {incr NConsDansCo} } } return 1 } proc LanceToutPourUn {Nom {Type ""}} { set Fichier "[RepertoireDuGenome]/SortieProg" AppendAuFichier $Fichier "$Nom $Type" if {[regexp -nocase "nuc" $Type]} { CreateRetinalTargetsPourUnNuc $Nom InformePourUnNuc $Nom } if {[regexp -nocase "prot" $Type]} { CreateRetinalTargetsPourUneProt $Nom InformePourUneProt $Nom } RetrievePourUn $Nom } proc LanceVerifLongSqMSF {} { foreach pab [ListeDesPABs] { puts "traite $pab" set file [file join [RepertoireDuGenome] "msf_nature" "$pab"] VerifLongSqMSF $file } return 1 } proc LanceurCluspack {File {Type coordinates} {Model dpc} {Method kmeans} {Dist 0.001} {NbGr -1} args} { # OBLIGATOIRE : # ------------- # -dt=coordinates|alignment|distances|similarities # -nbc=secator|dpc|aic|bic|number number=3 pour ordali # -cm=ward|kmeans|bionj|mm # OPTIONS : # --------- # -fd=x : filtering_distance # -wc : write coordinates" # -dt1 ou dt2 : density1 ou -density2 # NOTE : mixturemodel+aic -> pas de dist ! if {$Dist ne ""} {set filter "-fd=$Dist"} {set filter ""} if {$Model eq "secator" && $Method eq "kmeans"} {set Method "ward"} if {$Model eq "dpc" && $NbGr > -1} {set Model $NbGr} set Commande "[CluspackExe] $File -dt=$Type -nbc=$Model -cm=$Method $filter $args" catch {eval exec $Commande} return } proc LanceurGOAnno {Nom} { set RepertoireGOAnno "[RepertoireDuGenome]/GeneOntology" if {! [file exists $RepertoireGOAnno]} {file mkdir $RepertoireGOAnno} GOAnalyse "" "[RepertoireDuGenome]/annotation/$Nom.msf" "[RepertoireDuGenome]/annotation/$Nom.clust" "[RepertoireDuGenome]/GeneOntology/$Nom.xml" $Nom set Fichier1 "[RepertoireDuGenome]/annotation/$Nom.msf" set Fichier2 "[RepertoireDuGenome]/annotation/$Nom.clust" file delete -force $Fichier1 file delete -force $Fichier2 } proc LanceurMacsim {Fichier} { set pab [file rootname $Fichier] set Fichier2 "$pab.blocks" set Fichier3 "tmp_macsim" set Commande "/home/julie/macsim_clustering/macsim_new.tcsh $Fichier $Fichier2 > $Fichier3" eval exec $Commande if {[file exists $Fichier3]} { set LLignes [LesLignesDuFichier $Fichier3] foreach l $LLignes { if {! [regexp "GCG" $l]} {continue} set nb [string range [lindex $l 3] 1 7] foreach file [glob -nocomplain $nb*] { file delete -force $file } file delete -force $Fichier.tfa file delete -force $Fichier3 } } return 1 } proc LargeurDe {w} { global Memo return [set Memo(LargeurDe$w)] } proc LastColorPfamInMacsims {FileMacsimsXml} { package require tdom set FileMacsimsXml [TheTrueMacsimsFile $FileMacsimsXml] set LesColor {} set fh [open $FileMacsimsXml "r"] dom parse -channel $fh doc close $fh $doc documentElement root foreach seq [$root selectNodes "//sequence"] { foreach noeud_PFAM [$seq selectNodes ".//fitem\[ftype=\"PFAM-A\"\]"] { lappend LesColor [$noeud_PFAM selectNodes "string(./fcolor)"] } } if {$LesColor == {} } { $doc delete return "" } set LesColor [lsort -unique -integer $LesColor] set LastColor [lindex $LesColor end] $doc delete return $LastColor } proc LastVersionAffy {} { return "na34" } proc LaunchOrApplyDrawBlast {w} { set FichierBlast [AskOptionsDeDrawBlast ask $w FichierBlast ] set BanqueId [AskOptionsDeDrawBlast ask $w BanqueId ] set NbSubjectMax [AskOptionsDeDrawBlast ask $w NbSubjectMax ] set ExpectMax [AskOptionsDeDrawBlast ask $w ExpectMax ] set IdMin [AskOptionsDeDrawBlast ask $w IdMin ] set LargeurFenetre [AskOptionsDeDrawBlast ask $w LargeurFenetre ] set FrameCanvaMosaic [AskOptionsDeDrawBlast ask $w FrameCanvaMosaic ] set HauteurFenetreMosaic [AskOptionsDeDrawBlast ask $w HauteurFenetreMosaic ] set FrameCanvaMapping [AskOptionsDeDrawBlast ask $w FrameCanvaMapping ] set HauteurFenetreMapping [AskOptionsDeDrawBlast ask $w HauteurFenetreMapping ] set TailleMaxDUneRegionNonAlignee [AskOptionsDeDrawBlast ask $w TailleMaxDUneRegionNonAlignee] if {![file exists $FichierBlast]} {return} if {![AskBlast $FichierBlast Exists]} {AskBlast unset} DrawMosaic $FichierBlast $ExpectMax $NbSubjectMax $IdMin "" $LargeurFenetre $HauteurFenetreMosaic $FrameCanvaMosaic $w DrawMapping $FichierBlast $BanqueId $ExpectMax $IdMin $TailleMaxDUneRegionNonAlignee $LargeurFenetre $HauteurFenetreMapping $FrameCanvaMapping $w return } proc LaunchPfamScan {n s} { global Rpfm set seq ">$n $s " set Rpfm($n) [PfamScanWebService -seq $seq] return } proc LaunchPipesForGroups {putInParaT putOrthoT {debut ""} {fin ""}} { global RepertoireDuGenome upvar $putInParaT putInPara upvar $putOrthoT putOrtho set listePAB [ListeDesPABs2] if {$debut==""} {set debut 0} if {$fin==""} {set fin [llength $listePAB]} #melange ortho/para pour un meme alignement (version pour AnalyseBlast) array set PABPourPipe {} foreach PAB $listePAB { set infosPara {} set infosOrtho {} #if {[info exists putInPara($PAB)]} {set infosPara $putInPara($PAB)} if {[info exists putOrtho($PAB)]} {set infosOrtho $putOrtho($PAB)} if {$infosPara=="" && $infosOrtho==""} {continue} set PABPourPipe($PAB) [concat $infosPara $infosOrtho] } #preparatifs pour les alignements via pipealign ################################################ #creation du repertoiretfasdescopainsAdd if {![file exists "$RepertoireDuGenome/tfasdescopainsAdd/"]} { file mkdir "$RepertoireDuGenome/tfasdescopainsAdd/" } #creation de fastas avec toutes les sequences associées au maitre du groupe #dans le repertoire $RepertoireDuGenome/tfasdescopainsAdd foreach {PABs val} [array get PABPourPipe] { set filename "$RepertoireDuGenome/tfasdescopainsAdd/$PABs" set FICOUT [open $filename "w"] foreach PAB $val { set FICIN [open "$RepertoireDuGenome/prottfa/$PAB" "r"] while {[gets $FICIN line]!=-1} { puts $FICOUT $line } close $FICIN } close $FICOUT puts "create $RepertoireDuGenome/tfasdescopainsAdd/$PABs" } #cree le repertoire pour feinter le pipe #(il se fera sur les seqs absentes du pas touche seulement) if {![file exists "$RepertoireDuGenome/pastouche/"]} { file mkdir "$RepertoireDuGenome/pastouche/" } #creation des fichiers pas touche for {set i $debut} {$i<$fin} {incr i} { set PAB [lindex $listePAB $i] if {![info exists PABPourPipe($PAB)] && ![file exists "$RepertoireDuGenome/pastouche/$PAB"]} { set FICOUT [open "$RepertoireDuGenome/pastouche/$PAB" "w"] close $FICOUT puts "create $PAB" } if {[info exists PABPourPipe($PAB)] && [file exists "$RepertoireDuGenome/pastouche/$PAB"]} { file delete "$RepertoireDuGenome/pastouche/$PAB" puts "delete $PAB" } } #lancement des alignements ############################# ############### ## rq : formatdb pour la banque avec option -o T ## sinon marche pas # Charge les options par defaut LesDefautsDuPipe # Parametre les options #LesDefautsDuPipe "File,file" $filename LesDefautsDuPipe "Etapes,blast" 0 LesDefautsDuPipe "Blast,d" "banques/ORTHObis" LesDefautsDuPipe "Filter,maxseq" 200 LesDefautsDuPipe "Filter,expect" 0.001 #LesDefautsDuPipe "Project,project" "addSeq" # Lance le pipe silencieusement global EspionneNon if {[info exists EspionneNon]} { set ancienEspionneNon $EspionneNon } else {set ancienEspionneNon 0} set EspionneNon 1 if {[catch {PipeGrid} Message]} { set EspionneNon $ancienEspionneNon Espionne "Error from pipealign. Message follows \n$Message" } set EspionneNon $ancienEspionneNon } proc LaunchPipesForInParas {tableT {debut ""} {fin ""}} { global RepertoireDuGenome upvar $tableT table set listePAB [ListeDesPABs2] if {$debut==""} {set debut 0} if {$fin==""} {set fin [llength $listePAB]} #melange ortho/para pour un meme alignement (version pour AnalyseBlast) array set PABPourPipe {} foreach {key val} [array get table] { set lists [split $key ","] set laListe [split [lindex $lists 0] " "] foreach PAB $laListe { if {[info exists PABPourPipe($PAB)]} {continue} set PABPourPipe($PAB) $laListe } } #preparatifs pour les alignements via pipealign ################################################ #cree le repertoire pour feinter le pipe #(il se fera sur les seqs absentes du pas touche seulement) if {![file exists "$RepertoireDuGenome/pastouche/"]} { file mkdir "$RepertoireDuGenome/pastouche/" } #creation des fichiers pas touche for {set i $debut} {$i<$fin} {incr i} { set PAB [lindex $listePAB $i] if {![info exists PABPourPipe($PAB)] && ![file exists "$RepertoireDuGenome/pastouche/$PAB"]} { set FICOUT [open "$RepertoireDuGenome/pastouche/$PAB" "w"] close $FICOUT puts "create $PAB" } if {[info exists PABPourPipe($PAB)] && [file exists "$RepertoireDuGenome/pastouche/$PAB"]} { file delete "$RepertoireDuGenome/pastouche/$PAB" puts "delete $PAB" } } #lancement des alignements ############################# ############### ## rq : formatdb pour la banque avec option -o T ## sinon marche pas # Charge les options par defaut LesDefautsDuPipe # Parametre les options #LesDefautsDuPipe "File,file" $filename LesDefautsDuPipe "Etapes,blast" 0 LesDefautsDuPipe "Blast,d" "banques/ORTHObis" LesDefautsDuPipe "Filter,maxseq" 200 LesDefautsDuPipe "Filter,expect" 1 #LesDefautsDuPipe "Project,project" "addSeq" # Lance le pipe silencieusement global EspionneNon if {[info exists EspionneNon]} { set ancienEspionneNon $EspionneNon } else {set ancienEspionneNon 0} set EspionneNon 1 if {[catch {PipeGrid} Message]} { set EspionneNon $ancienEspionneNon Espionne "Error from pipealign. Message follows \n$Message" } set EspionneNon $ancienEspionneNon } proc LaunchPipesForSpecificList {{laListe ""} {debut ""} {fin ""}} { global RepertoireDuGenome set listePAB [ListeDesPABs2] if {$debut==""} {set debut 0} if {$fin==""} {set fin [llength $listePAB]} array set PABPourPipe {} if {$laListe==""} { set PABPourPipe(XTRO01770) [list "XTRO05067" ] } #preparatifs pour les alignements via pipealign ################################################ #creation du repertoiretfasdescopainsAdd if {![file exists "$RepertoireDuGenome/tfasdescopainsAdd/"]} { file mkdir "$RepertoireDuGenome/tfasdescopainsAdd/" } #creation de fastas avec toutes les sequences associées au maitre du groupe #dans le repertoire $RepertoireDuGenome/tfasdescopainsAdd foreach {PABs val} [array get PABPourPipe] { set filename "$RepertoireDuGenome/tfasdescopainsAdd/$PABs" set FICOUT [open $filename "w"] foreach PAB $val { set FICIN [open "$RepertoireDuGenome/prottfa/$PAB" "r"] while {[gets $FICIN line]!=-1} { puts $FICOUT $line } close $FICIN } close $FICOUT puts "create $RepertoireDuGenome/tfasdescopainsAdd/$PABs" } #cree le repertoire pour feinter le pipe #(il se fera sur les seqs absentes du pas touche seulement) if {![file exists "$RepertoireDuGenome/pastouche/"]} { file mkdir "$RepertoireDuGenome/pastouche/" } #creation des fichiers pas touche for {set i $debut} {$i<$fin} {incr i} { set PAB [lindex $listePAB $i] if {![info exists PABPourPipe($PAB)] && ![file exists "$RepertoireDuGenome/pastouche/$PAB"]} { set FICOUT [open "$RepertoireDuGenome/pastouche/$PAB" "w"] close $FICOUT puts "create $PAB" } if {[info exists PABPourPipe($PAB)] && [file exists "$RepertoireDuGenome/pastouche/$PAB"]} { file delete "$RepertoireDuGenome/pastouche/$PAB" puts "delete $PAB" } } #lancement des alignements ############################# ############### ## rq : formatdb pour la banque avec option -o T ## sinon marche pas # Charge les options par defaut LesDefautsDuPipe # Parametre les options #LesDefautsDuPipe "File,file" $filename LesDefautsDuPipe "Etapes,blast" 0 LesDefautsDuPipe "Blast,d" "banques/ORTHObis" LesDefautsDuPipe "Filter,maxseq" 200 LesDefautsDuPipe "Filter,expect" 0.001 #LesDefautsDuPipe "Project,project" "addSeq" # Lance le pipe silencieusement global EspionneNon if {[info exists EspionneNon]} { set ancienEspionneNon $EspionneNon } else {set ancienEspionneNon 0} set EspionneNon 1 if {[catch {PipeGrid} Message]} { set EspionneNon $ancienEspionneNon Espionne "Error from pipealign. Message follows \n$Message" } set EspionneNon $ancienEspionneNon } proc Lav2Maf {BlastZFile TFAFile1 TFAFile2 MafFile} { ### Execution du programme lav2maf ### # lav2maf transforme un fichier blastz en un fichier maf # # TFAFile1 et TFAFile2 sont les fichier de seq qui ont ete utilises pour lancer blastz # if {![file exists $BlastZFile] || ![file exists $TFAFile1] || ![file exists $TFAFile2]} { Espionne "At least one lav2maf input file does not exists" return } #set Commande "exec [PATH lav2maf] $BlastZFile $TFAFile1 $TFAFile2 > $MafFile" set Commande "exec lav2maf $BlastZFile $TFAFile1 $TFAFile2 > $MafFile" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $MafFile } proc LbgiUrl {} { set LbgiUrl "http://www.lbgi.fr" return $LbgiUrl } proc LeBilanTriePourJean {{Fichier ""}} { global RepertoireDuGenome set RepBilan "$RepertoireDuGenome/bilan_xhda" if {! [regexp "/" $Fichier]} { set Fichier "$RepBilan/$Fichier" } set Fichier [LectureBilanHDACroises LesFamilles LesOrgCibles Bilan $Fichier] if {$Fichier=={}} { return "" } set LesXs $LesFamilles set LesYs $LesOrgCibles set Ordre "SampledBAE" set LesGenoTries [LesGenomesDansLeBonOrdre $Ordre] foreach Y $LesYs { set JExiste($Y) 1 } foreach G $LesGenoTries { set Y [string toupper [Glossaire $G Court]] if { ! [info exists JExiste($Y)]} { continue } lappend LesYsTries $Y } set Titre "X-HDA sorted by Organisms ($Ordre)" set Fichier [File tail $Fichier] return [DessineBilanHDACroises $LesXs $LesYsTries Bilan $Fichier] } proc LeBonOrdrePourLesSignaux {{NouvelOrdre ""} {ASauver ""}} { global LeBonOrdrePourLesSignaux global RepertoireDuGenome set FichierOrdreDesSignaux "$RepertoireDuGenome/signaux/ordredessignaux" if {$NouvelOrdre!=""} { set LeBonOrdrePourLesSignaux $NouvelOrdre } if {$ASauver=="ASauver"} { SauveLesLignes $LeBonOrdrePourLesSignaux dans $FichierOrdreDesSignaux } if {[info exists LeBonOrdrePourLesSignaux]} { return $LeBonOrdrePourLesSignaux } if { ! [file exists $FichierOrdreDesSignaux]} { return {} } set LeBonOrdrePourLesSignaux [LesLignesDuFichier $FichierOrdreDesSignaux] return $LeBonOrdrePourLesSignaux } proc LeChampDesLignesEMBL {LesLignes Champ} { set Sortie {} foreach Ligne $LesLignes { if {[regexp "^$Champ" $Ligne]} { lappend Sortie $Ligne } } return $Sortie } proc LeChampsDeLaPageGenBank {PageGenBank NOMDUCHAMPS} { global RepertoireDuGenome set LaPageGenBank [split $PageGenBank "\n"] set SuisJeSurLeBonChamps 0 set LAiJeVu 0 set LesInfosDuChamps {} foreach Ligne $LaPageGenBank { if {!$SuisJeSurLeBonChamps && $LAiJeVu} {break} if { $SuisJeSurLeBonChamps == 1 && [regexp " " $Ligne]} { lappend LesInfosDuChamps " $Ligne" } else { set SuisJeSurLeBonChamps 0 } if { [regexp "$NOMDUCHAMPS " $Ligne] && $LAiJeVu == 0} { lappend LesInfosDuChamps $Ligne set LAiJeVu 1 set SuisJeSurLeBonChamps 1 } } return "$LesInfosDuChamps" } proc LeChampsDeLaPageProteine {PageProteine NOMDUCHAMPS} { global RepertoireDuGenome set LaPageProteine [split $PageProteine "\n"] set SuisJeSurLeBonChamps 0 set LesInfosDuChamps {} foreach Ligne $LaPageProteine { if {![regexp "^$NOMDUCHAMPS " $Ligne] } {continue} lappend LesInfosDuChamps $Ligne } return $LesInfosDuChamps } proc LeClusterXHda {Query {Quoi ""} {FichierCluster ""}} { global RepertoireDuGenome global LeClusterXHda if {$Quoi==""} { set Quoi "LesMembres" } if {[info exists LeClusterXHda(Query)] && [set LeClusterXHda(Query)]==$Query} { if {[info exists LeClusterXHda($Quoi)]} { return [set LeClusterXHda($Quoi)] } } if {$FichierCluster==""} { set LesFDPC [glob -nocomplain "$RepertoireDuGenome/xhda/*.dpc"] set FichierCluster [ChoixParmi $LesFDPC] if {$FichierCluster==""} { return {} } } set OnVeutToutLeMonde 0 set OnVeutToutLeMondeAvecGroupe 0 set OutQuery 0 if {$Query=="OnVeutToutLeMonde"} { set OnVeutToutLeMonde 1 } if {$Query=="OnVeutToutLeMondeAvecGroupe"} { set OnVeutToutLeMondeAvecGroupe 1 } set LeGroupe {} set OnLeTient 0 set Numero "" foreach Ligne [LesLignesDuFichier $FichierCluster] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster [0-9]+|^unclustered seq} $Ligne]} { if {$OnLeTient} { break } set Numero "" scan $Ligne "%s %s" Groupe Numero set Taille [IntegerApres "size=" dans $Ligne] if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 } set LeGroupe {} if {$Query==$Numero} { set OnLeTient 1 } continue } scan $Ligne "%s" Access if {[string toupper $Access]==[string toupper $Query]} { set OnLeTient 1 if {$OutQuery} { continue } } lappend ToutLeMondeAvecGroupe "$Access $Numero" lappend ToutLeMonde $Access lappend LeGroupe $Access } if { ! $OnLeTient } { set LeGroupe {} } set LeClusterXHda(Numero) $Numero set LeClusterXHda(LesMembres) $LeGroupe set LeClusterXHda(Taille) $Taille set LeClusterXHda(Query) $Query if {$Quoi=="Numero" } { return $Numero } if {$Quoi=="Taille" } { return $Taille } if {$OnVeutToutLeMonde} { return $ToutLeMonde } if {$OnVeutToutLeMondeAvecGroupe} { return $ToutLeMondeAvecGroupe } if {$Groupe=="unclustered"} { return $ToutLeMonde } else { return $LeGroupe } } proc LeContig {IdDuContig} { if {[regexp {_[0-9]*} $IdDuContig]} { regexp -nocase {([a-z0-9]*):([0-9a-z]*)_([0-9]*)} $IdDuContig tmp Chromosome Access Fragment } else { regexp -nocase {([a-z0-9]*):([0-9a-z]*)} $IdDuContig tmp Chromosome Access set Fragment "" } set NbFragment 0 if {$Fragment != ""} {set NbFragment [Base10 $Fragment]} return [list $Chromosome $Access $Fragment $NbFragment] } proc LeDecompte {{Quoi ""}} { set LeDecompte {} set CumulMutants 0 set CumulVPPCRs 0 foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] set LesMutants [LesMutantsDe $Nom] set NbMutants [llength $LesMutants] set LesVPPCRs [LesVirtualPPCRsDuPGS $Nom] foreach VPPCR $LesVPPCRs { if {[info exists DejaVu($VPPCR)]} { continue } incr CumulVPPCRs } set NbVPPCRs [llength $LesVPPCRs] set SpineTask [SpineTask $Nom] set Owner [ExtraitInfo $Nom "Owner"] incr CumulMutants $NbMutants set Def [DefinitionRapide $Nom] lappend LeDecompte "" set Ligne [format "%8s %-15s %-4s %2d %2d %-30s %s" $Nom [string range $Alias 0 15] $SpineTask $NbMutants $NbVPPCRs $Owner $Def] lappend LeDecompte $Ligne lappend LeDecompteDuOwner($Owner) $Ligne } lappend LeDecompte "" lappend LeDecompte " $CumulMutants Sauvages et mutants" lappend LeDecompte " $CumulVPPCRs produits PCR" if {[regexp "ParOwner" $Quoi]} { regsub "ParOwner" $Quoi "" Quoi set LaPageOwner {} foreach Owner [lsort [array names LeDecompteDuOwner]] { LConcat LaPageOwner $LeDecompteDuOwner($Owner) } set Decompte [join $LaPageOwner "\n"] } else { set Decompte [join $LeDecompte "\n"] } if {$Quoi=="GetText"} { return $Decompte } if {$Quoi=="Show"} { return [AfficheVariable $Decompte "" "XbgsSummary"] } return $LeDecompte } proc LeDescriptif {Access {Nom ""} {Texte ""}} { global LesDescriptifs global NomDesDescriptifsEnMemoire Wup "if Texte isn't empty it returns the old value and sets the new one" if {$Texte!=""} { if {[info exists LesDescriptifs($Access)]} { set Old [set LesDescriptifs($Access)] set LesDescriptifs($Access) $Texte set LesDescriptifs([string toupper $Access]) $Texte return $Old } } if {[info exists LesDescriptifs($Access)]} { return [set LesDescriptifs($Access)] } set FichierDescriptif "[RepertoireDuGenome]/descriptifs/$Nom" if {$Nom!="" && [file exists $FichierDescriptif]} { if {[info exists NomDesDescriptifsEnMemoire] && $NomDesDescriptifsEnMemoire==$Nom} { return "$Access (no description available in descriptifs/$Nom)" } set LesDescriptifs(${Nom}_isloaded) $Nom if {[info exists LesDescriptifs]} { unset LesDescriptifs } set LeDescDuPAB [LeDescriptifDuPAB $Nom] set LesDescriptifs($Nom) $LeDescDuPAB foreach Ligne [LesLignesDuFichier $FichierDescriptif] { set iEgal [string first "=" $Ligne] set AccessLu [string range $Ligne 0 [expr $iEgal -1]] set Descript [string range $Ligne [expr $iEgal +1] end] set LesDescriptifs($AccessLu) $Descript set LesDescriptifs([string toupper $AccessLu]) $Descript set Id [StringApres "ID:" dans $Ligne] set ID [string toupper $Id] regsub $AccessLu $Descript $Id Descript if { ! [info exists LesDescriptifs($Id)] } { set LesDescriptifs($Id) $Descript } if { ! [info exists LesDescriptifs($ID)] } { set LesDescriptifs($ID) $Descript } } set NomDesDescriptifsEnMemoire $Nom if {$Texte!=""} { #rR attention le descriptif du Id n'est pas mis à jour !!!!!!!!!!! if {[info exists LesDescriptifs($Access)]} { set Old [set LesDescriptifs($Access)] set LesDescriptifs($Access) $Texte set LesDescriptifs([string toupper $Access]) $Texte return $Old } } if {[info exists LesDescriptifs($Access)]} { return [set LesDescriptifs($Access)] } if {$Nom==$Access} { return [LeDescriptifDuPAB $Nom] } return "$Access (no description)" } } proc LeDescriptifDuPAB {Nom} { set OS [NotreOS] set OC [NotreOC] set OX [NotreOX] set DE [Definition $Nom] set GN [NomDeGene $Nom] set ID $Nom set AC $Nom set Descriptif "$Nom OS:$OS GN:$GN DE:$DE ID:$ID AC:$AC OC:$OC OX:$OX" return $Descriptif } proc LeFichierDesSignaux {{Choix ""}} { set Choix [regexp -nocase {^Cho} $Choix] if {$Choix} { return [lindex [LesFichiersDeType "Signaux"] 0] } set Fichier "[RepertoireDuGenome]/signaux/signaux.tfa" if {[file exists $Fichier]} { return $Fichier } set Fichier "/genomics/link/ProGS/signaux/signaux.tfa" if {[file exists $Fichier]} { return $Fichier } FaireLire "I cna't find the signel file ... Please browse for it." return [ButineArborescence "All" "./"] } proc LeFichierSDT_ActiChip {{FichierSDT ""}} { Wup "Permet de faire un fichier d annotation lisible pour le programme Acuity Axon" Wup "Ce type de fichier a pour extension .sdt et est majoritairement separe par des tabulations" Wup "Le .sdt est un fichier qui permet d ajouter des annotations" #Attention il faut une reference unique qui sera toujours utilise (ex: id) #On peut prendre l AccessGscope #L ID unique doit etre en premiere position if { $FichierSDT==""} { set FichierSDT "[RepertoireDuGenome]/GalFile/ActiChip2.1/ActiChip2.1_juillet05.sdt" } #1- On recupere la liste des ID d oligos (ex: ACT0001_Oligo12_BC000445) set LesPABs [InterrogeLeGalFile_ActiChip LesIDs] #Espionne "$LesPABs" #Espionne "Taille [llength $LesPABs]" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set RepNuctfa "[RepertoireDuGenome]/nuctfa" #2- Les donnees ou nom des champs utilises set Header [list "ID" "Gscope_Access" "Protein_Access" "Protein_Definition" "Protein_size" "Genbank_Access" "Genbank_size" "Chromosome" "CytoBand" "RefSeq_Id" "RefSeq_Definition" "Uniseq_Access" "Unigene_Id" "Unigene_Definition" "Tm" "GC" "Begin" "End" "RefSeq_NbDetected" "RefSeq_AccDetected" "Unigene_NbDetected" "Unigene_AccDetected" "GO_Function" "GO_Process" "GO_Component"] AppendAuFichier $FichierSDT [join "$Header" "\t"] #3- Recuperation des informations foreach NomOligo $LesPABs { if {$NomOligo==""} {continue} #3-1 Les repertoires de design set DirOligo1 "[RepertoireDuGenome]/Probes/RefSeqBLAST3" set DirOligo2 "[RepertoireDuGenome]/Probes/UnigeneBLAST3" set OtherDirOligo1 "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" set OtherDirOligo2 "[RepertoireDuGenome]/Probes/NewUnigeneBLAST3" set PAB "" #3-2 On disseque le NomOligo = PAB_NumeroOligo_AccessDuDesign if {[regexp {(ACT[0-9]{4})_Oligo[0-9]+} $NomOligo tmp PAB]} { if {$PAB=="" || ! [regexp "^ACT" $PAB]} { set PAB "" continue } } elseif {[regexp {(NM[0-9]+)_Oligo[0-9]+} $NomOligo tmp PAB]} { if {$PAB=="" || ! [regexp "^NM" $PAB]} { set PAB "" continue } } #3-3 On test le repertoire du design # On psotionne les fichier du design if {! [file exists "$DirOligo1/${PAB}.masked"]} { set DirOligo1 $OtherDirOligo1 set DirOligo2 $OtherDirOligo2 } if {! [file exists "$DirOligo1/${PAB}.masked"]} { continue } #3-3-1 Fichier pour RefSeq set FichierOligo1 "$DirOligo1/${PAB}.oligo" set FichierOligo1 "$DirOligo1/${PAB}.selection" set FichierOligo1 "$DirOligo1/${PAB}.croisee" if { [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo Taille]==""} { set FichierOligo1 "$DirOligo1/${PAB}.selection" if {[InterrogeInfoDeLOligo $FichierOligo1 $NomOligo Taille]==""} { set FichierOligo1 "$DirOligo1/${PAB}.oligo" } } #3-3-2 Fichier pour Unigene set FichierOligo2 "$DirOligo2/${PAB}.oligo" #set FichierOligo2 "$DirOligo2/${PAB}.selection" set Gscope_Access "" set ID "" set Protein_Access "" set Definition "" set Protein_size "" set Genbank_Access "" set Genbank_size "" set Chromosome "" set CytoBand "" set RefSeq_Access "" set RefSeq_Definition "" set Uniseq_Access "" set Unigene_Id "" set Unigene_Definition "" set Tm "" set GC "" set Begin "" set End "" set RefSeq_NbDetected "" set RefSeq_AccDetected "" set Unigene_NbDetected "" set Unigene_AccDetected "" set LesInfos "" set GO_Function "" set GO_Process "" set GO_Component "" set Gscope_Access $PAB #3-4 Les donnnees des oligos #3-4-1 Access utilise lors du design # un mRNA ou sequence originale (nuctfa) set Query "$RepmRNA/$PAB" if {[file exists $Query]} { set Genbank_Access [AccessDeLaBoite $PAB mRNA] } else { set Query "$RepNuctfa/$PAB" if {[file exists $Query]} { set Genbank_Access [AccessDuTFADumRNA $Query] } else {set Genbank_Access "$PAB"} } #3-4-2 Taille de la sequence query du deisgn set Genbank_size [string length [join [QueLaSequenceDuFichierTFA $Query] ""]] #set Genbank_Definition [AccessDeLaBoite $PAB mRNA Definition] #3-4-3 Access et definition et taille de la proteine correspondante set Protein_Access [AccessDeLaBoite $PAB protein] set Protein_Definition [AccessDeLaBoite $PAB protein Definition] set Protein_size [InterrogeBestProteinAndmRNAForeachOrga Access $Protein_Access Taille] #3-4-4 Definition de secours (mRNA ou access) if { $Protein_Definition == "" && $Genbank_Access != ""} { set Protein_Definition [AccessDeLaBoite $PAB mRNA Definition] if { $Protein_Definition == ""} { set Protein_Definition [lrange [DefDeAcc $Genbank_Access genbankfull Def] 1 end] } } #3-4-5 Les Infos de l oligo set ID $NomOligo set OligoEquivalent [NomOligoEquivalent $PAB $NomOligo $DirOligo1 $DirOligo2] #set LaSequence [InterrogeInfoDeLOligo $FichierOligo $NomOligo Sequence] #set TailleOligo [InterrogeInfoDeLOligo $FichierOligo $NomOligo Taille] #set ExpTm [InterrogeInfoDeLOligo $FichierOligo $NomOligo ExpTm] # Generales set GC [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo GC] set Tm [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo Tm] set Begin [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo Debut] set End [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo Fin] # Specifique a RefSeq set RefSeq_NbDetected [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo NbCandidats] set RefSeq_AccDetected [join [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo LesCandidats] " "] regsub -all "RSHUM:NM" $RefSeq_AccDetected "NM_" RefSeq_AccDetected regsub -all "RSHUM:NG" $RefSeq_AccDetected "NG_" RefSeq_AccDetected # Specifique a Unigene set Unigene_NbDetected [InterrogeInfoDeLOligo $FichierOligo2 $OligoEquivalent NbCandidats] set Unigene_AccDetected [join [InterrogeInfoDeLOligo $FichierOligo2 $OligoEquivalent LesCandidats] " "] regsub -all "UG:" $Unigene_AccDetected "" Unigene_AccDetected #3-4-6 Access RefSeq set RefSeq_Id [ReturnBestHitFromLogFile $PAB $DirOligo1] set RefSeq_Definition [ReturnDefinitionFromBestHitFromLogFile $RefSeq_Id] regsub -all "RSHUM:NM" $RefSeq_Id "NM_" RefSeq_Id regsub -all "RSHUM:NG" $RefSeq_Id "NG_" RefSeq_Id #3-4-7 Access Unigene set Uniseq_Access [ReturnBestHitFromLogFile $PAB $DirOligo2] set Unigene_Definition [ReturnDefinitionFromBestHitFromLogFile $Uniseq_Access] set BestBanqueUg [LeUnigeneDeUniseq $Uniseq_Access] if {$BestBanqueUg==""} { #On essaie avec les nouveaux blastn Unigene set Unigene_Id [InterrogeLesAccessUnigeneDesPABs $PAB UnigeneId] if {$Unigene_Id == ""} { set Unigene_Id "No Unigene Id associated" } else { set Unigene_Definition [ReturnDefinitionFromBestHitFromLogFile $Unigene_Id] } } regsub -all "UG:" $Uniseq_Access "" Uniseq_Access #3-4-8 L ontology (GPO) set FileGOXML "[RepertoireDuGenome]/GeneOntology/${PAB}.xml" set LesTypes [AskGOAnalyse $FileGOXML Methode GPO LesTypes] if {$LesTypes != {}} { foreach Type $LesTypes { set LesGOs [AskGOAnalyse $FileGOXML Methode GPO Type $Type LesGO] switch -regexp -- $Type { "function" {set GO_Function $LesGOs} "process" {set GO_Process $LesGOs} "component" {set GO_Component $LesGOs} } #set Def [AskGOAnalyse $FileGOXML Type $Type GO $GO Definition] #set TexteType [format "%-9s" $Type] #Espionne "$TexteType $GO $Def" #lappend LeTexte "$TexteType $GO $Def" #lappend LesGOAvecLiens $GO } } #Espionne "F $GO_Function -- P $GO_Process -- C $GO_Component" #3-4-8 Localisation genomique (Homo sapiens) set FichiermRNALoc "[RepertoireDuGenome]/Localisation/mRNAHsapLocalisation_Human" if {[InterrogeLocalisation $FichiermRNALoc Nom $PAB] != ""} { set InfoLoc "" set LesLocalisations "" set Localisation "" set IdDeRef 0.95 set PIdDeRef [format "%.1f" [expr $IdDeRef * 100]] set LesLocalisations [InterrogeLocalisation $FichiermRNALoc Nom $PAB] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] set Warning "" if {$InfoLoc != "MonoLoc"} {set Warning $InfoLoc} foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation 20] != "BestLoc" && [lindex $LaLocalisation 20] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9] set CytoBand [lindex $LaLocalisation 19] #set D [lindex $LaLocalisation 10] #set F [lindex $LaLocalisation 11] #set Sens [lindex $LaLocalisation 12] #set Contig [lindex $LaLocalisation 13] set Id [lindex $LaLocalisation 6] set PId [format "%.1f" [expr $Id * 100]] if {$Id < $IdDeRef} { if {$Warning != ""} {set Warning "$Warning ;"} set Warning "$Warning Id < $PIdDeRef%" } lappend Localisation "$Chromosome" } set Localisation [join $Localisation " ; "] if {$Warning != ""} {append Localisation $Warning} } #3-5 Stockage des donnees recuperees foreach Info $Header { lappend LesInfos [set $Info] } AppendAuFichier $FichierSDT [join "$LesInfos" "\t"] } return "" } proc LeFichierSDT_Ontario {{Fichier ""} {FichierSDT ""}} { Wup "Permet de faire un fichier d annotation lisible pour le programme Acuity de Axon" Wup "Ce type de fichier a pour extension .sdt et est majoritairement separe par des tabulations" Wup "Le .sdt est un fichier qui permet d ajouter des annotations" ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## set RepPuceOntario "[RepertoireDuGenome]/Autres_Puces/Ontario" set RepGalFile "$RepPuceOntario/GalFile" if {$Fichier ==""} {set Fichier "$RepGalFile/SS-H19k7_ActiChip2_0.gal"} if {$FichierSDT==""} {set FichierSDT "$RepGalFile/SS-H19k7_ActiChip2_0.sdt"} if {! [file exists $Fichier]} { Espionne "Usage is Input from Ontario informations and the Output file" Espionne "Usage is LeFichierSDT_Ontario Input Output" } if {[file exists $FichierSDT]} { while {1} { if {[OuiOuNon "$FichierSDT already exists.\nPlease choose a file name for new SDT File"]} { set FichierSDT [tk_getOpenFile -title "Choose a file" -initialdir "$RepGalFile"] if {$FichierSDT==""} {continue} else {break} } } } #2- Les donnees ou nom des champs utilises set Header [list "ID" "Genbank_Id" "Definition" "Gene" "Chromosome" "CytoBand" "RefSeq_Id" "Unigene_Id" "NewUnigene_Id" "NewDefinition" "Gscope_Access2" "Gscope_Access"] AppendAuFichier $FichierSDT [join "$Header" "\t"] #3- Recuperation des informations set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #block col row name id if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLeHeader !="1" && [regexp -nocase "^ATF" $Ligne]} { set SurLeHeader 1 set NDeLigne 0 continue } if {$SurLeHeader=="1" && $NDeLigne=="0"} { set LigneSplitee [split $Ligne "\t"] #On ajoute 1 colonne de donnee supplementaire set NMaxOptionalHeader [lindex $LigneSplitee 0] set NDeLigne 1 continue } if {$SurLeHeader=="1" && [expr $NDeLigne <= $NMaxOptionalHeader]} { incr NDeLigne continue } else {set SurLeHeader 0} if {$SurLeHeader=="0" && [regexp -nocase "^Block\t" $Ligne]} { set SurLesDonnees 1 continue } set NewLigne "" set LigneSplitee "" set LesInfos "" set grid "" set row "" set col "" set Definition "" set NewDefinition "" set Gscope_Access2 "" set LigneSplitee [split $Ligne "\t"] set grid [lindex $LigneSplitee 0] set row [lindex $LigneSplitee 1] set col [lindex $LigneSplitee 2] #Recuperation de l info calculee pour Gene_Present et les access gscope de Actin set Gscope_Access2 [InterrogeActiChip2Ontario "" $grid $row $col GscopeAccess] #set Protein_Id [InterrogeActiChip2Ontario "" $grid $row $col ProteinAccess] #set Design_Access [InterrogeActiChip2Ontario "" $grid $row $col DesignAccess] #set Definition [InterrogeActiChip2Ontario "" $grid $row $col Definition] #Recuperation de l info calculee pour Gene_Present et les access gscope de PuceEST set Gscope_Access [InterrogeLesAccRSEtUG_Ontario $grid $row $col PAB] #grid col row sample gene desc flag #1 3 1 5548382 5548382 Seq_Ver:Hs.159410:BM549033:molybdenum cofactor synthesis 3:MOCS3:20:20q13.13:3:33800 #desc c quoi: #? UnigeneId Access Definition Name Ch Cyto Flag OriginalID #Seq_Ver :Hs.159410 :BM549033 :molybdenum cofactor synthesis 3 :MOCS3 :20 :20q13.13 :3 :33800 set Statut [InterrogeLeIOBFile_Ontario $grid $col $row Statut] set ID [InterrogeLeIOBFile_Ontario $grid $col $row Sample] set Definition [InterrogeLeIOBFile_Ontario $grid $col $row Definition] set Gene [InterrogeLeIOBFile_Ontario $grid $col $row Abreviation] set Chromosome [InterrogeLeIOBFile_Ontario $grid $col $row Chromosome] set CytoBand [InterrogeLeIOBFile_Ontario $grid $col $row CytoBand] set Unigene_Id [InterrogeLeIOBFile_Ontario $grid $col $row UnigeneID] set Genbank_Id [InterrogeLeIOBFile_Ontario $grid $col $row AccessionID] set RefSeq_Id "None" if {$Statut == "No_Seq"} { set RefSeq_Id "" set NewUnigene_Id "" set NewDefinition "" } else { #On utilise ce qui a ete fait pour la premiere version du gal file (SS-H19k6.gal, .iob) set RefSeq_Id [InterrogeLesAccRSEtUG_Ontario $grid $row $col AccRefSeq] if {[regexp -nocase "RSHUM:" $RefSeq_Id]} { regsub "RSHUM:NM" $RefSeq_Id "NM_" RefSeq_Id } set NewUnigene_Id [InterrogeLesAccRSEtUG_Ontario $grid $row $col AccUnigene] if {$Definition==""} { set NewDefinition [InterrogeLesAccRSEtUG_Ontario $grid $row $col BestDefinition] } } #3-5 Stockage des donnees recuperees foreach Element $Header { if {[set $Element]==""} {set $Element "None"} lappend LesInfos [set $Element] } AppendAuFichier $FichierSDT [join "$LesInfos" "\t"] continue } close $F return "" } proc LeFichierSDT_UMCU {{FichierSDT ""}} { Wup "Permet de faire un fichier d annotation lisible pour le programme Acuity Axon" Wup "Ce type de fichier a pour extension .sdt et est majoritairement separe par des tabulations" Wup "Le .sdt est un fichier qui permet d ajouter des annotations" #Attention il faut une reference unique qui sera toujours utilise (ex: id) #On peut prendre l AccessGscope #L ID unique doit etre en premiere position if { $FichierSDT==""} { set FichierSDT "[RepertoireDuGenome]/Autres_Puces/UMCU/UMCU-H25k11.sdt" } #1- On recupere la liste des ID d oligos (ex: ACT0001_Oligo12_BC000445) set FichierUMCU "[RepertoireDuGenome]/Autres_Puces/UMCU/UMCU-H25k11.txt" set LesIDs [InterrogeLesInfosUMCU $FichierUMCU LesAccess] #Espionne "$LesIDs" Espionne "Taille [llength $LesIDs]" #2- Les donnees ou nom des champs utilises set Header [list "ID" "ID_ActiChip" "Name" "GB_Access" "Gene_Symbol" "UniGene_ID"] AppendAuFichier $FichierSDT [join "$Header" "\t"] #3- Recuperation des informations foreach ID $LesIDs { if {$ID==""} {continue} set GB_Access "" set ID_ActiChip "" set Name "" set Gene_Symbol "" set UniGene_ID "" set Infos "" set LesInfos "" set GB_Access $ID set Name [InterrogeLesInfosUMCU $FichierUMCU $ID Name] set Gene_Symbol [InterrogeLesInfosUMCU $FichierUMCU $ID Gene_Symbol] set UniGene_ID [InterrogeLesInfosUMCU $FichierUMCU $ID UniGene_ID] set ID [InterrogeLesInfosUMCU $FichierUMCU $ID Oligo_ID] #Attention le ID ici doit etre le Oligo_ID de UMCU set ID_ActiChip [InterrogeActiChip2UMCU $ID AccessGscope] #3-5 Stockage des donnees recuperees foreach Info $Header { lappend LesInfos [set $Info] } AppendAuFichier $FichierSDT [join "$LesInfos" "\t"] #papaEspionne [join "$LesInfos" "\t"] } return "" } proc LeGetzUniseq {Access {Banques uniseq} {Link genbank} {Option AccessDef}} { Wup "Recupere grace a getz les liens dans Link pour les Access dans Banques" Wup "Option EntreeComplete == sortie getz de toute l entree" Wup "Option AccessDef == sortie getz avec juste Id et Def" set LesAccess "" set UnAccess "" set bidon "" set Access [split $Access "\n"] if {$Banques == "uniseq"} { foreach AC [lsort -unique $Access] { set UnAccess [lindex $AC 0] if {[regexp -nocase "UG:" $AC]} {regsub -all "UG:" $UnAccess "" UnAccess} if {[regexp -nocase "Hs#" $AC]} {regsub -all "Hs#" $UnAccess "Hs_" UnAccess} lappend LesAccess $UnAccess } set Access [join $LesAccess "|"] } elseif {$Banques == "genbank"} { foreach AC [lsort -unique $Access] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $AC]} {continue} if { [regexp {^ACT[0-9]{4}$} $AC]} {continue} if {! [regexp "^ACCESSION" $AC] && ! [regexp -nocase "^LOCUS" $AC]} {continue} scan $AC "%s %s" bidon UnAccess lappend LesAccess $UnAccess } set Access [join [lsort -unique $LesAccess] "|"] } if {$Access == ""} {return ""} if {$Option == "EntreeComplete"|| $Option=="All"} {set option "-e"} elseif {$Option == "AccessDef"} {set option "-f \"id des\""} set Typ1 id set Typ2 acc if {$Link == "NoLink"} { #set Commande "getz $option \"\\\[$Banques-id: $Access\\\]\"" set Commande "getz $option \"(\\\[$Banques-$Typ1: $Access\\\] | \\\[$Banques-$Typ2: $Access\\\])\"" } else { #set Commande "getz $option \"\\\[$Banques-id: $Access\\\] \\\> $Link \"" set Commande "getz $option \"(\\\[$Banques-$Typ1: $Access\\\] | \\\[$Banques-$Typ2: $Access\\\]) \\\> $Link \"" } #http://igbmc.u-strasbg.fr/srs71bin/cgi-bin/wgetz?[uniseq-all:$Access]>protein+-vn+2+-f+id%20des #http://igbmc.u-strasbg.fr/srs71bin/cgi-bin/wgetz?[uniseq-all:$Access]>protein+-vn+2+-e catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {return ""} if {$GetzOut=={}} {return ""} return $GetzOut } proc LeGrandResume {} { foreach Ligne [LesVEDidierCompatiblesGscope "GetList"] { set R1 "" scan $Ligne "%s %s %s %s" VE R1 pDEST PGS if {$R1==""} { continue } set R2 "${R1}_$pDEST" lappend LesVEDidierDuPGS($PGS) $VE set Rec2DuVEDidier($VE) $R2 } SauveLesLignes [array get LesVEDidierDuPGS] dans "[Fiches]/VEDidierDuPGS.txt" set LesRapports {} set LesClefs [VEDidier ListeDes Clefs] foreach VE [VEDidier ListeDes VE] { set LaLigne {} set ProtName [VEDidier $VE "ProtName"] set Scientist [VEDidier $VE "Scientist"] set VectorName [VEDidier $VE "Vectorname"] set Organism [VEDidier $VE "Organism"] set Alias $ProtName set PGS [VEDidier $VE "CodeRipp"] if {$PGS==""} { set PGS "------" } else { set Alias [Alias $PGS] } lappend LaLigne $VE lappend LaLigne $PGS lappend LaLigne [format "%-10s" $ProtName] lappend LaLigne [format "%-10s" $Alias] lappend LaLigne [format "%-30s" $Scientist] lappend LaLigne [format "%-15s" $VectorName] lappend LaLigne [format "%-15s" $Organism] if {[info exists Rec2DuVEDidier($VE)]} { set R2 $Rec2DuVEDidier($VE) set N [Rec1 $R2 N] set Sujet [VirtualPPCREnStock $N Sujet] set LesMots [split $Sujet "-"] set F [lindex $LesMots end] set D [lindex $LesMots end-1] set pDONR [Rec1 $R2 Vecteur] set pDEST [Rec2 $R2 Vecteur] set P5 [VirtualPPCREnStock $N P5] set P3 [VirtualPPCREnStock $N P3] lappend LaLigne [format "%-25s" $R2] lappend LaLigne "$P5 [Oli $P5 Signals]" lappend LaLigne "$P3 [Oli $P3 Signals]" set FichierRec2 [Rec2 $R2 Fichier] set SeqRec2 [QueLaSequenceDuFichierTFA $FichierRec2] set FichierFusionProt $FichierRec2 regsub "/rec2/" $FichierFusionProt "/fusion/" FichierFusionProt regsub "/fusion/" $FichierFusionProt "/fusion/Fus_" FichierFusionProt append FichierFusionProt ".prottfa" if {[FileExists $FichierFusionProt]} { set SeqFusion [QueLaSequenceDuFichierTFA $FichierFusionProt] } else { set SeqFusion "" } set LeTR {} lappend LeTR VE $VE lappend LeTR ProteinName $Alias lappend LeTR Organism $Organism lappend LeTR Boundaries "$D-$F" lappend LeTR PGS $PGS lappend LeTR Rec2 $R2 # lappend LeTR OldProtname $ProtName # lappend LeTR Oligo5P $P5 lappend LeTR Signals5 [Oli $P5 Signals] lappend LeTR Signals3 [Oli $P3 Signals] foreach Clef [LesEtatsDesVEs] { lappend LeTR $Clef [VEDidier $VE $Clef] } lappend LeTR NucSeqRec2 $SeqRec2 lappend LeTR ProtSequence $SeqFusion set SeqProtCoupure "" set Protease "" foreach Signal [split [Oli $P5 Signals] "_"] { if {[EstUneProtease $Signal]} { set Protease $Signal ; break } } if {$Protease!=""} { set FichierCoupureProt $FichierRec2 regsub "/rec2/" $FichierCoupureProt "/coupure/" FichierCoupureProt regsub "/coupure/" $FichierCoupureProt "/coupure/cut_" FichierCoupureProt append FichierCoupureProt "_$Protease.prottfa" if {[FileExists $FichierCoupureProt]} { set SeqProtCoupure [QueLaSequenceDuFichierTFA $FichierCoupureProt] } else { set SeqProtCoupure "" } } lappend LeTR ProtCutted $SeqProtCoupure set LesTitres {} set LeRapport {} foreach {T R} $LeTR { lappend LesTitres $T lappend LeRapport $R } if {$LesRapports=={}} { lappend LesRapports [join $LesTitres ";"] } set Rapport [join $LeRapport ";"] lappend LesRapports $Rapport } set Ligne [join $LaLigne "\t"] lappend LeGrandResume $Ligne } SauveLesLignes $LesRapports dans "[Fiches]/ReportForJaime.txt" set Resume [join $LeGrandResume "\n"] return [AfficheVariable $Resume] } proc LeManquant {} { set FichierAccess "[RepertoireDuGenome]/LesAccessDesmRNAsChoisis" set L [CreeListePourFichierAUneColonne $FichierAccess] Espionne [llength $L] foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_choisis/*"] { set NomFichier [file tail $Fichier] set Vu($NomFichier) 1 } foreach Access $L { if {$Access==""} {continue} if {![info exists Vu($Access)]} {Espionne $Access} } } proc LeMeilleurDuLot {ls} { set o [open tocmd w] foreach e $ls { lassign $e idc rf rs puts $o "PDB:$idc" } close $o if {[catch {set Lg [exec fastacmd -i tocmd -d pdb]} Msg]} { return "" } if {[string index $Lg 0] ne ">"} { return "" } DecortiqueUnTFA $Lg Ln Sq set smax -1 set lm "" foreach n $Ln l $ls { set s [string length [set Sq($n)]] if {$s > $smax} { set smax $s set lm $l } } return $lm } proc LeMeilleurTblastn {OrgCible LesGenORFs} { set BestExpect 1 foreach {Gen ORF} $LesGenORFs { set Fichier "/genomics/link/$Gen/tblastngenomes/$ORF" set LO [OuATapeTBlastN $Fichier "genomes" "ListeDesOrganismes"] set LE [OuATapeTBlastN $Fichier "genomes" "ListeDesExpects"] set LD [OuATapeTBlastN $Fichier "genomes" "ListeDesDebuts"] set LF [OuATapeTBlastN $Fichier "genomes" "ListeDesFins"] set LB [OuATapeTBlastN $Fichier "genomes" "ListeDesBanqueId"] foreach Org $LO Expect $LE Deb $LD Fin $LF BankId $LB { if {[string equal -nocase $Org $OrgCible]} { if {$Expect < $BestExpect} { set BestExpect $Expect set BestGen $Gen set BestORF $ORF set BestDeb $Deb set BestFin $Fin set BestBankId $BankId } break } } } return "$BestGen $BestORF $BestBankId $BestDeb $BestFin $BestExpect" } proc LeMeilleurmRNACandidat {LesmRNACandidats TailleProt} { set DbtCDSMax 0 set ScoreMax -1e200 set DiffTailleMin 1e200 AskLesPagesInfos unset AskLesPagesInfos load $LesmRNACandidats genbankfull set LesmRNAs {} foreach Access $LesmRNACandidats { if {[info exists DbtCDS ]} {unset DbtCDS} if {[info exists FinCDS ]} {unset FinCDS} set PageInfo [AskLesPagesInfos ask $Access] Espionne $PageInfo regexp { CDS [^0-9]+([0-9]+)\.[ ]*\.([0-9]+)} $PageInfo tmp DbtCDS FinCDS if {![info exists DbtCDS ] || ![info exists FinCDS ]} {continue} #IMPORTANT TGA (STOP) a la fin du CDS" set TailleProtTheo [expr ($FinCDS - $DbtCDS + 1) * 1.0 /3 - 1 ] set DiffTaille [expr abs($TailleProt-$TailleProtTheo)] if {$DiffTaille > $DiffTailleMin} {continue} if {$DiffTaille < $DiffTailleMin} { set LesmRNAs {} set DbtCDSMax 0 set ScoreMax -1e200 set DiffTailleMin $DiffTaille } set Info [PageInfo $Access genbank "id des key org"] set NbBonus 0 while {[regexp -nocase "mRNA|complete cds|cDNA to mRNA" $Info]} { incr NbBonus regsub -nocase "mRNA|complete cds|cDNA to mRNA" $Info "" Info } set NbMalus 0 while {[regexp -nocase "promoter|gene|exon" $Info]} { incr NbMalus regsub -nocase "promoter|gene|exon" $Info "" Info } set Score [expr $NbBonus - $NbMalus] if {$Score < $ScoreMax } {continue} if {$Score > $ScoreMax } {set LesmRNAs {};set DbtCDSMax 0;set ScoreMax $Score} if {$DbtCDS < $DbtCDSMax } {continue} if {$DbtCDS > $DbtCDSMax } {set LesmRNAs {};set DbtCDSMax $DbtCDS} lappend LesmRNAs $Access } AskLesPagesInfos unset return [lindex $LesmRNAs 0] } 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 LeNombreDeResidusDansLeDomaine {FichierMSF {D -1} {F end}} { set TFAs [CreeLeTFAsDuMSF $FichierMSF] set TmpTFAs [Sauve $TFAs dans [TmpFile]] set Sortie {} if { ! [regexp "end" $D]} { incr D -1} if { ! [regexp "end" $F]} { incr F -1} foreach Access [LaSequenceDuTFAs $TmpTFAs LaListeDesAccess] { set Seq [QueLaSequenceDuTexteTFA [LaSequenceDuTFAs $TmpTFAs $Access]] set Zone [string range $Seq $D $F] regsub -all {\.|\-} $Zone "" ZoneSansPoint set nRes [string length $ZoneSansPoint] lappend Sortie [format "%-10s %5d %s---%s" $Access $nRes [string range $ZoneSansPoint 0 4] [string range $ZoneSansPoint end-4 end]] } # file delete -force $TmpTFAs return $Sortie } proc LeNombreDuResidu {r} { if {[regexp {^[0-9]} $r]} { set ler $r } else { set ler [string range $r 1 end] } return $ler } proc LeNucProfileDeLaSeq {Seq Nuc} { ######################################################################################## ### Rend une liste dont chaque element correspond a 1 ou 0 selon si nuc voulu ou pas ### ### (ex: $Nuc == GC, pour le calcul du profil en GC) ### ### a chacune des positions de la sequence ### ######################################################################################## if {![EstCeDeLADN_Seq $Seq]} {Espionne "Problem: your sequence is not a DNA sequence";return} #Nucleotides recherches set LesNuc [split $Nuc ""] set LeNucProfile {} #Parcours de chacune des positions de la sequence set LesRes [split $Seq ""] foreach Res $LesRes { foreach Nuc $LesNuc { if {[string equal -nocase $Res $Nuc]} {set Nuc 1 ; break} else {set Nuc 0} } #Espionne "Res:$Res Nuc: $Nuc" lappend LeNucProfile $Nuc } return $LeNucProfile } proc LeNucProfileDeLaSeq_OLD {Seq Nuc {WindowSize 10}} { ############OKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOK############### ######################################################################################## ### Rend une liste dont chaque element correspond au pourcentage en nucleotide voulu ### ### Pourcentage calcule sur la fenetre WindowSize ### ### (ex: $Nuc == GC, pour le calcul du profil en GC) ### ### a chacune des positions de la sequence ### ######################################################################################## if {![EstCeDeLADN_Seq $Seq]} {Espionne "Problem: your sequence is not a DNA sequence";return} set LesNuc [split $Nuc ""] set Volet [expr int($WindowSize / 2)] set LeNucProfile {} #Parcours de chacune des positions de la sequence set LesRes [split $Seq ""] set SeqLength [llength $LesRes] set IndexMax $SeqLength set Pos 0 foreach Res $LesRes { incr Pos set NbNuc 0 #Espionne "Position$Pos Res:$Res" #Determination des extr de la fenetre set iMin [expr $Pos - $Volet] if {$iMin < 1 } {set iMin 1} set iMax [expr $Pos + $Volet] if {$IndexMax < $iMax} {set iMax $IndexMax} #Espionne "iMin: $iMin ; iMax: $iMax" set LocalWindowSize [expr $iMax - $iMin +1] #Espionne "LocalWindowSize: $LocalWindowSize" #Calcul du poucentage des Nuc sur cette fenetre for {set j $iMin} {$j <= $iMax} {incr j} { set Res [lindex $LesRes [expr $j -1]] #Espionne "Nuc$j: $Res" foreach Nuc $LesNuc { if {[string equal -nocase $Res $Nuc]} {incr NbNuc} } } set NucPercent [expr $NbNuc * 1.0 / $LocalWindowSize] #set NucPercent [expr $NbNuc *100.0 / $LocalWindowSize] #Espionne "NucPercent: $NbNuc *100.0 / $LocalWindowSize ; $NucPercent" lappend LeNucProfile $NucPercent } return $LeNucProfile } proc LeNucProfileDesQueryPosDuMAF {FileTFA {Nuc GC}} { set TFASeq [string toupper [TFA2SEQ $FileTFA]] #le regsub qui suit enleve tout sauf A-Z en majuscule (cad caracteres autres que lettres, minuscules, chiffres ...) regsub -all {[^A-Z]+} $Seq "" Seq return [LeNucProfileDeLaSeq $Seq $Nuc] } proc LePCIDuResidu {args} { Wup "Permet de questionner le fichier des pourcentages d identite calcules par Luc" Wup "Les PID sont faits par rapport a la PDB 1yag_a et les structures IIaires sont issues de la PDB" Wup "On relit puis trie les Access en fonction de leur famille et les moyennes sont ainsi calculees" Wup "Voir aussi decharge et interroge" global TabPCIRes #Arguments: ########### #LesCategorie -- Rend les Familles d ARP disponible #$Pos -- Rend PAR DEFAUT le pourcentage d ID moyen du residu pour toutes les ARPs #$Pos $Categorie -- Rend le pourcentage d ID du residu pour cette famille d ARP #$Pos Total -- Rend le pourcentage d ID moyen du residu pour toutes les ARPs #HelixOuSheet Number -- Rend le nombre de Sheet ou de Helix #HelixOuSheet $i PDB Debut -- Rend le debut de HouS numero $i dans la PDB #HelixOuSheet $i PDB Fin -- Rend le Fin de HouS numero $i dans la PDB #HelixOuSheet $i Reference Debut -- Rend le debut de HouS numero $i dans la Reference #HelixOuSheet $i Reference Fin -- Rend le Fin de HouS numero $i dans la Reference if {$args == "unset"} { if {[info exists TabPCIRes]} {array unset TabPCIRes} return "" } set Quoi [join $args ","] if {[info exists TabPCIRes($Quoi)]} {return [set TabPCIRes($Quoi)]} #set FichierACharger "[RepertoireDuGenome]/alignement_ARP/test/PIDSecStruct_all_Ordered" #set FichierACharger "[RepertoireDuGenome]/PIDSecStruct_all_Ordered" set FichierACharger "[RepertoireDuGenome]/Projet_ARP/Resultat/3D/PIDSecStruct_all_Ordered" #set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" } if {! [info exists TabPCIRes($FichierACharger,EstCharge)]} {set TabPCIRes($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeRetrieveResidueInMACS $FichierACharger return "" } if { [info exists TabPCIRes($FichierACharger,EstVide)]} {return ""} if { [info exists TabPCIRes($Quoi)]} {return [set TabPCIRes($Quoi)]} ###################CHARGE le Fichier avec les residus demandees######################### if {! [info exists TabPCIRes($FichierACharger,EstCharge)] || [set TabPCIRes($FichierACharger,EstCharge)]=="0"} { set TabPCIRes($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeLePCIDuResidu TabPCIRes $FichierACharger] if {$ResultatCharge != ""} { set TabPCIRes($FichierACharger,EstVide) 1 return "" } } if {![info exists TabPCIRes($Quoi)]} {return ""} return [set TabPCIRes($Quoi)] } proc LePCIDuResiduDUnAccess {args} { Wup "Permet de questionner le fichier des pourcentages d identite calcules par Luc" Wup "Les PID sont faits par rapport a la PDB 1yag_a et les structures IIaires sont issues de la PDB" Wup "On relit puis trie les Access en fonction de leur famille et les moyennes sont ainsi calculees" Wup "Ici on le fait uniquement pour un access en particulier" Wup "Voir aussi decharge et interroge" global TabPCIRes1Acc #Arguments: ########### #$Pos -- Rend PAR DEFAUT le pourcentage d ID moyen du residu pour toutes les ARPs #HelixOuSheet Number -- Rend le nombre de Sheet ou de Helix #HelixOuSheet $i PDB Debut -- Rend le debut de HouS numero $i dans la PDB #HelixOuSheet $i PDB Fin -- Rend le Fin de HouS numero $i dans la PDB #HelixOuSheet $i Reference Debut -- Rend le debut de HouS numero $i dans la Reference #HelixOuSheet $i Reference Fin -- Rend le Fin de HouS numero $i dans la Reference if {$args == "unset"} { if {[info exists TabPCIRes1Acc]} {array unset TabPCIRes1Acc} return "" } set Quoi [join $args ","] if {[info exists TabPCIRes1Acc($Quoi)]} {return [set TabPCIRes1Acc($Quoi)]} #set FichierACharger "[RepertoireDuGenome]/alignement_ARP/test/PIDSecStruct_all_Ordered" #set FichierACharger "[RepertoireDuGenome]/PIDSecStruct_all_Ordered" set FichierACharger "[RepertoireDuGenome]/alignement_ARP/Resultat/3D/PIDSecStruct_all" #set FichierACharger [lindex $args 0] if {! [file exists $FichierACharger]} { Espionne "Pb $FichierACharger" } if {! [info exists TabPCIRes1Acc($FichierACharger,EstCharge)]} {set TabPCIRes1Acc($FichierACharger,EstCharge) 0} if {$Quoi=="$FichierACharger,Decharge"} { #Espionne "Decharge $FichierACharger" DechargeRetrieveResidueInMACS $FichierACharger return "" } if { [info exists TabPCIRes1Acc($FichierACharger,EstVide)]} {return ""} if { [info exists TabPCIRes1Acc($Quoi)]} {return [set TabPCIRes1Acc($Quoi)]} ###################CHARGE le Fichier avec les residus demandees######################### if {! [info exists TabPCIRes1Acc($FichierACharger,EstCharge)] || [set TabPCIRes1Acc($FichierACharger,EstCharge)]=="0"} { set TabPCIRes1Acc($FichierACharger,EstCharge) 1 #Espionne "On charge $FichierACharger" set ResultatCharge [ChargeLePCIDuResiduDUnAccess TabPCIRes1Acc $FichierACharger] if {$ResultatCharge != ""} { set TabPCIRes1Acc($FichierACharger,EstVide) 1 return "" } } if {![info exists TabPCIRes1Acc($Quoi)]} {return ""} return [set TabPCIRes1Acc($Quoi)] } proc LePanneauDeCouleursDuGraph {target LeCanvasPere tagorid} { Wup "Petit panneau de couleur pour changer la couleur des graphes Tm GC Nbseq Id" set w ".choixcouleur" set GraphPanel "[winfo toplevel $target]" if {[winfo exists $w]} {destroy $w} toplevel $w wm overrideredirect $w 1 wm resizable $w false false set FInfo "$w.frame" frame $FInfo -borderwidth "1" -relief "ridge" -background "gray" pack $FInfo -fill "both" -expand "true" bind $FInfo "destroy $w" bind $GraphPanel "destroy $w" #bind $target {wm geometry $w +[winfo rootx $target]+[winfo rooty $target]} #Palette pour le panneau special de choix de couleur set LesCouleurs "" set LesCouleurs [list black red green3 orange deeppink deepskyblue2 darkviolet firebrick4 palette] set NbCouleur [llength $LesCouleurs] set MaxRow 2 set MaxCol [expr $NbCouleur/$MaxRow] set Row 0 set Column 0 foreach Couleur $LesCouleurs { if {$Row>=$MaxRow} {incr Column;set Row 0} if {$Couleur=="palette"} { set LCoul "${FInfo}.${Couleur}" label $LCoul -background "yellow" -relief "ridge" -width "2" -text "P" grid $LCoul -column "$Column" -row "$Row" -padx "2" -pady "2" bind $LCoul "ChangeLaCouleurDuGraph $LeCanvasPere $tagorid \[tk_chooseColor\]" bind $LCoul "destroy $w" continue } set LCoul "${FInfo}.${Couleur}" label $LCoul -background "$Couleur" -relief "sunken" -width "2" grid $LCoul -column "$Column" -row "$Row" -padx "2" -pady "2" bind $LCoul "ChangeLaCouleurDuGraph $LeCanvasPere $tagorid $Couleur" bind $LCoul "destroy $w" incr Row } set x [expr [winfo rootx $target]] set y [expr [winfo rooty $target]] wm geometry $w +${x}+${y} return "" } proc LePilierDeReference {aa Pilier} { return [string map [list . $aa] $Pilier] } proc LePlusPetit {ListeLabels aDissim aValpp} { upvar $aDissim Dissim upvar $aValpp Valpp set Valpp 100000 set Sortir 0 set Autres $ListeLabels set Nompp "" foreach Nom1 $ListeLabels { set Autres [lrange $Autres 1 end] foreach Nom2 $Autres { if {![set Dissim($Nom1,$Nom2)]} { set Valpp 0 set Nompp [list $Nom1 $Nom2] set Sortir 1 break } elseif {[set Dissim($Nom1,$Nom2)]<$Valpp} { set Valpp [set Dissim($Nom1,$Nom2)] set Nompp [list $Nom1 $Nom2] } } if {$Sortir} {break} } return $Nompp } proc LePremierExonDumRNAPourPromAn {Debut Fin Sens {Access ""} {Organism ""}} { return [list [list "FirstExon" "ProtocolGeneStructure" $Debut $Fin $Sens $Debut 0 "" $Access $Organism]] } proc LeProfilDeLAlignementDeLaQuery {FichierBlast BanqueId {WhatSens BothSens}} { if {![file exists $FichierBlast]} {return ""} set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == ""} {return} set Indice 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleQuery [AskBlast $FichierBlast Taille] #^[0-9]+_[0-9]+$ pour les access de jean #regsub {_[0-9]+$} $BanqueId "" BanqueId if {[regexp "_" $BanqueId] && [regexp {^[a-zA-Z]{,2}[0-9]+_[0-9]+$} $BanqueId]} { regsub {_[0-9]+$} $BanqueId "" BanqueId } for {set i 1} {$i <= $TailleQuery} {incr i} {set TabProfil($i) 0} set NbSubjectDansBlast [AskBlast $FichierBlast NbSubject] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [AskBlast $FichierBlast Subject $j] if {[info exists BId_Court]} {unset BId_Court} #^[0-9]+_[0-9]+$ pour les access de jean #regsub {_[0-9]+$} $BId "" BId_Court if {[regexp "_" $BId] && [regexp {^[a-zA-Z]{,2}[0-9]+_[0-9]+$} $BId]} { regsub {_[0-9]+$} $BId "" BId_Court } else { set BId_Court $BId } if {![string equal -nocase $BId_Court $BanqueId]} {continue} set NbSegments [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { set AlignLineaire [AskBlast $FichierBlast BanqueId $BId Segment $Segment AlignLineaire] if {$AlignLineaire == ""} {return} set Sens [SensDeLaRegion [AskBlast $FichierBlast BanqueId $BId Segment $Segment Orientation]] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set DQ [AskBlast $FichierBlast BanqueId $BId Segment $Segment DQ] set FQ [AskBlast $FichierBlast BanqueId $BId Segment $Segment FQ] if {[info exists AliQuery]} {unset AliQuery} if {[info exists AliSbjct]} {unset AliSbjct} set Query [lindex [split $AlignLineaire "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split $AlignLineaire "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] if {![info exists AliQuery]} {continue} if {![info exists AliSbjct]} {continue} set Sens "+" if {$FQ < $DQ} {set Sens "-"} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ == "-"} {continue} if {$AQ == $AS} { for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} { set Pos [expr $PosIni - $i] } else { set Pos [expr $PosIni + $i] } if {![info exists TabProfil($Pos)]} {continue} incr TabProfil($Pos) } } if {$Sens == "-"} { set PosIni [expr $PosIni - $Indice] } else { set PosIni [expr $PosIni + $Indice] } } } } set LeProfil {} for {set i 1} {$i <= $TailleQuery} {incr i} {lappend LeProfil [set TabProfil($i)]} return $LeProfil } proc LeProfilDeLAlignementDeLaQuery_TabBlast {aTabBlast BanqueId {WhatSens BothSens}} { upvar $aTabBlast TabBlast if {![info exists TabBlast]} {return} set TypeDeBlast [set TabBlast(TypeDeBlast)] set Indice 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleQuery [set TabBlast(Taille)] regsub {_[0-9]+$} $BanqueId "" BanqueId for {set i 1} {$i <= $TailleQuery} {incr i} {set TabProfil($i) 0} set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [set TabBlast($j)] if {[info exists BId_Court]} {unset BId_Court} regsub {_[0-9]+$} $BId "" BId_Court if {$BId_Court != $BanqueId} {continue} set NbSegments [set TabBlast($BId,NbSegment)] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { if {![info exists TabBlast($BId,$Segment,AlignLineaire)]} {return ""} set DQ [set TabBlast($BId,$Segment,DQ) ] set FQ [set TabBlast($BId,$Segment,FQ) ] set Sens [SensDeLaRegion [set TabBlast($BId,$Segment,Orientation)]] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set Query [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] set Sens "+" if {$FQ < $DQ} {set Sens "-"} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ == "-"} {continue} if {$AQ == $AS} { for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} { set Pos [expr $PosIni - $i] } else { set Pos [expr $PosIni + $i] } if {![info exists TabProfil($Pos)]} {continue} incr TabProfil($Pos) } } if {$Sens == "-"} { set PosIni [expr $PosIni - $Indice] } else { set PosIni [expr $PosIni + $Indice] } } } } set LeProfil {} for {set i 1} {$i <= $TailleQuery} {incr i} {lappend LeProfil [set TabProfil($i)]} return $LeProfil } proc LeProfilDeLAlignementDuSubject {FichierBlast BanqueId {WhatSens BothSens}} { if {![file exists $FichierBlast]} {return ""} set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == ""} {return} set Indice 1 if {$TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleSbjct [AskBlast $FichierBlast BanqueId $BanqueId Taille] for {set i 1} {$i <= $TailleSbjct} {incr i} {set TabProfil($i) 0} set NbSubjectDansBlast [AskBlast $FichierBlast NbSubject] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [AskBlast $FichierBlast Subject $j] if {0} { if {[info exists BId_Court]} {unset BId_Court} regsub {_[0-9]+$} $BId "" BId_Court if {$BId_Court != $BanqueId} {continue} } else { if {![string equal -nocase $BId $BanqueId]} {continue} } set NbSegments [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { set AlignLineaire [AskBlast $FichierBlast BanqueId $BId Segment $Segment AlignLineaire] if {$AlignLineaire == ""} {return} set Orientation [AskBlast $FichierBlast BanqueId $BId Segment $Segment Orientation] set Sens [SensDeLaRegion $Orientation] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set DS [AskBlast $FichierBlast BanqueId $BId Segment $Segment DS ] set FS [AskBlast $FichierBlast BanqueId $BId Segment $Segment FS ] set Query [lindex [split $AlignLineaire "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split $AlignLineaire "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] set Sens "+" if {$FS < $DS} {set Sens "-"} set PosIni $DS foreach AQ $LAliQuery AS $LAliSbjct { if {[regexp -nocase "\\\-" $AS]} {continue} if {$AQ == $AS} { for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} { set Pos [expr $PosIni - $i] } else { set Pos [expr $PosIni + $i] } if {![info exists TabProfil($Pos)]} {continue} incr TabProfil($Pos) } } if {$Sens == "-"} { set PosIni [expr $PosIni - $Indice] } else { set PosIni [expr $PosIni + $Indice] } } } } set LeProfil {} for {set i 1} {$i <= $TailleSbjct} {incr i} {lappend LeProfil [set TabProfil($i)]} return $LeProfil } proc LeProfilDeLAlignementDuSubject_TabBlast {aTabBlast BanqueId {WhatSens BothSens}} { upvar $aTabBlast TabBlast if {![info exists TabBlast]} {return} set TypeDeBlast [set TabBlast(TypeDeBlast)] set Indice 1 if {$TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleSbjct [set TabBlast($BanqueId,Taille)] for {set i 1} {$i <= $TailleSbjct} {incr i} {set TabProfil($i) 0} set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [set TabBlast($j)] if {$BId != $BanqueId} {continue} if {0} { if {[info exists BId_Court]} {unset BId_Court} regsub {_[0-9]+$} $BId "" BId_Court if {$BId_Court != $BanqueId} {continue} } set NbSegments [set TabBlast($BId,NbSegment)] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { if {![info exists TabBlast($BId,$Segment,AlignLineaire)]} {return ""} set DS [set TabBlast($BId,$Segment,DS) ] set FS [set TabBlast($BId,$Segment,FS) ] set Orientation [set TabBlast($BId,$Segment,Orientation)] set Sens [SensDeLaRegion $Orientation] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set Query [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] set Sens "+" if {$FS < $DS} {set Sens "-"} set PosIni $DS foreach AQ $LAliQuery AS $LAliSbjct { if {[regexp -nocase "\\\-" $AS]} {continue} if {$AQ == $AS} { for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} { set Pos [expr $PosIni - $i] } else { set Pos [expr $PosIni + $i] } if {![info exists TabProfil($Pos)]} {continue} incr TabProfil($Pos) } } if {$Sens == "-"} { set PosIni [expr $PosIni - $Indice] } else { set PosIni [expr $PosIni + $Indice] } } } } set LeProfil {} for {set i 1} {$i <= $TailleSbjct} {incr i} {lappend LeProfil [set TabProfil($i)]} return $LeProfil } proc LeProfilDeLaQuerySurToutLeBlast {FichierBlast {BaseAligneOuBaseDansAlignementOuLesDeux BaseAligne} {WhatSens BothSens} {LesBanqueId ""} {Expect 1e200}} { if {![file exists $FichierBlast]} {return ""} foreach BId $LesBanqueId { #jM regsub {_[0-9]+$} $BId "" BId if {[regexp "_" $BId] && [regexp {^[a-zA-Z]{,2}[0-9]+_[0-9]+$} $BId]} { regsub {_[0-9]+$} $BId "" BId } set TabBIdOk($BId) 1 } set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == ""} {return} set Indice 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleQuery [AskBlast $FichierBlast Taille] for {set i 1} {$i <= $TailleQuery} {incr i} { set TabProfil(BaseAligne,$i) 0 set TabProfil(BaseDansAlignement,$i) 0 } set NbSubjectDansBlast [AskBlast $FichierBlast NbSubject ] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [AskBlast $FichierBlast Subject $j] if {[info exists BId_Court]} {unset BId_Court} #jM regsub {_[0-9]+$} $BId "" BId_Court if {[regexp "_" $BId_Court] && [regexp {^[a-zA-Z]{,2}[0-9]+_[0-9]+$} $BId_Court]} { regsub {_[0-9]+$} $BId "" BId_Court } if {$LesBanqueId != "" && ![info exists TabBIdOk($BId_Court)]} {continue} set NbSegments [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { set AlignLineaire [AskBlast $FichierBlast BanqueId $BId Segment $Segment AlignLineaire] if {$AlignLineaire == ""} {return} set DQ [AskBlast $FichierBlast BanqueId $BId Segment $Segment DQ ] set FQ [AskBlast $FichierBlast BanqueId $BId Segment $Segment FQ ] set Orientation [AskBlast $FichierBlast BanqueId $BId Segment $Segment Orientation] set Sens [SensDeLaRegion $Orientation] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set Query [lindex [split $AlignLineaire "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split $AlignLineaire "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] set Sens "+" if {$FQ < $DQ} {set Sens "-"} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ == "-"} {continue} for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} {set Pos [expr $PosIni-$i]} else {set Pos [expr $PosIni+$i]} incr TabProfil(BaseDansAlignement,$Pos) if {$AQ == $AS} { if {![info exists TabProfil(BaseAligne,$Pos)]} {continue} incr TabProfil(BaseAligne,$Pos) } } if {$Sens == "-"} {set PosIni [expr $PosIni-$Indice]} else {set PosIni [expr $PosIni+$Indice]} } } } set LeProfil {} for {set i 1} {$i <= $TailleQuery} {incr i} { if {[string equal -nocase $BaseAligneOuBaseDansAlignementOuLesDeux "BaseAligne" ]} { lappend LeProfil [set TabProfil(BaseAligne,$i)] continue } if {[string equal -nocase $BaseAligneOuBaseDansAlignementOuLesDeux "BaseDansAlignement"]} { lappend LeProfil [set TabProfil(BaseDansAlignement,$i)] continue } if { [string equal -nocase $BaseAligneOuBaseDansAlignementOuLesDeux "LesDeux" ]} { lappend LeProfil [list [set TabProfil(BaseAligne,$i)] [set TabProfil(BaseDansAlignement,$i)]] continue } } return $LeProfil } proc LeProfilDeLaQuerySurToutLeBlast_TabBlast {aTabBlast {BaseAligneOuBaseDansAlignementOuLesDeux BaseAligne} {WhatSens BothSens} {LesBanqueId ""}} { upvar $aTabBlast TabBlast foreach BId $LesBanqueId { regsub {_[0-9]+$} $BId "" BId set TabBIdOk($BId) 1 } if {![info exists TabBlast]} {return} set TypeDeBlast [set TabBlast(TypeDeBlast)] set Indice 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleQuery [set TabBlast(Taille)] for {set i 1} {$i <= $TailleQuery} {incr i} { set TabProfil(BaseAligne,$i) 0 set TabProfil(BaseDansAlignement,$i) 0 } set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [set TabBlast($j)] if {[info exists BId_Court]} {unset BId_Court} regsub {_[0-9]+$} $BId "" BId_Court if {$LesBanqueId != "" && ![info exists TabBIdOk($BId_Court)]} {continue} set NbSegments [set TabBlast($BId,NbSegment)] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { if {![info exists TabBlast($BId,$Segment,AlignLineaire)]} {return ""} set DQ [set TabBlast($BId,$Segment,DQ) ] set FQ [set TabBlast($BId,$Segment,FQ) ] set Orientation [set TabBlast($BId,$Segment,Orientation)] set Sens [SensDeLaRegion $Orientation] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set Query [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] set Sens "+" if {$FQ < $DQ} {set Sens "-"} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ = "-"} {continue} for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} {set Pos [expr $PosIni-$i]} else {set Pos [expr $PosIni+$i]} incr TabProfil(BaseDansAlignement,$Pos) if {$AQ == $AS} { if {![info exists TabProfil(BaseAligne,$Pos)]} {continue} incr TabProfil(BaseAligne,$Pos) } } if {$Sens == "-"} {set PosIni [expr $PosIni-$Indice]} else {set PosIni [expr $PosIni+$Indice]} } } } set LeProfil {} for {set i 1} {$i <= $TailleQuery} {incr i} { if {$BaseAligneOuBaseDansAlignementOuLesDeux == "BaseAligne"} { lappend LeProfil [set TabProfil(BaseAligne,$i)] continue } if {$BaseAligneOuBaseDansAlignementOuLesDeux == "BaseDansAlignement"} { lappend LeProfil [set TabProfil(BaseDansAlignement,$i)] continue } if {$BaseAligneOuBaseDansAlignementOuLesDeux == "LesDeux"} { lappend LeProfil [list [set TabProfil(BaseAligne,$i)] [set TabProfil(BaseDansAlignement,$i)]] continue } } return $LeProfil } proc LeProfilDesQueryPos_TSS {TSSPos TFAFile} { ### Determine le profil des QueryPos_TSS (ex: -10001, -10000 ... 0 ... +10000 +10001) set LesQueryPos_TSS {} set QueryLength [TailleDeLaSequenceDuFichierTFA $TFAFile] if {$TSSPos != "1"} { set i 1 } else {set i 2} ### QueryPos_TSS = - $TSSPos +i for {set Pos 1} {$Pos <= $QueryLength} {incr Pos} { set QueryPos_TSS [expr $i - $TSSPos] lappend LesQueryPos_TSS $QueryPos_TSS incr i } return $LesQueryPos_TSS } proc LeProfilDuMAF {MAFFile} { if {![file exists $MAFFile]} {Espionne "MAFFile: $MAFFile does not exists" ; return} #upvar $aTab Tab set LeProfilDuMultiZ {} set i 0 set SuisJeSurUnAli 0 set F [open $MAFFile] while {[gets $F Line] >= 0} { set Line [string trim $Line] regsub -all {[ ]+} $Line " " Line set lLine [split $Line " "] set What [lindex $lLine 0] #Espionne $Line if {$What == "a"} { incr i set Score 0.0 regexp {score=(-*[0-9]+\.[0-9]+)} $Line tmp Score set SuisJeSurUnAli 1 continue } if {!$SuisJeSurUnAli} {continue} if {$What == "s"} { set ID [lindex $lLine 1] # "From +1" car dans un fichier maf le premier residu de la seq a pour position "0" set From [expr [lindex $lLine 2] + 1] set Size [lindex $lLine 3] set Sens [lindex $lLine 4] set Seq [lindex $lLine 6] set To [expr $From + $Size - 1] #Espionne "$i\t$ID\t$From\tto\t$To\t$Sens\t$Size\t$Score" lappend LeProfilDuMultiZ [list $i $ID $From $To $Sens $Size $Score $Seq] } } close $F return $LeProfilDuMultiZ } proc LeProfilNDesQueryPosDuMAF {TFAFile MAFFile} { ### Determine le profil N cad le nb de seq presentes dans un block d'alignement pour chaque position de la query ### N est initialise ici a 0, mais il est incremente qq soit la seq cad que la query est comprise dans N ### RefSeq = Sequence of Reference set LesN {} set LesNOUT {} set LesIDDuMAF {} set QueryLength [TailleDeLaSequenceDuFichierTFA $TFAFile] set RefSeq [lindex [TFA2Header $TFAFile] 0] ### 1- Initialisation de N a 0 pour chaque position de la query for {set i 1} {$i <= $QueryLength} {incr i} { set Tab(QueryPos,$i,N) 0 set Tab(QueryPos,$i,NbBlockAli) 0 } ### 2- Calcul de N pour chaque position de la query ### ne compte pas la seq si le res dans le block d'alignement a cette position est un gap "-", "N" ou "X" foreach lProfilDuMAF [LeProfilDuMAF $MAFFile] { set BlockAli [lindex $lProfilDuMAF 0] set ID [lindex $lProfilDuMAF 1] set From [lindex $lProfilDuMAF 2] set To [lindex $lProfilDuMAF 3] set Score [lindex $lProfilDuMAF 6] set lSeq [split [string toupper [lindex $lProfilDuMAF 7]] ""] if {![info exists Tab($MAFFile,ID,$ID)]} { set Tab($MAFFile,ID,$ID) 1 lappend LesIDDuMAF $ID } ### 2.1- Premier parcours du block d'alignement if {![info exists Tab(BlockAli,$BlockAli)]} { # i parcoure les BlockPos, j les BlockPos ayant un Query Res set IDRefSeq $ID set i 0 set j 0 set Tab(BlockAli,$BlockAli,LesBlockPos) {} set Tab(BlockAli,$BlockAli,LesBlockPosDeLaQuery) {} set BlockQueryPosBegin $From set BlockQueryPosEnd $To foreach Res $lSeq { lappend Tab(BlockAli,$BlockAli,LesBlockPos) $i if {$Res == "N" || $Res == "X" ||![regexp {[A-Z]} $Res]} {incr i ; continue} set QueryPos [expr $From + $j] #Espionne "Res: $Res ; BlockPos: $i ; QueryPos: $QueryPos" lappend Tab(BlockAli,$BlockAli,LesBlockPosDeLaQuery) $i set Tab(BlockAli,$BlockAli,BlockPosDeLaQuery,$i,QueryPos) $QueryPos #Espionne "Tab(BlockAli,$BlockAli,BlockPosDeLaQuery,$i,QueryPos): $QueryPos" incr i incr j } # Compte dans combien de BlockAli sont presentes chaque QueryPos for {set QueryPos $From} {$QueryPos <= $To} {incr QueryPos} { incr Tab(QueryPos,$QueryPos,NbBlockAli) } set Tab(BlockAli,$BlockAli) 1 } ### 2.2- Parcours suivants du block d'alignement, incrementation de N ### N n'est donc pas incremente si la pos de la query n'est pas presente dans un block d'alignement, d'ou "4-" foreach BlockPosDeLaQuery [set Tab(BlockAli,$BlockAli,LesBlockPosDeLaQuery)] { set Res [lindex $lSeq $BlockPosDeLaQuery] set QueryPos [set Tab(BlockAli,$BlockAli,BlockPosDeLaQuery,$BlockPosDeLaQuery,QueryPos)] ### si cette QueryPos a deja ete rencontree avec ces deux meme organismes, on continue ### cad que l'on incremente qu'une fois N par couple d'organismes pour chaque QueryPos if {[info exists Tab(IDRefSeq,$IDRefSeq,ID,$ID,QueryPos,$QueryPos)]} { Espionne "!!!Overlapping: IDRefSeq $IDRefSeq,ID $ID,QueryPos $QueryPos!!!" continue } if {$Res == "N" || $Res == "X" ||![regexp {[A-Z]} $Res]} {continue} # on cree cette info seulement si le res n'est pas "N", "X" ou "-" set Tab(IDRefSeq,$IDRefSeq,ID,$ID,QueryPos,$QueryPos) 1 incr Tab(QueryPos,$QueryPos,N) ###test, a enlever!!! if {1} { if {[set Tab(QueryPos,$QueryPos,N)] > $LesIDDuMAF} { set N [set Tab(QueryPos,$QueryPos,N)] Espionne "N: $N, BlockAli: $BlockAli,BlockPosDeLaQuery: $BlockPosDeLaQuery,QueryPos: $QueryPos,Res: $Res" } } } } ### 3- Creation de la liste LeProfilN ### i parcoure toutes les positions de la query for {set i 1} {$i <= $QueryLength} {incr i} { lappend LesN [set Tab(QueryPos,$i,N)] } ###test, a enlever!!! if {0} { set i 0 foreach N $LesN { if {$N > $LesIDDuMAF} {Espionne "N: $N ; QueryPos: $i ; NbBlockAli: [set Tab(QueryPos,$QueryPos,NbBlockAli)]"} incr i } } ### 4-Pour les positions pas presentes dans un BlockAli, met n a 1 car il y a au moins la seq query #set toto 0 foreach N $LesN { #incr toto if {$N == "0"} { set N 1 #Espionne "Pos: $toto / N: $N" } lappend LesNOUT $N } return $LesNOUT } proc LeProfilnDesQueryPosDuMAF {TFAFile MAFFile} { ### Determine le profil n cad le nb de seq presentes dans un block d'alignement pour chaque position de la query ### n est, pour chaque position de la query, ### le nb de seq dont le res aligne a cette position est identique au residu de la query ### n est ici initialise a 0, mais il est incremente pour chaque access du maf, ### si position pas presente dans un alignement (QueryRes=gapouNouX), alors n est incremente a 1 (== query seq) ### RefSeq = Sequence of Reference set Lesn {} set LesnOUT {} set QueryLength [TailleDeLaSequenceDuFichierTFA $TFAFile] set RefSeq [lindex [TFA2Header $TFAFile] 0] ### 1- Initialisation de n a 0 pour chaque position de la query for {set i 1} {$i <= $QueryLength} {incr i} { set Tab(QueryPos,$i,n) 0 set Tab(QueryPos,$i,NbBlockAli) 0 } ### 2- Calcul de n pour chaque position de la query ### ne compte pas la seq si le res dans le block d'alignement a cette position est un gap "-", "N" ou "X" foreach lProfilDuMAF [LeProfilDuMAF $MAFFile] { set BlockAli [lindex $lProfilDuMAF 0] set ID [lindex $lProfilDuMAF 1] set From [lindex $lProfilDuMAF 2] set To [lindex $lProfilDuMAF 3] set Score [lindex $lProfilDuMAF 6] set lSeq [split [string toupper [lindex $lProfilDuMAF 7]] ""] ### 2.1- Premier parcours du block d'alignement if {![info exists Tab(BlockAli,$BlockAli)]} { # i parcoure les BlockPos, j les BlockPos ayant un Query Res set IDRefSeq $ID set i 0 set j 0 set Tab(BlockAli,$BlockAli,LesBlockPos) {} set Tab(BlockAli,$BlockAli,LesBlockPosDeLaQuery) {} set BlockQueryPosBegin $From set BlockQueryPosEnd $To foreach Res $lSeq { lappend Tab(BlockAli,$BlockAli,LesBlockPos) $i if {$Res == "N" || $Res == "X" ||![regexp {[A-Z]} $Res]} {incr i ; continue} set QueryPos [expr $From + $j] lappend Tab(BlockAli,$BlockAli,LesBlockPosDeLaQuery) $i set Tab(BlockAli,$BlockAli,BlockPosDeLaQuery,$i,QueryPos) $QueryPos set Tab(BlockAli,$BlockAli,BlockPosDeLaQuery,$i,QueryRes) $Res incr i incr j } # Compte dans combien de BlockAli sont presentes chaque QueryPos for {set QueryPos $From} {$QueryPos <= $To} {incr QueryPos} { incr Tab(QueryPos,$QueryPos,NbBlockAli) } set Tab(BlockAli,$BlockAli) 1 } ### 2.2- Parcours suivants du block d'alignement, incrementation de n foreach BlockPosDeLaQuery [set Tab(BlockAli,$BlockAli,LesBlockPosDeLaQuery)] { set Res [lindex $lSeq $BlockPosDeLaQuery] set QueryPos [set Tab(BlockAli,$BlockAli,BlockPosDeLaQuery,$BlockPosDeLaQuery,QueryPos)] set QueryRes [set Tab(BlockAli,$BlockAli,BlockPosDeLaQuery,$BlockPosDeLaQuery,QueryRes)] #Espionne "BlockAli,$BlockAli,BlockPosDeLaQuery,$BlockPosDeLaQuery,ID,$ID,Res,$Res,QueryRes,$QueryRes" if {$Res != $QueryRes} {continue} ### si cette QueryPos a deja ete rencontree avec ces deux meme organismes, on continue ### cad que l'on incremente qu'une fois n par couple d'organismes pour chaque QueryPos if {[info exists Tab(IDRefSeq,$IDRefSeq,ID,$ID,QueryPos,$QueryPos)]} {continue} if {$Res == "N" || $Res == "X" ||![regexp {[A-Z]} $Res]} {continue} # on cree cette info seulement si le res n'est pas "N", "X" ou "-" set Tab(IDRefSeq,$IDRefSeq,ID,$ID,QueryPos,$QueryPos) 1 incr Tab(QueryPos,$QueryPos,n) #Espionne "[set Tab(QueryPos,$QueryPos,n)]" } } ### 3- Creation de la liste LeProfiln ### i parcoure toutes les positions de la query for {set i 1} {$i <= $QueryLength} {incr i} { lappend Lesn [set Tab(QueryPos,$i,n)] } ### 4-Pour les positions pas presentes dans un BlockAli, met n a 1 car il y a au moins la seq query foreach n $Lesn { if {$n == "0"} {set n 1} lappend LesnOUT $n } return $LesnOUT } proc LeProfilnSurNDesQueryPosDuMAF {Lesn LesN} { set LeProfilnSurN {} foreach n $Lesn N $LesN { ### met nSurN a 0 si n=0 ou si seule la query a un residu a cette position, sinon calcul de nSurN ### n=0 signifie que cette QueryPos n'est pas dans les blocks d'alignement if {$n == 1 || ($n == 1 && $N == 1)} {set nSurN 0} else {set nSurN [expr $n * 1.0 / $N]} ### lappend LeProfilnSurN $nSurN } return $LeProfilnSurN } proc LeRepertoireDeRefSeq {Acc} { Wup "Design de RefSeq complet, environ 19000" Wup "Les fichiers de la banque RefSeq ont ete separes dans des sous repertoires" Wup "19700 entrees NM reparties dans 371 repertoires" Wup "Une entree refseq NMXXXXXX, nous avons donc pris les 4 premies chiffres" Wup "ex: NM012349 sera stockee dans le repertoire NM0123" set Rep "" if {! [regexp {NM[0-9]{4}} $Acc Rep]} { return "" } else { return "$Rep" } } proc LeTamis {Tam {Commande ""}} { global RepertoireDuGenome global LeTamis global LeTamisDeLaCommande Wup "Manages the file and array containing the Tamis" set FichierDesTamis "$RepertoireDuGenome/fiches/nomcommande-tamis" if {$Tam=="RelireEtReecrireLeFichierDesTamis"} { if {[info exists LeTamis]} {unset LeTamis} set ReecrireLeFichierDesTamis 1 } else { set ReecrireLeFichierDesTamis 0 } if {$Tam=="NeConnaitPasEncore" || $Tam=="LeNomDuTamisAssocieA"} { if { ! [info exists LeTamis(EstCharge)]} { LeTamis Turlututu } if {[info exists LeTamisDeLaCommande($Commande)]} { return 0 } else { if {$Tam=="NeConnaitPasEncore"} { return 1 } if {$Tam=="LeNomDuTamisAssocieA"} { return [set LeTamisDeLaCommande($Commande)] } } } if {$Commande!=""} { set CommandeExistante [LeTamis $Tam] if {$CommandeExistante=="TamisInconnu"} { AppendAuFichier $FichierDesTamis "$Tam $Commande" if {[info exists LeTamis]} { unset LeTamis } return [LeTamis $Tam] } if {$CommandeExistante==$Commande} { return $Commande } if {[OuiOuNon " The new\n$Tam $Commande\n wants to replace the old\n$Tam $CommandeExistante\n Do you want to replace it ?"]} { AppendAuFichier $FichierDesTamis "$Tam $Commande" if {[info exists LeTamis]} { unset LeTamis } LeTamis "RelireEtReecrireLeFichierDesTamis" return [LeTamis $Tam] } return "" } if {[info exists LeTamis($Tam)]} { return [set LeTamis($Tam)]} if {[info exists LeTamis(EstCharge)]} { return "TamisInconnu"} if {[file exists $FichierDesTamis]} { set LesLignesTamis [LesLignesDuFichier $FichierDesTamis] } else { set LesLignesTamis {} } if {[info exists LeTamis]} { unset LeTamis } foreach Ligne $LesLignesTamis { scan $Ligne "%s" TamisLu regsub "$TamisLu " $Ligne "" CommandeLue set LeTamis($TamisLu) $CommandeLue set LeTamisDeLaCommande($CommandeLue) $TamisLu } set LesLignesTamis {} set LaListe {} foreach TamExistant [lsort [array names LeTamis]] { lappend LeTamis(LaListeMerci) $TamExistant lappend LesLignesTamis "$TamExistant [set LeTamis($TamExistant)]" } if {$ReecrireLeFichierDesTamis} { SauveLesLignes $LesLignesTamis dans $FichierDesTamis } set LeTamis(EstCharge) "TamisCharge" if {[info exists LeTamis($Tam)]} { return [set LeTamis($Tam)]} if {[info exists LeTamis(EstCharge)]} { return "TamisInconnu"} } proc LeUGIdUN_Fastacmd {LesAccess {UGIdOnly ""}} { Wup "Recupere grace a fastacmd le numero unigene" #####lcl|UG:Hs#S1730160 #Homo sapiens actin, alpha 1, skeletal muscle (ACTA1), /cds=(104,1237) /gb=NM_001100 /gi=5016087 /ug=Hs.1288 /len=1374 set LesResultats "" foreach Acc $LesAccess { set EnteteFCmd [FastaCmd "$Acc" "" 0] set tmp "" set tmp2 "" set Res [regexp -nocase {/ug=([a-z][a-z].[0-9]+)} $EnteteFCmd tmp tmp2] if {$UGIdOnly==""} { lappend LesResultats "$Acc $tmp2" } else { lappend LesResultats "$tmp2" } } return $LesResultats } proc LeUGIdUN_Getz {Access {Banques ""} {Link ""} {FullOut 0}} { Wup "Permet de recuperer l acc unigene (Hs.524782) a partir de l acc uniseq (Hs_S1000253 ou Hs#S1000253)" if {$Banques==""} {set Banques "uniseq"} if {$Link ==""} {set Link "unigene"} set LesAccess "" set UnAccess "" if {$Banques == "uniseq"} { foreach AC [lsort -unique $Access] { set UnAccess [lindex $AC 0] if {[regexp -nocase "UG:" $AC]} {regsub -all "UG:" $UnAccess "" UnAccess} if {[regexp -nocase "Hs#" $AC]} {regsub -all "Hs#" $UnAccess "Hs_" UnAccess} if {[regexp -nocase "Mm#" $AC]} {regsub -all "Mm#" $UnAccess "Mm_" UnAccess} lappend LesAccess $UnAccess } set Access [join $LesAccess "|"] } if {$Access == ""} {return ""} set option "-vf \"ugi\" -cs \";\"" #On utilise le champs ugi dans Uniseq pour obtenir l Id Unigene set Commande "getz $option \"\\\[$Banques-all: $Access\\\]\"" #UNISEQ:Hs_S1000253;Hs.524782 #On utilise le champs ugi dans Uniseq pour obtenir l Id Unigene #set Commande "getz $option \"\\\[$Banques-all: $Access\\\] \\\> $Link \"" #UNIGENE:Hs_S1000253;Hs.524782 catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message set UGId "" if {![info exists GetzOut]} {return ""} if { $GetzOut == ""} {return ""} foreach ID $GetzOut { if {$FullOut} {lappend UGId [split $ID ";"]} else {lappend UGId [lindex [split $ID ";"] 1]} } #set UGId [lindex [split $GetzOut ";"] 1] return "$UGId" } proc LeUnigeneDeUniseq {LesAcc} { Wup "Permet de recuperer l acc unigene (Hs.524782) a partir de l acc uniseq (Hs_S1000253 ou Hs#S1000253)" if {$LesAcc==""} {return ""} set Resultat "" set Resultat [LeUGIdUN_Getz $LesAcc uniseq unigene 0] if { $Resultat==""} { set Resultat [LeUGIdUN_Fastacmd $LesAcc UGIdOnly] } set Resultat [join $Resultat ""] return $Resultat } proc LeUnigeneDeUniseq_GUI {LesAcc} { Wup "Permet de recuperer l acc unigene (Hs.524782) a partir de l acc uniseq (Hs_S1000253 ou Hs#S1000253)" if {$LesAcc==""} {return ""} set Resultat "" set Resultat [LeUGIdUN_Getz $LesAcc uniseq unigene 1] if { $Resultat==""} { set Resultat [LeUGIdUN_Fastacmd $LesAcc] } if { $Resultat==""} { set Resultat "No Unigene Id or link available for [join $LesAcc " "]" } else { set Resultat [join $Resultat "\n"] } set Fen [AfficheVariable $Resultat "AvecFormateAvecBlaste" "Unigene Id search"] return $Fen } proc LeaveBox {K X Y} { global CouleurEnEntree oldText if { ! [info exists CouleurEnEntree]} { return } set Id [$K find withtag current] $K itemconfigure $Id -fill $CouleurEnEntree # ShowBox $K $X $Y "Leave" } proc LectureBilanHDACroises {aLesFamilles aLesOrgCibles aBilan {Fichier ""}} { global RepertoireDuGenome upvar $aLesFamilles LesFamilles upvar $aLesOrgCibles LesOrgCibles upvar $aBilan Bilan set LesFamilles [list] set LesOrgCibles [list] set FichierDefaut "$RepertoireDuGenome/fiches/bilan_hda_croises" if {$Fichier=="AskForFile"} { set Fichier [ButineArborescence "All" $FichierDefaut] if {$Fichier==""} { return "" } } if {$Fichier==""} { set Fichier $FichierDefaut } if {![file exists $Fichier]} {return ""} foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s %s %s" Fam Org TblastN BlastP Jaune set Bilan($Fam,$Org) [list $TblastN $BlastP $Jaune] if {![info exists DejaVuF($Fam)]} { lappend LesFamilles $Fam set DejaVuF($Fam) 1 } if {![info exists DejaVuO($Org)]} { lappend LesOrgCibles $Org set DejaVuO($Org) 1 } } return $Fichier } proc LectureClusters {File atab aNG {NmG Group}} { upvar $atab tab upvar $aNG NomsGroupe set NmG "Group" # Lit les fichiers issus de CLUSPACK mais # SANS LES COORDONNEES !!! set LLignes [LesLignesDuFichier $File] # set Ln [split [lindex $LLignes 0] ":"] # set NbrGrp [string trim [lindex $Ln 1]] set LLignes [lrange $LLignes 2 end] set i 1 foreach l $LLignes { if {[regexp {^Cluster|^Unclustered} $l]} { set NmGrp "$NmG$i" lappend NomsGroupe $NmGrp } elseif {$l != ""} { lappend tab($NmGrp) [string trim $l] } else { incr i } } return 1 } proc LectureDeChainePDB {LesLignes MolId {Polymer 1}} { global PDB_[set MolId]_TypAtm global PDB_[set MolId]_NomAtm global PDB_[set MolId]_NomRes1l global PDB_[set MolId]_NomRes3l global PDB_[set MolId]_NmrRes global PDB_[set MolId]_ChnIdn global PDB_[set MolId]_AtmXYZ global PDB_[set MolId]_AtmBQ global PDB_[set MolId]_Sequence global PDB_[set MolId]_Header global PDB_[set MolId]_Site set Vraia 0 set ChaineCourant -1 set ResiduCourant -999 set AlterLocRes "" set CC "" set PremRes 1 set Latmn {} set Latmx {} set Latmb {} set Latmz {} foreach ligne $LesLignes { set ee " $ligne" set AtomName [string range $ee 13 16] # set AlterLocRes [string index $ee 17] set NomRes3L [string range $ee 18 20] set NomRes1L [AutreCodeLuc $NomRes3L] scan [string range $ee 23 27] "%s" ResidueNumber scan [string range $ee 31 54] "%8f%8f%8f" x y z set AtomXYZ [list $x $y $z] scan [string range $ee 55 66] "%6f%6f" q b set AtomBQ [list $b $q] set AtomNA [NoAtomicDe [string trim [string range $ee 77 78]]] ## ATTENTION !! # Cette version ne lit pas les hydrogenes ! if {$AtomNA==1} {continue} # if {[regexp {^[0-9H]} [string trim $AtomName]]} {continue} set ChainIdent [string index $ee 22] # if {$AlterLocRes ne ""} {continue} if {$ResiduCourant == -999} { set ResiduCourant $ResidueNumber set CC $ChainIdent } if {$ResidueNumber != $ResiduCourant} { lappend PDB_[set MolId]_TypRes($CC) $Polymer lappend PDB_[set MolId]_NomRes1l($CC) $N1LCou lappend PDB_[set MolId]_NomRes3l($CC) $N3LCou lappend PDB_[set MolId]_NmrRes($CC) $ResiduCourant lappend PDB_[set MolId]_NomAtm($CC) $Latmn lappend PDB_[set MolId]_AtmXYZ($CC) $Latmx lappend PDB_[set MolId]_AtmBQ($CC) $Latmb lappend PDB_[set MolId]_AtmNA($CC) $Latmz set Latmn {} set Latmx {} set Latmb {} set Latmz {} if {$ChainIdent ne $ChaineCourant} { lappend PDB_[set MolId]_ChnIdn $ChainIdent set ChaineCourant $ChainIdent set CC $ChainIdent } } lappend Latmn $AtomName lappend Latmx $AtomXYZ lappend Latmb $AtomBQ lappend Latmz $AtomNA set ResiduCourant $ResidueNumber set N3LCou $NomRes3L set N1LCou $NomRes1L } if { ! [info exists N1LCou]} { return 0 } # lappend ChnIdn $CC lappend PDB_[set MolId]_TypRes($CC) $Polymer lappend PDB_[set MolId]_NomRes1l($CC) $N1LCou lappend PDB_[set MolId]_NomRes3l($CC) $N3LCou lappend PDB_[set MolId]_NmrRes($CC) $ResiduCourant lappend PDB_[set MolId]_NomAtm($CC) $Latmn lappend PDB_[set MolId]_AtmXYZ($CC) $Latmx lappend PDB_[set MolId]_AtmBQ($CC) $Latmb lappend PDB_[set MolId]_AtmNA($CC) $Latmz return $Vraia set PremiereChaine "" if {! [info exists PDB_[set MolId]_ChnIdn]} { set LdesC {} } else { set LdesC [set PDB_[set MolId]_ChnIdn] } set ChaineCourant -1 set AtmTypCourant "" set NomResCourant "" set ResiduCourant -999 set AlterLocRes "" set CC "" set PremRes 1 set Latmn {} set Latmx {} set Latmb {} foreach ligne $LesLignes { set ee " $ligne" set AtmTyp [string range $ee 1 4] set AtomName [string range $ee 13 16] # set AlterLocRes [string index $ee 17] set ResidueName [string range $ee 18 20] set ChainIdent [string range $ee 22 22] if {$PremiereChaine eq ""} {set PremiereChaine $ChainIdent} scan [string range $ee 23 27] "%s" ResidueNumber scan [string range $ee 31 54] "%8f%8f%8f" x y z set AtomXYZ [list $x $y $z] scan [string range $ee 55 66] "%6f%6f" q b set AtomBQ [list $b $q] # ATTENTION ! On ne prend pas les hydrogenes ! if {[string index [string trim $AtomName] 0] eq "H"} {continue} if {[lsearch $LdesC $ChainIdent] != -1} {continue} # if {$AlterLocRes ne ""} {continue} if {$ResiduCourant == -999} { set ResiduCourant $ResidueNumber set NomRes1L [AutreCodeLuc $ResidueName] set CC $ChainIdent set AtmTyp $AtmTyp } if {$ResidueNumber != $ResiduCourant} { set NomRes1L [AutreCodeLuc $ResidueName] lappend PDB_[set MolId]_NomRes($CC) $NomResCourant lappend PDB_[set MolId]_NmrRes($CC) $ResiduCourant lappend PDB_[set MolId]_TypAtm($CC) $AtmTypCourant lappend PDB_[set MolId]_NomAtm($CC) $Latmn lappend PDB_[set MolId]_AtmXYZ($CC) $Latmx lappend PDB_[set MolId]_AtmBQ($CC) $Latmb set Latmn {} set Latmx {} set Latmb {} if {$ChainIdent ne $ChaineCourant} { lappend PDB_[set MolId]_ChnIdn $ChainIdent set ChaineCourant $ChainIdent set CC $ChainIdent } } lappend Latmx $AtomXYZ lappend Latmb $AtomBQ lappend Latmn $AtomName set AtmTypCourant $AtmTyp set ResiduCourant $ResidueNumber set NomResCourant $NomRes1L } # lappend PDB_[set MolId]_ChnIdn $ChainIdent if {$NomResCourant ne "XXX"} { lappend PDB_[set MolId]_NomRes($CC) $NomResCourant lappend PDB_[set MolId]_NmrRes($CC) $ResiduCourant lappend PDB_[set MolId]_TypAtm($CC) $AtmTypCourant lappend PDB_[set MolId]_NomAtm($CC) $Latmn lappend PDB_[set MolId]_AtmXYZ($CC) $Latmx lappend PDB_[set MolId]_AtmBQ($CC) $Latmb } return $Vraia } proc LectureEtIntegrationDesRefsRho {{FichierOut ""}} { Wup "Permet de lire le fichier contenant les nouvelles references pour les sequences Rho" Wup "Permet de verifier si possede deja la ref et sinon de la stocker au format TFA" set Fichier "[RepertoireDuGenome]/LV_Rho_RefAdd_sept04.txt" if {$FichierOut==""} { set FichierOut "[RepertoireDuGenome]/NewRhoTFA.tfas" } set LesAccess "" #Official gene symbol and Name (HGNC) Reference NCBI Fonction Synonyme Observations #PAK5 AB_040812 Rho-effector p21-activated kinase 5 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [regexp -nocase "^Official" $Ligne]} {continue} set LigneSplitee [split $Ligne "\t"] set Name [lindex $LigneSplitee 0] set Access [lindex $LigneSplitee 1] set Definition [lindex $LigneSplitee 2] if {$Access==""} {continue} lappend LesAccess $Access } close $F #Espionne "NbAccess [llength $LesAccess]" set LesAccess [lsort -unique $LesAccess] #Espionne "NbAccess [llength $LesAccess]" set nbendouble 0 set NewAccess "" foreach Acc $LesAccess { if {![regexp "^RSHUM:NM" $Acc]} { regsub "^NM_" $Acc "RSHUM:NM" Acc } if {[InterrogeLesAccessRefSeqDesPABs $Acc] == "1"} { #Espionne "$Acc en double" incr nbendouble continue } lappend NewAccess $Acc } set NewAccess [lsort -unique $NewAccess] #Espionne "NbAccess [llength $NewAccess]" #Espionne "NbEnDouble $nbendouble" foreach NAcc $NewAccess { if {[regexp "^RSHUM:NM" $NAcc]} { regsub "^RSHUM:NM" $NAcc "NM_" NAcc } set Entete ">$NAcc from NCBI" #Espionne "$Entete" set Sequence [SequenceDuNCBI $NAcc nucleotide] if {$Sequence == ""} { Espionne "Pb $NAcc" } #Espionne "$Sequence" set Tfa [join [list $Entete $Sequence] "\n"] AppendAuFichier $FichierOut $Tfa } return "" } proc LectureOrdaliDB {file} { global LNOrdali LSOrdali {*}[info globals "TD*"] global Sequences TabSF ListeDesFragments global LNDG SDG db CompteurDeMac Defauts set db root sqlite3 $db $file -nomutex 1 if {0 && [VersionOrdalieDB]} { UpgradeOrdalieDB } # fichier backup de db file tempfile Defauts(FichierOBK) $db backup $Defauts(FichierOBK) $db eval {begin transaction} # Paramtres Ordalie set Lkv [$db eval {select * from ordalie}] set Lt [$db eval {select distinct(var) from ordalie}] global {*}$Lt foreach {t k v} $Lkv { set ${t}($k) $v } InitInfoArrays global {*}[info globals "TD*"] set Li [$db eval {select * from seqinfo}] set Ln [$db eval {select seqname from seqinfo}] set i 0 ; set k 0 while {$i < [llength $Li]} { set Lval [lrange $Li $i [expr {$i+17}]] set n [lindex $Ln $k] foreach t {tmp TDesSeqnames TDesAccess TDesBId TDesDescriptifs TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesPhylum TDesGO TDuLineage TDesHydro TDespI TDesMolW tmp} v $Lval { if {$t eq "tmp"} {continue} set ${t}($n) $v } incr i 18 incr k } set ListeDesFragments [list] foreach k [array names TDesFragment] { if {[set TDesFragment($k)]} { lappend ListeDesFragments $k } } set pkm [$db eval {select max(pk_mac) from mac}] set nom [$db eval {select name from mac where pk_mac=$pkm}] $db eval {commit} LesDefauts IxMacCourant $pkm LesDefauts NmMacCourant $nom set CompteurDeMac $pkm CreatePDBFromDB CreeVue InitPosSeqGenGenSeq InfosDesPDB TraiteAABizarres CalculeComposition CalculeMolecularWeight LogSeqInfoGlobales LogLesCompositions return } proc LecturePolyr {} { global Ltrig Lvert Lnorm set Ll [LesLignesDuFichier toto.nff] lassign [split [lindex $Ll 3] " "] nvec tom tom] puts "nvert $nvec" set i 4 set k 0 while {$k < $nvec} { set l [lindex $Ll $i] regsub -all { +} $l " " l lassign [split $l " "] x y z tmp lappend Lvert [list $x $y $z] incr i incr k } puts "line : [lindex $Ll $i]" puts "nvert [llength $Lvert]" set ntrig [lindex $Ll $i] incr i set k 0 puts "face $ntrig" while {$k < $ntrig} { set l [lindex $Ll $i] regsub -all { +} $l " " l lassign [split [string trim $l]] n a b c tmp lappend face [list $a $b $c] incr i incr k } puts "faces [llength $face]" puts "line : [lindex $Ll $i]" set nnorm [lindex $Ll $i] set k 0 incr i puts "norm $nnorm" while {$k < $nnorm} { set l [lindex $Ll $i] regsub -all { +} $l " " l lassign [split [string trim $l]] x y z lappend Lnorm [list $x $y $z] incr i incr k } puts "nnorms [llength $Lnorm]" puts [join [lrange $face end-10 end] \n] foreach f $face { lassign $f a b c lappend Ltrig [list [lindex $Lvert $a] [lindex $Lvert $b] [lindex $Lvert $c]] } return } proc LectureQHull {} { global Ltrig Lnorm Lvert set Ll [LesLignesDuFichier coord.vec] set i -1 set lec 0 while {$i < [llength $Ll]} { incr i set l [lindex $Ll $i] if {[regexp {OFF} $l]} { set lec 1 set k 0 continue } if {$lec} { regsub -all { +} [string trim $l] " " l if {$k < 3} { lassign [split $l " "] x y z lappend Lvert [list $x $y $z] incr k } else { lassign [split $l " "] n a b c nx ny nz t p lappend Lnorm [list $nx $ny $nz] set lec 0 } } } foreach {v1 v2 v3} $Lvert { lappend Ltrig [list $v1 $v2 $v3] } return } proc Lego {FiPdb FiMod FiFa {FragSize ""} {FragNumber ""} {StackSize ""}} { if {$FragSize ==""} { set FragSize 5 } if {$FragNumber==""} { set FragNumber 20 } if {$StackSize !=""} { set Options "-g $StackSize" } exec /home/koehl/program/lego/Lego -i $FiPdb -o $FiMod -f $FiFa -s $FragSize -n $FragNumber $Options return $FiMod } proc LemRNADeLAccessProt {Access} { set TailleProt [TailleDeLaProt_PageInfo [PageInfo $Access protein ID]] if {$TailleProt == ""} { set SeqProt [SequenceDeLAccess $Access protein] regsub -nocase {[^a-z]*} $SeqProt "" SeqProt set TailleProt [string length $SeqProt] } set LesAcNucs [ElimineLesRedondancesDansUneListe [LesAcNucsDeLAccess $Access]] set LesmRNACandidats [LesmRNAsDesAcNucs $LesAcNucs] return [LeMeilleurmRNACandidat $LesmRNACandidats $TailleProt] } proc LemRNADeLAccessProt_PageInfo {PageInfo} { set TailleProt [TailleDeLaProt_PageInfo $PageInfo] set LesAcNucs [ElimineLesRedondancesDansUneListe [LesAcNucsDeLAccess_PageInfo $PageInfo]] set LesmRNACandidats [LesmRNAsDesAcNucs $LesAcNucs] return [LeMeilleurmRNACandidat $LesmRNACandidats $TailleProt] } proc LeonEtMacsimPourTous {{Liste ""} {Keep ""} {SqueezeLeon ""}} { set SqueezeLeon [string equal -nocase $SqueezeLeon "SqueezeLeon"] set RepLeo "[RepertoireDuGenome]/msfLeon" set RepLog "[RepertoireDuGenome]/leonLog" set RepRsf "[RepertoireDuGenome]/macsimRsf" set RepXml "[RepertoireDuGenome]/macsimXml" if {$SqueezeLeon} { set RepLeo "[RepertoireDuGenome]/msf" } if { ! [file exists $RepLeo]} {file mkdir $RepLeo} if { ! [file exists $RepLog]} {file mkdir $RepLog} if { ! [file exists $RepRsf]} {file mkdir $RepRsf} if { ! [file exists $RepXml]} {file mkdir $RepXml} if {$Keep==""} { set Keep "Keep" } if {$Keep=="Keep"} { set Keep 1 } else { set Keep 0 } if {[regexp "^StartWith" $Liste]} { set Premier [StringApres "StartWith" dans $Liste] set Liste [ListeDesPABs] set I [lsearch $Liste $Premier] set Liste [lrange $Liste $I end] } else { if {$Liste==""} { set Liste [ListeDesPABs] } if {[EstUnPAB $Liste]} { set Liste [list $Liste] } } foreach Nom $Liste { Espionne "LeonEtMacsim s'occupent de $Nom" set FichierMSF "[RepertoireDuGenome]/msf/$Nom" if { ! [file exists $FichierMSF]} { continue } if {[file size $FichierMSF] < 50} { continue } set FichierLeo "$RepLeo/$Nom" set FichierLog "$RepLog/$Nom" set FichierRsf "$RepRsf/$Nom" set FichierXml "$RepXml/$Nom" set Query $Nom if {[regexp "QUERY_PROTEIN" [ContenuDuFichier $FichierMSF]]} { set Query "QUERY_PROTEIN" } regsub ".rsf$" $FichierRsf "" FichierRsfSansExtension if { $Keep && [file exists $FichierRsfSansExtension]} { continue } if { $Keep && [file exists $FichierRsf]} { continue } if {[PasTouche $Nom]} { continue } set OnTeste [OnTraite "TestUniref"] set CommandeLeon "leon" if {$OnTeste} { set CommandeLeon "/home/julie/LEON2/leon2.tcsh" } if { ! [file exists $FichierLeo]} { if {[file exists $FichierLog]} { file delete $FichierLog } set FichierLeoXml $FichierLeo.xml if {[file exists $FichierLeoXml]} { file delete $FichierLeoXml } Espionne "$CommandeLeon $FichierMSF $Query $FichierLeo $FichierLog" exec $CommandeLeon $FichierMSF $Query $FichierLeo $FichierLog } if {[file exists $FichierXml]} { file delete $FichierXml } if {[file exists $FichierRsf]} { file delete $FichierRsf } if { ! [file exists $FichierLeo]} { set MonMessage "$FichierLeo was not created by Leon ... Bouhhh !" AppendAuFichier $FichierLog $MonMessage Warne $MonMessage FinPasTouche $Nom continue } ConvertToOneHundred $FichierLeo $FichierLeo if { ! $OnTeste } { NousAllonsAuBoulot set FichierRsfLog "$FichierRsf.log" if {[file exists $FichierRsfLog]} {file delete $FichierRsfLog} Espionne "ExecuteMacsim $FichierLeo $FichierRsf" set Message [ExecuteMacsim $FichierLeo $FichierRsf] OnRevientDuBoulot set FichierRsfRsf "$FichierRsf.rsf" set FichierRsfXml "$FichierRsf.xml" if {[file exists $FichierRsfXml]} { file rename $FichierRsfXml $FichierXml } if { ! [file exists $FichierRsfRsf]} { set MonMessage "$FichierRsfRsf was not created. I got the message\n$Message" Warne $MonMessage AppendAuFichier $FichierRsfLog $MonMessage } else { file rename $FichierRsfRsf $FichierRsf if {[file exists $FichierRsfLog]} { file delete $FichierRsfLog } Espionne "$FichierRsf is OK !" } } FinPasTouche $Nom } } proc LeonEtMacsimPourTousX {{Liste ""} {Keep ""}} { set RepLeo "[RepertoireDuGenome]/msfLeon" set RepLog "[RepertoireDuGenome]/leonLog" set RepRsf "[RepertoireDuGenome]/macsimRsf" set RepXml "[RepertoireDuGenome]/macsimXml" if { ! [file exists $RepLeo]} {file mkdir $RepLeo} if { ! [file exists $RepLog]} {file mkdir $RepLog} if { ! [file exists $RepRsf]} {file mkdir $RepRsf} if { ! [file exists $RepXml]} {file mkdir $RepXml} if {$Keep==""} { set Keep "Keep" } if {$Keep=="Keep"} { set Keep 1 } else { set Keep 0 } if {[regexp "^StartWith" $Liste]} { set Premier [StringApres "StartWith" dans $Liste] set Liste [ListeDesPABs] set I [lsearch $Liste $Premier] set Liste [lrange $Liste $I end] } else { if {$Liste==""} { set Liste [ListeDesPABs] } if {[EstUnPAB $Liste]} { set Liste [list $Liste] } } #Peut-etre rajouter ici un pastouche!!! Pou ne pas modifie ce qui a deja ete fait!!!??? foreach Nom $Liste { Espionne "LeonEtMacsim s'occupent de $Nom" set FichierMSF "[RepertoireDuGenome]/alignFasta/$Nom" if { ! [file exists $FichierMSF]} { continue } if {[file size $FichierMSF] < 50} { continue } set FichierLeo "$RepLeo/$Nom" set FichierLog "$RepLog/$Nom" set FichierRsf "$RepRsf/$Nom" set FichierXml "$RepXml/$Nom" set Query $Nom if {[regexp "QUERY_PROTEIN" [ContenuDuFichier $FichierMSF]]} { set Query "QUERY_PROTEIN" } regsub ".rsf$" $FichierRsf "" FichierRsfSansExtension if { $Keep && [file exists $FichierRsfSansExtension]} { continue } if { $Keep && [file exists $FichierRsf]} { continue } if {[PasTouche $Nom]} { continue } if { ! [file exists $FichierLeo]} { if {[file exists $FichierLog]} { file delete $FichierLog } exec leon $FichierMSF $Query $FichierLeo $FichierLog } if {[file exists $FichierXml]} { file delete $FichierXml } if {[file exists $FichierRsf]} { file delete $FichierRsf } if { ! [file exists $FichierLeo]} { set MonMessage "$FichierLeo was not created by Leon ... Bouhhh !" AppendAuFichier $FichierLog $MonMessage Warne $MonMessage FinPasTouche $Nom continue } ConvertToOneHundred $FichierLeo $FichierLeo NousAllonsAuBoulot set FichierRsfLog "$FichierRsf.log" if {[file exists $FichierRsfLog]} {file delete $FichierRsfLog} set Message "" Espionne "execute [HomeRipp]/gscope/bin/macsim $FichierLeo $FichierRsf" #erreur la commande existe pas catch {exec /biolo/macsim/macsim $FichierLeo $FichierRsf} Message #catch {exec [HomeRipp]/gscope/bin/macsim $FichierLeo $FichierRsf} Message OnRevientDuBoulot set FichierRsfRsf "$FichierRsf.rsf" set FichierRsfXml "$FichierRsf.xml" if {[file exists $FichierRsfXml]} { file rename $FichierRsfXml $FichierXml } if { ! [file exists $FichierRsfRsf]} { set MonMessage "$FichierRsfRsf was not created. I got the message\n$Message" Warne $MonMessage AppendAuFichier $FichierRsfLog $MonMessage } else { file rename $FichierRsfRsf $FichierRsf if {[file exists $FichierRsfLog]} { file delete $FichierRsfLog } Espionne "$FichierRsf is OK !" } FinPasTouche $Nom } } proc LeonExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./leon" } if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { return [file join $OrdBinDir "leon"] } else { return "/biolo/leon/leon" } } else { set lexe [file join $OrdBinDir "leon.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc LeonGrid {NomATraiter} { global PipeCollection global PipeQuery set Vd "" set Vr "" if {$PipeCollection} { set InMsf [file join [RepertoireDuGenome] msf $NomATraiter] set InRascal [file join [RepertoireDuGenome] rascal $NomATraiter] set OutMsf [file join [RepertoireDuGenome] leon $NomATraiter] set OutLog [file join [RepertoireDuGenome] leon "${NomATraiter}.log"] set fnormd [file join [RepertoireDuGenome] normd $NomATraiter] if {[file exists $OutMsf]} {return 1} } else { set NomATraiter [file rootname $NomATraiter] set InMsf "${NomATraiter}.msf" set InRascal "${NomATraiter}.rascal.msf" set OutMsf "${NomATraiter}.leon.msf" set OutLog "${NomATraiter}.leon.log" set fnormd "${NomATraiter}.normd" } if {! [file exists $fnormd]} {return 0} if {! [file exists $InMsf]} {return 0} set Ll [LesLignesDuFichier $fnormd] foreach l $Ll { if {[regexp "dbclustal" $l]} { set Vd [string range $l [expr [string first ":" $l] +2] end] } if {[regexp "rascal" $l]} { set Vr [string range $l [expr [string first ":" $l] +2] end] } } if {$Vd == "undetermined"} {return 0} if {$Vr == "undetermined"} { set In $InMsf AjouteAuLogPipe "leon sur dbclustal" } elseif {$Vd > $Vr} { set In $InMsf AjouteAuLogPipe "leon sur dbclustal" } else { set In $InRascal AjouteAuLogPipe "leon sur rascal" } #puts "lesentreesdeleon" #puts "$In $PipeQuery $OutMsf $OutLog" catch {eval exec [LeonExe] $In $PipeQuery $OutMsf $OutLog} Message if {[file exists $OutMsf]} { AjouteAuLogPipe "leon = ok" return 1 } else { AjouteAuLogPipe "leon failed" return 0 } } proc LesAAFrequents {FichierCod} { set LesFreq [CreeListeCodonFrequency $FichierCod] set LesFreqTrie [lsort -index 2 -decreasing $LesFreq] set LesFirst [lrange $LesFreqTrie 0 2] foreach AA $LesFirst { set f [lindex $AA 2] set fa [format "%.2f" $f] set AA [lreplace $AA 2 2 $fa] lappend LesFirstArr $AA } return $LesFirstArr } proc LesAALesPlusDifferents {FichierCodMusRef FichierCodSeq} { set LesDifferences [CompareDeuxTablesCodonFrequency $FichierCodMusRef $FichierCodSeq] set LesPlus [lrange $LesDifferences 0 2] return $LesPlus } proc LesAALesPlusDifferentsPourTous {} { set FichierCodMusRef "[RepertoireDuGenome]/codonfrequency/mus.cod" foreach Nom [ListeDesPABs] { set FichierCodSeq "[RepertoireDuGenome]/codonfrequency/tables_codonfrequency/$Nom.cod" set LesPlus [LesAALesPlusDifferents $FichierCodMusRef $FichierCodSeq] append Tous "$LesPlus\n" } return $Tous } proc LesAcNucsDeLAccess {Access} { #set PageInfo [join [LaSequenceDesBanques $Access $Access AccessOk "OnVeutNature"] "\n"] set PageInfo [PageInfo $Access protein DR] return [LesAcNucsDeLAccess_PageInfo $PageInfo] } proc LesAcNucsDeLAccess_PageInfo {PageInfo} { #set PageInfo [join [LaSequenceDesBanques $Access $Access AccessOk "OnVeutNature"] "\n"] set LesAcNucs [LesAcNucsDeLaProt_PageInfo $PageInfo] return $LesAcNucs } proc LesAcNucsDeLaProt_PageInfo {PageInfo} { set LesAcNucs {} foreach EMBL [LeChampsDeLaPageProteine $PageInfo DR] { if {![regexp -nocase "EMBL" $EMBL]} {continue} regsub "DR" $EMBL "" EMBL regsub "EMBL;" $EMBL "" EMBL set EMBL [string trim $EMBL] lappend LesAcNucs [string toupper [lindex [split $EMBL ";"] 0]] } return $LesAcNucs } proc LesAccDuneLigne {NumeroLigne} { set nbdefois 0; set trop 0; set onaligne 0 foreach Ligne [LesLignesDuFichier "/genomics/link/EVI3/parser/AttriToutVf2"] { if {![regexp "^ligne $NumeroLigne" $Ligne] && [regexp "^ligne" $Ligne]} { set onaligne 0 } if {[regexp "^ligne $NumeroLigne " $Ligne]} { set onaligne 1; set nbdefois 0 } if {$onaligne && [regexp "^>" $Ligne]} { incr nbdefois } } Espionne "Pour La Ligne $NumeroLigne, on a $nbdefois access mrna" } proc LesAccRSEtUG_Affymetrix {{LesPABs ""}} { Wup "Permet de sauver les resultats des recherches dans RefSeq et Unigene des sequence de la puce EST" set FichierSave "[RepertoireDuGenome]/LesAccDefRefSeqUnigene2" if {[file exists $FichierSave]} { set F [open "$FichierSave"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} set DejaFait([lindex $Ligne 0]) 1 continue } close $F } set Texte "Gscope Access\tAffymetrixAccess\tAccRefSeq\tIdGRefSeq\tCoverRefSeq\tDefRefSeq\tAccUnigene\tUGId\tIdGUnigene\tCoverUnigene\tDefUnigene" AppendAuFichier $FichierSave $Texte set Texte "" if { $LesPABs == "LaTotale"} {set LesPABs [ListeDesPABs]} foreach PAB $LesPABs { if {[info exists DejaFait($PAB)]} {continue} #Espionne $PAB set AccRefSeq "" set AccUnigene "" #AffymetrixAccess set AffymetrixAccess [AffymetrixAccess $PAB] if {$AffymetrixAccess==""} {set AffymetrixAccess None} #Espionne "$AffymetrixAccess" set LesAccRefSeq [MeilleurAccDuBlast_Affymetrix $PAB "[RepertoireDuGenome]/blastnrsmouse_r18"] #Espionne "$LesAccRefSeq" if {$LesAccRefSeq==""} { set DefRefSeq "None" set IdGRefSeq "None" set CoverRefSeq "None" set AccRefSeq "None" } else { set LesAccDefRefSeq "" foreach AccRefSeq $LesAccRefSeq { set IdGRefSeq [format "%.2f" [lindex $AccRefSeq 1]] set CoverRefSeq [format "%.2f" [lindex $AccRefSeq 2]] set AccRefSeq [lindex $AccRefSeq 0] #Espionne "$AccRefSeq $IdGRefSeq $CoverRefSeq" set DefRefSeq [FastaCmd $AccRefSeq "" 0 "/genomics/g1/AffyProbes/banque/rsmouse_r18"] set DefRefSeq [lrange $DefRefSeq 2 end] #Espionne "$DefRefSeq" lappend LesAccDefRefSeq [list $AccRefSeq "$DefRefSeq"] } set Variant [DetectionDesVariants $LesAccDefRefSeq] if {$Variant != ""} { set LesAcc "" set LesDef "" foreach LAccDef $Variant { lappend LesAcc [lindex $LAccDef 0] lappend LesDef [lindex $LAccDef 1] } set AccRefSeq [join $LesAcc ";"] set DefRefSeq [join $LesDef ";"] } } #>lcl|RSHUM:NM001100 NM001100 Homo sapiens actin, alpha 1, skeletal muscle (ACTA1), mRNA. 4/2003 set LesAccUnigene [MeilleurAccDuBlast_Affymetrix $PAB "[RepertoireDuGenome]/blastnunigenemm"] if {$LesAccUnigene==""} { set DefUnigene "None" set IdGUnigene "None" set CoverUnigene "None" set AccUnigene "None" } else { set LesDefsUnigene "" set LesAccsUnigene "" foreach AccUnigene $LesAccUnigene { set IdGUnigene [format "%.2f" [lindex $AccUnigene 1]] set CoverUnigene [format "%.2f" [lindex $AccUnigene 2]] set AccUnigene [lindex $AccUnigene 0] set DefUnigene [FastaCmd $AccUnigene "" 0 unigenemm] regsub -all {[\{\}]} $DefUnigene " " DefUnigene set DefUnigene [lrange $DefUnigene 1 end] lappend LesAccsUnigene "$AccUnigene" lappend LesDefsUnigene "$DefUnigene" } set AccUnigene [join $LesAccsUnigene ";"] set DefUnigene [join $LesDefsUnigene ";"] } #>lcl|UG#S345348 Homo sapiens actin, alpha 1, skeletal muscle (ACTA1), mRNA. 4/2003 set UGId [LeUGIdUN_Getz [split $AccUnigene ";"]] if {$UGId==""} {set UGId "None"} else { set UGId [join $UGId ";"]} set Texte [join [list $PAB $AffymetrixAccess $AccRefSeq $IdGRefSeq $CoverRefSeq $DefRefSeq $AccUnigene $UGId $IdGUnigene $CoverUnigene $DefUnigene] "\t"] AppendAuFichier $FichierSave $Texte } return "" } proc LesAccRSEtUG_Ontario {{LesPABs ""}} { Wup "Permet de sauver les resultats des recherches dans RefSeq et Unigene des sequence de la puce EST" set FichierSave "[RepertoireDuGenome]/LesAccDefRefSeqUnigene" set FichierSave "[RepertoireDuGenome]/LesAccDefRefSeqUnigene3" if {[file exists $FichierSave]} { set F [open "$FichierSave"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} set DejaFait([lindex $Ligne 0]) 1 continue } close $F } set Texte "Gscope Access\tCodeClone\tAccRefSeq\tIdGRefSeq\tCoverRefSeq\tDefRefSeq\tAccUnigene\tUGId\tIdGUnigene\tCoverUnigene\tDefUnigene\tBlock\tRow\tColumn" AppendAuFichier $FichierSave $Texte set Texte "" if {$LesPABs == "LaTotale" || $LesPABs == ""} {set LesPABs [ListeDesPABs]} foreach PAB $LesPABs { if {[info exists DejaFait($PAB)]} {continue} Espionne $PAB set AccRefSeq "" set AccUnigene "" set CodeClone [CodeClone $PAB] if {$CodeClone==""} {set CodeClone NoneCC} set Access [split $CodeClone "_"] set OriginalId [lindex $Access 0] set VerifiedId [lindex $Access 1] set Block [InterrogeLeGalFile_Ontario $VerifiedId $OriginalId Block] set Column [InterrogeLeGalFile_Ontario $VerifiedId $OriginalId Col] set Row [InterrogeLeGalFile_Ontario $VerifiedId $OriginalId Row] #set AccRefSeq [MeilleurAccDuBlast_Ontario $PAB "[RepertoireDuGenome]/blastnrshuman"] set AccRefSeq [MeilleurAccDuBlast_Ontario $PAB "[RepertoireDuGenome]/blastnrefseq-rel-rna-human"] if {$AccRefSeq==""} { set DefRefSeq "None" set IdGRefSeq "None" set CoverRefSeq "None" set AccRefSeq "None" } else { set IdGRefSeq [format "%.2f" [lindex $AccRefSeq 1]] set CoverRefSeq [format "%.2f" [lindex $AccRefSeq 2]] set AccRefSeq [lindex $AccRefSeq 0] set DefRefSeq [FastaCmd $AccRefSeq "" 0 "refseq-rel-rna-human"] if {! [regexp "No Result " $DefRefSeq]} { set DefRefSeq [lrange $DefRefSeq 1 end] } #set DefRefSeq [join [FastaCmd $AccRefSeq "" 0 "refseq-rel-rna-human"] ""] #set DefRefSeq [join [FastaCmd $AccRefSeq "" 0] ""] #set DefRefSeq [lrange $DefRefSeq 2 end] } #>lcl|RSHUM:NM001100 NM001100 Homo sapiens actin, alpha 1, skeletal muscle (ACTA1), mRNA. 4/2003 set AccUnigene [MeilleurAccDuBlast_Ontario $PAB "[RepertoireDuGenome]/blastnunigenehs"] if {$AccUnigene==""} { set DefUnigene "None" set IdGUnigene "None" set CoverUnigene "None" set AccUnigene "None" } else { set IdGUnigene [format "%.2f" [lindex $AccUnigene 1]] set CoverUnigene [format "%.2f" [lindex $AccUnigene 2]] set AccUnigene [lindex $AccUnigene 0] set DefUnigene [FastaCmd $AccUnigene "" 0 "unigenehs"] if {! [regexp "No Result " $DefUnigene]} { set DefUnigene [lrange $DefUnigene 1 end] } #set DefUnigene [join [FastaCmd $AccUnigene "" 0 unigenehs] ""] #set DefUnigene [join [FastaCmd $AccUnigene "" 0] ""] #set DefUnigene [lrange $DefUnigene 1 end] } #>lcl|UG#S345348 Homo sapiens actin, alpha 1, skeletal muscle (ACTA1), mRNA. 4/2003 set UGId [LeUGIdUN_Getz $AccUnigene] #set UGId [LeUnigeneDeUniseq $AccUnigene unigenehs] if {$UGId==""} {set UGId "None"} #set Texte [join [list $PAB $CodeClone $AccRefSeq $IdGRefSeq $CoverRefSeq $DefRefSeq $AccUnigene $UGId $IdGUnigene $CoverUnigene $DefUnigene] "\t"] set Texte [join [list $PAB $CodeClone $AccRefSeq $IdGRefSeq $CoverRefSeq $DefRefSeq $AccUnigene $UGId $IdGUnigene $CoverUnigene $DefUnigene $Block $Row $Column] "\t"] AppendAuFichier $FichierSave $Texte } return "" } proc LesAccessDeLOrgaDesAPNS {Fichier MonOrga} { Wup "Renvoi la liste des Id Access de l'orga voulu des apns " set RepAPNS "[RepertoireDuGenome]/apns" if {$Fichier == "LaTotale"} { set LesFichiers [glob -nocomplain "$RepAPNS/*"] } else { set LesFichiers $Fichier } #Espionne $LesFichiers foreach Fichier $LesFichiers { set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set Organisme "" set LesOrgas {} scan $Ligne "%s %s %s" Id Access Expect #Espionne "$Id $Access $Expect $Organisme" set LesOrgas [split [lrange $Ligne 3 end] ":"] foreach ORGA $LesOrgas { #Espionne "$Fichier $ORGA ------ $MonOrga" if {$ORGA==""} {continue} if {[string equal -nocase $ORGA $MonOrga]} { lappend lesAccess "$Id $Access" continue } } } close $F } set lesAccess [lsort -unique $lesAccess] return $lesAccess } proc LesAccessDeLaPageInfo {PageInfo} { set LesAccess {} foreach Ligne [split $PageInfo "\n"] { if {[regexp -nocase {^ACCESSION } $Ligne tmp]} { regsub $tmp $Ligne "" Ligne set Ligne [string trim $Ligne] foreach Acc [split $Ligne " "] { if {$Acc == ""} {continue} lappend LesAccess [string trim $Acc] } break } if {[regexp -nocase {^AC } $Ligne tmp]} { regsub $tmp $Ligne "" Ligne set Ligne [string trim $Ligne] regsub -all ";" $Ligne "" Ligne foreach Acc [split $Ligne " "] { if {$Acc == ""} {continue} lappend LesAccess [string trim $Acc] } } } return $LesAccess } proc LesAccessDefDeLOligo {PAB NomOligo Dir} { Wup "Rend les Access et les Def des autres candidats de l oligo" Wup "Mise a jour Meilleure lecture d une sortie OligoArray, ajout de ChangeDebutAccessDeDir" Wup "Mise a jour Integration de InterrogeInfoDeOligo" global DebutAccessDeDir if {! [info exists DebutAccessDeDir]} {set DebutAccessDeDir ""} if {$PAB == "" || $NomOligo == "" || $Dir == ""} {return ""} set Fichier "$Dir/${PAB}.oligo" if {! [file exists $Fichier]} { set Fichier "$Dir/$PAB" if {! [file exists $Fichier]} {return ""} } set LesCandidats [InterrogeInfoDeLOligo $Fichier $NomOligo LesCandidats] if {$LesCandidats == ""} {return [list "No Hit found during Database searches"]} if { [regexp -nocase "No Hit found" $LesCandidats]} {return [list "$LesCandidats"]} if {! [info exists DebutAccessDeDir]} { ChangeDebutAccessDeDir $LesCandidats} if { $DebutAccessDeDir == ""} { ChangeDebutAccessDeDir $LesCandidats} if {! [regexp $DebutAccessDeDir $LesCandidats]} {set DebutAccessDeDir "";ChangeDebutAccessDeDir $LesCandidats} if {$DebutAccessDeDir==""} {return ""} set LesAccessDef "" set MaLigne "" foreach Candidat [split $LesCandidats " "] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Candidat]} {continue} if {! [info exists DebutAccessDeDir]} {ChangeDebutAccessDeDir $Ligne} if { [regexp -nocase "$DebutAccessDeDir" $Candidat] || [regexp -nocase "$PAB" $Candidat]} { if {$MaLigne!=""} {lappend LesAccessDef $MaLigne;set MaLigne ""} set MaLigne $Candidat continue } append MaLigne " $Candidat" } #Pour le dernier de la liste sinon pas ajouter a LesAccessDef lappend LesAccessDef $MaLigne return [lsort -unique $LesAccessDef] } proc LesAccessDefDeLOligoArray {PAB NomOligo Dir} { Wup "Rend les access et les def des autres candidats de l'oligo" Wup "Version amelioree pour meilleure lecture d'une sortie OligoArray" if {$PAB == "" || $NomOligo == "" || $Dir == ""} {return ""} set Fichier "[RepertoireDuGenome]/Probes/$Dir/$PAB" if {! [file exists $Fichier]} {return ""} set Pattern "" #Attention pour differencier DbActin, Unigene, RefSeq et Human_genome if {[regexp -nocase "Unigene" $Dir]} {set DebutAccessDeDir "UG:"} if {[regexp -nocase "HsGenome" $Dir]} {set DebutAccessDeDir "HS"} if {[regexp -nocase "DbActin" $Dir]} {set DebutAccessDeDir "ACT"} if {[regexp -nocase "RefSeq" $Dir]} {set DebutAccessDeDir "RSHUM:"} set LigneSplitee {} set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {! [regexp -nocase "$NomOligo\[^0-9\]" $Ligne]} {continue} set LigneSplitee [split "$Ligne" "\t"] set LesCandidats [lrange $LigneSplitee 4 end] set LesCandidats [join $LesCandidats " "] set LesAccessDef {} #set LesAccess {} set MaLigne "" foreach element [split $LesCandidats " "] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $element]} { continue } if { [regexp -nocase "$DebutAccessDeDir" $element] || [regexp -nocase "$PAB" $element]} { if {$MaLigne!=""} {lappend LesAccessDef $MaLigne;set MaLigne ""} set Access $element set MaLigne $Access continue } append MaLigne " $element" } #Pour le dernier de la liste sinon pas ajouter a LesAccessDef lappend LesAccessDef $MaLigne } close $F return [lsort -unique $LesAccessDef] } proc LesAccessDesOrganismesSample {Nom {Quoi ""}} { global MemoLesAccessTarget MemoLesOrganismesTarget MemoNomTarget if {$Quoi==""} { set Quoi "LesAccessMerci" } if {$Quoi=="LesOrganismesMerci" && [info exists MemoNomTarget] && $MemoNomTarget==$Nom} { return $MemoLesOrganismesTarget } if {$Quoi=="LesAccessMerci" && [info exists MemoNomTarget] && $MemoNomTarget==$Nom} { return $MemoLesAccessTarget } set LesAccess {} set LesOrganismes {} foreach Organisme [SampledOrganism LaListeMerci] { set Bid "" set Acc "" scan [BidAccessDeLOrganisme $Organisme $Nom] "%s %s" Bid Acc if {$Acc==""} { continue } lappend LesOrganismes $Organisme lappend LesAccess $Acc } set MemoNomTarget $Nom set MemoLesAccessTarget $LesAccess set MemoLesOrganismesTarget $LesOrganismes if {$Quoi=="LesAccessMerci"} { return $LesAccess } if {$Quoi=="LesOrganismesMerci"} { return $LesOrganismes } return $LesAccess } proc LesAccessDesProteinesIdentiquesDansMSF {FichierMSF QuelleProteine {Id 0.98}} { if {![file exists $FichierMSF]} {return} set LesAccess [AskMSF $FichierMSF LesAccess] if {$LesAccess == ""} {return} set LesAccessId {} foreach Access $LesAccess { if {[string equal -nocase $QuelleProteine $Access]} {set QuelleProteine $Access;break} } foreach Access $LesAccess { if {[string equal -nocase $Access $QuelleProteine]} {continue} if {[EstUnAccessPDB $Access ]} {continue} if {[catch {set PI [IDdansMSF $FichierMSF $QuelleProteine $Access SelonA]}]} {continue} if {$PI < $Id } {continue} lappend LesAccessId $Access } return $LesAccessId } proc LesAccessDesSeqali {l} { return [$::db eval "select si.access from seqinfo as si, seqali as sa where si.pk_seqinfo=sa.pk_seqinfo and sa.pk_seqali in ([join $l ,])"] } proc LesAccessDuAPN {NomOuFichier} { global RepertoireDuGenome set Nom [file tail $NomOuFichier] set FichierAPN $NomOuFichier if { ! [file exists $FichierAPN]} { set FichierAPN "$RepertoireDuGenome/apns/$Nom" } if { ! [file exists $FichierAPN]} { return {} } set LesAccess {} foreach Ligne [LesLignesDuFichier $FichierAPN] { set Access "" scan $Ligne "%s %s %s" BanqueId Access PN if {$Access==""} { continue } lappend LesAccess $Access } return $LesAccess } proc LesAccessDuAliInOut {NomOuFichier {InOut All}} { global RepertoireDuGenome set Nom [file tail $NomOuFichier] set Fichier "$RepertoireDuGenome/aliinout/$Nom" if { ! [file exists Fichier]} { set Fichier $NomOuFichier } if { ! [file exists Fichier]} { return {} } set All [regexp -nocase "All" $InOut] set In [regexp -nocase "In" $InOut] set Out [regexp -nocase "Out" $InOut] set LesAccess {} foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s" BID Access if {[EstUnAccessPDB $BID]} { set Access $BID } if {$All} { lappend LesAccess $Access } if {$In && [regexp "accepted" $Ligne]} { lappend LesAccess $Access } if {$Out && [regexp "rejected" $Ligne]} { lappend LesAccess $Access } } return $LesAccess } proc LesAccessDuBlast {FichierBlast} { DepouilleLeBlast TabBlast $FichierBlast "1e-3" set NbSbjct [set TabBlast(NbSubject)] set TailleQuery [set TabBlast(Taille)] set NomQuery [set TabBlast(Query)] set LesProches {} Espionne "NbSbjct $NbSbjct" for {set i 1} {$i <=$NbSbjct} {incr i} { set OnADejaCeBidAvecGO 0 set LesGOsDeBId "" set BId [set TabBlast($i)] set Access [set TabBlast($BId,Access)] Espionne "$BId $Access" if {! [AccessToKeepOrNotToKeep $BId]} {continue} set LesGOsDeBId [Access2GO $BId] foreach GO $LesGOsDeBId { #Espionne "$GO" if {! [GOToKeepOrNotToKeep $GO]} { #Espionne "Celui on a ce GO" set OnADejaCeBidAvecGO 1;break} } if {$OnADejaCeBidAvecGO} {continue} if {0&&[regexp {^SW:}]} {} EnrichiAccessToKeepOrNotToKeep $Access } return "" } proc LesAccessDuCluster {c} { return [$::db eval {select si.access from seqinfo as si, seqali as sa, ln_seqali_cluster as lsc where lsc.pk_cluster=$c and lsc.pk_seqali=sa.pk_seqali and si.pk_seqinfo=sa.pk_seqinfo order by lsc.pos}] } proc LesAccessDuFichier {Fichier} { if {![file exists $Fichier]} {return ""} set F [open $Fichier] set LesAccess {} set i 0 while {[gets $F Ligne]>=0} { if {![regexp -nocase {[0-9]} $Ligne]} {continue} if {[info exists Access]} {unset Access} if {[regexp -nocase {gi\|[0-9]*\|[a-z]*\|} $Ligne]} { set Ligne [string trim $Ligne] regsub {gi\|[0-9]*\|[a-z]*\|} $Ligne "" Ligne if { [regexp -nocase {^[a-z]*_[0-9]*} $Ligne Access]} { incr i lappend LesAccess [list "$Access" "ncbi"] } elseif {[regexp -nocase {^[0-9a-z]*} $Ligne Access]} { incr i lappend LesAccess [list "$Access" "genembl"] } } if {[regexp -nocase {^ID } $Ligne]} { if {[regexp -nocase { ([0-9a-z_]+)} $Ligne tmp Access]} { lappend LesAccess [list "$Access" "protein"] } } } close $F return $LesAccess } proc LesAccessDuGroupe {NomOuMSF Query {Liste Tous} {Calculate ""}} { if {$Liste=="Tous"} { return [GroupeSecator $NomOuMSF $Query "In" $Calculate] } foreach Access [GroupeSecator $NomOuMSF $Query "In" $Calculate] { set MoiAussi([string toupper $Access]) 1 } set LesBons {} foreach Access $Liste { if { ! [info exists MoiAussi([string toupper $Access])] } { continue } lappend LesBons $Access } Espionne $LesBons return $LesBons } proc LesAccessDuMSF {TexteOuFichierMSF} { DecortiqueUnMSF $TexteOuFichierMSF LesAccess return $LesAccess } proc LesAccessDuMac {{m 0}} { if {! $m} {set m [MacCourant]} return [$::db eval {select si.access from seqinfo as si, seqali as sa, ln_mac_seqali as lms where lms.pk_mac=$m and lms.pk_seqali=sa.pk_seqali and sa.pk_seqinfo=si.pk_seqinfo}] } proc LesAccessDuMac_VOIR_PLUS_LOIN_1 {{m 0}} { #rR attention il y en a un autre plus bas # ATTENTION # Ici on retourne les access de tous les clusters if {! $m} {set m [MacCourant]} return [$::db eval {select si.access from seqinfo as si, seqali as sa, ln_seqali_cluster as lsc, cluster as c where c.pk_clustering=$m and lsc.pk_cluster=c.pk_cluster and sa.pk_seqali=lsc.pk_seqali and si.pk_seqinfo=sa.pk_seqinfo}] } proc LesAccessDuMsf {FichierMSF} { set debutEnTete 0 set lesAccess {} foreach ligne [LesLignesDuFichier $FichierMSF] { if {[regexp {\s*MSF:[\s\d]+Type:[\sPN]+Check:[\s\d]+\.\.} $ligne]} { set debutEnTete 1 continue } elseif {$debutEnTete && [regexp {\s*Name:\s*(\S+)} $ligne regMatch access]} { lappend lesAccess $access } elseif {[regexp {\s*//} $ligne]} { break } } return $lesAccess } proc LesAccessEMBLDesLignesEMBL {LesLignes} { set LesMots {} foreach Ligne [LeChampDesLignesEMBL $LesLignes "DR"] { if { ! [regexp "DR EMBL" $Ligne]} { continue } regsub "DR EMBL" $Ligne "" Ligne regsub -nocase -all {[^a-z_0-9\.]} $Ligne " " Ligne set LesMots [concat $LesMots [split $Ligne " "]] } set LesBons {} foreach Mot $LesMots { if { ! [regexp -nocase {[a-z]} $Mot]} { continue } if {[regexp "NOT_ANNOTATED_CDS" $Mot]} { continue } lappend LesBons $Mot } return $LesBons } proc LesAccessEn1997 {{Date ""}} { Wup "Permet de regarder combien de sequences sont presentes dans les banques a une date donnee" if {$Date == ""} { set Date "19970301" } set LesCategories [lsort [InterrogeLesInfosDesARPs LesCategories]] Espionne "$LesCategories" foreach Cat $LesCategories { #Espionne "$Cat" if {[regexp -nocase "actin" $Cat]} {continue} set LesAccessGetz [join [InterrogeLesInfosDesARPs $Cat LesAccess] "|"] set Banques "protein" set option "" set option "-vf \"acc crd org\" -cs \"\\\\t\"" #set option "-vf \"acc crd org Authors Title Year\" -cs \"\\\\t\"" #set option "-vf \"acc crd org Title Year\" -cs \"\\\\t\"" #set option "-c" #set option "-vf snm" set Typ1 "acc" set Typ2 "id" #getz '[protein-id:ACTS_*] & [protein-crd#:19890601]' -vf crd #set Commande "getz $option \"((\\\[$Banques-$Typ1: $LesAccessGetz\\\] | \\\[$Banques-$Typ2: $LesAccessGetz\\\]) & \\\[$Banques-crd#:19971231\\\])\"" set Commande "getz $option \"((\\\[$Banques-$Typ1: $LesAccessGetz\\\] | \\\[$Banques-$Typ2: $LesAccessGetz\\\]) & \\\[$Banques-crd#:$Date\\\])\"" #set Commande "getz $option \"((\\\[$Banques-$Typ1: $LesAccessGetz\\\] | \\\[$Banques-$Typ2: $LesAccessGetz\\\]) & \\\[$Banques-crd#:$Date\\\]) \\\> taxonomy\"" #Espionne "$Commande" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {continue} if {$GetzOut==""} {continue} Espionne "$Cat\n$GetzOut" } return "" } proc LesAccessEtDefDesActins {aTabActin Fichier} { Wup "Creer un tableau avec les access et def a partir de la liste originelle de sequence DeLBMAGM/TousLesGenes.txt" upvar $aTabActin TabActin set OnEnTientUn 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {$OnEnTientUn} { if {$Ligne ==""} {continue} set TabActin($Access) $Ligne set OnEnTientUn 0 continue } if {![regexp -nocase {^[0-9]+: } $Ligne ]} {continue} regsub {^[0-9]+: } $Ligne "" Ligne set Access [lindex $Ligne 0] set OnEnTientUn 1 continue } close $F } proc LesAccessFreresDansDecrypthon {X} { set LesAccessFreres {} foreach GM [AutreAccessDansXref $X] { lappend LesAccessFreres [AutreAccessDansGM $GM] } return $LesAccessFreres } proc LesAccessProchesDeLaProteineDeRef {Nom {IdDesProtId 0.98} {AvecOuSansCluster AvecCluster} {NormMDMin 0.5}} { set FileMSF "[RepertoireDuGenome]/msf/$Nom" set FileClust "${FileMSF}.clust" ####Recherche des EC appartennant aux proteines du cluster du msf si celui-ci a un bon NormMD#### if {![file exists $FileMSF]} {return} set Cluster [InterrogeLesClustersDesMSF $FileClust Access $Nom Cluster] if {$Cluster == "" } { set LesAccessDuMSF [InterrogeLesClustersDesMSF $FileClust LesAccess] } else { set LesAccessDuMSF [InterrogeLesClustersDesMSF $FileClust Cluster $Cluster LesAccess] } set LesAccessDesId {} foreach Access $LesAccessDuMSF { if {$Nom == $Access} {continue} Espionne $Access if {[IDdansMSF $FileMSF $Nom $Access SelonA] < $IdDesProtId} {continue} if {[IDdansMSF $FileMSF $Nom $Access SelonB] < $IdDesProtId} {continue} lappend LesAccessDesId $Access } if {[string equal -nocase $AvecOuSansCluster "AvecCluster"]} { set LesAccess [lsort -unique [concat $LesAccessDuMSF $LesAccessDesId]] } else { set LesAccess [lsort -unique $LesAccessDesId] } return $LesAccess } proc LesAccessRefSeqDesPABs {{LesPABs ""}} { Wup "Base sur les recherches blastn contre refseq" Wup "Identifie le meilleur hit dans le blastn (%Id > 0.95 ou %PCoverQuery > 0.70 ou %PCoverSubject" Wup "Sauve le tout dans un fichier LesAccessRefSeqDesPABs" #Format: Gscope Access RefSeq Id set DirOligo "[RepertoireDuGenome]/Probes/RefSeqBLAST3" set OtherDirOligo "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" set FichierRefSeqID "[RepertoireDuGenome]/LesAccessRefSeqDesPABs" set Entete "" set LesAccessRefSeq "" lappend Entete "Gscope Access\tRefSeq Id" AppendAuFichier $FichierRefSeqID $Entete if {$LesPABs==""} {set LesPABs [ListeDesPABs]} foreach PAB $LesPABs { set AccRefSeq "" set DirOligo "[RepertoireDuGenome]/Probes/RefSeqBLAST3" set OtherDirOligo "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" if {![file exists "$DirOligo/${PAB}.masked"]} { set DirOligo $OtherDirOligo } #Pour recupere l access RefSeq set AccRefSeq [ReturnBestHitFromLogFile $PAB $DirOligo] if {[regexp "Warning" $AccRefSeq]} { set AccRefSeq [lindex $AccRefSeq 1] continue } #regsub "RSHUM:NM" $AccRefSeq "NM_" AccRefSeq if {$AccRefSeq==""} { Espionne "Pb avec $PAB RefSeq est vide" continue } set Ligne "$PAB\t$AccRefSeq" Espionne "$Ligne" AppendAuFichier $FichierRefSeqID $Ligne lappend LesAccessRefSeq $AccRefSeq } Espionne "NbRefSeq [llength $LesAccessRefSeq]" set LesAccessRefSeq [lsort -unique $LesAccessRefSeq] Espionne "NbRefSeq [llength $LesAccessRefSeq]" return "" } proc LesAccessStatCompletes {LogFile Debut Fin} { Wup "Permet de recuperer les candidats de l oligo avec leur pourcentages d identite et leur nb bases contigues" if {![file exists $LogFile]} {return ""} set LesCandidats "" set LesAccessDef "" set LesCandidats [InterrogeInfoDuLogDeLOligo "$LogFile" $Debut $Fin LesCandidats] if { $LesCandidats == ""} { set LesCandidats "No Hit found in database or in log file" lappend LesAccessDef $LesCandidats } else { foreach C $LesCandidats { lappend LesAccessDef "[format "%-16s %6.2f" $C [InterrogeInfoDuLogDeLOligo "$LogFile" $Debut $Fin $C IDG]] [InterrogeInfoDuLogDeLOligo "$LogFile" $Debut $Fin $C NbContigue]" } } return $LesAccessDef } proc LesAccessUnigeneDesPABs {{LesPABs ""}} { Wup "Base sur les recherches blastn contre unigene" Wup "Identifie le meilleur hit dans le blastn (%Id > 0.95 ou %PCoverQuery > 0.70 ou %PCoverSubject" Wup "Sauve le tout dans un fichier LesAccessUgUnDesPABs" #Format: Gscope Access Uniseq Id Unigene Id set FichierUnigeneID "[RepertoireDuGenome]/LesAccessUgUnDesPABs" set Entete "Gscope Access\tUniseq Id\tUnigene Id" AppendAuFichier $FichierUnigeneID $Entete if {$LesPABs==""} {set LesPABs [ListeDesPABs]} foreach PAB $LesPABs { set Resultat "" set AccUnigene "" set UGId "" set FichierBlast "[RepertoireDuGenome]/blastn-unigene/${PAB}" #Test du meilleur hit dans la banque #askblast set TailleQuery [AskBlast $FichierBlast Taille] set NbSubject [AskBlast $FichierBlast NbSubject] #set TailleQuery [InterrogeBestHitInDatabase $FichierBlast TailleQuery] #set NbSubject [InterrogeBestHitInDatabase $FichierBlast NbSubject] if {$NbSubject>0} { set PIdentity 0.95 set PRecouvrement 0.70 set LesBIdsBases "" set IdGlobal 0.0 set PCoverQuery 0.0 set PCoverSubject 0.0 set BId [InterrogeBestHitInDatabase $FichierBlast InitialBId] set LesBIdsBases [InterrogeBestHitInDatabase $FichierBlast LesBIdsBases] if {$LesBIdsBases==""} { set Raison "Query has no equivalent sequence in DataBase: No fitting sequence in Blast searches" } else { #Pourcentage d identite global: Aligne sur Total dans les alignements set IdGlobal [InterrogeBestHitInDatabase $FichierBlast IdGlobal] #Recouvrement de Q sur S ou inversement #PCoverQuery Query par rapport au Subject #PCoverSubject Subject par rapport au Query set PCoverQuery [InterrogeBestHitInDatabase $FichierBlast PCoverQuery] set PCoverSubject [InterrogeBestHitInDatabase $FichierBlast PCoverSubject] set AccUnigene $BId if {$IdGlobal<$PIdentity || $PCoverQuery<$PRecouvrement || $PCoverSubject<$PRecouvrement} { set Raison "Query has no equivalent sequence in DataBase: $BId (\%Id [format "%.2f" $IdGlobal], Cover S/Q [format "%.2f" $PCoverQuery], Cover Q/S [format "%.2f" $PCoverSubject])." #On ne met pas a zero pour preserver les cas limites de nos cutoffs #set AccUnigene "" if {($PCoverQuery <= 0.2 || $PCoverSubject <= 0.2) || $IdGlobal <= 0.90} { #On met tout de meme a zero car trop limite set AccUnigene "" } } else { set Raison "Query has an equivalent sequence in DataBase: $BId (\%Id [format "%.2f" $IdGlobal], Cover S/Q [format "%.2f" $PCoverQuery], Cover Q/S [format "%.2f" $PCoverSubject])." } } } else { set Raison "Query has no equivalent sequence in DataBase: No Hit found in Blast searches" set AccUnigene "" } #>lcl|UG#S345348 Homo sapiens actin, alpha 1, skeletal muscle (ACTA1), mRNA. 4/2003 if {$AccUnigene==""} { set AccUnigene "$Raison" set UGId "" } else { set UGId [LeUnigeneDeUniseq $AccUnigene] } if {$UGId==""} {set UGId "No Unigene Id associated"} set Resultat "$PAB\t$AccUnigene\t$UGId" AppendAuFichier $FichierUnigeneID $Resultat InterrogeBestHitInDatabase $FichierBlast Decharge } } proc LesAcsDuId {ID} { set LesLignesEMBL [LaSequenceDesBanques $ID "" "OnVeutEMBL"] if {$LesLignesEMBL==""} { return {} } set LesACs {} foreach Ligne $LesLignesEMBL { if { ! [regexp "^AC " $Ligne]} { if {$LesACs=={}} { continue } else { return $LesACs } } regsub "^AC " $Ligne "" Ligne regsub ";" $Ligne " " Ligne LConcat LesACs [LesMotsDeLaLigne $Ligne] } return $LesACs } proc LesAffyAnnot {{version ""}} { set LesAffyAnnot [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/*/*.annot.csv"]] return $LesAffyAnnot } proc LesAffyAnnotDansLeBonOrdre {{version ""}} { LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/MG430_2.0/Mouse430_2.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/MG430A_2.0/Mouse430A_2.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Av2.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Bv2.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Cv2.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U133+2/HG-U133_Plus_2.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U133/HG-U133A.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U133/HG-U133B.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U95/HG_U95Av2.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U95/HG_U95A.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U95/HG_U95B.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U95/HG_U95C.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U95/HG_U95D.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/HG-U95/HG_U95E.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/RG-U34/RG_U34A.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/Chicken/Chicken.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/Drosophila/DrosGenome1.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/Xenopuslaevis/Xenopus_laevis.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/Zebrafish/Zebrafish.*.annot.csv"]] LConcat LesEntrees [lsort [glob -nocomplain "[RepertoireAffyAnnot $version]/Celegans/Celegans.*.annot.csv"]] return $LesEntrees } proc LesAffymetrixDuOwner {Owner} { foreach Nom [ListeDesPABs] { if {[OwnerOfCDNA $Nom]!=$Owner} { continue } Espionne "$Nom [LesAffymetrixEnOverlap $Nom]" } exit } proc LesAffymetrixEnOverlap {Nom} { global LesAffymetrixEnOverlap global RepertoireDuGenome set AA [AffymetrixAssocie] if {$AA==""} { return {} } if {[info exists LesAffymetrixEnOverlap($Nom)]} { return [set LesAffymetrixEnOverlap($Nom)] } if {[info exists LesAffymetrixEnOverlap("EstCharge")]} { return [set LesAffymetrixEnOverlap("EstCharge")] } set FichierOverlap "$RepertoireDuGenome/fiches/overlap_affymetrix" if {[file exists $FichierOverlap]} { foreach Ligne [LesLignesDuFichier $FichierOverlap] { scan $Ligne "%s" NomLu set LesAffymetrixEnOverlap($NomLu) [lrange [split $Ligne " "] 1 end] } set LesAffymetrixEnOverlap("EstCharge") {} return [LesAffymetrixEnOverlap $Nom] } if { ! [OuiOuNon "Do I create $FichierOverlap ?"]} { set LesAffymetrixEnOverlap("EstCharge") [list "NoValues"] return [set LesAffymetrixEnOverlap("EstCharge")] } set LesAf [LesLignesDuFichier "$RepertoireDuGenome/../$AA/fiches/localisationchrocontig.trif"] set LesCd [LesLignesDuFichier "$RepertoireDuGenome/fiches/localisationchrocontig.trid"] set iAf -1 set iCd 0 set PrecedentiCd $iCd set MaxiCd [llength $LesCd] foreach Af $LesAf { incr iAf scan $Af "%s %s %s %d %d %s" NomAf ChroAf ContigAf DebutAf FinAf SensAf Espionne "[string repeat " " 40] $Af" set iCd $PrecedentiCd while {$iCd<$MaxiCd} { set Cd [lindex $LesCd $iCd] scan $Cd "%s %s %s %d %d %s" NomCd ChroCd ContigCd DebutCd FinCd SensCd # Espionne "\n $Af\n$Cd" if {"$ChroAf $ContigAf" < "$ChroCd $ContigCd"} { break } if {"$ChroAf $ContigAf" > "$ChroCd $ContigCd"} { # Espionne "[string repeat " " 40] $ChroAf $ContigAf > $ChroCd $ContigCd" incr iCd continue } if {$FinCd<$DebutAf} { # Espionne "[string repeat " " 40] $FinCd<$DebutAf" incr iCd continue } # Espionne "je me lance dans\n $Af\n$Cd" break } if {"$ChroAf $ContigAf" < "$ChroCd $ContigCd"} { continue } for {set PrecedentiCd $iCd} {$iCd < [llength $LesCd]} { incr iCd } { set Cd [lindex $LesCd $iCd] scan $Cd "%s %s %s %d %d %s" NomCd ChroCd ContigCd DebutCd FinCd SensCd if {[CetOrdre $Af $Cd]} { break } if {$FinCd < $DebutAf} { continue } # Espionne " $Af\n$Cd overlap" lappend LesAffymetrix($NomCd) $NomAf } } foreach NomCd [array names LesAffymetrix] { set LesAffys [lsort -unique [set LesAffymetrix($NomCd)]] AppendAuFichier $FichierOverlap "$NomCd [join $LesAffys " "]" } return [LesAffymetrixEnOverlap $Nom] } proc LesAiresCliquablesDuHTML {{FichierHTML ""}} { global RepertoireDuGenome if {$FichierHTML==""} { set FichierHTML [ButineArborescence "All"] if {$FichierHTML==""} { return {} } } set Texte [ContenuDuFichier $FichierHTML] set Map [ValeurDeLaBalise "map" Texte] while {$Map!=""} { set Area [ValeurDeLaBalise "area" Map] if {$Area==""} { break } set Reference [StringApres "href=" dans $Area] regsub -all {\"} $Reference "" Reference set Nom [file tail $Reference] regsub -nocase {(.htm|.html)$} $Nom "" Nom set Shape [StringApres "shape=" dans $Area] set TexteCoords [StringSuivant "coords=" dans $Area] regsub -all {[\"\,]} $TexteCoords " " TexteCoords if {[regexp "circle" $Shape]} { scan $TexteCoords "%d %d %d" xC yC rC set xMin [expr $xC-$rC] set xMax [expr $xC+$rC] set yMin [expr $yC-$rC] set yMax [expr $yC+$rC] } else { scan $TexteCoords "%d %d %d %d" xMin yMin xMax yMax } lappend LesAires "$Nom $xMin $yMin $xMax $yMax $Reference" } return $LesAires } proc LesAliasExistants {} { return [NomDuAlias "LesAlias"] } proc LesAliasLesPlusProches {A} { set Orga "" regexp {_([^_]+_[^_]+)$} $A Match Orga regsub -all "_" $Orga " " Orga regsub {_[^_]+_[^_]+$} $A "" A foreach Alias [LesAliasExistants] { set Existe($Alias) 1 } set Genre "XXXXXXXXX" set Espece "XXXXXXXXX" scan $Orga "%s %s" Genre Espece set G [string index $Genre 0] set E [string index $Espece 0] set Ge "$G$E" set ge [string tolower $Ge] set LesPossibles {} foreach Alias [LesAliasExistants] { if {[string equal $A $Alias]} { set PGS [NomDuAlias $Alias] set Organisme [OrganismeDuPAB $PGS] set O "" regexp {<<(.+)>>} $Organisme Match O Espionne "$PGS $Organisme $O $Orga" if {$O!=$Orga} { break } lappend LesPossibles $Alias } } set X $A regsub -all {[\-\_]} $X "" X regsub -nocase "alpha" $X "a" X regsub -nocase "beta" $X "b" X regsub -nocase "gamma" $X "g" X foreach Alias [LesAliasExistants] { set Y $Alias regsub -all {[\-\_]} $Y "" Y if {[string equal -nocase $X $Y]} { set PGS [NomDuAlias $Alias] set Organisme [OrganismeDuPAB $PGS] regexp {<<(.+)>>} $Organisme Match O if {$O!=$Orga} { continue } lappend LesPossibles $Alias } } foreach Possible [list "$Ge$A" "$ge$A" "$A$Ge" "$A$ge"] { if {[info exists Existe($Possible)]} { lappend LesPossibles $Possible } } return $LesPossibles } proc LesBandelettesDuBlast {FichierOuNom {Source ""} {AvecSize ""} {OnGraphe ""}} { global OnGrapheLesBandelettes if { ! [info exists OnGrapheLesBandelettes]} { set OnGrapheLesBandelettes 0 } if {$OnGraphe==""} { set OnGraphe "DontGraphe" } if {$OnGraphe=="OnGraphe"} { set OnGraphe 1 } else { set OnGraphe 0 } set NombreDeBandelettes 40 if {[OnTraiteMS2PH]} { set NombreDeBandelettes 100 } if {[PreFixe]=="RO"} { set NombreDeBandelettes 100 } set Nom [file tail $FichierOuNom] set MaxADecortiquer "SansLimiteDeNombre" set SeuilExpect "SansSeuilExpect" if {$AvecSize=="AvecSize"} { set AvecSize 1 } else { set AvecSize 0 } if {$AvecSize} { scan [TailleDuDescriptifDuBlastP] "%d %d %d %f" MinObliges MaxVoulus MaxPDB SeuilExpect set MaxADecortiquer [expr $MaxVoulus+$MaxPDB] global SeuilExpectPourJulie if {[info exists SeuilExpectPourJulie]} { set SeuilExpect $SeuilExpectPourJulie } } if {[regexp "/" $FichierOuNom]} { set Fichier $FichierOuNom } else { if {$Source==""} { set Source "blastp" } set Fichier "[RepertoireDuGenome]/$Source/$Nom" } if {$Source==""} { if {[regexp "daedalus" $Fichier]} { set Source "daedalushits" } else { set Source "blast" } } if { ! [file exists $Fichier]} { FaireLire "$Fichier doesn't exist. I'll cancel LaSelectionDuBlast" return "" } set LesCandidats {} if {[regexp "daedalushits" $Source]} { set Texte [ContenuDuFichier $Fichier] set PN 0.0009876 while 1 { set BlastHit [ValeurDeLaBalise "BlastHit" Texte "Rogner" BH] if {$BlastHit==""} { break } set BanqueId $BH set Access $BH set AccessOK $BH set OldPN $PN set ID [ValeurDeLaBalise "ID" BlastHit "NePasRogner"] if {[regexp VARSPLIC $ID]} { continue } set AC [ValeurDeLaBalise "AC" BlastHit "NePasRogner"] set PN [ValeurDeLaBalise "PN" BlastHit "NePasRogner"] if {$PN=="0.000999"} { set PN $OldPN } set OX [ValeurDeLaBalise "OX" BlastHit "NePasRogner"] set GN [ValeurDeLaBalise "GN" BlastHit "NePasRogner"] set DE [ValeurDeLaBalise "DE" BlastHit "NePasRogner"] set OS [ValeurDeLaBalise "OS" BlastHit "NePasRogner"] set OC [ValeurDeLaBalise "OC" BlastHit "NePasRogner"] set CandId [lindex [split $ID " "] 0] set CandAc [lindex [split $AC " "] 0] if {$CandId==""} { set CandId $BanqueId } if {$CandAc==""} { set CandAc $Access } if {$OS=="" && $OX!=""} { set OS [Tax $OX "Name"] } regsub -all " " $DE "_" BeauDE set Candidat "$CandId $CandAc $PN $BeauDE $OX $OS $OC" lappend LesCandidats $Candidat } } if {[regexp "blast" $Source]} { set n [DecortiqueBlast $Fichier $SeuilExpect $MaxADecortiquer Query lBanqueId lAccess lDE lProfil lPN] foreach CandId $lBanqueId CandAc $lAccess PN $lPN DE $lDE { regsub -all " " $DE "_" BeauDE set Candidat "$CandId $CandAc $PN $BeauDE" lappend LesCandidats $Candidat } } if {$LesCandidats=={}} { return "" } set LesPNs {} set LesLogPNs {} foreach Candidat $LesCandidats { set DE "" set OX "" scan $Candidat "%s %s %s %s %s" CandId CandAc PN DE OX set BonPN $PN if {$PN< 1.e-200} { set BonPN 1.e-200 } set LogPN [expr log10($BonPN)] lappend LesPNs $PN lappend LesLogPNs $LogPN } if {$OnGraphe || $OnGrapheLesBandelettes} { set K [Graphe $LesLogPNs] global KduGraphe ; set KduGraphe $K } if {$LesPNs=={}} {return {}} if {[llength $LesPNs]==1} {return [list [lindex $LesPNs 0] $LesCandidats]} set Prems [lindex $LesLogPNs 0] set Derns [lindex $LesLogPNs end] set Ecart [expr (1.*($Derns-$Prems))/$NombreDeBandelettes] set L $Prems while {$L<$Derns} { lappend LesLimites $L set L [expr $L + $Ecart] } lappend LesLimites 999999 set LesLimitesHautes [lrange $LesLimites 1 end] set LB [lindex $LesLimites 0] set LH [lindex $LesLimitesHautes 0] set Compte -4 set i 0 foreach LogPN $LesLogPNs Candidat $LesCandidats { incr Compte while 1 { if {$LB<=$LogPN && $LogPN<$LH} { break } if {[incr i] >= [llength $LesLimites]} { break } set LB [lindex $LesLimites $i] set LH [lindex $LesLimitesHautes $i] } if { ! [info exists LesCandidatsPour($LB)]} { lappend LesLBs $LB lappend LesChoixX $LogPN $LogPN $LogPN lappend LesChoixY $Compte [expr $Compte +1] [expr $Compte +2] } lappend LesCandidatsPour($LB) "$LogPN $Candidat" } if {$OnGraphe || $OnGrapheLesBandelettes} { Graphe $LesChoixY $LesChoixX $K "red" Graphe [lrange $LesLimites 0 end-1] "" $K "green" } foreach LB $LesLBs { if { ! [info exists LesCandidatsPour($LB)]} { continue } set SesCandidats {} foreach Candidat [set LesCandidatsPour($LB)] { lappend SesCandidats $Candidat } lappend LesLBsEtLeursCandidats $LB $SesCandidats } return $LesLBsEtLeursCandidats } proc LesBandelettesDuBlastGrid {lAccess lBanqueId lPN lDE} { set NombreDeBandelettes 100 set LesCandidats {} foreach CandId $lBanqueId CandAc $lAccess PN $lPN DE $lDE { regsub -all " " $DE "_" BeauDE set Candidat "$CandId $CandAc $PN $BeauDE" lappend LesCandidats $Candidat } Espionne "il y a [llength $LesCandidats] candidats pour les band" if {$LesCandidats=={}} { return "" } set LesPNs {} set LesLogPNs {} foreach Candidat $LesCandidats { set DE "" set OX "" scan $Candidat "%s %s %s %s %s" CandId CandAc PN DE OX set BonPN $PN if {$PN< 1.e-200} { set BonPN 1.e-200 } set LogPN [expr log10($BonPN)] lappend LesPNs $PN lappend LesLogPNs $LogPN } if {$LesPNs=={}} {return {}} if {[llength $LesPNs]==1} {return [list [lindex $LesPNs 0] $LesCandidats]} set Prems [lindex $LesLogPNs 0] Espionne "prems vaut $Prems" set Derns [lindex $LesLogPNs end] Espionne "derns vaut $Derns" set Ecart [expr (1.*($Derns-$Prems))/$NombreDeBandelettes] set L $Prems while {$L<$Derns} { lappend LesLimites $L set L [expr $L + $Ecart] } lappend LesLimites 999999 set LesLimitesHautes [lrange $LesLimites 1 end] set LB [lindex $LesLimites 0] set LH [lindex $LesLimitesHautes 0] set Compte -4 set i 0 foreach LogPN $LesLogPNs Candidat $LesCandidats { incr Compte while 1 { if {$LB<=$LogPN && $LogPN<$LH} { break } if {[incr i] >= [llength $LesLimites]} { break } set LB [lindex $LesLimites $i] set LH [lindex $LesLimitesHautes $i] } if { ! [info exists LesCandidatsPour($LB)]} { lappend LesLBs $LB lappend LesChoixX $LogPN $LogPN $LogPN lappend LesChoixY $Compte [expr $Compte +1] [expr $Compte +2] } lappend LesCandidatsPour($LB) "$LogPN $Candidat" } foreach LB $LesLBs { if { ! [info exists LesCandidatsPour($LB)]} { continue } set SesCandidats {} foreach Candidat [set LesCandidatsPour($LB)] { lappend SesCandidats $Candidat } lappend LesLBsEtLeursCandidats $LB $SesCandidats } return $LesLBsEtLeursCandidats } proc LesBandesCytologiques {} { set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierCyto "$RepLocalisation/CytologicMap" if {![file exists $FichierCyto]} { Espionne "$FichierCyto does not exist" return "" } set LesBandes {} set DebutDeRef 1 set ChromosomeDeRef "" set LesChromosomes {} foreach Ligne [LesLignesDuFichier $FichierCyto] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Chromosome [NumeroDuChromosome [lindex $LaLigne 0]] if {$ChromosomeDeRef != $Chromosome} { lappend LesChromosomes $Chromosome set ChromosomeDeRef $Chromosome set DebutDeRef 1 } set Bande [lindex $LaLigne 1] set Quoi [lindex $LaLigne 3] set Fin [lindex $LaLigne 2] if {[string equal -nocase "centromere" $Quoi]} { if {![info exists Tab($Chromosome,Centromere,D)]} { set Tab($Chromosome,Centromere,D) $DebutDeRef set Tab($Chromosome,Centromere,F) $Fin } if {$DebutDeRef < [set Tab($Chromosome,Centromere,D)]} {set Tab($Chromosome,Centromere,D) $DebutDeRef} if {[set Tab($Chromosome,Centromere,F)] < $Fin } {set Tab($Chromosome,Centromere,F) $Fin } } if {![info exists Tab($Chromosome,pter,D)]} { set Tab($Chromosome,pter,D) 1e200 set Tab($Chromosome,pter,F) -1e200 } if {$DebutDeRef < [set Tab($Chromosome,pter,D)]} { set Tab($Chromosome,pter,D) $DebutDeRef set Tab($Chromosome,pter,F) $Fin } if {![info exists Tab($Chromosome,qter,D)]} { set Tab($Chromosome,qter,D) 1e200 set Tab($Chromosome,qter,F) -1e200 } if {[set Tab($Chromosome,qter,F)] < $Fin} { set Tab($Chromosome,qter,D) $DebutDeRef set Tab($Chromosome,qter,F) $Fin } lappend LesBandes [list $Chromosome $Bande $DebutDeRef $Fin] set DebutDeRef [expr $Fin + 1] } foreach Chromosome $LesChromosomes { if {[info exists Tab($Chromosome,Centromere,D)]} { set Bande "${Chromosome}cent" set D [set Tab($Chromosome,Centromere,D)] set F [set Tab($Chromosome,Centromere,F)] lappend LesBandes [list $Chromosome $Bande $D $F] } if {[info exists Tab($Chromosome,pter,D)]} { set Bande "${Chromosome}pter" set D [set Tab($Chromosome,pter,D)] set F [set Tab($Chromosome,pter,F)] lappend LesBandes [list $Chromosome $Bande $D $F] } if {[info exists Tab($Chromosome,qter,D)]} { set Bande "${Chromosome}qter" set D [set Tab($Chromosome,qter,D)] set F [set Tab($Chromosome,qter,F)] lappend LesBandes [list $Chromosome $Bande $D $F] } } return [lsort -index 0 [lsort -index 2 -integer $LesBandes]] } proc LesBandesCytologiquesDeLaLocalisation {Contig Debut Fin} { set Sens "+" if {$Fin < $Debut} {set tmp $Fin; set Fin $Debut; set Debut $tmp} set LesCoordonnees [CoordonneesSurChromosome $Contig $Debut $Fin $Sens] set Chromosome [lindex $LesCoordonnees 0] set D [lindex $LesCoordonnees 1] set F [lindex $LesCoordonnees 2] set LesBandesCytos {} foreach LaBCyto [LesBandesCytologiquesDeLaRegion $Chromosome $D $F] { lappend LesBandesCytos [lindex $LaBCyto 0] } return $LesBandesCytos } proc LesBandesCytologiquesDeLaRegion {ChromDeRef Debut Fin} { set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierCyto "$RepLocalisation/CytologicMap" if {![file exists $FichierCyto]} { Espionne "$FichierCyto does not exist" return "" } set Max 0 set LesBandes {} foreach Ligne [LesLignesDuFichier $FichierCyto] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Chromosome [NumeroDuChromosome [lindex $LaLigne 0]] if {$Chromosome != $ChromDeRef} {continue} set Borne [lindex $LaLigne 2] lappend LesBandes $LaLigne if {$Max < $Borne} {set Max $Borne} } if {1e+5 < $Max} {set Facteur 1} else {set Facteur 1e+6} set FinBCytoPrecedent 0 set LesBandesOccupees {} foreach LaBande $LesBandes { set Bande [lindex $LaBande 1] set Borne [lindex $LaBande 2] set FinBCyto [expr round($Borne*$Facteur)] set TailleBCyto [expr $FinBCyto - $FinBCytoPrecedent] if {[CesRegionsSontEllesOverlappantes $Debut $Fin $FinBCytoPrecedent $FinBCyto]} { lappend LesBandesOccupees [list "$Bande" "$TailleBCyto" ] } set FinBCytoPrecedent $FinBCyto } return $LesBandesOccupees } proc LesBandesCytologiquesDeLorganisme {Access {Description ""} {Orga Hs}} { set LesBandes [LesBandesCytologiques $Access $Description] foreach Liste $LesBandes { if {[lindex $Liste 0]==$Orga} { set NouvelleListe [lreplace $Liste 0 0] return $NouvelleListe } } return {} } proc LesBandesPourTousLesClustersDunChromo {Chromo {NbVoisins 6} {SeuilTolerance 2}} { #Chromo doit etre de la forme HS.... if {![regexp "^HS" $Chromo]} {return "Please, give a chromosome beginning by HS"} set ScoreMaxGlobal [ScoreMaxGlobal $NbVoisins] #Espionne $ScoreMaxGlobal set ScoreMaxChromo [ScoreMaxChro $Chromo $NbVoisins] #Espionne $ScoreMaxChromo set ValeurSeuil [expr $ScoreMaxGlobal/$SeuilTolerance] if {$ScoreMaxChromo<=$ValeurSeuil} {return {}} set NbNoms 0 set LesClusters {} set Liste [LesNNScores $Chromo $NbVoisins] foreach Element $Liste { scan $Element "%s %d %s %d %d" nom score chro debut fin if {$score > $ValeurSeuil} { incr NbNoms if {$NbNoms==1} {set BorneInf $debut} if {$NbNoms>=2} {set BorneSup $fin} } else { if {$NbNoms>=2} { lappend LesClusters "$Chromo $BorneInf $BorneSup" } set NbNoms 0 } } #EspionneL $LesClusters if {$LesClusters=={}} {return ""} set FichierBandesCyto "[HumanGenomeDir]/Localisation/CytologicMap" set LesBandesDuCluster {} foreach Cluster $LesClusters { set DebutCluster [lindex $Cluster 1] set FinCluster [lindex $Cluster 2] set FinBandePrec 0 set n 0 foreach Ligne [LesLignesDuFichier $FichierBandesCyto] { scan $Ligne "%s %s %s" chr band fin if {$chr!=$Chromo} { continue } else { #set fin [expr round ($fin*1000000)] if {$fin>=$FinCluster} { incr n if {$n==1} {lappend LesBandesDuCluster $band} else {continue} } if {$DebutCluster<=$fin && $DebutCluster>=$FinBandePrec && $FinCluster>$fin} { lappend LesBandesDuCluster $band } else {set FinBandePrec $fin} } } lappend LesBandesDeTousLesClusters $LesBandesDuCluster set LesBandesDuCluster {} } return $LesBandesDeTousLesClusters } proc LesBanqueIdDuBlast {FichierBlast {Expect 1e200} {NbSubject 1e200}} { if {![file exists $FichierBlast]} {return} ###Extraction des id dans le blast reduit### set LesBId {} foreach LeHit [LesHitsDuBlast $FichierBlast $Expect $NbSubject] { regsub -all -nocase {[^0-9a-z\.\-\:_\,\/]} $LeHit " " LeHit set BId [lindex $LeHit 0] regsub {^[^\:]*\:} $BId "" BId lappend LesBId $BId } return [ElimineLesRedondancesDansUneListe $LesBId] } proc LesBanquesBLASTDesARPs {{LesFichiersTFA ""}} { Wup "ATTENTION version utilisant les sequences dans les RSF" Wup "Permet de creer une banque blast a partir du fichier TFA" Wup "On creer a partir des access presents dans chaque categorie d ARP un banque BLAST" Wup "voir proc LesTFAsDesRSFsDesARPs" set RepARP "[RepARPAnno]" set RepTFA "$RepARP/ARP_TFA" set RepBanque "$RepARP/ARP_BLAST" set RepMACS "$RepARP/ARP_MACS" set RepSignature "$RepARP/ARP_Signature" set RepARP_Results "[RepARPAnnoWeb]" set RepTFAResults "$RepARP_Results" set RepBlastResults "$RepARP_Results" set RepMACSResults "$RepARP_Results" if {![file exists "$RepBanque"]} { file mkdir "$RepBanque" } if {$LesFichiersTFA == ""} { set LesFichiersTFA [glob -nocomplain -directory "$RepMACS/" "*.tfa"] #set LesFichiersTFA "/genomics/g1/ARP/alignement_ARP/ARPAnno/ARP_MACS/Orphans.tfa" } else { foreach F $LesFichiersTFA { if {! [file exists $F]} { return "" } } } foreach FichierTFA $LesFichiersTFA { if {[regexp "Modele" $FichierTFA]} {continue} set Banque [file tail $FichierTFA] regsub {.[a-z]{2,3}$} $Banque "" Banque Espionne "Banque $Banque" set Title $Banque set Cmdformadb "formatdb -i $FichierTFA -o T -t $Title -p T -n \"$RepBanque/$Banque\"" if {[catch {eval exec $Cmdformadb} Message]} {Warne "Error in Formatdb command:\n>>>>$Message"} } return "" } proc LesBanquesBLASTDesARPs_InMemory {} { Wup "ATTENTION version utilisant les infos stockees en memoire (interroge ... donc les access inconnus n y sont pas)" Wup "Permet de creer une banque blast a partir du fichier TFA" Wup "On creer a partir des access presents dans chaque categorie d ARP un banque BLAST" set RepARP "[RepARPAnno]" set RepBanque "$RepARP/ARP_BLAST" if {![file exists "$RepBanque"]} { file mkdir "$RepBanque" } set LesCategories [lsort [InterrogeLesInfosDesARPs LesCategories]] #Espionne "$LesCategories" foreach Cat $LesCategories { #Espionne "$Cat" if {! [regexp -nocase "LesARP" $Cat]} {continue} set Famille $Cat regsub -all {\-\-\-\-} $Famille "" Famille regsub "Les" $Famille "" Famille set FichierTFA "$RepBanque/${Famille}.tfa" if {[file exists $FichierTFA]} { file delete -force $FichierTFA } set LesAccessGetz [join [InterrogeLesInfosDesARPs $Cat LesAccess] "|"] set Banques "protein" set option "-view FastaSeqs" set Typ1 "acc" set Typ2 "id" set Commande "getz $option \"\\\[$Banques-$Typ1: $LesAccessGetz\\\] | \\\[$Banques-$Typ2: $LesAccessGetz\\\]\"" #Espionne "$Commande" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {continue} if {$GetzOut==""} {continue} regsub -all {protein\|} $GetzOut "" GetzOut regsub -all {\|} $GetzOut " " GetzOut #Espionne "$Cat\n$GetzOut" AppendAuFichier $FichierTFA $GetzOut lappend LesFichiersTFA $FichierTFA } foreach FichierTFA $LesFichiersTFA { set Banque [file tail $FichierTFA] regsub {.[a-z]{2,3}$} $Banque "" Banque Espionne "Banque $Banque" set Title $Banque set Cmdformadb "formatdb -i $FichierTFA -o T -t $Title -p T -n \"$RepBanque/$Banque\"" if {[catch {eval exec $Cmdformadb} Message]} {Warne "Error in Formatdb command:\n>>>>$Message"} } return "" } proc LesBanquesDeLaFerme {Ferme} { set OnAttendPP 1 set LesBanques {} foreach Ligne [LesLignesDuFichier $Ferme] { if {$OnAttendPP} { if {[regexp {\.\.} $Ligne]} { set OnAttendPP 0 } continue } scan $Ligne "%s" B lappend LesBanques $B } return $LesBanques } proc LesBanquesDuNal {Fichier {Rep ""}} { if {$Rep==""} { set Rep "SameDir" } if {$Rep=="SameDir"} { set Rep "[file dirname $Fichier]/" } set LesBanques {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp "^DBLIST " $Ligne]} { continue } while {[regsub -all " " $Ligne " " Ligne]} {} set LesBanques [lrange [split $Ligne " "] 1 end] } set LesBonnesBanques {} foreach Banque $LesBanques { set Banque [file tail $Banque] lappend LesBonnesBanques "$Rep$Banque" } return $LesBonnesBanques } proc LesBanquesIdEnStock {K {LBID Interrogation}} { global LesBanquesIdEnStock if {$LBID=="UnSet" && [info exists LesBanquesIdEnStock($K)]} { unset LesBanquesIdEnStock($K) return } if {$LBID=="Interrogation"} { return [set LesBanquesIdEnStock($K)] } set LesBanquesIdEnStock($K) $LBID return $LBID } proc LesBestProteinAndmRNAForeachOrganism {Nom FichierMSF {IdDesProtId 0.99} {IdMinStrict 0.3}} { if {![file exists $FichierMSF ]} {return} if {[AskMSF $FichierMSF LesAccess] == ""} {return} if {[AskMSF $FichierMSF $Nom] != ""} { set Query $Nom } elseif {[AskMSF $FichierMSF "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" } else { return } set LeTexte {} set LesAccess [AskMSF $FichierMSF LesAccess] AskLesPagesInfos load $LesAccess protein set LesAcNucs {} set Tab($Nom,LesOrgas) {} foreach Access $LesAccess { if {[string equal -nocase $Access $Query]} {continue} if {[EstUnAccessPDB $Access ]} {continue} set Id1 [IDdansMSF $FichierMSF $Query $Access SelonB] if {$Id1 < $IdMinStrict} {continue} set Id2 [IDdansMSF $FichierMSF $Query $Access SelonA] if {$Id2 < $IdMinStrict} {continue} if {$Id1 < $Id2} {set Id $Id1} else {set Id $Id2} set Page [AskLesPagesInfos ask $Access] if {$Page == ""} {continue} Espionne $Access foreach Orga [lsort -unique [LesOrgasDeLaPage_PageInfo $Page]] { if {[info exists Tab($Nom,$Orga,$Access)]} {continue} set Tab($Nom,$Orga,$Access) [list $Access $Id] if {![info exists Tab($Nom,$Orga,LesProteines)]} { set Tab($Nom,$Orga,LesProteines) {} lappend Tab($Nom,LesOrgas) $Orga } lappend Tab($Nom,$Orga,LesProteines) [list $Access $Id] } foreach AcNuc [LesAcNucsDeLaProt_PageInfo $Page] { lappend LesAcNucs $AcNuc } } AskLesPagesInfos load [lsort -unique $LesAcNucs] genbankfull foreach Orga [lsort -unique [set Tab($Nom,LesOrgas)]] { set LesProteines [lsort -index end -real -decreasing [set Tab($Nom,$Orga,LesProteines)]] set LaProteine [lindex $LesProteines 0] set AccessDeRef [lindex $LaProteine 0] set LesProteinesSelect {} set LesmRNAsSelect {} Espionne $Orga foreach LaProteine $LesProteines { set AccessProt [lindex $LaProteine 0] set IdAvecAccessDeRef [IDdansMSF $FichierMSF $AccessDeRef $AccessProt SelonB] if {$IdAvecAccessDeRef < $IdDesProtId} {continue} set IdAvecAccessDeRef [IDdansMSF $FichierMSF $AccessDeRef $AccessProt SelonA] if {$IdAvecAccessDeRef < $IdDesProtId} {continue} set PageInfoProt [AskLesPagesInfos ask $AccessProt] if {$PageInfoProt == ""} {continue} set SeqProtDeRef [string toupper [string trim [LaSequenceDuTexteEMBL $PageInfoProt]]] regsub -nocase {^[M]*} $SeqProtDeRef "" SeqProtDeRef set TailleProt [TailleDeLaProt_PageInfo $PageInfoProt] lappend LesProteinesSelect [list $AccessProt $Id $TailleProt $PageInfoProt] foreach AccessGB [LesAcNucsDeLaProt_PageInfo $PageInfoProt] { set PageInfoGB [AskLesPagesInfos ask $AccessGB] if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfoGB]} {continue} set EstCeLeMemeOrga 0 foreach OrgaDumRNA [LesOrgasDeLaPage_PageInfo $PageInfoGB] { if {[string equal -nocase $OrgaDumRNA $Orga]} {set EstCeLeMemeOrga 1;break} } if {!$EstCeLeMemeOrga} {continue} set SeqProtDumRNA [string toupper [string trim [SeqProtDumRNA_PageInfo $PageInfoGB]]] regsub -nocase {^[M]*} $SeqProtDumRNA "" SeqProtDumRNA set EstCeLaMemeProt 0 if {$SeqProtDumRNA == $SeqProtDeRef} {set EstCeLaMemeProt 1} set Taille [TailleDeLAcNuc_PageInfo $PageInfoGB ] lappend LesmRNAsSelect [list $AccessGB $Taille $PageInfoGB $AccessProt $Id $TailleProt $PageInfoProt $EstCeLaMemeProt] } } if {$LesProteinesSelect == {}} {continue} if {$LesmRNAsSelect == {}} { set LaProteine [lindex [lsort -index 2 -real -decreasing $LesProteinesSelect] 0] set AccessProt [lindex $LaProteine 0] set Id [IDdansMSF $FichierMSF $Query $AccessProt SelonA] set TailleDeLaProt [lindex $LaProteine 2] set PageInfoProt [lindex $LaProteine 3] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " "] lappend LeTexte "$Nom\t$Orga\tProtein\t$AccessProt\t$TailleProt\t$Id\t$DefProt" continue } else { set LemRNA [lindex [lsort -index 7 -real -decreasing [lsort -index 1 -real -decreasing $LesmRNAsSelect] ] 0] set AccessGB [lindex $LemRNA 0] set TailleGB [lindex $LemRNA 1] set PageInfoGB [lindex $LemRNA 2] set DefGB [join [LaDefinitionDeLAcNuc_PageInfo $PageInfoGB] " "] set AccessProt [lindex $LemRNA 3] set Id [IDdansMSF $FichierMSF $Query $AccessProt SelonA] set TailleProt [lindex $LemRNA 5] set PageInfoProt [lindex $LemRNA 6] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " "] set EstCeLaMemeProt [lindex $LemRNA 7] if {!$EstCeLaMemeProt} {set QuEstCe "Variant"} else {set QuEstCe ""} lappend LeTexte "$Nom\t$Orga\tProtein\t$AccessProt\t$TailleProt\t$Id\t$DefProt" lappend LeTexte "$Nom\t$Orga\tmRNA\t$AccessGB\t$TailleGB\t$Id\t$DefGB\t$QuEstCe" } } AskLesPagesInfos unset if {[info exists Tab ]} {unset Tab} return $LeTexte } proc LesBestProteinesHumanAvecLoc {FichierClusters} { set Liste [ListeDesJR $FichierClusters] set FichierBest "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" if {![file exists $FichierBest]} {return} set FichierBestLocNuctfa "[RepertoireDuGenome]/Localisation/BestLocalisation_Human_Box" set FichierBestLocProttfa "[RepertoireDuGenome]/Localisation/BestProttfaLocalisation_Human" set FichierBestLocmRNA "[RepertoireDuGenome]/Localisation/BestmRNAHsapLocalisation_Human" if {![file exists $FichierBestLocNuctfa] || ![file exists $FichierBestLocProttfa] || ![file exists $FichierBestLocmRNA]} {return} set Entete "Name\tTwins\tClone\tCytoBand\tSource Loc.\tAcc. Protein\tId. Prot\tDefinition Prot.\tOrganism P.\tLength Prot\tAcc. mRNA\tId. mRNA\tDefinition mRNA\tOrganism mRNA\tLength mRNA" lappend LApercu $Entete foreach Nom $Liste { #pb dans les infos de exonhit set CodeExonhit [ExtraitInfo $Nom "OwnerOfCDNA"] set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] set Loc [InterrogeLocalisation $FichierBestLocNuctfa Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } else { set Loc [InterrogeLocalisation $FichierBestLocProttfa Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } else { set Loc [InterrogeLocalisation $FichierBestLocmRNA Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } } } set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [string toupper $AccessmRNA] set AccessProt [string toupper $AccessProt] set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessmRNA Identity] set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessProt Identity] set LesOrgasP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt LesOrganismes] set DefP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Definition] set TailleP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Taille] set LesOrgasR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA LesOrganismes] set DefR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Definition] set TailleR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Taille] if {$AccessmRNA!="" || $AccessProt!=""} { lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR" } } return $LApercu } proc LesBestProteinesHumanAvecLocEtGO {FichierClusters} { if {![file exists $FichierClusters]} { set Liste [ListeDesPABs] } else { set Liste [ListeDesJR $FichierClusters] } set FichierBest "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" if {![file exists $FichierBest]} {return} set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" if {![file exists $FichierGO]} {return} set FichierBestLocNuctfa "[RepertoireDuGenome]/Localisation/BestLocalisation_Human_Box" set FichierBestLocProttfa "[RepertoireDuGenome]/Localisation/BestProttfaLocalisation_Human" set FichierBestLocmRNA "[RepertoireDuGenome]/Localisation/BestmRNAHsapLocalisation_Human" if {![file exists $FichierBestLocNuctfa] || ![file exists $FichierBestLocProttfa] || ![file exists $FichierBestLocmRNA]} {return} set Entete "Name\tTwins\tClone\tCytoBand\tSource Loc.\tAcc. Protein\tId. Prot\tDefinition Prot.\tOrganism P.\tLength Prot\tAcc. mRNA\tId. mRNA\tDefinition mRNA\tOrganism mRNA\tLength mRNA\tGO" lappend LApercu $Entete foreach Nom $Liste { #pb dans les infos de exonhit et de SSH2 set CodeExonhit [ExtraitInfo $Nom "OwnerOfCDNA"] if {[file exists $FichierClusters]} { set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] } set LesDefinitionsGO {} set LesGO [InterrogeGeneOntology $FichierGO $Nom LesGO] if {$LesGO!={}} { foreach GO $LesGO { set LaDefinitionGO [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] lappend LesDefinitionsGO $LaDefinitionGO } } set Loc [InterrogeLocalisation $FichierBestLocNuctfa Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } else { set Loc [InterrogeLocalisation $FichierBestLocProttfa Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } else { set Loc [InterrogeLocalisation $FichierBestLocmRNA Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } } } set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [string toupper $AccessmRNA] set AccessProt [string toupper $AccessProt] set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessmRNA Identity] set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessProt Identity] set LesOrgasP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt LesOrganismes] set DefP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Definition] set TailleP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Taille] set LesOrgasR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA LesOrganismes] set DefR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Definition] set TailleR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Taille] if {$AccessmRNA!="" || $AccessProt!=""} { #lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR\t$LesDefinitionsGO" lappend LApercu "$Nom\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR\t$LesDefinitionsGO" } } return $LApercu } proc LesBestProteineshuman2 {FichierClusters} { set Liste [ListeDesJR $FichierClusters] set NbBons 0 set NbVides 0 foreach Nom $Liste { #set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [string toupper $AccessmRNA] set AccessProt [string toupper $AccessProt] if {$AccessmRNA=="" && $AccessProt==""} {incr NbVides} set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessmRNA Identity] set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessProt Identity] if {$IdmRNA>0.94 && $IdProt>0.94} {incr NbBons} } Espionne "nb vides: $NbVides" return "nb bons sup 0.94: $NbBons" } proc LesBidir {Path {Organism zebrafish} {Database refGene} {LongueurMoyennePromoteurBidir 1000} {BirdVersion bird} {MinOuMax Max}} { # Recupere les gènes bidirectionnels comme suit : # - tous les genes + # - les genes - a distance maxi de $LongueurMoyennePromoteurBidir (1000) # L'option MinOuMax permet de selectionner l'intergene de taille maximum ou minimum si plusieurs candidats if { $MinOuMax == "Max"} { set OrderBy1 "DESC" set OrderBy2 "ASC" } if { $MinOuMax == "Min"} { set OrderBy1 "ASC" set OrderBy2 "DESC" } Espionne " " set Promoteurs 0 set Pseudo 0 set BrinPlus 0 set BrinMoins 0 set BiDir 0 Espionne "LesBidir: Recuperation des genes sur les brins +" set FichierDesRequetes [open "/tmp/LesBidir$Organism.bql" "w"] puts $FichierDesRequetes "ID * DB UCSC" #puts $FichierDesRequetes "WH SQLNATIVE SELECT bin, access, chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds, id, name2, cdsStartStat, cdsEndStat, exonFrames, name, mRNA, spID, spDisplayID, geneSymbol, refseq, protAcc, typegene, description FROM ucschuman.$Database WHERE strand='+' ORDER BY chrom, txStart $OrderBy1" puts $FichierDesRequetes "WH SQLNATIVE SELECT chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds, id, name2, cdsStartStat, cdsEndStat, exonFrames, name FROM ucsc$Organism.$Database WHERE strand='+' ORDER BY chrom, txStart $OrderBy1" puts $FichierDesRequetes "LM 100000" puts $FichierDesRequetes "#" close $FichierDesRequetes exec /biolo/bird/bin/birdql_client.sh "/tmp/LesBidir$Organism.bql" "bird" "/tmp/LesBidir$Organism.res" Espionne "LesBidir: Constitution des requetes sur le brin -" set FichierDesRequetesExecutees [open "/tmp/LesBidir$Organism.res" "r"] set FichierDesRequetes2 [open "/tmp/LesBidir$Organism.bql2" "w"] gets $FichierDesRequetesExecutees Ligne while { [gets $FichierDesRequetesExecutees Ligne] >=0 } { set Liste [split $Ligne "|"] #ScanLaListe $Liste bin access chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name cdsStartStat cdsEndStat exonFrames name mRNA spID spDisplayID geneSymbol refseq protAcc typegene description ScanLaListe $Liste chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name cdsStartStat cdsEndStat exonFrames name if { [string range $chrom 0 0] != "c"} { set chrom "chr$chrom" } set Limite [expr $txStart - $LongueurMoyennePromoteurBidir] puts $FichierDesRequetes2 "ID * DB UCSC" #puts $FichierDesRequetes2 "WH SQLNATIVE SELECT bin, access, chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds, id, name2, cdsStartStat, cdsEndStat, exonFrames, name, mRNA, spID, spDisplayID, geneSymbol, refseq, protAcc, typegene, description FROM ucschuman.GeCo WHERE strand='-' AND chrom='$chrom' AND txEnd >= $Limite AND txEnd < $txStart ORDER BY txEnd $OrderBy2 fetch first 1 rows only" puts $FichierDesRequetes2 "WH SQLNATIVE SELECT chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds, id, name2, cdsStartStat, cdsEndStat, exonFrames, name FROM ucsc$Organism.$Database WHERE strand='-' AND chrom='$chrom' AND txEnd >= $Limite AND txEnd < $txStart ORDER BY txEnd $OrderBy2 fetch first 1 rows only" puts $FichierDesRequetes2 "#" } close $FichierDesRequetes2 BirdFetch "/tmp/LesBidir$Organism.bql2" "/tmp/LesBidir$Organism.res2" set FichierDesRequetesExecutees1 [open "/tmp/LesBidir$Organism.res" "r"] set FichierDesRequetesExecutees2 [open "/tmp/LesBidir$Organism.res2" "r"] set FichierDesBidir [open "$Path.$Organism.bidir" "w"] set FichierDesAccess [open "$Path.$Organism.acc" "w"] set FichierDesCoord [open "$Path.$Organism.coord" "w"] Espionne "LesBidir: Ecriture des bidir" gets $FichierDesRequetesExecutees1 Ligne1 while { [gets $FichierDesRequetesExecutees1 Ligne1] >=0 } { incr BrinPlus set Liste1 [split $Ligne1 "|"] #ScanLaListe $Liste1 bin1 access1 chrom1 strand1 txStart1 txEnd1 cdsStart1 cdsEnd1 exonCount1 exonStarts1 exonEnds1 id1 name21 cdsStartStat1 cdsEndStat1 exonFrames1 name1 mRNA1 spID1 spDisplayID1 geneSymbol1 refseq1 protAcc1 typegene1 description1 ScanLaListe $Liste1 chrom1 strand1 txStart1 txEnd1 cdsStart1 cdsEnd1 exonCount1 exonStarts1 exonEnds1 id1 name21 cdsStartStat1 cdsEndStat1 exonFrames1 name1 gets $FichierDesRequetesExecutees2 Ligne2 gets $FichierDesRequetesExecutees2 Ligne2 if { $Ligne2 != "EMPTY" && [string range $Ligne2 0 4] != "Query"} { incr BrinMoins set Liste2 [split $Ligne2 "|"] #ScanLaListe $Liste2 bin2 access2 chrom2 strand2 txStart2 txEnd2 cdsStart2 cdsEnd2 exonCount2 exonStarts2 exonEnds2 id2 name22 cdsStartStat2 cdsEndStat2 exonFrames2 name2 mRNA2 spID2 spDisplayID2 geneSymbol2 refseq2 protAcc2 typegene2 description2 ScanLaListe $Liste2 chrom2 strand2 txStart2 txEnd2 cdsStart2 cdsEnd2 exonCount2 exonStarts2 exonEnds2 id2 name22 cdsStartStat2 cdsEndStat2 exonFrames2 name2 set TaillePromoteurCommun [expr $txStart1 - $txEnd2] if { $name1 != "Pseudogene" && $name2 != "Pseudogene" } { set chromZ $chrom2 if { $chrom2 == "chr1" } { set chromZ "chr01"} if { $chrom2 == "chr2" } { set chromZ "chr02"} if { $chrom2 == "chr2_random" } { set chromZ "chr02_random"} #regsub -all {\s} $description1 "." description1 #regsub -all {\s} $description2 "." description2 #puts $FichierDesBidir "$chromZ $txEnd2 $txStart1 $TaillePromoteurCommun $access1 $typegene1 $description1 $access2 $typegene2 $description2" puts $FichierDesBidir "$chromZ $txEnd2 $txStart1 $TaillePromoteurCommun $name1 $name2" puts $FichierDesAccess "$name1" puts $FichierDesAccess "$name2" puts $FichierDesCoord "$chromZ|$txEnd2|$txStart1" incr BiDir } else { incr Pseudo } } } close $FichierDesBidir exec sort -u "$Path.$Organism.bidir" ">$Path.$Organism.sort" set FichierDesBidir [open "$Path.$Organism.sort" "r"] set FichierDesPromoteurs [open "$Path.$Organism.promobi" "w"] gets $FichierDesBidir LigneBiDirB #ScanLaListe $LigneBiDirB Bchrom BtxEnd2 BtxStart1 BTaillePromoteurCommun Baccess1 Btypegene1 Bdescription1 Baccess2 Btypegene2 Bdescription2 ScanLaListe $LigneBiDirB Bchrom BtxEnd2 BtxStart1 BTaillePromoteurCommun Baccess1 Baccess2 set Dedoublonnes 1 puts $FichierDesPromoteurs "$Dedoublonnes $LigneBiDirB" Espionne "Selection des promoteurs uniques" while { [gets $FichierDesBidir LigneBiDirA] >=0 } { #ScanLaListe $LigneBiDirA Achrom AtxEnd2 AtxStart1 ATaillePromoteurCommun Aaccess1 Atypegene1 Adescription1 Aaccess2 Atypegene2 Adescription2 ScanLaListe $LigneBiDirA Achrom AtxEnd2 AtxStart1 ATaillePromoteurCommun Aaccess1 Aaccess2 if { $Achrom != $Bchrom } { puts $FichierDesPromoteurs "$Dedoublonnes $LigneBiDirA $Chevauchant" incr Promoteurs incr Dedoublonnes } else { if { $BtxEnd2 != $AtxEnd2 && $BtxStart1 != $AtxStart1 } { # Dedoublonnage incr Dedoublonnes if { $BtxEnd2 < $AtxStart1 } { set Chevauchant "Non" puts $FichierDesPromoteurs "$Dedoublonnes $LigneBiDirA" incr Promoteurs } else { set Chevauchant [expr $Dedoublonnes - 1] puts $FichierDesPromoteurs "$Dedoublonnes $LigneBiDirA" } } } set Bchrom $Achrom set BtxEnd2 $AtxEnd2 set BtxStart1 $AtxStart1 set Baccess1 $Aaccess1 set Baccess2 $Aaccess2 #set Btypegene1 $Atypegene1 #set Btypegene2 $Atypegene2 #set Bdescription1 $Adescription1 #set Bdescription2 $Adescription2 set BTaillePromoteurCommun $ATaillePromoteurCommun } close $FichierDesPromoteurs close $FichierDesBidir Espionne "LesBidir: Fin" Espionne "- Genes sur le Brin+ : $BrinPlus" Espionne "- Genes sur le Brin- A bonne distance : $BrinMoins" Espionne "- Dont..." Espionne " * Contenant au moins un pseudogene : $Pseudo" Espionne " * Bidir : $BiDir" Espionne "- Promoteurs bidir dedoublonnes : $Dedoublonnes" Espionne "- Promoteurs bidir uniques : $Promoteurs" } proc LesBlastManquants_Gretta {} { set LesNoms {} foreach Nom [ListeDesPABs] { if {[file exists "[RepertoireDuGenome]/blastp/$Nom"] || ![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} lappend LesNoms $Nom } EspionneL [LaListeSplittee $LesNoms 100] } 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 LesBlastsDuCongelo {} { set OiCode [PreFixe] set Domain [OiDomainFromOiCode $OiCode] set OX [NotreOX] set Science [ScienceOiDeMonDomaine] set LesOP [QuestionDeScience $Science "ret WIW $OX ListOfOP"] return $LesOP } proc LesBlastsDuPsiBlast {Fichier {Nieme ""} {Trie ""}} { if {$Trie==""} { set Trie 0 } else { set Trie 1 } if {$Nieme==""} { set Nieme "All" } set DansEntete 1 set DansFin 0 set LaFin {} set LesBlasts {} foreach Ligne [LesLignesDuFichier $Fichier] { if {$DansFin || [regexp " Database" $Ligne]} { set DansFin 1 set DansEntete 0 lappend LaFin $Ligne continue } if {[regexp "Results from round" $Ligne]} { set DansEntete 0 if {[info exists LeCourant]} { lappend LesBlasts $LeCourant } set LeCourant $LEntete continue } if {$DansEntete} { lappend LEntete $Ligne continue } lappend LeCourant $Ligne } if {[info exists LeCourant]} { lappend LesBlasts $LeCourant } set LesBonBlasts {} foreach LeBlast $LesBlasts { LConcat LeBlast $LaFin lappend LesBonBlasts [join $LeBlast "\n"] } if {$Nieme=="All"} { return $LesBonBlasts } if {[regexp {^[0-9]+$} $Nieme]} { incr Nieme -1 } set BlastNonTrie [lindex $LesBonBlasts $Nieme] if {$Trie} { set BlastTrie [DecortiqueBlast $BlastNonTrie "SansSeuilExpect" "SansLimiteDeNombre" RetourneBlastTrie] return $BlastTrie } return $BlastNonTrie } proc LesBlocks {grp window} { global LNOrdali CpB set nseqs [llength [set CpB($grp)]] # matrice comparaison array set Matrix [InitClustalMatrix gon250] # taken from comp_blocks.c from rascal if {$grp ne "GroupeToutLeMonde"} { if {$nseqs < 10} { set block_cutoff 15 } else { set block_cutoff 10 } set minlength 6 set conserved 0.0 } else { if {$nseqs < 100} { set block_cutoff 10 } elseif {$nseqs < 250} { set block_cutoff 6 } else { set block_cutoff 5 } set minlength 4 set conserved 0.8 } get_blocks $grp $block_cutoff $window $conserved $minlength if {$grp eq "GroupeToutLeMonde"} { foreach b $CpB(Blocks,$grp) { lassign $b d f puts "GLOBALCOREBLOCK $d $f" } return } set Lprf1 [list] set Lprf2 [list] set Lcode [list] set Laa $Matrix(laa) puts "Laa $Laa" if {[llength [set CpB($grp)]] > 1} { set fst 0 foreach b [set CpB(Blocks,$grp)] { lappend Lprf1 [Profile1DuBlock $grp $b Matrix 1.0] lappend Lprf2 [Profile2DuBlock $grp $b $Laa] lappend Lcode 0 if {$grp eq "Group1" && $fst == 1} { set fst 0 puts "\ndata Group 1 $b" puts "profile 1" puts [join [lindex $Lprf1 1] \n] puts "profile 2" puts [join [lindex $Lprf2 1] \n] } incr fst } } set CpB($grp,Lprf1) $Lprf1 set CpB($grp,Lprf2) $Lprf2 set CpB($grp,Lcode) $Lcode return } proc LesBoiteRepresentativeLitigieuse {} { #pas un prog juste pour garder traces de ce que jai fait a la main if {$Ligne=="22" || $Ligne=="102" || $Ligne=="729" || $Ligne=="1074" || $Ligne=="405" || $Ligne=="1251" || $Ligne=="1286" || $Ligne=="1355" || $Ligne=="1417" || $Ligne=="1578" || $Ligne=="1680" || $Ligne=="1737" || $Ligne=="1760" || $Ligne=="962" || $Ligne=="1880" || $Ligne =="2058" || $Ligne=="1379" || $Ligne=="1380" || $Ligne=="1381" || $Ligne=="1626" || $Ligne=="1708" || $Ligne =="2056" || $Ligne =="2169" || $Ligne =="2173"} { set premiereloc 1 foreach Nom $ListeDesNoms { set Loc [ExtraitInfo $Nom "LocUcscFrom200602"] set LesMotsLoc [split $Loc ":- "] set Nvstart "" set Nvstop "" set longgn "" Espionne "$Nom $Loc" if {$premiereloc} { set premiereloc 0 set chr [lindex $LesMotsLoc 0] set start [lindex $LesMotsLoc 1] set stop [lindex $LesMotsLoc 2] if {$start=="" || $stop==""} { continue } set longgn [expr $stop - $start] set LongMax $longgn continue } set Nvchr [lindex $LesMotsLoc 0] set Nvstart [lindex $LesMotsLoc 1] set Nvstop [lindex $LesMotsLoc 2] Espionne "$start $Nvstop $stop" if {$Nvstart=="" || $Nvstop==""} { continue } if {$chr!= $Nvchr} { Espionne "pas meme chr" set different 1 continue } if {$Nvstart == $start && $Nvstop == $stop} { Espionne "meme loc" set different 0 } elseif {$start > $Nvstart && $Nvstart < $stop && $start < $Nvstop && $Nvstop > $stop} { Espionne "ca chevauche 1" set different 0 } elseif {$start < $Nvstart && $Nvstart < $stop} { Espionne "ca chevauche 2" set different 0 } elseif {$start < $Nvstop && $Nvstop < $stop} { Espionne "$start $Nvstop $stop" Espionne "ca chevauche 3" set different 0 } elseif {$start > $Nvstart && $stop < $Nvstop} { Espionne "ca chevauche 4" set different 0 } else { Espionne "chevauche pas" set different 1 } set start $Nvstart set stop $Nvstop } } if {$Ligne=="22" || $Ligne=="102" || $Ligne=="729" || $Ligne=="1074" || $Ligne=="1417" || $Ligne=="1578" || $Ligne=="1680" || $Ligne=="1880"} { set BonneBoite $ListeDesNoms } if {$Ligne=="405"} { set BonneBoite [list "EVI04050"] } if {$Ligne=="962"} { set BonneBoite [list "EVI09620"] } if {$Ligne=="1251"} { set BonneBoite [list "EVI12511" "EVI12512"] } if {$Ligne=="1286"} { set BonneBoite [list "EVI12860" "EVI12861" "EVI12862" "EVI12863" "EVI12864"] } if {$Ligne=="1355"} { set BonneBoite [list "EVI13550"] } if {$Ligne=="1379"} { set BonneBoite [list "EVI13793"] } if {$Ligne=="1380"} { set BonneBoite [list "EVI13801"] } if {$Ligne=="1381"} { set BonneBoite [list "EVI13810"] } if {$Ligne=="1626"} { set BonneBoite [list "EVI16264"] } if {$Ligne=="1708"} { set BonneBoite [list "EVI17080"] } if {$Ligne=="1737"} { set BonneBoite [list "EVI17372"] } if {$Ligne=="1760"} { set BonneBoite [list "EVI17602"] } if {$Ligne =="2056"} { set BonneBoite [list "EVI20560"] } if {$Ligne =="2058"} { set BonneBoite [list "EVI20580"] } if {$Ligne =="2169"} { set BonneBoite [list "EVI21695"] } if {$Ligne =="2173"} { set BonneBoite [list "EVI21730" "EVI21731" "EVI21732" "EVI21733"] } if {$Ligne =="2458"} { set BonneBoite [list "EVI24581" "EVI24583" "EVI24584" "EVI24585" "EVI24586" "EVI24587"] } if {$BonneBoite!={}} { Espionne "$BonneBoite Main" RangeMoi set EviOf $Ligne $BonneBoite "LaetitiaChoose" continue } } proc LesBornesAvecLesNucEMBL {} { global RepertoireDuGenome global ListeDesPABs if {[file exists "$RepertoireDuGenome/fiches/bornesdespabs"]} { if {[OuiOuNon "$RepertoireDuGenome/fiches/bornesdespabs \n exists. Do I cancel ?"]} { return "" } } foreach Fichier [glob "$RepertoireDuGenome/nucembl/*"] { foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^AC" $Ligne]} { scan $Ligne "%s %s" AC Nom continue } if {[regexp "CC \-\!\- from" $Ligne]} { scan $Ligne "%s %s %s %d %s %d%s %s %s" CC XXX FROM Debut TO Fin POINT ORIENTATION Orient lappend LesBornes "$Nom $Debut $Fin $Orient" break } } Espionne "$Nom $Debut $Fin $Orient" } return [SauveLesLignes $LesBornes dans "$RepertoireDuGenome/fiches/bornesdespabs"] } proc LesBornesDeChroContig {Chro Contig} { global RepertoireDuGenome set AA [AffymetrixAssocie] if {$AA==""} { set LesAd {} set LesAf {} } else { set LesAd [LesLignesDuFichier "$RepertoireDuGenome/../$AA/fiches/localisationchrocontig.trid.best"] set LesAf [LesLignesDuFichier "$RepertoireDuGenome/../$AA/fiches/localisationchrocontig.trif.best"] } set LesCd [LesLignesDuFichier "$RepertoireDuGenome/fiches/localisationchrocontig.trid.best"] set LesCf [LesLignesDuFichier "$RepertoireDuGenome/fiches/localisationchrocontig.trif.best"] lappend $LesAf "Fin HZ" lappend $LesCd "Fin HZ" set iAd 0 set iAf 0 set iCd 0 set iCf 0 set LesBornes {} foreach LesAouC [list $LesAf $LesCd] { set iAf 0 set longAf [llength $LesAouC] while {$iAf<$longAf} { set Af [lindex $LesAouC $iAf] scan $Af "%s %s %s %d %d %s" NomAf ChroAf ContigAf DebutAf FinAf SensAf if {$SensAf=="+"} { set SensAf "F" } else { set SensAf "R" } if {"$Chro $Contig" > "$ChroAf $ContigAf"} { incr iAf ; continue } if {"$Chro $Contig" < "$ChroAf $ContigAf"} { break } if { ! [regexp $Contig $ContigAf]} { incr iAf ; continue } lappend LesBornes "$NomAf $DebutAf $FinAf $SensAf" incr iAf } } return $LesBornes } proc LesBornesDeGlimmer {{NomNumeroDuDernierExistant ""} {FichierGlimmer ""}} { global RepertoireDuGenome FaireLire "Attention, Glimmer 1.04 lit result.out\nGlimmer 2.0 lit result.coord" set NePasPrendreLesDouteux 0 if {$NomNumeroDuDernierExistant==""} { set Prefixe [PreFixe] set DernierNumero "0000" } else { regsub -all {[0-9]} $NomNumeroDuDernierExistant "" Prefixe regsub -all -nocase {[a-z_]} $NomNumeroDuDernierExistant "" ChaineDernierNumero if {$ChaineDernierNumero==""} { set ChaineDernierNumero 0 } scan $ChaineDernierNumero "%d" DernierNumero } if {$FichierGlimmer==""} { set FichierGlimmer "$RepertoireDuGenome/glimmer/result.coord" } while { ! [file exists $FichierGlimmer]} { if {[OuiOuNon "I can't find the Glimmer output\n$FichierGlimmer\n\Do I run Glimmer ?"]} { Glimmer } else { return {} } } set OnAttendQueCaVienne [regexp "Putative Genes" [ContenuDuFichier $FichierGlimmer]] set LesBornesDeGlimmer {} foreach Ligne [LesLignesDuFichier $FichierGlimmer] { Espionne $Ligne if {[regexp "Putative Genes" $Ligne]} { set OnAttendQueCaVienne 0 continue } else { if {$OnAttendQueCaVienne} { continue } } if {$NePasPrendreLesDouteux && [regexp {\[} $Ligne]} { continue } scan $Ligne "%d %d %d" Numero Debut Fin incr Numero $DernierNumero set Nom [format "%s%[FormatDesNumerosPourCollection]" $Prefixe $Numero] if {$Debut < $Fin} { set Orient "F" } else { set Orient "R" set Toto $Debut set Debut $Fin set Fin $Toto } set Long [expr $Fin-$Debut+1] if {$Long>100000} { continue } set Frame [string toupper [NomDeLaFrame [expr $Debut%3] $Orient]] lappend LesBornesDeGlimmer "$Nom $Debut $Fin $Orient" } return $LesBornesDeGlimmer } proc LesBornesDesGenesEtendus {{Fichier ""}} { set LesDifferentes {} foreach Nom [ListeDesPABs] { set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Orient [Box $Nom orient] set OldBornes "$Nom $Debut $Fin $Orient" set Nouvelles [BornesDuGeneEtendu $Nom] if {$Nouvelles!=$OldBornes} { lappend LesDifferentes $OldBornes $Nouvelles } lappend LesBornes $Nouvelles } if {$Fichier==""} { return $LesBornes } if {$Fichier=="AskForFile"} { set Fichier [FichierPourSaveAs] } if {$Fichier==""} { return "" } set FichierDiff "$Fichier.diff" SauveLesLignes $LesDifferentes dans $FichierDiff return [SauveLesLignes $LesBornes dans $Fichier] } proc LesBornesDuCDS {Texte} { regsub -all "(" $Texte "" regsub -all "join" $Texte "[JoinCDS " Texte regsub -all "complement" $Texte "[ComplementCDS " Texte } proc LesBornesParLambdaIntegrase {SeqPPCR SeqSiteP SeqAttB1 SeqAttB2} { set SeqPPCR [string toupper $SeqPPCR] set SeqSiteP [string toupper $SeqSiteP] set SeqAttB1 [string toupper $SeqAttB1] set SeqAttB2 [string toupper $SeqAttB2] set LesPositions {} foreach Seq [list $SeqPPCR $SeqSiteP] { foreach S [list $SeqAttB1 $SeqAttB2] { set LongueurAttB [string length $S] set Offset 0 while {[set Pos [string first $S $Seq]]<0 } { incr Offset set S [string range $S 1 end-1] if {[string length $S]<5} {return ""} Espionne $S } set AutrePos [string last $S $Seq] if {$Pos!=$AutrePos} { FaireLire "I found two AttB at $Pos and $AutrePos" } set PosMilieuAttB [expr $Pos - $Offset + $LongueurAttB/2] Espionne "$Pos $Offset $PosMilieuAttB $S" lappend LesPositions $PosMilieuAttB } } return $LesPositions } proc LesBornesParSeqCheck {PGS} { set LesSeqCheck [split [ExtraitInfo $PGS "SeqCheck"] "/"] set LesPossibles {} set LesIllumines {} foreach Ligne $LesSeqCheck { set Ligne [string trim $Ligne] if { ! [regexp { *(P[0-9]+) } $Ligne Match Oli]} { lappend LesPossibles $Ligne continue } set Sens [Oli $Oli "Sens"] if {$Sens=="3'"} { regsub "$Oli " $Ligne "$Oli " Ligne } lappend LesPossibles $Ligne lappend LesIllumines $Ligne } set LesBons [MorceauxChoisis $LesPossibles $LesIllumines "Please select lines in the left window and press '--->'\n Reorder with 'Up' and 'Down' if necessary."] set MinD 9999 set MaxF -9999 foreach Ligne $LesBons { set D "" set F "" while {1} { scan $Ligne "%s %s %s" NomSequenceur Oli Bornes set Sens [Oli $Oli "Sens"] if { ! [regexp {[0-9]+\-[0-9]+} $Bornes]} { if {[OuiOuNon "$Ligne\is not as SeqName Pxxxx 123-987\n Do I skipp ?"]} { set D "Skip" ; break } if {[OuiOuNon "Do You want to correct it ?"]} { set Ligne [Entre $Ligne] continue } if {[OuiOuNon "Do I cancel ?"]} { return "" } continue } regsub {\-} $Bornes " " Bornes scan $Bornes "%d %d" D F break } if {$D=="Skip"} { continue } if {$Sens=="5'"} { set MinD [Mini $F $MinD] } if {$Sens=="3'"} { set MaxF [Maxi $D $MaxF] } } set Propose "$PGS $MinD $MaxF" while 1 { if {[OuiOuNon "Do I create sequencing oligos for\n$Propose ?\n\n(I'll extend it on each side)"]} { return $Propose } if {[OuiOuNon "Do You want to correct it ?"]} { set Propose [Entre $Propose] continue } if {[OuiOuNon "Do I cancel ?"]} { return "" } } } proc LesBoutonsDeLaFrame {F} { set LesBoutons {} foreach Bouton [winfo children $F] { if {[winfo class $Bouton]!="Button"} { continue } lappend LesBoutons $Bouton } return $LesBoutons } proc LesBoutonsEnfonces {{quoi features}} { global FrmBtnFea set Lb {} foreach c [winfo children $FrmBtnFea] { if {[EtatDuBouton $c]} { if {$quoi eq "features"} { lappend Lb [$c cget -text] } else { lappend Lb $c } } } return $Lb } proc LesBoutsDeLaLigneAvecTexteSeparateur {Ligne {Sep ""} {Trim ""}} { set LesBouts {} set LongSep [string length $Sep] while 1 { if {$Ligne=="" } { break } set i [string first $Sep $Ligne] if {$i<0} { set Bout $Ligne } else { set Bout [string range $Ligne 0 [expr $i - 1]] } if {$Trim!=""} { set Bout [string $Trim $Bout] } lappend LesBouts $Bout if {$i<0} { break } set Ligne [string range $Ligne [expr $i + $LongSep] end] } return $LesBouts } proc LesCDNAsEnOverlap {Nom {BestOnly ""}} { global LesCDNAsEnOverlap global RepertoireDuGenome Wup "Attention si on commence en BestOnly il le reste durant tout le run et vice versa" set BestOnly [regexp -nocase "BestOnly" $BestOnly] if {$BestOnly} { set Best ".best" } else { set Best "" } if {[info exists LesCDNAsEnOverlap($Nom)]} { return [set LesCDNAsEnOverlap($Nom)] } if {[info exists LesCDNAsEnOverlap("EstCharge")]} { return [set LesCDNAsEnOverlap("EstCharge")] } set FichierOverlap "$RepertoireDuGenome/fiches/overlap_cdnas$Best" if {[file exists $FichierOverlap]} { foreach Ligne [LesLignesDuFichier $FichierOverlap] { scan $Ligne "%s" NomLu set LesCDNAsEnOverlap($NomLu) [lrange [split $Ligne " "] 1 end] } set LesCDNAsEnOverlap("EstCharge") {} return [LesCDNAsEnOverlap $Nom] } if { ! [OuiOuNon "Do I create $FichierOverlap ?"]} { set LesCDNAsEnOverlap("EstCharge") [list "NoValues"] return [set LesCDNAsEnOverlap("EstCharge")] } set LesAf [LesLignesDuFichier "$RepertoireDuGenome/fiches/localisationchrocontig.trif$Best"] set LesCd [LesLignesDuFichier "$RepertoireDuGenome/fiches/localisationchrocontig.trid$Best"] set iAf -1 set iCd 0 set PrecedentiCd $iCd foreach Af $LesAf { incr iAf scan $Af "%s %s %s %d %d %s" NomAf ChroAf ContigAf DebutAf FinAf SensAf Espionne "[string repeat " " 40] $Af" set iCd $PrecedentiCd while {1} { set Cd [lindex $LesCd $iCd] scan $Cd "%s %s %s %d %d %s" NomCd ChroCd ContigCd DebutCd FinCd SensCd Espionne "\n $Af\n$Cd" if {"$ChroAf $ContigAf" < "$ChroCd $ContigCd"} { break } if {"$ChroAf $ContigAf" > "$ChroCd $ContigCd"} { Espionne "[string repeat " " 40] $ChroAf $ContigAf > $ChroCd $ContigCd" incr iCd continue } if {$FinCd<$DebutAf} { Espionne "[string repeat " " 40] $FinCd<$DebutAf" incr iCd continue } Espionne "je me lance dans\n $Af\n$Cd" break } if {"$ChroAf $ContigAf" < "$ChroCd $ContigCd"} { continue } for {set PrecedentiCd $iCd} {$iCd < [llength $LesCd]} { incr iCd } { set Cd [lindex $LesCd $iCd] scan $Cd "%s %s %s %d %d %s" NomCd ChroCd ContigCd DebutCd FinCd SensCd if {[CetOrdre $Af $Cd]} { break } if {$FinCd < $DebutAf} { continue } if {$NomCd==$NomAf} { continue } Espionne " $Af\n$Cd overlap" lappend LesCDNAs($NomCd) $NomAf } } foreach Nom [array names LesCDNAs] { set LesAffys [lsort -unique [set LesCDNAs($Nom)]] AppendAuFichier $FichierOverlap "$Nom [join $LesAffys " "]" } return [LesCDNAsEnOverlap $Nom] } proc LesCalculsSurLesDistances_PourRapport {} { ### Moyenne Ecart type Min Max### set LesDistances {} set LesClusters [O2C2O LesClusters foreach Cluster1 $LesClusters { foreach Cluster2 $LesClusters { if {$Cluster1 == $Cluster2} {continue} if {[info exists TabTmp($Cluster2,$Cluster1)]} {continue} set TabTmp($Cluster1,$Cluster2) 1 set Distance [expr round([O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance])] lappend LesDistances $Distance } } return [MoyenneEcartMinMaxCumulLong $LesDistances] } proc LesCandidatsPourClustalW {FichierOuNom {Source ""}} { global RepertoireDuGenome global SeuilExpectPourJulie if {$Source==""} { set Source "blastp" } set Nom [file tail $FichierOuNom] scan [TailleSortiePourDBClustal] "%d %d %d %f" MinObliges MaxVoulus MaxPDB SeuilExpect if {[info exists SeuilExpectPourJulie]} { set SeuilExpect $SeuilExpectPourJulie } Wup "On ne veut plus voir le meme PAB .......... peut servir autrement ... " set LesIndesirables {} if {0 && [regsub "^ABY$" $Nom "PAB" Indesirable]} { lappend LesIndesirables $Indesirables } if { $Source=="apnosoc"} { set FichierApnOsOc "$RepertoireDuGenome/apnosoc/$Nom" if {[file exists $FichierApnOsOc]} { set LesCandidats [LesLignesDuFichier "$RepertoireDuGenome/apnosoc/$Nom"] } else { return {} } } elseif { $Source=="blastp" || $Source=="ballast"} { set LesCandidats {} if {[file exists $FichierOuNom]} { set FichierBallast $FichierOuNom } else { set FichierBallast "$RepertoireDuGenome/$Source/$Nom" } if { ! [file exists $FichierBallast]} { return {} } DecortiqueBlast $FichierBallast $SeuilExpect "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN PrepareLesSequencesDesBanques $lBanqueId $lAccess foreach BanqueId $lBanqueId Access $lAccess Profil $lProfil PN $lPN { set LesLignesEMBL [LaSequenceDesBanques $BanqueId $Access AccessOK "OnVeutEMBL"] DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX if {[lsearch -exact $LesIndesirables $Access] > 0 } { continue } Wup "Si ballast, on ne prend que ceux qui ont contribue au profil" if {0 && $Source=="ballast" && ! $Profil} { continue } lappend LesCandidats "$BanqueId $Access $PN $OS $OC" regsub -all {\:} $DE "_" DE set Descriptif "$AccessOK OS:$OS GN:$GN DE:$DE ID:$ID AC:$AC OC:$OC OX: $OX" StockeLeDescriptif $AccessOK $Descriptif $Nom } } return $LesCandidats } proc LesCaracteresAscii {} { foreach n [NombresEntre 32 256] { lappend LesCars "[IntegerToAscii $n] $n" } return $LesCars } proc LesCaracteristquesDesControlesActiChip {} { set DirControle "[RepertoireDuGenome]/Probes/Controles_ActiChip" set LesControlesActiChip [ListeControlesActiChip] foreach Seq $LesControlesActiChip { set EnteteDeLOligo "" set File "$DirControle/$Seq" set Sequence [QueLaSequenceDuFichierTFA $File] lappend EnteteDeLOligo $Seq lappend EnteteDeLOligo [string length $Sequence] lappend EnteteDeLOligo "[format "%.1f" [CalculTmDeLaSeq $Sequence "" "" NearestNeighbor]]" Espionne "[join $EnteteDeLOligo " "]" } return "" } proc LesCartesExonicDesARPs {} { Wup "Permet de recuperer les cartes exoniques des ARPs" Wup "ainsi que de les transformer en sequence exonique ou l exon 1 est code par la lettre A" ChargeLesCartesExonicDesARPsHumaines "" "" ChargeLesCartesExonicDesAutresARPs "" "" return "" } proc LesCategoriesInteressantes {{ReInitialise 0}} { global RepertoireDuGenome set FichierCat "$RepertoireDuGenome/fiches/categories_interessantes" if {$ReInitialise || ![file exists $FichierCat]} { set LesCategories [MorceauxChoisis [lsort [O2C2O LesCategories]]] if {$LesCategories == {}} {return} Sauve [join $LesCategories "\n"] dans $FichierCat } return [LesLignesDuFichier $FichierCat] } proc LesCercles {args} { global LAA global lcol global MaxX MaxY MinX MinY Max set lfile $args set AA "ACDEFGHIKLMNPQRSTVWY" set LAA [lsort [split $AA ""]] set ncol [expr [llength $lfile] - 1] set lcol [list yellow DeepSkyBlue3 magenta green lightgray] set MaxX -999. set MaxY -999. set MinX 999. set MinY 999. set Max 0. foreach f $lfile { global lx$f global ly$f LitVecLC $f lx$f ly$f } MetALEchelle $lfile InitWLC $lfile set Ref [lindex $lfile 0] set lfile [lrange $lfile 1 end] TraceVecLC $Ref [lindex $lcol 0] set nf 1 foreach f $lfile col [lrange $lcol 1 $ncol] { set i 1 if {[info exists XX]} {unset XX} if {[info exists W]} {unset W} foreach x1 [set lx$Ref] y1 [set ly$Ref] x2 [set lx$f] y2 [set ly$f] { set W($i) 1. set XX(1,$i,1) $x1 set XX(2,$i,1) $y1 set XX(3,$i,1) 0. set XX(1,$i,2) $x2 set XX(2,$i,2) $y2 set XX(3,$i,2) 0. incr i } set Ni [expr $i - 1] set resup [COMPARORTHO XX W Rot Trans] set rms [lindex $resup 0] set mxd [lindex $resup 1] lappend Log "$Ref --- $f :: rms = $rms ; max dev = $mxd" set MRot [M_T Rot] set VTrans [V_T Trans] set nx$f {} set ny$f {} foreach x [set lx$f] y [set ly$f] { set v [list $x $y 0.] set Ln [AppliqueRotation $v $MRot $VTrans] lappend nx$f [lindex $Ln 0] lappend ny$f [lindex $Ln 1] } puts "CoefCor entre x ref et x $f [CoefficientCorrelation [set lx$Ref] [set nx$f]]" puts "CoefCor entre y ref et y $f [CoefficientCorrelation [set ly$Ref] [set ny$f]]" set lx$f [set nx$f] set ly$f [set ny$f] update TraceVecLC $f [lindex $lcol $nf] incr nf } puts "\n\n" EspionneL $Log return } proc LesChampsIndividuels {Texte {Separateur ,}} { if { ! [regexp $Separateur $Texte] } { regsub {[\.\;]$} $Texte "" Texte ; return [list $Texte] } set P 0 set Bon "" set LesBons {} foreach C [split $Texte ""] { if {$C=="("} { incr P 1 } if {$C==")"} { incr P -1 } if {$C==$Separateur && $P==0 } { lappend LesBons $Bon ; continue } append Bon $C } regsub {^ +and *} $Bon "" Bon regsub {[\.\;]$} $Bon "" Bon regsub " sp$" $Bon " sp." Bon lappend LesBons $Bon return $LesBons } proc LesChampsInteressantsDeNarcisse {} { return {ID AC DE GN} } proc LesChampsInteressantsDuAccess {BanqueId Access args} { set SeparateurDuChamp(AC) " " set SeparateurDuChamp(ID) " " set SeparateurDuChamp(OS) " " set SeparateurDuChamp(OC) " " set SeparateurDuChamp(OX) " " set LesChamps $args if {[regexp {^[A-Z][A-Z]$} $Access]} { set LesChamps [concat [list $Access] $args] set Access $BanqueId } foreach Champ $LesChamps { set ChampInteressant($Champ) 1 } set LesLignesEMBL [LaSequenceDesBanques $BanqueId $Access AccessOK "OnVeutEMBL"] if {$LesLignesEMBL==""} { return {} } foreach Ligne $LesLignesEMBL { scan $Ligne "%s" ChampLu if {[string equal $ChampLu "SQ"]} { break } if { ! [info exists ChampInteressant($ChampLu)]} { continue } regsub "$ChampLu " $Ligne "" Ligne lappend LesValeurs($ChampLu) [string trim $Ligne] } set LeResultat {} foreach Champ $LesChamps { set Valeur "" set Sep "\n" if {[info exist SeparateurDuChamp($Champ)]} { set Sep $SeparateurDuChamp($Champ) } if {[info exists LesValeurs($Champ)]} { set Valeur [join $LesValeurs($Champ) $Sep] } lappend LeResultat $Valeur } return $LeResultat } proc LesChrDansBed {} { set File "/genomics/link/SpliRetMouse/201404/PubliFarkas/GSE40524_junctions_high-quality.bed" # set File "/genomics/link/SpliRetMouse/201404/cdsSOURIS-06092011.bed" # set File "/genomics/link/SpliRetMouse/201404/cdsRAT-06092011.bed" foreach Ligne [LesLignesDuFichier $File] { if {[regexp "track" $Ligne]} {continue} set LesMots [split $Ligne "\t"] set Chr [string trim [lindex $LesMots 0]] lappend LesChr $Chr } set LesChr [ListeSansDoublon $LesChr] EspionneL $LesChr } proc LesClassesDuDescriptif {Nom {Expect ""}} { set FD [GscopeFile $Nom "descriptifs"] if {[FileAbsent $FD]} { return {} } set LesClasses {} foreach Ligne [LesLignesDuFichier $FD] { set Classe [StringSuivant "OC:" dans $Ligne] regsub {OX: .*} $Classe "" Classe if {$Classe==""} { continue } lappend LesClasses $Classe } return $LesClasses } proc LesClassesDuGlossaire {} { global RepertoireDuGenome foreach Complet [Glossaire "Coucou" "EntierComplet"] { set Classe [OCduOS $Complet] if {$Classe=="" || $Classe=="ClassUnknown"} { scan $Complet "%s" Genre if {[regexp -nocase "^Virus " $Complet]} { set Classe "Virus." } elseif {[info exists Classes($Genre)]} { set Classe [set Classes($Genre)] } else { Espionne "$Complet:$Classe" lappend LesUnknowns $Complet continue } } scan $Complet "%s" Genre set Classes($Genre) $Classe lappend CompletClasse "$Complet:$Classe" } Espionne [SauveLesLignes $LesUnknowns dans "$RepertoireDuGenome/fiches/completssansclasse"] Espionne [SauveLesLignes $CompletClasse dans "$RepertoireDuGenome/fiches/organisme_classe"] } proc LesClefsDeDidier {} { set LesClefs [list VE Cloned Expression_tested Soluble Insoluble Purified Crystallization Crystal Structure Stopped Coexpr_vector1 Coexpr_vector2 Coexpr_vector3 Scientist Vectorname Baculo Eukaryote DomainLimit Mutant ProtName CodeRipp Organism Comments] } proc LesClustersDeCluspack {TexteOuFichier {GetIt ""}} { if {$GetIt==""} { set GetIt "GetGroupsAndMembers" } if {[regexp "\n" TexteOuFichier]} { set Texte $TexteOuFichier } else { set Texte [ContenuDuFichier $TexteOuFichier] } Espionne $Texte set ToutLeMondeAvecGroupe {} set LesGroupesEtLeursMembres {} set LesGroupes {} set LesMembres {} set OnLeTient 0 append Texte "\nThatsAllFolks" foreach Ligne [split $Texte "\n"] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster [0-9]|^unclustered seq} $Ligne] | $Ligne=="ThatsAllFolks"} { set Numero "" scan $Ligne "%s %s" Groupe Numero if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 } if {[info exists NumeroCourant]} { lappend LesGroupesEtLeursMembres [list $NumeroCourant $LesMembres] if {$Ligne=="ThatsAllFolks"} { break } set LesMembres {} } set NumeroCourant $Numero continue } scan $Ligne "%s" Access lappend ToutLeMondeAvecGroupe "$Access $Numero" lappend LesMembres $Access } if {$GetIt=="GetGroupsAndMembers"} { return $LesGroupesEtLeursMembres } if {$GetIt=="GetAllWithGroup"} { return $ToutLeMondeAvecGroupe } return [list $ToutLeMondeAvecGroupe $LesGroupesEtLeursMembres] } proc LesClustersDeLaListe {Fichier} { foreach PAB [LesLignesDuFichier $Fichier] { set PAB [File tail $PAB] set NCluster [InfoDuCluster $PAB Numero] lappend PABDuCluster($NCluster) $PAB lappend LesNClusters $NCluster #Espionne "$PAB Cluster [InfoDuCluster $PAB Numero]" } foreach Cluster [lsort -unique $LesNClusters] { Espionne "$Cluster [set PABDuCluster($Cluster)]" } } proc LesClustersDesOperons {} { set FileOperons "[RepertoireDuGenome]/fiches/operons" if {![file exists $FileOperons]} {return ""} set i 0 set LesClusters {} foreach LOperon [LesLignesDuFichier $FileOperons] { incr i set Orf [lindex $LOperon 0] lappend LesClusters [Operon $Orf Clusters] } return $LesClusters } proc LesClustersDuMac {{quoi index} {m 0}} { if {! $m} {set m [MacCourant]} if {$quoi eq "name"} { set r [$::db eval {select c.name from cluster as c, clustering as g where c.pk_clustering=g.pk_clustering and g.pk_mac=$m order by c.pk_cluster}] } else { set r [$::db eval {select c.pk_cluster from cluster as c, clustering as g where c.pk_clustering=g.pk_clustering and g.pk_mac=$m order by c.pk_cluster}] } return $r } proc LesClustersProchesDuCluster {Cluster {DistanceMax 230} {NbOperonsCommunsMin 1} {ZscoreMinDuCluster 5} {DiffZscoreMinClusterEtClusterFusionne 0} {NiveauGOMin_process ""} {NiveauGOMin_function ""} {NiveauGOMin_component ""} {LesClustersProches ""}} { ### procedure recursive ### global TabZScoreDesGeneOntologyDesClustersXHDA set FichierBestGOProttfa "[RepertoireDuGenome]/fiches/GeneOntology" ### seuils p80f50 ### set FichierBestGOClusterXHDA "[RepertoireDuGenome]/fiches/GeneOntology_ClustersXHDA" ### seuils p70f70 ### foreach Clust $LesClustersProches {set TabDejaClusterProche($Clust) 1} if {[info exists TabDejaClusterProche($Cluster)]} {return $LesClustersProches} lappend LesClustersProches $Cluster set LesClusters [O2C2O LesClusters] if {![info exists TabZScoreDesGeneOntologyDesClustersXHDA]} { foreach Clust $LesClusters { ### Selection des GO en fonction de leur niveau dans l'arbre ### ### Premier niveau interessant est 3 en process et 2 en function ### foreach GO [InterrogeGeneOntology $FichierBestGOClusterXHDA Groupe $Clust LesGO] { set Type [Onto $GO Type] ### on n'etudie que les types pour lesquels on a determine un seuil minimal ### if {$Type == "" || ![info exists NiveauGOMin_$Type]} {continue} set NiveauGOMin [set NiveauGOMin_$Type ] set NiveauDuGO [NiveauMinDuGO $GO $Type] if {$NiveauDuGO == "" || $NiveauGOMin == "" || $NiveauDuGO < $NiveauGOMin} {continue} set TabTmp(Cluster,$Clust,$GO) 1 foreach Ancetre [InterrogeGeneOntology $FichierBestGOClusterXHDA GO $GO LesAncetres] { set NiveauDuGO [NiveauMinDuGO $Ancetre $Type] if {$NiveauDuGO == "" || $NiveauGOMin == "" || $NiveauDuGO < $NiveauGOMin} {continue} set TabTmp(Cluster,$Clust,$Ancetre) 1 } } ### Liste de tous les GO interessants d'un cluster, chaque GO est mis autant de fois ### qu'il est present dans le cluster ### set TabZScoreDesGeneOntologyDesClustersXHDA($Clust,LesGO) {} foreach Nom [O2C2O Cluster $Clust LesOrfs] { foreach GO [InterrogeGeneOntology $FichierBestGOProttfa $Nom LesGO] { if {[info exists TabTmp($Nom,$GO)]} {continue} set TabTmp($Nom,$GO) 1 if {[info exists TabTmp(Cluster,$Clust,$GO)]} { lappend TabZScoreDesGeneOntologyDesClustersXHDA($Clust,LesGO) $GO } foreach Ancetre [InterrogeGeneOntology $FichierBestGOProttfa GO $GO LesAncetres] { if {[info exists TabTmp($Nom,$Ancetre)]} {continue} set TabTmp($Nom,$Ancetre) 1 if {[info exists TabTmp(Cluster,$Clust,$Ancetre)]} { lappend TabZScoreDesGeneOntologyDesClustersXHDA($Clust,LesGO) $Ancetre } } } } ### Determine les differents effectifs de GO necessaires pour le calcul du Zscore ### foreach GO [set TabZScoreDesGeneOntologyDesClustersXHDA($Clust,LesGO)] { set Type [Onto $GO Type] if {![info exists TabZScoreDesGeneOntologyDesClustersXHDA($Type,NbGO) ]} { set TabZScoreDesGeneOntologyDesClustersXHDA($Type,NbGO) 0 } ### N ### incr TabZScoreDesGeneOntologyDesClustersXHDA($Type,NbGO) if {![info exists TabZScoreDesGeneOntologyDesClustersXHDA($Type,$Clust,NbGO)]} { set TabZScoreDesGeneOntologyDesClustersXHDA($Type,$Clust,NbGO) 0 } ### R ### incr TabZScoreDesGeneOntologyDesClustersXHDA($Type,$Clust,NbGO) if {![info exists TabZScoreDesGeneOntologyDesClustersXHDA($GO,n) ]} { set TabZScoreDesGeneOntologyDesClustersXHDA($GO,n) 0 } ### n ### incr TabZScoreDesGeneOntologyDesClustersXHDA($GO,n) if {![info exists TabZScoreDesGeneOntologyDesClustersXHDA($Clust,$GO,n) ]} { set TabZScoreDesGeneOntologyDesClustersXHDA($Clust,$GO,n) 0 } ### r ### incr TabZScoreDesGeneOntologyDesClustersXHDA($Clust,$GO,n) } } if {[info exists TabTmp]} {unset TabTmp} } ### GO du cluster d'interet conserve si zscore >= seuil ### foreach GO [lsort -unique [set TabZScoreDesGeneOntologyDesClustersXHDA($Cluster,LesGO)]] { set Type [Onto $GO Type] set r1 [set TabZScoreDesGeneOntologyDesClustersXHDA($Cluster,$GO,n) ] set R1 [set TabZScoreDesGeneOntologyDesClustersXHDA($Type,$Cluster,NbGO) ] set n [set TabZScoreDesGeneOntologyDesClustersXHDA($GO,n) ] set N [set TabZScoreDesGeneOntologyDesClustersXHDA($Type,NbGO) ] set ZScore1 [ZScore $r1 $R1 $n $N ] if {$ZScore1 < $ZscoreMinDuCluster} {continue} set Def [lindex [Onto $Type $GO LesDefinitions] 0] ### Recherche de cluster proche selon la distance, leur presence ensemble en operon### ### et la difference de zscore### ### entre chacun des clusters seuls et le cluster issu de la fusion ### foreach Cluster2 $LesClusters { if {$Cluster == $Cluster2 } {continue} if { [info exists TabDejaClusterProche($Cluster2)] } {continue} if {![info exists TabZScoreDesGeneOntologyDesClustersXHDA($Cluster2,$GO,n)] } {continue} if {![info exists TabZScoreDesGeneOntologyDesClustersXHDA($Type,$Cluster2,NbGO)]} {continue} if {$DistanceMax < [O2C2O Cluster1 $Cluster Cluster2 $Cluster2 Distance] } {continue} if {$NbOperonsCommunsMin > [O2C2O Cluster1 $Cluster Cluster2 $Cluster2 NbOperonsCommuns]} {continue} set r2 [set TabZScoreDesGeneOntologyDesClustersXHDA($Cluster2,$GO,n) ] set R2 [set TabZScoreDesGeneOntologyDesClustersXHDA($Type,$Cluster2,NbGO)] set ZScore2 [ZScore $r2 $R2 $n $N ] if {$ZScore2 < $ZscoreMinDuCluster } {continue} set r [expr $r1 + $r2 ] set R [expr $R1 + $R2 ] set ZScore12 [ZScore $r $R $n $N ] set DiffZScore1 [expr $ZScore12 - $ZScore1] set DiffZScore2 [expr $ZScore12 - $ZScore2] if { $DiffZScore1 < $DiffZscoreMinClusterEtClusterFusionne || $DiffZScore2 < $DiffZscoreMinClusterEtClusterFusionne } { continue } Espionne "Cluster $Cluster -> $Cluster2 [O2C2O Cluster1 $Cluster Cluster2 $Cluster2 Distance] [O2C2O Cluster1 $Cluster Cluster2 $Cluster2 NbOperonsCommuns] $ZScore1 $ZScore2 $DiffZScore1 $DiffZScore2 $GO $Def" set LesClustersProches [LesClustersProchesDuCluster $Cluster2 $DistanceMax $NbOperonsCommunsMin $ZscoreMinDuCluster $DiffZscoreMinClusterEtClusterFusionne $NiveauGOMin_process $NiveauGOMin_function $NiveauGOMin_component $LesClustersProches] } } return $LesClustersProches } proc LesClustersSpecifiquesDesCategories {{LesCategoriesSpecifiques ""} {LesCategories ""} {Var 0.05}} { if {$LesCategoriesSpecifiques == {}} { set LesCategoriesSpecifiques [MorceauxChoisis [lsort [O2C2O LesCategories]]] } if {$LesCategories == {}} {set LesCategories [MorceauxChoisis [lsort [O2C2O LesCategories]]]} if {$LesCategories == "CategoriesInteressantes"} {set LesCategories [LesCategoriesInteressantes]} set LesClustersSelected {} set LesClusters [O2C2O LesClusters] Espionne [llength $LesClusters] foreach Cluster $LesClusters { Espionne "\n\nCluster $Cluster\n" if {[EstCeQueLeClusterEstSpecifiqueDesCategories $Cluster $LesCategoriesSpecifiques $LesCategories $Var]} { lappend LesClustersSelected $Cluster } } set Total [llength $LesClustersSelected] lappend LesClustersSelected $Total Sauve [join $LesClustersSelected "\n"] dans "[RepertoireDuGenome]/fiches/lesclustersselected" return } proc LesCodeCloneDesAffymetrixEnOverlap {Nom} { set LesAffys [LesAffymetrixEnOverlap $Nom] set LesCC {} foreach Affy $LesAffys { set CC [CodeCloneDuAffymetrix $Affy] if {$CC==""} { continue } lappend LesCC $CC } return $LesCC } proc LesCodesAffy {Fichier} { set Liste [CreeListePourFichierAUneColonne $Fichier] CodeClonePourTous $Liste } proc LesCodesGenetiques {P} { global LesCodesGenetiques Wup "We replace O (the coding of STOP in MutaSequence) by * (O is not used as aa code)" if {$P=="O"} { set P "*" } set P [string toupper $P] if {$P=="STOP"} { set P "*" } if {[string length $P]==3} { set P [UT $P] } if {[info exists LesCodesGenetiques($P)]} { return [set LesCodesGenetiques($P)] } if {[info exists LesCodesGenetiques("EstCharge")]} { return "NNN" } set LesCodesGenetiques("EstCharge") 1 foreach A {A T G C} { foreach B {A T G C} { foreach C {A T G C} { set Codon "$A$B$C" set AA [AAduCodon $Codon] lappend LesCodesGenetiques($AA) $Codon lappend LesCodesGenetiques(LALISTEMERCI) "$Codon $AA" } } } return [LesCodesGenetiques $P] } proc LesCodonStartStop {Nom} { set FichierTfa "[RepertoireDuGenome]/mrnatfa_cds_Mus_musculus/$Nom" if {![file exists $FichierTfa]} {return} set LongueurSeq [string length [QueLaSequenceDuTFA $FichierTfa]] set Start [ExtraitPartieDuTfa $FichierTfa 1 5] #Espionne $Start set Stop [ExtraitPartieDuTfa $FichierTfa [expr $LongueurSeq -4] $LongueurSeq] #Espionne $Stop set LesStartStop [list $Nom $Start $Stop] return $LesStartStop } proc LesCodonStartStopPourTous {} { foreach Nom [ListeDesPABs] { lappend LesStartStopPourTous [LesCodonStartStop $Nom] } return $LesStartStopPourTous } proc LesContigsDuBlast {FichierBlast {ExpectMax 0.001} {NbSubject 500}} { set LesContigs {} set NbSubjectDansBlast [AskBlast $FichierBlast NbSubject] set LesBId {} for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} {lappend LesBId [AskBlast $FichierBlast Subject $i]} AskLesPagesInfos load $LesBId htg foreach BId $LesBId { set Access [string toupper [AskBlast $FichierBlast BanqueId $BId Access]] if {[info exists Tab($Access,LesOrganismes)]} {continue} set PageInfo [AskLesPagesInfos ask $BId] if {$PageInfo == ""} {continue} set TailleDansDB [TailleDeLAcNuc_PageInfo $PageInfo] set Taille [AskBlast $FichierBlast BanqueId $BId Taille ] if {$TailleDansDB != $Taille} {continue} if {![regexp -nocase "HTG" [InfoDuChampsDeLaPageGenBank $PageInfo KEYWORDS]]} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Tab($Access,LesOrganismes) $LesOrgas set Def [join [LaDefinitionDeLAcNuc_PageInfo $PageInfo] " "] if {$Def == ""} {set Def "Not found"} set Expect [AskBlast $FichierBlast BanqueId $BId Segment 1 Expect ] set Score [AskBlast $FichierBlast BanqueId $BId Segment 1 Score ] scan $Score "%f" Score set Orientation [AskBlast $FichierBlast BanqueId $BId Segment 1 Orientation] set PIdGlob [PourcentageDIdentiteGlobal $FichierBlast $BId] set NbBasesEnCommun [NombreDeBasesEnCommun $FichierBlast $BId] set LeProfil [LeProfilDeLAlignementDuSubject $FichierBlast $BId] set Tab($BId,LesOrganismes) $LesOrgas foreach Orga $LesOrgas { lappend LesContigs [list $BId $Access $Taille 0 $Orientation $Expect $Score $PIdGlob $NbBasesEnCommun 0 0 0 $Orga $Def {} "CONTIG"] } } AskLesPagesInfos unset set LesContigs [lsort -real -decreasing -index 2 $LesContigs] set LesContigs [lsort -real -decreasing -index 7 $LesContigs] set LesContigs [lsort -integer -decreasing -index 8 $LesContigs] return $LesContigs } proc LesContigsDuBlast_TabBlast {aTabBlast} { upvar $aTabBlast TabBlast set LesContigs {} set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i)] set Access [string toupper [set TabBlast($BId,Access)]] if {[info exists Tab($Access,LesOrganismes)]} {continue} set PageInfo [PageInfo $BId genbank "id acc key des org"] if {$PageInfo == ""} {continue} if {![regexp -nocase "HTG" [InfoDuChampsDeLaPageGenBank $PageInfo KEYWORDS]]} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Tab($Access,LesOrganismes) $LesOrgas set Def [join [LaDefinitionDeLAcNuc_PageInfo $PageInfo] " "] if {$Def == ""} {set Def "Not found"} set Expect [set TabBlast($BId,1,Expect) ] set Score [set TabBlast($BId,1,Score) ] set Taille [set TabBlast($BId,Taille) ] scan $Score "%f" Score set Orientation [set TabBlast($BId,1,Orientation)] set PIdGlob [PourcentageDIdentiteGlobal_TabBlast TabBlast $BId] set NbBasesEnCommun [NombreDeBasesEnCommun_TabBlast TabBlast $BId] set LeProfil [LeProfilDeLAlignementDuSubject_TabBlast TabBlast $BId] Espionne $BId set Tab($BId,LesOrganismes) $LesOrgas foreach Orga $LesOrgas { lappend LesContigs [list $BId $Access $Taille 0 $Orientation $Expect $Score $PIdGlob $NbBasesEnCommun 0 0 0 $Orga $Def {} "CONTIG"] } } set LesContigs [lsort -real -decreasing -index 2 $LesContigs] set LesContigs [lsort -real -decreasing -index 7 $LesContigs] set LesContigs [lsort -integer -decreasing -index 8 $LesContigs] return $LesContigs } proc LesControlesActiChipPourExcel {} { Wup "Permet de creer le fichier excel des Controles" set ListeControles [ListeControlesActiChip] set Wdir1 "[RepertoireDuGenome]/Probes/Controles_ActiChip/RefSeq_Controles" set Wdir2 "[RepertoireDuGenome]/Probes/Controles_ActiChip/Unigene_Controles" LesOligosPourExcel "$ListeControles" "$Wdir1" "$Wdir2" "" "" return "" } proc LesCoordonneesDeLaPart {Rayon AngleMin AngleMax {XCentre 0} {YCentre 0} {InverseAxeY Yes}} { set pi 3.141592 if {$InverseAxeY == "Yes"} {set Facteur -1} else {set Facteur 1} set EcartAngleMin [expr 2*$pi/360] set AngleDOuverture [expr abs($AngleMax - $AngleMin)] if {$AngleDOuverture < $EcartAngleMin} { set XMin [expr $Rayon * cos($AngleMin) + $XCentre] set YMin [expr $Rayon * sin($AngleMin) * $Facteur + $YCentre] set XMax [expr $Rayon * cos($AngleMax) + $XCentre] set YMax [expr $Rayon * sin($AngleMax) * $Facteur + $YCentre] return [list "$XCentre" "$YCentre" "$XMin" "$YMin" "$XMax" "$YMax"] } set LesCoords [list "$XCentre" "$YCentre"] set nEcart [expr int($AngleDOuverture/$EcartAngleMin)] for {set i 0} {$i <= $nEcart} {incr i} { set Angle [expr $AngleMin + $i * $EcartAngleMin] set X [expr $Rayon * cos($Angle) + $XCentre] set Y [expr $Rayon * sin($Angle) * $Facteur + $YCentre] lappend LesCoords $X lappend LesCoords $Y } set DernierAngle [expr $AngleDOuverture - $nEcart*$EcartAngleMin] if {$DernierAngle != 0} { set X [expr $Rayon * cos($AngleMax) + $XCentre] set Y [expr $Rayon * sin($AngleMax) * $Facteur + $YCentre] lappend LesCoords $X lappend LesCoords $Y } return $LesCoords } proc LesCoordonneesDuCDSDumRNA {Access} { return [LesCoordonneesDuCDSDumRNA_PageInfo [PageInfo $Access genbankfull]] } proc LesCoordonneesDuCDSDumRNA_PageInfo {PageInfo} { if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} {return} regexp { CDS [^0-9]+([0-9]+)\.[ ]*\.([0-9]+)} $PageInfo tmp DbtCDS FinCDS if {![info exists DbtCDS] || ![info exists FinCDS]} {return} return [list $DbtCDS $FinCDS] } proc LesCoordonneesExonicMap {Query} { Wup "Permet de donner les coordonnees des sequences alignees sur le genome" set ListeDFExon "" set LesRangs [lindex [InterrogeFichierExonicMap $Query LesRangs] 0] foreach Rang $LesRangs { set NbExon [InterrogeFichierExonicMap $Query Rang $Rang NbExonicAreas] for {set i 1} {$i <= $NbExon} {incr i} { set Debut [InterrogeFichierExonicMap $Query Rang $Rang ExonArea $i DQ] set Fin [InterrogeFichierExonicMap $Query Rang $Rang ExonArea $i FQ] lappend ListeDFExon [list $Debut $Fin] } } return "$ListeDFExon" } proc LesCopains {FichierBlastP FichierSortie} { Espionne [SauveLesLignes [LesCandidatsPourClustalW $FichierBlastP "blastp"] dans $FichierSortie] } proc LesCopainsDeCluster {Exp {Anal ""} {Clus ""} {Num ""}} { global LesCopainsDeCluster set RepertoireTranscriptomique "[RepertoireDuGenome]/transcriptomique/cluster" if {[info exists LesCopainsDeCluster($Exp,$Anal,$Clus,$Num)]} { return $LesCopainsDeCluster($Exp,$Anal,$Clus,$Num) } if {[info exists LesCopainsDeCluster("EstCharge")]} { return {} } set LesCopainsDeCluster("EstCharge") 1 foreach File [glob -nocomplain "$RepertoireTranscriptomique/*"] { set Queue [file tail $File] foreach Ligne [LesLignesDuFichier $File] { set LesMots [split $Ligne "\t"] ScanLaListe $LesMots Bidon ExpPs AnalPs ClusPs NumPs if {$NumPs=="NA"} {continue} lappend LesCopainsDeCluster($ExpPs,$AnalPs,$ClusPs,$NumPs) $Queue } } foreach {C V} [array get LesCopainsDeCluster] { if {[regexp "EstCharge" $C]} {continue} lappend LesCopainsDeCluster(ListOfCombi,,,) $C set VSD [ListeSansDoublon $V] set LesCopainsDeCluster($C) $VSD set LesCopainsDeCluster(SizeOf$C) [llength $VSD] } return [LesCopainsDeCluster $Exp $Anal $Clus $Num] } proc LesCopainsDePathway {Pathway} { global LesCopainsDePathway set FichierPathway "[RepertoireDuGenome]/Ingenuity/LesPathwaysDesBoites" if {[info exists LesCopainsDePathway($Pathway)]} { return $LesCopainsDePathway($Pathway) } if {[info exists LesCopainsDePathway("EstCharge")]} { return {} } set LesCopainsDePathway("EstCharge") 1 foreach Ligne [LesLignesDuFichier $FichierPathway] { set LesMots {}; set Boite ""; set PathwaysLus ""; set LesPathwaysLu {} set LesMots [split $Ligne "\t"] ScanLaListe $LesMots Boite PathwaysLus set LesPathwaysLu [split $PathwaysLus ","] foreach PathwayLu $LesPathwaysLu { lappend LesCopainsDePathway($PathwayLu) $Boite } } foreach {C V} [array get LesCopainsDePathway] { set LesCopainsDePathway($C) [ListeSansDoublon $V] } return [LesCopainsDePathway $Pathway] } proc LesCops {{Liste ""}} { set RepertoireEntree "[RepertoireDuGenome]/transcriptomique/cluster" set RepertoireSortie "[RepertoireDuGenome]/transcriptomique/LesCopainsCluster" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set LesVisuals {GO:0050908 GO:0007632 GO:0008542 GO:0007601 GO:0051356} if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { Espionne "$Nom" #if {[PasTouche $Nom]} {continue} set LesFichiers [split [TranscriptomicClusters $Nom FileNames] "\n"] foreach File $LesFichiers { Espionne "File $File" set nbdecombinaison 0 set LesCopsTotal {} set LesCombinaisons {} set LesLignes {} set Queue [file tail $File] Espionne "$Queue" regsub {\-.*} $Queue "" Nom if {[file exists "$RepertoireSortie/$Queue-lescops"]} {continue} foreach Ligne [LesLignesDuFichier $File] { set LesMots [split $Ligne "\t"] ScanLaListe $LesMots Bidon ExpPs AnalPs ClusPs NumPs if {$NumPs=="NA"} {continue} #attention plus de NA set S [LesCopainsDeCluster SizeOf$ExpPs $AnalPs $ClusPs $NumPs] if {$S>2500} {continue} incr nbdecombinaison set LesMots [LesMotsDeLaLigne $ClusPs] set un [lindex $LesMots 0] set deux [lindex $LesMots 3] set trois [lindex $LesMots 4] set ClusPs2 "$un$deux$trois" regsub -- "-" $ClusPs2 "" ClusPs2 set Combi "$ExpPs,$AnalPs,$ClusPs2,$NumPs" set LesCops($Combi) [LesCopainsDeCluster $ExpPs $AnalPs $ClusPs $NumPs] LConcat LesCopsTotal $LesCops($Combi) lappend LesCombinaisons $Combi } set LesCopsTotal [lsort $LesCopsTotal] foreach Combi $LesCombinaisons { set Ligne "$Combi: $LesCops($Combi)" lappend LesLignes $Ligne } set premierefois 1 foreach elmt $LesCopsTotal { #Espionne "elmt $elmt" if {$premierefois} { set Cumul($elmt) 1 set AncienElmt "" set premierefois 0 } if {$AncienElmt==$elmt} { incr Cumul($elmt) } if {$AncienElmt!=$elmt} { set Cumul($elmt) 1 } set AncienElmt $elmt } set LesResultsSansMoi {} foreach {cle val} [array get Cumul] { Espionne "cle $cle" Espionne "val $val" set LesIdGos {}; set LesDefs {} set LesElmtCle [split $cle "-"] set Nom [lindex $LesElmtCle 0] set Gn [ExtraitInfo $Nom "ValiGN"] set LesIdGos [InterrogeGeneOntology $FichierGO $Nom LesGO] foreach IdGo $LesIdGos { foreach Visual $LesVisuals { if {$IdGo==$Visual} { lappend LesDefs [join [InterrogeGeneOntology $FichierGO GO $IdGo LaDefinition] ""] } } } set DefinitionGo [join $LesDefs ","] if {$cle==$Queue} { set MoiMeme "$val $cle $Gn $DefinitionGo" } else { lappend LesResultsSansMoi "$val $cle $Gn $DefinitionGo" } } set LesResultsSansMoi [lsort -integer -index 0 -decreasing $LesResultsSansMoi] #set LesResultsSansMoi [lsort -real -index 0 -decreasing $LesResultsSansMoi] #lappend LesLignesResult "nbdecombinaison $nbdecombinaison" set LesLignesResult [list $MoiMeme] foreach x $LesResultsSansMoi { lappend LesLignesResult "$x" } #SauveLesLignes $LesLignes dans "$RepertoireSortie/$Queue-lescops" #SauveLesLignes $LesLignesResult dans "$RepertoireSortie/$Queue-lesbestcops" array unset LesCops; array unset Cumul } #FinPasTouche $Nom } } proc LesCopsPath {} { set FichierEntree "[RepertoireDuGenome]/Ingenuity/LesPathwaysDesBoites" set RepertoireSortie "[RepertoireDuGenome]/Ingenuity/LesCopainsPathway" foreach Ligne [LesLignesDuFichier $FichierEntree] { set LesMots {}; set Boite ""; set PathwaysLus ""; set LesPathwaysLu {} set LigneFinale ""; set LesLignes {}; set LesPath {} regexp {^(\S+)\s+(.+)$} $Ligne tmp Boite PathwaysLus #si pas de pathway exp reguliere ne match pas puts "$Boite" set LesPathwaysLu [split $PathwaysLus ","] foreach PathwayLu $LesPathwaysLu { set LesCopsPath($PathwayLu) [LesCopainsDePathway $PathwayLu] lappend LesPath $PathwayLu } foreach Path $LesPath { set LigneFinale "$Path: $LesCopsPath($Path)" lappend LesLignes $LigneFinale } SauveLesLignes $LesLignes dans "$RepertoireSortie/$Boite-lescops" array unset LesCopsPath } } proc LesCouleursSeqlabDesAAs {AA} { global LesCouleursSeqlabDesAAs if {[regexp "fg_and_bg_of_bg" $AA]} { set AA [string tolower $AA] } if {[string length $AA]==1} { set AA [string toupper $AA] } if {$AA==" "} { set AA "Space" } if {$AA=="."} { set AA "Dot" } if {$AA=="-"} { set AA "Hyphen" } if {$AA=="~"} { set AA "Tilde" } if {[info exists LesCouleursSeqlabDesAAs($AA)]} {return $LesCouleursSeqlabDesAAs($AA)} if {[info exists LesCouleursSeqlabDesAAs("EstCharge")]} { if {[regexp "fg_and_bg_of_bg" $AA]} { return "black unknown" } return $LesCouleursSeqlabDesAAs("EstCharge") } lappend AFB I white magenta lappend AFB L white magenta lappend AFB M white magenta lappend AFB V white magenta lappend AFB R white blue lappend AFB K white blue lappend AFB F white red lappend AFB Y white red lappend AFB W white red lappend AFB D white forestgreen lappend AFB E white forestgreen lappend AFB Q white green lappend AFB P white black lappend AFB G black orange lappend AFB H black cyan lappend AFB N black cyan lappend AFB S white darkviolet lappend AFB T white darkviolet lappend AFB A white darkviolet lappend AFB C white darkviolet lappend AFB "Space" white darkslategrey lappend AFB "Dot" white darkslategrey lappend AFB "Hyphen" white darkslategrey lappend AFB "Tilde" white darkslategrey lappend AFB "NoValue" white darkslategrey set LesCouleursSeqlabDesAAs(LaListeMerci) $AFB foreach {A F B} $AFB { lappend LesCouleursSeqlabDesAAs(ListeDesAAs) $A lappend LesCouleursSeqlabDesAAs(ListeDesFGs) $F lappend LesCouleursSeqlabDesAAs(ListeDesBGS) $B set LesCouleursSeqlabDesAAs($A) "$F $B" set LesCouleursSeqlabDesAAs(fg_and_bg_of_bg_$B) "$F $B" } set LesCouleursSeqlabDesAAs("EstCharge") $LesCouleursSeqlabDesAAs(NoValue) return [LesCouleursSeqlabDesAAs $AA] } proc LesCoupuresPossibles {} { set LesCoupuresPossibles [list "Thrombin 12 P" "TEV2 18 P" "TEVS 18 P" "Protease3C 18 P" "NdeI 3 N" "BamHI 3 N" "SpeI 3 N"] return $LesCoupuresPossibles } proc LesCrossLinkedDeLAccess_Recursif {Access {LesCrossLinked ""}} { set PageInfo [AskLesPagesInfos ask $Access] if {$PageInfo == ""} { set PageInfo [PageInfo $Access "\{protein genbankfull\}"] AskLesPagesInfos set $Access $PageInfo } if {$PageInfo == ""} {return $LesCrossLinked} if {[regexp "^LOCUS " $PageInfo]} { if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} {return $LesCrossLinked} set CEstUneProteine 0 set CEstUnmRNA 1 } else { set CEstUneProteine 1 set CEstUnmRNA 0 } foreach LIndividu $LesCrossLinked { set Individu [lindex $LIndividu 0] set DejaVu($Individu) 1 } if {[info exists DejaVu($Access)]} {return $LesCrossLinked} set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] if {$CEstUneProteine} { set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] set Taille [TailleDeLaProt_PageInfo $PageInfo] foreach Orga $LesOrgas {lappend LesCrossLinked [list $Access "Protein" $Taille $Orga $Def]} set LesNouveauxAcNuc {} foreach AcNuc [LesAcNucsDeLaProt_PageInfo $PageInfo] { if {[info exists DejaVu($AcNuc)]} {continue} lappend LesNouveauxAcNuc $AcNuc } AskLesPagesInfos load $LesNouveauxAcNuc genbankfull foreach AcNuc $LesNouveauxAcNuc { set PageInfo [AskLesPagesInfos ask $AcNuc] if {$PageInfo == ""} {continue} if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} {continue} set LesCrossLinked [LesCrossLinkedDeLAccess_Recursif $AcNuc $LesCrossLinked] } } if {$CEstUnmRNA} { set Def [join [LaDefinitionDeLAcNuc_PageInfo $PageInfo] " "] set Taille [TailleDeLAcNuc_PageInfo $PageInfo] foreach Orga $LesOrgas { lappend LesCrossLinked [list $Access "mRNA" $Taille $Orga $Def] } set LesNouveauxAcProt {} foreach AcProt [LesProteinesDeLAcNuc_PageInfo $PageInfo] { if {[info exists DejaVu($AcProt)]} {continue} lappend LesNouveauxAcProt $AcProt } AskLesPagesInfos load $LesNouveauxAcProt protein foreach AcProt $LesNouveauxAcProt { set PageInfo [AskLesPagesInfos ask $AcProt] if {$PageInfo == ""} {continue} set LesCrossLinked [LesCrossLinkedDeLAccess_Recursif $AcProt $LesCrossLinked] } } return $LesCrossLinked } proc LesCrossLinkedDesAccess {LesAccess} { if {$LesAccess == {}} {return} AskLesPagesInfos load $LesAccess "\{protein genbankfull\}" set LesCrossLinked {} foreach Access $LesAccess { set PageInfo [AskLesPagesInfos ask $Access] if {$PageInfo == ""} {continue} foreach LeCrossLinked [LesCrossLinkedDeLAccess_Recursif $Access $LesCrossLinked] { lappend LesCrossLinked $LeCrossLinked } } AskLesPagesInfos unset return $LesCrossLinked } proc LesCsDeManu {} { foreach Nom [ListeDesPABs] { set CS [CodonStart $Nom] if {$CS=="" || [regexp "^GroupSize" $CS]} { continue } InformeSansDemander $Nom "CSP: $CS" InformeSansDemander $Nom "=CodonStart: ARefaire" Espionne "$Nom $CS" } exit } proc LesDDConsideresPourLesResultatsFinaux {} { set FichierDes925 "[RepertoireDuGenome]/fiches/les925pabs" foreach JR [ListeDesJR $FichierDes925] { set Vu($JR) 1 } #1854 et jum = 2334 set Fichier1854EtJumeaux "[RepertoireDuGenome]/fiches/Redondance1SansCourts" foreach Ligne [LesLignesDuFichier $Fichier1854EtJumeaux] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] set Trouve 0 foreach DD $LesJumeaux { if {[info exists Vu($DD)]} {lappend LesOldJR $DD; set Trouve 1;break} } #aucun DD de cette ligne n'etait ds les 925 if {$Trouve==0} {lappend ListeSansJR $Ligne} } Espionne [llength $LesOldJR] Espionne [llength $ListeSansJR] #return $ListeSansJR } proc LesDDConsideresPourLesResultatsFinaux1 {} { set FichierDes925 "[RepertoireDuGenome]/fiches/925" foreach Ligne [LesLignesDuFichier $FichierDes925] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { set Vu($DD) 1 } } #1854 et jum = 2334 set Fichier1854EtJumeaux "[RepertoireDuGenome]/fiches/Redondance1SansCourts" foreach Ligne [LesLignesDuFichier $Fichier1854EtJumeaux] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] set Trouve 0 foreach DD $LesJumeaux { if {[info exists Vu($DD)]} {lappend LesOldJR $DD; set Trouve 1;break} } #aucun DD de cette ligne n'etait ds les 925 if {$Trouve==0} {lappend ListeSansJR $Ligne} } Espionne [llength $LesOldJR] Espionne [llength $ListeSansJR] #return $ListeSansJR } proc LesDDConsideresPourLesResultatsFinaux2 {} { set FichierDes925 "[RepertoireDuGenome]/fiches/925" foreach Ligne [LesLignesDuFichier $FichierDes925] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { set Vu($DD) 1 } } set Fichier1854EtJumeaux "[RepertoireDuGenome]/fiches/Redondance1SansCourts" foreach Ligne [LesLignesDuFichier $Fichier1854EtJumeaux] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { if {![info exists Vu($DD)]} {lappend LesNonVus $DD} } } Espionne [llength $LesNonVus] } proc LesDDConsideresPourLesResultatsFinaux3 {} { set FichierDes925 "[RepertoireDuGenome]/fiches/les925pabs" foreach Ligne [LesLignesDuFichier $FichierDes925] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { set Vu($DD) 1 } } Espionne $n set Fichier1854EtJumeaux "[RepertoireDuGenome]/fiches/Redondance1SansCourts" foreach Ligne [LesLignesDuFichier $Fichier1854EtJumeaux] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { if {![info exists Vu($DD)]} {lappend LesNonVus $DD} } } Espionne [llength $LesNonVus] } proc LesDDManquants {Fichier} { set n 0 set L [CreeListePourFichierAUneColonne $Fichier] foreach DD $L { incr n if {[regexp {^DD0+} $DD]} {regsub {^DD0+} $DD "" DD} else {regsub "DD" $DD "" DD} if {$DD!=$n} {FaireLire "$n $DD";set n $DD} } } proc LesDefDesClustersDPC {Fichier} { Wup "Ajoute la def a partir du fichier TribeMcl pour les clusters DPC du pipe" set NbGroupe "" set LesGroupes {} set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [regexp -nocase "^Number" $Ligne]} {continue} if { [regexp -nocase "^query" $Ligne]} {continue} if { [regexp -nocase "^Group" $Ligne]} { set NbGroupe [lindex $Ligne 1] lappend LesGroupes $NbGroupe continue } set Access [lindex $Ligne 0] set TabCluster($Access,groupe) $NbGroupe lappend TabCluster($NbGroupe,lesAccess) $Access } close $F set FichierSave "ClusterDpcPipeComplet" set FichierCluster "[RepertoireDuGenome]/actinlist2" set F [open "$FichierCluster"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set Def "" set MonAccess [lindex $Ligne 0] set Def [lrange $Ligne 1 end] set TabCluster($MonAccess,def) $Def } close $F foreach UnGroupe $LesGroupes { foreach LesAccDuGroupe [set TabCluster($UnGroupe,lesAccess)] { set DefDeAc [set TabCluster($LesAccDuGroupe,def)] set Entete [format "%3s %10s %-30s" $UnGroupe $LesAccDuGroupe $DefDeAc] AppendAuFichier $FichierSave $Entete } } return "" } proc LesDefauts {args} { global env OrdEtcDir Defauts VersionDeOrdali set VersionDeOrdali 3.5 if {[llength $args] == 2} { lassign $args Type Valeur set Defauts($Type) $Valeur if {$Type == "Mode" && [string equal -nocase $Valeur "batch"]} { global FaireLireNon set FaireLireNon 1 } return } set ::VueEditee 0 ValsDesDefauts if {[UtiliseCCode]} { set Defauts(UseSpeedCode) "C" } else { set Defauts(UseSpeedCode) "tcl" } if {$args ne "OldDef"} { package require platform set plat [::platform::generic] if {[regexp -nocase {^window} $plat]} { set fdef [file join $env(APPDATA) ordalierc.def] } else { if {[info exists env(HOME)]} { set fdef [file join $env(HOME) .ordalierc] } else { # env(HOME) does not exits... # Ordalie is launched from a httpd server set fdef "DontSaveIt" } } if {[file exists $fdef]} { array set Defauts [ContenuDuFichier $fdef] #source $fdef } elseif {$fdef ne "DontSaveIt"} { SauveOrdalieDefauts } } if {"Structure" ni [info commands]} { SetupPDBObject } ToggleAuLog $Defauts(LogAtStartup) return } proc LesDefautsDuPipe {args} { global DefautsPipe global VersionDuPipe set VersionDuPipe 1.0 if {[llength $args] != 0} { set Type [lindex $args 0] set Valeur [lindex $args 1] set DefautsPipe($Type) $Valeur if {$Type == "Blast,d"} {set DefautsPipe(Filter,bank) $Valeur} } else { set DefautsPipe(File,file) "" set DefautsPipe(File,pjt) 0 set DefautsPipe(File,log) "verbose" #AF set DefautsPipe(Project,project) "" set DefautsPipe(Url,birdHoan) "http://bird.u-strasbg.fr:8080/bird/" #set DefautsPipe(Url,birdHoan) "http://d1.crihan.fr:8080/bird/" ## set DefautsPipe(Blast,d) "protall" set DefautsPipe(Blast,e) "5000" #set DefautsPipe(Blast,v) "5000" set DefautsPipe(Blast,b) "5000" set DefautsPipe(Blast,K) "0" set DefautsPipe(Blast,f) "9" set DefautsPipe(Blast,F) "T" set DefautsPipe(Blast,g) "T" set DefautsPipe(Blast,m) "0" #set DefautsPipe(Blast,a) "4" set DefautsPipe(Blast,p) "blastp" set DefautsPipe(Filter,bank) [set DefautsPipe(Blast,d)] set DefautsPipe(Filter,method) "none" set DefautsPipe(Filter,length) "3000" set DefautsPipe(Filter,fragment) "1" set DefautsPipe(Filter,maxseq) "500" set DefautsPipe(Filter,expect) "0.001" set DefautsPipe(Filter,add) "0" set DefautsPipe(Filter,varsplic) "0" set DefautsPipe(Filter,addpdb) "" set DefautsPipe(DbClustal,propagate) "1" set DefautsPipe(DbClustal,output) "gcg" set DefautsPipe(DbClustal,motifs) "1" set DefautsPipe(DbClustal,clustalw) "/biolo/clustal/bin/clustalw" set DefautsPipe(Conservation,method) "Cluster" set DefautsPipe(Cluspack,bestmsf) "auto" set DefautsPipe(Macsims,bestmsf) "auto" set DefautsPipe(Etapes,blast) "1" set DefautsPipe(Etapes,ballast) "1" set DefautsPipe(Etapes,filter) "1" set DefautsPipe(Etapes,clustal) "1" set DefautsPipe(Etapes,normd1) "1" set DefautsPipe(Etapes,rascal) "1" set DefautsPipe(Etapes,normd2) "1" set DefautsPipe(Etapes,leon) "1" set DefautsPipe(Etapes,normd3) "1" set DefautsPipe(Etapes,cluspack) "1" set DefautsPipe(Etapes,macsims) "1" set DefautsPipe(Etapes,conservation) "0" set DefautsPipe(Etapes,modelisation) "0" } if {[set DefautsPipe(Blast,m)] != 0} { set DefautsPipe(Etapes,ballast) "0" set DefautsPipe(Etapes,filter) "0" set DefautsPipe(Etapes,clustal) "0" set DefautsPipe(Etapes,normd1) "0" set DefautsPipe(Etapes,rascal) "0" set DefautsPipe(Etapes,normd2) "0" set DefautsPipe(Etapes,leon) "0" set DefautsPipe(Etapes,normd3) "0" set DefautsPipe(Etapes,cluspack) "0" set DefautsPipe(Etapes,macsims) "0" set DefautsPipe(Etapes,conservation) "0" set DefautsPipe(Etapes,modelisation) "0" } if {[set DefautsPipe(Filter,method)] eq "meta" || [set DefautsPipe(Filter,method)] eq "euca" || [set DefautsPipe(Filter,method)] eq "vert"} { if {[set DefautsPipe(Blast,d)] ne "protein" || [set DefautsPipe(Blast,d)] ne "swsplice"} { set DefautsPipe(Blast,d) "protall" set DefautsPipe(Filter,bank) "protall" } } # si on souhaite calculer un modele, une empreinte doit etre cree au prealable # il faut dc que le projet soit de type ms2phdb if {[set DefautsPipe(Etapes,modelisation)] == 1} { set DefautsPipe(Project,project) "ms2phdb" } if {[QuelProjet] eq "ms2phdb"} { # la banque interrogee doit contenir des pdb # afin de beneficier des ancres pour les templates if {[set DefautsPipe(Blast,d)] ne "protall" && [regexp "uni90pdb" [set DefautsPipe(Blast,d)]] != 1} { set DefautsPipe(Blast,d) "protall" set DefautsPipe(Filter,bank) "protall" } set DefautsPipe(Etapes,conservation) "1" } set DefautsPipe(Blast,v) [set DefautsPipe(Blast,b)] return 1 } proc LesDefautsDuPipex {args} { global DefautsPipe global VersionDuPipe set VersionDuPipe 1.0 if {[llength $args] != 0} { set Type [lindex $args 0] set Valeur [lindex $args 1] set DefautsPipe($Type) $Valeur if {$Type == "Blast,d"} {set DefautsPipe(Filter,bank) $Valeur} } else { #set DefautsPipe(File,file) "/genomics/link/SpliRetMouse/prottfa/SPM0001" set DefautsPipe(File,file) "/genomics/link/SpliRetMouse/tmp/SPM0229" set DefautsPipe(File,pjt) 0 set DefautsPipe(File,log) "" #AF #set DefautsPipe(Project,project) "ms2phdb" #set DefautsPipe(Url,birdHoan) "http://bird.u-strasbg.fr:8080/bird/" ## #set DefautsPipe(Blast,d) "/genomics/link/SpliRetMouse/FichiersInitial/TousLesAddMouseSsO" #set DefautsPipe(Blast,d) "/genomics/link/SpliRetMouse/database/refseq-prot" set DefautsPipe(Blast,d) "/genomics/link/SpliRetMouse/database/VERT_UniProt_RefSeq_Ensembl_Varsplic" set DefautsPipe(Blast,e) "1" set DefautsPipe(Blast,v) "5000" set DefautsPipe(Blast,b) "5000" set DefautsPipe(Blast,K) "0" set DefautsPipe(Blast,f) "9" set DefautsPipe(Blast,F) "T" set DefautsPipe(Blast,g) "T" set DefautsPipe(Blast,m) "0" #set DefautsPipe(Blast,a) "4" set DefautsPipe(Blast,p) "blastp" set DefautsPipe(Filter,bank) [set DefautsPipe(Blast,d)] set DefautsPipe(Filter,method) "splice" set DefautsPipe(Filter,length) "3000" set DefautsPipe(Filter,fragment) "1" set DefautsPipe(Filter,maxseq) "33" set DefautsPipe(Filter,expect) "0.01" set DefautsPipe(Filter,add) "0" set DefautsPipe(Filter,varsplic) "0" set DefautsPipe(Filter,addpdb) "" set DefautsPipe(Project,project) "addSeq" set DefautsPipe(DbClustal,propagate) "1" set DefautsPipe(DbClustal,output) "gcg" set DefautsPipe(DbClustal,motifs) "1" set DefautsPipe(DbClustal,clustalw) "/biolo/clustal/bin/clustalw" set DefautsPipe(Cluspack,bestmsf) "auto" set DefautsPipe(Macsims,bestmsf) "auto" set DefautsPipe(Conservation,method) "none" set DefautsPipe(Etapes,conservation) "0" set DefautsPipe(Etapes,blast) "1" set DefautsPipe(Etapes,ballast) "1" set DefautsPipe(Etapes,filter) "1" set DefautsPipe(Etapes,clustal) "1" set DefautsPipe(Etapes,normd1) "1" set DefautsPipe(Etapes,rascal) "1" set DefautsPipe(Etapes,normd2) "1" set DefautsPipe(Etapes,leon) "1" set DefautsPipe(Etapes,normd3) "1" set DefautsPipe(Etapes,cluspack) "0" set DefautsPipe(Etapes,macsims) "1" set DefautsPipe(Etapes,modelisation) "0" } if {[set DefautsPipe(Filter,method)] eq "meta" || [set DefautsPipe(Filter,method)] eq "euca"} { if {[set DefautsPipe(Blast,d)] ne "protein"} { set DefautsPipe(Blast,d) "protall" set DefautsPipe(Filter,bank) "protall" } } return } proc LesDefautsDuPipey {args} { global DefautsPipe global VersionDuPipe set VersionDuPipe 1.0 if {[llength $args] != 0} { set Type [lindex $args 0] set Valeur [lindex $args 1] set DefautsPipe($Type) $Valeur if {$Type == "Blast,d"} {set DefautsPipe(Filter,bank) $Valeur} } else { #set DefautsPipe(File,file) "/genomics/link/SpliRetMouse/prottfa/SPM0001" set DefautsPipe(File,file) "/genomics/link/SpliRetMouse/tmp/SPM0229" set DefautsPipe(File,pjt) 0 set DefautsPipe(File,log) "" #AF #set DefautsPipe(Project,project) "ms2phdb" #set DefautsPipe(Url,birdHoan) "http://bird.u-strasbg.fr:8080/bird/" ## #set DefautsPipe(Blast,d) "/genomics/link/SpliRetMouse/FichiersInitial/TousLesAddMouseSsO" #set DefautsPipe(Blast,d) "/genomics/link/SpliRetMouse/database/refseq-prot" set DefautsPipe(Blast,d) "/genomics/link/SpliRetMouse/database/VERT_UniProt_RefSeq_Ensembl_Varsplic" set DefautsPipe(Blast,e) "1" set DefautsPipe(Blast,v) "5000" set DefautsPipe(Blast,b) "5000" set DefautsPipe(Blast,K) "0" set DefautsPipe(Blast,f) "9" set DefautsPipe(Blast,F) "T" set DefautsPipe(Blast,g) "T" set DefautsPipe(Blast,m) "0" #set DefautsPipe(Blast,a) "4" set DefautsPipe(Blast,p) "blastp" set DefautsPipe(Filter,bank) [set DefautsPipe(Blast,d)] set DefautsPipe(Filter,method) "splice" set DefautsPipe(Filter,length) "3000" set DefautsPipe(Filter,fragment) "1" set DefautsPipe(Filter,maxseq) "33" set DefautsPipe(Filter,expect) "0.01" set DefautsPipe(Filter,add) "0" set DefautsPipe(Filter,varsplic) "0" set DefautsPipe(Filter,addpdb) "" set DefautsPipe(Project,project) "addSeq" set DefautsPipe(DbClustal,propagate) "1" set DefautsPipe(DbClustal,output) "gcg" set DefautsPipe(DbClustal,motifs) "1" set DefautsPipe(DbClustal,clustalw) "/biolo/clustal/bin/clustalw" set DefautsPipe(Cluspack,bestmsf) "auto" set DefautsPipe(Macsims,bestmsf) "auto" set DefautsPipe(Conservation,method) "none" set DefautsPipe(Etapes,conservation) "0" set DefautsPipe(Etapes,blast) "1" set DefautsPipe(Etapes,ballast) "1" set DefautsPipe(Etapes,filter) "1" set DefautsPipe(Etapes,clustal) "1" set DefautsPipe(Etapes,normd1) "1" set DefautsPipe(Etapes,rascal) "1" set DefautsPipe(Etapes,normd2) "1" set DefautsPipe(Etapes,leon) "1" set DefautsPipe(Etapes,normd3) "1" set DefautsPipe(Etapes,cluspack) "0" set DefautsPipe(Etapes,macsims) "1" set DefautsPipe(Etapes,modelisation) "0" } return } 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 LesDefinitionsDesProteinesDuMSF {Nom {IdDesProtId 0.98} {NormMDMin 0.5}} { set FileMSF "[RepertoireDuGenome]/msf/$Nom" set FileClust "${FileMSF}.clust" ####Recherche des EC appartennant aux proteines du cluster du msf si celui-ci a un bon NormMD#### if {![file exists $FileMSF]} {return} if {[AskMSF $FileMSF $Nom] != ""} { set Query $Nom } elseif {[AskMSF $FileMSF "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" } else { return } set LesMotsDeRef {} set LesDefinitionsDeRef {} foreach Access [LesProteinesProchesDeLaProteineDeRef $Query $FileMSF $FileClust $IdDesProtId AvecCluster $NormMDMin] { if {[regexp {^[0-9]} $Access]} {continue} LesPhrasesMemorisees UNSET InterrogeLesEffectifsDesMots UNSET set PageInfo [PageInfo $Access protein des] if {$PageInfo == ""} {continue} set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] if {$Def == ""} {continue} lappend LesDefinitionsDeRef "$Access\t$Def" } return [LesPhrasesNettoyees $LesDefinitionsDeRef] } proc LesDefinitionsDuMsf {FichierMsf} { set NombreDeSequences [DecortiqueUnMSF $FichierMSF LesSequencesDansLOrdre] foreach NomSeq $LesSequencesDansLOrdre { regsub "spt_" $NomSeq "" Access set DE [BirdWeb UNIPROT $Access] Espionne "$Access $DE" } return } proc LesDefinitionsRevisitees {} { foreach Nom [ListeDesPABs] { set NotreDE [string trim [Definition $Nom] "."] set NarciDE [string trim [ExtraitInfo $Nom "DE_Narcisse"] "."] if {[string toupper $NotreDE]==[string toupper $NarciDE]} { continue } if {[regexp "Hypothetical protein" $NotreDE] && [regexp {HYPOTHETICAL [0-9\.]* KDA PROTEIN} $NarciDE] } { continue } Espionne $Nom Espionne "$NotreDE\n$NarciDE" lappend LesNouveaux $Nom } return $LesNouveaux } proc LesDefsAlA {args} { global AlATables set ::WithGUI 0 set ::debug 1 set ::debsq "s01" set ::debag "" set ::WeightCols 1 set ::WeightMotif 0 set ::MotifLen 5 set ::DoStep 0 set ::StepMode 0 set ::Start 0 set ::AlATables " - file { . pk_file P . nom V32 . dataset V32 . nbSeqs I . length I } - block { . pk_block P . start I . stop I . length I } - ln_file_block { . pk_file I . pk_block I } - analyse { . pk_analyse P . score V16 . matrix V16 . weight I . motiflen I } - ln_block_analyse { . pk_block I . pk_analyse I } - segment { . pk_segment P . rank R . min I . max I . nzero I . nsup I } - ln_analyse_segment { . pk_analyse I . pk_segment I }" return } proc LesDescriptifsDuBlast {FichierOuNom {Source ""}} { #rR Petite remarque : LesDescriptifs c'est assez compliqué #rR ça a l'air de tourner en rond ... car ici on crée les descritptifs même s'ils existent déjà #rR en fait il ne le rajoute que s'il n'existe pas #rR (StockeLeDescriptif est assez intelligent ) global RepertoireDuGenome global SeuilExpectPourJulie if {$Source==""} { set Source "blastp" } set Nom [file tail $FichierOuNom] scan [TailleDuDescriptifDuBlastP] "%d %d %d %f" MinObliges MaxVoulus MaxPDB SeuilExpect set MaxADecortiquer [expr $MaxVoulus+$MaxPDB] if {[info exists SeuilExpectPourJulie]} { set SeuilExpect $SeuilExpectPourJulie } Wup "On ne veut plus voir le meme PAB .......... peut servir autrement ... " set LesIndesirables {} if {0 && [regsub "^ABY$" $Nom "PAB" Indesirable]} { lappend LesIndesirables $Indesirables } set LesCandidats {} if {$Source=="daedalus" || ($Source=="" && [OuiOuNonMemo "Do I use Daedalushits to collect the candidates for DbClustal ?" 0])} { set Source "daedalushits" set Fichier "$RepertoireDuGenome/$Source/$Nom" while { ! [file exists $Fichier]} { if {[OuiOuNon "May be you forgot to run DaedalusHitsDuBlastPPourTous.\n Do I run it now ... (it could take a while) ? "]} { DaedalusHitsDuBlastPPourTous "EnProcessExterne" } else { if {[OuiOuNon "Do I return an empty list of orthologs for $Nom ?" 0]} { return {} } if {[OuiOuNon "Do I use the blastp file ?"]} { return [LesDescriptifsDuBlast $FichierOuNom "blastp"] } } } set Texte [ContenuDuFichier $Fichier] set PN 0.0009876 while 1 { set BlastHit [ValeurDeLaBalise "BlastHit" Texte "Rogner" BH] if {$BlastHit==""} { break } set BanqueId $BH set Access $BH set AccessOK $BH set OldPN $PN set ID [ValeurDeLaBalise "ID" BlastHit "NePasRogner"] set AC [ValeurDeLaBalise "AC" BlastHit "NePasRogner"] set PN [ValeurDeLaBalise "PN" BlastHit "NePasRogner"] if {$PN=="0.000999"} { set PN $OldPN } set OX [ValeurDeLaBalise "OX" BlastHit "NePasRogner"] set GN [ValeurDeLaBalise "GN" BlastHit "NePasRogner"] set DE [ValeurDeLaBalise "DE" BlastHit "NePasRogner"] set OS [ValeurDeLaBalise "OS" BlastHit "NePasRogner"] set OC [ValeurDeLaBalise "OC" BlastHit "NePasRogner"] set CandId [lindex [split $ID " "] 0] set CandAc [lindex [split $AC " "] 0] if {$CandId==""} { set CandId $BanqueId } if {$CandAc==""} { set CandAc $Access } if {$OS=="" && $OX!=""} { set OS [Tax $OX "Name"] } regsub -all " " $DE "_" BeauDE set Candidat "$CandId $CandAc $PN $OS $BeauDE $OC" lappend LesCandidats $Candidat regsub -all {\:} $DE "_" DE set Descriptif "$AccessOK OS:$OS GN:$GN DE:$DE ID:$ID AC:$AC OC:$OC OX:$OX" StockeLeDescriptif $AccessOK $Descriptif $Nom } Espionne "$Nom accepts [llength $LesCandidats] candidats" return $LesCandidats } if {[file exists $FichierOuNom] && $Nom!=$FichierOuNom} { set Fichier $FichierOuNom } else { set Fichier "$RepertoireDuGenome/$Source/$Nom" } if { ! [file exists $Fichier]} { return {} } DecortiqueBlast $Fichier $SeuilExpect $MaxADecortiquer Query lBanqueId lAccess lDE lProfil lPN #rR rajout 2014/11/25 set LesBonBid {} set LesBonAcc {} foreach BID $lBanqueId ACC $lAccess { if {[regexp {\|} $BID]} { lassign [split $BID "|"] Ban BonAcc BonBid lappend LesBonAcc $BonAcc lappend LesBonBid $BonBid continue } lappend LesBonAcc $ACC lappend LesBonBid $BID } set lAccess $LesBonAcc set lBanqueId $LesBonBid set NbEnMemoire [PrepareLesSequencesDesBanques $lBanqueId $lAccess] Espionne "$NbEnMemoire EMBL mis en memoire par PrepareLesSequencesDesBanques" foreach BanqueId $lBanqueId Access $lAccess PetitDE $lDE Profil $lProfil PN $lPN { if {[lsearch -exact $LesIndesirables $Access] > 0 } { continue } # if {$FromDescriptifs} { # } set LesLignesEMBL [LaSequenceDesBanques $BanqueId $Access AccessOK "OnVeutEMBL"] if {$LesLignesEMBL=={}} { continue } DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX Espionne $DE if {$DE==""} { set DE $PetitDE } LeDescriptif $AC $Nom $DE ;#rR rajout 2013/10/17 : Mise en memoire pour ConcatLeTFAs regsub -all " " $DE "_" BeauDE lappend LesCandidats "$BanqueId $Access $PN $OS $BeauDE $OC" regsub -all {\:} $DE "_" DE set Descriptif "$AccessOK OS:$OS GN:$GN DE:$DE ID:$ID AC:$AC OC:$OC OX:$OX" StockeLeDescriptif $AccessOK $Descriptif $Nom } return $LesCandidats } proc LesDescriptifsDuMSF {FileMSF} { if {![file exists $FileMSF]} {return} AskMSF unset AskLesPagesInfos unset set LesAccess [AskMSF $FileMSF LesAccess] if {$LesAccess == ""} {return} AskLesPagesInfos load $LesAccess protein set LesDescriptifs {} foreach Access $LesAccess { if {$Access == "QUERY_PROTEIN"} {continue} Espionne "$FileMSF -> $Access" set AccessOK "$Access=$Access" if {[EstUnAccessVARSPLIC $Access] || [EstUnAccessPDB $Access]} { set LaPageInfo [LaSequenceDesBanques $Access $Access AccessOK "OnVeutEMBL"] } else { set LaPageInfo [split [AskLesPagesInfos ask $Access] "\n"] } if {$LaPageInfo == ""} {continue} DecortiqueLesLignesEMBL $LaPageInfo ID AC DE GN OS OC OX regsub -all {\:} $DE "_" DE lappend LesDescriptifs "$AccessOK OS:$OS GN:$GN DE:$DE ID:$ID AC:$AC OC:$OC OX: $OX" } AskLesPagesInfos unset AskMSF unset return $LesDescriptifs } proc LesDevStage {Nom FichierBlastEST {AllOrgaouJustMyOrga AllOrga} {IdDeRef 0.95}} { if {![file exists $FichierBlastEST]} {return [list "$Nom\tNoESTFound"]} set NbSubject [AskBlast $FichierBlastEST NbSubject] if {$NbSubject == ""} {return [list "$Nom\tNoESTFound"]} set OrgaDeRef [OrganismeDuPAB $Nom] set LeTexte {} set LesBId {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlastEST Subject $i] set PAlignees [PourcentageDesBasesAligneesSurToutesLesBasesAlignables $FichierBlastEST $BId] if {$PAlignees < $IdDeRef} {continue} set PAlignables [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables $FichierBlastEST $BId] if {$PAlignables < $IdDeRef} {continue} Espionne $BId lappend LesBId $BId } AskLesPagesInfos load $LesBId est set LeTexte {} foreach BId $LesBId { set Page [AskLesPagesInfos ask $BId] if {$Page == ""} {continue} set Access [AskBlast $FichierBlastEST BanqueId $BId Access] set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] if {$AllOrgaouJustMyOrga != "AllOrga"} { set EstCeUnDesOrga 0 foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} {set EstCeUnDesOrga 1;break} } if {!$EstCeUnDesOrga} {continue} } set LesDevStages [LesDevStageDeLAcNuc_PageInfo $Page] if {$LesDevStages == {}} {continue} foreach DevStage $LesDevStages { foreach Orga $LesOrgas { Espionne "$Nom\t$Access\t$Orga\t$DevStage" lappend LeTexte "$Nom\t$Access\t$Orga\t$DevStage" } } } AskBlast unset AskLesPagesInfos unset if {$LeTexte == {}} {return [list "$Nom\tNoESTFound"]} return $LeTexte } proc LesDevStageDeLAcNuc {Access {Banque genbankfull}} { return [LesDevStageDeLAcNuc_PageInfo [PageInfo $Access $Banque]] } proc LesDevStageDeLAcNuc_PageInfo {PageInfo} { set LAiJeVu 0 set Infos "" foreach Ligne [split $PageInfo "\n"] { if {!$LAiJeVu && [regexp -nocase "dev_stage=" $Ligne]} { regsub -nocase " source " $Ligne "" Ligne append Infos " $Ligne" set LAiJeVu 1 continue } if {$LAiJeVu && [regexp -nocase "BASE COUNT" $Ligne]} {break} if {!$LAiJeVu} {continue} append Infos " $Ligne" } if {!$LAiJeVu} {return ""} regsub -all " /" $Infos "," Infos regsub -all "\"" $Infos " " Infos regsub -all " and " $Infos "," Infos regsub -all {\. } $Infos "," Infos regsub -all ", " $Infos "," Infos regsub -all " ," $Infos "," Infos regsub -all "\=" $Infos "\=," Infos regsub -all "\\(" $Infos " " Infos regsub -all "\\)" $Infos " " Infos while {[regexp " " $Infos]} {regsub -all " " $Infos " " Infos} set LesTissues "" set SuisJeSurUnTissue 0 foreach Element [split [string trim $Infos] ","] { set Element [string trim $Element] if {$Element == ""} {continue} if {[string equal -nocase "dev_stage=" $Element]} { set SuisJeSurUnTissue 1 continue } if {$SuisJeSurUnTissue && [regexp "=" $Element]} { set SuisJeSurUnTissue 0 continue } if {!$SuisJeSurUnTissue} {continue} if {[info exists Tab($Element)]} {continue} set Tab($Element) 1 lappend LesTissues $Element } return [lsort -unique $LesTissues] } proc LesDiftesBandesParCluster {LeCluster} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Clones_bandes_new"] { ## (rq: pas de user R dans ce fichier) if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set U [lindex $LesChamps 0] ### ATTENTION: enlever les espaces qui sont parfois apres le codeclone ###### set CodeClone [string trim [lindex $LesChamps 1]] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } set B [lindex $LesChamps 2] set Band($U,$CodeClone) $B } set LesJumeaux [split $LeCluster " "] foreach DD $LesJumeaux { Espionne $DD set CC [ExtraitInfo $DD "CodeClone"] set Ow [ExtraitInfo $DD "OwnerOfCDNA"] if {$Ow=="R"} {set Ow "I"} if {$Ow=="F"} {set CC [string toupper $CC]} set Bande $Band($Ow,$CC) #Bandes de Fred du type H16B sans profil alors que H16 avec profil et meme bande if {$Ow=="F" && [regexp -nocase {[A-Z]+[0-9]+[A-Z]} $Bande]} { regexp -nocase -indices {[A-Z]+[0-9]+} $Bande tmp set NewBande [string range $Bande 0 [lindex $tmp 1]] set Bande $NewBande } if {![info exists Vu($Bande,$Ow)]} {set Vu($Bande,$Ow) 1; lappend LesDiftesBandes $Bande} } return $LesDiftesBandes } proc LesDomaines {Nom FileMSF FileClust {IdDesProtId 0.98} {NorMDMin 0.5} {ProportionMinDuDomaineDeLaQuery 0.75}} { if {![file exists $FileMSF]} {return} if {[AskMSF $FileMSF $Nom] != ""} { set Query $Nom set LaSeqProtDeRef [split [string toupper [AskMSF $FileMSF $Query]] ""] } elseif {[AskMSF $FileMSF "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" set LaSeqProtDeRef [split [string toupper [AskMSF $FileMSF $Query]] ""] } else { return } ###Recensement de tous les domaines Interpro Pfam et features de cet Access#### set TousLesDomainesDeRef {} foreach Access [LesProteinesProchesDeLaProteineDeRef $Query $FileMSF $FileClust $IdDesProtId "AvecCluster" $NorMDMin] { if {[EstUnAccessPDB $Access]} {continue} if {[EstUnAccessVARSPLIC $Access]} {continue} set Seq [AskMSF $FileMSF $Access] if {$Seq == ""} {continue} set LaSeqProt [split [string toupper $Seq] ""] ###Determination des domaines INTERPRO, PFAM et fetatures de la proteine set LesDomaines [LesDomainesDeLAccess $Access AvecInterpro AvecPFAM AvecFeature] set Tab(Access,$Access,LesDomaines) $LesDomaines set Tab(Access,$Access,LaSeqProt) $LaSeqProt if {$LesDomaines == {}} {continue} ###Correspondance des domaines de l'access avec la sequence de la query foreach LeDomaine [lsort -unique -index 3 -real $LesDomaines] { set Type [lindex $LeDomaine 0] set Dom [lindex $LeDomaine 1] set Def [lindex $LeDomaine 2] set Debut [lindex $LeDomaine 3] set Fin [lindex $LeDomaine 4] set NAATot [expr $Fin - $Debut + 1] set NAAEnCommun 0 ################################################# ###IMPORTANT car dans feature un domaine peut avoir plusieurs domaines#### if {$Type == "FEATURE"} { set OldDom $Dom set Dom "$Dom $Def" regsub -all -nocase {[^a-z0-9 ]} $Dom "" Dom set Tab(Domaine,$Dom,VraiNomDeDomaine) $OldDom } set DebutDeRef "" set PosSurProt 0 set PosSurProtDeRef 0 set AiJeLeDebut 0 set AiJeLaFin 0 foreach AADeRef $LaSeqProtDeRef AA $LaSeqProt { if {$AADeRef != "."} {incr PosSurProtDeRef} if {$AA != "."} {incr PosSurProt} else {continue} if {$PosSurProt < $Debut } {continue} if {$Fin < $PosSurProt} {break } if {!$AiJeLeDebut} { if {$AADeRef != $AA} {continue} set DebutDeRef $PosSurProtDeRef set FinDeRef $PosSurProtDeRef set AiJeLeDebut 1 } if {$AiJeLeDebut && $AADeRef == $AA} { incr NAAEnCommun set FinDeRef $PosSurProtDeRef } } if {$DebutDeRef == "" || $FinDeRef == ""} {continue} if {[expr ($FinDeRef-$DebutDeRef+1) * 1.0 / ($Fin-$Debut+1)] < $ProportionMinDuDomaineDeLaQuery} {continue} if {![info exists Tab(Domaine,$Dom,LesCoordonnees)]} { lappend TousLesDomainesDeRef $Dom set Tab(Domaine,$Dom,Type) $Type set Tab(Domaine,$Dom,Def) $Def set Tab(Domaine,$Dom,LesCoordonnees) {} } if {![info exists Tab(Domaine,$Dom,$DebutDeRef,$FinDeRef,LesAccess)]} { set Tab(Domaine,$Dom,$DebutDeRef,$FinDeRef,LesAccess) {} } lappend Tab(Domaine,$Dom,$DebutDeRef,$FinDeRef,LesAccess) $Access lappend Tab(Domaine,$Dom,LesCoordonnees) [list $DebutDeRef $FinDeRef] } } set LesDomainesDeRef {} foreach DomDeRef $TousLesDomainesDeRef { set Def [set Tab(Domaine,$DomDeRef,Def)] set Type [set Tab(Domaine,$DomDeRef,Type)] ##Fusion de toutes les regions identiques et overlappantes determinees ci-dessus foreach LaRegionDeRef [LaFusionDesRegionsOverlappantes [set Tab(Domaine,$DomDeRef,LesCoordonnees)]] { set DebutDeRef [lindex $LaRegionDeRef 0] set FinDeRef [lindex $LaRegionDeRef 1] set LesAccess {} foreach UneR [set Tab(Domaine,$DomDeRef,LesCoordonnees)] { set D [lindex $UneR 0] set F [lindex $UneR 1] if {![CesRegionsSontEllesOverlappantes $DebutDeRef $FinDeRef $D $F]} {continue} foreach Access [set Tab(Domaine,$DomDeRef,$D,$F,LesAccess)] {lappend LesAccess $Access} } set NAATotDeRef [expr $FinDeRef - $DebutDeRef + 1] set NAAEnCommunMax 0 ##Calcul et determination du Pourcentage d'homologie le plus eleve avec ##les autres access possedant egalement ce domaine foreach Access $LesAccess { set LaSeqProt [set Tab(Access,$Access,LaSeqProt)] set NAAEnCommun 0 set PosSurProtDeRef 0 foreach AADeRef $LaSeqProtDeRef AA $LaSeqProt { if {$AADeRef != "."} {incr PosSurProtDeRef} else {continue} if {$PosSurProtDeRef < $DebutDeRef } {continue} if {$FinDeRef < $PosSurProtDeRef} {break } if {$AADeRef != $AA} {continue} incr NAAEnCommun } if {$NAAEnCommunMax < $NAAEnCommun} {set NAAEnCommunMax $NAAEnCommun} } if {$NAAEnCommunMax == 0} {continue} set Dom $DomDeRef ###Important on redonne le vrai nom du domaine aux features#### if {$Type == "FEATURE" && [info exists Tab(Domaine,$Dom,VraiNomDeDomaine)]} { set Dom [set Tab(Domaine,$Dom,VraiNomDeDomaine)] } set P [expr $NAAEnCommunMax * 1.0 / $NAATotDeRef] lappend LesDomainesDeRef [list $Nom $Type $Dom $Def $DebutDeRef $FinDeRef $P] } } if {$LesDomainesDeRef == {}} {return} return [lsort -index 4 -real [lsort -index 5 -real $LesDomainesDeRef]] } proc LesDomainesDeLAccess {Access {AvecOuSansInterpro AvecInterpro} {AvecOuSansPFAM AvecPFAM} {AvecOuSansFeature AvecFeature}} { ##Les domaines interpro de l'access par Interpromatch set LesDomaines {} if {$AvecOuSansInterpro == "AvecInterpro"} { foreach LInterpro [LesInterproDeLAccess $Access] { set IPR [lindex $LInterpro 1] set Def [lindex $LInterpro 2] set Debut [lindex $LInterpro 3] set Fin [lindex $LInterpro 4] if {$Debut == "" || $Fin == ""} {continue} if {[info exists Tab($IPR,$Debut,$Fin)]} {continue} set Tab($IPR,$Debut,$Fin) 1 lappend LesDomaines [list INTERPRO $IPR $Def $Debut $Fin] } } if {$AvecOuSansPFAM == "AvecPFAM"} { ##Les domaines pfam de l'access par SwissPfam dans SRS foreach LePfam [LesDomainesPfamDeLaProteine $Access] { set Pfam [lindex $LePfam 1] set Def [lindex $LePfam 2] set Debut [lindex $LePfam 4] set Fin [lindex $LePfam 5] lappend LesDomaines [list PFAM $Pfam $Def $Debut $Fin] } } if {$AvecOuSansFeature == "AvecFeature"} { ###Les features de l'access par extraction des infos de SRS foreach LaFeature [LesFeaturesDeLAccess $Access] { set Feature [lindex $LaFeature 1] ###Elimination de certains Feature ininteressant if {[regexp -nocase {VARSPLIC|PROPEP|CONFLICT|VARIANT|MUTAGEN} $Feature]} {continue} lappend LesDomaines $LaFeature } } return $LesDomaines } proc LesDomainesDeLaBoite {Nom {IdDesProtId 0.98} {NormMDMin 0.5} {ProportionMinDuDomaineDeLaQuery 0.75}} { set RepMSF "[RepertoireDuGenome]/msf" set File "$RepMSF/$Nom" if {![file exists $File]} {return} AskMSF $File unset if {[AskMSF $File $Nom] != ""} { set Query $Nom set LaSeqProtDeRef [split [string toupper [AskMSF $File $Query]] ""] } elseif {[AskMSF $File "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" set LaSeqProtDeRef [split [string toupper [AskMSF $File $Query]] ""] } else { return } ###Recensement de tous les domaines Interpro Pfam et features de cet Access#### set TousLesDomainesDeRef {} ####Uniquement les Access avec IdDesProtId % d'identite avec la query ou les proteines ####du cluster de msf si normmd est superieur a NormMDMin ou si il n'y a pas de clusters ####de MSF toutes les proteines du msf si le NormMD est superieur a NormMDMin foreach Access [LesAccessProchesDeLaProteineDeRef $Nom $IdDesProtId AvecCluster $NormMDMin] { if {[EstUnAccessPDB $Access]} {continue} set Seq [AskMSF $File $Access] if {$Seq == ""} {continue} set LaSeqProt [split [string toupper $Seq] ""] ###Determination des domaines INTERPRO, PFAM et fetatures de la proteine set LesDomaines [LesDomainesDeLAccess $Access AvecInterpro AvecPFAM AvecFeature] set Tab(Access,$Access,LesDomaines) $LesDomaines set Tab(Access,$Access,LaSeqProt) $LaSeqProt if {$LesDomaines == {}} {continue} ###Correspondance des domaines de l'access avec la sequence de la query foreach LeDomaine [lsort -unique -index 3 -real $LesDomaines] { set Type [lindex $LeDomaine 0] set Dom [lindex $LeDomaine 1] set Def [lindex $LeDomaine 2] set Debut [lindex $LeDomaine 3] set Fin [lindex $LeDomaine 4] set NAATot [expr $Fin - $Debut + 1] set NAAEnCommun 0 ################################################# ###IMPORTANT car dans feature un domaine peut avoir plusieurs domaines#### if {$Type == "FEATURE"} { set OldDom $Dom set Dom "$Dom $Def" regsub -all -nocase {[^a-z0-9 ]} $Dom "" Dom set Tab(Domaine,$Dom,VraiNomDeDomaine) $OldDom } set DebutDeRef "" set PosSurProt 0 set PosSurProtDeRef 0 set AiJeLeDebut 0 set AiJeLaFin 0 foreach AADeRef $LaSeqProtDeRef AA $LaSeqProt { if {$AADeRef != "."} {incr PosSurProtDeRef} if {$AA != "."} {incr PosSurProt} else {continue} if {$PosSurProt < $Debut } {continue} if {$Fin < $PosSurProt} {break } if {!$AiJeLeDebut} { if {$AADeRef != $AA} {continue} set DebutDeRef $PosSurProtDeRef set FinDeRef $PosSurProtDeRef set AiJeLeDebut 1 } if {$AiJeLeDebut && $AADeRef == $AA} { incr NAAEnCommun set FinDeRef $PosSurProtDeRef } } if {$DebutDeRef == "" || $FinDeRef == ""} {continue} if {[expr ($FinDeRef-$DebutDeRef+1) * 1.0 / ($Fin-$Debut+1)] < $ProportionMinDuDomaineDeLaQuery} {continue} if {![info exists Tab(Domaine,$Dom,LesCoordonnees)]} { lappend TousLesDomainesDeRef $Dom set Tab(Domaine,$Dom,Type) $Type set Tab(Domaine,$Dom,Def) $Def set Tab(Domaine,$Dom,LesCoordonnees) {} } if {![info exists Tab(Domaine,$Dom,$DebutDeRef,$FinDeRef,LesAccess)]} { set Tab(Domaine,$Dom,$DebutDeRef,$FinDeRef,LesAccess) {} } lappend Tab(Domaine,$Dom,$DebutDeRef,$FinDeRef,LesAccess) $Access lappend Tab(Domaine,$Dom,LesCoordonnees) [list $DebutDeRef $FinDeRef] } } set LesDomainesDeRef {} foreach DomDeRef $TousLesDomainesDeRef { set Def [set Tab(Domaine,$DomDeRef,Def)] set Type [set Tab(Domaine,$DomDeRef,Type)] ##Fusion de toutes les regions identiques et overlappantes determinees ci-dessus foreach LaRegionDeRef [LaFusionDesRegionsOverlappantes [set Tab(Domaine,$DomDeRef,LesCoordonnees)]] { set DebutDeRef [lindex $LaRegionDeRef 0] set FinDeRef [lindex $LaRegionDeRef 1] set LesAccess {} foreach UneR [set Tab(Domaine,$DomDeRef,LesCoordonnees)] { set D [lindex $UneR 0] set F [lindex $UneR 1] if {![CesRegionsSontEllesOverlappantes $DebutDeRef $FinDeRef $D $F]} {continue} foreach Access [set Tab(Domaine,$DomDeRef,$D,$F,LesAccess)] {lappend LesAccess $Access} } set NAATotDeRef [expr $FinDeRef - $DebutDeRef + 1] set NAAEnCommunMax 0 ##Calcul et determination du Pourcentage d'homologie le plus eleve avec ##les autres access possedant egalement ce domaine foreach Access $LesAccess { set LaSeqProt [set Tab(Access,$Access,LaSeqProt)] set NAAEnCommun 0 set PosSurProtDeRef 0 foreach AADeRef $LaSeqProtDeRef AA $LaSeqProt { if {$AADeRef != "."} {incr PosSurProtDeRef} else {continue} if {$PosSurProtDeRef < $DebutDeRef } {continue} if {$FinDeRef < $PosSurProtDeRef} {break } if {$AADeRef != $AA} {continue} incr NAAEnCommun } if {$NAAEnCommunMax < $NAAEnCommun} {set NAAEnCommunMax $NAAEnCommun} } if {$NAAEnCommunMax == 0} {continue} set Dom $DomDeRef ###Important on redonne le vrai nom du domaine aux features#### if {$Type == "FEATURE" && [info exists Tab(Domaine,$Dom,VraiNomDeDomaine)]} { set Dom [set Tab(Domaine,$Dom,VraiNomDeDomaine)] } set P [expr $NAAEnCommunMax * 1.0 / $NAATotDeRef] lappend LesDomainesDeRef [list $Nom $Type $Dom $Def $DebutDeRef $FinDeRef $P] } } if {$LesDomainesDeRef == {}} {return} return [lsort -index 4 -real [lsort -index 5 -real $LesDomainesDeRef]] } proc LesDomainesDiscriminantsDesARPs {{FichierMSF ""} {LesFichiersPos ""} {FichierOut ""}} { Wup "Permet de rendre les domaines discriminants et les positions relatives" #Utilisation du programme de Julie qui permet de transcrire les positions, dans un alignement par rapport a une #sequence de reference, en position equivalentes dans plusieurs autres sequences #Format d entree du fichier #1ere ligne Seq de ref (P02568) #2eme ligne les positions separees par des blancs (1 34 546 21 ...) #ligne suivante un nom de sequence par ligne #/home/julie/bin/aln_pos Actin_Complet3_1_Propre.rsf ARP8_signature set ARPHomeDir "[RepertoireDuGenome]/alignement_ARP/" set Aln_Pos "/home/julie/bin/aln_pos" if {$FichierMSF==""} { set FichierMSF "$ARPHomeDir/Actin_Complet3_8.rsf" } #Fichier contenant les positions importantes pour le binding au nucleotide (ATP/ATP) if {$FichierOut==""} { set FichierOut "$ARPHomeDir/Residue/LesARPs_signature.dom" } #Lecture du fichier contenant les positions a recherchees #set LesFichiersPos [glob -nocomplain -directory "$ARPHomeDir/Residue" "ARP*_signature"] if {$LesFichiersPos=="" || ! [file exists $LesFichiersPos]} { set LesFichiersPos [glob -nocomplain -directory "$ARPHomeDir/Residue" "ARP*_signature.dom"] } Espionne "$LesFichiersPos" foreach FichierPos $LesFichiersPos { if {[file size $FichierPos]=="0"} {continue} AppendAuFichier $FichierOut [file tail $FichierPos] set Reference "" set LesPos "" set i 0 set F [open "$FichierPos"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {$i=="1"} { set Reference [lindex $Ligne 0] continue } if {$i=="2"} { set LesPos [split [string trim $Ligne] " "] break } } close $F set LaReference [join [linsert $LesPos 0 $Reference] "\t"] #Espionne "$LaReference" AppendAuFichier $FichierOut $LaReference set LesResidus "" set Result "" if {[catch {set LesResidus [exec $Aln_Pos $FichierMSF $FichierPos]} Message]} { Espionne "pb $Message" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } } } return "" } proc LesDomainesPfamDeLaProteine {AccessProt} { set LesDomaines {} foreach Ligne [split [PageInfo $AccessProt swisspfam] "\n"] { set Ligne [string trim $Ligne] if {$Ligne == "" || [regexp "^>" $Ligne]} {continue} regsub -all "\t" $Ligne " " Ligne while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LaLigne [split $Ligne " "] set Id [lindex $LaLigne 0 ] set LesCoords {} set LesElements [lrange $LaLigne 2 end] while {[regexp {([0-9]+)\-([0-9]+)} [lindex $LesElements end] tmp Debut Fin]} { lappend LesCoords [list $Debut $Fin] set LesElements [lrange $LesElements 0 end-1] } set LesElements2 {} foreach Element $LesElements { if {[regexp {^[-]+$} $Element]} {continue} lappend LesElements2 $Element } set Score [lindex $LesElements2 0] regexp {\(([0-9]+)\)} $Score tmp Score set Access [lindex $LesElements2 1 ] set Def [lrange $LesElements2 2 end] foreach LaCoord $LesCoords { set D [lindex $LaCoord 0] set F [lindex $LaCoord 1] lappend LesDomaines [list $Id $Access $Def $Score $D $F] } } return [lsort -index 4 -increasing -integer [lsort -index 5 -decreasing -integer $LesDomaines]] } proc LesDonneesPourNicolas {{FichierSave ""} {Dir ""}} { #B C R if {$FichierSave == ""} { #Choix du fichier de sauvegarde while {1} { set Texte "Choose a file name to save your selection" FaireLire "$Texte" set FichierSave [tk_getSaveFile -title "Choose a file name to save" -initialdir "[RepertoireDuGenome]"] if {$FichierSave == ""} { if {! [OuiOuNon "Would you like to continue ?"]} {return ""} } else { break } } } if {[file exists $FichierSave]} { if {! [OuiOuNon "$FichierSave already exists, would you like append to it ?"]} { file delete -force $FichierSave } } while {1} { if {$Dir==""} { FaireLire "Choose a directory containing all .gpr files" set Dir [tk_chooseDirectory -title "Choose a directory" -initialdir "[RepertoireDuGenome]"] } else {break} } set LesFichiers [glob -nocomplain "$Dir/*.gpr"] Espionne "$LesFichiers" set Fichier1 [lindex $LesFichiers 0] Espionne "$Fichier1" set NbBlock [InterrogeLeGPRFile $Fichier1 NbBlock] set NbColonne [InterrogeLeGPRFile $Fichier1 NbColumn] set NbRow [InterrogeLeGPRFile $Fichier1 NbRow] #Espionne "$NbBlock $NbColonne $NbRow" AppendAuFichier $FichierSave "[join [concat [list Block Column Row Name] $LesFichiers] "\t"]" set Ligne "" for {set b 1} {$b<=$NbBlock} {incr b} { for {set r 1} {$r<=$NbRow} {incr r} { for {set c 1} {$c<=$NbColonne} {incr c} { set Name [InterrogeLeGPRFile $Fichier1 $b $c $r Name] lappend Ligne $b lappend Ligne $c lappend Ligne $r lappend Ligne $Name foreach File $LesFichiers { #set Name [InterrogeLeGPRFile $File $b $c $r Name] set xF635Median "F635 Median" set F635Median [InterrogeLeGPRFile $File $b $c $r "$xF635Median"] if {$F635Median==""} {Espionne "Pb avec $File pour $xF635Median"} lappend Ligne $F635Median } #Espionne "B $b C $c R $r" #Espionne ">>> [join $Ligne "\t"]" AppendAuFichier $FichierSave "[join $Ligne "\t"]" set Ligne "" } } } return "" } proc LesECDeLAccess {Access} { set PageInfo [PageInfo $Access protein des] return [LesECDeLAccess_PageInfo $PageInfo] } proc LesECDeLAccess_PageInfo {PageInfo} { set LesEC {} foreach Ligne [split $PageInfo "\n"] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {![regexp "^DE " $Ligne]} {continue} while {[regexp -nocase {(EC [0-9\.]+)|(EC:[0-9\.]+)} $Ligne tmp EC]} { regsub "\.$" $EC "" EC lappend LesEC [string tolower $EC] regsub -nocase {EC [0-9\.\-]+|EC:[0-9\.\-]+} $Ligne "" Ligne } } return $LesEC } proc LesEPDouDBTSSSelectedPourPromAn {FileTFA {EPDouDBTSS EPD} {IdMin 0.3} {Expect 0.1} {NbSubject 100} {Filter F} {TSSPosition 10001} {nVar 0.05}} { #Attention DistProm est la distance prise pour construction des seq dans mrnatfa_$Orga_promoter = TSSPosition -1 #Selection == "Yes" si on veut selectionner les hits set LesSegmentsDesBIdToKeep {} set ResultType "PromoterAndTSS" if {![file exists $FileTFA]} {Espionne "$FileTFA does not exists" ; return } set FileBlast "$FileTFA.blastn$EPDouDBTSS" set FileBlastReduit "$FileBlast.red" AskBlast unset AskDBTSS unset AskEPDIdOrga unset ### 1-Recherche d'homologie entre la sequence TFA query et la DB EPD ou DBTSS par Blastn ### Espionne "$FileTFA -> blast against $EPDouDBTSS blast database" if {$EPDouDBTSS == "EPD"} { BlastEPD $FileTFA $FileBlast $Expect $NbSubject $Filter } else { BlastDBTSS $FileTFA $FileBlast $Expect $NbSubject $Filter } if {![file exists $FileBlast]} {Espionne "File blast $EPDouDBTSS does not exists" ; return } ### 2-Selection des segments des subjects selon un seuil d'identite min ### set NbSubject [AskBlast $FileBlast NbSubject] if {$NbSubject == ""} {Espionne "File blast $EPDouDBTSS is not valid" ; return } #Determination du nb max de bases des subjects alignees avec la query set nMax 0 set LesRegions {} #On parcoure chaque subject du blast for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FileBlast Subject $i ] set NbSegment [AskBlast $FileBlast BanqueId $BId NbSegment] set Taille [AskBlast $FileBlast BanqueId $BId Taille ] set TabSegmentToKeep($BId,LesSegments) {} #On parcoure chaque segment du subject for {set j 1} {$j <= $NbSegment} {incr j} { set Identities [AskBlast $FileBlast BanqueId $BId Segment $j Identities] if {$Identities == ""} {continue} set n 0 scan $Identities "%d/%d" n nTot set TailleS [AskBlast $FileBlast BanqueId $BId Taille] #Nb de bases du subject alignees avec la query sur la taille du subject set Identity [expr $n * 1.0 / $TailleS] if {$Identity < $IdMin} {continue} ### 3- Determination du sens ### set Sens [SensDeLaRegion [AskBlast $FileBlast BanqueId $BId Segment $j Orientation]] set Identity [format "%.2f" [expr $Identity * 100]] set DQ [Mini [AskBlast $FileBlast BanqueId $BId Segment $j DQ] [AskBlast $FileBlast BanqueId $BId Segment $j FQ]] set DS [Mini [AskBlast $FileBlast BanqueId $BId Segment $j DS] [AskBlast $FileBlast BanqueId $BId Segment $j FS]] set FS [Maxi [AskBlast $FileBlast BanqueId $BId Segment $j DS] [AskBlast $FileBlast BanqueId $BId Segment $j FS]] ### 4- Selection des TSS de EPD les plus proches des TSS potentiels initiaux ### # -10000__________________exon1(x)_________________+10000 Seq promotrice potentielle (<-protocole Freddy) # | | | # | * | *= TSS potentiel # | | # 0___________________________________________20000+x Seq promotrice potentielle # | | # | | # | | # -499_______________+100 EPD sequence # | | | # | ** | **= EPD TSS # | | # 0___________________________________________20000+x Seq promotrice potentielle # | | # 9501 10100 # # ==> Localisation EPD seq sur seq promotrice potentielle proche de [9501-10100] #Les seq EPD ou DBTSS sont -499/+100 par rapport au TSS, leur taille est de 600 pb #Dc la position du TSS sur la query d'apres le EPD hit est de:[expr $DQ + 499 - $DS +1] if {$Sens == "+"} { set F 1 set SubjectBorne $DS } else { set F -1 set SubjectBorne $FS } if {$EPDouDBTSS == "EPD"} { set AmontTSS 499 } else {set AmontTSS 1000} set TSSQ [expr $DQ + $F * ($AmontTSS -$SubjectBorne +1)] #Calcul distance entre TSS ini potentiel et TSS suggere par DBTSS #Si DistProm est de 10000, la position du TSS est de 10000+1 set TSSDist [expr -1 * ($TSSPosition - $TSSQ)] lappend LesRegions [list $BId $j $Identity $Sens $TSSQ $TSSDist $n ] lappend TabSegmentToKeep(BId,$BId,LesSegments) $j if {$n > $nMax} {set nMax $n} } } ### Classe EPD ou DBTSS hits par identite decroissantes puis par valeur absolue des dist entre TSS pot ini et TSS EPD ou DBTSS croissantes ### 4- Selection des subjects ayant le max de bases alignees avec la query (n) +/- 5%(nVar) ### #Determination des IdEPD ou DBTSS ayant le max de bases alignees avec la query set Tab(LesBId) {} set LesInfos {} set LesRegions [lsort -index 5 -real -increasing -command CompareLaVADesNombres [lsort -index 2 -real -decreasing $LesRegions]] foreach LaRegion $LesRegions { set BId [lindex $LaRegion 0 ] set j [lindex $LaRegion 1 ] set n [lindex $LaRegion 6 ] if {![info exists Tab($BId,LesSegments)]} { set Tab($BId,LesSegments) {} lappend Tab(LesBId) $BId } lappend Tab($BId,LesSegments) $j set Sens [SensDeLaRegion [AskBlast $FileBlast BanqueId $BId Segment $j Orientation]] set DQ [Mini [AskBlast $FileBlast BanqueId $BId Segment $j DQ] [AskBlast $FileBlast BanqueId $BId Segment $j FQ]] set FQ [Maxi [AskBlast $FileBlast BanqueId $BId Segment $j DQ] [AskBlast $FileBlast BanqueId $BId Segment $j FQ]] set Id [lindex $LaRegion 2] set Sens [lindex $LaRegion 3] set TSSQ [lindex $LaRegion 4] set TSSDist [lindex $LaRegion 5] if {$EPDouDBTSS == "EPD"} { set Orga [AskEPDIdOrga EPDId $BId EPDOrganism] } else { set Orga [AskDBTSS $BId Organism] } lappend LesInfos [list $EPDouDBTSS $ResultType $DQ $FQ $Sens $TSSQ $TSSDist $Id $BId $Orga] } foreach BId [set Tab(LesBId)] { lappend LesSegmentsDesBIdToKeep [concat [list $BId] [set TabSegmentToKeep($BId,LesSegments)]] } ### 5-Reduit le blast initial aux segments des subjects ayant une identite superieure au seuil ### FichierBlastReduit $FileBlast $FileBlastReduit LesSegmentsDesBIdToKeep $LesSegmentsDesBIdToKeep AskBlast unset AskDBTSS unset AskEPDIdOrga unset return $LesInfos } proc LesEVIsDuGN {GN} { #voir aussi ds gscope_retchip de RR GscopeIdsOfGeneName {Gn} global LesEVIsDuGN set GN [string toupper $GN] if {[info exists LesEVIsDuGN($GN)]} { return $LesEVIsDuGN($GN) } if {[info exists LesEVIsDuGN("EstCharge")]} { return {} } set LesEVIsDuGN("EstCharge") 1 foreach Nom [ListeDesPABs] { set g [ExtraitInfo $Nom "ValiGN"] if {$g==""} { continue } set G [string toupper $g] lappend LesEVIsDuGN($G) $Nom lappend LesEVIsDuGN(LISTEDESGNS) $g lappend LesEVIsDuGN(LISTEDESGNS) $G } set LesEVIsDuGN(LISTEDESGNS) [lsort -unique $LesEVIsDuGN(LISTEDESGNS)] return [LesEVIsDuGN $GN] } proc LesEffectifsDesCouplesDeMots {LesPhrases} { set LesCouples {} set i 0 foreach Phrase $LesPhrases { incr i set MotPrecedent "" set LesCouplesDeLaPhrases {} foreach Mot [split $Phrase " "] { if {$MotPrecedent == ""} {set MotPrecedent $Mot;continue} if {![info exists TabTmp($MotPrecedent,$Mot,n)]} { lappend LesCouples [list $MotPrecedent $Mot] set TabTmp($MotPrecedent,$Mot,n) 0 set TabTmp($MotPrecedent,$Mot,nMax) 0 } if {![info exists TabTmp($i,$MotPrecedent,$Mot,n)]} { set TabTmp($i,$MotPrecedent,$Mot,n) 0 lappend LesCouplesDeLaPhrases [list $MotPrecedent $Mot] } incr TabTmp($MotPrecedent,$Mot,nMax) incr TabTmp($i,$MotPrecedent,$Mot,n) set MotPrecedent $Mot } foreach LeCouple $LesCouplesDeLaPhrases { set Mot1 [lindex $LeCouple 0] set Mot2 [lindex $LeCouple 1] set n [set TabTmp($i,$Mot1,$Mot2,n)] set nMax [set TabTmp($Mot1,$Mot2,n)] if {$nMax < $n} {set TabTmp($Mot1,$Mot2,n) $n} } } set LesCouplesEtLeurEffectif {} foreach LeCouple $LesCouples { set Mot1 [lindex $LeCouple 0] set Mot2 [lindex $LeCouple 1] lappend LesCouplesEtLeurEffectif [list $Mot1 $Mot2 [set TabTmp($Mot1,$Mot2,n)] [set TabTmp($Mot1,$Mot2,nMax)]] } return [lsort -integer -index 3 -decreasing $LesCouplesEtLeurEffectif] } proc LesEffectifsDesDistances {{TailleDesPalliers 10}} { global RepertoireDuGenome set FileDistances "$RepertoireDuGenome/xhda/TousLesBilans_PourNuca.dst" if {![file exists $FileDistances]} {return ""} set LesDistances {} foreach Ligne [LesLignesDuFichier $FileDistances] { foreach Distance [split $Ligne " "] { if {$Distance == 0 || $Distance == ""} {continue} set DistanceArrondie [expr round($Distance/$TailleDesPalliers) * $TailleDesPalliers] if {![info exists TabDist($DistanceArrondie)]} { set TabDist($DistanceArrondie) 1 lappend LesDistances $DistanceArrondie } else { incr TabDist($DistanceArrondie) } } } set LesEffectifs {} foreach Distance [lsort -integer $LesDistances] { set Effectif "$Distance\t[set TabDist($Distance)]" lappend LesEffectifs $Effectif } unset TabDist set LesEffectifs [join $LesEffectifs "\n"] return $LesEffectifs } proc LesEffectifsDesMots {LesPhrases} { set LesMots {} set i 0 foreach Phrase $LesPhrases { incr i set LesMotsDeLaPhrase {} foreach Mot [split $Phrase " "] { if {![info exists TabTmp($Mot,n)]} { lappend LesMots $Mot set TabTmp($Mot,n) 0 set TabTmp($Mot,nMax) 0 } if {![info exists TabTmp($i,$Mot,n)]} { set TabTmp($i,$Mot,n) 0 lappend LesMotsDeLaPhrase $Mot } incr TabTmp($Mot,nMax) incr TabTmp($i,$Mot,n) } foreach Mot $LesMotsDeLaPhrase { set n [set TabTmp($i,$Mot,n)] set nMax [set TabTmp($Mot,n)] if {$nMax < $n} {set TabTmp($Mot,n) $n} } } set LesMotsEtLeurEffectif {} foreach Mot $LesMots { lappend LesMotsEtLeurEffectif [list $Mot [set TabTmp($Mot,n)] [set TabTmp($Mot,nMax)]] } return [lsort -integer -index 2 -decreasing $LesMotsEtLeurEffectif] } proc LesElementsSousLaLocalisationDuGenome {FichierMapViewer {ChromosomeOuContig Chromosome} ChromOuCont Debut Fin} { if {[string equal -nocase $ChromosomeOuContig "Contig"]} { set LesInfos [CoordonneesSurChromosome $ChromOuCont [Mini $Debut $Fin] [Maxi $Debut $Fin] "+"] if {$LesInfos == ""} {return} set ChromOuCont [lindex $LesInfos 0] set Debut [lindex $LesInfos 1] set Fin [lindex $LesInfos 2] } set nChromo [NumeroDuChromosome $ChromOuCont] set LesElements {} foreach Element [InterrogeFichierMapViewer $FichierMapViewer Chromosome $nChromo LesElements] { foreach LaLocalisation [InterrogeFichierMapViewer $FichierMapViewer Chromosome $nChromo Element $Element LesLocalisations] { set DebElt [lindex $LaLocalisation 3] set FinElt [lindex $LaLocalisation 4] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $DebElt $FinElt]} {continue} lappend LesElements $LaLocalisation } } return $LesElements } proc LesElusDuBlastPAuChoixPourTous {{Source ""}} { foreach Nom [ListeDesPABs] { set LesElus [LesElusDuBlastPAuChoix $Nom $Source] Espionne $LesElus } } proc LesElusDuBlastPParAuChoix {Nom {Source ""} {Show ""}} { JeMeSignale set Nom [file tail $Nom] set MaxNbElus 200 if {$Show==""} { set Show "DontShow" } if {$Show=="Show"} { set Show 1 } else { set Show 0 } set LesElus [AuChoixDuBlast $Nom "GetList"] if {$Show} { set Fen [AfficheUneSortieBlast $Nom] set LesBIds {} foreach Elu $LesElus { scan $Elu "%s" BId lappend LesBIds $BId } IllumineLaListe $LesBIds $Fen # FaireSavoir "On passe au suivant de $Nom" # destroy $Fen # global KduGraphe ; destroy [winfo parent $KduGraphe] # set Show [OuiOuNon "Do I continue to show the selected accesses ?"] } return $LesElus } proc LesElusDuBlastPParBandelettes {Nom {Source ""} {Show ""} {SeuilExpect ""} {LoinToujours ""}} { #rR On peut forcer a prendre les eloignes. (je ne sais plus pourquoi ...) if {$LoinToujours!=""} { if {[regexp -nocase "NotUsed" $LoinToujours]} { LoinToujours "NotUsed" } else { LoinToujours $LoinToujours "Set" } } if {$SeuilExpect==""} { set SeuilExpect 0.001 } set NomOrigine $Nom set Nom [file tail $Nom] set NombreMiniDeProches 20 set MaxNbElus 200 if {[OnTraiteMS2PH]} { set MaxNbElus 9999 set NombreMiniDeProches 1 } if {$Show==""} { set Show "DontShow" } if {$Show=="Show"} { set Show 1 } else { set Show 0 } set NomOuFichier $Nom if { ! [EstUnPAB $Nom]} { set NomOuFichier $NomOrigine } set LesLBsEtLeursCandidats [LesBandelettesDuBlast $NomOuFichier $Source] set LesElus {} set TousLesProches {} # set DejaBascule 1 set NbElus 0 foreach {LB SesCandidats} $LesLBsEtLeursCandidats { catch {unset PremierSW} catch {unset PremierTout} catch {unset PremierPDB} foreach Candidat $SesCandidats { scan $Candidat "%s %s %s %s %s %s" LogPN BId Access PN DE OX if {[EstUnAccessPDB $BId]} { if { ! [info exists PremierPDB]} { set PremierPDB $BId } continue } if {[EstUnAccessSwissprot $BId]} { if { ! [info exists PremierSW]} { set PremierSW $BId } } if { ! [info exists PremierTout]} { set PremierTout $BId } } set Capital "" if { [info exists PremierSW]} { set Capital $PremierSW } elseif { [info exists PremierTout]} { set Capital $PremierTout } elseif { [info exists PremierPDB]} { set Capital $PremierPDB } set NProchesPrisPourCetteBandelette 0 foreach Candidat $SesCandidats { set OX "" scan $Candidat "%s %s %s %s %s %s" LogPN BId Access PN DE OX lappend LesProches "$BId $Access $PN $OX" # Espionne "$BId $PN" set BonAPrendre [expr [LoinToujours $PN] || [EstUnAccessPDB $BId] || $PN<=$SeuilExpect && [string equal $BId $Capital]] # Espionne "$BId $PN $BonAPrendre [EstUnAccessPDB $BId] " if {$BonAPrendre} { lappend LesElus "$BId $Access $PN $OX" set NbElus [llength $LesElus] if {$NbElus > $MaxNbElus} { break } } if {$PN<=$SeuilExpect} { lappend TousLesProches "$BId $Access $PN $OX" } else { if { ! [info exists DejaBascule] && [llength $LesElus]<$NombreMiniDeProches} { set DejaBascule 1 lappend TousLesProches "$BId $Access $PN $OX" set LesElus $TousLesProches } } } if {$NbElus > $MaxNbElus} { break } } if {$Show} { set Fen [AfficheUneSortieBlast $Nom] set LesBIds {} foreach Elu $LesElus { scan $Elu "%s" BId lappend LesBIds $BId } IllumineLaListe $LesBIds $Fen # FaireSavoir "On passe au suivant de $Nom" # destroy $Fen # global KduGraphe ; destroy [winfo parent $KduGraphe] # set Show [OuiOuNon "Do I continue to show the selected accesses ?"] } return $LesElus } proc LesElusDuBlastPParBandelettesPourTous {{Source ""}} { foreach Nom [ListeDesPABs] { set LesElus [LesElusDuBlastPParBandelettes $Nom $Source] Espionne $LesElus } } proc LesElusDuBlastPParMounir {Nom {Source ""} {Show ""}} { JeMeSignale set Nom [file tail $Nom] set MaxNbElus 200 if {$Show==""} { set Show "DontShow" } if {$Show=="Show"} { set Show 1 } else { set Show 0 } set LesElus [MounirDuBlast $Nom "GetList"] if {$Show} { set Fen [AfficheUneSortieBlast $Nom] set LesBIds {} foreach Elu $LesElus { scan $Elu "%s" BId lappend LesBIds $BId } IllumineLaListe $LesBIds $Fen # FaireSavoir "On passe au suivant de $Nom" # destroy $Fen # global KduGraphe ; destroy [winfo parent $KduGraphe] # set Show [OuiOuNon "Do I continue to show the selected accesses ?"] } return $LesElus } proc LesElusDuBlastPParMounirPourTous {{Source ""}} { foreach Nom [ListeDesPABs] { set LesElus [LesElusDuBlastPParMounir $Nom $Source] Espionne $LesElus } } proc LesEmbranchementsGO {Type GO} { global nEmbranchements TabLesEmbranchementsGO Tab $Type $GO if {![info exists nEmbranchements]} {return {}} set LesEmbranchementsOntologiques {} for {set i 1} {$i <= $nEmbranchements} {incr i} {lappend LesEmbranchementsOntologiques [set Tab($i,LEmbranchement)]} if {[info exists Tab ]} {unset Tab } if {[info exists nEmbranchements]} {unset nEmbranchements} return $LesEmbranchementsOntologiques } proc LesEmbranchementsOntologiques {Type GO} { global nEmbranchements TabLesEmbranchementsOntologiques Tab $Type $GO if {![info exists nEmbranchements]} {return {}} set LesEmbranchementsOntologiques {} for {set i 1} {$i <= $nEmbranchements} {incr i} {lappend LesEmbranchementsOntologiques [set Tab($i,LEmbranchement)]} if {[info exists Tab ]} {unset Tab } if {[info exists nEmbranchements]} {unset nEmbranchements} return $LesEmbranchementsOntologiques } proc LesEndroitsDesDiff {la lb} { if {[llength $la] > [llength $lb]} { set a $la ; set b $lb } else { set a $lb ; set b $la } set lr {} set i 0 ; set j 0 ; set n 0 set decal 0 while {$i < [llength $a]} { set e [lindex $a $i] set f [lindex $b $j] if {$e == $f} { incr i ; incr j if {$decal} { lappend lr [list $r $n] } set n 0 set decal 0 } else { if {! $decal} { if {$i == 0} { set r "" } else { set r [lindex $a [expr {$i-1}]] } } set decal 1 incr i incr n } } if {$decal} { lappend lr [list $r $n] } return $lr } proc LesEntetesChevronneesDuBlast {Page {GetWhat ""} {Titre ""}} { if { ! [regexp "\n" $Page]} { set Fichier $Page if {[EstUnPAB $Fichier]} { if {[FileAbsent $Fichier]} { set Fichier [GscopeFile $Fichier "blastp"] } if {[FileAbsent $Fichier]} { set Fichier [GscopeFile $Fichier "blastn"] } } if {[FileAbsent $Fichier]} { return "" } set Page [ContenuDuFichier $Fichier] } if {$GetWhat==""} { set GetWhat "GetHeaders" } set OnAttendChevron 1 set OnAttendFinEntete 0 set OnAFiniLePremier 0 foreach Ligne [split $Page "\n"] { if {$OnAttendChevron && [regexp {^>} $Ligne]} { set Entete $Ligne set OnAttendChevron 0 set OnAttendFinEntete 1 continue } if {$OnAttendFinEntete} { if {[regexp {^ {10}Length =} $Ligne]} { set OnAttendFinEntete 0 set OnAttendChevron 1 regsub -all { +} $Entete " " Entete set OnAFiniLePremier 0 } else { append Entete " $Ligne" } continue } if { ! $OnAFiniLePremier && [regexp {^ Score = } $Ligne]} { set Expect [PNApres "Expect = " dans $Ligne] lappend LesScoreExpect $Ligne } if { ! $OnAFiniLePremier && [regexp {^ Identities = } $Ligne]} { lappend LesIdentities $Ligne lappend LesEntetes "[string trim $Entete] Expect=$Expect" set OnAFiniLePremier 1 } } if {$GetWhat=="GetHeaders"} { return $LesEntetes } if {$GetWhat=="GetScoreExpect"} { return $LesScoreExpect } if {$GetWhat=="GetIdentities"} { return $LesIdentities } if {$GetWhat=="GetAll"} { return [list $LesEntetes $LesScoreExpect $LesIdentities]} if {$Titre==""} { set Titre "Headers" } return [AfficheVariable [join $LesEntetes "\n"] "AvecFetch" $Titre] } proc LesEponineSelectedPourPromAn {FileContigTFA {TSSPosition 10001}} { AskEponine unset set LesInfos {} set ResultType "PromoterAndTSS" set FileOUT "$FileContigTFA.Eponine" Eponine $FileContigTFA $FileOUT foreach Eponine [AskEponine $FileOUT LesEponines] { set Debut [AskEponine $FileOUT n $Eponine D] set Fin [AskEponine $FileOUT n $Eponine F] set Sens [AskEponine $FileOUT n $Eponine Sens] set TSSLoc $Debut set TSSDist [expr -1 * ($TSSPosition - $Debut) ] set Identity [AskEponine $FileOUT n $Eponine Score] lappend LesInfos [list "Eponine" $ResultType $Debut $Fin $Sens $TSSLoc $TSSDist $Identity "Eponine" ""] } AskEponine unset return [lsort -index 6 -real -command CompareLaVADesNombres $LesInfos] } proc LesEtatsDesVEs {} { return [list Cloned Expression_tested Soluble Insoluble Purified Crystallization Crystal Structure Stopped] } proc LesExpsRetinobase {} { CanalSqlBioArrayBase set Ligne "pk_experiment;description;publication;authors;abstract;pubmedid;shortdescription;name;sample_preparation" lappend LesLignes $Ligne foreach {PkEx Des Pub Au Ab Pu SDes Name SaPre} [SqlExec "select pk_experiment,description,publication,authors,abstract,pubmedid,shortdescription,name,sample_preparation from retinobase3.experiment order by pk_experiment;" "GetList"] { set Ligne "$PkEx;$Des;$Pub;$Au;$Ab;$Pu;$SDes;$Name;$SaPre" lappend LesLignes $Ligne } CanalSqlDisconnect Espionne $LesLignes SauveLesLignes $LesLignes dans "/home/poidevin/ordi/Transcriptomique/LesExpsRetinobase.csv" } proc LesFamillesDARPs {} { Wup "Permet de retourner les noms des familles d ARPs" Wup "On aurai pu utiliser InterrogeLesInfosDesARPs" set RepARP "[RepARPAnno]" set RepBanque "$RepARP/ARP_BLAST" #On recupere les differentes banques BLAST des ARPs set LesB "" set LesBanques_tmp [glob -nocomplain -directory "$RepBanque/" "*.tfa"] foreach Banque $LesBanques_tmp { set Banque [file tail $Banque] regsub -all {.[a-z]{2,3}$} $Banque "" Banque lappend LesB $Banque } #On les ordonne correctement ARP1 a ARP10 set Last "" set LesBanques "" set OnActin 0 foreach B $LesB { if { [regexp -nocase "ARP10" $B]} { set Last $B continue } elseif {[regexp -nocase "ARP11" $B]} { set RealLast $B continue } elseif {[regexp -nocase "actin" $B]} { set OnActin 1 set LesBanques [linsert $LesBanques 0 $B] } elseif {[regexp -nocase "orphans" $B]} { if {$OnActin} { set LesBanques [linsert $LesBanques 1 $B] } else { set LesBanques [linsert $LesBanques 0 $B] } } else { lappend LesBanques $B } } if {$Last != ""} {lappend LesBanques $Last} if {$RealLast != ""} {lappend LesBanques $RealLast} return $LesBanques } proc LesFantomes {} { foreach Nom [ListeDesPABs] { if { ! [Fantome $Nom]} { continue } Espionne "$Nom [ExtraitInfo $Nom Fantome]" lappend LesFantomes $Nom } return $LesFantomes } proc LesFantomesEnFrameshift {} { foreach Nom [ListeDesPABs] { if { ! [Fantome $Nom]} { continue } if { ! [regexp "FS ok" [ExtraitInfo $Nom "EP:"]]} { continue } Informe $Nom } exit } proc LesFastas {{User ""}} { set MesProjets [LesProjetsDe "$User"] foreach Projet $MesProjets { set Existe($Projet) 1 } foreach Rep [glob /genomics/g*/*] { if { ! [file readable $Rep]} {continue} set MesFastas [glob -nocomplain $Rep/*.fasta] if {$MesFastas=={}} { continue } if {[llength $MesFastas] < 1 } { Espionne $MesFastas } set Fasta [lindex $MesFastas 0] set RepDuG [file tail [file dirname $Fasta]] if {![info exists Existe($RepDuG)]} { continue } lappend LesFastas $Fasta } return $LesFastas } proc LesFeaturesDeLAccess {Access} { return [LesFeaturesDeLAccess_PageInfo [PageInfo $Access protein]] } proc LesFeaturesDeLAccess_PageInfo {PageInfo} { if {$PageInfo == ""} {return} set Feature "" set LesFeatures {} foreach Ligne [split $PageInfo "\n"] { if {$Ligne == ""} {continue} if {![regexp {^FT } $Ligne]} {continue} set LigneNew $Ligne while {[regexp " " $LigneNew]} {regsub -all " " $LigneNew " " LigneNew} regsub {\.$} $LigneNew "" LigneNew set LaLigne [split $LigneNew " "] if {[regexp {^FT } $Ligne]} { append Feature "[join [lrange $LaLigne 1 end] " "]" continue } if {$Feature != "" && [info exists Debut] && [info exists Fin]} { if {![regexp {[^0-9<>]} $Debut] && ![regexp {[^0-9<>]} $Fin]} { regsub -all "<|>" $Debut "" Debut regsub -all "<|>" $Fin "" Fin lappend LesFeatures [list FEATURE $Type [string trim $Feature] $Debut $Fin] } } set Type [lindex $LaLigne 1] set Debut [lindex $LaLigne 2] set Fin [lindex $LaLigne 3] set Feature [string trim [join [lrange $LaLigne 4 end] " "]] if {$Feature == ""} {set Feature " "} } if {$Feature != "" && [info exists Debut] && [info exists Fin]} { if {![regexp {[^0-9]} $Debut] && ![regexp {[^0-9]} $Fin]} { lappend LesFeatures [list FEATURE $Type [string trim $Feature] $Debut $Fin] } } return $LesFeatures } proc LesFeaturesUtilisees {f e} { global LFeatCourantes if {! [info exists LFeatCourantes]} { set LFeatCourantes [LesBoutonsEnfonces] } if {$e} { set LFeatCourantes [linsert $LFeatCourantes 0 $f] } else { set i [lsearch $LFeatCourantes $f] set LFeatCourantes [lreplace $LFeatCourantes $i $i] } set LFeatCourantes [lunique $LFeatCourantes] return $LFeatCourantes } proc LesFeuillesDuSousArbre {t n} { set nf 0 foreach c [$t children -all $n] { incr nf [$t isleaf $c] } return $nf } proc LesFichiers2GO {} { return [glob -nocomplain "[GODBDir]/*2go"] } proc LesFichiersBlastNsDeRefSeq_Design {} { Wup "Design de RefSeq complet, environ 19200" Wup "Pour faire les blastn et les masked tous d un seul coup" set DataBase "/blast/rshuman.nsq" set Dir "[RepertoireDuGenome]/Probes/RefSeq_TFA" set LesQuerys [glob -nocomplain -directory $Dir "NM*"] foreach Query $LesQuerys { set Dir "[RepertoireDuGenome]/Probes/RefSeq_Design" set NMDIR [LeRepertoireDeRefSeq [file tail $Query]] set Dir "${Dir}/${NMDIR}" if {[file exists "${Dir}/[file tail $Query].blastn"]} { Espionne "${Dir}/${NMDIR}/[file tail $Query].blastn existe deja" continue } LesParametresDuDesign Query $Query "Positionne" LesParametresDuDesign DataBase $DataBase "Positionne" LesParametresDuDesign WorkingDir $Dir "Positionne" LesParametresParDefaut Oligo_BlastN_PourTous } return "" } proc LesFichiersDe {Rep {RegExp ""}} { if {$RegExp==""} { set RegExp "*" } regsub -all "@" $RegExp "*" RegExp if { ! [regexp "^/" $Rep]} { set Rep "[RepertoireDuGenome]/$Rep" } return [glob -nocomplain "$Rep/$RegExp"] } proc LesFichiersDeBalibase {} { set baldir /maison/moumou/Balibase3-luc/bb3_release set Ldir [glob -type d $baldir/RV*] set Lout [list] foreach dir $Ldir { set Lf [glob $dir/*.xml] foreach f $Lf { if {! [regexp {\_luc|BBS[0-9]} $f]} { lappend Lout $f } } } return $Lout } proc LesFichiersDeType {{Type ""} {Rep ""} {GetAll ""}} { if {$GetAll=="GetAll"} { set GetAll 1 } else { set GetAll 0 } # set TypeBeton(Oligo) 1 set TypeBeton(Signaux) 1 set TypeBeton(pDONR) 1 set TypeBeton(pDEST) 1 set SpecifDesTypes(All) "" set SpecifDesTypes(Fusion) "" set SpecifDesTypes(Rec2) "" set SpecifDesTypes(Rec1) "" set SpecifDesTypes(Ppcr) "" set SpecifDesTypes(Oligo) ".tfa" set SpecifDesTypes(Header) "header*" set SpecifDesTypes(Signaux) "signaux" set SpecifDesTypes(Matrice) "" set SpecifDesTypes(Construction) "*.tfa" set SpecifDesTypes(pDONR) "p*.tfa" set SpecifDesTypes(pDEST) "p*.tfa" set RepertoireDesTypes(All) "./" set RepertoireDesTypes(Fusion) "[RepertoireDuGenome]/fusion" set RepertoireDesTypes(Rec2) "[RepertoireDuGenome]/rec2" set RepertoireDesTypes(Rec1) "[RepertoireDuGenome]/rec1" set RepertoireDesTypes(Ppcr) "[RepertoireDuGenome]/ppcr_virtuels" set RepertoireDesTypes(Oligo) "[RepertoireDuGenome]/oligos" set RepertoireDesTypes(Header) "[GscopeEtc]" set RepertoireDesTypes(Signaux) "[RepertoireDuGenome]/signaux" set RepertoireDesTypes(Matrice) "[RepertoireDuGenome]/matrices" set RepertoireDesTypes(Construction) "[RepertoireDuGenome]/constructions" set RepertoireDesTypes(pDONR) "[RepertoireDuGenome]/vecteurs/pDONR" set RepertoireDesTypes(pDEST) "[RepertoireDuGenome]/vecteurs/pDEST" if {[info exists SpecifDesTypes($Type)]} { set Specif [set SpecifDesTypes($Type)] } else { set Specif $Type } if {$Rep==""} { if {[info exists RepertoireDesTypes($Type)]} { set Rep [set RepertoireDesTypes($Type)] } else { set Rep $Type } } set LesPossibles {} if { ! [info exists TypeBeton($Type)] && $SpecifDesTypes($Type)!=""} { set Ici [pwd] set LesLocaux [glob -nocomplain -type {f l} "$Ici/*$Specif*"] set LesLocaux2 [glob -nocomplain -type {f l} "$Ici/*/*$Specif*"] LConcat LesPossibles $LesLocaux LConcat LesPossibles $LesLocaux2 } set LesCommuns [glob -nocomplain -type {f l} "$Rep/*$Specif*"] set LesCommuns2 [glob -nocomplain -type {f l} "$Rep/*/*$Specif*"] LConcat LesPossibles $LesCommuns LConcat LesPossibles $LesCommuns2 set LesPossiblesTmp [lsort -unique $LesPossibles] set LesPossibles {} foreach Possi $LesPossiblesTmp { if {[regexp "~$" $Possi]} { continue } lappend LesPossibles $Possi } if {$GetAll} { return $LesPossibles } set LesBons {} while {1} { set TexteType $Type if {$Type=="All"} { set TexteType "file" } set LesBons [MorceauxChoisisAndMore $LesPossibles $LesBons "Please select a $TexteType in the left window and press '--->'\n Reorder with 'Up' and 'Down' if necessary.\n Press 'More' if you want to add your own file."] if {$LesBons=={} && [OuiOuNon "Do You want an empty list ?"]} { return {} } if {$LesBons=={} && [OuiOuNon "Do You want to select your own files ?"] || [lindex $LesBons end]=="MorePlease"} { set Perso [ButineArborescence "All" "."] if {$Perso!=""} { lappend LesPossibles $Perso } continue } elseif {[lindex $LesBons end]=="Selection"} { FaireLire "Enter a regular expression to select some of these files" set ExpReg [Entre "YOURTEXT"] set LesNouveauxPossibles {} foreach Possi $LesPossibles { if { ! [regexp $ExpReg $Possi]} { continue } lappend LesNouveauxPossibles $Possi } set LesPossibles $LesNouveauxPossibles continue } else { break } } set LesBonsBons {} foreach Bon $LesBons { set Mot "" scan $Bon "%s" Mot if {$Mot==""} { continue } lappend LesBonsBons $Mot } return $LesBonsBons } proc LesFichiersGO {} { set LesFichiersGO {} foreach Type [LesTypesGO] {lappend LesFichiersGO "[GODBDir]/$Type.ontology"} return $LesFichiersGO } proc LesFichiersMasquesDeRefSeq_Design {} { Wup "Design de RefSeq complet, environ 19200" Wup "Pour faire les masked tous d un seul coup" set DataBase "/blast/rshuman.nsq" set Dir "[RepertoireDuGenome]/Probes/RefSeq_TFA" set Query [glob -nocomplain -directory $Dir "NM*"] foreach Query $LesQuerys { set Dir "[RepertoireDuGenome]/Probes/RefSeq_Design" set NMDIR [LeRepertoireDeRefSeq [file tail $Query]] set Dir "${Dir}/${NMDIR}" LesParametresDuDesign Query $Query "Positionne" LesParametresDuDesign WorkingDir $Dir "Positionne" LesParametresParDefaut LesFichiersMasques_PourTous } return "" } proc LesFichiersMasques_Launcher {{args ""}} { Wup "Pour faire les masked tous d un seul coup" if {$args==""} { AjouteAuLog "CADO4MI usage is query, database, length, range, nboligo and optional parameters" AjouteAuLog [format "%-21s %-12s" " -q (Query)" "Your query sequence in fasta format."] AjouteAuLog [format "%-21s %-12s" " -w (WorkingDir)" "Choose the directory where to save your files"] AjouteAuLog "\nYou need to define at least Query, and WorkingDir" return "" } foreach {Option Valeur} $args { #AjouteAuLog "O $Option V $Valeur" switch -regexp -- $Option { "-q$" {LesParametresDuDesign Query $Valeur "Positionne"} "-w$" {LesParametresDuDesign WorkingDir $Valeur "Positionne"} } } LesFichiersMasques_PourTous return "" } proc LesFichiersMasques_PourTous {} { Wup "Procedure qui lance le Masking pour tous" set Repnuctfa "[RepertoireDuGenome]/nuctfa" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set OK 1 foreach Parametre [list Query WorkingDir] { set $Parametre [LesParametresDuDesign $Parametre "LaValeurMerci"] if {[set $Parametre]==""} {set OK 0;break} } if {$OK!="1"} { AjouteAuLog "Missing parameters.\nMasking all sequences, require 2 parameters query and working directory." return "" } if {$Query=="LaTotale"} {set Query [ListeDesPABs]} if {[llength $Query]=="1"} { set Return [CheckTFAFile $Query] if {$Return!=""} { LesParametresDuDesign Query "Reset" LesParametresDuDesign Query "$Return" "Positionne" } set Query [LesParametresDuDesign Query "LaValeurMerci"] } set Query [split $Query " "] foreach PAB $Query { if {$PAB!="" && [file exists "$PAB"]} { set FichierQuery "$PAB" } elseif {[file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else { AjouteAuLog "No File for the Query ($PAB)" continue } if {[regexp {/} "$PAB"]} {set PAB [file tail $PAB]} #Rq: On a plus le vrai chemin du fichier original set FichierEnCours "$WorkingDir/${PAB}.encours" set FichierMasque "$WorkingDir/${PAB}.masked" set FichierBlast "$WorkingDir/${PAB}.blastn" set FichierLog "$WorkingDir/${PAB}.log" set FichierOligo "$WorkingDir/${PAB}.oligo" set FichierSelection "$WorkingDir/${PAB}.selection" if {[file exists $FichierEnCours]} { AjouteAuLog "$PAB in work" continue } elseif {[file exists $FichierLog] || [file exists $FichierOligo]} { continue } else {Sauve "" dans $FichierEnCours} AjouteAuLog ">>>In charge of $PAB<<<" #On filtre la sequence pour le poly A ##################################### if {![file exists $FichierMasque]} { AjouteAuLog "Masking $PAB" set FichierMasque [PrepareMaSequenceALaRechercheDHomologie $FichierQuery $WorkingDir] } else { AjouteAuLog "Masking already done" } file delete -force $FichierEnCours AjouteAuLog "<><>\n" } return "" } proc LesFichiersQuiCommencentPar {Texte {Rep ""} {Extension ""}} { if {$Rep!="" && [regexp "/$" $Rep]} { append Rep "/" } set LesBons {} foreach Fichier [glob -nocomplain "${Rep}*$Extension"] { if {[regexp -nocase -- "^$Texte" [file tail $Fichier]]} { lappend LesBons $Fichier } } return "$LesBons" } proc LesFichiersUnAUnDuTFAs {Fichier {Rep ""} {Systeme ""}} { if {$Rep==""} { set Rep [tk_chooseDirectory -mustexist 1 -initialdir "[RepertoireDuGenome]/.."] } if {$Systeme=="" && [OuiOuNon "Do You want to use one of my specific naming system ?"]} { set Systeme [ChoixParmi [list "TmpFile" "Use_access" "Use_access_but_remove_signals" "Ask_for_each"]] } foreach Access [LaSequenceDuTFAs $Fichier "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $Fichier $Access] set FicTFA [NommageAuto $Access $Systeme $Rep] set FicTFACree [Sauve $TFA dans $FicTFA] lappend LesFicTFACrees $FicTFACree } return $LesFicTFACrees } proc LesFilsDe {n} { foreach f $::T($n,child) { lappend ::Lfils [LesFilsDe $f] } return $::Lfils } proc LesFirstEFSelectedPourPromAn {FileContigTFA {TSSPosition 10001}} { AskFirstEF unset set LesInfos {} set ResultType "GeneStructure" set FileOUT "$FileContigTFA.FirstEF" FirstEF $FileContigTFA $FileOUT foreach Sens [AskFirstEF $FileOUT LesSens] { foreach Prediction [AskFirstEF $FileOUT Sens $Sens LesPredictions] { foreach Rang [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction LesRangs] { set DProm [Mini [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang DPromoter] [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang FPromoter]] set FProm [Maxi [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang DPromoter] [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang FPromoter]] set DExon [Mini [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang DExon] [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang FExon]] set FExon [Maxi [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang DExon] [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang FExon]] if {$Sens == "+"} { set D $DProm set F $FExon set TSSLoc $DExon } else { set D $DExon set F $FProm set TSSLoc $FExon } set TSSDist [expr -1 * ($TSSPosition -$TSSLoc)] lappend LesInfos [list "FirstEF" $ResultType $D $F $Sens $TSSLoc $TSSDist "" "FirstEF" ""] set DCpG [Mini [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang DCpG] [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang FCpG]] set FCpG [Maxi [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang DCpG] [AskFirstEF $FileOUT Sens $Sens Prediction $Prediction Rang $Rang FCpG]] if {$DCpG == "" || $FCpG == ""} {continue} lappend LesInfos [list "FirstEFCpG" $ResultType $DCpG $FCpG $Sens $TSSLoc $TSSDist "" "CpG" ""] } } } AskFirstEF unset return [lsort -index 6 -real -command CompareLaVADesNombres $LesInfos] } proc LesFrames {} { return [ChoixDesPresents [LesProceduresExistantes]] } proc LesFullBidir {{Organism human} {Database GeCo} {LongueurMoyennePromoteurBidir 2000} {BirdVersion bird}} { # Recupere les gènes bidirectionnels comme suit : # - tous les genes #Et verifie ceux séparés de 1000pb CanalSqlUcscHuman set nbPureGene 0 #---------------------------------------------------------------# set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts -nonewline "$timestamp|LesFullBidir : Loading GeCo " #---------------------------------------------------------------# flush stdout set nbFullBidir 0 set nbTrueBidir 0 foreach {access chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name2 cdsStartStat cdsEndStat exonFrames name mRNA spID spDisplayID geneSymbol refseq protAcc description typegene pseudogene span spanloc confidence reference} [SqlExec "SELECT access, chrom, strand, txStart, txEnd, cdsStart, cdsEnd, exonCount, exonStarts, exonEnds, id, name2, cdsStartStat, cdsEndStat, exonFrames, name, mRNA, spID, spDisplayID, geneSymbol, refseq, protAcc, description, typegene, pseudogene, span, spanloc, confidence, reference FROM ucsc$Organism.$Database WHERE pseudogene='no' ORDER BY chrom, txStart, txEnd" -flatlist] { incr numGene incr nbPureGene lappend listeDesBin $nbPureGene lappend listeDesStarts $txStart lappend listeDesEnds $txEnd #Espionne "$nbPureGene $txStart" set TableauGene($nbPureGene,access) $access set TableauGene($nbPureGene,chrom) $chrom set TableauGene($nbPureGene,txStart) $txStart set TableauGene($nbPureGene,txEnd) $txEnd set TableauGene($nbPureGene,strand) $strand set TableauGene($nbPureGene,cdsStart) $cdsStart set TableauGene($nbPureGene,cdsEnd) $cdsEnd set TableauGene($nbPureGene,exonCount) $exonCount set TableauGene($nbPureGene,exonStarts) $exonStarts set TableauGene($nbPureGene,exonEnds) $exonEnds set TableauGene($nbPureGene,id) $id set TableauGene($nbPureGene,name2) $name2 set TableauGene($nbPureGene,cdsStartStat $cdsStartStat set TableauGene($nbPureGene,cdsEndStat) $cdsEndStat set TableauGene($nbPureGene,exonFrames) $exonFrames set TableauGene($nbPureGene,name) $name set TableauGene($nbPureGene,mRNA) $mRNA set TableauGene($nbPureGene,spID) $spID set TableauGene($nbPureGene,spDisplayID) $spDisplayID set TableauGene($nbPureGene,geneSymbol) $geneSymbol set TableauGene($nbPureGene,refseq) $refseq set TableauGene($nbPureGene,protAcc) $protAcc set TableauGene($nbPureGene,description) $description set TableauGene($nbPureGene,typegene) $typegene set TableauGene($nbPureGene,pseudogene) $pseudogene set TableauGene($nbPureGene,span) $span set TableauGene($nbPureGene,spanloc) $spanloc set TableauGene($nbPureGene,confidence) $confidence set TableauGene($nbPureGene,reference) $reference } #---------------------------------------------------------------# set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "( $nbPureGene genes loaded ) " #---------------------------------------------------------------# set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|LesFullBidir : Selecting on distance criterion ($LongueurMoyennePromoteurBidir bp) " #---------------------------------------------------------------# flush stdout for {set I 1} {$I < $nbPureGene} {incr I} { set currentEnd $TableauGene($I,txEnd) set next [expr $I + 1] set nextStart $TableauGene($next,txStart) set distance [expr $nextStart - $currentEnd] Espionne "$I $distance $currentEnd $nextStart" if {[expr abs($distance)] <= $LongueurMoyennePromoteurBidir} { incr nbFullBidir Espionne "Total: $nbFullBidir" if { $TableauGene($I,strand) == "-" && $TableauGene($next,strand) == "+" } { incr nbTrueBidir Espionne "Vrais : $nbTrueBidir" } } } Espionne "Il y a $nbFullBidir dont $nbTrueBidir vrais" } proc LesGN {FichierAccess FichierSortie} { foreach Ligne [LesLignesDuFichier $FichierAccess] { if {$Ligne==""} {continue} set Access $Ligne lappend LesAccess $Access } set LesAccess [split $LesAccess " "] set LesAccess [join $LesAccess "\|"] set Commande "getz \"\\\[protein-acc:$LesAccess\\\]\" \-vf gen" set GetzOut [eval exec $Commande] AppendAuFichier $FichierSortie $GetzOut } proc LesGNsDeLaFicheEMBL {AcOuId} { package require textutil set fiche [BirdEntry $AcOuId] if {$fiche eq ""} {error "$AcOuId: Fiche non trouvée."} if {[llength $fiche] > 1} {error "$AcOuId: Plusieurs fiches trouvées."} set fiche [lindex $fiche 0] set ligneGN "" foreach ligne [split $fiche "\n"] { if {[string range $ligne 0 1] eq "GN"} { append ligneGN " [string trim [string range $ligne 2 end]]" } } set lesGNs {} foreach {regMatch GN} [regexp -all -inline {Name=([^;]+);} $ligneGN] {lappend lesGNs $GN} foreach {regMatch Synonyms} [regexp -all -inline {Synonyms=([^;]+);} $ligneGN] { set lesGNs [concat $lesGNs [::textutil::splitx $Synonyms {,\s*}]] } return $lesGNs } proc LesGOAvecCeKeyword {Keyword {ExactlyOrContained Exactly}} { if {[string equal -nocase $ExactlyOrContained "Exactly"]} {set Exact 1} else {set Exact 0} set LesGO {} foreach Type [GODB LesTypes] { foreach GO [GODB Type $Type LesGO] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] foreach Definition [GODB Type $Type GO $GO LesDefinitions] { if {[info exists TabTmp($GO)]} {continue} if {$Exact && [string equal -nocase $Keyword $Definition]} { lappend LesGO $GO set TabTmp($GO) 1 } if {!$Exact && [regexp -nocase $Keyword $Definition]} { lappend LesGO $GO set TabTmp($GO) 1 } } } } foreach Requete [2GO LesRequetes] { if {($Exact && [string equal -nocase $Keyword $Requete]) || (!$Exact && [regexp -nocase $Keyword $Requete])} { foreach GO [2GO $Requete LesLiens] { foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {[info exists TabTmp($GO)]} {continue} lappend LesGO $GO set TabTmp($GO) 1 } } } } return [lsort -unique $LesGO] } proc LesGODeRefDesGO {LesGO} { set LesGODeRef {} foreach GO $LesGO { set GO [string toupper $GO] if {[info exists TabTmp]} {unset TabTmp} foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {[info exists TabTmp($GO)]} {continue} set TabTmp($GO) 1 lappend LesGODeRef $GO } } return $LesGODeRef } proc LesGOsDuFichierXML {Fichier} { set T [ContenuDuFichier $Fichier] while 1 { set SL [ValeurDeLaBalise "start_list" T] while 1 { set GO [ValeurDeLaBalise "text" SL] if {$GO==""} { break } if {[info exists DejaVu($GO)]} { continue } set DejaVu($GO) 1 lappend LesGOs $GO } if {$SL==""} { break } } return $LesGOs } proc LesGbManquants {} { foreach I [RetChip ListOf Index] { set GB [RetChip $I "DNA_acc"] if {$GB == ""} { continue } if { [regexp -nocase {^[A-Z]+[0-9]+$} $GB] } { set GBSt [GbEnStock $GB] if {$GBSt != ""} {continue} else { puts "la ligne $I a un GB=$GB qu'on ne trouve pas" } } } } proc LesGenScanSelectedPourPromAn {FileContigTFA {TSSPosition 10001}} { set LesInfos {} set FileOUT "$FileContigTFA.GenScan" GenScanExec $FileContigTFA $FileOUT set ResultType "GeneStructure" foreach Protein [lsort [DecortiqueGenScan All All Numbers [ContenuDuFichier $FileOUT]]] { foreach Exon [lsort [DecortiqueGenScan $Protein All Numbers]] { set Debut [DecortiqueGenScan $Protein $Exon Begin ] set Fin [DecortiqueGenScan $Protein $Exon End ] set Sens [DecortiqueGenScan $Protein $Exon Sens ] if {$Sens == "+"} { set TSSLoc [DecortiqueGenScan $Protein All Gauche] } else {set TSSLoc [DecortiqueGenScan $Protein All Droite]} set TSSDist [expr -1 * ($TSSPosition - $TSSLoc) ] set Identity [DecortiqueGenScan $Protein $Exon Proba ] set Id $Protein.$Exon set Organism "" set Nature [DecortiqueGenScan $Protein $Exon Nature] lappend LesInfos [list "GenScan" $ResultType $Debut $Fin $Sens $TSSLoc $TSSDist $Identity $Id $Organism $Nature] } } return [lsort -index 6 -real -command CompareLaVADesNombres $LesInfos] } proc LesGeneName {Nom FileMSF FileClust {IdDesProtId 0.98} {NorMDMin 0.5}} { if {![file exists $FileMSF]} {return} if {[AskMSF $FileMSF $Nom] != ""} { set Query $Nom } elseif {[AskMSF $FileMSF "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" } else { return [list [list $Nom Nothing]] } set LesAccess [LesProteinesProchesDeLaProteineDeRef $Query $FileMSF $FileClust $IdDesProtId "AvecCluster" $NorMDMin] AskLesPagesInfos load $LesAccess protein set LeTexte {} foreach Access $LesAccess { if {[EstUnAccessPDB $Access]} {continue} set Page [AskLesPagesInfos ask $Access] if {$Page == "" } {continue} if {$Access == $Query } {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] foreach GeneName [LesGeneNameDeLAccess_PageInfo $Page] { foreach Orga $LesOrgas { lappend LeTexte [list $Nom $Access $Orga $GeneName] } } } AskLesPagesInfos unset if {$LeTexte == {}} {return [list [list $Nom Nothing]]} return $LeTexte } proc LesGeneNameDeLAccess {Access} { return [LesGeneNameDeLAccess_PageInfo [PageInfo $Access protein gen]] } proc LesGeneNameDeLAccess_PageInfo {PageInfo} { set LesGeneName {} set GdeLigne "" foreach Ligne [split $PageInfo "\n"] { if {![regexp -nocase {^GN } $Ligne tmp]} {continue} regsub {^GN[ ]+} $Ligne "" Ligne append GdeLigne [string trim $Ligne] } regsub -all {[ ]*;[ ]*} $GdeLigne ";" GdeLigne regsub -all {[ ]*,[ ]*} $GdeLigne "," GdeLigne regsub -all {/|\\} $GdeLigne "," GdeLigne foreach Type [split $GdeLigne ";"] { if {![regexp {^Name=|^Synonyms=} $Type tmp]} {continue} regsub $tmp $Type "" Type foreach GN [split $Type ","] { set GN [string toupper [string trim $GN]] if {$GN == "" || [regexp {[0-9]+RIK$|^[A-Z]+:|^KIAA|^DKFZ} $GN]} {continue} lappend LesGeneName $GN } } return $LesGeneName } proc LesGenomesComplets {} { global RepertoireDuGenome global LesGenomesComplets global Glossaire if {[info exists LesGenomesComplets]} { return $LesGenomesComplets } set FichierLesGenomesComplets "[RepertoireDuGenome]/fiches/lesgenomescomplets" if {[file exists $FichierLesGenomesComplets]} { set LesGenomesComplets {} foreach Ligne [LesLignesDuFichier $FichierLesGenomesComplets] { set Genre "" set Espece "" scan $Ligne "%s %s" Genre Espece if {$Espece==""} { continue } lappend LesGenomesComplets "$Genre $Espece" } return $LesGenomesComplets } if { ! [file exists "[RepertoireDuGenome]/fiches"]} { file mkdir "[RepertoireDuGenome]/fiches" } catch { if {[file type $FichierLesGenomesComplets]=="link"} { file delete -force $FichierLesGenomesComplets } } set FichierLesGenomesCompletsDefaut "[GscopeEtc]/gscope_lesgenomescomplets" if {[file exists $FichierLesGenomesCompletsDefaut]} { if { 1 || [OuiOuNon "I need the file with all complete genomes.\n Can I copy $FichierLesGenomesCompletsDefaut ?"]} { if { [catch {file copy $FichierLesGenomesCompletsDefaut $FichierLesGenomesComplets}]} { return {} } return [LesGenomesComplets] } } FaireLire "I need the file of all complete genomes\n I will ask You to select a file\n OR\n You can copy or link it from an other directory to\n $FichierLesGenomesComplets\n (You can do it before Acknowledge)" if { ! [file exists $FichierLesGenomesComplets]} { set Ailleurs [ButineArborescence "All" "$RepertoireDuGenome/../lesgenomescomplets"] if {$Ailleurs!=""} { if {[OuiOuNon "Ok to copy\n $Ailleurs\nto\n $FichierLesGenomesComplets\n?"]} { File copy $Ailleurs $FichierLesGenomesComplets } else { if {[OuiOuNon "Do I exit ?"]} { exit } } } } return [LesGenomesComplets] } proc LesGenomesCompletsAuFormat {{Format Court}} { foreach Organisme [LesGenomesComplets] { lappend LesGCF [Glossaire $Organisme $Format] } return $LesGCF } proc LesGenomesCompletsBizarres {{Quoi ""}} { if {$Quoi==""} { set Quoi [ChoixParmi [list "Bizarres" "Nouveaux" "Inconnus"]] if {$Quoi==""} { return {} } } set LesBizarres {} set LesNouveaux {} set LesInconnus {} foreach O [LesGenomesComplets] { set G [Glossaire $O Complet] if {$G==$O} { continue } set T [Tax $O "Name"] if {$T==$O} { lappend LesBizarres "New organism : $O" lappend LesNouveaux $O } if {$T=="" || [regexp -nocase "Error" $T] } { lappend LesBizarres "Wrong organism : $O" lappend LesInconnus $O } } if {$Quoi=="Bizarres"} { return $LesBizarres } if {$Quoi=="Nouveaux"} { return $LesNouveaux } if {$Quoi=="Inconnus"} { return $LesInconnus } return $LesBizarres } proc LesGenomesCompletsPossibles {{Format Court}} { Wup "Is obsolete" return [LesGenomesCompletsAuFormat $Format] } proc LesGenomesCompletsPourGlossaire {} { global Glossaire Wup "To run faster for the most used orgs" foreach G [LesGenomesComplets] { regsub " " $G "_" G set Court [Glossaire $G Court] set Glossaire($Court,Court) $Court set Glossaire($Court,Complet) [Glossaire $G Complet] set Glossaire($Court,COMPLET) [Glossaire $G COMPLET] set Glossaire($Court,Demi) [Glossaire $G Demi] set Glossaire($Court,Tout) [Glossaire $G Tout] } } proc LesGenomesDansLeBonOrdre {{Ordre BAE} {QueVeutOn ""}} { global LesGenomesDansLeBonOrdre if {$Ordre=="OC"} { set QueVeutOn $Ordre ; set Ordre "BAE" } Wup "If QueVeutOn is OC it returns the OCs list. (Works only for BAE, not for Original)" if {$QueVeutOn=="" && [info exists LesGenomesDansLeBonOrdre($Ordre)]} { return [set LesGenomesDansLeBonOrdre($Ordre)] } if { $QueVeutOn!=""} { if { ! [info exists LesGenomesDansLeBonOrdre($Ordre,$QueVeutOn)]} { LesGenomesDansLeBonOrdre $Ordre } return [set LesGenomesDansLeBonOrdre($Ordre,$QueVeutOn)] } set LesGenomes [LesGenomesComplets] if {$Ordre=="Original"} { set LesGenomesDansLeBonOrdre($Ordre) $LesGenomes return $LesGenomes } if {$Ordre=="Alpha"} { return [lsort $LesGenomes] } foreach Genome $LesGenomes { set OS [Glossaire $Genome Complet] if {[info exists DejaVu($OS)]} { FaireLire "$OS\n is the organism of the genome $Genome\n but\n is also the organism of the genome [set GenomeDuOS($OS)] It can be a source of problems ..." } set DejaVu($OS) 1 set OC [PhylumDuGenome $OS OC] set OSduGenome($Genome) $OS set OCduGenome($Genome) $OC set GenomeDuOS($OS) $Genome set OCaTrier $OC if {$Ordre=="BAE"} { regsub -nocase "^Bacteria" $OCaTrier "2_Bacteria" OCaTrier regsub -nocase "^Archaea" $OCaTrier "4_Archaea" OCaTrier regsub -nocase "^Eukaryota" $OCaTrier "6_Eukaryota" OCaTrier regsub -nocase "^Virus" $OCaTrier "9_Virus" OCaTrier } if {$Ordre=="FamiliarBAE"} { regsub -nocase "^Bacteria" $OCaTrier "2_Bacteria" OCaTrier regsub -nocase "^Archaea" $OCaTrier "4_Archaea" OCaTrier regsub -nocase "^Eukaryota" $OCaTrier "6_Eukaryota" OCaTrier regsub -nocase "^Virus" $OCaTrier "9_Virus" OCaTrier if {[FamiliarOrganism $OS]} { set OCaTrier "0_$OCaTrier" } } if {$Ordre=="SampledBAE"} { regsub -nocase "^Bacteria" $OCaTrier "2_Bacteria" OCaTrier regsub -nocase "^Archaea" $OCaTrier "4_Archaea" OCaTrier regsub -nocase "^Eukaryota" $OCaTrier "6_Eukaryota" OCaTrier regsub -nocase "^Virus" $OCaTrier "9_Virus" OCaTrier if {[SampledOrganism $OS]} { set OCaTrier "0_$OCaTrier" } } lappend LesOSOCs [list $OCaTrier $OS] } set LesOSOCsTries [lsort -index 0 $LesOSOCs] foreach LeOCOS $LesOSOCsTries { ScanLaListe $LeOCOS OCaTrier OS set Genome [set GenomeDuOS($OS)] lappend LesGenomesTries $Genome lappend LesOCDesGenomesTries [set OCduGenome($Genome)] } set LesGenomesDansLeBonOrdre($Ordre) $LesGenomesTries set LesGenomesDansLeBonOrdre($Ordre,OC) $LesOCDesGenomesTries return $LesGenomesTries } proc LesGenomesEukaryotes {} { global RepertoireDuGenome set File "$RepertoireDuGenome/fiches/lesgenomeseukaryotes" if {![file exists $File]} {FichierGenomesEukaryotes} return [LesLignesDuFichier $File] } proc LesGenomesParListe {} { global NotreOS set LGComplets [LesGenomesComplets] set LGCourts [LesGenomesCompletsAuFormat Court] set LesNoms {} foreach UnGLong $LGComplets UnGCourt $LGCourts { if { $UnGLong != $NotreOS } { lappend LesNoms "$UnGCourt $UnGLong" } } return $LesNoms } proc LesGiSsProt {} { set FichierSortieNcbi "/genomics/link/Tau/Dec2008/GSTRdCVF/sortie_ncbi.txt" foreach Ligne [LesLignesDuFichier $FichierSortieNcbi] { if {[regexp {^gi\|} $Ligne ]} { lappend LesGINcbi [lindex [split $Ligne "|"] 1] } } foreach GIInitial [InterrogeListTau ListOf GI] { set trouve 0 foreach GINcbi $LesGINcbi { if {$GIInitial==$GINcbi} { set trouve 1 break } } if {!$trouve} {Espionne "$GIInitial"} } } proc LesGrandesRegionsDeLaQueryDuBlast {FichierBlast {ExpectMax 1e200} {NbSubjectMax 1e200} {IdMin 0.0} {SplitWithGap Yes} {LesBanqueId ""}} { foreach BId $LesBanqueId {set TabSelect($BId) 1} set NbSubject [AskBlast $FichierBlast NbSubject ] set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == "" || $NbSubject == ""} {return} set k 0 set LesGrandesRegions {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlast Subject $i] if {$LesBanqueId != "" && ![info exists TabSelect($BId)]} {continue} set Expect [AskBlast $FichierBlast BanqueId $BId Segment 1 Expect] if {$Expect == ""} {continue} incr k if {$NbSubjectMax < $k } {break} if {$ExpectMax < $Expect} {continue} set NbSegment [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set j 1} {$j <= $NbSegment} {incr j} { set Expect [AskBlast $FichierBlast BanqueId $BId Segment $j Expect] if {$ExpectMax < $Expect} {continue} if {0 < $IdMin} { set Identities [AskBlast $FichierBlast BanqueId $BId Segment $j Identities] scan $Identities "%d/%d" nmRNA nmRNATot set Id [expr $nmRNA*1.0/$nmRNATot] if {$Id < $IdMin} {continue} } set DQ [Mini [AskBlast $FichierBlast BanqueId $BId Segment $j DQ] [AskBlast $FichierBlast BanqueId $BId Segment $j FQ]] set FQ [Maxi [AskBlast $FichierBlast BanqueId $BId Segment $j DQ] [AskBlast $FichierBlast BanqueId $BId Segment $j FQ]] if {$SplitWithGap == "Yes"} { if {$FQ < $DQ} {set FactSensQ -1 } else {set FactSensQ 1 } set AlignLineaire [AskBlast $FichierBlast BanqueId $BId Segment $j AlignLineaire] set LAlignLineaire [split $AlignLineaire "\n"] set Query [lindex $LAlignLineaire 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex $LAlignLineaire 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] if {[info exists Debut]} {unset Debut} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {0 && $AQ == "$BaseFiltree"} { if {[info exists Debut]} { lappend LesGrandesRegions [list $Debut $Fin] unset Debut } set PosIni [expr $PosIni + 1 * $FactSensQ] continue } if {$AS == "-" || $AS == "*" || $AQ == "*"} { if {[info exists Debut]} { lappend LesGrandesRegions [list $Debut $Fin] unset Debut } set PosIni [expr $PosIni + 1 * $FactSensQ] continue } if {$AQ == "-"} { if {[info exists Debut]} { lappend LesGrandesRegions [list $Debut $Fin] unset Debut } continue } if {![info exist Debut]} {set Debut $PosIni} set Fin [expr $PosIni ] set PosIni [expr $PosIni + 1 * $FactSensQ] } if {[info exists Debut]} {lappend LesGrandesRegions [list $Debut $Fin];unset Debut} } else { lappend LesGrandesRegions [list $DQ $FQ] } } } return $LesGrandesRegions } proc LesGrandesRegionsDuBlast {aTabBlast {LesBanqueId All} {SeuilId None} {SplitWithGap Yes}} { upvar $aTabBlast TabBlast if {![info exists TabBlast(NbSubject)]} {return {}} set TypeDeBlast [set TabBlast(TypeDeBlast)] if {$TypeDeBlast == "BLASTN"} {set BaseFiltree "N"} else {set BaseFiltree "X"} set LesGrandesRegions {} if {![info exists TabBlast(NbSubject)]} {return {}} set NbSubject [set TabBlast(NbSubject)] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [set TabBlast($i)] if {$LesBanqueId != "All"} { set EnEstCeUn 0 foreach BIdDeRef $LesBanqueId {if {$BIdDeRef == $BId} {set EnEstCeUn 1;break}} if {!$EnEstCeUn} {continue} } set NbSegment [set TabBlast($BId,NbSegment)] for {set j 1} {$j <= $NbSegment} {incr j} { if {$SeuilId != "None"} { set Identities [set TabBlast($BId,$j,Identities)] scan $Identities "%d/%d" nmRNA nmRNATot set Id [expr $nmRNA*1.0/$nmRNATot] if {$Id < $SeuilId} {continue} } set DQ [Mini [set TabBlast($BId,$j,DQ)] [set TabBlast($BId,$j,FQ)]] set FQ [Maxi [set TabBlast($BId,$j,DQ)] [set TabBlast($BId,$j,FQ)]] if {$SplitWithGap == "Yes"} { if {$FQ < $DQ} {set FactSensQ -1 } else {set FactSensQ 1 } set Query [lindex [split [set TabBlast($BId,$j,AlignLineaire)] "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split [set TabBlast($BId,$j,AlignLineaire)] "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] if {[info exists Debut]} {unset Debut} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {0 && $AQ == "$BaseFiltree"} { if {[info exists Debut]} { lappend LesGrandesRegions [list $Debut $Fin] unset Debut } set PosIni [expr $PosIni + 1 * $FactSensQ] continue } if {$AS == "-" || $AS == "*" || $AQ == "*"} { if {[info exists Debut]} { lappend LesGrandesRegions [list $Debut $Fin] unset Debut } set PosIni [expr $PosIni + 1 * $FactSensQ] continue } if {$AQ == "-"} { if {[info exists Debut]} { lappend LesGrandesRegions [list $Debut $Fin] unset Debut } continue } if {![info exist Debut]} {set Debut $PosIni} set Fin [expr $PosIni ] set PosIni [expr $PosIni + 1 * $FactSensQ] } if {[info exists Debut]} {lappend LesGrandesRegions [list $Debut $Fin];unset Debut} } else { lappend LesGrandesRegions [list $DQ $FQ] } } } return $LesGrandesRegions } proc LesGraphesDeLOligo {K} { Wup "Retourn les tag des graphes disponibles Tm, GC ..." set LesGraphes "" set LesId [$K find withtag "OligoGraph"] foreach Id $LesId { set MesTags "" set index "" set MesTags [$K gettags $Id] set index [lsearch $MesTags "OligoGraph"] lappend LesGraphes [lindex $MesTags [expr $index+1]] } set LesGraphes [lsort -unique $LesGraphes] return $LesGraphes } proc LesGrosManquants {} { foreach Nom [ListeDesPABs] { set FichierMsf "[RepertoireDuGenome]/msf/$Nom" set FichierLeo "[RepertoireDuGenome]/msfLeon/$Nom" set FichierRsf "[RepertoireDuGenome]/macsimRsf/$Nom" set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom" if {[file exists $FichierRsf]} { continue } if { ! [file exists $FichierMsf]} { continue } Espionne "$Nom [file exists $FichierLeo] [file exists $FichierRsf] [file size $FichierMsf]" } exit } proc LesGroup {FileMacsims} { set FileMacsims [TheTrueMacsimsFile $FileMacsims] set fh [open $FileMacsims "r"] dom parse -channel $fh doc close $fh $doc documentElement root foreach seq [$root selectNodes "//sequence"] { set Name [$seq selectNodes "string(./seq-name)"] set Group [$seq selectNodes "string(./seq-info/group)"] Espionne "$Name $Group" } } proc LesGscopecodesAffymetrix {Fichier} { set n 0 set LesGscopeCodes "" foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne $Ligne scan $Ligne "%s" c foreach PAB [ListeDesPABs] { set CodeClone [CodeClone $PAB] if {$c != $CodeClone} { continue } else { #Espionne $PAB incr n lappend LesGscopeCodes "$PAB\n" } } } Espionne "n=$n" return $LesGscopeCodes } proc LesGscopecodesAffymetrixFoldExpr {Fichier} { set n 0 set LesGscopeCodes "" foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne $Ligne scan $Ligne "%s %s" c e foreach PAB [ListeDesPABs] { set CodeClone [CodeClone $PAB] if {$c != $CodeClone} { continue } else { #Espionne $PAB incr n lappend LesGscopeCodes "$PAB\t$e" } } } Espionne "n=$n" return $LesGscopeCodes } proc LesHeadersDeLaBanqueBlast {B {Hr nhr}} { global RepertoireDuGenome Wup "Searches for the correct bank and returns the list of header from the .nhr file" set Loc "$RepertoireDuGenome/banques" set Glo "/catalog/blast" foreach BHr [list "$B.$Hr" "$Loc/$B.$Hr" "$Glo/$B.$Hr" "NotFound"] { if {[file exists $BHr]} { break } } if {$BHr=="NotFound"} { return {} } set Headers [ContenuDuFichier $BHr] regsub -all {(gnl\|BL_ORD_ID\|[0-9]+ +|lcl\|)} $Headers "\n" Headers return [split [string trim $Headers "\n"] "\n"] } proc LesHitsAvecDelta {Nom LesOrganismesInteressants {Seuil ""} {GetWhat ""} {SelectMethod ""} {UseExpect ""}} { if {$UseExpect==""} { set UseExpect "UseExpect" } set UseExp [string equal -nocase "UseExpect" $UseExpect] if {$SelectMethod==""} { set SelectMethod "FirstOnly" } if {$GetWhat==""} { set GetWhat "Show" } if {$Seuil==""} { set Seuil 99999 } if {[regexp -nocase "Best" $SelectMethod]} { set SelectMethode "BestOnly" } if {[regexp -nocase "First" $SelectMethod]} { set SelectMethode "FirstOnly" } if {[regexp -nocase "Ave" $SelectMethod]} { set SelectMethode "AboveAverage" } if {$LesOrganismesInteressants=={}} { return {} } set LesOrgaTrie [LesLignesDuFichier [GscopeFile $Nom "taxobla"]] if {$LesOrgaTrie=={}} { return {} } set LesChoisis {} set PremierTaxId "" foreach Ligne $LesOrgaTrie { #rR je rappelle que taxobla ne contient qu'une fois chaque organisme lassign [split $Ligne "\t"] Expect Score TaxId OS Reste if {$Expect==0.0} { set Expect 1.0e-250 } # if {$Expect >1.0} { set Expect 1.0 } set TaxId [string trim $TaxId] set OS [string trim $OS] set Reste [string trim $Reste] if {[lsearch $LesOrganismesInteressants $TaxId]<0} { continue } if {$PremierTaxId==""} { set PremierTaxId $TaxId } set Expect [string trim $Expect] set Score [string trim $Score] if {$Expect > $Seuil} { break } lappend LesExpects $Expect lappend LesScores $Score lappend LesChoisis "$Expect\t$Score\t$TaxId\t$OS\t$Reste" } if {$LesChoisis=={}} { return "" } if {$UseExp} { set LesValeurs $LesExpects set LesValeurs [FromList $LesValeurs Iterate log10] ;#rR passage en log } else { set LesValeurs $LesScores } lassign [FromList $LesValeurs] MoyenneBidon EcartType Min Max Somme NbValeurs set Moyenne [expr $Somme/[llength $LesOrganismesInteressants]] set LaSortie {} foreach Choisi $LesChoisis { lassign [split $Choisi "\t"] Expect Score TaxId if {$UseExp} { set Valeur $Expect set Valeur [expr log10($Valeur)] ;#rR passage en log } else { set Valeur $Score } set Delta [expr $Valeur-$Moyenne] set HitAvecDelta "$Delta\t$Choisi" if {$SelectMethod=="FirstOnly" && $TaxId!=$PremierTaxId} { continue } ;#rR la on choisit de ne garder que le meilleur dans l'ordre du blast if {$UseExp} { if {$SelectMethod=="BestOnly" && $Delta > -10} { continue } if {$SelectMethod=="AboveAverage" && $Delta > 0} { continue } } else { if {$SelectMethod=="BestOnly" && $Delta > 100} { continue } if {$SelectMethod=="AboveAverage" && $Delta > 0} { continue } } lappend LaSortie $HitAvecDelta } if {[regexp "/" $GetWhat] || [string equal -nocase "Save" $GetWhat]} { set FichierDeltas $GetWhat if {[string equal -nocase "Save" $GetWhat]} { set FichierDeltas [GscopeFile $Nom delta] } return [SauveLesLignes $LaSortie dans $FichierDeltas] } if {[string equal -nocase "GetList" $GetWhat]} { return $LaSortie } if {[string equal -nocase "GetText" $GetWhat]} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie] } 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 LesHitsDuBallast {FichierBallast} { if {![file exists $FichierBallast]} { Espionne "$FichierBallast does not exist" return "" } set F [open $FichierBallast] set SuisJeSurLesHits 0 set LesHits {} while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} if {[regexp -nocase "^Sequences producing High-scoring Segment Pairs" $Ligne]} { set SuisJeSurLesHits 1 continue } if {[regexp "^>" $Ligne]} {set SuisJeSurLesHits 0;break} if {!$SuisJeSurLesHits || [regexp "^\-" $Ligne]} {continue} set SuisJeUneReference 0 if {![regexp "^ " $Ligne]} {set SuisJeUneReference 1} set Ligne [string trim $Ligne] regsub -all "\t" $Ligne " " Ligne while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LaLigne [split $Ligne " "] set Id [string toupper [lindex $LaLigne 0]] set IdCourt $Id regsub {^[^\:]+\:} $Id "" IdCourt if {[EstUnAccessPDB $Id]} {set Access $IdCourt} else {set Access [string toupper [lindex $LaLigne 1]]} if {$SuisJeUneReference} {set Expect [lindex $LaLigne end]} set LesLMS [AskLMS $FichierBallast Access $IdCourt LesLMS] if {$LesLMS != ""} { lappend LesHits [concat [list $IdCourt $Access $Expect] $LesLMS] continue } set LesLMS [AskLMS $FichierBallast Access $Access LesLMS] if {$LesLMS != ""} { lappend LesHits [concat [list $Access $Access $Expect] $LesLMS] continue } lappend LesHits [list $Access $Access $Expect] } close $F return $LesHits } proc LesHitsDuBlast {Fichier {SeuilExpect 0.001} {MaxListe 99999} {Quoi ""}} { DecortiqueBlast $Fichier $SeuilExpect $MaxListe Query lBId lA lDE lProfil lPN set Retour {} set LesBId {} set LesA {} foreach BId $lBId A $lA DE $lDE PN $lPN { lappend LesBId $BId lappend LesA $A lappend Retour [format "%-75s %s" "$BId $A $DE" $PN] } if {[regexp "I" $Quoi]} { return $LesBId } if {[regexp "A" $Quoi]} { return $LesA } return $Retour exit } proc LesHitsDuBlast_FC {FichierBlast {ExpectDeRef 1e200} {NbSubject 1e200}} { set nHits 0 set SuisSurLesHit 0 set i 0 set LignesDesHits {} set F [open $FichierBlast] while {[gets $F Ligne]>=0} { if {[regexp -nocase "Sequences producing significant alignments" $Ligne]} { set SuisSurLesHit 1 continue } if {$SuisSurLesHit} { if {[string equal -nocase "\\\\End of List" $Ligne] } {set SuisSurLesHit 0;break} if {[string first ">" $Ligne] == 0} {set SuisSurLesHit 0;break} } if {!$SuisSurLesHit || ![regexp -nocase {[0-9a-z]} $Ligne]} {continue} lappend LignesDesHits $Ligne } close $F set LignesDesHits [join $LignesDesHits "\n"] regsub -all "\n!" $LignesDesHits "" LignesDesHits set LesHits {} foreach Ligne [split $LignesDesHits "\n"] { set Ligne [string trim $Ligne] while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LaLigne [split $Ligne " "] #Je traite les BId et les access### set BId [lindex $LaLigne 0] set Access [lindex $LaLigne 1] regsub -all {\(|\)} $Access "" Access if {[info exists TabDejaVu($BId)]} {continue} else {set TabDejaVu($BId) 1} if {[EstUnAccessPDB $Access] && [EstUnAccessPDB $BId]} {continue} if {[string equal -nocase $Access "Begin:"]} {set Access $BId} ################## set Expect [lindex $LaLigne end] if {[regexp "^e" $Expect]} {set Expect "1$Expect"} if {$ExpectDeRef < $Expect} {break} incr i if {$NbSubject < $i} {break} #Espionne $LaLigne set Score [lindex $LaLigne end-1] lappend LesHits [list "$BId" "$Access" "$Expect" "$Score"] } return $LesHits } 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 LesHomologiesDuBlastN {Fichier {AvecLaSeq ""} {BanqueBlast ""} {Maniere ""} {Qui ""}} { if {$Maniere==""} { set Maniere "AvecTestOrgaAvecOffset" } set AvecTestOrga [string equal -nocase $Maniere "AvecTestOrga"] set AvecOffset [string equal -nocase $Maniere "AvecOffset"] if {$AvecLaSeq==""} { set AvecLaSeq "SansLaSeq" } set AvecLaSeq [string equal -nocase $AvecLaSeq "AvecLaSeq"] set Nom [file tail $Fichier] set SeuilDuBlastN 0.001 set nSequencesTrouves [DecortiqueBlast $Fichier $SeuilDuBlastN "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN lPartieSegAli] if { $nSequencesTrouves == 0 } { set nCops 0 return {} } if {$Qui=="FirstOnly"} { set Qui [lindex $lBanqueId 0] } set ListeDesHomologues {} set nCops 0 set AttendreFinEntete 0 set FinEntete 0 foreach BanqueId $lBanqueId PN $lPN PartieSegAli $lPartieSegAli { if {$Qui!="" && ! [string equal -nocase $Qui $BanqueId]} { continue } if {$AvecTestOrga} { set Genre "" set Espece "" scan [OffsetEtOrganismeDuFragment $BanqueId $BanqueBlast] "%s %s %s" O Genre Espece set OrgaComplet "$Genre $Espece" set Orga [Glossaire $OrgaComplet Court] } else { set Orga "iinc" } set nCopsDansCetteSequence 0 foreach Ligne $PartieSegAli { if { $AttendreFinEntete } { if { ! [regexp {[0-9a-zA-Z_]} $Ligne] } { set AttendreFinEntete 0 set FinEntete 1 } else { append Entete $Ligne continue } } if {[regexp {^>} $Ligne]} { set Entete $Ligne set AttendreFinEntete 1 } if { $FinEntete } { set FinEntete 0 if {$AvecOffset} { set Offset [OffsetDansEnteteSegAli $Entete $BanqueBlast] } else { set Offset 0 } } if { [regexp "^ Identities =" $Ligne] } { set Identities [StringApres "Identities =" dans $Ligne] set Positives [StringApres "Positives =" dans $Ligne] scan $Identities "%d/%d" nId nTotal scan $Positives "%d/%d" nPo nTotal } if { [regexp "^ Score =" $Ligne] } { if {[info exists Score]} { incr nCops incr nCopsDansCetteSequence if { $AvecLaSeq } { set EtLaSeq "\t$SeqQuery\t$SeqSbjct" } else { set EtLaSeq "" } Wup "Je triche en cachant dans Score le PourcentageIdentite" set PourcentageIdentiteCacheDansScore [format "%5.2f" [expr (100.*$nId)/$nTotal]] set BeauIdentities [format "%14.14s" $Identities] lappend ListeDesHomologues "$Nom\t$nCops\t$nCopsDansCetteSequence\t$BanqueId\t$Orga\t$BeauIdentities\t$Expect\t$DebutQuery\t$FinQuery\t$DebutSbjct\t$FinSbjct$EtLaSeq" unset Score unset Expect unset DebutQuery unset DebutSbjct } set Score [FloatApres "Score =" dans $Ligne] catch {unset Expect} if {[regexp "Expect =" $Ligne]} { set Expect [PNApres "Expect =" dans $Ligne] } if {[regexp {Expect\([0-9]\) =} $Ligne Match]} { set Expect [PNApres $Match dans $Ligne] } if { ! [info exists Expect]} { Warne "$Ligne\nwithout Expect ... I break" catch {unset Score} catch {unset Expect} catch {unset DebutQuery} catch {unset DebutSbjct} break } catch {unset DebutQuery} catch {unset DebutSbjct} if { [expr $Expect > $SeuilDuBlastN]} { catch {unset Score} catch {unset Expect} catch {unset DebutQuery} catch {unset DebutSbjct} break } } if {[regexp "^ Database:" $Ligne] } { break } if {[regexp "^Query:" $Ligne] } { if { ! [info exists DebutQuery]} { set SeqQuery "" set DebutQuery [IntegerApres "Query:" dans $Ligne] } regexp -indices {[0-9]+} $Ligne D set D [lindex $D 1] regexp -indices {[0-9]+} [string range $Ligne [incr D] end] F set F [expr [lindex $F 0]+$D-1] append SeqQuery [string trim [string range $Ligne $D $F]] set FinQuery [IntegerEnFin de $Ligne] } if {[regexp "^Sbjct:" $Ligne] } { if { ! [info exists DebutSbjct]} { set SeqSbjct "" set DebutSbjct [expr [IntegerApres "Sbjct:" dans $Ligne] + $Offset] } regexp -indices {[0-9]+} $Ligne D set D [lindex $D 1] regexp -indices {[0-9]+} [string range $Ligne [incr D] end] F set F [expr [lindex $F 0]+$D-1] append SeqSbjct [string trim [string range $Ligne $D $F]] set FinSbjct [expr [IntegerEnFin de $Ligne] + $Offset] } } if {[info exists Score] && [expr $Expect <= $SeuilDuBlastN] } { incr nCops incr nCopsDansCetteSequence if { $AvecLaSeq } { set EtLaSeq "\t$SeqQuery\t$SeqSbjct" } else { set EtLaSeq "" } Wup "Je triche en cachant dans Score le PourcentageIdentite" set PourcentageIdentiteCacheDansScore [expr (100.*$nId)/$nTotal] lappend ListeDesHomologues "$Nom\t$nCops\t$nCopsDansCetteSequence\t$BanqueId\t$Orga\t$PourcentageIdentiteCacheDansScore\t$Expect\t$DebutQuery\t$FinQuery\t$DebutSbjct\t$FinSbjct$EtLaSeq" } catch {unset Score} catch {unset Expect} catch {unset DebutQuery} catch {unset DebutSbjct} if {$Qui!=""} { break } } return $ListeDesHomologues } proc LesIdDeLaBanqueRelieALAccess {Access de Banque1 dans Banque2} { set Commande "[ProgPathway getz] \"\\\[${Banque1}-acc:$Access\\\] > $Banque2 \"" catch {set Out [eval exec $Commande]} Message set Out [string trim $Out] if {$Out == ""} { set Commande "[ProgPathway getz] \"\\\[${Banque1}-id:$Access\\\] > $Banque2 \"" catch {set Out [eval exec $Commande]} Message if {$Out == ""} {return} } set LesId {} foreach Ligne [split $Out "\n"] { if {$Ligne == ""} {continue} if {[info exists Id]} {unset Id} regsub {^[^:]+:} $Ligne "" Id if {![info exists Id]} {continue} lappend LesId $Id } return $LesId } proc LesIdMappingUniprot {Liste {GetWhat ""} {Field ""}} { if {[llength $Liste]==1 && [file exists $Liste]} { set Liste [LesLignesDuFichier $Liste] } if {$GetWhat==""} { set GetWhat "GetQR" } if {[regexp {[ \,\;\n\r\t]} $Liste]} { set Liste [split $Liste " ,;\n\r\t"] } if {$Field==""} { set Field "ACC" } set LesRecus [IDMapping "ACC+ID" $Field $Liste] foreach Q $Liste R $LesRecus { if {$R==""} { lappend LesR $R } lappend LesQR "$Q:$R" } if {[regexp -nocase "GetR" $GetWhat]} { set Result $LesR } if {[regexp -nocase "GetQR" $GetWhat]} { set Result $LesQR } if {[regexp -nocase "AsTextWithSpace" $GetWhat]} { set Result [join $Result " "] } if {[regexp -nocase "AsTextWithComma" $GetWhat]} { set Result [join $Result ","] } if {[regexp -nocase "AsTextWithNewLine" $GetWhat]} { set Result [join $Result "\n"] } return $Result } proc LesIdSelectParGretta {File} { set LesId {} set F [open $File] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Id [lindex $LaLigne 0] if {$Id == "Accession"} {continue} lappend LesId $Id } close $F return $LesId } proc LesIlotsSansPointDans {Texte} { set Start -1 set LesBornes {} while {[regexp -indices -start $Start {[^\.]+} $Texte Indices]} { scan $Indices "%d %d" D F lappend LesBornes "$D $F" set Start [expr $F+1] } return $LesBornes } proc LesIndexsDesAccess {Ls} { # Rajoute les simples quotes ... # boucle pour avoir les pk dans l'ordre set pkm [MacCourant] foreach acc $Ls { set acc [string map [list "'" "''"] $acc] lappend tmp "'$acc'" } set Na [list] set Na [$::db eval "select sa.pk_seqali from seqali as sa, seqinfo as si, ln_mac_seqali as lms where lms.pk_mac=$pkm and lms.pk_seqali=sa.pk_seqali and sa.pk_seqinfo=si.pk_seqinfo and si.access in ([join $tmp ,]) order by sa.pk_seqali"] return $Na } proc LesIndexsDesSeqnames {Ls} { foreach s $Ls {lappend Ns '[set ::TDesSeqnames($s)]'} return [$::db eval "select pk_seqali from seqali where seqname in ([join $Ns ,])"] } proc LesIndividusClasses {LesIndividus} { return [lsort -integer -decreasing -index 0 $LesIndividus] } proc LesInfosDe {K Quoi} { Wup "Retourne les informations liees au canvas qu on a besoin" global TabCanvas #Espionne "Demande $K $Quoi" if {[info exists TabCanvas($K,$Quoi)]} {return [set TabCanvas($K,$Quoi)]} else {return ""} } proc LesInfosDeBaseDeMaSequence {SeqQuery {Quoi ""}} { Wup "Retourne les informations de bases de la sequence composition en ATGC, les Tms ..." set Fiche "" set AvecSeq 0 set AvecSeqFormate 0 set AvecStatNuc 0 set AvecTm 0 set AvecTaille 0 set LaTotale 0 if {$Quoi==""|| $Quoi=="LaTotale"} {set LaTotale 1} foreach Choix $Quoi { switch $Choix { "AvecSeq" {set AvecSeq 1;set AvecSeqFormate 0} "AvecSeqFormate" {set AvecSeqFormate 1;set AvecSeq 0} "AvecTaille" {set AvecTaille 1} "AvecStatNuc" {set AvecStatNuc 1} "AvecTm" {set AvecTm 1} "default" {set LaTotale 1} } } set TailleQueryNt [string length $SeqQuery] if {$AvecSeq || $LaTotale} { set SeqRes "" lappend SeqRes ">Sequence:" lappend SeqRes "----------" lappend SeqRes "$SeqQuery" lappend Fiche [join $SeqRes "\n"] } if {$AvecSeqFormate} { set SeqRes "" lappend SeqRes ">Sequence:" lappend SeqRes "----------" set MaSeq $SeqQuery while {1} { if {$MaSeq==""} {break} lappend SeqRes [string range $MaSeq 0 79] set MaSeq [string range $MaSeq 80 end] } lappend Fiche [join $SeqRes "\n"] } if {$AvecTaille || $LaTotale} { set TailleRes "" lappend TailleRes ">Length:" lappend TailleRes "--------" lappend TailleRes "$TailleQueryNt nt(s)" lappend Fiche [join $TailleRes "\n"] } if {$AvecStatNuc || $LaTotale} { set nA [NombreDeBaseDe $SeqQuery "A"] set nT [NombreDeBaseDe $SeqQuery "T"] set nG [NombreDeBaseDe $SeqQuery "G"] set nC [NombreDeBaseDe $SeqQuery "C"] set nN [NombreDeBaseDe $SeqQuery "N"] set nAT [expr $nT + $nA] set nGC [expr $nG + $nC] set nPu [expr $nG + $nA] set nPy [expr $nT + $nC] set PercentA [expr ($nA*1.0/$TailleQueryNt)*100.0] set PercentT [expr ($nT*1.0/$TailleQueryNt)*100.0] set PercentG [expr ($nG*1.0/$TailleQueryNt)*100.0] set PercentC [expr ($nC*1.0/$TailleQueryNt)*100.0] set PercentN [expr ($nN*1.0/$TailleQueryNt)*100.0] set PercentAT [expr $PercentA + $PercentT] set PercentGC [expr $PercentC + $PercentG] set PercentPu [expr ($nPu*1.0/$TailleQueryNt)*100.0] set PercentPy [expr ($nPy*1.0/$TailleQueryNt)*100.0] set StatNucRes "" lappend StatNucRes ">Nucleic Acid Composition:" lappend StatNucRes "--------------------------" lappend StatNucRes [format " %5s %8s %4s" "Bases" "Number" "%"] lappend StatNucRes [format " %3s %6d %5.1f" " A " $nA $PercentA] lappend StatNucRes [format " %3s %6d %5.1f" " T " $nT $PercentT] lappend StatNucRes [format " %3s %6d %5.1f" " G " $nG $PercentG] lappend StatNucRes [format " %3s %6d %5.1f" " C " $nC $PercentC] lappend StatNucRes [format " %3s %6d %5.1f" " N " $nN $PercentN] lappend StatNucRes [format " %3s %6d %5.1f" "A+T" $nAT $PercentAT] lappend StatNucRes [format " %3s %6d %5.1f" "G+C" $nGC $PercentGC] lappend StatNucRes [format " %3s %6d %5.1f" "Pur" $nPu $PercentPu] lappend StatNucRes [format " %3s %6d %5.1f" "Pyr" $nPy $PercentPy] lappend Fiche [join $StatNucRes "\n"] } if {$AvecTm || $LaTotale} { set TmWallace [CalculTmDeLaSeq $SeqQuery "" 0.0 Wallace] set TmDNADNA [CalculTmDeLaSeq $SeqQuery "" 0.0 DNADNA] set TmDNARNA [CalculTmDeLaSeq $SeqQuery "" 0.0 DNARNA] set TmRNARNA [CalculTmDeLaSeq $SeqQuery "" 0.0 RNARNA] set TmNN [CalculTmDeLaSeq $SeqQuery "" 0.0 NearestNeighbor] if {$TmNN=="-1"} {set TmNN "0.0"} set TmRes "" lappend TmRes ">Melting Temperature:" lappend TmRes "---------------------" lappend TmRes [format "%8s %9s %5s\n" "Method" "" "Result"] lappend TmRes [format "%-16s %-5.0f \°C %-s" "Wallace" $TmWallace "Tm = 4*(G+C)+2*(A+T)"] lappend TmRes [format "%-16s %-5.1f \°C %-s" "DNA-DNA" $TmDNADNA "Tm = 81.5+16.6*log M+0.41(%GC)-500/L-0.62F"] lappend TmRes [format "%-16s %-5.1f \°C %-s" "DNA-RNA" $TmDNARNA "Tm = 79.8+18.5*log M+0.584(%GC)+0.11(%GC)^2-820/L-0.35F"] lappend TmRes [format "%-16s %-5.1f \°C %-s" "RNA-RNA" $TmRNARNA "Tm = 79.8+18.5*log M+0.584(%GC)+0.11(%GC)^2-820/L-0.50F"] lappend TmRes [format "%-16s %-5.1f \°C %-s" "Nearest Neighbor" $TmNN "Tm = 1000*DH/(DS+R*ln(\[ADN\]/4)-273.15)"] lappend Fiche [join $TmRes "\n"] } return [join $Fiche "\n\n"] } proc LesInfosDeMesPABDuPoster {} { set FichierOut "[RepertoireDuGenome]/Info_DuPoster" set LesPABs [list ACT0004 ACT0010 ACT1162 ACT0017 ACT0016 ACT0883 ACT0204 ACT0396 ACT0938 ACT1164 ACT0916] #set LesPABs [list ACT0004] foreach PAB $LesPABs { set Access [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" Protein Access] set Texte "$PAB $Access" AppendAuFichier $FichierOut "" AppendAuFichier $FichierOut $Texte AppendAuFichier $FichierOut "[string repeat "-" [string length $Texte]]" set option "-f \"id des CC\"" set Banques "protein" set Typ1 id set Typ2 acc set Commande "getz $option \"(\\\[$Banques-$Typ1: $Access\\\] | \\\[$Banques-$Typ2: $Access\\\])\"" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]||$GetzOut==""} { set Commande "getz $option \"\\\[$Banques-all: $Access\\\]\"" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message } if {![info exists GetzOut]||$GetzOut==""} { Espionne "$PAB Rien" } else { #Espionne "$GetzOut" AppendAuFichier $FichierOut $GetzOut } } return "" } proc LesInfosDesARPs {{FichierARP ""} {FichierSave ""}} { Wup "Permet de recuperer les infos des access de l alignement multiple des ARPs" Wup "ListeAccessDesARPs est un fichier creer a partir d 1 copier/coller de la liste des access dans seqlab" if {$FichierARP==""} { set FichierARP "[RepertoireDuGenome]/ListeAccessDesARPs" } if {! [file exists $FichierARP]} {return ""} if {$FichierSave==""} { set FichierSave "${FichierARP}_Id_Def_Org" } #Lecture du fichier et recuperation des access et des groupes de sequences set F [open "$FichierARP"] set NewCategorie "" set LesCategorie "" while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [regexp "^----" $Ligne]} { set NewCategorie $Ligne lappend LesCategorie $NewCategorie continue } if {$NewCategorie==""} {continue} set Access [string toupper [lindex $Ligne 0]] if {$Access==""} {continue} lappend TabARP($NewCategorie,LesAccess) $Access } close $F #Pour chaque sequence de chaque categorie on recherche les infos interessantes #Description #Organisme foreach Cat $LesCategorie { Espionne "$Cat" set LesAccessGetz [join [set TabARP($Cat,LesAccess)] "|"] set Banques "protein" set option "-vf \"acc des org txi id\" -cs \"COLSEPARATOR\" -rs \"ROWSEPARATOR\"" set Typ1 "acc" set Commande "getz $option \"\\\[$Banques-$Typ1: $LesAccessGetz\\\]\"" Espionne "$Commande" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {continue} if {$GetzOut==""} {continue} #Espionne "$GetzOut" set GetzOut [split $GetzOut "\n"] set GetzOut [join $GetzOut " "] regsub -all "ROWSEPARATOR" $GetzOut "\n" GetzOut set GetzOut [split $GetzOut "\n"] foreach E $GetzOut { if {! [regexp -nocase {[a-z]+ || [0-9]+} $E] || $E==""} {continue} #Espionne ">>>$E" regsub -all "COLSEPARATOR" $E "\n" E set Acc "" set Def "" set Org "" set Tax "" set Id "" set E [split $E "\n"] set Acc [lindex $E 1] set Def [lindex $E 2] set Org [lindex $E 3] set Tax [split [lindex $E 4] " "] set Id [split [lindex $E 5] " "] #Espionne "$Tax" #Cas ou on a plusieurs access pour une meme entrees dans la banque #Attention on peut avoir plusieurs entree avec le meme accession number (ex ARP2_HUMAN et ARP2_MOUSE) #mais avec des organismes differents #Espionne ">>>NewAcc" #Espionne "<<<$Acc" foreach A [split $Acc " "] { if {[regexp $A [set TabARP($Cat,LesAccess)]]} { set OnLa $A #Espionne ">>>$OnLa" set TabARP($OnLa,Def) $Def if {! [info exists TabARP($OnLa,Id)]} { set TabARP($OnLa,Id) "" lappend TabARP($OnLa,Id) [string trim $Id] } else { lappend TabARP($OnLa,Id) [string trim $Id] } if {! [info exists TabARP($OnLa,Org)]} { set TabARP($OnLa,Org) "" lappend TabARP($OnLa,Org) [string trim $Org] } else { lappend TabARP($OnLa,Org) [string trim $Org] } if {! [info exists TabARP($OnLa,Tax)]} { set TabARP($OnLa,Tax) "" foreach T $Tax { lappend TabARP($OnLa,Tax) [string trim $T] } } else { foreach T $Tax { lappend TabARP($OnLa,Tax) [string trim $T] } } #Espionne "$OnLa $Org" } } } } set Cat "" set Acc "" set MonAcc "" foreach Cat $LesCategorie { AppendAuFichier $FichierSave "$Cat" #Espionne "$Cat" foreach MonAcc [set TabARP($Cat,LesAccess)] { set Def "" set Id "" set Acc $MonAcc if {[regexp {ARP[0-9]+} $Acc]} { #Equivalence entre ARP01 et son acc set Acc [AccessCorrespondantAuxARPs $MonAcc] } if {[info exists TabARP($Acc,Id)]} { set Id [join [string trim [set TabARP($Acc,Id)]] " "] } if {[info exists TabARP($Acc,Def)]} { set Def [string trim [set TabARP($Acc,Def)]] } set Org "" if {[info exists TabARP($Acc,Org)]} { set Org [join [string trim [set TabARP($Acc,Org)]] " "] } set Tax "" if {[info exists TabARP($Acc,Tax)]} { set Tax [join [string trim [set TabARP($Acc,Tax)]] " "] } Espionne "$MonAcc -- $Id -- $Def -- $Org -- $Tax" AppendAuFichier $FichierSave "[join [list $MonAcc $Id $Def $Org $Tax] "\t"]" } } return "" } proc LesInfosDesGOSurLArborescence {GO X Color {LesInfos ""} {aTabGOSelectionnes ""}} { if {$aTabGOSelectionnes != ""} { upvar $aTabGOSelectionnes TabGOSelectionnes if {[set TabGOSelectionnes(LesGO)] != {} && ![info exists TabGOSelectionnes($GO)]} {return $LesInfos} } if {![info exists TabGOSelectionnes(LesGO) ]} {set TabGOSelectionnes(LesGO) {}} if {![info exists TabGOSelectionnes(LesTypes)]} {set TabGOSelectionnes(LesTypes) {}} global PosYSurArbreGO set EcartX 30 set EcartY 15 lappend LesInfos [list $GO $X $PosYSurArbreGO $Color] set X [expr $X + $EcartX] foreach Type [Onto LesTypes] { if {[set TabGOSelectionnes(LesTypes)] != {} && ![info exists TabGOSelectionnes($Type)]} {continue} foreach GOFils [Onto $Type $GO LesContributions] { if {[set TabGOSelectionnes(LesGO)] != {}} {if {![info exists TabGOSelectionnes($GOFils)]} {continue}} set PosYSurArbreGO [expr $PosYSurArbreGO + $EcartY] set LesInfos [LesInfosDesGOSurLArborescence $GOFils $X "red" $LesInfos TabGOSelectionnes] } foreach GOFils [Onto $Type $GO LesEnfants ] { if {[set TabGOSelectionnes(LesGO)] != {}} {if {![info exists TabGOSelectionnes($GOFils)]} {continue}} set PosYSurArbreGO [expr $PosYSurArbreGO + $EcartY] set LesInfos [LesInfosDesGOSurLArborescence $GOFils $X "blue" $LesInfos TabGOSelectionnes] } } return $LesInfos } proc LesInfosDesProtsDonnees {FichierProtDonnees FichierSave} { Wup "Permet de recuperer les infos des access de l alignement multiple des ARPs" Wup "ListeAccessDesARPs est un fichier creer a partir d 1 copier/coller de la liste des access dans seqlab" if {! [file exists $FichierProtDonnees] || $FichierSave==""} {Espionne "Nofile for LesInfosDesProtsDonnees";return ""} #Lecture du fichier et recuperation des access et des groupes de sequences set F [open "$FichierProtDonnees"] set NewCategorie "" set LesCategorie "" while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [regexp "^----" $Ligne]} { set NewCategorie $Ligne lappend LesCategorie $NewCategorie continue } if {$NewCategorie==""} {continue} set Access [string toupper [lindex $Ligne 0]] if {$Access==""} {continue} lappend TabProtDonnees($NewCategorie,LesAccess) $Access } close $F #Pour chaque sequence de chaque categorie on recherche les infos interessantes #Description #Organisme foreach Cat $LesCategorie { #Espionne "$Cat" set LesAccessGetz [join [set TabProtDonnees($Cat,LesAccess)] "|"] set Banques "protein" set option "-vf \"acc des org txi\" -cs \"COLSEPARATOR\" -rs \"ROWSEPARATOR\"" set Typ1 "acc" set Typ2 "id" set Commande "getz $option \"(\\\[$Banques-$Typ1: $LesAccessGetz\\\] | \\\[$Banques-$Typ2: $LesAccessGetz\\\])\"" #Espionne "$Commande" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {continue} if {$GetzOut==""} {continue} #Espionne "$GetzOut" set GetzOut [split $GetzOut "\n"] set GetzOut [join $GetzOut " "] regsub -all "ROWSEPARATOR" $GetzOut "\n" GetzOut set GetzOut [split $GetzOut "\n"] foreach E $GetzOut { if {! [regexp -nocase {[a-z]+ || [0-9]+} $E] || $E==""} {continue} #Espionne ">>>$E" regsub -all "COLSEPARATOR" $E "\n" E set E [split $E "\n"] set Acc [lindex $E 1] set Def [lindex $E 2] set Org [lindex $E 3] set Tax [split [lindex $E 4] " "] #Espionne "$Tax" #Cas ou on a plusieurs access pour une meme entrees dans la banque #Attention on peut avoir plusieurs entree avec le meme accession number (ex ARP2_HUMAN et ARP2_MOUSE) #mais avec des organismes differents #Espionne ">>>NewAcc" #Espionne "<<<$Acc" set OnLa "" foreach A [split $Acc " "] { if {[regexp $A [set TabProtDonnees($Cat,LesAccess)]]} { set OnLa $A #Espionne ">>>$OnLa" set TabProtDonnees($OnLa,Def) $Def if {! [info exists TabProtDonnees($OnLa,Org)]} { set TabProtDonnees($OnLa,Org) "" lappend TabProtDonnees($OnLa,Org) [string trim $Org] } else { lappend TabProtDonnees($OnLa,Org) [string trim $Org] } if {! [info exists TabProtDonnees($OnLa,Tax)]} { set TabProtDonnees($OnLa,Tax) "" foreach T $Tax { lappend TabProtDonnees($OnLa,Tax) [string trim $T] } } else { foreach T $Tax { lappend TabProtDonnees($OnLa,Tax) [string trim $T] } } #Espionne "$OnLa $Org" } } if {$OnLa==""} { #Cas particulier avec des IDs #PROTEIN:UBC1_MOUSE #set OnLa [lindex [split $Acc " "] 0] set Acc [lindex $E 0] regsub -all -nocase "PROTEIN:" $Acc "" Acc #Espionne "cas des IDS -- $Acc" set OnLa $Acc set TabProtDonnees($OnLa,Def) $Def if {! [info exists TabProtDonnees($OnLa,Org)]} { set TabProtDonnees($OnLa,Org) "" lappend TabProtDonnees($OnLa,Org) [string trim $Org] } else { lappend TabProtDonnees($OnLa,Org) [string trim $Org] } if {! [info exists TabProtDonnees($OnLa,Tax)]} { set TabProtDonnees($OnLa,Tax) "" foreach T $Tax { lappend TabProtDonnees($OnLa,Tax) [string trim $T] } } else { foreach T $Tax { lappend TabProtDonnees($OnLa,Tax) [string trim $T] } } } } } set Cat "" set Acc "" set MonAcc "" foreach Cat $LesCategorie { AppendAuFichier $FichierSave "$Cat" #Espionne "$Cat" foreach MonAcc [set TabProtDonnees($Cat,LesAccess)] { set Def "" set Acc $MonAcc if {[info exists TabProtDonnees($Acc,Def)]} { set Def [string trim [set TabProtDonnees($Acc,Def)]] } set Org "" if {[info exists TabProtDonnees($Acc,Org)]} { set Org [join [string trim [set TabProtDonnees($Acc,Org)]] " "] } set Tax "" if {[info exists TabProtDonnees($Acc,Tax)]} { set Tax [join [string trim [set TabProtDonnees($Acc,Tax)]] " "] } AppendAuFichier $FichierSave "[join [list $MonAcc $Def $Org $Tax] "\t"]" } } return "" } proc LesInfosDesRegionsDansLeBlast {FileBlast LesRegions {LesBanqueId All} {SeuilId None} {QuEstCeQueCest ""}} { if {$LesBanqueId != "All"} { foreach BId $LesBanqueId {set TabBIdOK($BId) 1} } set NbSubject [AskBlast $FileBlast NbSubject] if {$NbSubject == "" || $NbSubject == 0} {return} set TypeDeBlast [AskBlast $FileBlast TypeDeBlast] set IndiceQ 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set IndiceQ 3} set IndiceS 1 if {$TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} {set IndiceS 3} if { $TypeDeBlast == "BLASTX" || $TypeDeBlast == "BLASTP" || $TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} { set BaseFiltree "X" } elseif {$TypeDeBlast == "BLASTN"} { set BaseFiltree "N" } set LesRegions [lsort -integer -index 0 $LesRegions] set NbSubject [AskBlast $FileBlast NbSubject] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FileBlast Subject $i] if {$LesBanqueId != "All" && ![info exists TabBIdOK($BId)]} {continue} if {[info exist TabTmp($BId)]} {continue} set TabTmp($BId) 1 set NbSegment [AskBlast $FileBlast BanqueId $BId NbSegment] for {set j 1} {$j <= $NbSegment} {incr j} { if {$SeuilId != "None"} { set Identities [AskBlast $FileBlast BanqueId $BId Segment $j Identities] scan $Identities "%d/%d" nmRNA nmRNATot set Id [expr $nmRNA*1.0/$nmRNATot] if {$Id < $SeuilId} {continue} } set DQ [AskBlast $FileBlast BanqueId $BId Segment $j DQ] set FQ [AskBlast $FileBlast BanqueId $BId Segment $j FQ] set DS [AskBlast $FileBlast BanqueId $BId Segment $j DS] set FS [AskBlast $FileBlast BanqueId $BId Segment $j FS] if {$FQ < $DQ} {set SensQ "-"} else {set SensQ "+"} if {$FQ < $DQ} {set FactSensQ -1 } else {set FactSensQ 1 } if {$FS < $DS} {set SensS "-"} else {set SensS "+"} if {$FS < $DS} {set FactSensS -1 } else {set FactSensS 1 } set Orientation [AskBlast $FileBlast BanqueId $BId Segment $j Orientation] set Sens [SensDeLaRegion $Orientation] set Query [lindex [split [AskBlast $FileBlast BanqueId $BId Segment $j AlignLineaire] "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split [AskBlast $FileBlast BanqueId $BId Segment $j AlignLineaire] "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] foreach UneRegion $LesRegions { set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] if {![info exists TabTmp($D,$F,LesBId)]} { set TabTmp($D,$F,LesBId) {} } if {![CesRegionsSontEllesOverlappantes $D $F [Mini $DQ $FQ] [Maxi $DQ $FQ]]} {continue} if {![info exists TabTmp($D,$F,$BId,LesSegments)]} { set TabTmp($D,$F,$BId,LesSegments) {} } if {![info exists TabTmp($D,$F,$BId,$Sens,NbArea)]} { set TabTmp($D,$F,$BId,$Sens,NbArea) 0 } if {![info exists TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli)]} { set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli) 0 set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAliTot) 0 } lappend TabTmp($D,$F,$BId,LesSegments) [list $DQ $FQ $DS $FS $Orientation $Sens] set NContMax 0 set NCont 0 set PosIniQ $DQ set PosIniS $DS set LesBornesSurSubject {} foreach AQ $LAliQuery AS $LAliSbjct { if {[string equal -nocase "-" $AQ]} { set PosIniS [expr $PosIniS + $IndiceS * $FactSensS] if { [Maxi $D [Mini $DQ $FQ]] <= $PosIniQ && $PosIniQ <= [Mini $F [Maxi $DQ $FQ]]} { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 } continue } if {[string equal -nocase "-" $AS]} { set PosIniQ [expr $PosIniQ + $IndiceQ * $FactSensQ] if { [Maxi $D [Mini $DQ $FQ]] <= $PosIniQ && $PosIniQ <= [Mini $F [Maxi $DQ $FQ]]} { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 } continue } for {set k 0} {$k < $IndiceQ} {incr k} { set PosQ [expr $PosIniQ + $k * $FactSensQ] for {set l 0} {$l < $IndiceS} {incr l} { set PosS [expr $PosIniS + $l * $FactSensS] if { [Maxi $D [Mini $DQ $FQ]] <= $PosQ && $PosQ <= [Mini $F [Maxi $DQ $FQ]]} { lappend LesBornesSurSubject $PosS } } if { [Maxi $D [Mini $DQ $FQ]] <= $PosQ && $PosQ <= [Mini $F [Maxi $DQ $FQ]]} { if {[string equal -nocase $BaseFiltree $AQ]} { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 continue } if {$AQ == $AS} { incr NCont incr TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli) } else { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 } incr TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAliTot) } } set PosIniQ [expr $PosIniQ + $IndiceQ * $FactSensQ] set PosIniS [expr $PosIniS + $IndiceS * $FactSensS] } if {$LesBornesSurSubject == {}} {continue} set LesBornesSurSubject [lsort -integer $LesBornesSurSubject] lappend TabTmp($D,$F,LesBId) $BId incr TabTmp($D,$F,$BId,$Sens,NbArea) lappend TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,D) [lindex $LesBornesSurSubject 0 ] lappend TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,F) [lindex $LesBornesSurSubject end] if {$NContMax < $NCont} {set NContMax $NCont} set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NCont) $NContMax } } } set LesRegionsEtLeurFrequence {} foreach UneRegion $LesRegions { set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] set LesBId [set TabTmp($D,$F,LesBId)] set NTot [llength $LesBId] set LesBIdDeLaRegion {} foreach BId [lsort -unique $LesBId] { foreach UnSegment [set TabTmp($D,$F,$BId,LesSegments)] { set DQ [lindex $UnSegment 0] set FQ [lindex $UnSegment 1] set DS [lindex $UnSegment 2] set FS [lindex $UnSegment 3] set Sens [lindex $UnSegment 5] if {![info exists TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli)]} {continue} set NAli [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli) ] if {$NAli == 0} {continue} set Orient [lindex $UnSegment 4] set NAliTot [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAliTot)] set NCont [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NCont)] set DsurS [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,D)] set FsurS [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,F)] set N [set TabTmp($D,$F,$BId,$Sens,NbArea)] lappend LesRegionsEtLeurFrequence [list $D $F $NTot $N $BId $Orient $Sens $DsurS $FsurS $NAli $NAliTot $NCont] } } } if {[info exists TabTmp]} {unset TabTmp} if {$QuEstCeQueCest == "Contig"} { set TailleContig 100000 set LesRegionsEtLeurFrequenceTmp {} foreach UneRegion $LesRegionsEtLeurFrequence { set BId [lindex $UneRegion 4] if {[regexp {_[0-9]*} $BId]} { regexp -nocase {([a-z0-9]+):([0-9a-z]+)_([0-9]+)} $BId tmp Chromosome Contig Fragment } else { regexp -nocase {([a-z0-9]+):([0-9a-z]+)} $BId tmp Chromosome Contig set Fragment "" } if {$Fragment != ""} {set NbFragment [Base10 $Fragment]} else {set NbFragment 0} set DS [expr [lindex $UneRegion 7] + $TailleContig * $NbFragment] set FS [expr [lindex $UneRegion 8] + $TailleContig * $NbFragment] set BId [list $Chromosome $Contig [string length $Fragment]] set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] set Sens [lindex $UneRegion 6] if {[info exists TabTmp($D,$F,$Contig,$DS,$FS,$Sens)]} {continue} set TabTmp($D,$F,$Contig,$DS,$FS,$Sens) 1 if {![info exists TabTmp($D,$F,$Contig,$Sens,NbArea)]} {set TabTmp($D,$F,$Contig,$Sens,NbArea) 0} incr TabTmp($D,$F,$Contig,$Sens,NbArea) set UneRegion [lreplace $UneRegion 4 4 $BId] set UneRegion [lreplace $UneRegion 7 7 $DS ] set UneRegion [lreplace $UneRegion 8 8 $FS ] lappend LesRegionsEtLeurFrequenceTmp $UneRegion } set LesRegionsEtLeurFrequence {} foreach UneRegion $LesRegionsEtLeurFrequenceTmp { set Contig [lindex [lindex $UneRegion 4] 1] set Sens [lindex $UneRegion 6] set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] set UneRegion [lreplace $UneRegion 3 3 [set TabTmp($D,$F,$Contig,$Sens,NbArea)]] if {$Sens == "+"} { set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] } else { set DS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] } set UneRegion [lreplace $UneRegion 0 0 [Mini $D $F]] set UneRegion [lreplace $UneRegion 1 1 [Maxi $D $F]] set UneRegion [lreplace $UneRegion 7 7 $DS] set UneRegion [lreplace $UneRegion 8 8 $FS] lappend LesRegionsEtLeurFrequence $UneRegion } } if {[info exists TabTmp)]} {unset TabTmp} return [lsort -index 0 -integer $LesRegionsEtLeurFrequence] } proc LesInfosDesRegionsDansLeBlast_TabBlast {aTabBlast LesRegions {LesBanqueId All} {SeuilId None} {QuEstCeQueCest ""}} { upvar $aTabBlast TabBlast if {$LesBanqueId != "All"} { foreach BId $LesBanqueId {set TabBIdOK($BId) 1} } if {![info exists TabBlast(NbSubject)]} {return {}} set TypeDeBlast [set TabBlast(TypeDeBlast)] set IndiceQ 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set IndiceQ 3} set IndiceS 1 if {$TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} {set IndiceS 3} if { $TypeDeBlast == "BLASTX" || $TypeDeBlast == "BLASTP" || $TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} { set BaseFiltree "X" } elseif {$TypeDeBlast == "BLASTN"} { set BaseFiltree "N" } set LesRegions [lsort -integer -index 0 $LesRegions] set NbSubject [set TabBlast(NbSubject)] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [set TabBlast($i)] if {$LesBanqueId != "All" && ![info exists TabBIdOK($BId)]} {continue} if {[info exist TabTmp($BId)]} {continue} set TabTmp($BId) 1 set NbSegment [set TabBlast($BId,NbSegment)] for {set j 1} {$j <= $NbSegment} {incr j} { if {$SeuilId != "None"} { set Identities [set TabBlast($BId,$j,Identities)] scan $Identities "%d/%d" nmRNA nmRNATot set Id [expr $nmRNA*1.0/$nmRNATot] if {$Id < $SeuilId} {continue} } set DQ [set TabBlast($BId,$j,DQ)] set FQ [set TabBlast($BId,$j,FQ)] set DS [set TabBlast($BId,$j,DS)] set FS [set TabBlast($BId,$j,FS)] if {$FQ < $DQ} {set SensQ "-"} else {set SensQ "+"} if {$FQ < $DQ} {set FactSensQ -1 } else {set FactSensQ 1 } if {$FS < $DS} {set SensS "-"} else {set SensS "+"} if {$FS < $DS} {set FactSensS -1 } else {set FactSensS 1 } set Orientation [set TabBlast($BId,$j,Orientation)] set Sens [SensDeLaRegion $Orientation] set Query [lindex [split [set TabBlast($BId,$j,AlignLineaire)] "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split [set TabBlast($BId,$j,AlignLineaire)] "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] foreach UneRegion $LesRegions { set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] if {![info exists TabTmp($D,$F,LesBId)]} { set TabTmp($D,$F,LesBId) {} } if {![CesRegionsSontEllesOverlappantes $D $F [Mini $DQ $FQ] [Maxi $DQ $FQ]]} {continue} if {![info exists TabTmp($D,$F,$BId,LesSegments)]} { set TabTmp($D,$F,$BId,LesSegments) {} } if {![info exists TabTmp($D,$F,$BId,$Sens,NbArea)]} { set TabTmp($D,$F,$BId,$Sens,NbArea) 0 } if {![info exists TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli)]} { set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli) 0 set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAliTot) 0 } lappend TabTmp($D,$F,$BId,LesSegments) [list $DQ $FQ $DS $FS $Orientation $Sens] set NContMax 0 set NCont 0 set PosIniQ $DQ set PosIniS $DS set LesBornesSurSubject {} foreach AQ $LAliQuery AS $LAliSbjct { if {[string equal -nocase "-" $AQ]} { set PosIniS [expr $PosIniS + $IndiceS * $FactSensS] if { [Maxi $D [Mini $DQ $FQ]] <= $PosIniQ && $PosIniQ <= [Mini $F [Maxi $DQ $FQ]]} { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 } continue } if {[string equal -nocase "-" $AS]} { set PosIniQ [expr $PosIniQ + $IndiceQ * $FactSensQ] if { [Maxi $D [Mini $DQ $FQ]] <= $PosIniQ && $PosIniQ <= [Mini $F [Maxi $DQ $FQ]]} { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 } continue } for {set k 0} {$k < $IndiceQ} {incr k} { set PosQ [expr $PosIniQ + $k * $FactSensQ] for {set l 0} {$l < $IndiceS} {incr l} { set PosS [expr $PosIniS + $l * $FactSensS] if { [Maxi $D [Mini $DQ $FQ]] <= $PosQ && $PosQ <= [Mini $F [Maxi $DQ $FQ]]} { lappend LesBornesSurSubject $PosS } } if { [Maxi $D [Mini $DQ $FQ]] <= $PosQ && $PosQ <= [Mini $F [Maxi $DQ $FQ]]} { if {[string equal -nocase $BaseFiltree $AQ]} { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 continue } if {$AQ == $AS} { incr NCont incr TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli) } else { if {$NContMax < $NCont} {set NContMax $NCont} set NCont 0 } incr TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAliTot) } } set PosIniQ [expr $PosIniQ + $IndiceQ * $FactSensQ] set PosIniS [expr $PosIniS + $IndiceS * $FactSensS] } if {$LesBornesSurSubject == {}} {continue} set LesBornesSurSubject [lsort -integer $LesBornesSurSubject] lappend TabTmp($D,$F,LesBId) $BId incr TabTmp($D,$F,$BId,$Sens,NbArea) lappend TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,D) [lindex $LesBornesSurSubject 0 ] lappend TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,F) [lindex $LesBornesSurSubject end] if {$NContMax < $NCont} {set NContMax $NCont} set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NCont) $NContMax } } } set LesRegionsEtLeurFrequence {} foreach UneRegion $LesRegions { set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] set LesBId [set TabTmp($D,$F,LesBId)] set NTot [llength $LesBId] set LesBIdDeLaRegion {} foreach BId [lsort -unique $LesBId] { foreach UnSegment [set TabTmp($D,$F,$BId,LesSegments)] { set DQ [lindex $UnSegment 0] set FQ [lindex $UnSegment 1] set DS [lindex $UnSegment 2] set FS [lindex $UnSegment 3] set Sens [lindex $UnSegment 5] if {![info exists TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli)]} {continue} set NAli [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAli) ] if {$NAli == 0} {continue} set Orient [lindex $UnSegment 4] set NAliTot [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NAliTot)] set NCont [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,NCont)] set DsurS [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,D)] set FsurS [set TabTmp($D,$F,$BId,$DQ,$FQ,$DS,$FS,$Sens,F)] set N [set TabTmp($D,$F,$BId,$Sens,NbArea)] lappend LesRegionsEtLeurFrequence [list $D $F $NTot $N $BId $Orient $Sens $DsurS $FsurS $NAli $NAliTot $NCont] } } } if {[info exists TabTmp]} {unset TabTmp} if {$QuEstCeQueCest == "Contig"} { set TailleContig 100000 set LesRegionsEtLeurFrequenceTmp {} foreach UneRegion $LesRegionsEtLeurFrequence { set BId [lindex $UneRegion 4] if {[regexp {_[0-9]*} $BId]} { regexp -nocase {([a-z0-9]+):([0-9a-z]+)_([0-9]+)} $BId tmp Chromosome Contig Fragment } else { regexp -nocase {([a-z0-9]+):([0-9a-z]+)} $BId tmp Chromosome Contig set Fragment "" } if {$Fragment != ""} {set NbFragment [Base10 $Fragment]} else {set NbFragment 0} set DS [expr [lindex $UneRegion 7] + $TailleContig * $NbFragment] set FS [expr [lindex $UneRegion 8] + $TailleContig * $NbFragment] set BId [list $Chromosome $Contig [string length $Fragment]] set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] set Sens [lindex $UneRegion 6] if {[info exists TabTmp($D,$F,$Contig,$DS,$FS,$Sens)]} {continue} set TabTmp($D,$F,$Contig,$DS,$FS,$Sens) 1 if {![info exists TabTmp($D,$F,$Contig,$Sens,NbArea)]} {set TabTmp($D,$F,$Contig,$Sens,NbArea) 0} incr TabTmp($D,$F,$Contig,$Sens,NbArea) set UneRegion [lreplace $UneRegion 4 4 $BId] set UneRegion [lreplace $UneRegion 7 7 $DS ] set UneRegion [lreplace $UneRegion 8 8 $FS ] lappend LesRegionsEtLeurFrequenceTmp $UneRegion } set LesRegionsEtLeurFrequence {} foreach UneRegion $LesRegionsEtLeurFrequenceTmp { set Contig [lindex [lindex $UneRegion 4] 1] set Sens [lindex $UneRegion 6] set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] set UneRegion [lreplace $UneRegion 3 3 [set TabTmp($D,$F,$Contig,$Sens,NbArea)]] if {$Sens == "+"} { set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] } else { set DS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] } set UneRegion [lreplace $UneRegion 0 0 [Mini $D $F]] set UneRegion [lreplace $UneRegion 1 1 [Maxi $D $F]] set UneRegion [lreplace $UneRegion 7 7 $DS] set UneRegion [lreplace $UneRegion 8 8 $FS] lappend LesRegionsEtLeurFrequence $UneRegion } } if {[info exists TabTmp)]} {unset TabTmp} return [lsort -index 0 -integer $LesRegionsEtLeurFrequence] } proc LesInfosDuCluster {{NomDuCluster ""}} { Wup "Rend la taille et les membres du cluster Numero X ou du PAB X" if {! [regexp -nocase {[a-z]+ || [0-9]+} $NomDuCluster]} {return "No Query"} set LesMembres [InfoDuCluster $NomDuCluster] set Taille [InfoDuCluster $NomDuCluster Taille] set Numero [InfoDuCluster $NomDuCluster Numero] set TexteMembres [join $LesMembres " "] regsub -all "[PreFixe]" $TexteMembres "" TexteMembres return "Cluster $Numero\nTaille: $Taille\nMembres: $TexteMembres" } proc LesInfosDuPoch {} { set LesCles [list Acreuser Construct Construct1 Constructt2 INfo1 Info1 Info2 StructHyp Target ] foreach Nom [ListeDesPABs] { set FI "[HomeRipp]/vrac/infos/$Nom" if {[FileAbsent $FI]} { continue } foreach Ligne [LesLignesDuFichier $FI] { foreach Cle $LesCles { if {[regexp "^$Cle\:" $Ligne]} { Espionne "$Nom $Ligne" InformeSansDemander $Nom $Ligne } } } } } proc LesInfosDuVRGMasking {File} { # VRG == vector, repeat and genome masking, c'est la masking pour les sequences de differential display # ### Pour chaque file ".tfa.Masking.infos, permet de savoir si la seq est masquee par V, R ou G ### set V 0 set R 0 set G 0 set F [open $File] while {[gets $F Ligne]>=0} { if {$V && $R && $G} {break} set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Info [lindex $LaLigne 5] if {$Info == "Vector masked" && !$V} {incr V} if {$Info == "Repeat masked" && !$R} {incr R} if {$Info == "Genome masked" && !$G} {incr G} } close $F return [list $V $R $G] } proc LesInfosSupplementairesPourATV {Acc Dist Quoi {DeQui ""}} { Wup "Permet de rechercher les informations supplementaires a ajouter a l arbre pour le format," Wup "compatible NHX (New Hampshire eXtented) et lisible par ATV (viewer d arbre phylo)" #String1 - A priori reserve aux organismes #String2 - Laissee a plusieurs choix: Definition - EC - Categories (dediees a ARP) #Integer1 - A priori reserve aux TaxID #NHX (New Hampshire eXtented) TAG LIST ###################################### #no tag String sequence name of this node (MUST BE FIRST, IF ASSIGNED) #: double branch length to parent node (MUST BE SECOND, IF ASSIGNED) #:B= integer bootstrap value at this node (does not apply to external nodes) #:S= String species name of the species/phylum at this node #:T= integer NCBI taxonomy ID of the species/phylum at this node #:E= String EC number at this node #:O= integer orthologous to this external node #:SO= integer "super orthologous" (no duplications on paths) to this external node #:L= float log likelihood value on parent branch #:D= 'Y'or'N' 'Y' if this node represents a duplication event - # 'N' if this node represents a speciation event (does not apply to ext nodes) #:Sw= 'Y'or'N' placing a subtree on the parent branch of this node makes the tree significantly worse # according to Kishino/Hasegawa test (or similar) #:Co= 'Y'or'N' collapse this node when drawing the tree (default is not to collapse) #ex: [&&NHX:S=human:E=1.1.1.1:] if {$DeQui=="Default"} {set DeQui 0} else {set DeQui 1} if {$Acc=="" || $Dist == ""} {return ""} set String1 "" set String2 "" set Integer1 "" #3-0 On va chercher les informations supplementaires de nos access ################################################################## set OnVeutOrga 0 set OnVeutDef 0 set OnVeutCat 0 set OnVeutEC 0 set OnVeutTax 0 foreach Q [split $Quoi " "] { switch -regexp -- $Q { "Species" {set OnVeutOrga 1} "Definition" {set OnVeutDef 1;set OnVeutCat 0;set OnVeutEC 0} "Categories" {set OnVeutDef 0;set OnVeutCat 1;set OnVeutEC 0} "EC" {set OnVeutDef 0;set OnVeutCat 0;set OnVeutEC 1} "TaxID" {set OnVeutTax 1} } } #3-1 L organisme ################ if {$OnVeutOrga} { set Org "" set LesOrgas "" if {$DeQui} { #Jean pour ARP set Org [InterrogeLesInfosDesARPs $Acc Taxon] foreach O $Org { set MyOrg [LesOrgasDeMesTaxID $O Name] if {$MyOrg==""} {continue} lappend LesOrgas [join $MyOrg "_"] } } else { set Org [InterrogeLesInfosDesProtsDonnees $Acc Taxon] foreach O $Org { set MyOrg [LesOrgasDeMesTaxID $O Name] if {$MyOrg==""} {continue} lappend LesOrgas [join $MyOrg "_"] } #Raymond: liste des orgas } set LesOrgas [string trim [join $LesOrgas "_"]] regsub -all {\[|\]|\(|\)|\,|\:} $LesOrgas "_" LesOrgas regsub -all {_{2,}} $LesOrgas "_" LesOrgas regsub -all {^_|_$} $LesOrgas "" LesOrgas set String1 $LesOrgas } #3-2 La definition ################## if {$OnVeutDef} { set Def "" if {$DeQui} { #Jean pour ARP set Def [string trim [InterrogeLesInfosDesARPs $Acc Definition]] regsub -all {\.} $Def " " Def } else { set Def [string trim [InterrogeLesInfosDesProtsDonnees $Acc Definition]] regsub -all {\.} $Def " " Def #Raymond: chaine de caracteres } set Def [string trim [join $Def "_"]] regsub -all {\[|\]|\(|\)|\,|\:|\-} $Def "_" Def regsub -all {_{2,}} $Def "_" Def regsub -all {^_|_$} $Def "" Def set String2 $Def } #3-2 La Categorie des ARPs ########################## if {$OnVeutCat} { set Cat "" if {$DeQui} { #Jean pour ARP set Cat [string trim [InterrogeLesInfosDesARPs $Acc Categorie]] regsub -all {\.} $Cat " " Cat } set Cat [string trim [join $Cat "_"]] regsub -all {\[|\]|\(|\)|\,|\:|\-} $Cat "_" Cat regsub -all {_{2,}} $Cat "_" Cat regsub -all {^_|_$} $Cat "" Cat regsub -all {Les} $Cat "" Cat set String2 $Cat } #3-3 Les EC (enzyme commission) ############################### if {$OnVeutEC} { set EC "" if {$DeQui} { #Jean pour ARP set EC "" } else { #Raymond: chaine de caractere } set EC [string trim [join $EC "_"]] regsub -all {\[|\]|\(|\)|\,|\:|\-} $EC "_" EC regsub -all {_{2,}} $EC "_" EC regsub -all {^_|_$} $EC "" EC set String2 $EC } #3-4 Les TaxID du NCBI ###################### if {$OnVeutTax} { set Tax "" if {$DeQui} { set Tax "" } else { #Raymond: Integer } set Tax [string trim [join $Tax "_"]] regsub -all {\[|\]|\(|\)|\,|\:|\-} $Tax "_" Tax regsub -all {_{2,}} $Tax "_" Tax regsub -all {^_|_$} $Tax "" Tax set Integer1 $Tax } set InsideInfo "" if {$String1!=""} { append InsideInfo ":S=$String1" } if {$String2!=""} { append InsideInfo ":E=$String2" } if {$Integer1!=""} { append InsideInfo ":T=$Integer1" } if {$InsideInfo==""} { set AddedInfo "${Acc}:${Dist}" } else { set AddedInfo "${Acc}:${Dist}\[\\&\\&NHX${InsideInfo}\]" } return $AddedInfo } proc LesInteractionsString8.3 {protId {seuil ""} Org {WithoutTextMiningOnly ""} {GetWhat ""}} { #Attention pour les versions anterieures a 9.0 CanalSqlString #a verif que notre protId ne soit pas que dans protein_id_b (voir where) set LocalWithoutTextMiningOnly [string equal -nocase $WithoutTextMiningOnly "WithoutTextMiningOnly"] if {$seuil==""} { set seuil [SeuilStringInteractomeDefaut] } set idx 0 set LesInteractions {} set Sql "select protein_id_a, protein_id_b, combined_score, equiv_nscore, equiv_nscore_transferred, equiv_fscore, equiv_pscore, equiv_hscore, array_score, array_score_transferred, experimental_score, experimental_score_transferred, database_score, database_score_transferred, textmining_score, textmining_score_transferred from network.protein_protein_links where protein_id_a = '$protId' and combined_score >= '$seuil' order by combined_score DESC;" foreach {Pi1 Pi2 Cs Ns Nst Fs Ps Hs As Ast Es Est Ds Dst Ts Tst} [SqlExec $Sql "GetList"] { set idx 1 set evidence "" if { $LocalWithoutTextMiningOnly && [expr $Ts+$Tst > 0] && [expr $Ns+$Nst+$Fs+$Ps+$Hs+$As+$Ast+$Es+$Est+$Ds+$Dst==0]} { continue } if {$Ns != 0} { append evidence "neighborhood $Ns " } if {$Nst != 0} { append evidence "neighborhoodT $Nst " } if {$Fs != 0} { append evidence "fusion $Fs " } if {$Ps != 0} { append evidence "co-occ $Ps " } if {$Hs != 0} { append evidence "homology $Hs " } if {$As != 0} { append evidence "array $As " } if {$Ast != 0} { append evidence "arrayT $Ast " } if {$Es != 0} { append evidence "experimental $Es " } if {$Est != 0} { append evidence "experimentalT $Est " } if {$Ds != 0} { append evidence "database $Ds " } if {$Dst != 0} { append evidence "databaseT $Dst " } if {$Ts != 0} { append evidence "textmining $Ts " } if {$Tst != 0} { append evidence "textminingT $Tst " } if {$GetWhat=="GetGn"} { set Pn1 [PreferredName $Pi1 $Org] set Pn2 [PreferredName $Pi2 $Org] #PourWscope lappend LesInteractions "$Pn1\tpp\t$Pn2" lappend LesInteractions "$Pi1\t$Pn1\t$Pi2\t$Pn2\t$Cs\t$evidence" } if {$GetWhat=="GetSw"} { regsub "_" $Org " " OrgProv set TaxId [TaxIdOrg $OrgProv] set Sw1 [SwFromProtIDString9 $Pi1 $TaxId] set Sw2 [SwFromProtIDString9 $Pi2 $TaxId] lappend LesInteractions "$Pi1\t$Sw1\t$Pi2\t$Sw2\t$Cs\t$evidence" } } Espionne "I found [llength $LesInteractions] interactions for $protId" return $LesInteractions } proc LesInteractionsString9.0 {protId {seuil ""} Org {WithoutTextMiningOnly ""} {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetGn" } CanalSqlString set LocalWithoutTextMiningOnly [string equal -nocase $WithoutTextMiningOnly "WithoutTextMiningOnly"] if {$seuil==""} { set seuil [SeuilStringInteractomeDefaut] } set LesInteractions {} set Sql "select node_id_a, node_type_b, node_id_b, combined_score, evidence_scores from network.node_node_links where node_id_a = '$protId' and combined_score >= '$seuil' order by combined_score DESC;" foreach {Pi1 Bidon Pi2 Cs LesEs} [SqlExec $Sql "GetList"] { set evidence "" ; set trouveTextMining 0; set trouveAutreChose 0 foreach Es [split $LesEs "{}"] { if {$Es=="" || $Es==","} {continue} set EsDetails [split $Es ","] set ScoId [lindex $EsDetails 0] if {$ScoId==12 || $ScoId==13} {set trouveTextMining 1} if {$ScoId!=12 && $ScoId!=13} {set trouveAutreChose 1} set Sco [lindex $EsDetails 1] append evidence "[InterrogeEvidenceTable $ScoId ScoTy] $Sco " } if {$LocalWithoutTextMiningOnly && $trouveTextMining==1 && $trouveAutreChose==0} {continue} if {[regexp -nocase "Gn" $GetWhat]} { set Pn1 [PreferredName $Pi1 $Org] set Pn2 [PreferredName $Pi2 $Org] #PourWscope lappend LesInteractions "$Pn1\tpp\t$Pn2" } if {[regexp -nocase "Sw" $GetWhat]} { regsub "_" $Org " " OrgProv set TaxId [TaxIdOrg $OrgProv] set Sw1 [SwFromProtIDString10 $Pi1 $TaxId] set Sw2 [SwFromProtIDString10 $Pi2 $TaxId] } if { [regexp -nocase "Gn" $GetWhat] && ! [regexp -nocase "Sw" $GetWhat] } { lappend LesInteractions "$Pi1\t$Pn1\t$Pi2\t$Pn2\t$Cs\t$evidence" } if { [regexp -nocase "Sw" $GetWhat] && ! [regexp -nocase "Gn" $GetWhat] } { lappend LesInteractions "$Pi1\t$Sw1\t$Pi2\t$Sw2\t$Cs\t$evidence" } if { [regexp -nocase "Gn" $GetWhat] && [regexp -nocase "Sw" $GetWhat] } { lappend LesInteractions "$Pi1\t$Pn1\t$Sw1\t$Pi2\t$Pn2\t$Sw2\t$Cs\t$evidence" } } Espionne "I found [llength $LesInteractions] interactions for $protId" CanalSqlDisconnect return $LesInteractions } proc LesInterproDeLAccess {Access} { set Commande "[ProgPathway getz] \"\(\\\[protein\-acc:$Access\\\]\|\\\[protein\-id:$Access\\\]\)>iprmatches\" \-view IprMatchesView" catch {set Out [eval exec $Commande]} Message if {![info exists Out]} {return} set LesInterpro {} foreach Ligne [split [string trim $Out] "\n"] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set Pos [string first ":" $Ligne] if {$Pos < 0 && [regexp {^([0-9]+)\-([0-9]+)} $Ligne tmp Debut Fin]} { lappend LesInterpro [list $Access $IPR $DefIPR $Debut $Fin $Domaine $DefDom] } set MotAvant [string trim [string range $Ligne 0 [expr $Pos-1]]] set Apres [string trim [string range $Ligne [expr $Pos+1] end ]] if {[string equal -nocase $MotAvant "IPRMATCHES"]} { set Pos [string first " " $Apres] set Access [string trim [string range $Apres 0 [expr $Pos-1]]] continue } if {[string equal -nocase $MotAvant "Interpro"]} { set Pos [string first " " $Apres] if {$Pos < 0} { set IPR [string trim [string range $Apres 0 end ]] set DefIPR "" } else { set IPR [string trim [string range $Apres 0 [expr $Pos-1]]] set DefIPR [string trim [string range $Apres [expr $Pos+1] end ]] } continue } if {$MotAvant != ""} { set Banque $MotAvant set Pos [string first " " $Apres] if {$Pos < 0} { set Domaine [string trim [string range $Apres 0 end ]] set DefDom "" } else { set Domaine [string trim [string range $Apres 0 [expr $Pos-1]]] set DefDom [string trim [string range $Apres [expr $Pos+1] end ]] } continue } } return $LesInterpro } proc LesJRTouchantUnChromo {Chromo FichierClusters} { set LesClonesDuChromo [QuiToucheChroContig $Chromo] set LesNoms [split $LesClonesDuChromo " "] set LesJR {} foreach JR [ListeMinimumDesJR $FichierClusters] { #Espionne $JR set Vu($JR) 1 } foreach Nom $LesNoms { if {![info exists Vu($Nom)]} {continue} lappend LesJR $Nom } set NbJR [llength $LesJR] #Espionne "JR:$NbJR" return $LesJR } proc LesJRsAvecMemesAccessDeProtOuDemRNAPourUnPAB {PAB FichierClusters} { #avec le fichier clusters obtenus par les overlaps set LesAccessProtAChercher [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" Protein Access] if {$LesAccessProtAChercher!=""} { set LesAccessAChercher $LesAccessProtAChercher } else { set LesAccessAChercher [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" mRNA Access] } foreach Nom [ListeDesJR $FichierClusters] { set LesAccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$LesAccessProt !=""} { foreach AccessProt $LesAccessProt { lappend LesAccessNom "$AccessProt $Nom" } } else { set LesAccessRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$LesAccessRNA!=""} { foreach AccessRNA $LesAccessRNA { lappend LesAccessNom "$AccessRNA $Nom" } } } } set LesAccessNomTries [lsort -dictionary $LesAccessNom] set ListeDesJumeaux {} foreach AccessNom $LesAccessNomTries { set Nom [lindex $AccessNom end] set Access [lindex $AccessNom 0] foreach AccessPAB $LesAccessAChercher { if {$Access==$AccessPAB && $Nom!=$PAB} { lappend ListeDesJumeaux $Nom } } } #si par exemple 2 access pour le pab #et s il existe d autres pabs avec ses 2 access #alors il y aura des doublons dans la liste #### elimination des doublons: correction de la liste a retourner ###### set ListeDesJumeauxCorrigee {} foreach Jumeau $ListeDesJumeaux { if {![info exists Vu($Jumeau)]} { set Vu($Jumeau) 1 lappend ListeDesJumeauxCorrigee $Jumeau } else {continue} } return $ListeDesJumeauxCorrigee } proc LesJumeauxDeSequencesDuPremier {Nom} { set FichierJumSeqNuc "[RepertoireDuGenome]/fiches/jumeaux_SeqNuc" foreach Ligne [LesLignesDuFichier $FichierJumSeqNuc] { set LesJumeaux [split $Ligne " "] set Premier [lindex $LesJumeaux 0] if {$Premier==$Nom} {set LsansPremier [lreplace $LesJumeaux 0 0]; return $LsansPremier} } return "" } proc LesJumeauxDuPAB {PAB FichierClusters} { foreach Ligne [LesLignesDuFichier $FichierClusters] { if {$Ligne==""} {continue} set Ligne [split $Ligne " "] set n 0 foreach Nom $Ligne { if {$Nom==$PAB} { set Noms [join $Ligne " "] #FaireLire $Noms regsub "$PAB" $Noms "" Noms regsub " " $Noms " " Noms set Noms [string trim $Noms] set LesNoms [split $Noms " "] return $LesNoms } } } return } proc LesKeywordsInteressantsDuGenbank {TexteOuFichier aTab args} { if {[regexp "\n" $TexteOuFichier]} { set Texte $TexteOuFichier } else { set Texte [ContenuDuFichier $TexteOuFichier] } upvar $aTab Tab set LesKW $args foreach KW $LesKW { set Tab($KW) "" } foreach Ligne [split $Texte "\n"] { if {[regexp {^[^ ]} $Ligne]} { scan $Ligne "%s" KW set Interessant [expr [lsearch $LesKW $KW] > -1] if {$Interessant} {set Tab($KW) "" ; set Sep ""} } if {$Interessant} { append Tab($KW) "$Sep$Ligne" set Sep "\n" } } if {[llength $LesKW]==1} { return $Tab([lindex $LesKW 0]) } return $LesKW } proc LesLca {Nom} { set L [ExtraitInfo $Nom "LCA:"] regsub -all " / " $L "/" L return [split $L "/"] } proc LesLibrariesOuOptionsSpeciesAutomatiques {Organisme {NbPhylumEnCommunMin 5}} { if {$Organisme == ""} {return [InterrogeLibrariesRepeatMasker Organisme "Homo sapiens" LesLibraries]} if {[InterrogeLibrariesRepeatMasker Organisme $Organisme LesLibraries] != ""} { return [InterrogeLibrariesRepeatMasker Organisme $Organisme LesLibraries] } if {[regexp -nocase {human|^homo } $Organisme]} { return [InterrogeLibrariesRepeatMasker Organisme "Homo sapiens" LesLibraries] } if {[regexp -nocase {mouse|^mus |^rattus } $Organisme]} { return [InterrogeLibrariesRepeatMasker Organisme "Mus musculus" LesLibraries] } if {[regexp -nocase "arabidopsis" $Organisme]} { return [InterrogeLibrariesRepeatMasker Organisme "Arabidopsis thaliana" LesLibraries] } if {[string equal -nocase $Organisme "elegans" ]} { return [InterrogeLibrariesRepeatMasker Organisme "Caenorhabditis elegans" LesLibraries] } if {[string equal -nocase $Organisme "drosophila"] || [regexp -nocase "Drosophila|fly" $Organisme]} { return [InterrogeLibrariesRepeatMasker Organisme "Drosophila melanogaster" LesLibraries] } if {[string equal -nocase $Organisme "rat"]} { return [InterrogeLibrariesRepeatMasker Organisme "Rattus norvegicus" LesLibraries] } if {[string equal -nocase $Organisme "danio.lib"] || [regexp -nocase "Danio" $Organisme]} { return "danio.lib" } if {[string equal -nocase $Organisme "Bos taurus"] || [regexp -nocase "cow" $Organisme]} { return "cow" } set LesOrganismes [InterrogeLibrariesRepeatMasker LesOrganismes] lappend LesOrganismes "Vertebrata" "Mammalia" "Bos taurus" set LesPhylums [lindex [InterrogeClassificationTaxonomique $Organisme LesPhylums] 0] set LesLibrariesSelect {} set NbPhylumEnCommunMax 0 foreach Specie $LesOrganismes { set LesPhylumsDesSpecies [lindex [InterrogeClassificationTaxonomique $Specie LesPhylums] 0] set NbPhylumEnCommun 0 foreach Phylum $LesPhylums Phylum2 $LesPhylumsDesSpecies { if {$Phylum != $Phylum2} {break} incr NbPhylumEnCommun } Espionne "$Specie $NbPhylumEnCommun" if {$NbPhylumEnCommun < $NbPhylumEnCommunMax} {continue} set LesLibraries [InterrogeLibrariesRepeatMasker Organisme $Specie LesLibraries] if {$Specie == "Vertebrata"} {set LesLibraries [InterrogeLibrariesRepeatMasker Organisme "Other vertebrates" LesLibraries]} if {$Specie == "Mammalia" } {set LesLibraries [InterrogeLibrariesRepeatMasker Organisme "Other mammalians" LesLibraries ]} if {$Specie == "Bos taurus"} {set LesLibraries [list "cow"]} if {$NbPhylumEnCommunMax < $NbPhylumEnCommun} { set LesLibrariesSelect $LesLibraries set NbPhylumEnCommunMax $NbPhylumEnCommun continue } foreach Library $LesLibraries {lappend LesLibrariesSelect $Library} } if {$NbPhylumEnCommunMax < $NbPhylumEnCommunMin} {return} return [lsort -unique $LesLibrariesSelect] } proc LesLigneesUsageUnique {} { foreach AppeleeAppelante [LesProceduresUsageUnique] { scan $AppeleeAppelante "%s %s" Appelee Appelante set AppelanteDe($Appelee) $Appelante lappend AppeleePar($Appelante) $Appelee # Espionne "set AppelanteDe($Appelee) $Appelante" # Espionne "lappend AppeleePar($Appelante) $Appelee > [set AppeleePar($Appelante)]" lappend LesUsageUnique $Appelee } foreach Procedure $LesUsageUnique { if {[info exists AppeleePar($Procedure)]} { # Espionne "j'abandonne $Procedure car appelante de [set AppeleePar($Procedure)]" continue } set LaLignee {} lappend LaLignee $Procedure while 1 { if {[info exists AppelanteDe($Procedure)]} { set Procedure [set AppelanteDe($Procedure)] lappend LaLignee $Procedure } else { break } } Espionne "[llength $LaLignee] [join $LaLignee " "]" } } proc LesLignesDesJumeauxAccessProt {ListeNoms FichierRedondance} { set JR [TrouveLeOldJR $ListeNoms] if {$JR==""} { set LesJumeaux [split $ListeNoms " "] set JR [lindex $LesJumeaux 0] } set AccessProtAChercher [InterrogeProtAndmRNAChoisis $JR ProteineChoisie Access] if {$AccessProtAChercher!="" && $AccessProtAChercher!="NOPROTEIN"} { set LesLignesDeJumeaux {} #set NewLigne "" foreach Ligne [LesLignesDuFichier $FichierRedondance] { set Nom [TrouveLeOldJR $Ligne] if {$Nom==""} { set LesJumeaux [split $Ligne " "] set Nom [lindex $LesJumeaux 0] } set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {$AccessProt!="" && $AccessProt!="NOPROTEIN" && $AccessProt==$AccessProtAChercher && $Nom!=$JR} { lappend LesLignesDeJumeaux $Ligne #set NewLigne [concat $NewLigne $Ligne] } } #return [concat $ListeNoms $NewLigne] return $LesLignesDeJumeaux } return "" } proc LesLignesDuFichier {{Fichier ""}} { if { $Fichier == "" } {return {}} if {[regexp -nocase {https?\://|ftp\://} $Fichier]} { return [split [HttpCopy $Fichier] "\n"] } ;#rR 2014/07/02 if {[regexp {\.gz$} $Fichier]} { return [split [exec zcat $Fichier] "\n"] } set LesLignes {} set f [open $Fichier r] while {[gets $f Ligne]>=0} { lappend LesLignes $Ligne } close $f return $LesLignes } proc LesLignesDuGz {Fichier} { set f [open $Fichier] zlib push gunzip $f set LesLignes {} while {[gets $f Ligne]>=0} { lappend LesLignes $Ligne } close $f return $LesLignes } proc LesLignesDuTexte {Texte} { return [split $Texte "\n"] } proc LesLignesEntreExpressionsDuFichier {Fichier A B {BExclu SecondExcluded}} { if {$BExclu=="SecondIncluded"} { set BExclu 1 } else { set BExclu 0 } set OnYEst 0 set LesBonnes {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp $A $Ligne]} { set OnYEst 1 } if {[regexp $B $Ligne] && $BExclu} { break } if {$OnYEst} { lappend LesBonnes $Ligne } if {[regexp $B $Ligne]} { break } } return $LesBonnes } proc LesLignesIaJDuFichier {Fichier i j} { return [lrange [LesLignesDuFichier $Fichier] $i $j] # return [lrange [LesPremieresLignesDuFichier $Fichier $j] [incr i -1] end] } proc LesLignesTrieesSurUneClefEntete {LesLignes LesIndices} { if {$LesIndices=={}} { return $LesLignes } set Indice [lindex $LesIndices 0] set Car "_" set LesLignesTriees {} set LesClefs {} foreach Ligne $LesLignes { set Entete "" scan $Ligne "%s" Entete if {$Entete==""} { continue } set LesMots [split $Entete $Car] set Clef [lindex $LesMots $Indice] lappend LesLignesPour($Clef) $Ligne lappend LesClefs $Clef } foreach Clef [lsort -unique $LesClefs] { set LesLignes [set LesLignesPour($Clef)] foreach Ligne $LesLignes { lappend LesLignesTriees $Ligne } } return [LesLignesTrieesSurUneClefEntete $LesLignesTriees [lrange $LesIndices 1 end]] } proc LesLignesVitales {Fichier {SansVide ""} {SansBlanc ""}} { set SansVide [string equal -nocase $SansVide "SansVide"] set SansBlanc [string equal -nocase $SansBlanc "SansBlanc"] Wup "Returns the lists of the lines from Fichier, accepts continuation and ignores # or empty lines" set LesVitales {} set Lu "" foreach Ligne [LesLignesDuFichier $Fichier] { if {$SansBlanc} { regsub -all " " $Ligne "" Ligne } if {[regexp {\#} $Ligne]} { regsub {\#.*$} $Ligne "" Ligne } if {$SansVide && [string trim $Ligne]==""} { continue } if { ! [regexp -nocase {[^ ]} $Ligne]} { continue } if {[regexp {\\$} $Ligne]} { regsub {\\$} $Ligne "" Ligne append Lu $Ligne } else { append Lu $Ligne lappend LesVitales $Lu set Lu "" } } return $LesVitales } proc LesLocalisationDesPSORTII {} { Wup "Les localisations cellulaires possibles donnees par PSORTII" set lesLocsPossibles [list "extracellular" "cytoplasmic" "nuclear" "mitochondrial" "peroxisomal" "Golgi" "endoplasmic reticulum" "vacuolar" "vesicles of secretory system" "plasma" "cytoskeletal"] return "$lesLocsPossibles" } proc LesLocalisationsSurChroContig {NomVoulu} { global LesLocalisationsSurChroContig global RepertoireDuGenome JeMeSignale if {[info exists LesLocalisationsSurChroContig($NomVoulu)]} { return [set LesLocalisationsSurChroContig($NomVoulu)] } if {[info exists LesLocalisationsSurChroContig("EstCharge")]} { return [set LesLocalisationsSurChroContig("EstCharge")] } set Fichier "$RepertoireDuGenome/fiches/localisationchrocontig" if {[file exists $Fichier]} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom regsub "$Nom " $Ligne "" Ligne lappend LesLocalisationsSurChroContig($Nom) $Ligne } set LesLocalisationsSurChroContig("EstCharge") [list "No value"] return [LesLocalisationsSurChroContig $NomVoulu] } if {$NomVoulu=="Create"} { set Liste [ListeDesPABs] set CreeFichier 1 } else { set Liste [list $NomVoulu] set CreeFichier 0 } foreach Nom $Liste { set LesHomologues [ChaqueSegmentDuBlastN $Nom] set LesChroContig($Nom) {} set OldChroContig "" foreach Homologue $LesHomologues { scan $Homologue "%s %s %s %s %s %f %d %d %d %d" ChroContigTroncon n1 n2 Orga PrctId E DQ FQ Deb Fin if {[expr $E > 1.e-3] } { continue } regsub {\:} $ChroContigTroncon " " ChroContigTroncon regsub {_} $ChroContigTroncon " " ChroContigTroncon set Troncon 0 scan $ChroContigTroncon "%s %s %s" Chro Contig Troncon set Troncon [Base10 $Troncon] regsub {^0} $Chro "" Chro if {![info exists DejaVu($Nom,$Chro,$Contig)]} { set DejaVu($Nom,$Chro,$Contig) 1 if {$Deb<$Fin} { set MeilleureGauche($Nom,$Chro,$Contig) $Deb set MeilleureDroite($Nom,$Chro,$Contig) $Fin } else { set MeilleureGauche($Nom,$Chro,$Contig) $Fin set MeilleureDroite($Nom,$Chro,$Contig) $Deb } lappend LesNomChroContigDansLOrdre($Nom) "$Nom,$Chro,$Contig" } lappend LesHomologuesDe($Nom,$Chro,$Contig) $Homologue } if {[info exists DejaVu]} { unset DejaVu } if { ! [info exists LesNomChroContigDansLOrdre($Nom)]} { continue } foreach NCC [set LesNomChroContigDansLOrdre($Nom)] { foreach Homologue [set LesHomologuesDe($NCC)] { scan $Homologue "%s %s %s %s %s %f %d %d %d %d" ChroContigTroncon n1 n2 Orga PrctId E DQ FQ Deb Fin regsub {\:} $ChroContigTroncon " " ChroContigTroncon regsub {_} $ChroContigTroncon " " ChroContigTroncon set Troncon 0 scan $ChroContigTroncon "%s %s %s" Chro Contig Troncon set Troncon [Base10 $Troncon] regsub {^0} $Chro "" Chro if {![info exists DejaVu($Nom,$Chro,$Contig)]} { lappend LesChroContig($Nom) "$Chro $Contig" set DejaVu($Nom,$Chro,$Contig) 1 } lappend LesPositions($Nom,$Chro,$Contig) $Deb $Fin if {[expr $Deb < $Fin]} { set Sens($Nom,$Chro,$Contig) "+" } else { set Sens($Nom,$Chro,$Contig) "-" } } set LesLocas {} foreach Loc [set LesChroContig($Nom)] { scan $Loc "%s %s" Chro Contig set LesPosTriees [lsort -integer [set LesPositions($Nom,$Chro,$Contig)]] set MG [set MeilleureGauche($Nom,$Chro,$Contig)] set iMG [lsearch $LesPosTriees $MG] while 1 { if {$iMG<=0} { break } set NewMG [lindex $LesPosTriees [incr iMG -1]] if {[expr $NewMG + 100000 < $MG]} { break } set MG $NewMG } set MD [set MeilleureDroite($Nom,$Chro,$Contig)] set iMD [lsearch $LesPosTriees $MD] set L [expr [llength $LesPosTriees] -1] while 1 { if {$iMD>=$L} { break } set NewMD [lindex $LesPosTriees [incr iMD 1]] if {[expr $MD + 100000 < $NewMD]} { break } set MD $NewMD } set Gauche $MG set Droite $MD set Orient [set Sens($Nom,$Chro,$Contig)] Espionne "LesLocalisation sur $Nom $Chro $Contig $Gauche $Droite $Orient" lappend LesLocas "$Chro $Contig $Gauche $Droite $Orient" } } if {$CreeFichier} { set LesLocalisationsSurChroContig($Nom) $LesLocas foreach Lo $LesLocas { AppendAuFichier $Fichier "$Nom $Lo" } } else { return $LesLocas } set LesLocalisationsSurChroContig("EstCharge") [list "No value"] } if {$CreeFichier} { return $Fichier } return [LesLocalisationsSurChroContig $NomVoulu] } proc LesLocalisesAvecProteine {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] set n 0 set NbContig 0 set RepProttfa "[RepertoireDuGenome]/prottfa" foreach Nom $Liste { if {[PolyLocalise $Nom]!="NoLocalization"} { set Fichier "$RepProttfa/$Nom" if {[file exists $Fichier]} { set Contenu [ContenuDuFichier $Fichier] if {[regexp "CONTIG" $Contenu]} {incr NbContig} incr n } } } Espionne $NbContig return $n } proc LesLocalisesSansRien {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] set n 0 set RepProttfa "[RepertoireDuGenome]/prottfa" foreach Nom $Liste { if {[PolyLocalise $Nom]!="NoLocalization"} { set Fichier "$RepProttfa/$Nom" if {![file exists $Fichier]} { set LesCopsEST [LesMeilleursCopainsDuBlast $Nom "blastnest"] if {$LesCopsEST=={} ||[lindex $LesCopsEST 0]=="File not yet available" ||[lindex $LesCopsEST 0]=="No value" ||[lindex $LesCopsEST 0]=="No hit"} { set LesCopsGenembl [LesMeilleursCopainsDuBlast $Nom "blastngenembl"] if {$LesCopsGenembl=={} ||[lindex $LesCopsGenembl 0]=="File not yet available" ||[lindex $LesCopsGenembl 0]=="No value" ||[lindex $LesCopsGenembl 0]=="No hit"} {incr n} } } } } return $n } proc LesLocsDesProbesAffy {FichierRMA FichierProbesets FichierSortie FichierSortieAbsents} { if {![file exists $FichierProbesets]} { foreach Ligne [LesLignesDuFichier $FichierRMA] { set Ligne [string trim $Ligne] if {$Ligne==""} {continue} if {[regexp "probeset" $Ligne]} {continue} set LesElts [split $Ligne "\t"] set probeset [lindex $LesElts 0] lappend LesProbesets $probeset } SauveLesLignes $LesProbesets dans $FichierProbesets } else { foreach Ligne [LesLignesDuFichier $FichierProbesets] { lappend LesProbesets $Ligne } } #FaireLire "nb probesets: [llength $LesProbesets]" set LesProbeSets [lsort -unique $LesProbesets] #FaireLire "nb probesets UNIQ: [llength $LesProbesets]" set probeset "" foreach probeset $LesProbeSets { Espionne $probeset set LesChros "" set LesChros [InterrogeAffy_UCSC "" human $probeset Chromosome] if {$LesChros==""} { AppendAuFichier $FichierSortieAbsents "$probeset" } foreach chro $LesChros { set LesDebuts "" set LesDebuts [InterrogeAffy_UCSC "" human $probeset $chro Debut] set LesFins [InterrogeAffy_UCSC "" human $probeset $chro Fin] foreach Debut $LesDebuts Fin $LesFins { AppendAuFichier $FichierSortie "$probeset\t$chro\t$Debut\t$Fin" } } } } proc LesLongueurs {FichierTFAs} { foreach Sale [LesLignesDuFichier $FichierTFAs] { if {[regexp "^>" $Sale]} { scan $Sale "%s" Access if {[info exists LongSale]} { puts "$LongSale $LongPropre $Access" } set LongSale 0 set LongPropre 0 } regsub -all -nocase {[^a-z]} $Sale "" Propre incr LongSale [string length $Sale] incr LongPropre [string length $Propre] } puts "$LongSale $LongPropre $Access" exit } proc LesLongueursDesProteines {{GetWhat ""}} { set LaSortie {} foreach Nom [ListeDesPABs] { set SeqPro [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"] set L [string length $SeqPro] lappend LaSortie "$Nom [Alias $Nom] $L" } if {[string equal -nocase "GetList"]} { return $LaSortie } if {[string equal -nocase "GetText"]} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie "" "Proteins Length"] } proc LesLongueursDesSequences {{Rep ""} {Quoi ""}} { if {$Rep==""} { set Rep "nuctfa" } if {$Quoi==""} { set Quoi "Histo" } foreach Nom [ListeDesPABs] { set Fic "[RepertoireDuGenome]/$Rep/$Nom" if {[FileAbsent $Fic]} {continue} set Seq [QueLaSequenceDuFichierTFA $Fic] set L [string length $Seq] lappend NomLong "$Nom $L" if { ! [info exists Histo($L)]} { set Histo($L) 0 } incr Histo($L) } if {$Quoi=="NomLongueur"} { return $NomLong } foreach L [lsort -integer [array names Histo]] { lappend LHisto "$L [set Histo($L)]" } return $LHisto } proc LesLoupes {{OrgaOuPAB ""} {SampledOnly ""} {FichierBilan ""}} { Wup "Determine dans un fichier bilanXHDA les loupes,rend des orgas pour un PAB, et vice versa" Wup "Ceci pour les Sampled uniquement ou Tous leurs PABs (si orga) leurs orgas (si PAB)" Wup "Rend aussi laListecomplete des Orgas ou PABs loupes" global RepertoireDuGenome global LesLoupes if {[info exists LesLoupes($OrgaOuPAB)]} { return [set LesLoupes($OrgaOuPAB)] } if {[info exists LesLoupes]} { return ""} if {$SampledOnly=="Tous"} {set SampledOnly 0} else {set SampledOnly 1} set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" if {$FichierBilan==""} { set LesFichiersBilan [glob -nocomplain "$RepBilan/*"] } if { $FichierBilan!="" && ! [regexp "/" $FichierBilan]} { set LesFichiersBilan "$RepBilan/$FichierBilan" } #EspionneL $LesFichiersBilan set LesPABsLoupes {} foreach file $LesFichiersBilan { if { ! [file exists $file]} { continue } foreach ligne [LesLignesDuFichier $file] { scan $ligne "%s %s %d %d %d" PAB Orga T B J if { $ligne == "" } { continue } if {[CouleurHDACroises [list $T $B $J]]=="J"} { set Organisme [Glossaire $Orga Complet] if {$SampledOnly && ! [SampledOrganism $Organisme]} { continue } lappend LesLoupes($PAB) $Organisme lappend LesLoupes($Organisme) $PAB if { ! [info exists DejaVu($PAB)]} { lappend LesPABsLoupes $PAB set DejaVu($PAB) 1 } if { ! [info exists DejaVu($Organisme)]} { lappend LesOrganismesLoupes $Organisme set DejaVu($Organisme) 1 } } } } if {! [info exists LesOrganismesLoupes]} { set LesLoupes(LesOrganismesMerci) "Aucun" } else { set LesLoupes(LesOrganismesMerci) $LesOrganismesLoupes } if {! [info exists LesOrganismesLoupes]} { set LesLoupes(LesPABsMerci) "Aucun" } else { set LesLoupes(LesPABsMerci) $LesPABsLoupes } return [LesLoupes $OrgaOuPAB] } proc LesLoupesDe {Quoi} { global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" if {[EstUnPAB $Quoi]} { set Fichier "$RepXHda/LoupeDeTous.parpab" if {[File exists $Fichier]} { return [LitLoupesParPAB $Fichier $Quoi] } else { return "$Fichier do not exists" } } else { set Fichier "$RepXHda/LoupeDeTous.parorga" if {[File exists $Fichier]} { return [LitLoupesParORGA $Fichier $Quoi] } else { return "$Fichier do not exists" } } } proc LesLoupesDeTous {{Fichier ""}} { Wup "Rend les Loupes ou jaunes de tous les organismes et PABs classes par PAB ou par Orga dans LoupeDeTous.parpab et LoupeDeTous.parorga" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" if { $Fichier!="" && ! [regexp "/" $Fichier]} { set FichierBilan "$RepBilan/$Fichier" } if { $Fichier=="" } { set FichierBilan "" } set LesOrgas [LesLoupes "LesOrganismesMerci" "Tous" $FichierBilan] set LesPABs [LesLoupes "LesPABsMerci" "Tous" $FichierBilan] set Resultat {} foreach element $LesOrgas { lappend Resultat "[lrange $element 0 end] [LesLoupes $element "Tous" $FichierBilan]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDeTous.parorga"] set Resultat {} foreach element $LesPABs { lappend Resultat "$element [join [LesLoupes $element "Tous" $FichierBilan] " "]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDeTous.parpab"] return "" } proc LesLoupesDiaBac {{Fichier ""}} { Wup "Rend les Loupes ou jaunes uniquement des DiaBacs classes par PAB ou par Orga dans LoupeDiaBac.parpab et LoupeDiaBac.parorga" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" if { $Fichier!="" && ! [regexp "/" $Fichier]} { set FichierBilan "$RepBilan/$Fichier" } if { $Fichier=="" } { set FichierBilan "" } set LesOrgas [LesLoupes "LesOrganismesMerci" "SampledOnly" $FichierBilan] set LesPABs [LesLoupes "LesPABsMerci" "SampledOnly" $FichierBilan] set Resultat {} foreach element $LesOrgas { lappend Resultat "[lrange $element 0 end] [LesLoupes $element "SampledOnly" $FichierBilan]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDiaBac.parorga"] set Resultat {} foreach element $LesPABs { lappend Resultat "$element [join [LesLoupes $element "SampledOnly" $FichierBilan] " "]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDiaBac.parpab"] return "" } proc LesMacs {{quoi name}} { if {! [info exists ::db]} { return "" } elseif {$quoi eq "name"} { return [$::db eval {select name from mac}] } else { return [$::db eval {select pk_mac from mac}] } } proc LesManquants {} { foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/bilancompl/*"] { set Old [file tail $Fichier] set New [NouveauNom $Old] if {$New==""} { File delete -force $Fichier } else { if {![file exists "[RepertoireDuGenome]/bilan/$New"]} { File rename -force "[RepertoireDuGenome]/bilancompl/$Old" "[RepertoireDuGenome]/bilancompl/$New" } else { File delete -force $Fichier } } } } proc LesMatchTFBSSelectedPourPromAn {FileTFA Profile {TSSPosition 10001}} { set LesInfos {} set ResultType "TFBSResearch" set FileOUT "$FileTFA.Match_$Profile" #Execution du programme Match sur FileTFAMatchMasked Match $FileTFA $FileOUT $Profile AskMatch unset AskMatchMatrixAccess2Id2Name unset foreach Motif [AskMatch $FileOUT LesMotifs] { Espionne $Motif #Un motif par core de matrice puis x presence par matrice complete ayant ce core set NbPresence [AskMatch $FileOUT Motif $Motif NbPresence] for {set Presence 1} {$Presence <= $NbPresence} {incr Presence} { #Espionne "$Motif $Presence" ###Selection selon le sens, elimination des "-" set Sens [AskMatch $FileOUT Motif $Motif n $Presence Sens] set Debut [AskMatch $FileOUT Motif $Motif n $Presence Debut] set Fin [AskMatch $FileOUT Motif $Motif n $Presence Fin] #Attention, la TSSDist est la dist entre le tss et la fin si en 5' et le debut si en 3' #Attention, pour l'instant la tss dist est calculee par rapport a la 1ere base du 1er exon et non par rapport au tss de ref!!! set TSSDist1 [expr -1 * ($TSSPosition - $Debut)] set TSSDist2 [expr -1 * ($TSSPosition - $Fin) ] if {[expr abs($TSSDist1)] < [expr abs($TSSDist2)]} {set TSSDist $TSSDist1} else {set TSSDist $TSSDist2} set ScoreCore [AskMatch $FileOUT Motif $Motif n $Presence ScoreCore] set Access [AskMatchMatrixAccess2Id2Name Id $Motif Access] set Name [AskMatchMatrixAccess2Id2Name Id $Motif Name] lappend LesInfos [list "Match_$Profile" $ResultType $Debut $Fin $Sens "" $TSSDist $ScoreCore $Name $Access $Presence] } } AskMatch unset AskMatchMatrixAccess2Id2Name unset return [lsort -index 6 -real -command CompareLaVADesNombres $LesInfos] } proc LesMauvaisInfos {} { foreach Nom [ListeDesFusions] { if { ! [EstUneFusion $Nom]} { continue } set Fusion [Fusion $Nom] if {[regexp "/" $Fusion]} {Informe $Nom} continue Espionne "\n\n\nFusion $Fusion" foreach Fus [split $Fusion "/"] { set NomA [StringApres "obtained by fusion of " dans $Fus] set PartA [ExtraitInfo $NomA "PartAofFusion"] Espionne "$NomA est PartA \n$PartA" set Double [StringSuivant "obtained by fusion of " dans $Fus] set BonneA [StringSuivant "obtained by fusion of " dans $PartA] if {$BonneA==$Double} { continue } Espionne "Je sucre $Fus" continue if {[regexp "because frameshift between" $Fus]} { set NomB [StringApres "obtained by fusion of $NomA and " dans $Fus] set PartB [ExtraitInfo $NomB "PartBofFusion"] Espionne "$NomB est PartB \n$PartB" } } } } proc LesMeilleursCopainsDuBlast {Nom {Rep blastngenembl}} { global LesMeilleursCopainsDuBlast global RepertoireDuGenome if {[info exists LesMeilleursCopainsDuBlast($Nom,$Rep)]} { return [set LesMeilleursCopainsDuBlast($Nom,$Rep)] } if {[info exists LesMeilleursCopainsDuBlast("EstCharge",$Rep)]} { return [set LesMeilleursCopainsDuBlast("EstCharge",$Rep)] } set Fichier "$RepertoireDuGenome/fiches/cops_$Rep" if { ! [file exists $Fichier]} { set LesMeilleursCopainsDuBlast("EstCharge",$Rep) [list "File not yet available"] return [set LesMeilleursCopainsDuBlast("EstCharge",$Rep)] } foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s" NomLu regsub "$NomLu " $Ligne "" Cop lappend LesMeilleursCopainsDuBlast($NomLu,$Rep) $Cop } set LesMeilleursCopainsDuBlast("EstCharge",$Rep) [list "No value"] return [LesMeilleursCopainsDuBlast $Nom $Rep] } proc LesMeilleursOntarioDeNosSequencesParBlast {{LesPABs ""}} { Wup "Permet de determiner les access equivalents de nos sequences dans la puce Ontario" Wup "Recherche faite au moyen de blast" set RepOntario "[RepertoireDuGenome]/Autres_Puces/Ontario/" set RepBanque "$RepOntario/blastn" if {$LesPABs==""} {set LesPABs [ListeOligos]} foreach PAB $LesPABs { set FichierBlast "$RepBanque/$PAB" set Identity 0.95 set PCoverQuery 0.90 set PCoverSubject 0.90 set TailleQuery [AskBlast $FichierBlast Taille] set NomQuery [AskBlast $FichierBlast Query] set NbSbjct [AskBlast $FichierBlast NbSubject] if {$NbSbjct=="0"} {Espionne "Petit probleme pas de hit";return ""} set LesProches "" for {set i 1} {$i <=$NbSbjct} {incr i} { set IdGlobal 0 set PRecouvrementQuery 0 set PRecouvrementSubject 0 set BId [AskBlast $FichierBlast Subject $i] #Pourcentage d'identite global: Aligne sur Total dans les alignements #Discremine les plus proches identiques sur les alignements des autres set IdGlobal [PourcentageDIdentiteGlobal $FichierBlast $BId] if {$IdGlobal<=$Identity} {continue} #Pourcentage d'identite etendu : Aligne sur Alignable #Discremine les identiques locaux (ex: poly A) de ceux bien alignes #PCoverQuery Query par rapport au Subject #set PRecouvrementQuery [PourcentageDeRecouvrement $FichierBlast $BId "Query"] #PCoverSubject Subject par rapport au Query set PRecouvrementSubject [PourcentageDeRecouvrement $FichierBlast $BId "Subject"] #Espionne ">>$BId IdGlobal $IdGlobal Cover S/Q $PRecouvrementQuery Cover Q/S $PRecouvrementSubject" #Espionne ">>$BId IdGlobal $IdGlobal Cover Q/S $PRecouvrementSubject" if {$PRecouvrementSubject <= $PCoverSubject} {continue} lappend LesProches $BId } AskBlast unsetfile $FichierBlast } return $LesProches } proc LesMeilleursOntarioDeNosSequencesParReference {{LesPABs ""}} { Wup "Permet de determiner les access equivalents de nos sequences dans la puce Ontario" Wup "Recherche faite au moyen du texte (InterrogeAccRefSeq)" set RepOntario "[RepertoireDuGenome]/Autres_Puces/Ontario/" set RepBanque "$RepOntario/blastn" set DirOligo "[RepertoireDuGenome]/Probes/RefSeqBLAST3" if {! [file exists $DirOligo]} { set DirOligo "/genomics/Actin/Probes/RefSeqBLAST3" } if {$LesPABs==""} {set LesPABs [ListeOligos]} foreach PAB $LesPABs { set AccRefSeq "" #Pour recupere l access RefSeq set AccRefSeq [ReturnBestHitFromLogFile $PAB $DirOligo] if {[regexp "Warning" $AccRefSeq]} {set AccRefSeq [lindex $AccRefSeq 1]} #regsub "RSHUM:NM" $AccRefSeq "NM_" AccRefSeq if {$AccRefSeq==""} { Espionne "Pb avec $PAB RefSeq est vide" continue } #A partir du RefSeq on cherche l access gscope du projet PuceEST set LesAccGscope [InterrogeLesAccRSEtUG_Ontario $AccRefSeq AccGscope] #Pour chaque access gscope du projet PuceEST on extrait les OriginalID et VerifiedID set LesOriginalID "" set LesVerifiedID "" set LesProches "" foreach Gscope $LesAccGscope { set OriginalID "" set VerifiedID "" set OriginalID [InterrogeLesAccRSEtUG_Ontario $Gscope OriginalID] set VerifiedID [InterrogeLesAccRSEtUG_Ontario $Gscope VerifiedID] if {$OriginalID!=""} { lappend LesProches "${OriginalID}_${VerifiedID}" } if {$OriginalID == "" || $VerifiedID == ""} { Espionne ">>pb $PAB $Gscope" } } } return "$LesProches" } proc LesMeilleursUMCUDeNosSequencesParBlast {{LesPABs ""}} { Wup "Permet de determiner les access equivalents de nos sequences dans la puce UMCU" Wup "Recherche faite au moyen de blast" set RepUMCU "[RepertoireDuGenome]/Autres_Puces/UMCU/" set RepBanque "$RepUMCU/blastn" switch -regexp -- $LesPABs { "ActiChip1" {set LesPABs [ActiChip1_0]} "ActiChip2" {set LesPABs [ActiChip2_0]} "default" {set LesPABs [ActiChip2_0]} } #Espionne "$LesPABs" foreach PAB $LesPABs { set FichierBlast "$RepBanque/$PAB" set Identity 0.95 set PCoverQuery 0.90 set PCoverSubject 0.90 set TailleQuery [AskBlast $FichierBlast Taille] set NomQuery [AskBlast $FichierBlast Query] set NbSbjct [AskBlast $FichierBlast NbSubject] if {$NbSbjct=="0"} {Espionne "Petit probleme pas de hit";return ""} set LesProches "" for {set i 1} {$i <=$NbSbjct} {incr i} { #Le recouvrement doit etre maximal de notre Query (seq ActiChip) vers Subject (seq UMCU) #A l inverse on peut etre plus souple dans le sens S vers Q set Identity 0.95 set PCoverQuery 0.90 set PCoverSubject 0.50 set IdGlobal 0 set PRecouvrementQuery 0 set PRecouvrementSubject 0 set BId [AskBlast $FichierBlast Subject $i] #Pourcentage d'identite global: Aligne sur Total dans les alignements #Discremine les plus proches identiques sur les alignements des autres set IdGlobal [PourcentageDIdentiteGlobal $FichierBlast $BId] if {$IdGlobal <= $Identity} {continue} #Pourcentage d'identite etendu : Aligne sur Alignable #Discremine les identiques locaux (ex: poly A) de ceux bien alignes #PCoverQuery Query par rapport au Subject set PRecouvrementQuery [PourcentageDeRecouvrement $FichierBlast $BId "Query"] Espionne ">>$PAB - $BId IdGlobal $IdGlobal Cover Q/S $PRecouvrementQuery" if {$PRecouvrementQuery <= $PCoverQuery} {continue} #PCoverSubject Subject par rapport au Query set PRecouvrementSubject [PourcentageDeRecouvrement $FichierBlast $BId "Subject"] Espionne ">>$PAB - $BId IdGlobal $IdGlobal Cover Q/S $PRecouvrementQuery Cover S/Q $PRecouvrementSubject" #Espionne ">>$PAB - $BId IdGlobal $IdGlobal Cover Q/S $PRecouvrementSubject" if {$PRecouvrementSubject <= $PCoverSubject} {continue} lappend LesProches $BId } AskBlast unsetfile $FichierBlast } return $LesProches } proc LesMeilleursUMCUDeNosSequencesParReference {{LesPABs ""}} { Wup "Permet de determiner les access equivalents de nos sequences dans la puce UMCU" Wup "Recherche faite au moyen du texte (InterrogeAccRefSeq)" set FichierUMCU "/genomics/g2/PuceUMCU/UMCU-H25k11.txt" set FichierUMCU "[RepertoireDuGenome]/Autres_Puces/UMCU/UMCU-H25k11.txt" set RepUMCU "[RepertoireDuGenome]/Autres_Puces/UMCU/" set RepBanque "$RepUMCU/blastn" switch -regexp -- $LesPABs { "ActiChip1" {set LesPABs [ActiChip1_0]} "ActiChip2" {set LesPABs [ActiChip2_0]} "default" {set LesPABs [ActiChip2_0]} } #Espionne "$LesPABs" foreach PAB $LesPABs { set LesProches "" set AccRefSeq "" set DirOligo "[RepertoireDuGenome]/Probes/RefSeqBLAST3" if {! [file exists $DirOligo]} { set DirOligo "/genomics/Actin/Probes/RefSeqBLAST3" } if {! [file exists "$DirOligo/${PAB}.log"]} { set DirOligo "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" if {! [file exists $DirOligo]} { set DirOligo "/genomics/Actin/Probes/NewRefSeqBLAST3" } if {! [file exists "$DirOligo/${PAB}.log"]} { continue } } #Pour recuperer l access RefSeq de notre seq ActiChip set AccRefSeq [ReturnBestHitFromLogFile $PAB $DirOligo] if {[regexp "Warning" $AccRefSeq]} {set AccRefSeq [lindex $AccRefSeq 1]} if {[regexp "RSHUM:NM" $AccRefSeq]} { regsub -all "RSHUM:NM" $AccRefSeq "NM_" AccRefSeq } set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set RepNuctfa "[RepertoireDuGenome]/nuctfa" set Query "$RepmRNA/$PAB" if {[file exists $Query]} { set DesignAccess [AccessDeLaBoite $PAB mRNA] } else { set Query "$RepNuctfa/$PAB" if {[file exists $Query]} { set DesignAccess [AccessDuTFADumRNA $Query] } else {set DesignAccess ""} } if {$AccRefSeq=="" && $DesignAccess==""} { Espionne "Pb avec $PAB RefSeq et Acc du design sont vide" continue } #Pour recuperer l access sur la puce UMCU #On teste d abord l access RefSeq et apres on teste l access Genbank set Oligo_ID [InterrogeLesInfoUMCU $FichierUMCU $AccRefSeq Oligo_ID] if { $Oligo_ID == ""} { set Oligo_ID [InterrogeLesInfosUMCU $FichierUMCU $DesignAccess Oligo_ID] if {$Oligo_ID == ""} {continue} #Si l access Genbank de notre ActiChip existe sur UMCU on le garde lappend LesProches "$DesignAccess" #Espionne "$PAB -- $DesignAccess -- $Oligo_ID" continue } #Si l access RefSeq de notre ActiChip existe sur UMCU on le garde lappend LesProches "$AccRefSeq" #Espionne "$PAB -- $AccRefSeq -- $Oligo_ID" } return "$LesProches" } proc LesMembresDeLaFamille {Nom} { global RepertoireDuGenome set RepFamille "$RepertoireDuGenome/xhda/famille" if {[file exists "$RepFamille/${Nom}.fam"] && [file size "$RepFamille/${Nom}.fam"]!=0} { set FichierFamille "$RepFamille/${Nom}.fam" } else { return "" } foreach ligne [LesLignesDuFichier $FichierFamille] { scan $ligne "%s %s %s" FPP PAB orga set Famille [lindex [split $FPP "_"] 0] lappend LesORGAsPABs $orga lappend LesORGAsPABs $PAB } return $LesORGAsPABs } 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 LesMetsTropLoin {{Quoi faux}} { foreach Nom [ListeDesPABs] { set Valeur [CodonStart $Nom] if {$Valeur==""} { continue } foreach {M P As} [split $Valeur " "] { set Poch [ExtraitInfo $Nom "met"] if {[regexp "faux" $Poch]} { lappend Lesfaux "$P faux $Nom" } if {[regexp "ok" $Poch]} { if {[info exists DejaVu($Nom)]} { continue } lappend Lesok "$P ok $Nom" } if {[regexp "plau" $Poch]} { if {[info exists DejaVu($Nom)]} { continue } lappend Lesplau "$P plau $Nom" } set DejaVu($Nom) 1 } } return [join [set Les$Quoi] "\n"] } proc LesMillionsEtLesScoresPourTousLesClustersDunChromo {Chromo {NbVoisins 6} {SeuilTolerance 2}} { #Chromo doit etre de la forme HS.... if {![regexp "^HS" $Chromo]} {return "Please, give a chromosome beginning by HS"} set ScoreMaxGlobal [ScoreMaxGlobal $NbVoisins] set ScoreMaxChromo [ScoreMaxChro $Chromo $NbVoisins] set ValeurSeuil [expr $ScoreMaxGlobal/$SeuilTolerance] if {$ScoreMaxChromo<=$ValeurSeuil} {return {}} set NbNoms 0 set LesClusters {} set Liste [LesNNScores $Chromo $NbVoisins] set ScoreMaxCluster 0 foreach Element $Liste { scan $Element "%s %d %s %d %d" nom score chro debut fin if {$score>$ValeurSeuil} { #Espionne $Element incr NbNoms if {$NbNoms==1} { set ScoreMaxCluster $score set BorneInf $debut } if {$NbNoms>=2} { if {$score>$ScoreMaxCluster} {set ScoreMaxCluster $score} set BorneSup $fin } } else { if {$NbNoms>=2} { set MillionDebut [expr round ($BorneInf/1000000) +1] set MillionFin [expr round ($BorneSup/1000000) +1] if {$MillionDebut!=$MillionFin} { set NbMillions [expr ($MillionFin-$MillionDebut)] if {$NbMillions==1} { lappend LesClusters "$Chromo $MillionDebut $ScoreMaxCluster" lappend LesClusters "$Chromo $MillionFin $ScoreMaxCluster" } else { for {set i 0} {$i<=$NbMillions} {incr i} { lappend LesClusters "$Chromo [expr $MillionDebut+$i] $ScoreMaxCluster" #Espionne "$Chromo [expr $MillionDebut+$i] $ScoreMaxCluster" } } } else { lappend LesClusters "$Chromo $MillionDebut $ScoreMaxCluster" } #EspionneL $LesClusters #Espionne "fin cluster" } set ScoreCluster 0 set ScoreMaxCluster 0 set NbNoms 0 } } #si bon nn score dans le dernier element : if {$score>$ValeurSeuil && $NbNoms>=2} { set MillionDebut [expr round ($BorneInf/1000000) +1] set MillionFin [expr round ($BorneSup/1000000) +1] if {$MillionDebut!=$MillionFin} { set NbMillions [expr ($MillionFin-$MillionDebut)] if {$NbMillions==1} { lappend LesClusters "$Chromo $MillionDebut $ScoreMaxCluster" lappend LesClusters "$Chromo $MillionFin $ScoreMaxCluster" } else { for {set i 0} {$i<=$NbMillions} {incr i} { lappend LesClusters "$Chromo [expr $MillionDebut+$i] $ScoreMaxCluster" } } } else { lappend LesClusters "$Chromo $MillionDebut $ScoreMaxCluster" } set ScoreCluster 0 set ScoreMaxCluster 0 set NbNoms 0 #Espionne "fin cluster" } if {$LesClusters=={}} {return ""} return $LesClusters } proc LesMinEtMax {Liste {CBS 0}} { set LesMinMax "" foreach Elt $Liste { Espionne $Elt if {$CBS==0} { set FichierCourbe "[RepertoireDuGenome]/PRIMA_CGH/$Elt" Espionne $FichierCourbe set x [InterrogeFichierCourbeCGH $FichierCourbe "unset"] set VMin [InterrogeFichierCourbeCGH $FichierCourbe VMin] set VMax [InterrogeFichierCourbeCGH $FichierCourbe VMax] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] lappend LesMinMax "$Elt\t$VMinf\t$VMaxf" } else { set FichierCourbe "[RepertoireDuGenome]/PRIMA_CGH_SEG/$Elt.seg" Espionne $FichierCourbe set x [InterrogeFichierSEG $FichierCourbe "unset"] set VMin [InterrogeFichierSEG $FichierCourbe VMin] set VMax [InterrogeFichierSEG $FichierCourbe VMax] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] lappend LesMinMax "$Elt\t$VMinf\t$VMaxf" } } EspionneL $LesMinMax return } proc LesMinMaxParChromo {Chromosome Liste {CBS 0}} { set LesMinMax "" foreach Elt $Liste { Espionne $Elt if {$CBS==0} { set FichierCourbe "[RepertoireDuGenome]/PRIMA_CGH/$Elt" Espionne $FichierCourbe if {[regexp -nocase "BAC" $Elt]} { set VMin [LaValeurMinCGHBAC $FichierCourbe $Chromosome] set VMax [LaValeurMaxCGHBAC $FichierCourbe $Chromosome] } else { set VMin [LaValeurMinCGHOligo $FichierCourbe $Chromosome] set VMax [LaValeurMaxCGHOligo $FichierCourbe $Chromosome] } set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] lappend LesMinMax "$Elt\t$Chromosome\t$VMinf\t$VMaxf" } else { set FichierCourbe "[RepertoireDuGenome]/PRIMA_CGH_SEG/$Elt.seg" Espionne $FichierCourbe set x [InterrogeFichierSEG $FichierCourbe "unset"] set VMin [LaValeurMinCGHSeg $FichierCourbe $Chromosome] set VMax [LaValeurMaxCGHSeg $FichierCourbe $Chromosome] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] lappend LesMinMax "$Elt\t$Chromosome\t$VMinf\t$VMaxf" } } EspionneL $LesMinMax return } proc LesMonoLocsDesProbesAffy {FichierRMA FichierProbesets FichierSortie} { if {![file exists $FichierProbesets]} { foreach Ligne [LesLignesDuFichier $FichierRMA] { set Ligne [string trim $Ligne] if {$Ligne==""} {continue} if {[regexp "probeset" $Ligne]} {continue} set LesElts [split $Ligne "\t"] set probeset [lindex $LesElts 0] lappend LesProbesets $probeset } SauveLesLignes $LesProbesets dans $FichierProbesets } else { foreach Ligne [LesLignesDuFichier $FichierProbesets] { lappend LesProbesets $Ligne } } Espionne "nb probesets: [llength $LesProbesets]" foreach probeset $LesProbesets { Espionne $probeset set LesChros [InterrogeAffy_UCSC "" human $probeset Chromosome] if {[llength $LesChros]>1} {continue} set LesDebuts [InterrogeAffy_UCSC "" human $probeset $LesChros Debut] if {[llength $LesDebuts]>1} {continue} set LesFins [InterrogeAffy_UCSC "" human $probeset $LesChros Fin] #lappend LesMonoLocsProbesets "$probeset\t$LesChros\t$LesDebuts\t$LesFins" AppendAuFichier $FichierSortie "$probeset\t$LesChros\t$LesDebuts\t$LesFins" } #SauveLesLignes $LesMonoLocsProbesets dans $FichierSortie } proc LesMotsDeLaLigne {Ligne {REX ""}} { return [split [LigneDesMots $Ligne $REX] " "] } proc LesMotsDeLaLigneTabulee {Ligne {Tab ""}} { if {$Tab==""} { set Tab "," } set LesC [split $Ligne ""] set LesP [concat [list " "] [lrange $LesC 0 end-1]] set InQuote 0 set Mot "" lappend LesP " " lappend LesC $Tab set LesMots {} foreach P $LesP C $LesC { if {$C=="\"" && $P!="\\"} { if {$InQuote} { set InQuote 0 } else { set InQuote 1 } continue } if {$C==$Tab && ! $InQuote} { lappend LesMots $Mot ; set Mot "" ; continue } append Mot $C } return $LesMots } proc LesMotsDuTexte {Texte} { regsub -all {[ \t\,\;\n\r]+} $Texte " " Texte set Texte [string trim $Texte] set LesMots [split $Texte " "] return $LesMots } proc LesMotsImportants {Ligne} { regsub -all "EC " $Ligne "EC_" Ligne regsub -all -nocase {[^a-z0-9\-_\+\.]} $Ligne " " Ligne set LesImportants {} foreach Mot [LesMotsDeLaLigne $Ligne] { if { ! [regexp -nocase {[a-z]} $Mot]} { continue } regsub -all {^\.|\.$} $Mot "" Mot regsub -all {\.} $Mot "_" Mot lappend LesImportants $Mot } return $LesImportants } proc LesMultiLocsDesProbesAffy {FichierRMA FichierProbesets FichierSortie} { if {![file exists $FichierProbesets]} { foreach Ligne [LesLignesDuFichier $FichierRMA] { set Ligne [string trim $Ligne] if {$Ligne==""} {continue} if {[regexp "probeset" $Ligne]} {continue} set LesElts [split $Ligne "\t"] set probeset [lindex $LesElts 0] lappend LesProbesets $probeset } SauveLesLignes $LesProbesets dans $FichierProbesets } else { foreach Ligne [LesLignesDuFichier $FichierProbesets] { lappend LesProbesets $Ligne } } FaireLire "nb probesets: [llength $LesProbesets]" foreach probeset $LesProbesets { Espionne $probeset set LesChros [InterrogeAffy_UCSC "" human $probeset Chromosome] if {[llength $LesChros]==1} { set LesDebuts [InterrogeAffy_UCSC "" human $probeset $LesChros Debut] if {[llength $LesDebuts]==1} {Espionne "$probeset monoloc";continue} } Espionne "$probeset leschros: $LesChros" foreach chro $LesChros { set LesDebuts [InterrogeAffy_UCSC "" human $probeset $chro Debut] set LesFins [InterrogeAffy_UCSC "" human $probeset $chro Fin] Espionne "$probeset chro: $chro lesdebuts:$LesDebuts lesfins:$LesFins" # Double boucle!!! foreach Debut $LesDebuts Fin $LesFins { Espionne "coucou $probeset $chro $Debut $Fin" #set PosMid [expr ($Fin-$Debut)/2 + $Debut] #lappend LesMultiLocsProbesets "$probeset\t$chro\t$Debut\t$Fin" AppendAuFichier $FichierSortie "$probeset\t$chro\t$Debut\t$Fin" } } } #SauveLesLignes $LesMultiLocsProbesets dans $FichierSortie } proc LesMut {Nom} { set L [ExtraitInfo $Nom "Mut:"] regsub -all " / " $L "/" L return [split $L "/"] } proc LesMutantsDe {PGS {Quoi ""}} { global LesMutantsDe Wup "Quoi can be Sites or Names" if {$Quoi==""} { set Quoi "Sites" } if {[info exists LesMutantsDe($PGS,$Quoi)]} { return [set LesMutantsDe($PGS,$Quoi)] } if {[info exists LesMutantsDe("EstCharge")]} { return {} } set LesMutantsDe("EstCharge") 1 set LesGrandsFreres {} foreach Nom [ListeDesPABs] { set Texte [ExtraitInfo $Nom "Muted"] if {$Texte==""} { continue } if { ! [regexp "mutation of" $Texte]} { continue } set GrandFrere [StringApres "mutation of" dans $Texte] lappend LesMutantsDe($GrandFrere,Names) $Nom set LesMutantsDe($Nom,SonGrandFrere) $GrandFrere regsub { *mutation +of +[^ ]+ +[^ ]+ } $Texte "" TexteCodes set LesCodes [split $TexteCodes] set LesCoOrdonnes {} foreach Code $LesCodes { if { ! [regexp -nocase {[a-z]} $Code]} { continue } regsub {[0-9]+} [string toupper $Code] " & " Coco scan $Coco "%s %d %s" AncienP PosAncienP NouveauP set LongAncienP [string length $AncienP] lappend LesCoOrdonnes "$AncienP $PosAncienP $NouveauP" lappend LesMutantsDe($GrandFrere,Sites) $PosAncienP lappend LesGrandsFreres $GrandFrere } } set LesGrandsFreres [lsort -u $LesGrandsFreres] set LesMutantsDe(LaListeDes,GrandsFreres) $LesGrandsFreres foreach GrandFrere $LesGrandsFreres { set LesMutantsDe($GrandFrere,Sites) [lsort -integer -unique [set LesMutantsDe($GrandFrere,Sites)]] } return [LesMutantsDe $PGS $Quoi] } 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 LesNNScores {Chromo {Nvoisins 6}} { if {![regexp "^HS" $Chromo]} {return "Please, give a chromosome beginning by HS"} if {[RepertoireDuGenome]=="[GscopeDatabaseDir AffyTarget]" || [RepertoireDuGenome]=="[GscopeDatabaseDir Affy]"} { set Affy "target" } else { set Affy "" } foreach CodeGscope [ListeDesDifferentiellementExprimesSansJumeaux $Affy] { if {$CodeGscope!=""} { set Vu($CodeGscope) 1 } } set ListeDeListes {} foreach Nom [ListeDesPABs] { if {[ListeLesInfosDeLaLocalisationSurChromosome $Nom]!={}} { set Chro [lindex [ListeLesInfosDeLaLocalisationSurChromosome $Nom] 1] if {$Chro!=$Chromo} {continue} lappend ListeDeListes [ListeLesInfosDeLaLocalisationSurChromosome $Nom] } } set ListeFinale {} #tri de la liste de liste selon borne inferieure set ListeDeListesTriee [lsort -integer -index 2 $ListeDeListes] set IndicePetiteListe 0 foreach PetiteListe $ListeDeListesTriee { set Nom [lindex $PetiteListe 0] #Espionne $Nom if {![info exists Vu($Nom)]} { #Espionne "nom jete" incr IndicePetiteListe continue } set Debut [lindex $PetiteListe 2] set Fin [lindex $PetiteListe 3] set Score 0 set PetiteListeTemp {} #determination du score pour ce nom set IndiceDuVoisinExtremeVersP [expr $IndicePetiteListe - $Nvoisins] set IndiceDuVoisinExtremeVersQ [expr $IndicePetiteListe + $Nvoisins] for {set i $IndiceDuVoisinExtremeVersP} {$i <= $IndiceDuVoisinExtremeVersQ} {incr i} { if {$i==$IndicePetiteListe} {continue} set lVoisin [lindex $ListeDeListesTriee $i] if {$lVoisin != ""} { set NomDuVoisin [lindex $lVoisin 0] if {[info exists Vu($NomDuVoisin)]} { incr Score } } } if {$Score!=0} { set PetiteListeTemp [list $Nom $Score $Chromo $Debut $Fin] lappend ListeFinale $PetiteListeTemp } incr IndicePetiteListe } if {$ListeFinale!= {}} {set ListeFinale [lsort -integer -increasing -index 3 $ListeFinale]} return $ListeFinale } proc LesNmManquants {} { foreach I [RetChip ListOf Index] { set NM [RetChip $I "refseq_PIQOR"] #Espionne "$I=>$NM existe" if {$NM == ""} { continue } if { [regexp {^NM_[0-9]+$} $NM] } { set NMSt [NmEnStock $NM] if {$NMSt != ""} {continue} else { puts "la ligne $I a un NM=$NM qu'on ne trouve pas" } } if { [regexp "," $NM] } { set sesNM [split $NM ","] foreach X $sesNM { set NMSt [NmEnStock $X] if {$NMSt != ""} {continue} else { puts "la ligne $I a un de ses NM qu'on ne trouve pas" } } } } } proc LesNoms {{PABouNomsInteressantsouListeouFichier PAB} {Quoi ""}} { if {$PABouNomsInteressantsouListeouFichier == "PAB"} {return [ListeDesPABs]} if {$PABouNomsInteressantsouListeouFichier == "NomsInteressants"} { set Fichier "[RepertoireDuGenome]/fiches/LesNomsInteressants" if {![file exists $Fichier]} {return [ListeDesPABs]} return [lsort -unique [ContenuDuFichier $Fichier]] } if {$PABouNomsInteressantsouListeouFichier == "Liste"} { return $Quoi } if {$PABouNomsInteressantsouListeouFichier == "Fichier"} { return [lsort -unique [ContenuDuFichier $Quoi]] } return [ListeDesPABs] } proc LesNomsDesSeqsSel {} { set Ln {} if {[QuelMode] eq "seqlab"} { set LNoms $::LNSeqlab } else { set LNoms $::LNOrdali } foreach e $::NomSeqSel { lassign [split $e .] y x incr y -1 set nom [lindex $LNoms $y] if {$nom ne ""} { lappend Ln $nom } } return $Ln } proc LesNomsEnStock {K {Quoi Interrogation}} { global LesNomsEnStock if {$Quoi=="UnSet" && [info exists LesNomsEnStock($K)]} { unset LesNomsEnStock($K) return } if {$Quoi=="Interrogation"} { return [set LesNomsEnStock($K)] } set LesNomsEnStock($K) $Quoi return $Quoi } proc LesNomsGscopeDeLOrganisme {Organisme} { global RepertoireDuGenome global LesNomsGscopeDeLOrganisme set Organisme [Glossaire $Organisme Complet] if {[info exists LesNomsGscopeDeLOrganisme($Organisme)]} { return [set LesNomsGscopeDeLOrganisme($Organisme)] } if {[info exists LesNomsGscopeDeLOrganisme("EstCharge")]} { return {} } foreach FichierMiniConfig [glob "$RepertoireDuGenome/../*/beton/miniconfig"] { set NomGscope [file tail [file dirname [file dirname $FichierMiniConfig]]] if {[regexp -nocase {^Old|Old$|^Hidden|Hidden$} $NomGscope]} { continue } foreach Ligne [LesLignesDuFichier $FichierMiniConfig] { if {[regexp "^NotreOS " $Ligne]} { scan $Ligne "%s %s %s" Bidon Genre Espece regsub {\.$} $Espece "" Espece set OrganismeLu "$Genre $Espece" lappend LesNomsGscopeDeLOrganisme($OrganismeLu) $NomGscope break } } } set LesNomsGscopeDeLOrganisme("EstCharge") "EstCharge" return [LesNomsGscopeDeLOrganisme $Organisme] } proc LesNomsPiques {} { global Piques if { ! [info exists Piques]} { return "" } set ListeDesPiques {} foreach Nom [array names Piques] { lappend ListeDesPiques $Nom } return [join $ListeDesPiques "\n"] } proc LesNomsPourOlymClade {} { set LesNoms [ListeDesPABs] # set LesNoms [lrange $LesNoms 0 999] return $LesNoms } proc LesNonBidir {Path FileName NbGenesVoulus {Database GeCo} {NombreDeGenesDansDatabase 33700} {LongueurMoyennePromoteurBidir 1000} {BirdVersion bird} {MinOuMax Max}} { set TempPath "/tmp/$FileName" set Path "$Path/$FileName" if { $MinOuMax == "Max"} { set OrderBy1 "DESC" set OrderBy2 "ASC" } if { $MinOuMax == "Min"} { set OrderBy1 "ASC" set OrderBy2 "DESC" } set FichierDesRequetes [open "$TempPath.bql" "w"] set FichierDesNonBidir [open "$Path.nb" "w"] set FichierDesPromoteursNonBidir [open "$Path.pnb" "w"] Espionne "LesNonBidir : Start " set Promoteurs 0 set Pseudo 0 set BrinPlus 0 set BrinMoins 0 set BiDir 0 set NonBidir 0 set Doublons 0 set K 0 set accessOld "" set Limite 0 set RandomEtHap 0 set ListeDesEntetes {} Espionne "LesNonBidir : Generation des requetes aleatoires " set I 1 for {set I 1} {$I <= $NbGenesVoulus} {incr I} { set RandomStart [expr int(floor(80000000 * rand()))] incr K puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT access, chrom, txStart, txEnd, strand, exonCount, name, mRNA, spID, spDisplayID, geneSymbol, protAcc, typegene, description FROM ucschuman.GeCo WHERE txStart>=$RandomStart AND pseudogene='no' ORDER BY txStart" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "#" } close $FichierDesRequetes Espionne "LesNonBidir : Execution des requetes aleatoires " BirdFetch "$TempPath.bql" "$TempPath.res" set FichierDesRequetesExecutees1 [open "$TempPath.res" "r"] set FichierDesRequetes2 [open "$TempPath.bql2" "w"] gets $FichierDesRequetesExecutees1 Ligne1 Espionne "LesNonBidir : Generation des requetes de verification non-bidir " while { [gets $FichierDesRequetesExecutees1 Ligne1] >=0 } { ScanLaPipe $Ligne1 access chrom txStart txEnd strand exonCount name mRNA spID spDisplayID geneSymbol protAcc typegene description set random "" set hap "" regexp {random} $chrom random regexp {hap} $chrom hap if { $random == "" && $hap == ""} { if { [string range $chrom 0 0] != "c"} { set chrom "chr$chrom" } if { $strand == "+" } { set Limite [expr $txStart - $LongueurMoyennePromoteurBidir] puts $FichierDesRequetes2 "ID * DB UCSC" puts $FichierDesRequetes2 "WH SQLNATIVE SELECT access FROM ucschuman.GeCo WHERE strand='-' AND chrom='$chrom' AND txEnd < [expr $txStart - $LongueurMoyennePromoteurBidir] AND name<>'Pseudogene' AND strand = '-'" puts $FichierDesRequetes2 "LM 1" puts $FichierDesRequetes2 "#" } else { set Limite [expr $txEnd + $LongueurMoyennePromoteurBidir] puts $FichierDesRequetes2 "ID * DB UCSC" puts $FichierDesRequetes2 "WH SQLNATIVE SELECT access FROM ucschuman.GeCo WHERE strand='+' AND chrom='$chrom' AND txStart > [expr $txEnd + $LongueurMoyennePromoteurBidir] AND name<>'Pseudogene' AND strand = '+'" puts $FichierDesRequetes2 "LM 1" puts $FichierDesRequetes2 "#" } } gets $FichierDesRequetesExecutees1 Ligne1 } close $FichierDesRequetes2 close $FichierDesRequetesExecutees1 Espionne "LesNonBidir : Execution des requetes de verification non-bidir " BirdFetch "$TempPath.bql2" "$TempPath.res2" set FichierDesRequetesExecutees2 [open "$TempPath.res2" "r"] set FichierDesRequetesExecutees1 [open "$TempPath.res" "r"] Espionne "LesNonBidir : Verification non-bidir" gets $FichierDesRequetesExecutees2 Ligne2 gets $FichierDesRequetesExecutees1 Ligne1 set Alerte 0 while { [gets $FichierDesRequetesExecutees2 Ligne2] >=0 } { gets $FichierDesRequetesExecutees1 Ligne1 if { $Ligne2 == "EMPTY" } { incr Alerte } else { set description1 "NoDescription" ScanLaPipe $Ligne1 access1 chrom1 txStart1 txEnd1 strand1 exonCount1 name1 mRNA1 spID1 spDisplayID1 geneSymbol1 protAcc1 typegene1 description1 if {$access1 != $accessOld} { regsub -all {\s} $description1 "." description1 if { $strand1 == "+" } { set PromoteurStart [expr $txStart1 - 1400] set PromoteurEnd [expr $txStart1 + 400] } else { set PromoteurStart [expr $txEnd1 - 400] set PromoteurEnd [expr $txEnd1 + 1400] } set numerochrom [string range $chrom1 3 4] regsub -all {\.} $numerochrom "" numerochrom regsub -all {\_} $numerochrom "" numerochrom set SequencePromoteur "" set random "" set hap "" regexp {random} $chrom1 random regexp {hap} $chrom1 hap if { $random == "" && $hap == ""} { set Index "$access1.$PromoteurStart.$PromoteurEnd" puts $FichierDesNonBidir "$access1 $chrom1 $txStart1 $txEnd1 $strand1" lappend ListeDesEntetes $Index } else { incr RandomEtHap } } } gets $FichierDesRequetesExecutees2 Ligne2 gets $FichierDesRequetesExecutees1 Ligne1 } close $FichierDesRequetesExecutees2 close $FichierDesRequetesExecutees1 close $FichierDesNonBidir Espionne "LesNonBidir : Tri par chromosome" set ListeDesEntetes [lsort -increasing $ListeDesEntetes] Espionne "LesNonBidir : Recuperation des sequences" foreach Entete $ListeDesEntetes { regsub -all {\.} $Entete " " Entete ScanLaListe $Entete access PromoteurStart PromoteurEnd if { $access != $accessOld } { regsub -all {chrchr} $chrom "chr" chrom regsub -all {chr} $chrom "" numerochrom set SequencePromoteur "" #set SequencePromoteur [BoutAdnDeUcscBoost $PromoteurStart $PromoteurEnd $strand "Homo_sapiens" $numerochrom] #set SequencePromoteur [string toupper $SequencePromoteur] #puts $FichierDesPromoteursNonBidir "$access $chrom $PromoteurStart $PromoteurEnd" #puts $FichierDesPromoteursNonBidir $SequencePromoteur incr NonBidir set accessOld $access } else { incr Doublons } } close $FichierDesPromoteursNonBidir Espionne "LesNonBidir: Fin" Espionne "Nombre genes : $K" Espionne " * Contenant au moins un pseudogene : $Pseudo" Espionne " * Random/Hap : $RandomEtHap" Espionne " * Bidir : $Alerte" Espionne " * Doublons : $Doublons" Espionne " * NonBidir : $NonBidir" } proc LesNonLocalisesAvecProteine {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] set n 0 set NbContig 0 set RepProttfa "[RepertoireDuGenome]/prottfa" foreach Nom $Liste { if {[PolyLocalise $Nom]=="NoLocalization"} { set Fichier "$RepProttfa/$Nom" if {[file exists $Fichier]} { set Contenu [ContenuDuFichier $Fichier] if {[regexp "CONTIG" $Contenu]} {incr NbContig} incr n } } } Espionne $NbContig return $n } proc LesNonmRNAsDesAcNucs {LesAccess} { AskLesPagesInfos load $LesAccess genbankfull set LesNonmRNAs {} foreach Access $LesAccess { set PageInfo [AskLesPagesInfos ask $Access] if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} { lappend LesNonmRNAs $Access } } AskLesPagesInfos unset return $LesNonmRNAs } proc LesOMIMDeLaRegion {Chrom Debut Fin} { ##pour sortie voir InterrogeOMIM set Chrom [NumeroDuChromosome $Chrom] set LesOMIM {} foreach OMIM [lsort -unique [InterrogeOMIM LesOMIM]] { foreach LInfo [InterrogeOMIM OMIM $OMIM LesInfos ] { set Chromosome [lindex $LInfo 1] if {$Chromosome != $Chrom} {continue} set LesBornes [lindex $LInfo 2] set D [lindex $LesBornes 0] set F [lindex $LesBornes 1] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $D $F]} {continue} lappend LesOMIM $LInfo } } return $LesOMIM } proc LesOffsetsDePfur {} { global RepertoireDuGenome Wup "Il y a une sequence non utilisee, je la saute." set Offset 0 foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/db/pfur"] { if {[regexp ">" $Ligne]} { scan $Ligne ">%s" Courant if {[regexp "MM4to38\-10429" $Courant]} { puts $Ligne; continue } puts "$Courant $Offset" } else { if {[regexp "MM4to38\-10429" $Courant]} { puts $Ligne; continue } incr Offset [string length $Ligne] } } } proc LesOligoExcel_RefSeq_Design {} { Wup "Design de RefSeq complet, environ 19200" Wup "Pour les resultats de refseq dans un seul fichier" set Dir "[RepertoireDuGenome]/Probes/RefSeq_TFA" set LesQuerys [glob -nocomplain -directory $Dir "NM*"] set WDir "[RepertoireDuGenome]/Probes/RefSeq_Design" set FichierSave "[RepertoireDuGenome]/Probes/Resultat_Design_RefSeq" set firsttime 1 foreach Q $LesQuerys { if {$firsttime==1} {set AvecEntete ""} else {set AvecEntete "PasDEntete"} incr firsttime set Q [file tail $Q] set DirOligo "[RepertoireDuGenome]/Probes/RefSeq_Design/[LeRepertoireDeRefSeq $Q]" #Espionne "LesOligosPourExcel $Q $DirOligo $FichierSave" LesOligosPourExcel $Q $DirOligo "" "" $FichierSave $AvecEntete } return "" } proc LesOligosCommandes {} { FaireLire "Mise a jour de oligosMIEUX" foreach P [Oli "LaListeMerci"] { set Descr [Oli $P "Description"] if {[regexp "ignore" $Descr]} { continue } if {[regexp "without" $Descr]} { continue } if {[regexp "mutant" $Descr]} { continue } if {[regexp "MutOli" $Descr]} { continue } if {[regexp "SeqOli" $Descr]} { continue } set SEQ [string toupper [Oli $P "Seq"]] lappend OliDeLaSeq($SEQ) $P } foreach FOli [glob "[RepertoireDuGenome]/atelier/*/oligos_*.tfa"] { foreach Access [LaSequenceDuTFAs $FOli "LaListeDesAccess"] { if {[regexp "^SeqOli" $Access]} {continue} set LesLis [DecomposeLaLigne $Access] set LesSujets [lindex $LesLis 0] set LesAvs [lindex $LesLis 1] set LesAps [lindex $LesLis 2] if {$LesAvs==$LesAps} { FaireLire "$FOli\n$Access" } if {$LesAps==""} { set Sens "5'" set Signaux [join $LesAvs "_"] } else { set Sens "3'" set Signaux [join $LesAps "_"] } if {[llength $LesSujets]>1} { FaireLire "$FOli\ntrop de sujets" } set Sujet [lindex $LesSujets 0] set TFA [LaSequenceDuTFAs $FOli $Access] set Seq [QueLaSequenceDuTexteTFA $TFA] set SEQ [string toupper $Seq] set LesPs [list "PInconnu"] if {[info exists OliDeLaSeq($SEQ)]} { set LesPs $OliDeLaSeq($SEQ) } else { continue if {[OuiOuNon "$FOli\n$Access\n\nOn le traque ?"]} { AfficheFichier $FOli "AvecRetour" } break } foreach P $LesPs { set Descr [Oli $P "Description"] set Cibles [StringSuivant " for " dans $Descr] set LesCibles [split $Cibles " "] set i [lsearch -exact $LesCibles $Sujet] if {[llength [lsort -unique $LesCibles]]<[llength $LesCibles]} { FaireLire $Descr } if {$i<0} { lappend LesCibles $Sujet append Descr " $Sujet" set NEW [SequenceFormatTFA [Oli $P "Seq"] $Descr] Sauve $NEW dans "[RepertoireDuGenome]/oligosMIEUX/$P.tfa" Espionne [format "%-17s %-20s %s %s=%s" $Sujet $Signaux $Sens $P $Descr] } } } } exit } proc LesOligosDuPGS {PGS} { global LesOligosDuPGS if {[info exists LesOligosDuPGS($PGS)]} { return [set LesOligosDuPGS($PGS)] } if {[info exists LesOligosDuPGS("EstCharge")]} { return {} } foreach P [Oli "LaListeMerci"] { set TypeOli [Oli $P Type] if {$TypeOli!="SynOli"} { continue } set PSujets [Oli $P Subjects] set PSignals [Oli $P Signals] regsub -all "_" $PSignals " " PSigs set PSens [Oli $P Sens] if {$PSens=="5'"} { set POliSignals " === $PSigs === " } else { set POliSignals " === === $PSigs" } foreach Ma [MatOl $P Matrice] AA [MatOl $P AA] NA [MatOl $P NA] Or [MatOl $P Orient] Su [MatOl $P Subjects] { set PGSlu [file tail $Ma] lappend LesOligosDuPGS($PGSlu) $P } } set LesOligosDuPGS("EstCharge") 1 return [LesOligosDuPGS $PGS] } proc LesOligosIdentiques {PAB DirOligo1 DirOligo2} { Wup "Permet de rendre la liste de oligos en commun entre deux recherche differentes" set LesOligosEnCommun "" #Stock les oligos du premier set FichierOligo1 "$DirOligo1/$PAB.oligo" set LesOligo1s [InterrogeInfoDeLOligo $FichierOligo1 LesNoms] foreach Oligo1 $LesOligo1s { set Debut [InterrogeInfoDeLOligo $FichierOligo1 $Oligo1 Debut] set Fin [InterrogeInfoDeLOligo $FichierOligo1 $Oligo1 Fin] set TabOligo(Oligo,$Debut,$Fin) 1 set TabOligo(NomOligo,$Debut,$Fin) $Oligo1 } #Compare les oligos du deuxieme au premier #Stock les oligos communs aux deux banques avec le nom de la 1ere banque et Debut Fin set FichierOligo2 "$DirOligo2/$PAB.oligo" set LesOligo2s [InterrogeInfoDeLOligo $FichierOligo2 LesNoms] foreach Oligo2 $LesOligo2s { set Debut [InterrogeInfoDeLOligo $FichierOligo2 $Oligo2 Debut] set Fin [InterrogeInfoDeLOligo $FichierOligo2 $Oligo2 Fin] if {[info exists TabOligo(Oligo,$Debut,$Fin)]} { set VraiNom [set TabOligo(NomOligo,$Debut,$Fin)] set NbCandidatsTotal [expr [InterrogeInfoDeLOligo $FichierOligo1 $VraiNom NbCandidats] + [InterrogeInfoDeLOligo $FichierOligo2 $Oligo2 NbCandidats]] lappend LesOligosEnCommun [list $VraiNom $Debut $Fin $NbCandidatsTotal [InterrogeInfoDeLOligo $FichierOligo1 $VraiNom NbCandidats] [InterrogeInfoDeLOligo $FichierOligo2 $Oligo2 NbCandidats]] } } set LesOligosEnCommun [lsort -increasing -index 3 $LesOligosEnCommun] return $LesOligosEnCommun } proc LesOligosPourExcel {LesQuery DirOligo {DirOligo2 ""} {Quoi ""} {FichierSave ""} {AvecEntete ""}} { Wup "Sauve les oligos dans un format utilisable par Excel" Wup "Rq si DirOligo2 est renseigne on utilise le fichier .croisee si ce dernier existe aussi" Wup "03/09/03 Mise a jour pour definition" Wup "10/09/03 Mise a jour pour tenir compte des oligos croisee" Wup "18/03/04 Mise a jour pour tenir compte des access unigene" Wup "10/04/04 Mise a jour pour integrer des liens vers SRS et NCBI" #Quoi peut etre ref de oligo ou coordonnees #Choix du fichier de sauvegarde if {$FichierSave == ""} { while {1} { set Texte "Choose a file name to save your selection" FaireLire "$Texte" set FichierSave [tk_getSaveFile -title "Choose a file name to save" -initialdir "[RepertoireDuGenome]"] if {$FichierSave == ""} { if {! [OuiOuNon "Would you like to continue ?"]} {return ""} } else { break } } } if {[file exists $FichierSave]} { if {! [OuiOuNonMemo "$FichierSave already exists, would you like to append to it ?"]} { file delete -force $FichierSave } } if {$AvecEntete == "" || $AvecEntete == "AvecEntete" || $AvecEntete == "1"} {set AvecEntete 1} else {set AvecEntete 0} #Pour utilier des references comme Debut Fin ou la ref de l oligo if {$Quoi==""} {set PasDeQuoi 1} else {set PasDeQuoi 0} set OnAUnigeneDir1 0 set OnAUnigeneDir2 0 #On va marquer les PAB faisant partis de la liste Test (60 refs) set ListeTest [ListeTest] set Entete "GScope Access \tProtein Access \tDesign Access \tDefinition \tTaille \tReference \tBanque \tBest_Banque" if {[regexp -nocase "unigene" $DirOligo]} { set OnAUnigeneDir1 1 append Entete "\tBest_Banque_Ug" } append Entete "\tDefinition \tDebut \tFin \tTm \tTaille \tSequence \tNombreDeCandidat \tCandidat \tUnrelatedAcc" if {$DirOligo2!=""} { append Entete "\tOligoEquivalent \tBanque2 \tBest_Banque2" if {[regexp -nocase "unigene" $DirOligo2]} { set OnAUnigeneDir2 1 append Entete "\tBest_Banque_Ug" } append Entete "\tDefinition \tNombreDeCandidat2 \tCandidat" } append Entete "\tCommentaire\tCategorie" if {$AvecEntete} {AppendAuFichier $FichierSave $Entete} if {$LesQuery=="LaTotale"} {set LesQuery [ListeDesPABs]} if {$LesQuery=="LaVraieTotale"} {set LesQuery [concat [ListeTest] [ListeDesPABs]]} if {$LesQuery=="LesTests"} {set LesQuery [ListeTest]} set Banque [file tail $DirOligo] set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set RepNuctfa "[RepertoireDuGenome]/nuctfa" foreach PAB $LesQuery { set OnTraiteDeCroisee 0 set ProteinAccess "" set NucleicAccess "" set OligoEquivalent "" set BestBanque1 "" set BestBanqueUg "" set Definition1 "" set Banque2 "" set NombreDeCandidat2 "" set Candidat2 "" set BestBanque2 "" set Definition2 "" set BestBanqueUg2 "" set UnrelatedAcc "" set Commentaire "" set Categorie "" #On va marquer les PAB faisant partis de la liste Test (60 refs) if {[regexp -nocase "$PAB" $ListeTest]} { set Categorie "test" } else { if {[regexp "^ACT" $PAB]} { set JumeauRepresentatif [JumeauRepresentatif $PAB] if {$JumeauRepresentatif!="" && $PAB!=$JumeauRepresentatif} {Espionne "$PAB pas jumeau best";continue} } } set FichierMasque "$DirOligo/${PAB}.masked" set FichierOligo "$DirOligo/${PAB}.oligo" set FichierBlastn "$DirOligo/${PAB}.blastn" set FichierLog "$DirOligo/${PAB}.log" set FichierSelection "$DirOligo/${PAB}.selection" set FichierCroisee "$DirOligo/${PAB}.croisee" if {$PasDeQuoi} { set FichierACharger $FichierSelection } else { set FichierACharger $FichierOligo } if {![file exists $FichierMasque]} { #Creation du fichier oligo pour excel $PAB oligo non calcules set LesInfos "$PAB\tNo Oligo yet calculated" AppendAuFichier $FichierSave $LesInfos continue } if {![file exists $FichierSelection] && ![file exists $FichierCroisee]} { #Creation du fichier oligo pour excel $PAB oligo non trouves set BestBanque1 "" if {[file exists $FichierBlastn] && [file exists $FichierLog]} { set BestBanque1 [ReturnBestHitFromLogFile $PAB $DirOligo] } set LesInfos "$PAB\tNo Oligo found due to not enough identity\t$BestBanque1" AppendAuFichier $FichierSave $LesInfos continue } set TailleQuery [string length [QueLaSequenceDuFichierTFA $FichierMasque]] #On peut prendre le fichier croisee if {$DirOligo2!=""} { set FichierOligo2 "$DirOligo2/$PAB.oligo" set EstCharge2 "" set EstCharge2 [InterrogeInfoDeLOligo $FichierOligo2 EstCharge] if {$EstCharge2==""} {set EstCharge2 0} if {[file exists $FichierCroisee] && [file exists "$FichierOligo2"]} { set OnTraiteDeCroisee 1 if {$PasDeQuoi} { set FichierACharger $FichierCroisee } else { set FichierACharger $FichierOligo } set Banque2 [file tail $DirOligo2] } } #Test si on avait deja charge le fichier auparavant set EstCharge1 "" set EstCharge1 [InterrogeInfoDeLOligo $FichierACharger EstCharge] if {$EstCharge1==""} {set EstCharge1 0} #Access utilise lors du design #un mRNA ou sequence originale (nuctfa) ####################################### set Query "$RepmRNA/$PAB" if {[file exists $Query]} { set NucleicAccess [AccessDeLaBoite $PAB mRNA] } else { set Query "$RepNuctfa/$PAB" if {[file exists $Query]} { set NucleicAccess [AccessDuTFADumRNA $Query] } else {set NucleicAccess "$PAB"} } #Access et definition de la proteine correspondante ################################################### set ProteinAccess [AccessDeLaBoite $PAB protein] set Definition [AccessDeLaBoite $PAB protein Definition] #Definition de secours (mRNA ou access) ####################################### if { $Definition == "" && $NucleicAccess != ""} { set Definition [AccessDeLaBoite $PAB mRNA Definition] if { $Definition == ""} { set Definition [lrange [DefDeAcc $NucleicAccess genbankfull Def] 1 end] } } if {![info exists Tab($NucleicAccess)]} {set Tab($NucleicAccess) 1} else {Espionne "$PAB $NucleicAccess deja vu";continue} set BestBanque1 [ReturnBestHitFromLogFile $PAB $DirOligo] set Definition1 [ReturnDefinitionFromBestHitFromLogFile $BestBanque1] set ProteinAccess "=LIEN_HYPERTEXTE(\"http://igbmc.u-strasbg.fr/srs71bin/cgi-bin/wgetz?-newId+-e+(\[protein-id:'$ProteinAccess'\]|\[protein-acc:'$ProteinAccess'\])\"; \"$ProteinAccess\")" set NucleicAccess "=LIEN_HYPERTEXTE(\"http://igbmc.u-strasbg.fr/srs71bin/cgi-bin/wgetz?-newId+-e+(\[genbank:'$NucleicAccess'\]|\[genbank-acc:'$NucleicAccess'\])\"; \"$NucleicAccess\")" #Les donnees des Oligos ####################### set LesOligos [InterrogeInfoDeLOligo $FichierACharger LesNoms] if {$LesOligos == ""} { if { [InterrogeInfoDeLOligo $FichierACharger NotDone]=="1"} { #Espionne "Excel File creation for $PAB : no oligo yet designed" set LesInfos "$PAB\tNo Oligo yet calculated" AppendAuFichier $FichierSave $LesInfos } elseif { [InterrogeInfoDeLOligo $FichierACharger NoOligo]=="1"} { #Espionne "Excel File creation for $PAB : no oligo found" set LesInfos "$PAB\tNo Oligo found" set BestBanque1 "" if {[file exists $FichierBlastn] && [file exists $FichierLog]} { set BestBanque1 [ReturnBestHitFromLogFile $PAB $DirOligo] if {[regexp -nocase "warning" $BestBanque1]} { set LesInfos "$PAB\tNo Oligo found due to not enough identity\t$BestBanque1" } } AppendAuFichier $FichierSave $LesInfos continue } else {Espionne "$PAB\tPetit probleme";continue} } #Pour utilier des references comme Debut Fin ou la ref de l oligo if {$PasDeQuoi=="0"} { set MonOligo "" if {[llength $Quoi]>1} { #On a pas un access mais des debut fin set MonOligo [InterrogeInfoDeLOligo $FichierACharger [lindex $Quoi 0] [lindex $Quoi 1] NomOligo] } else { set MonOligo $Quoi } if { $MonOligo==""} {continue} if {![regexp "$MonOligo" $LesOligos]} {Espionne "No $MonOligo dans $FichierACharger";continue} } foreach NomOligo $LesOligos { #Pour utilier des references comme Debut Fin ou la ref de l oligo if {$PasDeQuoi=="0" && ![regexp $MonOligo $NomOligo]} {continue} set TailleOligo [InterrogeInfoDeLOligo $FichierACharger $NomOligo Taille] set OligoTm [InterrogeInfoDeLOligo $FichierACharger $NomOligo Tm] set ExpTm [InterrogeInfoDeLOligo $FichierACharger $NomOligo ExpTm] set Debut [InterrogeInfoDeLOligo $FichierACharger $NomOligo Debut] set Fin [InterrogeInfoDeLOligo $FichierACharger $NomOligo Fin] set NbCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbCandidats] set NbContigues [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbContigues] set LesCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo LesCandidats] set LaSequence [InterrogeInfoDeLOligo $FichierACharger $NomOligo Sequence] set UnrelatedAcc [regexp -all {NG[0-9]+} $LesCandidats] if {[regexp "^RSHUM:" $BestBanque1]} { regsub -nocase {RSHUM:NM} $BestBanque1 "NM_" BestBanque1 set BestBanque1 "=LIEN_HYPERTEXTE(\"http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=search&term=$BestBanque1\"; \"$BestBanque1\")" } set LesInfosDeLOligo "$PAB \t$ProteinAccess \t$NucleicAccess \t\"$Definition\" \t$TailleQuery \t$NomOligo \t$Banque \t$BestBanque1" if {$OnAUnigeneDir1} { #set BestBanqueUg [LeUGIdUN_Getz $BestBanque1] set BestBanqueUg [LeUnigeneDeUniseq $BestBanque1] if {$BestBanqueUg!=""} { set BestBanqueUg "=LIEN_HYPERTEXTE(\"http://igbmc.u-strasbg.fr/srs71bin/cgi-bin/wgetz?-newId+-e+\[unigene:'$BestBanqueUg'\]\"; \"$BestBanqueUg\")" } else {set BestBanqueUg "No Unigene Id associated"} append LesInfosDeLOligo "\t$BestBanqueUg" } append LesInfosDeLOligo "\t$Definition1 \t$Debut \t$Fin \t$OligoTm \t$TailleOligo \t$LaSequence \t$NbCandidats \t$LesCandidats \t$UnrelatedAcc" if {$OnTraiteDeCroisee} { set OligoEquivalent [NomOligoEquivalent $PAB $NomOligo $DirOligo $DirOligo2] set NombreDeCandidat2 [InterrogeInfoDeLOligo $FichierOligo2 $OligoEquivalent NbCandidats] set Candidat2 [InterrogeInfoDeLOligo $FichierOligo2 $OligoEquivalent LesCandidats] set BestBanque2 [ReturnBestHitFromLogFile $PAB $DirOligo2] set Definition2 [ReturnDefinitionFromBestHitFromLogFile $BestBanque2] if {[regexp "^RSHUM:" $BestBanque2]} { regsub -nocase {RSHUM:NM} $BestBanque2 "NM_" BestBanque2 set BestBanque2 "=LIEN_HYPERTEXTE(\"http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=search&term=$BestBanque2\"; \"$BestBanque2\")" } append LesInfosDeLOligo "\t$OligoEquivalent \t$Banque2 \t$BestBanque2" if {$OnAUnigeneDir2} { #set BestBanqueUg2 [LeUGIdUN_Getz $BestBanque2] set BestBanqueUg2 [LeUnigeneDeUniseq $BestBanque2] if {$BestBanqueUg2!=""} { set BestBanqueUg2 "=LIEN_HYPERTEXTE(\"http://igbmc.u-strasbg.fr/srs71bin/cgi-bin/wgetz?-newId+-e+\[unigene:'$BestBanqueUg2'\]\"; \"$BestBanqueUg2\")" } else {set BestBanqueUg2 "No Unigene Id associated"} append LesInfosDeLOligo "\t$BestBanqueUg2" } append LesInfosDeLOligo "\t$Definition2 \t$NombreDeCandidat2 \t$Candidat2" } append LesInfosDeLOligo "\t$Commentaire" #On va marquer les PAB faisant partis de la liste Test (60 refs) if {[regexp -nocase "$PAB" $ListeTest]} { set Categorie "test" append LesInfosDeLOligo "\t$Categorie" } AppendAuFichier $FichierSave $LesInfosDeLOligo continue } if { $EstCharge1=="0"} {InterrogeInfoDeLOligo $FichierACharger Decharge} if {$OnTraiteDeCroisee} { if {$EstCharge2=="0"} {InterrogeInfoDeLOligo $FichierOligo2 Decharge} } } return "" } proc LesOligosPourExcel_GUI {{DirOligo1 ""}} { Wup "Permet de sauver les oligos selectionnes dans le format excel" Wup "Utiliser dans GUI" Wup "Rq les oligos sont ceux choisis automatiquement (.selection et .croisee) ou modifies par l utilisateur" if {$DirOligo1 == ""} { while {1} { set Texte "Please select the directory containing the design results." FaireLire "$Texte" set DirOligo1 [tk_chooseDirectory -title "Choose directory" -initialdir "[RepertoireDuGenome]"] if {$DirOligo1 == ""} { if {! [OuiOuNon "Would you like to reselect ?"]} {return ""} } break } } while {1} { set DirOligo2 "" set Texte "Your database is $DirOligo1 \nIf cross results exists, can you choose the second directory ?" if {[OuiOuNon "$Texte"]} { while {1} { set T "Choose the other directory" set DirOligo2 [tk_chooseDirectory -title $T -initialdir "[RepertoireDuGenome]"] if {$DirOligo2 == ""} { if {! [OuiOuNon "Would you like to reselect second directory ?"]} {continue} } break } break } else {break} } #Choix du fichier de sauvegarde while {1} { set Texte "Choose a file name to save your selection" FaireLire "$Texte" set FichierSave [tk_getSaveFile -title "Choose a file name to save" -initialdir "[RepertoireDuGenome]"] if {$FichierSave == ""} { if {! [OuiOuNon "Would you like to continue ?"]} {return ""} } else { break } } set ListePossible "" foreach Acc [glob -nocomplain -directory $DirOligo1 "*.masked"] { regsub ".masked$" $Acc "" Acc lappend ListePossible [file tail $Acc] } if {$ListePossible==""} {set AvecListeDesPABs 1} else {set AvecListeDesPABs 0} set LesQuery "" while {1} { set Texte "Save the oligo informations for all sequence designed ?\nIf no, choose a sample." if {! [OuiOuNon "$Texte"]} { while {1} { if {$AvecListeDesPABs} { set LesQuery [MorceauxChoisis [ListeDesPABs]] } else { set LesQuery [MorceauxChoisis $ListePossible] } if {$LesQuery == ""} { if {! [OuiOuNon "Would you like to choose again ?"]} {return ""} } break } break } else { if {$AvecListeDesPABs} { set LesQuery [ListeDesPABs] } else { set LesQuery $ListePossible } break } } LesOligosPourExcel $LesQuery $DirOligo1 $DirOligo2 "" $FichierSave OuiOuNonMemo UnsetAllPlease return "" } proc LesOligosSelectionnes {K {Option ""}} { Wup "Retourne la liste des Noms des oligos Selectionnes par proc SelectionneOligo" set LesIds "" set LesIds [$K find withtag "Selected"] if {$Option=="LesIds"} {return $LesIds} set LesNomsDesOligos "" foreach Id $LesIds { set MesTags [$K gettags $Id] set Nom [lindex $MesTags 4] lappend LesNomsDesOligos $Nom } return $LesNomsDesOligos } proc LesOnListDeSeeAbyPossibles {} { set LesOnListPossibles {} foreach Ligne [split [info body SeeAby] "\n"] { if { ! [regexp {\# OnList} $Ligne]} { continue } scan $Ligne "%s" Possible regsub -all {\"} $Possible "" Possible Espionne $Possible lappend LesOnListPossibles $Possible } return $LesOnListPossibles } proc LesOntologyDuCluster {{ClusterOuPab ""} {Type ""}} { Wup "Affiche les Gene Ontology du cluster ou des PAB" Wup "Type function component process" if {$ClusterOuPab==""} {return ""} if {![regexp -nocase {[0-9]+} $ClusterOuPab]} {return "Numero de Cluster ou PAB"} if {$Type==""} {set Type "function"} if {$Type!="function" && $Type!="component" && $Type!="process"} {return "Type must be function, process or component"} set LesPABs [InfoDuCluster $ClusterOuPab Membres] if {[regexp -nocase "^No info" $LesPABs]} {return ""} foreach PAB $LesPABs { set AC [Narcisse $PAB] lappend LesAccess $AC #Espionne "$PAB $AC" } IllustreOntologyDesAccess $LesAccess $Type } proc LesOperonsCommunsEntreClusters {Cluster1 Cluster2} { set LesOperonsCommuns {} foreach Operon1 [O2C2O Cluster $Cluster1 LesOperons] { foreach Operon2 [O2C2O Cluster $Cluster2 LesOperons] { if {$Operon1 == $Operon2} {lappend LesOperonsCommuns $Operon1} } } set LesOperonsCommuns [lsort -unique $LesOperonsCommuns] return $LesOperonsCommuns } proc LesOrdresEntreIndexes {Couleur Deb Fin} { global LesOrdresTries global IndexesDesOrdres set LesOrdresAvecPeutEtreCanvas [lrange [set LesOrdresTries($Couleur)] $Deb $Fin] if { [lsearch -regexp $LesOrdresAvecPeutEtreCanvas {^create canvas}] == -1} { set DebutCanvas [lsearch -regexp $LesOrdresTries($Couleur) {^create canvas}] set FinCanvas [lsearch -regexp $LesOrdresTries($Couleur) {^fin create canvas}] set LesOrdresAvecPeutEtreCanvas [concat [lrange $LesOrdresTries($Couleur) $DebutCanvas $FinCanvas] $LesOrdresAvecPeutEtreCanvas] } # SauveLesLignes $LesOrdresAvecPeutEtreCanvas dans /home/wscope/wscope/forum/Espionne${Deb}${Fin}.txt return $LesOrdresAvecPeutEtreCanvas } proc LesOrdresEntrePositions {Couleur xMin xMax} { global IndexesDesOrdres if {[info exists IndexesDesOrdres($xMin)] && [info exists IndexesDesOrdres($xMax)]} { scan [set IndexesDesOrdres($xMin)] "%s %s" Bidon VraiMin scan [set IndexesDesOrdres($xMax)] "%s %s" VraiMax Bidon return [LesOrdresEntreIndexes $Couleur $VraiMin $VraiMax] } set LesBornesMin [lsort -integer [array names IndexesDesOrdres]] set LesBornesMax [lrange $LesBornesMin 1 end] set BonxMin [lindex $LesBornesMin 0] set BonxMax [lindex $LesBornesMax end] set XMaxAncien -999999 foreach m $LesBornesMin M $LesBornesMax { if { $m <= $xMin } { set BonxMin $m } if { $XMaxAncien <= $xMax && $xMax < $M } { set BonxMax $M break } set XMaxAncien $M } Espionne "$xMin $xMax $BonxMin $BonxMax" if { ! [info exists BonxMin]} { return {} } scan [set IndexesDesOrdres($BonxMin)] "%s %s" Bidon VraiMin scan [set IndexesDesOrdres($BonxMax)] "%s %s" VraiMax Bidon return [LesOrdresEntreIndexes $Couleur $VraiMin $VraiMax] } proc LesOrdresPourGif {LesOrdresBruts} { global FillPourGif OutlinePourGif Wup "GscopeBoard, first creates the boxes," Wup " and second, color them, storing the colors in the arrays FillPourGif and OutlinePourGif" foreach Ligne $LesOrdresBruts { if { ! [regexp "Box|TEXTE|Cadre|arc|Web|Seq|Lettre" $Ligne]} { continue } if {[regexp "Cadre" $Ligne]} { regsub "rectangle|rect" $Ligne canvas Ligne regsub "outline" $Ligne background Ligne } if {[regexp "Box" $Ligne]} { set Nom [StringApres "Box" dans $Ligne] regsub -all {\}} $Nom "" Nom if {[info exists FillPourGif($Nom)]} { if {[regexp {\-fill} $Ligne]} { append Ligne " -" regsub {\-fill [^\-]+\-} $Ligne "-fill [set FillPourGif($Nom)] -" Ligne regsub " \-$" $Ligne "" Ligne } else { append Ligne " -fill [set FillPourGif($Nom)]" } } if {[info exists OutlinePourGif($Nom)]} { if {[regexp {\-outline} $Ligne]} { append Ligne " -" regsub {\-outline [^\-]+\-} $Ligne "-outline [set OutlinePourGif($Nom)] -" Ligne regsub " \-$" $Ligne "" Ligne } else { append Ligne " -fill [set OutlinePourGif($Nom)]" } } } lappend LesOrdresOK $Ligne } set LesOrdresTries [lsort -command CompareLeTroisiemeChamp $LesOrdresOK] foreach Ligne $LesOrdresTries { Espionne $Ligne foreach SousOrdre [DecoupeEnSousOrdresPourGif $Ligne] { lappend LesOrdres $SousOrdre } } return $LesOrdres } proc LesOrgaDistAccessDesOrthologues {Nom} { global RepertoireDuGenome global LesOrgaDistAccessDesOrthologues global NotreOrga if {[info exists LesOrgaDistAccessDesOrthologues($Nom)]} { return [set LesOrgaDistAccessDesOrthologues($Nom)] } if {[info exists LesOrgaDistAccessDesOrthologues]} { return {} } set FichierDistancesPhylo "$RepertoireDuGenome/fiches/distancesphylo.$NotreOrga" if { ! [file exists $FichierDistancesPhylo]} { return {} } foreach Ligne [LesLignesDuFichier $FichierDistancesPhylo] { set Liste [split $Ligne " "] set NomLu [lindex $Liste 0] set LesOrgaDistAccessDesOrthologues($NomLu) [lrange $Liste 1 end] } if {[info exists LesOrgaDistAccessDesOrthologues($Nom)]} { return [set LesOrgaDistAccessDesOrthologues($Nom)] } return {} } proc LesOrganismesDeLaCrossValidation {} { global RepertoireDuGenome set RepFiches "$RepertoireDuGenome/fiches" set FichierCV "$RepFiches/CrossValidation" if {![file exists "$FichierCV"]} { FaireLire "$FichierCV does not exist\.\nI am going to create it\." CrossValidationPourTous "" Save } set LesOrganismes {} foreach Ligne [LesLignesDuFichier $FichierCV] { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} set LaLigne [split $Ligne "\t"] if {[lindex $LaLigne 2] == {}} {continue} lappend LesOrganismes [lindex $LaLigne 2] } return [ElimineLesRedondancesDansUneListe $LesOrganismes] } proc LesOrganismesDuBlast {TexteOuListeOuFichier {CutPN ""} {MaxListe ""} {GetWhat ""} {AvecMemoTaxo ""}} { #Pour raison de compatibilité je le garde pour le moment pour Arnaud return [TaxonomyDuBlast $TexteOuListeOuFichier $CutPN $MaxListe $GetWhat $AvecMemoTaxo] } proc LesOrganismesDuHTML {Fichier} { set Texte [ContenuDuFichier $Fichier] set OL [ValeurDeLaBalise "ol" Texte] set LesOrganismes {} while 1 { set B [ValeurDeLaBalise "li" OL] if {$B==""} { break } set iPV [string last ";" $B] set Champ [string range $B [incr iPV] end] set iP [string last "

    " $Champ] if {$iP>=0} { set Champ [string range $Champ 0 [incr iP -1]] } regsub { *\(.*} $Champ "" Organisme if {[info exists DejaVu($Organisme)]} { continue } set DejaVu($Organisme) 1 lappend LesOrganismes $Organisme } return $LesOrganismes exit } proc LesOrganismesEnStock {BanqueId Access} { global TabOrga if {[info exists TabOrga($BanqueId,$Access)]} { set LesOrganismes [set TabOrga($BanqueId,$Access)] } else { set LesOrganismes [LesOrgasDeLAccess $BanqueId] set TabOrga($BanqueId,$Access) $LesOrganismes } return $LesOrganismes } proc LesOrganismesImportants {} { global RepertoireDuGenome set File "$RepertoireDuGenome/fiches/orgimportant" if {![file exists $File]} {FichierGenomesEukaryotes} return [LesLignesDuFichier $File] } proc LesOrganismesImportantsPourDBClustal {{Ask ""}} { global RepertoireDuGenome global GscopeDir global LesOrganismesImportantsPourDBClustal set Ask [regexp -nocase "^Ask$" $Ask] if {! $Ask && [info exists LesOrganismesImportantsPourDBClustal]} { return $LesOrganismesImportantsPourDBClustal } set FichierOrgImportant "$RepertoireDuGenome/fiches/orgimportant" if {$Ask || ! [file exists $FichierOrgImportant]} { set FichierOrgImportantDefaut "$GscopeDir/gscope_orgimportant" if {[file exists $FichierOrgImportantDefaut] && [OuiOuNon "Do I copy the file \n $FichierOrgImportantDefaut\n to $FichierOrgImportant\n ?"]} { File copy $FichierOrgImportantDefaut $FichierOrgImportant } else { while {[OuiOuNon "Do You want to load an existing file with Important Organisms ?"]} { set F [ButineArborescence "All" $RepertoireDuGenome] if {$F==""} { continue } if {[OuiOuNon "Do I copy it to $FichierOrgImportant ?"]} { File copy -force $F $FichierOrgImportant } else { set FichierOrgImportant $F } break } } } if {[file exists $FichierOrgImportant]} { set LesOIs [LesLignesDuFichier $FichierOrgImportant] } else { lappend LesOIs "### Important organisms for DBClustal" lappend LesOIs "# You can modify these lines." lappend LesOIs "# please respect Upper-lower case ( Homo sapiens )" lappend LesOIs "# use 'remove' to remove an organism." lappend LesOIs "# nothing to add a new organism." lappend LesOIs "# use 'addall' to tell to Gscope to add all these returned by the function" lappend LesOIs "# use 'remall' to tell to Gscope to remove these" lappend LesOIs "#" lappend LesOIs "# If one organism appears two times, the first command has priority" lappend LesOIs "###" lappend LesOIs "Pyrococcus furiosus" lappend LesOIs "remove Pyrococcus furiosus" lappend LesOIs "remove Homo sapiens" lappend LesOIs "Homo sapiens" lappend LesOIs "addall LesGenomesComplets" set Ask 1 } while {$Ask && [OuiOuNon "Do You want to edit the Important Organisms List ?" 0]} { set OIs [EntreTexte [join $LesOIs "\n"]] if {$OIs==""} { continue } set LesOIs [split $OIs "\n"] if {[OuiOuNon "Do I save these organisms in \n $FichierOrgImportant ?"]} { SauveLesLignes $LesOIs dans $FichierOrgImportant } break } set LesOrganismesImportants {} foreach Ligne $LesOIs { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } if {[regexp " *#+" $Ligne]} { continue } if {[regexp "^(addall |remall )" $Ligne Match]} { set Commande [StringSuivant "$Match" dans $Ligne] foreach O [eval $Commande] { if {[info exists DejaVu($O)]} { continue } set DejaVu($O) 1 if {$Match=="addall "} { lappend LesOrganismesImportants $O } } continue } set RemoveMoi [regexp "^remove " $Ligne] regsub "^remove +" $Ligne "" O if {[info exists DejaVu($O)]} { continue } set DejaVu($O) 1 if {$RemoveMoi} { continue } lappend LesOrganismesImportants $O } set LesOrganismesImportantsPourDBClustal $LesOrganismesImportants return $LesOrganismesImportants } proc LesOrganismesOrthologues {Nom {Prog DbClustal} {PA Presents} {Format Complet}} { set Oo "" if {$Prog=="TBlastN"} { set Oo [ORGAorgaDesTBlastNs $Nom $PA] } if {$Prog=="BlastP"} { set Oo [ORGAorgaDesBlastPs $Nom $PA] } if {$Prog=="DbClustal"} { set Oo [ORGAorgaDesMSFs $Nom $PA] } regsub -all { {2,}} $Oo " " Oo set Inconnu [Glossaire "" $Format] set LesOrganismesOrthologues {} foreach Orga [split $Oo " "] { if {$Format=="Court"} { set Organisme $Orga } else { set Organisme [Glossaire $Orga $Format] } if {$Organisme=="" || $Organisme==$Inconnu || $Organisme=="iinc" } { continue } lappend LesOrganismesOrthologues $Organisme } return $LesOrganismesOrthologues } proc LesOrganismesQuiSontEtQuiNeSontPas {{iLsSont ""} {iLsNeSontPas ""} {LesOrganismes ""}} { if {$LesOrganismes == {} } {set LesOrganismes [O2C2O LesOrganismesLongs]} set LesBonsOrganismes {} foreach Organisme $LesOrganismes { set LesCategories [O2C2O OrganismeLong $Organisme LesCategories] set EstUnBon 1 foreach Cat $iLsSont { set EnAiJeVuUn 0 foreach Categorie $LesCategories { if {[string equal -nocase $Categorie $Cat]} { set EnAiJeVuUn 1 break } } if {!$EnAiJeVuUn} {set EstUnBon 0;break} } if {!$EstUnBon} {continue} set EstUnBon 1 foreach Cat $iLsNeSontPas { set EnAiJeVuUn 0 foreach Categorie $LesCategories { if {[string equal -nocase $Categorie $Cat]} { set EnAiJeVuUn 1 break } } if {$EnAiJeVuUn} {set EstUnBon 0;break} } if {!$EstUnBon} {continue} lappend LesBonsOrganismes $Organisme } return $LesBonsOrganismes } proc LesOrganismesTresProches {{Organisms ""}} { global RepertoireDuGenome global LesOrganismesTresProches global DemandeDejaFaite global Org1 Org2 #rR a rajoute Organisms pour pouvoir le faire taire (pour SM2PH surtout) if {$Organisms!=""} { set LesOrganismesTresProches $Organisms } if {[info exists LesOrganismesTresProches]} { return $LesOrganismesTresProches } if {[PourWscope]} { return {} } if {[info exists Org1] && [info exists Org2]} { if { ! [info exists LesOrganismesTresProches]} { set LesOrganismesTresProches [list $Org1 $Org2] } return $LesOrganismesTresProches } set Org1 " " set Org2 " " if {[OnTraiteUneCollection]} { return {}} set RepertoireFiches "$RepertoireDuGenome/fiches" if { ! [file exists $RepertoireFiches]} { File mkdir $RepertoireFiches } if { ! [info exists LesOrganismesTresProches]} { set Fichier "$RepertoireDuGenome/fiches/lesorganismestresproches" if { [info exists DemandeDejaFaite] && ! [file exists $Fichier]} { return {} } while { ! [file exists $Fichier]} { if { ! [OuiOuNon "Do You want to give the two nearest organisms ?" 0]} { set DemandeDejaFaite 1 if {[OuiOuNon "Do I ask later ?"]} { return {} } Sauve "Aaaa\nBbbb" dans $Fichier } else { FaireLire "You have to select 2 organisms.\nThe first one ..." scan [MontreOrganismes "AvecRetour"] "%s %s %s" Orga Genre Espece set Orga [Glossaire "$Genre $Espece" Court] lappend LesOrganismesTresProches $Orga FaireLire "The second one ..." scan [MontreOrganismes "AvecRetour"] "%s %s %s" Orga Genre Espece set Orga [Glossaire "$Genre $Espece" Court] lappend LesOrganismesTresProches $Orga SauveLesLignes $LesOrganismesTresProches dans $Fichier } } set LesOrganismesTresProches [LesLignesDuFichier $Fichier] } set Org1 [lindex $LesOrganismesTresProches 0] set Org2 [lindex $LesOrganismesTresProches 1] return $LesOrganismesTresProches } proc LesOrgasDeLAccess {Access} { set PageInfo [PageInfo $Access protein "id org"] if {$PageInfo == ""} {set PageInfo [PageInfo $Access genbankfull "id org"]} if {$PageInfo == ""} {return ""} return [LesOrgasDeLaPage_PageInfo $PageInfo] } proc LesOrgasDeLaPage_PageInfo {PageInfo} { set PremierMotDeLaPremiereLigne [lindex [split [lindex [split $PageInfo "\n"] 0] " "] 0] if {$PremierMotDeLaPremiereLigne == "LOCUS"} { set Champs "SOURCE" set LesChamps [LeChampsDeLaPageGenBank $PageInfo $Champs] } else { set Champs "OS" set LesChamps [LeChampsDeLaPageProteine $PageInfo $Champs] } set LesOrga {} foreach OS $LesChamps { if {[regexp ";" $OS]} {continue} set OS [string trim $OS] regsub "^OS|^SOURCE" $OS "" OS regsub -all {\(|\)} $OS "" OS regsub -all " and" $OS " " OS regsub -all " and " $OS " " OS regsub -all ", " $OS "," OS regsub "\\.$" $OS "" OS set OS [string trim $OS] foreach Orga [split $OS ","] { if {[info exists Genre ]} {unset Genre } if {[info exists Espece]} {unset Espece} set Orga [string trim $Orga] scan $Orga "%s %s" Genre Espece if {![info exists Genre ]} {continue} if {![info exists Espece]} {continue} if {[regexp -nocase {[^0-9a-z_\'\-\.]} $Espece]} {continue} set Orga "$Genre $Espece" lappend LesOrga $Orga } } return [lsort -unique [ElimineLesRedondancesDansUneListe $LesOrga]] } proc LesOrgasDeMesTaxID {args} { Wup "Permet de charger et de recuperer les Nom scientifique des TaxId et inversement si ils ont ete charges" global InfoOrgaTaxID #Arguments: ########### #$Acc Name -- Rend le nom scientifique du TaxID #$Name TaxID -- Rend le TaxID du nom scientifique if {$args == "unset"} { if {[info exists InfoOrgaTaxID]} {array unset InfoOrgaTaxID} return "" } #Mode charge les access seulement if {[lindex $args 0]=="Charge"} { set LesTaxID [lindex $args 1] set LesTaxID [string trim [join [lindex $args 1] " "]] } else { #Mode un seul access set LesTaxID [lindex $args 0] } set Quoi [join $args ","] if {[info exists InfoOrgaTaxID($Quoi)]} {return [set InfoOrgaTaxID($Quoi)]} ###################CHARGE le Fichier avec les Oligos######################### set ResultatCharge [ChargeLesOrgasDeMesTaxID InfoOrgaTaxID $LesTaxID] if {![info exists InfoOrgaTaxID($Quoi)]} {return ""} return [set InfoOrgaTaxID($Quoi)] } proc LesOrgasDesAccess {LesAccess {Champ Complet} {Nom ""}} { global RepertoireDuGenome global QuidSeqEstDisponible set LesAccessRestants $LesAccess set LesAccessRestantsEncore $LesAccessRestants set LesBonsAccessOrga {} if {$LesAccessRestants=={}} { return $LesBonsAccessOrga } Wup "With Descriptif ... not yet finish (because multiple OSs)" if {$Nom!=""} { set LesAccessRestantsEncore {} set FichierDescriptif "$RepertoireDuGenome/descriptifs/$Nom" if {[info exists $FichierDescriptif]} { foreach Access $LesAccessRestants { set O [OrgaDuDescriptif $Access $Nom] if {$O==""} { lappend LesBonsAccessOrga "$Access [Glossaire [set OrgaDe($Access)] $Champ]" } else { lappend LesAccessRestantsEncore $Access } } } } if {$LesAccessRestantsEncore=={}} { return $LesBonsAccessOrga } set LesAccessRestants $LesAccessRestantsEncore Wup "With distancephylo" if {$Champ=="Court" && $Nom!=""} { set LesAccessRestantsEncore {} set LesODAs [LesOrgaDistAccessDesOrthologues $Nom] foreach {O D A} $LesODAs { set OrgaDe($A) $O } set LesAccessRestantsRestants {} foreach Access $LesAccessRestants { if {[info exists OrgaDe($Access)]} { lappend LesBonsAccessOrga "$Access [Glossaire [set OrgaDe($Access)] $Champ]" } else { lappend LesAccessRestantsEncore $Access } } } if {$LesAccessRestantsEncore=={}} { return $LesBonsAccessOrga } set LesAccessRestants $LesAccessRestantsEncore Wup "For PDB or Ciona" set LesAccessRestantsEncore {} foreach Access $LesAccessRestants { if {[regexp {^ci[0-9]{10}$} $Access]} { set Organisme "Ciona intestinalis" lappend LesBonsAccessOrga "$Access [Glossaire $Organisme $Champ]" } elseif {[EstUnAccessPDB $Access]} { set Organisme [OrganismeDuPDB $Access] lappend LesBonsAccessOrga "$Access [Glossaire $Organisme $Champ]" } else { lappend LesAccessRestantsEncore $Access } } if {$LesAccessRestantsEncore=={}} { return $LesBonsAccessOrga } set LesAccessRestants $LesAccessRestantsEncore Wup "For Ciona" Wup "With QuidSeq" if {[info exists QuidSeqEstDisponible] && $QuidSeqEstDisponible} { set TexteAccessOrga [QuestionDeScience QuidSeq "QuidOSsOfACs [join $LesAccessRestants "|"]"] regsub {[ \n]+$} $TexteAccessOrga "" TexteAccessOrga set LesAccessOrga [split $TexteAccessOrga "\n"] foreach AccessOrga $LesAccessOrga { scan $AccessOrga "%s" Access regsub "^$Access +" $AccessOrga "" Organismes lappend LesBonsAccessOrga "$Access [Glossaire $Organismes $Champ]" } return $LesBonsAccessOrga } Wup "Without QuidSeq" foreach Access $LesAccessRestantsEncore { set Orga [OrgaDuAccess $Access $Champ] lappend LesBonsAccessOrga "$Access $Orga" } return $LesBonsAccessOrga } proc LesOrgasInteressants {} { global RepertoireDuGenome return [split [ContenuDuFichier "$RepertoireDuGenome/fiches/familiar_organism"] "\n"] } proc LesOrthologuesFamiliersDuBlastP {{Nom CreateIt} {Quoi All}} { global RepertoireDuGenome global NotreOS global NotreOrga set FichierOrthologuesFamiliers "$RepertoireDuGenome/fiches/orthologues.familiar" if {$Nom!="CreateIt"} { if { ! [file exists $FichierOrthologuesFamiliers]} { return "" } set DejaPasse 0 set LesOrthos {} foreach Ligne [LesLignesDuFichier $FichierOrthologuesFamiliers] { scan $Ligne "%s" NomLu if {$NomLu!=$Nom && ! $DejaPasse } { continue } if {$NomLu!=$Nom && $DejaPasse } { break } scan $Ligne "%s %s %s %s %s %s" NomLu BanqueId Access Expect Genre Espece switch -regexp $Quoi { "All" { set Texte "$BanqueId $Access $Expect $Genre $Espece" } "BanqueId" { set Texte "$BanqueId" } "Access" { set Texte "$Access" } "Expect" { set Texte "$Expect" } "Orga" { set Texte "$Genre $Espece" } default { set Texte "$BanqueId $Access $Expect $Genre $Espece" } } set DejaPasse 1 lappend LesOrthos $Texte } return $LesOrthos } while {[file exists $FichierOrthologuesFamiliers]} { if {[OuiOuNon "$FichierOrthologuesFamiliers already exists\n Do I cancel LesOrthologuesFamiliersDuBlastP ?"]} { return $FichierOrthologuesFamiliers } if {[OuiOuNon "$FichierOrthologuesFamiliers already exists\n Do I replace it ?"]} { File delete -force $FichierOrthologuesFamiliers break } if {[OuiOuNon "$FichierOrthologuesFamiliers already exists\n Do I append to it ?"]} { set LesAnciennes {} foreach Ligne [LesLignesDuFichier $FichierOrthologuesFamiliers] { scan $Ligne "%s" NomLu set DejaVu($NomLu) 1 } break } } set LesNomOrthologues {} set LesNomAPNs {} foreach NomLu [ListeDesPABs] { if {[info exists DejaVu($NomLu)]} { continue } set SesAPNs {} set FichierAPNs "$RepertoireDuGenome/apns/$NomLu" if {[file exists $FichierAPNs]} { foreach Ligne [LesLignesDuFichier $FichierAPNs] { set Genre "" set Espece "" set Organisme "" scan $Ligne "%s %s %f %s %s" BanqueId Access PN Genre Espece if { $PN > 0.001 } { break } if {$Espece!=""} { set Organisme "$Genre $Espece" } if {$Organisme==""} { continue set Organisme [OrgaDuAccess $Access Complet $BanqueId] } if {$Organisme==""} { continue } if { ! [FamiliarOrganism $Organisme] && $Organisme!=$NotreOS} { continue } lappend SesAPNs "$NomLu $Ligne" } } foreach APN $SesAPNs { AppendAuFichier $FichierOrthologuesFamiliers [join $SesAPNs "\n"] } } return $FichierOrthologuesFamiliers } proc LesOubliesParGscope {} { foreach Nom [ListeDesPABs] { set Fic "[RepertoireDuGenome]/msf/$Nom" if { ! [file exists $Fic]} { set MSF 0 } elseif {[regexp "NoSequence" [ContenuDuFichier $Fic]]} { set MSF -1 } else { set MSF 1 } set Fic "[RepertoireDuGenome]/daedalushits/$Nom" if { ! [file exists $Fic]} { set DAE 0 } else { set DAE 1 } set Fic "[RepertoireDuGenome]/blastp/$Nom" if { ! [file exists $Fic]} { set BLA 0 } elseif {[regexp "No hits" [ContenuDuFichier $Fic]]} { set BLA -1 } else { set BLA 1 } if {$MSF==1 && $DAE==1 && $BLA==1} { continue } if {$BLA==0 && ($MSF!=0 || $DAE!=0)} { lappend LesOublies "$Nom sans blast mais avec autre" continue PourVoir $Nom } if {$DAE==0 && $BLA==1} { lappend LesOublies "$Nom sans daedalus mais avec blast" continue PourVoir $Nom } lappend LesOublies "$Nom $MSF $DAE $BLA" } return $LesOublies } proc LesOverlapsCommunsEntreBlastEtLoc {} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OverlapEtProfils"] { set DD [lindex $Ligne 0] set Vu($DD) 1 } foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OverlapDDAffy_Loc_sansDDclusters_New"] { set L [split $Ligne " "] foreach Nom $L { if {[regexp "DD" $Nom] && [info exists Vu($Nom)]} { lappend LesCommuns $Ligne break } } } Espionne [llength $LesCommuns] #SauveLesLignes $LesCommuns dans "[RepertoireDuGenome]/communs_overlaps_blast_loc" SauveLesLignes $LesCommuns dans "[RepertoireDuGenome]/communs_overlaps_blast_loc_new" } proc LesOverlapsSupplementairesObtenusParLoc {} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OverlapEtProfils"] { set DD [lindex $Ligne 0] set Vu($DD) 1 } foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OverlapDDAffy_Loc_sansDDclusters"] { set L [split $Ligne " "] set Signal 0 foreach Nom $L { if {[regexp "DD" $Nom] && [info exists Vu($Nom)]} { set Signal 1 } } if {$Signal==0} {lappend LesSupp $Ligne} } #FaireLire [llength $LesSupp] #SauveLesLignes $LesCommuns dans "[RepertoireDuGenome]/communs_overlaps_blast_loc" SauveLesLignes $LesSupp dans "[RepertoireDuGenome]/supp_overlaps_blast_loc" } proc LesPABDefUG {} { set Liste [ListeTest] set Rep "[RepertoireDuGenome]/Probes/UnigeneBLAST3" foreach PAB $Liste { set LeUniseqDePAB "" set LeUGDePAB "" set DefUnigene "" set DefUnigene1 "" set Def2 "" set LeUniseqDePAB [ReturnBestHitInDatabase $PAB $Rep] if {$LeUniseqDePAB==""} { set LeUGDePAB "" set DefUnigene "" } else { set LeUGDePAB [LeUGIdUN_Getz $LeUniseqDePAB "uniseq" "unigene"] if {[regexp "No Result for" $LeUGDePAB]} { set DefUnigene "" set DefUnigene1 "" } else { set DefUnigene [join [FastaCmd $LeUniseqDePAB "" 0] ""] if {[regexp "No Result for" $DefUnigene]} { set DefUnigene1 "" } else { set DefUnigene1 [lrange $DefUnigene 1 end] } } if {[regexp {/} $DefUnigene]} { regexp -indices { } $DefUnigene index set DefUnigene [string range $DefUnigene [lindex $index 0] end] regexp -indices {/} $DefUnigene index set Def2 [string range $DefUnigene 0 [expr [lindex $index 0] -1]] } else { set Def2 "" } } Espionne "$PAB\t$LeUGDePAB\t$DefUnigene1\t$Def2\t$LeUniseqDePAB" } return "" } proc LesPABsAvecInfo {Texte} { return [RepereBox $Texte "AllPlease"] } proc LesPABsAvecMemesAccessDeProtOuDemRNA {PAB FichierClusters} { #avec le fichier clusters obtenus par les overlaps set ListeDesJumeauxCorrigee [LesJRsAvecMemesAccessDeProtOuDemRNAPourUnPAB $PAB $FichierClusters] foreach Boite $ListeDesJumeauxCorrigee { lappend ListeFinale $Boite set LesAutresJumeaux [LesJumeauxDuPAB $Boite $FichierClusters] foreach AutreJumeau $LesAutresJumeaux { lappend ListeFinale $AutreJumeau } } return $ListeFinale } proc LesPABsDansLOrdre {{Replace ""}} { global RepertoireDuGenome global ListeDesPABs global ListeDeBoites set ReplaceList [regexp -nocase "ReplaceList" $Replace] set ReplaceFile [regexp -nocase "ReplaceFile" $Replace] foreach Boite [ListeDesPABs] { set Nom [Box $Boite nom] set Debut [Box $Boite debut] lappend AQuiEstCeDebut($Debut) $Nom set AQuiEstCeDebut($Debut) [lsort -unique [set AQuiEstCeDebut($Debut)]] lappend LesDebuts $Debut } set LesDebutsTries [lsort -unique -integer $LesDebuts] set NouvelleListeDesPABs {} foreach Debut $LesDebutsTries { foreach Nom [set AQuiEstCeDebut($Debut)] { set Ligne "$Nom [Box $Nom debut] [Box $Nom fin] [Box $Nom orient]" lappend NouveauBornesDesPABs $Ligne lappend NouvelleListeDesPABs $Nom } } if {$ReplaceFile} { SauveLesLignes $NouveauBornesDesPABs dans "$RepertoireDuGenome/fiches/bornesdespabs" } if {$ReplaceList} { set ListeDesPABs $NouvelleListeDesPABs set NouvelleListeDeBoites $NouvelleListeDesPABs foreach Boite [ListeDeBoites] { if {[info exists DejaVu($Boite)]} { continue } set DejaVu($Boite) 1 lappend NouvelleListeDeBoites $Boite } set ListeDeBoites $NouvelleListeDeBoites } return $NouvelleListeDesPABs } proc LesPABsDeLaFamille {Fam} { global LesPABsDeLaFamille global RepertoireDuGenome if {[info exists LesPABsDeLaFamille($Fam)]} { return [set LesPABsDeLaFamille($Fam)] } if {[info exists LesPABsDeLaFamille("EstCharge")]} { return [List] } foreach Nom [ListeDesPABs] { set FamLu [NomDeFamille $Nom] lappend LesPABsDeLaFamille($FamLu) $Nom } set LesPABsDeLaFamille("EstCharge") 1 return [LesPABsDeLaFamille $Fam] } proc LesPABsDuTFAs {Fichier {Rep ""}} { if { ! [OuiOuNon "Ok to create all nuctfa files and to replace fiches/bornesdespabs" 0]} { return "" } if {$Rep==""} { set Rep "[RepertoireDuGenome]/nuctfa" } if { ! [file exists $Rep]} { file mkdir $Rep } set PF [PreFixe] set Numero 0 set Debut 101 set Frame [expr $Debut%3] foreach Access [LaSequenceDuTFAs $Fichier "LaListeDesAccess"] { incr Numero set BeauNumero [format "%5.5d" $Numero] set Nom "$PF$BeauNumero" set TFA [LaSequenceDuTFAs $Fichier $Access] set FicTFA "$Rep/$Nom" set Ent [EnteteDuTexteTFA $TFA] set Seq [QueLaSequenceDuTexteTFA $TFA] set Long [string length $Seq] set NouveauTFA [SequenceFormatTFA $Seq "$Nom $Ent" nucbrut] Sauve $NouveauTFA dans $FicTFA set Fin [expr $Debut+$Long-1] set Bornes "$Nom $Debut $Fin F" lappend LesBornes $Bornes set Debut [expr (($Fin + 1000)/3)*3 + $Frame] } return [SauveLesLignes $LesBornes dans "[RepertoireDuGenome]/fiches/bornesdespabs"] } proc LesPDBPourBali3 {} { foreach Ligne [LesLignesDuFichier "/genomics/link/Bali3/PDB.liste"] { Espionne $Ligne scan $Ligne "%s" Access set TFA [TFADuPDB $Access "ForceSEQRES" ] Espionne $TFA set Nom "Pdb_$Access" regsub ">$Access " $TFA ">$Nom " TFA set FichierTFA [Sauve $TFA dans "/genomics/link/Bali3/proteome/$Nom"] lappend LaListe "$Nom $FichierTFA" } Espionne [SauveLesLignes $LaListe dans "/genomics/link/Bali3/Bali3.fof"] exit } proc LesPDBsDesARPs {} { Wup "Transforme le factor B du pdb avec le pourcentage d'identite sur les structures pour toutes les ARPs" set LesCategories [InterrogeLesInfosDesARPs LesCategories] regsub -all {\-\-\-\-} $LesCategories "" LesCategories regsub -all "Les" $LesCategories "" LesCategories set Type "Famille" foreach Famille $LesCategories { set FichierOut "[RepertoireDuGenome]/1yag_${Famille}.pdb" ChangeLeFactorBParIDDansLaPDB 1yag $FichierOut $Famille $Type } set FichierOut "[RepertoireDuGenome]/1yag_LesARPs.pdb" ChangeLeFactorBParIDDansLaPDB 1yag $FichierOut Total return "" } proc LesPEtA {Liste {ListeDeTextes ""} {Invite "Select ... and validate."}} { Wup "Permet une selection entre plusieurs choix" global ChoixMultipleRadio global validOk if { $ListeDeTextes == {}} {set ListeDeTextes $Liste} if {[llength $Liste] == 0 } {return [list {} {}]} set MaxScreenX [expr [winfo screenwidth .]/2] set MaxScreenY [expr [winfo screenheight .]/2] set n 0 set LesLooks {} foreach Element $Liste { incr n set Look "a$n" lappend LesLooks $Look } set w [NomDe fenetre] catch {destroy $w} catch {unset validOk} toplevel $w wm geometry $w +300+100 wm title $w "$Invite" #wm resizable $w false false #Creation des boutons ##################### set Boutons $w.termine frame $Boutons button $Boutons.dismiss -text "Dismiss" -background "red" -relief "ridge" -padx "2" -command {set validOk 0} button $Boutons.toutpresent -text "All +" -background "yellow" -relief "ridge" -padx "2" -command { foreach Look [array names ChoixMultipleRadio] { set ChoixMultipleRadio($Look) p } } button $Boutons.toutabsent -text "All -" -background "orange" -relief "ridge" -padx "2" -command { foreach Look [array names ChoixMultipleRadio] { set ChoixMultipleRadio($Look) a } } button $Boutons.validate -text "Validate" -background "green" -relief "ridge" -padx "2" -command {set validOk 1} pack $Boutons -side bottom -pady 2 -fill x pack $Boutons.dismiss $Boutons.toutpresent $Boutons.toutabsent $Boutons.validate -side left -expand yes #Creation de la frame contenant # les radio boutons # les scrollbars ############################### frame $w.frame set BouRad "$w.frame.radios" set ScroHor "$w.frame.xscroll" set ScroVer "$w.frame.yscroll" scrollbar $ScroVer -command "$BouRad yview" scrollbar $ScroHor -command "$BouRad xview" -orient horizontal set CanvaScreenX 200 set CanvaScreenY 25 set HauteurUneLigne 25 canvas $BouRad -width $CanvaScreenX -height $CanvaScreenY -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" set HauteurTotale 5 set LargeurTotale 0 set TailleLabel 0 set LongestLabel 0 foreach Look $LesLooks Element $Liste Texte $ListeDeTextes { set FLook "$BouRad.$Look" frame $FLook radiobutton $FLook.radioP -relief flat -variable ChoixMultipleRadio($Look) -value p -width 0 radiobutton $FLook.radioA -relief flat -variable ChoixMultipleRadio($Look) -value a -width 0 label $FLook.text -text $Texte -anchor "w" pack $FLook.radioP $FLook.radioA $FLook.text -side left $BouRad create window 0 $HauteurTotale -anchor "nw" -window $FLook incr HauteurTotale $HauteurUneLigne set TailleLabel [winfo reqwidth $FLook.text] if {$TailleLabel > $LongestLabel} { set LaPlusLongueFrame "$FLook" set LongestLabel $TailleLabel } } update grid $w.frame.radios -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $w.frame 0 -weight 1 -minsize 0 grid columnconfig $w.frame 0 -weight 1 -minsize 0 pack $w.frame -expand yes -fill both #Mise a jour de la scroll region et de la taille du canvas #update set Taille1 [winfo reqwidth $LaPlusLongueFrame] set Taille2 [winfo width $LaPlusLongueFrame] if {$Taille1 > $Taille2} {set Taille $Taille1} else {set Taille $Taille2} $BouRad configure -width [Mini $Taille $MaxScreenX] $BouRad configure -height [Mini [expr $HauteurTotale+10] $MaxScreenY] $BouRad configure -scrollregion [list 0 0 $Taille $HauteurTotale] tkwait variable validOk destroy $w if {! $validOk} {return [list {} {}]} foreach Look $LesLooks { lappend LesPAIs [set ChoixMultipleRadio($Look)] } set LesPresents {} set LesAbsents {} foreach Look $LesLooks Element $Liste PAI $LesPAIs { if {$PAI == "p"} {lappend LesPresents $Element} if {$PAI == "a"} {lappend LesAbsents $Element} } return [list $LesPresents $LesAbsents] } proc LesPanneauxPossibles {{Panneau LaListeMerci}} { global RepertoireDuGenome global LesPanneauxPossibles if { ! [info exists LesPanneauxPossibles]} { # set LesPanneauxPossibles(PresenceAbsence) "Listbox:LesGenomesParListe" set LesPanneauxPossibles(ShowOrganisms) "Texte:MontreOrganismes" set LesPanneauxPossibles(LinearGenome) "GscopeBoard $RepertoireDuGenome PourGif" set LesPanneauxPossibles(CircularGenome) "RscopeBoard $RepertoireDuGenome PourGif" set LesPanneauxPossibles(PhyloRank) "DessineOrgaEtSesPlaces $RepertoireDuGenome/fiches/orgaetsesplaces.tout_le_monde PourGif" set LesPanneauxPossibles(PhyloRanks) "DessineOrgaEtSesPlaces $RepertoireDuGenome/fiches/orgaetsesplaces.> PourGif" set LesPanneauxPossibles(ProteomeDotplot) "DotPlot genomes > Proches PourGif" } if {$Panneau=="LaListeMerci"} { return [array names LesPanneauxPossibles] } if {[info exists LesPanneauxPossibles($Panneau)]} { return [set LesPanneauxPossibles($Panneau)] } return "Sorry no such panneau" } proc LesParaloguesDuBlastP {} { global RepertoireDuGenome global NotreOS global NotreOrga set FichierParalogues "$RepertoireDuGenome/fiches/paralogues.blastp" set LesNomParalogues {} set LesNomAPNs {} foreach Nom [ListeDesPABs] { set SesParalogues {} set SesAPNs {} set FichierAPNs "$RepertoireDuGenome/apns/$Nom" if {[file exists $FichierAPNs]} { foreach Ligne [LesLignesDuFichier $FichierAPNs] { scan $Ligne "%s %s %f" BanqueId Access PN if { $PN > 0.001 } { break } set Para [Narcisse $Access] if {$Para==$Nom} { continue } if { ! [regexp "[ExpressionReguliereDesPABs]" $Para]} { continue } lappend SesParalogues $Para lappend SesAPNs "$BanqueId $Access $PN" } } lappend LesNomParalogues "$Nom [join $SesParalogues " "]" foreach APN $SesAPNs { lappend LesNomAPNs "$Nom $APN" } } Espionne [SauveLesLignes $LesNomParalogues dans "$FichierParalogues"] Espionne [SauveLesLignes $LesNomAPNs dans "$FichierParalogues.apn"] return $FichierParalogues } proc LesParaloguesDuBlastPPourMs {{Source ""} {SeuilExpect ""}} { if {$SeuilExpect==""} { set SeuilExpect 0.001 } set MaxListe 999 set FichierParalogues "[RepertoireDuGenome]/fiches/paraloguesMs" if {[FileExists $FichierParalogues]} { foreach Ligne [LesLignesDuFichier $FichierParalogues] { scan $Ligne "%s" Nom set DejaVu($Nom) 1 } } if {$Source==""} { set Source "blastp" } if {$Source=="blastp"} { foreach Nom [ListeDesPABs] { Espionne "je cherche les paralogues pour $Nom" if {[info exists DejaVu($Nom)]} { continue } set FichierBlast [GscopeFile $Nom "blastp"] if {[FileAbsent $FichierBlast]} {continue} set n [DecortiqueBlast $FichierBlast $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lProfil lPN] if {$n==0} { continue } set MesParalogues {} foreach BanqueId $lBanqueId Access $lAccess { if {[regexp -nocase {\:} $BanqueId]} { set NomLu [StringApres ":" dans $BanqueId] if {$NomLu==$Nom} { continue } if {[EstUnPAB $NomLu]} { lappend MesParalogues $NomLu continue } } } if {$MesParalogues=={}} { continue } set BonneLigne "$Nom [join $MesParalogues " "]" Espionne $BonneLigne AppendAuFichier $FichierParalogues $BonneLigne } } return $FichierParalogues } proc LesParaloguesDuMSF {} { global RepertoireDuGenome global NotreOS global NotreOrga set FichierParalogues "$RepertoireDuGenome/fiches/paralogues.msf" set FichierDistanceMSF "$RepertoireDuGenome/fiches/distancesphylo.$NotreOrga" while { ! [file exists $FichierDistanceMSF]} { if { ! [OuiOuNon "$FichierDistanceMSF\n doesn't exist. Do I calculate it ? "]} { return "" } set FichierDistanceMSF [CreeDistancesPhyloAvecLesMSFs $NotreOrga ".$NotreOrga"] } foreach Ligne [LesLignesDuFichier $FichierDistanceMSF] { scan $Ligne "%s" Nom set SesParalogues {} set SesDistances {} set Premier 1 foreach {Orga Dist Access} [lrange [split $Ligne " "] 1 end] { if {$Orga!=$NotreOrga} { continue } if {$Premier} { set Premier 0 } set Para [Narcisse $Access] if {$Para==$Nom} { continue } lappend SesParalogues $Para lappend SesDistances $Dist } lappend LesNomParalogues "$Nom [join $SesParalogues " "]" lappend LesNomDistances "$Nom [join $SesDistances " "]" } Espionne [SauveLesLignes $LesNomParalogues dans "$FichierParalogues"] Espionne [SauveLesLignes $LesNomDistances dans "$FichierParalogues.dist"] } proc LesParametresDuDesign {args} { Wup "Permet de gerer et stocker les parametres du design et de les donner a toutes les procedures qui en ont besoin" #Utilisation Qui ValeurOuNon Quoi #Valeur pour Qui (ex): #LesZones #NbOligo ... #Valeur pour Quoi: #Positionne Positionne le parametre a la valeur #Ajoute Ajoute ou positionne le parametre si il n existe pas #Existe Retourne 1 si la valeur existe ou 0 sinon #LaValeurMerci Retourne la valeur du parametre ou vide sinon #Reset Positionne la valeur a vide #UnsetAll Efface tout #Particulier: #Qui=all Retourne toutes les valeurs du tableau #Qui=UnsetAll Vide le tableau en entier #Quoi=Reset et Valeur=all Supprime toutes les entrees de Qui (Ex:LesZones*) #Qui=LesZones peut etre seul ou associe avec LaSequence (voir les join args par ",") global ParametresDuDesign set Qui [lindex $args 0] if { $Qui==""} { return "" } elseif {$Qui=="all"} { if {[info exists ParametresDuDesign]} {return [array get ParametresDuDesign]} } elseif {$Qui=="UnsetAll"} { array unset ParametresDuDesign "*" return "" } set NbArgs [llength $args] #Valeur si il y en a une ok sinon c est aussi $Qui set Valeur [lindex $args end-1] set Quoi [lindex $args end] if {$Quoi==""} {set Quoi "LaValeurMerci"} if {$Quoi=="Positionne"} { if {$Qui=="LesZones" && [expr $NbArgs > 3]} { set Qui [join [lrange $args 0 end-2] ","] } set ParametresDuDesign($Qui) $Valeur return "" } elseif {$Quoi=="Reset"} { if {$Valeur=="all"} { array unset ParametresDuDesign "$Qui*" } else { if {$Qui=="LesZones" && [expr $NbArgs > 2]} { set Qui [join [lrange $args 0 end-1] ","] } if {[info exists ParametresDuDesign($Qui)]} {unset ParametresDuDesign($Qui)} } } elseif {$Quoi=="LaValeurMerci"} { if {$Qui=="LesZones" && [expr $NbArgs > 2]} { set Qui [join [lrange $args 0 end-1] ","] } if {[info exists ParametresDuDesign($Qui)]} {return [set ParametresDuDesign($Qui)]} else {return ""} } elseif {$Quoi=="Ajoute"} { if {$Qui=="LesZones" && [expr $NbArgs > 3]} { set Qui [join [lrange $args 0 end-2] ","] } lappend ParametresDuDesign($Qui) $Valeur } elseif {$Quoi=="Existe"} { if {$Qui=="LesZones" && [expr $NbArgs > 2]} { set Qui [join [lrange $args 0 end-1] ","] } if {[info exists ParametresDuDesign($Qui)]} {return 1} else {return 0} } return "" } proc LesParametresDuDesign_OLD {Qui {Valeur ""} {Quoi ""}} { Wup "Permet de gerer et stocker les parametres du design et de les donner a toutes les procedures qui en ont besoin" #Positionne Positionne le parametre a la valeur #Ajoute Ajoute ou positionne le parametre si il n existe pas #Existe Retourne 1 si la valeur existe ou 0 sinon #LaValeurMerci Retourne la valeur du parametre ou vide sinon #Reset Positionne la valeur a vide #UnsetAll Efface tout global ParametresDuDesign #Espionne "Param $Qui $Valeur $Quoi" if {$Qui==""} { return "" } elseif {$Qui=="all"} { if {[info exists ParametresDuDesign]} {return [array get ParametresDuDesign]} } elseif {$Qui=="UnsetAll"} { array unset ParametresDuDesign "*" return "" } if {$Quoi==""} {set Quoi "LaValeurMerci"} if {$Quoi=="Positionne"} { set ParametresDuDesign($Qui) $Valeur return "" } elseif {$Quoi=="Reset"} { if {[info exists ParametresDuDesign($Qui)]} {unset ParametresDuDesign($Qui)} } elseif {$Quoi=="LaValeurMerci"} { if {[info exists ParametresDuDesign($Qui)]} {return [set ParametresDuDesign($Qui)]} else {return ""} } elseif {$Quoi=="Ajoute"} { lappend ParametresDuDesign($Qui) $Valeur } elseif {$Quoi=="Existe"} { if {[info exists ParametresDuDesign($Qui)]} {return 1} else {return 0} } return "" } proc LesParametresDuSetUp {Qui {Valeur ""} {Quoi ""}} { Wup "Permet de gerer et stocker les parametres du design et de les donner a toutes les procedures qui en ont besoin" #Positionne Positionne le parametre a la valeur #Ajoute Ajoute ou positionne le parametre si il n existe pas #Existe Retourne 1 si la valeur existe ou 0 sinon #LaValeurMerci Retourne la valeur du parametre ou vide sinon #Reset Positionne la valeur a vide #UnsetAll Efface tout global ParametresDuSetUp Espionne "Param $Qui $Valeur $Quoi" if {$Qui==""} { return "" } elseif {$Qui=="all"} { if {[info exists ParametresDuSetUp]} {return [array get ParametresDuSetUp]} } elseif {$Qui=="UnsetAll"} {array unset ParametresDuSetUp;return ""} if {$Quoi==""} {set Quoi "LaValeurMerci"} if {$Quoi=="Positionne"} { set ParametresDuSetUp($Qui) $Valeur return "" } elseif {$Quoi=="Reset"} { if {[info exists ParametresDuSetUp($Qui)]} {unset ParametresDuSetUp($Qui)} } elseif {$Quoi=="LaValeurMerci"} { if {[info exists ParametresDuSetUp($Qui)]} {return [set ParametresDuSetUp($Qui)]} else {return ""} } elseif {$Quoi=="Ajoute"} { lappend ParametresDuSetUp($Qui) $Valeur } elseif {$Quoi=="Existe"} { if {[info exists ParametresDuSetUp($Qui)]} {return 1} else {return 0} } return "" } proc LesParametresParDefaut {} { Wup "Positione les parametres du design par defaut" #Les parametres par defauts #Pour la methode de calcul du Tm NearestNeighbor #Pour la Specificite 70 percent et 15 bases contigues #Pour le Pas on positionne a 10 #Pour le Blast expect limite 100 #Pour le Blast taille des mots 15 #Pour le Blast max a aligne 2000 #Pour le nombre d oligo 100 #QueryCheck 1 set LesParamsParDefaut [list NbOligo "100" TmMethod "NearestNeighbor" IdLimit "70.0" NbContiguous "15" Step "10" BlastExpect "100" BlastWord "15" BlastNbAligned "2000" BlastStrand "1" QueryCheck "1"] foreach {Param Valeur} $LesParamsParDefaut { if {! [LesParametresDuDesign $Param "Existe"]} { LesParametresDuDesign $Param $Valeur "Positionne" } else {continue} } return "" } proc LesParticuliersPourRegine {FichierSortie} { set FichierCorres "[RepertoireDuGenome]/lacorrespondance" foreach Ligne [LesLignesDuFichier $FichierCorres] { if {$Ligne==""} {continue} set Ligne [split $Ligne "\t"] set New [lindex $Ligne 0]; set Old [lindex $Ligne 1] set O($New) $Old } set FichierParticRegine "[RepertoireDuGenome]/Regine/pbs_out" foreach Ligne [LesLignesDuFichier $FichierParticRegine] { if {$Ligne==""} {continue} set Vu($Ligne) 1 } set FichierPartic "[RepertoireDuGenome]/fiches/436profil" foreach Ligne [LesLignesDuFichier $FichierPartic] { if {$Ligne==""} {continue} set LesChamps [split $Ligne "\t"] set Code [lindex $LesChamps 0] if {[info exists Vu($Code)]} { Espionne $Code set HNK $O($Code) set User [lindex $LesChamps 1] set CodeClone [lindex $LesChamps 2] set Bande [lindex $LesChamps 3] set Ite [lindex $LesChamps 4] set Ine [lindex $LesChamps 5] set Its [lindex $LesChamps 6] set Ins [lindex $LesChamps 7] set Itu [lindex $LesChamps 8] set Inu [lindex $LesChamps 9] set DifMoy [lindex $LesChamps 10] set Pmoy [lindex $LesChamps 11] set PDD [lindex $LesChamps 12] set PDD2 [lindex $LesChamps 13] if {$PDD=="" && $PDD2!=""} {set PDD $PDD2} set ProfCons [lindex $LesChamps 14] set ProfVN [lindex $LesChamps 15] set ProfNorthern [lindex $LesChamps 16] set ProfMb [lindex $LesChamps 17] lappend Liste "$HNK\t$Code\t$CodeClone\t$Bande\t$User\t$Ite\t$Ine\t$Its\t$Ins\t$Itu\t$Inu\t$DifMoy\t$Pmoy\t$PDD\t$ProfCons\t$ProfVN\t$ProfNorthern\t$ProfMb" } } Espionne [llength $Liste] SauveLesLignes $Liste dans $FichierSortie } proc LesPatternSelectedPourPromAn {FileTFA Pattern TSSPosition} { if {$Pattern == ""} { return } set LesInfos {} set LesInfosAntisense {} set ResultType "PatternResearch" set LesPatternsSelected [PatternResearchInSeqFileTFA $Pattern $FileTFA] foreach PatternSelected $LesPatternsSelected { set Debut [lindex $PatternSelected 0] set Fin [lindex $PatternSelected 1] set TSSDist1 [expr -1 * ($TSSPosition - $Debut)] set TSSDist2 [expr -1 * ($TSSPosition - $Fin) ] if {[expr abs($TSSDist1)] < [expr abs($TSSDist2)]} {set TSSDist $TSSDist1} else {set TSSDist $TSSDist2} lappend LesInfos [list $Pattern $ResultType $Debut $Fin "+" "" $TSSDist "100.00" $Pattern ""] } set LesInfos [lsort -index 6 -real -command CompareLaVADesNombres $LesInfos] set PatternRAndC [NucToReverseAndComplementNuc $Pattern] set LesPatternsSelected [PatternResearchInSeqFileTFA $PatternRAndC $FileTFA] foreach PatternSelected $LesPatternsSelected { set Debut [lindex $PatternSelected 0] set Fin [lindex $PatternSelected 1] set TSSDist1 [expr -1 * ($TSSPosition - $Debut)] set TSSDist2 [expr -1 * ($TSSPosition - $Fin) ] if {[expr abs($TSSDist1)] < [expr abs($TSSDist2)]} {set TSSDist $TSSDist1} else {set TSSDist $TSSDist2} lappend LesInfosAntisense [list "$Pattern antisense" $ResultType $Debut $Fin "-" "" $TSSDist "100.00" "$Pattern antisense" ""] } set LesInfosAntisense [lsort -index 6 -real -command CompareLaVADesNombres $LesInfosAntisense] foreach InfoAntisense $LesInfosAntisense {lappend LesInfos $InfoAntisense} return $LesInfos } proc LesPbBLASTsRefSeq_Design {} { Wup "Design de RefSeq complet, environ 19200" Wup "Pour faire les masked tous d un seul coup" set DataBase "/blast/rshuman.nsq" set Dir "[RepertoireDuGenome]/Probes/RefSeq_TFA" set LesQuerys [glob -nocomplain -directory $Dir "NM*"] #set Index [lsearch $LesQuerys "[RepertoireDuGenome]/Probes/RefSeq_TFA/NM145199"] #set LesQuerys [lrange $LesQuerys $Index end]] set NbPb 0 foreach Query $LesQuerys { set Dir "[RepertoireDuGenome]/Probes/RefSeq_Design" set NMDIR [LeRepertoireDeRefSeq [file tail $Query]] set Dir "${Dir}/${NMDIR}" set Q [file tail $Query] if {[file exists "$Dir/${Q}.blastn"]} { #file delete -force "$Dir/${Q}.blastn" #file delete -force "$Dir/${Q}.log" #file delete -force "$Dir/${Q}.oligo" #file delete -force "$Dir/${Q}.encours" #file delete -force "$Dir/${Q}.selection" incr NbPb } else { Espionne "NoBlast for $Dir/$Q" } } Espionne "NbPb $NbPb" } 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 LesPetitesRegionsDesGrandesRegions {LesGrandesRegions} { set LesBornes {} set NbRegions [llength $LesGrandesRegions] foreach UneGrandeRegion $LesGrandesRegions { set D [Mini [lindex $UneGrandeRegion 0] [lindex $UneGrandeRegion 1]] set F [Maxi [lindex $UneGrandeRegion 0] [lindex $UneGrandeRegion 1]] if {![info exists TabDebut($D)]} {set TabDebut($D) 1} if {![info exists TabFin($F) ]} {set TabFin($F) 1} for {set i $D} {$i <= $F} {incr i} {lappend LesBornes $i} } set i 0 set LesPetitesRegions {} set LesBornes [lsort -unique -integer $LesBornes] set DebutDeRef [lindex $LesBornes 0] foreach Borne $LesBornes { incr i set EstUnDebut 0 set EstUneFin 0 set EstDebutDeRef 0 set ProchainEstUnDebut 0 set ProchainEstUneFin 0 if {[info exists TabDebut($Borne) ]} {set EstUnDebut 1} if {[info exists TabFin($Borne) ]} {set EstUneFin 1} if {[info exists TabDebut([expr $Borne+1])]} {set ProchainEstUnDebut 1} if {[info exists TabFin([expr $Borne+1])]} {set ProchainEstUneFin 1} if {$Borne == $DebutDeRef } {set EstDebutDeRef 1} if {$EstUnDebut && $EstUneFin} { if {!$EstDebutDeRef} { lappend LesPetitesRegions [list $DebutDeRef [lindex $LesBornes [expr $i-2]]] } lappend LesPetitesRegions [list $Borne $Borne] set DebutDeRef [lindex $LesBornes $i] continue } if {$EstUneFin} { if {!$EstDebutDeRef} { lappend LesPetitesRegions [list $DebutDeRef $Borne] } else { lappend LesPetitesRegions [list $Borne $Borne] } set DebutDeRef [lindex $LesBornes $i] continue } if {$EstUnDebut} { if {!$EstDebutDeRef} { lappend LesPetitesRegions [list $DebutDeRef [lindex $LesBornes [expr $i-2]]] } if {$ProchainEstUnDebut} { lappend LesPetitesRegions [list $Borne $Borne] set DebutDeRef [lindex $LesBornes $i] } else { set DebutDeRef $Borne } continue } } return [lsort -integer -index 0 $LesPetitesRegions] } proc LesPetitesRegionsDuBlast {aTabBlast FichierTFA {LesBanquesIdOuLesContigs All} {TailleMin None} {SeuilId None} {JeBlastLesRegionsAbsentes 1}} { upvar $aTabBlast TabBlast #Parametres du second blast des regions absentes du premier blast set Filtre F set NbSubject 250 set ExpectDeRef 1 set EditCommand 0 set RepertoireDeW [RepertoireDeTravail] set NomFichier [file tail $FichierTFA] set BIdDeRef [set TabBlast(1)] regexp -nocase {(HS[0-9XYUn]*):([0-9a-z]*)} $BIdDeRef tmp Chromosome ContigDeRef set LesPetitesRegions [LaFrequenceDesPetitesRegions TabBlast $LesBanquesIdOuLesContigs $SeuilId] set LesPetitesRegions_tmp $LesPetitesRegions set LesPetitesRegions {} foreach UneRegion $LesPetitesRegions_tmp { set Deb [lindex $UneRegion 0] set Fin [lindex $UneRegion 1] set Freq [lindex $UneRegion 2] if {$Freq != "0"} {lappend LesPetitesRegions $UneRegion;continue} if {$JeBlastLesRegionsAbsentes != 1} {lappend LesPetitesRegions $UneRegion;continue} set FichierTFA_tmp "$RepertoireDeW/${NomFichier}_${Deb}_${Fin}" set FichierBlast_tmp "$RepertoireDeW/${NomFichier}_${Deb}_${Fin}.blastnhuman" set Seq [string range [QueLaSequenceDuTFA $FichierTFA] [expr $Deb-1] [expr $Fin-1]] if {$TailleMin != "None" && [string length $Seq] < $TailleMin} { lappend LesPetitesRegions $UneRegion continue } set Entete "[PremiereLigneDuFichier $FichierTFA] AREA $Deb to $Fin" set SeqTFA [SequenceFormatTFA $Seq $Entete] Sauve $SeqTFA dans $FichierTFA_tmp if {![ValidationDeLaSequenceMasquee $FichierTFA_tmp]} { lappend LesPetitesRegions $UneRegion continue } Espionne "BlastN $Deb -> $Fin" BlastNDuFichier $FichierTFA_tmp human $FichierBlast_tmp $Filtre $NbSubject $ExpectDeRef $EditCommand DepouilleLeBlast TabBlastTmp $FichierBlast_tmp $ExpectDeRef $NbSubject if {![file exists $FichierBlast_tmp] || ![info exists TabBlastTmp(1)]} { lappend LesPetitesRegions $UneRegion continue } set LesPetitesRegionsAbsentes [LaFrequenceDesPetitesRegions TabBlastTmp $ContigDeRef $SeuilId] if {$LesPetitesRegionsAbsentes != {}} { foreach UnePetiteRegionAbsente $LesPetitesRegionsAbsentes { set DebTmp [expr $Deb + [lindex $UnePetiteRegionAbsente 0] - 1] set FinTmp [expr $Deb + [lindex $UnePetiteRegionAbsente 1] - 1] set UnePetiteRegionAbsente [lreplace $UnePetiteRegionAbsente 0 1 $DebTmp $FinTmp] lappend LesPetitesRegions $UnePetiteRegionAbsente } } else { lappend LesPetitesRegions $UneRegion } unset TabBlastTmp File delete -force $FichierBlast_tmp File delete -force $FichierTFA_tmp } return $LesPetitesRegions } proc LesPfamStartStop {FileMacsims ListeNames Box Ref} { set LesPfamStartStop {} InitPosRel2Abs $FileMacsims $ListeNames foreach Chacun $ListeNames { if {$Chacun==$Ref} {set Chacun $Box} set LesPfamsChacun [FromMacsims $FileMacsims $Chacun "ConcatPfam"] foreach PfamChacun $LesPfamsChacun { set MotsPfamChacun [split $PfamChacun "/"] set Pfam [lindex $MotsPfamChacun 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id regsub "ERROR_" $Id "" Id FstartFstop $PfamChacun RFstart RFstop set Start [DonnePosRA $Chacun $RFstart Absolue] set Stop [DonnePosRA $Chacun $RFstop Absolue] set PfSS "$Id $Start $Stop" lappend LesPfamStartStop $PfSS } } set LesPfamStartStop [lsort -unique $LesPfamStartStop] set LesPfamStartStop [lsort -command TriePfSS $LesPfamStartStop] return $LesPfamStartStop } proc LesPfamStartStopNonRedondant {LaCourante} { set collapse 1 while {$collapse} { if {[llength $LaCourante]<2} {break} set lA [lrange $LaCourante 0 end-1] set lB [lrange $LaCourante 1 end] set i -1 foreach A $lA B $lB { DecortiquePfSS $A PfA StartA StopA DecortiquePfSS $B PfB StartB StopB if {$PfA!=$PfB || ! [Recouvrement $StartA $StopA $StartB $StopB]} { set collapse 0 incr i continue } set StartN [Mini $StartA $StartB] set StopN [Maxi $StopA $StopB] set N "$PfA $StartN $StopN" lappend LesAnciens($N) $A $B if {[info exists LesAnciens($A)]} { set LesAnciens($N) [lsort -unique [concat $LesAnciens($N) $LesAnciens($A)]] } if {[info exists LesAnciens($B)]} { set LesAnciens($N) [lsort -unique [concat $LesAnciens($N) $LesAnciens($B)]] } set collapse 1 break } if { ! $collapse } { break } set LaCourante [lreplace $LaCourante [expr $i+1] [expr $i+2] $N] } return $LaCourante } proc LesPhrasesMemorisees {{LesPhrasesAMemoriser ""}} { global LesPhrasesMemorisees if {[string equal -nocase $LesPhrasesAMemoriser "unset"]} { if {[info exists LesPhrasesMemorisees]} {unset LesPhrasesMemorisees} return } if {$LesPhrasesAMemoriser != ""} { set LesPhrasesMemorisees [LesPhrasesNettoyees $LesPhrasesAMemoriser] return $LesPhrasesMemorisees } if {[info exists LesPhrasesMemorisees]} {return $LesPhrasesMemorisees} return } proc LesPhrasesNettoyees {LesPhrases} { set LesPhrasesNettoyees {} foreach Phrase $LesPhrases { set Phrase [string toupper $Phrase] regsub -all {[^0-9A-Z_\-\+\.]|\. |\.$} $Phrase " " Phrase regsub -all -nocase "hypothetical protein" $Phrase " " Phrase regsub -all -nocase "full insert sequence" $Phrase " " Phrase regsub -all -nocase "full length" $Phrase " " Phrase regsub -all -nocase "similar to" $Phrase " " Phrase regsub -all -nocase "supported by" $Phrase " " Phrase while {[regexp " " $Phrase]} {regsub -all " " $Phrase " " Phrase} set Phrase [string trim $Phrase] set LaPhrase {} foreach Mot [split [string trim $Phrase] " "] { if {[EstCeQueCeMotEstInterdit $Mot]} {continue} lappend LaPhrase $Mot } if {$LaPhrase == {}} {continue} lappend LesPhrasesNettoyees [join $LaPhrase " "] } return $LesPhrasesNettoyees } proc LesPlusProchesPABs {Sequence {BestOnlyOrExpectOrMaxList ""} {ForceNucProt ""} {BanqueBlast ""} {Programme ""}} { set SequencePropre "" foreach Ligne [split $Sequence "\n"] { if {[regexp ">" $Ligne]} { continue } regsub -nocase -all {[^a-z]} $Ligne "" S append SequencePropre $S } set Sequence $SequencePropre set IsProt [IsProt $Sequence $ForceNucProt] set BanqueProt "[RepertoireDuGenome]/banques/AllProttfa" set BanqueNuc "[RepertoireDuGenome]/banques/AllNuctfa" if {$BanqueBlast==""} { if {$IsProt} { if {$Programme==""} { set Programme "P" } set BanqueBlast $BanqueProt } else { if {$Programme==""} { set Programme "N" } set BanqueBlast $BanqueNuc } } set PremiereFois 1 while {[FileAbsent $BanqueBlast]} { FaireLire "I can not find the BlastDatabase $BanqueBlast\nPlease help me" set BanqueBlast [Entre $BanqueBlast] if {[FileExists $BanqueBlast]} { break } if {$PremiereFois && [OuiOuNon "Do I try tblastN or blastX"]} { set PremiereFois 0 if {$IsProt} { if {[file exists $BanqueNuc]} { set Programme "tblastn" ; set BanqueBlast $BanqueNuc ; break} } else { if {[file exists $BanqueProt]} { set Programme "blastx" ; set BanqueBlast $BanqueProt ; break} } } if {[OuiOuNon "Do we continue later"]} { return "" } } set BlastOut [Blast $Programme $Sequence "retourne" $BanqueBlast "NoGenericCommand"] if {[regexp -nocase "Best" $BestOnlyOrExpectOrMaxList]} { set CutPN 0.001 set MaxListe 1 } elseif {[regexp {^[0-9]+$} $BestOnlyOrExpectOrMaxList]} { set CutPN 0.001 set MaxListe $BestOnlyOrExpectOrMaxList } elseif {[regexp {^[\.\-\+-eE0-9]+$} $BestOnlyOrExpectOrMaxList]} { set CutPN $BestOnlyOrExpectOrMaxList set MaxListe "" } else { set CutPN "" set MaxListe "" } set N [DecortiqueBlast $BlastOut $CutPN $MaxListe Query lBanqueId lAccess lDE lProfil lPN] if {$N==0} { return "" } set Retour {} foreach ID $lBanqueId AC $lAccess DE $lDE PN $lPN { lappend Retour "$ID\t$AC\t$DE\tExpect=$PN" } return [join $Retour "\n"] } proc LesPositionsDeNosAccessSurLaPuce_Ontario {{Fichier ""}} { Wup "ATTENTION DESUET VOIR InterrogeActiChip2Ontario" Wup "Permet de relire le fichier de nos sequences propres avec les Ids presents sur la puce" Wup "Permet d associer a chaque Id la position sur la plaque grace au galfile et un PAB" Wup "Permet de relire le fichier de nos sequences propres avec les Ids" ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## global TabDesPositions if {$Fichier==""} {set Fichier "[RepertoireDuGenome]/Autres_Puces/Ontario/Chip_EST_Gene_Present.txt"} set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #GScopeAccess ProteinAccess DesignAccess Definition Chip_EST Original_Image_ID Verified_Image_ID clusterID if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if { [regexp -nocase "^GScopeAccess" $Ligne] || [regexp -nocase "^GScope Access" $Ligne]} {continue} set LigneSplitee [split $Ligne "\t"] set GScopeAccess [lindex $LigneSplitee 0] set ProteinAccess [lindex $LigneSplitee 1] set DesignAccess [lindex $LigneSplitee 2] set Definition [lindex $LigneSplitee 3] set Chip_EST [lindex $LigneSplitee 4] set LesOriginal_Image_ID [lindex $LigneSplitee 5] set LesVerified_Image_ID [lindex $LigneSplitee 6] set clusterID [lindex $LigneSplitee 7] if {! [expr $Chip_EST >=1]} { continue } else { if {[expr $Chip_EST > 1]} { regsub -all {\"} $LesOriginal_Image_ID "" LesOriginal_Image_ID regsub -all {\"} $LesVerified_Image_ID "" LesVerified_Image_ID set LesOriginal_Image_ID [split $LesOriginal_Image_ID ";"] set LesVerified_Image_ID [split $LesVerified_Image_ID ";"] } foreach Original_Image_ID $LesOriginal_Image_ID Verified_Image_ID $LesVerified_Image_ID { if { [InterrogeLeGalFile_Ontario $Verified_Image_ID $Original_Image_ID Block] != ""} { set Block [InterrogeLeGalFile_Ontario $Verified_Image_ID $Original_Image_ID Block] set Col [InterrogeLeGalFile_Ontario $Verified_Image_ID $Original_Image_ID Col] set Row [InterrogeLeGalFile_Ontario $Verified_Image_ID $Original_Image_ID Row] } elseif { [InterrogeLeGalFile_Ontario $Original_Image_ID $Verified_Image_ID Block] != ""} { set Block [InterrogeLeGalFile_Ontario $Original_Image_ID $Verified_Image_ID Block] set Col [InterrogeLeGalFile_Ontario $Original_Image_ID $Verified_Image_ID Col] set Row [InterrogeLeGalFile_Ontario $Original_Image_ID $Verified_Image_ID Row] } else {Espionne "$GScopeAccess pb de positionnement $LesOriginal_Image_ID $LesVerified_Image_ID";continue} set TabDesPositions($Block,$Row,$Col) 1 lappend TabDesPositions($Block,$Row,$Col,PAB) [string trim $GScopeAccess] #Espionne "B $Block R $Row C $Col PAB [string trim $GScopeAccess]" } } continue } close $F return "" } proc LesPpcrDesPs {} { foreach P [P5ofPPCR "LaListeDesPs"] { Espionne "$P" } exit } proc LesPremieresLignes {Numero {NombreDeLignes 847}} { #Reecrit dans un nouveau fichier les N premieres lignes d'un autre Espionne "LesPremieresLignes $Numero: Start" set Compteur 0 set FichierComplet [open "[Fiches]/NonBiDir/NonBidir$Numero.nb" "r"] set FichierCoupe [open "[Fiches]/NonBiDir/NonBidir.847.$Numero.nb" "w"] while { [gets $FichierComplet Ligne] >=0 && $Compteur < 847} { incr Compteur puts $FichierCoupe $Ligne } Espionne "LesPremieresLignes $Numero: End" } proc LesPremieresLignesDuFichier {Fichier n} { if { $Fichier == "" } {return {}} if {$n<1} { return {}} set f [open $Fichier r] set LesLignes {} while {[gets $f Ligne]>=0} { lappend LesLignes $Ligne if { ! [incr n -1]} { break } } close $f return $LesLignes } proc LesPresencesDesOrganismesDansCluster {Cluster LesOrganismes} { global RepertoireDuGenome set RepXHDA "$RepertoireDuGenome/bilan_xhda" set SeuilBlastPTBlastN 50 set TailleCluster [O2C2O Cluster $Cluster TailleCluster] foreach Orf [O2C2O Cluster $Cluster LesOrfs] { set FichierInfo "$RepXHDA/$Orf" if {![file exists $FichierInfo]} {continue} set F [open $FichierInfo] while {[gets $F Info] >=0} { scan $Info "%s %s %s %s" Box Orga TBlastN BlastP if {$TBlastN < $SeuilBlastPTBlastN || $BlastP < $SeuilBlastPTBlastN } {continue} set Organisme [O2C2O OrganismeCourt [string tolower $Orga] OrganismeLong] set EnEstCeUn 0 foreach OrgaDeRef $LesOrganismes { if {$Organisme == $OrgaDeRef} {set EnEstCeUn 1;break} } if {!$EnEstCeUn} {continue} if {![info exists TabTmp($Organisme)]} {set TabTmp($Organisme) 0} incr TabTmp($Organisme) } close $F } set LesPresences {} foreach Organisme $LesOrganismes { set n 0 if {[info exists TabTmp($Organisme)]} {set n [set TabTmp($Organisme)]} lappend LesPresences [expr $n * 100.0 / $TailleCluster] } return $LesPresences } proc LesPresentsAbsentsIndifferents {Liste {ListeDeTextes ""} {Invite "Select ... and validate."}} { global retourChoixMultiple global ChoixMultipleRadio global validOk Wup "returns 3 lists" if {$ListeDeTextes=={}} { set ListeDeTextes $Liste } if {[llength $Liste] == 0 } { return {} } set n 0 set LesLooks {} foreach Element $Liste { incr n set Look "a$n" lappend LesLooks $Look } if { [PourWscope] } { LesPAIs [ChoixMultiple $Look $ListeDeTextes] } else { set w [NomDe fenetre] catch {destroy $w} catch {unset validOk} toplevel $w wm geometry $w +300+100 wm title $w "$Invite" set MaxWidth 0 foreach Texte $ListeDeTextes { if { [string length $Texte] > $MaxWidth } { set MaxWidth [string length $Texte] } } frame $w.frame pack $w.frame -expand yes -fill both set BouRad "$w.frame.radios" set ScroHor "$w.frame.xscroll" set ScroVer "$w.frame.yscroll" scrollbar $ScroVer -command "$BouRad yview" scrollbar $ScroHor -command "$BouRad xview" -orient horizontal set CanvaScreenX 300 set CanvaScreenY 25 set HauteurUneLigne 25 canvas $BouRad -width $CanvaScreenX -height $CanvaScreenY -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" set HauteurTotale 5 foreach Look $LesLooks Element $Liste Texte $ListeDeTextes { set FLook "$BouRad.$Look" frame $FLook radiobutton $FLook.radioP -relief flat -variable ChoixMultipleRadio($Look) -value p radiobutton $FLook.radioA -relief flat -variable ChoixMultipleRadio($Look) -value a radiobutton $FLook.radioI -relief flat -variable ChoixMultipleRadio($Look) -value i label $FLook.text -width $MaxWidth -text $Texte -anchor "w" pack $FLook.radioP $FLook.radioA $FLook.radioI $FLook.text -side left $BouRad create window 0 $HauteurTotale -anchor "nw" -window $FLook incr HauteurTotale $HauteurUneLigne } $BouRad configure -scrollregion [list 0 0 $CanvaScreenX $HauteurTotale] grid $w.frame.radios -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $w.frame 0 -weight 1 -minsize 0 grid columnconfig $w.frame 0 -weight 1 -minsize 0 $BouRad configure -height [Mini [expr $HauteurTotale+60] 600] set Boutons $w.termine frame $Boutons button $Boutons.dismiss -text "Dismiss" -background "red" -command { set validOk 0 } button $Boutons.toutpresent -text "All +" -background "yellow" -command { foreach Look [array names ChoixMultipleRadio] { set ChoixMultipleRadio($Look) p } } button $Boutons.toutabsent -text "All -" -background "orange" -command { foreach Look [array names ChoixMultipleRadio] { set ChoixMultipleRadio($Look) a } } button $Boutons.toutindif -text "All X" -background "lightblue" -command { foreach Look [array names ChoixMultipleRadio] { set ChoixMultipleRadio($Look) i } } button $Boutons.validate -text "Validate" -background "green" -command { set validOk 1 } pack $Boutons -side top pack $Boutons.dismiss $Boutons.toutpresent $Boutons.toutabsent $Boutons.toutindif $Boutons.validate -side left tkwait variable validOk destroy $w if { ! $validOk} { return [list {} {} {}] } foreach Look $LesLooks { lappend LesPAIs [set ChoixMultipleRadio($Look)] } } set retourChoixMultiple {} set LesPresents {} set LesAbsents {} set LesIndifferents {} foreach Look $LesLooks Element $Liste PAI $LesPAIs { if { $PAI == "p" } { lappend LesPresents $Element } if { $PAI == "a" } { lappend LesAbsents $Element } if { $PAI == "i" } { lappend LesIndifferents $Element } } return [list $LesPresents $LesAbsents $LesIndifferents] } proc LesPresentsEtAbsents {Liste {ListeDeTextes ""} {Invite "Select ... and validate."}} { ###################################################### ###MODIFICATION DE LA PROC DE J. MULLER LesPEtA ### ###MODIFICATION DE LA COULEUR ET DU NOM DES BOUTONS### ###################################################### Wup "Permet une selection entre plusieurs choix" global ChoixMultipleRadio global validOk if { $ListeDeTextes == {}} {set ListeDeTextes $Liste} if {[llength $Liste] == 0 } {return [list {} {}]} set MaxScreenX [expr [winfo screenwidth .]/2] set MaxScreenY [expr [winfo screenheight .]/2] set n 0 set LesLooks {} foreach Element $Liste { incr n set Look "a$n" lappend LesLooks $Look } set w [NomDe fenetre] catch {destroy $w} catch {unset validOk} toplevel $w wm geometry $w +300+100 wm title $w "$Invite" #wm resizable $w false false #Creation des boutons ##################### set Boutons $w.termine frame $Boutons button $Boutons.dismiss -text "Dismiss" -command {set validOk 0} button $Boutons.toutpresent -text "Select All" -command { foreach Look [array names ChoixMultipleRadio] { set ChoixMultipleRadio($Look) p } } button $Boutons.toutabsent -text "Unselect All" -command { foreach Look [array names ChoixMultipleRadio] { set ChoixMultipleRadio($Look) a } } button $Boutons.validate -text "Validate" -command {set validOk 1} pack $Boutons -side bottom -pady 2 -fill x pack $Boutons.dismiss $Boutons.toutpresent $Boutons.toutabsent $Boutons.validate -side left -expand yes #Creation de la frame contenant # les radio boutons # les scrollbars ############################### frame $w.frame set BouRad "$w.frame.radios" set ScroHor "$w.frame.xscroll" set ScroVer "$w.frame.yscroll" scrollbar $ScroVer -command "$BouRad yview" scrollbar $ScroHor -command "$BouRad xview" -orient horizontal set CanvaScreenX 200 set CanvaScreenY 25 set HauteurUneLigne 25 canvas $BouRad -width $CanvaScreenX -height $CanvaScreenY -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" set HauteurTotale 5 set LargeurTotale 0 set TailleLabel 0 set LongestLabel 0 foreach Look $LesLooks Element $Liste Texte $ListeDeTextes { set FLook "$BouRad.$Look" frame $FLook radiobutton $FLook.radioP -relief flat -variable ChoixMultipleRadio($Look) -value p -width 0 radiobutton $FLook.radioA -relief flat -variable ChoixMultipleRadio($Look) -value a -width 0 label $FLook.text -text $Texte -anchor "w" -font {Courier 10} pack $FLook.radioP $FLook.radioA $FLook.text -side left $BouRad create window 0 $HauteurTotale -anchor "nw" -window $FLook incr HauteurTotale $HauteurUneLigne set TailleLabel [winfo reqwidth $FLook.text] if {$TailleLabel > $LongestLabel} { set LaPlusLongueFrame "$FLook" set LongestLabel $TailleLabel } } grid $w.frame.radios -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $w.frame 0 -weight 1 -minsize 0 grid columnconfig $w.frame 0 -weight 1 -minsize 0 pack $w.frame -expand yes -fill both #Mise a jour de la scroll region et de la taille du canvas update set Taille1 [winfo reqwidth $LaPlusLongueFrame] set Taille2 [winfo width $LaPlusLongueFrame] if {$Taille1 > $Taille2} {set Taille $Taille1} else {set Taille $Taille2} #set VraiCanvaX [expr $CanvaScreenX + [winfo width $BouRad]] #$BouRad configure -width [Mini $VraiCanvaX $MaxScreenX] $BouRad configure -width [Mini $Taille $MaxScreenX] $BouRad configure -height [Mini [expr $HauteurTotale+10] $MaxScreenY] $BouRad configure -scrollregion [list 0 0 $Taille $HauteurTotale] tkwait variable validOk destroy $w if {! $validOk} {return [list {} {}]} foreach Look $LesLooks { lappend LesPAIs [set ChoixMultipleRadio($Look)] } set LesPresents {} set LesAbsents {} foreach Look $LesLooks Element $Liste PAI $LesPAIs { if {$PAI == "p"} {lappend LesPresents $Element} if {$PAI == "a"} {lappend LesAbsents $Element} } return [list $LesPresents $LesAbsents] } proc LesProbesSetDeNosSequencesParBlast {{LesPABs ""}} { Wup "Permet de rechercher les access equivalents de nos sequences dans la puce affymetrix" Wup "Recherche faite au moyen du blastn" Wup "On se permet un cutoff pour GID de 95% et un recouvrement S/G de 95% aussi" set RepAffy "[RepertoireDuGenome]/Autres_Puces/Affy/U133A_2_0/" set RepBanque "$RepAffy/blastn" if {$LesPABs == ""} {set LesPABs [ActiChip2_0]} if {$LesPABs == "ActiChip1_0"} {set LesPABs [ActiChip1_0]} if {$LesPABs == "ActiChip2_0"} {set LesPABs [ActiChip2_0]} foreach PAB $LesPABs { set Identity 0.95 set PCoverQuery 0.95 set PCoverSubject 0.95 set FichierBlast "$RepBanque/$PAB" set NbSbjct [AskBlast $FichierBlast NbSubject] set TailleQuery [AskBlast $FichierBlast Taille] set NomQuery [AskBlast $FichierBlast Query] set LesProches "" if {$NbSbjct=="0"} {Espionne "Petit probleme pas de hit";return ""} for {set i 1} {$i <=$NbSbjct} {incr i} { set IdGlobal 0 set PRecouvrementQuery 0 set PRecouvrementSubject 0 set BId [AskBlast $FichierBlast Subject $i] #Pourcentage d'identite global: Aligne sur Total dans les alignements #Discremine les plus proches identiques sur les alignements des autres set IdGlobal [PourcentageDIdentiteGlobal $FichierBlast $BId] if {$IdGlobal<=$Identity} {continue} #Pourcentage d'identite etendu : Aligne sur Alignable #Discremine les identiques locaux (ex: poly A) de ceux bien alignes #PCoverQuery Query par rapport au Subject #set PRecouvrementQuery [PourcentageDeRecouvrement $FichierBlast $BId "Query"] #PCoverSubject Subject par rapport au Query set PRecouvrementSubject [PourcentageDeRecouvrement $FichierBlast $BId "Subject"] #Espionne ">>$BId IdGlobal $IdGlobal Cover S/Q $PRecouvrementQuery Cover Q/S $PRecouvrementSubject" #Espionne ">>$BId IdGlobal $IdGlobal Cover Q/S $PRecouvrementSubject" if {$PRecouvrementSubject <= $PCoverSubject} {continue} lappend LesProches $BId } #Espionne ">>>>>Choix: [join $LesProches " "]" AskBlast unsetfile $FichierBlast } return $LesProches } proc LesProceduresDuFichier {Fichier {aFichierContenant ""}} { if {$aFichierContenant!=""} { upvar $aFichierContenant FichierContenant } global GscopeDir if { ! [regexp "/" $Fichier] } { set Fichier "$GscopeDir/$Fichier" } if { ! [file exists $Fichier]} { return {} } set LesNomProc {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {^proc +([A-Z][a-zA-Z0-9_]+) +[\{[a-zA-Z)]} $Ligne Match NomProc]} { continue } lappend FichierContenant($NomProc) $Fichier lappend LesNomProc $NomProc } return $LesNomProc } proc LesProceduresExistantes {} { Wup "Returns the list of existing procs ... begining with Uppercase" global LesProceduresExistantes if { ! [info exists LesProceduresExistantes]} { set LesProceduresExistantes [lsort [info procs {[A-Z]*}]] } return $LesProceduresExistantes } proc LesProceduresNonAppelantes {} { foreach Procedure [LesProceduresExistantes] { set LesAppelees [QuiJAppel $Procedure "LaListeMerci"] if {$LesAppelees != {}} { continue } lappend LesProceduresNonAppelantes $Procedure } return $LesProceduresNonAppelantes } proc LesProceduresUsageUnique {} { global GscopeDir set FichierLesProceduresUsageUnique "$GscopeDir/lesproceduresusageunique" if {[file exists $FichierLesProceduresUsageUnique]} { return [LesLignesDuFichier $FichierLesProceduresUsageUnique] } foreach Procedure [LesProceduresExistantes] { set LesAppelantes [QuiMAppel $Procedure "LaListeMerci"] if {[llength $LesAppelantes] > 1} { continue } if {[llength $LesAppelantes] == 0} { set Appelante "PERSONNE" } else { set Appelante [lindex $LesAppelantes 0] } lappend LesProceduresUsageUnique "$Procedure $Appelante" } SauveLesLignes $LesProceduresUsageUnique dans $FichierLesProceduresUsageUnique return $LesProceduresUsageUnique } proc LesProchesDansLeBlast {FichierBlast {Identity ""} {PCoverQuery ""} {PCoverSubject ""} {FichierLog ""}} { Wup "Determine dans un fichier blast les BIds tres proches en fonction du IdGlobal puis du IdEtendu" set DirDesJumeaux "[RepertoireDuGenome]/Jumeaux" if {$Identity == ""} {set Identity 0.95} if {$PCoverQuery == ""} {set PCoverQuery 0.95} if {$PCoverSubject== ""} {set PCoverSubject 0.95} if {$FichierLog == ""} {set FichierLog "$DirDesJumeaux/TousLesJumeaux_${Identity}_${PCoverQuery}_${PCoverSubject}.log"} set NbSbjct [AskBlast $FichierBlast NbSubject] set TailleQuery [AskBlast $FichierBlast Taille] set NomQuery [AskBlast $FichierBlast Query] set LesProches "" if {$NbSbjct=="0"} {Espionne "Petit probleme pas de hit";return ""} AppendAuFichier $FichierLog "\nQuery: $NomQuery" for {set i 1} {$i <=$NbSbjct} {incr i} { set IdGlobal 0 set PRecouvrementQuery 0 set PRecouvrementSubject 0 set BId [AskBlast $FichierBlast Subject $i] #Pourcentage d'identite global: Aligne sur Total dans les alignements #Discremine les plus proches identiques sur les alignements des autres set IdGlobal [PourcentageDIdentiteGlobal $FichierBlast $BId] if {$IdGlobal<=$Identity} {continue} #PCoverQuery Query par rapport au Subject set PRecouvrementQuery [PourcentageDeRecouvrement $FichierBlast $BId "Query"] #PCoverSubject Subject par rapport au Query set PRecouvrementSubject [PourcentageDeRecouvrement $FichierBlast $BId "Subject"] #AppendAuFichier $FichierLog ">>$BId IdGlobal $IdGlobal Cover S/Q $PRecouvrementQuery Cover Q/S $PRecouvrementSubject" if {$PRecouvrementQuery <= $PCoverQuery || $PRecouvrementSubject <= $PCoverSubject} {continue} #Pourcentage d'identite etendu : Aligne sur Alignable #Discremine les identiques locaux (ex: poly A) de ceux bien alignes #set IdEtendu [PourcentageDesBasesAligneesSurToutesLesBasesAlignables_TabBlast TabBlast $BId] #set P2 [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables_TabBlast TabBlast $BId] lappend LesProches $BId AppendAuFichier $FichierLog ">>$BId IdGlobal $IdGlobal Cover S/Q $PRecouvrementQuery Cover Q/S $PRecouvrementSubject" } AskBlast unsetfile $FichierBlast return $LesProches } proc LesProcsEnDouble {{Meld ""}} { set Meld [string equal -nocase $Meld "Meld"] foreach F [LesSourcesDeGscope] { if { ! [regexp ".tcl$" $F]} { continue } if {[regexp "chalmel|jmuller" $F]} { continue } Espionne $F set F "[HomeRipp]/gscope/$F" foreach Ligne [LesLignesDuFichier $F] { if { ! [regexp {^proc ([^ ]+) } $Ligne Match P]} { continue } lappend LesSourcesDe($P) $F } } foreach {P Fs} [array get LesSourcesDe] { if {[llength $Fs]==1} { continue } set Egal "" if {[llength $Fs]==2} { set F1 [lindex $Fs 0] source $F1 set A1 [info args $P] set S1 [info body $P] set S1 "$A1\n$S1" set F2 [lindex $Fs 1] source $F2 set A2 [info args $P] set S2 [info body $P] set S2 "$A2\n$S2" Espionne "=$P=\n[join $Fs \n]\n" if {$P=="AttriDesAcDna"} { break Espionne "\n\n\n$S1\n\n\n" Espionne "\n\n\n$S2\n\n\n" } if {$S1==$S2} { set Egal "Ce sont les memes" } else { if {$Meld} { set T1 "[TmpFile][file tail $F1]" set T2 "[TmpFile][file tail $F2]" Sauve $S1 dans $T1 Sauve $S2 dans $T2 exec meld $T1 $T2 # FaireLire "Clique ici quand tu auras comparer les deux" file delete $T1 file delete $T2 } } } lappend LesDoubles "\n$P\n[join $Fs \n]\n$P $Egal\n" } return [AfficheListe $LesDoubles] } proc LesProfilsDeConsDesQueryPosDuMAF {TFAFile MAFFile {Arrondi 3}} { set QuerySeq [string toupper [TFA2SEQ $TFAFile]] regsub -all {[^A-Z]+} $QuerySeq "" QuerySeq set QueryLength [TailleDeLaSequenceDuFichierTFA $TFAFile] #set GCSmoothWindow [expr int($QueryLength / 10)] set QueryPos 0 ### Met chaque Res de QuerySeq dans un tableau indexe par $QueryPos foreach Res [split $QuerySeq ""] { incr QueryPos set TabRes($QueryPos) $Res } ################################ RAPPEL ######################################## ### n=1 si que la query a cette MAFPos ### ### n=1 si cette QueryPos n'est dans aucun block d'alignement du maf ### ### N=1 au minimum, jamais 0 car incremente pour chaque seq du maf ### ### nSurN=0 si QueryRes a cette MAFPos est un gap ### ### nSurN=0 si n=1 et N=1 cad si seule la query a un residu a cette position ### ### dans les autres cas, calcul de [expr $n * 1.0 / $N] ### ################################################################################ ############################################################################## #Espionne "LeGCProf" #set LeGCProf [LeNucProfileDeLaSeq $QuerySeq "GC" ] #Espionne "LeGCProf_s" #set LeGCProf_s [LeProfilLisse $LeGCProf $GCSmoothWindow] Espionne "LeProfn" set LeProfn [LeProfilnDesQueryPosDuMAF $TFAFile $MAFFile ] #set LeProfn_s [LeProfilLisse $LeProfn $SmoothWindow ] Espionne "LeProfN" set LeProfN [LeProfilNDesQueryPosDuMAF $TFAFile $MAFFile ] #set LeProfN_s [LeProfilLisse $LeProfN $SmoothWindow ] #Espionne "LeProfnSurN" #set LeProfnSurN [LeProfilnSurNDesQueryPosDuMAF $LeProfn $LeProfN ] #Espionne "LeProfnSurN: $LeProfnSurN" #set LeProfnSurN_s [LeProfilLisse $LeProfnSurN $SmoothWindow ] ############################################################################## set QueryPos 0 set LesProfilsDeConservation {} foreach n $LeProfn N $LeProfN { incr QueryPos set Res [set TabRes($QueryPos) ] #set n_s [format "%.${Arrondi}f" $n_s ] #set N_s [format "%.${Arrondi}f" $N_s ] #set nSurN [format "%.${Arrondi}f" $nSurN ] #set nSurN_s [format "%.${Arrondi}f" $nSurN_s] #set GC_s [format "%.${Arrondi}f" $GC_s ] #lappend LesProfilsDeConservation [list $QueryPos $QueryPos $Res $n $n_s $N $N_s $nSurN $nSurN_s $GC_s] lappend LesProfilsDeConservation [list $QueryPos $QueryPos $Res $n $N] } return $LesProfilsDeConservation } proc LesProfilsDeLaQuerySurToutLeBlast {FichierBlast {BaseAligneOuBaseDansAlignementOuLesDeux BaseAligne} {WhatSens BothSens} {LesBanqueId ""} {Expect 1e200}} { if {![file exists $FichierBlast]} {return ""} foreach BId $LesBanqueId { #Modif Jean #regsub {_[0-9]+$} $BId "" BId if {[regexp "_" $BId] && [regexp {^[a-zA-Z]{,2}[0-9]+_[0-9]+$} $BId]} { regsub {_[0-9]+$} $BId "" BId } set TabBIdOk($BId) 1 } set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == ""} {return} set Indice 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleQuery [AskBlast $FichierBlast Taille] set LesBId {} set NbSubjectDansBlast [AskBlast $FichierBlast NbSubject ] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [AskBlast $FichierBlast Subject $j] if {[info exists BId_Court]} {unset BId_Court} #Modif Jean #regsub {_[0-9]+$} $BId "" BId_Court if {[regexp "_" $BId] && [regexp {^[a-zA-Z]{,2}[0-9]+_[0-9]+$} $BId]} { regsub {_[0-9]+$} $BId "" BId_Court } else { set BId_Court $BId } if {$LesBanqueId != "" && ![info exists TabBIdOk($BId_Court)]} {continue} if {![info exists TabProfil($BId_Court,1)]} { lappend LesBId $BId_Court for {set i 1} {$i <= $TailleQuery} {incr i} { set TabProfil($BId_Court,BaseAligne,$i) 0 set TabProfil($BId_Court,BaseDansAlignement,$i) 0 } } set NbSegments [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { set AlignLineaire [AskBlast $FichierBlast BanqueId $BId Segment $Segment AlignLineaire] if {$AlignLineaire == ""} {return ""} set Orientation [AskBlast $FichierBlast BanqueId $BId Segment $Segment Orientation] set Sens [SensDeLaRegion $Orientation] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set DQ [AskBlast $FichierBlast BanqueId $BId Segment $Segment DQ ] set FQ [AskBlast $FichierBlast BanqueId $BId Segment $Segment FQ ] set Query [lindex [split $AlignLineaire "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split $AlignLineaire "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] set Sens "+" if {$FQ < $DQ} {set Sens "-"} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ == "-"} {continue} for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} {set Pos [expr $PosIni-$i]} else {set Pos [expr $PosIni+$i]} incr TabProfil($BId_Court,BaseDansAlignement,$Pos) if {$AQ == $AS} { if {![info exists TabProfil($BId_Court,BaseAligne,$Pos)]} {continue} incr TabProfil($BId_Court,BaseAligne,$Pos) } } if {$Sens == "-"} {set PosIni [expr $PosIni-$Indice]} else {set PosIni [expr $PosIni+$Indice]} } } } set LesProfils {} foreach BId $LesBId { set LeProfil {} for {set i 1} {$i <= $TailleQuery} {incr i} { if {[string equal -nocase $BaseAligneOuBaseDansAlignementOuLesDeux "BaseAligne"]} { lappend LeProfil [set TabProfil($BId,BaseAligne,$i)] continue } if {[string equal -nocase $BaseAligneOuBaseDansAlignementOuLesDeux "BaseDansAlignement"]} { lappend LeProfil [set TabProfil($BId,BaseDansAlignement,$i)] continue } if {[string equal -nocase $BaseAligneOuBaseDansAlignementOuLesDeux "LesDeux"]} { lappend LeProfil [list [set TabProfil($BId,BaseAligne,$i)] [set TabProfil($BId,BaseDansAlignement,$i)]] continue } } lappend LesProfils [list $BId $LeProfil] } return $LesProfils } proc LesProfilsDeLaQuerySurToutLeBlast_TabBlast {aTabBlast {BaseAligneOuBaseDansAlignementOuLesDeux BaseAligne} {WhatSens BothSens} {LesBanqueId ""}} { upvar $aTabBlast TabBlast foreach BId $LesBanqueId { regsub {_[0-9]+$} $BId "" BId set TabBIdOk($BId) 1 } if {![info exists TabBlast]} {return} set TypeDeBlast [set TabBlast(TypeDeBlast)] set Indice 1 if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "TBLASTX"} {set Indice 3} set TailleQuery [set TabBlast(Taille)] set LesBId {} set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set j 1} {$j <= $NbSubjectDansBlast} {incr j} { set BId [set TabBlast($j)] if {[info exists BId_Court]} {unset BId_Court} regsub {_[0-9]+$} $BId "" BId_Court if {$LesBanqueId != "" && ![info exists TabBIdOk($BId_Court)]} {continue} if {![info exists TabProfil($BId_Court,1)]} { lappend LesBId $BId_Court for {set i 1} {$i <= $TailleQuery} {incr i} { set TabProfil($BId_Court,BaseAligne,$i) 0 set TabProfil($BId_Court,BaseDansAlignement,$i) 0 } } set NbSegments [set TabBlast($BId,NbSegment)] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { if {![info exists TabBlast($BId,$Segment,AlignLineaire)]} {return ""} set DQ [set TabBlast($BId,$Segment,DQ) ] set FQ [set TabBlast($BId,$Segment,FQ) ] set Orientation [set TabBlast($BId,$Segment,Orientation)] set Sens [SensDeLaRegion $Orientation] if {$WhatSens != "BothSens" && $Sens != $WhatSens} {continue} set Query [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex [split [set TabBlast($BId,$Segment,AlignLineaire)] "\n"] 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] set Sens "+" if {$FQ < $DQ} {set Sens "-"} set PosIni $DQ foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ == "-"} {continue} for {set i 0} {$i < $Indice} {incr i} { if {$Sens == "-"} {set Pos [expr $PosIni-$i]} else {set Pos [expr $PosIni+$i]} incr TabProfil($BId_Court,BaseDansAlignement,$Pos) if {$AQ == $AS} { if {![info exists TabProfil($BId_Court,BaseAligne,$Pos)]} {continue} incr TabProfil($BId_Court,BaseAligne,$Pos) } } if {$Sens == "-"} {set PosIni [expr $PosIni-$Indice]} else {set PosIni [expr $PosIni+$Indice]} } } } set LesProfils {} foreach BId $LesBId { set LeProfil {} for {set i 1} {$i <= $TailleQuery} {incr i} { if {$BaseAligneOuBaseDansAlignementOuLesDeux == "BaseAligne"} { lappend LeProfil [set TabProfil($BId,BaseAligne,$i)] continue } if {$BaseAligneOuBaseDansAlignementOuLesDeux == "BaseDansAlignement"} { lappend LeProfil [set TabProfil($BId,BaseDansAlignement,$i)] continue } if {$BaseAligneOuBaseDansAlignementOuLesDeux == "LesDeux"} { lappend LeProfil [list [set TabProfil($BId,BaseAligne,$i)] [set TabProfil($BId,BaseDansAlignement,$i)]] continue } } lappend LesProfils [list $BId $LeProfil] } return $LesProfils } proc LesProjetsDe {{User ""} {QuoiEncore ""} {Action ""} {SansDoublon ""}} { if {$Action==""} { set Action "Show" } set SansDoublon [string equal -nocase $SansDoublon "SansDoublon"] if {$QuoiEncore==""} { set QuoiEncore "Rien" } set NbSeqTotal 0 set NbProjects 0 set OldNbSeq -1 set LesBornes [glob -nocomplain "/genomics/g*/*/fiches/bornesdespabs"] LConcat LesBornes [glob -nocomplain "/gstock/*/fiches/bornesdespabs"] foreach Fichier $LesBornes { set Owner [file attributes $Fichier -owner] if {$User!=""} { set Ligne [exec ls -l $Fichier] if { ! [regexp $User $Ligne]} { if {$User!="Inconnu"} { continue } if {$User=="Inconnu" && ! [regexp {^[0-9]+$} $Owner]} { continue } else { set Owner "Inconnu" } } } set Rep [file tail [file dirname [file dirname $Fichier]]] set NbSeq [llength [LesLignesDuFichier $Fichier]] # Espionne "$Owner $Rep $NbSeq $Fichier" if {$NbSeq==0} { set OldNbSeq $NbSeq ; continue } # Espionne "$SansDoublon && $OldNbSeq==$NbSeq" if {$SansDoublon && $OldNbSeq==$NbSeq} { continue } set OldNbSeq $NbSeq incr NbSeqTotal $NbSeq incr NbProjects set Retour [format "%-10s %-20s %s" $Owner $Rep $Fichier] if {$QuoiEncore=="NbSeq"} { set Retour [format "%-28s %10d %s" $Rep $NbSeq sequences] } else { if {$QuoiEncore!="Rien"} { append Retour [set $QuoiEncore] } } lappend LesProjets $Retour } lappend LesProjets [format "%15d %-12s %10d %s" $NbProjects projects $NbSeqTotal sequences] if {$Action=="GetList"} { return $LesProjets } set Clavier "Postpone" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "Magenta" TouchePour $Clavier "RangeGstock" "RangeGstock \[set PagePropre(@F@)\]" TouchePour <2> "/ sel." "RangeGstock \[selection get\]" TouchePour <3> "/DoIt" "RangeGstock \[selection get\] - Force" set F [AfficheListe $LesProjets "" "$User Gscope_Projects"] return $F } proc LesPrositesDuTFA {f} { set Ll [LancePSScan $f] array set R [list] set Lpos [list] foreach l $Ll { if {[string index $l 0] eq ">"} { if {$Lpos != {}} { lappend R($n) $ps $Lpos set Lpos [list] } lassign [split [string range $l 1 end] " "] n tmp ps tmp } else { regsub -all { +} [string trim $l] " " l lassign [split $l " "] p1 tmp p2 tmp lappend Lpos $p1 $p2 } } if {$Lpos != {}} { lappend R($n) $ps $Lpos } return [array get R] } proc LesProtSsSeq {} { set FichierPoub "/genomics/link/Tau/Dec2008/GSTRdCVF/BlastpSurStringHomme/poub" } proc LesProteinesAvecCesGO {LesGO {LesOrgas ""} {Field ""} {Banque protein}} { set LesRequetes [LesRequetesDesGOEtDesDescendants $LesGO] set nRequetes [llength $LesRequetes] if {$nRequetes == 0} {return} set i 0 set LesKW {} set LesDR {} set LesDES {} foreach LaRequete $LesRequetes { set What [lindex $LaRequete 0] set Requete [string trim [lindex $LaRequete 1]] while {[regexp " " $Requete]} {regsub -all " " $Requete " " Requete} if {$Requete == ""} {continue} if {[string equal -nocase $What "spkw2go"]} { lappend LesKW $Requete continue } if {[string equal -nocase $What "ec2go"]} { regsub ":" $Requete " " Requete lappend LesDES $Requete continue } lappend LesDR $Requete } set Commande "[ProgPathway getz] \"\(" set PresenceCommandeAvant 0 if {$LesDR != {}} { set DR [join $LesDR "|"] regsub "\\\|" $DR "\|" DR append Commande "\\\[$Banque-DR:$DR\\\]" set PresenceCommandeAvant 1 } if {$LesKW != {}} { if {$PresenceCommandeAvant} {append Commande " \| "} set KW [join $LesKW "|"] regsub "\\\|" $KW "\|" KW append Commande "\\\[$Banque-KEY:$KW\\\]" set PresenceCommandeAvant 1 } if {$LesDES != {}} { if {$PresenceCommandeAvant} {append Commande " \| "} set DES [join $LesDES "|"] regsub "\\\|" $DES "\|" DES append Commande "\\\[$Banque-DES:$DES\\\]" set PresenceCommandeAvant 1 } append Commande "\)" if {$LesOrgas != ""} { set Orgas [join $LesOrgas "|"] regsub "\\\|" $Orgas "\|" Orgas append Commande " \& \\\[$Banque-ORG:$Orgas\\\]" } if {$Field != ""} { append Commande "\" -f \{$Field\} " } else { append Commande "\"" } Espionne $Commande set LesInfos [split [eval exec $Commande] "\n"] return $LesInfos } proc LesProteinesAvecCesOntologies {LesGO {LesOrgas ""} {Field ""} {Banque protein}} { set Commande "[ProgPathway getz] \"\(" set LesRequetes [LesRequetesDuGOEtDesDescendants $LesGO] Espionne $LesRequetes set nRequetes [llength $LesRequetes] if {$nRequetes == 0} {return} set i 0 foreach LaRequete $LesRequetes { incr i set What [lindex $LaRequete 0] set Requete [string trim [lindex $LaRequete 1]] while {[regexp " " $Requete]} {regsub -all " " $Requete " " Requete} set Champs "DR" if {[string equal -nocase $What "spkw2go"]} {set Champs "key"} if {[string equal -nocase $What "ec2go" ]} { set Champs "Des" regsub ":" $Requete " " $Requete } append Commande " \\\[$Banque-$Champs:$Requete\\\] " if {$i < $nRequetes} {append Commande " \| "} else {append Commande " \) "} } if {$LesOrgas != ""} { append Commande " \& \( " set nOrga [llength $LesOrgas] set i 0 foreach Orga $LesOrgas { incr i append Commande " \\\[$Banque-org:$Orga\\\] " if {$i < $nOrga} {append Commande " | "} } append Commande " \)" } if {$Field != ""} { append Commande "\" -f \{$Field\} " } else { append Commande "\"" } set LesInfos [split [eval exec $Commande] "\n"] return $LesInfos } proc LesProteinesDansLeMemeClusterDuMSF {FichierClust {ProteinQuery QUERY_PROTEIN}} { if {![file exists $FichierClust]} {return} set Cluster [InterrogeLesClustersDesMSF $FichierClust Access $ProteinQuery Cluster] if {$Cluster == ""} {return} return [InterrogeLesClustersDesMSF $FichierClust Cluster $Cluster LesAccess] } proc LesProteinesDeLAcNuc {AccessOuBanqueId} { return [LesProteinesDeLAcNuc_PageInfo [PageInfo $AccessOuBanqueId genbankfull]] } proc LesProteinesDeLAcNuc_PageInfo {PageInfo {EtDeLOrga ""}} { set LesProteines {} foreach Ligne [split $PageInfo "\n"] { set Ligne [string trim $Ligne] if {[info exists Prot]} {unset Prot} if {[regexp -nocase "protein_id" $Ligne]} { regsub -all {\"} $Ligne "" Ligne set d [string first "=" $Ligne] set f [string first "." $Ligne] if {$f < $d} {set f [string length $Ligne]} set Prot [string range $Ligne [expr $d + 1] [expr $f - 1]] } if { [regexp -nocase "db_xref" $Ligne] && [regexp -nocase {SWISS\-PROT|SPTREMBL} $Ligne]} { regsub -all {\"} $Ligne "" Ligne set d [string last ":" $Ligne] set Prot [string range $Ligne [expr $d + 1] end] } if {![info exists Prot]} {continue} set Acc [PageInfo $Prot protein acc] if {$Acc == "" } {continue} regsub -all ";" $Acc "" Acc scan $Acc "%s %s" AC Acc lappend LesProteines [string toupper $Acc] } if {$EtDeLOrga != ""} { set LesProteinesTmp {} foreach Proteine $LesProteines { set EstCeUnDesOrgas 0 foreach Orga [LesOrgasDeLaPage_PageInfo $PageInfo] { if {[string equal -nocase $Orga $EtDeLOrga]} {set EstCeUnDesOrgas 1;break} } if {!$EstCeUnDesOrgas} {continue} lappend LesProteinesTmp $Proteine } set LesProteinesTmp $LesProteines } return [lsort -unique $LesProteines] } proc LesProteinesDeLaPageGenBank {FicheGenBank} { set LesProteines {} foreach Ligne [split $FicheGenBank "\n"] { if { [regexp -nocase "db_xref=" $Ligne] && [regexp -nocase "SWISS-PROT" $Ligne]} { regexp -nocase "(SWISS-PROT:\[0-9a-z\_]*)" $Ligne tmp Proteine if {[info exists Proteine]} { regsub "SWISS-PROT:" $Proteine "" Proteine lappend LesProteines $Proteine } } } return $LesProteines } proc LesProteinesDesPABs {Fichier} { set L [CreeListePourFichierAUneLigne $Fichier] foreach Nom $L { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set DefinitionProtHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestProtHuman Definition] lappend Lsortie "$Nom\t$AccBestProtHuman\t$DefinitionProtHuman" } return $Lsortie } proc LesProteinesDuBlast {FileBlast {ExpectMax 0.001} {NbSubjectMax 500}} { set LesBId {} set n 0 set NbSubjectDansBlast [AskBlast $FileBlast NbSubject] for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [AskBlast $FileBlast Subject $i] if {[EstUnAccessPDB $BId]} {continue} set Expect [AskBlast $FileBlast BanqueId $BId Segment 1 Expect] set Score [AskBlast $FileBlast BanqueId $BId Segment 1 Score ] if {$ExpectMax < $Expect} {continue} incr n if {$NbSubjectMax < $n } {break} lappend LesBId $BId } AskLesPagesInfos load $LesBId protein set LesProteines {} foreach BId $LesBId { if {[info exists Tab($BId,LesOrganismes)]} {continue} set PageInfo [AskLesPagesInfos ask $BId] if {$PageInfo == ""} {continue} set Expect [AskBlast $FileBlast BanqueId $BId Segment 1 Expect] set Score [AskBlast $FileBlast BanqueId $BId Segment 1 Score ] set Access [string toupper [AskBlast $FileBlast BanqueId $BId Access]] set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] if {$Def == ""} {set Def "Not found"} set Taille [AskBlast $FileBlast BanqueId $BId Taille ] scan $Score "%f" Score set Orientation [AskBlast $FileBlast BanqueId $BId Segment 1 Orientation] set NbBasesEnCommun [NombreDeBasesEnCommun $FileBlast $BId] set NbInCDS $NbBasesEnCommun set NbIn5UTR 0 set NbIn3UTR 0 set PIdGlob [PourcentageDIdentiteGlobal $FileBlast $BId] set Tab($BId,LesOrganismes) $LesOrgas foreach Orga $LesOrgas { set LesmRNAs [LesmRNAsDeLaProt_PageInfo $PageInfo $Orga] lappend LesProteines [list $BId $Access $Taille $Taille $Orientation $Expect $Score $PIdGlob $NbBasesEnCommun $NbIn5UTR $NbInCDS $NbIn3UTR $Orga $Def $LesmRNAs "PROTEIN"] } } set LesProteines [lsort -real -decreasing -index 2 $LesProteines] set LesProteines [lsort -real -decreasing -index 10 $LesProteines] set LesProteines [lsort -real -decreasing -index 7 $LesProteines] set LesProteines [lsort -integer -decreasing -index 8 $LesProteines] AskBlast unset AskLesPagesInfos unset return $LesProteines } proc LesProteinesDuBlast_TabBlast {aTabBlast} { upvar $aTabBlast TabBlast set LesProteines {} set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i)] if {[info exists Tab($BId,LesOrganismes)]} {continue} Espionne $BId if {[EstUnAccessPDB $BId]} {continue} set Access [string toupper [set TabBlast($BId,Access)]] set PageInfo [PageInfo $BId protein "id acc des org dr"] if {$PageInfo == ""} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] if {$Def == ""} {set Def "Not found"} set Expect [set TabBlast($BId,1,Expect) ] set Score [set TabBlast($BId,1,Score) ] set Taille [set TabBlast($BId,Taille) ] scan $Score "%f" Score set Orientation [set TabBlast($BId,1,Orientation)] set NbBasesEnCommun [NombreDeBasesEnCommun_TabBlast TabBlast $BId] set NbInCDS $NbBasesEnCommun set NbIn5UTR 0 set NbIn3UTR 0 set PIdGlob [PourcentageDIdentiteGlobal_TabBlast TabBlast $BId] set Tab($BId,LesOrganismes) $LesOrgas foreach Orga $LesOrgas { set LesmRNAs [LesmRNAsDeLaProt_PageInfo $PageInfo $Orga] lappend LesProteines [list $BId $Access $Taille $Taille $Orientation $Expect $Score $PIdGlob $NbBasesEnCommun $NbIn5UTR $NbInCDS $NbIn3UTR $Orga $Def $LesmRNAs "PROTEIN"] } } set LesProteines [lsort -real -decreasing -index 2 $LesProteines] set LesProteines [lsort -real -decreasing -index 10 $LesProteines] set LesProteines [lsort -real -decreasing -index 7 $LesProteines] set LesProteines [lsort -integer -decreasing -index 8 $LesProteines] return $LesProteines } proc LesProteinesIdentiquesDuMSF {FichierMSF {ProteinQuery QUERY_PROTEIN} {IdMin 0.98}} { if {![file exists $FichierMSF]} {return} set LesAccess [AskMSF $FichierMSF LesAccess] set LesProteines {} foreach Access $LesAccess { set LesId [IDdansMSF $FichierMSF $ProteinQuery $Access SelonAEtB] set Id1 [lindex $LesId 0] set Id2 [lindex $LesId 1] if {$Id1 == "" || $Id1 < $IdMin} {continue} if {$Id2 == "" || $Id2 < $IdMin} {continue} lappend LesProteines $Access } return [lsort -unique $LesProteines] } proc LesProteinesIdentiquesOuQuasi {FichierClusters} { set Liste [ListeDesJR $FichierClusters] set Entete "Name\tTwins\tAccess\tLength\tOrganism\tDefinition" lappend LApercu $Entete foreach Nom $Liste { set FichierMSF "[RepertoireDuGenome]/msf/$Nom" if {![file exists $FichierMSF]} {continue} set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] foreach Access [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $Nom 0.98] { set Access [string toupper $Access] if {[info exists DejaVu($Access)]} {continue} set DejaVu($Access) 1 lappend LesAccessDesChoisi $Access set PageInfo [PageInfo $Access protein "id acc des org"] set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] set Taille [TailleDeLaProt_PageInfo $PageInfo] foreach Org $LesOrgas { lappend LApercu "$Nom\t$LesJumeaux\t$Access\t$Taille\t$Org\t$Def" } } } return $LApercu } proc LesProteinesLesPlusProchesDeLaRegionDuContig {FichierTFAContig FichierBlast BorneMin BorneMax {IdMin 0.8} {ExpectMax 0.001}} { set LesBIdProt [LesBanqueIdDuBlast $FichierBlast] set LesTFAsDesProt [LesSeqTFAsDesBanqueId $LesBIdProt protein] if {$LesTFAsDesProt == {}} {return} set FileBlastDB [TmpFile [file tail $FichierBlast]] Sauve [join $LesTFAsDesProt "\n"] dans $FileBlastDB TFAs2DB $FileBlastDB set NewFileBlast "$FichierBlast.new" PipeBlast $FichierTFAContig $FileBlastDB $NewFileBlast X 500 $ExpectMax F 4 if {[file exists $NewFileBlast]} { file copy -force $FichierBlast "$FichierBlast.old" file rename -force $NewFileBlast $FichierBlast } set LesProteines {} set NbSubject [AskBlast $FichierBlast NbSubject] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlast Subject $i] if {[info exist TabTmp($BId)]} {continue} set TabTmp($BId) 1 #Je ne garde que les Proteines ayant au moins x% d'identite avec le contig# set PIdGlob [PourcentageDIdentiteGlobal $FichierBlast $BId Subject] if {$PIdGlob < $IdMin} {continue} set NbSegment [AskBlast $FichierBlast BanqueId $BId NbSegment] set DMin 1e200 for {set j 1} {$j <= $NbSegment} {incr j} { set D [Mini [AskBlast $FichierBlast BanqueId $BId Segment $j DQ] [AskBlast $FichierBlast BanqueId $BId Segment $j FQ]] set F [Maxi [AskBlast $FichierBlast BanqueId $BId Segment $j DQ] [AskBlast $FichierBlast BanqueId $BId Segment $j FQ]] if {$F < $BorneMin} { set Distance [expr $BorneMin - $F] if {$Distance < $DMin} {set DMin $Distance} continue } if {$BorneMax < $D} { set Distance [expr $D - $BorneMax] if {$Distance < $DMin} {set DMin $Distance} continue } ##Sinon je suis overlappant donc DMin est egale a 0## set DMin 0 } set Nb [NombreDeBasesEnCommun $FichierBlast $BId Subject] ############################################## #set Access [AskBlast $FichierBlast BanqueId $BId Access] set Access $BId ############################################## set Taille [AskBlast $FichierBlast BanqueId $BId Taille] set Expect [AskBlast $FichierBlast BanqueId $BId Segment 1 Expect] set Score [AskBlast $FichierBlast BanqueId $BId Segment 1 Score] scan $Score "%f" Score lappend LesProteines [list $BId $Access $Taille $DMin $Expect $Score $PIdGlob $Nb] } return [lsort -integer -index 3 [lsort -integer -index 7 -decreasing $LesProteines]] } proc LesProteinesMito {} { foreach Nom [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FichierProttfa]} {continue} set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] if {[regexp "from mitochondrion Homo" $EnteteProttfa]} {lappend Liste $Nom} } Espionne [llength $Liste] SauveLesLignes $Liste dans "[RepertoireDuGenome]/fiches/mitoch_prot_931" } proc LesProteinesPreditesDuGenscan {AccessOuFichierGSC {Quoi TFA} {Offset 0}} { global RepertoireDuGenome Wup "return the list of localisation (if Quoi=Loc) or the tfas file (if =TFA)" if {[regexp "/" $AccessOuFichierGSC]} { set TexteGS [ContenuDuFichier $AccessOuFichierGSC] } else { set TexteGS [GenScanEnStock $AccessOuFichierGSC] } if {$TexteGS==""} { return {} } foreach Prot [DecortiqueGenScan All All Numbers $TexteGS] { set G [expr [DecortiqueGenScan $Prot All Gauche] + $Offset] set D [expr [DecortiqueGenScan $Prot All Droite] + $Offset] set S [DecortiqueGenScan $Prot All Sens] if {$Quoi=="Loc"} { lappend Sortie "$G $D $S $Prot" } if {$Quoi=="TFA"} { lappend Sortie [DecortiqueGenScan $Prot All TFAo] } } return $Sortie } proc LesProteinesProchesDeLaProteineDeRef {Query FileMSF FileClust {IdDesProtId 0.98} {AvecOuSansCluster AvecCluster} {NorMDMin 0.5}} { ####Uniquement les Access avec IdDesProtId % d'identite avec la query ou les proteines ####du cluster de msf si NorMD est superieur a NorMDMin ou si il n'y a pas de clusters ####de MSF toutes les proteines du msf si le NormMD est superieur a NormMDMin if {![file exists $FileMSF]} {return} set Cluster [InterrogeLesClustersDesMSF $FileClust Access $Query Cluster] if {$Cluster == "" } { set LesAccessDuMSF [InterrogeLesClustersDesMSF $FileClust LesAccess] } else { set LesAccessDuMSF [InterrogeLesClustersDesMSF $FileClust Cluster $Cluster LesAccess] } if {[MDScoreAvecSelectionDuFichier $FileMSF $LesAccessDuMSF] < $NorMDMin} {set LesAccessDuMSF {}} set LesAccessDesId [LesProteinesIdentiquesDuMSF $FileMSF $Query $IdDesProtId] if {[string equal -nocase $AvecOuSansCluster "AvecCluster"]} { set LesAccess [lsort -unique [concat $LesAccessDuMSF $LesAccessDesId]] } else { set LesAccess [lsort -unique $LesAccessDesId] } return $LesAccess } proc LesProteinesUniques {} { ### Calcul de la liste de proteines uniques d'un projet cad sans compter la redondance des proteines jumelles ### set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles_old" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" InterrogeProteinesJumelles unset InterrogeOrf2Cluster2Access2Def2Expression unset foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { Espionne "Cluster -> $Cluster" # Traitement des proteines jumelles, ne garde que les proteines uniques pour chaque cluster set LesNoms {} foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] { set TabDeJaVu($Cluster,$Jum) 1 } lappend LesNoms $Nom } set LesNoms [lsort -unique $LesNoms] } InterrogeProteinesJumelles unset InterrogeOrf2Cluster2Access2Def2Expression unset return $LesNoms } proc LesRNsDeYann {} { foreach Nom [ListeDesPABs] { set TexteNR [ExtraitInfo $Nom NR] if { ! [regexp "oui" $TexteNR]} { continue } regsub "oui " $TexteNR "" GN scan $GN "%s" GN InformeSansDemander $Nom "=ValiGN: $GN" lappend LesNRsDeYann "$Nom $GN" } SauveLesLignes $LesNRsDeYann dans "[RepertoireDuGenome]/fiches/les_nr_de_yann" exit } proc LesRapportsPourAccess {{LesNoms ""} {Keep ""}} { set RepRapports "[RepertoireDuGenome]/rapportsaccess" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set LesNoms [ListeDesPABs]} else {set LesNoms $LesNoms} set Fichierjumeaux "[RepertoireDuGenome]/fiches/jumeaux" if {![file exists $Fichierjumeaux]} { set Clusters 0 } else { set Clusters 1 } set FichierLocalisation "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human" if {![file exists $FichierLocalisation]} {return ""} ChargeFichierLocalisation Tab $FichierLocalisation "" $LesNoms if {![info exists Tab(LesNoms)]} { Espionne coucou return "" } set FichierFonction "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" set FichierContig "[RepertoireDuGenome]/fiches/ContigAndProt" if {![file exists $FichierFonction] || ![file exists $FichierContig]} { set Fonction 0 } else { set Fonction 1 } set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" set RepBlastAffy "[RepertoireDuGenome]/blastntargetaffy" if {![file exists $RepBlastAffy]} {set Affy 0} else {set Affy 1} foreach Nom $LesNoms { if {$Keep==1 && [file exists "$RepRapports/$Nom"]} { continue } Espionne $Nom set Rapport {} #Generalites: Espionne "$Nom -> Generalites" set CodeClone [CodeClone $Nom] set Longueur [SeqLength $Nom] lappend Rapport "GscopeCode: $Nom" lappend Rapport "CodeClone: $CodeClone" lappend Rapport "Length: $Longueur" if {$Affy==1} { set User [OwnerOfCDNA $Nom] lappend Rapport "User: $User" #user indispensable dans le rapport car cle primaire dans la table clone de la DB } #Clusters: Espionne "$Nom -> clusters" if {$Clusters==1} { #pour que la proc jumeaurepresentatif marche : #le fichier jumeaux est une copie de clusters set JR [JumeauRepresentatif $Nom] lappend Rapport "JR: $JR" } #RepeatMasker Espionne "$Nom -> Masking ; ReMasking ; Masking and ReMasking" if {[InterrogeBilanMasking $Nom LesEtats] != ""} { set PMasked [InterrogeBilanMasking $Nom Etat MRM PMasked ] set LesRepeats [InterrogeBilanMasking $Nom Etat MRM LesRepeats] if {$PMasked!=""} { lappend Rapport "MRM Pourcent: $PMasked" } if {$LesRepeats!=""} { lappend Rapport "MRM LesRepeats: $LesRepeats" } } #Localisation genomique Espionne "$Nom -> localisation genomique" set PolyLoc [PolyLocalise $Nom] #lappend Rapport "LocType: $PolyLoc" if {$PolyLoc!="NoBlastFile" && $PolyLoc!="NoLocalization"} { foreach LInfo [set Tab(Nom,$Nom)] { set Info [lindex $LInfo 20] if {[regexp "Best" $Info]} { set Chro [lindex $LInfo 9] set Debut [lindex $LInfo 10] set Fin [lindex $LInfo 11] set Sens [lindex $LInfo 12] set BandeCyto [lindex $LInfo 19] lappend Rapport "Chromosome: $Chro" lappend Rapport "Begin: $Debut" lappend Rapport "End: $Fin" lappend Rapport "Orientation: $Sens" lappend Rapport "CytologicBand: $BandeCyto" } } } #Proteines et mRNA Espionne "$Nom -> Proteines et mRNA" if {$Fonction==1} { set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {[regexp -nocase "noprotein" $AccessProt] && [regexp -nocase "nomrna" $AccessRNA]} { set AccessProt [InterrogeContigAndProt $Nom Protein Access] if {$AccessProt!=""} { set Organisme [InterrogeContigAndProt $Nom Protein Organisme] set BanqueID [InterrogeContigAndProt $Nom Protein BanqueId] set Definition [InfoDeLaPageProteine $BanqueID $AccessProt DE] lappend Rapport "BanqueID: $BanqueID" lappend Rapport "AccessProteine: $AccessProt" lappend Rapport "DefProt: $Definition" lappend Rapport "Organisme: $Organisme" lappend Rapport "Warning: Contig" } } else { set Organisme [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] set Warning [InterrogeProtAndmRNAChoisis $Nom InfoSeqChoisie] set Definition [InfoDeLaPageProteine "" $AccessProt DE] if {$AccessRNA!="NOMRNA" && $AccessRNA!=""} { lappend Rapport "AccessRNA: $AccessRNA" set Definition [InfoDeLaPage "" $AccessRNA DEFINITION] if {$Definition!=""} { lappend Rapport "DefRNA: $Definition" } } if {$AccessProt!="NOPROTEIN" && $AccessProt!=""} { lappend Rapport "AccessProteine: $AccessProt" set Definition [InfoDeLaPageProteine "" $AccessProt DE] if {$Definition!=""} { lappend Rapport "DefProt: $Definition" } } if {$Organisme!=""} { lappend Rapport "Organisme: $Organisme" } if {$Warning!=""} { lappend Rapport "Warning: $Warning" } } } #Gene Name Espionne "$Nom -> gene name" if {[info exists AccessProt]} { set LesNomsDesGenes [InterrogeGeneName Protein $AccessProt LesGeneNames] if {$LesNomsDesGenes!=""} { lappend Rapport "GeneName: $LesNomsDesGenes" } } #Kegg #####info pathway redondante avec GO #####interet de kagg: les dessins #Gene Ontology if {[file exists $FichierGO]} { Espionne "$Nom -> ontology" if {[InterrogeGeneOntology $FichierGO $Nom LesGO] != ""} { set LesGOFunction {} set LesGOProcess {} set LesGOComponent {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {$GO == ""} {continue} set Type [InterrogeGeneOntology $FichierGO GO $GO Type] if {$Type == "function" } {lappend LesGOFunction $GO} if {$Type == "process" } {lappend LesGOProcess $GO} if {$Type == "component"} {lappend LesGOComponent $GO} } set LesDefGOFunction {} set LesDefGOProcess {} set LesDefGOComponent {} foreach GO $LesGOFunction { lappend LesDefGOFunction "$GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } set DefGOFunction [join $LesDefGOFunction " "] lappend Rapport "GOfunction: $DefGOFunction" foreach GO $LesGOProcess { lappend LesDefGOProcess "$GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } set DefGOProcess [join $LesDefGOProcess " "] lappend Rapport "GOprocess: $DefGOProcess" foreach GO $LesGOComponent { lappend LesDefGOComponent "$GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } set DefGOComponent [join $LesDefGOComponent " "] lappend Rapport "GOcomponent: $DefGOComponent" } } #Copains du blast N Affymetrix (target) if {$Affy==1} { Espionne "$Nom -> Copains du blast N Affymetrix (target)" set Banque "blastntargetaffy" set LesCops [LesMeilleursCopainsDuBlast $Nom $Banque] set LesCodes {} if {$LesCops!={} && [lindex $LesCops 0]!="File not yet available" && [lindex $LesCops 0]!="No value" && [lindex $LesCops 0]!="No hit" && [lindex $LesCops 0]!="No hits found" } { set PremiereFois 1 foreach Cop $LesCops { scan $Cop "%s %s" t g if {$PremiereFois} { lappend LesCodes $g set PremiereFois 0 continue } else { lappend LesCodes $g } } } if {$LesCodes!={}} { lappend Rapport "Affymetrix: $LesCodes" } } Espionne "fin" SauveLesLignes $Rapport dans "$RepRapports/$Nom" } return "" } proc LesRapportsPourAccessAvecKeggEtEST {{LesNoms ""} {Keep ""}} { set RepRapports "[RepertoireDuGenome]/rapportsaccess" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set LesNoms [ListeDesPABs]} else {set LesNoms $LesNoms} foreach Nom $LesNoms { if {$Keep==1 && [file exists "$RepRapports/$Nom"]} { continue } Espionne $Nom set Rapport {} #Generalites: Espionne "$Nom -> Generalites" set CodeClone [CodeClone $Nom] set Longueur [SeqLength $Nom] lappend Rapport "GscopeCode: $Nom" lappend Rapport "CodeClone: $CodeClone" lappend Rapport "Length: $Longueur" set User [OwnerOfCDNA $Nom] lappend Rapport "User: $User" #Kegg #####info pathway redondante avec GO #####interet de kegg: les dessins ##Pathways KEGG## Espionne "$Nom -> KEGG" if {[InterrogeMesKEGG $Nom LesPathwayEtKeggEtEC]!=""} { if {[InterrogeMesKEGG $Nom LesPathway]!=""} { set LesNumerosDesPathways [InterrogeMesKEGG $Nom LesPathway] lappend Rapport "Pathway: [join $LesNumerosDesPathways " ; "]" foreach Pathway $LesNumerosDesPathways { set DefPathway [InterrogeMesKEGG Pathway $Pathway Definition] lappend LesDefPathway $DefPathway } lappend Rapport "DefPathway: [join $LesDefPathway " ; "]" } if {[InterrogeMesKEGG $Nom LesEC]!=""} { set LesEC [InterrogeMesKEGG $Nom LesEC] lappend Rapport "EC: [join $LesEC " ; "]" } if {[InterrogeMesKEGG $Nom LesKegg]!=""} { set LesKegg [InterrogeMesKEGG $Nom LesKegg] lappend Rapport "NumKegg: [join $LesKegg " ; "] " foreach Kegg $LesKegg { set DefKegg [InterrogeMesKEGG Kegg $Kegg Definition] lappend LesDefKegg $DefKegg } lappend Rapport "DefKegg: [join $DefKegg " ; "]" } } else { lappend Rapport "Pathway: " lappend Rapport "DefPathway: " lappend Rapport "EC: " lappend Rapport "NumKegg: " lappend Rapport "DefKegg: " } ### Tissue Type ### Espionne "$Nom -> Tissue Type" if {[InterrogeTissueType $Nom LesTissues] != ""} { set LesTissues {} foreach Tissue [InterrogeTissueType $Nom LesTissues] { if {$Tissue == ""} {continue} lappend LesTissues [list $Tissue [InterrogeTissueType $Nom Tissue $Tissue n]] } if {$LesTissues != {}} { set LesTissuesEtLeurEffectif {} foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { lappend LesTissuesEtLeurEffectif "[lindex $LeTissue 0] ([lindex $LeTissue 1])" } lappend Rapport "TissueType: [join $LesTissuesEtLeurEffectif " ; "]" } } else { lappend Rapport "TissueType: " } ### Development Stage ### Espionne "$Nom -> Development stage" if {[InterrogeDevStage $Nom LesDevStages] != ""} { set LesDevStage {} foreach DevStage [InterrogeDevStage $Nom LesDevStages] { if {$DevStage == ""} {continue} lappend LesDevStage [list $DevStage [InterrogeDevStage $Nom DevStage $DevStage n]] } if {$LesDevStage != {}} { set LesDevStageEtLeurEffectif {} foreach LeDevStage [lsort -index 1 -decreasing -integer $LesDevStage] { lappend LesDevStageEtLeurEffectif "[lindex $LeDevStage 0] ([lindex $LeDevStage 1])" } lappend Rapport "DevelopmentStage: [join $LesDevStageEtLeurEffectif " ; "]" } } else { lappend Rapport "DevelopmentStage: " } Espionne "fin" SauveLesLignes $Rapport dans "$RepRapports/$Nom" } return "" } proc LesRapportsPourAccessPourESTseuls {{LesNoms ""} {Keep ""}} { set RepRapports "[RepertoireDuGenome]/rapportsaccess" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set LesNoms [ListeDesPABs]} else {set LesNoms $LesNoms} foreach Nom $LesNoms { if {$Keep==1 && [file exists "$RepRapports/$Nom"]} { continue } Espionne $Nom set Rapport {} #Generalites Espionne "$Nom -> Generalites" set CodeClone [CodeClone $Nom] set Longueur [SeqLength $Nom] lappend Rapport "GscopeCode: $Nom" lappend Rapport "CodeClone: $CodeClone" lappend Rapport "Length: $Longueur" set User [OwnerOfCDNA $Nom] lappend Rapport "User: $User" #EST set LesCops [LesMeilleursCopainsDuBlast $Nom blastnest-human] set Tmax 1 foreach Cop $LesCops { scan $Cop "%s %s" bid acc set AccessEST $acc set PageInfoEST [PageInfo $AccessEST genbankfull "id acc des org"] set TailleEST [TailleDeLAcNuc_PageInfo $PageInfoEST] if {$TailleEST>$Tmax} { set Tmax $TailleEST set CopMax $Cop } } lappend Rapport "EST: $CopMax" Espionne "fin" SauveLesLignes $Rapport dans "$RepRapports/$Nom" } return "" } proc LesRapportsPourAccessSpecialAffy {{LesNoms ""} {Keep ""}} { #affy set RepRapports "[RepertoireDuGenome]/rapportsaccessspecial" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set LesNoms [ListeDesPABs]} else {set LesNoms $LesNoms} foreach Nom $LesNoms { if {$Keep && [file exists "$RepRapports/$Nom"]} { continue } Espionne $Nom set Rapport {} #Generalites: set CodeClone [CodeClone $Nom] set AC [ExtraitInfo $Nom "AffymetrixAccess"] set Definition [ExtraitInfo $Nom "GBtagsDefinition"] lappend Rapport "GscopeCode: $Nom" lappend Rapport "CodeClone: $CodeClone" lappend Rapport "Access: $AC" lappend Rapport "Definition: $Definition" Espionne "fin" SauveLesLignes $Rapport dans "$RepRapports/$Nom" } return "" } proc LesRecepteursNucleairesDe {{Qui ""}} { if {$Qui==""} { set LesPossibles [glob -nocomplain "[RepertoireDuGenome]/blastp*"] set Qui [ChoixParmi $LesPossibles] if {$Qui==""} { return {} } set Qui [file tail $Qui] regsub "blastp" $Qui "" Qui } foreach Nom [ListeDesPABs] { set Fichier "[RepertoireDuGenome]/blastp$Qui/$Nom" DecortiqueBlast $Fichier 0.001 9999 Query lBanqueId lAccess lDE lProfil lPN if {$Qui=="briggsae"} { set lAccess $lBanqueId } foreach Access $lAccess PN $lPN { lappend VerExpect($Access) "$PN $Nom" } } set LesRNs {} foreach Access [lsort [array names VerExpect]] { set VerExpect($Access) [lsort -command CompareLesFloatsEnDebut [set VerExpect($Access)]] if {$Qui=="Ciona"} { set CIONA [CioNarcisse $Access] lappend LesRNs "$CIONA $Access [join [set VerExpect($Access)] { }]" } else { lappend LesRNs "xxxxxx $Access [join [set VerExpect($Access)] { }]" } } return $LesRNs } proc LesRegionsAbsentesDesPetitesRegions {LesPetitesRegions {TailleMin ""} {TailleMax ""}} { if {$TailleMax == ""} { set Max1 [lindex [lindex [lsort -integer -index 1 $LesPetitesRegions] end] 1] set Max2 [lindex [lindex [lsort -integer -index 0 $LesPetitesRegions] end] 0] set TailleMax [Maxi $Max1 $Max2] } if {$TailleMin == ""} { set Min1 [lindex [lindex [lsort -integer -index 1 $LesPetitesRegions] 0] 1] set Min2 [lindex [lindex [lsort -integer -index 0 $LesPetitesRegions] 0] 0] set TailleMin [Mini $Max1 $Max2] } set Debut 1 set LesRegionsAbsentes {} foreach UneRegion [lsort -integer -index 0 [lsort -integer -index 1 $LesPetitesRegions]] { set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] if {$TailleMax < $F} {set TailleMax $F} if {$Debut < $D} {lappend LesRegionsAbsentes [list $Debut [expr $D - 1]]} set Debut [expr $F + 1] } if {$F < $TailleMax} {lappend LesRegionsAbsentes [list [expr $F + 1] $TailleMax ]} return $LesRegionsAbsentes } proc LesRegionsAvecLesRegionsAbsentesBlastees {FichierTFAQuery LesRegions TailleQuery {TailleMinQ 10} {TailleMaxQ 20000} {TailleMax 1e5} {Expect 0.001} {ElimineLesRegionsRichesEnA 1}} { if {![file exists $FichierTFAQuery]} {return} set TailleFragment 100000 set NameFile [file tail $FichierTFAQuery] set ToutesLesRegions {} foreach UneRegion $LesRegions { set N [lindex $UneRegion 3] set LeBId [lindex $UneRegion 4] set Access [lindex $LeBId 1] set Sens [lindex $UneRegion 6] if {$N == 1} { if {![info exists TabTmp($Access,$Sens,Score)]} {set TabTmp($Access,$Sens,Score) 0} incr TabTmp($Access,$Sens,Score) [lindex $UneRegion 9] } if {$N != 0} {lappend ToutesLesRegions $UneRegion;continue} set Chrom [lindex $LeBId 0] set NbNDuContig [lindex $LeBId end] set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] set Taille [expr $F - $D + 1] if {$Taille < $TailleMinQ || $TailleMaxQ <= $Taille } {continue} set BorneMin [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set BorneMax [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set TailleContig [TailleDuContig $Chrom $Access $NbNDuContig] if {$TailleContig < $BorneMin} {continue} if {$TailleContig < $BorneMax} {set BorneMax $TailleContig} if {$Sens == "+"} { set DS [Mini $BorneMin $BorneMax] set FS [Maxi $BorneMin $BorneMax] } else { set DS [Maxi $BorneMin $BorneMax] set FS [Mini $BorneMin $BorneMax] } set File [TmpFile $NameFile] set Seq [string range [QueLaSequenceDuFichierTFA $FichierTFAQuery] [expr $D-1] [expr $F-1]] set FichierTFAQ "${File}_Query_${D}_${F}.tfa" set SeqTFA [SequenceFormatTFA $Seq "Query $D $F"] if {$SeqTFA == ""} {continue} Sauve $SeqTFA dans $FichierTFAQ set TailleRegion [expr abs($FS - $DS) + 1] if {$TailleMax < $TailleRegion} { if {$D !=1 && $F != $TailleQuery} {continue} if {$Sens == "+"} { if {$D == 1 } {set DS [expr int($FS - $TailleMax)]} if {$F == $TailleQuery} {set FS [expr int($DS + $TailleMax)]} } if {$Sens == "-"} { if {$D == 1 } {set DS [expr int($FS + $TailleMax)]} if {$F == $TailleQuery} {set FS [expr int($DS - $TailleMax)]} } } set BorneMin [Mini $DS $FS] set BorneMax [Maxi $DS $FS] set FichierTFAS "${File}_Subject_${Chrom}_${Access}_${BorneMin}_${BorneMax}.tfa" set SeqTFA [SequenceTFADuContig $Chrom $Access $BorneMin $BorneMax $NbNDuContig $TailleContig] if {$SeqTFA == ""} {continue} Sauve $SeqTFA dans $FichierTFAS set FichierBlast "${File}_${D}_${F}_${Chrom}_${Access}_${DS}_${FS}.blast" set FichierFasta "${File}_${D}_${F}_${Chrom}_${Access}_${DS}_${FS}.fasta" BlastNAvecFastaN $FichierTFAQ $FichierTFAS $FichierBlast $FichierFasta if {$Sens == "+"} { FichierBlastReduit $FichierBlast $FichierBlast SensToKeep "Plus / Plus" } else { FichierBlastReduit $FichierBlast $FichierBlast SensToKeep "Plus / Minus" } set NbSubject [AskBlast $FichierBlast NbSubject] if {$NbSubject == "" || $NbSubject == 0} {continue} set LesGrandesRegions [LesGrandesRegionsDeLaQueryDuBlast $FichierBlast $Expect 1e200 0.0 Yes ""] set LesPetitesRegions [LesPetitesRegionsDesGrandesRegions $LesGrandesRegions] set LesInfos [LesInfosDesRegionsDansLeBlast $FichierBlast $LesPetitesRegions "All" "None"] if {$LesInfos == {}} {continue} foreach LInfo $LesInfos { set N [lindex $LInfo 3] set DQ [expr $D + [Mini [lindex $LInfo 0] [lindex $LInfo 1]] - 1] set FQ [expr $D + [Maxi [lindex $LInfo 0] [lindex $LInfo 1]] - 1] set DS2 [expr $BorneMin + [Mini [lindex $LInfo 7] [lindex $LInfo 8]] - 1] set FS2 [expr $BorneMin + [Maxi [lindex $LInfo 7] [lindex $LInfo 8]] - 1] if {$Sens == "-"} {set tmp $DS2;set DS2 $FS2;set FS2 $tmp} if {$NbNDuContig == 0} { set BId [list $Chrom $Access ""] } else { set BId [list $Chrom $Access $NbNDuContig] } if {$N == 1} { if {![info exists TabTmp($Access,$Sens,Score)]} {set TabTmp($Access,$Sens,Score) 0} incr TabTmp($Access,$Sens,Score) [lindex $LInfo 9] } set LInfo [lreplace $LInfo 4 4 $BId] set LInfo [lreplace $LInfo 0 0 $DQ ] set LInfo [lreplace $LInfo 1 1 $FQ ] set LInfo [lreplace $LInfo 7 7 $DS2] set LInfo [lreplace $LInfo 8 8 $FS2] lappend LInfo 0 lappend ToutesLesRegions $LInfo } } set LesRegions {} foreach UneRegion $ToutesLesRegions { set N [lindex $UneRegion 3] if {$N != 1} {lappend LesRegions $UneRegion;continue} set LeBId [lindex $UneRegion 4] set Access [lindex $LeBId 1] set Sens [lindex $UneRegion 6] lappend LesRegions [lreplace $UneRegion end end [set TabTmp($Access,$Sens,Score)]] } return $LesRegions } proc LesRegionsAvecLesRegionsAbsentesBlastees_Old {FichierTFAQuery LesRegions TailleQuery {TailleMinQ 10} {TailleMaxQ 20000} {TailleMax 1e5} {Expect 0.001} {ElimineLesRegionsRichesEnA 1}} { if {![file exists $FichierTFAQuery]} {return} set TailleFragment 100000 set NameFile [file tail $FichierTFAQuery] set ToutesLesRegions {} foreach UneRegion $LesRegions { set N [lindex $UneRegion 3] set LeBId [lindex $UneRegion 4] set Access [lindex $LeBId 1] set Sens [lindex $UneRegion 6] if {$N == 1} { if {![info exists TabTmp($Access,$Sens,Score)]} {set TabTmp($Access,$Sens,Score) 0} incr TabTmp($Access,$Sens,Score) [lindex $UneRegion 9] } if {$N != 0} {lappend ToutesLesRegions $UneRegion;continue} set Chrom [lindex $LeBId 0] set NbNDuContig [lindex $LeBId end] set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] set Taille [expr $F - $D + 1] if {$Taille < $TailleMinQ || $TailleMaxQ <= $Taille } {continue} set BorneMin [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set BorneMax [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set TailleContig [TailleDuContig $Chrom $Access $NbNDuContig] if {$TailleContig < $BorneMin} {continue} if {$TailleContig < $BorneMax} {set BorneMax $TailleContig} if {$Sens == "+"} { set DS [Mini $BorneMin $BorneMax] set FS [Maxi $BorneMin $BorneMax] } else { set DS [Maxi $BorneMin $BorneMax] set FS [Mini $BorneMin $BorneMax] } set File [TmpFile $NameFile] set Seq [string range [QueLaSequenceDuFichierTFA $FichierTFAQuery] [expr $D-1] [expr $F-1]] set FichierTFAQ "${File}_Query_${D}_${F}.tfa" set SeqTFA [SequenceFormatTFA $Seq "Query $D $F"] if {$SeqTFA == ""} {continue} Sauve $SeqTFA dans $FichierTFAQ set TailleRegion [expr abs($FS - $DS) + 1] if {$TailleMax < $TailleRegion} { if {$D !=1 && $F != $TailleQuery} {continue} if {$Sens == "+"} { if {$D == 1 } {set DS [expr int($FS - $TailleMax)]} if {$F == $TailleQuery} {set FS [expr int($DS + $TailleMax)]} } if {$Sens == "-"} { if {$D == 1 } {set DS [expr int($FS + $TailleMax)]} if {$F == $TailleQuery} {set FS [expr int($DS - $TailleMax)]} } } set BorneMin [Mini $DS $FS] set BorneMax [Maxi $DS $FS] set FichierTFAS "${File}_Subject_${Chrom}_${Access}_${BorneMin}_${BorneMax}.tfa" set SeqTFA [SequenceTFADuContig $Chrom $Access $BorneMin $BorneMax $NbNDuContig $TailleContig] if {$SeqTFA == ""} {continue} Sauve $SeqTFA dans $FichierTFAS set FichierBlast "${File}_${D}_${F}_${Chrom}_${Access}_${DS}_${FS}.blast" set FichierFasta "${File}_${D}_${F}_${Chrom}_${Access}_${DS}_${FS}.fasta" BlastNAvecFastaN $FichierTFAQ $FichierTFAS $FichierBlast $FichierFasta if {$Sens == "+"} { FichierBlastReduit $FichierBlast $FichierBlast SensToKeep "Plus / Plus" } else { FichierBlastReduit $FichierBlast $FichierBlast SensToKeep "Plus / Minus" } DepouilleLeBlast TabBlast $FichierBlast if { ![info exists TabBlast(NbSubject)] || [set TabBlast(NbSubject)] == 0} {continue} set LesGrandesRegions [LesGrandesRegionsDuBlast TabBlast "All" "None"] set LesPetitesRegions [LesPetitesRegionsDesGrandesRegions $LesGrandesRegions] set LesInfos [LesInfosDesRegionsDansLeBlast_TabBlast TabBlast $LesPetitesRegions "All" "None"] if {$LesInfos == {}} {continue} foreach LInfo $LesInfos { set N [lindex $LInfo 3] set DQ [expr $D + [Mini [lindex $LInfo 0] [lindex $LInfo 1]] - 1] set FQ [expr $D + [Maxi [lindex $LInfo 0] [lindex $LInfo 1]] - 1] set DS2 [expr $BorneMin + [Mini [lindex $LInfo 7] [lindex $LInfo 8]] - 1] set FS2 [expr $BorneMin + [Maxi [lindex $LInfo 7] [lindex $LInfo 8]] - 1] if {$Sens == "-"} {set tmp $DS2;set DS2 $FS2;set FS2 $tmp} if {$NbNDuContig == 0} { set BId [list $Chrom $Access ""] } else { set BId [list $Chrom $Access $NbNDuContig] } if {$N == 1} { if {![info exists TabTmp($Access,$Sens,Score)]} {set TabTmp($Access,$Sens,Score) 0} incr TabTmp($Access,$Sens,Score) [lindex $LInfo 9] } set LInfo [lreplace $LInfo 4 4 $BId] set LInfo [lreplace $LInfo 0 0 $DQ ] set LInfo [lreplace $LInfo 1 1 $FQ ] set LInfo [lreplace $LInfo 7 7 $DS2] set LInfo [lreplace $LInfo 8 8 $FS2] lappend LInfo 0 lappend ToutesLesRegions $LInfo } } set LesRegions {} foreach UneRegion $ToutesLesRegions { set N [lindex $UneRegion 3] if {$N != 1} {lappend LesRegions $UneRegion;continue} set LeBId [lindex $UneRegion 4] set Access [lindex $LeBId 1] set Sens [lindex $UneRegion 6] lappend LesRegions [lreplace $UneRegion end end [set TabTmp($Access,$Sens,Score)]] } return $LesRegions } proc LesRegionsAvecScoreModifieEnFonctionDesRegionsRepetees {LesRegions} { #Etant donne que les regions exoniques sont separees par des regions repetees et qu'il existe des retropseudogenes #avec plus de 99% d'id sur le genome ; il ne faut donc pas considerer les regions repetees #dans le calcul du score => le score des retropseudogenes devraient diminuer et non pas celui des vrais genes set LesRegionsRepetees {} set LesAccessEtLeurSensDesRegions {} foreach LaRegion $LesRegions { set n [lindex $LaRegion 3] if {1 < $n} {lappend LesRegionsRepetees $LaRegion} set LeBId [lindex $LaRegion 4] set Access [lindex $LeBId 1] set Sens [lindex $LaRegion 6] set Score [lindex $LaRegion 12] if {![info exists Tab($Access,$Sens,Score)] && $Score != ""} {set Tab($Access,$Sens,Score) $Score} if {![info exists Tab($Access,$Sens,LesRegions)]} { set Tab($Access,$Sens,LesRegions) {} lappend LesAccessEtLeurSensDesRegions [list $Access $Sens] } lappend Tab($Access,$Sens,LesRegions) $LaRegion } foreach LaRegion $LesRegionsRepetees { set D [Mini [lindex $LaRegion 0] [lindex $LaRegion 1]] set F [Maxi [lindex $LaRegion 0] [lindex $LaRegion 1]] for {set i $D} {$i <= $F} {incr i} {set Tab(Seq,$i) 1} } set LesRegionsModifiees {} foreach LAccessEtLeSens $LesAccessEtLeurSensDesRegions { set Access [lindex $LAccessEtLeSens 0] set Sens [lindex $LAccessEtLeSens 1] set LesRegionsAModifier [set Tab($Access,$Sens,LesRegions)] set Score [set Tab($Access,$Sens,Score)] foreach LaRegion $LesRegionsAModifier { set n [lindex $LaRegion 3] if {$n != 1} {continue} set D [Mini [lindex $LaRegion 0] [lindex $LaRegion 1]] set F [Maxi [lindex $LaRegion 0] [lindex $LaRegion 1]] for {set i $D} {$i <= $F} {incr i} { if {[info exists Tab(Seq,$i)]} {incr Score -1} } } foreach LaRegion $LesRegionsAModifier { set n [lindex $LaRegion 3] if {$n != 1} {lappend LesRegionsModifiees $LaRegion;continue} set LaRegion [lreplace $LaRegion 12 12 $Score] lappend LesRegionsModifiees $LaRegion } } return $LesRegionsModifiees } proc LesRegionsDeLaQuerySurLeSubject {aTabBlast BId} { upvar $aTabBlast Blast set LesRegions {} if {![info exists Blast($BId,NbSegment)]} {return $LesRegions} set NbSegment [set Blast($BId,NbSegment)] for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [set Blast($BId,$j,DQ)] set FQ [set Blast($BId,$j,FQ)] set DS [set Blast($BId,$j,DS)] set FS [set Blast($BId,$j,FS)] set Orientation [set Blast($BId,$j,Orientation)] set TailleS [set Blast($BId,Taille)] if {$FQ < $DQ && $Orientation < 0} { set tmpQ $FQ set FQ $DQ set DQ $tmpQ set tmpS $FS set FS $DS set DS $tmpS } if {$Orientation == "" && [set Blast(TypeDeBlast)] == "BLASTP"} { set Orientation "Prot / Prot" } lappend LesRegions [list "$DQ" "$FQ" "$DS" "$FS" "$TailleS" "$Orientation"] } return [lsort -increasing -integer -index 0 [lsort -decreasing -integer -index 1 $LesRegions]] } proc LesRegionsDetecteesPolyN {Seq N {nMin 10} {PMin 0.95} {NbMaxDeBasesDiffDeNContigues 2} {NbMinDeNAuxExtremites 5}} { ################################################################## ### Detection de region polyN a partir d'une sequence lineaire ### ################################################################## #Seq : Sequence lineaire #N : la base d'interet ex N=A pour detecter un PolyA #nMin : Taille du PolyN minimum = taille "sliding window" #PMin : Pourcentage de A minimum dans le PolyN #NbMaxDeBasesDiffDeNContigues : Nb maximum de bases differentes de N contigues dans le polyN #Retourne : une liste contenant l'index du debut et de la fin du ou des PolyN detectes #je mets la seq dans une liste et je calcule la taille de la sequence set LaSeq [split $Seq ""] set TailleSeq [llength $LaSeq ] ### Met chaque base de la seq dans un tableau indexe avec la position de la base ### Plus rapide que lindex set PosSeq 0 foreach Base $LaSeq {set TabSeq($PosSeq) $Base;incr PosSeq} set LesDebuts {} #Je parcours la seq du debut jusqu'au debut de la derniere "sliding window" (TailleSeq - TailleSlidingWindow) for {set i 0} {$i <= [expr $TailleSeq - $nMin]} {incr i} { #grace au tableau d'indexation des bases de la seq je demande la base correspondant à la position i set Base [set TabSeq($i)] #je ne commence à compter qu'à partir d'une base N if {![string equal -nocase $Base $N]} {continue} #cette base peut donc etre mon debut de polyN set Debut $i #je vais comptabiliser le nb de bases N,le nb total de bases à travers toutes les "sliding window", #le nombre de bases N à la fin et au debut du polyN #ainsi que le nombre de bases differentes de N contigues set NbN 1 set NbNAuDebut 1 set NbNALaFin 1 set NbBases 1 set NbDeBasesDiffDeNContigues 0 #Je parcours la seq de la base suivante (debut + 1) jusqu'à la derniere base ( je quitte if {$LesDebuts == {}} {return} #sinon je reforme la description (Debut Fin) de chaque region polyN trouvee set LesRegions {} foreach Debut $LesDebuts {lappend LesRegions [list $Debut [set Tab($Debut,Fin)]]} #determination des regions polyN finalement selectionnees set TailleMaxPolyN 0 set LesRegionsSelectionnees {} #fusion des regions polyN chevauchantes foreach LaRegion [LaFusionDesRegionsOverlappantes $LesRegions] { #+1 pour D et F car la premiere base de la seq est en position 1 #alors que l'indexation dans cette procedure commence à 0 set D [expr [lindex $LaRegion 0] + 1] set F [expr [lindex $LaRegion 1] + 1] set TaillePolyN [expr $F - $D +1] #determination et selection de la region polyN de plus grande taille if {$TailleMaxPolyN < $TaillePolyN} { set TailleMaxPolyN $TaillePolyN set LesRegionsSelectionnees {} lappend LesRegionsSelectionnees [list $D $F $TaillePolyN $N] continue } #selection finale de la ou des regions polyN de plus grande taille if {$TailleMaxPolyN == $TaillePolyN} { lappend LesRegionsSelectionnees [list $D $F $TaillePolyN $N] continue } continue } Espionne "TailleSeq : $TailleSeq" Espionne "Les debuts : $LesDebuts" Espionne "Toutes Les Regions : $LesRegions" Espionne "Les Regions select : $LesRegionsSelectionnees" Espionne $Seq Espionne [MasqueLesRegions $Seq $LesRegionsSelectionnees N] #je retourne le debut et la fin des regions polyN selectionnees return $LesRegionsSelectionnees } proc LesRegionsDetecteesPolyNDesTFAs {FichierTFAs N {nMin 10} {PMin 0.95} {NbMaxDeBasesDiffDeNContigues 2} {NbMinDeNAuxExtremites 5}} { set LesTFAs [split [ContenuDuFichier $FichierTFAs] ">"] foreach TFA $LesTFAs { if {$TFA == ""} {continue} set TFA ">$TFA" Espionne $TFA LesRegionsDetecteesPolyNDuTFA $TFA A } return } proc LesRegionsDetecteesPolyNDesTFAs_EXISTEAILLEURS {FichierTFAs N {nMin 10} {PMin 0.95} {NbMaxDeBasesDiffDeNContigues 2} {NbMinDeNAuxExtremites 5}} { set LesTFAs [split [File2Text $FichierTFAs] ">"] set LesRegionsDesTFAs {} foreach TFA $LesTFAs { if {$TFA == ""} {continue} set TFA ">$TFA" Espionne $TFA lappend LesRegionsDesTFAs [LesRegionsDetecteesPolyNDuTFA $TFA A] } return $LesRegionsDesTFAs } proc LesRegionsDetecteesPolyNDuTFA {TFA N {nMin 10} {PMin 0.95} {NbMaxDeBasesDiffDeNContigues 2} {NbMinDeNAuxExtremites 5}} { ### Detection de region polyN a partir d'un fichier TFA ou d'un texte TFA if {[file exists $TFA]} {set TFA [string toupper [string trim [ContenuDuFichier $TFA]]]} set Seq [QueLaSequenceDuTexteTFA $TFA] return [LesRegionsDetecteesPolyN $Seq $N $nMin $PMin $NbMaxDeBasesDiffDeNContigues $NbMinDeNAuxExtremites] } proc LesRegionsDetecteesPolyNDuTFA_EXISTEAILLEURS {TFA N {nMin 10} {PMin 0.95} {NbMaxDeBasesDiffDeNContigues 2} {NbMinDeNAuxExtremites 5}} { ### Detection de region polyN a partir d'un fichier TFA ou d'un texte TFA set Seq [TFA2SEQ $TFA] return [LesRegionsDetecteesPolyN $Seq $N $nMin $PMin $NbMaxDeBasesDiffDeNContigues $NbMinDeNAuxExtremites] } proc LesRegionsDetecteesPolyN_EXISTEAILLEURS {Seq N {nMin 10} {PMin 0.95} {NbMaxDeBasesDiffDeNContigues 2} {NbMinDeNAuxExtremites 5}} { ################################################################## ### Detection de region polyN a partir d'une sequence lineaire ### ################################################################## #Seq : Sequence lineaire #N : la base d'interet ex N=A pour detecter un PolyA #nMin : Taille du PolyN minimum = taille "sliding window" #PMin : Pourcentage de A minimum dans le PolyN #NbMaxDeBasesDiffDeNContigues : Nb maximum de bases differentes de N contigues dans le polyN #Retourne : une liste contenant l'index du debut et de la fin du ou des PolyN detectes #je mets la seq dans une liste et je calcule la taille de la sequence set LaSeq [split $Seq ""] set TailleSeq [llength $LaSeq ] ### Met chaque base de la seq dans un tableau indexe avec la position de la base ### Plus rapide que lindex set PosSeq 0 foreach Base $LaSeq {set TabSeq($PosSeq) $Base;incr PosSeq} set LesDebuts {} #Je parcours la seq du debut jusqu'au debut de la derniere "sliding window" (TailleSeq - TailleSlidingWindow) for {set i 0} {$i <= [expr $TailleSeq - $nMin]} {incr i} { #grace au tableau d'indexation des bases de la seq je demande la base correspondant à la position i set Base [set TabSeq($i)] #je ne commence à compter qu'à partir d'une base N if {![string equal -nocase $Base $N]} {continue} #cette base peut donc etre mon debut de polyN set Debut $i #je vais comptabiliser le nb de bases N,le nb total de bases à travers toutes les "sliding window", #le nombre de bases N à la fin et au debut du polyN #ainsi que le nombre de bases differentes de N contigues set NbN 1 set NbNAuDebut 1 set NbNALaFin 1 set NbBases 1 set NbDeBasesDiffDeNContigues 0 #Je parcours la seq de la base suivante (debut + 1) jusqu'à la derniere base ( je quitte if {$LesDebuts == {}} {return} #sinon je reforme la description (Debut Fin) de chaque region polyN trouvee set LesRegions {} foreach Debut $LesDebuts {lappend LesRegions [list $Debut [set Tab($Debut,Fin)]]} ###Attention, a faire!!!### ###Fusionner les regions polyN selectionnees et mettre la suite de la selection directement dans la procedure qui en a besoin### ### cad fichierTFA2EST au moment de la selection des EST qui ont une queue polyA ou polyT ### #determination des regions polyN finalement selectionnees set LesRegionsSelectionnees {} #fusion des regions polyN chevauchantes foreach LaRegion [LaFusionDesRegionsOverlappantes $LesRegions] { #+1 pour D et F car la premiere base de la seq est en position 1 #alors que l'indexation dans cette procedure commence à 0 set D [expr [lindex $LaRegion 0] + 1] set F [expr [lindex $LaRegion 1] + 1] set TaillePolyN [expr $F - $D +1] lappend LesRegionsSelectionnees [list $D $F $TaillePolyN $N] } return $LesRegionsSelectionnees } proc LesRegionsDuBlast {FichierBlast {ExpectDeRef ""} {Nb ""}} { if {![file exists $FichierBlast]} {return ""} if {$ExpectDeRef == ""} {set ExpectDeRef "1e-3"} DepouilleLeBlast Blast $FichierBlast $ExpectDeRef $Nb return [LesRegionsDuTabBlast Blast] } proc LesRegionsDuTabBlast {aTabBlast} { upvar $aTabBlast Blast if {![info exists Blast(NbSubject)]} {return ""} set NbSubject [set Blast(NbSubject)] set LesRegions {} set LesBornes {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [set Blast($i)] set NbSegment [set Blast($BId,NbSegment)] for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [set Blast($BId,$j,DQ)] set FQ [set Blast($BId,$j,FQ)] lappend LesBornes $DQ lappend LesBornes $FQ if {$FQ < $DQ} { set tmp $FQ set FQ $DQ set DQ $tmp } set LaRegion [list "$DQ" "$FQ"] lappend LesRegions $LaRegion } } set LesBornes [lsort -increasing -integer [ElimineLesRedondancesDansUneListe $LesBornes]] foreach Borne $LesBornes { set Limites($Borne,Left) "-" set Limites($Borne,Right) "-" foreach LaRegion $LesRegions { set DQ [lindex $LaRegion 0] set FQ [lindex $LaRegion 1] if {$FQ < $DQ} { set tmp $FQ set FQ $DQ set DQ $tmp } if {$Borne < $DQ || $Borne > $FQ} { continue } elseif {$Borne < $FQ && $Borne > $DQ} { set Limites($Borne,Left) "+" set Limites($Borne,Right) "+" } elseif {$Borne == $DQ || $Borne < $FQ } { set Limites($Borne,Right) "+" } elseif {$Borne == $FQ} { set Limites($Borne,Left) "+" } } set Left [set Limites($Borne,Left)] set Right [set Limites($Borne,Right)] } set LesRegions2 {} for {set i 0} {$i < [llength $LesBornes]} {incr i} { set Borne [lindex $LesBornes $i] set Right [set Limites($Borne,Right)] if {$Right == "+"} { set LaRegion2 [list "$Borne" [lindex $LesBornes [expr $i + 1]]] lappend LesRegions2 $LaRegion2 } } set LesRegions {} set NRegions 0 set LesGdesRegions {} set DebutGdeRegion [lindex [lindex $LesRegions2 0] 0] set FinGdeRegion [lindex [lindex $LesRegions2 0] 1] foreach LaRegion2 $LesRegions2 { incr NRegions set LaRegion [linsert $LaRegion2 0 $NRegions] set DQR [lindex $LaRegion2 0] set FQR [lindex $LaRegion2 1] if {$FQR < $DQR} { set tmp $FQR set FQR $DQR set DQR $tmp } if {$FinGdeRegion == $DQR} { set FinGdeRegion $FQR } elseif {$FinGdeRegion <= $DQR} { set UneGdeRegion [list "$DebutGdeRegion" "$FinGdeRegion"] lappend LesGdesRegions $UneGdeRegion set DebutGdeRegion $DQR set FinGdeRegion $FQR } set Frequence 0 for {set i 1} {$i <= $NbSubject} {incr i} { set BId [set Blast($i)] set NbSegment [set Blast($BId,NbSegment)] for {set j 1} {$j <= $NbSegment} {incr j} { set DQ [set Blast($BId,$j,DQ)] set FQ [set Blast($BId,$j,FQ)] if {$FQ < $DQ} { set tmp $FQ set FQ $DQ set DQ $tmp } if {$DQR < $DQ || $FQ < $FQR} { continue } else { incr Frequence } } } set LaRegion [linsert $LaRegion 1 $Frequence] lappend LesRegions $LaRegion } set UneGdeRegion [list "$DebutGdeRegion" "$FinGdeRegion"] lappend LesGdesRegions $UneGdeRegion set LesPetitesRegions $LesRegions set LesRegions {} foreach UnePetiteRegion $LesPetitesRegions { set DebutPetiteRegion [lindex $UnePetiteRegion 2] set FinPetiteRegion [lindex $UnePetiteRegion 3] foreach UneGdeRegion $LesGdesRegions { set DebutGdeRegion [lindex $UneGdeRegion 0] set FinGdeRegion [lindex $UneGdeRegion 1] if {$DebutPetiteRegion < $DebutGdeRegion} { continue } elseif {$DebutGdeRegion <= $DebutPetiteRegion && $FinPetiteRegion <=$FinGdeRegion} { set LaRegion [linsert $UnePetiteRegion 4 $DebutGdeRegion] set LaRegion [linsert $LaRegion 5 $FinGdeRegion] lappend LesRegions $LaRegion } else { continue } } } set LesRegions [lsort -increasing -integer -index 0 [lsort -decreasing -integer -index 1 [lsort -increasing -integer -index 2 [lsort -increasing -integer -index 3 $LesRegions]]]] return "$LesRegions" } proc LesRegionsLesPlusGrandes {LesRegions} { # LesRegions sont decrites par leurs coordonnees set TailleMax 0 set LesRegionsSelectionnees {} foreach LaRegion $LesRegions { set D [Mini [lindex $LaRegion 0] [lindex $LaRegion 1]] set F [Maxi [lindex $LaRegion 0] [lindex $LaRegion 1]] set Taille [expr $F - $D +1] #determination et selection de la region polyN de plus grande taille if {$TailleMax < $Taille} { set TailleMax $Taille set LesRegionsSelectionnees {} lappend LesRegionsSelectionnees $LaRegion continue } #selection finale de la ou des regions polyN de plus grande taille if {$TailleMax == $Taille} { lappend LesRegionsSelectionnees $LaRegion continue } } return $LesRegionsSelectionnees } proc LesRegionsMasqueesDeLaQuery {FichierTFAMasked} { if {![file exists $FichierTFAMasked]} {return ""} if {[EstCeDeLADN $FichierTFAMasked] == 0} {return {}} set Seq [QueLaSequenceDuFichierTFA $FichierTFAMasked] set Seq [string toupper [string trim $Seq]] if {![regexp "N" $Seq]} {return {}} set Taille [string length $Seq] set Position 0 set SuisJeSurUneRegionMasquee 0 set LesRegions {} foreach Element [split $Seq ""] { incr Position if {$SuisJeSurUneRegionMasquee == 1 && $Element == "N" && $Taille == $Position} { set PosSup $Position set UneRegion [list "$PosInf" "$PosSup" "$Taille"] lappend LesRegions $UneRegion break } elseif {$SuisJeSurUneRegionMasquee == 0 && $Element == "N"} { set PosInf $Position set PosSup $Position set SuisJeSurUneRegionMasquee 1 } elseif {$SuisJeSurUneRegionMasquee == 1 && $Element == "N"} { set PosSup $Position } elseif {$SuisJeSurUneRegionMasquee == 1 && $Element != "N"} { set UneRegion [list "$PosInf" "$PosSup" "$Taille"] lappend LesRegions $UneRegion set SuisJeSurUneRegionMasquee 0 } } set LesRegions [lsort -increasing -integer -index 0 [lsort -decreasing -integer -index 1 $LesRegions]] return $LesRegions } proc LesRegionsNouvellementMasquees {FileTFAMasked FileTFAini} { ### Calcul des regions nouvellement masquees apres une etape de reapeat ou vector ... masking ### #RM = Region Masquee #RNM = Region Nouvellement Masquee set SeqTFAini [TFA2SEQ $FileTFAini ] set SeqTFAMasked [TFA2SEQ $FileTFAMasked] set LesRMTFAini [LesRegionsMasqueesDeLaQuery $FileTFAini ] #Espionne "LesRMTFAini: $LesRMTFAini" set LesRMTFAMasked [LesRegionsMasqueesDeLaQuery $FileTFAMasked] #Espionne "LesRMTFAMasked: $LesRMTFAMasked" set LesRM {} set LesRNM {} #Faire une liste avec toutes les regions pour utiliser la proc LesPetitesRegionsDesGrandesRegions foreach RMTFAini $LesRMTFAini { lappend LesRM $RMTFAini } foreach RMTFAMasked $LesRMTFAMasked { lappend LesRM $RMTFAMasked } #Espionne "LesRM: $LesRM" set LesPRGR [LesPetitesRegionsDesGrandesRegions $LesRM] #Espionne "LesPRGR: $LesPRGR" foreach LaPRGR $LesPRGR { set DPRGR [lindex $LaPRGR 0] set FPRGR [lindex $LaPRGR 1] if {$LesRMTFAini == ""} {set LAiJeRencontre 0} foreach LaRMTFAini $LesRMTFAini { set LAiJeRencontre 0 set DRMTFAini [lindex $LaRMTFAini 0] set FRMTFAini [lindex $LaRMTFAini 1] if {![CesRegionsSontEllesOverlappantes $DPRGR $FPRGR $DRMTFAini $FRMTFAini]} {continue} set LAiJeRencontre 1 break } if {!$LAiJeRencontre} {lappend LesRNM $LaPRGR} } #Espionne "LesRNM: $LesRNM" return $LesRNM } proc LesRegionsProchesFusionnees {LesRegions DistanceMax} { foreach LaRegion [lsort -index 0 -real [LesPetitesRegionsDesGrandesRegions $LesRegions]] { } } proc LesRegionsUniquesDesContigsDansLeBonOrdre {LesRegions {var 0.05}} { set LesAccessEtLeurSens {} foreach UneRegion $LesRegions { set Access [lindex [lindex $UneRegion 4] 1] set Sens [lindex $UneRegion 6] if {[lindex $UneRegion 3] != 1} {continue} if {![info exists Tab($Access,$Sens)]} { set Tab($Access,$Sens) {} lappend LesAccessEtLeurSens [list $Access $Sens] } set D [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] if {$Sens == "-"} { set DS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] } else { set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] } set UneRegion [lreplace $UneRegion 0 0 $D ] set UneRegion [lreplace $UneRegion 1 1 $F ] set UneRegion [lreplace $UneRegion 7 7 $DS] set UneRegion [lreplace $UneRegion 8 8 $FS] lappend Tab($Access,$Sens,LesRegions) $UneRegion } set ScoreMaxTot 0 set LesRegionsDesContigsDansLOrdre {} foreach LAccess $LesAccessEtLeurSens { set Access [lindex $LAccess 0] set Sens [lindex $LAccess 1] set LesRegionsDeLAccess {} foreach UneRegion [lsort -index 0 -integer [set Tab($Access,$Sens,LesRegions)]] { set Access2 [lindex [lindex $UneRegion 4] 1] set Sens2 [lindex $UneRegion 6] if {$Access2 != $Access || $Sens2 != $Sens} {continue} lappend LesRegionsDeLAccess $UneRegion } set LesRegionsDeLAccAvecLesRangsDeLaQ {} set LesRegionsDeLAccAvecLesRangsDeLaQEtDuS {} set LesRangs {} set i 0 foreach UneRegion [lsort -integer -index 0 $LesRegionsDeLAccess] { incr i lappend UneRegion $i lappend LesRegionsDeLAccAvecLesRangsDeLaQ $UneRegion } if {$Sens == "+"} { set LesRegions [lsort -integer -index 8 $LesRegionsDeLAccAvecLesRangsDeLaQ] } else { set LesRegions [lsort -decreasing -integer -index 8 $LesRegionsDeLAccAvecLesRangsDeLaQ] } set i 0 foreach UneRegion $LesRegions { incr i lappend UneRegion $i lappend LesRegionsDeLAccAvecLesRangsDeLaQEtDuS $UneRegion } foreach UneRegion $LesRegionsDeLAccAvecLesRangsDeLaQEtDuS { lappend LesRangs [list [lindex $UneRegion end-1] [lindex $UneRegion end] [lindex $UneRegion 9]] } set LesRegions [lsort -integer -index 0 $LesRegionsDeLAccAvecLesRangsDeLaQEtDuS] set LesRangsOrdonnes [AlignementDynamique [lsort -integer -index 0 $LesRangs]] set ScoreMax 0 set LesRegionsDansLOrdre {} foreach LeRang $LesRangsOrdonnes { set ScoreMax [expr $ScoreMax + [lindex $LeRang end]] set RangQuery [lindex $LeRang 0] set UneDesRegionsOrdonnees [lindex $LesRegions [expr $RangQuery - 1]] lappend LesRegionsDansLOrdre [lrange $UneDesRegionsOrdonnees 0 11] } foreach UneRegion $LesRegionsDansLOrdre { lappend UneRegion $ScoreMax lappend LesRegionsDesContigsDansLOrdre $UneRegion } if {$ScoreMaxTot < $ScoreMax} {set ScoreMaxTot $ScoreMax} } set ScoreMaxTot [expr $ScoreMaxTot * (1 - $var)] set LesRegions {} foreach UneRegion $LesRegionsDesContigsDansLOrdre { if {[lindex $UneRegion end] < $ScoreMaxTot} {continue} lappend LesRegions $UneRegion } return $LesRegions } proc LesRegionsUniquesFusionneesDesContigs {LesRegions {TailleMinIntron 10}} { set LesAccessEtLeurSens {} set LesRegions [lsort -integer -index 0 $LesRegions] foreach UneRegion $LesRegions { set LeBId [lindex $UneRegion 4] set Access [lindex $LeBId 1] set Sens [lindex $UneRegion 6] if {[info exists TabTmp($Access,$Sens)]} {continue} set TabTmp($Access,$Sens) 1 lappend LesAccessEtLeurSens [list $Access $Sens] } set LesRegionsDuContig {} foreach LAccessEtLeSens $LesAccessEtLeurSens { if {[info exists UneRegionDeRef]} {unset UneRegionDeRef} set Access [lindex $LAccessEtLeSens 0] set Sens [lindex $LAccessEtLeSens 1] foreach UneRegion $LesRegions { set LeBId [lindex $UneRegion 4] set Access2 [lindex $LeBId 1] set Sens2 [lindex $UneRegion 6] set N [lindex $UneRegion 3] if {$Access2 != $Access || $Sens2 != $Sens} {continue} if {![info exists UneRegionDeRef]} {set UneRegionDeRef $UneRegion;continue} if {$N != 0 && $N != 1} { if {[info exists UneRegionDeRef]} { lappend LesRegionsDuContig $UneRegionDeRef unset UneRegionDeRef } lappend LesRegionsDuContig $UneRegion continue } set D [Mini [lindex $UneRegion 0 ] [lindex $UneRegion 1]] set F [Maxi [lindex $UneRegion 0 ] [lindex $UneRegion 1]] set nAli [lindex $UneRegion 9 ] set nAliTot [lindex $UneRegion 10] set nCont [lindex $UneRegion 11] if {$Sens == "+"} { set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] } else { set DS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] } set NDeRef [lindex $UneRegionDeRef 3] if {$NDeRef != $N} { lappend LesRegionsDuContig $UneRegionDeRef set UneRegionDeRef $UneRegion continue } set FDeRef [Maxi [lindex $UneRegionDeRef 0] [lindex $UneRegionDeRef 1]] if {[expr $FDeRef + $TailleMinIntron] < $D} { lappend LesRegionsDuContig $UneRegionDeRef set UneRegionDeRef $UneRegion continue } if {$Sens == "+"} { set FSDeRef [Maxi [lindex $UneRegionDeRef 7] [lindex $UneRegionDeRef 8]] } else { set FSDeRef [Mini [lindex $UneRegionDeRef 7] [lindex $UneRegionDeRef 8]] } if {$Sens == "+" && [expr $FSDeRef + $TailleMinIntron] < $DS} { lappend LesRegionsDuContig $UneRegionDeRef set UneRegionDeRef $UneRegion continue } if {$Sens == "-" && $DS < [expr $FSDeRef - $TailleMinIntron]} { lappend LesRegionsDuContig $UneRegionDeRef set UneRegionDeRef $UneRegion continue } set nAliDeRef [expr [lindex $UneRegionDeRef 9] + $nAli] set nAliTotDeRef [expr [lindex $UneRegionDeRef 10] + $nAliTot] set nContDeRef [lindex $UneRegionDeRef 11] if {$nContDeRef < $nCont} {set nContDeRef $nCont} set UneRegionDeRef [lreplace $UneRegionDeRef 1 1 $F ] set UneRegionDeRef [lreplace $UneRegionDeRef 8 8 $FS ] set UneRegionDeRef [lreplace $UneRegionDeRef 9 9 $nAliDeRef ] set UneRegionDeRef [lreplace $UneRegionDeRef 10 10 $nAliTotDeRef ] set UneRegionDeRef [lreplace $UneRegionDeRef 11 11 $nContDeRef ] } if {[info exists UneRegionDeRef]} {lappend LesRegionsDuContig $UneRegionDeRef} } return $LesRegionsDuContig } proc LesRegionsVidesDeLaListe {LesRegionsOccupees Taille} { set LesBornesMax {} set LesRegionsOccupees [lsort -increasing -integer -index 0 [lsort -decreasing -integer -index 1 $LesRegionsOccupees]] foreach UneRegion $LesRegionsOccupees { if {[lindex $UneRegion 0] != ""} { lappend LesBornesMax [lindex $UneRegion 0] lappend LesBornesMax [lindex $UneRegion 1] } } if {$LesBornesMax != {}} { set FinDesRegions [MaxiDeLaListe $LesBornesMax] } set LesRegionsVides {} if {$LesRegionsOccupees == {}} { set UneRegionVide [list "1" "$Taille" "$Taille"] lappend LesRegionsVides $UneRegionVide } else { set SuisJeSurUneRegionVide 0 for {set i 1} {$i <= $Taille} {incr i} { foreach UneRegion $LesRegionsOccupees { if {[lindex $UneRegion 0] == "" || [lindex $UneRegion 1] == ""} {continue} set D [lindex $UneRegion 0] set F [lindex $UneRegion 1] if {$F < $D} { set tmp $F set F $D set D $tmp } if {$SuisJeSurUneRegionVide == 1 && $i == $Taille} { set PosSup $Taille set UneRegionVide {} set UneRegionVide [list "$PosInf" "$PosSup" "$Taille"] lappend LesRegionsVides $UneRegionVide break } elseif {$SuisJeSurUneRegionVide == 0 && $i == $Taille} { break } elseif {$FinDesRegions < $i && $SuisJeSurUneRegionVide == 0} { set SuisJeSurUneRegionVide 1 set PosInf $i set PosSup $i break } elseif {$FinDesRegions < $i && $SuisJeSurUneRegionVide == 1} { set PosSup $i break } elseif {$F < $i} { continue } elseif {$D <= $i && $i <= $F && $SuisJeSurUneRegionVide == 0} { break } elseif {$D <= $i && $i <= $F && $SuisJeSurUneRegionVide == 1} { set UneRegionVide {} set SuisJeSurUneRegionVide 0 set UneRegionVide [list "$PosInf" "$PosSup" "$Taille"] lappend LesRegionsVides $UneRegionVide break } elseif {$SuisJeSurUneRegionVide == 0 && $i < $D} { set PosInf $i set PosSup $i set SuisJeSurUneRegionVide 1 break } elseif {$SuisJeSurUneRegionVide == 1 && $i < $D} { set PosSup $i break } } } } set LesRegionsVides [lsort -increasing -integer -index 0 [lsort -decreasing -integer -index 1 $LesRegionsVides]] return $LesRegionsVides } proc LesRepeatsDeLEnteteDuTFA {FichierTFA} { if {![file exists $FichierTFA]} {return} return [LesRepeatsDuTFA [ContenuDuFichier $FichierTFA]] } proc LesRepeatsDeRepeatMaskerOut {FichierRMOut} { set LesRepeats {} set F [open $FichierRMOut] while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set Ligne [string trim $Ligne] if {![regexp {^[0-9]} $Ligne]} {continue} regsub -all {[ ]+} $Ligne " " Ligne set LaLigne [split $Ligne " "] set Debut [lindex $LaLigne 5] set Fin [lindex $LaLigne 6] set Repeat [lindex $LaLigne 9] lappend LesRepeats [list $Debut $Fin $Repeat] } close $F return $LesRepeats } proc LesRepeatsDuTFA {TexteTFA} { set LesRepeats {} set SuisJeSurLePourcentage 0 set LesMots [split [EnteteDuTexteTFA $TexteTFA] " "] set NbMots [llength $LesMots] set LesRepeatsTmp {} set SuisJeSurLesRepeats 0 for {set i $NbMots} {$i > 0} {incr i -1} { set Mot [lindex $LesMots [expr $i - 1]] if {$Mot == ""} {continue} if {[string equal -nocase "endmask" $Mot] || [string equal -nocase "endremask" $Mot] || [string equal -nocase "endmrm" $Mot]} { set SuisJeSurLesRepeats 1 continue } if {[regexp -nocase "partially|totally" $Mot] && [regexp -nocase "masked" $Mot]} {break} if {[regexp -nocase "norepeat|nosequence" $Mot]} {break} if {$SuisJeSurLesRepeats} {lappend LesRepeatsTmp $Mot} } set LesRepeats {} set LesRepeatsTmp [lrange $LesRepeatsTmp 0 end-1] for {set i [llength $LesRepeatsTmp]} {$i > 0} {incr i -1} { lappend LesRepeats [lindex $LesRepeatsTmp [expr $i - 1]] } return $LesRepeats } proc LesRepertoires {Org IniOrMod} { #les fichiers Mod sont faits avec la procedure RenommeLARedondant if {[regexp -nocase "Mouse" $Org]} { if {$IniOrMod=="Ini"} {set Chemin "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_mai"} if {$IniOrMod=="Mod"} {set Chemin "/genomics/link/SpliRetMouse/FichiersModifUnique/PROT_VARIANTES_61_mai"} set RepertoireSourisTfactor "$Chemin/SOURIS_Tfactor_61_mai" set RepertoireSourisOthers "$Chemin/SOURIS_others_61_mai" set RepertoireSourisNOALT "$Chemin/SOURIS_NO_ALT_61_mai" set LesRepertoires [list $RepertoireSourisTfactor $RepertoireSourisOthers $RepertoireSourisNOALT] } if {[regexp -nocase "Rat" $Org]} { if {$IniOrMod=="Ini"} {set Chemin "/genomics/link/SpliRetRat/FichiersInitial/PROT_VARIANTES_61_mai"} if {$IniOrMod=="Mod"} {set Chemin "/genomics/link/SpliRetRat/FichiersModifUnique/PROT_VARIANTES_61_mai"} set RepertoireRatTfactor "$Chemin/RAT_Tfactor_61_mai" set RepertoireRatOthers "$Chemin/RAT_others_61_mai" set RepertoireRatNOALT "$Chemin/RAT_NO_ALT_61_mai" set LesRepertoires [list $RepertoireRatTfactor $RepertoireRatOthers $RepertoireRatNOALT] } return $LesRepertoires } proc LesRepertoiresInteressantsPour {Nom {HtmlAussi ""} {Vite ""}} { } proc LesRepertoiresPossiblesPour {Nom {HtmlAussi ""} {Vite ""}} { global RepertoireDuGenome if {$Nom=="All"} { set Vite "TesteRepertoire" if {$HtmlAussi==""} { set HtmlAussi "HtmlAussi" } } if {$Vite==""} { set Vite "Vite" } if {$Vite=="TestePresence" || $Vite=="TesteRepertoire"} { set Vite 0 } else { set Vite 1 } if {$HtmlAussi=="HtmlAussi"} {set HtmlAussi 1 } else {set HtmlAussi 0 } if {$Vite} { set LesRepNom [glob -nocomplain "[RepertoireDuGenome]/*/$Nom"] if {$HtmlAussi} { set LesRepNomHtml [glob -nocomplain "[RepertoireDuGenome]/*/$Nom.html"] LConcat LesRepNom $LesRepNomHtml } set LesPossibles {} foreach RepNom $LesRepNom { lappend LesPossibles [file tail [file dirname $RepNom]] } return $LesPossibles } set LesPossibles {} set LesRepertoires [glob -nocomplain -type d $RepertoireDuGenome/*] set LesLiens [glob -nocomplain -type l $RepertoireDuGenome/*] foreach Lien $LesLiens { set But [file readlink $Lien] if {[file isdirectory $But]} { lappend LesRepertoires $But } } if {$Nom=="All"} { foreach Rep $LesRepertoires { set LesRepNom [glob -nocomplain "$Rep/[PreFixe]*"] if {$LesRepNom=={}} {continue} lappend LesPossibles [file tail $Rep] } return $LesPossibles } foreach Rep $LesRepertoires { if {$Vite} { lappend LesPossibles [file tail $Rep] ; continue } if {[file exists "$Rep/$Nom"]} { lappend LesPossibles [file tail $Rep] continue } if {$HtmlAussi && [file exists "$Rep/$Nom.html"]} { lappend LesPossibles [file tail $Rep] continue } if {[OnTraiteDesCDNAs]} { continue } foreach SousRep [lsort [glob -nocomplain -type d $Rep/*]] { if {[file exists $Rep/$Nom]} { lappend LesPossibles "[file tail $Rep]/[file tail $SousRep]" continue } } } return $LesPossibles } proc LesRepertoiresPourSeeAbyShow {{Action ""} {Reps ""}} { global LesRepertoiresPourSeeAbyShow if {$Action==""} { set Action "Get" } set FichierShowDirs "[RepertoireDuGenome]/fiches/showdirs" if {$Action=="Get"} { if {[info exists LesRepertoiresPourSeeAbyShow]} { return $LesRepertoiresPourSeeAbyShow } if {[file exists $FichierShowDirs]} { set LesRepertoiresPourSeeAbyShow [LesLignesDuFichier $FichierShowDirs] } else { set LesRepertoiresPourSeeAbyShow [list bilan notes msf infos blastp prottfa nuctfa ver ] } return $LesRepertoiresPourSeeAbyShow } if {$Action=="PutInFront"} { set LesRepertoiresPourSeeAbyShow [linsert $LesRepertoiresPourSeeAbyShow 0 {*}$Reps] set LesRepertoiresPourSeeAbyShow [ListeSansDoublon $LesRepertoiresPourSeeAbyShow] return $LesRepertoiresPourSeeAbyShow } set LesAnciens [LesRepertoiresPourSeeAbyShow] if {$Action=="Ask"} { set LesFichiersPossibles [glob -nocomplain "$FichierShowDirs*"] if {$LesFichiersPossibles!={}} { while {[OuiOuNon "Do you want to load a file ?"]} { set FichierPossible [ButineArborescence "All" "[RepertoireDuGenome]/fiches/"] if {$FichierPossible==""} { continue } set LesAnciens [LesLignesDuFichier $FichierPossible] break } } set LesReps [MorceauxChoisisAndMore $LesAnciens] if {$LesReps=={}} { set LesReps $LesAnciens } foreach Rep $LesReps { lappend LesNouveaux [file tail $Rep] } set LesRepertoiresPourSeeAbyShow $LesNouveaux while {[OuiOuNon "Do You want to save this list in a file ?"]} { set NewFichierShowDirs [FichierPourSaveAs $FichierShowDirs] if {$NewFichierShowDirs==""} { continue } SauveLesLignes $LesRepertoiresPourSeeAbyShow dans $NewFichierShowDirs break } return $LesRepertoiresPourSeeAbyShow } } proc LesRequetesDesGOEtDesAncetres {LesGO} { set TousLesGO {} foreach GO [lsort -unique [concat $LesGO [TousLesAncetresGODesGO $LesGO]]] { lappend TousLesGO $GO foreach Type [GODB GO $GO LesTypes] { set GODeRef [GODB Type $Type GOSynonyme $GO GODeRef] lappend TousLesGO $GODeRef foreach GOSynonyme [GODB Type $Type GO $GO LesSynonymes] { lappend TousLesGO $GOSynonyme } } } set LesInfos {} foreach GO [lsort -unique $TousLesGO] { set GO [string toupper $GO] lappend LesInfos [list GO $GO] foreach Requete [2GO $GO LesLiens] { if {[info exists TabTmp($Requete)]} {continue} set TabTmp($Requete) 1 set What [2GO $Requete WhatIsIt] lappend LesInfos [list $What $Requete] } } return [lsort -index 0 $LesInfos] } proc LesRequetesDesGOEtDesDescendants {LesGO} { set TousLesGO {} set LesDescendants [TousLesDescendantsGODesGO $LesGO] foreach GO [lsort -unique [concat $LesGO $LesDescendants]] { lappend TousLesGO $GO foreach Type [GODB GO $GO LesTypes] { set GODeRef [GODB Type $Type GOSynonyme $GO GODeRef] lappend TousLesGO $GODeRef foreach GOSynonyme [GODB Type $Type GO $GO LesSynonymes] { lappend TousLesGO $GOSynonyme } } } set LesInfos {} foreach GO [lsort -unique $TousLesGO] { set GO [string toupper $GO] lappend LesInfos [list GO $GO] foreach Requete [2GO $GO LesLiens] { if {[info exists TabTmp($Requete)]} {continue} set TabTmp($Requete) 1 set What [2GO $Requete WhatIsIt] lappend LesInfos [list $What $Requete] } } return [lsort -index 0 $LesInfos] } proc LesRequetesDuGOEtDesAncetres {LesGO} { set LesInfos {} foreach GO [lsort -unique $LesGO] { set TousLesGODuGO [list $GO] set TousLesGODuGO [concat $TousLesGODuGO [TousLesAncetresOntologiques "JeNeConnaisPasLeType" $GO]] foreach GO $TousLesGODuGO { set TousLesGODuGOEtPlus [list $GO] set Jumeau [Onto $GO MonJumeau] if {$Jumeau != ""} {lappend TousLesGODuGOEtPlus $Jumeau} foreach Jumeau [Onto $GO LesJumeaux] {lappend TousLesGODuGOEtPlus $Jumeau} foreach GO [lsort -unique $TousLesGODuGOEtPlus] { if {[info exists TabTmp($GO)]} {continue} set TabTmp($GO) 1 lappend LesInfos [list GO $GO] foreach Req [Interroge2GO $GO] { if {[info exists TabTmp($Req)]} {continue} set TabTmp($Req) 1 set What [Interroge2GO $Req WhatIsIt] lappend LesInfos [list $What $Req] } } } } return [lsort -index 0 $LesInfos] } proc LesRequetesDuGOEtDesDescendants {LesGO} { set LesInfos {} foreach GO [lsort -unique $LesGO] { set TousLesGODuGO [list $GO] set TousLesGODuGO [concat $TousLesGODuGO [TousLesDescendantsOntologiques "JeNeConnaisPasLeType" $GO]] foreach GO $TousLesGODuGO { set TousLesGODuGOEtPlus [list $GO] set Jumeau [Onto $GO MonJumeau] if {$Jumeau != ""} {lappend TousLesGODuGOEtPlus $Jumeau} foreach Jumeau [Onto $GO LesJumeaux] {lappend TousLesGODuGOEtPlus $Jumeau} foreach GO [lsort -unique $TousLesGODuGOEtPlus] { if {[info exists TabTmp($GO)]} {continue} set TabTmp($GO) 1 lappend LesInfos [list GO $GO] foreach Req [Interroge2GO $GO] { if {[info exists TabTmp($Req)]} {continue} set TabTmp($Req) 1 set What [Interroge2GO $Req WhatIsIt] lappend LesInfos [list $What $Req] } } } } return [lsort -index 0 $LesInfos] } proc LesResidusDesARPs {{FichierMSF ""} {FichierPosNtB ""} {FichierOut ""}} { Wup "Permet de rendre les residus equivalents a certaines positions importantes pour une fonction en particulier" Wup "Permet egalement de calculer les moyennes de % d identite et de similarite" Wup "Tout depend du fichier de positions qui est donne" #Utilisation du programme de Julie qui permet de transcrire les positions, dans un alignement par rapport a une #sequence de reference, aux residus equivalents dans plusieurs autres sequences #Format d entree du fichier #1ere ligne Seq de ref (P02568) #2eme ligne les positions separees par des blancs (1 34 546 21 ...) #ligne suivante un nom de sequence par ligne #/home/julie/bin/aln_res Actin_Complet3_1_Propre.rsf ARP_ntbinding set ARPHomeDir "[RepertoireDuGenome]/alignement_ARP/" set Aln_Res "/home/julie/bin/aln_res" if {$FichierMSF==""} { set FichierMSF "$ARPHomeDir/Actin_Complet3_1_Propre.rsf" } #Lecture du fichier contenant les positions a recherchees if {$FichierPosNtB==""} { set FichierPosNtB "$ARPHomeDir/Residue/ARP_ntbinding" } #Fichier contenant les positions importantes pour le binding au nucleotide (ATP/ATP) if {$FichierOut==""} { set FichierOut "$ARPHomeDir/Residue/LesARPs_ntbinding" } foreach FichierPos $FichierPosNtB { set Reference "" set LesPos "" set i 0 set F [open "$FichierPos"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {$i=="1"} { set Reference [lindex $Ligne 0] continue } if {$i=="2"} { set LesPos [split [string trim $Ligne] " "] break } } close $F AppendAuFichier $FichierOut [join [join [list Positions $LesPos] " "] "\t"] } #Recherche des residus aux positions demandees set LesResidus "" set Result "" if {[catch {set LesResidus [exec $Aln_Res $FichierMSF $FichierPosNtB]} Message]} { Espionne "pb $Message" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } } #Recuperation des categories de sequences dans ARP set LesCategories [InterrogeLesInfosDesARPs LesCategories] set LesCategories [linsert $LesCategories end "Autres"] foreach Cate $LesCategories { set TabResidue($Cate) "" } #Recuperation des resultats et classement en fonction des categories set FileToRead "$FichierOut" set Ligne "" set F [open "$FileToRead"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set Cat "" set Results "" set Acc "" set Residues "" set Results [split $Ligne "\t"] set Acc [string toupper [lindex $Results 0]] set Residues [lrange $Results 1 end] if {[regexp -nocase {exonic|\-{3,}} $Acc]} {continue} set TabResidue($Acc,Residues) [join $Residues "\t"] if {$Acc=="P02568"} { set SeqDeRef [join $Residues ""] } if {$Acc=="POSITIONS" || $Acc=="P02568"} { set Cat "----Reference----" } else { set Cat [InterrogeLesInfosDesARPs $Acc Categorie] } if {! [info exists TabResidue($Cat)] || $Cat ==""} { lappend TabResidue(Autres) $Acc } else { lappend TabResidue($Cat) $Acc } } close $F file delete -force $FichierOut #Enregistrement dans le meme fichier apres l avoir deleter des resultats formates set TailleSeqDeRef [string length $SeqDeRef] set Ligne "Access\t[string repeat "\t" $TailleSeqDeRef]\t\tSimilarity\t\t\tIdentity" AppendAuFichier $FichierOut $Ligne foreach Categorie $LesCategories { if {[info exists TabResidue($Categorie)] && [set TabResidue($Categorie)]==""} {continue} set MoyenneSimilarite 0 set MoyenneIdentite 0 set TotalSimilarite 0 set TotalIdentite 0 set NbValeurs 0 set LesValeursSimilarites "" set LesValeursIdentites "" AppendAuFichier $FichierOut $Categorie foreach Access [set TabResidue($Categorie)] { set Ligne "" set Seq2Compare "" set Similarite 0 set Identite 0 incr NbValeurs if {$Access!="POSITIONS"} { set Seq2Compare [join [split [set TabResidue($Access,Residues)] "\t"] ""] set Similarite [join [LesResidusSimilaires $SeqDeRef $Seq2Compare] "\t"] set Identite [join [LesResidusIdentiques $SeqDeRef $Seq2Compare] "\t"] } set Seq2Compare [set TabResidue($Access,Residues)] append Ligne "$Access\t$Seq2Compare\t$Similarite\t$Identite" set TotalSimilarite [expr $TotalSimilarite + [lindex $Similarite end]] set TotalIdentite [expr $TotalIdentite + [lindex $Identite end]] lappend LesValeursSimilarites [lindex $Similarite end] lappend LesValeursIdentites [lindex $Identite end] AppendAuFichier $FichierOut $Ligne } set MoyenneSimilarite [expr (1.0 * $TotalSimilarite) / $NbValeurs] set MoyenneIdentite [expr (1.0 * $TotalIdentite) / $NbValeurs] if {$LesValeursSimilarites ==""} { set TabResidue($Categorie,EcartFredSim) "" set TabResidue($Categorie,EcartFredIde) "" } else { set EcartFredSim [EcartTypeDeLaListe $LesValeursSimilarites] set EcartFredIde [EcartTypeDeLaListe $LesValeursIdentites] set TabResidue($Categorie,EcartFredSim) $EcartFredSim set TabResidue($Categorie,EcartFredIde) $EcartFredIde } set TabResidue($Categorie,MoyenneSimilarite) $MoyenneSimilarite set TabResidue($Categorie,MoyenneIdentite) $MoyenneIdentite set Ligne "Moyennes\t[string repeat "\t" $TailleSeqDeRef]\t\t$MoyenneSimilarite\t\t\t$MoyenneIdentite" AppendAuFichier $FichierOut "$Ligne" } AppendAuFichier $FichierOut "" AppendAuFichier $FichierOut "[join [list Famille MoyenneSimilarite EcartTypeSimilarite MoyenneIdentite EcartTypeIdentite] "\t"]" foreach Categorie $LesCategories { if {[info exists TabResidue($Categorie)] && [set TabResidue($Categorie)]==""} {continue} set MoyenneSimilarite [set TabResidue($Categorie,MoyenneSimilarite)] set MoyenneIdentite [set TabResidue($Categorie,MoyenneIdentite)] set EcartFredSim [set TabResidue($Categorie,EcartFredSim)] set EcartFredIde [set TabResidue($Categorie,EcartFredIde)] AppendAuFichier $FichierOut "[join [list $Categorie $MoyenneSimilarite $EcartFredSim $MoyenneIdentite $EcartFredIde] "\t"]" } return "" } proc LesResidusDesARPsPourABP {} { set ARPHomeDir "[RepertoireDuGenome]/alignement_ARP" set ABPDir "$ARPHomeDir/Resultat/signature/ABP_residues" set MSF "$ARPHomeDir/Resultat/alignement/Actin_Complet5_0.rsf" set LesFichierABP [glob -nocomplain -directory "$ABPDir" "*.res"] foreach F $LesFichierABP { Espionne "$F" set FOut "Les[file tail $F]" regsub ".res$" $FOut "Fout" #Espionne "LesResidusDesARPs $MSF $F $FOut" LesResidusDesARPs $MSF $F $FOut } return "" } proc LesResidusDiscriminantsDesARPs {{FichierMSF ""} {LesFichiersPos ""} {FichierOut ""}} { Wup "Permet de rendre les residus discriminants et les positions relatives" #Utilisation du programme de Julie qui permet de transcrire les positions, dans un alignement par rapport a une #sequence de reference, en position equivalentes dans plusieurs autres sequences #Format d entree du fichier #1ere ligne Seq de ref (P02568) #2eme ligne les positions separees par des blancs (1 34 546 21 ...) #ligne suivante un nom de sequence par ligne #/home/julie/bin/aln_pos Actin_Complet3_1_Propre.rsf ARP8_signature set ARPHomeDir "[RepertoireDuGenome]/alignement_ARP/" set Aln_Pos "/home/julie/bin/aln_pos" if {$FichierMSF==""} { set FichierMSF "$ARPHomeDir/Actin_Complet3_8.rsf" } #Fichier contenant les positions importantes pour le binding au nucleotide (ATP/ATP) if {$FichierOut==""} { set FichierOut "$ARPHomeDir/Residue/LesARPs_signature.res" } #Lecture du fichier contenant les positions a recherchees #set LesFichiersPos [glob -nocomplain -directory "$ARPHomeDir/Residue" "ARP*_signature"] if {$LesFichiersPos==""} { set LesFichiersPos [glob -nocomplain -directory "$ARPHomeDir/Residue" "ARP*_signature.res"] } Espionne "$LesFichiersPos" foreach FichierPos $LesFichiersPos { if {[file size $FichierPos]=="0"} {continue} AppendAuFichier $FichierOut [file tail $FichierPos] set Reference "" set LesPos "" set i 0 set F [open "$FichierPos"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {$i=="1"} { set Reference [lindex $Ligne 0] continue } if {$i=="2"} { set LesPos [split [string trim $Ligne] " "] break } } close $F set LaReference [join [linsert $LesPos 0 $Reference] "\t"] #Espionne "$LaReference" AppendAuFichier $FichierOut $LaReference set LesResidus "" set Result "" if {[catch {set LesResidus [exec $Aln_Pos $FichierMSF $FichierPos]} Message]} { Espionne "pb $Message" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } } } return "" } proc LesResidusIdentiques {SeqA SeqB} { Wup "Retourne le nombre de residus identiques entre 2 sequence par rapport a la premiere" Wup "Output liste: NbIdentique NbResidus Pourcent" set i -1 set NbId 0 set Total [string length $SeqA] foreach C [split $SeqA ""] { incr i set NbId [expr $NbId + [string equal $C [string index $SeqB $i]]] } set Pourcent [format "%.2f" [expr (($NbId*1.0)/$Total)*100.0]] return [list $NbId $Total $Pourcent] } proc LesResidusNtBindingsDesARPs {{FichierMSF ""} {FichierPosNtB ""} {FichierOut ""}} { set ARPHomeDir "[RepertoireDuGenome]/alignement_ARP/" if {$FichierMSF==""} { set FichierMSF "$ARPHomeDir/Actin_Complet3_1_Propre.rsf" } #Lecture du fichier contenant les positions a recherchees if {$FichierPosNtB==""} { set FichierPosNtB "$ARPHomeDir/Residue/ARP_ntbinding_all" } set FichierOut "$ARPHomeDir/Residue/LesARPs_ntbinding_all" LesResidusDesARPs $FichierMSF $FichierPosNtB $FichierOut return "" } proc LesResidusSimilaires {SeqA SeqB} { Wup "Retourne le nombre de residus similaires entre 2 sequence par rapport a la premiere" Wup "Output liste: NbSimilaire NbResidus Pourcent" set i -1 set NbS 0 set Total [string length $SeqA] foreach C [split $SeqA ""] { incr i set NbS [expr $NbS + [EstSimilaire $C [string index $SeqB $i]]] } set Pourcent [format "%.2f" [expr (($NbS*1.0)/$Total)*100.0]] return [list $NbS $Total $Pourcent] } proc LesResultatsARPAnalyses {args} { Wup "Permet de gerer et stocker les parametres et les resultats de la recherche des familles d ARPs" #Utilisation Qui ValeurOuNon Quoi #Valeur pour Quoi: #Positionne Positionne le parametre a la valeur #Ajoute Ajoute ou positionne le parametre si il n existe pas #Existe Retourne 1 si la valeur existe ou 0 sinon #LaValeurMerci Retourne la valeur du parametre ou vide sinon #Reset Positionne la valeur a vide #UnsetAll Efface tout #Particulier: #Qui=all Retourne toutes les valeurs du tableau #Qui=UnsetAll Vide le tableau en entier #Quoi=Reset et Valeur=all Supprime toutes les entrees de Qui (Ex:LesZones*) global ResultsARPAnalyses set Qui [lindex $args 0] if { $Qui==""} { return "" } elseif {$Qui=="all"} { if {[info exists ResultsARPAnalyses]} {return [array get ResultsARPAnalyses]} } elseif {$Qui=="UnsetAll"} { array unset ResultsARPAnalyses "*" return "" } set NbArgs [llength $args] #Valeur si il y en a une ok sinon c est aussi $Qui set Valeur [lindex $args end-1] set Quoi [lindex $args end] if {$Quoi==""} {set Quoi "LaValeurMerci"} if {$Quoi=="Positionne"} { set ResultsARPAnalyses($Qui) $Valeur return "" } elseif {$Quoi=="Reset"} { if {$Valeur=="all"} { array unset ResultsARPAnalyses "$Qui*" } else { if {[info exists ResultsARPAnalyses($Qui)]} {unset ResultsARPAnalyses($Qui)} } } elseif {$Quoi=="LaValeurMerci"} { if {[info exists ResultsARPAnalyses($Qui)]} {return [set ResultsARPAnalyses($Qui)]} else {return ""} } elseif {$Quoi=="Ajoute"} { lappend ResultsARPAnalyses($Qui) $Valeur } elseif {$Quoi=="Existe"} { if {[info exists ResultsARPAnalyses($Qui)]} {return 1} else {return 0} } return "" } proc LesResultatsGCCount {} { Wup "Permet de rendre les resultats du best GC sous forme de liste" global TabDesGCs if {! [info exists TabDesGCs]} {return ""} set LesResultats [array get TabDesGCs] return $LesResultats } proc LesResultatsTmCount {} { Wup "Permet de rendre les resultats du best Tm sous forme de liste" global TabDesTms if {! [info exists TabDesTms]} {return ""} set LesResultats [array get TabDesTms] return $LesResultats } proc LesRetChip {{LesChamps ""} {JoinCar ""}} { if {$JoinCar==""} { set JoinCar " " } if {$JoinCar=="WithoutJoinCar"} { set JoinCar "" } if {$LesChamps==""} { set LesChamps [list "Nom"] } set LesRetChip {} foreach Nom [ListeDesPABs] { set RetChip [ExtraitInfo $Nom "RetChip"] if { ! [regexp -nocase "^y" $RetChip]} { continue } set LesInfos {} foreach Champ $LesChamps { lappend LesInfos [ExtraitInfo $Nom $Champ] } set Infos [join $LesInfos $JoinCar] lappend LesRetChip $Infos } return $LesRetChip } proc LesRetChipAcCoordHumaines {} { set nb 0; set vide 0 foreach PAB [ListeDesPABs] { set Rc [ExtraitInfo $PAB "RetChip"] if {$Rc=="yes"} { incr nb; set LesLoc {}; set LesLignes {} set GnM1 [ExtraitInfo $PAB "ValiGN"] #set GnM2 [ExtraitInfo $PAB "ValiGNProt"] set GnH1 [HumanFromMouse $GnM1 Approved_Symbol] #set GnH2 [HumanFromMouse $GnM2 Approved_Symbol] Espionne "" Espionne "$PAB $Rc" #if {$GnM1!="" && $GnM2!="" && $GnM1!=$GnM2} {Espionne "attention mouse different"} #if {$GnH1!="" && $GnH2!="" && $GnH1!=$GnH2} {Espionne "attention human different"} Espionne "Mouse $GnM1" Espionne "Human $GnH1" if {$GnH1==""} { incr vide Espionne "vide" set LigneDef "$GnM1;vide;vide" lappend LesLignesDef $LigneDef } else { lappend LesLignes "ID * DB UCSC" lappend LesLignes "WH SQLNATIVE SELECT chrom, strand, txStart, txEnd from ucschuman.pureGene WHERE name2='$GnH1'" lappend LesLignes "FM FLAT" set FileBql "/tmp/toto.bql" set FileRes "/tmp/toto.res" SauveLesLignes $LesLignes dans $FileBql BirdForceHoan $FileBql $FileRes foreach Ligne [LesLignesDuFichier $FileRes] { if {[regexp {^Query} $Ligne]} {continue} if {[regexp {^EMPTY} $Ligne]} { set Loc "vide" lappend LesLoc $Loc } else { set LesMots [split $Ligne "|"] set Chr [lindex $LesMots 0] set Strand [lindex $LesMots 1] set Start [lindex $LesMots 2] set Stop [lindex $LesMots 3] set Loc "${Chr}:${Start}:${Stop}:${Strand}" lappend LesLoc $Loc } } set LesLoc [ListeSansDoublon $LesLoc] foreach LaLoc $LesLoc { set LesMorceaux [split $LaLoc ":"] set Chr [lindex $LesMorceaux 0] set Deb [lindex $LesMorceaux 1] set Fin [lindex $LesMorceaux 2] set Sen [lindex $LesMorceaux 3] set LigneDef "$GnM1;$GnH1;$Chr;$Deb;$Fin;$Sen" lappend LesLignesDef $LigneDef } EspionneL "$LesLoc" file delete $FileBql file delete $FileRes } } } Espionne "$nb" Espionne "$vide" SauveLesLignes $LesLignesDef dans "/genomics/link/EVImm/Les1500AcHumanLoc" } proc LesRetChipAcCoordHumaines2 {} { set nb 0; set vide 0 foreach PAB [ListeDesPABs] { set Rc [ExtraitInfo $PAB "RetChip"] if {$Rc=="yes"} { incr nb set GnM1 [ExtraitInfo $PAB "ValiGN"] set GnH1 [HumanFromMouse $GnM1 Approved_Symbol] Espionne "" Espionne "$PAB $Rc" Espionne "Mouse $GnM1" Espionne "Human $GnH1" if {$GnH1!=""} { } } } } proc LesRetNetDeLaRegion {Chrom Debut Fin} { ##pour sortie voir InterrogeRetNet set Chrom [NumeroDuChromosome $Chrom] set LesRetNet {} foreach RetNet [lsort -unique [InterrogeRetNet LesRetNet]] { foreach LInfo [InterrogeRetNet RetNet $RetNet LesInfos ] { set Chromosome [lindex $LInfo 1] if {$Chromosome != $Chrom} {continue} set LesBornes [lindex $LInfo 2] set D [lindex $LesBornes 0] set F [lindex $LesBornes 1] if {![CesRegionsSontEllesOverlappantes $Debut $Fin $D $F]} {continue} lappend LesRetNet $LInfo } } return $LesRetNet } proc LesRetinalFate {} { set retinalfate 0; set LesGns {} set LesLignesExl [NomLigne ListeDes Lignes] set nblignesExl 0 foreach LigneExl $LesLignesExl { incr nblignesExl set ListeDesNoms {}; set BonneListeDesNoms {} set TousLesNoms [NomLigne $LigneExl Noms] set ListeDesNoms [split $TousLesNoms " "] set NbDeNomPrUneLigne [llength $ListeDesNoms] if {[llength $ListeDesNoms]==1} { set BonneListeDesNoms $ListeDesNoms } if {[llength $ListeDesNoms]>1} { set BonneListeDesNoms [split [RangeMoi get EviOf $LigneExl] " "] } foreach Nom $BonneListeDesNoms { set trouve 0 set Status [ExtraitInfo $Nom "Status"] set StatusCompOpt [string range $Status 0 [expr [string first "\(" $Status] - 1]] if {$StatusCompOpt=="optional"} {continue} set LesElmt [split $Status "\(\),"] foreach elmt $LesElmt { if {$elmt=="retinal_fate"} {set trouve 1} } if {!$trouve} {continue} set IdAccProt [ExtraitInfo $Nom "IdAccProt"] set LesProt [split $IdAccProt " "] set AccProt [lindex $LesProt 1] #Espionne "$LigneExl $BonneListeDesNoms" Espionne "$Nom $AccProt" } } } proc LesSamplesRetinobase {} { CanalSqlBioArrayBase set Ligne "e.pk_experiment,e.description,s.pk_sample,s.samplename,s.description_sample,s.noofreplicates" lappend LesLignes $Ligne foreach {PkEx DesEx PkSa NaSa DesSa ReplSa} [SqlExec "select distinct e.pk_experiment,e.description,s.pk_sample,s.samplename,s.description_sample,s.noofreplicates from retinobase3.experiment e,retinobase3.realexp r,retinobase3.sample s where e.pk_experiment=r.pk_experiment and r.pk_sample=s.pk_sample order by e.pk_experiment,s.pk_sample;" "GetList"] { set Ligne "$PkEx;$DesEx;$PkSa;$NaSa;$DesSa;$ReplSa" lappend LesLignes $Ligne } CanalSqlDisconnect EspionneL $LesLignes SauveLesLignes $LesLignes dans "/home/poidevin/ordi/Transcriptomique/LesSamplesRetinobase.csv" } proc LesScientistsDeDidier {} { foreach VE [VEDidier ListeDes VE] { set S [VEDidier $VE Scientist] if { ! [info exists NbVE($S)]} {set NbVE($S) 0 } incr NbVE($S) } set LesScientists [lsort [array names NbVE]] return $LesScientists } proc LesScoreImproved {} { global RepertoireDuGenome set RascalDir "$RepertoireDuGenome/msfrascal" set Destination "$RepertoireDuGenome/msfrascal/results.test" set LesRascal [glob -nocomplain "$RascalDir/*"] set ListeASauver "" set NbRascal 0 set NbRascalImproved 0 foreach msf $LesRascal { incr NbRascal foreach ligne [LesLignesDuFichier $msf] { #if {![regexp -nocase {[0-9]+} $ligne] && ![regexp -nocase {[a-z]+} $ligne]} {continue} if {[regexp "improved NorMD from" $ligne]} { set LigneMD [StringSuivant "improved NorMD from" dans $ligne] Espionne $LigneMD scan $LigneMD "%s %s %s" MDold to MDnew if {[expr $MDold<$MDnew]} { set LaLigne "[file tail $msf] $MDold $MDnew" lappend ListeASauver $LaLigne incr NbRascalImproved } } } } set PercentRascal [expr $NbRascalImproved/$NbRascal*100] lappend ListeASauver "NbRascal $NbRascal \nNbRascal improved $NbRascalImproved $PercentRascal %" return "[SauveLesLignes $ListeASauver dans $Destination]" } proc LesScoresMaxPourTousLesChromosomes {{NbVoisins 6}} { foreach Chro [ListeDesChromosomesHS] { set ScoreMax [ScoreMaxChro $Chro $NbVoisins] lappend Liste "$Chro $ScoreMax" } set ListeTriee [lsort -increasing -integer -index 1 $Liste] return $ListeTriee } proc LesSeqTFADesVariants {Access {AvecOuSansSeqIni Sans}} { #Entree : Access = Access ou Id d'une proteine # AvecOuSansSeqIni = "Avec" ou "Sans" la sequence initiale de l'id avec les variants #Sortie : Les seq TFA de tous les variants d'un access #La banque s'appellera VARSPLIC set NomBanque "VARSPLIC" #J'extrait la sequence TFA de l'access avec getz set SeqTFA [PageInfo $Access protein seq] #Si je ne trouve pas la seq, l'id n'existe donc pas (c'est quand meme bien fait getz) if {$SeqTFA == ""} {return} #Je transforme la sequence TFA en sequence lineaire (c'est plus fstoche a travailler) set SeqIni [QueLaSequenceDuTexteTFA $SeqTFA] set Length [string length $SeqIni] set LesSeqTFA {} #Appelle "LesSpliceVariants" qui retourne les infos de tous les variants sous la forme d'une liste de liste #Pour chacun de ces variants foreach UnVariant [LesSpliceVariantsDeLAccess $Access] { Espionne $UnVariant set IdDuVariant [lindex $UnVariant 0] set AccessDuVariant [lindex $UnVariant 1] set Definition [lindex $UnVariant 2] set Quoi [lindex $UnVariant 3] #Selon "AvecOuSansSeqIni" je garde ou j'elimine la sequence initiale if {$Quoi == "INITIAL"} { if {[string equal -nocase $AvecOuSansSeqIni "Sans"]} {continue} set Seq $SeqIni } else { #Si je suis sur un variant jessaie de reconstruire sa sequence a partir des informations extraites de la PageInfo ("LesSpliceVariantsDeLAccess") #Je decompose toutes les regions de la seq ini (c'est a dire les regions ou il ne se passe rien ; ou il y a un remplacement de sequence ; ou il y a une suppression de cette region set ToutesLesRegions {} foreach LeVSP [lrange $UnVariant 3 end] { set VSP [lindex $LeVSP 0] set D [lindex $LeVSP 1] set F [lindex $LeVSP 2] lappend ToutesLesRegions [list $D $F $Length] set Tab($D,$F) $LeVSP } foreach LaRegion [LesRegionsVidesDeLaListe $ToutesLesRegions $Length] {lappend ToutesLesRegions $LaRegion} set Seq "" #Je reconstruis ma sequence en traitant chaque region individuellement dans l'ordre ##WARNING ca ne peut pas marcher si les regions des variants sont overlappants (ce qui ne doit pas arriver) foreach LaRegion [lsort -index 0 -real $ToutesLesRegions] { set D [lindex $LaRegion 0] set F [lindex $LaRegion 1] if {![info exists Tab($D,$F)]} { append Seq [string range $SeqIni [expr $D-1] [expr $F-1]] continue } set LeVSP [set Tab($D,$F)] append Seq [lindex $LeVSP end] } } #Je rajoute la sequence au format TFA dans la liste a retourner avec comme entete : ">Banque:ID Access Description" lappend LesSeqTFA [SequenceFormatTFA $Seq "${NomBanque}:${IdDuVariant} ${AccessDuVariant} ${Definition}"] } #Je retourne toutes les seq TFA return $LesSeqTFA } proc LesSeqTFAsDesBanqueId {LesBanqueId Banque {Organism ""} {AvecFragment 1}} { ###Extraction des sequences tfa a partir des Id du blast### set Commande "[ProgPathway getz] \"" set i 0 set LesBID {} foreach BID [ElimineLesRedondancesDansUneListe $LesBanqueId] { regsub {^[^:]+:} $BID "" BID lappend LesBID [string toupper $BID] } if {$LesBID == {}} {return} set BID [join $LesBID "|"] regsub "\\\|" $BID "\|" BID append Commande "\\\[$Banque-id:$BID\\\]" if {!$AvecFragment} { append Commande " ! \\\[$Banque-des:\(fragment\)\\\]" } if {$Organism != ""} { append Commande " \& \\\[$Banque-org:$Organism\\\] \" -f seq -sf fasta" } else { append Commande "\" -f seq -sf fasta" } set SeqTFAs "" catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {set SeqTFAs $GetzOut} set LesSeqTFAs {} set LaSeqTFAEnCours {} foreach Ligne [split $SeqTFAs "\n"] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {[regexp "^>" $Ligne]} { if {$LaSeqTFAEnCours != {}} {lappend LesSeqTFAs [join $LaSeqTFAEnCours "\n"]} set LaSeqTFAEnCours {} } lappend LaSeqTFAEnCours $Ligne } if {$LaSeqTFAEnCours != {}} {lappend LesSeqTFAs [join $LaSeqTFAEnCours "\n"]} foreach TFA $LesSeqTFAs { scan $TFA ">%s" BID set BID [string toupper $BID] set TabSeq($BID,SeqTFA) $TFA } set LesSeqTFAs {} foreach BID $LesBID { if {![info exists TabSeq($BID,SeqTFA)]} {continue} lappend LesSeqTFAs [set TabSeq($BID,SeqTFA)] } return $LesSeqTFAs } proc LesSeqTFAsDesBanqueId_old {LesBanqueId Banque {Organism ""} {AvecFragment 1}} { ###Extraction des sequences tfa a partir des Id du blast### set Commande "[ProgPathway getz] \"" set i 0 set LesBID [ElimineLesRedondancesDansUneListe $LesBanqueId] if {$LesBID == {}} {return} set BID [join $LesBID "|"] regsub "\\\|" $BID "\|" BID append Commande "\\\[$Banque-id:$BID\\\]" if {!$AvecFragment} { append Commande " ! \\\[$Banque-des:\(fragment\)\\\]" } if {$Organism != ""} { append Commande " \& \\\[$Banque-org:$Organism\\\] \" -f seq -sf fasta" } else { append Commande "\" -f seq -sf fasta" } set SeqTFAs "" catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {set SeqTFAs $GetzOut} set LesSeqTFAs {} set LaSeqTFAEnCours {} foreach Ligne [split $SeqTFAs "\n"] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {[regexp "^>" $Ligne]} { if {$LaSeqTFAEnCours != {}} {lappend LesSeqTFAs [join $LaSeqTFAEnCours "\n"]} set LaSeqTFAEnCours {} } lappend LaSeqTFAEnCours $Ligne } if {$LaSeqTFAEnCours != {}} {lappend LesSeqTFAs [join $LaSeqTFAEnCours "\n"]} foreach TFA $LesSeqTFAs { scan $TFA ">%s" BId set TabSeq($BId,SeqTFA) $TFA } set LesSeqTFAs {} foreach BId $LesBanqueId { if {![info exists TabSeq($BId,SeqTFA)]} {continue} lappend LesSeqTFAs [set TabSeq($BId,SeqTFA)] } return $LesSeqTFAs } proc LesSeqTFAsDuBlast {FichierBlast Banque {Expect 1e200} {NbSubject 1e200} {Organism ""}} { set LesBId [LesBanqueIdDuBlast $FichierBlast $Expect $NbSubject] return [LesSeqTFAsDesBanqueId $LesBId $Banque $Organism] } proc LesSeqnamesDuCluster {c} { return [$::db eval {select sa.seqname from seqali as sa, ln_seqali_cluster as lsc where lsc.pk_cluster=$c and lsc.pk_seqali=sa.pk_seqali order by lsc.pos}] } proc LesSeqnamesDuMac {{m 0}} { if {! $m} {set m [MacCourant]} return [$::db eval {select sa.seqname from seqali as sa, ln_mac_seqali as lms where lms.pk_mac=$m and lms.pk_seqali=sa.pk_seqali order by lms.pos}] } proc LesSeqsDesSeqsSel {} { set Ls {} if {[QuelMode] eq "seqlab"} { set LSeqs [$::NomTextSeq output all] } else { set LSeqs $::LSOrdali } foreach e $::NomSeqSel { lassign [split $e .] y x incr y -1 set seq [lindex $LSeqs $y] set tmp [string map [list "." "" " " ""] $seq] if {$tmp eq ""} {continue} lappend Ls $seq } return $Ls } proc LesSequencesDeLeveillard {Fichier FichierOut} { set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set UnGI "" scan $Ligne "%s" UnGI if {$UnGI==""} {continue} lappend LesGI $UnGI } close $F foreach GI $LesGI { set Sequence "" Espionne "$GI" set Sequence [string trim [NCBI $GI protein]] AppendAuFichier $FichierOut $Sequence } return "" } proc LesSequencesDesARPsManquantes {} { Wup "Permet de recuperer les sequences non presentes dans les alignements originaux" Wup "Cherche dans les blastPs" global AccessARP ChargeLesAccessDesARPsDejaPresents set RepBlastARP "[RepertoireDuGenome]/blastp" foreach PAB [ListeDesPABs] { set FichierBlastP "$RepBlastARP/$PAB" set NbEnPlus 0 set NbSubject [AskBlast $FichierBlastP NbSubject] for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlastP Subject $i] set Access [string toupper [AskBlast $FichierBlastP BanqueId $BId Access]] #Espionne "$BId $Access" if {[info exists AccessARP($Access)]} { continue } else { incr NbEnPlus lappend LesNouveauxAccess $Access set AccessARP($Access) 1 } } Espionne "$PAB en ajoute $NbEnPlus" #set Access [AskBlast $FichierBlastP BanqueId $BId Access] AskBlast unset } Espionne "Nombre d access [llength $LesNouveauxAccess]" Espionne "$LesNouveauxAccess" set LesAccessGetz [join $LesNouveauxAccess "|"] set Banques "protein" set option "-view FastaSeqs" set Typ1 "id" set Typ2 "acc" set Commande "getz $option \" (\\\[$Banques-$Typ1: $LesAccessGetz\\\] | \\\[$Banques-$Typ2: $LesAccessGetz\\\]) ! \\\[$Banques-des:fragment|fragments\\\]\"" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {return ""} if {$GetzOut=={}} {return ""} set LesAccess "" regsub -all {\>protein\|} $GetzOut ">" GetzOut foreach Ligne [split $GetzOut "\n"] { if {[regexp ">" $Ligne]} { regsub {\|[A-Z0-9_]+ } $Ligne " " Ligne } lappend LesAccess $Ligne } #Espionne "[join $LesAccess "\n"]" AppendAuFichier $FichierSave "[join $LesAccess "\n"]" return "" } proc LesSequencesDesClassificationsEtOrganismesDuMacsims {Nom ListeDeSequences A} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" set Liste {} ParseMACSIMS $Fichier macsims foreach Sequence $ListeDeSequences { if {$Sequence == "$Nom"} {continue} set Classification $macsims($Sequence,Classification) set Organisme $macsims($Sequence,Organisme) set TaxonomyComplete "$Classification $Organisme" if {[regexp -nocase $A $TaxonomyComplete]} { lappend Liste "$Sequence $Classification $Organisme" } } Espionne $Liste return $Liste } proc LesSequencesDesDomainesDeLaVieDuMacsims {Nom} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" set Liste {} ParseMACSIMS $Fichier macsims set LesNomsSequences $macsims(Noms) foreach Sequence $LesNomsSequences { Espionne $Sequence set DomaineDeLaVie $macsims($Sequence,DomaineDeLaVie) lappend Liste "$Sequence $DomaineDeLaVie" } return $Liste } proc LesSequencesDesVariantsDeLaProteine {Access {Quoi Sequence}} { Wup "Permet de recuperer une liste de sequence au format fasta de tous les variants de splicing de Access" global TabVariant if {[info exists TabVariant($Access,$Quoi)]} { return "[set TabVariant($Access,$Quoi)]" } else { if {[info exists TabVariant]} {unset TabVariant} } set Banques "protein" set Link "varsplic" set Type [list "acc" "id"] set OnARien 0 foreach Typ $Type { set Commande "getz -e \"\\\[$Banques-$Typ: $Access\\\] > $Link \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$OnARien==0 && $GetzOut == ""} { set OnARien 0 continue } else { set OnARien 0 set OnEnAUn 0 set UneSeq "" set LesSequences [split $GetzOut "\n"] foreach Ligne $LesSequences { if {$Ligne==""} {continue} if {[string range $Ligne 0 0] != ">" && $OnEnAUn==1} {lappend UneSeq $Ligne} if {[string range $Ligne 0 0] == ">"} { if {$OnEnAUn=="1"} { set OnEnAUn 0 lappend TabVariant($Access,Sequence) [join $UneSeq "\n"] set UneSeq "" } lappend UneSeq $Ligne set OnEnAUn 1 continue } } break } } return "[LesVariantsDeLaProteine $Access $Quoi]" } proc LesSequencesDuFichier {Fichier Rep} { if {![file exists $Fichier]} {return ""} set Keep 0 if {[OuiOuNon "Would you want to keep the sequence in this directory?"]} {set Keep 1} set LesAccess [ElimineLesRedondancesDansUneListe [LesAccessDuFichier $Fichier]] set LesSequences {} foreach LAccess $LesAccess { set Access [lindex $LAccess 0] if {$Keep && [file exists "$Rep/${Access}.tfa"]} {continue} set Type [lindex $LAccess 1] Espionne "$Access\t$Type" set Sequence "" set Entete "$Access" if {$Type == "genembl"} { set Entete "$Access" set Sequence [SequenceAcNuc $Access] if {$Sequence == ""} { set Entete "$Access from NCBI" set Sequence [SequenceDuNCBI $Access nucleotide] } } if {$Type == "ncbi"} { set Entete "$Access from NCBI" set Sequence [SequenceDuNCBI $Access nucleotide] } if {$Type == "protein"} { set AccessmRNA [LemRNADeLAccessProt $Access] if {$AccessmRNA == ""} { Espionne "$Access does not have an Access of mRNA referenced" set LesAcNucs [LesAcNucsDeLaAccess $Access] if {$LesAcNucs != {}} {set AccessmRNA [lindex $LesAcNucs 0]} } set Entete "$AccessmRNA from $Access" set Sequence [SequenceAcNuc $AccessmRNA] if {$Sequence == ""} { set Entete "$AccessmRNA from NCBI from $Access" set Sequence [SequenceDuNCBI $AccessmRNA nucleotide] } } if {$Sequence == ""} {append Entete " not found"} set SeqTFA [SequenceFormatTFA $Sequence $Entete] Espionne "$SeqTFA" Sauve $SeqTFA dans "$Rep/${Access}.tfa" lappend LesSequences $SeqTFA } #Espionne "Nb Access theorique [llength $LesAccess]" return $LesSequences } proc LesSequencesDuGroupeMacsims {Nom {AvecOuSansOrganismeEtudie ""}} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" if {! [file exists $Fichier]} {return} ParseMACSIMS $Fichier macsims set SequencesDuGroupe $macsims(Groupe,$macsims($Nom,Groupe)) regsub "$Nom " $SequencesDuGroupe "" SequencesDuGroupe regsub "$Nom" $SequencesDuGroupe "" SequencesDuGroupe set SequencesDuGroupe "$Nom $SequencesDuGroupe" if {$AvecOuSansOrganismeEtudie == "Sans"} { set SequencesDuGroupeSansMonOrganisme [EnleveLaSequenceDeMonOrganisme $Nom $SequencesDuGroupe] return $SequencesDuGroupeSansMonOrganisme } return $SequencesDuGroupe } proc LesSequencesDuMac {{m 0}} { if {! $m} {set m [MacCourant]} return [$::db eval {select sa.seq from seqali as sa, ln_mac_seqali as lms where lms.pk_mac=$m and lms.pk_seqali=sa.pk_seqali}] } proc LesSequencesDuMac_VOIR_PLUS_LOIN_1 {{m 0}} { if {! $m} {set m [MacCourant]} return [$::db eval {select sa.seq from seqali as sa, cluster as c, ln_seqali_cluster as lsc, clustering as g where g.pk_mac=$m and g.pk_clustering=c.pk_clustering and c.pk_cluster=lsc.pk_cluster and lsc.pk_seqali=sa.pk_seqali}] } proc LesSequencesDuMac_VOIR_PLUS_LOIN_2 {{m 0}} { if {! $m} {set m [MacCourant]} return [$::db eval {select sa.seq from seqali as sa, ln_mac_seqali as lms where lms.pk_mac=$m AND lms.pk_seqali=sa.pk_seqali order by lms.pos}] } proc LesSequencesInactives {} { set Lv [$::db eval {select pk_seqali from ln_vis_seqali where pk_vis=$pk_vis}] set La [$::db eval {select las.pk_seqali from ln_active_seqali as las, active as ac where ac.pk_vis=$pk_vis and ac.pk_active=las.pk_active order by las.pos}] set Li [lor $Lv $La] return [LesAccessDesSeqali $Li] } proc LesSequencesIssuesDeLaSequenceSplitee {FichierTFA {Liste ""}} { if {![file exists $FichierTFA]} { Espionne "No File for $Fichier" return "$Liste" } set RepTFA [file dirname $FichierTFA] set NomFichierTFA [file tail $FichierTFA] regsub ".tfa" $NomFichierTFA "" Id set EnteteTFA [PremiereLigneDuFichier $FichierTFA] if {[regexp "split into" $EnteteTFA]} { regsub ">$Id " $EnteteTFA "" EnteteTFA regsub "split into" $EnteteTFA "" EnteteTFA regsub "$Id" $EnteteTFA "" EnteteTFA while {[regexp "(TC\[0-9]*)" $EnteteTFA]} { regexp "(TC\[0-9]*)" $EnteteTFA tmp NewId regsub "$NewId" $EnteteTFA "" EnteteTFA set NewFichierTFA "$RepTFA/$NewId.tfa" set Liste [LesSequencesIssuesDeLaSequenceSplitee $NewFichierTFA $Liste] } } elseif {[regexp "found" $EnteteTFA] } { return $Liste } else { lappend Liste $Id } set Liste [ElimineLesRedondancesDansUneListe $Liste] return $Liste } proc LesSequencesSansProteineIdentifiee {} { #fichier=/fiches/ListeDesCourtsEtDesSansTriee #fichier regroupe les pabs qui sont courts (...) #et qui n'ont ni loc ni mrna ni prot ni est (voir plus bas) set Fichier "/genomics/link/HeadNecknonrnr/fiches/ListeDesCourtsEtDesSansTriee" set n 0 foreach Ligne [LesLignesDuFichier $Fichier] { set DD [lindex $Ligne 0] set Vu($DD) 1 incr n } #la liste des pabs contient 2469 pabs foreach PAB [ListeDesPABs] { if {![info exists Vu($PAB)]} { set FichierProttfa "/genomics/link/HeadNecknonrnr/prottfa/$PAB" if {![file exists $FichierProttfa] || ([file exists $FichierProttfa] && [regexp -nocase "from contig" [EnteteDuFichierTFA $FichierProttfa]])} { lappend Liste $PAB } } } #supprimer les jumeaux seq (au moins!) foreach Nom $Liste { if {[JumeauRepresentatif $Nom]==$Nom || [JumeauRepresentatif $Nom]==""} { lappend ListeSansJumeaux $Nom } } Espionne [llength $ListeSansJumeaux] SauveLesLignes $ListeSansJumeaux dans "/genomics/link/HeadNecknonrnr/fiches/ListeDesSansProtSansJumeaux" } proc LesSequences_UMCU {} { Wup "Permet de rechercher les sequences disponibles sur la puce UMCU a partir des access fournis par UMCU et SRS" Wup "Creation de 2 fichiers, un pour les Genbank et un pour les RefSeq" Wup "Il faut encore verifier la redondance des RefSeq (proc EnleveRedondanceRefSeq_UMCU)" #1 On recupere la liste des access de sequences disponibles sur la puce UMCU ############################################################################ #set LesAccess [InterrogeLesInfosUMCU "[RepertoireDuGenome]/UMCU-H25k11.txt" LesAccess] set LesRefSeq [InterrogeLesInfosUMCU "[RepertoireDuGenome]/UMCU-H25k11.txt" LesAccRefSeq] set LesGenbank [InterrogeLesInfosUMCU "[RepertoireDuGenome]/UMCU-H25k11.txt" LesAccGenbank] #2 On cherche les Genbank ######################### Espionne "Searching Genbank ... need to find [llength $LesGenbank] sequences." set FileGenbank "[RepertoireDuGenome]/UMCU_Genbank.tfa" if {[file exists $FileGenbank]} { Espionne "Genbank already done." } else { set NbFound 0 set size [expr [llength $LesGenbank] + 101] for {set i 0} {$i<$size} {incr i 100} { set LesAccessTmp "" set LesAcc "" set LesAccessTmp [lrange $LesGenbank $i [expr $i+99]] set LesAcc [join $LesAccessTmp "|"] #Espionne "$LesAcc" set Banques "genbank" set option "-view FastaSeqs" set Typ1 "acc" set Typ2 "id" set Commande "getz $option \"\\\[$Banques-$Typ1: $LesAcc\\\] | \\\[$Banques-$Typ2: $LesAcc\\\]\"" #Espionne "$Commande" catch {unset GetzOut} set GetzOut "" catch {set GetzOut [eval exec $Commande]} Message set NbFound_Tmp 0 set NbFound_Tmp [regexp -all ">" $GetzOut] set NbFound [expr $NbFound + $NbFound_Tmp] AppendAuFichier $FileGenbank "$GetzOut" #Espionne "$GetzOut" } Espionne "found $NbFound ... Genbank done." } #3 On cherche les RefSeq ######################## Espionne "Searching RefSeq ... need to find [llength $LesRefSeq] sequences." set FileRefSeq "[RepertoireDuGenome]/UMCU_RefSeq.tfa" if {[file exists $FileRefSeq]} { Espionne "RefSeq already done." } else { set NbFound 0 set size [expr [llength $LesRefSeq] + 101] for {set i 0} {$i<$size} {incr i 100} { set LesAccessTmp "" set LesAcc "" set LesAccessTmp [lrange $LesRefSeq $i [expr $i+99]] set LesAcc [join $LesAccessTmp "|"] set Banques "refseq" set option "-view FastaSeqs" set Typ1 "acc" set Typ2 "id" set Commande "getz $option \"\\\[$Banques-$Typ1: $LesAcc\\\] | \\\[$Banques-$Typ2: $LesAcc\\\]\"" #Espionne "$Commande" catch {unset GetzOut} set GetzOut "" if {[catch {set GetzOut [eval exec $Commande]} Message]} {Espionne "$Message"} set NbFound_Tmp 0 set NbFound_Tmp [regexp -all ">" $GetzOut] set NbFound [expr $NbFound + $NbFound_Tmp] AppendAuFichier $FileRefSeq "$GetzOut" #Espionne "$GetzOut" } Espionne "found $NbFound ... RefSeq done." } return "" } proc LesSeriesDeNResidues {NombreTotal NombreParSeries} { set NbSeries [expr int($NombreTotal * 1.0 / $NombreParSeries)] set Mod [expr $NombreTotal % $NombreParSeries] set LesSeries {} for {set i 0} {$i < $NbSeries} {incr i} { set D [expr $NombreParSeries * $i + 1] set F [expr $D + $NombreParSeries - 1 ] lappend LesSeries [list $D $F] } if {$Mod != 0} { set D [expr $NombreParSeries * $NbSeries + 1] set F [expr $D + $Mod - 1] lappend LesSeries [list $D $F] } return $LesSeries } proc LesServeursWscopeQuiTournent {{Genome ""}} { set PS [eval exec ps -ef] set Sortie {} foreach Ligne [split $PS "\n"] { if {[regexp "gscope ToujoursFaire $Genome" $Ligne]} { lappend Sortie $Ligne } } return $Sortie } proc LesSeuilsAC {{QueVeutOn ""}} { global LesSeuilsAC LesSeuilsACCoul LesSeuilsACSign if { ! [info exists LesSeuilsAC]} { set ACLaListe [AnchorsCount "LaListeMerci"] scan [MoyenneEcartMinMaxCumulLong $ACLaListe] "%f %f %d %d" Mo Ec Mi Ma lappend LesSeuilsAC [format "%4.1f" [Maxi 1.0 [expr $Mo-2*$Ec]]] lappend LesSeuilsAC [format "%4.1f" [Maxi 2.0 [expr $Mo-1*$Ec]]] lappend LesSeuilsAC [format "%4.1f" [expr $Mo+1*$Ec]] lappend LesSeuilsAC [format "%4.1f" [expr $Mo+2*$Ec]] lappend LesSeuilsACCoul "red" lappend LesSeuilsACCoul "orange" lappend LesSeuilsACCoul "yellow" lappend LesSeuilsACCoul "green" set i -1 lappend LesSeuilsACSign "AC verylow ( %AC < [lindex $LesSeuilsAC [incr i]])" lappend LesSeuilsACSign "AC low ([lindex $LesSeuilsAC $i] <= %AC < [lindex $LesSeuilsAC [incr i]])" lappend LesSeuilsACSign "AC normal ([lindex $LesSeuilsAC $i] <= %AC < [lindex $LesSeuilsAC [incr i]])" lappend LesSeuilsACSign "AC high ([lindex $LesSeuilsAC $i] <= %AC < [lindex $LesSeuilsAC [incr i]])" lappend LesSeuilsACSign "AC veryhigh ([lindex $LesSeuilsAC $i] <= %AC < [lindex $LesSeuilsAC [incr i]])" } if {$QueVeutOn=="CouleurMerci"} { return $LesSeuilsACCoul } if {$QueVeutOn=="SignificationMerci"} { return $LesSeuilsACSign } return $LesSeuilsAC } proc LesSeuilsCAI {{QueVeutOn ""}} { global LesSeuilsCAI LesSeuilsCAISign if { ! [info exists LesSeuilsCAI]} { set CAILaListe [CAI "LaListeMerci"] scan [MoyenneEcartMinMaxCumulLong $CAILaListe] "%f %f %d %d" Mo Ec Mi Ma lappend LesSeuilsCAI [format "%4.1f" [expr $Mo-2*$Ec]] lappend LesSeuilsCAI [format "%4.1f" [expr $Mo-1*$Ec]] lappend LesSeuilsCAI [format "%4.1f" [expr $Mo+1*$Ec]] lappend LesSeuilsCAI [format "%4.1f" [expr $Mo+2*$Ec]] set i -1 lappend LesSeuilsCAISign "CAI verylow ( CAI < [lindex $LesSeuilsCAI [incr i]])" lappend LesSeuilsCAISign "CAI low ([lindex $LesSeuilsCAI $i] <= CAI < [lindex $LesSeuilsCAI [incr i]])" lappend LesSeuilsCAISign "CAI normal ([lindex $LesSeuilsCAI $i] <= CAI < [lindex $LesSeuilsCAI [incr i]])" lappend LesSeuilsCAISign "CAI high ([lindex $LesSeuilsCAI $i] <= CAI < [lindex $LesSeuilsCAI [incr i]])" lappend LesSeuilsCAISign "CAI veryhigh ([lindex $LesSeuilsCAI $i] <= CAI < [lindex $LesSeuilsCAI [incr i]])" } if {$QueVeutOn=="SignificationMerci"} { return $LesSeuilsCAISign } return $LesSeuilsCAI } proc LesSeuilsGC {{QueVeutOn ""}} { global LesSeuilsGC LesSeuilsGCSign if { ! [info exists LesSeuilsGC]} { set GCLaListe [CompositionEn GC "LaListeMerci"] scan [MoyenneEcartMinMaxCumulLong $GCLaListe] "%f %f %d %d" Mo Ec Mi Ma lappend LesSeuilsGC [format "%4.1f" [expr $Mo-2*$Ec]] lappend LesSeuilsGC [format "%4.1f" [expr $Mo-1*$Ec]] lappend LesSeuilsGC [format "%4.1f" [expr $Mo+1*$Ec]] lappend LesSeuilsGC [format "%4.1f" [expr $Mo+2*$Ec]] set i -1 lappend LesSeuilsGCSign "GC skew verylow ( %GC < [lindex $LesSeuilsGC [incr i]])" lappend LesSeuilsGCSign "GC skew low ([lindex $LesSeuilsGC $i] <= %GC < [lindex $LesSeuilsGC [incr i]])" lappend LesSeuilsGCSign "GC skew normal ([lindex $LesSeuilsGC $i] <= %GC < [lindex $LesSeuilsGC [incr i]])" lappend LesSeuilsGCSign "GC skew high ([lindex $LesSeuilsGC $i] <= %GC < [lindex $LesSeuilsGC [incr i]])" lappend LesSeuilsGCSign "GC skew veryhigh ([lindex $LesSeuilsGC $i] <= %GC < [lindex $LesSeuilsGC [incr i]])" } if {$QueVeutOn=="SignificationMerci"} { return $LesSeuilsGCSign } return $LesSeuilsGC } proc LesSeuilsMDScore {{QueVeutOn SeuilMerci}} { global LesSeuilsMDScore LesSeuilsMDScoreSign LesSeuilsMDScoreCoul if { ! [info exists LesSeuilsMDScore]} { set LesSeuilsMDScore { -999.0 0.0 0.5 0.7 0.9 } set LesSeuilsMDScoreSign {"No value" "Problem" "Twilight zone" "Good" "Sure"} set LesSeuilsMDScoreCoul {"grey" "red" "orange" "yellow" "green"} } if {$QueVeutOn=="SeuilMerci"} { return $LesSeuilsMDScore } if {$QueVeutOn=="SignificationMerci"} { return $LesSeuilsMDScoreSign } if {$QueVeutOn=="CouleurMerci"} { return $LesSeuilsMDScoreCoul } } proc LesSeuilsOperonsHomologues {{QueVeutOn ""}} { global LesSeuilsOperonsHomologues LesSeuilsOperonsHomologuesSign if { ! [info exists LesSeuilsOperonsHomologues]} { # set OHLaListe [CompteDesOrganismesAyantMemeOperon "LaListeMerci"] # scan [MoyenneEcartMinMaxCumulLong $OHLaListe] "%f %f %d %d" Mo Ec Mi Ma lappend LesSeuilsOH [format "%4.1f" 0.1] lappend LesSeuilsOH [format "%4.1f" 1.1] lappend LesSeuilsOH [format "%4.1f" 2.1] lappend LesSeuilsOH [format "%4.1f" 10.1] lappend LesSeuilsOH [format "%4.1f" 20.1] lappend LesSeuilsOHSign "ClusterMaintenance 0 == n" lappend LesSeuilsOHSign "ClusterMaintenance 1 == n" lappend LesSeuilsOHSign "ClusterMaintenance 2 <= n < 10" lappend LesSeuilsOHSign "ClusterMaintenance 10 < n <= 20" lappend LesSeuilsOHSign "ClusterMaintenance 20 < n" } if {$QueVeutOn=="SignificationMerci"} { return $LesSeuilsOHSign } return $LesSeuilsOH } proc LesSignaux {} { set FichierDesSignaux "[RepertoireDuGenome]/signaux/signaux.tfa" set LesSignaux [LesSignauxDuFichier $FichierDesSignaux] return $LesSignaux } proc LesSignauxDuFichier {FichierSignaux {aSequenceDuSignal ""} {aSequenceDuSignalPourPPCR ""}} { if {$aSequenceDuSignal !=""} { upvar $aSequenceDuSignal SequenceDuSignal } if {$aSequenceDuSignalPourPPCR!=""} { upvar $aSequenceDuSignalPourPPCR SequenceDuSignalPourPPCR } if {[info exists SequenceDuSignal]} { unset SequenceDuSignal } if {[info exists SequenceDuSignalPourPCR]} { unset SequenceDuSignalPourPCR } if {$FichierSignaux==""} { return {} } set LesSignaux {} foreach Ligne [CorrectionPourThrombin [LesLignesDuFichier $FichierSignaux] $FichierSignaux NF] { if {[regexp "^ *>" $Ligne]} { regsub -all ">" $Ligne " " Ligne scan $Ligne "%s" Signal regsub "_" $Signal "" Signal if {[info exists SequenceDuSignal($Signal)]} { if {[string equal -nocase [set SequenceDuSignal($Signal)] [Thrombin]]} { set Signal "ThrombinOld" } FaireLire "I found two times the same signal $Signal \n in $FichierSignaux" } lappend LesSignaux $Signal set SequenceDuSignal($Signal) "" set SequenceDuSignalPourPPCR($Signal) "" continue } regsub -nocase -all {[^a-z]} $Ligne "" Seq append SequenceDuSignal($Signal) $Seq append SequenceDuSignalPourPPCR($Signal) $Seq if {[string equal $Signal "ThrombinOld"] && ! [string equal [set SequenceDuSignalPourPPCR($Signal)] [ThrombinOld]]} { FaireLire "Problem with signal Thrombin in $FichierSignaux" } } if {[set i [lsearch -exact $LesSignaux "Thrombin"]] > -1 } { if {[string equal [set SequenceDuSignalPourPPCR(Thrombin)] [ThrombinOld]]} { set LesSignaux [lreplace $LesSignaux $i $i "ThrombinOld"] set SequenceDuSignal(ThrombinOld) [ThrombinOld] set SequenceDuSignalPourPPCR(ThrombinOld) [ThrombinOld] unset SequenceDuSignal(Thrombin) unset SequenceDuSignalPourPPCR(Thrombin) } } return $LesSignaux } proc LesSignificationsAssocieesAuxORFs {K} { global TypeCouleur set TypeDeCouleur [set TypeCouleur($K)] foreach Nom [ListeDesPABs] { set Couleur [CouleurParTypeEtNom $TypeDeCouleur $Nom $K] lappend LesNomSignif "$Nom [GetSignification $Couleur $K]" } set LesNomSignif [lsort -command CompareSansPremierChamp $LesNomSignif] return $LesNomSignif } proc LesSourcesDeGscope {{PathType ""} {AvecMain ""}} { if {$PathType=="" } { set PathType "Relatif" } if {$AvecMain=="" } { set AvecMain "AvecMain" } if {$AvecMain=="AvecMain" || $AvecMain=="WithMain"} { set AvecMain 1 } else { AvecMain 0 } set LesSourcesDeGscope {} set LesGscopeTcl {} if {$AvecMain} { lappend LesGscopeTcl "[GscopeDir]/gscope.tcl" } LConcat LesGscopeTcl [glob "[GscopeDir]/gscope_*.tcl"] foreach Fichier $LesGscopeTcl { if {[regexp "obsolete" $Fichier]} { continue } if {[file isdirectory $Fichier]} { continue } set Queue [file tail $Fichier] set Reper [file dirname $Fichier] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Source "$Queue" } else { set Source $Fichier } lappend LesSourcesDeGscope $Source } foreach Fichier [glob "[GscopeContrib]/*/*.tcl"] { if {[regexp -nocase "ARanger" $Fichier]} { continue } if {[regexp -nocase "Poubelle/" $Fichier]} { continue } if {[regexp "obsolete" $Fichier]} { continue } if {[file isdirectory $Fichier]} { continue } set Queue [file tail $Fichier] set ReperUsername [file dirname $Fichier] set Username [file tail $ReperUsername] set Reper [file dirname $ReperUsername] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Username/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Contrib [file tail $Reper] set Source "$Contrib/$Username/$Queue" } else { set Source $Fichier } lappend LesSourcesDeGscope $Source } foreach Fichier [glob "[GscopeContrib]/*/*/*.tcl"] { if {[regexp -nocase "ARanger" $Fichier]} { continue } if {[regexp -nocase "Poubelle/" $Fichier]} { continue } if {[regexp "AllProcs_CGHviewer.tcl" $Fichier]} { continue } if {[regexp "obsolete" $Fichier]} { continue } if {[file isdirectory $Fichier]} { continue } set Queue [file tail $Fichier] set ReperUsernameSub [file dirname $Fichier] set Sub [file tail $ReperUsernameSub] set ReperUsername [file dirname $ReperUsernameSub] set Username [file tail $ReperUsername] set Reper [file dirname $ReperUsername] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Username/$Sub/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Contrib [file tail $Reper] set Source "$Contrib/$Username/$Sub/$Queue" } else { set Source $Fichier } lappend LesSourcesDeGscope $Source } foreach Fichier [glob "[GscopeEtc]/*"] { if {[regexp -nocase "obsolete" $Fichier]} { continue } if {[file isdirectory $Fichier]} { continue } if {[regexp "~$" $Fichier]} { continue } if {[regexp {.[0-9]{4,}$} $Fichier]} { continue } set Queue [file tail $Fichier] set Reper [file dirname $Fichier] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Etc [file tail $Reper] set Source "$Etc/$Queue" } else { set Source $Fichier } lappend LesSourcesDeGscope $Source } #rR et Ordali set LesOrdaliTcl [glob "[GscopeDir]/ordali/src/ordali_*.tcl"] foreach Fichier $LesOrdaliTcl { if {[regexp "obsolete" $Fichier]} { continue } if {[file isdirectory $Fichier]} { continue } set Queue [file tail $Fichier] set Reper [file dirname $Fichier] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Source "ordali/src/$Queue" } else { set Source $Fichier } lappend LesSourcesDeGscope $Source } set LesOrdaliEtc [glob -nocomplain "[GscopeDir]/ordali/etc/*"] foreach Fichier $LesOrdaliEtc { if {[regexp "obsolete" $Fichier]} { continue } if {[file isdirectory $Fichier]} { continue } set Queue [file tail $Fichier] set Reper [file dirname $Fichier] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Source "ordali/etc/$Queue" } else { set Source $Fichier } lappend LesSourcesDeGscope $Source } set LesOrdaliDoc [glob -nocomplain "[GscopeDir]/ordali/doc/*"] foreach Fichier $LesOrdaliDoc { if {[regexp "obsolete" $Fichier]} { continue } if {[file isdirectory $Fichier]} { continue } set Queue [file tail $Fichier] set Reper [file dirname $Fichier] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Source "ordali/doc/$Queue" } else { set Source $Fichier } lappend LesSourcesDeGscope $Source } #rR Attention On a rajoute le / en fin de lib ... car il nous faut toute l'arborescence. set Fichier "[GscopeDir]/ordali/lib" set Queue [file tail $Fichier] set Reper [file dirname $Fichier] if {[regexp -nocase "Exact" $PathType]} { set Source $Fichier } elseif {[regexp -nocase "Absol" $PathType]} { set Source "$Reper/$Queue" } elseif {[regexp -nocase "Relat" $PathType]} { set Source "ordali/lib" } else { set Source $Fichier } lappend LesSourcesDeGscope "$Source/" ;#rR avec / return $LesSourcesDeGscope } proc LesSourcesDuProgramme {{PathType ""} {AvecMain ""}} { #rR Attention ici specifique Gscope return [LesSourcesDeGscope $PathType $AvecMain] } proc LesSousChamps {T {Champ ""}} { set Balise [ProchaineBalise T] if {$Champ!="" && ! [string equal -nocase $Balise $Champ]} { return {}} Espionne $Balise set LesValeurs {} set i 5 while 1 { if {[incr i -1]==0} { break } set Valeur [ValeurDeLaBalise $Balise T] if {$Valeur==""} { break } lappend LesValeurs $Valeur # Espionne [string range $Valeur 0 300] } return $LesValeurs } proc LesSpikePourExcel {} { Wup "Permet de creer le fichier excel des Spikes" set ListeSpike "CAB LTP4 LTP6 NAC1 PRKase RCP1 RCA TIM XCP2 rbcL" set Wdir1 "[RepertoireDuGenome]/Probes/Spike_Athaliana/Spike_RefSeq" set Wdir2 "[RepertoireDuGenome]/Probes/Spike_Athaliana/Spike_Unigene" LesOligosPourExcel "$ListeSpike" "$Wdir1" "$Wdir2" "" "" return "" } proc LesSpliceVariantsDeLAccess {Access} { #Entree : Access = Access ou Id d'une proteine #Sortie : Description de tous les variants dans une liste de liste #Appelle de la procedure LesSpliceVariantsDeLAccess_PageInfo dont l'Entree est une Page d'info de sptrembl ou swiss-prot return [LesSpliceVariantsDeLAccess_PageInfo [PageInfo $Access protein]] } proc LesSpliceVariantsDeLAccess_PageInfo {PageInfo} { #Entree : PageInfo = Page d'info de sptrembl ou swiss-prot #Sortie : Description de tous les variants dans une liste de liste if {$PageInfo == ""} {return} #Extraction de l'Id de la PageInfo set Id [BanqueIdDeLaProt_PageInfo $PageInfo] #Initiliasation des indicateurs de presence pour me reperer dans la PageInfo set SuisJeSurLesAlternativeProducts 0 set SuisJeSurLeComment 0 set AiJeRencontreUnVariant 0 #Les infos de chaque variant seront stockees dans une liste (LaDefinitionDUnVariant) elle-même stockée dans une liste (LesDefinitionsDesVariants) set LesDefinitionsDesVariants {} set LaDefinitionDUnVariant {} #Je parcours toutes les lignes de la PageInfo foreach Ligne [split $PageInfo "\n"] { #Tant que je ne trouve pas les Comment (CC) je passe (continue), à moins de l'avoir déjà rencontre alors je sors de la boucle if {![string equal -nocase [string range $Ligne 0 1] "CC"]} { if {$SuisJeSurLeComment} {break} continue } #J'enleve le champs de la ligne (CC) et les espaces aux extremites set Ligne [string trim [string range $Ligne 2 end]] #Je cherche la ligne contennant "-!- ALTERNATIVE PRODUCTS:" correspondant au debut de la description des variants if {[string range $Ligne 0 0] == "-"} { if {[string equal -nocase "-!- ALTERNATIVE PRODUCTS:" $Ligne]} { set SuisJeSurLesAlternativeProducts 1 continue } else { #Si j'ai deja vu "ALTERNATIVE PRODUCT:" je stoppe la boucle if {$SuisJeSurLesAlternativeProducts} {break} continue } } #je ne continue que si je suis sur les lignes de "ALTERNATIVE PRODUCTS" if {!$SuisJeSurLesAlternativeProducts} {continue} #Si "ALTERNATIVE PRODUCTS" possede un champs "Event=" et pas de champs "Name=" -> il n'est donc pas au bon format if {[string equal -nocase [string range $Ligne 0 5] "Event="]} { if {$AiJeRencontreUnVariant} {break} continue } #"ALTERNATIVE PRODUCTS" doit avoir une description complete avec le nom du variant "Name=" etc.. if {[string equal -nocase [string range $Ligne 0 4] "Name="]} { set AiJeRencontreUnVariant 1 if {$LaDefinitionDUnVariant != {}} { lappend LesDefinitionsDesVariants [join $LaDefinitionDUnVariant " "] set LaDefinitionDUnVariant {} } lappend LaDefinitionDUnVariant $Ligne continue } #Si je suis dans ALTERNATIVE PRODUCTS" mais que je n'ai toujours pas rencontre le nom des variants "Name=", cette ligne ne correspond donc pas a la definition d'un variant -> je continue sinon je rajoute l'info if {!$AiJeRencontreUnVariant} {continue} lappend LaDefinitionDUnVariant $Ligne } if {$LaDefinitionDUnVariant != {}} {lappend LesDefinitionsDesVariants [join $LaDefinitionDUnVariant " "]} set LesAccessDesVariants {} #Pour chaque definition de variant foreach DefinitionDUnVariant $LesDefinitionsDesVariants { #J'extraits l'Id de ce variant, si je ne le trouve pas je passe if {![regexp -nocase {IsoId\=([^\;]+)\;} $DefinitionDUnVariant tmp AccessDuVariant]} {continue} #J'extraits la description des sequences (VSP) a modifier pour ce variant, si je ne les trouve pas je passe if {![regexp -nocase {Sequence\=([^\;]+)\;} $DefinitionDUnVariant tmp VSPs]} {continue} #Je remplace le "-" de l'extension par un "_" regsub -all -nocase {[^0-9a-z]} $AccessDuVariant "_" AccessDuVariant set LesVSPs {} #Je forme la liste de tous les VSP (sequence a modifier) foreach VSP [split $VSPs ","] {lappend LesVSPs [string toupper [string trim $VSP]]} #Je stocke toutes ces infos dans un tableau afin de l'interroger apres lappend LesAccessDesVariants $AccessDuVariant set Tab($AccessDuVariant,Def) $DefinitionDUnVariant set Tab($AccessDuVariant,LesVSP) $LesVSPs } #Appelle de la procedure LesFeaturesDeLAccess_PageInfo qui retourne une liste de liste avec la description de toutes les features d'une PageInfo de protein dans un format "facilement" lisible foreach LaFeature [LesFeaturesDeLAccess_PageInfo $PageInfo] { #Je ne garde que les features des "VARSPLIC" set Type [lindex $LaFeature 1] if {$Type != "VARSPLIC"} {continue} #J'extraits le VSP de la description du VARSPLIC set Description [lindex $LaFeature 2] if {![regexp -nocase {FTId=([0-9a-z_]+)} $Description tmp UnVSP]} {continue} #J'extraits le ddebut et la fin set D [lindex $LaFeature 3] set F [lindex $LaFeature 4] if {$D == "" || $F == ""} {continue} #je stocke le tout dans un tableau set Tab(VSP,$UnVSP,D) $D set Tab(VSP,$UnVSP,F) $F #Si c'est une region a enlever "Missing" if {[regexp -nocase {^Missing} $Description]} { set Tab(VSP,$UnVSP,Info) "MISSING" continue } #Si c'est une region a remplacer "REPLACE" set Tab(VSP,$UnVSP,Info) "REPLACE" if {![regexp -nocase {[ a-z]+\->([ a-z]+)} $Description tmp NewArea]} {continue} regsub -all " " $NewArea "" NewArea set Tab(VSP,$UnVSP,NewArea) $NewArea } #Je vais maintenant pouvoir remplir la liste de liste qui sera retournee par le programme "LesVariants" set LesVariants {} #Pour chaque access de variants foreach AccessDuVariant $LesAccessDesVariants { #Je l'affiche Espionne $AccessDuVariant #J'extraits son extension ex P25513_10 -> 10 set Extension "" regexp {_([0-9]+)$} $AccessDuVariant tmp Extension if {$Extension == ""} {continue} #Je cree un Id unique pour chaque variant avec l'extension de l'access du variant set IdDuVariant "${Id}_${Extension}" #j'interroge le tableau pour qu'il me retourne la definition du variant set Definition [set Tab($AccessDuVariant,Def)] #Chaque element de "LesVariants" est une liste contennant les infos de chaque variant au format : #Index 0 : Id du variant #Index 1 : Acc du variant #Index 2 : Def du variant #Index 3 -> end : description de chaque variant (liste) avec les sequences a supprimer "MISSING" et a remplacer "REPLACE" au format : # Index 0 : le nom du VSP # Index 1 : le debut # Index 2 : la fin # Index 4 : Replace ou Missing # Index 5 : la sequence de remplacement set LeVariant [list $IdDuVariant $AccessDuVariant $Definition] foreach VSP [set Tab($AccessDuVariant,LesVSP)] { #si le VSP est une sequence exterieure (autre access) ou "Not described" je passe if {[string equal -nocase $VSP "External"] || [string equal -nocase $VSP "Not described"]} {break} #si le VSP est la sequence initiale je l'indique et je sors de la boucle car il ne dois pas contenir de VSP if {[string equal -nocase $VSP "DISPLAYED"]} { lappend LeVariant "INITIAL" break } set D [set Tab(VSP,$VSP,D)] set F [set Tab(VSP,$VSP,F)] set Info [set Tab(VSP,$VSP,Info)] set NewArea "" if {$Info != "MISSING"} {set NewArea [set Tab(VSP,$VSP,NewArea)]} #Je remplis les infos de chaque VSP lappend LeVariant [list $VSP $D $F $Info $NewArea] } lappend LesVariants $LeVariant } #Je retourne la liste de liste de tous mes variants return $LesVariants } proc LesStatsDesVariantsDansLesBanques {} { Wup "Comptabilise le nombre de proteines, le nombre de proteines avec des variants et le nombre de variants" set Access "*" set LesBanques [list "swissprot" "sptrembl" "protein"] set Link "varsplic" foreach Banques $LesBanques { set Typ1 "acc" set Typ1 "id" #Pour chaque banque on cherche le nombre total d entrees set Commande "getz -wc \"\\\[$Banques-$Typ1: $Access\\\] \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$GetzOut == ""} { set NbProt "No getz" Espionne "Nombre de prot dans $Banques $NbProt" } else { set NbProt "$GetzOut" Espionne "Nombre de prot dans $Banques $NbProt" } #Calcul du nombre de proteines avec au moins un variant set Commande "getz -wc \"\\\[$Banques-$Typ1: $Access\\\] > $Link > $Banques\"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {Espionne "$Message"} if {$GetzOut == ""} { set NbVariant "No Getz" Espionne "Le Nb de prot avec variant $NbVariant" } else { set NbVariant "$GetzOut" Espionne "Le Nb de prot avec variant $NbVariant" } #Calcul du nombre de variant pour les proteines set Commande "getz -vf des \"\\\[$Banques-$Typ1: $Access\\\] > $Link \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {Espionne "$Message"} if {$GetzOut == ""} { set NbVariant "No Getz" Espionne "Le nb de variant au total $NbVariant" } else { set NbVariant "[llength [split $GetzOut "\n"]]" Espionne "Le nb de variant au total $NbVariant" } #La meme chose pour seulement les proteines humaines Espionne "\nHuman" #Calcul du nombre de proteines avec au moins un variant set Commande "getz -wc \"\\\[$Banques-$Typ1: $Access\\\] & \\\[$Banques-org: Homo sapiens\\\] \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {Espionne "$Message"} if {$GetzOut == ""} { set NbProt "No getz" Espionne "Nombre de prot dans $Banques $NbProt" } else { set NbProt "$GetzOut" Espionne "Nombre de prot dans $Banques $NbProt" } #Calcul du nombre de proteines avec au moins un variant set Commande "getz -wc \"(\\\[$Banques-$Typ1: $Access\\\] & \\\[$Banques-org: Homo sapiens\\\]) > $Link > $Banques\"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {Espionne "$Message"} if {$GetzOut == ""} { set NbVariant "No Getz" Espionne "Le Nb de prot avec variant $NbVariant" } else { set NbVariant "$GetzOut" Espionne "Le Nb de prot avec variant $NbVariant" } #Calcul du nombre de variant pour les proteines set Commande "getz -vf des \"(\\\[$Banques-$Typ1: $Access\\\] & \\\[$Banques-org: Homo sapiens\\\])> $Link \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$GetzOut == ""} { set NbVariant "No Getz" Espionne "Le nb de variant au total $NbVariant" } else { set NbVariant "[llength [split $GetzOut "\n"]]" Espionne "Le nb de variant au total $NbVariant" } } return "" } proc LesStatsDesVariantsDeTous {} { Wup "Permet de savoir pour tous les Access le nombre de variant" Wup "Attention il faut compter plus 1 car lui n est pas avec dans varsplic" global MesAccessInterressants set Liste [ListeDesPABs] set MesAcc "" foreach PAB $Liste { set AccProt "" set Id "" set AccProt [AccessDeLaBoite $PAB protein] if {$AccProt == $PAB} {continue} lappend MesAcc $AccProt continue } set MesAcc [lsort -unique $MesAcc] #Espionne $MesAcc Espionne "Les PABs [llength $MesAcc]" MesAccessInterressants set LesAcc [array names MesAccessInterressants] foreach Acc $LesAcc {lappend MesAcc $Acc} #Espionne $MesAcc Espionne "Les acc en + [llength $MesAcc]" set NbProtAvecV 0 set NbVariantTot 0 set Access [join $MesAcc "|"] set Link "varsplic" set Type [list "acc" "id"] set LesBanques [list "swissprot" "sptrembl" "protein"] foreach Banques $LesBanques { set Typ1 "acc" set Typ2 "id" set Commande "getz -wc \"\\\[$Banques-$Typ1: $Access\\\] | \\\[$Banques-$Typ2: $Access\\\] \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$GetzOut == ""} { set NbProt "No getz" Espionne "Nombre de prot dans $Banques $NbProt" } else { set NbProt "$GetzOut" Espionne "Nombre de prot dans $Banques $NbProt" } set Commande "getz -wc \"(\\\[$Banques-$Typ1: $Access\\\] | \\\[$Banques-$Typ2: $Access\\\]) > $Link > $Banques\"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$GetzOut == ""} { set NbVariant "No Getz" Espionne "Le Nb de prot avec variant $NbVariant" } else { set NbVariant "$GetzOut" Espionne "Le Nb de prot avec variant $NbVariant" set Commande "getz -vf des \"(\\\[$Banques-$Typ1: $Access\\\] | \\\[$Banques-$Typ2: $Access\\\]) > $Link \"" catch {set GetzOut [eval exec $Commande]} Message if {! [info exists GetzOut]} {continue} if {$GetzOut == ""} { set NbVariant "No Getz" Espionne "Le nb de variant au total $NbVariant" continue } else { set OnARien 1 set NbVariant "[llength [split $GetzOut "\n"]]" Espionne "Le nb de variant au total $NbVariant" } } } return "" } proc LesStructuresDeActin {Position} { global ActinStruct if {! [info exists ActinStruct]} { set Struct "---------BBBBB---BBBBBB-------BBBB--BBB---HHHHHH------BB-HHHHH-B--BBBB----------HHHHHHHHHHHHH------HHH--BBBBB-----HHHHHHHHHHHHH-----BBBBBBHHHHHHHH-----BBBBBB----BBBBBBB--BB-HHH-BBB---HHHHHHHHHHHHH--------HHHHHHHHHHHHHH------HHHHHHHH-------BBBB-----BBBB--HHHHHHH----HHHH------HHHHHHHHH----HHHHHHHH--BBBB-HHH----HHHHHHHHHHHH--------BB----HHHHHHHHHHHHH--HHHHHH-BBHHHHHHH-HHHH-----" set i 1 foreach AA [split $Struct ""] { set ActinStruct($i,Struct) $AA incr i } } if {! [info exists ActinStruct($Position,Struct)]} {return ""} return "[set ActinStruct($Position,Struct)]" } proc LesSubKeywordsInteressantsDuGenbank {TexteOuFichier aTab KW args} { if {[regexp "\n" $TexteOuFichier]} { set Texte $TexteOuFichier } else { set Texte [ContenuDuFichier $TexteOuFichier] } set Texte [LesKeywordsInteressantsDuGenbank $Texte Bidon $KW] upvar $aTab Tab set LesSKW $args foreach SKW $LesSKW { set Tab($SKW) "" } foreach Ligne [split $Texte "\n"] { if { ! [regexp {^ } $Ligne]} { scan $Ligne "%s" SKW set Interessant [expr [lsearch $LesSKW $SKW] > -1] if {$Interessant} {set Tab($SKW) "" ; set Sep ""} } if {$Interessant} { append Tab($SKW) "$Sep$Ligne" set Sep "\n" } } if {[llength $LesSKW]==1} { return $Tab([lindex $LesSKW 0]) } return $LesSKW } proc LesSubjectsDuBlast {FichierBlast {LesBanquesId All}} { if {![file exists $FichierBlast]} { Espionne "$FichierBlast does not exist" return "" } set F [open $FichierBlast] set LesSubjects {} set UnSubject "" set SuisJeSurUnSubject 0 while {[gets $F Ligne]>=0} { if {!$SuisJeSurUnSubject && [string first ">" $Ligne] != 0} {continue} if { $SuisJeSurUnSubject && [regexp " Database:" $Ligne]} { set SuisJeSurUnSubject 0 break } if { $SuisJeSurUnSubject && [string first ">" $Ligne] != 0} { append UnSubject "\n$Ligne" continue } if {[string first ">" $Ligne] == 0} { if {$SuisJeSurUnSubject} { if {$LesBanquesId == "All"} { lappend LesSubjects $UnSubject } else { set TabTmp($BanqueId) $UnSubject } set UnSubject "" set SuisJeSurUnSubject 0 } if {[info exists BanqueId]} {unset BanqueId} scan $Ligne "%s" BanqueId regsub ">" $BanqueId "" BanqueId if {$LesBanquesId == "All"} { set SuisJeSurUnSubject 1 } else { foreach BId $LesBanquesId { if {[string equal -nocase $BanqueId $BId]} {set SuisJeSurUnSubject 1;break} } } if {$SuisJeSurUnSubject} {set UnSubject $Ligne} } } close $F if {$UnSubject != ""} { if {$LesBanquesId == "All"} { lappend LesSubjects $UnSubject } else { set TabTmp($BanqueId) $UnSubject } } if {$LesBanquesId != "All"} { foreach BId $LesBanquesId { if {![info exists TabTmp($BId)]} {lappend LesSubjects "";continue} lappend LesSubjects [set TabTmp($BId)] } } if {[info exists TabTmp]} {unset TabTmp} return $LesSubjects } proc LesSujetsAvecOligos {} { set LesSujetsAvecOligos {} foreach P [Oli "LaListeMerci"] { foreach Sujet [Oli $P Subjects] { lappend LesSujetsAvecOligos [format "%-20s %s" $Sujet $P] } } return $LesSujetsAvecOligos } proc LesSujetsDansLeBonOrdre {LesSujets} { set LesBeauxSujets {} foreach Sujet $LesSujets { set LesMots [split $Sujet "-"] set F [lindex $LesMots end] set D [lindex $LesMots end-1] set BeauSujet $Sujet if {[regexp {^[0-9]+$} $D] && [regexp {^[0-9]+$} $F]} { set Reste [join [lrange $LesMots 0 end-2] "-"] set BeauSujet [format "%s\-%5.5d\-%5.5d" $Reste $D $F] } lappend LesBeauxSujets $BeauSujet set MonSujet($BeauSujet) $Sujet } set LesBeauxTries [lsort $LesBeauxSujets] set LesTries {} foreach BeauSujet $LesBeauxTries { lappend LesTries [set MonSujet($BeauSujet)] } return $LesTries } proc LesSujetsDeLOligo_NOT_YET_USED {P {Action ""} {Valeur ""}} { if {$Action==""} { set Action "get" } set FiSujOl [FiSujOl $P] if {$Action=="get"} { if {$Valeur=="filename"} { return $FiSujOl } if {[file exists $FiSujOl]} { return [LesLignesDuFichier $FiSujOl] } else { return {} } } if {$Action=="set"} { return [SauveLesLignes $Valeur dans $FiSujOl] } if {$Action=="append"} { set LesSujets [LesSujetsDeLOligo $P] if {[lsearch $LesSujets -exact $Valeur]<0} { lappend LesSujets $Valeur } SauveLesLignes $Valeur dans $FiSujOl return $LesSujets } } 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 LesTFADeLaProteine {{LesNoms ""}} { if {$LesNoms==""} {set LesNoms [ListeDesPABs]} set RepProtTFA "[RepertoireDuGenome]/prottfa" if {![file exists $RepProtTFA]} {File mkdir $RepProtTFA} foreach Nom $LesNoms { set FichierProtTFA "$RepProtTFA/$Nom" if {[file exists $FichierProtTFA]} {continue} set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set Organism [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] set Entete "$Nom PROTEIN $AccessProt from $Organism" #Espionne $Entete set SeqProt [QueLaSequenceDuTexteTFA [PageInfo $AccessProt protein seq]] #Espionne $SeqProt if {$SeqProt==""} {Espionne "$Nom no seq";continue} set SeqTFA [SequenceFormatTFA $SeqProt $Entete] Sauve $SeqTFA dans $FichierProtTFA } } proc LesTFADuFileTFAs {FichierTFAs} { return [LesTFADuTFAs [File2Text $FichierTFAs]] } proc LesTFADuTFAs {TFAs} { set LesTFA {} foreach TFA [split $TFAs ">"] { set TFA [string trim $TFA] if {$TFA == ""} {continue} set TFA ">$TFA" lappend LesTFA $TFA } return $LesTFA } proc LesTFAsDesHitsDuBallast {FichierAnchors {NbHitsMax 200} {NbPDBMax 30} {AvecFragment 0}} { if {![file exists $FichierAnchors]} {return} AskAnchors unset set IdDeRef [AskAnchors $FichierAnchors IdDeRef] set LesHits [list [list $IdDeRef 1e200]] foreach Id [AskAnchors $FichierAnchors LesId ] { set n [AskAnchors $FichierAnchors Id $Id NbLMS] lappend LesHits [list $Id $n] } set NbRequestInDBMax [expr ($NbHitsMax + $NbPDBMax) * 2] set NbRequestInDB 0 set LesBanqueId {} foreach LeHit [lsort -index 1 -decreasing -real $LesHits] { if {$NbRequestInDBMax <= $NbRequestInDB} {break} set BanqueId [lindex $LeHit 0 ] if {[info exists TabDejaVu($BanqueId)]} {continue} set TabDejaVu($BanqueId) 1 if {[regexp -nocase "UniRef" $BanqueId]} { Espionne $BanqueId regexp -nocase {UniRef[0-9]*} $BanqueId BanqueUniref set BanqueUniref [string tolower $BanqueUniref] set TFA [TFADeLaBanqueBlast "/blast/$BanqueUniref" $BanqueId] if {$TFA == ""} {continue} regsub -nocase {>[^ ]+} $TFA ">$BanqueId" TFA set TabTmp($BanqueId) $TFA incr NbRequestInDB continue } if {[EstUnAccessPDB $BanqueId]} { set TFA [TFADeLaBanqueBlast "/blast/pdb" $BanqueId] if {$TFA == ""} {continue} regsub -nocase {>[^ ]+} $TFA ">$BanqueId" TFA set TabTmp($BanqueId) $TFA incr NbRequestInDB continue } if {[EstUnAccessVARSPLIC $BanqueId]} { set TFA [TFADeLaBanqueBlast "/blast/varsplic" "VARSPLIC:$BanqueId"] if {$TFA == ""} {continue} regsub -nocase {>[^ ]+} $TFA ">$BanqueId" TFA set TabTmp($BanqueId) $TFA incr NbRequestInDB continue } incr NbRequestInDB lappend LesBanqueId $BanqueId } foreach TFA [LesSeqTFAsDesBanqueId $LesBanqueId "protein" "" $AvecFragment] { set TFA [string toupper $TFA] scan [EnteteDuTexteTFA $TFA] ">%s" BId if {$BId == ""} {continue} set BId [string toupper $BId] set TabTmp($BId) $TFA } set NbPDB 0 set NbHits 0 set LesTFAs {} foreach LeHit $LesHits { set BanqueId [string toupper [lindex $LeHit 0 ]] if {![info exists TabTmp($BanqueId)]} {continue} if {[EstUnAccessPDB $BanqueId]} { incr NbPDB if {$NbPDBMax < $NbPDB } {continue} } else { incr NbHits if {$NbHitsMax < $NbHits} {continue} } lappend LesTFAs [set TabTmp($BanqueId)] } AskAnchors unset return $LesTFAs } proc LesTFAsDesHitsDuBlastP {FichierBlast {NbHitsMax 200} {NbPDBMax 30} {AvecFragment 0}} { set NbRequestInDBMax [expr ($NbHitsMax + $NbPDBMax) * 2] set NbRequestInDB 0 set LesHits [LesBanqueIdDuBlast $FichierBlast 1e200 1e200] set LesBanqueId {} foreach BanqueId $LesHits { set BanqueId [string toupper $BanqueId] if {$NbRequestInDBMax <= $NbRequestInDB} {break} if {[EstUnAccessPDB $BanqueId]} { set TFA [TFADeLaBanqueBlast "/blast/pdb" $BanqueId] if {$TFA == ""} {continue} regsub -nocase {>[^ ]+} $TFA ">$BanqueId" TFA set TabTmp($BanqueId) $TFA incr NbRequestInDB continue } if {[regexp {\-[0-9]+$} $BanqueId]} { set TFA [TFADeLaBanqueBlast "/blast/varsplic" "VARSPLIC:$BanqueId"] if {$TFA == ""} {continue} regsub -nocase {>[^ ]+} $TFA ">$BanqueId" TFA set TabTmp($BanqueId) $TFA incr NbRequestInDB continue } incr NbRequestInDB lappend LesBanqueId $BanqueId } foreach TFA [LesSeqTFAsDesBanqueId $LesBanqueId "protein" "" $AvecFragment] { set TFA [string toupper $TFA] scan [EnteteDuTexteTFA $TFA] ">%s" BId if {$BId == ""} {continue} set BId [string toupper $BId] set TabTmp($BId) $TFA } set NbPDB 0 set NbHits 0 set LesTFAs {} foreach BanqueId $LesHits { set BanqueId [string toupper $BanqueId] if {![info exists TabTmp($BanqueId)]} {continue} if {[EstUnAccessPDB $BanqueId]} { incr NbPDB if {$NbPDBMax < $NbPDB } {continue} } else { incr NbHits if {$NbHitsMax < $NbHits} {continue} } lappend LesTFAs [set TabTmp($BanqueId)] } return $LesTFAs } proc LesTFAsDesRSFsDesARPs {{LesFichierRSF ""}} { Wup "Permet d extraire au format TFAs les sequences presentes dans les alignement au format .RSF" Wup "Utilisation pour generer les fichiers tfa pour ensuite creer les banques blasts" Wup "voir proc LesBanquesBLASTDesARPs" set RepARP "[RepARPAnno]" set RepTFA "$RepARP/ARP_TFA" set RepBanque "$RepARP/ARP_BLAST" set RepMACS "$RepARP/ARP_MACS" set RepSignature "$RepARP/ARP_Signature" set RepARP_Results "[RepARPAnnoWeb]" set RepTFAResults "$RepARP_Results" set RepBlastResults "$RepARP_Results" set RepMACSResults "$RepARP_Results" set ClustalW "clustalw" set ClustalOut "" if {$LesFichierRSF == ""} { set LesFichierRSF [glob -nocomplain -directory "$RepMACS/" "*.rsf"] #set LesFichierRSF "/genomics/g1/ARP/alignement_ARP/ARPAnno/ARP_MACS/Actin.rsf" #set LesFichierRSF "/genomics/g1/ARP/alignement_ARP/ARPAnno/ARP_MACS/Orphans.rsf" } else { foreach F $LesFichierRSF { if {! [file exists $F]} { return "" } } } foreach RSF $LesFichierRSF { if {[regexp "Modele" $RSF]} {continue} Espionne "$RSF" set FichierTFA "" set FichierDND "" regsub {.rsf$} $RSF ".tfa" FichierTFA #regsub {.rsf$} $RSF ".fasta" FichierTFA regsub {.rsf$} $RSF ".dnd" FichierDND if {[file exists $FichierTFA]} {file delete -force $FichierTFA} set Commande "$ClustalW $RSF -convert -output=FASTA" catch { unset ClustalOut} if {[catch {set ClustalOut [eval exec $Commande]} Message]} { Espionne ">>>>Pb with clustal converting [file tail $RSF] to FASTA:\n$Message" if {[file exists $FichierDND]} {file delete -force $FichierDND} } if {![info exists ClustalOut]} {continue} if {$ClustalOut == ""} {continue} if {[file exists $FichierDND]} {file delete -force $FichierDND} lappend LesFichiersTFA $FichierTFA } foreach TFA $LesFichiersTFA { set Tmp "${TFA}_tmp" set Sequence "" Espionne "$Tmp" set OnAEntete "0" set F [open "$TFA"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[regexp "^>" $Ligne]} { set OnAEntete 1 if {$Sequence!=""} { regsub -all {\-} $Sequence "" Sequence #Espionne "Saving: $Sequence" AppendAuFichier $Tmp $Sequence } if {! [regexp -nocase actin "$TFA"] && [regexp -nocase "p02568" $Ligne]} {set OnAEntete 0;continue} AppendAuFichier $Tmp $Ligne set Sequence "" continue } else { if {$OnAEntete=="0"} {continue} #Espionne "$Sequence" append Sequence [join $Ligne ""] } } close $F if {$Sequence!=""} { regsub -all {\-} $Sequence "" Sequence AppendAuFichier $Tmp $Sequence } file copy -force $Tmp $TFA if {[regexp {.fasta$} $TFA]} { set NewFile "" regsub {.fasta$} $TFA ".tfa" NewFile file rename -force $TFA $NewFile file delete -force $TFA Espionne "$NewFile" } file delete -force $Tmp } return "" } proc LesTailleDesInsertions_article {Dir FichierMACS} { set LesFamilleARPs [LesFamillesDARPs] foreach Famille $LesFamilleARPs { if {! [regexp "^ARP" $Famille]} {continue} TailleDesInsertions_article $Dir $Famille $FichierMACS } return "" } proc LesTaxIdDeOdile {} { foreach Ligne [LesLignesDuFichier "[BlomeDir]/TTLL.csv"] { if { ! [regexp {[0-9]+} $Ligne OX]} { continue } if {[OiCode $OX OI]==""} { lappend LesPerdus "perdu $OX [Tax $OX Name]" } Espionne "$OX [Tax $OX Name]" } return $LesPerdus } proc LesTaxIdDesGenomesComplets {} { set LesRepAvecFichier {} set LesRepAvecTaxId {} foreach FiGBK [concat [glob -nocomplain "/genome/*/*.ref"] [glob -nocomplain "/genome/*/*.gbk"]] { Espionne $FiGBK set Rep [file tail [file dirname $FiGBK]] if {$Rep=="Archaea" || $Rep=="Bacteria" || $Rep=="H.sapiens" || $Rep=="YeastGenome"} { continue } lappend LesRepAvecFichier $Rep set TaxId "" if { ! [info exists LesTaxIdDuRep($Rep)]} { set LesTaxIdDuRep($Rep) {} } foreach Ligne [LesLignesIaJDuFichier $FiGBK 1 1000] { if { ! [regexp {/db_xref=\"taxon\:} $Ligne]} { continue } set TaxId [IntegerApres "taxon\:" dans $Ligne] if {$TaxId==""} { continue } set TaxId [BetterTaxId $TaxId] set Organisme [Tax $TaxId] lappend LesTaxIdDuFichierRef($FiGBK) $TaxId if {[info exists FichierDuRep($Rep,$TaxId)]} { lappend FichierDuRep($Rep,$TaxId) $FiGBK ; continue } lappend LesRepAvecTaxId $Rep lappend FichierDuRep($Rep,$TaxId) $FiGBK lappend LesTaxIdDuRep($Rep) $TaxId break } } foreach FiGBK [array names LesTaxIdDuFichierRef] { set LesT [set LesTaxIdDuFichierRef($FiGBK)] if {[llength LesT]>1} { FaireLire "I found more than 1 TaxId for $FiGBK\n[join $LesT " "]" } set LesTaxIdDuFichierRef($FiGBK) [lsort -u [set LesTaxIdDuFichierRef($FiGBK)]] Espionne [SauveLesLignes [array get LesTaxIdDuFichierRef] dans "/genomics/link/Common/fiches/taxid_du_fichierref"] } foreach Rep [lsort -unique $LesRepAvecFichier] { if {[set LesTaxIdDuRep($Rep)]=={}} { lappend LesPauvres "Rep sans TaxId $Rep" Espionne "Rep sans TaxId $Rep" } } foreach Rep [lsort -unique $LesRepAvecTaxId] { if {[llength [set LesTaxIdDuRep($Rep)]]==1} { set TaxId [lindex [set LesTaxIdDuRep($Rep)] 0] lappend LesBons "\n$Rep $TaxId [Tax $TaxId]" continue } lappend LesMultis "\n$Rep [join [set LesTaxIdDuRep($Rep)] " "]" foreach TaxId [set LesTaxIdDuRep($Rep)] { lappend LesMultis " $TaxId [Tax $TaxId]" lappend LesMultis [join [set FichierDuRep($Rep,$TaxId)] "\n"] } } Espionne [SauveLesLignes $LesBons dans "/genomics/link/Common/fiches/les_genomes_un_taxid"] Espionne [SauveLesLignes $LesPauvres dans "/genomics/link/Common/fiches/les_genomes_sans_taxid"] Espionne [SauveLesLignes $LesMultis dans "/genomics/link/Common/fiches/les_genomes_multi_taxid"] exit } proc LesTissueOuStrainDeLaProt {Access {Quoi TISSUE}} { return [LesTissueOuStrainDeLaProt_PageInfo [PageInfo $Access protein] $Quoi] } proc LesTissueOuStrainDeLaProt_PageInfo {PageInfo {Quoi TISSUE}} { set Champs "RC" set LesTissues {} foreach RC [LeChampsDeLaPageProteine $PageInfo "$Champs"] { if {![regexp -nocase "$Quoi=" $RC]} {continue} set i [string first "$Quoi=" $RC] set RC [string range $RC [expr $i+7] end] set j [string first ";" $RC] set RC [string range $RC 0 [expr $j-1]] regsub -all " and " $RC " " RC regsub -all ", " $RC "," RC set LeRC [split $RC ","] foreach Tissue $LeRC { if {$Tissue == ""} {continue} lappend LesTissues $Tissue } } return [ElimineLesRedondancesDansUneListe $LesTissues] } proc LesTissueType {Nom FichierBlastEST {AllOrgaouJustMyOrga AllOrga} {IdDeRef 0.95}} { if {![file exists $FichierBlastEST]} {return [list "$Nom\tNoESTFound"]} set NbSubject [AskBlast $FichierBlastEST NbSubject] if {$NbSubject == ""} {return [list "$Nom\tNoESTFound"]} set OrgaDeRef [OrganismeDuPAB $Nom] set LesBId {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlastEST Subject $i] set PAlignees [PourcentageDesBasesAligneesSurToutesLesBasesAlignables $FichierBlastEST $BId] if {$PAlignees < $IdDeRef} {continue} set PAlignables [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables $FichierBlastEST $BId] if {$PAlignables < $IdDeRef} {continue} Espionne $BId lappend LesBId $BId } AskLesPagesInfos load $LesBId est set LeTexte {} foreach BId $LesBId { set Page [AskLesPagesInfos ask $BId] if {$Page == ""} {continue} set Access [AskBlast $FichierBlastEST BanqueId $BId Access] set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] if {$AllOrgaouJustMyOrga != "AllOrga"} { set EstCeUnDesOrga 0 foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} {set EstCeUnDesOrga 1;break} } if {!$EstCeUnDesOrga} {continue} } set LesTissues [LesTissuesDeLAcNuc_PageInfo $Page] if {$LesTissues == {}} {continue} foreach Tissue $LesTissues { foreach Orga $LesOrgas { set Info "$Nom\t$Access\t$Orga\t$Tissue" lappend LeTexte $Info } } } AskBlast unset AskLesPagesInfos unset if {$LeTexte == {}} {return [list "$Nom\tNoESTFound"]} return $LeTexte } proc LesTissueTypeDesTests {} { set FichierEST "[RepertoireDuGenome]/fiches/SelectedEST" foreach PAB [ListeTest] { set LesTissues [lsort -unique [InterrogeSelectedEST $FichierEST Nom $PAB LesTissueType]] foreach T $LesTissues { if {[regexp {skeletal|muscle|epithelial|mcf7} $T]} { Espionne "$PAB $T" } } } return "" } proc LesTissuesDeLAcNuc {Access {Banque genbankfull}} { return [LesTissuesDeLAcNuc_PageInfo [PageInfo $Access $Banque]] } proc LesTissuesDeLAcNuc_PageInfo {PageInfo} { set LAiJeVu 0 set Infos "" foreach Ligne [split $PageInfo "\n"] { if {!$LAiJeVu && [regexp -nocase "tissue_type=" $Ligne]} { regsub -nocase " source " $Ligne "" Ligne append Infos " $Ligne" set LAiJeVu 1 continue } if {$LAiJeVu && [regexp -nocase "BASE COUNT" $Ligne]} {break} if {!$LAiJeVu} {continue} append Infos " $Ligne" } if {!$LAiJeVu} {return ""} regsub -all " /" $Infos "," Infos regsub -all "\"" $Infos " " Infos regsub -all " and " $Infos "," Infos regsub -all {\. } $Infos "," Infos regsub -all ", " $Infos "," Infos regsub -all " ," $Infos "," Infos regsub -all "\=" $Infos "\=," Infos regsub -all "\\(" $Infos " " Infos regsub -all "\\)" $Infos " " Infos while {[regexp " " $Infos]} {regsub -all " " $Infos " " Infos} set LesTissues "" set SuisJeSurUnTissue 0 foreach Element [split [string trim $Infos] ","] { set Element [string trim $Element] if {$Element == ""} {continue} if {[string equal -nocase "tissue_type=" $Element]} { set SuisJeSurUnTissue 1 continue } if {$SuisJeSurUnTissue && [regexp "=" $Element]} { set SuisJeSurUnTissue 0 continue } if {!$SuisJeSurUnTissue} {continue} if {[info exists Tab($Element)]} {continue} set Tab($Element) 1 lappend LesTissues $Element } return [lsort -unique $LesTissues] } proc LesTypesDesGO {LesGO} { set LesTypes {} foreach GO $LesGO { if {$GO == "GO:0003673"} {continue} foreach Type [GODB GO $GO LesTypes] { if {[info exists TabTmp($Type)]} {continue} set TabTmp($Type) 1 lappend LesTypes $Type } if {[llength $LesTypes] >= [llength [GODB LesTypes]]} {break} } return $LesTypes } proc LesTypesGO {} { set Liste {} foreach File [glob -nocomplain "[GODBDir]/*.ontology"] { set NameFile [file tail $File] if {[string equal -nocase $NameFile "defintions_terms.ontology"]} {continue} lappend Liste [FichierGO2Type $NameFile] } return $Liste } proc LesTypesOntologiques {} { set Liste {} foreach File [glob -nocomplain "[OntologyDir]/*.ontology"] { set NameFile [file tail $File] if {[string equal -nocase $NameFile "defintions_terms.ontology"]} {continue} regsub {\.ontology} $NameFile "" Type lappend Liste $Type } return $Liste } proc LesUniquesParSerie {FichierClusters {Selec "EXH-PPRB PP00"}} { set Liste [ListeDesJR $FichierClusters] set LesDatas1 {} set LesSelec [split $Selec " "] foreach Nom $Liste { set CodeClone [ExtraitInfo $Nom OwnerOfCDNA] foreach Sel $LesSelec { if {[regexp "^$Sel" $CodeClone]} {lappend LesDatas1 $Nom} } } #Espionne "nb uniques: [llength $LesDatas1]" return $LesDatas1 } proc LesUtilesDeHumanGenome {} { set LesUtiles {} foreach Ligne [LesLignesDuFichier "[GscopeDir]/lesrepsdehumangenome.liste"] { set Quota "" scan $Ligne "%d %s" Quota Fichier if {$Quota==""} { continue } set Xoue [Oue "/$Fichier"] if {$Xoue==""} { continue } lappend LesUtiles $Fichier } return $LesUtiles } proc LesVEDidierCompatiblesGscope {{Action ""}} { if {$Action==""} { set Action "ShowOnly" } set FichierVEDidierCompatiblesGscope "[Fiches]/VEDidierCompatiblesGscope.txt" if {$Action=="GetList" && [FileExists $FichierVEDidierCompatiblesGscope]} { return [LesLignesDuFichier $FichierVEDidierCompatiblesGscope] } set LesNonPGS {} set LesNonCodeRipp {} set LesNonGateway {} set LesVecteursManquants {} set LesMauvaisesLimites {} set LesMauvaisProtName {} foreach VE [VEDidier ListeDes VE] { set ProtName [VEDidier $VE "ProtName"] set Scientist [VEDidier $VE "Scientist"] set Vectorname [VEDidier $VE "Vectorname"] set DomainLimit [string trim [VEDidier $VE "DomainLimit"]] set CodeRipp [VEDidier $VE "CodeRipp"] if {$CodeRipp==""} { lappend LesNonCodeRipp "$VE [VEDidier $VE Ligne]" continue } set NomDuProtName [NomDuAlias $ProtName] if {$NomDuProtName=="" && $CodeRipp!=""} { set BetterProtName [Alias $CodeRipp] if {0 && [OuiOuNon "the ProtName from Didier '$ProtName' doesn't correspond to the Gscope ProtName '$BetterProtName' \n Do I use $BetterProtName"]} { set ProtName $BetterProtName } lappend LesMauvaisProtName "'$ProtName' '$BetterProtName' $CodeRipp $Scientist" } set Organism [VEDidier $VE "Organism"] set ProtOrga "${ProtName}_$Organism" regsub -all " " $ProtOrga "_" ProtOrga if {[NomDuAlias $ProtName]!=""} { set AliasGscope $ProtName } else { set AliasGscope [AliasAlias $ProtOrga "Gscope"] } set Comments [VEDidier $VE "Comments"] set PGS "" set DE "" if {$AliasGscope!=""} { set PGS [NomDuAlias $AliasGscope] if {[regexp " " $PGS]} { scan $PGS "%s %s" PGS PGS2 if {$CodeRipp==$PGS2} { set PGS $PGS2 } } set DE [DefinitionRapide $PGS] } if {$PGS==""} { lappend LesNonPGS "$VE [VEDidier $VE Ligne]" continue } if {$CodeRipp!="" && $CodeRipp!=$PGS} { FaireLire "CodeRipp is not PGS\n[VEDidier $VE Ligne]\n $AliasGscope $PGS" } regsub "/" $DomainLimit " " Limites scan $Limites "%d %d" D F if {! [info exists Missing($Vectorname)]} { set Trouve [FindVector $Vectorname] if {$Trouve==""} { Espionne "missing vector $Vectorname for $VE $PGS $AliasGscope $D $F $Scientist" lappend LesVecteursManquants $Vectorname set Missing($Vectorname) 1 continue } } set LesVPs [LesVirtualPPCRsDuPGS $PGS] set Ok 0 set LesMauvaisSujets {} foreach N $LesVPs { set Sujet [VirtualPPCREnStock $N "Sujet"] if { ! [regexp {[0-9]+\-[0-9]+$} $Sujet] } { lappend LesMauvaisSujets "$N $Sujet" continue } Espionne [VirtualPPCREnStock $N "Resume"] regsub -all -- {\-} $Sujet " " Mots set LesMots [split $Mots " "] set Ds [lindex $LesMots end-1] set Fs [lindex $LesMots end] regsub -- "\-$D\-$F$" $Sujet "" PName set Dp $D set Fp $F if {$Ds==2 && $Dp==1} { set Dp 2 } if {$Ds==2 && $Dp==3} { set Dp 2 } if {[expr abs($Fs-$Fp)<=1]} { set Fp $Fs } if {$Dp==$Ds && $Fp==$Fs} { set Ok 1 ; break } lappend LesMauvaisSujets "$N $Sujet" } if {$Ok} { if {$Dp!=$D || $Fp!=$F} { lappend LesMauvaisesLimites "$VE $ProtName $D>$Dp $F>$Fp [VirtualPPCREnStock $N]" } set Vecteur [FindVector NameOf_$Vectorname] set R1 "${N}_pDONR207" set NduR [Rec1 $R1 N] if {$NduR!=$N} { lappend LesNonGateway "$N n'a pas de Rec1 $VE [VEDidier $VE Ligne]" continue } set Type [TypeDeVecteurGateway $Vecteur] if {$Type!=2} { lappend LesNonGateway "$N son $Vectorname n'est pas Gateway $VE [VEDidier $VE Ligne]" continue } lappend LaSortie "$VE $R1 $Vecteur $PGS $AliasGscope $D $F $Vectorname $Scientist [VirtualPPCREnStock $N]" } else { lappend LesMauvais "nothing for $VE $PGS $AliasGscope $D $F $Vectorname $Scientist" lappend LesMauvais [join $LesMauvaisSujets "\n"] lappend LesMauvais "" } } set LaSortie [lsort $LaSortie] if {$LesNonCodeRipp!={}} { Espionne [SauveLesLignes $LesNonCodeRipp dans "[Fiches]/NonCodeRipp.txt"] } if {$LesNonPGS!={}} { Espionne [SauveLesLignes $LesNonPGS dans "[Fiches]/NonPGS.txt"] } if {$Action!="ShowOnly"} { if {$LesNonPGS!={}} { Espionne [SauveLesLignes $LesNonPGS dans "[Fiches]/NonPGS.txt"] } if {$LesMauvaisProtName!={}} { Espionne [SauveLesLignes $LesMauvaisProtName dans "[Fiches]/MauvaisProtName.txt"] } if {$LesMauvaisesLimites!={}} { Espionne [SauveLesLignes $LesMauvaisesLimites dans "[Fiches]/MauvaisesLimites.txt"] } if {$LesNonGateway!={}} { Espionne [SauveLesLignes $LesNonGateway dans "[Fiches]/NonGateway.txt"] } if {$LesVecteursManquants!={}} { set LesVecteursManquants [lsort -unique $LesVecteursManquants] Espionne [SauveLesLignes $LesVecteursManquants dans "[Fiches]/VecteursManquants.txt"] } SauveLesLignes $LaSortie dans $FichierVEDidierCompatiblesGscope } if {$Action=="GetList"} { return $LaSortie } AfficheVariable [join $LesMauvais "\n"] return [AfficheVariable [join $LaSortie "\n"]] } proc LesValeursNormalisees {LesValeurs} { set LesValeursNormalisees {} set LaMoyEtLET [MoyenneEcartMinMaxCumulLong $LesValeurs] set Moy [lindex $LaMoyEtLET 0] set ET [lindex $LaMoyEtLET 1] foreach Valeur $LesValeurs { if {$ET != 0} { lappend LesValeursNormalisees [expr ($Valeur - $Moy) * 1.0 / $ET] } else { lappend LesValeursNormalisees [expr ($Valeur - $Moy)] } } return $LesValeursNormalisees } proc LesValueursExtremes {FichierDepart} { set premierefois 1 foreach Ligne [LesLignesDuFichier $FichierDepart] { if {[regexp "Probe" $Ligne]} {continue} set Valeur [lindex [split $Ligne "\t"] 1] if {$premierefois} { set petit $Valeur set grand $Valeur set premierefois 0 } else { if {$Valeur>$grand} {set grand $Valeur} if {$Valeur<$petit} {set petit $Valeur} } } Espionne "le plus grand $grand" Espionne "le plus petit $petit" } proc LesVecteurs {{VecType ""} {GetThem ""}} { if {$VecType==""} { set VecType "pDONR_pDEST" } if {$GetThem==""} { set GetThem "GetFilenames" } set GetFilenames [string equal -nocase $GetThem "GetFilenames"] set GetNames [string equal -nocase $GetThem "GetNames"] set LesPossible {} if {[regexp "pDONR" $VecType]} { LConcat LesPossibles [LesFichiersDeType "pDONR" "" "GetAll"] } if {[regexp "pDEST" $VecType]} { LConcat LesPossibles [LesFichiersDeType "pDEST" "" "GetAll"] } if {$GetNames} { set LesNames {} foreach F $LesPossibles { set Name [file tail $F] regsub {\.tfa} $Name "" Name lappend LesNames $Name } return $LesNames } if {$GetFilenames} { return $LesPossibles } } proc LesVieuxLiens {} { foreach RF [glob "/genomics/*/*/banques"] { foreach Lien [glob -nocomplain "$RF/*"] { if {[file type $Lien]!="link"} { continue } set Cible [file readlink $Lien] set QueueCible [file tail $Cible] set RepCible [file dirname $Cible] if {[file tail $RepCible]=="banques"} { set Autre [file tail [file dirname $RepCible]] set BonAutre "[GscopeDatabaseDir $Autre]/banques/$QueueCible" Espionne "\n" Espionne $Lien exec rm $Lien exec ln -s $BonAutre $Lien } } } } proc LesVirtualPPCRsDuPGS {PGS} { global LesVirtualPPCRsDuPGS if {[info exists LesVirtualPPCRsDuPGS($PGS)]} { return [set LesVirtualPPCRsDuPGS($PGS)] } if {[info exists LesVirtualPPCRsDuPGS("EstCharge")]} { return {} } set LesVirtualPPCRsDuPGS("EstCharge") 1 foreach Loc [LocalisationDesVirtualPPCRs "GetAllLocs"] { scan $Loc "%s %s %d %s %d %d %s %d %s" NLu PGSLu DPLu Tiret1 FPLu DNLu Tiret2 FNLu FullNameMemo lappend LesVirtualPPCRsDuPGS($PGSLu) $NLu } return [LesVirtualPPCRsDuPGS $PGS] } proc LesZonesDuBlastNEnOverlap {Fichier} { global RepertoireDuGenome global LesORFsEnOverlap global ListeDeBoites set FichierTesBornes "$Fichier.tesbornes" set FichierMesBornes "$Fichier.mesbornes" set FichierMesOverlaps "$Fichier.mesoverlaps" set FichierMesSolitaires "$Fichier.messolitaires" set FichierMesConviviaux "$Fichier.mesconviviaux" set FichierMesInteressants "$Fichier.mesinteressants" foreach Ligne [LesLignesDuFichier $FichierTesBornes] { ExtraireDe $Ligne Nom Debut Fin Orient regsub "TaZone" $Nom "MaZone" MonNom set TaZone($MonNom) $Ligne } foreach Ligne [LesLignesDuFichier $FichierMesBornes] { ExtraireDe $Ligne Nom Debut Fin Orient if {[info exists DejaVu($Debut,$Fin,$Orient)]} { Espionne "DejaVu [set DejaVu($Debut,$Fin,$Orient)] $Nom" continue } set Long [expr $Fin-$Debut+1] if {$Long<1000} { continue } set Frame [NomDeLaFrame [expr $Debut%3] $Orient] 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 $Long set DejaVu($Debut,$Fin,$Orient) $Nom lappend ListeDeBoites $Boite } CalculeLesORFsEnOverlap foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] set Over [CalculeLesOverlapsDe $Nom] if {$Over == ""} { continue } if {[regexp "I am in" $Over]} { set EstIn($Nom) 1 } } foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] if {[info exists EstIn($Nom)]} { continue } set Over [CalculeLesOverlapsDe $Nom] lappend Interessants $Nom if {$Over == ""} { lappend Solitaires $Nom continue } lappend Conviviaux $Nom foreach Ligne [split $Over "\n"] { if {[regexp "I contain" $Ligne]} { continue } set Toi [StringApres " in " dans $Ligne] if {[info exists EstIn($Toi)]} { continue } set Longueur [IntegerApres "Overlap\:" dans $Ligne] if {$Longueur<100} { continue } if {[Box $Nom orient]!=[Box $Toi orient]} { continue } if {[info exists DejaVu($Nom,$Toi)]} { continue } set DejaVu($Toi,$Nom) 1 lappend MoiToi $Nom lappend MoiToi $Toi lappend MoiToi $Longueur } } set OldMoi "" foreach {Moi Toi Longueur} $MoiToi { if {$OldMoi != $Moi } { lappend SortieOverlaps "$Moi [Box $Moi debut] [Box $Moi fin] [Box $Moi orient]" set LongMoi [expr [Box $Moi fin]-[Box $Moi debut]+1] } set OldMoi $Moi set LongToi [expr [Box $Toi fin]-[Box $Toi debut]+1] lappend SortieOverlaps "[string repeat " " [string length $Moi]] [Box $Toi debut] [Box $Toi fin] [Box $Toi orient] $Toi $LongMoi $LongToi $Longueur" } foreach Nom $Solitaires { lappend SortieSolitaires "$Nom [Box $Nom debut] [Box $Nom fin] [Box $Nom orient] [set TaZone($Nom)]" } foreach Nom $Conviviaux { lappend SortieConviviaux "$Nom [Box $Nom debut] [Box $Nom fin] [Box $Nom orient] [set TaZone($Nom)]" } foreach Nom $Interessants { lappend SortieInteressants "$Nom [Box $Nom debut] [Box $Nom fin] [Box $Nom orient] [set TaZone($Nom)]" } Espionne [SauveLesLignes $SortieSolitaires dans $FichierMesSolitaires] Espionne [SauveLesLignes $SortieConviviaux dans $FichierMesConviviaux] Espionne [SauveLesLignes $SortieOverlaps dans $FichierMesOverlaps] Espionne [SauveLesLignes $SortieInteressants dans $FichierMesInteressants] exit } 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 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 LesZscoreDesRequetesDuGroupe {LesRequetesDesIndividusDuGroupe LesRequetesDesTouteLaPopulation} { #Liste dont chaque element est la liste des requetes d'un individu set R [llength $LesRequetesDesIndividusDuGroupe] set N [llength $LesRequetesDesTouteLaPopulation] set ToutesLesRequetes {} foreach LesRequetes $LesRequetesDesIndividusDuGroupe { foreach Requete [lsort -unique $LesRequetes] { if {![info exists Tab(Requete,$Requete,r)]} { set Tab(Requete,$Requete,r) 0 set Tab(Requete,$Requete,n) 0 lappend ToutesLesRequetes $Requete } incr Tab(Requete,$Requete,r) } } foreach LesRequetes $LesRequetesDesTouteLaPopulation { foreach Requete [lsort -unique $LesRequetes] { if {![info exists Tab(Requete,$Requete,r)]} { set Tab(Requete,$Requete,r) 0 set Tab(Requete,$Requete,n) 0 lappend ToutesLesRequetes $Requete } incr Tab(Requete,$Requete,n) } } set LesZscoreDesRequetes {} foreach Requete [lsort -unique $ToutesLesRequetes] { set r [set Tab(Requete,$Requete,r)] set n [set Tab(Requete,$Requete,n)] if {$n == 0 || $N == 0 || $R == 0 || $N == $R || ($n == $r && $N == $R) || ($r == $R && $n == $N)} {continue} set zscore [ZScore $r $R $n $N] if {$zscore == ""} {continue} lappend LesZscoreDesRequetes [list $Requete $zscore $r $R $n $N] } return [lsort -index 1 -decreasing -real $LesZscoreDesRequetes] } proc LesmRNAsChoisisHuman {FichierClusters FichierSortie} { foreach PAB [ListeDesJR $FichierClusters] { set AccessmRNA [InterrogeProtAndmRNAChoisis $PAB mRNAChoisi Access] set Orga [InterrogeProtAndmRNAChoisis $PAB OrganismeChoisi] if {$AccessmRNA=="" || $AccessmRNA=="NOMRNA"} { continue } elseif {[regexp -nocase "HOMO SAPIENS" $Orga]} { #Espionne $AccessmRNA lappend LesAccessDesmRNAsChoisis "$AccessmRNA" } } #Espionne [llength $LesAccessDesmRNAsChoisis] set L [lsort -unique $LesAccessDesmRNAsChoisis] Espionne [llength $L] #SauveLesLignes $L dans "[RepertoireDuGenome]/LesAccessDesmRNAsChoisis" #FaireLire $L set LesAccessChoisis [split $L " "] set LesAccessPourGetz [join $LesAccessChoisis "\|"] #FaireLire $LesAccessPourGetz set Commande "getz \"\\\[genbankfull-acc:$LesAccessPourGetz\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] AppendAuFichier $FichierSortie $GetzOut set i 0 set n 0 foreach Ligne [LesLignesDuFichier $FichierSortie] { #Espionne $Ligne if {[regexp "^>" $Ligne]} { incr n set LesInfos [split $Ligne "\|"] set Access [lindex $LesInfos 1] set FichiermRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_choisis/$Access" if {![info exists Vu($Access)]} { set Vu($Access) 1 incr i AppendAuFichier $FichiermRNA $Ligne #AppendAuFichier $Fichiersortie2 $Ligne Espionne $Access lappend Liste $Access } } if {[info exists Vu($Access)] && ([regexp "^A" $Ligne] || [regexp "^T" $Ligne] || [regexp "^G" $Ligne] || [regexp "^C" $Ligne])} { AppendAuFichier $FichiermRNA $Ligne #AppendAuFichier $Fichiersortie2 $Ligne } } Espionne "$n tfas" Espionne "nb access: [llength $Liste]" Espionne "nb tfas apres: $i" } proc LesmRNAsDeLaProt {BIdOuAccess} { return [LesmRNAsDeLaProt_PageInfo [PageInfo $BIdOuAccess protein]] } proc LesmRNAsDeLaProt_PageInfo {PageInfo {EtDeLOrga ""}} { set LesmRNAs {} set LesAccess [LesAcNucsDeLaProt_PageInfo $PageInfo] AskLesPagesInfos load $LesAccess genbankfull foreach AcNuc $LesAccess { set PageInfo [AskLesPagesInfos ask $AcNuc] if {$PageInfo == ""} {continue} if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} {continue} if {$EtDeLOrga != ""} { set EstCeUnDesOrgas 0 foreach Orga [LesOrgasDeLaPage_PageInfo $PageInfo] { if {[string equal -nocase $Orga $EtDeLOrga]} {set EstCeUnDesOrgas 1;break} } if {!$EstCeUnDesOrgas} {continue} } lappend LesmRNAs $AcNuc } AskLesPagesInfos unset return $LesmRNAs } proc LesmRNAsDesAcNucs {LesAccess} { AskLesPagesInfos unset AskLesPagesInfos load $LesAccess genbankfull set LesmRNAs {} foreach Access $LesAccess { set PageInfo [AskLesPagesInfos ask $Access] if {$PageInfo == ""} {continue} if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} {continue} lappend LesmRNAs $Access } AskLesPagesInfos unset return $LesmRNAs } proc LesmRNAsDuBlast {FileBlast {ExpectMax 0.001} {NbSubjectMax 500}} { set NbSubjectDansBlast [AskBlast $FileBlast NbSubject] set LesBId {} set n 0 for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [AskBlast $FileBlast Subject $i] if {[info exists Tab($BId,LesOrganismes)]} {continue} set Expect [AskBlast $FileBlast BanqueId $BId Segment 1 Expect ] set Score [AskBlast $FileBlast BanqueId $BId Segment 1 Score ] if {$ExpectMax < $Expect} {continue} incr n if {$NbSubjectMax < $n } {break} lappend LesBId $BId } set LesmRNAs {} AskLesPagesInfos load $LesBId genbankfull foreach BId $LesBId { if {[info exists Tab($BId,LesOrganismes)]} {continue} set PageInfo [AskLesPagesInfos ask $BId] if {$PageInfo == ""} {continue} if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} {continue} set Access [string toupper [AskBlast $FileBlast BanqueId $BId Access]] set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLAcNuc_PageInfo $PageInfo] " "] if {$Def == ""} {set Def "Not found"} set Taille [AskBlast $FileBlast BanqueId $BId Taille ] scan $Score "%f" Score set Orientation [AskBlast $FileBlast BanqueId $BId Segment 1 Orientation] set PIdGlob [PourcentageDIdentiteGlobal $FileBlast $BId] set NbBasesEnCommun [NombreDeBasesEnCommun $FileBlast $BId] set LeProfil [LeProfilDeLAlignementDuSubject $FileBlast $BId] set NbInCDS 0 set NbIn5UTR 0 set NbIn3UTR 0 set n 0 if {[info exists DbtCDS]} {unset DbtCDS} if {[info exists FinCDS]} {unset FinCDS} regexp { CDS [^0-9]+([0-9]+)\.[ ]*\.([0-9]+)} $PageInfo tmp DbtCDS FinCDS if {![info exists DbtCDS] || ![info exists FinCDS]} {continue} foreach Base $LeProfil { incr n if {$Base == 0} {continue} if {[info exists DbtCDS] && [info exists FinCDS]} { if {$DbtCDS <= $n && $n <= $FinCDS} {incr NbInCDS} if {$n < $DbtCDS } {incr NbIn5UTR} if {$FinCDS < $n } {incr NbIn3UTR} } } set TailleCDS [expr $FinCDS - $DbtCDS + 1] set Tab($BId,LesOrganismes) $LesOrgas foreach Orga $LesOrgas { set LesProteines {} foreach Prot [LesProteinesDeLAcNuc_PageInfo $PageInfo] {lappend LesProteines [string toupper $Prot]} lappend LesmRNAs [list $BId $Access $Taille $TailleCDS $Orientation $Expect $Score $PIdGlob $NbBasesEnCommun $NbIn5UTR $NbInCDS $NbIn3UTR $Orga $Def $LesProteines "mRNA"] } } set LesmRNAs [lsort -real -decreasing -index 2 $LesmRNAs] set LesmRNAs [lsort -real -decreasing -index 10 $LesmRNAs] set LesmRNAs [lsort -real -decreasing -index 7 $LesmRNAs] set LesmRNAs [lsort -integer -decreasing -index 8 $LesmRNAs] AskBlast unset AskLesPagesInfos unset return $LesmRNAs } proc LesmRNAsDuBlast_TabBlast {aTabBlast} { upvar $aTabBlast TabBlast set LesmRNAs {} set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i)] if {[info exists Tab($BId,LesOrganismes)]} {continue} set Access [string toupper [set TabBlast($BId,Access)]] set PageInfo [PageInfo $BId genbank] if {$PageInfo == ""} {continue} if {![EstCeUnmRNACompleteCDS_PageInfo $PageInfo]} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLAcNuc_PageInfo $PageInfo] " "] if {$Def == ""} {set Def "Not found"} set Expect [set TabBlast($BId,1,Expect) ] set Score [set TabBlast($BId,1,Score) ] set Taille [set TabBlast($BId,Taille) ] scan $Score "%f" Score set Orientation [set TabBlast($BId,1,Orientation)] set PIdGlob [PourcentageDIdentiteGlobal_TabBlast TabBlast $BId] set NbBasesEnCommun [NombreDeBasesEnCommun_TabBlast TabBlast $BId] set LeProfil [LeProfilDeLAlignementDuSubject_TabBlast TabBlast $BId] set NbInCDS 0 set NbIn5UTR 0 set NbIn3UTR 0 set n 0 if {[info exists DbtCDS]} {unset DbtCDS} if {[info exists FinCDS]} {unset FinCDS} Espionne $BId regexp { CDS [^0-9]+([0-9]+)\.[ ]*\.([0-9]+)} $PageInfo tmp DbtCDS FinCDS if {![info exists DbtCDS] || ![info exists FinCDS]} {continue} foreach Base $LeProfil { incr n if {$Base == 0} {continue} if {[info exists DbtCDS] && [info exists FinCDS]} { if {$DbtCDS <= $n && $n <= $FinCDS} {incr NbInCDS} if {$n < $DbtCDS } {incr NbIn5UTR} if {$FinCDS < $n } {incr NbIn3UTR} } } set TailleCDS [expr $FinCDS - $DbtCDS + 1] set Tab($BId,LesOrganismes) $LesOrgas foreach Orga $LesOrgas { set LesProteines {} foreach Prot [LesProteinesDeLAcNuc_PageInfo $PageInfo] {lappend LesProteines [string toupper $Prot]} lappend LesmRNAs [list $BId $Access $Taille $TailleCDS $Orientation $Expect $Score $PIdGlob $NbBasesEnCommun $NbIn5UTR $NbInCDS $NbIn3UTR $Orga $Def $LesProteines "mRNA"] } } set LesmRNAs [lsort -real -decreasing -index 2 $LesmRNAs] set LesmRNAs [lsort -real -decreasing -index 10 $LesmRNAs] set LesmRNAs [lsort -real -decreasing -index 7 $LesmRNAs] set LesmRNAs [lsort -integer -decreasing -index 8 $LesmRNAs] return $LesmRNAs } proc LgtDescriptif {} { global TDesDescriptifs set max -1 foreach e [array names TDesDescriptifs] { set l [string length [set TDesDescriptifs($e)]] if {$l > $max} {set max $l} } return $max } proc LibraryEditorGui {} { NSLibraryEditorGui::initNS NSLibraryEditorGui::showGui } proc LienEntreExpEtPuce {ExpCourt} { global LienEntreExpEtPuce if {[info exists LienEntreExpEtPuce($ExpCourt)]} { return $LienEntreExpEtPuce($ExpCourt) } if {[info exists LienEntreExpEtPuce("EstCharge")]} { return {} } set LienEntreExpEtPuce("EstCharge") 1 set LesLignes {} CanalSqlBioArrayBase foreach {Ex Ch} [SqlExec "select distinct e.description, at.type from retinobase3.realexp re, retinobase3.experiment e, retinobase3.arraytype at where re.pk_experiment = e.pk_experiment and re.pk_arraytype = at.pk_arraytype;" "GetList"] { lappend LesLignes "$Ex\t$Ch" } CanalSqlDisconnect foreach Ligne $LesLignes { set LesElmts {}; set LesElmtsChip {}; set LesElmtsChipPris {} #Espionne "$Ligne" set LesElmts [split $Ligne "\t"] set ExpLu [lindex $LesElmts 0] set ExpRaccourci [string range $ExpLu 0 24] #Espionne "1 $ExpLu" regsub -all " " $ExpRaccourci "_" ExpRaccourci #Espionne "2 $ExpRaccourci" set ChipLu [lindex $LesElmts 1] #Espionne "4 $ChipLu" set LesElmtsChip [split $ChipLu " "] set nbelmtchip [llength $LesElmtsChip] if {$nbelmtchip==1} { set ChipLu [lindex $LesElmtsChip 0] } else { for {set j 0} {$j<[expr $nbelmtchip-1]} {incr j} { lappend LesElmtsChipPris [lindex $LesElmtsChip $j] } set ChipLu [join $LesElmtsChipPris " "] } #Espionne "5 $ChipLu" set LienEntreExpEtPuce($ExpRaccourci) $ChipLu } return [LienEntreExpEtPuce $ExpCourt] } proc LiensAgents {n agn ns} { global TAg LNOrdali set Link {} foreach ki [array names T "$n,*"] { lassign [split $ki ,] ni ai set Li [lsearch -index 0 -exact $T($ki) $nt] foreach ipair $Li { lassign [lindex $T($ki) $ipair] tmp agt lappend Link $ni $ai $nt $agt } } return $Link } proc LigneAcPlsAccess {} { set A 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] set deuxvides 0 set jaitrouve 0 if {!$deuxvides && $Ac2!=""} { if {[regexp {\,} $Ac2]} { incr A #puts "ligne $I a pls access ds refseq_piqor=> $Ac2" #ok il y a les 57 } } if {!$deuxvides && $Ac1!=""} { if {[regexp {\,} $Ac1]} { set B 0 #Ac1 a tjs un seul access #puts "ligne $I a pls access ds dna_acc" } } if {$Ac1!="" && $Ac2!=""} { set deuxpleins 1 if {[regexp {\,} $Ac2]} { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus} $Genre]} { puts "ligne $I a un access ds dna_acc et pls access ds refseq_piqor" if { $Ac1==$Ac2 } { set jaitrouve 1 puts "la ligne $I a le meme access ds dna_acc et refseq_piqor" } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { set jaitrouve 1 puts "la ligne $I a un access ds dna_acc qui se retrouve ds refseq_piqor" } } } if { !$jaitrouve } { puts "la ligne $I a un access ds dna_acc qui ne se retrouve pas dans refseq_piqor" } } } } } puts "A=$A" } proc LigneAcPlsAccess_AEffacer {} { set A 0 foreach I [RetChip2 ListOf Index] { set Des1 [RetChip2 $I "description_customer"] set Des2 [RetChip2 $I "description_memorec"] set Ac1 [RetChip2 $I "DNA_acc"] set Ac2 [RetChip2 $I "refseq_PIQOR"] set Ac3 [RetChip2 $I "prot_acc"] set Ac4 [RetChip2 $I "prot_acc_PIQOR"] set deuxvides 0 set jaitrouve 0 if {!$deuxvides && $Ac2!=""} { if {[regexp {\,} $Ac2]} { incr A #puts "ligne $I a pls access ds refseq_piqor=> $Ac2" #ok il y a les 57 } } if {!$deuxvides && $Ac1!=""} { if {[regexp {\,} $Ac1]} { set B 0 #Ac1 a tjs un seul access #puts "ligne $I a pls access ds dna_acc" } } if {$Ac1!="" && $Ac2!=""} { set deuxpleins 1 if {[regexp {\,} $Ac2]} { set Genre [OrgDuNmOuGb $Ac1] if {[regexp {^Mus} $Genre]} { puts "ligne $I a un access ds dna_acc et pls access ds refseq_piqor" if { $Ac1==$Ac2 } { set jaitrouve 1 puts "la ligne $I a le meme access ds dna_acc et refseq_piqor" } if { $jaitrouve == 0 && [regexp {.\,.} $Ac2] } { set LesNMs [split $Ac2 ","] foreach LeNM $LesNMs { if { $LeNM==$Ac1 } { set jaitrouve 1 puts "la ligne $I a un access ds dna_acc qui se retrouve ds refseq_piqor" } } } if { !$jaitrouve } { puts "la ligne $I a un access ds dna_acc qui ne se retrouve pas dans refseq_piqor" } } } } } puts "A=$A" } proc LigneAccessPourLOligo {P} { set LesSujets [Oli $P Subjects] set Sens [Oli $P Sens] set Signals [Oli $P Signals] set Seq [Oli $P Seq] set SeqSujet [Oli $P SeqSubject] set Type [Oli $P Type] set TypeUtilisation $Type if {$Type=="SynOli"} { set TypeUtilisation "PCR" } set Fournis [Fournisseur $P] set OlIgbmc [OlIgbmc $P] set Tm [TMDeLaSequence $SeqSujet] set LesPoMa [PositionSurMatrices $P] if {0 && [llength $LesPoMa]>1 && $Type!="MutOli"} { FaireLire "I found more than 1 matrix for $P. Please select one of them." set PoMa [ChoixParmi $LesPoMa] } else { set PoMa [lindex $LesPoMa 0] } set AA -1 set NA -1 set Orient "F" set PAB "" scan $PoMa "%s %d %d %s %s" P AA NA Orient PAB if {$AA<0} { set Matrice "" } else { set Matrice [Alias $PAB] } set Sens "" if {$Orient=="F"} { set Sens "sens" set Tm5p "tm5p_$Tm" set LesSST {} foreach Suj $LesSujets { set SST "${Signals}_$Suj $Tm5p" lappend LesSST $SST } set signal [join $LesSST "+"] } if {$Orient=="R"} { set Sens "antisens" set Tm3p "tm3p_$Tm" set LesSST {} foreach Suj $LesSujets { set SST "${Suj}_${Signals} $Tm3p" lappend LesSST $SST } set signal [join $LesSST "+"] } set code_IGBMC $OlIgbmc regsub "OLIGO\:" $code_IGBMC "" code_IGBMC set sequence $Seq set brin $Sens set proteine $Matrice if {$Type=="MutOli"} { set mutation [Oli $P CodeMutation] } else { set mutation "" } set utilisation $TypeUtilisation set longueur [string length $Seq] set signal $signal if {$Fournis!=""} { set demandeur $Fournis } else { set demandeur "" } set date_commande "" set date_reception "" set codon_de_l_oligo1 "" set boite "" set LaLigne {} lappend LaLigne $P lappend LaLigne $code_IGBMC lappend LaLigne $sequence lappend LaLigne $brin lappend LaLigne $proteine lappend LaLigne $mutation lappend LaLigne $utilisation lappend LaLigne $longueur lappend LaLigne $signal lappend LaLigne $demandeur lappend LaLigne $date_commande lappend LaLigne $date_reception lappend LaLigne $codon_de_l_oligo1 lappend LaLigne $boite set Ligne [join $LaLigne "\"\t\""] set Ligne "\"$Ligne\"" return $Ligne } proc LigneDesMots {Ligne {REX ""}} { if {$REX==""} { set REX "\;" } regsub -all "$REX|\t" $Ligne " " Ligne if {$REX!=" "} { while {[regexp " " $Ligne]} { regsub -all " " $Ligne " " Ligne } } set Ligne [string trim $Ligne] return $Ligne } proc LigneDuFichierJumeauxSeqNuc {Nom} { global RepertoireDuGenome set FichierJumeauxSeqNuc "$RepertoireDuGenome/fiches/jumeaux_SeqNuc" if {![file exists $FichierJumeauxSeqNuc]} { if {[OuiOuNon "Do You want to run Jumeaux ?"]} { set FichierDesJumeaux [Jumeaux "Ask"] } else {return ""} } foreach Ligne [LesLignesDuFichier $FichierJumeauxSeqNuc] { if {[regexp "$Nom" $Ligne]} { return $Ligne } } } proc LignesEMBLtoTFA {LesLignesEMBL Entete} { set iSQ [lsearch -regexp $LesLignesEMBL "^SQ"] set Sequence "" if {$iSQ!="end"} { regsub -all {[ 0-9/\n\t]} [join [lrange $LesLignesEMBL [incr iSQ] end] ""] "" Sequence } set TFA ">$Entete\n[SequenceFormatBrut $Sequence]" return $TFA } proc LignesParGb {GB} { return [GbsParLigne $GB] } proc LignesParNm {NM} { return [NmsParLigne $NM] } proc LineageFromGI {LId} { array set T [eSummaryREST protein $LId] set Ltxid [list] foreach id $LId { lappend Ltxid [set T($id,TaxId)] } set Llin [list] array set Tx [eFetchREST taxonomy $Ltxid] foreach t $Ltxid { if {[info exists Tx($t,Lineage)]} { lappend Llin $Tx($t,Lineage) } else { lappend Llin "" } } return $Llin } proc Link2HTML {aT} { upvar $aT tbl Html_Href $tbl(textLink) $tbl(targetLink) return } proc LireHori {Fichier {FichierSuivant ""}} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp "^PH" $Ligne]} { continue } set LesMots [split $Ligne ","] scan $LesMots "%s %s %d %d" NomLu PM Debut Fin if {$PM=="+"} { set Orient "F" } if {$PM=="-"} { set Orient "R" } regsub -all -nocase {[a-z]} $NomLu "" Numero scan $Numero "%d" N set Nom [PreFixe][format "%4.4d" $N] lappend LesBornes "$Nom $Debut $Fin $Orient" } if {$FichierSuivant!=""} { set N [Maxi $Numero 3000] foreach Ligne [LesLignesDuFichier $FichierSuivant] { if { ! [regexp "^PH" $Ligne]} { continue } set LesMots [split $Ligne ","] scan $LesMots "%s %s %d %d" NomLu PM Debut Fin if {$PM=="+"} { set Orient "F" } if {$PM=="-"} { set Orient "R" } set Nom [PreFixe][format "%4.4d" [incr N]] lappend LesBornes "$Nom $Debut $Fin $Orient" } } Espionne [SauveLesLignes $LesBornes dans "$RepertoireDuGenome/fiches/bornesdespabs.nouveaux"] } proc LireMSF {ListeMSF LesNoms aProteines BorneSup} { upvar $aProteines Proteines set FinNoms [expr [lsearch $ListeMSF "//"]] set ListeMSF [lrange $ListeMSF $FinNoms end] #determination de la colonne ou commence les sequences set PremierNom [lindex $LesNoms 0] set DebutProt [lsearch -regexp $ListeMSF $PremierNom] regexp -indices $PremierNom [lindex $ListeMSF $DebutProt] Rang set ColDebutSeq [expr [lindex $Rang 1]+1] while {[string index [lindex $ListeMSF $DebutProt] $ColDebutSeq]== " "} { incr ColDebutSeq } foreach ligne $ListeMSF { if {$ligne==""} continue scan $ligne "%s" Nom if {[lsearch $LesNoms $Nom]==-1} continue set Sequence [string range $ligne $ColDebutSeq end] regsub -all " " $Sequence "" Sequence lappend Proteines($Nom) $Sequence } foreach Nom $LesNoms { set Intermed [join [set Proteines($Nom)] ""] set Proteines($Nom) [split $Intermed ""] } set Longueur [llength [set Proteines([lindex $LesNoms 0])]] set j 1 for {set i 1} {$i<=$Longueur} {incr i} { set Compteur 0 foreach Nom $LesNoms { set aa [lindex [set Proteines($Nom)] [expr $i-1]] set AA($Nom,$j) $aa if {$aa!="." & $aa!="~"} { incr Compteur } } if {$Compteur} { incr j } if {$j==$BorneSup} break } set Longueur [expr $j-1] foreach Nom $LesNoms { set Proteines($Nom) [list] for {set i 1} {$i<=$Longueur} {incr i} { lappend Proteines($Nom) [set AA($Nom,$i)] } } return $Longueur } proc LireUnMsf {listeMSF anoms_sequences alespositions alesproteines} { upvar $anoms_sequences noms_sequences upvar $alesproteines lesproteines upvar $alespositions lespositions #lit une liste contenant un msf, donne la liste des noms de sequences et retourne les proteines dans un tableau de listes set noms_sequences [list] set lespositions [list] #creation de noms_sequences set indice [lsearch -regexp $listeMSF "Name:"] set fin_liste_noms [lsearch $listeMSF "//"] while {$indice<$fin_liste_noms} { set fin_access [expr [string wordend [lindex $listeMSF $indice] 7]-1] set [string range [lindex $listeMSF $indice] 7 $fin_access] [list] lappend noms_sequences [string range [lindex $listeMSF $indice] 7 $fin_access] incr indice } #initialisation du tableau des sequences proteiques foreach ns $noms_sequences { set lesproteines($ns) {} } set listeMSF [lrange $listeMSF [expr $fin_liste_noms+2] end] set debut_des_prot [lsearch -regexp $listeMSF [lindex $noms_sequences 0]] regexp -indices [lindex $noms_sequences 0] [lindex $listeMSF $debut_des_prot] rang set col_debut_seq [expr [lindex $rang 1]+1] while {[string index [lindex $listeMSF $debut_des_prot] $col_debut_seq]== " "} { incr col_debut_seq } #remplissage du tableau de sequences proteiques, chaque element du tableau est une liste d'aa while {!($debut_des_prot==-1)} { foreach ns $noms_sequences { set chaine_intermed [string range [lindex $listeMSF $debut_des_prot] $col_debut_seq end] regsub -all " " $chaine_intermed "" chaine_intermed for {set i 0} {$i<[string length $chaine_intermed]} {incr i} { lappend lesproteines($ns) [string index $chaine_intermed $i] } incr debut_des_prot } set listeMSF [lrange $listeMSF [expr $debut_des_prot+1] end] set debut_des_prot [lsearch -regexp $listeMSF [lindex $noms_sequences 0]] } #initialisation des positions for {set i 0} {$i<[llength [set lesproteines([lindex $noms_sequences 0])]]} {incr i} { lappend lespositions $i } return [llength $noms_sequences] } proc LisBox {Conteneur {Liste ""} {LesIllumines ""}} { frame $Conteneur -borderwidth 10 pack $Conteneur -side left -expand yes -fill both set LixBox "$Conteneur.list" scrollbar $Conteneur.yscroll -command "$LixBox yview" scrollbar $Conteneur.xscroll -command "$LixBox xview" -orient horizontal set Largeur 30 set Hauteur 35 listbox $LixBox -width $Largeur -height $Hauteur -setgrid 1 -yscroll "$Conteneur.yscroll set" -xscroll "$Conteneur.xscroll set" -selectmode extended -background "LightGrey" -foreground "Black" -selectbackground "LightYellow" -selectforeground "Black" -font [list Courier [PolicePourListBox]] grid $LixBox -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $Conteneur.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $Conteneur.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $Conteneur 0 -weight 1 -minsize 0 grid columnconfig $Conteneur 0 -weight 1 -minsize 0 bind $LixBox <3> "DecrisLaLigne %W %x %y" bind $LixBox "DecrisLaLigne %W %x %y Efface" foreach Element $Liste { $LixBox insert end $Element } foreach Nom $LesIllumines { Illumine $Nom $LixBox } return $LixBox } proc Lissage {TailleFenetre LesNoms aBin aBinLisses} { upvar $aBinLisses BinLisses upvar $aBin Bin global TailleSeq set Seuil [expr $TailleFenetre/2] foreach Nom $LesNoms { set Compteur 1 for {set i 1} {$i<=$TailleSeq} {incr i $TailleFenetre} { set Somme 0 for {set j 0} {$j<$TailleFenetre && [expr $i+$j]<=$TailleSeq} {incr j} { incr Somme [set Bin($Nom,[expr $i+$j])] } if {$Somme<=$Seuil} { set BinLisses($Nom,$Compteur) 0 } else { set BinLisses($Nom,$Compteur) 1 } incr Compteur } } return [expr $Compteur-1] } proc Lissage3D {l} { # lissage par polynomes de Lagrange de ordre 5 set n [llength $l] if {$n < 5} {return} set km [expr {4*($n-1)+1}] set cof [list 0.1 0.125 0.25 0.375 0.50 0.625 0.75 0.875 1.0 0.875 0.75 0.625 0.50 0.375 0.25 0.125] for {set k 0} {$k < $km} {incr k} { set xout($k) [list 0.0 0.0 0.0] set norms($k) 0.0 } set xout([expr {$km-1}]) [lindex $l end] set C0 6144.0 set C1 -1536.0 set C2 1024.0 set i 0 set lx1 [lrange $l 0 end-4] set lx2 [lrange $l 1 end-3] set lx3 [lrange $l 2 end-2] set lx4 [lrange $l 3 end-1] set lx5 [lrange $l 4 end] foreach v1 $lx1 v2 $lx2 v3 $lx3 v4 $lx4 v5 $lx5 { for {set k 0} {$k < 16} {incr k} { set kk0 "$k." set kk4 [expr {$k - 4.0}] set kk8 [expr {$k - 8.0}] set kk12 [expr {$k - 12.0}] set kk16 [expr {$k - 16.0}] set c0 [expr {$kk4 * $kk8 * $kk12 * $kk16 / $C0}] set c1 [expr {$kk0 * $kk8 * $kk12 * $kk16 / $C1}] set c2 [expr {$kk0 * $kk4 * $kk12 * $kk16 / $C2}] set c3 [expr {$kk0 * $kk4 * $kk8 * $kk16 / $C1}] set c4 [expr {$kk0 * $kk4 * $kk8 * $kk12 / $C0}] lassign $v1 x1 y1 z1 lassign $v2 x2 y2 z2 lassign $v3 x3 y3 z3 lassign $v4 x4 y4 z4 lassign $v5 x5 y5 z5 set qipk [expr {4*$i+$k}] lassign [set xout($qipk)] xo yo zo set lecof [lindex $cof $k] set xo [expr {$xo + $lecof*($x1*$c0 + $x2*$c1 + $x3*$c2 + $x4*$c3 + $x5*$c4)}] set yo [expr {$yo + $lecof*($y1*$c0 + $y2*$c1 + $y3*$c2 + $y4*$c3 + $y5*$c4)}] set zo [expr {$zo + $lecof*($z1*$c0 + $z2*$c1 + $z3*$c2 + $z4*$c3 + $z5*$c4)}] set xout($qipk) [list $xo $yo $zo] set norms($qipk) [expr {[set norms($qipk)] + $lecof}] } incr i } for {set k 0} {$k < $km-1} {incr k} { set xout($k) [V_VS [set xout($k)] / [set norms($k)]] } foreach k [lsort -integer [array names xout]] { lappend Lo [set xout($k)] } return $Lo } proc LissageParFenetre {Lx wdt} { if {! ($wdt % 2)} { FaireLire "Smoothing coefficient should be odd !" return } set w [expr {($wdt-1)/2}] set l [llength $Lx] for {set i 0} {$i < $l} {incr i} { set d [expr {$i - $w}] set f [expr {$i + $w}] set ax 0.0 set n 0 foreach x [lrange $Lx $d $f] { set ax [expr {$ax + $x}] incr n } set nx [expr {$ax/$n}] lappend newx $nx } return $newx } proc LisseCourbe {l {w 3}} { if {[llength $l] < $w} {return 0} set rst [expr $w/2. - $w/2] if {! $rst} {incr w} set rst [expr $w/2] for {set i 0} {$i < $rst} {incr i} { lappend res [lindex $l $i] } # -1 dans test while car commence a 0 !! set n 1 while {$n <= [expr [llength $l]-$rst-1]} { set p 0. for {set i -$rst} {$i <= $rst} {incr i} { set ix [expr $n + $i] set v [lindex $l $ix] set p [expr $p + $v] } set p [expr $p/$w.] lappend res $p incr n } incr rst -1 for {set i $rst} {$i >= 0} {incr i -1} { lappend res [lindex $l end-$i] } return $res } proc ListBlastong {} { } proc ListEqual {A B} { if {[llength $A]!=[llength $B]} { return 0 } foreach a $A b $B { if {[set L [llength $a]]!=[llength $b]} { return 0 } if {$L>1} { if { ! [ListEqual $a $b]} { return 0 } } else { if {$a != $b} { return 0 } } } return 1 } proc ListFromSerial {Texte} { return [ListFromSeriallist [SeriallistFromSerial $Texte]] } proc ListFromSeriallist {Liste} { set L {} foreach {K V} [lindex $Liste 1] { lappend L [ValueFromSeriallist $V] } return $L } proc ListMix {MainList args} { if {[lindex $args 0]=="WithLists"} { set args [lindex $args 1] } set Nu 0 foreach {Op Li} $args { incr Nu foreach E $Li { set IsIn($Nu,$E) 1 } } set LesBons $MainList set Nu 0 foreach {Op Li} $args { incr Nu set LesNouveaux {} foreach E $LesBons { if {$Op=="In" && [info exists IsIn($Nu,$E)]} { lappend LesNouveaux $E } if {$Op=="No" && ! [info exists IsIn($Nu,$E)]} { lappend LesNouveaux $E } } set LesBons [lsort -unique $LesNouveaux] } return $LesBons } proc ListOfChr {{Premier ""} {Dernier ""}} { if {$Premier==""} { set Premier 1 } if {$Dernier==""} { set Dernier 25 } set LesChr {} foreach N [NombresEntre $Premier $Dernier] { set NN [format "%2.2d" $N] set Chr "Chr$NN" lappend LesChr $Chr } return $LesChr } proc ListOfCompulsoryGenes {} { foreach Nom [ListeDesPABs] { set Status [ExtraitInfo $Nom "Status"] set Status [string range $Status 0 [expr [string first "(" $Status] - 1]] if {$Status!="compulsory"} {continue} lappend ListOfCompulsoryGenes $Nom } return $ListOfCompulsoryGenes } proc ListOfEBIDatabases {} { # databanses list : # http://www.ebi.ac.uk/Tools/services/rest/ncbiblast/parameterdetails/database # set url "http://www.ebi.ac.uk/Tools/services/rest/ncbiblast/parameterdetails/database" set Lxml [HttpCopy $url] set RId [dom parse $Lxml] set doc [$RId documentElement] puts "\nDatabase Name <-> keyword" foreach nd [$doc selectNodes //values/value] { set db [$nd selectNode string(./label)] set vl [$nd selectNode string(./value)] puts "$db <-> $vl" } exit } proc ListOfGenesWith {Key Value args} { set LesR {} foreach Nom [ListeDesPABs] { set K "$Key:" set V [ExtraitInfo $Nom $K] if {[regexp {^RX_(.*)} $Value Match VV]} { if { ! [regexp $VV $V]} { continue } } else { if {$V!=$Value} { continue } } set R $Nom if {$args=={}} { lappend LesR $Nom ; continue } set LesInfos {} foreach I $args { lappend LesInfos [ExtraitInfo $Nom $I] } lappend LesR [join $LesInfos "\t"] } set LesR [lsort -unique $LesR] return $LesR } proc ListSeria {Texte} { return [eval list $Texte] } proc ListTranspose {LL} { #rR LL peut avoir des lignes de longueurs différentes #rR On est obligé de passer par un tableau à 2 dimensions set MaxICol -1 set iLig 0 foreach Ligne $LL { set iCol 0 set LesCol {} foreach e $Ligne { lappend LesCol $iCol lappend T($iLig,$iCol) $e incr iCol } set MaxICol [expr max($MaxICol,[llength $LesCol]-1)] incr iLig } set MaxILig [expr $iLig-1] set N {} set Vide "NA" foreach iCol [NombresEntre 0 $MaxICol] { set Colonne {} foreach iLig [NombresEntre 0 $MaxILig] { if {[info exists T($iLig,$iCol)]} { lappend Colonne $T($iLig,$iCol) } else { lappend Colonne $Vide } } Espionne $Colonne lappend N $Colonne } return $N } proc Liste {FichierOui FichierNon} { #FichierOui: ListeDesGenesAuxProfilsCorreles #FichierNon: ListeDesGenesAuxProfilsOpposes foreach Ligne [LesLignesDuFichier $FichierOui] { if {$Ligne==""} {continue} set LesChamps [split $Ligne "\t"] set FoldAffy [lindex $LesChamps 36] set FoldDD [lindex $LesChamps 16] if {($FoldAffy>0 && $FoldDD<0) || ($FoldAffy<0 && $FoldDD>0)} { continue } lappend Liste $Ligne } Espionne [llength $Liste] foreach Ligne [LesLignesDuFichier $FichierNon] { if {$Ligne==""} {continue} lappend Liste $Ligne } Espionne [llength $Liste] #SauveLesLignes $Liste dans "[RepertoireDuGenome]/OVERLAP931NEW/ListePourFig3A" } proc Liste489 {} { set Fichier "[RepertoireDuGenome]/essaipoub2" set LesEVIs {} foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom lappend LesEVIs $Nom Espionne $Nom } foreach x $LesEvis { puts $x } } proc ListeChroDebutFinNom {} { #a lancer dans /AffyTarget par exemple pour proc ci-dessus #car le RepertoireDuGenome est different if { ! [file exists "[RepertoireDuGenome]/fiches"]} { File mkdir "[RepertoireDuGenome]/fiches" } #set FichierDesClonesEnOverlap "[RepertoireDuGenome]/fiches/jumeaux_Overlap" set FichierBestLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" if {![file exists $FichierBestLoc]} {return "I need $FichierBestLoc"} set LesLocsNom {} foreach Nom [ListeDesPABs] { set Loc [InterrogeLocalisation $FichierBestLoc Nom $Nom] if {$Loc==""} {continue} #polyloc: if {[llength $Loc]>=2} {continue} set Loc [join $Loc ""] set Chro [lindex $Loc 9] set DSurChro [lindex $Loc 10] set FSurChro [lindex $Loc 11] if {$Chro==""} {Espionne $Nom} lappend LesLocsNom "$Chro $DSurChro $FSurChro $Nom" } Espionne [llength $LesLocsNom] SauveLesLignes $LesLocsNom dans "[RepertoireDuGenome]/Localisation/listepouroverlapavecdd" } proc ListeChroDebutFinNom_New {} { #en utilisant cette fois le fichier NuctfaLocalisation_Human_Best #cree a partir des cartes exoniques #comme si la seq ncutfa etait un mRNA... #a lancer dans /AffyTarget par exemple pour proc ci-dessus #car le RepertoireDuGenome est different if { ! [file exists "[RepertoireDuGenome]/fiches"]} { File mkdir "[RepertoireDuGenome]/fiches" } #set FichierDesClonesEnOverlap "[RepertoireDuGenome]/fiches/jumeaux_Overlap" set FichierBestLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" set FichierNew "[RepertoireDuGenome]/Localisation/NuctfaLocalisation_Human_Best" if {![file exists $FichierBestLoc]} {return "I need $FichierBestLoc"} set LesLocsNom {} foreach Nom [ListeDesPABs] { set Loc [InterrogeLocalisation $FichierNew Nom $Nom] if {$Loc==""} { set Loc [InterrogeLocalisation $FichierBestLoc Nom $Nom] } if {$Loc==""} {continue} #polyloc: if {[llength $Loc]>=2} {continue} set Loc [join $Loc ""] set Chro [lindex $Loc 9] set DSurChro [lindex $Loc 10] set FSurChro [lindex $Loc 11] if {$Chro==""} {Espionne $Nom} lappend LesLocsNom "$Chro $DSurChro $FSurChro $Nom" } Espionne [llength $LesLocsNom] #SauveLesLignes $LesLocsNom dans "[RepertoireDuGenome]/Localisation/listepouroverlapavecdd" SauveLesLignes $LesLocsNom dans "[RepertoireDuGenome]/Localisation/listepouroverlapavecdd_new" } proc ListeCompressee {liste} { set olde "HolaTriouPoilAuGenou" foreach e [lsort $liste] { if { $e != $olde } { lappend Compresse $e set olde $e } } return $Compresse } proc ListeCompulsoryEVImm {} { set i 0 set Liste [ListeDesPABs] foreach Nom $Liste { set Status [ExtraitInfo $Nom "Status"] if {[regexp "^compulsory" $Status]} { incr i set GnP [ExtraitInfo $Nom "ValiGNProt"] set Prot [ExtraitInfo $Nom "IdAccProt"] if {$GnP=="" || $GnP=="no value"} {set GnP [ExtraitInfo $Nom "ValiGN"]} lappend LesLignes "$GnP $Prot" } } set LesLignes [EnleveLignesVides $LesLignes] set LesLignes [ListeSansDoublon $LesLignes] SauveLesLignes $LesLignes dans "/home/poidevin/ordi/MS2PHProt/LesRetinalForSm2PH" } proc ListeCompulsoryPourRavi {} { set LesLignesExl [NomLigne ListeDes Lignes] foreach LigneExl $LesLignesExl { set TousLesNoms [NomLigne $LigneExl Noms] set ListeDesNoms [split $TousLesNoms " "] set NbDeNomPrUneLigne [llength $ListeDesNoms] if {$NbDeNomPrUneLigne==1} { set BonneListeDesNoms $ListeDesNoms } if {$NbDeNomPrUneLigne>1} { set BonneListeDesNoms [split [RangeMoi get EviOf $LigneExl] " "] } foreach Nom $BonneListeDesNoms { set Status [ExtraitInfo $Nom "Status"] set Status [string range $Status 0 [expr [string first "(" $Status] - 1]] if {[regexp "optional" $Status]} {continue} set Gn [ExtraitInfo $Nom "ValiGN"] set AccessmRNA [AccessEvi $Nom] set LesProbeSetId {} foreach ProbeSetId [lsort -unique [AffyAnno $AccessmRNA "Probe_Set_ID"]] { lappend LesProbeSetId $ProbeSetId } set Ps [join $LesProbeSetId ","] #set Ps [ExtraitInfo $Nom "ProbeSetId"] set Ligne "$Nom $Gn $Ps" lappend LesLignes $Ligne } } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/ListePourRavi/ListeCompulsory" } proc ListeControles {} { Wup "Rend la liste des controles choisis pour le premier design" set MaListe [list BC008848 ECOL0658 HUMTUBAK NM_006013 X53416 BC013310 ECOL3535 L05092 NM_018955] return $MaListe } proc ListeControlesActiChip {} { Wup "Liste des controles pour la puce ActiChip" global ListeControlesActiChip if {[info exists ListeControlesActiChip]} { return $ListeControlesActiChip } else { set ListeControlesActiChip "" set Dir "[RepertoireDuGenome]/Probes/Controles_ActiChip/RefSeq_Controles" set LesFichiers [glob -nocomplain -directory $Dir "*.masked"] regsub -all ".masked" $LesFichiers "" LesFichiers foreach F $LesFichiers { lappend ListeControlesActiChip [file tail $F] } } return $ListeControlesActiChip } proc ListeDeBoites {} { global ListeDeBoites if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } return $ListeDeBoites } proc ListeDes1500AffyPs {} { set LesLignes {} foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/Arnaud/nuctfa1500Final/*"] { set Nom [file tail $Fichier] set Ligne "" set AccessmRNA [AccessEvi $Nom] set Gn [ExtraitInfo $Nom "ValiGN"] set LesProbeSetId {} foreach ProbeSetId [lsort -unique [AffyAnnoMG430 $AccessmRNA "Probe_Set_ID"]] { lappend LesProbeSetId $ProbeSetId } if {$LesProbeSetId=={}} { set PSI "novalue" } else { set PSI [join $LesProbeSetId ","] } set Ligne "$Nom $AccessmRNA $Gn $PSI" Espionne "$Ligne" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/NomPsMG430" } proc ListeDes945PABsPourBlastAffy {FichierSortie} { #247 set Fichier247 "[RepertoireDuGenome]/fiches/Les247SansProtNiLoc" foreach Ligne [LesLignesDuFichier $Fichier247] { if {$Ligne==""} {continue} set Vu($Ligne) 1 } #25 set Fichier25 "[RepertoireDuGenome]/fiches/Les25ProtNotHumanNotLocated" foreach Ligne [LesLignesDuFichier $Fichier25] { if {$Ligne==""} {continue} set Vu($Ligne) 1 } foreach Nom [ListeDesPABs] { if {![info exists Vu($Nom)]} {lappend L $Nom} } Espionne [llength $L] set Ltriee [lsort -unique $L] Espionne [llength $Ltriee] SauveLesLignes $Ltriee dans $FichierSortie } proc ListeDesARNs {} { global ListeDesARNs if { ! [info exists ListeDesARNs]} { ChargeLesARNs } return $ListeDesARNs } proc ListeDesAccessPresentsDansLeMACSDeLaFamille {Famille} { Wup "Permet de rendre la liste des sequences presentes dans les MACS de references" Wup "ATTENTION on ne se base pas sur les .rsf mais sur les fichiers TFA" global TabMACS set RepARP "[RepARPAnno]" set RepMACS "$RepARP/ARP_MACS" set MACSDeRef "$RepMACS/${Famille}.rsf" set TFAMACSDeRef "$RepMACS/${Famille}.tfa" if {[info exists TabMACS] && [info exists TabMACS($Famille)]} { return "[set TabMACS($Famille)]" } if {! [file exists $TFAMACSDeRef]} {return ""} set LesAccess "" set F [open "$TFAMACSDeRef"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { set Entete "" set EnteteSplitee "" set Access "" set Entete $Ligne regsub -all "^>" $Entete "" Entete set EnteteSplitee [split $Entete " "] set Access [lindex $EnteteSplitee 0] lappend LesAccess $Access continue } continue } close $F set TabMACS($Famille) [lsort -unique $LesAccess] if {[info exists TabMACS] && [info exists TabMACS($Famille)]} { return "[set TabMACS($Famille)]" } return "" } proc ListeDesBlastnesthumanTODO {} { foreach Nom [ListeDesPABs] { Espionne $Nom set FichierBlastESThum "[RepertoireDuGenome]/blastnest/$Nom" if {![file exists $FichierBlastESThum]} { if {[file exists "[RepertoireDuGenome]/nucmask_SansBoutPlasmide/$Nom"]} { exec gscope yes BlastNPourTous est-human $Nom "[RepertoireDuGenome]/nucmask_SansBoutPlasmide" } else {exec gscope yes BlastNPourTous est-human $Nom "[RepertoireDuGenome]/nucmask"} } } } proc ListeDesBoxCibles {} { set File "/genomics/link/SpliRetMouse/CibleNaomi17092010/CibleFromNaomi_17092010.csv" foreach Ligne [LesLignesDuFichier $File] { foreach {IdOrg ClusterId} [split $Ligne ";"] { set ClusterId "cluster_$ClusterId" if {$IdOrg == "SPR"} { set Box [QuestionDeScience SpliRetRat "ret InterrogeBox $ClusterId Box"] if {$Box==""} {continue} lappend LesBoxSPR $Box } if {$IdOrg == "SPM"} { set Box [QuestionDeScience SpliRetMouse "ret InterrogeBox $ClusterId Box"] if {$Box==""} {continue} lappend LesBoxSPM $Box } } } SauveLesLignes "$LesBoxSPR" dans "/genomics/link/SpliRetMouse/CibleNaomi17092010/ListeBoxSPRCible" SauveLesLignes "$LesBoxSPM" dans "/genomics/link/SpliRetMouse/CibleNaomi17092010/ListeBoxSPMCible" } proc ListeDesChromosomesHS {} { set Liste [list HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY HSUN] return $Liste } proc ListeDesCourtsEtDesSans {} { set LesCourts [ListeLesTropCourts 25] set LesSans [ListeLesSansRien] set ListeTotale [concat $LesCourts $LesSans] #Espionne "total: [llength $ListeTotale]" set ListeTotaleTriee [lsort -increasing -index 0 $ListeTotale ] SauveLesLignes $ListeTotaleTriee dans "[RepertoireDuGenome]/fiches/ListeDesCourtsEtDesSansTriee" } proc ListeDesDDAExclure {FichierDesAExclure} { #FichierDesAExclure = "[RepertoireDuGenome]/fiches/18nolocavecgb" #ou bien : FichierDesAExclure = "[RepertoireDuGenome]/fiches/Les247SansProtNiLoc" foreach DD [ListeDesJR $FichierDesAExclure] { set Vu($DD) 1 } set FichierRedondance1SansCourts "[RepertoireDuGenome]/fiches/Redondance1SansCourts" foreach Ligne [LesLignesDuFichier $FichierRedondance1SansCourts] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { if {[info exists Vu($DD)]} {lappend LesLignesAExclure $Ligne} } } return $LesLignesAExclure } proc ListeDesDDSansLes247SansHomology {Fichier247 Fichier1195AChanger} { foreach Ligne [LesLignesDuFichier $Fichier247] { if {$Ligne==""} {continue} set Ligne [string trim $Ligne] #Espionne $Ligne set Vu($Ligne) 1 } set n 0 foreach Ligne [LesLignesDuFichier $Fichier1195AChanger] { if {$Ligne==""} {continue} set Ligne [string trim $Ligne] if {![info exists Vu($Ligne)]} {lappend L $Ligne} else {incr n} } Espionne $n Espionne [llength $L] SauveLesLignes $L dans "[RepertoireDuGenome]/fiches/948" } proc ListeDesDatasets {} { return [$::db eval {select distinct dataset from file}] } proc ListeDesDifferentiellementExprimesSansJumeaux {Affy} { if {$Affy=="target"} { set Fichier "[GscopeDatabaseDir AffyTarget]/ListeDesTargetsDifferentiellementExprimeesSansJumeaux" if {![file exists $Fichier]} {return ""} set Contenu [ContenuDuFichier $Fichier] set LesCodes [split $Contenu "\n"] } else { set Fichier "[GscopeDatabaseDir AffyHS]/ListeDesDifferentiellementExprimesSansJumeaux" if {![file exists $Fichier]} {return ""} set Contenu [ContenuDuFichier $Fichier] set LesCodes [split $Contenu " "] } set NbCodes [llength $LesCodes] #FaireLire $NbCodes return $LesCodes } proc ListeDesEntreesDuBlast {FichierBlast} { set Query [AskBlast $FichierBlast Query] set LesMots [split $Query "|"] set AccessQuery [lindex [split $Query "|"] 1] #gscope putl LaSequenceDesBanques /genomics/link/EVImm/nuctfa/EVI14790 #gscope putl LaSequenceDesBanques NM_027328 #set BIdQuery "REFSEQ:$AccessQuery" #lappend LesBId $BIdQuery set TFAQuery [LaSequenceDesBanques $AccessQuery] set TFAQuery [join $TFAQuery "\n"] set NbSujet [AskBlast $FichierBlast NbSubject] for {set i 1} {$i <= $NbSujet} {incr i} {lappend LesBId [AskBlast $FichierBlast Subject $i]} set Selection [join $LesBId "\n"] set FastaDuBlast2 "/genomics/link/EVImm/prpf31/gene/FastaDuBlast2" Espionne $Selection set TFAs [ConcatLesTFAs $Selection] Espionne $TFAs Sauve $TFAs dans $FastaDuBlast2 AppendAuFichier $FastaDuBlast2 $TFAQuery } proc ListeDesFamilles {} { set LesFamilles {} foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/xhda/famille/*.fam"] { set Queue [file tail $Fichier] regsub ".fam$" $Queue "" Famille lappend LesFamilles $Famille } return $LesFamilles } proc ListeDesFeaturesUtilisees {} { if {! [info exists ::LFeatCourantes]} { set ::LFeatCourantes {} } return $::LFeatCourantes } proc ListeDesFusions {} { global ListeDesFusions global ListeDeBoites if {[info exists ListeDesFusions]} { return $ListeDesFusions } set FichierBornesDesFusions "[RepertoireDuGenome]/fiches/bornesdesfusions" if { ! [file exists $FichierBornesDesFusions]} { set ListeDesFusions {} return $ListeDesFusions } foreach Ligne [LesLignesDuFichier $FichierBornesDesFusions] { if { ! [regexp -nocase {[a-z]} $Ligne]} {continue} ExtraireDe $Ligne Nom Debut Fin Orient Box $Nom nom $Nom Box $Nom debut $Debut Box $Nom fin $Fin Box $Nom orient $Orient if {$Orient=="F"} { Box $Nom frame "T" } else { Box $Nom frame "t" } lappend ListeDesFusions $Nom lappend ListeDeBoites $Nom } return $ListeDesFusions } proc ListeDesGLIMMERs {} { global ListeDesGLIMMERs if { ! [info exists ListeDesGLIMMERs]} { ChargeLesGLIMMERs } return $ListeDesGLIMMERs } proc ListeDesJR {FichierClusters} { set LesJR {} foreach Ligne [LesLignesDuFichier $FichierClusters] { if {$Ligne!=""} { scan $Ligne "%s" JR lappend LesJR "$JR" } } set NbJR [llength $LesJR] #Espionne "nb JR = $NbJR" return $LesJR } proc ListeDesJumeauxQuiRestentSelonLeurLocalisation {} { #attention je change jumeaux pour que proc jumeaurepresentatif marche #desormais jumeaux=jumeaux_Overlap set FichierDes623 "/genomics/link/HeadNecknonrnr/fiches/ListeDesSansProtSansJumeaux" foreach Ligne [LesLignesDuFichier $FichierDes623] { set Nom [lindex $Ligne 0] if {[JumeauRepresentatif $Nom]==$Nom || [JumeauRepresentatif $Nom]==""} { lappend ListeSansJumeaux $Nom } } return [llength $ListeSansJumeaux] } proc ListeDesJumeauxRepresentatifs {} { return [JumeauRepresentatif "LaListeMerci"] } proc ListeDesMatrices {} { return [$::db eval {select distinct matrix from analyse}] } proc ListeDesMotiflen {} { return [$::db eval {select distinct motiflen from analyse}] } proc ListeDesNews {} { Wup "Rend la liste des nouvelles sequences a designee" set Liste [ListeDesPABs] #set Liste [lrange $Liste 1164 2437] set LesPABs "" foreach PAB $Liste { set Numero "" regsub {^ACT[0]{0,3}} $PAB "" Numero if {$Numero > 1164 && $Numero < 2439} { lappend LesPABs $PAB #Espionne "$PAB -- $Numero" } } return "$LesPABs" } proc ListeDesNumerosDesChromosomes {} { set Liste [list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y UN] return $Liste } proc ListeDesOligosRestreints {args} { Wup "Permet de retourner une liste d oligo contenant des criteres bien definis" set ListeOligos "" #CutOff pour limiter l affichage si besoin est ############################################## #set LesCutOffs [list GC Tm ExpTm XDebutDeOligoNt XFinDeOligoNt NbCandidats NbContigues NbUnrelated LesCandidats] set LesCutOffs [lindex $args 1] set FichierACharger [lindex $args 0] set LesOligos [InterrogeInfoDeLOligo $FichierACharger LesNoms] foreach NomOligo $LesOligos { #set NomOligo [InterrogeInfoDeLOligo $FichierACharger [lindex $UnDebutFinDeOligo 0] [lindex $UnDebutFinDeOligo 1] NomOligo] #set LaSequence [InterrogeInfoDeLOligo $FichierACharger $NomOligo Sequence] #set TailleOligo [InterrogeInfoDeLOligo $FichierACharger $NomOligo Taille] #set GC [InterrogeInfoDeLOligo $FichierACharger $NomOligo GC] set Tm [InterrogeInfoDeLOligo $FichierACharger $NomOligo Tm] #set ExpTm [InterrogeInfoDeLOligo $FichierACharger $NomOligo ExpTm] set XDebutDeOligoNt [InterrogeInfoDeLOligo $FichierACharger $NomOligo Debut] set XFinDeOligoNt [InterrogeInfoDeLOligo $FichierACharger $NomOligo Fin] set NbCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbCandidats] set NbContigues [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbContigues] #set LesCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo LesCandidats] #Comparaison des criteres de l oligo avec les cutoffs demandes set KO 0 set Result 1 foreach CutOff $LesCutOffs { if {$KO == "1"} {continue} set Result [CheckForRestrictedParameter [set $CutOff] $CutOff] if {$Result=="0"} { set KO 1 } } if {$KO == "1"} { continue } else { lappend ListeOligos [list $NomOligo $Tm $XDebutDeOligoNt $NbCandidats] } } return "$ListeOligos" } proc ListeDesOrganismesAyantMemeOperon {Nom} { global LesOrganismesAyantMemeOperon if { ! [info exists LesOrganismesAyantMemeOperon] } { ChargeLesOrganismesAyantMemeOperon } if { [info exists LesOrganismesAyantMemeOperon($Nom)] } { return [set LesOrganismesAyantMemeOperon($Nom)] } else { return {} } } proc ListeDesPABs {{NouveauPAB ""}} { global ListeDesPABs if { ! [info exists ListeDesPABs]} { ChargeLesPABs } if {$NouveauPAB!="" && [lsearch -exact $ListeDesPABs $NouveauPAB]<0} { lappend ListeDesPABs $NouveauPAB } return $ListeDesPABs } proc ListeDesPABs2 {{NouveauPAB ""}} { global ListeDesPABs if { ! [info exists ListeDesPABs]} { ChargeLesPABs2 } if {$NouveauPAB!="" && [lsearch -exact $ListeDesPABs $NouveauPAB]<0} { lappend ListeDesPABs $NouveauPAB } return $ListeDesPABs } proc ListeDesPABsAffy {} { set L [] } proc ListeDesPABsSansLesSequencesCourtes {FichierPABsSansJumeauxSeq FichierSortie} { #sequence courte = sequence de moins de 25 bases (A/T/G/C) #necessaire car il y a une sequence vide #et les sequences de moins de 9 nucleotides ne sont pas blastees set n 0 set L [CreeListePourFichierAUneColonne $FichierPABsSansJumeauxSeq] foreach DD $L { set FichierMRM "[RepertoireDuGenome]/nucmask/$DD" if {[file exists $FichierMRM]} { set SeqMRM [QueLaSequenceDuFichierTFA $FichierMRM] #set L [string length $SeqMRM] regsub -all -nocase "N" $SeqMRM "" SeqMRMSansN set LSansN [string length $SeqMRMSansN] if {$LSansN>=25} { AppendAuFichier $FichierSortie "$DD" } else {incr n} } else { Espionne "$FichierMRM doesn't exist" } } return $n } proc ListeDesPABsSansLesSequencesEnDouble {FichierPABs2467 FichierSortie} { #proc JumeauRepresentatif de RR appelle le fichier /fiches/jumeaux #ici, le fichier jumeaux est une copie du fichier fiches/jumeaux_SeqNuc set n 0 set L [CreeListePourFichierAUneColonne $FichierPABs2469] foreach Nom $L { if {[JumeauRepresentatif $Nom]!="" && [JumeauRepresentatif $Nom]!=$Nom} {incr n; continue} AppendAuFichier $FichierSortie "$Nom" } return $n } proc ListeDesPDBDB {} { return [lsort -unique [$::db eval {select nom from pdb}]] } proc ListeDesPipeAlignARefaire {} { foreach Nom [ListeDesPABs] { set FichierProtffa "[RepertoireDuGenome]/prottfa/$Nom" set FichierMSF "[RepertoireDuGenome]/msf/$Nom" if {[file exists $FichierProtffa] && ![file exists $FichierMSF]} { lappend Liste $Nom } } Espionne [llength $Liste] set Liste [lsort -unique $Liste] Espionne [llength $Liste] Espionne $Liste #SauveLesLignes $Liste dans "[RepertoireDuGenome]/fiches/LesMSFaFaire" } proc ListeDesRhos {} { Wup "Rend la liste des nouvelles sequences de la categorie des Rho a designee" set Liste [ListeDesPABs] #set Liste [lrange $Liste 2438 end] set LesPABs "" foreach PAB $Liste { set Numero "" regsub {^ACT[0]{0,3}} $PAB "" Numero if {$Numero > 2438} { lappend LesPABs $PAB #Espionne "$PAB -- $Numero" } } return "$LesPABs" } proc ListeDesScores {} { return [$::db eval {select distinct score from analyse}] } proc ListeDesTRNAs {} { global ListeDesTRNAs if { ! [info exists ListeDesTRNAs]} { ChargeLesTRNAs } return $ListeDesTRNAs } proc ListeDesTROUs {} { global ListeDesTROUs if { ! [info exists ListeDesTROUs]} { ChargeLesTROUs } return $ListeDesTROUs } proc ListeLes1220 {FichierJumeauxFinal FichierSortie} { foreach Ligne [LesLignesDuFichier $FichierJumeauxFinal] { if {$Ligne==""} {continue} set LesDD [split $Ligne " "] set JR [lindex $LesDD 0] lappend Liste $JR foreach DD $LesDD { set Vu($DD) 1 } } Espionne [llength $Liste] set n 0 foreach Nom [ListeDesPABs] { if {![info exists Vu($Nom)]} {lappend Liste $Nom; incr n} } Espionne $n Espionne [llength $Liste] #verif no doublons set L [lsort -unique $Liste] Espionne [llength $L] SauveLesLignes $L dans $FichierSortie } proc ListeLesCodesClones {} { set Fichier "/home/carles/genomes/DD2/S1codesJ.txt" set MauvaisCodes "" foreach Ligne [LesLignesDuFichier $Fichier] { regsub -all -nocase {\s} $Ligne " " Ligne set LesCodes [split $Ligne " "] foreach Code $LesCodes { append MauvaisCodes "$Code\n" } } return $MauvaisCodes } proc ListeLesDDAvecProteineHuman {FichierSortie} { set n 0 foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {continue} incr n #Espionne $DD set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] if {[regexp "from CONTIG" $EnteteProttfa]} { if {[regexp "from Homo sapiens from CONTIG" $EnteteProttfa]} {lappend Liste $DD} } elseif {[regexp "from Homo sapiens" $EnteteProttfa] || [regexp "from mitochondrion Homo" $EnteteProttfa]} {lappend Liste $DD} } Espionne "nb pabs avec pro: $n" Espionne "nb prot human: [llength $Liste]" set L [lsort -unique $Liste] Espionne "nb prot human u:[llength $L]" foreach Nom $L { set FichiermRNAHs "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {![file exists $FichiermRNAHs]} {lappend LesNotHuman $Nom} else {lappend LesHumanHomolog $Nom} } Espionne "nb no mrnatfahuman: [llength $LesNotHuman] - nb avec mrnatfahuman: [llength $LesHumanHomolog]" exit #SauveLesLignes $ListeTriee dans $FichierSortie foreach Nom $LesNotHuman { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs!="" && $LesLocs!=" "} {lappend LesLocalises $Nom} else {lappend LesNoLoc $Nom} } Espionne "[llength $LesNoLoc] noloc" set L [lsort -unique $LesNoLoc] Espionne [llength $L] SauveLesLignes $L dans $FichierSortie #exit #Espionne "[llength $LesLocalises] localises " #return $LesLocalises Espionne [llength [lsort -unique $LesNotHuman]] foreach Nom $LesNoLoc { set EST [InterrogeSelectedEST $FichierEST Nom $Nom LesAccess] if {$EST!=""} {lappend LesEST $Nom} } Espionne $LesEST Espionne [llength $LesEST] set Ltriee [lsort -unique $LesEST] Espionne [llength $Ltriee] foreach Nom $LesNoLoc { set NM [InterrogeFichierBestNMavecDef $FichierBestOverlapAvecDef $Nom NM] if {$NM=="" || $NM==" "} {lappend LesSansRefSeq $Nom} else {Espionne "avec nm: $Nom $NM"} } Espionne [llength $LesSansRefSeq] set L [lsort -unique $LesSansRefSeq] Espionne [llength $L] } proc ListeLesDDAvecProteineHuman_avecbest {} { set n 0 foreach DD [ListeDesPABs] { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" Protein Access] if {$AccBestProtHuman!=""} { incr n lappend Liste $DD set FichierProtHs "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProtHs]} {Espionne "$FichierProtHs doesn t exist"} set IdProt [InterrogeBestProteinAndmRNAForeachOrga $DD Access $AccBestProtHuman Identity] if {$IdProt>=0.8} {lappend LesHumanHomolog $DD} else {lappend LesHumanhomologIdFaible $DD} } else {lappend LesSans $DD} } Espionne "nb prot human: $n" Espionne "nb avec bestprothuman: [llength $Liste]" Espionne "nb sans bestprothuman: [llength $LesSans]" Espionne "nb prot human >0.8:[llength $LesHumanHomolog]" set Ls [lsort -unique $LesHumanHomolog] Espionne "nb prot human u >0.8:[llength $Ls]" Espionne "nb prot human <0.8:[llength $LesHumanhomologIdFaible]" set Li [lsort -unique $LesHumanhomologIdFaible] Espionne "nb prot human u:[llength $Li]" exit foreach Nom $Liste { set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$AccBestmRNAHuman!=""} { set FichiermRNAHs "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {![file exists $FichiermRNAHs]} {Espionne "$FichiermRNAHs doesn t exist"} set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccBestmRNAHuman Identity] if {$IdmRNA>=0.8} {lappend LesHuman $Nom} else {lappend LesHumanIdFaible $Nom} } else {lappend LesNotHuman $Nom} } Espionne "nb no mrnatfahuman: [llength $LesNotHuman] - nb avec mrnatfahuman >80: [llength $LesHuman] - nb best mrna<.8: [llength $LesHumanIdFaible]" } proc ListeLesDDAvecProteineNotHuman {FichierLoc FichierEST FichierBestOverlapAvecDef FichierSortie} { set n 0 foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {continue} incr n set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] if {[regexp "from CONTIG" $EnteteProttfa]} { if {![regexp "from Homo sapiens from CONTIG" $EnteteProttfa]} {lappend Liste $DD} } elseif {![regexp "from Homo sapiens" $EnteteProttfa] && ![regexp "from mitochondrion Homo" $EnteteProttfa]} {lappend Liste $DD} } Espionne "n avec prot: $n" Espionne "n prot no human: [llength $Liste]" set L [lsort -unique $Liste] Espionne "n prot no human: [llength $L]" foreach Nom $L { set FichiermRNAHs "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {![file exists $FichiermRNAHs]} {lappend LesNotHuman $Nom} else {lappend LesHumanHomolog $Nom} } Espionne "nb no mrnatfahuman: [llength $LesNotHuman] - nb avec mrnatfahuman: [llength $LesHumanHomolog]" Espionne $LesHumanHomolog exit set LesNoLoc "" foreach Nom $LesNotHuman { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs!="" && $LesLocs!=" "} {lappend LesLocalises $Nom} else {lappend LesNoLoc $Nom} } Espionne "[llength $LesNoLoc] noloc" set L [lsort -unique $LesNoLoc] Espionne [llength $L] SauveLesLignes $L dans $FichierSortie #exit #Espionne "[llength $LesLocalises] localises " #return $LesLocalises #Espionne [llength [lsort -unique $LesNotHuman]] foreach Nom $L { set EST [InterrogeSelectedEST $FichierEST Nom $Nom LesAccess] if {$EST!=""} {lappend LesEST $Nom} } Espionne $LesEST Espionne [llength $LesEST] set Ltriee [lsort -unique $LesEST] Espionne [llength $Ltriee] #exit foreach Nom $L { set NM [InterrogeFichierBestNMavecDef $FichierBestOverlapAvecDef $Nom NM] if {$NM=="" || $NM==" "} {lappend LesSansRefSeq $Nom} else {Espionne "avec nm: $Nom $NM"} } Espionne [llength $LesSansRefSeq] set L [lsort -unique $LesSansRefSeq] Espionne [llength $L] } proc ListeLesDDAvecProteineNotHuman_avecbest {} { set n 0 foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {continue} incr n set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] if {[regexp "from CONTIG" $EnteteProttfa]} { if {![regexp "from Homo sapiens from CONTIG" $EnteteProttfa]} {lappend Liste $DD} } elseif {![regexp "from Homo sapiens" $EnteteProttfa] && ![regexp "from mitochondrion Homo" $EnteteProttfa]} {lappend Liste $DD} } Espionne "n avec prot: $n" Espionne "n prot no human: [llength $Liste]" set L [lsort -unique $Liste] Espionne "n prot no human: [llength $L]" foreach Nom $L { set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$AccBestmRNAHuman!=""} { set FichiermRNAHs "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {![file exists $FichiermRNAHs]} {Espionne "$FichiermRNAHs doesn t exist"} set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccBestmRNAHuman Identity] if {$IdmRNA>=0.8} {lappend LesHumanHomolog $Nom} else {lappend LesHumanhomologIdFaible $Nom} } else {lappend LesNotHuman $Nom} } Espionne "n avec best human mrna>0.8: [llength $LesHumanHomolog] -<0.8: [llength $LesHumanhomologIdFaible] - sans bestmrna: [llength $LesNotHuman]" } proc ListeLesDDAvecmRNAHuman_avecbest {} { set n 0 foreach DD [ListeDesPABs] { set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" mRNA Access] if {$AccBestmRNAHuman!=""} { incr n lappend Liste $DD set FichiermRNAHs "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$DD" if {![file exists $FichiermRNAHs]} {Espionne "$FichiermRNAHs doesn t exist"} set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $DD Access $AccBestmRNAHuman Identity] if {$IdmRNA>=0.8} {lappend LesHumanHomolog $DD} else {lappend LesHumanhomologIdFaible $DD} } } Espionne "nb mrna human: $n"; Espionne "n besthumanmrna: [llength $Liste]" Espionne "nb mrna human >0.8:[llength $LesHumanHomolog]" set Ls [lsort -unique $LesHumanHomolog] Espionne "nb mrna human u >0.8:[llength $Ls]" Espionne "nb mrna human <0.8:[llength $LesHumanhomologIdFaible]" set Li [lsort -unique $LesHumanhomologIdFaible] Espionne "nb mrna human u:[llength $Li]" foreach Nom $Liste { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$AccBestProtHuman!=""} { set FichierProtHs "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FichierProtHs]} {Espionne "$FichierProtHs doesn t exist"} set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccBestProtHuman Identity] if {$IdProt>=0.8} {lappend LesHumanHom $DD} else {lappend LesHumanIdFaible $DD} } else {lappend LesNotHuman $Nom; Espionne $Nom} } Espionne "nb no besthumanprot: [llength $LesNotHuman] - nb avec besthumanprot >80: [llength $LesHumanHom] - nb best prot<.8: [llength $LesHumanIdFaible]" } proc ListeLesDDSansProteine {Fichiersortie} { foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {lappend Liste $DD} } Espionne [llength $Liste] set L [lsort -unique $Liste] Espionne [llength $L] SauveLesLignes $L dans $Fichiersortie } proc ListeLesDDSansProteineAvecLocSansGb {FichierLoc FichierSortie} { foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {lappend Liste $DD} } Espionne [llength $Liste] set L [lsort -unique $Liste] Espionne [llength $L] foreach Nom $L { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs!="" && $LesLocs!=" "} {lappend LesLocalises $Nom} } Espionne [llength $LesLocalises] set Ltriee [lsort -unique $LesLocalises] Espionne [llength $Ltriee] exit set LesNoHit "" foreach Nom $Ltriee { set FichierBlastGb "[RepertoireDuGenome]/blastngenembl/$Nom" if {![file exists $FichierBlastGb]} {Espionne "$FichierBlastGb doesn't exist";continue} set LesProchesGb [ac_LesProchesDansLeBlastBis $FichierBlastGb 0.95 0 0] if {$LesProchesGb==0} {lappend LesNoHit $Nom} #set LesCopainsGb [LesMeilleursCopainsDuBlast $Nom] #if {[regexp "No hits found" $LesCopainsGb]} {lappend LesNoHit $Nom} } Espionne [llength $LesNoHit] set L [lsort -unique $LesNoHit] Espionne [llength $L] return $L #SauveLesLignes $L dans $FichierSortie } proc ListeLesDDSansProteineNiLocNiEST {FichierLoc FichierEST FichierSortie} { #no prot. foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {lappend Liste $DD} } Espionne [llength $Liste] set L [lsort -unique $Liste] Espionne [llength $L] #no loc foreach Nom $L { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs=="" || $LesLocs==" "} {lappend LesNoLoc $Nom} } Espionne [llength $LesNoLoc] set Ltriee [lsort -unique $LesNoLoc] Espionne [llength $Ltriee] set LesNoHit "" foreach Nom $Ltriee { set FichierBlastGb "[RepertoireDuGenome]/blastngenembl/$Nom" if {![file exists $FichierBlastGb]} {Espionne "$FichierBlastGb doesn't exist";continue} set LesProchesGb [ac_LesProchesDansLeBlastBis $FichierBlastGb 0.95 0 0] if {$LesProchesGb==0} {lappend LesNoHit $Nom} else {Espionne "$Nom $LesProchesGb"} #set LesCopainsGb [LesMeilleursCopainsDuBlast $Nom] #if {[regexp "No hits found" $LesCopainsGb]} {lappend LesNoHit $Nom} } Espionne [llength $LesNoHit] set L [lsort -unique $LesNoHit] Espionne [llength $L] #no est foreach Nom $L { set EST [InterrogeSelectedEST $FichierEST Nom $Nom LesAccess] if {$EST==""} {lappend LesNoEST $Nom} else {Espionne "$Nom: $EST"} } Espionne [llength $LesNoEST] set Ltriee [lsort -unique $LesNoEST] Espionne [llength $Ltriee] #SauveLesLignes $L dans $FichierSortie } proc ListeLesDDSansProteineNiLocNiGb {FichierLoc FichierSortie} { foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {lappend Liste $DD} } Espionne [llength $Liste] set L [lsort -unique $Liste] Espionne [llength $L] foreach Nom $L { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs=="" || $LesLocs==" "} {lappend LesNoLoc $Nom} } Espionne [llength $LesNoLoc] set Ltriee [lsort -unique $LesNoLoc] Espionne [llength $Ltriee] set LesNoHit "" foreach Nom $Ltriee { set FichierBlastGb "[RepertoireDuGenome]/blastngenembl/$Nom" if {![file exists $FichierBlastGb]} {Espionne "$FichierBlastGb doesn't exist";continue} set LesProchesGb [ac_LesProchesDansLeBlastBis $FichierBlastGb 0.95 0 0] if {$LesProchesGb==0} {lappend LesNoHit $Nom} else {Espionne "$Nom $LesProchesGb"} #set LesCopainsGb [LesMeilleursCopainsDuBlast $Nom] #if {[regexp "No hits found" $LesCopainsGb]} {lappend LesNoHit $Nom} } Espionne [llength $LesNoHit] set L [lsort -unique $LesNoHit] Espionne [llength $L] #SauveLesLignes $L dans $FichierSortie } proc ListeLesDDSansProteinePlus {FichierBestOverlapAvecDef FichierLoc FichierEST FichierSortie} { #no prot. foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {![file exists $FichierProttfa]} {lappend Liste $DD} } Espionne [llength $Liste] set L [lsort -unique $Liste] Espionne [llength $L] exit #no loc foreach Nom $L { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] #if {$LesLocs=="" || $LesLocs==" "} {lappend LesNonLocalises $Nom} if {$LesLocs!="" && $LesLocs!=" "} {lappend LesLocalises $Nom} } Espionne [llength $LesLocalises] set Ltriee [lsort -unique $LesLocalises] Espionne [llength $Ltriee] #SauveLesLignes $Ltriee dans $FichierSortie #exit set S 0; set n 0; set Lmini 10000; set Lmaxi 0 foreach DD $Ltriee { set FichierMRM "[RepertoireDuGenome]/nucmask/$DD" set SeqMRM [QueLaSequenceDuFichierTFA $FichierMRM] #set L [string length $SeqMRM] regsub -all -nocase "N" $SeqMRM "" SeqMRMSansN set LSansN [string length $SeqMRMSansN] #if {$LSansN==869} {Espionne $DD} incr n set S [expr $LSansN+ $S] if {$LSansN<$Lmini} {set Lmini $LSansN} if {$LSansN>$Lmaxi} {set Lmaxi $LSansN} } Espionne "lmin: $Lmini - lmax: $Lmaxi" #FaireLire "$S / $n" Espionne "longueur moy: [expr $S/$n]" set LesNoHit "" foreach Nom $Ltriee { #set FichierBlastGb "[RepertoireDuGenome]/blastngenembl/$Nom" #if {![file exists $FichierBlastGb]} {Espionne "$FichierBlastGb doesn't exist";continue} #set LesProchesGb [ac_LesProchesDansLeBlastBis $FichierBlastGb 0.95 0 0] #if {$LesProchesGb!=0} {lappend LesHit $Nom} set NM [InterrogeFichierBestNMavecDef $FichierBestOverlapAvecDef $Nom NM] if {$NM=="" || $NM==" "} {lappend LesSansRefSeq $Nom} else {lappend LesRS $Nom} #set LesCopainsGb [LesMeilleursCopainsDuBlast $Nom] #if {[regexp "No hits found" $LesCopainsGb]} {lappend LesNoHit $Nom} } #Espionne [llength $LesSansRefSeq] #set L [lsort -unique $LesSansRefSeq] #Espionne [llength $LesHit] #set L [lsort -unique $LesHit] Espionne "avec nm: [llength $LesRS]" set L [lsort -unique $LesRS] Espionne "avec nm: [llength $L]" Espionne $L exit #est foreach Nom $L { set EST [InterrogeSelectedEST $FichierEST Nom $Nom LesAccess] if {$EST==""} {lappend LesSansEST $Nom} } Espionne [llength $LesSansEST] set Ltriee [lsort -unique $LesSansEST] Espionne [llength $Ltriee] #exit #SauveLesLignes $L dans $FichierSortie } proc ListeLesDDavecProtMaisSansEST {FichierEST} { foreach Nom [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set EST [InterrogeSelectedEST $FichierEST Nom $Nom LesAccess] if {[file exists $FichierProttfa] && $EST==""} { lappend Liste $Nom } } Espionne [llength $Liste] return $Liste } proc ListeLesGenesSelectionnesEtEtudiesAvecGO {Fichier45 Fichier36 Fichier59} { # Fichier45: les 45 DD presents sur MA et selectionnes par stat # Fichier36: les 36 DD presents sur Affy avec FCDD>1 et FCAffy>3 # Fichier59: les 59 DD presents sur Affy avec FCDD>1 et FCAffy>2 # enlever les doublons (=communs) (lsort -unique) et les jumeaux (meme numgene) # -> liste totale non redondante # extraire de final ou touscomplete les lignes relatives a ces genes (go, def, hyp proteins...) foreach Ligne [LesLignesDuFichier $Fichier45] { if {$Ligne==""} {continue} lappend L $Ligne } #foreach Ligne [LesLignesDuFichier $Fichier36] { #if {$Ligne==""} {continue} #lappend L $Ligne #} foreach Ligne [LesLignesDuFichier $Fichier59] { if {$Ligne==""} {continue} lappend L $Ligne } #Espionne "l avt unique : [llength $L]" set Lu [lsort -unique $L] #Espionne "l unique : [llength $Lu]" set FichierTot "[RepertoireDuGenome]/ANALYSE/Tous_6july05" foreach DD $Lu { set n [InterrogeFichierTotalDataDD $FichierTot $DD N] if {![info exists Vu($n)]} {set Vu($n) 1; lappend Lfinale $DD} else {continue} } #Espionne "l finale sans jumeau: [llength $Lfinale]" foreach DD $Lfinale { set V($DD) 1 } set FichierFinal "[RepertoireDuGenome]/ANALYSE/finaaal_6jul05_avecMAetSel_mitoch" foreach Ligne [LesLignesDuFichier $FichierFinal] { if {$Ligne==""} {continue} set LesElts [split $Ligne "\t"] set DD [lindex $LesElts 1] if {[info exists V($DD)]} { lappend Ltout $Ligne } else { set LesJum [split [lindex $LesElts 5] " "] foreach D $LesJum { if {[info exists V($D)]} { lappend Ltout $Ligne } } } } return $Ltout } proc ListeLesInfosDeLaLocalisationSurChromosome {Nom} { global LILC if {[info exists LILC($Nom)]} { return [set LILC($Nom)] } if {[info exists LILC("EstCharge")]} { return {} } set LILC("EstCharge") 1 set Fichier "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" if {![file exists $Fichier]} {return {}} set Liste {a b c d} set Rang 0 foreach Ligne [LesLignesDuFichier $Fichier] { set ChroVu 0 set LesElementsDeLaLigne [split $Ligne "\t"] set Code [lindex $LesElementsDeLaLigne 0] foreach Element $LesElementsDeLaLigne { incr Rang if {$Rang==1} {set Code $Element} if {[regexp "HS" $Element]} { set Chro $Element set RangChro $Rang set ChroVu 1 } elseif {$ChroVu==1 && $Rang==[expr $RangChro+1]} { set Inf $Element } elseif {$ChroVu==1 && $Rang==[expr $RangChro+2]} { set Sup $Element break } } set LILC($Code) [list $Code $Chro $Inf $Sup] } return [ListeLesInfosDeLaLocalisationSurChromosome $Nom] } proc ListeLesPABsSansRien {FichierDesPABs FichierDesSansRien FichierDesInconnus FichierDesNoHuman} { #FichierDesPABs=fiches/LesPABsSansJumeauxSeqSansCourts set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] #localisation# set FichierLocOuPas "[RepertoireDuGenome]/fiches/LocaliseOuPas" foreach Ligne [LesLignesDuFichier $FichierLocOuPas] { if {$Ligne==""} {continue} set LesDonnees [split $Ligne "\t"] set DD [lindex $Ligne 0] set LocOuPas [lindex $Ligne 1] set Loc($DD) $LocOuPas } #est-human# set FichierEstOuPas "[RepertoireDuGenome]/fiches/ESTsOuPas" foreach Ligne [LesLignesDuFichier $FichierEstOuPas] { if {$Ligne==""} {continue} set LesDonnees [split $Ligne "\t"] set DD [lindex $Ligne 0] set ESTOuPas [lindex $Ligne 1] set Est($DD) $ESTOuPas } #proteine: set FichierProteinOuPas "[RepertoireDuGenome]/fiches/" foreach Nom $L { Espionne $Nom #Localisation# if {[info exists Loc($Nom)]} {set Loca $Loc($Nom)} else {Espionne "$Nom no_tab_loc"; set Loca 0} #Est-human# if {[info exists Est($Nom)]} {set ests $Est($Nom)} else {Espionne "$Nom no_tab_est"; set ests 0} #protein# set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] #(peut ne rien rendre: pour DD1222 par exemple qui n'existe pas) set Orga [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] if {$AccessProt=="NOPROTEIN" || $AccessProt==""} { set Prot 0 } elseif {$Orga=="Homo sapiens"} {set Prot 1} #mRNA - Genembl# set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] set Org [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] if {$AccessmRNA=="" || $AccessmRNA=="NOMRNA"} { set mRNA 0 set LesCopains [LesMeilleursCopainsDuBlast $Nom] if {$LesCopains=="" || $LesCopains=="No value" || $LesCopains=="No hits found"} { set Gb 0 } else {set Gb 1} } else {set mRNA 1; set gb 1} #bilan loc et homologie# if {$Prot==1} {} if {$Loca==0 && $Prot==0 && $mRNA==0 && $Gb==0 && $ests==0} {AppendAuFichier $FichierDesSansRien $Nom} if {$Loca==0 && $Prot==0 && $mRNA==0 && $Gb==1 && $ests==0} {AppendAuFichier $FichierDesNoHuman $Nom} if {$Loca==1 && $Prot==0 && $mRNA==0 && $Gb==0 && $ests==0} {AppendAuFichier $FichierDesInconnus $Nom} } Espionne "FIN" } proc ListeLesSansESTbisavecProt {} { #est-human# set FichierEstOuPas "[RepertoireDuGenome]/fiches/ESTsOuPas" foreach Ligne [LesLignesDuFichier $FichierEstOuPas] { if {$Ligne==""} {continue} set LesDonnees [split $Ligne "\t"] set DD [lindex $Ligne 0] set ESTOuPas [lindex $Ligne 1] set Est($DD) $ESTOuPas } foreach Nom [ListeDesPABs] { if {![info exists Est($Nom)]} {Espionne $Nom;continue} if {$Est($Nom)==0} { set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {[file exists $FichierProttfa]} {lappend Liste $Nom} } } Espionne [llength $Liste] return $Liste } proc ListeLesSansProfilsDuTout {FichierOverlapFinal} { foreach Ligne [LesLignesDuFichier $FichierOverlapFinal] { set Ligne [string trim $Ligne] if {$Ligne ==""} {continue} set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 1] #1: Exclure les affy non detectes set TAR [lindex $LesChamps 2] set Detn [lindex $LesChamps 22] set Dete [lindex $LesChamps 23] set Dets [lindex $LesChamps 24] set Detu [lindex $LesChamps 25] if {($Detn=="A" || $Detn=="M") && ($Dete=="A" || $Dete=="M") && ($Dets=="A" || $Dets=="M") && ($Detu=="A" || $Detu=="M")} { lappend LesAbsents $TAR continue } set ProfilDD [lindex $LesChamps 17] set ProfilCalcDD [lindex $LesChamps 18] set ProfilConsDD [lindex $LesChamps 19] if {($ProfilDD=="" || $ProfilDD==0) && $ProfilCalcDD=="" && ($ProfilConsDD=="" || $ProfilConsDD=="?")} {lappend Liste "$DD $ProfilDD $ProfilConsDD $ProfilCalcDD"} } Espionne [llength $Liste] return $Liste } proc ListeLesSansRien {} { set ListeNo0 {} set ListeNo1 {} set FichierLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" if {![file exists $FichierLoc]} {return "$FichierLoc doesn t exist"} foreach Nom [ListeDesPABs] { set FMRM "[RepertoireDuGenome]/nucmask/$Nom" if {![file exists $FMRM]} {return "$Nom -> pas de nucmask!"} set SeqMRM [QueLaSequenceDuFichierTFA $FMRM] regsub -all -nocase "N" $SeqMRM "" SeqSansNMRM set LApresMRM [string length $SeqSansNMRM] if {$LApresMRM>=10} { Espionne $Nom #la loc des seq DD est tellement difficile qu'il ne faut pas en tenir compte! #(polyloc) sauf si elle est nulle. Voir proc CompteLesSequencesDDBizarres set Loc [InterrogeLocalisation $FichierLoc Nom $Nom] set AccessmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "mRNA" Access] set AccessProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "Protein" Access] set FichierBlastnest "[RepertoireDuGenome]/blastnest-human/$Nom" if {$Loc==""} {set L 0} else {set L 1} if {$AccessmRNAHuman==""} {set R 0} else {set R 1} if {$AccessProtHuman==""} {set P 0} else {set P 1} if {$R==0 && $P==0} { if {[file exists $FichierBlastnest]} { set Test [MatchWithESTsOuiOuNon $Nom $FichierBlastnest] if {$Test==0 && $L==1} { lappend ListeNo1 $Nom AppendAuFichier "[RepertoireDuGenome]/locmaisrien75bis" $Nom } if {$Test==0 && $L==0} { lappend ListeNo0 $Nom AppendAuFichier "[RepertoireDuGenome]/seqsansrien75bis" $Nom } #if {$Test==1} {lappend ListeNoAvecEST $Nom} } else { if {$L==1} { lappend ListeNo1 $Nom AppendAuFichier "[RepertoireDuGenome]/locmaisrien75bis" $Nom } if {$L==0} { lappend ListeNo0 $Nom AppendAuFichier "[RepertoireDuGenome]/seqsansrien75bis" $Nom } } } } } #Espionne "avec est: [llength $ListeNoAvecEST]" Espionne "sans rien:[llength $ListeNo0]" Espionne "loc mais rien:[llength $ListeNo1]" return "" } proc ListeLesTropCourts {{FichierListeDesPABs ""} {SeuilLongueur 9}} { set Liste {} if {$FichierListeDesPABs==""} { foreach Nom [ListeDesPABs] { #proc JumeauRepresentatif de RR appelle le fichier jumeaux #ici, vaut mieux que le fichier jumeaux soit une copie du fichier #jumeaux_SeqNuc if {[JumeauRepresentatif $Nom]!=$Nom} {continue} set FMRM "[RepertoireDuGenome]/nucmask/$Nom" if {[file exists $FMRM]} { set SeqMRM [QueLaSequenceDuFichierTFA $FMRM] set LAvtMRM [string length $SeqMRM] regsub -all -nocase "N" $SeqMRM "" SeqSansNMRM set LApresMRM [string length $SeqSansNMRM] if {$LApresMRM<$SeuilLongueur} { lappend Liste "$Nom\t$LApresMRM" } } else { Espionne "$FMRM doesn t exist" } } } else { set L [CreeListePourFichierAUneColonne $FichierListeDesPABs] foreach Nom $L { if {[JumeauRepresentatif $Nom]!="" && [JumeauRepresentatif $Nom]!=$Nom} {continue} set FMRM "[RepertoireDuGenome]/nucmask/$Nom" if {[file exists $FMRM]} { set SeqMRM [QueLaSequenceDuFichierTFA $FMRM] set LAvtMRM [string length $SeqMRM] regsub -all -nocase "N" $SeqMRM "" SeqSansNMRM set LApresMRM [string length $SeqSansNMRM] if {$LApresMRM<$SeuilLongueur} { lappend Liste "$Nom\t$LApresMRM" } } else { Espionne "$FMRM doesn t exist" } } } set ListeTriee [lsort -integer -index 1 $Liste] Espionne [llength $ListeTriee] return $ListeTriee } proc ListeMinimumDesJR {FichierClusters} { #soustrait les autresjumeaux a la liste des JR #40 autres jumeaux pour DD (51 pour AffyHS); base sur la proc oldLesAutresJumeaux #91 autres jumeaux pour Exonhit ; proc ElimineLesJRAyantLesMemesAccessDeProtOuDemRNA #1414 JR DD (8848 JR AffyHS) #1418 JR Exonhit #DD : 1374 (1414 - 40) #Affy:8797 (8848 - 51) return [ElimineLesJRAyantLesMemesAccessDeProtOuDemRNA $FichierClusters] } proc ListeMontpelier {} { foreach Nom [ListeDesPABs] { regsub "EVI" $Nom "" NomSsEvi set ligne [string range $NomSsEvi 0 end-1] if {[string index $ligne 0] == 0} { set ligne [string range $ligne 1 end] if {[string index $ligne 0] == 0} { set ligne [string range $ligne 1 end] if {[string index $ligne 0] == 0} { set ligne [string range $ligne 1 end] } } } if {[regexp "x" [RetChip2 $ligne "retinal_fate"]]} { set jaitrouve 1 set Prot [ExtraitInfo $Nom "Id et Access prot"] set mRNA [AccessEvi $Nom] set DesCust [RetChip2 $ligne "description_customer"] set LigneFinal "$ligne;$Nom;$DesCust;$mRNA;$Prot" lappend LesLignesFinales $LigneFinal } } SauveLesLignes $LesLignesFinales dans [Fiches]/LesGenesMontpelier2.csv } proc ListeMorphineExtADown_QPCR {} { Wup "Rend la liste des sequence morphines ExtA choisies pour validation sur QPCR" set MaListe [list MORPH0022 MORPH0011 MORPH0005 MORPH0037 MORPH0070 MORPH0054 MORPH0059] return $MaListe } proc ListeMorphineExtAUp_QPCR {} { Wup "Rend la liste des sequence morphines ExtA choisies pour validation sur QPCR" set MaListe [list MORPH0147 MORPH0080 MORPH0081 MORPH0122 MORPH0084 MORPH0138 MORPH0090 MORPH0145 MORPH0139 MORPH0089 MORPH0096 MORPH0074] return $MaListe } proc ListeOligos {} { Wup "Permet de rendre la liste des PAB des oligos commandes" set Fichier "[RepertoireDuGenome]/ListeDesPABsDesOligosCommandes.txt" global ListeOligo if {! [info exists ListeOligo]} { #Espionne "Liste existe pas encore on continue" } else { #Espionne "Liste existe" return $ListeOligo } if {! [file exists $Fichier]} {Espionne "$Fichier does not exists";return ""} set ListeOligo "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} set PAB "" scan $Ligne "%s" PAB lappend ListeOligo $PAB } close $F set ListeOligo [lsort -unique $ListeOligo] return $ListeOligo } proc ListeParCategorie {Fichier FichierFinal GO} { #Fichier: /fiches/GeneOntology_GPO #GO:... foreach Nom [ListeDesPABs] { set Vu($Nom) 1 } foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set DD [lindex [split $Ligne "\t"] 0 ] if {[regexp -nocase $GO $Ligne] && [info exists Vu($DD)]} { lappend Liste $DD } } Espionne [llength $Liste ] set L [lsort -unique $Liste] Espionne [llength $L] foreach Elt $L { set InfosDD [InterrogeFichierFinal $Elt All] set InfosDD [join $InfosDD "\t"] lappend ListeFinale "$Elt\t$InfosDD" } return $ListeFinale #SauveLesLignes $ListeFinale dans $FichierFinal } proc ListePfamComplex {{repertoire ""}} { #ajouter des couleurs ici pour etre sure d'en avaoir assez pour l'instant probleme avec creation des region!!!!!!!! bon courage!! #recupere l'ensemble des domaines pour toutes les proteins!! set ListeDesDomaines {} set PfamListe {} set Liste [ListeDesPABs] foreach pab $Liste { set ValiGN [ExtraitInfo $pab "ValiGN"] Espionne "ValiGN:$ValiGN" if { [file exists "[RepertoireDuGenome]/macsimXml/$pab.aj"]} { set fileMacsim "[RepertoireDuGenome]/macsimXml/$pab.aj" } else { set fileMacsim "[RepertoireDuGenome]/macsimXml/$pab" } set annotation [FromMacsims "$fileMacsim" "$pab" "ConcatPfam"] foreach an $annotation { set idpfam $an; if {[regexp {(.*)from.*} $idpfam a p]} { set idpfam $p; } if {[regexp {^PROP_(.*).*} $idpfam a p]} { set idpfam $p; } set idpfam [lindex [split $idpfam " "] 0] lappend PfamListe "$idpfam-$ValiGN" } } return $PfamListe # #elimine les doublons # set ListeDesDomaines [lsort -unique $ListeDesDomaines] } proc ListeSansDoublon {Liste {NoCase ""} {NoEmpty ""}} { set NoEmpty [string equal -nocase $NoEmpty "NoEmpty"] set NoCase [string equal -nocase $NoCase "NoCase"] set SansDoublon {} set I -1 foreach Element $Liste { if {$NoEmpty && [string trim $Element]==""} { continue } set ELEMENT $Element if {$NoCase} { set ELEMENT [string toupper $Element] } if { [info exists DejaVu($ELEMENT)] } { set Ancien $DejaVu($ELEMENT) if {[regexp {[a-z]} $Element]} { set SansDoublon [lreplace $SansDoublon $Ancien $Ancien $Element] } continue } set DejaVu($ELEMENT) [incr I] lappend SansDoublon $Element } return $SansDoublon } proc ListeSsElmtVide {Liste} { set ListeFinal {} if {$Liste == {}} {return $ListeFinal} foreach elmt $Liste { if {[regexp {^Neo} $elmt]} {continue} if {$elmt!=""} {lappend ListeFinal $elmt} } return $ListeFinal } proc ListeTest {} { Wup "Rend la liste des ACT choisis pour le premier design" set MaListe [list ACT0004 ACT0005 ACT0010 ACT0016 ACT0017 ACT0030 ACT0034 ACT0045 ACT0050 ACT0053 ACT0059 ACT0062 ACT0123 ACT0155 ACT0176 ACT0198 ACT0202 ACT0204 ACT0269 ACT0283 ACT0285 ACT0297 ACT0298 ACT0301 ACT0345 ACT0355 ACT0374 ACT0393 ACT0396 ACT0397 ACT0582 ACT0585 ACT0592 ACT0594 ACT0595 ACT0604 ACT0609 ACT0611 ACT0883 ACT0892 ACT0899 ACT0911 ACT0915 ACT0916 ACT0938 ACT0997 ACT1013 ACT1017 ACT1037 ACT1043 ACT1047 ACT1133 ACT1140 ACT1150 ACT1162 ACT1164] return $MaListe } proc ListeTotalEVIProbeset {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set totalps 0 foreach Nom $Liste { puts "Nom $Nom" set Ligne "" set ProbesSet [ExtraitInfo $Nom "ProbeSetId"] if {$ProbesSet=="no value" || $ProbesSet==""} { set Ligne "$Nom" lappend LesLignes $Ligne continue } set LesProbesSet [split $ProbesSet ","] foreach Ps $LesProbesSet { puts "Ps $Ps" incr totalps set Ligne "$Nom $Ps" lappend LesLignes $Ligne } } puts "totalps $totalps" SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/ListeTotalEviPs" } proc ListeTrieeDesDistancesPhylos {Nom Reference {Arbre ""}} { global RepertoireDuGenome global ListeDistanceDeChaqueFeuille global NotreOS set FichierPhylo "$RepertoireDuGenome/phylos/$Nom" Wup "On peut ne pas avoir cree les fichiers phylos" if { ! [file exists $FichierPhylo]} { Wup "J'en cree qu'un, pas plusieurs ..." CreeLesFichiersPhylos $Nom } if { ! [file exists $FichierPhylo]} { Warne "$FichierPhylo couldn't be created" return {} } set ListeDistanceDeChaqueFeuille {} catch {unset SortieSeqDist} catch {set SortieSeqDist [split [exec seqdist $FichierPhylo $Reference] "\n"]} if { ! [info exists SortieSeqDist]} { Warne "seqdist did'nt success with $FichierPhylo $Reference" return {} } if {[llength $SortieSeqDist] == 0} { return {} } foreach Ligne $SortieSeqDist { if {[scan $Ligne "%s %s %s %f" Cible to Feuille Distance]!=4 } { continue } lappend ListeSeqDistDeChaqueFeuille "$Feuille $Distance" } set ListeTrieeSD [lsort -command "CompareLesFloats" $ListeSeqDistDeChaqueFeuille] Wup "On demande tous les Orgas en une seule fois" set LesAccess {} foreach FeuilleDistance $ListeTrieeSD { scan $FeuilleDistance "%s %f" Feuille DistanceFloat lappend LesAccess $Feuille } foreach AccessOrga [LesOrgasDesAccess $LesAccess Court] { Espionne $AccessOrga set Orga "iinc" scan $AccessOrga "%s %s" Access Orga set OrgaDuAccess($Access) $Orga } set ListeOrgaDistance {} foreach FeuilleDistance $ListeTrieeSD { Wup "Je stocke les distances en INTEGER de 0 a 100" scan $FeuilleDistance "%s %f" Feuille DistanceFloat set Access $Feuille if {[llength $ListeTrieeSD] == 1} { set DistanceFloat [expr $DistanceFloat/2] } set Distance [expr round(100*$DistanceFloat)] if {[info exists OrgaDuAccess($Access)]} { set Orga [set OrgaDuAccess($Access)] } else { set Orga [Glossaire "Inconnu inconnu" Court] } foreach O [SplitOrgas $Orga] { lappend ListeOrgaDistance "$O $Distance $Access" } } return $ListeOrgaDistance } proc ListeWolfgang2 {} { foreach Nom [ListeDesPABs] { set mRNAAcc [AccessEvi $Nom] set ProtAcc [ExtraitInfo $Nom "Id et Access prot"] set Ps [ExtraitInfo $Nom "ProbeSetId"] set Ligne "$Nom;$mRNAAcc;$ProtAcc;$Ps" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans [RepertoireDuGenome]/Wolfgang2 } proc Listedes2467PABs {Rep FichierSortie} { foreach Fichier [glob -nocomplain -directory $Rep "DD*"] { set NomFichier [file tail $Fichier] lappend ListeDesPABs $NomFichier } Espionne [llength $ListeDesPABs] set L [lsort -unique $ListeDesPABs] Espionne [llength $L] SauveLesLignes $L dans $FichierSortie } proc ListonsLesTrous {LongMotif Offset} { global RepertoireDuGenome global ListeDesTROUs if { ! [info exists ListeDesTROUs]} { ChargeLesTROUs } foreach Boite $ListeDesTROUs { set Nom [Box $Boite nom] set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] set Long [expr $Fin-$Debut+1] if {[info exists Histo($Long)]} { incr Histo($Long) } else { set Histo($Long) 1 } set DF [Maxi $Debut [expr $Fin-$Offset-$LongMotif]] set FF [Mini $Fin [expr $Fin-$Offset+$LongMotif]] set SeqF [BoutADN $DF $FF "F"] set DR [Maxi $Debut [expr $Debut+$Offset-$LongMotif]] set FR [Mini $Fin [expr $Debut+$Offset+$LongMotif]] set SeqR [BoutADN $DR $FR "R"] set Entamme "f${SeqF}r${SeqR}" set Termine "f${SeqF}r${SeqR}" append Entammes $Entamme append Termines $Termine # lappend LesTrousDeLongueur($Long) "[BoutADN $Debut $Fin "F"] f $Nom" # lappend LesTrousDeLongueur($Long) "[BoutADN $Debut $Fin "R"] r $Nom" } regsub -all "A|T" $Entammes "-" Entammes regsub -all "C|G" $Entammes "O" Entammes regsub -all "A|T" $Termines "-" Termines regsub -all "C|G" $Termines "O" Termines for {set i 0} {$i<[string length $Entammes]-$LongMotif} {incr i} { set MotifE [string range $Entammes $i [expr $i+$LongMotif-1]] set MotifT [string range $Termines $i [expr $i+$LongMotif-1]] if { ! [regexp "f|r" $MotifE]} { if {[info exists HistoE($MotifE)]} { incr HistoE($MotifE) } else { set HistoE($MotifE) 1 } } if { ! [regexp "f|r" $MotifT]} { if {[info exists HistoT($MotifT)]} { incr HistoT($MotifT) } else { set HistoT($MotifT) 1 } } } foreach MotifE [array names HistoE] { lappend HME "[set HistoE($MotifE)] $MotifE" } foreach MotifT [array names HistoT] { lappend HMT "[set HistoT($MotifT)] $MotifT" } set E [lsort -command CompareLesIntegersEnDebut $HME] set T [lsort -command CompareLesIntegersEnDebut $HMT] foreach t $T { puts "$t" } return set Sortie {} foreach Long [lsort -decreasing -integer [array names Histo]] { puts "$Long [set Histo($Long)]" if {$D<=$Long && $Long<=$F} { set Sortie [concat $Sortie [set LesTrousDeLongueur($Long)]] } } puts [join [lsort $Sortie] "\n"] } proc ListsComplement {LesA LesB} { Wup "A butnot B" foreach B $LesB { set Existe($B) 1 } set ComplementAB {} foreach A $LesA { if {! [info exists Existe($A)]} { lappend ComplementAB $A } } return $ComplementAB } proc ListsIntersection {LesA LesB {NoCase ""}} { #rR si NoCase on garde quand meme les A avec leur casse set NoCase [string equal -nocase $NoCase "NoCase"] foreach B $LesB { if {$NoCase} { set B [string tolower $B] } set Existe($B) 1 } set InterAB {} foreach A $LesA { set a $A if {$NoCase} { set a [string tolower $A] } if {[info exists Existe($a)]} { lappend InterAB $A } } return $InterAB } proc ListsUnion {LesA LesB} { set LesAB [ListeSansDoublon [concat $LesA $LesB]] return $LesAB } proc LitBlastJunctions {RepertoireBl SeuilLong} { #proc LitBlastJunctions {RepertoireBl SeuilLong SeuilIdent SeuilPosition} #RepertoireBl /genomics/link/SpliRetMouse/201404/RepDeTravail/Pax2 #RepertoireBl /genomics/link/SpliRetMouse/201404/RepDeTravail/All6 #RepertoireBl /genomics/link/SpliRetMouse/201404/RepDeTravail/Allmouse #RepertoireBl /genomics/link/SpliRetMouse/201404/RepDeTravail/All6rat #Org mouse ou rat set a 0; set b 0 set nb 0 set RepertoireBlCourt [lindex [split [Realpath $RepertoireBl] "/"] end] if {[regexp "mouse" $RepertoireBlCourt]} {set Org "mouse"} if {[regexp "rat" $RepertoireBlCourt]} {set Org "rat"} foreach FileBlast [lsort [glob -nocomplain "$RepertoireBl/*dustno.bl2.2.29"]] { if {[expr $nb %100]==0} {Espionne "$nb $a $b"} incr nb AskBlast unset set Query [AskBlast $FileBlast Query] set NbSub [AskBlast $FileBlast NbSubject] #Espionne "NbSub $NbSub" set connu 0 for {set i 1} {$i <= $NbSub} {incr i} { set Access [AskBlast $FileBlast Subject $i] # Espionne "++$Access" set NbSeg [AskBlast $FileBlast BanqueId $Access NbSegment] # Espionne "NbSeg $NbSeg" for {set j 1} {$j <= $NbSeg} {incr j} { set Gaps [AskBlast $FileBlast BanqueId $Access Segment $j Gaps] set BoutGaps [split $Gaps "/ "] set NbGap [lindex $BoutGaps 0] set Identities [AskBlast $FileBlast BanqueId $Access Segment $j Identities] set BoutIdentites [split $Identities "/ "] set NbIdent [lindex $BoutIdentites 0] set NbTotal [lindex $BoutIdentites 1] set PourcIdent [lindex $BoutIdentites 2] regsub {\(} $PourcIdent "" PourcIdent regsub {\)} $PourcIdent "" PourcIdent regsub "%" $PourcIdent "" PourcIdent set DQ [AskBlast $FileBlast BanqueId $Access Segment $j DQ] set FQ [AskBlast $FileBlast BanqueId $Access Segment $j FQ] set DS [AskBlast $FileBlast BanqueId $Access Segment $j DS] set FS [AskBlast $FileBlast BanqueId $Access Segment $j FS] if {0 && $SeuilLong<=$NbTotal} { if {$DS>$FS} { set w $DS set DS $FS set FS $w } } # if {$SeuilLong<=$NbTotal && $SeuilIdent<=$NbIdent && [expr $DQ-$SeuilPosition]<=$DS && $DS<=[expr $DQ+$SeuilPosition] && [expr $FQ-$SeuilPosition]<=$FS && $FS<=[expr $FQ+$SeuilPosition]} # if {$SeuilLong<=$NbTotal && $SeuilIdent<=$NbIdent && $DQ-$SeuilPosition<=$DS && $DS<=$DQ+$SeuilPosition && $FQ-$SeuilPosition<=$FS && $FS<=$FQ+$SeuilPosition} if {$SeuilLong<=$NbTotal} { set connu 1 if {![info exists DejaVu($PourcIdent)]} { lappend LesPourcIdent $PourcIdent set DejaVu($PourcIdent) 0 } incr DejaVu($PourcIdent) break } } if {$connu} {break} } if {$connu} { incr a } else { incr b set VarJunc [InterrogeCorresJuncVar $Query VarJunc "/genomics/link/SpliRetMouse/201404/RepDeTravail/CorresJuncVar_$Org"] lappend LesQueriesNew "$Query\t$VarJunc" } } foreach PourcIdent [lsort -unique -integer $LesPourcIdent] { lappend FrequPourcIdent "$PourcIdent\t$DejaVu($PourcIdent)" } Espionne "$a connu" Espionne "$b new" SauveLesLignes $LesQueriesNew dans "$RepertoireBl/LesJunctionsNew" SauveLesLignes $FrequPourcIdent dans "$RepertoireBl/FrequPourcIdent" # GrapheDesFrequences "$RepertoireBl/FrequPourcIdent" # return $b } proc LitCiliaGEO {} { foreach Ligne [LesLignesDuFichier "/home/poidevin/ordi/Cilia/GEO/CiliaCeInGEO.txt"] { if {[regexp "Accession:" $Ligne]} { set GSE [StringApres "Accession:" dans $Ligne] Espionne "$GSE" } } } proc LitEtCompleteOneFile {FichierInterproscan FichierMacsim} { package require tdom set nbnvcoulpfam 0 set File "" InterproscanFromOneFile File $FichierInterproscan set LesNamesInterproscan [InterproscanFromOneFile ListOf Name] set LesNamesMacsims [FromMacsims $FichierMacsim ListOf Names] Espionne "LesNamesInterproscan $LesNamesInterproscan" set fh [open $FichierMacsim "r"] dom parse -channel $fh doc close $fh $doc documentElement root dom createNodeCmd "elementNode" com::ftable dom createNodeCmd "elementNode" com::fitem dom createNodeCmd "elementNode" com::ftype dom createNodeCmd "elementNode" com::fstart dom createNodeCmd "elementNode" com::fstop dom createNodeCmd "elementNode" com::fcolor dom createNodeCmd "elementNode" com::fscore dom createNodeCmd "elementNode" com::fnote dom createNodeCmd "textNode" com::text foreach NameInterproscan $LesNamesInterproscan { Espionne "\t Name $NameInterproscan" set LesConcatInterproscan {}; set LesConcatMacsims {} set LesPFAMInterproscan [InterproscanFromOneFile $NameInterproscan IdDomain] foreach PFAMInterproscan $LesPFAMInterproscan { set StartStopInterproscan [InterproscanFromOneFile $NameInterproscan $PFAMInterproscan Start-Stop] if {[regexp {\-.*\-} $StartStopInterproscan]} { foreach coord [split $StartStopInterproscan " "] { set ScoreInterproscan [InterproscanFromOneFile $NameInterproscan $PFAMInterproscan $coord Score] lappend LesConcatInterproscan "$PFAMInterproscan/$coord/$ScoreInterproscan" } } else { set ScoreInterproscan [InterproscanFromOneFile $NameInterproscan $PFAMInterproscan $StartStopInterproscan Score] lappend LesConcatInterproscan "$PFAMInterproscan/$StartStopInterproscan/$ScoreInterproscan" } } foreach NameMacsim $LesNamesMacsims { if {[regexp -nocase "$NameInterproscan" $NameMacsim]} { set LesConcatMacsims [FromMacsims $FichierMacsim $NameMacsim ConcatPfam] break } } Espionne "interproscan" EspionneL "$LesConcatInterproscan" Espionne "macsims" EspionneL "$LesConcatMacsims" foreach ConcatInterproscan $LesConcatInterproscan { set trouve 0 #Espionne "ConcatInterproscan $ConcatInterproscan" set LesMotsInterproscan [split $ConcatInterproscan "/"] set PFAMInterproscan [lindex $LesMotsInterproscan 0] set StartStopInterproscan [lindex $LesMotsInterproscan 1] set ScoreInterproscan [lindex $LesMotsInterproscan 2] set CoordInterproscan [split $StartStopInterproscan "-"] set StartInterproscan [lindex $CoordInterproscan 0] set StopInterproscan [lindex $CoordInterproscan 1] foreach ConcatMacsims $LesConcatMacsims { #Espionne "ConcatMacsims $ConcatMacsims" set LesMotsMacsim [split $ConcatMacsims "/"] set PFAMMacsims [lindex $LesMotsMacsim 0] set StartStopMacsims [lindex $LesMotsMacsim 1] set CoordMacsims [split $StartStopMacsims "-"] set StartMacsims [lindex $CoordMacsims 0] set StopMacsims [lindex $CoordMacsims 1] if {[regexp $PFAMInterproscan $PFAMMacsims] && $StartStopInterproscan==$StartStopMacsims} { Espionne "1erechance" set trouve 1 break } if {[regexp $PFAMInterproscan $PFAMMacsims] && (([expr $StartMacsims-10] < $StartInterproscan && $StartInterproscan < [expr $StartMacsims+10]) || ([expr $StopMacsims-10] < $StopInterproscan && $StopInterproscan < [expr $StopMacsims+10]))} { Espionne "2emechance" set trouve 1 break } #cas ou le Pfam interproscan est contenu entierement dans le pfam macsims if {[regexp $PFAMInterproscan $PFAMMacsims] && (($StartMacsims < $StartInterproscan && $StartInterproscan < $StopMacsims) && ($StartMacsims < $StopInterproscan && $StopInterproscan < $StopMacsims))} { set trouve 1 break } } if {$trouve} { Espionne "onatrouve $PFAMInterproscan" } else { Espionne "attention on n a PAS trouve $PFAMInterproscan" set ColorPFAM [ColorOfPfam $FichierMacsim $PFAMInterproscan] #Espionne "ColorPFAM $ColorPFAM" if {$ColorPFAM==""} { #ArrayNvColorPFAM: quand un pfam n a pas de couleur dans macsims, on cree une nouvelle couleur et on la stocke dans ArrayNvColorPFAM pour que quand on rencontre de nouveau ce PFAM, on puisse recuperer cette couleur if {[info exists ArrayNvColorPFAM($PFAMInterproscan)]} { set ColorPFAM $ArrayNvColorPFAM($PFAMInterproscan) } else { incr nbnvcoulpfam set ColorPFAM [expr [LastColorPfamInMacsims $FichierMacsim] + $nbnvcoulpfam] set ArrayNvColorPFAM($PFAMInterproscan) $ColorPFAM } } #Espionne "ColorPFAM $ColorPFAM" foreach seq [$root selectNodes "//sequence"] { set NameMacsim [$seq selectNodes "string(./seq-name)"] if {[regexp -nocase "$NameInterproscan" $NameMacsim]} { set noeud_ftable [$seq selectNodes ".//ftable"] if {$noeud_ftable==""} { set noeud_seqinfo [$seq selectNodes "./seq-info"] $noeud_seqinfo appendFromScript { com::ftable { com::fitem { com::ftype {com::text "PFAM-A"} com::fstart {com::text "$StartInterproscan"} com::fstop {com::text "$StopInterproscan"} com::fcolor {com::text "$ColorPFAM"} com::fscore {com::text "$ScoreInterproscan"} com::fnote {com::text "$PFAMInterproscan from Interproscan"} } } } } else { $noeud_ftable appendFromScript { com::fitem { com::ftype {com::text "PFAM-A"} com::fstart {com::text "$StartInterproscan"} com::fstop {com::text "$StopInterproscan"} com::fcolor {com::text "$ColorPFAM"} com::fscore {com::text "$ScoreInterproscan"} com::fnote {com::text "$PFAMInterproscan from Interproscan"} } } } } } set fh [open $FichierMacsim.aj "w"] puts $fh "" $doc asXML -channel $fh -doctypeDeclaration 0 close $fh } } } $doc delete } proc LitEtCompleteXML {} { #attention pour un projet general (pas SpliRetMouse ni SpliRetRat), ReecritTousLesMacsimsAcOrga doit etre lance apres LitEtCompleteXML (sinon LitEtCompleteXML ne marche pas correctement) package require tdom set LesBoxPb {} set LesFichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsimXml/*.orgord"] if {$LesFichierMacsim=={}} {set LesFichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsimXml/*.org"]} if {$LesFichierMacsim=={}} {set LesFichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsimXml/*"]} if {$LesFichierMacsim=={}} {return "NoMacsimsFiles"} foreach FichierMacsim $LesFichierMacsim { set nbnvcoulpfam 0 if {[info exists ArrayNvColorPFAM]} {unset ArrayNvColorPFAM} set Box [file tail $FichierMacsim] regsub {\.[^\.]+$} $Box "" Box set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set FichierInterproscan "[RepertoireDuGenome]/Interproscan/$Box.is" #Espionne "" #Espionne "$FichierMacsim" #Espionne "$FichierInterproscan" set LesNamesInterproscan [Interproscan $Box Name] if {$LesNamesInterproscan=={}} { #Espionne "pas trouve interproscan" continue } #Espionne "LesNamesInterproscan $LesNamesInterproscan" set fh [open $FichierMacsim "r"] dom parse -channel $fh doc close $fh $doc documentElement root dom createNodeCmd "elementNode" com::ftable dom createNodeCmd "elementNode" com::fitem dom createNodeCmd "elementNode" com::ftype dom createNodeCmd "elementNode" com::fstart dom createNodeCmd "elementNode" com::fstop dom createNodeCmd "elementNode" com::fcolor dom createNodeCmd "elementNode" com::fscore dom createNodeCmd "elementNode" com::fnote dom createNodeCmd "textNode" com::text foreach NameInterproscan $LesNamesInterproscan { if {[NameInMacsimsYesorNo $FichierMacsim $NameInterproscan YesOrNo]!="Yes"} {continue} #Espionne "\t Name $NameInterproscan" set LesConcatInterproscan {}; set LesConcatMacsims {} set LesPFAMInterproscan [Interproscan $Box $NameInterproscan IdDomain] foreach PFAMInterproscan $LesPFAMInterproscan { set StartStopInterproscan [Interproscan $Box $NameInterproscan $PFAMInterproscan Start-Stop] if {[regexp {\-.*\-} $StartStopInterproscan]} { foreach coord [split $StartStopInterproscan " "] { set ScoreInterproscan [Interproscan $Box $NameInterproscan $PFAMInterproscan $coord Score] lappend LesConcatInterproscan "$PFAMInterproscan/$coord/$ScoreInterproscan" } } else { set ScoreInterproscan [Interproscan $Box $NameInterproscan $PFAMInterproscan $StartStopInterproscan Score] lappend LesConcatInterproscan "$PFAMInterproscan/$StartStopInterproscan/$ScoreInterproscan" } } if {$NameInterproscan==$Ref} { #ds le cas de la query(la ref)du macsims,c'est le nom de la box qui est reference ds macsims (pas le name) set NameInterproscan $Box #Espionne "\t Name devient $NameInterproscan" } set LesConcatMacsims [FromMacsims $FichierMacsim $NameInterproscan ConcatPfam] #Espionne "NameInterproscan $NameInterproscan" #Espionne "interproscan" #EspionneL "$LesConcatInterproscan" #Espionne "macsims" #EspionneL "$LesConcatMacsims" foreach ConcatInterproscan $LesConcatInterproscan { set trouve 0 #Espionne "ConcatInterproscan $ConcatInterproscan" set LesMotsInterproscan [split $ConcatInterproscan "/"] set PFAMInterproscan [lindex $LesMotsInterproscan 0] set StartStopInterproscan [lindex $LesMotsInterproscan 1] set ScoreInterproscan [lindex $LesMotsInterproscan 2] set CoordInterproscan [split $StartStopInterproscan "-"] set StartInterproscan [lindex $CoordInterproscan 0] set StopInterproscan [lindex $CoordInterproscan 1] foreach ConcatMacsims $LesConcatMacsims { #Espionne "ConcatMacsims $ConcatMacsims" set LesMotsMacsim [split $ConcatMacsims "/"] set PFAMMacsims [lindex $LesMotsMacsim 0] set StartStopMacsims [lindex $LesMotsMacsim 1] set CoordMacsims [split $StartStopMacsims "-"] set StartMacsims [lindex $CoordMacsims 0] set StopMacsims [lindex $CoordMacsims 1] if {[regexp $PFAMInterproscan $PFAMMacsims] && $StartStopInterproscan==$StartStopMacsims} { set trouve 1 break } if {[regexp $PFAMInterproscan $PFAMMacsims] && (([expr $StartMacsims-20] < $StartInterproscan && $StartInterproscan < [expr $StartMacsims+20]) || ([expr $StopMacsims-20] < $StopInterproscan && $StopInterproscan < [expr $StopMacsims+20]))} { set trouve 1 break } #cas ou le Pfam interproscan est contenu entierement dans le pfam macsims if {[regexp $PFAMInterproscan $PFAMMacsims] && (($StartMacsims < $StartInterproscan && $StartInterproscan < $StopMacsims) && ($StartMacsims < $StopInterproscan && $StopInterproscan < $StopMacsims))} { set trouve 1 break } } if {$trouve} { #Espionne "onatrouve $PFAMInterproscan" } else { lappend LesBoxPb $Box #Espionne "" #Espionne "$Box" #Espionne "$NameInterproscan" #Espionne "interproscan:" #EspionneL "$LesConcatInterproscan" #Espionne "macsims:" #EspionneL "$LesConcatMacsims" #Espionne "on n a PAS trouve $PFAMInterproscan" set ColorPFAM [ColorOfPfam $FichierMacsim $PFAMInterproscan] if {$ColorPFAM==""} { #ArrayNvColorPFAM: quand un pfam n a pas de couleur dans macsims, on cree une nouvelle couleur et on la stocke dans ArrayNvColorPFAM pour que quand on rencontre de nouveau ce PFAM, on puisse recuperer cette couleur if {[info exists ArrayNvColorPFAM($PFAMInterproscan)]} { set ColorPFAM $ArrayNvColorPFAM($PFAMInterproscan) } else { incr nbnvcoulpfam set ColorPFAM [expr [LastColorPfamInMacsims $FichierMacsim] + $nbnvcoulpfam] set ArrayNvColorPFAM($PFAMInterproscan) $ColorPFAM } } foreach seq [$root selectNodes "//sequence"] { set NameMacsim [$seq selectNodes "string(./seq-name)"] if {[regexp "$NameInterproscan" $NameMacsim]} { set noeud_ftable [$seq selectNodes ".//ftable"] if {$noeud_ftable==""} { set noeud_seqinfo [$seq selectNodes "./seq-info"] $noeud_seqinfo appendFromScript { com::ftable { com::fitem { com::ftype {com::text "PFAM-A"} com::fstart {com::text "$StartInterproscan"} com::fstop {com::text "$StopInterproscan"} com::fcolor {com::text "$ColorPFAM"} com::fscore {com::text "$ScoreInterproscan"} com::fnote {com::text "$PFAMInterproscan from Interproscan"} } } } } else { $noeud_ftable appendFromScript { com::fitem { com::ftype {com::text "PFAM-A"} com::fstart {com::text "$StartInterproscan"} com::fstop {com::text "$StopInterproscan"} com::fcolor {com::text "$ColorPFAM"} com::fscore {com::text "$ScoreInterproscan"} com::fnote {com::text "$PFAMInterproscan from Interproscan"} } } } } } set fh [open $FichierMacsim.aj "w"] puts $fh "" $doc asXML -channel $fh -doctypeDeclaration 0 close $fh } } } $doc delete } set LesBoxPb [ListeSansDoublon $LesBoxPb] set longDesBoxPb [llength $LesBoxPb] #Espionne "" #EspionneL "$LesBoxPb" #Espionne "LesBoxAj $longDesBoxPb" } proc LitEtCompleteXMLAideParenthese {} { foreach FichierMacsim $LesFichierMacsim { foreach NameInterproscan $LesNamesInterproscan { foreach ConcatInterproscan $LesConcatInterproscan { foreach ConcatMacsims $LesConcatMacsims { } if {$trouve} { Espionne "onatrouve $PFAMInterproscan" } else { foreach seq [$root selectNodes "//sequence"] { set NameMacsim [$seq selectNodes "string(./seq-name)"] } Espionne "oncreeaj" #set fh [open $FichierMacsim.aj "w"] #puts $fh "" #$doc asXML -channel $fh -doctypeDeclaration 0 #close $fh } } } $doc delete } set LesBoxPb [ListeSansDoublon $LesBoxPb] set longDesBoxPb [llength $LesBoxPb] } proc LitFichier {NomFichier} { #lit un fichier et renvoie son contenu dans une liste set f [open $NomFichier r] set liste [list] while {![eof $f]} {gets $f ligne ; lappend liste $ligne} close $f return $liste } proc LitFichierCompare {aTabCompare {FichierCompare ""}} { upvar $aTabCompare TabCompare global RepertoireDuGenome if {![file exists $FichierCompare]} {return ""} set ContenuCompare [ContenuDuFichier $FichierCompare] set SuisJeSurLesCoordonnees 0 set LesPosDeQuery1 {} set LesPosDeQuery2 {} set LesPoints {} foreach Ligne [LesLignesDuFichier $FichierCompare] { set Ligne [string trim $Ligne] regsub "\n" $Ligne "" Ligne if {$Ligne == "" } {continue} if {[regexp "COMPARE of" $Ligne]} { regsub "COMPARE of" $Ligne "" Input1 set Input1 [string trim $Input1] regsub "^: " $Input1 "" Input1 regexp "from: (\[0-9]*)" $Input1 tmp DQ1 regexp "to: (\[0-9]*)" $Input1 tmp FQ1 continue } elseif {[regexp "Description:" $Ligne] && ![info exists Description1]} { regsub "Description:" $Ligne "" Description1 continue } elseif {[regexp "\\*\\*\\* To" $Ligne ]} { regsub "\\*\\*\\* To" $Ligne "" Input2 regsub "^: " $Input2 "" Input2 regexp "from: (\[0-9]*)" $Input2 tmp DQ2 regexp "to: (\[0-9]*)" $Input2 tmp FQ2 continue } elseif {[regexp "Description:" $Ligne] && ![info exists Description2]} { regsub "Description:" $Ligne "" Description2 continue } elseif {[regexp "Word-size|Window" $Ligne]} { regexp "Window:(\[ 0-9]*)" $Ligne tmp Window if {[info exists Window]} {set Window [string trim $Window]} regexp "Stringency:(\[ 0-9]*)" $Ligne tmp Stringency if {[info exists Stringency]} {set Stringency [string trim $Stringency]} regexp "Points:(\[ 0-9]*)" $Ligne tmp Points if {[info exists Points]} {set Points [string trim $Points]} regexp "Word-size:(\[ 0-9]*)" $Ligne tmp WordSize if {[info exists WordSize]} {set WordSize [string trim $WordSize]} regexp "Alphabet:(\[ 0-9]*)" $Ligne tmp Alphabet if {[info exists Alphabet]} {set Alphabet [string trim $Alphabet]} set SuisJeSurLesCoordonnees 1 continue } elseif {$SuisJeSurLesCoordonnees && [regexp -nocase "\[a-z]" $Ligne tmp]} { break } elseif {$SuisJeSurLesCoordonnees} { while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LesPositions [split $Ligne " "] for {set i 0} {$i < [llength $LesPositions]} {incr i} { set X [lindex $LesPositions $i] if {$X == 0} {break} set Y [lindex $LesPositions [expr $i + 1]] set LePoint [list "$X" "$Y"] lappend LesPoints $LePoint set TabCompare($X,$Y) 1 incr i } } } set TabCompare(Input1) $Input1 set TabCompare(Input2) $Input2 set TabCompare(DebutQuery1) $DQ1 set TabCompare(FinQuery1) $FQ1 set TabCompare(DebutQuery2) $DQ2 set TabCompare(FinQuery2) $FQ2 set TabCompare(Points) $Points if {[info exists Description1]} {set TabCompare(Description1) $Description1} if {[info exists Description2]} {set TabCompare(Description2) $Description2} if {[info exists Window ]} {set TabCompare(Window) $Window} if {[info exists Stringency]} {set TabCompare(Stringency) $Stringency} if {[info exists WordSize ]} {set TabCompare(WordSize) $WordSize} if {[info exists Alphabet ]} {set TabCompare(Alphabet) $Alphabet} set TabCompare(LesPoints) $LesPoints return $aTabCompare } proc LitFichierSansBlancs {NomFichier} { #lit un fichier et renvoie son contenu dans une liste sauf les lignes vides set f [open $NomFichier r] set liste [list] while {![eof $f]} { gets $f ligne if {$ligne==""} continue lappend liste $ligne } close $f return $liste } proc LitGPL {{Qui ""} {Quoi ""}} { global LitGPL set QUI [string toupper $Qui] set QUOI [string toupper $Quoi] if {[info exists LitGPL($QUI,$QUOI)]} { return $LitGPL($QUI,$QUOI) } if {[info exists LitGPL("EstCharge")]} { return "" } set LitGPL("EstCharge") 1 set F "[HomeRipp]/GxHome/AgilentAnnot/GPL14550_family.soft" set LitGPL(FILENAME,) $F set PremiereFois 1 set LetsGo 0 set f [open $F r] while {[gets $f Ligne] >= 0} { set LesLinc {}; set LesRef {}; set LesEns {}; set LesGb {}; set LesTc {} if {[regexp "^!platform_table_begin" $Ligne]} {set LetsGo 1; continue} if {[regexp "^!platform_table_end" $Ligne]} {break} if {!$LetsGo} {continue} regsub -all ";" $Ligne "," Ligne set LesMots [split $Ligne "\t"] if {$PremiereFois} { set LesTetes $LesMots foreach Tete $LesTetes { set TETE [string toupper $Tete] lappend LesTETES $TETE } set LitGPL(LISTOF,HEADER) $LesTetes set PremiereFois 0 continue } set Id [lindex $LesMots 1] set ID [string toupper $Id] foreach Mot $LesMots H $LesTETES { set MOT [string toupper $Mot] set LitGPL($ID,$H) $Mot if {$H=="CYTOBAND"} { lassign [split $Mot "|"] SS Loc set LitGPL($ID,SPECIESSYMBOL) $SS set LitGPL($ID,CYTOBAND) $Loc lappend LitGPL(LISTOF,SPECIESSYMBOL) $SS lappend LitGPL(LISTOF,CYTOBAND) $Loc lappend LitGPL(IDSOFCYTOBAND,$Loc) $Id lappend LitGPL(IDSOFSPECIESSYMBOL,$SS) $Id } else { lappend LitGPL(LISTOF,$H) $Mot lappend LitGPL(IDSOF$H,$MOT) $Id } } } lappend LitGPL(LISTOF,HEADER) "SPECIESSYMBOL" lappend LesTetes "SpeciesSymbol" lappend LesTETES "SPECIESSYMBOL" foreach h $LesTetes H $LesTETES { set LitGPL(LISTOF,$H) [lsort -unique $LitGPL(LISTOF,$H)] set LitGPL(COUNTOF,$H) [llength $LitGPL(LISTOF,$H)] lappend LitGPL(ALL,COUNTS) "[format %5d $LitGPL(COUNTOF,$H)] $h" } close $f return [LitGPL $Qui $Quoi] } proc LitHelixDansPDB {laligne {chaine ""}} { # Numerotation format PDB commence a 1 et tcl # commence a 0. # Rajoute un blanc a laligne pour avoir la meme # coherence de format set laligne " $laligne" set HelNm [string range $laligne 8 10] set HelID [string range $laligne 12 14] set TypResDep [string range $laligne 16 18] set NomChnDep [string range $laligne 20 20] set NomResDep [string range $laligne 22 25] set TypResFin [string range $laligne 28 30] set NomChnFin [string range $laligne 32 32] set NomResFin [string range $laligne 34 37] set ClassHel [string range $laligne 39 40] set LongHel [string range $laligne 72 76] switch $ClassHel { 1 {set Type "Alpha"} 3 {set Type "Pi"} 5 {set Type "3_10"} 10 {set Type "polyP"} default {set Type "Alpha"} } if {$NomChnDep eq $chaine || $chaine eq ""} { return "Helix $Type $HelNm $NomChnDep $NomResDep $TypResDep $NomResFin $TypResFin $LongHel" } else { return "PasBon" } } proc LitLeTFA {FileOrText aNom aSeq} { upvar $aNom Nom $aSeq Seq if {[file exists $FileOrText]} { set Lignes [LesLignesDuFichier $FileOrText] } else { set Lignes [split $FileOrText "\n"] } lappend Lignes ">" set n 0 set laseq "" foreach l $Lignes { set l [string trim $l] if {$l eq ""} {continue} if {[string index $l 0] eq ">"} { if {$laseq ne ""} { set laseq [string map [list " " "" "-" "." "\n" "" "~" "."] $laseq] set laseq [string toupper $laseq] lappend Nom $lenom set Seq($lenom) $laseq set laseq "" incr n } set l [string trim [string range $l 1 end]] set ib [string first " " $l] if {$ib == -1} { set ib end } else { incr ib -1 } set lenom [string range $l 0 $ib] } else { append laseq $l } } return $n } proc LitLeTFAMagos {file aNom aSeq} { upvar $aNom Nom upvar $aSeq Seq set Lignes [LesLignesDuFichier $file] lappend Lignes ">" set n 0 set laseq "" foreach l $Lignes { set l [string trim $l] if {$l == ""} {continue} if {[string index $l 0] == ">"} { if {$laseq != ""} { regsub -all " " $laseq "" laseq regsub -all {\-} $laseq "." laseq regsub -all {\n} $laseq "" laseq lappend Nom $lenom set Seq($lenom) $laseq set laseq "" incr n } set l [string trim [string range $l 1 end]] set ib [string first " " $l] if {$ib == -1} { set ib end } else { incr ib -1 } set lenom [string range $l 0 $ib] } else { append laseq $l } } return $n } proc LitLesPoidsDuMSF {FichierMSF {ng ""}} { global SDG LNOrdali LesPoidsDesSequences if {$ng == ""} { set LesNomsDesSeqs $LNOrdali } else { set LesNomsDesSeqs [set SDG($ng)] } set LesLignes [LesLignesDuFichier $FichierMSF] if {[llength $LesLignes] < 2} { return 0 } set iSlashSlash [expr {[lsearch -regexp $LesLignes "//"]+1}] set iLeWeight [lsearch -regexp $LesLignes "Weight"] # lecture du champ Weight: du MSF set i 0 foreach Ligne [lrange $LesLignes $iLeWeight $iSlashSlash] { if {![regexp "Weight" $Ligne]} {continue} set iw [expr {[string last "Weight" $Ligne]+7}] set pd [string trim [string range $Ligne $iw end]] set nom [lindex $LesNomsDesSeqs $i] set LesPoidsDesSequences($nom) $pd incr i } return } proc LitLoupesParORGA {Fichier Qui} { set LesPABs {} set ORGA [Glossaire $Qui Complet] foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+} $Ligne]} {continue} scan $Ligne "%s %s" Genre Espece set Organisme "$Genre $Espece" if {$Organisme!=$Qui && $Organisme!=$ORGA} {continue} set LesPABs [StringSuivant "$Espece" dans $Ligne] } return [lsort $LesPABs] } proc LitLoupesParPAB {Fichier Qui} { set LesVraisOrgas {} foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+} $Ligne]} {continue} scan $Ligne "%s" PAB if {$PAB!=$Qui} {continue} set LesOrgas [StringSuivant "$PAB" dans $Ligne] foreach {Genre Espece} $LesOrgas { lappend LesVraisOrgas "$Genre $Espece" } } return [lsort $LesVraisOrgas] } proc LitMatrixFileGSE60458 {} { set F "/home/poidevin/ordi/Collaboration/Pheochromocytoma/GSE60458_series_matrix.txt" foreach Ligne [LesLignesDuFichier $F] { if {[regexp "^3180\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^12645\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^18548\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^24905\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^25447\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^26560\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^37443\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^39820\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^41227\t" $Ligne]} {Espionne "$Ligne"} if {[regexp "^45657\t" $Ligne]} {Espionne "$Ligne"} } } proc LitMatrixIL13 {} { set F "[GxData]/GxUpload/IL13/cel_files/GSE37693_series_matrix.txt" foreach Ligne [LesLignesDuFichier $F] { if {[regexp "^\"ILMN_1715901\"" $Ligne]} {Espionne "$Ligne"} } } proc LitMesClusters {{Fichier ""} {Destination ""}} { Wup "Lit le fichier LesCLusters et le formate correctement dans le fichier Destination" if {$Fichier==""} { set Fichier "/home/jmuller/Developpement/LesClusters" } if {! [File exists $Fichier]} {return "$Fichiers does not exists"} if {$Destination==""} { set Destination "/home/jmuller/Developpement/LesClustersFormates" } set AvecTest 0 set ProtDesClusters 0 set NbrCluster 0 set NbrProtTotal 0 foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+} $Ligne]} {continue} if { [regexp -nocase "^#" $Ligne]} {continue} scan $Ligne "%s %s %s %s" Cluster Numero NbProteine Definition set PABsInteressants [StringSuivant "$Definition " dans $Ligne] if {[regexp "^Cluster" $Ligne]} {incr NbrCluster} set ProtDesClusters [expr $ProtDesClusters+$NbProteine] set NbrProt [llength $PABsInteressants] set NbrProtTotal [expr $NbrProtTotal+$NbrProt] #Espionne "$PABsInteressants $NbrProt -- $NbrProtTotal" if {$AvecTest} { foreach PAB $PABsInteressants { set AutreNumero [MembresDuClusterN $PAB "Numero"] if {$AutreNumero!=$Numero} { Espionne "Vrai $AutreNumero de $PAB ancien $Numero" } } } lappend ListeASauver [format "%-7s %3d %4d %-25s %s" $Cluster $Numero $NbProteine $Definition $PABsInteressants] foreach Element $PABsInteressants { lappend ListeCompleteDesPABs $Element #Espionne "[Narcisse $Element]" } } lappend ListeASauver "Nombre de Clusters: $NbrCluster pour $ProtDesClusters" lappend ListeASauver "Proteines surlignees: $NbrProtTotal" #EspionneL "$ListeASauver" #Espionne "$ProtDesClusters" set ListeCompleteDesPABs [lsort $ListeCompleteDesPABs] #EspionneL "$ListeCompleteDesPABs [llength $ListeCompleteDesPABs]" return [SauveLesLignes $ListeASauver dans $Destination] } proc LitPG94 {} { set I 0 foreach Fichier [lsort [glob "[RepertoireDuGenome]/DeWolfgang/*"]] { set Definition [IemeLigneDuFichier $Fichier 2] set Nom "Seq[incr I] " set NomFic $Nom if {[regexp {^affy ([0-9]+(_[fr])?_at)} $Definition Match Access]} { set Nom "$Access " ; set NomFic $Access} if {[regexp {^A[^ ]+} $Definition Match]} { set Nom "" ; set NomFic $Match } set TFA [SequenceFormatTFA [ContenuDuFichier $Fichier] "$Nom$Definition" "gcg"] Espionne $TFA Sauve $TFA dans "[RepertoireDuGenome]/DeWolfgang/$NomFic.tfa" } exit } proc LitRef {} { global Ref RefS if {[info exists Ref]} {unset Ref} if {[info exists RefS]} {unset RefS} set Ll [LesLignesDuFichier "/home/moumou/dbmarie/ListeOG.txt"] foreach l $Ll { regsub -all {\t+} $l "\t" l set Ls [split $l "\t"] set ab [string range [lindex $Ls 0] 1 end-1] set nm [lindex $Ls 1] set tx [lindex $Ls 2] set dm [lindex $Ls 3] set Ref($tx) [list $ab $nm $dm] set RefS($ab) [list $tx $nm $dm] } return } proc LitSheetDansPDB {laligne {chaine ""}} { # Numerotation format PDB commence a 1 et tcl # commence a 0. # Rajoute un blanc a laligne pour avoir la meme # coherence de format set laligne " $laligne" set StrandID [string range $laligne 8 10] set SheetID [string range $laligne 12 14] set NbStrd [string range $laligne 15 16] set TypResDep [string range $laligne 18 20] set NomChnDep [string range $laligne 22 22] set NomResDep [string range $laligne 23 26] set TypResFin [string range $laligne 29 31] set NomChnFin [string range $laligne 33 33] set NomResFin [string range $laligne 34 37] set SensStrd [string range $laligne 39 40] if {$NomChnDep ne $NomChnFin} {set NomChnDep "cesttroplebordel"} if {$NomChnDep == $chaine || $chaine == ""} { return "Sheet $SheetID $StrandID $NomChnDep $NomResDep $TypResDep $NomResFin $TypResFin $SensStrd" } else { return "PasBon" } } proc LitSortieOligoArray {{PAB ""} {Dir ""}} { Wup "Recherche dans une sortie OligoArray 1.0 les oligos, leurs positions, tailles ..." Wup "Version sans prise en compte des AccessDef voir proc LesAccessDefDeLOligoArray" Wup "Version amelioree pour meilleure lecture d'une sortie OligoArray" if {$PAB=="" || $Dir==""} { return "" } set RepProbes "[RepertoireDuGenome]/Probes" if {[regexp -all {/} $Dir]} { set FichierProbes "$RepProbes/[file tail $Dir]/$PAB" } else { set FichierProbes "$RepProbes/$Dir/$PAB" } if {! [file exists $FichierProbes]} { return "-2" } set LigneSplitee {} set LesOligos {} set TailleOligo 0 set OnLeTient 0 set F [open "$FichierProbes"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} { continue } if {[regexp -nocase -all "NoOligo" $Ligne]} {return "-1"} if {[string range $Ligne 0 0] != ">"} { if {! $OnLeTient} {continue} set TailleOligo [string length $Ligne] set ExpTm [CalculTmDeLaSeq $Ligne "" 0.0 DNADNA] #set ExpTm [NearestNeighborTm $Ligne] lappend LesOligos [list $NomOligo $TailleOligo $OligoTm $SecondaryTm $DistanceDu3End $ExpTm] set OnLeTient 0 continue } set OnLeTient 1 set DistanceDu3End 0 set OligoTm 0 set SecondaryTm 0 set LigneSplitee [split "$Ligne" "\t"] set Entete [lindex $LigneSplitee 0] set PAB [lindex $Entete 0] regsub ">" $PAB "" PAB set NomOligo [lindex $Entete 1] set DistanceDu3End [lindex $LigneSplitee 1] set OligoTm [lindex $LigneSplitee 2] set SecondaryTm [lindex $LigneSplitee 3] } close $F return $LesOligos } proc LitString {{Qui ""} {Quoi ""} {Ou ""}} { #meme programme que Tau #Ou = le fichier .string global LitString if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Qui == "Reset"} { if {[info exists LitString]} { unset LitString } return "" } if {$Ou!=""} { if {[info exists LitString(File,Name)] && $Ou!=$LitString(File,Name)} { unset LitString } set Fichier $Ou } else { if {[info exists LitString(File,Name)]} { set Ou $LitString(File,Name) set Fichier $Ou } else { FaireLire "Il faut donner un nom de fichier la 1ere fois" return "" } } if {[info exists LitString($Qui,$Quoi)]} { return $LitString($Qui,$Quoi) } if {[info exists LitString("EstCharge")]} { return "" } set LitString("EstCharge") 1 set Q [file tail $Fichier] regsub -nocase {\.[^\.]+$} $Q "" Q LoadTxlWithRowsOfCells $Fichier Txl -1 "\t" set LitString(File,Name) $Fichier set LitString(File,Queue) $Q set LitString(ListOf,Header) $Txl(ListHeaderPlease,$Q) set LitString(ListOf,Index) $Txl(ListAllPlease,$Q) foreach I $LitString(ListOf,Index) { foreach H $LitString(ListOf,Header) { set LitString($I,$H) $Txl($I,$H) } set LitString($LitString($I,PIDInitial),PN) $LitString($I,PNInitial) set LitString($LitString($I,PNInitial),PID) $LitString($I,PIDInitial) set LitString($LitString($I,PIDCop),PN) $LitString($I,PNCop) set LitString($LitString($I,PNCop),PID) $LitString($I,PIDCop) set PI $Txl($I,PIDInitial) set PC $Txl($I,PIDCop) lappend LitString($PI,ListOfCop) $PC lappend LitString($PC,ListOfRef) $PI lappend LitString(ListOf,Ref) $PI lappend LitString(ListOf,Cop) $PC set LitString($PI,IsRef) 1 if { ! [info exists LitString($PC,IsRef)]} { set LitString($PC,IsRef) 0 } } set LitString(ListOf,Ref) [lsort -unique $LitString(ListOf,Ref)] set LitString(ListOf,Cop) [lsort -unique $LitString(ListOf,Cop)] return [LitString $Qui $Quoi] } proc LitTfa {f} { global Tfa RefS set root [file tail $f] if {[info exists Tfa]} {unset Tfa} set Ll [LesLignesDuFichier $f] foreach l $Ll { if {! [regexp {^>} $l]} {continue} set tx "" set nt "" set Ls [split $l "|"] if {[regexp {^>SM} $l]} { set nm $root set tx 9606 } elseif {[llength $Ls] == 1} { if {[regexp {^>PDB} $l]} {continue} set ib [string first " " $l] if {$ib == -1} {set ib end} set nm [string trim [string range $l 1 $ib]] set ab [lindex [split $nm "_"] 0] if {[info exists RefS($ab)]} {set tx [lindex [set RefS($ab)] 0]} } else { set nm [string trim [string range [lindex $Ls 0] 1 end]] set tx [string trim [lindex $Ls 1]] if {[llength $Ls] == 3} {set nt [string trim [lindex $Ls 2]]} } set Tfa($nm) [list $tx $nt] } return } proc LitTurnDansPDB {laligne {chaine ""}} { # Numerotation format PDB commence a 1 et tcl # commence a 0. # Rajoute un blanc a laligne pour avoir la meme # coherence de format set laligne " $laligne" set TurnNm [string range $laligne 8 10] set TypResDep [string range $laligne 16 18] set NomChnDep [string range $laligne 20 20] set NomResDep [string range $laligne 21 24] set TypResFin [string range $laligne 27 29] set NomChnFin [string range $laligne 31 31] set NomResFin [string range $laligne 32 35] if {$NomChnDep eq $chaine || $chaine eq ""} { return "Turn XXX $TurnNm $NomChnDep $NomResDep $TypResDep $NomResFin $TypResFin" } else { return "PasBon" } } proc LitVecLC {file alx aly} { upvar $alx lx upvar $aly ly global Lnom MaxX MaxY MinX MinY Max set lignes [LesLignesDuFichier $file] set mx 0. ; set my 0. foreach l $lignes { set sline [split $l " "] lassign $l nm x y lappend lxyn [list $x $y $nm] set mx [expr {$mx + $x}] set my [expr {$my + $y}] } set mx [expr {$mx / [llength $lignes]}] set my [expr {$my / [llength $lignes]}] set lxyn [lsort -index 2 $lxyn] set Lnom {} foreach e $lxyn { lassign $e x y n lappend Lnom $n lappend lx [expr {$x - $mx}] lappend ly [expr {$y - $my}] } puts "\nfile : $file" puts "Moy X : $mx" puts "Moy Y : $my" return puts "\n$file [llength $lnom]" puts [format "acide %s norm max %7.2f" $NAA $Nmax] puts "" set fmt "%s | %7.3f %7.3f %7.3f| %6.3f %6.3f %7.2f" foreach x $lx y $ly n $lnom { set xn [expr {$x/$Nmax}] set yn [expr {$y/$Nmax}] lappend nxn $xn lappend nyn $yn if {$xn > $MaxX} {set MaxX $xn} if {$xn < $MinX} {set MinX $xn} if {$yn > $MaxY} {set MaxY $yn} if {$yn < $MinY} {set MinY $yn} set OldN [expr {sqrt($x*$x+$y*$y)}] set Norm [expr {sqrt($xn*$xn+$yn*$yn)}] puts [format $fmt $n $x $y $OldN $xn $yn $Norm] } set Max [Maxi [Maxi $MaxX $MaxY] [expr -1.*[Mini $MinX $MinY]]] set lx $nxn set ly $nyn update return } proc LnFn {n} { if {$n == 0} { return 1. } else { return [expr {log(sqrt(2.*3.1415926))+($n+0.5)*log($n)-$n}] } } proc Load2GO {aTab} { upvar $aTab Tab set Tab(LesTypesDeRequetes) {} set Tab(LesRequetes) {} set Tab(LesGO) {} foreach Fichier [LesFichiers2GO] { Espionne "2GO -> [file tail $Fichier] loading ..." set F [open $Fichier] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == "" || [regexp "^!" $Ligne]} {continue} set Debut [expr [string first ":" $Ligne] + 1] set GO [lindex [split [string trim $Ligne] " "] end] set go [string tolower $GO] set Entete [string trim [string range $Ligne 0 [expr $Debut - 2]]] if {![string equal -nocase $Entete "SP_KW"]} { if {[info exists RequeteTot]} {unset RequeteTot} scan $Ligne "%s" RequeteTot set RequeteTotLower [string tolower $RequeteTot] set Requete [string trim [string range $RequeteTot $Debut end]] set RequeteLower [string tolower $Requete] } else { set Fin [expr [string first ">" $Ligne] - 1] #debutLP set Debut [string first " " $Ligne] #finLP set RequeteTot [string trim [string range $Ligne 0 $Fin]] set RequeteTotLower [string tolower [string trim [string range $Ligne 0 $Fin]]] set Requete [string trim [string range $Ligne $Debut $Fin]] set RequeteLower [string tolower [string trim [string range $Ligne $Debut $Fin]]] } if {[string equal -nocase $Entete "ec"]} { set RequeteLower $Requete set Requete "ec $Requete" } if {![info exists Tab($Requete,LesLiens)]} { set Tab($Requete,LesLiens) {} set Tab($RequeteLower,LesLiens) {} set Tab($RequeteTot,LesLiens) {} set Tab($RequeteTotLower,LesLiens) {} set WhatIsIt [file tail $Fichier] if {![info exists TabTmp($WhatIsIt)]} { set TabTmp($WhatIsIt) 1 lappend Tab(LesTypesDeRequetes) $WhatIsIt } set Tab($Requete,WhatIsIt) $WhatIsIt set Tab($RequeteLower,WhatIsIt) $WhatIsIt set Tab($RequeteTot,WhatIsIt) $WhatIsIt set Tab($RequeteTotLower,WhatIsIt) $WhatIsIt lappend Tab(LesRequetes) $Requete } if {![info exists Tab($GO,LesLiens) ]} { lappend Tab(LesGO) $GO set WhatIsIt GO if {![info exists TabTmp($WhatIsIt)]} { set TabTmp($WhatIsIt) 1 lappend Tab(LesTypesDeRequetes) $WhatIsIt } set Tab($GO,WhatIsIt) $WhatIsIt set Tab($go,WhatIsIt) $WhatIsIt set Tab($GO,LesLiens) {} set Tab($go,LesLiens) {} } if {![info exists TabTmp($Requete,$GO)]} { lappend Tab($Requete,LesLiens) $GO lappend Tab($RequeteLower,LesLiens) $GO lappend Tab($RequeteTot,LesLiens) $GO lappend Tab($RequeteTotLower,LesLiens) $GO lappend Tab($GO,LesLiens) $Requete lappend Tab($go,LesLiens) $Requete set TabTmp($Requete,$GO) 1 } if {![info exists TabTmp($Requete)]} { set TabTmp($Requete) 1 lappend Tab(LesRequetes) $Requete } } Espionne "2GO -> [file tail $Fichier] loaded" close $F } if {[info exists TabTmp]} {unset TabTmp} return $aTab } proc LoadAnchors {aTab FichierAnchors} { upvar $aTab Tab if {![file exists $FichierAnchors]} {return} set Tab($FichierAnchors,LesId) {} set F [open $FichierAnchors] while {[gets $F Ligne]>=0} { if {![regexp {^seq\:} $Ligne]} {continue} set LaLigne [split $Ligne "\t"] regsub -all "\t" $Ligne " " Ligne while {[regexp " " $Ligne]} {regsub -all {[ ]{2,}} $Ligne " " Ligne} set LaLigne [split $Ligne " "] if {![info exists Tab($FichierAnchors,IdDeRef)]} {set Tab($FichierAnchors,IdDeRef) [lindex $LaLigne 1]} set Id [lindex $LaLigne 2] if {![info exists Tab($FichierAnchors,Id,$Id,NbLMS)]} { set Tab($FichierAnchors,Id,$Id,NbLMS) 0 lappend Tab($FichierAnchors,LesId) $Id } incr Tab($FichierAnchors,Id,$Id,NbLMS) set nLMS [set Tab($FichierAnchors,Id,$Id,NbLMS)] set Tab($FichierAnchors,Id,$Id,LMS,$nLMS,Pos) [lindex $LaLigne 4] set Tab($FichierAnchors,Id,$Id,LMS,$nLMS,Beg) [lindex $LaLigne 6] set Tab($FichierAnchors,Id,$Id,LMS,$nLMS,End) [lindex $LaLigne 7] set Tab($FichierAnchors,Id,$Id,LMS,$nLMS,Len) [lindex $LaLigne 9] } close $F return $aTab } proc LoadBLT {version dir} { set prefix "lib" set suffix [info sharedlibextension] regsub {\.} $version {} version_no_dots # Determine whether to load the full BLT library or # the "lite" tcl-only version. if { [info commands tk] == "tk" } { set name ${prefix}BLT${version_no_dots}${suffix} } else { set name ${prefix}BLTlite${version_no_dots}${suffix} } global tcl_platform if { $tcl_platform(platform) == "unix" } { set library [file join $dir $name] if { ![file exists $library] } { # Try the parent directory. set library [file join [file dirname $dir] $name] } if { ![file exists $library] } { # Default to the path generated at compilation. set library [file join "/linux/local/ActiveTcl/lib" $name] } } else { set library $name } load $library BLT } proc LoadBlast {aTabBlast FichierBlast} { upvar $aTabBlast TabBlast set Compteur 0 set ExpectDeRef 1e200 set NbSubjectTot 1e200 if {![file exists $FichierBlast]} {return} set SuisJeSurLesAlignements 0 set SuisJeSurUnAlignement 0 set ToutLeSubject "" set TousLesSubjects {} set j 0 set SuisJeSurLeNomDeLaQuery 0 set TailleMaxDUnFichier [expr 25*1e6] if {$TailleMaxDUnFichier < [file size $FichierBlast]} { set NbHitsMax 10000 Espionne "$FichierBlast is too long, we are going to study only the $NbHitsMax first hits" } else { set NbHitsMax "NoLimit" } set NomQuery {} set F [open $FichierBlast] set nHits 0 while {[gets $F Ligne]>=0} { if {[string range $Ligne 0 6] == "Query= "} { set SuisJeSurLeNomDeLaQuery 1 set Ligne [string range $Ligne 7 end] } if {!$SuisJeSurLesAlignements && [regexp "\[0-9\.]* letters" $Ligne]} { set SuisJeSurLeNomDeLaQuery 0 } if {$SuisJeSurLeNomDeLaQuery} { regsub "\n" $Ligne " " Ligne lappend NomQuery [string trim $Ligne] } incr j if {$j == 1 || $j == 2} { if {[string range $Ligne 0 4] == "BLAST" || [string range $Ligne 0 5] == "TBLAST"} { set LigneTrim [string trim $Ligne] set TypeDeBlast [string range $LigneTrim 0 [expr [string first " " $LigneTrim]-1]] set TabBlast($FichierBlast,TypeDeBlast) $TypeDeBlast } } if {[string range $Ligne 0 11] == " Database: " || [string range $Ligne 0 7] == "Matrix: "} { if {$ToutLeSubject != ""} {lappend TousLesSubjects $ToutLeSubject} regsub "\n" $Ligne "" Ligne regsub " Database: " $Ligne "" Ligne set TabBlast($FichierBlast,Database) [string trim $Ligne] set SuisJeSurLesAlignements 0 break } if {[string range $Ligne 0 0] != ">" && $SuisJeSurLesAlignements == 0} {continue} if {[string range $Ligne 0 8] == " Score = "} {incr nHits} if {$NbHitsMax != "NoLimit" && $NbHitsMax < $nHits} { if {$ToutLeSubject != ""} {lappend TousLesSubjects $ToutLeSubject} break } if {[string range $Ligne 0 0] == ">"} { if {$ToutLeSubject != ""} {lappend TousLesSubjects $ToutLeSubject} set ToutLeSubject "" set SuisJeSurLesAlignements 1 set SuisJeSurUnAlignement 1 append ToutLeSubject "$Ligne" } elseif {$SuisJeSurUnAlignement && $SuisJeSurLesAlignements} { append ToutLeSubject "\n$Ligne" } } close $F set NbSubject 0 foreach Subject $TousLesSubjects { regsub -all {Expect[ 0-9\(\)]* =} $Subject "Expect =" Subject set AiJeAuMoinsUnExpectCorrect 0 set Tmp $Subject while {[regexp { Expect =([ e0-9\.\-]*)} $Tmp ToutLExpect Expect]} { set Expect [string trim $Expect] if {[string range $Expect 0 0] == "e"} {set Expect "1$Expect"} if {$Expect <= $ExpectDeRef} {set AiJeAuMoinsUnExpectCorrect 1;break} regsub { Expect =[ e0-9\.\-]*} $Tmp "" Tmp } unset Tmp if {!$AiJeAuMoinsUnExpectCorrect} {continue} set SubjectBrut $Subject ####BanqueId et Access et definition et Taille###### regexp -indices " Length = " $Subject DebFin set EnteteSubject [string trim [string range $Subject 1 [lindex $DebFin 0]]] set Subject [string range $Subject [lindex $DebFin 0] end ] regsub -all "\n" $EnteteSubject " " EnteteSubject regsub -all {\(|\)} $EnteteSubject "_" EnteteSubject while {[regexp " " $EnteteSubject]} {regsub -all " " $EnteteSubject " " EnteteSubject} set LEnteteSubject [split $EnteteSubject " "] set BanqueId [lindex $LEnteteSubject 0] #set BANQUEID [string toupper $BanqueId] set Access [lindex $LEnteteSubject 1] regsub "^_" $Access "" Access regsub "_$" $Access "" Access #set ACCESS [string toupper $Access ] set Definition [join [lrange $LEnteteSubject 2 end] " "] if {$Access == ""} { set Access $BanqueId set Definition "" } elseif {![regexp -nocase {^[a-z]} $Access] || [EstUnAccessPDB $BanqueId]} { set Access $BanqueId set Definition [join [lrange $LEnteteSubject 1 end] " "] } #########Elimination en fonction de l'access ou du banqueid################## incr NbSubject if {$NbSubjectTot < $NbSubject} {incr NbSubject -1;break} ############################################################################# regexp -nocase { Length = ([0-9]+)[ ]*\n} $Subject tmp Taille regsub { Length = [0-9]+[ ]*\n} $Subject "" Subject set TabBlast($FichierBlast,Subject,$NbSubject) $BanqueId set TabBlast($FichierBlast,BanqueId,$BanqueId,Access) $Access set TabBlast($FichierBlast,BanqueId,$BanqueId,Definition) $Definition set TabBlast($FichierBlast,BanqueId,$BanqueId,Taille) $Taille set TabBlast($FichierBlast,BanqueId,$BanqueId,SubjectBrut) $SubjectBrut ##############Split les alignements du subject############## set SuisJeSurUnAlignement 0 set LesAlignements {} set LAlignement {} foreach Ligne [split $Subject "\n"] { if {[regexp -nocase "Score = " $Ligne]} { if {$LAlignement != {}} { lappend LesAlignements [join $LAlignement "\n"] set LAlignement {} } lappend LAlignement $Ligne set SuisJeSurUnAlignement 1 } elseif {$SuisJeSurUnAlignement} { lappend LAlignement $Ligne } } lappend LesAlignements [join $LAlignement "\n"] ##############Decomposition des alignements########### set NbSegment 0 foreach Alignement $LesAlignements { set AlignementBrut $Alignement incr NbSegment set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,AlignBrut) $Alignement set Score "" set Expect "" set Identities "" set Gaps "" set Orientation "" set Positives "" set Query "" set Sbjct "" set Inter "" set AlignementLineaire "" set DebutQuery "" set FinQuery "" set DebutSbjct "" set FinSbjct "" regexp { Score = ([e0-9a-z\.\+\(\) ]+)} $Alignement tmp Score regsub { Score = [e0-9a-z\.\+\(\) ]+} $Alignement "" Alignement set Score [string trim $Score] regexp { Expect =([ e0-9\.\-]+)} $Alignement tmp Expect regsub { Expect =[ e0-9\.\-]+} $Alignement "" Alignement set Expect [string trim $Expect] if {[regexp "^e" $Expect]} { set Expect "1$Expect"} regexp { Identities = ([0-9a-z\/\%\(\) ]+)} $Alignement tmp Identities regsub { Identities = [0-9a-z\/\%\(\) ]+} $Alignement "" Alignement set Identities [string trim $Identities] if {[regexp { Positives = ([0-9\/\%\(\) ]+)} $Alignement tmp Positives]} { regsub { Positives = [0-9\/\%\(\) ]+} $Alignement "" Alignement } set Positives [string trim $Positives] if {[regexp { Gaps = ([0-9\/\%\(\) ]+)} $Alignement tmp Gaps]} { regsub { Gaps = [0-9\/\%\(\) ]+} $Alignement "" Alignement } set Gaps [string trim $Gaps] regexp -nocase { [a-z]+ = ([0-9a-z\/\-\+ ]+)} $Alignement tmp Orientation regsub -nocase { [a-z]+ = [0-9a-z\/\-\+ ]+} $Alignement "" Alignement set Orientation [string trim $Orientation] regsub -all "," $Alignement "" Alignement set Alignement [string trim $Alignement] foreach Ligne [split $Alignement "\n"] { if {$Query != "" && [regexp {^Query: [0-9 ]+} $Ligne]} { regsub {[0-9 ]+$} $Query "" Query append Query [string range $Ligne $n end] } if {$Sbjct != "" && [regexp {^Sbjct: [0-9 ]+} $Ligne]} { regsub {[0-9 ]+$} $Sbjct "" Sbjct append Sbjct [string range $Ligne $n end] } if { $Inter != "" && [regexp -nocase {^ } $Ligne] && [regexp -nocase {[a-z\|\-\+]} $Ligne]} { append Inter [string range $Ligne $n end] } if { $Query == "" && [regexp {^Query: ([0-9 ]+)} $Ligne tmp DebutQuery]} { set n [string length $tmp] append Query $Ligne } if { $Sbjct == "" && [regexp {^Sbjct: ([0-9 ]+)} $Ligne tmp DebutSbjct]} { append Sbjct $Ligne } if { $Inter == "" && [regexp {^ } $Ligne] && [regexp {[a-z\|\-\+]} $Ligne] } { append Inter $Ligne } } regexp {([0-9]+)[ ]*$} $Query tmp FinQuery regexp {([0-9]+)[ ]*$} $Sbjct tmp FinSbjct if {$AlignementLineaire != ""} {set AlignementLineaire "\n"} append AlignementLineaire "$Query\n$Inter\n$Sbjct" set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,Score) $Score set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,Expect) $Expect set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,Identities) $Identities set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,Positives) $Positives set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,Gaps) $Gaps set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,Orientation) $Orientation set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,Align) $Alignement set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,AlignLineaire) $AlignementLineaire set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,AlignBrut) $AlignementBrut set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,DQ) [string trim $DebutQuery] set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,FQ) [string trim $FinQuery ] set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,DS) [string trim $DebutSbjct] set TabBlast($FichierBlast,BanqueId,$BanqueId,Segment,$NbSegment,FS) [string trim $FinSbjct ] } set TabBlast($FichierBlast,BanqueId,$BanqueId,NbSegment) $NbSegment } set NomQuery [join $NomQuery " "] while {[regexp " " $NomQuery]} {regsub -all " " $NomQuery " " NomQuery} set TabBlast($FichierBlast,Query) $NomQuery set TabBlast($FichierBlast,Taille) [TailleDeLaQueryDuBlast $FichierBlast] set TabBlast($FichierBlast,NbSubject) $NbSubject return $aTabBlast } proc LoadCorrespondances {aTab FileCorrespondances} { ### Chargement des correspondances entre BoiteGscope BoiteProjet et DDseqini ### if {![file exists $FileCorrespondances]} { return } upvar $aTab Tab set Tab($FileCorrespondances,NbGscopeBox) 0 set Tab($FileCorrespondances,LesGscopeBox) {} set Tab($FileCorrespondances,LesProjetBox) {} set Tab($FileCorrespondances,LesIniSeqBox) {} set Tab($FileCorrespondances,LesClusters) {} set Tab($FileCorrespondances,LesDates) {} set F [open $FileCorrespondances] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {[regexp {^\#} $Ligne]} {continue} set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set GscopeBox [lindex $LaLigne 0] set ProjetBox [lindex $LaLigne 1] set IniSeqBox [lindex $LaLigne 2] set Orga [lindex $LaLigne 3] set Date [lindex $LaLigne 4] set Cluster [lindex $LaLigne 5] set Def [lindex $LaLigne 6] set VMasked [lindex $LaLigne 7] set RMasked [lindex $LaLigne 8] set GMasked [lindex $LaLigne 9] set LesExpr [lrange $LaLigne 10 end] incr Tab($FileCorrespondances,NbGscopeBox) lappend Tab($FileCorrespondances,LesGscopeBox) $GscopeBox lappend Tab($FileCorrespondances,LesProjetBox) $ProjetBox set Tab($FileCorrespondances,GscopeBox,$GscopeBox,IniSeqBox) $IniSeqBox set Tab($FileCorrespondances,GscopeBox,$GscopeBox,ProjetBox) $ProjetBox set Tab($FileCorrespondances,GscopeBox,$GscopeBox,Orga) $Orga set Tab($FileCorrespondances,GscopeBox,$GscopeBox,Date) $Date set Tab($FileCorrespondances,GscopeBox,$GscopeBox,Cluster) $Cluster set Tab($FileCorrespondances,GscopeBox,$GscopeBox,Def) $Def set Tab($FileCorrespondances,GscopeBox,$GscopeBox,VMasked) $VMasked set Tab($FileCorrespondances,GscopeBox,$GscopeBox,RMasked) $RMasked set Tab($FileCorrespondances,GscopeBox,$GscopeBox,GMasked) $GMasked set Tab($FileCorrespondances,GscopeBox,$GscopeBox,LesExpressions) $LesExpr set Tab($FileCorrespondances,ProjetBox,$ProjetBox,GscopeBox) $GscopeBox if {![info exists Tab($FileCorrespondances,IniSeqBox,$IniSeqBox,LesGscopeBox)]} { lappend Tab($FileCorrespondances,LesIniSeqBox) $IniSeqBox set Tab($FileCorrespondances,IniSeqBox,$IniSeqBox,LesGscopeBox) {} } lappend Tab($FileCorrespondances,IniSeqBox,$IniSeqBox,LesGscopeBox) $GscopeBox if {![info exists Tab($FileCorrespondances,Cluster,$Cluster,LesGscopeBox)]} { lappend Tab($FileCorrespondances,LesClusters) $Cluster set Tab($FileCorrespondances,Cluster,$Cluster,LesGscopeBox) {} set Tab($FileCorrespondances,Cluster,$Cluster,NbGscopeBox) 0 } incr Tab($FileCorrespondances,Cluster,$Cluster,NbGscopeBox) lappend Tab($FileCorrespondances,Cluster,$Cluster,LesGscopeBox) $GscopeBox if {![info exists Tab($FileCorrespondances,Date,$Date,LesGscopeBox)]} { lappend Tab($FileCorrespondances,LesDates) $Date set Tab($FileCorrespondances,Date,$Date,LesGscopeBox) {} } lappend Tab($FileCorrespondances,Date,$Date,LesGscopeBox) $GscopeBox } close $F return $aTab } proc LoadDB {} { global db set db "root" sqlite3 $db clientmail.sql set Lvar [$db eval {select distinct var from clientvar}] global {*}$Lvar update foreach {var key val} [$db eval {select var,key,val from clientvar}] { puts ">>$var<< >>$key<< >>$val<<" if {$key ne ""} { set ${var}($key) $val } else { set $var $val } } update return } proc LoadDBTSS {aTab} { ### Charge la banque DBTSS ### set FileDBTSS [DBTSSDir "TFAs"] if {![file exists $FileDBTSS]} { return } upvar $aTab Tab set Tab(LesId) {} Espionne "DBTSS TFA sequence loading ..." set Tab($FileDBTSS,LesDBTSS) {} foreach TFA [split [ContenuDuFichier $FileDBTSS] ">"] { set TFA [string trim $TFA] if {$TFA == ""} {continue} set TFA ">$TFA" if {![regexp -nocase {^>([0-9a-z]+)\:([0-9a-z_]+)} $TFA tmp ORG IdCourt]} { Espionne "Problem with : \n$TFA" continue } set Id "$ORG:$IdCourt" set Organism "Unknown unknown" if {$ORG == "MMU"} {set Organism "Mus musculus"} if {$ORG == "HSA"} {set Organism "Homo sapiens"} lappend Tab(LesId) $IdCourt set Tab($Id,Organism) $Organism set Tab($IdCourt,Organism) $Organism set Tab($Id,SeqTFA) $TFA set Tab($IdCourt,SeqTFA) $TFA } Espionne "DBTSS TFA sequence loaded." return $aTab } proc LoadEPDIdOrga {aTab} { ### Charge le fichier EPDIdOrga ### set FileEPDIdOrga [EPDDir "EPDIdOrga"] if {![file exists $FileEPDIdOrga]} {Espionne "File $FileEPDIdOrga does not exists" ; return } upvar $aTab Tab set Tab(LesEPDIds) {} set Tab(LesEPDOrgas) {} set Tab(LesEPDOrganisms) {} set Tab(LesEPDOrganismsLongs) {} Espionne "EPD Ids and EPD Organism loading ..." set Tab($FileEPDIdOrga,LesEPDIdsOrgas) {} set F [open $FileEPDIdOrga] while {[gets $F Ligne]>=0} { set LaLigne [split $Ligne "\t"] set EPDId [lindex $LaLigne 0] set EPDOrga [lindex $LaLigne 1] set EPDOrganism [lindex $LaLigne 2] set EPDOrganismLong [lindex $LaLigne 3] lappend Tab(LesEPDIds) $EPDId lappend Tab(LesEPDOrgas) $EPDOrga lappend Tab(LesEPDOrganisms) $EPDOrganism lappend Tab(LesEPDOrganismsLongs) $EPDOrganismLong lappend Tab(EPDOrga,$EPDOrga,LesEPDIds) $EPDId set Tab(EPDId,$EPDId,EPDOrga) $EPDOrga set Tab(EPDId,$EPDId,EPDOrganism) $EPDOrganism set Tab(EPDId,$EPDId,EPDOrganismLong) $EPDOrganismLong } close $F Espionne "EPD Ids and EPD Organism loaded." return $aTab } proc LoadEPDOrgas {aTab} { ### Charge le fichier EPDOrgas ### set FileEPDOrgas [EPDDir "EPDOrgas"] if {![file exists $FileEPDOrgas]} {Espionne "File $EPDOrgas does not exists"; return } upvar $aTab Tab set Tab(LesEPDOrgas) {} set Tab(LesEPDOrganisms) {} set Tab(LesEPDOrganismsLongs) {} Espionne "EPD Organism loading ..." set Tab($FileEPDOrgas,LesEPDOrgas) {} foreach Ligne [LesLignesDuFichier $FileEPDOrgas] { set LaLigne [split $Ligne "\t"] set EPDOrga [lindex $LaLigne 0] set EPDOrganism [lindex $LaLigne 1] set EPDOrganismLong [lindex $LaLigne 2] lappend Tab(LesEPDOrgas) $EPDOrga lappend Tab(LesEPDOrganisms) $EPDOrganism lappend Tab(LesEPDOrganismsLongs) $EPDOrganismLong set Tab(EPDOrga,$EPDOrga,EPDOrganism) $EPDOrganism set Tab(EPDOrga,$EPDOrga,EPDOrganismLong) $EPDOrganismLong set Tab(EPDOrganism,$EPDOrganism,EPDOrganismLong) $EPDOrganismLong } Espionne "EPD Organism loaded." return $aTab } proc LoadEponine {aTab FileEponine} { ### Chargement des resultats de Eponine ### if {![file exists $FileEponine]} { return } upvar $aTab Tab set Tab($FileEponine,LesEponines) {} set F [open $FileEponine] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {[regexp {^\#} $Ligne]} {continue} set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Debut [lindex $LaLigne 3] set Fin [lindex $LaLigne 4] set Score [format "%.6f" [lindex $LaLigne 5]] set Sens [lindex $LaLigne 6] if {![info exists Tab($FileEponine,NbEponines)]} { set Tab($FileEponine,NbEponines) 0 } incr Tab($FileEponine,NbEponines) set n [set Tab($FileEponine,NbEponines)] lappend Tab($FileEponine,LesEponines) $n set Tab($FileEponine,n,$n,D) $Debut set Tab($FileEponine,n,$n,F) $Fin set Tab($FileEponine,n,$n,Sens) $Sens set Tab($FileEponine,n,$n,Score) $Score } close $F return $aTab } proc LoadFileFichiers {w} { global CurrentPipe set Fichier [DemandeEtOuvreFichier ".tfa"] if {! [file exists $Fichier]} {return} $w selection clear $w insert end $Fichier set CurrentPipe(File,pjt) 0 update return } proc LoadFileInfosDuFileTFAs {aTab FileInfosDuFileTFAs} { ### Charge les informations du fichier TFAs### if {![file exists $FileInfosDuFileTFAs]} { Espionne "FileInfosDuFileTFAs: $FileInfosDuFileTFAs does not exists" return } upvar $aTab Tab set i 0 set F [open $FileInfosDuFileTFAs] while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set SeqName [lindex $LaLigne 0] set Id [lindex $LaLigne 1] set TailleSeq [lindex $LaLigne 2] set Entete [lindex $LaLigne 3] if {![info exists Tab($FileInfosDuFileTFAs,LesSeqNames)]} { set Tab($FileInfosDuFileTFAs,LesSeqNames) {} } lappend Tab($FileInfosDuFileTFAs,LesSeqNames) $SeqName set Tab($FileInfosDuFileTFAs,SeqName,$SeqName,Id) $Id set Tab($FileInfosDuFileTFAs,SeqName,$SeqName,SeqLength) $TailleSeq set Tab($FileInfosDuFileTFAs,SeqName,$SeqName,Entete) $Entete } close $F return $aTab } proc LoadFirstEF {aTab FileFirstEF} { ### Chargement des resultats de FirstEF ### if {![file exists $FileFirstEF]} { return } upvar $aTab Tab set Tab($FileFirstEF,LesSens) {} set F [open $FileFirstEF] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {![regexp {^[0-9]+} $Ligne]} {continue} regsub -all "\t" $Ligne " " Ligne regsub -all {\.\.} $Ligne " " Ligne regsub -all { [0]+} $Ligne " " Ligne regsub -all {\.} $Ligne "0." Ligne while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LaLigne [split $Ligne " "] set n [lindex $LaLigne 0] set DProm [lindex $LaLigne 1] set FProm [lindex $LaLigne 2] if {$DProm < $FProm} {set Sens "+"} else {set Sens "-"} set DProm [Mini [lindex $LaLigne 1] [lindex $LaLigne 2]] set FProm [Maxi [lindex $LaLigne 1] [lindex $LaLigne 2]] set PProm [lindex $LaLigne 3] set DExon [Mini [lindex $LaLigne 4] [lindex $LaLigne 5]] set FExon [Maxi [lindex $LaLigne 4] [lindex $LaLigne 5]] set PExon [lindex $LaLigne 6] set PDonor [lindex $LaLigne 7] set InfoCpG [lindex $LaLigne 8] if {$InfoCpG == "Non-CpG-related"} { set DCpG "" set FCpG "" } else { set InfoCpG "CpG-related" set DCpG [Mini [lindex $LaLigne 8] [lindex $LaLigne 9]] set FCpG [Maxi [lindex $LaLigne 8] [lindex $LaLigne 9]] } set Rank [lindex $LaLigne end] if {![info exists Tab($FileFirstEF,Sens,$Sens,LesPredictions)]} { lappend Tab($FileFirstEF,LesSens) $Sens set Tab($FileFirstEF,Sens,$Sens,LesPredictions) {} } if {![info exists Tab($FileFirstEF,Sens,$Sens,Prediction,$n,LesRangs)]} { lappend Tab($FileFirstEF,Sens,$Sens,LesPredictions) $n set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,LesRangs) {} } if {[info exists Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,PPromoter)]} {continue} lappend Tab($FileFirstEF,Sens,$Sens,Prediction,$n,LesRangs) $Rank set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,PPromoter) $PProm set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,DPromoter) $DProm set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,FPromoter) $FProm set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,DExon) $DExon set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,FExon) $FExon set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,PExon) $PExon set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,PDonor) $PDonor set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,InfoCpG) $InfoCpG if {$InfoCpG == "Non-CpG-related"} {continue} set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,DCpG) $DCpG set Tab($FileFirstEF,Sens,$Sens,Prediction,$n,Rang,$Rank,FCpG) $FCpG } close $F return $aTab } proc LoadFontesAscii {} { global FontAsc OrdEtcDir set f [file join $OrdEtcDir FontesGif.asc] array set FontAsc [ContenuDuFichier $f] return } proc LoadGOAnalyse {aTab FichierXML} { upvar $aTab Tab if {![file exists $FichierXML]} {return} set SuisJeSur_GO_ANALYSE 0 set QuelMethode "" set QuelGO "" set QuelType "" set F [open $FichierXML] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {![regexp -nocase {<([^ |^>]+)} $Ligne tmp Balise]} {continue} if {$Balise == "GO_ANALYSE"} { if {![regexp -nocase {PID_MIN\=\"([0-9\.e\-\+]+)\"} $Ligne tmp Tab($FichierXML,IdMin) ]} {return} if {![regexp -nocase {NORMD_MIN\=\"([0-9\.e\-\+]+)\"} $Ligne tmp Tab($FichierXML,NorMDMin)]} {return} if {![regexp -nocase {P_MIN\=\"([0-9\.e\-\+]+)\"} $Ligne tmp Tab($FichierXML,PMin) ]} {return} if {![regexp -nocase {F_MIN\=\"([0-9\.e\-\+]+)\"} $Ligne tmp Tab($FichierXML,FMin) ]} {return} set Tab($FichierXML,LesMethodes) {} set Tab($FichierXML,LesAccess) {} set SuisJeSur_GO_ANALYSE 1 continue } if {$Balise == "/GO_ANALYSE"} {break} #Espionne "$Ligne $SuisJeSur_GO_ANALYSE" if {!$SuisJeSur_GO_ANALYSE} {continue} if {$Balise == "INPUT"} { if {![regexp -nocase {QUERY_ID\=\"([^\"]*)\"} $Ligne tmp Tab($FichierXML,Query,Id) ]} {return} if {![regexp -nocase {QUERY_NAME\=\"([^\"]+)\"} $Ligne tmp Tab($FichierXML,Query,Name)]} {return} continue } if {$Balise == "/INPUT"} {continue} if {$Balise == "MSF_FILE"} { if {![regexp -nocase {>([^<]*)<} $Ligne tmp Tab($FichierXML,Fichier,MSF)]} {return} continue } if {$Balise == "CLUST_FILE"} { if {![regexp -nocase {>([^<]*)<} $Ligne tmp Tab($FichierXML,Fichier,CLUST)]} {return} continue } if {$Balise == "OUTPUT" || $Balise == "/OUTPUT"} {continue} if {$Balise == "IPO" } {set QuelMethode "IPO";continue} if {$Balise == "/IPO"} {set QuelMethode "" ;continue} if {$Balise == "PPO" } {set QuelMethode "PPO";continue} if {$Balise == "/PPO"} {set QuelMethode "" ;continue} if {$Balise == "MSO" } {set QuelMethode "MSO";continue} if {$Balise == "/MSO"} {set QuelMethode "" ;continue} if {$Balise == "GPO" } {set QuelMethode "GPO";continue} if {$Balise == "/GPO"} {set QuelMethode "" ;continue} if {$QuelMethode == ""} {continue} if {![info exists Tab($FichierXML,Methode,$QuelMethode,LesTypes)]} { lappend Tab($FichierXML,LesMethodes) $QuelMethode set Tab($FichierXML,Methode,$QuelMethode,LesAccess) {} set Tab($FichierXML,Methode,$QuelMethode,LesTypes) {} } if {$Balise == "GO"} { if {![regexp -nocase {GO_ID\=\"([^\"]+)\"} $Ligne tmp QuelGO ]} {set QuelGO "";set QuelType "";continue} if {![regexp -nocase {GO_TYPE\=\"([^\"]+)\"} $Ligne tmp QuelType ]} {set QuelGO "";set QuelType "";continue} if {![regexp -nocase {GO_DEFINITION\=\"([^\"]*)\"} $Ligne tmp Def ]} {set QuelGO "";set QuelType "";continue} if {![regexp -nocase {NB_SUBJECT\=\"([0-9\.e\+]+)\"} $Ligne tmp NbSubject]} {set QuelGO "";set QuelType "";continue} if {![info exists Tab($FichierXML,Methode,$QuelMethode,Type,$QuelType,LesGO)]} { set Tab($FichierXML,Methode,$QuelMethode,Type,$QuelType,LesGO) {} lappend Tab($FichierXML,Methode,$QuelMethode,LesTypes) $QuelType } if {![info exists Tab($FichierXML,Methode,$QuelMethode,Type,$QuelType,GO,$QuelGO,LesAccess)]} { set Tab($FichierXML,Methode,$QuelMethode,Type,$QuelType,GO,$QuelGO,LesAccess) {} } lappend Tab($FichierXML,Methode,$QuelMethode,Type,$QuelType,LesGO) $QuelGO set Tab($FichierXML,Methode,$QuelMethode,Type,$QuelType,GO,$QuelGO,NbAccess) $NbSubject set Tab($FichierXML,Type,$QuelType,GO,$QuelGO,Definition) $Def continue } if {$Balise == "/GO"} {set QuelGO "";set QuelType "";continue} if {$QuelGO == "" || $QuelType == ""} {continue} if {$Balise == "SUBJECT"} { if {![regexp -nocase {>([^<]+)<} $Ligne tmp Access]} {continue} if {![info exists Tab($FichierXML,Methode,$QuelMethode,Access,$Access,LesTypes)]} { set Tab($FichierXML,Methode,$QuelMethode,Access,$Access,LesTypes) {} lappend Tab($FichierXML,Methode,$QuelMethode,LesAccess) $Access } if {![info exists Tab($FichierXML,Methode,$QuelMethode,Access,$Access,Types,$QuelType,LesGO)]} { lappend Tab($FichierXML,Methode,$QuelMethode,Access,$Access,LesTypes) $QuelType set Tab($FichierXML,Methode,$QuelMethode,Access,$Access,Types,$QuelType,LesGO) {} } lappend Tab($FichierXML,Methode,$QuelMethode,Type,$QuelType,GO,$QuelGO,LesAccess) $Access lappend Tab($FichierXML,Methode,$QuelMethode,Access,$Access,Type,$QuelType,LesGO) $QuelGO continue } } close $F return $aTab } proc LoadGODB {aTab} { upvar $aTab Tab set Tab(LesTypes) {} set Tab(LesGO) {} foreach Fichier [LesFichiersGO] { if {![file exists $Fichier]} {continue} set Type [FichierGO2Type $Fichier] lappend Tab(LesTypes) $Type set Tab(Type,$Type,LesGO) {} Espionne "GODB -> $Type ontology loading ..." set F [open $Fichier] while {[gets $F Ligne]>=0} { if {$Ligne == "" || [regexp "^!" $Ligne]} {continue} set Espace "" regexp {^([ ]*)} $Ligne tmp Espace set Niveau 0 set Niveau [string length $Espace] set PosTmp [string first "GO:" $Ligne] set GOTmp [string range $Ligne [expr $PosTmp] end] set GOTmp [lindex [split $GOTmp {;|%|<}] 0] regsub -all " " $GOTmp "" GOTmp set LesGO [split $GOTmp ","] set GO [lindex $LesGO 0 ] if {![info exists Tab(GO,$GO,LesTypes)]} { set Tab(GO,$GO,LesTypes) {} set Tab(Type,$Type,GO,$GO,LesSynonymes) {} lappend Tab(Type,$Type,LesGO) $GO lappend Tab(LesGO) $GO } foreach Synonyme [lrange $LesGO 1 end] { if {![info exists Tab(GO,$Synonyme,LesTypes)]} {set Tab(GO,$Synonyme,LesTypes) {}} if { [info exists Tab(Type,$Type,GOSynonyme,$Synonyme,GODeRef)]} {continue} lappend Tab(GO,$Synonyme,LesTypes) $Type set Tab(Type,$Type,GOSynonyme,$Synonyme,GODeRef) $GO lappend Tab(Type,$Type,GO,$GO,LesSynonymes) $Synonyme } set Tab(Type,$Type,GOSynonyme,$GO,GODeRef) $GO if {0 < [string first "<" $GO]} { set GO [string range $GO 0 [expr [string first "<" $GO ] - 1]] } if {0 < [string first "%" $GO]} { set GO [string range $GO 0 [expr [string first "%" $GO ] - 1]] } set Ligne [string trim $Ligne] set TabTmp($Niveau) $GO if {![info exists Tab(Type,$Type,GO,$GO,LesNiveaux) ]} { set Tab(Type,$Type,GO,$GO,LesNiveaux) {} lappend Tab(GO,$GO,LesTypes) $Type } if {![info exists Tab(Type,$Type,LesNiveaux) ]} {set Tab(Type,$Type,LesNiveaux) {}} if {![info exists Tab(Type,$Type,Niveau,$Niveau,LesGO) ]} { set Tab(Type,$Type,Niveau,$Niveau,LesGO) {} lappend Tab(Type,$Type,LesNiveaux) $Niveau } if {![info exists Tab(Type,$Type,GO,$GO,LesEC) ]} {set Tab(Type,$Type,GO,$GO,LesEC) {}} if {![info exists Tab(Type,$Type,GO,$GO,LesParents) ]} {set Tab(Type,$Type,GO,$GO,LesParents) {}} if {![info exists Tab(Type,$Type,GO,$GO,LesConstituants) ]} {set Tab(Type,$Type,GO,$GO,LesConstituants) {}} if {![info exists Tab(Type,$Type,GO,$GO,LesContributions)]} {set Tab(Type,$Type,GO,$GO,LesContributions) {}} if {![info exists Tab(Type,$Type,GO,$GO,LesEnfants) ]} {set Tab(Type,$Type,GO,$GO,LesEnfants) {}} lappend Tab(Type,$Type,GO,$GO,LesNiveaux) $Niveau lappend Tab(Type,$Type,Niveau,$Niveau,LesGO) $GO if {[regexp "^\\$" $Ligne]} { set Definition [string trim [string range [lindex [split $Ligne ";"] 0] 1 end]] regsub -all {\\} $Definition "" Definition lappend Tab(Type,$Type,GO,$GO,LesDefinitions) $Definition continue } if {[regexp -nocase "^%" $Ligne]} { set LOrigineDesEnfants "LesEnfants"; set LOrigineDesParents "LesParents" regsub "^%" $Ligne "" Ligne } if {[regexp -nocase "^<" $Ligne]} { set LOrigineDesEnfants "LesContributions";set LOrigineDesParents "LesConstituants" regsub "^<" $Ligne "" Ligne } set NiveauInf [expr $Niveau - 1] set GOInf [set TabTmp($NiveauInf)] if {![info exists Tab(Type,$Type,GO,$GOInf,LesEnfants) ]} {set Tab(Type,$Type,GO,$GOInf,LesEnfants) {}} if {![info exists Tab(Type,$Type,GO,$GOInf,LesContributions)]} {set Tab(Type,$Type,GO,$GOInf,LesContributions) {}} if {![info exists TabTmp($GO,$GOInf)] && ![info exists TabTmp($GOInf,$GO)]} { lappend Tab(Type,$Type,GO,$GO,$LOrigineDesParents) $GOInf lappend Tab(Type,$Type,GO,$GOInf,$LOrigineDesEnfants) $GO set TabTmp($GO,$GOInf) 1 set TabTmp($GOInf,$GO) 1 } set Pos1 [string first "%" $Ligne] set Pos2 [string first "<" $Ligne ] #######Le GO principal de la ligne################## if { $Pos1 != -1 && $Pos2 != -1 && $Pos1 < $Pos2} { set ElementsDuGO [string range $Ligne 0 [expr $Pos1-1]] set Ligne [string range $Ligne $Pos1 end] } elseif {$Pos1 != -1 && $Pos2 != -1 && $Pos2 < $Pos1} { set ElementsDuGO [string range $Ligne 0 [expr $Pos2-1]] set Ligne [string range $Ligne $Pos2 end] } elseif {$Pos1 == -1 && $Pos2 != -1} { set ElementsDuGO [string range $Ligne 0 [expr $Pos2-1]] set Ligne [string range $Ligne $Pos2 end] } elseif {$Pos1 != -1 && $Pos2 == -1} { set ElementsDuGO [string range $Ligne 0 [expr $Pos1-1]] set Ligne [string range $Ligne $Pos1 end] } else { set ElementsDuGO $Ligne set Ligne "" } set LesElementsTmp [split [string trim $ElementsDuGO] "\;"] set LesElementsDuGO {} foreach Element $LesElementsTmp {lappend LesElementsDuGO [string trim $Element]} if {![info exists Tab(Type,$Type,GO,$GO,LesDefinitions)]} { set Tab(Type,$Type,GO,$GO,LesDefinitions) {} set Definition [lindex $LesElementsDuGO 0] regsub -all {\\} $Definition "" Definition lappend Tab(Type,$Type,GO,$GO,LesDefinitions) $Definition foreach Element $LesElementsDuGO { if {[regexp "synonym:" $Element]} { regsub "synonym:" $Element "" Element regsub -all {\\} $Element "" Element lappend Tab(Type,$Type,GO,$GO,LesDefinitions) [string trim $Element] } elseif {[regexp "EC:" $Element]} { lappend Tab(Type,$Type,GO,$GO,LesEC) [string trim $Element] } } } } Espionne "GODB -> $Type ontology loaded" if {[info exists TabTmp]} {unset TabTmp} close $F if {0} { #######GO Nothing########################################## set GONothing "GO:nothing" set Niveau 1 set Definition "No $Type ontology" set GOPere [set Tab(Type,$Type,Niveau,[expr $Niveau - 1],LesGO)] set Tab(Type,$Type,Nothing) $GONothing set Tab(Type,$Type,GO,$GONothing,LesSynonymes) {} set Tab(Type,$Type,GO,$GONothing,LesNiveaux) {} set Tab(Type,$Type,GO,$GONothing,LesEC) {} set Tab(Type,$Type,GO,$GONothing,LesParents) {} set Tab(Type,$Type,GO,$GONothing,LesConstituants) {} set Tab(Type,$Type,GO,$GONothing,LesContributions) {} set Tab(Type,$Type,GO,$GONothing,LesEnfants) {} lappend Tab(Type,$Type,GO,$GOPere,LesEnfants) $GONothing lappend Tab(Type,$Type,GO,$GONothing,LesNiveaux) $Niveau lappend Tab(Type,$Type,GO,$GONothing,LesDefinitions) $Definition lappend Tab(Type,$Type,Niveau,$Niveau,LesGO) $GONothing lappend Tab(Type,$Type,GO,$GONothing,LesParents) $GOPere lappend Tab(LesGO) $GONothing lappend Tab(Type,$Type,LesGO) $GONothing } } return $aTab } proc LoadGOGraph {} { package require struct::graph if {[lsearch -exact [info commands] "GOGraph"] != -1} {return} ::struct::graph GOGraph set ontologyOboFile "[GenomicsSubDir "Ontology"]/Ontology/gene_ontology.obo" Espionne "Reading $ontologyOboFile..." set inHeader 1 foreach line [LesLignesDuFichier $ontologyOboFile] { if {$line eq ""} {continue} if {[regexp {^\[(.+)\]$} $line regMatch stanza]} { set inHeader 0 } elseif {!$inHeader} { if {[string index $line 0] eq "!"} {continue} # BUG regexp : une subexpr non-greedy rends les suivantes non-greedy # regexp {^((?:\\:|[^:])+?): ((?:\\!|[^!])*)} $line regMatch tag tagValue # Workaround en 2 temps 3 regexp... Trop la loose regexp {^((?:\\:|[^:])+?): } $line regMatch tag regexp {^((?:\\!|[^!])*)} [regsub {^((?:\\:|[^:])+?): } $line ""] regMatch tagValue set tagValue [string trim $tagValue] if {[regexp { \{((?:\\\}|[^\}])+)\}$} $tagValue regMatch modifiers]} { regsub { \{((?:\\\}|[^\}])+)\}$} $tagValue "" tagValue } else { set modifiers "" } switch -exact $stanza { "Term" { switch -exact $tag { "id" { set id $tagValue if {![GOGraph node exists $id]} {GOGraph node insert $id} } "name" { GOGraph node set $id "name" $tagValue } "namespace" { GOGraph node set $id "namespace" $tagValue } "alt_id" { GOGraph node lappend $id "alternateIDs" $tagValue } "def" { regexp {^\"((?:\\\"|[^\"])+)\"} $tagValue regMatch def GOGraph node set $id "definition" $def } "synonym" { regexp {^\"((?:\\\"|[^\"])+)\"} $tagValue regMatch synonym GOGraph node lappend $id "synonyms" $synonym } "xref" { GOGraph node lappend $id "xrefs" $tagValue } "is_a" { if {$tagValue eq ""} { puts "OUPS ($line) $tag = $tagValue" } if {![GOGraph node exists $tagValue]} {GOGraph node insert $tagValue} GOGraph arc insert $id $tagValue } } } } } } Espionne "Finished." } proc LoadLMS {aTabLMS FichierBallast} { upvar $aTabLMS TabLMS set FichierMotifs "$FichierBallast.motifs" if {![file exists $FichierMotifs]} {return} set NbLMS 0 set TabLMS($FichierBallast,LesLMS) {} set TabLMS($FichierBallast,LesAccess) {} set LesDebutsEtFins {} set F [open $FichierMotifs] while {[gets $F Ligne]>=0} { regsub -all { |\t} $Ligne "" Ligne if {![regexp {^[0-9]+\-[0-9]+} $Ligne]} {continue} set LesElements [split $Ligne ":"] set LesBornes [split [lindex $LesElements 0] "-"] set Debut [Mini [lindex $LesBornes 0] [lindex $LesBornes 1]] set Fin [Maxi [lindex $LesBornes 0] [lindex $LesBornes 1]] incr NbLMS lappend TabLMS($FichierBallast,LesLMS) $NbLMS set TabLMS($FichierBallast,LMS,$NbLMS,Debut) $Debut set TabLMS($FichierBallast,LMS,$NbLMS,Fin) $Fin set TabLMS($FichierBallast,LMS,$NbLMS,Motif) [lindex $LesElements 1] set TabLMS($FichierBallast,LMS,$NbLMS,Score) [lindex $LesElements 2] set TabLMS($FichierBallast,LMS,$NbLMS,LesAccess) {} if {![info exists TabLMS($FichierBallast,Debut,$Debut,Fin,$Fin,LesLMS)]} {set TabLMS($FichierBallast,Debut,$Debut,Fin,$Fin,LesLMS) {}} lappend TabLMS($FichierBallast,Debut,$Debut,Fin,$Fin,LesLMS) $NbLMS lappend LesDebutsEtFins [list $Debut $Fin] } close $F set TabLMS($FichierBallast,NbLMS) $NbLMS set FichierAnchors "$FichierBallast.anchors" if {![file exists $FichierAnchors]} {return} set F [open $FichierAnchors] while {[gets $F Ligne]>=0} { while {[regexp { |\t} $Ligne]} {regsub -all { |\t} $Ligne " " Ligne} if {$Ligne == ""} {continue} set LaLigne [split $Ligne " "] if {![string equal -nocase [lindex $LaLigne 0] "seq:"]} {continue} set Access1 [string toupper [lindex $LaLigne 1 ]] regsub {^[^\|]+\|} $Access1 "" Access1 set Access2 [string toupper [lindex $LaLigne 2 ]] regsub {^[^\|]+\|} $Access2 "" Access2 if {![info exists TabLMS($FichierBallast,Access,$Access1,LesLMS)]} { lappend TabLMS($FichierBallast,LesAccess) $Access1 set TabLMS($FichierBallast,Access,$Access1,LesLMS) {} } if {![info exists TabLMS($FichierBallast,Access,$Access2,LesLMS)]} { lappend TabLMS($FichierBallast,LesAccess) $Access2 set TabLMS($FichierBallast,Access,$Access2,LesLMS) {} } set Deb [Mini [lindex $LaLigne 4 ] [lindex $LaLigne 6 ]] set Fin [Maxi [lindex $LaLigne 4 ] [lindex $LaLigne 6 ]] set Score [lindex $LaLigne 11] foreach LeDebutEtLaFin $LesDebutsEtFins { set DLMS [lindex $LeDebutEtLaFin 0] set FLMS [lindex $LeDebutEtLaFin 1] if {![CesRegionsSontEllesOverlappantes $Deb $Fin $DLMS $FLMS]} {continue} foreach nLMS [set TabLMS($FichierBallast,Debut,$DLMS,Fin,$FLMS,LesLMS)] { if {![info exists TabTmp($nLMS,$Access1)]} { lappend TabLMS($FichierBallast,LMS,$nLMS,LesAccess) $Access1 set TabTmp($nLMS,$Access1) 1 lappend TabLMS($FichierBallast,Access,$Access1,LesLMS) $nLMS set TabLMS($FichierBallast,Access,$Access1,LMS,$nLMS,Debut) $Deb set TabLMS($FichierBallast,Access,$Access1,LMS,$nLMS,Fin) $Fin set TabLMS($FichierBallast,Access,$Access1,LMS,$nLMS,Score) $Score } if {![info exists TabTmp($nLMS,$Access2)]} { lappend TabLMS($FichierBallast,LMS,$nLMS,LesAccess) $Access2 set TabTmp($nLMS,$Access2) 1 lappend TabLMS($FichierBallast,Access,$Access2,LesLMS) $nLMS set TabLMS($FichierBallast,Access,$Access2,LMS,$nLMS,Debut) $Deb set TabLMS($FichierBallast,Access,$Access2,LMS,$nLMS,Fin) $Fin set TabLMS($FichierBallast,Access,$Access2,LMS,$nLMS,Score) $Score } } } } close $F return $aTabLMS } proc LoadMatch {aTab FileMatch} { ### Charge la sortie du programme match ### if {![file exists $FileMatch]} { return } upvar $aTab Tab set Tab($FileMatch,LesMotifs) {} set SuisJeSurLesInfos 0 set F [open $FileMatch] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} ### Remplace tous les "$" par un "_" dans les Id ### set Ligne [regsub -all {\$} $Ligne "_"] if {[regexp "^Inspecting sequence" $Ligne]} { set SuisJeSurLesInfos 1 continue } if {[regexp "^Total" $Ligne]} { set SuisJeSurLesInfos 0 break } if {!$SuisJeSurLesInfos} {continue} if {[regexp {\(([\+\-]+)\)} $Ligne tmp Sens]} { regsub {\([\+\-]+\)} $Ligne $Sens Ligne } regsub -all {\|} $Ligne " " Ligne while {[regexp " " $Ligne]} {regsub -all " " $Ligne " " Ligne} set LaLigne [split $Ligne " "] set MotifId [lindex $LaLigne 0] set DebutMotif [lindex $LaLigne 1] set Sens [lindex $LaLigne 2] set ScoreCoreMatch [lindex $LaLigne 3] set ScoreMotifMatch [lindex $LaLigne 4] set MatchingSequence [lindex $LaLigne 5] set FinMotif [expr $DebutMotif + [string length $MatchingSequence] -1] if {![info exists Tab($FileMatch,Motif,$MotifId,NbPresence)]} { set Tab($FileMatch,Motif,$MotifId,NbPresence) 0 lappend Tab($FileMatch,LesMotifs) $MotifId } incr Tab($FileMatch,Motif,$MotifId,NbPresence) #i est le numero donne a chacun des motifs set i [set Tab($FileMatch,Motif,$MotifId,NbPresence)] set Tab($FileMatch,Motif,$MotifId,n,$i,Debut) $DebutMotif set Tab($FileMatch,Motif,$MotifId,n,$i,Fin) $FinMotif set Tab($FileMatch,Motif,$MotifId,n,$i,Sens) $Sens set Tab($FileMatch,Motif,$MotifId,n,$i,Sequence) $MatchingSequence set Tab($FileMatch,Motif,$MotifId,n,$i,ScoreCore) $ScoreCoreMatch set Tab($FileMatch,Motif,$MotifId,n,$i,ScoreMotif) $ScoreMotifMatch } close $F return $aTab } proc LoadMatchMatrixAccess2Id2Name {aTab FileMatchMatrixLibrary} { ### Chargement du fichier d'informations sur la librairie de matrices de Match ### if {![file exists $FileMatchMatrixLibrary]} { return } upvar $aTab Tab set F [open $FileMatchMatrixLibrary] # Creation d'une PageInfo par matrice # ### Attention, la derniere page info est "NUMBER_OF_MATRIXES 172" ### set LesPagesInfos {} set LaPageInfo {} while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} ### Remplace tous les "$" par un "_" dans les Id ### set Ligne [regsub -all {\$} $Ligne "_"] lappend LaPageInfo $Ligne if {[regexp "//" $Ligne]} { if {$LaPageInfo != {}} {lappend LesPagesInfos [join $LaPageInfo "\n"]} set LaPageInfo {} } } close $F if {$LaPageInfo != ""} {lappend LesPagesInfos [join $LaPageInfo "\n"]} set LaPageInfo {} #Espionne "NbPagesInfos: [llength $LesPagesInfos]" set Tab($FileMatchMatrixLibrary,LesAccess) {} set Tab($FileMatchMatrixLibrary,LesId) {} foreach PageInfo $LesPagesInfos { if {![regexp -nocase {AC[ \t]+([0-9a-z]+)\n} $PageInfo tmp Access]} {continue} if {![regexp -nocase {ID[ \t]+([0-9a-z_\$]+)\n} $PageInfo tmp Id ]} {continue} set Def "" regexp -nocase {NA[ \t]+([^\n]+)\n} $PageInfo tmp Def if {![info exists Tab($FileMatchMatrixLibrary,Access,$Access,Id)]} { lappend Tab($FileMatchMatrixLibrary,LesAccess) $Access set Tab($FileMatchMatrixLibrary,Access,$Access,Id) $Id set Tab($FileMatchMatrixLibrary,Access,$Access,Name) $Def set Tab($FileMatchMatrixLibrary,Access,$Access,Info) $PageInfo } if {![info exists Tab($FileMatchMatrixLibrary,Id,$Id,Access)]} { lappend Tab($FileMatchMatrixLibrary,LesId) $Id set Tab($FileMatchMatrixLibrary,Id,$Id,Access) $Access set Tab($FileMatchMatrixLibrary,Id,$Id,Name) $Def set Tab($FileMatchMatrixLibrary,Id,$Id,Info) $PageInfo } } if {0} { foreach PageInfo $LesPagesInfos { foreach Info $LaPageInfo { set Info [string trim $Info] if {$Info == ""} {continue} if {[lindex $Info 0] == "AC"} {set Access [lindex $Info 1]} if {[lindex $Info 0] == "ID"} {set Id [lindex $Info 1]} if {[lindex $Info 0] == "NA"} {set Name [lindex $Info 1]} } set Tab($FileMatchMatrixLibrary,Access,$Access,Id) $Id set Tab($FileMatchMatrixLibrary,Access,$Access,Name) $Name set Tab($FileMatchMatrixLibrary,Id,$Id,Access) $Access set Tab($FileMatchMatrixLibrary,Id,$Id,Name) $Name #Espionne "Access,Id: $Access [set Tab($FileMatchMatrixLibrary,Access,$Access,Id)]" #Espionne "Access,Name: $Access [set Tab($FileMatchMatrixLibrary,Access,$Access,Name)]" #Espionne "Id,Access: $Id [set Tab($FileMatchMatrixLibrary,Id,$Id,Access)]" #Espionne "Id,Name: $Id [set Tab($FileMatchMatrixLibrary,Id,$Id,Name)]" lappend LesAccess $Access lappend LesId $Id } set Tab($FileMatchMatrixLibrary,LesAccess) $LesAccess set LesSingleAccess [lsort -unique $LesAccess] set LesSingleId [lsort -unique $LesId] #Espionne "LesSingleAccess: [llength $LesSingleAccess]" #Espionne "LesSingleId: [llength $LesSingleId]" } return $aTab } proc LoadMySql {} { foreach couple { { "platypus" "OrnAna1"} { "stickleback" "GasAcu1"} { "tetraodon" "TetNig1"} {"horse" "EquCab2"} {"rhesus" "RheMac2"} {"cow BosTau4"} {"guineapig" "CavPor3"}} { set org [lindex $couple 0] set genome [lindex $couple 1] Espionne "$org $genome" WgetAndLoadIntoDOPAmySql $org $genome } } proc LoadNorMD {} { global LNorMD #set rep [file join [RepGenLuc] msf_nature Rascal Leon] #aF travaille sur les msf de rascal set rep [file join [RepGenLuc] msf_nature Rascal] set Ll [LesLignesDuFichier [file join $rep "NorMD.out"]] set Tot 0. set Inf 0 set Tsp 0. foreach l $Ll { set f [lindex $l 0] set n [lindex $l 1] set LNorMD($f) $n set Tot [expr {$Tot + $n}] if {$n < 0.3} { incr Inf } else { set Tsp [expr {$Tsp + $n}] } } puts "" puts "Nombre alignt ........: [llength $Ll]" puts "Nombre alignt > 0.3 ..: [expr {[llength $Ll] - $Inf}]" puts "NorMD moyen ..........: [expr {$Tot / [llength $Ll]}]" puts "NorMD > 0.4 moyen ....: [expr {$Tsp /([llength $Ll] - $Inf)}]" puts "" return } proc LoadNouveauPDB {IdOrFile {pdbid ""} {init 0} {indb 1}} { global HashPDB ListePDB Warn if {$pdbid eq ""} { set pdbid $IdOrFile set file $IdOrFile } else { set file $IdOrFile } Structure create $pdbid set cok [$pdbid new $file "" $init $indb] if {$cok == 0} { # Problem : bad pdb ? lappend Warn(BadPdb) $pdbid set Warn($pdbid) 1 $pdbid destroy return 0 } # Obsolete or superseeded if {$cok != 1} { lassign $cok what newid if {$what eq "superseeded"} { set cmdId $newid set newid "::$newid" if {$cmdId ni [info commands]} { $pdbid CopiePDB $newid $pdbid destroy set pdbid $newid } } else { # obsolete, reload $pdbid destroy set pdbid $newid Structure create $pdbid set cok [$pdbid new $pdbid] if {$cok == 0} { lappend Warn(BadPdb) $pdbid set Warn($pdbid) 1 $pdbid destroy return 0 } } set cok $pdbid } # record the new pdbid if {! [info exists HashPDB]} { set HashPDB(iHmax) 0 } set iH $HashPDB(iHmax) if {[string range $pdbid 0 1] eq "::"} { set pdbid [string range $pdbid 2 end] } set HashPDB(${pdbid}) $iH set HashPDB($iH) ${pdbid} incr iH set HashPDB(iHmax) $iH return $cok } proc LoadObjFromDB {} { global db if {! [info exists db] || $db eq ""} { return 0 } set nobj 0 foreach t [GetTables] { if {! [regexp {^obj\_} $t]} {continue} set pdb [lsort -unique [$db eval "select p.name from pdb as p, $t as o where o.pk_pdb=p.pk_pdb"]] set obj $t $pdb newObj $obj 1 $pdb updateObjFlags $obj $pdb render $obj incr nobj } return $nobj } proc LoadProject {p} { global OPjt db set db "root" sqlite3 $db $OPjt(Dir).opjt set Lfroot [$db eval {select fileroot from files where ord=1}] set w $OPjt(Window) destroy {*}[winfo children $w] label $w.ldef -text "Ordalie project : $p" -font "Helvetica 14 bold" -anchor w -justify left label $w.ltitle -text "Click on an alignment to launch Ordalie" -anchor w -justify left # create frame with all files to display set wf $w.ffiles frame $wf grid columnconfig $w.ffiles all -weight 1 set lg [PlusLongEltDe $Lfroot] set sz [SizeOfFont FntPrjt] set NbrPerLine [expr {floor(750./($lg * $sz))}] set i 0 ; set j 0 foreach f $Lfroot { button $wf.bf${i}_${j} -text "$f" -background green1 -command [list LanceProtDeProjet $f] grid $wf.bf${i}_${j} -row $j -column $i -ipady 2 -ipadx 2 incr i if {$i == $NbrPerLine} { set i 0 incr j } } # buttons button $w.bsum -text "Create Summary" -background green1 -command CreateSummaryProject button $w.bclose -text "Close" -background red -command {destroy [winfo toplevel %W]} grid $w.ldef -row 0 -column 0 -columnspan 2 -sticky w -padx 5 -pady 10 grid $w.ltitle -row 1 -column 0 -columnspan 2 -sticky w -padx 5 -pady 5 grid $wf -row 2 -column 0 -columnspan 2 -sticky news -padx 5 -pady 5 grid $w.bclose -row 3 -column 0 -sticky w -pady {20 10} -padx 5 grid $w.bsum -row 3 -column 1 -sticky e -pady {20 10} -padx 5 FenetreAuCentre $w return } proc LoadPromAn {aTab File} { ### Charge les donnees de l'analyse de promoteurs ### if {![file exists $File]} { return } upvar $aTab Tab set Tab($File,LesPromoterInfos) {} set Tab($File,LesResultTypes) {} set i 0 set F [open $File] set Tab(LesEntetes) {} while {[gets $F Ligne]>=0} { if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set ResultType [lindex $LaLigne 1] set Method [lindex $LaLigne 0] set Debut [lindex $LaLigne 2] set Fin [lindex $LaLigne 3] set Sens [lindex $LaLigne 4] set TSSLoc [lindex $LaLigne 5] set TSSDist [lindex $LaLigne 6] set Identity [lindex $LaLigne 7] set Name [lindex $LaLigne 8] set Orga [lindex $LaLigne 9] set LesInfosSup [lrange $LaLigne 10 end] if {![info exists Tab($File,ResultType,$ResultType,LesMethods)]} { set Tab($File,ResultType,$ResultType,LesMethods) {} lappend Tab($File,LesResultTypes) $ResultType } if {![info exists Tab($File,ResultType,$ResultType,Method,$Method,n)]} { lappend Tab($File,ResultType,$ResultType,LesMethods) $Method set Tab($File,ResultType,$ResultType,Method,$Method,n) 0 } incr Tab($File,ResultType,$ResultType,Method,$Method,n) set n [set Tab($File,ResultType,$ResultType,Method,$Method,n)] set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,D) $Debut set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,F) $Fin set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,Sens) $Sens if {$Name != ""} {set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,Name) $Name } if {$TSSLoc != ""} {set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,TSSLoc) $TSSLoc } if {$TSSDist != ""} {set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,TSSDist) $TSSDist } if {$Identity != ""} {set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,Identity) $Identity } if {$Orga != ""} {set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,Organism) $Orga } if {$LesInfosSup != ""} {set Tab($File,ResultType,$ResultType,Method,$Method,n,$n,LesInfosSup) $LesInfosSup} } close $F return $aTab } proc LoadReference {} { global ConsRef unset ConsRef set Lf [LesLignesDuFichier "logasp.all"] foreach l $Lf { set Ll [split $l ":"] set ng [lindex $Ll 0] set lr [lindex $Ll 1] regsub -all {\.} $ng "" ng regsub -all {\(} $lr "" lr regsub -all {\)} $lr "" lr regsub -all " " $lr "" lr set Res [split $lr ","] set ConsRef($ng) $Res } return } proc LoadReferencePDB {} { global TNResConsNSA TNResConsSA ConsRef set rep [file join [RepGenLuc] AnalyseSelection] set Ll [LesLignesDuFichier [file join $rep "resSitePDB.txt"]] set sa 0 set sna 0 set NResConsSA 0 set NResConsNSA 0 set Prems 1 foreach l $Ll { if {[regexp {^gPDB} $l]} { if {$Prems} { set Prems 0 } else { set TNResConsSA($f) $NResConsSA set TNResConsNSA($f) $NResConsNSA set NResConsSA 0 set NResConsNSA 0 } set f [lindex $l 0] continue } if {[regexp "site actif" $l]} { set sa 1 set sna 0 continue } if {[regexp "site non actif" $l]} { set sna 1 set sa 0 continue } if {[regexp {^[A-Z]} $l]} { set aa [lindex $l 0] set n [lindex $l 1] if {$sa} { lappend ConsRef($f,sa) $aa $n incr NResConsSA } else { lappend ConsRef($f,sna) $aa $n incr NResConsNSA } continue } } set TNResConsSA($f) $NResConsSA set TNResConsNSA($f) $NResConsNSA return } proc LoadSelectedEST {aTab File} { upvar $aTab Tab set Tab($File,LesNoms) {} set Tab($File,LesAccess) {} set F [open $File] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] set Id [lindex $LaLigne 1] if {$Id == "NoESTFound"} {continue} set Quoi [lindex $LaLigne 2] #rR a mis le tolower sur conseil de Laetitia set Qui [string tolower [lindex $LaLigne 3]] set Cat "Les$Quoi" if {![info exists Tab($File,Nom,$Nom,$Cat) ]} {set Tab($File,Nom,$Nom,$Cat) {}} if {![info exists Tab($File,Access,$Id,$Cat)]} {set Tab($File,Access,$Id,$Cat) {}} if {![info exists Tab($File,$Cat) ]} {set Tab($File,$Cat) {}} if {![info exists Tab($File,Nom,$Nom,LesAccess)]} { set Tab($File,Nom,$Nom,LesAccess) {} lappend Tab($File,LesNoms) $Nom } if {![info exists Tab($File,Access,$Id,LesNoms)]} { set Tab($File,Access,$Id,LesNoms) {} lappend Tab($File,LesAccess) $Id } if {![info exists Tab($File,$Quoi,$Qui,LesNoms)]} { set Tab($File,$Quoi,$Qui,LesNoms) {} set Tab($File,$Quoi,$Qui,LesAccess) {} lappend Tab($File,$Cat) $Qui } if {![info exists Tab($File,Nom,$Nom,$Quoi,$Qui,n)]} { set Tab($File,Nom,$Nom,$Quoi,$Qui,n) 0 set Tab($File,Nom,$Nom,$Quoi,$Qui,LesAccess) {} lappend Tab($File,Nom,$Nom,$Cat) $Qui lappend Tab($File,$Quoi,$Qui,LesNoms) $Nom } if {![info exists TabTmp($Nom,$Id)]} { set TabTmp($Nom,$Id) 1 lappend Tab($File,Nom,$Nom,LesAccess) $Id } incr Tab($File,Nom,$Nom,$Quoi,$Qui,n) lappend Tab($File,Nom,$Nom,$Quoi,$Qui,LesAccess) $Id lappend Tab($File,Access,$Id,$Cat) $Qui lappend Tab($File,$Quoi,$Qui,LesAccess) $Id } close $F return $aTab } proc LoadSqlonage {{Action ""}} { global LoadSqlonage package require sqlite3 set FichierSqlonage "[RepertoireDuGenome]/sqlite/Sqlonage.db" if {$Action=="GetFileName"} { return $FichierSqlonage } if {[info exists LoadSqlonage(DbName)]} { if {$Action=="Reset"} { FaireLire "Please rerun gscope to reset the Sqlonage database" ; return "" } return $LoadSqlonage(DbName) } if {[string equal -nocase $Action "Reset"] && [FileExists $FichierSqlonage]} { Garde $FichierSqlonage file delete $FichierSqlonage } set LoadSqlonage(DbName) [sqlite3 Sqlonage $FichierSqlonage] return $LoadSqlonage(DbName) } proc LoadTaxNCBI {} { #rR on lit le fichier et on stocke tout en utilisant TaxNCBI Qui Quoi =Valeur #rR j'ai rajoute le = obligatoire pour modifier la valeur 2012/04/10 set TaxDir [TaxDir "NCBI"] set Fichier "$TaxDir/delnodes.dmp" set f [open $Fichier "r"] while {[gets $f Ligne]>=0} { set LesChamps [split $Ligne "\t"] ScanLaListe $LesChamps TaxId TaxNCBI $TaxId Deleted "=1" } close $f set Fichier "$TaxDir/merged.dmp" set f [open $Fichier "r"] while {[gets $f Ligne]>=0} { regsub -all "\t" $Ligne "" Ligne set LesChamps [split $Ligne "|"] ScanLaListe $LesChamps TaxId Nouveau TaxNCBI $TaxId Merged "=$Nouveau" } close $f set Fichier "$TaxDir/nodes.dmp" set f [open $Fichier "r"] while {[gets $f Ligne]>=0} { regsub -all "\t" $Ligne "" Ligne set LesChamps [split $Ligne "|"] ScanLaListe $LesChamps TaxId Parent Rank Embl Division TaxNCBI $Parent Children "=$TaxId" TaxNCBI $TaxId Parent "=$Parent" TaxNCBI $TaxId Rank "=$Rank" # TaxNCBI $TaxId Embl "=$Embl" # TaxNCBI $TaxId Division "=$Division" } close $f Espionne "Chargement $TaxDir/names.dmp" set Fichier "$TaxDir/names.dmp" set f [open $Fichier "r"] set nTaxId 0 # set iMaxPourTest 999 set iMaxPourTest -1 while {[gets $f Ligne]>=0} { if {[incr iMaxPourTest -1]%10000==0} { Espionne $Ligne } if {[incr iMaxPourTest -1] == 0} { break } regsub -all "\t" $Ligne "" Ligne set LesChamps [split $Ligne "|"] ScanLaListe $LesChamps TaxId Name UniqueName NameClass if {$TaxId=="1890940"} { Espionne $Ligne } if {[info exists DejaVu($Name)]} { lappend LesDoublons $Name } set DejaVu($Name) 1 TaxNCBI $TaxId TaxId "=$TaxId" TaxNCBI $TaxId ItsNames "=$Name" if {$UniqueName!=""} { TaxNCBI $TaxId UniqueName "=$UniqueName" TaxNCBI $Name ItsTaxIds "=$TaxId" } TaxNCBI $Name TaxId "=$TaxId" TaxNCBI $Name NameClass "=$NameClass" if {[string equal -nocase $NameClass "scientific name"]} { incr nTaxId TaxNCBI $TaxId Name "=$Name" } TaxNCBI "ListOf" "Names" "=$Name" } TaxNCBI "SortUnique" "ListOf" "=Names" ;#rR attention il faut aussi le = close $f set LesDoublons [lsort $LesDoublons] # SauveLesLignes $LesDoublons dans "$TaxDir/DoublonsNames.txt" return $nTaxId } proc LoadTaxUniProt {} { #rR on lit le fichier et on stocke tout en utilisant TaxUniprot Qui Quoi =Valeur #rR j'ai rajoute le = obligatoire pour modicier la valeur 2012/04/10 #lM adapte pour UniProt 2013/11/08 set UrlPourLaMiseAJour "http://www.uniprot.org/taxonomy/?query=&force=yes&format=tab" TaxUniProt 1 TaxId "=1" TaxUniProt 1 Name "=root" TaxUniProt "root" TaxId "=1" TaxUniProt "root" Name "=root" TaxUniProt 1 ItsTaxIds "=1" TaxUniProt 1 ItsNames "=root" TaxUniProt "root" ItsTaxIds "=1" TaxUniProt "root" ItsNames "=root" TaxUniProt 1 Rank "=no rank" TaxUniProt 1 Children "=10239" TaxUniProt 1 Children "=12884" TaxUniProt 1 Children "=12908" TaxUniProt 1 Children "=28384" TaxUniProt 1 Children "=131567" TaxUniProt 10239 Parent "=1" TaxUniProt 12884 Parent "=1" TaxUniProt 12908 Parent "=1" TaxUniProt 28384 Parent "=1" TaxUniProt 131567 Parent "=1" set TaxDir [TaxDir "UniProt"] set Fichier "$TaxDir/taxonomy-all.tab" set f [open $Fichier "r"] set PrendPremiereLigne 0 while {[gets $f Ligne]>=0} { if {! $PrendPremiereLigne} { #lM premiere ligne contient les noms des champs # Taxon | Mnemonic | Scientific name | Common name | Synonym | Other Names | Reviewed | Rank | Lineage | Parent set PrendPremiereLigne 1 continue } set LesChamps [split $Ligne "\t"] lassign $LesChamps TaxId Mnemonic Name CommonName Synonym OtherNames Reviewed Rank Lineage Parent if {[string trim $Rank] eq ""} { set Rank "no rank" } TaxUniProt $TaxId TaxId "=$TaxId" TaxUniProt $TaxId Name "=$Name" TaxUniProt $Name TaxId "=$TaxId" TaxUniProt $TaxId ItsNames "=$Name" TaxUniProt $Name ItsTaxIds "=$TaxId" TaxUniProt $TaxId Rank "=$Rank" TaxUniProt $TaxId Lineage "=$Lineage" TaxUniProt $TaxId Parent "=$Parent" TaxUniProt $Parent Children "=$TaxId" TaxUniProt "ListOf" "Names" "=$Name" } TaxUniProt "SortUnique" "ListOf" "=Names" ;#rR attention il faut aussi le = close $f return } proc LoadTclPackages {} { package require tclcluspack package require tclordalie package require tclfastme package require http package require sqlite3 package require La catch { namespace import La::*} package require struct package require tdom if {$::tcl_version ne "8.6"} { package require TclOO } return } proc LoadTkAndPackages {} { package require Tk $::tcl_patchLevel #catch {console show} Espionne "Tk : $::tk_patchLevel" Espionne "tcl3d : [package require tcl3d]" if {$::Defauts(Devlpt)} { Espionne "biotext-dev: [package require biotext-dev]" } else { Espionne "biotext : [package require biotext]" } Espionne "combobox : [package require combobox 2.3]" Espionne "LRIPhoto : [package require LRIPhoto]" Espionne "" namespace import ::LRI::* if {[tk windowingsystem] eq "aqua"} { catch {set ::origUseCustomMDEF $::tk::mac::useCustomMDEF; set ::tk::mac::useCustomMDEF 1} } return } proc LoadTxl {Fichier {aTxl ""} {MainIndex 0} {Sep ""} {CoLi ""} {WholeLine ""}} { set WholeLine [string equal -nocase "WholeLine" $WholeLine] if {$CoLi==""} { set CoLi "LiCo" } Wup "Normally the values are stored in Txl(Line,Column)" Wup " with CoLi==CoLi we have Txl(Column,Line)" if {$aTxl!=""} { upvar $aTxl Txl } else { global Txl ; set aTxl Txl } if {$Sep==""} { set Sep "\t" } set Queue [file tail $Fichier] regsub -nocase {\.[^\.]+$} $Queue "" Queue global LoadTxlForGenoret if {[info exists LoadTxlForGenoret] && $LoadTxlForGenoret} {set Queue [NormaliseTxlFieldName $Queue] } if { ! [file exists $Fichier]} { Warne "$Fichier does not exist" set Txl(ListHeaderPlease,$Queue) {} set Txl(ListAllPlease,$Queue) {} return $aTxl } set LesLignes [LesLignesDuFichier $Fichier] set Entete [lindex $LesLignes 0] set LesLignes [lrange $LesLignes 1 end] set LesTetes {} foreach Tete [split $Entete $Sep] { regsub -all {\#} $Tete "" Tete regsub -all {\'} $Tete "" Tete regsub -all {\?} $Tete "" Tete regsub -all {\(} $Tete "" Tete regsub -all {\)} $Tete "" Tete regsub -all {\"} $Tete "" Tete while {[regexp " " $Tete]} { regsub -all { {2,}} $Tete " " Tete } set Tete [string trim $Tete] regsub -all { } $Tete "_" Tete # regsub -all -nocase {[\0260\$]} $Tete "_" Tete regsub -all -nocase {[\176\$]} $Tete "_" Tete set Original $Tete if {$Tete==""} { set Tete "_" } while {[info exists DejaVu($Tete)]} { append Tete "_2" } set DejaVu($Tete) $Original lappend LesTetes $Tete } set Txl(ListHeaderPlease,$Queue) $LesTetes set Txl(ListOf,Header) $LesTetes set I 1 foreach Ligne $LesLignes { if { ! [regexp -nocase {\S} $Ligne]} { continue } incr I set LesMots [split $Ligne $Sep] if {$MainIndex<0} { set Nom $I } else { set Nom [lindex $LesMots $MainIndex] regsub -all {\"} $Nom "" Nom } lappend Txl(ListAllPlease,$Queue) $Nom lappend Txl(ListOf,Index) $Nom foreach Mot $LesMots Tete $LesTetes { regsub -all {\"} $Mot "" Mot if {$CoLi=="CoLi"} { set Txl($Tete,$Nom) $Mot } else { set Txl($Nom,$Tete) $Mot } } if {$WholeLine} { if {$CoLi=="CoLi"} { set Txl(WholeLine,$Nom) $Ligne } else { set Txl($Nom,WholeLine) $Ligne } } } return $aTxl } proc LoadTxlAffy {Fichier {aTxl ""} {MainIndex 0} {Sep ""} {CoLi ""}} { Wup "Attention BonSep n'est pas utilise, ca ne marche que pour \",\"" set BonSep $Sep if {[regexp {[\,\-\;]} $BonSep]} { set BonSep "\\$Sep" } if {$CoLi==""} { set CoLi "LiCo" } Wup "Normally the values are stored in Txl(Line,Column)" Wup " with CoLi==CoLi we have Txl(Column,Line)" if {$aTxl!=""} { upvar $aTxl Txl } else { global Txl ; set aTxl Txl } if {$Sep==""} { set Sep "\t" } set Queue [file tail $Fichier] regsub -nocase {\.[^\.]+$} $Queue "" Queue if { ! [file exists $Fichier]} { set Txl(ListHeaderPlease,$Queue) {} set Txl(ListAllPlease,$Queue) {} return $aTxl } #LP #set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^#" $Ligne]} {continue} lappend LesLignes $Ligne } #LP set Entete [lindex $LesLignes 0] set LesLignes [lrange $LesLignes 1 end] set LesTetes {} foreach Tete [split $Entete $Sep] { regsub -all {\(} $Tete "" Tete regsub -all {\)} $Tete "" Tete regsub -all {\"} $Tete "" Tete regsub -all { } $Tete "_" Tete lappend LesTetes $Tete } set Txl(ListHeaderPlease,$Queue) $LesTetes set I 1 foreach Ligne $LesLignes { incr I regsub -all "@" $Ligne "A=r=O=b=A" set BelleLigne [string trim $Ligne {\"}] regsub -all {\"\,\"} $BelleLigne "@" BelleLigne set LesMots [split $BelleLigne "@"] if {$MainIndex<0} { set Nom $I } else { set Nom [lindex $LesMots $MainIndex] regsub -all {\"} $Nom "" Nom } lappend Txl(ListAllPlease,$Queue) $Nom if {[info exists DejaVu]} {unset DejaVu} foreach Mot $LesMots Tete $LesTetes { #LP if {$Tete=="RefSeq_Protein_ID"} { if {[regexp "." $Mot]} { set Mot [lindex [split $Mot "."] 0] } } #LP set MemoValeur($Tete) $Mot if {$Tete==""} { continue } if { ! [BonneTete $Tete]} { continue } regsub -all {"A=r=O=b=A"} $Mot "@" Mot regsub -all {\"} $Mot "" Mot set LesPetitsMots [LesBoutsDeLaLigneAvecTexteSeparateur $Mot "///" "trim"] if {$CoLi=="CoLi"} { if {[info exists Txl($Tete,$Nom)]} { if {$Txl($Tete,$Nom)!=$Mot} { append Txl($Tete,$Nom) " -or- $Mot" } } else { set Txl($Tete,$Nom) $Mot } if {[BonneTete "$Tete-IsChef"]} { foreach PetitMot $LesPetitsMots { if {[set iSS [string first {//} $PetitMot]]>0} { set PetitMot [string range $PetitMot 0 [incr iSS -1]] set PetitMot [string trim $PetitMot] } lappend Txl([BonneTete "GrandChef"],$PetitMot) $Nom } } } else { if {[info exists Txl($Nom,$Tete)]} { if {$Txl($Nom,$Tete)!=$Mot} { append Txl($Nom,$Tete) " -or- $Mot" } } else { set Txl($Nom,$Tete) $Mot } if {[BonneTete "$Tete-IsChef"]} { foreach PetitMot $LesPetitsMots { if {[set iSS [string first {//} $PetitMot]]>=0} { set PetitMot [string range $PetitMot 0 [incr iSS -1]] set PetitMot [string trim $PetitMot] } lappend Txl($PetitMot,[BonneTete "GrandChef"]) $Nom } } } } foreach Referent [BonneTete ListOfReferents] { foreach Chef [BonneTete ListChefFor$Referent] { if {$CoLi=="CoLi"} { lappend Txl($Referent,$MemoValeur($Chef)) $MemoValeur($Referent) } else { lappend Txl($MemoValeur($Chef),$Referent) $MemoValeur($Referent) } } } } return $aTxl } proc LoadTxlForMonika {} { set RepDeMonika "/genomics/link/Monika/DeMonika" set Fichier "$RepDeMonika/FINAL_LIST.txt" set Queue [file tail $Fichier] regsub {\.[a-z]+$} $Queue "" Queue LoadTxl $Fichier T "" "" "CoLi" set LesTetes $T(ListHeaderPlease,$Queue) foreach I $T(ListAllPlease,$Queue) { set A $T(Product_Id,$I) Espionne "$I $A" set LignesEMBL [LaSequenceDesBanques $A] EspionneL $LignesEMBL SauveLesLignes $LignesEMBL dans "$RepDeMonika/$I.embl" } exit } proc LoadTxlWithRowsOfCells {Fichier {aTxl ""} {MainIndex 0} {Sep ""} {CoLi ""} {WholeLine ""}} { set WholeLine [string equal -nocase "WholeLine" $WholeLine] if {$CoLi==""} { set CoLi "LiCo" } Wup "Normally the values are stored in Txl(Line,Column)" Wup " with CoLi==CoLi we have Txl(Column,Line)" if {$aTxl!=""} { upvar $aTxl Txl } else { global Txl ; set aTxl Txl } if {$Sep==""} { set Sep "\t" } set Queue [file tail $Fichier] regsub -nocase {\.[^\.]+$} $Queue "" Queue global LoadTxlForGenoret if {[info exists LoadTxlForGenoret] && $LoadTxlForGenoret} {set Queue [NormaliseTxlFieldName $Queue] } set Txl(Queue) $Queue if { ! [file exists $Fichier]} { set Txl(ListHeaderPlease,$Queue) {} set Txl(ListAllPlease,$Queue) {} return $aTxl } set Texte [ContenuDuFichier $Fichier] set NewSep "" set NewQQ "" set NewRet "" set LesRowsOfCells [RowsOfCells $Texte $Sep $NewSep $NewQQ $NewRet] set LesHLus [lindex $LesRowsOfCells 0] set LesRowsOfCells [lrange $LesRowsOfCells 1 end] set LesTetes {} foreach Tete $LesHLus { regsub -all {\'} $Tete "" Tete regsub -all {\?} $Tete "" Tete regsub -all {\(} $Tete "" Tete regsub -all {\)} $Tete "" Tete regsub -all {\"} $Tete "" Tete regsub -all {\,} $Tete "_" Tete while {[regexp " " $Tete]} { regsub -all { {2,}} $Tete " " Tete } set Tete [string trim $Tete] regsub -all { } $Tete "_" Tete #rR ca devrait enlever le degre regsub -all -nocase {\0260} $Tete "_" Tete set Original $Tete if {$Tete==""} { set Tete "_" } while {[info exists DejaVu($Tete)]} { append Tete "_2" } set DejaVu($Tete) $Original lappend LesTetes $Tete } set Txl(ListHeaderPlease,$Queue) $LesTetes set I 1 foreach LesMots $LesRowsOfCells { incr I if {$MainIndex<0} { set Nom $I } else { set Nom [lindex $LesMots $MainIndex] regsub -all {\"} $Nom "" Nom } set Nom [string trim $Nom] if {$Nom==""} { continue } if {[info exists DejaVu($Nom,$Queue)]} { FaireLire "I already saw $Nom , I'll skip it now" ; continue } set DejaVu($Nom,$Queue) 1 lappend Txl(ListAllPlease,$Queue) $Nom foreach Mot $LesMots Tete $LesTetes { regsub -all {\"} $Mot "" Mot if {$CoLi=="CoLi"} { set Txl($Tete,$Nom) $Mot } else { set Txl($Nom,$Tete) $Mot } } if {$WholeLine} { if {$CoLi=="CoLi"} { set Txl(WholeLine,$Nom) $LesMots } else { set Txl($Nom,WholeLine) $LesMots } } } set Txl(ListHeaderPlease,) $Txl(ListHeaderPlease,$Queue) set Txl(ListAllPlease,) $Txl(ListAllPlease,$Queue) return $aTxl } proc LoadUCSC {aTab File} { ### Frederic Chalmel, Biozentrum Basel, 2005 ### ### load du fichier refSeqAli.txt ### upvar $aTab Tab if {![file exists $File]} {Espionne "File UCSC: $File does not exists" ; return} Espionne "$File is loading ..." set Tab($File,Loaded) 1 set Tab($File,ListOfID) {} set F [open $File] while {[gets $F Line]>=0} { set Line [string trim $Line] if {$Line == ""} {continue} set Line [split $Line "\t" ] ### Access du mRNA RefSeq set ID [lindex $Line 10] regsub {^[^\:]+\:} $ID "" ID if {![info exists Tab($File,ID,$ID,ListOfPosition)]} { set Tab($File,ID,$ID,ListOfPosition) {} lappend Tab($File,ListOfID) $ID } ### Brin, debut et fin du mRNA localise sur le genome set Strand [lindex $Line 9 ] set SeqFrom [lindex $Line 12] set SeqTo [lindex $Line 13] ### Chromosome, localisation du mRNA sur le chr set Chr [lindex $Line 14] regsub {^chr} $Chr "" Chr set ChrFrom [lindex $Line 16] set ChrTo [lindex $Line 17] ### Localisation du mRNA sur le chr lappend Tab($File,ID,$ID,ListOfPosition) [list $ID $SeqFrom $SeqTo $Chr $ChrFrom $ChrTo $Strand] ### Carte exonique (liste des exons, de leur start sur le mRNA et sur le chr) set lExSize [split [lindex $Line 19] ","] set lSeqStart [split [lindex $Line 20] ","] set lChrStart [split [lindex $Line 21] ","] ### Liste de localisation des exons sut le mRNA et sur le chr set Tab($File,ID,$ID,Chrom,$Chr,From,$ChrFrom,To,$ChrTo,Strand,$Strand,ListOfPosition) {} foreach Size $lExSize Start1 $lSeqStart Start2 $lChrStart { if {$Size == "" || $Start1 == "" || $Start2 == ""} {continue} set End2 [expr $Start2 + $Size] set End1 [expr $Start1 + $Size] lappend Tab($File,ID,$ID,Chrom,$Chr,From,$ChrFrom,To,$ChrTo,Strand,$Strand,ListOfPosition) [list $ID $Start1 $End1 $Chr $Start2 $End2 $Strand] } } close $F Espionne "$File loaded" return $aTab } proc LoadUnArbre {} { global Abr set f [DemandeEtOuvreFichier ph 1] if {$f eq ""} {return} set LeTree [ContenuDuFichier $f] set LeTree [NettoieArbre $LeTree] if {$LeTree == 0 || [catch {set AId [InitialiseUnArbre $LeTree]} Msg]} { puts "Msg\n$Msg\n$::errorInfo" FaireLire "Error while reading the tree file !\nVerify the file is in Newick format" return } # some spec set Abr($AId,Mode) normal set Abr($AId,TypeGapTree) "Unknown" set Abr($AId,NbrSites) "Unknown" set Abr($AId,TreeNBoot) "Unknown" set Abr($AId,BootDone) 0 AfficheUnArbre $AId return } proc LoadingAlignement {} { global LongueurTotale ListeTypesDeFeatures global Defauts TabSF db OrdTmpDir global LNOrdali Sequences AlnName AlnScore AlnNote #::profiler::reset if {[TypeAli] eq "pasdali"} {return 0} set fic [set Defauts(Fichier[TypeAli])] if {! [VerifieFormatAlignement $fic [TypeAli]]} { return 0 } set AlnName [file rootname [file tail $fic]] regsub -all " " $AlnName "_" AlnName InitInfoArrays if {[TypeAli] ne "ORD"} { #set fdb [file join $OrdTmpDir "[pid].odb"] #set db [FabriqueDeTables [set Defauts(TablesDB)] root $fdb] set db [FabriqueDeTables [set Defauts(TablesDB1.1)] root] } switch [TypeAli] { "XML" { set AlnScore 0.0 set AlnNote "" DecortiqueUnXml2 $fic } "TFA" { DecortiqueUnTFA $fic LNOrdali Sequences } "ALN" { DecortiqueUnALN $fic LNOrdali Sequences } "MSF" { DecortiqueUnMSF $fic Ln Sq set LNOrdali {} foreach v $Ln { set n [BonAccess $v] set s [BonneSequencePourAlignement [set Sq($v)]] lappend LNOrdali $n set Sequences($n) $s } } "RSF" { DecortiqueUnRSF $fic LNOrdali Sequences TabSF set ListeTypesDeFeatures [set TabSF(LesTypesDeFeatures)] } "ORD" { #::profiler::reset LectureOrdaliDB $fic #AfficheProfileResults } } set LongueurTotale [LongueurDeLAlignement] if {[TypeAli] ne "ORD"} { if {! [InitSequences]} { return 0 } InitPremierGroupe if {[TypeAli] eq "XML"} { DonneTabFeature TabSF } elseif {[TypeAli] eq "RSF"} { DonneTabFeatureDuRsf TabSF } } AssignSeqToGroup InitInfoSeqs InitConsensus if {[TypeAli] ne "ORD"} { RemplitOrdaliDB } #AfficheProfileResults return $fic } proc LoadingFontImages {} { global OrdEtcDir set size [font configure FntPrt -size] set Lf [glob [file join $OrdEtcDir CN $size *.png]] foreach f $Lf { set img [file rootname [file tail $f]] if {$img eq "CN_${size}_Space"} { set img "CN_${size}_" } image create photo $img -file $f } return } proc Loc {} { set Fichier "[RepertoireDuGenome]/fiches/Redondance1SansCourts" foreach PAB [ListeDesJR $Fichier] { #Espionne $PAB set FichierBlastGenome "[RepertoireDuGenome]/blastnhuman/$PAB" set L [BoxLocalisation $PAB $FichierBlastGenome] #EspionneL $L foreach Elt $L { lappend LBoxLoc $Elt } } return $LBoxLoc } proc LocAffy {{Qui ""} {Quoi ""}} { global LocAffy if {$Qui==""} { set Qui "ListOf" ; set Quoi "Arguments" } if {[info exists LocAffy($Qui,$Quoi)]} { return $LocAffy($Qui,$Quoi) } if {[info exists LocAffy("EstCharge")]} { return "" } set LocAffy("EstCharge") 1 set Org "Mouse" foreach P [AffyAnno ListOf Index] { set Ali [AffyAnno $P "Alignments"] regsub -all { */// *} $Ali "@" Ali foreach Lo [split $Ali "@"] { regsub -all { */+ *} $Lo "@" Lo set LesChamps [split $Lo "@"] set CSES [lindex $LesChamps 0] regsub -all {[\:\-\(\)]} $CSES " " CSES scan $CSES "%s %s %s %s" Chr Start End Strand lappend LocAffy(ListOf$Org$Chr,StartEndName) "$Start $End $P" set Cytoband [lindex $LesChamps 2] lappend LocAffy(ListOf$Org$Chr,CytobandName) "$Cytoband $P" } } set LocAffy(ListOf,Arguments) [array names LocAffy] foreach V $LocAffy(ListOf,Arguments) { if {[regexp "StartEndName$" $V]} { set LocAffy($V) [lsort -integer -index 0 $LocAffy($V)] } if {[regexp "CytobandName$" $V]} { set LocAffy($V) [lsort $LocAffy($V)] } } return [LocAffy $Qui $Quoi] } proc LocAfter {Position Org Chr {Strand ""} {FromWhere ""}} { Wup "Attention UCSC compte a partir de 0" if {$FromWhere==""} { set FromWhere "refGene" } set org [string tolower $Org] set fromwhere [string tolower $FromWhere] set Where "chrom='$Chr' and $Position<=txStart" if {$Strand!=""} { if {$Strand=="F"} { set Strand "+" } if {$Strand=="R"} { set Strand "-" } append Where " and strand='$Strand'" } set Query "select TXSTART from ucsc$org.$fromwhere where $Where order by TXSTART fetch first 1 rows only" # set Premier [Bird $Query "flat"] set Premier [BirdSendQueryUrlAndGetFromUrl $Query "" "format=flat"] if {$Premier==""} { return "" } set Where "chrom='$Chr' and $Premier=txStart" if {$Strand!=""} { if {$Strand=="F"} { set Strand "+" } if {$Strand=="R"} { set Strand "-" } append Where " and strand='$Strand'" } set Query "select NAME, TXSTART, TXEND, STRAND from ucsc$org.$fromwhere where $Where order by TXEND" # set Retour [Bird $Query "flat"] set Retour [BirdSendQueryUrlAndGetFromUrl $Query "" "format=plat"] set Retour [string trim $Retour " \n"] return $Retour } proc LocAfterBoost {Position Org Chr {Strand ""} {FromWhere ""}} { set Retour "" if {$FromWhere==""} { set FromWhere "refGene" } # set Chr "chr$Chr" set Where "chrom='$Chr' and txStart>=$Position" set ListeDesExonsStarts {} set ListeDesExonsEnds {} foreach {access txStart txEnd strand} [SqlExec "select name, txStart, txEnd, strand FROM ucsc$Org.$FromWhere WHERE $Where order by txStart ASC LIMIT 1"] { set Retour "$access $txStart $txEnd $strand" set Retour [string trim $Retour "\n"] set Retour [string trim $Retour] } return $Retour } proc LocBefore {Position Org Chr {Strand ""} {FromWhere ""}} { Wup "Attention UCSC compte a partir de 0" if {$FromWhere==""} { set FromWhere "refGene" } set org [string tolower $Org] set fromwhere [string tolower $FromWhere] set Where "chrom='$Chr' and txEnd<=$Position" if {$Strand!=""} { if {$Strand=="F"} { set Strand "+" } if {$Strand=="R"} { set Strand "-" } append Where " and strand='$Strand'" } set Query "select TXEND from ucsc$org.$fromwhere where $Where order by TXEND desc fetch first 1 rows only" # set Premier [Bird $Query "flat"] set Premier [BirdSendQueryUrlAndGetFromUrl $Query "" "format=flat"] if {$Premier==""} { return "" } set Where "chrom='$Chr' and $Premier=txEnd" if {$Strand!=""} { if {$Strand=="F"} { set Strand "+" } if {$Strand=="R"} { set Strand "-" } append Where " and strand='$Strand'" } set Query "select NAME, TXSTART, TXEND, STRAND from ucsc$org.$fromwhere where $Where order by TXSTART" # set Retour [Bird $Query "flat"] set Retour [BirdSendQueryUrlAndGetFromUrl $Query "" "format=plat"] set Retour [string trim $Retour " \n"] return $Retour } proc LocBeforeBoost {Position Org Chr {Strand ""} {FromWhere ""}} { set Retour "" if {$FromWhere==""} { set FromWhere "refGene" } # set Chr "chr$Chr" set Where "chrom='$Chr' and txEnd<=$Position" set ListeDesExonsStarts {} set ListeDesExonsEnds {} foreach {access txStart txEnd strand} [SqlExec "select name, txStart, txEnd, strand FROM ucsc$Org.$FromWhere WHERE $Where order by txEnd DESC LIMIT 1" ] { set Retour "$access $txStart $txEnd $strand" set Retour [string trim $Retour "\n"] set Retour [string trim $Retour] } return $Retour } proc LocCategorie {FichierLoc} { foreach Nom [ListeDesPABs] { set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs!="" && $LesLocs!=" "} {lappend LesLocalises $Nom} else {lappend LesNoLoc $Nom} } Espionne "loc: [llength $LesLocalises]";Espionne "no loc: [llength $LesNoLoc]" foreach DD $LesLocalises { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" Protein Access] if {$AccBestProtHuman!=""} {lappend AvecProt $DD;continue} lappend Liste $DD if {[file exists "[RepertoireDuGenome]/prottfa/$DD"]} {Espionne $DD} } Espionne "loc avec prot: [llength $AvecProt]" Espionne "loc sans prot: [llength $Liste]" foreach DD $LesNoLoc { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" Protein Access] if {$AccBestProtHuman!=""} {lappend nolocAvecProt $DD;continue} lappend nolocnoprot $DD } Espionne "noloc avec prot: [llength $nolocAvecProt]" Espionne "noloc sans prot: [llength $nolocnoprot]" Espionne $nolocAvecProt } proc LocIn {Position Org Chr {Strand ""} {FromWhere ""}} { Wup "Attention UCSC compte a partir de 0" if {$FromWhere==""} { set FromWhere "refGene" } set org [string tolower $Org] set fromwhere [string tolower $FromWhere] set Where "chrom='$Chr' and txStart<=$Position and $Position<=txEnd" if {$Strand!=""} { if {$Strand=="F"} { set Strand "+" } if {$Strand=="R"} { set Strand "-" } append Where " and strand='$Strand'" } set Query "select NAME, TXSTART, TXEND, STRAND from ucsc$org.$fromwhere where $Where order by TXSTART" # set Retour [Bird $Query "" "flat"] set Retour [BirdSendQueryUrlAndGetFromUrl $Query "" "format=plat"] set Retour [string trim $Retour " \n"] return $Retour } proc LocInBQL {Position ResultatBQL Separator} { if { $ResultatBQL == "" } { set Retour "Vide" } else { set ExonOuIntron "?" set CdsOuPas "?" set Retour "" set ListeDesExonsStarts {} set ListeDesExonsEnds {} set Liste [split $ResultatBQL "$Separator"] ScanLaListe $Liste Name chrom TxStart TxEnd Strand ExonStarts ExonEnds ExonCount CdsStart CdsEnd set ListeDesExonsStarts [split $ExonStarts ","] set ListeDesExonsEnds [split $ExonEnds ","] set LongueurDesStarts [llength $ListeDesExonsStarts] set LongueurDesEnds [llength $ListeDesExonsEnds] if { $LongueurDesStarts == $LongueurDesEnds && $LongueurDesStarts == [expr $ExonCount +1] } { if { $Position >= $CdsStart && $Position <= $CdsEnd } { set UtrOuCDS "CDS" } else { if { $Strand == "+" } { if { $CdsStart > $Position } { set UtrOuCDS "5-UTR" } if { $CdsEnd < $Position } { set UtrOuCDS "3-UTR" } } if { $Strand == "-" } { if { $CdsEnd < $Position } { set UtrOuCDS "5-UTR" } if { $CdsStart > $Position } { set UtrOuCDS "3-UTR" } } } set ExonOuIntron "Erreur" set OccupationExonOuIntron -1 set RechercheDansExon "KO" for {set I 0} {$I < $ExonCount } {incr I } { set DebExon [lindex $ListeDesExonsStarts $I] set FinExon [lindex $ListeDesExonsEnds $I] if { $DebExon <= $Position && $FinExon >= $Position } { set DebutExonOuIntron $DebExon set FinExonOuIntron $FinExon set RechercheDansExon "OK" if { $Strand == "+" } { set DistanceAuDebutDeExonOuIntron [expr $Position - $DebutExonOuIntron] set DistanceAlaFinDeExonOuIntron [expr $FinExonOuIntron - $Position] set ExonOuIntronNumber [expr $I + 1] set ExonOuIntron "Exon$Separator$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($Position-$DebExon) / ($FinExon-$DebExon)] } else { set DistanceAuDebutDeExonOuIntron [expr $FinExonOuIntron - $Position] set DistanceAlaFinDeExonOuIntron [expr $Position - $DebutExonOuIntron] set ExonOuIntronNumber [expr $ExonCount - $I] set ExonOuIntron "Exon$Separator$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($FinExon-$Position) / ($FinExon-$DebExon)] } if { $ExonOuIntronNumber == $ExonCount } { set ExonOuIntron "ExonLast$Separator$ExonOuIntronNumber" } } } #Espionne "Intron" if { $RechercheDansExon == "KO" } { if { $ExonCount > 1 } { for {set J 0} {$J < [expr $ExonCount-1] } {incr J } { set FinExonCourant [lindex $ListeDesExonsEnds $J] set DebExonSuivant [lindex $ListeDesExonsStarts [expr $J+1]] #Espionne "$Position $FinExonCourant $DebExonSuivant" if { $Position >= $FinExonCourant && $Position < $DebExonSuivant } { set DebutExonOuIntron $FinExonCourant set FinExonOuIntron $DebExonSuivant set DebutIntron $FinExonCourant set FinIntron $DebExonSuivant if { $Strand == "+" } { set DistanceAuDebutDeExonOuIntron [expr $Position - $DebutIntron] set DistanceAlaFinDeExonOuIntron [expr $FinIntron - $Position] set ExonOuIntronNumber [expr $J + 1] set ExonOuIntron "Intron$Separator$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($Position - $FinExonCourant)/($DebExonSuivant - $FinExonCourant) ] } else { set DistanceAuDebutDeExonOuIntron [expr $FinIntron - $Position] set DistanceAlaFinDeExonOuIntron [expr $Position - $DebutIntron] set ExonOuIntronNumber [expr $ExonCount - $J - 1] set ExonOuIntron "Intron$Separator$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($DebExonSuivant-$Position)/($DebExonSuivant-$FinExonCourant)] } if { $ExonOuIntronNumber == [expr $ExonCount -1] } { set ExonOuIntron "IntronLast$Separator$ExonOuIntronNumber" } } } } else { set ExonOuIntron "Probleme Intron" } } #On cherche si le SBS est plus proche du début ou de la fin de l'exon/intron oé il se trouve if { ![info exists DistanceAuDebutDeExonOuIntron] } { error "$Position <> $ResultatBQL" } if {$DistanceAuDebutDeExonOuIntron < $DistanceAlaFinDeExonOuIntron} { set DistanceAlaBorneDeExonOuIntron $DistanceAuDebutDeExonOuIntron set DebutOuFinExonOuIntron "Debut" } else { set DistanceAlaBorneDeExonOuIntron $DistanceAlaFinDeExonOuIntron set DebutOuFinExonOuIntron "Fin" } set Retour "$Name$Separator$TxStart$Separator$TxEnd$Separator$Strand$Separator$ExonOuIntron$Separator$UtrOuCDS$Separator$DebutExonOuIntron$Separator$FinExonOuIntron$Separator$DebutOuFinExonOuIntron$Separator$DistanceAlaBorneDeExonOuIntron" } else { #Espionne "Erreur: Starts=$LongueurDesStarts Ends=$LongueurDesEnds Count=$ExonCount" set Retour "$Name$Separator$TxStart$Separator$TxEnd$Separator$Strand$SeparatorErreur$SeparatorErreur$SeparatorErreur$SeparatorErreur$SeparatorErreur$SeparatorErreur" } set Retour [string trim $Retour "\n"] set Retour [string trim $Retour] } return $Retour } proc LocInBetween {Position Org Chr {FromWhere ""} {FinPosition ""}} { #Quand on utilise LocUcsc Org=Mouse #Quand on utilise LocUcscRefSeq Org=mm9 #NB: Pour Between, dans le cas ou pls NM chevauchants, n'en choisit qu'un dans le resultat (au hasard). Pour plus tard, considere tous les NM ou le plus long ? Wup "Attention UCSC compte a partir de 0" global LocInBetween set NDeChaqueCote 20 if {$FinPosition==""} { set FinPosition $Position } if {$FromWhere==""} { set FromWhere "Ucsc" } set Foc "$FromWhere$Org$Chr" if { ! [info exists LocInBetween($Foc)]} { if {$FromWhere=="Ucsc"} { #set LocInBetween($Foc) [LocUcsc ListOf$Org$Chr "StartEndName"] set LocInBetween($Foc) [LocUcscRefSeq $Org ListOf$Chr "StartEndName"] } if {$FromWhere=="Affy"} { set LocInBetween($Foc) [LocAffy ListOf$Org$Chr "StartEndName"] } } set D 0 set F [expr [llength $LocInBetween($Foc)] - 1] if {$F<$D} { return "Error NoStartEndNameAvailable" } set SENDeb [lindex $LocInBetween($Foc) 0] set SENFin [lindex $LocInBetween($Foc) end] if {$SENDeb==""||$SENFin==""} { return "Error NoGenome" } if {$Position<[lindex $SENDeb 0] || $Position>[lindex $SENFin 1]} { return "Outside $SENDeb $SENFin" } set OldAvant $SENDeb set OldApres $SENFin while 1 { #Espionne "$OldAvant $OldApres" #Espionne "$D $F" if {$F<$D} { #Espionne "$F $D" set StatusPremier "Between $OldAvant $OldApres" break } set M [expr ($D+$F)/2] set SEN [lindex $LocInBetween($Foc) $M] #Espionne "$M $SEN" set Start [lindex $SEN 0] set End [lindex $SEN 1] if {$Start<=$Position && $Position<=$End} { set LesIns [list "In $SEN"] #Espionne "$M $SEN" for {set I [expr -$NDeChaqueCote]} { $I<=$NDeChaqueCote} { incr I } { set MM [expr $M + $I] set SEN [lindex $LocInBetween($Foc) $MM] if {$SEN==""} { continue } set Start [lindex $SEN 0] set End [lindex $SEN 1] if {$FinPosition<$Start || $End<$Position} { continue } #Espionne "$MM $SEN" lappend LesIns "In $SEN" } set LesIns [lsort -unique $LesIns] return $LesIns } if {$D==$F} { if {$Position<$Start} {set OldApres $SEN} if {$End<$Position} {set OldAvant $SEN} set StatusPremier "Between $OldAvant $OldApres" break } if {$Position<$Start} {set OldApres $SEN; set F [expr $M -1]} if {$End<$Position} {set OldAvant $SEN; set D [expr $M +1]} } #quand trouve Between dans la boucle du dessus, cherche si il y a pas tout de meme des In set LesIns {} for {set I [expr -$NDeChaqueCote]} { $I<=$NDeChaqueCote} { incr I } { set MM [expr $M + $I] set SEN [lindex $LocInBetween($Foc) $MM] if {$SEN==""} { continue } set Start [lindex $SEN 0] set End [lindex $SEN 1] if {$FinPosition<$Start || $End<$Position} { continue } #Espionne "$MM $SEN" lappend LesIns "In $SEN" } set LesIns [lsort -unique $LesIns] if {$LesIns!={}} { return $LesIns } return $StatusPremier } proc LocInBoost {Position Org Chr {FromWhere refGene}} { set ExonOuIntron "Intron" set CdsOuPas "NonRenseigneCDS" set Retour "" Wup "Attention UCSC compte a partir de 0" set Where "chrom='$Chr' and txStart<=$Position and $Position<=txEnd" set org $Org if {$FromWhere == "refGene"} { set typegene "protein" set nameOuAccess "name" } else { set typegene "protein" set nameOuAccess "access" set Where "$Where AND typegene='protein' } set ListeDesExonsStarts {} set ListeDesExonsEnds {} foreach { Name TxStart TxEnd Strand ExonStarts ExonEnds ExonCount CdsStart CdsEnd } [SqlExec "select $nameOuAccess, txStart, txEnd, strand, exonStarts, exonEnds, exonCount, cdsStart, cdsEnd from ucsc$org.$FromWhere where $Where order by TxStart LIMIT 1" -flatlist] { if {$typegene == "protein"} { set UtrOuCDS "PasUtr" if { $Position >= $CdsStart && $Position <= $CdsEnd } { set CdsOuPas "DansCds" } else { set CdsOuPas "HorsCds" if { $Strand == "+" } { if { $CdsStart > $Position } { set UtrOuCDS "5-UTR" } if { $CdsEnd < $Position } { set UtrOuCDS "3-UTR" } } if { $Strand == "-" } { if { $CdsEnd < $Position } { set UtrOuCDS "5-UTR" } if { $CdsStart > $Position } { set UtrOuCDS "3-UTR" } } } set ListeDesExonsStarts [split $ExonStarts ","] set ListeDesExonsEnds [split $ExonEnds ","] set ExonOuIntron "Erreur" set OccupationExonOuIntron -1 set RechercheDansExon "KO" for {set I 0} {$I < $ExonCount } {incr I } { set DebExon [lindex $ListeDesExonsStarts $I] set FinExon [lindex $ListeDesExonsEnds $I] if { $DebExon <= $Position && $FinExon >= $Position } { set DebutExonOuIntron $DebExon set FinExonOuIntron $FinExon set RechercheDansExon "OK" if { $Strand == "+" } { set DistanceAuDebutDeExonOuIntron [expr $Position - $DebutExonOuIntron] set DistanceAlaFinDeExonOuIntron [expr $FinExonOuIntron - $Position] set ExonOuIntronNumber [expr $I + 1] set ExonOuIntron "Exon$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($Position-$DebExon) / ($FinExon-$DebExon)] } else { set DistanceAuDebutDeExonOuIntron [expr $FinExonOuIntron - $Position] set DistanceAlaFinDeExonOuIntron [expr $Position - $DebutExonOuIntron] set ExonOuIntronNumber [expr $ExonCount - $I] set ExonOuIntron "Exon$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($FinExon-$Position) / ($FinExon-$DebExon)] } if { $ExonOuIntronNumber == $ExonCount } { set ExonOuIntron "ExonLast$ExonOuIntronNumber" } } } if { $RechercheDansExon == "KO" } { if { $ExonCount > 1 } { for {set J 0} {$J < [expr $ExonCount-1] } {incr J } { set FinExonCourant [lindex $ListeDesExonsEnds $J] set DebExonSuivant [lindex $ListeDesExonsStarts [expr $J+1]] if { $Position >= $FinExonCourant && $Position < $DebExonSuivant } { set DebutExonOuIntron $FinExonCourant set FinExonOuIntron $DebExonSuivant set DebutIntron $FinExonCourant set FinIntron $DebExonSuivant if { $Strand == "+" } { set DistanceAuDebutDeExonOuIntron [expr $Position - $DebutIntron] set DistanceAlaFinDeExonOuIntron [expr $FinIntron - $Position] set ExonOuIntronNumber [expr $J + 1] set ExonOuIntron "Intron$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($Position - $FinExonCourant)/($DebExonSuivant - $FinExonCourant) ] } else { set DistanceAuDebutDeExonOuIntron [expr $FinIntron - $Position] set DistanceAlaFinDeExonOuIntron [expr $Position - $DebutIntron] set ExonOuIntronNumber [expr $ExonCount - $J - 1] set ExonOuIntron "Intron$ExonOuIntronNumber" set OccupationExonOuIntron [expr 100*($DebExonSuivant-$Position)/($DebExonSuivant-$FinExonCourant)] } if { $ExonOuIntronNumber == [expr $ExonCount -1] } { set ExonOuIntron "IntronLast" } } } } else { set ExonOuIntron "Probleme Intron" } } #On cherche si le SBS est plus proche du début ou de la fin de l'exon/intron oé il se trouve if {$DistanceAuDebutDeExonOuIntron < $DistanceAlaFinDeExonOuIntron} { set DistanceAlaBorneDeExonOuIntron $DistanceAuDebutDeExonOuIntron set DebutOuFinExonOuIntron "Debut" } else { set DistanceAlaBorneDeExonOuIntron $DistanceAlaFinDeExonOuIntron set DebutOuFinExonOuIntron "Fin" } set Retour "$Name $TxStart $TxEnd $Strand $ExonOuIntron $CdsOuPas $UtrOuCDS $DebutExonOuIntron $FinExonOuIntron $DebutOuFinExonOuIntron $DistanceAlaBorneDeExonOuIntron $OccupationExonOuIntron" set Retour [string trim $Retour "\n"] set Retour [string trim $Retour] } else { set Retour "$Name $TxStart $TxEnd $Strand X X X X X X X X" set Retour [string trim $Retour "\n"] set Retour [string trim $Retour] } } return $Retour } proc LocToSequenceUcsc {Chromosome Debut Fin Orientation Organisme VersionGenome} { #Version plus flexible de BoutADNDeUcsc set FichierTFA "" if {[regexp -nocase "homo|human|Human|Homo" $Organisme]} { set Organisme "Homo_Sapiens" set FichierTFA2 "/genomics/link/UCSCGenomes/$Organisme/bigZips$VersionBigZips/$Chromosome.fa" } else { if {[regexp -nocase "Mus|Mouse" $Organisme]} { set Organisme "Mus_Musculus" } set FichierTFA "/genomics/link/UCSCGenomes/$Organisme/bigZips$VersionGenome/$Chromosome.fa" } return [BoutADNDuTFA $Debut $Fin $Orientation $FichierTFA] } proc LocUcStaf {{Qui ""} {Quoi ""}} { global LocUcStaf #set WithoutQDS [expr [info exists LocUcStaf(FichierLocUcStafHuman)] || [info exists LocUcStaf(FichierLocUcStafMouse)]] #if { ! [OnTraiteUCSCGenomes] && ! $WithoutQDS} { return [QuestionDeScience "UCSCGenomes" "ret LocUcStaf $Qui $Quoi"] } #if {[OnTraiteUCSCGenomes]} { #set RepertoireUcsc [RepertoireDuGenome]239RefSq.affyID_xenoAnnot.txt #} else { #set RepertoireUcsc "/genomics/link/UCSCAlignements/g3/UCSCGenomes" # } set RepertoireUcsc "/genomics/link/UCSCAlignements/g3/UCSCGenomes" if {$Qui==""} { set Qui "ListOf" set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcStaf($Qui,$Quoi)]} { return $LocUcStaf($Qui,$Quoi) } if {[info exists LocUcStaf("EstCharge")]} { return "" } set LocUcStaf("EstCharge") 1 set FichierLocUcStafHuman "$RepertoireUcsc/Homo_sapiens/database/all_mrna.txt" if {[info exists LocUcStaf(FichierLocUcStafMouse)]} { set FichierLocUcStafMouse $LocUcStaf(FichierLocUcStafMouse) } else { #rR set FichierLocUcStafMouse "$RepertoireUcsc/Mus_musculus/database/MouseAllGenes200602" #rR set FichierLocUcStafMouse "$RepertoireUcsc/Mus_musculus/database/knowngene.txt" set FichierLocUcStafMouse "$RepertoireUcsc/Mus_musculus/database/all_mrna.txt" } #================================================================================== set OnTraitemRNA [regexp "all_mrna" [file tail $FichierLocUcStafHuman]] set OnTraiteknowngene [regexp "knowngene" [file tail $FichierLocUcStafHuman]] #================================================================================== if {$OnTraiteknowngene} { set EnteteCommuneknowngene "bin name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name2 cdsStartStat cdsEndStat exonFrames" set LesTetes [split $EnteteCommuneknowngene " "] } #================================================================================== if {$OnTraitemRNA} { set EnteteCommunemRNA "bin matches misMatches repMatches nCount qNumInsert qBaseInsert tNumInsert tBaseInsert strand qName qSize qStart qEnd tName tSize tStart tEnd blockCount blockSizes qStarts tStarts" set LesTetes [split $EnteteCommunemRNA " "] } #================================================================================== if {!$OnTraitemRNA && !$OnTraiteknowngene} { set EnteteCommuneknowngene "name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds NAME2 alignID" set LesTetes [split $EnteteCommuneknowngene " "] } set LocUcStaf(ListOf,Header) $LesTetes foreach Ligne [concat [list "Human"] [LesLignesDuFichier $FichierLocUcStafHuman] [list "Mouse"] [LesLignesDuFichier $FichierLocUcStafMouse]] { if {[regexp {^(Human|Mouse)$} $Ligne]} { set HumMou $Ligne continue } set LesMots [LesMotsDeLaLigne $Ligne] if {$OnTraiteknowngene} { set Name [lindex $LesMots 1] } else { #=========================================================== foreach Tete $LesTetes { set $Tete [lindex $LesMots [lsearch $LesTetes $Tete]] } set Name $qName set chrom $tName set Space " " # Espionne $Name$Space$qName$Space$qStart$Space$qEnd #=========================================================== } if {[info exists LocUcStaf($Name,name)]} { set ReferenceName $Name set Ieme 1 set NewName "$Name-[incr Ieme]" while {[info exists LocUcStaf($NewName,name)]} { set NewName "$Name-[incr Ieme]" } set LocUcStaf($NewName,ReferenceName) $ReferenceName set Name $NewName lappend LocUcStaf(PolyLocalisationOf,$ReferenceName) $NewName lappend LocUcStaf(ListOf,PolyLocalisation) $NewName } set txStart $tStart set txEnd $tEnd lappend LocUcStaf(ListOf$HumMou,Access) $qName lappend LocUcStaf(ListOf,Access) $qName foreach Tete $LesTetes Mot $LesMots { set $Tete $Mot set LocUcStaf($Name,$Tete) $Mot } if {$OnTraitemRNA} { lappend LocUcStaf(ListOf,qName) $qName lappend LocUcStaf($qName,line) $Name } if {$OnTraiteknowngene} { lappend LocUcStaf(ListOf,name2) $name2 lappend LocUcStaf($name2,line) $Name } if { ! $OnTraiteknowngene && ! $OnTraitemRNA } { lappend LocUcStaf(ListOf,NAME2) $NAME2 lappend LocUcStaf($NAME2,line) $Name } set LocUcStaf($Name,line) $Ligne lappend LocUcStaf(ListOf$HumMou,chrom) $chrom set StartEndName [list $txStart $txEnd $strand $Name] lappend LocUcStaf(ListOf$HumMou$chrom,StartEndName) $StartEndName } foreach Org [list "Human" "Mouse"] { set LocUcStaf(ListOf$Org,chrom) [lsort -unique $LocUcStaf(ListOf$Org,chrom)] foreach Chr $LocUcStaf(ListOf$Org,chrom} { set LocUcStaf(ListOf$Org$Chr,StartEndName) [lsort -integer -index 0 $LocUcStaf(ListOf$Org$Chr,StartEndName)] } return [LocUcStaf $Qui $Quoi] } proc LocUcsc {{Qui ""} {Quoi ""}} { global LocUcsc Wup "Attention UCSC compte a partir de 0 pour les start MAIS a partir de 1 pour les end !!!!!!!!!!!!!!!!!!!!!!!!" set RepertoireUcsc "/genomics/link/UCSCGenomes" set FichierLocUcscMouse "$RepertoireUcsc/Mus_musculus/database/mm9/last/knownGene.txt" if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcsc($Qui,$Quoi)]} { return $LocUcsc($Qui,$Quoi) } if {[info exists LocUcsc("EstCharge")]} { return "" } set LocUcsc("EstCharge") 1 set LesTetes [list KgId chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds proteinAcc alignID] set LocUcsc(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $FichierLocUcscMouse] { #rR c est un peu maladroit de indiquer que le blanc ne doit pas etre reduit de 2 a 1 set LesMots [LesMotsDeLaLigne $Ligne " "] set KgId [lindex $LesMots 0] lappend LocUcsc(ListOf,KgId) $KgId foreach Tete $LesTetes Mot $LesMots { set $Tete $Mot set LocUcsc($KgId,$Tete) $Mot } lappend LocUcsc(ListOf,proteinAcc) $proteinAcc lappend LocUcsc($proteinAcc,KgId) $KgId set LocUcsc($KgId,line) $Ligne lappend LocUcsc(ListOf,chrom) $chrom #LocUcsc ListOfchr1 StartEndName set StartEndName [list $txStart $txEnd $strand $KgId] lappend LocUcsc(ListOfMouse$chrom,StartEndName) $StartEndName } return [LocUcsc $Qui $Quoi] } proc LocUcscEssai {{Qui ""} {Quoi ""}} { Wup "Attention UCSC compte a partir de 0" set RepertoireUcsc "/genomics/link/UCSCGenomes" set FichierLocUcscMouse "$RepertoireUcsc/Mus_musculus/database/knownGene.txt" if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcscEssai($Qui,$Quoi)]} { return $LocUcscEssai($Qui,$Quoi) } if {[info exists LocUcscEssai("EstCharge")]} { return "" } set LocUcscEssai("EstCharge") 1 set LesTetes [list KgId chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds proteinAcc alignID] set LocUcscEssai(ListOf,Header) $LesTetes return [LocUcscEssai $Qui $Quoi] } proc LocUcscEvi {Nom {FromWhere ""} {AllLoc ""}} { set LesLignesLocUcsc {} set AllLoc [string equal -nocase "AllLoc" $AllLoc] set Acc [AccessEvi $Nom] if {$FromWhere==""} { set FromWhere "From200602" } if {$FromWhere=="From200602"} { set LigneLocUcsc [LocUcsc $Acc "line"] set LigneNewAcc [LocUcsc PolyLocalisationOf $Acc] set LesNewsAcc [split $LigneNewAcc " "] lappend LesLignesLocUcsc $LigneLocUcsc foreach New $LesNewsAcc { lappend LesLignesLocUcsc [LocUcsc $New "line"] } } set Name ""; set Chrom ""; set Strand ""; set TxStart ""; set TxEnd "" scan $LigneLocUcsc "%s %s %s %s %s" Name Chrom Strand TxStart TxEnd set LocUcscEvi "$Chrom:$TxStart-$TxEnd ($Strand)" if { ! $AllLoc} { return $LocUcscEvi } if {$AllLoc && $LocUcscEvi==":- ()"} { return $LocUcscEvi } foreach LigneLocUcsc $LesLignesLocUcsc { set Name ""; set Chrom ""; set Strand ""; set TxStart ""; set TxEnd "" scan $LigneLocUcsc "%s %s %s %s %s" Name Chrom Strand TxStart TxEnd set LocUcscEvi "$Chrom:$TxStart-$TxEnd ($Strand)" lappend LesLUE $LocUcscEvi } return $LesLUE } proc LocUcscOld {{Qui ""} {Quoi ""}} { Wup "Attention UCSC compte a partir de 0" global LocUcsc #set WithoutQDS [expr [info exists LocUcsc(FichierLocUcscHuman)] || [info exists LocUcsc(FichierLocUcscMouse)]] #if { ! [OnTraiteUCSCGenomes] && ! $WithoutQDS} { return [QuestionDeScience "UCSCGenomes" "ret LocUcsc $Qui $Quoi"] } #if {[OnTraiteUCSCGenomes]} { #set RepertoireUcsc [RepertoireDuGenome]239RefSq.affyID_xenoAnnot.txt #} else { #set RepertoireUcsc "/genomics/link/UCSCGenomes" # } set RepertoireUcsc "/genomics/link/UCSCGenomes" if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcsc($Qui,$Quoi)]} { return $LocUcsc($Qui,$Quoi) } if {[info exists LocUcsc("EstCharge")]} { return "" } set LocUcsc("EstCharge") 1 if {[info exists LocUcsc(FichierLocUcscHuman)]} { set FichierLocUcscHuman $LocUcsc(FichierLocUcscHuman) } else { set FichierLocUcscHuman "$RepertoireUcsc/Homo_sapiens/database/knownGene.txt" } if {[info exists LocUcsc(FichierLocUcscMouse)]} { set FichierLocUcscMouse $LocUcsc(FichierLocUcscMouse) } else { set FichierLocUcscMouse "$RepertoireUcsc/Mus_musculus/database/knownGene.txt" } set OnTraiteRefGene [regexp "refGene" [file tail $FichierLocUcscMouse]] if {$OnTraiteRefGene} { set EnteteCommuneRefGene "bin name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name2 cdsStartStat cdsEndStat exonFrames" set LesTetes [split $EnteteCommuneRefGene " "] } else { set EnteteCommuneKnownGene "KgId chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds proteinAcc alignID" set LesTetes [split $EnteteCommuneKnownGene " "] } set LocUcsc(ListOf,Header) $LesTetes foreach Ligne [concat [list "Human"] [LesLignesDuFichier $FichierLocUcscHuman] [list "Mouse"] [LesLignesDuFichier $FichierLocUcscMouse]] { if {[regexp {^(Human|Mouse)$} $Ligne]} { set HumMou $Ligne ; continue } set LesMots [LesMotsDeLaLigne $Ligne] if {$OnTraiteRefGene} { set Name [lindex $LesMots 1] } else { set Name [lindex $LesMots 0] } if {[info exists LocUcsc($Name,name)]} { set ReferenceName $Name set Ieme 1 set NewName "$Name-[incr Ieme]" while {[info exists LocUcsc($NewName,name)]} { set NewName "$Name-[incr Ieme]" } set LocUcsc($NewName,ReferenceName) $ReferenceName set Name $NewName lappend LocUcsc(PolyLocalisationOf,$ReferenceName) $NewName lappend LocUcsc(ListOf,PolyLocalisation) $NewName } lappend LocUcsc(ListOf$HumMou,Access) $Name lappend LocUcsc(ListOf,Access) $Name foreach Tete $LesTetes Mot $LesMots { set $Tete $Mot set LocUcsc($Name,$Tete) $Mot } if {$OnTraiteRefGene} { lappend LocUcsc(ListOf,name2) $name2 lappend LocUcsc($name2,line) $Name } else { lappend LocUcsc(ListOf,proteinID) $proteinID lappend LocUcsc($proteinID,line) $Name } set LocUcsc($Name,line) $Ligne lappend LocUcsc(ListOf$HumMou,chrom) $chrom set StartEndName [list $txStart $txEnd $strand $Name] lappend LocUcsc(ListOf$HumMou$chrom,StartEndName) $StartEndName } foreach Org [list "Human" "Mouse"] { set LocUcsc(ListOf$Org,chrom) [lsort -unique $LocUcsc(ListOf$Org,chrom)] foreach Chr $LocUcsc(ListOf$Org,chrom) { set LocUcsc(ListOf$Org$Chr,StartEndName) [lsort -integer -index 0 $LocUcsc(ListOf$Org$Chr,StartEndName)] } } return [LocUcsc $Qui $Quoi] } proc LocUcscRat {{Qui ""} {Quoi ""}} { Wup "Attention UCSC compte a partir de 0" global LocUcscRat set RepertoireUcsc "/genomics/link/UCSCGenomes" if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcscRat($Qui,$Quoi)]} { return $LocUcscRat($Qui,$Quoi) } if {[info exists LocUcscRat("EstCharge")]} { return "" } set LocUcscRat("EstCharge") 1 if {[info exists LocUcscRat(FichierLocUcscRat)]} { set FichierLocUcscRat $LocUcscRat(FichierLocUcscRat) } else { set FichierLocUcscRat "$RepertoireUcsc/Mus_musculus/database/knownGene.txt" } set OnTraiteRefGene [regexp "refGene" [file tail $FichierLocUcscRat]] if {$OnTraiteRefGene} { set EnteteCommuneRefGene "bin name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name2 cdsStartStat cdsEndStat exonFrames" set LesTetes [split $EnteteCommuneRefGene " "] } else { set EnteteCommuneKnownGene "name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds proteinID alignID" set LesTetes [split $EnteteCommuneKnownGene " "] } set LocUcscRat(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $FichierLocUcscRat] { set LesMots [LesMotsDeLaLigne $Ligne] if {$OnTraiteRefGene} { set Name [lindex $LesMots 1] } else { set Name [lindex $LesMots 0] } if {[info exists LocUcscRat($Name,name)]} { set ReferenceName $Name set Ieme 1 set NewName "$Name-[incr Ieme]" while {[info exists LocUcscRat($NewName,name)]} { set NewName "$Name-[incr Ieme]" } set LocUcscRat($NewName,ReferenceName) $ReferenceName set Name $NewName lappend LocUcscRat(PolyLocalisationOf,$ReferenceName) $NewName lappend LocUcscRat(ListOf,PolyLocalisation) $NewName } lappend LocUcscRat(ListOf$HumMou,Access) $Name lappend LocUcscRat(ListOf,Access) $Name foreach Tete $LesTetes Mot $LesMots { set $Tete $Mot set LocUcscRat($Name,$Tete) $Mot } if {$OnTraiteRefGene} { lappend LocUcscRat(ListOf,name2) $name2 lappend LocUcscRat($name2,line) $Name } else { lappend LocUcscRat(ListOf,proteinID) $proteinID lappend LocUcscRat($proteinID,line) $Name } set LocUcscRat($Name,line) $Ligne lappend LocUcscRat(ListOf$HumMou,chrom) $chrom set StartEndName [list $txStart $txEnd $strand $Name] lappend LocUcscRat(ListOf$HumMou$chrom,StartEndName) $StartEndName } foreach Org [list "Human" "Mouse"] { set LocUcscRat(ListOf$Org,chrom) [lsort -unique $LocUcscRat(ListOf$Org,chrom)] foreach Chr $LocUcscRat(ListOf$Org,chrom) { set LocUcscRat(ListOf$Org$Chr,StartEndName) [lsort -integer -index 0 $LocUcscRat(ListOf$Org$Chr,StartEndName)] } } return [LocUcscRat $Qui $Quoi] } proc LocUcscRefSeq {Org {Qui ""} {Quoi ""}} { #Org sera mm9, hg19, danRer6, galGal3 ... global LocUcscRefSeq if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcscRefSeq(Org)] && $LocUcscRefSeq(Org)!=$Org} { unset LocUcscRefSeq } if {[info exists LocUcscRefSeq($Qui,$Quoi)]} { return $LocUcscRefSeq($Qui,$Quoi) } if {[info exists LocUcscRefSeq("EstCharge")]} { return "" } set LocUcscRefSeq("EstCharge") 1 set LocUcscRefSeq(Org) $Org set File [CorresVersionGenomeEtFichierRefGene $Org] set EnteteCommuneRefGene "bin name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds score name2 cdsStartStat cdsEndStat exonFrames" set LesTetes [split $EnteteCommuneRefGene " "] set LocUcscRefSeq(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $File] { if {$Ligne==""} {continue} set LesMots [LesMotsDeLaLigne $Ligne] set AccNm [lindex $LesMots 1] set exonCount [lindex $LesMots 8] lappend LocUcscRefSeq(ListOf,Access) $AccNm set LocUcscRefSeq($AccNm,line) $Ligne lappend LocUcscRefSeq($AccNm,lines) $Ligne lappend LocUcscRefSeq($AccNm,exonCounts) $exonCount foreach Tete $LesTetes Mot $LesMots { set LocUcscRefSeq($AccNm,$Tete) $Mot } set Chr $LocUcscRefSeq($AccNm,chrom) lappend LesChr $Chr set StartEndName [list $LocUcscRefSeq($AccNm,txStart) $LocUcscRefSeq($AccNm,txEnd) $LocUcscRefSeq($AccNm,strand) $AccNm $LocUcscRefSeq($AccNm,name2)] lappend LocUcscRefSeq(ListOf$Chr,StartEndName) $StartEndName } foreach Chr [lsort -unique $LesChr] { #set LocUcscRefSeq(ListOf$Chr,StartEndName) [lsort -integer -index 1 $LocUcscRefSeq(ListOf$Chr,StartEndName)] set LocUcscRefSeq(ListOf$Chr,StartEndName) [lsort -integer -index 0 $LocUcscRefSeq(ListOf$Chr,StartEndName)] } return [LocUcscRefSeq $Org $Qui $Quoi] } proc LocUcscRefSeqEvi {Nom {FromWhere ""} {AllLoc ""}} { set AllLoc [string equal -nocase "AllLoc" $AllLoc] if {$FromWhere==""} {set FromWhere "From200602"} if {$FromWhere=="From200602"} { set LigneLocUcsc [LocUcscRefSeq $Nom "line"] set LignesLocUcsc [LocUcscRefSeq $Nom "lines"] } if {$FromWhere=="From200503"} { set RepertoireUcsc "/genomics/link/UCSCGenomes" set FichierLocUcscMouse "$RepertoireUcsc/Mus_musculus/database/refGene.txt" global LocUcscRefSeq ; set LocUcscRefSeq(FichierLocUcscMouse) $FichierLocUcscMouse set LigneLocUcsc [LocUcscRefSeq $Nom "line"] set LignesLocUcsc [LocUcscRefSeq $Nom "lines"] } set Name "" set Chrom "" set Strand "" set TxStart "" set TxEnd "" scan $LigneLocUcsc "%s %s %s %s %s %s" bidon Name Chrom Strand TxStart TxEnd set LocUcscRefSeqEvi "$Chrom:$TxStart-$TxEnd ($Strand)" if { ! $AllLoc} { return $LocUcscRefSeqEvi } if {$AllLoc && $LocUcscRefSeqEvi==":- ()"} {return $LocUcscRefSeqEvi} foreach LigneLocUcsc $LignesLocUcsc { set Name "" set Chrom "" set Strand "" set TxStart "" set TxEnd "" scan $LigneLocUcsc "%s %s %s %s %s %s" bidon Name Chrom Strand TxStart TxEnd set LocUcscRefSeqEvi "$Chrom:$TxStart-$TxEnd ($Strand)" lappend LesLUE $LocUcscRefSeqEvi } return $LesLUE } proc LocUcscRefSeqOld {{Qui ""} {Quoi ""}} { #name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds global LocUcscRefSeq if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcscRefSeq($Qui,$Quoi)]} { return $LocUcscRefSeq($Qui,$Quoi) } if {[info exists LocUcscRefSeq("EstCharge")]} { return "" } set LocUcscRefSeq("EstCharge") 1 set RepertoireUcsc "/genomics/link/UCSCGenomes" if {[info exists LocUcscRefSeq(FichierLocUcscMouse)]} { set FichierLocUcscMouse $LocUcscRefSeq(FichierLocUcscMouse) } else { set FichierLocUcscMouse "$RepertoireUcsc/Mus_musculus/database/refGene.txt" } set EnteteCommuneRefGene "bin name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name2 cdsStartStat cdsEndStat exonFrames" set LesTetes [split $EnteteCommuneRefGene " "] set LocUcscRefSeq(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $FichierLocUcscMouse] { if {$Ligne==""} {continue} set LesMots [LesMotsDeLaLigne $Ligne] set AccNm [lindex $LesMots 1] set exonCount [lindex $LesMots 8] lappend LocUcscRefSeq(ListOf,Access) $AccNm set LocUcscRefSeq($AccNm,line) $Ligne lappend LocUcscRefSeq($AccNm,lines) $Ligne lappend LocUcscRefSeq($AccNm,exonCounts) $exonCount foreach Tete $LesTetes Mot $LesMots { set LocUcscRefSeq($AccNm,$Tete) $Mot } set Chr $LocUcscRefSeq($AccNm,chrom) set StartEndName [list $LocUcscRefSeq($AccNm,txStart) $LocUcscRefSeq($AccNm,txEnd) $AccNm] } return [LocUcscRefSeq $Qui $Quoi] } proc LocUcscRefSeqRat {{Qui ""} {Quoi ""}} { #name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds global LocUcscRefSeqRat if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "line" } if {[info exists LocUcscRefSeqRat($Qui,$Quoi)]} { return $LocUcscRefSeqRat($Qui,$Quoi) } if {[info exists LocUcscRefSeqRat("EstCharge")]} { return "" } set LocUcscRefSeqRat("EstCharge") 1 set RepertoireUcsc "/genomics/link/UCSCGenomes" if {[info exists LocUcscRefSeqRat(FichierLocUcscRat)]} { set FichierLocUcscRat $LocUcscRefSeqRat(FichierLocUcscRat) } else { set FichierLocUcscRat "$RepertoireUcsc/Rattus_norvegicus/database/refGene.txt" } set EnteteCommuneRefGene "name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name2 cdsStartStat cdsEndStat exonFrames" set LesTetes [split $EnteteCommuneRefGene " "] set LocUcscRefSeqRat(ListOf,Header) $LesTetes foreach Ligne [LesLignesDuFichier $FichierLocUcscRat] { if {$Ligne==""} {continue} set LesMots [LesMotsDeLaLigne $Ligne] set AccNm [lindex $LesMots 0] set exonCount [lindex $LesMots 7] lappend LocUcscRefSeqRat(ListOf,Access) $AccNm lappend LocUcscRefSeqRat($AccNm,line) $Ligne lappend LocUcscRefSeqRat($AccNm,lines) $Ligne lappend LocUcscRefSeqRat($AccNm,exonCounts) $exonCount foreach Tete $LesTetes Mot $LesMots { set LocUcscRefSeqRat($AccNm,$Tete) $Mot } set Chr $LocUcscRefSeqRat($AccNm,chrom) set StartEndName [list $LocUcscRefSeqRat($AccNm,txStart) $LocUcscRefSeqRat($AccNm,txEnd) $AccNm] } return [LocUcscRefSeqRat $Qui $Quoi] } proc LocaText {t {Action ""}} { global LocaText if {$Action==""} { set Action "Next" } if {$Action=="Top"} { if { ! [info exists LocaText($t,Start)]} { unset LocaText($t,Start) } set Action "Next" } if {$Action=="New"} { if {[info exists LocaText($t,Text)]} { unset LocaText($t,Text) } if { ! [info exists LocaText($t,Start)]} { unset LocaText($t,Start) } } if { ! [info exists LocaText($t,Text)]} { set Texte [Entre] set LocaText($t,Text) $Texte } if { ! [info exists LocaText($t,Start)]} { set LocaText($t,Start) 1.0 } set Index [$t search $LocaText($t,Text) $LocaText($t,Start)] if {$Index == ""} { return "" } set Fin [expr $Index + 0.[string length $LocaText($t,Text)]] $t tag configure Spot -background red $t tag remove Spot 1.0 end $t tag add Spot $Index $Fin set LocaText($t,Start) [expr $Index + 0.1] return $Index } proc LocalisationChromosomiqueAffyProbes {Input} { Wup "Identifie a partir d un blast ou d un blat les localisation chromosomiques des ProbeSet sur le genome UCSC" Wup "Utilise 3 cutoff, PId du HSP, Cover du HSP avec un gene, Cover des HSP pour un gene" Wup "voir projet AffyProbesTest" #0- Recuperation des infos diverses #0-1 Nom de la puce set GoodChip "" foreach AffyChip [Affymetrix_Chips] { if {[regexp -nocase $AffyChip $Input]} {set GoodChip $AffyChip} } #0-2 Nom du genome set Genome "" if { [regexp "^HG" $GoodChip]} { set Genome "human" } elseif {[regexp "^MG" $GoodChip]} { set Genome "mouse" } if {$Genome==""} {return ""} #1- Chargement des infos du Blast ou du Blat set TailleQuery [AskBlast $Input Taille] set NomQuery [AskBlast $Input Query] set NbSbjct [AskBlast $Input NbSubject] if {$NbSbjct=="0" || $NbSbjct==""} {Espionne ">>>[file tail $Input]\tNo blat hit\t[InterrogeLesInfosAffymetrix $GoodChip $NomQuery RefSeq]\t[InterrogeLesInfosAffymetrix $GoodChip $NomQuery Description]";return ""} set Profile_Base "[string repeat "0" $TailleQuery]" Espionne [join [list Query Chromosome "Query Begins" "Query Ends" "Chr Begins" "Chr Ends" QueryLength NbBaseFound QueryCover NbBaseMultiFound QueryMultiCover] "\t"] #Espionne ">>Q: $NomQuery -- $TailleQuery -- NbSbjct $NbSbjct" #2- Boucle sur les differents subjects set LesChromos "" set LesMultiLoc "" set PId_Cutoff "95.0" set Cover_Cutoff "70.0" for {set i 1} {$i <=$NbSbjct} {incr i} { #Le recouvrement doit etre maximal de notre Query vers Subject #A l inverse on peut etre plus souple dans le sens S vers Q set BId [AskBlast $Input Subject $i] set NbSegment [AskBlast $Input BanqueId $BId NbSegment] set Chromosome [string trim $BId] regsub "chr" $Chromosome "" Chromosome #Espionne ">> $BId -- $NbSegment -- $Chromosome" #2-1 Boucle sur les differents HSPs for {set j 1} {$j <=$NbSegment} {incr j} { set DS "" set FS "" set DS_Tmp "" set FS_Tmp "" set Aln "" set AlnQ "" set nbN "0" set PId "0.0" set PId_Tmp "" set PCover "0.0" set nbId "" set nbTot "" set DQ "" set FQ "" set DQ_Tmp "" set FQ_Tmp "" set TailleHSP "0" set Sens "" set SensQ "" set SensS "" #2-1-1 Recuperation des debut et fin, PId set DS_Tmp [AskBlast $Input BanqueId $BId Segment $j DS] set FS_Tmp [AskBlast $Input BanqueId $BId Segment $j FS] set PId_Tmp [AskBlast $Input BanqueId $BId Segment $j Identities] set Aln [AskBlast $Input BanqueId $BId Segment $j AlignLineaire] set Aln [lindex [split $Aln "\n"] 0] #Espionne "$Aln" regexp {^Query:[ ]+[0-9]+ ([a-z\-]+) [0-9]+} $Aln tmp AlnQ set nbN [regexp -all -indices {[n]} $AlnQ] #166/201 (83%) regexp {([0-9]+)/([0-9]+) \([0-9]+%\)} $PId_Tmp Tmp nbId nbTot if {$nbId == "" || $nbTot == ""} { Espionne "Pb avec le PId de $BId" continue } else { #On ajoute aux bases identiques le nombre de bases N pour palier aux pertes d identite set nbId [expr $nbId + $nbN] #PId du HSP set PId [expr ($nbId*100.0)/$nbTot] #PCover du HSP par rapport a la query complete set PCover [expr ($nbId*100.0)/$TailleQuery] } if {$PId < $PId_Cutoff} {continue} #Espionne "HSP $j: $DS_Tmp / $FS_Tmp" #Espionne "\tPId: $PId -- $nbId + $nbN / $nbTot" #Espionne "\tCover: $PCover -- $nbId + $nbN / $TailleQuery" set Sens [AskBlast $Input BanqueId $BId Segment $j Orientation] scan $Sens "%s / %s" SensQ SensS set DQ_Tmp [AskBlast $Input BanqueId $BId Segment $j DQ] set FQ_Tmp [AskBlast $Input BanqueId $BId Segment $j FQ] if {$DQ_Tmp>$FQ_Tmp} { set DQ $FQ_Tmp set FQ $DQ_Tmp set TailleHSP [expr $DQ_Tmp - $FQ_Tmp + 1] } else { set DQ $DQ_Tmp set FQ $FQ_Tmp set TailleHSP [expr $FQ_Tmp - $DQ_Tmp + 1] } #Espionne "$BId - $PId - $DS - $FS" #Profil de chaque HSP set ProfileHSP "" set ProfileHSP "[string repeat "0" [expr $DQ-1]]" append ProfileHSP "[string repeat "1" $TailleHSP]" if {$TailleQuery == $FQ} { append ProfileHSP "[string repeat "0" [expr $TailleQuery-$FQ-1]]" } else { append ProfileHSP "[string repeat "0" [expr $TailleQuery-$FQ]]" } #Espionne "$ProfileHSP" #Espionne "$TailleQuery [string length $ProfileHSP]" #lappend Tab($ID_Tmp,CoverQ) $HSPCover #lappend Tab($ID_Tmp,CoverQ) [list $DQ $FQ] set Tab($i,$j,CoverQ) $ProfileHSP set Tab($i,$j,Debut) $DS_Tmp set Tab($i,$j,Fin) $FS_Tmp set Tab($i,$j,DebutQ) $DQ set Tab($i,$j,FinQ) $FQ if {! [info exists Tab($i,Lesj)]} { set Tab($i,Lesj) "" } lappend Tab($i,Lesj) $j } #Espionne "Lesj de $i :[set Tab($i,Lesj)]" #2-1-6 Creation d 1 profil cumulatif des alignements pour un subject (chromosome) # calcul du recouvrement de la query set Profile_Tmp "$Profile_Base" if {! [info exists Tab($i,Lesj)]} {continue} set LesDebutsFins "" set LesDebuts "" set LesFins "" set LesDebutsQ "" set LesFinsQ "" foreach HSP [set Tab($i,Lesj)] { set NbTrouve "" #Espionne "HSP -- $HSP" if {! [info exists Tab($i,$HSP,CoverQ)]} {continue} set Profile [set Tab($i,$HSP,CoverQ)] lappend LesDebutsFins [list [set Tab($i,$HSP,DebutQ)] [set Tab($i,$HSP,FinQ)] [set Tab($i,$HSP,Debut)] [set Tab($i,$HSP,Fin)]] set Profile_Tmp2 "" #Espionne "<< -- $Profile_Tmp" #Espionne "< -- $Profile" foreach a [split $Profile_Tmp ""] b [split $Profile ""] { if {$a >= 0 && $b=="1"} { if {$a == 9} { append Profile_Tmp2 $a } else { append Profile_Tmp2 [expr $a + $b] continue } } else { append Profile_Tmp2 $a } } set Profile_Tmp $Profile_Tmp2 } set NbTrouve1 "" set NbTrouve2 "" set QueryCover "" set QueryCover_Cutoff "70.0" set MultiLocCover "" set MultiLocCover_Cutoff "50.0" #Pourcentage de residus trouves a 1 seule localisation pour le meme hit (meme chromosome) set NbTrouve1 [regexp -all -indices {[1-9]} $Profile_Tmp] set QueryCover [expr ($NbTrouve1*100.0)/$TailleQuery] if {$QueryCover >= $QueryCover_Cutoff} { #On considere le hit comme valide et donc on lui attribue la localisation lappend LesChromos $Chromosome } #Pourcentage de residus trouves a plus d 1 localisation pour le meme hit (meme chromosome) set NbTrouve2 [regexp -all -indices {[2-9]} $Profile_Tmp] set MultiLocCover [expr ($NbTrouve2*100.0)/$TailleQuery] if {$MultiLocCover >= $MultiLocCover_Cutoff} { #On considere le hit comme valide pour une multiloc sur le meme hit set TabMulti($Chromosome) 1 #lappend LesMultiLoc 1 } set LesDebuts "" set LesFins "" set LesDebutsQ "" set LesFinsQ "" set LesDebutsFins [lsort -integer -increasing -index 0 $LesDebutsFins] foreach DF $LesDebutsFins { lappend LesDebutsQ [lindex $DF 0] lappend LesFinsQ [lindex $DF 1] lappend LesDebuts [lindex $DF 2] lappend LesFins [lindex $DF 3] } Espionne [join [list $NomQuery $Chromosome [join $LesDebutsQ ";"] [join $LesFinsQ ";"] [join $LesDebuts ";"] [join $LesFins ";"] $TailleQuery $NbTrouve1 $QueryCover $NbTrouve2 $MultiLocCover] "\t"] #Espionne "$Profile_Tmp" #Espionne "$Chromosome -- Query Cover: $NbTrouve1 / $TailleQuery = $QueryCover" #Espionne "$Chromosome -- Multi Loc : $NbTrouve2 / $TailleQuery = $MultiLocCover" #Espionne "$Chromosome -- Debuts $LesDebuts // Fins $LesFins" } AskBlast unsetfile $Input set Texte "" if {[llength $LesChromos] > 1} { append Texte "MultiChromo ($LesChromos) " set FirstTime 1 foreach Chr $LesChromos { if {[info exists TabMulti($Chr)]} { if {$FirstTime} { set FirstTime 0 append Texte "MultiLoc pour " } append Texte "$Chr " } } } elseif {[llength $LesChromos] == 1} { append Texte "MonoChromo ($LesChromos) " set FirstTime 1 foreach Chr $LesChromos { if {[info exists TabMulti($Chr)]} { if {$FirstTime} { set FirstTime 0 append Texte "MultiLoc pour " } append Texte "$Chr " } } } else { append Texte "NoChromo" } #Espionne ">>>$NomQuery\t$Texte" return "" } proc LocalisationChromosomiqueAffyProbesPourTous {Dir} { set LesFichiers [glob -nocomplain -directory "$Dir" "*"] foreach File $LesFichiers { #Espionne "$File" LocalisationChromosomiqueAffyProbes $File } return "" } proc LocalisationDesVirtualPPCRs {{Action ""} {NVoulu ""}} { global LocalisationDesVirtualPPCRs if {$Action==""} { set Action "Show" } if {$Action=="GetLocOf" && [info exists LocalisationDesVirtualPPCRs($NVoulu)]} { return [set LocalisationDesVirtualPPCRs($NVoulu)] } if {$Action=="GetLocOf" && [info exists LocalisationDesVirtualPPCRs("EstCharge")]} { return "" } set LesLocs {} set LesBads {} set LocalisationDesVirtualPPCRs("EstCharge") 1 set FichierLocalisationDesVirtualPPCRs "[RepertoireDuGenome]/fiches/LocalisationDesVirtualPPCRs" if {[file exists $FichierLocalisationDesVirtualPPCRs]} { array set LocalisationDesVirtualPPCRs [LesLignesDuFichier $FichierLocalisationDesVirtualPPCRs] } foreach N [VirtualPPCREnStock "LaListeDesNs"] { set PGS [VirtualPPCREnStock $N "PGS"] set SeqSujet [VirtualPPCREnStock $N "SeqSubject"] set FullName [VirtualPPCREnStock $N "FullName"] if { ! [info exists LocalisationDesVirtualPPCRs($N)]} { set FicTFA "[RepertoireDuGenome]/nuctfa/$PGS" if {[file exists $FicTFA]} { set SeqNuc [QueLaSequenceDuFichierTFA $FicTFA] if {[regexp -nocase -indices $SeqSujet $SeqNuc Indices]} { scan $Indices "%d %d" d f set DN [expr $d+1] set FN [expr $f+1] set DP [expr $d/3 + 1] set FP [expr $f/3 + 1] } else { set DN -1 set FN -1 set DP -1 set FP -1 } } else { set DN -2 set FN -2 set DP -2 set FP -2 } set Ligne [format "%s %s %4d - %4d %4d - %4d %s" $N $PGS $DP $FP $DN $FN $FullName] set LocalisationDesVirtualPPCRs($N) $Ligne } else { set Ligne [set LocalisationDesVirtualPPCRs($N)] scan $Ligne "%s %s %d %s %d %d %s %d %s" NMemo PGSMemo DP Tiret1 FP DN Tiret2 FN FullNameMemo if {$N!=$NMemo || $PGS!=$PGSMemo} { FaireLire "Something is wrong with \n$Ligne\nI expected $N $PGS $FullName" } } scan $FullName "%s %s" PgsLu SujetLu set PpcrName [StringSuivant "ppcr: " dans $FullName] scan $PpcrName "%s" SujetPpcr if {$SujetLu!=$SujetPpcr} { FaireLire "Different subjects in $Ligne" } if {[regexp {\-[0-9]+\-[0-9]+$} $SujetLu Match]} { regsub -all {\-} $Match " " Bornes scan $Bornes "%d %d" DLu FLu if {$DP==$DLu && $FP==$FLu} { } else { lappend LesBads $Ligne } } lappend LesLocs $Ligne } if { ! [file exists $FichierLocalisationDesVirtualPPCRs]} { SauveLesLignes [array get LocalisationDesVirtualPPCRs] dans $FichierLocalisationDesVirtualPPCRs } if {$Action=="ShowBad"} { return [AfficheVariable [join $LesBads "\n"] "AvecVirtualPPCR" "BadLocalisationDesVirtualPPCRsSurLesPGS"] } if {$Action=="Show"} { return [AfficheVariable [join $LesLocs "\n"] "AvecVirtualPPCR" "LocalisationDesVirtualPPCRsSurLesPGS"] } if {$Action=="GetAllLocs"} { return $LesLocs } if {$Action=="GetLocOf"} { return [LocalisationDesVirtualPPCRs "GetLocOf" $NVoulu] } return $LesLocs } proc LocalisationGenomique {} { #Creation du fichier /Localisation/BoxLocalisation_Human set Fichier [FichierBoxLocalisation "BoxLocalisation_Human"] #Creation du fichier polylocalise /Localisation/polylocalise FichierPolyLocalise $Fichier #Creation des fichiers de distribution /Localisation/*_Distribution QuelquesChiffresSurLesSequences Save 1 #Procedures de raymond LesLocalisationsSurChroContig "Create" TriLesLocalisations TriLesLocalisations "BestOnly" } proc LocalisationOligoWolfgang {{Liste ""}} { set Repertoirelur "/genomics/link/lur" if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set total 0; set pasprot 0; set passouris 0; set souris 0; set dejaid 0; set cas1 0; set cas2 0; set cas3 0; set cas4 0; set pasmRNA 0 foreach Nom $Liste { incr total puts "" set LigneFinal ""; set AccmRNA ""; set AccmRNA2 "" set AccProt ""; set IdProt ""; set AccmRNA ""; set AccmRNA2 ""; set LocRs ""; set LocGbRs ""; set LocGbRs2 "" set AccProt [RecupereAccProtWolfgang $Nom] set Espece [RecupereOrganisme $Nom] puts "Espece $Espece" if {[regexp "NoProtein" $AccProt]} { incr pasprot puts "Nom $Nom" puts "pas prot" set LigneFinal "$Nom; " lappend LesLignesFinals $LigneFinal continue } if {![regexp -nocase {^Mus} $Espece]} { incr passouris puts "Nom $Nom" puts "pas souris" set LigneFinal "$Nom; " lappend LesLignesFinals $LigneFinal continue } if {[regexp "MOUSE" $AccProt]} { incr souris incr dejaid set IdProt $AccProt puts "IdProt $IdProt" } else { incr souris set IdProt [IdDuProt $AccProt] puts "IdProt $IdProt" } set AccsmRNAs [LocUcsc $IdProt] if {$AccsmRNAs==""} { incr pasmRNA puts "Nom $Nom" puts "pas mRNA" set LigneFinal "$Nom; " lappend LesLignesFinals $LigneFinal continue } puts "AccsmRNAs $AccsmRNAs" set LesAccmRNA [split $AccsmRNAs " "] set LesAccmRNA [ListeSansDoublon $LesAccmRNA] if {[llength $LesAccmRNA]==1} { incr cas1; puts "un acc" set AccmRNA [lindex $LesAccmRNA 0] puts "AccmRNA $AccmRNA" } elseif {[llength $LesAccmRNA]>1} { set onanm 0 foreach elmt $LesAccmRNA { if {[regexp {^NM_} $elmt]} { set onanm 1 incr cas2; puts "pls acc ac nm" set AccmRNA $elmt puts "AccmRNA $AccmRNA" break } } if {!$onanm} { incr cas3; puts "pls acc ss nm" set AccmRNA [lindex $LesAccmRNA 0] set AccmRNA2 [lindex $LesAccmRNA 1] puts "AccmRNA $AccmRNA" puts "AccmRNA2 $AccmRNA2" } } else { incr cas4; puts "cas4" } if { [regexp {^NM_} $AccmRNA] || [regexp {^XM_} $AccmRNA] || [regexp {^NR_} $AccmRNA]} { set LocRs [LocUcscRefSeqEvi $AccmRNA From200602 AllLoc] set LocRs [ListeSansDoublon $LocRs] } set LocGbRs [LocUcscEvi $AccmRNA From200602 AllLoc] set LocGbRs [ListeSansDoublon $LocGbRs] if {$AccmRNA2!=""} { set LocGbRs2 [LocUcscEvi $AccmRNA2 From200602 AllLoc] set LocGbRs2 [ListeSansDoublon $LocGbRs2] } if {$LocRs!=""} { puts "LocRs $LocRs" puts "LocGbRs $LocGbRs" set LocFinal [DetermineLocUcsc $LocGbRs $LocRs] puts "$LocFinal" set LigneFinal "$Nom;$LocFinal" lappend LesLignesFinals $LigneFinal } if {$LocGbRs2!=""} { puts "LocGbRs $LocGbRs" puts "LocGbRs2 $LocGbRs2" set LocFinal [DetermineLocUcsc $LocGbRs $LocGbRs2] puts "$LocFinal" set LigneFinal "$Nom;$LocFinal" lappend LesLignesFinals $LigneFinal } } puts "" puts "total $total" puts "pasprot $pasprot" puts "passouris $passouris" puts "souris $souris" puts "pasmRNA $pasmRNA" puts "un acc $cas1" puts "pls acc ac nm $cas2" puts "pls acc ss nm $cas3" puts "cas4 $cas4" SauveLesLignes $LesLignesFinals dans $Repertoirelur/LocalisationOligoWolfgang } proc LocaliseBlastNDataBase {{NomDeLaBanque ""} {T ""}} { global RepertoireDuGenome Wup "Creates the correct link or database in ./banques" Wup "ATTENTION : If NomDeLaBanque is not empty returns it immediately ... a ameliorer" if {$NomDeLaBanque!=""} { return $NomDeLaBanque } set RepDesBanques "$RepertoireDuGenome/banques" if { ! [file exists $RepDesBanques]} { File mkdir $RepDesBanques } set BlastNDataBaseDefaut "/catalog/blast/human.nal" if {$T=="T"} { set BlastNDataBase "$RepDesBanques/tblastndatabase" } else { set BlastNDataBase "$RepDesBanques/blastndatabase" } if {[file exists $BlastNDataBase] && [file type $BlastNDataBase]=="link"} { set BlastNDataBase [ReadLink $BlastNDataBase $RepDesBanques] } while { ! [file exists "$BlastNDataBase"]} { if {[OuiOuNon "You didn't define the (T)BlastN database.\n Do You want to use $BlastNDataBaseDefaut ?"]} { eval exec "ln -sf $BlastNDataBaseDefaut $BlastNDataBase" set BlastNDataBase [ReadLink $BlastNDataBase $RepDesBanques] continue } if {[OuiOuNon "You didn't define the BlastN database.\n You can create your own database in $RepDesBanques\n Do You want to do it now ?"]} { FaireLire "Do it before answering" return [LocaliseBlastNDataBase] } if {[OuiOuNon "Do I exit ?"]} { exit } if {[OuiOuNon "Do I cancel BlastN ?"]} { return "" } } regsub {\.(nal|nhr)$} $BlastNDataBase "" BlastNDataBase return $BlastNDataBase } proc LocaliseBlastPDataBase {{Banque ""}} { global RepertoireDuGenome Wup "Creates the correct link or database in ./banques" if {[regexp {_dedicated_(.+)$} $Banque Match Rep]} { regsub {_dedicated_(.+)$} $Banque "" B set Loc [LocaliseBlastPDataBase $B] DedicatedBlastDatabase $Rep Espionne $Loc return $Loc } if {[regexp "/" $Banque]} { return $Banque } if {$Banque!=""} { set Possible "[RepertoireDuGenome]/banques/$Banque" if {[file exists $Possible] || [file exists $Possible.phr] || [file exists $Possible.pal] } { return $Possible } set Possible "/catalog/blast/$Banque" if {[file exists $Possible] || [file exists $Possible.phr] || [file exists $Possible.pal] } { return $Possible } FaireLire "Attention la banque ne peut etre que dans [RepertoireDuGenome]/banques/" } set RepDesBanques "$RepertoireDuGenome/banques" if { ! [file exists $RepDesBanques]} { File mkdir $RepDesBanques } set BlastPDataBaseDefaut "/catalog/blast/protall.pal" set BlastPDataBase "$RepDesBanques/blastpdatabase" if {[file exists $BlastPDataBase] && [file type $BlastPDataBase]=="link"} { set BlastPDataBase [ReadLink $BlastPDataBase $RepDesBanques] } Espionne $BlastPDataBase while { ! [file exists "$BlastPDataBase"]} { if {[OuiOuNon "You didn't define the BlastP database.\n Do You want to use $BlastPDataBaseDefaut ?"]} { eval exec "ln -sf $BlastPDataBaseDefaut $BlastPDataBase" set BlastPDataBase [ReadLink $BlastPDataBase $RepDesBanques] continue } if {[OuiOuNon "You didn't define the BlastP database.\n You can create your own database in $RepDesBanques\n Do You want to do it now ?"]} { FaireLire "Do it before answering" return [LocaliseBlastPDataBase] } if {[OuiOuNon "Do I exit ?"]} { exit } if {[OuiOuNon "Do I cancel BlastP ?"]} { return "" } } regsub {\.(pal|phr)$} $BlastPDataBase "" BlastPDataBase return $BlastPDataBase } proc LocaliseDansLaListe {Liste Pos} { if {$Pos<0} { return "-1 -1" } set D [lindex $Liste 0] set OldD $D foreach F [lrange $Liste 1 end] { if {$Pos>=$F} { set OldD $D ; set D $F ; continue } return "$D $F" } if {$Pos==$F} {return "$OldD $F"} return "-2 -2" } proc LocaliseLaProteineSurLeGenome {FichierTFA} { global RepertoireDuGenome global FichierSequenceADN set NomDeLaBanque "$RepertoireDuGenome/banques/[PreFixe]" if { ! [file exists "$NomDeLaBanque.nhr"]} { CreeUneBanqueBlast $FichierSequenceADN $NomDeLaBanque } if { ! [regexp "/" $FichierTFA] && [YaPABouTROUouTRNAouARNenDebutDe [file tail $FichierTFA]]} { set FichierTFA "$RepertoireDuGenome/prottfa/$FichierTFA" } set NomDeLaProteine [file tail $FichierTFA] set FichierBlast "[RepertoireDeTravail]/$NomDeLaProteine.tblastn" if { ! [file exists $FichierBlast]} { set CommandeTBlastN "exec blastall -p tblastn -i $FichierTFA -o $FichierBlast -d $NomDeLaBanque -v 500 -K 0 -b 500 -e 10.0 -F F" eval $CommandeTBlastN } set MonReflet [lindex [ChaqueProteineDuTBlastN $FichierBlast "AvecLaSeq"] 0] set MesTraits [split $MonReflet "\t"] set Debut [lindex $MesTraits 9] set Fin [lindex $MesTraits 10] set Subject [lindex $MesTraits 11] set Query [QueLaSequence [ContenuDuFichier $FichierTFA]] if {[string range $Query 1 end] != [string range $Subject 1 end]} { Espionne $NomDeLaProteine Espionne $Query Espionne $Subject return "$Debut $Fin :Erreur:$Query:$Subject" } return "$Debut $Fin" } 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 LocaliseLeProteome {FichierTFAsDuProteome {DernierBon ""}} { global RepertoireDuGenome set FichierBornes "$RepertoireDuGenome/fiches/bornesduproteome" set FichierTmp "[RepertoireDeTravail]/tmp.localise.[PreFixe]" while {[file exists $FichierBornes]} { if {[OuiOuNon "$FichierBornes already exists.\nDo I append to it ?"]} { break } if {[OuiOuNon "Do I accept it ?"]} { return $FichierBornes } if {[OuiOuNon "Do I delete $FichierBornes ?"]} { break } if {[OuiOuNon "Do I cancel Proteome localisation ?"]} { return "" } if {[OuiOuNon "Do I stop ?"]} { exit } } if {$DernierBon == ""} { set AttendLeDernierBon 0 } else { set AttendLeDernierBon 1 } foreach Access [LaSequenceDuTFAs $FichierTFAsDuProteome "LaListeDesAccess"] { if {$AttendLeDernierBon} { set AttendLeDernierBon [regexp $DernierBon $Access] continue } File delete -force "$FichierTmp" File delete -force "$FichierTmp.tblastn" set Query [LaSequenceDuTFAs $FichierTFAsDuProteome $Access] regsub "^>" $Query ">$FichierTmp $FichierTmp " Query set FichierTFA [Sauve $Query dans "$FichierTmp"] set Bornes [LocaliseLaProteineSurLeGenome $FichierTFA] scan $Bornes "%d %d" Debut Fin set Orient "F" if {$Debut>$Fin} { set Orient "R" set W $Debut set Debut $Fin set Fin $W } AppendAuFichier $FichierBornes "$Access $Debut $Fin $Orient" } return $FichierBornes } proc LocaliseLesBornesPourRefSeq {Debut Fin Chromosome Sens PId Genome {Quoi RefSeq}} { Wup "Permet de rendre les Access present pour un debut et une fin sur un chromosome" Wup "Utilisation du chevauchement des Debuts et des Fins de la query et des access sur les chromosomes" Wup "On utilise plusieurs cutoff PId et Pcover qui caracterise chaque HSP" global PosUCSC if {$Quoi=="RefSeq"} { #set File "/genomics/g3/UCSCGenomes/Mus_musculus/database/refSeqAli.txt" #set File "/genomics/g3/UCSCGenomes/Homo_sapiens/database/refSeqAli.txt" set File "[UCSCGenomeDir $Genome]/database/refSeqAli.txt" } elseif {$Quoi=="All"} { set File "[UCSCGenomeDir $Genome]/database/all_mrna.txt" } else { Espionne "Problem with LocaliseLesBornesPourRefSeq no Quoi (RefSeq ou All)" return "" } set LesDFsRetenus "" set LesIDsRetenus "" #Espionne "Test for $Debut $Fin in $Chromosome $Sens $PId" #Partie qui peut etre inclue dans un Interroge ou AskUCSC if {! [info exists PosUCSC] || ! [info exists PosUCSC(EstCharge)]} { set PosUCSC(EstCharge) 1 #1- Recuperation de la liste des access disponibles set ListOfID [AskUCSC $File ListOfID] #Espionne "$ListOfID" foreach ID $ListOfID { set ListOfPosition "" set IdBis "" set Chr "" set D "" set F "" #2- Pour chaque Access on recupere la liste des positions # liste: $ID $SeqFrom $SeqTo $Chr $ChrFrom $ChrTo $Strand #Rq: les positions des annotations en minus strand (-) sont des plus petites au plus grandes # ce sont donc les positions absolues qui sont donnees par UCSC set ListOfPosition [AskUCSC $File ID $ID ListOfPosition] foreach LofP $ListOfPosition { set IdBis "" set Chr "" set D "" set F "" set Strand "" ###$File ID $ID ListOfPosition --> liste $ID $SeqFrom $SeqTo $Chr $ChrFrom $ChrTo $Strand set IdBis [lindex $LofP 0] set Chr [lindex $LofP 3] set D [lindex $LofP 4] set F [lindex $LofP 5] set Strand [lindex $LofP 6] #Espionne "$LofP" #Espionne "$ID | $IdBis - $Strand | $Chr -- $D - $F" #2-1 Pour un chr, debut et fin -- son ID if {! [info exists PosUCSC($Chr,$Strand,$D,$F,ID)]} { set PosUCSC($Chr,$Strand,$D,$F,ID) "" } set PosUCSC($Chr,$Strand,$D,$F,ID) $ID #2-2 Pour un chr et un ID -- ses fins if {! [info exists PosUCSC($Chr,$Strand,$IdBis,LesF)]} { set PosUCSC($Chr,$Strand,$IdBis,LesF) "" } lappend PosUCSC($Chr,$Strand,$IdBis,LesF) $F #2-3 Pour un chr et un debut -- ses IDs if {! [info exists PosUCSC($Chr,$Strand,$D,LesIDs)]} { set PosUCSC($Chr,$Strand,$D,LesIDs) "" } lappend PosUCSC($Chr,$Strand,$D,LesIDs) $IdBis #2-4 Pour un chr et un debut -- ses Fins if {! [info exists PosUCSC($Chr,$Strand,$D,LesF)]} { set PosUCSC($Chr,$Strand,$D,LesF) "" } lappend PosUCSC($Chr,$Strand,$D,LesF) $F #2-5 Pour un chr et une fin -- ses Debuts if {! [info exists PosUCSC($Chr,$Strand,$F,LesD)]} { set PosUCSC($Chr,$Strand,$F,LesD) "" } lappend PosUCSC($Chr,$Strand,$F,LesD) $D #2-6 Pour un chr -- ses Debuts if {! [info exists PosUCSC($Chr,$Strand,LesD)]} { set PosUCSC($Chr,$Strand,LesD) "" } lappend PosUCSC($Chr,$Strand,LesD) $D #2-7 Pour un chr -- ses Fins if {! [info exists PosUCSC($Chr,$Strand,LesF)]} { set PosUCSC($Chr,$Strand,LesF) "" } lappend PosUCSC($Chr,$Strand,LesF) $F #2-8 La liste des chromosomes if {! [info exists PosUCSC(LesChr)]} { set PosUCSC(LesChr) "" } lappend PosUCSC(LesChr) $Chr } } if {! [info exists PosUCSC(LesChr)]} {return ""} set PosUCSC(LesChr) [lsort -unique [set PosUCSC(LesChr)]] #On enleve la redondance dans les debuts et fin identiques #cette information est de toute facon presente dans les autres resultats #set NbGenes "" foreach Chro [set PosUCSC(LesChr)] { if {[info exists PosUCSC($Chro,+,LesD)]} { set PosUCSC($Chro,+,LesD) [lsort -unique [set PosUCSC($Chro,+,LesD)]] #Espionne "Nb Debut: chromo $Chro + = [llength [set PosUCSC($Chro,+,LesD)]]" #lappend NbGenes [llength [set PosUCSC($Chro,+,LesD)]] } if {[info exists PosUCSC($Chro,-,LesD)]} { set PosUCSC($Chro,-,LesD) [lsort -unique [set PosUCSC($Chro,-,LesD)]] #Espionne "Nb Debut: chromo $Chro - = [llength [set PosUCSC($Chro,-,LesD)]]" #lappend NbGenes [llength [set PosUCSC($Chro,-,LesD)]] } if {[info exists PosUCSC($Chro,+,LesF)]} { set PosUCSC($Chro,+,LesF) [lsort -unique [set PosUCSC($Chro,+,LesF)]] #Espionne "Nb Fin: chromo $Chro + = [llength [set PosUCSC($Chro,+,LesF)]]" #lappend NbGenes [llength [set PosUCSC($Chro,+,LesF)]] } if {[info exists PosUCSC($Chro,-,LesF)]} { set PosUCSC($Chro,-,LesF) [lsort -unique [set PosUCSC($Chro,-,LesF)]] #Espionne "Nb Fin: chromo $Chro - = [llength [set PosUCSC($Chro,-,LesF)]]" #lappend NbGenes [llength [set PosUCSC($Chro,-,LesF)]] } } #Espionne "NbGenes: [expr [join $NbGenes "+"]]" } #d et f (debut fin trouves), D et F coordonnees du/des mRNAs dispos # # D d f F #Ok | | | | # ------------------------------------ # d D f F #Ok | | | | # ------------------------------------ # D d F f #Ok | | | | # ------------------------------------ # D F d f #No | | | | # ------------------------------------ set TailleSequence [expr $Fin - $Debut + 1] #4-1 Recuperation des indices de positions avec notre Debut et Fin #################################################################### #4-1-1 On cherche $Fin dans la liste des debuts. On garde tout les debuts positionnes avant $Fin ################################################################################################ set Indice "" set NewIndice "" set ListeDesDebuts "" set OnLeGarde 0 if {! [info exists PosUCSC($Chromosome,$Sens,LesD)]} {return ""} set ListeDesDebuts [set PosUCSC($Chromosome,$Sens,LesD)] #Espionne "$ListeDesDebuts" #Pour tenir compte du fait que l on peut tomber pile sur une position existante set Indice [lsearch -all -exact -integer $ListeDesDebuts $Fin] if {$Indice != "" && [expr $Indice >= 0]} { Espionne "$Fin existe deja ($Indice) dans la liste des debuts" set OnLeGarde 1 } lappend ListeDesDebuts $Fin #Espionne "Avant Liste des debuts [llength $ListeDesDebuts]" set ListeDesDebuts [lsort -integer -increasing -unique $ListeDesDebuts] #Espionne "Apres Liste des debuts [llength $ListeDesDebuts]" #4-1-2 Recherche de l indice de notre $Fin ########################################## set Indice [lsearch -all -exact -integer $ListeDesDebuts $Fin] #Espionne "Indices: $Indice" if {! [expr $Indice >= 0]} {return ""} #Espionne "$ListeDesDebuts" #Pour tenir compte du fait que l on peut tomber pile sur une position existante if {$OnLeGarde} { set NewIndice $Indice } else { #Si Indice = 0 on a -1 mais c ok car on ne le prend pas set NewIndice [expr $Indice - 1] } if {! [expr $NewIndice >= 0]} { #Espionne "Pb $NewIndice calcule < 0" return "" } #4-1-3 On parcourt toutes les positions des debuts (D) et on garde ceux dont la fin est superieur a $Debut ########################################################################################################## set LesDebutsATester [lrange $ListeDesDebuts 0 $NewIndice] set LesDebutsATester [lsort -integer -decreasing $LesDebutsATester] foreach D $LesDebutsATester { set LesFs "" set F "" #Mettre une condition d arret #if {$D > $LimiteInf} {break} set LesFs [set PosUCSC($Chromosome,$Sens,$D,LesF)] foreach F $LesFs { #Espionne "$D $F -- $Debut" if {$F < $Debut} {continue} lappend LesDFsRetenus [list $D $F] } } #Espionne "Liste debuts: $LesDFsRetenus" #4-2-1 On cherche $Debut dans la liste des Fins. On garde toutes les fins positionnees apres $Debut #4-2-1 A partir de la Fin(F) on va garder toutes les fins existantes (f) dont le debut est superieure au D recherche ################################################################################################################ set Indice "" set NewIndice "" set ListeDesFins "" set OnLeGarde 0 set ListeDesFins [set PosUCSC($Chromosome,$Sens,LesF)] #Pour tenir compte du fait que l on peut tomber pile sur une position existante set Indice [lsearch -all -exact -integer $ListeDesFins $Debut] if {$Indice != "" && [expr $Indice >= 0]} { Espionne "$Debut existe deja ($Indice) dans la liste des fins" set OnLeGarde 1 } lappend ListeDesFins $Debut #Espionne "Avant Liste des fins [llength $ListeDesFins]" set ListeDesFins [lsort -integer -increasing -unique $ListeDesFins] #Espionne "Apres Liste des fins [llength $ListeDesFins]" #4-2-2 Recherche de l indice de notre $Debut ############################################ set Indice [lsearch -all -exact -integer $ListeDesFins $Debut] #Espionne "Indices: $Indice" if {! [expr $Indice >= 0]} {return ""} #Espionne "$ListeDesFins" #Pour tenir compte du fait que l on peut tomber pile sur une position existante set TailleListeDesFins [llength $ListeDesFins] if {$OnLeGarde} { set NewIndice $Indice } else { #Si Indice = $TailleListeDesFins on a $TailleListeDesFins+1 mais c ok car on ne le prend pas set NewIndice [expr $Indice + 1] } if {! [expr $NewIndice < $TailleListeDesFins]} { #Espionne "Pb $NewIndice calcule > fin ($TailleListeDesFins)" return "" } #4-2-3 On parcourt toutes les positions des fins (F) et on garde ceux dont le debut est inferieur a $Fin ######################################################################################################## set LesFinsATester [lrange $ListeDesFins $NewIndice end] set LesFinsATester [lsort -integer -increasing $LesFinsATester] foreach F $LesFinsATester { set LesDs "" set D "" #Mettre une condition d arret #if {$F < $LimiteSup} {break} set LesDs [set PosUCSC($Chromosome,$Sens,$F,LesD)] foreach D $LesDs { if {$D > $Fin} {continue} lappend LesDFsRetenus [list $D $F] } } if {$LesDFsRetenus == ""} {return ""} set LesDFsRetenus [lsort -unique $LesDFsRetenus] #Espionne "Liste debuts+fins: $LesDFsRetenus" #5- Selection des ID suscpetibles de contenir notre sequence #5-1 On parcourt toutes les positions et on conserve les bonnes ############################################################### set PCoverCutOff "90.0" set PCoverCutOff "80.0" set PIdCutOff "95.0" foreach DF $LesDFsRetenus { set UnD "" set UnF "" set ID "" set BorneInf "" set BorneSup "" set Cover "" set PCover "" set UnD [lindex $DF 0] set UnF [lindex $DF 1] set ID [set PosUCSC($Chromosome,$Sens,$UnD,$UnF,ID)] #5-2 CutOff1 - Calcul du recouvrement Query / Subject # Ou encore combien de la query est contenue dans le subject if {$Debut < $UnD} {set BorneInf $UnD} else {set BorneInf $Debut} if {$Fin < $UnF} {set BorneSup $Fin} else {set BorneSup $UnF} if {$BorneSup>$BorneInf} { set Cover [expr $BorneSup - $BorneInf + 1] } else { set Cover [expr $BorneInf - $BorneSup + 1] Espionne "Prob inversion" } set Cover [expr abs($Cover)] set PCover [expr 100.0*(($Cover*1.0) / $TailleSequence)] Espionne "Cover $ID: ($BorneSup - $BorneInf) $Cover / $TailleSequence = $PCover % cover | $PId % Id." if {$PCover < $PCoverCutOff} {continue} #5-3 CutOff2 - Utilisation du pourcentage d identite # Ou encore le PId du HSP if {$PId < $PIdCutOff} {continue} lappend LesIDsRetenus $ID } return "$LesIDsRetenus" } proc LocaliseLesBornesPourRefSeqMoi {Debut Fin Chromosome Sens PId Genome {Quoi RefSeq}} { Wup "Permet de rendre les Access present pour un debut et une fin sur un chromosome" Wup "Utilisation du chevauchement des Debuts et des Fins de la query et des access sur les chromosomes" Wup "On utilise plusieurs cutoff PId et Pcover qui caracterise chaque HSP" global PosUCSC if {$Quoi=="RefSeq"} { #set File "/genomics/link/UCSCGenomes/Mus_musculus/database/refSeqAli.txt" #set File "/genomics/link/UCSCGenomes/Homo_sapiens/database/refSeqAli.txt" set File "[UCSCGenomeDir $Genome]/database/refSeqAli.txt" } elseif {$Quoi=="All"} { set File "[UCSCGenomeDir $Genome]/database/all_mrna.txt" } else { Espionne "Problem with LocaliseLesBornesPourRefSeq no Quoi (RefSeq ou All)" return "" } set LesDFsRetenus "" set LesIDsRetenus "" #Espionne "Test for $Debut $Fin in $Chromosome $Sens $PId" #Partie qui peut etre inclue dans un Interroge ou AskUCSC if {! [info exists PosUCSC] || ! [info exists PosUCSC(EstCharge)]} { set PosUCSC(EstCharge) 1 #1- Recuperation de la liste des access disponibles set ListOfID [AskUCSC $File ListOfID] #Espionne "$ListOfID" foreach ID $ListOfID { set ListOfPosition "" set IdBis "" set Chr "" set D "" set F "" #2- Pour chaque Access on recupere la liste des positions # liste: $ID $SeqFrom $SeqTo $Chr $ChrFrom $ChrTo $Strand #Rq: les positions des annotations en minus strand (-) sont des plus petites au plus grandes # ce sont donc les positions absolues qui sont donnees par UCSC set ListOfPosition [AskUCSC $File ID $ID ListOfPosition] foreach LofP $ListOfPosition { set IdBis "" set Chr "" set D "" set F "" set Strand "" ###$File ID $ID ListOfPosition --> liste $ID $SeqFrom $SeqTo $Chr $ChrFrom $ChrTo $Strand set IdBis [lindex $LofP 0] set Chr [lindex $LofP 3] set D [lindex $LofP 4] set F [lindex $LofP 5] set Strand [lindex $LofP 6] #Espionne "$LofP" #Espionne "$ID | $IdBis - $Strand | $Chr -- $D - $F" #2-1 Pour un chr, debut et fin -- son ID if {! [info exists PosUCSC($Chr,$Strand,$D,$F,ID)]} { set PosUCSC($Chr,$Strand,$D,$F,ID) "" } set PosUCSC($Chr,$Strand,$D,$F,ID) $ID #2-2 Pour un chr et un ID -- ses fins if {! [info exists PosUCSC($Chr,$Strand,$IdBis,LesF)]} { set PosUCSC($Chr,$Strand,$IdBis,LesF) "" } lappend PosUCSC($Chr,$Strand,$IdBis,LesF) $F #2-3 Pour un chr et un debut -- ses IDs if {! [info exists PosUCSC($Chr,$Strand,$D,LesIDs)]} { set PosUCSC($Chr,$Strand,$D,LesIDs) "" } lappend PosUCSC($Chr,$Strand,$D,LesIDs) $IdBis #2-4 Pour un chr et un debut -- ses Fins if {! [info exists PosUCSC($Chr,$Strand,$D,LesF)]} { set PosUCSC($Chr,$Strand,$D,LesF) "" } lappend PosUCSC($Chr,$Strand,$D,LesF) $F #2-5 Pour un chr et une fin -- ses Debuts if {! [info exists PosUCSC($Chr,$Strand,$F,LesD)]} { set PosUCSC($Chr,$Strand,$F,LesD) "" } lappend PosUCSC($Chr,$Strand,$F,LesD) $D #2-6 Pour un chr -- ses Debuts if {! [info exists PosUCSC($Chr,$Strand,LesD)]} { set PosUCSC($Chr,$Strand,LesD) "" } lappend PosUCSC($Chr,$Strand,LesD) $D #2-7 Pour un chr -- ses Fins if {! [info exists PosUCSC($Chr,$Strand,LesF)]} { set PosUCSC($Chr,$Strand,LesF) "" } lappend PosUCSC($Chr,$Strand,LesF) $F #2-8 La liste des chromosomes if {! [info exists PosUCSC(LesChr)]} { set PosUCSC(LesChr) "" } lappend PosUCSC(LesChr) $Chr } } if {! [info exists PosUCSC(LesChr)]} {return ""} set PosUCSC(LesChr) [lsort -unique [set PosUCSC(LesChr)]] #On enleve la redondance dans les debuts et fin identiques #cette information est de toute facon presente dans les autres resultats #set NbGenes "" foreach Chro [set PosUCSC(LesChr)] { if {[info exists PosUCSC($Chro,+,LesD)]} { set PosUCSC($Chro,+,LesD) [lsort -unique [set PosUCSC($Chro,+,LesD)]] #Espionne "Nb Debut: chromo $Chro + = [llength [set PosUCSC($Chro,+,LesD)]]" #lappend NbGenes [llength [set PosUCSC($Chro,+,LesD)]] } if {[info exists PosUCSC($Chro,-,LesD)]} { set PosUCSC($Chro,-,LesD) [lsort -unique [set PosUCSC($Chro,-,LesD)]] #Espionne "Nb Debut: chromo $Chro - = [llength [set PosUCSC($Chro,-,LesD)]]" #lappend NbGenes [llength [set PosUCSC($Chro,-,LesD)]] } if {[info exists PosUCSC($Chro,+,LesF)]} { set PosUCSC($Chro,+,LesF) [lsort -unique [set PosUCSC($Chro,+,LesF)]] #Espionne "Nb Fin: chromo $Chro + = [llength [set PosUCSC($Chro,+,LesF)]]" #lappend NbGenes [llength [set PosUCSC($Chro,+,LesF)]] } if {[info exists PosUCSC($Chro,-,LesF)]} { set PosUCSC($Chro,-,LesF) [lsort -unique [set PosUCSC($Chro,-,LesF)]] #Espionne "Nb Fin: chromo $Chro - = [llength [set PosUCSC($Chro,-,LesF)]]" #lappend NbGenes [llength [set PosUCSC($Chro,-,LesF)]] } } #Espionne "NbGenes: [expr [join $NbGenes "+"]]" } #d et f (debut fin trouves), D et F coordonnees du/des mRNAs dispos # # D d f F #Ok | | | | # ------------------------------------ # d D f F #Ok | | | | # ------------------------------------ # D d F f #Ok | | | | # ------------------------------------ # D F d f #No | | | | # ------------------------------------ set TailleSequence [expr $Fin - $Debut + 1] #4-1 Recuperation des indices de positions avec notre Debut et Fin #################################################################### #4-1-1 On cherche $Fin dans la liste des debuts. On garde tout les debuts positionnes avant $Fin ################################################################################################ set Indice "" set NewIndice "" set ListeDesDebuts "" set OnLeGarde 0 if {! [info exists PosUCSC($Chromosome,$Sens,LesD)]} {return ""} set ListeDesDebuts [set PosUCSC($Chromosome,$Sens,LesD)] #Espionne "$ListeDesDebuts" #Pour tenir compte du fait que l on peut tomber pile sur une position existante set Indice [lsearch -all -exact -integer $ListeDesDebuts $Fin] if {$Indice != "" && [expr $Indice >= 0]} { Espionne "$Fin existe deja ($Indice) dans la liste des debuts" set OnLeGarde 1 } lappend ListeDesDebuts $Fin #Espionne "Avant Liste des debuts [llength $ListeDesDebuts]" set ListeDesDebuts [lsort -integer -increasing -unique $ListeDesDebuts] #Espionne "Apres Liste des debuts [llength $ListeDesDebuts]" #4-1-2 Recherche de l indice de notre $Fin ########################################## set Indice [lsearch -all -exact -integer $ListeDesDebuts $Fin] #Espionne "Indices: $Indice" if {! [expr $Indice >= 0]} {return ""} #Espionne "$ListeDesDebuts" #Pour tenir compte du fait que l on peut tomber pile sur une position existante if {$OnLeGarde} { set NewIndice $Indice } else { #Si Indice = 0 on a -1 mais c ok car on ne le prend pas set NewIndice [expr $Indice - 1] } if {! [expr $NewIndice >= 0]} { #Espionne "Pb $NewIndice calcule < 0" return "" } #4-1-3 On parcourt toutes les positions des debuts (D) et on garde ceux dont la fin est superieur a $Debut ########################################################################################################## set LesDebutsATester [lrange $ListeDesDebuts 0 $NewIndice] set LesDebutsATester [lsort -integer -decreasing $LesDebutsATester] foreach D $LesDebutsATester { set LesFs "" set F "" #Mettre une condition d arret #if {$D > $LimiteInf} {break} set LesFs [set PosUCSC($Chromosome,$Sens,$D,LesF)] foreach F $LesFs { #Espionne "$D $F -- $Debut" if {$F < $Debut} {continue} lappend LesDFsRetenus [list $D $F] } } #Espionne "Liste debuts: $LesDFsRetenus" #4-2-1 On cherche $Debut dans la liste des Fins. On garde toutes les fins positionnees apres $Debut #4-2-1 A partir de la Fin(F) on va garder toutes les fins existantes (f) dont le debut est superieure au D recherche ################################################################################################################ set Indice "" set NewIndice "" set ListeDesFins "" set OnLeGarde 0 set ListeDesFins [set PosUCSC($Chromosome,$Sens,LesF)] #Pour tenir compte du fait que l on peut tomber pile sur une position existante set Indice [lsearch -all -exact -integer $ListeDesFins $Debut] if {$Indice != "" && [expr $Indice >= 0]} { Espionne "$Debut existe deja ($Indice) dans la liste des fins" set OnLeGarde 1 } lappend ListeDesFins $Debut #Espionne "Avant Liste des fins [llength $ListeDesFins]" set ListeDesFins [lsort -integer -increasing -unique $ListeDesFins] #Espionne "Apres Liste des fins [llength $ListeDesFins]" #4-2-2 Recherche de l indice de notre $Debut ############################################ set Indice [lsearch -all -exact -integer $ListeDesFins $Debut] #Espionne "Indices: $Indice" if {! [expr $Indice >= 0]} {return ""} #Espionne "$ListeDesFins" #Pour tenir compte du fait que l on peut tomber pile sur une position existante set TailleListeDesFins [llength $ListeDesFins] if {$OnLeGarde} { set NewIndice $Indice } else { #Si Indice = $TailleListeDesFins on a $TailleListeDesFins+1 mais c ok car on ne le prend pas set NewIndice [expr $Indice + 1] } if {! [expr $NewIndice < $TailleListeDesFins]} { #Espionne "Pb $NewIndice calcule > fin ($TailleListeDesFins)" return "" } #4-2-3 On parcourt toutes les positions des fins (F) et on garde ceux dont le debut est inferieur a $Fin ######################################################################################################## set LesFinsATester [lrange $ListeDesFins $NewIndice end] set LesFinsATester [lsort -integer -increasing $LesFinsATester] foreach F $LesFinsATester { set LesDs "" set D "" #Mettre une condition d arret #if {$F < $LimiteSup} {break} set LesDs [set PosUCSC($Chromosome,$Sens,$F,LesD)] foreach D $LesDs { if {$D > $Fin} {continue} lappend LesDFsRetenus [list $D $F] } } if {$LesDFsRetenus == ""} {return ""} set LesDFsRetenus [lsort -unique $LesDFsRetenus] #Espionne "Liste debuts+fins: $LesDFsRetenus" #5- Selection des ID suscpetibles de contenir notre sequence #5-1 On parcourt toutes les positions et on conserve les bonnes ############################################################### set PCoverCutOff "90.0" set PCoverCutOff "80.0" set PIdCutOff "95.0" foreach DF $LesDFsRetenus { set UnD "" set UnF "" set ID "" set BorneInf "" set BorneSup "" set Cover "" set PCover "" set UnD [lindex $DF 0] set UnF [lindex $DF 1] set ID [set PosUCSC($Chromosome,$Sens,$UnD,$UnF,ID)] #Espionne "$DF $ID" #5-2 CutOff1 - Calcul du recouvrement Query / Subject # Ou encore combien de la query est contenue dans le subject if {$Debut < $UnD} {set BorneInf $UnD} else {set BorneInf $Debut} if {$Fin < $UnF} {set BorneSup $Fin} else {set BorneSup $UnF} if {$BorneSup>$BorneInf} { set Cover [expr $BorneSup - $BorneInf + 1] } else { set Cover [expr $BorneInf - $BorneSup + 1] Espionne "Prob inversion" } set Cover [expr abs($Cover)] set PCover [expr 100.0*(($Cover*1.0) / $TailleSequence)] #Espionne "Cover $ID: ($BorneSup - $BorneInf) $Cover / $TailleSequence = $PCover % cover | $PId % Id." if {$PCover < $PCoverCutOff} {continue} #5-3 CutOff2 - Utilisation du pourcentage d identite # Ou encore le PId du HSP if {$PId < $PIdCutOff} {continue} lappend LesIDsRetenus $ID } return "$LesIDsRetenus" } 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 LocaliseLesTfasDuSeqCheck {{Qui ""}} { global LocaliseLesTfasDuSeqCheck if {[info exists LocaliseLesTfasDuSeqCheck($Qui)]} { return $LocaliseLesTfasDuSeqCheck($Qui) } if {[info exists LocaliseLesTfasDuSeqCheck("EstCharge")]} { return "" } set LocaliseLesTfasDuSeqCheck("EstCharge") 1 set RepPossibles "[RepertoireDuGenome]/atelier/*" set LesFichiers [glob -nocomplain "$RepPossibles/*.tfa"] foreach Fichier $LesFichiers { lappend LocaliseLesTfasDuSeqCheck(ListOfFilepathes) $Fichier set Queue [file tail $Fichier] lappend LocaliseLesTfasDuSeqCheck($Queue) $Fichier lappend LocaliseLesTfasDuSeqCheck(ListOfFilenames) $Queue regsub -nocase ".tfa$" $Queue "" Name lappend LocaliseLesTfasDuSeqCheck($Name) $Fichier lappend LocaliseLesTfasDuSeqCheck(ListOfNames) $Name } return [LocaliseLesTfasDuSeqCheck $Qui] } proc LocaliseOuPas {FichierDesPABs FichierSortie} { #FichierDesPABs=fiches/LesPABsSansJumeauxSeqSansCourts set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set Liste ""; set Un 0; set Zero 0 foreach Nom $L { #Espionne $Nom if {![info exists Vu($Nom)]} {set Vu($Nom) 1} else {Espionne $Nom} set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] set Loc 0; set SourceLoc ""; set SourceLoca "" if {$LesLocs!="" && [regexp "HS" $LesLocs]} { set Loc 1 foreach Loca $LesLocs { if {[regexp -nocase "best" [lindex $Loca 20]]} { set SourceLoca [lindex $Loca 21] break } } set SourceLoc $SourceLoca } else { set FichierLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" set LesLocs [InterrogeLocalisation $FichierLoc Nom $Nom] if {$LesLocs!=""} { set Loc 1 set SourceLoc "DD_sequence" } } if {$Loc==1} {incr Un} ; if {$Loc==0} {incr Zero} if {$Loc==1} {lappend Liste "$Nom\t$Loc\t$FichierLoc\t$SourceLoc"} if {$Loc==0} {lappend Liste "$Nom\t$Loc"} } Espionne [llength $Liste] set LTriee [lsort -unique $Liste] #set LTriee [lsort -index 0 $Liste] Espionne [llength $LTriee] Espionne "Nb1: $Un -Nb0: $Zero" SauveLesLignes $LTriee dans $FichierSortie } proc LocalisePsiBlastPDataBase {{Banque ""}} { return [LocaliseBlastPDataBase $Banque] } proc LocaliseSurADN {{Sequence ""} {Quoi ""}} { while {$Sequence==""} { FaireLire "Please enter the dna sequence to search" set Sequence [Entre] if {$Sequence=="" && [OuiOuNon "Do I cancel ?"]} { return "" } } if {$Quoi==""} { set Quoi "FR" } set OLS [expr [string length $Sequence] -1] global ADN TDN RAC if { ! [info exists ADN]} { ChargeADNetTDNetRAC } set I 0 set LesHitsF {} while {[set Indices [string first $Sequence $ADN $I]]>-1} { append Indices " [expr $Indices+$OLS]" scan $Indices "%d %d" D F set I [expr $D+1] lappend LesHitsF "$Indices F" if {$Quoi=="First" || $Quoi=="FFirst"} { break } } if {$Quoi=="F" || $Quoi=="First" || $Quoi=="FFirst"} { return $LesHitsF } set L [string length $RAC] set I 0 set Reverse [NucToReverseAndComplementNuc $Sequence] set LesHitsR {} while {[set Indices [string first $Sequence $RAC $I]]>-1} { append Indices " [expr $Indices+$OLS]" scan $Indices "%d %d" D F set I $F lappend LesHitsR "[expr $L-$F+1] [expr $L-$D+1] R" if {$Quoi=="First" || $Quoi=="RFirst"} { break } } if {$Quoi=="R" || $Quoi=="First" || $Quoi=="RFirst"} { return $LesHitsR } return [concat $LesHitsF $LesHitsR] } proc LocaliseTBlastNDataBase {{NomDeLaBanque ""}} { return [LocaliseBlastNDataBase $NomDeLaBanque "T"] } proc LockMode {l} { global ModeLocke if {! [info exists ModeLocke]} {set ModeLocke 0} set res $ModeLocke set ModeLocke $l return $res } proc LockSequencesOut {} { global SDG SeqsOut if {! [info exists SDG(GrSeqOut)]} {return} foreach s [set SDG(GrSeqOut)] { set SeqsOut($s) 1 } return } proc LoctypeDansRapport {Rapport} { foreach Ligne [LesLignesDuFichier $Rapport] { scan $Ligne "%s %s" type def if {$type=="LocType:"} {return $def} } } proc Locus {Texte FichierTFA} { set Seq "x[QueLaSequenceDuTFA $FichierTFA]" set iStart 1 while {[regexp -indices -start $iStart -nocase -- $Texte $Seq LesIndices]} { Espionne $LesIndices set iStart [lindex $LesIndices 1] } exit } proc Log {{Texte ""} {FichierLog ""} {DoNotMemo ""}} { global FichierLogMemo if {$FichierLog==""} { if {[info exists FichierLogMemo]} { set FichierLog $FichierLogMemo } else { set FichierLog "gscope.log" } } if { ! [regexp {^/} $FichierLog]} { if {[info proc LogDir]==""} { #rR pour pouvoir être indépendatn de gscope_topographe.tcl set FichierLog "~/$FichierLog" } else { set FichierLog "[LogDir]/$FichierLog" } } if { ! [string equal -nocase $DoNotMemo "DoNotMemo"]} { set FichierLogMemo $FichierLog } return [AppendAuFichier $FichierLog $Texte] } proc LogChangesDuringInfoUpdate {aT} { array set Chg $aT if {[llength [array names Chg]] == 0} { return } # ckeck changes for all sequences foreach n $::LNOrdali { if {$n eq ""} {continue} foreach k [lsort [array names Chg "$n,*"]] { lassign [set Chg($k)] old new puts "$k | $old ==> $new " } puts "" } return } proc LogClustering {} { global SDG LNDG AuLog @begin blob AuLog @title New Clustering AuLog @text Alignment : [MacCourant name] set GrMeth [ClusteringDuMac method] AuLog @text Grouping method .........: $GrMeth AuLog @text Number of groups ........: [expr {[llength $LNDG] -1}] foreach g [lrange $LNDG 1 end] { AuLog @text $g : [llength [set SDG($g)]] sequences AuLog @text {*}[set SDG($g)] } AuLog @end return } proc LogDir {} { return "[HomeRipp]/log" } proc LogExpe {Texte} { set FiLogExpe "[HomeRipp]/loghtml/logexpe.log" AppendAuFichier $FiLogExpe $Texte } proc LogInfosClusters {} { global LNDG SDG # log clustering if {[llength $LNDG] > 1} { AuLog @begin blob AuLog @title Alignment Clusterng AuLog @begin teletype foreach g $LNDG { if {$g eq "GroupeToutLeMonde" || $g eq "all" || $g eq "All"} {continue} AuLog @tele $g : [llength [set SDG($g)]] sequences AuLog @tele {*}[set SDG($g)] AuLog "" } AuLog @end AuLog @end } return } proc LogInfosSoTOL {} { global Tx TaxRoot LCompleteId LSelectableId LUserId set Log [list] # input parameters lappend Log "

    SoTOL input parameters :

    " lappend Log "" lappend Log "" lappend Log "" if {$Tx(-addmodel)} { lappend Log "" } elseif {$Tx(-modelsin)} { lappend Log "" } else { lappend Log "" } if {$Tx(-useorgs) eq "all"} { lappend Log "" } else { lappend Log "" } if {[llength $LUserId]} { lappend Log "" } lappend Log "
    Number of taxa IDs:$Tx(-ntaxa)
    Tree root:$TaxRoot $Tx(Name,$TaxRoot)
    Model organisms:Add after selection
    Model organisms:Include into selection
    Model organisms:Treated as normal organisms
    Organisms to use:ALL complete genomes
    Organisms to use:'representative' organism per Species
    Number of user taxa IDs:[llength $LUserId]
    " # database infos lappend Log "

    SoTOL database information :

    " lappend Log "" lappend Log "" lappend Log "" lappend Log "
    Total number of complete genomes:[llength $LCompleteId]
    Number of selectable taxa:[llength $LSelectableId]
    " return [join $Log \n] } proc LogInsUpDelPourExec {Query {Fichier ""}} { global FichierInsUpDelPourExec global LogInsUpDelPourExec set LogInsUpDelPourExec 0 if { ! [info exists LogInsUpDelPourExec] || ! $LogInsUpDelPourExec} { return "" } if {$Query=="CloseFile"} { if {[info exists $FichierInsUpDelPourExec]} { set F $FichierInsUpDelPourExec unset FichierInsUpDelPourExec return $F } return "" } if {$Query=="InFile"} { if {$Fichier==""} { set FichierInsUpDelPourExec "[LogSqlReceptacleDir]/InsUpDelPourExec_[pid]_[Date].sql" } else { set FichierInsUpDelPourExec $Fichier } return $FichierInsUpDelPourExec } if { ! [info exists FichierInsUpDelPourExec]} { set FichierInsUpDelPourExec "[LogSqlReceptacleDir]/InsUpDelPourExec_[pid]_[Date].sql" } if {$Query=="DeleteFile"} { if { ! [info exists FichierInsUpDelPourExec]} { return "" } if {[file exists $FichierInsUpDelPourExec]} { file delete $FichierInsUpDelPourExec } set F $FichierInsUpDelPourExec unset FichierInsUpDelPourExec return $F } if {0 && [regexp -nocase "^ *select" $Query]} { return "" } return [AppendAuFichier $FichierInsUpDelPourExec "$Query ;"] } proc LogL {{Liste ""} {FichierLog ""}} { return [Log [join $Liste "\n"] $FichierLog] } proc LogLesCompositions {} { global LNOrdali LSOrdali TDesCompos AuLog @begin table AuLog @title AminoAcid Composition : set Ln [PlusLongEltDe $LNOrdali] AuLog @begin tabular AuLog @titlecols Protein A C D E F G H I K L M N P Q R S T V W Y AuLog @typecols T R R R R R R R R R R R R R R R R R R R R foreach s $LNOrdali { if {[string trim $s] eq ""} {continue} set ligne "$s" foreach v [set TDesCompos($s,aa)] { #append ligne " [format "%5.2f" $v]" lappend ligne [format %5.2f $v] } AuLog @row {*}$ligne } AuLog @end AuLog @title Physico-chemical Composition : AuLog @begin tabular AuLog @titlecols Protein AILMV PGST FYW KRH DEQN AuLog @typecols T R R R R R foreach s $LNOrdali { if {[string trim $s] eq ""} {continue} set ligne $s foreach v [set TDesCompos($s,pc)] { #append ligne " [format "%5.2f" $v]" lappend ligne [format %5.2f $v] } AuLog @row {*}$ligne } AuLog @end AuLog @end return } proc LogPCI {{what ""}} { global LTPCI ListePDB LNDG SDG if {$what eq "global"} { set LdesG "GroupeToutLeMonde" } else { set LdesG [lrange $LNDG 1 end] } set t [list] foreach {k v} $LTPCI { lappend t $k } set lg [PlusLongEltDe $t] incr lg array set tmp $LTPCI AuLog @begin blob AuLog @title Summary of Pairwise Sequences Identites set txt [list] foreach g $LdesG { set Ln [set SDG($g)] if {$g eq "GroupeToutLeMonde"} { AuLog @subtitle All sequences } else { AuLog @subtitle $g } AuLog @begin teletype # Moyenne generale, std dev. # min et max set min 999. ; set max -999. set pmn "" ; set pmx "" set m 0.0 ; set m2 0.0 set i 1 ; set npairs 0 foreach n1 [lrange $Ln 0 end-1] { foreach n2 [lrange $Ln $i end] { lassign [set tmp($n1,$n2)] pc l1 l2 l1sl2 set pc [expr {100.*$pc}] lappend txt [format %${lg}s " $n1-$n2"] [format %6.1f $pc] set m [expr {$m + $pc}] set m2 [expr {$m2 + $pc*$pc}] incr npairs if {$pc > $max} { set max $pc set pmx "[format %${lg}s $n1-$n2] [format %6.1f $max]" } if {$pc < $min} { set min $pc set pmn "[format %${lg}s $n1-$n2] [format %6.1f $min]" } } incr i } if {$npairs != 0} { set m [expr {$m/$npairs}] set s [expr {sqrt($m2/$npairs - $m*$m)}] } else { set m 0.0 set s 0.0 } AuLog @tele Mean Identity ............: [format %6.1f $m] AuLog @tele Standard deviation .......: [format %6.1f $s] AuLog @tele minimum pair identity ....: $pmn AuLog @tele maximum pair identity ....: $pmx AuLog @tele "" for {set i 0} {$i < [llength $txt]} {incr i 10} { AuLog @tele {*}[lrange $txt $i $i+9] } AuLog @end } AuLog @end return } proc LogSeqInfoGlobales {} { global LNOrdali LSOrdali LongueurTotale NombreDeSequences ListePDB ListeDesFragments AlnScore TDesAccess TDespI TDesMolW AuLog @begin blob AuLog @title General Information : AuLog @begin teletype if {! [info exists AlnScore]} { set AlnScore 0.0 } AuLog @tele Alignment score .........: $AlnScore AuLog @tele Alignment length ........: $LongueurTotale AuLog @tele Number of sequences .....: $NombreDeSequences AuLog @tele Number of PDB sequences .: [llength $ListePDB] AuLog @tele Number of fragments .....: [llength $ListeDesFragments] AuLog @end AuLog @end set pl [PlusLongEltDe $LNOrdali] AuLog @begin table AuLog @title Global information on proteins set lmin 9999999. ; set lmax -99999. foreach n $LNOrdali s $LSOrdali { if {[string trim $n] eq ""} {continue} set s [string map [list "." "" "Z" ""] $s] set l [string length $s] if {$l > $lmax} { set lmax $l set nmax $n set amax [set TDesAccess($n)] } if {$l < $lmin} { set lmin $l set nmin $n set amin [set TDesAccess($n)] } } AuLog @subtitle Length min : $lmin $nmin $amin AuLog @subtitle Lenght max : $lmax $nmax $amax AuLog @begin tabular AuLog @titlecols {Seq. Name} Accession Length MOlW pI AuLog @typecols T T I R R set fmt "|%${pl}s|%${pl}s|%6d|%10.2f|%6.3f|" foreach n $LNOrdali s $LSOrdali { if {[string trim $n] eq ""} {continue} set ac [set TDesAccess($n)] set s [string map [list "." "" "Z" ""] $s] set l [string length $s] AuLog @row $n $ac $l [format %.3f [set TDesMolW($n)]] [format %6.3f [set TDespI($n)]] } AuLog @end if {[llength $ListeDesFragments]} { AuLog @begin blob AuLog @title List of Fragments : AuLog @list $ListeDesFragments AuLog @end } AuLog @end return } proc LogSeqlab {clu seq aas} { if {! $clu && ! $seq && ! $aas} { return } AuLog @begin blob AuLog @title Editor Log if {$clu} { AuLog @text clustering has changed } if {$seq} { AuLog @text insertions/deletions have been edited } if {$aas} { AuLog @text aa sequences have been changed } AuLog @end return } proc LogSqlReceptacleDir {} { return "/usr/local/apache/logs/LogSqlReceptacle" } proc LogSup {chan} { global Log if {[gets $chan line] >= 0} { lappend Log $line } return } proc LogWget {} { #garde que les lignes interressantes du fichier .log #AVANT set Fichier "/titan/data/string/9.05/mirroritems.log" set Fichier "/tempor/string/mirrorevidence.log" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {^ *0K} $Ligne]} {Espionne "$Ligne"; continue} if {[regexp {^ *[0-9]+K} $Ligne]} {continue} Espionne "$Ligne" } } proc LogWscope {Texte} { return [Log $Texte "gscopehtmlserver.log" "DoNotMemo"] } proc LogWscopeL {Liste} { return [LogWscope [join $Liste "\n"]] } proc Logg {args} { return #rR ne pas utiliser car les droits sont pas bons !!!!!!!!!!!!!!!!!!!!!!!!! set l [open "/home/ripp/log/logg.log" "a"] puts $l [join $args " "] close $l return $args } proc Login {} { global env set Login $env(LOGNAME) return $Login } proc LoginConnexion {login password} { set fileUsers "/groupes/poch/ripp/wwwLinux/puzz/password" #set fileProjectD "/groupes/poch/ripp/wwwLinux/puzz/DroitProjetUsers" foreach Ligne [LesLignesDuFichier $fileUsers] { set LP [split $Ligne ":"] set LoginPass([lindex $LP 0]) [lindex $LP 1] } if {[info exists LoginPass($login)]} { if {$LoginPass($login)==$password} { Espionne "OK" return 0 } else { Espionne "password pas bon" return 1 } } else { Espionne "login pas bon" } } proc LoginServer {imapID username password} { # Beware ! ::imap4::login return 0 if successfull !! if {[::imap4::login $imapID $username $password]} { puts "Beware !\nI can't connect to the server using the following username and password :\n$username\n$password" FaireLire return 0 } else { return 1 } } proc LogoCADO4MI {} { Wup "Un petit logo pour faire joli ..." global LogoAffiche if {[info exists LogoAffiche] && $LogoAffiche=="1"} {return ""} #AjouteAuLog "\n" #AjouteAuLog "\t __ _ _____ " #AjouteAuLog "\t ____ / /(_)/ ___/____ " #AjouteAuLog "\t / __ \\/ // // / __/ __ \\ " #AjouteAuLog "\t / /_/ / // // /_/ / /_/ / " #AjouteAuLog "\t \\____/_//_/ \\____/\\____/ " #AjouteAuLog "\t ___________________ " #AjouteAuLog "\t _____ ___ __ ___/_______ _(_)____/ ____ " #AjouteAuLog "\t / __// _ \\/ / / _ \\/ ___// // // __ \\/ __ \\ " #AjouteAuLog "\t (__ )/ __/ /__/ __/ /__ / // // /_/ / / / / " #AjouteAuLog "\t /____/ \\___/____/\\___/\\___//__//_/ \\____/_/ /_/ " #AjouteAuLog "\t _____ ____ " #AjouteAuLog "\t /__ / / _ \\ " #AjouteAuLog "\t / / / / / / " #AjouteAuLog "\t __/ /_ / /_/ / " #AjouteAuLog "\t /____(_)\\____/ " #AjouteAuLog "\t " #AjouteAuLog "\n" AjouteAuLog "\n" AjouteAuLog "\t ___ ___ ____ ___ " AjouteAuLog "\t / __| / \\ | _\\ / _\\ " AjouteAuLog "\t | / | ^ || |\\ | /\\ | " AjouteAuLog "\t |\\__ | _ || |_/ | \_/ | " AjouteAuLog "\t \\___||_| |_||____/\\___/ " AjouteAuLog "\t _ " AjouteAuLog "\t | | _ " AjouteAuLog "\t | |_| |_ " AjouteAuLog "\t |___ _| " AjouteAuLog "\t | | " AjouteAuLog "\t |_| _ " AjouteAuLog "\t _ _ |_| " AjouteAuLog "\t |\\ / | _ " AjouteAuLog "\t | \\_/ | | | " AjouteAuLog "\t | ___ | | | " AjouteAuLog "\t | | | | | | " AjouteAuLog "\t |_| |_| |_/ " AjouteAuLog "\t " AjouteAuLog "\t " AjouteAuLog "\t _____ ____ " AjouteAuLog "\t /__ / / _ \\ " AjouteAuLog "\t / / / / / / " AjouteAuLog "\t __/ /_ / /_/ / " AjouteAuLog "\t /____(_)\\____/ " AjouteAuLog "\t " AjouteAuLog "\n" Espionne "\n" Espionne "\t ___ ___ ____ ___ " Espionne "\t / __| / \\ | _\\ / _\\ " Espionne "\t | / | ^ || |\\ | /\\ | " Espionne "\t |\\__ | _ || |_/ | \_/ | " Espionne "\t \\___||_| |_||____/\\___/ " Espionne "\t _ " Espionne "\t | | _ " Espionne "\t | |_| |_ " Espionne "\t |___ _| " Espionne "\t | | " Espionne "\t |_| _ " Espionne "\t _ _ |_| " Espionne "\t | \\ / | _ " Espionne "\t | \\_/ | | | " Espionne "\t | \\_/| | | | " Espionne "\t | | | | | | " Espionne "\t |_| |_| |_/ " Espionne "\t " Espionne "\t " Espionne "\t _____ ____ " Espionne "\t /__ / / _ \\ " Espionne "\t / / / / / / " Espionne "\t __/ /_ / /_/ / " Espionne "\t /____(_)\\____/ " Espionne "\t " Espionne "\n" set LogoAffiche 1 return "" } proc LoinToujours {PN {Action ""}} { Wup "On peut vouloir prendre toutes les sequences lointaines" Wup "LoinToujours 0.001 Set en fixe le seuil" Wup "LoinToujours bidon NotUsed on repondra systematique non" Wup "LoinToujours bidon Reset on annule tout pour le prochain usage" Wup "LoinTours PN repond PN>SeuilExpect" if {[OnTraiteMS2PH]} { return 0 } global LoinToujours if {$PN=="Reset" || $PN=="NotUsed"} { set Action $PN } if {$Action=="Reset"} { if {[info exists LoinToujours]} { unset LoinToujours } return 0 } if {$Action=="NotUsed"} { set LoinToujours(UseIt) 0 return 0 } if {$Action=="Set"} { if {[info exists LoinToujours]} { unset LoinToujours } set LoinToujours(UseIt) 1 set LoinToujours(SeuilExpect) $PN return 1 } if { ! [info exists LoinToujours(SeuilExpect)]} { set LoinToujours(SeuilExpect) 0.001 } if { ! [info exists LoinToujours(UseIt)]} { set LoinToujours(UseIt) [OuiOuNon "Do I take all sequences, even with expect > $LoinToujours(SeuilExpect)" 0] } if {$LoinToujours(UseIt)} { return [expr $PN>$LoinToujours(SeuilExpect)] } return 0 } proc LoinToujoursTest {} { puts [LoinToujours 0.1] puts [LoinToujours 0.0001] puts [LoinToujours 0.01 Set] puts [LoinToujours 0.1] puts [LoinToujours 0.00001] puts [LoinToujours Reset] puts [LoinToujours 0.1] puts [LoinToujours NotUsed] puts [LoinToujours 0.0001] puts [LoinToujours 0.01 Set] puts [LoinToujours 0.1] puts [LoinToujours 0.00001] puts [LoinToujours Reset] puts [LoinToujours 0.1] puts [LoinToujours 0.00001] } proc Long {A B I J} { if {$I==0 ||$J==0} { return 0 } set X [string index $A $I] set Y [string index $B $J] if {$X==$Y} { set R 1 } else { set R 0 } set M [Maxi [expr [Long $A $B [expr $I-1] [expr $J-1]]+$R] [Maxi [Long $A $B [expr $I-1] $J] [Long $A $B $I [expr $J-1]]] ] return $M } proc LongInfoSeq {n} { global Sequences TDesOrganismes TDesDescriptifs TDesBId set Org "Unknown" set Des "None" set Bid [set TDesBId($n)] if {[info exists TDesOrganismes($n)]} { set Org [set TDesOrganismes($n)] } if {[info exists TDesDescriptifs($n)]} { set Des [set TDesDescriptifs($n)] } set Len [set Sequences($n)] regsub -all {\.} $Len "" Len set Len [string length $Len] set D 0 set nl -1 while {$D < [string length $Des]} { incr nl set F [expr {$D+29}] set ib [string wordstart [string range $Des $D $F] $F] if {$ib <= 0} { set Ic 30 } else { set Ic $ib set F [expr {$D+$ib-1}] } set L [string range $Des $D $F] incr D $Ic set TDes($nl) $L } set rep "Acc ...: $n\n" append rep "BId ...: $Bid\n" append rep "Org ...: $Org\n" foreach l [lsort -integer [array names TDes]] { if {$l == 0} { set pref "Des ...:" } else { set pref " :" } append rep "$pref [set TDes($l)]\n" } append rep "Len ...: $Len\n" return $rep } proc LongueurADN {{Orga ""}} { Wup "Returns the length in bases of orga's genome" global LongueurADNDesOrganismes global ADN TDN RAC if {$Orga==""} { if {[info exists LongueurADNDesOrganismes("NotreOS")]} { return [set LongueurADNDesOrganismes("NotreOS")] } if { ! [info exists ADN]} { ChargeADNetTDNetRAC } set LongueurADNDesOrganismes("NotreOS") [expr [string length $ADN]-1] return [set LongueurADNDesOrganismes("NotreOS")] } if {[info exists LongueurADNDesOrganismes($Orga)]} { return [set LongueurADNDesOrganismes($Orga)] } if {[info exists LongueurADNDesOrganismes("SontCharges")]} { return -1 } ChargeLesPositionsDesOrthologues return [LongueurADN $Orga] } proc LongueurAlignement {{quoi ""}} { if {$quoi eq "seqlab"} { set l [string length [$::NomTextSeq output 0]] } else { set Lseq [split [$::NomTextSeq get 1.0 end] \n] set lmax 1 foreach s $Lseq { set l [string length $s] if {$l > $lmax} {break} } } return $l } proc LongueurDeLAlignement {{quoi ""}} { global Sequences LongueurTotale if {$quoi eq "seqlab"} { set lg [string length [$::NomTextSeq output 0]] } else { set Ll [list] foreach n [array names Sequences] { lappend Ll [string length [set Sequences($n)]] } set Ll [lsort -unique -integer $Ll] if {[lindex $Ll 0] == 0} {set Ll [lreplace $Ll 0 0]} if {[llength $Ll] == 1} { set lg [lindex $Ll 0] } else { set lg [DonneMemeLongueur Sequences] } } set LongueurTotale $lg return $lg } proc LongueurDeLaSequence {Nom {Rep ""}} { if {$Rep==""} { set Rep "nuctfa" } set Fic "[RepertoireDuGenome]/$Rep/$Nom" if {[FileAbsent $Fic]} {return -1} set Seq [QueLaSequenceDuFichierTFA $Fic] set L [string length $Seq] return $L } proc LongueurDeMaSequenceDuTfasdescopains {File sequence} { set testProt "Q9XUL9" set maseq "no" #tfasdescopains set mes_lignes [LesLignesDuFichier [RepertoireDuGenome]/NewTfasDesCopains/$File] foreach ligne $mes_lignes { if {[regexp {^>} $ligne]} { set name [lindex [split $ligne " "] 1] if {$sequence==$name} {set maseq "OK"} } else { if {$maseq=="OK"} { #Espionne "taille de $maseq: [string length $ligne]" return [string length $ligne] #set longueur [string length $ligne] #break } } } } proc LongueurDesSeq {Box} { set i -1 set Cluster [ExtraitInfo $Box "Cluster"] set FileTfa "[RepertoireDuGenome]/FichiersInitial/SOURIS_Tfactor/$Cluster.fa" if {![file exists $FileTfa]} {set FileTfa "[RepertoireDuGenome]/FichiersInitial/SOURIS_others/$Cluster.fa"} if {![file exists $FileTfa]} {set FileTfa "[RepertoireDuGenome]/FichiersInitial/RAT_Tfactor/$Cluster.fa"} if {![file exists $FileTfa]} {set FileTfa "[RepertoireDuGenome]/FichiersInitial/RAT_others/$Cluster.fa"} if {![file exists $FileTfa]} {Espionne "$Box warning"} set LesSeq [QueLaSequenceDuFichierTFA $FileTfa ListOfTxt] foreach Ligne [LesLignesDuFichier $FileTfa] { if {[regexp "^\>" $Ligne]} { incr i scan $Ligne "%s" name regsub "\>" $name "" name set Seq [lindex $LesSeq $i] set nb [CompteLesLettres Seq $Seq] lappend LesLignes "$name $nb" } } return $LesLignes } proc LongueurMac {{m 0}} { if {! $m} {set m [MacCourant]} return [$::db eval {select max(length(sa.seq)) from seqali as sa, ln_mac_seqali as lms where lms.pk_mac=$m and lms.pk_seqali=sa.pk_seqali}] } proc LongueurMoyDescDNAsDD {} { set S 0; set n 0; set Lmini 10000; set Lmaxi 0 foreach DD [ListeDesPABs] { set FichierTFA "[RepertoireDuGenome]/nuctfa/$DD" set SeqTFA [QueLaSequenceDuFichierTFA $FichierTFA] set L [string length $SeqTFA] incr n set S [expr $L+ $S] if {$L<$Lmini} {set Lmini $L} if {$L>$Lmaxi} {set Lmaxi $L} } Espionne "lmin: $Lmini - lmax: $Lmaxi" return "longueur moy: [expr $S/$n]" } proc LongueurMoyenne {} { Wup "Average length of the orfs." global ListeDeBoites if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } set Mi 9999999 set Ma -999999 set CumulLong 0 set n 0 foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] if { ! [EstUnPAB $Nom] } { continue } set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] set Long [expr $Fin-$Debut+1] set Mi [Mini $Long $Mi] set Ma [Maxi $Long $Ma] incr CumulLong $Long incr n } set PourcentageCodant [format "%5.2f" [expr 100.*$CumulLong/[LongueurADN]]] puts "$n ORFs mini [expr $Mi/3] maxi [expr $Ma/3] moyenne [expr $CumulLong/(3*$n)] $PourcentageCodant" } proc LongueurPourTous {Rep} { if {![file exists "[RepertoireDuGenome]/$Rep"]} {return} foreach Fichier [glob "[RepertoireDuGenome]/$Rep/*"] { set Nom [file tail $Fichier] set L [string length [QueLaSequenceDuTFA $Fichier]] append Longueurs "$Nom\t$L\n" } return $Longueurs } proc LongueurSeqTfa {FichierTfa} { return [string length [QueLaSequenceDuTFA $FichierTfa]] } proc LookupCouleursVMD {} { global Couleurs global Lookup_Couleurs global Lookup_ColVMD global CanalV global Defauts set Lc "[CouleurOrdali2O [set Defauts(CoulVariable)]]" foreach c [array names Couleurs] { if {$c eq "Stock"} {continue} if {[regexp {^CoulG} $c]} {continue} set le [set Couleurs($c)] foreach e $le { set e [CouleurOrdali2O $e] lappend Lc "$e" } } set le [split [set Couleurs(Stock)]] foreach e $le { lappend Lc "$e" } set Lc [lunique $Lc] set i 0 if {[llength $Lc] > 32} {set fin 32} {set fin end} foreach c [lrange $Lc 0 $fin] { lassign [set Lookup_Couleurs($c)] r g b set r [expr {$r/255.}] set g [expr {$g/255.}] set b [expr {$b/255.}] VMDsend "NouvelleCouleur $i $c $r $g $b" set Lookup_ColVMD($c) $i set Lookup_ColVMD($i) $c incr i } VMDsend "color Display Background [set Lookup_ColVMD(black)]" return } proc LookupCouleursVMDbon {} { global Couleurs global Lookup_Couleurs global Lookup_ColVMD global CanalV set i 100 foreach c [array names Lookup_Couleurs] { puts "$c" lassign [set Lookup_Couleurs($c)] r g b set r [expr {$r/255.}] set g [expr {$g/255.}] set b [expr {$b/255.}] VMDsend "NouvelleCouleur $i $c $r $g $b" set Lookup_ColVMD($c) $i set Lookup_ColVMD($i) $c incr i } return } proc Looping {n} { global iter set nf [Next $n] if {$iter < 1000} { Looping $nf } exit } proc Lower {K tagorid} { Wup "Met en arriere plan le widget marque par tagorid" $K lower $tagorid return "" } proc LowerLesAverageDeLOligo {K} { Wup "Met en arriere plan les averages des graphes" set LesGraphes [LesGraphesDeLOligo $K] foreach Graph $LesGraphes { Lower $K "Average${Graph}" } return "" } proc LucIMAPToTcl {items} { set quote 0 set str "" foreach c [split $items ""] { if {$c eq "\""} { if {$quote} { set quote 0 } else { set quote 1 } append str $c continue } if {$quote} { append str $c } else { set x $c switch -- $c { "\{" {set x "\\\{"} "\}" {set x "\\\}"} {(} {set x "\{"} {)} {set x "\}"} } append str $x } } set str [string map {"\[" "\\\[" "\]" "\\\]"} $str] return $str } proc Luc_bgerror {err} { global errorInfo set old_errorInfo $errorInfo #package require smtp #package require mime if {[info exists ::env(USER)]} { set user $::env(USER) } else { set user "unknown" } set msg "[DonneDateEtHeure] File : $::Defauts(Fichier[TypeAli]) $::errorInfo " catch {send_simple_message luc.moulinier@unistra.fr localhost "\[Bug-Ordalie\] $user: $err" $msg} set errorInfo $old_errorInfo Old_bgerror $err return } proc MAFFT {FichierTFAs {FichierMAFFT ""}} { if {$FichierMAFFT==""} { regsub {\.tfa(|s)$} $FichierTFAs "" FichierMAFFT append FichierMAFFT ".mafft" } set VraiFichierTFAs $FichierTFAs if { ! [regexp "^/" $FichierTFAs]} { set VraiFichierTFAs "[pwd]/$FichierTFAs" } set VraiFichierMAFFT $FichierMAFFT if { ! [regexp "^/" $FichierMAFFT]} { set VraiFichierMAFFT "[pwd]/$FichierMAFFT" } NousAllonsAuBoulot set RepDessus [pwd] set RepMAFFT "[TmpFile MAFFT .]" file mkdir $RepMAFFT cd $RepMAFFT set Racine [file tail $VraiFichierTFAs] file copy $VraiFichierTFAs $Racine.in set OK 1 while 1 { if {[catch { exec /biolo/mafft/bin/sextet5 < $Racine.in >& /dev/null } Message]} { FaireLire "MAFFT failed running 'sextet5' with message \n$Message" set OK 0 break } if {[catch { exec /biolo/mafft/bin/tbfast -FAx < $Racine.in >& /dev/null } Message]} { FaireLire "MAFFT failed running 'tbfast -FAx ...' with message \n$Message" set OK 0 break } if {[catch { exec /biolo/mafft/bin/tbfast -JFAx < pre > $Racine.out 2> $Racine.log } Message]} { FaireLire "MAFFT failed running 'tbfast -JFAx ...' with message \n$Message" set OK 0 break } break } if { $OK } { if {[file exists $Racine.out]} { file rename -force $Racine.out $VraiFichierMAFFT } cd $RepDessus foreach F [glob -nocomplain $RepMAFFT/*] { file delete -force $F } file delete $RepMAFFT } OnRevientDuBoulot if { ! $OK } { return "" } return [ConvertToMsf $FichierMAFFT $FichierMAFFT] } proc MAFFTLaetiStar {FichierTfa} { # ATTENTION : Avant faire "setenv MAFFT_BINARIES /home/perrodou/mafft_star/binaries/" set FichierMAFFT "/genomics/link/EVImm/prpf31/riken/prpMafft" set FichierMsf "/genomics/link/EVImm/prpf31/riken/prpMsf" set Commande "/home/perrodou/mafft_star/scripts/mafft" catch {eval exec $Commande $FichierTfa > $FichierMAFFT} CreeLeMSFduTFAs $FichierMAFFT $FichierMsf } proc MAFFTManuStar {Nom RepertoireDesTFAs RepertoireDeSortie} { # ATTENTION : Avant faire "setenv MAFFT_BINARIES /home/perrodou/mafft_star/binaries/" if {$RepertoireDeSortie == ""} { set RepertoireDeSortie "[RepertoireDuGenome]/msfmafft" } set FichierEntree "[RepertoireDuGenome]/$RepertoireDesTFAs/$Nom" set RepertoireSortie "[RepertoireDuGenome]/$RepertoireDeSortie" set FichierSortie "[RepertoireDuGenome]/$RepertoireDeSortie/$Nom.mafft" if {! [file exists $FichierSortie]} {file mkdir $RepertoireSortie} Espionne "$FichierEntree $FichierSortie" set Commande "/home/perrodou/mafft_star/scripts/mafft --maxiterate 3" catch {eval exec $Commande $FichierEntree > $FichierSortie} set FichierSortieMsf "[RepertoireDuGenome]/$RepertoireDeSortie/$Nom" set FichierMAFFT "[RepertoireDuGenome]/$RepertoireDeSortie/$Nom.mafft" CreeLeMSFduTFAs $FichierMAFFT $FichierSortieMsf file delete -force $FichierMAFFT } proc MAFFTPourTous {{RepTFAs ""} {RepMAFFT ""} {Keep ""}} { if {$Keep=="OverWrite"} { set Keep 0 } if {$Keep=="Keep"} { set Keep 1 } if {$Keep==""} { set Keep [OuiOuNon "Do I keep existing files ?"] } if {$RepTFAs==""} { set RepTFAs "[RepertoireDuGenome]/tfaspourmafft" } if {$RepMAFFT==""} { set RepMAFFT "[RepertoireDuGenome]/mafft" } if { ! [file exists $RepMAFFT]} { file mkdir $RepMAFFT } foreach Nom [ListeDesPABs] { set FichierTFAs "$RepTFAs/$Nom" if { ! [file exists $FichierTFAs]} { continue } set FichierMAFFT "$RepMAFFT/$Nom" if {$Keep && [file exists $FichierMAFFT]} { continue } set Retour [MAFFT $FichierTFAs $FichierMAFFT] Espionne "I run MAFFT on $Nom and got >$Retour<" } } proc MAJProtMS2PH {} { # Procedure de mise a jour des proteines de MS2PH-db # Utilisation GeneCards (GC), Human Gene Mutation Database (HGMD) et Human Genome Database (GDB) # on croise d abord GC et HGMD # les donnees sont completees en croisant GDB et HGMD # les anciennes donnees sont deplacees dans un repertoire contenant la date # De sorte que le repertoire AJour contient toujours les dernieres donnees # MS2PH.tfa contient ces sequences dans l'ordre, au format fasta global RepAJour set chemin "/home/friedric/MS2PH/MS2PH-db/ListeProt/" set date [eval exec date -u +%d%m%y] set RepOld [file join $chemin "Old$date"] set RepAJour [file join $chemin "AJour"] set ficTFA [file join $RepAJour "MS2PH.tfa"] catch {eval exec mkdir $RepOld} catch {eval exec cp $ficTFA $RepOld} # lancement des MAJ des listes issues de GC et GDB de maniere independante # MAJ des donnes issues de GC set listeGC [MAJProtMS2PHGC] # MAJ des donnees issues de GDB set listeGDB [MAJProtMS2PHGDB] # creation de la liste qui va contenir toutes ces donnees (concatenation des 2 listes) set listeGlobale [concat $listeGC $listeGDB] puts "lg listeGlobale [llength $listeGlobale]" # on recupere la liste des access deja presents dans MS2PH-db set lAccess "" # on cree la liste des access et synonymes deja presents dans MS2PH-db set listAccessSyn "" set LesLignes [LesLignesDuFichier $ficTFA] if {$LesLignes != ""} { foreach l $LesLignes { if {[string first ">" $l] == 0} { lappend lAccess [string range $l 1 6] } } puts "long liste Acc : [llength $lAccess]" # on recupere tous les Access synonyme par BIRD # requete simple : on donne 1 access, on recupere tous les access associes set test [RecupAccSeqParBird $lAccess 0] # si la requete dans BIRD s est bien deroulee if {$test == 1} { set ficOutTar "bird.tar.gz" set ficOut "listeResu" if {[file exists $ficOutTar]} { # le fichier de resultat est dezippe - detare eval exec tar -xzf $ficOutTar if {[file exists ${ficOut}.sw]} { # on recupere les ligne du fichier qui nous interesse set lignes [LesLignesDuFichier ${ficOut}.sw] foreach l $lignes { # on recupere tous les Access presents dans le fichier de resultats # Attention : les Access peuvent se situer sur plus d une ligne # on complete la liste des synonymes listAccessSyn if {[string first "AC" $l] == 0} { set l [string range $l 5 end] foreach e $l { # nettoyage des Access set e [string trim $e "\["] set e [string trim $e "\]"] set e [string trim $e ";"] lappend listAccessSyn [string range $e 0 5] } } } } } } } puts "long liste Acc syn : [llength $listAccessSyn]" # mise en evidence des sequences proteiques supplementaires # a partir des listes generees en se basant sur GC et la GDB # chaque element de chacune des listes est comparee a la liste des access et synonymes # si l access n est pas present dans cette liste # il est d une part ajoute a la liste des sequences a ajouter lseqToAdd # et la liste des synonyme est completee par son access et ses synonymes set lseqToAdd "" foreach e $listeGlobale { if {[lsearch -regexp $listAccessSyn $e] == -1} { lappend lseqToAdd $e # interrogation de BIRD pour recuperer les synonymes set test [RecupAccSeqParBird $e 0] if {$test == 1} { set ficOutTar "bird.tar.gz" set ficOut "listeResu" if {[file exists $ficOutTar]} { eval exec tar -xzf $ficOutTar if {[file exists ${ficOut}.sw]} { set lignes [LesLignesDuFichier ${ficOut}.sw] set i 0 # il peut y avoir plusieurs lignes contenant des Access # dc "tant que la ligne commence par AC" on recupere des synonymes while {[string first "AC" [lindex $lignes $i]] == 0} { # recuperation de la partie de la ligne qui contient la liste des Access set l [string range [lindex $lignes 0] 5 end] foreach syn $l { # ajout de l Access et ses synonymes (nettoyes) a la liste set syn [string trim $syn "\["] set syn [string trim $syn "\]"] set syn [string trim $syn ";"] lappend listAccessSyn $syn } incr i } } } } } } puts "lg listeSeqToAdd [llength $lseqToAdd]" EspionneL $lseqToAdd # Mise a jour du fichier des sequences au format tfa set LesTFAs [CreeTFASelonAccess $lseqToAdd] if {$LesTFAs != ""} { # le fichier MS2PH.tfa est complete avec les nouvelles sequences set f1 [open $ficTFA a+] foreach li $LesTFAs { puts $f1 $li } close $f1 } return 1 } proc MAJProtMS2PHGC {} { # MAJ des donnees issues de GC, croisees avec les donnees de HGMD # DiseaseGenesFromGC contient la liste des genes "that cause, predispose or protect from diseases" selon GC # recapGene contient les listes des genes GC associes aux ID Uniprot et aux genes HGMD # listeProtGC contient la liste des access Uniprot OK pour integrer MS2PH-db # retourne la liste des access Uniprot OK pour integrer MS2PH-db global RepAJourGC set chemin "/home/friedric/MS2PH/MS2PH-db/ListeProt/GeneCards/" set date [eval exec date -u +%d%m%y] set RepOld [file join $chemin "Old$date"] set RepAJourGC [file join $chemin "AJour"] set ficDisGene [file join $RepAJourGC "DiseaseGenesFromGC"] set ficLProtGC [file join $RepAJourGC "listeProtGC"] set ficRecapGene [file join $RepAJourGC "recapGene"] # cree RepOld et y copie les anciennes donnees catch {eval exec mkdir $RepOld} catch {eval exec cp $ficDisGene $ficLProtGC $ficRecapGene $RepOld} # site web GeneCards - page de la liste des "Disease Genes" set url1 "http://www.genecards.org/cgi-bin/listdiseasecards.pl?type=full" set Leslignes {} # copie des lignes de l url set x [HttpCopy $url1 LesLignes] # si la copie s'est bien deroulee if {$x == 1 } { # les lignes sont parsees - creation du fichier DiseaseGenesFromGC set Lgenes [RecupDiseaseGenesGC $LesLignes] } # filtrage de la liste des Disease Genes selon la HGMD set NewList [FiltrageListeGC $Lgenes] return $NewList } proc MAJProtMS2PHGDB {} { # MAJ des donnees issues de la GDB : recuperation des Genetic Disorders by Chromosome pour lesquels on a 1 seq proteique # Les dernieres maj sont deplacees dans un rep dont le nom contient la date # Le repertoire AJour contiendra les nouvelles donnees # ChromoWithProtSeq contient la liste des GDB-Access dans les banques # listeGDBidProt contient la liste des access Uniprot OK pour integrer MS2PH-db global RepAJourGDB global listeARetranscrire set chemin "/home/friedric/MS2PH/MS2PH-db/ListeProt/GDB/" set date [eval exec date -u +%d%m%y] set RepOld [file join $chemin "Old$date"] set RepAJourGDB [file join $chemin "AJour"] set ficOut [file join $RepAJourGDB "listeGDBidProt"] # cree RepOld # copie des anciennes donnees dans RepOld catch {eval exec mkdir $RepOld} catch {eval exec cp $ficOut $RepOld} set url1 "http://www.gdb.org/gdbreports/Chr.XXXX.omim.html" set Lchr [list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y Unknown_or_Multiple_Locations] set listeARetranscrire "" # parcours de chaque chromosome foreach i $Lchr { # creation de l url qui va bien, fonction du chromosome traite regsub "XXXX" $url1 $i newurl set Leslignes {} # copie des lignes de l url set x [HttpCopy $newurl Leslignes] # si la copie s'est bien deroulee if {$x == 1 } { # les lignes sont parsees ParseFicheChromoGDB $i $Leslignes } } set f [open $ficOut w] foreach e $listeARetranscrire { puts $f $e } close $f return $listeARetranscrire } proc MATMATMAT {aA aB aC aPROD} { upvar $aA A upvar $aB B upvar $aC C upvar $aPROD PROD # Calcule PROD= A * B * C # A,B,C etant des matrices 3x3 foreach i {1 2 3} { foreach j {1 2 3} { set dd 0. foreach k {1 2 3} { foreach l {1 2 3} { set dd [expr {$dd+[set A($i,$k)]*[set B($k,$l)]*[set C($l,$j)]}] } } set D($i,$j) $dd } } foreach i {1 2 3} { foreach j {1 2 3} { set PROD($i,$j) [set D($i,$j)] } } return } proc MDScore {MSFouNom {Force ""}} { global MDScore global RepertoireDuGenome Wup "Force can be CalculeMoi or IsText if MSFouNom is the text of the MSF itself" if {$Force=="IsText"} { set MSF $MSFouNom set FichierMSF [TmpFile] Sauve $MSF dans $FichierMSF set Nom "" set Force "CalculeMoi" } else { set Nom $MSFouNom if {$Nom=="LaListeMerci" && [info exists MDScore("LaListeMerci")]} { return [set MDScore("LaListeMerci")] } set FichierMSF $Nom set Nom [file tail $FichierMSF] } set CalculeMoi [string equal -nocase "CalculeMoi" $Force] if { ! $CalculeMoi && $Nom!="" && [info exists MDScore($Nom)]} { return [set MDScore($Nom)] } if { ! [file exists $FichierMSF]} { set FichierMSF "$RepertoireDuGenome/msf/$Nom" } if { $Nom!="LaListeMerci" && ($CalculeMoi || ! [YaPABouTROUouTRNAouARNenDebutDe $Nom])} { set CommandeMDScore "normd $FichierMSF" set MD "" if { ! [catch {set MD [eval exec $CommandeMDScore]} Message]} { if { ! [regexp {[0-9]} $MD]} { Warne "MDScore ne rend pas de nombre mais $Message" return -9999.4 } set Score "" scan $MD "%s %f" NomDuFich Score if {[regexp {^[0-9\-\+\.eE]+$} $Score]} { set MD $Score } elseif {[regexp {^[0-9\-\+\.eE]+$} $NomDuFich]} { set MD $NomDuFich } else { set MD $MD } return $MD } else { Warne "MDScore se plante par $Message" return -9999.0 } } set FichierMDs "$RepertoireDuGenome/fiches/md_scores" if {[file exists $FichierMDs] && [ContenuDuFichier $FichierMDs]!=""} { foreach Ligne [LesLignesDuFichier $FichierMDs] { set MD "" scan $Ligne "%s %s %s" NomLu MDouFichier MD if {$MD==""} { set MD $MDouFichier } if {$MD==""} { set MD -9999.5 } set MDScore($NomLu) $MD lappend MDScore(LaListeMerci) "$NomLu $MD" } if {[info exists MDScore($Nom)]} { return [set MDScore($Nom)] } else { if {$Force=="CalculeMoiSiManquant"} { set MD [MDScore $Nom "CalculeMoi"] lappend MDScore(LaListeMerci) "$Nom $MD" set LesNomMD [lsort [set MDScore(LaListeMerci)]] SauveLesLignes $LesNomMD dans $FichierMDs return $MD } return -9999.8 } } if { ! [OuiOuNonMemo "Do I calculate now all MDscores (NorMD) ... ?"]} { return -9999.3 } foreach NomLu [ListeDesPABs] { if {[info exists MDScore($NomLu)]} { continue } set FichierMSF "$RepertoireDuGenome/msf/$NomLu" if { ! [file exists $FichierMSF]} { set MD -9999.7 } else { set MD [MDScore $FichierMSF "CalculeMoi"] } set MDScore($NomLu) $MD Espionne "$NomLu $MD" AppendAuFichier $FichierMDs "$NomLu $MD" } if {[info exists MDScore($Nom)]} { return [set MDScore($Nom)] } else { return -9999.6 } } proc MDScoreAvecSelection {TexteMSF LesAccess {InOut In}} { if {[llength $LesAccess]<2} { return -9999.0 } set MSFSelection [MSFSelection $TexteMSF $LesAccess $InOut] if {$MSFSelection==""} { return -9999.0 } return [MDScore $MSFSelection "IsText"] } proc MDScoreAvecSelectionDuFichier {FichierMSF LesAccess {InOut In}} { return [MDScoreAvecSelection [ContenuDuFichier $FichierMSF] $LesAccess $InOut] } proc MF_Reduce {} { DecortiqueUnTFA PF01588_full.tfa Ln Sq foreach n $Ln { lassign [split $n "/"] a tmp lappend La $a } # traite ID set Lr [IDMapping "ID" NF50 $La] set na 0 ; set Lum [list] foreach n $Ln a $La r $Lr { if {$a eq $r || $r eq ""} { puts ">$a< >$r<" lappend Lum $a continue } lappend R($r) $n incr na } # traite ACC set Lc [IDMapping "ACC+ID" NF50 $Lum] set na2 0 ; set Lum2 [list] foreach a $La c $Lc { if {$a eq $c || $c eq ""} { lappend Lum2 $a continue } set i [lsearch $La $a] set n [lindex $Ln $i] lappend R($c) $n incr na2 } puts "nbr of seqs .............. [llength $Ln]" puts "nbr of seqs ID mapped .... $na" puts "nbr of seqs ACC mapped ... $na2" puts " Total mapped ... [expr {$na+$na2}]" puts "nbr of UniRef50 .......... [llength [array names R]]" puts "" set Lseq [list] ; set Lk [list] foreach k [array names R] { lappend Lk $k set n [lindex [set R($k)] 0] lappend Lseq [set Sq($n)] } EcritLeTfa U50.tfa $Lk $Lseq parray R puts "" puts "[join $Lum2 \n]" exit } proc MGI {{Qui ""} {Quoi ""}} { #LP 2013/01/31 avant on lisait MRK_Synonym.sql.rpt. Maintenant on lit MRK_List2.rpt global MGI if {$Qui==""} { set Qui "ListOf" } if {$Quoi=="" && [string equal -nocase $Qui "ListOf"]} { set Quoi "Header" } if {$Quoi==""} { set Quoi "AllTxt" } set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {[info exists MGI($Qui,$Quoi)]} { return $MGI($Qui,$Quoi) } if {$Quoi=="ALLTXT" || $Quoi=="ALLLIST" || $Quoi=="ALLHTML"} { set LesTouts [MGI $Qui All] set LeRetour {} set N [llength $LesTouts] set Saut "" if {$N>1} { set Saut "\n" } set I 0 foreach LeTout $LesTouts { incr I if {$LeTout==""} { continue } if {$N>1} { lappend LeRetour [format "\n%45s : %s" "I_found_${N}_hits" $I] } foreach T [MGI ListOf Header] V $LeTout { lappend LeRetour [format "%45s : %s" $T $V] } } if {$Quoi=="ALLLIST"} { return $LeRetour } set Retour [join $LeRetour "\n"] if {$Quoi=="ALLHTML" || [PourWscope]} { return "
    \n$Retour\n
    " } if {$Quoi=="ALLTXT"} { return $Retour } return $Retour } if {[info exists MGI("EstCharge")]} { if {[info exists MGI($Qui,ONE_MGIID)]} { return [MGI $MGI($Qui,ONE_MGIID) $Quoi] } return "" } set MGI("EstCharge") 1 set FichierMGI "[GscopeDatabaseDir UCSCGenomes]/GeneNaming/MRK_List2.rpt" set Q [file tail $FichierMGI] regsub -nocase {\.[^\.]+$} $Q "" Q set MGI(FILE,NAME) $FichierMGI set MGI(FILE,QUEUE) $Q LoadTxl $FichierMGI Txl -1 "\t" set MGI(LISTOF,HEADER) $Txl(ListHeaderPlease,$Q) set MGI(LISTOF,INDEX) $Txl(ListAllPlease,$Q) foreach I $Txl(ListAllPlease,$Q) { set MgiId $Txl($I,MGI_Accession_ID) set Gn $Txl($I,Marker_Symbol) if {[info exists Txl($I,Marker_Synonyms_pipe-separated)]} { set SynIni $Txl($I,Marker_Synonyms_pipe-separated) } set MGIID [string toupper $MgiId] set GN [string toupper $Gn] lappend MGI(LISTOF,MGIID) $MgiId lappend MGI(LISTOF,GENENAME) $Gn set MGI($GN,MGIID) [lsort -unique [lappend MGI($GN,MGIID) $MgiId]] set MGI($MGIID,GENENAME) [lsort -unique [lappend MGI($MGIID,GENENAME) $Gn]] if {[info exists SynIni]} { set LesSyn [split $SynIni "|"] set MGI($MGIID,LISTOFSYN) $LesSyn set MGI($GN,LISTOFSYN) $LesSyn foreach Syn $LesSyn { set SYN [string toupper $Syn] lappend MGI($SYN,REFERENCE_MGIID) $MGIID lappend MGI($SYN,REFERENCE_GENENAME) $Gn } } set LeTout {} foreach T $Txl(ListHeaderPlease,$Q) { lappend LeTout $Txl($I,$T) set MGI($MGIID,[string toupper $T]) $Txl($I,$T) set MGI($GN,[string toupper $T]) $Txl($I,$T) } lappend MGI($MGIID,ALL) $LeTout lappend MGI($GN,ALL) $LeTout } set MGI(LISTOF,MGIID) [lsort -unique $MGI(LISTOF,MGIID)] set MGI(LISTOF,GENENAME) [lsort -unique $MGI(LISTOF,GENENAME)] return [MGI $Qui $Quoi] } proc MGIHGNC {{Qui ""} {Quoi ""}} { global MGIHGNC if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "AllTxt" } set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {[info exists MGIHGNC($Qui,$Quoi)]} { return $MGIHGNC($Qui,$Quoi) } if {$Quoi=="ALLTXT" || $Quoi=="ALLLIST" || $Quoi=="ALLHTML"} { set LeTout [MGIHGNC $Qui "All"] if {$LeTout==""} { return "" } foreach T [MGIHGNC ListOf Header] V $LeTout { lappend LeRetour [format "%45s : %s" $T $V] } if {$Quoi=="ALLLIST"} { return $LeRetour } set Retour [join $LeRetour "\n"] if {$Quoi=="ALLHTML" || [PourWscope]} { return "
    \n$Retour\n
    " } if {$Quoi=="ALLTXT"} { return $Retour } return $Retour } if {[info exists MGIHGNC("EstCharge")]} { if {[info exists MGIHGNC($Qui,MGIID)]} { set FirstRef [lindex $MGIHGNC($Qui,MGIID) 0] if {[string equal -nocase $Qui $FirstRef]} { return "" } return [MGIHGNC $FirstRef $Quoi] } return "" } set MGIHGNC("EstCharge") 1 set FichierMGIHGNC "[GscopeDatabaseDir UCSCGenomes]/GeneNaming/HMD_HGNC_Accession.rpt" set Q [file tail $FichierMGIHGNC] set MGIHGNC(FILE,NAME) $FichierMGIHGNC set MGIHGNC(FILE,QUEUE) $Q set MGIHGNC(LISTOF,HEADER) [list "MgiId" "MgiGeneName" "MgiMarkerName" "MgiEntrezGeneId" "HgncId" "HgncGeneName" "HgncEntrezGeneId"] foreach Ligne [LesLignesDuFichier $FichierMGIHGNC] { set LesMots [split $Ligne "\t"] ScanLaListe $LesMots MgiId MgiGeneName MgiMarkerName MgiEntrezGeneId HgncId HgncGeneName HgncEntrezGeneId set MGIID [string toupper $MgiId] set HGNCID [string toupper $HgncId] set MGIGENENAME [string toupper $MgiGeneName] set HGNCGENENAME [string toupper $HgncGeneName] #if {$HGNCID!="" && [info exists DejaVu($HGNCID)]} { FaireLire "DejaVu $HGNCID\n$DejaVu($HGNCID)\n$Ligne" } #set DejaVu($HGNCID) $Ligne #if {$MGIID!="" && [info exists DejaVu($MGIID)]} { FaireLire "DejaVu $MGIID\n$DejaVu($MGIID)\n$Ligne" } #set DejaVu($MGIID) $Ligne foreach T $MGIHGNC(LISTOF,HEADER) V $LesMots { set T [string toupper $T] set MGIHGNC($MGIID,$T) $V set MGIHGNC($HGNCID,$T) $V } set MGIHGNC($MGIID,HGNCID) $HGNCID set MGIHGNC($HGNCID,MGIID) $MGIID lappend MGIHGNC($MGIGENENAME,MGIID) $MGIID lappend MGIHGNC($HGNCGENENAME,HGNCID) $HGNCID lappend MGIHGNC($MgiEntrezGeneId,HGNCGENEID) $HgncEntrezGeneId lappend MGIHGNC($HgncEntrezGeneId,MGIGENEID) $MgiEntrezGeneId lappend MGIHGNC($HgncEntrezGeneId,MGIID) $MGIID lappend MGIHGNC(LISTOF,MGIID) $MGIID lappend MGIHGNC(LISTOF,HGNCID) $HGNCID lappend MGIHGNC(LISTOF,MGIGENENAME) $MGIGENENAME lappend MGIHGNC(LISTOF,HGNCGENENAME) $HGNCGENENAME set MGIHGNC($MGIID,ALL) $LesMots set MGIHGNC($HGNCID,ALL) $LesMots } set MGIHGNC(LISTOF,MGIID) [lsort -unique $MGIHGNC(LISTOF,MGIID)] set MGIHGNC(LISTOF,HGNCID) [lsort -unique $MGIHGNC(LISTOF,HGNCID)] set MGIHGNC(LISTOF,MGIGENENAME) [lsort -unique $MGIHGNC(LISTOF,MGIGENENAME)] set MGIHGNC(LISTOF,HGNCGENENAME) [lsort -unique $MGIHGNC(LISTOF,HGNCGENENAME)] return [MGIHGNC $Qui $Quoi] } proc MGILP {{Qui ""} {Quoi ""}} { #From LP: En 2008, tous les MGI n etaient pas present dans [GscopeDatabaseDir UCSCGenomes]/GeneNaming/MRK_Synonym.sql.rpt ??? exemple:ccng2 #FromLP: En 2013, le fichier MRK_Synonym.sql.rpt n existe plus : ne se sert plus de MGILP global MGILP set Qui [string toupper $Qui] if {[info exists MGILP($Qui,$Quoi)]} {return $MGILP($Qui,$Quoi)} if {[info exists MGILP("EstCharge")]} {return ""} set MGILP("EstCharge") 1 #set MGILP(LISTOF,HEADER) [list "MgiId" "GeneName"] set Fichier "[GscopeDatabaseDir UCSCGenomes]/GeneNaming/MRK_Dump1.rpt" foreach Ligne [LesLignesDuFichier $Fichier] { set LesMotsDeLaLigne [split $Ligne "\t"] set Mgi [lindex $LesMotsDeLaLigne 0] set Gn [lindex $LesMotsDeLaLigne 1] set Gn [string toupper $Gn] set MGILP($Mgi,Gn) $Gn set MGILP($Gn,Mgi) $Mgi } return [MGILP $Qui $Quoi] } proc MGISW {{Qui ""} {Quoi ""} {Ou ""}} { JeMeSignale #Utilise l'un ou l'autre #set FichierMGISW "/genomics/link/UCSCGenomes/GeneNaming/MRK_SwissProt.rpt" #set FichierMGISW "/genomics/link/UCSCGenomes/GeneNaming/MRK_SwissProt_TrEMBL.rpt" global MGISW if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {$Quoi==""} { set Quoi "AllTxt" } set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] Espionne $Ou if {[string equal -nocase $Ou "SW"]} { set Ou "MRK_SwissProt.rpt" } if {[string equal -nocase $Ou "SWTrEmbl"]} { set Ou "MRK_SwissProt_TrEMBL.rpt" } if {$Ou!="" && ! [regexp "/" $Ou]} { set Ou "/genomics/link/UCSCGenomes/GeneNaming/$Ou" } Espionne $Ou if {$Ou!=""} { if {[info exists MGISW(FILE,NAME)] && $Ou!=$MGISW(FILE,NAME)} { unset MGISW } set FichierMGISW $Ou set MGISW(FILE,NAME) $Ou } else { if {[info exists MGISW(FILE,NAME)]} { set Ou $MGISW(FILE,NAME) set FichierMGISW $Ou } else { FaireLire "Il faut donner un nom de fichier ou SW ou SWTrEmbl la premiere fois" return "" } } if {[info exists MGISW($Qui,$Quoi)]} { return $MGISW($Qui,$Quoi) } if {$Quoi=="ALLTXT" || $Quoi=="ALLLIST" || $Quoi=="ALLHTML"} { set LeTout [MGISW $Qui "All"] if {$LeTout==""} { return "" } foreach T [MGISW ListOf Header] V $LeTout { lappend LeRetour [format "%45s : %s" $T $V] } if {$Quoi=="ALLLIST"} { return $LeRetour } set Retour [join $LeRetour "\n"] if {$Quoi=="ALLHTML" || [PourWscope]} { return "
    \n$Retour\n
    " } if {$Quoi=="ALLTXT"} { return $Retour } return $Retour } if {[info exists MGISW("EstCharge")]} { if {[info exists MGISW($Qui,MGIID)]} { set FirstRef [lindex $MGISW($Qui,MGIID) 0] if {[string equal -nocase $Qui $FirstRef]} { return "" } return [MGISW $FirstRef $Quoi] } return "" } set MGISW("EstCharge") 1 set Q [file tail $FichierMGISW] set MGISW(FILE,NAME) $FichierMGISW set MGISW(FILE,QUEUE) $Q set MGISW(LISTOF,HEADER) [list "MgiId" "GeneName" "Status" "Name" "cMPosition" "Chr" "Sw"] foreach Ligne [LesLignesDuFichier $FichierMGISW] { set LesMots [split $Ligne "\t"] ScanLaListe $LesMots MgiId GeneName Status Name cMPosition Chr Sw set MGIID [string toupper $MgiId] set GENENAME [string toupper $GeneName] lappend MGISW(LISTOF,MGIID) $MGIID lappend MGISW(LISTOF,GENENAME) $GENENAME if {$MGIID!="" && [info exists DejaVu($MGIID)]} { FaireLire "DejaVu $MGIID\n$DejaVu($MGIID)\n$Ligne" } set DejaVu($MGIID) $Ligne if {$GENENAME!="" && [info exists DejaVu($GENENAME)]} { FaireLire "DejaVu $GENENAME\n$DejaVu($GENENAME)\n$Ligne" } set DejaVu($GENENAME) $Ligne foreach T $MGISW(LISTOF,HEADER) V $LesMots { set T [string toupper $T] set MGISW($MGIID,$T) $V set MGISW($GENENAME,$T) $V } set MGISW($MGIID,SW) $Sw set MGISW($MGIID,ALL) $LesMots } set MGISW(LISTOF,MGIID) [lsort -unique $MGISW(LISTOF,MGIID)] set MGISW(LISTOF,GENENAME) [lsort -unique $MGISW(LISTOF,GENENAME)] return [MGISW $Qui $Quoi] } proc MMMInit {} { global CMDef db package require Tk package require sqlite3 package require imap4 package require tls package require mime package require tablelist package require base64 source /home/moumou/imap4.tcl source /home/moumou/mime.tcl source /home/moumou/rfc2822.tcl ClientMailDef # init styles set cbg $CMDef(Background) foreach wdg {TCheckbutton TRadiobutton} { ttk::style map MMM.$wdg -background [list active $cbg disabled $cbg readonly $cbg] ttk::style map MMM.$wdg -foreground [list active white disabled white readonly white] } ttk::style configure MMM.TFrame -background $cbg ttk::style configure MMM.TLabel -background $cbg -foreground white -anchor e -justify right -font CMFont ttk::style configure MMM.TEntry -font CMFont ttk::style configure MMM.TEntry -fieldbackground black ttk::style configure MMM.TEntry -fieldforeground white ttk::style configure MMM.TEntry -foreground white ttk::style configure MMM.TCheckbutton -background $cbg -foreground white -font CMFont ttk::style configure MMM.TRadiobutton -background $cbg -foreground white -font CMFont # database present if {! [file exists clientmail.sql]} { set db [FabriqueDeTables $CMDef(Tables) "" clientmail.sql] NewMailServer } else { LoadDB MailServerChooser ConnectMailbox } MMMInterface return set Lfold [::imap4::folders $imapID -inline] set mb(Lfolders) $Lfold ::imap4::select $imapID $FOLDER InitFolder $FOLDER return } proc MMMInterface {} { global CMDef db TMail wm withdraw . grid columnconfig . all -weight 1 grid rowconfig . all -weight 1 . configure -background $::CMDef(Background) # global frame ttk::frame .f -style MMM.TFrame grid .f -row 0 -column 0 -sticky news -padx 10 grid columnconfig .f all -weight 1 grid rowconfig .f all -weight 1 set w .f # menu frame ttk::frame $w.fmenu -style MMM.TFrame grid $w.fmenu -row 0 -column 0 -sticky ew grid columnconfig $w.fmenu all -weight 1 # mail frame ttk::frame $w.fmail -style MMM.TFrame grid rowconfig $w.fmail all -weight 1 grid columnconfig $w.fmail all -weight 1 grid $w.fmail -row 1 -column 0 -sticky news set TMail(List) [list] set TMail(Read) [list] set TMail(Answ) [list] set TMail(Atta) [list] set TMail(UID) [list] set CMDef(TbL) $w.fmail.tbl tablelist::tablelist $w.fmail.tbl -background black -foreground white -columns { 1 "A" center 15 "Sender" left 20 "Subject" left 10 Date left} -font CMFont -labelfont CMFontBold -labelcommand tablelist::sortByColumn -labelforeground white -labelbackground "#444444" -labelactivebackground green -labelactiveforeground white -height 5 -selecttype row -selectmode extended -selectforeground white -selectbackground "#555555" -listvariable TMail(List) set CMDef(WText) $w.fmail.txt text $w.fmail.txt -background black -foreground white -wrap word -font CMFont -height 10 -yscrollcommand "$w.fmail.vsc set" scrollbar $w.fmail.vsc -width 8 -command "$w.fmail.txt yview " grid $w.fmail.tbl -row 0 -column 0 -columnspan 2 -sticky news grid $w.fmail.vsc -row 1 -column 1 -sticky ns grid $w.fmail.txt -row 1 -column 0 -sticky news ttk::frame $w.fbut -style MMM.TFrame grid $w.fbut -row 2 -column 0 -sticky ew button $w.fbut.bok -text " Close " -bg green1 -font CMFontBold -command {QuitMMM} grid $w.fbut.bok -row 0 -column 0 -sticky e grid columnconfig $w.fbut all -weight 1 # special configurations $w.fmail.tbl columnconfigure 0 -font CMFontBold -labelfont CMFont $w.fmail.tbl columnconfigure 1 -sortmode asciinocase # -sortcommand SortColumn $w.fmail.tbl columnconfigure 2 -sortmode asciinocase # -sortcommand SortColumn $w.fmail.tbl columnconfigure 3 -sortmode dictionary # -sortcommand SortColumn update idletasks RetrieveMails # bindings bind Text {focus %W} bind Text {focus .} bind $w.fmail.txt {%W yview scroll [expr {%D/120}] units} bind [$w.fmail.tbl bodytag] {DisplayMessage %W %w %y} bind [winfo toplevel $w] {NewMailServer} wm attributes . -fullscreen 1 wm deiconify . #FenetreAuCentre $w update idletasks #tkwait variable Retour return 1 } proc MMm {} { global Coucou T _1T set Coucou "bonjour\nsalut" set T(1) "Je suis sur \n deux lignes" set _1T(a) "1ta" foreach Variable [info globals] { global $Variable if {[regexp "Glossaire" $Variable]} { continue } if { ! [info exists $Variable]} { continue } if {[array exists $Variable]} { lappend LesGlobal [PaqArray [set Variable]] } else { lappend LesGlobal [PaqListe $Variable [set $Variable]] } } set Coucou perdu unset _1T EspionneL $LesGlobal Espionne "Fin de LesGlobal" set LesV [AffecteLesVariablesDeLaListe $LesGlobal] foreach V $LesV { if {[array exists $V]} { Espionne "$V [array get $V]" } else { Espionne "$V [set $V]" } } Espionne $Coucou Espionne $T(1) Espionne $_1T(a) exit } proc MOD3 {I aJ aK} { upvar $aJ J upvar $aK K set J [expr {$I+1}] set K [expr {$I+2}] if {$J > 3} {set J [expr {$J-3}]} if {$K > 3} {set K [expr {$K-3}]} return } proc MSF2TFAs {FileMSF FileTFAs {JusteLesSequences 1}} { if {![file exists $FileMSF]} {return} set LeTexte {} foreach Access [AskMSF $FileMSF LesAccess] { set Seq [string toupper [AskMSF $FileMSF $Access]] if {$JusteLesSequences} {regsub -all {[^A-Z]} $Seq "" Seq} set SeqTFA [SEQ2TFA $Seq $Access] Espionne $Access lappend LeTexte $SeqTFA } AskMSF unset if {$LeTexte == {}} {return} Sauve [join $LeTexte "\n"] dans $FileTFAs } proc MSF2WordML {FileMSF {FileOut ""} {PMin 0.85} {NbProtMinToConsiderACol 10} {SizeFont 6} {NbResiduesParLigne 100}} { if {![file exists $FileMSF]} {return} if {$FileOut == ""} { set FileOut [FichierPourSaveAs "$FileMSF.xml"] if {$FileOut == ""} {return} } set LesAA [list A R N D C Q E G H I L K M F P S T W Y V] foreach AA [list A C F I L M V W Y T S G] {set TabHydrophobic($AA) 1} foreach AA [list A C S T D V G P ] {set TabSmall($AA) 1} foreach AA [list D E H K R ] {set TabCharged($AA) 1} foreach AA [list D E H K N Q R S T ] {set TabPolar($AA) 1} set LesAccess [AskMSF $FileMSF LesAccess] set NbAcc [llength $LesAccess] set Acc1 [lindex $LesAccess 0] set Seq1 [AskMSF $FileMSF $Acc1] set TailleAli [string length $Seq1] set NbCarMax 11 foreach Acc $LesAccess { set NbCar [string length $Acc] if {$NbCarMax < $NbCar} {set NbCarMax $NbCar} set TabSeq($Acc,Length) 0 set Seq [string toupper [AskMSF $FileMSF $Acc]] set i 0 set j 0 foreach AA [split $Seq ""] { if {$AA == "~"} {set AA "."} incr i if {$AA != "."} {incr j} set TabSeq($Acc,$i,PosSeq) $j set TabSeq($Acc,$i) $AA } } incr NbCarMax for {set i 1} {$i <= $TailleAli} {incr i} { set NbAccInColumn 0 set TabSeq(Res,H,$i) 0 set TabSeq(Res,S,$i) 0 set TabSeq(Res,C,$i) 0 set TabSeq(Res,P,$i) 0 set TabSeq(Res,Cons,$i) 0 set NbH 0 set NbS 0 set NbC 0 set NbP 0 set TabNMax(N) 0 set TabNMax(AA) "" foreach AA $LesAA {set TabN($AA) 0} set LaLigne {} foreach Acc $LesAccess { set AA [set TabSeq($Acc,$i)] lappend LaLigne $AA if {[info exists TabHydrophobic($AA)]} {incr NbH} if {[info exists TabSmall($AA) ]} {incr NbS} if {[info exists TabCharged($AA) ]} {incr NbC} if {[info exists TabPolar($AA) ]} {incr NbP} if {[info exists TabN($AA)]} { incr TabSeq($Acc,Length) incr TabN($AA) incr NbAccInColumn if {[set TabNMax(N)] < [set TabN($AA)]} { set TabNMax(N) [set TabN($AA)] set TabNMax(AA) $AA } } } if {$NbAccInColumn < $NbProtMinToConsiderACol} {continue} set PH [expr $NbH * 1.0 / $NbAccInColumn] if {$PMin <= $PH } {set TabSeq(Res,H,$i) h} set PS [expr $NbS * 1.0 / $NbAccInColumn] if {$PMin <= $PS } {set TabSeq(Res,S,$i) s} set PC [expr $NbC * 1.0 / $NbAccInColumn] if {$PMin <= $PC } {set TabSeq(Res,C,$i) c} set PP [expr $NbP * 1.0 / $NbAccInColumn] if {$PMin <= $PP } {set TabSeq(Res,P,$i) p} set AA [set TabNMax(AA)] set PI [expr [set TabNMax(N)] * 1.0 / $NbAccInColumn] if {$PMin <= $PI} {set TabSeq(Res,Cons,$i) $AA} } set LeTexte {} lappend LeTexte [DebutDoc_WordML "Courier"] foreach LaSerie [LesSeriesDeNResidues $TailleAli $NbResiduesParLigne] { set D [lindex $LaSerie 0] set F [lindex $LaSerie 1] set LaTextDePos {} set nAcc 0 foreach Acc $LesAccess { incr nAcc set LeTextDeLaSeq {} for {set i $D} {$i <= $F} {incr i} { set Color "black" set BackGround "white" set AA [set TabSeq($Acc,$i)] if { [set TabSeq(Res,Cons,$i)] != 0} { if {[set TabSeq(Res,Cons,$i)] == $AA} { set Color "white" set BackGround "black" } else { set Color "black" set BackGround "white" } } elseif {[set TabSeq(Res,H,$i)] != 0} { if {[info exists TabHydrophobic($AA)]} { set Color "black" set BackGround "yellow" } else { set Color "black" set BackGround "white" } } elseif {[set TabSeq(Res,S,$i)] != 0} { if {[info exists TabSmall($AA)]} { set Color "white" set BackGround "green" } else { set Color "black" set BackGround "white" } } elseif {[set TabSeq(Res,C,$i)] != 0} { if {[info exists TabCharged($AA)]} { set Color "white" set BackGround "red" } else { set Color "black" set BackGround "white" } } elseif {[set TabSeq(Res,P,$i)] != 0} { if {[info exists TabPolar($AA)]} { set Color "blue" set BackGround "white" } else { set Color "black" set BackGround "white" } } else { set Color "black" set BackGround "white" } lappend LeTextDeLaSeq [EncadrementDeTexte_WordML $AA 0 0 0 $SizeFont $Color $BackGround ] set Color "black" set BackGround "white" if {[expr $i % 10] == 0} { if {$nAcc == 1} { lappend LaTextDePos [EncadrementDeTexte_WordML [format "%10s" "|"] 0 0 0 $SizeFont $Color $BackGround] lappend LaTextDePos [EncadrementDeTexte_WordML " " 0 0 0 $SizeFont $Color $BackGround] } lappend LeTextDeLaSeq [EncadrementDeTexte_WordML " " 0 0 0 $SizeFont $Color $BackGround] } } if {$nAcc == 1} { set LaLigne {} lappend LaLigne [EncadrementDeTexte_WordML [format "%-${NbCarMax}s %6s " "" ""] 1 0 0 $SizeFont $Color $BackGround] lappend LaLigne [join $LaTextDePos "\n"] lappend LaLigne [EncadrementDeTexte_WordML [format " %-6s %-8s" "" ""] 1 0 0 $SizeFont $Color $BackGround] lappend LeTexte [Paragraphe_WordML [join $LaLigne "\n"]] } set Length [set TabSeq($Acc,Length)] set DSurProt [set TabSeq($Acc,$D,PosSeq)] set FSurProt [set TabSeq($Acc,$F,PosSeq)] if {$DSurProt == 0 && $FSurProt != 0} {set DSurProt 1} set TextLength "($Length)" set LaLigne {} lappend LaLigne [EncadrementDeTexte_WordML [format "%-${NbCarMax}s %6s " $Acc $DSurProt ] 1 0 0 $SizeFont black white] lappend LaLigne [join $LeTextDeLaSeq "\n"] lappend LaLigne [EncadrementDeTexte_WordML [format " %-6s %-8s" $FSurProt $TextLength] 1 0 0 $SizeFont black white] lappend LeTexte [Paragraphe_WordML [join $LaLigne "\n"]] lappend LeTexte "" } foreach Res [list H S C P Cons] Cat [list Hydrophobic Small Charged Polar Conserved] { set LeTextDeLaSeq {} for {set i $D} {$i <= $F} {incr i} { set Color "black" set BackGround "white" if {[set TabSeq(Res,$Res,$i)] == 0} {set AA " "} else {set AA [set TabSeq(Res,$Res,$i)]} lappend LeTextDeLaSeq [EncadrementDeTexte_WordML $AA 0 0 0 $SizeFont $Color $BackGround] if {[expr $i % 10] == 0} { lappend LeTextDeLaSeq [EncadrementDeTexte_WordML " " 0 0 0 $SizeFont $Color $BackGround] } } set LaLigne {} lappend LaLigne [EncadrementDeTexte_WordML [format "%-${NbCarMax}s %6s " $Cat ""] 1 0 0 $SizeFont $Color $BackGround] lappend LaLigne [join $LeTextDeLaSeq "\n"] lappend LaLigne [EncadrementDeTexte_WordML [format " %-6s %-8s" "" ""] 1 0 0 $SizeFont $Color $BackGround] lappend LeTexte [Paragraphe_WordML [join $LaLigne "\n"]] lappend LeTexte "" } lappend LeTexte [Paragraphe_WordML [EncadrementDeTexte_WordML "" 0 0 0 $SizeFont black white]] lappend LeTexte "" } lappend LeTexte [FinDoc_WordML "Landscape"] Sauve [join $LeTexte "\n"] dans $FileOut return } proc MSF2binaire {LesNoms aProteines aBin TailleSeq} { upvar $aProteines Proteines upvar $aBin Bin foreach Nom $LesNoms { set i 1 set LaProteine [set Proteines($Nom)] foreach el $LaProteine { if {$el =="." || $el=="~"} { set Bin($Nom,$i) 0 } else { set Bin($Nom,$i) 1 } incr i } } } proc MSFPourCollection {Nom} { Wup "Attention we call the DbClustalPourTous for only one !!" DbClustalPourTous $Nom } proc MSFSelection {FichierOuTexteMSF LesAccess {InOut In}} { if {[EstUnPAB $FichierOuTexteMSF]} { set FichierOuTexteMSF [GscopeFile $FichierOuTexteMSF "msf"] } set TexteMSF $FichierOuTexteMSF if { ! [regexp "\n" $FichierOuTexteMSF] && [file exists $FichierOuTexteMSF]} { set TexteMSF [ContenuDuFichier $FichierOuTexteMSF] } if {$InOut=="In"} { set In 1 } else { set In 0 } foreach Access $LesAccess { set ACCESS [string toupper $Access] set InterestingAccess($ACCESS) 1 } set LesNouveaux {} foreach Ligne [split $TexteMSF "\n"] { if {[regexp "^PileUp" $Ligne] || [regexp {^ANCHORS [0-9]+} $Ligne] || [regexp {^ +MSF\:} $Ligne] || ! [regexp -nocase {[a-z0-9]} $Ligne] } { lappend LesNouveaux $Ligne ; continue } set Tope 0 if {[regexp -nocase {Name: [a-z0-9_\:\-]} $Ligne]} { scan $Ligne "%s %s" Name Access } else { scan $Ligne "%s" Access } set ACCESS [string toupper $Access] set Tope [info exists InterestingAccess($ACCESS)] if { $Tope && ! $In } { continue } if { ! $Tope && $In } { continue } lappend LesNouveaux $Ligne } return [join $LesNouveaux "\n"] } proc MSO {FichierClust FichierMSF {NomQuery QUERY_PROTEIN} {NorMDMin 0.3} {PMin 0.8} {FMin 0.5}} { if {![file exists $FichierClust] || ![file exists $FichierMSF]} {return} #OUT = [list [list GOTerm1 Type Def nAccess [list Access1 Access2 ...]] [list GOTerm2 Type Def nAccess [list Access1 Access2 ...]]] #MSO Mean Subfamily Ontology set LesAccessDuCluster [LesProteinesDansLeMemeClusterDuMSF $FichierClust $NomQuery] Espionne "$LesAccessDuCluster" set LesAccessSelected {} if {1 < [llength $LesAccessDuCluster]} { set MSFTotal [ContenuDuFichier $FichierMSF] set MSFDuCluster [MSFSelection $MSFTotal $LesAccessDuCluster "In"] if {$MSFDuCluster != ""} { set FMSF "[TmpFile [file tail $FichierMSF]].msfducluster" Sauve $MSFDuCluster dans $FMSF } if {$NorMDMin <= [PipeNorMD $FMSF ]} {set LesAccessSelected $LesAccessDuCluster } } else { if {$NorMDMin <= [PipeNorMD $FichierMSF]} {set LesAccessSelected [InterrogeLesClustersDesMSF $FichierClust LesAccess]} } #nG AskLesPagesInfos load $LesAccessSelected protein AskLesPagesInfos load $LesAccessSelected uniprot set LesGO {} foreach Access $LesAccessSelected { if {[EstUnAccessPDB $Access]} {continue} Espionne "Access $Access -> 2GO" set PageInfo [AskLesPagesInfos ask $Access] if {$PageInfo == ""} {continue} set LesGODeLAccess [PageInfo2GO $PageInfo] foreach GO $LesGODeLAccess { if {![info exists TabTmp(GO,$GO,LesAccess)]} {set TabTmp(GO,$GO,LesAccess) {}} lappend LesGO $GO lappend TabTmp(GO,$GO,LesAccess) $Access } set LesGOAncestraux [TousLesAncetresGODesGO $LesGODeLAccess] foreach GO $LesGOAncestraux { if {![info exists TabTmp(GO,$GO,LesAccess)]} {set TabTmp(GO,$GO,LesAccess) {}} lappend TabTmp(GO,$GO,LesAccess) $Access } } AskLesPagesInfos unset set LesGOSelected {} foreach GO [LaSelectionDesBestGO $LesGO $PMin $FMin] { if {![info exists TabTmp(GO,$GO,LesAccess)]} {continue} set LesAccess [lsort -unique [set TabTmp(GO,$GO,LesAccess)]] set nAccess [llength $LesAccess] foreach Type [GODB GO $GO LesTypes] { set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] lappend LesGOSelected [list $GO $Type $Def $nAccess $LesAccess] } } return [lsort -index 1 [lsort -index 3 -real -decreasing $LesGOSelected]] } proc MSP {{Qui ""} {Quoi ""} {Quid ""}} { #rR On regroupe ici toutes les infos sur les Syn les Mut, les Con, les Dis #rR Attention pour avoir la liste des AA il faut faire MSP All ListOf A (et non pas Syn ou Mut) global MSP if {[info exists MSP($Qui,$Quoi,$Quid)]} { return $MSP($Qui,$Quoi,$Quid) } if {[info exists MSP("EstCharge")]} { return "" } set MSP("EstCharge") 1 CanalSql [ConnInfoForDatabase MiSynPat] set LesDis [SqlExec "select pk_disease,sdisease,ldisease,omim from disease" "GetList"] foreach {PkD SDis LDis Omim} $LesDis { set MSP(Dis,$PkD,pkd) $PkD set MSP(Dis,$PkD,sdis) $SDis set MSP(Dis,$PkD,ldis) $LDis set MSP(Dis,$PkD,omim) $Omim lappend MSP(Dis,ListOf,pkd) $PkD lappend MSP(Syn,ListOf,ldis) $LDis } set LesSyn [SqlExec "select pk_synthetase,sName from synthetase" "GetList"] foreach {PkS SName} $LesSyn { set System [string toupper $SName] set A [string index $System 0] set MSP(Syn,$A,System) $System set MSP(Syn,$A,pk) $PkS set MSP(Syn,$A,A) $A set MSP(Syn,$PkS,A) $A set MSP(Syn,$System,A) $A set MSP(Syn,$System,System) $System lappend MSP(Syn,ListOf,A) $A lappend MSP(Syn,ListOf,pk) $PkS lappend MSP(Syn,ListOf,System) $System } set MSP(All,ListOf,A) $MSP(Syn,ListOf,A) lappend MSP(All,ListOf,A) "Q" set MSP(All,ListOf,A) [lsort -unique $MSP(All,ListOf,A)] set MSP(Mut,All,ListOfW) {} set MSP(Mut,All,ListOfM) {} #rR a mis All au lieu de Syn foreach A $MSP(All,ListOf,A) { set MSP(Mut,$A,ListOfW) {} set MSP(Mut,$A,ListOfM) {} set MSP(Mut,$A,ListOfPos) {} set MSP(Mut,$A,All-WCount) 0 set MSP(Mut,$A,All-MCount) 0 set MSP(Mut,All,All-WCount) 0 set MSP(Mut,All,All-MCount) 0 foreach B $MSP(All,ListOf,A) { set MSP(Mut,$A,$B-WCount) 0 set MSP(Mut,$A,$B-MCount) 0 } } set LesMut [SqlExec "select * from mutation" "GetList"] foreach {PkM PkB PkD PkS V1 V2 Comment} $LesMut { set A $MSP(Syn,$PkS,A) lappend MSP(Mut,ListOf,A) $A lappend MSP(Mut,$A,ListOfV1) $V1 lappend MSP(Mut,$A,ListOfV2) $V2 lappend MSP(Mut,$A,ListOfCo) $Comment lappend MSP(Mut,All,ListOfV1) $V1 lappend MSP(Mut,All,ListOfV2) $V2 lappend MSP(Mut,All,ListOfCo) $Comment set MSP(Mut,$PkM,pkd) $PkD foreach V [list $V1 $V2] { if { ! [info exists DejaVu($V)] && ! [regexp "X" $V] && [regexp {^([A-Z])([0-9]+)([A-Z])$} $V Match W Pos M] } { set DejaVu($V) 1 lappend MSP(Mut,$A,ListOfW) $W lappend MSP(Mut,$A,ListOfM) $M lappend MSP(Mut,$A,ListOfPos) $Pos lappend MSP(Mut,All,ListOfW) $W lappend MSP(Mut,All,ListOfM) $M lappend MSP(Mut,All,ListOfPos) $Pos incr MSP(Mut,$W,All-WCount) incr MSP(Mut,$M,All-MCount) incr MSP(Mut,$A,$W-WCount) incr MSP(Mut,$A,$M-MCount) incr MSP(Mut,$A,$W$M-Count) incr MSP(Mut,All,$W-WCount) incr MSP(Mut,All,$M-MCount) incr MSP(Mut,All,$W$M-Count) lappend MSP(Mut,$A,$W$M-Pos) $Pos } } set MSP(Mut,$A,ListOfWunique) [lsort -unique $MSP(Mut,$A,ListOfW)] set MSP(Mut,$A,ListOfMunique) [lsort -unique $MSP(Mut,$A,ListOfM)] } set MSP(Mut,All,ListOfW) [lsort -unique $MSP(Mut,All,ListOfW)] set MSP(Mut,All,ListOfM) [lsort -unique $MSP(Mut,All,ListOfM)] set MSP(Mut,ListOf,A) [lsort -unique $MSP(Mut,ListOf,A)] #rR j'ai mis All au lieu de Mut pour la liste foreach A $MSP(All,ListOf,A) { if { ! [info exists MSP(Mut,$A,ListOfW)]} { set MSP(Mut,$A,ListOfW) {} } if { ! [info exists MSP(Mut,$A,ListOfM)]} { set MSP(Mut,$A,ListOfM) {} } if { ! [info exists MSP(Mut,$A,ListOfPos)]} { set MSP(Mut,$A,ListOfPos) {} } set MSP(Mut,$A,ListOfW) [lsort -unique $MSP(Mut,$A,ListOfW)] set MSP(Mut,$A,ListOfM) [lsort -unique $MSP(Mut,$A,ListOfM)] set MSP(Mut,$A,ListOfPos) [lsort -unique $MSP(Mut,$A,ListOfPos)] } foreach Nom [ListeDesPABs] { set A [ExtraitInfo $Nom A] foreach Cons [list IdenGlob ConsGlob SimiGlob AllGlob IdenLocal ConsLocal SimiLocal AllLocal] { set MSP(Con,$A,$Cons) {} } set MonAccess "${A}mito_Homo.sapi" set LesConservations [MSPFroMac $Nom Cons-T80 $MonAccess] foreach Ligne $LesConservations { lassign $Ligne coords Coords ftype FType fstart FStart fstop FStop fcolor FColor fscore FSCore fnote FNote lappend MSP(Con,$A,$FNote) $FStart } set MSP(Con,$A,AllGlob) {} foreach Cons [list IdenGlob ConsGlob SimiGlob] { LConcat MSP(Con,$A,AllGlob) $MSP(Con,$A,$Cons) } set MSP(Con,$A,AllGlob) [lsort -unique -integer $MSP(Con,$A,AllGlob)] foreach Cons [list IdenGlob ConsGlob SimiGlob AllGlob] { regsub "Glob" $Cons "Local" Loca set MSP(Con,$A,$Cons) [lsort -integer $MSP(Con,$A,$Cons)] if {[info exists EstGlo]} { unset EstGlo ; set EstGlo(bidon) 1 } foreach Pos $MSP(Con,$A,$Cons) { set EstGlo($Pos) 1 } set Seq [MSPFroMac $Nom Sequences $MonAccess] set L 0 set G 0 foreach C [split $Seq ""] { incr G if {$C!="-" && $C!="."} { incr L } if {[info exists EstGlo($G)]} { lappend MSP(Con,$A,$Loca) $L } } } set LesPos {} set SeqLength [string length [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"]] set MSP(Syn,$A,SeqLength) $SeqLength foreach i [NombresEntre 1 $SeqLength] { lappend LesPos $i } set MSP(Con,$A,NoLocal) [ListsComplement $LesPos $MSP(Con,$A,AllLocal)] } CanalSqlDisconnect return [MSP $Qui $Quoi $Quid] } proc MSPFroMac {args} { if {[PourWscope]} { return [FromMacsim {*}$args] } set Commande "ret FromMacsim [join $args { }]" set Res [QuestionDeScience MSP $Commande] return $Res } 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 MULTMAT {MA aTRANS IMOL} { upvar $aTRANS TRANS T_M A $MA 1 # MULTIPLICATION MATRICIELLE (3X3). # LA NOUVELLE MATRICE EST MISE E foreach K {1 2 3} { foreach L {1 2 3} { set TRANSO($K,$L) [set TRANS($K,$L,$IMOL)] } } foreach K {1 2 3} { foreach L {1 2 3} { set TRANS($K,$L,$IMOL) [expr { [set A($K,1)]*[set TRANSO(1,$L)]+ [set A($K,2)]*[set TRANSO(2,$L)]+ [set A($K,3)]*[set TRANSO(3,$L)]}] } } return } proc M_MM {A op B} { if {$op=="*"} { return [M_xMM $A $B] } else { return [M_lMM 1 $A $op 1 $B] } } proc M_Mwithout {M l c} { set F {} foreach V [lreplace $M $l $l] { lappend F [V_Vwithout $V $c] } return $F } proc M_R {R} { set T [Angle_R $R] set A [Axe_R $R] set c [expr cos($T)] set s [expr sin($T)] set u [expr 1.-$c] set norm [S_nV $A] if {[expr $norm < 1.e-10]} { set norm 1.0 } set AN [V_nV $A] set x [S_fromV $A 0] set y [S_fromV $A 1] set z [S_fromV $A 2] set xx [expr $x*$x*$u] set yy [expr $y*$y*$u] set zz [expr $z*$z*$u] set xy [expr $x*$y*$u] set yz [expr $y*$z*$u] set xz [expr $z*$x*$u] set xs [expr $x*$s] set ys [expr $y*$s] set zs [expr $z*$s] set M [M_create [V_create [expr $xx+$c ] [expr $xy+$zs] [expr $xz-$ys]] [V_create [expr $xy-$zs] [expr $yy+$c ] [expr $yz+$xs]] [V_create [expr $xz+$ys] [expr $yz-$xs] [expr $zz+$c ]] ] return $M } proc M_SM {s op A} { #rR tout faux ! set C {} foreach VA $A { set VR {} foreach x $VA { lappend VR [expr ($s*$x)] } lappend C $VC } return $C } proc M_T {aT} { upvar $aT T set Zero 0 foreach Bornes [array names T] { set I "undefined" set J "undefined" scan $Bornes "%d,%d" I J if {$I=="undefined" || $J=="undefined"} { continue } set Valeur [set T($Bornes)] if {[regexp "\." $Valeur]} { set Zero 0.0 } set BonT($I,$J) $Valeur lappend LesIs $I lappend LesJs $J } set LesIs [lsort $LesIs] set DebI [lindex $LesIs 0] set FinI [lindex $LesIs end] set LesJs [lsort $LesJs] set DebJ [lindex $LesJs 0] set FinJ [lindex $LesJs end] set M {} for {set I $DebI} {$I<=$FinI} {incr I} { set V {} for {set J $DebJ} {$J<=$FinJ} {incr J} { if {[info exists BonT($I,$J)]} { lappend V [set BonT($I,$J)] } else { lappend V $Zero } } lappend M $V } return $M } proc M_create {args} { set M {} foreach V $args { lappend M $V } return $M } proc M_fromM {M dx dy {fx end} {fy end}} { set F {} foreach V [lrange $M $dx $fx] { lappend F [V_fromV $V $dy $fy] } return $F } proc M_invM {M} { return [oldM_invM $M] #rR if {[IsScalar_M $M]} { set X [lindex [lindex $M 0] 0] return [Mcreate 1 [expr {1/$X}]] } set Minv {} set D [S_deterM $M] set pm 1 set i 0 foreach V $M { set W {} set j 0 foreach X $V { set P [M_Mwithout $M $i $j] lappend W [expr {$pm*[S_deterM $P]/$D}] set PM [expr {-$pm}] incr j } lappend Minv $W incr i } return $Minv } proc M_lMM {a A op b B} { #rR attention ceci ne permet pas le produit de matrice #rR ... c'est une combinaison linéaire set C {} foreach VA $A VB $B { set VC {} foreach x $VA y $VB { lappend VC [expr ($a*$x) $op ($b*$y)] } lappend C $VC } return $C } proc M_tM {A} { foreach V $A { set I -1 set LesI {} foreach x $V { incr I lappend Tempo($I) $x lappend LesI $I } } set T {} foreach I $LesI { lappend T [set Tempo($I)] } return $T } proc M_unit {{n 3} {Valeur 1.0}} { set M {} for {set j 0} {$j<$n} {incr j} { lappend M [V_unit $j $n $Valeur] } return $M } proc M_xMM {A B} { set TB [M_tM $B] set C {} foreach W $TB { lappend C [V_MV $A * $W] } #rR a rajoute la transposition 2014/01/06 ... c'etait faux depuis toujours !!! set R [M_tM $C] return $R } proc MaMarie {} { set RepertoireDuGenome [RepertoireDuGenome] puts "Mafft on LastSynMito\n" puts "repG $RepertoireDuGenome" puts "routine MaMarie dans ordali_misc.tcl" set rtfa [file join $RepertoireDuGenome tfasdescopains] set rmft [file join $RepertoireDuGenome mafft] set rnmd [file join $RepertoireDuGenome normd] set rout [file join $RepertoireDuGenome MsfFinaux] set rxml [file join $RepertoireDuGenome XmlFinaux] set rodb [file join $RepertoireDuGenome msf] set rora [file join $RepertoireDuGenome rascal] set rkal [file join $RepertoireDuGenome kalign] for {set i 1} {$i <= 29} {incr i} { catch {unset TNor} set e [format "SM%02d" $i] set ftfa [file join $rtfa $e] set fmft [file join $rmft $e] set fkal [file join $rkal $e] set fras [file join $rmft "${e}.ras"] set fkra [file join $rkal "${e}.ras"] set fodb [file join $rodb $e] set fora [file join $rora $e] set fout [file join $rout $e] set fxml [file join $rxml $e] set fnmd [file join $rnmd $e] set Ln [LesLignesDuFichier $fnmd] set Nc [lindex [split [string trim [lindex $Ln 0]] " "] end] set Nr [lindex [split [string trim [lindex $Ln 1]] " "] end] set TNor(DBCLUSTAL) $Nc set TNor(RASCAL) $Nr if {$Nc > $Nr} { set fori $fodb } else { set fori $fora } set MafftExe "/biolo/mafft/bin/mafft-linsi" set KalignExe "/biolo/kalign/kalign" # catch {exec $MafftExe --auto $ftfa > $fmft} Msg # MAFFT catch {exec $MafftExe $ftfa > $fmft} Msg exec [NorMDExe] $fmft > fmanor set manor [LesLignesDuFichier fmanor] set Nm [lindex $manor 0] set TNor(MAFFT) $Nm file delete -force fmanor catch {eval exec [ClustalwExe] -infile=$fmft -outfile=$fmft -output=gcg -convert} Msg3 catch {exec [RascalExe] $fmft $fras} Msg catch {exec [NorMDExe] $fras > fmanor} Msg2 set manor [LesLignesDuFichier fmanor] set Nrm [lindex $manor 0] set TNor(RASMAFFT) ${Nrm} file delete -force fmanor catch {exec $KalignExe $ftfa $fkal} Msg exec [NorMDExe] $fkal > fkanor set kanor [LesLignesDuFichier fkanor] set Nk [lindex $kanor 0] set TNor(KALIGN) $Nk file delete -force fkanor catch {eval exec [ClustalwExe] -infile=$fkal -outfile=$fkal -output=gcg -convert} Msg3 catch {exec [RascalExe] $fkal $fkra} Msg catch {exec [NorMDExe] $fkra > fmanor} Msg2 set manor [LesLignesDuFichier fmanor] set Nrk [lindex $manor 0] set TNor(RASKALIGN) ${Nrk} file delete -force fmanor # # Results : # puts "$e" set imx "" set nmax -999. foreach j [lsort [array names TNor]] { puts [format "\t%5.3f from %s" [set TNor($j)] $j] if {[set TNor($j)] >= $nmax} { set nmax [set TNor($j)] set imx $j } } puts "\t===> Take $imx" switch $imx { "DBCLUSTAL" - "RASCAL" {file copy -force $fori $fout} "MAFFT" {file copy -force $fmft $fout} "RASMAFFT" {file copy -force $fras $fout} "KALIGN" {file copy -force $fkal $fout} "RASKALIGN" {file copy -force $fkra $fout} } puts "" catch {exec [MacsimsExe] $fout $fxml} } exit } proc MacCourant {{quoi index}} { if {$quoi eq "index"} { return [set ::Defauts(IxMacCourant)] } else { return [set ::Defauts(NmMacCourant)] } } proc MacEdite {{v ""}} { set pkm [MacCourant] if {$v eq ""} { return [$::db eval {select edition from mac where pk_mac=$pkm}] } else { $::db eval {update mac set edition=$v where pk_mac=$pkm} } } proc MacSimToRsf {{XmlMacSimDirectory XmlContigs} {RSFdirectory RsfContigs}} { if { ! [file isdirectory [RepertoireDuGenome]/$XmlMacSimDirectory] } { exit 1 } if { ! [file isdirectory [RepertoireDuGenome]/$RSFdirectory] } { puts "Creating [RepertoireDuGenome]/$RSFdirectory" file mkdir [RepertoireDuGenome]/$RSFdirectory } # set files [glob -directory [RepertoireDuGenome]/$XmlMacSimDirectory *.xml] set files [glob -directory [RepertoireDuGenome]/$XmlMacSimDirectory *] foreach xml $files { # set outfile [RepertoireDuGenome]/$RSFdirectory/[regsub -nocase {.xml$} [regsub -nocase {^.*/} $xml {}] {.rsf}] set outfile [RepertoireDuGenome]/$RSFdirectory/[regsub -nocase {^.*/} $xml {}] puts "$xml -> $outfile" exec clustalw $xml -convert -output=RSF -outfile=$outfile } } proc Macsim {FileIn FileOut} { if {![file exists $FileIn]} {return} set Commande "eval exec /biolo/macsim/macsim $FileIn $FileOut" catch {eval $Commande} Message return $FileOut } proc Macsim2Jalview {FichierMacsimXml {QueryAccess ""}} { package require tdom if {$QueryAccess eq ""} {regexp {^[^.]+} [file tail $FichierMacsimXml] QueryAccess} set tfa [open "[file dirname $FichierMacsimXml]/$QueryAccess.jalview.tfa" "w"] set feat [open "[file dirname $FichierMacsimXml]/$QueryAccess.jalview.features" "w"] set fh [open $FichierMacsimXml "r"] set domDoc [dom parse -channel $fh] set root [$domDoc documentElement] close $fh foreach n [$root selectNodes "//sequence"] { set group [string trim [$n selectNodes "string(.//group\[1\])"]] lappend groups($group) $n } set lColors {} lappend lColors 0 "0,0,225" lappend lColors 1 "192,192,0" lappend lColors 2 "128,0,0" lappend lColors 3 "0,225,225" lappend lColors 4 "0,128,128" lappend lColors 5 "64,128,0" lappend lColors 6 "192,128,0" lappend lColors 7 "192,128,192" lappend lColors 8 "0,150,192" lappend lColors 9 "64,64,225" lappend lColors 10 "192,225,0" lappend lColors 11 "255,192,0" lappend lColors 12 "225,0,128" lappend lColors 13 "0,225,192" lappend lColors 14 "150,0,225" lappend lColors 15 "0,192,225" lappend lColors 16 "164,225,64" lappend lColors 17 "225,192,64" lappend lColors 18 "225,64,192" lappend lColors 19 "64,64,225" lappend lColors 20 "192,64,225" lappend lColors 21 "192,225,64" lappend lColors 22 "128,0,128" lappend lColors 23 "192,0,192" array set colors $lColors array set labelColors {} array set labelFeatures {} foreach g [lsort -integer [array names groups]] { foreach n $groups($g) { set access [string trim [$n selectNodes "string(.//accession)"]] set sequence [string trim [$n selectNodes "string(seq-data)"]] puts $tfa [formatFasta $access $sequence] array unset index array set index [seqPos2AlnPosIndex $sequence] foreach ft [$n selectNodes ".//fitem"] { set type [string trim [$ft selectNodes "string(ftype)"]] set start [string trim [$ft selectNodes "string(fstart)"]] set stop [string trim [$ft selectNodes "string(fstop)"]] set color [string trim [$ft selectNodes "string(fcolor)"]] set score [string trim [$ft selectNodes "string(fscore)"]] set note [string trim [$ft selectNodes "string(fnote)"]] if {$start > $stop} { set tmp $start set start $stop set stop $tmp } if {$start < 1} {continue} set color [expr $color % 24] set label "$type$color" if {![info exists labelColors($label)]} {set labelColors($label) $colors($color)} lappend labelFeatures($label) "$note\t$access\t-1\t$start\t$stop\t$label" } } puts $tfa [formatFasta "SPACER" ""] } foreach label [lsort [array names labelColors]] { puts $feat "$label\t$labelColors($label)" } foreach label [lsort [array names labelFeatures]] { puts $feat [join $labelFeatures($label) "\n"] } close $tfa close $feat exit 0 } proc MacsimDeOrdalie {} { computeBlocks SeqErrors PropagateFeatures return } proc MacsimExiste {} { return [file exists "[RepertoireDuGenome]/macsimXml"] } proc MacsimManu {Nom RepertoireDuMsf} { set FichierSource "[RepertoireDuGenome]/$RepertoireDuMsf/$Nom" set RepertoireDestination "[RepertoireDuGenome]/macsim" if {! [file exists $RepertoireDestination]} {file mkdir $RepertoireDestination} set FichierDestination "$RepertoireDestination/$Nom" set Commande "/biolo/macsim/macsim" #Espionne "$Commande $FichierSource $FichierDestination" catch {exec $Commande $FichierSource $FichierDestination >& /dev/null} } proc MacsimPourTous {RepMsf {PAB ""} {RepMacsim ""}} { # Attention, penser a lancer le macsim sur le meilleur alignement # Normalement c'est le msf leon # mais pas toujours: voir le fichier normd if {$PAB==""} {return} if {![file exists $RepMacsim]} {file mkdir $RepMacsim} foreach Fichier [glob -nocomplain "$RepMsf/$PAB*"] { set Nom [file tail $Fichier] Espionne $Nom set FichierMacsim "$RepMacsim/$Nom" if {[file exists "$RepMacsim/$Nom.rsf"]} {continue} if {[PasTouche $Nom]} {continue} PasTouche $Nom Macsim $Fichier $FichierMacsim if {[file exists "$RepMacsim/$Nom.rsf"]} {FinPasTouche $Nom} #Sauve $MacsimOut dans $FichierMacsim #set Commande "eval exec /biolo/macsim/macsim $Fichier $FichierMacsim" #catch {eval $Commande} Message #Sauve $FichierMacsim dans $FichierMacsim #set MacsimOut [eval exec $Commande] #Espionne "$Nom done" } } proc MacsimXmlComplet {} { set i 0 foreach FichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsims/*.xml"] { set Box [file tail $FichierMacsim] regsub {\.[^\.]+$} $Box "" Box if {![file exists "[RepertoireDuGenome]/macsimXml/$Box"]} { incr i; Espionne "manque dans macsimXml $Box" } } Espionne "i $i" } proc Macsims {FichierMsf {FichierXml ""} {FichierRsf ""} {FichierLog ""} {Delete ""}} { LogWscope "Macsims $FichierMsf $FichierXml $FichierRsf $FichierLog $Delete" #rR y a encore un probleme ... 2011/04/20 if {$FichierXml==""} { set FichierXml "GetXmlText" } if {$FichierRsf==""} { set FichierRsf "DeleteRsfFile" } set GetRsf "GetRsfFile" if {$FichierRsf=="GetRsfText" || $FichierRsf=="DeleteRsfFile"} { set GetRsf $FichierRsf set FichiersRsf "[TmpFile].rsf" } set GetXml "GetXmlFile" if {$FichierXml=="GetXmlText" || $FichierXml=="DeleteXmlFile"} { set GetXml $FichierXml set FichierXml "[TmpFile].xml" } set Message [ExecuteMacsim $FichierMsf $FichierRsf] if {$Message!=""} { Warne $Message if {$FichierLog!=""} { AppendAuFichier $FichierLog $Message } } set FichierRsfRsf "$FichierRsf.rsf" set FichierRsfXml "$FichierRsf.xml" if {[file exists $FichierRsfXml]} { file rename $FichierRsfXml $FichierXml } if { ! [file exists $FichierRsfRsf]} { set MonMessage "$FichierRsfRsf was not created. I got the message\n$Message" Warne $MonMessage if {$FichierLog!=""} { AppendAuFichier $FichierLog $MonMessage } } else { file rename $FichierRsfRsf $FichierRsf } foreach Mot [split $Delete "_"] { set F "Fichier$Mot" if {[regexp {\.$} $F]} { set FSansPoint [string trimright $F "."] if { ! [info exists $FSansPoint]} { continue } foreach FF [glob -nocomplain "[set $FSansPoint].*"] { file delete $FF } } else { if { ! [info exists $F]} { continue } foreach FF [glob -nocomplain "[set $F]*"] { file delete $FF } } } if {$GetRsf=="DeleteRsfFile"} { file delete $FichierRsf } if {$GetXml=="DeleteXmlFile"} { file delete $FichierXml } if {$GetRsf=="GetRsfText"} { set Rsf [ContenuDuFichier $FichierRsf] file delete $FichierRsf return $Rsf } if {$GetXml=="GetXmlText"} { set Xml [ContenuDuFichier $FichierXml] file delete $FichierXml return $Xml } return $FichierXml } proc MacsimsCodification {SX El} { global MacsimsCodification set El [string tolower $El] if {[info exists MacsimsCodification($SX,$El)]} { return $MacsimsCodification($SX,$El) } if {[info exists MacsimsCodification("EstCharge")]} { return $Ele } set MacsimsCodification("EstCharge") 1 set MacsimsCodification(Sql,macsim) "MACSIMS" set MacsimsCodification(Sql,alignment) "MACSIMS" set MacsimsCodification(Sql,sequence) "SEQ" set MacsimsCodification(Sql,column-score) "COLSCORE" set MacsimsCodification(Sql,freetext) "FREETEXT" set MacsimsCodification(Sql,consensus) "CONSENSUS" set MacsimsCodification(Sql,surface-accessibility) "SURFACC" set MacsimsCodification(Xml,macsims) "macsim" set MacsimsCodification(Xml,alignment) "aln" set MacsimsCodification(Xml,sequence) "seq" set MacsimsCodification(Xml,column-score) "colsco" set MacsimsCodification(Xml,freetext) "freetext" set MacsimsCodification(Xml,consensus) "cons" set MacsimsCodification(Xml,surface-accessibility) "suracc" set MacsimsCodification(ListOf,keys) [lsort -unique [array names MacsimsCodification]] return [MacsimsCodification $SX $El] } proc MacsimsExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./macsim" } if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { return [file join $OrdBinDir "macsim"] } else { return "/biolo/macsim/macsim" } } else { set lexe [file join $OrdBinDir "macsim.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc MacsimsFromText {TexteMsf} { if { ! [regexp "\n" $TexteMsf] && [file exists $TexteMsf]} { set TexteMsf [ContenuDuFichier $TexteMsf] } if { ! [regexp "\n" $TexteMsf]} { set TexteMsf [Base64Decode $TexteMsf] } set FichierMsf "[TmpFile].msf" Sauve $TexteMsf dans $FichierMsf set Xml [Macsims $FichierMsf "GetXmlText"] file delete $FichierMsf return $Xml } proc MacsimsGrid {pab} { global DefautsPipe global PipeCollection global BestPdb global NQuery global laddSeq set bchx [set DefautsPipe(Macsims,bestmsf)] if {$PipeCollection} { if {[QuelProjet] eq "ms2phdb"} { set fileBestMsf [file join [RepertoireDuGenome] "empreinte" $pab.msf] if {![file exists $fileBestMsf]} {return 0} } else { set fileNormd [file join [RepertoireDuGenome] "normd" $pab] if {![file exists $fileNormd]} {return 0} set rbest [string tolower [DefineBestMsfPipe $fileNormd $bchx]] if {$rbest eq "no file"} {return 0} puts "rbest est $rbest" AjouteAuLogPipe "rbest est $rbest" #AF #verif presence addSeq si necessaire if {[QuelProjet] eq "addSeq" && $rbest eq "leon" } { set rbest [VerifPresenceAddSeq $pab] if {$rbest ne "leon"} { puts "\[addSeq\] bestAli est $rbest" AjouteAuLogPipe "\[addSeq\] bestAli est $rbest" } } ## set fileBestMsf [file join [RepertoireDuGenome] $rbest $pab] } set fileMacsimsTmp [file join [RepertoireDuGenome] "macsims" $pab.tmp] set fileMacsims [file join [RepertoireDuGenome] "macsims" $pab.xml] if {[file exists $fileMacsims]} {return 1} } else { set fileNormd "[file rootname $pab].normd" if { [file exists $fileNormd]} { set rbest [string tolower [DefineBestMsfPipe $fileNormd $bchx]] if {$rbest eq "no file"} {return 0} puts "rbest est $rbest" AjouteAuLogPipe "rbest est $rbest" if {[QuelProjet] eq "addSeq" && $rbest eq "leon" } { set rbest [VerifPresenceAddSeq $pab] if {$rbest ne "leon"} { puts "\[addSeq\] bestAli est $rbest" AjouteAuLogPipe "\[addSeq\] bestAli est $rbest" } } if {[QuelProjet] eq "addSeq" && $rbest eq ".leon" } { set rbest [VerifPresenceAddSeq $pab] if {$rbest ne ".leon"} { puts "[addSeq] bestAli est $rbest" AjouteAuLogPipe "\[addSeq\] bestAli est $rbest" } } if {$rbest eq "msf"} { set rbest "" } else { set rbest ".$rbest" } set fileBestMsf "[file rootname $pab]$rbest.msf" set fileMacsimsTmp "[file rootname $pab].macsims.tmp" set fileMacsims "[file rootname $pab].macsims.xml" } else { set fileBestMsf $pab set fileMacsimsTmp "[file rootname $pab].macsims.tmp" set fileMacsims "[file rootname $pab].macsims.xml" } } # Calcul du MACSIM set CommandeMacsims "[MacsimsExe] $fileBestMsf $fileMacsimsTmp" if {[catch {eval exec $CommandeMacsims} Message]} {puts "$Message"} if {[QuelProjet] eq "ms2phdb"} { set CommandeQuery2First "[Query2FirstExe] $fileMacsimsTmp.xml $NQuery $fileMacsims" if {[catch {eval exec $CommandeQuery2First} Message]} {puts "$Message"} } else { catch {file rename -force $fileMacsimsTmp.xml $fileMacsims} } if {[file exists $fileMacsims]} { AjouteAuLogPipe "macsims = ok" return 1 } else { AjouteAuLogPipe "macsims failed" return 0 } } proc MacsimsInfo {args} { global MacsimsInfo #rR calls ParseMACSIMS from Nicolas Gagniere set Qui [lindex $args 0] set Quoi [lindex $args 1] if {[regexp -nocase "LoadXml" $Qui]} { set Fichier $Quoi if {[info exists MacsimsInfo(File)]} { if {[string equal -nocase "ReLoadXml" $Qui] || $MacsimsInfo(File)!=$Fichier} { unset MacsimsInfo } } if { ! [info exists MacsimsInfo(File)]} { if {[FileAbsent $Fichier]} { FaireLire "$Fichier\ndoesn't exist" return "" } ParseMACSIMS $Fichier MacsimsInfo # parray MacsimsInfo; exit; set MacsimsInfo(File) $Fichier set LesKey1 {} set LesFeaturesKeys {} foreach X [array names MacsimsInfo] { set LesKey [split $X ","] set Key1 [lindex $LesKey 1] lappend LesKey1 $Key1 if {$Key1=="Features"} {lappend LesFeaturesKeys [lindex $LesKey 3]} } set LesKey1 [ListeSansDoublon $LesKey1] set MacsimsInfo(ListOf,Key1) $LesKey1 set LesFeaturesKeys [ListeSansDoublon $LesFeaturesKeys] set MacsimsInfo(ListOf,FeaturesKeys) $LesFeaturesKeys set args [lrange $args 2 end] # parray MacsimsInfo if {$args=={}} { return $MacsimsInfo(File) } } } set Tout [join $args ","] if {[info exists MacsimsInfo($Tout)]} { return $MacsimsInfo($Tout) } return "" } proc MacsimsOlida {FichierMSF FichierOut} { if {![file isfile $FichierMSF]} {return} if {[catch {exec [ExecPath macsim] $FichierMSF $FichierOut >& /dev/null} Message] == 1} { Espionne "Error from macsims. Message follows \n$Message" } return $FichierOut } proc MacsimsOnWeb {Msf {FichierXml ""}} { if {$FichierXml==""} { set FichierXml "GetXml" } if { ! [regexp "\n" $Msf] && [file exists $Msf]} { set Msf [ContenuDuFichier $Msf] } set Msf64 [Base64Encode $Msf] set Query [::http::formatQuery "TexteMsf" $Msf64] ] set Xml [HttpGetUrl "[LbgiUrl]/~ripp/cgi-bin/WscopeServer.tcl?science=Zero&commande=MacsimsFromText" $Query] if {$FichierXml=="GetXml"} { return $Xml } if {[regexp {^//} $FichierXml]} { regsub {^//} $FichierXml "[RepertoireDuGenome]/" FichierXml } return [Sauve $Xml dans $FichierXml] } proc MacsimsPourAnnotation {Nom {AvecOuSansOrganismeEtudie ""}} { set FichierSource "[RepertoireDuGenome]/prottfa/$Nom.leon.msf" if {![file isfile $FichierSource]} { set FichierSource "[RepertoireDuGenome]/msfleon/$Nom" if {![file isfile $FichierSource]} {return} } set FichierSortie "[RepertoireDuGenome]/prottfa/$Nom.macsims" if {[OptionsProtocoleAnnotation "OptionsGlobales,AvecGarde"] && [file isfile $FichierSortie]} {return} set Commande "/biolo/macsim/macsim" catch {exec $Commande $FichierSource $FichierSortie} } proc MacsimsReduit {} { # macsims reduit n'enleve pas les gaps inutiles package require tdom set RepertoireProches "[RepertoireDuGenome]/ProchesQuery85" foreach Box [ListeDesPABs] { if {[regexp -nocase "Mouse" [RepertoireDuGenome]] || [regexp -nocase "Rat" [RepertoireDuGenome]]} { set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} } else { set Cluster [ExtraitInfo $Box "Cluster"] set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ajout.ordonne" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.new.ordonne"} } set fh [open $FileMacsims "r"] dom parse -channel $fh doc close $fh $doc documentElement root dom createDocument macsim doc2 $doc2 documentElement root2 $doc2 createElement alignment ali $root2 appendChild $ali set ListeDesGroup [GroupDeMaSelection $Box] foreach seq [$root selectNodes "//sequence"] { set Name [$seq selectNodes "string(./seq-name)"] set Group [$seq selectNodes "string(./seq-info/group)"] foreach GroupVoulu $ListeDesGroup { if {$Group==$GroupVoulu} { $ali appendChild $seq break } } } set fh2 [open $FileMacsims.reduit "w"] puts $fh2 "" $doc2 asXML -channel $fh2 -doctypeDeclaration 0 close $fh2 $doc delete $doc2 delete } } proc MacsimsSpliRetPourNaomi {{Compress ""}} { set Compress [regexp -nocase "^Comp" $Compress] set SourceDir "[RepertoireDuGenome]/macsimXml" if {$Compress} { set DestinDir "[RepertoireDuGenome]/macsimXmlPourNaomiGZ" } else { set DestinDir "[RepertoireDuGenome]/macsimXmlPourNaomi" } file mkdir $DestinDir set I 1 foreach Nom [ListeDesPABs] { if {[incr I -1]==0} { Espionne $Nom; set I 100 } set Clus [ExtraitInfo $Nom "Cluster"] set Fic "$SourceDir/$Nom.orgord.aj" if {[FileAbsent $Fic]} { set Fic "$SourceDir/$Nom.orgord" } if {[FileAbsent $Fic]} { continue } if {$Compress} { set Out "$DestinDir/$Nom-$Clus.xml.gz" exec gzip -c $Fic > $Out } else { set Out "$DestinDir/$Nom-$Clus.xml" file copy $Fic $Out } } } proc MacsimsVariables {{Init ""}} { #rR Si Init n initialise toutes les listes a vide et les tableau au tableau vide #rR On rend [list $LesL $LesT] #rR les strings (AlnScore, etc.) sont traités comme des listes set Init [regexp -nocase {^(Y|1|Init)} $Init] set LesL [list AlnName AlnScore AlnNote LNDG LNOrdali] foreach L $LesL { global $L if {$Init} { set $L {} } } set LesT [list Sequences TabSF TDesHydro TDesSeqnames TDespI TDesAccess TDesPhylum TDesGO TDuLineage TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesBId TDesDescriptifs TDesMolW TDesStatus TDesWeight TDesSense TDesScore TDesScore TDesLength TColScore LesSeqsDuGroupe SDG LesSequencesAssocieesClassesCanon] foreach T $LesT { global $T if {$Init} { array set $T [list] } } return [list $LesL $LesT] # foreach t {TDesHydro TDesSeqnames TDespI TDesAccess TDesPhylum TDesGO TDuLineage TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesBId TDesDescriptifs TDesMolW} { # array set $t [list] # } # return } proc Maf2fasta {RefSeq Ordered_ProjectedMafFile FileOUT {OutputFormat ""} {Beg ""} {End ""}} { ### Reformats a projected MAF file (multiple alignment) in MultiPipMaker or MultiFastaFormat # Beg and End = begin and end of the projected multiple alignment to reformat # OutputFormat: default ("") --> MultiPipMaker # fasta --> fasta # fasta2 --> fasta with 50 residues long lines #Espionne "Maf2fasta ..." #set Commande "exec [PATH maf2fasta] $RefSeq $Ordered_ProjectedMafFile $Beg $End $OutputFormat > $FileOUT" set Commande "exec maf2fasta $RefSeq $Ordered_ProjectedMafFile $Beg $End $OutputFormat > $FileOUT" ##################################################################################################### #puts "$Commande" if {[catch {eval $Commande} Message]} {Espionne $Message ; return} return $FileOUT } proc Maf_order {MafFile LesSpecies MafOrderedFile} { ### Execution du programme maf_order ### # LesSpecies = species that need to be included in the ordered file # the ordering of the components in a maf block follows the ordering of the species names in the arguments. # Species not in the arguments are excluded #Espionne "Maf_order ..." if {![file exists $MafFile]} {puts "MafFile: $MafFile does not exists" ; return} #set Commande "exec [PATH maf_order] $MafFile " set Commande "exec maf_order $MafFile " foreach Specie $LesSpecies { append Commande " $Specie" } append Commande " > $MafOrderedFile" #puts "Commande: $Commande" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $MafOrderedFile } proc Maf_project {MafFile ReferenceSequence Maf_projectMafFile} { ### Execution du programme maf_project ### # Reference seq in the top row of each block # # Maf blocks ordered by the starting position of thetop row # Espionne "Maf_project ..." if {![file exists $MafFile]} {Espionne "MafFile: $MafFile does not exists" ; return} #set Commande "exec [PATH maf_project] $MafFile $ReferenceSequence > $Maf_projectMafFile" set Commande "exec maf_project $MafFile $ReferenceSequence > $Maf_projectMafFile" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $Maf_projectMafFile } proc Mafft_AddSequences {fali fseqs} { if {[file exists $fali]} { set ali [ContenuDuFichier $fali] } elseif {[string first "\n" $fali] > -1} { set ali $fali } elseif {[llength $fali] > 1} { set ali [join $fali "\n"] } if {[file exists $fseqs]} { set seqs [ContenuDuFichier $fseqs] } elseif {[string first "\n" $fseqs] > -1} { set seqs $fseqs } elseif {[llength $fseqs] > 1} { set seqs [join $fseqs "\n"] } set url "http://ddbj.nig.ac.jp/wabi/mafft/" set query [::http::formatQuery "format" "text" "querySequence" "$ali" "addSequence" "$seqs" "parameters" "--globalpair --maxiterate 1000" "result" "www"] set ok [HttpCopy $url res $query] puts "ok submit $ok" puts "res submit $res" if {! $ok} { puts "ERROR in Mafft_AddSequences !\nCannot send request to server\n" return "" } set id [lindex $res 0] regsub -all { +} $id " " id set id [lindex [split $id " "] 1] puts "id= $id" # check job status set urlStatus "$url${id}" while {1} { set ok [HttpCopy $urlStatus res] puts "ok status $ok" puts "res= \n$res" if {! $ok} { puts "ERROR in Mafft_AddSequences !\nCannot retrieve job status !\n" return "" } set istatus [lsearch -regexp $res {^status:}] set statusLine [lindex $res $istatus] regsub -all { +} $statusLine " " statusLine set status [lindex [split $statusLine " "] 1] puts "status $status" if {$status in {"waiting" "running"}} { after 5000 } elseif {$status eq "finished"} { break } else { puts "ERROR in Mafft_AddSequences !\nUnknown status : $status" return "" } } # Now get results set urlResult "$url${id}?info=result" puts $urlResult set resR "" set ok [HttpCopy $urlResult resR] set tmp [HttpCopy $urlResult] puts "tmp\n$tmp" puts "ok result $ok" puts "res=\n$resR" if {! $ok} { puts "ERROR in Mafft_AddSequences !\nCannot get results\n" return "" } return $resR } proc Mafft_AddSequences_local {fali fseqs} { if {! [file exists $fali]} { if {[llength $fali] > 1} { set fali [join $fali \n] } set nali "/tmp/ali_[pid]_[clock scan now].tfa" set o [open $nali w] puts $o $fali close $o } else { set nali $fali } if {! [file exists $fseqs]} { if {[llength $fseqs] > 1} { set fseqs [join $fseqs \n] } set nseqs "/tmp/seqs_[pid]_[clock scan now].tfa" set o [open $nseqs w] puts $o $fseqs close $o } else { set nseqs $fseqs } set nout "/tmp/out_[pid]_[clock scan now].tfa" #set pb [catch {exec csh -c "setmafft ; mafft --add $nseqs $nali > $nout 2> /tmp/error.log"} out] set pb [catch {exec csh -c "setmafft ; mafft --add $nseqs $nali > $nout"} out] set res [ContenuDuFichier $nout] if {[string index $res 0] eq ">"} { set res [split $res \n] set pb 0 } if {$pb} { puts "Error in MAFFT !" set res "" puts "\nMsg:\n$out" #set pb [catch {exec /biolo/mafft/mafft --add $nseqs $nali > $nout 2> /tmp/error.log"} out] } file delete $nali $nseqs $nout return $res } proc MagosDir {} { return "/genomics/link/Magos" } proc Maigrir {{Quoi blastp} {Combien ""} {NomVoulu ""} {NewRep ""}} { if {$Combien==""} { set Combien 13 } set Rep "[RepertoireDuGenome]/$Quoi" if {$NewRep==""} { set NewRep $Quoi } if { ! [regexp "/" $NewRep]} { set NewRep "[RepertoireDuGenome]/$NewRep" } if { ! [OuiOuNon "I will reduce the blast segment alignments to $Combien\n from $Rep \nto $NewRep\n OK ?" 0]} { return 0 } if {$NomVoulu==""} { set Liste [ListeDesPABs] } else { set Liste [list $NomVoulu] } foreach Nom $Liste { set FichierAvant "$Rep/$Nom" if { ! [file exists $FichierAvant]} { continue } set FichierApres "$NewRep/$Nom" if {[file exists $FichierApres]} { continue } set ListeDesLignes [LesLignesDuFichier $FichierAvant] set LongAvant [llength $ListeDesLignes] scan [join [lrange $ListeDesLignes 0 3] " "] "%s" PremierMot set PremierMot [string toupper $PremierMot] # set PourBlastP [string equal -nocase $PremierMot "BLASTP"] # set PourBallast [string equal -nocase $PremierMot "Ballast"] # set PourTBlastX [string equal -nocase $PremierMot "TBLASTX"] # set PourBlastN [string equal -nocase $PremierMot "BLASTN"] # set PourTBlastN [string equal -nocase $PremierMot "TBLASTN"] set PourBlastP [expr ! [string compare $PremierMot "BLASTP"]] set PourBlastX [expr ! [string compare $PremierMot "BLASTX"]] set PourTBlastX [expr ! [string compare $PremierMot "TBLASTX"]] set PourBlastN [expr ! [string compare $PremierMot "BLASTN"]] set PourTBlastN [expr ! [string compare $PremierMot "TBLASTN"]] set PourBallast [expr ! [string compare $PremierMot "BALLAST"]] if { ! [expr $PourBlastP+$PourBlastX+$PourBallast+$PourTBlastX+$PourBlastN+$PourTBlastN] == 1} { Warne "$Fichier is not a blast file. I skipp it." continue } set Encore $Combien set LeNouveau {} set LongApres 0 foreach Ligne $ListeDesLignes { if {[regexp "^>" $Ligne]} { if { ! [incr Encore -1]} { break } } incr LongApres lappend LeNouveau $Ligne } SauveLesLignes $LeNouveau dans $FichierApres Espionne "$Nom a maigri de $LongAvant a $LongApres" } return 1 } proc MailAuxDestinataires {FichierTXTCommandeOligos {LesDestinataires ""} {Sujet ""}} { if {$LesDestinataires=={}} { set LesDestinataires {} lappend LesDestinataires "Peggy.Mathon@igbmc.u-strasbg.fr" lappend LesDestinataires "Marie.Herledan@igbmc.u-strasbg.fr" lappend LesDestinataires "Marie-France.Tinland@igbmc.u-strasbg.fr" lappend LesDestinataires "Didier.Busso@igbmc.u-strasbg.fr" lappend LesDestinataires "Sylvia.Eiler@igbmc.u-strasbg.fr" lappend LesDestinataires "Arnaud.Poterszman@igbmc.u-strasbg.fr" lappend LesDestinataires "Raymond.Ripp@igbmc.u-strasbg.fr" lappend LesDestinataires "europrim@invitrogen.com" set LesDestinataires [ChoixDesPresents $LesDestinataires] } if {$Sujet==""} { set Sujet [Entre "[file tail $FichierTXTCommandeOligos]"] } if {$LesDestinataires=={}} { return {} } foreach Destinataire $LesDestinataires { Espionne [MailFichier $FichierTXTCommandeOligos $Destinataire $Sujet] } return $LesDestinataires } proc MailFichier {Fichier {Destinataire ""} {Sujet ""}} { global env if {$Destinataire==""} { set MySelf [set env(USER)] set Destinataire "$MySelf@lbgi.fr" } if { ! [file exists $Fichier]} { FaireLire "$Fichier doesn't exist. Sorry" return "" } if {$Sujet==""} { set Sujet [file tail $Fichier] regsub ".txt$" $Sujet "" Sujet set Subject "Commande oligos $Sujet" } else { set Subject $Sujet } set Message "" set CommandeMail "mail" if {[info exists env(HOSTTYPE)] && $env(HOSTTYPE)=="alpha"} { set CommandeMail "mailx" } if {[catch {exec $CommandeMail -s $Subject $Destinataire < $Fichier} Message]} { FaireLire "Error during mail. \nI got following error message :\n$Message" return $Message } return $Fichier } proc MailLbgi {{Qui ""} {Quoi ""}} { global MailLbgi if {$Qui=="" && $Quoi==""} { set Qui "ListOf" ; set Quoi "nmpnlb" } set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {$Qui=="LIST"} { set Qui "LISTOF" } if {$Qui=="RELOAD" && [info exists MailLbgi]} { unset MailLbgi set Qui "" set Quoi "" return [MailLbgi] } regsub -all "LOGIN" $Quoi "L" Quoi regsub -all "PRENOM" $Quoi "P" Quoi regsub -all "NOM" $Quoi "N" Quoi regsub -all "MAIL" $Quoi "M" Quoi if {[info exists MailLbgi($Qui,$Quoi)]} { if {[PourWscope] && $Qui=="LISTOF"} { return "
    \n[join $MailLbgi($Qui,$Quoi) \n]\n
    " } return $MailLbgi($Qui,$Quoi) } if {[info exists MailLbgi("EstCharge")]} { if {[regexp {^[LNPMB]+$} $Quoi]} { set LesL $MailLbgi(LISTOF,L) set LesN $MailLbgi(LISTOF,N) set LesP $MailLbgi(LISTOF,P) set LesM $MailLbgi(LISTOF,M) set LeToutBeau {} foreach X [split $Qui ","] { set PourQui($X) 1 } EspionneL [array get PourQui] foreach L $LesL N $LesN P $LesP M $LesM { set B "$P.$N" if {$Qui!="LISTOF" && ! [info exists PourQui([string toupper $L])] && ! [info exists PourQui([string toupper $N])] && ! [info exists PourQui([string toupper $M])] && ! [info exists PourQui([string toupper $B])]} { continue } set LaLigne {} foreach X [split $Quoi ""] { set F "%-18s" if {$X=="M"} { set F "%40s" } if {$X=="B"} { set F "%-30s" } lappend LaLigne [format $F [set $X]] } lappend LeToutBeau [join $LaLigne " "] } set LeToutBeau [lsort $LeToutBeau] if {[PourWscope]} { return "
    \n[join $LeToutBeau \n]\n
    " } return $LeToutBeau } return "" } set MailLbgi("EstCharge") 1 set MailLbgi(FILENAME,) "[HomeRipp]/rh/maillbgi.txt" set LesLNPM [LesLignesDuFichier $MailLbgi(FILENAME,)] set LeToutBeau {} foreach LNPM $LesLNPM { regsub -all {[ ]+} $LNPM " " LNPM lassign [split $LNPM " "] l n p m set b "$p.$n" lappend LeToutBeau [format "%-18s %-18s %-18s %40s %-30s" $l $n $p $m $b] set L [string toupper $l] set N [string toupper $n] set P [string toupper $p] set B [string toupper $b] set M [string toupper $m] set MailLbgi($L,L) $l set MailLbgi($L,N) $n set MailLbgi($L,P) $p set MailLbgi($L,M) $m set MailLbgi($L,B) $b set MailLbgi($N,L) $l set MailLbgi($N,N) $n set MailLbgi($N,P) $p set MailLbgi($N,M) $m set MailLbgi($N,B) $b set MailLbgi($B,L) $l set MailLbgi($B,N) $n set MailLbgi($B,P) $p set MailLbgi($B,M) $m set MailLbgi($B,B) $b set MailLbgi($M,L) $l set MailLbgi($M,N) $n set MailLbgi($M,P) $p set MailLbgi($M,M) $m set MailLbgi($M,B) $b lappend MailLbgi($P,L) $l lappend MailLbgi($P,N) $n lappend MailLbgi($P,P) $p lappend MailLbgi($P,B) $b lappend MailLbgi($P,M) $m lappend MailLbgi(LISTOF,L) $l lappend MailLbgi(LISTOF,N) $n lappend MailLbgi(LISTOF,P) $p lappend MailLbgi(LISTOF,B) $b lappend MailLbgi(LISTOF,M) $m } set MailLbgi(LISTOF,ALL) $LeToutBeau return [MailLbgi $Qui $Quoi] } proc MailServerChooser {} { global db CMDef set Lname [$db eval {select distinct name, username from mailbox}] if {[llength $Lname] == 2} { return } # Are we coming from MMMInterface ? if {[llength [winfo children .]] > 0} { set w .chooser toplevel $w } else { set w . } grid columnconfig $w all -weight 1 grid rowconfig $w all -weight 1 $w configure -background $::CMDef(Background) set w "$w.ftop" ttk::frame $w -style MMM.TFrame grid $w -row 0 -column 0 -sticky news -padx 20 -pady 20 grid rowconfig $w all -weight 1 grid columnconfig $w all -weight 1 ttk::label $w.lab -text "Choose a mailbox :" -style MMM.TLabel grid $w.lab -row 0 -column 0 -sticky ew # frame for mailboxxes ttk::frame $w.fb -style MMM.TFrame grid $w.fb -row 1 -column 0 -sticky news set r 0 ; set c 0 foreach {name user} $Lname { set nameNS [string map {" " "" "\"" "" ' ""} $name] button $w.fb.b$nameNS -text "\n $name \n" -font CMFontBold -background green -foreground white -command [list ChangeMailbox $name $user $w] grid $w.fb.b$nameNS -row $r -column $c -padx 5 -pady 5 incr c if {$c == 3} { set c 0 incr r } } FenetreAuCentre $w tkwait variable ::CMDef(imapID) update idletasks return } proc MainJumeaux {{Qui LaTotale} {NOuP ""} {Banque ""} {PIdentity 0.95} {PCoverQuery 0.95} {PCoverSubject 0.95}} { Wup "Marche a suivre pour se debarasser des Jumeaux" Wup "Calcul les blast pour toutes les sequences contre une banques constituee de toutes nos sequences" Wup "Calcul des plus proches: Identite globale classique + Recouvrement Q/S et S/Q" Wup "Creation de 4 types de fichier:" Wup " Jumeaux.log : fichier contenant les infos de l'etape de calcul des plus proches" Wup " TousLesJumeaux : fichier contenant chaque PAB et ces Jumeaux" Wup " TousLesJumeaux.trie : fichier debarasse des redondances et avec les jumeaux" Wup " TousLesJumeaux.final : fichier ordonnee en fonction de la banque et de la taille" global RepDesSequences set DirDesJumeaux "[RepertoireDuGenome]/Jumeaux" set FichierJumeaux "$DirDesJumeaux/TousLesJumeaux" set FichierJumeauxTrie "${FichierJumeaux}.trie" set FichierJumeauxFinal "${FichierJumeaux}.final" if {! [file exists $DirDesJumeaux]} {file mkdir $DirDesJumeaux} if {! [OuiOuNon "Would you like to determine first Twins ?"]} {return ""} set Texte "You will need a few step to begin:\n" append Texte "Step 0-1 : Blast database creation and selection\n" append Texte "Step 0-2 : Query selection\n" append Texte "Step 0-3 : Parameters setting\n" append Texte " Global ID percent\n" append Texte " Alignement Cover percent (Query over Subject)\n" append Texte " Alignement Cover percent (Subject over Query)\n\n" append Texte "Then it will go with 4 processing steps:\n" append Texte "Step 1 : Blast searches all against all\n" append Texte "Step 2 : Twins determination for each sequence\n" append Texte "Step 3 : Removing each duplicated cluster of twins\n" append Texte "Step 4 : Ranking within each cluster the best sequence (Database, Length)" FaireLire "$Texte" #1-BLAST DATABASE CREATION AND SELECTION if {! [OuiOuNon "Have you already define the blast database ?"]} { while {1} { if {[OuiOuNon "Have you a file with all your sequences in fasta format (tfa)"]} { set NomDuFichierTFA [tk_getOpenFile -title "Choose a file" -initialdir "[RepertoireDuGenome]"] if {$NomDuFichierTFA==""} {continue} else {break} } else { if {[OuiOuNon "Choose a directory containing all your fasta files\nThen enter the name of the file which will contain all of them and at the end the name of the blast database"]} { while {1} { set RepDeTravail [tk_chooseDirectory -title "Choose a directory" -initialdir "[RepertoireDuGenome]"] if {$RepDeTravail ==""} {continue} else {break} } while {1} { set NomDuFichierTFA [Entre "NomDuFichierTFA" ] if {$NomDuFichierTFA==""} {continue} else {break} } set NomDuFichierTFA "$DirDesJumeaux/$NomDuFichierTFA" ReunitMesTFAs $RepDeTravail $NomDuFichierTFA break } } } set NOuP "" while {$NOuP==""} { if {[OuiOuNon "Are they proteins ?"]} { set NOuP "P" } elseif {[OuiOuNon "So DNA ?"]} { set NOuP "N" } else {set NOuP ""} } while {1} { set NomDeLaBanque [Entre "NomDeLaBanqueBlast"] if {$NomDeLaBanque==""} {continue} else {break} } set NomDeLaBanque "$DirDesJumeaux/$NomDeLaBanque" CreeBanqueBlastDuProjet $NomDuFichierTFA $NomDeLaBanque $NOuP } else { while {1} { FaireLire "Please select blast database.\nYou can choose any .xxx file from your database" set NomDeLaBanque [tk_getOpenFile -title "Choose blast database" -initialdir "$DirDesJumeaux"] if {$NomDeLaBanque==""} {continue} set NOuP "" while {$NOuP==""} { if {[OuiOuNon "Are they proteins ?"]} { set NOuP "P" } elseif {[OuiOuNon "So DNA ?"]} { set NOuP "N" } else {set NOuP ""} } break } } if {[regexp {\.[a-z]{3}$} $NomDeLaBanque]} {regsub {\.[a-z]{3}$} $NomDeLaBanque "" NomDeLaBanque} if {$NOuP == "N"} { set RepDesSequences "[RepertoireDuGenome]/nuctfa" } elseif {$NOuP == "P"} { set RepDesSequences "[RepertoireDuGenome]/prottfa" } else { set RepDesSequences "[RepertoireDuGenome]/nuctfa" } #2-QUERY SELECTION if {[OuiOuNon "I will use $RepDesSequences to search your Query Sequences.\nWould you like to change it?"]} { while {1} { set RepDesSequences [tk_chooseDirectory -title "Choose a directory" -initialdir "[RepertoireDuGenome]"] if {$RepDesSequences==""} {continue} else {break} } } if {[OuiOuNon "Would you like to use only a subset of all Querys ?"]} { set Qui "" set LesQui "" set LesQuerys [glob -nocomplain -directory "$RepDesSequences" "*"] regsub -all "$RepDesSequences/" $LesQuerys "" LesQuerys set Qui [MorceauxChoisis $LesQuerys] #set Qui [MorceauxChoisis [ListeDesPABs]] if {$Qui == ""} {return ""} } #3-PARAMETERS SELECTION if {[OuiOuNon "Would you like to change Twins selections parameters ?\n1-ID 0.95\n2-Cover Q/S 0.95\n3-Cover S/Q 0.95"]} { FaireLire "First: Global Identity Percent." while {1} { set PIdentity [Entre "0.95"] if {$PIdentity ==""} {continue} else {break} } FaireLire "Second: Cover Percent Q/S." while {1} { set PCoverQuery [Entre "0.95"] if {$PCoverQuery ==""} {continue} else {break} } FaireLire "Third: Cover Percent S/Q." while {1} { set PCoverSubject [Entre "0.95"] if {$PCoverSubject==""} {continue} else {break} } } if {[OuiOuNon "Would you like to change Output file names ?"]} { while {1} { set FileName "[Entre "TousLesJumeaux"]" if {$FileName==""} {continue} set FichierJumeaux "$DirDesJumeaux/$FileName" set FichierJumeauxTrie "${FichierJumeaux}.trie" set FichierJumeauxFinal "${FichierJumeaux}.final" break } } else { set FichierJumeaux "$DirDesJumeaux/TousLesJumeaux_${PIdentity}_${PCoverQuery}_${PCoverSubject}" set FichierJumeauxTrie "${FichierJumeaux}.trie" set FichierJumeauxFinal "${FichierJumeaux}.final" } Espionne "\nFirst Twins Creation" Espionne "Step 1 : Blast searches all against all" #Calcul tous les fastas et blasts MesBlastsPourLesJumeaux $Qui $NomDeLaBanque $NOuP Espionne "Step 2 : Twins determination for each sequence" #Calcul les Jumeaux avec les proches dans le blast MesJumeaux $Qui $PIdentity $PCoverQuery $PCoverSubject $FichierJumeaux Espionne "Step 3 : Removing each duplicated cluster of twins" #Calcul les Jumeaux avec les proches dans le blast RegroupeLesVraisJumeaux $FichierJumeaux $FichierJumeauxTrie Espionne "Step 4 : Ranking within each cluster the best sequence (Database, Length)" #Calcul les Jumeaux avec les proches dans le blast CalculLeFichierOrdonneDesJumeaux $FichierJumeauxTrie $FichierJumeauxFinal $NOuP #Espionne "Step 5 : On calcule les nouvelle bornes" #CreeLesNouvellesBornesDesPABsLocChevauchantes $FichierJumeauxFinal #CreeLesNouvellesBornesDesPABs $FichierJumeauxFinal return "" } proc MainLevee {K x y Action} { global IdScrollRectangle global LesCouleursPourMainLevee global LesTaillesPourMainLevee global DernierXDuTouche DernierYDuTouche global BufferMainLevee set X [$K canvasx $x] set Y [$K canvasy $y] set Touche [$K find withtag current] if {[info exists IdScrollRectangle($K)] && $Touche==[set IdScrollRectangle($K)]} { if {[regexp "Point|Motion" $Action]} { return } } set ItemType [$K type $Touche] if {$Action == "Motion"} { $K move $Touche [expr $x-$DernierXDuTouche] [expr $y-$DernierYDuTouche] set DernierXDuTouche $x set DernierYDuTouche $y return } if {$Action == "Point"} { set DernierXDuTouche $x set DernierYDuTouche $y return } if {$Action=="Modif"} { set LesActions {"Erase" "Size" "Color" "Raise" "Lower" "Copy" "Paste" "EditWidget" "New"} if {$ItemType=="text"} { lappend $LesActions "Text" } set Action [ChoixParmi $LesActions] if {$Action == "" } { return } } if {$Action == "Erase"} { if { ! [OuiOuNon "Do you really want to erase this $ItemType"]} { return 0 } $K delete $Touche return 1 } if {$Action == "Raise"} { $K raise $Touche return "Raise" } if {$Action == "Lower"} { $K lower $Touche if {[info exists IdScrollRectangle($K)]} { $K lower [set IdScrollRectangle($K)]} return "Lower" } if {$Action == "Color"} { set OldCouleurFill [$K itemcget $Touche -fill] if {[set CouleurFill [UneCouleurPourMainLevee $OldCouleurFill]]=="Cancel"} { return "" } $K itemconfigure $Touche -fill $CouleurFill if { ! [regexp "arc|polygon|rectangle" $ItemType] || ! [OuiOuNon "Do You want to change the Outline Color ?"]} { return $CouleurFill } set OldCouleurOutline [$K itemcget $Touche -outline] if {[set CouleurOutline [UneCouleurPourMainLevee $OldCouleurOutline]]=="Cancel"} { return "" } $K itemconfigure $Touche -outline $CouleurOutline return $CouleurFill } if {$Action == "Size"} { if {[set Taille [UneTaillePourMainLevee]]==""} { return } ScanLaListe [Barycentre [$K coords $Touche]] CX CY $K scale $Touche $CX $CY $Taille $Taille if {$ItemType == "arc" && $Taille == "Copy"} { set Extent [$K itemcget $Touche -extent] $K itemconfigure $Touche -extent [expr $Extent*[Entre 0.9]] return } if {$ItemType == "arc" && $Taille == "Extent"} { set Extent [$K itemcget $Touche -extent] $K itemconfigure $Touche -extent [expr $Extent*[Entre 0.9]] return } if {$ItemType == "line" && $Taille == "Arrow"} { set AvAr [$K itemcget $Touche -arrow] if {$AvAr=="first"} { set AvAr "last" } else { set AvAr "first" } $K itemconfigure $Touche -arrow $AvAr return } if {$Taille == "Other"} { set Taille [Entre 21] if {$Taille == ""} { return "" } lappend LesTaillesPourMainLevee $Taille } if { $ItemType=="arc" || $ItemType=="line" } { $K itemconfigure $Touche -width $Taille return $Taille } if { $ItemType=="text"} { $K itemconfigure $Touche -font [list Courier $Taille] return $Taille } } if {$Action == "Text"} { set Texte [Entre [$K itemcget $Touche -text]] if {$Texte == ""} { return "" } if { $ItemType=="text"} { $K itemconfigure $Touche -text $Texte return $Texte } } if {$Action == "Copy"} { set Nouveau [RenaissanceDuWidget $K $Touche "Copy"] return $Nouveau } if {$Action == "Paste"} { if { ! [info exists BufferMainLevee]} { FaireLire "You never made a Copy" return "" } regsub {^[^ ]+ } $BufferMainLevee "$K " Nouveau catch {set NouveauId [eval $Nouveau]} Message if {[regexp {[^0-9]} $Message]} { FaireLire "I got this message : \n$Message" return "" } return $NouveauId } if {$Action == "EditWidget"} { set Nouveau [RenaissanceDuWidget $K $Touche] return $Nouveau } if {$Action == "New"} { set Nouveau [CreerUnWidget $K] return $Nouveau } } proc MainLeveeSurUnCanva {K} { global IdScrollRectangle $K bind "all" <1> "MainLevee $K %x %y Point" $K bind "all" "MainLevee $K %x %y Motion" $K bind "all" "MainLevee $K %x %y Relache" $K bind "all" "MainLevee $K %x %y Modif" regsub {\.[a-z_0-9]+$} $K "" w set Bouton [BoutonneLaFenetre $w "Save/Restore/Erase"] $Bouton configure -background "green" bind $Bouton <1> "SauveLeCanva $K all" bind $Bouton <2> "RestaureLeCanva $K" bind $Bouton <3> "EraseLeCanva $K" set Bouton [BoutonneLaFenetre $w "Paste"] $Bouton configure -background "orange" bind $Bouton <1> "MainLevee $K 0 0 Paste" } proc Maintenance {} { set lesBanques [split [BlastDatabaseInventory ListOf ProBestFirst]] foreach banque $lesBanques { Espionne $banque set queue [file tail $banque] Espionne $queue set fichierTest "/home/joly/BlastTest/$queue.test.blast" set fichierQuery "/home/joly/BlastTest/queryBidon.tfa" if {[file exists $fichierTest]} { continue } else { Espionne [monBlast $fichierQuery $fichierTest $banque "ecrase" "wait"] } } return "Finished !" } proc Maintenant {} { return [clock format [clock seconds] -format { %d %b. %Y %I:%M:%S %p}] } proc MajOiProteomes {{TaxId ""}} { set LesIDs [QuestionDeScience EVImm "ret FromOrthoInspector $TaxId IDs"] set LesACs [QuestionDeScience EVImm "ret FromOrthoInspector $TaxId IDs"] foreach ID $LesIDs AC $LesACs { if { ! [regexp "_" $ID]} { continue } ;#rR on verra plus tard !!!!!!!!!!!!!!!!!! set AJour 1 set LesLignesEMBL [LaSequenceDesBanques $ID $AC AccessOK "OnVeutEmbl"] if {$LesLignesEMBL=={}} { set IdAcRef [UniprotHistory $AC] if {$IdAcRef=="" || IdAcRef=="$ID $AC"} { lappend LesIntrouvablesUniques "$ID $AC"; continue } scan $IdAcRef "%s %s" IdRef AcRef set LesLignesEMBL [LaSequenceDesBanques $ID $AC AccessOK "OnVeutEmbl"] if {$LesLignesEMBL=={}} { lappend LesIntrouvablesHistoriques "$ID $AC $IdAcRef"; continue } set AJour 0 } if {$AJour} { continue } Espionne "$ID $AC $IdAcRef" } } proc MajYaProteomes {{TaxId ""}} { set LesIDs [QuestionDeScience EVImm "ret FromYannis $TaxId IDs"] set LesACs [QuestionDeScience EVImm "ret FromYannis $TaxId IDs"] foreach ID $LesIDs AC $LesACs { if { ! [regexp "_" $ID]} { continue } ;#rR on verra plus tard !!!!!!!!!!!!!!!!!! set AJour 1 set LesLignesEMBL [LaSequenceDesBanques $ID $AC AccessOK "OnVeutEmbl"] if {$LesLignesEMBL=={}} { set IdAcRef [UniprotHistory $AC] if {$IdAcRef=="" || IdAcRef=="$ID $AC"} { lappend LesIntrouvablesUniques "$ID $AC"; continue } scan $IdAcRef "%s %s" IdRef AcRef set LesLignesEMBL [LaSequenceDesBanques $ID $AC AccessOK "OnVeutEmbl"] if {$LesLignesEMBL=={}} { lappend LesIntrouvablesHistoriques "$ID $AC $IdAcRef"; continue } set AJour 0 } if {$AJour} { continue } Espionne "$ID $AC $IdAcRef" } } proc MakeAll {} { package require platform set p [::platform::generic] switch [string tolower $p] { "linux-x86" - "linux-ix86" { set rep "Linux-x86" } "linux-x86_64" - "linux-x86_64" { set rep "Linux-x86_64" } "windows" - "win32-ix86" { set rep Windows } "mac" - "macosx-ix86" { set rep MacOSX-x86 } } puts "\nCompilation :\n" foreach p {tclordalie0.1 tclcluspack0.1 tclfastme0.1 biotext0.1 tsurf0.1} { cd [file join $::OrdaliDir Extensions $p $rep] puts "$p" # nettoyage set Ldel [glob -nocomplain *.o] if {$Ldel != {}} {file delete -force {*}$Ldel} set Ldel [glob -nocomplain *.so] if {$Ldel != {}} {file delete -force {*}$Ldel} # copie des sources set Lfc [glob -nocomplain [file join .. src *.c]] file copy -force {*}$Lfc "[pwd]" set Lfh [glob -nocomplain [file join .. src *.h]] file copy -force {*}$Lfh "[pwd]" # compilation catch {exec make} Msg if {[regexp -nocase {erreur|error} $Msg]} { puts "#########################" puts $Msg puts "#########################" } } exit } proc MakeBlastDatabaseForEachProttfa {} { file mkdir "[RepertoireDuGenome]/banques_myself" NousAllonsAuBoulot "[RepertoireDuGenome]/prottfa" foreach Nom [ListeDesPABs] { exec formatdb -p T -i $Nom foreach P [glob -nocomplain "$Nom.*"] { Espionne $P file rename $P "[RepertoireDuGenome]/banques_myself/$P" } } OnRevientDuBoulot } proc MakeOpenglSelection {} { if {$::pgl(SelectionList) ne ""} { glCallList $::pgl(SelectionList) return } set list [glGenLists 1] set ::pgl(SelectionList) $list glNewList $list GL_COMPILE_AND_EXECUTE dont_use_light glInitNames set imol -1 foreach mol $::StrucAVoir { incr imol set nom [DonneIdDeAccessPDB $mol] set LObj [$nom _ListeObjets] set MolOn 0 foreach obj $LObj { if {! [$nom _EtatDeObjet $obj]} {continue} set MolOn 1 } if {! $MolOn} {continue} glPushName $imol set iobj -1 foreach obj $LObj { incr iobj if {! [$nom _EtatDeObjet $obj]} {continue} glPushName $iobj set La [$nom _SetupPicking $obj] foreach {x y z i} $La { glPushName $i glBegin GL_POINTS glVertex3f $x $y $z glEnd glPopName } glPopName } glPopName } glEndList return } proc MakePDBQuery {args} { set query " " set i 0 foreach {what val} $args { set xml " $i" if {$i} { append xml " and" } switch $what { "-cellcomp" { append xml " head org.pdb.query.simple.TreeEntityQuery CellComponentTree Search for mitochondrion (GO ID:5739) mitochondrion (GO ID:5739) " } "-orga" { append xml " head org.pdb.query.simple.OrganismQuery Organism Search : Organism Name=$val $val " } "-ec" { append xml " head org.pdb.query.simple.EnzymeClassificationQuery Enzyme Classification Search : EC=$val $val " } } append xml " " # add query block append query $xml incr i } append query " " return $query } proc MakeRedundancyClusters {redundantSequencesL {upClustering ""}} { upvar $redundantSequencesL redundantSequences # ex : clustered(AGAM00004) 45 # la sequence 4 est regroupee dans le groupe 45 # les groupes vont de 1 à n (n° du groupe donné par llength) array set clustered {} set newList [list ] set AgrpNumber 0 set BgrpNumber 0 set Adetected 0 set Bdetected 0 if {$upClustering==""} {set upClustering "no"} puts " --> création des clusters de redondants (opération longue)" foreach {cle val} [array get redundantSequences] { set couple [split $cle ","] #recherche si l'element A puis B du couple est deja dans un nouveau groupe if {[info exists clustered([lindex $couple 0])]} { set Adetected 1 set AgrpNumber $clustered([lindex $couple 0]) } elseif {$upClustering=="yes" && [info exists clustered([lindex $couple 1])]} { set Bdetected 1 set BgrpNumber $clustered([lindex $couple 1]) } #si A trouve, on vérifie que B existe et se trouve aussi dans le meme groupe if {$Adetected} { if {[info exists clustered([lindex $couple 1])] && ($clustered([lindex $couple 0])==$clustered([lindex $couple 1]))} { set Bdetected 1 } } #cas ou les 2 ne sont pas detectes if {$Adetected==0 && $Bdetected==0} { lappend newList $couple set clustered([lindex $couple 0]) [llength $newList] set clustered([lindex $couple 1]) [llength $newList] } #cas ou A detecte et pas B if {$Adetected==1 && $Bdetected==0} { set temp [lindex $newList [expr $AgrpNumber-1]] #on ajoute B et on reinjecte lappend temp [lindex $couple 1] lset newList [expr $AgrpNumber-1] $temp } #cas ou les 2 detectes, on fait rien # ########################## # ## option d'upClustering # if {$upClustering=="yes"} { # #si B trouve, on vérifie que A est aussi dans le groupe # if {$Bdetected==1} { # if {[lsearch -exact [lindex $newList $BgrpNumber] # [lindex $couple 0]]!=-1} { # set Adetected 1 # } # } # #cas ou B detecte et pas A # if {$Bdetected==1 && $Adetected==0} { # set temp [lindex $newList $BgrpNumber] # #on ajoute A et on reinjecte # lappend temp [lindex $couple 0] # lset newList $BgrpNumber $temp # } # } set AgrpNumber 0 set BgrpNumber 0 set Adetected 0 set Bdetected 0 } return $newList } proc Maladies {} { package require tdom set file "/home/moumou/listdiseasecards.html" set Lfile [LesLignesDuFichier $file] set Id [dom parse -simple -html $Lfile] set RId [$Id documentElement] set Lnds [$RId selectNodes //tr/td/a] set Lfnt [$RId selectNodes //tr/td/font] foreach e $Lnds { set nom [$e selectNodes string(.)] if {! [regexp {\|} $nom]} {continue} set Ln [split $nom "|"] lappend Lid [string trim [lindex $Ln 0]] lappend Ldef [string trim [lindex $Ln 1]] } foreach e $Lfnt { set n [$e selectNodes string(.)] lappend Ltmp [string trim $n] } foreach {a b c} $Ltmp { lappend Lloc $b lappend Lrmk [list "{$a}" "{$c}"] } set f [open "ms2ph.fof" w] foreach i $Lid d $Ldef l $Lloc r $Lrmk { set j 0 regsub -all {\{} $d "" d regsub -all {\}} $d "" d set d [split $d ","] while {[lindex $d $j] != "" || [lindex $r $j] != ""} { set df [lindex $d $j] set rk [lindex $r $j] regsub -all {\{} $rk "" rk regsub -all {\}} $rk "" rk set rk [string trim $rk] if {!$j} { set lc $l set id $i set Lsrs [ReqSrs [list $id $df]] set ac [lindex $Lsrs 0] set an [lindex $Lsrs 1] set sd [lindex $Lsrs 2] puts $f "$ac $an" } else { set lc "" set id "" set ac "" set an "" set sd "" } puts "$id\t$df\t$lc\t$rk\t$ac\t$an\t$sd" incr j } } close $f exit return } proc ManageFiles {} { Wup "Manageur des fichiers a partir du CADO4MI_Panel" Wup "Permet de supprimer des fichiers crees" Wup "Permet de sauver les resultats dans un fichier delimite par des tabulations" set w ".filemanagement" if {[winfo exists $w]} {wm deiconify $w;raise $w;return ""} else {toplevel $w} wm geometry $w +300+100 wm title $w "File Management" wm resizable $w false false wm protocol $w WM_DELETE_WINDOW "destroy $w" #Frame Generale contenant les autres frame et le bouton dismiss set FirstFrame "$w.framehome" set ButtonDismiss "$FirstFrame.bdismiss" frame $FirstFrame -borderwidth "3" -relief "groove" button $ButtonDismiss -background "red" -relief "ridge" -text "Dismiss" -padx "2" -command "eval \[wm protocol $w WM_DELETE_WINDOW\]" #Frame pour supprimer les types de fichier set FInfo "$FirstFrame.finfo" set ButtonErase "$FInfo.berase" frame $FInfo -borderwidth "3" -relief "groove" button $ButtonErase -background "OliveDrab1" -relief "ridge" -text "Erase File" -padx "2" -command { set LesExtensions [EntreDeux [list ".masked" ".blastn" ".oligo" ".log" ".selection" ".croisee"]] if {$LesExtensions == ""} {return ""} set BrowsedDir [tk_chooseDirectory -title "Choose one directory." -initialdir "[RepertoireDuGenome]"] if {$BrowsedDir == ""} {return ""} set ListeAcc "" foreach Acc [glob -nocomplain -directory $BrowsedDir "*.masked"] { regsub ".masked" $Acc "" Acc lappend ListeAcc [file tail $Acc] } set LesQuels [EntreDeux $ListeAcc] if {$LesQuels == ""} {return ""} if {[OuiOuNon "You want to erase $LesExtensions in $BrowsedDir"]} { foreach PAB $LesQuels { foreach Extension $LesExtensions { set Fichier "${BrowsedDir}/${PAB}${Extension}" if {[file exists $Fichier]} {file delete -force $Fichier} } } } } set Texte [format "%-10s" "Allow to erase the different types of files generated."] set_balloon $ButtonErase "$Texte" #Frame pour sauver les resultats dans un fichier separes par des tabulations set FExcel "$FirstFrame.frameexcel" set ButtonToExcel "$FExcel.bsave" frame $FExcel -borderwidth "3" -relief "groove" button $ButtonToExcel -background "OliveDrab1" -relief "ridge" -text "Save Results" -padx "2" -command "LesOligosPourExcel_GUI" set Texte [format "%-10s" "Allow to save the results in a tab-delimited file."] set_balloon $ButtonToExcel "$Texte" pack $FirstFrame -fill both -expand true pack $FInfo -side top -fill both -expand true pack $ButtonErase -side top -fill both -expand true pack $FExcel -side top -fill both -expand true pack $ButtonToExcel -side top -fill both -expand true pack $ButtonDismiss -side top -fill both -expand true return "" } proc ManipuleLaRosace {Action R Tag x y} { Wup "Manages the point-and-motion for rotating the arcs" global ParametresDuBoard global AnglePoint JeMeSignale set CentreX [set ParametresDuBoard($R,CentreX)] set CentreY [set ParametresDuBoard($R,CentreY)] set X [$R canvasx $x] set Y [$R canvasx $y] if {$Action == "Point"} { set AnglePoint [AngleDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY] return } if {$Action == "Release"} { if { ! [info exists AnglePoint]} { return } set AngleRelease [AngleDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY] set AngleDelta [Entre0Et2PI [expr $AngleRelease-$AnglePoint]] } foreach Id [$R find withtag $Tag] { set Coordonnees [$R coords $Id] if {$Action == "Switch"} { set NouvellesCoordonnees [SwitchEnX $Coordonnees $CentreX] } if {$Action == "Release"} { set NouvellesCoordonnees [TourneLaListeAutour $Coordonnees $CentreX $CentreY $AngleDelta] } eval $R coords $Id [split $NouvellesCoordonnees " "] } } proc MapAreaFromCanva {TexteOuFichierTcl FichierImage FichierHtml} { if {[regexp "\n" $TexteOuFichierTcl]} { set TexteTcl $TexteOuFichierTcl } else { set TexteTcl [ContenuDuFichier $TexteOuFichierTcl] } set Map "map" lappend LeHtml [ContenuDuFichier "[GscopeEtc]/EnteteHtmlPourIllustreLesChromosomes.html"] lappend LeHtml "Chromosome" lappend LeHtml "" foreach Ligne [split $TexteTcl "\n"] { if { ! [regexp {^create (rectangle|oval) } $Ligne]} { continue } ScanLaListe $Ligne C R XMin YMin XMax YMax set Coo "$XMin,$YMin,$XMax,$YMax" regsub -all {\.[0-9]+} $Coo "" Coo set Tags [StringSuivant "-tags " dans $Ligne] regsub -- { \-width.*} $Tags "" Tags if {[regexp "Cadre$" $Tags]} { continue } regsub {^\{} $Tags "" Tags regsub {\}$} $Tags "" Tags scan $Tags "%s" Nom if {[EstUnPAB $Nom]} { set Url "[WscopeScience]&FileMoi&$Nom" set Texte "$Tags Do I show the gene $Nom with Wscope" lappend LeHtml "$Tags" } else { lappend LeHtml "$Tags" } } return [SauveLesLignes $LeHtml dans $FichierHtml] } proc MapCharSet {from to val} { if {! [info exists ::LCharSet]} { set LCharSet [InitCharsetHtml] } foreach k {from to} i {iFrom iTo} { switch [set $k] { "keyboard" {set $i 0} "octal" {set $i 1} "hex" {set $i 2} "unicode" {set $i 3} "html" {set $i 4} "char" {set $i 5} } } set ligne [lsearch -inline -index $iFrom $LCharSet $val] set out [lindex $ligne $iTo] return $out } proc MapCliquable {{Action Create} {Repertoire ""}} { global RepertoireDuGenome global LesOrdresPourGIF Gs "Canvas" if {$Repertoire==""} { set Repertoire "$RepertoireDuGenome/maps" } set LesFichierSize [glob -nocomplain "$Repertoire/*.size"] if {$Action=="Existe"} { return [llength $LesFichierSize] } set Titre [PreFixe] if {$Action=="PourGif"} { set PourGif 1 set Image NeRienFaire set Canvas NeRienFaire set Bind NeRienFaire set Pack NeRienFaire set Fram NeRienFaire set Button NeRienFaire set Scrollbar NeRienFaire set Grid NeRienFaire set FonctionRejetteLaBoite "RejetteLaBoite" set LesOrdresPourGif {} set w "PourGif" set K "OrdrePourGif" } else { set PourGif 0 set Image image set Canvas canvas set Bind bind set Pack pack set Fram frame set Button button set Scrollbar scrollbar set Grid grid set FonctionRejetteLaBoite "NeRejettePasLaBoite" set w [NomDe board] catch {destroy $w} toplevel $w wm title $w "$Titre" wm iconname $w "$Titre" set K $w.canvas } if {[llength $LesFichierSize]>1} { set FichierSize [ChoixParmi $LesFichierSize] if {$FichierSize==""} { return {} } } else { set FichierSize [lindex $LesFichierSize 0] } regsub ".size$" $FichierSize ".gif" FichierImage regsub ".size$" $FichierSize ".html" FichierHTML scan [PremiereLigneDuFichier $FichierSize] "%d %d" Largeur Hauteur if {$PourGif} { } else { set K [UnCanva $Largeur $Hauteur] } $Image create photo FondDeMap -file $FichierImage foreach Aire [LesAiresCliquablesDuHTML $FichierHTML] { scan $Aire "%s %d %d %d %d %s" AliasLu xMin yMin xMax yMax Ref if {$PourGif} { set LesTags [list ] } else { set LesTags [list $AliasLu "ClickMe"] } $K create rectangle $xMin $yMin $xMax $yMax -fill red -tags $LesTags } $K bind "ClickMe" "ShowHTMLBox $K Enter" $K bind "ClickMe" "ShowHTMLBox $K Leave" $K create image 0 0 -image FondDeMap -anchor "nw" -tags [list Image] $K bind "Image" <1> "ShowHTMLBox $K Press" if {$PourGif} { return $LesOrdresPourGIF } else { return $K } } proc MappingDeLaSelection {K} { set Liste [$K find withtag current] foreach Id $Liste { set BId [lindex [$K gettags $Id] 0] set NomFichierBlast [lindex [$K gettags $Id] 1] AfficheMapping $NomFichierBlast $BId } } proc MappingOfMotifsWithLengtAndCardinality {Chr {NbCodon ""} {Cardinalite ""} {FicBed ""}} { if {$NbCodon==""} { set NbCodon 10 } set Window [expr $NbCodon*3] if {$Cardinalite==""} { set Cardinalite 5 } if {$FicBed==""} { set FicBed "[AnnotRep]/${Chr}_${NbCodon}_${Cardinalite}.bed" } set chr [string tolower $Chr] regsub "chr0" $chr "chr" chr regsub "chr23" $chr "chrX" chr regsub "chr24" $chr "chrY" chr set Fasta "/home/nguefack/stage/human-ucsc-hg19/transfo-test/$chr.txt" if {[FileAbsent $Fasta]} { Espionne "$Fasta dosn no exist. I skip." ; continue } exec /home/ripp/gscope/AtelierGscope/RunCC.sh $Fasta $Window $Cardinalite $FicBed return $FicBed } proc MappingOfMotifsWithLengtAndCardinalityPourTous {{NbCodon ""} {Cardinalite ""} {AllFicBed ""}} { #rR Creation du nouveau mapping des m if {$AllFicBed==""} { set AllFicBed "[AnnotRep]/ChrAll_${NbCodon}_${Cardinalite}.bed" } Sauve "" dans $AllFicBed foreach Chr [ListOfChr] { set FicBed [MappingOfMotifsWithLengtAndCardinality $Chr $NbCodon $Cardinalite] AppendAuFichier $AllFicBed [ContenuDuFichier $FicBed] } return $AllFicBed } proc Maquille {Nom} { global Maquille global MaquilleNon if {[info exists MaquilleNon] && $MaquilleNon} { return $Nom } if { ! [info exists Maquille]} { MaquillePourTous } if { ! [info exists Maquille($Nom)]} { return $Nom } return [set Maquille($Nom)] } proc MaquilleLeMSF {FichierMSF LesAnciens LesNouveaux {MaxAccess ""} {Force ""} {NouveauFichier ""}} { global MaquilleNon #rR attention si maquillon il faut mettre Force #rR on remplace les anciens par les nouveaux #rR on garde ceux qui ne sont pas dans la liste #rR on ne tient pas compte des majuscules minuscule pour les anciens #rR LesAnciens peut etre ReplaceNumberOnly. Dans ce cas LesNouveaux contient le caractere a mettre devant set Force [string equal -nocase $Force "Force"] if {$MaxAccess==""} { set MaxAccess 15 } if { ! $Force && [info exists MaquilleNon] && $MaquilleNon} { return [LesLignesDuFichier $FichierMSF] } set ReplaceNumberOnly 0 if {[string equal -nocase "ReplaceNumberOnly" $LesAnciens]} { set ReplaceNumberOnly 1 set StartForNumber $LesNouveaux } foreach Ancien $LesAnciens Nouveau $LesNouveaux { set ANCIEN [string toupper $Ancien] set NouveauNom($ANCIEN) $Nouveau } set FormatName " Name: %-${MaxAccess}s %s" set FormatAlig "%-[expr $MaxAccess+2]s %s" set YaEuName 0 foreach Ligne [LesLignesDuFichier $FichierMSF] { if {[regexp "Name: " $Ligne]} { set YaEuName 1 scan $Ligne "%s %s" Name Ancien set Nouveau $Ancien if {$ReplaceNumberOnly} { if {[regexp {^[0-9]+$} $Ancien]} { set Nouveau "$StartForNumber$Ancien" } } else { set ANCIEN [string toupper $Ancien] if {[info exists NouveauNom($ANCIEN)]} { set Nouveau $NouveauNom($ANCIEN)} } set iLen [string first "Len:" $Ligne] set NouvelleLigne [format $FormatName $Nouveau [string range $Ligne $iLen end]] lappend LeNouveauMSF $NouvelleLigne continue } if { ! $YaEuName || ! [regexp -nocase {[\.0-9a-z_]} $Ligne]} { lappend LeNouveauMSF $Ligne continue } scan $Ligne "%s" Ancien regsub $Ancien $Ligne "" LigneAmputee set LigneAmputee [string trimleft $LigneAmputee] set Nouveau $Ancien if {$ReplaceNumberOnly && [regexp -nocase {[a-z\.\-\~]} $Ligne]} { if {[regexp {^[0-9]+$} $Ancien]} { set Nouveau "$StartForNumber$Ancien" } } else { set ANCIEN [string toupper $Ancien] if {[info exists NouveauNom($ANCIEN)]} { set Nouveau $NouveauNom($ANCIEN)} } set NouvelleLigne [format $FormatAlig $Nouveau $LigneAmputee] lappend LeNouveauMSF $NouvelleLigne continue } if {$NouveauFichier!=""} { return [SauveLesLignes $LeNouveauMSF dans $NouveauFichier] } return $LeNouveauMSF } proc MaquillePourTous {{LaListeMerci ""}} { global RepertoireDuGenome global Maquille global MaquilleNon if {[info exists MaquilleNon] && $MaquilleNon} { return {} } set Maquillage "$RepertoireDuGenome/fiches/maquillage" if {[file exists $Maquillage]} { foreach Ligne [LesLignesDuFichier $Maquillage] { scan $Ligne "%s %s" O N set Maquille($O) $N set Maquille($N) $O } } if { ! [info exist Maquille]} { foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] set OldMSF "$RepertoireDuGenome/DeBayroch/Familles/$Alias/$Alias.msf" set NewMSF "$RepertoireDuGenome/msf/$Nom" set OnAttend 1 if { ! [file exists $OldMSF]} { continue } foreach OldLigne [LesLignesDuFichier $OldMSF] NewLigne [LesLignesDuFichier $NewMSF] { if { ! [regexp "Name:" $OldLigne]} { if {$OnAttend} { continue } else { break } } set OnAttend 0 scan $OldLigne "%s %s" Name OldNom scan $NewLigne "%s %s" Name NewNom if {[info exists Maquille($OldNom)]} { FaireLire "$Nom $Alias $OldNom $NewNom" } set Maquille($OldNom) $NewNom lappend LeMaquillage "$OldNom $NewNom" set Maquille($NewNom) $OldNom } } SauveLesLignes $LeMaquillage dans $Maquillage } if {$LaListeMerci!=""} { return [LesLignesDuFichier $Maquillage] } return } proc MarqueBootstrap {AId n Lbox ir} { global Abr set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] set anc se set jus right # x1,y1 coin sup gauche, x2,y2 coin inf droit lassign $Lbox x1 y1 x2 y2 set x [expr {[SurGrille $x1] - 1}] set y [expr {[SurGrille $y1]}] set Id [$PAD create text $x $y -font "TreeFontBoot$AId" -fill white -text "[$t get $n nboot]" -anchor $anc -justify $jus -tags {bootmark "boot-$n"}] return } proc MarqueLesErreursDeSequence {K} { global RepertoireDuGenome set PosY 1 foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/erreurssequence.liste"] { scan $Ligne "%s %d %d" CodeType PositioTDNnsAncien PositioTDNnsNouveau if {$CodeType == "ij"} { set Couleur "black" ; set Texte "| Substitution en $PositioTDNnsAncien"} if {$CodeType == "i" } { set Couleur "red" ; set Texte "| Deletion en $PositioTDNnsAncien"} if {$CodeType == "j"} { set Couleur "red" ; set Texte "| Insertion en $PositioTDNnsAncien"} $K create text $PositioTDNnsNouveau [expr ([incr PosY]%3 + 1)*12 - 60] -text $Texte -anchor w -font {Courier 12} -fill $Couleur } } proc MarquePourReroot {AId n xi y xf} { global Abr set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] set x1 [expr {[SurGrille [expr {($xi+$xf)/2}]] - 4}] set x2 [expr {[SurGrille [expr {($xi+$xf)/2}]] + 4}] set y1 [expr {[SurGrille $y] - 4}] set y2 [expr {[SurGrille $y] + 4}] set Id [$PAD create oval $x1 $y1 $x2 $y2 -fill white -outline white -tags reroot] $PAD lower $Id $t set $n IdRer $Id return } proc MarquePourRotation {AId n x y} { global Abr set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] set x [SurGrille $x] set x1 [expr {$x - 3}] set x2 [expr {$x + 3}] set y [SurGrille $y] set y1 [expr {$y - 3}] set y2 [expr {$y + 3}] set Id [$PAD create oval $x1 $y1 $x2 $y2 -fill white -outline white -tags [list rotation "rota-$n"]] if {$n eq "root"} { $PAD itemconfi $Id -tags {rotation rotroot} } $PAD lower $Id $t set $n IdRot $Id return } proc MarqueSequencesInactives {} { global NomNomSeq set iVue [VueCourante index] set iVis [VisCourante] set Li [LesSequencesInactives] foreach n $Li { set y [expr {[lsearch $LNOrdali $n] + 1}] $NomNomSeq tag add SLock $y.0 "$y.0 wordend" } return } proc MaskTypesFromTFA {Fichier} { set LesTypes {} set Entete [PremiereLigneDuFichier $Fichier] if {[regexp -nocase {[a-z]*[^Re]Mask[ a-z0-9%/\(\)_\-]+EndMask} $Entete Type]} { lappend LesTypes $Type } if {[regexp -nocase {[a-z]*ReMask[ a-z0-9%/\(\)_\-]+EndReMask} $Entete Type]} { lappend LesTypes $Type } return $LesTypes } proc Masking {} { set S 0; set n 0 foreach Nom [ListeDesPABs] { if {[InterrogeBilanMasking $Nom LesEtats] != ""} { incr n set PercentMask [InterrogeBilanMasking $Nom Etat Masking PMasked] set S [expr $PercentMask + $S] } } Espionne $n set PercentMaskMoyen [expr $S/$n] return $PercentMaskMoyen } proc MasqueEtReMasqueLesRepeats {Nom} { global RepertoireDuGenome set SeuilPourcentage 90.0 if {![file exists "$RepertoireDuGenome/nucmask"]} { File mkdir "$RepertoireDuGenome/nucmask" } set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" set FichierMask "$RepertoireDuGenome/nucmask/$Nom.m" set FichierReMask "$RepertoireDuGenome/nucmask/$Nom.rm" set FichierMRM "$RepertoireDuGenome/nucmask/$Nom.mrm" if {![file exists $FichierTFA] || ![file exists $FichierMask] || ![file exists $FichierReMask]} { Espionne "$Nom : One TFA file doesn't exist" return "" } set SeqTFA [string toupper [string trim [QueLaSequenceDuTFA $FichierTFA ]]] set SeqMask [string toupper [string trim [QueLaSequenceDuTFA $FichierMask ]]] set SeqReMask [string toupper [string trim [QueLaSequenceDuTFA $FichierReMask]]] set LaSeqTFA [split $SeqTFA ""] set LaSeqMask [split $SeqMask ""] set LaSeqReMask [split $SeqReMask ""] set Entete [string trim [PremiereLigneDuFichier $FichierTFA]] set TailleTFA [llength $LaSeqTFA] set TailleMask [llength $LaSeqMask] set TailleReMask [llength $LaSeqReMask] if { $TailleTFA != $TailleMask || $TailleTFA != $TailleReMask || $TailleMask != $TailleReMask} { Espionne "$Nom : files have not the same length" return "" } set nNTFA 0 set nNTot 0 set LaSeqMRM {} set PourcentageMRM 0 if {$TailleTFA > 0} { for {set i 0} {$i < $TailleTFA} {incr i} { set BaseTFA [lindex $LaSeqTFA $i] set BaseMask [lindex $LaSeqMask $i] set BaseReMask [lindex $LaSeqReMask $i] if {$BaseTFA == "N"} { incr nNTFA incr nNTot lappend LaSeqMRM $BaseTFA continue } if {$BaseMask == "N" || $BaseReMask == "N"} {incr nNTot} if {$BaseMask == "N"} { lappend LaSeqMRM $BaseMask continue } if {$BaseReMask == "N"} { lappend LaSeqMRM $BaseReMask continue } lappend LaSeqMRM $BaseTFA } set nNMRM [expr $nNTot-$nNTFA] set PourcentageMRM [PourcentageArrondiSup $nNMRM $TailleTFA] } elseif {$TailleTFA == 0} { set PourcentageMRM 0 } else { set PourcentageMRM "-1" } if {$PourcentageMRM==0} { set Annotation "NoRepeatToMRM EndMRM" set EnteteMRM "$Entete $Annotation" } else { if {$PourcentageMRM==-1} { set Annotation "NoSequenceToMRM EndMRM" set EnteteMRM "$Entete $Annotation" } else { if {[expr $PourcentageMRM > $SeuilPourcentage]} { set Annotation "TotallyMRM" } else { set Annotation "PartiallyMRM" } set EnteteMRM "$Entete $Annotation ${PourcentageMRM}% EndMRM" } } set SeqMRM_TFA [SequenceFormatTFA [join $LaSeqMRM ""] $EnteteMRM] return $SeqMRM_TFA } proc MasqueEtReMasqueLesRepeatsDuFichier {FichierTFA} { global RepertoireDuGenome set SeuilPourcentage 90.0 set FichierMask "$FichierTFA.m" set FichierReMask "$FichierTFA.rm" set FichierMRM "$FichierTFA.mrm" set Nom [file tail $FichierTFA] if {![file exists $FichierTFA ]} {Espionne "$Nom : $FichierTFA doesn't exist";return} if {![file exists $FichierMask ]} {Espionne "$Nom : $FichierMask doesn't exist";return} if {![file exists $FichierReMask]} {Espionne "$Nom : $FichierReMask doesn't exist";return} set SeqTFA [string toupper [string trim [QueLaSequenceDuTFA $FichierTFA ]]] set SeqMask [string toupper [string trim [QueLaSequenceDuTFA $FichierMask ]]] set SeqReMask [string toupper [string trim [QueLaSequenceDuTFA $FichierReMask]]] set LaSeqTFA [split $SeqTFA ""] set LaSeqMask [split $SeqMask ""] set LaSeqReMask [split $SeqReMask ""] set Entete [string trim [PremiereLigneDuFichier $FichierTFA]] set TailleTFA [llength $LaSeqTFA] set TailleMask [llength $LaSeqMask] set TailleReMask [llength $LaSeqReMask] if { $TailleTFA != $TailleMask || $TailleTFA != $TailleReMask || $TailleMask != $TailleReMask} { Espionne "$Nom : files have not the same length" return "" } set nNTFA 0 set nNTot 0 set LaSeqMRM {} set PourcentageMRM 0 if {$TailleTFA > 0} { for {set i 0} {$i < $TailleTFA} {incr i} { set BaseTFA [lindex $LaSeqTFA $i] set BaseMask [lindex $LaSeqMask $i] set BaseReMask [lindex $LaSeqReMask $i] if {$BaseTFA == "N"} { incr nNTFA incr nNTot lappend LaSeqMRM $BaseTFA continue } if {$BaseMask == "N" || $BaseReMask == "N"} {incr nNTot} if {$BaseMask == "N"} { lappend LaSeqMRM $BaseMask continue } if {$BaseReMask == "N"} { lappend LaSeqMRM $BaseReMask continue } lappend LaSeqMRM $BaseTFA } set nNMRM [expr $nNTot-$nNTFA] set PourcentageMRM [PourcentageArrondiSup $nNMRM $TailleTFA] } elseif {$TailleTFA == 0} { set PourcentageMRM 0 } else { set PourcentageMRM "-1" } if {$PourcentageMRM==0} { set Annotation "NoRepeatToMRM EndMRM" set EnteteMRM "$Entete $Annotation" } else { if {$PourcentageMRM==-1} { set Annotation "NoSequenceToMRM EndMRM" set EnteteMRM "$Entete $Annotation" } else { if {[expr $PourcentageMRM > $SeuilPourcentage]} { set Annotation "TotallyMRM" } else { set Annotation "PartiallyMRM" } set EnteteMRM "$Entete $Annotation ${PourcentageMRM}% EndMRM" } } set SeqMRM_TFA [SequenceFormatTFA [join $LaSeqMRM ""] $EnteteMRM] return $SeqMRM_TFA } proc MasqueLaRegion {Seq Debut Fin {Mask N}} { return [string replace $Seq [expr [Mini $Debut $Fin]-1] [expr [Maxi $Debut $Fin]-1] [string repeat "$Mask" [expr $Fin - $Debut + 1]]] } proc MasqueLaRegionDuFichierTFA {FichierTFA FichierMasked Debut Fin {Mask N}} { set Entete [PremiereLigneDuFichier $FichierTFA] set Seq [MasqueLaRegion [QueLaSequenceDuTFA $FichierTFA] $Debut $Fin $Mask] set SeqTFA [SequenceFormatTFA $Seq $Entete] Sauve $SeqTFA dans $FichierMasked return $SeqTFA } proc MasqueLesRegions {Seq LesRegions {Mask N}} { foreach LaRegion $LesRegions { set Debut [lindex $LaRegion 0] set Fin [lindex $LaRegion 1] set Seq [MasqueLaRegion $Seq $Debut $Fin $Mask] } return $Seq } proc MasqueLesRegionsDuFichierTFA {FichierTFA FichierMasked LesRegions {Mask N}} { set Entete [PremiereLigneDuFichier $FichierTFA] set Seq [MasqueLesRegions [QueLaSequenceDuTFA $FichierTFA] $LesRegions $Mask] set SeqTFA [SequenceFormatTFA $Seq $Entete] Sauve $SeqTFA dans $FichierMasked return $SeqTFA } proc MasqueLesRegionsPourTous {LesRegions {Rep ""} {LesNoms ""}} { global RepertoireDuGenome if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { set F "$RepertoireDuGenome/$Rep/$Nom" if {![file exists $F]} {continue} MasqueLesRegionsDuFichierTFA $F $F $LesRegions } return } proc MasqueLesRepeats {Nom {Organisme ""} {FichierTFA ""}} { global RepertoireDuGenome if {$FichierTFA == ""} {set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom"} if { ! [file exists $FichierTFA]} {return ""} if {[QueLaSequenceDuTFA $FichierTFA]==""} { set Entete [PremiereLigneDuFichier $FichierTFA] append Entete " NoSequenceToMask EndMask" return $Entete } NousAllonsAuBoulot set Racine [TmpFile "" .].tfa File copy $FichierTFA $Racine return [MasqueLesRepeatsDuFichier $Racine $Organisme] } proc MasqueLesRepeatsDuFichier {FichierTFA {Organisme ""} {AvecOptionNoLow 1}} { if { ! [file exists $FichierTFA]} {return} set SeqTFA [ContenuDuFichier $FichierTFA] set Seq [QueLaSequenceDuTexteTFA $SeqTFA ] set Entete [EnteteDuTexteTFA $SeqTFA ] if {$Seq==""} { append Entete " NoSequenceToMask EndMask" return $Entete } set LesLibraries [LesLibrariesOuOptionsSpeciesAutomatiques $Organisme] set LesNomsDesRepeats {} set FichierTFATmp "$FichierTFA.tmp" Sauve $SeqTFA dans $FichierTFATmp Sauve $SeqTFA dans "$FichierTFA.masked" set LeTexteOUT {} foreach Library $LesLibraries { Espionne $Library lappend LeTexteOUT $Library repeatmasker $FichierTFATmp $Library $AvecOptionNoLow if {![file exists "$FichierTFATmp.out"]} {continue} lappend LeTexteOUT [ContenuDuFichier "$FichierTFATmp.out"] File copy -force "$FichierTFATmp.masked" "$FichierTFA.masked" File copy -force "$FichierTFATmp.masked" $FichierTFATmp File delete -force "$FichierTFATmp.out" File delete -force "$FichierTFATmp.masked" } Sauve [join $LeTexteOUT "\n"] dans "$FichierTFA.out" set LesRepeats {} foreach Repeat [lsort -unique [InterrogeFichierOutRepeatMasker "$FichierTFA.out" LesRepeats]] { foreach LaRegion [InterrogeFichierOutRepeatMasker "$FichierTFA.out" Repeat $Repeat LesRegions] { lappend LesRepeats [list $Repeat [lindex $LaRegion 0] [lindex $LaRegion 1]] } } set LesNomsDesRepeats {} foreach LeRepeat [lsort -unique -real -index 1 $LesRepeats] { lappend LesNomsDesRepeats [lindex $LeRepeat 0] } if {$LesNomsDesRepeats == {}} { set Entete "$Entete NoRepeatToMask EndMask" return [SequenceFormatTFA $Seq $Entete "brut"] } set SeqMASK [QueLaSequenceDuFichierTFA "$FichierTFA.masked" ] set NombreDeBasesMasquees [NombreDeBasesDansRepeat $SeqTFA $SeqMASK ] set Annotations [InfoSurMasking $SeqMASK $NombreDeBasesMasquees $LesNomsDesRepeats] set EnteteMASK "$Entete $Annotations" return [SequenceFormatTFA $SeqMASK $EnteteMASK "brut"] } proc MasqueLesSequencesDePlusDeCentKb {{LesFichiersTFA ""}} { #coupe la sequence en 100000 + reste #masque chacune #recolle les deux sequences masquees global RepertoireDuGenome foreach FichierTFA $LesFichiersTFA { Espionne $FichierTFA set Seq [QueLaSequenceDuTFA $FichierTFA] set Seq1 [string range $Seq 0 100000] set Seq2 [string range $Seq 100001 end] set ContenuDuFichierTFASeq1Masquee [RepeatMaskerDuTexte $Seq1] set QueSeq1Masquee [QueLaSequenceDuTexteTFA $ContenuDuFichierTFASeq1Masquee] Espionne $QueSeq1Masquee set ContenuDuFichierTFASeq2Masquee [RepeatMaskerDuTexte $Seq2] set QueSeq2Masquee [QueLaSequenceDuTexteTFA $ContenuDuFichierTFASeq1Masquee] set SeqEntiereMasquee "$QueSeq1Masquee$QueSeq2Masquee" set Entete ">$FichierTFA" set SequenceMasquee [SequenceFormatTFA $SeqEntiereMasquee $Entete] if {[OuiOuNon "Do you want to save the masked sequence in the directory nucmask?"]} { Sauve $SequenceMasquee dans "$RepertoireDuGenome/nucmask/$FichierTFA" } return $SequenceMasquee } } proc MasquePolyN {Seq nt Limite} { Wup "Permet de detecter des regions contigues de base" Wup "nt A, T, G, C" Wup "Limite = nombre de base minimum successives a considerer" set LaSeq [string toupper [split $Seq ""]] set Debut 0 set Tab(Last) N set Longueur [llength $LaSeq] set MesRegions "" foreach base $LaSeq { incr Debut if {! [info exists Tab(Last)]} {set Tab(Last) N} if {$base != [set Tab(Last)]} { unset Tab if {[info exists LesRegions(Debut)] && [info exists LesRegions(Fin)]} { lappend MesRegions "[set LesRegions(Debut)] [set LesRegions(Fin)]" unset LesRegions } } if { $base!=$nt} {continue} if {! [info exists Tab(Last)]} {set Tab(Last) N} if {! [info exists Tab($base)]} {set Tab($base) 1} else {incr Tab($base)} if { [set Tab($base)]==1} {set LesRegions(Debut) $Debut} if {$base==$nt && [set Tab($base)]>=$Limite} {set LesRegions(Fin) $Debut} if {$Debut==$Longueur && $base==[set Tab(Last)]} { if {$base!=$nt} {continue} if {[info exists LesRegions(Debut)] && [set Tab($base)]>=$Limite} { lappend MesRegions "[set LesRegions(Debut)] [set LesRegions(Fin)]" unset LesRegions continue } } set Tab(Last) "$base" } if {[info exists Tab]} {unset Tab} return $MesRegions } proc MasqueTousLesLongsAffymetrix {} { #longueur superieure a 100000 MasqueLesSequencesDePlusDeCentKb [ListeDesLongsAffy] } proc MatOl {{Qui ""} {Quoi ""}} { global MatOl if {$Qui==""} { return [list "MatOl P Matrice" "MatOl P AA" "MatOl P NA" "MatOl P Orient" "MatOl P Subjects" "MatOl LaListeDes Oligos" "MatOl LaListeDes Matrices" "MatOl LaListeDes Fichiers"] } if {$Quoi==""} { set Quoi "Matrice" } if {[info exists MatOl($Qui,$Quoi)] } { return [set MatOl($Qui,$Quoi)] } if {[info exists MatOl("EstCharge")]} { return "" } set MatOl("EstCharge") 1 set FiMatOfOl "[RepertoireDuGenome]/fiches/matrices_of_oligos" if { ! [file exists $FiMatOfOl]} { if { ! [OuiOuNon "$FiMatOfOl\n does not exist. Do I create it ?" 0]} { return "" } PositionSurMatricesPourTous } set LeVieux [LesLignesDuFichier $FiMatOfOl] set LeNouveau {} foreach Ligne $LeVieux { if { ! [regexp -nocase {[a-z]} $Ligne]} { lappend LeNouveau $Ligne ;continue } set BonneLigne $Ligne set Mat "" scan $Ligne "%s %d %d %s %s" P NA AA Orient Mat if {[regexp {=|~$} $Mat]} { set Mat "" } if {[regexp {=|~$} $Mat]} { set Mat "" } lappend MatOl(LaListeDes,Oligos) $P set Subjects [Oli $P "Subjects"] set Subjects [join [lsort -unique [split $Subjects " "]] " "] set MatSubjects [string trim [StringSuivant "=> " dans $Ligne]] if {$MatSubjects!=$Subjects} { if {$Subjects!="" && [OuiOuNon "for $P\nMat gives $MatSubjects\nOli gives $Subjects\nDo you choose Oli ?"]} { set MatSubjects $Subjects regsub {=> .*} $Ligne "=> $Subjects" BonneLigne } } lappend MatOl($P,Subjects) $MatSubjects lappend MatOl($P,NA) $NA lappend MatOl($P,AA) $AA lappend MatOl($P,Orient) $Orient lappend LeNouveau $BonneLigne if {$NA<=0} { continue } if {[regexp "/" $Mat]} { set FiMat $Mat } else { set FiMat "[RepertoireDuGenome]/nuctfa/$Mat" } lappend MatOl(LaListeDes,Matrices) $Mat lappend MatOl(LaListeDes,Fichiers) $FiMat if {[file exists $FiMat]} { lappend MatOl($P,Matrice) $FiMat if {$Orient=="F"} { lappend MatOl($P,Sequence) [ZoneADNDuFichierTFA $NA end $FiMat] } else { lappend MatOl($P,Sequence) [ZoneADNDuFichierTFA 1 $NA $FiMat] } } else { lappend MatOl($P,Matrice) "FileLoosed" lappend MatOl($P,Sequence) "FileLoosed" } } if {$LeNouveau!=$LeVieux && [OuiOuNon "I made some corrections in\n$FiMatOfOl\nDo I save them ?"]} { SauveLesLignes $LeNouveau dans $FiMatOfOl } set MatOl(LaListeDes,Matrices) [lsort -unique [set MatOl(LaListeDes,Matrices)]] set MatOl(LaListeDes,Fichiers) [lsort -unique [set MatOl(LaListeDes,Fichiers)]] return [MatOl $Qui $Quoi] } proc Match {FileTFA FileOUT Profile} { ### Execute le programme Match de Transfac professional sur un fichier TFA ### #FN = False Negatives #FP = False Positives #Sum = FN et FP #Good = Only high quality matrices if {![file exists $FileTFA]} { return } set FileTFATmp "[TmpFile].tfa" set FileEMBLTmp "$FileTFATmp.seq" file copy -force $FileTFA $FileTFATmp set SeqEMBL [SequenceFormatEMBLDuFichierTFA $FileTFATmp] if {![regexp "//" $SeqEMBL]} { set SeqEMBL "$SeqEMBL\n//" } Sauve $SeqEMBL dans $FileEMBLTmp if {$Profile == "MinFN" } {set FileProfile "[MatchDir data]/minFN81.prf" } if {$Profile == "MinFNGood" } {set FileProfile "[MatchDir data]/minFN_good81.prf" } if {$Profile == "MinFP" } {set FileProfile "[MatchDir data]/minFP81.prf" } if {$Profile == "MinFPGood" } {set FileProfile "[MatchDir data]/minFP_good81.prf" } if {$Profile == "MinSum" } {set FileProfile "[MatchDir data]/minSUM81.prf" } if {$Profile == "MinSumGood"} {set FileProfile "[MatchDir data]/minSUM_good81.prf"} set FileMatrixLibrary "[MatchDir data]/matrixTFP81.lib" Espionne $FileProfile if {[catch {exec [MatchDir] $FileMatrixLibrary $FileEMBLTmp $FileOUT $FileProfile} Message]} {Espionne $Message;return} return } proc MatchCoord {FileMatch FileOut ChromIn StartIn EndIn} { # Recalcule les coordonnées d'un binding site a partir d'un fichier Match filtré set FichierMatch [open "$FileMatch" "r"] set FichierOut [open "$FileOut" "w"] while { [gets $FichierMatch Ligne] >=0 } { ScanLaPipe $Ligne matrice startEtBrin core score sequence set Start [lindex [split $startEtBrin "("] 0] set Strand [lindex [split [lindex [split $startEtBrin ")"] 0] "("] 1] set realStart [expr $StartIn + $Start] set realEnd [expr $realStart + [string length $sequence] -1] puts $FichierOut "$ChromIn:$realStart-$realEnd" } close $FichierMatch close $FichierOut } proc MatchDir {{Quoi ""}} { if {$Quoi == "MatrixLibrary"} {return "[MatchDir data]/matrixTFP81.lib"} if {$Quoi == "data"} {return "/home/lardenoi/DB_TFBS/Transfac/data"} return "/home/lardenoi/DB_TFBS/Transfac/bin/match_tru64" } proc MatchFilter {FileMatch FileOut longueurMax coreMin scoreMin} { # Filtre les resultats de match sur la longueur des sequences , le score et le score du coeur set FichierMatch [open "$FileMatch" "r"] set FichierOut [open "$FileOut" "w"] gets $FichierMatch Ligne gets $FichierMatch Ligne gets $FichierMatch Ligne gets $FichierMatch Ligne gets $FichierMatch Ligne gets $FichierMatch Ligne gets $FichierMatch Ligne gets $FichierMatch Ligne while { [gets $FichierMatch Ligne] >=0 } { Espionne $Ligne ScanLaPipe $Ligne matrice startEtBrin core score sequence set sequence [string trim $sequence] if { [string length $sequence] >= $longueurMax && $core >= $coreMin && $score >= $scoreMin} { puts $FichierOut $Ligne } } close $FichierMatch close $FichierOut } proc MatchWith {Nom FichierBlast Type {IdDeRef 0.95} {PCoverQuery 0.95} {PCoverSubject 0.95}} { if {![file exists $FichierBlast]} {Espionne "no blast file";return [list "$Nom\tNotFound"]} set LesBId [ac_LesProchesDansLeBlastBis $FichierBlast $IdDeRef $PCoverQuery $PCoverSubject] set OrgaDeRef [OrganismeDuPAB $Nom] if {$LesBId=={}} { Espionne "not any BankId with $IdDeRef % aligned" return [list "$Nom\tNotFound"] } if {$Type==""} {return 1} if {$Type=="est"} { AskLesPagesInfos load $LesBId est } if {$Type=="protein"} { AskLesPagesInfos load $LesBId protein } if {$Type=="genbank"} { AskLesPagesInfos load $LesBId genbankfull } set LeTexte {} set One 0 foreach BId $LesBId { set Page [AskLesPagesInfos ask $BId] if {$Page == ""} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} { set One 1 set Access [AskBlast $FichierBlast BanqueId $BId Access] if {$Type=="protein"} { set Def [join [LaDefinitionDeLaProt_PageInfo $Page] " "] } else { set Def [join [LaDefinitionDeLAcNuc_PageInfo $Page] " "] } set Info "$Nom\t$Access\t$Orga\t$Def" lappend LeTexte $Info break } } if {$One==1} {break} } AskLesPagesInfos unset if {$LeTexte == {}} {return [list "$Nom\tNotFound"]} return $LeTexte } proc MatchWithESTs {Nom FichierBlastEST {IdDeRef 0.95}} { if {![file exists $FichierBlastEST]} {Espionne "no blast file";return [list "$Nom\tNoESTFound"]} set NbSubject [AskBlast $FichierBlastEST NbSubject] if {$NbSubject == ""} {Espionne "no subject";return [list "$Nom\tNoESTFound"]} set OrgaDeRef [OrganismeDuPAB $Nom] set LesBId {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlastEST Subject $i] set PAlignees [PourcentageDesBasesAligneesSurToutesLesBasesAlignables $FichierBlastEST $BId] if {$PAlignees < $IdDeRef} {continue} set PAlignables [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables $FichierBlastEST $BId] if {$PAlignables < $IdDeRef} {continue} #Espionne $BId lappend LesBId $BId } if {$LesBId=={}} { Espionne "no good est" return [list "$Nom\tNoESTFound"] } AskLesPagesInfos load $LesBId est set LeTexte {} set One 0 foreach BId $LesBId { set Page [AskLesPagesInfos ask $BId] if {$Page == ""} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} { set One 1 set Access [AskBlast $FichierBlastEST BanqueId $BId Access] set Def [join [LaDefinitionDeLAcNuc_PageInfo $Page] " "] set Info "$Nom\t$Access\t$Orga\t$Def" lappend LeTexte $Info break } } if {$One==1} {break} } AskLesPagesInfos unset if {$LeTexte == {}} {return [list "$Nom\tNoESTFound"]} return $LeTexte } proc MatchWithESTsOuiOuNon {Nom FichierBlastEST {IdDeRef 0.75}} { if {![file exists $FichierBlastEST]} {Espionne "no blast file";return [list "$Nom\tNoESTFound"]} set NbSubject [AskBlast $FichierBlastEST NbSubject] if {$NbSubject == ""} {Espionne "no subject";return [list "$Nom\tNoESTFound"]} set OrgaDeRef [OrganismeDuPAB $Nom] set LesBId {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlastEST Subject $i] set PAlignees [PourcentageDesBasesAligneesSurToutesLesBasesAlignables $FichierBlastEST $BId] if {$PAlignees < $IdDeRef} {continue} set PAlignables [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables $FichierBlastEST $BId] if {$PAlignables < $IdDeRef} {continue} lappend LesBId $BId } if {$LesBId=={}} { return 0 } AskLesPagesInfos load $LesBId est set LeTexte {} set One 0 foreach BId $LesBId { set Page [AskLesPagesInfos ask $BId] if {$Page == ""} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} { set One 1 break } } if {$One==1} {break} } AskLesPagesInfos unset if {$One==1} {return 1} if {$One==0} {return 0} } proc MatchWithESTsPourTous {RepBlastEST FichierResults {IdDeRef 0.95}} { #set FichierResultat "[RepertoireDuGenome]/ResultatsESTs_test" if {[file exists $FichierResults] && [OuiOuNon "$FichierResults exists - Do you want to keep it?"]} { file copy -force $FichierResults old_$FichierResults } foreach Nom [ListeDesPABs] { #Espionne "$Nom en cours..." set FichierBlast "$RepBlastEST/$Nom" set LeResultat [MatchWithESTs $Nom $FichierBlast $IdDeRef] AppendAuFichier $FichierResults [join $LeResultat "\n"] } } proc MatchWithOuiOuNon {Nom FichierBlast Type {IdDeRef 0.95}} { if {![file exists $FichierBlast]} {Espionne "no blast file";return [list "$Nom\tNotFound"]} set NbSubject [AskBlast $FichierBlast NbSubject] if {$NbSubject == ""} {Espionne "no subject";return [list "$Nom\tNotFound"]} set OrgaDeRef [OrganismeDuPAB $Nom] set LesBId {} for {set i 1} {$i <= $NbSubject} {incr i} { set BId [AskBlast $FichierBlast Subject $i] set PAlignees [PourcentageDesBasesAligneesSurToutesLesBasesAlignables $FichierBlast $BId] if {$PAlignees < $IdDeRef} {continue} set PAlignables [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables $FichierBlast $BId] if {$PAlignables < $IdDeRef} {continue} lappend LesBId $BId } if {$LesBId=={}} { return 0 } if {$Type=="est"} { AskLesPagesInfos load $LesBId est } if {$Type=="protein"} { AskLesPagesInfos load $LesBId protein } if {$Type=="genbank"} { AskLesPagesInfos load $LesBId genbankfull } set LeTexte {} set One 0 foreach BId $LesBId { set Page [AskLesPagesInfos ask $BId] if {$Page == ""} {continue} set LesOrgas [LesOrgasDeLaPage_PageInfo $Page] foreach Orga $LesOrgas { if {[string equal -nocase $Orga $OrgaDeRef]} { set One 1 break } } if {$One==1} {break} } AskLesPagesInfos unset if {$One==1} {return 1} if {$One==0} {return 0} } proc MatchWithPourTous {RepBlast Type FichierResults {IdDeRef 0.95} {PCoverQuery 0.95} {PCoverSubject 0.95}} { if {[file exists $FichierResults] && [OuiOuNon "$FichierResults exists - Do you want to keep it?"]} { file copy -force $FichierResults old_$FichierResults } foreach Nom [ListeDesPABs] { Espionne $Nom set FichierBlast "$RepBlast/$Nom" set LeResultat [MatchWith $Nom $FichierBlast $Type $IdDeRef $PCoverQuery $PCoverSubject] AppendAuFichier $FichierResults [join $LeResultat "\n"] } } proc MatriceBlastCNS {{Fichier ""}} { set Match 15 set MisMatch -12 set LesAAs [list "A" "R" "N" "D" "C" "Q" "E" "G" "H" "I" "L" "K" "M" "F" "P" "S" "T" "W" "Y" "V" "B" "Z" "X" "*"] set LaMatrice [list $LesAAs] foreach AA1 $LesAAs { set LaLigne [list "$AA1"] foreach AA2 $LesAAs { if {$AA1 == $AA2} { lappend LaLigne $Match } else { lappend LaLigne $MisMatch } } lappend LaMatrice [join $LaLigne " "] } set Matrice "# Matrix CNS\n# Match +15\n# MisMatch -12\n" append Matrice [join $LaMatrice "\n"] if {$Fichier != ""} { Sauve $Matrice dans $Fichier } return $Matrice } proc MatriceLettreChiffre {{Qui ""} {Quoi ""}} { #A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #-1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 global MatriceLettreChiffre if {[info exists MatriceLettreChiffre($Qui,$Quoi)]} {return $MatriceLettreChiffre($Qui,$Quoi)} if {[info exists MatriceLettreChiffre("EstCharge")]} {return ""} set MatriceLettreChiffre("EstCharge") 1 set ListeDeLettres {B C D E F G H I J K L M N O P Q R S T U V W X Y Z} set i -1 foreach Lettre $ListeDeLettres { incr i set MatriceLettreChiffre($Lettre,i) $i set MatriceLettreChiffre($i,Lettre) $Lettre } lappend MatriceLettreChiffre(A,i) -1 lappend MatriceLettreChiffre(A,i) NA set MatriceLettreChiffre(-1,Lettre) A set MatriceLettreChiffre(NA,Lettre) A return [MatriceLettreChiffre $Qui $Quoi] } proc MatriceLettreChiffreSsMinus1 {{Qui ""} {Quoi ""}} { #A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 global MatriceLettreChiffre if {[info exists MatriceLettreChiffre($Qui,$Quoi)]} {return $MatriceLettreChiffre($Qui,$Quoi)} if {[info exists MatriceLettreChiffre("EstCharge")]} {return ""} set MatriceLettreChiffre("EstCharge") 1 set ListeDeLettres {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} set i -1 foreach Lettre $ListeDeLettres { incr i set MatriceLettreChiffre($Lettre,i) $i set MatriceLettreChiffre($i,Lettre) $Lettre } return [MatriceLettreChiffre $Qui $Quoi] } proc MaxArea {} { # maximum solvent accessible area # Taken from wikipediia : # "Relative Accessible Surface Area" # set asa " A 106 B 160 C 135 D 163 E 194 F 197 G 84 H 184 I 169 K 205 L 164 M 188 N 157 P 136 Q 198 R 248 S 130 T 142 V 142 W 227 X 180 Y 222 Z 196 " return } proc MaxDeListe {l} { set max [lindex $l 0] ; set imax 0 set i 0 foreach v $l { if {$v > $max} { set max $v set imax $i } incr i } return $imax } proc Maxi {a b} { if {$a<$b} { return $b } else { return $a } } proc MaxiDeLaListe {LesX} { set MaxX [lindex $LesX 0] foreach X $LesX { set MaxX [Maxi $X $MaxX] } return $MaxX } proc MdP {{Qui ""} {Pass ""} {Trousseau ""} {Nouveau ""}} { package require md5crypt if {$Trousseau==""} { set Trousseau "/usr/local/apache2/users/TclPass" } foreach Ligne [LesLignesDuFichier $Trousseau] { lassign [split $Ligne ":"] Q P set MdP($Q) $P } if {$Nouveau!=""} { if { ! [MdP ripp $Pass]} { FaireLire "Désolé, pour en créer un nouveau, il faut le MdP pour l'administrateur" ; return 0 } set Nouveau [string range $Nouveau 0 7] set MD5Nouveau [md5crypt::md5crypt password $Nouveau] set iDollard [string last "\$" $MD5Nouveau] set Cle [string range $MD5Nouveau $iDollard+1 end] Espionne "$MD5Nouveau $iDollard $Cle" AppendAuFichier $Trousseau "$Qui:$Cle" return 1 } set Pass [string range $Pass 0 7] set Cle $MdP($Qui) set MD5 "\$1\$$Pass\$$Cle" if {[md5crypt::md5crypt password $Pass]!=$MD5} { return 0 } return 1 } proc Mean-Std {l} { if {[set n [llength $l]] == 0} { return } set m 0.0 ; set m2 0.0 foreach e $l { set m [expr {$m + $e}] set m2 [expr {$m2 + $e*$e}] } set m [expr {$m/$n}] set var 0.0 foreach e $l { set var [expr {$var + ($e-$m)**2}] } set var [expr {$var/($n-1)}] if {$var <= 0.} { set sc 0. } else { set sc [expr {sqrt($var)}] } return [list $m $sc] } proc MeasureDistance {} { set ::PtMD1 "" ; set ::PtMD2 "" set ::pgl(SelectionList) "" trace add variable ::AtomePique write ProcessMeasureDistance bind $::pgl(wogl) [list PickAtom %x %y %W] $::pgl(BoutonDistance) configure -fg yellow return } proc Medals {{LesTitres ""} {LeT ""} {LesHeaders ""} {LesSensDuTri ""} {TagClick ""} {NomDe ""}} { #rR Medals affiche un tableau rectangulaire de lignes I et de colonnes J fournies par le array LeT #rR en début de chaque ligne il y a un titre #rR au dessus de chaque colonne il y a un header #rR Quand on clique sur un rectangle on exécute TagClick. if {$TagClick==""} { set TagClick "podium" } array set T $LeT set LesIJ [array names T] set LesI {} set LesJ {} foreach IJ $LesIJ { lassign [split $IJ ","] I J lappend LesI $I lappend LesJ $J } set LesI [lsort -integer -unique $LesI] set LesJ [lsort -integer -unique $LesJ] foreach I $LesI { foreach J $LesJ { if { ! [info exists T($I,$J)]} { set T($I,$J) 0 } } } set MaxTitreSize -1 foreach Titre $LesTitres { set MaxTitreSize [Maxi $MaxTitreSize [string length $Titre]] } set K [UnCanva "" 600 1600 600 1600] set CRed 0.1 set CBlue 0.5 set CSGx [expr $MaxTitreSize*8] set CSGy 50 set W 50 set Ex 5 set H 20 set Ey $Ex #set Tx 350 #set Ty 80 foreach Header $LesHeaders Sens $LesSensDuTri J $LesJ { set HeaderDe($J) $Header set SensDuTri($J) $Sens set Dx [expr $CSGx + $W*$J + $Ex*$J] set Fx [expr $Dx + $W] set Cx [expr ($Dx+$Fx)/2] if {[regexp {(^-?[0-9]+)\-(-?[0-9]+)$} $Header Match D S F]} { set Header $D } $K create text $Cx [expr $CSGy-20] -text $Header -anchor center } foreach J $LesJ { set Min 99999999 set Max -99999999 foreach I $LesI { if {$T($I,$J)<$Min } {set Min $T($I,$J)} if {$T($I,$J)>$Max } {set Max $T($I,$J)} } set ValeurMin($J) $Min set ValeurMax($J) $Max } foreach Titre $LesTitres I $LesI { regsub -all " " $Titre "_" Titre set TitreDe($I) $Titre set Dy [expr $CSGy + $H*$I + $Ex*$I] set Fy [expr $Dy + $H] set Cy [expr ($Dy+$Fy)/2] $K create text 10 $Cy -text $Titre -anchor w -tags "clade $Titre" foreach J $LesJ { set Dx [expr $CSGx + $W*$J + $Ex*$J] set Fx [expr $Dx + $W] set Cx [expr ($Dx+$Fx)/2] if {$SensDuTri($J)=="0red-100blue"} { set Cmin $CRed set Cmax $CBlue } else { set Cmin $CBlue set Cmax $CRed } if {($ValeurMax($J)-$ValeurMin($J))==0} { set Couleur [Nuance 0.5 $Cmin $Cmax] } else { set Couleur [Nuance [expr 1.0*($T($I,$J)-$ValeurMin($J))/($ValeurMax($J)-$ValeurMin($J))] $Cmin $Cmax] } $K create rectangle $Dx $Dy $Fx $Fy -fill $Couleur -tags "$TagClick $I $J $TitreDe($I) $HeaderDe($J)" $K create text $Cx $Cy -text $T($I,$J) -anchor center -tags "$TagClick $I $J $TitreDe($I) $HeaderDe($J)" } } if {$TagClick=="podium"} { $K bind "podium" <1> "OlymPodium $K" $K bind "clade" <1> "RunBlastOutliers $K UseExpect" $K bind "clade" "RunBlastOutliers $K UseScore" } elseif {$TagClick=="zonard"} { lassign [split $] Clade $K bind "zonard" <1> "ShowZonards $K $NomDe" $K bind "clade" <1> "RunDeltaDistributionForClade $K" } else { $K bind "Distri" <1> "ShowDistriHits $K" $K bind "clade" <1> "RunBlastOutliers $K UseExpect" $K bind "clade" "RunBlastOutliers $K UseScore" } return $K } proc Mediane {Liste} { set ListeTriee [lsort -real $Liste] set NbElements [llength $ListeTriee] puts $NbElements puts [expr $NbElements %2] if {[expr $NbElements %2]} { return [lindex $ListeTriee [expr $NbElements/2]] } else { set MedianePlus1 [lindex $ListeTriee [expr $NbElements/2]] set MedianeMoins1 [lindex $ListeTriee [expr ($NbElements/2)-1]] return [expr ($MedianePlus1+$MedianeMoins1)*1.0/2] } } proc MedianeDeLaListe {Liste} { set ListeTriee [lsort -real $Liste] set NbElements [llength $ListeTriee] if {[expr $NbElements %2]} { return [lindex $ListeTriee [expr $NbElements/2]] } else { set MedianePlus1 [lindex $ListeTriee [expr $NbElements/2]] set MedianeMoins1 [lindex $ListeTriee [expr ($NbElements/2)-1]] return [expr ($MedianePlus1+$MedianeMoins1)*1.0/2] } } proc MedianeInterQuartileMinInterQuartileMaxExtremeMinExtremeMax {Liste} { set Liste [lsort -real $Liste] set nVal [llength $Liste] set RangMediane [expr ($nVal * 1.0 + 1) / 2 - 1] if {$RangMediane == [expr int($RangMediane)]} { set Mediane [lindex $Liste [expr int($RangMediane)]] } else { set RangInf [expr int($RangMediane)] set RangSup [expr $RangInf + 1] set Mediane [expr ([lindex $Liste $RangInf] + [lindex $Liste $RangSup]) * 1.0 / 2] } set Quartile [expr $nVal * 1.0 / 4 ] set RangQuartileMin [expr 1 + $Quartile - 1] set RangQuartileMax [expr $nVal - $Quartile - 1] if {$RangQuartileMax < $RangQuartileMin} {return [list $Mediane $Mediane $Mediane $Mediane $Mediane]} if {$RangQuartileMin == [expr int($RangQuartileMin)]} { set QuartileMin [lindex $Liste [expr int($RangQuartileMin)]] } else { set RangInf [expr int($RangQuartileMin)] set RangSup [expr $RangInf + 1] set QuartileMin [expr ([lindex $Liste $RangInf] + [lindex $Liste $RangSup]) * 1.0 / 2] } if {$RangQuartileMax == [expr int($RangQuartileMax)]} { set QuartileMax [lindex $Liste [expr int($RangQuartileMax)]] } else { set RangInf [expr int($RangQuartileMax)] set RangSup [expr $RangInf + 1] set QuartileMax [expr ([lindex $Liste $RangInf] + [lindex $Liste $RangSup]) * 1.0 / 2] } set ExtremeMin [lindex $Liste 0 ] set HMin [expr $QuartileMin - ($QuartileMax - $QuartileMin) * 1.5] foreach Val $Liste {if {$HMin <= $Val} {set ExtremeMin $Val;break}} set ExtremeMax [lindex $Liste end] set HMax [expr $QuartileMax + ($QuartileMax - $QuartileMin) * 1.5] foreach Val [lsort -real -decreasing $Liste] {if {$Val <= $HMax} {set ExtremeMax $Val;break}} if {$ExtremeMax < $QuartileMax} {set ExtremeMax $QuartileMax} if {$QuartileMin < $ExtremeMin } {set ExtremeMin $QuartileMin} return [list $Mediane $QuartileMin $QuartileMax $ExtremeMin $ExtremeMax] } proc MeetBall {if bbox nbb} { global PAD TFB set itete [$PAD find withtag "$if && tete"] #set Lid [$PAD find overlapping {*}$nbb] set Lid [$PAD find overlapping {*}[$PAD bbox $itete]] foreach tid $Lid { set Ltags [$PAD gettags $tid] if {"$if" in $Ltags} { # la fourmi est contenue dans sa # propre bounding box continue } # si rencontre un mur, repart if {"mur" in $Ltags} { return "danslemur" } # si rencontre fourmi, repart if {"fourmi" in $Ltags} { return "repart" } # boule prise if {"pris" in $Ltags} { continue } # on rencontre boule if {! $TFB($if,hasBall)} { if {$TFB($if,lastBall) != $tid} { # fourmi n a pas de boule # charge boule # puts "charge $tid sur $if" set TFB($if,hasBall) $tid set TFB($if,lastBall) $tid set TFB($if,col) [$PAD itemcget $tid -fill] BouleSurCorps $if $tid lset Ltags 2 "pris" lappend Ltags $if $PAD itemconfig $tid -tags $Ltags # puts "tags $Ltags" # parray TFB "$if,*" return "droit" } else { return "droit" } } else { # depose si meme couleur # sinon repart if {$TFB($if,col) in $Ltags} { # meme couleur, depose # id de boule a deposer set idd $TFB($if,hasBall) # puts "depose $idd de $if" set TFB($if,hasBall) 0 set Ltags [$PAD gettags $idd] lset Ltags 2 "libre" set Ltags [lrange $Ltags 0 end-1] # puts "tags $Ltags" # parray TFB "$if,*" $PAD itemconfig $idd -tags $Ltags return "repart" } else { return "repart" } } } return "droit" } proc MeilleurAccDuBlast_Affymetrix {PAB {RepBlast ""}} { Wup "Permet de verifier si la query a un access dans le blast et de le rendre" Wup "Dans notre cas pour RefSeq et Unigene" Wup "On ne s appuie que sur le IdGlobal" Wup "et le recouvrement de Subject sur Query car no subject sont incomplets (seqencage partiel)" Wup " Nb de bases alignes (A) dans les segments alignes (X) de la query/subject" Wup " ---AAAXAAXA----AAXXAAXXA------- " Wup " ||| || | || || | " Wup " ----------AAAXAAXA----AAXXAAXXA--------------- " Wup " 0000000000111011010000110011001000000000000000 Ex par rapport a Query" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set RepNuctfa "[RepertoireDuGenome]/nuctfa" if {$RepBlast==""} {set "[RepertoireDuGenome]/blastnrshuman"} set FichierBlast "$RepBlast/${PAB}" #Charge les resultats du Blast ############################## set SeuilId "None" set TailleQuery [AskBlast $FichierBlast Taille] set NbSubject [AskBlast $FichierBlast NbSubject] set Texte "" set BId "" set IdGlobal "" set PCoverQuery "" set LesBIds "" #Test de la presence de la Query dans le blast ############################################## if {$NbSubject>0} { set LesBIdsBases "" for {set i 1} {$i <=$NbSubject} {incr i} { set BId [AskBlast $FichierBlast Subject $i] set NbBasesCommuns [NombreDeBasesEnCommun $FichierBlast $BId "Query"] lappend LesBIdsBases [list $BId $NbBasesCommuns] #Espionne "$BId $NbBasesCommuns $TailleQuery" } if {$LesBIdsBases==""} { set BId "" } else { set LesBIdsBases [lsort -integer -index 1 -decreasing $LesBIdsBases] #set BId [lindex [lindex $LesBIdsBases 0] 0] foreach BIdBase $LesBIdsBases { set BId [lindex $BIdBase 0] set Base [lindex $BIdBase 1] if {$Base < [expr $TailleQuery/2] } { #Espionne "On traite pas $BId" continue } set PIdentity 0.95 set PRecouvrement 0.50 set IdGlobal "" set PCoverQuery "" #Pourcentage d identite global: Aligne sur Total dans les alignements #set IdGlobal [PourcentageDIdentiteGlobal $FichierBlast $BId] set n [NombreDeBasesEnCommun $FichierBlast $BId] set NTot [NombreDeBasesDansLesAlignements $FichierBlast $BId] if {$NTot == 0 || $n == "" || $NTot == ""} { set IdGlobal 0 } else { set IdGlobal [expr $n * 1.0 / $NTot] } set TotalBFiltree "0" set NbSegments [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { set NBFiltrees "" set NBFiltrees [NombreDeBasesFiltrees $FichierBlast $BId $Segment Query] if {$NBFiltrees != ""} { set TotalBFiltree [expr $NBFiltrees + $TotalBFiltree] } } if {$TotalBFiltree == 0 || $n == "" || $TotalBFiltree == ""} { set IdGlobalAdjust 0 } else { set IdGlobalAdjust [expr ($n + $TotalBFiltree) * 1.0 / $NTot] } #Espionne "${PAB}: $BId -- $n / $NTot -- $IdGlobal et $TotalBFiltree" #Recouvrement de Q sur S ou inversement #PCoverQuery Query par rapport au Subject #PCoverSubject Subject par rapport au Query set PCoverQuery [PourcentageDeRecouvrement $FichierBlast $BId "Query"] #set PCoverSubject [PourcentageDeRecouvrement $FichierBlast $BId "Subject"] if {($IdGlobal>=$PIdentity || $IdGlobalAdjust>=$PIdentity) && $PCoverQuery>=$PRecouvrement} { lappend LesBIds "$BId $IdGlobal $PCoverQuery" } else { #set BId "" } } } } else {set LesBIds ""} AskBlast unsetfile $FichierBlast if {$LesBIds==""} { return "" } else { return "$LesBIds" } } proc MeilleurAccDuBlast_Ontario {PAB {RepBlast ""}} { Wup "Permet de verifier si la query a un access dans le blast et de le rendre" Wup "Dans notre cas pour RefSeq et Unigene" Wup "On ne s appuie que sur le IdGlobal" Wup "et le recouvrement de Subject sur Query car no subject sont incomplets (seqencage partiel)" Wup " Nb de bases alignes (A) dans les segments alignes (X) de la query/subject" Wup " ---AAAXAAXA----AAXXAAXXA------- " Wup " ||| || | || || | " Wup " ----------AAAXAAXA----AAXXAAXXA--------------- " Wup " 0000000000111011010000110011001000000000000000 Ex par rapport a Query" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set RepNuctfa "[RepertoireDuGenome]/nuctfa" if {$RepBlast==""} {set "[RepertoireDuGenome]/blastnrshuman"} set FichierBlast "$RepBlast/${PAB}" #Charge les resultats du Blast ############################## set SeuilId "None" set TailleQuery [AskBlast $FichierBlast Taille] set NbSubject [AskBlast $FichierBlast NbSubject] set Texte "" set BId "" set IdGlobal "" set PCoverQuery "" #Test de la presence de la Query dans le blast ############################################## if {$NbSubject>0} { set LesBIdsBases "" for {set i 1} {$i <=$NbSubject} {incr i} { set BId [AskBlast $FichierBlast Subject $i] set NbBasesCommuns [NombreDeBasesEnCommun $FichierBlast $BId "Query"] lappend LesBIdsBases [list $BId $NbBasesCommuns] } if {$LesBIdsBases==""} { set BId "" } else { set LesBIdsBases [lsort -integer -index 1 -decreasing $LesBIdsBases] set BId [lindex [lindex $LesBIdsBases 0] 0] set PIdentity 0.95 set PRecouvrement 0.50 set IdGlobal "" set PCoverQuery "" #Pourcentage d identite global: Aligne sur Total dans les alignements set IdGlobal [PourcentageDIdentiteGlobal $FichierBlast $BId] #Recouvrement de Q sur S ou inversement #PCoverQuery Query par rapport au Subject #PCoverSubject Subject par rapport au Query set PCoverQuery [PourcentageDeRecouvrement $FichierBlast $BId "Query"] #set PCoverSubject [PourcentageDeRecouvrement $FichierBlast $BId "Subject"] if {$IdGlobal<$PIdentity || $PCoverQuery<$PRecouvrement} {set BId ""} else {set BId $BId} } } else {set BId ""} AskBlast unsetfile $FichierBlast if {$BId==""} { return "" } else { return "$BId $IdGlobal $PCoverQuery" } } proc MeilleurAful {Nom} { global LeMeilleurAful if { ! [info exists LeMeilleurAful]} { ChargeLeMeilleurAful } if { ! [info exists LeMeilleurAful($Nom)]} { return "AF0000 0 8888.8 noReference"} return [set LeMeilleurAful($Nom)] } proc MeilleurEC {LesECs X M SeuilPourCent} { set Seuil [expr $SeuilPourCent*[llength $LesECs]] lappend LesECs "EC 9999.9999.9999.9999" set LesBonsECs {} foreach EC $LesECs { regsub "EC " $EC "" EC if {$X!=""} { regsub $X $EC $M EC } lappend LesBonsECs $EC } set LesBonsECs [lsort -command CompareEC $LesBonsECs] set Compteur 1 set Old "" set MeilleurCompteur -1 set MeilleurEC "" foreach EC $LesBonsECs { if {$EC == $Old} { incr Compteur continue } if {$Compteur >= $MeilleurCompteur} { set MeilleurCompteur $Compteur set MeilleurEC $Old } set Compteur 1 set Old $EC } if {$MeilleurCompteur<$Seuil} {return ""} return "$MeilleurEC" } proc MeilleurEMBL {Nom} { set onaswiss 0 Espionne "coucoucA" array set TabCorres [LesLignesDuFichier "[RepertoireDuGenome]/fiches/TabCorres"] Espionne "coucoucB" set Racine [GscopeFile $Nom "protembl"] set LesPossibles [lsort [glob -nocomplain ${Racine}_*]] if {$LesPossibles=={}} { return "" } set LesInfos {} foreach Fichier $LesPossibles { set Queue [file tail $Fichier] set LigneDT "" set Fragment 0 set Date "01-JAN-1970" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^SQ " $Ligne]} { break } if {[regexp "^DT " $Ligne]} { set LigneDT $Ligne } if {[regexp "^DE " $Ligne]} { if {[regexp -nocase "\(Fragment\)" $Ligne]} { set Fragment 1 } } } scan $LigneDT "%s %s" Bidon Date set Banque $TabCorres($Queue) lappend LesInfos "$Date $Fragment $Queue $Banque" } set LesInfosTriees [lsort -decreasing -index 0 -command "CompareDate" $LesInfos] #EspionneL $LesInfosTriees foreach elmt [array names TabCorres] { if {[regexp "^$Nom" $elmt]} { if {[regexp "SWISSPROT" $TabCorres($elmt)]} { set onaswiss 1 } } } foreach Info $LesInfosTriees { scan $Info "%s %s %s %s" D F Q B if {$F} { continue } if {$onaswiss && [regexp "SPTREMBL" $B]} {continue} return $Q } scan [lindex $LesInfosTriees 0] "%s %s %s %s" D F Q B return $Q } proc MeilleurMsfClRas {f} { set Ll [LesLignesDuFichier "$f.normd"] foreach l $Ll { if {[regexp "dbclustal" $l]} { set Vd [string range $l [expr [string first ":" $l] +2] end] } if {[regexp "rascal" $l]} { set Vr [string range $l [expr [string first ":" $l] +2] end] } } if {$Vd == "undetermined"} {set Vd -999.} if {$Vr == "undetermined"} {set Vr -999.} set max [Maxi $Vr $Vd] if {$max == -999.} {return "no file"} if {$max == $Vr} { return ".rascal" } else { return "" } } proc MeilleurPdbDuBlast {Nom {Rep ""} {CutPN ""} {MaxListe ""}} { if {$Rep==""} { set Rep "blastp" } if {$CutPN==""} { set CutPN 0.001 } if {$MaxListe==""} { set MaxListe 999 } if {[EstUnPAB $Nom]} { set FichierBlast "[RepertoireDuGenome]/$Rep/$Nom" } else { set FichierBlast $Nom } if { ! [file exists $FichierBlast]} { return "" } set LesR {} DecortiqueBlast $FichierBlast $CutPN $MaxListe Query lBanqueId foreach BId $lBanqueId { if {[EstUnAccessPDB $BId]} { return $BId } } return "" } proc MeilleurPdbDuMsf {Nom {Rep ""} {Query ""}} { Wup "Query peut etre Nom ou un access ou 'QueryInFirstPlace'" if {$Query==""} { set Query [file tail $Nom] } if {$Rep==""} { set Rep "msf" } if {[EstUnPAB $Nom]} { set FichierMsf "[RepertoireDuGenome]/$Rep/$Nom" } else { set FichierMsf $Nom } if { [FileAbsent $FichierMsf]} { return "" } set LeR [IdentiteEtSimilariteDansMSF $FichierMsf $Query] set LeR [lsort -decreasing -command CompareLeDeuxiemeChamp $LeR] foreach R $LeR { scan $R "%s %f %f" Hit PI PS if {[EstUnAccessPDB $Hit]} { return $Hit } } return "" } proc MeilleureFrame {{Quoi ""}} { if {$Quoi==""} { set Quoi "Histo" } foreach Nom [ListeDesPABs] { set Fic "[RepertoireDuGenome]/blastx/$Nom" if { ! [file exists $Fic]} { continue } if { ! [regexp {Frame = [\+\-][123]} [ContenuDuFichier $Fic] Frame]} { continue } regsub "Frame = " $Frame "" F lappend NF "$Nom $F" if { ! [info exists Histo($F)]} { set Histo($F) 0 } incr Histo($F) } if {$Quoi=="NomFrame"} { return [lsort -index 1 $NF] } foreach F [lsort -integer [array names Histo]] { lappend FHisto "$F [set Histo($F)]" } return $FHisto } proc MeilleureLocalisationSurChroContig {Nom} { set LesLocs [LesLocalisationsSurChroContig $Nom] if {$LesLocs=={}} { return "Chro0 Contig00 -1 -1 -" } set Meilleure [lindex $LesLocs 0] if {$Meilleure=="No value"} { return "Chro0 Contig00 0 0 +" } return $Meilleure } proc MeilleurePhrase {LesMeilleuresPhrases LesPhrasesInitiales} { set MeilleurePhrase "" set BestScore 1e300 foreach PhraseA $LesMeilleuresPhrases { set PhraseA [join $PhraseA " "] set Score 0 foreach PhraseB $LesPhrasesInitiales { set Score [expr $Score + [DistanceEntreDeuxPhrases $PhraseA $PhraseB]] } if {$BestScore < $Score} {continue} set BestScore $Score set MeilleurePhrase $PhraseA } return $MeilleurePhrase } proc MeilleuresDefinitions2_0 {lIdOuAccess {MotsOuExprCreux ""} {MotsOuExprInterdits ""} {ratioScores 0.80}} { if {$MotsOuExprCreux eq ""} { set MotsOuExprCreux "#fragment#protein#putative#long#hypothetical#probable#potential#like#related#predicted#undetermined#uncharacterized#open reading frame#clone#chromosome#" } set lMotsOuExprCreux [split [string trim $MotsOuExprCreux "\#"] "\#"] if {$MotsOuExprInterdits eq ""} { set MotsOuExprInterdits "#riken#whole genome shotgun#" } set lMotsOuExprInterdits [split [string trim $MotsOuExprInterdits "\#"] "\#"] # Liste des DE swissprot set lDEswissprot {} # Liste des DE autres que swissprot set lDEautres {} # Liste de toutes les DE pour la recherche des mots significatifs set lDefsDesRef {} foreach IdOuAcc $lIdOuAccess { # Récupère la description set DE [LaDescription2_0 $IdOuAcc] set DENorm [NormaliseDEOuMotOuExpr $DE] # Vérifie qu'il n'y a pas de mot ou d'expression interdite # Sinon on passe au prochain ID/Access set avirer 0 foreach Mot $lMotsOuExprInterdits { if {[regexp -nocase [MotOuExprNormPourRegexp $Mot] $DENorm]} { set avirer 1 #Espionne "VIRE : $Mot TROUVE DANS $DE" break } } if {$avirer} {continue} # Ajoute la description à la liste pour trouver les mots clés lappend lDefsDesRef $DE # Ajoute la discription à la liste swissprot si l'access est un swissprot, sinon à la liste autres if {[EstUnIdOuAccSwissprot $IdOuAcc]} { lappend lDEswissprot $DE } else { lappend lDEautres $DE } } # Récupère les mots clés set lKeywords [SimplementKeywords2_0 $lDefsDesRef $MotsOuExprCreux] #Espionne "Keywords : $lKeywords" # Garde de préférence TOUTES les defs swissprot qui ont au moins un mot clé # sinon on prend les autres set lMeilleuresDef {} foreach {Score Mot} $lKeywords { set MotNorm [MotOuExprNormPourRegexp $Mot] set Trouve 0 #nG if {[regexp -nocase $Mot $lMeilleuresDef]} {continue} foreach DE $lDEswissprot { set DENorm [NormaliseDEOuMotOuExpr $DE] if {[regexp -nocase $MotNorm $DENorm]} { set Trouve 1 lappend lMeilleuresDef $DE #nG break } } if {$Trouve} {continue} foreach DE $lDEautres { set DENorm [NormaliseDEOuMotOuExpr $DE] if {[regexp -nocase $MotNorm $DENorm]} { lappend lMeilleuresDef $DE #nG break } } } set lMeilleuresDef [lsort -unique $lMeilleuresDef] #Espionne "lDEswissprot: $lDEswissprot" #Espionne "lDEautres: $lDEautres" #Espionne "lMeilleuresDef: $lMeilleuresDef" # On score les meilleurs defs et on trie set lNouvelleListe {} foreach DE $lMeilleuresDef { set DENorm [NormaliseDEOuMotOuExpr $DE] set sommeScores 0 foreach {Score Mot} $lKeywords { if {[regexp -nocase [MotOuExprNormPourRegexp $Mot] $DENorm]} { set sommeScores [expr $sommeScores + $Score] } } if {$sommeScores != 0} {lappend lNouvelleListe [list $sommeScores $DE]} } #set lFinale [lsort -increasing -real -index 0 $lNouvelleListe] set lFinale [lsort -command "TriParScoreMinEtLongueurMin $ratioScores" $lNouvelleListe] #Espionne "lFinale : $lFinale" return [join $lFinale] } proc MeilleursCopains {Nom {Organisme "Homo sapiens"}} { global RepertoireDuGenome Wup "Return BID Access Definition of the best blastp hits ('best' means high score and %)" if {[EstUnPAB $Nom]} { set FichierBlast "[RepertoireDuGenome]/blastp/$Nom" } else { set FichierBlast $Nom } if { ! [file exists $FichierBlast]} { return [list "No blastp file available"] } Espionne $FichierBlast if {[DecortiqueBlastPCDNA All All Numbers $FichierBlastP 20 7]==0} {return [list "No hits found"]} Wup "20 7 means that we take from the 20 first access there first 7 hits only" set Trouve 0 set LesDefinitions {} set LesScores {} #pour chaque proteine on cherche le hit de meilleur score foreach BID [DecortiqueBlastPCDNA All All Numbers] { if {[EstUnAccessPDB $BID]} {continue} set Access [DecortiqueBlastPCDNA $BID All Access] set ScoreBestHit 0 foreach Hit [DecortiqueBlastPCDNA $BID All Numbers] { set E [DecortiqueBlastPCDNA $BID $Hit Expect] if {[expr $E>1.e-3] && $E!=0.0} {continue} set nGaps [DecortiqueBlastPCDNA $BID $Hit Gaps] set nId [DecortiqueBlastPCDNA $BID $Hit Identites] set Score($BID,$Hit) [expr $nId + $nGaps] if {[expr [set Score($BID,$Hit)] > $ScoreBestHit] && [expr $nGaps<$nId] } { set ScoreBestHit [set Score($BID,$Hit)] set NumBestHit $Hit } } if {$ScoreBestHit!=0 } { lappend LesScores "$BID $Access $NumBestHit $ScoreBestHit" } } #on regroupe les proteines de meme score set LesSc {} foreach Ligne $LesScores { set Sc [lindex $Ligne end] lappend LesSc $Sc lappend LesProt($Sc) $Ligne } set LesScTries [lsort -integer -decreasing $LesSc] foreach Sc $LesScTries { #on parcourt les groupes jusqu'a en trouver un contenant une proteine humaine foreach Prot [set LesProt($Sc)] { set BanqueID [lindex $Prot 0] set Access [lindex $Prot 1] set LeEMBL [LaSequenceDesBanques $BanqueID $Access a "OnVeutNucEMBL"] if {$LeEMBL!={}} { set OS "Inconnu inconnu" set LaDef {} foreach Ligne $LeEMBL { if {[regexp "^OS " $Ligne]} { set Genre "Inconnu" set Espece "inconnu" scan $Ligne "%s %s %s" Bidon Genre Espece set OS "$Genre $Espece" regsub {\.$} $OS "" OS continue } # on prend une def plus complete que celle de DecortiqueBlastPCDNA if {[regexp "^DE " $Ligne]} { regsub "^DE " $Ligne "" Ligne set Ligne [string trim $Ligne] lappend LaDef $Ligne } } if {$LaDef!={}} { set DE [join $LaDef " "] } set Humaine [regexp -nocase $Organisme $OS] } else { continue } if {$Humaine} { set Trouve 1 lappend LesDefinitions "$BanqueID $Access $DE" } } if {$Trouve} {break} } if {[llength $LesDefinitions] == 0} { lappend LesDefinitions "No human protein with expect less than 1.e-3 in the BlastP results" } Espionne "" return $LesDefinitions } proc MeilleursCopainsDuBlast {Nom {Rep blastngenembl} {CutPN ""} {MaxListe ""}} { global RepertoireDuGenome if {$CutPN==""} { set CutPN 0.001 } if {$MaxListe==""} { set MaxListe 5 } if {[EstUnPAB $Nom]} { set FichierBlast "$RepertoireDuGenome/$Rep/$Nom" } else { set FichierBlast $Nom } if { ! [file exists $FichierBlast]} { return {} } set LesR {} DecortiqueBlast $FichierBlast $CutPN $MaxListe Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN { if {[regexp -nocase "sapiens" $DE]} { set OS "Homo sapiens" } else { set OS "Inconnu inconnu" } set R "$Nom $BanqueId $Access $PN $OS $DE" set LeEMBL [LaSequenceDesBanques $BanqueId $Access a "OnVeutEMBL"] if {$LeEMBL!={}} { set OS "Inconnu inconnu" set LaDef {} foreach Ligne $LeEMBL { if {[regexp "^OS " $Ligne]} { set Genre "Inconnu" set Espece "inconnu" scan $Ligne "%s %s %s" Bidon Genre Espece if {[regexp -nocase "Mitochondrion Homo" "$Genre $Espece"]} { set OS "Homo sapiens" } else { set OS "$Genre $Espece" } regsub {\.$} $OS "" OS continue } if {[regexp "^DE " $Ligne]} { regsub "^DE " $Ligne "" Ligne set Ligne [string trim $Ligne] lappend LaDef $Ligne } } if {$LaDef!={}} { set DE [join $LaDef " "] } set R "$Nom $BanqueId $Access $PN $OS $DE" } lappend LesR $R } if {$LesR=={}} { set LesR [list "$Nom No hits found"] } return $LesR } proc MeilleursCopainsDuBlastPourTous {{Rep blastngenembl} {CutPN ""} {MaxListe ""}} { global RepertoireDuGenome Wup "Creates the file and returns its name. Returns an empty string if nothing found" set Fichier "$RepertoireDuGenome/fiches/cops_$Rep" if {[file exists $Fichier]} { if {[OuiOuNon "Do I keep existing results found in $Fichier ?"]} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom lappend LesOldCops($Nom) $Ligne } if {[info exists Nom]} { unset LesOldCops($Nom) } } File rename -force $Fichier $Fichier.copie File delete -force $Fichier } foreach Nom [ListeDesPABs] { Espionne "Je vais chercher les cops dans $Rep de $Nom" if {[info exists LesOldCops($Nom)]} { AppendAuFichier $Fichier [join $LesOldCops($Nom) "\n"] continue } set LesCops [MeilleursCopainsDuBlast $Nom $Rep] if {$LesCops=={}} { continue } AppendAuFichier $Fichier [join $LesCops "\n"] } if {[file exists $Fichier]} { return $Fichier } else { return "" } } proc MemOlym {{Qui ""} {Quoi ""} {Valeur ""}} { global MemOlym set Qui [string trim $Qui] set Quoi [string trim $Quoi] if {$Qui=="Reset"} { if {[info exists MemOlym]} { unset MemOlym } return "" } if {$Valeur==""} { if {[info exists MemOlym($Qui,$Quoi)]} { return $MemOlym($Qui,$Quoi) } if {[info exists MemOlym("EstCHarge")]} { return "" } } set MemOlym("EstCHarge") 1 lappend MemOlym($Qui,$Quoi) $Valeur return [MemOlym $Qui $Quoi] } proc MemeAlias {AliasDuSujet AliasDuPGS} { if {$AliasDuSujet==""} { return 1 } set LesBonsCouples [list "XPDhs p80hs" "NURR1 hNURR1" "ITK SH1-ITK" "LXRb hLXRb" "hCOUP-TFIIH hCOUP-TFII" "hsTFIIEA TF2EAHS" "SSL1 YLR005WSSL1" "TFB1 YDR311WTFB1" "RARa HRARA"] if {[lsearch -exact $LesBonsCouples "$AliasDuSujet $AliasDuPGS"]} { return 1 } return [string equal -nocase $AliasDuSujet $AliasDuPGS] } proc MemeLigne {} { puts "Coucou" puts "recoucou" foreach I [NombresEntre 1 100] { puts -nonewline "\rI = $I" flush stdout after 100 } } proc MemeOligo {A B {Ap ""}} { if {[string equal -nocase $A $B]} { return 1 } if {$Ap=="Ap"} { set Ap 1 } else { set Ap 0 } if {$Ap && [regexp -nocase "gggtC" $B]} { set BonB "agaaagct$B" set m [Mini [string length $A] [string length $BonB]] incr m -1 if {[string equal -nocase [string range $A 0 $m] [string range $BonB 0 $m]]} { Espionne "Ai recupere par agaaagct \n$A\n$B" return 1 } } if {$Ap && [regexp -nocase "gaaagct" $B]} { set BonB "a$B" set m [Mini [string length $A] [string length $BonB]] incr m -1 if {[string equal -nocase [string range $A 0 $m] [string range $BonB 0 $m]]} { Espionne "Ai recupere par a \n$A\n$B" return 1 } } set lA [string length $A] set lB [string length $B] set L [expr [Mini $lA $lB] - 1 ] if {[expr abs($lA-$lB) > $L ]} { return 0 } set pA [string range $A 0 $L] set pB [string range $B 0 $L] if {[string equal -nocase $pA $pB]} { Espionne "Ai recupere le debordement pour \n$A\n$B" return 1 } return 0 } 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 MemeSequence {} { foreach Nom [ListeDesPABs] { set S [string toupper [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nuctfa"]]] if {[info exists NomsDe($S)]} { set D [lindex $NomsDe($S) end] set mAC [ExtraitInfo $Nom "AccessRefseq:"] set mGN [ExtraitInfo $Nom "ValiGN:"] set tAC [ExtraitInfo $D "AccessRefseq:"] set tGN [ExtraitInfo $D "ValiGN:"] set Message "" if {$mAC!=$tAC} { append Message " $mAC $tAC" } if {$mGN!=$tGN} { append Message " $mGN $tGN" } Espionne "Deja vu $D=$Nom $mAC [format %-10s $mGN] $Message" } lappend NomsDe($S) $Nom } exit } proc MemesSequencesDansFichiersTFA {A B {Pourquoi ""}} { if {$Pourquoi!="" && $Pourquoi!=0} { set Pourquoi 1 } else { set Pourquoi 0 } if {[file isdirectory $B]} { set B "$B/[file tail $A]" } if { ! [file exists $A] } { if {$Pourquoi} { return "0 : file is missing (grey)" } return 0 } if { ! [file exists $B] } { if {$Pourquoi} { return "0 : Query file is missing (white)" } return 0 } set SeqA [QueLaSequenceDuFichierTFA $A] set SeqB [QueLaSequenceDuFichierTFA $B] set lA [string length $SeqA] set lB [string length $SeqB] set Egal [string equal -nocase $SeqA $SeqB] if { ! $Pourquoi } { return $Egal } if {$Egal } { return "1 : same sequences (green)" } if {$lA<$lB && [regexp -nocase $SeqA $SeqB]} { return "0 : Query overlaps (orange)" } if {$lB<$lA && [regexp -nocase $SeqB $SeqA]} { return "0 : Query is overlaped (yellow)" } return "0 : the sequences are different (red)" } proc MemesSequencesDansFichiersTFAPourTous {AutreRep {BonRep ""}} { if {$BonRep==""} { set BonRep "[RepertoireDuGenome]/prottfa" } foreach Nom [ListeDesPABs] { set FichierTFA "$BonRep/$Nom" Espionne "$Nom [MemesSequencesDansFichiersTFA $FichierTFA $AutreRep Pourquoi]" } exit } proc MemoCase {{Qui ""} {Quoi ""} {Valeur ""}} { global MemoCase set Qui [string trim $Qui] set Quoi [string trim $Quoi] if {$Qui=="Reset"} { if {[info exists MemoCase]} { unset MemoCase } return "" } if {$Valeur==""} { if {[info exists MemoCase($Qui,$Quoi)]} { return $MemoCase($Qui,$Quoi) } if {[info exists MemoCase("EstCHarge")]} { return "" } } set MemoCase("EstCHarge") 1 set MemoCase($Qui,$Quoi) $Valeur return [MemoCase $Qui $Quoi] } proc MemoDelta {{Qui ""} {Quoi ""} {Valeur ""}} { global MemoDelta set Qui [string trim $Qui] set Quoi [string trim $Quoi] if {$Qui=="Reset"} { if {[info exists MemoDelta]} { unset MemoDelta } return "" } if {$Valeur==""} { if {[info exists MemoDelta($Qui,$Quoi)]} { return $MemoDelta($Qui,$Quoi) } if {[info exists MemoDelta("EstCHarge")]} { return "" } } set MemoDelta("EstCHarge") 1 lappend MemoDelta($Qui,$Quoi) $Valeur return [MemoDelta $Qui $Quoi] } proc MemoDistri {{Qui ""} {Quoi ""} {Valeur ""}} { global MemoDistri set Qui [string trim $Qui] set Quoi [string trim $Quoi] if {$Qui=="Reset"} { if {[info exists MemoDistri]} { unset MemoDistri } return "" } if {$Valeur==""} { if {[info exists MemoDistri($Qui,$Quoi)]} { return $MemoDistri($Qui,$Quoi) } if {[info exists MemoDistri("EstCHarge")]} { return "" } } set MemoDistri("EstCHarge") 1 lappend MemoDistri($Qui,$Quoi) $Valeur return [MemoDistri $Qui $Quoi] } proc MemoInfo {{Qui ""} {Quoi ""} {Valeur ""}} { global MemoInfo set Qui [string trim $Qui] set Quoi [string trim $Quoi] if {$Qui=="Reset"} { if {[info exists MemoInfo]} { unset MemoInfo } return "" } if {$Valeur==""} { if {[info exists MemoInfo($Qui,$Quoi)]} { return $MemoInfo($Qui,$Quoi) } if {[info exists MemoInfo("EstCHarge")]} { return "" } } set MemoInfo("EstCHarge") 1 lappend MemoInfo($Qui,$Quoi) $Valeur return [MemoInfo $Qui $Quoi] } proc MemoSelection {w {Action Memorize}} { global MemoSelection if {$Action=="Memorize"} { if {[info exists MemoSelection($w)]} { unset MemoSelection($w) } set MemoSelection($w) [$w.frame.list curselection] return [set MemoSelection($w)] } if {$Action=="Recall" && [info exists MemoSelection($w)]} { foreach i [set MemoSelection($w)] { $w.frame.list selection set $i } return [set MemoSelection($w)] } return "" } proc MemoZonards {{Qui ""} {Quoi ""} {Valeur ""} {Action ""}} { global MemoZonards if {$Action==""} { set Action "get" } if {$Action=="get"} { if {[info exists MemoZonards($Qui,$Quoi)] } { return $MemoZonards($Qui,$Quoi) } return "" } if {$Action=="Reset"} { if {[info exists MemoZonards($Qui,$Quoi)] } { unset MemoZonards($Qui,$Quoi) } ; return "" } if {$Action=="set"} { set MemoZonards($Qui,$Quoi) $Valeur ; return $MemoZonards($Qui,$Quoi) } if {$Action=="append"} { lappend MemoZonards($Qui,$Quoi) $Valeur ; return $MemoZonards($Qui,$Quoi) } if {$Action=="unique"} { foreach {K V} [array get MemoZonards] { set MemoZonards($K) [ListeSansDoublon $V] } } return "" } proc MemorisePair {n1 ag1 n2 ag2} { global TAg Sequences set d1 $TAg($ag1,$n1,dep) set f1 $TAg($ag1,$n1,fin) set s [set Sequences($n1)] set d1 [expr {[string length [string map {. ""} [string range $s 0 $d1]]] - 1}] set f1 [expr {[string length [string map {. ""} [string range $s 0 $f1]]] - 1}] set TAg($ag1,$n1,da) $d1 set TAg($ag1,$n1,fa) $f1 set d2 $TAg($ag2,$n2,dep) set f2 $TAg($ag2,$n2,fin) set s [set Sequences($n2)] set d2 [expr {[string length [string map {. ""} [string range $s 0 $d2]]] - 1}] set f2 [expr {[string length [string map {. ""} [string range $s 0 $f2]]] - 1}] set TAg($ag2,$n2,da) $d2 set TAg($ag2,$n2,fa) $f2 set TAg(mem) [list $n1 $ag1 $n2 $ag2] return } proc Memory {} { set V [string repeat "A" 1000000] FaireLire "Je vais remplir la memoire" for {set i 0} {$i<1000000} {incr i} { set T($i) $V } FaireLire "Je vais vider la memoire" array unset T update idletasks FaireLire "J'ai vide la memoire" exit } proc MenageGenomicsManu {} { cd /genomics/link set LesLiens [glob -nocomplain "*Manu*"] foreach Lien $LesLiens { if {[file type $Lien]!="link"} { continue } set Target [file readlink $Lien] # Espionne "$Lien pointe sur $Target" set G [glob -nocomplain $Target] if {$G=={}} { Espionne "$Target" if {[catch {exec ls $Target} Message]} { Espionne $Message } # file delete $Lien } Espionne "$Lien pointe sur $Target" } exit } proc MenageGstock {} { set LesPath {} LConcat LesPath [glob -nocomplain "/gstock/data*/g*/*"] foreach Path $LesPath { if {[regexp {lost\+found} $Path]} { continue } if { ! [regexp {/data[0-9]/g[0-9]+/} $Path]} { continue } if { ! [file isdirectory $Path]} { continue } if {[file type $Path]=="lnk"} { continue } set Owner [file attributes $Path -owner] lappend LesPathDe($Owner) $Path lappend LesOwner $Owner set Queue [file tail $Path] if {[info exists DejaVu($Queue)]} { FaireLire "DejaVu $Queue\n$DejaVu($Queue)\n$Path" } set DejaVu($Queue) $Path } set LesOwner [lsort -unique $LesOwner] set LesTodo {} foreach Owner $LesOwner { foreach Path $LesPathDe($Owner) { lappend LesToDo "$Owner $Path" } if {[FileAbsent "/gstock/user/$Owner"]} { lappend LesMakeOwner "mkdir /gstock/user/$Owner" } } AfficheListe $LesMakeOwner set ToDo [AfficheListe $LesToDo "AvecRetour"] foreach DoIt [split $ToDo "\n"] { scan $DoIt "%s %s" Owner Path set Destin "/gstock/user/$Owner" if {[FileAbsent $Destin]} { set Destin "/gstock/user/Inconnu" } set Queue [file tail $Path] set NewPath "$Destin/$Queue" if {[FileExists $NewPath]} { FaireLire "$NewPath already exists. I'll skip" ; continue } file rename $Path $NewPath } } proc MenageLesTmp {Vert {Choix ""}} { global SortieAutorisee Gs "Frame" set KeepThis ".msf|.log|.blastp" set DeleteThis "" if {$Vert=="Rename" && $Choix==""} { set Choix $KeepThis } if {$Vert=="Delete" && $Choix==""} { set Choix $DeleteThis } if { [info exists SortieAutorisee] } { unset SortieAutorisee } regsub -all " " [eval glob -nocomplain -- tmp.*] "\n" LesTmp if { $LesTmp == "" } { set SortieAutorisee 1 return "" } set Fenetre [AfficheVariable $LesTmp "SansFetchAvecShow" "Select, then Rename or Delete.\n Or Accept Boum"] set bRename [BoutonneLaFenetre $Fenetre "Rename" "RenommeLesTmp \[selection get\] $Fenetre"] set bDelete [BoutonneLaFenetre $Fenetre "Delete" "DeleteLesTmp \[selection get\] $Fenetre"] set bExit [BoutonneLaFenetre $Fenetre "Accept Boum" "set SortieAutorisee 1; destroy $Fenetre"] $bExit configure -background "yellow" -foreground "black" Illumine $Choix $Fenetre [set b$Vert] configure -background "green" -foreground "black" return $Fenetre } proc MenageU133 {{StartPAB ""}} { if {$StartPAB==""} { set StartPAB [Entre "zzz please enter the [PreFixe] where I start to clean ..."] } foreach Nom [ListeDesPABs] { if {$Nom<$StartPAB} { continue } if { ! [OuiOuNonMemo "Do I really clean from $StartPAB"]} { return "" } foreach Fichier [glob -nocomplain [RepertoireDuGenome]/*/$Nom] { Espionne $Fichier file delete $Fichier } continue foreach Fiche [glob -nocomplain [RepertoireDuGenome]/fiches/*] { if { ! [regexp $Nom [ContenuDuFichier $Fiche]]} { continue } Espionne $Fiche } continue } } proc MergeEtRealigneTousLesMSFsDesARPs {} { Wup "Permet de regrouper les msfs des boites concernees" Wup "de les realignees (Rascal)" Wup "de virer les seqs unrelated les realignees (Leon)" Wup "et completer les features (Macsim)" #Liste des noms de fichiers contenant les boites a rassemblees set LesMerges [list lesmsfdesARP1 lesmsfdesARP2 lesmsfdesARP3 lesmsfdesARP4 lesmsfdesARP5 lesmsfdesARP6 lesmsfdesARP7 lesmsfdesARP8 lesmsfdesARP9 lesmsfdesARP10 lesmsfdesARPOrphan1 lesmsfdesARPOrphan2 lesmsfdesARPOrphan3 lesmsfdesARPOrphan4 lesmsfdesARPOrphan5] set LesMerges [list lesmsfdesARP8] #Tableau contenant le nom original des fichiers associes a la boite Espionne "1 -- $LesMerges" foreach Merge $LesMerges { foreach Ligne [LesLignesDuFichier $Merge] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set File $Ligne set TabFile($Merge) [file tail $File] set Tmp "" regsub "lesmsfdesARP" $Merge "LesARPs" Tmp set TabFile($Tmp) [file tail $File] Espionne "$Merge [set TabFile($Merge)] -- $Tmp [set TabFile($Tmp)]" break } } #Permet de merger des fichier msf et rsf #Le fichier de sortie porte une extension .merge foreach Merge $LesMerges { set RepMSF "[RepertoireDuGenome]/alignement_ARP/merge" if {! [file exists $RepMSF]} {file mkdir $RepMSF} set Merge "$RepMSF/$Merge" set Cmd "/home/julie/bin/mergeal.tcl $Merge" if {[catch {eval exec $Cmd} Message]} {Warne "$Merge pb de MERGE:\n>>>>$Message";continue} lappend LesMSFMerge "$Merge.merge" } #Permet de faire le rascal (realigne par block) #.rascal Espionne "2 -- $LesMSFMerge" foreach FM $LesMSFMerge { set RepRascal "[RepertoireDuGenome]/alignement_ARP/rascal" if {! [file exists $RepRascal]} {file mkdir $RepRascal} #lesmsfdesARP1 -- LesARP01s set Output [file tail $FM] if {[regexp {\.[a-z]{3,}$} $Output]} {regsub {\.[a-z]{3,}$} $Output "" Output} regsub "lesmsfdesARP" $Output "LesARPs" Output set Output "$RepRascal/${Output}.rascal" Espionne "$Output" set Cmd "/biolo/rascal/rascal $FM $Output" if {[catch {eval exec $Cmd} Message]} {Warne "$Merge pb de Rascal:\n>>>>$Message";continue} lappend LesMSFRascal "$Output" } #Permet de faire le leon (enleve les seq unrelated) et le macsim (propage et annote les seqs) #/leon et /macsim Espionne "3 -- $LesMSFRascal" foreach FR $LesMSFRascal { set RepLeon "[RepertoireDuGenome]/alignement_ARP/leon" set RepMacsim "[RepertoireDuGenome]/alignement_ARP/macsim" if {! [file exists $RepLeon]} {file mkdir $RepLeon} if {! [file exists $RepMacsim]} {file mkdir $RepMacsim} set Nom [file tail $FR] if {[regexp {\.[a-z]{3,}$} $Nom]} {regsub {\.[a-z]{3,}$} $Nom "" Nom} set Query "[set TabFile($Nom)]" set Output "$RepLeon/$Nom" set FichierLeo "$RepLeon/$Nom.leon" set FichierLog "$RepLeon/$Nom.log" set Cmd "/home/julie/leon/leon.tcsh $FR $Query $FichierLeo $FichierLog" if {[catch {eval exec $Cmd} Message]} {Warne "$Merge pb de Rascal:\n>>>>$Message";continue} Espionne "$Query -- $Output -- $FichierLeo -- $FichierLog" if {[file exists $FichierLeo]} { set FichierRsf "$RepMacsim/$Nom.rsf" ConvertToOneHundred $FichierLeo $FichierLeo catch {exec [HomeRipp]/gscope/bin/macsim $FichierLeo $FichierRsf $Query} } else { Warne "$FichierLeo was not created by Leon ... Bouhhh !" } } return "" } proc MergeLesPolylocalise {} { global RepertoireDuGenome set AutreFichier [ButineArborescence "All" "$RepertoireDuGenome/fiches"] if {$AutreFichier==""} { return "" } foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/polylocalise"] { scan $Ligne "%s" Nom set MaPol($Nom) $Ligne } foreach Ligne [LesLignesDuFichier $AutreFichier] { scan $Ligne "%s" Nom Espionne $Ligne if {[info exists MaPol($Nom)] && ! [regexp "NoBlastFile" [set MaPol($Nom)]]} { lappend LeNouveau $MaPol($Nom) } else { lappend LeNouveau $Ligne } } return [SauveLesLignes $LeNouveau dans "$RepertoireDuGenome/fiches/polylocalise.merge"] } 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 MergeOligosKeepers {{LesKeepers ""} {FiSeq ""}} { while {$LesKeepers==""} { set LesKeepers [MorceauxChoisis [lsort [glob -nocomplain "[RepertoireDuGenome]/atelier/OligosKeeper/*.tfas"]]] if {$LesKeepers!=""} {break} if {[OuiOuNon "Do we cancel ?"]} { return "" } } while {$FiSeq==""} { set FiSeq [FichierPourSaveAs "[RepertoireDuGenome]/atelier/OligosKeeper/OligosKeeper[Date].tfas"] if {$FiSeq=="" && [OuiOuNon "Do I cancel OligosKeeper ?"]} { break } if {$FiSeq==""} { continue } } regsub {.tfas$} $FiSeq "" FiNom regsub {.tfas$} $FiSeq "" FiNot append FiNom ".noms" append FiNot ".nots" set LesLignes {} foreach FiSeqIn $LesKeepers { regsub {.tfas$} $FiSeqIn "" FiNomIn regsub {.tfas$} $FiSeqIn "" FiNotIn append FiNomIn ".noms" append FiNotIn ".nots" foreach Seq [LesLignesDuFichier $FiSeqIn] Nom [LesLignesDuFichier $FiNomIn] Not [LesLignesDuFichier $FiNotIn] { lappend LesLignes "$Nom $Not $Seq" } } while 1 { set LesBonnes [MorceauxChoisis $LesLignes] if {$LesBonnes!=""} { break } if {[OuiOuNon "Do we cancel ?"]} { return "" } } set LesSeq {} set LesNom {} set LesNot {} foreach Ligne $LesBonnes { set LesMots [split $Ligne " "] set Nom [lindex $LesMots 0] set Seq [lindex $LesMots end] set Not $Ligne regsub "^$Nom " $Not "" Not regsub " $Seq$" $Not "" Not lappend LesSeq $Seq lappend LesNom $Nom lappend LesNot $Not } SauveLesLignes $LesNom dans $FiNom SauveLesLignes $LesNot dans $FiNot return [SauveLesLignes $LesSeq dans $FiSeq] } proc MergeXmlForSpine {Nom} { set FichierXmlFromSpine "[RepertoireDuGenome]/XmlFromSpine/$Nom" set FichierMacsimXml "[RepertoireDuGenome]/macsimXml/$Nom" if { ! [file exists $FichierXmlFromSpine] || ! [file exists $FichierMacsimXml]} { return "" } set OneSpineXML [ContenuDuFichier $FichierXmlFromSpine] set NoeudTarget [[dom parse $OneSpineXML] documentElement] set ID [$NoeudTarget selectNodes "string(ID)"] set Workpackage [$NoeudTarget selectNodes "string(workpackage)"] set Workpackage [string trim $Workpackage] set Sequence [$NoeudTarget selectNodes "string(sequence)"] set ProteinName [$NoeudTarget selectNodes "string(proteinName)"] set Species [$NoeudTarget selectNodes "string(species)"] set LesNar {} foreach NoeudDbID [$NoeudTarget selectNodes "databaseID"] { set DatabaseID [$NoeudDbID selectNodes "string(.)"] set Database [$NoeudDbID selectNodes "string(database)"] set Release [$NoeudDbID selectNodes "string(release)"] set Accession [$NoeudDbID selectNodes "string(accession)"] set DB $Database if {$Database=="not provided"} { set DB "unk" } if {$Accession=="" || $Accession=="not provided"} { set MonNar "" } else { set MonNar "$DB:$Accession" } lappend LesNar $MonNar } set Nar [join $LesNar ","] set TexteOS "" if {$Species!="" || $Species!="not provided"} { set TexteOS "of $Species" } set MacsimXml [ContenuDuFichier $FichierMacsimXml] set NoeudMacsim [[dom parse $MacsimXml] documentElement] set NoeudAli [$NoeudMacsim selectNodes "alignment"] set AlnName [$NoeudAli selectNodes "string(aln-name)"] foreach NoeudSequence [$NoeudAli selectNodes "sequence"] { set SeqName [$NoeudSequence selectNodes "string(seq-name)"] if {$SeqName==$Nom} { break } } if {$SeqName!=$Nom} { FaireLire "I can't find the seq-name $Nom in $FichierMacsimXml" return "" } set Organism [$NoeudSequence selectNodes "string(seq-info)"] return } proc MergeXmlForSpinePourTous {} { foreach Nom [ListeDesPABs] { MergeXmlForSpine $Nom } } proc MesAccessInterressants {} { global MesAccessInterressants #Espionne "Charge Access" #set Fichier "[RepertoireDuGenome]/DeJean/MesAccess" #set Fichier "[RepertoireDuGenome]/DeJean/Jumeaux" #set Fichier "[RepertoireDuGenome]/DeJean/Actin1.id" #set Fichier "[RepertoireDuGenome]/DeJean/ListeComplementaire.actin3" set Fichier "[RepertoireDuGenome]/DeJean/LesActin.apres" if {! [file exists $Fichier]} {return ""} set LesAcc "" set Acc "" foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} scan $Ligne "%s" Acc #Espionne $Acc #lappend LesAcc $Acc set MesAccessInterressants($Acc) 1 } Espionne "Last PAB $Acc [llength $LesAcc]" return "" } proc MesBlastsPourLesJumeaux {PAB BanqueBlast {TypeDeBlast N} {Indice 0}} { Wup "Calcul les fichiers BlastP de tous les PABs" Wup "Indice permet de lancer plusieurs fois la procedure en commencant plus loin dans la listedespabs" if {$PAB == ""} {Espionne "No PAB";return ""} if {$TypeDeBlast == "N"} { if {! [file exists "${BanqueBlast}.nin"]} {return "No database for Blast available"} set TypeDeBlast "blastn" } elseif {$TypeDeBlast == "P"} { if {! [file exists "${BanqueBlast}.pin"]} {return "No database for Blast available"} set TypeDeBlast "blastp" } global RepDesSequences set DirDesJumeaux "[RepertoireDuGenome]/Jumeaux" set DirDesFastaEtBlast "$DirDesJumeaux/FastaEtBlast" set LesJumeaux "" if {! [file exists $DirDesJumeaux]} {file mkdir $DirDesJumeaux} if {! [file exists $DirDesFastaEtBlast]} {file mkdir $DirDesFastaEtBlast} if {$PAB == "LaTotale"} {set LesPABs [ListeDesPABs]} else {set LesPABs $PAB} set LesPABs [lrange $LesPABs $Indice end] foreach PAB $LesPABs { set BlastPOutput "$DirDesFastaEtBlast/tmp.${PAB}.blast" set FichierTFA "$RepDesSequences/$PAB" if {! [file exists $FichierTFA] } {continue} if { [file exists $BlastPOutput]} {continue} #Si le fichier fasta existe deja on ne le refait pas if {! [file exists $BlastPOutput]} { set CommandeBlast "eval exec blastall -p $TypeDeBlast -i \$FichierTFA -o \$BlastPOutput -d $BanqueBlast -v 500 -K 0 -b 500 -F F -e 0.001 -a 4" if {[catch {eval $CommandeBlast} Message]} { Espionne "Problem with $FichierTFA" Espionne $Message } } #File delete -force $BlastPOutput } return "" } proc MesCouleurs {f} { global Defauts set abg [set Defauts(BackAppli)] [winfo toplevel $f] configure -background $abg if {[winfo class $f] eq "Frame"} {$f configure -bg $abg} return set ori [set Defauts(BackAppliOri)] set Ll [winfo children $f] foreach e $Ll { if {[winfo children $e] != {} } {MesCouleurs $e} set type [string toupper [winfo class $e]] switch $type { "BUTTON" { if {[$e cget -background] != $ori} {continue} } "NOTEBOOK" { if {[$e cget -background] != $ori} {continue} } "TEXT" {continue} "LABEL" { if {[$e cget -background] != $ori} {continue} } "ENTRY" { if {[$e cget -background] != $ori} {continue} } "CANVAS" { if {[$e cget -background] != $ori} {continue} } "COMBOBOX" { if {[$e cget -background] != $ori} {continue} } "RADIOBUTTON" { $e configure -activebackground $abg } "CHECKBUTTON" { $e configure -activebackground $abg } "SCALE" { if {[$e cget -background] != $ori} {continue} } default continue } $e configure -background $abg } $f configure -background $abg return } proc MesFastasPourLesJumeaux {PAB BanqueFasta {Indice 0}} { Wup "Calcul les fichiers fastaN de tous les PABs" Wup "Indice permet de lancer plusieurs fois la procedure en commencan plus loin dans la listedespabs" if {$PAB == ""} {Espionne "No PAB";return ""} if {$BanqueFasta == ""} {set BanqueFasta "[RepertoireDuGenome]/DeLBMAGM/AllInOne.tfa"} if {![file exists $BanqueFasta]} {return "No bank for Fasta available"} set DirDesJumeaux "[RepertoireDuGenome]/Jumeaux" set DirDesFastaEtBlast "$DirDesJumeaux/FastaEtBlast" set LesJumeaux "" if {! [file exists $DirDesJumeaux]} {File mkdir $DirDesJumeaux} if {$PAB == "LaTotale"} {set LesPABs [ListeDesPABs]} else {set LesPABs $PAB} set LesPABs [lrange $LesPABs $Indice end] foreach PAB $LesPABs { set FastaNOutput "$DirDesFastaEtBlast/tmp.${PAB}.fasta" set BlastNOutput "$DirDesFastaEtBlast/tmp.${PAB}.blast" set SeqPAB "$RepDesSequences/$PAB" #Pour pallier aux limites de FASTA qui ne prend pas une seq de taille > 20000 nt set TailleSeq [string length [QueLaSequenceDuFichierTFA $SeqPAB]] if {$TailleSeq >= 20000} {Espionne "$PAB length over 20000 bases no Fasta available";continue} if {$TailleSeq == 0} {Espionne "$PAB sequence is empty no Fasta available" ;continue} #Si le fichier fasta existe deja on ne le refait pas if {! [file exists $BlastNOutput]} { BlastNAvecFastaN $SeqPAB $BanqueFasta $BlastNOutput $FastaNOutput "0.001" } #File delete -force $FastaNOutput } return "" } proc MesGOInterressants {} { global MesGOInterressants Espionne "Charge GO" set Fichier "[RepertoireDuGenome]/DeJean/MesGOs" if {! [file exists $Fichier]} {return ""} foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[regexp "GO:" $Ligne]} { scan $Ligne "%s" NumGO set MesGOInterressants($NumGO) 1 } } return "" } proc MesIPRInterressants {} { global MesIPRInterressants Espionne "Charge IPR" set Fichier "[RepertoireDuGenome]/DeJean/MesIPRs" if {! [file exists $Fichier]} {return ""} foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[regexp "IPR" $Ligne]} { scan $Ligne "%s" IPR set MesIPRInterressants($IPR) 1 } } return "" } proc MesJumeaux {PAB {Identity ""} {PCoverQuery ""} {PCoverSubject ""} {FichierDesJumeaux ""}} { Wup "Determine au debut d'un projet Gscope les sequences Jumelles" Wup "Necessite une banque avec toutes les sequences du projet au format tfa" Wup "Realise un Fasta pour chaque boite contre toutes et valide les jumeaux" if {$PAB == ""} {Espionne "No PAB";return ""} if {$Identity == ""} {set Identity 0.95} if {$PCoverQuery == ""} {set PCoverQuery 0.95} if {$PCoverSubject == ""} {set PCoverSubject 0.95} global RepDesSequences set DirDesJumeaux "[RepertoireDuGenome]/Jumeaux" set DirDesFastaEtBlast "$DirDesJumeaux/FastaEtBlast" if {$FichierDesJumeaux == ""} {set FichierDesJumeaux "$DirDesJumeaux/TousLesJumeaux_${Identity}_${PCoverQuery}_${PCoverSubject}"} set JumeauxLog "${FichierDesJumeaux}.log" set LesJumeaux "" if {$PAB == "LaTotale"} {set LesPABs [ListeDesPABs]} else {set LesPABs $PAB} #On teste lesquels sont deja fait if {[file exists $FichierDesJumeaux]} { set F [open "$FichierDesJumeaux"] while {[gets $F Ligne]>=0} { scan $Ligne "%s" Premier set DejaCalcule($Premier) [split [string trim $Ligne] " "] } close $F } foreach PAB $LesPABs { set BlastNOutput "$DirDesFastaEtBlast/tmp.${PAB}.blast" set SeqPAB "$RepDesSequences/$PAB" if {$SeqPAB==$RepDesSequences} {return "$SeqPAB pas bon"} if {! [file exists $BlastNOutput]} {continue} #Si on a deja stocke les jumeaux du PAB, on ne les recherche plus if {! [info exists DejaCalcule($PAB)]} { set LesJumeaux [LesProchesDansLeBlast $BlastNOutput $Identity $PCoverQuery $PCoverSubject $JumeauxLog] #Attention si blastoutput vide ou non existant on positionne les jumeaux a PAB #sinon on ne sauvera pas ce PAB dans la liste et il sera perdu a jamais if {$LesJumeaux==""} {set LesJumeaux $PAB} } else { set LesJumeaux [set DejaCalcule($PAB)] } lappend TousLesJumeaux [lsort $LesJumeaux] #On sauve les jumeaux non tries set JumeauxToSave "" if {$LesJumeaux !="" && ! [info exists DejaCalcule($PAB)]} { #set AccessProt [AccessDuTFADeLaProteine "[RepertoireDuGenome]/prottfa_Homo_sapiens/$PAB"] lappend JumeauxToSave $PAB #lappend JumeauxToSave $AccessProt foreach Element $LesJumeaux { if {$Element==$PAB} {continue} #if {0 && $Element==$AccessProt} {continue} lappend JumeauxToSave $Element } AppendAuFichier $FichierDesJumeaux $JumeauxToSave } #On ne garde que la sortie au format Blast #File delete -force $FastaNOutput #File delete -force $BlastNOutput } if {! [info exists TousLesJumeaux]} {return ""} return "" } proc MesMultiChip {Chip} { return [InfoFromArraytypeInput ListOfMultiChip $Chip] } proc MessAide {{V ""}} { set M "$V.messaide" catch {destroy $M} message $M -text [lindex [$V.baide configure -text] 4] -borderwidth 3 -font {Courier 8} -relief raise -width 250 -background "lightyellow" -foreground "black" place $V.messaide -x 10 -y 300 -anchor nw after 1000 "catch {destroy $M}" } proc MetAJourArbreXml {} { global Sequences global LNOrdali global TabSF global NoeudMacsim global LNDG global SDG set RId $NoeudMacsim # Met a jour sequences set Lseq [$RId selectNodes //seq-name] set Ldat [$RId selectNodes //seq-data] foreach n $Lseq d $Ldat { set s [$n selectNodes string(.)] set ix [lsearch $LNOrdali $s] if {$ix == -1} { set p [$n parentNode] $p delete } else { if {[regexp {^PDB_[0-9]} $s]} { set s [string range $s 4 7] } set seq [set Sequences($s)] regsub -all {\.} [string tolower $seq] "-" seq set nodes [$d selectNodes text()] set d [lindex $nodes 0] $d nodeValue $seq } } # Met a jour groupes foreach g $LNDG { if {$g eq "grise"} {continue} if {$g eq "GroupeToutLeMonde"} {continue} set i [string range $g 5 end] foreach s [set SDG($g)] { set qds "//*\[string(seq-name)='$s'\]/descendant::*\[name()='group'\]" set nds [$RId selectNodes "$qds"] foreach n $nds { set nodes [$n selectNodes text()] set n [lindex $nodes 0] $n nodeValue $i } } } return # Met a jour features array set TF [array get TabSF] foreach nm $LNOrdali { set qds "//*\[string(seq-name)='$nm'\]/descendant::*\[name()='fitem'\]" set Lnds [$RId selectNodes "$qds"] foreach n $Lnds { set qri "./*\[name()='ftype'\]" set nft [$n selectNodes $qri] set ft [$nft selectNodes string(.)] set Lfta [set TF($nm,$ft)] set f [lindex $Lfta 0] DecortiqueUneFeature $f dg fg col score note set nx1 [$n selectNodes "./fstart/text()"] $nx1 nodeValue $dg set nx2 [$n selectNodes "./fstop/text()"] $nx1 nodeValue $fg set TF($nm,$ft) [lreplace [set TF($nm,$ft)] 0 0] } } return } proc MetAJourCanvasSecStr {widget cpt SeqAss SeqAlignee MolId} { $widget create text 0 0 -font SeqFont set HautFont [font metrics SeqFont -displayof $widget -linespace ] set LargFont [font measure SeqFont -displayof $widget A] set x1 0 set y1 [expr {$cpt*4*$HautFont+4}] set x2 0 set y2 [expr {$y1+$HautFont}] set x3 0 set y3 [expr {$y2+$HautFont}] $widget create text $x1 $y1 -text $SeqAss -font SeqFont $widget create text $x2 $y2 -text $SeqAlignee -font SeqFont global PDB_[set MolId]_SecStr global PDB_[set MolId]_NmrRes set Rlt "" set NomResDep 0 set NomResFin 0 set Rmk "" foreach ss [set PDB_[set MolId]_SecStr] { DecortiqueSS $ss Elt NomChnDep NomResDep NomResFin Rmk set LesBornes [CorrespondancePDBAli $MolId $NomChnDep $NomResDep $NomResFin $SeqAlignee] set DebAli [lindex $LesBornes 0] set FinAli [lindex $LesBornes 1] # calcule position et trace struc. sec. set x1 [expr {$DebAli*$LargFont}] set x2 [expr {$FinAli*$LargFont}] TraceStrSec $widget $x1 $x2 $y3 $Elt } return } proc MetAJourCluster {LNSG} { global Clus ZoneClusterisation NomSeqSel set iVue [VueCourante index] set iClu [ClusteringCourant index] ChangeClustering $iVue $Clus(Titre) $Clus(Method) $ZoneClusterisation DetruitCluster $iClu if {$Clus(Method) eq "nogroups"} {set gall 1} {set all 0} set Lactive {} foreach {g Ls} $LNSG { if {$g eq "GroupeToutLeMonde" && ! $gall} {continue} if {$g eq "GrSeqOut"} { set Lout $Ls continue } set Li [LesIndexDesSeqs $Ls] EnregistreCluster $iClu $Li $g set Lactive [concat $Lactive $Li] } ChangeActive $Lactive return } proc MetAJourDessinOverview {Id w {f None} {etat 1}} { global Ovw # Pas d'overview presente if {! [array exists Ovw]} { return } if {$Id == -1} { set DeBtn 1 set Li [set Ovw(Liste)] } else { set DeBtn 0 set Li $Id set f [set Ovw(O$Id,Feat)] } # Determine Overview ACTIVE set ni [list] foreach i $Li { if {[set Ovw(O$i,Mac)] != [MacCourant]} {continue} lappend ni $i } if {$ni == {}} {return} {set Li $ni} if {$f eq "automatic"} { DessineFeatureSurOverview $Li "" "None" $etat $DeBtn set Lf [LesBoutonsEnfonces] } else { set Lf $f } foreach Id $Li { foreach f $Lf { DessineFeatureSurOverview $Id "" $f $etat $DeBtn } } return } proc MetAJourFeatures {} { if {! [ModeI]} {return} set ft [CreeFeaturesOrdali] DetruitBoutonsOrdali AfficheBoutonsFeatures return } proc MetAJourFeaturesOverview {args} { global Ovw ListeTypesDeFeatures set LFeat $ListeTypesDeFeatures set LFeat [linsert $LFeat 0 "None" "automatic"] set ic [lsearch $LFeat "Clear"] if {$ic != -1} {set LFeat [lreplace $LFeat $ic $ic]} set CmbWdt [PlusLongEltDe $LFeat] set Ovw(FeatWidth) $CmbWdt set Ovw(LFeat) $LFeat return } proc MetAJourFeaturesRasmol {{n1 ""} {n2 ""} {op ""}} { global RasM if {$n1 != ""} { global $n1 set Lt [set $n1] } else { global ListeTypesDeFeatures set Lt $ListeTypesDeFeatures } set RasM(LFeat) [linsert $Lt 0 "None"] return } proc MetAJourFeaturesViandox {{n1 ""} {n2 ""} {op ""}} { global ListeTypesDeFeatures ListeFeat43d set ListeFeat43d "None" if {[info exists ListeTypesDeFeatures]} { set ListeFeat43d [concat $ListeFeat43d [lsort $ListeTypesDeFeatures]] } return $ListeFeat43d } proc MetAJourFenetreOrdali {} { global WOrdali ListeDesMacs set wdt [PlusLongEltDe $ListeDesMacs] $WOrdali(combomac) configure -values $ListeDesMacs $WOrdali(combomac) current [expr {[llength $ListeDesMacs]-1}] return } proc MetAJourFichierRedondance1 {FichierRedondance1 FichierPartRedondanceAExclure} { foreach Ligne [LesLignesDuFichier $FichierPartRedondanceAExclure] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] set JR [lindex $LesJumeaux 0] set Vu($JR) 1 } foreach Ligne [LesLignesDuFichier $FichierRedondance1] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] set JR [lindex $LesJumeaux 0] if {![info exists Vu($JR)]} {lappend ListeNew $Ligne} } return $ListeNew } proc MetAJourGroupes {} { global SDG LNDG LNOrdali LNSeqlab GroupeDeLaSequence # ATTENTION ! # ici on prend TOUTES les sequences # On n'elimine plus les PDB ! if {[QuelMode] eq "seqlab"} { set LNoms $LNSeqlab } else { set LNoms $LNOrdali } set ig 1 set Lscou {} foreach n $LNoms { if {$n eq ""} { if {[llength $Lscou]} { set gcou "Group${ig}" lappend LGrp $gcou set LSG($gcou) $Lscou set Lscou {} incr ig } } else { lappend Lscou $n } } if {[llength $Lscou]} { set gcou "Group${ig}" lappend LGrp $gcou set LSG($gcou) $Lscou } # Verif qu'on a pas juste change l'ordre dans # un groupe set ok 1 foreach g $LGrp { if {! [info exists SDG($g)]} { set ok 0 break } if {[llength [lor [set SDG($g)] [set LSG($g)]]]} { set ok 0 } } # garde les noms de groupe set Lnme [list] if {$ok && $ig > 2} { foreach e [array names SDG "Equiv,*"] { lappend Lnme $e [set SDG($e)] } } unset -nocomplain SDG LNDG GroupeDeLaSequence set LNDG {} if {$ig > 2} { set LNDG $LGrp array set SDG [array get LSG] # Add names if necessary if {$Lnme != {} } { foreach {k v} $Lnme { set SDG($k) $v } } else { foreach g $LNDG { set SDG(Equiv,$g) $g } } } set LNDG [linsert $LNDG 0 "GroupeToutLeMonde"] set Lt {} foreach n $LNoms { if {$n ne ""} {lappend Lt $n} } set SDG(GroupeToutLeMonde) $Lt AssignSeqToGroup return } proc MetAJourNomsEtSeqs {} { global LNOrdali LSOrdali SDG LNDG Sequences set LNOrdali [list] set LSOrdali [list] set LNDG [ReordonneGroupes $LNDG] if {[llength [lsearch -regexp -all $LNDG {^Group}]] > 1} { set Lg [lrange $LNDG 1 end] } else { set Lg $LNDG } foreach g $Lg { if {[string first "Group" $g] != 0} {continue} lappend LNOrdali {} lappend LSOrdali {} foreach s [set SDG($g)] { lappend LSOrdali [set Sequences($s)] lappend LNOrdali $s } lappend LNOrdali {} lappend LSOrdali {} } return } proc MetAJourOverview {n1 n2 n3 op} { global Ovw ListeTypesDeFeatures LNDG if {! [info exists Ovw]} {return} if {$LNDG eq ""} {return} if {[lequal $LNDG $Ovw(Groupes)]} {return} FaireAttendre "Please Wait ...\nUpdating overviews ..." foreach i $Ovw(Liste) { MetAJourOverviewNo $i } set Ovw(Groupes) $LNDG FaireLaSuite return } proc MetAJourOverviewNo {i} { global Ovw if {[QuelMode] eq "seqlab"} {return} if {[set Ovw(O$i,Mac)] != [MacCourant]} { FaireLire "The overview does not correspond to the current alignment ! As a consequence, the overview window will not be updated." return } eval [set Ovw(O$i,w)] delete [set Ovw(O$i,FOri)] CalculeOverview $i set lf [lreverse [set Ovw(O$i,FeatAff)]] set Ovw(O$i,FeatAff) {} foreach j $lf { unset -nocomplein Ovw(O$i,$j) DessineFeatureSurOverview $i "" $j 1 } return } proc MetAJourTableFeatures {} { global TabSF LNOrdali db ListePDB set i 1 $db eval {begin transaction} set Lfeatvues [list] foreach n $LNOrdali { if {$n eq ""} {continue} set inom [$db eval {select pk_seqinfo from seqinfo where seqname=$n}] set IsPDB [expr {$n in $ListePDB}] if {$IsPDB} { set mol [DonneIdDeAccessPDB $n] set chn [DonneChainDeAccessPDB $n] } foreach a [array names TabSF "${n},*"] { lassign [split $a ,] tmp feat foreach f [set TabSF($a)] { set note "" DecortiqueUneFeature $f dg fg color score note csys if {$note eq ""} {set note "NULL"} set pk [list] #set pk [$db eval {select pk_seqfeat from seqfeat where fstart=$dg and fstop=$fg and fcolor=$color and fscore=$score and fnote=$note and fcsys=$csys}] # already seen if {! [string is integer -strict $pk]} { # dans seqfeat, met feature orig. $db eval {insert into seqfeat values(NULL,$inom, $feat, $dg, $fg, $color, $score, $note, $csys)} set pk [$db last_insert_rowid] } $db eval {insert into ln_seqinfo_seqfeat values($inom,$pk)} # Features sont exprimees en # coords. de la seq ou global # selon fcsys et commencant a 1. # Pour PDB, on N'EST PAS en # coords. PDB, mais coords. # "normales" # (seq commence a 1) if {$csys eq "local"} { if {$IsPDB} { set dg [$mol CoordsSeq2PDB $chn $dg] set fg [$mol CoordsSeq2PDB $chn $fg] } else { # ramene start a 0 incr dg -1 incr fg -1 } set dg [DonnePosSG $n $dg] set fg [DonnePosSG $n $fg] } else { # xml commence a 1 incr dg -1 incr fg -1 } # Skip feature if problem with # start and stop. if {$dg ne "" && $fg ne ""} { # check if already prsent set pk [$db eval {select pk_featali from featali where fstart=$dg and fstop=$fg and fcolor=$color and fscore=$score and fnote=$note and fcsys=$csys}] # already seen if {! [string is integer -strict $pk]} { $db eval {insert into featali values(NULL, $feat, $dg, $fg, $color, $score, $note, $csys)} set pk [$db last_insert_rowid] } $db eval {insert into ln_seqali_featali values($inom,$pk)} } incr i } } } $db eval {commit} return } proc MetAJourVis {Li quoi {Vue ""} Clus} { switch $quoi { "cut" { foreach i $Li { $::db eval {delete from ln_vis_seqali where pk_vis=$vs and pk_seqali=i} } } } return } proc MetAJourWMacs {} { global WOrdali if {[LesMacs] eq ""} {return} set i [lsearch [LesMacs index] [MacCourant]] if {[ModeI]} { $WOrdali(combomac) configure -values [LesMacs] if {$i != -1} { $WOrdali(combomac) current $i } } return } proc MetALEchelle {lfile} { set ref [lindex $lfile 0] global lx$ref ly$ref Lnom MinX MaxX MinY MaxY puts "\nReference : $ref" set sx 0. ; set sy 0. set s2x 0. ; set s2y 0. set n [llength [set lx$ref]] foreach x [set lx$ref] y [set ly$ref] { if {$x < $MinX} {set MinX $x} if {$x > $MaxX} {set MaxX $x} if {$y < $MinY} {set MinY $y} if {$y > $MaxY} {set MaxY $y} set sx [expr {$sx+$x}] set sy [expr {$sy+$y}] set s2x [expr {$s2x+$x*$x}] set s2y [expr {$s2y+$y*$y}] } puts "Somme X : $sx" puts "Somme Y : $sy" set mx [expr {$sx/$n}] set my [expr {$sy/$n}] puts "Moyenne X : $mx" puts "Moyenne Y : $my" set ex [expr {sqrt($s2x/$n-$mx*$mx)}] set ey [expr {sqrt($s2y/$n-$my*$my)}] puts "Sigma X : $ex" puts "Sigma Y : $ey" puts "" foreach f [lrange $lfile 1 end] { global lx$f ly$f puts "Met $f a l'echelle" foreach a {"x" "y"} { set sxy 0. set sy2 0. foreach x1 [set l${a}$ref] x2 [set l${a}$f] { set sxy [expr {$sxy + $x1*$x2}] set sy2 [expr {$sy2 + $x2*$x2}] } set k [expr {$sxy/$sy2}] puts "Pour $a , k= $k" set nv$a {} set s$a 0. foreach v [set l${a}$f] { set nv [expr {$v*$k}] lappend nv$a $nv set s$a [expr {[set s$a] + $nv}] } puts "New sum $a : [set s$a]" } puts "Avant et Apres mise a l'echelle" puts "AVANT mise a l'echelle" puts "CoefCor entre x ref et x $f [CoefficientCorrelation [set lx$ref] [set lx$f]]" puts "CoefCor entre y ref et y $f [CoefficientCorrelation [set ly$ref] [set ly$f]]" puts "APRES mise a l'echelle" puts "CoefCor entre x ref et x $f [CoefficientCorrelation [set lx$ref] [set nvx]]" puts "CoefCor entre y ref et y $f [CoefficientCorrelation [set ly$ref] [set nvy]]" puts "" set fmt "%s | %7.3f %7.3f| %6.3f %6.3f" foreach n $Lnom xr [set lx$f] yr [set ly$f] x [set nvx] y [set nvy] { puts [format $fmt $n $xr $yr $x $y] } puts "" set lx$f $nvx set ly$f $nvy foreach x [set lx$f] y [set ly$f] { if {$x < $MinX} {set MinX $x} if {$x > $MaxX} {set MaxX $x} if {$y < $MinY} {set MinY $y} if {$y > $MaxY} {set MaxY $y} } } puts "MinX $MinX MaxX $MaxX" puts "MinY $MinY MaxY $MaxY" foreach f [lrange $lfile 1 end] { set o [open "${f}.sup" w] puts "\ncomparaison avec ref" foreach n $Lnom xr [set lx$ref] yr [set ly$ref] x [set lx$f] y [set ly$f] { puts [format $fmt $n $xr $x $yr $y] puts $o "$n $x $y" } close $o } return } proc MetChaineA {} { # met le ID de chaine a A dans les PDB de PHYRE2 cd [MiSynPatDir]/data/structures set Ld [lsort [glob -type d "*ars*"]] set Ld "kars" foreach d $Ld { cd $d puts "\n$d :" set fin final.casp.pdb set fout "${d}_mon.pdb" if {! [file exists $fin]} { puts ">> $fin pas la" cd .. continue } if {[file exists $fout]} { file delete $fout } puts "fin $fin" puts "fout $fout" set chnA " A" #set o [open "|moleman >& /home/moumou/logo" w+] set o [open "|moleman " w] set cmd "READ $fin CHAI $chnA 0 0 WRIT $fout Change chain to $chnA Y ** 0 0 A N Y N N QUIT " puts $o $cmd flush $o #close $o cd .. } exit } proc MetDesUnsDansSS {str deb fin} { set lesuns [string repeat "1" [expr {$fin-$deb+1}]] set mod [string replace $str $deb $fin $lesuns] return $mod } proc MetDesZDansSequencesDeFragments {} { global ListeDesFragments LNOrdali Sequences set ider -1 foreach s $ListeDesFragments { set seq [set Sequences($s)] regexp -indices {[A-Z]} $seq iprm regexp -indices {[A-Z]\.*$} $seq ider set iprm [lindex $iprm 0] set ider [lindex $ider 0] set seq1 [string range $seq 0 [expr {$iprm-1]}] set seq2 [string range $seq $iprm $ider] set seq3 [string range $seq [expr {$ider+1}] end] regsub -all {\.} $seq1 "Z" seq1 regsub -all {\.} $seq3 "Z" seq3 set Sequences($s) "$seq1$seq2$seq3" } return } proc MetDumpSurCanvas {LDumpText K DNx NXPP NXP NYPP NYP} { global PrmPrt NomTextSeq set FonteMetrics [font metrics FntPrt] set HauteurLettre [lindex $FonteMetrics 5] set LargeurLettre [font measure FntPrt "Z"] incr NXP -1 incr NYP -1 set Tagon 0 set fg "black" set bg "white" foreach {k v i} $LDumpText { switch $k { "text" { set Texte $v lassign [split $i .] yD xD set xCD [expr {$DNx+($xD+1)*$LargeurLettre-$NXP*$NXPP}] set yCD [expr {($yD-1)*$HauteurLettre-$NYP*$NYPP}] $K create text $xCD $yCD -font FntPrt -anchor nw -tag ItemText -text $Texte -fill $fg } "tagon" { set fg [$NomTextSeq tag cget $v -foreground] set bg [$NomTextSeq tag cget $v -background] lassign [split $i .] yD xD set Texte "" if {$fg eq ""} {set fg "black"} if {$Tagon} { set fg "black" set bg "white" } set Tagon 1 } "tagoff" { if {! $Tagon} {continue} set Tagon 0 lassign [split $i .] yF xF if {$yF != $yD} { if {$Texte ne ""} { set yF $yD set xF [expr {$xD+[string length $Texte]}] } else { set fg "black" set bg "white" continue } } set xCD [expr {$DNx+($xD+1)*$LargeurLettre-$NXP*$NXPP}] set xCF [expr {$DNx+($xF+1)*$LargeurLettre-$NXP*$NXPP}] set yCD [expr {($yD-1)*$HauteurLettre-$NYP*$NYPP}] set yCF [expr {$yD*$HauteurLettre-$NYP*$NYPP}] set id [$K create rectangle $xCD $yCD $xCF $yCF -fill $bg -width 0 ] set fg "black" set bg "white" } } } $K raise ItemText return } proc MetExtreme {Seq Depart} { Wup "numerotation commence a 0" regsub -all " " $Seq "" Seq set DernierBon $Depart foreach I [NombresEntre $Depart 1 -3] { set Codon [string range $Seq $I [expr $I+2]] # if {[CodonStartPossible $Codon]} { set DernierBon $I } if {[string equal -nocase $Codon "ATG"]} { set DernierBon $I } if {[CodonStopPossible $Codon]} { break } } return $DernierBon } proc MetHeureAJour {args} { global maclock global CanTime showLCD $CanTime $maclock } 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 MetTagsSurCanvas {K DNx DX FX DY FY} { global PrmPrt NomTextSeq set size $PrmPrt(FontSize) if {$PrmPrt(ColRes)} { set cW [image width CN_${size}_A] set cH [image height CN_${size}_A] } else { set cW $PrmPrt(WdLet) set cH $PrmPrt(HgLet) } for {set y $DY ; set j 0} {$y <= $FY} {incr y ; incr j} { set s [lindex $PrmPrt(LSeqs) $y] set yp [expr {$j*$cH}] if {$PrmPrt(ColRes)} { set x0 $DNx } else { set x0 [expr {$DNx-1}] } for {set x $DX ; set i 0} {$x <= $FX} {incr x ; incr i} { set c [string index $s $x] if {$c eq " "} {set c ""} set xp [expr {$x0+$i*$cW}] if {$PrmPrt(ColRes)} { $K create image $xp $yp -image CN_${size}_$c -anchor nw } else { $K create text $xp $yp -text $c -font FntPrt -anchor nw -tags [list LaSeq "S$x.$y"] } } set Lst [SequenceTaggee $y $DX $FX] set xd $DX foreach t $Lst { lassign $t x1 x2 col itag set x1l [expr {$DNx + ($x1-$xd)*$cW}] set x2l [expr {$DNx + ($x2-$xd+1)*$cW}] if {$col eq "black"} { $K itemconfigure "S$x1.$y" -fill white } set yf [expr {$yp+$cH-1}] $K create rectangle $x1l $yp $x2l $yf -fill $col -outline $col -tags UnTag } } #$K lower UnTag $K raise LaSeq update idletasks return foreach {k v i} $LDumpText { switch $k { "text" { set Texte $v lassign [split $i .] yD xD set xCD [expr {$DNx+($xD+1)*$LargeurLettre-$NXP*$NXPP}] set yCD [expr {($yD-1)*$HauteurLettre-$NYP*$NYPP}] $K create text $xCD $yCD -font FntPrt -anchor nw -tag ItemText -text $Texte -fill $fg } "tagon" { set fg [$NomTextSeq tag cget $v -foreground] set bg [$NomTextSeq tag cget $v -background] lassign [split $i .] yD xD set Texte "" if {$fg eq ""} {set fg "black"} if {$Tagon} { set fg "black" set bg "white" } set Tagon 1 } "tagoff" { if {! $Tagon} {continue} set Tagon 0 lassign [split $i .] yF xF if {$yF != $yD} { if {$Texte ne ""} { set yF $yD set xF [expr {$xD+[string length $Texte]}] } else { set fg "black" set bg "white" continue } } set xCD [expr {$DNx+($xD+1)*$LargeurLettre-$NXP*$NXPP}] set xCF [expr {$DNx+($xF+1)*$LargeurLettre-$NXP*$NXPP}] set yCD [expr {($yD-1)*$HauteurLettre-$NYP*$NYPP}] set yCF [expr {$yD*$HauteurLettre-$NYP*$NYPP}] set id [$K create rectangle $xCD $yCD $xCF $yCF -fill $bg -width 0 ] set fg "black" set bg "white" } } } $K raise ItemText return } proc MettreEnFormeSIPoulet {} { #set Fichier "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/SIPoulet" #set FichierSortieRMA "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/SIRMAPoulet" #set FichierSortiedChip "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/SIdChipPoulet" set Fichier "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIPouletControl" set FichierSortieRMA "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIRMAPouletControl" set FichierSortiedChip "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIdChipPouletControl" set premierefois 1 foreach Ligne [LesLignesDuFichier $Fichier] { set LesMots [split $Ligne "\t"] set GI [lindex $LesMots 0] set AC [lindex $LesMots 1] set PS [lindex $LesMots 2] set Des [lindex $LesMots 3] set sample [lindex $LesMots 4] set AS [lindex $LesMots 5] set SI [lindex $LesMots 7] if {$premierefois} { if {$AS=="RMA" && $sample=="Chicken_cone_adult"} {set SIRMACone $SI} if {$AS=="RMA" && $sample=="Chicken_fibroblasts_adult"} {set SIRMAFibro $SI} if {$AS=="dChip" && $sample=="Chicken_cone_adult"} {set SIdChipCone $SI} if {$AS=="dChip" && $sample=="Chicken_fibroblasts_adult"} {set SIdChipFibro $SI} set PSprecedent $PS set DesPrecedent $Des set GIprecedent $GI set ACprecedent $AC set premierefois 0 continue } else { if {$PSprecedent==$PS} { if {$AS=="RMA" && $sample=="Chicken_cone_adult"} {set SIRMACone $SI} if {$AS=="RMA" && $sample=="Chicken_fibroblasts_adult"} {set SIRMAFibro $SI} if {$AS=="dChip" && $sample=="Chicken_cone_adult"} {set SIdChipCone $SI} if {$AS=="dChip" && $sample=="Chicken_fibroblasts_adult"} {set SIdChipFibro $SI} } else { set LigneRMA "$GIprecedent\t$ACprecedent\t$PSprecedent\t$DesPrecedent\tRMA\t$SIRMACone\t$SIRMAFibro" lappend LesLigneRMA $LigneRMA set LignedChip "$GIprecedent\t$ACprecedent\t$PSprecedent\t$DesPrecedent\tdChip\t$SIdChipCone\t$SIdChipFibro" lappend LesLignedChip $LignedChip if {$AS=="RMA" && $sample=="Chicken_cone_adult"} {set SIRMACone $SI} if {$AS=="RMA" && $sample=="Chicken_fibroblasts_adult"} {set SIRMAFibro $SI} if {$AS=="dChip" && $sample=="Chicken_cone_adult"} {set SIdChipCone $SI} if {$AS=="dChip" && $sample=="Chicken_fibroblasts_adult"} {set SIdChipFibro $SI} set PSprecedent $PS set DesPrecedent $Des set GIprecedent $GI set ACprecedent $AC } } } set LigneRMA "$GIprecedent\t$ACprecedent\t$PSprecedent\t$DesPrecedent\tRMA\t$SIRMACone\t$SIRMAFibro" lappend LesLigneRMA $LigneRMA set LignedChip "$GIprecedent\t$ACprecedent\t$PSprecedent\t$DesPrecedent\tdChip\t$SIdChipCone\t$SIdChipFibro" lappend LesLignedChip $LignedChip set LesLigneRMA [lsort -command CompareLigneTabulee5 -decreasing $LesLigneRMA] set LesLignedChip [lsort -command CompareLigneTabulee5 -decreasing $LesLignedChip] SauveLesLignes $LesLigneRMA dans $FichierSortieRMA SauveLesLignes $LesLignedChip dans $FichierSortiedChip } proc MettreEnFormeSIPouletSsRedondPS {FichierEntree FichierSortie} { #meme chose qu'au dessus sauf que dans le cas ou pls ps correspondent a un seul gene, on ne prends en compte que la ps ac le plus haut Signal Inensity #set FichierEntreeRMA "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIRMAPouletControl" #set FichierEntreedChip "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIdChipPouletControl" #set FichierSortieRMA "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIRMAPouletControlSsRedond" #set FichierSortiedChip "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIdChipPouletControlSsRedond" set premierefois 1 foreach Ligne [LesLignesDuFichier $FichierEntree] { Espionne "$Ligne" set trouve 0 set LesMots [split $Ligne "\t"] set GI [lindex $LesMots 0] set AC [lindex $LesMots 1] set PS [lindex $LesMots 2] if {$premierefois} { Espionne "premiere" lappend LesLignesFinales $Ligne lappend LesAC $AC set premierefois 0 continue } else { foreach ACListe $LesAC { if {$AC == $ACListe} { Espionne "on le trouve" set trouve 1 } } if {!$trouve} { Espionne "on le trouve pas" lappend LesAC $AC lappend LesLignesFinales $Ligne } } } SauveLesLignes $LesLignesFinales dans "$FichierSortie" } proc MiRNAFromRefseq {Access} { global MiRNAFromRefseq if {[info exists MiRNAFromRefseq($Access)]} { return $MiRNAFromRefseq($Access) } if {[info exists MiRNAFromRefseq("EstCharge")]} { return "" } foreach Nom [ListeDesPABs] { set AccessLu [ExtraitInfo $Nom "AccessRefseq"] set MiRNAFromRefseq($AccessLu) $Nom lappend MiRNAFromRefseq(ListOfAccess) $AccessLu } set MiRNAFromRefseq("EstCharge") 1 return [MiRNAFromRefseq $Access] } proc MiSynPatAddStructuralModulesToMacsims {{Force ""} {Lequel ""}} { set Force [string equal -nocase Force $Force] set LesNouveaux {} foreach FeatFile [lsort [glob -nocomplain "[MiSynPatDir]/data/StructuralModulesFeatures/$Lequel*.feat"]] { if { ! [regexp {/[A-Z].feat$} $FeatFile] } { continue } set Queue [file tail $FeatFile] Espionne $Queue set A [file rootname $Queue] set MacsimsIn "[MiSynPatDir]/data/alignments/${A}_WithModules.xml" set MacsimsOut "[MiSynPatDir]/data/alignments/${A}_WithModules_new.xml" if {[FileAbsent $MacsimsIn] } { Warne "$MacsimsIn does not exist" ; continue } if {[FileExists $MacsimsOut] && ! $Force} { Warne "$MacsimsOut already exists" ; continue } set Reponse [exec ordali $MacsimsIn -exe AddModules $FeatFile] ;#rR on y rajoute _WithModules set Recu [lindex [split $Reponse " "] end] Warne "Ordali created $Recu" lappend LesNouveaux $Recu } return $LesNouveaux } proc MiSynPatDir {} { return "[HomeRipp]/wwwLinux/misynpat/" } proc MiSynPatMajDisease {{DoIt ""}} { set Fichier "[MiSynPatDir]/disease20151104.csv" set DoIt [string equal -nocase $DoIt "DoIt"] CanalSqlMiSynPat set LesPkModifies {} foreach Ligne [LesLignesDuFichier $Fichier] { lassign [split $Ligne ";"] pk sd ld om or regsub -all "#" $om " " om regsub -all { +} $om " " om set om [string trim $om] if { ! [regexp {^[0-9]+$} $pk] } { continue } set LesLus [SqlExec "select * from disease where pk_disease=$pk" "GetList"] lassign $LesLus pkLu sdLu skLu omLu orLu if {$sd!=$sdLu} { Espionne $Ligne Espionne $LesLus set Sql "update disease set sdisease='$sd' where pk_disease=$pk" Espionne $Sql if {$DoIt} { SqlExec $Sql } lappend LesPkModifies $pk } if {$om!=$omLu} { Espionne $Ligne Espionne $LesLus set Sql "update disease set omim='$om' where pk_disease=$pk" Espionne $Sql if {$DoIt} { SqlExec $Sql } lappend LesPkModifies $pk } } CanalSqlDisconnect if { ! $DoIt } { Espionne "*****************************************************************" Espionne "* Attention run 'MiSynPatMajDisease DoIt' if you want to update *" Espionne "*****************************************************************" return "I_did_nothing_for_the_moment" } return $LesPkModifies } proc MiSynPatStructuralModules {{Qui ""} {Quoi ""}} { #rR On lit le fichier Excel de Marie #rR Attention je fais quelques petites tricheries pour corriger les incohérences #rR Attention on remplace tous les blancs par des _ global SM if {[info exists SM($Qui,$Quoi)]} { return $SM($Qui,$Quoi) } if {[info exists SM($Qui,I)]} { set I $SM($Qui,I) if {[info exists SM($I,$Quoi)]} { return $SM($I,$Quoi) } return "" } if {[info exists SM("EstCharge")]} { return "" } set SM("EstCharge") 1 set LesDomainesConnus [list HIGH KMSKS motif_1 motif_2 motif_3 Putative_MTS Anticodon_Binding_domain Catalytic_domain Insertion_domain helix_of_dimerization] set Fichier "[MiSynPatDir]/data/StructuralModulesFeatures/StructuralModules.csv" LoadTxlWithRowsOfCells $Fichier SM -1 ";" foreach I $SM(ListAllPlease,) { set A $SM($I,1_letter_code) set AAA $SM($I,3_letters_code) lappend SM(ListOf,A) $A lappend SM(ListOf,AAA) $AAA set SM($A,I) $I set SM($AAA,I) $I set SM($I,A) $A set SM($I,AAA) $AAA if {$SM($I,HIGH)==""} { set SM($I,class) "I" } else { set SM($I,class) "II" } set SM($I,Limits) {} ;#rR attention dans un deuxième temps on changera l'ordre en gardant le parallele Limits Domains set SM($I,Domains) {} if {[regexp "/" $SM($I,Others)]} { set SM($I,Others) "" } if {$SM($I,Others)!=""} { regsub -nocase {SAD *= *ThrRS and AlaRS} $SM($I,Others) "" SM($I,Others) set SM($I,Others) [string trim $SM($I,Others)] set Others $SM($I,Others) set Names $SM($I,name_of_Others) if {[regexp " and " $Others]} { regsub " and " $Others "@" Others regsub "omain and " $Names "omain@" Names set LesLimites [split $Others "@"] set LesDomaines [split $Names "@"] } else { set LesLimites [list $Others] set LesDomaines [list $Names] } set LesD {} foreach D $LesDomaines { regsub -all " " $D "_" D lappend LesD $D } set LesDomaines $LesD set SM($I,Limits) $LesLimites set SM($I,Domains) $LesDomaines } foreach Dom $LesDomainesConnus { if {[regexp "/" $SM($I,$Dom)]} { set SM($I,$Dom) "" } if {$SM($I,$Dom)==""} { continue } lappend SM($I,Limits) $SM($I,$Dom) lappend SM($I,Domains) $Dom } } foreach I $SM(ListAllPlease,) { foreach L $SM($I,Limits) D $SM($I,Domains) { set SM($I,$L) $D } set SM($I,Limits) [lsort -command SortLimits $SM($I,Limits)] set OrderedDomains {} set OrderedLimits {} set LesPetits {} foreach L $SM($I,Limits) { Espionne "$L $SM($I,$L)" lassign [split $L "-"] D F if {$F-$D<12} { lappend LesPetits $L ; continue } lappend OrderedDomains $SM($I,$L) lappend OrderedLimits $L } foreach L $LesPetits { lappend OrderedDomains $SM($I,$L) lappend OrderedLimits $L } Espionne $OrderedDomains Espionne $OrderedLimits set SM($I,Domains) $OrderedDomains set SM($I,Limits) $OrderedLimits } set SM(Queue,) $SM(Queue) return [MiSynPatStructuralModules $Qui $Quoi] } proc MiSynPatStructuralModulesAsFeatures {} { #rR On crée les fichiers features qui seront intégrés dans les macsims et dans la base de données foreach A [MiSynPatStructuralModules ListOf A] { set LesSM {} lappend LesSM "FEATURE MODULE PROPAGATE all" foreach L [MiSynPatStructuralModules $A Limits] M [MiSynPatStructuralModules $A Domains] { lassign [split $L "-"] D F regsub -all "_" $M " " M set Color [StructuralModuleColor $M] Espionne "$L $D $F $M" lappend LesSM "${A}mito_Homo.sapi;local;$D;$F;$Color;0.0;$M" } if {[llength $LesSM]==1} { continue } set a [string tolower $A] set Fichier "${A}.feat" lappend LesNouveaux [SauveLesLignes $LesSM dans $Fichier] } return $LesNouveaux } proc MiSynPatStructuralModulesForDatabase {{Qui ""} {Quoi ""} {Quid ""} {GetWhat ""}} { #rR GetWhat = GetIt pour avoir les infos #rR GetWhat = ShowIt pour voir les commandes sql de mise à jour de la table synthtase.features de MiSynpat.sql #rR GetWhat = DoIt pour mettre à jour la table synthtase.features de MiSynpat.sql #rR Attention il faut avoir fait les .feat avec MiSynPatStructuralModulesAsFeatures regsub -all " " $Quoi "_" Quoi regsub -all " " $Quid "_" Quid if {$GetWhat==""} { set GetWhat "GetIt" } set GetIt [string equal -nocase $GetWhat "GetIt"] set ShowIt [string equal -nocase $GetWhat "ShowIt"] set DoIt [string equal -nocase $GetWhat "DoIt"] package require sqlite3 set File "[MiSynPatDir]/misynpat.sql" set db "root" sqlite3 $db $File set NFs [$db eval {select sName,features from synthetase order by sName}] set LesTodo {} set LesDone {} foreach {N Features} $NFs { set A [string index $N 0] set LesFeatures [split $Features ","] set SeqLen [string trim [lindex $LesFeatures 0] "'"] set LesFeatures [lrange $LesFeatures 1 end] set LesFeatures [lsort -command SortByStart $LesFeatures] #rR ici on remplit Module pour le GetIt ................ en partant de sql foreach Feature $LesFeatures { regsub -all "'" $Feature "" Feature set LesMots [split $Feature " "] lassign $LesMots Acc Deb Fin Color Name set A [string index $Acc 0] lappend Module($A,Modules,) "$Deb $Fin $Color $Name" lappend Module(ListOf,A,) $A lappend Module(ListOf,Name,) $Name } #rR ici on prepare les new pour la mise à jour ......... en partant des .feat if {$DoIt || $ShowIt} { set LesNews {} foreach Ligne [LesLignesDuFichier "[MiSynPatDir]/data/StructuralModulesFeatures/$A.feat"] { if {[regexp "^FEATURE" $Ligne]} { continue } set LesMots [split $Ligne ";"] lassign $LesMots Acc Loc Deb Fin Color Score Comment regsub -all " " $Comment "_" Comment set NewFeat "$Acc $Deb $Fin $Color $Comment" lappend LesNews $NewFeat } set New "'$SeqLen','[join $LesNews ',']'" if {$ShowIt} { lappend LesTodo "$db eval {update synthetase set features=$New where sName=$N}" } if {$DoIt} { $db eval {update synthetase set features=$New where sName=$N} lappend LesDone $Acc } } } if { $ShowIt } { return $LesTodo } if { $DoIt } { return $LesDone } #GetIt set Module(ListOf,A,) [lsort -unique $Module(ListOf,A,)] set Module(ListOf,Name,) [lsort -unique $Module(ListOf,Name,)] if {[info exists Module($Qui,$Quoi,$Quid)] } { return $Module($Qui,$Quoi,$Quid) } if {[info exists Module($Qui,Modules,)] } { foreach Mod $Module($Qui,Modules,) { lassign $Mod Deb Fin Color Name set DF "$Deb-$Fin" regsub -all " " $Name "_" Name set Module($Qui,$Name,Name) $Name set Module($Qui,$Name,DF) $DF set Module($Qui,$Name,Deb) $Deb set Module($Qui,$Name,Fin) $Fin set Module($Qui,$Name,Color) $Color lappend Module($Qui,ListOf,Name) $Name lappend Module($Qui,ListOf,DF) $DF lappend Module($Qui,ListOf,Deb) $Deb lappend Module($Qui,ListOf,Fin) $Fin lappend Module($Qui,ListOf,Color) $Color foreach K [list DF Deb Fin Name] { set Module($Qui,[set $K],Name) $Name set Module($Qui,[set $K],DF) $DF set Module($Qui,[set $K],Deb) $Deb set Module($Qui,[set $K],Fin) $Fin set Module($Qui,[set $K],Color) $Color } } if {[info exists Module($Qui,$Quoi,$Quid)]} { return $Module($Qui,$Quoi,$Quid) } return "" } return "" } proc MiSynPat_CalculeAccessibilite {} { cd [file join [MiSynPatDir] data structures] puts "pwd [pwd]" # prepare base set table "- rsa : { . pk_rsa P . system V1 . RSAmon T . RSAdim T }" if {[file exists rsa.sql]} { file delete rsa.sql } set db [FabriqueDeTables $table "" rsa.sql] set Ldir [lsort [glob -type d "*ars*"]] foreach aadir $Ldir { puts "$aadir" cd $aadir puts "pwd [pwd]" set system [string toupper [string index $aadir 0]] set dimer "${aadir}_model.pdb" set pdbid "1${system}RS" Structure create $pdbid set pdbText [ContenuDuFichier $dimer] set cok [$pdbid new $pdbText "" 0 1] if {$cok != 1} { puts "\tBad PDB, obsolete or superseeded" return 0 } # sauve chaine A $pdbid save A all all 0 "${pdbid}_A.pdb" # calcule accessibilite unset -nocomplain NAcc catch {exec naccess ${pdbid}_A.pdb} Msg set Crsa [ContenuDuFichier ${pdbid}_A.rsa] set aNAccess [ReadNAccessOutput $Crsa] file delete ${pdbid}_A.asa file delete ${pdbid}_A.log file delete ${pdbid}_A.rsa file delete ${pdbid}_A.pdb array set NAcc $aNAccess puts "[array names NAcc]" set RSAmon $NAcc(rsa,A) # check si on fait dimer ou pas if {[llength [$pdbid _chains]] > 1} { unset -nocomplain NAcc # on a dimer catch {exec naccess $dimer} Msg set Crsa [ContenuDuFichier ${aadir}_model.rsa] set aNAccess [ReadNAccessOutput $Crsa] file delete ${aadir}_model.asa file delete ${aadir}_model.log file delete ${aadir}_model.rsa array set NAcc $aNAccess puts "dim [array names NAcc]" set RSAdim $NAcc(rsa,A) } else { set RSAdim $RSAmon } $db eval {insert into rsa values(NULL,$system,$RSAmon,$RSAdim)} cd .. } $db close exit return } proc Milieu {Nom} { return [expr ([Box $Nom debut]+[Box $Nom fin])/2] } proc MinDeListe {l} { set min [lindex $l 0] ; set imin 0 set i 0 foreach v $l { if {$v < $min} { set min $v set imin $i } incr i } return $imin } proc Mini {a b} { if {$a<$b} { return $a } else { return $b } } proc MiniBootstrap {FichierPhylo} { global ListeDistanceDeChaqueFeuille global Cible global MiniOuSomme set Cible [file tail $FichierPhylo] set MiniOuSomme "Mini" set Arbre [ArbreBootstrapEnListe [ContenuDuFichier $FichierPhylo]] set ListeDistanceDeChaqueFeuille {} AppendEtRetourneDistance $Arbre "Inconnue" puts "\n$Cible" puts [join $ListeDistanceDeChaqueFeuille "\n"] } proc MiniDeLaListe {LesX} { set MinX [lindex $LesX 0] foreach X $LesX { set MinX [Mini $X $MinX] } return $MinX } proc MiseAJourAvecLesInfosDuGenoscope {} { global RepertoireDuGenome global InformeSansDemander set InformeSansDemander 1 foreach Fichier [glob "$RepertoireDuGenome/DuGenoscope/infos.dir/*"] { set Nom [file tail $Fichier] Informe $Nom [ContenuDuFichier $Fichier] } } proc MiseAJourBornesDesPABs {NouvelleBorne {ReCharge ""}} { if {$ReCharge==""} { set ReCharge "ReCharge" } if {$ReCharge=="ReCharge" } { set ReCharge 1 } else { set ReCharge 0 } set FichierBornesDesPABs "[RepertoireDuGenome]/fiches/bornesdespabs" scan $NouvelleBorne "%s %d %d %s" Nom Debut Fin Orient set BelleBorne "$Nom $Debut $Fin $Orient" set LesBornes {} foreach Ligne [LesLignesDuFichier $FichierBornesDesPABs] { if { ! [regexp -nocase {[A-Z_]+[0-9]+ +[0-9]+ +[0-9]+ [FR] *} $Ligne]} { if {[regexp -nocase {[A-Z0-9]} $Ligne]} { FaireLire "I'll skip the illegal line \n$Ligne" } continue } scan $Ligne "%s %d %d %s" N D F O lappend LesBornes "$N $D $F $O" } if {[set i [PlaceDuPAB $Nom]]<0} { lappend LesBornes "$Nom $Debut $Fin $Orient" } else { set LesBornes [lreplace $LesBornes $i $i $BelleBorne] } SauveLesLignes $LesBornes dans $FichierBornesDesPABs if { ! $ReCharge } { return "" } global ListeDesPABs ; unset ListeDesPABs global ListeDeBoites ; unset ListeDeBoites return [ListeDesPABs] } proc MiseAJourCytologicMap {} { set RepMonHuman "[HumanGenomeDir]/Localisation" set FichierContigs "$RepMonHuman/seq_contig.md" set FichierCytologicMapOriginal "$RepMonHuman/CytologicMap_original" set FichierCytologicMap "$RepMonHuman/CytologicMap" Espionne "UpDate of CytologicMap" if {![file exists $FichierCytologicMapOriginal]} { puts "$FichierCytologicMapOriginal does not exist" puts "I am going to copy the Frederic version" file copy -force "/home/chalmel/CytologicMap/CytologicMap_original" $FichierCytologicMapOriginal } ChargeContigsDesChromosomes Contigs $FichierContigs foreach Ligne [LesLignesDuFichier $FichierCytologicMapOriginal] { if {![regexp {[0-9a-z]} $Ligne]} {continue} set LaLigne [split $Ligne "\t"] set Chromosome [lindex $LaLigne 0] if {![info exists Tab($Chromosome,TailleEstimee)]} {set Tab($Chromosome,TailleEstimee) 0} set TailleBande [lindex $LaLigne 2] if {[set Tab($Chromosome,TailleEstimee)] < $TailleBande} { set Tab($Chromosome,TailleEstimee) $TailleBande } } set NouveauTexte "" foreach Ligne [LesLignesDuFichier $FichierCytologicMapOriginal] { if {![regexp {[0-9a-z]} $Ligne]} {continue} set LaLigne [split $Ligne "\t"] set Chromosome [lindex $LaLigne 0] set Chromo [NumeroDuChromosome $Chromosome] set TailleChromoReelle [expr [set Contigs($Chromo,Taille)]*1.0/1e6] set TailleChromoEstimee [set Tab($Chromosome,TailleEstimee)] set Bande [lindex $LaLigne 1] set TailleBande [lindex $LaLigne 2] set Couleur [lindex $LaLigne 3] if {$Couleur == "cen"} {set Couleur "centromere"} set TailleBandeReelle [expr $TailleBande*$TailleChromoReelle/$TailleChromoEstimee] append NouveauTexte "$Chromosome\t$Bande\t$TailleBandeReelle\t$Couleur\n" } Sauve $NouveauTexte dans $FichierCytologicMap return "$NouveauTexte" } proc MiseAJourDatesBiblio {{pmid ""}} { set Where "" if {$pmid!=""} { set Where "where pmid=$pmid" } set LesRecords [SqlExecForDatabase "MiSynPat" "select pmid,datem,datey,pk_biblio from biblio $Where" "GetListOfList"] set NbTot 0 set NbOk 0 set NbEmpty 0 set NbADiff 0 set LesUpdate {} foreach Record $LesRecords { lassign $Record P M A Pk set Lrest [eSummaryREST pubmed $P] array set T $Lrest if { ! [info exists T($P,PubDate)]} { continue } incr NbTot set PubDate $T($P,PubDate) Espionne $PubDate lassign [split $PubDate " -"] PA PM Espionne "$A=$PA $PM=$M=" if {$A!="" && $A!=$PA} { incr NbADiff ; continue } if {$M==$PM && $A==$PA} { incr NbOk ; continue } if {$M=="" || $A==""} { if {[Month1to12 $PM]!=0 } { set Update "update biblio set datem='$PM', datey='$PA' where pk_biblio=$Pk" lappend LesUpdate $Update } incr NbEmpty } else { incr NbDiff } Espionne "$P $A = $PubDate = $M" } Espionne "[llength $LesRecords] $NbADiff $NbTot $NbOk $NbEmpty" set LesUpdateAFaire [split [AfficheListe $LesUpdate "AvecRetour"] "\n"] foreach Update $LesUpdateAFaire { SqlExecForDatabase "MiSynpat" $Update } return $LesUpdate } proc MiseAJourDesAccessDuFichierMSF {Fichier {Output ""}} { Wup "Updates the old access numbers (mainly SPTNEW) with the new one" Wup " the old access appears in the DBxref field" Wup "If I detect 2 identical sequences I delete the second one." if {$Output==""} { set Output "$Fichier.maj" } if {$Output!="GetLines"} { set FichierSortie $Output } DecortiqueUnMSF $Fichier LesAccess Sequences foreach Access $LesAccess { set ACCESS [string toupper $Access] set DejaVu($ACCESS) 1 regsub -all {\.} [set Sequences($Access)] "" Sequences($Access) set Sequences($ACCESS) [set Sequences($Access)] } foreach Access $LesAccess { set ACCESS [string toupper $Access] Espionne $Access if { ! [regexp -nocase {^[a-z]{3}[0-9]+$} $Access] } { continue } set LesLignesEMBL [LaSequenceDesBanques $Access $Access AccessOk "OnVeutEMBL"] set Meilleur "" foreach Ligne $LesLignesEMBL { if { ! [regexp "^AC " $Ligne]} { continue } regsub -all {[\;\.]} $Ligne " " Ligne scan $Ligne "%s %s" Bidon AccessLu if {[string equal -nocase $Access $AccessLu]} { break } set Meilleur $AccessLu } if {$Meilleur==""} { continue } set ACCESSLU [string toupper $AccessLu] Espionne "$Access $Meilleur" if {[info exists DejaVu($ACCESSLU)]} { Espionne $ACCESSLU if {[string equal -nocase [set Sequences($Access)] [set Sequences($ACCESSLU)]]} { set AJeter($ACCESS) 1 } else { Espionne "[set Sequences($Access)]\n[set Sequences($ACCESSLU)]" if { ! [info exists Numero($ACCESSLU)]} { set Numero($ACCESSLU) 1 } incr Numero($AccessLu) set Meilleur "${AccessLu}_[set Numero($AccessLu)]" } } set Meilleurs($ACCESS) $Meilleur set MEILLEUR [string toupper $Meilleur] set DejaVu($MEILLEUR) 1 set Sequences($MEILLEUR) [set Sequences($Access)] } Espionne [array get AJeter] Espionne [array get Meilleurs] foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z0-9_]} $Ligne]} { lappend Sortie $Ligne ; continue } scan $Ligne "%s %s" AccessOuName Access if { ! [string equal -nocase $AccessOuName "Name:"]} { set Access $AccessOuName } set ACCESS [string toupper $Access] Espionne "Je teste $Access" if {[info exists AJeter($ACCESS)]} { Espionne "Je jette $Access" ; continue } if {[info exists Meilleurs($ACCESS)]} { set Meilleur [set Meilleurs($ACCESS)] set M [expr [Maxi [string length $Meilleur] [string length $Access]] - 1] set Old [string range "$Access " 0 $M] set New [string range "$Meilleur " 0 $M] regsub $Old $Ligne $New Ligne } lappend Sortie $Ligne } if {$Output=="GetLines"} { return $Sortie } return [SauveLesLignes $Sortie dans $FichierSortie] } proc MiseAJourDesBlastnesthuman {FichierPop RepSeq} { #set FichierPop "/genomics/link/Procure/PRIMA_DB/PopTotale.txt" #set FichierPop "/genomics/link/Procure/PRIMA_DB/PopTotale_interm" set L [CreeListePourFichierAUneColonne $FichierPop] foreach Nom $L { Espionne $Nom #set RepSeq "/genomics/link/Procure/mrnatfa_Homo_sapiens/" set FichierSeq "$RepSeq/$Nom" if {[file exist $FichierSeq]} { exec gscope yes BlastNPourTous est-human $Nom $RepSeq } } } proc MiseAJourDesEtiquettes {K} { global LesDemarcationsVerticales global LesDemarcationsHorizontales global LesAbscissesVerticales global LesAbscissesHorizontales global LesEtiquettesVerticales global LesEtiquettesHorizontales foreach Id [$K find withtag "Etiquette"] { set SesTags [$K gettags $Id] set Position [lindex $SesTags 1] set i [lsearch [set LesAbscissesVerticales($K)] $Position] set Etiquette [lindex [set LesEtiquettesVerticales($K)] $i] set SesTags [lreplace $SesTags 5 5 $Etiquette] $K itemconfigure $Id -text $Etiquette -tags $SesTags } } proc MiseAJourDesFichiersApns {{NomVoulu ""}} { global RepertoireDuGenome Wup "Updates the lines where no organism was found" Wup "Updates if < SeuilExpect and 250 first one only" set SeuilExpect 0.001 scan [TailleSortiePourDBClustal] "%d %d" MinObliges MaxVoulus set MaxListe {Maxi 250 [expr 3*$MaxVoulus]} if { ! [file exists "$RepertoireDuGenome/apns_maj"]} { File mkdir "$RepertoireDuGenome/apns_maj" } if {$NomVoulu==""} { set Liste [ListeDesPABs] } else { set Liste [list $NomVoulu] } foreach Nom $Liste { Espionne "Je mets a jour les cops de $Nom" set FichierAPNs "$RepertoireDuGenome/apns/$Nom" if { ! [file exists $FichierAPNs]} { continue } set FichierNouveau "$RepertoireDuGenome/apns_maj/$Nom" if {[file exists $FichierNouveau]} { continue } set nLu 0 set LesAccess {} foreach Ligne [LesLignesDuFichier $FichierAPNs] { scan $Ligne "%s %s %s" BanqueId Access Expect incr nLu lappend LesAccess $Access set GEs "" regsub " *$BanqueId +$Access +$Expect *" $Ligne "" GEs if { ! [regexp -nocase {[a-z]} $GEs]} { continue } set OrgaTrouve([string toupper $Access]) $GEs } foreach AGEs [LesOrgasDesAccess $LesAccess] { scan $AGEs "%s" A regsub "$A " $AGEs "" GEs regsub {(^|\:)Inconnu inconnu($|\:)} $GEs "" GEs if {$GEs==""} { continue } set OrgaTrouve([string toupper $A]) $GEs } set MesOrgas {} set nLu 0 foreach Ligne [LesLignesDuFichier $FichierAPNs] { scan $Ligne "%s %s %f" BanqueId Access Expect if {[EstUnAccessPDB $BanqueId]} { continue } set ACCESS [string toupper $Access] set Orgas "" if {[info exists OrgaTrouve($ACCESS)]} { set Orgas [set OrgaTrouve($ACCESS)] } else { if {$Expect <= $SeuilExpect && $nLu <= $MaxListe && ! [EstUnAccessPDB $Access]} { set Orgas [OrgaDuAccess $Access Complet $BanqueId] if {$Orgas!=""} { Espionne " J'ai trouve pour $Nom $Orgas" } } } AppendAuFichier $FichierNouveau "$BanqueId $Access $Expect $Orgas" } } return } proc MiseAJourDesNomsDeVariables {Fichier} { set Texte [ContenuDuFichier HGE1034757799155101] set LesMots [split $Texte "&"] foreach Mot $LesMots { ScanLaListe [split $Mot "="] Var Val lappend LesBonnesVars $Var } set Texte [ContenuDuFichier $Fichier] set LesMots [split $Texte "&"] foreach Mot $LesMots BonneVar $LesBonnesVars { ScanLaListe [split $Mot "="] Var Val lappend LesVarVal "$BonneVar=$Val" } Espionne [Sauve [join $LesVarVal "&"] dans $Fichier.nouveau] exit } proc MiseAJourDesNouveaux {} { global RepertoireDuGenome global InformeSansDemander set InformeSansDemander 1 foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/DuGenoscope/nouveau"] { catch {unset Cop1 Cop2} set Append "" regexp "[ExpressionReguliereDesPABs]" $Ligne Nom regexp -indices "ExpressionReguliereDesPABs" $Ligne iNom scan $iNom "%d %d" Moi Prochain incr Prochain set Ligne [string range $Ligne $Prochain end] if { ! [regexp "[ExpressionReguliereDesPABs]" $Ligne Cop1] } { Espionne "$Nom est nouveau" set Append "Pris-nulle-part: Je suis un nouveau" } else { regexp -indices "[ExpressionReguliereDesPABs]" $Ligne iCop1 scan $iCop1 "%d %d" Moi Prochain incr Prochain set Ligne [string range $Ligne $Prochain end] regexp "[ExpressionReguliereDesPABs]" $Ligne Cop2 if { [info exists Cop2]} { Espionne "$Nom $Cop2" foreach Info [LesLignesDuFichier $RepertoireDuGenome/../aby/infos/$Cop1] { append Append "\nPris-dans-$Cop2: $Info" } } Espionne "$Nom $Cop1" foreach Info [LesLignesDuFichier $RepertoireDuGenome/../aby/infos/$Cop1] { append Append "\nPris-dans-$Cop1: $Info" } } Informe $Nom $Append } } proc MiseAJourDesPABCrees {} { global RepertoireDuGenome foreach Trou [LesLignesDuFichier "$RepertoireDuGenome/creepab3.liste"] { set CreePABDejaVu 0 regsub "TROU" $Trou "[PreFixe]" Nom set Nom [string range $Nom 0 6] set InfoDuPAB {} lappend InfoDuPAB "Nom: $Nom" foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/infos/$Trou"] { if {[regexp "^Nom:" $Ligne]} { continue } if {[regexp ": $" $Ligne]} { continue } if {[regexp "^CreePAB:" $Ligne]} { if {$CreePABDejaVu} { FaireLire "$Trou contient plusieurs CreePAB.\nCreer infos +1000 manuellement, avec emacs." } set CreePABDejaVu 1 regsub "CreePAB" $Ligne "DuTrou" Ligne append Ligne " du $Trou" } lappend InfoDuPAB $Ligne } Espionne [SauveLesLignes $InfoDuPAB dans "$RepertoireDuGenome/infos/$Nom"] } } proc MiseAJourDesPDesExistings {} { foreach Fichier [lsort [glob "[RepertoireDuGenome]/atelier/*/*existing*.list"]] { Espionne $Fichier foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s %s %s %s" Existant please use P if {[Oli $P "Type"]=="IgnoreOli"} { continue } if {[Oli $P "Type"]=="MutOli"} { continue } set LesSS [split $Existant "_"] if {[Oli $P Sens]=="5'"} { set Existant [lindex $LesSS end] } else { set Existant [lindex $LesSS 0] } set Vu 0 if { ! [info exists LesSujets($P)]} { set LesSujets($P) [Oli $P "Subjects"] set TFA($P) [Oli $P "TFA"] } foreach Sujet $LesSujets($P) { if {[string equal $Sujet $Existant]} { set Vu 1 ; break } } if {$Vu} { Espionne "Vu $Existant dans $P" ; continue } lappend LesSujets($P) $Existant if {[regexp " RebuildedBrockenOli " $TFA($P)]} { regsub " RebuildedBrockenOli " $TFA($P) " $Existant RebuildedBrockenOli " TFA($P) } elseif {[regexp " BrocOli " $TFA($P)]} { regsub " BrocOli " $TFA($P) " $Existant BrocOli " TFA($P) } else { regsub "\n" $TFA($P) " $Existant\n" TFA($P) } Espionne "" Espionne $Existant Espionne $TFA($P) Sauve $TFA($P) dans "[RepertoireDuGenome]/oligos/$P.tfa" } } } proc MiseAJourEntreesBiblio {{db ""} {PmidsSpecifiques ""}} { if {$db==""} { package require sqlite3 set Fichier "[MiSynPatDir]/misynpat.sql" set db "root" sqlite3 $db $Fichier } set LesInfoDispo [list PubMonth Issue MeSHMinor Title LAuthors Abstract JrnAbbv MeSHMajor Volume PubYear Pages JrnName] set Corre(Issue) "" set Corre(MeSHMinor) "" set Corre(MeSHMajor) "" set Corre(JrnName) "" set Corre(Title) titre set Corre(Abstract) abstract set Corre(JrnAbbv) sJournal set Corre(LAuthors) auteurs set Corre(Volume) volume set Corre(PubYear) datey set Corre(PubMonth) datem set Corre(Pages) pages set LesOk {} if {$PmidsSpecifiques!=""} { set pmids [split $PmidsSpecifiques ","] } else { set pmids [$db eval {select pmid from biblio}] } set pmids [lsort -unique $pmids] foreach pmid $pmids { set Tout [$db eval {select * from biblio where pmid=$pmid}] foreach K [list Pmid Accepted Abstract Journal Auteurs Pages Mois Annee Titre Volume Hits] { set $K "" } lassign $Tout Pk Pmid Accepted Abstract Journal Auteurs Pages Mois Annee Titre Volume Hits set ToutOk 1 foreach K [list Pmid Accepted Abstract Auteurs Annee Titre] { if {[set $K]==""} { set ToutOk 0 ; Espionne "$pmid $K" ; break } } if {$ToutOk} { continue } Espionne "$pmid" set Linfo [eFetchREST pubmed $pmid] if {[info exists Tinfo]} { unset Tinfo } array set Tinfo $Linfo if { ! [info exists Tinfo($pmid,Title)] && ! [info exists Tinfo($pmid,Abstract)] && ! [info exists Tinfo($pmid,PubYear)]} { continue } lappend LesOk $pmid parray Tinfo set LesUpdate {} foreach I $LesInfoDispo { if { ! [info exists Corre($I)] || $Corre($I)==""} { Espionne "pas de $I" ; continue } if { ! [info exists Tinfo($pmid,$I)] } { Espionne "pas de info pour $I" ; continue } set V $Tinfo($pmid,$I) regsub -all "'" $V "''" V lappend LesUpdate "$Corre($I)='$V'" } if {$LesUpdate!={}} { set Update "update biblio set [join $LesUpdate ,] where pmid=$pmid" Espionne $Update } $db eval $Update } return $LesOk } proc MiseAJourFormulairePourMichel {FichierForm LesSeq LesNom LesNot} { set Formulaire [ContenuDuFichier $FichierForm] regsub -all -nocase "\"ctrloligo.php\"" $Formulaire "\"[UrlCommandeOligo]/ctrloligo.php\"" Formulaire regsub -all -nocase "\"oligcde.css\"" $Formulaire "\"[UrlCommandeOligo]/oligcde.css\"" Formulaire set iP 0 foreach Seq $LesSeq Nom $LesNom Not $LesNot { set FORMULAIRE [string toupper $Formulaire] set iP [string first "NAME=\"PSEQ" $FORMULAIRE $iP] if {$iP<0} { FaireLire "I did't find an available pseq in $FichierForm\nI'll break" break } set iV [string first "VALUE=" $FORMULAIRE $iP] set iQuote [string first "\"" $FORMULAIRE $iV] set Formulaire [string replace $Formulaire $iQuote $iQuote "\"$Seq"] set FORMULAIRE [string toupper $Formulaire] set iP [string first "NAME=\"PNOM" $FORMULAIRE $iP] if {$iP<0} { FaireLire "I did't find an available pnom in $FichierForm\nI'll break" break } set iV [string first "VALUE=" $FORMULAIRE $iP] set iQuote [string first "\"" $FORMULAIRE $iV] set Formulaire [string replace $Formulaire $iQuote $iQuote "\"$Nom"] set FORMULAIRE [string toupper $Formulaire] set iP [string first "NAME=\"PEXP" $FORMULAIRE $iP] if {$iP<0} { FaireLire "I did't find an available pexp in $FichierForm\nI'll break" break } set iV [string first "VALUE=" $FORMULAIRE $iP] set iQuote [string first "\"" $FORMULAIRE $iV] set Formulaire [string replace $Formulaire $iQuote $iQuote "\"$Not"] set FORMULAIRE [string toupper $Formulaire] } return $Formulaire } proc MiseAJourGPG {} { CanalSqlGenoret FaireLire "Merci de ne plus m'executer " exit; foreach Ligne [LesLignesDuFichier "[HomeRipp]/gpg.txt"] { set Ligne [string trim $Ligne] if {$Ligne==""} { continue } scan $Ligne "%s %s %s" Gpid NM Gn set Gn [string trim $Gn ":"] set Sql "select gpid,name,accessnum from imanno.gpaintgene where gpid='$Gpid';" lassign [SqlExec $Sql "GetList"] i n a Espionne $Ligne if {$a!=""} { FaireLire "$Ligne \n $i $n $a" } #if {$n!=$Gn} { FaireLire "$Ligne \n $i $n $Gn" } set Update "update imanno.gpaintgene set accessnum='$NM' where gpid='$Gpid';" SqlExec $Update Espionne $Update } } proc MiseAJourGPGOLD {} { CanalSqlGenoret # set LesK [split "gpid,name,description,accessnum,entrezid,rnaprobe,orientation,hybridtemp,wahstemp,stage,strain,sectionplane,resol,dissecdate,dissectime" ","] set LesK [split "gpid,name,description" ","] foreach K $LesK { } set Sql "select pk_gpaintgene,description from imanno.gpaintgene where description like 'ENEPAINT Set%';" set LesD [SqlExec $Sql "GetList"] foreach {pk D} $LesD { regsub -all {[\n\r]+} $D "\n" D regsub -all {[ \t]+} $D " " D regsub -all {Accession number:[ \n\r]+} $D "Accession number: " D regsub -all {Entrez Gene ID:[ \n\r]+} $D "Entrez Gene ID:" D if {0} { Espionne Espionne $pk Espionne "**********" Espionne $D Espionne "**********" } foreach K $LesK Ligne [split $D "\n"] { set V [StringApres ":" dans $Ligne] if {$K=="description"} { set V [StringSuivant ":" dans $Ligne] } set V [string trim $V " :;."] # Espionne "$K $V" set OldV [SqlExec "select $K from imanno.gpaintgene where pk_gpaintgene=$pk"] if {$K=="description"} { # Espionne "DDDDD" regsub -all "'" $V "''" V } else { # Espionne "OldV=$OldV=" } if {$K=="name" && $OldV!=$V && [OuiOuNon "$OldV!=$V Do I keep $OldV"] } { continue } set Update "update imanno.gpaintgene set $K='$V' where pk_gpaintgene=$pk;" Espionne $Update if {[OuiOuNonMemo "Do I execute all updates" 0]} { SqlExec $Update } } } } proc MiseAJourHsapiens {} { set RepHSapiens "/genome/H.sapiens" set RepDownload "/genome/H.sapiens/Localisation" set RepMonHuman "[HumanGenomeDir]" if {![file exists $RepMonHuman]} { FaireLire "$RepMonHuman does not exist. Please create it." exit } if {[glob -nocomplain "$RepMonHuman/*"] != {}} { if {![OuiOuNon "Some files exist in $RepMonHuman. Do I continue?" 0]} {exit} } set RepLocalisation "$RepMonHuman/Localisation" if {![file exists $RepLocalisation]} {File mkdir $RepLocalisation} set FichierSeqContig "$RepDownload/seq_contig.md" if {[OuiOuNon "Do I upgrade $FichierSeqContig?"]} { if {![file exists "$FichierSeqContig"]} { puts "$FichierSeqContig does not exist" return "" } set UpGradeSeqContig 1 } else { set UpGradeSeqContig 0 } set FichierChrGenesGZ "$RepDownload/chr_genes.gtf.gz" if {[OuiOuNon "Do I upgrade $FichierChrGenesGZ?"]} { set FichierChrGenes "$RepLocalisation/chr_genes.gtf" if {![file exists "$FichierChrGenesGZ"]} { puts "$FichierChrGenesGZ does not exist" return "" } set UpGradeChrGenesGZ 1 } else { set UpGradeChrGenesGZ 0 } set FichierContigGenesGZ "$RepDownload/ctg_genes.gtf.gz" if {[OuiOuNon "Do I upgrade $FichierContigGenesGZ?"]} { set FichierContigGenes "$RepLocalisation/ctg_genes.gtf" if {![file exists "$FichierContigGenesGZ"]} { puts "$FichierContigGenesGZ does not exist" return "" } set UpGradeContigGenesGZ 1 } else { set UpGradeContigGenesGZ 0 } MiseAJourCytologicMap QuelquesChiffresSurLesGenes Save 1 if {$UpGradeSeqContig} { file copy -force $FichierSeqContig "$RepLocalisation/seq_contig.md" } if {$UpGradeChrGenesGZ} { catch {exec gunzip -c $FichierChrGenesGZ > $FichierChrGenes} DiviseLeFichierDesGenes $FichierChrGenes } if {$UpGradeContigGenesGZ} { catch {exec gunzip -c $FichierContigGenesGZ > $FichierContigGenes} } return "" } proc MiseAJourMac {{args ""}} { global WOrdali Defauts LongueurTotale Toggle LTPCI set Reset 0 # remet alignement courant if {$args eq "reset"} { set Reset 1 VueEditee 0 set args "" } if {[VueEditee]} { set chx [tk_dialog .chx "Warning" "Warning !\nThis alignment has not been saved !" "" 0 "Overwrite it" "Create a new one" "Cancel"] if {$chx < 2} {SauveLeMac $chx} } if {$args ne ""} { set Mac [lindex $args 1] } else { set Mac [MacCourant name] } set iMac [IndexDeMac $Mac] $WOrdali(combomac) configure -values [LesMacs] LesDefauts NmMacCourant $Mac LesDefauts IxMacCourant $iMac set NoFeat 0 if {! $Toggle(Feature)} { set Toggle(Feature) 1 ToggleFeature set NoFeat 1 } CreeVue set LongueurTotale [LongueurMac] InitPosSeqGenGenSeq InfosDesPDB set LTPCI [CalculeLesPCIDuMac] if {$Defauts(FirstPass)} { LogSeqInfoGlobales LogLesCompositions LesDefauts FirstPass 0 LogPCI global } AuLog @begin blob AuLog @title Alignment : [MacCourant name] AuLog @end LogInfosClusters LogPCI InitWRegle AfficheRegle ChangeNomsAff AfficheNomsEtSeqs RepeintNomsEtSeqs set bt $WOrdali(BoutZones) if {[EtatBouton $bt]} { AfficheZonesClustering } ChangeMode if {$NoFeat} { set Toggle(Feature) 0 ToggleFeature } return } proc MiseAJourOligosExisting {} { foreach Fichier [glob "[RepertoireDuGenome]/atelier/*/*existing*.list"] { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s %s" ASA please use P lassign [DecomposeLaLigne $ASA] LesSujets set FicOli "[RepertoireDuGenome]/oligos/$P.tfa" if {[FileAbsent $FicOli]} { continue } set Tfa [ContenuDuFichier $FicOli] set Description [PremiereLigneDuFichier $FicOli] if {$Description==""} { continue } if {[regexp "oligoignore" $Description]} { continue } set NewTfa $Tfa set YaFull [regexp {seeFull (P[0-9]+)} $Description Match F] while {$YaFull} { set FicOliF "[RepertoireDuGenome]/oligos/$F.tfa" if {[FileAbsent $FicOliF]} { set YaFull 0 ; break } set TfaF [ContenuDuFichier $FicOliF] set DesF [PremiereLigneDuFichier $FicOli] if {[regexp "oligoignore" $DesF]} { set YaFull ; break } set NewTfaF $TfaF break } foreach Sujet $LesSujets { if {[string first " $Sujet " "$Description "]>0} { continue } Espionne Espionne $Ligne regsub "for " $NewTfa "for $Sujet " NewTfa Espionne "$Tfa\n$NewTfa" if {$YaFull && [string first " $Sujet " "$DesF "]<0} { regsub "for " $NewTfaF "for $Sujet " NewTfaF Espionne "$TfaF\n$NewTfaF" } } # if { $Tfa !=$NewTfa } {Sauve $NewTfa dans $FicOli} # if {$YaFull && $TfaF!=$NewTfaF} {Sauve $NewTfaF dans $FicOliF} } } } proc MiseAJourProbeset {{LesFichiers ""}} { #met a jour la table probeset avec une nouvelle version de fichier annotation de affymetrix #Avant tu dois creer #la nouvelle puce dans la table arraytype avec le pipework #le nouveau sourceprobeset avec la proc SourceProbesetInput #les entrees dans ln_arraytype_analysissoftware WithWebService "Gx" 0 if {$LesFichiers=="" } { set LesFichiers [LesAffyAnnot] } if {$LesFichiers=="DansLeBonOrdre"} { set LesFichiers [LesAffyAnnotDansLeBonOrdre] } foreach File $LesFichiers { Espionne "$File" set LesLignesDes {} set Entete [HeaderFileAffy $File] foreach E $Entete { regsub -all "#%" $E "" E if {[regexp "^chip_type=" $E]} { set Chip [StringApres "chip_type=" dans $E] } lappend LesLignesDes $E } set Des [join $LesLignesDes "\n"] regsub -all {'} $Des "''" Des set Sql "update sourceprobeset set filename = $File , information = $Des where arraytypename = $Chip" lappend LesSql $Sql GxDbSqlExec $Sql set LesTetesPs [GxAffyHeaders ListOf Gx] lappend LesTetesPs "speciessymbol" set LesLignes [TabulonsSansQuote $File "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { set LesValues {} set Elmt [split $Ligne ";"] set Ps [lindex $Elmt 0] if {[info exists Dejavu($Ps)]} {continue} set Dejavu($Ps) 1 set Sql "select pk_probeset from probeset where probeset_id = '$Ps';" set pkPs [GxDbSqlExec $Sql "GetFirstValue"] if {[regexp "AFFX" $Ps]} {continue} foreach TetePs $LesTetesPs { if {$TetePs=="probeset_id"} { continue } if {$TetePs=="speciessymbol"} { set ValueofCol [UcscAssemblyNameOf $Espece] lappend LesValues "$TetePs = '$ValueofCol'" continue } set Colonne [GxAffyHeaders $TetePs Col] set ValueofCol [lindex $Elmt $Colonne] if {$ValueofCol=="---"} { set ValueofCol "NULL" lappend LesValues "$TetePs = $ValueofCol" continue } if {$TetePs=="genename"} { set Gn $ValueofCol set GnMaj [string toupper $Gn] set ValueofCol $GnMaj } if {$TetePs=="species"} { set Espece $ValueofCol } set ValueofCol "$TetePs = '$ValueofCol'" if {$TetePs=="chromo_loc" || $TetePs=="cytoband"} { set LesLoc {}; set LesCyt {} regsub "$TetePs = " $ValueofCol "" ValueofCol regsub -all "'" $ValueofCol "" ValueofCol regsub -all "///" $ValueofCol "#" ValueofCol regsub -all "//" $ValueofCol "@" ValueofCol set LesLocCompletes [split $ValueofCol "#"] if {$TetePs=="chromo_loc"} { foreach LocComplete $LesLocCompletes { set LocComplete [string trim $LocComplete] set ElmtDeLoc [split $LocComplete "@"] set LaLoc [string trim [lindex $ElmtDeLoc 0]] regsub -all " " $LaLoc "" LaLoc lappend LesLoc $LaLoc } set LesLoc [ListeSansDoublon $LesLoc] if {$LesLoc == {} || ([llength $LesLoc] == 1 && [lindex $LesLoc 0] == "")} { set ValueofCol "$TetePs = NULL" } else { set ValueofCol "$TetePs = '[join $LesLoc ","]'" } } if {$TetePs=="cytoband"} { foreach LocComplete $LesLocCompletes { set LocComplete [string trim $LocComplete] set ElmtDeLoc [split $LocComplete "@"] set LaCyto [string trim [lindex $ElmtDeLoc 2]] regsub -all " " $LaCyto "" LaCyto if {$LaCyto==""} {set LaCyto ""} lappend LesCyt $LaCyto } set LesCyt [ListeSansDoublon $LesCyt] if {$LesCyt == {} || ([llength $LesCyt] == 1 && [lindex $LesCyt 0] == "")} { set ValueofCol "$TetePs = NULL" } else { set ValueofCol "$TetePs = '[join $LesCyt ","]'" } } } if {$TetePs=="mgi"} { regsub "$TetePs = " $ValueofCol "" ValueofCol regsub -all "'" $ValueofCol "" ValueofCol regsub -all { */// *} $ValueofCol "#" ValueofCol set LesMGI [split $ValueofCol "#"] set LesMGI [ListeSansDoublon $LesMGI] set MGI [join $LesMGI "///"] set ValueofCol "$TetePs = '$MGI'" } lappend LesValues $ValueofCol } set LigneValue [join $LesValues ", "] set Sql "update probeset set $LigneValue where probeset_id = '$Ps'" lappend LesSql $Sql GxDbSqlExec $Sql } } SauveLesLignes $LesSql dans "[GxData]/ToGx/MiseAJourProbeset" } proc MiseAJourSpineParVEDidier {} { set LesEtats [EtatsDesVE "LesEtats"] set LesEtatsUnis [EtatsDesVE "LesEtatsUnis"] set LesTasks [EtatsDesVE "LesTasks"] set LesReverseEtats [EtatsDesVE "LesReverseEtats"] set LesReverseEtatsUnis [EtatsDesVE "LesReverseEtatsUnis"] foreach Ligne [LesVEDidierCompatiblesGscope "GetList"] { set R1 "" scan $Ligne "%s %s %s %s" VE R1 pDEST PGS set R2 "${R1}_$pDEST" set R2 [Rec2 $R2 "R2"] set Alias [Alias $PGS] lappend LesPGS $PGS set TaskDidier "Sele" foreach Etat $LesReverseEtats { if {[VEDidier $VE $Etat]!=1} { continue } set TaskDidier [EtatsDesVE TaskDu $Etat] lappend LesMeilleursEtatsDesVEsDuPGS($PGS,$Etat) $VE break } # Espionne "$VE $PGS $Alias $TaskDidier" } set LesAnormaux {} set LesMeilleurs {} foreach PGS [lsort -unique $LesPGS] { foreach Etat $LesReverseEtatsUnis { if { ! [info exists LesMeilleursEtatsDesVEsDuPGS($PGS,$Etat)]} { continue } set Task [EtatsDesVE TaskDu $Etat] set SpineTask [SpineTask $PGS] set Best [EtatsDesVE MeilleurTask $SpineTask $Task] if {$Task != $Best} { lappend LesAnormaux "\n\n$PGS [Alias $PGS ]\n $LesMeilleursEtatsDesVEsDuPGS($PGS,$Etat)\n SpineTask $SpineTask est meilleur que EtatDidier $Task" } lappend LesMeilleurs "$PGS [format "%-10s" [Alias $PGS]] $SpineTask $Task $LesMeilleursEtatsDesVEsDuPGS($PGS,$Etat)" break } } AfficheListe $LesAnormaux "" LesAnormaux] return [AfficheListe $LesMeilleurs "" LesMeilleurs] exit } proc MiseALEchelle {la lb} { # On met lb a l'echelle de la if {[llength $la] != [llength $lb]} { puts "lists of different length !!" return -1 } set sxy 0. set sy2 0. foreach x1 $la x2 $lb { set sxy [expr {$sxy + $x1*$x2}] set sy2 [expr {$sy2 + $x2*$x2}] } set k [expr {$sxy/$sy2}] set nv {} foreach v $lb { lappend nv [expr {$v*$k}] } return $nv } proc MiseEnLigne {{H ""} {D ""} {T ""} {S ""} {I ""}} { if {"$D$T$S$I"==""} { return $H } if { ! [PourWscope]} { set S "" set I "" if {[regexp "$Ligne" } return $Ligne } proc MiseEnLigneTR {{H ""} {D ""} {T ""} {S ""} {I ""}} { #change L et C par rapport a l initial if {"$D$T$S$I"==""} { return $H } if { ! [PourWscope]} { set S "" set I "" if {[regexp "$Ligne" } return $Ligne } proc MiseEnPageDuDescriptif {Descriptif {LesClefs ""}} { set Texte $Descriptif set ID "" scan $Texte "%s" ID if {[regexp {^[^ ]+=} $Texte]} { set iEgal [string first "=" $Texte] set Texte [string range $Texte [incr iEgal] end] } set OX [ChampDuDescriptif $Descriptif OX] if {[regexp " " $OX]} { regsub {OS\:} $Texte "OS: $OX " Texte } set LesClefsDefaut { OS GN DE ID AC OC OX} set IncrementsDefaut {30 15 150 15 15 120 10} set NouvelleManiere 0 if {$LesClefs=={}} { set LesClefs $LesClefsDefaut set Increments $IncrementsDefaut } else { set NouvelleManiere 1 set Increments {} foreach C $LesClefs { set i [lsearch $LesClefsDefaut $C] lappend Increments [lindex $IncrementsDefaut $i] } } if {$NouvelleManiere} { set Texte [format "%-15s" $ID] foreach Clef $LesClefs Increment $Increments { set Valeur [ChampDuDescriptif $Descriptif $Clef] append Texte "\t$Clef:[format %-${Increment}s $Valeur]" } return $Texte } set BonnePosition 0 foreach Clef $LesClefs Increment $Increments { incr BonnePosition $Increment set Position [string first "$Clef\:" $Texte] if {$Position < 0} { return $Texte } if {$Position < $BonnePosition} { set Debut [string range $Texte 0 [expr $Position-1]] set Suite [string range $Texte [expr $Position] end] set Blanc [string repeat " " [expr $BonnePosition-$Position-1]] set Texte "$Debut$Blanc$Suite" } } return $Texte } proc MiseEnSequenceDeRetinoBase {} { FaireLire "attention ne pas reexecuter cette procedure"; exit CanalSqlRetinoBase set LesTables [list analysissoftware arraytype cluster experiment genotype individual organism ortholog probeset ratio rawdata realexp sample treatment treatmenttype] foreach Table $LesTables { set NomPk "pk_${Table}" if {$NomPk=="pk_analysissoftware"} { set NomPk "pk_software" } set Last [SqlExec "select $NomPk from retinobase3.${Table} order by $NomPk desc limit 1" "GetFirstValue"] if {$Last==""} { continue } Espionne "$Table $Last" set Sql "CREATE SEQUENCE retinobase3.${Table}_pk_${Table}_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START $Last CACHE 1; ALTER TABLE retinobase3.${Table}_pk_${Table}_seq OWNER TO berthomg; GRANT ALL ON TABLE retinobase3.${Table}_pk_${Table}_seq TO berthomg; GRANT SELECT, INSERT, REFERENCES ON TABLE retinobase3.${Table}_pk_${Table}_seq TO guest; GRANT SELECT ON TABLE retinobase3.${Table}_pk_${Table}_seq TO hoan" Espionne $Sql SqlExec $Sql } } proc MissBlast {{LesNomsVoulus ""} {GetWhat ""}} { #rR J'ai greffé l'extraction des Gz pour LesNomsVoulus si GetWhat = GetAllGz #rR On essaie de detecter les séquences trop petites pour se trouver elles-même if { ! [OnTraite OI]} { } set LesSize {} set LeRetour {} if {[regexp "\," $LesNomsVoulus]} { set LesNomsVoulus [split $LesNomsVoulus ","] } if {$LesNomsVoulus==""} { set LesNomsVoulus [ListeDesPABs] } NousAllonsAuBoulot "/tempor/grid/congelo" set LesGz {} foreach Nom $LesNomsVoulus { if {$GetWhat=="" && [PasTouche "MissBlast_$Nom"]} { continue } set Congelo [DernierCongelo $Nom] set Assiette "$Congelo/assiette" if {[FileAbsent $Assiette]} { set Message "No assiette $Assiette" Espionne $Message lappend LesManquants $Message continue } set Gz "$Assiette/output_formated.gz" if {[FileAbsent $Gz]} { set Gz "$Assiette/output.gz" } if {[FileAbsent $Gz]} { set Message "I didn't find $Gz" Espionne $Message lappend LesManquants $Message FinPasTouche "MissBlast_$Nom" continue } if {$GetWhat=="GetAllGz"} { lappend LesGz $Gz ; continue } set FichierMissBlast "[RepertoireDuGenome]/missblast/$Nom" if {[file exists $FichierMissBlast] && [file mtime $Gz]<[file mtime $FichierMissBlast]} { Espionne "$FichierMissBlast existe deja et est plus récent que le Gz" FinPasTouche "MissBlast_$Nom" continue } set N [file size $Gz] lappend LesSize "$N $Nom" set Queries [split [exec zcat $Gz | cut -f 1 | grep -v "#" | sort -u] "\n"] Espionne "[llength $Queries] Queries lues dans $Gz" set LesIdDuBlast {} foreach Q $Queries { set Id [lindex [split $Q "|"] end] lappend LesIdDuBlast $Id } set LesIdDuBlast [lsort $LesIdDuBlast] set NbIdDuBlast [llength $LesIdDuBlast] set NbQueries $NbIdDuBlast set FichierOi "[RepertoireDuGenome]/oip/$Nom" set F [open $FichierOi "r"] set LesIdDuOi {} unset -nocomplain SeqDe set I 0 set K 0 while {[gets $F Ligne]>=0} { if {[regexp "^>" $Ligne]} { scan [string range $Ligne 1 end] "%s" BAI set IdDuOi [lindex [split $BAI "|"] end] lappend LesIdDuOi $IdDuOi set SeqDe($IdDuOi) "" if {$I%1000==0} { Espionne "$I $Ligne" } incr I continue } if {$IdDuOi=="GBI00002920_3311"} { Espionne $Ligne } append SeqDe($IdDuOi) $Ligne } close $F Espionne [llength $LesIdDuOi] set LesIdDuOi [lsort -unique $LesIdDuOi] set NbIdDuOi [llength $LesIdDuOi] Espionne "$Nom $NbIdDuBlast $NbIdDuOi" Espionne [lrange $LesIdDuBlast 0 10] Espionne [lrange $LesIdDuOi 0 10] set LesPerdus [ListsComplement $LesIdDuOi $LesIdDuBlast] Espionne $LesPerdus set LesAccessSeq {} foreach Perdu $LesPerdus { lappend LesAccessSeq "$Perdu $SeqDe($Perdu)" } SauveLesLignes $LesAccessSeq dans "[RepertoireDuGenome]/missblast/$Nom" AppendAuFichier "[RepertoireDuGenome]/fiches/NbQueriesDansOiEtBlast.txt" "$Nom $NbIdDuOi $NbQueries" lappend LesNbQueries "$NbQueries $Nom" if {$N<100} { set Message "$Nom n'a que $N octets" Espionne $Message lappend LesManquants $Message } else { Espionne "$Nom $Gz $N" } FinPasTouche "MissBlast_$Nom" } if {$GetWhat=="GetAllGz"} { return $LesGz } return $LeRetour } proc MissBlastP {} { #rR A ne pas confondre avec MissBlast ouon fouille dans les resultats des blast de OI2017 #rR Ici on vetu simplemetn savoir pourquoi certaisn blast n'ont pas été créés. set LesNomsSeq {} foreach Nom [ListeDesPABs] { set FichierBlast [GscopeFile $Nom "blastp"] if {[FileExists $FichierBlast]} { continue } set FichierTfa [GscopeFile $Nom "prottfa"] set Seq [QueLaSequenceDuFichierTFA $FichierTfa] Espionne "$Nom $Seq" lappend LesNomSeq "$Nom $Seq" } return $LesNomSeq } proc MitoHs {Qui} { #rR Rend le Amito_Homo.sapi en fonction de toute info qui y fait référence : A Ala MSP01 ... global MitoHs set A [NomDeMSP $Qui A] if {[regexp {^[A-Z]$} $A]} { return "${A}mito_Homo.sapi" } return "" } proc MitoM {} { global OrdaliDir global VariablesAuDepart LesDefauts LesDefauts Mode batch package require XOTcl namespace import -force ::xotcl::* Class Structure -parameter {NomAtm NomRes NmrRes ChnIdn AtmXYZ AtmBQ Size} source [file join $OrdaliDir src ordali_StrucObj.tcl] package require sqlite3 package require http InitialiseCouleurs DefinitionPreferences set VariablesAuDepart [info globals] foreach e [ListeDesPABs] { puts "Traite $e" set f [file join [RepertoireDuGenome] XmlFinaux "$e.xml"] PourMarieAOD $e $f FermeFichier } exit } proc MixStaf {Path iterations} { # Permutation des positions de la séquence de SBS set FichierEntree [open "$Path/XP.seq" "r"] set FichierRemix [open "$Path/XPremixed.tfa" "w"] set FichierRemixSeq [open "$Path/XPremixed.seq" "w"] set FichierRemixFixe [open "$Path/XPremixed.fixe.tfa" "w"] set FichierRemixFixeSeq [open "$Path/XPremixed.fixe.seq" "w"] set I 0 while { [gets $FichierEntree Ligne] >=0 } { incr J ScanLaListe $Ligne Sequence Espionne $Sequence set SequenceExplosee [split $Sequence ""] for {set I 0} {$I<= $iterations} {incr I} { #Espionne $SequenceExplosee set positionDepart [expr round(rand()*17)] set positionFin [expr round(rand()*17)] if {$J == 1} { set TableauPermutation($I,start) $positionDepart set TableauPermutation($I,end) $positionFin } set valeurDepart [lindex $SequenceExplosee $positionDepart] set valeurFin [lindex $SequenceExplosee $positionFin] set SequenceExplosee [lreplace $SequenceExplosee $positionDepart $positionDepart $valeurFin] set SequenceExplosee [lreplace $SequenceExplosee $positionFin $positionFin $valeurDepart] } set SequenceMixed "" foreach Base $SequenceExplosee { set SequenceMixed "$SequenceMixed$Base" } #Espionne "$Sequence est devenue $SequenceMixed" puts $FichierRemix ">Sequence$J" puts $FichierRemix "$SequenceMixed" puts $FichierRemixSeq "$SequenceMixed" } close $FichierEntree close $FichierRemix close $FichierRemixSeq set FichierEntree [open "$Path/XP.seq" "r"] set L 0 while { [gets $FichierEntree Ligne] >=0 } { set SequenceExplosee {} incr L ScanLaListe $Ligne Sequence Espionne $Sequence set SequenceExplosee [split $Sequence ""] for { set K 0 } { $K < $I} { incr K} { set positionDepart $TableauPermutation($K,start) set positionFin $TableauPermutation($K,end) set valeurDepart [lindex $SequenceExplosee $positionDepart] set valeurFin [lindex $SequenceExplosee $positionFin] set SequenceExplosee [lreplace $SequenceExplosee $positionDepart $positionDepart $valeurFin] set SequenceExplosee [lreplace $SequenceExplosee $positionFin $positionFin $valeurDepart] } set SequenceMixed "" foreach Base $SequenceExplosee { set SequenceMixed "$SequenceMixed$Base" } Espionne "$Sequence est devenue $SequenceMixed" puts $FichierRemixFixe ">Sequence$L" puts $FichierRemixFixe "$SequenceMixed" puts $FichierRemixFixeSeq "$SequenceMixed" } close $FichierEntree close $FichierRemixFixe close $FichierRemixFixeSeq } proc MnemonicUniprot {Lid} { # %3A <-> : # set url "http://www.uniprot.org/uniprot/?query=%28mnemonic%3ASYFB_SILPO+or+mnemonic%3AEFTU_ECOLI+or+mnemonic%3ATKNB_HUMAN+or+mnemonic%3ASYDC_HUMAN%29+and+%0D%0Aactive%3Ayes&sort=score&format=list" set url "http://www.uniprot.org/uniprot/?query=%28mnemonic%3ASYFB_SILPO+or+mnemonic%3AEFTU_ECOLI+or+mnemonic%3ATKNB_HUMAN+or+mnemonic%3ASYDC_HUMAN%29+and+%0D%0Aactive%3Ayes&format=list" set url "http://www.uniprot.org/uniprot/?query=mnemonic%3ASYFB_SILPO+or+mnemonic%3AEFTU_ECOLI+or+mnemonic%3ATKNB_HUMAN+or+mnemonic%3ASYDC_HUMAN&format=tab" set Lid [list SYD_ECOLI SYFB_SILPO EFTU_ECOLI TKNB_HUMAN SYDC_HUMAN] set Lma [IDMapping "ACC+ID" ACC $Lid] set Lmi [IDMapping "ACC+ID" ID $Lid] puts "orig $Lid" puts "macc $Lma" puts "mid $Lmi" puts "" set Lor [lsort $Lid] set Lor $Lid set Lq [list] foreach e $Lor { lappend Lq "mnemonic%3A$e" } set q [join $Lq "+or+"] set url "http://www.uniprot.org/uniprot/?query=${q}&format=tab&columns=id,entry%20name" set Lres [split [HttpCopy $url] \n] foreach r [lrange $Lres 1 end] e $Lor { lassign [split $r \t] ac id tmp puts "$e | $ac $id" } exit return } proc MobBinaryPath {} { set FichierConfig "[MobDir]/core/Local/Config/Config.py" set Path [StringSuivant "\nBINARY_PATH =" dans [ContenuDuFichier $FichierConfig]] regsub {\].*} $Path "" Path regsub -all {[ '\[]} $Path "" Path set LePath [split $Path ","] return $LePath } proc MobCheckPrograms {{GetWhat ""}} { set LeBinaryPath [MobBinaryPath] foreach P $LeBinaryPath { foreach FE [glob -nocomplain "$P/*"] { if { ! [file executable $FE]} { continue } set E [file tail $FE] lappend FileOf($E) $FE } } foreach FicXml [MobListOfFichierXml] { set Program [file tail $FicXml] regsub ".xml$" $Program "" Program set C [MobListOfCommand $FicXml Command] if {[info exists FileOf($C)]} { if {[llength $FileOf($C)]>1} { lappend LesDoublons "$C $FileOf($C)" } set Premier [lindex $FileOf($C) 0] set LesEnv [MobListOfEnv $FicXml Env] if {$LesEnv==""} { lappend LePath [file dirname $Premier] lappend LesBons $Program } if {$LesEnv!=""} { set EnvManquant 0 foreach Env $LesEnv { if {![file exists $Env]} {set EnvManquant 1} } if {!$EnvManquant} { lappend LePath [file dirname $Premier] lappend LesBons $Program } else { lappend LesManquants $Program } } } else { lappend LesManquants $Program } } set LePath [lsort -unique $LePath] set LesManquants [lsort -unique $LesManquants] set LesBons [lsort -unique $LesBons] set LesDoublons [lsort -unique $LesDoublons] if {$GetWhat=="GetPath"} { return $LePath } if {$GetWhat=="GetManquants"} { return $LesManquants } if {$GetWhat=="GetBons"} { return $LesBons } if {$GetWhat=="GetDoublons"} { return $LesDoublons } if {$GetWhat=="GetAlltogether"} { set Alltogether [list] set BB ""; set BS "" if {[PourWscope]} { set BB ""; set BS "" lappend Alltogether "
    "
    	}
    	lappend Alltogether "\n $BB Pathes $BS\n"
    	LConcat Alltogether $LePath 
    	lappend Alltogether "\n $BB Binaries $BS\n"
    	LConcat Alltogether $LesBons
    	lappend Alltogether "\n $BB Missing Binaries $BS\n"
    	LConcat Alltogether $LesManquants
    	lappend Alltogether "\n $BB Ambigious Binaries $BS\n"
    	LConcat Alltogether $LesDoublons
    	if {[PourWscope]} {
    	    lappend Alltogether "
    " } return [join $Alltogether "\n"] } AfficheListe $LePath "" "LePath" AfficheListe $LesManquants "" "LesManquants" AfficheListe $LesBons "" "LesBons" AfficheListe $LesDoublons "" "LesDoublons" Affiche "'[join $LePath {', '}]'" "" "Pathes" Affiche "'[join $LesManquants {', '}]'" "" "Excludes" return $LePath } proc MobDir {} { return "[HomeRipp]/Mob" } proc MobListOfCommand {{Qui ""} {Quoi ""}} { global MobListOfCommand if {[info exists MobListOfCommand($Qui,$Quoi)]} { return $MobListOfCommand($Qui,$Quoi) } if {[info exists MobListOfCommand("EstCharge")]} { return "" } set MobListOfCommand("EstCharge") 1 set LesCommand {} foreach FicXml [MobListOfFichierXml] { set CommandFromFic [file tail $FicXml] regsub ".xml$" $CommandFromFic "" CommandFromFic set Texte [ContenuDuFichier $FicXml] set Command [ValeurDeLaBalise "command" Texte "NePasRogner"] if {$Command == ""} { set Attribut [AttributsDeLaBalise "parameter" Texte "NePasRogner"] if {[regexp "iscommand" $Attribut]} { set ParamCommand [ValeurDeLaBalise "parameter" Texte "NePasRogner"] set Command [ValeurDeLaBalise "format" ParamCommand "NePasRogner"] set Command [ValeurDeLaBalise "code" Command "NePasRogner"] regsub -all "\"" $Command "" Command set Command [string trim $Command] set Command [lindex [split $Command " "] 0] if {[regexp "\\$" $Command] || $Command =="cat" || $Command =="&&"} { set Command $CommandFromFic } } else { set Command $CommandFromFic } } scan $Command "%s" Command if {$Command==""} { continue } lappend MobListOfCommand(ListOf,Command) $Command set MobListOfCommand($FicXml,Command) $Command lappend MobListOfCommand($Command,FicXml) $FicXml } set MobListOfCommand(ListOf,Command) [lsort -unique [MobListOfCommand ListOf Command]] return [MobListOfCommand $Qui $Quoi] } proc MobListOfEnv {{Qui ""} {Quoi ""}} { global MobListOfEnv if {[info exists MobListOfEnv($Qui,$Quoi)]} { return $MobListOfEnv($Qui,$Quoi) } if {[info exists MobListOfEnv("EstCharge")]} { return "" } set MobListOfEnv("EstCharge") 1 set LesEnv {} foreach FicXml [MobListOfFichierXml] { foreach Ligne [LesLignesDuFichier $FicXml] { if {![regexp {\" lappend LeXml " " lappend LeXml " null" lappend LeXml " " lappend LeXml " " set Dir [BlastDatabaseInventory "Dir"] foreach BT [split [BlastDatabaseInventory "ListOf" "${X}BestFirstWithTitle"] "\n"] { scan $BT "%s" B lappend LaListe $B set T [StringSuivant ":" dans $BT] lappend LeXml " " lappend LeXml " $Dir/$B" lappend LeXml " " lappend LeXml " " } lappend LeXml "" set Xml [join $LeXml "\n"] if {[regexp -nocase "List" $Action]} { return [join $LaListe "\n"] } if {[regexp -nocase "Create" $Action]} { Garde $FichierXml set FX [Sauve $Xml dans $FichierXml] if {[regexp -nocase "Deploy" $Action]} { set LesToDeploy [glob -nocomplain "[MobDir]/core/Services/Programs/*.xml"] foreach F $LesToDeploy { set C [ContenuDuFichier $F] if { ! [regexp $Motif $C]} { continue } set Q [file tail $F] regsub ".xml$" $Q "" P lappend LesP $P } set ProgsToDeploy [join $LesP ","] Espionne $ProgsToDeploy ; exit exec [HomeRipp]/Mob/core/Tools/mobdeploy -s local -p $ProgsToDeploy deploy return "$ProgsToDeploy \n were deployed with\n$FX" } return $FX } #rR arrive ici on doit avoir Get" return $Xml } proc MobyleConfig {{Qui ""} {Quoi ""}} { global MobyleConfig if {[regexp -nocase "ResetAll" $Qui]} { if {[info exists MobyleConfig]} { unset MobyleConfig } return } if {[info exists MobyleConfig($Qui,$Quoi)]} { return $MobyleConfig($Qui,$Quoi) } if {[info exists MobyleConfig("EstCharge")]} { return "" } set MobyleConfig("EstCharge") 1 set FichierConfig "[MobDir]/core/Local/Config/Config.py" set MobyleConfig(FileName,) $FichierConfig set Content [ContenuDuFichier $FichierConfig] set MobyleConfig(Content,) $Content regsub -all {\#[^\n]+\n} $Content "\n" Content set P1 ""; set P2 ""; set P3 ""; set V1 ""; set V2 ""; set V3 ""; set R [regexp -all -inline -nocase {\nLOCAL_DEPLOY_(INCLUDE|EXCLUDE)[\s\n]*=[\s\n]*\{([^\}]+)\}} $Content] foreach {Match IE A} $R { regsub -all {[\'\s\n]+} $A " " A set A [string trim $A] set PVs [regexp -all -inline -nocase {([a-z]+) \: \[([^\]]+)\] ,} $A] foreach {Match P V} $PVs { regsub -all {[ \,\'\n]+} $V " " V ; set LesV [split [string trim $V] " "] lappend MobyleConfig($IE,ListOf) $P set MobyleConfig($IE,$P) $LesV foreach V $LesV { set MobyleConfig($V,) $IE } } } return [MobyleConfig $Qui $Quoi] } proc MobyleDeploy {} { set LesToDeployP [glob -nocomplain "[MobDir]/core/Services/Programs/*.xml"] LConcat LesToDeployP [glob -nocomplain "[MobDir]/core/Local/Services/Programs/*.xml"] set LesToDeployV [glob -nocomplain "[MobDir]/core/Services/Viewers/*.xml"] LConcat LesToDeployV [glob -nocomplain "[MobDir]/core/Local/Services/Viewers/*.xml"] set LesToDeployW [glob -nocomplain "[MobDir]/core/Services/Workflows/*.xml"] LConcat LesToDeployW [glob -nocomplain "[MobDir]/core/Local/Services/Workflows/*.xml"] foreach Manquant [MobCheckPrograms GetManquants] { set VerifManquant($Manquant) 1 } foreach ToDeployP $LesToDeployP { set P [file tail $ToDeployP] regsub ".xml$" $P "" P if {[info exists VerifManquant($P)] && $VerifManquant($P)} { continue } lappend LesP $P } Espionne "[HomeRipp]/Mob/core/Tools/mobdeploy -s local -p [join $LesP ","] deploy" foreach ToDeployV $LesToDeployV { set V [file tail $ToDeployV] regsub ".xml$" $V "" V lappend LesV $V } Espionne "[HomeRipp]/Mob/core/Tools/mobdeploy -s local -v [join $LesV ","] deploy" foreach ToDeployW $LesToDeployW { set W [file tail $ToDeployW] regsub ".xml$" $W "" W lappend LesW $W } Espionne "[HomeRipp]/Mob/core/Tools/mobdeploy -s local -w [join $LesW ","] deploy" } proc ModeI {} { global FaireLireNon Defauts if {[info exists Defauts(Mode)] && [set Defauts(Mode)] eq "Interactive"} { set FaireLireNon 0 return 1 } else { set FaireLireNon 1 return 0 } } proc ModeInteractif {} { global RepertoireDuGenome global GscopeDir set Fin 0 while {!$Fin} { if {[gets stdin Ligne]==-1} { set Fin 1 } else { if {[catch {puts [eval $Ligne]} Message]} { puts stderr $Message } } } } proc ModeReroot {AId} { global Abr if {[set Abr($AId,TypeTree)] ne "dendrogram"} { set Abr($AId,Reroot) 0 return } set PAD [set Abr($AId,PAD)] set Li [$PAD find withtag reroot] if {[set Abr($AId,Reroot)]} { if {[set Abr($AId,BootShow)]} { set Abr($AId,BootShow) 0 MontreBootstrap $AId } if {[set Abr($AId,Swap)]} { set Abr($AId,Swap) 0 ModeSwap $AId } foreach i $Li { $PAD itemconfig $i -fill green1 -outline black } $PAD raise reroot $PAD bind reroot [list RerootNode $AId] ChangeCurseur $AId fleche } else { foreach i $Li { $PAD itemconfig $i -fill white -outline white } $PAD lower reroot $PAD bind reroot "" ChangeCurseur $AId normal } return } proc ModeSwap {AId} { global Abr set PAD [set Abr($AId,PAD)] set Li [$PAD find withtag rotation] puts "swap [set Abr($AId,Swap)]" if {[set Abr($AId,Swap)]} { if {[set Abr($AId,BootShow)]} { set Abr($AId,BootShow) 0 MontreBootstrap $AId } if {[set Abr($AId,Reroot)]} { set Abr($AId,Reroot) 0 ModeReroot $AId } foreach i $Li { $PAD itemconfig $i -fill red -outline black } $PAD raise rotation $PAD bind rotation [list SwapNode $AId] ChangeCurseur $AId fleche } else { foreach i $Li { $PAD itemconfig $i -fill white -outline white } $PAD lower rotation $PAD bind rotation "" if {[set Abr($AId,Mode)] eq "normal"} { ChangeCurseur $AId normal } } return } proc ModeTag {AId} { ModeTagNode $AId ModeTagLeaf $AId return } proc ModeTagLeaf {{n1 ""} {n2 ""} {op ""}} { global Abr if {$n1 ne "" && $n2 eq ""} { set AId $n1 } else { lassign [split $n2 ,] AId TT } if {[set Abr($AId,DoTagNode)]} { set Abr($AId,DoTagNode) 0 ModeTagNode $AId } set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] if {[set Abr($AId,DoTagLeaf)]} { if {[set Abr($AId,LeafSel)] eq [set Abr($AId,LeafSelOld)]} {return} set n [set Abr($AId,LeafSel)] set Abr(LeafSelOld) $n switch -nocase -regexp -- [set Abr($AId,TAff)] { {seq name} { RetourneTableau ::TDesSeqnames Tb set n [set Tb($n)] } {bank id} { RetourneTableau ::TDesBId Tb set n [set Tb($n)] } {Accession} { RetourneTableau ::TDesAccess Tb set n [set Tb($n)] } } set Id [$PAD find withtag "Rfeuille-$n"] set If [$PAD find withtag "feuille-$n"] $PAD itemconfig $Id -outline black -width 3 $PAD addtag Rtagged withtag $Id } else { set LIt [$PAD find withtag Rtagged] foreach i $LIt { set b [$PAD itemcget $i -fill] $PAD itemconfig $i -width 0 -outline $b } } return } proc ModeTagNode {{n1 ""} {n2 ""} {op ""}} { global Abr if {$n1 ne "" && $n2 eq ""} { set AId $n1 } else { lassign [split $n2 ,] AId TT if {[set Abr($AId,DoTagLeaf)]} { set Abr($AId,DoTagLeaf) 0 } } if {[set Abr($AId,Swap)]} { set Abr($AId,Swap) 0 ModeSwap $AId } if {[set Abr($AId,BootShow)]} { set Abr($AId,BootShow) 0 MontreBootstrap $AId } set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] if {[set Abr($AId,DoTagNode)]} { set Li [$PAD find withtag rotation] foreach i $Li { $PAD itemconfig $i -fill blue -outline black } $PAD raise rotation $PAD bind rotation [list TagNode $AId] } else { set i [$PAD find withtag IdNodeSel] $PAD delete $i } return } proc ModelOrgaGeneId {{Mod ""} {Qui ""} {Quoi ""}} { global MOGI set BackgroundDir "[BlomeDir]/data/GO/background" if {$Mod=="GetListOfModelTaxId"} { set LesTaxId {} foreach File [glob -nocomplain "$BackgroundDir/*"] { set TaxId [file tail $File] if {[regexp {[^0-9]} $TaxId]} { continue } lappend LesTaxId $TaxId } return $LesTaxId } if { [regexp {[^0-9]} $Mod]} { set Mod [Tax $Mod TaxId] } if {[info exists MOGI($Mod,$Qui,$Quoi)]} { return $MOGI($Mod,$Qui,$Quoi) } if {[info exists MOGI($Mod,EstCharge)]} { return "" } set MOGI($Mod,EstCharge) 1 set BackgroundFile "$BackgroundDir/$Mod" if {[FileAbsent $BackgroundFile]} { return "" } set MOGI($Mod,BackgroundFile,) $BackgroundFile foreach Ligne [LesLignesDuFichier $BackgroundFile] { scan $Ligne "%s %s" A G if { ! [regexp {^[0-9]+$} $G]} { continue } set MOGI($Mod,$A,) $G set MOGI($Mod,$A,A) $A set MOGI($Mod,$A,G) $G set MOGI($Mod,$G) $A set MOGI($Mod,$G,A) $A set MOGI($Mod,$G,G) $G lappend MOGI($Mod,ListOf,A) $A lappend MOGI($Mod,ListOf,G) $G lappend MOGI($Mod,ListOf,AG) "$A $G" } return [ModelOrgaGeneId $Mod $Qui $Quoi] } proc ModelOrgaProject {{Qui ""} {Quoi ""}} { global MOP if {[regexp -nocase "Help" $Qui]} { lappend LeHelp "ModelOrgaProject ListOf O" lappend LeHelp "ModelOrgaProject ListOf P" lappend LeHelp "ModelOrgaProject ListOf OP" lappend LeHelp "ModelOrgaProject 9606 P" lappend LeHelp "ModelOrgaProject CilioCarta O" return [join $LeHelp "\n"] } if {[info exists MOP($Qui,$Quoi)]} { return $MOP($Qui,$Quoi) } if {[info exists MOP("EstCharge")]} { return "" } set MOP("EstCharge") 1 set LaListe {} set LesFichierGoNoms [glob -nocomplain "/genomics/link/*/fiches/GoNoms.txt"] foreach Fichier $LesFichierGoNoms { set RepG [file dirname [file dirname $Fichier]] set O [IntegerApres "NotreOX" dans [ContenuDuFichier "$RepG/beton/miniconfig"]] if {$O==""} { continue } set L [llength [LesLignesDuFichier $Fichier]] Espionne "$L $O" if {$L<987} { continue } set P [file tail [file dirname [file dirname $Fichier]]] lappend MOP(ListOf,OP) "$O $P" lappend MOP(ListOf,O) $O lappend MOP(ListOf,P) $P lappend MOP($O,O) $O lappend MOP($O,P) $P set MOP($P,O) $O set MOP($P,P) $P } set MOP(ListOf,O) [lsort -unique $MOP(ListOf,O)] return [ModelOrgaProject $Qui $Quoi] } proc ModelisationGrid {pab} { global DefautsPipe global PipeCollection if {$PipeCollection} { set repEmpreinte "[RepertoireDuGenome]/empreinte/" } else { set repEmpreinte "" } set pab [file rootname $pab] puts $pab foreach ficEmp [glob -nocomplain "${repEmpreinte}${pab}*.empreinte"] { creeModeleSelonEmpreinte $ficEmp } return 1 } proc ModellerExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./mod9v5" } if {[set tcl_platform(platform)] != "windows"} { return "mod9v5" } else { set lexe [file join $OrdBinDir "mod9v5.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc ModifieFichierOverlaps {FichierDDTARScores FichierOverlaps FichierBest} { #genere le fichier best #Attention a la ligne du regsub... #FichierOverlaps = /OVERLAP/les293overlaps (du type "DD1427 AffyTarget:TAR01627 ...") #aussi ok pour refseq (FichierOverlaps=/OverlapNuctfaRefSeq/lesoverlaps0.95...) #(FichierBest=/OverlapNuctfaRefSeq/bestoverlaps) foreach Ligne [LesLignesDuFichier $FichierOverlaps] { if {$Ligne==""} {continue} set LesChamps [split $Ligne " "] set DD [lindex $LesChamps 0] set LesAffy [lreplace $LesChamps 0 0] #regsub -all "AffyTarget:" $LesAffy "" LesAffy regsub -nocase -all {[a-z]+\:} $LesAffy "" LesAffy #FaireLire $LesAffy set LesTAR [split $LesAffy " "] if {[llength $LesTAR]==1} { #FaireLire $LesTAR; FaireLire [join $LesTAR ""] AppendAuFichier $FichierBest "$DD\t$LesTAR" } else { set IdGlobMax 0 set CoverSMax 0 set CoverQMax 0 set n 0 foreach TAR $LesTAR { #FaireLire $TAR incr n set IdGlobal [InterrogeFichierDDTARScores $FichierDDTARScores $DD $TAR IdGlob] set CoverS [InterrogeFichierDDTARScores $FichierDDTARScores $DD $TAR CoverS] set CoverQ [InterrogeFichierDDTARScores $FichierDDTARScores $DD $TAR CoverQ] if {$IdGlobal>$IdGlobMax} { set IdGlobMax $IdGlobal set BestTAR $TAR set BestCoverS $CoverS set BestCoverQ $CoverQ } if {$IdGlobal==$IdGlobMax && $n>1} { if {$n==[llength $LesTAR]} {AppendAuFichier $FichierBest "$DD\t$BestTAR"; break} if {$CoverQ>$BestCoverQ} {AppendAuFichier $FichierBest "$DD\t$TAR"; break} if {$CoverQ<$BestCoverQ} {AppendAuFichier $FichierBest "$DD\t$BestTAR"; break} if {$CoverQ==$BestCoverQ} { if {$CoverS>$BestCoverS} {AppendAuFichier $FichierBest "$DD\t$TAR"; break} if {$CoverS<$BestCoverS} {AppendAuFichier $FichierBest "$DD\t$BestTAR"; break} if {$CoverS==$BestCoverS} {AppendAuFichier $FichierBest "$DD\t$TAR"; break} } } if {$IdGlobal<$IdGlobMax && $n==[llength $LesTAR]} { AppendAuFichier $FichierBest "$DD\t$BestTAR"; break } } } } } proc ModifieLeGalFileLEBE {{Fichier ""} {NewFile ""}} { Wup "Permet de questionner les infos des puces EST Ontario" Wup "Base sur le fichier .gal qui contient la position sur la plaque des sondes" ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set PremierBlock 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #Block Row Column Name ID #1 2 9 R25519:Hs.272891:HPCAL4:1:1p34.2:3:36819 35267 #Name: #AccessionID:UGCluster:Symbol:Chromosome:Cytoband:Blast_flag:Original_Image_ID #R25519 :Hs.272891:HPCAL4: 1: 1p34.2: 3: 36819 if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLeHeader !="1" && [regexp -nocase "^ATF" $Ligne]} { set SurLeHeader 1 AppendAuFichier $NewFile $Ligne Espionne "$Ligne" set NDeLigne 0 continue } if {$SurLeHeader=="1" && $NDeLigne=="0"} { AppendAuFichier $NewFile $Ligne Espionne "$Ligne" set LigneSplitee [split $Ligne "\t"] set InfoGalFile(NMaxOptionalHeader) [lindex $LigneSplitee 0] set NDeLigne 1 continue } if {$SurLeHeader=="1" && [expr $NDeLigne <= [set InfoGalFile(NMaxOptionalHeader)]]} { AppendAuFichier $NewFile $Ligne Espionne "$Ligne" incr NDeLigne continue } else {set SurLeHeader 0} if {$SurLeHeader=="0" && [regexp -nocase "^Block\t" $Ligne]} { AppendAuFichier $NewFile $Ligne Espionne "$Ligne" set SurLesDonnees 1 continue } set LigneSplitee [split $Ligne "\t"] set block [lindex $LigneSplitee 0] set row [lindex $LigneSplitee 1] set col [lindex $LigneSplitee 2] set id [lindex $LigneSplitee 3] set name [lindex $LigneSplitee 4] if {! [info exists TabGAL($id,name)]} { set TabGAL($id,name) $name } if {! [info exists TabGAL($id)]} { set TabGAL($id) 1 } else { #On a deja vu l access on va voir combien sont un faux name if {[info exists TabGAL($id,name)]} { if {$name!= [set TabGAL($id,name)]} { Espionne "$id -- $name vs [set TabGAL($id,name)]" set name [set TabGAL($id,name)] } } } set LigneL [list $block $row $col $id $name] AppendAuFichier $NewFile "[join $LigneL "\t"]" continue } close $F return "" } proc ModifyGlobalArray {Tab} { global $Tab set Elem [ChoixParmi [array names $Tab]] if {$Elem==""} { return "" } while {1} { set NouvelleValeur [Entre [set [set Tab]($Elem)]] if {$NouvelleValeur!="" || [OuiOuNon "Do you want to set it to empty value ?"]} { break } } set [set Tab]($Elem) $NouvelleValeur return $Elem } proc ModifyGlobalVariables {{Var ""}} { if {$Var==""} { set LesGlobales [lsort [info globals]] set Var [ChoixParmi $LesGlobales] } if {$Var==""} { return "" } global $Var if {[array exists $Var]} { return [ModifyGlobalArray $Var] } while {1} { set NouvelleValeur [Entre [set $Var]] if {$NouvelleValeur!="" || [OuiOuNon "Do you want to set it to empty value ?"]} { break } } set $Var $NouvelleValeur return $Var } proc MoleculeDuPDB {aPDB} { set Chaine "" set AttendreLaBonneChaine [regexp -nocase {_([A-Z]+)} $aPDB Bidon Chaine] set TextePDB [TextePDB $aPDB "COMPND" "\n"] if {$TextePDB==""} { return "" } set Molecule "" foreach Ligne [split $TextePDB "\n"] { if {[regexp -nocase "MOLECULE:" $Ligne]} { set Molecule [StringSuivant "MOLECULE: " dans $Ligne] regsub {;} $Molecule "" Molecule if {$AttendreLaBonneChaine} { continue } return $Molecule } if {[regexp -nocase "CHAIN:" $Ligne]} { set Chaines [StringSuivant "CHAIN: " dans $Ligne] if {[regexp $Chaine $Chaines]} { return $Molecule } set Molecule "" } } return "" } proc MomentUnique {{Type ""}} { global DataSetElemIncr if { ! [info exists DataSetElemIncr]} { set DataSetElemIncr 100 } set DataSetElemIncr [expr [incr DataSetElemIncr]%1000] set NewElem "[clock clicks -milliseconds]$DataSetElemIncr" return "$Type$NewElem" } proc MonCopain {Quoi Moi} { global MonCopain if {[info exists MonCopain($Quoi,$Moi)]} {return $MonCopain($Quoi,$Moi)} if {[info exists MonCopain("EstCharge")]} {return ""} set MonCopain("EstCharge") 1 set LesAnciensHeader [RetChip2 ListOf Header] set LesAnciensIndex [RetChip2 ListOf Index] set LesNouveauxIndex [RetChip3 ListOf Index] set LongA [llength $LesAnciensIndex] set LongB [llength $LesNouveauxIndex] set A 0 set B 0 set Decal 0 while 1 { if {$A>=$LongA} { break } set IndexA [lindex $LesAnciensIndex $A] set IndexB [lindex $LesNouveauxIndex $B] set Ok 1 foreach H $LesAnciensHeader { if {$H=="status_ID"} { continue } set VA [RetChip2 $IndexA $H] set VB [RetChip3 $IndexB $H] if {$VA=="" || $VB==""} { continue } if {[RetChip2 $IndexA $H]!=[RetChip3 $IndexB $H]} { if {[regexp -nocase {[a-z]} $VA] && [regexp {\,} $VB] && [regexp $VA $VB]} { break } set Ok 0 } break } if {$Ok} { set MonCopain(Nouveau,$IndexA) $IndexB set MonCopain(Ancien,$IndexB) $IndexA set LastNotYetAffected "" incr A incr B set Decal 0 set RepereA $A set RepereB $B continue } # Espionne "$IndexA $IndexB\n[RetChip2 $IndexA WholeLine]\n[RetChip3 $IndexB WholeLine]" set MonCopain(Ancien,$IndexB) "NouveauAvant $IndexA" set LastNotYetAffected $IndexA incr B if {$B>=$LongB || [incr Decal]>100} { set Decal 0 set A [incr RepereA] set B $RepereB } } if {$LastNotYetAffected!=""} { FaireLire "Horreur ! $IndexA n'a pas de nouveau copain\nVoir $MonCopain(Nouveau,[expr $IndexA -1])" } return [MonCopain $Quoi $Moi] } proc MonEviGeneList {{Qui ""} {Quoi ""}} { global EviGeneList if {$Qui==""} { set Qui "ListAll" set Quoi "GN" } if {[info exists EviGeneList($Qui,$Quoi)]} { return $EviGeneList($Qui,$Quoi)} if {[info exists EviGeneList("EstCharge")]} { return ""} foreach Nom [ListeDesPABs] { set GN [ExtraitInfo $Nom "ValiGN"] if {$GN==""} { continue } set EviGeneList($Nom,GN) $GN lappend EviGeneList(BoxesOf,$GN) $Nom lappend EviGeneList(ListAll,GN) $GN } set EviGeneList(ListAll,GN) [lsort -u $EviGeneList(ListAll,GN)] set EviGeneList("EstCharge") 1 return [EviGeneList $Qui $Quoi] } proc MonImageDansLaBanque {Nom} { set BanqueId_Access [Narcisse $Nom] set Access "" scan $BanqueId_Access "%s %s" BanqueId Access if {$BanqueId==""} { return "" } if {$Access==""} { set Access $BanqueId } return [join [LaSequenceDesBanques $BanqueId $Access AccessOK "OnVeutEMBL"] "\n"] } proc MonMounirDuBlast {NomOuFichier {FichierSortie ""}} { if {$FichierSortie==""} { set FichierSortie "GetText" } set Nom [file tail $NomOuFichier] if {[EstUnPAB $NomOuFichier]} { set Fichier "[RepertoireDuGenome]/blastp/$Nom" } else { set Fichier $NomOuFichier } set LesElus {} if {$FichierSortie=="GetList"} { return $LesElus } set LeReduit [BlastReduit $Fichier $LesElus] set Reduit [join $LeReduit "\n"] if {$FichierSortie=="GetText"} { return $Reduit } if {$FichierSortie=="Show"} { return [AfficheVariable $Reduit "AvecSegAlignement" "MounirReducedOf_/$Nom"] } return [Sauve $Reduit dans $FichierSortie] } proc MonoExonCount {Org {Strand ""} {FromWhere ""}} { Wup "Attention UCSC compte a partir de 0" if {$FromWhere==""} { set FromWhere "GeCo" } set org [string tolower $Org] set fromwhere [string tolower $FromWhere] set Where "exonCount=1" set Query "select count(*) from ucsc$org.$fromwhere where $Where" # set Retour [Bird $Query "flat"] set Retour [BirdSendQueryUrlAndGetFromUrl $Query "" "format=plat"] set Retour [string trim $Retour " \n"] Espionne $Retour return $Retour } proc MontageDesCrop {} { exec montage -geometry +0+0 -tile 10 AspRS_Decline.1.1-Crop.png AspRS_Decline.2.1-Crop.png AspRS_Decline.3.1-Crop.png AspRS_Decline.4.1-Crop.png AspRS_Decline.5.1-Crop.png AspRS_Decline.6.1-Crop.png AspRS_Decline.7.1-Crop.png AspRS_Decline.8.1-Crop.png AspRS_Decline.9.1-Crop.png AspRS_Decline.10.1-Crop.png AspRS_Decline.1.2-Crop.png AspRS_Decline.2.2-Crop.png AspRS_Decline.3.2-Crop.png AspRS_Decline.4.2-Crop.png AspRS_Decline.5.2-Crop.png AspRS_Decline.6.2-Crop.png AspRS_Decline.7.2-Crop.png AspRS_Decline.8.2-Crop.png AspRS_Decline.9.2-Crop.png AspRS_Decline.10.2-Crop.png AspRS_Decline.1.3-Crop.png AspRS_Decline.2.3-Crop.png AspRS_Decline.3.3-Crop.png AspRS_Decline.4.3-Crop.png AspRS_Decline.5.3-Crop.png AspRS_Decline.6.3-Crop.png AspRS_Decline.7.3-Crop.png AspRS_Decline.8.3-Crop.png AspRS_Decline.9.3-Crop.png AspRS_Decline.10.3-Crop.png AspRS_Decline-Crop.png } proc MontageDesSmall {} { exec montage -geometry +0+0 -tile 10 AspRS_Decline.1.1-Crop-Small.png AspRS_Decline.2.1-Crop-Small.png AspRS_Decline.3.1-Crop-Small.png AspRS_Decline.4.1-Crop-Small.png AspRS_Decline.5.1-Crop-Small.png AspRS_Decline.6.1-Crop-Small.png AspRS_Decline.7.1-Crop-Small.png AspRS_Decline.8.1-Crop-Small.png AspRS_Decline.9.1-Crop-Small.png AspRS_Decline.10.1-Crop-Small.png AspRS_Decline.1.2-Crop-Small.png AspRS_Decline.2.2-Crop-Small.png AspRS_Decline.3.2-Crop-Small.png AspRS_Decline.4.2-Crop-Small.png AspRS_Decline.5.2-Crop-Small.png AspRS_Decline.6.2-Crop-Small.png AspRS_Decline.7.2-Crop-Small.png AspRS_Decline.8.2-Crop-Small.png AspRS_Decline.9.2-Crop-Small.png AspRS_Decline.10.2-Crop-Small.png AspRS_Decline.1.3-Crop-Small.png AspRS_Decline.2.3-Crop-Small.png AspRS_Decline.3.3-Crop-Small.png AspRS_Decline.4.3-Crop-Small.png AspRS_Decline.5.3-Crop-Small.png AspRS_Decline.6.3-Crop-Small.png AspRS_Decline.7.3-Crop-Small.png AspRS_Decline.8.3-Crop-Small.png AspRS_Decline.9.3-Crop-Small.png AspRS_Decline.10.3-Crop-Small.png AspRS_Decline-Crop-Small.png } proc MontagePhoto {{Ordre ""} {DirImages ""} {DirImagettes ""} {LargeurImagette ""} {HauteurImagette ""} {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "Display" } if {$LargeurImagette=="" && $HauteurImagette==""} { set LargeurImagette 400 } if {$DirImages==""} { set DirImages "/home/moumou/synmito/3Data/Figures" } if {$DirImagettes==""} { if {$Ordre!=""} { set DirImagettes "$DirImages/$Ordre" } else { set DirImagettes "$DirImages/Imagettes" } } cd $DirImages set LesImagesNonTriees [glob -nocomplain "*.png"] foreach Image $LesImagesNonTriees { regsub {\.[^\.]+$} $Image "" U set MonImage($U) $Image } if {$Ordre==""} { set LesImages $LesImagesNonTriees } else { set LesImages {} foreach U [split $Ordre ""] c [split "[string range $Ordre 1 end]Z" ""] { if {[regexp {[a-z]} $U]} { continue } if {[regexp {[a-z]} $c]} { set U "$U$c" } if {[info exists MonImage($U)]} { lappend LesImages $MonImage($U) } else { lappend LesImages "NULL:" } } } if {[FileAbsent $DirImagettes]} { file mkdir $DirImagettes } set LesImagettes {} foreach Image $LesImages { set Imagette $DirImagettes/$Image lappend LesImagettes [file tail $Imagette] if {$Image=="NULL:"} { continue } exec convert $Image -resize ${LargeurImagette}x${HauteurImagette} $Imagette } cd $DirImagettes set Commande "montage -size 140x104 " set LeNouvelOrdre {} foreach Imagette $LesImagettes { set U $Imagette regsub -nocase {\.[^.]+$} $U "" U set Chaine "" if {$Imagette=="NULL:"} { append Commande " -label \"\" NULL:"; lappend LeNouvelOrdre "_"; continue } lappend LeNouvelOrdre $U if {[regexp {^([A-Z])([a-z])$} $U Match Useul Chaine]} { set U $Useul if {$Chaine=="a"} { set Chaine "alpha" } if {$Chaine=="b"} { set Chaine "beta" } set Chaine "$Chaine chain" } set T [UT $U] set T [string totitle $T] set RS "${T}RS $Chaine" set Titre "$U $RS" append Commande " -label \"$Titre\" $Imagette" } set NouvelOrdre [join $LeNouvelOrdre ""] set Title "Marie fait du coloriage $DirImagettes [Date Nice]" append Commande " -geometry +5+5 -tile 3x -frame 5 -title \"$Title\" Montage.png" eval exec $Commande exec convert Montage.png Montage.gif if {$GetWhat=="Display"} { image create photo Montage -file "Montage.gif" set W [image width Montage] set H [image height Montage] set K [UnCanva $W $H $W [Mini $H 800]] $K create image [expr $W/2] [expr $H/2] -image Montage -tags "Montage" return $K } return $DirImagettes } proc Month1to12 {Texte} { set Mois "" scan $Texte "%s" Mois set Mois [string toupper $Mois] set LesMoisA [list JANUARY FEBRUARY MARCH APRIL MAY JUNE JULY AUGUST SEPTEMBER OCTOBER NOVEMBER DECEMBER] set LesMoisF [list JANVIER FEVRIER MARS AVRIL MAI JUIN JUILLET AOUT SEPTEMBRE OCTOBRE NOVEMBRE DECEMBRE] set I 0 foreach MoisA $LesMoisA MoisF $LesMoisF { incr I if {[regexp "^$Mois" $MoisA]} { return $I } if {[regexp "^$Mois" $MoisF]} { return $I } } return 0 } proc MontreBootstrap {AId} { global Abr set res "" catch {set res [info level -1]} puts "montreboot [set Abr($AId,BootShow)] [set Abr($AId,BootDone)]" # no bootstrap, do nothing if {! [set Abr($AId,BootDone)]} { return } set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] if {[set Abr($AId,BootShow)]} { if {[set Abr($AId,Swap)]} { set Abr($AId,Swap) 0 ModeSwap $AId } if {[set Abr($AId,Reroot)]} { set Abr($AId,Reroot) 0 ModeReroot $AId } update idletasks # little circles at each node foreach {n i} [$t attr IdRot] { $PAD raise $i if {[$t get $n nboot] >= [set Abr($AId,ThresBoot)]} { set cf green1 } else { set cf red } $PAD itemconfig $i -fill $cf -outline black if {[set Abr($AId,TypeTree)] eq "radial"} { InitBalloonOnItem $PAD $i "[$t get $n nboot]" } } # for dendrogram, print the bootstrap value foreach i [$PAD find withtag "bootmark"] { $PAD itemconfig $i -fill blue } } else { foreach {n i} [$t attr IdRot] { $PAD lower $i $PAD itemconfig $i -fill white -outline white if {[set Abr($AId,TypeTree)] ne "dendrogram"} { $PAD bind $i "" $PAD bind $i "" } } # for dendrogram, clean the bootstrap value foreach i [$PAD find withtag "bootmark"] { $PAD itemconfig $i -fill white } } return } proc MontreCacheLaFeature {pos {note ""}} { global NomTextSeq CestLeMessageFeat NomFenetreOrdali if {[info exists CestLeMessageFeat]} {destroy $CestLeMessageFeat} if {$note eq ""} {return} set note [join $note \n] set note [string map [list _ " "] $note] set TexteActions $note set CestLeMessageFeat "$NomFenetreOrdali.mes" set px [winfo pointerx $NomFenetreOrdali] set py [winfo pointery $NomFenetreOrdali] set ry [winfo rooty $NomFenetreOrdali] set rx [winfo rootx $NomFenetreOrdali] set x [expr {$px-$rx}] set y [expr {$py-$ry-10}] message $CestLeMessageFeat -borderwidth 3 -relief raise -width 800 -justify left -text $TexteActions -background "lightyellow" -foreground "black" place $CestLeMessageFeat -x $x -y $y -anchor sw -in $NomFenetreOrdali return } proc MontreCacheLeDescriptif {pos {des ""}} { global NomNomSeq CestLeMessage NomFenetreOrdali if {[info exists CestLeMessage]} {destroy $CestLeMessage} if {$des == ""} {return} regsub -all "_" $des " " des set TexteActions "$des" set CestLeMessage "$NomFenetreOrdali.des" set px [winfo pointerx $NomFenetreOrdali] set py [winfo pointery $NomFenetreOrdali] set ry [winfo rooty $NomFenetreOrdali] set rx [winfo rootx $NomFenetreOrdali] set x [expr {$px-$rx}] set y [expr {$py-$ry-10}] message $CestLeMessage -borderwidth 3 -relief raise -width 800 -justify left -text $TexteActions -background "lightyellow" -foreground "black" place $CestLeMessage -x $x -y $y -anchor sw -in $NomFenetreOrdali return } proc MontreCacheLongInfoSeq {pos {des ""}} { global NomNomSeq CestLeLongDes NomFenetreOrdali if {[info exists CestLeLongDes]} {destroy $CestLeLongDes} if {$des eq ""} {return} set TexteActions "$des" set CestLeLongDes "$NomFenetreOrdali.longinfo" set px [winfo pointerx $NomFenetreOrdali] set py [winfo pointery $NomFenetreOrdali] set ry [winfo rooty $NomFenetreOrdali] set rx [winfo rootx $NomFenetreOrdali] set x [expr {$px-$rx}] set y [expr {$py-$ry-10}] message $CestLeLongDes -borderwidth 3 -relief raise -width 800 -justify left -text $TexteActions -background "lightyellow" -foreground "black" place $CestLeLongDes -x $x -y $y -anchor sw -in $NomFenetreOrdali return } proc MontreCacheResNumber {w x y} { set Lid [$w find overlapping $x $y [incr x] [incr y]] set Lt [list] foreach id $Lid { lappend Lt {*}[$w gettags $id] } set tag [lsearch -inline -regexp $Lt {^Nbr}] if {$tag eq ""} { set ::NwOj(CurrentNbr) "" CacheResNumber $w return } set Nbr [string range $tag 3 end] if {$Nbr ne $::NwOj(CurrentNbr)} { CacheResNumber $w set ::NwOj(CurrentNbr) $Nbr MontreResNumber $w $tag } return } proc MontreCacheScores {pos} { global NomTextSeq NomFenetreOrdali CestLeScore ListeScore # norm dis nVp mcos dist Ranganatan if {[info exists CestLeScore]} {destroy $CestLeScore} if {! [info exists ListeScore]} {return} lassign [split $pos .] ys xs lassign [$NomTextSeq bbox $pos] x y q t incr y -10 set lx [lindex $ListeScore $xs] set no [lindex $lx 0] set ds [lindex $lx 1] set vp [lindex $lx 2] set mc [lindex $lx 3] set di [lindex $lx 4] set dg [lindex $lx 5] set TexteActions "En x = [expr {$xs+1}], \nnorm ... : $no\ndisp ... : $ds\nnrVp ... : $vp\nmcos ... : $mc\ndist ... : $di\ndelG ... : $dg" set CestLeScore "$NomFenetreOrdali.sco" message $CestLeScore -borderwidth 3 -relief raise -width 800 -justify left -text $TexteActions -background "lightyellow" -foreground "black" -font "CourierNew 16 bold" place $CestLeScore -x $x -y $y -anchor sw -in $NomFenetreOrdali return } proc MontreCeQueFaitLeBouton {Bouton} { global LeBoutonQuiEstMontre catch {destroy $LeBoutonQuiEstMontre} set LesActions [QueFaitLeBouton $Bouton] if {$LesActions == {} } { return "" } global RapetisseLesBoutonsDe if {[info exists RapetisseLesBoutonsDe($Bouton)]} { set TexteActions "[set RapetisseLesBoutonsDe($Bouton)]\n\n[join $LesActions "\n"]" } else { set TexteActions [join $LesActions "\n"] } regsub -nocase {\.[a-z_0-9]*$} $Bouton "" FdB if {$FdB==""} { return "" } regsub -nocase {\.[a-z_0-9]*$} $FdB "" FdFdB if {$FdFdB==""} { return "" } set x [winfo x $FdB] set y [winfo y $FdB] incr x [winfo x $Bouton] incr y [winfo y $Bouton] incr y -10 set M ${FdFdB}[NomDe message] message $M -borderwidth 3 -relief raise -width 800 -text $TexteActions -background "lightyellow" -foreground "black" if {[expr $x > 400]} { set Anchor se } else { set Anchor sw } place $M -x $x -y $y -anchor $Anchor -in $FdFdB set LeBoutonQuiEstMontre $M return $LeBoutonQuiEstMontre } proc MontreCourant {w x y} { global TexteMontreCourant set BBox [$w bbox all] set cx [expr ([lindex $BBox 2] + [lindex $BBox 0])/2] set cy [expr ([lindex $BBox 3] + [lindex $BBox 1])/2] if {[expr $x < $cx]} { set EW w } else { set EW e } if {[expr $y < $cy]} { set NS n } else { set NS s } set Ancre "$NS$EW" set X [$w canvasx [expr $x ]] set Y [$w canvasy [expr $y - 20 ]] if {[info exists TexteMontreCourant($w)]} { EffaceCourant $w } set Texte [NomDuCourant $w] set Queue ". .[string range $Texte [expr [string length $Texte]-20] end]" set TexteMontreCourant($w) [$w create text $X $Y -text "$Queue" -anchor $Ancre] } proc MontreInfoSeq {} { global LNOrdali TEdit nseq global ListeDesAcidesAmines TDesSeqnames foreach e $LNOrdali { if {$e eq ""} {continue} lappend Ln [set TDesSeqnames($e)] set TEdit(corr,[set TDesSeqnames($e)]) $e } # calcule compo pour alignement foreach {a p} [CompositionAADuGroupe] { set TEdit(compAll,$a) [format %5.1f $p] } # Fenetre set w ".infoseq" toplevel $w wm title $w "Sequence Information" wm resizable $w 0 0 wm protocol $w WM_DELETE_WINDOW KillParLaCroix set wf "$w.f" frame $w.f grid $w.f -row 0 -column 0 -sticky news grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 grid columnconfig $wf all -weight 1 grid rowconfig $wf 1 -weight 1 set LMx [PlusLongEltDe $Ln] set nseq [lindex $Ln 0] set TEdit(mode) "show" set TEdit(FWarn) $wf.top frame $wf.top label $wf.top.lab -text "Sequence" -font EdtItem -anchor w -justify left set TEdit(nseqCombo) [lindex $Ln 0] ttk::combobox $wf.top.seq -background white -width $LMx -state readonly -values $Ln -textvariable TEdit(nseqCombo) $wf.top.seq index 0 bind $wf.top.seq <> [list InfosDeLaSeq %W VientDuCombo] grid $wf.top.lab -column 0 -row 0 -sticky w grid $wf.top.seq -column 1 -row 0 -sticky w grid $wf.top -row 0 -column 0 -columnspan 2 -sticky w -padx 10 -pady 15 grid columnconfig $wf.top all -weight 1 # deux frames, droites et gauche # frame de gauche frame $wf.g # Frame infos generales set wgen $wf.g.gen labelframe $wgen -bd 2 -relief groove -font EdtTitre -text "General" -fg blue set l [LgtDescriptif] set nl [expr {$l/40+1>3?$l/40+1:3}] label $wgen.lsqn -text "Seq Name" -anchor w -justify left -font EdtItem label $wgen.esqn -anchor w -justify left -textvariable TEdit(seqname) label $wgen.lacc -text "Accession" -anchor w -justify left -font EdtItem label $wgen.eacc -anchor w -justify left -textvariable TEdit(access) label $wgen.lnid -text "Bank Id" -anchor w -justify left -font EdtItem label $wgen.enid -anchor w -justify left -textvariable TEdit(bid) label $wgen.lec -text "E.C." -anchor w -justify left -font EdtItem label $wgen.eec -anchor w -justify left -textvariable TEdit(ec) set TEdit(tdes) "$wgen.edes" label $wgen.ldes -text "Description" -anchor w -justify left -font EdtItem text $wgen.edes -width 30 -relief flat -height $nl -wrap word -state disabled # packing Frame Generales grid $wgen.lsqn -row 0 -column 0 -sticky ew grid $wgen.esqn -row 0 -column 1 -sticky ew grid $wgen.lacc -row 1 -column 0 -sticky ew grid $wgen.eacc -row 1 -column 1 -sticky ew grid $wgen.lnid -row 2 -column 0 -sticky ew grid $wgen.enid -row 2 -column 1 -sticky ew grid $wgen.lec -row 3 -column 0 -sticky ew grid $wgen.eec -row 3 -column 1 -sticky ew grid $wgen.ldes -row 4 -column 0 -sticky ne grid $wgen.edes -row 4 -column 1 -sticky ew grid $wgen -row 0 -column 0 -sticky news -padx {10 5} -pady 5 grid columnconfig $wgen 0 -weight 0 grid columnconfig $wgen 1 -weight 1 # Frame infos Evolution/Phylogeny set wphy $wf.g.phy labelframe $wphy -bd 2 -relief groove -font EdtTitre -text "Evolution/Phylogeny" -fg blue label $wphy.lorg -text "Organism" -anchor w -justify left -font EdtItem label $wphy.eorg -anchor w -justify left -textvariable TEdit(orga) label $wphy.llfd -text "Life domain" -anchor w -justify left -font EdtItem label $wphy.elfd -anchor w -justify left -textvariable TEdit(lifed) label $wphy.ltxd -text "Taxa Id" -anchor w -justify left -font EdtItem label $wphy.etxd -anchor w -justify left -textvariable TEdit(taxid) set TEdit(tlin) "$wphy.elin" label $wphy.llin -text "Lineage" -anchor w -justify left -font EdtItem text $wphy.elin -width 30 -relief flat -height $nl -wrap word -state disabled # packing Frame Evolution/Phylogeny grid $wphy.lorg -row 0 -column 0 -sticky ew grid $wphy.eorg -row 0 -column 1 -sticky ew grid $wphy.llfd -row 1 -column 0 -sticky ew grid $wphy.elfd -row 1 -column 1 -sticky ew grid $wphy.ltxd -row 2 -column 0 -sticky ew grid $wphy.etxd -row 2 -column 1 -sticky ew grid $wphy.llin -row 3 -column 0 -sticky ew grid $wphy.elin -row 3 -column 1 -sticky ew grid $wphy -row 1 -column 0 -sticky news -padx {10 5} -pady 5 grid columnconfig $wphy 0 -weight 0 grid columnconfig $wphy 1 -weight 1 grid $wf.g -row 1 -column 0 -sticky news grid rowconfig $wf.g 1 -weight 1 # frame de droite frame $wf.d # Frame Physico-Chimie set wphc $wf.d.phc labelframe $wphc -bd 2 -relief groove -font EdtTitre -text "Physico-chemistry" -fg blue label $wphc.lmmw -text "Molecular Weight (Da)" -font EdtItem -anchor w -justify right label $wphc.emmw -anchor w -justify left -textvariable TEdit(molw) label $wphc.llgt -text "Length (aa)" -font EdtItem -anchor w -justify right label $wphc.elgt -anchor w -justify left -textvariable TEdit(length) label $wphc.lhyd -text "Hydrophobicity Index" -font EdtItem -anchor w -justify right label $wphc.ehyd -anchor w -justify left -textvariable TEdit(hydro) label $wphc.lpis -text "Isoelectric Point" -font EdtItem -anchor w -justify right label $wphc.epis -anchor w -justify left -textvariable TEdit(pi) # packing Frame Physico-Chimie grid $wphc.lmmw -row 0 -column 0 -sticky ew grid $wphc.emmw -row 0 -column 1 -sticky ew grid $wphc.llgt -row 1 -column 0 -sticky ew grid $wphc.elgt -row 1 -column 1 -sticky ew grid $wphc.lhyd -row 2 -column 0 -sticky ew grid $wphc.ehyd -row 2 -column 1 -sticky ew grid $wphc.lpis -row 3 -column 0 -sticky ew grid $wphc.epis -row 3 -column 1 -sticky ew grid $wphc -row 0 -column 0 -sticky news -padx {5 10} -pady 5 # Frame composition set wcmp $wf.d.cmp labelframe $wcmp -bd 2 -relief groove -font EdtTitre -text "Composition" -fg blue set r 0 set c -1 foreach a $ListeDesAcidesAmines { if {$a eq "Z" || $a eq "X"} {continue} incr c if {$c > 10} { set c 0 incr r 4 } if {$c == 0} { label $wcmp.ls$r -text "Seq" -anchor center -justify right label $wcmp.lg$r -text "Grp" -anchor center -justify right label $wcmp.la$r -text "All" -anchor center -justify right grid $wcmp.ls$r -row [expr {$r+1}] -column $c -sticky ew grid $wcmp.lg$r -row [expr {$r+2}] -column $c -sticky ew grid $wcmp.la$r -row [expr {$r+3}] -column $c -sticky ew incr c } label $wcmp.l$a -text "$a" -font EdtItem -anchor center -justify center label $wcmp.es$a -anchor w -justify left -textvariable TEdit(compaa,$a) label $wcmp.eg$a -anchor w -justify left -textvariable TEdit(compGrp,$a) label $wcmp.ea$a -anchor w -justify left -textvariable TEdit(compAll,$a) grid $wcmp.l$a -row $r -column $c -sticky ew grid $wcmp.es$a -row [expr {$r+1}] -column $c -sticky ew grid $wcmp.eg$a -row [expr {$r+2}] -column $c -sticky ew grid $wcmp.ea$a -row [expr {$r+3}] -column $c -sticky ew } incr r 5 set c -1 foreach a {"AILMV" "KRH" "DEQN" "FYW" "PGST"} { incr c if {$c == 0} { label $wcmp.ls$r -text "Seq" -anchor center -justify right label $wcmp.lg$r -text "Grp" -anchor center -justify right label $wcmp.la$r -text "All" -anchor center -justify right grid $wcmp.ls$r -row [expr {$r+1}] -column $c -sticky ew grid $wcmp.lg$r -row [expr {$r+2}] -column $c -sticky ew grid $wcmp.la$r -row [expr {$r+3}] -column $c -sticky ew incr c } label $wcmp.l$a -text "$a" -font EdtItem -anchor w -justify center label $wcmp.es$a -anchor w -justify left -textvariable TEdit(compaa,$a) label $wcmp.eg$a -anchor w -justify left -textvariable TEdit(compGrp,$a) label $wcmp.ea$a -anchor w -justify left -textvariable TEdit(compAll,$a) grid $wcmp.l$a -row $r -column $c -sticky ew grid $wcmp.es$a -row [expr {$r+1}] -column $c -sticky ew grid $wcmp.eg$a -row [expr {$r+2}] -column $c -sticky ew grid $wcmp.ea$a -row [expr {$r+3}] -column $c -sticky ew } grid $wcmp -row 1 -column 0 -sticky news -padx {5 10} -pady 5 grid $wf.d -row 1 -column 1 -sticky news grid rowconfig $wf.d 1 -weight 1 # Frame Boutons frame $wf.btn button $wf.btn.ok -bg green1 -text " Close " -command "DismissInfoSeq $w" grid $wf.btn.ok -row 0 -column 0 grid $wf.btn -row 2 -column 0 -columnspan 2 -sticky ew -pady 15 grid columnconfig $wf.btn 0 -weight 1 InfosDeLaSeq "" $nseq update idletasks FenetreAuCentre $w tkwait window $wf return } proc MontreLesParametresDuDesign {} { Wup "Permet de montrer les parametres du design quelque soit la situation (GUI ou non)" AjouteAuLog "\nYour parameters for the design:" set LesParams [list Query Query Length LengthOligo Areas LesZones Tm TmLimit "Tm Range" TmRange "Nb Oligo" NbOligo Step Step Specificity IdLimit Contiguous NbContiguous GCLower GCContentMinus GCUpper GCContentPlus DataBase DataBase "Tm Method" TmMethod Prohibited LesProhibes "Saving Dir" WorkingDir BlastExpect BlastExpect BlastWord BlastWord BlastNbAligned BlastNbAligned BlastStrand BlastStrand "Check Query" QueryCheck] foreach {Nom Param} $LesParams { if {![LesParametresDuDesign $Param "Existe"]} { AjouteAuLog [format "%-15s%-s" $Nom "Not used"] } else { if {$Param=="LesZones"} { AjouteAuLog [format "%-15s%-s" $Nom [join [LesParametresDuDesign $Param "LaValeurMerci"] " "]] continue } AjouteAuLog [format "%-15s%-s" $Nom [LesParametresDuDesign $Param "LaValeurMerci"]] } } return "" } proc MontreLesSD {} { global RepertoireDuGenome global ListeDesPABs if { ! [info exists ListeDesPABs]} { ChargeLesPABs } foreach Nom $ListeDesPABs { puts [ShineDalgarno $Nom] } } proc MontreLesStrSecDetaillees {} { global NomEtSeqAssPDB global Sequences global LNOrdali global NomTextSeq global NomNomSeq global SeqlabMode if {$SeqlabMode} { FaireLire "Not available in Seqlab mode !" return } # Cree la fenetre avec meme apparence que fenetre master d'ordali set w .secstr toplevel $w wm title $w "Detailed Secondary Structure" wm iconname $w "SecStr" wm protocol $w WM_DELETE_WINDOW KillParLaCroix frame $w.lesseq -borderwidth .5c canvas $w.lesseq.textsequence -relief sunken -bd 2 -cursor left_ptr -xscrollcommand "$w.lesseq.scrollxseq set" -yscrollcommand "$w.lesseq.scrolly set" -background white -selectforeground black -selectbackground white label $w.lesseq.scrollxnom -textvariable nomstatus -relief sunken -bd 1 -anchor w frame $w.lesseq.fpos -relief sunken -bd 1 label $w.lesseq.fpos.vposg -textvariable XGen -relief flat -width 4 -anchor e label $w.lesseq.fpos.tposs -text " seq " -relief flat -width 5 -anchor w label $w.lesseq.fpos.vposs -textvariable XSeq -relief flat -width 4 -anchor e grid $w.lesseq.fpos.tposg -row 0 -column 0 -padx 0 grid $w.lesseq.fpos.vposg -row 0 -column 1 -padx 0 grid $w.lesseq.fpos.tposs -row 0 -column 2 -padx 0 grid $w.lesseq.fpos.vposs -row 0 -column 3 -padx 0 text $w.lesseq.textnomseq -relief sunken -bd 2 -cursor left_ptr -font SeqFont -yscrollcommand "$w.lesseq.scrolly set" -wrap none -width 15 -foreground black -background white text $w.lesseq.regle -bd 2 -font SeqFont -cursor left_ptr -foreground black -background white -xscrollcommand "$w.lesseq.scrollxseq set" -setgrid 1 -wrap none -height 3 scrollbar $w.lesseq.scrollxseq -orient horiz -width 8 -command [list CoupleX] -bd 2 scrollbar $w.lesseq.scrolly -width 8 -command "CoupleY $w.lesseq.textsequence $w.lesseq.textnomseq " -bd 2 pack $w.lesseq -side top -expand 1 -fill both grid rowconfig $w.lesseq 0 -weight 1 -minsize 0 grid columnconfig $w.lesseq 0 -weight 0 -minsize 0 grid columnconfig $w.lesseq 1 -weight 0 -minsize 0 grid columnconfig $w.lesseq 2 -weight 1 -minsize 0 grid $w.lesseq.textnomseq -padx 1 -in $w.lesseq -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $w.lesseq.scrollxnom -in $w.lesseq -padx 1 -pady 1 -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $w.lesseq.textsequence -in $w.lesseq -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 2 -sticky news grid $w.lesseq.regle -in $w.lesseq -padx 1 -pady 1 -row 1 -column 1 -rowspan 1 -columnspan 2 -sticky news grid $w.lesseq.fpos -in $w.lesseq -padx 1 -pady 1 -row 2 -column 1 -rowspan 1 -columnspan 1 -sticky nws grid $w.lesseq.scrollxseq -in $w.lesseq -padx 1 -pady 1 -row 2 -column 2 -rowspan 1 -columnspan 1 -sticky news grid $w.lesseq.scrolly -in $w.lesseq -padx 1 -pady 1 -row 0 -column 3 -rowspan 1 -columnspan 1 -sticky news set Boutons $w.buttons frame $Boutons pack $Boutons -side bottom -fill x -pady 2m button $Boutons.dismiss -text "Cancel" -background "red" -command "destroy $w" pack $Boutons.dismiss -side left -expand 1 set HautFont [font metrics SeqFont -displayof $w.lesseq.textnomseq -linespace ] set LargFont [font measure SeqFont -displayof $w A] scan [lindex $NomEtSeqAssPDB 0] "%s %s %s" tmp SeqAss MolId set nomSeqAss $SeqAss set width [string length [set Sequences($nomSeqAss)]] set width [expr {$width*$LargFont}] set NbPDB [llength $NomEtSeqAssPDB] set heigth [expr {$NbPDB*$HautFont*4}] $w.lesseq.textsequence configure -width 512 -height $heigth $w.lesseq.textsequence configure -scrollregion [list 0 0 $width $heigth] InitEtAfficheNomSeqSecStr $w.lesseq.textnomseq AfficheRegle $w.lesseq set cpt 0 foreach elt $NomEtSeqAssPDB { scan $elt "%s %s %s" PDB SeqAss MolId set chn [string index $MolId 5] set MolId [string range $MolId 0 3] global PDB_[set MolId]_NomAtm global PDB_[set MolId]_NomRes global PDB_[set MolId]_NmrRes global PDB_[set MolId]_ChnIdn global PDB_[set MolId]_Sequence set SeqAlignee [lindex [set PDB_[set MolId]_Sequence($chn)] 1] MetAJourCanvasSecStr $w.lesseq.textsequence $cpt [set Sequences($SeqAss)] $SeqAlignee $MolId incr cpt } MesCouleurs $w return } proc MontreLesZones {K XDebut XFin YDebut {OneNtPixel ""}} { Wup "Affiche les zones de design deja definies dans le Panel" Wup "Attention le tableau est indexee par la position en nt" global LigneZone set Police {-family "comic" -size 10 -weight bold} set PAB [LesInfosDe $K MonPAB] set LesZones [LesParametresDuDesign LesZones $PAB "LaValeurMerci"] if {$LesZones==""} { ClearLesZones $K return "" } set LesZones [lsort -increasing -index 0 $LesZones] set IdQ [$K find withtag "Query"] set YQFin [lindex [$K coords $IdQ] 3] foreach CoupleDeZone $LesZones { foreach Zone $CoupleDeZone { set x [expr $XDebut + $Zone * $OneNtPixel] if {[info exists LigneZone($K,$Zone)]} { catch {$K delete [set LigneZone($K,$Zone)]} catch {$K delete [set LigneZone($K,$Zone,zone)]} unset LigneZone($K,$Zone) if {[info exists LigneZone($K,$Zone,zone)]} {unset LigneZone($K,$Zone,zone)} } if {$x>$XFin} { set x $XFin set Zone [expr (($x-$XDebut) / (1.0*$OneNtPixel)) + 1] } set Numero "" set LigneZone($K,$Zone,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "$Numero" -fill "red" -anchor "center" -tags [list "" "Zonable" "Flag"]] set LigneZone($K,$Zone) [$K create line $x $YDebut $x $YQFin -fill "#808FFF" -tags [list "" "[format "%.0f" $Zone]" "Affichable" "Zonable"]] CheckLesZones $K } } return "" } proc MontreLesZonesDeGC {K XDebut XFin YDebut {YFin ""} {OneNtPixel ""} {Minimum ""}} { Wup "Affiche les zones de GC deja definies dans le Panel" Wup "Domaine de validite sur X (XDebut XFin) et valeur sur Y (YDebut YFin)" Wup "Minimum est necessaire car on ne commence pas a 0 ou 1 depend des valeurs observees" Wup "Attention le tableau est indexee par la melting temperature en degres" global LigneZone set Police {-family "comic" -size 10 -weight bold} set GC1 [LesParametresDuDesign GCContentMinus "LaValeurMerci"] set GC2 [LesParametresDuDesign GCContentPlus "LaValeurMerci"] if {$GC1=="" || $GC2==""} {return ""} set CoupleDeZone [list $GC1 $GC2] foreach Zone $CoupleDeZone { set x [expr $XDebut + $Zone * $OneNtPixel - $Minimum * $OneNtPixel] if {[info exists LigneZone($K,$Zone)]} { catch {$K delete [set LigneZone($K,$Zone)]} catch {$K delete [set LigneZone($K,$Zone,zone)]} unset LigneZone($K,$Zone) if {[info exists LigneZone($K,$Zone,zone)]} {unset LigneZone($K,$Zone,zone)} } if {$x>$XFin} { set x $XFin set Zone [format "%.1f" [expr (($x-$XDebut) / (1.0*$OneNtPixel)) +$Minimum]] } set Numero "" set Numero $Zone set LigneZone($K,$Zone,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "$Numero" -fill "red" -anchor "center" -tags [list "" "Zonable" "Flag"]] set LigneZone($K,$Zone) [$K create line $x $YDebut $x $YFin -fill "#808FFF" -tags [list "" "[format "%.1f" $Zone]" "Affichable" "Zonable"]] } return "" } proc MontreLesZonesDeTm {K XDebut XFin YDebut {YFin ""} {OneNtPixel ""} {Minimum ""}} { Wup "Affiche les zones de Tm deja definies dans le Panel" Wup "Domaine de validite sur X (XDebut XFin) et valeur sur Y (YDebut YFin)" Wup "Minimum est necessaire car on ne commence pas a 0 ou 1 depend des valeurs observees" Wup "Attention le tableau est indexee par la melting temperature en degres" global LigneZone ClearLesZones $K set Police {-family "comic" -size 10 -weight bold} set Tm [LesParametresDuDesign TmLimit "LaValeurMerci"] set Range [LesParametresDuDesign TmRange "LaValeurMerci"] if {$Range==""} {set Range 0.0} if {$Tm ==""} {return ""} set Borne1 [expr $Tm + $Range] set Borne2 [expr $Tm - $Range] set CoupleDeZone [list $Borne1 $Borne2] foreach Zone $CoupleDeZone { set x [expr $XDebut + $Zone * $OneNtPixel - $Minimum * $OneNtPixel] if {[info exists LigneZone($K,$Zone)]} { catch {$K delete [set LigneZone($K,$Zone)]} catch {$K delete [set LigneZone($K,$Zone,zone)]} unset LigneZone($K,$Zone) if {[info exists LigneZone($K,$Zone,zone)]} {unset LigneZone($K,$Zone,zone)} } if {$x>$XFin} { set x $XFin set Zone [format "%.1f" [expr (($x-$XDebut) / (1.0*$OneNtPixel)) +$Minimum]] } set Numero "" set Numero $Zone set LigneZone($K,$Zone,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "$Numero" -fill "red" -anchor "center" -tags [list "" "Zonable" "Flag"]] set LigneZone($K,$Zone) [$K create line $x $YDebut $x $YFin -fill "#808FFF" -tags [list "" "[format "%.1f" $Zone]" "Affichable" "Zonable"]] } return "" } proc MontreNomSuperClassePI {Nom Orga} { puts "$Nom [FiabiliteFonction $Nom] [SuperClasse [ClasseFonctionnelle $Nom]] [PourcentageIdentiteOrga $Nom $Orga]" } proc MontreOrganismes {{AvecRetour ""}} { Gs "Frame" if { [string equal -nocase $AvecRetour "AvecRetour"] } { set OptionRetour "AvecRetour" } else { set OptionRetour "" } foreach Ligne [Glossaire Bidon Entier] { set LesMots [split [string trim $Ligne ":"] ":"] set i 0 foreach Mot $LesMots { incr i if {[info exists Largeur($i)]} { set Largeur($i) [Maxi [set Largeur($i)] [string length $Mot]] } else { set Largeur($i) [string length $Mot] } } } foreach Ligne [Glossaire Bidon Entier] { set i 0 set Texte "" foreach Mot [split [string trim $Ligne ":"] ":"] { incr i append Texte [format "%-[set Largeur($i)]s " $Mot] } lappend LesTextes $Texte } return [AfficheVariable [join $LesTextes "\n"] "SansFetch$OptionRetour" "glossaire"] } proc MontreResNumber {w tag} { foreach i [$w find withtag "NBox && $tag"] { $w itemconfig $i -fill orange if {[$w type $i] ne "line"} { $w itemconfig $i -outline orange } } set id [$w find withtag "BgRes && $tag"] lassign [$w bbox $id] xd yd tmp tmp incr xd 3 incr yd 6 set Nbr [string range $tag 3 end] set irs [lsearch -exact $::NwOj(LResNb) $Nbr] set res [lindex $::NwOj(LResNm) $irs] $w create text $xd $yd -anchor s -justify center -text "$res $Nbr" -fill orange -tags [list LabelNbr A$Nbr] return } proc MontreSecator {MSF} { set FiMSF [Sauve $MSF dans [TmpFile "secator"]] set LesAGs [GroupeSecator $FiMSF "" "ToutLeMondeAvecGroupe" "ToCalculate"] set Fenetre [AfficheVariable [join $LesAGs "\n"] ""] IllumineSuivantLesGroupes $LesAGs $Fenetre MemoSelection $Fenetre Memorize return $LesAGs } proc MontreStrSecDansAlignement {} { global Toggle Defauts NomTextSeq NomNomSeq LNOrdali ListePDB if {! [ModeI]} {return} if {[TypeAli] eq "pasdali"} {return} if {[set Defauts(AffSS)]} {return} if {[QuelMode] eq "seqlab"} { set ::Defauts(AffSS) 0 return } $NomNomSeq configure -state normal $NomTextSeq configure -state normal $NomNomSeq tag configure PDB -foreground black -background red -underline 1 $NomTextSeq tag configure Fnd -foreground black -background white $NomTextSeq tag configure Hel -foreground black -background red $NomTextSeq tag configure She -foreground black -background green1 $NomTextSeq tag configure Tur -foreground black -background cyan $NomTextSeq tag configure H31 -foreground black -background magenta set y 0 set Lth {} ; set Lts {} ; set Ltt {} foreach n $LNOrdali { incr y if {$n ni $ListePDB} {continue} set chn [DonneChainDeAccessPDB $n] set MolId [DonneIdDeAccessPDB $n] $NomNomSeq tag add PDB "$y.0" "$y.0 lineend" foreach ss [$MolId SecStr -chain $chn] { #puts "ss= $ss" DecortiqueSS $ss Elmt NomChnDep DbP FnP Rm if {$Elmt eq "Coil" || $chn ne $NomChnDep} { continue } set Deb [DonnePosSG $n $DbP] set Fin [DonnePosSG $n $FnP] incr Fin switch $Elmt { "Alpha" {lappend Lth $y.$Deb $y.$Fin} "Pi" {lappend Lth $y.$Deb $y.$Fin} "3_10" {lappend Lth $y.$Deb $y.$Fin} "Sheet" {lappend Lts $y.$Deb $y.$Fin} "Turn" {lappend Ltt $y.$Deb $y.$Fin} } } } if {$Lth != {}} {$NomTextSeq tag add Hel {*}$Lth} if {$Lts != {}} {$NomTextSeq tag add She {*}$Lts} if {$Ltt != {}} {$NomTextSeq tag add Tur {*}$Ltt} $NomNomSeq configure -state disabled $NomTextSeq configure -state disabled set Defauts(AffSS) 1 return } proc MontreStructureDansRasmol {pdbid} { # Routine qui peut etre incluse dans un programme pour appeler # Rasmol. global InitRasMol global VersViewer global Defauts package require http if { ! [info exists Defauts]} {LesDefauts} set pdbid [string range [string trim $pdbid] 0 3] set VersViewer "VersRasMol" set InitRasMol 1 set leslignesPDB [RecupereUnFichierSurWeb $pdbid] if {$leslignesPDB != "ERREUR"} { set nom [SauveLePDB $leslignesPDB $pdbid] } else { FaireLire "Error !!\nPDB $pdbid does not exits or not found on servers" } IlFautVoir "zap" IlFautVoir "background [set Defauts(Background)]" IlFautVoir "set cartoons 6" IlFautVoir "load $nom" IlFautVoir "wireframe off" IlFautVoir "structure" IlFautVoir "cartoon" return } proc MontreTousCeuxQuiSont {CommeCa {Orga ""}} { global ListeDeBoites if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } Wup "OrgaPi n'existe plus ... le reecrire si necessaire." foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] if { ! [regexp $CommeCa [Cas $Nom]]} { continue } # MontreNomSuperClassePI $Nom $Orga puts "$Nom [Cas $Nom] [FiabiliteFonction $Nom] [ClasseFonctionnelle $Nom] [NomDeGene $Nom] [Definition $Nom]" puts " [join [lrange [PhylonOrgaEtDistance $Nom] 0 16] " "]" puts " [join [lrange [OrgaPi $Nom] 0 16] " "]" } } proc MorbidMap {{Qui ""} {Quoi ""}} { global MorbidMap if {$Qui==""} { return "" } # if {$Qui==""} { set Qui "ListOf" ; set Quoi "Gn" } if {$Quoi==""} { set Quoi "OD" } ; #rR on rend Omim et Disease 2012/0525 if {$Quoi=="Disease"} { set Quoi "Di" } if {$Qui!="ListOf"} { set Qui [string toupper $Qui] } if {[info exists MorbidMap($Qui,$Quoi)]} { return $MorbidMap($Qui,$Quoi) } if {[info exists MorbidMap("EstCharge")]} { return "" } set MorbidMap("EstCharge") 1 set RepKb "/genomics/link/AmdKb" set FichierMorbidMap "$RepKb/DeSM2PH/morbidmap.txt" set Ix -1 foreach Ligne [LesLignesDuFichier $FichierMorbidMap] { incr Ix regsub -all {[\{\}@]} $Ligne "" Ligne regsub -all { +} $Ligne " " Ligne regsub -all { *\| *} $Ligne "|" Ligne set Ligne [string trim $Ligne] lassign [split $Ligne "|"] Di Genes Om Cy if { ! [regexp { ([0-9]{6}) \([0-9]\)$} $Di Match O2]} { set O2 "" } regsub -all {[ ,]+} $Genes " " Genes set LesGenes [split [string trim $Genes] " "] set MorbidMap($Ix,Line) $Ligne lappend MorbidMap(ListOf,Ix) $Ix lappend MorbidMap($Di,Ix) $Ix lappend MorbidMap($Om,Ix) $Ix lappend MorbidMap(ListOf,Di) $Di lappend MorbidMap(ListOf,Om) $Om if {$O2!=""} { lappend MorbidMap($O2,Ix) $Ix lappend MorbidMap(ListOf,Om) $O2 } foreach Gn $LesGenes { lappend MorbidMap(ListOf,Gn) $Gn lappend MorbidMap($Gn,Ix) $Ix lappend MorbidMap($Gn,Di) $Di lappend MorbidMap($Gn,Cy) $Cy lappend MorbidMap($Gn,Om) $Om lappend MorbidMap($Gn,OD) "$Om $Di" lappend MorbidMap($Om,Gn) $Gn if {$O2!=""} { lappend MorbidMap($Gn,Om) $O2 lappend MorbidMap($Gn,OD) "$O2 $Di" lappend MorbidMap($O2,Gn) $Gn } } lappend MorbidMap($Di,Om) $Om lappend MorbidMap($Om,Di) $Di lappend MorbidMap($Om,Cy) $Cy if {$O2!=""} { lappend MorbidMap($Di,Om) $O2 lappend MorbidMap($O2,Di) $Di lappend MorbidMap($O2,Cy) $Cy } } set MorbidMap(ListOf,Gn) [lsort -unique $MorbidMap(ListOf,Gn)] set MorbidMap(ListOf,Di) [lsort -unique $MorbidMap(ListOf,Di)] set MorbidMap(ListOf,Om) [lsort -unique $MorbidMap(ListOf,Om)] foreach Gn $MorbidMap(ListOf,Gn) { set MorbidMap($Gn,Ix) [lsort -unique $MorbidMap($Gn,Ix)] set MorbidMap($Gn,Di) [lsort -unique $MorbidMap($Gn,Di)] set MorbidMap($Gn,Cy) [lsort -unique $MorbidMap($Gn,Cy)] set MorbidMap($Gn,Om) [lsort -unique $MorbidMap($Gn,Om)] set MorbidMap($Gn,OD) [lsort -unique $MorbidMap($Gn,OD)] } foreach Om $MorbidMap(ListOf,Om) { set MorbidMap($Om,Ix) [lsort -unique $MorbidMap($Om,Ix)] set MorbidMap($Om,Di) [lsort -unique $MorbidMap($Om,Di)] set MorbidMap($Om,Cy) [lsort -unique $MorbidMap($Om,Cy)] set MorbidMap($Om,Gn) [lsort -unique $MorbidMap($Om,Gn)] } return [MorbidMap $Qui $Quoi] } proc MorbidMapFromList {List {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {ListJoinCar ""} {WithinHits ""}} { #rR List peut etre un nom de fichier (avec /), une liste ou un texte avec , #rR Peut etre une liste de numeros OMIM ou un fichier (avec un /) contenant de OmimHits set WithAllHits 1 if {$WithinHits!=""} { set WithAllHits 0 if {[regexp "/" $WithinHits] && [file exists $WithinHits]} { set WithinHits [OmimHitsFromFile $WithinHits "ListOf" "O"] } foreach O $WithinHits { set WithHit($O) 1 } } set WithoutEmpty [regexp -nocase "WithoutEmpty" $Quoi] if {$WithoutEmpty} { regsub -nocase "WithoutEmpty" $Quoi "" Quoi } if {$RecordsJoinCar=="Tab"} { set RecordsJoinCar "\t" } if {[regexp "/" $List] && [file exists $List]} { set L {} foreach Ligne [LesLignesDuFichier $List] { scan $Ligne "%s" G lappend L $G } set List $L } if {[regexp "\," $List]} { set List [split $List ","] } set LeRetour {} foreach Qui $List { set MM [MorbidMap $Qui $Quoi] if { ! $WithAllHits} { #rR j'ai greffe cette verrue pour ne prendre que les O qui sont dans WithinHits #rR on suppose que O se trouve toujours en début (en fait Quoi doit etre O ou OD) set GoodMM {} foreach H $MM { scan $H "%s" O if {[info exists WithHit($O)]} { lappend GoodMM $H } } set Avant [llength $MM]; set Apres [llength $GoodMM] set MM $GoodMM } if {$JoinCar!=""} { set MM [join $MM $JoinCar] } if {$MM=="" && $WithoutEmpty} { continue } set Ligne [list $Qui $MM] if {$RecordsJoinCar!=""} { set Ligne [join $Ligne $RecordsJoinCar] } lappend LeRetour $Ligne } if {$ListJoinCar!=""} { set LeRetour [join $LeRetour $ListJoinCar] } return $LeRetour } proc MorceauxChoisis {ListeDeDepart {LesIllumines ""} {Texte ""}} { global VariableDeRetour set w [NomDe fenetre] toplevel $w -width 1024 if {$Texte!=""} { set FrameMessage "$w.texte" frame $FrameMessage pack $FrameMessage -side top -expand yes set Message "$FrameMessage.message" message $Message -text "$Texte" -width 800 pack $Message } set FrameLisBouLis "$w.lisboulis" frame $FrameLisBouLis pack $FrameLisBouLis -side top -expand yes -fill both set LisBoxDep [LisBox "$FrameLisBouLis.fraDep" $ListeDeDepart $LesIllumines] set FraBou "$FrameLisBouLis.panneau" frame $FraBou pack $FraBou -side left set LisBoxArr [LisBox "$FrameLisBouLis.fraArr"] set Passeur "$FraBou.passeur" button $Passeur -text "--->" -background "green" -width 10 -height 2 bind $Passeur <1> "Passeur $LisBoxDep $LisBoxArr" pack $Passeur set Vide0 "$FraBou.vide0" button $Vide0 -relief "flat" -height 1 pack $Vide0 set Aide "$FraBou.aide" button $Aide -text "Help" -background "blue" -width 6 -height 1 bind $Aide <1> "FaireLire {Select lines in the left window,\n then transfer them to the right window pressing the '--->' button\n\n To reorder in the right window, select a line and press 'Up' or 'Down'\n To remove one line in the right window, select it and press 'Remove sel'\n\n Accept ALL LINES in the RIGHT window by pressing 'Accept'.}" pack $Aide set Vide1 "$FraBou.vide1" button $Vide1 -relief "flat" -height 2 pack $Vide1 set Monteur "$FraBou.monteur" button $Monteur -text " Up ^" -background "lightblue" -width 8 bind $Monteur <1> "Ordonateur $LisBoxArr Up" pack $Monteur set Tombeur "$FraBou.tombeur" button $Tombeur -text "Down v" -background "lightblue" -width 8 bind $Tombeur <1> "Ordonateur $LisBoxArr Down" pack $Tombeur set Vide2 "$FraBou.vide2" button $Vide2 -relief "flat" pack $Vide2 set Killeur "$FraBou.killeur" button $Killeur -text "Remove sel ->" -background "orange" -width 10 bind $Killeur <1> "Ordonateur $LisBoxArr Kill" pack $Killeur set KillAll "$FraBou.killAll" button $KillAll -text "Remove all =>" -background "orange" -width 10 bind $KillAll <1> "Ordonateur $LisBoxArr KillAll" pack $KillAll set Vide3 "$FraBou.vide3" button $Vide3 -relief "flat" pack $Vide3 set Vide4 "$FraBou.vide4" button $Vide4 -relief "flat" pack $Vide4 set Accept "$FraBou.accept" button $Accept -text "Accept ->" -background "green" -width 10 -height 2 bind $Accept <1> "set VariableDeRetour($w) \[$LisBoxArr get 0 end\]" pack $Accept if {[regexp -nocase {Press ('More'|'All')} $Texte]} { set More "$FraBou.more" button $More -text "<- More/Sel/All" -background "yellow" -width 10 bind $More <1> "set VariableDeRetour($w) \[concat \[$LisBoxArr get 0 end\] MorePlease\]" bind $More <2> "set VariableDeRetour($w) \[concat \[$LisBoxArr get 0 end\] Selection\]" bind $More <3> "Illumine \".\" $LisBoxDep" pack $More } set Vide5 "$FraBou.vide5" button $Vide5 -relief "flat" pack $Vide5 set Cancel "$FraBou.cancel" button $Cancel -text "Cancel" -background "red" -width 8 bind $Cancel <1> "set VariableDeRetour($w) {}" pack $Cancel tkwait variable VariableDeRetour($w) set v $VariableDeRetour($w) unset VariableDeRetour($w) catch {destroy $w} return $v } proc MorceauxChoisisAndMore {LesExistants {LesIllumines ""} {Texte ""}} { set LesPossibles $LesExistants set LesBons {} while {1} { set LesBons [MorceauxChoisis $LesPossibles $LesBons "$Texte\nPlease select lines in the left window and press '--->'\n Reorder with 'Up' and 'Down' if necessary.\n Press 'More' if you want to add your own file."] if {$LesBons=={} && [OuiOuNon "Do You want an empty list ?"]} { return {} } if {$LesBons=={} && [OuiOuNon "Do You want to select your own files ?"] || [lindex $LesBons end]=="MorePlease"} { if {[OuiOuNon "Do You want to paste a selection ?"]} { set Sel [selection get] set LesPersos [split $Sel "\n"] LConcat LesPossibles $LesPersos } else { if {[OuiOuNon "Do we add flat files (no directories) ?"]} { set Perso [ButineArborescence "All" "."] if {$Perso!=""} { lappend LesPossibles $Perso } } else { set Perso [ChoixDuRepertoire] if {$Perso==""} { continue } set LesPerso [glob -nocomplain -type f "$Perso/*"] if {$LesPerso!=""} { LConcat LesPossibles $LesPerso } } } continue } elseif {[lindex $LesBons end]=="Selection"} { FaireLire "Enter a regular expression to select some of these files" set ExpReg [Entre "YOURTEXT"] set LesNouveauxPossibles {} foreach Possi $LesPossibles { if { ! [regexp $ExpReg $Possi]} { continue } lappend LesNouveauxPossibles $Possi } set LesPossibles $LesNouveauxPossibles continue } else { break } } return $LesBons } proc Morph2Affy {} { set ListeMorph [ListeMorphineExtAUp_QPCR] set ListeMorph [ListeMorphineExtADown_QPCR] foreach MORPH $ListeMorph { Espionne "$MORPH\t[AffymetrixAccess $MORPH]" } return "" } proc MotOuExprNormPourRegexp {MotOuExpr} { return [regsub -all -nocase {[^a-z0-9]} [NormaliseDEOuMotOuExpr $MotOuExpr] "."] } proc MotOuExprNormPourSRS {MotOuExpr} { return [regsub -all -nocase {[^a-z0-9]} [NormaliseDEOuMotOuExpr $MotOuExpr] "?"] } proc MotifMapping {Ou Qui Quoi} { global MotMap #rR Permet d'interroger les Motifs Mappes ... #rR à ne pas confondre avec EleGen ou AllEleGen ... #rR MotifMapping F ListOf Gn #rR MotifMapping X ListOf Gn #rR MotifMapping 6 ListOf Gn #rR MotifMapping X Nb Motif #rR MotifMapping 8 ListOf NbMotifPerId #rR MotifMapping X 3_Motifs ListOfId #rR etc. voir ci-dessous if {[regexp -nocase "^F" $Ou]} { set Ou "F" } else { set Ou [AnnotType $Ou T] } if {$Ou==""} { return "usage: MotifMapping X ListOf Gn or MotifMapping Intron ADAM30 ListOfD" } if {[info exists MotMap($Ou,$Qui,$Quoi)]} { return $MotMap($Ou,$Qui,$Quoi) } if {[info exists MotMap($Ou,"EstCharge")]} { return "" } set MotMap($Ou,"EstCharge") 1 if {$Ou=="F"} { set FichierMotifsMapping "[AnnotRep]/MotifsMapping.txt" } else { set FichierMotifsMapping "[AnnotRep]/MotifsMapping$Ou.txt" } if {[FileAbsent $FichierMotifsMapping]} { set FichierMotifsMapping [CreateMotifsMapping] } #Chr01 41215 41244 30 1 41082 64090 1 41082 64090 chr1 41082 64090 23009 * intergenic:2 NA NA NA hg19_genes_intergenic set Ieme 0 foreach Ligne [lrange [LesLignesDuFichier $FichierMotifsMapping] 0 end] { incr Ieme #if {$Ieme%10==1} { Espionne $Ligne } set LesMots [LesMotsDeLaLigne $Ligne] foreach K {Slash T2 DO2 FO2 C2 Start2 Stop2 CC2 SS2 FF2 Length2 Brin2 Id2 Ucsc2 Gi2 Gn2 Type2} { set $K "" } if {$Ou=="F"} { lassign $LesMots Chr D F L T1 DO1 FO1 C1 Start1 Stop1 CC1 SS1 FF1 Length1 Brin1 Id1 Ucsc1 Gi1 Gn1 Type1 Slash T2 DO2 FO2 C2 Start2 Stop2 CC2 SS2 FF2 Length2 Brin2 Id2 Ucsc2 Gi2 Gn2 Type2 } else { lassign $LesMots Chr D F L T1 DO1 FO1 CC1 SS1 FF1 Length1 Brin1 Id1 Ucsc1 Gi1 Gn1 Type1 Slash T2 DO2 FO2 C2 Start2 Stop2 CC2 SS2 FF2 Length2 Brin2 Id2 Ucsc2 Gi2 Gn2 Type2 set C1 $T1 set Start1 $DO1 set Stop1 $FO1 } lappend MotMap($Ou,$T1,ListOf,Id) $Id1 lappend MotMap($Ou,ListOf,Id) $Id1 lappend MotMap($Ou,$Id1,ListOfD) $D lappend MotMap($Ou,$Id1,ListOfF) $F set MotMap($Ou,$Id1,Strand) $Brin1 incr MotMap($Ou,Nb,Motif) #if {$Ieme%10==1} { Espionne "Mots $LesMots" } if {$Gn1!="" && $Gn1!="NA"} { lappend MotMap($Ou,$T1,ListOfGn) $Gn1 lappend MotMap($Ou,ListOf,Gn) $Gn1 lappend MotMap($Ou,$Gn1,ListOfD) $D lappend MotMap($Ou,$Gn1,ListOfF) $F set MotMap($Ou,$Gn1,Strand) $Brin1 } if {0 && $Slash!=""} { if {0} { Espionne $Ligne foreach K {Chr D F L T1 DO1 FO1 C1 Start1 Stop1 CC1 SS1 FF1 Length1 Brin1 Id1 Ucsc1 Gi1 Gn1 Type1 Slash T2 DO2 FO2 C2 Start2 Stop2 CC2 SS2 FF2 Length2 Brin2 Id2 Ucsc2 Gi2 Gn2 Type2} { Espionne "$K [set $K]" } exit } if {$Gn2!="NA"} { lappend MotMap($Ou,ListOf,Gn) $Gn2 } lappend MotMap($Ou,$Gn2,ListOfD) $D lappend MotMap($Ou,$Gn2,ListOfF) $F } } foreach T [AnnotType ListOf T] { if { ! [info exists MotMap($Ou,$T,ListOfGn)]} { set MotMap($Ou,$T,ListOfGn) {} } if { [info exists MotMap($Ou,$T,ListOfGn)]} { set MotMap($Ou,$T,ListOfGn) [lsort -unique $MotMap($Ou,$T,ListOfGn)] } if { ! [info exists MotMap($Ou,$T,ListOfId)]} { set MotMap($Ou,$T,ListOfId) {} } if { [info exists MotMap($Ou,$T,ListOfId)]} { set MotMap($Ou,$T,ListOfId) [lsort -unique $MotMap($Ou,$T,ListOfId)] } } if { ! [info exists MotMap($Ou,ListOf,Gn)]} { set MotMap($Ou,ListOf,Gn) {} } set MotMap($Ou,ListOf,Gn) [lsort -unique $MotMap($Ou,ListOf,Gn)] set MotMap($Ou,Nb,Gn) [llength $MotMap($Ou,ListOf,Gn)] foreach Gn $MotMap($Ou,ListOf,Gn) { set N [llength $MotMap($Ou,$Gn,ListOfD)] set MotMap($Ou,$Gn,NbMotif) $N lappend MotMap($Ou,ListOf,NbMotifPerGn) $N lappend MotMap($Ou,${N}_Motifs,ListOfGn) $Gn } if { ! [info exists MotMap($Ou,ListOf,NbMotifPerGn)]} { set MotMap($Ou,ListOf,NbMotifPerGn) {} } set MotMap($Ou,ListOf,NbMotifPerGn) [lsort -integer -unique $MotMap($Ou,ListOf,NbMotifPerGn)] if { ! [info exists MotMap($Ou,ListOf,Id)]} { set MotMap($Ou,ListOf,Id) {} } set MotMap($Ou,ListOf,Id) [lsort -unique $MotMap($Ou,ListOf,Id)] set MotMap($Ou,Nb,Id) [llength $MotMap($Ou,ListOf,Id)] foreach Id $MotMap($Ou,ListOf,Id) { set N [llength $MotMap($Ou,$Id,ListOfD)] set MotMap($Ou,$Id,NbMotif) $N lappend MotMap($Ou,ListOf,NbMotifPerId) $N lappend MotMap($Ou,${N}_Motifs,ListOfId) $Id } if { ! [info exists MotMap($Ou,ListOf,NbMotifPerId)]} { set MotMap($Ou,ListOf,NbMotifPerId) {} } set MotMap($Ou,ListOf,NbMotifPerId) [lsort -integer -unique $MotMap($Ou,ListOf,NbMotifPerId)] return [MotifMapping $Ou $Qui $Quoi] } proc MotifToDEPSTToHydrophobToScore {Nom} { set FichierPF "[RepertoireDuGenome]/pestfind/pest$Nom.embl" if {![file exists $FichierPF]} {return} set Texte "" foreach Ligne [LesLignesDuFichier $FichierPF] { set Ligne [string trim $Ligne] if {[regexp "Potential PEST motif" $Ligne]} { set n 0 set Vu 1 continue } if {[info exists Vu] && $n<4} { incr n if {[regexp {\:} $Ligne]} { set nb 0 foreach Element [split $Ligne ":"] { incr nb #Espionne $Element if {$nb==2} {set Ligne $Element} } } append Texte "$Ligne\t" } } return $Texte } proc MotifToDEPSTToHydrophobToScorePourTous {} { set Texte "" foreach Nom [ListeDesPABs] { set Resultats [MotifToDEPSTToHydrophobToScore $Nom] append Texte "$Nom\t$Resultats\n" } return $Texte } proc Moucharde {} { return set f [open "~/mouchard" w] puts $f [info nameofexecutable] puts $f [package require http] if {[catch {set PTcl [package require Tcl]} MTcl]} { puts $f "No Tcl Package : I got message\n$MTcl" } else { puts $f "Package Tcl $PTcl" } # if {[catch {set PTk [package require Tk]} MTk]} { # puts $f "No Tk Package : I got message\n$MTk" # } else { # puts $f "Package Tk $PTk" # } close $f } proc MounirDuBlast {NomOuFichier {FichierSortie ""} {SeuilExpect ""} {MaxListe ""}} { if {$SeuilExpect==""} { set SeuilExpect 0.001 } if {$MaxListe==""} { set MaxListe 9999 } if {$FichierSortie==""} { set FichierSortie "GetText" } set Nom [file tail $NomOuFichier] if {[EstUnPAB $NomOuFichier]} { set Fichier "[RepertoireDuGenome]/blastp/$Nom" } else { set Fichier $NomOuFichier } DecortiqueBlast $Fichier $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId PN $lPN { if {$PN>$SeuilExpect} { break } set PNde($BanqueId) $PN } set SortieMounir [exec MounirDuBlastP < $Fichier] set LesElus {} set n 0 foreach Ligne [split $SortieMounir "\n"] { if {[incr n] > $MaxListe} { break } scan $Ligne "%s" BanqueId if { ! [info exists PNde($BanqueId)]} { break } set PN $PNde($BanqueId) if {$PN>$SeuilExpect} { break } lappend LesElus $BanqueId } if {$FichierSortie=="GetList"} { return $LesElus } set LeReduit [BlastReduit $Fichier $LesElus] set Reduit [join $LeReduit "\n"] if {$FichierSortie=="GetText"} { return $Reduit } if {$FichierSortie=="Show"} { return [AfficheVariable $Reduit "AvecSegAlignement" "MounirReducedOf_/$Nom"] } return [Sauve $Reduit dans $FichierSortie] } proc Mouse {quoi x y win} { global pgl cx cy Rad switch $quoi { "RotXY" { # rotation X et Y if { abs($cx-$x) < 5 && abs($cy-$y) < 5 } {return} glMatrixMode GL_MODELVIEW set mvm [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvm #set mvList [tcl3dVectorToList $mvmatrix 16] #glRotatef [expr {$cy-$y}] [lindex $mvList 0] [lindex $mvList 4] [lindex $mvList 8] glRotatef [expr {$cy-$y}] [$mvm get 0] [$mvm get 4] [$mvm get 8] glGetDoublev GL_MODELVIEW_MATRIX $mvm #set mvList [tcl3dVectorToList $mvmatrix 16] #glRotatef [expr {$cx-$x}] [lindex $mvList 1] [lindex $mvList 5] [lindex $mvList 9] glRotatef [expr {$cx-$x}] [$mvm get 1] [$mvm get 5] [$mvm get 9] } "TraXY" { if { $cx == $x && $cy == $y } {return} # empiric constant 1.5 set rx [expr {1.5*$Rad*($x-$cx)/$pgl(width)}] set ry [expr {1.5*$Rad*($y-$cy)/$pgl(height)}] set pgl(yTra) [expr {$pgl(yTra) - $ry}] set pgl(xTra) [expr {$pgl(xTra) + $rx}] update Update3DMatrices } } set cx $x ; set cy $y $win postredisplay return } proc MouseFromHuman {{Qui ""} {Quoi ""}} { if {$Qui==""} { set Qui "ListOf" } if {[string equal -nocase $Qui "ListOf"]} { if {[string equal -nocase $Quoi "HumanHeader"]} { return [HGNC ListOf Header] } if {[string equal -nocase $Quoi "MouseHeader"]} { return [MGI ListOf Header] } } set H [HGNC $Qui HGNC_ID] Espionne "H $H" set M [MGIHGNC $H MGIID] Espionne "M $M" if {$M==""} { set M [MGIHGNC $Qui MGIID] } return [MGI $M $Quoi] } proc MouseSynonyms {G} { set M [MGI $G "MgiId"] if {$M==""} { return {} } set O [MGI $M "GeneName"] set All [concat [list $O] [MGI $M "Synonyms"]] set All [ListeSansDoublon $All] return $All } proc MoveLesReMask {} { foreach F [glob -nocomplain *] { regsub ".remask" $F ".rm" D Espionne "file rename $F ../nucmask/$D" file rename $F "../nucmask/$D" } } proc MoveToPos {w x y} { set n [bufferNTimes "empty"] if {! $y} { # x scrolling CoupleX scroll [expr {$x*$n}] units } if {! $x} { # y scrolling CoupleY scroll [expr {$y*$n}] units } update idletasks return } proc Moyenne {l} { set n [llength $l] set m 0. foreach e $l { set m [expr {$m + $e}] } return [expr {$m/$n}] } proc MoyenneDeLaListe {Liste} { set total 0 set nb [llength $Liste] foreach elmt $Liste { set total [expr $total + $elmt] } set Moy [expr $total/$nb] return $Moy } proc MoyenneDesFoldDansCluster {Jour Condition1 sur Condition2 {PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierOut "[RepertoireDuGenome]/fiches/MoyenneDesFoldParCluster" set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" if {![file exists $Fichier]} {return} set LesClusters {} foreach Nom $LesNoms { set Fold [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom PointTemporel $Jour Fold $Condition1 sur $Condition2] set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {![info exists Tab($Cluster,SommeFold)]} { lappend LesClusters $Cluster set Tab($Cluster,SommeFold) 0 set Tab($Cluster,n) 0 } incr Tab($Cluster,n) set Tab($Cluster,SommeFold) [expr [set Tab($Cluster,SommeFold)] + $Fold] } set LesValeurs {} foreach Cluster [lsort -unique -integer $LesClusters] { set Somme [set Tab($Cluster,SommeFold)] set n [set Tab($Cluster,n) ] set Moyenne [expr $Somme / $n] lappend LesValeurs [list $Cluster "$Jour $Condition1 sur $Condition2" $Moyenne] } return $LesValeurs } proc MoyenneDesPourcentages {} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/pourcentageidentite-orga"] { scan $Ligne "%s %s %d" Nom Orga PI if { [info exists Cumul($Orga)] } { incr Cumul($Orga) $PI incr Nombre($Orga) } else { set Cumul($Orga) 0 set Nombre($Orga) 0 } } foreach {Orga ValCumul} [array get Cumul] { lappend Liste "$Orga [expr $ValCumul/[set Nombre($Orga)]]" } set ListeTriee [lsort -decreasing -command CompareLesIntegers $Liste] foreach Texte $ListeTriee { puts "Moyenne des pourcentages d'identite pour $Texte" } } proc MoyenneEcartMinMaxCumulLong {Liste {GetWhat ""} {ExprFunction ""}} { return [FromList $Liste $GetWhat $ExprFunction] } proc MrnaRefseqUcscMouse {{Qui ""} {Quoi ""}} { global MrnaRefseqUcscMouse Wup "Il y 2 colonnes Ab et Nm" if {[info exists MrnaRefseqUcscMouse($Qui,$Quoi)]} {return $MrnaRefseqUcscMouse($Qui,$Quoi)} if {[info exists MrnaRefseqUcscMouse("EstCharge")]} {return ""} set MrnaRefseqUcscMouse("EstCharge") 1 if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {$Quoi==""} { set Quoi "Nm" if {[regexp "^NM_" $Qui]} { set Quoi "Ab" } } set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/mrnaRefseq.txt" set LesLignes [LesLignesDuFichier $Fichier] set MrnaRefseqUcscMouse(ListOf,headers) [list "Ab" "Nm"] set OnAttendEntete 1 foreach Ligne $LesLignes { if {$OnAttendEntete} { set OnAttendEntete 0 continue } set LesMots [split $Ligne "\t"] set Ab [lindex $LesMots 0] set Nm [lindex $LesMots 1] lappend MrnaRefseqUcscMouse(ListOf,Nm) $Nm lappend MrnaRefseqUcscMouse(ListOf,Ab) $Ab #liste des Nms correspondant a un Ab lappend MrnaRefseqUcscMouse($Ab,Nm) $Nm #liste des Abs correspondant a un Nm lappend MrnaRefseqUcscMouse($Nm,Ab) $Ab } set MrnaRefseqUcscMouse(ListOf,Nm) [lsort -unique $MrnaRefseqUcscMouse(ListOf,Nm)] set MrnaRefseqUcscMouse(ListOf,Ab) [lsort -unique $MrnaRefseqUcscMouse(ListOf,Ab)] return [MrnaRefseqUcscMouse $Qui $Quoi] } proc Msf2MsfOrg {FichierMsf FichierSortie} { set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] set listTaxId [list] foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a set a [string toupper $a] regsub ">SPT_" $a "" a regsub ">SW_" $a "" a regsub ">" $a "" a regsub "_SUB_" $a "" a set a [lindex [split $a "."] 0] if {[regexp "^ENS" $a]} { set Ens [string range $a 0 5] set GenreEspece [InterrogeCorresEnsEtOS $Ens OS] if {$GenreEspece==""} { set GenreEspece [string range $Ens 3 end] } else { set liste [split $GenreEspece " "] set GenreEspece "[string range [lindex $liste 0] 0 2][string range [lindex $liste 1] 0 2]" } } else { set GenreEspece [OrgaDuAccess $a] if {$GenreEspece=="Inconnu inconnu"} { set GenreEspece "" } if {$GenreEspece!=""} { set liste [split $GenreEspece " "] set GenreEspece "[string range [lindex $liste 0] 0 2][string range [lindex $liste 1] 0 2]" } } if {$GenreEspece!=""} { lappend TFAFin ">$a.$GenreEspece" } else { lappend TFAFin ">$a" } } else { lappend TFAFin $Ligne } } #EcritFichier $TFAFin $FichierSortie CreeLeMSFduTFAs $TFAFin $FichierSortie #EcritFichier $Msf $ exit } proc Msf2MsfOrgN {FichierMsf FichierSortie} { set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] set listTaxId [list] Espionne "Msf2MsfOrgN" foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a set a [string toupper $a] regsub ">SPT_" $a "" a regsub ">SW_" $a "" a regsub ">" $a "" a regsub "_SUB_" $a "" a set a [lindex [split $a "."] 0] if {[regexp "^ENS" $a]} { set Ens [string range $a 0 5] set GenreEspece [InterrogeCorresEnsEtOS $Ens OS] if {$GenreEspece==""} { set GenreEspece [string range $Ens 3 end] } else { set liste [split $GenreEspece " "] set GenreEspece "[string range [lindex $liste 0] 0 2][string range [lindex $liste 1] 0 2]" } } else { set GenreEspece [OrgaDuAccess $a] if {$GenreEspece=="Inconnu inconnu"} { set GenreEspece "" } if {$GenreEspece!=""} { set liste [split $GenreEspece " "] set GenreEspece "[string range [lindex $liste 0] 0 2][string range [lindex $liste 1] 0 2]" } } if {$GenreEspece!=""} { lappend TFAFin ">$a.$GenreEspece" } else { lappend TFAFin ">$a" } } else { lappend TFAFin $Ligne } } #EcritFichier $TFAFin $FichierSortie CreeLeMSFduTFAs $TFAFin $FichierSortie #EcritFichier $Msf $ } proc Msf2MsfOrgN2 {FichierMsf FichierSortie} { #append FichierSortie "[RepertoireDuGenome]/msfOrg/$FichierSortie" set FichierSortie "[RepertoireDuGenome]/msfOrg/$FichierSortie" set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] set listTaxId [list] Espionne "Msf2MsfOrgN" foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a set a [string toupper $a] regsub ">SPT_" $a "" a regsub ">SW_" $a "" a regsub ">" $a "" a regsub "_SUB_" $a "" a set a [lindex [split $a "."] 0] if {[regexp "^ENS" $a]} { set Ens [string range $a 0 5] set GenreEspece [InterrogeCorresEnsEtOS $Ens OS] if {$GenreEspece==""} { set GenreEspece [string range $Ens 3 end] } else { set liste [split $GenreEspece " "] set GenreEspece "[string range [lindex $liste 0] 0 2][string range [lindex $liste 1] 0 2]" } } else { set GenreEspece [OrgaDuAccess $a] if {$GenreEspece=="Inconnu inconnu"} { set GenreEspece "" } if {$GenreEspece!=""} { set liste [split $GenreEspece " "] set GenreEspece "[string range [lindex $liste 0] 0 2][string range [lindex $liste 1] 0 2]" } } if {$GenreEspece!=""} { lappend TFAFin ">$a.$GenreEspece" } else { lappend TFAFin ">$a" } } else { lappend TFAFin $Ligne } } #EcritFichier $TFAFin $FichierSortie CreeLeMSFduTFAs $TFAFin $FichierSortie #EcritFichier $Msf $ } proc Msf2MsfOrgPourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/msf} set r [glob -directory $directory *] foreach fichier $r { Espionne "fichier traiter: $fichier" set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } set newf $fichier append newf "_Org" Espionne $newf Msf2MsfOrgN $fichier $newf FinPasTouche $f } } proc Msf2MsfOrgPourTous2 {{directory ""}} { if { ! [file exists "msfOrg"]} { File mkdir msfOrg } if {$directory==""} {set directory [RepertoireDuGenome]/msf} set r [glob -directory $directory *] foreach fichier $r { Espionne "fichier traiter: $fichier" set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } #set newf $fichier set newf $f append newf "_Org" Espionne $newf Msf2MsfOrgN2 $fichier $newf exec rm $fichier FinPasTouche $f } } proc Msf2TfaTaxId {FichierMsf FichierTfa} { set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] set listTaxId [list] foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a set a [string toupper $a] regsub ">SPT_" $a "" a regsub ">SW_" $a "" a regsub ">" $a "" a set TaxId [TaxIdDuAccess $a] lappend listTaxId $TaxId if {[info exists DejaVu($TaxId)]} { set nb [expr [set DejaVu($TaxId)]+1] set DejaVu($TaxId) $nb set TaxId [concat $TaxId _ $nb] regsub -all " " $TaxId "" TaxId } else { set DejaVu($TaxId) 1 } lappend TFAFin ">$TaxId $a" } else { lappend TFAFin $Ligne } } EcritFichier $TFAFin $FichierTfa exit } proc MsfAAFromMsf3d {FiMsf3d FiMsfAA} { set NombreDeSequences [DecortiqueUnMSF $MSF3d LesSeq3d TabSeq3d] set LeTfasAA {} foreach NomSeq3d $LesSeq3d { set FiMod [FichierModAssocie $NomSeq3d $FiMsf3d] if {$FiMod==""} { continue } ScanLaListe [Seq3dAndA5From $FiMod] Seq3d LesA5 set GappedSeq3d [set TabSeq3d($NomSeq3d)] set GappedSeqAA [GappedSeqAAFromGappedSeq3d $GappedSeq3d $LesA5 $Seq3d] regsub -all -nocase {[^a-z]} $GappedSeqAA "-" GappedSeqAA lappend LeTfasAA [SequenceFormatTFA $GappedSeqAA $NomSeq3d "protbrut"] } return [CreeLeMSFDuTFAs [join $LeTfasAA "\n"] $FiMsfAA] } proc MsfDesMAFFTPourTous {} { set RepMsfMafft "[RepertoireDuGenome]/msfmafft" if { ! [file exists $RepMsfMafft]} { file mkdir $RepMsfMafft } set RepMafft "[RepertoireDuGenome]/mafft" foreach Nom [ListeDesPABs] { set InFile "$RepMafft/$Nom" if { ! [file exists $InFile]} { continue } set OutFile "$RepMsfMafft/$Nom" ConvertToMsf $InFile $OutFile Espionne [exec ls -l $OutFile] } } proc MsfDesTFAsPourSapPourTous {} { set RepMsfPourSap "[RepertoireDuGenome]/msfpoursap" if { ! [file exists $RepMsfPourSap]} { file mkdir $RepMsfPourSap } set RepTFAsPourSap "[RepertoireDuGenome]/tfaspoursap" foreach Nom [ListeDesPABs] { set InFile "$RepTFAsPourSap/$Nom" if { ! [file exists $InFile]} { continue } set OutFile "$RepMsfPourSap/$Nom" ConvertToMsf $InFile $OutFile Espionne [exec ls -l $OutFile] } } proc MsfLeon {Nom {Quoi ""}} { if {$Quoi==""} { set Quoi "Text" } set FichierLeon "[RepertoireDuGenome]/msfleon/$Nom" if {$Quoi=="FileName"} { return $Fichier } if { ! [file exists $FichierLeon]} { return "" } if {$Quoi=="Text"} { return [ContenuDuFichier $FichierLeon] } if {$Quoi=="Lines"} { return [LesLignesDuFichier $FichierLeon] } if {$Quoi=="NorMD"} { } } proc MsfOfFamiliarOrganisms {Nom} { set FichierMSF "[RepertoireDuGenome]/msf/$Nom" if { ! [file exists $FichierMSF]} { return "" } set MSF [ContenuDuFichier $FichierMSF] set LesAccess [FamiliarOrganismsInMSF $Nom] if {$LesAccess==""} { return "" } set PetitMSF [MSFSelection $MSF $LesAccess "In"] return $PetitMSF } proc MsfOrg2Msf {FichierMsf FichierSortie} { set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] set listTaxId [list] foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a set a [string toupper $a] set a [lindex [split $a "."] 0] lappend TFAFin "$a" } else { lappend TFAFin $Ligne } } CreeLeMSFduTFAs $TFAFin $FichierSortie } proc MsfOrg2Msf2 {FichierMsf FichierSortie} { set FichierSortie "[RepertoireDuGenome]/msf/$FichierSortie" set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] set listTaxId [list] foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a set a [string toupper $a] set a [lindex [split $a "."] 0] lappend TFAFin "$a" } else { lappend TFAFin $Ligne } } Espionne "FichierMsf: $FichierMsf; FichierSortie: $FichierSortie" CreeLeMSFduTFAs $TFAFin $FichierSortie } proc MsfOrg2MsfPourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/msf} set r [glob -directory $directory *] if { ! [file exists "msfOrg"]} { File mkdir msfOrg } foreach fichier $r { if {![regexp {_Org} $fichier]} { continue } set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } #modification set newf [lindex [split $fichier "_"] 0] #append newf "_simple" #Espionne $newf MsfOrg2Msf $fichier $newf #ajouter une commande exec pour mettre les msf avec _Org dans un autre fichier msf msfOrg exec mv $fichier [RepertoireDuGenome]/msfOrg/. FinPasTouche $f } } proc MsfOrg2MsfPourTous2 {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/msfOrg} set r [glob -directory $directory *] foreach fichier $r { if {![regexp {_Org} $fichier]} { continue } set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } #modification set newf [lindex [split $fichier "_"] 0] set nn [split $newf "/"] set newf [lindex $nn [llength $n]-1] #append newf "_simple" #Espionne $newf MsfOrg2Msf2 $fichier $newf #ajouter une commande exec pour mettre les msf avec _Org dans un autre fichier msf msfOrg #exec mv $fichier [RepertoireDuGenome]/msfOrg/. FinPasTouche $f } } proc MsfToHtml {{FichierMsf ""} {FichierHtml ""}} { if {$FichierMsf==""} { set FichierMsf [ButineArborescence "All" "."] } if {$FichierMsf==""} { return "" } if {$FichierHtml=="-"} { set RetourNom 0 set RetourTexte 1 set FichierHtml "[TmpFile].html" } if {$FichierHtml==""} { set RetourNom 1 set RetourTexte 0 set FichierHtml [FichierPourSaveAs [TmpFile].html] } set FichierDump "[TmpFile].dumpordali" exec ordali -MSF $FichierMsf -Batch -NoCheckSeq -Groupe secator -Dump $FichierDump -Run -Exit if { ! [file exists $FichierDump]} { return "Problem" } HtmlOrdali $FichierDump $FichierHtml if {$RetourTexte} { return [ContenuDuFichier $FichierDump] } if {$RetourNom} { return $FichierHtml } return } proc MsfToTfa {FichierMsf {FichierTfa ""}} { set GetWhat "GetFile" set DeleteTfa 0 set DeleteMsf 0 if {[regexp "\n" $FichierMsf]} { set FichierMsf "[TmpFile].msf" set DeleteMsf 1 } if {$FichierTfa==""} { regsub -nocase {\.msf$} $FichierMsf "" FichierTfa append FichierTfa ".tfa" } if {$FichierTfa=="GetTfa"} { set GetWhat "GetTfa" set FichierTfa "[TmpFile].tfa" set DeleteTfa 1 } exec clustalw $FichierMsf -convert -output=FASTA -outfile=$FichierTfa set Retour $FichierTfa if {$FichierTfa=="GetTfa"} { set Retour [ContenuDuFichier $FichierTfa] } if {$DeleteTfa} { file delete $FichierTfa } if {$DeleteMsf} { file delete $FichierMsf } return $Retour } proc MspBiblioGrowth {{GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetCouplesDates" } set LesRecords [SqlExecForDatabase "MiSynPat" "select datem,datey,pk_biblio,accepted,pmid from biblio where accepted=1" "GetListOfList"] set LesRecords [lsort -command TriParMoisAnnee $LesRecords] set LesMA {} set FirstA 2007 set FirstM 0 set MaxSince 0 foreach Record $LesRecords { lassign $Record M A P V Pmid Espionne "$Record" if {$V<1} { continue } if {$A==""} { set A 2012 } if {$M==""} { set M "Jun" } set N [Month1to12 $M] # if {$FirstA==""} { set FirstA $A ; set FirstM $N } set Since [expr ($A-$FirstA)*12 + $N-$FirstM] set MaxSince [Maxi $MaxSince $Since] incr Occu($Since) set DateDe($Since) "$A-[format %2.2d $N]" # set DateDe($Since) "$M-$A" } set LesSince {} foreach Since [NombresEntre 0 $MaxSince] { if { ! [info exists Occu($Since)]} { set Occu($Since) 0 } lappend LesSince $Since } set Cumul 0 set LesCouplesDates {} foreach Since $LesSince { lappend LesOccu $Occu($Since) incr Cumul $Occu($Since) lappend LesCouples "\[$Since, $Cumul\]" if {[info exists DateDe($Since)]} { lappend LesCouplesDates "\['$DateDe($Since)', $Cumul\]" } lappend LesCumul $Cumul } EspionneL $LesCouplesDates set CouplesDates [join $LesCouplesDates ","] if {$GetWhat=="GetCouplesDates"} { return $CouplesDates } set Couples [join $LesCouples ","] Espionne "\[\[$CouplesDates\]\]" Espionne "\[\[$Couples\]\]" Espionne $LesSince Espionne $LesOccu return [Graphe $LesSince $LesCumul] } proc MspModule {{Qui ""} {Quoi ""} {Quid ""}} { return [MiSynPatStructuralModulesForDatabase $Qui $Quoi $Quid "GetIt"] } proc MspRuns {} { set LeStatus {} set Url "http://misynpat.org/misynpat/" set Top [FromProtUrl $Url 2316apriseparcoeur 1623100Raphael] if {$Top!=[ContenuDuFichier "/home/ripp/msp/HtmlModeles/Top.html"]} { # Espionne "Merde Top" lappend LeStatus 0 } else { # Espionne "Ok Top" lappend LeStatus 1 } set Url "http://misynpat.org/misynpat/ConservationDesMutationsEtStat.rvt?name=DARS2" set Mut [FromProtUrl $Url 2316apriseparcoeur 1623100Raphael] if {$Mut!=[ContenuDuFichier "/home/ripp/msp/HtmlModeles/Mut.html"]} { # Espionne "Merde Mut" lappend LeStatus 0 } else { # Espionne "Ok Mut" lappend LeStatus 1 } set Status [join $LeStatus ""] if {[regexp "0" $Status]} { send_simple_message "raymond.ripp@unistra.fr" localhost "MspRuns with status $Status" "hihi" "misynpat@lbgi.fr" } return "MspRuns with status $Status" } proc MultiAlignePlusieursAby {Aligneur Selection} { foreach FichierBlast [split $Selection "\n"] { set MSF [AligneLesHomologuesDuBlast $Aligneur $FichierBlast] if { $MSF == "" } { Warne "Il n'y a pas de sequences a aligner dans $FichierBlast" } else { Warne "Copie en $MSF" } } } proc MultiPro {} { after 1000 exec gscope IllustreLeBlast "[RepertoireDuGenome]/blastp/PGS001" & after 1200 AfficheVariable coucou5 FaireLire Salut after 10000 AfficheVariable coucou10 FaireLire Cava } proc MultiZ {MAFFile1 MAFFile2 MultiZFile {v 0} {R 30} {M 1}} { ### Execution de multiZ entre deux fichiers maf (Multiple Alignment Format) ### # !!! MultiZ aligne les deux fichiers maf # # chaque fichier maf doit avoir au top la meme sequence de reference!!! # Espionne "MultiZ ..." if {![file exists $MAFFile1]} {Espionne "MAFFile1: $MAFFile1 does not exists" ; return} if {![file exists $MAFFile2]} {Espionne "MAFFile2: $MAFFile2 does not exists" ; return} #set Commande "exec [PATH multiz] R=$R M=$M $MAFFile1 $MAFFile2 $v out1 out2 $MultiZFile" #set Commande "exec [PATH multiz] R=$R M=$M $MAFFile1 $MAFFile2 $v > $MultiZFile" set Commande "exec multiz R=$R M=$M $MAFFile1 $MAFFile2 $v > $MultiZFile" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $MultiZFile } proc MultipleProbeset {} { foreach P [AffyAnno ListOf Index] { set GeneChipArray [AffyAnno $P "GeneChip_Array"] if {[regexp { \-or\- } $GeneChipArray]} { Espionne "$P $GeneChipArray" } } } proc MultiplesSujetsDesP {} { foreach P [Oli "LaListeMerci"] { set LesSujets [Oli $P Subjects] set LesSujetsTries [ListeSansDoublon $LesSujets] if {[llength $LesSujets]!=[llength $LesSujetsTries]} { set Sujets [join $LesSujets " "] set SujetsTries [join $LesSujetsTries " "] set TFA [Oli $P TFA] regsub $Sujets $TFA $SujetsTries New FaireLire "$TFA\n$New" # Sauve $New dans "[RepertoireDuGenome]/oligos/$P.tfa" } } exit } proc MutantsDeYann {} { foreach Ligne [LesLignesDuFichier "MutantsAFaire"] { if {$Ligne==""} { set Alias "" ; continue } scan $Ligne "%s" Mot if {$Alias==""} { set Alias $Mot set PGS [NomDuAlias $Alias] set LesCodes {} foreach Mutant [LesMutantsDe $PGS Names] { set InfoMute [ExtraitInfo $Mutant "Muted"] set LesMots [split $InfoMute " "] set Code [lindex $LesMots end] set AliasLu [lindex $LesMots end-1] if {$AliasLu==$Alias} { lappend LesCodes $Code set PGSDuCode($Code) $Mutant } } continue } set Code $Mot if {[info exists PGSDuCode($Code)]} { set Mut $PGSDuCode($Code) Espionne "$Code $Mut [Alias $Mut] [ExtraitInfo $Mut Muted]" } else { regsub {PGS0*} $PGS "" N incr N 1000 while 1 { set Mut "PGS$N" if {[FileAbsent "[RepertoireDuGenome]/nuctfa/$Mut"] && ! [info exists EstNouveau($Mut)]} { break } incr N 300 } set EstNouveau($Mut) 1 lappend AFaire "$PGS $Mut $Code" } } Espionne [SauveLesLignes $AFaire dans MutantsAFaire.lst] } proc MutateSequence {{PAB ""} {CodeDeMutation ""} {Extension ""} {PABMute ""}} { while {$PAB==""} { FaireLire "Please enter the [PreFixe] to mutate." set PAB [Entre "[PreFixe]"] if {[EstUnPAB $PAB]} { break } if {$PAB=="" && [OuiOuNon "Do I cancel MutateSequence ?"]} { return "" } } if {$CodeDeMutation==""} { FaireLire "Please enter the codes for mutation\n \nF602E\nF602AP S455T R665W\nF602X\nF602*\nFPA602RW\nX55FRAP\n..." set CodeDeMutation [Entre "F602E"] } if {$PABMute==""} { regsub -nocase -all {[A-Z]} $PAB "" Numero set Numero [Base10 $Numero] set NumeroMute [expr $Numero+1000] set PABMute [format "%s%3.3d" [PreFixe] $NumeroMute] while { ! [OuiOuNon "Do I use $PABMute as mutant name"]} { set PABMute [Entre $PABMute] } } set FichierNucTfaMute "[RepertoireDuGenome]/nuctfa/$PABMute" set FichierProtTfaMute "[RepertoireDuGenome]/prottfa/$PABMute" set OldPABMute "" while {[file exists $FichierNucTfaMute]} { FaireLire "A mutant of $PAB already exists ($PABMute)\n Please enter an other number. \n (or the same to overwrite; or an empty string to skip)" set OldPABMute $PABMute set PABMute [Entre $PABMute] if {$PABMute=="" && [OuiOuNon "Do I skip creation of $PABMute ?"]} { return "" } if {$PABMute==$OldPABMute && [OuiOuNon "Do I replace the existing $PABMute"]} { break } set FichierNucTfaMute "[RepertoireDuGenome]/nuctfa/$PABMute" set FichierProtTfaMute "[RepertoireDuGenome]/prottfa/$PABMute" } set Alias [Alias $PAB] if {[regexp "^=" $Extension]} { set AliasMute $Extension } else { if {$Extension==""} { set Extension $CodeDeMutation regsub " " $Extension "-" Extension set Extension "-$Extension" } if {$Extension=="-DontModifyAlias"} { set AliasMute $Alias } else { set AliasMute "$Alias$Extension" } } set FichierNucTfa "[RepertoireDuGenome]/nuctfa/$PAB" set Seq [QueLaSequenceDuFichierTFA $FichierNucTfa] set SeqMute [Mute $CodeDeMutation $Seq] set Entete [EnteteDuFichierTFA $FichierNucTfa] set Access [EnteteDuFichierTFA $FichierNucTfa "access"] regsub $Access $Entete "$AliasMute muted $CodeDeMutation of" EnteteMute set TFA [SequenceFormatTFA $SeqMute $EnteteMute "nucbrut"] Sauve $TFA dans $FichierNucTfaMute set FichierProtTfa "[RepertoireDuGenome]/prottfa/$PAB" set SeqProt [SeqNucToSeqPro $SeqMute] set TFAProt [SequenceFormatTFA $SeqProt $EnteteMute "protbrut"] Sauve $TFAProt dans $FichierProtTfaMute if {$Extension=="-DontModifyAlias"} { InformeSansDemander $PABMute "=CopyOf_$PAB" InformeSansDemander $PABMute "=Corrected: correction of $PAB $Alias $CodeDeMutation" } else { InformeSansDemander $PABMute "=Alias: $AliasMute" InformeSansDemander $PABMute "=Muted: mutation of $PAB $Alias $CodeDeMutation" } set D [Box $PAB debut] set F [Box $PAB fin] set O [Box $PAB orient] if {[Box $PABMute Nom]!=""} { set LignePAB "[Box $PAB nom] [Box $PAB debut] [Box $PAB fin] [Box $PAB orient]" set FichierBornes "[RepertoireDuGenome]/fiches/bornesdespabs" set LesLignes [LesLignesDuFichier $FichierBornes] set i [lsearch -exact $LesLignes $LignePAB] set LesNouvellesLignes [lreplace $LesLignes $i $i] SauveLesLignes $LesNouvellesLignes dans $FichierBornes } Box $PABMute debut $D Box $PABMute fin $F Box $PABMute orient $O AppendAuFichier "[RepertoireDuGenome]/fiches/bornesdespabs" "$PABMute $D $F $O" ListeDesPABs $PABMute Box $PABMute nom $PABMute Box $PABMute debut $D Box $PABMute fin $F Box $PABMute orient $O LesPABsDansLOrdre "ReplaceListReplaceFile" return "$PAB $PABMute $CodeDeMutation" } proc MutateSequencesListedIn {FichierOuListeOuLigne} { if { ! [regexp " " $FichierOuListeOuLigne]} { set LesLignes [LesLignesDuFichier $FichierOuListeOuLigne] } else { if {[regexp " " [lindex $FichierOuListeOuLigne 0]]} { set LesLignes $FichierOuListeOuLigne } else { set LesLignes [list $FichierOuListeOuLigne] } } set LesMutes {} foreach Ligne $LesLignes { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s %s" PAB PABMute set LesCodes [lrange [LesMotsDeLaLigne $Ligne] 2 end] set Extension [lindex $LesCodes end] if { ! [regexp -nocase {^[a-z]} $Extension]} { set LesCodes [lrange $LesCodes 0 end-1] } else { set Extension "" } Wup "We replace * the coding of STOP by O which is not used as aa code" set LesCodesSansEtoile {} foreach Code $LesCodes { if {[regexp {\*} $Code]} { regsub -all {\*} $Code "O" Code } lappend LesCodesSansEtoile $Code } set LesCodes $LesCodesSansEtoile Espionne "$LesCodes extension=>$Extension<" set CodeDeMutation [join $LesCodes " "] lappend LesMutes [MutateSequence $PAB $CodeDeMutation $Extension $PABMute] } return [join $LesMutes "\n"] } 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 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 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 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 Mute {Code Seq} { Wup "Code can be a list of codes separated with space" JeMeSignale if {[regexp " " $Code]} { set LesCoOrdonnes {} foreach Co [split $Code " "] { if { ! [regexp -nocase {[a-z]} $Co]} { continue } regsub {[0-9]+} $Co " & " Coco scan $Coco "%s %d %s" AncienP PosAncienP NouveauP set LongAncienP [string length $AncienP] lappend LesCoOrdonnes "$AncienP $PosAncienP $NouveauP" } set LesCoOrdonnes [lsort -decreasing -integer -index 1 $LesCoOrdonnes] set NouveauSeq $Seq foreach Co $LesCoOrdonnes { regsub -all " " $Co "" Co set NouveauSeq [Mute $Co $NouveauSeq] } return $NouveauSeq } regsub {[0-9]+} $Code " & " Coco scan $Coco "%s %d %s" AncienP PosAncienP NouveauP set LongAncienP [string length $AncienP] set LongAncienN [expr $LongAncienP*3] regsub "X" $NouveauP "" NouveauP regsub "x" $NouveauP "" NouveauP set LongNouveauP [string length $NouveauP] #rR Attention, here we mutate NUCLEOTIDES if {[regexp {^[a-z]+$} "$AncienP$NouveauP"] && [OuiOuNonMemo "I see that you use lowercase letters.\nPosition in Nuc count\n Ok to mutate nucleotides ?"]} { set DebAncienN [expr $PosAncienP-1] set FinAncienN [expr $DebAncienN + $LongAncienP - 1] set NouveauSeq [string replace $Seq $DebAncienN $FinAncienN $NouveauP] return $NouveauSeq } #rR Attention, here we mutate NUCLEOTIDES #rR Attention, here we mutate NUCLEOTIDES if {[regexp {^[a-z]+$} "$NouveauP"] && [regexp {^[A-Z]+$} "$AncienP"] && [OuiOuNonMemo "For $Code , I see that you use lowercase letters in $NouveauP\n and uppercase in $AncienP\nSo position is in AA count\nOk to mutate the aa to nucleotides ?"]} { set DebAncienN [expr ($PosAncienP-1)*3] set FinAncienN [expr $DebAncienN + $LongAncienP*3 - 1] set NouveauSeq [string replace $Seq $DebAncienN $FinAncienN $NouveauP] return $NouveauSeq } #rR Attention, here we mutate NUCLEOTIDES set DebAncienN [expr ($PosAncienP-1)*3] set FinAncienN [expr $DebAncienN+$LongAncienN-1] set AncienN [string range [string toupper $Seq] $DebAncienN $FinAncienN] set LesNouveauxCodons {} foreach {A B C} [split $AncienN ""] P [split $AncienP ""] N [split $NouveauP ""] { if {$N==""} { break } set Codon "$A$B$C" if {$Codon!=""} { Espionne ">$Codon< >$P< >$N< $PosAncienP" set AA [AAduCodon $Codon] if {$P!="" && $AA!=$P} { FaireLire "$P from $Code \n doesn't correspond to translation of $Codon from the nucleic seq.\n I ignore it. But, please, verify your sequences." } } set NouveauCodon [PlusProcheCodon $Codon [LesCodesGenetiques $N]] lappend LesNouveauxCodons $NouveauCodon } set NouveauxCodons [join $LesNouveauxCodons ""] set NouveauSeq [string replace $Seq $DebAncienN $FinAncienN $NouveauxCodons] return $NouveauSeq } proc MyGOsFromGene {{Qui ""} {Quoi ""} {JoinCar ""} {RecordJoinCar ""}} { #rR Attention il faut avoir fait InformeGoPourTous (c'est fait automatiquement mais vaut mieux le faire avant) global MyGOsFromGene if {$JoinCar=="space"} { set JoinCar " " } if {$RecordJoinCar=="space"} { set RecordJoinCar " " } if {$JoinCar==""} {set JoinCar "=" } if {$RecordJoinCar==""} {set RecordJoinCar "\n" } if {$Quoi==""} { set Quoi "GOs" } if {[info exists MyGOsFromGene($Qui,$Quoi)]} { return $MyGOsFromGene($Qui,$Quoi) } if {[info exists MyGOsFromGene("EstCharge")]} { if { ! [info exists MyGOsFromGene($Qui,GOs)]} { set QUI [string toupper $Qui] if {$QUI!=$Qui} { return [MyGOsFromGene $QUI $Quoi $JoinCar $RecordJoinCar] } return "" } set NoBrace [regexp -nocase "nobrace" $Quoi] regsub -nocase "nobrace" $Quoi "" Quoi set LesGo $MyGOsFromGene($Qui,GOs) foreach Go $LesGo { set LeRecord "" foreach Q [split $Quoi ","] { set R [GoGetFromGo $Go $Q] if {$NoBrace} { regsub -all {[\{\}]} $R "" R } lappend LeRecord $R } set Record [join $LeRecord $JoinCar] lappend LeTout $Record } set Tout [join $LeTout $RecordJoinCar] return $Tout } set MyGOsFromGene("EstCharge") 1 set MyGOsFromGene(File,MyGOsFromGene) [Fiches "MyGOsFromGene.txt"] if {[file exists MyGOsFromGene(File,MyGOsFromGene)]} { array set [ContenuDuFichier $MyGOsFromGene(File,MyGOsFromGene)] return [MyGOsFromGene $Qui $Quoi $JoinCar $RecordJoinCar] } set MyGOsFromGene(File,NomGnGos) [Fiches "NomGnGOs.txt"] set MyGOsFromGene(File,GoNoms) [Fiches "GoNoms.txt"] set MyGOsFromGene(File,GoGns) [Fiches "GoGns.txt"] if {[FileAbsent $MyGOsFromGene(File,NomGnGos)]} { FaireLire "l vaut mieux faire InformeGoPourTous avant MyGOsFromGene.\nJe le fais maintenant ... cela peut prendre du temps" InformeGoPourTous return [MyGOsFromGene $Qui $Quoi $JoinCar $RecordJoinCar] } set TousLesGo {} set TousLesNom {} set TousLesGn {} foreach Ligne [LesLignesDuFichier $MyGOsFromGene(File,NomGnGos)] { lassign [split $Ligne ":"] Nom Gn lappend TousLesNom $Nom lappend TousLesGn $Gn set LesGo [lrange [split $Ligne " "] 1 end] set MyGOsFromGene($Nom,GOs) $LesGo set MyGOsFromGene($Gn,GOs) $LesGo set MyGOsFromGene([string toupper $Gn],GOs) $LesGo } set MyGOsFromGene(ListOf,Go) [ListeSansDoublon $TousLesGo] set MyGOsFromGene(ListOf,Nom) [ListeSansDoublon $TousLesNom] set MyGOsFromGene(ListOf,Gn) [ListeSansDoublon $TousLesGn] Sauve [array get MyGOsFromGene] dans $MyGOsFromGene(File,MyGOsFromGene) return [MyGOsFromGene $Qui $Quoi $JoinCar $RecordJoinCar] } proc MyGOsFromModelOrga {} { } proc MyGenesFromGo {{Qui ""} {Quoi ""}} { #rR Attention il faut avoir fait InformeGoPourTous global MyGenesFromGo if {$Quoi==""} { set Quoi "Noms" } if {[info exists MyGenesFromGo($Qui,$Quoi)]} { return $MyGenesFromGo($Qui,$Quoi) } if {[info exists MyGenesFromGo("EstCharge")]} { return "" } set MyGenesFromGo("EstCharge") 1 set MyGenesFromGo(File,MyGenesFromGo) [Fiches "MyGenesFromGo.txt"] if {[file exists MyGenesFromGo(File,MyGenesFromGo)]} { array set [ContenuDuFichier $MyGenesFromGo(File,MyGenesFromGo)] return [MyGenesFromGo $Qui $Quoi] } set MyGenesFromGo(File,NomGnGos) [Fiches "NomGnGOs.txt"] set MyGenesFromGo(File,GoNoms) [Fiches "GoNoms.txt"] set MyGenesFromGo(File,GoGns) [Fiches "GoGns.txt"] if {[FileAbsent $MyGenesFromGo(File,NomGnGos)]} { FaireLire "Il vaut mieux faire InformeGoPourTous avant MyGenesFromGo.\nJe le fais maintenant ... cela peut prendre du temps" InformeGoPourTous return [MyGenesFromGo $Qui $Quoi] } set TousLesGo {} set TousLesNom {} set TousLesGn {} foreach Ligne [LesLignesDuFichier $MyGenesFromGo(File,NomGnGos)] { lassign [split $Ligne ":"] Nom Gn lappend TousLesNom $Nom lappend TousLesGn $Gn set LesGo [lrange [split $Ligne " "] 1 end] foreach Go $LesGo { lappend TousLesGo $Go lappend NomsDuGo($Go) $Nom lappend GnsDuGo($Go) $Gn } } set TousLesGo [lsort -unique $TousLesGo] set LesGoNoms {} set LesGoGns {} foreach Go $TousLesGo { set NomsDuGo($Go) [ListeSansDoublon $NomsDuGo($Go)] set GnsDuGo($Go) [ListeSansDoublon $GnsDuGo($Go)] set MyGenesFromGo($Go,Noms) $NomsDuGo($Go) set MyGenesFromGo($Go,Gns) $GnsDuGo($Go) lappend LesGoNoms "$Go [join $NomsDuGo($Go) { }]" lappend LesGoGns "$Go [join $GnsDuGo($Go) { }]" } set MyGenesFromGo(ListOf,Go) $TousLesGo set MyGenesFromGo(ListOf,Nom) [ListeSansDoublon $TousLesNom] set MyGenesFromGo(ListOf,Gn) [ListeSansDoublon $TousLesGn] Sauve [array get MyGenesFromGo] dans $MyGenesFromGo(File,MyGenesFromGo) SauveLesLignes $LesGoNoms dans $MyGenesFromGo(File,GoNoms) SauveLesLignes $LesGoGns dans $MyGenesFromGo(File,GoGns) return [MyGenesFromGo $Qui $Quoi] } proc MyLinx {{Qui ""} {Quoi ""}} { global MyLinx if {$Qui=="ResetMyLinx"} { unset -nocomplain MyLinx ; return "" } set Login [Login] if {[info exists MyLinx($Qui,$Quoi)]} { return $MyLinx($Qui,$Quoi) } if {[info exists MyLinx("EstCharge")]} { return "" } set MyLinx("EstCharge") 1 set Url "[LbgiUrl]/MyLinx.php?login=$Login&getwhat=GetSerial" set Serial [ContenuDuFichier $Url] set MLX [SeriallistFromSerial $Serial] foreach {sLn sLnLiDeBe} [lindex $MLX 1] { set Ln [lindex $sLn 1] lappend MyLinx(ListOf,LinkName) $Ln foreach {sK sV} [lindex $sLnLiDeBe 1] { set K [lindex $sK 1] set V [lindex $sV 1] set MyLinx($Ln,$K) $V } } return [MyLinx $Qui $Quoi] } proc MyMissBlast {} { set Science [ScienceOiDeMonDomaine] set LesOI [QuestionDeScience $Science "ret WIW [NotreOX] ListOfOP"] set RepMB "[GscopeDatabaseDir $Science]/missblast/" set MMB {} foreach OI $LesOI { set FichierMissBlast "$RepMB/$OI" if {[FileAbsent $FichierMissBlast]} { continue } foreach Ligne [LesLignesDuFichier $FichierMissBlast] { scan $Ligne "%s %s" Id Seq set Nom [NIAG $Id N] if {$Nom==""} { continue } lappend MMB "$Nom $Ligne" } } return $MMB } proc MyPuts {args} { global MyLog if {[llength $args] == 1} { set do 1 } else { set do 0 } if {$do} { rename ::puts ::toto rename ::oldputs ::puts puts {*}$args rename ::puts ::oldputs rename ::toto ::puts } else { lappend MyLog [join $args " "] } return } proc MySQLizer {Path} { # Prepare un fichier CSV avec des ";" en remplacant les espaces par des "_" et les ";" par des tabulations set FichierIn [open "$Path.csv" "r"] set FichierOut [open "$Path.txt" "w"] while { [gets $FichierIn Ligne] >=0 } { regsub -all {\s} $Ligne "_" LigneOut regsub -all "\\\\t" $LigneOut "\t" LigneOut regsub -all ";" $LigneOut "\t" LigneOut puts $FichierOut $LigneOut } close $FichierIn close $FichierOut } proc NBPfam {File} { Espionne "Calcule le nombre PFAM" set n [split $File "/"] set filename [lindex $n [llength $n]-1] set cmpt 0 if {[file exists "$File.aj"]} { set annotation [FromMacsims "$File.aj" "$filename" "ConcatPfam"] foreach an $annotation { incr cmpt } return $cmpt } elseif {[file exists "$File"]} { set annotation [FromMacsims "$File" "$filename" "ConcatPfam"] foreach an $annotation { incr cmpt } return $cmpt } else { return 0 } } proc NCBI {ID {DB nucleotide}} { set URL "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=on&db=$DB&view=fasta&list_uids=$ID" package require http set Adress [::http::geturl $URL ] set OUT [::http::data $Adress] if {[regexp "Error: Unknown" $OUT]} {return} regsub -all {]*>} $OUT "" OUT return $OUT } proc NIAG {{Qui ""} {Quoi ""}} { #rR Pour passer du Nom au Id Ac et GeneId et inversement global NIAG if {[regexp -nocase "Help" $Qui]} { lappend LeHelp "NIAG stands for N=Nom I=UniprotId A=Accession G=Geneid" lappend LeHelp "NIAG ListOf N" lappend LeHelp "NIAG ListOf I" lappend LeHelp "NIAG ListOf A" lappend LeHelp "NIAG ListOf G" lappend LeHelp "NIAG HSAP00001 N -> HSAP00001" lappend LeHelp "NIAG HSAP00001 I -> 1433B_HUMAN" lappend LeHelp "NIAG HSAP00001 A -> P31946" lappend LeHelp "NIAG HSAP00001 G -> 7529" lappend LeHelp "NIAG 7529 N -> HSAP00001" lappend LeHelp "NIAG 7529 I -> ABCDEF_HUMAN" lappend LeHelp "NIAG 7529 A -> Q12345" lappend LeHelp "NIAG 7529 G -> 12345" lappend LeHelp "NIAG 1433B_HUMAN N -> HSAP00001" lappend LeHelp "NIAG 1433B_HUMAN I -> 1433B_HUMAN" lappend LeHelp "etc." lappend LeHelp "Attention a few UniprotIds and accession have several hits" lappend LeHelp "NIAG ABCDEF_HUMAN Ns may return several hits (NIAG ABCDEF_HUMAN N returns only the last one)" lappend LeHelp "" lappend LeHelp " Raymond" return [join $LeHelp "\n"] } set Fichier "[RepertoireDuGenome]/fiches/niag.txt" if {[regexp -nocase "^ReDo_" $Qui]} { if {[file exists $Fichier]} { file delete $Fichier } regsub -nocase "^ReDo_" $Qui "" Qui return [NIAG $Qui $Quoi] } if {[info exists NIAG($Qui,$Quoi)]} { return $NIAG($Qui,$Quoi) } if {[info exists NIAG("EstCharge")]} { return "" } set NIAG("EstCharge") 1 if {[file exists $Fichier]} { array set NIAG [ContenuDuFichier $Fichier] set NIAG(Filename,) $Fichier return [NIAG $Qui $Quoi] } set NIAG(ListOf,N) {} set NIAG(ListOf,A) {} set NIAG(ListOf,I) {} set NIAG(ListOf,G) {} foreach N [ListeDesPABs] { set I [ExtraitInfo $N "Id:"] set A [ExtraitInfo $N "Ac:"] set NIAG($N,N) $N set NIAG($N,I) $I set NIAG($N,A) $A if {$I!=""} { set NIAG($I,N) $N ; #rR tant pis s'il y a en a plusieurs, on prend le dernier lappend NIAG($I,Ns) $N } if {$A!=""} { set NIAG($A,N) $N ; #rR tant pis s'il y a en a plusieurs, on prend le dernier lappend NIAG($A,Ns) $N } lappend NIAG(ListOf,N) $N lappend NIAG(ListOf,I) $I lappend NIAG(ListOf,A) $A } set NIAG(ListOf,I) [lsort -unique $NIAG(ListOf,I)] set NIAG(ListOf,A) [lsort -unique $NIAG(ListOf,A)] set LesDemandes [concat $NIAG(ListOf,I) $NIAG(ListOf,A)] set Res [IDMapping "ACC+ID" "P_ENTREZGENEID" $LesDemandes] foreach X $LesDemandes G $Res { set N $NIAG($X,N) if {[regexp {00$} $N]} { Espionne "$N=$X=$G=" } if {$G==""} { continue } if {[info exists NIAG($N,G)]} { if { $NIAG($N,G)==$G } { continue } FaireLire "$N=$X=$G!=$NIAG($N,G)" } set NIAG($N,G) $G } foreach N $NIAG(ListOf,N) { if { ! [info exists NIAG($N,G)]} { continue } set G $NIAG($N,G) set NIAG($NIAG($N,I),G) $G set NIAG($NIAG($N,A),G) $G set NIAG($G,N) $N set NIAG($G,I) $I set NIAG($G,A) $A lappend NIAG(ListOf,G) $G } set NIAG(ListOf,G) [lsort -unique $NIAG(ListOf,G)] Sauve [array get NIAG] dans $Fichier return [NIAG $Qui $Quoi] } proc NJPlotMSF {MSF {IsFile ""}} { if {$IsFile=="IsFile"} { set Delete 0 set FichierMSF $MSF } else { set Delete 1 set FichierMSF [Sauve $MSF dans "[TmpFile].msf"] } set FichierPhylo [CreeLeFichierPhylo $FichierMSF "[TmpFile].ph"] if {$Delete} { file delete -force $FichierMSF } return [NJPlotPH $FichierPhylo] } proc NJPlotPH {FichierPhylo} { exec njplot $FichierPhylo & return $FichierPhylo } proc NKI {} { global NKI foreach Fichier [lsort [glob "[HomeRipp]/cgi*.htm"]] { set Texte [ContenuDuFichier $Fichier] while 1 { set Texte [StringSuivant "top.iwp.editRecById" dans $Texte] if {$Texte==""} { break} regsub {>]+>} $Texte "" Texte regexp {[^<]+} $Texte IndicesValeur set Valeur [StringSuivant "\"" dans $IndicesValeur] regsub -all {[^0-9]} $IndicesValeur " " Indices scan $Indices "%d %d %d %d" P C B L lappend NKI(LesPages) $P set NKI($P,$L,$C) $Valeur lappend NKI($P,LesLignes) $L lappend NKI($P,$L,LesColonnes) $C } } set LesEntetesPourXls [list Page Line TargetsTried Constructs Trials Soluble Crystals NMR Diffraction Lead Complex Status TargetsChoosen ExpressionSystem TargetFamily Group] set LeXls [list [join $LesEntetesPourXls "\t"]] set OldGroupe "" foreach P [lsort -integer -unique $NKI(LesPages)] { foreach L [lsort -integer -unique $NKI($P,LesLignes)] { if {$L==0} { set Groupe $NKI($P,0,41) set Famille $NKI($P,0,42) set NbTargets $NKI($P,0,43) continue } set Ligne "$P $L" set LesValeurs {} set LesValeursPourXls [list $P $L] set i 0 foreach C [lsort -integer -unique $NKI($P,$L,LesColonnes)] { if {$C==44} { set Systeme $NKI($P,$L,$C) ; continue } set V $NKI($P,$L,$C) lappend LesValeursPourXls $V if {[regexp {^[0-9]+$} $V]} { set NC 4 if {[incr i] > 4} { set NC 2 } set V [format "%${NC}d" $NKI($P,$L,$C)] } else { if {$V=="In progress"} { set V "+" } else { set V "/" } } if {$C==45} { set V "$V/[format "%3d" $NbTargets]" } lappend LesValeurs $V } if {$Groupe!=$OldGroupe} { Espionne "\n$Groupe" } set OldGroupe $Groupe Espionne "[format "%3d" $P] $L [join $LesValeurs " "] [format "%-35s" $Systeme] $Famille" lappend LesValeursPourXls $NbTargets $Systeme $Famille $Groupe lappend LeXls [join $LesValeursPourXls "\t"] } SauveLesLignes $LeXls dans "[HomeRipp]/NKIPourXls.txt" } exit } proc NOp {args} { #rR No Operation : la proc qui ne fait rien } proc NPduNM {NM} { # set NP [HttpGetTextFromUrl "[BirdUrl]/getprotein?db=REFSEQRNA&accession=$NM"] # set NP [string trim $NP " \n\t"] set NP [BirdGet $NM "accession"] regsub {\..*} $NP "" NP return $NP # set Query "select cds.protein_id from refseqRNA.ft_cds as cds,refseqRNA.entry as entry where entry.accession='$NM' and cds.key_fk=entry.oid" # set NP [Bird $Query "flat"] # return $NP } proc NPduNMperso {NM} { # set NP [HttpGetTextFromUrl "[BirdUrl]/getprotein?db=REFSEQRNA&accession=$NM"] # set NP [string trim $NP " \n\t"] set NPacc [BirdGet $NM "accession"] set NPdef [BirdGet $NM "definition"] regsub {\..*} $NPacc "" NPacc regsub -all {\s} $NPdef "_" NPdef regsub {Homo_sapiens} $NPdef "" NPdef regsub {Homosapiens} $NPdef "" NPdef set NP "$NPacc\t$NPdef" return $NP # set Query "select cds.protein_id from refseqRNA.ft_cds as cds,refseqRNA.entry as entry where entry.accession='$NM' and cds.key_fk=entry.oid" # set NP [Bird $Query "flat"] # return $NP } proc NRIdentite {a lga b lgb} { foreach ca $a cb $b { incr p [expr {$ca ne "." && $ca eq $cb}] } return [expr {($lga<$lgb)?(1.0*$p/$lga):(1.0*$p/$lgb)}] } proc NW {sa sb} { # Needleman-Wunsch algorithm # taken from : # http://biit.cs.ut.ee/~vilo/edu/2002-03/Tekstialgoritmid_I/Loengud/Loeng3_Edit_Distance/bcorum_copy/seq_align3.htm # set lga [string length $sa] set lgb [string length $sb] set La [split $sa ""] set Lb [split $sb ""] set LM [list] # b vertical foreach b $Lb { set L [list] # a horizontal foreach a $La { lappend L [expr {$a eq $b}] } lappend LM $L } # list of columns max , filled with last line set LC [lindex $LM end] for {set b [expr {$lgb-2}]} {$b >= 0} {incr b -1} { set bp [expr {$b + 1}] # init row maximu set rmax [lindex [lindex $LM $bp] end] for {set a [expr {$lga-2}]} {$a >= 0} {incr a -1} { set ap [expr {$a+1}] set mab [lindex [lindex $LM $b] $a] # diag set md [lindex [lindex $LM $bp] $ap] # row if {$md > $rmax} { set rmax $md } # col set cmax [lindex $LC $ap] if {$md > $cmax} { set cmax $md lset LC $ap $cmax } lset LM $b $a [expr {$mab + ($rmax>$cmax?$rmax:$cmax)}] } } #pNW $sa $sb $LM 2 #exit if {0} { # max on row 0 set mxr0 [lindex [lsort -integer [lindex $LM 0]] end] set ax [lindex [lsearch -all [lindex $LM 0] $mxr0] end] # max on col 0 set c0 [ExtraitListeDeListe $LM 0] set mxc0 [lindex [lsort -integer $c0] end] set bx [lindex [lsearch -all $c0 $mxc0] end] if {$mxr0 > $mxc0} { set bx 0 } else { set ax 0 } set oa "" ; set ob "" for {set s 0} {$s < $ax} {incr s} { append ob "-" append oa [lindex $La $s] } for {set t 0} {$t < $bx} {incr t} { append ob [lindex $Lb $t] append oa "-" } append ob [lindex $Lb $t] append oa [lindex $La $s] set t $bx ; set s $ax #puts "lga $lga lgb $lgb" while {$s < ($lga-1) || $t < ($lgb-1)} { set sp [expr {$s + 1}] set tp [expr {$t + 1}] set drt [lindex [lindex $LM $tp] $s] set bas [lindex [lindex $LM $t] $sp] set dia [lindex [lindex $LM $tp] $sp] # diagonal if {$dia >= $bas && $dia >= $drt} { set res 3 } else { if {$bas >= $drt} { set res 2 } else { set res 1 } } switch $res { 1 { #puts "drt" set t $tp append oa "-" append ob [lindex $Lb $t] } 2 { #puts "bas" set s $sp append ob "-" append oa [lindex $La $s] } 3 { #puts "diag" set s $sp set t $tp append oa [lindex $La $s] append ob [lindex $Lb $t] } } #puts "drt $drt dia $dia bas $bas | $s $t" #puts "[string range $oa end-20 end]" #puts "[string range $ob end-20 end]" #puts "" } } else { set oa "" ; set ob "" set s -1 ; set t -1 set sp 0 ; set tp 0 while {$sp < $lga && $tp < $lgb} { set maxVal -1 set row [lindex $LM $tp] for {set i $sp} {$i < $lga} {incr i} { set val [lindex $row $i] if {$val > $maxVal} { set maxVal $val set drt $i set bas $tp } } for {set i $tp} {$i < $lgb} {incr i} { set val [lindex [lindex $LM $i] $sp] if {$val > $maxVal} { set maxVal $val set bas $i set drt $sp } } if {$drt == $sp && $bas == $tp} { append oa [lindex $La $drt] append ob [lindex $Lb $bas] } else { if {$bas > $tp} { for {set i $tp} {$i < $bas} {incr i} { append oa "-" append ob [lindex $Lb $i] #puts " i=$i" #puts " $oa" #puts " $ob" } } if {$drt > $sp} { for {set i $sp} {$i < $drt} {incr i} { append oa [lindex $La $i] append ob "-" #puts " i=$i" #puts " $oa" #puts " $ob" } } append oa [lindex $La $drt] append ob [lindex $Lb $bas] #puts ">$oa" #puts ">$ob" } set s $drt set t $bas set sp [expr {$s + 1}] set tp [expr {$t + 1}] #puts "s=$s" #puts "t=$t\n" #puts "drt $drt dia $dia bas $bas | $s $t" #puts "[string range $oa end-20 end]" #puts "[string range $ob end-20 end]" #puts "" } #puts "" #puts "s= $s $lga" #puts "t= $t $lgb" if {$sp < $lga} { for {set i $sp} {$i < $lga} {incr i} { append oa [lindex $La $i] append ob "-" } } elseif {$tp < $lgb} { for {set i $tp} {$i < $lgb} {incr i} { append oa "-" append ob [lindex $Lb $i] } } } #puts "$oa" #puts "$ob" return [list $oa $ob] } proc NWAlign2 {s1 s2} { set f1 "[file tempfile].tfa" set f2 "[file tempfile].tfa" EcritLeTfa $f1 s1 $s1 EcritLeTfa $f2 s2 $s2 if {[set pasOK [catch {exec ../NWalign $f1 $f2} Msg]]} { puts "Error NWAlign !" } file delete $f1 $f2 if {! $pasOK} { set Lmsg [split $Msg \n] set s1al [lindex $Lmsg 7] set s2al [lindex $Lmsg 9] #ShowProtDiff s1al s2al } else { set s1al "" set s2al "" } return [list $s1al $s2al] } proc NW_old {a b} { # Needleman-Wunsch algorithm # taken from : # http://biit.cs.ut.ee/~vilo/edu/2002-03/Tekstialgoritmid_I/Loengud/Loeng3_Edit_Distance/bcorum_copy/seq_align3.htm # set la [split $a ""] set lb [split $b ""] set i 0 foreach s $la { set j 0 foreach t $lb { set M($i,$j) [expr {$s eq $t}] incr j } incr i } #pNW $a $b M #puts "i= $i j= $j" for {set s [expr {$i-2}]} {$s >= 0} {incr s -1} { for {set t [expr {$j-2}]} {$t >= 0} {incr t -1} { # at each s,t check the right-bottom # rectangle s+1,t+1 -> end,end set max -99999 set sp [expr {$s+1}] set tp [expr {$t+1}] for {set sm $sp} {$sm < $i} {incr sm} { for {set tm $tp} {$tm < $j} {incr tm} { if {[set v $M($sm,$tm)] >= $max} { set max $v } } } incr M($s,$t) $max } } #pNW $a $b M 2 # cherche max 1er ligne/col set mxr -999 for {set s 0} {$s < $i} {incr s} { if {$M($s,0) > $mxr} { set mxr $M($s,0) set rx $s } } set mxc -999 for {set t 0} {$t < $j} {incr t} { if {$M(0,$t) > $mxc} { set mxc $M(0,$t) set cx $t } } if {$mxr > $mxc} { set cx 0 } else { set rx 0 } set oa "" ; set ob "" ##puts "cx $cx rx $rx" for {set s 0} {$s < $cx} {incr s} { append ob [string index $b $s] append oa "-" } for {set t 0} {$t < $rx} {incr t} { append ob "-" append oa [string index $a $t] } #puts "oa $oa" #puts "ob $ob" set s $rx ; set t $cx #puts "s= $s t= $t" append ob [string index $b $t] append oa [string index $a $s] #set t $rx ; set s $cx while {$s < ($i-1) && $t < ($j-1)} { set sp [expr {$s+1}] set tp [expr {$t+1}] #puts "\n s= $s t= $t M $M($s,$t)" set drt $M($s,$tp) set bas $M($sp,$t) set dia $M($sp,$tp) set L [list 1 $drt 2 $bas 3 $dia] set res [lindex [lsort -integer -index 1 -stride 2 $L] end-1] switch $res { 1 { #puts "drt" set t $tp append oa "-" append ob [string index $b $t] } 2 { #puts "bas" set s $sp append ob "-" append oa [string index $a $s] } 3 { #puts "diag" set s $sp set t $tp append oa [string index $a $s] append ob [string index $b $t] } } } puts "$oa" puts "$ob" return [list $oa $ob] } proc NWalign {s1 s2} { set f1 "[file tempfile].tfa" set f2 "[file tempfile].tfa" set o [open $f1 w] puts $o $s1 close $o set o [open $f2 w] puts $o $s2 close $o #set o [open "|/home/moumou/NWalign $f1 $f2 0 0" r] #chan close $o write #set l [read -nonewline $o] #close $o #file delete $f1 $f2 #update # catch set pasOK [catch {exec -ignorestderr /home/moumou/NWalign $f1 $f2 0 0} Msg] file delete $f1 $f2 update set Lmsg [split $Msg \n] if {$pasOK || $Lmsg == {} || [llength $Lmsg] < 3} { puts "Error NWAlign !" puts "$Msg" return [list "" ""] } set s1al "" ; set s2al "" set i 0 foreach l $Lmsg { switch $i { 0 {append s1al $l} 2 {append s2al $l} } incr i if {$i > 3} {set i 0} } #ShowProtDiff s1al s2al return [list $s1al $s2al] } proc NYI {} { FaireLire "Not yet implemented !" return } proc NameInMacsimsYesorNo {FichierMacsim Qui Quoi} { global NameInMacsimsYesorNo set FichierMacsim [TheTrueMacsimsFile $FichierMacsim] if {[info exists NameInMacsimsYesorNo(FichierMacsim)] && $NameInMacsimsYesorNo(FichierMacsim)!=$FichierMacsim} { unset NameInMacsimsYesorNo } if {[info exists NameInMacsimsYesorNo($Qui,$Quoi)]} { return $NameInMacsimsYesorNo($Qui,$Quoi) } if {[info exists NameInMacsimsYesorNo("EstCharge")]} { return "" } set NameInMacsimsYesorNo("EstCharge") 1 set NameInMacsimsYesorNo(FichierMacsim) $FichierMacsim package require tdom set fh [open $FichierMacsim "r"] dom parse -channel $fh doc close $fh $doc documentElement root set LesSeq [$root selectNodes "//sequence"] foreach seq $LesSeq { set Name [$seq selectNodes "string(./seq-name)"] set NameInMacsimsYesorNo($Name,YesOrNo) "Yes" } $doc delete return [NameInMacsimsYesorNo $FichierMacsim $Qui $Quoi] } proc NamesDunGroup {FileMacsims GroupVoulu} { set FileMacsims [TheTrueMacsimsFile $FileMacsims] set fh [open $FileMacsims "r"] dom parse -channel $fh doc close $fh $doc documentElement root foreach seq [$root selectNodes "//sequence"] { set Name [$seq selectNodes "string(./seq-name)"] set Group [$seq selectNodes "string(./seq-info/group)"] if {$Group == $GroupVoulu} {lappend LesNames $Name} } $doc delete return $LesNames } proc NamesFromMacsims {FichierMacsim} { set FichierMacsim [TheTrueMacsimsFile $FichierMacsim] set fh [open $FichierMacsim "r"] dom parse -channel $fh doc close $fh $doc documentElement root set LesSeq [$root selectNodes "//sequence"] foreach seq $LesSeq { set Name [$seq selectNodes "string(./seq-name)"] lappend LesNames $Name } $doc delete return $LesNames } proc NamesOfClusters {} { global SDG LNDG set Ln [list] foreach g $LNDG { if {[regexp {^Group[0-9+]} $g]} { lappend Ln $g } } if {! [llength $Ln]} { FaireLire "There are no groups to be named !" return } set w .noc if {[winfo exists $w]} { raise $w return } toplevel $w wm title $w "Names Of Clusters" wm iconname $w "Names" wm protocol $w WM_DELETE_WINDOW KillParLaCroix grid rowconfig $w all -weight 1 grid columnconfig $w all -weight 1 label $w.titre -text "Names Of Clusters" -font "helvetica 14 bold" -anchor w -justify left label $w.label -text "Give a name to the clusters of the alignment" -anchor w -justify left grid $w.titre -row 0 -column 0 -sticky w -padx 5 -pady 5 grid $w.label -row 1 -column 0 -sticky w -padx 5 -pady {5 10} set ws $w.fgrps frame $ws label $ws.ognm -text "Old Name" -anchor w -justify left label $ws.ngnm -text "New Name" -anchor w -justify left label $ws.odnm -text "Old Name" -anchor w -justify left label $ws.ndnm -text "New Name" -anchor w -justify left grid $ws.ognm -row 0 -column 0 -sticky w grid $ws.ngnm -row 0 -column 1 -sticky w -padx {1 5} grid $ws.odnm -row 0 -column 2 -sticky w -padx {5 1} grid $ws.ndnm -row 0 -column 3 -sticky w set i 0 set r 1 foreach g $Ln { label $ws.lg$i -text "$g" -anchor w -justify left entry $ws.eg$i -background white -width 10 if {! ($i % 2)} { # to the left grid $ws.lg$i -row $r -column 0 -sticky w grid $ws.eg$i -row $r -column 1 -sticky w -padx {1 5} } else { # to the right grid $ws.lg$i -row $r -column 2 -sticky w -padx {5 1} grid $ws.eg$i -row $r -column 3 -sticky w incr r } incr i } grid $ws -row 2 -column 0 -sticky ew -padx 5 -pady 5 set wb $w.fbtn frame $wb button $wb.dis -text "Cancel" -background red -command {SaveClustersNames .noc.fgrps dismiss} button $wb.ok -text " OK " -background green1 -command {SaveClustersNames .noc.fgrps ok} grid $wb.dis -row 0 -column 0 -sticky w -padx 10 grid $wb.ok -row 0 -column 1 -sticky e -padx 10 grid columnconfig $wb 0 -weight 1 grid $wb -row 3 -column 0 -sticky ew -padx 5 -pady {15 5} MesCouleurs $w FenetreAuCentre $w grab $w tkwait window $w return } proc NamesSeqsToPrint {} { global PrmPrt NomNomSeq LNOrdali NomTextSeq NomsAffiches LSOrdali LongueurTotale set LNoms $NomsAffiches if {[QuelMode] eq "seqlab"} { set LSeqs [$NomTextSeq output all] set LongueurTotale [string length [lindex $LSeqs 0]] } else { set LSeqs $LSOrdali } switch $PrmPrt(Area) { "window" { # Y visible zone lassign [split [$NomNomSeq index @0,0] .] yD x set ny [$NomNomSeq cget -height] set yF [expr {$yD+$ny}] set LNoms [lrange $LNoms $yD-1 $yF-1] set LSeqs [lrange $LSeqs $yD-1 $yF-1] # X visible zone lassign [$NomTextSeq xview] p1 p2 set xD [expr {int($p1*$LongueurTotale)}] set xF [expr {int($p2*$LongueurTotale)}] } "all" { set xD 0 ; set yD 0 set xF [expr {$LongueurTotale-1}] set yF [expr {[llength $LNoms]-1}] } "selected" { FaireLire "to be done !! \n please remind Luc !!" return } } set PrmPrt(LgNoms) [PlusLongEltDe $LNoms] set LNtmp [list] ; set LStmp [list] set sgap [string repeat " " $LongueurTotale] set ngap [string repeat " " $PrmPrt(LgNoms)] set i -1 ; set iend [expr {[llength $LNoms]}] foreach n $LNoms s $LSeqs { incr i if {$n eq "" && ($i == 0 || $i == $iend)} { continue } if {$n eq ""} { set s $sgap set n $ngap } lappend LNtmp $n lappend LStmp [string range $s $xD $xF] } set LNoms $LNtmp set LSeqs $LStmp set PrmPrt(NbSeqs) [llength $LNoms] set PrmPrt(LgSeqs) [expr {$xF-$xD+1}] set PrmPrt(LSeqs) $LSeqs set PrmPrt(LNoms) $LNoms return } proc Narcisse {Nom {OldNewAll ""}} { global RepertoireDuGenome global ListeDesPABs global Narcisse set Nom [string toupper $Nom] set NotreOS [NotreOS] if {[regexp -nocase "All" $OldNewAll]} { set OldNew "" set AllNarcisse 1 } else { set OldNew $OldNewAll set AllNarcisse 0 } Wup "First check for OldNew Access" if {$OldNew!=""} { if { [regexp -nocase "Old" $OldNew] } { set OldNew "Old" } if { [regexp -nocase "New" $OldNew] } { set OldNew "New" } if { [regexp -nocase "PAB" $OldNew] } { set OldNew "PAB" } if {[info exists Narcisse($Nom,$OldNew)]} { return [set Narcisse($Nom,$OldNew)] } if {[info exists Narcisse("EstCharge",$OldNew)]} { return "" } set FichierNarcisseATrois "$RepertoireDuGenome/fiches/narcisse-a-trois" if { ! [file exists $FichierNarcisseATrois]} { set Narcisse("EstCharge",Old) "EstCharge" set Narcisse("EstCharge",New) "EstCharge" set Narcisse("EstCharge",PAB) "EstCharge" return [Narcisse $Nom] } else { foreach Ligne [LesLignesDuFichier $FichierNarcisseATrois] { scan $Ligne "%s %s %s" Moi Old New set Narcisse($Moi,New) $New set Narcisse($Moi,Old) $Old set Narcisse($Old,New) $New set Narcisse($New,Old) $Old set Narcisse($Old,Old) $Moi set Narcisse($New,New) $Moi set Narcisse($Old,PAB) $Moi set Narcisse($Moi,PAB) $Moi set Narcisse($New) $Moi set Narcisse($Old) $Moi set Narcisse([string toupper $Moi],New) $New set Narcisse([string toupper $Moi],Old) $Old set Narcisse([string toupper $Old],New) $New set Narcisse([string toupper $New],Old) $Old set Narcisse([string toupper $New]) $Moi set Narcisse([string toupper $Old]) $Moi } set Narcisse("EstCharge",New) "EstCharge" set Narcisse("EstCharge",Old) "EstCharge" set Narcisse("EstCharge",PAB) "EstCharge" return [Narcisse $Nom $OldNew] } } if {$AllNarcisse} { Wup "Look in Narcisse all" if {[info exists Narcisse($Nom,All)]} { return [set Narcisse($Nom,All)] } if {[info exists Narcisse("EstCharge",All)]} { if { [info exists Narcisse($Nom,New)]} { return [set Narcisse($Nom,New)] } if { ! [info exists Narcisse("EstCharge",New)]} { return [Narcisse $Nom New] } return [Narcisse $Nom] } Wup "Read the file narcisse all" set FichierNarcisse "$RepertoireDuGenome/../narcisse" if {[file exists $FichierNarcisse]} { foreach Ligne [LesLignesDuFichier $FichierNarcisse] { set Access "" scan $Ligne "%s %s %s" NomLu BanqueId Access if {$Access==""} { set Access $BanqueId } set Narcisse($NomLu,All) "$Access" set Narcisse($Access,All) "$NomLu" set Narcisse([string toupper $NomLu],All) "$Access" set Narcisse([string toupper $Access],All) "$NomLu" } set Narcisse("EstCharge",All) "EstCharge" return [Narcisse $Nom All] } return [Narcisse $Nom] } Wup "Look in Narcisse" if {[info exists Narcisse($Nom)]} { return [set Narcisse($Nom)] } if {[info exists Narcisse("EstCharge")]} { if { ! [info exists Narcisse("EstCharge",New)]} { return [Narcisse $Nom New] } return "" } Wup "Read the file narcisse" set FichierNarcisse "$RepertoireDuGenome/fiches/narcisse" if {[file exists $FichierNarcisse]} { foreach Ligne [LesLignesDuFichier $FichierNarcisse] { set Access "" scan $Ligne "%s %s %s" NomLu BanqueId Access if { ! [regexp {\:} $BanqueId]} { set Access $BanqueId } if {$Access==""} { set Access $BanqueId } set Narcisse($NomLu) "$Access" set Narcisse($Access) "$NomLu" set Narcisse([string toupper $NomLu]) "$Access" set Narcisse([string toupper $Access]) "$NomLu" } set Narcisse("EstCharge") "EstCharge" if {[info exists Narcisse($Nom)]} { return [set Narcisse($Nom)] } else { if {$Nom!="APPEND"} { return "" } } } Wup "Create the file narcisse" if {[OuiOuNon "Do I use DaedalusHits to create Narcisse ?"]} { foreach PAB [ListeDesPABs] { Espionne "PAB $PAB" if {[info exists Narcisse($PAB)]} { continue } set FichierDaedalus "$RepertoireDuGenome/daedalushits/$PAB" if { ! [file exists $FichierDaedalus]} { continue } set TaxId [OrganismeDuPAB $PAB TaxId] if {$TaxId=="Inconnu inconnu"} { set TaxId "" } Espionne "I'm looking for $TaxId in $FichierDaedalus" catch {unset MeilleurPNTrouve} set BonneLigne "" foreach Ligne [LesLignesDuFichier $FichierDaedalus] { set AC [ValeurDeLaBalise AC Ligne "NePasRogner"] set PN [ValeurDeLaBalise PN Ligne "NePasRogner"] set OX [ValeurDeLaBalise OX Ligne "NePasRogner"] Espionne "$PAB $TaxId $AC $OX $PN" if {$PN > 1.e-3} { break } if {[EstUnAccessPDB $AC]} { continue } if {[EstUnPAB $AC]} { continue } if {$TaxId=="" && [OuiOuNon "Unfortunately the organism of $PAB is unknown\n Do I use the best blastp hit for Narcisse ?"]} { set BonneLigne $Ligne ; break } set TexteOX "=[join $OX "="]=" if {[regexp "=$TaxId=" $TexteOX]} { set BonneLigne $Ligne ; break } } if {$BonneLigne==""} { # FaireLire "I can't find an homolog for $PAB in apns/$PAB. I skipp it" continue } AppendAuFichier $FichierNarcisse "$PAB $AC" } } elseif {[OuiOuNon "Do I use apns to create Narcisse ?"]} { foreach PAB [ListeDesPABs] { if {[info exists Narcisse($PAB)]} { continue } set FichierAPNs "$RepertoireDuGenome/apns/$PAB" if { ! [file exists $FichierAPNs]} { continue } catch {unset MeilleurPNTrouve} set BonneLigne "" foreach Ligne [LesLignesDuFichier $FichierAPNs] { Espionne $Ligne scan $Ligne "%s %s %f" BanqueId Access PN if {$PN > 1.e-3} { break } if {[EstUnAccessPDB $BanqueId]} { continue } if {[EstUnPAB $Access]} { continue } if {$NotreOS=="Inconnu inconnu" && [OuiOuNonMemo "Unfortunately NotreOS is 'Inconnu inconnu'\n Do I use the best blastp hit for Narcisse ?"]} { set BonneLigne $Ligne ; break } set Orga [OrgaDuAccess $Access Complet] if {[regexp $NotreOS $Orga]} { set BonneLigne $Ligne ; break } } if {$BonneLigne==""} { # FaireLire "I can't find an homolog for $PAB in apns/$PAB. I skipp it" continue } scan $BonneLigne "%s %s %f" BanqueId Access PN AppendAuFichier $FichierNarcisse "$PAB $BanqueId $Access" } } if { ! [file exists $FichierNarcisse]} { Sauve "Narcisse empty" dans $FichierNarcisse } if {$Nom=="APPEND"} { return "" } return [Narcisse $Nom] } proc NarcisseDansLOrdreDesPABs {} { set FichierNarcisse "[RepertoireDuGenome]/fiches/narcisse" foreach Ligne [LesLignesDuFichier $FichierNarcisse] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s" NomLu if {[info exists SaLigne($NomLu)]} { FaireLire "I already saw $NomLu\n $SaLigne($NomLu)\n\and now\n$Ligne\n\nI'll cancel" return "" } set SaLigne($NomLu) $Ligne } set LeNouveau {} foreach Nom [ListeDesPABs] { if {[info exists SaLigne($Nom)]} { lappend LeNouveau $SaLigne($Nom) } } EspionneL $LeNouveau if { ! [OuiOuNon "Do I save in $FichierNarcisse ?"]} { return "" } return [SauveLesLignes $LeNouveau dans $FichierNarcisse] } proc NarcisseDuAliasPourTous {} { global RepertoireDuGenome global NarcisseDuAlias ChargeNarcisseDuAlias set FichierNarcisse "$RepertoireDuGenome/fiches/narcisse" if {[info exists NarcisseDuAlias] && ! [file exists $FichierNarcisse]} { if {[OuiOuNon "Can I use NarcisseDuAlias to create Narcisse ?"]} { set LesNarcisses {} foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] if {[info exists NarcisseDuAlias($Alias)]} { set NdA [set NarcisseDuAlias($Alias)] set Narcisse($Nom) $NdA lappend LesNarcisses "$Nom $NdA" } } if {$LesNarcisses!={}} { SauveLesLignes $LesNarcisses dans $FichierNarcisse } } } } proc NarcisseDuFichier {Fichier {FichierSortie ""}} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Access set Nar [Narcisse $Access] if {$Nar==""} { set Nar [Narcisse $Access New] } lappend Sortie $Nar } if {$FichierSortie==""} { set FichierSortie $Fichier.narcisse } return [SauveLesLignes $Sortie dans $FichierSortie] } proc NarcissePourLOrganisme {Access Organisme} { set GName [LesNomsGscopeDeLOrganisme $Organisme] if {$GName == {}} { return "" } set BoiteDuAccess "" foreach nomG $GName { set BoiteDuAccess [QuestionDeScience $nomG "ret Narcisse $Access"] if {$BoiteDuAccess == "" && [regexp -nocase {[a-z]{3}} $Access]} { set LeEmbl [LaSequenceDesBanques $Access $Access accessOk "OnVeutEMBL"] if {$LeEmbl == ""} { continue } set LigneAC [lindex $LeEmbl 1] if { ! [regexp "^AC " $LigneAC]} { continue } scan $LigneAC "%s %s" bidon AC set BoiteDuAccess [QuestionDeScience $nomG "ret Narcisse $AC"] } if {$BoiteDuAccess != ""} { break } } return $BoiteDuAccess } proc NatureDeLaSequenceAuVuDu {Titre} { if {[EstUnPAB $Titre]} { return "PGS" } if {[regexp {^P[0-9]+$} $Titre]} { return "Oli" } if {[regexp {^Rec1_} $Titre]} { return "Rec1" } if {[regexp {^Rec2_} $Titre]} { return "Rec2" } if {[regexp {^N[0-9]+_[^_]+_p} $Titre]} { return "Rec2" } if {[regexp {^N[0-9]+_pDONR} $Titre]} { return "Rec1" } if {[regexp {^N[0-9]+_p} $Titre]} { return "Rec1" } if {[regexp {^pDONR} $Titre]} { return "pDONR" } if {[regexp {^pDEST} $Titre]} { return "pDEST" } if {[regexp {^ProduitPCR} $Titre]} { return "PPCR" } if {[regexp {^PPCR} $Titre]} { return "PPCR" } if {[regexp {^N[0-9]+$} $Titre]} { return "VPPCR" } if {[NomDuAlias $Titre]!=""} { return "Alias" } return "" } proc NbCandidatsPourLeMeilleurOligo {Fichier DirOligo} { Wup "Retourne le nombre de candidat du meilleur oligo trouve" if {$Fichier== "LaTotale"} {set Fichier [ListeDesPABs]} foreach PAB $Fichier { #set Fichier "$DirOligo/${PAB}.selection" set Fichier "$DirOligo/${PAB}.croisee" if {! [file exists $Fichier]} { set Fichier "$DirOligo/${PAB}.oligo" if {! [file exists $Fichier]} { Espionne "$PAB No Oligo Calculated" continue } Espionne ">>>>>>>>$PAB On prend .oligo" } set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [regexp "No Hit found" $Ligne]} {Espionne "$PAB 0";break} if { [regexp "NoOligo Available" $Ligne]} {Espionne "$PAB No Oligo Available";break} set LesCandidats [join [lrange [split "$Ligne" "\t"] 5 end] " "] set nbCandidats [llength $LesCandidats] Espionne "$PAB $nbCandidats" break } close $F } return "" } proc NbCellularOrExtracellularDansClusters {FichierOrf2Cluster FichierGO FichierOut} { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster LesNoms] { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster $Nom Cluster] if {![info exists Tab($Cluster,NbExtra)]} {set Tab($Cluster,NbExtra) 0} if {![info exists Tab($Cluster,NbCell) ]} {set Tab($Cluster,NbCell) 0} if {![info exists Tab($Cluster,None) ]} {set Tab($Cluster,None) 0} set LesGO {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {[Onto $GO Type] != "component"} {continue} lappend LesGO $GO foreach GO [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend LesGO $GO } } set EnAiJeVuUn 0 foreach GO [ElimineLesRedondancesDansUneListe $LesGO] { if {$GO == "GO:0005576"} { incr Tab($Cluster,NbExtra) set EnAiJeVuUn 1 break } if {$GO == "GO:0005623"} { incr Tab($Cluster,NbCell) set EnAiJeVuUn 1 break } } if {!$EnAiJeVuUn} {incr Tab($Cluster,None)} } foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOrf2Cluster LesClusters] { set nCell [set Tab($Cluster,NbCell)] set nExtra [set Tab($Cluster,NbExtra)] set nNone [set Tab($Cluster,None)] set All [expr $nNone + $nExtra + $nCell] set Rapport [expr $nExtra * 1.0 / $All] AppendAuFichier $FichierOut "$Cluster\t$nCell\t$nExtra\t$nNone\t$Rapport" } return } proc NbClonesAvecUnNouveauTypeLocApresMRM {} { set n 0 foreach Nom [ListeDesPABs] { set NouvelleLoc [PolyLocalise $Nom] set Loc [PolyLocalise $Nom "" recalcule] if {$Loc!=$NouvelleLoc} { incr n } } return "N=$n" } proc NbDeChiffresPourLeFragmentDuContig {Chromosome Contig} { set n 0 set nMax 5 set BId "$Chromosome:$Contig" set JeLAiTrouve 1 while {[LaSequenceDesBanques $BId] == {}} { incr n if {$n == $nMax} {set JeLAiTrouve 0 ; break} set Fragment [string repeat 0 $n] set BId "$Chromosome:${Contig}_$Fragment" Espionne $BId } if {$JeLAiTrouve == 0} {return ""} return "$n" } proc NbEspece {} { InitTaxDB set t [$::db eval {select taxid from taxonomy where Name="Eukaryota"}] FindNbEspece $t puts "nSpecies $::nSpecies" return } proc NbIdenGroupe {numGrp liste} { #set lResu {} set li {} set n "CoulG$numGrp" # ce qui se situe apres $n et commence ou non par "{" jusqu a "}" regexp "$n {{0,1}(\[^\}\{\]+)}" $liste match li #puts "les $n sont [set l$n]" set lg [llength $li] return $lg } proc NbInt {File} { Espionne "Calcul le nombre d'interaction" if { ! [file exists $File]} { return 0 } set Lignes [LesLignesDuFichier $File] return [llength $Lignes] } proc NbInteractParOrgaVersion10 {} { #attention, diviser le NbInteractions /2 car une ligne, pour A interagit ac B et une, pour B interagit ac A AVERIF #dans 10 x species CanalSqlString set Sql "select node_id_a, node_id_b from network.node_node_links limit 100" foreach {Aid Bid} [SqlExec $Sql "GetList"] { Espionne "Aid $Aid Bid $Bid" set AspeciesID [InterrogeProteinsNamesTable $Aid SpeId] set BspeciesID [InterrogeProteinsNamesTable $Bid SpeId] Espionne "$Aid $AspeciesID $Bid $BspeciesID" if {$AspeciesID!=$BspeciesID} { return "pb $Aid $Bid $AspeciesID $BspeciesID"} lappend LesSpeciesID $AspeciesID if {[info exists DejaVu($AspeciesID)]} { incr DejaVu($AspeciesID) } else { set DejaVu($AspeciesID) 1 } Espionne "$AspeciesID $DejaVu($AspeciesID)" } set LesSpeciesID [ListeSansDoublon $LesSpeciesID] foreach SpeciesID $LesSpeciesID { set SpeciesName [InterrogeSpeciesTable $SpeciesID SpeName] lappend LesLignes "$SpeciesID\t$SpeciesName\t$DejaVu($SpeciesID)" } CanalSqlDisconnect SauveLesLignes $LesLignes dans "/home/poidevin/ordi/NbInteractParOrgaDsString10.txt" } proc NbInteractParOrgaVersion8 {} { #attention, diviser le NbInteractions /2 car une ligne, pour A interagit ac B et une, pour B interagit ac A #dans 8.2 630 species CanalSqlString set SqlSpecies "select species_id, official_name, kingdom from items.species order by kingdom" foreach {species name kingdom} [SqlExec $SqlSpecies "GetList"] { #in8.2: set Sql "select count(*) from network.protein_protein_links where species_id = $species;" set Sql "select count(*) from network.node_node_links where species_id = $species;" Espionne "$Sql" set NbInteractions [SqlExec $Sql "GetFirstValue"] lappend LesLignes "$species\t$name\t$kingdom\t$NbInteractions" } CanalSqlDisconnect SauveLesLignes $LesLignes dans "/home/poidevin/ordi/NbInteractParOrgaDsString.txt" } proc NbOrfAppartennantAUnOperon_PourRapport {} { set i 0 foreach Orf [O2C2O LesOrfs] {if {[O2C2O Orf $Orf Operon] != ""} {incr i}} return $i } proc NbParalogueMax {{Lspecies ""} {directory ""}} { if {$Lspecies==""} {set Lspecies [LesLignesDuFichier [RepertoireDuGenome]/Especes.txt]} if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set listeNbPar {} set File "[RepertoireDuGenome]/Bilan/NbMaxParaBilan" set r [glob -directory $directory *] foreach specie $Lspecies { #Espionne "$specie" set NbParaMax 0 set NbPara 0 foreach fichier $r { #Espionne "---->$fichier" set Lignes [LesLignesDuFichier $fichier] foreach ligne $Lignes { if {[regexp {^>(\w*)} $ligne tmp access]} { set tab [split $ligne " "] #ne pas prendre les pdbs set access [string toupper $access] if {![regexp {^[1-9][A-Z0-9]{3}_[A-Z]} $access]} { set esp [lindex $tab 2] append esp " [lindex $tab 3]" #Espionne "espece: $esp" if {$esp==$specie} { #Espionne "::::$access" incr NbPara } } } } #Espionne "nbPara: $NbPara" if {$NbParaMax<$NbPara} { set NbParaMax $NbPara } set NbPara 0 } #Espionne "nbMAX: $NbParaMax" lappend listeNbPar "$specie:$NbParaMax" } SauveLesLignes $listeNbPar dans $File } proc NbPdb {File} { Espionne "Calcul le nombre de PDB file -> $File" if { ! [file exists $File]} { return 0 } set Lignes [LesLignesDuFichier $File] set pdbAcc {} foreach ligne $Lignes { if {[regexp ^>.* $ligne]} { lappend pdbAcc [lindex [split $ligne "_"] 0] } } Espionne "Taille 1: [llength $pdbAcc]" set pdbAcc [lsort -unique $pdbAcc] Espionne "Taille 2: [llength $pdbAcc]" set cmt 0 foreach t $pdbAcc { incr cmt } Espionne "cmt: $cmt" return [llength $pdbAcc] } proc NbProbeset {{LesFichiers ""}} { Espionne "[clock format [clock scan now]]" WithWebService "Gx" 0 if {$LesFichiers=="" } { set LesFichiers [LesAffyAnnot] } if {$LesFichiers=="DansLeBonOrdre"} { set LesFichiers [LesAffyAnnotDansLeBonOrdre] } foreach File $LesFichiers { Espionne "$File" set Queue [file tail $File] set Chip [string range $Queue 0 [expr [string first "." $Queue] -1]] set LesChip [MesMultiChip $Chip] lappend LesChip $Chip foreach UneChip $LesChip { set SqlAt "select pk_arraytype from arraytype where name='$UneChip';" set PkAt [GxDbSqlExec $SqlAt "GetFirstValue"] set SqlLn "select count(*) from ln_arraytype_probeset where pk_arraytype=$PkAt;" set NbPk [GxDbSqlExec $SqlLn "GetFirstValue"] set Commande "update arraytype set probesetcount = $NbPk where pk_arraytype=$PkAt;" set status [GxDbSqlExec $Commande] } } Espionne "[clock format [clock scan now]]" } proc NbProbesetOld {FichierAnnot} { #Exemple d'un FichierAnnot: "[RepertoireAffyAnnot na32]/MG430_2.0/Mouse430_2.na32.annot.csv" set total 0 set LesLignes [TabulonsSansQuote $FichierAnnot "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { set Elmt [split $Ligne ";"] set Probesetid [lindex $Elmt 0] if {[regexp "AFFX" $Probesetid]} { incr affx continue } incr total } return "$total $affx" } proc NbrAcidesAminesAuSeuil {texte ref s} { set count [regsub -all "$ref" $texte "" bidon] if {$count >= $s} { return 1 } else { return 0 } } proc NePasMettreAttB {} { global NePasMettreAttB if { ! [info exists NePasMettreAttB]} { set NePasMettreAttB [expr ! [OuiOuNon "Do I include the AttB signals ?\n Don't forget to add a CC signal at 5' end if you order at Invitrogen."]] } return $NePasMettreAttB } proc NeRejettePasLaBoite {Boite} { return 0 } proc NeRienFaire {args} { } proc NearestColor {rgb} { set RGB [split $rgb " "] set r [lindex $RGB 0] set g [lindex $RGB 1] set b [lindex $RGB 2] set ListeRGB [Palette listof rgb ] set Dmin [expr 255*255*3] foreach RGB $ListeRGB { set x [lindex $RGB 0] set y [lindex $RGB 1] set z [lindex $RGB 2] set D2 [expr ($r-$x)**2 + ($g-$y)**2 + ($b-$z)**2 ] if {$D2<$Dmin} { set Dmin $D2; set NearestRGB $RGB} } return $NearestRGB } proc NearestNeighborTm {Seq} { Wup "Calcul du Tm avec la methode du Nearest Neighbor" Wup "Utilisation des parametres unifies du NN pour 1M NaCl" Wup "J. SantaLucia, 1998, PNAS, vol 95, pp 1460-1465" #Nearest Neighbor Method ######################## #Tm= 1000(DH)/((A + DS)) + Rln([ADN]/4) -273.15 + 16.6log([Na+]) #Correction pour le Na+ #Tm= 1000 DH / (DS) + Rln([ADN]/4) -273.15) #Correction comprise dans les parametres DH et DS #R gaz cst = 1.987 cal.deg-1.mol-1, A correction for initiation -10.8 #DNA = concentration des brins non auto complementaires # DNA/4 si meme concentration #(DNA1-DNA2)/2 si pas la meme concentraion #Ici DNA = 10E-6 M a voir #Tm =(S)+Rln(C))-273.15-12.0log[Na+] set Seq [split $Seq ""] global Enthalpy global Entropy #global FreeNRJ set DeltaH 0.0 set DeltaS 0.0 #set DeltaG 0.0 set DNA 0.000001 if {! [info exists Enthalpy] && ![info exists Entropy]} { #Parametres d initialisation set Enthalpy(A) 2.3 set Enthalpy(T) 2.3 set Enthalpy(G) 0.1 set Enthalpy(C) 0.1 set Enthalpy(Y) 1.2 set Enthalpy(R) 1.2 set Entropy(A) 4.1 set Entropy(T) 4.1 set Entropy(G) -2.8 set Entropy(C) -2.8 set Entropy(Y) 0.6 set Entropy(R) 0.6 #set FreeNRJ(A) 1.03 #set FreeNRJ(T) 1.03 #set FreeNRJ(G) 0.98 #set FreeNRJ(C) 0.98 #Parametres pour l entropie set Entropy(A,A) -22.2 set Entropy(A,T) -20.4 set Entropy(A,G) -21.0 set Entropy(A,C) -22.4 set Entropy(T,A) -21.3 set Entropy(T,T) -22.2 set Entropy(T,G) -22.7 set Entropy(T,C) -22.2 set Entropy(G,A) -22.2 set Entropy(G,T) -22.4 set Entropy(G,G) -19.9 set Entropy(G,C) -24.4 set Entropy(C,A) -22.7 set Entropy(C,T) -21.0 set Entropy(C,G) -27.2 set Entropy(C,C) -19.9 #R Purine on a pris la moyenne set Entropy(A,R) -21.6 set Entropy(T,R) -22.0 set Entropy(G,R) -21.0 set Entropy(C,R) -24.9 set Entropy(R,A) -22.2 set Entropy(R,T) -21.4 set Entropy(R,G) -20.4 set Entropy(R,C) -23.4 #Y Pyrimidine on a pris la moyenne set Entropy(A,Y) -21.4 set Entropy(T,Y) -22.2 set Entropy(G,Y) -21.4 set Entropy(C,Y) -20.4 set Entropy(Y,A) -22.0 set Entropy(Y,T) -21.6 set Entropy(Y,G) -24.9 set Entropy(Y,C) -21.0 #Parametres pour l enthalpie set Enthalpy(A,A) -7.9 set Enthalpy(A,T) -7.2 set Enthalpy(A,G) -7.8 set Enthalpy(A,C) -8.4 set Enthalpy(T,A) -7.2 set Enthalpy(T,T) -7.9 set Enthalpy(T,G) -8.5 set Enthalpy(T,C) -8.2 set Enthalpy(G,A) -8.2 set Enthalpy(G,T) -8.4 set Enthalpy(G,G) -8.0 set Enthalpy(G,C) -9.8 set Enthalpy(C,A) -8.5 set Enthalpy(C,T) -7.8 set Enthalpy(C,G) -10.6 set Enthalpy(C,C) -8.0 #R Purine on a pris la moyenne set Enthalpy(A,R) -7.8 set Enthalpy(T,R) -7.5 set Enthalpy(G,R) -8.1 set Enthalpy(C,R) -9.5 set Enthalpy(R,A) -8.0 set Enthalpy(R,T) -7.8 set Enthalpy(R,G) -7.9 set Enthalpy(R,C) -9.1 #Y Pyrimidine on a pris la moyenne set Enthalpy(A,Y) -7.8 set Enthalpy(T,Y) -8.0 set Enthalpy(G,Y) -9.1 set Enthalpy(C,Y) -7.9 set Enthalpy(Y,A) -7.8 set Enthalpy(Y,T) -8.0 set Enthalpy(Y,G) -9.5 set Enthalpy(Y,C) -8.1 #Parametres pour l energie libre #set FreeNRJ(A,A) -1 #set FreeNRJ(A,T) -0.88 #set FreeNRJ(A,G) -1.28 #set FreeNRJ(A,C) -1.44 #set FreeNRJ(T,A) -0.58 #set FreeNRJ(T,T) -1 #set FreeNRJ(T,G) -1.45 #set FreeNRJ(T,C) -1.3 #set FreeNRJ(C,A) -1.45 #set FreeNRJ(C,T) -1.28 #set FreeNRJ(C,G) -2.17 #set FreeNRJ(C,C) -1.84 #set FreeNRJ(G,A) -1.3 #set FreeNRJ(G,T) -1.44 #set FreeNRJ(G,G) -1.84 #set FreeNRJ(G,C) -2.24 } set B1 0 set B2 0 foreach Base $Seq { set B2 $Base if {![info exists Enthalpy($Base)] | ![info exists Entropy($Base)]} {return -1} if {$B1=="0"} { set DeltaH [expr $DeltaH + [set Enthalpy($B2)]] set DeltaS [expr $DeltaS + [set Entropy($B2)]] } else { if {![info exists Enthalpy($B1,$B2)] | ![info exists Entropy($B1,$B2)]} {return -1} set DeltaH [expr $DeltaH + [set Enthalpy($B1,$B2)]] set DeltaS [expr $DeltaS + [set Entropy($B1,$B2)]] } set B1 $B2 } set LastBase [string index $Seq end] set DeltaH [expr $DeltaH + [set Enthalpy($LastBase)]] set DeltaS [expr $DeltaS + [set Entropy($LastBase)]] return "[expr ( ( (1000.0*$DeltaH) / ($DeltaS+(1.9872*log($DNA/4.0)))) - 273.15)]" } proc NearestNeighborTm2 {Seq {Methode ""}} { Wup "Calcul du Tm avec la methode du Nearest Neighbor" Wup "Utilisation des parametres unifies du NN pour 1M NaCl" Wup "J. SantaLucia, 1998, PNAS, vol 95, pp 1460-1465" #Nearest Neighbor Method ######################## #Tm= 1000(DH)/((A + DS)) + Rln([ADN]/4) -273.15 + 16.6log([Na+]) #Correction pour le Na+ #Tm= 1000 DH / (DS) + Rln([ADN]/4) -273.15) #Correction comprise dans les parametres DH et DS #R gaz cst = 1.987 cal.deg-1.mol-1, A correction for initiation -10.8 #DNA = concentration des brins non auto complementaires # DNA/4 si meme concentration #(DNA1-DNA2)/2 si pas la meme concentraion #Ici DNA = 10E-6 M a voir set Seq [split $Seq ""] set DeltaH 0.0 set DeltaS 0.0 #set DeltaG 0.0 set DNA 0.000001 if {$Methode =="" } {set Methode SantaLucia1997} ChargeLesParametresThermodynamiques Enthalpy Entropy FreeNRJ $Methode set B1 0 set B2 0 foreach Base $Seq { set B2 $Base if {![info exists Enthalpy($Base)] | ![info exists Entropy($Base)]} {return -1} if {$B1=="0"} { set DeltaH [expr $DeltaH + [set Enthalpy($B2)]] set DeltaS [expr $DeltaS + [set Entropy($B2)]] } else { if {![info exists Enthalpy($B1,$B2)] | ![info exists Entropy($B1,$B2)]} {return -1} set DeltaH [expr $DeltaH + [set Enthalpy($B1,$B2)]] set DeltaS [expr $DeltaS + [set Entropy($B1,$B2)]] } set B1 $B2 } set LastBase [string index $Seq end] set DeltaH [expr $DeltaH + [set Enthalpy($LastBase)]] set DeltaS [expr $DeltaS + [set Entropy($LastBase)]] return "[expr ( ( (1000.0*$DeltaH) / ($DeltaS+(1.9872*log($DNA/4.0)))) - 273.15)]" } proc NearestOrganismsHit {Nom} { global NearestOrganismsHit if {[info exists NearestOrganismsHit($Nom)]} { return $NearestOrganismsHit($Nom) } if {[info exists NearestOrganismsHit("EstCharge")]} { return $NearestOrganismsHit("EstCharge") } set NearestOrganismsHit("EstCharge") -1 set Fichier "[RepertoireDuGenome]/fiches/danslafamille1" if { ! [file exists $Fichier]} { set NearestOrganismsHit("EstCharge") -2 ; return -2 } foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %d" NomLu Valeur set NearestOrganismsHit($NomLu) $Valeur } return [NearestOrganismsHit $Nom] } proc NettoiTfaDesCopains {Liste} { #parcourir la liste des ID du fichier MSF #Prendre toute les proteins excepter les PDBs #recupere leur sequence par bird #et mettre le tous dans un fichier #creation dun repertoire pour garder ces nouveaux fichier #et penser a modifie la creation bilanOrthologie puisque je dois prendre les fichiers dans un autre repertoire!! #UNE ERREUR ICI IL VIRE TOUTES LES SEQUENCES QUI SONT EMBL if { ! [file exists "NewTfasDesCopains"]} { File mkdir NewTfasDesCopains } foreach fichier $Liste { Espionne "fichier --> $fichier" set fichierMSF [RepertoireDuGenome]/msf/$fichier #set fichierTFA [RepertoireDuGenome]/tfasdescopains/$fichier set newFile [RepertoireDuGenome]/NewTfasDesCopains/$fichier set NombreDeSequences [DecortiqueUnMSF $fichierMSF LesSequencesDansLOrdre Sequences] set protMSF {} foreach NomSeq $LesSequencesDansLOrdre { set os "" if {[EstUnAccessPDB $NomSeq]} { continue } #Espionne "seq: $NomSeq" DecortiqueLesLignesEMBL [LaSequenceDesBanques $NomSeq ] ID AC DE GN OS OC OG #soit je recupere le AC et espece et sequence des EMBL par un truc de raymond, soit je recupere en regardant dans le tfa correspondant la sequence DecortiqueUnTFA {file aNom aSeq} #si la sequence est un ac ensembl alors: if {$ID==""} { #Espionne "ID: $NomSeq" #Espionne "AC emsembl" RecupereUnTFA $fichier $NomSeq os seq #Espionne "NomSeq: $NomSeq; OS: $os; Seq: $seq" Espionne "os: $os" if {$os==""} { Espionne "rien trouver" continue } lappend protMSF ">$NomSeq $NomSeq $os" lappend protMSF "$seq" } else { #Espionne "ID: $NomSeq; ID: $ID; AC: $AC; DE: $DE; GN: $GN; OS: $OS; OS: $OC; OG: $OG " if {$OS==""} { continue } lappend protMSF ">$NomSeq $NomSeq $OS" lappend protMSF [string toupper [QueLaSequenceDesBanques $NomSeq]] } } SauveLesLignes $protMSF dans $newFile } } proc NettoiTfasDesCopainsPourTous {} { #changer ici recupere simplement lalistedespabs set Liste [ListeDesPABs] #if {$directory==""} {set directory [RepertoireDuGenome]/msf} #set r [glob -directory $directory *] foreach fichier $Liste { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } lappend listSeq $fichier FinPasTouche $f Espionne "fichier $fichier" } NettoiTfaDesCopains $listSeq Espionne "Nettoyage fin" } proc NettoieAffichage {} { global NomNomSeq NomTextSeq LNSeqlab LSSeqlab LNOrdali LSOrdali SDG LNDG if {[TypeAli] eq "pasdali"} {return} if {[QuelMode] eq "seqlab"} { set Lnoms $LNSeqlab set Lseqs $LSSeqlab } else { set Lnoms $LNOrdali set Lseqs $LSOrdali } set Li [lsearch -all -regexp $Lnoms {^\s*$}] set Li [lreverse $Li] foreach i [lrange $Li 1 end] { set Lnoms [lreplace $Lnoms $i $i] set Lseqs [lreplace $Lseqs $i $i] } set LNDG "GroupeToutLeMonde" unset -nocomplain set SDG(GroupeToutLeMonde) $Lnoms set Lnoms [linsert $Lnoms 0 ""] set Lnoms [linsert $Lnoms end ""] set Lseqs [linsert $Lseqs 0 ""] set Lseqs [linsert $Lseqs end ""] if {[QuelMode] eq "seqlab"} { set LNSeqlab $Lnoms set LSSeqlab $Lseqs $NomTextSeq cut [lrange $Li 0 end-1] $NomNomSeq delete 1.0 end $NomNomSeq insert end [join $Lnoms \n] } else { AfficheNomsEtSeqs } $NomNomSeq configure -state disabled $NomTextSeq configure -state disabled return } proc NettoieAlignementOlivier {} { global LNOrdali LSOrdali ListePDB puts "ListePDB $ListePDB" set ix -1 set Lig [list] ; set Liv [list] ; set Lia [list] set Lnom [list] foreach n $LNOrdali s $LSOrdali { incr ix set n [string map [list "_sub_" ""] $n] # nom vide if {$n eq ""} { continue } # seq pdb , on passe if {$n in $ListePDB} { lappend Lnom $n lappend Lseq $s continue } # deux underscore dans nom, impossible if {[regsub -all "_" $n "" tmp] > 1} { set n [string range $n 0 [string last "_" $n]-1] } # GI numbers if {[string is integer -strict $n]} { lappend Lig $ix lappend Lgi $n lappend Lnom $n lappend Lseq $s continue } # seq vide , separateur if {[string map [list "." "" "~" ""] $s] eq ""} { puts "seq vide $n" lappend Liv $ix continue } if {[EstUnRefseq $n]} { lappend Lnom $n lappend Lseq $s continue } # nom bidons ... if {[regexp {\_} $n]} { lassign [split $n "_"] tmp toto # GI number + commentaire if {[string is integer -strict $tmp]} { lappend Lig $ix lappend Lgi $tmp lappend Lnom $tmp } elseif {[regexp {\.} $toto]} { set toto [string range $toto 0 [string first "." $toto]-1] if {[EstUnRefseq "${tmp}_$toto"]} { lappend Lnom "${tmp}_$toto" } } else { lappend Lnom $tmp } } else { lappend Lnom $n } lappend Lseq $s } puts "LNOrdali [llength $LNOrdali] Lnom [llength $Lnom]" puts "\nGI\n[join $Lgi \n]" set aT [eSummaryREST protein $Lgi] array set T $aT foreach n $Lgi { if {[set T($n,ReplacedBy)] ne ""} { puts "=> $n [set T($n,ReplacedBy)]" set i [lsearch -regexp $Lnom "^$n"] lset Lnom $i [set T($n,ReplacedBy)] } if {[set T($n,genbank)] ne ""} { set i [lsearch -regexp $Lnom "^$n"] lset Lnom $i [set T($n,genbank)] } elseif {[set T($n,embl)] ne ""} { set i [lsearch -regexp $Lnom "^$n"] lset Lnom $i [set T($n,embl)] } elseif {[set T($n,refseq)] ne ""} { set i [lsearch -regexp $Lnom "^$n"] lset Lnom $i [set T($n,refseq)] } } puts "" # transorme en refseq set Lret [Convert2RefSeq $Lnom] set sz [PlusLongEltDe $Lnom] set fmt "%-${sz}s %s" puts "" foreach n $Lnom r $Lret { puts "[format $fmt $n $r]" } puts "Lnom [llength $Lnom] [llength [lunique $Lnom]] Lret [llength $Lret] [llength [lunique $Lret]]" puts "doublons Lnom :\n[join [DonneDoublons $Lnom] \n]" set Lgi [list] foreach n $Lret { if {[string is integer $n]} { lappend Lgi $n } } puts "Reste \n[join $Lgi \n]" puts "Doublons :" set dbl [DonneDoublons $Lret] foreach d $dbl { set i [lsearch $Lret $d] puts "=> $d [lindex $Lnom $i]" } puts "\n== Liste en Refseq =======================" puts "[join $Lret \n]" puts "=========================\n" set Luni [Convert2UniProtAcc $Lret] puts "[join $Luni \n]" puts "\nCorrespondance : original -> refseq -> uniprot" set o [open ori_ref_uni.corr w] foreach n $Lnom r $Lret u $Luni { puts "$n\t$r\t$u" puts $o "$n\t$r\t$u" } close $o puts "" puts "\nLuni [llength $Luni] Lseq [llength $Lseq]" # conversion directe to uniprot set Ldir [Convert2UniProtAcc $Lnom] foreach n $Lnom d $Ldir u $Luni { if {$d ne $u} { puts "[format $fmt $n $d] $u" } } set fout DARS2_DARS_uniprot.tfa EcritLeTfa $fout $Luni $Lseq exit } proc NettoieArbre {a} { set Li [regexp -all -indices -inline {'} $a] if {$Li != {} } { if {[llength $Li] % 2} { FaireLire "There are unmatching ' characters in the tree file !\nAborting ..." return 0 } set Li [lreverse $Li] foreach {ff dd} $Li { lassign $dd d tmp lassign $ff f tmp set nm [string map [list "'" "" " " _] [string range $a $d $f]] set a "[string range $a 0 $d-1]$nm[string range $a $f+1 end]" } } set a [string map [list " " ""] $a] set o [open treenet w] puts $o $a close $o return $a } proc NettoieCongelo {} { set LesAvariesAFaire {} foreach Nom [ListeDesPABs] { set LesC [DernierCongelo $Nom GetAll] if {[llength $LesC]<=1} { continue } EspionneL $LesC LConcat LesAvariesAFaire [lrange $LesC 0 end-1] } Espionne ".............................. LesAvaries a virer dans la poubelle" EspionneL $LesAvariesAFaire if { ! [OuiOuNon "Je vire ces avaries ?"]} { return "" } set LesFaits {} foreach A $LesAvariesAFaire { #exec mv $A /tempor/grid/poubelle/ } return $LesFaits } proc NettoieLaPageXML {PageHTML} { set SuisJeSurLaPageXML 0 set LesLignesDeLaPage [split $PageHTML "\n"] set PageXML "" foreach Ligne $LesLignesDeLaPage { if {[regexp "\<\?xml version=" $Ligne]} { set SuisJeSurLaPageXML 1 regsub "
    " $Ligne "" Ligne
    	}
    	if {[regexp "
    " $Ligne] && $SuisJeSurLaPageXML } { set SuisJeSurLaPageXML 0 } if {$SuisJeSurLaPageXML} { append PageXML "$Ligne\n" } else {continue} } return "$PageXML" } proc NettoieLeTmp {} { global OrdTmpDir foreach f [glob -nocomplain [file join $OrdTmpDir "[pid]_*"]] { catch {file delete -force $f} } return } proc NettoieLesGroupes {} { global LNOrdali LNDG SDG foreach g $LNDG { set avirer 1 foreach s [set SDG($g)] { if {$s in $LNOrdali} { set avirer 0 break } } if {! $avirer} {lappend Lg $g} } set LNDG $Lg return } proc NettoieLesProttfaDeBlastX2ProteinPourTous {} { foreach pab [ListeDesPABs] { set fichierProttfa "[RepertoireDuGenome]/prottfa/$pab" if {[file isfile $fichierProttfa]} { array unset tfa array set tfa [readFasta $fichierProttfa 0] if {[string length [string trim $tfa($pab,sequence)]] == 0} { Espionne "Vire $fichierProttfa" file delete $fichierProttfa } else { if {[regexp {\*|-} $tfa($pab,sequence)]} { Espionne "Nettoie $fichierProttfa" set tfa($pab,sequence) [regsub -all -- {-+$} $tfa($pab,sequence) ""] set tfa($pab,sequence) [regsub -all -nocase {[^a-z]} $tfa($pab,sequence) "X"] Sauve [formatFasta [lindex $tfa($pab) 0 ] $tfa($pab,sequence)] dans $fichierProttfa } } } } } proc NettoieListe {liste} { #extraction de la 1ere liste de liste (clusters au rang 1)# global Seq set listeCl [ExtraitListeDeListe $liste 0] #extraction de la 2eme liste de liste (nb de communs au rang 1) set listeNb [ExtraitListeDeListe $liste 1] #trouve les communs dans la liste des clusters set com [TrouveCommuns $listeCl] #tant qu on a des communs while {$com != ""} {# global Seq #on travaille sur le 1er set co [lindex $com 0] #determine position dans liste de ces communs set lpos [lsearch -all $listeCl $co] set max 0 #determine celui auquel est associe le nb le + eleve foreach pos $lpos { set nb [lindex $listeNb $pos] if {$nb > $max} { set max $nb set posMax $pos } } set ind [lsearch $lpos $posMax] #ote de la liste des position de ce commun celui qui a le nb le + eleve set newLPos [lreplace $lpos $ind $ind] #pour tous les autres foreach p $newLPos { #decalage d un cran dans la liste des listes set liste [lset liste $p [lreplace [lindex $liste $p] 0 2]] } #on recommence set listeCl [ExtraitListeDeListe $liste 0] set listeNb [ExtraitListeDeListe $liste 1] set com [TrouveCommuns $listeCl] } return $liste } proc NettoieTbl {at} { upvar $at t set nt [list] foreach {k v} [array get t] { set k [join [lrange [split $k ,] 1 end] ,] lappend nt $k $v } unset -nocomplain t array set t $nt return } proc NettoieTriBlast {} { foreach Nom [ListeDesPABs] { set F "[RepertoireDuGenome]/protembl/$Nom" regsub {\: \>} [ContenuDuFichier $F] "" TFA Espionne [Sauve $TFA dans $F] } exit } proc NettoieZones {lz} { set Ld [list] set Lf [list] set Lr [list] foreach z $lz { lassign $z x1 x2 if {$Lr == {}} { lappend Lr $x1 $x2 continue } set nr1 -1 ; set nr2 -1 set pnr1 -1 ; set pnr2 -1 set i 0 set Lc $Lr foreach {r1 r2} $Lc { if {$nr1 != -1} {lset Lr $i $nr1} if {$nr2 != -1} {lset Lr [expr {$i+1}] $nr2} if {$pnr1 != -1} { lappend Lr $pnr1 $pnr2 } set nr1 -1 ; set nr2 -1 set pnr1 -1 ; set pnr2 -1 incr i 2 if {$x1 >= $r1 && $x2 <= $r2} {continue} if {$x1 < $r1 && $x2 <= $r2} {set nr1 $x1} if {$x1 >= $r1 && $x2 > $r2} {set nr2 $x2} if {$x1 < $r1 && $x2 > $r2} { set nr1 $x1 set nr2 $x2 } if {$x1 > $r2 && $x2 > $r2} { set pnr1 $x1 set pnr2 $x2 } } } set nl [list] foreach {x y} $Lr { lappend nl [list $x $y] } return $nl } proc NettoyageAgents {} { global T LNOrdali # enleve tous les couples qui ne sont pas # symetriques : # n1 ag1 <-> n2 ag2 doit exister set nvide 0 set ntot 0 set Ldel [list] foreach k [array names T] { if {[llength $T($k)] == 0} { incr nvide continue } lassign [split $k ,] n ag incr ntot [llength $T($k)] foreach f $T($k) { lassign $f nf agf scf set idx [lsearch -glob $T($nf,$agf) "$n $ag *"] if {$idx == -1} { lappend Ldel $n $ag $nf $agf } } } puts "\nnettoie" puts "nvide $nvide" puts "enleve [expr {[llength $Ldel]/4}]" puts "ntot in $ntot" foreach {n1 ag1 n2 ag2} $Ldel { set Lv $T($n1,$ag1) set idx [lsearch -glob $Lv "$n2 $ag2 *"] if {$idx > -1} { set Lv [lreplace $Lv $idx $idx] } set T($n1,$ag1) $Lv } return } proc NetworkInInparalogues {} { set File "/home/poidevin/ordi/Interactomique/inparalog_homo_compared_to_mouse.txt" foreach Ligne [LesLignesDuFichier $File] { Espionne "$Ligne" set LesMots [split $Ligne ";:"] EspionneL "$LesMots" set pk [lindex $LesMots 0] set description [lindex $LesMots 1] } } proc NewFeatPosDe {nom d {gap 0} {ds -1}} { global LNOrdali LSOrdali LNSTemp LSSTemp ListePDB if {! $gap} { set nref $nom } else { set nref "" foreach n $LNOrdali s $LSOrdali { if {$n eq "" || $n eq $nom || $n in $ListePDB || $n ni $LNSTemp} {continue} if {[string index $s $d] ne "."} { set nref $n break } } } if {$nref eq ""} { FaireLire "Problem !\nCan't find a residue in column $d\nMaybe a gap column ?" return [expr {-1*$d}] } # seq = seq de seqlab set seq [lindex $LSSTemp [lsearch $LNSTemp $nref]] if {$ds == -1} { # ds : pos in initial seq, start at 0 set ds [DonnePosGS $nref $d] if {$ds eq ""} { DonnePosGS $nom $d 1 } incr ds -1 } set i -1 set c -1 # search for pos x in seq. coord, in the new seq while {$c < $ds} { incr i if {[string index $seq $i] ne "."} {incr c} } return $i } proc NewGenes {FichierListe {RepDestin ""} {FOF ""}} { Wup "Copies the A.nuctfa to proteome/A if RepDestin contains proteome" Wup " doesn't copy if RepDestin is else (and keeps .nuctfa)" Wup "Appends to .fof" if {[file tail [pwd]]!=[file tail [RepertoireDuGenome]]} { if {[OuiOuNon "It's better to be at the top of the Gscope Database\nDo I cd [RepertoireDuGenome]?"]} { cd [RepertoireDuGenome] } } if {$RepDestin==""} { set RepDestin "[RepertoireDuGenome]/proteome" } if {$FOF==""} { set PossibleFOF [lindex [glob -nocomplain "[RepertoireDuGenome]/*.fof"] 0] set FOF [ButineArborescence "All" $PossibleFOF] } foreach Ligne [LesLignesDuFichier $FichierListe] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s" A set NomDejavu [NomDuAlias $A] if {$NomDejavu!=""} { if {[OuiOuNon "$A already exists as $NomDeJaVu\nDo I skipp ?"]} { continue } if {[OuiOuNon "$A already exists as $NomDeJaVu\nDo I cancel ?"]} { return } } set Source "./$A.nuctfa" if {[FileAbsent $Source]} { if {[OuiOuNon "$Source doen't exist \nDo I skipp ?"]} { continue } if {[OuiOuNon "$Source doen't exist \nDo I cancel ?"]} { return } } if {[regexp proteome $RepDestin]} { set Destin "[RepertoireDuGenome]/proteome/$A" if {[FileExists $Destin]} { if {[OuiOuNon "$Destin already exists \nDo I skipp ?"]} { continue } if {[OuiOuNon "$Destin already exists \nDo I cancel ?"]} { return } } file copy $Source $Destin } else { set Destin $Source } set New "$A $Destin" Espionne $New AppendAuFichier $FOF $New lappend LesNews $New } return $LesNews } proc NewHDACroises {{LeChoixDesFichiersFamille ""} {Ask ""} {Sauve ""}} { Wup "Permet a partir de fichiers .fam de faire le HDA croise, de les afficher et les sauver" global RepertoireDuGenome set LesFamilles {} set LaSelectionProbable {} set RepFamille "$RepertoireDuGenome/xhda/famille" set RepBilan "$RepertoireDuGenome/bilan_xhda" set UseExisting 1 if {$Ask==""} {set Ask 1} else {set Ask 0} if {$Sauve==""} {set Sauve 0} else {set Sauve 1} if {! [file exists $RepBilan]} {File mkdir $RepBilan} global LesOrgsCibles if { ! [info exists LesOrgsCibles]} { set LesOrgsCibles {} foreach ligne [LesGenomesComplets] { lappend LesOrgsCibles [string toupper [Glossaire $ligne Court]] } } if {$LeChoixDesFichiersFamille==""} { foreach file [lsort [glob -nocomplain "$RepFamille/*.fam"]] { set Queue [file tail $file] lappend LaSelectionProbable $file lappend LaSelectionProbableQ $Queue } set LeChoixDesFichiersFamille [ChoixDesPresents $LaSelectionProbable $LaSelectionProbableQ] } if {$LeChoixDesFichiersFamille==""} { return "" } set ListeCandidat {} foreach fichier $LeChoixDesFichiersFamille { if { ! [file exists $fichier] || [file size $fichier]==0} {continue} set ListePourOdile {} set Famille [file tail $fichier] regsub {\.[a-z]+$} $Famille "" Famille if {$UseExisting && [file exists "$RepBilan/$Famille"]} { Espionne "$Famille exists I continue" continue } Espionne "\n$Famille" set ListeCandidat [LesLignesDuFichier $fichier] foreach ligne $ListeCandidat { scan $ligne "%s %s %s" FamilleComplete PAB GDBName lappend ListePourOdile $GDBName lappend ListePourOdile $PAB lappend LesPABs($Famille) $PAB } EspionneL "ListeGDBName_PABs: $ListePourOdile" if {$ListePourOdile=={}} { continue } lappend LesFamilles $Famille BilanHDAParFamille $LesOrgsCibles $Famille $ListePourOdile BilanChiffre } if {$LesFamilles=={}} { return "" } if {$Ask} { DessineBilanHDACroises $LesFamilles $LesOrgsCibles BilanChiffre } if {$Sauve} { set FichierBilanASauver "$RepertoireDuGenome/bilan_xhda/[lindex $LesFamilles 0]" Espionne $FichierBilanASauver SauveBilanHDACroises $LesFamilles $LesOrgsCibles BilanChiffre $FichierBilanASauver } } proc NewHDACroisesPourTous {} { global RepertoireDuGenome set RepFamille "$RepertoireDuGenome/xhda/famille" foreach fichier [lsort [glob -nocomplain "$RepFamille/*.fam"]] { NewHDACroises $fichier "SansDessine" "Sauve" } } proc NewLeaf {Value} { return [NewTree $Value {}] } proc NewLiu {} { global OrdEtcDir set f [file join $OrdEtcDir blosum62_liu.dat] set Ll [LesLignesDuFichier $f] foreach l $Ll { regsub -all { +} $l " " l set l [split $l " "] lappend Laa [lindex $l 0] lappend nl [lrange $l 1 end] } foreach l $nl a $Laa { foreach e $l b $Laa { set TBLiu($a,$b) $e } } foreach a $Laa { # B D/N set vB [expr {([set TBLiu($a,D)]+[set TBLiu($a,N)])/2}] set TBLiu($a,B) $vB set TBLiu(B,$a) $vB # Z E/Q set vZ [expr {([set TBLiu($a,E)]+[set TBLiu($a,Q)])/2}] set TBLiu($a,Z) $vZ set TBLiu(Z,$a) $vZ # J L/I set vJ [expr {([set TBLiu($a,I)]+[set TBLiu($a,L)])/2}] set TBLiu($a,J) $vJ set TBLiu(J,$a) $vJ } set TBLiu(B,B) 10 set TBLiu(Z,Z) 10 set TBLiu(J,J) 10 # B <-> J set vBJ 0 foreach a [list D N] { foreach b [list I L] { set vBJ [expr {$vBJ + [set TBLiu($a,$b)]}] } } set vBJ [expr {$vBJ/4}] set TBLiu(B,J) $vBJ set TBLiu(J,B) $vBJ # B <-> Z set vBZ 0 foreach a [list D N] { foreach b [list E Q] { set vBZ [expr {$vBZ + [set TBLiu($a,$b)]}] } } set vBZ [expr {$vBZ/4}] set TBLiu(B,Z) $vBZ set TBLiu(Z,B) $vBZ # J <-> Z set vJZ 0 foreach a [list E Q] { foreach b [list I L] { set vJZ [expr {$vJZ + [set TBLiu($a,$b)]}] } } set vJZ [expr {$vJZ/4}] set TBLiu(J,Z) $vJZ set TBLiu(Z,J) $vJZ set Lk [array names TBLiu "A,*"] set Laa [list] foreach k $Lk { lassign [split $k ,] a b lappend Laa $b } set Laa [lsort $Laa] puts "" foreach a $Laa { set l [list $a] foreach b $Laa { lappend l [set TBLiu($a,$b)] } puts [join $l " "] } exit } proc NewMailServer {} { global TCon # if we come from MMMInterface ... if {[llength [winfo children .]] > 0} { set w .fnms toplevel $w } else { set w . } grid columnconfig $w all -weight 1 grid rowconfig $w all -weight 1 $w configure -background $::CMDef(Background) set w "$w.ftop" ttk::frame $w -style MMM.TFrame grid $w -row 0 -column 0 -sticky news -padx 20 grid columnconfig $w all -weight 1 label $w.titre -bg $::CMDef(Background) -fg white -font CMFontBold -text "Define a new mail server" -justify center ttk::label $w.lnom -style MMM.TLabel -text "Name of server :" set TCon(ServerName) "unistra" ttk::entry $w.enom -font CMFont -style MMM.TEntry -textvariable TCon(ServerName) ttk::label $w.ladd -style MMM.TLabel -text "Server address :" set TCon(ServerAddress) 130.79.200.160 ttk::entry $w.eadd -font CMFont -style MMM.TEntry -textvariable TCon(ServerAddress) ttk::label $w.luser -style MMM.TLabel -text "User Name :" set TCon(Username) "luc.moulinier" ttk::entry $w.euser -font CMFont -style MMM.TEntry -textvariable TCon(Username) ttk::label $w.lpass -style MMM.TLabel -text "Password :" set TCon(Password) "#Derry5#" ttk::entry $w.epass -font CMFont -style MMM.TEntry -show "\u2022" -textvariable TCon(Password) ttk::frame $w.fssl -style MMM.TFrame grid columnconfig $w.fssl all -weight 1 set TCon(UseSSL) 1 ttk::checkbutton $w.fssl.cssl -style MMM.TCheckbutton -text "Use SSL" -onvalue 1 -offvalue 0 -variable TCon(UseSSL) ttk::label $w.fssl.lport -style MMM.TLabel -text "Port " set TCon(Port) 993 ttk::entry $w.fssl.eport -width 5 -font CMFont -style MMM.TEntry -textvariable TCon(Port) button $w.bdis -text "Dismiss" -bg red -font CMFont -command {exit} button $w.bok -text " OK " -bg green1 -font CMFontBold -command {ValidateServer %W} grid $w.titre -row 0 -column 0 -columnspan 2 -pady {10 30} -sticky ew grid $w.lnom -row 1 -column 0 -sticky ew grid $w.enom -row 1 -column 1 -sticky ew grid $w.ladd -row 2 -column 0 -sticky ew grid $w.eadd -row 2 -column 1 -sticky ew grid $w.luser -row 3 -column 0 -sticky ew grid $w.euser -row 3 -column 1 -sticky ew grid $w.lpass -row 4 -column 0 -sticky ew grid $w.epass -row 4 -column 1 -sticky ew grid $w.fssl.cssl -row 0 -column 0 -sticky w grid $w.fssl.lport -row 0 -column 1 -sticky w grid $w.fssl.eport -row 0 -column 2 -sticky e grid $w.fssl -row 5 -column 1 -sticky ew grid $w.bdis -row 6 -column 0 -sticky w -pady {50 10} -padx 5 grid $w.bok -row 6 -column 1 -sticky e -pady {50 10} -padx 5 FenetreAuCentre $w bind $w {$w.bok invoke} tkwait variable ::CMDef(imapID) update idletasks return } proc NewMaxLR {AId n} { global Abr ALMax ARmax ALMin ARMin set t [set Abr(Arbre,$AId)] if {$n eq "root"} { return 1} set epsilon 0.0001 set xn [$t get $n xcoord] set yn [$t get $n ycoord] set p [$t parent $n] set xp [$t get $p xcoord] set yp [$t get $p ycoord] if {$xn == $xp && $yn == $yp} { lassign [$t children $p] e1 e2 if {$n eq $e1} {set p $e2} {set p $e1} set xp [$t get $p xcoord] set yp [$t get $p ycoord] } if {[$t isleaf $n]} { set ang [Coords2Angle [expr {$xn-$xp}] [expr {$yn-$yp}]] $t set $n LeftA $ang $t set $n RightA $ang $t set $n NdRight $n $t set $n NdLeft $n puts [format "%s | Ang %5.3f" $n $ang] return 1 } set fx [expr {$xp - $xn}] set fy [expr {$yp - $yn}] set Nf [expr {sqrt($fx*$fx+$fy*$fy)}] if {$Nf != 0.} { set fx [expr {$fx/$Nf}] set fy [expr {$fy/$Nf}] } set lx $fx set ly $fy set rx $fx set ry $fy set ALMax -999. set ARmax -999. set ALMin 999. set ARMin 999. set Llrxy [PrdtVec $AId $n $xn $yn $fx $fy $lx $ly $rx $ry] lassign $Llrxy lxf lyf rxf ryf Nl Nr Nlm Nrm if {$lxf == $lx && $lyf == $ly} {return 0} if {$rxf == $rx && $ryf == $ry} {return 0} if {$Nl eq ""} {set Nl $Nrm} if {$Nr eq ""} {set Nr $Nlm} set xl [$t get $Nl xcoord] set yl [$t get $Nl ycoord] set lang [Coords2Angle [expr {$xl-$xn}] [expr {$yl-$yn}]] set xr [$t get $Nr xcoord] set yr [$t get $Nr ycoord] set rang [Coords2Angle [expr {$xr-$xn}] [expr {$yr-$yn}]] while {$lang - $rang > [2Pi]} {set lang [expr {$lang - [2Pi]}]} while {$rang > $lang} {set lang [expr {$lang + [2Pi]}]} $t set $n LeftA $lang $t set $n NdLeft $Nl $t set $n RightA $rang $t set $n NdRight $Nr puts "----- + L / + R -----" puts "$n" puts [format "L %6.3f R %6.3f" $lang $rang] puts [format "NL %s NR %s LR %5.3f" $Nl $Nr [expr {$lang-$rang}]] return 1 } proc NewObjRangeSelected {w x y} { global NwOj set Lsel [list] if {! [info exists NwOj(Start)]} {return $Lsel} lassign $NwOj(Start) xs ys # we are not in a residue line if {$y <= $NwOj(YOffset)} { return $Lsel } if {$ys <= $NwOj(YOffset)} { set ys $NwOj(YOffset) } if {$xs < $NwOj(XOffset)+3} { set xs [expr {$NwOj(XOffset)+3}] } if {$x < $NwOj(XOffset)+3} { set x [expr {$NwOj(XOffset)+3}] } set x [expr {$x + (7-($x-$NwOj(XOffset)-3)%7)}] # determine which lines set l1 [expr {int(0.5+(double($ys)-$NwOj(YOffset))/$NwOj(YPerLine))}] set l2 [expr {int(0.5+(double($y)-$NwOj(YOffset))/$NwOj(YPerLine))}] set l1 [expr {$l1<=0?1:$l1}] set l2 [expr {$l2<=0?1:$l2}] if {$y < ($l1*$NwOj(YPerLine))+$NwOj(YOffset)+10} { set l2 $l1 } # do the selection if {($l2-$l1) == 0} { # we are on the same line set Lsel [SelectObjItemsOnLine $l1 $xs $x] } else { # we are on distinct lines set x0 0 set xf [$NwOj(Can) cget -width] # first line up to the end set Lsel [SelectObjItemsOnLine $l1 $xs $xf] # select lines between start and end for {set i [expr {$l1+1}]} {$i < $l2} {incr i} { lappend Lsel {*}[SelectObjItemsOnLine $i $x0 $xf] } # last line from start to x lappend Lsel {*}[SelectObjItemsOnLine $l2 $x0 $x] } return $Lsel } proc NewPDBSet {f} { # Lit fichier csv venu de PDB, avec # PDBID chain DBRef reso set Ll [lrange [LesLignesDuFichier $f] 1 end-1] set LnewID {} foreach l $Ll { set li [regexp -all -indices -inline {\"} $l] foreach {ld lf} $li { lassign $ld d tmp lassign $lf f tmp if {[regexp {,| } [string range $l $d $f]] || ($f - $d) == 1} { set nd "\{" set nf "\}" } else { set nd " " ; set nf " " } set l [string replace $l $d $d $nd] set l [string replace $l $f $f $nf] } set l [string map [list , " "] $l] regsub -all { +} $l " " l lappend LnewID [string trim $l] } # Parcours la liste des DBREF. Si plusieurs DBREF # pour un ID, on l'enleve foreach l $LnewID { lassign $l pdbid chn db reso if {[llength $db] > 1} {continue} if {[EstUnAccessPDB $db]} {continue} lappend l1db [list ${pdbid}_$chn $db $reso] } # Trie par DB set LnewID [lsort -index 1 $l1db] set rcou "" foreach l $LnewID { lassign $l idc rf rs if {$rf != $rcou} { if {$rcou ne ""} { set mx [LeMeilleurDuLot $lsel] if {$mx ne ""} {lappend Lm $mx} set lsel {} } } else { lappend lsel $l } set rcou $rf } puts "Il reste [llength $Lm] strinctures" set o [open LesBons w] puts $o [join $Lm \n] close $o exit } proc NewTree {Value BranchList} { return [DataSet create $Value $BranchList] } proc NewTreeFromTrees {Value args} { set BranchList {} foreach Branch $args { lappend BranchList $Branch } return [NewTree $Value $BranchList] } proc NewUser {{Ask ""} {Rep ""}} { set UseEnt 0 if {$Rep==""} { set Rep "." } if {$Ask==""} { set Ask "Ask" } set Ask [string equal -nocase "Ask" $Ask] set Source "$Rep/liste.txt" set SourceOk "$Rep/listeOk.txt" if {[file exists $SourceOk]} { set Texte [ContenuDuFichier $SourceOk] set Bon $Texte } else { set Texte [ContenuDuFichier $Source] regsub -all {[ \n\t\r]+} $Texte " " Texte set Texte [string trim $Texte] set LeBon {} foreach {P N E M} [split $Texte " "] { if {$UseEnt} { regsub -all {[^a-z]} [string tolower $E] "" e set L $e } else { regsub -all {[^a-z]} [string tolower $N] "" n set L $n } lappend LeBon "$L $P $N $E $M" } set LeBon [lsort $LeBon] set Bon [join $LeBon "\n"] set Ask 1 } set Ok $Bon if {$Ask} { set Ok [EntreTexte $Ok "AvecRetour"] } if {$Ok==""} { return "" } if {$Ok!=$Texte} { Sauve $Ok dans $SourceOk } return $Ok } proc NewVirtualPPCR {PPCR {PGS ""} {Sujet ""}} { global NewVirtualPPCR JeMeSignale if {0} { set Alias [Alias $PGS] regsub -all {\-} $Alias "\\\-" XAlias if { ! [regexp $XAlias $Sujet]} { FaireLire "l'alias de $PGS $Alias n'est pas dans le sujet $Sujet" } } set RepDesVirtualPPCR "[RepertoireDuGenome]/ppcr_virtuels" if {$PPCR=="Load"} { set nMax 1000 foreach Nlu [VirtualPPCREnStock "LaListeDesNs"] { set FullName [VirtualPPCREnStock $Nlu "FullName"] lappend NewVirtualPPCR($FullName) $Nlu regsub -all {[^0-9]} $Nlu "" Numero set n [Base10 $Numero] set nMax [Maxi $nMax $n] } set NewVirtualPPCR(LastNumber) $nMax set NewVirtualPPCR("EstCharge") 1 return } if { ! [info exists NewVirtualPPCR("EstCharge")]} { NewVirtualPPCR "Load" } set P5 [P5ofPPCR $PPCR] set P3 [P3ofPPCR $PPCR] Espionne $PGS set A5 [BaClon Trio $PGS $Sujet $P5] set A3 [BaClon Trio $PGS $Sujet $P3] set N5 [expr ($A5-1)*3+1] set N3 [expr ($A3-1)*3+3] set AskForDummy 0 set Dummy 0 Espionne "I got P5=$P5 P3=$P3 A5=$A5 A3=$A3 N5=$N5 N3=$N3" if {$P5=="" || $P3=="" || $A5=="" || $A3=="" || $N3<$N5 } { if {$AskForDummy && [OuiOuNon "There is a problem with NewVirtualPPCR $PPCR $PGS $Sujet \n I got P5=$P5 P3=$P3 A5=$A5 A3=$A3 N5=$N5 N3=$N3 \n Do I create a dummy PPCR (if NO I'll cancel)?" 0]} { set Dummy 1 } else { return "" } } set FiNuc "[RepertoireDuGenome]/nuctfa/$PGS" set SeqPGS [ZoneADNDuFichierTFA $N5 $N3 $FiNuc] set SeqAv [Oli $P5 SeqSignals] set SeqAp [NucToReverseAndComplementNuc [Oli $P3 SeqSignals]] set SeqPPCR "$SeqAv$SeqPGS$SeqAp" regsub -all -nocase {[^a-z]} $SeqPPCR "" SeqPPCR if { ! [info exists NewVirtualPPCR(LastNumber)]} { set NewVirtualPPCR(LastNumber) 1000 } set n [set NewVirtualPPCR(LastNumber)] incr n set Nppcr [format "%s%4.4d" "N" $n] set FullName "$PGS $Sujet ppcr: $PPCR" Espionne "FullName $FullName" if {! $Dummy && [info exists NewVirtualPPCR($FullName)]} { Espionne "Old VirtualPPCR $PPCR $PGS $Sujet I got P5=$P5 P3=$P3 A5=$A5 A3=$A3 N5=$N5 N3=$N3" foreach OldN [set NewVirtualPPCR($FullName)] { set FichierOldN "$RepDesVirtualPPCR/$OldN" Espionne $FichierOldN if {[file exists $FichierOldN]} { set SeqOldN [QueLaSequenceDuTFA $FichierOldN] if {[string equal -nocase $SeqPPCR $SeqOldN]} { return "$OldN same already existed" } VoisinADN ">TheOldPPCR_$OldN\n$SeqOldN\n>TheNewPPCR_$Nppcr\n$SeqPPCR" AfficheVariable "During creation of $Nppcr I detect that following equivalent \n Ppcr [set NewVirtualPPCR($FullName)] from $FullName\nalready exist\n Please compare Old with New in the other window Then I'll ask you what to do." "AvecRetour" set GardeVieux 1 if {[OuiOuNon "Do I delete the old $OldN replacing it with $Nppcr ?"]} { if {[OuiOuNon "Ok to delete the file \n$FichierOldN\n Don't worry if I 'll speak again about $OldN in this process,\n I can't forget so easely this old boy $OldN ..." ]} { file delete $FichierOldN set GardeVieux 0 } } if {$GardeVieux && [OuiOuNon "Do I cancel creation of $Nppcr ?"]} { return "$OldN different but I keep it" } } } } set Entete "$Nppcr Ppcr for $PGS $Sujet with oligos $P5 $P3 FN: $FullName" if {$Dummy} { regsub "Ppcr" $Entete "DUMMY Ppcr" Entete set SeqPPCR "ATGTGA" } set TFA [SequenceFormatTFA $SeqPPCR $Entete "nucbrut"] Espionne "NewVirtualPPCR $PPCR $PGS $Sujet I got P5=$P5 P3=$P3 A5=$A5 A3=$A3 N5=$N5 N3=$N3" if { ! [file exists $RepDesVirtualPPCR]} { file mkdir $RepDesVirtualPPCR } Sauve $TFA dans "$RepDesVirtualPPCR/$Nppcr" set NewVirtualPPCR(LastNumber) $n lappend NewVirtualPPCR($FullName) $Nppcr return $Nppcr } proc Next {n} { global Ln set i [lsearch -exact $Ln $n] if {$i == ([llength $Ln] - 1)} { set i -1 } set next [lindex $Ln $i+1] return $next } proc NextALPHA {S} { if {$S==""} { return "A" } set F [string index $S end] if {$F < "A" || "Z" < $F} { return "${S}A" } if {$F < "Z"} { scan $F "%c" I set N [format "%c" [incr I]] return [string replace $S end end $N] } set Avant [string range $S 0 end-1] return "[NextALPHA $Avant]A" } proc NextGapDesSeqs {idep fin iseqs} { global LSSeqlab set def -1 set sgap [string repeat "." [llength $iseqs]] set inext $def if {$fin > $idep} { set ajt 1 set op "<=" } else { set ajt -1 set op ">=" } set i $idep while {$i != $fin} { set Pilier "" foreach j $iseqs { append Pilier [lindex [lindex $LSSeqlab $j] $i] } if {$Pilier eq $sgap} { set inext $i break } incr i $ajt } return $inext } proc NextPk {SchemaTable} { set Table $SchemaTable if {[regexp "\." $SchemaTable]} { ScanLaListe [split $SchemaTable "."] Schema Table } set nomPk "pk_$Table" if {$Table=="analysissoftware" && [regexp -nocase "retinobase" $Schema]} { set nomPk "pk_software" } set Sql "select max($nomPk) from $SchemaTable" set Last [SqlExec $Sql "GetFirstValue"] if {[regexp {^[0-9]+$} $Last]} { return [incr Last] } return 1 } proc NextResDuPdb {res chn mol} { set Lres [$mol _resnumber -chain $chn -polymer] set ires [lsearch $Lres $res] set deb [lindex $Lres [expr {$ires+1}]] return [list $deb [expr {$ires+1}]] } proc NglViewer {FichierPdb} { set Site [ZincrSite] LogWscope "site=$Site FileToViewWithNgl=$FichierPdb" set Html [Chabada "TemplateNglWali.html" "_site_=$Site" "_FileToViewWithNgl_=$FichierPdb" ] return $Html } proc NiceChildrenOf {TaxId} { set TaxId [Tax $TaxId "TaxId"] set LesC {} foreach C [Tax $TaxId Children] { lappend LesC [Tax $C Name] } return $LesC } proc NicePrintOfTree {Tree {Indent 0}} { set Indentation [string repeat " " $Indent] puts "$Indentation [ValueOfTree $Tree]" incr Indent foreach B [Branches $Tree] { NicePrintOfTree $B $Indent } } proc NiceRank {AbsRank MaxPossible} { set NiceRank(1) 1 set NiceRank(2) 2 set NiceRank(3) 3 set NiceRank(4) 4 set NiceRank(5) 5 set NiceRank(6) 6 set NiceRank(7) 7 set NiceRank(8) 8 set NiceRank(9) 9 if {[info exists NiceRank(AbsRank)]} { return $NiceRank(AbsRank) } set Rank [expr int(($AbsRank-9)*100/$MaxPossible) + 10] return $Rank } 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 NiceWebOfCluster {Texte} { set Liste {} foreach Ligne [split $Texte "\n"] { set GN "" scan $Ligne "%d %s %s" N Queue GN regsub {\-} $Queue " " NomProbeset scan $NomProbeset "%s %s" Nom Probeset set DE [DefinitionRapide $Nom] lappend Liste $Nom lappend LesPS $Probeset lappend LesN $N } return [RetinalGenesSummaryOnWeb $Liste "BestFriendsInCluster" 1_ProbeSet $LesPS 1_ClusterHit $LesN ] } proc Nice_M {M {Format ""} {Baratin ""}} { if {$Baratin=="" && ! [regexp {^\%} $Format]} { set Baratin $Format set Format "" } if {$Format==""} { set Format "%6.2f" } if {$Baratin==""} { set Nice {} } else { set Nice [list $Baratin] } foreach V $M { lappend Nice [Nice_V $V $Format] } return [join $Nice "\n"] } proc Nice_R {R {FormatAngle ""} {FormatAxe ""}} { if {$FormatAngle==""} { set FormatAngle "%5.1f" } if {$FormatAxe ==""} { set FormatAxe "%6.2f" } set D [AngleDeg [Angle_R $R]] return "[format $FormatAngle $D] [Nice_V [Axe_R $R] $FormatAxe]" } proc Nice_V {V {Format %6.2f} {Baratin ""}} { if {$Baratin=="" && ! [regexp {^\%} $Format]} { set Baratin $Format set Format "" } if {$Format==""} { set Format "%6.2f" } if {$Baratin==""} { set Nice "" } else { set Nice "$Baratin\n" } foreach x $V { append Nice [format "$Format" $x] } return $Nice } proc NiveauMinDuGO {GO {Type ""}} { ### Car un GO peut avoir differents niveaux ### if {$Type == ""} {set Type [Onto $GO Type]} set LesNiveaux [Onto $Type $GO LesNiveaux] if {$LesNiveaux == ""} {return} return [lindex [lsort -real $LesNiveaux] 0] } proc NiveauMinDuGO_EXISTEAILLEURS {GO {Type ""}} { ### Car un GO peut avoir differents niveaux ### if {$Type == ""} {set Type [Onto $GO Type]} set LesNiveaux [Onto $Type $GO LesNiveaux] if {$LesNiveaux == ""} {return} return [lindex [lsort -real $LesNiveaux] 0] } proc NiveauParFamille {} { global RepertoireDuGenome set Niveau 1 set OldFamille "" set Debut 1 set Longueur 899 set Orient "F" foreach Nom [ListeDesPABs] { set Famille [NomDeFamille $Nom] if {$Famille!=$OldFamille} { set Niveau [expr -$Niveau] incr Debut $Niveau } incr Debut 999 set Fin [expr $Debut+$Longueur] lappend LesBornes "$Nom $Debut $Fin $Orient" Espionne "$Nom $Alias $Famille $Debut $Niveau" set OldFamille $Famille } Espionne [SauveLesLignes $LesBornes dans "$RepertoireDuGenome/fiches/bornesdespabs.niveauparfamille"] exit } proc NmEnStock {NM} { global NmEnStock if {[info exists NmEnStock($NM)]} { return $NmEnStock($NM) } if {[info exists NmEnStock("EstCharge")]} { return "" } set NmEnStock("EstCharge") 1 set FichierNmEnStock "[Fiches]/NmEnStock" set Redondance 0 foreach Ligne [LesLignesDuFichier $FichierNmEnStock] { if { ! [regexp -nocase {[a-z0-9/]} $Ligne]} { continue } if {[regexp {^LOCUS +NM} $Ligne]} { set NmLu [StringApres LOCUS dans $Ligne] if {[info exists NmEnStock($NmLu)]} { set Redondance 1 ; unset NmEnStock($NmLu) } set NmCourant $NmLu set NmEnStock($NmCourant) $Ligne continue } append NmEnStock($NmCourant) "\n$Ligne" } if {$Redondance} { set FichierNmEnStockNew [TmpFile] foreach NmLu [array names NmEnStock] { AppendAuFichier $FichierNmEnStockNew $NmEnStock($NmLu) } Garde $FichierNmEnStock file rename -force $FichierNmEnStockNew $FichierNmEnStock } return [NmEnStock $NM] } proc NmToBlastP {Rep NomFic} { #Compteurs : set Path "$Rep/$NomFic" set CompteurLus 0 set CompteurEcrit 0 # Générer les requetes à partir des coordonnées # ============================================= set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Building NP queries" set FichierDesAccess [open "$Path.acc" "r"] set FichierDesRequetes [open "/tmp/NmToBlastP.bql" "w"] set CompteurLus 0 while { [gets $FichierDesAccess Ligne1] >=0 } { ScanLaListe $Ligne1 Distance NM incr CompteurLus set Moins "-" set Plus "+" #puts $FichierDesRequetes "ID * DB UCSC" #puts $FichierDesRequetes "WH SQLNATIVE SELECT protAcc from ucschuman.pureGene Where access = '$NM' fetch first 1 rows only" puts $FichierDesRequetes "ID $NM DB REFSEQRNA" puts $FichierDesRequetes "FD PROTEIN_ID" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } close $FichierDesRequetes close $FichierDesAccess set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Executing NP queries" #exec /biolo/bird/bin/birdql_client.sh /tmp/NmToBlastP.bql bird /tmp/NmToBlastP.res exit set FichierDesRequetesExecutees [open "/tmp/NmToBlastP.res" "r"] set FichierDesAccess [open "$Path.acc" "r"] set FichierNpPresents [open "$Path.pres" "w"] set FichierNpAbsents [open "$Path.abs" "w"] set CompteurProt 0 while { [gets $FichierDesRequetesExecutees Entete] >=0 } { gets $FichierDesRequetesExecutees Protein if { $Protein != "" } { regsub -all {PROTEIN_ID=} $Protein "" Protein set Protein [lindex [split $Protein "."] 0] gets $FichierDesAccess Ligne if { $Protein == "?" } { puts $FichierNpAbsents "$Ligne $Protein" } else { puts $FichierNpPresents "$Ligne $Protein" incr CompteurProt } } } close $FichierNpAbsents close $FichierNpPresents close $FichierDesAccess set FichierNpPresents [open "$Path.pres" "r"] set FichierDesRequetes2 [open "/tmp/NmToBlastP2.bql" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Building Sequence queries" while { [gets $FichierNpPresents Ligne] >=0 } { ScanLaListe $Ligne Distance NM NP puts $FichierDesRequetes2 "ID $NP DB REFSEQP" puts $FichierDesRequetes2 "FM FASTA" puts $FichierDesRequetes2 "//" } close $FichierDesRequetes2 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Executing Sequence queries" #exec /biolo/bird/bin/birdql_client.sh /tmp/NmToBlastP2.bql bird /tmp/NmToBlastP2.res set FichierDesRequetesExecutees2 [open "/tmp/NmToBlastP2.res" "r"] set FichierMiddle [open "$Path.mid" "w"] while { [gets $FichierDesRequetesExecutees2 Header] >=0 } { puts $FichierMiddle $Header gets $FichierDesRequetesExecutees2 Sequence set Sequence [string trim $Sequence] puts $FichierMiddle $Sequence } close $FichierMiddle close $FichierDesRequetesExecutees2 set FichierMiddle [open "$Path.mid" "r"] set FichierOut [open "$Path.tfa" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Purging bird file" while { [gets $FichierMiddle LigneMiddle] >= 0} { if { $LigneMiddle != "" } { puts $FichierOut $LigneMiddle } } close $FichierOut close $FichierMiddle set FichierOut [open "$Path.tfa" "r"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Executing Blasts" set CompteurBlast 0 set LigneOut2 "" while { [gets $FichierOut LigneOut] >= 0} { while { $LigneOut == ""} { gets $FichierOut LigneOut #Espionne "Un blanc donc je lis $LigneOut" } ScanLaListe $LigneOut Access Reste regsub -all -nocase {>} $Access "" Access incr CompteurBlast set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Blast $CompteurBlast ($Access)" set FichierBlast [open "$Rep/tfa/$CompteurBlast.$Access.tfa" "w"] puts $FichierBlast $LigneOut gets $FichierOut LigneOut while { $LigneOut != "" && [string range $LigneOut 0 0] != ">"} { #Espionne "Pas de blancs ni de header" puts $FichierBlast $LigneOut gets $FichierOut LigneOut } close $FichierBlast if {[catch {exec /bips/bin/blastall -p "blastp" -d "/blast/protein" -i "$Rep/tfa/$CompteurBlast.$Access.tfa" -o "$Rep/blastP/$CompteurBlast.$Access.blast" -m "9" -F "m S" -s T -e 0.0001} Message] } { Espionne "Error for $Access:\n$Message" } #exec /bips/bin/blastall -p "tblastn" -d "/blast/nr" -i "$Rep/tfa/$Access.tfa" -o "$rep/tblastN/$Access.blast" -m "9" -F "m S" -s T -e 0.0001 } close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne " - read : $CompteurLus" Espionne " - found proteins : $CompteurProt" Espionne " - blasted : $CompteurBlast" Espionne " - written : $CompteurEcrits" Espionne "$timestamp|NmToBlastP : End" } proc NmToBlastP2 {Rep NomFic} { #Compteurs : set Path "$Rep/$NomFic" set CompteurLus 0 set CompteurEcrit 0 # Générer les requetes à partir des coordonnées # ============================================= set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : Building NP queries" set FichierDesAccess [open "$Path.acc" "r"] set FichierDesAccessPurs [open "$Path.ac" "w"] set FichierDesRequetes [open "/tmp/NmToBlastP2.bql" "w"] set Tota "" set CompteurLus 0 set CompteurEcrits 0 while { [gets $FichierDesAccess Ligne1] >=0 } { ScanLaListe $Ligne1 Distance NM incr CompteurLus set Moins "-" set Plus "+" #puts $FichierDesRequetes "ID * DB UCSC" #puts $FichierDesRequetes "WH SQLNATIVE SELECT protAcc from ucschuman.pureGene Where access = '$NM' fetch first 1 rows only" puts $FichierDesRequetes "ID $NM DB REFSEQ" puts $FichierDesRequetes "FD AC,PROTEIN_ID" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } puts $FichierDesAccessPurs $Tota close $FichierDesRequetes close $FichierDesAccess set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : Executing NP queries" #exec /biolo/bird/bin/birdql_client.sh /tmp/NmToBlastP2.bql bird /tmp/NmToBlastP2.res set FichierDesRequetesExecutees [open "/tmp/NmToBlastP2.res" "r"] set FichierDesAccess [open "$Path.acc" "r"] set FichierNpPresents [open "$Path.pres" "w"] set FichierNpAbsents [open "$Path.abs" "w"] set CompteurProt 0 set toto 0 while { [gets $FichierDesRequetesExecutees Protein] >=0 } { if { [regexp {PROTEIN} $Protein] } { regsub -all {PROTEIN_ID=} $Protein "" Protein if {[regexp {.} $Protein] } { set Protein [lindex [split $Protein "."] 0] } gets $FichierDesAccess Ligne if { $Protein == "?" } { puts $FichierNpAbsents "$Ligne $Protein" } else { puts $FichierNpPresents "$Ligne $Protein" incr CompteurProt } } } close $FichierNpAbsents close $FichierNpPresents close $FichierDesAccess set FichierNpPresents [open "$Path.pres" "r"] set FichierDesRequetes2 [open "/tmp/NmToBlastP2.bql2" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : Building Sequence queries" while { [gets $FichierNpPresents Ligne] >=0 } { ScanLaListe $Ligne Distance NM NP puts $FichierDesRequetes2 "ID $NP DB REFSEQP" puts $FichierDesRequetes2 "FM FASTA" puts $FichierDesRequetes2 "//" } close $FichierDesRequetes2 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : Executing Sequence queries" #exec /biolo/bird/bin/birdql_client.sh /tmp/NmToBlastP2.bql2 bird /tmp/NmToBlastP2.res2 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : Building tfa files" set FichierDesRequetesExecutees2 [open "/tmp/NmToBlastP2.res2" "r"] set OldHeader "Pouet" set CompteurTfa 0 set CompteurHeader 0 while { [gets $FichierDesRequetesExecutees2 Header] >=0 } { if {$Header != "" } { incr CompteurHeader incr CompteurTfa ScanLaListe $Header Access Reste regsub -all -nocase {\>} $Access "" Access set FichierTfa [open "$Rep/tfa/$CompteurTfa.$Access.tfa" "w"] puts $FichierTfa $Header while {[gets $FichierDesRequetesExecutees2 Header] >= 0} { if {$Header != ""} { puts $FichierTfa $Header } else { break } } close $FichierTfa } } set Elimines [expr $CompteurHeader - $CompteurTfa] close $FichierDesRequetesExecutees2 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : $CompteurTfa tfa file written ($Elimines of $CompteurHeader were duplicates)" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : Executing Blasts" set CompteurBlast 0 foreach Fichier [glob -tails -directory "$Rep/tfa/" "*.tfa" ] { set toto [file tail $Fichier] regsub {.tfa} $toto "" Core incr CompteurBlast set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts "$timestamp|NmToBlastP2 : Blast $CompteurBlast ($Core)" #puts "/bips/bin/blastall -p blastp -d /blast/refseq-prot -i $Rep/tfa/$CompteurBlast.$Access.tfa -o $Rep/blastP/$CompteurBlast.$Access.bla -F \"m S\" -s T -e 0.0001" if {[catch {exec /bips/bin/blastall -p "blastp" -d "/blast/refseq-prot" -i "$Rep/tfa/$Fichier" -o "$Rep/blastP/$Core.blast" -F "m S" -s T -e 0.0001} Message] } { puts "Error for $Core:\n$Message" } incr CompteurEcrits #exec /bips/bin/blastall -p "tblastn" -d "/blast/nr" -i "$Rep/tfa/$Access.tfa" -o "$rep/tblastN/$Access.blast" -m "9" -F "m S" -s T -e 0.0001 } close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts " - read : $CompteurLus" puts " - found proteins : $CompteurProt" puts " - blasted : $CompteurBlast" puts " - written : $CompteurEcrits" puts "$timestamp|NmToBlastP2 : End" } proc NmaxPourUnAA {AA FichierCod} { #FichierCod est mus.cod set Nmax 0 if {![file exists $FichierCod]} {return} foreach Ligne [LesLignesDuFichier $FichierCod] { set Ligne [string trim $Ligne] if {$Ligne==""} {continue} if {[regexp "^$AA " $Ligne]} { scan $Ligne "%s %s %s" aa cod n if {$n>$Nmax} {set Nmax $n} } else {continue} } return $Nmax } proc NmsParLigne {I} { global NmsParLigne if {[info exists NmsParLigne($I)]} { return $NmsParLigne($I) } if {[info exists NmsParLigne("EstCharge")]} { return {} } set NmsParLigne("EstCharge") 1 set FichierNmsParLigne "[Fiches]/NmsParLigne" array set NmsParLigne [LesLignesDuFichier $FichierNmsParLigne] foreach {C Vs} [array get NmsParLigne] { foreach V [split $Vs " "] { if {[info exists NmsParLigne($V)]} { lappend NmsParLigne(NmMultiple) $V } lappend NmsParLigne($V) $C } } set NmsParLigne(NmMultiple) [lsort -unique $NmsParLigne(NmMultiple)] set NmsParLigne(Vide) {} foreach L [RetChip ListOf Index] { if {[NmsParLigne $L]=={}} { lappend NmsParLigne(Vide) $L } } return [NmsParLigne $I] } proc NoAtomicDe {e} { if {[string length $e] == 2} { set e [string totitle $e] } if {! [info exists ::Chm($e,na)]} { return 0 } else { return [set ::Chm($e,na)] } } proc NoCo {Action {No ""} {Co ""}} { global RepertoireDuGenome global NoCo global NoCoEstCharge Wup "NoCo 'NomCommande' manages the Criteria file and array NoCo" if { ! [info exists FichierNoCo]} { set FichierNoCo "$RepertoireDuGenome/fiches/nomcommande-criteres" } if {$Action=="Recharger"} { if {[info exists NoCoEstCharge]} {unset NoCoEstCharge} } if { ! [info exists NoCoEstCharge]} { while { ! [file exists $FichierNoCo]} { if {[OuiOuNon "Do I create a Criteria file ?"]} { set LesNoCos {} lappend LesNoCos "NewCriteria X X X" lappend LesNoCos "UnPAB Echo == ?" lappend LesNoCos "AAStartM AAStart == M" lappend LesNoCos "AAStartV AAStart == V" lappend LesNoCos "AAStartL AAStart == L" SauveLesLignes $LesNoCos dans $FichierNoCo } else { set NoCoEstCharge 1 break } } if { ! [info exists NoCoEstCharge]} { foreach Ligne [LesLignesDuFichier $FichierNoCo] { scan $Ligne "%s" NoLu regsub "$NoLu +" $Ligne "" CoLu set NoCo($NoLu) $CoLu } } set NoCoEstCharge 1 } switch $Action { "LaListeMerci" { return [lsort [array names NoCo]] } "ReCharger" { return [lsort [array names NoCo]] } "ReSauver" { set LesNoCos {} foreach No [lsort [array names NoCo]] { lappend LesNoCos "$No [set NoCo($No)]" } SauveLesLignes $LesNoCos dans $FichierNoCo return [NoCo "ReCharger"] } "MieuxNommer" { if {[info exists NoCo($No)] && [set NoCo($No)]==$Co} { return $No } FaireLire "Please give a name for the criteria\n$Co" set NoLu [Entre] while {[info exists NoCo($NoLu)] && [set NoCo($NoLu)]!=$Co} { if {[OuiOuNon " The Old criteria\n $NoLu [set NoCo($NoLu)]\n will be replaced by\n$NoLu $Co\n Do You accept ?"]} { break } set NoLu [Entre] } Espionne "$NoLu $Co" set NoCo($NoLu) $Co NoCo "ReSauver" return $NoLu } "Remplacer|Creer" { set NoCo($No) $Co return [NoCo "ReSauver"] } "Supprimer" { if {[info exists NoCo($No)]} {unset NoCo($No)} return [NoCo "ReSauver"] } "Titre" { if {[info exists NoCo($No)]} { return $No } else { return "" } } "Commande" { if {[info exists NoCo($No)]} { return [set NoCo($No)] } else { return "" } } "Tout" { if {[info exists NoCo($No)]} { return "$No [set NoCo($No)]" } else { return "" } } default { FaireLire "Illegal Action $Action" ; return "" } } } proc NoESTsOuGenemblPourLesLocsSansProteine {FichierClusters {Banque blastnest}} { set Liste [ListeMinimumDesJR $FichierClusters] set n 0 set RepProttfa "[RepertoireDuGenome]/prottfa" Espionne $Banque foreach Nom $Liste { if {[PolyLocalise $Nom]!="NoLocalization"} { set Fichier "$RepProttfa/$Nom" if {![file exists $Fichier]} { set LesCops [LesMeilleursCopainsDuBlast $Nom $Banque] if {$LesCops=={} ||[lindex $LesCops 0]=="File not yet available" ||[lindex $LesCops 0]=="No value" ||[lindex $LesCops 0]=="No hit"} { incr n } } } } return $n } proc NoLocEtEST {FichierClusters} { set NbNolocAvecESTs 0 foreach JR [ListeMinimumDesJR $FichierClusters] { if {[PolyLocalise $JR]=="NoLocalization"} { set LesCops [LesMeilleursCopainsDuBlast $JR "blastnest"] if {$LesCops=={} ||[lindex $LesCops 0]=="File not yet available" ||[lindex $LesCops 0]=="No value" ||[lindex $LesCops 0]=="No hit"} { continue } else { lappend LesBons $JR incr NbNolocAvecESTs } } } EspionneL $LesBons return $NbNolocAvecESTs } proc NoLocEtFonction {FichierClusters} { set NbNolocAvecFonction 0 foreach JR [ListeMinimumDesJR $FichierClusters] { if {[PolyLocalise $JR]=="NoLocalization"} { set LesCops [LesMeilleursCopainsDuBlast $JR "blastngenembl"] if {$LesCops=={} ||[lindex $LesCops 0]=="File not yet available" ||[lindex $LesCops 0]=="No value" ||[lindex $LesCops 0]=="No hit"} { continue } else { lappend LesBons $JR incr NbNolocAvecFonction } } } EspionneL $LesBons return $NbNolocAvecFonction } proc NoThrSco {} { global db if {0} { rename ::split ::TheRealSplit proc ::split {args} { #puts "[info level 0]" puts "split : [lindex [info level -1] 0]" flush stdout return [uplevel 1 ::TheRealSplit $args] } } #package require Thread set db root #file copy -force bench_bak.sql bench.sql sqlite3 $db bench.sql set Ljobs [BCM_CreateJobs2Do_Tests PF01239] #set Ljobs [lrange $Ljobs 10 12] #set Ljobs [lrange $Ljobs 227 228] Thr_SubmitNoThr -joblist $Ljobs -proccreate Tcree -procexe ScoreExe -procresults ScoreResults -nthreads 2 $db close exit } proc NodeSequence {NodeName} { return [string equal $NodeName "sequence"] } proc NoeudLRDe {AId n p Ln {Sens 0}} { global Abr ALMin ARMin set t [set Abr(Arbre,$AId)] set xn [$t get $n xcoord] set yn [$t get $n ycoord] set xp [$t get $p xcoord] set yp [$t get $p ycoord] set fx [expr {$xp - $xn}] set fy [expr {$yp - $yn}] set Nf [expr {sqrt($fx*$fx+$fy*$fy)}] if {$Nf != 0.} { set fx [expr {$fx/$Nf}] set fy [expr {$fy/$Nf}] } set Nl "" set Nr "" if {$Sens} { set ALMin -999. set ARMin -999. } else { set ALMin 999. set ARMin 999. } foreach d $Ln { if {$d eq "root"} {continue} if {! [$t isleaf $d]} {continue} if {$Sens} { set Llrxy [PrdtVec3 $AId $d $xn $yn $fx $fy] } else { set Llrxy [PrdtVec2 $AId $d $xn $yn $fx $fy] } lassign $Llrxt Nlt Nrt if {$Nlt ne "" && $Nlt ne $Nl} {set Nl $Nlt} if {$Nrt ne "" && $Nrt ne $Nr} {set Nr $Nrt} } return [list $Nl $Nr] } proc NomAffiche {AId n} { global Abr TDesOrganismes TDesBId TDesDescriptifs TDesSeqnames if {[TypeAli] ni [list "XML" "ORD"]} {return $n} switch [set Abr($AId,TAff)] { "Seq Name" { return [set TDesSeqnames($n)] } "Accession" { return $n } "Bank Id" { return [set TDesBId($n)] } "Organism" { if {[info exists TDesOrganismes($n)]} { return [set TDesOrganismes($n)] } else { return "Unknown" } } "Description" { if {[info exists TDesDescriptifs($n)]} { return [set TDesDescriptifs($n)] } else { return "None" } } "Acc + BankId" { return "$n - [set TDesBId($n)]" } "Acc + Orga" { if {[info exists TDesOrganismes($n)]} { return "$n - [set TDesOrganismes($n)]" } else { return "$n - Unknown" } } "Acc + Desc" { if {[info exists TDesDescriptifs($n)]} { return "$n - [set TDesDescriptifs($n)]" } else { return "$n - None" } } "Orga + Desc" { if {[info exists TDesOrganismes($n)]} {set to [set TDesOrganismes($n)]} {set to ""} if {[info exists TDesDescriptifs($n)]} {set td [set TDesDescriptifs($n)]} {set td ""} return "$to - $td" } } } proc NomCompletDeLaSuperClasse {SP} { if {[regexp "Hy" $SP] } { return "Hypothtical protein" } if {[regexp "NC" $SP] } { return "Not Classified" } if {[regexp "CP" $SP] } { return "Cellular Processing" } if {[regexp "Tl" $SP] } { return "TransLation" } if {[regexp "RT" $SP] } { return "Replication and Transcription" } if {[regexp "CE" $SP] } { return "Cellular Envelope" } if {[regexp "Me" $SP] } { return "Metabolisme" } if {[regexp "tR" $SP] } { return "tRNAs tranfert RiboNucleic Acids" } if {[regexp "RR" $SP] } { return "rRNAs Ribosomal RiboNucleic Acids" } if {[regexp "IG" $SP] } { return "InterGenic region" } FaireLire "SuperClasse $SP inconnue ... I call it 'Unknown SuperClass" return "Unknown SuperClass" } proc NomDe {Machin} { global NumeroDe if { ! [info exists NumeroDe] } {set NumeroDe 0000} incr NumeroDe return ".$Machin$NumeroDe" } proc NomDeFamille {Nom} { global NomDeFamille set NomDeFamilleDansAlias 1 if {[info exists NomDeFamille($Nom)]} {return [set NomDeFamille($Nom)]} if {[info exists NomDeFamille("EstCharge")]} {return "UnknownFamily"} set NomDeFamille(LaListeMerci) {} foreach PAB [ListeDesPABs] { set Fam "UnknownFamily" if {$NomDeFamilleDansAlias} { set Alias [Alias $PAB] regsub {_.*$} $Alias "" Fam } set NomDeFamille($PAB) $Fam if { ! [info exists DejaVu($Fam)]} { lappend NomDeFamille(LaListeMerci) $Fam set DejaVu($Fam) $PAB } } set NomDeFamille("EstCharge") 1 return [NomDeFamille $Nom] } proc NomDeFichierSansExtension {NomAvecExtension} { set LeNomEtLextension [split $NomAvecExtension .] set NomSansExtension [lindex $LeNomEtLextension 0] return $NomSansExtension } proc NomDeGene {Nom} { set ValiGN [ExtraitInfo $Nom "ValiGN"] if {$ValiGN == ""} { return $Nom } else { return $ValiGN } } proc NomDeGeneIssuDeDefinitionApproximative {Nom} { set DA [DefinitionApproximative $Nom] regsub -nocase {\(taken from [a-z]*\)} $DA "" DA set DA [string trim $DA] if { ! [regexp -nocase {\([a-z_\-]+\)$} $DA Match]} { return "" } regsub -all {[\(\)]} $Match "" GNDA return $GNDA } proc NomDeGeneIssuDeDefinitionApproximativePourTous {{Ask ""}} { global InformeSansDemander if {[info exists InformeSansDemander]} { set Memo $InformeSansDemander } if {$Ask==""} { set Ask 1 } else { set Ask 0 } set InformeSansDemander [expr ! $Ask] foreach Nom [ListeDesPABs] { set GNDA [NomDeGeneIssuDeDefinitionApproximative $Nom] if {$GNDA==""} { continue } if {$Ask} { set OldGN [NomDeGene $Nom] if {$OldGN=="" || [YaPABdans $OldGN]} { set Message "use $GNDA " } else { set Message "replace $OldGN with $GNDA " } if { ! [OuiOuNon "Can I $Message as Gene Name for $Nom ?"]} { continue } } Informe $Nom "ValiGN: $GNDA" if {$Ask && [OuiOuNon "Do I stop asking ?"]} { set Ask 0 set InformeSansDemander 1 } } if {[info exists Memo]} { set InformeSansDemander $Memo } else { unset InformeSansDemander } } proc NomDeLaFeuille {Arbre} { return [lindex $Arbre 0] } proc NomDeLaFrame {A Orient} { global NomDesFrames if { ! [info exists NomDesFrames]} { set NomDesFrames(0,F) "c" set NomDesFrames(1,F) "a" set NomDesFrames(2,F) "b" set NomDesFrames(0,R) "d" set NomDesFrames(1,R) "e" set NomDesFrames(2,R) "f" set NomDesFrames(TRNA,F) "T" set NomDesFrames(TRNA,R) "t" set NomDesFrames(ARN,F) "N" set NomDesFrames(ARN,R) "n" set NomDesFrames(TROU,F) "Z" set NomDesFrames(TROU,R) "z" } return [set NomDesFrames($A,$Orient)] } proc NomDeMSP {{Qui ""} {Quoi ""}} { global NomDeMSP if {$Quoi==""} { set Quoi "Nom" } set Qui [string touppe $Qui] set Quoi [string touppe $Quoi] regsub -all "_" $Qui " " Qui if {[info exists NomDeMSP($Qui,$Quoi)]} { return $NomDeMSP($Qui,$Quoi) } if {[info exists NomDeMSP("EstCharge")]} { if {[info exists NomDeMSP($Qui,NOM)]} { set Nom $NomDeMSP($Qui,NOM) if {[info exists NomDeMSP($Nom,$Quoi)]} { return $NomDeMSP($Nom,$Quoi) } } return "" } set NomDeMSP("EstCharge") 1 set NomDeMSP(LISTOF,KEY) [list A AAA System Definition Nom] foreach Nom [ListeDesPABs] { set A [ExtraitInfo $Nom A:] set AAA [ExtraitInfo $Nom AAA:] set SYSTEM [ExtraitInfo $Nom System:] set DEFINITION [ExtraitInfo $Nom Definition:] set NOM $Nom foreach K $NomDeMSP(LISTOF,KEY) { set K [string toupper $K] set NomDeMSP($Nom,$K) [set $K] set NomDeMSP([string toupper [set $K]],NOM) $Nom lappend NomMSP(LISTOF,$K) [set $K] } } return [NomDeMSP $Qui $Quoi] } proc NomDeMac {imac} { return [$::db eval {select name from mac where pk_mac=$imac}] } proc NomDeScene {Nom} { set Numero [NumeroDu $Nom] set ValiGN [ExtraitInfo $Nom "ValiGN"] if {$ValiGN != "" } { return "$Numero/$ValiGN" } if {[OnTraiteDesCDNAs]} { set CC [CodeClone $Nom] if {[OnTraiteDesAffymetrix]} { set GN $CC } else { set OwnerOfCDNA [OwnerOfCDNA $Nom] if {$OwnerOfCDNA!=""} { set OwnerOfCDNA "${OwnerOfCDNA}_" } set GN "${OwnerOfCDNA}$CC" } if {$GN!=""} {return "$Numero/$GN" } } if {[OnTraiteUneCollection]} { set Alias [Alias $Nom] if {$Alias!=""} { return "$Numero/$Alias" } if {[OnTraiteSpine]} { set SpineID [SpineID $Nom] if {$SpineID!=""} { return "$Numero/$SpineID" } } } set GN_Narcisse [ExtraitInfo $Nom "GN_Narcisse"] if {$GN_Narcisse!=""} { regsub -nocase { or .*} $GN_Narcisse "" GN_Narcisse return "$Numero/$GN_Narcisse" } return "$Nom" } proc NomDuAlias {Alias} { global NomDuAlias set ALIAS [string toupper $Alias] if {[info exists NomDuAlias($Alias)]} { return [set NomDuAlias($Alias)] } if {[info exists NomDuAlias($ALIAS)]} { return [set NomDuAlias($ALIAS)] } if {[info exists NomDuAlias("EstCharge")]} { return "" } set NomDuAlias("EstCharge") 1 set LesAlias {} foreach Nom [ListeDesPABs] { set AliasLu [Alias $Nom] set ALIASLU [string toupper $AliasLu] if {$AliasLu==""} { continue } lappend LesAlias $AliasLu lappend NomDuAlias($AliasLu) $Nom if {$ALIASLU!=$AliasLu} { lappend NomDuAlias($ALIASLU) $Nom } } set NomDuAlias(LESALIAS) [lsort -unique $LesAlias] return [NomDuAlias $Alias] } proc NomDuCourant {K} { set LesTags [$K gettags [$K find withtag current]] foreach Tag $LesTags { if {[EstUnPAB $Tag]} { return $Tag } } return [lindex $LesTags 0] } proc NomDuFichierDesOligosPourMutation {FicOli} { set FicOliOriginal $FicOli set Prem 1 while {$Prem || $FicOli==""} { set Prem 0 FaireLire "Please choose a file to store the oligos I'll create." set Rep [file dirname $FicOli] set Queue [file tail $FicOli] if { ! [regexp ".tfa$" $Queue]} { regsub {\.[^.]+$} $Queue "" Queue append Queue ".tfa" } set FicOli "$Rep/olimut_$Queue" set FicOli [FichierPourSaveAs $FicOli] if {$FicOli==""} { if {[OuiOuNon "Do I skip creation of oligos ?"]} {return ""} set FicOli $FicOliOriginal set Prem 1 } } while {[file exists $FicOli]} { if {[OuiOuNon "$FicOli\nalready exists. Do I append to it ?"]} { return $FicOli } if {[OuiOuNon "$FicOli\nalready exists. Do I replace it ?"]} { file delete -force $FicOli return $FicOli } if {[OuiOuNon "$FicOli\nalready exists. Do I skip creation of oligos ?"]} { return "" } if {[OuiOuNon "$FicOli\nalready exist. Do You want to change it ?"]} { return [NomDuFichierDesOligosPourMutation $FicOli] } } return $FicOli } proc NomDuFichierDesOligosPourSequencage {FicOli} { set FicOliOriginal $FicOli set Prem 1 while {$Prem || $FicOli==""} { set Prem 0 FaireLire "Please choose a file to store the oligos I'll create." set Rep [file dirname $FicOli] set Queue [file tail $FicOli] if { ! [regexp ".tfa$" $Queue]} { regsub {\.[^.]+$} $Queue "" Queue append Queue ".tfa" } set FicOli "$Rep/oliseq_$Queue" set FicOli [FichierPourSaveAs $FicOli] if {$FicOli==""} { if {[OuiOuNon "Do I skip creation of oligos ?"]} {return ""} set FicOli $FicOliOriginal set Prem 1 } } while {[file exists $FicOli]} { if {[OuiOuNon "$FicOli\nalready exists. Do I append to it ?"]} { return $FicOli } if {[OuiOuNon "$FicOli\nalready exists. Do I replace it ?"]} { file delete -force $FicOli return $FicOli } if {[OuiOuNon "$FicOli\nalready exists. Do I skip creation of oligos ?"]} { return "" } if {[OuiOuNon "$FicOli\nalready exist. Do You want to change it ?"]} { return [NomDuFichierDesOligosPourSequencing $FicOli] } } return $FicOli } proc NomDuMeilleurAful {Nom} { set mAF [MeilleurAful $Nom] scan [MeilleurAful $Nom] "%s %s %f %s" AF AFok PN Raison if {$AFok} { return $AF } else { return "" } } proc NomDuOldGI {GI} { global NomDuOldGI set GI [string toupper $GI] if {[info exists NomDuOldGI($GI)]} { return $NomDuOldGI($GI) } if {[info exists NomDuOldGI("EstCharge")]} { return "" } set NomDuOldGI("EstCharge") 1 foreach Nom [ListeDesPABs] { set OldGI [ExtraitInfo $Nom "OldGI:"] if {$OldGI==""} { continue } set OLDGI [string toupper $OldGI] set NomDuOldGI($OldGI) $Nom set NomDuOldGI($OLDGI) $Nom set Court [string range $OLDGI 0 29] if {[info exists DejaVu($Court)]} { FaireLire "Deja vu $Court $DejaVu($Court)" } set DejaVu($Court) $OLDGI set NomDuOldGI($Court) $Nom } return [NomDuOldGI $GI] } proc NomLigne {{Qui ""} {Quoi ""}} { global NomLigne if {$Qui==""} { set Qui "ListeDes" ; set Quoi "Lignes" } if {$Quoi==""} { if {[EstUnPAB $Qui]} { set Quoi "LigneIeme" } if { ! [regexp {[A-Z]} $Qui]} { set Quoi "Ref" } } if {[info exists NomLigne($Qui,$Quoi)]} { return $NomLigne($Qui,$Quoi) } if {[info exists NomLigne("EstCharge")]} { return "" } set NomLigne("EstCharge") "" set FichierNomLigne "[Fiches]/NomLigne.txt" foreach Ligne [LesLignesDuFichier $FichierNomLigne] { scan $Ligne "%s %d %d" Nom Lig Ieme set NomLigne($Nom,Ligne) $Lig set NomLigne($Nom,Ieme) $Ieme set NomLigne($Nom,LigneIeme) "$Lig $Ieme" if {$Ieme==0} { set NomLigne($Lig,Ref) $Nom } set NomLigne($Lig,Imax) $Ieme lappend NomLigne($Lig,Noms) $Nom lappend NomLigne(ListeDes,Lignes) $Lig } set NomLigne(ListeDes,Lignes) [ListeSansDoublon $NomLigne(ListeDes,Lignes)] return [NomLigne $Qui $Quoi] } proc NomOligoEquivalent {PAB NomOligo DirOligo1 DirOligo2} { Wup "Permet de donner le nom de l oligo equivalent a NomOligo dans une autre recherche" set FichierOligo1 "$DirOligo1/${PAB}.oligo" set Debut [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo Debut] set Fin [InterrogeInfoDeLOligo $FichierOligo1 $NomOligo Fin] set FichierOligo2 "$DirOligo2/${PAB}.oligo" set LesOligos [InterrogeInfoDeLOligo $FichierOligo2 LesNoms] foreach Oligo $LesOligos { if {! [regexp -nocase {[a-z]+ || [0-9]+} $LesOligos]} {continue} set AutreNomOligo $Oligo set AutreDebut [InterrogeInfoDeLOligo $FichierOligo2 $Oligo Debut] if {$AutreDebut != $Debut} {continue} set AutreFin [InterrogeInfoDeLOligo $FichierOligo2 $Oligo Fin] set AutreNbCandidats [InterrogeInfoDeLOligo $FichierOligo2 $Oligo NbCandidats] return $AutreNomOligo } return "" } proc NombreDOrganismesAyantMemeOperons {Nom} { set ListeOMO [ListeDesOrganismesAyantMemeOperon $Nom] } proc NombreDeBaseDe {Seq Quoi} { Wup "Rend le nombre de fois que Quoi apparait dans Seq" set Results [regexp -nocase -all "$Quoi" $Seq] return $Results } proc NombreDeBasesAlignables {FichierBlast BanqueId} { Wup "Nb de bases que l'on aurait pu aligner au maximum (Max - Min + 1)" Wup "-------------XXXXX----XXXXXX---------------" Wup " | |" Wup " ------XXXXX----XXXXXX--------------------" Wup " | |" Wup " Min Max" set NbSegments [AskBlast $FichierBlast BanqueId $BanqueId NbSegment] if {$NbSegments == ""} {return} set TailleQ [AskBlast $FichierBlast Taille] set TailleS [AskBlast $FichierBlast BanqueId $BanqueId Taille] set DQMin 1e200 set FQMax 0 set DSMin 1e200 set FSMax 0 for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { set DQ [Mini [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment DQ] [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment FQ]] set FQ [Maxi [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment DQ] [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment FQ]] set DS [Mini [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment DS] [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment FS]] set FS [Maxi [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment DS] [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment FS]] if {$DQ < $DQMin} {set DQMin $DQ} if {$FQMax < $FQ } {set FQMax $FQ} if {$DS < $DSMin} {set DSMin $DS} if {$FSMax < $FS } {set FSMax $FS} } set DistFQMaxToEnd [expr $TailleQ - $FQMax + 1] set DistFSMaxToEnd [expr $TailleS - $FSMax + 1] if {$DSMin < $DQMin } {set Debut [expr $DQMin - $DSMin + 1 ]} else {set Debut 1 } if {$DistFSMaxToEnd < $DistFQMaxToEnd} {set Fin [expr $TailleQ - $DistFQMaxToEnd + $DistFSMaxToEnd]} else {set Fin $TailleQ} return [expr $Fin - $Debut + 1] } proc NombreDeBasesAlignables_TabBlast {aTabBlast BanqueId} { upvar $aTabBlast TabBlast if {![info exists TabBlast]} {return 0} Wup "Nb de bases que l'on aurait pu aligner au maximum (Max - Min + 1)" Wup "-------------XXXXX----XXXXXX---------------" Wup " | |" Wup " ------XXXXX----XXXXXX--------------------" Wup " | |" Wup " Min Max" set NbSegments [set TabBlast($BanqueId,NbSegment)] set TailleQ [set TabBlast(Taille) ] set TailleS [set TabBlast($BanqueId,Taille)] set DQMin 1e200 set FQMax 0 set DSMin 1e200 set FSMax 0 for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { set DQ [Mini [set TabBlast($BanqueId,$Segment,DQ)] [set TabBlast($BanqueId,$Segment,FQ)]] set FQ [Maxi [set TabBlast($BanqueId,$Segment,DQ)] [set TabBlast($BanqueId,$Segment,FQ)]] set DS [Mini [set TabBlast($BanqueId,$Segment,DS)] [set TabBlast($BanqueId,$Segment,FS)]] set FS [Maxi [set TabBlast($BanqueId,$Segment,DS)] [set TabBlast($BanqueId,$Segment,FS)]] if {$DQ < $DQMin} {set DQMin $DQ} if {$FQMax < $FQ } {set FQMax $FQ} if {$DS < $DSMin} {set DSMin $DS} if {$FSMax < $FS } {set FSMax $FS} } set DistFQMaxToEnd [expr $TailleQ - $FQMax + 1] set DistFSMaxToEnd [expr $TailleS - $FSMax + 1] if {$DSMin < $DQMin } {set Debut [expr $DQMin - $DSMin + 1 ]} else {set Debut 1 } if {$DistFSMaxToEnd < $DistFQMaxToEnd} {set Fin [expr $TailleQ - $DistFQMaxToEnd + $DistFSMaxToEnd]} else {set Fin $TailleQ} return [expr $Fin - $Debut + 1] } proc NombreDeBasesContinuesMax {FichierTFA} { set Seq [QueLaSequenceDuTFA $FichierTFA] set i 0 set TailleMax 0 while {[regexp -nocase -indices -start $i {[ATCG]+} $Seq LesBornes]} { set Taille [expr [lindex $LesBornes 1] - [lindex $LesBornes 0] + 1] if {$TailleMax < $Taille} {set TailleMax $Taille} set i [expr [lindex $LesBornes 1] + 1] } return $TailleMax } proc NombreDeBasesDansLesAlignements {FichierBlast BanqueId {Quoi Query}} { if {![file exists $FichierBlast]} {return 0} Wup " Nb de bases dans les alignements de la query/subject" Wup " -------------XXX----XXXX--------------- " Wup " | | | | " Wup " -----XXX----XXXX--------- " Wup " 000000000000011100001111000000000000000 " Wup " " Wup " Nb de bases dans les alignements = Somme des 1" set NbBasesDansLesAlignements 0 set NbSubjectDansBlast [AskBlast $FichierBlast NbSubject] if {$NbSubjectDansBlast == ""} {return} for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [AskBlast $FichierBlast Subject $i] set BId_Court $BId #Modif Jean #^[0-9]+_[0-9]+$ pour les access de jean if {[regexp "_" $BId_Court] && [regexp {^[a-zA-Z]{,2}[0-9]+_[0-9]+$} $BId_Court]} { regsub {_[0-9]+$} $BId "" BId_Court } #Espionne "2 $BId_Court vs $BId vs $BanqueId" if {$BId_Court != $BanqueId} {continue} set NbSegments [AskBlast $FichierBlast BanqueId $BId NbSegment] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { if {[string equal -nocase $Quoi "Query"]} { set D [AskBlast $FichierBlast BanqueId $BId Segment $Segment DQ] set F [AskBlast $FichierBlast BanqueId $BId Segment $Segment FQ] } else { set D [AskBlast $FichierBlast BanqueId $BId Segment $Segment DS] set F [AskBlast $FichierBlast BanqueId $BId Segment $Segment FS] } if {$F < $D} {set tmp $D;set D $F;set F $tmp} for {set j $D} {$j <= $F} {incr j} { if {![info exists TabTmp($j)]} {incr NbBasesDansLesAlignements} set TabTmp($j) 1 } } } if {[info exists TabTmp]} {unset TabTmp} return $NbBasesDansLesAlignements } proc NombreDeBasesDansLesAlignements_TabBlast {aTabBlast BanqueId {Quoi Query}} { upvar $aTabBlast TabBlast if {![info exists TabBlast]} {return 0} Wup " Nb de bases dans les alignements de la query/subject" Wup " -------------XXX----XXXX--------------- " Wup " | | | | " Wup " -----XXX----XXXX--------- " Wup " 000000000000011100001111000000000000000 " Wup " " Wup " Nb de bases dans les alignements = Somme des 1" set NbBasesDansLesAlignements 0 set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i)] set BId_Court $BId if {[regexp "_" $BId_Court] && ![regexp {^[0-9]+_[0-9]+$} $BId_Court]} { regsub {_[0-9]+$} $BId "" BId_Court } if {$BId_Court != $BanqueId} {continue} set NbSegments [set TabBlast($BId,NbSegment)] for {set Segment 1} {$Segment <= $NbSegments} {incr Segment} { if {$Quoi == "Query"} { set D [set TabBlast($BId,$Segment,DQ)] set F [set TabBlast($BId,$Segment,FQ)] } else { set D [set TabBlast($BId,$Segment,DS)] set F [set TabBlast($BId,$Segment,FS)] } if {$F < $D} {set tmp $D;set D $F;set F $tmp} for {set j $D} {$j <= $F} {incr j} { if {![info exists TabTmp($j)]} {incr NbBasesDansLesAlignements} set TabTmp($j) 1 } } } if {[info exists TabTmp]} {unset TabTmp} return $NbBasesDansLesAlignements } proc NombreDeBasesDansRepeat {SequenceDuCDNAARemasquer SequenceDuCDNARemasquee} { set NombreDeBasesRemasquees 0 foreach Base [split $SequenceDuCDNAARemasquer ""] BaseReMasquee [split $SequenceDuCDNARemasquee ""] { if {$Base != "N" && $BaseReMasquee == "N" } {incr NombreDeBasesRemasquees} } return $NombreDeBasesRemasquees } proc NombreDeBasesEnCommun {FichierBlast BanqueId {Quoi Query} {WhatSens BothSens}} { if {![file exists $FichierBlast]} {return 0} Wup " Nb de bases alignes (A) dans les segments alignes (X) de la query/subject" Wup " ----------AAAXAAXA----AAXXAAXXA--------------- " Wup " ||| || | || || | " Wup " ---AAAXAAXA----AAXXAAXXA------- " Wup " 0000000000111011010000110011001000000000000000 Ex par rapport à Query" Wup " " Wup " Nb de bases alignees = Somme des 1" if {[string equal -nocase $Quoi "Query"]} { set LeProfil [LeProfilDeLAlignementDeLaQuery $FichierBlast $BanqueId $WhatSens] } else { set LeProfil [LeProfilDeLAlignementDuSubject $FichierBlast $BanqueId $WhatSens] } set NbBasesEnCommun 0 foreach Base $LeProfil {if {$Base != 0} {incr NbBasesEnCommun}} return $NbBasesEnCommun } proc NombreDeBasesEnCommun_TabBlast {aTabBlast BanqueId {Quoi Query} {WhatSens BothSens}} { upvar $aTabBlast TabBlast Wup " Nb de bases alignes (A) dans les segments alignes (X) de la query/subject" Wup " ----------AAAXAAXA----AAXXAAXXA--------------- " Wup " ||| || | || || | " Wup " ---AAAXAAXA----AAXXAAXXA------- " Wup " 0000000000111011010000110011001000000000000000 Ex par rapport à Query" Wup " " Wup " Nb de bases alignees = Somme des 1" if {![info exists TabBlast]} {return 0} set NbBasesEnCommun 0 if {$Quoi == "Query"} { set LeProfil [LeProfilDeLAlignementDeLaQuery_TabBlast TabBlast $BanqueId $WhatSens] } else { set LeProfil [LeProfilDeLAlignementDuSubject_TabBlast TabBlast $BanqueId $WhatSens] } foreach Base $LeProfil {if {$Base != 0} {incr NbBasesEnCommun}} return $NbBasesEnCommun } proc NombreDeBasesFiltrees {FichierBlast BanqueId {Segment 1} {Quoi Query}} { if {![file exists $FichierBlast]} {return 0} Wup "Nb de bases filtrees dans le Segment aligne (A) par blast ou repeatmasker (X)" Wup " ----------AAAAXXXAAAAAAAAAA---------------" Wup " 000000000000001110000000000000000000000000 " Wup " " Wup " NbFiltree = Somme des 1" set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == ""} {return} if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "BLASTP" || $TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} { set BaseFiltree "X" } elseif {$TypeDeBlast == "BLASTN"} { set BaseFiltree "n" } if {[AskBlast $FichierBlast BanqueId $BanqueId NbSegment ] == ""} {return 0} set AlignLineaire [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment AlignLineaire] if {$AlignLineaire == ""} {return 0} if {[string equal -nocase $Quoi "Query"]} { set LAli [split [lindex [split $AlignLineaire "\n"] 0] ""] } else { set LAli [split [lindex [split $AlignLineaire "\n"] 2] ""] } set nFiltres 0 foreach Base $LAli {if {$Base == $BaseFiltree} {incr nFiltres}} return $nFiltres } proc NombreDeBasesFiltrees_TabBlast {aTabBlast BanqueId {Segment 1} {Quoi Query}} { upvar $aTabBlast TabBlast Wup "Nb de bases filtrees dans le Segment aligne (A) par blast ou repeatmasker (X)" Wup " ----------AAAAXXXAAAAAAAAAA---------------" Wup " 000000000000001110000000000000000000000000 " Wup " " Wup " NbFiltree = Somme des 1" if {![info exists TabBlast]} {return 0} set TypeDeBlast [set TabBlast(TypeDeBlast)] if {$TypeDeBlast == "BLASTX" || $TypeDeBlast == "BLASTP" || $TypeDeBlast == "TBLASTN" || $TypeDeBlast == "TBLASTX"} { set BaseFiltree "X" } elseif {$TypeDeBlast == "BLASTN"} { set BaseFiltree "n" } if {![info exists TabBlast($BanqueId,NbSegment)]} {return 0} if {![info exists TabBlast($BanqueId,$Segment,AlignLineaire)]} {return 0} if {$Quoi == "Query"} { set LAli [split [lindex [split [set TabBlast($BanqueId,$Segment,AlignLineaire)] "\n"] 0] ""] } else { set LAli [split [lindex [split [set TabBlast($BanqueId,$Segment,AlignLineaire)] "\n"] 2] ""] } set nFiltres 0 foreach Base $LAli {if {$Base == $BaseFiltree} {incr nFiltres}} return $nFiltres } proc NombreDeBasesMasquees {FichierTFA} { if {![file exists $FichierTFA]} {return} set n 0 foreach Base [split [string toupper [string trim [QueLaSequenceDuTFA $FichierTFA]]] ""] { if {$Base == "N" || $Base == "X"} {incr n} } return $n } proc NombreDeCopainsDansBlast {{Nom ""}} { global NombreDeCopainsDansBlast if {[regexp -nocase {_?Reload_?} $Nom]} { if {[info exists NombreDeCopainsDansBlast]} { unset NombreDeCopainsDansBlast } regsub -nocase {_?Reload_?} $Nom "" Nom return [NombreDeCopainsDansBlast $Nom] } if {[info exists NombreDeCopainsDansBlast($Nom)]} { return $NombreDeCopainsDansBlast($Nom) } if {[info exists NombreDeCopainsDansBlast("EstCharge")]} { return $NombreDeCopainsDansBlast("EstCharge") } set NombreDeCopainsDansBlast("EstCharge") -1 set Fichier "[RepertoireDuGenome]/fiches/nombredecopainsdansblast" set NombreDeCopainsDansBlast(Filename) $Fichier if { ! [file exists $Fichier]} { return [set NombreDeCopainsDansBlast("EstCharge") -2] } foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[A-Z_0-9]+ +[0-9]+} $Ligne]} { continue } scan $Ligne "%s %d" NomLu nCops set NombreDeCopainsDansBlast($NomLu) $nCops } return [NombreDeCopainsDansBlast $Nom] } proc NombreDeHitsParLigne {FichierIn FichierOut} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "NombreDeHitsParLigne : Start" set FileIn [open "$FichierIn" "r"] #set FileOut [open "$FichierOut" "w"] set reads 0 foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15} { set count($I) 0 } while { [gets $FileIn Ligne] >=0 } { incr reads set Nb [llength [regexp -all -nocase -inline {Homo} $Ligne]] #puts $FileOut $Nb incr count($Nb) } foreach I { 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 } { set percent [expr 100 * $count($I) / $reads] Espionne $percent } close $FileIn #close $FileOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "NombreDeHitsParLigne : End" } proc NombreDeHomologues {Nom {Type homo}} { global NombreDeHomologues global RepertoireDuGenome global NotreOrga set Type [string range [string tolower $Type] 0 3] if {[info exists NombreDeHomologues($Nom,$Type)]} { return [set NombreDeHomologues($Nom,$Type)] } if {[info exists NombreDeHomologues]} { return 0 } set FichierNombreHomo "$RepertoireDuGenome/fiches/nombredehomologues" if {[file exists $FichierNombreHomo]} { foreach Ligne [LesLignesDuFichier $FichierNombreHomo] { scan $Ligne "%s %d %d %d" NomLu nHomologues nOrthologues nOrganismes set NombreDeHomologues($NomLu,homo) $nHomologues set NombreDeHomologues($NomLu,orth) $nOrthologues set NombreDeHomologues($NomLu,orga) $nOrganismes } set NombreDeHomologues(Bidon) "EstCharge" return [NombreDeHomologues $Nom $Type] } set FichierPIC "$RepertoireDuGenome/fiches/piclustalw.$NotreOrga" if { ! [file exists $FichierPIC]} { return -1 } foreach Ligne [LesLignesDuFichier $FichierPIC] { set nHomologues 0 set nOrthologues 0 set nOrganismes 0 scan $Ligne "%s" NomLu if {[info exists DejaVu]} { unset DejaVu } foreach {Orga PI} [lrange [split $Ligne " "] 1 end] { if {$PI<20} { break } incr nHomologues if {$Orga==$NotreOrga} { continue } incr nOrthologues if {[info exists DejaVu($Orga)]} { continue } set DejaVu($Orga) 1 incr nOrganismes } set NombreDeHomologues($NomLu,homo) $nHomologues set NombreDeHomologues($NomLu,orth) $nOrthologues set NombreDeHomologues($NomLu,orga) $nOrganismes lappend LaSauvegarde "$NomLu $nHomologues $nOrthologues $nOrganismes" } SauveLesLignes $LaSauvegarde dans $FichierNombreHomo set NombreDeHomologues(Bidon) "EstCharge" return [NombreDeHomologues $Nom $Type] } proc NombreDeJumeauxOuListeDesJumeaux {Nom Fichier {Liste 0}} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set PremierElement [lindex $Ligne 0] set LesElements [split $Ligne " "] set NbElements [llength $LesElements] if {$NbElements==1 && $Nom==$PremierElement} { return "0" } set Rang 0 if {$NbElements>1} { foreach Element $LesElements { if {$Nom==$Element} { set LesElements [lreplace $LesElements $Rang $Rang] if {$Liste==0} { #si on ne veut pas la liste set NbJumeaux [llength $LesElements] return "$NbJumeaux" } else {return $LesElements} } else { incr Rang continue } } } } } proc NombreDeOrganismesOrthologues {Nom} { return [NombreDeHomologues $Nom orga] } proc NombreDeOrthologues {Nom} { return [NombreDeHomologues $Nom orth] } proc NombreDePDBDansTfasdescopains {CodeGscope} { set NbPDB 0 set FichierTfaDesCop [RepertoireDuGenome]/tfasdescopains/$CodeGscope set Lignes [LesLignesDuFichier $FichierTfaDesCop] foreach l $Lignes { if {[regexp {^>(\w*)} $l tmp access]} { #Faut virer le > sinon le prends pas comme un PDB... scan $access "%s" Id if {[EstUnAccessPDB $Id]} { #Espionne "Est un PDB: $Id" incr NbPDB } } } return $NbPDB } proc NombreDeParaloguesDe {Nom} { return [llength [ParaloguesDe $Nom]] } proc NombreDeZDuPilier {Pilana} { return [regsub -all "Z" $Pilana "" bidon] } proc NombreEntierAvecVirgules {Nombre} { set Nombre [expr int($Nombre)] regsub {^0+} $Nombre "" Nombre set nChiffres [string length $Nombre] set lNombre [split $Nombre ""] set NombreAvecVirgules "" while {[regexp {[0-9]{3}$} $Nombre Groupe3Chiffres]} { if {$NombreAvecVirgules == ""} { set NombreAvecVirgules $Groupe3Chiffres } else { set NombreAvecVirgules "$Groupe3Chiffres,$NombreAvecVirgules" } regsub "$Groupe3Chiffres$" $Nombre "" Nombre } if {$Nombre != ""} { if {$NombreAvecVirgules == ""} { set NombreAvecVirgules $Nombre } else { set NombreAvecVirgules "$Nombre,$NombreAvecVirgules" } } return $NombreAvecVirgules } proc NombresEntre {D F {Pas 1}} { if {$D==$F} { return [list $D] } set LesX {} for {set X $D} {[expr $Pas*$X <= $Pas*$F]} { set X [expr $X+$Pas]} { lappend LesX $X } return $LesX } proc NommageAuto {Access {Systeme ""} {Rep ./}} { if {$Systeme=="" } { return [TmpFile] } if {$Systeme=="Ask_for_each"} { return [FichierPourSaveAs "$Rep/Access"] } if {$Systeme=="Use_access" } { return "$Rep/$Access" } if {$Systeme=="Use_access_but_remove_signals"} { set LesVilains [Signal "LaListeDesAccess"] lappend LesVilains "ProduitPCR" set Nouveau "_${Access}_" foreach Vilain $LesVilains { regsub -all "_${Vilain}_" $Nouveau "_" Nouveau } regsub -all "_" $Nouveau "" Nouveau while {$Nouveau==""} { FaireLire "I removed all signals from $Access and got an empty text. how do I call the file ?" set Nouveau [Entre $Access] } return "$Rep/$Nouveau" } return "$Rep/$Access" } proc NommeEtStockeLeTamis {Commande} { Wup "Gives a name to the Tamis" if {[LeTamis NeConnaitPasEncore $Commande]} { while {[OuiOuNon "$Commande\nwill be a new Tamis ?"]} { FaireLire "Please give a name" set NewTamis [Entre "Tamis_"] if {$NewTamis==""} { continue } LeTamis $NewTamis $Commande break } } } proc NommeLesFichiersForum {} { global RepertoireDuGenome global CurrentGenome global ForumWscope global FichierAFaire global FichierDejaFait if {[info exists FichierAFaire]} { return } if {[info exists env(FORUMWSCOPE)]} { set ForumWscope [set env(FORUMWSCOPE)] } else { set ForumWscope /biolo/wscope/wscope/forum } set FichierAFaire "$ForumWscope/afaire$CurrentGenome" set FichierDejaFait "$ForumWscope/dejafait$CurrentGenome" } proc Nommenclature {Nom {OrganismeComplet ""}} { global RepertoireDuGenome global Nommenclature JeMeSignale if {[info exists Nommenclature($Nom)]} { Espionne "trouve [set Nommenclature($Nom)] [set Nommenclature($Nom,Complet)]" if {$OrganismeComplet!=""} { return "[set Nommenclature($Nom,Complet)]" } else { return "[set Nommenclature($Nom)]" } } set FichierNommenclature "$RepertoireDuGenome/fiches/nommenclature" if { ! [file exists $FichierNommenclature]} { return "" } if { ! [info exists Nommenclature("EstCharge")]} { foreach Ligne [LesLignesDuFichier $FichierNommenclature] { scan $Ligne "%s %s %s %s" NomLu Alias Genre Espece set GenEspe "" append GenEspe "[string toupper [string range $Genre 0 0]]" append GenEspe "[string tolower [string range $Genre 1 2]]" append GenEspe "[string toupper [string range $Espece 0 0]]" append GenEspe "[string tolower [string range $Espece 1 3]]" set Nommenclature($NomLu) "${Alias}_$GenEspe" set Nommenclature($NomLu,Complet) "$Genre $Espece" } set Nommenclature("EstCharge") "EtBienCharge" return [Nommenclature $Nom $OrganismeComplet] } return "" } proc NomsDesRepeats {ZoneDuSegmentAMasquer ExtensionInf ExtensionSup Racine} { Wup "Return the name of all repeats separated with one blank" set FichierOutputRepeatMasker "$Racine.out" if {![file exists $FichierOutputRepeatMasker]} {return} set TailleSeq [string length $ZoneDuSegmentAMasquer] set Debut [Mini $ExtensionInf [expr $TailleSeq - $ExtensionSup - 1]] set Fin [Maxi $ExtensionInf [expr $TailleSeq - $ExtensionSup - 1]] set LesNomsDesRepeats {} foreach Repeat [lsort -unique [InterrogeFichierOutRepeatMasker $FichierOutputRepeatMasker LesRepeats]] { foreach LaRegion [InterrogeFichierOutRepeatMasker $FichierOutputRepeatMasker Repeat $Repeat LesRegions] { set DQ [lindex $LaRegion 0] set FQ [lindex $LaRegion 1] if {[CesRegionsSontEllesOverlappantes $Debut $Fin $DQ $FQ]} {lappend LesNomsDesRepeats $Repeat} } } return [join $LesNomsDesRepeats " "] } proc NomsDesRepeatsDansEntete {Fichier} { global RepertoireDuGenome set LesMasking [MaskTypesFromTFA $Fichier] set TousLesRepeats {} foreach Masking $LesMasking { if {[regexp -nocase "^No" $Masking]} {continue} set LesElements [split $Masking " "] set LesRepeats [lrange $LesElements 2 end-1] lappend TousLesRepeats $LesRepeats } return [join $TousLesRepeats " "] } proc NomsEtSeqsDesSeqali {l} { return [$::db eval "select sa.seqname, sa.seq from seqali where pk_seqali in ([join $l ,])"] } proc NonOverlapingSeqADN {SeqADN {Reset ""}} { global OldNonOverlapingSeqADN set SeqADN [string toupper $SeqADN] if {$Reset=="" && [info exists OldNonOverlapingSeqADN]} { set lAmorce 55 set iOver -1 while { $iOver == -1 && $lAmorce >0 } { set Amorce [string range $SeqADN 0 [incr lAmorce -1]] set iOver [string last $Amorce $OldNonOverlapingSeqADN] } if {$iOver!=-1} { set Overlap [string range $OldNonOverlapingSeqADN $iOver end] } else { set Overlap "" } set lOver [string length $Overlap] set nAvant [expr 70-$lOver] Espionne "[string range $OldNonOverlapingSeqADN end-70 end]<" Espionne "[string repeat " " $nAvant] $Overlap" Espionne [string range "[string repeat " " $nAvant]>[string range $SeqADN 0 70]" 0 100] set BonneSeqADN [string range $SeqADN $lOver end] } else { set BonneSeqADN $SeqADN } set OldNonOverlapingSeqADN $BonneSeqADN return $BonneSeqADN } proc NorMDExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./normd" } if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { return [file join $OrdBinDir "normd"] } else { return "/biolo/normd/normd" } } else { set lexe [file join $OrdBinDir "normd.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc NormVec {v} { lassign $v x y z return [expr {sqrt($x**2+$y**2+$z**2)}] } proc NormVec2 {v} { lassign $v x y z return [expr {$x**2+$y**2+$z**2}] } proc NormaleDe {a b c} { set v1 [V_VV $b - $a] set v2 [V_VV $c - $a] set N [Vectoriel $v1 $v2] set N [V_nV $N] return $N } proc NormalisationColonnes {} { global ListeScore # Fait normalisation set n [llength $ListeScore] if {! $n} {return 0} set c [llength [lindex $ListeScore 0]] for {set i 1} {$i < $c} {incr i} { set l$i [ExtraitListeDeListe $ListeScore $i] if {[llength [lsort -unique [set l$i]]] == 1} { puts "==> only ONE value : [lindex $l 0] repeated [llength [set l$i]] times, col $i" return 0 } set nl$i [Standardise [set l$i]] } set tmp [ExtraitListeDeListe $ListeScore 0] set new [list] for {set j 0} {$j < $n} {incr j} { set l [lindex $tmp $j] for {set i 1} {$i < $c} {incr i} { lappend l [lindex [set nl$i] $j] } lappend new $l } set ListeScore $new return 1 } proc NormaliseBanqueBlast {Source {Destin ""}} { if {$Destin==""} { set Destin "$Source.normalise" } set LeNew {} set i 0 foreach Ligne [LesLignesDuFichier $Source] { if { [string index $Ligne 0] ne ">"} { lappend LeNew $Ligne; continue } scan $Ligne "%s" sba set D [string length $sba] incr D lassign [split $sba "|"] s a b set S "SPT" ; if {$s eq ">sp"} { set S "SW" } set N "$S:$b $a" set R [string range $Ligne $D end] set TOS "" if {[regexp {OS=([^ ]+ [^ ]+) } $Ligne Match OS]} { set TOS "$OS " } set New ">$N $TOS$R" lappend LeNew $New if {[incr i]%1000==0} { Espionne $i } } SauveLesLignes $LeNew dans $Destin } proc NormaliseDEOuMotOuExpr {DE} { # Vire les espaces de début et de fin set DE [string trim $DE] # Pas plus d'1 espace d'affillée regsub -all {\s+} [string trim $DE] " " DE # Vire les caractères non pas alpha-numériques s'ils ne sont pas entourés de 2 caractères alpha-num for {set i 0} {$i < [set length [string length $DE]]} {incr i} { set current [string index $DE $i] if {[expr $i - 1] >= 0} {set behind [string index $DE [expr $i - 1]]} else {set behind ""} if {[expr $i + 1] < $length} {set ahead [string index $DE [expr $i + 1]]} else {set ahead ""} if {(![regexp -nocase {[a-z0-9]} $behind] || ![regexp -nocase {[a-z0-9]} $ahead]) && [regexp -nocase {[^a-z0-9 ]} $current]} { set DE [string replace $DE $i $i] incr i -1 } } return $DE } proc NormaliseTable {aT} { global FeuilleRef upvar $aT T foreach e [array names T "*,$FeuilleRef"] { if {! [set T($e)]} { set k [join [lrange [split $e ","] 0 end-1] ","] foreach r [array names T "$k,*"] { set T($r) [expr {! [set T($r)]}] } } } return } proc NormaliseTxlFieldName {Field} { regsub -all -nocase {[^a-z0-9\-_\.]} $Field "_" Good return $Good } proc Normd {MSFouNom {Force ""}} { return [MDScore $MSFouNom $Force] } proc NormdDesCluspackDeLaGridPourTous {} { set FichierNormd "[RepertoireDuGenome]/fiches/normdensortiedegrid.grid" set FichierNormdDpc "[RepertoireDuGenome]/fiches/normdcluspack.grid" set FichierGroupedpcIn "[RepertoireDuGenome]/fiches/groupedpc.grid" set FichierGroupedpcOut "[RepertoireDuGenome]/fiches/groupedpc" set RepertoireIn "cluspackgrid" #set RepertoireOut "msfcluspackgrid" file copy -force $FichierGroupedpcIn $FichierGroupedpcOut foreach Ligne [LesLignesDuFichier $FichierNormd] { scan $Ligne "%s" Nom set Fichier "[RepertoireDuGenome]/$RepertoireIn/$Nom" if { ! [file exists $Fichier]} { AppendAuFichier $FichierNormdDpc "$Nom 0" continue } #CreeLeFichierMsfDuCluspak $Nom "cluspackgrid" "msfcluspackgrid" set Normd [NormdManu $Nom "msfcluspackgrid"] AppendAuFichier $FichierNormdDpc "$Nom $Normd" } file delete -force $FichierGroupedpcOut } proc NormdEnSortieDeGrid {} { set FichierSortie "[RepertoireDuGenome]/fiches/normdensortiedegrid" foreach Nom [ListeDesPABs] { Espionne $Nom set Fichier "[RepertoireDuGenome]/normd/$Nom" if {! [file exists $Fichier]} { set FichierLog "[RepertoireDuGenome]/fiches/annotation.log" AppendAuFichier $FichierLog "$Nom n a pas de fichier normd" continue } set NormdLeon 0 set NormdRascal 0 set NormdClustalw 0 foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne == ""} {continue} set Ligne [regsub -all {\-OUT.msf normd =} $Ligne ""] set Ligne [regsub -all {$Nom\-} $Ligne ""] set Normd 0 scan $Ligne "%s %s" NomProcess Normd if {[regexp "rascal" $NomProcess]} { set NormdRascal $Normd } if {[regexp "clustalw" $NomProcess]} { set NormdClustalw $Normd } if {[regexp "leon" $NomProcess]} { set NormdLeon $Normd } } AppendAuFichier $FichierSortie "$Nom $NormdClustalw $NormdRascal $NormdLeon" Espionne "$Nom $NormdClustalw $NormdRascal $NormdLeon" } } proc NormdEnSortieDePipeLocal {Nom} { set FichierSortie "[RepertoireDuGenome]/fiches/normdensortiedegrid" #Espionne $Nom set Fichier "[RepertoireDuGenome]/normd/$Nom" if {! [file exists $Fichier]} { set FichierLog "[RepertoireDuGenome]/fiches/annotation.log" AppendAuFichier $FichierLog "$Nom n a pas de fichier normd" continue } set NormdLeon 0 set NormdRascal 0 set NormdClustalw 0 foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne == ""} {continue} set Ligne [regsub -all {NorMD de } $Ligne ""] set Ligne [regsub -all " :" $Ligne ""] set Normd 0 scan $Ligne "%s %s" NomProcess Normd if {[regexp "rascal" $NomProcess]} { set NormdRascal $Normd } if {[regexp "dbclustal" $NomProcess]} { set NormdClustalw $Normd } if {[regexp "leon" $NomProcess]} { set NormdLeon $Normd } } AppendAuFichier $FichierSortie "$Nom $NormdClustalw $NormdRascal $NormdLeon" Espionne "$Nom $NormdClustalw $NormdRascal $NormdLeon" } proc NormdEnStock {Nom {Rep ""}} { regsub "blastp" $Rep "" Rep #rR on suppose que tous les Normd on deja ete calcules pour chaque type d'alignement correspondant à Rep #rR march surtou pour CilioCode, attention a adapter pour les autres global NormdEnStock if {[info exists NormdEnStock($Nom,$Rep)]} { return $NormdEnStock($Nom,$Rep) } if {[info exists NormdEnStock("EstCharge")]} { return -8888.8 } set NormdEnStock("EstCharge") 1 foreach FichierNormd [glob -nocomplain "[Fiches]/md_scores*"] { set Q [file tail $FichierNormd] regsub {md_scores\.?} $Q "" R foreach Ligne [LesLignesDuFichier $FichierNormd] { scan $Ligne "%s %s" N V set NormdEnStock($N,$R) $V } } return [NormdEnStock $Nom $Rep] } proc NormdGrid {NomATraiter Qui} { global PipeCollection set Prog $Qui if {$Qui == "dbclustal"} {set Qui "msf"} if {$PipeCollection} { set InMsf [file join [RepertoireDuGenome] $Qui $NomATraiter] set fnormd [file join [RepertoireDuGenome] normd $NomATraiter] } else { if {$Qui == "msf"} { set Qui "" } else { set Qui ".${Qui}" } set InMsf "[file rootname ${NomATraiter}]${Qui}.msf" set fnormd "[file rootname ${NomATraiter}].normd" } if {[file exists $fnormd]} { set Ll [LesLignesDuFichier $fnormd] set ix [lsearch -regexp $Ll $Prog] if {$ix != -1} { set ligne [lindex $Ll $ix] if {[string first "undetermined" $ligne] == -1} {return 1} } } if {[file exists $InMsf]} { catch {eval exec [NorMDExe] $InMsf} val } else { set val "undetermined" } if {! [string is double $val]} {set val "undetermined"} if {[file exists $fnormd]} { set Ll [LesLignesDuFichier $fnormd] file delete -force $fnormd if {$Qui == "msf"} {set Ll {} } } lappend Ll "NorMD de $Prog : $val" set f [open "$fnormd" w] puts $f [join $Ll "\n"] close $f if {[file exists $fnormd] && $val ne "undetermined"} { AjouteAuLogPipe "normd$Prog = ok" } else { AjouteAuLogPipe "normd$Prog failed" } return 1 } proc NormdManu {Nom Repertoire} { if {$Repertoire == ""} { set FichierMsf "[RepertoireDuGenome]/msf/$Nom" } else { set FichierMsf "[RepertoireDuGenome]/$Repertoire/$Nom" } if {! [file exists $FichierMsf]} {return "0"} Espionne $FichierMsf set MSF [ContenuDuFichier $FichierMsf] set Normd [Normd $MSF "IsText"] return $Normd } proc NormdPourTous {{Force ""}} { return [Normd "LaListeMerci" $Force] } 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 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 NotationUCSC {Qui {Quoi ""}} { scan $Qui "%s" Qui regsub ">" $Qui "" Qui set QUI [string toupper $Qui] if {$Quoi==""} { if {[regexp "^CHR" $QUI]} { set Quoi "IGBMC" } else { set Quoi "UCSC" } } global NotationUCSC if {[info exists NotationUCSC($QUI,$Quoi)]} {return $NotationUCSC($QUI,$Quoi)} if {[info exists NotationUCSC("EstCharge")]} {return ""} set NotationUCSC("EstCharge") 1 set L { chr1 chr1_random chr2 chr2_random chr3 chr3_random chr4 chr4_random chr5 chr5_random chr6 chr6_random chr7 chr7_random chr8 chr8_random chr9 chr9_random chr10 chr10_random chr11 chr12 chr12_random chr13 chr13_random chr14 chr15 chr15_random chr16 chr16_random chr17 chr17_random chr18 chr18_random chr19 chr19_random chr20 chr21 chr22 chr22_random chrX chrX_random chrY chrM chr6_hla_hap1 chr6_hla_hap2 } foreach Chr $L { set CHR [string toupper $Chr] set K $Chr regsub "chr" $K "HS" K regsub "_random" $K "rand" K regsub "_hla_hap1" $K "hap1" K regsub "_hla_hap2" $K "hap2" K if {[regexp {HS([0-9]+)} $K Match n]} { set NN [format "%2.2d" $n] regsub "$n" $K $NN K } set Access "UCSC:$K" set Header ">$Access Homo sapiens complete genome $Access Build_35_hg17_May_2004" set NotationUCSC($CHR,UCSC) $Chr set NotationUCSC($CHR,IGBMC) $Access set NotationUCSC($Access,UCSC) $Chr set NotationUCSC($Access,IGBMC) $Access set NotationUCSC($CHR,Header) $Header set NotationUCSC($Access,Header) $Header lappend NotationUCSC(LISTOF,UCSC) $Chr lappend NotationUCSC(LISTOF,IGBMC) $Access lappend NotationUCSC(LISTOF,Header) $Header } return [NotationUCSC $Qui $Quoi] } proc Note {Nom} { global RepertoireDuGenome set FichierNote "$RepertoireDuGenome/notes/$Nom" if {[file exists $FichierNote]} { return [ContenuDuFichier $FichierNote] } return "" } proc NotreOC {{Valeur ""}} { global NotreOC if {$Valeur!=""} { set NotreOC $Valeur } if {[info exists NotreOC]} { return $NotreOC } set NOS [NotreOS] if {$NOS==""} { return "" } if {$NOS=="Inconnu inconnu"} { return "" } return [OCduOS $NOS] } proc NotreOS {{Valeur ""}} { global NotreOS if {$Valeur!=""} { set NotreOS $Valeur } if {[info exists NotreOS]} { return $NotreOS } return "" } proc NotreOX {{Valeur ""}} { global NotreOX if {$Valeur!=""} { set NotreOX $Valeur } if {[info exists NotreOX]} { return $NotreOX } set NOS [NotreOS] if {$NOS==""} { return "" } if {$NOS=="Inconnu inconnu"} { return "" } regsub -all " " $NOS "_" NOS set NotreOX [QuestionDeScience "EVImm" "ret Tax $NOS TaxId"] return $NotreOX } proc NotreTaxId {} { return [NotreOS] } proc NousAllonsAuBoulot {{RepTrav ""}} { global MemorisePWD if {$RepTrav==""} { set RepTrav [RepertoireDeTravail] } #rR il se peut qu'il n'y ait pas de wd if {[catch {set PWD [pwd]}]} { set PWD $RepTrav } set MemorisePWD $PWD cd $RepTrav return $RepTrav } proc NouveauBouton {W Action {Nom ""} {NomDuFichierOrigine ""}} { global CommandeNouveauBouton if {[info exists CommandeNouveauBouton] && $Action=="Same"} { set Commande $CommandeNouveauBouton } else { set Commande [Entre "NAME_OF_PROC using OrfName FileName WindowName AllPage Selection"] } if {$Commande==""} { return "" } set NdFO "UnknownOriginFile" scan $NomDuFichierOrigine "%s" NdFO set CommandeNouveauBouton $Commande regsub -all "Selection" $Commande "\[selection get\]" Commande regsub -all "AllPage" $Commande "\[set PagePropre($W)\]" Commande regsub -all "OrfName" $Commande $Nom Commande regsub -all "FileName" $Commande $NdFO Commande regsub -all "WindowName" $Commande $W Commande set Texte [string range $Commande 0 10] set B [BoutonneLaFenetre $W $Texte $Commande] $B configure -background "blue" return $B } proc NouveauClustering {{quoi ""}} { global Clus ZoneSelect ZoneClusterisation NomSeqSel SDG LNDG LNOrdali parray Clus # No criterion selected set LCriteres [list] foreach f [array names Clus "LCrit,*"] { if {[set Clus($f)]} { lassign [split $f ,] tmp type lappend LCriteres "$type" } } if {$LCriteres == {} && $quoi != "nogroups"} { FaireLire "Beware !\nNo criterion selected !" return } if {[llength $LCriteres] > 1 && "Life Domain" in $LCriteres} { FaireLire "Beware ! 'Life Domain' criterion can only be used alone !" return } DetectUnselectedSeqs if {$NomSeqSel == {}} { set i 0 foreach n [split [$::NomNomSeq get 1.0 end] \n] { incr i set n [string trim $n] if {$n ne ""} { lappend NomSeqSel "$i.0" } } } if {$ZoneSelect == {}} { SelectionneToutesColonnes } set ZoneClusterisation $ZoneSelect # alignement selections set Lvide [AlignementDesSelections $ZoneClusterisation SAli] foreach {n s} $SAli { lappend Lnom $n lappend Lseq $s } # Prepare and compute criterions # # Lvals : list to be clustered. Start with ID set Lval $Lnom foreach type $LCriteres { set Lv [list] switch $type { "% identity" { CalculeLesPCIGenerique $SAli TPCI foreach n1 $Lnom { set tmp [list] foreach n2 $Lnom { lassign [set TPCI($n1,$n2)] pc l1 l2 lsl lappend tmp [expr {1.-$pc}] } lappend Lv $tmp } } "length" { foreach s $Lseq { set tmp [string map {"." "" " " ""} $s] lappend Lv [string length $tmp] } set Lv [Standardise $Lv] } "hydrophobicity" { set Lv [list] foreach s $Lseq { lappend Lv [DonneHydrophobicityDe $s] } set Lv [Standardise $Lv] } "pI" { set Lv [list] foreach s $Lseq { lappend Lv [DonnePIDe toto $s] } set Lv [Standardise $Lv] } "aa composition" { set Lv [list] foreach s $Lseq { set tmp [DonneCompositionDe toto $s] set va [list] foreach a $tmp { lappend va [expr {$a/100.}] } lappend Lv $va } } "Life Domain" { set quoi "phylum" break } } set tmp [list] # add new values to be clustered to list foreach a $Lval v $Lv { lappend a {*}$v lappend tmp $a } set Lval $tmp } if {$quoi eq ""} { set quoi $Clus(Method) } switch $quoi { "kmeans / DPC" { set Lgr [Tclcluspack $Lval -dt coordinates -cm kmeans -nbc dpc] ClusterSeqsDeCluspackTcl $Lgr SDG LNDG set Clus(Method) dpc } "hierarchic / secator" { set Lgr [Tclcluspack $Lval -dt coordinates -cm hierar -nbc secator] ClusterSeqsDeCluspackTcl $Lgr SDG LNDG set Clus(Method) secator } "mixture model / AIC" { set Lgr [Tclcluspack $Lval -dt coordinates -cm mm -nbc aic] ClusterSeqsDeCluspackTcl $Lgr SDG LNDG set Clus(Method) mixturemodelaic } "mixtur emodel / BIC" { set Lgr [Tclcluspack $Lval -dt coordinates -cm mm -nbc bic] ClusterSeqsDeCluspackTcl $Lgr SDG LNDG set Clus(Method) mixturemodelbic } "phylum" { PhylumClustering LNDG SDG set ::Defauts(AffPhy) 1 update } "nogroups" { set LNDG GroupeToutLeMonde unset SDG foreach n $LNOrdali { if {[string trim $n] ne ""} { lappend SDG(GroupeToutLeMonde) $n } } set Clus(Method) nogroup set Lvide [list] } } AjouteGroupeToutLeMonde if {$Clus(ShowSeqOut)} { if {! [info exists Lvide]} { set Lvide {} } GroupeRestant SDG LNDG $Lvide } AssignSeqToGroup ClearSelections InitConsensus InitPoints ColorieSelonFeature "Clear" EnleveConservation RafraichitAffichage ChangeFeature $Clus(Combo) AfficheZonesSelectionneesCluster return } proc NouveauGroupe {} { global LNDG set nmax 0 foreach g $LNDG { if {$g eq "all" || $g eq "GroupeToutLeMonde"} {continue} if {[regexp {^Group} $g]} { set n [string range $g 5 end] if {$n > $nmax} {set nmax $n} } } incr nmax set ng "Group$nmax" return $ng } proc NouveauNom {Nom} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/lacorrespondance"] { scan $Ligne "%s %s" new old if {$old==$Nom} { return $new } } } proc NouveauNomDeZoneDeDemarcation {K} { global NomDeZoneDeDemarcation NumeroDeZoneDeDemarcation if { ! [info exists NomDeZoneDeDemarcation($K)]} { set NomDeZoneDeDemarcation($K) "Zone" set NumeroDeZoneDeDemarcation($K) "0" } return [set NomDeZoneDeDemarcation($K)][incr NumeroDeZoneDeDemarcation($K)] } proc NouveauPack {} { proc pack args { return } } proc NouveauRoot {T N} { if {[$T depth $N] == 1 || [$T get [$T rootname] name] eq $N} { return $T } set Ld [concat [lrange [lreverse [$T ancestors $N]] 1 end] $N] set Fils1 [lindex $Ld 0] set Fils2 [lor [$T children root] $Fils1] set PetitFils [lindex $Ld 1] set NR [struct::tree] $NR set root name $NR if {$PetitFils ne ""} { CopieArbre2 $NR root $T $PetitFils $T delete $PetitFils } if {$Fils2 ne ""} { $T move $Fils1 end $Fils2 } CopieArbre2 $NR root $T $Fils1 $T destroy set R [NouveauRoot $NR $N] return $R } proc Nouveau_LesBanquesDuNal {Fichier {Rep ""}} { if {$Rep==""} { set Rep "SameDir" } if {$Rep=="SameDir"} { set Rep "[file dirname $Fichier]" } set LesBanques {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp "^DBLIST " $Ligne]} { continue } while {[regsub -all " " $Ligne " " Ligne]} {} set Ligne [string trim $Ligne] set LesBanques [lrange [split $Ligne " "] 1 end] } set LesBonnesBanques {} foreach Banque $LesBanques { set Banque [file tail $Banque] set BonneBanque "$Rep/$Banque" set Nhr "$BonneBanque.nhr" if { ! [file exists $Nhr]} { FaireLire "$Nhr n'existe pas" } if {[catch {set Name [exec name $Banque]} Message]} { FaireLire "Problem with 'exec name $Banque'\ I got message \n$Message" continue } if {[regexp "^@GenDBConfigFiles" $Name]} { regsub "^@" $Name "" Name set NameDir [lindex [split $Name ":"] 0] set Ferme [lindex [split $Name ":"] 1] if {[catch {set Dir [exec name $NameDir]} Message]} { FaireLire "Problem with 'exec name $NameDir'\ I got message \n$Message" continue } set Farm "$Dir/$Ferme" if { ! [file exists $Farm]} { FaireLire "$Farm doesn't exists" ; continue } foreach B [LesBanquesDeLaFerme $Farm] { if {[catch {set NameDeB [exec name $B]} Message]} { FaireLire "Problem with 'exec name $Banque'\ I got message \n$Message" continue } set NameDirDeB [lindex [split $NameDeB ":"] 0] if {[catch {set DirDeB [exec name $NameDirDeB]} Message]} { FaireLire "Problem with 'exec name $NameDirDeB'\ I got message \n$Message" continue } lappend LesBonnesBanques "$BonneBanque $DirDeB $NameDeB" } } else { set NameDir [lindex [split $Name ":"] 0] if {[catch {set Dir [exec name $NameDir]} Message]} { FaireLire "Problem with 'exec name $NameDir'\ I got message \n$Message" continue } lappend LesBonnesBanques "$BonneBanque $Dir $Name" } } return $LesBonnesBanques } proc NouvelleAnnotation {} { global NomTextSeq $NomTextSeq tag remove selZone 1.0 end $::Anno(WText) delete 1.0 end set $::Anno(NtagCou) "" bind $NomTextSeq [list PositionAnnotation %W %x %y "debut"] bind $NomTextSeq [list SelectZoneAnnotation %W %x %y] bind $NomTextSeq [list TermineZoneAnnotation %W %x %y] return } proc Nuance {Amour {UnPeu ""} {Passion ""} {Format ""} {Saturation ""} {Brightness ""}} { #rR réécrit 2014/11/17 #rR Amour va de 0 à 1 et de ca fait correspondra à Hue de UnPeu à Passion if {$Saturation==""} { set Saturation 1. } if {$Brightness==""} { set Brightness 1. } if {$UnPeu ==""} { set UnPeu 0.1 } if {$Passion ==""} { set Passion 0.6 } if {$Format ==""} { set Format "hexa" } if {$UnPeu<=$Passion} { set Hue [expr {$UnPeu + ($Passion-$UnPeu)*$Amour}] } else { set Hue [expr {$UnPeu - ($UnPeu-$Passion)*$Amour}] } set rgb [hsbToRgb $Hue $Saturation $Brightness] return [CouleurFormat $rgb $Format] } proc Nuance3x8 {Amour {UnPeu ""} {Passion ""} {Saturation ""} {Brightness ""}} { return [Nuance $Amour $UnPeu $Passion "3x8" $Saturation $Brightness] } proc Nuancier {n {c1 red} {c2 blue}} { lassign [winfo rgb . $c1] r1 g1 b1 lassign [winfo rgb . $c2] r2 g2 b2 # Normalize intensities to 0 to 255, 1 byte colors foreach el {r1 g1 b1 r2 g2 b2} { set $el [expr {[set $el] * 255 / 65535}].0 } if {$n == 1} { set r_step 0.0 ; set g_step 0.0 ; set b_step 0.0 } else { set r_step [expr {($r2-$r1) / ($n-1)}] set g_step [expr {($g2-$g1) / ($n-1)}] set b_step [expr {($b2-$b1) / ($n-1)}] } set steps {} for {set i 0} {$i < $n} {incr i} { set r [expr {int($r_step * $i + $r1)}] set g [expr {int($g_step * $i + $g1)}] set b [expr {int($b_step * $i + $b1)}] lappend steps [format "#%.2X%.2X%.2X" $r $g $b] } return $steps } proc NucDuCodonStart {Nom} { global RepertoireDuGenome global LesCodonsStart global LesAAsStart if { ! [info exists LesCodonsStart]} { ChargeLesCodonsStart } if { [info exists LesCodonsStart($Nom)] && [YaPABdans $Nom]} { return [set LesCodonsStart($Nom)] } else { return "" } } proc NucExtension5Prime {NucTotal Nuc3Prime} { if {$Nuc3Prime==""} { return "" } set NucTotal [string toupper $NucTotal] set Depart [string last [string toupper $Nuc3Prime] [string toupper $NucTotal]] if {$Depart<0} { return "" } set Debut [MetExtreme $NucTotal $Depart] set Fin [StopProchain $NucTotal $Depart] incr Fin -1 if {$Fin<0} { set Fin "end" } return [string range $NucTotal $Debut $Fin] } proc NucExtension5PrimeDeRec2 {Rec2} { set Rec2 [file tail $Rec2] regsub ".tfa$" $Rec2 "" Rec2 if {$Rec2!=[EnteteDuFichierTFA [Rec2 $Rec2 Fichier] "access"]} { FaireLire "$Rec2 is not in my rec2 database !" return "" } set NucTotal [Rec2 $Rec2 "Sequence"] set Rec1 [Rec2 $Rec2 "R1"] if {$Rec1!=""} { set N [Rec1 $Rec1 "N"] set NucSujet [VirtualPPCREnStock $N SeqSubject] } else { set Entete [EnteteDuFichierTFA $FiRec2] scan $Entete "%s" Entete set LesMots [split $Entete "_"] Espionne $LesMots foreach Mot $LesMots { if {[EstUnSignal $Mot]} { continue } if {$Mot=="Rec2"} { continue } set Sujet $Mot break } set NucSujet [PPCREnStock $Sujet "SeqSubject"] } if {$NucSujet==""} { return "" } set NucExtension5Prime [NucExtension5Prime $NucTotal $NucSujet] return $NucExtension5Prime } proc NucOuProt {Sequence} { if {[regexp "^>" $Sequence]} { set Sequence [QueLaSequenceDuTexteTFA $Sequence] } if {[regexp -nocase {[^ATGCNXMKRSYWVHDB]} $Sequence]} { return "Prot" } return "Nuc" } proc NucProteomeDir {} { return "/genomics/link/ImAnnoGenes/nucproteome" } proc NucToComplementNuc {Seq} { set ListKeyValue [ComplementNuc "ListKeyValue"] set Com [string map $ListKeyValue $Seq] return $Com # set Com "" # foreach B [split $Seq ""] { # append Com [ComplementNuc $B] # } # return $Com } proc NucToProtTFA {Sequence {NomDeBapteme ""} {Format ""}} { if {$Format==""} { set Format [FormatDeLaSequence $Sequence] } if {$Format != "tfa"} { FaireLire "Desole, NucToProtTFA ne sait pas encore traduire le format $Format" return "" } if {$NomDeBapteme!=""} { set Entete ">$NomDeBapteme" } else { set iR [string first "\n" $Sequence] set Entete [string range $Sequence 0 [incr iR -1]] } set SeqNuc [QueLaSequence $Sequence] set SeqPro [SeqNucToSeqPro $SeqNuc] return "$Entete\n[SequenceFormatBrut $SeqPro]" } proc NucToReverseAndComplementNuc {Seq} { set Rev [NucToReverseNuc $Seq] set Com [NucToComplementNuc $Rev] return $Com } proc NucToReverseNuc {Seq} { return [string reverse $Seq] # set Rev "" # for {set i [expr [string length $Seq]-1]} {$i>=0} {incr i -1} { # append Rev [string index $Seq $i] # } # return $Rev } proc NumGenesUniquesSelectionnes {Fichier} { # Fichier est de la forme "numgene\t1ou0" set NumGenePrec 0 set SelPrec 100000 set n 1 set ns 0 foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "table" $Ligne]} {continue} set LesElts [split $Ligne "\t"] set NumGene [lindex $LesElts 0] set Sel [lindex $LesElts 1] if {$NumGene==$NumGenePrec} { incr n if {$Sel==1} {incr ns} } else { if {$n==1} { if {$NumGenePrec!=0} { lappend L "$NumGenePrec\t$SelPrec\t1\t1" #FaireLire $L } } else { set Rapport [expr $ns*1.0/$n] if {$ns==0} {lappend L "$NumGenePrec\t0\t$n\t$n"} if {$ns>=1} {lappend L "$NumGenePrec\t1\t$Rapport\t$n"} set n 1 set ns 0 #FaireLire $L } #set S $FC } set NumGenePrec $NumGene set SelPrec $Sel } #Espionne [llength $L] return $L } proc NumeroDu {Nom} { if {[regexp {[0-9]+} $Nom Numero]} { return $Numero } return "" } proc NumeroDuChromosome {Chromosome} { set Numero $Chromosome regexp -nocase {([0-9]{1})$} $Chromosome tmp Numero regexp -nocase {([0-9]{2})$} $Chromosome tmp Numero regexp -nocase {([XY]{1})$} $Chromosome tmp Numero regexp -nocase {(un)$} $Chromosome tmp Numero regsub "^0" $Numero "" Numero return $Numero } proc NumeroDuChromosomeDeLaBande {Bande} { set Caractere1 [string index $Bande 0] if { ! [regexp {[1-9]} $Caractere1]} {return -1} set Caractere2 [string index $Bande 1] if {$Caractere2!="p" && $Caractere2!="q"} { return "$Caractere1$Caractere2" } else { return "$Caractere1" } } proc NumeroDuJob {id} { set lid [string length $id] set Lf [glob -nocomplain *.tfa] foreach f $Lf { set nb [string range [file rootname $f] $lid end] if {[regexp {^[0-9]+$} $nb]} {return $nb} } return "pb" } proc NumeroDuJobMs2phdb {id} { set lid [string length $id] set Lf [glob -nocomplain *.tfa] foreach f $Lf { set nb [string range [file rootname $f] $lid end] if {[regexp {^[0-9]+$} $nb]} {return $nb} } return "pb" } proc NumeroDuWU {f} { set in1 [expr [string first "-WU-" $f] + 4] set in2 [expr [string first "-result_" $f] - 1] set n [string range $f $in1 $in2] return $n } proc NumeroNewMac {} { return [incr ::CompteurDeMac] } proc NumeroSuivant {DernierP {Format ""} {IncrValue 1}} { Wup "P0123 or TOTO1234 or To_Salut1234 . If no 4 digit use Format" if {$Format==""} { set Format "%s%4.4d" } regsub -all {[0-9]} $DernierP "" Lettre regsub -all {[^0-9]} $DernierP "" Numero set Numero [Base10 $Numero] incr Numero $IncrValue set ProchainP [format $Format $Lettre $Numero] return $ProchainP } proc NumeroUnigeneAPartirDUniseq {RepBlastUnigene} { if {![file exists "[RepertoireDuGenome]/$RepBlastUnigene"]} {return} foreach Fichier [glob "[RepertoireDuGenome]/$RepBlastUnigene/*"] { #Espionne $Fichier set NomFich [file tail $Fichier] DepouilleLeBlast TabBlast $Fichier set BId1 [set TabBlast(1)] #premier hit du blast regsub {^UG\:} $BId1 "" Uniseq #attention : #nouveau srs #changer le # en underscore regsub "#" $Uniseq "_" Uniseq set Commande "getz -e \"\\\[uniseq-id:$Uniseq\\\]\" \-vf ugi" set GetzOut [eval exec $Commande] lappend Liste "$NomFich\t$GetzOut" } return $Liste } proc O2C2O {args} { global RepertoireDuGenome global TableauOrf2Cluster2Operon if {$args == "unset"} { if {[info exists TableauOrf2Cluster2Operon]} {unset TableauOrf2Cluster2Operon} return "" } set Quoi [join $args ","] if {[info exists TableauOrf2Cluster2Operon($Quoi)]} { return [set TableauOrf2Cluster2Operon($Quoi)] } if {[info exists TableauOrf2Cluster2Operon(EstCharge)]} { return "" } set T0 [clock clicks -milliseconds] ###################CHARGE DISTANCE ENTRE CLUSTERS######################### set FichierDistance "$RepertoireDuGenome/xhda/TousLesBilans_PourNuca.dst" if {[file exists $FichierDistance] && ![info exists TableauOrf2Cluster2Operon($FichierDistance,EstCharge)]} { set TableauOrf2Cluster2Operon(EstCharge) 1 set TableauOrf2Cluster2Operon($FichierDistance,EstCharge) 1 ChargeDistancesClusters TableauOrf2Cluster2Operon $FichierDistance } set T1 [clock clicks -milliseconds] ###################CHARGE CATEGORIES PHYLOGENETIQUES######################### set FichierCategoriesPhylogenetiques "$RepertoireDuGenome/fiches/categories_phylogenetiques" if {[file exists $FichierCategoriesPhylogenetiques] && ![info exists TableauOrf2Cluster2Operon($FichierCategoriesPhylogenetiques,EstCharge)]} { set TableauOrf2Cluster2Operon(EstCharge) 1 set TableauOrf2Cluster2Operon($FichierCategoriesPhylogenetiques,EstCharge) 1 ChargeCategoriesPhylogenetiques TableauOrf2Cluster2Operon $FichierCategoriesPhylogenetiques } set T2 [clock clicks -milliseconds] ###################CHARGE ORF2CLUSTER2OPERON######################### set FichierO2C2O "$RepertoireDuGenome/fiches/orf2cluster2operon" if {[file exists $FichierO2C2O] && ![info exists TableauOrf2Cluster2Operon($FichierO2C2O,EstCharge)]} { set TableauOrf2Cluster2Operon(EstCharge) 1 set TableauOrf2Cluster2Operon($FichierO2C2O,EstCharge) 1 ChargeOrf2Cluster2Operon TableauOrf2Cluster2Operon $FichierO2C2O } set T3 [clock clicks -milliseconds] ###################CHARGE OPERONS COMMUNS############################### set FichierCl1Cl2OperonsCommuns "$RepertoireDuGenome/fiches/cl1_cl2_operons_communs" if {[file exists $FichierCl1Cl2OperonsCommuns] && ![info exists TableauOrf2Cluster2Operon($FichierCl1Cl2OperonsCommuns,EstCharge)]} { set TableauOrf2Cluster2Operon(EstCharge) 1 set TableauOrf2Cluster2Operon($FichierCl1Cl2OperonsCommuns,EstCharge) 1 ChargeCl1Cl2OperonsCommuns TableauOrf2Cluster2Operon $FichierCl1Cl2OperonsCommuns } set T4 [clock clicks -milliseconds] ###################CHARGE PRESENCES CLUSTERS######################### set FichierPresences "$RepertoireDuGenome/fiches/presences_tous_clusters" if {[file exists $FichierPresences] && ![info exists TableauOrf2Cluster2Operon($FichierPresences,EstCharge)]} { set TableauOrf2Cluster2Operon(EstCharge) 1 set TableauOrf2Cluster2Operon($FichierPresences,EstCharge) 1 ChargePresencesDeTousLesClusters TableauOrf2Cluster2Operon $FichierPresences } set T5 [clock clicks -milliseconds] if {0} { ###################CHARGE DISTANCES PONDEREES PAR PRESENCES######################## Set FichierDistancesPonderees "$RepertoireDuGenome/DistancesPondereesParPresence/$Categorie" if {[file exists $FichierDistancesPonderees] && ![info exists TableauOrf2Cluster2Operon($FichierDistancesPonderees,EstCharge)]} { set TableauOrf2Cluster2Operon(EstCharge) 1 set TableauOrf2Cluster2Operon(FichierDistancesPonderees,EstCharge) 1 ChargeDistancesPondereesParPresences TableauOrf2Cluster2Operon $FichierDistancesPonderees } } set T6 [clock clicks -milliseconds] ###################CHARGE CLUSTERS FUSIONNES########################################### if {![info exists TableauOrf2Cluster2Operon(FichierClustersFusionnes,EstCharge)]} { set TableauOrf2Cluster2Operon(EstCharge) 1 set TableauOrf2Cluster2Operon(FichierClustersFusionnes,EstCharge) 1 ChargeClustersFusionnes TableauOrf2Cluster2Operon } set T7 [clock clicks -milliseconds] if {0} { Espionne [expr $T1-$T0] Espionne [expr $T2-$T1] Espionne [expr $T3-$T2] Espionne [expr $T4-$T3] Espionne [expr $T5-$T4] Espionne [expr $T6-$T5] Espionne [expr $T7-$T6] } if {[info exists TableauOrf2Cluster2Operon($Quoi)]} { return [set TableauOrf2Cluster2Operon($Quoi)] } return "" } proc O2C2OAppend {args} { global TableauOrf2Cluster2Operon set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] return [lappend TableauOrf2Cluster2Operon($Quoi) $Valeur] } proc O2C2OExists {args} { global TableauOrf2Cluster2Operon if {$args=={}} { return [info exists TableauOrf2Cluster2Operon(EstCharge)]} set Quoi [join $args ","] return [info exists TableauOrf2Cluster2Operon($Quoi)] } proc O2C2OSet {args} { global TableauOrf2Cluster2Operon set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] return [set TableauOrf2Cluster2Operon($Quoi) $Valeur] } proc O2C2OUnset {args} { global TableauOrf2Cluster2Operon set Quoi [join $args ","] catch {unset TableauOrf2Cluster2Operon($Quoi)} } proc OCduOS {OS {OS2 ""}} { global OCduOS global OrthographeCanoniqueInverse if {$OS2!=""} { set OS "$OS $OS2" } set OS [string toupper $OS] regsub -all "_" $OS " " OS if {[info exists OCduOS($OS)]} { set C [set OCduOS($OS)] regsub {^root; cellular organisms; } $C "" C return $C } if {[info exists OCduOS("EstCharge")]} { if {[regexp -nocase {([A-Z][a-z]+) sp\.?$} $OS Match OSwithoutSP]} { return [OCduOS $OSwithoutSP] } return "ClassUnknown" set TaxClass [TaxClass $OS "" "" name] if {$TaxClass!=""} { regsub {^root; *} $TaxClass "" TaxClass ; return $TaxClass } return "ClassUnknown" } set OCduOS("EstCharge") 1 # set AL "ALVINELLA POMPEJANA" # set OCduOS($AL) "Eukaryota; Metazoa; Annelida; Polychaeta; Palpata; Canalipalpata; Terebellida; Alvinellidae; Alvinella." set FichierLesOSOCsDeQuidSeq "/biolo/wscope/quidseq/lesosocs" if {false && [file exists $FichierLesOSOCsDeQuidSeq]} { set n 0 foreach Ligne [LesLignesDuFichier $FichierLesOSOCsDeQuidSeq] { incr n set OC "ClassUnknown" ScanLaListe [split $Ligne ":"] OSlu OC set OSlu [string toupper $OSlu] set OCduOS($OSlu) $OC lappend OCduOS("LaListeMerci") $OSlu } foreach Good [array names OrthographeCanoniqueInverse] { if {[info exists OCduOS($Good)]} { Espionne [set OCduOS($Good)] ; continue } foreach Bad [set OrthographeCanoniqueInverse($Good)] { set BAD [string toupper $Bad] if {[info exists OCduOS($BAD)]} { set OCduOS([string toupper $Good]) [set OCduOS($BAD)] continue } } } set OCduOS(SOURCE) "gscope_glossaire.classes" return [OCduOS $OS] } set FichierOsOcParTaxId "/genomics/link/Common/fiches/TaxNCBI/OsOcParTaxNCBI.txt.gz" if {[file exists $FichierOsOcParTaxId]} { array set OCduOS [LesLignesDuFichier $FichierOsOcParTaxId] foreach {S C} [array get OCduOS] { set OCduOS([string toupper $S]) $C } set OCduOS(SOURCE) "TaxNCBI" set OCduOS("EstCharge") 1 return [OCduOS $OS] } foreach Ligne [LesLignesDuFichier "[GscopeEtc]/gscope_glossaire.classes"] { scan $Ligne "%s %s" G E regsub "^$G $E " $Ligne "" C set O [string toupper "$G $E"] if { ! [info exists OCduOS($O)] || $OCduOS($O)=="ClassUnknown"} { set OCduOS($O) $C } } set OCduOS(SOURCE) "gscope_glossaire.classes" #return [OCduOS $OS] if {[info exists OCduOS($OS)]} { return [set OCduOS($OS)] } else { return "ClassUnknown" } } proc OLD_AfficheInfoBulle {K X Y Action} { Wup "Affiche un cadre contenant les infos sur l oligo" regsub ".canvas" $K ".message" M catch {destroy $M} if {$Action=="Leave"} {return ""} set Id [$K find withtag current] set MesTags [$K gettags $Id] set Texte [lindex $MesTags 1] message $M -borderwidth "3" -font {Courier 8} -relief "raise" -width "800" -text $Texte -background "lightyellow" -foreground "black" if {$X>400} {set EW "e";incr X -20} else {set EW "w";incr X 20} if {$Y< 50} {set EW "n$EW" } place $M -x $X -y [expr $Y-30] -anchor $EW return $M } proc OLD_DechargeInfoDeOligo {FichierOligo} { Wup "Decharge les infos chargees avec ChargeInfoDeOligo" global InfoOligo if {! [info exists InfoOligo($FichierOligo,EstCharge)]} {return ""} if { [info exists InfoOligo($FichierOligo,EstVide)]} { unset InfoOligo($FichierOligo,EstVide) if {[info exists InfoOligo($FichierOligo,NotDone)]} {unset InfoOligo($FichierOligo,NotDone)} if {[info exists InfoOligo($FichierOligo,NoOligo)]} {unset InfoOligo($FichierOligo,NoOligo)} } else { foreach NomOligo [set InfoOligo($FichierOligo,LesNoms)] { unset InfoOligo($FichierOligo,$NomOligo,Taille) unset InfoOligo($FichierOligo,$NomOligo,Tm) unset InfoOligo($FichierOligo,$NomOligo,ExpTm) unset InfoOligo($FichierOligo,$NomOligo,Debut) unset InfoOligo($FichierOligo,$NomOligo,Fin) unset InfoOligo($FichierOligo,$NomOligo,NbCandidats) unset InfoOligo($FichierOligo,$NomOligo,NbContigues) unset InfoOligo($FichierOligo,$NomOligo,LesCandidats) unset InfoOligo($FichierOligo,$NomOligo,Sequence) } unset InfoOligo($FichierOligo,LesNoms) foreach DebutFin [set InfoOligo($FichierOligo,LesDebutFin)] { unset InfoOligo($FichierOligo,[lindex $DebutFin 0],[lindex $DebutFin 1],NomOligo) } unset InfoOligo($FichierOligo,LesDebutFin) } unset InfoOligo($FichierOligo,EstCharge) return "" } proc OLD_PosEtGCDeLaRegion {{SequenceADN ""} {lWin 400}} { Wup "Calcul le pourcentage de GC" global RepertoireDuGenome if {$SequenceADN==""} {return""} set ADN $SequenceADN set l [string length $ADN] set nGC 0 for {set i 0} {$i<$lWin} {incr i} { set Win($i) "A" set Win([incr i]) "C" incr nGC } set pWin 0 set ntGC 0 set Mi 99 set Ma 0 for {set i 1} {$i < $l} {incr i} { set c [string index $ADN $i] set w [set Win($pWin)] if { $c == "G" || $c == "C" } { incr nGC 1 ; incr ntGC} if { $w == "G" || $w == "C" } { incr nGC -1 } set Win($pWin) $c set pWin [expr ($pWin+1)%$lWin] set NewpGC [format "%.1f" [expr ($nGC*100.0)/$lWin]] if {[expr $i>$lWin/2] && [expr $i%($lWin/4)] == 0} {lappend SpectreXY "[expr $i-$lWin/2] $NewpGC"} set pGC $NewpGC set Mi [Mini $Mi $NewpGC] set Ma [Maxi $Ma $NewpGC] continue } set Moyen [format "%.1f" [expr ($ntGC*100)/[string length $ADN]]] set Entete [list "0 $Mi" "100 $Ma" "$Moyen $Moyen"] set SpectreGCXY [concat $Entete $SpectreXY] return $SpectreGCXY } proc OLD_balloon {target message {cx 0} {cy 0}} { global Bulle if {$Bulle(first) == 1 } { set Bulle(first) 2 if { $cx == 0 && $cy == 0 } { set x [expr [winfo rootx $target] + ([winfo width $target]/2)] set y [expr [winfo rooty $target] + [winfo height $target] + 4] } else { set x [expr $cx + 4] set y [expr $cy + 4] } toplevel .balloon -bg black wm overrideredirect .balloon 1 label .balloon.l -text $message -relief flat -bg #ffffaa -fg black -padx 2 -pady 0 -anchor w pack .balloon.l -side left -padx 1 -pady 1 wm geometry .balloon +${x}+${y} set Bulle(set) 1 } } proc OOOOOOOOOOCreateMotifMappingLevure {FichierMotifAMapper} { set FichierMotif $FichierMotifAMapper regsub ".txt" $FichierMotif "_MappingLevure.txt" FichierMotif set FichierCodonStartExonMix "/home/nguefack/random/levure/levure_R64/S_cerevisiae_StartCodonMix_Position.txt" set LeNew {} set LeNew2 {} set LesExons [LesLignesDuFichier $FichierCodonStartExonMix] set I 0 foreach Ligne [LesLignesDuFichier $FichierMotifAMapper] { lassign [LesMotsDeLaLigne $Ligne] Chr D F L C U foreach Ligne $LesExons { set LesMots [LesMotsDeLaLigne $Ligne] lassign $LesMots ChrA S E GnID GS GE TrID TS TE ExNb ES EE if {$Chr!=$ChrA} {continue} if {$Chr==$ChrA && $ES <= $D && $D <= $EE} { set NewLigne "$Chr $S $E $GnID $GS $GE [expr $GE-$GS+1] $TrID $TS $TE [expr $TE-$TS+1] $ExNb $ES $EE [expr $EE-$ES+1] $D $F $L $C $U [expr $D-$E+1]" lappend LeNew $NewLigne } } } SauveLesLignes $LeNew dans $FichierMotif return "ok" } proc ORFDeHSPTblastN {Deb Fin Orient Bank {aFrameshift ""} {Marge 3000}} { if {$aFrameshift!=""} { upvar $aFrameshift Frameshift } set GdDeb [expr $Deb - $Marge] set GdFin [expr $Fin + $Marge] set LongueurHSP [expr $Fin - $Deb +1] set Seq [BoutADNDeLaBanque $GdDeb $GdFin $Orient $Bank Probleme] if {$Seq==""} { puts "Sequence non trouvee pour ORFdeHSPTblastN" return "" } set LongueurTotale [string length $Seq] #determination du premier stop apres l'HSP set Curseur [expr $LongueurHSP+$Marge] set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] while {(![CodonStopPossible $Codon]) && ($Curseur <= [expr $LongueurTotale-4])} { incr Curseur 3 set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] } set PosFin [expr $Curseur-1] #determination du premier stop avant l'HSP set Curseur [expr $Marge -3] set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] while {![CodonStopPossible $Codon] && $Curseur>0} { incr Curseur -3 set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] } set PosDeb [expr $Curseur+3] #determination du premier met set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] while {![CodonStartPossible $Codon] && $Curseur<$Marge} { incr Curseur 3 set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] } set PremierMet $Curseur set Seq [string range $Seq $PremierMet $PosFin] set Max [expr [string length $Seq]-2] set Curseur 0 set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] while {![CodonStopPossible $Codon] && $Curseur<$Max} { incr Curseur 3 set Codon [string toupper [string range $Seq $Curseur [expr $Curseur+2]]] } set Frameshift [CodonStopPossible $Codon] return $Seq } proc ORFsDesOperonsCommuns {Texte {Action ""}} { set LesOperonsCommuns [lrange [split $Texte " "] 3 end] if {$Action=="ORFsOfOperon"} { foreach Op $LesOperonsCommuns { set LesORFsDeLOperon [O2C2O Operon $Op LesOrfs] set LaPage {} foreach ORF $LesORFsDeLOperon { lappend LaPage "$ORF [DefinitionApproximative $ORF]" } AfficheVariable [join $LaPage "\n"] "" "ORFs_of_operon_$Op" } return } } proc ORGAorgaDesBlastPs {{Nom ""} {Etat ""}} { global OosBP Oos global RepertoireDuGenome Wup "Create fiches/ooblastp if necessary" set CreerDeTouteFacon 0 if {$Nom=="CreateIt"} { set CreerDeTouteFacon 1 if {[info exists OosBP("EstCharge")]} { unset OosBP } } if {[info exists OosBP("EstCharge")] && $Nom=="" && [set OosBP("EstCharge")]=="ORGAorgaNonValide"} { return "ORGAorgaNonValide" } set FichierOosBP "$RepertoireDuGenome/fiches/ooblastp" if { ! [info exists OosBP("EstCharge")]} { if {[file exists $FichierOosBP] && ! $CreerDeTouteFacon} { foreach Ligne [LesLignesDuFichier $FichierOosBP] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set OosBP($PAB) $Reste } set OosBP("EstCharge") 1 } } if { ! [info exists OosBP("EstCharge")]} { set LesNomOosBP {} if {[OrthoBlastP "est-il" "valide"]!="OrthoBlastPNonValide"} { if { $CreerDeTouteFacon || [OuiOuNon " Do I create \n$FichierOosBP\n ?" 0]} { while {[file exists $FichierOosBP]} { if {[OuiOuNon "$FichierOosBP\n already exists. Do I replace it ?" 0]} { File delete $FichierOosBP break } if {[OuiOuNon "Do I append to it ? "]} { foreach Ligne [LesLignesDuFichier $FichierOosBP] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set OosBP($PAB) $Reste set DejaVu($PAB) 1 } break } if {[OuiOuNon "Do I cancel ?"]} { return "" } } } else { set OosBP("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } set LesOrgas {} foreach Complet [LesGenomesDansLeBonOrdre] { lappend LesOrganismes $Complet lappend LesOrgas [Glossaire $Complet Court] } foreach PAB [ListeDesPABs] { if {[info exists DejaVu($PAB)]} { continue } set LesOosBP {} foreach Orga $LesOrgas Organisme $LesOrganismes { # set BelOrga [string range "$Orga..." 0 3] set BelOrga $Orga set YaBP [OrthoBlastP $PAB $Organisme "OrgaOK"] if {$YaBP} { set Oo [string toupper $BelOrga] } else { set Oo [string tolower $BelOrga] } lappend LesOosBP $Oo } set OosBP($PAB) [join $LesOosBP " "] AppendAuFichier $FichierOosBP "$PAB [set OosBP($PAB)]" } } else { set OosBP("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } set OosBP("EstCharge") 1 } if {$Nom!=""} { if {[info exists OosBP($Nom)]} { set Retour [set OosBP($Nom)] if {$Etat=="Names"} { if {[info exists Oos("Names")]} { return [set Oos("Names")] } set Oos("Names") [VerticalNames $Retour] return [set Oos("Names")] } if {$Etat=="Stars"} { regsub -all {\.} $Retour "" Retour append Retour "/" regsub -all { +} $Retour "/" Retour regsub -all {[A-Z]+/} $Retour "*" Retour regsub -all {[A-Za-z]+} $Retour " " Retour regsub -all {/+} $Retour "" Retour regsub -all {\*} $Retour "P" Retour } if {$Etat=="Presents"} { regsub -all {[A-Z][a-z][a-z\.]+|[a-z][a-z\.]+} $Retour " " Retour } if {$Etat=="Absents"} { regsub -all {[A-Z][A-Za-z\.]+} $Retour " " Retour } return $Retour } else { return "" } } } proc ORGAorgaDesMSFs {{Nom ""} {Etat ""}} { global Oos global RepertoireDuGenome global NotreOS global NotreOrga Wup "Create fiches/oomsf if necessary" set CreerDeTouteFacon 0 if {$Nom=="CreateIt"} { set CreerDeTouteFacon 1 if {[info exists Oos("EstCharge")]} { unset Oos } } if {[info exists Oos("EstCharge")] && $Nom=="" && [set Oos("EstCharge")]=="ORGAorgaNonValide"} { return "ORGAorgaNonValide" } set FichierOos "$RepertoireDuGenome/fiches/oomsf" if { ! [info exists Oos("EstCharge")]} { if {[file exists $FichierOos] && ! $CreerDeTouteFacon} { foreach Ligne [LesLignesDuFichier $FichierOos] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set Oos($PAB) $Reste } set Oos("EstCharge") 1 } } if { ! [info exists Oos("EstCharge")]} { set LesNomOos {} if {[PourcentageIdentiteOrga "est-il" "valide"]=="PourcentageIdentiteOrgaNonValide"} { set Oos("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } else { if { $CreerDeTouteFacon || [OuiOuNon " Do I create \n$FichierOos\n ... It would take a while ... ?" 0]} { if {[file exists $FichierOos]} { if {[OuiOuNon "$FichierOos\n already exists. Do I replace it ?" 0]} { File delete $FichierOos } else { if {[OuiOuNon "Do I append to it ? "]} { foreach Ligne [LesLignesDuFichier $FichierOos] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set Oos($PAB) $Reste set DejaVu($PAB) 1 } } else { if {[OuiOuNon "Do I cancel ?"]} { return "" } else { } } } } } else { set Oos("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } set LesOrgas {} foreach Complet [LesGenomesDansLeBonOrdre] { lappend LesOrgas [Glossaire $Complet Court] } foreach PAB [ListeDesPABs] { if {[info exists DejaVu($PAB)]} { continue } set LesOos {} foreach Orga $LesOrgas { # set BelOrga [string range "$Orga..." 0 3] set BelOrga $Orga set PIO [PourcentageIdentiteOrga $PAB $Orga] if {$PIO == -1} { set Oo [string tolower $BelOrga] } elseif {$PIO >= 20} { set Oo [string toupper $BelOrga] } else { set Oo [string tolower $BelOrga] set Oo [string replace $Oo 0 0 [string toupper [string range $Oo 0 0]]] } lappend LesOos $Oo } set Oos($PAB) [join $LesOos " "] AppendAuFichier $FichierOos "$PAB [set Oos($PAB)]" } } set Oos("EstCharge") 1 } if {$Nom!=""} { if {[info exists Oos($Nom)]} { set Retour [set Oos($Nom)] if {$Etat=="Names"} { if {[info exists Oos("Names")]} { return [set Oos("Names")] } set Oos("Names") [VerticalNames $Retour] return [set Oos("Names")] } if {$Etat=="StarsP"} { regsub -all {\.} $Retour "" Retour append Retour "/" regsub -all { +} $Retour "/" Retour regsub -all {[A-Z][a-z]+} $Retour "*" Retour regsub -all {[A-Z]+/} $Retour "*" Retour regsub -all {[a-z]+/} $Retour " " Retour regsub -all {/+} $Retour "" Retour regsub -all {\*} $Retour "X" Retour } if {$Etat=="Stars"} { regsub -all {\.} $Retour "" Retour append Retour "/" regsub -all { +} $Retour "/" Retour regsub -all {[A-Z]+/} $Retour "*" Retour regsub -all {[A-Za-z]+} $Retour " " Retour regsub -all {/+} $Retour "" Retour regsub -all {\*} $Retour "A" Retour } if {$Etat=="Presents"} { regsub -all {[A-Z][a-z][a-z\.]+|[a-z][a-z\.]+} $Retour " " Retour } if {$Etat=="Hesitants"} { regsub -all {[A-Z][A-Z\.]+|^[a-z\.]+} $Retour " " Retour } if {$Etat=="Hesitants"} { regsub -all { [a-z\.]+} $Retour " " Retour } if {$Etat=="Absents"} { regsub -all {[A-Z][A-Za-z\.]+} $Retour " " Retour } return $Retour } else { return "" } } } proc ORGAorgaDesOperons {{Nom ""} {Etat ""}} { global OosO Oos global RepertoireDuGenome global NotreOS global NotreOrga Wup "Create fiches/oooperon if necessary" set CreerDeTouteFacon 0 if {$Nom=="CreateIt"} { set CreerDeTouteFacon 1 if {[info exists OosO("EstCharge")]} { unset OosO } } if {[info exists OosO("EstCharge")] && $Nom=="" && [set OosO("EstCharge")]=="ORGAorgaNonValide"} { return "ORGAorgaNonValide" } set FichierOos "$RepertoireDuGenome/fiches/oooperon" if { ! [info exists OosO("EstCharge")]} { if {[file exists $FichierOos] && ! $CreerDeTouteFacon} { foreach Ligne [LesLignesDuFichier $FichierOos] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set OosO($PAB) $Reste } set OosO("EstCharge") 1 } } if { ! [info exists OosO("EstCharge")]} { set LesNomOos {} if {[ListeDesOrganismesAyantMemeOperon "est-il-valide"]=="OrganismesAyantMemeOperonNonValide"} { set OosO("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } else { if { $CreerDeTouteFacon || [OuiOuNon " Do I create \n$FichierOos\n ... It would take a while ... ?" 0]} { if {[file exists $FichierOos]} { if {[OuiOuNon "$FichierOos\n already exists. Do I replace it ?" 0]} { File delete $FichierOos } else { if {[OuiOuNon "Do I append to it ? "]} { foreach Ligne [LesLignesDuFichier $FichierOos] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set OosO($PAB) $Reste set DejaVu($PAB) 1 } } else { if {[OuiOuNon "Do I cancel ?"]} { return "" } else { } } } } } else { set OosO("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } set LesOrgas {} foreach Complet [LesGenomesDansLeBonOrdre] { lappend LesOrgas [Glossaire $Complet Court] } foreach PAB [ListeDesPABs] { if {[info exists DejaVu($PAB)]} { continue } set LesOMOs [ListeDesOrganismesAyantMemeOperon $PAB] set LesOos {} foreach Orga $LesOrgas { set BelOrga $Orga set YEst [lsearch -exact $LesOMOs $Orga] if {$YEst < 0} { set Oo [string tolower $BelOrga] } else { set Oo [string toupper $BelOrga] } lappend LesOos $Oo } set OosO($PAB) [join $LesOos " "] AppendAuFichier $FichierOos "$PAB [set OosO($PAB)]" } } set OosO("EstCharge") 1 } if {$Nom!=""} { if {[info exists OosO($Nom)]} { set Retour [set OosO($Nom)] if {$Etat=="Names"} { if {[info exists Oos("Names")]} { return [set Oos("Names")] } set Oos("Names") [VerticalNames $Retour] return [set Oos("Names")] } if {$Etat=="Stars"} { regsub -all {\.} $Retour "" Retour append Retour "/" regsub -all { +} $Retour "/" Retour regsub -all {[A-Z]+/} $Retour "*" Retour regsub -all {[A-Za-z]+} $Retour " " Retour regsub -all {/+} $Retour "" Retour regsub -all {\*} $Retour "O" Retour } return $Retour } else { return "" } } } proc ORGAorgaDesTBlastNs {{Nom ""} {Etat ""}} { global OosTBN Oos global RepertoireDuGenome Wup "Create fiches/ootblastn if necessary" set CreerDeTouteFacon 0 if {$Nom=="CreateIt"} { set CreerDeTouteFacon 1 if {[info exists OosTBN("EstCharge")]} { unset OosTBN } } if {[info exists OosTBN("EstCharge")] && $Nom=="" && [set OosTBN("EstCharge")]=="ORGAorgaNonValide"} { return "ORGAorgaNonValide" } set FichierOosTBN "$RepertoireDuGenome/fiches/ootblastn" if { ! [info exists OosTBN("EstCharge")]} { if {[file exists $FichierOosTBN] && ! $CreerDeTouteFacon} { foreach Ligne [LesLignesDuFichier $FichierOosTBN] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set OosTBN($PAB) $Reste } set OosTBN("EstCharge") 1 } } if { ! [info exists OosTBN("EstCharge")]} { set LesNomOosTBN {} if {[OrthoTBlastN "est-il" "valide"]!="OrthoTBlastNNonValide"} { if { $CreerDeTouteFacon || [OuiOuNon " Do I create \n$FichierOosTBN\n ?" 0]} { while {[file exists $FichierOosTBN]} { if {[OuiOuNon "$FichierOosTBN\n already exists. Do I replace it ?" 0]} { File delete $FichierOosTBN break } if {[OuiOuNon "Do I append to it ? "]} { foreach Ligne [LesLignesDuFichier $FichierOosTBN] { scan $Ligne "%s" PAB regsub "$PAB " $Ligne "" Reste set OosTNB($PAB) $Reste set DejaVu($PAB) 1 } break } if {[OuiOuNon "Do I cancel ?"]} { return "" } } } else { set OosTBN("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } set LesOrgas {} foreach Complet [LesGenomesDansLeBonOrdre] { lappend LesOrgas [Glossaire $Complet Court] } foreach PAB [ListeDesPABs] { if {[info exists DejaVu($PAB)]} { continue } set LesOosTBN {} foreach Orga $LesOrgas { # set BelOrga [string range "$Orga..." 0 3] set BelOrga $Orga set PosTBN [OrthoTBlastN $PAB $Orga] if {$PosTBN == "-1:-1"} { set Oo [string tolower $BelOrga] } else { set Oo [string toupper $BelOrga] } lappend LesOosTBN $Oo } set OosTBN($PAB) [join $LesOosTBN " "] AppendAuFichier $FichierOosTBN "$PAB [set OosTBN($PAB)]" } } else { set OosTBN("EstCharge") "ORGAorgaNonValide" return "ORGAorgaNonValide" } set OosTBN("EstCharge") 1 } if {$Nom!=""} { if {[info exists OosTBN($Nom)]} { set Retour [set OosTBN($Nom)] if {$Etat=="Names"} { if {[info exists Oos("Names")]} { return [set Oos("Names")] } set Oos("Names") [VerticalNames $Retour] return [set Oos("Names")] } if {$Etat=="Stars"} { regsub -all {\.} $Retour "" Retour append Retour "/" regsub -all { +} $Retour "/" Retour regsub -all {[A-Z]+/} $Retour "*" Retour regsub -all {[A-Za-z]+} $Retour " " Retour regsub -all {/+} $Retour "" Retour regsub -all {\*} $Retour "T" Retour } if {$Etat=="Presents"} { regsub -all {[A-Z][a-z][a-z\.]+|[a-z][a-z\.]+} $Retour " " Retour } if {$Etat=="Absents"} { regsub -all {[A-Z][A-Za-z\.]+} $Retour " " Retour } return $Retour } else { return "" } } } proc ORTHON {aA aAA} { upvar $aA A upvar $aAA AA # ORTHONORMALISATION DE 3 VECTEURS, VECT. LIGNES DE A # LA DIRECTION DU 1ER VECT. EST CONSERVEE, # AINSI QUE LE PLAN DES DEUX PREMIERS VECTEURS. # B CONTIENT LES COORD. RECIPROQUES # # AA EST LE METRIQUE AA(I,J)=PROD.SCAL. A(I)*A(J) # # METRIQUE RECIPROQUE SMI3 AA BB Delta # set mBB [M_invM [M_T AA]] # T_M BB $mBB 1 # PROD. VECTORIELS A1*A2 ET A3*A1 PRVECT 1 A B BB PRVECT 3 A B BB # COMPOSANTES RECIPROQUES DU 1ER VECTEUR foreach J {1 2 3} { set B(1,$J) [expr {[set A(1,1)]*[set AA(1,$J)]+[set A(1,2)]*[set AA(2,$J)]+[set A(1,3)]*[set AA(3,$J)]}] } # NORMALISATION foreach I {1 2 3} { set ANORM [expr {sqrt([set A($I,1)]*[set B($I,1)]+[set A($I,2)]*[set B($I,2)]+[set A($I,3)]*[set B($I,3)])}] if {$ANORM < 1.E-30} { puts " STOP ORTHON" exit } foreach J {1 2 3} { set A($I,$J) [expr {[set A($I,$J)]/$ANORM}] } } return } proc ObjDeTest {} { global Tlist if {[info exists Tlist]} { glCallList $Tlist } else { set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricOrientation $QObj GLU_OUTSIDE gluQuadricNormals $QObj GLU_SMOOTH set mat_spe { 1.0 1.0 1.0 1.0 } set Lball [list [list 0.0 0.0 0.0 0.5] [list 5.0 0.0 0.0 1.0] [list 0.0 5.0 0.0 2.0] [list 0.0 0.0 5.0 3.0]] set Lcol [list [list 1.0 1.0 1.0] [list 1.0 0.0 0.0] [list 0.0 1.0 0.0] [list 0.0 0.0 1.0] ] set Lcyl [list 0.1 0.4 5.0 12 1] set Laxe [list 0 [list 90. 0.0 1.0 0.0] [list -90. 1.0 0.0 0.0] [list 0. 0.0 0.0 1.0]] set Tlist [glGenLists 1] puts "Display List $Tlist" glNewList $Tlist GL_COMPILE_AND_EXECUTE foreach v $Lball c $Lcol a $Laxe { lassign $v x y z r lappend c 1.0 glMaterialfv GL_FRONT GL_SPECULAR $mat_spe glMaterialfv GL_FRONT GL_SHININESS 100. glMaterialfv GL_FRONT GL_EMISSION {0. 0. 0. 1.} glMaterialfv GL_FRONT GL_AMBIENT $c glMaterialfv GL_FRONT GL_DIFFUSE $c glPushMatrix glTranslatef $x $y $z glColor4fv $c gluSphere $QObj $r 16 16 glPopMatrix if {$a != 0} { glPushMatrix glRotatef {*}$a glColor4f 1.0 1.0 1.0 1.0 gluCylinder $QObj {*}$Lcyl glPopMatrix } } gluDeleteQuadric $QObj glEndList } return } proc ObjectAlreadyExists {obj} { set obj [BonObjName $obj] return [expr {$obj in [GetTables]}] } proc OffreLesMots {Texte} { regsub -all {[\|\n\;\,?]} $Texte " " Texte regsub -all { +} $Texte " " Texte return [Affiche [join [split $Texte " "] "\n"] "AvecShow" "Splitted_line"] } proc OffsetDansEnteteSegAli {Ligne {BanqueBlast ""}} { scan $Ligne "%s" BanqueAccess regsub ">" $BanqueAccess "" BanqueAccess scan [OffsetEtOrganismeDuFragment $BanqueAccess $BanqueBlast] "%d" Offset return $Offset } proc OffsetEtOrganismeDuFragment {Fragment {NomDeLaBanque ""}} { global OffsetEtOrganismeDuFragment global CorrectionDuAccessDuFragment global RepertoireDuGenome if {[regexp {GENBANK.*\:} $Fragment]} { set LesMots [LesMotsDeLaLigne $Fragment] set LesGenres [lrange $LesMots 2 end] set LesEspeces [lrange $LesMots 3 end] set Genre "Unknown" set Espece "unknown" foreach Genre $LesGenres Espece $LesEspeces { if {[regexp {^[A-Z][a-z]+$} $Genre] && [regexp {^[a-z]+$} $Espece]} { break } set Genre "Unknown" set Espece "unknown" } return "0 $Genre $Espece [Tax "$Genre $Espece"]" } global SansOffsetEtOrganisme if {[info exists SansOffsetEtOrganisme] && $SansOffsetEtOrganisme} { return "0 Inconnu inconnu" } Wup "NomDeLaBanque can be a file in BlastBanks or an other file in absolute notation" set BlastBanks "$RepertoireDuGenome/banques" if {$NomDeLaBanque==""} { if {[regexp -nocase "msme\:" $Fragment]} { set BlastBank "$BlastBanks/MSoverlap" } else { set BlastBank "$BlastBanks/completegenomes" } } else { set BlastBank $NomDeLaBanque if {[file exists $BlastBank] || [file exists $BlastBank.nhr] || [file exists $BlastBank.nal]} { } else { set BlastBank "$BlastBanks/$NomDeLaBanque" } } if { ! [info exists CorrectionDuAccessDuFragment]} { set CorrectionDuAccessDuFragment("EstCharge") 1 set FichierCorrection "$BlastBank.correction" if {[file exists $FichierCorrection]} { foreach Ligne [LesLignesDuFichier $FichierCorrection] { scan $Ligne "%s %s" Old New set Old [string toupper $Old] set CorrectionDuAccessDuFragment($Old) $New } } } scan $Fragment "%s" Access set ACCESS [string toupper $Access] if {[info exists CorrectionDuAccessDuFragment($ACCESS)]} { set New [set CorrectionDuAccessDuFragment($ACCESS)] regsub "$Access" $Fragment $New Fragment } if {[regexp -nocase {[a-z0-9_]+\:} $Fragment Banque]} { set BANQUE [string toupper $Banque] regsub $Banque $Fragment $BANQUE Fragment } else { Espionne $Fragment set BANQUE "BANKUNK:" } # regsub -nocase {^CPNE2\:} $Fragment "CPNEU2:" Fragment # regsub -nocase {^CPNE3\:} $Fragment "CPNEU3:" Fragment regsub {\:} $BANQUE "" BANQUE if {[file exists "$BlastBanks.banks"]} { set LesBanks [LesLignesDuFichier "$BlastBanks.banks"] if {[lsearch -exact $LesBanks $BANQUE] == -1 && $BANQUE!="YE"} { set LesBanksEtMoi $LesBanks lappend LesBanksEtMoi $BANQUE set LesBanksEtMoi [lsort $LesBanksEtMoi] set Moi [lsearch $LesBanksEtMoi $BANQUE] set Avant [lindex $LesBanksEtMoi [expr $Moi - 1]] set Apres [lindex $LesBanksEtMoi [expr $Moi + 1]] set i 0 while {1} { set A [string index $Avant $i] set M [string index $BANQUE $i] set P [string index $Apres $i] incr i if {$A==$M && $M==$P} { continue } if {$A==$M} { set Bon $Avant } else { set Bon $Apres } break } Espionne "$Avant $BANQUE $Apres $Bon" regsub "$BANQUE" $Fragment $Bon Fragment } } # regsub -nocase {^WORM[IVX]+\:} $Fragment "WORM:" Fragment if { ! [info exists OffsetEtOrganismeDuFragment("EstCharge",$BlastBank)]} { set FichierFragments "$BlastBank.frag" if { ! [file exists $FichierFragments]} { set FichierFragments [GereLesFragmentsDeLaBanqueBlast $BlastBank] if {$FichierFragments==""} { return "" } } foreach Ligne [LesLignesDuFichier $FichierFragments] { set TaxId -1 scan $Ligne "%s %s %s %s %s %s %s %s %s %s %s" BanqueId BanqueLu Nba Id Nid F DebutFragment OffsetDuFragment Genre Espece TaxId # if {"$Genre $Espece"=="Buchnera sp"} { set Espece "aphidicola" } set OffsetEtOrganismeDuFragment($BanqueId,$BlastBank) "$OffsetDuFragment $Genre $Espece $TaxId" } } set OffsetEtOrganismeDuFragment("EstCharge",$BlastBank) 1 if {[info exists OffsetEtOrganismeDuFragment($Fragment,$BlastBank)]} { return [set OffsetEtOrganismeDuFragment($Fragment,$BlastBank)] } set FRAGMENT [string toupper $Fragment] if {[info exists OffsetEtOrganismeDuFragment($FRAGMENT,$BlastBank)]} { return [set OffsetEtOrganismeDuFragment($FRAGMENT,$BlastBank)] } return "0 Unknown unknown" } proc OiCode {{Qui ""} {Quoi ""}} { global OiCode #rR OX est le TaxId, OS le vrai nom de l'organisme, OI le petit nom, OW l'organisme bien écrit #rR On définit ici comment doit s'appeler un organisme son OiCode par exemple Homsa pour Homo sapiens #rR On nomme les fichiers OI_OW_OX et on rajoute pour chaque entête OI=Homsa OX=9606 #rR Ces fichiers sont rangés dans le sous-répertoire NotaBene (les bien nommés ! ;) ) #rR OW est en fait le OS en remplaçant les caractères louches par _ #rR Attention Si on veut rempalcer NotaBene par autre chose il faut le faire partout ... if {[regexp -nocase "PreFixe" $Quoi]} { set Quoi "OI" } if {$Qui=="Reset"} { if {[info exists OiCode]} { unset OiCode } return "" } if {[info exists OiCode($Qui,$Quoi)]} { return $OiCode($Qui,$Quoi) } if {[info exists OiCode("EstCharge")]} { if {[info exists OiCode($Qui,OX)]} { set OX $OiCode($Qui,OX) if {[info exists OiCode($OX,$Quoi)]} { return $OiCode($OX,$Quoi) } } if {$Qui=="ListOf" && $Quoi=="OXOS"} { set LesOXOS {} foreach OX $OiCode(ListOf,OX) { lappend LesOXOS "$OX $OiCode($OX,OS)" } return $LesOXOS } return "" } set OiCode("EstCharge") 1 set OiFromFullFilename 0 ; #rR 0 on va le chercher dans la première ligne. 1 c'est le premier Homsa_ set OsFromFullFilename 0 ; #rR 0 on va le chercher dans la première ligne. 1 c'est le premier entre les deux autres set OxFromFullFilename 0 ; #rR 0 on va le chercher dans la première ligne. 1 c'est le dernier _9606 set ProteomesDir [OiDomain Dir] set NotaBeneDir "$ProteomesDir/NotaBene" set OiCode(ProteomesDir,) $ProteomesDir set OiCode(NotaBeneDir,) $NotaBeneDir set Alphabet " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" NousAllonsAuBoulot $ProteomesDir file mkdir NotaBene set FichierBlackList "BlackList.txt" if {[file exists $FichierBlackList]} { foreach Ligne [LesLignesDuFichier $FichierBlackList] { if {[regexp "#" $Ligne]} { continue } scan $Ligne "%d" OX lappend OiCode(ListOf,BlackListed) $OX set OiCode($OX,IsBlackListed) 1 } set OiCode(ListOf,BlackListed) [lsort -unique -integer $OiCode(ListOf,BlackListed)] } set OiCode(ListOf,Filename) {} #rR attention il y a deux manières de procéder ... #rR juste ci dessous on a déjà traité une partie et créé les fichiers OI_OW_OX foreach Fichier [lsort [glob -nocomplain "NotaBene/*"]] { set Queue [file tail $Fichier] set OI "" ; if {$OiFromFullFilename && ! [regexp -nocase {^([a-z]+)_} $Queue Match OI ]} { continue } set OW "" ; if { ! [regexp -nocase {^([a-z]+)_(.+)_([0-9]+)$} $Queue Match debut OW]} { continue } ; #rR On le prend toujours là set OX "" ; if {$OxFromFullFilename && ! [regexp -nocase {_([0-9]+)$} $Queue Match OX ]} { continue } set OS "" ; if {$OsFromFullFilename} { set OS $OW ; regsub -all "_" $OS " " OS } ; #rR Attention c'est pas vraiment le OS d'origine ... set Ligne [PremiereLigneDuFichier $Fichier] regsub -all " = " $Ligne " " Ligne if {$OI=="" && ! [regexp {OI=([^=]+)( [A-Z][A-Z]=|$)} $Ligne Match OI]} { FaireLire "merde $Ligne"; continue } if {$OS=="" && ! [regexp {OS=([^=]+)( [A-Z][A-Z]=|$)} $Ligne Match OS]} { FaireLire "merde $Ligne"; continue } if {$OX=="" && ! [regexp {OX=([^=]+)( [A-Z][A-Z]=|$)} $Ligne Match OX]} { FaireLire "merde $Ligne"; continue } regsub -all {[\[\]']} $OS "" OS set OiCode($OX,OI) $OI set OiCode($OX,OS) $OS set GeEs [GeEsFrom $OS] set OiCode($OX,GeEs) $GeEs if { ! [info exists NbCops($GeEs)]} { set NbCops($GeEs) 0 } set Info [format "%-8s %9d %s" $OI $OX $OS] lappend LesGeEs $GeEs lappend LesOX $OX lappend LesOS $OS incr NbCops($GeEs) set Filename $OS regsub -nocase -all {[^a-z0-9\-_]+} $Filename "_" Filename set OWcalcule [string trim $Filename "_"] if {$OW!=$OWcalcule && [OuiOuNon "from $Fichier\n$OWcalcule is not $OW\nDo I use $OWcalcule"]} { set OW $OWcalcule } set OiCode($OX,OW) $OW set OiCode($OW,OX) $OX set OiCode($OX,Info) $Info set OiCode($Info,OX) $OX set FullFilename "${OI}_${OW}_${OX}" set OiCode($FullFilename,OX) $OX set OiCode($OX,FullFilename) $FullFilename lappend OiCode(ListOfAll,FullFilename) $FullFilename set FullFilePath "$NotaBeneDir/$FullFilename" set OiCode($FullFilePath,OX) $OX set OiCode($OX,FullFilePath) $FullFilePath lappend OiCode(ListOfAll,FullFilePath) $FullFilePath } foreach Fichier [lsort [glob *.fasta]] { if { ! [regexp {^UP[^_]+_([0-9]+).fasta$} $Fichier Match OX]} { if { ! [regexp {_([0-9]+).fasta$} $Fichier Match OX]} { if { ! [regexp {_new_([0-9]+).fasta$} $Fichier]} { FaireLire "Je ne sais pas quoi faire de $Fichier" } continue } if {[info exists OiCode($OX,FullFilename)]} { continue } set FichierNouveau $Fichier regsub {.fasta$} $FichierNouveau "" FichierNouveau append FichierNouveau "_new.fasta" set OX [ConvertFastaToUniprotStandard $Fichier $FichierNouveau] if {$OX==""} { continue } if { ! [regexp {^([0-9]+) is already converted} $OX Match OX]} { set Original "${Fichier}_Original" if {[FileAbsent $Original]} { file rename $Fichier $Original } regsub {_[0-9]+_new.fasta$} $FichierNouveau "_new_$OX.fasta" FichierNouveauNouveau if {[file exists $FichierNouveauNouveau]} { file delete $FichierNouveauNouveau } file rename $FichierNouveau $FichierNouveauNouveau set Fichier $FichierNouveauNouveau } } if {[info exists OiCode($OX,FullFilename)]} { continue } #FaireLire "Tiens ! Un nouveau \n$Fichier\nMerci de vérifier le programme !!!!!!!!!!!!!!!" #rR là on traite des nouveaux ... #rR on le fera en bas avec la ListOf Filename set Ligne [PremiereLigneDuFichier $Fichier] regsub -all " = " $Ligne " " Ligne if { ! [regexp {OS=([^=]+) [A-Z][A-Z]=} $Ligne Match OS]} { FaireLire "ca merde $Ligne"; continue } regsub -all {[\[\]']} $OS "" OS set GeEs [GeEsFrom $OS] set DomaineConnu 0 if {[string index [OiDomain] 0]=="A"} { set GeEs "A$GeEs" ; set DomaineConnu 1 } if {[string index [OiDomain] 0]=="B"} { set GeEs "B$GeEs" ; set DomaineConnu 1 } if {[string index [OiDomain] 0]=="E"} { set GeEs "E$GeEs" ; set DomaineConnu 1 } if {[string index [OiDomain] 0]=="V"} { set GeEs "V$GeEs" ; set DomaineConnu 1 } if { ! $DomaineConnu } { set GeEs "X$GeEs" } if { ! [info exists NbCops($GeEs)]} { set NbCops($GeEs) 0 } set Info [format "%-8s %9d %s" $GeEs $OX $OS] set OiCode($OX,Info) $Info ; #rR il chagera peut-être si deux ont le même GeEs lappend LesGeEs $GeEs lappend LesOX $OX lappend LesOrga $OS incr NbCops($GeEs) set Filename $OS regsub -nocase -all {[^a-z0-9\-_]+} $Filename "_" Filename set OWcalcule [string trim $Filename "_"] set OiCode($OX,OW) $OWcalcule set Filename "${OWcalcule}_${OX}" ; #rR attention ici on ne connait pas encore OI set OiCode($OX,Filename) $Filename lappend OiCode(ListOf,Filename) $Filename set OiCode($OX,Origine) $Fichier set OiCode($OX,OS) $OS } foreach GeEs $LesGeEs OX $LesOX { lappend OiCode(ListOf,GeEs) $GeEs set OI "" set Info $OiCode($OX,Info) if { ! [info exists OiCode($OX,OI)]} { set OI $GeEs if {$NbCops($GeEs)==1} { set OiCode($GeEs,NbCops) 1 } else { if { ! [info exists OiCode($GeEs,NbCops)]} { set OiCode($GeEs,NbCops) 0 } incr OiCode($GeEs,NbCops) set N $OiCode($GeEs,NbCops) if {$N<=26} { set Car [string index $Alphabet $N] } else { set D [expr $N/26 + 1 ] set U [expr $N%26 + 1 ] set Car "[string index $Alphaget $D][string index $Alphaget $U]" } append OI $Car } set OiCode($OX,OI) $OI set Info [format "%-8s %9d %s" $OI $OX $OS] } set OW $OiCode($OX,OW) set OS $OiCode($OX,OS) set OI $OiCode($OX,OI) set OiCode($OX,Info) $Info lappend OiCode($GeEs,ListOfOX) $OX lappend OiCode($GeEs,ListOfOI) $OI lappend OiCode($GeEs,ListOfOS) $OS lappend OiCode($GeEs,ListOfInfo) $Info set OiCode($OX,OX) $OX if {[info exists OiCode($OX,FullFilename)]} { set OiCode($OX,Fasta) "$ProteomesDir/$OiCode($OX,FullFilename)" } set OiCode($OI,OX) $OX set OiCode($OS,OX) $OX lappend LesOS $OS lappend LesOW $OW lappend LesOI $OI } set LesOX [lsort -integer $LesOX] set LesOS [lsort -unique $LesOS] set LesOW [lsort -unique $LesOW] set LesOI [lsort -unique $LesOI] foreach OI $LesOI { set OX $OiCode($OI,OX) lappend LesInfo $OiCode($OX,Info) } if {1} { foreach Filename $OiCode(ListOf,Filename) { Espionne $Filename #if { ! [OuiOuNonMemo "Do I add OI and OX to this new fasta file"]} { Espionne "Skip $Filename" ; continue } if { ! [regexp {_([0-9]+)$} $Filename Match OX]} { continue } if { ! [info exists OiCode($OX,OI)]} { FaireLire "Merde $Filename" } set OI $OiCode($OX,OI) set FullFilename "${OI}_$Filename" set FastaFile "NotaBene/$FullFilename" set OW "" if { ! [regexp -nocase {^([a-z]+)_(.+)_([0-9]+)$} $FullFilename Match debut OW]} { FaireLire "$FastaFile has no correct format" continue } set OiCode($OW,OX) $OX set OS [Tax $OX Name] regsub -all "'" $OS "" OS set OiCode($OS,OX) $OX set Info [format "%-8s %9d %s" $OI $OX $OS] set OiCode($OW,OX) $OX set OiCode($Info,OX) $OX if {[FileAbsent $FastaFile]} { set Origine $OiCode($OX,Origine) set Nouveau [RajouteEnFinDeEnteteFasta $Origine " OI=$OI OX=$OX" $FastaFile] } set FullFilename "$FastaFile" set OiCode($OX,FullFilename) $FullFilename set OiCode($FullFilename,OX) $OX lappend OiCode(ListOf,FullFilename) $FullFilename set FullFilePath "$ProteomesDir/$FastaFile" set OiCode($OX,FullFilePath) $FullFilePath set OiCode($FullFilePath,OX) $OX lappend OiCode(ListOf,FullFilePath) $FullFilePath Espionne $FullFilePath } } set OiCode(ListOfAll,OX) $LesOX set OiCode(ListOfAll,OI) $LesOI set OiCode(ListOfAll,OS) $LesOS set OiCode(ListOfAll,OW) $LesOW set OiCode(ListOfAll,Info) $LesInfo foreach K [list OX OI OS OW Info FullFilePath FullFilename] { set OiCode(ListOf,$K) {} if { ! [info exists OiCode(ListOfAll,$K)]} { Espionne "OiCode(ListOfAll,$K) does not exist"; continue } foreach V $OiCode(ListOfAll,$K) { if {! [info exists OiCode($V,OX)]} { Espionne $K Espionne $V continue } set OX $OiCode($V,OX) if {[info exists OiCode($OX,IsBlackListed)]} { continue } lappend OiCode(ListOf,$K) $V } } OnRevientDuBoulot return [OiCode $Qui $Quoi] } proc OiCodeDoublons {} { set LesE [OiCodeForDomain E ListOf OI] set LesA [OiCodeForDomain A ListOf OI] set LesAE [ListsIntersection $LesA $LesE] Espionne "[llength $LesA] [llength $LesE] [llength $LesAE]" EspionneL $LesAE } proc OiCodeForDomain {Dom args} { OiDomain "MemorizeThenSetTo" $Dom OiCode "Reset" set R [OiCode {*}$args] OiDomain "BackToMemorized" return $R } proc OiCodes {LesQui {Quoi ""} {LesDomaines ""}} { if {[regexp {[ \t\,\;\n\r]+} $LesQui]} { set LesQui [LesMotsDuTexte $LesQui]} if {$LesDomaines==""} { set LesDomaines [list Archaea Eukaryota] } else { set LesDomaines [LesMotsDuTexte $LesDomaines] } foreach Domaine $LesDomaines { OiDomain "MemorizeThenSetTo" $Domaine foreach Qui $LesQui { Espionne "$Domaine $Qui OiCode $Qui $Quoi" if {[info exists QuoiDe($Qui)] && $QuoiDe($Qui)!=""} { continue } set QuoiDe($Qui) [OiCodeForDomain $Domaine $Qui $Quoi] Espionne "$Qui =$QuoiDe($Qui)=" } OiDomain "BackToMemorized" } set LesQuiQuoi {} foreach Qui $LesQui { set R "" if {[info exists QuoiDe($Qui)]} { set R $QuoiDe($Qui) } lappend LesQuiQuoi "$Qui=$R" } set QuiQuoi [join $LesQuiQuoi "\n"] return $QuiQuoi } proc OiCompressBlastonl {} { NousAllonsAuBoulot "[RepertoireDuGenome]/oif" set LesCopies {} foreach Nom [lsort [glob -nocomplain "[PreFixe]*"]] { NousAllonsAuBoulot "$Nom/blast" set LesBlast [exec ls -t] if {[set N [llength $LesBlast]]<10000} { if { ! [OuiOuNon "Il n'y a que $N blast pour $Nom. Je copie quand même ?" 0] } { OnRevientDuBoulot continue } } set Dernier [lindex $LesBlast end] set Date [Date "" [file mtime $Dernier]] set Assiette "/tempor/grid/poeles/${Nom}_${Date}/assiette" if {[file exists "$Assiette/output.gz"]} { if { ! [OuiOuNon "$Assiette already exists. Do I overwrite ?" 0]} { OnRevientDuBoulot continue } } file mkdir $Assiette Espionne "$Nom $Assiette" exec sh -c "cat * | pigz -9 -p 18 > $Assiette/output.gz" lappend LesCopies $Assiette OnRevientDuBoulot } OnRevientDuBoulot return $LesCopies } proc OiCreateOrganismXml {{Domaine ""} {DefBkDate ""} {DefBkIdentifier ""} {DefBkDescription ""}} { if {$Domaine==""} { set Domaine [OiDomain] } if {$DefBkDate ==""} { set DefBkDate "2016-11-17" } if {$DefBkIdentifier ==""} { set DefBkIdentifier "UniprotKB" } if {$DefBkDescription ==""} { set DefBkDescription "$DefBkIdentifier - $DefBkDate" } OiDomain "MemorizeThenSetTo" $Domaine set Fichier "[OiCode ProteomesDir]/OtherDB.txt" if {[FileExists $Fichier]} { foreach Ligne [LesLignesDuFichier $Fichier] { set Date "" set Iden "" set Desc "" lassign [split $Ligne "\t"] OX Date Iden Desc set OtherDB($OX,BkDate) $Date set OtherDB($OX,BkIdentifier) $Iden set OtherDB($OX,BkDescription) $Desc } } set LesOX [OiCode ListOf OX] set File "[OiCode NotaBeneDir]/organism.xml" set LeXml {} lappend LeXml "" lappend LeXml "" foreach OX $LesOX { set BkDate $DefBkDate set BkIdentifier $DefBkIdentifier set BkDescription $DefBkDescription if {[info exists OtherDB($OX,BkDate) ]} { set BkDate $OtherDB($OX,BkDate) } if {[info exists OtherDB($OX,BkIdentifier) ]} { set BkIdentifier $OtherDB($OX,BkIdentifier) } if {[info exists OtherDB($OX,BkDescription)]} { set BkDescription $OtherDB($OX,BkDescription) } if {$BkDescription ==""} { set BkDescription "$BkIdentifier - $BkDate" } set OS [OiCode $OX OS] set OI [OiCode $OX OI] set FullFilename [OiCode $OX FullFilename] set Class [TaxClass $OX "TaxId"] Espionne "$OX $OS $OI $FullFilename" scan $OS "%s %s" Genre Espece ; #rR c'était avant 2017/02/02 regsub "$Genre " $OS "" Espece ; #rR on garde tout lappend LeXml " " lappend LeXml " $Genre" lappend LeXml " $Espece" lappend LeXml " $OI" lappend LeXml " $Class" lappend LeXml " " lappend LeXml " " lappend LeXml " $BkDate" lappend LeXml " $BkIdentifier" lappend LeXml " $BkDescription" lappend LeXml " " lappend LeXml " $OX" lappend LeXml " " lappend LeXml " " lappend LeXml " " lappend LeXml " $FullFilename" lappend LeXml " " } lappend LeXml "" set Xml [join $LeXml "\n"] OiDomain "BackToMemorized" set Retour [Sauve $Xml dans $File] return $Retour } proc OiDomain {{Value ""} {Quoi ""}} { global OiDomain global OIDomainStack #rR Positionne Rend le domaine ou la dir du domaine concerné Euka Bact Arch Virus #rR Une lettre suffit pour les domaines pour les mots clés il en faut au moins 3 #rR ... mais attention il ne faut pas que les domaines commencent pas les mots clefs listés ci-dessous #rR OiDomain rend le defaut (Eukaryota) ou autre s'il a été modifié précédemment #rR OiDomain B positionne à Bacteria et rend Bacteria #rR OiDomain B Dir positionne à Bacteria et rend /genomics/link/OrthoInspector_Proteomes/Bacteria #rR OiDomain Dir rend /genomics/link/OrthoInspector_Proteomes/Bacteria si c'est le dernier positionné #rR OiDomain Dir B pareil que l'inverse #rR On peut mémoriser par OiDomain MemorizeThenSetTo Nouveau #rR .... et dépiler par OiDomain BackToMemorized set ProteomesDir [OiProteomesDir] set LesInitiales {} set LesQueues {} foreach PossibleDir [glob -nocomplain -type "d" "$ProteomesDir/*"] { set Queue [file tail $PossibleDir] lappend LesQueues $Queue set Ini [string index $Queue 0] lappend LesInitiales $Ini set QueueDe($Ini) $Queue } if {$Value=="Ini"} { return $LesInitiales } if {$Quoi=="Que"} { if {[info exists QueueDe($Value)]} { return $QueueDe($Value) } else { return "" } } if {$Value=="Ask"} { set PossibleDirs [lsort [glob -nocomplain -type "d" "$ProteomesDir/*"]] foreach PossibleDir $PossibleDirs { lappend LesQueue [file tail $PossibleDir] } set Choix [ChoixParmi $LesQueue] if {$Choix==""} { return "" } return [OiDomain $Choix $Quoi] } if { ! [info exists OiDomain]} { if {[OnTraite ArchaeaProteome Like]} { set PossibleDir [glob -nocomplain -type "d" "$ProteomesDir/A*"] } elseif {[OnTraite BacteriaProteome Like]} { set PossibleDir [glob -nocomplain -type "d" "$ProteomesDir/B*"] } elseif {[OnTraite EukaryotaProteome Like]} { set PossibleDir [glob -nocomplain -type "d" "$ProteomesDir/E*"] } else { set PossibleDir [glob -nocomplain -type "d" "$ProteomesDir/E*"] } set OiDomain [file tail $PossibleDir] set OIDomainStack [list $OiDomain] } if {[regexp -nocase "^Memo" $Value]} { lappend OiDomainStack $OiDomain set OiDomain $Quoi return $OiDomain } if {[regexp -nocase "BackTo" $Value]} { set OiDomain [lindex $OIDomainStack 0] set OIDomainStack [lrange $OIDomainStack 0 end-1] return $OiDomain } set VAL [string totitle [string range $Value 0 2]] set Quoi [string totitle [string range $Quoi 0 2]] if {$VAL in [list Dir Lis Que]} { set W $VAL set VAL $Quoi set Quoi $W } set V [string toupper [string index $VAL 0]] if {$V!=""} { set Dir "" set Dom "" foreach PossibleDir [glob -nocomplain -type "d" "$ProteomesDir/*"] { set Queue [file tail $PossibleDir] if {$V==[string toupper [string index $Queue 0]]} { set Dir $PossibleDir set OiDomain $Queue break } } } if {$Quoi=="Que"} { return [lsort $LesQueues] } if {$Quoi=="Lis"} { return [lsort [glob -nocomplain -type "d" "$ProteomesDir/*"]] } if {$Quoi=="Dir"} { return "$ProteomesDir/$OiDomain" } return $OiDomain } proc OiDomainFromOiCode {OiCode} { return [OiDomain [string index $OiCode 0] Que] } proc OiLesTFAsDesOrthologs {{Query ""} {OrgaList ""} {Quoi ""}} { if {$OrgaList=="" || [regexp -nocase "Defau" $OrgaList]} { set OrgaList [OiOrgaList]} set FicOut "[TmpFile].oi" exec /biolo/orthoinspector/oi_client -mode single -query $Query -organism_list $OrgaList -outfmt 5 -out $FicOut if {[FileAbsent $FicOut]} { return {} } set LesLignes [LesLignesDuFichier $FicOut] file delete $FicOut if {$Quoi=="GetHeader" || $Quoi=="GetAccess"} { set LeRetour {} foreach Ligne $LesLignes { if { ! [regexp ">" $Ligne]} { continue } if {$Quoi=="GetHeader"} { lappend LeRetour $Ligne ; continue } scan [string range $Ligne 1 end] "%s" Access if {$Quoi=="GetAccess"} { lappend LeRetour $Access ; continue } } return $LeRetour } return $LesLignes } proc OiMiseEnPlace {} { FaireLire "Attention cette procédure n'est qu'un pense bête ... à exécuter à vos risques et perils" # le mieux est d'avoir fait setgscoperr OIA (ou setgscoperr OI pourles Eukaryota ou OIB pour Bacteria) set Domaine [OiDomain] # mettre les protéomes en /genomics/link/OrthoInspector/$Domaine # Attention de faire les proteomes après avoir déposé BlackList.txt dans /genomics:lik/OrthoInspector/$Domain OiCode ListOf OX ; #rR va créer les proteomes dans Notabene en tena tcompte de la BlackList.txt OiCreateOrganismXml ; #rR va créer le fihier Xlm pour la base OrthoInpector RefaireLesProteomesNonUniprotStandard OiCodeForDomain $Domaine ListOf OX ; #rR pour créer les protéomes bien nommés dans ...../NotaBene CreeBlastDatabaseWithOiCode $Domaine ; #rR on y crée la banque blast en utilisant OiCodeForDomain et la BlackList.txt de NotaBene # Creer un projet Gscope comme OI OiSplit #rR prises dans le FASTA de la grosse banque blast WIW ListOf OX ; #rR pour voir Who Is Where #rR et pour les blast gscope Blastong ; #rR par défaut max 4 gscope Blastong +2 ; #rR pour en rajouter 2 quelque soit le nombre qui tournent déjà gscope Blastonh gscope Blastonl +2 "" OI5000,OI5001 #rR Quand les blast sont faits c'est à dire qu'ils sont tous dasn les poeles AuCongelo PiqueAssiette MissBlast TaxonomyDuBlastPourTous ; #rR peut être fait par le web ... Gstore CreeTaxoblaWithMyMissBlast ; #rR On y met la ligne du propre prottfa pour qu'il se voit lui-même } proc OiName {{Qui ""} {Quoi ""}} { global OiName if {[info exists OiName($Qui,$Quoi)]} { return $OiName($Qui,$Quoi) } if {[info exists OiName("EstCharge")]} { if {[info exists OiName($Qui,OX)]} { set OX $OiName($Qui,OX) if {[info exists OiName($OX,$Quoi)]} { return $OiName($OX,$Quoi) } } return "" } set OiName("EstCharge") 1 set ProteomeDir "/genomics/link/CilioCarta/banques" set OiName(ProteomeDir,) $ProteomeDir set Alphabet "ABCDEFGHIJKLMNOPQRSTUVWXYZ" NousAllonsAuBoulot $ProteomeDir foreach Orga [lsort [glob *]] { if {[regexp {\.p|\.log} $Orga]} { continue } if { ! [regexp {([A-Z][a-z]+)_([a-z]+)_([0-9]+)} $Orga Match G E OX]} { continue } set Ge [string range $G 0 1] set Es [string totitle [string range $E 0 1]] set GeEs "$Ge$Es" set Info "$GeEs [format %8d $OX] $Orga" set InfoDe($OX) $Info set OrgaDe($OX) $Orga lappend LesGeEs $GeEs lappend LesOX $OX lappend LesOrga $Orga incr NbCops($GeEs) } set iAlpha -1 foreach GeEs $LesGeEs OX $LesOX { set Prefixe $GeEs if {$NbCops($GeEs)==1} { set iAlpha -1 } else { incr iAlpha append Prefixe [string index $Alphabet $iAlpha] } set Orga $OrgaDe($OX) set OiName($OX,Prefixe) $Prefixe set OiName($OX,Orga) $OrgaDe($OX) set OiName($OX,Info) $InfoDe($OX) set OiName($OX,Fasta) "$ProteomeDir/$OrgaDe($OX)" set OiName($Prefixe,OX) $OX set OiName($Orga,OX) $OX lappend LesPrefixe $Prefixe } set LesOXTries [lsort -integer $LesOX] set LesPrefixe [lsort $LesPrefixe] set LesInfo {} foreach Prefixe $LesPrefixe { set OX $OiName($Prefixe,OX) lappend LesInfo "[format %-5s $Prefixe] $InfoDe($OX)" } set OiName(ListOf,Prefixe) [lsort $LesPrefixe] set OiName(ListOf,OX) $LesOXTries set OiName(ListOf,Orga) $LesOrga set OiName(ListOf,Info) $LesInfo OnRevientDuBoulot return [OiName $Qui $Quoi] } proc OiOrgaList {{GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetIdAsTextWithComma" } # set OrgaList "82 210 254 140 66 101 72 69 184 9 152 197 49 170 194 37 118 88 169 59 225 119 124 141 138 32 200 255 151 50 18 20 163 186 249 189 99 223 77 221 114 155 188" set OrgaList "101,104,109,114,115,116,117,118,119,122,124,125,128,13,138,14,140,141,142,143,146,149,15,151,152,155,159,161,163,169,170,173,174,18,183,184,186,188,189,190,194,197,2,20,200,203,210,212,214,217,22,221,222,223,225,226,232,239,240,242,244,245,246,247,248,249,254,255,257,259,26,29,3,32,33,37,39,4,41,49,50,51,53,59,6,60,65,66,67,69,7,72,77,78,82,88,9,90,92,99" set OrgaList [split $OrgaList ", "] set OrgaList [lsort -integer $OrgaList] if {$GetWhat=="GetIdAsTextWithComma"} { return [join $OrgaList ","] } if {$GetWhat=="GetIdAsTextWithBlank"} { return [join $OrgaList " "] } set Keys [OiOrganism ListOf Keys] foreach K $Keys { if {[regexp -nocase "Get${K}As" $GetWhat]} { set Li {} foreach O $OrgaList { set V [OiOrganism $O $K] lappend Li "$O=$V" } if {[regexp "AsTextWithComma" $GetWhat]} { return [join $Li ","] } if {[regexp "AsTextWithBlank" $GetWhat]} { return [join $Li " "] } return $Li } } return $OrgaList } proc OiOrganism {{Qui ""} {Quoi ""}} { global OiOrganism #rR on utilise oi_client -organism_ids pour avoir les correspondances Id de Orthoinspector et TaxId #rR au premier appel on charge TaxId dasn EVImm ça peut être long if {$Qui==""} { set Qui "ListOf" ; set Quoi "Keys" } set LesKeys [list Id Identifier TextOs OS TaxId Keys] foreach K $LesKeys { if {[string equal -nocase $Quoi $K]} { set Quoi $K ; break } } if {[info exists OiOrganism($Qui,$Quoi)]} { return $OiOrganism($Qui,$Quoi) } if {[info exists OiOrganism("EstCharge")]} { if {[info exists OiOrganism($Qui,Id)]} { set Id $OiOrganism($Qui,Id) if {[info exists OiOrganism($Id,$Quoi)]} { return $OiOrganism($Id,$Quoi) } } return "" } set OiOrganism("EstCharge") 1 #rR il faut mettre le catch sinon ca marche pas catch {set Texte [exec oi_client -organism_ids]} Texte foreach Ligne [split $Texte "\n"] { if { ! [regexp -nocase {id=([0-9]+)[ \t]+identifier=([A-Z0-9]+)[ \t]+(.*)} $Ligne Match Id Identifier TextOs]} { continue } scan $TextOs "%s %s" G E set OS "${G}_$E" set TaxId [QuestionDeScience EVImm "ret Tax $OS"] if {$TaxId==""} { if {$OS=="Micromonas_sp."} { set TaxId 296587 } if {$OS=="Salpingoeca_sp."} { set TaxId 946362 } } if {$TaxId==""} { set TaxId 999999 } lappend OiOrganism(ListOf,Id) $Id lappend OiOrganism(ListOf,Identifier) $Identifier lappend OiOrganism(ListOf,TextOs) $TextOs lappend OiOrganism(ListOf,OS) $OS lappend OiOrganism(ListOf,TaxId) $TaxId set OiOrganism($Id,Id) $Id set OiOrganism($Identifier,Id) $Id set OiOrganism($TextOs,Id) $Id set OiOrganism($OS,Id) $Id set OiOrganism($TaxId,Id) $Id set OiOrganism($TaxId,TaxId) $TaxId set OiOrganism($Id,Identifier) $Identifier set OiOrganism($Id,TextOs) $TextOs set OiOrganism($Id,OS) $OS set OiOrganism($Id,TaxId) $TaxId } set OiOrganism(ListOf,Keys) $LesKeys set OiOrganism(ListOf,Id) [lsort -integer $OiOrganism(ListOf,Id)] set OiOrganism(ListOf,TaxId) [lsort -integer $OiOrganism(ListOf,TaxId)] set OiOrganism(ListOf,Identifier) [lsort $OiOrganism(ListOf,Identifier)] set OiOrganism(ListOf,OS) [lsort $OiOrganism(ListOf,OS)] set OiOrganism(ListOf,TextOs) [lsort $OiOrganism(ListOf,TextOs)] return [OiOrganism $Qui $Quoi] } proc OiOrgsFromBlast {Fichier} { foreach Nom [ListeDesPABs] { if {[WIWB $Nom Queries]!=""} { continue } set LesPoeles [lsort [glob -nocomplain "/tempor/grid/poeles/$Nom*"]] if {$LesPoeles=={}} { continue } set Poele [lindex $LesPoeles end] set Assiette "$Poele/assiette" if {[FileAbsent $Assiette]} { Espionne "No assiette $Assiette" conitinue } set Gz "$Assiette/output_formated.gz" if {[FileAbsent $Gz]} { set Gz "$Assiette/output.gz" } if {[FileAbsent $Gz]} { Espionne "I didn't find $Gz" continue } Espionne $Gz set LesQuery [exec zcat $Gz | grep -v "#" | cut -f 1 | cut -d _ -f 2-3 | cut -d _ -f 2 | uniq ] Espionne $LesQuery set LesQuery [ListeSansDoublon $LesQuery] AppendAuFichier "[RepertoireDuGenome]/fiches/WhereIsCodeOrga.txt" "$Nom [join $LesQuery { }]" } } proc OiOrthologsFromCilioCarta {Query {Action ""} {OrganismList ""}} { global OiOrthologsFrom #rR Action can be IDs, ACs, Contains_P12345 if {$Action==""} { set Action "IDs" } if {$Query==""} { return "" } if {[regexp {^CIL[0-9]+$} $Query]} { set Nom $Query } else { set Nom [PABsDuIdOuAc $Query "CilioCarta"] } if {$Nom==""} { return "" } set Action [string toupper $Action] if {[info exists OiOrthologsFrom($Nom,$Action)]} { return $OiOrthologsFrom($Nom,$Action) } if {[info exists OiOrthologsFrom($Nom,ESTCHARGE)]} { if {[regexp {CONTAINS_(.+)} $Action Match Access]} { if {[info exists OiOrthologsFrom($Access,REFERENCE)]} { return [expr [lsearch $Nom $OiOrthologsFrom($Access,REFERENCE)] >= 0] } return 0 } return "" } set OiOrthologsFrom($Nom,ESTCHARGE) 1 #rR on peut prendre Oi au lieu de Ya car c'est les mêmes if {[OnTraite "CilioCarta"]} { set IdQuery [ExtraitInfo $Nom "IdOi:"] set AcQuery [ExtraitInfo $Nom "AcOi:"] } else { set IdQuery [QuestionDeScience "CilioCarta" "ret ExtraitInfo $Nom IdOi:"] set AcQuery [QuestionDeScience "CilioCarta" "ret ExtraitInfo $Nom AcOi:"] } set LesHeader [OiLesTFAsDesOrthologs $IdQuery $OrganismList "GetHeader"] foreach H $LesHeader { regsub ">" $H "" H scan $H "%s %s" A B if {[regexp {\|} $A]} { lassign [split $A "|"] Banque Ac Id } else { set Id $A set Ac $B } #rR 2014/07/08 pour éventuellement prendre la ref plus récente dans Yannis if {[OnTraite "EVImm"]} { set TFA [FromYannis $Ac "tfa"] } else { set TFA [QuestionDeScience "EVImm" "ret FromYannis $Ac tfa"] } if {$TFA==""} { set IdAcNow [UniprotHistory $Id "IdAcRef"] if {$IdAcNow==""} { continue } lassign [split $IdAcNow "\t"] Id Ac } set ID [string toupper $Id] set AC [string toupper $Ac] if {$Id!=""} { lappend OiOrthologsFrom($Nom,IDS) $Id } if {$Ac!=""} { lappend OiOrthologsFrom($Nom,ACS) $Ac } lappend OiOrthologsFrom($ID,REFERENCE) $Nom lappend OiOrthologsFrom($AC,REFERENCE) $Nom } return [OiOrthologsFromCilioCarta $Query $Action $OrganismList] } proc OiProteomeSize {Qui} { global OiProteomeSize if {[info exists OiProteomeSize($Qui)]} { return $OiProteomeSize($Qui) } if {[info exists OiProteomeSize("EstCharge")]} { return "" } set OiProteomeSize("EstCharge") 1 set FichierMemo "[OiCode NotaBeneDir]/proteomesize_memo.txt" if {[file exists $FichierMemo]} { array set OiProteomeSize [ContenuDuFichier $FichierMemo] return [OiProteomeSize $Qui] } foreach OX [OiCode ListOf OX] { set OI [OiCode $OX OI] set Path [OiCode $OX FullFilePath] Espionne "$OX $Path" if {[FileAbsent $Path]} { continue } set L [exec sh -c "grep '^>' $Path | wc -l"] set OiProteomeSize($OX) $L set OiProteomeSize($OI) $L set All "$L $OX $OI" Espionne $All lappend OiProteomeSize(All) $All } Sauve [array get OiProteomeSize] dans $FichierMemo return [OiProteomeSize $Qui] } proc OiProteomesDir {} { return "/genomics/link/OrthoInspector_Proteomes" } proc OiSourceProteomes {{Domaine ""}} { if {$Domaine==""} { set Domaine [OiDomain] } return "/blast/OrthoInspector/Oi$Domaine" } proc OiSplit {{Domaine ""}} { if {$Domaine==""} { set Domaine [OiDomain] } set SplitSize [OiSplitSize $Domaine] set SplitOrganisms [string equal -nocase "SplitOrganisms" $SplitSize] set RepOip "[RepertoireDuGenome]/oip" file mkdir $RepOip set F [open [OiSourceProteomes $Domaine] "r"] set N 0 set LaTranche {} set P 0 set NbSeqLues 0 set MaxSeqPourTest -21000 set PreviousOX "" set FNum "%[FormatDesNumerosPourCollection]" while {[gets $F Ligne]>=0} { if {[string trim $Ligne]==""} { continue } if {[string index $Ligne 0]!=">"} { lappend LaTranche $Ligne; continue } set OX [IntegerApres "OX=" dans $Ligne] incr NbSeqLues if {$NbSeqLues%1000==0} { Espionne "$NbSeqLues $P $Ligne" } if {$MaxSeqPourTest>0 && $NbSeqLues>$MaxSeqPourTest} { break } incr N if {$N>1 && ($SplitOrganisms && $PreviousOX!=$OX) || ( ! $SplitOrganisms && ($N-1)%$SplitSize==0)} { Espionne $N #Doit etre comme ci-dessous incr P set Nom [format "%s$FNum" [PreFixe] $P] lappend LesNoms $Nom SauveLesLignes $LaTranche dans $RepOip/$Nom Espionne "creation de $RepOip/$Nom" set LaTranche {} } set PreviousOX $OX lappend LaTranche $Ligne } if {$LaTranche!={}} { #Doit etre comme ci-dessus incr P set Nom [format "%s$FNum" [PreFixe] $P] lappend LesNoms $Nom SauveLesLignes $LaTranche dans $RepOip/$Nom Espionne "creation de $RepOip/$Nom" set LaTranche {} } CreeBornesDesPABsTroisGradins 1 $P "" "" "" $FNum return $LesNoms } proc OiSplitSize {{Domaine ""}} { if {$Domaine==""} { set Domaine [OiDomain] } if {$Domaine=="Eukaryota"} { return 10000 } return "SplitOrganisms" } proc OlIgbmc {P {Val ""}} { global OlIgbmc set FichierOlIgbmc "[RepertoireDuGenome]/fiches/oligbmc" if {$P=="Save"} { if {[info exists OlIgbmc("EstCharge")]} { unset OlIgbmc("EstCharge") } if {[info exists OlIgbmc(ListeDesPs)]} { unset OlIgbmc(ListeDesPs) } if {[info exists OlIgbmc(ListeDesIGBMCs)]} { unset OlIgbmc(ListeDesIGBMCs) } SauveLesLignes [array get OlIgbmc] dans $FichierOlIgbmc catch {unset OlIgbmc} OlIgbmc "Load" return $FichierOlIgbmc } if {$Val!=""} { set OlIgbmc($P) $Val ; lappend OlIgbmc(ListeDesPs) $P ; return $Val } if {[info exists OlIgbmc($P)]} { return [set OlIgbmc($P)] } if {[info exists OlIgbmc("EstCharge")]} { return [set OlIgbmc("EstCharge")] } if { ! [file exists $FichierOlIgbmc]} { set OlIgbmc("EstCharge") "NoValueAvailable" } array set OlIgbmc [LesLignesDuFichier $FichierOlIgbmc] foreach {P IGBMC} [array get OlIgbmc] { lappend OlIgbmc(ListeDesPs) $P lappend OlIgbmc(ListeDesIGBMCs) $IGBMC } set OlIgbmc("EstCharge") "" return [OlIgbmc $P] } proc OldCanvaEnGIF {K {CeQuOnVeut ""} {NomDuFichierGIF ""}} { if {$NomDuFichierGIF==""} { set NomDuFichierGIF [FichierPourSaveAs] } if {$NomDuFichierGIF==""} { return "" } Wup "On cree un fichier avec les ordres du canva K" return [CreeLesOrdresPourGIF $K $CeQuOnVeut $NomDuFichierGIF] } proc OldCanvaEnPostscriptPourGif {K {CeQuOnVeut Visible}} { set Largeur [lindex [$K configure -width] 4] set Hauteur [lindex [$K configure -height] 4] set PortraitOuLandscape [expr $Largeur > $Hauteur] set lePostscript "" if {[regexp "rond" $K]} { set lePostscript [$K postscript -width 768 -x 0 -rotate $PortraitOuLandscape] } else { if {$CeQuOnVeut=="Visible"} { set lePostscript [$K postscript -rotate $PortraitOuLandscape] } else { Espionne [$K configure -scrollregion] scan [lindex [$K configure -scrollregion] 4] "%f %f %f %f" minX minY maxX maxY Espionne "$minX $minY $maxX $maxY" set lePostscript [$K postscript -width $maxX -height $maxY -rotate $PortraitOuLandscape] } } return $lePostscript } proc OldChargeFichierOutRepeatMasker {aTab FichierOUT} { #RR and LP dans le cas ou .out n'existe pas upvar $aTab Tab Wup "Attention a copie le .cat dans le .out qui n'est plus cree par repeatmasker" set Tab($FichierOUT,LesRepeats) {} set Tab($FichierOUT,LesRegionsMasquees) {} set OnAttendMatches 1 foreach Ligne [LesLignesDuFichier $FichierOUT] { set Ligne [string trim $Ligne] if {$Ligne==""} { continue } if {$OnAttendMatches} { if {[regexp "Maximal single base matches" $Ligne]} { set OnAttendMatches 0 } continue } if { ! [regexp {[0-9]+ +[0-9]+} $Ligne]} { set OnAttendMatches 1 continue } while {[regexp " " $Ligne]} { regsub -all {[ ]+} $Ligne " " Ligne } set LaLigne [split $Ligne " "] set Debut [lindex $LaLigne 5] set Fin [lindex $LaLigne 6] set Repeat [lindex $LaLigne 9] lappend Tab($FichierOUT,LesRepeats) $Repeat lappend Tab($FichierOUT,LesRegionsMasquees) [list $Debut $Fin] set Tab($FichierOUT,Debut,$Debut,Fin,$Fin,Repeat) $Repeat if {![info exists Tab($FichierOUT,Repeat,$Repeat,LesRegions)]} {set Tab($FichierOUT,Repeat,$Repeat,LesRegions) {}} lappend Tab($FichierOUT,Repeat,$Repeat,LesRegions) [list $Debut $Fin] } return $aTab } proc OldChroContigTronconOffsetOrganisme {Header} { global SansOffsetEtOrganisme if {[info exists SansOffsetEtOrganisme] && $SansOffsetEtOrganisme} { return "0 0 0 0 Inconnu inconnu" } Wup "Works well for Homo sapiens only" scan $Header "%s" BanqueId regsub ">" $BanqueId "" BanqueId ScanLaListe [split $BanqueId ":"] Chro Contig set Troncon "__" if {[regexp {_[0-9]+$} $Contig Troncon]} { regsub {_[0-9]+$} $Contig "" Contig } set Genre "Genre" set Espece "Espece" if {[regexp -nocase "^hs" $Chro]} { set Genre "Homo" ; set Espece "sapiens" } set Offset 0 if {[regexp "from base" $Header]} { set Offset [IntegerApres "from base" dans $Header] incr Offset -1 } return "$Chro $Contig $Troncon $Offset $Genre $Espece" } proc OldCreeBornesDesPABsLoc {} { global RepertoireDuGenome set FichTrD "$RepertoireDuGenome/fiches/localisationchrocontig.trid.best" set FichTrF "$RepertoireDuGenome/fiches/localisationchrocontig.trif.best" set LesCd [LesLignesDuFichier $FichTrD] set LesAf [LesLignesDuFichier $FichTrF] set InterChros 1200 set InterContigs 900 set InterIlots 300 set MaxiInterIlots 30 set OldChro "ChroBidon" set OldContig "ContigBidon" set Depart 0 set OldOmega 0 set LesLocs {} set LesDebuts {} set LesFins {} foreach Cd $LesCd Af $LesAf { scan $Cd "%s %s %s %d %d %s" NomCd ChroCd ContigCd DebutCd FinCd SensCd scan $Af "%s %s %s %d %d %s" NomAf ChroAf ContigAf DebutAf FinAf SensAf lappend LesLocs $Cd lappend LesDebuts $DebutCd lappend LesFins $FinCd if {$NomCd!=$NomAf} { if {[info exists OnAttend($NomCd,D)]} { unset OnAttend($NomCd,D) } else { set OnAttend($NomCd,F) 1 } if {[info exists OnAttend($NomAf,F)]} { unset OnAttend($NomAf,F) } else { set OnAttend($NomAf,D) 1 } } if {[info exists OnAttend]} {Espionne [array names OnAttend]} if {[info exists OnAttend] && [array names OnAttend]!={}} { continue } set Alpha [MiniDeLaListe $LesDebuts] set Omega [MaxiDeLaListe $LesFins] Espionne [expr $Omega - $Alpha] set Inter 0 if {[expr ($Alpha-$OldOmega) > $MaxiInterIlots] } { set Inter $InterIlots } if {$OldContig!=$ContigCd} { set Inter $InterContigs } if {$OldChro!=$ChroCd} { set Inter $InterChros } foreach Loc $LesLocs { scan $Loc "%s %s %s %d %d %s" Nom Chro Contig Debut Fin Sens set D [expr $Depart+$Inter+($Debut-$Alpha)] set F [expr $D+$Fin-$Debut] if {$Sens=="+"} { set O "F" } else { set O "R" } Espionne "$Nom $D $F $O" lappend LesBornes "$Nom $D $F $O" } set OldOmega $Omega set RajoutArrondi [expr (($Inter+$Omega-$Alpha+3)/3)*3] Espionne "$Depart $OldOmega $Alpha $Omega $RajoutArrondi" incr Depart $RajoutArrondi set LesLocs {} set LesDebuts {} set LesFins {} } SauveLesLignes $LesBornes dans "$RepertoireDuGenome/fiches/bornesdespabs_loc" } 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 OldHv_HrefBinding {x y} { set new [.hv.h.h href $x $y] # puts "link to [list $new]"; return if {$new!=""} { global ::hv_LastFile set pattern $::hv_LastFile# set len [string length $pattern] incr len -1 if {[string range $new 0 $len]==$pattern} { incr len .hv.h.h yview [string range $new $len end] } else { Hv_LoadFile $new } } } proc OldMasqueLesRepeatsDuFichier {FichierTFA {Organisme ""} {AvecOptionNoLow 1}} { #RR and LP #quand le .old n'est pas cree il faut utiliser cette procedure if { ! [file exists $FichierTFA]} {return} set SeqTFA [ContenuDuFichier $FichierTFA] set Seq [QueLaSequenceDuTexteTFA $SeqTFA ] set Entete [EnteteDuTexteTFA $SeqTFA ] if {$Seq==""} { append Entete " NoSequenceToMask EndMask" return $Entete } set LesLibraries [LesLibrariesOuOptionsSpeciesAutomatiques $Organisme] set LesNomsDesRepeats {} set FichierTFATmp "$FichierTFA.tmp" Sauve $SeqTFA dans $FichierTFATmp Sauve $SeqTFA dans "$FichierTFA.masked" set LeTexteOUT {} foreach Library $LesLibraries { Espionne $Library lappend LeTexteOUT $Library Espionne "repeatmasker $FichierTFATmp $Library $AvecOptionNoLow" set FichierTFATmpMasked [repeatmasker $FichierTFATmp $Library $AvecOptionNoLow] Espionne $FichierTFATmpMasked Espionne [ContenuDuFichier $FichierTFATmpMasked] FaireLire coucou if { ! [file exists "$FichierTFATmp.cat"]} { Espionne "$FichierTFATmp.cat non cree, on skip" continue } lappend LeTexteOUT [ContenuDuFichier "$FichierTFATmp.cat"] file copy -force "$FichierTFATmpMasked" "$FichierTFA.masked" file copy -force "$FichierTFATmpMasked" $FichierTFATmp file delete -force "$FichierTFATmp.cat" file delete -force "$FichierTFATmp.masked" } Sauve [join $LeTexteOUT "\n"] dans "$FichierTFA.out" set LesRepeats {} foreach Repeat [lsort -unique [InterrogeFichierOutRepeatMasker "$FichierTFA.out" LesRepeats]] { foreach LaRegion [InterrogeFichierOutRepeatMasker "$FichierTFA.out" Repeat $Repeat LesRegions] { lappend LesRepeats [list $Repeat [lindex $LaRegion 0] [lindex $LaRegion 1]] } } set LesNomsDesRepeats {} foreach LeRepeat [lsort -unique -real -index 1 $LesRepeats] { lappend LesNomsDesRepeats [lindex $LeRepeat 0] } if {$LesNomsDesRepeats == {}} { set Entete "$Entete NoRepeatToMask EndMask" return [SequenceFormatTFA $Seq $Entete "brut"] } set SeqMASK [QueLaSequenceDuFichierTFA "$FichierTFA.masked" ] set NombreDeBasesMasquees [NombreDeBasesDansRepeat $SeqTFA $SeqMASK ] set Annotations [InfoSurMasking $SeqMASK $NombreDeBasesMasquees $LesNomsDesRepeats] set EnteteMASK "$Entete $Annotations" #Espionne [SequenceFormatTFA $SeqMASK $EnteteMASK "brut"] return [SequenceFormatTFA $SeqMASK $EnteteMASK "brut"] } proc OldP3ofPPCR {{PPCR ""} {Val ""}} { global P3ofPPCR if {$PPCR==""} { return [list "P3ofPPCR \"Sujet === SignauxAvant === SignauxApres\"" "P3ofPPCR LaListeDesPPCRs" "P3ofPPCR LaListeDesPs"] } if {$Val!=""} { if {[OuiOuNonMemo "Do I load existing PofPPCR"]} { P5ofPPCR Load P3ofPPCR Load } set P5ofPPCR("EstCharge") "" set P3ofPPCR("EstCharge") "" if {[info exists P3ofPPCR($PPCR)] && [set P3ofPPCR($PPCR)]!=$Val} { FaireLire "P3ofPPCR $PPCR\n already exists it was [set P3ofPPCR($PPCR)] and now $Val" } set P3ofPPCR($PPCR) $Val return $Val } if {$Val!=""} { if {[OuiOuNonMemo "Do I load existing P3ofPPCR"]} { P3ofPPCR Load } set P3ofPPCR("EstCharge") "" lappend P3ofPPCR($PPCR) $Val return $Val } if {[info exists P3ofPPCR($PPCR)]} { return [set P3ofPPCR($PPCR)] } if {[info exists P3ofPPCR("EstCharge")]} { return [set P3ofPPCR("EstCharge")] } if {[info exists P3ofPPCR]} { unset P3ofPPCR } set FichierP3ofPPCR "[RepertoireDuGenome]/fiches/P3ofPPCR" if { ! [file exists $FichierP3ofPPCR] } { return "NoValueAvalaible" } array set P3ofPPCR [LesLignesDuFichier $FichierP3ofPPCR] set LesPPCRs [lsort [array names P3ofPPCR]] set P3ofPPCR("EstCharge") "" set P3ofPPCR(LaListeDesPPCRs) $LesPPCRs set LesP {} foreach PP $LesPPCRs { if {[regexp "EstCharge" $PP]} { continue } lappend LesP [set P3ofPPCR($PP)] } set P3ofPPCR(LaListeDesPs) [lsort -unique $LesP] return [P3ofPPCR $PPCR] } proc OldPourcentageDeGenomesCompletsOrthologuesDansDbClustal {Nom} { global PourcentageDeGenomesCompletsOrthologuesDansDbClustal if {[info exists PourcentageDeGenomesCompletsOrthologuesDansDbClustal($Nom)]} { return [set PourcentageDeGenomesCompletsOrthologuesDansDbClustal($Nom)] } if {[info exists PourcentageDeGenomesCompletsOrthologuesDansDbClustal("EstCharge")]} { return -1 } foreach NomLu [ListeDesPABs] { set PH [PhylumsOrthologues $NomLu] scan $PH "%s %d %d %d %d %d %d" BAE nB mB nA mA nE mE set Favorable [expr $nB+$nA+$nE] set Possible [expr $mB+$mA+$mE] set PourcentageDeGenomesCompletsOrthologuesDansDbClustal($NomLu) [expr round(($nB+$nA+$nE)*100/($mB+$mA+$mE))] } set PourcentageDeGenomesCompletsOrthologuesDansDbClustal(Count) $Possible set PourcentageDeGenomesCompletsOrthologuesDansDbClustal("EstCharge") -1 return [PourcentageDeGenomesCompletsOrthologuesDansDbClustal $Nom] } proc OldRapetisseLesBoutonsDe {w {FonteVoulue ""}} { if {$FonteVoulue!=""} { set Fonte $FonteVoulue } foreach Bouton [LesBoutonsDeLaFrame $w.buttons] { if { ! [info exists Fonte]} { set OldFonte [lindex [$Bouton configure -font] 4] ScanLaListe $OldFonte Police Size Style set NewSize [expr $Size + 1] if {$NewSize==-5} { set NewSize -14 } set Fonte [list "tiny" $NewSize "normal"] Espionne $Fonte } $Bouton configure -font $Fonte } return $Fonte } proc OldSequenceFormatTFADuEMBLMultiple {TexteOuFichier {NomDeBapteme ""}} { if {[regexp "\n" $TexteOuFichier]} { set Texte $TexteOuFichier } else { set Texte [ContenuDuFichier $TexteOuFichier] } set LesTFA {} set ISS -1 while {[set Debut [string first {ID } $Texte $ISS]] >= 0} { set Texte [string range $Texte $Debut end] set ISS [string first "\n//" $Texte] if {$ISS<10} { set ISS "end" } set Premier [string range $Texte 0 $ISS] lappend LesTFA [SequenceFormatTFA $Premier $NomDeBapteme "embl"] if {$ISS == "end"} { break } } return [join $LesTFA "\n"] } 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 OldTestAnalyseDbClustal {} { Wup "Test AnalyseDbClustaL oomsf startcodon_summary phylumsorthologues paralogues.blastp" global RepertoireDuGenome global CheckResultat if {![file exists "$RepertoireDuGenome/fiches/oomsf"] && ![file exists "$RepertoireDuGenome/fiches/phylumsorthologues"] && ![file exists "$RepertoireDuGenome/fiches/startcodon_summary"] && ![file exists "$RepertoireDuGenome/fiches/paralogues.blastp"] } { lappend CheckResultat "No $RepertoireDuGenome/fiches/oomsf" lappend CheckResultat "No $RepertoireDuGenome/fiches/phylumsorthologues" lappend CheckResultat "No $RepertoireDuGenome/fiches/startcodon_summary" lappend CheckResultat "No $RepertoireDuGenome/fiches/paralogues.blastp, run AnalyseLesDbClustal" } elseif { [file exists "$RepertoireDuGenome/fiches/oomsf"] && [file exists "$RepertoireDuGenome/fiches/phylumsorthologues"] && [file exists "$RepertoireDuGenome/fiches/startcodon_summary"] && [file exists "$RepertoireDuGenome/fiches/paralogues.blastp"] } { lappend CheckResultat "AnalyseLesDbClustal done" } else { lappend CheckResultat "Analysis on DbClustal incomplete, run AnalyseLesDbClustal" } } proc Oli {{P ""} {Quoi Seq}} { Wup "Reads the file in oligos/P.tfa using FiSeqOl" Wup "Quoi can be Seq TFA Sens Signals Subjects SeqSignals SeqSubject TfaSubject" if {$P==""} { return "Oli Pxxxx Type Description TFA Seq Sens Signals Subjects SeqSignals SeqSubject TfaSubject All" } if {$P=="LaListeMerci"} { return [FiSeqOl "LaListeMerci"] } set Fichier [FiSeqOl $P] if { ! [file exists $Fichier]} { return "" } set Entete [EnteteDuFichierTFA $Fichier "all"] if {$Entete==""} { return "" } if {[regexp {\(} $Entete]} { regsub { *\(.*} $Entete "" Entete } regsub ">" $Entete "" Entete set Seq [QueLaSequenceDuFichierTFA $Fichier] if {$Quoi=="Seq"} { return $Seq } if {$Quoi=="TFA"||$Quoi=="All"} { return [ContenuDuFichier $Fichier] } if {$Quoi=="Description"} { return $Entete } if {$Quoi=="AllOnOneLine"} { return "$Entete $Seq" } if {[regexp "ignoreoli|oligoignore" $Entete]} { if {$Quoi=="Type"} { return "IgnoreOli" } if {$Quoi=="SeqSubject" || $Quoi=="SeqSignals"} { return [QueLaSequenceDuFichierTFA $Fichier] } if {$Quoi=="TfaSubject" || $Quoi=="TfaSignals"} { return [ContenuDuFichier $Fichier] } if {$Quoi=="Sens"} { return "5'" } if {[regexp "^Is" $Quoi]} { return 0 } return "" } if {[regexp "SeqOli_|SeqOliRac_" $Entete Match]} { if {$Quoi=="Type"} { return "SeqOli" } if {$Quoi=="SeqSubject" || $Quoi=="SeqSignals"} { return [QueLaSequenceDuFichierTFA $Fichier] } if {$Quoi=="TfaSubject" || $Quoi=="TfaSignals"} { return [ContenuDuFichier $Fichier] } if {$Match=="SeqOli_"} { set Sens "5'" } else { set Sens "3'" } if {$Quoi=="Sens"} { return $Sens } set Reste [StringSuivant $Match dans $Entete] set LesMots [LesMotsDeLaLigne $Reste] set LesSujets {} foreach Mot $LesMots { set LesChamps [split $Mot "-"] set Code [lindex $LesChamps end] set Sujet [join [lrange $LesChamps 0 end-1] "-"] lappend LesSujets $Sujet lappend LesCodes $Code } set PremierCode [lindex $LesCodes 0] if {$Quoi=="Subjects"} { return $LesSujets } if {$Quoi=="CodeSequence" || $Quoi=="Signals"} { return $PremierCode } if {[regexp "^Is" $Quoi]} { return 0 } FaireLire "Please verify the call to \n[JeMeSignale Get]" return "" } if {[regexp "MutOli_|MutOliRac_" $Entete Match]} { if {$Quoi=="Type"} { return "MutOli" } if {$Quoi=="SeqSubject" || $Quoi=="SeqSignals"} { return [QueLaSequenceDuFichierTFA $Fichier] } if {$Quoi=="TfaSubject" || $Quoi=="TfaSignals"} { return [ContenuDuFichier $Fichier] } if {$Match=="MutOli_"} { set Sens "5'" } else { set Sens "3'" } if {$Quoi=="Sens"} { return $Sens } set Reste [StringSuivant $Match dans $Entete] set LesMots [LesMotsDeLaLigne $Reste] set LesSujets {} set BonCode "x1x" foreach Mot $LesMots { set LesChamps [split $Mot "-"] set Code [lindex $LesChamps end] if {$BonCode!="x1x" && $BonCode!=$Code} { FaireLire "I found two different mutation codes in $P" } set BonCode $Code set Sujet [join [lrange $LesChamps 0 end-1] "-"] lappend LesSujets $Sujet } if {$Quoi=="Subjects"} { return $LesSujets } if {$Quoi=="CodeMutation" || $Quoi=="Signals"} { return $BonCode } FaireLire "Please verify the call to \n[JeMeSignale Get]" return "" } if {$Quoi=="Type"} { return "SynOli" } set Signaux "" scan $Entete "%s %s %s %s %s %s" Access Sens oligo with signal Signaux if {$Quoi=="IsBrocOli"} { return [regexp "BrocOli " $$Entete] } if {$Quoi=="IsRebuildedBrockenOli"} { return [regexp "RebuildedBrockenOli " $Entete] } if {$Quoi=="ItsGenericOligo"} { return [StringApres "BrocOli with " dans $Entete] } if {$Quoi=="SignalsFull"} { return [StringApres "replaces" dans $Entete] } if {$Quoi=="Full"} { return [StringApres "seeFull" dans $Entete] } if {$Quoi=="Brocken"} { return [StringApres "seeBrocken" dans $Entete] } if {$Quoi=="Sens"} { return $Sens } if {$Quoi=="Signals"} { return $Signaux } if {$Quoi=="Subjects"} { if {[regexp -nocase "RebuildedBrockenOli" $Entete]} { set Full [StringApres "seeBrocken" dans $Entete] return [Oli $Full "Subjects"] } set LesSujets {} foreach S [lrange [split $Entete " "] 7 end] { if {[string equal -nocase $S "BrocOli"]} { break } if {[string equal -nocase $S "RebuildedBrockenOli"]} { break } lappend LesSujets $S } return $LesSujets } if { $Quoi=="SeqSignals" || $Quoi=="SeqSubject" || $Quoi=="TfaSubject"} { set SeqSignaux [SequenceDesSignaux $Signaux $Sens] Espionne "$Signaux $Sens $SeqSignaux" set Seq [QueLaSequenceDuFichierTFA $Fichier] regsub -all " " $SeqSignaux "" SeqSignauxSansBlancs regsub -all " " $Seq "" SeqSansBlancs if { ! [regexp -nocase "^$SeqSignauxSansBlancs" $Seq]} { FaireLire "For Oligo $P : wrong signals \n$SeqSignauxSansBlancs\nin\n$SeqSansBlancs" } if {$Quoi=="SeqSignals"} { return $SeqSignauxSansBlancs } if {$Quoi=="SeqSubject" || $Quoi=="TfaSubject"} { regsub -nocase "^$SeqSignauxSansBlancs" $SeqSansBlancs "" SeqSubject if {$Quoi=="TfaSubject"} { regsub ">" $Entete ">Subj_" EntetePourSubject regsub " with " $EntetePourSubject " without " EntetePourSubject set TfaSubject [SequenceFormatTFA $SeqSubject $EntetePourSubject "nucbrut"] return $TfaSubject } return $SeqSubject } } FaireLire "Please verify the call to \n[JeMeSignale Get]" return "" } proc OliSqlo {{P ""} {Quoi ""}} { LoadSqlonage if {$P==""} { set P "LaListeMerci" } if {$P=="LaListeMerci"} { return [Sqlonage eval "select name from oli order by name"] } if {[regexp -nocase "^select " $P]} { set Sql $P ; return [Sqlonage eval $Sql] } if {[EstUnP $P]} { if {$Quoi==""} { set Quoi "Seq" } set Result [Sqlonage eval "select $Quoi from oli where name='$P'"] if {[regexp {\,|\*} $Quoi]} { return $Result } return [lindex $Result 0] } } proc OliVsPofOl {} { foreach P [PofOl LaListeDesPs] { lappend LaSortie "$P" } } proc OliWeb {} { set Page [FormulaireOliWeb] return $Page } proc Olida {Nom {ExpectMax 100} {NbProtMax 200} {Banque protall} {NbSequenceMsfMin 10}} { set RepertoireBlastp "[RepertoireDuGenome]/blastp" set RepertoireBallast "[RepertoireDuGenome]/ballast" set RepertoireCopains "[RepertoireDuGenome]/tfasdescopains" set RepertoireDbclustal "[RepertoireDuGenome]/dbclustal" set RepertoireRascal "[RepertoireDuGenome]/rascal" set RepertoireLeon "[RepertoireDuGenome]/leon" set RepertoireNormd "[RepertoireDuGenome]/normd" set RepertoireMsf "[RepertoireDuGenome]/msf" set RepertoireMacsims "[RepertoireDuGenome]/macsimXml" set RepertoireOlida "[RepertoireDuGenome]/OliDA" # Crée les répertoires foreach rep [list "RepertoireBlastp" "RepertoireBallast" "RepertoireCopains" "RepertoireDbclustal" "RepertoireRascal" "RepertoireLeon" "RepertoireNormd" "RepertoireMsf" "RepertoireMacsims" "RepertoireOlida"] { if {![file isdirectory [set $rep]]} { file mkdir [set $rep] } } set FichierProt "[RepertoireDuGenome]/prottfa/$Nom" set FichierTmp "[RepertoireDeTravail]/$Nom" if {![file isfile $FichierProt] || [PasTouche $Nom]} { return 0 } file copy -force $FichierProt $FichierTmp # Lance PipeAlign sur le fichier PipeOlida $FichierTmp $ExpectMax $NbProtMax $Banque # Lance le prog Olida array set tfaProt [readFasta $FichierProt 0] # ParseOlida2 "$bestMsf.macsims.xml" [lindex $tfaProt(index) 0] # file copy -force "$bestMsf.macsims.xml.OliDA.xml" "$RepertoireOlida/$Nom" ParseOlida2 "$FichierTmp.macsims.xml" [lindex $tfaProt(index) 0] # Copie les résultats file copy -force "$FichierTmp.blastp" "$RepertoireBlastp/$Nom" file copy -force "$FichierTmp.ballast" "$RepertoireBallast/$Nom" file copy -force "$FichierTmp.ballast.anchors" "$RepertoireBallast/$Nom.anchors" file copy -force "$FichierTmp.copains" "$RepertoireCopains/$Nom" file copy -force "$FichierTmp.msf" "$RepertoireDbclustal/$Nom" file copy -force "$FichierTmp.rascal.msf" "$RepertoireRascal/$Nom" file copy -force "$FichierTmp.leon.msf" "$RepertoireLeon/$Nom" file copy -force "$FichierTmp.normd" "$RepertoireNormd/$Nom" file copy -force "$FichierTmp.macsims.xml" "$RepertoireMacsims/$Nom" file copy -force "$FichierTmp.macsims.xml.OliDA.xml" "$RepertoireOlida/$Nom" # Supprime les fichiers temporaires foreach fichier [glob -nocomplain -directory [RepertoireDeTravail] "$Nom*"] { #file delete $fichier Espionne "file delete $fichier" } FinPasTouche $Nom return 0 } proc OligAuto {{Fichier ""}} { set RepDesFragments "." if {$Fichier==""} { set Fichier [ButineArborescence "All" "./"] } if {[FileAbsent $Fichier]} { return "" } set FichierCommande "usethisname_$Fichier" set Racine [file tail $Fichier] regsub ".txt" $Racine "" Racine foreach Ligne [LesLignesVitales $Fichier "SansVide" "AvecBlanc"] { # regsub -all { +\-} $Ligne "-" Ligne # regsub -all {\- +} $Ligne "-" Ligne # regsub -all " " $Ligne "_" Ligne # regsub -all {_+} $Ligne "_" Ligne regsub -all { } $Ligne "" Ligne regsub -all {_+} $Ligne "_" Ligne set Ligne [string trim $Ligne " _"] Espionne $Ligne if {[regexp "@" $Ligne]} { lassign [split $Ligne "@"] Avant GeneOperon GeneA GeneB Apres set NameA [lrange [split $GeneA "-"] 0 end-2] set NameB [lrange [split $GeneB "-"] 0 end-2] set Nom [NomDuAlias $GeneOperon] if {$Nom==""} { FaireLire "I don't know $GeneOperon in \n$Ligne\nI'll skip"; continue; } set AS [OperonClonage $Nom $NameA "GetStart"] set BS [OperonClonage $Nom $NameB "GetStart"] if {$AS=="" || $BS==""} { FaireLire "$Nom $GeneOperon $NameA $NameB in \n$Ligne\nis not an operon.AS=$AS==BS=$BS= I'll skip"; continue; } set ADaa [lindex [split $GeneA "-"] end-1] set BFaa [lindex [split $GeneB "-"] end] set AD [expr ($ADaa-1)*3] set BF [expr ($BFaa-1)*3+2] set D [expr $AS + $AD] set F [expr $BS + $BF] set Frag "$GeneOperon-b$D-b$F" set Ligne "$Avant$Frag$Apres" } ScanLaListe [DecomposeLaLigne $Ligne] LesSujets LesAvs LesAps Espionne Espionne "Ligne : $Ligne" Espionne "Sujets : $LesSujets" Espionne "Avants : $LesAvs" Espionne "Apress : $LesAps" set AvsAps "[join $LesAvs "_"]//[join $LesAps "_"]" lappend LesAvsAps $AvsAps set OnEstEnNuc 0 foreach Sujet $LesSujets { Espionne "Sujet : $Sujet" set TestStopAtTheEnd 0 if {[regexp -nocase {\-([0-9]+)\-(end|stop)$} $Sujet Match D F]} { regsub -- "\-$D\-$F$" $Sujet "" Alias if {[string equal -nocase $F "end"] } { set F "EndWithoutStop" } if {[string equal -nocase $F "stop"]} { set F "End" ; set TestStopAtTheEnd 1} } elseif {[regexp {\-([0-9]+)\-([0-9]+)$} $Sujet Match D F]} { regsub -- "\-$D\-$F$" $Sujet "" Alias } elseif {[regexp {\-b([0-9]+)\-b([0-9]+)$} $Sujet Match D F]} { set OnEstEnNuc 1 regsub -- "\-b$D\-b$F$" $Sujet "" Alias set D "b$D" set F "b$F" } else { set Alias $Sujet set D 1 set F "EndWithoutStop" } if {[EstUnPAB $Alias]} { set Nom $Alias set Alias [Alias $Nom] } else { set Nom [NomDuAlias $Alias] } if { ! [EstUnPAB $Nom]} { if {[OuiOuNon "I didn't find the PGS $Nom for the Alias $Alias\nDo I skipp\n$Sujet"]} { continue } } if {[regexp -nocase "^End" $F]} { set Seq [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nuctfa"]] set L [string length $Seq] set CodonStop [string range $Seq [expr $L-3] [expr $L-1]] Espionne "$L $CodonStop" if {$TestStopAtTheEnd && ! [CodonStopPossible $CodonStop]} { if {[OuiOuNon "You expected a Stop at the end of $Sujet but it doesn't exist.\nDo I skip ?"]} { continue } } set FN $L if {[regexp -nocase "WithoutStop" $F] && [CodonStopPossible $CodonStop]} { incr FN -3 } set F [expr $FN/3] } set Fragment "$Nom $D $F $Alias" Espionne "Fragment : $Fragment" lappend LesFragmentsDesAvsAps($AvsAps) $Fragment lappend LesAvsApsDuFragment($Fragment) $AvsAps } } set LesAvsAps [lsort -unique $LesAvsAps] Espionne "****************************************************" Espionne EspionneL $LesAvsAps FaireLire "I'll have to create the files needed to create \n the fragments\ntthe construction\nthe signal-construction order\n... \nPlease browse for the directory" set RepDesFragments [ChoixDuRepertoire $RepDesFragments] set FichierDesSignaux [LeFichierDesSignaux] foreach AvsAps $LesAvsAps { Espionne "for AvsAps : $AvsAps" EspionneL $LesFragmentsDesAvsAps($AvsAps) regsub "//" $AvsAps " " AA ScanLaListe [split $AA " "] Avs Aps set LesAvs [split $Avs "_"] set LesAps [split $Aps "_"] set FichierFrag "$RepDesFragments/$Avs-$Racine-$Aps.frag" while {[file exists $FichierFrag] && [OuiOuNon "$FichierFrag already exists. Choose an other name ?" 0]} { set FichierFrag [FichierPourSaveAs $FichierFrag] } set FichierFrag [SauveLesLignes $LesFragmentsDesAvsAps($AvsAps) dans $FichierFrag] regsub ".frag$" $FichierFrag ".tfa" FichierTFAs while {[file exists $FichierTFAs] && [OuiOuNon "$FichierTFAs already exists. Choose an other name ?" 0]} { set FichierTFAs [FichierPourSaveAs $FichierTFAs] } set FichierTFAs [GenereFragments "Predefinis" $FichierFrag "" $FichierTFAs] set SavSapFavFap [list $LesAvs $LesAps $FichierDesSignaux $FichierDesSignaux] set OliPPCR [OligosEtProduitsPCR $FichierTFAs $SavSapFavFap] set FichierOligos [lindex $OliPPCR 0] lappend LesFichiersOligos $FichierOligos } return [CommandeOligos $LesFichiersOligos $FichierCommande] } proc OligoArray {seqFile saveAs Tm Bank} { Wup "OligoArray 1.0 pour determiner des oligonucleotides pour les puces a ADN" if {$Bank==""} {return "Should be OligoArray seqFile saveAs Tm Bank with Bank equal to unigene or refseq"} if {$Bank=="unigene"} {set blastDB "/blast/unigenehs.nsq"} if {$Bank=="refseq" } {set blastDB "/blast/rshuman.nsq"} set oligoLength 60 set distance 100000 set TmRange 2 set maxTm 63 set mxNbOligo 10 set listProhibited "\"AAAAAAAA;TTTTTTTT;GGGGGGGG;CCCCCCCC\"" set linker5prime "\"\"" set linker3prime "\"\"" #set CommandeOligoArray "exec /usr/opt/java140/bin/java -jar OligoArray.jar" set CommandeOligoArray "exec java OligoArray $seqFile $blastDB $saveAs $oligoLength $distance $Tm $TmRange $maxTm $mxNbOligo $listProhibited $linker5prime $linker3prime" Espionne $CommandeOligoArray catch {eval $CommandeOligoArray} Message Espionne $Message } proc OligoEnStock {Seq} { global OligoEnStock if {$Seq=="Reload"} { if {[info exists OligoEnStock]} { unset OligoEnStock } set Seq "LaListeMerci" } set Seq [string toupper $Seq] if {[info exists OligoEnStock($Seq)]} { return [set OligoEnStock($Seq)] } if {[info exists OligoEnStock(LALISTEMERCI)]} { return {} } set OligoEnStock(LALISTEMERCI) [Oli LaListeMerci] foreach P [set OligoEnStock(LALISTEMERCI)] { set SeqOli [string toupper [Oli $P]] lappend OligoEnStock($SeqOli) $P } return [OligoEnStock $Seq] } proc OligoLauncher {} { Wup "Procedure qui lance tout Masking, BlastN, Specificite, Selection du meilleur oligo." set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set Repnuctfa "[RepertoireDuGenome]/nuctfa" if {[BonNombreDeParametres]} { foreach Parametre [list Query DataBase WorkingDir BlastExpect BlastWord BlastNbAligned] { set $Parametre [LesParametresDuDesign $Parametre "LaValeurMerci"] } } else { AjouteAuLog "Missing parameters." return "" } if {$Query=="LaTotale"} {set Query [ListeDesPABs]} if {$Query=="ListeTest"} {set Query [ListeTest]} if {$Query=="ListeControle"} {set Query [ListeControles]} if {$Query=="ListeDesNews"} {set Query [ListeDesNews]} if {$Query=="ListeDesRhos"} {set Query [ListeDesRhos]} if {$Query=="RepertoireDuGenome"} {set Query [RepertoireDuGenome]} if {[llength $Query]=="1"} { set Return [CheckTFAFile $Query] if {$Return!=""} { LesParametresDuDesign Query "Reset" LesParametresDuDesign Query "$Return" "Positionne" } set Query [LesParametresDuDesign Query "LaValeurMerci"] } if {[regexp {\.[a-z]{3}$} $DataBase]} {regsub {\.[a-z]{3}$} $DataBase "" DataBase} set Query [split $Query " "] foreach PAB $Query { if {$PAB!="" && [file exists "$PAB"]} { set FichierQuery "$PAB" } elseif {[file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else { AjouteAuLog "No File for the Query ($PAB)" continue } if {[regexp {/} "$PAB"]} {set PAB [file tail $PAB]} #Rq: On a plus le vrai chemin du fichier original if {[regexp {\.masked$} $PAB]} {regsub -all {\.masked$} $PAB "" PAB} #Pour le design particulier de la banque RefSeq totale if {[regexp {^NM[0-9]{4,}} $PAB]} { if {[LesParametresDuDesign WorkingDir "Existe"]=="0"} { set Dir "[RepertoireDuGenome]/Probes/RefSeq_Design" set NMDIR [LeRepertoireDeRefSeq $PAB] set WorkingDir "${Dir}/${NMDIR}" } } set FichierEnCours "$WorkingDir/${PAB}.encours" set FichierMasque "$WorkingDir/${PAB}.masked" set FichierBlast "$WorkingDir/${PAB}.blastn" set FichierLog "$WorkingDir/${PAB}.log" set FichierOligo "$WorkingDir/${PAB}.oligo" set FichierSelection "$WorkingDir/${PAB}.selection" if {[file exists $FichierEnCours]} { AjouteAuLog "$PAB in work" continue } elseif {[file exists $FichierLog] || [file exists $FichierOligo]} { AjouteAuLog "$PAB seems to be done" if {[OuiOuNonMemo "Would you like to redesign ?"]} { set ListeFichier "" if {$DataBase=="none"} { set ListeFichier [list $FichierMasque $FichierLog $FichierOligo $FichierSelection] } else { set ListeFichier [list $FichierMasque $FichierBlast $FichierLog $FichierOligo $FichierSelection] } foreach File $ListeFichier { if {[file exists $File]} {file delete -force $File} } } else {continue} Sauve "" dans $FichierEnCours } else {Sauve "" dans $FichierEnCours} AjouteAuLog ">>>In charge of $PAB<<<" #On filtre la sequence pour le poly A ##################################### if {![file exists $FichierMasque]} { AjouteAuLog "Masking $PAB" set FichierMasque [PrepareMaSequenceALaRechercheDHomologie $FichierQuery $WorkingDir] } else {AjouteAuLog "Masking already done"} #On recherche dans les banques avec Blast ######################################### if {![file exists $FichierBlast]} { if {$DataBase=="none"|| $DataBase==""} { file delete -force $FichierEnCours AjouteAuLog "No database specified and no blastn files for $PAB" continue } AjouteAuLog "Blast for $PAB" set BlastStrand [LesParametresDuDesign BlastStrand "LaValeurMerci"] #Blastn du brin sens (S) uniquement avec une taille de mots (W) set CmdBlastN "blastall -S $BlastStrand -W $BlastWord -i $FichierMasque -d $DataBase -p blastn -o $FichierBlast -e $BlastExpect -v $BlastNbAligned -b $BlastNbAligned -F T -a 4" if {[catch {eval exec $CmdBlastN} Message]} {Warne "Error in BlastN command:\n>>>>$Message";continue} } else {AjouteAuLog "Blast already done"} #On teste la specificite et tous les autres parametres ###################################################### if {![file exists $FichierLog]} { AjouteAuLog "Specificity check for $PAB" CheckForOligo "$FichierMasque" "$FichierBlast" "$FichierLog" "$FichierOligo" } else {AjouteAuLog "Specificity already done"} #On selectionne le meilleur ########################### if {![file exists $FichierSelection]} { AjouteAuLog "Best oligo selection for $PAB" SelectionDesOligos $PAB $WorkingDir } else {AjouteAuLog "Best oligo selection already done"} InterrogeInfoDeLOligo $FichierOligo Decharge #On supprime les fichiers crees #file delete -force $FichierMasque #file delete -force $FichierBlast file delete -force $FichierEnCours AjouteAuLog "<><>\n" } AjouteAuLog "The End" OuiOuNonMemo UnsetAllPlease return "" } proc OligoProperties {} { set RepOligo "Probes/RefSeqBLAST3" set FichierOut "[RepertoireDuGenome]/essaisproperties" AppendAuFichier "$FichierOut" [join [list PAB NomOligo TailleOligo GC Tm ExpTm DebutDeOligo FinDeOligo NbCandidats NbContigues LesCandidats NbUnrelated] "\t"] foreach PAB [ListeTest] { set FichierOligo "[RepertoireDuGenome]/$RepOligo/${PAB}.croisee" if {![file exists $FichierOligo]} { Espionne "$FichierOligo do not exists." set FichierOligo "[RepertoireDuGenome]/$RepOligo/${PAB}.selection" } if {![file exists $FichierOligo]} { Espionne "$FichierOligo do not exists." continue } set LesNomsOligos [InterrogeInfoDeLOligo $FichierOligo LesNoms] foreach NomOligo $LesNomsOligos { set LaSequence [InterrogeInfoDeLOligo $FichierOligo $NomOligo Sequence] set TailleOligo [InterrogeInfoDeLOligo $FichierOligo $NomOligo Taille] set GC [InterrogeInfoDeLOligo $FichierOligo $NomOligo GC] set Tm [InterrogeInfoDeLOligo $FichierOligo $NomOligo Tm] set ExpTm [InterrogeInfoDeLOligo $FichierOligo $NomOligo ExpTm] set XDebutDeOligoNt [InterrogeInfoDeLOligo $FichierOligo $NomOligo Debut] set XFinDeOligoNt [InterrogeInfoDeLOligo $FichierOligo $NomOligo Fin] set NbCandidats [InterrogeInfoDeLOligo $FichierOligo $NomOligo NbCandidats] set NbContigues [InterrogeInfoDeLOligo $FichierOligo $NomOligo NbContigues] set LesCandidats [InterrogeInfoDeLOligo $FichierOligo $NomOligo LesCandidats] set NbUnrelated [regexp -all {NG[0-9]+} $LesCandidats] AppendAuFichier "$FichierOut" [join [list $PAB $NomOligo $TailleOligo $GC $Tm $ExpTm $XDebutDeOligoNt $XFinDeOligoNt $NbCandidats $NbContigues $LesCandidats $NbUnrelated] "\t"] } } } proc Oligo_BlastN_PourTous {} { Wup "Procedure qui lance tout Masking, BlastN." set Repnuctfa "[RepertoireDuGenome]/nuctfa" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set OK 1 foreach Parametre [list Query DataBase WorkingDir BlastExpect BlastWord BlastNbAligned] { set $Parametre [LesParametresDuDesign $Parametre "LaValeurMerci"] if {[set $Parametre]==""} {set OK 0;break} } if {$OK!="1"} { AjouteAuLog "Missing parameters.\nBlasting all sequences, require Query, DataBase, WorkingDir, BlastExpect, BlastWord, BlastNbAligned (3 last exists as default value)." return "" } if {$Query=="LaTotale"} {set Query [ListeDesPABs]} if {[llength $Query]=="1"} { set Return [CheckTFAFile $Query] if {$Return!=""} { LesParametresDuDesign Query "Reset" LesParametresDuDesign Query "$Return" "Positionne" } set Query [LesParametresDuDesign Query "LaValeurMerci"] } if {[regexp {\.[a-z]{3}$} $DataBase]} {regsub {\.[a-z]{3}$} $DataBase "" DataBase} set Query [split $Query " "] foreach PAB $Query { if {$PAB!="" && [file exists "$PAB"]} { set FichierQuery "$PAB" } elseif {[file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else { AjouteAuLog "No File for the Query ($PAB)" continue } if {[regexp {/} "$PAB"]} {set PAB [file tail $PAB]} #Rq: On a plus le vrai chemin du fichier original set FichierEnCours "$WorkingDir/${PAB}.encours" set FichierMasque "$WorkingDir/${PAB}.masked" set FichierBlast "$WorkingDir/${PAB}.blastn" set FichierLog "$WorkingDir/${PAB}.log" set FichierOligo "$WorkingDir/${PAB}.oligo" set FichierSelection "$WorkingDir/${PAB}.selection" if {[file exists $FichierEnCours]} { AjouteAuLog "$PAB in work" continue } elseif {[file exists $FichierLog] || [file exists $FichierOligo]} { continue } else {Sauve "" dans $FichierEnCours} AjouteAuLog ">>>In charge of $PAB<<<" #On filtre la sequence pour le poly A ##################################### if {![file exists $FichierMasque]} { AjouteAuLog "Masking $PAB" set FichierMasque [PrepareMaSequenceALaRechercheDHomologie $FichierQuery $WorkingDir] } else {AjouteAuLog "Masking already done"} #On recherche dans les banques avec Blast ######################################### if {![file exists $FichierBlast]} { if {$DataBase=="none"|| $DataBase==""} { file delete -force $FichierEnCours #AjouteAuLog "No database specified and no blastn files for $PAB" continue } AjouteAuLog "Blast for $PAB" #Blastn du brin sens (S) uniquement avec une taille de mots (W) set BlastStrand [LesParametresDuDesign BlastStrand "LaValeurMerci"] set CmdBlastN "blastall -S $BlastStrand -W $BlastWord -i $FichierMasque -d $DataBase -p blastn -o $FichierBlast -e $BlastExpect -v $BlastNbAligned -b $BlastNbAligned -F T -a 4" if {[catch {eval exec $CmdBlastN} Message]} {Warne "Error in BlastN command:\n>>>>$Message";continue} } else { AjouteAuLog "Blast already done" } file delete -force $FichierEnCours AjouteAuLog "<><>\n" } return "" } proc Oligo_BlastN_PourTous_Launcher {{args ""}} { Wup "Pour faire les masked et les blastn pour tous d un seul coup" Wup "Il faut au moins la query, la database et le workingdir" if {$args==""} { AjouteAuLog "To launch BlastN for all query, usage is to define Query, Database, WorkingDir, BlastExpect, BlastWord, BlastNbAligned." AjouteAuLog [format "%-20s %-12s" " -q (Query)" "Your query sequence in fasta format."] AjouteAuLog [format "%-20s %-12s" " -b (Database)" "Database in which specificity will be tested."] AjouteAuLog [format "%-20s %-12s" " -w (WorkingDir)" "Choose the directory where to save your files"] AjouteAuLog [format "%-20s %-12s" " -ev (BlastExpect)" "The Blast E-value limit."] AjouteAuLog [format "%-20s %-12s" "" "Default is 100."] AjouteAuLog [format "%-20s %-12s" " -bw (BlastWord)" "The word length for Blast searches."] AjouteAuLog [format "%-20s %-12s" "" "Default is 15 nt."] AjouteAuLog [format "%-20s %-12s" " -ba (BlastNbAligned)" "The Blast sequence limit to align."] AjouteAuLog [format "%-20s %-12s" "" "Default is 2000."] AjouteAuLog [format "%-20s %-12s" " -bs (BlastStrand)" "The Blast option to search on forward (1), reverse (2) or both (3) strands."] AjouteAuLog [format "%-20s %-12s" "" "Default is 1."] AjouteAuLog "\nYou need to define at least Query, Database and WorkingDir (3 other exists as default value)" return "" } #On positionne les parametres par default LesParametresParDefaut foreach {Option Valeur} $args { #AjouteAuLog "O $Option V $Valeur" switch -regexp -- $Option { "-q$" {LesParametresDuDesign Query $Valeur "Positionne"} "-b$" {LesParametresDuDesign DataBase $Valeur "Positionne"} "-w$" {LesParametresDuDesign WorkingDir $Valeur "Positionne"} "-ev$" {LesParametresDuDesign BlastExpect $Valeur "Positionne"} "-bw$" {LesParametresDuDesign BlastWord $Valeur "Positionne"} "-ba$" {LesParametresDuDesign BlastNbAligned $Valeur "Positionne"} "-bs$" {LesParametresDuDesign BlastStrand $Valeur "Positionne"} } } Oligo_BlastN_PourTous return "" } proc OligosAvecDifceSignificativeEntreMetaEtNometa {FichierSortie {LesNoms ""} {LesPos ""}} { set LesFichiersOligoMeta {Oligo806 Oligo807 Oligo810 Oligo817 Oligo818 Oligo819 Oligo826 Oligo827} set LesFichiersOligoNoMeta {Oligo809 Oligo811 Oligo812 Oligo814 Oligo815 Oligo816 Oligo820 Oligo821 Oligo822 Oligo823 Oligo825} set FichierLocCGHOligo "[RepertoireDuGenome]/PRIMA_CGH/CGH_Oligo_localisation" if {![file exists $FichierLocCGHOligo] || $FichierLocCGHOligo == ""} {return ""} set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} foreach Chromosome $ListeChro { Espionne $Chromosome ChargeFichierLoc TabO $FichierLocCGHOligo $Chromosome $LesNoms if {[info exists TabO($FichierLocCGHOligo,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabO($FichierLocCGHOligo,Chromosome,$Chromosome,LesNoms)] { # l'Oligo suivant sur le chromosome set NomOligo $Nom Espionne $NomOligo foreach LInfo [set TabO($FichierLocCGHOligo,Chromosome,$Chromosome,$Nom)] { set DebutOli [expr [lindex $LInfo 1]*1.0] set FinOli [expr [lindex $LInfo 2] *1.0] set PosMidOligo [expr ($FinOli-$DebutOli)/2 +$DebutOli] set AccessGene [lindex $LInfo 5] set GN [lindex $LInfo 6] set Des [lindex $LInfo 7] set Vu 0 } foreach Fichier $LesFichiersOligoMeta { if {[info exists TabA]} {unset TabA} set FichierCourbeOligo "[RepertoireDuGenome]/PRIMA_CGH/$Fichier" ChargeFichierCourbeCGH TabA $FichierCourbeOligo $Chromosome $LesPos if {[info exists TabA($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabA($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)] { if {$Pos==$PosMidOligo} { foreach LInfo [set TabA($FichierCourbeOligo,Chromosome,$Chromosome,$Pos)] { set Vu 1 set Val [lindex $LInfo 3] set Val [expr $Val*log(10)/log(2)] lappend ListeValeursMeta $Val break } } } } if {$Vu==0} {lappend ListeValeursMeta " "} } # ListeValeursMeta($NomOligo) completee #Espionne "long liste meta pour $NomOligo --- [llength $ListeValeursMeta($NomOligo)]" set Vu 0 foreach Fichier $LesFichiersOligoNoMeta { set FichierCourbeOligo "[RepertoireDuGenome]/PRIMA_CGH/$Fichier" if {[info exists TabL]} {unset TabL} ChargeFichierCourbeCGH TabL $FichierCourbeOligo $Chromosome $LesPos if {[info exists TabL($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabL($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)] { if {$Pos==$PosMidOligo} { foreach LInfo [set TabL($FichierCourbeOligo,Chromosome,$Chromosome,$Pos)] { set Vu 1 set Val [lindex $LInfo 3] set Val [expr $Val*log(10)/log(2)] lappend ListeValeursNoMeta $Val break } } } } if {$Vu==0} {lappend ListeValeursNoMeta " "} } # ListeValeursNoMeta($NomOligo) completee #Espionne "long liste NOmeta pour $NomOligo --- [llength $ListeValeursNoMeta($NomOligo)]" AppendAuFichier $FichierSortie "$NomOligo\t$Chromosome\t$PosMidOligo\t$AccessGene\t$GN\t$Des\t$ListeValeursMeta\t$ListeValeursNoMeta" set ListeValeursMeta ""; set ListeValeursNoMeta "" #### test de student pour avoir la p-value de la difce entre meta et nometa pour cet oligo #### # ListeValeursMeta($NomOligo) # ListeValeursNoMeta($NomOligo) # set Pvalue($NomOligo) $Val # attention a val format nombre tres petit... # set Pvalue [Base10 $Val] # AppendAuFichier $FichierSortie "$NomOligo\t$Pvalue\t$AccessGene\t$GN\t$Des" ############################################################################################## } # on passe a l'oligo suivant sur le chromosome } unset TabO } } proc OligosEtProduitsPCR {FichierSeq SavSapFavFap args} { set LesOptions $args set LesAvants [lindex $SavSapFavFap 0] set LesApres [lindex $SavSapFavFap 1] set FichierDesSignauxAvant [lindex $SavSapFavFap 2] set FichierDesSignauxApres [lindex $SavSapFavFap 3] LesSignauxDuFichier $FichierDesSignauxAvant SequenceDuSignal SequenceDuSignalPourPPCR LesSignauxDuFichier $FichierDesSignauxApres SequenceDuSignal SequenceDuSignalPourPPCR set Retourne "LesNomsDesFichiers" if {[OuiOuNon "Do you want (as usual) a MeltingTemp of 62 ( and 60 if it end with G or C) ?"]} { set AvecMeltingTemp 1 set Melting "62 60" } else { set AvecMeltingTemp [OuiOuNon "Do you want to define a MeltingTemp a new couple of temperatures?"] if {$AvecMeltingTemp} { FaireLire "Please give a couple of temperatures" set Melting [Entre "62 60 (second value if it ends with G or C)"] set tGC "" scan $Melting "%f %f" tAT tGC set Melting "$tAT $tGC" } else { FaireLire "Please enter the length of the priming sequence" set LongAvant [Entre 20] set LongApres [Entre 20] } } foreach A $LesOptions { if {[regexp "^Retourne" $A]} { regsub "^Retourne" $A Retourne continue } if {[regexp {^L[0-9]+$} $A]} { regsub "L" $A "" A set LongAvant $A set LongApres $A set AvecMeltingTemp 0 continue } if {[regexp {^T[0-9\.](_([0-9]+))?$} $A]} { regsub -all {[^0-9\.]} $A " " A regsub -all { +} $A " " A set Melting [string trim $A] set AvecMeltingTemp 1 continue } } foreach Ligne [CorrectionPourThrombin [LesLignesDuFichier $FichierSeq] $FichierSeq NF] { if {[regexp " *>" $Ligne]} { regsub -all ">" $Ligne " " Ligne scan $Ligne "%s" NomSeq lappend LesNomSeq $NomSeq set Entetes($NomSeq) $Ligne set Sequences($NomSeq) "" continue } regsub -nocase -all {[^a-z]} $Ligne "" Seq append Sequences($NomSeq) $Seq } set LesTFAsSans {} foreach NomSeq $LesNomSeq { set ProduitPCR "" set LesAvantsEtMoi $NomSeq set TM5P "" if {$LesAvants!={} || $LesAvants=={} && $LesApres=={}} { if {$LesAvants=={}} { set LesAvantsEtMoi No5pSignal } else { set LesAvantsEtMoi $LesAvants } lappend LesAvantsEtMoi $NomSeq set Nom [join $LesAvantsEtMoi "_"] set SeqAvant "" foreach Signal $LesAvants { set SeqSignal [string totitle [set SequenceDuSignal($Signal)]] append SeqAvant $SeqSignal set SeqSignalPourPPCR [string totitle [set SequenceDuSignalPourPPCR($Signal)]] append ProduitPCR $SeqSignalPourPPCR } if {$AvecMeltingTemp} { set SeqAdd [EntammePourMeltingTemp [set Sequences($NomSeq)] $Melting] } else { set SeqAdd [string range [set Sequences($NomSeq)] 0 [expr $LongAvant-1]] } set TM5P [TMDeLaSequence $SeqAdd] append SeqAvant $SeqAdd set TFA [SequenceFormatTFA $SeqAvant "$Nom tm5p_$TM5P" "brut"] if {[DontCreateAllOligos] && ! [OuiOuNon "$TFA\n\n OK to create it ?"]} { } else { lappend LesTFAs $TFA } } set LeNomDuProduitPCR $LesAvantsEtMoi set DebutProteine [expr [string length $ProduitPCR] +1] append ProduitPCR [set Sequences($NomSeq)] set FinProteine [expr [string length $ProduitPCR]] set TM3P "" if {$LesApres!={} || $LesAvants=={} && $LesApres=={}} { set LeNomDuProduitPCR [concat $LeNomDuProduitPCR $LesApres] if {$LesApres=={}} { set LesMoiEtApres [concat [list $NomSeq] "No3pSignal"] } else { set LesMoiEtApres [concat [list $NomSeq] $LesApres] } set Nom [join $LesMoiEtApres "_"] set SeqTotaleRaC [NucToReverseAndComplementNuc [set Sequences($NomSeq)]] if {$AvecMeltingTemp} { set SeqRaC [EntammePourMeltingTemp $SeqTotaleRaC $Melting] } else { set SeqRaC [string range $SeqTotaleRaC 0 [expr $LongApres-1]] } set TM3P [TMDeLaSequence $SeqRaC] set Signaux "" foreach Signal $LesApres { set SeqSignal [string totitle [set SequenceDuSignal($Signal)]] append Signaux $SeqSignal set SeqSignalPourPPCR [string totitle [set SequenceDuSignalPourPPCR($Signal)]] append ProduitPCR $SeqSignalPourPPCR } set SignauxRaC [NucToReverseAndComplementNuc $Signaux] set RaC "$SignauxRaC$SeqRaC" set TFA [SequenceFormatTFA $RaC "$Nom tm3p_$TM3P" "brut"] if {[DontCreateAllOligos] && ! [OuiOuNon "$TFA\n\n OK to create it ?"]} { } else { lappend LesTFAs $TFA } } set SeqProduitPCR [join $ProduitPCR ""] set L [string length $SeqProduitPCR] set CodonsRares [CodonsRares [set Sequences($NomSeq)]] set NomDuProduitPCR [join $LeNomDuProduitPCR "_"] set ProduitPCRTFA [SequenceFormatTFA $SeqProduitPCR "ProduitPCR_$NomDuProduitPCR bases_$L debut_$DebutProteine fin_$FinProteine tm5p_$TM5P tm3p_$TM3P $CodonsRares" "brut"] lappend LesProduitsPCRTFA $ProduitPCRTFA Espionne $ProduitPCRTFA } EspionneL $LesTFAs while 1 { FaireLire "Please, help me to choose the file name for oligos" set Queue [file tail $FichierSeq] if {[regexp "^cons_" $Queue]} { regsub "cons_" $Queue "" Queue } set FichierOligos "./oligos_$Queue" set FichierOligos [FichierPourSaveAs $FichierOligos] if {$FichierOligos==""} { if {[OuiOuNon "Do You really want to skipp saving of oligo ?"]} { break } continue } set FichierOligos [SauveLesLignes $LesTFAs dans $FichierOligos] break } while 1 { set D [file dirname $FichierOligos] set Q [file tail $FichierOligos] regsub "^oligos_" $Q "" Q set Q "ppcr_$Q" set FichierProduitsPCR "$D/$Q" if {[file exists $FichierProduitsPCR]} { FaireLire "Please, help me to choose the file name for produits_pcr" set FichierProduitsPCR [FichierPourSaveAs $FichierProduitsPCR] } if {$FichierProduitsPCR==""} { if { [OuiOuNon "Do You really want to skipp saving of PPCR ?"]} { break } continue } set FichierProduitsPCR [SauveLesLignes $LesProduitsPCRTFA dans $FichierProduitsPCR] break } if {$Retourne=="LesNomsDesFichiers"} { return [list $FichierOligos $FichierProduitsPCR] } if {$Retourne=="LesTFAsDesOligos"} { return $LesTFAs } } proc OligosFiles {Selection} { return [ShowOligosFiles $Selection "GetThem"] } proc OlymClade {{Seuil ""} {GetWhat ""} {SelectMethod ""} {UseExpect ""} {Clades ""}} { #rR On veut faire un classemnent des clades en fonction du comportement des 20000 blast par rapport au projet courant (initalement Homo sapiens) #rR OlymClade ne fait que remplir le tableau OlymStock puis lance les calculs par OlymStock CalculateAll if {$Clades!=""} { ChallengingClades "Load" $Clades } if {$UseExpect==""} { set UseExpect "UseExpect" } if {$SelectMethod==""} { set SelectMethod "FirstOnly" } if {$GetWhat==""} { set GetWhat "Show" } if {$Seuil==""} { set Seuil 99999 } set iNom 0 foreach Nom [LesNomsPourOlymClade] { set FiTaxobla [GscopeFile $Nom taxobla] if {[FileAbsent $FiTaxobla]} { continue } set LesCladesDuNom {} if {[info exists SommeExpect]} { unset SommeExpect } if {[info exists SommeScore]} { unset SommeScore } set LesLignes [LesLignesDuFichier $FiTaxobla] set NbHitDuNom [llength $LesLignes] if {$NbHitDuNom==0} { continue } OlymStock $Nom NbHits $NbHitDuNom set iLigne 0 if {[info exists DejaVuCeClade]} { unset DejaVuCeClade } foreach Ligne $LesLignes { incr iLigne set Rank [expr round(100*$iLigne/$NbHitDuNom)] lassign [split $Ligne "\t"] Expect Score TaxId OS Reste if {$Expect==0.0} { set Expect 1.0e-250 } # if {$Expect >1.0} { set Expect 1.0 } set TaxId [string trim $TaxId] set OS [string trim $OS] set Reste [string trim $Reste] if {[set Clade [ChallengingClades $TaxId Clade]]==""} { continue } ;#rR on ne s'interesse qu'aux TaxIds qui sont dans un Clade participant if {[info exists DejaVuCeClade($Clade)]} { continue } set DejaVuCeClade($Clade) 1 lappend LesCladesDuNom $Clade set Rank [llength [array names DejaVuCeClade]] ;#rR attention on triche a fond !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! OlymStock ListOf Clade $Clade OlymStock ListOf TaxId $TaxId OlymStock $Clade Content $TaxId set Expect [string trim $Expect] set Score [string trim $Score] set Score [expr round($Score)] if {$Expect > $Seuil} { break } set Expect [expr log10($Expect)] ; #rR attention on prend le log !!!!!!!! lappend LesExpects $Expect lappend LesScores $Score lappend LesRanks $Rank OlymStock $TaxId Expect$Nom $Expect OlymStock $TaxId Score$Nom $Score OlymStock $TaxId Rank$Nom $Rank lappend LesChoisis "$Expect\t$Score\t$TaxId\t$OS\t$Reste" if { ! [info exists SommeExpect($Clade)]} { set SommeExpect($Clade) 0 } if { ! [info exists SommeScore($Clade)]} { set SommeScore($Clade) 0 } if { ! [info exists SommeRank($Clade)]} { set SommeRank($Clade) 0 } set SommeExpect($Clade) [expr $SommeExpect($Clade) + $Expect] set SommeScore($Clade) [expr $SommeScore($Clade) + $Score] set SommeRank($Clade) [expr $SommeRank($Clade) + $Rank] if { ! [info exists NbHitDuClade($Clade)]} { set NbHitDuClade($Clade) 0 } incr NbHitDuClade($Clade) } set LesCladesDuNom [ListeSansDoublon $LesCladesDuNom] set SommeMoyennesExpect 0 set SommeMoyennesScore 0 set SommeMoyennesRank 0 foreach Clade $LesCladesDuNom { set MoyenneExpect($Clade) [expr $SommeExpect($Clade)/$NbHitDuClade($Clade)] set MoyenneScore($Clade) [expr $SommeScore($Clade)/$NbHitDuClade($Clade)] set MoyenneRank($Clade) [expr $SommeRank($Clade)/$NbHitDuClade($Clade)] OlymStock $Nom $Clade-MoyenneExpect $MoyenneExpect($Clade) OlymStock $Nom $Clade-MoyenneScore $MoyenneScore($Clade) OlymStock $Nom $Clade-MoyenneRank $MoyenneRank($Clade) set SommeMoyennesExpect [expr $SommeMoyennesExpect + $MoyenneExpect($Clade)] set SommeMoyennesScore [expr $SommeMoyennesScore + $MoyenneScore($Clade)] set SommeMoyennesRank [expr $SommeMoyennesRank + $MoyenneRank($Clade)] set Case [CaseRank $MoyenneRank($Clade)] OlymStock ListOf CaseRank $Case OlymStock "CaseRank-$Case" $Clade $Nom } set NbCladesDuNom [llength $LesCladesDuNom] if {$NbCladesDuNom==0} { continue } OlymStock $Nom ListOfClade $LesCladesDuNom set MoyennesExpect [expr $SommeMoyennesExpect/$NbCladesDuNom] set MoyennesScore [expr $SommeMoyennesScore/$NbCladesDuNom] set MoyennesRank [expr $SommeMoyennesRank/$NbCladesDuNom] OlymStock $Nom MoyennesExpect $MoyennesExpect OlymStock $Nom MoyennesScore $MoyennesScore OlymStock $Nom MoyennesRank $MoyennesRank foreach Clade $LesCladesDuNom { OlymStock $Nom $Clade-DeltaExpect [expr $MoyenneExpect($Clade)- $MoyennesExpect] OlymStock $Nom $Clade-DeltaScore [expr $MoyenneScore($Clade) - $MoyennesScore] OlymStock $Nom $Clade-DeltaRank [expr $MoyenneRank($Clade) - $MoyennesRank] #rR c'est ici qu'il faut les ranger dans des cases (on va peut-etre commencer par seulement les rank ...) } } OlymStock CalculateAll } proc OlymCladeHelp {{GetWhat ""}} { set Texte " OlymClade permet de comparer et de voir les distributions des positions du premier hit de chaque organisme dans les blastp Avant tout il faut bien retenir que 1/ l'on part de taxobla qui contient dans l'ordre du blast les positions du premier hit de chaque organisme chaque ligne contient séparés par tabulation (et des blancs en fin de valeur, mais a partir de SuiteInfo il n'y a plus de tab) expect score taxid OC Suite info 1e-73 234 88036 Selaginella moellendorffii (strand ... D8RPE7_SELML D8RPE7 Selaginella moellendorffii Ubiquinol oxidase GN=SELMODRAFT_232012 OS=Selaginella_moellendorffii TAXID=88036 BANK=tr OX=88036 Length = 302 2/ " if {$GetWhat=="Show"} { return [Affiche $Texte] } return $Texte } proc OlymMedals {} { set LesClades [OlymStock ListOf Clade] set LesTaxId [OlymStock ListOf TaxId] set LesCasesRank [CaseRank ListOf] set LesHeaders {} set LesSensDuTri {} lappend LesHeaders "Rank" "RankAv" lappend LesSensDuTri "0red-100blue" "0red-100blue" foreach Case $LesCasesRank { lappend LesHeaders $Case lappend LesSensDuTri "100red-0blue" } lappend LesHeaders "Score" "ScoreAv" "Expect" "ExpectAv" lappend LesSensDuTri "100red-0blue" "100red-0blue" "0red-100blue" "0red-100blue" foreach Clade $LesClades { set MoyRank [OlymStock $Clade MoyenneRank] set MoyScore [OlymStock $Clade MoyenneScore] set MoyExpect [OlymStock $Clade MoyenneExpect] lappend LesCladesDuRank($MoyRank) $Clade lappend LesRanks $MoyRank } set LesRanks [lsort -unique -integer $LesRanks] set LesCladesRankes {} foreach Rank $LesRanks { foreach Clade $LesCladesDuRank($Rank) { lappend LesCladesRankes $Clade } } set I -1 foreach Clade $LesCladesRankes { incr I set MoyRank [OlymStock $Clade MoyenneRank] set MoyRankGen [OlymStock Moyenne MoyenneRank] set MoyScore [OlymStock $Clade MoyenneScore] set MoyScoreGen [OlymStock Moyenne MoyenneScore] set MoyExpect [OlymStock $Clade MoyenneExpect] set FMoyExpect [format "%4.2f" $MoyExpect] set MoyExpectGen [OlymStock Moyenne MoyenneExpect] set FMoyExpectGen [format "%4.2f" $MoyExpectGen] set x -1 set T($I,[incr x]) $MoyRank set T($I,[incr x]) $MoyRankGen foreach Case $LesCasesRank { set LesNoms [OlymStock "CaseRank-$Case" $Clade] set N [llength $LesNoms] set T($I,[incr x]) $N } set T($I,[incr x]) $MoyScore set T($I,[incr x]) $MoyScoreGen set T($I,[incr x]) $FMoyExpect set T($I,[incr x]) $FMoyExpectGen } return [Medals $LesCladesRankes [array get T] $LesHeaders $LesSensDuTri] } proc OlymPodium {K} { set Touche [$K find withtag current] set LesTags [$K gettags $Touche] lassign $LesTags Podium I J Clade Header if {[regexp {^[0-9]+\-[0-9]+$} $Header]} { set LesNoms [OlymStock "CaseRank-$Header" $Clade] foreach Nom $LesNoms { set Id [ExtraitInfo $Nom Id] set Ac [ExtraitInfo $Nom Ac] set ValiGN [ExtraitInfo $Nom ValiGN] lappend LesGn $ValiGN set ValiDE [ExtraitInfo $Nom ValiDE] lappend LaSortie "$Nom\t$Id\t$Ac\t$ValiGN\t$ValiDE" } set F [AfficheListe "#n°HSAP\n$LaSortie" "AvecFetch" "Hits with rank $Header for $Clade"] set GeneNames [join $LesGn ","] set B [BoutonneLaFenetre $F "GeneOntology" "GoGetShowFromGeneList $GeneNames"] $B configure -background "Magenta" } } proc OlymStock {{Qui ""} {Quoi ""} {Valeur ""}} { global OlymStock if {$Valeur==""} { if {[info exists OlymStock($Qui,$Quoi)]} { return $OlymStock($Qui,$Quoi) } if { ! [info exists OlymStock]} { OlymClade ; #rR c'est là qu'on range tout ! return [OlymStock $Qui $Quoi] } if {[info exists OlymStock(EstCharge)]} { return "" } } if {$Qui=="CalculateAll"} { set OlymStock($Qui,EstCharge) 1 set OlymStock(ListOf,Clade) [lsort -unique $OlymStock(ListOf,Clade)] foreach Clade $OlymStock(ListOf,Clade) { set SommeExpect 0 set SommeScore 0 set SommeRank 0 set NbNom 0 foreach Nom [LesNomsPourOlymClade] { if { ! [info exists OlymStock($Nom,$Clade-MoyenneExpect)]} { continue } incr NbNom set SommeExpect [expr $SommeExpect + $OlymStock($Nom,$Clade-MoyenneExpect)] set SommeScore [expr $SommeScore + $OlymStock($Nom,$Clade-MoyenneScore)] set SommeRank [expr $SommeRank + $OlymStock($Nom,$Clade-MoyenneRank)] } if {$NbNom==0} { continue } set MoyenneExpect [expr $SommeExpect/$NbNom] set MoyenneScore [expr $SommeScore/$NbNom] set MoyenneRank [expr $SommeRank/$NbNom] set OlymStock($Clade,NbNom) $NbNom set OlymStock($Clade,MoyenneExpect) $MoyenneExpect set OlymStock($Clade,MoyenneScore) $MoyenneScore set OlymStock($Clade,MoyenneRank) $MoyenneRank } set SommeMoyenneExpect 0 set SommeMoyenneScore 0 set SommeMoyenneRank 0 set NbClade 0 foreach Clade $OlymStock(ListOf,Clade) { if { ! [info exists OlymStock($Clade,MoyenneExpect)]} { continue } incr NbClade set SommeMoyenneExpect [expr $SommeMoyenneExpect + $OlymStock($Clade,MoyenneExpect)] set SommeMoyenneScore [expr $SommeMoyenneScore + $OlymStock($Clade,MoyenneScore)] set SommeMoyenneRank [expr $SommeMoyenneRank + $OlymStock($Clade,MoyenneRank)] } if {$NbClade==0} { parray OlymStock } set MoyenneMoyenneExpect [expr $SommeMoyenneExpect/$NbClade] set MoyenneMoyenneScore [expr $SommeMoyenneScore/$NbClade] set MoyenneMoyenneRank [expr $SommeMoyenneRank/$NbClade] OlymStock Moyenne MoyenneExpect $MoyenneMoyenneExpect OlymStock Moyenne MoyenneScore $MoyenneMoyenneScore OlymStock Moyenne MoyenneRank $MoyenneMoyenneRank #rR on en fait quoi ??? set OlymStock(EstCharge) 1 } lappend OlymStock($Qui,$Quoi) $Valeur ; #rR attention on fait toujours lappend return $OlymStock($Qui,$Quoi) } proc OmimGenemap {{Qui ""} {Quoi ""}} { global OmimGenemap if {$Qui==""} { return "" } # if {$Qui==""} { set Qui "ListOf" ; set Quoi "Gn" } if {$Quoi==""} { set Quoi "Di" } if {$Quoi=="Disease"} { set Quoi "Di" } if {$Qui!="ListOf"} { set Qui [string toupper $Qui] } if {[info exists OmimGenemap($Qui,$Quoi)]} { return $OmimGenemap($Qui,$Quoi) } if {[info exists OmimGenemap($Qui,Omims)]} { set LeResultat [list] foreach Omim $OmimGenemap($Qui,Omims) { if {[info exists OmimGenemap($Omim,$Quoi)] && $OmimGenemap($Omim,$Quoi)!=""} { lappend LeResultat $OmimGenemap($Omim,$Quoi) } } set LeResultat [lsort -unique $LeResultat] return [join $LeResultat "///"] } if {[info exists OmimGenemap("EstCharge")]} { return "" } set OmimGenemap("EstCharge") 1 set RepKb "/genomics/link/AmdKb" set FichierOmimGenemap "$RepKb/DeSM2PH/genemap.txt" set KeysOri [list CI ME DE YE Cy GNs GS Ti1 Ti2 Omim Me Co1 Co2 Di1 Di2 Di3 MM Ref] set Keys [list CI Date Cy GNs GS Ti Omim Me Co Di MM Ref] set OmimGenemap(ListOf,Keys) $Keys foreach Ligne [LesLignesDuFichier $FichierOmimGenemap] { regsub -all {[\{\}@]} $Ligne "" Ligne regsub -all { +} $Ligne " " Ligne regsub -all { *\| *} $Ligne "|" Ligne set Ligne [string trim $Ligne] set Values [split $Ligne "|"] lassign $Values CI ME DE YE Cy GNs GS Ti1 Ti2 Omim Me Co1 Co2 Di1 Di2 Di3 MM Ref if {$YE>55} { set YE "19$YE" } else { set YE "20$YE" } regsub "^0" $ME "" ME regsub "^0" $DE "" DE if {$ME==""} { set ME "0" } if {$DE==""} { set DE "0" } set Date [format "%4.4d%2.2d%2.2d" $YE $ME $DE] set Ti $Ti1 if {$Ti2!=""} { append Ti " $Ti2" } set Co $Co1 if {$Co2!=""} { append Co " $Co2" } set Di $Di1 if {$Di2!=""} { append Di " $Di2" } if {$Di3!=""} { append Di " $Di3" } set OmimGenemap($Omim,Line) $Ligne regsub -all " +" $GNs "" GNs set OmimGenemap($Omim,CI) $CI set OmimGenemap($Omim,Date) $Date set OmimGenemap($Omim,Cy) $Cy set OmimGenemap($Omim,GNs) $GNs set OmimGenemap($Omim,GS) $GS set OmimGenemap($Omim,Ti) $Ti set OmimGenemap($Omim,Omim) $Omim set OmimGenemap($Omim,Me) $Me set OmimGenemap($Omim,Co) $Co set OmimGenemap($Omim,Di) $Di set OmimGenemap($Omim,MM) $MM set OmimGenemap($Omim,Ref) $Ref lappend OmimGenemap($CI,Omims) $Omim foreach K $Keys { lappend OmimGenemap(ListOf,$K) $OmimGenemap($Omim,$K) } foreach Gn [split $GNs ","] { lappend OmimGenemap(ListOf,Gn) $Gn lappend OmimGenemap($Gn,Omims) $Omim } } lappend OmimGenemap(ListOf,Keys) "Line" foreach K $Keys { set OmimGenemap(ListOf,$K) [lsort -unique $OmimGenemap(ListOf,$K)] } set OmimGenemap(ListOf,Gn) [lsort -unique $OmimGenemap(ListOf,Gn)] return [OmimGenemap $Qui $Quoi] } proc OmimGenemapFromList {List {Quoi ""} {JoinCar ""} {RecordsJoinCar ""} {ListJoinCar ""} {WithinHits ""}} { #rR ressemble furieusement a MorbidMapFromList #rR List peut etre un nom de fichier (avec /), une liste ou un texte avec , #rR Peut etre une liste de numeros OMIM ou un fichier (avec un /) contenant de OmimHits set WithAllHits 1 if {$WithinHits!=""} { set WithAllHits 0 if {[regexp "/" $WithinHits] && [file exists $WithinHits]} { set WithinHits [OmimHitsFromFile $WithinHits "ListOf" "O"] } foreach O $WithinHits { set WithHit($O) 1 } } set WithoutEmpty [regexp -nocase "WithoutEmpty" $Quoi] if {$WithoutEmpty} { regsub -nocase "WithoutEmpty" $Quoi "" Quoi } if {$RecordsJoinCar=="Tab"} { set RecordsJoinCar "\t" } if {[regexp "/" $List] && [file exists $List]} { set L {} foreach Ligne [LesLignesDuFichier $List] { scan $Ligne "%s" G lappend L $G } set List $L } if {[regexp "\," $List]} { set List [split $List ","] } set LeRetour {} foreach Qui $List { set GM [OmimGenemap $Qui $Quoi] #rR attention GM peut etre une liste separee par des /// que je transfome en @ while {[regsub -all "///" $GM "@" GM]} {} set LesGM [split $GM "@"] if { ! $WithAllHits} { #rR j'ai greffe cette verue pour ne prendre que les O qui sont dans WithinHits #rR on suppose que O se trouve toujours en début (en fait Quoi doit etre O ou OD) set GoodGM {} foreach H $LesGM { scan $H "%s" O if {[info exists WithHit($O)]} { lappend GoodGM $H } } set Avant [llength $GM]; set Apres [llength $GoodGM] set LesGM $GoodGM } #rR attention GM peut etre une liste separee par des /// if {$JoinCar!=""} { set GM [join $LesGM $JoinCar] } if {$GM=="" && $WithoutEmpty} { continue } set Ligne [list $Qui $GM] if {$RecordsJoinCar!=""} { set Ligne [join $Ligne $RecordsJoinCar] } lappend LeRetour $Ligne } if {$ListJoinCar!=""} { set LeRetour [join $LeRetour $ListJoinCar] } return $LeRetour } proc OmimHitsFromFile {{File ""} {Qui ""} {Quoi ""}} { global OmimHitsFromFile set FileIn $File if {$File==""} { if { ! [info exists OmimHitsFromFile("CurrentFile")]} { set File "[HomeRipp]/ImAnnoWww/ImAnno/ImAnnoTeeth/Virginie/OmimHitsForTeeth.txt" } else { set File $OmimHitsFromFile("CurrentFile") } } set OmimHitsFromFile("CurrentFile") $File if {$Qui=="" && $Quoi==""} { set Qui "ListOf"; set Quoi "O" } if {[info exists OmimHitsFromFile($File,$Qui,$Quoi)]} { return $OmimHitsFromFile($File,$Qui,$Quoi) } if {[info exists OmimHitsFromFile($File,,EstCharge)]} { return "" } set OmimHitsFromFile($File,,EstCharge) 1 set LesO {} foreach Ligne [LesLignesDuFichier $File] { if { ! [regexp -nocase {[0-9a-z]} $Ligne]} { continue } if {[regexp {^(.)([0-9]+)} $Ligne Match T O]} { lappend LesO $O lappend LesTypesDe($O) $T lappend LaDescriDe($O) [string range $Ligne 1 end] continue } lappend LaDescriDe($O) [string trim $Ligne] } set LesO [lsort -unique $LesO] set OmimHitsFromFile($File,ListOf,O) $LesO foreach O $LesO { set OmimHitsFromFile($File,DescriptionOf,$O) [join $LaDescriDe($O) " /// "] set OmimHitsFromFile($File,TypeOf,$O) [join $LesTypesDe($O) " /// "] } return [OmimHitsFromFile $FileIn $Qui $Quoi] } proc OnAligneTousLesElusDuBlastPPar {Methode {Value ""}} { #rR Attention toutes les méthodes sont exclusives ... on ne peut en faire qu'une seule global OnAligneTousLesElusDuBlastPPar if {$Value!=""} { if {[info exists OnAligneTousLesElusDuBlastPPar]} { unset OnAligneTousLesElusDuBlastPPar } set OnAligneTousLesElusDuBlastPPar($Methode) $Value } if {[info exists OnAligneTousLesElusDuBlastPPar($Methode)]} { return $OnAligneTousLesElusDuBlastPPar($Methode) } return 0 } proc OnColorieLesFrames {{X ""}} { global OnColorieLesFrames if { ! [info exists OnColorieLesFrames]} { set OnColorieLesFrames 0 } if {$X==""} { return $OnColorieLesFrames } else { return [set OnColorieLesFrames $X] } } proc OnGardeCommeNouvelOrganisme {OS {Controle SansDemander}} { global RepertoireDuGenome global NouvelOrganisme set FichierNouveauxOrganismes "$RepertoireDuGenome/fiches/nouveauxorganismes" if { ! [info exists NouvelOrganisme]} { set NouvelOrganisme(RIPPUS_RAYMONDII) 1 if {[file exists "$FichierNouveauxOrganismes"]} { foreach Ligne [LesLignesDuFichier "$FichierNouveauxOrganismes"] { set NouvelOrganisme($Ligne) "lu" } } } set OS [string toupper $OS] if {[info exists NouvelOrganisme($OS)]} { return $OS } if { $Controle == "EnDemandant"} { if {! [OuiOuNon "Can I keep \n$OS \n as organism name ?" 0]} { return "" } while { ! [regexp {^[A-Z]+ [A-Z]+} $OS] } { if {[OuiOuNon "$OS \n contains wrong characters, I forget it ?"]} { return "" } set OS [Entre $OS] } } set GloOS [Glossaire $OS Complet] if {$GloOS != "" } { Espionne "$GloOS existe, je suis content." ; return $GloOS } AppendAuFichier "$FichierNouveauxOrganismes" $OS set NouvelOrganisme($OS) "cree" return $OS } proc OnGoingDir {} { set OnGoingDir "[RepertoireDuGenome]/OnGoing" return $OnGoingDir } proc OnLivre {f} { NousAllonsAuBoulot "[MagosDir]/EnRayon" if {0} { set foo [open "results-$f.tar" r] fconfigure $foo -translation binary set Colis [read $foo] close $foo } else { set Colis [ContenuDuFichier "results-$f.tar"] } return $Colis } proc OnReDessineArbre {AId args} { global Abr if {$args != ""} { set Abr($AId,TAff) [lindex $args 1] } set PAD [set Abr($AId,PAD)] $PAD delete all puts "type [set Abr($AId,TypeTree)]" if {[set Abr($AId,TypeTree)] eq "dendrogram"} { ReDessineArbre $AId } else { ReDessineArbreCart $AId ModeTagLeaf $AId } if {[set Abr($AId,Swap)]} { set Abr($AId,Swap) 0 ModeSwap $AId } if {[set Abr($AId,Reroot)]} { set Abr($AId,Reroot) 0 ModeReroot $AId } MontreBootstrap $AId ShowTreeLegend $AId #DumpIt $AId return } proc OnRevientDuBoulot {} { global MemorisePWD cd $MemorisePWD } proc OnSortPas {tag} { set dimX $::TFB(dimX) set dimY $::TFB(dimY) set xmin 1 ; set xmax [expr {$dimX - 1}] set ymin 1 ; set ymax [expr {$dimY - 1}] set Lc [$::PAD bbox $tag] foreach {x y} $Lc { if {$x < $xmin} {set xmin $x} if {$x > $xmax} {set xmax $x} if {$y < $ymin} {set ymin $y} if {$y > $ymax} {set ymax $y} } set xd 0.0 ; set yd 0.0 if {$xmin < 1} { set xd [expr {-1. * $xmin + 1}] } if {$ymin < 1} { set yd [expr {-1. * $ymin + 1}] } if {$xmax > ($dimX - 1)} { set xd [expr {-1*($xmax - $dimX + 1)}] } if {$ymax > ($dimY - 1)} { set yd [expr {-1*($ymax - $dimY + 1)}] } if {$xd != 0.0 || $yd != 0.0} { # puts "OnSortPas $xd $yd" $::PAD move $tag $xd $yd BouleSurCorps $tag } return } proc OnTraite {Quoi {Comment ""}} { if {$Comment==""} { set Comment "Strict" } if {$Comment=="Strict"} { return [regexp "/$Quoi$" [RepertoireDuGenome]] } if {$Comment=="Like" } { if {[FileAbsent "[RepertoireDuGenome]/beton/miniconfig"]} { return 0 } return [regexp "OnTraiteLike $Quoi" [ContenuDuFichier "[RepertoireDuGenome]/beton/miniconfig"]] } return [regexp $Quoi [RepertoireDuGenome]] } proc OnTraiteBalibase {} { return [regexp -nocase "Balibase" [RepertoireDuGenome]] } proc OnTraiteDesAffymetrix {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } return [regexp -nocase "Affymetrix" $GenomeOuCollection] } proc OnTraiteDesCDNAs {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } return [regexp -nocase "CDNA" $GenomeOuCollection] } proc OnTraiteDesCDS {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } return [regexp -nocase "CDS" $GenomeOuCollection] } proc OnTraiteDesCDSProtFoF {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } return [regexp -nocase "CDS with protein in a FoF" $GenomeOuCollection] } proc OnTraiteDesClones {} { global GenomeOuCollection if {[regexp "Alvi50" [RepertoireDuGenome]]} { return 1 } if { ! [info exists GenomeOuCollection]} { return 0 } return [regexp -nocase "Clones" $GenomeOuCollection] } proc OnTraiteDesNucleotides {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } if { [regexp -nocase "DNA" $GenomeOuCollection]} { return 1 } if { [regexp -nocase "Protein" $GenomeOuCollection]} { return 0 } if { [set R [OuiOuNonMemo "Do we handle DNA ?"]]} { return $R } return 0 } proc OnTraiteDesProteines {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } if { [regexp -nocase "protein" $GenomeOuCollection]} { return 1 } if { [set R [OuiOuNonMemo "Do we handle only proteins (with no nuc seq)?"]]} { return $R } return 0 } proc OnTraiteEVIhs {} { return [regexp -nocase "EVIhs" [RepertoireDuGenome]] } proc OnTraiteEVImm {} { return [regexp -nocase "EVImm" [RepertoireDuGenome]] } proc OnTraiteGGWhs {} { return [regexp -nocase "\GGWhs$" [RepertoireDuGenome]] } proc OnTraiteGGWmm {} { return [regexp -nocase "\GGWmm$" [RepertoireDuGenome]] } proc OnTraiteGGhs {} { return [regexp -nocase "\GGhs$" [RepertoireDuGenome]] } proc OnTraiteGGmm {} { return [regexp -nocase "\GGmm$" [RepertoireDuGenome]] } proc OnTraiteGenoretGenes {} { return [expr [OnTraiteGGmm] || [OnTraiteGGWmm] || [OnTraiteEVImm] || [OnTraiteGGhs] || [OnTraiteGGWhs] || [OnTraiteEVIhs]] } proc OnTraiteGscopeClonage {} { return [regexp "ProGS" [RepertoireDuGenome]] } proc OnTraiteKoAnno {} { return [string equal [PreFixe] "KoA"] } proc OnTraiteMS2PH {} { return [regexp -nocase "MS2PH|TriBlast|NewPDBSet" [RepertoireDuGenome]] } proc OnTraitePeroxisome {} { return [regexp -nocase "Perox" [RepertoireDuGenome]] } proc OnTraitePuzzleFit {} { return [regexp "/PFhuman" [RepertoireDuGenome]] } proc OnTraiteRetGene {} { return [regexp -nocase "RetGene" [RepertoireDuGenome]] } proc OnTraiteSM2PH {{Value ""}} { global OnTraiteSM2PH if {$Value!=""} { set OnTraiteSM2PH $Value } if { ! [info exists OnTraiteSM2PH]} { set OnTraiteSM2PH 0 } return $OnTraiteSM2PH } proc OnTraiteSpine {} { return [string equal [PreFixe] "SPINE"] } proc OnTraiteSpliRet {} { return [regexp -nocase "SpliRet" [RepertoireDuGenome]] } proc OnTraiteSpliRetMouse {} { return [regexp -nocase "SpliRetMouse" [RepertoireDuGenome]] } proc OnTraiteSpliRetRat {} { return [regexp -nocase "SpliRetRat" [RepertoireDuGenome]] } proc OnTraiteTroisPrima {} { return [regexp -nocase "TroisPrima" [RepertoireDuGenome]] } proc OnTraiteUCSCGenomes {} { return [regexp "UCSCGenomes" [RepertoireDuGenome]] } proc OnTraiteUnGenome {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } return [regexp -nocase "Genome" $GenomeOuCollection] } proc OnTraiteUneCollection {} { global GenomeOuCollection if { ! [info exists GenomeOuCollection]} { return 0 } return [regexp -nocase "Collection" $GenomeOuCollection] } proc OnVireLesMonstresLointains {{Valeur ""}} { global OnVireLesMonstresLointains if {$Valeur!=""} { return [set OnVireLesMonstresLointains $Valeur] } if {[info exists OnVireLesMonstresLointains]} { return $OnVireLesMonstresLointains } set OnVireLesMonstresLointains 0 return $OnVireLesMonstresLointains } 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 Onto {args} { global TableauGO # OPTIONS de ONTO # LesTypes # $Type $GO LesJumeaux # $GO LesJumeaux # $GO MonJumeau # $Type $GO LesNiveaux # $Type LesNiveaux # $Type $Niveau # $Type $GO EC # $GO Type # $Type $GO LesParents # $Type $GO LesConstituants # $Type $GO LesContributions # $Type $GO LesEnfants # $Type $GO LesDefinitions # set GONothing "GO:nothing" # $Type Nothing # $Type $GONothing LesJumeaux # $Type $GONothing LesNiveaux # $Type $GONothing EC # $Type $GONothing LesParents # $Type $GONothing LesConstituants # $Type $GONothing LesContributions # $Type $GONothing LesEnfants # $Type TousLesGO # $Type LesNiveaux if {0} { global OntoEstAuCafe if {[PreFixe]!="Onto"} { set OntoEstAuCafe 1 } if {[info exists OntoEstAuCafe] && $OntoEstAuCafe} { return [QuestionDeScience Ontology "ret Onto [join $args " "]"] } } set Quoi [join $args ","] if {[info exists TableauGO($Quoi)]} { return [set TableauGO($Quoi)] } if {[info exists TableauGO(EstCharge)]} { return "" } set TableauGO(LesTypes) [LesTypesOntologiques] foreach Type [LesTypesOntologiques] {ChargeOntology TableauGO $Type} set TableauGO(EstCharge) 1 if {[info exists TableauGO($Quoi)]} { return [set TableauGO($Quoi)] } return "" } proc OntoAppend {args} { global TableauGO set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] return [lappend TableauGO($Quoi) $Valeur] } proc OntoExists {args} { global TableauGO if {$args=={}} { return [info exists TableauGO(EstCharge)]} set Quoi [join $args ","] return [info exists TableauGO($Quoi)] } proc OntoMesGO {args} { global TableauMesGO set Quoi [join $args ","] if {[info exists TableauMesGO($Quoi)]} { return [set TableauMesGO($Quoi)] } if {[info exists TableauMesGO(EstCharge)]} { return "" } set TableauMesGO(EstCharge) 1 if {[info exists TableauMesGO($Quoi)]} { return [set TableauMesGO($Quoi)] } return "" } proc OntoMesGOAppend {args} { global TableauMesGO set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] return [lappend TableauMesGO($Quoi) $Valeur] } proc OntoMesGOExists {args} { global TableauMesGO if {$args=={}} { return [info exists TableauMesGO(EstCharge)]} set Quoi [join $args ","] return [info exists TableauMesGO($Quoi)] } proc OntoMesGOReset {args} { global TableauMesGO if {[info exists TableauMesGO]} {unset TableauMesGO} return "" } proc OntoMesGOSet {args} { global TableauMesGO set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] return [set TableauMesGO($Quoi) $Valeur] } proc OntoMesGOUnset {args} { global TableauMesGO set Quoi [join $args ","] catch {unset TableauMesGO($Quoi)} } proc OntoSet {args} { global TableauGO set Quoi [join [lrange $args 0 end-1] ","] set Valeur [lindex $args end] return [set TableauGO($Quoi) $Valeur] } proc OntoUnset {args} { global TableauGO set Quoi [join $args ","] catch {unset TableauGO($Quoi)} } proc Onto_EXISTEAILLEURS {args} { global TableauGO set Quoi [join $args ","] if {[info exists TableauGO($Quoi)]} { return [set TableauGO($Quoi)] } if {[info exists TableauGO(EstCharge)]} { return "" } set TableauGO(LesTypes) [LesTypesOntologiques] foreach Type [LesTypesOntologiques] {ChargeOntology TableauGO $Type} set TableauGO(EstCharge) 1 if {[info exists TableauGO($Quoi)]} { return [set TableauGO($Quoi)] } return "" } proc OntologieDesAffymetrixDifferentiellementExprimes {} { IllustreOntologyDesBoitesGscope [ListeDesDifferentiellementExprimesSansJumeaux] } proc OntologieDuneListeDAffymetrix {} { set Fichier [ButineArborescence All] Espionne $Fichier foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" code lappend Liste $code } #EspionneL $Liste IllustreLeCamembertOntologiqueDesBoitesGscope $Liste #IllustreOntologyDesBoitesGscope $Liste } proc Ontology2ChoosenOntology {Type GO} { set FichierChoosenGO "[RepertoireDuGenome]/fiches/ChoosenOntology" set LesGO [list $GO] foreach GO [TousLesAncetresOntologiques $Type $GO] {lappend LesGO $GO} set LesOntologies {} foreach GO [lsort -unique $LesGO] { if {[InterrogeChoosenGeneOntology $FichierChoosenGO GOChoisi $GO Type] == ""} {continue} lappend LesOntologies [list $GO] } if {$LesOntologies == {}} {return [list OTHER]} return [lsort -unique [EnterrerLesAncetresOntologiques $LesOntologies]] } proc OntologyDesClusters {Selection} { foreach Ligne [split $Selection "\n"] { scan $Ligne "%s" Nom lappend Liste $Nom } if {$Liste=={}} { return "" } IllustreOntologyDesBoitesGscope $Liste } proc OntologyDir {{Repertoire ""}} { global env global OntologyDir if {$Repertoire!=""} { set OntologyDir $Repertoire } if { ! [info exists OntologyDir]} { if {[info exists env(ONTOLOGYDIR)]} { set OntologyDir $env(ONTOLOGYDIR) } else { set OntologyDir "[GscopeDatabaseDir Ontology]" } } return $OntologyDir } proc OpacifieImage {img bg {trans 1}} { if {$trans} { set tmp [image create photo] $tmp put [$img data -background $bg] $img blank $img copy $tmp image delete $tmp } else { set rgb [winfo rgb . $bg] lassign $rgb r g b set rgb [list [expr {$r/256}] [expr {$g/256}] [expr {$b/256}]] set w [image width $img] set h [image height $img] set data [$img data] set i 0 set j 0 foreach Lp $data { foreach p $Lp { if {[$img get $j $i] == $rgb} { $img transparency set $j $i 1 } incr j } set j 0 incr i } } return } proc Operation {C1 C2} { set retour1 "somme [expr $C1+$C2]" set retour2 "diff [expr $C1-$C2]" return [list $retour1 $retour2] } proc Operon {Nom {Info ""}} { set FileOperons "[RepertoireDuGenome]/fiches/operons" if {![file exists $FileOperons]} {return ""} set JeSuisDansUnOperon 0 foreach Ligne [LesLignesDuFichier $FileOperons] { set LesOrfsDeLOperon [split $Ligne " "] foreach Orf $LesOrfsDeLOperon { if {$Orf == $Nom} { if {$Info == ""} {return $LesOrfsDeLOperon} set JeSuisDansUnOperon 1 break } } if {$JeSuisDansUnOperon} {break} } if {$Info == "Definitions" && $JeSuisDansUnOperon} { set LesDefinitionsDeLOperon {} foreach Orf $LesOrfsDeLOperon { lappend LesDefinitionsDeLOperon "$Orf [DefinitionApproximative $Orf]" } return $LesDefinitionsDeLOperon } if {$Info == "Taille" && $JeSuisDansUnOperon} { set Taille [expr [llength $LesOrfsDeLOperon] -1] return $Taille } if {$Info == "Numero" && $JeSuisDansUnOperon} { set OperonDeLOrf [Operon $Nom] set NumeroDeLOperon [lindex $OperonDeLOrf 0] return $NumeroDeLOperon } if {$Info == "Clusters" && $JeSuisDansUnOperon} { set LesClustersDeLOperon {} foreach Orf $LesOrfsDeLOperon { set Clust [InfoDuCluster $Orf Numero] if {![regexp {^[0-9]*$} $Clust]} {continue} lappend LesClustersDeLOperon $Clust } return $LesClustersDeLOperon } if {$Info == "Orfs_Clusters" && $JeSuisDansUnOperon} { set LesOrfsEtClustersDeLOperon {} foreach Orf $LesOrfsDeLOperon { set Clust [InfoDuCluster $Orf Numero] if {![regexp {^[0-9]*$} $Clust]} {continue} lappend LesOrfsEtClustersDeLOperon "$Orf $Clust" } return $LesOrfsEtClustersDeLOperon } return "" } proc OperonClonage {Nom {Qui ""} {Quoi ""}} { if { ! [EstUnPAB $Nom]} { set Nom [NomDuAlias $Nom] } if { ! [EstUnPAB $Nom]} { return "" } set Operon [ExtraitInfo $Nom "Operon:"] if {$Operon==""} { return ""} if {$Qui ==""} { set Qui "GetOperon" } if {$Quoi==""} { set Quoi "GetSequence" } if {$Qui =="GetOperon"} { return [split $Operon " "]} foreach {G D F} [split $Operon " "] { if {$Qui==$G} { if {$Quoi=="GetStartEnd"} { return "$D $F" } if {$Quoi=="GetStart"} { return $D } if {$Quoi=="GetEnd"} { return $F } if {$Quoi=="GetSequence"} { set Seq [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nuctfa"]] return [string range "n$Seq" $D $F] } } } return "" } proc OperonNancy {{Qui ""} {Quoi ""}} { FaireLire "Ne plus relancer. Merci"; exit; #rR OperonNancy lit le seqs.txt et fournit les mhpEF mhpF mhpE global OperonNancy if {$Qui==""} { set Qui "ListOf"; set Quoi "keys"; } if {[info exists OperonNancy($Qui,$Quoi)]} { return $OperonNancy($Qui,$Quoi) } if {[info exists OperonNancy("EstCharge")]} { return "" } set OperonNancy("EstCharge") 1 set NancyDir "[RepertoireDuGenome]/atelier/OperonNancy" set FiSeqs "$NancyDir/seqs.txt" set OperonNancy(Directory,) $NancyDir foreach Ligne [LesLignesDuFichier $FiSeqs] { set Ligne [string trim $Ligne] if {$Ligne==""} { continue } if {[regexp {^ *mhp} $Ligne]} { if {[regexp {([0-9]+) *AA} $Ligne Match na]} { incr na scan $Ligne "%s" P if { ! [regexp {mhp(F|E)([a-z]+)} $P Match FE GE]} { FaireLire "Gloups on \n$Ligne" ; exit } if {$ge!=$GE} { FaireLire "$ge $GE on \n$Ligne" ; exit } set $FE "mhp$FE$GE" set Long($FE) $na if {$FE=="F"} { set F [set $FE] lappend OperonNancy(ListOf,F) $F set OperonNancy($GE,F) $F set nb $na*3 set db 0 set fb [expr $nb-1] set OperonNancy($F,nuc) [string range $OperonNancy($GE,nuc) $db $fb] set Courant $F } if {$FE=="E"} { set E [set $FE] lappend OperonNancy(ListOf,E) $E set OperonNancy($GE,E) $E set nb $na*3 set db [expr $nb-1] set OperonNancy($E,nuc) [string range $OperonNancy($GE,nuc) end-$db end] set Courant $E } continue } if { ! [regexp {mhpFE ([a-zA-z0-9 ]+)} $Ligne Match OS]} { FarireLire "Oups \n$Ligne"; exit } scan $OS "%s %s" g e set ge "[string tolower [string index $g 0]][string tolower [string index $e 0]]" if {[info exists DejaVu($ge) ]} { set ge "[string tolower [string index $g 0]][string tolower [string range $e 0 1]]" } set DejaVu($ge) $Ligne lappend OperonNancy(ListOf,OS) $OS lappend OperonNancy(ListOf,GE) $ge set OperonNancy($OS,ge) $ge set OperonNancy($ge,os) $OS set Courant "TwoNuc" continue } if {$Courant=="TwoNuc"} { regsub -all "X" $Ligne "N" SeqNuc ; set OperonNancy($ge,nuc) $SeqNuc; } if {$Courant!="TwoNuc"} { set OperonNancy($Courant,pro) $Ligne set ProFromNuc [SeqNucToSeqPro $OperonNancy($Courant,nuc)] if { ! [string equal -nocase $OperonNancy($Courant,pro) $ProFromNuc]} { FaireLire "$OperonNancy($Courant,pro)\n$ProFromNuc" } } } set OperonNancy(ListOf,keys) [lsort [array names OperonNancy]] lappend OperonNancy(ListOf,keys) "ListOf,keys" return [OperonNancy $Qui $Quoi] } proc OperonNancyCreateSequences {} { FaireLire "Ne plus relancer. Merci"; exit; cd [OperonNancy "Directory"] foreach OS [OperonNancy ListOf OS] { set GE [OperonNancy $OS ge] set Nuc2 [OperonNancy $GE nuc] set FE "mhpFE$GE" set F [OperonNancy $GE F] set E [OperonNancy $GE E] set NucF [OperonNancy $F nuc] set NucE [OperonNancy $E nuc] set dF 1 set fF [expr [string length $NucF] ] set dE [expr [string length $Nuc2]-[string length $NucE] + 1] set fE [expr [string length $Nuc2] ] set Entete2 "$FE $OS mhp operon coding for operonprot $F base $dF to $fF and operonprot $E base $dE to $fE" set EnteteF "$F $OS mhp protein F" set EnteteE "$E $OS mhp protein E" set Tfa2 [SequenceFormatTFA $Nuc2 $Entete2 "nucbrut"] set TfaF [SequenceFormatTFA $NucF $EnteteF "nucbrut"] set TfaE [SequenceFormatTFA $NucE $EnteteE "nucbrut"] lappend LesFichiers [Sauve $Tfa2 dans $FE.tfa] lappend LesFichiers [Sauve $TfaF dans $F.tfa] lappend LesFichiers [Sauve $TfaE dans $E.tfa] } return $LesFichiers } proc OperonNancyInforme {} { FaireLire "Ne plus relancer. Merci"; exit; foreach Nom [ListeDesPABs] { set FicNucTfa [GscopeFile $Nom "nuctfa"] if {[FileAbsent $FicNucTfa]} { continue } set Entete [EnteteDuFichierTFA $FicNucTfa] if { ! [regexp "operon coding for" $Entete]} { continue } set SeqNucOp "n[QueLaSequenceDuFichierTFA $FicNucTfa]" set Reste [StringSuivant "operon coding for" dans $Entete] set LesGDF {} set LesSeqPro {} while {[regexp {operonprot ([^ ]+) +base +([0-9]+) +to +([0-9]+)} $Reste Match Gene Deb Fin]} { regsub {operonprot ([^ ]+) +base +([0-9]+) +to +([0-9]+)} $Reste "" Reste lappend LesGDF $Gene $Deb $Fin set SeqNuc [string range $SeqNucOp $Deb $Fin] set SeqDep [QueLaSequenceDuFichierTFA "[OperonNancy Directory]/$Gene.tfa"] if { ! [string equal $SeqNuc $SeqDep]} { Espionne "$SeqNucOp\n$SeqNuc\n$SeqDep" FaireLire "$Nom $Gene something is wrong \n[string range $SeqNuc 0 44]\n[string range $SeqDep 0 44]" } set SeqPro [SeqNucToSeqPro $SeqNuc] lappend LesSeqPro $SeqPro } set AllSeqPro [join $LesSeqPro "XXXXXXXXXX"] set AllTfaPro [SequenceFormatTFA $AllSeqPro $Entete "protbrut"] Espionne $AllTfaPro Sauve $AllTfaPro dans [GscopeFile $Nom "prottfa"] set Info "Operon: [join $LesGDF " "]" InformeSansDemander $Nom $Info Espionne $Info } } proc OptionsDesProtocoles {args} { global TabOptionsDesProtocoles set Quoi [lindex $args 0] if {![info exists TabOptionsDesProtocoles(LesOptionsChoisis)] || $Quoi == "INI"} { set TabOptionsDesProtocoles(LesOptionsChoisis) {} set TabOptionsDesProtocoles(LesPossibilites) {} #####DEBUT DES OPTIONS######################################### set Option "Masking" lappend TabOptionsDesProtocoles(LesPossibilites) $Option lappend LaetitiaStandardProtocol $Option set Option "Masking & ReMasking" lappend TabOptionsDesProtocoles(LesPossibilites) $Option lappend LaetitiaStandardProtocol $Option set Option "Masking CheckUp" lappend TabOptionsDesProtocoles(LesPossibilites) $Option lappend LaetitiaStandardProtocol $Option set Option "BlastN Human" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set TabOptionsDesProtocoles($Option,Filter) T set Option "Human exonic map with the DNA clones" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,IdentityMin) 0.0 set TabOptionsDesProtocoles($Option,Var) 0.05 set TabOptionsDesProtocoles($Option,AvecBlastOuSansBlast) SansBlast set TabOptionsDesProtocoles($Option,SplitWithGap) Yes set TabOptionsDesProtocoles($Option,IdentityAlert) 0.95 set TabOptionsDesProtocoles($Option,TailleMin) 10 set Option "Location of DNA clones on Human genome" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set Option "Location of DNA clones on Human genome using the first blast hit" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set Option "BlastN Mouse" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set TabOptionsDesProtocoles($Option,Filter) T set Option "BlastX protein" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 500 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set TabOptionsDesProtocoles($Option,Filter) T set Option "BlastN genembl" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 500 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set TabOptionsDesProtocoles($Option,Filter) T set Option "BlastN mRNA" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set TabOptionsDesProtocoles($Option,LesOrganismes) {} set Option "BlastN EST" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 500 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set TabOptionsDesProtocoles($Option,Filter) T lappend LaetitiaStandardProtocol $Option set Option "EST Selection" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,AllOrgaOuJustMyOrga) JustMyOrga set TabOptionsDesProtocoles($Option,IdentityMin) 0.95 set TabOptionsDesProtocoles($Option,TailleAliMin) 50 lappend LaetitiaStandardProtocol $Option set Option "Protein searches according to mRNA and Protein searches" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set TabOptionsDesProtocoles($Option,IdentityMax) 0.95 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set TabOptionsDesProtocoles($Option,NbSubjectMax) 500 set Option "Protein searches according to contig searches" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set TabOptionsDesProtocoles($Option,Var) 0.05 set TabOptionsDesProtocoles($Option,ExpectMax) 0.001 set Option "PipeAlign BlastP -> Ballast -> MSF -> RASCAL -> CLUSTERING" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,ExpectMax) 10 set TabOptionsDesProtocoles($Option,NbSubjectMax) 1000 set TabOptionsDesProtocoles($Option,NbProteinMax) 150 set TabOptionsDesProtocoles($Option,NbPDBMax) 30 set Option "Descriptifs file" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set Option "Gene Ontology : IPO -> PPO -> MSO -> GPO" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.98 set TabOptionsDesProtocoles($Option,NorMDMin) 0.3 set TabOptionsDesProtocoles($Option,P) 0.8 set TabOptionsDesProtocoles($Option,F) 0.5 lappend LaetitiaStandardProtocol $Option set Option "Gene Ontology : File fiches/GeneOntology_{Method}" lappend TabOptionsDesProtocoles(LesPossibilites) $Option lappend LaetitiaStandardProtocol $Option set Option "KEGG" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.98 set TabOptionsDesProtocoles($Option,NorMDMin) 0.3 set Option "Domains" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.98 set TabOptionsDesProtocoles($Option,NorMDMin) 0.3 set TabOptionsDesProtocoles($Option,FractionDuDomaineMin) 0.75 set Option "Gene name" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NorMDMin) 0.3 set TabOptionsDesProtocoles($Option,IdentityMin) 0.98 set Option "Mean definition" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.98 set TabOptionsDesProtocoles($Option,NorMDMin) 0.3 set TabOptionsDesProtocoles($Option,Duree) 30000 set TabOptionsDesProtocoles($Option,NbIndividus) 20 set Option "TBlastN Human with the corresponding protein" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,Filter) T set Option "Human exonic map with the corresponding protein" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,IdentityMin) 0.0 set TabOptionsDesProtocoles($Option,Var) 0.05 set TabOptionsDesProtocoles($Option,AvecBlastOuSansBlast) SansBlast set TabOptionsDesProtocoles($Option,SplitWithGap) Yes set TabOptionsDesProtocoles($Option,IdentityAlert) 0.95 set TabOptionsDesProtocoles($Option,TailleMin) 10 set Option "Location of the corresponding protein on Human genome" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set Option "TBlastN Mouse with the corresponding protein" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,Filter) T set Option "Best protein and mRNA for each organism" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.98 set TabOptionsDesProtocoles($Option,IdentityStrict) 0.3 set Option "Best Human mRNA sequence TFA" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set Option "Best Mouse mRNA sequence TFA" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set Option "BlastN Human with the best Human mRNA" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,Filter) T set Option "Human exonic map with the best Human mRNA" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,IdentityMin) 0.0 set TabOptionsDesProtocoles($Option,Var) 0.05 set TabOptionsDesProtocoles($Option,AvecBlastOuSansBlast) SansBlast set TabOptionsDesProtocoles($Option,SplitWithGap) Yes set TabOptionsDesProtocoles($Option,IdentityAlert) 0.95 set TabOptionsDesProtocoles($Option,TailleMin) 10 set Option "Location of the best human mRNA on Human genome" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set Option "BlastN Mouse with the best Human mRNA" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,Filter) T set Option "Best Human protein sequence TFA" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set Option "TBlastN Human with the best Human protein" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,Filter) T set Option "Human exonic map with the best Human protein" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,IdentityMin) 0.0 set TabOptionsDesProtocoles($Option,Var) 0.05 set TabOptionsDesProtocoles($Option,AvecBlastOuSansBlast) SansBlast set TabOptionsDesProtocoles($Option,SplitWithGap) Yes set TabOptionsDesProtocoles($Option,IdentityAlert) 0.95 set TabOptionsDesProtocoles($Option,TailleMin) 10 set Option "TBlastN Mouse with the best Human protein" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,NbSubjectMax) 150 set TabOptionsDesProtocoles($Option,ExpectMax) 0.1 set TabOptionsDesProtocoles($Option,Filter) T set Option "Best Human genome location" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set Option "HTML file summary" lappend TabOptionsDesProtocoles(LesPossibilites) $Option set TabOptionsDesProtocoles($Option,IdentityMin) 0.8 set TabOptionsDesProtocoles($Option,IdentityMax) 0.95 #####FIN DES OPTIONS########################################### if {[PourWscope] || [OuiOuNon "Do you want to use Laetitia's standard protocol" 0]} { set LesPossibilitesChoisies $LaetitiaStandardProtocol } else { set LesPossibilitesChoisies [DrawEntreDeux [set TabOptionsDesProtocoles(LesPossibilites)]] } foreach Possibilite $LesPossibilitesChoisies { if {$Possibilite == "Protein searches according to mRNA and Protein"} { set AutrePoss "BlastN mRNA" if {![info exists TabOptionsDesProtocoles($AutrePoss)]} { lappend TabOptionsDesProtocoles(LesOptionsChoisis) $AutrePoss set TabOptionsDesProtocoles($AutrePoss) 1 } } lappend TabOptionsDesProtocoles(LesOptionsChoisis) $Possibilite set TabOptionsDesProtocoles($Possibilite) 1 } set TabOptionsDesProtocoles(Continue) 1 if {[set TabOptionsDesProtocoles(LesOptionsChoisis)] != {}} { if {![OuiOuNon "If some files exist. Do I keep them?"]} {set TabOptionsDesProtocoles(Continue) 0} foreach Option [set TabOptionsDesProtocoles(LesOptionsChoisis)] { set TabOptionsDesProtocoles($Option,Continue) [set TabOptionsDesProtocoles(Continue)] } } } set ARGS [join $args ","] if {[info exists TabOptionsDesProtocoles($ARGS)]} {return [set TabOptionsDesProtocoles($ARGS)]} return 0 } proc OptionsProtocoleAnnotation {{Quoi ""} args} { # OptionsProtocoleAnnotation ?""? -> initialise les options par défaut et laisse choisir # OptionsProtocoleAnnotation "ListeDesOptions" -> retourne la liste des options # OptionsProtocoleAnnotation "ChoisirLesOptions" -> permet de choisir les options retourne la liste # OptionsProtocoleAnnotation "LesOptionsChoisies" -> retourne la liste des options choisies # Si Quoi est égal à une option existante, retourne ou remplace un paramètre # "OptionsGlobales" est une option spéciale non sélectionnable qui sert à placer les options... globales # Ex : # OptionsProtocoleAnnotation $Option ?valeur? -> lancera l'option pendant le protocole si egal a 1 # OptionsProtocoleAnnotation $Option,xxx ?valeur? -> paramètre xxx de l'option global TabOptionsProtocoleAnnotation if {![info exists TabOptionsProtocoleAnnotation(ListeDesOptions)]} { set TabOptionsProtocoleAnnotation(ListeDesOptions) {} ## Debut initialisation parametres par defaut set Option "OptionsGlobales" set TabOptionsProtocoleAnnotation($Option,AvecGarde) 1 set TabOptionsProtocoleAnnotation($Option,AvecOuSansOrganismeEtudie) "" set Option "PipeAlign & MACSIMS" lappend TabOptionsProtocoleAnnotation(ListeDesOptions) $Option set TabOptionsProtocoleAnnotation($Option) 0 set Option "Annotation MACSIMS" lappend TabOptionsProtocoleAnnotation(ListeDesOptions) $Option set TabOptionsProtocoleAnnotation($Option) 0 set Option "Annotation EC commun" lappend TabOptionsProtocoleAnnotation(ListeDesOptions) $Option set TabOptionsProtocoleAnnotation($Option) 0 set Option "Annotation Definition" lappend TabOptionsProtocoleAnnotation(ListeDesOptions) $Option set TabOptionsProtocoleAnnotation($Option) 0 set Option "Annotation GOAnno" lappend TabOptionsProtocoleAnnotation(ListeDesOptions) $Option set TabOptionsProtocoleAnnotation($Option) 0 set Option "Annotation PFAM-A" lappend TabOptionsProtocoleAnnotation(ListeDesOptions) $Option set TabOptionsProtocoleAnnotation($Option) 0 ## Fin initialisation parametres par defaut return [OptionsProtocoleAnnotation "ChoisirLesOptions"] } if {$Quoi == ""} { return [OptionsProtocoleAnnotation "LesOptionsChoisies"] } if {$Quoi == "ChoisirLesOptions"} { set TabOptionsProtocoleAnnotation(LesOptionsChoisies) {} while {[llength $TabOptionsProtocoleAnnotation(LesOptionsChoisies)] == 0} { set TabOptionsProtocoleAnnotation(LesOptionsChoisies) [DrawEntreDeux $TabOptionsProtocoleAnnotation(ListeDesOptions)] } foreach Option $TabOptionsProtocoleAnnotation(ListeDesOptions) { if {[lsearch -exact $TabOptionsProtocoleAnnotation(LesOptionsChoisies) $Option] != -1} { set TabOptionsProtocoleAnnotation($Option) 1 } else { set TabOptionsProtocoleAnnotation($Option) 0 } } return $TabOptionsProtocoleAnnotation(LesOptionsChoisies) } if {$Quoi == "ListeDesOptions"} { return $TabOptionsProtocoleAnnotation($Quoi) } if {$Quoi == "LesOptionsChoisies"} { return $TabOptionsProtocoleAnnotation($Quoi) } if {[info exists TabOptionsProtocoleAnnotation($Quoi)]} { if {[llength $args] != 0} { set TabOptionsProtocoleAnnotation($Quoi) [lindex $args 0] } return $TabOptionsProtocoleAnnotation($Quoi) } Espionne "Option ou parametre inconnu" exit 1 } proc OptionsSpeciesAutomatique {Organisme {NbPhylumEnCommunMin 5}} { if {$Organisme == ""} {return ""} if {[string equal -nocase $Organisme "mus" ]} {return "mus"} if {[string equal -nocase $Organisme "cow" ]} {return "cow"} if {[string equal -nocase $Organisme "arabidopsis" ]} {return "arabidopsis"} if {[string equal -nocase $Organisme "elegans" ]} {return "elegans"} if {[string equal -nocase $Organisme "drosophila" ]} {return "drosophila"} if {[string equal -nocase $Organisme "danio.lib" ]} {return "danio.lib"} set OptionSpecies "None" if {[string equal -nocase $Organisme "Homo sapiens" ]} {return "" } if {[string equal -nocase $Organisme "Human" ]} {return "" } if {[string equal -nocase $Organisme "Mus musculus" ]} {return "mus" } if {[string equal -nocase $Organisme "House mouse" ]} {return "mus" } if {[string equal -nocase $Organisme "Mouse" ]} {return "mus" } if {[string equal -nocase $Organisme "Rattus norvegicus" ]} {return "mus" } if {[regexp -nocase "^Mus " $Organisme ]} {return "mus" } if {[regexp -nocase "^Rattus " $Organisme ]} {return "mus" } if {[string equal -nocase $Organisme "Arabidopsis thaliana" ]} {return "arabidopsis"} if {[string equal -nocase $Organisme "Arabidopsis lyrata" ]} {return "arabidopsis"} if {[string equal -nocase $Organisme "Bos taurus" ]} {return "cow" } if {[string equal -nocase $Organisme "Caenorhabditis elegans"]} {return "elegans" } if {[regexp -nocase "Drosophila" $Organisme ]} {return "drosophila" } if {[regexp -nocase "danio" $Organisme ]} {return "danio.lib" } set LesNoeudsDesOptionsSpecies [list [list "Homo sapiens" "" ] [list "Rodentia" "mus" ] [list "Danio" "danio.lib" ] [list "Drosophila" "drosophila" ] [list "Caenorhabditis" "elegans" ] [list "Bos taurus" "cow" ] [list "Mammalia" "mammal" ] [list "Arabidopsis" "arabidopsis"]] set LesPhylums [lindex [InterrogeClassificationTaxonomique $Organisme LesPhylums] 0] Espionne $LesPhylums set NbPhylumEnCommunMax 0 foreach LeSpecie $LesNoeudsDesOptionsSpecies { set Specie [lindex $LeSpecie 0] set Option [lindex $LeSpecie 1] set LesPhylumsDesSpecies [lindex [InterrogeClassificationTaxonomique $Specie LesPhylums] 0] set NbPhylumEnCommun 0 foreach Phylum $LesPhylums Phylum2 $LesPhylumsDesSpecies { if {$Phylum != $Phylum2} {break} incr NbPhylumEnCommun } Espionne "$Specie $NbPhylumEnCommun" Espionne $LesPhylumsDesSpecies if {$NbPhylumEnCommunMax < $NbPhylumEnCommun} { set NbPhylumEnCommunMax $NbPhylumEnCommun set OptionSpecies $Option } } Espionne "$OptionSpecies $NbPhylumEnCommunMin $NbPhylumEnCommunMax" if {$NbPhylumEnCommunMax < $NbPhylumEnCommunMin} {return "None"} return $OptionSpecies } proc OrInformeAvecDaedalusHitPourTousganismeDuPABPourTous {{Source ""}} { if {$Source=="DaedalusHit" || ($Source=="" && [OuiOuNon "Do I use blastp DaedalusHits to determine the organism ?"])} { return [InformeAvecDaedalusHitPourTous "OS_OC"] } if {$Source=="BIdDuNuctfa" || ($Source=="" && [OuiOuNon "Do I use the BId from nuctfa/[PreFixe]xxxx to determine the organism ?"])} { return [OrganismeDuBIdCiteDansNuctfaPourTous] } if {$Source=="BlastP" || ($Source=="" && [OuiOuNon "Do I search for closest hit in Blastp to determine the organism of each Box?"])} { return [PlusProcheOrganismeDuBlastPourTous] } if {$Source=="Narcisse" || ($Source=="" && [OuiOuNon "Do I use the organism I'll find in Narcisse ?"])} { return [PlusProcheOrganismeDuNarcissePourTous] } return "" } proc Ordali {{NomOuFichier ""} {FichierOrigine ""} {EnExec ""} {OptionsOrdali ""} {ForceXml ""}} { global RepertoireDuGenome global OrdaliDejaCharge if {[string equal -nocase $FichierOrigine "ForceXml"]} { set ForceXml "ForceXml" set FichierOrigine $NomOuFichier } set ForceXml [string equal -nocase $ForceXml "ForceXml"] if {$EnExec==""} { global OrdaliEnExec if {[info exists OrdaliEnExec]} { set EnExec $OrdaliEnExec } else { set EnExec 0 } } if {[regexp "EnExec" $EnExec]} { set EnExec 1 } if {[regexp "EnProc" $EnExec]} { set EnExec 0 } set Nom [file tail $NomOuFichier] if {0 && [regexp -nocase "xml" $NomOuFichier]} { set ForceXml 1 } if {$ForceXml} { if { ! [regexp "/" $NomOuFichier] && [EstUnPAB $Nom]} { set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom" if { ! [file exists $FichierXml]} { append FichierXml ".xml" } } else { set FichierXml $NomOuFichier } if {[file exists $FichierXml]} { set Commande "tcsh -c \"setordalilm ; ordali -xml $FichierXml $OptionsOrdali\"" Espionne "Je vais faire exec $Commande &" set Retour [eval exec $Commande &] return $Retour } FaireLire "I can't find the XML file associated to $NomOuFichier. Sorry." return "" } if {[EstUnPAB $NomOuFichier]} { set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom" if { ! [file exists $FichierXml]} { append FichierXml ".xml" } if {[file exists $FichierXml]} { set Commande "tcsh -c \"setordalilm; ordali -xml $FichierXml $OptionsOrdali\"" Espionne "Je vais faire exec $Commande &" set Retour [eval exec $Commande &] return $Retour } } if {$OptionsOrdali==""} { set OptionsOrdali "-Group secator -Run" } if {0 && ($FichierOrigine!="" || [regexp {msf[^/]*/} $FichierOrigine])} { set FichierMSF $FichierOrigine } else { set FichierMSF $NomOuFichier if { $Nom!="" && ![EstUnPAB $Nom] && [file exists $NomOuFichier]} { set FichierMSF $NomOuFichier } if { $Nom!="" && [EstUnPAB $Nom] && [file exists "$RepertoireDuGenome/msf/$Nom"]} { set FichierMSF "$RepertoireDuGenome/msf/$Nom" } } if {$EnExec} { if {[file exists $FichierMSF]} { set RepPourOrdali [file dirname $FichierMSF] set FicPourOrdali [file tail $FichierMSF] NousAllonsAuBoulot $RepPourOrdali set Commande "tcsh -c \"setordalilm; ordali -MSF $FicPourOrdali $OptionsOrdali\"" set Retour [eval exec $Commande &] OnRevientDuBoulot return $Retour } else { set Commande "tcsh -c \"setordalilm; ordali\"" return [eval exec $Commande &] } } set Fenetre [NomDe ordali] if { ! [info exists OrdaliDejaCharge]} { set OrdaliDejaCharge 1 LesDefauts } # if {$FichierMSF!=""} { InterpreteLaLigneDeCommande "-MSF $FichierMSF -NoCheckSeq $OptionSecator $OptionRun" } if {$FichierMSF!=""} { InterpreteLaLigneDeCommande "-MSF $FichierMSF $OptionsOrdali" } set FenetreOrdali [InitialiseFenetreOrdali slave $Fenetre] return $FenetreOrdali } proc OrdaliDeLaSelection {Page Selection {NomDuFichierOrigine ""}} { set Reste [AfficheRognure $Page $Selection "Retour" $NomDuFichierOrigine "In"] OrdaliDuTexteMSF $Reste $NomDuFichierOrigine -viewer return $Reste } proc OrdaliDuTexteMSF {MSF {FichierOrigine ""} {OptionsOrdali ""}} { set FichierMSF [Sauve $MSF dans "[TmpFile "" "" "_"].msf"] return [Ordali $FichierMSF $FichierOrigine "EnExec" $OptionsOrdali] } proc OrdaliMm {} { global VariablesAuDepart foreach Variable [info globals] { global $Variable if {[regexp "Glossaire" $Variable]} { continue } if {$Variable=="VariablesAuDepart"} { continue } if { ! [info exists $Variable]} { continue } # if {[lsearch $VariablesAuDepart $Variable] != -1} {continue} if {[array exists $Variable]} { lappend LesGlobal [PaqArray $Variable $Variable] } else { lappend LesGlobal [PaqListe $Variable [set $Variable]] } unset $Variable } set LesV [AffecteLesVariablesDeLaListe $LesGlobal] foreach V $LesV { global $V if {[array exists $V]} { Espionne "$V [array get $V]" } else { Espionne "$V [set $V]" } } } proc Ordali_Vrp {} { global Vrp NomTextSeq NomNomSeq NomSeqSel LNDG LNOrdali LSOrdali if {! [ModeI]} {return} if {[TypeAli] eq "pasdali"} {return} if {! [info exists NomSeqSel] || ! [llength $NomSeqSel]} { set Lnoms $LNOrdali set Lseqs $LSOrdali } else { set Lnoms [LesNomsDesSeqsSel] set Lseqs [LesSeqsDesSeqsSel] } InitialiseVrp ReadHydrophb $Vrp(DataAA) # Initialisation du tableau VRP # Bidouille pour caser les Vrp des groupes # On les mets toujours en debut de liste # Ils ont les indices 0 -> Nbg set i 0 foreach g $LNDG { if {$g eq "grise" || $g eq "bidon"} {break} if {$g eq "GroupeToutLeMonde"} {set g "All"} set Vrp(Name,$i) $g set Vrp(Name,$g) $i lappend Vrp(NameList) $g incr i } set IStart $i foreach n $Lnoms s $Lseqs { if {$n eq ""} {continue} set Vrp(Name,$i) $n set Vrp(Name,$n) $i set Vrp(Seq,$i) $s lappend Vrp(NameList) $n incr i } set Vrp(NbSeq) $i set Vrp(seqSelName) $Vrp(Name,$IStart) FenetreVrp GenVrpFromData [set Vrp(Seq,$IStart)] DrawVrp return } proc OrdalieHelpOnLine {} { puts " " puts "Usage :" puts "ordali ?option value? ?option value? ..." puts "" puts "Beware ! The input alignment file, if given, should always be the FIRST argument !" puts "" puts "Ordali on-line options are :" puts "" puts " -precompute <0|1> : precompute clustering and conservation for each PFAM domain (default 1)" puts " -threshold x : Set conservation threshold level. x should be set between 51 and 100" puts " -batch <0|1> : run Ordali without windows and exit when finished (default 0)" puts " " return } proc OrderedClades {Clades {GetWhat ""}} { #rR on trie les Cladespour avoir les plus grosses situées après les plus petites contenues dans les grosses. if {[regexp "," $Clades]} { set Clades [split $Clades ","] } set LesEmpty {} set LesOX {} foreach Clade $Clades { set OX [Tax $Clade TaxId] if {$OX==""} { lappend LesEmpty $Clade ; continue } set CladeOf($OX) $Clade lappend LesOX $OX } #rR ne sert plus ...il suffit de trier bêtement les classes #set LesOrderedOX [lsort -command CompareCladeAncestor $LesOX] foreach OX $LesOX { set Class [TaxClass $OX] lappend LesOrderedClass $Class set OXDeLaClass($Class) $OX } set LesOrderedClass [lsort -decreasing $LesOrderedClass] set LesOrderedOX {} foreach Class $LesOrderedClass { lappend LesOrderedOX $OXDeLaClass($Class) } set LesOrdered {} foreach OX $LesOrderedOX { lappend LesOrdered $CladeOf($OX) } foreach Empty $LesEmpty { lappend LesOrdered $Empty } if {$GetWhat=="JoinedList"} { return [join $LesOrdered ","] } return $LesOrdered } proc Ordonateur {LisBox Action} { if {$Action=="KillAll"} { set LesPasses [$LisBox get 0 end] $LisBox delete 0 end return $LesPasses } set LesPasses {} set LesI [$LisBox curselection] if {$Action=="Up"} { set LesI $LesI } else { set LesI [lsort -decreasing $LesI] } foreach I $LesI { set Passe [$LisBox get $I] lappend LesPasses $Passe $LisBox delete $I if {$Action=="Kill"} { continue } if {$Action=="Up"} { set D [expr $I-1] } if {$Action=="Down"} { set D [expr $I+1] } $LisBox insert $D $Passe $LisBox selection set $D } return $LesPasses } proc OrdonnanceBlastong {} { # On teste si tout est fini et das ce cas on supprime le todo de l'ordonnanceur par deleteall) # Sinon # On dépose un qds OI Blastong # bref je sais plus comment on fait :( } proc OrdonneLesFils {AId n} { global Abr set t [set Abr(Arbre,$AId)] if {[$t isleaf $n]} {return} set Le [$t children $n] foreach e $Le { OrdonneLesFils $AId $e } if {$n eq "root"} {return} lassign $Le e1 e2 set LM1 [AnglesMinMaxDe $AId $n $e1] lassign $LM1 A1 tmp AP1 set LM2 [AnglesMinMaxDe $AId $n $e2] lassign $LM1 A2 tmp AP2 set AAP1 [expr {abs($AP1-$A1)}] set AAP1 [expr {$AAP1>[Pi]?[2Pi]-$AAP1:$AAP1}] set AAP2 [expr {abs($AP2-$A1)}] set AAP2 [expr {$AAP2>[Pi]?[2Pi]-$AAP2:$AAP2}] if {$AAP1+$AAP2 > [Pi]} {set obtu 1} {set obtu 0} if {abs($A1-$A2)>[Pi]} { if {! $obtu} { if {$A1<$A2} { $t set $n NdLeft $e1 $t set $n NdRight $e2 } else { $t set $n NdLeft $e2 $t set $n NdRight $e1 } } else { if {$A1<$A2} { $t set $n NdLeft $e2 $t set $n NdRight $e1 } else { $t set $n NdLeft $e1 $t set $n NdRight $e2 } } } else { if { ! $obtu} { if {$A1 > $A2} { $t set $n NdLeft $e1 $t set $n NdRight $e2 } else { $t set $n NdLeft $e2 $t set $n NdRight $e1 } } else { if {$A1 > $A2} { $t set $n NdLeft $e2 $t set $n NdRight $e1 } else { $t set $n NdLeft $e1 $t set $n NdRight $e2 } } } return } proc OrdonneSelonLePlusLong {LesJumeaux} { Wup "Retourne la liste contenant les Jumeaux et dont le premier est le plus long en terme de sequence" global RepDesSequences set Ref 0 set ListeTriee "" foreach PAB $LesJumeaux { set FichierTFA "$RepDesSequences/$PAB" set Taille [string length [QueLaSequenceDuFichierTFA $FichierTFA]] if {$Taille >= $Ref} {set Ref $Taille;set LePlusLong $PAB} } foreach PAB $LesJumeaux { if {$PAB==$LePlusLong} {continue} lappend ListeTriee $PAB } return [linsert $ListeTriee 0 $LePlusLong] } proc OrdonneSelonLesBanques {LesAccess} { Wup "Classe les proteines en fonction de leur appartenance a Sw -- Sptrembl -- Sptnew et du plus au moins long" set LesAccSW "" set LesAccSPT "" set LesAccNew "" set LesInconnus "" global RepDesSequences #Espionne ">>Start $LesAccess" foreach PAB $LesAccess { set FileTFA "$RepDesSequences/$PAB" if {[file exists $FileTFA]} { set Acc [AccessDuTFADeLaProteine $FileTFA] } else {set Acc $PAB} set Tab($PAB) $Acc if {[info exists Tab($Acc)]} { lappend Tab($Acc) $PAB } else {set Tab($Acc) $PAB} #Espionne "$PAB -- $Acc" if { [EstUnAccessDeQuelleBanque $Acc swissprot]} { lappend LesAccSW $Acc } elseif {[EstUnAccessDeQuelleBanque $Acc sptrembl]} { lappend LesAccSPT $Acc } elseif {[EstUnAccessDeQuelleBanque $Acc sptnew]} { lappend LesAccNew $Acc } else { lappend LesInconnus $Acc Espionne "$PAB $Acc Probleme acc inconnus" } } set LesAccSW [lsort -unique $LesAccSW] set LesAccSPT [lsort -unique $LesAccSPT] set LesAccNew [lsort -unique $LesAccNew] set LesInconnus [lsort -unique $LesInconnus] #Espionne "SW $LesAccSW -- SPT $LesAccSPT -- NEW $LesAccNew -- INC $LesInconnus" set ListeFinale "" set VraieListeFinale "" foreach ListeDAcc [list $LesAccSW $LesAccSPT $LesAccNew] { set MaListe "" foreach Acc $ListeDAcc { set Taille [lindex [DefDeAcc $Acc protein "Taille"] 1] #Espionne "$Acc $Taille" lappend MaListe [list $Acc $Taille] } set MaListe [lsort -decreasing -integer -index 1 $MaListe] set ListeFinale [concat $ListeFinale $MaListe] } foreach AccTaille $ListeFinale { set Access [lindex $AccTaille 0] set PABDeAccess [set Tab($Access)] foreach PAB $PABDeAccess { lappend VraieListeFinale $PAB #lappend VraieListeFinale [set Tab($Access)] #lappend VraieListeFinale [lindex $AccTaille 0] } } foreach AccI $LesInconnus { set PABDeAccess [set Tab($AccI)] foreach PAB $PABDeAccess { lappend VraieListeFinale $PAB } } return $VraieListeFinale } proc OrdrePourGif {args} { global LesOrdresPourGif global FillPourGif OutlinePourGif Wup "The 'create rectangle' ( line, arc', etc.) are stored in LesOrdresPourGif" Wup " the 'find withtag' statement return Nom" Wup " the itemconfigure statement stores the colors in FillPourGif..." set OrdreComplet $args set Ordre [lindex $OrdreComplet 0] set Texte [join $OrdreComplet " "] if {$Ordre == "find"} { set SousOrdre [lindex $OrdreComplet 1] if {$SousOrdre == "withtag"} { set Nom [lindex $OrdreComplet 2] if {[YaPABouTROUouTRNAouARNenDebutDe $Nom]} { return $Nom } } } if {$Ordre == "coords"} { if {[regexp -nocase -indices {create [a-z]+} $Texte Indices]} { scan $Indices "%d %d" d f set Suite [string range $Texte [incr f] end] set d end if {[regexp -nocase -indices -- {( | \-)[a-z]+} $Suite Indices]} { scan $Indices "%d %d" d f incr d -1 } set Coordonnees [string range $Suite 0 $d] return $Coordonnees } return "0 0 1 1" } if { ! [regexp "^create|^itemconfigure|^xview" $Ordre]} { return $OrdreComplet} if {$Ordre=="itemconfigure"} { set CFill "white" set COutline "black" scan $Texte "%s %s %s %s %s %s" Ordre Nom Fill CFill Outline COutline if { ! [YaPABouTROUouTRNAouARNenDebutDe $Nom]} { return $OrdreComplet} if {$Fill != "-fill"} { return $OrdreComplet } set FillPourGif($Nom) $CFill set OutlinePourGif($Nom) $COutline return $OrdreComplet } lappend LesOrdresPourGif $OrdreComplet return $OrdreComplet } proc OreilleQuestionneur {Canal} { global ReponseDuSavant set Reponse [read -nonewline $Canal] set ReponseDuSavant($Canal) $Reponse return } proc OrfWithStop {} { foreach Nom [ListeDesPABs] { set Seq [QueLaSequenceDuFichierTFA [GscopeFile $Nom "prottfa"]] if { ! [regexp "X" $Seq]} { continue } lappend LesBad $Nom } AfficheListe $LesBad } proc OrgApprochant {Genre Espece} { if {[regexp -nocase "^sacc" $Genre]} { set Genre "Schizosacc" } set LesOrgApprochants {} set LaCommandeOrgApprochantExiste 1 if {$LaCommandeOrgApprochantExiste} { catch {set LesOrgApprochants [split [eval exec orgapprochant $Genre $Espece] "\n"]} } else { foreach Texte [Glossaire "ListOf" "Complet"] { scan $Texte "%s %s" Genre Espece if {[regexp -nocase "^$Gen" $Genre] && [regexp -nocase "^$Esp" $Espece]} { set Organisme "$Genre $Espece" lappend LesOrgApprochants $Organisme } } } if {[llength $LesOrgApprochants] == 1} { return [lindex $LesOrgApprochants 0]} if {0 && [llength $LesOrgApprochants] > 1} { foreach Organisme $LesOrgApprochants { scan $Organisme "%s %s" G E if {[regexp -nocase "^$Genre" $G] && [regexp -nocase "^$Espece" $E]} { return $Organisme } } } while {[llength $LesOrgApprochants] != 1} { # set Organisme "$Genre $Espece" set Organisme [ChoixParmi [concat [list "$Genre $Espece" "... other" "Unknown unknown"] $LesOrgApprochants]] if {$Organisme=="... other"} { set Organisme [Entre "$Genre $Espece"] } if {$Organisme==""} { set Organisme "Unknown unknown" } set LesOrgApprochants [list $Organisme] } return [lindex $LesOrgApprochants 0] } proc OrgDuGb {AC} { set Commande2 "getz \"\\\[genbankfull-acc:$AC\\\]\" \-vf org" set GetzOut2 [eval exec $Commande2] if {$GetzOut2 == ""} {puts "attention pas fichesGB"; exit} set RefLu2 "" set GenreLu2 "" set EspeceLu2 "" scan $GetzOut2 "%s %s %s" RefLu2 GenreLu2 EspeceLu2 #puts "Ac1=$AC=>organisme=$GenreLu2 $EspeceLu2" return $GenreLu2 } proc OrgDuNm {AC} { set Commande1 "getz \"\\\[refseq-acc:$AC\\\]\" \-vf org" set GetzOut1 [eval exec $Commande1] if {$GetzOut1 == ""} {puts "attention pas fichesNM"; exit} set RefLu1 "" set GenreLu1 "" set EspeceLu1 "" scan $GetzOut1 "%s %s %s" RefLu1 GenreLu1 EspeceLu1 #puts "Ac1=$AC=>organisme=$GenreLu1 $EspeceLu1" return $GenreLu1 } proc OrgDuNmOuGb {AC} { if { [regexp {^NM_} $AC] || [regexp {^XM_} $AC] || [regexp {^NR_} $AC] } { set Commande "getz \"\\\[refseq-acc:$AC\\\]\" \-vf org" set GetzOut [eval exec $Commande] } else { set Commande "getz \"\\\[genbankfull-acc:$AC\\\]\" \-vf org" set GetzOut [eval exec $Commande] } if {$GetzOut == ""} { #Espionne "$AC attention pas fichesNmouGb" return "" } set RefLu "" set GenreLu "" set EspeceLu "" scan $GetzOut "%s %s %s" RefLu GenreLu EspeceLu #Espionne "Ac1=$AC=>organisme=$GenreLu $EspeceLu" set Orga $GenreLu-$EspeceLu return $Orga # return $GenreLu } proc OrgDuNmOuGb_AEffacer {AC} { if { [regexp {^NM_} $AC] } { set Commande "getz \"\\\[refseq-acc:$AC\\\]\" \-vf org" set GetzOut [eval exec $Commande] } else { set Commande "getz \"\\\[genbankfull-acc:$AC\\\]\" \-vf org" set GetzOut [eval exec $Commande] } if {$GetzOut == ""} {puts "attention pas fichesNmouGb"; exit} set RefLu "" set GenreLu "" set EspeceLu "" scan $GetzOut "%s %s %s" RefLu GenreLu EspeceLu #puts "Ac1=$AC=>organisme=$GenreLu $EspeceLu" set Orga $GenreLu-$EspeceLu return $Orga # return $GenreLu } proc OrgDuProt {AC} { set Commande "getz \"\\\[protein-acc:$AC\\\]\" \-vf org" set GetzOut [eval exec $Commande] if { $GetzOut == "" } { set GenreLu "" return $GenreLu } set Lu "" set GenreLu "" set EspeceLu "" scan $GetzOut "%s %s %s" Lu GenreLu EspeceLu #Espionne "Ac3=$AC=>organisme=$GenreLu $EspeceLu" return $GenreLu } proc OrgDuProt_AEffacer {AC} { set Commande "getz \"\\\[protein-acc:$AC\\\]\" \-vf org" set GetzOut [eval exec $Commande] if { $GetzOut == "" } { set GenreLu "" return $GenreLu exit } set Lu "" set GenreLu "" set EspeceLu "" scan $GetzOut "%s %s %s" Lu GenreLu EspeceLu #puts "Ac3=$AC=>organisme=$GenreLu $EspeceLu" return $GenreLu } proc OrgPourCiona {} { set OS [NotreOS] set OC [OCduOS $OS] set OSOC "OS $OS.\nOC $OC" foreach Nom [ListeDesPABs] { set F "[RepertoireDuGenome]/protembl/$Nom" set Texte [ContenuDuFichier $F] regsub "CC " $Texte "$OSOC\nCC " Texte Sauve $Texte dans $F } exit } proc OrgaDes90 {} { set poulet 0; set hom 0; set souris 0; set rat 0; set vide 0; set autre 0 set I 0; foreach GI [InterrogeListTau ListOf GI] { incr I set Access [InterrogeSortieNcbi $GI Access] set org [InterrogeSortieNcbi $GI Orga] #Espionne "$GI $Access $org" if {$org == "Gallus gallus"} { #Espionne "$GI $Access $org" incr poulet } elseif {$org == "Homo sapiens"} { incr hom Espionne "$GI $Access $org" } elseif {$org == "Mus musculus"} { incr souris #Espionne "$GI $Access $org" } elseif {$org == "Rattus norvegicus"} { incr rat #Espionne "$GI $Access $org" } elseif {$org == ""} { incr vide #Espionne "$GI $Access $org" } else { incr autre #Espionne "$GI $Access $org" } } Espionne "poulet $poulet" Espionne "hom $hom" Espionne "souris $souris" Espionne "rat $rat" Espionne "vide $vide" Espionne "autre $autre" } proc OrgaDuAccess {Access {Champ Complet} {BanqueId ""}} { global QuidSeqEstDisponible # set Orga [BirdWeb UNIPROT $Access OS] if { ! [regexp -nocase {[a-z0-9]} $Access]} { return [Glossaire "" $Champ] } if {[info exists QuidSeqEstDisponible] && $QuidSeqEstDisponible} { set ACCESS [string toupper $Access] if {[regexp "PFOK|PFUR" $ACCESS]} { set OS "Pyrococcus furiosus" } elseif {[regexp {^PAE[0-9]{4}} $ACCESS]} { set OS "Pyrobaculum aerophilum" } elseif {[regexp "^TACI" $ACCESS]} { set OS "Thermoplasma acidophilum" } elseif {[regexp "^PYAB" $ACCESS]} { set OS "Pyrococcus abyssi" } else { set OS [QuestionDeScience "ouragan:25000:QuidSeq" "QuidOSOfAC $ACCESS"] } if {$OS!=""} { set Orga [Glossaire $OS $Champ] return $Orga } } set OS [ChampDuDescriptif [LeDescriptif $Access] OS] if {$OS!=""} { return [Glossaire $OS $Champ] } if {$BanqueId==""} { set BanqueId $Access regsub -nocase {[a-z]+:} $BanqueId "" Access } set LesLignesEMBL [LaSequenceDesBanques $BanqueId $Access AccessOK "OnVeutEMBL"] if {$LesLignesEMBL!=""} { set DE "" foreach Ligne $LesLignesEMBL { if {[regexp "^DE" $Ligne]} { regsub "^DE " $Ligne "" InfoDE append DE " $InfoDE" } if {[regexp "^OS" $Ligne]} { set lili [split [string trim [string range $Ligne 2 end]] " "] set Genre [lindex $lili 0] regsub {[^A-Za-z]} [lindex $lili 1] "" Espece set Organisme "$Genre $Espece" break } } if {[info exists Organisme]} { set Glo [Glossaire $Organisme $Champ] if {$Glo!=""} { return $Glo } return [OrganismeNormalise $Organisme $Champ] } if {[regexp {\[([^\]]+)]} $DE Match OS]} { set G ""; set E "" scan $OS "%s %s" G E if {$E!=""} { set Organisme "$G $E" } set Glo [Glossaire $Organisme $Champ] if {$Glo!=""} { return $Glo } return [OrganismeNormalise $Organisme $Champ] } } return [Glossaire "" $Champ] } proc OrgaDuDescriptif {Access Nom} { global RepertoireDuGenome global OrgaDuDescriptif if {[info exists OrgaDuDescriptif($Access)]} { return [set OrgaDuDescriptif($Access)] } if {[info exists OrgaDuDescriptif($Nom,"EstCharge")]} { return "" } if {[info exists OrgaDuDescriptif]} { unset OrgaDuDescriptif } set OrgaDuDescriptif($Nom,"EstCharge") 1 set FichierDescriptif "$RepertoireDuGenome/descriptifs/$Nom" if { ! [file exists $FichierDescriptif]} { return "coucou" } foreach Ligne [LesLignesDuFichier $FichierDescriptif] { ScanLaListe [split $Ligne "="] AC Reste ScanLaListe [split $Ligne " "] Bidon OSGenre Espece regsub "OS\:" $OSGenre "" Genre set Organisme "$Genre $Espece" set OrgaDuDescriptif($AC) $Organisme } if {[info exists OrgaDuDescriptif($Access)]} { return [set OrgaDuDescriptif($Access)] } else { return "" } } proc OrgaDuFetcheAccess {Access} { global AccessDejaVus OrgaDejaVus if { ! [info exists AccessDejaVus]} { set AccessDejaVus {} } if {[regexp ":" $Access]} { set Orga [OrganismeDeLaLigneTBlastN $Access] if { $Orga != "Inconnu inconnu"} { return $Orga } } set Ind [lsearch -exact $AccessDejaVus $Access] if { $Ind == -1 } { foreach Ligne [split [Fetche $Access] "\n"] { if [regexp "^OS" $Ligne] { set lili [split [string trim [string range $Ligne 2 end]] " "] set Genre [lindex $lili 0] regsub {[^A-Za-z]} [lindex $lili 1] "" Espece set Organisme "$Genre $Espece" break } } if {[info exists Organisme]} { set Orga [Glossaire $Organisme Court] } else { set Orga "Inconnu" } lappend AccessDejaVus $Access lappend OrgaDejaVus $Orga return $Orga } else { return [lindex $OrgaDejaVus $Ind] } } proc OrgaEssai {Nom} { Espionne $Nom set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" if {! [file exists $Fichier]} {return} set FichierSortie "[RepertoireDuGenome]/fiches/tubgroupe" set FichierSortie1 "[RepertoireDuGenome]/fiches/tub" set Leon "[RepertoireDuGenome]/leon/$Nom" set FichierId "[RepertoireDuGenome]/leon/$Nom.Id" set Commande "/home/julie/MACSIM_jean/ref_id" exec $Commande $Leon $Nom > $FichierId ParseMACSIMS $Fichier macsims set SequencesDuGroupe $macsims(Groupe,$macsims($Nom,Groupe)) set ToutesLesSequences $macsims(Noms) set JaiTrouve 0 set Liste {} foreach SequenceGroupe $SequencesDuGroupe { set OrganismeGroupe $macsims($SequenceGroupe,Organisme) if {[regexp "Mycobacterium tuberculosis" $OrganismeGroupe]} { foreach Ligne [LesLignesDuFichier $FichierId] { scan $Ligne "%s %s" A B if {$SequenceGroupe == $A} { set C $B } } set JaiTrouve 1 lappend Liste "$SequenceGroupe;$C" } } if {$JaiTrouve} { set Liste [join $Liste " "] AppendAuFichier $FichierSortie "$Nom : $Liste" } if {! $JaiTrouve} { set Liste {} foreach Sequence $ToutesLesSequences { set Organisme $macsims($Sequence,Organisme) if {[regexp "Mycobacterium tuberculosis" $Organisme]} { foreach Ligne [LesLignesDuFichier $FichierId] { scan $Ligne "%s %s" D E if {$Sequence == $D} { set F $E } } lappend Liste "$Sequence;$F" } } if {$Liste == ""} {return} set Liste [join $Liste " "] AppendAuFichier $FichierSortie1 "$Nom : $Liste" } } proc OrgaEssai2 {} { set Fichier "[RepertoireDuGenome]/fiches/tubgroupe" set FichierSortie "[RepertoireDuGenome]/fiches/tubgroupe2" foreach Ligne [LesLignesDuFichier $Fichier] { set IdMax 0 set AccessMax 0 scan $Ligne "%s" Nom set LesAccessId [StringSuivant "$Nom : " dans $Ligne] foreach AccessId [split $LesAccessId " "] { regsub ";" $AccessId " " AccessId scan $AccessId "%s %s" Access Id if {$Id > $IdMax} { set IdMax $Id set AccessMax $Access } } Espionne "$Nom $AccessMax $IdMax" AppendAuFichier $FichierSortie "$Nom $AccessMax $IdMax" } } proc OrgaEssai3 {} { set Fichier "[RepertoireDuGenome]/fiches/tub" set FichierSortie "[RepertoireDuGenome]/fiches/tub2" foreach Ligne [LesLignesDuFichier $Fichier] { set IdMax 0 set AccessMax 0 scan $Ligne "%s" Nom set LesAccessId [StringSuivant "$Nom : " dans $Ligne] foreach AccessId [split $LesAccessId " "] { regsub ";" $AccessId " " AccessId scan $AccessId "%s %s" Access Id if {$Id > $IdMax} { set IdMax $Id set AccessMax $Access } } Espionne "$Nom $AccessMax $IdMax" AppendAuFichier $FichierSortie "$Nom $AccessMax $IdMax" } } proc OrgaEssaiPourTous {} { foreach Nom [ListeDesPABs] { OrgaEssai $Nom } } proc OrgaInteressant {Orga} { return [FamiliarOrganism $Orga] } proc OrganismFromOrthoInspector {{Qui ""} {Quoi ""}} { #rR on lit le nom du fichier qui contient le taxid et l'os mais avec le strain qui peut-être n'importe quoi. global OFOI set QUI [string toupper $Qui] regsub " " $QUI "_" QUI set QUOI [string toupper $Quoi] if {[info exists OFOI($QUI,$QUOI)]} { return $OFOI($QUI,$QUOI) } if {[info exists OFOI("EstCharge")]} { if {[info exists OFOI($QUI,TAXID)]} { set LaReponse {} foreach TaxId $OFOI($QUI,TAXID) { if {[info exists OFOI($TaxId,$QUOI)]} { lappend LaReponse $OFOI($TaxId,$QUOI) } } return $LaReponse } return "" } set OFOI("EstCharge") 1 set Rep "/biolo/orthoinspector/DataOrthoinspector/Orthoinspector_v2/eukaryota/all" set OFOI(REP,) $Rep foreach Fichier [lsort [glob -nocomplain "$Rep/*.fasta"]] { set Queue [file tail $Fichier] #if {[regexp {^[0-9]} $Queue]} { continue } set OsDuFichier "" set TaxIdDuFichier "" regsub {\.fasta$} $Queue "" FullName set G "" set E "" set T "" set S "" if {[regexp {([a-z]+)_([a-z\-\.]+)_([0-9]+)_(.+)} $FullName Match G E T S]} { set G [string totitle $G] set OsDuFichier "${G}_$E" set FullOs $OsDuFichier set TaxIdDuFichier $T set Strain $S if {$Strain!=""} { append FullOs "_$Strain" } } if {[regexp {([0-9]+)_([A-Z][a-z]+)_([a-z\-\.]+)(_(.*)|$)} $FullName Match T G E X S]} { set TaxIdDuFichier $T set OsDuFichier "${G}_$E" set FullOs $OsDuFichier set Strain $S if {$Strain!=""} { append FullOs "_$Strain" } } # if {$TaxIdDuFichier=="9823" && $OsDuFichier=="Cavia_porcellus"} { set TaxIdDuFichier "10141" } if {[info exists DejaVu($TaxIdDuFichier)]} { FaireLire "DejaVu $TaxIdDuFichier" } set DejaVu($TaxIdDuFichier) 1 set OsFromTax [QuestionDeScience EVImm "ret Tax $TaxIdDuFichier"] regsub " " $OsFromTax "_" OsFromTax set AfficheOsFromTax "" ; if {$OsFromTax!="$OsDuFichier"} { set AfficheOsFromTax $OsFromTax } set TaxId $TaxIdDuFichier set Os $OsDuFichier regsub "_" $Os " " $Os set OFOI($TaxId,TAXID) $TaxId set OFOI($TaxId,FULLNAME) $FullName set OFOI($TaxId,FILENAME) $Fichier set OFOI($TaxId,OS) $Os set OFOI($TaxId,FULLOS) $FullOs set OFOI($TaxId,STRAIN) $Strain set OFOI($TaxId,OSFROMTAX) [QuestionDeScience EVImm "ret Tax $TaxId"] set FULLNAME [string toupper $FullName] set FULLOS [string toupper $FullOs] set OS [string toupper $Os] set STRAIN [string toupper $Strain] set OFOI($FULLNAME,TAXID) $TaxId set OFOI($FULLOS,TAXID) $TaxId lappend OFOI($OS,TAXID) $TaxId lappend OFOI($STRAIN,TAXID) $TaxId lappend OFOI(LISTOF,TAXID) $TaxId lappend OFOI(LISTOF,FULLNAME) $FullName lappend OFOI(LISTOF,FULLOS) $FullOs # lappend OFOI(LISTOF,OS) $Os lappend OFOI(LISTOF,STRAIN) $Strain lappend OFOI(LISTOF,FILENAME) $Fichier } set OFOI(LISTOF,FULLOS) [lsort -unique $OFOI(LISTOF,FULLOS)] set OFOI(LISTOF,FULLNAME) [lsort -unique $OFOI(LISTOF,FULLNAME)] set OFOI(LISTOF,FILENAME) [lsort -unique $OFOI(LISTOF,FILENAME)] set OFOI(LISTOF,STRAIN) [lsort -unique $OFOI(LISTOF,STRAIN)] foreach FullOS $OFOI(LISTOF,FULLOS) { lassign [split $FullOS "_"] G E set OS "$G $E" lappend OFOI(LISTOF,OS) $OS } return [OrganismFromOrthoInspector $Qui $Quoi] } proc OrganismFromYannis {{Qui ""} {Quoi ""}} { #rR on lit le nom du fichier qui contient le taxid et l'os mais avec le strain qui peut-être n'importe quoi. global OFYA set QUI [string toupper $Qui] regsub " " $QUI "_" QUI set QUOI [string toupper $Quoi] if {[info exists OFYA($QUI,$QUOI)]} { return $OFYA($QUI,$QUOI) } if {[info exists OFYA("EstCharge")]} { if {[info exists OFYA($QUI,TAXID)]} { set LaReponse {} foreach TaxId $OFYA($QUI,TAXID) { if {[info exists OFYA($TaxId,$QUOI)]} { lappend LaReponse $OFYA($TaxId,$QUOI) } } return $LaReponse } return "" } set OFYA("EstCharge") 1 # set Rep "/home/nevers/StageJuin/Proteomes" set Rep "/home/nevers/StageJuin/Proteomes" set OFYA(REP,) $Rep foreach Fichier [lsort [glob -nocomplain "$Rep/*.tfa"]] { set Queue [file tail $Fichier] #if {[regexp {^[0-9]} $Queue]} { continue } set OsDuFichier "" set TaxIdDuFichier "" regsub {\.tfa$} $Queue "" FullName set FullName [string trim $FullName "_-"] set G "" set E "" set T "" set S "" if {[regexp {([0-9]+)_([A-Z][a-z]+)_([a-z\-\.]+)(_(.*)|$)} $FullName Match T G E X S]} { set TaxIdDuFichier $T set OsDuFichier "${G}_$E" set FullOs $OsDuFichier set Strain $S if {$Strain!=""} { append FullOs "_$Strain" } } if {[info exists DejaVu($TaxIdDuFichier)]} { FaireLire "DejaVu $TaxIdDuFichier" } set DejaVu($TaxIdDuFichier) 1 set OsFromTax [QuestionDeScience EVImm "ret Tax $TaxIdDuFichier"] regsub " " $OsFromTax "_" OsFromTax set AfficheOsFromTax "" ; if {$OsFromTax!="$OsDuFichier"} { set AfficheOsFromTax $OsFromTax } set TaxId $TaxIdDuFichier set Os $OsDuFichier regsub "_" $Os " " $Os set OFYA($TaxId,TAXID) $TaxId set OFYA($TaxId,FULLNAME) $FullName set OFYA($TaxId,FILENAME) $Fichier set OFYA($TaxId,OS) $Os set OFYA($TaxId,FULLOS) $FullOs set OFYA($TaxId,STRAIN) $Strain set OFYA($TaxId,OSFROMTAX) [QuestionDeScience EVImm "ret Tax $TaxId"] set FULLNAME [string toupper $FullName] set FULLOS [string toupper $FullOs] set OS [string toupper $Os] set STRAIN [string toupper $Strain] set OFYA($FULLNAME,TAXID) $TaxId set OFYA($FULLOS,TAXID) $TaxId lappend OFYA($OS,TAXID) $TaxId lappend OFYA($STRAIN,TAXID) $TaxId lappend OFYA(LISTOF,TAXID) $TaxId lappend OFYA(LISTOF,FULLNAME) $FullName lappend OFYA(LISTOF,FULLOS) $FullOs lappend OFYA(LISTOF,STRAIN) $Strain lappend OFYA(LISTOF,FILENAME) $Fichier } set OFYA(LISTOF,FULLOS) [lsort -unique $OFYA(LISTOF,FULLOS)] set OFYA(LISTOF,FULLNAME) [lsort -unique $OFYA(LISTOF,FULLNAME)] set OFYA(LISTOF,FILENAME) [lsort -unique $OFYA(LISTOF,FILENAME)] set OFYA(LISTOF,STRAIN) [lsort -unique $OFYA(LISTOF,STRAIN)] foreach FullOS $OFYA(LISTOF,FULLOS) { lassign [split $FullOS "_"] G E set OS "$G $E" lappend OFYA(LISTOF,OS) $OS } return [OrganismFromYannis $Qui $Quoi] } proc OrganismListForCilioCode {{GetWhat ""}} { if {$GetWhat==""} { set GetWhat "TaxId" } set Fichier [Fiches "ListOfTaxIdCilioCode.txt"] set LesTaxId {} foreach Ligne [LesLignesDuFichier $Fichier] { set Ligne [string trim $Ligne] if {$Ligne==""} { continue } lappend LesTaxId $Ligne } set AsText [regexp -nocase "AsText" $GetWhat] set WithComma [regexp -nocase "AsTextWithComma" $GetWhat] set WithSpace [regexp -nocase "AsTextWithSpase" $GetWhat] regsub -nocase "AsText.*" $GetWhat "" GetWhat set Liste {} if {[regexp -nocase "^TaxId" $GetWhat]} { set Liste $LesTaxId } else { foreach TaxId $LesTaxId { set Info [OiOrganism $TaxId $GetWhat] if {$Info==""} { continue } lappend Liste $Info } } if { ! $AsText } { return $Liste } set Sep "," if {$WithComma} { set Sep "," } if {$WithSpace} { set Sep " " } return [join $Liste $Sep] } proc OrganismProtAcc {} { set M 0; set H 0; set R 0; set T 0 foreach I [RetChip2 ListOf Index] { set liste {} set Des [RetChip2 $I "description_customer"] set Ac1 [RetChip2 $I "refseq_PIQOR"] set Ac2 [RetChip2 $I "DNA_acc"] set Ac4 [RetChip2 $I "prot_acc"] set Ac3 [RetChip2 $I "prot_acc_PIQOR"] if { [regexp {^RA[0-9]+} $Des] } { continue } if {$Ac1=="" && $Ac2==""} { if {$Ac4!=""} { if {[regexp "," $Ac4]} { set SesAcs [split $Ac4 ","] foreach Ac $SesAcs { set Commande1 "getz \"\\\[protein-acc:$Ac\\\]\" \-f org" set GetzOut1 [eval exec $Commande1] set Lu1 "" set GenreLu1 "" set EspeceLu1 "" scan $GetzOut1 "%s %s %s" Lu1 GenreLu1 EspeceLu1 puts "plsligne=$I acc=$Ac4=>organisme=$GenreLu1 $EspeceLu1" set og "$GenreLu1 $EspeceLu1" puts "**$og" lappend liste $og } set liste [lsort -unique $liste] if {[llength $liste] > 1} { incr T puts "plus d'un orga pour ligne $I" foreach x $liste { puts "++$x" } } else { set orga [lindex $liste 0] if {[regexp {^Mus} $orga]} { incr M puts "Mpl=$M\n" } if {[regexp {^Homo} $orga]} { incr H puts "Hpl=$H\n" } if {[regexp {^Rattus} $orga]} { incr R puts "Rpl=$R\n" } } continue } set Commande "getz \"\\\[protein-acc:$Ac4\\\]\" \-f org" set GetzOut [eval exec $Commande] set Lu1 "" set GenreLu1 "" set EspeceLu1 "" scan $GetzOut "%s %s %s" Lu1 GenreLu1 EspeceLu1 puts "uniligne=$I acc=$Ac4=>organisme=$GenreLu1 $EspeceLu1" if {[regexp {^Mus$} $GenreLu1]} { incr M puts "Mui=$M\n" } if {[regexp {^Homo$} $GenreLu1]} { incr H puts "Hui=$H\n" } if {[regexp {^Rattus$} $GenreLu1]} { incr R puts "Rui=$R\n" } } } } Espionne "$M=nb de souris" Espionne "$H=nb d'homme" Espionne "$R=nb de rat" Espionne "$T=nb de multiple" } proc OrganismeCanonique {OS {Controle Stricte}} { global DejaTraite set OriginalOS $OS set NePasDemanderPourRaccourcir [expr [string equal $Controle "NonStricte"]] set NePasDemanderPourRallonger [expr [string equal $Controle "NonStricte"]] regsub -all {\,} $OS " " OS regsub -all {\.} $OS " " OS regsub -all {\;} $OS " " OS while {[regexp " " $OS]} { regsub -all " " $OS " " OS } set OS [string trim $OS] set iParenthese [string first "(" $OS] if {$iParenthese!=-1} { set OS [string trim [string range $OS 0 [expr $iParenthese - 1]]] } set LesMots [split [string trim $OS] " "] Wup " ............................................ cas connus et nouveaux acceptes." set PremierMot [lindex $LesMots 0] if {[llength $LesMots] == 1 && [regexp -nocase "VIRUS" $PremierMot]} { set LesMots [list VIRUS $PremierMot] } if {[llength $LesMots] == 1 && $Controle=="Sommaire"} { if {[regexp -nocase "^Xenopus$" $PremierMot]} { return "Xenopus laevis" } return "$PremierMot $PremierMot" } if {[llength $LesMots] == 2} { if {$Controle=="Sommaire"} { return [join $LesMots " "] } set Orga [Glossaire $OS Complet] if {$Orga != ""} { return $Orga } if {$Controle == "Stricte"} { return [OnGardeCommeNouvelOrganisme $OS "EnDemandant"] } Wup "Attention on accepte tel quel." if {$Controle == "NonStricte"} { OnGardeCommeNouvelOrganisme $OS "SansDemander" return $OS } } Wup "Homo sapiens sapiens" if {[llength $LesMots] == 3 && [lindex $LesMots 1] == [lindex $LesMots 2]} { set OS [join [lrange $LesMots 0 1] " "] if {$Controle=="Sommaire"} { return $OS } set Orga [Glossaire $OS Complet] if {$Orga != ""} { return $Orga } if {$Controle == "Stricte"} { return [OnGardeCommeNouvelOrganisme $OS "EnDemandant"] } Wup "Attention on accepte tel quel." if {$Controle == "NonStricte"} { OnGardeCommeNouvelOrganisme $OS "SansDemander" return $OS } } if {[llength $LesMots] > 2} { if {$Controle == "NonStricte" && [info exists DejaTraite($OriginalOS)]} { return [set DejaTraite($OriginalOS)] } if {[regexp -nocase "VIRUS" $OS]} { set LesMots [linsert $LesMots 0 "VIRUS"] } if {[regexp -nocase "ENDOSYMBIONT" $OS]} { set LesMots [linsert $LesMots 0 "ENDOSYMBIONT"] } if {[regexp -nocase "ENDOBACTERIUM" $OS]} { set LesMots [linsert $LesMots 0 "ENDOSYMBIONT"] } set UnEtDeux [join [lrange $LesMots 0 1] " "] if {$Controle=="Sommaire"} { return $UnEtDeux } if {$NePasDemanderPourRaccourcir || [OuiOuNon "Can I take $UnEtDeux\nfrom $OriginalOS ?"]} { set Orga $UnEtDeux set DejaTraite($OriginalOS) $Orga } else { set Orga [string trim [Entre "$OriginalOS"]] } } else { if {$NePasDemanderPourRallonger} { set Orga "Unknown $OS" } else { set Orga [string trim [Entre "$OriginalOS"]] } } if {$Controle == "Stricte"} { return [OnGardeCommeNouvelOrganisme $Orga "EnDemandant"] } if {$Controle == "NonStricte"} { OnGardeCommeNouvelOrganisme $Orga "SansDemander" return $Orga } return [string trim $OriginalOS] } proc OrganismeCanoniqueDuGenbank {TexteOuFichier} { set Genre "Inconnu" set Espece "inconnu" set Organism [LesSubKeywordsInteressantsDuGenbank $TexteOuFichier bidon SOURCE ORGANISM] scan $Organism "%s %s %s" machin Genre Espece return "$Genre $Espece" } proc OrganismeDeLaBanqueBlastN {{Qui ""} {Quoi ""}} { global OrganismeDeLaBanqueBlast if {$Qui=="" && $Quoi==""} { set Qui "ListOf" ; set Quoi "Files" } if { ! [regexp -nocase "Banks|Bank|Organisms|Organism|Files" $Quoi]} { if {$Quoi==""} { if {[regexp " " $Qui]} { set Quoi "Bank" } else { set Quoi "Organism" } } else { set Qui "$Qui $Quoi" set Quoi "Bank" } } if {[info exists OrganismeDeLaBanqueBlast($Qui,$Quoi)]} { return $OrganismeDeLaBanqueBlast($Qui,$Quoi) } if {[info exists OrganismeDeLaBanqueBlast("EstCharge")]} { return "" } set OrganismeDeLaBanqueBlast("EstCharge") 1 foreach FichierNal [lsort [glob -nocomplain "/catalog/blast/*.nal"]] { set Queue [file tail $FichierNal] regsub {\.nal$} $Queue "" Banque set Organisme "" foreach Ligne [LesLignesDuFichier $FichierNal] { if { ! [regexp -nocase {^ *TITLE +Genome complet *\- *} $Ligne]} { continue } regsub -nocase {^ *TITLE +Genome complet *\- *} $Ligne "" Organisme break } if {$Organisme==""} { continue } if {[regexp "_" $Banque]} { regsub "_" $Banque " " BO if {$BO!=$Organisme} { FaireLire "$Organisme\n$Ligne\n$FichierNal" } } if {[info exists OrganismeDeLaBanqueBlast($Banque,Organism)]} { FaireLire "Doublon $Organisme $Banque\n$Ligne\n$FichierNal" } set OrganismeDeLaBanqueBlast($Banque,Organism) $Organisme if { ! [info exists OrganismeDeLaBanqueBlast($Organisme,Bank)]} { set OrganismeDeLaBanqueBlast($Organisme,Bank) $Banque } else { if {[regexp "_" $Banque]} { set OrganismeDeLaBanqueBlast($Organisme,Bank) $Banque } } lappend OrganismeDeLaBanqueBlast(ListOf,Files) $FichierNal lappend OrganismeDeLaBanqueBlast(ListOf,Organisms) $Organisme lappend OrganismeDeLaBanqueBlast(ListOf,Banks) $Banque } return [OrganismeDeLaBanqueBlastN $Qui $Quoi] } proc OrganismeDeLaLigneTBlastN {Ligne} { JeMeSignale set Complet(taqu) "Thermus aquaticus" set Complet(aaeol) "Aquifex aeolicus" set Complet(aaeo) "Aquifex aeolicus" set Complet(aful) "Archaeoglobus fulgidus" set Complet(aper) "Aeropyrum pernix" set Complet(bsub) "Bacillus subtilis" set Complet(bburg) "Borrelia burgdorferi" set Complet(bbur) "Borrelia burgdorferi" set Complet(buch) "Buchnera sp" set Complet(bsp) "Buchnera sp" set Complet(baph) "Buchnera aphidicola" set Complet(baphb) "Buchnera aphidicola" set Complet(cjej) "Campylobacter jejuni" set Complet(cpne) "Chlamydia pneumoniae" set Complet(ctra) "Chlamydia trachomatis" set Complet(drad) "Deinococcus radiodurans" set Complet(ecoli) "Escherichia coli" set Complet(ecol) "Escherichia coli" set Complet(hinf) "Haemophilus influenzae" set Complet(hpylo) "Helicobacter pylori" set Complet(hpyl) "Helicobacter pylori" set Complet(mthe) "Methanobacterium thermoautotrophicum" set Complet(mtub) "Mycobacterium tuberculosis" set Complet(mjan) "Methanococcus jannaschii" set Complet(mgen) "Mycoplasma genitalium" set Complet(mpneu) "Mycoplasma pneumoniae" set Complet(mpne) "Mycoplasma pneumoniae" set Complet(nmen) "Neisseria meningitidis" set Complet(pae) "Pyrobaculum aerophilum" set Complet(paby) "Pyrococcus abyssi" set Complet(pfuri) "Pyrococcus furiosus" set Complet(pfur) "Pyrococcus furiosus" set Complet(pf) "Pyrococcus furiosus" set Complet(phori) "Pyrococcus horikoshii" set Complet(phor) "Pyrococcus horikoshii" set Complet(ph) "Pyrococcus horikoshii" set Complet(rprow) "Rickettsia prowazekii" set Complet(rpro) "Rickettsia prowazekii" set Complet(synecho) "Synechocystis sp" set Complet(syne) "Synechocystis sp" set Complet(ssp) "Synechocystis sp" set Complet(ssp.) "Synechocystis sp" set Complet(tmar) "Thermotoga maritima" set Complet(tpal) "Treponema pallidum" set Complet(txxx) "Thermococcus xxx" set Complet(uure) "Ureaplasma urealyticum" set Complet(yeast) "Saccharomyces cerevisiae" set Complet(yeas) "Saccharomyces cerevisiae" set Complet(ye) "Saccharomyces cerevisiae" set BanqueAccess [lindex [split $Ligne " "] 0] if {[regexp "_" $BanqueAccess] && ! [regexp "\:" $BanqueAccess]} { regsub "_" $BanqueAccess " " SansUnderscore set GloComplet [Glossaire $SansUnderscore Complet] if {$GloComplet != ""} { return $GloComplet } } set Banque [string tolower [lindex [split $BanqueAccess ":"] 0]] regsub {>} $Banque "" Banque if {[regexp -nocase "thermococcus" $Banque]} { return "Thermococcus xxx" return [Glossaire [set Complet(txxx)] Complet] } if {[regexp -nocase "PYRO_i_tot1.brut" $Banque]} { return "Pyrococcus horikoshii" } if {[regexp -nocase "PYRO_i_tot1.brut" $Banque]} { return "Pyrococcus horikoshii" } if {[regexp -nocase "ot3seq.fasta" $Banque]} { return "Pyrococcus horikoshii" } if {[regexp -nocase "^aero" $Banque]} { return "Aeropyrum pernix" } if {[regexp -nocase "^nmen" $Banque]} { return "Neisseria meningitidis" } if {[regexp -nocase "^MM4" $Banque]} { return "Pyrococcus furiosus" } if {[regexp -nocase "^DRA" $Banque]} { return "Deinococcus radiodurance" } if {[regexp -nocase "^UREA" $Banque]} { return "Ureaplasma urealyticum" } if {[regexp -nocase "^BUCH" $Banque]} { return "Buchnera sp" } set Access [string tolower [lindex [split $BanqueAccess ":"] 1]] if {[regexp "_" $Access]} { set Access [lindex [split $Access "_"] 0] } if {[info exists Complet($Access)]} { set Retour [Glossaire [set Complet($Access)] Complet] if {$Retour==""} { return "Inconnu inconnu" } return $Retour } if {[info exists Complet($Banque)]} { set Retour [Glossaire [set Complet($Banque)] Complet] if {$Retour==""} { return "Inconnu inconnu" } return $Retour } set Access [string range $Access 0 3] if {[info exists Complet($Access)]} { set Retour [Glossaire [set Complet($Access)] Complet] if {$Retour==""} { return "Inconnu inconnu" } return $Retour } if {[OuiOuNon "$Ligne incomprehensible.\n Sauriez-vous le definir ?" 0]} { FaireLire "Donner le nom complet de l'organisme en respectant Majuscule minuscule" set Organisme [Entre] set Complet($Ligne) $Organisme set Retour [Glossaire $Organisme Complet] if {$Retour==""} { return "Inconnu inconnu" } return $Retour } else { return "Inconnu inconnu" } } 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 OrganismeDuBIdCiteDansNuctfaPourTous {} { set FichierOrganismesDesPABs "[RepertoireDuGenome]/fiches/organismesdespabs" if {[file exists $FichierOrganismesDesPABs]} { foreach Ligne [LesLignesDuFichier $FichierOrganismesDesPABs] { scan $Ligne "%s" NomLu set DejaVu($NomLu) 1 } } foreach Nom [ListeDesPABs] { if {[info exists DejaVu($Nom)]} { continue } set FTfa "[RepertoireDuGenome]/nuctfa/$Nom" if { ! [file exists $FTfa]} { continue } scan [EnteteDuFichierTFA $FTfa] "%s %s %s %s %s" NomLu Access mRNA of BId set Organisme [OrgaDuAccess $Access "Complet" $BId] Espionne "$Nom $Organisme" AppendAuFichier $FichierOrganismesDesPABs "$Nom $Organisme" } return $FichierOrganismesDesPABs } proc OrganismeDuGenome {Genome} { global RepertoireDuGenome set GenOri $Genome if { ! [file exists $Genome]} { set Genome "$RepertoireDuGenome/../$Genome" } set FichierMiniConfig "$Genome/beton/miniconfig" if { ! [file exists $FichierMiniConfig]} { FaireLire "I can't find $FichierMiniConfig\n to determine the organism of $GenOri" return "Unknow unknow" } foreach Ligne [LesLignesDuFichier $FichierMiniConfig] { if {[regexp "NotreOS" $Ligne]} { regsub "NotreOS " $Ligne "" Organisme regsub {\.} $Organisme "" Organisme return $Organisme } } FaireLire "I can't find 'NotreOS' in $FichierMiniConfig\n to determine the organism of $GenOri" return "Unknow unknow" } proc OrganismeDuPAB {Nom {Format ""}} { global OrganismeDuPAB Wup "Format is not used ... a developper" if {$Format==""} { set Format "All" } if {$Nom=="Reload"} { if {[info exists OrganismeDuPAB]} { unset OrganismeDuPAB } set Nom "turlututu" } if {[info exists OrganismeDuPAB($Nom)]} { return [OrganismeFormate [set OrganismeDuPAB($Nom)] $Format] } if {[info exists OrganismeDuPAB("EstCharge")]} { return [set OrganismeDuPAB("EstCharge")] } set FichierOrganismesDesPABs "[RepertoireDuGenome]/fiches/organismesdespabs" if {[NotreOS]=="" || [NotreOS]=="Inconnu inconnu"} { set OrganismeDuPAB("EstCharge") "Inconnu inconnu" } else { set OrganismeDuPAB("EstCharge") [NotreOS] } if {[file exists $FichierOrganismesDesPABs] && [regexp "SeeInfo" [PremiereLigneDuFichier $FichierOrganismesDesPABs]]} { foreach PAB [ListeDesPABs] { set Org [ExtraitInfo $PAB "Organism"] # if {$Org==""} { set Org "Inconnnu inconnu" } set OrganismeDuPAB($PAB) $Org } return [OrganismeDuPAB $Nom $Format] } if {[file exists $FichierOrganismesDesPABs]} { set OrganismeDuPAB("EstCharge") [Glossaire "Inconnu inconnu" Complet] foreach Ligne [LesLignesDuFichier $FichierOrganismesDesPABs] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } set NomLu "" scan $Ligne "%s" NomLu set Organisme "" regsub " *$NomLu +" $Ligne "" Organisme set OrganismeDuPAB($NomLu) $Organisme } return [OrganismeDuPAB $Nom $Format] } return [OrganismeDuPAB $Nom $Format] } proc OrganismeDuPDB {aPDB} { set TextePDB [TextePDB $aPDB "SOURCE" "\n"] if {$TextePDB==""} { return [Glossaire "Inconnu inconnu" Complet] } set Organisme "Inconnu inconnu" Wup "It can be (GENUS SPECIES)" if {[regexp -nocase {^\(([A-Z]+ [A-Z]+)\)$} $TextePDB Match GenreEspece]} { set Organisme [OrganismeCanonique $GenreEspece "NonStricte"] return $Organisme } Wup "Or behind ORGANISM_SCIENTIFIC:" foreach Ligne [split $TextePDB "\n"] { if { ! [regexp -nocase "ORGANISM_SCIENTIFIC:" $Ligne]} { continue } set Organisme [StringSuivant "ORGANISM_SCIENTIFIC:" dans $Ligne] set Organisme [OrganismeCanonique $Organisme "NonStricte"] break } return $Organisme } proc OrganismeFormate {Organisme {Format ""}} { Wup "Format can be All TaxIds TaxId Name Names NamesList NamesPlus NamesDDot" if {$Format=="" || $Format=="All" } { return $Organisme } if {$Format=="Names"} { set Format "NamesList" } if {$Format=="TaxId"} { if {[regexp {^[0-9]+} $Organisme]} { scan $Organisme "%d" TaxId return $TaxId } else { return [Tax $Organisme TaxId] } } if {$Format=="TaxIds"} { if {[regexp {^[0-9]+} $Organisme]} { if {[regexp -indices {[^0-9 ]} $Organisme Indices]} { set I [lindex $Indices 0] set TexteId [string range $$Organisme 0 [incr I -1]] return [string trim $TexteId] } else { return $Organisme } } else { return [Tax $Organisme "TaxId"] } } if {$Format=="Name"} { if {[regexp -nocase {^[a-z]} $Organisme]} { if {[regexp -indices {\:\+} $Organisme Indices]} { set I [lindex $Indices 0] set TexteName [string range 0 [incr I -1]] return [string trim $TexteName] } return $Organisme } if {[regexp "<" $Organisme]} { set Texte [TexteEntreChevrons $Organisme] if {[regexp "<" $Organisme]} { return [TexteEntreChevrons $Texte] } else { return $Texte } } if {[regexp {^[0-9]+} $Organisme]} { scan $Organisme "%d" TaxId return [Tax $TaxId "Name"] } regsub -all -nocase {[^a-z ]} $Organisme "" Name return $Name } if {[regexp "Names" $Format]} { if {[regexp -nocase {^[a-z]} $Organisme]} { if {[regexp {\:\+} $Organisme Match]} { set LesNames [split $Organisme $Match] if {$Format=="NamesList"} { return $LesNames } if {$Format=="NamesPlus"} { return [join $LesNames "+"] } if {$Format=="NamesDDot" } { return [join $LesNames ":"] } } else { if {$Format=="NamesList"} { return [list $Organisme] } if {$Format=="NamesPlus"} { return $Organisme } if {$Format=="NamesDDot" } { return $Organisme } } FaireLire "Erreur appel OrganismeFormate $Organisme $Format" return [Entre $Organisme] } if {[regexp "<" $Organisme]} { set Texte [TexteEntreChevrons $Organisme] if {[regexp {\+} $Texte]} { set LesNames {} foreach OrChev [split $Texte "+"] { lappend LesNames [TexteEntreChevrons $OrChev] } if {$Format=="NamesList"} { return $LesNames } if {$Format=="NamesPlus"} { return [join $LesNames "+"] } if {$Format=="NamesDDot"} { return [join $LesNames ":"] } } else { if {$Format=="NamesList"} { return [list [TexteEntreChevrons $Texte]] } if {$Format=="NamesPlus"} { return [TexteEntreChevrons $Texte] } if {$Format=="NamesDDot"} { return [TexteEntreChevrons $Texte] } } FaireLire "Erreur appel OrganismeFormate $Organisme $Format" return [Entre $Organisme] } set Reste $Organisme set LesNames {} while {[regexp {^[0-9]+} $Reste]} { scan $Reste "%d" TaxId lappend LesNames [Tax $TaxId "Name"] regsub " *$TaxId *" $Reste "" Reste } if {$Format=="NamesList"} { return $LesNames } if {$Format=="NamesPlus"} { return [join $LesNames "+"] } if {$Format=="NamesDDot"} { return [join $LesNames ":"] } } FaireLire "Erreur appel OrganismeFormate $Organisme $Format" return [Entre $Organisme] } proc OrganismeNormalise {Organisme {Champ ""}} { if {$Champ==""} { set Champ "Complet" } set G "" set E "" scan $Organisme "%s %s" G E if {$Champ=="Complet"} { return "$G $E" } if {$Champ=="COMPLET"} { return [string toupper "$G $E"] } if {$Champ=="Court"} { return [string tolower [string range $G 0 0] [string range $E 0 2]] } if {$Champ=="Demi"} { return "[string range $G 0 3].[string range $E 0 4]" } if {$Champ=="Pointe"} { return "[string range $G 0 0].[string range $E 0 end]" } return $Organisme } 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 OrganismePresent {{Qui ""} {Quoi ""} {RepBlast ""}} { global OrganismePresent regsub {[_]} $Quoi " " Quoi if {$RepBlast==""} { if { ! [info exists OrganismePresent(CurrentRepBlast,,)]} { set OrganismePresent(CurrentRepBlast,,) "blastnwgs"} set RepBlast $OrganismePresent(CurrentRepBlast,,) } set OrganismePresent(CurrentRepBlast,,) $RepBlast if {[regexp -nocase "wgs" $RepBlast]} { set SourceOrganisme "FromDE" } elseif {[regexp -nocase "completegenomes" $RepBlast]} { set SourceOrganisme "FromOBBN" } else { set SourceOrganisme "FromBird" set BankBird "uniprot" if {[regexp -nocase "refseq\-prot" $RepBlast]} { set BankBird "REFSEQP" } if {[regexp -nocase "refseq\-nuc" $RepBlast]} { set BankBird "REFSEQN" } } set OrganismePresent(CurrentRepBlast,,) $RepBlast if {[info exists OrganismePresent($Qui,$Quoi,$RepBlast)]} { return $OrganismePresent($Qui,$Quoi,$RepBlast) } if {[info exists OrganismePresent($RepBlast,"EstCharge",)]} { return "" } set OrganismePresent($RepBlast,"EstCharge",) 1 set FichierOrganismePresent "[Fiches]/OrganismesPresents-[file tail $RepBlast].txt" if {[FileExists $FichierOrganismePresent]} { array set OrganismePresent [LesLignesDuFichier $FichierOrganismePresent] return [OrganismePresent $Qui $Quoi $RepBlast] } set SeuilExpect 0.001 set MaxListe 9999 if {$RepBlast==""} { set RepBlast "blastnwgs"} foreach Nom [ListeDesPABs] { set FichierBlast [GscopeFile $Nom $RepBlast] Espionne $FichierBlast if {[FileAbsent $FichierBlast]} { continue } DecortiqueBlast $FichierBlast $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lProfil lPN set Rank 0 foreach PN $lPN BanqueId $lBanqueId Access $lAccess DE $lDE { Espionne "$BanqueId $Access $BankBird" if {$SourceOrganisme=="FromDE"} { set Organisme $DE } elseif {$SourceOrganisme=="FromBird"} { set Organisme [BirdWeb $BankBird $Access "OS"] } elseif {$SourceOrganisme=="FromOBBN"} { set Access "" if { ! [regexp {([^\:]+)\:(.+)} $BanqueId Match Bank Access]} { Espionne "$Match $Bank $Access" ; continue } Espionne "$Match $Bank $Access" set Organisme [OrganismeDeLaBanqueBlastN $Bank] } Espionne "$BanqueId $Organisme" if {$Organisme==""} { continue } set Genre "" ; set Espece "" scan $Organisme "%s %s" Genre Espece set Organisme "$Genre $Espece" regsub -all {\,} $Organisme "" Organisme if { ! [info exists OrganismePresent($Nom,$Organisme,$RepBlast)]} { incr Rank set OrganismePresent($Nom,$Organisme,$RepBlast) "$Rank $Access $PN" lappend OrganismePresent($Nom,ListOfOrganisms,$RepBlast) $Organisme if { ! [info exists DejaVu($Organisme)]} { set DejaVu($Organisme) 1 lappend OrganismePresent(ListOf,AllOrganisms,$RepBlast) $Organisme } } } } set MaxOrganismes [llength $OrganismePresent(ListOf,AllOrganisms,$RepBlast)] foreach Organisme $OrganismePresent(ListOf,AllOrganisms,$RepBlast) { set AverageRank 0 set I 0 foreach Nom [ListeDesPABs] { incr I incr AverageRank $Rank if { ! [info exists OrganismePresent($Nom,$Organisme,$RepBlast)]} { incr AverageRank $MaxOrganismes ; continue } set Rank $OrganismePresent($Nom,$Organisme,$RepBlast) scan $Rank "%d" Rank } set AverageRank [expr $AverageRank/$I] lappend LesRO [list $AverageRank $Organisme] } set LesRO [lsort -integer -index 0 $LesRO] set LesO {} foreach RO $LesRO { set R [lindex $RO 0] set O [lindex $RO 1] lappend OrganismePresent(RankedListOf,AllOrganisms,$RepBlast) "$R $O" lappend LesO $O } set OrganismePresent(ListOf,AllOrganisms,$RepBlast) $LesO SauveLesLignes [array get OrganismePresent] dans $FichierOrganismePresent return [OrganismePresent $Qui $Quoi $RepBlast] } proc OrganismePrioritaire {Orga} { global OrganismePrioritaire set ORGA [string toupper $Orga] if {[info exists OrganismePrioritaire($ORGA)]} { return $OrganismePrioritaire($ORGA) } if {[info exists OrganismePrioritaire("EstCharge")]} { return $Orga } set OrganismePrioritaire("EstCharge") 1 foreach Genome [LesGenomesComplets] { scan $Genome "%s %s" Genre Espece if {"$Genre $Espece"=="Pyrobaculum aerophilum"} { set O "pae" } else { set O [string index $Genre 0] append O [string range $Espece 0 2] } set OrganismePrioritaire([string toupper $O]) $Genome } set OrganismePrioritaire(MKAN) "Methanopyrus kandleri" set OrganismePrioritaire(A.SP.) "Anabaena sp." set OrganismePrioritaire(H.SP.) "Halobacterium sp." set OrganismePrioritaire(S.SP.) "Synechocystis sp." set OrganismePrioritaire(A.SP) "Anabaena sp." set OrganismePrioritaire(H.SP) "Halobacterium sp." set OrganismePrioritaire(S.SP) "Synechocystis sp." set OrganismePrioritaire(ASP.) "Anabaena sp." set OrganismePrioritaire(HSP.) "Halobacterium sp." set OrganismePrioritaire(SSP.) "Synechocystis sp." set OrganismePrioritaire(ASP) "Anabaena sp." set OrganismePrioritaire(HSP) "Halobacterium sp." set OrganismePrioritaire(SSP) "Synechocystis sp." set OrganismePrioritaire(LISTOFPRIORITAIRE) [array names OrganismePrioritaire] return [OrganismePrioritaire $Orga] } proc OrganismesAyantMemeOperon {lPA lOA lPB lOB} { Wup "On retourne un organisme court ... tant pis pour les duplications" foreach {PA A} $lPA OA $lOA { foreach {PB B} $lPB OB $lOB { if { $OA != $OB } { continue } set DPP [Maxi 10 [expr abs($PB-$PA)]] set DAB [expr abs($B-$A)] set DD [expr abs($DPP-$DAB)] set ErreurRelative [expr (1.0*$DD)/$DPP] if {[expr $ErreurRelative < 2.0]} { set O [Glossaire $OA Court] if {$O==""} { set O "xxxx" } lappend LesOrgasRetenus $O } else { } } } if {[info exists LesOrgasRetenus]} { set OldO "xxxxxxx" foreach O [lsort -ascii $LesOrgasRetenus] { if { $OldO == $O } { continue } lappend LesOrgasTries $O set OldO $O } return [join $LesOrgasTries " "] } else { return "" } } proc OrganismesOrthologues {K X Y} { global LesOrthologuesDe if { ! [info exists LesOrthologuesDe]} { ChargeLesOrthologuesDe } set Boite [BoiteDuCourant $K $X $Y] if { $Boite == "" } { return $Boite} set Nom [Box $Boite nom] if { ! [info exists LesOrthologuesDe($Nom)]} { return "" } set Ortho [ChoixParmi [set LesOrthologuesDe($Nom)]] if { $Ortho == "" } { return "" } return $Ortho } proc OrganismesPourGenomiqueComparative {} { return [LesLignesDuFichier "[Fiches]/OrganismesPourGenomiqueComparative.txt"] } proc OrganismsInCilioBlast {Nom {GetWhat ""} {RepBlast ""}} { #rR attention ceci est pour CilioCode ou les enteteschevronnées sont des fois sans BId Acc (onsaute) if {$RepBlast==""} { set RepBlast "blastp" } set LaSortie {} set TousLesExpects {} set LesOrgas {} foreach Ligne [LesEntetesChevronneesDuBlast [GscopeFile $Nom $RepBlast] "GetHeaders"] { if { ! [regexp {>[^_]+_[^_]+ } $Ligne]} { continue } ; #rR on saute regsub "^>" $Ligne "" Ligne scan $Ligne "%s %s %s %s" BId Acc Genre Espece set Orga "$Genre $Espece" regexp -nocase {OS=([A-Z]+ [A-Z\.]+)} $Ligne Match Orga set Expect [StringApres "Expect=" dans $Ligne] if {$Expect > 1.0e-3} {continue } lappend TousLesExpects $Expect if { ! [info exists Compte($Orga,Hits)]} { lappend LesOrgas $Orga set Compte($Orga,Hits) 0 set Compte($Orga,Repeats) 0 set Compte($Orga,Fragments) 0 set Compte($Orga,Uncharacterized) 0 set LesExpects($Orga) {} } incr Compte($Orga,Hits) if {[regexp -nocase "repeat" $Ligne]} { incr Compte($Orga,Repeats) } if {[regexp -nocase "fragment" $Ligne]} { incr Compte($Orga,Fragments) } if {[regexp -nocase "uncharac" $Ligne]} { incr Compte($Orga,Uncharacterized) } lappend LesExpects($Orga) $Expect Espionne $Ligne if {[regexp "Hydra" $Ligne]} { Espionne $Ligne #exit } } set NbOrgas [llength $LesOrgas] set TousLesExpectsEnLog {} set LogMin -200 foreach E $TousLesExpects { if {$E==0.0 || $E < 1.0e-200} { set L $LogMin } else { set L [expr log10($E)] } lappend TousLesExpectsEnLog $L } if {[regexp -nocase "Expect" $GetWhat]} { return $TousLesExpects } if {[regexp -nocase "Orga" $GetWhat]} { return $LesOrgas } if {[regexp -nocase "Graph" $GetWhat]} { return [Graphe $TousLesExpectsEnLog "" "" "" "" "" "" "" "$Nom $RepBlast"] } lappend LaSortie "Organismes presents : $NbOrgas" lappend LaSortie "" lappend LaSortie "[format %30s Organisms] [format %-12s CiliaStatus] Hs Re Fr Un Expects" foreach Orga $LesOrgas { set CiliaStatus [CiliaStatusOfOrga $Orga] lappend LaSortie "[format %30s $Orga] [format %-12s $CiliaStatus] [format %3d $Compte($Orga,Hits)] [format %2d $Compte($Orga,Repeats)] [format %2d $Compte($Orga,Fragments)] [format %2d $Compte($Orga,Uncharacterized)] Expects: [join $LesExpects($Orga) { }]" } set LesWithCiliaAbsents [ListsComplement [CiliaStatusOfOrga "WithCilia"] $LesOrgas] set LesNoCiliaAbsents [ListsComplement [CiliaStatusOfOrga "No"] $LesOrgas] set LesLostAbsents [ListsComplement [CiliaStatusOfOrga "Lost"] $LesOrgas] lappend LaSortie "" lappend LaSortie " WithCilia Absents du blast" LConcat LaSortie $LesWithCiliaAbsents lappend LaSortie "" lappend LaSortie " NoCilia Absents du blast" LConcat LaSortie $LesNoCiliaAbsents lappend LaSortie "" lappend LaSortie " Loosed Absents du blast" LConcat LaSortie $LesLostAbsents if {[regexp -nocase "Show" $GetWhat]} { return [AfficheListe $LaSortie "" "$Nom"] } return "$LaSortie" } proc OrgasAbsentsDesGenomesComplets {Nom} { return [ORGAorgaDesMSFs $Nom "Absents"] } proc OrgasHesitantsDesGenomesComplets {Nom} { return [ORGAorgaDesMSFs $Nom "Hesitants"] } proc OrgasPresentsDesGenomesComplets {Nom} { return [ORGAorgaDesMSFs $Nom "Presents"] } proc OriginalDayhoff {} { set d "C 12.0 S -0.0 1.6 T -2.2 1.3 2.6 P -2.7 0.9 0.3 5.9 A -2.0 1.1 1.2 1.1 1.8 G -3.3 1.1 -0.0 -0.5 1.3 4.8 N -3.6 0.7 0.4 -0.5 0.2 0.4 2.0 D -5.1 0.3 -0.1 -1.0 0.3 0.6 2.1 3.9 E -5.3 -0.0 -0.4 -0.6 0.3 0.2 1.4 3.4 3.9 Q -5.3 -0.5 -0.8 0.2 -0.4 -1.2 0.8 1.6 2.5 4.1 H -3.4 -0.8 -1.3 -0.3 -1.4 -2.1 1.6 0.7 0.6 2.9 6.6 R -3.6 -0.3 -0.9 -0.2 -1.6 -2.6 -0.0 -1.3 -1.1 1.2 1.5 6.1 K -5.4 -0.2 -0.0 -1.2 -1.2 -1.7 1.0 0.1 -0.1 0.7 -0.1 3.4 4.7 M -5.2 -1.6 -0.6 -2.1 -1.2 -2.8 -1.8 -2.6 -2.2 -1.0 -2.2 -0.5 0.4 6.6 I -2.3 -1.4 0.1 -2.0 -0.5 -2.6 -1.8 -2.4 -2.0 -2.0 -2.5 -2.0 -1.9 2.2 4.6 L -6.0 -2.8 -1.7 -2.6 -1.9 -4.0 -2.9 -4.0 -3.3 -1.8 -2.1 -3.0 -2.9 3.7 2.4 6.0 V -1.9 -1.0 0.3 -1.2 0.2 -1.4 -1.8 -2.2 -1.8 -1.9 -2.3 -2.5 -2.5 1.8 3.7 1.8 4.3 F -4.3 -3.2 -3.1 -4.6 -3.5 -4.8 -3.5 -5.6 -5.4 -4.7 -1.8 -4.5 -5.3 0.2 1.0 1.8 -1.2 9.1 Y 0.4 -2.8 -2.8 -5.0 -3.5 -5.3 -2.1 -4.3 -4.3 -4.0 -0.1 -4.2 -4.5 -2.5 -1.0 -0.9 -2.5 7.0 10.2 W -7.5 -2.3 -5.0 -5.5 -5.6 -6.8 -3.9 -6.6 -6.8 -4.6 -2.5 2.3 -3.3 -4.1 -5.0 -1.7 -6.1 0.5 0.0 17.3" set Ld [split $d \n] set Laa {} foreach l $Ld { set l [string trim $l] regsub -all { +} $l " " l set Lv [split $l " "] set aacou [lindex $Lv 0] lappend Laa $aacou foreach v [lrange $Lv 1 end] aa $Laa { set t($aacou,$aa) $v set t($aa,$aacou) $v } } return [array get t] } proc OriginalDayhoff2 {} { set d "A B C D E F G H I K L M N P Q R S T V W X Y Z 10 8 6 8 8 4 9 7 7 7 6 7 8 9 8 6 9 9 8 2 8 5 8 A 10 4 11 10 3 8 9 6 9 5 6 10 7 9 7 8 8 6 3 8 5 10 B 20 3 3 4 5 5 6 3 2 3 4 5 3 4 8 6 6 0 8 8 3 C 12 11 2 9 9 6 8 4 5 10 7 10 7 8 8 6 1 8 4 11 D 12 3 8 9 6 8 5 6 9 7 10 7 8 8 6 1 8 4 11 E 17 3 6 9 3 10 8 4 3 3 4 5 5 7 8 8 15 3 F 13 6 5 6 4 5 8 7 7 5 9 8 7 1 8 3 7 G 14 6 8 6 6 10 8 11 10 7 7 6 5 8 8 6 H 13 6 10 10 6 6 6 6 7 8 12 3 8 7 6 I 13 5 8 9 7 9 11 8 8 6 5 8 4 8 K 14 12 5 5 6 5 5 6 10 6 8 7 5 L 14 6 6 7 8 6 7 10 4 8 6 6 M 10 7 9 8 9 8 6 4 8 6 9 N 14 8 8 9 8 7 2 8 3 8 P 12 9 7 7 6 3 8 4 11 Q 14 8 7 6 10 8 4 11 R 10 9 7 6 8 5 8 S 11 8 3 8 5 7 T 12 2 8 6 6 V 25 8 8 2 W 8 8 8 X 18 4 Y 11 Z" set Ld [split $d "\n"] set Laa [string trim [lindex $Ld 0]] regsub -all { +} $Laa " " Laa set Laa [split $Laa " "] set ia 0 foreach d [lrange $Ld 1 end] { set d [string trim $d] if {$d eq ""} {continue} regsub -all { +} $d " " d set Lv [split $d " "] set aacou [lindex $Lv end] foreach v [lrange $Lv 0 end-1] aa [lrange $Laa $ia end] { set t($aacou,$aa) $v set t($aa,$aacou) $v } incr ia } #parray t return [array get t] } proc OriginesDuPackage {package} { if { ![catch {package require $package} currver] } { foreach ver [package versions $package] { puts "$ver: [package ifneeded $package $ver]" } } return } proc OrphanSeqs {} { global CpB CBPCI # search last cluster index set iGrp -9999 foreach g $CpB(LNDG) { if {[regexp {Group[0-9]+} $g]} { set i [string range $g 5 end] if {$i > $iGrp} {set iGrp $i} } } incr iGrp puts "iGrp $iGrp" set Lorph [list] # remove groups containing only one sequence set ig 1 set Lig [list] foreach g [lrange $CpB(LNDG) 1 end] { if {[llength [set CpB($g)]] == 1} { lappend Lorph [set CpB($g)] lappend Lig $ig unset CpB($g) } incr ig } if {$Lig != {} } { set Lig [lsort -integer -decreasing $Lig] foreach i $Lig { set CpB(LNDG) [lreplace $CpB(LNDG) $i $i] } } # check if seq %id < 30% in average with the group puts "DEBITEM makeorphan" foreach g [lrange $CpB(LNDG) 1 end] { set Li [list] foreach n1 [set CpB($g)] { set mean 0.0 set nseq 0 foreach n2 [set CpB($g)] { if {$n1 ne $n2} { set pc [set CBPCI($n1,$n2)] set mean [expr {$mean+$pc}] incr nseq } } set mean [expr {$mean/double($nseq)}] if {$mean < 0.3} { puts "ITEM orphan [format %8.6f $mean] $n1 [string range $g 5 end]" lappend Lorph $n1 lappend Li [lsearch [set CpB($g)] $n1] } } if {$Li != {} } { set Li [lsort -integer -decreasing $Li] foreach i $Li { set CpB($g) [lreplace [set CpB($g)] $i $i] } } } # Start again, trying to assign orphan to a group # (the Unclustered secator group is here a normal # group, so sequences are taken as normal orphan) set Li [list] set i -1 puts "DEBITEM adding" foreach orph $Lorph { puts "testorph $orph" incr i if {$i in $Li} { continue } set maxid -999. foreach g [lrange $CpB(LNDG) 1 end] { set nseq [llength [set CpB($g)]] if {$nseq < 2} {continue} set mean 0.0 foreach n1 [set CpB($g)] { set pc [set CBPCI($orph,$n1)] set mean [expr {$mean+$pc}] } puts -nonewline "tg $g [format %10.6f $mean] $nseq" set mean [expr {$mean/double($nseq)}] puts " [format %8.6f $mean]" if {$mean > $maxid} { set maxid $mean set gb $g } } if {$maxid > 0.3} { lappend CpB($gb) $orph lappend Li $i puts "ITEM adding $orph [string range $gb 5 end] [format %8.6f $maxid]" } else { set j -1 foreach orp2 $Lorph { incr j if {$i != $j && $j ni $Li && [set CBPCI($orph,$orp2)] > 0.3} { lappend Li $i $j set newg "Group$iGrp" lappend CpB(LNDG) $newg lappend CpB($newg) $orph $orp2 puts "grouping [set CpB($newg)] in $newg" incr iGrp break } } } update } if {$Li != {} } { set Li [lsort -unique -integer -decreasing $Li] foreach i $Li { set Lorph [lreplace $Lorph $i $i] } } puts "True Orphans : $Lorph" foreach n $Lorph { set new "Group$iGrp" lappend CpB(LNDG) $new set CpB($new) $n incr iGrp } puts "DEBITEM ngroupsfinal" puts "ITEM ng [expr {[llength $CpB(LNDG)]-1}]" foreach g [lsort [lrange $CpB(LNDG) 1 end]] { puts "DEBITEM groupesfin[string range $g 5 end]" foreach n [set CpB($g)] { puts "ITEM $n" } } return } proc OrthoBlastP {Nom {Orga ""} {OrgaOK ""}} { global OrthoBlastP global RepertoireDuGenome Wup "returns its rank (starting 1) if Orga has an expect < 0.001 in BlastP, 0 if no absent" Wup "returns OrthoBlastPNonValide if blastp not yet analyzed" if {$OrgaOK=="OrgaOK"} { set OrgaOK 1 } else { set OrgaOK 0 } if {$Orga !="" } { if {$OrgaOK} { set Organisme $Orga } else { set Organisme [Glossaire $Orga Complet] } regsub " " $Organisme "_" Organisme if {$Organisme==""} { return 0 } } else { set Organisme "LaListeMerci" } set NO "$Nom,$Organisme" if { [info exists OrthoBlastP($NO)]} { return [set OrthoBlastP($NO)] } set FichierOBP "$RepertoireDuGenome/fiches/orthoblastp" if { ! [info exists OrthoBlastP("EstCharge")]} { set OrthoBlastP("EstCharge") "EstCharge" if { ! [file exists $FichierOBP]} { if { ! [info exists QuestionDejaPoseePourCreeOrthoBlastP]} { set QuestionDejaPoseePourCreeOrthoBlastP 1 if {[OuiOuNon "Do I create \n$FichierOBP\n ?" 0]} { CreeOrthoBlastP } else { return "OrthoBlastPNonValide" } } else { return "OrthoBlastPNonValide" } } Espionne "Je charge $FichierOBP" set LesOrgasDeBlastP {} foreach Ligne [LesLignesDuFichier $FichierOBP] { set Liste [split $Ligne " "] set NomLu [lindex $Liste 0] set ieme 1 set OrthoBlastP($NomLu,LaListeMerci) {} foreach OrgaLu [lrange $Liste 1 end] { lappend OrthoBlastP($NomLu,LaListeMerci) $OrgaLu if { ! [info exists DejaVu($OrgaLu)]} { lappend LesOrgasDeBlastP $OrgaLu set DejaVu($OrgaLu) 1 } set NOlu "$NomLu,$OrgaLu" set OrthoBlastP($NOlu) $ieme } } set OrthoBlastP(LaListeMerci,LaListeMerci) $LesOrgasDeBlastP } if {[info exists OrthoBlastP($NO)]} { return [set OrthoBlastP($NO)] } else { return 0 } } proc OrthoTBlastN {Nom Orga} { global RepertoireDuGenome global OrthoTBlastN global LesOrgasDeTBlastN global NotreOS global QuestionDejaPoseePourCreeOrthoTBlastN set NO "$Nom,$Orga" if { [info exists OrthoTBlastN($NO)]} { return [set OrthoTBlastN($NO)] } set FichierOTBN "$RepertoireDuGenome/fiches/orthotblastn" if {$Nom == "LaListe"} { set RendreLaListe 1 } else { set RendreLaListe 0 } if { ! [info exists OrthoTBlastN("EstCharge")]} { set OrthoTBlastN("EstCharge") "EstCharge" if { ! [file exists $FichierOTBN]} { if { ! [info exists QuestionDejaPoseePourCreeOrthoTBlastN]} { set QuestionDejaPoseePourCreeOrthoTBlastN 1 if {[OuiOuNon "Do I create \n$FichierOTBN\n ?"]} { CreeOrthoTBlastN } else { return "OrthoTBlastNOrgaNonValide" } } else { return "OrthoTBlastNOrgaNonValide" } } Espionne "Je charge $FichierOTBN" foreach Ligne [LesLignesDuFichier $FichierOTBN] { set Liste [split $Ligne " "] set NomLu [lindex $Liste 0] set ListeOrgaMaPosTaPos [lrange $Liste 1 end] foreach {OrgaLu MaPos TaPos} $ListeOrgaMaPosTaPos { if {[info exists OrthoTBlastN($NomLu,$OrgaLu)]} { continue } if { ! [info exists DejaVu($OrgaLu)]} { lappend LesOrgasDeTBlastN $OrgaLu set DejaVu($OrgaLu) 1 } set NOlu "$NomLu,$OrgaLu" set OrthoTBlastN($NOlu) "$MaPos:$TaPos" } } } if {$RendreLaListe} { return $LesOrgasDeTBlastN } if {[info exists OrthoTBlastN($NO)]} { return [set OrthoTBlastN($NO)] } else { return "-1:-1" } } proc OrthographeCanonique {Texte} { global OrthographeCanonique global OrthographeCanoniqueInverse set TEXTE [string trim [string toupper $Texte]] regsub -all " " $TEXTE "_" TEXTE if {[info exists OrthographeCanonique($TEXTE)]} { return [set OrthographeCanonique($TEXTE)] } if { ! [info exists OrthographeCanonique]} { set OrthographeCanonique(XENOPUS.) "Xenopus laevis" set OrthographeCanonique(METHANOTHERMOBACTER_THERMAUTOTROPHICUS) "Methanobacterium thermoautotrophicum" set OrthographeCanonique(M.THERMAUTOTROPHICUS) "Methanobacterium thermoautotrophicum" # set OrthographeCanonique(DANIO_RERIO) "Brachydanio rerio" # set OrthographeCanonique(DANI.RERIO) "Brachydanio rerio" # set OrthographeCanonique(D.RERIO) "Brachydanio rerio" if {[lsearch -exact [LesGenomesComplets] "Buchnera aphidicola"]<0} { set OrthographeCanonique(BUCHNERA_SP) "Buchnera aphidicola" set OrthographeCanonique(BUCHNERA_SP.) "Buchnera aphidicola" set OrthographeCanonique(BUCH.SP) "Buchnera aphidicola" set OrthographeCanonique(B.SP) "Buchnera aphidicola" } set OrthographeCanonique(UREAPLASMA_PARVUM) "Ureaplasma urealyticum" set OrthographeCanonique(UREA.PARVU) "Ureaplasma urealyticum" set OrthographeCanonique(U.PARVUM) "Ureaplasma urealyticum" set OrthographeCanonique(RHIZOBIUM_MELILOTI) "Sinorhizobium meliloti" set OrthographeCanonique(RHIZ.MELIL) "Sinorhizobium meliloti" set OrthographeCanonique(R.MELILOTI) "Sinorhizobium meliloti" set OrthographeCanonique(RHIZOBIUM_LOTI) "Mesorhizobium loti" set OrthographeCanonique(RHIZ.LOTI) "Mesorhizobium loti" set OrthographeCanonique(R.LOTI) "Mesorhizobium loti" set OrthographeCanonique(SULFOLOBUS_TOKADAII) "Sulfolobus tokodaii" set OrthographeCanonique(S.TOKADAII) "Sulfolobus tokodaii" set OrthographeCanonique(SULF.TOKAD) "Sulfolobus tokodaii" set OrthographeCanonique(SALMONELLA_TYPHI) "Salmonella enterica" set OrthographeCanonique(S.TYPHI) "Salmonella enterica" set OrthographeCanonique(THERMOPLASMA_VOLCANICUM) "Thermoplasma volcanium" set OrthographeCanonique(T.VOLCANICUM) "Thermoplasma volcanium" # set OrthographeCanonique(THERMUS_THERMOPHILUS) "Thermus aquaticus" # set OrthographeCanonique(THER.THERM) "Thermus aquaticus" # set OrthographeCanonique(T.THERMOPHILUS) "Thermus aquaticus" foreach {BAD Good} [array get OrthographeCanonique] { if { ! [regexp "_" $BAD]} { continue } regsub "_" $BAD " " BAD set Bad "[string index $BAD 0][string tolower [string range $BAD 1 end]]" lappend OrthographeCanoniqueInverse($Good) $Bad } } if {[info exists OrthographeCanonique($TEXTE)]} { return [set OrthographeCanonique($TEXTE)] } return $Texte } proc Orthologs {Nom} { return [split [ExtraitInfo $Nom "Orthologs:"] " "] } proc OrthologueDansTBlastN {Nom Orga {OrgaEstUneBanque 0}} { global RepertoireDuGenome if {$OrgaEstUneBanque} { set Banque $Orga } else { set Banque "genomes" } set DebutNom [Box $Nom debut] set FinNom [Box $Nom fin] set Fichier "$RepertoireDuGenome/tblastn$Banque/$Nom" set ListeDesOrthologues [ChaqueProteineDuTBlastN $Fichier "AvecLaSeq"] if {[llength $ListeDesOrthologues] == 0 } { return "Mort-$Banque-nul" } set OrthoTBN 0 set nStars 0 set YavaitQuelquUn 0 foreach Homo $ListeDesOrthologues { set lHomo [split $Homo "\t"] set i -1 set Nom [lindex $lHomo [incr i]] set nCops [lindex $lHomo [incr i]] set nCopsSeq [lindex $lHomo [incr i]] set BanqueId [lindex $lHomo [incr i]] set OrgaHomo [lindex $lHomo [incr i]] set Score [lindex $lHomo [incr i]] set Expect [lindex $lHomo [incr i]] set DebutQRel [lindex $lHomo [incr i]] set FinQRel [lindex $lHomo [incr i]] set DebutSbjct [lindex $lHomo [incr i]] set FinSbjct [lindex $lHomo [incr i]] set SeqSbjct [lindex $lHomo [incr i]] set LongSbjct [expr abs($FinSbjct-$DebutSbjct)+1] set DebutQuery [expr $DebutQRel+$DebutNom-1] set FinQuery [expr $FinQRel+$DebutNom-1] if {$Orga != $OrgaHomo} { continue } set YavaitQuelquUn 1 set SeuilDeOrthoTBN 0.001 if {[expr $Expect > $SeuilDeOrthoTBN]} { break } if {[llength [split $SeqSbjct "*"]] > 1} { incr nStars } else { return "Orthologue TBlastN dans [Glossaire $Orga Court] a $Expect" } } if { $nStars != 0 } { foreach OrgaProche [LesOrganismesTresProches] { if {$Orga == $OrgaProche && [regexp "oui confirme" [ExtraitInfo $Nom $OrgaProche]]} { return "Orthologue TBlastN dans [Glossaire $Orga Court] a $Expect par decret" } } return "Mort-$Orga-$nStars-*" } if { $YavaitQuelquUn } {return "Mort-$Orga-loin" } return "Mort-$Orga-vide" } proc OsCanon {Ligne} { global OsCanon while { ! [regexp { +([A-Z][a-z\.]+ [a-z\.]+)( [a-z]* *)*$} $Ligne Match OS]} { set Trouve 0 foreach OldOS [array names OsCanon] { if { [set I [string last $OldOS $Ligne]]>10 } { set Better [string range $Ligne 0 [expr $I-1]] append Better $OsCanon($OldOS) set Ligne $Better set Trouve 1 break } } if {$Trouve} { continue } set Better [Entre $Ligne] set I 0 foreach C [split $Ligne ""] { if {[string index $Better $I]==$C} { incr I ; continue } break } set NewOS [string range $Better $I end] set OldOS [string range $Ligne $I end] set OsCanon($OldOS) $NewOS set Ligne $Better } regsub { +([A-Z][a-z]+ [a-z\.]+)( [a-z\.]* *)*$} $Ligne " OS=$OS" Ligne return $Ligne } proc OsOcParTaxNCBI {{Action ""}} { set LeTout {} foreach Name [TaxNCBI "ListOf" "Names"] { set Class [TaxClass $Name "All" "Forward" "Name"] lappend LeTout $Name $Class } return [SauveLesLignes $LeTout dans "[TaxDir]/OsOcParTaxNCBI.txt"] } proc OteConsensusGlobal {} { global LNDG global ListeDesConsensusDuGroupe global SDG global NombreDeGroupes set DernierGroupe [lindex $LNDG end] if {$DernierGroupe != "grise"} {return} set LNDG [lreplace $LNDG end end] unset ListeDesConsensusDuGroupe($DernierGroupe) set NombreDeGroupes [llength $LNDG] return } proc OteLesBlancsEnTrop {r} { set r [string trim $r] regsub -all { +} $r " " r return $r } proc OteSqDivergentes {fic1 fic2} { # procedure utilisee au moment de la comparaison des clusters obtenus # avec les differentes methodes de selection des sequences # Necessaire pour utiliser le programme aRandIndex set Lfic1 [LesLignesDuFichier $fic1] set Lfic2 [LesLignesDuFichier $fic2] set Lfic2U [toUpperList $Lfic2] set ff1 [file tail $fic1] set LNewFic1 {} set NewFic1 "/usr/tmp/New$ff1" set f [open "$NewFic1" w] set i 0 set j 0 set k 0 foreach l $Lfic1 { if {[regexp -nocase "Number" $l]} { lappend LNewFic1 $l continue } if {$l == ""} { set tab($i) $j incr i lappend LNewFic1 $l continue } if {[regexp "Cluster" $l]} { set j 0 lappend LNewFic1 $l continue } set lU [string toupper $l] if {[lsearch $Lfic2U $lU] != -1} { incr j incr k lappend LNewFic1 $lU } } # le tableau contient le nombre de sq dans chaque cluster set tab($i) $j # c est un compteur de clusters set c 0 # certaines sequences ont ete otees du fichier # il faut remettre a jour la taille des clusters foreach nl $LNewFic1 { if {![regexp "Cluster" $nl]} { puts $f $nl } else { incr c set n [string first "=" $nl] set nl [string range $nl 0 $n] set nnl "${nl}[set tab($c)]" puts $f $nnl } } close $f # return $NewFic1 return $k } proc OteSuperfluPourFetch {Ligne} { set Ligne [string trim $Ligne] regsub {^[0-9]+ +} $Ligne "" Ligne regsub {^>} $Ligne "" Ligne regsub -all ";" $Ligne " " Ligne regsub {.*\. \:} $Ligne " " Ligne regsub -nocase "chromosome" $Ligne "" Ligne regsub -nocase " contig " $Ligne ":" Ligne regsub -nocase {^[a-z][a-z]\|} $Ligne "" Ligne regsub -all {\|} $Ligne " " Ligne return $Ligne } proc OuATapeBlastX {Fichier {QuoiRetourner ""}} { set Nom [file tail $Fichier] if {$QuoiRetourner==""} { set QuoiRetourner "ListeDesPositions" } if {[Enterre $Nom] } { return {} } set DebutNom [Box $Nom debut] set FinNom [Box $Nom fin] set ListeDesHomologues [ChaqueProteineDuBlastX $Fichier] if {$ListeDesHomologues == {} } { return {}} catch {unset ListeDesDupliques} catch {unset ListeDesPositions} foreach Homo $ListeDesHomologues { set lHomo [split $Homo "\t"] set i -1 set Nom [lindex $lHomo [incr i]] set nCops [lindex $lHomo [incr i]] set nCopsSeq [lindex $lHomo [incr i]] set BanqueId [lindex $lHomo [incr i]] set Orga [lindex $lHomo [incr i]] set Score [lindex $lHomo [incr i]] set Expect [lindex $lHomo [incr i]] set DebutQRel [lindex $lHomo [incr i]] set FinQRel [lindex $lHomo [incr i]] set DebutSbjct [lindex $lHomo [incr i]] set FinSbjct [lindex $lHomo [incr i]] set LongSbjct [expr abs($FinSbjct-$DebutSbjct)+1] set DebutQuery [expr $DebutQRel+$DebutNom-1] set FinQuery [expr $FinQRel+$DebutNom-1] set ABC(0) "A" set ABC(1) "B" set ABC(2) "C" set DEF(0) "D" set DEF(1) "E" set DEF(2) "F" if {$DebutQuery < $FinQuery} { set OrientQuery "F" set Frame [set ABC([expr ($DebutQuery-1)%3])] } else { set OrientQuery "R" set Frame [set DEF([expr ($DebutQuery-1)%3])] } set BeauLongSbjct [format "%4d" $LongSbjct] set BeauDebut [format "%8d" $DebutQuery] set BeauFin [format "%8d" $FinQuery] set BelleBanqueId [format "%-20s" [string trim $BanqueId]] set UnSegment "$Nom $OrientQuery $Frame $BelleBanqueId $BeauDebut $BeauFin $BeauLongSbjct $Expect" lappend LesSegments $UnSegment lappend ListeDesPositions [expr ($DebutQuery+$FinQuery)/2] lappend ListeDesPositions [expr ($DebutSbjct+$FinSbjct)/2] lappend ListeDesOrganismes $BanqueId if {$QuoiRetourner == "ListeDesDupliques"} { set Touches [QuiEstLa $DebutSbjct $FinSbjct $Banque] catch {unset Eux} foreach Lui $Touches { if {$Lui == $Nom} { continue } if {[Decede $Lui]} { continue } set DebutLui [Box $Lui debut] set FinLui [Box $Lui fin] set Tri [lsort -integer [list $DebutLui $FinLui $DebutSbjct $FinSbjct]] set Recouvrement [expr [lindex $Tri 2]-[lindex $Tri 1]+1] set TauxDeRecouvrement [expr (1.0*$Recouvrement)/$LongSbjct] if { [expr $TauxDeRecouvrement < 0.1] } { continue } lappend Eux "$Lui" } if {[info exists Eux]} { lappend ListeDesDupliques $Eux } else { } if {$Touches == {}} { } } } return [lsort -increasing -command CompareLesExpectsDesSegments $LesSegments] if {$QuoiRetourner == "ListeDesDupliques"} { if {[info exists ListeDesDupliques]} { return $ListeDesDupliques } else { return {} } } if {$QuoiRetourner == "ListeDesPositions"} { if {[info exists ListeDesPositions]} { return $ListeDesPositions } else { return {} } } if {$QuoiRetourner == "ListeDesOrganismes"} { if {[info exists ListeDesOrganismes]} { return $ListeDesOrganismes } else { return {} } } } proc OuATapeTBlastN {Fichier Banque QuoiRetourner} { global PrecedentNom PrecedenteListe if {$QuoiRetourner=="ListeDesOrganismes"} { set QuoiRetourner "LesOrgas" } if {$QuoiRetourner=="ListeDesPositions" } { set QuoiRetourner "LesHits" } if {$QuoiRetourner=="ListeDesPositionsVieux" } { set QuoiRetourner "LesHitsVieux" } Wup "Banque ne sert plus !" set Nom [file tail $Fichier] set DebutNom [Box $Nom debut] set FinNom [Box $Nom fin] if {[info exists PrecedentNom] && $PrecedentNom==$Nom} { set ListeDesHomologues $PrecedenteListe } else { set ListeDesHomologues [ChaqueProteineDuTBlastN $Fichier] } set PrecedentNom $Nom set PrecedenteListe $ListeDesHomologues if {$ListeDesHomologues == {} } { return {}} catch {unset ListeDesDupliques} catch {unset ListeDesPositions} set LesBeauxHits {} foreach Homo $ListeDesHomologues { set lHomo [split $Homo "\t"] set i -1 set Nom [lindex $lHomo [incr i]] set nCops [lindex $lHomo [incr i]] set nCopsSeq [lindex $lHomo [incr i]] set BanqueId [lindex $lHomo [incr i]] set Orga [lindex $lHomo [incr i]] set Score [lindex $lHomo [incr i]] set Expect [lindex $lHomo [incr i]] set DebutQRel [lindex $lHomo [incr i]] set FinQRel [lindex $lHomo [incr i]] set DebutSbjct [lindex $lHomo [incr i]] set FinSbjct [lindex $lHomo [incr i]] set LongSbjct [expr abs($FinSbjct-$DebutSbjct)+1] set DebutQuery [expr $DebutQRel+$DebutNom-1] set FinQuery [expr $FinQRel+$DebutNom-1] if { ! [info exists DejaVu($Orga)]} { set DejaVu($Orga) 1 lappend LesBeauxOrgas $Orga } lappend LesBeauxHits " " lappend LesHitsVieux [expr ($DebutQuery+$FinQuery)/2] lappend LesHitsVieux [expr ($DebutSbjct+$FinSbjct)/2] } if {$QuoiRetourner=="LesHits"} { return $LesBeauxHits } FaireLire "You use an old version of Gscope for OuATapeTBlastN" if {$QuoiRetourner=="LesOrgas"} { return $LesBeauxOrgas } if {$QuoiRetourner=="LesHitsVieux"} { return $LesHitsVieux } return "" } proc OuATapeTBlastX {Fichier Banque QuoiRetourner} { FaireLire "OuATapeTBlastX est encore a developper" set Nom [file tail $Fichier] Wup " pour MS00068MS00069" if {[regexp -nocase {([A-Z]+[0-9]+)[A-Z]} $Nom Match VraiNom] } { set Nom $VraiNom } if {[Enterre $Nom] } { return {} } set DebutNom [Box $Nom debut] set FinNom [Box $Nom fin] set ListeDesHomologues [ChaqueProteineDuTBlastX $Fichier] if {$ListeDesHomologues == {} } { return {}} catch {unset ListeDesDupliques} catch {unset ListeDesPositions} foreach Homo $ListeDesHomologues { set lHomo [split $Homo "\t"] set i -1 set Nom [lindex $lHomo [incr i]] set nCops [lindex $lHomo [incr i]] set nCopsSeq [lindex $lHomo [incr i]] set BanqueId [lindex $lHomo [incr i]] set Orga [lindex $lHomo [incr i]] set Score [lindex $lHomo [incr i]] set Expect [lindex $lHomo [incr i]] set DebutQRel [lindex $lHomo [incr i]] set FinQRel [lindex $lHomo [incr i]] set DebutSbjct [lindex $lHomo [incr i]] set FinSbjct [lindex $lHomo [incr i]] set LongSbjct [expr abs($FinSbjct-$DebutSbjct)+1] set DebutQuery [expr $DebutQRel+$DebutNom-1] set FinQuery [expr $FinQRel+$DebutNom-1] set ABC(0) "A" set ABC(1) "B" set ABC(2) "C" set DEF(0) "D" set DEF(1) "E" set DEF(2) "F" if {$DebutQuery < $FinQuery} { set OrientQuery "F" set Frame [set ABC([expr ($DebutQuery-1)%3])] } else { set OrientQuery "R" set Frame [set DEF([expr ($DebutQuery-1)%3])] } set BeauLongSbjct [format "%4d" $LongSbjct] set BeauDebut [format "%8d" $DebutQuery] set BeauFin [format "%8d" $FinQuery] set BelleBanqueId [format "%-20s" [string trim $BanqueId]] set UnSegment "$Nom $OrientQuery $Frame $BelleBanqueId $BeauDebut $BeauFin $BeauLongSbjct $Expect" lappend LesSegments $UnSegment lappend ListeDesPositions [expr ($DebutQuery+$FinQuery)/2] lappend ListeDesPositions [expr ($DebutSbjct+$FinSbjct)/2] lappend ListeDesOrganismes $BanqueId if {$QuoiRetourner == "ListeDesDupliques"} { set Touches [QuiEstLa $DebutSbjct $FinSbjct $Banque] catch {unset Eux} foreach Lui $Touches { if {$Lui == $Nom} { continue } if {[Decede $Lui]} { continue } set DebutLui [Box $Lui debut] set FinLui [Box $Lui fin] set Tri [lsort -integer [list $DebutLui $FinLui $DebutSbjct $FinSbjct]] set Recouvrement [expr [lindex $Tri 2]-[lindex $Tri 1]+1] set TauxDeRecouvrement [expr (1.0*$Recouvrement)/$LongSbjct] if { [expr $TauxDeRecouvrement < 0.1] } { continue } lappend Eux "$Lui" } if {[info exists Eux]} { lappend ListeDesDupliques $Eux } else { } if {$Touches == {}} { } } } return [lsort -increasing -command CompareLesExpectsDesSegments $LesSegments] if {$QuoiRetourner == "ListeDesDupliques"} { if {[info exists ListeDesDupliques]} { return $ListeDesDupliques } else { return {} } } if {$QuoiRetourner == "ListeDesPositions"} { if {[info exists ListeDesPositions]} { return $ListeDesPositions } else { return {} } } if {$QuoiRetourner == "ListeDesOrganismes"} { if {[info exists ListeDesOrganismes]} { return $ListeDesOrganismes } else { return {} } } } proc OuEstPymol {} { global env global tcl_platform set p [set env(PATH)] set adrPY 0 if {$tcl_platform(platform) == "windows"} { set adrPy [FindTcl "pymolwin.exe" "c:/Progra~1"] append adrPy " -tqp" } if {$tcl_platform(platform) == "unix"} { set YaPPy [regexp -nocase "pymol" $p] if {$YaPPy} {set adrPy "pymol.exe -tqp"} } return "$adrPy -tqp" } proc OuOnEnEst {Nom} { set FichierNuctfa "[RepertoireDuGenome]/nuctfa/$Nom" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set FichierInfo "[RepertoireDuGenome]/infos/$Nom" set FichierMsf "[RepertoireDuGenome]/cluspack/$Nom" set FichierMacsim "[RepertoireDuGenome]/macsimXml/$Nom" set FichierEst "[RepertoireDuGenome]/blastnest-mouse/$Nom" set FichierGoAnno "[RepertoireDuGenome]/GeneOntology/${Nom}.xml" set FichierAdnc "[RepertoireDuGenome]/blastnSuperSouris/$Nom" set LesFichierTrans [glob -nocomplain "[RepertoireDuGenome]/transcriptomique/cluster/${Nom}-*"] if {[file exists $FichierNuctfa] && ![file exists $FichierProttfa]} { set leretour "we are looking for the protein" } if {[file exists $FichierProttfa] && ![file exists $FichierInfo]} { set leretour "we are looking for general information" } if {[file exists $FichierInfo] && ![file exists $FichierMsf]} { set leretour "we are creating Multiple Alignment" } if {[file exists $FichierMsf] && ![file exists $FichierMacsim]} { set leretour "we are creating MACSIMS" } if {[file exists $FichierMacsim] && ![file exists $FichierEst]} { set leretour "we are looking EST" } if {[file exists $FichierEst] && ![file exists $FichierGoAnno]} { set leretour "we are launching GoAnno" } if {[file exists $FichierGoAnno] && ![file exists $FichierAdnc]} { set leretour "we are looking retina ADNc" } if {[file exists $FichierAdnc]} { set leretour "we are looking transcriptomic data" } if {[file exists [lindex $LesFichierTrans 0]]} { set leretour "everything is finished" } return $leretour } proc OuSontLesMutations {{GetWhat ""} {AllOrA ""} {Conservation ""} {Order ""} {Action ""}} { #rR-Permet de voir en gros comment sont réparties les mutations #rR-OuSontLesMutations Help (Help ... W means Wildtype (source), M means Mutation (destination)) #rR OuSontLesMutations WM (See howmany times each AA appears as source and destination of a mutation) #rR OuSontLesMutations Types (See howmany times each Type of AA appears as source and destination of a mutation) #rR OuSontLesMutations #rR OuSontLesMutations Modules All (Number of mutations per structural module for all systems) #rR OuSontLesMutations FromWtoM All (Number of occurrences of each type of substitutions for all systems) #rR OuSontLesMutations FromWtoM All All-Cons (Number of occurrences of each type of substitutions for all systems on conserved positions) #rR OuSontLesMutations FromWtoM All IdenCons (Number of occurrences of each type of substitutions for all systems on 100% conserved positions) #rR OuSontLesMutations FromWtoM All ConsCons (Number of occurrences of each type of substitutions for all systems on >80% conserved positions) #rR OuSontLesMutations FromWtoM All SimiCons (Number of occurrences of each type of substitutions for all systems on physicochemically conserved positions) #rR OuSontLesMutations FromWtoM All NoCons (Number of occurrences of each type of substitutions for all systems on non conserved positions) #rR OuSontLesMutations #rR OuSontLesMutations Modules D (Number of mutations per structural module) for Any AA #rR OuSontLesMutations FromWtoM D (Number of occurrences of each type of substitutions) for Any AA #rR OuSontLesMutations FromWtoM D All-Cons (Number of occurrences of each type of substitutions on conserved positions) for Any AA #rR OuSontLesMutations FromWtoM D IdenCons (Number of occurrences of each type of substitutions on 100% conserved positions) for Any AA #rR OuSontLesMutations FromWtoM D ConsCons (Number of occurrences of each type of substitutions on >80% conserved positions) for Any AA #rR OuSontLesMutations FromWtoM D SimiCons (Number of occurrences of each type of substitutions physicochemically conserved positions) for Any AA #rR OuSontLesMutations FromWtoM D NoCons (Number of occurrences of each type of substitutions on non conserved positions) for Any AA if {$Action=="-"} { set Action "" } if {$Order=="-"} { set Order "" } if {$Conservation=="-"} { set Conservation "" } if {$AllOrA=="-"} { set AllOrA "" } if {$GetWhat=="-"} { set GetWhat "" } if {$Action==""} { set Action "Show" } if {[regexp -nocase "ars" $AllOrA]} { set AllOrA [MSP Syn [string toupper $AllOrA] A] } if {$GetWhat==""} { set GetWhat "Help" } if {$GetWhat=="Help"} { set LeHelp {} set LeHelpText {} foreach Ligne [split [info body OuSontLesMutations] "\n"] { if { ! [regexp "#rR +OuSont" $Ligne]} { continue } regsub "#rR " $Ligne "" Text lappend LeHelpText $Text regsub "#rR " $Ligne {http://lbgi.fr/wscoperr?MSP\&} Ligne regsub -all { +} $Ligne " " Ligne set Ligne [string trim $Ligne] set Ref $Ligne regsub { +\(.*$} $Ref "" Ref regsub -all " " $Ref {\&} Ref lappend LeHelp $Ligne regsub {^[^&]+&} $Ligne "" Text lappend LesRefText $Ref $Text } if {[PourWscope]} { if {$Action=="GetAsText"} { return [join $LeHelpText "\n"] } return [Html_ListOfRefs $LesRefText "

    Où sont les mutations ?

    "] } if {$Action=="GetAsText"} { return [join $LeHelp "\n"] } return [AfficheListe $LeHelp] } #rR On met ConsLocal car on a aussi stocké les conservations en coordonnées locales set ConsLocal $Conservation if {$ConsLocal!=""} { regsub -nocase "NoCons" $ConsLocal "No" ConsLocal ;#rR car il serait logique de pouvoir mettre NoConservation regsub -nocase "AllCons" $ConsLocal "All" ConsLocal ;#rR car il serait logique de pouvoir mettre AllConservation if {[regexp -nocase {^(Iden|Simi|Cons|No)} $ConsLocal Match]} { set ConsLocal "[string totitle $Match]Local" } else { set ConsLocal "AllLocal" } } if {$AllOrA==""} { set AllOrA "All" } #rR WM WM WM WM WM WM WM WM WM WM WM WM WM WM WM WM WM WM WM if {$GetWhat=="WM"} { set LaSortie {} set AllA $AllOrA if {$AllOrA=="All"} { set AllA [MSP All ListOf A] } foreach A $AllA { set NbW [MSP Mut $A All-WCount] set NbM [MSP Mut $A All-MCount] lappend LaSortie [format "%s %2d %2d" $A $NbW $NbM] } if {$Action=="GetAsText"} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie "" $GetWhat] } #rR Types Types Types Types Types Types Types Types Types Types Types Types Types Types Types set LaSortie {} foreach Type [AAType Types] { set M 0 set NbW 0 set NbM 0 set Size 0 set Compo "" foreach A [AAType $Type] { incr Size incr NbW [MSP Mut $A All-WCount] incr NbM [MSP Mut $A All-MCount] append Compo $A } set PcW [expr $NbW/$Size] set PcM [expr $NbM/$Size] lappend LaSortie [format "%2d %2d %-10s %-6s" $NbW $NbM $Type $Compo] } if {$GetWhat=="Types"} { if {$Action=="GetAsText"} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie "" "Types"] } #rR Modules Modules Modules Modules Modules Modules Modules Modules Modules Modules Modules set LaSortie {} if {[info exists NbMutIn]} { array unset NbMutIn } set AllA $AllOrA if {$AllOrA=="All"} { set AllA [MSP Syn ListOf A] } foreach A $AllA { foreach Name [lsort [MspModule $A ListOf Name]] { if { ! [info exists NbMutIn($Name)]} { set NbMutIn($Name) 0 ; set MutIn($Name) {}} foreach Pos [lsort -unique [MSP Mut $A ListOfPos]] { foreach Deb [MspModule $A $Name Deb] Fin [MspModule $A $Name Fin] { if {$Deb<=$Pos && $Pos<=$Fin} { incr NbMutIn($Name) lappend MutIn($Name) $A } } } } } foreach K [lsort [array names NbMutIn]] { set V $NbMutIn($K) set As {} set AAListe "" if {$AllOrA=="All" && $NbMutIn($K)>0} { set As [lsort -unique $MutIn($K)] set AAListe "([join $As {}])" } lappend LaSortie [format "%3d %s" $V "mutations in $K $AAListe"] } set LaSortie [lsort -decreasing $LaSortie] if {$GetWhat=="Modules"} { if {$Action=="GetAsText"} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie "" "Modules_${AllOrA}"] } #rR FromWtoM FromWtoM FromWtoM FromWtoM FromWtoM FromWtoM FromWtoM FromWtoM FromWtoM set LaSortie {} set LesStat {} if {[regexp -nocase "Alpha" $Order]} { set LesL [MSP All ListOf A] } else { set LesL [AAType ListOfA] } set LesC $LesL if {$AllOrA=="All"} { set LaLigne [list " -All-"] } else { set System [MSP Syn $A System] set LaLigne [list [format " %-5s" $System]] } foreach C $LesC { lappend LaLigne " $C" } lappend LaSortie [join $LaLigne ""] set LaLigne [list " "] foreach C $LesC { if {$ConsLocal!=""} { set MCount 0 set AllA $AllOrA if {$AllOrA=="All"} { set AllA [MSP All ListOf A] } foreach A $AllA { foreach L [MSP All ListOf A] { foreach PosMut [MSP Mut $A $L$C-Pos] { foreach PosCon [MSP Con $A $ConsLocal] { if {$PosMut==$PosCon} { incr MCount } } } } } } else { set MCount [MSP Mut $AllOrA $C-MCount] if {$MCount==""} { set MCount 0 } } lappend LaLigne [format "%3d" $MCount] } lappend LaSortie [join $LaLigne ""] set LaLigne {} foreach L $LesL { set LaLigne [list " $L "] if {$ConsLocal!=""} { set WCount 0 set AllA $AllOrA if {$AllOrA=="All"} { set AllA [MSP All ListOf A] } foreach A $AllA { foreach C $LesC { foreach PosMut [MSP Mut $A $L$C-Pos] { foreach PosCon [MSP Con $A $ConsLocal] { if {$PosMut==$PosCon} { incr WCount } } } } } } else { set WCount [MSP Mut $AllOrA $L-WCount] } if {$WCount==""} { set WCount 0 } lappend LaLigne [format "%3d" $WCount] foreach C $LesC { set T " " if {$ConsLocal!=""} { set NbCons 0 set AllA $AllOrA if {$AllOrA=="All"} { set AllA [MSP All ListOf A] } foreach A $AllA { foreach PosMut [MSP Mut $A $L$C-Pos] { foreach PosCon [MSP Con $A $ConsLocal] { if {$PosMut==$PosCon} { incr NbCons if { ! [info exists MemoNbConsMut($A)]} { set MemoNbConsMut($A) 0 } incr MemoNbConsMut($A) } } } } if {$NbCons!=0} { set T [format "%3d" $NbCons] } } else { if {$L!=$C} { set WMCount [MSP Mut $AllOrA $L$C-Count] if {$WMCount!=""} { set T [format "%3d" $WMCount] } } } lappend LaLigne $T } lappend LaSortie [join $LaLigne ""] } lappend LaSortie "" set AllA $AllOrA if {$AllOrA=="All"} { set AllA [MSP All ListOf A] } foreach A $AllA { set Systeme [MSP Syn $A System] set SeqLength [MSP Syn $A SeqLength] if {$SeqLength==""} { continue } set NbMut [llength [MSP Mut $A ListOfPos]] set PcMut [format %4.1f [expr (100.*$NbMut)/$SeqLength]] if {$ConsLocal=="AllLocal"} { set NbConsTot [llength [MSP Con $A $ConsLocal]] set PcConsTot [expr (100*$NbConsTot)/$SeqLength] if {[info exists MemoNbConsMut($A)]} { set NbConsMut $MemoNbConsMut($A) } else { set NbConsMut 0 } set PcConsMut "-" if {$NbConsTot>0} { set PcConsMut [format %4.1f [expr (100.*$NbConsMut)/$NbConsTot]] } lappend LesStat "[format %-5s $Systeme] SeqLength:[format %4d $SeqLength] NbConsTot:[format %3d $NbConsTot] ([format %2d $PcConsTot]%) NbMut:[format %2d $NbMut] ($PcMut%) NbConsMut:$NbConsMut ($PcConsMut%)" } else { lappend LesStat "[format %-5s $Systeme] SeqLength:[format %4d $SeqLength] NbMut:$NbMut" } } LConcat LaSortie $LesStat if {$Action=="GetAsText"} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie "" "FromWtoM_${AllOrA}_${Conservation}_${Order}"] } proc OuSontLesProcedures {{aFichierContenant ""}} { global GscopeDir GscopeContrib if {$aFichierContenant!=""} { upvar $aFichierContenant FichierContenant } set LesFichiersTcl [glob $GscopeDir/gscope*.tcl $GscopeContrib/*/*.tcl /home/moumou/ordali/ordali_*.tcl] set ToutesLesNomProc {} foreach Fichier $LesFichiersTcl { if {[regexp "obsolete" $Fichier]} { continue } set LesNomProc [LesProceduresDuFichier $Fichier FichierContenant] LConcat ToutesLesNomProc $LesNomProc } foreach NomProc $ToutesLesNomProc { if {[info exists DejaVu($NomProc)]} { # Espionne [format "%-30s %s" $NomProc [set FichierContenant($NomProc)]] } set DejaVu($NomProc) 1 } return $ToutesLesNomProc } proc OuSuisJe {} { set Ici [info script] Espionne $Ici return [Realpath $Ici] } proc Oue {Texte} { regsub -all "_" $Texte " " Texte set LesOKs {} foreach P [LesProceduresExistantes] { if {[regexp -nocase $Texte [info body $P]]} { lappend LesOKs $P foreach Ligne [split [info body $P] "\n"] { if {[regexp -nocase $Texte $Ligne]} { lappend LesOKs " | $Ligne" } } } } set OKs [join $LesOKs "\n"] if {[PourWscope]} { return [Html_DuTexteTelQuel $OKs] } return $OKs } proc OuiOuNon {Message {ReponseParDefaut ""} {Force ""}} { global OuiOuNonToujoursParDefaut Gs "Rien" set Force [regexp -nocase "1|Force" $Force] if {$ReponseParDefaut==""} { set ReponseParDefaut 1 } if {$ReponseParDefaut} { set IndexReponse 0 } else { set IndexReponse 1 } if { ! $Force && [info exists OuiOuNonToujoursParDefaut] && $OuiOuNonToujoursParDefaut} { return $ReponseParDefaut } set Demandeur "" catch {set Demandeur [PreFixe]} if {$Demandeur!=""} { set Demandeur "(for $Demandeur)" } package require Tk after idle {.ouiounon.msg configure -wraplength 10i -foreground white -background red} set R [tk_dialog .ouiounon "$Demandeur Please press Yes or No" "$Message" {} $IndexReponse "Yes" "No" "?"] if {$R==2} { set L [info level] set CalledBy "" for {set L [info level]} {$L>=0} {incr L -1} { lappend LeTexte "$CalledBy [info level $L]" set CalledBy "called by " } FaireLire [join $LeTexte "\n"] set Reponse [OuiOuNon $Message $ReponseParDefaut $Force] } else { set Reponse [expr 1-$R] } destroy .ouiounon return $Reponse } proc OuiOuNonMemo {Message {ReponseParDefaut ""} {Value 1}} { global OuiOuNonMemo if {$Message=="UnsetAllPlease"} { if {[info exists OuiOuNonMemo]} { unset OuiOuNonMemo } return 1 } if {$ReponseParDefaut=="SetItPleaseTo"} { if {[info exists OuiOuNonMemo($Message)]} { set OldRep [set OuiOuNonMemo($Message)] } else { set OldRep -1 } set OuiOuNonMemo($Message) $Value return $OldRep } if {$ReponseParDefaut=="UnsetItPlease"} { if { ! [info exists OuiOuNonMemo($Message)]} { return -1 } set OldRep [set OuiOuNonMemo($Message)] unset OuiOuNonMemo($Message) return $OldRep } if {[info exists OuiOuNonMemo($Message)]} { return [set OuiOuNonMemo($Message)] } set Reponse [OuiOuNon $Message $ReponseParDefaut] set OuiOuNonMemo($Message) $Reponse return $Reponse } proc OuiOuNonTempo {Message {ReponseParDefaut ""} {Tempo ""}} { global OuiOuNonToujoursParDefaut Gs "Rien" if {$ReponseParDefaut==""} { set ReponseParDefaut 1 } if {$ReponseParDefaut} { set IndexReponse 0 } else { set IndexReponse 1 } if {[info exists OuiOuNonToujoursParDefaut] && $OuiOuNonToujoursParDefaut} { return $ReponseParDefaut } set Demandeur "" catch {set Demandeur [PreFixe]} if {$Demandeur!=""} { set Demandeur "(for $Demandeur)" } set R [AfficheVariable "$Demandeur ... please answer within 10 seconds.\n$Message" AvecRetour OuiOuNonTempo] if {$R==2} { set L [info level] set CalledBy "" for {set L [info level]} {$L>0} {incr L -1} { lappend LeTexte "$CalledBy [info level $L]" set CalledBy "called by " } FaireLire [join $LeTexte "\n"] set Reponse [OuiOuNon $Message $ReponseParDefaut] } else { set Reponse [expr 1-$R] } destroy .ouiounon return $Reponse } proc OusontlesERROR {} { foreach Box [ListeDesPABs] { if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set Org Mouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set Org Rat } else { set Org SpliRet } set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set LesNames [InterrogeNames $Cluster Name $Org] set RefPfam [ExtraitInfo $Box "RefPfam"] set NbPFAMRef [InterrogeRefPfam $Box-$RefPfam nombrePFAMMacsims] set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} set LaRefEtLesNames [concat [list $Box $RefPfam] $LesNames] set LaRefEtLesNames [ListeSansDoublon $LaRefEtLesNames] foreach Chacun $LaRefEtLesNames { if {$Chacun==$Ref} {set Chacun $Box} set LesPfamsChacun [FromMacsims $FileMacsims $Chacun "ConcatPfam"] foreach PfamChacun $LesPfamsChacun { if {[regexp "ERROR" $PfamChacun]} { Espionne "attention ERROR dans $Box et $PfamChacun" } } } } #results je crois que c'est pas grave mais demander à julie #attention ERROR dans SPM0355 et ERROR_PF00097/33-61 #attention ERROR dans SPM0647 et ERROR_PF00389/21-62 #attention ERROR dans SPM0774 et ERROR_PF00560/173-195 #attention ERROR dans SPR0020 et ERROR_PF01352/135-174 #attention ERROR dans SPR0363 et ERROR_PF00246/241-315 #attention ERROR dans SPR0406 et ERROR_PF00704/304-372 } proc OutlierOrganism {{Orga ""}} { global OutlierOrganism if {$Orga!=""} { if {[info exists OutlierOrganism]} { unset OutlierOrganism } } if { ! [info exists OutlierOrganism]} { set Orga "" FaireLire "Please enter the Organism to test as outlier" while {$Orga==""} { set Orga [string trim [Entre "Batrachochytrium dendrobatidis"]] regsub -all " " $Orga "_" Orga if {[Tax $Orga TaxId]==""} { FaireLire "I did not found the taxon '$Orga', please enter an otherone." set Orga "" continue } } set OutlierOrganism $Orga } return $OutlierOrganism } proc OutlierOrganismInBlast {Nom {Outlier ""} {Clade ""} {Seuil ""} {GetWhat ""}} { #rR quand on donne un outlier on n'utilise pas les fichiers ./outlier/Nom précalculés if {$GetWhat==""} { set GetWhat "Show" } set LaSortie {} if {$Outlier==""} { set FichierOutliers [GscopeFile $Nom outlier] if {[file exists $FichierOutliers]} { set LaSortie [LesLignesDuFichier $FichierOutliers] } } if {$LaSortie=={}} { if {$Seuil==""} { set Seuil 99999 } if {$Outlier ==""} { set Outlier [OutlierOrganism] } if {$Clade ==""} { set Clade [ReferenceClade] } set iOutlier [Tax $Outlier TaxId] set iClade [Tax $Clade TaxId] set LesOrgaTrie [LesLignesDuFichier [GscopeFile $Nom "taxobla"]] if {$LesOrgaTrie=={}} { return "The file taxobla/$Nom does not exist" } foreach Ligne $LesOrgaTrie { lassign [split $Ligne "\t"] Expect Score TaxId OS Reste set Score [string trim $Score] set Expect [string trim $Expect] if {$Expect > $Seuil} { break } set TaxId [string trim $TaxId] set OS [string trim $OS] set Reste [string trim $Reste] if {[QuestionDeScience "EVImm" "ret Descendant $iOutlier $TaxId ForceAncestorFirst"]} { lappend LaSortie "*** $Ligne" } else { if {[QuestionDeScience "EVImm" "ret Descendant $iClade $TaxId ForceAncestorFirst"]} { lappend LaSortie " $Ligne" } } } if {$LaSortie=={}} { set LaSortie [list "I didn't find any $Outlier or $Clade"] } } if {[regexp "/" $GetWhat] || [string equal -nocase "Save" $GetWhat]} { set FichierOutliers $GetWhat if {[string equal -nocase "Save" $GetWhat]} { set FichierOutliers [GscopeFile $Nom outlier] } return [SauveLesLignes $LaSortie dans $FichierOutliers] } if {[string equal -nocase "GetList" $GetWhat]} { return $LaSortie } if {[string equal -nocase "GetText" $GetWhat]} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie] } proc OutlierOrganismInBlastPourTous {{Outlier ""} {Clade ""} {Seuil ""}} { file mkdir "[RepertoireDuGenome]/outlier" set I 0 foreach Nom [ListeDesPABs] { if {$I%100==0} { Espionne "outlier/$Nom" } incr I OutlierOrganismInBlast $Nom $Outlier $Clade $Seuil "Save" } } proc OutlierScore {{Nom ""}} { global OutlierScore if {[info exists OutlierScore($Nom)]} { return $OutlierScore($Nom)} if {[info exists OutlierScore("EstCharge")]} { return "" } set OutlierScore("EstCharge") 1 set FichierOutlierScore "[Fiches]/outlierscore" if {[file exists $FichierOutlierScore]} { foreach Ligne [LesLignesDuFichier $FichierOutlierScore] { scan $Ligne "%s" N set Score "" regsub "$N +" $Ligne "" Score set OutlierScore($N) $Score } return [OutlierScore $Nom] } set LesAbsents {} set LesPresents {} foreach FichierOutlier [lsort [glob -nocomplain "[RepertoireDuGenome]/outlier/*"]] { set Queue [file tail $FichierOutlier] if { ! [EstUnPAB $Queue]} { continue } set BestOut "" set BestRef "" foreach Ligne [LesLignesDuFichier $FichierOutlier] { set Ligne [string range $Ligne 0 40] set Absent 0 if {[regexp "^I" $Ligne]} { set LesAbsents [list -1] lappend LesNomsDuScore(-1) $Queue set OutlierScore($Queue) "+999" set Absent 1 break } if {[regexp {^\*} $Ligne]} { if {$BestOut==""} { set BestOut $Ligne ; regsub -all {\*} $BestOut " " BestOut } if {$BestRef!=""} { break } } else { if {$BestRef==""} { set BestRef $Ligne } if {$BestOut!=""} { break } } } if { $Absent } { continue } set PnOut 1e+10 set PnRef 1e+10 if {$BestOut!=""} { scan $BestOut "%s" PnOut ; regsub -nocase {([0-9]+).(e.*)} $PnOut "\\1.\\2" PnOut } if {$BestRef!=""} { scan $BestRef "%s" PnRef ; regsub -nocase {([0-9]+).(e.*)} $PnRef "\\1.\\2" PnRef } if {$PnRef<1.e-200} { if {$PnRef==$PnOut} { set Score 1. } if {$PnOut>1.e-200} { set Score 99999 } } else { set Score [expr $PnOut/$PnRef] } set Ori $Score if {$Score==""} { set Score "+998" } else { set Score [format "%8.1e" $Score] set Ori "$Ori/$Score" regsub {[^e]+e} $Score "" Exp if {[regexp {\+} $Score]} { set Signe "+" } else { set Signe "-" } regsub {[\+\-]} $Exp "" N if {$N==0} { set Exp "+0" } else { set N [string trimleft $N "0"] set Exp "$Signe$N" } } set Score [format "%4s = %s / %s" $Exp $PnOut $PnRef] lappend LesPresents $Exp lappend LesNomsDeExp($Exp) $Queue set OutlierScore($Queue) $Score } set LesPresents [lsort -unique -real $LesPresents] set LesAbsents [lsort -unique -real $LesAbsents] foreach Exp $LesPresents { foreach N $LesNomsDeExp($Exp) { lappend LesNomScore "$N $OutlierScore($N)" } } foreach Exp $LesAbsents { foreach N $LesNomsDuScore($Exp) { lappend LesNomScore "$N $OutlierScore($N)" } } SauveLesLignes $LesNomScore dans $FichierOutlierScore return [OutlierScore $Nom] } proc OutliersFromSelection {Selection} { foreach Sel [split $Selection "\n"] { if {[regexp "^#" $Sel]} { continue } scan $Sel "%s" Nom set TaxId [StringApres "TaxId:" dans $Sel] set OS [StringApres "OS:" dans $Sel] set Clade [StringApres "ReferenceClade:" dans $Sel] set Seuil "" lappend LesFenetres [OutlierOrganismInBlast $Nom $TaxId $Clade $Seuil "Show"] } return $LesFenetres } proc OutputData {} { global ThresholdRSA set dcdn "toto" sqlite3 $dcdn wobble.sql set Ltables [lsort [$dcdn eval {select tbl_name from sqlite_master}]] set db [rrps_setup] set Lpk [$dcdn eval "select pk_items from [lindex $Ltables 0]"] set thr [string range $ThresholdRSA 0 end-1] set csv [open "./ToPrint/data_$thr.csv" w] set out [open "./ToPrint/data_$thr.html" w] # file headers set hcsv "access;pdb id;length" set hout "access pdb_id lgt" set Lcolout [list] ; set Lcoloutt [list] foreach table $Ltables { set aa [string index $table 0] set Lcols [list] $dcdn eval "PRAGMA TABLE_INFO($table)" row { lappend Lcols $row(name)} # enleve pk_aa en 0 set Lcols [lrange $Lcols 1 end] set Tcols($aa) $Lcols # init compteurs foreach {a b} $Lcols { # cdn : A_XXX_Exposed set cdn [string range $a 2 4] set V${aa}_$cdn 0.0 set N${aa}_$cdn 0 set Z${aa}_$cdn 0 set U${aa}_$cdn 0 } lappend Lcoloutt "|" foreach {a b} $Lcols { set col " [string range $a 0 4] " lappend Lcolout $col lappend Lcoloutt $col } } puts $csv "$hcsv;[join $Lcolout ;]" puts $out "Clicking on the access opens the UniProt protein page
    Clicking on the PDB_id opens the alignment summary
    " puts $out "
    "
        puts $out "$hout [join $Lcoloutt " "]\n"
    
        foreach pk $Lpk {
    	set Ld [$db eval {select pdbid,chain,accession,seqpdbal from items where pk_items=$pk}]
    	lassign $Ld pdbid chain access sq
    
    	set sq [string map {- "" X "" 0 ""} $sq]
    	set lgt [string length $sq]
    		
    	set Ldift "|" ; set Ldif [list] 
    	foreach table $Ltables {
    	    set aa [string index $table 0]
    	    set Lv [$dcdn eval "select * from $table where pk_items=$pk"]
    	    foreach {a b} [lrange $Lv 1 end] {c d} $Tcols($aa) {
    		if {0 && $pdbid == "1AC5"} {
    		    puts "$pk $c $a $d $b [expr {$a-$b}]"
    		}
    		# cdn : A_XXX_Exposed
    		set cdn [string range $c 2 4]
    		#puts [format "a=%7.4f b=%7.4f c=%s d=%s" $a $b $c $d]
    		set diff [expr {$a-$b}]
    		if {(abs($diff) != 1.0) && $diff != 0.0} {
    		    incr N${aa}_$cdn
    		    set V${aa}_$cdn [expr {[set V${aa}_$cdn] + $diff}]
    		}
    
    		if {$diff == 0.0} {
    		    incr Z${aa}_$cdn
    		}
    		if {abs($diff) == 1.0} {
    		    incr U${aa}_$cdn
    		}
    		lappend Ldif [format %7.4f $diff]
    		lappend Ldift [format %7.4f $diff]
    	    }
    	    lappend Ldift "|"
    	}
    	puts $csv "$access;${pdbid}_$chain;[format %4d $lgt];[join $Ldif ;]"
    	puts $out "$access ${pdbid}_$chain [format %4d $lgt] [join $Ldift]"
        }
        puts $out ""
        set Lmoy [list] ; set Lnb [list] ; set Lzr [list] ; set Lun [list]
        foreach table $Ltables {
    	lappend Lmoy "|"
    	lappend Lnb  "|"
    	lappend Lzr  "|"
    	lappend Lun  "|"
    	set aa [string index $table 0]
    	foreach {a b} $Tcols($aa) {
    	    # cdn : A_XXX_Exposed
    	    set cdn [string range $a 2 4]
    	    
    	    if {[set N${aa}_$cdn] > 0} {
    		set moy${aa}_$cdn [expr {1.0*[set V${aa}_$cdn]/[set N${aa}_$cdn]}]
    	    } else {
    		set moy${aa}_$cdn 0.0
    	    }
    	    lappend Lmoy [format %7.4f [set moy${aa}_$cdn]]
    	    lappend Lnb  [format %7d [set N${aa}_$cdn]]
    	    lappend Lzr  [format %7d [set Z${aa}_$cdn]]
    	    lappend Lun  [format %7d [set U${aa}_$cdn]]
    	}
        }
        puts $out "Moyenne            [join $Lmoy " "]"
        puts $out "Nbr Observations   [join $Lnb " "]"
        puts $out "Nbr A=B (A-B=0)    [join $Lzr " "]"
        puts $out "Nbr A - B = 1.0    [join $Lun " "]"
        
        close $csv
        puts $out "
    " close $out $db close return } proc OutputListeACC {} { set dcdn "toto" sqlite3 $dcdn wobble.sql set Ltables [lsort [$dcdn eval {select tbl_name from sqlite_master}]] set Lpk [$dcdn eval "select pk_items from [lindex $Ltables 0]"] set db [rrps_setup] set fac [open ./ToPrint/liste.acc w] set Lacc [$db eval "select accession from items where pk_items in ([join $Lpk ,])"] puts $fac [join $Lacc \n] close $fac $db close $dcdn close exit } proc OutputTLog {{what HTML} {Log ""} {filout ""} {add ""}} { global TbLog # what : # - HTML # - Text # - stdout ==> Text + ecran set screen 0 if {$what eq "stdout"} { set what Text set screen 1 } set Log [split $Log "\n"] ParseTLog $Log InitTLog2$what if {$TbLog(DoTOC) && ! $screen} { #TOCEn$what } TLogTo $what [array get TbLog] set res [EndTLog2$what] if {$filout eq ""} { if {[TypeAli] ne "pasdali"} { set ftype "Fichier[TypeAli]" set filout "[file rootname [set ::Defauts($ftype)]].[string tolower $what]" } else { set filout "Output.$what" } if {$add eq ""} { file delete -force $filout } } if {$screen} { puts "$res" flush stdout update idletasks } else { if {$add eq ""} { Sauve $res Dans $filout } else { AppendAuFichier $filout $res } } return $res } proc OutsideCSTB {} { return [expr ! [InsideCSTB]] } proc OuvreFichierSortieO {} { global Defauts global COmac if {! [ModeI]} { if {[set Defauts(FichierOMAC)] != ""} { set FichierOmac [set Defauts(FichierOMAC)] } else { set FichierOmac "O_Macro.omac" } } else { set FichierOmac [DemandeEtSauveFichier "omac"] } if {$FichierOmac == ""} {return} set COmac [open $FichierOmac w] return } proc OuvrirFichierAlignementDansOrdali {{type Unk} {Fichier ""}} { global Sequences FichierTFA FichierXML FichierMSF FichierRSF FichierORD FichierALN Defauts if {[info exists Sequences]} { FaireLire "Close the current file first !" return } if {[string tolower $type] eq "macsim"} {set type "XML"} set tyfi $type if {$type eq "Unk"} {set tyfi "all"} if {$Fichier eq ""} { set Fichier [DemandeEtOuvreFichier [string tolower $tyfi]] } if {$Fichier eq ""} {return} DemarrageOrdali .wroom if {"tdom" ni [package names]} { LoadTclPackages } if {$type eq "Unk"} { set ext [string tolower [file extension $Fichier]] if {$ext ni [list ".xml" ".macsim" ".tfa" ".msf" ".rsf" ".ord" ".fasta"]} { set type [DetecteTypeFichier $Fichier] if {$type eq ""} { set ctype [tk_dialog .typfi "File type" "Please precise your file format :" "" 0 "Macsim/xml" "MSF" "TFA" "RSF" "Clustal" "Ordalie" "Cancel"] switch $ctype { 0 {set type "XML"} 1 {set type "MSF"} 2 {set type "TFA"} 3 {set type "RSF"} 4 {set type "ALN"} 5 {set type "ORD"} 6 {return} } } } else { set type [string toupper [string range $ext 1 end]] if {$type eq "MACSIM"} {set type "XML"} } } if {$type ne "Unk"} { LesDefauts TypeAli $type } set type [string tolower $type] InitInfoArrays switch $type { "msf" { set FichierMSF $Fichier LesDefauts FichierMSF $Fichier } "xml" { set FichierXML $Fichier LesDefauts FichierXML $Fichier } "tfa" { set FichierTFA $Fichier LesDefauts FichierTFA $Fichier } "rsf" { set FichierRSF $Fichier LesDefauts FichierRSF $Fichier } "aln" { set FichierALN $Fichier LesDefauts FichierALN $Fichier } "ord" { set FichierORD $Fichier LesDefauts FichierORD $Fichier } } LoadingAlignement if {[set Defauts(PreCompute)]} { PreCalculs } InitAffichage if {[info exists ::TabSF]} { ChangeMode "feature" } BindingsOrdali BindModeNormal #FaireLaSuite FinDemarrage .wroom return } 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 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 OverlapBranch {AId n Ng Nd} { global Abr set t [set Abr(Arbre,$AId)] set xr [$t get $Ng xcoord] set yr [$t get $Ng ycoord] set xl [$t get $Nd xcoord] set yl [$t get $Nd ycoord] set xn [$t get $n xcoord] set yn [$t get $n ycoord] if {($yl-$yn)*($xr-$xn)-($xl-$xn)*($yr-$yn) > 0.} { set ov 1 } else { set ov 0 } return $ov } proc OverlapClustersDeClonesAuxLocsChevauchantes {} { #Attention: a lancer dans /HeadNecknonrnr #Resultats: 234 clusters (211 avec nouveau fichier loc des targets Affy) mais attention, plusieurs sont composes uniquement de clones DD #basee sur fichier BoxLocalisation_Human_Best #Cree le fichier jumeaux_Overlap dans le dir fiches. #Jumeaux = Clones localises sur le meme chromosome avec des locs chevauchantes. #Attention : Considere la best localisation. #premiere best si cas polyloc...source d'erreurs, finalement ne pas considerer les poly ################# repertoiredugenome = /headNecknonrnr ###################### #set FichierDesClonesEnOverlap "[RepertoireDuGenome]/OverlapDDAffy_Loc" set FichierDesClonesEnOverlap "[RepertoireDuGenome]/OverlapDDAffy_Loc_New" set FichierBestLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" if {![file exists $FichierBestLoc]} {return "I need $FichierBestLoc"} set LesLocsNom {} foreach Nom [ListeDesPABs] { set Loc [InterrogeLocalisation $FichierBestLoc Nom $Nom] if {$Loc==""} {continue} #polyloc: on passe if {[llength $Loc]>=2} {continue} set Loc [join $Loc ""] set Chro [lindex $Loc 9] set DSurChro [lindex $Loc 10] set FSurChro [lindex $Loc 11] if {$Chro==""} {Espionne $Nom} lappend LesLocsNom "$Chro $DSurChro $FSurChro $Nom" } ################### /AffyTarget ##################################### #set FichierLocsNomAffy "/genomics/link/AffyTarget/Localisation/listepouroverlapavecdd" set FichierLocsNomAffy "/genomics/link/AffyTarget/Localisation/listepouroverlapavecdd_new" set C [ContenuDuFichier $FichierLocsNomAffy] set LesLocsNomAffy [split $C "\n"] #Espionne "dd: [llength $LesLocsNom] - affy: [llength $LesLocsNomAffy]" set LesLocsNomTotale [concat $LesLocsNom $LesLocsNomAffy] #FaireLire [llength $LesLocsNomTotale] ##################################################################### #commande vue avec Raymond #permet de trier en fonction de la borne inferieure "a" set LesLocsNomPreTriees [lsort -command CompareChroDebut $LesLocsNomTotale] set LesLocsNomTriees [lsort -command CompareChroFin $LesLocsNomPreTriees] lappend LesLocsNomTriees "bidon bidon bidon bidon bidon" set OldChromo "zzzz" set OldInf 1111111111111111 set OldSup 0 set LaSortie {} foreach Loc $LesLocsNomTriees { if {$Loc!="bidon bidon bidon bidon bidon"} { scan $Loc "%s %d %d %s" chromo inf sup code if {($chromo == $OldChromo) && ($inf <= $OldSup)} { if {![info exists LesMemes]} { set LesMemes $Oldcode } lappend LesMemes $code } else { if {[info exists LesMemes]} { lappend LaSortie [join $LesMemes " "] unset LesMemes } } set OldChromo $chromo set OldInf $inf set OldSup $sup set Oldcode $code } } if {![file exists $FichierDesClonesEnOverlap] || [file exists $FichierDesClonesEnOverlap] && [OuiOuNon "Do you want to replace $FichierDesClonesEnOverlap"]} { if {$LaSortie=={}} { Sauve "No overlaps were found" dans $FichierDesClonesEnOverlap } else { #set Sortie [TrieLaSortie $LaSortie] Espionne "fin" SauveLesLignes $LaSortie dans $FichierDesClonesEnOverlap } } return $FichierDesClonesEnOverlap } proc OverlapDeUn {} { FaireLire "Attention, ne marche que si les ORFs sont tries" set OldNom "" set OldFin -999 set OldOrient X foreach Nom [ListeDesPABs] { set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Orient [Box $Nom orient] if {$Orient=="R"} { continue } set D [expr $Debut - 0] set F [expr $Debut + 0] if {$OldOrient==$Orient && [expr $Debut == $OldFin -3]} { set Seq [BoutADN [expr $Debut] [expr $Debut+3] $Orient] Espionne "$OldNom $Nom $Seq" } set OldNom $Nom set OldFin $Fin set OldOrient $Orient } exit } proc OverlapSTAF {PathPeaks PathBS {formatPeak ucsc} {formatBS ucsc} {spanning no} {extend 0}} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|Overlap : Start" set FichierBS [open "$PathBS.coord" "r"] set FichierOut [open "/tmp/$PathBS.$PathPeaks.csv" "w"] set FichierBsDansPeaks [open "/tmp/$PathBS.$PathPeaks.DansPeaks.txt" "w"] set FichierBsHorsPeaks [open "/tmp/$PathBS.$PathPeaks.HorsPeaks.txt" "w"] set I 0 set O 0 set sumTags 0.0 set Written "no" set overlaps 0 set aCheval 0 set orphelins 0 gets $FichierBS LigneBS puts $FichierOut "$LigneBS\t$PathPeaks\tACTAYRscore" set averageScore 0.00 set averageLogScore 0.00 set TotalScore 0.00 set TotalLogScore 0.00 set nbActacaDansPic 0 set TotalActaScoreDansPics 0.00 set averageActaScoreDansPic 0.00 set nbActacaHorsPic 0 set TotalActaScoreHorsPics 0.00 set averageActaScoreHorsPic 0.00 while { [gets $FichierBS LigneBS] >=0 } { if {$LigneBS != ""} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] set P 0 incr I if {$I == 10000 || $I == 20000 || $I == 30000 || $I == 40000 || $I == 50000 || $I == 60000 || $I == 70000 || $I == 80000 || $I == 90000 || $I == 100000 || $I == 110000 || $I == 120000 || $I == 130000 || $I == 140000 || $I == 150000 || $I == 160000 } { Espionne "$timestamp|Overlap : $I tested." } #ScanLaListe $LignePeak ID chrom start end length summit tags peak fold centromere set length 17 if {$formatBS == "ucsc"} { set chromBS [lindex [split $LigneBS ":"] 0 ] set startBS [lindex [split [lindex [split $LigneBS ":"] 1 ] "-"] 0] set endBS [lindex [split [lindex [split $LigneBS ":"] 1 ] "-"] 1] } else { ScanLaListe $LigneBS IDBS chromBS startBS endBS strand Actaca Sequence Upstream Downstream Score LogScore Reste set Acta6 [string range $Actaca 2 7] set RRACTAYRscore [RRACTAYRscore $Acta6 6] } #Espionne "$chromBS $startBS $endBS VS $chrom $start $end" #if {$length < $Limite } { # set extend [expr ($Limite - $length) / 2] #} else { # set extend 0 #} set FichierPeaks [open "$PathPeaks.coord" "r"] while { [gets $FichierPeaks LignePeak] >=0 } { if { $LignePeak != ""} { if {$formatPeak == "ucsc"} { set chrom [lindex [split $LignePeak ":"] 0 ] set start [lindex [split [lindex [split $LignePeak ":"] 1 ] "-"] 0] set end [lindex [split [lindex [split $LignePeak ":"] 1 ] "-"] 1] } else { ScanLaListe $LignePeak ID chrom start end RestePeak } if { $chrom == $chromBS || $chrom == "chr$chromBS"} { set extendStart [expr $start - $extend] set extendEnd [expr $end + $extend] if { $extendStart < $startBS && $extendEnd > $endBS } { puts $FichierBsDansPeaks "Peak\t$LigneBS" set Written "yes" incr overlaps set timestamp [clock format [clock seconds] -format "%H:%M:%S"] regsub -all -nocase {\,} $Score "." Score regsub -all -nocase {\,} $LogScore "." LogScore set TotalLogScore [expr $TotalLogScore + $LogScore] set averageLogScore [expr $TotalLogScore / $overlaps] set TotalScore [expr $TotalScore + $Score] set averageScore [expr $TotalScore / $overlaps] #Espionne "$timestamp|Overlap : New full match. $overlaps found (score=$averageScore, logScore=$averageLogScore) for $I inputs with $orphelins orphans" if {$RRACTAYRscore >= 5} { incr nbActacaDansPic set TotalActaScoreDansPics [expr $TotalActaScoreDansPics + $RRACTAYRscore] set averageActaScoreDansPic [expr $TotalActaScoreDansPics / $nbActacaDansPic] #Espionne "$Actaca est un RRACTAYR DANS PIC ($nbActacaDansPic sur $overlaps SBS de pic) avec un score de $RRACTAYRscore (moy : $averageActaScoreDansPic)" } set LigneOut "$LigneBS\tY\t$RRACTAYRscore" puts $FichierOut $LigneOut break } if {$spanning == "no"} { if { ($startBS <= $extendStart && $extendStart <= $endBS) || ($startBS <= $extendEnd && $extendEnd <= $endBS) } { puts $FichierBsDansPeaks "Peak\t$LigneBS" set Written "yes" incr overlaps incr aCheval regsub -all -nocase {\,} $Score "." Score regsub -all -nocase {\,} $LogScore "." LogScore set TotalLogScore [expr $TotalLogScore + $LogScore] set averageLogScore [expr $TotalLogScore / $overlaps] set TotalScore [expr $TotalScore + $Score] set averageScore [expr $TotalScore / $overlaps] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|Overlap : New spanning match. $overlaps found (score=$averageScore, logScore=$averageLogScore) for $I inputs with $orphelins orphans" if {$RRACTAYRscore >= 5} { incr nbActacaDansPic set TotalActaScoreDansPics [expr $TotalActaScoreDansPics + $RRACTAYRscore] set averageActaScoreDansPic [expr $TotalActaScoreDansPics / $nbActacaDansPic] #Espionne "$Actaca est un RRACTAYR DANS PIC ($nbActacaDansPic sur $overlaps SBS de pic) avec un score de $RRACTAYRscore (moy : $averageActaScoreDansPic)" } set LigneOut "$LigneBS\tY\t$RRACTAYRscore" puts $FichierOut $LigneOut break } } } } } if {$Written == "yes"} { set Written "no" } else { incr orphelins if {$RRACTAYRscore >= 5} { incr nbActacaHorsPic set TotalActaScoreHorsPics [expr $TotalActaScoreHorsPics + $RRACTAYRscore] set averageActaScoreHorsPic [expr $TotalActaScoreHorsPics / $nbActacaHorsPic] #Espionne "$Actaca est un RRACTAYR Hors PIC ($nbActacaHorsPic sur $orphelins SBS orphelins) avec un score de $RRACTAYRscore (moy : $averageActaScoreHorsPic)" } set LigneOut "$LigneBS\tN\t$RRACTAYRscore" puts $FichierOut $LigneOut incr P } } close $FichierPeaks } #set averageTags [expr $sumTags/ $O] close $FichierBS close $FichierBsDansPeaks close $FichierBsHorsPeaks set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|isInPeak : End ($O/$I BS localized in one of the $P peak with ~$averageTags/site" Espionne "$timestamp|Overlap : End ($overlaps found (score=$averageScore, logScore=$averageLogScore) for $I inputs with $orphelins orphans" Espionne "$timestamp|Overlap : RRACTAYR found in $nbActacaDansPic Peak-SBS with average score of $averageActaScoreDansPic" Espionne "$timestamp|Overlap : RRACTAYR found in $nbActacaHorsPic Orphan-SBS with average score of $averageActaScoreHorsPic" } proc OverlapSeq {PathPeaks PathBS {formatPeak ucsc} {formatBS ucsc} {spanning no} {extend 0}} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|Overlap : Start" set FichierPeaks [open "$PathPeaks.coord" "r"] set FichierOut [open "/tmp/$PathBS.$PathPeaks.csv" "w"] set FichierBsDansPeaks [open "/tmp/$PathBS.$PathPeaks.DansPeaks.txt" "w"] set FichierBsHorsPeaks [open "/tmp/$PathBS.$PathPeaks.HorsPeaks.txt" "w"] set I 0 set O 0 set sumTags 0.0 set Written "No" set overlaps 0 set aCheval 0 set orphelins 0 while { [gets $FichierPeaks LignePeak] >=0 } { if {$LignePeak != ""} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] set P 0 incr I Espionne "$timestamp|Overlap : Testing $I" #ScanLaListe $LignePeak ID chrom start end length summit tags peak fold centromere set length 17 if {$formatPeak == "ucsc"} { set chrom [lindex [split $LignePeak ":"] 0 ] set start [lindex [split [lindex [split $LignePeak ":"] 1 ] "-"] 0] set end [lindex [split [lindex [split $LignePeak ":"] 1 ] "-"] 1] } else { ScanLaListe $LignePeak ID chrom start end RestePeak } #Espionne "$chromBS $startBS $endBS VS $chrom $start $end" #if {$length < $Limite } { # set extend [expr ($Limite - $length) / 2] #} else { # set extend 0 #} set FichierBS [open "$PathBS.coord" "r"] gets $FichierBS LigneBS while { [gets $FichierBS LigneBS] >=0 } { if { $LigneBS != ""} { if {$formatBS == "ucsc"} { set chromBS [lindex [split $LigneBS ":"] 0 ] set startBS [lindex [split [lindex [split $LigneBS ":"] 1 ] "-"] 0] set endBS [lindex [split [lindex [split $LigneBS ":"] 1 ] "-"] 1] } else { ScanLaListe $LigneBS IDBS chromBS startBS endBS Reste } if { $chrom == $chromBS || $chrom == "chr$chromBS"} { set extendStart [expr $start - $extend] set extendEnd [expr $end + $extend] if { $extendStart < $startBS && $extendEnd > $endBS } { puts $FichierBsDansPeaks "$LigneBS $LignePeak" set Written "Yes" incr overlaps set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|Overlap : New full match. $overlaps found for $I inputs with $orphelins orphans" set LigneOut "$LigneBS $LignePeak" break } if {$spanning == "no"} { if { ($startBS <= $extendStart && $extendStart <= $endBS) || ($startBS <= $extendEnd && $extendEnd <= $endBS) } { puts $FichierBsDansPeaks "$LigneBS $LignePeak" set Written "Yes" incr overlaps incr aCheval set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|Overlap : New spanning match. $overlaps found for $I inputs with $orphelins orphans" set LigneOut "$LigneBS $LignePeak" puts $FichierOut $LigneOut break } } } else { if {$Written == "Yes"} { close $FichierBS break } } } } if {$Written == "Yes"} { set Written "No" } else { #puts $FichierBsHorsPeaks "$IDBS $chromBS $startBS $endBS $strandBS" set LigneOut $LigneBS puts $FichierOut $LigneOu incr orphelins incr P } } } #set averageTags [expr $sumTags/ $O] close $FichierPeaks close $FichierBsDansPeaks close $FichierBsHorsPeaks set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|isInPeak : End ($O/$I BS localized in one of the $P peak with ~$averageTags/site" Espionne "$timestamp|Overlap : End ($overlaps/$I are the same with $aCheval spanning and $orphelins orphans" } proc OwnDesign {} { set DataBase "/blast/rshuman.nsq" CADO4MI -q LaTotale -l 60 -nb 20 -t 92 -r 5 -b $DataBase -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/RefSeqBLAST3 return "" } proc OwnDesign2 {} { set DataBase "/blast/unigenehs.nsq" CADO4MI -q LaTotale -l 60 -nb 20 -t 92 -r 5 -b $DataBase -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/UnigeneBLAST3 return "" } proc OwnDesignControl {} { #set DataBase "/blast/rshuman.nsq" set DataBase "none" CADO4MI -q "BC008848 ECOL0658 HUMTUBAK NM_006013 X53416 BC013310 ECOL3535 L05092 NM_018955" -l 60 -nb 100 -t 92 -r 10 -b $DataBase -st 1 -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/RefSeqControl5 return "" } proc OwnDesignControl2 {} { #set DataBase "/blast/unigenehs.nsq" set DataBase "none" CADO4MI -q "BC008848 ECOL0658 HUMTUBAK NM_006013 X53416 BC013310 ECOL3535 L05092 NM_018955" -l 60 -nb 100 -t 92 -r 10 -b $DataBase -st 1 -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/UnigeneControl5 return "" } proc OwnNewDesign {} { set DataBase "/blast/rshuman.nsq" CADO4MI -q ListeDesNews -l 60 -nb 100 -t 92 -r 5 -b $DataBase -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/NewRefSeqBLAST3 return "" } proc OwnNewDesign2 {} { set DataBase "/blast/unigenehs.nsq" CADO4MI -q ListeDesNews -l 60 -nb 100 -t 92 -r 5 -b $DataBase -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/NewUnigeneBLAST3 return "" } proc OwnReDesign {{PAB ""}} { set DataBase "/blast/rshuman.nsq" #set DataBase "none" if {$PAB==""} { foreach Acc [glob -nocomplain -directory "[RepertoireDuGenome]/Probes/Redesign/RefSeq" "*.masked"] { lappend Query $Acc } } else { set Query $PAB } CADO4MI -q "$Query" -l 60 -nb 10000 -t 92 -r 10 -b $DataBase -st 1 -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/Redesign_RefSeq return "" } proc OwnReDesign2 {{PAB ""}} { set DataBase "/blast/unigenehs.nsq" #set DataBase "none" if {$PAB==""} { foreach Acc [glob -nocomplain -directory "[RepertoireDuGenome]/Probes/Redesign/Unigene" "*.masked"] { lappend Query $Acc } } else { set Query $PAB } CADO4MI -q "$Query" -l 60 -nb 10000 -t 92 -r 10 -b $DataBase -st 1 -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/Redesign_Unigene return "" } proc OwnRhoDesign {} { set DataBase "/blast/rshuman.nsq" CADO4MI -q ListeDesRhos -l 60 -nb 100 -t 92 -r 5 -b $DataBase -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/RefSeq_Rho return "" } proc OwnRhoDesign2 {} { set DataBase "/blast/unigenehs.nsq" CADO4MI -q ListeDesRhos -l 60 -nb 100 -t 92 -r 5 -b $DataBase -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w [RepertoireDuGenome]/Probes/Unigene_Rho return "" } proc OwnerOfCDNA {Nom} { return [ExtraitInfo $Nom "OwnerOfCDNA"] } proc P3ofPPCR {{PPCR ""} {Val ""}} { global P3ofPPCR set FichierP3ofPPCR "[RepertoireDuGenome]/fiches/P3ofPPCR" if {$PPCR=="Save"} { unset P3ofPPCR(LaListeDesPPCRs) unset P3ofPPCR(LaListeDesPs) unset P3ofPPCR("EstCharge") SauveLesLignes [array get P3ofPPCR] dans $FichierP3ofPPCR unset P3ofPPCR P3ofPPCR Load return $FichierP3ofPPCR } if {$PPCR==""} { return [list "P3ofPPCR \"Sujet === SignauxAvant === SignauxApres\"" "P3ofPPCR LaListeDesPPCRs" "P3ofPPCR LaListeDesPs"] } if {$Val!=""} { if {[OuiOuNonMemo "Do I load already existing PofPPCR"]} { P5ofPPCR Load P3ofPPCR Load } set P3ofPPCR("EstCharge") "" if {[info exists P3ofPPCR($PPCR)] && [set P3ofPPCR($PPCR)]!=$Val} { #rR FaireLire "P3ofPPCR $PPCR\n already exists it was [set P3ofPPCR($PPCR)] and now $Val" } set P3ofPPCR($PPCR) $Val lappend P3ofPPCR(LaListeDesPPCRs) $PPCR lappend P3ofPPCR(LaListeDesPs) $Val set P3ofPPCR(LaListeDesPs) [lsort -unique [set P3ofPPCR(LaListeDesPs)]] return $Val } if {[info exists P3ofPPCR($PPCR)]} { return [set P3ofPPCR($PPCR)] } if {[info exists P3ofPPCR("EstCharge")]} { return [set P3ofPPCR("EstCharge")] } Wup "From here we load existing" if {[info exists P3ofPPCR]} { unset P3ofPPCR } if { ! [file exists $FichierP3ofPPCR] } { return "NoValueAvalaible" } array set P3ofPPCR [LesLignesDuFichier $FichierP3ofPPCR] set LesP {} set LesPP {} foreach {PP P} [array get P3ofPPCR] { lappend LesP $P lappend LesPP $PP } set P3ofPPCR("EstCharge") "" set P3ofPPCR(LaListeDesPs) [lsort -unique $LesP] set P3ofPPCR(LaListeDesPPCRs) [lsort -unique $LesPP] return [P3ofPPCR $PPCR] } proc P5ofPPCR {{PPCR ""} {Val ""}} { global P5ofPPCR set FichierP5ofPPCR "[RepertoireDuGenome]/fiches/P5ofPPCR" if {$PPCR=="Save"} { unset P5ofPPCR(LaListeDesPPCRs) unset P5ofPPCR(LaListeDesPs) unset P5ofPPCR("EstCharge") SauveLesLignes [array get P5ofPPCR] dans $FichierP5ofPPCR unset P5ofPPCR P5ofPPCR Load return $FichierP5ofPPCR } if {$PPCR==""} { return [list "P5ofPPCR \"Sujet === SignauxAvant === SignauxApres\"" "P5ofPPCR LaListeDesPPCRs" "P5ofPPCR LaListeDesPs"] } if {$Val!=""} { if {[OuiOuNonMemo "Do I load already existing PofPPCR"]} { P5ofPPCR Load P3ofPPCR Load } set P5ofPPCR("EstCharge") "" if {[info exists P5ofPPCR($PPCR)] && [set P5ofPPCR($PPCR)]!=$Val} { #rR FaireLire "P5ofPPCR $PPCR\n already exists it was [set P5ofPPCR($PPCR)] and now $Val" } set P5ofPPCR($PPCR) $Val lappend P5ofPPCR(LaListeDesPPCRs) $PPCR lappend P5ofPPCR(LaListeDesPs) $Val set P5ofPPCR(LaListeDesPs) [lsort -unique [set P5ofPPCR(LaListeDesPs)]] return $Val } if {[info exists P5ofPPCR($PPCR)]} { return [set P5ofPPCR($PPCR)] } if {[info exists P5ofPPCR("EstCharge")]} { return [set P5ofPPCR("EstCharge")] } Wup "From here we load existing" if {[info exists P5ofPPCR]} { unset P5ofPPCR } if { ! [file exists $FichierP5ofPPCR] } { return "NoValueAvalaible" } array set P5ofPPCR [LesLignesDuFichier $FichierP5ofPPCR] set LesP {} set LesPP {} foreach {PP P} [array get P5ofPPCR] { lappend LesP $P lappend LesPP $PP } set P5ofPPCR("EstCharge") "" set P5ofPPCR(LaListeDesPs) [lsort -unique $LesP] set P5ofPPCR(LaListeDesPPCRs) [lsort -unique $LesPP] return [P5ofPPCR $PPCR] } proc PABDevantEnAccess {} { foreach Nom [ListeDesPABs] { foreach Rep [list nuctfa prottfa] { set Fic [GscopeFile $Nom $Rep] if {[FileAbsent $Fic]} { FaireLire "$Fic absent" ; continue } set Texte [ContenuDuFichier $Fic] if {[regexp "^>$Nom " $Texte]} { continue } scan $Texte "%s" Access regsub ">" $Access "" Access regsub -all {\-} $Access "\\-" AccessR Espionne $Access regsub ">$AccessR " $Texte ">$Nom $Access " Texte regsub "$AccessR $AccessR " $Texte "$Access " Texte regsub "Musmusculus" $Texte "Mus musculus" Texte regsub -all " " $Texte " " Texte Espionne "$Rep/$Nom [lindex [split $Texte "\n"] 0]" #rR Sauve $Texte dans $Fic } } } proc PABsDuIdOuAc {IdOuAc {Science ""}} { global PABsDuIdOuAc if { $Science!="" && ! [OnTraite $Science] } { return [QuestionDeScience Science "ret PABsDuIdOuAc $IdOuAc"] } set IDOUAC [string toupper $IdOuAc] if {[info exists PABsDuIdOuAc($IDOUAC)]} { return $PABsDuIdOuAc($IDOUAC) } if {[info exists PABsDuIdOuAc("EstCharge")]} { return "" } set PABsDuIdOuAc("EstCharge") 1 foreach Nom [ListeDesPABs] { set Id [ExtraitInfo $Nom "Id:"] if {$Id!=""} { set ID [string toupper $Id] ; lappend PABsDuIdOuAc($ID) $Nom } set Ac [ExtraitInfo $Nom "Ac:"] if {$Ac!=""} { set AC [string toupper $Ac] ; lappend PABsDuIdOuAc($AC) $Nom } } return [PABsDuIdOuAc $IdOuAc] } proc PABsEtPFAM {} { set Fichier "[RepertoireDuGenome]/fiches/Domaines" foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set Ligne [split $Ligne "\t"] set PAB [lindex $Ligne 0] lappend Liste $PAB } set ListeT [lsort -unique $Liste] FaireLire [llength $ListeT] foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set Ligne [split $Ligne "\t"] set PAB [lindex $Ligne 0] set Acc [lindex $Ligne 2] set Id [lindex $Ligne 6] #if {![regexp "PFAM" $Ligne] || ([regexp "PFAM" $Ligne] && ![regexp "^PF" $Acc])} { #FaireLire $Ligne #les sans pfam a #lappend LesSans $PAB #continue #} if {[regexp "PFAM" $Ligne] && ![regexp "^PF" $Acc]} { lappend LesPFAMB $PAB } if {[regexp "PFAM" $Ligne] && [regexp "^PF" $Acc] && $Id>="0.8"} { lappend LesPFAMA100 $PAB #lappend Liste $Ligne } if {[regexp "PFAM" $Ligne] && [regexp "^PF" $Acc] && $Id!="1.0"} { lappend LesPFAMA $PAB #Espionne $Ligne } } #set LesSansTries [lsort -unique $LesSans] set LesPFAMA100Tries [lsort -unique $LesPFAMA100] set LesPFAMATries [lsort -unique $LesPFAMA] #Espionne "sans: [llength $LesSans] apres [llength $LesSansTries]" Espionne "pfama 100: [llength $LesPFAMA100] et apres [llength $LesPFAMA100Tries]" Espionne "pfama <100: [llength $LesPFAMA] et apres [llength $LesPFAMATries]" Espionne "pfam pas a : [llength [lsort -unique $LesPFAMB]]" } proc PABsNonPresents {{sousRepertoire ""}} { if {$sousRepertoire eq ""} { set rep [pwd] } else { set rep [file join [RepertoireDuProjet] $sousRepertoire] } foreach pab [ListeDesPABs] { if {![file isfile [file join $rep $pab]]} {puts $pab} } exit 0 } proc PCIPourBlocks {{thr 0}} { global CpB LNOrdali LSOrdali puts "debut PCI" puts "DEBITEM PCI" set Ltot $CpB(Ltot) set i 0 set la "A" ; set lz "Z" foreach n1 $LNOrdali s1 $LSOrdali { incr i if {$n1 eq ""} {continue} set PCI($n1,$n1) 1.0 foreach n2 [lrange $LNOrdali $i end] s2 [lrange $LSOrdali $i end] { if {$n2 eq ""} {continue} set len 0 ; set com 0 for {set j 0} {$j < $Ltot} {incr j} { set ca [string index $s1 $j] set cb [string index $s2 $j] set ala [expr {$ca >= $la && $ca <= $lz}] set alb [expr {$cb >= $la && $cb <= $lz}] incr len [expr {$ala || $alb}] incr com [expr {$ala && ($ca eq $cb)}] } if {$len > $thr} { set pc [expr {double($com)/double($len)}] } else { set pc 0.0 } set PCI($n1,$n2) $pc set PCI($n2,$n1) $pc puts "ITEM $n1 $n2 [format %8.6f [set PCI($n1,$n2)]]" puts "ITEM $n2 $n1 [format %8.6f [set PCI($n2,$n1)]]" } } puts "fin PCI" return [array get PCI] } proc PCISegment {n1 n2 d f} { set s1 [set ::Sequences($n1)] set s2 [set ::Sequences($n1)] set total 0 ; set count 0 for {set i $d} {$i < $f} {incr i} { if {([set c1 [string index $s1 $i]] ne ".") && ([set c2 [string index $s2 $i]] ne ".")} { incr total incr count [expr {$c1 eq $c2}] } } if {$total == 0} { set score 0.0 } else { set score [expr {100.0*$count/$total}] } return $score } proc PCR {MatriceForward AmorceForward AmorceReverse {Nom ""}} { if {$Nom==""} { set Nom "[PreFixe]999999" } set MatriceForward [string toupper $MatriceForward] set MatriceReverse [NucToReverseAndComplementNuc $MatriceForward] set AmorceForward [string toupper $AmorceForward] set AmorceReverse [string toupper $AmorceReverse] set AmorceRevSens [NucToReverseAndComplementNuc $AmorceReverse] set TfaDom [ContenuDuFichier [GscopeFile $Nom "nucoligo"]] set AccDom [EnteteDuTexteTFA $TfaDom "access"] set SeqDom [QueLaSequenceDuTexteTFA $TfaDom] set FichierPpcr [GscopeFile $Nom "ppcr"] set PPCR "" set TfaPpcr "" if {[file exists $FichierPpcr]} { set PPCR [QueLaSequenceDuFichierTFA $FichierPpcr] set TfaPpcr [SequenceFormatTFA $PPCR "ppcr" "nucbrut"] } set L [string length $AmorceForward] set MinTm 45 set Start -1 set FinHybridSurMatrice -1 set BestHybridForward "" while 1 { incr Start set HybridForward [string range $AmorceForward $Start end] if {[TMDeLaSequence $HybridForward] < $MinTm} { break } if {[set I [string first $HybridForward $MatriceForward]]<0} { continue } set FHSM [expr $I + $L - $Start -1] Espionne "$FHSM $ $I + $L - $Start -1" if {$FinHybridSurMatrice > -1 && $FHSM != $FinHybridSurMatrice} { FaireLire "Pour $AmorceForward $FHSM != $FinHybridSurMatrice" continue } if {$BestHybridForward==""} { set BestHybridForward $HybridForward } set FinHybridSurMatrice $FHSM } set HybridForward $BestHybridForward set R [string length $AmorceRevSens] set MinTm 45 set End [string length $AmorceReverse] set DebHybridSurMatrice -1 set BestHybridRevSens "" while 1 { incr End -1 set HybridRevSens [string range $AmorceRevSens 0 $End] if {[TMDeLaSequence $HybridRevSens] < $MinTm} { break } if {[set I [string last $HybridRevSens $MatriceForward]]<0} { continue } set DHSM $I Espionne "$I $HybridRevSens" if {$DebHybridSurMatrice>-1 && $DHSM != $DebHybridSurMatrice} { FaireLire "Pour $AmorceReverse $DHSM != $DebHybridSurMatrice" continue } if {$BestHybridRevSens==""} { set BestHybridRevSens $HybridRevSens } set DebHybridSurMatrice $DHSM } set HybridRevSens $BestHybridRevSens set DebMatriceNonHybrid [expr $FinHybridSurMatrice + 1] set FinMatriceNonHybrid [expr $DebHybridSurMatrice - 1] if {$DebHybridSurMatrice<0} { set FinMatriceNonHybrid end } set PcrNuc "" append PcrNuc $AmorceForward append PcrNuc [string range $MatriceForward $DebMatriceNonHybrid $FinMatriceNonHybrid] append PcrNuc $AmorceRevSens set PosATG [string first "ATG" $PcrNuc] set PcrPro [SeqNucToSeqPro [string range $PcrNuc $PosATG end]] regsub -all {.} $PcrPro "& " PcrPro set OffsetProt [string repeat "+" $PosATG] set TfaPcr [SequenceFormatTFA $PcrNuc "PcrNuc" "nucbrut"] set TfaAF [SequenceFormatTFA $AmorceForward "AmoFor" "nucbrut"] set TfaHF [SequenceFormatTFA $HybridForward "HybFor" "nucbrut"] set MatriceForwardAbc "" foreach {A B C} [split $MatriceForward ""] { set Abc [string totitle "$A$B$C"] append MatriceForwardAbc $Abc } set TfaM [SequenceFormatTFA $MatriceForward "$Nom" "nucbrut"] set TfaX [SequenceFormatTFA $MatriceForwardAbc "Frames" "nucbrut"] set NomAmo "AmoRev" if {$AmorceReverse==""} { set NomAmo "RunOff" } set TfaHR [SequenceFormatTFA $HybridRevSens "HybRev" "nucbrut"] set TfaAR [SequenceFormatTFA $AmorceRevSens $NomAmo "nucbrut"] set TFAsF "$TfaAF\n$TfaHF\n$TfaDom\n$TfaM\n$TfaPcr\n$TfaPpcr" set FichierTFAsF [Sauve $TFAsF dans [TmpFile].tfa] set FichierMsfF [GscopeFile $Nom "msfpcrF"] set FichierTFAs5 [GscopeFile $Nom "tfas5"] exec clustalw $FichierTFAsF -outorder=input -negative -output=gscope -outfile=$FichierMsfF set TFAs5 [CreeLeTFAsDuMSF $FichierMsfF] Sauve $TFAs5 dans $FichierTFAs5 set TFAsR "$TfaM\n$TfaHR\n$TfaAR" set FichierTFAsR [Sauve $TFAsR dans [TmpFile].tfa] set FichierMsfR [GscopeFile $Nom "msfpcrR"] set FichierTFAs3 [GscopeFile $Nom "tfas3"] exec clustalw $FichierTFAsR -outorder=input -negative -output=gscope -outfile=$FichierMsfR set TFAs3 [CreeLeTFAsDuMSF $FichierMsfR] Sauve $TFAs3 dans $FichierTFAs3 set NP 0 set NPD 0 foreach Access [LaSequenceDuTFAs $FichierTFAs5 "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $FichierTFAs5 $Access] set Seq [QueLaSequenceDuTexteTFA $TFA] lappend LeTexte "[format %-15s $Access] $Seq" if {$Access=="PcrNuc"} { set OffsetPcrNuc "" regexp -- {^\-+} $Seq OffsetPcrNuc } if {$Access==$AccDom} { set SeqProD "" set ABC "" set AttendDebutD 1 foreach C [split $Seq ""] { if {$C=="-"} { if {$AttendDebutD} { incr NPD } append SeqProD "." if {$ABC!=""} { FaireLire "SeqProD $SeqPro" } continue } set AttendDebutD 0 append ABC $C if {[string length $ABC]==3} { set P [AAduCodon $ABC] set ABC "" append SeqProD "$P " } } lappend LeTexte "[format %-15s ProtDom] $SeqProD" } if {$Access==$Nom} { set SeqPro "" set ABC "" set AttendDebut 1 foreach C [split $Seq ""] { if {$C=="-"} { if {$AttendDebut} { incr NP } append SeqPro "." if {$ABC!=""} { FaireLire "SeqPro $SeqPro" } continue } set AttendDebut 0 append ABC $C if {[string length $ABC]==3} { set P [AAduCodon $ABC] set ABC "" append SeqPro "$P " } } lappend LeTexte "[format %-15s Protein] $SeqPro" } } lappend LeTexte "[format %-15s PcrProt] $OffsetPcrNuc$OffsetProt$PcrPro" set Offset [string repeat "." $NP] foreach Access [LaSequenceDuTFAs $FichierTFAs3 "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $FichierTFAs3 $Access] set Seq [QueLaSequenceDuTexteTFA $TFA] lappend LeTexte "[format %-15s $Access] $Offset$Seq" } set Texte [join $LeTexte "\n"] set T [AfficheVariable $Texte "AvecRetourGrandeLargeur" "AlignementPcr/$Nom"] } proc PDBQuery {args} { if {([llength $args] % 2)} { return {} } set pdbXML " " set level 0 foreach {k v} $args { switch $k { "-experiment" { set v [string toupper $v] append pdbXML " $level" if {$level > 0} { append pdbXML " and " } append pdbXML " head org.pdb.query.simple.ExpTypeQuery $v " } "-organism" { append pdbXML " $level" if {$level > 0} { append pdbXML " and " } append pdbXML " head org.pdb.query.simple.TreeEntityQuery 1 $v " } "-identity" { if {$v > 100 || $v <= 0} { continue } append pdbXML " $level " if {$level > 0} { append pdbXML " and " } append pdbXML " head org.pdb.query.simple.HomologueEntityReductionQuery null $v " } } incr level } append pdbXML "" set url "http://www.rcsb.org/pdb/rest/search" ::http::config -urlencoding utf-8 set tok [::http::geturl $url -query $pdbXML -type "application/x-www-form-urlencoded"] set rep [::http::data $tok] ::http::cleanup $tok set Lrep [split $rep \n] set Lres [list] foreach r $Lrep { lappend Lres [string range $r 0 3] } set Lres [lsort -unique $Lres] return $Lres } proc PDBSearch {{query ""}} { package require http if {$query eq ""} { set query " 38802 0 head org.pdb.query.simple.TreeEntityQuery TaxonomyTree Search for Saccharomyces cerevisiae 1 562 Escherichia coli 1 and head org.pdb.query.simple.HomologueEntityReductionQuery Representative Structures at 90 Sequence Identity null 90 " } if {1} { set organism_name "Homo sapiens" set xml " 0 head org.pdb.query.simple.EnzymeClassificationQuery Enzyme Classification Search : EC=6.1.1.* 6.1.1.* 2 and head org.pdb.query.simple.OrganismQuery Organism Search : Organism Name=$organism_name $organism_name " } else { set organism_name "Homo sapiens" set xml " B0905 org.pdb.query.simple.OrganismQuery Organism Search : Organism Name=$organism_name $organism_name " } set url "http://www.rcsb.org/pdb/rest/search" ::http::config -urlencoding utf-8 set tok [::http::geturl $url -query $query -type "application/x-www-form-urlencoded"] set rep [::http::data $tok] puts ">> $rep" ::http::cleanup $tok #exit } proc PDBeInterface {Lid} { set names [string tolower [join $Lid ,]] set url "http://www.ebi.ac.uk/pdbe/pisa/cgi-bin/interfaces.pisa?$names" return "[HttpCopy $url]" } 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 PD_EcritSpec {} { global S1 V1 Mp Sc Sq set fo [open "Spec.tab" w] set Ntot 0 set Nbon 0 foreach n [array names Mp] { set LPr [list] set ok 1 puts ">>$n<<" incr Ntot if {! [info exists S1($n)]} { puts "Pas de S1 de $n" continue } if {! [info exists V1($n)]} { puts "Pas de V1 de $n" continue } if {! [info exists Sc($n)]} { puts "Pas de Scor de $n" continue } if {! [info exists Sq($n)]} { puts "Pas de Seq de $n" continue } lassign [set Mp($n)] lg Lv lappend LPr "Transcript\t$n\t$lg" set Lv [lsort -command PD_Trie $Lv] foreach v $Lv { lassign $v t cd d f set lgv [expr {$f - $d + 1}] lappend LPr "Type\t$t\t$cd\t$lgv" set s1 [lrange [set S1($n)] $d $f] set v1 [lrange [set V1($n)] $d $f] set sc [lrange [set Sc($n)] $d $f] set sq [split [string range [set Sq($n)] $d $f] ""] if {[llength $s1] != [llength $v1] || [llength $s1] != [llength $sc] || [llength $s1] != [llength $sq]} { puts "$n : Probleme de longueur" set ok 0 break } foreach aa $s1 bb $v1 cc $sc dd $sq { lappend LPr "Nuc\t$dd\t$aa\t$bb\t$cc" } } incr Nbon if {$ok} {puts $fo [join $LPr \n]} } close $fo puts "Total $Ntot, ecris $Nbon" return } proc PD_ExtraitTranscript {} { set Ll [LesLignesDuFichier GSE22393_sce_transcriptome_global.tab] foreach l $Ll { if {[regexp {Transcript} $l]} { lassign [split $l "\t"] id ch deb fin wh lappend Ltrans [list $id $ch $deb $fin] } } set Ltrans [lsort -index 1 -integer $Ltrans] set chcou 0 foreach l $Ltrans { lassign $l id ch deb fin incr deb -1 incr fin -1 if {$ch != $chcou} { catch {unset Sq Lc} set xid [expr {1132+$ch}] set fch [file join Sacc_cere NC_00${xid}.fna] DecortiqueUnTFA $fch Lc Sq set Seq [set Sq($Lc)] set chcou $ch puts "chr $ch length [string length $Seq]" } lappend Lnom $id if {$deb < $fin} { set tt [string range $Seq $deb $fin] lappend Lseq [string range $Seq $deb $fin] } else { set tmp [string range $Seq $fin $deb] set tmp [string map [list A 0 T 1 C 2 G 3] $tmp] set tmp [string map [list 0 T 1 A 2 G 3 C] $tmp] set tmp [string reverse $tmp] lappend Lseq $tmp } } set fout "Transcripts.tfa" EcritLeTfa $fout $Lnom $Lseq exit } proc PD_Spec {} { global S1 V1 Sc Mp Sq set LS1 [LesLignesDuFichier sce_S1.tab] set LV1 [LesLignesDuFichier sce_V1.tab] set LSc [LesLignesDuFichier sce_Score.tab] set LMp [LesLignesDuFichier sce_transcriptome_local.tab] DecortiqueUnTFA "Transcripts.tfa" LTr Sq foreach l $LS1 { lassign [split $l "\t"] n lg lv set S1($n) [split $lv ";"] } foreach l $LV1 { lassign [split $l "\t"] n lg lv set V1($n) [split $lv ";"] } foreach l $LSc { lassign [split $l "\t"] n lg lv set Sc($n) [split $lv ";"] } set ncou "" foreach l $LMp { lassign [split $l \t] n t d f if {$n ne $ncou} { if {$ncou eq ""} { set ncou $n } else { set Mp($ncou) [list $lgt $LVals] set ncou $n set LVals [list] } } switch $t { "Transcript" {set lgt $f} "CDS" {set Code 1} "5UTR" - "3UTR" {set Code 0} default {puts "--> $t"} } incr d -1 incr f -1 if {! [regexp {^Y} $n]} {set Code 0} if {$t ne "Transcript"} { lappend LVals [list $t $Code $d $f] } } puts "[set Mp(YKL152C)]" #exit PD_EcritSpec exit } proc PD_Test {} { set LS1 [LesLignesDuFichier sce_S1.tab] set LV1 [LesLignesDuFichier sce_V1.tab] set LSc [LesLignesDuFichier sce_Score.tab] foreach l $LS1 { lassign [split $l "\t"] n lg lv set S1($n) [split $lv ";"] set max [expr max([join [set S1($n)] ,])] set S1($n,max) $max } foreach l $LV1 { lassign [split $l "\t"] n lg lv set V1($n) [split $lv ";"] set max [expr max([join [set V1($n)] ,])] set V1($n,max) $max } foreach l $LSc { lassign [split $l "\t"] n lg lv set Sc($n) [split $lv ";"] } foreach n [lrange [array names Sc] 0 20] { set Ls [list] set Lv [list] set Lr [list] set ms1 [set S1($n,max)] foreach v [set S1($n)] { lappend Ls [expr {1.0*$v/$ms1}] } set mv1 [set V1($n,max)] foreach v [set V1($n)] { lappend Lv [expr {1.0*$v/$mv1}] } foreach s $Ls v $Lv { if {$v != 0. || $s != 0.} { lappend Lr [expr {log($s/$v)/log(2.)}] } else { lappend Lr 0. } } puts "$n V1 [set V1($n,max)] S1 [set S1($n,max)] " foreach v [lrange $Lv 0 10] nv [lrange [set V1($n)] 0 10] s [lrange $Ls 0 10] ns [lrange [set S1($n)] 0 10] r [lrange $Lr 0 10] c [lrange [set Sc($n)] 0 10] { puts [format "%6.2f %6.2f |%6.2f %6.2f |%6.2f %6.2f |" $v $nv $s $ns $r $c] } } exit } proc PD_Trie {a b} { lassign $a ta ca da fa lassign $b tb cb db fb if {$da > $db} { return 1 } elseif {$da < $db} { return -1 } else { return 0 } } proc PEntr {{E ""} {Quoi ""}} { if {$E==""} { set E "ListeDesEs" } if {$Quoi==""} { set Quoi "All" } if {$E=="ListeDesEs"} { return [PEntrDidier "ListeDesEs"] } if {$E=="ListeDesPGSs"} { return [PEntrDidier "ListeDesPGSs"] } set PE [PEntrDidier $E] if {$Quoi=="All"} { return $PE } ScanLaListe [split $PE ","] PGS Alias Fragment Vecteur Oli5P Oli3P PCR Utilisateur if {$Quoi=="PGS"} { return $PGS } if {$Quoi=="Alias"} { return $Alias } if {$Quoi=="Fragment"} { return $Fragment } if {$Quoi=="Vecteur"} { return $Vecteur } if {$Quoi=="Oli5P"} { return $Oli5P } if {$Quoi=="Oli3P"} { return $Oli3P } if {$Quoi=="PCR"} { return $PCR } if {$Quoi=="Utilisateur"} { return $Utililsateur } FaireLire "Wrong call to PEntr" return $PE } proc PEntrDidier {E {Val ""} {Val2 ""}} { global PEntrDidier Wup "E can be E1234 PGS123 Save or Load" Wup "Save must be done" set Append 0 if {$Val=="append"} { set Append 1 ; set Val $Val2 } set FichierPEntrDidier "[RepertoireDuGenome]/fiches/PEntrDidier" if {$E=="Save"} { if {[info exists PEntrDidier("EstCharge")]} { unset PEntrDidier("EstCharge") } if {[info exists PEntrDidier(ListeDesEs)]} { unset PEntrDidier(ListeDesEs) } SauveLesLignes [array get PEntrDidier] dans $FichierPEntrDidier catch {unset PEntrDidier} PEntrDidier "Load" return $FichierPEntrDidier } if {$Val!=""} { if {$Append} { lappend PEntrDidier($E) $Val } else { set PEntrDidier($E) $Val } if {[EstUnPAB $E]} { lappend PEntrDidier(ListeDesPGSs) $E set PEntrDidier(ListeDesPGSs) [lsort -unique [set PEntrDidier(ListeDesPGSs)]] } else { lappend PEntrDidier(ListeDesEs) $E set PEntrDidier(ListeDesEs) [lsort -unique [set PEntrDidier(ListeDesEs)]] } return [set PEntrDidier($E)] } if {$E!="Load"} { if {[info exists PEntrDidier($E)]} { return [set PEntrDidier($E)] } if {[info exists PEntrDidier("EstCharge")]} { return [set PEntrDidier("EstCharge")] } } if { ! [file exists $FichierPEntrDidier]} { set PEntrDidier("EstCharge") "NoValueAvailable" return "NoValueAvailable" } array set PEntrDidier [LesLignesDuFichier $FichierPEntrDidier] foreach {EouPGS Valeur} [array get PEntrDidier] { if {[EstUnPAB $EouPGS]} { lappend PEntrDidier(ListeDesPGSs) $EouPGS continue } if {[regexp {^E[0-9]+$} $EouPGS]} { lappend PEntrDidier(ListeDesEs) $EouPGS } } set PEntrDidier(ListeDesPGSs) [lsort [set PEntrDidier(ListeDesPGSs)]] set PEntrDidier(ListeDesEs) [lsort [set PEntrDidier(ListeDesEs)]] set PEntrDidier("EstCharge") "" if {$E=="Load"} { return $FichierPEntrDidier } return [PEntrDidier $E] } proc PFAMGroupePourTous {{directory ""} TypeDeDomain} { #type de domain peut etre Domain ou Pfam etc... #devrai prendre listedesPABs et pas de tfadescopains if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set r [glob -directory $directory *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } RegroupeByDomain $f $TypeDeDomain FinPasTouche $f } } proc PIAuPH {AspN GluN CysN TyrN HisN LysN ArgN pH} { # Valeurs de pK prises dans EMBOSS (fichier emboss/data/Epk.dat) # les valeurs commentees correspondent aux valeurs donnees par wikipedia. #C-terminal charge set QN1 [expr {-1./(1+pow(10,(3.6-$pH)))}] #D charge set QN2 [expr {-$AspN/(1+pow(10,(3.9-$pH)))}] #E charge # set QN3 [expr {-$GluN/(1+pow(10,(4.07-$pH)))}] set QN3 [expr {-$GluN/(1+pow(10,(4.1-$pH)))}] #C charge # set QN4 [expr {-$CysN/(1+pow(10,(8.18-$pH)))}] set QN4 [expr {-$CysN/(1+pow(10,(8.5-$pH)))}] #Y charge # set QN5 [expr {-$TyrN/(1+pow(10,(10.46-$pH)))}] set QN5 [expr {-$TyrN/(1+pow(10,(10.1-$pH)))}] #H charge # set QP1 [expr {$HisN/(1+pow(10,($pH-6.04)))}] set QP1 [expr {$HisN/(1+pow(10,($pH-6.5)))}] #N terminal # set QP2 [expr {1./(1+pow(10,($pH-8.2)))}] set QP2 [expr {1/(1.+pow(10,($pH-8.6)))}] #K charge # set QP3 [expr {$LysN/(1+pow(10,($pH-10.54)))}] set QP3 [expr {$LysN/(1+pow(10,($pH-10.8)))}] #R charge # set QP4 [expr {$ArgN/(1+pow(10,($pH-12.48)))}] set QP4 [expr {$ArgN/(1+pow(10,($pH-12.5)))}] set NQ [expr {$QN1+$QN2+$QN3+$QN4+$QN5+$QP1+$QP2+$QP3+$QP4}] return $NQ } proc PIetPSdansMSF {FichierMSF A B} { global RepertoireDuGenome global MatriceDeSimilarite global NotreOS global NotreOrga if { ! [info exists MatriceDeSimilarite] } { set OnAttendPP 1 set FichierSimilariteDefaut "[GscopeEtc]/gscope_similarite" set FichierSimilarite "[RepertoireDuGenome]/fiches/similarite" if { ! [file exists $FichierSimilarite]} { set FichierSimilarite $FichierSimilariteDefaut } set Entete [PremiereLigneDuFichier $FichierSimilarite] foreach Ligne [LesLignesDuFichier $FichierSimilarite] { if { ! [regexp -nocase {[0-9a-z]} $Ligne]} { continue } if {[regexp {\.\.} $Ligne]} { regsub {\.\.} $Ligne "" Ligne while {[regexp " " $Ligne ]} { regsub -all " " $Ligne " " Ligne } set LesAAs [split [string trim $Ligne] " "] set LesAAsRestants $LesAAs set OnAttendPP 0 continue } if {$OnAttendPP} { continue } set Ligne [string toupper $Ligne]] set AACourant [lindex $LesAAsRestants 0] while {[regexp " " $Ligne ]} { regsub -all " " $Ligne " " Ligne } set nRestants [llength $LesAAsRestants] set LesScores [lrange [split [string trim $Ligne] " "] 0 [incr nRestants -1]] foreach AA $LesAAsRestants Score $LesScores { set MatriceDeSimilarite($AACourant,$AA) $Score set MatriceDeSimilarite($AA,$AACourant) $Score } set LesAAsRestants [lrange $LesAAsRestants 1 end] } foreach AA $LesAAs { set Ligne "" foreach BB $LesAAs { append Ligne " [format "%4.1f" [set MatriceDeSimilarite($AA,$BB)]]" } } } set NombreDeSequences [DecortiqueUnMSF $FichierMSF LesSequencesDansLOrdre Sequences] if {$NombreDeSequences<2} { return {} } foreach NomSeq $LesSequencesDansLOrdre { if {$NomSeq==$A} { set SeqA [set Sequences($NomSeq)] } if {$NomSeq==$B} { set SeqB [set Sequences($NomSeq)] } } set SeqA [string toupper $SeqA] set SeqB [string toupper $SeqB] set lSeqA [string length $SeqA] set lSeqB [string length $SeqB] set CumulScore 0 set nCumulScore 0 set CumulId 0 set nCumulId 0 set Commun "" set LongVraieA 0 set LongVraieB 0 for {set i 0} {$i<$lSeqA} {incr i} { if {$i >= $lSeqB} { break } set AA [string range $SeqA $i $i] set BB [string range $SeqB $i $i] if { ! [regexp {\.} $AA]} { incr LongVraieA } if { ! [regexp {\.} $BB]} { incr LongVraieB } if { $AA != $BB } { append Commun " " incr nCumulId } else { if { ! [regexp {\.} $AA]} { incr CumulId } append Commun $AA incr nCumulId } if { ! [info exists MatriceDeSimilarite($AA,$BB)]} { continue } set Score [set MatriceDeSimilarite($AA,$BB)] set CumulScore [expr $CumulScore + $Score] incr nCumulScore } set nCumulScore [Maxi 1 $nCumulScore] set PI [expr $CumulId*100/[Maxi 1 [Mini $LongVraieA $LongVraieB]]] set PS [expr $CumulScore*1.0/$nCumulScore] return "$PI % identite et $PS moyenne de similarite ($Entete)" } proc PJulie {} { set Id [AfficheOverview] update idletasks set w [set ::Ovw(O$Id,w)] set ::Ovw(O$Id,Feat) "BLOCK" MetAJourDessinOverview $Id $w set Lid [$w find all] foreach id $Lid { lappend Ltags {*}[$w gettags $id] } set Ltags [lsort -unique $Ltags] puts "$Ltags" $w delete algtRegion algtCentre set file [file rootname [file tail [set ::Defauts(Fichier[TypeAli])]]] PrintCanvas $w png $file.png exit } proc PNApres {Champ dans Texte} { return [ValeurApres $Champ dans $Texte "ExposantEventuellementMalFoutu"] } proc PNico {} { global ListePDB StrucAVoir TabSF EquivalenceZone puts "ListePDB $ListePDB" foreach {sref smol} $ListePDB { puts "\nMODELES $sref $smol" set StrucAVoir [list $sref $smol] set ref [DonneIdDeAccessPDB $sref] set chr [DonneChainDeAccessPDB $sref] set rot $ref set chn [DonneChainDeAccessPDB $smol] set seq [set ::Sequences($smol)] #set Lf $TabSF($sref,PFAM-A) set Lf [list] lappend Lf [list fstart 1 fstop [LongueurDeLAlignement] fcolor yellow fscore 0.0 fnote "whole seq."] foreach f $Lf { DecortiqueUneFeature $f dg0 fg0 col score note while {[string index $seq $dg0] eq "."} { incr dg0 if {$dg0 == $fg0} { puts "ca merde " exit } } while {[string index $seq $fg0] eq "."} { incr fg0 -1 if {$fg0 == $fg0} { puts "ca merde " exit } } puts "\ndg0 $dg0 fg0 $fg0 $note" set Exc "" lappend EquivalenceZone($sref) [list [list [DonnePosGS $sref $dg0] [DonnePosGS $sref $fg0]] $chr $sref $Exc $dg0 $fg0] lappend EquivalenceZone($smol) [list [list [DonnePosGS $smol $dg0] [DonnePosGS $smol $fg0]] $chn $smol $Exc $dg0 $fg0] SuperAvecOrdali AppliqueSuperposition ExamSupOutliers $sref $smol $dg0 $fg0 unset -nocomplain EquivalenceZone } } exit return } proc POADuTFAs {FileTFAs FileOut {WithConsensus 1} {MSFouClustalouPOouPIR MSF} {FileMatrice ""}} { ################################################################ ### Conversion d'un fichier format clustal au format msf ### ################################################################ set RepPOA "/gcg/extensions/POA/poa_pkg" set FileMSF "$FileOut.msf" if {$FileMatrice == "" } {set FileMatrice "$RepPOA/blosum80.mat" } if {$WithConsensus } {set HbOpt "-hb" } else {set HbOpt "" } if {[EstCeDeLADN $FileTFAs]} {set Case "-tolower"} else {set Case "-toupper"} set OutOpt "-clustal" if {[string equal -nocase $MSFouClustalouPOouPIR "PO" ]} {set OutOpt "-po" } if {[string equal -nocase $MSFouClustalouPOouPIR "PIR" ]} {set OutOpt "-pir"} set Commande "eval exec /gcg/extensions/bin/poa -read_fasta $FileTFAs $Case $HbOpt $OutOpt $FileOut $FileMatrice" catch {eval $Commande} Message if {[string equal -nocase $MSFouClustalouPOouPIR "MSF"]} {set FileOut [Clustal2MSF $FileOut $FileMSF]} return $FileOut } proc POINTFIXE {mtrans vaxe vxba1 vxba2 axaxe} { upvar $axaxe xaxe T_M trans $mtrans 1 T_V axe $vaxe 1 foreach i {1 2 3} { set xbar($i,1) [lindex $vxba1 [expr {$i-1}]] set xbar($i,2) [lindex $vxba2 [expr {$i-1}]] } #... Trouver les coord. XAXE de la projection sur l'axe de rotation #... du milieu des barycentres AB #... trans : matrice de rotation B->A #... axe : cos. dir. de l'axe #... xbar : barycentres A et B #... Tout en coordonnees cartesiennes T_M aa [M_unit] 1 #... Passage en axes locaux, X suivant l'axe, Z normal a AB, origine au milieu foreach k {1 2 3} { set xp($k) [expr {([set xbar($k,1)]+[set xbar($k,2)])/2.}] set cm1(1,$k) [set axe($k)] set cm1(2,$k) [expr {([set xbar($k,2)]-[set xbar($k,1)])}] } if {[expr {pow($cm1(2,1),2)+pow($cm1(2,2),2)+pow($cm1(2,3),2)}] < 0.000001} { set cm1(2,1) $cm1(1,2) set cm1(2,2) [expr {-1.0*$cm1(1,1)}] set cm1(2,3) 0. } if {[expr {pow($cm1(2,1),2)+pow($cm1(2,2),2)+pow($cm1(2,3),2)}] < 0.000001} { set cm1(2,2) $cm1(1,3) set cm1(2,3) [expr {-1.0*$cm1(1,2)}] set cm1(2,1) 0. } ORTHON cm1 AA set MCM1 [M_tM [M_T cm1]] T_M cm1 $MCM1 1 # SMI3(CM1,C,DET) array set C [array get cm1] set MC [M_invM [M_T C]] #... X(local)=C*(Xortho-xp) pour origine en P set vxp [V_T xp] set VXA [TRANSFORME $vxba1 $MC $vxp] set VXB [TRANSFORME $vxba2 $MC $vxp] T_M C $MC 1 T_V XA $VXA 1 T_V XB $VXB 1 T_V xp $vxp 1 MATMATMAT C trans cm1 rot if {abs($rot(2,3)) < 0.000001} { # rotation 0 ou pi set ZAXE 0. } else { # Z local de l'axe set ZAXE [expr {$XA(2)*($rot(2,2)+1.)/$rot(2,3)}] } #... Retour aux axes cartesiens foreach k {1 2 3} { set xaxe($k) [expr {[set cm1($k,3)] * $ZAXE + [set xp($k)]}] } return } proc PPO {FichierMSF {NomQuery QUERY_PROTEIN} {IdMin 0.98}} { #OUT = [list [list GOTerm1 Type Def nAccess [list Access1 Access2 ...]] [list GOTerm2 Type Def nAccess [list Access1 Access2 ...]]] #PPO Proximal Protein Ontology if {![file exists $FichierMSF]} {return} set LesAccess [LesProteinesIdentiquesDuMSF $FichierMSF $NomQuery $IdMin] #nG AskLesPagesInfos load $LesAccess protein AskLesPagesInfos load $LesAccess uniprot set LesGO {} foreach Access $LesAccess { if {[EstUnAccessPDB $Access]} {continue} Espionne "Access $Access -> 2GO" set PageInfo [AskLesPagesInfos ask $Access] if {$PageInfo == ""} {continue} set LesGODeLAccess [PageInfo2GO $PageInfo] set LesGOAncestraux [TousLesAncetresGODesGO $LesGODeLAccess] set TousLesGODeLAccess [concat $LesGODeLAccess $LesGOAncestraux] foreach GO [lsort -unique $TousLesGODeLAccess] { if {![info exists TabTmp(GO,$GO,LesAccess)]} { lappend LesGO $GO set TabTmp(GO,$GO,LesAccess) {} } lappend TabTmp(GO,$GO,LesAccess) $Access } } AskLesPagesInfos unset set LesGOSelected {} foreach GO [EnterrerLesAncetresGO $LesGO] { if {![info exists TabTmp(GO,$GO,LesAccess)]} {continue} set LesAccess [lsort -unique [set TabTmp(GO,$GO,LesAccess)]] set nAccess [llength $LesAccess] foreach Type [GODB GO $GO LesTypes] { set Def [lindex [GODB Type $Type GO $GO LesDefinitions] 0] lappend LesGOSelected [list $GO $Type $Def $nAccess $LesAccess] } } return [lsort -index 1 [lsort -index 3 -real -decreasing $LesGOSelected]] } proc PRVECT {I aA aB aBB} { upvar $aA A upvar $aB B upvar $aBB BB # PRODUIT VECTORIEL DES VECTEURS LIGNES I ET J=I+1 DE LA MATRICE A # ( A UN FACTEUR CONSTANT PRES : LE VOL. DE LA MAILLE) MOD3 $I J K foreach L {1 2 3} { MOD3 $L M N set B($K,$L) [expr {[set A($I,$M)]*[set A($J,$N)]-[set A($I,$N)]*[set A($J,$M)]}] } # COMPOSANTES DIRECTES foreach L {1 2 3} { set A($K,$L) [expr {[set B($K,1)]*[set BB(1,$L)]+[set B($K,2)]*[set BB(2,$L)]+[set B($K,3)]*[set BB(3,$L)]}] } return } proc PSORTII {Fichier {Quoi ""}} { Wup "Programme de localisation cellulaire de proteines" Wup "Si quoi vide verbose mode (sortie detaillee) sinon version light" if {![file exists $Fichier]} {return ""} set RepPsort "[RepertoireDuGenome]/psort" if {![file exists $RepPsort]} {file mkdir $RepPsort} set PAB [file tail $Fichier] set FichierSortie "$RepPsort/$PAB" if {[file exists $FichierSortie]} { Espionne "$FichierSortie" FaireLire toto if {[OuiOuNonMemo "Output File already exists.\nWould You like to keep it" ]} {return ""} } if {[TestSiProteine $Fichier]=="-1"} { FaireLire "$PAB is not a Protein sequence.\nPSORTII request an amino acid sequence." return "" } if {$Quoi == ""} { set CmdPsort "exec /home/jmuller/Software/psortII/psort -v $Fichier > $FichierSortie" } else { set CmdPsort "exec /home/jmuller/Software/psortII/psort $Fichier > $FichierSortie" } set message "" catch {eval $CmdPsort} message if {$message!=""} {Espionne $message} return "" } proc PSORTIIPourTous {{LesFichiers ""} {Quoi ""} {RepTFA ""}} { Wup "Localisation cellulaire de toutes les proteines du projet Gscope" if {$LesFichiers==""} {set LesFichiers [ListeDesPABs]} if {$RepTFA==""} {set RepTFA "[RepertoireDuGenome]/prottfa"} if {! [file exists $RepTFA]} {return ""} foreach PAB $LesFichiers { PSORTII "$RepTFA/$PAB" $Quoi } return "" } proc PSPoulet {} { #FichierSortie /genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/PSPoulet #FichierSortie /genomics/link/Tau/GSTControl/BlastpSurStringPoulet/PSPoulet set I 0; set non 0; set ok 0; #foreach GI [InterrogeListTau ListOf GI] foreach GI [InterrogeListTauControl ListOf GI] { incr I; set LesProbeSetId {} #set Access [InterrogeSortieNcbi $GI Access] #set DB [InterrogeSortieNcbi $GI DB] set Access [InterrogeSortieNcbiControl $GI Access] set DB [InterrogeSortieNcbiControl $GI DB] if {[regexp "pdb" $DB]} { set FichierRequete "/genomics/link/Tau/entreepdb.bql" set FichierSortie "/genomics/link/Tau/sortiepdb.txt" set Elmt [split $Access "_"] set accesspdb [lindex $Elmt 0] set chain [lindex $Elmt 1] lappend LesLignesBird "ID * DB PDB" lappend LesLignesBird "WH SQLNATIVE SELECT distinct dr.dbaccession from pdb.header as h , pdb.dbref as dr where h.idcode='$accesspdb' and dr.chainid='$chain' and h.oid=dr.key_fk" lappend LesLignesBird "FM CSV" SauveLesLignes $LesLignesBird dans $FichierRequete BirdForceHoan $FichierRequete $FichierSortie foreach LigneFic [LesLignesDuFichier $FichierSortie] { if {[regexp "Query" $LigneFic]} {continue} set Access $LigneFic } } foreach ProbeSetId [lsort -unique [AffyAnnoChicken $Access "Probe_Set_ID"]] { lappend LesProbeSetId $ProbeSetId } set LesProbeSetId [ListeSansDoublon $LesProbeSetId] if {$LesProbeSetId!={}} { incr ok set PSI [join $LesProbeSetId ","] set Ligne "$GI\t$Access\t$PSI" lappend LesLignes $Ligne } else { set PSI "novalue" if {[regexp "XP_" $Access] || [regexp "NP_" $Access]} { set result [TraiteLesRefSeqP $Access] set result [string range $result 0 [expr [string last "|" $result]-1]] set LesMots [split $result "|"] set i 0 foreach Mot $LesMots { incr i if {$i==2 && [regexp "." $Mot]} {set Mot [lindex [split $Mot "."] 0]} foreach ProbeSetId [lsort -unique [AffyAnnoChicken $Mot "Probe_Set_ID"]] { lappend LesProbeSetId $ProbeSetId } } if {$LesProbeSetId!={}} { incr ok #Espionne "nvok" set PSI [join $LesProbeSetId ","] set Ligne "$GI\t$Access\t$PSI" lappend LesLignes $Ligne } else { set Ligne "$GI\t$Access\tvide" lappend LesLignes $Ligne incr non #Espionne "vraimentnon" } } else { set Ligne "$GI\t$Access\tvide" lappend LesLignes $Ligne incr non } } } #SauveLesLignes $LesLignes dans "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/PSPoulet" SauveLesLignes $LesLignes dans "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/PSPouletControl" Espionne "non $non ok $ok" } proc PSSMpour3D {file} { global LesNomsDesSequencesDansLOrdre global Sequences global TDesPCI global PipeCollection global Defauts global ScoreDansProfil LesDefauts LesDefauts Mode "batch" set PipeCollection 0 set ScoreDansProfil 1 set ficOut "$file-3d.out" set NQuery [QueryDuTFA $file] catch {exec blastall -i $file -o $ficOut -p blastp -d pdb -e 10} Message set LBlast [LesLignesDuFichier $ficOut] DecortiqueBlast $LBlast 10 10 Query lBanqueId lAccess lDE lScoreDansProfil lPN puts "banqueID" EspionneL $lBanqueId puts "lscoredansprofil" EspionneL $lScoreDansProfil if {[llength $lBanqueId] == 0} { return 0 } set maxScore 0 set best "" foreach a $lBanqueId b $lScoreDansProfil { if {$b > $maxScore} { set maxScore $b set best $a } } return $best } proc PackBo {Bouton {Action ""}} { global PackBo if {$Action=="NoWeb"} { set NoWeb 1 } else { set NoWeb 0 } if {$NoWeb && [PourWscope]} { destroy $Bouton ; return "" } set W [winfo parent [winfo parent $Bouton]] if { ! [info exists PackBo($W)]} { set PackBo($W) -1 } set B [incr PackBo($W)] set BpR 5 set DestFrame "[winfo parent $Bouton].rangee[expr $B/$BpR]" if {[expr $B%$BpR == 0]} { pack $DestFrame -side "top" -fill x -pady 1m } incr B if {[expr $B%$BpR == 0]} { set ProchaineDestFrame "[winfo parent $Bouton].rangee[expr $B/$BpR]" if { ! [winfo exists $ProchaineDestFrame]} {frame $ProchaineDestFrame} } pack $Bouton -in $DestFrame -side left -expand 1 -padx 1m return $Bouton } proc PackExtension {{ext all}} { global OrdaliDir set LextOri {tclfastme0.1 tsurf0.1 biotext0.1 tclcluspack0.1 tclordalie0.1} if {$ext eq "all"} { set Lext $LextOri } elseif {$ext ni $LextOri} { puts "possible extensions are :\n$LextOri" exit } else { set Lext $ext } set Lf [glob -nocomplain [file join $OrdaliDir tmp *]] if {$Lf != {}} { file delete -force {*}$Lf } foreach ext $Lext { puts "\n$ext" cd [file join $OrdaliDir tmp] file copy [file join $OrdaliDir Extensions $ext] $ext/ cd $ext set Lsvn [glob -nocomplain */.svn] if {$Lsvn != {}} { file delete -force {*}$Lsvn } cd ../ set cmd "zip ${ext}.zip ${ext}/*" puts "==> $cmd" catch {exec tcsh -c "zip ${ext}.zip ${ext}/*"} Msg puts "zip : $Msg" catch {exec tar -cvf "${ext}.tar" $ext} Msg puts "tar : $Msg" catch {exec gzip "${ext}.tar"} Msg puts "gzip $Msg" file delete -force $ext } exit } proc PackLibrairies {plat} { set odir $::OrdaliDir switch $plat { "Linux-x86" - "linux-ix86" { set rep "Linux-x86" set pre lib set suf ".so" } "Linux-x86_64" - "linux-x86_64" { set rep "Linux-x86_64" set pre lib set suf ".so" } "Windows" - "win32-ix86" { set rep Windows set pre "" set suf ".dll" } "Mac" - "macosx-ix86" { set rep MacOSX-x86 set pre "lib" set suf ".dylib" } } # first make it clean puts "\nPreparing for $pre" puts "cleaning ..." file delete -force [file join ToPack lib] puts "copying pure-tcl packages ..." file copy -force [file join $::OrdaliDir Extensions AllPlatform] [file join ToPack lib] puts "copying platform specific packages ..." foreach pkg {"tclcluspack0.1" "tclfastme0.1" "tsurf0.1" "biotext0.1" "tclordalie0.1"} { set libin [file join $::OrdaliDir Extensions $pkg $rep "${pre}${pkg}$suf"] set pkgin [file join .. Extensions $pkg $rep pkgIndex.tcl] set libout [file join ToPack lib $pkg "${pre}${pkg}$suf"] set pkgout [file join ToPack lib $pkg pkgIndex.tcl] # create dir file mkdir [file join ToPack lib $pkg] file copy -force $libin $libout file copy -force $pkgin $pkgout if {$pkg eq "biotext0.1"} { file copy -force [file join $odir Extensions $pkg biotext.tcl] [file join ToPack lib $pkg] } } # tcl extensions # tcl3d file copy -force [file join $odir Extensions $rep tcl3d-0.4.1 tcl3d0.4.1] [file join ToPack lib] file copy -force [file join $odir Extensions $rep tcl3d-0.4.1 extlibs] [file join ToPack lib] # sqlite3 file copy -force [file join $odir Extensions $rep sqlite3] [file join ToPack lib] # tdom file copy -force [file join $odir Extensions $rep tdom-0.8.3] [file join ToPack lib] if {$rep eq "MacOSX-x86"} { file copy -force [file join $odir Extensions $rep TclOO] [file join ToPack lib] } puts "\ndone !" } proc PageHTMLDuNCBI {Uid {Type nucleotide} {View default}} { package require http set Adresse [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=&list_uids=$Uid&db=$Type&view=$View"] return [::http::data $Adresse] } proc PageInfo {Id {Banque ""} {Field ""}} { set Commande "" ###Si l'id est un contig humain####### if {[EstUnAccessDeHumanContig $Id]} { set Commande "[ProgPathway fetchcat] $Id" catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {return $GetzOut} } set Commande "" ####Si l'id est un access de PDB######## if {[EstUnAccessPDB $Id]} { if {[string equal -nocase $Field "seq"]} { set TFA [TFADeLaBanqueBlast PDB $Id] if {$TFA != ""} {return $TFA} regsub -nocase {_[a-z]*} $Id "" Id set Commande "[ProgPathway getz] \"\\\[PDB-id:$Id\\\]\)\" -f seq -sf fasta" } else { regsub -nocase {_[a-z]*} $Id "" Id set Commande "[ProgPathway getz] \"\\\[PDB-id:$Id\\\]\)\" -e" } } ####Si l'id est un access d'INTERPRO######## if {[EstUnAccessINTERPRO $Id]} { set Commande "[ProgPathway getz] \"\\\[interpro-id:$Id\\\]\)\" -e" } set IdCourt $Id regsub -nocase {^[0-9a-z_]*:} $Id "" IdCourt set Banque [string tolower $Banque] if {[string equal -nocase $Banque "genembl"]} {set Banque "genbankfull"} if {[string equal -nocase $Banque "genbank"]} {set Banque "genbankfull"} if {$Banque == "genbankfull"} { ##Mise en attente si la banque est en mise à jour set FileUpdateGenbank "/gcg/Update/.genbank_update" if {[file exists $FileUpdateGenbank]} { Espionne "SRS is updating the genbank database, please wait" AttendreTantQueExiste "/gcg/Update/.genbank_update" Espionne "The genbank database updating is done" } } set OptionFastaSiSeq "" if {[regexp -nocase "seq" $Field]} {set OptionFastaSiSeq "-sf fasta"} ####Si l'id est un access de VARPLIC######## if {[EstUnAccessVARSPLIC $Id]} { if {[string equal -nocase $Field "seq"]} { set Commande "[ProgPathway getz] \"\\\[VARSPLIC-ID:$IdCourt]\)\" -e" } else { regsub {\-[0-9]+$} $IdCourt "" IdCourt if {$Field == ""} { set Commande "[ProgPathway getz] \"\\\[protein-acc:$IdCourt]\)\" -e $OptionFastaSiSeq" } else { set Commande "[ProgPathway getz] \"\\\[protein-acc:$IdCourt]\)\" -f \{$Field\} $OptionFastaSiSeq" } } } if {$Commande != ""} { catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {return $GetzOut} } set LesChamps [list "acc" "id" "prd" "gid" "gen"] ####Si l'id n'a pas de banque connu######## set Commande "" if {$Banque == "" || [string equal -nocase $Banque "unknown"]} { foreach Champs $LesChamps { set Commande "" if {$Champs == "acc"} {set Commande "[ProgPathway getz] \"\(\\\[\{protein genbankfull est\}-acc:$IdCourt\\\]\)\" "} if {$Champs == "id" } {set Commande "[ProgPathway getz] \"\(\\\[\{protein genbankfull est\}-id:$IdCourt\\\]\)\" "} if {$Champs == "prd"} {set Commande "[ProgPathway getz] \"\(\\\[protein-prd:$IdCourt\\\]\)\" "} if {$Champs == "gid"} {set Commande "[ProgPathway getz] \"\(\\\[\{genbankfull est\}-gid:$IdCourt\\\]\)\" "} if {$Champs == "gen"} {set Commande "[ProgPathway getz] \"\(\\\[protein-gen:$IdCourt\\\]\)\" "} if {$Commande == ""} {continue} if {$Field == ""} { append Commande " -e $OptionFastaSiSeq" } else { append Commande " -f \{$Field\} $OptionFastaSiSeq" } catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {return $GetzOut} } } ####Si l'id est un access ou id normal je cherche dans getz######## set Commande "" foreach Champs $LesChamps { set Commande "" if {$Champs == "acc"} {set Commande "[ProgPathway getz] \"\(\\\[$Banque-acc:$IdCourt\\\]\)\" "} if {$Champs == "id" } {set Commande "[ProgPathway getz] \"\(\\\[$Banque-id:$IdCourt\\\]\)\" "} if {$Champs == "prd"} {set Commande "[ProgPathway getz] \"\(\\\[$Banque-prd:$IdCourt\\\]\)\" "} if {$Champs == "gid"} {set Commande "[ProgPathway getz] \"\(\\\[$Banque-gid:$IdCourt\\\]\)\" "} if {$Champs == "gen"} {set Commande "[ProgPathway getz] \"\(\\\[$Banque-gen:$IdCourt\\\]\)\" "} if {$Commande == ""} {continue} if {$Field == ""} { append Commande " -e $OptionFastaSiSeq" } else { append Commande " -f \{$Field\} $OptionFastaSiSeq" } catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {return $GetzOut} } global tcl_platform if {[set tcl_platform(platform)] == "windows"} { set PageInfo [join [WgetzSurWeb $IdCourt] "\n"] if {$PageInfo != "" && ![string equal -nocase $PageInfo "ERREUR"]} {return $PageInfo} } return } proc PageInfo2GO {PageInfo} { set TousLesGO {} foreach Requete [PageInfo2Requetes $PageInfo] { if {[regexp -nocase "^go:" $Requete]} { lappend TousLesGO [string toupper $Requete] continue } foreach GO [2GO $Requete LesLiens] {lappend TousLesGO [string toupper $GO]} } return [ElimineLesRedondancesDansUneListe [EnterrerLesAncetresGO [LesGODeRefDesGO $TousLesGO]]] } proc PageInfo2Kegg {Page} { set LesKegg {} foreach Req [PageInfo2Requetes $Page] { set Req [string trim $Req ] if {[regexp -nocase {^ec[ \:]} $Req]} { regsub -nocase {^ec[ \:]} $Req "" Req set Req [CorrigeLEC $Req] lappend LesKegg [list EC $Req] } elseif {[regexp -nocase {^go:} $Req]} { regsub -nocase {^go:} $Req "" Req #LP ^go\: au lieu de ^go: dans les 2 lignes precedentes } else {continue} foreach Pathway [InterrogeECCpdRn Element $Req LesPathway] {lappend LesKegg [list Pathway $Pathway]} foreach Kegg [InterrogeKEGG Lien $Req LesKegg ] { lappend LesKegg [list Kegg $Kegg] foreach Pathway [InterrogeKEGG Kegg $Kegg LesPathway ] {lappend LesKegg [list Pathway $Pathway]} } } return [lsort -unique $LesKegg] } proc PageInfo2Requetes {Page} { if {$Page == ""} {return {}} set LesSomething {} foreach Ligne [split $Page "\n"] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {[info exists Champs]} {unset Champs} scan $Ligne "%s" Champs if {![info exists Champs]} {continue} if {[string equal -nocase $Champs "DE"]} { while {[regexp -nocase {EC[ \:]([0-9\.\-]+)} $Ligne tmp EC]} { lappend LesSomething [string tolower "ec [string trim [CorrigeLEC $EC]]"] regsub -nocase $tmp $Ligne "" Ligne } continue } if {[string equal -nocase $Champs "DR"]} { set Debut [expr [string first ";" $Ligne] + 1] set Ligne [string range $Ligne $Debut end] set Fin [expr [string first ";" $Ligne] - 1] lappend LesSomething [string tolower [string trim [string range $Ligne 0 $Fin]]] continue } if {[string equal -nocase $Champs "KW"]} { regsub "^$Champs" $Ligne "" Ligne set Ligne [string trim $Ligne] regsub -all "\.$" $Ligne "" Ligne set LaLigne [split [string trim $Ligne] ";"] foreach Element $LaLigne { set Element [string trim $Element] if {$Element == ""} {continue} lappend LesSomething [string tolower $Element] } continue } } return [ElimineLesRedondancesDansUneListe $LesSomething] } proc PageInfoLaTotale {Id {Banque ""} {Field ""}} { set IdCourt $Id regsub -nocase {^[0-9a-z_]*:} $Id "" IdCourt set PageInfo [PageInfo $Id $Banque $Field] if {$PageInfo != ""} {return $PageInfo} ####Si l'id est un access ou id normal je cherche dans GCG######## set Commande "[ProgPathway fetchcat] $Id" catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {return $GetzOut} set Commande "[ProgPathway fetchcat] $IdCourt" catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {return $GetzOut} ###Sinon je cherche dans les banques blast foreach Banque [list protein genembl est varsplic human genomes unigene] { set Commande "[ProgPathway fastacmd] -d $Banque -s $Id" catch {set GetzOut [eval exec $Commande]} Message if {[info exists GetzOut] && $GetzOut != ""} {return $GetzOut} } return } proc PagePropre {W} { global PagePropre if {[info exists PagePropre($W)]} { return $PagePropre($W) } return "" } proc PageWebGenome {Qui} { set FichierGenome "[RepertoireDuGenome]/fiches/fichierultime.$Qui" set LesICDS {} set LesDefinitionsGene1 {} set LesDefinitionsGene2 {} set LesBornesDuGene1 {} set LesBornesDuGene2 {} set Liste {} lappend Liste 8 lappend Liste "border='1' cellpadding='4' cellspacing='1'" lappend Liste "" lappend Liste "" "" "" "" "" "" "" "" lappend Liste "
    ICDS
    " "
    5\' limit
    " "
    3\' limit
    " "
    5\' primer
    " "
    3\' primer
    " "
    Best referent blastp hit
    " "
    annotation name
    " "
    annotation name
    " lappend Liste "" "" "" "" "" "" "" "" set Banniere [BannierePlateforme] set JeSuisSurUnICDS 0 set JeSuisSurEntete 0 set OnAUneAnnot 0 foreach Ligne [LesLignesDuFichier $FichierGenome] { if {$Ligne == ""} {continue} if {[regexp ">ICDS" $Ligne]} { set JeSuisSurUnICDS 1 set JeSuisSurEntete 0 } if {[regexp "FinICDS" $Ligne]} {set JeSuisSurUnICDS 0} if {[regexp "NombreTotal: " $Ligne]} {set JeSuisSurEntete 1} if {[regexp "Organisme: " $Ligne]} { set JeSuisSurEntete 1 set NomCourt [StringSuivant "Organisme: " dans $Ligne] } if {[regexp "NomComplet: " $Ligne]} { set Organisme [StringSuivant "NomComplet: " dans $Ligne] set Entete [EnteteDesPagesWebDesICDS "ICDS of $Organisme"] lappend PageWebDuGenome "$Entete" lappend PageWebDuGenome "$Banniere" set Image "[SiteICDS]/LogoSmall.jpg" lappend PageWebDuGenome "" lappend PageWebDuGenome "" lappend PageWebDuGenome "" lappend PageWebDuGenome "" lappend PageWebDuGenome "

    ICDS of $Organisme

    " lappend PageWebDuGenome "
    " } if {[regexp "Genbank: " $Ligne]} { set Genbank [StringSuivant "Genbank: " dans $Ligne] } if {[regexp "NombreTotal: " $Ligne]} { set Nombre [StringApres "NombreTotal: " dans $Ligne] lappend PageWebDuGenome "

    The genome of $Organisme contains $Nombre ICDS

    " } if {[regexp "^>ICDS: " $Ligne]} { set ICDS [StringSuivant ">ICDS: " dans $Ligne] lappend LesICDS "$ICDS" } if {[regexp "NomICDS: " $Ligne]} { set NomICDS [StringSuivant "NomICDS: " dans $Ligne] lappend LesNomsICDS "$NomICDS" } if {[regexp "OfficialAnnot1: " $Ligne]} { set OnAUneAnnot 1 set AnnotationOfficielle1 [StringSuivant "OfficialAnnot1: " dans $Ligne] scan $AnnotationOfficielle1 "%s %s %s %s %s" NumAnnot1 GenbankAnnot1 BanqueIdAnnot1 AccessAnnot1 Statut1 set DefAnnot1 [StringSuivant "$Statut1" dans $Ligne] lappend LesNumAnnot1 "$NumAnnot1" } if {[regexp "OfficialAnnot2: " $Ligne]} { set AnnotationOfficielle2 [StringSuivant "OfficialAnnot2: " dans $Ligne] scan $AnnotationOfficielle2 "%s %s %s %s %s" NumAnnot2 GenbankAnnot2 BanqueIdAnnot2 AccessAnnot2 Statut2 set DefAnnot2 [StringSuivant "$Statut2" dans $Ligne] lappend LesNumAnnot2 "$NumAnnot2" } if {[regexp "DefinitionDuReferent: " $Ligne]} { set Definition [StringSuivant "DefinitionDuReferent: " dans $Ligne] lappend LesDefinitions "$Definition" } if {[regexp "BornesRuptureBlast: " $Ligne]} { set BornesDeRupture [StringSuivant "BornesRuptureBlast: " dans $Ligne] scan $BornesDeRupture "%s %s" BorneDeRupture1 BorneDeRupture2 lappend LesBornesDeRupture1 "$BorneDeRupture1" lappend LesBornesDeRupture2 "$BorneDeRupture2" } if {[regexp "Oligo 5: " $Ligne]} { set LesInfosOligo5 [StringSuivant "Oligo 5: " dans $Ligne] scan $LesInfosOligo5 "%s %s %s %s %s %s %s" Oligo5 LongueurOligo5 TmOligo5 BorneAbsolue1Oligo5 BorneAbsolue2Oligo5 Borne1Oligo5 Borne2Oligo5 lappend LesOligos5 "$Oligo5" lappend LesLongueursOligo5 "$LongueurOligo5" lappend LesTmOligo5 "$TmOligo5" lappend LesBornesAbsolues1Oligo5 "$BorneAbsolue1Oligo5" lappend LesBornesAbsolues2Oligo5 "$BorneAbsolue2Oligo5" } if {[regexp "Oligo 3: " $Ligne]} { set LesInfosOligo3 [StringSuivant "Oligo 3: " dans $Ligne] scan $LesInfosOligo3 "%s %s %s %s %s %s %s" Oligo3 LongueurOligo3 TmOligo3 BorneAbsolue1Oligo3 BorneAbsolue2Oligo3 Borne1Oligo3 Borne2Oligo3 lappend LesOligos3 "$Oligo3" } if {! $JeSuisSurUnICDS && ! $JeSuisSurEntete && ! $OnAUneAnnot} { lappend LesNumAnnot1 "Not" lappend LesNumAnnot2 "Not" } } foreach CoupleICDS $LesICDS NomICDS $LesNomsICDS NumAnnot1 $LesNumAnnot1 NumAnnot2 $LesNumAnnot2 Definition $LesDefinitions BorneDeRupture1 $LesBornesDeRupture1 BorneDeRupture2 $LesBornesDeRupture2 Oligo5 $LesOligos5 Oligo3 $LesOligos3 { scan $CoupleICDS "%s %s" Gene1 Gene2 set UnICDS "$NomICDS" if {[regexp "NoOligoFound" $Oligo5]} {set Oligo5 "No Primer Found"} if {[regexp "NoOligoFound" $Oligo3]} {set Oligo3 "No Primer Found"} if {[regexp "MultipleOligosFound" $Oligo5]} {set Oligo5 "Several Hits Per Primers"} if {[regexp "MultipleOligosFound" $Oligo3]} {set Oligo3 "Several Hits Per Primers"} if {[regexp "ND" $Oligo5]} {set Oligo5 "Sequence too long to find primers"} if {[regexp "ND" $Oligo3]} {set Oligo3 "Sequence too long to find primers"} set Url "[WscopeICDS]&PagesWeb&$Qui&UnICDS&$UnICDS" lappend Liste "" lappend Liste "
    $BorneDeRupture1
    " lappend Liste "
    $BorneDeRupture2
    " lappend Liste "
    $Oligo5
    " lappend Liste "
    $Oligo3
    " lappend Liste "
    $Definition
    " lappend Liste "
    $NumAnnot1
    " lappend Liste "
    $NumAnnot2
    " } set Table [Html_TableFromList $Liste] lappend PageWebDuGenome $Table lappend PageWebDuGenome [Html_TheEnd] return [join $PageWebDuGenome "\n"] } proc PageWebGlobale {Qui} { set LesGenomesFaits 0 set FichierGenomes "[RepertoireDuGenome]/fiches/projetsICDS" set Banniere [BannierePlateforme] set Entete [EnteteDesPagesWebDesICDS "Genomes"] lappend PageWebDesGenomes "$Entete" lappend PageWebDesGenomes "$Banniere" set Image "[SiteICDS]/LogoSmall.jpg" lappend PageWebDesGenomes "" lappend PageWebDesGenomes "" lappend PageWebDesGenomes "" lappend PageWebDesGenomes "" lappend PageWebDesGenomes "" lappend PageWebDesGenomes "

    Genomes

    " lappend PageWebDesGenomes "
    " lappend PageWebDesGenomes "
    " foreach Ligne [LesLignesDuFichier $FichierGenomes] { scan $Ligne "%s %s" Qui NumeroGenbank set FichierUltime "[RepertoireDuGenome]/fiches/fichierultime.$Qui" if {! [file exists $FichierUltime]} {continue} if {[regexp -nocase -all "ChrII" $Ligne] || [regexp -nocase -all "Chromosome II" $Ligne] || [regexp -nocase -all "Chromosome 2" $Ligne]} {continue} incr LesGenomesFaits } lappend PageWebDesGenomes "
    $LesGenomesFaits Genomes available in the database
    " lappend PageWebDesGenomes "
    " foreach Ligne [LesLignesDuFichier $FichierGenomes] { scan $Ligne "%s %s" Qui NumeroGenbank set FichierUltime "[RepertoireDuGenome]/fiches/fichierultime.$Qui" if {! [file exists $FichierUltime]} {continue} set NomGenome [StringSuivant "$NumeroGenbank" dans $Ligne] set NomGenome [regsub ", complete genome" $NomGenome ""] set NomGenome [regsub "complete genome" $NomGenome ""] set NomGenome [regsub ", complete sequence" $NomGenome ""] set NomGenome [regsub "genomic DNA" $NomGenome ""] set NomGenome [regsub ", complete chromosome" $NomGenome ""] set NomGenome [string trim $NomGenome] set Url "[WscopeICDS]&PagesWeb&$Qui&Genome" lappend PageWebDesGenomes "$NomGenome
    " } lappend PageWebDesGenomes [Html_TheEnd] return [join $PageWebDesGenomes "\n"] } proc PageWebUnICDS {Qui ICDS} { set FichierGenome "[RepertoireDuGenome]/fiches/fichierultime.$Qui" set ICDS [regsub {\-} $ICDS " "] set LesICDS {} set LesDefinitionsGene1 {} set LesDefinitionsGene2 {} set LesBornesDuGene1 {} set LesBornesDuGene2 {} set LesBornesLimitesPourSequencage {} set LesOligos5 {} set LesOligos3 {} set LesBornesDeRupture {} set LesBornesAbsolues1Oligo5 {} set LesBornesAbsolues2Oligo5 {} set LesBornesAbsolues1Oligo3 {} set LesBornesAbsolues2Oligo3 {} set LesSequencePourOligo5 {} set LesSequencePourOligo3 {} set JeSuisSurUneICDS 0 set JeSuisSurUneEntente 0 set OnAUneAnnot 0 set OnAUnOrgaReferent 0 foreach Ligne [LesLignesDuFichier $FichierGenome] { if {$Ligne == ""} {continue} if {[regexp "NomComplet: " $Ligne]} { set Organisme [StringSuivant "NomComplet: " dans $Ligne] set JeSuisSurUneEntete 1 } if {[regexp "NomICDS: $ICDS" $Ligne]} { set JeSuisSurUneICDS 1 set JeSuisSurEntete 0 } if {[regexp "NombreTotal: " $Ligne]} {set JeSuisSurEntete 1} if {[regexp "FinICDS" $Ligne]} { set JeSuisSurUneICDS 0 } if {$JeSuisSurUneICDS} { if {[regexp "^>ICDS: " $Ligne]} { set ICDS [StringSuivant ">ICDS: " dans $Ligne] scan $ICDS "%s %s" Gene1 Gene2 } if {[regexp "Orientation: " $Ligne]} { set Orientation [StringSuivant "Orientation: " dans $Ligne] if {$Orientation == "R"} { set Orientation "Reverse" } if {$Orientation == "F"} { set Orientation "Forward" } } if {[regexp "OfficialAnnot1: " $Ligne]} { set OnAUneAnnot 1 set AnnotationOfficielle1 [StringSuivant "OfficialAnnot1: " dans $Ligne] scan $AnnotationOfficielle1 "%s %s %s %s %s" NumAnnot1 GenbankAnnot1 BanqueIdAnnot1 AccessAnnot1 Statut1 set DefAnnot1 [StringSuivant "$Statut1" dans $Ligne] lappend LesNumAnnot1 "$NumAnnot1" } if {[regexp "OfficialAnnot2: " $Ligne]} { set AnnotationOfficielle2 [StringSuivant "OfficialAnnot2: " dans $Ligne] scan $AnnotationOfficielle2 "%s %s %s %s %s" NumAnnot2 GenbankAnnot2 BanqueIdAnnot2 AccessAnnot2 Statut2 set DefAnnot2 [StringSuivant "$Statut2" dans $Ligne] lappend LesNumAnnot2 "$NumAnnot2" } if {[regexp "DefinitionDuReferent: " $Ligne]} { set Definition [StringSuivant "DefinitionDuReferent: " dans $Ligne] } if {[regexp "BornesGene1: " $Ligne]} { set BornesDuGene1 [StringSuivant "BornesGene1: " dans $Ligne] } if {[regexp "OrganismeReferent: " $Ligne]} { set OnAUnOrgaReferent 1 set OrganismeReferent [StringSuivant "OrganismeReferent: " dans $Ligne] } if {[regexp "BornesGene2: " $Ligne]} { set BornesDuGene2 [StringSuivant "BornesGene2: " dans $Ligne] } if {[regexp "TailleDeIncertitude: " $Ligne]} { set TailleIncertitude [StringSuivant "TailleDeIncertitude: " dans $Ligne] } if {[regexp "BornesRuptureBlast: " $Ligne]} { set BornesDeRupture [StringSuivant "BornesRuptureBlast: " dans $Ligne] scan $BornesDeRupture "%s %s" BorneDeRupture1 BorneDeRupture2 } if {[regexp "BornesLimitesPourSequencage: " $Ligne]} { set BornesLimitesPourSequencage [StringSuivant "BornesLimitesPourSequencage: " dans $Ligne] } if {[regexp "Oligo 5: " $Ligne]} { set LesInfosOligo5 [StringSuivant "Oligo 5: " dans $Ligne] scan $LesInfosOligo5 "%s %s %s %s %s %s %s" Oligo5 LongueurOligo5 TmOligo5 BorneAbsolue1Oligo5 BorneAbsolue2Oligo5 Borne1Oligo5 Borne2Oligo5 lappend LesOligos5 "$Oligo5" lappend LesLongueursOligo5 "$LongueurOligo5" lappend LesTmOligo5 "$TmOligo5" lappend LesBornesAbsolues1Oligo5 "$BorneAbsolue1Oligo5" lappend LesBornesAbsolues2Oligo5 "$BorneAbsolue2Oligo5" } if {[regexp "Oligo 3: " $Ligne]} { set LesInfosOligo3 [StringSuivant "Oligo 3: " dans $Ligne] scan $LesInfosOligo3 "%s %s %s %s %s %s %s" Oligo3 LongueurOligo3 TmOligo3 BorneAbsolue1Oligo3 BorneAbsolue2Oligo3 Borne1Oligo3 Borne2Oligo3 } if {[regexp "LesBornesAbsolues: " $Ligne]} { set LesBornesAbsolues [StringSuivant "LesBornesAbsolues: " dans $Ligne] scan $LesBornesAbsolues "%s %s %s %s %s %s" DebutZoneSequencage DebutFront DebutZoneIncertaine FinSequenceIncertaine FinFront FinZoneSequencage } if {[regexp "SequencePourOligo5: " $Ligne]} { set SequencePourOligo5 [StringSuivant "SequencePourOligo5: " dans $Ligne] } if {[regexp "SequencePourOligo3: " $Ligne]} { set SequencePourOligo3 [StringSuivant "SequencePourOligo3: " dans $Ligne] } if {[regexp "Sequence: " $Ligne]} { set SequenceComplete [StringSuivant "Sequence: " dans $Ligne] } } } if {$SequenceComplete != "ND"} { set SequenceDecoupee [SequenceDecoupee $SequenceComplete $DebutZoneIncertaine $FinSequenceIncertaine] set SequenceCompleteModifiee [SequenceColoree $SequenceComplete $BorneAbsolue1Oligo5 $BorneAbsolue2Oligo5 $DebutZoneIncertaine $FinSequenceIncertaine $BorneAbsolue1Oligo3 $BorneAbsolue2Oligo3] } else { set SequenceCompleteModifiee "ND" } if {! $OnAUneAnnot} { set NumAnnot1 ND set NumAnnot2 ND } if {! $OnAUnOrgaReferent } { set OrganismeReferent "ND" } set URL "[WscopeICDS]&PagesWeb&$Qui&Genome" set Entete [EnteteDesPagesWebDesICDS "Detailed Information for $ICDS"] set Banniere [BannierePlateforme] lappend PageWebICDS "$Entete" set Image "[SiteICDS]/LogoSmall.jpg" lappend PageWebICDS "$Banniere" lappend PageWebICDS "" lappend PageWebICDS "" lappend PageWebICDS "" lappend PageWebICDS "" lappend PageWebICDS "

    Detailed Information for $ICDS

    " lappend PageWebICDS "
    " lappend PageWebICDS "
    " lappend PageWebICDS "

    Best referent blastp hit: $Definition from $OrganismeReferent
    " lappend PageWebICDS "Frameshift or in-frame stop between $BorneDeRupture1 bp and $BorneDeRupture2 bp ($TailleIncertitude bp; $Orientation)

    " lappend PageWebICDS "Official annotation of the genes implicated in $ICDS: $NumAnnot1; $NumAnnot2" lappend PageWebICDS "

    Oligo 5\': $Oligo5 (Length: $LongueurOligo5 nt; Tm: $TmOligo5)
    " lappend PageWebICDS "Oligo 3\': $Oligo3 (Length: $LongueurOligo3 nt; Tm: $TmOligo3)


    " lappend PageWebICDS "

    $SequenceCompleteModifiee

    " lappend PageWebICDS "RED: predicted primers
    " lappend PageWebICDS "BLUE: predicted frameshift region
    " lappend PageWebICDS [Html_TheEnd] return [join $PageWebICDS "\n"] } proc PagesWeb {{Qui ""} {Quoi ""} {ICDS ""}} { if {$Qui ==""} { set Qui "Ms" } if {$Quoi==""} { set Quoi "Globale" } if {$ICDS==""} { set ICDS "ICDS0001"} if {$Quoi=="Globale"} { PageWebGlobale $Qui } elseif {$Quoi=="Genome"} { PageWebGenome $Qui } elseif {$Quoi=="UnICDS"} { PageWebUnICDS $Qui $ICDS } } proc Pair2tb {PairwiseMAFFile SeqFile1 SeqFile2 Pair2tbMafFile} { ### Execution du programme pair2tb ### # ? # if {![file exists $PairwiseMAFFile]} {Espionne "PairwiseMAFFile: $PairwiseMAFFile does not exists" ; return} if {![file exists $SeqFile1 ]} {Espionne "SeqFile1: $SeqFile1 does not exists" ; return} if {![file exists $SeqFile2 ]} {Espionne "SeqFile2: $SeqFile2 does not exists" ; return} #set Commande "exec [PATH pair2tb] $PairwiseMAFFile $SeqFile1 $SeqFile2 > $Pair2tbMafFile" set Commande "exec pair2tb $PairwiseMAFFile $SeqFile1 $SeqFile2 > $Pair2tbMafFile" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $Pair2tbMafFile } proc PairwizeDistancesInMsf {A {B ""} {Fichier ""}} { global PairwizeDistancesInMsf if {$A=="AccessList"} { set Fichier $B set B "" } if {$A=="SortedDistances"} { set Fichier $B set B "" } if {$Fichier=="" || [info exists PairwizeDistancesInMsf] && $PairwizeDistancesInMsf(Fichier)==$Fichier} { if {[info exists PairwizeDistancesInMsf($A,$B)]} { return $PairwizeDistancesInMsf($A,$B) } return "" } set PairwizeDistancesInMsf(Fichier) $Fichier set FicTmp [TmpFile "" "" "_"] file copy $Fichier $FicTmp if {[catch {exec clustalw -tree -outputtree=dist -infile=$FicTmp} Message]} { Warne "Error during PairwizeDistancesInMsf $Fichier\n clustalw -tree -outputtree=dist -infile=$FicTmp\n I got the message \n$Message" return "" } if { ! [file exists $FicTmp.dst]} { Warne "Error during PairwizeDistancesInMsf $Fichier\\n clustalw -tree -outputtree=dist -infile=$FicTmp\n The output file $FicTmp.dst doesn't exist" return "" } set L 0 foreach Ligne [lrange [LesLignesDuFichier $FicTmp.dst] 1 end] { if { ! [regexp "^( |\t)" $Ligne]} { scan $Ligne "%s" Access set Ligne [StringSuivant " " dans $Ligne] incr L set TabAccess($L) $Access lappend LesAccess $Access lappend LesLs $L set C 0 } foreach Mot [LesMotsDeLaLigne $Ligne] { incr C set TabDist($L,$C) $Mot lappend LesDistances $Mot } } if {[file exists $FicTmp]} {file delete $FicTmp} if {[file exists $FicTmp.dst]} {file delete $FicTmp.dst} foreach L $LesLs { foreach C $LesLs { set PairwizeDistancesInMsf($TabAccess($L),$TabAccess($C)) $TabDist($L,$C) } } set PairwizeDistancesInMsf(SortedDistances,) [lsort -real -unique $LesDistances] set PairwizeDistancesInMsf(AccessList,) $LesAccess return [PairwizeDistancesInMsf $A $B] } proc Palette {{Qui ""} {Quoi ""}} { global Palette set Qui [string tolower $Qui] set Quoi [string tolower $Quoi] if {$Quoi==""} { set Quoi "rgb" } if {[info exists Palette($Qui,$Quoi)]} { return $Palette($Qui,$Quoi) } if {[info exists Palette("EstCharge")]} { if {[regexp {^[0-9]+ [0-9]+ [0-9]+$} $Qui] && [info exists Palette(black,$Quoi)]} { set NearestRGB [NearestColor $Qui] return [Palette $NearestRGB $Quoi] } if {[regexp "similar" $Quoi]} { set Copains {} foreach NomCouleur $Palette(listof,name) { if {[regexp -nocase $Qui $NomCouleur]} { lappend Copains $NomCouleur } } return $Copains } return "" } set Palette("EstCharge") 1 set Fichier [open "/etc/X11/rgb.txt" "r"] set Texte "" set OnAttendDebut 1 while {[gets $Fichier Ligne]>=0 } { if {$OnAttendDebut} { if { ! [regexp {^!} $Ligne]} { continue } set OnAttendDebut 0 continue } regsub -all {[ \t]+} $Ligne " " Ligne set Ligne [string trim $Ligne] set LesMots [split $Ligne " "] set NomCouleur [join [lrange $LesMots 3 end] " "] set nomcouleur [string tolower $NomCouleur] lappend Palette(listof,name) $NomCouleur set RGB [join [lrange $LesMots 0 2] " "] lappend Palette(listof,rgb) $RGB set Palette($RGB,rgb) $RGB lappend Palette($RGB,synonyms) $NomCouleur set Palette($nomcouleur,rgb) $RGB set Palette($nomcouleur,name) $NomCouleur } close $Fichier set Palette(listof,name) [lsort -unique $Palette(listof,name)] foreach RGB $Palette(listof,rgb) { set Palette($RGB,name) [lindex $Palette($RGB,synonyms) 0] foreach NomCouleur $Palette($RGB,synonyms) { set nomcouleur [string tolower $NomCouleur] set Palette($nomcouleur,synonyms) $Palette($RGB,synonyms) } } return [Palette $Qui $Quoi] } proc PaletteDeCouleurs {{CouleurParDefaut ""} {FichierRgbTxt ""} {titre ""}} { global red green blue colorSpace color updating autoUpdate global LaCouleurDePaletteDeCouleurs global PEnGlobalPourPaletteDeCouleurs global CouleurNommeePourPaletteDeCouleurs if {$CouleurParDefaut == ""} { set CouleurParDefaut "black" } if {$FichierRgbTxt==""} { set FichierRgbTxt "[GscopeEtc]/rgb.txt" } set P [NomDe palette] toplevel $P if {$titre ne ""} { wm title $P $titre } else { wm title $P "This widget is taken from the TK8.2's demos. Adapted for GScope by Raymond Ripp." } set PEnGlobalPourPaletteDeCouleurs $P # Global variables that control the program: # # colorSpace - Color space currently being used for # editing. Must be "rgb", "cmy", or "hsb". # label1, label2, label3 - Labels for the scales. # red, green, blue - Current color intensities in decimal # on a scale of 0-65535. # color - A string giving the current color value # in the proper form for x: # #RRRRGGGGBBBB # updating - Non-zero means that we're in the middle of # updating the scales to load a new color,so # information shouldn't be propagating back # from the scales to other elements of the # program: this would make an infinite loop. # command - Holds the command that has been typed # into the "Command" entry. # autoUpdate - 1 means execute the update command # automatically whenever the color changes. # name - Name for new color, typed into entry. set colorSpace hsb set red 65535 set green 0 set blue 0 set list [winfo rgb $P $CouleurParDefaut] set red [lindex $list 0] set green [lindex $list 1] set blue [lindex $list 2] set CouleurParDefaut [format "#%04x%04x%04x" $red $green $blue] set color $CouleurParDefaut set updating 0 set autoUpdate 0 set CouleurNommeePourPaletteDeCouleurs "" # Create the menu bar at the top of the window. frame $P.menu -relief raised -borderwidth 2 pack $P.menu -side top -fill x menubutton $P.menu.file -text "ColorSpace : RGB, CMY or HSB" -menu $P.menu.file.m -underline 0 menu $P.menu.file.m $P.menu.file.m add radio -label "RGB color space" -variable colorSpace -value rgb -underline 0 -command "changeColorSpace rgb $P" $P.menu.file.m add radio -label "CMY color space" -variable colorSpace -value cmy -underline 0 -command "changeColorSpace cmy $P" $P.menu.file.m add radio -label "HSB color space" -variable colorSpace -value hsb -underline 0 -command "changeColorSpace hsb $P" # $P.menu.file.m add separator # $P.menu.file.m add radio -label "Automatic updates" -variable autoUpdate # -value 1 -underline 0 # $P.menu.file.m add radio -label "Manual updates" -variable autoUpdate # -value 0 -underline 0 # $P.menu.file.m add separator # $P.menu.file.m add command -label "Exit program" -underline 0 # -command { set LaCouleurDePaletteDeCouleurs "" } pack $P.menu.file -side left # Create the command entry window at the bottom of the window, along # with the update button. frame $P.bot -relief raised -borderwidth 2 pack $P.bot -side bottom -fill x label $P.commandLabel -text "Command:" entry $P.command -relief sunken -borderwidth 2 -textvariable command -font -Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-* button $P.update -text "Accept" -background "green" -command {set LaCouleurDePaletteDeCouleurs $color} button $P.dismiss -text "Dismiss" -background "red" -command {set LaCouleurDePaletteDeCouleurs ""} # pack $P.commandLabel -in $P.bot -side left pack $P.dismiss -in $P.bot -side left -pady .1c -padx .25c pack $P.update -in $P.bot -side right -pady .1c -padx .25c # pack $P.command -in $P.bot -expand yes -fill x -ipadx 0.25c # Create the listbox that holds all of the color names in rgb.txt, # if an rgb.txt file can be found. frame $P.middle -relief raised -borderwidth 2 pack $P.middle -side top -fill both #lm enleve la boucle sur les fichiers X11 Linux pour #lm la remplacer par la liste des coulerus reconnues #lm par Tk sur toutes les plates-formes # foreach i [list $FichierRgbTxt /usr/local/lib/X11/rgb.txt /usr/lib/X11/rgb.txt # /X11/R5/lib/X11/rgb.txt /X11/R4/lib/rgb/rgb.txt # /usr/openwin/lib/X11/rgb.txt] { # if ![file readable $i] { continue } # set f [open $i] global TkCol if {! [info exists TkCol]} {InitTkCol} frame $P.middle.left pack $P.middle.left -side left -padx .25c -pady .25c listbox $P.names -width 20 -height 12 -yscrollcommand "$P.scroll set" -relief sunken -borderwidth 2 -exportselection false bind $P.names "tc_loadNamedColor \[$P.names get \[$P.names curselection\]\] $P" scrollbar $P.scroll -orient vertical -command "$P.names yview" -relief sunken -borderwidth 2 pack $P.names -in $P.middle.left -side left pack $P.scroll -in $P.middle.left -side right -fill y foreach e [lsort [array names TkCol]] { regsub -all "_" $e " " e $P.names insert end $e } #lm je commentarise ... ##while {[gets $f line] >= 0} { # if {[llength $line] == 4} { #$P.names insert end [lindex $line 3] # } #} # close $f # break # } # Create the three scales for editing the color, and the entry for # typing in a color value. frame $P.middle.middle pack $P.middle.middle -side left -expand yes -fill y frame $P.middle.middle.1 frame $P.middle.middle.2 frame $P.middle.middle.3 frame $P.middle.middle.4 pack $P.middle.middle.1 $P.middle.middle.2 $P.middle.middle.3 -side top -expand yes pack $P.middle.middle.4 -side top -expand yes -fill x foreach i {1 2 3} { label $P.label$i -textvariable label$i scale $P.scale$i -from 0 -to 1000 -length 6c -orient horizontal -command "tc_scaleChanged $P" pack $P.scale$i $P.label$i -in $P.middle.middle.$i -side top -anchor w } label $P.nameLabel -text "Name:" entry $P.name -relief sunken -borderwidth 2 -textvariable CouleurNommeePourPaletteDeCouleurs -width 10 -font -Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-* pack $P.nameLabel -in $P.middle.middle.4 -side left pack $P.name -in $P.middle.middle.4 -side right -expand 1 -fill x bind $P.name {tc_loadNamedColor $CouleurNommeePourPaletteDeCouleurs $PEnGlobalPourPaletteDeCouleurs} # Create the color display swatch on the right side of the window. frame $P.middle.right pack $P.middle.right -side left -pady .25c -padx .25c -anchor s frame $P.swatch -width 2c -height 5c -background $color label $P.value -textvariable color -width 13 -font -Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-* pack $P.swatch -in $P.middle.right -side top -expand yes -fill both pack $P.value -in $P.middle.right -side bottom -pady .25c #lm rajoute grab update idletasks set OldGrab [grab current] grab set $P wm attributes $P -topmost 1 wm transient $P . changeColorSpace hsb $P tkwait variable LaCouleurDePaletteDeCouleurs destroy $P #lm remet le grab si necessaire if {$OldGrab ne ""} {grab [lindex $OldGrab 0]} return $LaCouleurDePaletteDeCouleurs } proc PaqArray {Label {aArray ""}} { if {$aArray==""} { set aArray $Label } upvar $aArray Array set Liste [array get Array] return "Array: $Label [SeriaList $Liste]" } proc PaqListe {Label Liste} { return "List: $Label [SeriaList $Liste]" } proc PaqTexte {Label Texte} { return "Text: $Label $Texte" } proc Paragraphe_WordML {TexteWordML} { return "\n$TexteWordML\n" } proc ParaloguesDe {Nom {Format ""}} { global LesParaloguesDe if { ! [info exists LesParaloguesDe($Format)]} { ChargeLesParaloguesDe $Format set LesParaloguesDe($Format) "SontCharges" } if {$Format==""} { if {[info exists LesParaloguesDe($Nom)]} { return [set LesParaloguesDe($Nom)] } else { return {} } } else { if {[info exists LesParaloguesDe($Nom,$Format)]} { return [set LesParaloguesDe($Nom,$Format)] } else { return {} } } } proc ParcoursFractal {Ax Ay Bx By N} { if {$N==1} { return "$Ax $Ax $Bx $By" } set Mx [expr ($Ax+$Bx)/2] set My [expr ($Ay+$By)/2] set Ex [expr ($Bx-$Ax)/5] set Ey [expr ($By-$Ay)/5] set Ix [expr $Mx-$Ey] set Iy [expr $My+$Ex] incr N -1 set D [ParcoursFractal $Ax $Ay $Ix $Iy $N] set F [ParcoursFractal $Ix $Iy $Bx $By $N] return [concat $D [lrange $F 2 end]] } proc ParcoursFractalGraphe {Ax Ay Bx By N} { foreach {X Y} [ParcoursFractal $Ax $Ay $Bx $By $N] { lappend LesX $X lappend LesY $Y } return [Graphe $LesX $LesY] } proc ParentExiste {tid} { if {[info exists ::Tn($tid,TaxId)]} { set ::ParRec $tid return [ParentExiste [set ::Tn($tid,Parent)]] } else { return $::ParRec } } proc Parle {TexteOuFichier {Langue ""}} { if {$Langue==""} { set Langue "en" } if { ! [regexp " " $TexteOuFichier] && [file exists $TexteOuFichier]} { exec espeak -f $TexteOuFichier -v $Langue } else { exec espeak $TexteOuFichier -v $Langue } return $TexteOuFichier } proc Parralelepipede {} { return } proc ParsClu {} { # Parseur de fichiers .clu générés par secator contenant la liste des séquences réparties par Cluster set SequencesTFA "/genomics/link/UCSCAlignements/g11/STAF/fiches/inputFiles/TronqueChr1.tfa" set FichierClu [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/inputFiles/TronqueChr1.clu" "r"] array set SeqTFA [readFasta $SequencesTFA 0] set ClustNum "" while { [gets $FichierClu LigneClu] >=0 } { if {[lindex $LigneClu 0] == "Cluster" } { puts $LigneClu set ClustNum [lindex $LigneClu 1] set OutTFA "/genomics/link/UCSCAlignements/g11/STAF/fiches/Clustering/Cluster[expr $ClustNum + 1].tfa" set Out "/genomics/link/UCSCAlignements/g11/STAF/fiches/Clustering/Cluster[expr $ClustNum + 1].seq" Sauve "" dans $OutTFA Sauve "" dans $Out } elseif { $ClustNum != ""} { if { $LigneClu != "" } { AppendAuFichier $OutTFA [formatFasta $LigneClu $SeqTFA($LigneClu,sequence)] AppendAuFichier $Out "$SeqTFA($LigneClu,sequence)" } } } } proc ParsR {Cluster} { # Parseur de sorties hclust-->cuttree du logiciel R set SequencesSLX [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/inputFiles/TronqueChr1.slx" "r"] set FichierClu [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/Cluster4/Cluster$Cluster.txt" "r"] set OutTFA "[Fiches]/Cluster4/Cluster$Cluster.tfa" set OutSLX "[Fiches]/Cluster4/Cluster$Cluster.slx" set ListeSLX {} while { [gets $SequencesSLX LigneSLX] >=0 } { ScanLaListe $LigneSLX AccessSLX SequenceSLX lappend ListeSLX "$AccessSLX $SequenceSLX" } while { [gets $FichierClu LigneClu] >=0 } { ScanLaListe $LigneClu AccessClu foreach Access $ListeSLX { ScanLaListe $Access AccessSLX SequenceSLX if { $AccessClu == $AccessSLX } { AppendAuFichier $OutTFA ">$AccessSLX" AppendAuFichier $OutTFA "$SequenceSLX" AppendAuFichier $OutSLX "$AccessSLX $SequenceSLX" } } } } proc ParseAnnotationXml {nomFichier aTableau} { package require tdom upvar $aTableau tab array unset tab array set tab {} set fh [open $nomFichier "r"] dom parse -channel $fh doc close $fh $doc documentElement root ## macsims set macsimsNode [$root selectNodes "/annotation/macsims"] set tab(Macsims,NorMD) [string trim [$macsimsNode selectNodes "string(./normd)"]] set tab(Macsims,Query) [string trim [$macsimsNode selectNodes "string(./cluster/query)"]] set tab(Macsims,Groupe,Taille) [string trim [$macsimsNode selectNodes "string(./cluster/@size)"]] set tab(Macsims,Groupe,Sequences) {} foreach n [$macsimsNode selectNodes "./cluster/access"] { #lappend tab(Macsims,Groupe,Sequences) [string trim [$n selectNodes "string(./text())"]] lappend tab(Macsims,Groupe,Sequences) [string trim [$n text]] } ## ec set ecNode [$root selectNodes "/annotation/ec"] set tab(EC,Commun) [string trim [$ecNode selectNodes "string(./common)"]] set tab(EC,Classes) {} set tab(EC,Classes,Liste) {} foreach n [$ecNode selectNodes "./classes/class"] { set nombre [string trim [$n selectNodes "string(./@number)"]] set classe [string trim [$n text]] lappend tab(EC,Classes) [list $nombre $classe] lappend tab(EC,Classes,Liste) $nombre set tab(EC,Classes,$nombre) $classe } set tab(EC,Sources) {} foreach n [$ecNode selectNodes "./sources/source"] { set ec [string trim [$n selectNodes "string(./@ec)"]] set access [string trim [$n text]] lappend tab(EC,Sources) [list $access $ec] } ## go set goNode [$root selectNodes "/annotation/gene_ontology"] set tab(GO,GPO) {} set tab(GO,Hierarchie) {} foreach n [$goNode selectNodes "./gpo/go"] { set id [string trim [$n selectNodes "string(./@id)"]] set type [string trim [$n selectNodes "string(./@type)"]] set niveaux [string trim [$n selectNodes "string(./@levels)"]] set parents [string trim [$n selectNodes "string(./@parents)"]] set def [string trim [$n text]] lappend tab(GO,GPO) [list $id $def $type $parents $niveaux] } foreach n [$goNode selectNodes "./hierarchy/go"] { set id [string trim [$n selectNodes "string(./@id)"]] set type [string trim [$n selectNodes "string(./@type)"]] set niveaux [string trim [$n selectNodes "string(./@levels)"]] set parents [string trim [$n selectNodes "string(./@parents)"]] set def [string trim [$n text]] lappend tab(GO,Hierarchie) [list $id $def $type $parents $niveaux] } ## def set deNode [$root selectNodes "/annotation/definition"] set tab(Definition,Score) [string trim [$deNode selectNodes "string(./@score)"]] set tab(Definition,Definition) [string trim [$deNode text]] ## pfam set pfNode [$root selectNodes "/annotation/pfam"] set tab(PFAM,Liste) {} foreach n [$pfNode selectNodes "./pfam_a"] { set access [string trim [$n selectNodes "string(./@access)"]] set from [string trim [$n selectNodes "string(./@from)"]] set longueurSeq [string trim [$n selectNodes "string(./@length)"]] set def [string trim [$n text]] lappend tab(PFAM,Liste) [list $access $def $from $longueurSeq] } #parray tab $doc delete } proc ParseBlast {Repertoire} { set FichierDesBlast [open "[Fiches]/$Repertoire/$Repertoire.best" "r"] set FichierDesBlastParses "[Fiches]/$Repertoire/$Repertoire.parsed" if { [file exists $FichierDesBlastParses] } { file delete $FichierDesBlastParses } while { [gets $FichierDesBlast Ligne] >=0 } { ScanLaListe $Ligne StafID LongQuery BId1 BId2 BId3 Score Expect Match Orientation X LongResult Debut Fin Query Barettes Result set Query [string toupper $Query] if { $Orientation == "Plus/Plus" } { set Orientation "+" } if { $Orientation == "Minus/Plus" } { set Orientation "-" } AppendAuFichier $FichierDesBlastParses "$StafID $BId1 $Debut $Fin $Orientation $Query" } } proc ParseCatalogue {} { global db set o [open cat.html r] fconfigure $o -encoding iso8859-1 set l [read -nonewline $o] set Ll [split $l \n] close $o $db eval {begin transaction} set nBook 0 set auteur "" foreach l $Ll { set l [Html2Char $l] #set l [encoding convertto utf-8 $l] # Genre if {[string first "class=\"cls9\"" $l] != -1} { set g [string range $l [string first "cls9" $l]+6 end] set g [string range $g 0 [string first "<" $g]-1] regsub -all " " $g "" genre puts "$genre" continue } # auteur, bid, titre, duree if {[string first "

    " $l] != -1} { if {$auteur ne ""} { $db eval {insert into livre values (NULL,$bid,$auteur,$titre,$genre,$duree,$resume)} #puts "$auteur" #puts "$titre" #puts "$bid" #puts "$genre" #puts "$resume" #puts "$duree" #puts "" incr nBook } set l [string range $l 22 end] set auteur [string range $l 0 [string first "<" $l]-1] set l [string range $l [string first ">" $l]+1 end] set l [string range $l [string first ">" $l]+1 end] set bid [string range $l 0 [string first "<" $l]-1] set l [string range $l [string first ">" $l]+1 end] set l [string range $l [string first ">" $l]+1 end] set titre [string range $l 0 [string first "<" $l]-1] set l [string range $l [string first ">" $l]+1 end] set l [string range $l [string first ">" $l]+1 end] set duree [string range $l 0 [string first "<" $l]-1] regsub -all " " $duree "" duree set resume "" continue } # resume if {[string first "

      " $l] != -1} { set l [string range $l 53 end] append resume [string range $l 0 [string first "<" $l]-1] } } #exit if {$auteur ne ""} { $db eval {insert into livre values (NULL,$bid,$auteur,$titre,$genre,$duree,$resume)} } $db eval {commit} puts "$nBook" exit } proc ParseEMBL {embl aTableau} { package require textutil upvar $aTableau tab array unset tab set GNlines "" foreach line [split $embl "\n"] { switch -exact [string range $line 0 1] { "ID" { set tab(ID) [lindex [string trim [string range $line 2 end]] 0] } "AC" { foreach access [::textutil::splitx [string trim [string range $line 2 end] " \t\n\r;"] {\s*;\s*}] { lappend tab(AC) $access } } "DE" { if {[info exists tab(DE)]} { append tab(DE) " " } append tab(DE) [string trim [string range $line 2 end]] } "GN" { if {[string trim [string range $line 2 end]] eq "and"} { append GNlines "\n" continue } append GNlines " [string trim [string range $line 2 end]]" } "OC" { if {[info exists tab(OC)]} { append tab(OC) " " } append tab(OC) [string trim [string range $line 2 end]] } "OS" { set tab(OS) [string trimright [string trim [string range $line 2 end]] "."] } "OX" { if {![regexp {NCBI_TaxID=(\d+)} $line regMatch taxId]} {error "ParseException: $line"} set tab(TaxId) $taxId } "DR" { set list [::textutil::splitx [string trim [string range $line 2 end] " \t\n\r."] {\s*;\s*}] set length [llength $list] if {$length < 2 || $length > 5} {error "ParseException: $line"} foreach {db primary secondary tertiary quaternary} $list {} lappend tab(DR) [list $db $primary $secondary $tertiary $quaternary] } " " { append tab(Sequence) [regsub -all -nocase {[^a-z]+} $line ""] } } } ### POST TRAITEMENTS ### # DE set tab(DE) [string trimright $tab(DE) "."] # OC set tab(OC) [::textutil::splitx [string trimright $tab(OC) "."] {;\s*}] # GN foreach GNline [split $GNlines "\n"] { set name [lindex [regexp -all -inline {Name=([^;]+);} $GNline] 1] set synonyms {} foreach {regMatch synonyms} [regexp -all -inline {Synonyms=([^;]+);} $GNline] { set synonyms [::textutil::splitx $synonyms {,\s*}] } set locusNames {} foreach {regMatch locusNames} [regexp -all -inline {OrderedLocusNames=([^;]+);} $GNline] { set locusNames [::textutil::splitx $locusNames {,\s*}] } set ORFNames {} foreach {regMatch ORFNames} [regexp -all -inline {ORFNames=([^;]+);} $GNline] { set ORFNames [::textutil::splitx $ORFNames {,\s*}] } lappend tab(GN) [list $name $synonyms $locusNames $ORFNames] } } proc ParseFic {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set LesLignesFinal {} set Acc [AccessEvi $Nom] if {$Acc==""} {continue} if { [regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc]} { Espionne "$Nom $Acc" set Commande "getz \"\\\[refseq-acc:$Acc\\\]\" \-e" set Texte [eval exec $Commande] set LesLignes [split $Texte "\n"] set TypeMol [RecupereTypeMol $LesLignes] set AliasGn [RecupereAliasGn $LesLignes] InformeSansDemander $Nom "AliasGnRna: $AliasGn" set GoComp [RecupereGoDeNm $LesLignes Comp] set GoFunc [RecupereGoDeNm $LesLignes Func] set GoProc [RecupereGoDeNm $LesLignes Proc] set Omim [RecupereOmimDeNm $LesLignes] set LigneRnaTitre "Info Fiche Rna" lappend LesLignesFinal $LigneRnaTitre set LigneRnaMol "RnaTypeMol $TypeMol" lappend LesLignesFinal $LigneRnaMol set LigneRnaAliasGn "RnaAliasGn $AliasGn" lappend LesLignesFinal $LigneRnaAliasGn set LigneRnaGoComp "RnaGoComp $GoComp" lappend LesLignesFinal $LigneRnaGoComp set LigneRnaGoFunc "RnaGoFunc $GoFunc" lappend LesLignesFinal $LigneRnaGoFunc set LigneRnaGoProc "RnaGoProc $GoProc" lappend LesLignesFinal $LigneRnaGoProc #omim faut recuperer l'access homo par id homologene } if { ![regexp {^NM_} $Acc] && ![regexp {^XM_} $Acc] && ![regexp {^NR_} $Acc]} { Espionne"$Nom $Acc" set Commande "getz \"\\\[genbankfull-acc:$Acc\\\]\" \-e" set Texte [eval exec $Commande] set LesLignes [split $Texte "\n"] set TypeMol [RecupereTypeMol $LesLignes] set AliasGn [RecupereAliasGn $LesLignes] InformeSansDemander $Nom "AliasGnRna: $AliasGn" set TissType [RecupereTissueTypeEtDevStage $LesLignes Tis] set DevStage [RecupereTissueTypeEtDevStage $LesLignes Dev] set LigneRnaTitre "Info Fiche Rna" lappend LesLignesFinal $LigneRnaTitre set LigneRnaMol "RnaTypeMol $TypeMol" lappend LesLignesFinal $LigneRnaMol set LigneRnaAliasGn "RnaAliasGn $AliasGn" lappend LesLignesFinal $LigneRnaAliasGn set LigneRnaTissType "RnaTissType $TissType" lappend LesLignesFinal $LigneRnaTissType set LigneRnaDevStage "RnaDevStage $DevStage" lappend LesLignesFinal $LigneRnaDevStage } set LigneSeparatrice "" lappend LesLignesFinal $LigneSeparatrice set IdetAcc [ExtraitInfo $Nom "IdAccProt"] if {$IdetAcc==""} {continue} set ListeProt [split $IdetAcc " "] if {[llength $ListeProt]>1} {set AccProt [lindex $ListeProt 1]} if {[llength $ListeProt]==1} {set AccProt [lindex $ListeProt 0]} if { ![regexp {^NP_} $AccProt] && ![regexp {^XP_} $AccProt]} { Espionne"$Nom $AccProt" set Commande "getz \"\\\[protein-acc:$AccProt\\\]\" \-e" set Texte [eval exec $Commande] set LesLignes [split $Texte "\n"] set Gn [RecupereGeneNameProt $LesLignes] set AliasGn [RecupereGeneNameAliasProt $LesLignes] #InformeSansDemander $Nom "AliasGnProt: $AliasGn" set Des [RecupereDescriptionProt $LesLignes] set GoC [RecupereGoProt $LesLignes C] set GoF [RecupereGoProt $LesLignes F] set GoP [RecupereGoProt $LesLignes P] set Pfam [RecuperePfamProt $LesLignes] set LigneProtTitre "Info Fiche Prot" lappend LesLignesFinal $LigneProtTitre set LigneProtGn "ProtGn $Gn" lappend LesLignesFinal $LigneProtGn set LigneProtAlias "ProtAliasGn $AliasGn" lappend LesLignesFinal $LigneProtAlias set LigneProtDes "ProtDes $Des" lappend LesLignesFinal $LigneProtDes set LigneProtGoC "ProtGoC $GoC" lappend LesLignesFinal $LigneProtGoC set LigneProtGoF "ProtGoF $GoF" lappend LesLignesFinal $LigneProtGoF set LigneProtGoP "ProtGoP $GoP" lappend LesLignesFinal $LigneProtGoP set LigneProtPfam "ProtPfam $Pfam" lappend LesLignesFinal $LigneProtPfam } if {[regexp {^NP_} $AccProt] || [regexp {^XP_} $AccProt]} { Espionne"$Nom $AccProt" set Commande "getz \"\\\[refseqp-acc:$AccProt\\\]\" \-e" set Texte [eval exec $Commande] set LesLignes [split $Texte "\n"] set Gn [RecupereGeneNameNP $LesLignes] set Des [RecupereDesNP $LesLignes] set TissType [RecupereTissueTypeEtDevStage $LesLignes Tis] set DevStage [RecupereTissueTypeEtDevStage $LesLignes Dev] set GoComponent [RecupereGoNp $LesLignes component] set GoFunction [RecupereGoNp $LesLignes function] set GoProcess [RecupereGoNp $LesLignes process] set Region [RecupereRegionNp $LesLignes] set LigneProtTitre "Info Fiche Prot" lappend LesLignesFinal $LigneProtTitre set LigneProtGn "ProtGn $Gn" lappend LesLignesFinal $LigneProtGn set LigneProtDes "ProtDes $Des" lappend LesLignesFinal $LigneProtDes set LigneProtTiss "ProtTissType $TissType" lappend LesLignesFinal $LigneProtTiss set LigneProtDev "ProtDevStage $DevStage" lappend LesLignesFinal $LigneProtDev set LigneProtGoC "ProtGoComponent $GoComponent" lappend LesLignesFinal $LigneProtGoC set LigneProtGoF "ProtGoFunction $GoFunction" lappend LesLignesFinal $LigneProtGoF set LigneProtGoP "ProtGoProcess $GoProcess" lappend LesLignesFinal $LigneProtGoP set LigneProtRegions "ProtRegions $Region" lappend LesLignesFinal $LigneProtRegions } #SauveLesLignes $LesLignesFinal dans "[RepertoireDuGenome]/infosfiche/$Nom" } } proc ParseFicheChromo {cid lignes} { global file1 global file2 set Lgdb {} foreach l $lignes { set idxd [string first "GDB:" $l] if {$idxd != -1} { set idxf [string first "\"" [string range $l $idxd end]] lappend Lgdb [string range $l $idxd [expr $idxd+$idxf-1]] } } # puts "" # puts "Chromosome $cid" # puts "---------------" set file1 [open "ChromoWithProtSeq" a+] set file2 [open "ProteinSq_Chromo.fof" a+] foreach e $Lgdb { TraiteUnGDB $e } close $file1 close $file2 return } proc ParseFicheChromoGDB {cid lignes} { global listeARetranscrire # initialisation de la liste de gdb set Lgdb {} # parcours du fichier du chromosome foreach l $lignes { # cherche une occurence de GDB: dans la ligne set idxd [string first "GDB:" $l] if {$idxd != -1} { # extrait l identifiant GDB de cette ligne set idxf [string first "\"" [string range $l $idxd end]] lappend Lgdb [string range $l $idxd [expr $idxd+$idxf-1]] } } puts "\n---------------" puts "Chromosome $cid" puts "---------------\n" # pour chaque GDB foreach e $Lgdb { TraiteUnGDB $e } return 1 } proc ParseGOAnno {nomFichier aTableau} { package require tdom upvar $aTableau tab array unset tab array set tab {} set fh [open $nomFichier "r"] dom parse -channel $fh doc close $fh $doc documentElement root set tab(Parametres,IDMin) [string trim [$root selectNodes "string(/GO_ANALYSE/@PID_MIN)"]] set tab(Parametres,NorMDMin) [string trim [$root selectNodes "string(/GO_ANALYSE/@NORMD_MIN)"]] set tab(Parametres,PMin) [string trim [$root selectNodes "string(/GO_ANALYSE/@P_MIN)"]] set tab(Parametres,FMin) [string trim [$root selectNodes "string(/GO_ANALYSE/@F_MIN)"]] set tab(Parametres,AccessQueryBanque) [string trim [$root selectNodes "string(//INPUT/@QUERY_ID)"]] set tab(Parametres,NomQuery) [string trim [$root selectNodes "string(//INPUT/@QUERY_NAME)"]] set tab(Parametres,FichierMSF) [string trim [$root selectNodes "string(//INPUT/MSF_FILE)"]] set tab(Parametres,FichierClust) [string trim [$root selectNodes "string(//INPUT/CLUST_FILE)"]] foreach categorie [list "IPO" "PPO" "MSO" "GPO"] { foreach type [list "process" "component" "function"] typeLong [list "BiologicalProcess" "CellularComponent" "MolecularFunction"] { set tab($categorie,$typeLong,GOs) {} foreach goNode [$root selectNodes "//$categorie/$type/GO"] { set go [string trim [$goNode selectNodes "string(.//@GO_ID)"]] lappend tab($categorie,$typeLong,GOs) $go set tab($categorie,$typeLong,$go,Sujets) {} set tab($categorie,$typeLong,$go,Definition) [string trim [$goNode selectNodes "string(.//@GO_DEFINITION)"]] foreach sbjctNode [$goNode selectNodes ".//SUBJECT/text()"] { lappend tab($categorie,$typeLong,$go,Sujets) [$sbjctNode nodeValue] } } } } $doc delete } proc ParseLigneCSV {l {sep ,} {cot ""}} { if {$cot eq ""} {set cot "\""} set Lv [list] set buf "" ; set cp "" set prems 1 ; set op 0 foreach c [split "$l" ""] { if {$c eq "\""} { if {$prems} { set op 1 set cp "" set prems 0 } else { if {! $op} { set op 1 } elseif {$cp eq $c} { # double double cot append buf "\"" set cp "" } else { set cp $c } } } elseif {$c eq $sep} { if {$prems} { lappend Lv "$buf" } elseif {$op} { if {$cp eq "\""} { # fin, ecrit lappend Lv $buf set buf "" ; set cp "" set prems 1 ; set op 0 } else { append buf $c } } else { lappend Lv "$buf" set buf "" ; set cp "" set prems 1 ; set op 0 } } else { append buf $c set prems 0 } } return $Lv } proc ParseMACSIMS {nomFichier aTableau} { package require tdom upvar $aTableau tab array unset tab array set tab {Noms {} Groupes {}} set fh [open $nomFichier "r"] dom parse -channel $fh doc close $fh $doc documentElement root set tab(Alignement,Nom) [string trim [$root selectNodes "string(.//aln-name)"]] set tab(Alignement,Score) [string trim [$root selectNodes "string(.//aln-score)"]] #set tab(Alignement,Longueur) [string trim [$root selectNodes "string(.//seq-info\[1\]/length)"]] set tab(Alignement,Longueur) [string length [string trim [$root selectNodes "string(.//seq-data\[1\])"]]] #rR set tab(ListOf,FeatureTypes) {} #rR foreach seqNode [$root selectNodes "//sequence"] { set name [$seqNode selectNodes "string(.//seq-name)"] lappend tab(Noms) $name set tab($name,FEATURE_TYPES) {} set tab($name,Sequence) [string trim [$seqNode selectNodes "string(.//seq-data)"]] set tab($name,SequenceSansGaps) [regsub -all -nocase {[^A-Z]} $tab($name,Sequence) ""] set tab($name,Longueur) [string length $tab($name,SequenceSansGaps)] set tab($name,Type) [string trim [$seqNode selectNodes "string(./@seq-type)"]] set tab($name,Access) [string trim [$seqNode selectNodes "string(.//accession)"]] set tab($name,Definition) [string trim [$seqNode selectNodes "string(.//definition)"]] set tab($name,Organisme) [string trim [$seqNode selectNodes "string(.//organism)"]] set tab($name,TaxId) [string trim [$seqNode selectNodes "string(.//taxid)"]] set tab($name,DomaineDeLaVie) [string trim [$seqNode selectNodes "string(.//lifedomain)"]] set tab($name,EC) [string trim [$seqNode selectNodes "string(.//ec)"]] set tab($name,Hydrophobicite) [string trim [$seqNode selectNodes "string(.//hydrophobicity)"]] set tab($name,NId) [string trim [$seqNode selectNodes "string(.//nid)"]] set tab($name,Fragment) [string trim [$seqNode selectNodes "string(.//fragment/@status)"]] if {[regexp -nocase "^yes$" $tab($name,Fragment)]} { set tab($name,Fragment) 1 } elseif {[regexp -nocase "^no$" $tab($name,Fragment)]} { set tab($name,Fragment) 0 } else { set tab($name,Fragment) "" } if {[regexp -nocase {^[0-9][0-9a-z][0-9a-z][0-9a-z](_[a-z]?)?$} $tab($name,Access)]} { set tab($name,PDB) 1 } else { set tab($name,PDB) 0 } array unset seq2alnIdx array set seq2alnIdx [sequenceToAlignmentIndex $tab($name,Sequence)] set tab($name,NbFeatures) 0 foreach ftNode [$seqNode selectNodes ".//fitem"] { incr tab($name,NbFeatures) #rR set Type [string trim [$ftNode selectNodes "string(.//ftype)"]] lappend tab(ListOf,FeatureTypes) $Type lappend tab(FEATURE_$Type,accesses) $name #rR set tab($name,Features,$tab($name,NbFeatures),Type) $Type set tab($name,Features,$tab($name,NbFeatures),Start) [string trim [$ftNode selectNodes "string(.//fstart)"]] set tab($name,Features,$tab($name,NbFeatures),Stop) [string trim [$ftNode selectNodes "string(.//fstop)"]] set tab($name,Features,$tab($name,NbFeatures),Couleur) [string trim [$ftNode selectNodes "string(.//fcolor)"]] set tab($name,Features,$tab($name,NbFeatures),Score) [string trim [$ftNode selectNodes "string(.//fscore)"]] set tab($name,Features,$tab($name,NbFeatures),Note) [string trim [$ftNode selectNodes "string(.//fnote)"]] if {$tab($name,Features,$tab($name,NbFeatures),Start) > $tab($name,Features,$tab($name,NbFeatures),Stop)} { set tmp $tab($name,Features,$tab($name,NbFeatures),Stop) set tab($name,Features,$tab($name,NbFeatures),Stop) $tab($name,Features,$tab($name,NbFeatures),Start) set tab($name,Features,$tab($name,NbFeatures),Start) $tmp } if {[info exists seq2alnIdx($tab($name,Features,$tab($name,NbFeatures),Start))]} { set tab($name,Features,$tab($name,NbFeatures),StartAlignement) $seq2alnIdx($tab($name,Features,$tab($name,NbFeatures),Start)) } else { set tab($name,Features,$tab($name,NbFeatures),StartAlignement) "" } if {[info exists seq2alnIdx($tab($name,Features,$tab($name,NbFeatures),Stop))]} { set tab($name,Features,$tab($name,NbFeatures),StopAlignement) $seq2alnIdx($tab($name,Features,$tab($name,NbFeatures),Stop)) } else { set tab($name,Features,$tab($name,NbFeatures),StopAlignement) "" } set tab($name,Features,$tab($name,NbFeatures),Longueur) [expr $tab($name,Features,$tab($name,NbFeatures),Stop) - $tab($name,Features,$tab($name,NbFeatures),Start) + 1] if {$tab($name,Features,$tab($name,NbFeatures),StartAlignement) ne "" && $tab($name,Features,$tab($name,NbFeatures),StopAlignement) ne ""} { set tab($name,Features,$tab($name,NbFeatures),LongueurAlignement) [expr $tab($name,Features,$tab($name,NbFeatures),StopAlignement) - $tab($name,Features,$tab($name,NbFeatures),StartAlignement) + 1] } else { set tab($name,Features,$tab($name,NbFeatures),LongueurAlignement) "" } } set tab($name,Classification) {} foreach taxNode [$seqNode selectNodes ".//lineage/taxon/text()"] { lappend tab($name,Classification) [string trim [$taxNode nodeValue]] } set tab($name,Groupe) [string trim [$seqNode selectNodes "string(.//group\[1\])"]] lappend tab(Groupes) $tab($name,Groupe) lappend tab(Groupe,$tab($name,Groupe)) $name } #rR set tab(ListOf,FeatureTypes) [lsort -unique $tab(ListOf,FeatureTypes)] foreach Type $tab(ListOf,FeatureTypes) { set tab(FEATURE_$Type,accesses) [lsort -unique $tab(FEATURE_$Type,accesses)] } #rR set tab(Groupes) [lsort -integer -unique $tab(Groupes)] $doc delete } proc ParseOlida {FichierMacsimXml {QueryAccess ""}} { package require tdom if {$QueryAccess eq ""} {regexp {^[^.]+} [file tail $FichierMacsimXml] QueryAccess} set fh [open $FichierMacsimXml "r"] set domDoc [dom parse -channel $fh] close $fh set root [$domDoc documentElement] # Bug macsim, group apparait 2 fois -> selectionne le premier noeud seulement set queryGroup [string trim [$root selectNodes "string(//sequence\[seq-name=\"$QueryAccess\"\]/seq-info/group\[1\])"]] # La query set queryNode [$root selectNodes "//sequence\[seq-name=\"$QueryAccess\"\]"] set querySeq [string trim [$queryNode selectNodes "string(seq-data)"]] # Les autres séquences du groupe set groupNodes [$root selectNodes "//sequence\[seq-name!=\"$QueryAccess\" and .//group\[1\]=\"$queryGroup\"\]"] # Toutes les séquences du groupe #set groupNodes [$root selectNodes "//sequence\[.//group\[1\]=\"$queryGroup\"\]"] # Sélectionne les PDBs dans les séquences du groupe set pdbNodes {} set notPdbNodes {} foreach n $groupNodes { set access [string trim [$n selectNodes "string(.//accession)"]] if {[regexp -nocase {\w{4}_[a-z]?} $access]} { lappend pdbNodes $n } else { lappend notPdbNodes $n } } # Récupère les régions set queryRegions [getGroupMeanFeatures $queryNode "REGION" 1] # set groupRegions [getGroupMeanFeatures $groupNodes "REGION"] set groupRegions [getGroupMeanFeatures $notPdbNodes "REGION"] puts $groupRegions # Profil de présence/absence REGIONS set queryProfile {} foreach gr $groupRegions { set present 0 foreach qr $queryRegions { if {[isRegionComplete $qr $gr]} { set present 1 break } } lappend queryProfile $present } # 5'/Nter et 3'/Cter set pre5regionEnd [lindex [lindex $groupRegions 0] 0] set post3regionStart [lindex [lindex $groupRegions end] 1] set pre5regionLengths {} set post3regionLengths {} foreach n $groupNodes { set seq [string trim [$n selectNodes "string(seq-data)"]] if {[haveFeature $n [lindex $groupRegions 0] "REGION"]} { lappend pre5regionLengths [string length [regsub -all {[-.]+} [string range $seq 0 [expr $pre5regionEnd - 2]] ""]] } if {[haveFeature $n [lindex $groupRegions end] "REGION"]} { lappend post3regionLengths [string length [regsub -all {[-.]+} [string range $seq $post3regionStart end] ""]] } } set queryPre5Len [string length [regsub -all {[-.]+} [string range $querySeq 0 [expr $pre5regionEnd - 2]] ""]] if {[lindex $queryProfile 0] && $queryPre5Len >= [lindex [minMaxRangeOfList $pre5regionLengths] 0]} { set 5N 1 } else { set 5N 0 } set queryPost3Len [string length [regsub -all {[-.]+} [string range $querySeq $post3regionStart end] ""]] if {[lindex $queryProfile end] && $queryPost3Len >= [lindex [minMaxRangeOfList $post3regionLengths] 0]} { set 3C 1 } else { set 3C 0 } if {$5N && [regexp {^1*$} [join $queryProfile ""]] && $3C} { set queryProt "Complete" } elseif {$5N && [regexp {^1*0*$} [join $queryProfile ""]] && !$3C} { set queryProt "Nter" } elseif {!$5N && [regexp {^0*1*$} [join $queryProfile ""]] && $3C} { set queryProt "Cter" } elseif {!$5N && [regexp {^0*$} [join $queryProfile ""]] && !$3C} { set queryProt "Problem/Junk" } else { set queryProt "Fragment" } puts $5N puts $queryProfile puts $3C puts $queryProt # exit 0 # return [getGroupMeanFeatures $groupNodes "PFAM-A"] } proc ParseOlida2 {FichierMacsimXml {QueryAccess ""}} { package require tdom set outFile "$FichierMacsimXml.OliDA.xml" if {$QueryAccess eq ""} {regexp {^[^.]+} [file tail $FichierMacsimXml] QueryAccess} set fh [open $FichierMacsimXml "r"] set domDoc [dom parse -channel $fh] close $fh set root [$domDoc documentElement] set queryNode [getSequenceNode $root $QueryAccess] set querySequence [getSequence $queryNode] set unalignedQuerySequence [regsub -all -nocase {[^a-z]+} $querySequence ""] set queryLength [string length $unalignedQuerySequence] set queryGroup [getSequenceGroup $queryNode] set queryRegions [getSequenceFeatures $queryNode "REGION"] set queryPfamA [getSequenceFeatures $queryNode "PFAM-A"] # Crée tableau contenant les seqNode pour chaque groupe (sans la query) # ainsi que liste contenant les PDBs array unset groupsNodes array set groupsNodes {} set pdbNodes {} foreach n [$root selectNodes "//sequence\[seq-name!=\"$QueryAccess\"\]"] { lappend groupsNodes([getSequenceGroup $n]) $n if {[isPdb [getSequenceName $n]]} {lappend pdbNodes $n} } ############################################################################## ## PARTIE 1: Travaille sur les régions pour déterminer si la prot est complète ############################################################################## # Récupère toutes les régions des séquences qui ne sont pas des PDBs (ni la query) set nonPDBRegions {} foreach group [array names groupsNodes] { foreach n $groupsNodes($group) { if {![isPdb [getSequenceName $n]]} { set nonPDBRegions [concat $nonPDBRegions [getSequenceFeatures $n "REGION"]] } } } # Regroupe les régions identiques pour calculer un consensus des bornes des régions # (au moins 60% des régions contiennent les bornes start/stop calculées) set groupedNonPDBRegions [groupIdenticalFeatures $nonPDBRegions] set consensusRegions {} foreach group $groupedNonPDBRegions { lappend consensusRegions [computeConsensusFeature $group 0.6] } # Recherche les régions consensus du groupe (au moins 60% des séquences non PDB du groupe les ont) set queryGroupSeqCounter 0 set queryGroupRegions {} foreach n $groupsNodes($queryGroup) { if {![isPdb [getSequenceName $n]]} { incr queryGroupSeqCounter foreach ft [getSequenceFeatures $n "REGION"] { foreach cFt $consensusRegions { if {[isSameFeature $ft $cFt]} { lappend queryGroupRegions $cFt break } } } } } set tmpRegions $queryGroupRegions set queryGroupRegions {} foreach ft [lsort -unique $tmpRegions] { set numHave [llength [lsearch -all -exact $tmpRegions $ft]] if {[expr double($numHave) / $queryGroupSeqCounter] >= 0.6} {lappend queryGroupRegions $ft} } set queryGroupRegions [lsort -command compareFeatures $queryGroupRegions] # Crée le profil de conservation des régions pour la query set queryRegionsProfile {} foreach ft $queryGroupRegions { set cover "0.0" foreach ftQ $queryRegions { if {[isSameFeature $ft $ftQ]} { array unset ftA array unset ftB array set ftA $ft array set ftB $ftQ if {$ftA(start) > $ftB(start)} {set maxStart $ftA(start)} else {set maxStart $ftB(start)} if {$ftA(stop) < $ftB(stop)} {set minStop $ftA(stop)} else {set minStop $ftB(stop)} set cover [expr double($minStop - $maxStart + 1) / ($ftA(stop) - $ftA(start) + 1)] break } } lappend queryRegionsProfile $cover } # Détermine si la protéine est complète ou non # Une région est considérée complète si elle est conservée au moins à 80% set Nter 0 set Cter 0 set blackWhiteProfile {} for {set i 0} {$i < [llength $queryRegionsProfile]} {incr i} { set regionCover [lindex $queryRegionsProfile $i] set previousRegion "0.0" if {[expr $i - 1] >= 0} { set previousRegion [lindex $queryRegionsProfile [expr $i - 1]] } set nextRegion "0.0" if {[expr $i + 1] < [llength $queryRegionsProfile]} { set nextRegion [lindex $queryRegionsProfile [expr $i + 1]] } if {$regionCover >= 0.8 || ($previousRegion >=0.8 && $nextRegion >= 0.8)} { if {$i == 0} { # Nter set Nter 1 } elseif {$i == [expr [llength $queryRegionsProfile] - 1]} { # Cter set Cter 1 } lappend blackWhiteProfile 1 } else { lappend blackWhiteProfile 0 } } set blackWhiteString [join [concat [list $Nter] $blackWhiteProfile [list $Cter]] ""] if {[regexp {^11*1$} $blackWhiteString]} { set queryProt "Complete" } elseif {[regexp {^11*0*0$} $blackWhiteString]} { set queryProt "Nter" } elseif {[regexp {^00*1*1$} $blackWhiteString]} { set queryProt "Cter" } elseif {[regexp {^00*0$} $blackWhiteString ""]} { set queryProt "Problem/Junk" } else { set queryProt "Fragment" } ############################################################################ ## PARTIE 2: travaille sur les PFAMs pour sélectionner les meilleures bornes ## pour les oligos ############################################################################ set selectedAlnStart 0 set selectedAlnStop 0 array set aln2seqIndex [alnPos2SeqPosIndex $querySequence] array set seq2alnIndex [seqPos2AlnPosIndex $querySequence] # Profil de conservation des PFAMs if {[llength $queryPfamA] != 0} { set queryPfamsProfile {} unset ft foreach aFt $queryPfamA { array unset ft array set ft $aFt if {![regexp {_PARTIAL} $ft(note)]} { lappend queryPfamsProfile 1 } else { lappend queryPfamsProfile 0 } } } # Si la protéine est complète ou qu'il n'y a aucun PFAM, # elle est sélectionnée en entier if {$queryProt eq "Complete" || [llength $queryPfamA] == 0} { set selectedAlnStart $seq2alnIndex(1) set selectedAlnStop $seq2alnIndex($queryLength) } else { # Sinon les PFAMs si possibles complets sont sélectionnés # Si il y a 1 ou + PFAMs intégralement présents set completePfams [lsearch -all -exact $queryPfamsProfile 1] if {[llength $completePfams] != 0} { array unset ft array set ft [lindex $queryPfamA [lindex $completePfams 0]] set selectedAlnStart $ft(start) array unset ft array set ft [lindex $queryPfamA [lindex $completePfams end]] set selectedAlnStop $ft(stop) } else { # Sinon sélection de toute la séquence set selectedAlnStart $seq2alnIndex(1) set selectedAlnStop $seq2alnIndex($queryLength) } } # Correction des bornes sélectionnées à l'aide des PDBs présents if {[llength $pdbNodes] != 0} { set allPDBStarts {} set allPDBStops {} foreach n $pdbNodes { set pdbSeq [getSequence $n] regexp -nocase {^([^a-z]*)(.*?)([^a-z]*)$} $pdbSeq regMatch head seq tail lappend allPDBStarts [expr [string length $head] + 1] lappend allPDBStops [expr [string length "$head$seq"] + 1] } set meanPDBStart [expr int(floor([listMean $allPDBStarts]))] set meanPDBStop [expr int(ceil([listMean $allPDBStops]))] if {$selectedAlnStart < $meanPDBStart} { set selectedAlnStart $meanPDBStart } if {$selectedAlnStop > $meanPDBStop} { set selectedAlnStop $meanPDBStop } } # Convertion des bornes alignement -> séquence set selectedStart $aln2seqIndex($selectedAlnStart) set selectedStop $aln2seqIndex($selectedAlnStop) ################################# ## PARTIE 3: Sortie au format XML ################################# dom createNodeCmd "elementNode" OliDA::input dom createNodeCmd "elementNode" OliDA::query dom createNodeCmd "elementNode" OliDA::regions dom createNodeCmd "elementNode" OliDA::region dom createNodeCmd "elementNode" OliDA::pfams dom createNodeCmd "elementNode" OliDA::pfam dom createNodeCmd "elementNode" OliDA::results dom createNodeCmd "elementNode" OliDA::protein dom createNodeCmd "elementNode" OliDA::alignmentSelection dom createNodeCmd "elementNode" OliDA::querySelection dom createNodeCmd "textNode" OliDA::text dom createDocument "OliDA" OliDAXML [$OliDAXML documentElement] appendFromScript { OliDA::input {OliDA::text $FichierMacsimXml} OliDA::query {OliDA::text $QueryAccess} OliDA::regions { unset ft foreach aFt $queryGroupRegions conserved $blackWhiteProfile { array unset ft array set ft $aFt OliDA::region "start" $ft(start) "stop" $ft(stop) "conserved" $conserved {} } } OliDA::pfams { if {[llength $queryPfamA] != 0} { foreach aFt $queryPfamA complete $queryPfamsProfile { array unset ft array set ft $aFt OliDA::pfam "start" $ft(start) "stop" $ft(stop) "note" $ft(note) "complete" $complete {} } } } OliDA::results { OliDA::protein "status" $queryProt {} OliDA::alignmentSelection "from" $selectedAlnStart "to" $selectedAlnStop {} OliDA::querySelection "from" $selectedStart "to" $selectedStop {} } } set fh [open $outFile "w"] puts $fh "" $OliDAXML asXML -channel $fh -doctypeDeclaration 1 close $fh return 0 } proc ParseOlida3 {FichierMacsims {QueryAccess ""}} { package require tdom set outFile "$FichierMacsims.OliDA.xml" if {[file isfile $FichierMacsims]} { while {[catch { array unset macsims ParseMACSIMS $FichierMacsims macsims }] == 1} {Espionne "Retry to load $FichierMacsims"} } else { Espionne "$FichierMacsims does not exists" return "" } if {$QueryAccess eq ""} {regexp {^[^.]+} [file tail $FichierMacsims] QueryAccess} if {[lsearch -exact $macsims(Noms) $QueryAccess] == -1} { Espionne "$QueryAccess does not exists in $FichierMacsims" return "" } set groupeQuery $macsims($QueryAccess,Groupe) ### VIRER LES FT AVEC UN FNOTE QUI COMMENCE PAR ERROR_ #foreach access $macsims(Groupe,$groupeQuery) {} array set lesRegions {} foreach access $macsims(Noms) { #if {$access ne $QueryAccess && !$macsims($access,PDB)} {} if {!$macsims($access,PDB)} { for {set i 1} {$i <= $macsims($access,NbFeatures)} {incr i} { if {![regexp {ERROR_} $macsims($access,Features,$i,Note)]} { if {$macsims($access,Features,$i,Type) eq "REGION"} { Espionne "$access $macsims($access,Features,$i,Note) $macsims($access,Features,$i,StartAlignement)->$macsims($access,Features,$i,StopAlignement)" } } } } } } proc ParseOutputAreaimol {Ll} { global ASAaa ASAan if {[info exists ASAaa]} { InitASA } set Li [lsearch -all -regexp $Ll {^ ANALYSIS OF ACCESSIBLE AREA}] set pas -1 foreach idx $Li { incr pas set i -1 foreach l [lrange $Ll ${idx}+4 end] { incr i if {[regexp {^ TOTAL AREA} $l]} { break } if {! [regexp {^ } $l]} {continue} set l [string trim $l] regsub -all { +} $l " " l foreach {a c n v} $l { if {! $pas} { set SrfI($c,$n) $v } else { set SrfO($c,$n) $v } } } } set Ll [lrange $Ll ${i}+1 end] set i [lsearch -regexp $Ll {^ Differences for individual chains}] set Ll [lrange $Ll $i+4 end] set i -1 foreach l $Ll { incr i if {[regexp {^ TOTAL AREA} $l]} { break } if {! [regexp {^ } $l]} {continue} set l [string trim $l] regsub -all { +} $l " " l foreach {a c n v} $l { set SrfD($c,$n) $v } } puts "SrfI [llength [array names SrfI]]" puts "SrfO [llength [array names SrfO]]" puts "SrfD [llength [array names SrfD]]" foreach e [lsort [array names SrfD]] { set v [expr {[set SrfI($e)] - [set SrfD($e)]}] set Srf($e) $v } puts "" return [array get Srf] } proc ParsePL {} { set Ll [LesLignesDuFichier /home/moumou/Pour_Luc.csv] set pre "" foreach ligne $Ll { set Lv [ParseLigneCSV $ligne ";"] lassign $Lv gene b c d e f g h i j k l m n if {[regexp {^Gene } $gene]} {continue} if {[regexp {^[A-Z]ARS2} $gene]} { set gene [string index $gene 0] if {$gene ne $pre} { set pre $gene } } set mut [string trim $i] if {[regexp {([A-Z])([0-9]+)([A-Z]{1}$)} $mut => aa x to]} { lappend Tmut($pre) $x } } set o [open mutation.txt w] foreach k [lsort [array names Tmut]] { puts $o "$k [lsort -unique -integer [set Tmut($k)]]" } close $o exit } proc ParsePfamFull {} { # parse the Stockholm format of the entire Pfam set f [open /genomics/link/Pfam/Pfam-A.full r] set de "" while {! [eof $f]} { set l [gets $f] switch -regexp -- $l { {^#=GF ID} { regsub -all { +} $l " " l set id [lindex [split $l " "] 2] } {^#=GF AC} { regsub -all { +} $l " " l set ac [lindex [split $l " "] 2] } {^#=GF DE} { regsub -all { +} $l " " l set Ll [split $l " "] append de [join [lrange $Ll 2 end]] } {^#=GF SQ} { regsub -all { +} $l " " l set ns [lindex [split $l " "] 2] } {^#=GS} { regsub -all { +} $l " " l set Ll [split $l " "] lassign $Ll tmp sqn wh sac if {$wh eq "AC"} { lappend Lacc $sac lappend Lsqn $sqn set Sq($sqn) "" } } {^//} { puts "$ac" set Lnom [list] ; set Lseq [list] foreach sqn $Lsqn sac $Lacc { lappend Lnom "$sqn $sac" set seq [string toupper [string map [list "-" "."] [set Sq($sqn)]]] lappend Lseq $seq } EcritLeTfa $ac $Lnom $Lseq unset -nocomplain Sq set Lsqn [list] ; set Lacc [list] set de "" update } {^\#=GC} { continue } {^\#=GR} { continue } default { regsub -all { +} $l " " l lassign [split $l " "] lasq sqaa append Sq($lasq) $sqaa } } } close $f exit } proc ParseResultatBird {Qui} { #Qui= PG ou KG set Fichier "[Fiches]/sortiebird$Qui.txt" set premierefois 1; set LesLocalisations {} foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne "Ligne $Ligne" if {[regexp "^Query" $Ligne]} { if {!$premierefois} { if {[lindex $LesLocalisations 0]=="EMPTY"} { set LocalisationFinal "nolocalisation" } else { set LesLocalisations [ListeSansDoublon $LesLocalisations] foreach Localisation $LesLocalisations { regsub -all -nocase {\|} $Localisation " " Localisation ScanLaListe $Localisation chrom txStart txEnd strand spID set Localisation "$chrom $txStart $txEnd $strand" lappend LocalisationInter $Localisation } set LocalisationFinal [join $LocalisationInter ","] } set LesLocalisations {}; set LocalisationInter {} if {[string length $numero]==1} { set Nom "HNR0$numero" } else { set Nom "HNR$numero" } #InformeSansDemander $Nom "Localisation: $LocalisationFinal" Espionne "$Nom $LocalisationFinal" } set premierefois 0 set index1 [string first "\[" $Ligne] set index2 [string first "\]" $Ligne] set numero [string range $Ligne [expr $index1 + 1] [expr $index2 - 1]] continue } if {$Ligne=="EMPTY"} { lappend LesLocalisations "EMPTY" } else { lappend LesLocalisations $Ligne } } if {[lindex $LesLocalisations 0]=="EMPTY"} { set LocalisationFinal "nolocalisation" } else { set LesLocalisations [ListeSansDoublon $LesLocalisations] foreach Localisation $LesLocalisations { regsub -all -nocase {\|} $Localisation " " Localisation ScanLaListe $Localisation chrom txStart txEnd strand spID set Localisation "$chrom $txStart $txEnd $strand" lappend LocalisationInter $Localisation } set LocalisationFinal [join $LocalisationInter ","] } set LesLocalisations {}; set LocalisationInter {} if {[string length $numero]==1} { set Nom "HNR0$numero" } else { set Nom "HNR$numero" } #InformeSansDemander $Nom "Localisation: $LocalisationFinal" Espionne "$Nom $LocalisationFinal" } proc ParseString {FichierInitial FichierString {FichierSortie ""}} { #rR je l'ai reecrit (voir ParseStringLP) car si A interagit avec B alors il nous faut aussi compte B avec A #rR ... et ca va beaucouop plus vite if {$FichierSortie==""} { set FichierSortie "GetList" } set LesPID {} foreach PIDInitial [LesLignesDuFichier $FichierInitial] { set EstInitial($PIDInitial) 1 } set PIDprecedent ""; set PNprecedent ""; set NbInteractant 0; set Nb90 0; set premierefois 1; set LesCops {} set LesLignesWithAny [LesLignesDuFichier $FichierString] set LesLignesWithAnyViceVersa {} foreach Ligne $LesLignesWithAny { if {[regexp {^PIDInitial} $Ligne]} {continue} lappend LesLignesWithAnyViceVersa $Ligne lassign [split $Ligne "\t"] PID PN PIDCop PNCop Score Evidence if {[info exists EstInitial($PID)] && [info exists EstInitial($PIDCop)]} { lappend LesLignesWithAnyViceVersa [join [list $PIDCop $PNCop $PID $PN $Score $Evidence] "\t"] } } foreach Ligne $LesLignesWithAnyViceVersa { lassign [split $Ligne "\t"] PID PN PIDCop PNCop Score Evidence lappend LesPID $PID lappend PNduPID($PID) $PN if {[llength PNduPID($PID)]>1} { FaireLire "$PID has several names \n[join PNduPID($PID) { }]" } lappend PIDCopDuPID($PID) $PIDCop lappend PNCopDuPID($PID) $PNCop if {[info exists EstInitial($PIDCop)]} { lappend LesCopDuPID($PID) $PNCop } lappend LesPID $PID } set LesPID [ListeSansDoublon $LesPID] set LesLignesResult {} foreach PID $LesPID { if { ! [info exists LesCopDuPID($PID)]} { set LesCopDuPID($PID) {} } set LesCopDuPID($PID) [lsort -unique $LesCopDuPID($PID)] set PN [lindex $PNduPID($PID) 0] set NbInteractants [llength $PIDCopDuPID($PID)] set NbCops [llength $LesCopDuPID($PID)] set Pourcent [expr ($NbCops*100)/$NbInteractants] set Cops [join $LesCopDuPID($PID) " "] set LaLigne [list $PID $PN $NbInteractants $NbCops $Pourcent $Cops] set Ligne [join $LaLigne "\t"] lappend LesLignesResult $Ligne } set LesLignesResult [lsort -command CompareLigneTabulee3 -decreasing $LesLignesResult] if {$FichierSortie=="GetList"} { return $LesLignesResult } if {$FichierSortie=="GetText"} { return [join $LesLignesResult "\n"] } return [SauveLesLignes $LesLignesResult dans $FichierSortie] } proc ParseStringLP {FichierInitial FichierString {FichierSortie ""}} { if {$FichierSortie==""} { set FichierSortie "GetList" } #FichierInitial /genomics/link/Tau/BlastpSurStringHomme/9606 #FichierString /genomics/link/Tau/BlastpSurStringHomme/9606.string #FichierSortie /genomics/link/Tau/BlastpSurStringHomme/9606.parser #set LigneResult "PID\tNbInteractant\tNbInteractantDans90\tListeCopsDans90\tNbInteractantDans90*100/NbInteractant" #lappend LesLignesResult $LigneResult set PIDprecedent ""; set PNprecedent ""; set NbInteractant 0; set Nb90 0; set premierefois 1; set LesCops {} foreach Ligne [LesLignesDuFichier $FichierString] { if {[regexp {^PIDInitial} $Ligne]} {continue} set LesMots [split $Ligne "\t"] foreach {PID PN PIDCop PNCop Score Evidence} $LesMots { #Espionne "" #Espionne "Ligne $PID\t$PN\t$PIDCop\t$PNCop\t$Score\t$Evidence" if {$premierefois} { incr NbInteractant foreach PIDInitial [LesLignesDuFichier $FichierInitial] { if {$PIDCop==$PIDInitial} { #lappend LesCops "$PIDCop $PNCop" lappend LesCops $PNCop incr Nb90 break } } #Espionne "1ere $NbInteractant $Nb90 $LesCops" set premierefois 0 } else { if {$PID==$PIDprecedent} { incr NbInteractant foreach PIDInitial [LesLignesDuFichier $FichierInitial] { if {$PIDCop==$PIDInitial} { #lappend LesCops "$PIDCop $PNCop" lappend LesCops $PNCop incr Nb90 break } } #Espionne "2eme $NbInteractant $Nb90 $LesCops" } else { set Cops [join $LesCops " "] set LigneResult "$PIDprecedent\t$PNprecedent\t$NbInteractant\t$Nb90\t[expr ($Nb90*100)/$NbInteractant]\t$Cops" #Espionne "LigneResult1 $LigneResult" lappend LesLignesResult $LigneResult set NbInteractant 0; set Nb90 0; set LesCops {} incr NbInteractant foreach PIDInitial [LesLignesDuFichier $FichierInitial] { if {$PIDCop==$PIDInitial} { #lappend LesCops "$PIDCop $PNCop" lappend LesCops $PNCop incr Nb90 break } } #Espionne "3eme $NbInteractant $Nb90 $LesCops" } } set PIDprecedent $PID set PNprecedent $PN } } set Cops [join $LesCops " "] set LigneResult "$PIDprecedent\t$PNprecedent\t$NbInteractant\t$Nb90\t[expr ($Nb90*100)/$NbInteractant]\t$Cops" #Espionne "LigneResult2 $LigneResult" lappend LesLignesResult $LigneResult # set LesLignesResult [lsort -integer -index 3 -decreasing $LesLignesResult] set LesLignesResult [lsort -command CompareLigneTabulee3 -decreasing $LesLignesResult] if {$FichierSortie=="GetList"} { return $LesLignesResult } if {$FichierSortie=="GetText"} { return [join $LesLignesResult "\n"] } return [SauveLesLignes $LesLignesResult dans $FichierSortie] } proc ParseTLog {Log} { global TbLog #puts "\n[join $Log \n]\n" unset -nocomplain TbLog set TbLog(DoTOC) 1 set TbLog(LElt) [list] ParseTLogLines $Log array unset TbLog "*Pile" return } proc ParseTLogLines {Log {id ""}} { global TbLog foreach l $Log { set l [string map [list AlALiGNe "\n" " {" " \{" "} " "\} "] $l] set l [string trim $l] if {$l eq ""} {continue} set sreste [string trim [string range $l [string first " " $l]+1 end]] switch -regexp -- $l { {^\#} { continue } {^\@begin} { set what [lindex $l 1] set n [incr TbLog(i[string totitle $what])] set it "${what}_$n" if {$what eq "tabular"} { set TbLog($it,TitleCols) "" set TbLog($it,TypeCols) "" } lappend TbLog(${id}LElt) $it if {$id ne ""} { set id "${id}$it," } else { set id "$it," } set TbLog(${id}Id) $it #puts "=>begin $it id $id" } {^\@end} { set id [join [lrange [split $id ,] 0 end-2] ,] if {$id ne ""} {set id "$id,"} #puts "--> end $id" } {^\@title } { set it "title_[incr TbLog(iTitle)]" lappend TbLog(${id}LElt) $it set TbLog(${id}$it,Id) "$it" set TbLog(${id}$it,Title) $sreste } {^\@subtitle} { set it "subtitle_[incr TbLog(iSubtitle)]" lappend TbLog(${id}LElt) $it set TbLog(${id}$it,Id) "$it" set TbLog(${id}$it,Subtitle) $sreste } {^\@text} { set it "text_[incr TbLog(iText)]" lappend TbLog(${id}LElt) $it set TbLog(${id}$it,Id) "" if {0 && [regexp {^warning} [lindex [split $id ,] end-1]]} { set TbLog(${id}Text) $sreste } else { set TbLog(${id}$it,Text) $sreste } } {^\@tele} { set it "tele_[incr TbLog(iTele)]" lappend TbLog(${id}LElt) $it set TbLog(${id}$it,Id) "" set TbLog(${id}$it,Text) $sreste } {^\@separator} { set it "separator_[incr TbLog(iSeparator)]" lappend TbLog(${id}LElt) $it } {^\@titlecols} { if {! [regexp {^tabular} [lindex [split $id ,] end-1]]} { continue } set TbLog(${id}TitleCols) $sreste } {^\@typecols} { if {! [regexp {^tabular} [lindex [split $id ,] end-1]]} { continue } set TbLog(${id}TypeCols) $sreste } {^\@row} { if {! [regexp {^tabular} [lindex [split $id ,] end-1]]} { continue } lappend TbLog(${id}Rows) $sreste } {^\@list} { lappend TbLog(${id},Text) [join [lrange [split $l " "] 1 end]] } {^\@link} { set it "link_[incr TbLog(iLink)]" lappend TbLog(${id}LElt) $it set TbLog(${id}$it,Id) "" set TbLog(${id}$it,textLink) [lindex $l 1] set TbLog(${id}$it,targetLink) [lindex $l 2] } } } return } proc PartieNomsDesSequencesDuBlast {Fichier {AvecQuery ""}} { DecortiqueBlast $Fichier "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN set LesSeqs {} if {$AvecQuery != ""} { lappend LesSeqs $Query } foreach BanqueId $lBanqueId Access $lAccess DE $lDE { lappend LesSeqs "$BanqueId $Access $DE" } set PartieNoms [join $LesSeqs "\n"] return $PartieNoms } proc PartieSegAli {Page LigneAccess} { # LogWscope "PartieSegAli [string length $Page] $LigneAccess" scan $LigneAccess "%s" Access regsub {\.+$} $Access "" Access set Cherche ">$Access " set OriCherche $Cherche set Debut [string first $Cherche $Page] while {$Debut<0} { set NewCherche [string range $Cherche 0 end-1] if { ! [OuiOuNon "I cannot find the segment alignment for \"$Cherche\" \nDo I continue to search with \"$NewCherche\" (one character less than before) ? \nPlease notate that $NewCherche is no more equal to $OriCherche and it can be wrong ..."]} { return "I didn't find $LigneAccess" } set Cherche $NewCherche set Debut [string first $Cherche $Page] } set Fin [string first "\n>" $Page $Debut] if { $Fin < 0 } { set Fin "end" } return [string range $Page $Debut $Fin] } proc PasDeCadre {K} { Wup "Avec proc UnCanvas de Raymond pour virer le cadre" set Id [$K find withtag "Cadre"] set MesTags [$K gettags $Id] $K itemconfigure $Id -outline "grey" return "" } proc PasTouche {Nom {Action ""}} { global RepertoireDuGenome Wup "Returns 1 if Nom in use, else uses it and returns 0" Wup " if Action is fin then release Nom and returns 0" Wup " if Action is test then tests only but doesn't use" Wup " if Nom is ListAll, it returns the text of all files" set RepPasTouche "[RepertoireDuGenome]/pastouche" set Action [string tolower $Action] #rR Pour voir s'il n'y en a pas qui trainent (à ne pas confondre avec test) if {$Nom=="Check"} { while {[set Etat [PasTouche "ListAll"]]!=""} { if {[OuiOuNon "Attention, following processes are running\n$Etat\nDo I exit ?" 0]} { exit } if {[OuiOuNon "Do I ignore it ?"]} { return 1 } } return 0 } if {[regexp -nocase "ListAll" $Nom]} { set LesEnCours [GlobRecursif "*" $RepPasTouche] if {$LesEnCours=={}} { return {} } set Etat {} foreach FPT $LesEnCours { if {[FileAbsent $FPT]} { continue } regsub {^.+/pastouche/} $FPT "" FileName set FileName [string trimleft $FileName "./"] if {[file type $FPT]=="directory"} { if { [regexp -nocase "Dir" $Nom]} { lappend LesFichiers $FileName } continue } if {[FileAbsent $FPT]} { continue } if {[catch {lappend Etat [ContenuDuFichier $FPT]}]} { continue } lappend LesFichiers $FileName } if {[regexp -nocase "Files" $Nom ]} { return $LesFichiers } return [join $Etat "\n"] } if {$Action=="" && [file exists "$RepPasTouche/stopall"]} { Warne "I exit because I found $RepPasTouche/stopall" exit } if {$Action=="" && ([file exists "$RepPasTouche/stop[pid]"] || [file exists "$RepPasTouche/stop$Nom"])} { Warne "I exit because I found $RepPasTouche/stop[pid] or $RepPasTouche/stop$Nom" exit } set FichierPasTouche "$RepPasTouche/$Nom" if {$Action=="fin"} { if {[file exists $FichierPasTouche]} { file delete -force $FichierPasTouche } return 0 } if {[file exists $FichierPasTouche]} { return 1 } if {$Action!="test"} { if { ! [file exists [set Rep [file dirname $FichierPasTouche]]]} { file mkdir $Rep } set Message "$Nom en cours sur [Hostname] , pid [pid] depuis [Date Nice] = [info level -1]" regsub {[\n]} $Message " " Message set Message [string range $Message 0 131] Sauve $Message dans $FichierPasTouche } return 0 } proc Passe1.0A1.1 {{pre ""}} { package require sqlite3 if {$pre eq ""} { set Lf [glob /home/moumou/synmito/3Data/*_verylastfinal.ord] } else { set Lf "/home/moumou/synmito/3Data/${pre}_verylastfinal.ord" } set Lf [lsort $Lf] foreach f $Lf { sqlite3 din $f din eval {begin transaction} set pre [string range [file tail $f] 0 [string first "_" [file tail $f]]-1] puts "deleting ${pre}_new.ord" file delete "${pre}_new.ord" set dout [FabriqueDeTables $::Defauts(TablesDB1.1) dout ${pre}_new.ord] $dout eval {begin transaction} # table ordalie set Ls [din eval {select * from ordalie}] foreach {k v} $Ls { $dout eval {insert into ordalie values('Defauts',$k,$v)} } # seqinfo set Lpk [din eval {select pk_seqinfo from seqinfo}] foreach pk $Lpk { set Lval [din eval {select * from seqinfo where pk_seqinfo=$pk}] puts "[join [lrange $Lval 0 end-1] |]" lassign $Lval a b c d e f g h i j k l m n o p q foreach var {e f l m n} { puts " ==> $var [set $var]" if {[set $var] eq ""} { set $var "undefined" } puts " ==> $var [set $var]" } foreach var {g h k} { puts " ---> $var [set $var]" if {[set $var] eq ""} { set $var 0 } } update puts "$a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p,0.0" $dout eval {insert into seqinfo values($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p,0.0,$q)} } # seqfeat set Lf [din eval {select l.pk_seqinfo, s.* from ln_seqinfo_seqfeat as l, seqfeat as s where l.pk_seqfeat=s.pk_seqfeat}] foreach {pki pkf ty de fi co sc no sy} $Lf { $dout eval {insert into seqfeat values($pkf,$pki,$ty,$de,$fi,$co,$sc,$no,$sy)} } # ln_seqinfo_seqfeat set Lv [din eval {select * from ln_seqinfo_seqfeat}] foreach {p1 p2} $Lv { $dout eval {insert into ln_seqinfo_seqfeat values($p1,$p2)} } # seqali set Lv [din eval {select * from seqali}] foreach {a b c d} $Lv { $dout eval {insert into seqali values ($a,$b,$c,$d)} } # mac set Lv [din eval {select * from mac}] foreach {a b c} $Lv { $dout eval {insert into mac values ($a,$b,$c)} } # ln_mac_seqali set Lv [din eval {select * from ln_mac_seqali}] foreach {a b c} $Lv { $dout eval {insert into ln_mac_seqali values($a,$b,$c)} } # featali set Lv [din eval {select * from featali}] foreach {a b c d e f g h} $Lv { $dout eval {insert into featali values ($a,$b,$c,$d,$e,$f,$g,$h)} } # ln_seqali_featali set Lv [din eval {select * from ln_seqali_featali}] foreach {a b c} $Lv { $dout eval {insert into ln_seqali_featali values($a,$b)} } # clustering set Lv [din eval {select * from clustering}] foreach {a b c d e} $Lv { $dout eval {insert into clustering values($a,$b,$c,$d,$e)} } # ln_mac_clustering set Lv [din eval {select * from ln_mac_clustering}] foreach {a b c} $Lv { $dout eval {insert into ln_mac_clustering values($a,$b,$c)} } # cluster set Lv [din eval {select * from cluster}] foreach {a b c} $Lv { $dout eval {insert into cluster values($a,$b,$c)} } # ln_seqali_cluster set Lv [din eval {select * from ln_seqali_cluster}] foreach {a b c} $Lv { $dout eval {insert into ln_seqali_cluster values($a,$b,$c)} } # colmeasure set Lv [din eval {select * from colmeasure}] set m "" foreach {a b} $Lv { $dout eval {insert into colmeasure values($a,$b,$m)} } # ln_mac_colmeasure set Lv [din eval {select * from ln_mac_colmeasure}] foreach {a b} $Lv { $dout eval {insert into ln_mac_colmeasure values($a,$b)} } # colscore set Lv [din eval {select * from colscore}] foreach {a b c d e f} $Lv { $dout eval {insert into colscore values($a,$b,$c,$d,$e,NULL,$f)} } # ln_cluster_colscore set Lv [din eval {select * from ln_cluster_colscore}] foreach {a b} $Lv { $dout eval {insert into ln_cluster_colscore values($a,$b)} } # anno/annotation set Lv [din eval {select * from anno}] foreach {a b c d} $Lv { $dout eval {insert into annotation values($a,$b,$c,$d)} } # pdb set Lv [din eval {select * from pdb}] foreach {a b c d} $Lv { $dout eval {insert into pdb values($a,$b,$c,$d)} } # chaines/chains set Lv [din eval {select * from chaines}] foreach {a b c d} $Lv { $dout eval {insert into chains values($a,$b,$c,$d)} } # residues set Lv [din eval {select * from residues}] foreach {a b c d e f g} $Lv { $dout eval {insert into residues values ($a,$b,$c,$d,$e,$f,$g)} } # atomes/atoms set Lv [din eval {select * from atomes}] foreach {a b c d e f g h i j k} $Lv { $dout eval {insert into atoms values($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k)} } $dout eval {create index idx_seqinfo on seqinfo (pk_seqinfo, seqname, access)} $dout eval {create index idx_seqali on seqali (pk_seqali, pk_seqinfo, seqname, seq)} $dout eval {create index idx_ln_seqali_featali on ln_seqali_featali (pk_seqali, pk_featali)} $dout eval {create index idx_featali on featali (pk_featali, ftype, fstart, fstop, fscore, fnote, fcsys)} $dout eval {create index idx_ln_mac_seqali on ln_mac_seqali (pk_mac, pk_seqali)} $dout eval {create index idx_ln_mac_clustering on ln_mac_clustering (pk_mac, pk_clustering)} $dout eval {create index idx_cluster on cluster (pk_cluster, pk_clustering, name)} $dout eval {create index idx_ln_seqali_cluster on ln_seqali_cluster (pk_seqali, pk_cluster, pos)} $dout eval {create index idx_pdb on pdb (pk_pdb, name, header)} $dout eval {create index idx_chains on chains (pk_chains, pk_pdb, name, type)} $dout eval {create index idx_residues on residues (pk_residues, pk_pdb, pk_chains, rname1l, rname3l, rnbr, type)} $dout eval {create index idx_atoms on atoms (pk_atoms, pk_pdb, pk_chains, pk_residues, aname, x, y, z, na)} # objets graphiques set Lobj [din eval {select distinct(tbl_name) from sqlite_master where tbl_name like "obj_%"}] set Lobj [lsort -decreasing $Lobj] foreach obj $Lobj { if {$obj ne "objetinit"} { set pkp [din eval "select distinct(pk_pdb) from $obj"] $dout eval "create table $obj as select * from objetinit where pk_pdb = $pkp" } set Lv [din eval "select * from $obj"] foreach {a b c d e f g h i j k l m n o p} $Lv { $dout eval "insert into $obj values($a,$b,$c,$d,$e,$f,$g,'$h',$i,'$j',$k,'$l',$m,$n,$o,'$p')" } $dout eval "create index idx_$obj on $obj (pk_obj, pk_residues, currsel, surface, ribbon, ribcol, catrace, cacol, atoms, atmcol, cpk, pearl, picked, label)" } $dout eval {commit} $dout close din eval {commit} din close } return } proc Passeur {LisBoxDep LisBoxArr} { set LesPasses {} foreach i [$LisBoxDep curselection] { set Passe [$LisBoxDep get $i] lappend LesPasses $Passe $LisBoxArr insert end $Passe } return $LesPasses } proc PasteLesNoms {} { global LSOrdali LNOrdali Sequences LNSeqlab LSSeqlab NomSeqSel BufferSeq NomTextSeq NomNomSeq Defauts ListeSeqsGroupees TDesAccess TDesSeqnames TDesBId if {[TypeAli] eq "pasdali"} { return } if {$BufferSeq == {}} { return } if {$NomSeqSel == {} || [llength $NomSeqSel] > 1} { FaireLire "Please select ONE sequence below which\nsequences should be inserted !" return } # keep track of Y-scrollbar position lassign [$::TScrollY get] ysc tmp # insertion point lassign [split $NomSeqSel .] yp xp if {[QuelMode] eq "seqlab"} { set LNoms $LNSeqlab set LSeqs $LSSeqlab } else { set LNoms $LNOrdali set LSeqs $LSOrdali VueEditee 1 } # Ordali works with seq-names as unique ID set LIN [list] set LIS [list] set LIT [list] foreach b $BufferSeq { lassign $b Nom Seq Tname lappend LIS $Seq lappend LIT $Tname set te $Nom set Lx [lsearch -all $LNoms $Nom] if {$Lx != {}} { # Name already exists. Make a copy if {[regexp {__[0-9]+$} $Nom]} { # the pasted name is already a copy set te [string range $Nom 0 [string last "__" $Nom]-1] } set Lx [lsearch -all -regexp $LNoms $te] set nf [llength $Lx] set Nom "${te}__${nf}" # create the new name set TDesSeqnames($Nom) $Nom set bin [set TDesBId($te)] set TDesBId($Nom) $bin set acc [set TDesAccess($te)] set TDesAccess($Nom) $acc CopySequenceData $te $Nom } lappend LIN $Nom } # insertion point in widget $NomNomSeq configure -state normal set y [expr {$yp+1}] set iy [expr {$yp-1}] foreach n $LIN s $LIS t $LIT { set ly [expr {$y-1}] if {[QuelMode] eq "seqlab"} { set LNSeqlab [linsert $LNSeqlab $ly $n] set LSSeqlab [linsert $LSSeqlab $ly $s] if {$t ne ""} { set g [string range $t 2 end] lappend ListeSeqsGroupees($g) $n } } else { set LNOrdali [linsert $LNOrdali $ly $n] set LSOrdali [linsert $LSOrdali $ly $s] set Sequences($n) $s } incr y } if {[QuelMode] eq "seqlab"} { $NomTextSeq paste $iy } else { FlagFeatureScore 1 } update idletasks $NomNomSeq configure -state disabled set BufferSeq {} set NomSeqSel {} MetAJourGroupes ChangeNomsAff $Defauts(NomsAffiches) AfficheNomsEtSeqs RepeintNoms CoupleY moveto $ysc return } proc PasteLesNomsSB {} { global NomNomSeq global NomTextSeq global BufferSeq global LNSeqlab global LSSeqlab global NomSeqSel global LookSeqs global LesPoidsDesSequences if {$BufferSeq == {}} {return} if {[llength $NomSeqSel] > 1} { FaireLire "Please select ONE sequence below which\nsequences should be inserted !" return } lassign [split $NomSeqSel ,] y x $NomNomSeq configure -state normal $NomTextSeq configure -state normal $NomNomSeq configure -usecommand 0 $NomTextSeq configure -usecommand 0 $NomNomSeq clear tags $NomTextSeq clear cache $NomTextSeq insert row $y [llength $BufferSeq] $NomNomSeq insert row $y [llength $BufferSeq] incr y foreach e $BufferSeq { lassign $e n s set Lx [lsearch -all $LNSeqlab $n] if {[lindex $Lx 0] ne ""} { set nf 0 if {[regexp "__" $n]} { set te [string range $n 0 [expr {[string first "__" $n]-1}]] } else { set te $n } set Lx [lsearch -all -regexp $LNSeqlab $te] if {[lindex $Lx 0] ne ""} { set nf [expr {$nf+[llength $Lx]}] global LockSeqs set n "${te}__${nf}" set LockSeqs($n) 1 set LesPoidsDesSequences($n) 1. } } $NomNomSeq tag cell InvNm $y,0 set LSSeqlab [linsert $LSSeqlab $y $s] set LNSeqlab [linsert $LNSeqlab $y $n] incr y } $NomNomSeq configure -state disabled $NomTextSeq configure -state disabled $NomNomSeq configure -usecommand 1 $NomTextSeq configure -usecommand 1 update idletasks return } proc PasteSeqsSel {} { global NomTextSeq global NomNomSeq global BufferRegion global LSSeqlab global LNSeqlab if {! [info exists BufferRegion] || $BufferRegion == {}} {return} set pos [$NomTextSeq index insert] lassign [split $pos "."] y r set iw [expr {$y-1}] for {set j $iw} {$j < $iw+[llength $BufferRegion]} {incr j} { set s [string trim [lindex $LNSeqlab $j]] if {[SequenceLockee $s]} {return} } lassign [lindex $BufferRegion 0] d t s set n [expr {[string length $s]-1}] set lm 0 for {set j $iw ; set i 0} {$i < [llength $BufferRegion]} {incr i ; incr j} { set seq [string range [lindex $LSSeqlab $j] "end-$n" end] set lg [string length [string trimright $seq "."]] if {$lg > $lm} {set lm $lg} } AjouteDesGapsATous end $lm set np [expr {$n+1}] foreach e $BufferRegion { set yt [expr {$y - 1}] set s [lindex $LSSeqlab $yt] lassign $e d t s lassign [split $d "."] tmp p $NomTextSeq delete "$y.0 lineend -${np} chars" "$y.0 lineend" $NomTextSeq insert $y.$r $s set seq [string range $s 0 "end-${np}"] Stringinsert seq $r $s foreach {nm x1 x2} $t { if {$x1 == -1} {set x1 $p} if {$x2 == "Fin"} {set x2 [expr {$p+$n+1}]} set a [expr {$r + ($x1 - $p)}] set f [expr {$a + ($x2 - $x1)}] $NomTextSeq tag add $nm $y.$a $y.$f } set LSSeqlab [lreplace $LSSeqlab $yt $yt $seq] incr y } $NomTextSeq edit separator EventNullPourNoms return } proc PatchEtChapelet {} { return } proc PathToNode {N T {WhatToTest link}} { if {$WhatToTest=="link" && $N==$T || $WhatToTest=="value" && $N==[ValueOfTree $T] } { return [list $T] } foreach B [Branches $T] { set Path [PathToNode $N $B $WhatToTest] if {$Path=={}} { continue } return [linsert $Path 0 $T] } return {} } proc PathwayDesBoites {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set LesLignes {} foreach Nom $Liste { puts "$Nom" set AccNm ""; set AccGb ""; set GeneName ""; set LesPathways {}; set Pathway ""; set Ligne "" set AccNm [InterrogeIngenuityNmEtEvi $Nom Acc] set AccGb [InterrogeIngenuityGbEtEvi $Nom Acc] if {$AccNm=="" && $AccGb==""} {continue} if {$AccNm!=""} { set GeneName [InterrogeIngenuityNmetGn $AccNm Gn] if {$GeneName==""} {continue} set LesPathways [InterrogeIngenuityGnNmetPathway $GeneName Pathway] set Pathway [join $LesPathways ","] set Ligne "$Nom\t$Pathway" lappend LesLignes $Ligne InformeSansDemander $Nom "Pathways: $Pathway" } else { set GeneName [InterrogeIngenuityGbetGn $AccGb Gn] if {$GeneName==""} {continue} set LesPathways [InterrogeIngenuityGnGbetPathway $GeneName Pathway] set Pathway [join $LesPathways ","] set Ligne "$Nom\t$Pathway" lappend LesLignes $Ligne InformeSansDemander $Nom "Pathways: $Pathway" } } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/Ingenuity/LesPathwaysDesBoites" } proc Patience {Commande} { set w [NomDe fenetre] toplevel $w wm title $w "Patience ..." wm iconname $w "Patience ..." label $w.msg -text "$Commande \n Ca bosse ... Il faut attendre. " pack $w.msg update return $w } proc Pattern2Regexp {pat} { if {[string index $pat 0] eq "{" && [string index $pat end] eq "}"} { set pat [string range $pat 1 end-1] } set Lmot [split $pat -] set reg "" foreach e $Lmot { switch -regexp -- $e { {^\[} {set o $e} {\(} { set o [string map [list "(" "\{" ")" "\}"] $e] } {\{} { set l [string length [string range $e 1 end-1]] set o "\." if {0 && $l > 1} { append o "\{$l\}" } } default {set o $e} } set o [string map [list ">" "$" "<" "^" x "\." X "\."] $o] if {! [regexp {\.} $o]} { set o "($o)" } append reg $o } return $reg } proc PatternResearchInSeqFileTFA {Pattern FileTFA} { ### Recherche d'un motif dans la sequence d'un fichier TFA ### ### Rend le debut et la fin du motif recherche dans un string ### ### Attention, la premiere position est 1 ### set SeqTFA [QueLaSequenceDuTFA $FileTFA ] set LesRegions [PatternResearchInString $Pattern $SeqTFA] return $LesRegions } proc PatternResearchInString {Pattern String} { ### Recherche d'un motif dans une chaine de caracteres ### ### Rend le debut et la fin du motif recherche dans un string ### ### Attention, la premiere position est 1 ### set LesRegions {} set Position 0 set Pattern [string toupper $Pattern] set String [string toupper $String] set NewPattern "" #Prise en compte du code IUPAC pour les nucleotides dans le pattern foreach PatternElement [split $Pattern ""] { if {$PatternElement == "M"} {append NewPattern "\[AC\]\{1\}" ; continue } if {$PatternElement == "R"} {append NewPattern "\[AG\]\{1\}" ; continue } if {$PatternElement == "W"} {append NewPattern "\[AT\]\{1\}" ; continue } if {$PatternElement == "S"} {append NewPattern "\[CG\]\{1\}" ; continue } if {$PatternElement == "Y"} {append NewPattern "\[CT\]\{1\}" ; continue } if {$PatternElement == "K"} {append NewPattern "\[GT\]\{1\}" ; continue } if {$PatternElement == "V"} {append NewPattern "\[ACG\]\{1\}" ; continue } if {$PatternElement == "H"} {append NewPattern "\[ACT\]\{1\}" ; continue } if {$PatternElement == "D"} {append NewPattern "\[AGT\]\{1\}" ; continue } if {$PatternElement == "B"} {append NewPattern "\[CGT\]\{1\}" ; continue } if {$PatternElement == "N"} {append NewPattern "\[ACGT\]\{1\}"; continue } append NewPattern $PatternElement } #Recherche du NewPattern dans la string while {[regexp -nocase -start $Position -indices $NewPattern $String LaLocalisation]} { set D [expr [lindex $LaLocalisation 0] + 1] set F [expr [lindex $LaLocalisation 1] + 1] set Position $D lappend LesRegions [list $D $F] #Espionne [string range $String $D $F] } return $LesRegions } proc PatternSearchInGenome {} { set Url "http://kilida.u-strasbg.fr:8086/CST_Java_Servlet/InterfaceWebCST?action=search&genome=human_2006-nomasque&get=result&pattern=ATGATGATGATGATGATGA" return [ContenuDuFichier $Url] } proc Pavage {Effectif Largeur Hauteur} { set T [expr sqrt($Largeur * $Hauteur / $Effectif)] set nHorizMin [expr int ($Largeur / $T)] set nHorizMax [expr $nHorizMin + 1] set nVertiMin [expr int ($Hauteur / $T)] set nVertiMax [expr $nVertiMin + 1] if {$Effectif <= [expr $nHorizMin * $nVertiMin]} {return [list $nHorizMin $nVertiMin]} set nHorizMaxVertiMin [expr $nHorizMax * $nVertiMin] set nHorizMinVertiMax [expr $nHorizMin * $nVertiMax] if {$nHorizMaxVertiMin <= $nHorizMinVertiMax} { if {$Effectif <= $nHorizMaxVertiMin} {return [list $nHorizMax $nVertiMin]} if {$Effectif <= $nHorizMinVertiMax} {return [list $nHorizMin $nVertiMax]} } if {$nHorizMinVertiMax <= $nHorizMaxVertiMin} { if {$Effectif <= $nHorizMinVertiMax} {return [list $nHorizMin $nVertiMax]} if {$Effectif <= $nHorizMaxVertiMin} {return [list $nHorizMax $nVertiMin]} } return [list $nHorizMax $nVertiMax] } proc Pcomon {} { BCM_setup set LpdbCS [lsort -unique [BCM_LoadCSADB]] set db root sqlite3 $db bench.sql set LpdbDB [lsort -unique [$db eval {select pdbid from pdbmap}]] puts "pdbCS [llength $LpdbCS]" puts "pdbDB [llength $LpdbDB]" puts "[llength [land $LpdbCS $LpdbDB]]" exit } proc PcrProduct {Oli5 Seq Oli3 {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetFasta" } set H5 [SiteHybridisation $Oli5 $Seq "F"] set H3 [SiteHybridisation $Oli3 $Seq "R"] scan $H5 "%d %d %d %s" I5 IA5 Tm5 S5 scan $H3 "%d %d %d %s" I3 IA3 Tm3 S3 if {$IA5>$IA3} { set PPCR "X" set Entete "NoPcrProduct $I5 $IA5 $Tm5 $S5 $I3 $IA3 $Tm3 $S3" } else { set R3 [NucToReverseAndComplementNuc $Oli3] set SS [string range $Seq [expr $IA5 - 1] [expr $IA3 -1]] set PPCR "$Oli5$SS$R3" set Entete "PcrProduct $I5 $IA5 $Tm5 $S5 $I3 $IA3 $Tm3 $S3" } set TFA [SequenceFormatTFA $PPCR $Entete] if {[string equal -nocase "GetFasta" $GetWhat]} { return $TFA } return "$PPCR $I5 $IA5 $Tm5 $S5 $I3 $IA3 $Tm3 $S3" } proc PdbInfo {{Qui ""} {Quoi ""}} { global PdbInfo if {[info exists PdbInfo($Qui,$Quoi)]} { return $PdbInfo($Qui,$Quoi) } if {[info exists PdbInfo("EstCharge")]} { return "" } set PdbInfo("EstCharge") 1 set FichierProtnames "./protnames.lst" foreach Ligne [LesLignesDuFichier $FichierProtnames] { scan $Ligne "%s" Acc set PdbInfo($Acc,txt) $Ligne lappend PdbInfo(listof,acc) $Acc if {[regexp -nocase {^([0-9a-z]+) [\*\- ]+$} $Ligne Match Acc]} { set PdbInfo($Acc,def) "" continue } if {[regexp -nocase {^([0-9a-z]+) +\* +\- +\- +} $Ligne Match Acc]} { regsub {^([0-9a-z]+) +\* +\- +\- +} $Ligne "" Def set PdbInfo($Acc,def) [string trim $Def] continue } set T "" set Date "" set Meth "" lassign [split $Ligne " "] Acc T Date Meth if { ! [regexp {^[0-9][0-9]\-[A-Z][a-z][a-z]\-[0-9][0-9]$} $Date]} { if {[regexp {(X\-ray|NMR) +([0-9\.]+) (.+)$} $Ligne Match Meth Resol Def]} { set PdbInfo($Acc,def) [string trim $Def] set PdbInfo($Acc,met) [string trim $Meth] set PdbInfo($Acc,res) [string trim $Resol] continue } if {[regexp {(Theoret model) (.+)$} $Ligne Match Meth Def]} { set PdbInfo($Acc,def) [string trim $Def] continue } FaireLire $Ligne continue } if {$Meth==""} { set Meth "-" } regsub -all -- {\*} $T "\\*" xT regsub -all -- {\-} $xT "\\-" xT regsub -all -- {\-} $Date "\\-" xDate regsub -all -- {\-} $Meth "\\-" xMeth regsub "$Acc +$xT +$xDate +$xMeth" $Ligne "" ResDef scan $ResDef "%s" Resol regsub -all -- {\-} $Resol "\\-" Resol regsub -- "$Resol +" $ResDef "" Def if { ! [regexp {^[0-9\.]+$} $Resol]} { set Resol "" } set PdbInfo($Acc,def) [string trim $Def] set PdbInfo($Acc,dat) [string trim $Date] set PdbInfo($Acc,met) [string trim $Meth] set PdbInfo($Acc,res) [string trim $Resol] } foreach Acc [PdbInfo listof acc] { set Def $PdbInfo($Acc,def) if {[info exists PdbInfo($Acc,dat)]} { append Def " $PdbInfo($Acc,dat)" } if {[info exists PdbInfo($Acc,met)] && $PdbInfo($Acc,met)!="Theoret"} { append Def " $PdbInfo($Acc,met)" } if {[info exists PdbInfo($Acc,res)]} { append Def " $PdbInfo($Acc,res)" } set PdbInfo($Acc,def) $Def } return [PdbInfo $Qui $Quoi] } proc PdbSeqRes {{Qui ""} {Quoi ""}} { global PdbSeqRes if {[info exists PdbSeqRes($Qui,$Quoi)]} { return $PdbSeqRes($Qui,$Quoi) } if {[info exists PdbSeqRes("EstCharge")]} { return "" } set PdbSeqRes("EstCharge") 1 set FichierSeqRes "./pdb_seqres.txt" foreach Ligne [LesLignesDuFichier $FichierSeqRes] { if {[regexp ">" $Ligne]} { scan $Ligne "%s" AccChain regsub ">" $AccChain "" AccChain lappend PdbSeqRes(listof,acc) $AccChain set PdbSeqRes($AccChain,seq) "" regsub {.*length\:[0-9]+ +} $Ligne "" Titre set PdbSeqRes($AccChain,tit) $Titre continue } set Ligne [string trim $Ligne] append PdbSeqRes($AccChain,seq) $Ligne } foreach AccChain $PdbSeqRes(listof,acc) { regsub {_[A-Z]+} $AccChain "" Acc set acc [string tolower $Acc] set Def [PdbInfo $acc def] set Entete ">PDB:$AccChain $PdbSeqRes($AccChain,tit)." if {$Def!=""} { append Entete " $Def" } set Seq $PdbSeqRes($AccChain,seq) if {[regexp -nocase {[^a-z]} $Seq]} { Espionne "$Acc $Seq" } set Tfa [SequenceFormatTFA $Seq $Entete "protbrut"] set PdbSeqRes($AccChain,tfa) $Tfa set ACCCHAIN [string toupper $AccChain] if {$AccChain!=$ACCCHAIN} { set PdbSeqRes($ACCCHAIN,tfa) $Tfa set PdbSeqRes($ACCCHAIN,seq) $Seq } } return [PdbSeqRes $Qui $Quoi] } proc PeaXtend {Path Upstream Downstream {Organism human} {AccessMode no} {RepeatDisplay N}} { # Récupère le promoteur a partir du start du gène et de son orientation. # Il faut préciser sur combien s'étend le pomoteur en amont et en aval du gène. set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|PeaXtend Start (using access mode = $AccessMode)" if {$AccessMode == "yes"} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|PeaXtend building queries" set FichierDesAccess [open "$Path.acc" "r"] set FichierDesRequetes [open "/tmp/GetProm$Organism.bql" "w"] while { [gets $FichierDesAccess Access] >= 0} { puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT chrom, txStart, txEnd, strand FROM ucsc$Organism.refGene WHERE access='$Access'" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } close $FichierDesRequetes set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|PeaXtend: executing queries" BirdFetch "/tmp/PeaXtend.$Organism.bql" "/tmp/PeaXtend.$Organism.res" set FichierDesRequetesExecutees [open "/tmp/PeaXtend.$Organism.res" "r"] set FichierDesCoordonnees [open "$Path.coord" "w"] while { [gets $FichierDesRequetesExecutees Entete] >=0 } { gets $FichierDesRequetesExecutees Ligne puts $FichierDesCoordonnees $Ligne } close $FichierDesRequetesExecutees close $FichierDesCoordonnees } else { set Access "Promoter" } if {$Organism == "human"} { set bigzips "bigZips200603" set Organism "Homo_sapiens" } if {$Organism == "mouse"} { set bigzips "bigZips200707" set Organism "Mus_musculus" } if {$Organism == "zebrafish"} { set bigzips "bigZips" set Organism "Danio_rerio" } if {$Organism == "droso"} { set bigzips "bigZips" set Organism "Drosophilia_melanogaster" } if {$Organism == "celegans"} { set bigzips "bigZips200701" set Organism "Caenorhabditis_elegans" } set I 0 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|PeaXtend fetching sequences" set FichierDesCoordonnees [open "$Path.coo" "r"] set FichierDesPromoteurs [open "$Path.prom" "w"] while { [gets $FichierDesCoordonnees LigneCoordonnee] >=0 } { incr I set Strand "" #ScanLaPipe $LigneCoordonnee Chromosome Start End Strand ScanLaListe $LigneCoordonnee ID Chromosome Start End Strand set Strand "+" regsub -all {chr0} $Chromosome "" Chrox regsub -all {chr} $Chrox "" Chrox if {$AccessMode == "yes"} { if { $Strand == "+" || $Strand = "" } { set ExtendStart [expr $Start - $Upstream] set ExtendEnd [expr $Start + $Downstream] } else { set ExtendStart [expr $End - $Downstream] set ExtendEnd [expr $End + $Upstream] } } else { if { $Strand == "+" } { set ExtendStart [expr $Start - $Upstream] set ExtendEnd [expr $End + $Downstream] } else { set ExtendStart [expr $Start - $Downstream] set ExtendEnd [expr $End + $Upstream] } } set SequenceRallongee [BoutAdnDeUcscBoost $ExtendStart $ExtendEnd $Strand $Organism $Chrox $bigzips] if {$RepeatDisplay == "N"} { regsub -all {a|t|c|g} $SequenceRallongee "N" SequenceRallongee } if {$RepeatDisplay == "upper"} { set SequenceRallongee [string upper $SequenceRallongee] } if {$Strand == "+"} { set Strand "Plus" } if {$Strand == "-"} { set Strand "Minus" } #puts $FichierDesPromoteurs ">$Access|chr$Chrox:$ExtendStart-$ExtendEnd|$Strand|$Start|$End" #puts $FichierDesPromoteurs "$SequenceRallongee" set Item [formatFasta "$LigneCoordonnee" $SequenceRallongee] puts $FichierDesPromoteurs $Item Espionne $Item flush stdout } close $FichierDesCoordonnees close $FichierDesPromoteurs set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|PeaXtend End" } proc PeintCAEnCouleur {} { global Defauts global StrucAVoir global Couleurs set i 0 foreach s $StrucAVoir { set col [lindex [set Couleurs(Stock)] $i] set c [CouleurOrdali2O $col] IlFautVoir "pa_col $c" IlFautVoir "pa_obje ca$s" incr i } return } proc PeintHitsCherche {} { global NomTextSeq Chrc $NomTextSeq configure -bg black -fg white if {$Chrc(prevMode) eq "seqlab"} { $NomTextSeq map off $NomTextSeq tag state on update idletasks } $NomTextSeq tag configure Cherche -background red -foreground white if {[llength $Chrc(LOccus)] != 0} { $NomTextSeq tag remove Cherche 1.0 end $NomTextSeq tag add Cherche {*}$Chrc(LOccus) } return } proc PeintParClusters {AId} { global Abr SDG LNDG if {[llength [array names SDG]] == 1} { return } set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] if {[set Abr($AId,ShClusters)]} { foreach g $LNDG { if {$g in [list GroupeToutLeMonde All all grise bidon]} { continue } set col [CouluerO2Ordali [CouleurDuGroupe [string range $g 5 end]]] foreach f [set SDG($g)] { set id [$PAD find withtag "feuille-$f"] if {$id eq ""} { continue } $PAD itemconfig $id -fill $col } ColorieDescendants $AId [set SDG($g)] $col } } else { set Lf [$t leaves] foreach f $Lf { set id [$PAD find withtag "feuille-$f"] $PAD itemconfig $id -fill black } set Li [$PAD find withtag all] foreach i $Li { if {[lsearch -regexp [$PAD gettags $i] "line-"] != -1} { $PAD itemconfig $i -width 1 -fill black } } } return } proc PeintParPhylum {AId} { global Abr LesSequencesAssocieesClassesCanon Defauts if {! [info exists LesSequencesAssocieesClassesCanon]} { FaireLire "No Phylum information available !" set Abr($AId,Phylum) 0 return } set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] set Ln [$t attr name -nodes [$t leaves]] if {[set Abr($AId,Phylum)]} { foreach {n v} $Ln { foreach d [array names LesSequencesAssocieesClassesCanon] { # set d [string totitle $d] if {[info exists Defauts(Fg$d)]} { set f [set Defauts(Fg$d)] set b [set Defauts(Bg$d)] } else { set f black set b [$PAD cget -background] } set Ld [set LesSequencesAssocieesClassesCanon($d)] if {$v ni $Ld} {continue} if {[set Abr($AId,TypeTree)] eq "dendrogram"} { set Id [$PAD find withtag "feuille-$v"] $PAD itemconfig $Id -fill $f } set Id [$PAD find withtag "Rfeuille-$v"] $PAD itemconfig $Id -fill $b break } } } else { foreach {n v} $Ln { if {[set Abr($AId,TypeTree)] eq "dendrogram"} { set Id [$PAD find withtag "feuille-$v"] $PAD itemconfig $Id -fill black } set Id [$PAD find withtag "Rfeuille-$v"] $PAD itemconfig $Id -fill white } } return } 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] } 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 PeptideSort {NomOuFichierOuTexte {ShowEnzymes ""}} { global RepertoireDuGenome JeMeSignale if {$ShowEnzymes=="ShowEnzymes"} { set EnzymeArg "\*" } else { set EnzymeArg "\#" } if {[regexp "^>" $NomOuFichierOuTexte]} { scan $NomOuFichierOuTexte "%s" Nom regsub ">" $Nom "" Nom set Seq [QueLaSequenceDuTexteTFA $NomOuFichierOuTexte] } elseif {[regexp "/" $NomOuFichierOuTexte]} { set Nom [file tail $NomOuFichierOuTexte] set FichierTFA $NomOuFichierOuTexte if { ! [file exists $FichierTFA]} { return "" } set Seq [QueLaSequenceDuFichierTFA $FichierTFA] } elseif {[EstUnPAB $NomOuFichierOuTexte]} { set Nom $NomOuFichierOuTexte set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" if { ! [file exists $FichierTFA]} { return "" } set Seq [QueLaSequenceDuFichierTFA $FichierTFA] } elseif {[regexp -nocase {^[a-z\*\-]+$} $NomOuFichierOuTexte]} { set Seq $NomOuFichierOuTexte set Nom "pepsort" } else { return "" } set Long [string length $Seq] if {$Long<1} { return "" } NousAllonsAuBoulot set Racine [string tolower [TmpFile "${Nom}_"]] set Queue [file tail $Racine] set FichierTmpTfa "$Racine.tfa" set FichierTmpPep "$Racine.pep" set FichierPepSort "$Racine.pepsort" # FromFasta $FichierTmpTfa $FichierTmpPep Sauve [SequenceFormatTFA $Seq "$Queue" "brut"] dans "$FichierTmpTfa" exec fromfasta -begin=1 -end=$Long -protein $FichierTmpTfa if { ! [file exists $FichierTmpPep]} { Espionne $FichierTmpTfa # File delete -force $FichierTmpTfa return "Error in PeptideSort : I couldn't convert $FichierTFA to GCG" } exec peptidesort -begin=1 -end=$Long -outputfile=$FichierPepSort -Enzymes=$EnzymeArg -default $FichierTmpPep if { ! [file exists $FichierPepSort]} { File delete -force $FichierTmpTfa File delete -force $FichierTmpPep return "Error in PeptideSort : gcg peptidesort didn't create $FichierPepSort" } set Resultat [ContenuDuFichier $FichierPepSort] File delete -force $FichierTmpTfa File delete -force $FichierTmpPep File delete -force $FichierPepSort OnRevientDuBoulot regsub -all $Racine $Resultat $Nom Resultat regsub -all $Queue $Resultat $Nom Resultat return $Resultat } proc PeptideSortPourLesFusionsPourCertains {} { FaireLire "Please select some fusions.\nI'll proceed step by step (Nxxxx)\n But First choose ONE cutting site." set ChoixCoupure [ChoixDUnSiteDeCoupure] if {$ChoixCoupure==""} { return {} } set LesFiFu [glob -nocomplain "[RepertoireDuGenome]/fusion/*.nuctfa"] set LesFiFu [lsort [ChoixDesPresents $LesFiFu]] if {$LesFiFu=={}} { return {} } set LaCharrette {} set OldN "Trululu" lappend LesFiFu "ThatsAllFolks" set LesReports {} foreach FiFu $LesFiFu { if { ! [regexp {/Fus_N[0-9]+_} $FiFu N]} { if {$FiFu != "ThatsAllFolks"} { FaireLire "the file name \n$FiFu\n is not as I expected. I'll skip" continue } set N "ThatsAllFolks" } if {$OldN=="Trululu" || $N==$OldN} { lappend LaCharrette $FiFu set OldN $N continue } if {$N!=$OldN} { set R [AffichePeptideSortPourLesFusions $LaCharrette $ChoixCoupure "SansAffichage"] set LaCharrette {} lappend LesReports $R Espionne $R } set OldN $N } return $LesReports } proc PetitGscope {Ancien Nouveau {FichierOuListeDesAnciens ""} {Debut ""} {Fin ""}} { set ListeDesAnciens $FichierOuListeDesAnciens if {$FichierOuListeDesAnciens!="" && [FileExists $FichierOuListeDesAnciens]} { set ListeDesAnciens [LesLignesDuFichier $FichierOuListeDesAnciens] } set Keep [OuiOuNon "Do I keep all existing files ?" 0] set KeepUnusual [OuiOuNon "Do I keep all unusual files ?" 0] set Premier "" set Dernier "" if {$Debut!=""} { set Premier [format "%s%[FormatDesNumerosPourCollection]" [PreFixe] $Debut] } if {$Fin !=""} { set Dernier [format "%s%[FormatDesNumerosPourCollection]" [PreFixe] $Fin ] } if { ! [regexp "/" $Ancien] } { set Ancien "/genomics/link/$Ancien" } if { ! [regexp "/" $Nouveau]} { set Nouveau "/genomics/link/$Nouveau" } if { ! [file exists $Ancien]} { FaireLire "$Ancien doesn't exist" exit } if { ! [file exists $Nouveau]} { if { ! [OuiOuNon "Do I create $Nouveau"]} { exit } file mkdir $Nouveau } foreach Fic [glob -nocomplain -type f "$Ancien/*"] { if { ! $KeepUnusual} { Espionne "I skip $Fic" ; continue} set Tail [file tail $Fic] set NewFic "$Nouveau/$Tail" if {$Keep && [file exists $NewFic]} { continue } file copy -force $Fic $NewFic } foreach Lien [glob -nocomplain -type l "$Ancien/*"] { if { ! $KeepUnusual} { Espionne "I do not create the link $Lien" ; continue } set Tail [file tail $Lien] set NewLien "$Nouveau/$Tail" if {$Keep && [file exists $NewLien]} { continue } set Cible [file readlink $Lien] exec ln -sf $Cible $NewLien } foreach Rep [list "$Ancien/beton" "$Ancien/fiches" "$Ancien/trnadir" "$Ancien/glimmer" "$Ancien/codonw" "$Ancien/bilan_xhda" "$Ancien/xhda" ] { if { ! [file exists $Rep]} { continue } set Tail [file tail $Rep] set NewRep "$Nouveau/$Tail" set Skipp 0 Espionne $NewRep while {[glob -nocomplain "$NewRep/*"]!={}} { if {[OuiOuNon "$NewRep\n is not empty.\n Can I delete all files and copy the new version ?"]} { file delete -force $NewRep } else { if {[OuiOuNon "Do I skipp $Rep ?"]} { set Skipp 1 ; break} } } if {$Skipp} { continue } Espionne "file copy -force $Rep $NewRep" file copy -force $Rep $NewRep foreach Lien [glob -nocomplain -type l "$Rep/*"] { set Tail [file tail $Lien] set NewLien "$NewRep/$Tail" if {$Keep && [file exists $NewLien]} { continue } set Cible [file readlink $Lien] exec ln -sf $Cible $NewLien } set DejaVu($Rep) 1 } set LesAutres {} foreach Autre [glob -nocomplain -type d "$Ancien/*"] { if {[info exists DejaVu($Rep)]} { continue } lappend LesAutres $Autre } set LesGardes [MorceauxChoisis $LesAutres] set LesPABs {} foreach Rep $LesGardes { Espionne $Rep if {[info exists DejaVu($Rep)]} { continue } set Tail [file tail $Rep] set NewRep "$Nouveau/$Tail" if { ! [file exists $NewRep]} { file mkdir $NewRep } set OnAttend 1 if {$ListeDesAnciens!={}} { set OnAttend 0 } foreach Fic [glob -nocomplain -type f "$Rep/*"] { set Tail [file tail $Fic] if {$ListeDesAnciens!={} && [lsearch $ListeDesAnciens $Tail]<0} { continue } if {$Premier!="" && $OnAttend && $Tail < $Premier} { continue } set OnAttend 0 if {$Dernier!="" && $Tail > $Dernier} { break } set NewFic "$NewRep/$Tail" if {$Keep && [file exists $NewFic]} { continue } Espionne "file copy -force $Fic $NewFic" file copy -force $Fic $NewFic lappend LesPABs $Tail } foreach Lien [glob -nocomplain -type l "$Rep/*"] { set Tail [file tail $Lien] set NewLien "$NewRep/$Tail" if {$Keep && [file exists $NewLien]} { continue } set Cible [file readlink $Lien] exec ln -sf $Cible $NewLien } } set LesPABS [lsort -unique $LesPABs] set LesBornes [AdnFictifPourCollection $LesPABS "prottfa" 1 "GetBornesDesPABs"] set FichierBornes [SauveLesLignes $LesBornes dans "$Nouveau/fiches/bornesdespabs"] FaireLire "Now You can \nsetgscoperr [file tail $Nouveau]\n and \n gscope" return $FichierBornes } proc PetitsCalculsSurFichierJumeauxLocCC {} { global RepertoireDuGenome set FichierDesJumeaux "$RepertoireDuGenome/fiches/jumeaux_LocChroContig" set LesLignes [LesLignesDuFichier $FichierDesJumeaux] set NbLignes [llength $LesLignes] set NbLignesSansLaDerniere [expr $NbLignes-1] Espionne "nb of lines without the last one: $NbLignesSansLaDerniere" set NbMots 0 set nl 0 foreach Ligne [LesLignesDuFichier $FichierDesJumeaux] { incr nl if {$nl!= $NbLignes} { set LesElements [split $Ligne " "] set NbElements [llength $LesElements] set NbMots [expr $NbMots + $NbElements] } else { set LesElementsDeLaDerniereLigne [split $Ligne " " ] set NbElementsSurLaDerniereLigne [llength $LesElementsDeLaDerniereLigne] Espionne "nb of elements in the last line (NoLoc + TotallyMasked): $NbElementsSurLaDerniereLigne" } } Espionne "nb of words: $NbMots" set NbClonesEnDouble [expr $NbMots -$NbLignesSansLaDerniere] Espionne "nb of identical clones: $NbMots -$NbLignesSansLaDerniere = $NbClonesEnDouble" set n 0 foreach Nom [ListeDesPABs] { incr n } Espionne "nb PABs: $n" set NbSequencesUniques [expr $n - $NbClonesEnDouble] Espionne "nb of unique sequences: $n - $NbClonesEnDouble = $NbSequencesUniques" set NbSequencesUniquesEtValides [expr $NbSequencesUniques - $NbElementsSurLaDerniereLigne] return "nb of unique and valid sequences : $n - ($NbClonesEnDouble + $NbElementsSurLaDerniereLigne) = $NbSequencesUniquesEtValides" } proc Pfalciparum {} { set Dir "/genomics/link/Pfalciparum" set Pep "$Dir/DuTigr/PFA1.pep" set Prefixe "PF" set LesBornes {} set LeTFA {} if {[FileAbsent "$Dir/prottfa"]} { file mkdir "$Dir/prottfa" } if {[FileAbsent "$Dir/fiches"]} { file mkdir "$Dir/fiches" } set Deb 100 set Fin [expr $Deb+300] set Sens "F" foreach Ligne [LesLignesDuFichier $Pep] { if {[regexp ">" $Ligne]} { if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/prottfa/$Nom" } set LesMots [split $Ligne "|"] ScanLaListe $LesMots A T TT D O C X Y set O "Plasmodium falciparum" set A [string trim $A "> "] regsub "_" $T "" N regsub "$Prefixe" $N "" N set Nom "$Prefixe$N" set Entete ">$Nom $O $D $C $X $A" Espionne $Entete set LeTFA [list $Entete] lappend LesBornes ">$Nom $Deb $Fin $Sens" incr Deb 390 set Fin [expr $Deb+300] continue } lappend LeTFA $Ligne } if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/prottfa/$Nom" } return [SauveLesLignes $LesBornes dans "$Dir/fiches/bornesdespabs"] } proc PfamDansGroupe {Lg id d f} { global DS TabSF SDG foreach g $Lg { foreach ns [set SDG($g)] { set Lv [array names TabSF "${ns},PFAM*"] if {$Lv == {} } {continue} foreach v $Lv { foreach e [set TabSF($v)] { DecortiqueUneFeature $e x y q m w if {[regexp "$id" $w]} { return 1 } } } } } return 0 } proc PfamDansGroupe_AEffacer {g id d f} { global DS TabSF SDG foreach ns [set SDG($g)] { set Lv [array names TabSF "${ns},PFAM*"] if {$Lv == {} } {continue} foreach v $Lv { foreach e [set TabSF($v)] { DecortiqueUneFeature $e x y q m w if {[regexp "$id" $w]} { return 1 } } } } return 0 } proc PfamDesFrom1500 {} { set RepertoireMouse "/genomics/link/SpliRetMouse/macsimXml" set RepertoireRat "/genomics/link/SpliRetRat/macsimXml" set LesRepertoires [list $RepertoireMouse $RepertoireRat] #avant faisait sur les .reduit foreach Repertoire $LesRepertoires { foreach File [glob -nocomplain "$Repertoire/*.orgord"] { set LesNames [NamesFromMacsims $File] foreach Name $LesNames { set LesPfamJust [FromMacsims $File $Name "JustPfam"] foreach PfamJust $LesPfamJust { set Pfam [lindex [split $PfamJust " "] 0] if {[regexp "_" $Pfam]} { set Pfam [lindex [split $Pfam "_"] 1] } lappend LesPfam $Pfam } } } } set LesPfam [ListeSansDoublon $LesPfam] set longPfam [llength $LesPfam] foreach Pfam $LesPfam { set Commande "getz \"\\\[pfama-acc:$Pfam\\\]\" \-vf des" set Result [eval exec $Commande] set Ligne "$Pfam\t$Result" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "/genomics/link/SpliRetMouse/BindingPfam/BindingPfamFromDes/PfamDesFrom1500.txt" EspionneL "$longPfam" #964 Pfam en tout dans mes 1500 sequences (g17/SpliRetMouse2008 + g17/SpliRetRat2008) #1123 Pfam dans les seq des 1585 clusters (g20/SpliRetMouse2009 + g20/SpliRetRat2009) #3674 Pfam dans les seq des 15765 clusters (g23/SpliRetMouse + g23/SpliRetRat) } proc PfamIdent {} { set rep [file join /home moumou work moumou BenchPfam] set Lpci [list 0. 30. 30. 40. 40. 50. 50. 60. 60. 100.] #set Lpci [list 0. 100.] set Llp [LesLignesDuFichier Summary_Pfam2.txt] foreach {pcm pcx} $Lpci { set Ln [list] foreach l $Llp { regsub -all { +} [string trim $l] " " l lassign [split $l " "] n ns lg gx gm pc sd if {$pc >= $pcm && $pc < $pcx} { lappend Ln [file join $rep $n] } } puts "\n\n" puts "#################################" puts "## IDENTITE $pcm % - $pcx % #" puts "#################################" puts "" TestPosPfam [join $Ln ,] } exit } proc PfamScanWebService {args} { set Lquery [list] set YaFormat 0 ; set YaEmail 0 foreach {k v} $args { switch $k { "-sequence" { lappend Lquery sequence "$v" } "-format" { lappend Lquery format $v set YaFormat 1 } } } if {! $YaFormat} { lappend Lquery format json } if {! $YaEmail} { lappend Lquery email "luc.moulinier@laposte.net" } set query [::http::formatQuery {*}$Lquery] set baseUrl "http://www.ebi.ac.uk/Tools/services/rest/pfamscan/" return [EBIWebService $baseUrl $query] } proc PfamWebService {id} { set url "http://pfam.xfam.org/protein?entry=$id&output=xml" set ok [HttpCopy $url result] if {$ok} { return "[join $res \n]" } else { return "" } } proc PfamtoGO {Pfam} { set FichierPfamtoGO "/home/perrodou/pfam2go" set JaiPFAM 0 foreach Ligne [LesLignesDuFichier $FichierPfamtoGO] { scan $Ligne "%s" PfamLu regsub "Pfam:" $PfamLu "" Pfamcourt if {$Pfamcourt == $Pfam} { set Suite [StringSuivant "> " dans $Ligne] set Reste [split $Suite ";"] ScanLaListe $Reste DefinitionGO GO set DefinitionGO [string trim $DefinitionGO] set GO [string trim $GO] lappend LaListe "$GO $DefinitionGO" set JaiPFAM 1 } } if {! $JaiPFAM} {return -1} set LaListe [join $LaListe] return $LaListe } proc Phix {args} { catch {[eval exec phix $args]} Message set Retour $Message regsub {\n\-*\nNe pas tenir compte .*} $Retour "" Retour return $Retour } proc Photo {} { set K [GscopeBoard coucou] set lePostscript [CanvaEnPostscript $K "Visible" "RetourOrdres"] Espionne $lePostscript image create photo laPhoto -data $lePostscript -format postscript laPhoto write toto.gif -format gif exit } proc PhpFromTcl {} { set LesGenesNames [ exec phix -LOGIN ripp -FEDINSTANCE gx GxFun::SignalIntensity "" 0 1 301 "" "T" "" "" "GeneAsText" "limit 10" 2>&1 /dev/null] # AsText de GeneAsText: SignalIntensity rend par défaut un array, AsText permet de transformer array en texte set LesGenesNames [ exec tcsh -c "pgx GxFun::SignalIntensity \"\" 0 1 301 \"\" T \"\" \"\" GeneAsText \"limit 10\"" 2>&1 /dev/null] # tcsh permet de faire le source de pgx # 2>&1 /dev/null pour eliminer le message d'erreur qu'on a toujours quand on execute du php en ligne de commande set LesGenesNames [ContenuDuFichier "http://gx.igbmc.fr/gx/phpRR/Execute.php?GxFun::SignalIntensity&&0&1&301&&T&&&GeneAsText&limit%2010&GetTextFromExecute"] # GetTextFromExecute se met n importe ou dans la liste d'argument (le prog l'enleve de la liste apres) permet d'enlever les balises pour web set LesGenesNames [WebService "Gx" Execute querytext "GxFun::SignalIntensity&&0&1&301&&T&&&GeneAsText&limit 10"] Espionne "$LesGenesNames" } proc PhpSerialize {aT {TypeK ""} {TypeV ""}} { upvar $aT T return [SerialFromArray T $TypeK $TypeV] } proc Phrap {FichierAvecESTFormatTFA {Options ""}} { if {![file exists $FichierAvecESTFormatTFA]} { Espionne "$FichierAvecESTFormatTFA doesn't exist" return "" } set Commande "exec /gcg/extensions/bin/phrap $FichierAvecESTFormatTFA $Options >& [RepertoireDeTravail]/phrap.log" eval $Commande set LesFichiersCrees [split [glob -nocomplain "$FichierAvecESTFormatTFA*"] " "] foreach NewFile $LesFichiersCrees { if {$NewFile == $FichierAvecESTFormatTFA} { continue } else { Espionne "PHRAP created $NewFile" } } return "End of PHRAP" } proc PhraseConsensus {LesPhrases} { set VoirDetails 1 set LesPaires {} set LesMots {} set nDef 0 foreach Def $LesPhrases { incr nDef set MotPrec "" if {$VoirDetails} {Espionne $Def} foreach Mot [split $Def " "] { if {![info exists Tab($Mot,nMaxParPhrase)]} { lappend LesMots $Mot set Tab($Mot,nMaxParPhrase) 0 } if {![info exists Tab($nDef,$Mot,nMaxParPhrase)]} {set Tab($nDef,$Mot,nMaxParPhrase) 0} incr Tab($nDef,$Mot,nMaxParPhrase) if {[set Tab($Mot,nMaxParPhrase)] < [set Tab($nDef,$Mot,nMaxParPhrase)]} {set Tab($Mot,nMaxParPhrase) [set Tab($nDef,$Mot,nMaxParPhrase)]} set Tab($Mot,LesMotsSuivants) {} if {$MotPrec == ""} {set MotPrec $Mot;continue} if {![info exists Tab($MotPrec,$Mot,n)]} { set Tab($MotPrec,$Mot,n) 0 lappend Tab($MotPrec,LesMotsSuivants) $Mot lappend LesPaires [list $MotPrec $Mot] } incr Tab($MotPrec,$Mot,n) set MotPrec $Mot } } set LesMotsPossiblesDansLaDef {} foreach Mot $LesMots { set n [set Tab($Mot,nMaxParPhrase)] if {$VoirDetails} { Espionne "$Mot $n" foreach Mot2 $LesMots { if {[info exists Tab($Mot,$Mot2,n)]} {Espionne "$Mot $Mot2 [set Tab($Mot,$Mot2,n)]"} } } if {$n == 0} {continue} for {set i 1} {$i <= $n} {incr i} {lappend LesMotsPossiblesDansLaDef $Mot} } set LesMeilleuresPhrases {} set BestScore -1e300 foreach LaCombi [ToutesLesCombinaisons $LesMotsPossiblesDansLaDef Tab] { set MotPrec "" set Score 0 foreach Mot $LaCombi { if {$MotPrec == ""} {set MotPrec $Mot;continue} set Score [expr $Score + [set Tab($MotPrec,$Mot,n)]] set MotPrec $Mot } if {$BestScore == $Score} { lappend LesMeilleuresPhrases [join $LaCombi " "] continue } if {$BestScore < $Score} { set LesMeilleuresPhrases [list [join $LaCombi " "]] set BestScore $Score continue } } set MeilleurePhrase "" set BestScore 1e300 foreach PhraseA $LesMeilleuresPhrases { if {$VoirDetails} {Espionne $PhraseA} set Score 0 foreach PhraseB $LesPhrases {set Score [expr $Score + [DistanceEntreDeuxPhrases $PhraseA $PhraseB]]} if {$BestScore < $Score} {continue} set BestScore $Score set MeilleurePhrase $PhraseA } return $MeilleurePhrase } proc PhylAr {{Qui ""} {Quoi ""}} { JeMeSignale global PhylAr if {[info exists PhylAr($Qui,$Quoi)]} { return $PhylAr($Qui,$Quoi) } if {[info exists PhylAr("EstCharge")]} { return "" } set PhylAr("EstCharge") 1 set FichierMemo "/genomics/link/OI/fiches/phylar.txt" if {[regexp -nocase "^ReDo_" $Qui]} { if {[file exists $FichierMemo]} { file delete $FichierMemo } regsub -nocase "^ReDo_" $Qui "" Qui unset PhylAr return [PhylAr $Qui $Quoi] } if {[file exists $FichierMemo]} { array set PhylAr [ContenuDuFichier $FichierMemo] return [PhylAr $Qui $Quoi] } OiDomain Archaea set LesPhyOX [ArClade ListOf AllOX] set LesPhyOS [ArClade ListOf AllName] foreach OX [OiCode ListOf OX] { set OS [OiCode $OX OS] lappend PhylAr(ListOf,OX) $OX lappend PhylAr(ListOf,OS) $OS set PasTrouve 1 foreach PhyOX $LesPhyOX { set PhyOS [ArClade $PhyOX Name] set PhylAr($PhyOX,PhyOX) $PhyOX set PhylAr($PhyOX,PhyOS) $PhyOS set PhylAr($PhyOS,PhyOX) $PhyOX set PhylAr($PhyOS,PhyOS) $PhyOS if {[JeSuisTonAncetre $PhyOX $OX]} { set PhylAr($OX,PhyOX) $PhyOX set PhylAr($OX,PhyOS) $PhyOS set PhylAr($OS,PhyOX) $PhyOX set PhylAr($OS,PhyOS) $PhyOS lappend PhylAr($PhyOX,ListOfOX) $OX lappend PhylAr($PhyOX,ListOfOS) $OS lappend PhylAr($PhyOS,ListOfOX) $OX lappend PhylAr($PhyOS,ListOfOS) $OS set PasTrouve 0 break } } if {$PasTrouve} { FaireLire "Impossible de caser\n$OX $OS"} } set LesPhyOXNonVides {} set LesPhyOYNonVides {} foreach PhyOX $LesPhyOX PhyOS $LesPhyOS { if { ! [info exists PhylAr($PhyOX,ListOfOX)]} { continue } lappend LesPhyOXNonVides $PhyOX lappend LesPhyOSNonVides $PhyOS } set PhylAr(ListOf,PhyOX) $LesPhyOXNonVides set PhylAr(ListOf,PhyOS) $LesPhyOSNonVides Sauve [array get PhylAr] dans $FichierMemo return [PhylAr $Qui $Quoi] } proc PhyloBreak {{Nom LaListeMerci}} { global RepertoireDuGenome global PhyloBreak PhyloBreakEstCharge if {[info exists PhyloBreak($Nom)]} { return [set PhyloBreak($Nom)] } if { ! [info exists PhyloBreakEstCharge]} { set FichierPhyloBreak "$RepertoireDuGenome/fiches/phylobreak" if { ! [file exists $FichierPhyloBreak]} { return "NotAvailable" } foreach Ligne [LesLignesDuFichier $FichierPhyloBreak] { scan $Ligne "%s" NomLu set PhyloBreak($NomLu) 1 } set PhyloBreakEstCharge "EstCharge" } if {$Nom=="LaListeMerci"} { return [array names PhyloBreak] } if {[info exists PhyloBreak($Nom)]} { return [set PhyloBreak($Nom)] } else { return 0 } } proc PhyloDistribution {{Qui ""} {Quoi ""} {GetWhat ""}} { global PhyloDistribution if {$Qui ==""} { set Qui "ListOf" } if {$Quoi=="" && $Qui!="ListOf"} { set Quoi "Name" } if {$Quoi=="" && $Qui=="ListOf"} { set Quoi "CombiCount" } if {$Qui=="ChooseCombi"} { set Qui [ChoixParmi [PhyloDistribution ListOf Combi]] } if {$GetWhat==""} { set GetWhat "GetData" } if {[info exists PhyloDistribution($Qui,$Quoi)]} { if {$GetWhat=="Show"} { return [AfficheVariable [join $PhyloDistribution($Qui,$Quoi) "\n"] "" "PhyloDistribution_${Qui}_${Quoi}"] } return $PhyloDistribution($Qui,$Quoi) } if {[info exists PhyloDistribution("EstCharge")]} { return "" } set PhyloDistribution("EstCharge") 1 set UseFiles 1 if {$Quoi=="Reset"} { set UseFiles 0 set Quoi "NameCount" } set LesCombis [list ScM ScP TbM TbP EhM EhP ScMTbM TbMEhM EhMScM ScMTbP TbMEhP EhMScP ScPTbM TbPEhM EhPScM ScPTbP TbPEhP EhPScP ScMTbMEhM ScMTbMEhP ScMTbPEhM ScMTbPEhP ScPTbMEhM ScPTbMEhP ScPTbPEhM ScPTbPEhP ] set PhyloDistribution(ListOf,Combi) $LesCombis foreach Combi $LesCombis { if {[file exists "[Fiches]/$Combi"] && ($UseFiles || [string length $Combi]==3)} { set ListeName [LesLignesDuFichier "[Fiches]/$Combi"] set $Combi $ListeName } else { set A [string range $Combi 0 2] set B [string range $Combi 3 end] set ListeName [ListsIntersection [set $A] [set $B]] set $Combi $ListeName SauveLesLignes $ListeName dans "[Fiches]/$Combi" } set PhyloDistribution($Combi,Name) $ListeName set PhyloDistribution($Combi,Count) [llength $ListeName] lappend PhyloDistribution(ListOf,CombiCount) "$Combi [llength $ListeName]" } return [PhyloDistribution $Qui $Quoi $GetWhat] } proc PhyloFolle {Nom} { global RepertoireDuGenome global PhylosFolles if {[info exists PhylosFolles]} { if {[info exists PhylosFolles($Nom)]} { return [set PhylosFolles($Nom)] } else { return -1 } } set FichierPhylosFolles "$RepertoireDuGenome/fiches/phylosfolles" if {[file exists $FichierPhylosFolles]} { foreach Ligne [LesLignesDuFichier $FichierPhylosFolles] { scan $Ligne "%s %s" Nom Folie set PhylosFolles($Nom) $Folie } return [PhyloFolle $Nom] } set ListeOrgas [Phylon $Nom] if {[llength $ListeOrgas] == 0} { return -1 } foreach Orga $ListeOrgas { if {$Orga == "xxxx" || [PyroLike $Orga]} { continue } if {[ArkaeaLike $Orga]} { return 0 } return 1 } return 0 } proc PhyloRank {{OrgaDeReference ""} {Extension ""}} { global RepertoireDuGenome global NotreOS if {$OrgaDeReference==""} { FaireLire "Please give me the reference organism\n (to whom the distances will be calculate)." set Orga [Glossaire [Entre $NotreOS] Court] } else { set Orga [Glossaire $OrgaDeReference Court] } if {$Orga==""} { return "" } if {$Extension==""} { set Extension ".$Orga" } set FichierPIClustalw "$RepertoireDuGenome/fiches/piclustalw$Extension" Wup "Je pose la question maintenant, pour plus tard ..." set QuestionDejaPoseeEtOui 0 if {[file exists $FichierPIClustalw] && [OuiOuNon "Do I replace $FichierPIClustalw" 0] || ! [file exists $FichierPIClustalw]} { set QuestionDejaPoseeEtOui 1 } set FichierDistancesPhylo "$RepertoireDuGenome/fiches/distancesphylo$Extension" if { ! [file exists $FichierDistancesPhylo] || ! [OuiOuNon "The file distancesphylo already exists. Do I use it ?"]} { set FichierDistancesPhylo [CreeDistancesPhyloAvecLesMSFs $Orga $Extension] } if { ! [file exists $FichierDistancesPhylo]} { FaireLire "Sorry, $FichierDistancesPhylo does'nt exist." } if {$QuestionDejaPoseeEtOui || ! [file exists $FichierPIClustalw]} { CreeLesFichiersPIClustalwEtPSClustalw $Orga $Extension } CreeLesTables "distancesphylo" $Orga $Extension } proc PhyloRankDuTamis {{Tam ""}} { global NotreOrga CreeLaTableDuTamis $Tam "distancesphylo" "$NotreOrga" ".$NotreOrga" } proc PhyloTree2LesSpecies {PhyloTree} { regsub -all "\\(" $PhyloTree "" PhyloTree regsub -all "\\)" $PhyloTree "" PhyloTree #puts "$PhyloTree" set LesSpecies [split $PhyloTree " "] return $LesSpecies } proc PhylogenicBarcode {{UniprotId ""}} { set Host [LbgiHost] set Php "http://$Host/barcode/server.php" set Url "$Php?stype=update_barcode&colorset=global&labels=true&values=false&grid=true" append Url "&uniprotid=$UniprotId" return ContenuDuFichier $Url } proc Phylon {Nom} { global Phylons if { ! [info exists Phylons] } { ChargePhylons } if {[info exists Phylons($Nom)]} { return [set Phylons($Nom)] } return {} } proc PhylonOrgaEtDistance {Nom} { global Phylons global PhylonsOrgaEtDistance if { ! [info exists Phylons] } { ChargePhylons } if {[info exists PhylonsOrgaEtDistance($Nom)]} { return [set PhylonsOrgaEtDistance($Nom)] } return {} } proc Phylum {Classe} { set Phylum "Unknown" set Phylum [string trim [string toupper $Classe]] if {[regexp "^ARCHAEA" $Phylum]} {return "ARCHAEA"} if {[regexp "^BACTERIA" $Phylum]} {return "BACTERIA"} if {[regexp "^EUKARYOTA" $Phylum]} {return "EUKARYOTA"} return "PhylumUnknown $Classe" } proc PhylumClustering {aL aT} { global TDesPhylum upvar $aL LGP $aT TGP RetourneTableau TDesPhylum Ttmp set Ltmp [array names Ttmp] if {[llength $Ltmp] == 1} { FaireLire "Life Domain information not available !" return } array set TGP [list] array set TGP [array get Ttmp] set LGP $Ltmp set TGP(GroupeToutLeMonde) [list] foreach g $LGP { set TGP(GroupeToutLeMonde) [concat $TGP(GroupeToutLeMonde) $TGP($g)] } set LGP [linsert $LGP 0 "GroupeToutLeMonde"] return } proc PhylumDuGenome {Genome {Quoi Phylum}} { global PhylumDuGenome global RepertoireDuGenome set FichierPhylumDuGenome "$RepertoireDuGenome/fiches/phylumdugenome" Wup "returns B A E V X or the whole class if Quoi is OC" if {[info exists PhylumDuGenome($Genome,$Quoi)]} { return [set PhylumDuGenome($Genome,$Quoi)] } if {[file exists $FichierPhylumDuGenome]} { array set PhylumDuGenome [LesLignesDuFichier $FichierPhylumDuGenome] } else { foreach G [LesGenomesComplets] { set OS [Glossaire $G Complet] regsub " " $OS "_" Genre_espece lappend LesGenre_espece $Genre_espece } set Genres_especes [join $LesGenre_espece "|"] set Retour [QuestionDeScience QuidSeq "QuidOCsOfOSs $Genres_especes"] foreach Ligne [split $Retour "\n"] { set OC "Class unknown" ScanLaListe [split $Ligne ":"] OS OC set PhylumDuGenome($OS,OC) $OC set BAEV [PhylumDuOC $OC] set PhylumDuGenome($OS,Phylum) $BAEV } if {[OuiOuNon "Do I save PhylumDuGenome in $FichierPhylumDuGenome ?"]} { SauveLesLignes [array get PhylumDuGenome] dans $FichierPhylumDuGenome } } if {[info exists PhylumDuGenome($Genome,$Quoi)]} { return [set PhylumDuGenome($Genome,$Quoi)] } if {[file exists $FichierPhylumDuGenome]} { set OC "Inconnu inconnu" } else { Wup "Next lines is for an organism outsite LesGenomesComplets" regsub " " $Genome "_" G_E set OC [QuestionDeScience QuidSeq "QuidOCOfOS $G_E"] } if {$Quoi=="OC"} { return $OC } else { return [PhylumDuOC $OC] } } proc PhylumDuOC {OC} { if {[regexp -nocase "^Bacteria" $OC]} { return "B" } if {[regexp -nocase "^Archaea" $OC]} { return "A" } if {[regexp -nocase "^Eukaryota" $OC]} { return "E" } if {[regexp -nocase "^Virus" $OC]} { return "V" } return "X" } proc PhylumDuOrganisme {Organisme {Espece ""}} { if {$Espece!=""} { set Organisme "$Organisme $Espece" } set OS [Glossaire $Organisme Complet] if {$OS!=""} { # set OC [QuestionDeScience QuidSeq "QuidOCOfOS $OS"] set OC [OCduOS $OS] } else { set OS "Inconnu inconnu" set OC "Class unknown" } return [PhylumDuOC $OC] } proc PhylumsOrthologues {{Nom LaListeMerci}} { global RepertoireDuGenome global PhylumsOrthologues set FichierPhylumsOrthologues "$RepertoireDuGenome/fiches/phylumsorthologues" if {[info exists PhylumsOrthologues($Nom)]} { return [set PhylumsOrthologues($Nom)] } if {[info exists PhylumsOrthologues("EstCharge")]} { if {[info exists PhylumsOrthologues($Nom)]} { return [set PhylumsOrthologues($Nom)] } if {$Nom=="LaListeMerci"} { return [LesLignesDuFichier $FichierPhylumsOrthologues] } return "" } if {[OnTraiteUneCollection] && [ExtraitInfo [lindex [ListeDesPABs] 0] "BAE"]!=""} { foreach NomLu [ListeDesPABs] { set BAE [ExtraitInfo $NomLu "BAE"] set PhylumsOrthologues($NomLu) $BAE lappend PhylumsOrthologues(LaListeMerci) $BAE } set PhylumsOrthologues("EstCharge") 1 if {[info exists PhylumsOrthologues($Nom)]} { return [set PhylumsOrthologues($Nom)] } if {$Nom=="LaListeMerci"} { return [set PhylumsOrthologues(LaListeMerci)] } return "" } Wup "Now we will load FichierPhylumsOrthologues" if {[file exists $FichierPhylumsOrthologues]} { foreach Ligne [LesLignesDuFichier $FichierPhylumsOrthologues] { scan $Ligne "%s" NomLu regsub "^$NomLu " $Ligne "" Ligne set Ligne [string trim $Ligne] set PhylumsOrthologues($NomLu) $Ligne } set PhylumsOrthologues("EstCharge") 1 return [PhylumsOrthologues $Nom] } Wup "Now We will create FichierPhylumsOrthologues" set FichierOoMSF "$RepertoireDuGenome/fiches/oomsf" if { ! [file exists $FichierOoMSF]} { return "" } foreach OS [LesGenomesDansLeBonOrdre] OC [LesGenomesDansLeBonOrdre OC] { set BAE($OS) [string index $OC 0] } foreach Ligne [LesLignesDuFichier $FichierOoMSF] { set Ligne [string trim $Ligne] scan $Ligne "%s" Nom Wup "C means Class unknown" foreach P {B A E C} S {0.5 0.5 0.5 0.5} { set PhylumTouche($P) 0 set PhylumTotal($P) 0 set SeuilPhylumTouche($P) $S } foreach Oo [lrange [split $Ligne " "] 1 end] { set Orga [string tolower $Oo] set Complet [Glossaire $Orga Complet] set P "" if {[info exists BAE($Complet)]} { set P [set BAE($Complet)] } if {$P==""} { set P "C" } incr PhylumTotal($P) if {[regexp {[A-Z]} $Oo]} { incr PhylumTouche($P) } set T [Maxi [set PhylumTotal($P)] 1] set PourcentagePhylumTouche($P) [expr 1.0*[set PhylumTouche($P)]/$T] } set TexteBAE "" set Resume {} foreach P {B A E} { if {[set PourcentagePhylumTouche($P)] >= [set SeuilPhylumTouche($P)]} { append TexteBAE [string toupper $P] } else { append TexteBAE [string tolower $P] } lappend Resume "[set PhylumTouche($P)] [set PhylumTotal($P)]" } set SonBAE "$Nom $TexteBAE [join $Resume " "]" Espionne $SonBAE lappend LesBAEs $SonBAE } SauveLesLignes $LesBAEs dans $FichierPhylumsOrthologues return [PhylumsOrthologues $Nom] } proc Pi {} { return [expr {acos(-1.)}] } proc PiS16 {} { return [expr {acos(-1.)/16.}] } proc PiS2 {} { return [expr {acos(-1.)/2.}] } proc PiS4 {} { return [expr {acos(-1.)/4.}] } proc PiS8 {} { return [expr {acos(-1.)/8.}] } proc PickAtom {x y win} { set hits [DonneAtomePique $x $y] set ::BQx $x set ::BQy $y if {! $hits} {return} processHits $hits set ::cx $x set ::cy $y $win postredisplay return } proc PickSeq {Li} { global EFeat LNOrdali for {set i 0} {$i < [llength $LNOrdali]} {incr i} { set n [lindex $LNOrdali $i] if {$n eq ""} {continue} if {$i ni $Li} { set EFeat(LMSeq,$n) 0 $EFeat(Listbox) itemconfigure $i -background white -foreground black } else { set EFeat(LMSeq,$n) 1 $EFeat(Listbox) itemconfigure $i -background black -foreground white } } TracageFeatureSummary return } proc PipeAlign {FichierTFA {Source TFA} {FileIn ""} {ExpectMax 100} {NbSubjectMax 2000} {NbProtMax 200} {NbPDBMax 30} {Banque protall}} { #Source -> TFA #Source -> BLASTP #Source -> BALLAST (needs .anchors too) #Source -> MSF #Source -> MSFFinal if {[string equal -nocase $Source "TFA"]} {set FileIn $FichierTFA} if {![file exists $FileIn] || ![file exists $FichierTFA]} {return} set Seq [string toupper [QueLaSequenceDuFichierTFA $FichierTFA]] set TFA [SequenceFormatTFA $Seq "QUERY_PROTEIN"] set FaireLeBlast 0 set FaireLeBallast 0 set FaireLeMSF 0 set FaireLeRascal 0 set FaireLeClust 0 if {[string equal -nocase $Source "TFA" ]} { set FaireLeBlast 1;set FaireLeBallast 1;set FaireLeMSF 1;set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "BLASTP" ]} { set FichierBlast $FileIn set FaireLeBallast 1;set FaireLeMSF 1;set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "BALLAST"]} { set FichierBallast $FileIn set FaireLeMSF 1;set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "MSF" ]} { set FichierMSFDB $FileIn set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "MSFFinal"]} { set FichierMSF $FileIn set FaireLeClust 1 } #BLAST# if {$FaireLeBlast} { Espionne "$FichierTFA -> PipeBlast" set FichierBlast "$FichierTFA.blastp" PipeBlast $FichierTFA $Banque $FichierBlast P $NbSubjectMax $ExpectMax T 4 if {![file exists $FichierBlast]} {return} } #BALLAST (Ballast - TFAs)# if {$FaireLeBallast} { Espionne "$FichierTFA -> PipeBallast" set FichierBallast "$FichierTFA.ballast" PipeBallast $FichierBlast $FichierBallast set FileAnchors "$FichierTFA.ballast.anchors" set FichierTFAs "$FichierTFA.tfas" if { [file exists $FileAnchors]} { CorrigeFichierAnchors $FileAnchors Espionne "TFAs from Ballast" Sauve [join [linsert [LesTFAsDesHitsDuBallast $FileAnchors $NbProtMax $NbPDBMax 0] 0 $TFA] "\n"] dans $FichierTFAs } elseif {[file exists $FichierBlast]} { Espionne "TFAs from BlastP" Sauve [join [linsert [LesTFAsDesHitsDuBlastP $FichierBlast $NbProtMax $NbPDBMax 0] 0 $TFA] "\n"] dans $FichierTFAs } if {![file exists $FichierTFAs]} {return} } #MSF (DbClustal - Rascal - NorMD - Selection) if {$FaireLeMSF} { Espionne "$FichierTFA -> PipeDbClustal" set FichierMSFDB "$FichierTFA.msfdbclustal" PipeDbClustal $FichierTFAs $FileAnchors $FichierMSFDB if {![file exists $FichierMSFDB]} {return} } if {$FaireLeRascal} { Espionne "$FichierTFA -> PipeRascal" set FichierMSFRascal "$FichierTFA.msfrascal" PipeRascal $FichierMSFDB $FichierMSFRascal if {![file exists $FichierMSFRascal]} {return} Espionne "$FichierTFA -> PipeNorMD" set FichierMSF "$FichierTFA.msf" if {[PipeNorMD $FichierMSFDB] <= [PipeNorMD $FichierMSFRascal]} { File copy -force $FichierMSFRascal $FichierMSF } else { File copy -force $FichierMSFDB $FichierMSF } } #Clustering (Secator or DPC) if {$FaireLeClust} { Espionne "$FichierTFA -> PipeClustering" set FichierClust "$FichierTFA.clust" PipeClustering $FichierMSF $FichierClust if {![file exists $FichierClust]} {return} } return } proc PipeAlignPourUneSequenceAvecParametres {Nom {NombreSequences ""} {Expect ""} {FiltreBallast ""} {Cluspack ""} {Macsims ""} {AvecOuSansOrganismeEtudie ""}} { if {$NombreSequences == ""} {set NombreSequences 500} if {$Expect == ""} {set Expect 0.001} if {$FiltreBallast == ""} {set FiltreBallast 0} if {$Cluspack == ""} {set Cluspack 0} if {$Macsims == ""} {set Macsims 0} if {$NombreSequences > 500} {error "NombreSequences doit etre inferieur a 500"} # Charge les options par defaut LesDefautsDuPipe # Parametre les options LesDefautsDuPipe "File,file" $Nom LesDefautsDuPipe "Filter,maxseq" $NombreSequences LesDefautsDuPipe "Filter,expect" $Expect LesDefautsDuPipe "Filter,add" $FiltreBallast LesDefautsDuPipe "Etapes,cluspack" $Cluspack LesDefautsDuPipe "Etapes,macsims" $Macsims LesDefautsDuPipe "Blast,v" $NombreSequences LesDefautsDuPipe "Blast,b" $NombreSequences # Lance le pipe silencieusement global EspionneNon if {[info exists EspionneNon]} {set ancienEspionneNon $EspionneNon} else {set ancienEspionneNon 0} set EspionneNon 1 if {[catch {PipeGrid} Message]} { set EspionneNon $ancienEspionneNon Espionne "Error from pipealign. Message follows \n$Message" } set EspionneNon $ancienEspionneNon MacsimsPourAnnotation $Nom $AvecOuSansOrganismeEtudie RecopieLesFichiersDuPipe $Nom } proc PipeAlign_CHALMEL {FichierTFA {Source TFA} {FileIn ""} {ExpectMax 100} {NbSubjectMax 2000} {NbProtMax 200} {NbPDBMax 30} {Banque protall}} { #Source -> TFA #Source -> BLASTP #Source -> BALLAST (needs .anchors too) #Source -> MSF #Source -> MSFFinal if {[string equal -nocase $Source "TFA"]} {set FileIn $FichierTFA} if {![file exists $FileIn] || ![file exists $FichierTFA]} {return} set Seq [string toupper [QueLaSequenceDuFichierTFA $FichierTFA]] set TFA [SequenceFormatTFA $Seq "QUERY_PROTEIN"] set FaireLeBlast 0 set FaireLeBallast 0 set FaireLeMSF 0 set FaireLeRascal 0 set FaireLeClust 0 if {[string equal -nocase $Source "TFA" ]} { set FaireLeBlast 1;set FaireLeBallast 1;set FaireLeMSF 1;set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "BLASTP" ]} { set FichierBlast $FileIn set FaireLeBallast 1;set FaireLeMSF 1;set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "BALLAST"]} { set FichierBallast $FileIn set FaireLeMSF 1;set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "MSF" ]} { set FichierMSFDB $FileIn set FaireLeRascal 1;set FaireLeClust 1 } if {[string equal -nocase $Source "MSFFinal"]} { set FichierMSF $FileIn set FaireLeClust 1 } #BLAST# if {$FaireLeBlast} { Espionne "$FichierTFA -> PipeBlast" set FichierBlast "$FichierTFA.blastp" PipeBlast $FichierTFA $Banque $FichierBlast P $NbSubjectMax $ExpectMax T 4 if {![file exists $FichierBlast]} {return} } #BALLAST (Ballast - TFAs)# if {$FaireLeBallast} { Espionne "$FichierTFA -> PipeBallast" set FichierBallast "$FichierTFA.ballast" PipeBallast $FichierBlast $FichierBallast set FileAnchors "$FichierTFA.ballast.anchors" set FichierTFAs "$FichierTFA.tfas" if { [file exists $FileAnchors]} { CorrigeFichierAnchors $FileAnchors Espionne "TFAs from Ballast" Sauve [join [linsert [LesTFAsDesHitsDuBallast $FileAnchors $NbProtMax $NbPDBMax 0] 0 $TFA] "\n"] dans $FichierTFAs } elseif {[file exists $FichierBlast]} { Espionne "TFAs from BlastP" Sauve [join [linsert [LesTFAsDesHitsDuBlastP $FichierBlast $NbProtMax $NbPDBMax 0] 0 $TFA] "\n"] dans $FichierTFAs } if {![file exists $FichierTFAs]} {return} } #MSF (DbClustal - Rascal - NorMD - Selection) if {$FaireLeMSF} { Espionne "$FichierTFA -> PipeDbClustal" set FichierMSFDB "$FichierTFA.msfdbclustal" PipeDbClustal $FichierTFAs $FileAnchors $FichierMSFDB if {![file exists $FichierMSFDB]} {return} } if {$FaireLeRascal} { Espionne "$FichierTFA -> PipeRascal" set FichierMSFRascal "$FichierTFA.msfrascal" PipeRascal $FichierMSFDB $FichierMSFRascal if {![file exists $FichierMSFRascal]} {return} Espionne "$FichierTFA -> PipeNorMD" set FichierMSF "$FichierTFA.msf" if {[PipeNorMD $FichierMSFDB] <= [PipeNorMD $FichierMSFRascal]} { File copy -force $FichierMSFRascal $FichierMSF } else { File copy -force $FichierMSFDB $FichierMSF } } #Clustering (Secator or DPC) if {$FaireLeClust} { Espionne "$FichierTFA -> PipeClustering" set FichierClust "$FichierTFA.clust" PipeClustering $FichierMSF $FichierClust if {![file exists $FichierClust]} {return} } return } proc PipeBallast {FileBlast {FileOut ""} {QueryName ""}} { if {![file exists $FileBlast]} {return} if {$FileOut == ""} {set FileOut "$FileBlast.ballast"} set CommandeBallast "eval exec [ProgPathway ballast] -p $FileBlast -o $FileOut -anchors -noext" if {$QueryName != ""} {append CommandeBallast " -queryname $QueryName"} if {[catch {eval $CommandeBallast} Message]} {Espionne $Message} set FileAnchors "$FileBlast.ballast.anchors" if {[file exists $FileAnchors]} {CorrigeFichierAnchors $FileAnchors} return $FileOut } proc PipeBallast_CHALMEL {FileBlast {FileOut ""} {QueryName ""}} { if {![file exists $FileBlast]} {return} if {$FileOut == ""} {set FileOut "$FileBlast.ballast"} set CommandeBallast "eval exec [ProgPathway ballast] -p $FileBlast -o $FileOut -anchors -noext" if {$QueryName != ""} {append CommandeBallast " -queryname $QueryName"} if {[catch {eval $CommandeBallast} Message]} {Espionne $Message} set FileAnchors "$FileBlast.ballast.anchors" if {[file exists $FileAnchors]} {CorrigeFichierAnchors $FileAnchors} return $FileOut } proc PipeBlast {FileTFA Database {FileOUT ""} {NorPorXorTNorTX P} {NbSubjectInOutPut 500} {ExpectMin 10} {Filtre T} {NbProc 4}} { if {![file exists $FileTFA]} {return} if {[string equal -nocase $NorPorXorTNorTX "N"]} { set BLAST "blastn" } elseif {[string equal -nocase $NorPorXorTNorTX "P"]} { set BLAST "blastp" } elseif {[string equal -nocase $NorPorXorTNorTX "X"]} { set BLAST "blastx" } elseif {[string equal -nocase $NorPorXorTNorTX "TN"]} { set BLAST "tblastn" } elseif {[string equal -nocase $NorPorXorTNorTX "TX"]} { set BLAST "tblastx" } else { set BLAST "blastp" } if {$FileOUT == ""} {set FileOUT "$FileTFA.$BLAST"} if {![string equal -nocase $Filtre "T"]} {set Filtre "F"} set NomDeLaDatabase "" if { [file exists "/blast/$Database.nhr"] || [file exists "/blast/$Database.nal"] || [file exists "/blast/$Database.phr"] || [file exists "/blast/$Database.pal"] } { set NomDeLaDatabase "/blast/$Database" } if {[file exists "[RepBlastDBAlternatif]/$Database"]} { set NomDeLaDatabase "[RepBlastDBAlternatif]/$Database" } if { [file exists "$Database.nhr" ] || [file exists "$Database.nal" ] || [file exists "$Database.phr" ] || [file exists "$Database.pal" ] } { set NomDeLaDatabase "$Database" } if {$NomDeLaDatabase == ""} {Espionne "$NomDeLaDatabase does not exist";return} set CommandeBlast "eval exec [ProgPathway blastall] -p \$BLAST -i \$FileTFA -o \$FileOUT -d \$NomDeLaDatabase -v \$NbSubjectInOutPut -K 0 -b \$NbSubjectInOutPut -e \$ExpectMin -F \$Filtre -a \$NbProc" if {[catch {eval $CommandeBlast} Message]} { Espionne "Problem with $FileOUT" Espionne $Message } return $FileOUT } proc PipeBlast_CHALMEL {FileTFA Database {FileOUT ""} {NorPorXorTNorTX P} {NbSubjectInOutPut 500} {ExpectMin 10} {Filtre T} {NbProc 4}} { if {![file exists $FileTFA]} {return} if {[string equal -nocase $NorPorXorTNorTX "N"]} { set BLAST "blastn" } elseif {[string equal -nocase $NorPorXorTNorTX "P"]} { set BLAST "blastp" } elseif {[string equal -nocase $NorPorXorTNorTX "X"]} { set BLAST "blastx" } elseif {[string equal -nocase $NorPorXorTNorTX "TN"]} { set BLAST "tblastn" } elseif {[string equal -nocase $NorPorXorTNorTX "TX"]} { set BLAST "tblastx" } else { set BLAST "blastp" } if {$FileOUT == ""} {set FileOUT "$FileTFA.$BLAST"} if {![string equal -nocase $Filtre "T"]} {set Filtre "F"} set NomDeLaDatabase "" if { [file exists "/blast/$Database.nhr"] || [file exists "/blast/$Database.nal"] || [file exists "/blast/$Database.phr"] || [file exists "/blast/$Database.pal"] } { set NomDeLaDatabase "/blast/$Database" } if {[file exists "[RepBlastDBAlternatif]/$Database"]} { set NomDeLaDatabase "[RepBlastDBAlternatif]/$Database" } if { [file exists "$Database.nhr" ] || [file exists "$Database.nal" ] || [file exists "$Database.phr" ] || [file exists "$Database.pal" ] } { set NomDeLaDatabase "$Database" } if {$NomDeLaDatabase == ""} {Espionne "$NomDeLaDatabase does not exist";return} set CommandeBlast "eval exec [ProgPathway blastall] -p \$BLAST -i \$FileTFA -o \$FileOUT -d \$NomDeLaDatabase -v \$NbSubjectInOutPut -K 0 -b \$NbSubjectInOutPut -e \$ExpectMin -F \$Filtre -a \$NbProc" if {[catch {eval $CommandeBlast} Message]} { Espionne "Problem with $FileOUT" Espionne $Message } return $FileOUT } proc PipeClustering {FichierMSF FichierClustering {DPCouSecator ""}} { if {![file exists $FichierMSF]} {return} set NameFile [file tail $FichierMSF] regexp {^[^\.]+} $NameFile NameFile set FichierMSFTmp "[RepertoireDeTravail]/$NameFile" File copy -force $FichierMSF $FichierMSFTmp if {$DPCouSecator == ""} { set NbAccess 0 set F [open $FichierMSF] while {[gets $F Ligne]>=0} { set Entete [lindex [split [string trim $Ligne] " "] 0] if {[string equal -nocase $Entete "Name:"]} {incr NbAccess} if {$Entete == "//"} {break} } close $F if {100 < $NbAccess} { set Moi "dpc" set LAutre "secator" set Commande "eval exec [ProgPathway dpc] $FichierMSFTmp alignment" set FileClustering "${FichierMSFTmp}.dpc" } else { set Moi "secator" set LAutre "dpc" set Commande "eval exec [ProgPathway secator] $FichierMSFTmp" set FileClustering "${FichierMSFTmp}.sec" } if {[catch {eval $Commande} Message]} { Espionne $Message Espionne "Problem with $FichierMSFTmp with $Moi je vais utiliser $LAutre" return [ClusteringDuMSF $FichierMSF $FichierClustering $LAutre] } if {![file exists $FileClustering ]} {return} File rename -force $FileClustering $FichierClustering } else { if {[string equal -nocase $DPCouSecator "dpc"]} { set Commande "eval exec [ProgPathway dpc] $FichierMSFTmp alignment" set FileClustering "${FichierMSFTmp}.dpc" } if {[string equal -nocase $DPCouSecator "secator"]} { set Commande "eval exec [ProgPathway secator] $FichierMSFTmp" set FileClustering "${FichierMSFTmp}.sec" } if {[catch {eval $Commande} Message]} { Espionne $Message Espionne "Problem with $FichierMSFTmp with $DPCouSecator" } if {![file exists $FileClustering ]} {return} File rename -force $FileClustering $FichierClustering } return $FichierClustering } proc PipeClustering_CHALMEL {FichierMSF FichierClustering {DPCouSecator ""}} { if {![file exists $FichierMSF]} {return} set NameFile [file tail $FichierMSF] regexp {^[^\.]+} $NameFile NameFile set FichierMSFTmp "[RepertoireDeTravail]/$NameFile" File copy -force $FichierMSF $FichierMSFTmp if {$DPCouSecator == ""} { set NbAccess 0 set F [open $FichierMSF] while {[gets $F Ligne]>=0} { set Entete [lindex [split [string trim $Ligne] " "] 0] if {[string equal -nocase $Entete "Name:"]} {incr NbAccess} if {$Entete == "//"} {break} } close $F if {100 < $NbAccess} { set Moi "dpc" set LAutre "secator" set Commande "eval exec [ProgPathway dpc] $FichierMSFTmp alignment" set FileClustering "${FichierMSFTmp}.dpc" } else { set Moi "secator" set LAutre "dpc" set Commande "eval exec [ProgPathway secator] $FichierMSFTmp" set FileClustering "${FichierMSFTmp}.sec" } if {[catch {eval $Commande} Message]} { Espionne $Message Espionne "Problem with $FichierMSFTmp with $Moi je vais utiliser $LAutre" return [ClusteringDuMSF $FichierMSF $FichierClustering $LAutre] } if {![file exists $FileClustering ]} {return} File rename -force $FileClustering $FichierClustering } else { if {[string equal -nocase $DPCouSecator "dpc"]} { set Commande "eval exec [ProgPathway dpc] $FichierMSFTmp alignment" set FileClustering "${FichierMSFTmp}.dpc" } if {[string equal -nocase $DPCouSecator "secator"]} { set Commande "eval exec [ProgPathway secator] $FichierMSFTmp" set FileClustering "${FichierMSFTmp}.sec" } if {[catch {eval $Commande} Message]} { Espionne $Message Espionne "Problem with $FichierMSFTmp with $DPCouSecator" } if {![file exists $FileClustering ]} {return} File rename -force $FileClustering $FichierClustering } return $FichierClustering } proc PipeDbClustal {FichierTFAs FichierAnchors FichierOut} { if {![file exists $FichierTFAs]} {return} set FichierLog "$FichierOut.log" if {[file exists $FichierAnchors]} { if {[catch {exec [ProgPathway dbclustal] $FichierTFAs -motifs=$FichierAnchors -output=gscope -outfile=$FichierOut -propagate >& $FichierLog} Message]} {Espionne $Message;return} } else { if {[catch {exec [ProgPathway dbclustal] $FichierTFAs -output=gscope -outfile=$FichierOut -propagate >& $FichierLog} Message]} {Espionne $Message;return} } if {![file exists $FichierOut]} {return} set NorMD [PipeNorMD $FichierOut] set LeMSF [LesLignesDuFichier $FichierOut] set DeuxiemeLigne [string trimright [lindex $LeMSF 1]] append DeuxiemeLigne " NorMD $NorMD" set LeMSF [linsert $LeMSF 1 $DeuxiemeLigne] Sauve [join $LeMSF "\n"] dans $FichierOut return $FichierOut } proc PipeDbClustal_CHALMEL {FichierTFAs FichierAnchors FichierOut} { if {![file exists $FichierTFAs]} {return} set FichierLog "$FichierOut.log" if {[file exists $FichierAnchors]} { if {[catch {exec [ProgPathway dbclustal] $FichierTFAs -motifs=$FichierAnchors -output=gscope -outfile=$FichierOut -propagate >& $FichierLog} Message]} {Espionne $Message;return} } else { if {[catch {exec [ProgPathway dbclustal] $FichierTFAs -output=gscope -outfile=$FichierOut -propagate >& $FichierLog} Message]} {Espionne $Message;return} } if {![file exists $FichierOut]} {return} set NorMD [PipeNorMD $FichierOut] set LeMSF [LesLignesDuFichier $FichierOut] set DeuxiemeLigne [string trimright [lindex $LeMSF 1]] append DeuxiemeLigne " NorMD $NorMD" set LeMSF [linsert $LeMSF 1 $DeuxiemeLigne] Sauve [join $LeMSF "\n"] dans $FichierOut return $FichierOut } proc PipeGrid {} { global DefautsPipe global PipeCollection global PipeQuery global EmuleGrid #rR global TexteDuLog ;#rR le nouveau AjouteAuLogPipe ne s'en sert plus depuis 2011/05/27 global VariablesAuDepart global Defauts if {[info exists env(GRILLE)] && $env(GRILLE)} { set OrdTmpDir [list ./usr/tmp] } if {! [info exists Defauts]} {LesDefauts} LesDefauts Mode Batch set PipeCollection 0 set AvecPasTouche 0 set EmuleGrid 0 # Redonne options DonneOptions # Trucs a faire set FBla [set DefautsPipe(Etapes,blast)] set FBal [set DefautsPipe(Etapes,ballast)] set FFil [set DefautsPipe(Etapes,filter)] set FClu [set DefautsPipe(Etapes,clustal)] set FNo1 [set DefautsPipe(Etapes,normd1)] set FRas [set DefautsPipe(Etapes,rascal)] set FNo2 [set DefautsPipe(Etapes,normd2)] set FLeo [set DefautsPipe(Etapes,leon)] set FNo3 [set DefautsPipe(Etapes,normd3)] set FCpk [set DefautsPipe(Etapes,cluspack)] set FMcm [set DefautsPipe(Etapes,macsims)] set FCon [set DefautsPipe(Etapes,conservation)] set FMod [set DefautsPipe(Etapes,modelisation)] if {[QuelProjet] eq "ms2phdb"} {set FMcm 0} # fichier ou project set f [set DefautsPipe(File,file)] if {$f == ""} { if {! [regexp {^Zero$} [RepertoireDuGenome]]} { LesDefautsDuPipe File,pjt 1 } else { FaireLire "No file and no project specified !" return } } if {$f != ""} { set f [string trim $f] if {[EstUnPAB $f]} { set liste [file join [RepertoireDuGenome] prottfa $f] } elseif {[string index $f end] == "+"} { set liste [lrange [ListeDesPABs] [string range $f 0 [expr [string length $f] - 2]] end] } elseif {$FBla} { set liste [SplitGrid $f] } else { set liste $f } } else { set AvecPasTouche 1 set PipeCollection 1 set liste [ListeDesPABs] set RepertoireBlastP "[RepertoireDuGenome]/blastp" if { ! [file exists "$RepertoireBlastP"]} { file mkdir $RepertoireBlastP } set RepertoireMSF "[RepertoireDuGenome]/msf" if {![file exists $RepertoireMSF]} {file mkdir $RepertoireMSF} set RepertoireTfasDesCopains "[RepertoireDuGenome]/tfasdescopains" if { ! [file exists $RepertoireTfasDesCopains]} {file mkdir $RepertoireTfasDesCopains } set RepertoireBallast "[RepertoireDuGenome]/ballast" if {! [file exists $RepertoireBallast]} {file mkdir $RepertoireBallast} set RepertoireRascal "[RepertoireDuGenome]/rascal" if { ! [file exists $RepertoireRascal]} {file mkdir $RepertoireRascal} set RepertoireNorMD "[RepertoireDuGenome]/normd" if { ! [file exists $RepertoireNorMD]} {file mkdir $RepertoireNorMD} set RepertoireLeon "[RepertoireDuGenome]/leon" if { ! [file exists $RepertoireLeon]} {file mkdir $RepertoireLeon} set RepertoireCluspack "[RepertoireDuGenome]/cluspack" if { ! [file exists $RepertoireCluspack]} {file mkdir $RepertoireCluspack} set RepertoireMacsims "[RepertoireDuGenome]/macsims" if { ! [file exists $RepertoireMacsims]} {file mkdir $RepertoireMacsims} #AF if {[set DefautsPipe(File,log)] eq "verbose"} { set RepertoireLog "[RepertoireDuGenome]/log" if { ! [file exists $RepertoireLog]} {file mkdir $RepertoireLog} } if {[set DefautsPipe(Etapes,modelisation)] == 1} { set RepertoireModele "[RepertoireDuGenome]/modeles3D" if { ! [file exists $RepertoireModele]} {file mkdir $RepertoireModele} } if {[QuelProjet] eq "ms2phdb"} { set RepertoireBlastP3D "[RepertoireDuGenome]/blastp3D" if {![file exists $RepertoireBlastP3D]} {file mkdir $RepertoireBlastP3D} set RepertoireEmpreinte "[RepertoireDuGenome]/empreinte" if { ! [file exists $RepertoireEmpreinte]} {file mkdir $RepertoireEmpreinte} } ## } #Espionne "$liste" set VariablesAuDepart [info globals] foreach e $liste { Espionne "traite $e" if {[set DefautsPipe(File,log)] eq "verbose"} { if {$PipeCollection} { set ficLogPipe [file join $RepertoireLog $e] } else { set ficLogPipe "${e}.lelog" } } if {! [FichierExisteGrid $e]} {continue} if {$AvecPasTouche && [PasTouche $e]} { continue } #rR si on met ficLog on rajoutera toujours dans ce fichier jusqu'au prochain changement AjouteAuLogPipe "Debut traitement $e" $ficLogPipe set PipeQuery [QueryDuTFA $e] set ok 1 set okdb 1 set okMc 1 if {$FBla} { if {[catch {set ok [BlastPGrid $e]} Message]} {AjouteAuLogPipe "$Message"} } if {$FBal && $ok} { if {[catch {set ok [BallastGrid $e]} Message]} {AjouteAuLogPipe "$Message"} } if {$FFil && $ok} { set ok 0 if {[catch {set ok [FilterGrid $e]} Message]} {AjouteAuLogPipe "$Message"} set okdb $ok set okMc $ok } if {$FClu && $ok} { if {[catch {set ok [DbClustalGrid $e]} Message]} {AjouteAuLogPipe "$Message"} set okdb $ok set okMc $ok } if {$FNo1 && $ok} { if {[catch {set ok [NormdGrid $e "dbclustal"]} Message]} {AjouteAuLogPipe "$Message"} } if {$FRas && $okdb} { if {[catch {set ok [RascalGrid $e]} Message]} {AjouteAuLogPipe "$Message"} } if {$FNo2 && $ok} { if {[catch {set ok [NormdGrid $e "rascal"]} Message]} {AjouteAuLogPipe "$Message"} } if {$FLeo && $okdb} { if {[catch {set ok [LeonGrid $e]} Message]} {AjouteAuLogPipe "$Message"} } if {$FNo3 && $ok} { if {[catch {set ok [NormdGrid $e "leon"]} Message]} {AjouteAuLogPipe "$Message"} } #AF if {[QuelProjet] eq "ms2phdb" && $okdb} { if {[catch {Empreinte $e} Message]} {AjouteAuLogPipe "$Message"} if {[catch {set okMc [MacsimsGrid $e]} Message]} {AjouteAuLogPipe "$Message"} } elseif {$FMcm && $okdb} { if {[catch {set okMc [MacsimsGrid $e]} Message]} {AjouteAuLogPipe "$Message"} } if {$FMod} { puts "va lancer modelisation" if {[catch {ModelisationGrid $e} Message]} {AjouteAuLogPipe "$Message"} } ## if {$FCpk && $okdb} {set ok [CluspackGrid $e]} # AF # calcule des conservations dans le macsims # ne peut etre fait que si on l etape de creation du macsims est ok! if {$FCon && $okMc} { if {[catch {ConsGrid $e} Message]} {AjouteAuLogPipe "$Message"} } ## if {[QuelProjet] ne "ms2phdb" && [QuelProjet] ne "addSeq"} { if {$AvecPasTouche} {FinPasTouche $e} } if {$EmuleGrid} {FinJob $e} #rR if {[set DefautsPipe(File,log)] eq "verbose"} { #rR if {$PipeCollection} { #rR set ficLog [file join $RepertoireLog $e] #rR } else { #rR set ficLog "${e}.lelog" #rR } #rR SaveLog $ficLog #rR if {[info exists TexteDuLog]} {unset TexteDuLog} #rR } FermeFichierPipe } return 1 } proc PipeInterface {} { global DefautsPipe global CurrentPipe package require Tk if {! [info exists DefautsPipe]} {LesDefautsDuPipe} array set CurrentPipe [array get DefautsPipe] set w ".pipe" frame $w pack $w -expand yes -side top -anchor nw -fill both -padx 10 set TitleFont "Helvetica 12 bold" set Title "$w.title" set Setup "$w.setup" set Boutons "$w.boutons" set WFile "$Setup.file" set WEtapes "$Setup.etapes" set WBlast "$Setup.blast" set WClustal "$Setup.clustal" set WFilter "$Setup.filter" set WCons "$Setup.conservation" frame $Title label $Title.lbl1 -text "PipeAlign v1.0" -font "Helvetica 16 bold italic" -anchor w label $Title.lbl2 -text "(c) 2005 LBGI" -font "Helvetica 16 normal" -anchor e pack $Title.lbl1 $Title.lbl2 -side left -expand 1 -fill x pack $Title -side top -fill x -pady 10 -expand 1 -padx 5 frame $Setup frame $WFile labelframe $WBlast -borderwidth 2 -text "Blast" -labelanchor nw -font $TitleFont labelframe $WFilter -borderwidth 2 -text "Filter" -labelanchor nw -font $TitleFont labelframe $WClustal -borderwidth 2 -text "Clustal" -labelanchor nw -font $TitleFont labelframe $WCons -borderwidth 2 -text "Conservation" -labelanchor nw -font $TitleFont labelframe $WEtapes -borderwidth 2 -text "Steps" -labelanchor nw -font $TitleFont pack $Setup -expand yes -side top -anchor nw -fill both -padx 2 grid rowconfig $Setup 0 -weight 0 -minsize 0 grid rowconfig $Setup 1 -weight 0 -minsize 0 grid rowconfig $Setup 2 -weight 0 -minsize 0 grid rowconfig $Setup 3 -weight 0 -minsize 0 grid columnconfig $Setup 0 -weight 0 -minsize 0 grid columnconfig $Setup 1 -weight 1 -minsize 0 grid $WFile -in $Setup -padx 1 -pady 10 -row 0 -column 0 -rowspan 1 -columnspan 2 -sticky news grid $WBlast -in $Setup -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WFilter -in $Setup -padx 1 -pady 1 -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WClustal -in $Setup -padx 1 -pady 1 -row 3 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WCons -in $Setup -padx 1 -pady 1 -row 4 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes -in $Setup -padx 1 -pady 1 -row 1 -column 1 -rowspan 3 -columnspan 1 -sticky news # frame File label $WFile.lbl -text "File : " -anchor w -font "Helvetica 12 bold" radiobutton $WFile.fpj -variable CurrentPipe(File,pjt) -value 1 -text "Project" radiobutton $WFile.fus -variable CurrentPipe(File,pjt) -value 0 -text "User file" entry $WFile.ent -width 30 -background white -textvariable CurrentPipe(File,file) button $WFile.but -text "Browse" -command "LoadFileFichiers $WFile.ent ; update" -bg cyan pack $WFile.lbl $WFile.fpj $WFile.fus $WFile.ent $WFile.but -side left -fill x -expand 1 # Frame Blast label $WBlast.lmex -text "max expect" -anchor e -width 16 entry $WBlast.emex -width 6 -background white -textvariable CurrentPipe(Blast,e) label $WBlast.lmal -text "max alignments" -anchor e -width 16 entry $WBlast.emal -width 6 -background white -textvariable CurrentPipe(Blast,v) label $WBlast.lmsq -text "max seq search" -anchor e entry $WBlast.emsq -width 6 -background white -textvariable CurrentPipe(Blast,b) label $WBlast.ldbk -text "databank" -anchor e spinbox $WBlast.edbk -background white -textvariable CurrentPipe(Blast,d) -values [list protall uniref90 pdb protein] -command "set CurrentPipe(Blast,d) %s" -state readonly label $WBlast.lvlk -text "K value" -anchor e entry $WBlast.evlk -width 6 -background white -textvariable CurrentPipe(Blast,K) label $WBlast.lvlf -text "f value" -anchor e entry $WBlast.evlf -width 6 -background white -textvariable CurrentPipe(Blast,f) label $WBlast.lgap -text "gapped" -anchor e label $WBlast.ygap -text "Yes" -anchor e radiobutton $WBlast.vgT -variable CurrentPipe(Blast,g) -value T label $WBlast.ngap -text "No" -anchor e radiobutton $WBlast.vgF -variable CurrentPipe(Blast,g) -value F label $WBlast.lvlF -text "F value" -anchor e label $WBlast.yF -text "Yes" -anchor e radiobutton $WBlast.vFT -variable CurrentPipe(Blast,F) -value T label $WBlast.nF -text "No" -anchor e radiobutton $WBlast.vFF -variable CurrentPipe(Blast,F) -value F for {set i 0} {$i < 10} {incr i} { grid rowconfig $WBlast $i -weight 0 -minsize 0 } grid columnconfig $WBlast 0 -weight 1 -minsize 0 grid $WBlast.lmex -in $WBlast -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.emex -in $WBlast -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 4 -sticky news grid $WBlast.lmal -in $WBlast -padx 1 -pady 1 -row 0 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.emal -in $WBlast -padx 1 -pady 1 -row 0 -column 6 -rowspan 1 -columnspan 4 -sticky news grid $WBlast.lmsq -in $WBlast -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.emsq -in $WBlast -padx 1 -pady 1 -row 1 -column 1 -rowspan 1 -columnspan 4 -sticky news grid $WBlast.ldbk -in $WBlast -padx 1 -pady 1 -row 1 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.edbk -in $WBlast -padx 1 -pady 1 -row 1 -column 6 -rowspan 1 -columnspan 4 -sticky news grid $WBlast.lvlk -in $WBlast -padx 1 -pady 1 -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.evlk -in $WBlast -padx 1 -pady 1 -row 2 -column 1 -rowspan 1 -columnspan 4 -sticky news grid $WBlast.lvlf -in $WBlast -padx 1 -pady 1 -row 2 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.evlf -in $WBlast -padx 1 -pady 1 -row 2 -column 6 -rowspan 1 -columnspan 4 -sticky news grid $WBlast.lgap -in $WBlast -padx 1 -pady 1 -row 3 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.ygap -in $WBlast -padx 1 -pady 1 -row 3 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.vgT -in $WBlast -padx 1 -pady 1 -row 3 -column 2 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.ngap -in $WBlast -padx 1 -pady 1 -row 3 -column 3 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.vgF -in $WBlast -padx 1 -pady 1 -row 3 -column 4 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.lvlF -in $WBlast -padx 1 -pady 1 -row 3 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.yF -in $WBlast -padx 1 -pady 1 -row 3 -column 6 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.vFT -in $WBlast -padx 1 -pady 1 -row 3 -column 7 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.nF -in $WBlast -padx 1 -pady 1 -row 3 -column 8 -rowspan 1 -columnspan 1 -sticky news grid $WBlast.vFF -in $WBlast -padx 1 -pady 1 -row 3 -column 9 -rowspan 1 -columnspan 1 -sticky news # Frame Filter label $WFilter.lmex -text "expect threshold" -anchor e -width 16 entry $WFilter.emex -width 6 -background white -textvariable CurrentPipe(Filter,expect) label $WFilter.lmas -text "max seq kept" -anchor e entry $WFilter.emas -width 6 -background white -textvariable CurrentPipe(Filter,maxseq) label $WFilter.lmsl -text "max seq length" -anchor e entry $WFilter.emsl -width 6 -background white -textvariable CurrentPipe(Filter,length) label $WFilter.lmet -text "filtering method" -anchor e spinbox $WFilter.emet -values [list none strips euca meta vert cami splice mounir fdd alea] -textvariable CurrentPipe(Filter,method) -background white -command "set CurrentPipe(Filter,method) %s" -state readonly label $WFilter.ladd -text "add Ballast seq" -anchor e label $WFilter.yadd -text "Yes" -anchor e radiobutton $WFilter.vadT -variable CurrentPipe(Filter,add) -value 1 label $WFilter.nadd -text "No" -anchor e radiobutton $WFilter.vadF -variable CurrentPipe(Filter,add) -value 0 label $WFilter.lfrg -text "remove fragments" -anchor e label $WFilter.yfrg -text "Yes" -anchor e radiobutton $WFilter.vfrT -variable CurrentPipe(Filter,fragment) -value 1 label $WFilter.nfrg -text "No" -anchor e radiobutton $WFilter.vfrF -variable CurrentPipe(Filter,fragment) -value 0 for {set i 0} {$i < 10} {incr i} { grid columnconfig $WFilter $i -weight 0 -minsize 0 } grid rowconfig $WFilter 0 -weight 1 -minsize 0 grid $WFilter.lmex -in $WFilter -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.emex -in $WFilter -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 4 -sticky news grid $WFilter.lmas -in $WFilter -padx 1 -pady 1 -row 0 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.emas -in $WFilter -padx 1 -pady 1 -row 0 -column 6 -rowspan 1 -columnspan 4 -sticky news grid $WFilter.lmsl -in $WFilter -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.emsl -in $WFilter -padx 1 -pady 1 -row 1 -column 1 -rowspan 1 -columnspan 4 -sticky news grid $WFilter.lmet -in $WFilter -padx 1 -pady 1 -row 1 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.emet -in $WFilter -padx 1 -pady 1 -row 1 -column 6 -rowspan 1 -columnspan 4 -sticky news grid $WFilter.ladd -in $WFilter -padx 1 -pady 1 -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.yadd -in $WFilter -padx 1 -pady 1 -row 2 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.vadT -in $WFilter -padx 1 -pady 1 -row 2 -column 2 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.nadd -in $WFilter -padx 1 -pady 1 -row 2 -column 3 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.vadF -in $WFilter -padx 1 -pady 1 -row 2 -column 4 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.lfrg -in $WFilter -padx 1 -pady 1 -row 2 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.yfrg -in $WFilter -padx 1 -pady 1 -row 2 -column 6 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.vfrT -in $WFilter -padx 1 -pady 1 -row 2 -column 7 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.nfrg -in $WFilter -padx 1 -pady 1 -row 2 -column 8 -rowspan 1 -columnspan 1 -sticky news grid $WFilter.vfrF -in $WFilter -padx 1 -pady 1 -row 2 -column 9 -rowspan 1 -columnspan 1 -sticky news # Frame Clustal label $WClustal.lmot -width 16 -text "use motifs" -anchor e label $WClustal.ymot -text "Yes" -anchor e radiobutton $WClustal.vmoT -variable CurrentPipe(DbClustal,motifs) -value 1 label $WClustal.nmot -text "No" -anchor e radiobutton $WClustal.vmoF -variable CurrentPipe(DbClustal,motifs) -value 0 label $WClustal.lpro -width 16 -text "propagate" -anchor e label $WClustal.ypro -text "Yes" -anchor e radiobutton $WClustal.vprT -variable CurrentPipe(DbClustal,propagate) -value 1 label $WClustal.npro -text "No" -anchor e radiobutton $WClustal.vprF -variable CurrentPipe(DbClustal,propagate) -value 0 for {set i 0} {$i < 10} {incr i} { grid columnconfig $WClustal $i -weight 0 -minsize 0 } grid rowconfig $WClustal 0 -weight 1 -minsize 0 grid $WClustal.lmot -in $WClustal -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.ymot -in $WClustal -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.vmoT -in $WClustal -padx 1 -pady 1 -row 0 -column 2 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.nmot -in $WClustal -padx 1 -pady 1 -row 0 -column 3 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.vmoF -in $WClustal -padx 1 -pady 1 -row 0 -column 4 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.lpro -in $WClustal -padx 1 -pady 1 -row 0 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.ypro -in $WClustal -padx 1 -pady 1 -row 0 -column 6 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.vprT -in $WClustal -padx 1 -pady 1 -row 0 -column 7 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.npro -in $WClustal -padx 1 -pady 1 -row 0 -column 8 -rowspan 1 -columnspan 1 -sticky news grid $WClustal.vprF -in $WClustal -padx 1 -pady 1 -row 0 -column 9 -rowspan 1 -columnspan 1 -sticky news # AF # Frame Conservation label $WCons.lmet -text "conservation method" -anchor e spinbox $WCons.emet -values [list Cluster VectorNorm MeanDistance Ranganathan] -textvariable CurrentPipe(Conservation,method) -background white -command "set CurrentPipe(Conservation,method) %s" -state readonl for {set i 0} {$i < 10} {incr i} { grid columnconfig $WCons $i -weight 0 -minsize 0 } grid rowconfig $WCons 0 -weight 1 -minsize 0 grid $WCons.lmet -in $WCons -padx 1 -pady 1 -row 1 -column 5 -rowspan 1 -columnspan 1 -sticky news grid $WCons.emet -in $WCons -padx 1 -pady 1 -row 1 -column 6 -rowspan 1 -columnspan 4 -sticky news ## # Frame des Etapes du pipe label $WEtapes.lbla -text "blast" -anchor e checkbutton $WEtapes.rbla -onvalue "1" -offvalue "0" -variable CurrentPipe(Etapes,blast) label $WEtapes.lbal -text "ballast" -anchor e checkbutton $WEtapes.rbal -onvalue "1" -offvalue "0" -variable CurrentPipe(Etapes,ballast) label $WEtapes.lfil -text "filter" -anchor e checkbutton $WEtapes.rfil -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,filter) label $WEtapes.lclu -text "clustal" -anchor e checkbutton $WEtapes.rclu -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,clustal) label $WEtapes.lno1 -text "normd" -anchor e checkbutton $WEtapes.rno1 -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,normd1) label $WEtapes.lras -text "rascal" -anchor e checkbutton $WEtapes.rras -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,rascal) label $WEtapes.lno2 -text "normd" -anchor e checkbutton $WEtapes.rno2 -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,normd2) label $WEtapes.lleo -text "leon" -anchor e checkbutton $WEtapes.rleo -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,leon) label $WEtapes.lno3 -text "normd" -anchor e checkbutton $WEtapes.rno3 -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,normd3) label $WEtapes.lcpk -text "cluspack" -anchor e checkbutton $WEtapes.rcpk -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,cluspack) label $WEtapes.lmcm -text "macsims" -anchor e checkbutton $WEtapes.rmcm -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,macsims) label $WEtapes.lcon -text "conservation" -anchor e checkbutton $WEtapes.rcon -onvalue 1 -offvalue 0 -variable CurrentPipe(Etapes,conservation) for {set i 0} {$i < 11} {incr i} { grid rowconfig $WEtapes $i -weight 0 -minsize 0 } grid columnconfig $WEtapes 0 -weight 0 -minsize 0 grid columnconfig $WEtapes 1 -weight 0 -minsize 0 grid $WEtapes.lbla -in $WEtapes -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rbla -in $WEtapes -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lbal -in $WEtapes -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rbal -in $WEtapes -padx 1 -pady 1 -row 1 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lfil -in $WEtapes -padx 1 -pady 1 -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rfil -in $WEtapes -padx 1 -pady 1 -row 2 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lclu -in $WEtapes -padx 1 -pady 1 -row 3 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rclu -in $WEtapes -padx 1 -pady 1 -row 3 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lno1 -in $WEtapes -padx 1 -pady 1 -row 4 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rno1 -in $WEtapes -padx 1 -pady 1 -row 4 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lras -in $WEtapes -padx 1 -pady 1 -row 5 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rras -in $WEtapes -padx 1 -pady 1 -row 5 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lno2 -in $WEtapes -padx 1 -pady 1 -row 6 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rno2 -in $WEtapes -padx 1 -pady 1 -row 6 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lleo -in $WEtapes -padx 1 -pady 1 -row 7 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rleo -in $WEtapes -padx 1 -pady 1 -row 7 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lno3 -in $WEtapes -padx 1 -pady 1 -row 8 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rno3 -in $WEtapes -padx 1 -pady 1 -row 8 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lcpk -in $WEtapes -padx 1 -pady 1 -row 9 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rcpk -in $WEtapes -padx 1 -pady 1 -row 9 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lmcm -in $WEtapes -padx 1 -pady 1 -row 10 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rmcm -in $WEtapes -padx 1 -pady 1 -row 10 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.lcon -in $WEtapes -padx 1 -pady 1 -row 10 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $WEtapes.rcon -in $WEtapes -padx 1 -pady 1 -row 10 -column 1 -rowspan 1 -columnspan 1 -sticky news # frame boutons frame $Boutons pack $Boutons -side bottom -fill x -pady 30 button $Boutons.dismiss -text "Dismiss" -background "red" -command "destroy ." button $Boutons.defauts -text "Defauts" -background "yellow" -command "ReloadDefauts $w" button $Boutons.ok -text " OK " -background "green" -command "LancePipe $w" pack $Boutons.dismiss $Boutons.defauts $Boutons.ok -side left -expand 1 # MesCouleurs . update idletasks return } proc PipeLeon {FichierMSF Query FichierOut} { Wup "enleve les homologues eloignes du FichierMSF" if {[catch {eval exec leon $FichierMSF $Query $FichierOut $FichierLog} Message]} { Warne "LEON Error: $Message" return "" } return $FichierOut } proc PipeLuc {Nom} { global PipeCollection set FichierProt "/genomics/link/GGWmm/prottfa/$Nom" set PipeCollection 1 # Charge les options par defaut LesDefautsDuPipe # Parametre les options LesDefautsDuPipe "File,file" $FichierProt LesDefautsDuPipe "Filter,add" 1 LesDefautsDuPipe "Filter,maxseq" 200 # Lance le pipe catch {PipeGrid} Message return -code 0 } proc PipeNorMD {FichierMSF} { #set CommandeMDScore "[ProgPathway normd] $FichierMSF /biolo/normd/gon250.bla 0 0.1" set CommandeMDScore "[ProgPathway normd] $FichierMSF" set MD "" if { ! [catch {set MD [eval exec $CommandeMDScore]} Message]} { if { ! [regexp {[0-9]} $MD]} { #MDScore ne rend pas de nombre mais $Message return -9999.4 } set Score "" scan $MD "%s %f" NomDuFich Score if {[regexp {^[0-9\-\+\.eE]+$} $Score]} { set MD $Score } elseif {[regexp {^[0-9\-\+\.eE]+$} $NomDuFich]} { set MD $NomDuFich } else { set MD $MD } return $MD } #MDScore se plante par $Message return -9999.0 } proc PipeNorMD_CHALMEL {FichierMSF} { #set CommandeMDScore "[ProgPathway normd] $FichierMSF /biolo/normd/gon250.bla 0 0.1" set CommandeMDScore "[ProgPathway normd] $FichierMSF" set MD "" if { ! [catch {set MD [eval exec $CommandeMDScore]} Message]} { if { ! [regexp {[0-9]} $MD]} { #MDScore ne rend pas de nombre mais $Message return -9999.4 } set Score "" scan $MD "%s %f" NomDuFich Score if {[regexp {^[0-9\-\+\.eE]+$} $Score]} { set MD $Score } elseif {[regexp {^[0-9\-\+\.eE]+$} $NomDuFich]} { set MD $NomDuFich } else { set MD $MD } return $MD } #MDScore se plante par $Message return -9999.0 } proc PipeOkOuNon {} { set i 0 foreach PAB [ListeDesPABs] { set toutfait 0 set RepertoireLog "[RepertoireDuGenome]/log" foreach Ligne [LesLignesDuFichier "$RepertoireLog/$PAB"] { if {[regexp "failed" $Ligne]} { lappend LesPABs $PAB #Espionne "$PAB probleme" } if {[regexp "macsims = ok" $Ligne]} {set toutfait 1} } if {!$toutfait} { incr i lappend LesPABs $PAB #Espionne "$PAB probleme" } } #Espionne "$i PAB avec probleme" return $LesPABs } proc PipeOlida {FichierTFA {ExpectMax 100} {NbProtMax 200} {Banque protall}} { # Charge les options par defaut LesDefautsDuPipe # Parametre les options LesDefautsDuPipe "File,file" $FichierTFA LesDefautsDuPipe "Blast,d" $Banque LesDefautsDuPipe "Blast,v" $NbProtMax LesDefautsDuPipe "Blast,b" $NbProtMax LesDefautsDuPipe "Filter,maxseq" $NbProtMax LesDefautsDuPipe "Filter,expect" $ExpectMax # Vire les fragments, les variants LesDefautsDuPipe "Filter,fragment" 1 LesDefautsDuPipe "Filter,varsplic" 1 # Déactivation de... LesDefautsDuPipe "Filter,add" 0 LesDefautsDuPipe "Etapes,cluspack" 0 # Activation de... LesDefautsDuPipe "Etapes,macsims" 1 # Lance le pipe silencieusement global EspionneNon if {[info exists EspionneNon]} {set ancienEspionneNon $EspionneNon} else {set ancienEspionneNon 0} set EspionneNon 1 if {[catch {PipeGrid} Message]} { set EspionneNon $ancienEspionneNon Espionne "Error from pipealign. Message follows \n$Message" } set EspionneNon $ancienEspionneNon return 0 } proc PipeRascal {FichierMSF FichierOut} { set OldNorMD [PipeNorMD $FichierMSF] if {[catch {exec [ProgPathway rascal] $FichierMSF $FichierOut} Message]} { Warne "Error from rascal. Message follows \n$Message" return "" } if { ! [file exists $FichierOut]} { Warne "Error from rascal. File not created" return "" } if {[catch {exec [ProgPathway clustalw] $FichierOut -convert -output=gscope -outfile=$FichierOut.100} Message]} { Warne "Clustalw couldn't convert the msf to 100 : \n$Message" } if {[file exists "$FichierOut.100"]} {File rename -force "$FichierOut.100" $FichierOut} set NewNorMD [PipeNorMD $FichierOut] set LeRascal [LesLignesDuFichier $FichierOut] set DeuxiemeLigne [string trimright [lindex [LesLignesDuFichier $FichierMSF] 1]] if {$OldNorMD<=$NewNorMD} {set Changed "improved"} else {set Changed "reduced"} regexp -nocase {(ANCHORS[ ]+[0-9]+)} $DeuxiemeLigne tmp DeuxiemeLigne append DeuxiemeLigne " Rascal $Changed NorMD from $OldNorMD to $NewNorMD" set LeRascal [linsert $LeRascal 1 $DeuxiemeLigne] return [Sauve [join $LeRascal "\n"] dans $FichierOut] } proc PipeRascal_CHALMEL {FichierMSF FichierOut} { set OldNorMD [PipeNorMD $FichierMSF] if {[catch {exec [ProgPathway rascal] $FichierMSF $FichierOut} Message]} { Warne "Error from rascal. Message follows \n$Message" return "" } if { ! [file exists $FichierOut]} { Warne "Error from rascal. File not created" return "" } if {[catch {exec [ProgPathway clustalw] $FichierOut -convert -output=gscope -outfile=$FichierOut.100} Message]} { Warne "Clustalw couldn't convert the msf to 100 : \n$Message" } if {[file exists "$FichierOut.100"]} {File rename -force "$FichierOut.100" $FichierOut} set NewNorMD [PipeNorMD $FichierOut] set LeRascal [LesLignesDuFichier $FichierOut] set DeuxiemeLigne [string trimright [lindex [LesLignesDuFichier $FichierMSF] 1]] if {$OldNorMD<=$NewNorMD} {set Changed "improved"} else {set Changed "reduced"} regexp -nocase {(ANCHORS[ ]+[0-9]+)} $DeuxiemeLigne tmp DeuxiemeLigne append DeuxiemeLigne " Rascal $Changed NorMD from $OldNorMD to $NewNorMD" set LeRascal [linsert $LeRascal 1 $DeuxiemeLigne] return [Sauve [join $LeRascal "\n"] dans $FichierOut] } proc PiqueArc {K X Y {Efface ""}} { global RepertoireDuGenome set x [$K canvasx $X] set y [$K canvasy $Y] set Id [$K find withtag current] set SesTags [$K gettags $Id] if { [lindex $SesTags 0] != "Arc" } { return } set Nom [lindex [split [lindex $SesTags 1] "/"] 0] set Voisin [lindex [split [lindex $SesTags 1] "/"] 1] # set Texte [TexteOMO $Nom "Long"] set Texte " Operons: [ORGAorgaDesOperons $Nom Stars]" append Texte "\n[ORGAorgaDesOperons $Nom Names]" regsub ".canvas" $K ".message" M catch {destroy $M} if {$Efface!=""} { return "" } message $M -borderwidth 3 -font {Courier 8} -relief raise -width 800 -text $Texte -background "lightyellow" -foreground "black" place $M -x 10 -y [expr $y-40] -anchor w return $M } proc PiqueAssiette {{Plateau ""} {TaillePaquet ""} {GetWhat ""}} { #rR Permet de regrouper sur un plateau les assiettes du congelo par paquet if {$TaillePaquet==""} { set TaillePaquet 50 } if {$Plateau!="" && ! [regexp "/" $Plateau]} { set Plateau "/tempor/grid/plateau/$Plateau" } if {$Plateau==""} { set Plateau "/tempor/grid/plateau/OIEukaryota" } if {$GetWhat=="GetPlateau"} { return $Plateau } file mkdir $Plateau NousAllonsAuBoulot $Plateau set LesManquants {} set MaPlage "" set I 0 foreach Nom [ListeDesPABs] { set Plage [expr {$I/$TaillePaquet}] set PlageDe($Nom) $Plage lappend LesNomsDeLaPlage($Plage) $Nom incr I } set LesSize {} set LesNbQueries {} foreach Nom [ListeDesPABs] { set Plage $PlageDe($Nom) set Deb [lindex $LesNomsDeLaPlage($Plage) 0] set Fin [lindex $LesNomsDeLaPlage($Plage) end] set DebFin "$Deb-$Fin" set MonPlateau ${Plateau}/$DebFin file mkdir $MonPlateau NousAllonsAuBoulot $MonPlateau set LesCongelo [lsort [glob -nocomplain "/tempor/grid/congelo/$Nom*"]] if {$LesCongelo=={}} { continue } set Congelo [lindex $LesCongelo end] set Assiette "$Congelo/assiette" if {[FileAbsent $Assiette]} { set Message "No assiette $Assiette" Espionne $Message lappend LesManquants $Message OnRevientDuBoulot continue } set Gz "$Assiette/output_formated.gz" if {[FileAbsent $Gz]} { set Gz "$Assiette/output.gz" } if {[FileAbsent $Gz]} { set Message "I didn't find $Gz" Espionne $Message lappend LesManquants $Message OnRevientDuBoulot continue } if {$GetWhat=="Test"} { set FichierDeglingue "[RepertoireDuGenome]/deglingues/$Nom" if {[file exists $FichierDeglingue]} { Espionne "$FichierDeglingue existe deja" continue } set N [file size $Nom] lappend LesSize "$N $Nom" set Queries [split [exec zcat $Gz | cut -f 1 | sort -u] "\n"] Espionne "[llength $Queries] Queries lues dans $Gz" set LesIdDuBlast {} foreach Q $Queries { set Id [lindex [split $Q "|"] end] lappend LesIdDuBlast $Id } set LesIdDuBlast [lsort $LesIdDuBlast] set NbIdDuBlast [llength $LesIdDuBlast] set NbQueries $NbIdDuBlast set FichierOi "[RepertoireDuGenome]/oip/$Nom" set LesBAI [split [exec grep " " $FichierOi] "\n"] Espionne "[llength $LesBAI] sequences lues dans $FichierOi" set LesIdDuOi {} foreach BAI $LesBAI { scan $BAI "%s" BAI set IdDuOi [lindex [split $BAI "|"] end] lappend LesIdDuOi $IdDuOi } set LesIdDuOi [lsort -unique $LesIdDuOi] set NbIdDuOi [llength $LesIdDuOi] Espionne "$Nom $NbIdDuBlast $NbIdDuOi" Espionne [lrange $LesIdDuBlast 0 10] Espionne [lrange $LesIdDuOi 0 10] set LesPerdus [ListsComplement $LesIdDuOi $LesIdDuBlast] Espionne $LesPerdus set LesAccessSeq [QueLaSequenceDesBanquesDeLaListe $LesPerdus] SauveLesLignes $LesAccessSeq dans "[RepertoireDuGenome]/deglingues/$Nom" AppendAuFichier "[RepertoireDuGenome]/fiches/NbQueriesDansOiEtBlast.txt" "$Nom $NbIdDuOi $NbQueries" lappend LesNbQueries "$NbQueries $Nom" if {$N<100} { set Message "$Nom n'a que $N octets" Espionne $Message lappend LesManquants $Message } else { Espionne "$Nom $Gz $N" } } else { set DoIt 0 if {[FileAbsent $Nom]} { Espionne "$Nom n'existe pas encore je le crée" set DoIt 1 } if {[file exists $Nom] && [file type $Nom]=="link" && [file readlink $Nom]!=$Gz} { Espionne "Redéfinition du lien $Gz pour $Nom" set DoIt 1 } Espionne "exec ln -sf $Gz $Nom" if {$DoIt} { exec ln -sf $Gz $Nom } } OnRevientDuBoulot } set LesSize [lsort -decreasing -index 0 -integer $LesSize] EspionneL $LesSize set LesNbQueries [lsort -decreasing -index 0 -integer $LesNbQueries] EspionneL $LesNbQueries set LeRetour {} if {$LesManquants!={}} { LConcat LeRetour $LesManquants } return $LeRetour } proc PiqueAssietteOld {{Plateau ""} {GetWhat ""}} { if {$Plateau!="" && ! [regexp "/" $Plateau]} { set Plateau "/tempor/grid/plateau/$Plateau" } if {$Plateau==""} { set Plateau "/tempor/grid/plateau/OIEukaryota" } if {$GetWhat=="GetPlateau"} { return $Plateau } file mkdir $Plateau NousAllonsAuBoulot $Plateau set LesManquants {} foreach Nom [ListeDesPABs] { set LesCongelo [lsort [glob -nocomplain "/tempor/grid/congelo/$Nom*"]] if {$LesCongelo=={}} { continue } set Congelo [lindex $LesCongelo end] set Assiette "$Congelo/assiette" if {[FileAbsent $Assiette]} { set Message "No assiette $Assiette" Espionne $Message lappend LesManquants $Message continue } set Gz "$Assiette/output_formated.gz" if {[FileAbsent $Gz]} { set Gz "$Assiette/output.gz" } if {[FileAbsent $Gz]} { set Message "I didn't find $Gz" Espionne $Message lappend LesManquants $Message continue } Espionne $Gz exec ln -sf $Gz $Nom } OnRevientDuBoulot set LeRetour {} if {$LesManquants!={}} { LConcat LeRetour $LesManquants } return $LeRetour } proc PiqueBox {K X Y Action} { global Piques set Boite [BoiteDuCourant $K $X $Y] if { $Boite == "" } { return $Boite} set Nom [Box $Boite nom] if { [info exists Piques($Nom)] } { unset Piques($Nom) Detoure $Boite $K return $Boite } if { ! [info exists Piques($Boite)] } { set Piques($Nom) $Nom Entoure $Boite $K return $Boite } } proc PkAndIdFromProbeset {} { WithWebService "Gx" 0 set i 0 set Sql "select pk_probeset, probeset_id from probeset order by pk_probeset;" foreach {pk_probeset probeset_id} [GxDbSqlExec $Sql "GetList"] { incr i set Ligne "$pk_probeset\t$probeset_id" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "[GxData]/PkAndIdFromProbeset" Espionne "$i" } proc PlaceDuPAB {Nom} { set i -1 foreach PAB [ListeDesPABs] { incr i if {$PAB==$Nom} { return $i } } return -1 } proc PlaceLHistogramme {Liste K HMin HMax LMin LMax {VerticalOuHorizontal Vertical}} { set Largeur [expr $LMax - $LMin + 1] set Hauteur [expr $HMax - $HMin + 1] set BordY [expr $Hauteur / 15] set BordX [expr $Largeur / 15] if {$BordY > 30} {set BordY 30} if {$BordX > 30} {set BordX 30} set Police "arial 10" set XCentre [expr ($LMax - $LMin) * 1.0 / 2 + $LMin] set XMinHisto [expr $Largeur / 2 ] set XMaxHisto [expr $Largeur - $BordX] set YMinHisto [expr $HMin + $BordY] set YMaxHisto [expr $HMax - $BordY] #Titre set Titre [lindex $Liste 0] $K create text $XCentre $HMin -text [string range $Titre 0 49] -font $Police -anchor n set Liste [lrange $Liste 1 end] set NbHisto [llength $Liste] if {$NbHisto == 0} {return} set ValMin 1e200 set ValMax -1e200 foreach LaValeur $Liste { set Val [lindex $LaValeur 2] set ET [lindex $LaValeur 3] if {$ET == ""} {set ET 0} if {[expr $Val - $ET] < $ValMin} {set ValMin [expr $Val - $ET]} if {$ValMax < [expr $Val + $ET]} {set ValMax [expr $Val + $ET]} } if {0 < $ValMin} {set ValMin 0} if {[expr $ValMax - $ValMin] != 0} { set aX [expr ($XMaxHisto - $XMinHisto) * 1.0 / ($ValMax - $ValMin)] set bX [expr $XMaxHisto - $aX * $ValMax] } else { set aX 0 set bX [expr $XMinHisto + ($XMaxHisto - $XMinHisto) / 2] } if {$ValMin < 0 && 0 < $ValMax} { set XIni $bX } else { set XIni [expr $aX * $ValMin + $bX] } set XMinAxe [expr $aX * $ValMin + $bX] $K create text $XMinAxe $YMinHisto -text $ValMin -anchor s set XMaxAxe [expr $aX * $ValMax + $bX] $K create text $XMaxAxe $YMinHisto -text $ValMax -anchor s #Ordonnees $K create line $XIni $YMinHisto $XIni $YMaxHisto #Abscisse $K create line $XMinAxe $YMinHisto $XMaxAxe $YMinHisto set LargeurColonne [expr ($YMaxHisto-$YMinHisto) * 1.0 / $NbHisto] set YDeRef $YMinHisto foreach LaValeur $Liste { set Quoi [lindex $LaValeur 0] set Couleur [lindex $LaValeur 1] set Val [lindex $LaValeur 2] set ET [lindex $LaValeur 3] set LesTags [lindex $LaValeur 4] if {$ET == ""} {set ET 0 } if {$Couleur == ""} {set Couleur "blue"} set YMin $YDeRef set YMax [expr $YMin + $LargeurColonne] set YMiddle [expr ($YMax - $YMin) * 1.0 / 2 + $YMin] set YDeRef $YMax set X [expr $aX * $Val + $bX] set XMin [expr $aX * ($Val-$ET) + $bX] set XMax [expr $aX * ($Val+$ET) + $bX] $K create rectangle $XIni $YMin $X $YMax -fill $Couleur -tags $LesTags $K create line $X $YMiddle $XMin $YMiddle $K create line $XMin $YMin $XMin $YMax $K create line $X $YMiddle $XMax $YMiddle $K create line $XMax $YMin $XMax $YMax $K create text $XMinAxe $YMiddle -text "$Quoi" -anchor e -tags $LesTags } return $K } proc PlaceLaCourbe {Liste K HMin HMax LMin LMax} { set Largeur [expr $LMax - $LMin + 1] set Hauteur [expr $HMax - $HMin + 1] set BordY [expr $Hauteur / 7] set BordX [expr $Largeur / 7] set DistDesLegendes [expr $Hauteur / 7] set Police "arial 10" set Rayon 2 set XCentre [expr $Largeur*1.0/2 + $LMin] set NbValSurEchelleY 5 set XMinCourbe [expr $BordX + $LMin] set XMaxCourbe [expr ($Largeur * 3.0/4) - $BordX + $LMin] set XMinLegende [expr $XMaxCourbe + 2 * $BordX ] set XMaxLegende [expr $LMax - $BordX ] set YMin [expr $BordY + $HMin] set YMax [expr $Hauteur - 2 * $BordY + $HMin] set Titre [lindex $Liste 0] set ValYMin [lindex $Liste 1] set ValYMax [lindex $Liste 2] set Liste [lrange $Liste 3 end] set ValXMin 1e200 set ValXMax -1e200 set NbCourbes [llength $Liste] foreach LaCourbe $Liste { set ValXini 0 foreach LePoint [lindex $LaCourbe 2] { set ValX [lindex $LePoint 0] if {![EstCeUnNombre $ValX]} { incr ValXini set ValX $ValXini } if {$ValX < $ValXMin} {set ValXMin $ValX} if {$ValXMax < $ValX } {set ValXMax $ValX} } } if {[expr $ValXMax - $ValXMin] != 0} { set aX [expr ($XMaxCourbe - $XMinCourbe) * 1.0 / ($ValXMax - $ValXMin)] set bX [expr $XMaxCourbe - $aX * $ValXMax] } else { set aX 0 set bX [expr $XMinCourbe + ($XMaxCourbe - $XMinCourbe) / 2] } if {[expr $ValYMax - $ValYMin] != 0} { set aY [expr ($YMin - $YMax ) * 1.0 / ($ValYMax - $ValYMin)] set bY [expr $YMin - $aY * $ValYMax] } else { set aY 0 set bY [expr $YMin + ($YMax - $YMin) / 2] } $K create text $XCentre [expr $HMin + $BordY/2] -text [string range $Titre 0 49] -font $Police #Absisse $K create line $XMinCourbe $YMax $XMaxCourbe $YMax #Ordonnee $K create line $XMinCourbe $YMax $XMinCourbe $YMin if {$ValYMin < 0 && 0 < $ValYMax} { $K create line $XMinCourbe [expr $aY * 0 + $bY] $XMaxCourbe [expr $aY * 0 + $bY] -fill grey } if {$ValXMin < 0 && 0 < $ValXMax} { $K create line [expr $aX * 0 + $bX] $YMin [expr $aX * 0 + $bX] $YMax -fill grey } set LesValX {} set LesValY {} set nCourbe 0 set PetitDecalageEnXPourMieuxVoir 0 foreach LaCourbe $Liste { set Legende [lindex $LaCourbe 0] set Color [lindex $LaCourbe 1] if {$Color == ""} {set Color "black"} incr nCourbe set YLegende [expr (($YMax - $YMin) * 1.0/($NbCourbes+1)) * $nCourbe + $YMin] $K create text $XMinLegende $YLegende -text $Legende -fill $Color set ValXini 0 set LesPoints [lindex $LaCourbe 2] if {[info exists XDeRef]} {unset XDeRef} if {[info exists YDeRef]} {unset YDeRef} foreach LePoint $LesPoints { set ValX [lindex $LePoint 0] set ValY [lindex $LePoint 1] set ValET [lindex $LePoint 2] if {![EstCeUnNombre $ValX]} { set TexteValX $ValX incr ValXini set ValX $ValXini } else { set TexteValX $ValX } set X [expr $aX * $ValX + $bX] set Y [expr $aY * $ValY + $bY] if {$ValET != ""} { set YMoinsET [expr $aY * ($ValY - $ValET) + $bY] set YPlusET [expr $aY * ($ValY + $ValET) + $bY] $K create line [expr $X+$PetitDecalageEnXPourMieuxVoir] $YMoinsET [expr $X+$PetitDecalageEnXPourMieuxVoir] $YPlusET -fill $Color } $K create oval [expr $X-$Rayon+$PetitDecalageEnXPourMieuxVoir] [expr $Y-$Rayon] [expr $X+$Rayon+$PetitDecalageEnXPourMieuxVoir] [expr $Y+$Rayon] -fill $Color if {[info exists XDeRef]} { $K create line [expr $XDeRef+$PetitDecalageEnXPourMieuxVoir] $YDeRef [expr $X+$PetitDecalageEnXPourMieuxVoir] $Y -fill $Color } if {![info exists Tab($ValX,X)]} { set Tab($TexteValX,X) $X lappend LesValX $TexteValX } if {![info exists Tab($ValY,Y)]} { set Tab($ValY,Y) $Y lappend LesValY $ValY } set XDeRef $X set YDeRef $Y } incr PetitDecalageEnXPourMieuxVoir } foreach ValX [lsort -unique $LesValX] { set X [set Tab($ValX,X)] $K create text $X $YMax -text $ValX -anchor n -font "arial 10" } for {set i 0} {$i < $NbValSurEchelleY} {incr i} { set ValY [format "%.1f" [expr (($ValYMax - $ValYMin) / ($NbValSurEchelleY - 1)) * $i + $ValYMin]] set Y [expr $aY * $ValY + $bY] $K create text $XMinCourbe $Y -text $ValY -anchor e -font "arial 10" } return $K } proc PlaceLaCourbeAvecInterQuartile {Liste K HMin HMax LMin LMax} { set Largeur [expr $LMax - $LMin + 1] set Hauteur [expr $HMax - $HMin + 1] set BordY [expr $Hauteur / 7] set BordX [expr $Largeur / 7] set DistDesLegendes [expr $Hauteur / 7] set Police "arial 10" set Rayon [expr $Largeur / 150] set XCentre [expr $Largeur*1.0/2 + $LMin] set NbValSurEchelleY 5 set XMinCourbe [expr $BordX + $LMin] set XMaxCourbe [expr ($Largeur * 3.0/4) - $BordX + $LMin] set XMinLegende [expr $XMaxCourbe + 2 * $BordX ] set XMaxLegende [expr $LMax - $BordX ] set YMin [expr $BordY + $HMin] set YMax [expr $Hauteur - 2 * $BordY + $HMin] set Titre [lindex $Liste 0] set ValYMin [lindex $Liste 1] set ValYMax [lindex $Liste 2] set Liste [lrange $Liste 3 end] set ValXMin 1e200 set ValXMax -1e200 set NbCourbes [llength $Liste] foreach LaCourbe $Liste { set ValXini 0 set LesPoints [lindex $LaCourbe 2] foreach LePoint $LesPoints { set ValX [lindex $LePoint 0] if {![EstCeUnNombre $ValX]} { incr ValXini set ValX $ValXini } if {$ValX < $ValXMin} {set ValXMin $ValX} if {$ValXMax < $ValX } {set ValXMax $ValX} } } if {[expr $ValXMax - $ValXMin] != 0} { set aX [expr ($XMaxCourbe - $XMinCourbe) * 1.0 / ($ValXMax - $ValXMin)] set bX [expr $XMaxCourbe - $aX * $ValXMax] } else { set aX 0 set bX [expr $XMinCourbe + ($XMaxCourbe - $XMinCourbe) / 2] } if {[expr $ValYMax - $ValYMin] != 0} { set aY [expr ($YMin - $YMax ) * 1.0 / ($ValYMax - $ValYMin)] set bY [expr $YMin - $aY * $ValYMax] } else { set aY 0 set bY [expr $YMin + ($YMax - $YMin) / 2] } $K create text $XCentre [expr $HMin + $BordY/2] -text [string range $Titre 0 49] -font $Police #Absisse $K create line $XMinCourbe $YMax $XMaxCourbe $YMax #Ordonnee $K create line $XMinCourbe $YMax $XMinCourbe $YMin if {$ValYMin < 0 && 0 < $ValYMax} { $K create line $XMinCourbe [expr $aY * 0 + $bY] $XMaxCourbe [expr $aY * 0 + $bY] -fill grey } if {$ValXMin < 0 && 0 < $ValXMax} { $K create line [expr $aX * 0 + $bX] $YMin [expr $aX * 0 + $bX] $YMax -fill grey } set LesValX {} set LesValY {} set nCourbe 0 set PetitDecalageEnXPourMieuxVoir 0 foreach LaCourbe $Liste { set Legende [lindex $LaCourbe 0] set Color [lindex $LaCourbe 1] if {$Color == ""} {set Color "black"} incr nCourbe set YLegende [expr (($YMax - $YMin) * 1.0/($NbCourbes+1)) * $nCourbe + $YMin] $K create text $XMinLegende $YLegende -text $Legende -fill $Color set ValXini 0 set LesPoints [lindex $LaCourbe 2] if {[info exists XDeRef]} {unset XDeRef} if {[info exists YDeRef]} {unset YDeRef} foreach LePoint $LesPoints { set ValX [lindex $LePoint 0] set ValY [lindex $LePoint 1] set ValQMin [lindex $LePoint 2] set ValQMax [lindex $LePoint 3] set ValExtMin [lindex $LePoint 4] set ValExtMax [lindex $LePoint 5] if {![EstCeUnNombre $ValX]} { set TexteValX $ValX incr ValXini set ValX $ValXini } else { set TexteValX $ValX } set X [expr $aX * $ValX + $bX] set Y [expr $aY * $ValY + $bY] set YQMin [expr $aY * $ValQMin + $bY] set YQMax [expr $aY * $ValQMax + $bY] set YEMin [expr $aY * $ValExtMin + $bY] set YEMax [expr $aY * $ValExtMax + $bY] if {[info exists XDeRef]} { $K create line [expr $XDeRef+$PetitDecalageEnXPourMieuxVoir] $YDeRef [expr $X+$PetitDecalageEnXPourMieuxVoir] $Y -fill $Color } #LigneMediane $K create line [expr $X-$Rayon] $Y [expr $X+$Rayon] $Y -fill $Color #LigneQuartileMin $K create line [expr $X-$Rayon] $YQMin [expr $X+$Rayon] $YQMin -fill $Color #LigneQuartileMax $K create line [expr $X-$Rayon] $YQMax [expr $X+$Rayon] $YQMax -fill $Color #LigneExtremeMin $K create line [expr $X-$Rayon] $YEMin [expr $X+$Rayon] $YEMin -fill $Color #LigneExtremeMax $K create line [expr $X-$Rayon] $YEMax [expr $X+$Rayon] $YEMax -fill $Color $K create line [expr $X-$Rayon] $YQMin [expr $X-$Rayon] $YQMax -fill $Color $K create line [expr $X+$Rayon] $YQMin [expr $X+$Rayon] $YQMax -fill $Color $K create line $X $YQMin $X $YEMin -fill $Color $K create line $X $YQMax $X $YEMax -fill $Color if {![info exists Tab($ValX,X)]} { set Tab($TexteValX,X) $X lappend LesValX $TexteValX } if {![info exists Tab($ValY,Y)]} { set Tab($ValY,Y) $Y lappend LesValY $ValY } set XDeRef $X set YDeRef $Y } incr PetitDecalageEnXPourMieuxVoir } foreach ValX [lsort -unique $LesValX] { set X [set Tab($ValX,X)] $K create text $X $YMax -text $ValX -anchor n -font "arial 10" } for {set i 0} {$i < $NbValSurEchelleY} {incr i} { set ValY [format "%.1f" [expr (($ValYMax - $ValYMin) / ($NbValSurEchelleY - 1)) * $i + $ValYMin]] set Y [expr $aY * $ValY + $bY] $K create text $XMinCourbe $Y -text $ValY -anchor e -font "arial 10" } return $K } proc PlaceLaToileDAraignee {Liste K HMin HMax LMin LMax {Titre ""} {AvecTitre 1} {AvecLegende 1} {AvecVal 1} {AvecValEchelle 1} {AvecLigne 1}} { if {[llength $Liste] <= 1} {lappend Liste [list "" 0 0 1]} if {[llength $Liste] <= 2} {lappend Liste [list "" 0 0 1]} set Largeur [expr $LMax - $LMin + 1] set Hauteur [expr $HMax - $HMin + 1] set XCentre [expr $Largeur*1.0/2 + $LMin] set YCentre [expr $Hauteur*1.0/2 + $HMin] set BordY [expr $Hauteur / 20] set Rayon [expr [Mini $Largeur $Hauteur] / 3] set DistanceDuCentre [expr $Rayon / 5] set Ray [expr $Rayon / 50] set NbValSurEchelle 5 set DistDesLegendes [expr $Hauteur / 20] set Police "arial 10" set LePolygoneDesValeurs {} set LesValeurs {} set LesLegendes {} set LesQuoi {} set pi 3.141592 set EcartAngle [expr 2 * $pi / [llength $Liste]] set AngleDeRef [expr $pi ] foreach LInfo $Liste { set cos [expr cos($AngleDeRef) ] set sin [expr sin($AngleDeRef) * -1] set Quoi [lindex $LInfo 0] set Val [lindex $LInfo 1] set ValMin [lindex $LInfo 2] set ValMax [lindex $LInfo 3] set a [expr ($Rayon - $DistanceDuCentre) * 1.0 / ($ValMax - $ValMin)] set b [expr $Rayon - $a * $ValMax] set ValRelative [expr $a * $Val + $b ] set X [expr $ValRelative * $cos + $XCentre] set Y [expr $ValRelative * $sin + $YCentre] lappend LePolygoneDesValeurs $X lappend LePolygoneDesValeurs $Y lappend LesValeurs $Val lappend LesQuoi $Quoi if {$AvecLegende} { set XText [expr ($Rayon + $DistDesLegendes) * $cos + $XCentre] set YText [expr ($Rayon + $DistDesLegendes) * $sin + $YCentre] set Anchor "" if {$YText < $YCentre} {append Anchor "s"} elseif {$YCentre < $XText} {append Anchor "n"} if {$XText < $XCentre} {append Anchor "e"} elseif {$XCentre < $XText} {append Anchor "w"} lappend LesLegendes [list $Quoi $XText $YText $Anchor] } set Ecart [expr ($ValMax - $ValMin) * 1.0 / ($NbValSurEchelle-1)] for {set i 1} {$i <= $NbValSurEchelle} {incr i} { if {![info exists TabPolygone($i,LesCoords)]} { set TabPolygone($i,LesCoords) {} set TabPolygone($i,LesValeurs) {} set CL "lightgrey";set CF "white";set Position "lower" if {$i == 1 } {set CL "black";set CF "lightgrey";set Position ""} if {$i == $NbValSurEchelle} {set CL "black"} set TabPolygone($i,ColorFill) $CF set TabPolygone($i,ColorLine) $CL set TabPolygone($i,Position) $Position } set ValEchelle [expr ($i - 1) * $Ecart + $ValMin] set ValEchelleRelative [expr $a * $ValEchelle + $b ] lappend TabPolygone($i,LesCoords) [expr $ValEchelleRelative * $cos + $XCentre] lappend TabPolygone($i,LesCoords) [expr $ValEchelleRelative * $sin + $YCentre] lappend TabPolygone($i,LesValeurs) $ValEchelle } set AngleDeRef [expr $AngleDeRef + $EcartAngle] } if {$LePolygoneDesValeurs == {}} {return} if {$AvecTitre && $Titre != ""} { $K create text $XCentre [expr $HMin + $BordY/2] -text $Titre -font $Police } $K create polygon $LePolygoneDesValeurs -outline "red" -fill "orange" if {$AvecLegende} { foreach LaLegende $LesLegendes { set Texte [lindex $LaLegende 0] set X [lindex $LaLegende 1] set Y [lindex $LaLegende 2] set Anchor [lindex $LaLegende 3] if {$Anchor != ""} { $K create text $X $Y -text $Texte -font $Police -anchor $Anchor } else { $K create text $X $Y -text $Texte -font $Police } } } for {set i 1} {$i <= $NbValSurEchelle} {incr i} { set CL [set TabPolygone($i,ColorLine)] set CF [set TabPolygone($i,ColorFill)] set Id [$K create polygon [set TabPolygone($i,LesCoords)] -outline $CF -fill $CF] if {[set TabPolygone($i,Position)] == "lower"} {$K lower $Id} if {[info exists XOld]} {unset XOld} if {[info exists YOld]} {unset YOld} for {set j 0} {$j < [llength [set TabPolygone($i,LesCoords)]]} {incr j 2} { set X [lindex [set TabPolygone($i,LesCoords)] $j ] set Y [lindex [set TabPolygone($i,LesCoords)] [expr $j+1]] set Val [lindex [set TabPolygone($i,LesValeurs)] [expr ($j+1)/2]] if {$AvecLigne && $i == $NbValSurEchelle} {$K create line $XCentre $YCentre $X $Y} if {![info exists XOld]} { set XFirst $X;set YFirst $Y set XOld $X;set YOld $Y if {$AvecValEchelle} {$K create text $X $Y -text $Val -font $Police} continue } $K create line $XOld $YOld $X $Y -fill $CL if {$AvecValEchelle} {$K create text $X $Y -text $Val -font $Police} set XOld $X;set YOld $Y } if {[info exists XFirst]} { $K creat line $XFirst $YFirst $X $Y -fill [set TabPolygone($i,ColorLine)] } } for {set i 0} {$i < [llength $LePolygoneDesValeurs]} {incr i 2} { set X [lindex $LePolygoneDesValeurs $i ] set Y [lindex $LePolygoneDesValeurs [expr $i+1]] set Val [lindex $LesValeurs [expr $i/2]] set Quoi [lindex $LesQuoi [expr $i/2]] if {$AvecVal} { $K create text [expr $X+$Ray] [expr $Y-$Ray] -text $Val -font $Police -anchor s -fill red -tags [list "Val" "$Quoi\n$Val"] } $K create oval [expr $X-$Ray] [expr $Y-$Ray] [expr $X+$Ray] [expr $Y+$Ray] -fill red -tags [list "Val" "$Quoi\n$Val"] } $K bind "Val" "DevoileLaValeur $K %x %y Enter" $K bind "Val" "DevoileLaValeur $K %x %y Leave" return $K } proc PlaceLeCamembert {LesParts K HMin HMax LMin LMax {Titre ""} {AvecLesLegendes 1}} { set pi 3.141592 set Largeur [expr $LMax - $LMin] set Hauteur [expr $HMax - $HMin] set Bord [expr [Mini $Largeur $Hauteur] / 20] set YCentre [expr ($HMax - $HMin ) * 1.0/2 + $HMin] set XCentre [expr ($LMax - $LMin ) * 1.0/2 + $LMin] set Rayon [expr [Mini $Largeur $Hauteur] / 3] set DistanceDuCentre [expr $Rayon / 5] set XMin [expr $XCentre - $Rayon] set XMax [expr $XCentre + $Rayon] set YMin [expr $YCentre - $Rayon] set YMax [expr $YCentre + $Rayon] set PoliceTitre "Arial 15 bold" set PoliceLegende "times 10" $K create text $XCentre [expr $HMin + $Bord/2] -text $Titre -font $PoliceTitre set nTot 0 foreach LaPart $LesParts {set nTot [expr $nTot + [lindex $LaPart 0]]} set AngleMin 0 set LesPartsDuNW {} set LesPartsDuSW {} set LesPartsDuNE {} set LesPartsDuSE {} foreach LaPart $LesParts { set n [lindex $LaPart 0] set Color [lindex $LaPart 1] set PetiteLegende [lindex $LaPart 2] set GrandeLegende [lindex $LaPart 3] set Pourcentage [expr $n * 1.0 / $nTot ] set Ecart [expr 2*$pi*$Pourcentage] set AngleMax [expr $AngleMin + $Ecart] set LesCoord [LesCoordonneesDeLaPart $Rayon $AngleMin $AngleMax $XCentre $YCentre Yes] $K create polygon $LesCoord -outline black -fill $Color -tags [list "Part" "$PetiteLegende" "$GrandeLegende"] set AngleCentre [expr ($AngleMax - $AngleMin) / 2 + $AngleMin] set XArcCentre [expr $XCentre + cos($AngleCentre) * $Rayon] set YArcCentre [expr $YCentre - sin($AngleCentre) * $Rayon] if {$AvecLesLegendes == "Yes"} { if {$XArcCentre < $XCentre && $YArcCentre < $YCentre} { lappend LesPartsDuNW $LaPart set TabTmp($LaPart,XArc) $XArcCentre set TabTmp($LaPart,YArc) $YArcCentre } elseif {$XArcCentre < $XCentre && $YCentre <= $YArcCentre} { lappend LesPartsDuSW $LaPart set TabTmp($LaPart,XArc) $XArcCentre set TabTmp($LaPart,YArc) $YArcCentre } elseif {$XCentre <= $XArcCentre && $YCentre <= $YArcCentre} { lappend LesPartsDuSE $LaPart set TabTmp($LaPart,XArc) $XArcCentre set TabTmp($LaPart,YArc) $YArcCentre } elseif {$XCentre <= $XArcCentre && $YArcCentre < $YCentre} { lappend LesPartsDuNE $LaPart set TabTmp($LaPart,XArc) $XArcCentre set TabTmp($LaPart,YArc) $YArcCentre } } set AngleMin $AngleMax } if {$AvecLesLegendes == "Yes"} { #Les Textes des parts du Texte NE### set nParts [llength $LesPartsDuNE] set XText [expr $XCentre + $Rayon + $Bord] set YTextIni $YCentre set YText $YTextIni set Pos "w" if {$nParts != 0} { foreach Part $LesPartsDuNE { set EcartY [expr ($YCentre - $Bord - $HMin) / ($nParts+1)] set YText [expr $YText - $EcartY] set PetiteLegende [lindex $Part 2] set XArc [set TabTmp($Part,XArc)] set YArc [set TabTmp($Part,YArc)] $K create text $XText $YText -text "$PetiteLegende" -anchor "$Pos" -font $PoliceLegende $K create line $XArc $YArc $XText $YText } } #Les Textes des parts du Texte NW### set nParts [llength $LesPartsDuNW] set XText [expr $XCentre - $Rayon - $Bord] set YTextIni [expr $HMin + $Bord] set YText $YTextIni set Pos "e" if {$nParts != 0} { foreach Part $LesPartsDuNW { set EcartY [expr ($YCentre - $Bord - $HMin) / ($nParts+1)] set YText [expr $YText + $EcartY] set PetiteLegende [lindex $Part 2] set XArc [set TabTmp($Part,XArc)] set YArc [set TabTmp($Part,YArc)] $K create text $XText $YText -text "$PetiteLegende" -anchor "$Pos" -font $PoliceLegende $K create line $XArc $YArc $XText $YText } } #Les Textes des parts du Texte SW### set nParts [llength $LesPartsDuSW] set XText [expr $XCentre - $Rayon - $Bord] set YTextIni $YCentre set YText $YTextIni set Pos "e" if {$nParts != 0} { foreach Part $LesPartsDuSW { set EcartY [expr ($YCentre - $Bord - $HMin) / ($nParts+1)] set YText [expr $YText + $EcartY] set PetiteLegende [lindex $Part 2] set XArc [set TabTmp($Part,XArc)] set YArc [set TabTmp($Part,YArc)] $K create text $XText $YText -text "$PetiteLegende" -anchor "$Pos" -font $PoliceLegende $K create line $XArc $YArc $XText $YText } } #Les Textes des parts du Texte SE### set nParts [llength $LesPartsDuSE] set XText [expr $XCentre + $Rayon + $Bord] set YTextIni [expr $HMax - $Bord] set YText $YTextIni set Pos "w" if {$nParts != 0} { foreach Part $LesPartsDuSE { set EcartY [expr ($YCentre - $Bord - $HMin) / ($nParts+1)] set PetiteLegende [lindex $Part 2] set XArc [set TabTmp($Part,XArc)] set YArc [set TabTmp($Part,YArc)] $K create text $XText $YText -text "$PetiteLegende" -anchor "$Pos" -font $PoliceLegende $K create line $XArc $YArc $XText $YText set YText [expr $YText - $EcartY] } } } $K bind "Part" "DevoileLesPartsDeCamembert $K %x %y Enter" $K bind "Part" "AfficheLesPartsDeCamembert $K %x %y Enter" $K bind "Part" "DevoileLesPartsDeCamembert $K %x %y Leave" return $K } proc PlaceLesGOSurLArbre {K aTabCoord Type Niveau GO {GOPere ""} {MesGO NotDisplayMyGO} {Density No}} { upvar $aTabCoord TabCoord set LesDefinitions [Onto $Type $GO LesDefinitions ] set Definition [lindex $LesDefinitions 0] set LesParents [Onto $Type $GO LesParents ] set LesConstituants [Onto $Type $GO LesConstituants ] set LesJumeaux {} set LesBlastP {} set LesClusters {} set LesAccess {} set LesRequetes {} set LesBoxGscope {} set LesProjetsGscope {} set LesNoms {} set nRequetes 0 if {[OntoExists $Type $GO LesJumeaux ]} { set LesJumeaux [Onto $Type $GO LesJumeaux] } if {[OntoMesGOExists $Type $GO LesBlastP ]} { set LesBlastP [OntoMesGO $Type $GO LesBlastP] } if {[OntoMesGOExists $Type $GO LesClusters ]} { set LesClusters [OntoMesGO $Type $GO LesClusters] } if {[OntoMesGOExists $Type $GO LesAccess ]} { set LesAccess [OntoMesGO $Type $GO LesAccess] } if {[OntoMesGOExists $Type $GO LesRequetes ]} { set LesRequetes [OntoMesGO $Type $GO LesRequetes] } if {[OntoMesGOExists $Type $GO LesProjetsGscope]} { set LesProjetsGscope [OntoMesGO $Type $GO LesProjetsGscope] } if {[OntoMesGOExists $Type $GO LesNoms]} { set LesNoms [OntoMesGO $Type $GO LesNoms] } if {$Density == "All"} { set ToutesLesRequetes [concat $LesClusters $LesBlastP $LesAccess $LesRequetes $LesProjetsGscope $LesNoms] set nRequetes [llength $ToutesLesRequetes] } elseif {$Density == "Access"} { set nRequetes [llength $LesAccess] } elseif {$Density == "Requetes"} { set nRequetes [llength $LesRequetes] } elseif {$Density == "Box"} { set nRequetes [llength $LesNoms] } if {$MesGO == "OnlyMyGO" || $Density != "No" } { set LesEnfants {} if {![OntoMesGOExists $Type $GO]} {return ""} foreach Enfant [Onto $Type $GO LesEnfants] { if {![OntoMesGOExists $Type $Enfant]} {continue} lappend LesEnfants $Enfant } set LesContributions {} foreach Contribution [Onto $Type $GO LesContributions] { if {![OntoMesGOExists $Type $Contribution]} {continue} lappend LesContributions $Contribution } } else { set LesContributions [Onto $Type $GO LesContributions] set LesEnfants [Onto $Type $GO LesEnfants ] } if {$GOPere == ""} { set XMinZone [set TabCoord(XMin)] set XMaxZone [set TabCoord(XMax)] set Color "yellow" set ColorLigne $Color } else { set XMinZone [set TabCoord($GOPere,$GO,XMin) ] set XMaxZone [set TabCoord($GOPere,$GO,XMax) ] set Color [set TabCoord($GOPere,$GO,Color)] set ColorLigne $Color } if {$ColorLigne == "white"} {set ColorLigne "black"} if {$Density != "No" && 1 <= $nRequetes} {set Color [CouleurDeLaPopulation $nRequetes]} set RayonMax [set TabCoord(RayonMax)] set Rayon [expr ($XMaxZone-$XMinZone)/6] if {$RayonMax < $Rayon} {set Rayon $RayonMax} set XCentre [expr $XMinZone + ($XMaxZone - $XMinZone)/2] set Y [set TabCoord($Niveau,Y)] set Distance [expr 2 * $Rayon] if {300 < [expr $XMaxZone - $XMinZone]} { $K create text $XCentre [expr $Y+$Distance] -text [string range $Definition 0 50] -font "arial 12 bold" } elseif {200 < [expr $XMaxZone - $XMinZone]} { $K create text $XCentre [expr $Y+$Distance] -text [string range $Definition 0 30] -font "arial 10" } elseif {100 < [expr $XMaxZone - $XMinZone]} { $K create text $XCentre [expr $Y+$Distance] -text [string range $Definition 0 20] -font "arial 9" } elseif {70 < [expr $XMaxZone - $XMinZone]} { $K create text $XCentre [expr $Y+$Distance] -text [string range $Definition 0 10] -font "arial 8" } elseif {40 < [expr $XMaxZone - $XMinZone]} { $K create text $XCentre [expr $Y+$Distance] -text [string range $Definition 0 10] -font "arial 7" } $K create oval [expr $XCentre-$Rayon] [expr $Y-$Rayon] [expr $XCentre+$Rayon] [expr $Y+$Rayon] -fill $Color -tags [list "GO" "$Type" "$GO" "$Niveau" "$LesDefinitions" "$LesParents" "$LesConstituants" "$LesEnfants" "$LesContributions" "$LesJumeaux" "$LesAccess" "$LesProjetsGscope" "$LesNoms" "$LesBlastP" "$LesRequetes" "$LesClusters" "$nRequetes"] if {$GOPere != ""} { set XPere [set TabCoord($GOPere,$GO,XPere)] set YPere [set TabCoord($GOPere,$GO,YPere)] set Id [$K create line $XPere $YPere $XCentre $Y -fill $ColorLigne -tags [list "GO" "$Type" "$GO" "$Niveau" "$LesDefinitions" "$LesParents" "$LesConstituants" "$LesEnfants" "$LesContributions" "$LesJumeaux" "$LesAccess" "$LesProjetsGscope" "$LesNoms" "$LesBlastP" "$LesRequetes" "$LesClusters" "$nRequetes"]] $K lower $Id } set NiveauSup [expr $Niveau + 1] set LesDescendants [concat $LesEnfants $LesContributions] set nDescendants [llength $LesDescendants ] if {$nDescendants == 0} {return ""} set Ecart [expr ($XMaxZone - $XMinZone)/$nDescendants] set XMinDeRef $XMinZone foreach GOChild $LesEnfants { set XMaxDeRef [expr $XMinDeRef + $Ecart] set TabCoord($GO,$GOChild,XPere) $XCentre set TabCoord($GO,$GOChild,YPere) $Y set TabCoord($GO,$GOChild,XMin) $XMinDeRef set TabCoord($GO,$GOChild,XMax) $XMaxDeRef if { $MesGO == "AllAndMyGO" && [OntoMesGOExists $Type $GOChild Color]} { set TabCoord($GO,$GOChild,Color) [OntoMesGO $Type $GOChild Color] } elseif {$MesGO == "AllAndMyGO" && [OntoMesGOExists $Type Ancetre $GOChild Color]} { set TabCoord($GO,$GOChild,Color) [OntoMesGO $Type Ancetre $GOChild Color] } elseif {$MesGO == "OnlyMyGO" && [OntoMesGOExists $Type $GOChild Color]} { set TabCoord($GO,$GOChild,Color) [OntoMesGO $Type $GOChild Color] } else { set TabCoord($GO,$GOChild,Color) "blue" } set XMinDeRef $XMaxDeRef PlaceLesGOSurLArbre $K TabCoord $Type $NiveauSup $GOChild $GO $MesGO $Density } foreach GOChild $LesContributions { set XMaxDeRef [expr $XMinDeRef + $Ecart] set TabCoord($GO,$GOChild,XPere) $XCentre set TabCoord($GO,$GOChild,YPere) $Y set TabCoord($GO,$GOChild,XMin) $XMinDeRef set TabCoord($GO,$GOChild,XMax) $XMaxDeRef if { $MesGO == "AllAndMyGO" && [OntoMesGOExists $Type $GOChild Color]} { set TabCoord($GO,$GOChild,Color) [OntoMesGO $Type $GOChild Color] } elseif {$MesGO == "AllAndMyGO" && [OntoMesGOExists $Type Ancetre $GOChild Color]} { set TabCoord($GO,$GOChild,Color) [OntoMesGO $Type Ancetre $GOChild Color] } elseif {$MesGO == "OnlyMyGO" && [OntoMesGOExists $Type $GOChild Color]} { set TabCoord($GO,$GOChild,Color) [OntoMesGO $Type $GOChild Color] } else { set TabCoord($GO,$GOChild,Color) "red" } set XMinDeRef $XMaxDeRef PlaceLesGOSurLArbre $K TabCoord $Type $NiveauSup $GOChild $GO $MesGO $Density } } proc PlaceLesNoeudsTaxonomiquesSurLArbre {K aTabCoord aTabTaxon {LesTaxonsAncestraux ""} {LesPhylumsSelectionnees ""} {Qui OnlySelectedTaxons}} { upvar $aTabTaxon TabTaxon upvar $aTabCoord TabCoord set DernierAncetre [lindex $LesTaxonsAncestraux end] set NiveauDuDernierAncetre [llength $LesTaxonsAncestraux ] set IndexAncetres [join $LesTaxonsAncestraux ","] set LesDescendants {} if {[info exists TabTaxon($IndexAncetres,LesDescendants)]} {set LesDescendants [set TabTaxon($IndexAncetres,LesDescendants)]} set LesDescendantsTmp $LesDescendants if {$LesPhylumsSelectionnees != {}} { set AiJeUnPhylumEnCommun 0 foreach LePhylum $LesPhylumsSelectionnees { if {$Qui == "OnlySelectedTaxons" && [llength $LePhylum] < $NiveauDuDernierAncetre} {continue} set n [Mini [llength $LePhylum] $NiveauDuDernierAncetre] set T1 [lindex $LePhylum [expr $n -1]] set T2 [lindex $LesTaxonsAncestraux [expr $n -1]] if {$T1 != $T2} {continue} set AiJeUnPhylumEnCommun 1 } if {!$AiJeUnPhylumEnCommun} {return} set LesDescendantsTmp {} foreach Descendant $LesDescendants { set LesTaxonsTmp [linsert $LesTaxonsAncestraux end $Descendant] set nDescendants [llength $LesTaxonsTmp] set AiJeUnPhylumEnCommun 0 foreach LePhylum $LesPhylumsSelectionnees { set n [Mini [llength $LePhylum] $nDescendants] set T1 [lindex $LePhylum [expr $n -1]] set T2 [lindex $LesTaxonsTmp [expr $n -1]] if {$T1 != $T2} {continue} set AiJeUnPhylumEnCommun 1 } if {!$AiJeUnPhylumEnCommun} {continue} lappend LesDescendantsTmp $Descendant } } set Color "red" set ColorLigne $Color set XMinZone [set TabCoord($IndexAncetres,XMin) ] set XMaxZone [set TabCoord($IndexAncetres,XMax) ] set RayonMax [set TabCoord(RayonMax)] set Rayon [expr ($XMaxZone-$XMinZone)/6] if {$RayonMax < $Rayon} {set Rayon $RayonMax} set X [expr $XMinZone + ($XMaxZone - $XMinZone)/2] set Y [set TabCoord($NiveauDuDernierAncetre,Y)] if {1 < $NiveauDuDernierAncetre} { set IndexAncetresDuPere [join [lrange $LesTaxonsAncestraux 0 [expr $NiveauDuDernierAncetre - 2]] ","] set XAncetre [set TabCoord($IndexAncetresDuPere,X)] set YAncetre [set TabCoord($IndexAncetresDuPere,Y)] set Id [$K create line $XAncetre $YAncetre $X $Y -fill $ColorLigne -tags [list "Taxon" $LesTaxonsAncestraux $LesDescendants]] $K lower $Id } $K create oval [expr $X-$Rayon] [expr $Y-$Rayon] [expr $X+$Rayon] [expr $Y+$Rayon] -fill $Color -tags [list "Taxon" $LesTaxonsAncestraux $LesDescendants] set Distance [expr 2 * $Rayon] if {300 < [expr $XMaxZone - $XMinZone]} { $K create text $X [expr $Y+$Distance] -text [string range $DernierAncetre 0 50] -font "arial 12 bold" } elseif {200 < [expr $XMaxZone - $XMinZone]} { $K create text $X [expr $Y+$Distance] -text [string range $DernierAncetre 0 30] -font "arial 10" } elseif {100 < [expr $XMaxZone - $XMinZone]} { $K create text $X [expr $Y+$Distance] -text [string range $DernierAncetre 0 20] -font "arial 9" } elseif {70 < [expr $XMaxZone - $XMinZone]} { $K create text $X [expr $Y+$Distance] -text [string range $DernierAncetre 0 10] -font "arial 8" } elseif {40 < [expr $XMaxZone - $XMinZone]} { $K create text $X [expr $Y+$Distance] -text [string range $DernierAncetre 0 10] -font "arial 7" } if {$LesDescendants == {} } {return} set Ecart [expr ($XMaxZone - $XMinZone)/[llength $LesDescendantsTmp]] set XMinDeRef $XMinZone foreach Taxon $LesDescendantsTmp { set IndexTaxons [join [linsert $LesTaxonsAncestraux end $Taxon] ","] set XMaxDeRef [expr $XMinDeRef + $Ecart] set TabCoord($IndexAncetres,X) $X set TabCoord($IndexAncetres,Y) $Y set TabCoord($IndexTaxons,XMin) $XMinDeRef set TabCoord($IndexTaxons,XMax) $XMaxDeRef PlaceLesNoeudsTaxonomiquesSurLArbre $K TabCoord TabTaxon [linsert $LesTaxonsAncestraux end $Taxon] $LesPhylumsSelectionnees $Qui set XMinDeRef $XMaxDeRef } return } proc PlaceNoeudDansTreeAllGO {K Type Individu CheminDuPere {PartOfOuSubclassOf ""} {aTabDesExceptions ""} {OpenOuClose Close}} { upvar $aTabDesExceptions TabDesExceptions if {$aTabDesExceptions != "" && [info exists TabDesExceptions($Individu)]} {return} ImageDirectory idir ImageFile ifile ImagePartOf ipartof ImageSubclassOf isubclassof set Definition [lindex [GODB Type $Type GO $Individu LesDefinitions] 0] regsub -all " |\/" $Definition "_" Definition set Chemin "$CheminDuPere/${Individu}_$Definition" if {[string equal -nocase $PartOfOuSubclassOf "PartOf"]} { Tree:newitem $K $Chemin -image ipartof } elseif {[string equal -nocase $PartOfOuSubclassOf "SubclassOf"]} { Tree:newitem $K $Chemin -image isubclassof } else { Tree:newitem $K $Chemin -image ifile } TreeOpenOuClose $K $Chemin $OpenOuClose foreach GOChild [GODB Type $Type GO $Individu LesEnfants] { if {$GOChild == ""} {continue} if {$aTabDesExceptions != "" && [info exists TabDesExceptions($GOChild)]} {continue} PlaceNoeudDansTreeAllGO $K $Type $GOChild $Chemin "PartOf" TabDesExceptions $OpenOuClose } foreach GOChild [GODB Type $Type GO $Individu LesContributions] { if {$GOChild == ""} {continue} if {$aTabDesExceptions != "" && [info exists TabDesExceptions($GOChild)]} {continue} PlaceNoeudDansTreeAllGO $K $Type $GOChild $Chemin "SubclassOf" TabDesExceptions $OpenOuClose } return } proc Plateau {} { global PAD TFB global CouleurDuFondDeUnCanva set CouleurDuFondDeUnCanva "black" if {0} { set w .f frame $w grid $w -row 0 -column 0 -sticky news grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 set PAD $w.can canvas $PAD -height $TFB(dimY) -scrollregion [list 0 0 $TFB(dimX) $TFB(dimY)] -width $TFB(dimX) -background black grid $PAD -row 0 -column 0 -sticky news FenetreAuCentre $w } set PAD [UnCanva $TFB(dimX) $TFB(dimY) $TFB(dimX) $TFB(dimY)] set ::go 0 bind $PAD BougeFourmi if {$TFB(mur)} { set x1 [expr {0.2 * $TFB(dimX)}] set x2 [expr {0.8 * $TFB(dimX)}] set y1 [expr {$TFB(dimY)/2}] set y2 [expr {$y1 + 50}] $PAD create rectangle $x1 $y1 $x2 $y2 -fill grey -outline white -tags [list "mur"] } # trace les boules foreach col {red cyan yellow} nBalls [list [set TFB(nRouges)] [set TFB(nJaunes)] [set TFB(nBleues)]] { for {set i 0} {$i < $nBalls} {incr i} { set ok 0 while {! $ok} { set x [expr {round($TFB(dimX)*rand())}] set y [expr {round($TFB(dimY)*rand())}] set x1 [expr {$x - $TFB(rad)}] set x2 [expr {$x + $TFB(rad)}] set y1 [expr {$y - $TFB(rad)}] set y2 [expr {$y + $TFB(rad)}] # test boule sur le plateau if {$x1 < $TFB(rad) || $y1 < $TFB(rad)} { continue } if {$x2 > ($TFB(dimX)-$TFB(rad)) || $y2 > ($TFB(dimY)-$TFB(rad))} { continue } # rajoute rad pour que les boules # soitent ecartees d'une boule set x1f [expr {$x - 2.*$TFB(rad)}] set x2f [expr {$x + 2.*$TFB(rad)}] set y1f [expr {$y - 2.*$TFB(rad)}] set y2f [expr {$y + 2.*$TFB(rad)}] if {[$PAD find overlapping $x1f $y1f $x2f $y2f] == {}} { set ok 1 } } $PAD create oval $x1 $y1 $x2 $y2 -fill $col -outline $col -tags [list ball $col libre] #puts "id $id $x1 $y1 $x2 $y2" } } return } proc PlateauOkOld {{Plateau ""}} { set Plateau [PiqueAssiette $Plateau "GetPlateau"] set Ok "Tout est bon" set Min 9999999999999 set Max -1 set NbPresents 0 foreach Nom [ListeDesPABs] { set Gz $Plateau/$Nom if {[FileAbsent $Gz]} { set Ok "Il en manque :'(" FaireLire "$Gz n'existe pas !!!!" Espionne "$Nom !!!!!!!!!!!!!!!!!!!!!!!! n'existe pas" continue } incr NbPresents set N [file size $Gz] Espionne "$Nom $N" set Min [Mini $Min $N] set Max [Maxi $Max $N] } Espionne "Il y a $NbPresents Gz dont la taille varie de $Min à $Max" return $Ok } proc PlotRScores {} { global TableScore ListeScore set LMethods [list Norm Thompson Ranganatan VolPol Liu Liu2 RPCA Entrop1 Entrop2 EnpCube] set NClasses 12 foreach meth $LMethods { unset -nocomplain TableScore ScoreDe$meth "" CreeListeScore "" "" NormalisationColonnes 1 set Lv [ExtraitListeDeListe $ListeScore 1] puts [join [Rpipe "pdf('${meth}.pdf')"] \n] #Rpipe "x11(title='$meth')" puts [join [Rpipe "A$meth <- c([join $Lv ,])"] \n] puts [join [Rpipe "print(range(A$meth))"] \n] puts [join [Rpipe "print(diff(range(A$meth)))"] \n] Rpipe "bp <- c(min(A$meth)*1.00001,diff(range(A$meth))*(1:($NClasses-1))/${NClasses}+min(A$meth),max(A$meth)*1.00001)" puts [join [Rpipe "print(bp)"] \n] puts [join [Rpipe "print(hist(A$meth,breaks='Scott',freq=T))"] \n] #Rpipe "rm(All)" puts [join [Rpipe "dev.off()"] \n] } return } proc Plotte {Nous Vous NosPos VosPos {MinX ""} {MaxX ""} {MinY ""} {MaxY ""} {Orga ""} {PourGif ""}} { Wup "Creates the dotplot with the lists" global DotPlotDesProches global ScrollRectangleOriginal global IdScrollRectangle global LesDotPlotCourants global ParametresDuDotPlot global PlottePourBlastN global LesOrdresPourGif Gs "Canvas" set Titre "Dotplot of [NotreOS] versus $Orga" if {$PourGif!="" || $MinX=="PourGif"} { set PourGif 1 } else { set PourGif 0 } if {$PourGif} { set Canvas NeRienFaire set Bind NeRienFaire set Pack NeRienFaire set Fram NeRienFaire set Button NeRienFaire set Scrollbar NeRienFaire set Grid NeRienFaire set FonctionRejetteLaBoite "RejetteLaBoite" set LesOrdresPourGif {} set w "PourGif" set K "OrdrePourGif" } else { set Canvas canvas set Bind bind set Pack pack set Fram frame set Button button set Scrollbar scrollbar set Grid grid set FonctionRejetteLaBoite "NeRejettePasLaBoite" set w [NomDe dotplot] catch {destroy $w} toplevel $w wm title $w "$Titre" wm iconname $w "$Titre" set K $w.canvas } set xOld 0 set yOld 0 set CentreWindow 5 set LargeurWindow [expr 2*$CentreWindow+1] set LesPentes {} set LesXaNoter {} set Premiere 0 set PenteLisseeCourante 0 set NosSuivants $NosPos set VosSuivants $VosPos foreach x $NosPos y $VosPos { set NosSuivants [lrange $NosSuivants 1 end] set VosSuivants [lrange $VosSuivants 1 end] if { ! [info exists DansLaColonne($x)]} { set DansLaColonne($x) 0 } incr DansLaColonne($x) set PenteLissee($x) $PenteLisseeCourante if {$DotPlotDesProches} { set Pente 0 if { 0 } { if {[expr abs($y-$yOld) < 10*abs($x-$xOld)]} { set Proches($x,$y) 1 set Proches($xOld,$yOld) 1 } } else { foreach xs $NosSuivants ys $VosSuivants { if {$xs==$x} { continue } set DX [expr abs($x-$xs)] set DY [expr abs($y-$ys)] if { $DX > 5000 } { break } if { [expr abs($DX-$DY)] < 500 } { set Proches($x,$y) 1 set Proches($xs,$ys) 1 break } } } if {[info exists Proches($x,$y)]} { if {[expr ($y-$yOld)*($x-$xOld) == 0]} { set Pente 0 } else { set Pente [expr (($y-$yOld)*($x-$xOld))/abs(($y-$yOld)*($x-$xOld))] } } set xOld $x set yOld $y if {[llength $LesPentes] > 0} { set Premiere [lindex $LesPentes 0] } if {[llength $LesXaNoter] == $CentreWindow} { set LesPentes [lreplace $LesPentes 0 0] } if {[llength $LesPentes] == $LargeurWindow} { set LesPentes [lreplace $LesPentes 0 0] set PenteLisseeCourante [expr $PenteLisseeCourante - $Premiere] } lappend LesPentes $Pente lappend LesXaNoter $x set PenteLisseeCourante [expr $PenteLisseeCourante + $Pente] set PenteLissee([lindex $LesXaNoter 0]) $PenteLisseeCourante } } if { $MinX == "" } { set MinX 99999999 set MaxX -99999999 set MinY 99999999 set MaxY -99999999 foreach x $NosPos y $VosPos { set MinX [Mini $MinX $x] set MaxX [Maxi $MaxX $x] set MinY [Mini $MinY $y] set MaxY [Maxi $MaxY $y] } } set MinXY [Mini $MinX $MinY] set MaxXY [Maxi $MaxX $MaxY] set LargeurMaxi [expr ($MaxX)] set HauteurMaxi [expr ($MaxY)] set LargeurVoulue [expr (512*$MaxX)/$MaxXY] set HauteurVoulue [expr (512*$MaxY)/$MaxXY] set CanvaScroMinX 0 set CanvaScroMinY 0 set CanvaScroMaxX $LargeurMaxi set CanvaScroMaxY $HauteurMaxi set ScroHor $w.hscroll set ScroVer $w.vscroll set KShSv $w.grid set Boutons $w.buttons $Fram $Boutons $Pack $Boutons -side bottom -fill x -pady 2m $Button $Boutons.dismiss -text "Dismiss" -background "red" -command "DetruireLeDotPlot $w" $Pack $Boutons.dismiss -side left -expand 1 $Button $Boutons.postscript -text "Zoom/UnZoom/Reset\nGif/Postscript/Print" -background "yellow" $Bind $Boutons.postscript <1> "Gonfle $w all gonfle gonfle" $Bind $Boutons.postscript <2> "Gonfle $w all degonfle degonfle" $Bind $Boutons.postscript <3> "Gonfle $w all reset reset" $Bind $Boutons.postscript "CanvaEnPNG $K" $Bind $Boutons.postscript "CanvaEnPostscript $K Visible AskF" $Bind $Boutons.postscript "CanvaEnImpression $K" $Pack $Boutons.postscript -side left -expand 1 $Button $Boutons.manuel -text "Line manual v/vh/h\nLines in file v/vh/h\nLines from TRNAs" $Bind $Boutons.manuel <1> "DemarcationEnPosition $K v" $Bind $Boutons.manuel <2> "DemarcationEnPosition $K vh" $Bind $Boutons.manuel <3> "DemarcationEnPosition $K h" $Bind $Boutons.manuel "DemarcationEnPositionDansFichier $K v" $Bind $Boutons.manuel "DemarcationEnPositionDansFichier $K vh" $Bind $Boutons.manuel "DemarcationEnPositionDansFichier $K h" $Bind $Boutons.manuel "DemarcationDesTRNAs $K v" $Bind $Boutons.manuel "DemarcationDesTRNAs $K vh" $Bind $Boutons.manuel "DemarcationDesTRNAs $K h" $Pack $Boutons.manuel -side left -expand 1 $Button $Boutons.saverest -text "Save/Replace/Append\nvertical lines" $Bind $Boutons.saverest <1> "SauveLaDemarcation $K" $Bind $Boutons.saverest <2> "RestaureUneDemarcation $K" $Bind $Boutons.saverest <3> "AppendUneDemarcation $K" $Pack $Boutons.saverest -side left -expand 1 $Button $Boutons.demarcation -text "To Rosac/DotPl/ Recomb\nLabels vert/hori/all\nErase vert/hori/all" -background "green" $Bind $Boutons.demarcation <1> "DemarqueLaRosace $K" $Bind $Boutons.demarcation <2> "DemarqueLeDotPlot $K" $Bind $Boutons.demarcation <3> "RosaceDuDotPlot $K" $Bind $Boutons.demarcation "Demarcation rev $K" $Bind $Boutons.demarcation "Demarcation reh $K" $Bind $Boutons.demarcation "Demarcation re $K" $Bind $Boutons.demarcation "Demarcation dallv_ifyes $K " $Bind $Boutons.demarcation "Demarcation dallh_ifyes $K" $Bind $Boutons.demarcation "Demarcation dall_ifyes $K" $Pack $Boutons.demarcation -side left -expand 1 $Fram $KShSv $Scrollbar $ScroHor -orient horiz -command "$K xview" $Scrollbar $ScroVer -command "$K yview" $Canvas $K -width $LargeurVoulue -height $HauteurVoulue $K configure -scrollregion [list $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY] -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" set IdScrollRectangle($K) [$K create rectangle $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY -outline "lightgrey" -tag [list "Cadre"]] set ScrollRectangleOriginal($K) "[$K coords [set IdScrollRectangle($K)]]" set ParametresDuDotPlot($K,MinX) $MinX set ParametresDuDotPlot($K,MaxX) $MaxX set ParametresDuDotPlot($K,MinY) $MinY set ParametresDuDotPlot($K,MaxY) $MaxY set ParametresDuDotPlot($K,LargeurMaxi) $LargeurMaxi set ParametresDuDotPlot($K,HauteurMaxi) $HauteurMaxi set PosCourbe 900 set OldPosX 0 set OldPosY $PosCourbe set Tracons 0 foreach Moi $Nous Toi $Vous MaPos $NosPos TaPos $VosPos { if { $DotPlotDesProches && ! [info exists Proches($MaPos,$TaPos)]} { continue } set MonC [expr (($MaPos-$MinX)*$LargeurMaxi)/($MaxX-$MinX)] set TonC [expr (($TaPos-$MinY)*$HauteurMaxi)/($MaxY-$MinY)] set PenteCourante [set PenteLissee($MaPos)] if {$PenteCourante < 0} { set Couleur "blue" } if {$PenteCourante == 0} { set Couleur "grey" } if {$PenteCourante > 0} { set Couleur "red" } # $K create line $OldPosX $OldPosY $MonC [expr $PosCourbe-5*$PenteCourante] set OldPosX $MonC set OldPosY [expr $PosCourbe-5*$PenteCourante] if {[info exists PlottePourBlastN]} { if {$Tracons} { set MonF $MonC set TonF [expr $HauteurMaxi-$TonC] # set Moi "$MoiD $MonC" # set Toi "$ToiD $TonC" if {$PourGif} { set LesTags [list "WebEnter" "$Moi $Toi"] } else { set LesTags [list "$Moi" "$Toi" "Coeur"] } $K create line $MonD $TonD $MonF $TonF -fill "red" -tags $LesTags set Tracons 0 } else { set MoiD $MonC set ToiD $TonC set MonD $MonC set TonD [expr $HauteurMaxi-$TonC] set Tracons 1 } continue } else { set L 300 if {$PourGif} { set LesTags [list "WebEnter" "$Moi $Toi"] } else { set LesTags [list "$Moi" "$Toi" "Coeur"] } $K create rect [expr $MonC-$L] [expr $HauteurMaxi-$TonC-$L] [expr $MonC+$L] [expr $HauteurMaxi-$TonC+$L] -tags $LesTags -outline $Couleur -fill $Couleur } } $Grid rowconfig $KShSv 0 -weight 1 -minsize 0 $Grid columnconfig $KShSv 0 -weight 1 -minsize 0 $Grid $K -in $KShSv -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew $Grid $ScroVer -in $KShSv -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew $Grid $ScroHor -in $KShSv -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew $Pack $KShSv -expand yes -fill both -padx 1 -pady 1 $K bind "Coeur" <1> "PointeDotPlot $K %x %y" $K bind "Coeur" "EntreDansCoeur $K %x %y" $K bind "Coeur" "SortDeCoeur $K %x %y" $K bind "Coeur" "Demarcation v $K %x %y" $K bind "Coeur" "Demarcation vh $K %x %y" $K bind "Coeur" "Demarcation h $K %x %y" $K bind "Coeur" "" $K bind "Coeur" "" $K bind "Ligne" "Demarcation d $K %x %y" $K bind "Etiquette" <1> "GereLesZoneEtiquettee $K %x %y text Point" $K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text Motion" $K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text Relache" $K bind "Etiquette" <2> "GereLesZoneEtiquettee $K %x %y text Erase ; Demarcation d $K %x %y" $K bind "Etiquette" <3> "GereLesZoneEtiquettee $K %x %y text ModifCouleur" $K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text ModifTaille" $K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text ModifTexte" # $Bind $K <1> "PointeDotPlot $K %x %y" $Bind $K <2> "$K scan mark %x %y" $Bind $K "$K scan dragto %x %y" lappend LesDotPlotCourants $K set FacteurX [expr (1.0*$LargeurVoulue)/$LargeurMaxi] set FacteurY [expr (1.0*$HauteurVoulue)/$HauteurMaxi] if {! $PourGif} { Gonfle $w all $FacteurX $FacteurY } if {$PourGif} { return $LesOrdresPourGif } if { 0 && [PourWscope]} { return $w } else { return $K } } proc PlusDeRasMol {} { global tcl_platform global LiaisonCoupee if {$tcl_platform(platform) eq "windows"} { set LesInterps [dde services TclEval rasmol] } else { set LesInterps [winfo interps] } if {[regexp "rasmol" [join $LesInterps "\n"]]} { return 0 } else { return 1 } } proc PlusLongEltDe {l {quoi lgt}} { set max -1 set val "" set iv -1 set i 0 foreach e $l { set v [string length $e] if {$v > $max} { set max $v set val $e set ix $i } incr i } switch $quoi { "lgt" {return $max} "val" {return $val} "idx" {return $ix} } } proc PlusLongNomAff {AId} { global Abr set t [set Abr(Arbre,$AId)] set Lm -1 set Nom "" foreach n [$t leaves] { set NAff [NomAffiche $AId $n] set Lg [font measure "TreeFont$AId" $NAff] if {$Lg > $Lm} { set Lm $Lg } } return $Lm } proc PlusProcheCodon {Ref LesPossibles} { foreach Rare [CodonsRares LaListeMerci] { set EstRare($Rare) 1 } set Ref [string toupper $Ref] set PlusProche "" set OldEgaux -2 foreach Codon $LesPossibles { set Codon [string toupper $Codon] if {[info exists EstRare($Codon)]} { set nEgaux -1 } else { set nEgaux 0 foreach A [split $Ref ""] B [split $Codon ""] { if {$A==$B} { incr nEgaux } } } if {$nEgaux > $OldEgaux} { set OldEgaux $nEgaux set PlusProche $Codon } } return $PlusProche } proc PlusProcheCouleur {Couleur {Format ""}} { set MaxDist2 99999999999 foreach Rgb [FromTkCol ListOf rgb] { set Dist2 0 foreach c $Couleur r $Rgb { set Dist2 [expr $Dist2 + ($c-$r)**2] } if {$Dist2>=$MaxDist2} { continue } set MaxDist2 $Dist2 set PlusProcheCouleur $Rgb } return [CouleurFormat $PlusProcheCouleur $Format "3x8"] } proc PlusProcheOrganismeDuBlast {NomOuFichierBlast} { global RepertoireDuGenome if {[regexp "/" $NomOuFichierBlast]} { set FichierBlast $NomOuFichierBlast set Nom [file tail $NomOuFichierBlast] } else { set Nom $NomOuFichierBlast set FichierBlast "[RepertoireDuGenome]/blastp/$Nom" } set Var 0.0 if {![file exists $FichierBlast]} {return ""} DepouilleLeBlast TabBlast $FichierBlast if {![info exists TabBlast(NbSubject)]} {return ""} set LesProteines {} set NMax 0 set NbSubject [set TabBlast(NbSubject) ] for {set i 1} {$i <= $NbSubject} {incr i} { set BIdProt [set TabBlast($i) ] set N [NombreDeBasesEnCommun_TabBlast TabBlast $BIdProt] set Id [PourcentageDIdentiteGlobal_TabBlast TabBlast $BIdProt] Espionne "$BIdProt $N" set Access $TabBlast($BIdProt,Access) lappend LesProteines [list $BIdProt $N $Id $Access] if {[expr $N < (3*$NMax)/4]} { break } if {$NMax < $N} {set NMax $N} } set NMaxMin [expr $NMax * (1 - $Var)] if {$LesProteines == {}} {return ""} set AccessmRNA "" set TousLesOSs {} Espionne $Nom Espionne $LesProteines foreach LaProteine [lsort -integer -index 1 -decreasing [lsort -real -index 2 -decreasing $LesProteines]] { Espionne $LaProteine set N [lindex $LaProteine 1] if {$N < $NMaxMin} {break} set BIdProt [lindex $LaProteine 0] set Access [lindex $LaProteine 3] Espionne $Access set LesOSs [LesOrgasDeLAccess $Access] Espionne $LesOSs if {$LesOSs!={}} { LConcat TousLesOSs $LesOSs } } Espionne $LaProteine if {$TousLesOSs=={}} { return "" } set TousLesOSs [lsort -unique $TousLesOSs] return [join $TousLesOSs ":"] } proc PlusProcheOrganismeDuBlastPourTous {} { set FichierOrganismesDesPABs "[RepertoireDuGenome]/fiches/organismesdespabs" if {[file exists $FichierOrganismesDesPABs]} { foreach Ligne [LesLignesDuFichier $FichierOrganismesDesPABs] { scan $Ligne "%s" NomLu set DejaVu($NomLu) 1 } } foreach Nom [ListeDesPABs] { if {[info exists DejaVu($Nom)]} { continue } set OS [PlusProcheOrganismeDuBlast $Nom] AppendAuFichier $FichierOrganismesDesPABs "$Nom $OS" } return $FichierOrganismesDesPABs } proc PlusProcheOrganismeDuNarcissePourTous {} { set FichierOrganismesDesPABs "[RepertoireDuGenome]/fiches/organismesdespabs" if {[file exists $FichierOrganismesDesPABs]} { foreach Ligne [LesLignesDuFichier $FichierOrganismesDesPABs] { scan $Ligne "%s" NomLu set DejaVu($NomLu) 1 } } foreach Nom [ListeDesPABs] { if {[info exists DejaVu($Nom)]} { continue } set Narcisse [Narcisse $Nom] if {$Narcisse=="" || $Narcisse==$Nom} { continue } set OS [OrgaDuAccess $Narcisse] if {$OS==""} { continue } AppendAuFichier $FichierOrganismesDesPABs "$Nom $OS" } return $FichierOrganismesDesPABs } proc PofMut {{Oli ""}} { global PofMut if {$Oli==""} { return [list "PofMut GR-M1" "PofMut GR-M1-H602R" "PofMut PGS002 H602R" "PofMut LaListeDesOligos" "PofMut LaListeDesPs" "PofMut LesPofMut"] } if {[info exists PofMut($Oli)]} { return [set PofMut($Oli)] } if {[info exists PofMut("EstCharge")] && $Oli!="LesPofMut"} { return [set PofMut("EstCharge")] } if {[info exists PofMut("EstCharge")] && $Oli=="LesPofMut"} { set LeTexte {} foreach O [array names PofMut] { if {[regexp "EstCharge|LaListe" $O]} { continue } set LesPs [set PofMut($O)] set P [lindex $LesPs 0] set LesAutresPs [lrange $LesPs 1 end] set RefIGBMC [format "%-14s" [OlIgbmc $P]] set Texte "$P $RefIGBMC [format "%-25s" $O]" if {$LesAutresPs!={}} { append Texte " with [join $LesAutresPs " "]" } lappend LeTexte $Texte } set LeTexte [lsort $LeTexte] return $LeTexte } if {[info exists PofMut]} { unset PofMut } set FichierPofMut "[RepertoireDuGenome]/fiches/PofMut" if { ! [file exists $FichierPofMut] } { if { ! [OuiOuNon "Do I create fiches/PofMut with ./oligos/* ?"]} { set PofMut("EstCharge") "" return "NoValueAvalaible" } foreach P [Oli "LaListeMerci"] { if {[Oli $P Type]!="MutOli"} { continue } lappend PofMut(LaListeDesPs) $P set Sens [Oli $P "Sens"] if {$Sens=="5'"} { set FouR "F" } else { set FouR "R" } set Code [Oli $P "CodeMutation"] set LesSujets [Oli $P "Subjects"] foreach Sujet $LesSujets { lappend PofMut($Sujet-$FouR) $P lappend PofMut(LaListeDesOligos-$FouR) $P set PofMut($Sujet-$Code-$FouR) $P if {$Sens=="5'"} { lappend PofMut($Sujet) $P set PofMut($Sujet-$Code) $P lappend PofMut(LaListeDesOligos) $P } } } SauveLesLignes [array get PofMut] dans $FichierPofMut return [PofMut $Oli] } array set PofMut [LesLignesDuFichier $FichierPofMut] set PofMut("EstCharge") "" return [PofMut $Oli] set LesOlis [lsort [array names PofMut]] set PofMut(LaListeDesOligos) $LesOlis set LesP {} foreach O $LesOlis { lappend LesP [set PofMut($O)] } set PofMut(LaListeDesPs) [lsort -unique $LesP] return [PofMut $Oli] } proc PofOl {{Oli ""}} { global PofOl if {$Oli==""} { return [list "PofOl \"Sujet === SignalAvant === \"" "PofOl \"Sujet === === SignalAPres\"" "PofOl P1234" "PofOl LaListeDesOligos" "PofOl LaListeDesPs" "PofOl LesPofOl"] } if {[regexp "===$" $Oli]} { append Oli " " } if {[info exists PofOl($Oli)]} { return [set PofOl($Oli)] } if {[info exists PofOl("EstCharge")] && $Oli!="LesPofOl"} { return [set PofOl("EstCharge")] } if {[info exists PofOl("EstCharge")] && $Oli=="LesPofOl"} { set LeTexte {} foreach O [PofOl "LaListeDesOligos"] { if {[regexp "EstCharge|LaListe" $O]} { continue } set LesPs [set PofOl($O)] set WarningBrocOli "" foreach P $LesPs { if {[Oli $P "IsRebuildedBrockenOli"]} { set Brocken [Oli $P "Brocken"] append WarningBrocOli " $P rebuilded BrocOli from $Brocken" } } set Premier [lindex $LesPs 0] set RefIGBMC [format "%-14s" [OlIgbmc $Premier]] set Four [string range "[Fournisseur $Premier] " 0 4] lappend LeTexte "[join $LesPs " "] $Four $RefIGBMC [format "%-50s" $O] $WarningBrocOli" } set LeTexte [lsort $LeTexte] return $LeTexte } if {[info exists PofOl]} { unset PofOl } set FichierPofOl "[RepertoireDuGenome]/fiches/PofOl" if { ! [file exists $FichierPofOl] } { return "NoValueAvalaible" } array set PofOl [LesLignesDuFichier $FichierPofOl] set LesOlis {} set LesPs {} foreach N [lsort [array names PofOl]] { if {[EstUnP $N]} { lappend LesPs $N } if {[regexp "===" $N]} { lappend LesOlis $N } } foreach O $LesOlis { set SesP [split $PofOl($O) " "] foreach P $SesP { if { ! [EstUnP $P]} { continue } lappend LesP $P lappend PofOl($P) $O } } set LesPs [lsort -unique $LesP] set PofOl(LaListeDesPs) $LesP set PofOl(LaListeDesOligos) $LesOlis set PofOl("EstCharge") "" return [PofOl $Oli] } proc PofPPCR {{Quoi ""}} { if {$Quoi==""} { set Quoi "5_3" } set LesPofPPCR {} foreach PPCR [lsort -unique [concat [P5ofPPCR "LaListeDesPPCRs"] [P3ofPPCR "LaListeDesPPCRs"]]] { set P5 " " set LesP5s [P5ofPPCR $PPCR] if {$LesP5s!={}} { set P5 [join $LesP5s " "] } set P3 " " set LesP3s [P3ofPPCR $PPCR] if {$LesP3s!={}} { set P3 [join $LesP3s " "] } if {[regexp "5" $Quoi]} { lappend LesPofPPCR "$P5 $PPCR" } if {[regexp "3" $Quoi]} { lappend LesPofPPCR "$P3 $PPCR" } lappend LesPofPPCR "" } return $LesPofPPCR } proc PofSeq {{Oli ""}} { global PofSeq if {$Oli==""} { return [list "PofSeq GR" "PofSeq PGS002" "PofSeq LaListeDesOligos" "PofSeq LaListeDesPs" "PofSeq LesPofSeq"] } if {[info exists PofSeq($Oli)]} { return [set PofSeq($Oli)] } if {[info exists PofSeq("EstCharge")] && $Oli!="LesPofSeq"} { return [set PofSeq("EstCharge")] } if {[info exists PofSeq("EstCharge")] && $Oli=="LesPofSeq"} { set LeTexte {} foreach O [array names PofSeq] { if {[regexp "EstCharge|LaListe" $O]} { continue } set LesPs [set PofSeq($O)] lappend LeTexte "[join $LesPs " "] $O" } set LeTexte [lsort $LeTexte] return $LeTexte } if {[info exists PofSeq]} { unset PofSeq } set FichierPofSeq "[RepertoireDuGenome]/fiches/PofSeq" if { ! [file exists $FichierPofSeq] } { if { ! [OuiOuNon "Do I create fiches/PofSeq with ./oligos/* ?"]} { set PofSeq("EstCharge") "" return "NoValueAvalaible" } foreach P [Oli "LaListeMerci"] { if {[Oli $P Type]!="SeqOli"} { continue } lappend PofSeq(LaListeDesPs) $P set Sens [Oli $P "Sens"] if {$Sens=="5'"} { set FouR "F" } else { set FouR "R" } set LesSujets [Oli $P "Subjects"] foreach Sujet $LesSujets { lappend PofSeq($Sujet-$FouR) $P lappend PofSeq(LaListeDesOligos-$FouR) $P if {$Sens=="5'"} { lappend PofSeq($Sujet) $P lappend PofSeq(LaListeDesOligos) $P } } } SauveLesLignes [array get PofSeq] dans $FichierPofSeq return [PofSeq $Oli] } array set PofSeq [LesLignesDuFichier $FichierPofSeq] set PofSeq("EstCharge") "" return [PofSeq $Oli] set LesOlis [lsort [array names PofSeq]] set PofSeq(LaListeDesOligos) $LesOlis set LesP {} foreach O $LesOlis { lappend LesP [set PofSeq($O)] } set PofSeq(LaListeDesPs) [lsort -unique $LesP] return [PofSeq $Oli] } proc PointVirgule {Path} { # Prepare un fichier CSV avec des ";" en remplacant les espaces par des "_" et les ";" par des tabulations set FichierIn [open "$Path.txt" "r"] set FichierOut [open "$Path.csv" "w"] set PrevLigne "" while { [gets $FichierIn Ligne] >=0 } { if {[regexp -all "UPDATE" $Ligne ]} { set PrevLigne "$PrevLigne;" } puts $FichierOut $PrevLigne set PrevLigne $Ligne } close $FichierIn close $FichierOut } proc PointeDotPlot {K X Y} { global RepertoireDuGenome set Contig "InconnuBlaBlaBla" set Id [$K find withtag current] set Moi [lindex [$K gettags $Id] 0] set Toi [lindex [$K gettags $Id] 1] scan $Moi "%d %d %s" MonD MonF Contig scan $Toi "%d %d" TonD TonF if { ! [file exists "$RepertoireDuGenome/blastn/$Contig"]} { return "" } set Fenetre [AfficheFichier "$RepertoireDuGenome/blastn/$Contig" "SansFetch"] Illumine $MonD $Fenetre return $Fenetre set MonO [FouR $MonD $MonF] set TonO [FouR $TonD $TonF] set MaSeq [BoutADN [Mini $MonD $MonF] [Maxi $MonD $MonF] $MonO] set TaSeq [BoutADN [Mini $TonD $TonF] [Maxi $TonD $TonF] $TonO] return [EntreTexte "$MaSeq\n$TaSeq"] } proc PointeLesErreursDeSequence {} { global RepertoireDuGenome global ADN CDN JeMeSignale "Patience" set f [open "$RepertoireDuGenome/adn" "r"] gets $f ADN close $f set f [open "$RepertoireDuGenome/../casimir/adn" "r"] gets $f CDN close $f JeMeSignale "FinPatience" set LongueurSeraphin [string length $ADN] set LongueurCasimir [string length $CDN] set i 1 set j 1 while 1 { if {[string index $ADN $i] == [string index $CDN $j]} { if {$i >= $LongueurSeraphin} { break } incr i incr j continue } set MeilleurScoreEnK 0 for {set K $i} {$K < [expr $i+10]} {incr K} { set MeilleurScoreEnK [Maxi $MeilleurScoreEnK [SimilitudeSurUneZone $K $j]] set MeilleurK($MeilleurScoreEnK) $K } set MeilleurScoreEnL 0 for {set L $j} {$L < [expr $j+10]} {incr L} { set MeilleurScoreEnL [Maxi $MeilleurScoreEnL [SimilitudeSurUneZone $i $L]] set MeilleurL($MeilleurScoreEnL) $L } puts "[string range $ADN [expr $i] [expr $i+30]] $i" puts "[string range $CDN [expr $j] [expr $j+30]] $j" puts "[set MeilleurK($MeilleurScoreEnK)] $MeilleurScoreEnK" puts "[set MeilleurL($MeilleurScoreEnL)] $MeilleurScoreEnL" if {$MeilleurScoreEnK==$MeilleurScoreEnL} { if {1 && [OuiOuNon "Je saute les 2 ?"]} { incr i; incr j; lappend Acte "ij $i $j"; continue} } if {$MeilleurScoreEnK>$MeilleurScoreEnL} { if {1 && [OuiOuNon "Je saute le 1er ?"]} { incr i; lappend Acte "i $i $j"; continue} } if {$MeilleurScoreEnK<$MeilleurScoreEnL} { if {1 && [OuiOuNon "Je saute le 2nd ?"]} { incr j; lappend Acte " j $i $j"; continue} } if {[OuiOuNon "Alors je saute les 2 ?"]} { incr i; incr j; lappend Acte "ij $i $j"; continue} if {[OuiOuNon "Alors je saute le 1er ?"]} { incr i; lappend Acte "i $i $j"; continue} if {[OuiOuNon "Alors je saute le 2nd ?"]} { incr j; lappend Acte " j $i $j"; continue} } Espionne [SauveLesLignes $Acte dans "$RepertoireDuGenome/erreurssequence.liste.nouveau"] } proc PointerMode {AId} { global Abr ChangeCurseur $AId normal if {[set Abr($AId,Swap)]} { set Abr($AId,Swap) 0 ModeSwap $AId } if {[set Abr($AId,BootShow)]} { set Abr($AId,BootShow) 0 MontreBootstrap $AId } if {[set Abr($AId,TypeTree)] eq "dendrogram" && [set Abr($AId,Reroot)]} { set Abr($AId,Reroot) 0 ModeReroot $AId } set PAD [set Abr($AId,PAD)] bind $PAD {%W scan mark %x %y} bind $PAD {%W scan dragto %x %y 1} return } proc PolicePourEntreTexte {{PoliceOuAsk ""} {W ""}} { global PolicePourEntreTexte Wup "returns or sets the current fontsize, asks if PoliceOuAsk is 'Ask' " if { ! [info exists PolicePourEntreTexte]} { set PolicePourEntreTexte 10 } if {[regexp {^[0-9]+$} $PoliceOuAsk]} { set PolicePourEntreTexte $PoliceOuAsk } elseif {[regexp -nocase {^Ask$} $PoliceOuAsk]} { set Police [ChoixParmi {6 8 10 12 14 16 18 20 22 24}] if {$Police!=""} { set PolicePourEntreTexte $Police } } set Objet "$W.text" if {[winfo exists $Objet]} { $Objet configure -font [list Courier $PolicePourEntreTexte] } return $PolicePourEntreTexte } proc PolicePourListBox {{PoliceOuAsk ""} {W ""}} { global PolicePourListBox Wup "returns or sets the current fontsize, asks if PoliceOuAsk is 'Ask' " if { ! [info exists PolicePourListBox]} { set PolicePourListBox 10 } if {[regexp {^[0-9]+$} $PoliceOuAsk]} { set PolicePourListBox $PoliceOuAsk } elseif {[regexp -nocase {^Ask$} $PoliceOuAsk]} { set Police [ChoixParmi {6 8 10 12 14 16 18 20 22 24}] if {$Police!=""} { set PolicePourListBox $Police } } if {$W!=""} { $W.frame.list configure -font [list Courier $PolicePourListBox] } return $PolicePourListBox } proc PolishSequences {} { global TInf foreach k [array names TInf "*,ok"] { if {! [set TInf($k)]} { continue } lassign [split $k ,] pdbid c tmp # pdb alignee est reference set pdbal [set TInf($pdbid,$c,seqpdbal)] # rsa de stride set srsa [set TInf($pdbid,$c,seqrsa)] set srsa [RealignSeqContreSeq $srsa $pdbal] set TInf($pdbid,$c,seqrsa) $srsa # rsa de NAccess set snac [set TInf($pdbid,$c,seqnac)] set snac [RealignSeqContreSeq $snac $pdbal] set TInf($pdbid,$c,seqnac) $snac # rsa de NAccess set ssec [set TInf($pdbid,$c,sSS)] set ssec [RealignSeqContreSeq $ssec $pdbal 0] set TInf($pdbid,$c,sSS) $ssec } return } proc PolyLoc {} { foreach Nom [ListeDesPABs] { set LocUcscGbRs [ExtraitInfo $Nom "LocUcscKgFrom200602"] set LocUcscRs [ExtraitInfo $Nom "LocUcscRsFrom200602"] set LocUcsc [ExtraitInfo $Nom "LocUcscFrom200602"] if {[regexp "/" $LocUcscGbRs]} { Espionne "$Nom $LocUcscGbRs" } if {[regexp "/" $LocUcscRs]} { set titit totot #Espionne "$Nom $LocUcscRs" } if {[regexp "/" $LocUcsc]} { set toto toto #Espionne "$Nom $LocUcsc" } } } proc PolyLocalise {NomVoulu {Color ""} {Recalcule ""}} { global RepertoireDuGenome global PolyLocalise global AskForCalculatePolylocalise if { ! [info exists AskForCalculatePolylocalise]} { set AskForCalculatePolylocalise 1 } set Liste $NomVoulu if {$Recalcule==""} { set Recalcule 0 } else { set Recalcule 1 if {[info exists PolyLocalise]} { unset PolyLocalise } } set CreeFichier 0 if {! $Recalcule && $NomVoulu=="CreateFile"} { if {[info exists PolyLocalise]} { unset PolyLocalise } set CreeFichier 1 } if { ! [string compare [string toupper $Color] [string toupper "ColorPlease"]]} { set X C } else { set X T } set ReLoc(NoBlastFile,T) "NoBlastFile" set ReLoc(NoLocalization,T) "NoLocalization" set ReLoc(MonoLocalization,T) "MonoLocalization" set ReLoc(MayBePolyLocalization,T) "MayBePolyLocalization" set ReLoc(PolyLocalization,T) "PolyLocalization" set ReLoc(NoBlastFile,C) "grey" set ReLoc(NoLocalization,C) "white" set ReLoc(MonoLocalization,C) "blue" set ReLoc(MayBePolyLocalization,C) "orange" set ReLoc(PolyLocalization,C) "red" if {[info exists PolyLocalise($NomVoulu,$X)]} { return [set PolyLocalise($NomVoulu,$X)] } if {[info exists PolyLocalise("EstCharge")]} { return [set ReLoc(NoLocalization,$X)] } if { ! $Recalcule } { global FichierPolyLocaliseDefaut if {[info exists FichierPolyLocaliseDefaut]} { set FichierLocalise $FichierPolyLocaliseDefaut } else { set FichierLocalise "[RepertoireDuGenome]/fiches/polylocalise" } if { ! $CreeFichier && [file exists $FichierLocalise]} { foreach Ligne [LesLignesDuFichier $FichierLocalise] { scan $Ligne "%s %s" NomLu Valeur set PolyLocalise($NomLu,T) $Valeur set PolyLocalise($NomLu,C) [set ReLoc($Valeur,C)] } set PolyLocalise("EstCharge") 1 if {[info exists PolyLocalise($NomVoulu,$X)]} { return [set PolyLocalise($NomVoulu,$X)] } if {[info exists PolyLocalise("EstCharge")]} { return [set ReLoc(NoLocalization,$X)] } } if {$CreeFichier || ($AskForCalculatePolylocalise && [OuiOuNon "Do I calculate all polylocalization and create $FichierLocalise"])} { set Liste [ListeDesPABs] set CreeFichier 1 } else { if {$AskForCalculatePolylocalise && [OuiOuNon "Do I stop asking ?"]} { set AskForCalculatePolylocalise 0 } set Liste [list $NomVoulu] set CreeFichier 0 } } foreach Nom $Liste { set FichierBlastN "$RepertoireDuGenome/blastn/$Nom" if { ! [file exists $FichierBlastN]} { set Valeur "NoBlastFile" set PolyLocalise($Nom,T) $Valeur set PolyLocalise($Nom,C) [set ReLoc($Valeur,C)] continue } set SeuilAcceptable 1.e-3 set SeuilDeuxBons 1.e-3 set SeuilEcartExpo 0 set LesHomologues [ChaqueSegmentDuBlastN $FichierBlastN] if {$LesHomologues=={}} { set Valeur "NoLocalization" set PolyLocalise($Nom,T) $Valeur set PolyLocalise($Nom,C) [set ReLoc($Valeur,C)] continue } set A 9999. set B 9999. set AouB "A" set OldChroContigTroncon "Bidon" foreach Homologie $LesHomologues { ScanLaListe [split $Homologie "\t"] ChroContigTroncon nCops nCopsDansCetteSequence Orga PourcentageIdentiteCacheDansScore Expect DebutQuery FinQuery DebutSbjct FinSbjct if {$OldChroContigTroncon=="Bidon" || $ChroContigTroncon==$OldChroContigTroncon} { set OldChroContigTroncon $ChroContigTroncon if {[expr [set $AouB] > $Expect]} { set $AouB $Expect set Access$AouB $ChroContigTroncon } continue } set OldChroContigTroncon $ChroContigTroncon if {$AouB=="B"} { break } set AouB "B" set $AouB $Expect set Access$AouB $ChroContigTroncon } if {$A > $SeuilAcceptable } { set Valeur "NoLocalization" set PolyLocalise($Nom,T) $Valeur set PolyLocalise($Nom,C) [set ReLoc($Valeur,C)] continue } if {$B > $SeuilAcceptable} { set Valeur "MonoLocalization" set PolyLocalise($Nom,T) $Valeur set PolyLocalise($Nom,C) [set ReLoc($Valeur,C)] continue } if {0 && $B <= $SeuilDeuxBons} { set Valeur "PolyLocalization" set PolyLocalise($Nom,T) $Valeur set PolyLocalise($Nom,C) [set ReLoc($Valeur,C)] continue } if {$A==0.0} { set eA -200 } else { set A [string tolower $A] set eA [IntegerApres "e" dans $A] } if {$B==0.0} { set eB -200 } else { set B [string tolower $B] set eB [IntegerApres "e" dans $B] } set eD [expr $eB-$eA] Espionne $eD if {$eD > $SeuilEcartExpo } { set Valeur "MayBePolyLocalization" set PolyLocalise($Nom,T) $Valeur set PolyLocalise($Nom,C) [set ReLoc($Valeur,C)] continue } else { set Valeur "PolyLocalization" set PolyLocalise($Nom,T) $Valeur set PolyLocalise($Nom,C) [set ReLoc($Valeur,C)] continue } } if {$CreeFichier} { foreach Nom $Liste { lappend Sortie "$Nom [set PolyLocalise($Nom,T)]" } set FichierLocalise [SauveLesLignes $Sortie dans $FichierLocalise] } if {$NomVoulu=="CreateFile"} { return $FichierLocalise } if {[info exists PolyLocalise($NomVoulu,$X)]} { return [set PolyLocalise($NomVoulu,$X)] } return [set Reloc(NoLoc,$X)] } proc PopAleatoire {LesIndividus NbMilliSecMax} { Sablier $NbMilliSecMax #tant qu'il reste du temps de calcul while {[Sablier]} { #on cree un nouvel individu (aleatoire) #EVALUATION : on calcule la longueur du trajet set LIndividu [Evaluation [CreeIndividu]] ##L'individu dit etre unique if {[Appartient $LIndividu $LesIndividus]} {continue} #REINSERTION : si la note de l'individu LIndividu est plus grande que la moins #bonne note des individus de la population Pop, on l'insere #dans cette population set Max [lindex [lindex $LesIndividus 0 ] 0] set Min [lindex [lindex $LesIndividus end] 0] set Val [lindex $LIndividu 0] if {$Val <= $Min} {continue} if {$Max < $Val} {Espionne "New Best : [lindex $LIndividu 0]"} set LesIndividus [LesIndividusClasses [lreplace $LesIndividus end end $LIndividu]] } return $LesIndividus } proc PopulateAssemblyDb {{libraryName ""} {batchName ""} {cap3params ""} {gscopeDir ""} {sequencesFile ""} {qualFile ""} {aceFile ""} {singletsFile ""}} { # Test parameters if {$libraryName eq "" || $batchName eq ""} {exit 1} if {$sequencesFile eq "" && $qualFile eq "" && $aceFile eq "" && [file isfile $singletsFile]} { set singletsOnly 1 } elseif {![file isdirectory $gscopeDir] || ![file isfile $sequencesFile] || ![file isfile $aceFile] || ![file isfile $qualFile] || ![file isfile $singletsFile]} { exit 1 } # set the prefix set prefix [PrefixeDuGenome $gscopeDir] # set the numbering format set numbering [FormatDesNumerosPourCollectionDuGenome $gscopeDir] # initialize number set number 1 # get the creation/modification time of ace file if {![info exists singletsOnly]} { set aceFileTime [file mtime $aceFile] } else { set aceFileTime [file mtime $singletsFile] } # read the different files if {![info exists singletsOnly]} { array set aceArray [readACEfile $aceFile] array set qualArray [readFasta $qualFile] } else { array set aceArray {index {}} } array set singletArray [readFasta $singletsFile] # Connect to database #canalSqlAssemblyDb NSAssemblyDb::getCanal # Try to retrieve the more recent no archived batch in library set latest [SqlExec "SELECT date_part('epoch', a.date) AS ts, a.name, a.date FROM library AS l, assembly AS a WHERE a.pk_library = l.pk_library AND l.name = '$libraryName' AND a.archived = false ORDER BY date DESC LIMIT 1" GetList] if {[llength $latest] != 0} { if {$aceFileTime > [lindex $latest 0]} { # Archive the old batch ArchiveBatch [lindex $latest 1] [lindex $latest 2] } else { puts "There is already a more recent batch assembly in the database" exit 1 } } # BEGIN THE TRANSACTION SqlExec "BEGIN" # Obtain the pk of the library set libPk [SqlExec "SELECT pk_library FROM library WHERE name = '$libraryName'" GetList] if {$libPk eq ""} {exit 1} # Obtain a new assembly pk and insert the assembly batch set assPk [SqlExecNextSequenceValue assembly_pk_assembly_seq] # ne marche qu'a partir de postgres 8.1 ??? # SqlExecWithStatus "INSERT INTO assembly(pk_assembly, pk_library, assembler, name, date, sequences_filename, qual_filename, ace_filename, singlets_filename, gscope_project_directory) VALUES($assPk, $libPk, 'cap3', '$batchName', to_timestamp($aceFileTime), '$sequencesFile', '$qualFile', '$aceFile', '$singletsFile', '$gscopeDir')" SqlExecWithStatus "INSERT INTO assembly(pk_assembly, pk_library, assembler, name, date, sequences_filename, qual_filename, ace_filename, singlets_filename, gscope_project_directory) VALUES($assPk, $libPk, 'cap3', '$batchName', ('epoch'::TIMESTAMPTZ + $aceFileTime * INTERVAL '1 second'), '$sequencesFile', '$qualFile', '$aceFile', '$singletsFile', '$gscopeDir')" # Insert assembler parameters set fieldsString "" set valuesString "" foreach {param val} $cap3params { append fieldsString ", $param" append valuesString ", $val" } set sql "INSERT INTO cap3_assembler_parameters(pk_assembly${fieldsString}) VALUES($assPk${valuesString})" SqlExecWithStatus $sql # Working on contigs foreach contig $aceArray(index) { set name $contig set length $aceArray($contig,length) set seq $aceArray($contig,consensus) if {$aceArray($contig,strand) eq "U"} { set reverse false } else { set reverse true } set qual [gapQualityValues $seq $aceArray($contig,basesQuality)] # Calculate and set the consensus left offset if {$aceArray($contig,lowestRelativeConsensusPosition) < 1} { set consensusOffset [expr abs($aceArray($contig,lowestRelativeConsensusPosition))+1] } else { set consensusOffset 0 } # Obtain a new sequence pk... set consensusPk [SqlExecNextSequenceValue sequence_pk_sequence_seq] # ...generate a gscope access... set gAccess $prefix[format "%$numbering" $number] incr number # ...and insert the consensus into sequence table set sql "INSERT INTO sequence(pk_sequence, name, gapped_sequence, gapped_quality_values, gapped_length, reverse, alignment_offset, gscope_access) VALUES($consensusPk, '$name', '$seq', '$qual', $length, $reverse, $consensusOffset, '$gAccess')" SqlExecWithStatus $sql # Obtain a new contig pk and insert a contig and get the id set contigPk [SqlExecNextSequenceValue contig_pk_contig_seq] SqlExecWithStatus "INSERT INTO contig(pk_contig, pk_assembly, consensus_pk_sequence) VALUES($contigPk, $assPk, $consensusPk)" foreach read $aceArray($contig,index) { puts "$contig,$read" set name $aceArray($contig,$read,name) set length $aceArray($contig,$read,length) set seq $aceArray($contig,$read,sequence) if {$aceArray($contig,$read,strand) eq "U"} { set reverse false } else { set reverse true } set qual [join [lrange $qualArray($read) 1 end]] if {$reverse eq "true"} { set qual [RetourneLaListeIter $qual] } set qual [gapQualityValues $seq $qual] set readOffset [expr $consensusOffset - 1 + $aceArray($contig,$read,consensusPosition)] set consedInfos $aceArray($contig,$read,consedInfos) set alignStart $aceArray($contig,$read,alignmentStart) set alignEnd $aceArray($contig,$read,alignmentEnd) # Obtain a new sequence pk and insert a read set readPk [SqlExecNextSequenceValue sequence_pk_sequence_seq] set sql "INSERT INTO sequence(pk_sequence, pk_contig, name, gapped_sequence, gapped_quality_values, gapped_length, reverse, alignment_offset, consed_informations, gapped_alignment_start, gapped_alignment_end) VALUES($readPk, $contigPk, '$name', '$seq', '$qual', $length, $reverse, $readOffset, '$consedInfos', $alignStart, $alignEnd)" SqlExecWithStatus $sql } } # Working on singlets foreach singlet $singletArray(index) { puts "singlet,$singlet" set name $singlet set seq [join [lrange $singletArray($singlet) 1 end] {}] set length [string length $seq] set reverse false if {![info exists singletsOnly]} { set qual [join [lrange $qualArray($singlet) 1 end]] } else { set qual [string trim [string repeat "15 " $length]] } set consedInfos $singletArray($singlet,description) # Obtain a new sequence pk... set singletSequencePk [SqlExecNextSequenceValue sequence_pk_sequence_seq] # ...generate a gscope access... set gAccess $prefix[format "%$numbering" $number] incr number # ...and insert a singlet into sequence table set sql "INSERT INTO sequence(pk_sequence, name, gapped_sequence, gapped_quality_values, gapped_length, reverse, consed_informations, gscope_access) VALUES($singletSequencePk, '$name', '$seq', '$qual', $length, $reverse, '$consedInfos', '$gAccess')" SqlExecWithStatus $sql # Insert as a singlet SqlExecWithStatus "INSERT INTO singlet(pk_assembly, pk_sequence) VALUES($assPk, $singletSequencePk)" } # FINISH THE TRANSACTION SqlExec "COMMIT" # Disconnect CanalSqlDisconnect } proc PopulateAssemblyDbGui {} { NSPopulateAssemblyDbGui::initNS NSPopulateAssemblyDbGui::showGui } proc PopulateBathy2010 {} { if { ! [regexp "Bathy2010" [RepertoireDuGenome]]} { FaireLire "PopulateBathy2010 est obsolete. La suite aussi : Il vaut mieux etre dans Bathy2010 ... \n setgscoperr Bathy2010" exit } #rR Je croyais que le vrai ne marchait pas ... #rR Mais pour Bathy les infos concernant les contig et les librairie sne sont pas dispos. #rR J'ai cree une library AllTogether et #rR comme le vrai a marche ... il suffisait de #rR - choisir le library #rR - selctionner GscopeDir #rR - j'ai cree un edit_dir/Bathymodiolus.clean #rR - et cree un qual bidon (pas sur !!!!!!!!!!!!!!!!!!!!!!!!!!! ) #rR - cliquer sur "Updata all annotations", il prend les annotation/BAxxxx.xml et balance tout dan sla base. #rR MAIS je crois qu'il faudra recommencer ... pas sur qu'il ait pris les BestDE et autres Best des fiches info exit #rR le reste n'a jamais vraiment marche... en tout cas je ne l'ai pas utilise. #rR J'ai mis ca la pour pouvoir utiliser gscope en dehors du web NSAssemblyDb::setCanal "Bathymodiolus" #rR J'ai mis ca la pour pouvoir utiliser gscope en dehors du web # set the prefix set prefix [PreFixe] # set the numbering format set numbering [FormatDesNumerosPourCollectionDuGenome [RepertoireDuGenome]] # initialize number set number 1 # Connect to database #canalSqlAssemblyDb NSAssemblyDb::getCanal set NbExistants [SqlExec "select count(pk_sequence) from sequence" "GetFirstValue"] if {$NbExistants>0 && [OuiOuNon "Il y a deja $NbExistants sequences dans la base.\n J'abandonne ?"]} { return } # BEGIN THE TRANSACTION SqlExec "BEGIN" #rR On fait un assembly minimum pour Bathy2010 # Obtain a new assembly pk and insert the assembly batch set assPk [SqlExecNextSequenceValue assembly_pk_assembly_seq] SqlExecWithStatus "INSERT INTO assembly( pk_assembly, pk_library, assembler, name, date, sequences_filename, qual_filename, ace_filename, singlets_filename, gscope_project_directory) VALUES( $assPk, $libPk, 'cap3', '$batchName', ('epoch'::TIMESTAMPTZ + $aceFileTime * INTERVAL '1 second'), '$sequencesFile', '$qualFile', '$aceFile', '$singletsFile', '$gscopeDir')" foreach Nom [ListeDesPABs] { set TFA [ContenuDuFichier [GscopeFile $Nom "nuctfa"]] set Entete [EnteteDuTexteTFA $TFA] set seq [QueLaSequenceDuTexteTFA $TFA] set BestDE [ExtraitInfo $Nom BestDE] regsub -all "'" $BestDE "''" BestDE set name [Alias $Nom] set length [string length $seq] # Obtain a new sequence pk... set consensusPk [SqlExecNextSequenceValue sequence_pk_sequence_seq] set gAccess $Nom set qual "" set sql "INSERT INTO sequence( pk_sequence, name, gapped_sequence, gapped_quality_values, gapped_length, reverse, de_blastx, gscope_access) VALUES( $consensusPk, '$name', '$seq', '$qual', $length, false, '$BestDE', '$gAccess')" SqlExecWithStatus $sql } # FINISH THE TRANSACTION SqlExec "COMMIT" # Disconnect CanalSqlDisconnect } proc PopulationDesClustersCorresAuProfilParticulier {PkExperiment AnalysisSoftware} { #cherche aussi le nombre d'elmts d'un cluster (comme la proc PopulationDuCluster) ms la on cherche le nombre d'elemts remplisssant notre condition dans chaque cluster set i 0 if {[regexp -nocase "RMA" $AnalysisSoftware]} { set Fichier "[RepertoireDuGenome]/transcriptomique/ConeSpe/ListeRMAExp2J15Cond" } elseif {[regexp -nocase "dChip" $AnalysisSoftware]} { set Fichier "[RepertoireDuGenome]/transcriptomique/ConeSpe/ListedChipExp2J15Cond" } else { Espionne "RMA or dChip" exit } set FichierSortie "[RepertoireDuGenome]/transcriptomique/ConeSpe/PopulationClustAcProfilParticulierExp$PkExperiment$AnalysisSoftware" CanalSqlBioArrayBase foreach Ps [LesLignesDuFichier $Fichier] { incr i if {[regexp "OU-" $Ps]} { regsub {\-OU\-} $Ps "/" Ps } Espionne "$i $Ps" set TexteCluster [TrouveClusterParticulier $Ps $PkExperiment] #Espionne "$TexteCluster" foreach Ligne [split $TexteCluster "\n"] { if {[regexp -nocase "$AnalysisSoftware" $Ligne]} { set ElmtLigne [split $Ligne "\t"] if {[regexp "K-Means cluster method from TMEV" $Ligne]} { if {[info exists ArrayClustKMTMEV([lindex $ElmtLigne 4])]} { incr ArrayClustKMTMEV([lindex $ElmtLigne 4]) } else { set ArrayClustKMTMEV([lindex $ElmtLigne 4]) 1 } } elseif {[regexp "K-Means cluster method from FASABI" $Ligne]} { if {[info exists ArrayClustKMFASABI([lindex $ElmtLigne 4])]} { incr ArrayClustKMFASABI([lindex $ElmtLigne 4]) } else { set ArrayClustKMFASABI([lindex $ElmtLigne 4]) 1 } } elseif {[regexp "MixtureModel clustering method from FASABI" $Ligne]} { if {[info exists ArrayClustMMFASABI([lindex $ElmtLigne 4])]} { incr ArrayClustMMFASABI([lindex $ElmtLigne 4]) } else { set ArrayClustMMFASABI([lindex $ElmtLigne 4]) 1 } } } } } CanalSqlDisconnect foreach NumeroClKMTMEV [array names ArrayClustKMTMEV] { Espionne "ClustKMTMEV $NumeroClKMTMEV ($ArrayClustKMTMEV($NumeroClKMTMEV))" set LigneFin "ClustKMTMEV $NumeroClKMTMEV ($ArrayClustKMTMEV($NumeroClKMTMEV))" lappend LesLignesFin $LigneFin } foreach NumeroClKMFASABI [array names ArrayClustKMFASABI] { Espionne "ClustKMFASABI $NumeroClKMFASABI ($ArrayClustKMFASABI($NumeroClKMFASABI))" set LigneFin "ClustKMFASABI $NumeroClKMFASABI ($ArrayClustKMFASABI($NumeroClKMFASABI))" lappend LesLignesFin $LigneFin } foreach NumeroClMMFASABI [array names ArrayClustMMFASABI] { Espionne "ClustMMFASABI $NumeroClMMFASABI ($ArrayClustMMFASABI($NumeroClMMFASABI))" set LigneFin "ClustMMFASABI $NumeroClMMFASABI ($ArrayClustMMFASABI($NumeroClMMFASABI))" lappend LesLignesFin $LigneFin } SauveLesLignes $LesLignesFin dans $FichierSortie } proc PopulationDuCluster {Cluster PkE AS CS} { #PopulationDuCluster AllClusters... donne tous les numero de clusters de cas la #AnalysisSoftware: RMA or dChip #ClusteringSoftware: "K-Means cluster method from FASABI" or "K-Means cluster method from TMEV (TIGR MultiExperiment Viewer(MeV))" or "MixtureModel clustering method from FASABI" global PopulationDuCluster if {$Cluster=="reset"} { catch {unset PopulationDuCluster} return "" } if {[info exists PopulationDuCluster($Cluster,$PkE,$AS,$CS)]} { return $PopulationDuCluster($Cluster,$PkE,$AS,$CS) } if {[info exists PopulationDuCluster(AllClusters,$PkE,$AS,$CS)]} { return "" } set PopulationDuCluster(AllClusters,$PkE,$AS,$CS) {} set LesClusters {} CanalSqlBioArrayBase foreach {Cl Nb} [SqlExec "select lncep.clusternumber, count(p.probeset_id) from retinobase3.ln_clu_exp_pro lncep, retinobase3.cluster c, retinobase3.analysissoftware a, retinobase3.experiment e, retinobase3.probeset p where lncep.pk_experiment = e.pk_experiment and lncep.pk_probeset = p.pk_probeset and lncep.pk_cluster = c.pk_cluster and lncep.pk_software = a.pk_software and e.pk_experiment = '$PkE' and a.name = '$AS' and c.clu_description = '$CS' group by lncep.clusternumber order by lncep.clusternumber;" "GetList"] { lappend LesClusters $Cl set PopulationDuCluster($Cl,$PkE,$AS,$CS) $Nb } CanalSqlDisconnect set PopulationDuCluster(AllClusters,$PkE,$AS,$CS) $LesClusters return [PopulationDuCluster $Cluster $PkE $AS $CS] } proc PosEquivalentesARPMACS {{FichierMSF ""} {FichierPosition ""} {FichierOut ""}} { Wup "Permet de rechercher les positions equivalentes dans l alignement" #Format d entree du fichier #1ere ligne Seq de ref (P02568) #2eme ligne les positions separees par des blancs (1 34 546 21 ...) #ligne suivante un nom de sequence par ligne #/home/julie/bin/aln_ref Actin_Complet3_1_Propre.rsf ARP_ntbinding set Aln_Ref "aln_ref" if {![file exists $FichierMSF] || $FichierMSF ==""} {return "-1"} if {![file exists $FichierPosition] || $FichierPosition==""} {return "-1"} if { $FichierOut ==""} {return "-1"} #set Fichier "/genomics/g1/ARP/Projet_ARP/Resultat/signature/Positions/TableConversionPositions.res" #Lecture du fichier contenant les positions a recherchees set Reference "" set LesPos "" set i 0 set F [open "$FichierPosition"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {$i=="1"} { set Reference [lindex $Ligne 0] continue } if {$i=="2"} { set LesPos [split [string trim $Ligne] " "] break } } close $F AppendAuFichier $FichierOut [join [join [list Positions $LesPos] " "] "\t"] #Recherche des residus aux positions demandees set LesResidus "" set Result "" if {[catch {set LesResidus [exec $Aln_Ref $FichierMSF $FichierPosition]} Message]} { Espionne ">>>RetrieveResidueInMACS $FichierMSF $FichierPosition" Espionne "pb $Message" return "-1" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } return "1" } return "" } proc PosEtGCDeLaRegion {LaSeq TailleQuery} { Wup "Calcul le GC pour les regions de la query" if {$LaSeq==""} {return ""} set LaSeq [split $LaSeq ""] set GCTotal 0 set GCMax 0 set GCMin 9999 set LesGCs "" set DebutSeq 1 set LengthOligo 30 set Fin $LengthOligo set Pas 10 #Calcul de la moyenne sur une sliding window de taille Facteur et de pas j for {set Debut $DebutSeq} {$Fin <= $TailleQuery} {incr Debut $Pas} { set Fin [expr $Debut + $LengthOligo - 1] if {![expr $Fin <= $TailleQuery]} {break} set Seq [join [lrange $LaSeq [expr $Debut - 1] [expr $Fin - 1]] ""] set TailleSeq [string length $Seq] if {$TailleSeq<$LengthOligo} {continue} set GC [expr ([NombreDeBaseDe $Seq "G|C"]*100.0)/$TailleSeq] if {$GC=="-1"} {continue} elseif {$GC==""} {return ""} if {$Debut==1} { lappend LesGCs "1 [format "%.1f" $GC]" } else { #lappend LesGCs "$Fin [format "%.1f" $GC]" #lappend LesGCs "$Debut [format "%.1f" $GC]" lappend LesGCs "[expr $Debut + ($Fin-$Debut)/2] [format "%.1f" $GC]" } set GCTotal [expr $GCTotal + $GC] if {$GC > $GCMax} {set GCMax $GC} if {$GC < $GCMin} {set GCMin $GC} } set nbLesGCs [llength $LesGCs] set Moyenne [expr ($GCTotal*1.0)/($nbLesGCs)] set Entete [list "0 $GCMin" "100 $GCMax" "$Moyenne $Moyenne"] set LesGCs [concat $Entete $LesGCs] return $LesGCs } proc PosEtNbSequenceAligneeDeLaRegion {FichierBlast} { Wup "Calcul le nombre de sequence detectees dans le blast pour chaque position" global ProfilBlast set LesPositions "" if {! [info exists ProfilBlast]} { if {! [info exists FichierBlast] || ! [file exists $FichierBlast]} {return ""} set NbSubject [AskBlast $FichierBlast NbSubject] if {$NbSubject!=0} { set LesProfilsAlignables [LesProfilsDeLaQuerySurToutLeBlast $FichierBlast "BaseDansAlignement"] foreach LeProfilAlignables $LesProfilsAlignables { set LesBasesAlignables [lindex $LeProfilAlignables 1] set Position 0 foreach Alignables $LesBasesAlignables { if {![info exists ProfilBlast($Position,Alignables)]} { lappend LesPositions $Position set ProfilBlast($Position,Alignables) 0 } if {$Alignables>=1} {incr ProfilBlast($Position,Alignables)} incr Position } } } } else { set LesPositions [set ProfilBlast(LesPositions)] } set NbSubject [AskBlast $FichierBlast NbSubject] set TailleQuery [AskBlast $FichierBlast Taille] if {$NbSubject==0} { set Entete [list "0 0" "100 0" "0 0"] set LesSommesDesNbSeqDeLaRegion [list "1 0" "$TailleQuery 0"] set LesSommesDesNbSeqDeLaRegion [concat $Entete $LesSommesDesNbSeqDeLaRegion] return $LesSommesDesNbSeqDeLaRegion } set LesNbSeqDeLaPosition "" set NbAlignableMax 0 set NbAlignableMin 99999 foreach Pos $LesPositions { #if {0 && [set ProfilBlast($Pos,Alignables)]==0 ||[set ProfilBlast($Pos,Alignables)]==1} {lappend LesNbSeqDeLaPosition "$Pos 0.0";continue} if {[set ProfilBlast($Pos,Alignables)]==0} {lappend LesNbSeqDeLaPosition "$Pos 0.0";continue} lappend LesNbSeqDeLaPosition "$Pos [set ProfilBlast($Pos,Alignables)]" if {[set ProfilBlast($Pos,Alignables)] > $NbAlignableMax} {set NbAlignableMax [set ProfilBlast($Pos,Alignables)]} if {[set ProfilBlast($Pos,Alignables)] < $NbAlignableMin} {set NbAlignableMin [set ProfilBlast($Pos,Alignables)]} } set NbSeqTotal 0 set Facteur 10 set nbLesNbSeqs 0 set Pas 10 #Calcul de la moyenne sur une sliding window de taille Facteur et de pas j for {set j 0} {$j < [llength $LesNbSeqDeLaPosition]} {incr j $Pas} { set SommeNbSeq 0 set LaSommeNbSeqDeLaRegion "" incr nbLesNbSeqs set LesNbSeqDeLaRegion [lrange $LesNbSeqDeLaPosition $j [expr $j+$Facteur-1]] set nbMesNbSeq [llength $LesNbSeqDeLaRegion] foreach NbSeq $LesNbSeqDeLaRegion { set NbSeq [lindex $NbSeq 1] set SommeNbSeq [expr $SommeNbSeq+$NbSeq] } set LaSommeNbSeqDeLaRegion [expr $SommeNbSeq/($nbMesNbSeq*1.0)] if {[expr $LaSommeNbSeqDeLaRegion<1.0] && [expr $LaSommeNbSeqDeLaRegion>0.0]} {set LaSommeNbSeqDeLaRegion 1.0} lappend LesSommesDesNbSeqDeLaRegion "[expr $j+1] $LaSommeNbSeqDeLaRegion" set NbSeqTotal [expr $NbSeqTotal + $LaSommeNbSeqDeLaRegion] } set Moyenne [expr ($NbSeqTotal*1.0)/($nbLesNbSeqs)] set Entete [list "0 $NbAlignableMin" "$NbAlignableMax $NbAlignableMax" "$Moyenne $Moyenne"] set LesSommesDesNbSeqDeLaRegion [concat $Entete $LesSommesDesNbSeqDeLaRegion] return $LesSommesDesNbSeqDeLaRegion } proc PosEtPIdAligneeDeLaRegion {FichierBlast} { Wup "Calcul le pourcentage d identite du blast le long de la query" global ProfilBlast if {![info exists FichierBlast] || ![file exists $FichierBlast]} {return ""} set LesProfilsAligneesEtAlignables "" set NbSubject [AskBlast $FichierBlast NbSubject] set TailleQuery [AskBlast $FichierBlast Taille] if {$NbSubject==0} { set Entete [list "0 0" "100 0" "0 0"] set LesSommeDesPIdDeLaRegion [list "1 0" "$TailleQuery 0"] set LesSommeDesPIdDeLaRegion [concat $Entete $LesSommeDesPIdDeLaRegion] return $LesSommeDesPIdDeLaRegion } #On elimine la redondance de plusieurs HSPs identiques pour un meme subject #Le profil des bases alignees et le profil des bases alignables set LesProfilsAligneesEtAlignables [LesProfilsDeLaQuerySurToutLeBlast $FichierBlast "LesDeux"] set LesPositions "" foreach LesProfils $LesProfilsAligneesEtAlignables { set Position 0 foreach LaBase [lindex $LesProfils 1] { set Alignees [lindex $LaBase 0] set Alignables [lindex $LaBase 1] if {![info exists ProfilBlast($Position,Alignees)]} { lappend LesPositions $Position lappend ProfilBlast(LesPositions) $Position set ProfilBlast($Position,Alignees) 0 set ProfilBlast($Position,Alignables) 0 } if {$Alignees>=1} {incr ProfilBlast($Position,Alignees)} if {$Alignables>=1} {incr ProfilBlast($Position,Alignables)} incr Position } } set LesPIdDeLaPosition {} foreach Pos $LesPositions { #Attention on fixe a 0 l identite si une sequence alignee plus marquant if {[set ProfilBlast($Pos,Alignables)]==0 ||[set ProfilBlast($Pos,Alignables)]==1} {lappend LesPIdDeLaPosition "$Pos 0.0";continue} if {[set ProfilBlast($Pos,Alignables)]==0} {lappend LesPIdDeLaPosition "$Pos 0.0";continue} lappend LesPIdDeLaPosition "$Pos [expr ([set ProfilBlast($Pos,Alignees)]*100.0)/[set ProfilBlast($Pos,Alignables)]]" } set PIdTotal 0 set Facteur 20 set nbLesIds 0 set PIdMax 0 set PIdMin 99999 set Pas 10 #Calcul de la moyenne sur une sliding window de taille Facteur et de pas j for {set j 0} {$j < [llength $LesPIdDeLaPosition]} {incr j $Pas} { set SommeId 0 set LaSommePIdDeLaRegion "" incr nbLesIds set LesPIdDeLaRegion [lrange $LesPIdDeLaPosition $j [expr $j+$Facteur-1]] set nbMesPId [llength $LesPIdDeLaRegion] foreach PId $LesPIdDeLaRegion { set Id [lindex $PId 1] set SommeId [expr $SommeId+$Id] } set LaSommePIdDeLaRegion [expr $SommeId/($nbMesPId*1.0)] if {$LaSommePIdDeLaRegion>$PIdMax} {set PIdMax $LaSommePIdDeLaRegion} if {$LaSommePIdDeLaRegion<$PIdMin} {set PIdMin $LaSommePIdDeLaRegion} lappend LesSommeDesPIdDeLaRegion "[expr $j+1] $LaSommePIdDeLaRegion" set PIdTotal [expr $PIdTotal + $LaSommePIdDeLaRegion] } set Moyenne [expr ($PIdTotal*1.0)/($nbLesIds)] set Entete [list "0 $PIdMin" "100 $PIdMax" "$Moyenne $Moyenne"] set LesSommeDesPIdDeLaRegion [concat $Entete $LesSommeDesPIdDeLaRegion] return $LesSommeDesPIdDeLaRegion } proc PosEtTmDeLaRegion {LaSeq TailleQuery} { Wup "Calcul le Tm pour les regions de la query" if {$LaSeq==""} {return ""} set LaSeq [split $LaSeq ""] set TmTotal 0 set TmMax 0 set TmMin 9999 set LesTms "" set DebutSeq 1 set LengthOligo [LesParametresDuDesign LengthOligo "LaValeurMerci"] #set LengthOligo 60 if {$LengthOligo==""} {set LengthOligo 60} set TmMethod [LesParametresDuDesign TmMethod "LaValeurMerci"] if {$TmMethod ==""} {set TmMethod "NearestNeighbor"} set Fin $LengthOligo set Pas 10 #Calcul de la moyenne sur une sliding window de taille Facteur et de pas j for {set Debut $DebutSeq} {$Fin <= $TailleQuery} {incr Debut $Pas} { set Fin [expr $Debut + $LengthOligo - 1] if {![expr $Fin <= $TailleQuery]} {break} set Seq [join [lrange $LaSeq [expr $Debut - 1] [expr $Fin - 1]] ""] if {[string length $Seq]<$LengthOligo} {continue} #set Tm [CalculTmDeLaSeq $Seq "" "" "NearestNeighbor"] set Tm [CalculTmDeLaSeq $Seq "" "" "$TmMethod"] if {$Tm=="-1"} {continue} elseif {$Tm==""} {return ""} if {$Debut==1} { lappend LesTms "1 [format "%.1f" $Tm]" } else { #lappend LesTms "$Fin [format "%.1f" $Tm]" #lappend LesTms "$Debut [format "%.1f" $Tm]" lappend LesTms "[expr $Debut + ($Fin-$Debut)/2] [format "%.1f" $Tm]" } set TmTotal [expr $TmTotal + $Tm] if {$Tm > $TmMax} {set TmMax $Tm} if {$Tm < $TmMin} {set TmMin $Tm} } set nbLesTms [llength $LesTms] if {$nbLesTms=="0"} { #Le Tm n a pu etre calcule on renvoi rien return "" } else { set Moyenne [expr ($TmTotal*1.0)/($nbLesTms)] set Entete [list "$TmMin $TmMin" "$TmMax $TmMax" "$Moyenne $Moyenne"] } set LesTms [concat $Entete $LesTms] return $LesTms } proc PosSeqsRegion {} { global xIR yIR NomTextSeq RegionSeqSel if {$RegionSeqSel != {}} { $NomTextSeq tag remove InvS {*}$RegionSeqSel set RegionSeqSel {} } lassign [split [$NomTextSeq index active] ,] yIR xIR return } proc PoseUneMarque {pos {what all}} { global NomTextSeq LNOrdali SDG GroupeDeLaSequence lassign [split [$NomTextSeq index $pos] .] y x if {[lindex $LNOrdali [expr {$y-1}]] eq ""} {return} set sref [lindex $LNOrdali [expr {$y-1}]] switch $what { "all" {set Lnoms $LNOrdali} "group" { set gref [set GroupeDeLaSequence($sref)] set Lnoms [set SDG($gref)] } "seq" {set Lnoms $sref} } $NomTextSeq tag remove Marque 1.0 end $NomTextSeq configure -state normal $NomTextSeq tag configure Marque -background black -foreground black set x1 $x ; set x2 [expr {$x+1}] foreach n $Lnoms { if {$n eq ""} {continue} set i [expr {[lsearch $LNOrdali $n] + 1}] lappend Ly $i.$x1 $i.$x2 } if {$Ly != {}} {$NomTextSeq tag add Marque {*}$Ly} $NomTextSeq configure -state disabled return } proc PositionAbsolueDansAlignement {Pos {SeqGap ""}} { return [PositionAutreDe "Relative" $Pos $SeqGap] } proc PositionAnnotation {w x y quoi} { lassign [split [$w index @$x,$y] .] ::Anno(y$quoi) ::Anno(x$quoi) $::NomTextSeq configure -state normal return } proc PositionAutreDe {RouA Pos {SeqGap ""}} { global PositionAutreDe Wup "positions start at 1" Wup "PositionAutreDe Relative X Seq gives the abs (gapped) pos corresponding to rel (no gap) pos X" Wup "the Absolute of a Relative is always defined" Wup "the Relative of an Absolute is the previous existing one (0 if begin)" Wup "RouA can be GetArray" if {$SeqGap!=""} { if {[info exists PositionAutreDe]} { unset PositionAutreDe } regsub -all -nocase {[^A-Z]} $SeqGap "" Seq set PosRelative 0 set PosAbsolue 0 foreach C [split $SeqGap ""] { incr PosAbsolue # if {[regexp -nocase {[A-Z]} $C]} if {$C ne "." && $C ne "-"} { incr PosRelative set PositionAutreDe(Relative,$PosRelative) $PosAbsolue } set PositionAutreDe(Absolue,$PosAbsolue) $PosRelative } } if {$RouA=="GetArray"} { return [array get PositionAutreDe] } if {[info exists PositionAutreDe($RouA,$Pos)]} { return $PositionAutreDe($RouA,$Pos) } return -1 } proc PositionCanvaActuelleX {K xOrig} { global ScrollRectangleOriginal IdScrollRectangle scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO set xCanva [expr $xMin+($xOrig-$xMinO)*($xMax-$xMin)/($xMaxO-$xMinO)] return $xCanva } proc PositionCanvaActuelleY {K yOrig} { global ScrollRectangleOriginal IdScrollRectangle scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO set yCanva [expr $yMin+($yOrig-$yMinO)*($yMax-$yMin)/($yMaxO-$yMinO)] return $yCanva } proc PositionCanvaOriginaleX {K xCanva} { global ScrollRectangleOriginal IdScrollRectangle scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO set xOrig [expr $xMinO+($xCanva-$xMin)*($xMaxO-$xMinO)/($xMax-$xMin)] return [expr int($xOrig)] } proc PositionCanvaOriginaleY {K yCanva} { global ScrollRectangleOriginal IdScrollRectangle scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO set yOrig [expr $yMinO+($yCanva-$yMin)*($yMaxO-$yMinO)/($yMax-$yMin)] return [expr int($yOrig)] } proc PositionDansMSF {LoGlo FichierMSF Connu Access} { global TmpTFAsDuMSFMemo NomDuFichierMSFMemo if {[info exists TFAsDuMSFMemo] && $NomDuFichierMSFMemo==$FichierMSF} { set TmpTFA $TmpTFAsDuMSFMemo } else { set TFAs [CreeLeTFAsDuMSF $FichierMSF] set TmpTFAs [Sauve $TFAs dans [TmpFile]] set TmpTFAsDuMSFMemo $TmpTFAs set NomDuFichierMSFMemo $FichierMSF } set TFA [LaSequenceDuTFAs $TmpTFAs $Access] set Seq [QueLaSequenceDuTexteTFA $TFA] set L 0 set G 0 foreach C [split $Seq ""] { if {$C!="-" && $C!="."} { incr L } incr G if {$LoGlo=="Local" && $G==$Connu} { return $L } if {$LoGlo=="Global" && $L==$Connu} { return $G } } return -1 } proc PositionDuPatternDansFichierTFA {Pattern Fichier {RaC ""} {NAouAA ""} {Circulaire ""} {GetAll ""}} { set LastAlso [regexp -nocase "LastAlso" $Circulaire] set Circulaire [regexp -nocase "Circ" $Circulaire] if {[regexp -nocase "GetAll" $RaC]} { set GetAll $RaC set Rac "" } if {$RaC=="RaC"} { set RaC 1 } else { set RaC 0 } if {$NAouAA==""} { set NAouAA "NA_AA" } set Seq [string toupper [QueLaSequenceDuFichierTFA $Fichier]] set lSeq [string length $Seq] set OnTesteUneProteine [regexp {[^ATGCN\-\. ]} $Seq] if {$Circulaire} { set Seq "$Seq$Seq" } regsub -all -nocase {[^A-Z]} $Pattern "" Pattern if {$RaC} { set Pattern [NucToReverseAndComplementNuc $Pattern] } set PATTERN [string toupper $Pattern] set lPat [string length $PATTERN] if {[regexp -nocase "GetAll" $GetAll]} { set LesPositions {} set i 0 while { [set NA [string first $PATTERN "x$Seq" $i]]>=0 } { lappend LesPositions $NA set i $NA incr i } return $LesPositions } set lastNA [string last $PATTERN "x$Seq"] set NA [string first $PATTERN "x$Seq"] if {$RaC && $NA>0} { incr NA [expr $lPat-1] } if {$OnTesteUneProteine && $NA>0} { set NA [expr ($NA-1)*3 + 1] set lastNA [expr ($lastNA-1)*3 + 1] } if {$NAouAA == "NA"} { return $NA } if {$NA>0} { set AA [expr ($NA-1)/3+1] } else { set AA -1 } if {$NAouAA == "AA"} { return $AA } if {$LastAlso} { return "$NA $AA $lastNA" } return "$NA $AA" } proc PositionRelativeDansAlignement {Pos {SeqGap ""}} { return [PositionAutreDe "Absolue" $Pos $SeqGap] } proc PositionRelativeSeqCibleParRapportSeqRef {Domaine CodeGscope PosDebAbsolueSeqRef PosFinAbsolueSeqRef} { if {![file exists "[RepertoireDuGenome]/PDBParDomaine"]} { File mkdir [RepertoireDuGenome]/PDBParDomaine/ } if {![file exists "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope"]} { File mkdir [RepertoireDuGenome]/PDBParDomaine/$CodeGscope } set FichierPDBTfas [RepertoireDuGenome]/PDBParDomaine/$CodeGscope/$Domaine set fichierMSF [RepertoireDuGenome]/msf/$CodeGscope set ListePDB {} DecortiqueUnMSF "msf/$CodeGscope" LesAccess Sequences foreach access $LesAccess { if {[EstUnAccessPDB $access]} { Espionne "$access" Espionne "position pfam dans QR002 dans l'alignement PosDebAbsolueSeqRef: $PosDebAbsolueSeqRef; PosFinAbsolueSeqRef: $PosFinAbsolueSeqRef" set PosDebCibleRelative [DansAlignementPositionRelative $PosDebAbsolueSeqRef $access $fichierMSF] set PosFinCibleRelative [DansAlignementPositionRelative $PosFinAbsolueSeqRef $access $fichierMSF] Espionne "PosDebCibleRelative: $PosDebCibleRelative && PosFinCibleRelative: $PosFinCibleRelative" #Si PosDebCibleRelative et PosFinCibleRelative 0 alors c'est notre PDB ne couvre pas le domaine recherche!! if {$PosDebCibleRelative==0 && $PosFinCibleRelative==0} { Espionne "Le PDB ne couvre pas le domaine cible" continue } if {$PosDebCibleRelative==0} {set PosDebCibleRelative 1} if {$PosFinCibleRelative==0} {set PosFinCibleRelative 1} set accepter [RegionAlignerDansLeBlast $CodeGscope $PosDebCibleRelative $PosFinCibleRelative $access] if {$accepter eq "N"} { Espionne "Accepter N" continue } else { Espionne "accepter Y apres..." #recupere la sequence du access set Sequence [UneSequenceDuMSF $fichierMSF $access "NoGap"] set Seq [string range "X$Sequence" $PosDebCibleRelative $PosFinCibleRelative] #voir si l'on peut mettre les positions dans la ligne du tfas >$access PosDebRelative PosFinRelative lappend ListePDB ">$access $PosDebCibleRelative $PosFinCibleRelative" #lappend ListePDB ">$access" lappend ListePDB $Seq #else continue #attention j'ai un cas avec position deb 7 fin 7 voir exactement dans l'alignement ce a quoi cela correspond? #ici j'ai des access donc je recupere les bornes puis je recupere les valeurs du blast et je compare #ICI appel procedure pour verifie que le domaine en question soit retrouver (complet ou partiel) dans le Blast!!! #faut faire le trie ici des pdb... pour chaque domaine #creation des fichier PDB ne contenant que les positions voulue dans le PDB Espionne "J4APPEL RecupereDomainDansPDB!!!" RecupereDomainDansPDB $CodeGscope $access $PosDebCibleRelative $PosFinCibleRelative } } } SauveLesLignes $ListePDB dans $FichierPDBTfas } proc PositionSurMatrices {P {Ou ""}} { if {$Ou==""} { set Ou "nuctfa" } if {[regexp "/" $Ou]} { set LesMatrices [glob -nocomplain "$Ou/*"] } else { set LesMatrices [glob -nocomplain "[RepertoireDuGenome]/$Ou/*"] } if {[Oli $P TFA]==""} { Espionne "$P merde" set Orient "!" set Posi [format "%4d %4d" -2 -2] # set Sign [CloDo signal $P] set Sign "" if {$Sign==""} { set Sign "no signal available" } set Resume "$Posi $Orient [format "%-15s" " "] => $Sign" return [list "$P $Resume"] } set SeqD [Oli $P "SeqSubject"] set Sens [Oli $P "Sens"] set Orient "?" if {$Sens=="5'"} { set Orient "F" } if {$Sens=="3'"} { set Orient "R" } set LesPositions {} set Posi [format "%4d %4d" -1 -1] foreach Fichier $LesMatrices { set Queue [file tail $Fichier] if {[regexp {~$|\.20[0-9]{4,}$} $Queue]} { continue } if {[string length $SeqD] < 10} { break } if { ! [EstUnFichierTFA $Fichier]} { continue } if {[regexp -- "\-mRNA" $Fichier]} { continue } regsub "matrices_a_tester/" $Fichier "matrices" FichierOK if {$Fichier!=$FichierOK && [file exists $FichierOK]} { continue } if {$Sens=="5'"} { set FoR "F" } else { set FoR "RaC" } set NAetAA [PositionDuPatternDansFichierTFA $SeqD $Fichier $FoR] scan $NAetAA "%d %d" NA AA if {$NA<=0} { continue } set Posi [format "%4d %4d" $NA $AA] set Sujets [Oli $P "Subjects"] set Matrice [file tail $Fichier] regsub ".tfa$" $Matrice "" Matrice set PGS [file tail $Matrice] set Alias [Alias $PGS] while 1 { Espionne "$Alias $PGS $Sujets" if { $Alias!="" && ! [regexp "^$Alias" $Sujets] } { break } if { ! [EstUnPABMute $PGS]} { break } Espionne "Oli $P $Sujets \n Y a t il un grand frere pour $Alias" set GrandFrere [GrandFrereDuMutant $PGS] if {$GrandFrere==""} { break } set AliasGrandFrere [Alias $GrandFrere] if {$AliasGrandFrere==""} { break } Espionne "Oui $GrandFrere" set LesNouveauxSujets {} foreach Sujet [split $Sujets " "] { if { ! [regexp -indices {\-[0-9]+\-[0-9]+$} $Sujet Indices]} { continue } scan $Indices "%d" D set Bornes [string range $Sujet $D end] set CorpsDuSujet [string range $Sujet 0 [incr D -1]] if { ! [string equal $AliasGrandFrere $CorpsDuSujet]} { continue } set NouveauSujet "$Alias$Bornes" lappend LesNouveauxSujets $NouveauSujet Espionne "NouveauSujet $NouveauSujet" } if {$LesNouveauxSujets!=""} { set Sujets "[join $LesNouveauxSujets " "] $Sujets" } break } set Sujets [join [lsort -unique [split $Sujets " "]] " "] set Resume "$Posi $Orient [format "%-15s" $Matrice] => $Sujets" lappend LesPositions "$P $Resume" } if {$LesPositions=={}} { set Resume "$Posi $Orient [format "%-15s" " "] => [Oli $P Subjects]" set LesPositions [list "$P $Resume"] } return $LesPositions } proc PositionSurMatricesPourTous {{AppendOrShow ""} {FiMat ""}} { if {$AppendOrShow==""} { set AppendOrShow "Append" } set Append [regexp "Append" $AppendOrShow] set Show [regexp "Show" $AppendOrShow] set FiMatDefaut "[RepertoireDuGenome]/fiches/matrices_of_oligos" if {$FiMat==""} { set FiMat $FiMatDefaut } if {$FiMat=="ShowOnly"} { set Show 1 } set ToutesLesPositions {} if {[FileExists $FiMat]} { foreach Ligne [LesLignesDuFichier $FiMat] { scan $Ligne "%s %d" P AA if {$AA<0} { continue } set DejaVu($P) 1 lappend ToutesLesPositions $Ligne } } if {1 || [OuiOuNon "Do I use Oli to list existing oligos (instead of CloDo) ?"]} { set LesPs [Oli "LaListeMerci"] } else { set LesPs [CloDo "ListAllPlease" oligos] } if {$Append} { foreach P $LesPs { Espionne "PositionSurMatrice pour $P" if { ! [regexp {^P[0-9]+$} $P]} { continue } if {[info exists DejaVu($P)]} { continue } set LesPositions [PositionSurMatrices $P] foreach Pos $LesPositions { lappend ToutesLesPositions $Pos AppendAuFichier $FiMat $Pos } } } set ToutesLesPositions [lsort -unique $ToutesLesPositions] if {$Append} { SauveLesLignes $ToutesLesPositions dans $FiMat } if {$Show} { set Fen [AfficheVariable [join $ToutesLesPositions "\n"] "AvecOli" Matrices] return $Fen } return $FiMat } proc PositionSurMrnaHNR {} { set LesPositions {} foreach Nom [ListeDesPABs] { set FB [GscopeFile $Nom tblastnHNRallNuc] if {[FileAbsent $FB]} { continue } Espionne [ChaqueSegmentDuBlastN $FB 1.e-20 HNRallNuc:$Nom] } return $LesPositions } proc PositionneCodeAffymetrix {} { Wup "Permet de positionner le code affymetrix de chaque boite" Wup "On utilise le ProbeSetID present dans le nuctfa" Wup "On positionne avec InformeSansDemander et on recupere avec AffymetrixAccess" set LesPABs [ListeDesPABs] set RepTFA "[RepertoireDuGenome]/nuctfa" foreach PAB $LesPABs { set CodeAffy [AccessDuTFADumRNA "${RepTFA}/${PAB}"] InformeSansDemander $PAB "=AffymetrixAccess: $CodeAffy" } return "" } proc PositionneEtInforme {Nom K {Next ""}} { JeMeSignale global ScrollRectangleOriginal IdScrollRectangle global RepertoireDuGenome global NePasEffacerLesRepereBox global KanvaCourant # puts stderr "PositionneEtInforme [Box $Nom nom]" if {[Box $Nom nom] != $Nom} { if { $K=="OrdrePourGif"} { return "rien" } return $K } if {$K==""} { set K $KanvaCourant } scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO # puts stderr "$xMin $yMin $xMax $yMax $xMinO $yMinO $xMaxO $yMaxO" if {[regexp "rond" $K]} { if { ! [info exists NePasEffacerLesRepereBox]} { set LesId [$K find withtag "RepereBox"] foreach Id $LesId { $K delete $Id } } Aiguille $Nom "black" $K "RepereBox" "milieu" } else { set Milieu [expr ([Box $Nom debut]+[Box $Nom fin])/2] set Fraction [expr ($Milieu-$xMinO)/($xMaxO-$xMinO)] # puts stderr "$Milieu $Fraction" $K xview moveto $Fraction $K xview scroll -5 units } if { $K=="OrdrePourGif"} { return "$Nom $Fraction" } if { ! [regexp "SansInforme" $Next] && [file exists "$RepertoireDuGenome/infos/$Nom"]} { Informe $Nom } return $K } proc PositionneLesZones {K X Y XDebut XFin YDebut {OneNtPixel ""}} { Wup "Positionne une zone de design" Wup "Attention le tableau est indexee par la position en nt" global LigneZone set Police {-family "Comic" -size 10 -weight bold} #Les positions sur le canvas set x [$K canvasx $X] set y [$K canvasy $Y] if {$x>$XFin || $x<$XDebut} {return ""} set IdQ [$K find withtag "Query"] set YQFin [lindex [$K coords $IdQ] 3] set X [format "%0.f" [expr (($x-$XDebut) / (1.0*$OneNtPixel)) + 1]] set Numero "" if {[info exists LigneZone($K,$X)]} { catch {$K delete [set LigneZone($K,$X)]} catch {$K delete [set LigneZone($K,$X,zone)]} AfficheInfoBulle $K %x %y Leave unset LigneZone($K,$X) if {[info exists LigneZone($K,$X,zone)]} {unset LigneZone($K,$X,zone)} CheckLesZones $K return "" } set LigneZone($K,$X,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "$Numero" -fill "yellow" -anchor center -tags [list "" "Zonable" "Flag"]] set LigneZone($K,$X) [$K create line $x $YDebut $x $YQFin -fill "green3" -tags [list "" "$X" "Affichable" "Zonable"]] CheckLesZones $K return "" } proc PositionneLesZonesDeGC {K X Y XDebut XFin YDebut {YFin ""} {OneNtPixel ""} {Minimum ""}} { Wup "Positionne une zone de validite de GC pour le design" Wup "Domaine de validite sur X (XDebut XFin) et valeur sur Y (YDebut YFin)" Wup "Minimum est necessaire car on ne commence pas a 0 ou 1 depend des valeurs observees" Wup "Attention le tableau est indexee par la melting temperature en degres" global LigneZone if {$YFin ==""} {set YFin [$YDebut + 1000]} if {$Minimum==""} {set Minimum 0} set Police {-family "Comic" -size 10 -weight bold} #Les positions sur le canvas set x [$K canvasx $X] set y [$K canvasy $Y] if {$x>$XFin || $x<$XDebut} {return ""} set X [format "%.1f" [expr (($x-$XDebut) / (1.0*$OneNtPixel)) +$Minimum]] set Numero "" if {[info exists LigneZone($K,$X)]} { catch {$K delete [set LigneZone($K,$X)]} catch {$K delete [set LigneZone($K,$X,zone)]} AfficheInfoBulle $K %x %y Leave unset LigneZone($K,$X) if {[info exists LigneZone($K,$X,zone)]} {unset LigneZone($K,$X,zone)} return "" } set Numero $X set LigneZone($K,$X,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "$Numero" -fill "yellow" -anchor center -tags [list "" "Zonable" "Flag"]] set LigneZone($K,$X) [$K create line $x $YDebut $x $YFin -fill "green3" -tags [list "" "$X" "Affichable" "Zonable"]] return "" } proc PositionneLesZonesDeTm {K X Y XDebut XFin YDebut {YFin ""} {OneNtPixel ""} {Minimum ""}} { Wup "Positionne une zone de validite de Tm pour le design" Wup "Domaine de validite sur X (XDebut XFin) et valeur sur Y (YDebut YFin)" Wup "Minimum est necessaire car on ne commence pas a 0 ou 1 depend des valeurs observees" Wup "Attention le tableau est indexee par la melting temperature en degres" global LigneZone if {$YFin ==""} {set YFin [$YDebut + 1000]} if {$Minimum==""} {set Minimum 0} set Police {-family "Comic" -size 10 -weight bold} #Les positions sur le canvas set x [$K canvasx $X] set y [$K canvasy $Y] if {$x>$XFin || $x<$XDebut} {return ""} set X [format "%.1f" [expr (($x-$XDebut) / (1.0*$OneNtPixel)) +$Minimum]] set Numero "" if {[info exists LigneZone($K,$X)]} { catch {$K delete [set LigneZone($K,$X)]} catch {$K delete [set LigneZone($K,$X,zone)]} AfficheInfoBulle $K %x %y Leave unset LigneZone($K,$X) if {[info exists LigneZone($K,$X,zone)]} {unset LigneZone($K,$X,zone)} return "" } set Numero $X set LigneZone($K,$X,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "$Numero" -fill "yellow" -anchor "center" -tags [list "" "Zonable" "Flag"]] set LigneZone($K,$X) [$K create line $x $YDebut $x $YFin -fill "green3" -tags [list "" "$X" "Affichable" "Zonable"]] return "" } proc PositionsDesOrthologues {Nom Banque {Orga ""}} { global LesPositionsDesOrthologues if {! [info exists LesPositionsDesOrthologues($Banque)]} {ChargeLesPositionsDesOrthologues $Banque} if {$Nom=="LaListeDesOrgas"} { if {[info exists LesPositionsDesOrthologues("LaListeDesOrgas",$Banque)]} { return [set LesPositionsDesOrthologues("LaListeDesOrgas",$Banque)] } } if {! [info exists LesPositionsDesOrthologues($Nom,$Banque,$Orga)]} { return {} } else { return [set LesPositionsDesOrthologues($Nom,$Banque,$Orga)] } } 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 PossibleNucleotides {} { return [ComplementNuc "ListKey"] } proc PostProc {} { global toto puts "dans PostProc $::env(USER)" #puts "toto $toto" return [set tata [thread::id]"] } proc PostTraiteSeqRegeneration {} { set rfi [file join [RepertoireDuGenome] tfasdescopains] set rfo [file join [RepertoireDuGenome] tfasreg] set Ll [LesLignesDuFichier SeqsRegenerees] set fold "" set seq "" foreach l $Ll { lassign [split $l " "] tmp file old new regsub -all {\|} $new " " new set new [string trim $new] set BId [lindex [split $new " "] end] set BId [lindex [split $BId "."] 0] puts "$file $BId" set Ls [LaSequenceDesBanques $BId] if {$file ne $fold} { if {$seq ne ""} { set Ln [lunique $Ln] foreach n $Ln { lappend Lseqs [set Seqs($n)] } set foo [file join $rfo $fold] EcritLeTfa $foo $Ln $Lseqs } set Lseqs {} set Ln {} catch {unset Seqs} set foi [file join $rfi $file] DecortiqueUnTFA $foi Ln Seqs } set seq "" foreach s [lrange $Ls 1 end] { append seq [string toupper $s] } array unset Seqs $old set i [lsearch $Ln $old] set Ln [lreplace $Ln $i $i $BId] set Seqs($BId) $seq set fold $file } if {$seq ne ""} { foreach n $Ln { lappend Lseqs [set Seqs($n)] } set foo [file join $rfo $fold] EcritLeTfa $foo $Ln $Lseqs } return } proc Poste {Destination Message} { puts $Destination $Message flush $Destination } proc PosteEtClos {Destination Message} { Poste $Destination $Message close $Destination } proc Potins {Destination Texte} { global CafeDesSciencesDir global PotinsNon global lCommCafe global Cafe global Ip global NombreDePotins set OnVeutDesCommentaires 0 if { $OnVeutDesCommentaires } { set FinPotins "end" } else { set FinPotins "120" } #rR set Date [clock format [clock scan now] -format "%d_%H:%M:%S"] set Texte "$Date [pid] $Texte" set Destination cafe_$Cafe #rR if { ! [info exists PotinsNon] } { set PotinsNon 0 } if { $PotinsNon } { return } # set FichierPotins "$CafeDesSciencesDir/potins/$Destination" set RepPotins "/tmp/potins" if { ! [file exists $RepPotins]} { file mkdir $RepPotins file attributes $RepPotins -group "gag" -permissions "00777" } set FichierPotins "$RepPotins/$Destination" set MaxNomreDePotins 5000 if { ! [info exists NombreDePotins]} { set NombreDePotins 0 } incr NombreDePotins if { $NombreDePotins > $MaxNomreDePotins } { if {[file exists $FichierPotins.2]} { file delete -force $FichierPotins.2 } exec tail -1000 $FichierPotins > $FichierPotins.2 # file attributes $FichierPotins.2 -group "gag" -permissions "00666" file attributes $FichierPotins.2 -permissions "00666" file delete -force $FichierPotins file rename -force $FichierPotins.2 $FichierPotins set NombreDePotins 1 } set ChangerLeGroupe [expr ! [file exists $FichierPotins]] set FichierCree [AppendAuFichier $FichierPotins [string range $Texte 0 $FinPotins]] if {$ChangerLeGroupe} { # file attributes $FichierCree -group "gag" -permissions "00666" catch {file attributes $FichierCree -permissions "00666"} } return #rR on laisse la suite if { [regexp "cafe_" $Destination] } { lappend lCommCafe [string range $Texte 0 end] if {[llength $lCommCafe] > 20} { set lCommCafe [lreplace $lCommCafe 0 0] } } else { if { [catch {set CanalCafe [socket $Ip $Cafe]} Message] } { AppendAuFichier "$FichierPotins" "Impossible de joindre le cafe : $Message" } else { Poste $CanalCafe "Commentaire $Cafe1 [string range $Texte 0 end]" AppendAuFichier "$FichierPotins" "Commentaire envoye" } } set LimiteTaille [expr 1024 * 1024] set Date [clock format [clock scan now] -format "%Y%m%d%H%M"] if {[file exists "$FichierPotins"] && [file size "$FichierPotins"] > $LimiteTaille} { file rename "$FichierPotins" "$FichierPotins.$Date" } } proc PotinsDeCafe {Texte} { global Cafe Potins "cafe_$Cafe" $Texte } proc PotinsDeQuestion {Texte} { Potins "question" $Texte } proc PourCath {} { global TDesAccess TDesSeqnames TDesTaxId LNOrdali LSOrdali TDesDescriptifs TDesPhylum set usum "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=DDDD&id=XXXX&retmode=xml" set ufet "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=taxonomy&id=XXXX&report=xml" set Lge [list] foreach n $LNOrdali { if {! [regexp {_sub_} $n]} { continue } set gid [string range $n 5 end] # recupere le taxid regsub -all "DDDD" $usum "protein" url regsub -all "XXXX" $url "$gid" url set r [::http::geturl $url] upvar #0 $r s lassign [CF_GetInfo $s(body)] taxid title set TDesTaxId($n) $taxid set TDesDescriptifs($n) $title ::http::cleanup $r # recupere genre/espece nsme regsub -all "DDDD" $usum "taxonomy" url regsub -all "XXXX" $url "$taxid" url set r [::http::geturl $url] upvar #0 $r s lassign [CF_GetGE $s(body)] genre espece if {$genre == ""} { set genre "Unkn" } if {$espece eq ""} { set espece "unkn" } ::http::cleanup $r # recupere life domain regsub -all "XXXX" $ufet "$taxid" url set r [::http::geturl $url] upvar #0 $r s set lifed [CF_GetLifeD $s(body)] set TDesPhylum($n) $lifed ::http::cleanup $r set suf "cy" switch -regexp -- $lifed { {^Bacter} {set suf "ba"} {^Archae} {set suf "ar"} {^Eukar} {set suf "cy"} } if {[regexp -nocase {mitochondr} $title]} { set suf "mi" } if {[regexp -nocase {chloroplas} $title]} { set suf "cl" } set seqname "D${suf}_[string range $genre 0 3].[string range $espece 0 3]" set seqname [string map [list "(" "" ")" ""] $seqname] set no [llength [lsearch -all -regexp $Lge $seqname]] if {$no > 0} { set seqname "${seqname}_$no" } lappend Lge $seqname set TDesSeqnames($n) $seqname puts "$n $taxid $lifed $seqname" } puts "done !" CreeLeMacsim 250_drs.xml exit return } proc PourChristopheRomier {} { if { ! [OuiOuNon "Ce programme a deja ete lance.\n Il cree un .TFAs contenant toute les sequences d'apres le readme de Christophe Romier\n Dois-je le relancer ?"]} { return "" } set O(y) "Saccharomyces cerevisae" set O(p) "Schizosaccharomyces pombe" set O(h) "Homo sapiens" set O(ec) "Encephalitozoon cuniculi" set O(cm) "Cyanidioschyzon merolae" set O(cyme) $O(cm) foreach Ligne [LesLignesDuFichier readme] { if { ! [regexp -nocase {[a-z]} $Ligne]} {continue} if {[regexp {\* (.+)} $Ligne Match Classe]} { continue } scan $Ligne "%s" FichierTFAs lappend LaVue "" foreach A [LaSequenceDuTFAs $FichierTFAs "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $FichierTFAs $A] set Entete [EnteteDuTexteTFA $TFA] set Sequence [QueLaSequenceDuTexteTFA $TFA] scan $Entete "%s" Access regsub ">" $Access "" Access regsub "_" $Access "" Access if {! [regexp {[a-z]+} $Access o]} { FaireLire $Access } set Organisme $O($o) if {[info exists DejaVu($Access)]} { FaireLire "dejavu" } set DejaVu($Access) $Ligne set BelleEntete "$Access $Organisme $Access , $Classe" lappend LaVue $BelleEntete set BonTFA [SequenceFormatTFA $Sequence $BelleEntete "protbrut"] lappend LesTFAs $BonTFA } } AfficheVariable [join $LaVue "\n"] return [SauveLesLignes $LesTFAs dans "AllTogether.tfas"] } proc PourGPG {{GetWhat ""}} { # AfficheListe [GPG Get All]; return set LesNM {} foreach LesValeurs [lrange [GPG Get All] 0 end] { foreach K [GPG ListOf keys] V $LesValeurs { set $K $V } set Gn $name set FicNuc "[NucProteomeDir]/$Gn.tfa" if {$GetWhat!="GetNM" && [file exists $FicNuc]} { continue } lappend LesPk $pk lappend LesGn $name lappend LesNM $accessnum } if {$GetWhat=="GetNM"} { return $LesNM } set NbOK 0 set NbKO 0 set LesCds [CdsFromNM $LesNM "Mus musculus"] foreach Pk $LesPk Gn $LesGn NM $LesNM Cds $LesCds { if {[regexp ">NotFound" $Cds]} { Espionne "" Espionne "$Pk $Gn $NM" Espionne "$Cds" incr NbKO } else { incr NbOK Sauve $Cds dans "[NucProteomeDir]/$Gn.tfa" } } if {[OuiOuNon "Je lance le projet"]} { } return "$NbOK $NbKO" } proc PourGscopeServer {} { return [PourWscope] } proc PourJean {file ref} { LesDefauts LesDefauts CheckSeq 0 LesDefauts Mode Batch DecortiqueEtAfficheUnMSF $file global NomEtSeqAssPDB global Sequences set idx [lsearch -regexp $NomEtSeqAssPDB $ref] set n [lindex $NomEtSeqAssPDB $idx] scan $n "%s %s %s" PDBin NmSeqAss MolId set chn [string index $MolId 5] set MolId [string range $MolId 0 3] global PDB_[set MolId]_SecStr global PDB_[set MolId]_Sequence set SeqAss [set Sequences($NmSeqAss)] set SeqAlignee [lindex [set PDB_[set MolId]_Sequence($chn)] 1] foreach ss [set PDB_[set MolId]_SecStr] { DecortiqueSS $ss Elt NomChnDep NomResDep NomResFin Rmk if {$Elt == "Coil"} {continue} set LesBornes [CorrespondancePDBAli $MolId $NomChnDep $NomResDep $NomResFin $SeqAlignee] set DebAli [lindex $LesBornes 0] set FinAli [lindex $LesBornes 1] puts ">$Elt $DebAli $FinAli $NomResDep $NomResFin" CalculeLesPCIJean $DebAli $FinAli } return } proc PourJean2 {file Fichier} { set id "1yag" global PDB_[set id]_AtmBQ global PDB_[set id]_ChnIdn global PDB_[set id]_Header global PDB_[set id]_NomRes global PDB_[set id]_NmrRes global PDB_[set id]_NomAtm global PDB_[set id]_AtmXYZ DecortiqueUnPDB $file $id if {$Fichier == ""} {set Fichier [DemandeEtSauveFichier "pdb"]} set f [open $Fichier w] puts $f [join [set PDB_[set id]_Header] "\n"] set i 1 foreach c [set PDB_[set id]_ChnIdn] { if {$i != 1} {puts $f "TER "} foreach nmr [set PDB_[set id]_NomRes($c)] nbr [set PDB_[set id]_NmrRes($c)] lan [set PDB_[set id]_NomAtm($c)] lax [set PDB_[set id]_AtmXYZ($c)] lab [set PDB_[set id]_AtmBQ($c)] { foreach x $lax b $lab n $lan { set chn $c if {$c == "a"} {set chn " "} set b [OteLesBlancsEnTrop $b] set lbq [split $b " "] set nb [LePCIDuResidu $nbr] if {$nb == ""} {set nb 0.0} set b "[format "%6.2f%6.2f" 1.0 $nb]" set NomR [AutreCodeLuc $nmr] set ligne [format "%6s%5d %4s %3s %1s%4d %24s%12s" "ATOM " $i $n $NomR $c $nbr $x $b] puts $f $ligne incr i } } } puts $f "END" close $f exit } proc PourLaurent {} { set f [open "laurent.dat" w] foreach a [array names PDB_[set MolId]_NomRes] { puts $f "$a" puts $f "[join [set PDB_[set MolId]_NomRes($a)]]" } close $f } proc PourLesDatas1Uniques {FichierClusters} { foreach Nom [LesUniquesParSerie $FichierClusters] { set Vu($Nom) 1 } set FichierGenome "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human" set LesLignesDatas1 {} foreach Ligne [LesLignesDuFichier $FichierGenome] { set PAB [lindex $Ligne 0] if {[info exists Vu($PAB)]} {lappend LesLignesDatas1 $Ligne} } #FaireLire "nb loc datas1 uniq: [llength $LesLignesDatas1]" set Datas1 [join $LesLignesDatas1 "\n"] return $Datas1 } proc PourMarieAOD {e f} { global TDesDescriptifs TDesOrganismes TDesAccess global Defauts global OrdaliDir global PipeCollection LesDefauts TypeAli XML LesDefauts FichierXML $f LoadingAlignement InitInfoSeqs set fo [open "$e.csv" w] set Ln [array names TDesAccess] set lgn [PlusLongEltDe $Ln] set dl 0 foreach n $Ln { set s "" append s "${n};" set o [set TDesOrganismes($n)] if {[string first "(" $o] > 1} { set Lo [split $o "("] append s "[lindex $Lo 0];" set dl ";[join [lindex $Lo 1 end]];" regsub -all {\)} $dl "" dl } else { append s $o } append s [set TDesDescriptifs($n)] puts $fo $s if {$dl ne ""} {puts $fo $dl} set dl "" } close $fo return } proc PourNico {} { set Ll [LesLignesDuFichier "/home/moumou/deplacements.txt"] set sda 0 set sa2 0 set sdc 0 set sc2 0 set ia 0 set ic 0 set ma -1 set mc -1 set mx -1 set na 99999 set nc 99999 set mn 9999 foreach l $Ll { regsub -all { +} $l " " l set nl [split $l " "] set dp [lindex $nl end] set c [lindex $nl end-3] set r [lindex $nl end-2] if {$c eq "A"} { set sda [expr {$sda+$dp}] if {$dp > $ma} {set ma $dp} if {$dp < $na} {set na $dp} incr ia } else { set sdc [expr {$sdc+$dp}] if {$dp > $mc} {set mc $dp} if {$dp < $nc} {set nc $dp} incr ic incr r 1000 } if {$dp > $mx} {set mx $dp} if {$dp < $mn} {set mn $dp} set T($c,$r) $dp } set sum 0 foreach e [array names T] { set sum [expr {$sum+[set T($e)]}] } set moy [expr {$sum/[llength [array names T]]}] puts "Nb atm A $ia" puts "Nb atm C $ic" puts "Min/Max chn A $na/$ma" puts "Min/Max chn C $nc/$mc" puts "Moy chn A [expr {$sda/$ia}]" puts "Moy chn C [expr {$sdc/$ic}]" puts "" puts "Moy totale $moy" puts "Min/Max tot $mn/$mx" # Ramene dans l'intervalle 10 - 200 set LesV {} set mxv -9999. set mnv 9999. foreach e [array names T] { set x [set T($e)] set r [expr {(double($x)-$mn)/($mx-$mn)}] set v [expr {(10.) + (200.-10.)*$r}] if {$v > $mxv} {set mxv $v} if {$v < $mnv} {set mnv $v} set T($e) $v lappend LesV $v } puts "" puts "apres trans :" puts "Min/Max $mnv/$mxv" puts "" DecortiqueUnPDB "dimmixte.pdb" global PDB_dimmixte_AtmBQ global PDB_dimmixte_NmrRes foreach ccou {A C} { set Lnew {} set Lbq [set PDB_dimmixte_AtmBQ($ccou)] set Lnm [set PDB_dimmixte_NmrRes($ccou)] foreach r $Lnm bq $Lbq { set x [set T($ccou,$r)] set Nx {} foreach a $bq { lassign $a b q lappend Nx [list $x $q] } lappend Lnew $Nx } set PDB_dimmixte_AtmBQ($ccou) $Lnew } EcritLePDB dimmixte new_dimmixte.pdb set histo [CreeHistogramme $LesV 50 graph] # array set Th $histo # parray Th # exit } proc PourNicolas {Start Stop chr} { for {set i $Start} {$i<=$Stop} {incr i} { lappend Gn [LocInBetween $i Mouse $chr Ucsc] } set Gn [ListeSansDoublon $Gn] EspionneL $Gn } proc PourNuca {LesFamilles {LesOrgas ""} {FichierXHDA ""}} { Wup "Permet de convertir un fichier BilanXHda en fichier pour Nuca fournit B T ou J" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" set LesFichiersFamille {} if {! [regexp "/" $LesFamilles]} { foreach file $LesFamilles { lappend LesFichiersFamille "$RepBilan/$file" } } else { set LesFichiersFamille $LesFamilles } Espionne $LesFichiersFamille if {$LesOrgas=="" || $LesOrgas=="Tous"} { foreach orga [LesGenomesCompletsAuFormat Court] { lappend LesORGAs [string toupper $orga] } } Espionne $LesORGAs if {$FichierXHDA==""} {set FichierXHDA "$RepXHda/TousLesBilans"} if { ! [regexp "/" $FichierXHDA]} { set FichierXHDA "$RepXHda/$FichierXHDA" } set FichierNUCA "${FichierXHDA}_PourNuca" foreach File $LesFichiersFamille { foreach ligne [LesLignesDuFichier $File] { scan $ligne "%s %s %d %d %d" PAB Orga T B J if {! [regexp -all -nocase "$Orga" $LesORGAs]} { continue } set BDePABOrga($PAB,$Orga) $B # set TDePABOrga($PAB,$Orga) $T # set JDePABOrga($PAB,$Orga) $J if { ! [info exists DejaVu($PAB)]} { lappend LesPABs $PAB set DejaVu($PAB) 1 } if { ! [info exists DejaVu($Orga)]} { lappend LesOrgas $Orga set DejaVu($Orga) 1 } } } set n [llength $LesPABs] set d [llength $LesOrgas] set LesLignes [list "$n\t$d"] set FichierOrgasOrdonnes "$RepXHda/OrgaOrdonne.nuca" set Res [SauveLesLignes $LesOrgas dans $FichierOrgasOrdonnes] foreach PAB $LesPABs { set Ligne "$PAB" foreach Orga $LesOrgas { append Ligne "\t[set BDePABOrga($PAB,$Orga)]" # append Ligne "\t[set TDePABOrga($PAB,$Orga)]" # append Ligne "\t[set JDePABOrga($PAB,$Orga)]" } lappend LesLignes $Ligne } return [SauveLesLignes $LesLignes dans $FichierNUCA] } proc PourNucaPourTous {} { Wup "Permet de convertir tous les bilansXHDA en 1 fichier utilisable pour Nuca" global RepertoireDuGenome set RepBilan "$RepertoireDuGenome/bilan_xhda" set LesFamilles [glob -nocomplain "$RepBilan/*"] return "[PourNuca $LesFamilles "" "TousLesBilans"] created." } proc PourPaperOne {FichierTousLesCodes} { set LaListeComplete {} foreach Ligne [LesLignesDuFichier $FichierTousLesCodes ] { scan $Ligne "%s %s" CodeClone GscopeCode set PolyLoc [PolyLocalise $GscopeCode] lappend LaListeComplete "$CodeClone $GscopeCode $PolyLoc" set LocMRM [PolyLocalise $GscopeCode "" recalcul] if {$PolyLoc!=$LocMRM} { lappend LaListeComplete "$CodeClone $GscopeCode $LocMRM after remasking" } set LesLocs [LesLocalisationsSurChroContig $GscopeCode] set Loc [lindex $LesLocs 0] scan $Loc "%s %s %d %d %s" Chr Cont Gauche Droite Orient lappend LaListeComQuelEstLeGscopeCodeplete "$CodeClone $GscopeCode chromosome $Chr contig $Cont from $Gauche to $Droite ( $Orient )" set LesCops [LesMeilleursCopainsDuBlast $GscopeCode blastngenembl] #set Cop [lindex $LesCops 0 ] foreach Cop $LesCops { #Espionne $Cop if {![regexp -nocase "No file" $Cop]} { scan $Cop "%s %s %s %s %s" BID Access Expect Genre Espece #Espionne $BID set DE [join [lrange [split $Cop " "] 5 end] " "] #Espionne $DE lappend LaListeComplete "$CodeClone $GscopeCode $BID $DE" } } set ResultatRecherche [ExtraitInfosDesInfosautomatiquesPourNotes $GscopeCode] if {$ResultatRecherche != ""} { lappend LaListeComplete "$CodeClone $GscopeCode mRNA complete cds: $ResultatRecherche" } set LesCopains [LesMeilleursCopainsDuBlast $GscopeCode "blastx"] foreach Copain $LesCopains { if {![regexp -nocase "No hits found" $Copain]} { lappend LaListeComplete "$CodeClone $GscopeCode proteine: $Copain" } } } set Donnees [join $LaListeComplete "\n"] return $Donnees } proc PourUnCodon {Codon FichierCod AAouN} { #AAouN = aa ou n if {$AAouN!="aa" && $AAouN!="n"} {return} if {![file exists $FichierCod]} {return} set Codon [string toupper $Codon] foreach Ligne [LesLignesDuFichier $FichierCod] { set Ligne [string trim $Ligne] if {$Ligne==""} {continue} scan $Ligne "%s %s %s" aa cod n if {$cod==$Codon} { if {$AAouN=="aa"} {return $aa} if {$AAouN=="n"} {return $n} } } } proc PourWscope {{NouvelleValeur ""}} { global PourWscope if {$NouvelleValeur!=""} { set PourWscope $NouvelleValeur } if { ! [info exists PourWscope]} { set PourWscope 0 } return $PourWscope } proc PourcentageArrondiSup {NFavorables NPossibles} { if {$NFavorables == 0} { return 0 } else { return [Mini 100 [expr round((100.*$NFavorables)/$NPossibles)+1]] } } proc PourcentageDIdentiteDuSegmentDeLId {FichierBlast BanqueId {Segment 1} {WithoutFilter 1}} { if {![file exists $FichierBlast]} {return ""} set nF 0 if {$WithoutFilter} {set nF [NombreDeBasesFiltrees $FichierBlast $BanqueId $Segment]} set Id [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment Identities] if {$Id == ""} {return} regexp {([0-9]+)/([0-9]+)} $Id tmp n nTot return [expr $n * 1.0 / ($nTot - $nF)] } proc PourcentageDIdentiteDuSegmentDeLId_TabBlast {aTabBlast BanqueId {Segment 1} {WithoutFilter 1}} { Wup "Meme pourcenatge d'identite que dans le blast mais avec la possibilite de ne pas comptabiliser les bases filtrees" upvar $aTabBlast TabBlast if {![info exists TabBlast($BanqueId,$Segment,Identities)]} {return} set nF 0 if {$WithoutFilter} {set nF [NombreDeBasesFiltrees_TabBlast TabBlast $BanqueId $Segment]} set Id [set TabBlast($BanqueId,$Segment,Identities)] regexp {([0-9]+)/([0-9]+)} $Id tmp n nTot return [expr $n * 1.0 / ($nTot - $nF)] } proc PourcentageDIdentiteGlobal {FichierBlast BanqueId {Quoi Query}} { set n [NombreDeBasesEnCommun $FichierBlast $BanqueId $Quoi] set NTot [NombreDeBasesDansLesAlignements $FichierBlast $BanqueId $Quoi] if {$NTot == 0 || $n == "" || $NTot == ""} {return} return [expr $n * 1.0 / $NTot] } proc PourcentageDIdentiteGlobal_TabBlast {aTabBlast BanqueId {Quoi Query}} { Wup "Nombre de bases alignees de la query/subject divisee par le nb de bases dans les alignements de la query/subject" upvar $aTabBlast TabBlast set n [NombreDeBasesEnCommun_TabBlast TabBlast $BanqueId $Quoi] set NTot [NombreDeBasesDansLesAlignements_TabBlast TabBlast $BanqueId $Quoi] if {$NTot == 0} {return} return [expr $n * 1.0 / $NTot] } proc PourcentageDOverlapsAvecLeMemeProfilDExpression_avecFC {} { set b 0; set nb 0 set n 0; set h 0 foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OverlapEtProfilsEtFold"] { set Ligne [string trim $Ligne] if {$Ligne=={}} {continue} incr nb set PDD [lindex $Ligne 3] set FAffy [lindex $Ligne 4] set PAffy [lindex $Ligne 5] if {$FAffy<=0.8 || $FAffy>=1.2} { if {$PDD!=0} { if {$PDD==$PAffy} { incr b } } else { incr n } } else {incr h} } set t1 [expr $h+$n] #Espionne $nb set t [expr $nb - $t1] Espionne "$b bons surune total de $t" set b [format "%.2f" $b] set t [format "%.2f" $t] #set d [expr $b/$t] set d [format "%.2f" [expr $b/$t]] return [expr $d*100] } proc PourcentageDeDistancesInferieuresA_PourRapport {SeuilDistance} { set nTot 0 set n 0 set LesClusters [O2C2O LesClusters foreach Cluster1 $LesClusters { foreach Cluster2 $LesClusters { if {$Cluster1 == $Cluster2} {continue} if {[info exists TabTmp($Cluster2,$Cluster1)]} {continue} set TabTmp($Cluster1,$Cluster2) 1 set Distance [expr round([O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance])] incr nTot if {$SeuilDistance < $Distance} {continue} incr n } } Espionne "$n $nTot" return [expr 1.0 * $n / $nTot] } proc PourcentageDeGenesPourToutesLesRegions {} { global RepertoireDuGenome set FichierArea "$RepertoireDuGenome/Localisation/area1e6bp_Distribution" foreach Ligne [LesLignesDuFichier $FichierArea] { scan $Ligne "%s %s %s %s" chro long type var set n 0 if {$var=="Var"} { foreach Elt $Ligne { if {$Elt!=" "} { incr n if {$n>4} {lappend LesAreas "$Elt"} } } } if {$var=="NbSeq"} { foreach Elt $Ligne { if {$Elt!=" "} { incr n if {$n>4} { lappend LesNbSeq "$Elt" lappend LesChro "$chro" } } } } } set FichierGenes "[GscopeDatabaseDir Human0208]/Localisation/Gene_area1e6bp_Distribution" foreach Ligne [LesLignesDuFichier $FichierGenes] { scan $Ligne "%s %s %s %s" chro long type var set n 0 if {$var=="NbGenes"} { foreach Elt $Ligne { if {$Elt!=" "} { incr n if {$n>4} {lappend LesNbGenes "$Elt"} } } } } set n 0 set ng 0 set ns 0 foreach Chro $LesChro Zone $LesAreas Nseq $LesNbSeq Ngene $LesNbGenes { incr n if {$Ngene==0} { incr ng continue } if {$Nseq==0} { incr ns continue } #Espionne "nseq=$Ngene " #Espionne "ngenes=$Nseq " set Pourcentage [expr round($Nseq/$Ngene) *100] Espionne $Pourcentage set Pourcentage [expr round($Pourcentage/5)] lappend LesPourcentages $Pourcentage } Espionne $n Espionne "nfois ngene nul : $ng" Espionne "nfois nseq nul : $ns" Histogramme $LesPourcentages Graphe } proc PourcentageDeGenomesCompletsOrthologuesDansDbClustal {Nom} { global PourcentageDeGenomesCompletsOrthologuesDansDbClustal if {[info exists PourcentageDeGenomesCompletsOrthologuesDansDbClustal($Nom)]} { return [set PourcentageDeGenomesCompletsOrthologuesDansDbClustal($Nom)] } if {[info exists PourcentageDeGenomesCompletsOrthologuesDansDbClustal("EstCharge")]} { return -1 } foreach NomLu [ListeDesPABs] { set Tous [string trim [ORGAorgaDesMSFs $NomLu]] regsub -all { {2,}} $Tous " " Tous set nTous [Maxi 1 [llength [split $Tous " "]]] regsub -all {[A-Z]} $Tous "" Absents set Absents [string trim $Absents] regsub -all { {2,}} $Absents " " Absents set nAbsents [llength [split $Absents " "]] set PourcentageDeGenomesCompletsOrthologuesDansDbClustal($NomLu) [expr round(($nTous-$nAbsents)*100/$nTous)] } set PourcentageDeGenomesCompletsOrthologuesDansDbClustal(Count) $nTous set PourcentageDeGenomesCompletsOrthologuesDansDbClustal("EstCharge") -1 return [PourcentageDeGenomesCompletsOrthologuesDansDbClustal $Nom] } proc PourcentageDeGenomesCompletsOrthologuesDansTBlastN {Nom} { global PourcentageDeGenomesCompletsOrthologuesDansTBlastN if {[info exists PourcentageDeGenomesCompletsOrthologuesDansTBlastN($Nom)]} { return [set PourcentageDeGenomesCompletsOrthologuesDansTBlastN($Nom)] } if {[info exists PourcentageDeGenomesCompletsOrthologuesDansTBlastN("EstCharge")]} { return -1 } foreach NomLu [ListeDesPABs] { set Tous [string trim [ORGAorgaDesTBlastNs $NomLu]] regsub -all { {2,}} $Tous " " Tous set nTous [Maxi 1 [llength [split $Tous " "]]] regsub -all {[A-Z]} $Tous "" Absents set Absents [string trim $Absents] regsub -all { {2,}} $Absents " " Absents set nAbsents [llength [split $Absents " "]] set PourcentageDeGenomesCompletsOrthologuesDansTBlastN($NomLu) [expr round(($nTous-$nAbsents)*100/$nTous)] } set PourcentageDeGenomesCompletsOrthologuesDansTBlastN(Count) $nTous set PourcentageDeGenomesCompletsOrthologuesDansTBlastN("EstCharge") 1 return [PourcentageDeGenomesCompletsOrthologuesDansTBlastN $Nom] } proc PourcentageDeLacide {acide} { global Wobble_[set acide] Wobble_pourcentC_[set acide] global Wobble_[set acide] Wobble_pourcentE_[set acide] # pourcentC : en fonction du codon foreach {indices valeur} [array get Wobble_[set acide]] { set indices_liste [split $indices ","] set codon [lindex $indices_liste 0] if {! [info exists $codon]} {set $codon 0.0} set $codon [expr {[set $codon] + $valeur}] } foreach {indices valeur} [array get Wobble_[set acide]] { set indices_liste [split $indices ","] set codon [lindex $indices_liste 0] # Attention ! On met valeur entre 0. et 1. # pour cluspack if {[set $codon] != 0} { set Wobble_pourcentC_[set acide]($indices) [expr {$valeur * 1. / [set $codon]}] } else { set Wobble_pourcentC_[set acide]($indices) 0.0 } } # pourcentE : en fonction de la classe foreach {indices valeur} [array get Wobble_[set acide]] { set indices_liste [split $indices ","] set classe [lindex $indices_liste 1] if {! [info exists $classe]} {set $classe 0} set $classe [expr {[set $classe] + $valeur}] } foreach {indices valeur} [array get Wobble_[set acide]] { set indices_liste [split $indices ","] set classe [lindex $indices_liste 1] # Attention ! On met valeur entre 0. et 1. # pour cluspack if {[set $classe] != 0} { set Wobble_pourcentE_[set acide]($indices) [expr {$valeur * 1. / [set $classe]}] } else { set Wobble_pourcentE_[set acide]($indices) 0.0 } } return } proc PourcentageDeLacidePourProt {acide} { global Wprot_[set acide] Wprot_pourcentC_[set acide] Wprot_pourcentE_[set acide] Wprot_pourcentT_[set acide] # pourcentC : en fonction du codon foreach {indices valeur} [array get Wprot_[set acide]] { lassign [split $indices ,] codon tmp if {! [info exists $codon]} { set $codon 0.0 } set $codon [expr {[set $codon] + $valeur}] } foreach {indices valeur} [array get Wprot_[set acide]] { lassign [split $indices ,] codon tmp if {[set $codon] != 0} { set Wprot_pourcentC_[set acide]($indices) [expr {$valeur * 1. / [set $codon]}] } else { set Wprot_pourcentC_[set acide]($indices) 0.0 } } # pourcentE : en fonction de la classe foreach {indices valeur} [array get Wprot_[set acide]] { lassign [split $indices ,] tmp classe if {! [info exists $classe]} { set $classe 0.0 } set $classe [expr {[set $classe] + $valeur}] } foreach {indices valeur} [array get Wprot_[set acide]] { lassign [split $indices ,] tmp classe if {[set $classe] != 0} { set Wprot_pourcentE_[set acide]($indices) [expr {$valeur * 1. / [set $classe]}] } else { set Wprot_pourcentE_[set acide]($indices) 0.0 } } # pourcentT : pourcentage / nbr total de codon set tot 0 foreach {indices valeur} [array get Wprot_[set acide]] { set tot [expr {$tot + $valeur}] } foreach {indices valeur} [array get Wprot_[set acide]] { if {$tot > 0} { set Wprot_pourcentT_[set acide]($indices) [expr {$valeur * 1. / $tot}] } else { set Wprot_pourcentT_[set acide]($indices) 0.0 } } return } proc PourcentageDeRecouvrement {FichierBlast BanqueId {QueryOuSubject Query}} { Wup "Nombre de bases alignees de la query/subject divisee par la taille de la query/subject" set NbBasesEnCommun [NombreDeBasesEnCommun $FichierBlast $BanqueId $QueryOuSubject] if {$NbBasesEnCommun == ""} {return} if {[string equal -nocase "Query" $QueryOuSubject]} { set Taille [AskBlast $FichierBlast Taille] } else { set Taille [AskBlast $FichierBlast BanqueId $BanqueId Taille] } return [expr $NbBasesEnCommun * 1.0 / $Taille] } proc PourcentageDeRecouvrementDuSegment {FichierBlast BanqueId {Segment 1} {QueryOuSubject Query}} { Wup "Nombre de bases alignees de la query/subject divisee par la taille de la query/subject" set Identities [AskBlast $FichierBlast BanqueId $BanqueId Segment $Segment Identities] if {$Identities == ""} {return} set n 0 scan $Identities "%d/%d" n nTot if {[string equal -nocase "Query" $QueryOuSubject]} { set Taille [AskBlast $FichierBlast Taille] } else { set Taille [AskBlast $FichierBlast BanqueId $BanqueId Taille] } return [expr $n * 1.0 / $Taille] } proc PourcentageDeRecouvrement_TabBlast {aTabBlast BanqueId {QueryOuSubject Query}} { Wup "Nombre de bases alignees de la query/subject divisee par la taille de la query/subject" upvar $aTabBlast TabBlast if {![info exists TabBlast]} {return} set NbBasesEnCommun [NombreDeBasesEnCommun_TabBlast TabBlast $BanqueId $QueryOuSubject] if {$QueryOuSubject == "Query"} { set Taille [set TabBlast(Taille)] } else { set Taille [set TabBlast($BanqueId,Taille)] } return [expr $NbBasesEnCommun * 1.0 / $Taille] } proc PourcentageDeSequenceMasquee {FileTFA} { if {![file exists $FileTFA]} {return} set Seq [TFA2SEQ $FileTFA] if {[EstCeDeLADN_Seq $Seq]} {set ResMasque N} else {set ResMasque X} set NTot 0 set NResMasques 0 foreach Res [split $Seq ""] { if {[string equal -nocase $Res $ResMasque]} {incr NResMasques} incr NTot } if {$NTot == 0} {return} return [expr $NResMasques * 1.0 / $NTot] } proc PourcentageDeStops {} { global RepertoireDuGenome Wup "Ecrit pour Philippe Dumas, pour trouver les codons stop en frame shift dans chaque prot" set CumulFavorable(1) 0 set CumulFavorable(2) 0 set CumulPossible(1) 0 set CumulPossible(2) 0 set nSansRien 0 set MaxVoulus -1 foreach Nom [ListeDesPABs] { if { ! [incr MaxVoulus -1]} { break } set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Orient [Box $Nom orient] set Seq [BoutADN $Debut $Fin $Orient] set Long [string length $Seq] foreach Decalage {1 2} { set nStops 0 set nCodons 0 set nSansRien 0 for {set i $Decalage} {$i < [expr $Long-3]} {incr i 3} { incr nCodons incr CumulPossible($Decalage) set Codon [string range $Seq $i [expr $i+2]] if {[CodonStopPossible $Codon]} { incr CumulFavorable($Decalage) incr nStops if {$nSansRien>0} { lappend LesSansRien($Decalage) $nSansRien } set nSansRien 0 } else { incr nSansRien } } set Pourcent($Decalage) [expr 100.*$nStops/$nCodons] } # Espionne "$Nom [format "%4.1f" $Pourcent(1)] [format "%4.1f" $Pourcent(2)]" } Histogramme [set LesSansRien(1)] "Graphe" Histogramme [set LesSansRien(2)] "Graphe" Espionne "$CumulFavorable(1) / $CumulPossible(1) $CumulFavorable(2) / $CumulPossible(2)" Espionne "[format "%4.1f" [expr 100.*$CumulFavorable(1)/$CumulPossible(1)]] [format "%4.1f" [expr 100.*$CumulFavorable(2)/$CumulPossible(2)]]" return } proc PourcentageDesBasesAligneesSurToutesLesBasesAlignables {FichierBlast BanqueId} { set N [NombreDeBasesEnCommun $FichierBlast $BanqueId] set NTot [NombreDeBasesAlignables $FichierBlast $BanqueId] if {$NTot == 0 || $N == "" || $NTot == ""} {return 0} return [expr $N * 1.0 / $NTot] } proc PourcentageDesBasesAligneesSurToutesLesBasesAlignables_TabBlast {aTabBlast BanqueId} { upvar $aTabBlast TabBlast set N [NombreDeBasesEnCommun_TabBlast TabBlast $BanqueId] set NTot [NombreDeBasesAlignables_TabBlast TabBlast $BanqueId] if {$NTot == 0} {return 0} return [expr $N * 1.0 / $NTot] } proc PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables {FichierBlast BanqueId} { set N [NombreDeBasesDansLesAlignements $FichierBlast $BanqueId] set NTot [NombreDeBasesAlignables $FichierBlast $BanqueId] if {$NTot == 0 || $N == "" || $NTot == ""} {return 0} return [expr $N * 1.0 / $NTot] } proc PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables_TabBlast {aTabBlast BanqueId} { upvar $aTabBlast TabBlast set N [NombreDeBasesDansLesAlignements_TabBlast TabBlast $BanqueId] set NTot [NombreDeBasesAlignables_TabBlast TabBlast $BanqueId] if {$NTot == 0} {return 0} return [expr $N * 1.0 / $NTot] } proc PourcentageIdentiteOrga {Nom Orga {FichierPIC ""}} { global RepertoireDuGenome global PourcentageIdentiteOrga global LesOrgasDePIO global NotreOS global NotreOrga Wup "If FichierPIC is empty we work normally on current genome" set FiPIC $FichierPIC set NOF "$Nom,$Orga,$FiPIC" if { [info exists PourcentageIdentiteOrga($NOF)]} { return [set PourcentageIdentiteOrga($NOF)] } else { if {0 && [info exists PourcentageIdentiteOrga("EstCharge",$FiPIC)]} { return -1 } } if {$FichierPIC==""} { set Extension ".$NotreOrga" set FichierPIC "$RepertoireDuGenome/fiches/piclustalw$Extension" } if {$Nom == "LaListe"} { set RendreLaListe 1 } else { set RendreLaListe 0 } if { ! [info exists PourcentageIdentiteOrga("EstCharge",$FiPIC)]} { set PourcentageIdentiteOrga("EstCharge",$FiPIC) "EstCharge" if { ! [file exists $FichierPIC]} { return "PourcentageIdentiteOrgaNonValide" } Espionne "Je charge $FichierPIC" foreach Ligne [LesLignesDuFichier $FichierPIC] { set Liste [split $Ligne " "] set NomLu [lindex $Liste 0] set ListeOrgaPIC [lrange $Liste 1 end] foreach {OrgaLu PI} $ListeOrgaPIC { if {[info exists PourcentageIdentiteOrga($NomLu,$OrgaLu,$FiPIC)]} { continue } if { ! [info exists DejaVu($OrgaLu)]} { lappend LesOrgasDePIO $OrgaLu set DejaVu($OrgaLu) 1 } set NOFlu "$NomLu,$OrgaLu,$FiPIC" set PourcentageIdentiteOrga($NOFlu) $PI } } } if {$RendreLaListe} { return $LesOrgasDePIO } if {[info exists PourcentageIdentiteOrga($NOF)]} { return [set PourcentageIdentiteOrga($NOF)] } else { return -1 } } proc PourcentagesDeMasking {aTableau Nom {RepTFA nuctfa} {RepMask nucmask}} { global RepertoireDuGenome upvar $aTableau Tableau set RepTFA "$RepertoireDuGenome/$RepTFA" if {![file exists "$RepTFA/$Nom"]} {return ""} set Taille [TailleDeLaSequenceDuFichierTFA "$RepTFA/$Nom"] if {$Taille == "" || $Taille == 0} {return ""} set RepMask "$RepertoireDuGenome/$RepMask" if {![file exists "$RepMask/$Nom.m" ]} {return ""} set FichierMask "$RepMask/$Nom.m" set ReMask 1 if {![file exists "$RepMask/$Nom.rm"]} {set ReMask 0} set FichierReMask "$RepMask/$Nom.rm" set MRM 1 if {![file exists "$RepMask/$Nom.mrm"]} {set MRM 0} set FichierMRM "$RepMask/$Nom.mrm" set NDansTFA 0 foreach Base [split [string toupper [QueLaSequenceDuTFA "$RepTFA/$Nom" ]] ""] { if {$Base == "N"} {incr NDansTFA} } set LesPourcentages {} set NDansMask 0 foreach Base [split [string toupper [QueLaSequenceDuTFA $FichierMask ]] ""] { if {$Base == "N"} {incr NDansMask} } set Tableau(Masking) [expr round(($NDansMask - $NDansTFA)*100.0/$Taille)] if {$ReMask == 1} { set NDansReMask 0 foreach Base [split [string toupper [QueLaSequenceDuTFA $FichierReMask]] ""] { if {$Base == "N"} {incr NDansReMask} } set Tableau(ReMasking) [expr round(($NDansReMask - $NDansTFA)*100.0/$Taille)] } if {$MRM == 1} { set NDansMRM 0 foreach Base [split [string toupper [QueLaSequenceDuTFA $FichierMRM ]] ""] { if {$Base == "N"} {incr NDansMRM} } set Tableau(MRM) [expr round(($NDansMRM - $NDansTFA)*100.0/$Taille)] } return $aTableau } proc PourcentagesDeRetNetConnusParCluster_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierLocRetNet "[RepertoireDuGenome]/../RetNet/Localisation/BestLocalisation_Human" set LesNoms [lsort -unique [LesNoms $PABouNomsInteressantsouListeouFichier]] set Fichier "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" set LesLocDeRN {} set NbRetNet 0 foreach RN [InterrogeLocalisation $FichierLocRetNet LesNoms] { incr NbRetNet foreach LocRN [InterrogeLocalisation $FichierLocRetNet Nom $RN] {lappend LesLocDeRN $LocRN} } foreach Nom $LesNoms { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier $Nom Cluster] if {![info exists Tab(Cluster,$Cluster,nRetNet)]} { set Tab(Cluster,$Cluster,nRetNet) 0 set Tab(Cluster,$Cluster,nRetNetNonRedondant) 0 } set Tab($Nom,LesRetNet) {} foreach Loc [InterrogeLocalisation $FichierLoc Nom $Nom] { set Info [lindex $Loc 1 ] if {![regexp -nocase {MayBePolyLoc|PolyLoc|MonoLoc} $Info]} {continue} set InfoBest [lindex $Loc 20] if {![regexp -nocase "best" $InfoBest]} {continue} set Chrom [lindex $Loc 9 ] set DChrom [lindex $Loc 10] set FChrom [lindex $Loc 11] set Contig [lindex $Loc 13] foreach LocRN $LesLocDeRN { set RN [lindex $LocRN 0 ] set ChromRN [lindex $LocRN 9 ] set DChromRN [lindex $LocRN 10] set FChromRN [lindex $LocRN 11] set ContigRN [lindex $LocRN 13] if {$Chrom != $ChromRN || $Contig != $ContigRN || ![CesRegionsSontEllesOverlappantes $DChrom $FChrom $DChromRN $FChromRN]} {continue} incr Tab(Cluster,$Cluster,nRetNet) lappend Tab($Nom,LesRetNet) $RN if {![info exists DejaVu(Cluster,$Cluster,$RN)]} { set DejaVu(Cluster,$Cluster,$RN) 1 incr Tab(Cluster,$Cluster,nRetNetNonRedondant) } } } } foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $Fichier LesClusters] { set n [set Tab(Cluster,$Cluster,nRetNet)] set P [expr $n * 1.0 / $NbRetNet] set nNR [set Tab(Cluster,$Cluster,nRetNetNonRedondant)] set PNR [expr $nNR * 1.0 / $NbRetNet] Espionne "$Cluster\t$n\t$NbRetNet\t$P\t$nNR\t$PNR" } return } proc PourcentagesDeRetNetEtOMIMParCluster_TL {{PABouNomsInteressantsouListeouFichier NomsInteressants}} { set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" if {![file exist $FichierOCADE]} {return} set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] set NbRetNetTot 0 set NbRetNetTot 0 set NbSeqTot 0 foreach Nom $LesNoms { #if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom PointTemporel 35 Fold PR sur BR] < 3} {continue} set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] if {![info exists Tab(Cluster,$Cluster,NbRetNet)]} { set Tab(Cluster,$Cluster,NbRetNet) 0 set Tab(Cluster,$Cluster,NbSeq) 0 set Tab(Cluster,$Cluster,NbOMIM) 0 set Tab(Cluster,$Cluster,NbRetNetStrict) 0 set Tab(Cluster,$Cluster,NbOMIMStrict) 0 set Tab(Cluster,$Cluster,NbRetNetBis) 0 set Tab(Cluster,$Cluster,NbOMIMBis) 0 } set nRetNet [llength [lsort -unique [InterrogeMesRetNet $Nom LesRetNet]]] set nOMIM [llength [lsort -unique [InterrogeMesOMIM $Nom LesOMIM ]]] incr Tab(Cluster,$Cluster,NbRetNet) $nRetNet if {0 < $nRetNet} {incr Tab(Cluster,$Cluster,NbRetNetStrict)} incr Tab(Cluster,$Cluster,NbOMIM) $nOMIM if {0 < $nOMIM} {incr Tab(Cluster,$Cluster,NbOMIMStrict)} foreach RetNet [lsort -unique [InterrogeMesRetNet $Nom LesRetNet]] { if {![info exists TabTmp($Cluster,$RetNet)]} { set TabTmp($Cluster,$RetNet) 1 incr Tab(Cluster,$Cluster,NbRetNetBis) } } foreach OMIM [lsort -unique [InterrogeMesOMIM $Nom LesOMIM]] { if {![info exists TabTmp($Cluster,$OMIM)]} { set TabTmp($Cluster,$OMIM) 1 incr Tab(Cluster,$Cluster,NbOMIMBis) } } incr NbSeqTot incr Tab(Cluster,$Cluster,NbSeq) } set NbRetNetDiffTot [llength [lsort -unique [InterrogeRetNet LesRetNet]]] set NbOMIMDiffTot [llength [lsort -unique [InterrogeOMIM LesOMIM ]]] foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { set NbRetNet [set Tab(Cluster,$Cluster,NbRetNet) ] set NbRetNetStrict [set Tab(Cluster,$Cluster,NbRetNetStrict)] set NbOMIM [set Tab(Cluster,$Cluster,NbOMIM) ] set NbOMIMStrict [set Tab(Cluster,$Cluster,NbOMIMStrict) ] set NbSeq [set Tab(Cluster,$Cluster,NbSeq) ] set PRetNet [format "%.3f" [expr $NbRetNet * 1.0 / $NbSeq]] set POMIM [format "%.3f" [expr $NbOMIM * 1.0 / $NbSeq]] set PRetNetStrict [format "%.3f" [expr $NbRetNetStrict * 1.0 / $NbSeq]] set POMIMStrict [format "%.3f" [expr $NbOMIMStrict * 1.0 / $NbSeq]] set NbRetNetDiff [set Tab(Cluster,$Cluster,NbRetNetBis)] set NbOMIMDiff [set Tab(Cluster,$Cluster,NbOMIMBis) ] set PRetNetDiff [expr $NbRetNetDiff * 1.0 / $NbRetNetDiffTot] set POMIMDiff [expr $NbOMIMDiff * 1.0 / $NbOMIMDiffTot ] Espionne "$Cluster\t$NbSeq\tRetNet\t$NbRetNet\t$PRetNet\t$NbRetNetStrict\t$PRetNetStrict\t$NbRetNetDiff\t$NbRetNetDiffTot\t$PRetNetDiff" Espionne "$Cluster\t$NbSeq\tOMIM\t$NbOMIM\t$POMIM\t$NbOMIMStrict\t$POMIMStrict\t$NbOMIMDiff\t$NbOMIMDiffTot\t$POMIMDiff" } return } proc PousseADroite {} { global LNSeqlab LSSeqlab NomTextSeq set w $NomTextSeq set idx [$w index active] lassign [split $idx ,] il ic set seqass [string trim [lindex $LNSeqlab $il]] if {$seqass eq ""} {return} $NomTextSeq configure -state normal $NomTextSeq configure -usecommand 0 set LongueurTotale [LongueurDeLAlignement seqlab] set Lseq [SeqsGroupeSeqlabDe $seqass] foreach s $Lseq { set i [lsearch $LNSeqlab $s] lappend LIxSeq $i } set ifin [NextGapDesSeqs $ic $LongueurTotale $LIxSeq] if {$ifin == $ic} { $NomTextSeq configure -state disabled $NomTextSeq configure -usecommand 1 return } if {$ifin < 0} { AjouteDesGapsATous end set ifin "end" } foreach i $LIxSeq { set s [lindex $LSSeqlab $i] set s [lreplace $s $ifin $ifin] set s [linsert $s $ic "."] lset LSSeqlab $i $s } if {$ifin eq "end"} { InitWRegle AfficheRegle } $NomTextSeq activate $il,[expr {$ic+1}] $NomTextSeq selection clear all $NomTextSeq selection set $il,[expr {$ic+1}] $NomTextSeq configure -state disabled $NomTextSeq configure -usecommand 1 update idletasks return } proc PousseAGauche {} { global LNSeqlab LSSeqlab NomTextSeq set w $NomTextSeq $w push left set idx [$w index active] lassign [split $idx ,] il ic set seqass [lindex $LNSeqlab $il] if {$seqass eq ""} {return} $w configure -state normal -usecommand 0 set Lseq [SeqsGroupeSeqlabDe $seqass] foreach s $Lseq { set i [lsearch $LNSeqlab $s] lappend LIxSeq $i } set im [expr {$ic-1}] set x $im set Deb 0 set ifin [NextGapDesSeqs $im 0 $LIxSeq] if {$ifin == $im} { $w configure -state disabled -usecommand 1 return } if {$ifin < 0} { AjouteDesGapsATous 0 set ifin 0 set Deb 1 } incr ic if {$Deb} {incr ic} set im [expr {$ic-2}] foreach i $LIxSeq { set s [lindex $LSSeqlab $i] set s [linsert $s $ic "."] set s [lreplace $s $ifin $ifin] lset LSSeqlab $i $s } if {$Deb} { InitWRegle AfficheRegle } $w activate $il,$im $w selection clear all $w selection set active $w configure -state disabled -usecommand 1 return } proc PpcrEnStock {FiPpcr {Quoi ""}} { if { ! [regexp "/" $FiPpcr]} { set FiPpcr "[RepertoireDuGenome]/ppcr/$FiPpcr" } if { ! [file exists $FiPpcr]} { regsub ".tfa$" $FiPpcr "" FiPpcr } if { ! [file exists $FiPpcr]} { append FiPpcr ".tfa"} if { ! [file exists $FiPpcr]} { return "" } if {$Quoi==""} { set Quoi "TFA" } if {$Quoi=="TFA"} { return [ContenuDuFichier $FiPpcr] } set Entete [EnteteDuFichierTFA $FiPpcr "access"] if {$Quoi=="Header"} { return $Entete } regsub -nocase "^ProduitPcr_" $Entete "" Entete set LSAvAp [DecomposeLaLigne $Entete] Espionne $LSAvAp set Sujet [lindex $LSAvAp 0] set LesAv [lindex $LSAvAp 1] set LesAp [lindex $LSAvAp 2] if {$Quoi=="Sujet"} { return $Sujet } if {$Quoi=="Signals5"} { return $LesAv } if {$Quoi=="Signals3"} { return $LesAp } set Seq [QueLaSequenceDuFichierTFA $FiPpcr] set SeqAv {} foreach Sign $LesAv { lappend SeqAv [string totitle [Signal $Sign]] } set SeqAv [join $SeqAv ""] if {$Quoi=="SeqSignals5"} { return $SeqAv } set SeqAp {} foreach Sign $LesAp { lappend SeqAp [string totitle [Signal $Sign]] } set SeqAp [join $SeqAp ""] if {$Quoi=="SeqSignals3"} { return $SeqAp } set SeqSujet $Seq regsub -nocase "^$SeqAv" $SeqSujet "" SeqSujet regsub -nocase "$SeqAp$" $SeqSujet "" SeqSujet if {$Quoi=="SeqSubject"} { return $SeqSujet } } proc PrdtVec {AId n xn yn fx fy lx ly rx ry {Nl ""} {Nr ""} {Nlm ""} {Nrm ""}} { global Abr ALMax ARmax ARMin ALMin set t [set Abr(Arbre,$AId)] set x [$t get $n xcoord] set y [$t get $n ycoord] set dx [expr {$x-$xn}] set dy [expr {$y-$yn}] set Nd [expr {sqrt($dx*$dx+$dy*$dy)}] if {$Nd != 0.} { set dx [expr {$dx/$Nd}] set dy [expr {$dy/$Nd}] } set PV [expr {$dy*$fx-$dx*$fy}] set PS [expr {$dx*$fx+$dy*$fy}] if {$PS != 0.} {set Ang [expr {atan(abs($PV)/$PS)}]} {set Ang 99.} if {$Ang < 0.} {set Ang [expr {$Ang+[Pi]}]} if {$PV > 0.} { if {$Ang < $ARMax} { set ARMax $Ang set Nr $n if {$Nd != 0.} { set rx [expr {$dx*$Nd}] set ry [expr {$dy*$Nd}] } else { set rx $dx set ry $dy } } if {$Ang > $ARmin} { set ARmin $Ang set Nrm $n } } if {$PV < 0.} { if {$Ang < $ALMin} { set ALMin $Ang set Nl $n if {$Nd != 0.} { set lx [expr {$dx*$Nd}] set ly [expr {$dy*$Nd}] } else { set lx $dx set ly $dy } } if {$Ang > $ALMax} { set ALMax $Ang set Nlm $n } } if {0} { puts [format "Ang : %6.3f PV %6.3f %s" $Ang $PV $n] puts [format " %6.3f %6.3f %6.3f %6.3f" $x $y $xn $yn] puts [format " %6.3f %6.3f %6.3f %6.3f" $dx $dy $fx $fy] puts [format " AL Min %6.3f AR Min %6.3f" $ALMin $ARMax] puts " NdL $Nl NdR $Nr" } foreach e [$t children $n] { set Llrxy [PrdtVec $AId $e $xn $yn $fx $fy $lx $ly $rx $ry $Nl $Nr $Nlm $Nrm] lassign $Llrxy lx ly rx ry Nl Nr Nlm Nrm } return [list $lx $ly $rx $ry $Nl $Nr $Nlm $Nrm] } proc PrdtVec2 {AId n xn yn fx fy} { global Abr ARMin ALMin set Nl "" set Nr "" set t [set Abr(Arbre,$AId)] set x [$t get $n xcoord] set y [$t get $n ycoord] set dx [expr {$x-$xn}] set dy [expr {$y-$yn}] set Nd [expr {sqrt($dx*$dx+$dy*$dy)}] if {$Nd != 0.} { set dx [expr {$dx/$Nd}] set dy [expr {$dy/$Nd}] } set PV [expr {$dy*$fx-$dx*$fy}] set PS [expr {$dx*$fx+$dy*$fy}] if {$PS != 0.} {set Ang [expr {atan(abs($PV)/$PS)}]} {set Ang 99.} if {$Ang < 0.} {set Ang [expr {$Ang+[Pi]}]} if {$PV > 0.} { if {$Ang < $ARMin} { set ARMin $Ang set Nr $n } } else { if {$Ang < $ALMin} { set ALMin $Ang set Nl $n } } return [list $Nl $Nr] } proc PrdtVec3 {AId n xn yn fx fy} { global Abr ARMin ALMin set Nl "" set Nr "" set t [set Abr(Arbre,$AId)] set x [$t get $n xcoord] set y [$t get $n ycoord] set dx [expr {$x-$xn}] set dy [expr {$y-$yn}] set Nd [expr {sqrt($dx*$dx+$dy*$dy)}] if {$Nd != 0.} { set dx [expr {$dx/$Nd}] set dy [expr {$dy/$Nd}] } set PV [expr {$dy*$fx-$dx*$fy}] set PS [expr {$dx*$fx+$dy*$fy}] if {$PS != 0.} {set Ang [expr {atan(abs($PV)/$PS)}]} {set Ang 99.} if {$Ang < 0.} {set Ang [expr {$Ang+[Pi]}]} if {$PV > 0.} { if {$Ang > $ARMin} { set ARMin $Ang set Nr $n } } else { if {$Ang > $ALMin} { set ALMin $Ang set Nl $n } } return [list $Nl $Nr] } proc PreCalculs {} { global TabSF ZoneSelect LNDG SDG ListeTypesDeFeatures ScoreMeth Cons Defauts LNOrdali if {! [set Defauts(PreCompute)]} {return} switch [TypeAli] { "pasdali" - "ORD" {return} "TFA" - "MSF" { SetMacCourant first CreeVue set ZoneSelect [list [list 1 [expr {[LongueurDeLAlignement]-1}]]] set ::Cons(OnlyGlobal) 0 GroupesZones LNDG SDG dpc AjouteGroupeToutLeMonde MetAJourNomsEtSeqs EnregistreLeMac "DPC on all" "Clustering using all sequences and full length" } "RSF" {} "XML" { if {! [info exists ListeTypesDeFeatures]} {return} if {[llength [set Lf [lsearch -all -inline -regexp $ListeTypesDeFeatures "PFAM"]]] == 0} { return } foreach f $Lf { set Lv [array names TabSF "*,$f"] foreach v $Lv { set Le [set TabSF($v)] foreach e $Le { DecortiqueUneFeature $e dg fg col score note if {[regexp {^PROP\_} $note]} {continue} set No [lindex [split $note "_"] 0] lappend LP($No) [list $dg $fg] } } } foreach e [lsort [array names LP]] { puts "\nPreCalculs PFAM $e" # Load 1er , pas de groupes SetMacCourant first CreeVue set ZoneSelect [lunique [lsort -integer -index 0 [set LP($e)]]] set ::Cons(OnlyGlobal) 0 # Faut nettoyer zones ! set ZoneSelect [NettoieZones $ZoneSelect] set Lexc [GroupesZones LNDG SDG dpc] if {([llength $LNOrdali] - [llength $Lexc]) <= 3} { FaireLire "Not enough sequences for PFAM $e" continue } # Refait LNOrdali # !! Si seqs virees par GroupesZones, ne seront plus dans LNOrdali et donc plus dans GroupeToutLeMonde AjouteGroupeToutLeMonde MetAJourNomsEtSeqs # puts "PreCalculs : LNDG [llength $LNDG] $LNDG" set Cons(Method) Multi set ft [PrepareRunOrdali] set Cons(ConsCou) $ft set ScoreMeth($ft,Title) "DPC on $f $e" set ScoreMeth($ft,Methode) Multi set Cons(Title) "DPC on $f $e" set Cons(ListeCons) $ft SauveConservation EnregistreLeMac "DPC on $f $e" "Clustering using feature $f $e, zones [join $ZoneSelect ,]" } } } set ZoneSelect [list] set ::ZoneClusterisation [list] puts "\n===================" puts "= Fin Pre-Calculs =" puts "===================" puts \n return } proc PreFixe {{Nouveau ""}} { global PrefixeDesORFs if {$Nouveau!=""} { set PrefixeDesORFs $Nouveau } if { ! [info exists PrefixeDesORFs]} { set PrefixeDesORFs "ORF" } return $PrefixeDesORFs } proc PreTraiteIds {file} { set Lids [LesLignesDuFichier $file] foreach id $Lids { set id [string range $id 0 3] if {$id ne ""} { lappend Lout $id } } set Lout [lsort -unique $Lout] set o [open ${file}_ok w] puts $o [join $Lout \n] close $o return $Lout } proc PreferredGenenameFromGenename {Gn Org} { set IdString [ProtIDStringFromGn $Gn $Org] if {$IdString==""} { return $Gn } set PreferredName [PreferredName $IdString $Org] if {$PreferredName==""} { return $Gn } return $PreferredName } proc PreferredName {IdString {Org ""} {Quoi ""}} { Wup "return normally the preferred name, except if it is ENSxxx then you get GnDes/ENSxxx (All) or GnDes (Short) or ENSxxx (Ens)" global PreferredName regsub " " $Org "_" Org if {$Quoi==""} { set Quoi "Short" } set Quoi [string tolower $Quoi] if {[info exists PreferredName($IdString,$Org,$Quoi]} { return $PreferredName($IdString,$Org,$Quoi)] } set PN [PreferredNameStringFromProteins $IdString] set PNShort $PN set PNAll $PN set PNEns "" if {$Org!="" && [regexp "^ENS" $PN] && [string length $PN]> 7 } { set PNEns $PN; set GnDes "" if {$GnDes==""} { set GnDes [GnDesFromEnsembl $PN "test" $Org "GnDes" "Short"] } if {$GnDes!="" && $GnDes!="Error"} { set PNShort $GnDes; set PNAll "$GnDes/$PN" } } set PreferredName($IdString,$Org,short) $PNShort set PreferredName($IdString,$Org,all) $PNAll set PreferredName($IdString,$Org,ens) $PNEns if {[info exists PreferredName($IdString,$Org,$Quoi)]} { return $PreferredName($IdString,$Org,$Quoi) } return "" } proc PreferredNameStringFromEnsembl {EnsId TaxId} { CanalSqlString set Pi [SqlExec "select protein_id from items.proteins_names where species_id = $TaxId and protein_name = '$EnsId';" "GetFirstValue"] CanalSqlDisconnect set Pn [PreferredNameStringFromProteinsName $Pi] set Pn [ListeSansDoublon $Pn] return $Pn } proc PreferredNameStringFromProteins {protId} { CanalSqlString set Pn [SqlExec "select preferred_name from items.proteins where protein_id = '$protId';" "GetList"] CanalSqlDisconnect return $Pn } proc PreferredNameStringFromProteinsName {protId} { CanalSqlString set Pn [SqlExec "select protein_name from items.proteins_names where is_preferred_name is true and protein_id = '$protId';" "GetList"] CanalSqlDisconnect return $Pn } proc PreferredNameStringFromUniprot {protId} { CanalSqlString set Pn [SqlExec "select protein_name from items.proteins_names where source = 'Ensembl_Uniprot/SWISSPROT_GN' and protein_id = '$protId';" "GetList"] CanalSqlDisconnect return $Pn } proc PrefixeDuGenome {Genome} { set GenOri $Genome if { ! [regexp "/" $Genome]} { set Genome "[GscopeDatabaseDir $Genome]" } set FichierMiniConfig "$Genome/beton/miniconfig" Espionne $FichierMiniConfig if { ! [file exists $FichierMiniConfig]} { FaireLire "I can't find $FichierMiniConfig\n to determine the PreFixe of $GenOri" return "AAAA" } foreach Ligne [LesLignesDuFichier $FichierMiniConfig] { if {[regexp "PrefixeDesORFs" $Ligne]} { regsub "PrefixeDesORFs " $Ligne "" Prefixe return $Prefixe } } FaireLire "I can't find 'PreFixe' in $FichierMiniConfig\n to determine the PreFixe of $GenOri" return "AAAA" } proc PrefixeDuProjet {Projet} { return [PrefixeDuGenome $Projet] } proc PremierAccessCommeJeVeuxDuBlast {TexteOuFichier {Modele ""} {Quoi ""}} { if {$Quoi==""} { set Quoi "GetAccess" } if {[regexp "\n" $TexteOuFichier]} { set Texte $TexteOuFichier } else { if {[EstUnPAB $TexteOuFichier]} { set TexteOuFichier [GscopeFile $TexteOuFichier "blastp"] } set Texte [ContenuDuFichier $TexteOuFichier] } set LesLignes [split $Texte "\n"] set IndexSPSA [lsearch -regexp $LesLignes "Sequences producing significant alignments"] if { $IndexSPSA > -1 } { set LesLignes [lrange $LesLignes [incr IndexSPSA 1] end] } set Texte [join $LesLignes "\n"] if { ! [regexp -nocase "\n(($Modele\[^ \]+) \[^\n\]+)\n" $Texte Match Ligne Access]} { return "" } if {[string equal -nocase $Quoi "GetExpect"]} { if { ! [regexp { ([^ ]+) *$} $Ligne Match Expect]} { return "" } return $Expect } if {[string equal -nocase $Quoi "GetLine"]} { return $Ligne } return $Access } proc PremierBlanc {s} { if {$s eq ""} {return "end"} set ib [string first " " $s] if {$ib == -1} { return "end" } else { return $ib } } proc PremierEMBL {Texte} { Espionne [string length $Texte] regsub {\n//\n.*} $Texte "\n//" Texte Espionne [string length $Texte] return $Texte } proc PremierENSP0DuBlast {TexteOuFichier {GetWhat ""}} { return [PremierAccessCommeJeVeuxDuBlast $TexteOuFichier "ENSP0" $GetWhat] } proc PremiereBandeTrouvee {Nom} { set ML [MeilleureLocalisationSurChroContig $Nom] scan $ML "%s" Chro set NumeroChr [RienQueLeNumeroDuChromosome $Chro] #A partir du numero de contig set LesBandesAPartirDucontig [BandesCytologiquesAPartirDuContig $Nom] if {$LesBandesAPartirDucontig!=""} { set Bandes [split $LesBandesAPartirDucontig " "] set Nb [llength $Bandes] if {$Nb==1 && [EstCeUneBandePrecise $Bandes]==1} { set Chromosome [NumeroDuChromosomeDeLaBande $Bandes] if {$Chromosome==$NumeroChr} { return $LesBandesAPartirDucontig } } } #A partir de l accession number du RNA set AccessRNA [ExtraitAccessDuRNA $Nom] if {$AccessRNA!=""} { set LesBandesAPartirDeAccessRNA [LesBandesCytologiquesDeLorganisme $AccessRNA] set Band [split $LesBandesAPartirDeAccessRNA " "] set N [llength $Band] if {$N==1 && [EstCeUneBandePrecise $Band]==1} { set Chromosome [NumeroDuChromosomeDeLaBande $Band] if {$Chromosome==$NumeroChr} { return $LesBandesAPartirDeAccessRNA } } } #A partir de la definition du RNA set DefinitionRNA [EssaiExtraitDefinitionRNA $Nom] set LesBandesAPartirDeDef [LesBandesCytologiquesDeLorganisme $DefinitionRNA] if {$LesBandesAPartirDeDef!=""} { set Positions [split $LesBandesAPartirDeDef " "] set Nbd [llength $Positions] if {$Nbd==1 && [EstCeUneBandePrecise $Positions]==1} { set Chromosome [NumeroDuChromosomeDeLaBande $Positions] if {$Chromosome==$NumeroChr} { return $LesBandesAPartirDeDef } } } #A partir du numero de contig et de la definition du RNA if {$DefinitionRNA!=""} { set Contig [ContigDuPremierHitDuBlast $Nom] set LesBandesAPartirDuContigEtDefRNA [LesBandesCytologiquesDeLorganisme $Contig "$DefinitionRNA"] if {$LesBandesAPartirDuContigEtDefRNA!=""} { set n 0 foreach Bande $LesBandesAPartirDuContigEtDefRNA { set Chromo [NumeroDuChromosomeDeLaBande $Bande] if {$Chromo!=$NumeroChr} { set LesBandesAPartirDuContigEtDefRNA [lreplace $LesBandesAPartirDuContigEtDefRNA $n $n] continue } incr n } if {[llength $LesBandesAPartirDuContigEtDefRNA]==1} {return $LesBandesAPartirDuContigEtDefRNA} if {[llength $LesBandesAPartirDuContigEtDefRNA]>1} { foreach bande $LesBandesAPartirDuContigEtDefRNA { if {[EstCeUneBandePrecise $bande]==1} { return $bande } else {continue} } } } } #si aucune de ces conditions n est remplie if {$AccessRNA!=""} { set LesBandes [LesBandesCytologiquesDeLorganisme $AccessRNA] if {$LesBandes!=""} { set n 0 foreach Bande $LesBandes { set Chromo [NumeroDuChromosomeDeLaBande $Bande] if {$Chromo!=$NumeroChr} { set LesBandes [lreplace $LesBandes $n $n] continue } incr n } if {[llength $LesBandes]==1 && [EstCeUneBandePrecise $LesBandes]==1} { return $LesBandes } if {[llength $LesBandes]>1} { foreach bande $LesBandes { if {[EstCeUneBandePrecise $bande]==1} { return $bande } else {continue} } } } } set LesBandesAPartirDucontig [BandesCytologiquesAPartirDuContig $Nom] if {$LesBandesAPartirDucontig!="" && $LesBandesAPartirDucontig!=" "} { set n 0 foreach Bande $LesBandesAPartirDucontig { set Chromo [NumeroDuChromosomeDeLaBande $Bande] if {$Chromo!=$NumeroChr} { set LesBandesAPartirDucontig [lreplace $LesBandesAPartirDucontig $n $n] continue } incr n } if {[llength $LesBandesAPartirDucontig]==1 && [EstCeUneBandePrecise $LesBandesAPartirDucontig]==1} { return $LesBandesAPartirDucontig } if {[llength $LesBandesAPartirDucontig]>1} { foreach bande $LesBandesAPartirDucontig { if {[EstCeUneBandePrecise $bande]==1} { return $bande } else {continue} } } } } proc PremiereLigneDuFichier {Fichier} { if { $Fichier == "" } {return ""} set f [open $Fichier r] if {[gets $f Ligne]<0} { set Ligne "" } close $f return $Ligne } proc PremiereProteineDuBlastX {Fichier {AvecLaSeq ""}} { if {$AvecLaSeq==""} { set AvecLaSeq 0 } else { set AvecLaSeq 1 } set Nom [file tail $Fichier] set SeuilExpect 0.001 # global SeuilExpectPourBlastX # if {[info exists SeuilExpectPourBlastX]} { # set SeuilExpect $SeuilExpectPourBlastX # } set MaxList 1 set nSequencesTrouves [DecortiqueBlast $Fichier $SeuilExpect $MaxList Query lBanqueId lAccess lDE lProfil lPN lPartieSegAli] if { $nSequencesTrouves == 0 } { set nCops 0 return {} } set ListeDesHomologues {} set nCops 0 set AttendreFinEntete 0 set FinEntete 0 foreach BanqueId $lBanqueId PN $lPN PartieSegAli $lPartieSegAli { set TaxId -1 scan "0 Inconnu inconnu -1" "%d %s %s %d" Offset Genre Espece TaxId if {$TaxId>0} { set Orga $TaxId } else { set OrgaComplet "$Genre $Espece" set Orga [Glossaire $OrgaComplet Court] } set nCopsDansCetteSequence 0 foreach Ligne $PartieSegAli { if { $AttendreFinEntete } { if { ! [regexp {[0-9a-zA-Z_]} $Ligne] } { set AttendreFinEntete 0 set FinEntete 1 } else { append Entete $Ligne continue } } if {[regexp {^>} $Ligne]} { set Entete $Ligne set AttendreFinEntete 1 } if { $FinEntete } { set FinEntete 0 set Offset 0 } if { [regexp "^ Identities =" $Ligne] } { set Identities [StringApres "Identities =" dans $Ligne] set Positives [StringApres "Positives =" dans $Ligne] scan $Identities "%d/%d" nId nTotal scan $Positives "%d/%d" nPo nTotal } if { [regexp "^ Frame =" $Ligne] } { regsub " Frame = " $Ligne "" Frame } if { [regexp "^ Score =" $Ligne] } { if {[info exists Score]} { incr nCops incr nCopsDansCetteSequence if { $AvecLaSeq } { set EtLaSeq "\t$SeqQuery\t$SeqSbjct" } else { set EtLaSeq "" } Wup "Je triche en cachant dans Score le PourcentageIdentite" set PourcentageIdentiteCacheDansScore [format "%6.2f" [expr (100.*$nId)/$nTotal]] if {[catch {set Homologie "$Nom\t$BanqueId\t$DebutQuery\t$FinQuery\t$DebutSbjct\t$FinSbjct\t$Frame$EtLaSeq"}]} { unset Score ; break } lappend ListeDesHomologues $Homologie unset Score unset Expect unset DebutQuery unset DebutSbjct } set Score [FloatApres "Score =" dans $Ligne] catch {unset Expect} if {[regexp "Expect =" $Ligne]} { set Expect [PNApres "Expect =" dans $Ligne] } if {[regexp {Expect\([0-9]*\) =} $Ligne Match]} { set Expect [PNApres $Match dans $Ligne] } if {[regexp {Expect\([0-9]\) =} $Ligne Match]} { set Expect [PNApres $Match dans $Ligne] } if { ! [info exists Expect]} { Warne "$Ligne\nwithout Expect ... I break" catch {unset Score} catch {unset Expect} catch {unset DebutQuery} catch {unset DebutSbjct} break } catch {unset DebutQuery} catch {unset DebutSbjct} if { [expr $Expect > $SeuilExpect]} { catch {unset Score} catch {unset Expect} catch {unset DebutQuery} catch {unset DebutSbjct} break } } if {[regexp "^ Database:" $Ligne] } { break } if {[regexp "^Query:" $Ligne] } { if { ! [info exists DebutQuery]} { set SeqQuery "" set DebutQuery [IntegerApres "Query:" dans $Ligne] } set FinQuery [IntegerEnFin de $Ligne] regexp -indices {[0-9]+} $Ligne D set D [lindex $D 1] regexp -indices {[0-9]+} [string range $Ligne [incr D] end] F set F [expr [lindex $F 0]+$D-1] append SeqQuery [string trim [string range $Ligne $D $F]] } if {[regexp "^Sbjct:" $Ligne] } { if { ! [info exists DebutSbjct]} { set SeqSbjct "" set DebutSbjct [expr [IntegerApres "Sbjct:" dans $Ligne] + $Offset] } regexp -indices {[0-9]+} $Ligne D set D [lindex $D 1] regexp -indices {[0-9]+} [string range $Ligne [incr D] end] F set F [expr [lindex $F 0]+$D-1] append SeqSbjct [string trim [string range $Ligne $D $F]] set FinSbjct [expr [IntegerEnFin de $Ligne] + $Offset] } } if {[info exists Score] && [expr $Expect <= $SeuilExpect] } { incr nCops incr nCopsDansCetteSequence if { $AvecLaSeq } { set EtLaSeq "\t$SeqQuery\t$SeqSbjct" } else { set EtLaSeq "" } Wup "Je triche en cachant dans Score le PourcentageIdentite" set PourcentageIdentiteCacheDansScore [format "%6.2f" [expr (100.*$nId)/$nTotal]] if { ! [catch {set Homologie "$Nom\t$BanqueId\t$DebutQuery\t$FinQuery\t$DebutSbjct\t$FinSbjct\t$Frame$EtLaSeq"}] } { lappend ListeDesHomologues $Homologie } } catch {unset Score} catch {unset Expect} catch {unset DebutQuery} catch {unset DebutSbjct} } return $ListeDesHomologues } proc PrendPDBDansPilier {args} { set ::Defauts(PDBDansPiliers) [set ::Cons(PDB)] return } proc PrendsQueOrtholHGU133Plus2 {} { set Fichier "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/Chicken.na25.ortholog.csv" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "Probe" $Ligne] || [regexp "HG-U133_Plus_2" $Ligne]} { lappend LesLignesU133 $Ligne } } SauveLesLignes $LesLignesU133 dans "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/Chicken.na25.orthologHuman.csv" } proc PrepGrillade {} { global LNOrdali cd /tempor/moumou/ # precalcule couple matrix score set Lmsw [list] foreach score {norm bild thompson sop} { if {$score eq "sop"} { set Lmat {blosum62_p blosum62_n pam35 pam15} } else { set Lmat blosum62_p } foreach mat $Lmat { lappend Lmsw $mat $score } } puts "Nbr mat/score/wg [llength $Lmsw]" #set Lf [LesFichiersDeBalibase] #set Lf "/home/moumou/Agents/BB11001.xml" set Lf "/home/moumou/Agents/BB11001.xml" puts "Nbr fichiers [llength $Lf]" set iJob 1 foreach f $Lf { set floc [file tail $f] file copy $f $floc unset -nocomplain LNOrdali DecortiqueXmlAgent $f set Lbck [CoreBlocksDuXML] foreach {deb fin} $Lbck { foreach len {5 7 9 11 13 15 17 19} { #puts ">$deb< >$fin< $len" if {($fin - $deb + 1) < $len} { continue } foreach {mat score} $Lmsw { #set fcmd [format "job%06d" $iJob] set fcmd "job$iJob" puts "ordali exe AnalyseFichierBalibase $floc $len $deb $fin $mat $score 0 > out[format %06d $iJob]w0" if {0} { set o [open "run.sh" w] puts $o "#!/bin/sh" puts $o "lcg-cp srm://sbgse1.in2p3.fr:8446/dpm/in2p3.fr/home/vo.grand-est.fr/lbgi/kress/soft/ordalie ordalie" puts $o "" puts $o "chmod +x ordalie" puts $o "" puts $o "./ordalie exe AnalyseFichierBalibase $floc $len $deb $fin $mat $score 0 > out[format %06d $iJob]w0" puts $o "./ordalie exe AnalyseFichierBalibase $floc $len $deb $fin $mat $score 1 > out[format %06d $iJob]w1" puts $o "tar -czf output.tar.gz out[format %06d $iJob]w0 out[format %06d $iJob]w1" puts $o "" puts $o "exit 0" close $o exec tar -czf J$iJob.tar.gz run.sh $floc file delete run.sh } incr iJob } } } file delete $floc } puts "Nbr jobs $iJob" exit } proc PrepareBanqueMCLDeadalus {Fichier} { set GroupeMCL "" set Id "" set BanqueSeaci "AllAgainstAll3.seaci" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} scan $Ligne "%d %s" GroupeMCL Id Espionne "$GroupeMCL $Id" set Entete "ID $Id \nDR protein \nCA $GroupeMCL \n//" AppendAuFichier $BanqueSeaci $Entete } close $F return "" } proc PrepareHisto {f} { set lignes [LesLignesDuFichier $f] set L [lrange $lignes 2 end] foreach e $L { if {$e == -999} {continue} set Ln [split $e "\t"] lappend liste [lindex $Ln 1] } CreeHistogramme $liste 50 return } proc PrepareHisto_VOIR_PLUS_LOIN {f} { if {[llength $f] == 1} { set lignes [LesLignesDuFichier $f] set L [lrange $lignes 2 end] } else { set L $f } foreach e $L { if {$e == -999.} {continue} regsub -all { +} $e " " e set Ln [split $e " "] lappend liste [lindex $Ln 1] } CreeHistogramme $liste 30 return } proc PrepareLeFichierPourLeProtocole {Fichier Nom {OnRemplaceraOuOnContinuera OnContinuera}} { set LesLignes {} set LAiJeVu 0 if {![file exists $Fichier]} {return 0} set F [open $Fichier] while {[gets $F Ligne]>=0} { set Box "" scan $Ligne "%s" Box if {$Box == $Nom} {set LAiJeVu 1;continue} lappend LesLignes $Ligne } close $F if {$OnRemplaceraOuOnContinuera == "OnContinuera"} {return $LAiJeVu} if {$LAiJeVu} {Sauve [join $LesLignes "\n"] dans $Fichier} return $LAiJeVu } proc PrepareLesFichierBBSList {Input Output} { Wup "Formate le fichier Fasta de ENSEMBL" set LesLignes "" set F [open "$Input"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} #ENSG00000123607.2 scan $Ligne "%s" ID #Espionne "$ID" regsub -nocase {.[0-9]+$} $ID "" ID #Espionne "$ID" lappend LesLignes $ID } close $F AppendAuFichier $Output "[join $LesLignes "\n"]" return "" } proc PrepareLesFichiersTFAsDesARPs {{LesFichierTFA ""}} { Wup "Permet d extraire au format TFAs les sequences presentes dans les alignement au format .RSF" Wup "Utilisation pour generer les fichiers tfa pour ensuite creer les banques blasts" Wup "voir proc LesBanquesBLASTDesARPs" set RepARP "[RepARPAnno]" set RepTFA "$RepARP/ARP_TFA" set RepBanque "$RepARP/ARP_BLAST" set RepMACS "$RepARP/ARP_MACS" set RepSignature "$RepARP/ARP_Signature" set RepARP_Results "[RepARPAnnoWeb]" set RepTFAResults "$RepARP_Results" set RepBlastResults "$RepARP_Results" set RepMACSResults "$RepARP_Results" if {$LesFichierTFA == ""} { set LesFichierTFA [glob -nocomplain -directory "$RepMACS/" "*.tfa"] } else { foreach F $LesFichierTFA { if {! [file exists $F]} { return "" } } } foreach TFA $LesFichierTFA { set Tmp "${TFA}_tmp" set Sequence "" Espionne "$Tmp" set OnAEntete "0" set F [open "$TFA"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[regexp "^>" $Ligne]} { set OnAEntete 1 if {$Sequence!=""} { regsub -all {\-} $Sequence "" Sequence #Espionne "Saving: $Sequence" AppendAuFichier $Tmp $Sequence } if {[regexp {>ARP[0-9][0-9]} "$Ligne"]} {set OnAEntete 0;continue} AppendAuFichier $Tmp $Ligne set Sequence "" continue } else { if {$OnAEntete=="0"} {continue} #Espionne "$Sequence" append Sequence [join $Ligne ""] } } close $F if {$Sequence!=""} { regsub -all {\-} $Sequence "" Sequence AppendAuFichier $Tmp $Sequence } file copy -force $Tmp $TFA if {[regexp {.fasta$} $TFA]} { set NewFile "" regsub {.fasta$} $TFA ".tfa" NewFile file rename -force $TFA $NewFile file delete -force $TFA Espionne "$NewFile" } file delete -force $Tmp } return "" } proc PrepareLesOligos {Qui {Dir ""} {Destination ""}} { Wup "Prepare les oligos dans le cas ou ils ne sont pas notes oligonumber" if {$Destination == ""} { FaireLire "Choose a directory where to save results." set Destination [tk_chooseDirectory -title "Choose a directory where to save" -initialdir "[RepertoireDuGenome]"] } if {$Dir == ""} { FaireLire "Choose a directory where to seek for oligo files." set Dir [tk_chooseDirectory -title "Choose a directory where to save" -initialdir "[RepertoireDuGenome]"] } if {$Qui=="LaTotale"} { set LesFichiersOligos [glob -nocomplain "$Dir/*.oligo"] } else { set FichierOligos "$Dir/$Qui" set FichierOligoRejected "$Dir/${Qui}_Rejected" if {[file exists $FichierOligos]} { set LesFichiersOligos $FichierOligos } elseif {[file exists $FichierOligoRejected]} { set LesFichiersOligos $FichierOligos } else {Espionne "Requested file do not exists";return ""} } foreach PAB $LesFichiersOligos { Espionne $PAB SplitLaSortieOligoArray $PAB $Destination } } proc PrepareLesSequencesDesBanques {lBanqueId {lAccess ""}} { #rR autrefois on utilisait QuidSeq maintenant c'est GeneQuid #rR Maintenant on utilise de preference le premier lBanqueId pour GeneQuid #rR Le lAccess sert pour stocker le résultat car on cree un table #rR LesLignesEMBLEnMemoire($BanqeId,$Access) #rR set lAccess est vide il est rempli avec lBanqueId global LesLignesEMBLEnMemoire global AccessOKEnMemoire if {$lBanqueId=="YaQuelqun"} { return [info exists LesLignesEMBLEnMemoire] } if {[info exists LesLignesEMBLEnMemoire]} { unset LesLignesEMBLEnMemoire } if {[info exists AccessOKEnMemoire]} { unset AccessOKEnMemoire } if { ! [regexp -nocase {[a-z]} $lBanqueId]} { return 0 } if {$lAccess=={}} { set lAccess $lBanqueId } set LesBonsBanqueId {} foreach BanqueId $lBanqueId Access $lAccess { if {[EstUnAccessPDB $BanqueId]} { continue } lappend LesBonsBanqueId $BanqueId set BAs([string toupper $BanqueId]) "$BanqueId,$Access" } if {$LesBonsBanqueId=={}} { return 0 } set Queries [join $lBanqueId ","] set Retour [GeneQuid UniprotData $Queries "+QY"] set NbTrouves 0 foreach Ligne [split $Retour "\n"] { if {[regexp {^QY (.+)} $Ligne Match Query]} { set LEmblDuQuery {} continue } lappend LEmblDuQuery $Ligne if {[regexp {^//} $Ligne]} { set QUERY [string toupper $Query] if { ! [info exists BAs($QUERY)]} { continue } set LesLignesEMBLEnMemoire($BAs($QUERY)) $LEmblDuQuery set AccessOKEnMemoire($BAs($QUERY)) $Query incr NbTrouves continue } } return $NbTrouves #rR on utilisait QuidSeq ... qui est, maintenant, obsolète ... if { ! [QuidSeqEstDisponible]} { return "" } if {[info exists LesLignesEMBLEnMemoire]} { unset LesLignesEMBLEnMemoire } if {[info exists AccessOKEnMemoire]} { unset AccessOKEnMemoire } if { ! [regexp -nocase {[a-z]} $lBanqueId]} { return 0 } if {$lAccess=={}} { set lAccess $lBanqueId } if { ! [info exists QuidSeqEstDisponible] || ! $QuidSeqEstDisponible } { return } set LesBonsAccess {} foreach BanqueId $lBanqueId Access $lAccess { if {[EstUnAccessPDB $BanqueId]} { continue } lappend LesBonsAccess $Access set BAs([string toupper $Access]) "$BanqueId,$Access" } if {$LesBonsAccess=={}} { return 0 } set AccessJoints [join $LesBonsAccess "|"] Wup "This magical programming works : QuidAllRefsSeqsOfACs sends the array SequencesFromQuidSeq" set Reponse [QuestionDeScience QuidSeq "QuidAllRefsSeqsOfACs $AccessJoints"] regsub "Array: " $Reponse "" Reponse if { ! [regexp -nocase {[a-z]} $Reponse]} { return 0 } eval array set $Reponse set n 0 foreach {AC Embl} [array get SequencesFromQuidSeq] { if {$Embl=="" || $Embl=="NotFound"} { continue } set LesLignesEMBL [split $Embl "\n"] set BA [set BAs([string toupper $AC])] set LesLignesEMBLEnMemoire($BA) $LesLignesEMBL set AccessOKEnMemoire($BA) $AC incr n } return $n } proc PrepareMaSequenceALaRechercheDHomologie {FichierTFA {Dir ""}} { Wup "Permet de virer les zones poly A douteuse pour le fasta" if {$Dir==""} { set FichierMasked "${FichierTFA}.masked" } else { set Queue [file tail $FichierTFA] set FichierMasked "$Dir/${Queue}.masked" } set Seq [QueLaSequenceDuFichierTFA $FichierTFA] #Retourne les regions a masquer set LesRegionsAMasquer [MasquePolyN $Seq "A" 15] #Masque les regions dans le FichierMasked MasqueLesRegionsDuFichierTFA $FichierTFA $FichierMasked $LesRegionsAMasquer "N" return $FichierMasked } proc PrepareProbeSet_OligoAffymetrix {File FileOut} { Wup "Formate le fichier Fasta de Affymetrix pour avoir uniquement le NM_ au debut" Wup ">gi|4758487|ref|NM_004128.1| Homo sapiens general transcrip" Wup ">NM_004128 Homo sapiens general transcrip" set F [open "$File"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { #>probe:MG-U74Av2:100001_at:407:233; Interrogation_Position=977; Antisense; #AGGAAAACAAGCACAGCGTGGTGTT regexp -nocase {^>probe:MG-U74[a-z]v2:[a-z0-9_:\-\/]+;} $Ligne Entete regsub -nocase {^>probe:MG-U74[a-z]v2:} $Entete ">" Entete regsub -nocase -all "/" $Entete "_" Entete regsub -nocase -all ":" $Entete "_" Entete regsub -nocase -all ";" $Entete " " Entete #Espionne "$Entete" lappend LesLignes $Entete continue } lappend LesLignes $Ligne } close $F AppendAuFichier $FileOut "[join $LesLignes "\n"]" return "" } proc PrepareProbeSet_TargetAffymetrix {File FileOut} { Wup "Formate le fichier Fasta de Affymetrix pour avoir uniquement le NM_ au debut" Wup ">gi|4758487|ref|NM_004128.1| Homo sapiens general transcrip" Wup ">NM_004128 Homo sapiens general transcrip" set F [open "$File"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { #>target:MG-U74Av2:AFFX-18SRNAMur/X00686_3_at; gb|X00686;... #regexp -nocase {^>target:MG-U74[a-z0-9]+:[a-z0-9\-\/_:]+;} $Ligne Entete #regsub -nocase {^>target:MG-U74[a-z0-9]+:} $Entete ">" Entete #>target:HG-U133_Plus_2:1552256_a_at; gb|NM_005505; gb:NM... regexp -nocase {^>target:[a-z0-9\-_]+:[a-z0-9\-\/_:]+;} $Ligne Entete regsub -nocase {^>target:[a-z0-9\-_]+:} $Entete ">" Entete regsub -nocase -all "/" $Entete "_" Entete regsub -nocase -all ":" $Entete "_" Entete regsub -nocase -all ";" $Entete " " Entete #Espionne "$Entete" lappend LesLignes $Entete continue } lappend LesLignes $Ligne } close $F AppendAuFichier $FileOut "[join $LesLignes "\n"]" return "" } proc PrepareRefSeq {File FileOut} { Wup "Formate le fichier Fasta de RefSeq (NCBI) pour avoir uniquement le NM_ au debut" Wup ">gi|4758487|ref|NM_004128.1| Homo sapiens general transcrip" Wup ">NM_004128 Homo sapiens general transcrip" set F [open "$File"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { regsub {^>gi\|[0-9]+\|ref\|} $Ligne ">" Ligne if {[regexp {.[0-9]+\|} $Ligne]} { regsub {.[0-9]+\|} $Ligne "" Ligne } else { regsub "\|" $Ligne "" Ligne } } lappend LesLignes $Ligne } close $F AppendAuFichier $FileOut "[join $LesLignes "\n"]" return "" } proc PrepareRefSeq2 {File FileOut} { Wup "Formate le fichier Fasta de RefSeq (NCBI) pour avoir uniquement le NM_ au debut" Wup ">gi|4758487|ref|NM_004128.1| Homo sapiens general transcrip" Wup ">NM_004128 Homo sapiens general transcrip" set F [open "$File"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { scan $Ligne "%s" ChevronAcc regsub {^>} $ChevronAcc "" Acc regsub $ChevronAcc $Ligne "$ChevronAcc $Acc" Ligne } lappend LesLignes $Ligne } close $F AppendAuFichier $FileOut "[join $LesLignes "\n"]" return "" } proc PrepareRefSeq3 {File FileOut} { Wup "Formate le fichier Fasta de RefSeq (NCBI) pour avoir uniquement le NM_ au debut" Wup ">gi|4758487|ref|NM_004128.1| Homo sapiens general transcrip" Wup ">NM_004128 Homo sapiens general transcrip" set F [open "$File"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { #>refseqrelease|NM_028344|NM_028344 Mus musculus RIKEN cDNA 2810449C13 gene (2810449C13Rik), mRNA. regsub {^>refseqrelease\|} $Ligne ">" Ligne regsub {\|} $Ligne " " Ligne #Espionne "$Ligne" } lappend LesLignes $Ligne } close $F AppendAuFichier $FileOut "[join $LesLignes "\n"]" return "" } proc PrepareRunOrdali {} { global TypeText TypeCons Couleurs Cons LNDG NombreDeGroupes Defauts Threshold if {[TypeAli] eq "pasdali"} { FaireLire "Please load an alignment first !" return } if {[QuelMode] eq "seqlab" || [QuelMode] eq "cluster"} { FaireLire "Leave [string totitle [QuelMode]] mode first !" return } set method $Cons(Method) if {! [ModeI]} { set method [set Defauts(MethodeConservation)] } LesDefauts MethodeConservation $method set mode [QuelMode] if {$mode eq "feature"} { ColorieSelonFeature "Clear" } MetAJourGroupes InitCouleursGroupes InitPoints CreeLesPiliers if {$Cons(OnlyGlobal)} { set OGlob "GroupeToutLeMonde" } else { set OGlob "" } switch $method { "Liu" { set cmd "RunMethode Liu $OGlob" } "Threshold" { set cmd "RunOrdali $OGlob" } "Mean Distances" { set cmd "RunMethode MeanDistance $OGlob" } "Vector Norm" { set cmd "RunMethode VectorNorm $OGlob" } "Ranganathan" { set cmd "RunMethode Ranganathan $OGlob" } "Multi" { set cmd "RunMethode Cluster $OGlob" } "BILD" { set cmd "RunMethode BILD $OGlob" } } set ft [eval $cmd] EcritLeBilanConservation $ft return $ft } proc PrepareSequencesAgents {} { global LSOrdali Sequences LNOrdali array set Tnews {} set lg 0 foreach n $LNOrdali s $LSOrdali { set sgap [string repeat "." $lg] set ns "$sgap$s" set Tnews($n) $ns set lg [string length $ns] } DonneMemeLongueur Tnews unset Sequences LSOrdali array set Sequences [array get Tnews] set LSOrdali {} foreach n $LNOrdali { lappend LSOrdali $Sequences($n) } update return } proc PrepareUnigeneMM {File FileOut} { Wup "Formate le fichier Fasta de RefSeq (NCBI) pour avoir uniquement le NM_ au debut" Wup ">gi|4758487|ref|NM_004128.1| Homo sapiens general transcrip" Wup ">NM_004128 Homo sapiens general transcrip" set F [open "$File"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { #>UNISEQ:Mm_S11080122 Mus musculus RIKEN cDNA 2810449C13 gene (2810449C13Rik), mRNA. regsub {^>UNISEQ:Mm_} $Ligne ">Mm#" Ligne Espionne "$Ligne" } lappend LesLignes $Ligne } close $F #AppendAuFichier $FileOut "[join $LesLignes "\n"]" return "" } proc PrepareViewer {} { global VersViewer global Defauts set viewer [set Defauts(Viewer)] if {$viewer eq "O macro file"} {set viewer "Omac"} set VersViewer "Vers[string trim $viewer]" return } proc PresenceAbsenceOrthoDansAlignement {Nom {Quoi ""} {AvecMsf ""}} { if {$AvecMsf==""} { set AvecMsf "AvecMsf" } set AvecMsf [regexp -nocase "Msf" $AvecMsf] if {$Quoi==""} { set Quoi "Show" } set Alicia "yes" set ListO {} if {[regexp "/" $Nom]} { set FichierMsf $Nom set Nom [file tail $Nom] } else { set FichierMsf [GscopeFile $Nom "msf"] } set LesAccess {} if {$AvecMsf} { if {[file exists $FichierMsf]} { set LesAccess [LesAccessDuMSF $FichierMsf] } } else { set FichierBlast [GscopeFile $Nom "blastp"] if {[file exists $FichierBlast]} { set LesAccess [LesHitsDuBlast $FichierBlast "" "" "Access"] } } set LesOrtho [split [ExtraitInfo $Nom "OrthologsAc:"] " "] foreach Ac $LesAccess { set EstUnAccess($Ac) "j'ai faim" } foreach Or $LesOrtho { set EstUnOrtho($Or) "j'ai faim" } set LesCommuns {} set LesOrthoNonAccess {} set LesAccessNonOrtho {} foreach Ortho $LesOrtho { if {[info exists EstUnAccess($Ortho)]} { lappend LesCommuns $Ortho } else { lappend LesOrthoNonAccess $Ortho } } foreach Access $LesAccess { if {[info exists EstUnOrtho($Access)]} { } else { lappend LesAccessNonOrtho $Access } } if {$Quoi=="OA" || $Quoi=="AO"} { return $LesCommuns } if {$Quoi=="Oa" || $Quoi=="aO"} { return $LesOrthoNonAccess } if {$Quoi=="oA" || $Quoi=="Ao"} { return $LesAccessNonOrtho } if {$Quoi=="Count"} { return "$Nom O:[llength $LesOrtho]\tA:[llength $LesAccess]\tAO:[llength $LesCommuns]\tOa:[llength $LesOrthoNonAccess]\toA:[llength $LesAccessNonOrtho]" } if {$Quoi=="All"} { return [list $LesOrtho $LesAccess $LesCommuns $LesOrthoNonAccess $LesAccessNonOrtho] } AfficheListe $LesCommuns "" "LesCommuns" AfficheListe $LesOrthoNonAccess "" "LesOrthoNonAccess" AfficheListe $LesAccessNonOrtho "" "LesAccessNonOrtho" } proc PresenceAbsenceOrthoDansAlignementPourTous {{Quoi ""} {AvecMsf ""}} { foreach Nom [ListeDesPABs] { lappend LaSortie [PresenceAbsenceOrthoDansAlignement $Nom $Quoi $AvecMsf] } return $LaSortie } proc PresenceDesOrganismesDansCluster {Cluster LesOrganismes} { global RepertoireDuGenome set nOrgas [llength $LesOrganismes] foreach Orga $LesOrganismes {set TabTmp($Orga) 0} set RepXHDA "$RepertoireDuGenome/bilan_xhda" set SeuilBlastPTBlastN 50 set TailleCluster [O2C2O Cluster $Cluster TailleCluster] foreach Orf [O2C2O Cluster $Cluster LesOrfs] { set FichierInfo "$RepXHDA/$Orf" if {![file exists $FichierInfo]} {continue} set F [open $FichierInfo] while {[gets $F Info] >=0} { scan $Info "%s %s %s %s" Box Orga TBlastN BlastP if {$TBlastN < $SeuilBlastPTBlastN || $BlastP < $SeuilBlastPTBlastN } {continue} set Organisme [O2C2O OrganismeCourt [string tolower $Orga] OrganismeLong] if {![info exists TabTmp($Organisme)]} {continue} incr TabTmp($Organisme) } close $F } set SommePresence 0 foreach Organisme $LesOrganismes { set n 0 if {[info exists TabTmp($Organisme)]} {set n [set TabTmp($Organisme)]} set SommePresence [expr $SommePresence + $n * 100.0 / $TailleCluster] } return [format "%.1f" [expr $SommePresence / $nOrgas]] } proc PresenceEtAbsenceDesGenomesComplets {Nom {Source ""}} { if {$Source==""} { set Source "MSF" } set TexteOo " [ORGAorgaDes${Source}s $Nom] " foreach Oo [ChoixDesGenomesCompletsPresentsAbsents] { if { ! [regexp -nocase $Oo $TexteOo]} { continue } if { ! [regexp " $Oo " $TexteOo]} { return 0 } } return 1 } proc PresentationDesPABs {} { set LaPresentation {} foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] set Defin [DefinitionRapide $Nom] set Ligne [format "%s %-15s %s" $Nom $Alias $Defin] lappend LaPresentation $Ligne } return $LaPresentation } proc Presente {Selection} { global RepertoireDuGenome if {$Selection==""} { return "" } foreach Element [split $Selection "\n"] { if {[YaPABenDebutDe $Element]} { set Element "$RepertoireDuGenome/prottfa/$Element" } if {[regexp {TRNA|RNA} $Element]} { set Element "$RepertoireDuGenome/nuctfa/$Element" } if {[regexp {^TROU[0-9]+N$} $Element]} { set Element "$RepertoireDuGenome/nuctfa/$Element" } if {[regexp {^TROU[0-9]+[A-F]$} $Element]} { set Element "$RepertoireDuGenome/trousprottfa/$Element" } lappend Liste $Element } return [AfficheVariable [join $Liste "\n"] "AvecRienSansFetch"] } proc PrettyDict {D {Comment ""}} { global PrettyDict if { ! [string is list $D] || ([llength $D] & 1) || ([llength $D]==0)} { Espionne [llength $D] if {[llength $D]==15} { Espionne $D; exit } return $D } append PrettyDict(tab) " " set Tab $PrettyDict(tab) foreach K [dict keys $D *] { set V [dict get $D $K] if { ! [string is list $V]} { set Pretty $V } else { set Pretty [PrettyDict $V] } append Retour "\n$Tab$K :" append Retour "$Tab $Pretty" } return $Retour } proc PreviousResDuPdb {res chn mol} { set Lres [$mol _resnumber -chain $chn -polymer] set ires [lsearch $Lres $res] set fin [lindex $Lres [expr {$ires-1}]] return [list $fin [expr {$ires-1}]] } proc PrintCanvas {canvas {format ""} {imageFile ""}} { package require Img 1.3 if {$format eq ""} {set format png} if {$imageFile eq ""} { set imageFile [DemandeEtSauveFichier $format] if {$imageFile eq ""} {return} } update idletasks after 500 ## Ensure that the window is on top of everything ## else, so as not to get white ranges ## in the image, due to overlapped portions ## of the window with ## other windows... raise [winfo toplevel $canvas] update set border [expr {[$canvas cget -borderwidth]+[$canvas cget -highlightthickness]}] set view_height [expr {[winfo height $canvas]-2*$border}] set view_width [expr {[winfo width $canvas]-2*$border}] lassign [$canvas bbox all] x1 y1 x2 y2 set x1 [expr {int($x1-10)}] set y1 [expr {int($y1-10)}] set x2 [expr {int($x2+10)}] set y2 [expr {int($y2+10)}] set width [expr {$x2-$x1}] set height [expr {$y2-$y1}] set image [image create photo -height $height -width $width] ## Arrange the scrollregion of the canvas ## to get the whole window visible, ## so as to grab it into an image... set scrollregion [$canvas cget -scrollregion] set xscrollcommand [$canvas cget -xscrollcommand] set yscrollcommand [$canvas cget -yscrollcommand] $canvas configure -xscrollcommand {} $canvas configure -yscrollcommand {} set grabbed_x $x1 set grabbed_y $y1 set image_x 0 set image_y 0 while {$grabbed_y < $y2} { while {$grabbed_x < $x2} { $canvas configure -scrollregion [list $grabbed_x $grabbed_y [expr {$grabbed_x+$view_width}] [expr {$grabbed_y+$view_height}]] update ## Take a screenshot of the visible canvas part... image create photo ${image}_tmp -format window -data $canvas ## Copy the screenshot to the target image... $image copy ${image}_tmp -to $image_x $image_y -from $border $border incr grabbed_x $view_width incr image_x $view_width image delete ${image}_tmp } set grabbed_x $x1 set image_x 0 incr grabbed_y $view_height incr image_y $view_height } $canvas configure -scrollregion $scrollregion $canvas configure -xscrollcommand $xscrollcommand $canvas configure -yscrollcommand $yscrollcommand $image write $imageFile -format $format return $image } proc PrintCanvasFromLuc {canvas {format ""} {imageFile ""}} { if {$format eq ""} { set format "png" } if {$imageFile eq ""} { set imageFile [DemandeEtSauveFichier $format] if {$imageFile eq ""} {return} } update idletasks after 500 ## Ensure that the window is on top of everything ## else, so as not to get white ranges ## in the image, due to overlapped portions ## of the window with ## other windows... raise [winfo toplevel $canvas] update set border [expr {[$canvas cget -borderwidth]+[$canvas cget -highlightthickness]}] set view_height [expr {[winfo height $canvas]-2*$border}] set view_width [expr {[winfo width $canvas]-2*$border}] lassign [$canvas bbox all] x1 y1 x2 y2 set x1 [expr {int($x1-10)}] set y1 [expr {int($y1-10)}] set x2 [expr {int($x2+10)}] set y2 [expr {int($y2+10)}] set width [expr {$x2-$x1}] set height [expr {$y2-$y1}] set image [image create photo -height $height -width $width] ## Arrange the scrollregion of the canvas ## to get the whole window visible, ## so as to grab it into an image... set scrollregion [$canvas cget -scrollregion] set xscrollcommand [$canvas cget -xscrollcommand] set yscrollcommand [$canvas cget -yscrollcommand] $canvas configure -xscrollcommand {} $canvas configure -yscrollcommand {} set grabbed_x $x1 set grabbed_y $y1 set image_x 0 set image_y 0 while {$grabbed_y < $y2} { while {$grabbed_x < $x2} { $canvas configure -scrollregion [list $grabbed_x $grabbed_y [expr {$grabbed_x+$view_width}] [expr {$grabbed_y+$view_height}]] update ## Take a screenshot of the visible canvas part... # image create photo ${image}_tmp -format window -data $canvas image create photo ${image}_tmp -data $canvas ## Copy the screenshot to the target image... $image copy ${image}_tmp -to $image_x $image_y -from $border $border incr grabbed_x $view_width incr image_x $view_width image delete ${image}_tmp } set grabbed_x $x1 set image_x 0 incr grabbed_y $view_height incr image_y $view_height } $canvas configure -scrollregion $scrollregion $canvas configure -xscrollcommand $xscrollcommand $canvas configure -yscrollcommand $yscrollcommand $image write $imageFile -format $format return $image } proc PrintCanvasToGif2 {w {fileout ""}} { if {$fileout eq ""} { set fileout [DemandeEtSauveFichier gif] if {$fileout eq ""} {return} } image create photo .savetogif -format window -data $w .savetogif write $fileout -format jpeg return $fileout } proc PrintEnv {Variable} { global env if {$Variable=="all"} { return [array get env] } if {[info exists env($Variable)]} { return $env($Variable) } return "$Variable iiiiiiiiiiiiiiiiiiiiinconnu" } proc PrintInfo {msg} { if { [winfo exists .top.fr.info] } { .top.fr.info configure -text $msg } } proc PrintOgl {{file ""}} { if {$file eq ""} { set file [DemandeEtSauveFichier jpg] if {$file eq ""} { return } } set h [$::pgl(wogl) height] set w [$::pgl(wogl) width] set numChans 4 set vec [tcl3dVector GLubyte [expr {$w * $h * $numChans}]] glReadPixels 0 0 $w $h GL_RGBA GL_UNSIGNED_BYTE $vec set ph [image create photo -width $w -height $h] tcl3dVectorToPhoto $vec $ph $w $h $numChans set fmt "png" if {[file extension $file] eq ""} { set file "${file}.png" } $ph write $file -format png -background black image delete $ph return } proc PrintOrdali {w} { global LongueurTotale Sequences set NombreDeSequences [array size Sequences] scan [$w.lessequences.scrollxseq get] "%f %f" xMin xMax scan [$w.lessequences.scrolly get] "%f %f" yMin yMax set DebutX [Maxi 0 [expr int($LongueurTotale*$xMin)-1]] set FinX [expr round($LongueurTotale*$xMax)] set DebutY [expr int($NombreDeSequences*$yMin)+1] set FinY [expr round($NombreDeSequences*$yMax)+1] set DumpLesNoms [$w.lessequences.textnomseq dump -all $DebutY.0 $FinY.end] set DumpSequence {} for {set Y $DebutY} {$Y<=$FinY} {incr Y} { set DumpSequence [concat $DumpSequence [$w.lessequences.textsequence dump -all $Y.$DebutX $Y.$FinX]] } set DumpRegle {} foreach Y {1 2 3} { set DumpRegle [concat $DumpRegle [$w.lessequences.regle dump -all $Y.$DebutX $Y.$FinX]] } set K [UnCanva 1024 512] set DecalX 0 set DecalY [expr -$DebutY] set K [FromDumpOrdaliToCanvasOrHtml $DumpLesNoms $K $DecalX $DecalY RetDecalX RetDecalY] set DecalX [expr $RetDecalX-$DebutX+1] set K [FromDumpOrdaliToCanvasOrHtml $DumpSequence $K $DecalX $DecalY RetBidonX RetDecalY] set DecalY [expr $RetDecalY-2] set K [FromDumpOrdaliToCanvasOrHtml $DumpRegle $K $DecalX $DecalY RetMaximX RetMaximY] Wup "Voir Text ... pour compatibilite" set TailleFonte 10 set OffsetLettre [font measure [list Courier $TailleFonte] Z] set HauteurLettre 14 set SizeX [expr $RetMaximX*$OffsetLettre] set SizeY [expr $RetMaximY*$HauteurLettre] $K configure -scrollregion [list 0 0 $SizeX $SizeY] $K configure -width $SizeX -height $SizeY set Id [$K find withtag "Cadre"] $K coords $Id 0 0 $SizeX $SizeY $K configure -background "white" return $K } proc PrintRasMol {} { set file [DemandeEtSauveFichier ppm] IlFautVoir "write ppm $file" return } proc PrintSetup {{how ""}} { global PrmPrt if {! [ModeI]} { return } set w .prtset if {$how == "destroy" && [winfo exists $w]} { destroy $w return } if {$how eq "defauts"} { set PrmPrt(Format) "jpeg" set PrmPrt(Papier) "A4" set PrmPrt(Orientation) "landscape" set PrmPrt(Area) "all" set PrmPrt(Ruler) 1 set PrmPrt(ResidueNbr) 1 set fontsize [font configure SeqFont -size] set fontwght [font configure SeqFont -weight] set PrmPrt(FontSize) $fontsize set PrmPrt(FontWght) $fontwght return } set font "Helvetica 10" toplevel $w wm title $w "Print Setup" wm iconname $w "Setup" grid rowconfig $w 0 -weight 0 grid columnconfig $w all -weight 1 label $w.label -text "Print Setup" -font "Helvetica 14 bold" -anchor w -justify left grid $w.label -row 0 -column 0 -sticky w -pady 10 -padx 10 # format de sortie frame $w.fout grid $w.fout -row 1 -column 0 -padx 10 -pady {5 1} grid rowconfig $w.fout 0 -weight 0 grid columnconfig $w.fout all -weight 1 label $w.fout.lblout -text "Output format :" -font $font -justify left -anchor w frame $w.fout.ffmt grid rowconfig $w.fout.ffmt 0 -weight 0 grid columnconfig $w.fout.ffmt all -weight 1 radiobutton $w.fout.ffmt.ps -text "PostScript" -variable PrmPrt(Format) -relief flat -value "ps" -font $font -anchor w radiobutton $w.fout.ffmt.jpeg -text "JPEG" -variable PrmPrt(Format) -relief flat -value "jpeg" -font $font -anchor w radiobutton $w.fout.ffmt.png -text "PNG" -variable PrmPrt(Format) -relief flat -value "png" -font $font -anchor w grid $w.fout.ffmt.ps -row 0 -column 0 -sticky ew grid $w.fout.ffmt.jpeg -row 0 -column 1 -sticky ew grid $w.fout.ffmt.png -row 0 -column 2 -sticky ew grid $w.fout.lblout -row 0 -column 0 -sticky ew grid $w.fout.ffmt -row 0 -column 1 -sticky ew # options du papier labelframe $w.control -borderwidth 2 -text "Paper options" -labelanchor nw -font "Helvetica 12 bold" -fg blue grid $w.control -row 2 -column 0 -padx 10 -pady 5 -sticky ew grid rowconfig $w.control 0 -weight 0 grid columnconfig $w.control all -weight 1 label $w.control.lblsize -text "Paper size :" -font $font -justify left -anchor w frame $w.control.fsz grid rowconfig $w.control.fsz 0 -weight 0 grid columnconfig $w.control.fsz all -weight 1 radiobutton $w.control.fsz.sa4 -text "A4" -variable PrmPrt(Papier) -relief flat -value "A4" -font $font -anchor w radiobutton $w.control.fsz.sa3 -text "A3" -variable PrmPrt(Papier) -relief flat -value "A3" -font $font -anchor w radiobutton $w.control.fsz.sus -text "US" -variable PrmPrt(Papier) -relief flat -value "US" -font $font -anchor w radiobutton $w.control.fsz.sno -text "Unlimited" -variable PrmPrt(Papier) -relief flat -value "unlimited" -font $font -anchor w grid $w.control.fsz.sa4 -row 0 -column 0 -sticky ew grid $w.control.fsz.sa3 -row 0 -column 1 -sticky ew grid $w.control.fsz.sus -row 0 -column 2 -sticky ew grid $w.control.fsz.sno -row 0 -column 3 -sticky ew grid $w.control.lblsize -row 0 -column 0 -sticky ew -padx {5 1} grid $w.control.fsz -row 0 -column 1 -columnspan 2 -sticky ew label $w.control.lblori -text "Orientation :" -font $font -justify left -anchor w radiobutton $w.control.land -text "landscape" -variable PrmPrt(Orientation) -relief flat -value "landscape" -font $font -anchor w radiobutton $w.control.pays -text "portrait" -variable PrmPrt(Orientation) -relief flat -value "portrait" -font $font -anchor w grid $w.control.lblori -row 1 -column 0 -sticky ew -padx {5 1} grid $w.control.land -row 1 -column 1 -sticky ew grid $w.control.pays -row 1 -column 2 -sticky ew label $w.control.fntl -text "Font size : CourierNew " -font $font -justify left -anchor w -width 20 tk_optionMenu $w.control.fnts PrmPrt(FontSize) 6 8 10 12 14 16 tk_optionMenu $w.control.fntc PrmPrt(FontSght) normal bold grid $w.control.fntl -row 2 -column 0 -sticky ew -padx {5 1} grid $w.control.fnts -row 2 -column 1 -sticky ew grid $w.control.fntc -row 2 -column 2 -sticky ew # options du texte labelframe $w.ctrali -borderwidth 2 -text "Multiple Alignment options" -labelanchor nw -font "Helvetica 12 bold" -fg blue grid $w.ctrali -row 3 -column 0 -padx 10 -pady 10 -sticky ew grid rowconfig $w.ctrali 0 -weight 0 grid columnconfig $w.ctrali all -weight 1 label $w.ctrali.lblare -text "Print Area :" -font $font -justify left -anchor w -width 20 radiobutton $w.ctrali.alla -text "All" -variable PrmPrt(Area) -relief flat -value "all" -font $font -anchor w radiobutton $w.ctrali.wind -text "window" -variable PrmPrt(Area) -relief flat -value "window" -font $font -anchor w radiobutton $w.ctrali.slct -text "selected" -variable PrmPrt(Area) -relief flat -value "selected" -font $font -anchor w grid $w.ctrali.lblare -row 0 -column 0 -sticky ew -padx {5 1} grid $w.ctrali.alla -row 0 -column 1 -sticky ew grid $w.ctrali.wind -row 0 -column 2 -sticky ew grid $w.ctrali.slct -row 0 -column 3 -sticky ew label $w.ctrali.lblrul -text "Ruler on every page" -font $font -justify left -anchor w -width 20 radiobutton $w.ctrali.rul1 -text "Yes" -variable PrmPrt(Ruler) -relief flat -value 1 -font $font -anchor w radiobutton $w.ctrali.rul0 -text "No" -variable PrmPrt(Ruler) -relief flat -value 0 -font $font -anchor w grid $w.ctrali.lblrul -row 1 -column 0 -sticky ew -padx {5 1} grid $w.ctrali.rul1 -row 1 -column 1 -sticky ew grid $w.ctrali.rul0 -row 1 -column 2 -sticky ew label $w.ctrali.lblnbr -text "Residue numbering" -font $font -justify left -anchor w radiobutton $w.ctrali.nbr1 -text "Yes" -variable PrmPrt(ResidueNbr) -relief flat -value 1 -font $font -anchor w -relief flat radiobutton $w.ctrali.nbr0 -text "No" -variable PrmPrt(ResidueNbr) -relief flat -value 0 -font $font -anchor w -relief flat grid $w.ctrali.lblnbr -row 2 -column 0 -sticky ew -padx {5 1} grid $w.ctrali.nbr1 -row 2 -column 1 -sticky ew grid $w.ctrali.nbr0 -row 2 -column 2 -sticky ew frame $w.btn button $w.btn.print -text "Print" -background cyan -command [list BonPrintOrdali] button $w.btn.defts -text "Defauts" -background yellow -command [list PrintSetup defauts] button $w.btn.retour -text "Dismiss" -background red -command [list PrintSetup destroy] grid $w.btn.retour -row 0 -column 0 -sticky w -padx {10 1} grid $w.btn.defts -row 0 -column 1 grid $w.btn.print -row 0 -column 2 -sticky e -padx {1 10} grid columnconfig $w.btn all -weight 1 grid $w.btn -row 4 -column 0 -pady 20 -sticky ew update MesCouleurs $w FenetreAuCentre $w return } proc ProbPoissonInf {n nTirages N NPop} { if {$n > 0} { set n [expr round(log($n))] set nTirages [expr round(log($nTirages))] set N [expr round(log($N))] set NPop [expr round(log($NPop))] } set f1 [expr $N * 1.0 / $NPop ] set Calc1 [expr -1 * $nTirages * $f1] if {$Calc1 < -685} {set Calc1 1e-300} else {set Calc1 [expr exp($Calc1)]} set PTot 0 for {set i 1} {$i <= $n} {incr i} { set iFact [Factoriel $i] if {300 < $i} {set Puis 300} else {set Puis $i} set Calc2 [expr (pow($nTirages * $f1,$Puis)) / $iFact] if {$Calc2 <= 1e-300} {break} set P [expr $Calc1 * $Calc2] set PTot [expr $PTot + $P] } return $PTot } proc ProbPoissonSup {n nTirages N NPop} { set f1 [expr $N * 1.0 / $NPop ] set PTot 0 set Calc1 [expr -1 * $nTirages * $f1] if {$Calc1 < -685} { set Calc1 1e-300 } else { set Calc1 [expr exp($Calc1)] } for {set i $n} {$i <= $nTirages} {incr i} { set iFact [Factoriel $i] if {300 < $i} {set Puis 300} else {set Puis $i} if {[catch {set Calc2 [expr (pow($nTirages * $f1,$Puis))]}]} {set Calc2 1e+300} set Calc3 [expr $Calc2 / $iFact] Espionne "$PTot $Calc1 $Calc2 $iFact" set P [expr $Calc1 * $Calc3] set PTot [expr $PTot + $P] } return $PTot } proc ProbesetInput {{LesFichiers ""}} { #Avant tu dois creer #la nouvelle puce dans la table arraytype avec le pipework #le nouveau sourceprobeset avec la proc SourceProbesetInput #les entrees dans ln_arraytype_analysissoftware Espionne "[clock format [clock scan now]]" #if { ! [WithWebService "Gx" "TestIfExists"]} { WithWebService "Gx" 1 } WithWebService "Gx" 0 set FiLogLnAtPsSup "[GxData]/ToGx/FiLogLnAtPsSup.log" if {$LesFichiers=="" } { set LesFichiers [LesAffyAnnot] } if {$LesFichiers=="DansLeBonOrdre"} { set LesFichiers [LesAffyAnnotDansLeBonOrdre] } InfoFromArraytypeInput foreach File $LesFichiers { Espionne "$File" set LesLignesValues {} set Dir [file tail [file dirname $File]] set Queue [file tail $File] set DirQueue "$Dir/$Queue" set Chip [string range $Queue 0 [expr [string first "." $Queue] -1]] set SqlAt "select pk_arraytype from arraytype where name='$Chip';" set SqlSp "select pk_sourceprobeset from sourceprobeset where filename like '%$DirQueue';" set PkAt [GxDbSqlExec $SqlAt "GetFirstValue"] set PkSp [GxDbSqlExec $SqlSp "GetFirstValue"] set LesTetesPs [GxAffyHeaders ListOf Gx] lappend LesTetesPs "tissuespecificity" "linkeddiseases" "gscope_id" "speciessymbol" "pk_sp" "pk_at" set TetesPsPourCopy [join $LesTetesPs ","] Espionne "$TetesPsPourCopy" if {![file exists "[GxData]/ToGx/Probeset${Chip}.csv"]} { set LesLignes [TabulonsSansQuote $File "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { set LesValues {} set Elmt [split $Ligne ";"] set Ps [lindex $Elmt 0] if {[regexp "AFFX" $Ps]} {continue} foreach TetePs $LesTetesPs { if {$TetePs=="tissuespecificity"} { lappend LesValues "" continue } if {$TetePs=="speciessymbol"} { set ValueofCol [UcscAssemblyNameOf $Espece] lappend LesValues $ValueofCol continue } if {$TetePs=="linkeddiseases"} { set ValueofCol "" #set Dis1 [FromRetnetForAffy $GnMaj Dis1] #set Dis2 [FromRetnetForAffy $GnMaj Dis2] #if {$Dis1 == "" && $Dis2 == ""} { set ValueofCol "NA" } #if {$Dis1 != "" && $Dis2 == ""} { set ValueofCol $Dis1 } #if {$Dis1 != "" && $Dis2 != ""} { set ValueofCol "$Dis1/ $Dis2" } lappend LesValues $ValueofCol continue } if {$TetePs=="gscope_id"} { set ValueofCol "" if {[regexp "^Mus" $Espece]} { set ListeEvi [QuestionDeScience EVImm "GscopeIdsOfGeneName $GnMaj"] if {$ListeEvi != {}} { set ValueofCol [join $ListeEvi "/"] } } lappend LesValues $ValueofCol continue } if {$TetePs=="pk_sp"} { set ValueofCol $PkSp lappend LesValues $ValueofCol continue } if {$TetePs=="pk_at"} { set ValueofCol $PkAt lappend LesValues $ValueofCol continue } set Colonne [GxAffyHeaders $TetePs Col] set ValueofCol [lindex $Elmt $Colonne] if {$TetePs=="genename"} { set Gn $ValueofCol set GnMaj [string toupper $Gn] } if {$TetePs=="species"} { set Espece $ValueofCol } if {$TetePs=="chromo_loc" || $TetePs=="cytoband"} { set LesLoc {}; set LesCyt {} regsub -all "///" $ValueofCol "#" ValueofCol regsub -all "//" $ValueofCol "@" ValueofCol set LesLocCompletes [split $ValueofCol "#"] if {$TetePs=="chromo_loc"} { foreach LocComplete $LesLocCompletes { set LocComplete [string trim $LocComplete] set ElmtDeLoc [split $LocComplete "@"] set LaLoc [string trim [lindex $ElmtDeLoc 0]] regsub -all " " $LaLoc "" LaLoc lappend LesLoc $LaLoc } set LesLoc [ListeSansDoublon $LesLoc] set ValueofCol [join $LesLoc ","] } if {$TetePs=="cytoband"} { foreach LocComplete $LesLocCompletes { set LocComplete [string trim $LocComplete] set ElmtDeLoc [split $LocComplete "@"] set LaCyto [string trim [lindex $ElmtDeLoc 2]] regsub -all " " $LaCyto "" LaCyto if {$LaCyto==""} {set LaCyto ""} lappend LesCyt $LaCyto } set LesCyt [ListeSansDoublon $LesCyt] set ValueofCol [join $LesCyt ","] } } if {$TetePs=="mgi"} { regsub -all { */// *} $ValueofCol "#" ValueofCol set LesMGI [split $ValueofCol "#"] set LesMGI [ListeSansDoublon $LesMGI] set MGI [join $LesMGI "///"] set ValueofCol $MGI } if {$ValueofCol=="---"} {set ValueofCol ""} lappend LesValues $ValueofCol } #finTete set LigneValue [join $LesValues ";"] lappend LesLignesValues $LigneValue } #finLigne SauveLesLignes $LesLignesValues dans "[GxData]/ToGx/Probeset${Chip}.csv" } #finIf Inseredata probeset "[GxData]/ToGx/Probeset${Chip}.csv" $TetesPsPourCopy Espionne "unique" ProbesetUnique Espionne "leslnprobeset_sourceprobeset" set Sql "insert into ln_probeset_sourceprobeset select ps.pk_probeset, ps.pk_sp \ from probeset as ps where not exists \ (select pk_probeset, pk_sourceprobeset from ln_probeset_sourceprobeset as lnpssp where lnpssp.pk_probeset=ps.pk_probeset and lnpssp.pk_sourceprobeset=ps.pk_sp);" set Status [GxDbSqlExec $Sql] Espionne "leslnarraytype_probeset" set Sql "insert into ln_arraytype_probeset select ps.pk_at,ps.pk_probeset \ from probeset as ps where not exists \ (select pk_arraytype, pk_probeset from ln_arraytype_probeset as lnatps where lnatps.pk_probeset=ps.pk_probeset and lnatps.pk_arraytype=ps.pk_at);" set Status [GxDbSqlExec $Sql] Espionne "cas particulier" #spe pour MultiChip set MesMultiChip [MesMultiChip $Chip] if {$MesMultiChip=={}} {continue} set Sql "select pk_probeset from ln_arraytype_probeset where pk_arraytype = $PkAt;" set LesPkPsChip [GxDbSqlExec $Sql "GetList"] Espionne "[llength $LesPkPsChip] LesPkPsChip pour $Chip" set LesLignesSupp {} foreach MultiChip $MesMultiChip { set Sql "select pk_arraytype from arraytype where name='$MultiChip';" set PkAtMC [GxDbSqlExec $Sql "GetFirstValue"] foreach PkPsChip $LesPkPsChip { set LigneSupp "$PkAtMC;$PkPsChip" lappend LesLignesSupp $LigneSupp } } set n [llength $LesLignesSupp] AppendAuFichier $FiLogLnAtPsSup "$n ln_at_ps supp pour $Chip $MesMultiChip" SauveLesLignes $LesLignesSupp dans "[GxData]/ToGx/LnSupp.csv" Inseredata ln_arraytype_probeset "[GxData]/ToGx/LnSupp.csv" "pk_arraytype,pk_probeset" } Espionne "cestfini" Espionne "[clock format [clock scan now]]" #finFichier } proc ProbesetInputForAgilent {} { #pour que la proc Agilent marche faut faire gx puts ProbesetInputForAgilent et non gscope puts ProbesetInputForAgilent #Avant tu dois creer #la nouvelle puce dans la table arraytype avec le pipework #le nouveau sourceprobeset avec la proc SourceProbesetInput #les entrees dans ln_arraytype_analysissoftware WithWebService "Gx" 0 set LesTetesPs [GxAgilentHeaders ListOf Gx] lappend LesTetesPs "species" "pk_sp" "pk_at" set TetesPsPourCopy [join $LesTetesPs ","] set File [Agilent FileName] set Sql "select arraytypename from sourceprobeset where filename='$File';" set Chip [GxDbSqlExec $Sql "GetFirstValue"] set SqlAt "select pk_arraytype from arraytype where name='$Chip';" set SqlSp "select pk_sourceprobeset from sourceprobeset where filename='$File';" set PkAt [GxDbSqlExec $SqlAt "GetFirstValue"] set PkSp [GxDbSqlExec $SqlSp "GetFirstValue"] set LesProbeID [Agilent ListOf ProbeID] foreach ProbeID $LesProbeID { set LesValues {} foreach TetePs $LesTetesPs { set TeteAgilent [GxAgilentHeaders $TetePs Agilent] set Value "" if {$TetePs=="go_biologicalprocess" || $TetePs=="go_cellularcomponent" ||$TetePs=="go_molecularfunction" } { if {$TetePs=="go_biologicalprocess"} { set LesGo [Agilent biological_processOf $ProbeID] } if {$TetePs=="go_cellularcomponent"} { set LesGo [Agilent cellular_componentOf $ProbeID] } if {$TetePs=="go_molecularfunction"} { set LesGo [Agilent molecular_functionOf $ProbeID] } set Value [join $LesGo " /// "] } elseif {$TetePs=="pk_sp" } { set Value $PkSp } elseif {$TetePs=="pk_at" } { set Value $PkAt } else { set Value [Agilent $ProbeID $TeteAgilent] if {$TetePs=="speciessymbol"} { set speciessymbol $Value } if {$TetePs=="species"} { if {[info exists SpeciesSpeciessymbol($speciessymbol,species)]} { set Value $SpeciesSpeciessymbol($speciessymbol,species) } else { set Sql "select sname from organism where symbol='$speciessymbol';" set Value [GxDbSqlExec $Sql "GetFirstValue"] set SpeciesSpeciessymbol($speciessymbol,species) $Value } } } lappend LesValues $Value } set LigneValue [join $LesValues ";"] lappend LesLignesValues $LigneValue } SauveLesLignes $LesLignesValues dans "[GxData]/ToGx/Probeset${Chip}.csv" Inseredata probeset "[GxData]/ToGx/Probeset${Chip}.csv" $TetesPsPourCopy Espionne "leslnprobeset_sourceprobeset" set Sql "insert into ln_probeset_sourceprobeset select ps.pk_probeset, ps.pk_sp \ from probeset as ps where not exists \ (select pk_probeset, pk_sourceprobeset from ln_probeset_sourceprobeset as lnpssp where lnpssp.pk_probeset=ps.pk_probeset and lnpssp.pk_sourceprobeset=ps.pk_sp);" set Status [GxDbSqlExec $Sql] Espionne "leslnarraytype_probeset" set Sql "insert into ln_arraytype_probeset select ps.pk_at,ps.pk_probeset \ from probeset as ps where not exists \ (select pk_arraytype, pk_probeset from ln_arraytype_probeset as lnatps where lnatps.pk_probeset=ps.pk_probeset and lnatps.pk_arraytype=ps.pk_at);" set Status [GxDbSqlExec $Sql] } proc ProbesetInputForGPL {} { #Avant tu dois creer #la nouvelle puce dans la table arraytype avec le pipework #le nouveau sourceprobeset avec la proc SourceProbesetInput #les entrees dans ln_arraytype_analysissoftware WithWebService "Gx" 0 set LesTetesPs [GxAgilentHeaders ListOf Gx "[HomeRipp]/GxHome/AgilentAnnot/GxGPL14550Headers.txt"] lappend LesTetesPs "species" "pk_sp" "pk_at" set TetesPsPourCopy [join $LesTetesPs ","] Espionne "$TetesPsPourCopy" set File [LitGPL FileName] set Sql "select arraytypename from sourceprobeset where filename='$File';" set Chip [GxDbSqlExec $Sql "GetFirstValue"] set SqlAt "select pk_arraytype from arraytype where name='$Chip';" set SqlSp "select pk_sourceprobeset from sourceprobeset where filename='$File';" set PkAt [GxDbSqlExec $SqlAt "GetFirstValue"] set PkSp [GxDbSqlExec $SqlSp "GetFirstValue"] set LesProbeID [LitGPL LISTOF ID] foreach ProbeID $LesProbeID { set LesValues {}; set LesAccRP {} if {[LitGPL $ProbeID "CONTROL_TYPE"]!="FALSE"} {continue} foreach TetePs $LesTetesPs { set TeteAgilent [GxAgilentHeaders $TetePs Agilent "[HomeRipp]/GxHome/AgilentAnnot/GxGPL14550Headers.txt"] set Value "" if {$TetePs=="pk_sp" } { set Value $PkSp } elseif {$TetePs=="pk_at" } { set Value $PkAt } elseif {$TetePs=="representpublicid"} { #dans Agilent, REFSEQ => [lindex $LesTetesRPAgilent 0] et GB_ACC => [lindex $LesTetesRPAgilent 1] ne se contredisent jamais soit c'est la meme chose soit l'un des 2 est vide soit les 2 sont vides #quand REFSEQ et GB_ACC sont vides je recupere soit l'access dans ACCESSION_STRING si il est seul soit le premier access dans ce meme champ set LesTetesRPAgilent [split $TeteAgilent " "] set AccRP0 [LitGPL $ProbeID [lindex $LesTetesRPAgilent 0]] if {$AccRP0!=""} { lappend LesAccRP $AccRP0 } set AccRP1 [LitGPL $ProbeID [lindex $LesTetesRPAgilent 1]] if {$AccRP1!=""} { lappend LesAccRP $AccRP1 } set LesAccRP [ListeSansDoublon $LesAccRP] if {$LesAccRP =={}} { set AccRP2 [LitGPL $ProbeID [lindex $LesTetesRPAgilent 2]] if {$AccRP2!=""} { if {![regexp {\|} $AccRP2]} { lappend LesAccRP $AccRP2 } else { lappend LesAccRP [lindex [split $AccRP2 "|"] 1] } } } set Value [lindex $LesAccRP 0] } elseif {$TetePs=="refseqtranscriptid" || $TetePs=="ensembl"} { set LesLinc {}; set LesRef {}; set LesEns {}; set LesGb {}; set LesTc {} set LesMotsAcc [split [LitGPL $ProbeID $TeteAgilent] "|"] for {set j 0} {$j<[llength $LesMotsAcc]} {incr j 2} { set type [lindex $LesMotsAcc $j] if {$type=="linc"} {lappend LesLinc [lindex $LesMotsAcc $j+1]} if {$type=="ref"} {lappend LesRef [lindex $LesMotsAcc $j+1]} if {$type=="ens"} {lappend LesEns [lindex $LesMotsAcc $j+1]} if {$type=="gb"} {lappend LesGb [lindex $LesMotsAcc $j+1]} if {$type=="tc"} {lappend LesTc [lindex $LesMotsAcc $j+1]} } if {$TetePs=="refseqtranscriptid" && $LesRef!={}} { set refseq [join $LesRef " /// "] set Value $refseq } if {$TetePs=="ensembl" && $LesEns!={}} { set ensembl [join $LesEns " /// "] set Value $ensembl } } elseif {$TetePs=="speciessymbol"} { set speciessymbol [LitGPL $ProbeID $TeteAgilent] set Value $speciessymbol } elseif {$TetePs=="species"} { set Value [UcscAssemblyNameOf $speciessymbol] } else { set Value [LitGPL $ProbeID $TeteAgilent] } lappend LesValues $Value } set LigneValue [join $LesValues ";"] lappend LesLignesValues $LigneValue } SauveLesLignes $LesLignesValues dans "[GxData]/ToGx/Probeset${Chip}.csv" #Attention les TetesPsPourCopy ont des redondances Inseredata probeset "[GxData]/ToGx/Probeset${Chip}.csv" $TetesPsPourCopy Espionne "leslnprobeset_sourceprobeset" set Sql "insert into ln_probeset_sourceprobeset select ps.pk_probeset, ps.pk_sp \ from probeset as ps where not exists \ (select pk_probeset, pk_sourceprobeset from ln_probeset_sourceprobeset as lnpssp where lnpssp.pk_probeset=ps.pk_probeset and lnpssp.pk_sourceprobeset=ps.pk_sp);" set Status [GxDbSqlExec $Sql] Espionne "leslnarraytype_probeset" set Sql "insert into ln_arraytype_probeset select ps.pk_at,ps.pk_probeset \ from probeset as ps where not exists \ (select pk_arraytype, pk_probeset from ln_arraytype_probeset as lnatps where lnatps.pk_probeset=ps.pk_probeset and lnatps.pk_arraytype=ps.pk_at);" set Status [GxDbSqlExec $Sql] } proc ProbesetInputForGeneArray {} { #Avant tu dois creer #la nouvelle puce dans la table arraytype avec le pipework #le nouveau sourceprobeset avec la proc SourceProbesetInput #les entrees dans ln_arraytype_analysissoftware WithWebService "Gx" 0 set LesLignesValues {} #set File "/genomics/link/affyArrayAnnot/HuGene-1_0/AffyAnno20130326/HuGene-1_0-st-v1.na33.2.hg19.transcript.csv" #set File "/genomics/link/affyArrayAnnot/HuGene-2_0/AffyAnno20130402/HuGene-2_0-st-v1.na33.2.hg19.transcript.csv" set File "/genomics/link/affyArrayAnnot/MoGene-2_0/AffyAnno20130328/MoGene-2_0-st-v1.na33.2.mm10.transcript.csv" set Dir [file tail [file dirname $File]] set Queue [file tail $File] set DirQueue "$Dir/$Queue" set Chip [string range $Queue 0 [expr [string first "." $Queue] -1]] if {[regexp "^HuGene" $Chip]} {set Espece "Homo sapiens"} if {[regexp "^MoGene" $Chip]} {set Espece "Mus musculus"} set SqlAt "select pk_arraytype from arraytype where name='$Chip';" set SqlSp "select pk_sourceprobeset from sourceprobeset where filename like '%$DirQueue';" set PkAt [GxDbSqlExec $SqlAt "GetFirstValue"] set PkSp [GxDbSqlExec $SqlSp "GetFirstValue"] set LesTetesPs [GxAffyGeneArrayHeaders ListOf Gx] lappend LesTetesPs "species" "speciessymbol" "pk_sp" "pk_at" set TetesPsPourCopy [join $LesTetesPs ","] Espionne "$TetesPsPourCopy" if {![file exists "[GxData]/ToGx/Probeset${Chip}.csv"]} { set LesLignes [TabulonsSansQuote $File "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { set LesValues {} set Elmt [split $Ligne ";"] set Ps [string trim [lindex $Elmt 0]] foreach TetePs $LesTetesPs { if {$TetePs=="species"} { set ValueofCol $Espece lappend LesValues $ValueofCol continue } if {$TetePs=="speciessymbol"} { set ValueofCol [UcscAssemblyNameOf $Espece] lappend LesValues $ValueofCol continue } if {$TetePs=="pk_sp"} { set ValueofCol $PkSp lappend LesValues $ValueofCol continue } if {$TetePs=="pk_at"} { set ValueofCol $PkAt lappend LesValues $ValueofCol continue } set LesColonnes [GxAffyGeneArrayHeaders $TetePs Col] if {[llength $LesColonnes]>1} { if {$TetePs=="chromo_loc"} { set chr [lindex $Elmt [lindex $LesColonnes 0]] set strand [lindex $Elmt [lindex $LesColonnes 1]] set start [lindex $Elmt [lindex $LesColonnes 2]] set stop [lindex $Elmt [lindex $LesColonnes 3]] if {$chr=="---" && $strand=="---" && $start=="---" && $stop=="---"} { set ValueofCol "---" } else { set ValueofCol "${chr}:${start}-${stop}(${strand})" } } if {$TetePs=="representpublicid" || $TetePs=="genedescription"} { set onapris "gene_assignment" set Colonne [lindex $LesColonnes 0] set ValueofCol [lindex $Elmt $Colonne] if {$ValueofCol=="---"} { set onapris "mrna_assignment" set Colonne [lindex $LesColonnes 1] set ValueofCol [lindex $Elmt $Colonne] } } } else { set Colonne [lindex $LesColonnes 0] set ValueofCol [lindex $Elmt $Colonne] } if {$ValueofCol!="---" && ($TetePs=="representpublicid" || $TetePs=="genename" || $TetePs=="genedescription" || $TetePs=="cytoband" || $TetePs=="entrezgene")} { set ListValue {}; set ListValueEtAcc {} if {[info exists AccDeValue]} {unset AccDeValue} if {[info exists GnNameDeGnDes]} {unset GnNameDeGnDes} regsub -all "///" $ValueofCol "^" ValueofCol regsub -all "//" $ValueofCol "°" ValueofCol foreach item [split $ValueofCol "^"] { set Indice [string index [GxAffyGeneArrayHeaders $TetePs Affy] end-1] set Value [string trim [lindex [split $item "°"] $Indice]] lappend ListValue $Value if {$TetePs!="representpublicid"} { set Indice [string index [GxAffyGeneArrayHeaders "representpublicid" Affy] end-1] lappend AccDeValue($Value) [string trim [lindex [split $item "°"] $Indice]] } if {$TetePs=="genedescription"} { if {$onapris == "gene_assignment"} { set Indice [string index [GxAffyGeneArrayHeaders "genename" Affy] end-1] set GnNameDeGnDes($Value) [string trim [lindex [split $item "°"] $Indice]] } } } if {$TetePs=="representpublicid"} { set NombreDAcc [llength $ListValue] set ListValue [ListeSansDoublon $ListValue] set ValueofCol [join $ListValue " /// "] } if {$TetePs!="representpublicid"} { set ListValue [ListeSansDoublon $ListValue] if {[llength $ListValue]==1 && [lindex $ListValue 0]=="---"} { set ValueofCol "---" } else { foreach Value $ListValue { if {$Value=="---"} {continue} if {[llength $AccDeValue($Value)] == $NombreDAcc || $TetePs=="genename"} { if {$TetePs=="genename"} { lappend ListValueEtAcc [string toupper $Value] } else { lappend ListValueEtAcc $Value } } else { set AccDeValue($Value) [ListeSansDoublon $AccDeValue($Value)] if {$TetePs=="genedescription" && $onapris=="gene_assignment"} { lappend ListValueEtAcc "$GnNameDeGnDes($Value): $Value // [join $AccDeValue($Value) ","]" } else { lappend ListValueEtAcc "$Value // [join $AccDeValue($Value) ","]" } } } set ValueofCol [join $ListValueEtAcc " /// "] } } } if {$ValueofCol!="---" && ($TetePs=="swissprot" || $TetePs=="unigene_id" || $TetePs=="go_biologicalprocess" || $TetePs=="go_cellularcomponent" || $TetePs=="go_molecularfunction" || $TetePs=="pathway" || $TetePs=="interpro")} { set ListAcc {}; set ListId {}; set ListIdEtAcc {} if {[info exists AccDuId]} {unset AccDuId} if {[info exists DesDuId]} {unset DesDuId} if {[info exists EvidenceDuId]} {unset EvidenceDuId} regsub -all "///" $ValueofCol "^" ValueofCol regsub -all "//" $ValueofCol "°" ValueofCol foreach item [split $ValueofCol "^"] { set LesElmts [split $item "°"] set Acc [string trim [lindex $LesElmts 0]] lappend ListAcc $Acc if {$TetePs=="swissprot" || $TetePs=="unigene_id" || $TetePs=="go_biologicalprocess" || $TetePs=="go_cellularcomponent" || $TetePs=="go_molecularfunction"} { set Id [string trim [lindex $LesElmts 1]] } if {$TetePs=="pathway" || $TetePs=="interpro"} { set Id [string trim [lindex $LesElmts 2]] } lappend ListId $Id lappend AccDuId($Id) $Acc if {$TetePs=="go_biologicalprocess" || $TetePs=="go_cellularcomponent" || $TetePs=="go_molecularfunction"} { set Des [string trim [lindex $LesElmts 2]] set Evidence [string trim [lindex $LesElmts 3]] set DesDuId($Id) $Des set EvidenceDuId($Id) $Evidence } if {$TetePs=="interpro"} { set Des [string trim [lindex $LesElmts 3]] set DesDuId($Id) $Des } } set ListId [ListeSansDoublon $ListId] foreach Id $ListId { set AccDuId($Id) [ListeSansDoublon $AccDuId($Id)] if {$TetePs=="swissprot" || $TetePs=="unigene_id"|| $TetePs=="pathway"} { if {[llength $AccDuId($Id)]==$NombreDAcc} { lappend ListIdEtAcc "$Id" } else { lappend ListIdEtAcc "$Id // [join $AccDuId($Id) ","]" } } if {$TetePs=="go_biologicalprocess" || $TetePs=="go_cellularcomponent" || $TetePs=="go_molecularfunction"} { if {[llength $AccDuId($Id)]==$NombreDAcc} { lappend ListIdEtAcc "$Id // $DesDuId($Id) // $EvidenceDuId($Id)" } else { lappend ListIdEtAcc "$Id // $DesDuId($Id) // $EvidenceDuId($Id) // [join $AccDuId($Id) ","]" } } if {$TetePs=="interpro"} { if {[llength $AccDuId($Id)]==$NombreDAcc} { lappend ListIdEtAcc "$Id // $DesDuId($Id)" } else { lappend ListIdEtAcc "$Id // $DesDuId($Id) // [join $AccDuId($Id) ","]" } } } set ValueofCol [join $ListIdEtAcc " /// "] } if {$ValueofCol=="---"} {set ValueofCol ""} lappend LesValues $ValueofCol } #finTete set LigneValue [join $LesValues ";"] lappend LesLignesValues $LigneValue } #finLigne SauveLesLignes $LesLignesValues dans "[GxData]/ToGx/Probeset${Chip}.csv" } #finIf Inseredata probeset "[GxData]/ToGx/Probeset${Chip}.csv" $TetesPsPourCopy Espionne "leslnprobeset_sourceprobeset" set Sql "insert into ln_probeset_sourceprobeset select ps.pk_probeset, ps.pk_sp \ from probeset as ps where not exists \ (select pk_probeset, pk_sourceprobeset from ln_probeset_sourceprobeset as lnpssp where lnpssp.pk_probeset=ps.pk_probeset and lnpssp.pk_sourceprobeset=ps.pk_sp);" set Status [GxDbSqlExec $Sql] Espionne "leslnarraytype_probeset" set Sql "insert into ln_arraytype_probeset select ps.pk_at,ps.pk_probeset \ from probeset as ps where not exists \ (select pk_arraytype, pk_probeset from ln_arraytype_probeset as lnatps where lnatps.pk_probeset=ps.pk_probeset and lnatps.pk_arraytype=ps.pk_at);" set Status [GxDbSqlExec $Sql] Espionne "cestfini" Espionne "[clock format [clock scan now]]" #finFichier } proc ProbesetInputForIllumina {} { #Avant tu dois creer #la nouvelle puce dans la table arraytype avec le pipework #le nouveau sourceprobeset avec la proc SourceProbesetInput #les entrees dans ln_arraytype_analysissoftware #NB: 13459 probeset sans genename sur 49587 set File "[HomeRipp]/GxHome/IlluminaAnnot/HumanHT-12_V3_0_R3_11283641_A.txt" set afterHeader 0; set afterProbes 0; set afterControls 0 set Sql "select arraytypename from sourceprobeset where filename='$File';" set Chip [GxDbSqlExec $Sql "GetFirstValue"] set SqlAt "select pk_arraytype from arraytype where name='$Chip';" set SqlSp "select pk_sourceprobeset from sourceprobeset where filename='$File';" set PkAt [GxDbSqlExec $SqlAt "GetFirstValue"] set PkSp [GxDbSqlExec $SqlSp "GetFirstValue"] set LesTetesPs [GxIlluminaHeaders ListOf Gx] lappend LesTetesPs "speciessymbol" "pk_sp" "pk_at" set TetesPsPourCopy [join $LesTetesPs ","] if {![file exists "[GxData]/ToGx/Probeset${Chip}.csv"]} { foreach Ligne [LesLignesDuFichier $File] { if {[regexp {^\[Probes\]} $Ligne]} {set afterHeader 1; continue} if {!$afterHeader} {continue} if {[regexp "^Species" $Ligne]} {continue} if {[regexp {^\[Controls\]} $Ligne]} {set afterProbes 1; continue} if {[regexp {^\[Columns\]} $Ligne]} {set afterControls 1; continue} if {$afterControls} {continue} set LesValues {} set LesMots [split $Ligne "\t"] if {$afterProbes} { if {[regexp "^Probe_Id" $Ligne]} {continue} set ProbeID [lindex $LesMots 0] set Des "control: [lindex $LesMots 3]" set LigneValue ";;;;;;$ProbeID;;;$Des;;26;30" lappend LesLignesValues $LigneValue continue } foreach TetePs $LesTetesPs { if {$TetePs=="speciessymbol"} { set ValueofCol [UcscAssemblyNameOf $Espece] lappend LesValues $ValueofCol continue } if {$TetePs=="pk_sp"} { set ValueofCol $PkSp lappend LesValues $ValueofCol continue } if {$TetePs=="pk_at"} { set ValueofCol $PkAt lappend LesValues $ValueofCol continue } set LesColonnes [GxIlluminaHeaders $TetePs Col] if {[llength $LesColonnes]>1} { if {$TetePs=="chromo_loc"} { set chr [lindex $LesMots [lindex $LesColonnes 0]] set strand [lindex $LesMots [lindex $LesColonnes 1]] set coord [lindex $LesMots [lindex $LesColonnes 2]] if {$chr=="" && $strand=="" && $coord==""} { set ValueofCol "" } else { set ValueofCol "chr${chr}:${coord}(${strand})" } } } else { set Colonne [lindex $LesColonnes 0] set ValueofCol [lindex $LesMots $Colonne] regsub -all ";" $ValueofCol "," ValueofCol if {$TetePs=="species"} {set Espece $ValueofCol} } lappend LesValues $ValueofCol } #finTete set LigneValue [join $LesValues ";"] lappend LesLignesValues $LigneValue } #finLigne SauveLesLignes $LesLignesValues dans "[GxData]/ToGx/Probeset${Chip}.csv" } #finIf Inseredata probeset "[GxData]/ToGx/Probeset${Chip}.csv" $TetesPsPourCopy Espionne "leslnprobeset_sourceprobeset" set Sql "insert into ln_probeset_sourceprobeset select ps.pk_probeset, ps.pk_sp \ from probeset as ps where not exists \ (select pk_probeset, pk_sourceprobeset from ln_probeset_sourceprobeset as lnpssp where lnpssp.pk_probeset=ps.pk_probeset and lnpssp.pk_sourceprobeset=ps.pk_sp);" set Status [GxDbSqlExec $Sql] Espionne "leslnarraytype_probeset" set Sql "insert into ln_arraytype_probeset select ps.pk_at,ps.pk_probeset \ from probeset as ps where not exists \ (select pk_arraytype, pk_probeset from ln_arraytype_probeset as lnatps where lnatps.pk_probeset=ps.pk_probeset and lnatps.pk_arraytype=ps.pk_at);" set Status [GxDbSqlExec $Sql] Espionne "cestfini" Espionne "[clock format [clock scan now]]" #finFichier } proc ProbesetUnique {} { set Sql "select a.probeset_id as aid , a.pk_probeset as apk , b.pk_probeset as bpk from probeset a, probeset b where a.probeset_id=b.probeset_id and a.pk_probeset!=b.pk_probeset order by aid,apk,bpk;" set LesIdPkPk [GxDbSqlExec $Sql "GetList"] set LesDelete {} set LesDerniers {} foreach {Id PkA PkB} $LesIdPkPk { set Premier [Mini $PkA $PkB] set Dernier [Maxi $PkA $PkB] set AineDesDeux $Premier if {[info exists Aine($Premier)]} { set AineDesDeux $Aine($Premier) } if {[info exists Aine($Dernier)]} { set Aine($Dernier) [Mini $AineDesDeux $Aine($Dernier)] } else { set Aine($Dernier) $Premier } if {[info exists DejaVu($Dernier)]} { continue } set DejaVu($Dernier) 1 lappend LesDerniers $Dernier lappend LesDelete "delete from probeset where pk_probeset=$Dernier;" } set LesUpdatePkSp {} set LesUpdatePkAt {} foreach Dernier [lsort -integer $LesDerniers] { set PkAine $Aine($Dernier) set SelectPkSpDuDernier "select pk_sp from probeset where pk_probeset = $Dernier" set Sql "update probeset set pk_sp=($SelectPkSpDuDernier) where pk_probeset=$PkAine;" lappend LesUpdatePkSp $Sql set SelectPkAtDuDernier "select pk_at from probeset where pk_probeset = $Dernier" set Sql "update probeset set pk_at=($SelectPkAtDuDernier) where pk_probeset=$PkAine;" lappend LesUpdatePkAt $Sql } set LesDelete [ListeSansDoublon $LesDelete] set UpdatePkSp [join $LesUpdatePkSp "\n"] set StatusUpSp [GxDbSqlExec $UpdatePkSp] set UpdatePkAt [join $LesUpdatePkAt "\n"] set StatusUpAt [GxDbSqlExec $UpdatePkAt] set Delete [join $LesDelete "\n"] set Status [GxDbSqlExec $Delete] return $Status } proc ProbesetsOfGeneName {Gn} { set LesProbesetsOfGeneName {} foreach Nom [GscopeIdsOfGeneName $Gn] { LConcat LesProbesetsOfGeneName [ProbesetsOfGscopeId $Nom] } return [lsort -unique $LesProbesetsOfGeneName] } proc ProbesetsOfGscopeId {Nom} { set PS [ExtraitInfo $Nom "ProbesetId"] if {[regexp -nocase "no value" $PS]} { return {} } set LesPS [split $PS ", "] return $LesPS } proc ProcDeGscopeEnDouble {} { set Xoue [exec xoue "proc "] foreach Ligne [split $Xoue "\n"] { if { ! [regexp {^([g/][^\:]+)\:proc ([^ ]+) } $Ligne Match Ou P]} { continue } if {[regexp obsolete $Ligne]} { continue } if {[regexp sm2ph $Ligne]} { continue } if {[regexp "OLD.tcl" $Ou]} { continue } if {[regexp "Old.tcl" $Ou]} { continue } if {[regexp "luc.tcl" $Ou]} { continue } lappend OuE($P) $Ou lappend LesP $P } set LesP [lsort -unique $LesP] foreach P $LesP { if {[llength $OuE($P)]>1} { set QueJmuller 1 foreach O $OuE($P) { if { ! [regexp "jmuller" $O]} { set QueJmuller 0 } } if {$QueJmuller} { continue } set QueChalmel 1 foreach O $OuE($P) { if { ! [regexp "chalmel" $O]} { set QueChalmel 0 } } if {$QueChalmel} { continue } set PT $P set Prems 1 foreach Ou $OuE($P) { set IlsSontIdentiques "============================================" set Ref [ProcDuFichier $P [lindex $Ou 0]] foreach O [lrange $OuE($P) 1 end] { if {$Ref!=[ProcDuFichier $P $O]} { set IlsSontIdentiques "" break } } if {[string trim $PT]!=""} { lappend LesDoubles "" lappend LesDoubles "$PT $IlsSontIdentiques" set PT [string repeat " " [string length $PT]] } lappend LesDoubles "$PT $Ou" if {$Prems} { set Prems 0 set PT [string repeat " " [string length $PT]] } } } } set Clavier "Postpone" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "Magenta" TouchePour $Clavier "Compare les procs" "CompareLesProcs \[selection get\]" TouchePour <2> "/meld" "CompareLesProcs \[selection get\] Meld" set Fenetre [AfficheListe $LesDoubles] return $Fenetre } proc ProcDuFichier {P Fichier} { if {[FileAbsent $Fichier]} { set Fichier "[GscopeDir]/$Fichier" if {[FileAbsent $Fichier]} { set Fichier "[GscopeContrib]/$Fichier" if {[FileAbsent $Fichier]} { return "" } } } set DansProc 0 set LaProc {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! $DansProc} { if { ! [regexp "^proc $P " $Ligne] } { continue } } if { $DansProc && [regexp "^proc " $Ligne] } { break } set DansProc 1 lappend LaProc $Ligne } set Proc [join $LaProc "\n"] set iAF [string last "\}" $Proc] set Proc [string range $Proc 0 $iAF] return [string trim $Proc " \n"] } proc ProcessMeasureDistance {args} { global AtomePique PtMD1 PtMD2 if {$args eq "reset"} { set PtMD1 "" set PtMD2 "" trace remove variable AtomePique write ProcessMeasureDistance $::pgl(BoutonDistance) configure -fg cyan bind $::pgl(wogl) {set ::BQx %x ; set ::BQy %y} return } if {$AtomePique eq ""} {return} if {$PtMD1 eq ""} { set PtMD1 $AtomePique return } if {$PtMD2 eq ""} { set PtMD2 $AtomePique } lassign [Tag2MolObjAtm $PtMD1] mol1 obj1 atm1 lassign [Tag2MolObjAtm $PtMD2] mol2 obj2 atm2 set Lx1 [$mol1 AtomXYZ $atm1] set Lx2 [$mol2 AtomXYZ $atm2] set dst [Dist $Lx1 $Lx2] lappend ::pgl(Dist2Show) [list $Lx1 $Lx2 $dst] trace remove variable AtomePique write ProcessMeasureDistance $::pgl(BoutonDistance) configure -fg cyan bind $::pgl(wogl) {set ::BQx %x ; set ::BQy %y} $::pgl(wogl) postredisplay return } proc ProchainPk {Table} { if {[TestonsSql]} { return 999 } regsub {[^\.]+\.} $Table "" LocalTable set ProchainPk [SqlExec "select last_value from ${Table}_pk_${LocalTable}_seq;" "GetFirstValue"] incr ProchainPk return $ProchainPk } proc ProchaineBalise {aTexte {aAttributs ""} {Rogner NePasRogner}} { upvar $aTexte Texte if {$aAttributs!=""} { upvar $aAttributs Attributs ; set Attributs ""} set Rogner [expr ! [string equal $Rogner "NePasRogner"]] if { ! [regexp -indices -nocase {<[^ >]+} $Texte Indices]} { return "" } set DebItem [lindex $Indices 0] set FinItem [lindex $Indices 1] set Balise [string range $Texte [incr DebItem] $FinItem] set NouveauTexte [string range $Texte $FinItem+1 end] set iChevronFermant [string first ">" $NouveauTexte] if {$iChevronFermant<0} { return "" } set Attributs [string range $NouveauTexte 0 $iChevronFermant] set LongAttributs [string length $Attributs] set Attributs [string trim $Attributs " />"] set NouveauTexte [string range $NouveauTexte $LongAttributs-1 end] set Fermant [ItemHTMLFermant $Balise] regsub -all -- "-" $Fermant "\-" FermantX if { ! [regexp -indices -nocase "$FermantX" $NouveauTexte Indices]} { return "" } set iFin [lindex $Indices 0] set Derriere [expr [lindex $Indices 1] + 1] set Valeur [string range $NouveauTexte 0 [expr $iFin - 1]] if {$Rogner} { set Texte [string range $NouveauTexte $Derriere end] } return $Balise } proc ProfilDExpressionPourUneBande {Bande} { set Liste [RequeteSurLaMeilleureLocalisation $Bande] set Affiche "$Bande\n" set T 0 set N 0 set C 0 foreach Element $Liste { scan $Element "%s" Code set Expr [QuelleEstLExpression $Code] if {$Expr=="+"} {incr T} if {$Expr=="-"} {incr N} if {$Expr=="0"} {incr C} } if {$T>$N && $N>=$C} {return "Up"} if {$N>$T && $T>=$C} {return "Down"} if {$C>$N && $N>=$T} {return "Complex"} if {$T>$C && $C>=$N} {return "Up"} if {$N>$C && $C>=$T} {return "Down"} if {$C>$T && $T>=$N} {return "Complex"} if {$T==$N && $N==$C} {return "T=N=C($C)"} if {$T==$N && $C<$T} {return "T=N($C)C"} if {$T==$C && $N<$T} {return "T=C"} if {$N==$C && $T<$N} {return "NotClear"} } proc ProfilDesParticuliers {Fichier931jum Fichier2467 FichierSortie} { #2467 - 931+jum foreach Ligne [LesLignesDuFichier $Fichier931jum] { if {$Ligne==""} {continue} set LesDD [split $Ligne " "] foreach DD $LesDD {set Vu($DD) 1} } foreach Ligne [LesLignesDuFichier $Fichier2467] { if {$Ligne==""} {continue} if {![info exists Vu($Ligne)]} {lappend Liste $Ligne} } Espionne [llength $Liste] ################ #Profil DD foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/FoldExpression_tous"] { set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 0] set Prof [lindex $LesChamps 1] if {$Prof=="+"} {set P($DD) "T"} if {$Prof=="-"} {set P($DD) "N"} if {$Prof=="0"} {set P($DD) "C"} } #Profil consensus foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/ResolutionTotaleDesConflits_pourGscope.txt"] { if {[regexp "gscopecode" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 1] set ProfCons [lindex $LesChamps 5] set Pc($DD) $ProfCons } #Bandes DD foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Clones_bandes_new"] { ## (rq: pas de user R dans ce fichier) if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set U [lindex $LesChamps 0] ### ATTENTION: enlever les espaces qui sont parfois apres le codeclone ###### set CodeClone [string trim [lindex $LesChamps 1]] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } set B [lindex $LesChamps 2] set Band($U,$CodeClone) $B } #Intensites foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Bands_intensiteDD.txt"] { if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set User [lindex $LesChamps 0] set ProfilCalc [lindex $LesChamps 2] set B [lindex $LesChamps 1] regsub -all "\'" $B "" B set I_TE($B) [lindex $LesChamps 3] set I_NE($B) [lindex $LesChamps 4] set I_TS($B) [lindex $LesChamps 5] set I_NS($B) [lindex $LesChamps 6] set I_TU($B) [lindex $LesChamps 7] set I_NU($B) [lindex $LesChamps 8] set PCalc($B) $ProfilCalc } #Profil Virtual Northern et Northern set FichierProfilDDValidation "[RepertoireDuGenome]/totalite/ValidationProfil.txt" if {![file exists $FichierProfilDDValidation]} {return} foreach Ligne [LesLignesDuFichier $FichierProfilDDValidation] { if {$Ligne=="" || [regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set Owner [lindex $Ligne 0] set CC [lindex $Ligne 2] if {$Owner=="F"} {set CC [string toupper $CC]} if {$Owner=="I"} {regsub -all "\'" $CC "_" CC} set ProfVN [lindex $Ligne 3] set ProfNorthern [lindex $Ligne 5] set PVN($Owner,$CC) $ProfVN set PN($Owner,$CC) $ProfNorthern } #profil Macroarray set FichierMacroarray "[RepertoireDuGenome]/MembranesRegine/compar_profils_mb_gscope" foreach Ligne [LesLignesDuFichier $FichierMacroarray] { if {$Ligne==""} {continue} set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 1] set ProfMb [lindex $LesChamps 2] set PMb($DD) $ProfMb } foreach Elt $Liste { Espionne $Elt if {[info exists P($Elt)]} {set ProfilDD $P($Elt)} else {set ProfilDD ""} if {[info exists Pc($Elt)]} {set ProfilCons $Pc($Elt)} else {set ProfilCons ""} if {[info exists PMb($Elt)]} {set ProfilMb $PMb($Elt)} else {set ProfilMb ""} set U [ExtraitInfo $Elt "OwnerOfCDNA"] set CodeClone [ExtraitInfo $Elt "CodeClone"] if {[info exists PVN($U,$CodeClone)]} {set ProfilVN $PVN($U,$CodeClone)} else {set ProfilVN ""} if {[info exists PN($U,$CodeClone)]} {set ProfilNorthern $PN($U,$CodeClone)} else {set ProfilNorthern ""} if {[info exists Band($U,$CodeClone)]} { set BandeDD $Band($U,$CodeClone) set ProfilDDCalc $PCalc($BandeDD) #Profil moyen if {(![info exists I_TE($BandeDD)] || ([info exists I_TE($BandeDD)] && $I_TE($BandeDD)=="")) || (![info exists I_NE($BandeDD)] || ([info exists I_NE($BandeDD)] && $I_NE($BandeDD)=="")) || (![info exists I_TS($BandeDD)] || ([info exists I_TS($BandeDD)] && $I_TS($BandeDD)=="")) || (![info exists I_NS($BandeDD)] || ([info exists I_NS($BandeDD)] && $I_NS($BandeDD)=="")) || (![info exists I_TU($BandeDD)] || ([info exists I_TU($BandeDD)] && $I_TU($BandeDD)=="")) || (![info exists I_NU($BandeDD)] || ([info exists I_NU($BandeDD)] && $I_NU($BandeDD)=="")) } { set Ite "";set Ine "";set Its "";set Ins "";set Itu "";set Inu "";set TNmoy "";set Pmoy "" } else { set Ite $I_TE($BandeDD) set Ine $I_NE($BandeDD) set Its $I_TS($BandeDD) set Ins $I_NS($BandeDD) set Itu $I_TU($BandeDD) set Inu $I_NU($BandeDD) set SommeDesN [format "%.3f" [expr $Ine + $Ins + $Inu * 1.0]] set SommeDesT [format "%.3f" [expr $Ite+ $Its+ $Itu *1.0]] set TNmoy [expr ($SommeDesT-$SommeDesN)] if {$TNmoy>0} {set Pmoy "T"} if {$TNmoy<0} {set Pmoy "N"} if {$TNmoy==0} {set Pmoy "0"} } } else {set ProfilDDCalc ""; set Ite "";set Ine "";set Its "";set Ins "";set Itu "";set Inu ""; set TNmoy ""; set Pmoy ""} #if {$Elt=="DD1716"} {FaireLire $ProfilDDCalc} lappend ListeComplete "$Elt\t$U\t$CodeClone\t$BandeDD\t$Ite\t$Ine\t$Its\t$Ins\t$Itu\t$Inu\t$TNmoy\t$Pmoy\t$ProfilDD\t$ProfilDDCalc\t$ProfilCons\t$ProfilVN\t$ProfilNorthern\t$ProfilMb" } Espionne [llength $ListeComplete] SauveLesLignes $ListeComplete dans $FichierSortie } proc Profile1DuBlock {grp block aMatrix meanpcid} { upvar $aMatrix mat global CpB Sequences TDesSeqWeights set Lseqs [set CpB($grp)] lassign $block deb fin set sum 0.0 foreach n $Lseqs { lassign [set CpB(startstop,$n)] first last if {$first > $fin || $last < $deb} { set frag($n) 1 } else { set frag($n) 0 set sum [expr {$sum + [set TDesSeqWeights($n)]}] } } if {$sum <= 0.0} { return [list] } puts "SumWgt $sum" set i 0 foreach n $Lseqs { set wgt($n) [expr {100.*[set TDesSeqWeights($n)]/$sum}] if {$grp eq "Group1"} { puts "wgt $i [set wgt($n)]" } incr i } set Lprf [list] set Laa [split [set mat(laa)] ""] foreach p [lrange [set CpB($grp,Lpil)] $deb $fin] { set Lcol [list] set Lp [split $p ""] foreach a $Laa { set Li [lsearch -all $Lp $a] set s 0.0 foreach i $Li { set n [lindex $Lseqs $i] if {! $frag($n)} { set s [expr {$s + [set wgt($n)]}] } } lappend Lcol $s } lappend Lprf $Lcol } # debug foreach p [lrange [set CpB($grp,Lpil)] $deb $fin] col $Lprf { puts "$p" puts "[join $col \n]" } set Prf1 [list] set i 0 foreach col $Lprf { puts "l= $i" set res [list] foreach a $Laa { set f 0.0 foreach b $Laa v $col { set f [expr {$f + $v*[set mat($a,$b)]}] } lappend res [expr {int($f/$meanpcid)}] puts " a $a [expr {int($f/$meanpcid)}]" } lappend Prf1 $res } return $Prf1 } proc Profile2DuBlock {grp b Laa} { global CpB TDesSeqWeights set Lseqs [set CpB($grp)] lassign $b deb fin set sum 0.0 foreach n $Lseqs { lassign [set CpB(startstop,$n)] first last if {$first > $deb || $last < $fin} { set frag($n) 1 } else { set frag($n) 0 set sum [expr {$sum + [set TDesSeqWeights($n)]}] } } if {$sum <= 0.0} { return [list] } foreach n $Lseqs { if {! $frag($n)} { set wgt($n) [expr {100*[set TDesSeqWeights($n)]/$sum}] } } set Lprf [list] set Laa [split $Laa ""] foreach p [lrange [set CpB($grp,Lpil)] $deb $fin] { set Lp [split $p ""] set Lcol [list] foreach a $Laa { set sum 0.0 set Li [lsearch -all $Lp $a] foreach i $Li { set n [lindex $Lseqs $i] if {! $frag($n)} { set sum [expr {$sum + [set wgt($n)]}] } } lappend Lcol [expr {10.*$sum}] } lappend Lprf $Lcol } return $Lprf } proc ProfileSegment {AccessFichier {Valeur ""}} { global ProfileSegment if {$Valeur!=""} { set ProfileSegment($AccessFichier) $Valeur] } return [set ProfileSegment($AccessFichier)] } proc ProfilsDes961 {FichierClusters FichierSortie} { set NbT 0; set NbN 0; set NbC 0 foreach JR [ListeDesJR $FichierClusters] { set NumGeneDD [InterrogeFichierTotalDataDD $JR N] set ProfilGel [InterrogeFichierDDUniques3T $NumGeneDD Pmoy] if {$ProfilGel==0 || $ProfilGel==""} { set ProfilConsensus [InterrogeFichierTotalDataDD $JR ProfCons] if {$ProfilConsensus=="" || $ProfilConsensus=="?" || $ProfilConsensus=="0"} { set ProfilCalc [InterrogeFichierTotalDataDD $JR Profil] set P $ProfilCalc } else {set P $ProfilConsensus} } else {set P $ProfilGel} AppendAuFichier $FichierSortie "$JR\t$P" if {$P=="T"} {incr NbT} if {$P=="N"} {incr NbN} if {$P!="T" && $P!="N"} {incr NbC} } return "NbT: $NbT - NbN: $NbN - NbC: $NbC" } proc ProgPathway {Program} { global TabProgPathway if {![info exists TabProgPathway]} { set TabProgPathway(LesProgrammes) {} set FileProgPathway "[ProgSourceDir]/program.path" if {![file exists $FileProgPathway]} {set FileProgPathway "[ProgSourceDir]/etc/gscope_program.path"} if {![file exists $FileProgPathway]} {return $Program} set F [open $FileProgPathway] while {[gets $F Ligne]>=0} { set Prog "" set Pathway "" scan $Ligne "%s %s" Prog Pathway if {$Prog == "" || $Pathway == ""} {continue} lappend TabProgPathway(LesProgrammes) $Prog set TabProgPathway($Prog) $Pathway set Prog [string toupper $Prog] set TabProgPathway($Prog) $Pathway set Prog [string tolower $Prog] set TabProgPathway($Prog) $Pathway } close $F } if {![info exists TabProgPathway($Program)]} {return $Program} return [set TabProgPathway($Program)] } proc ProgSourceDir {} { # ProgSourceDir is normaly in gscope.tcl but here it is for CafedesSciences global ProgSourceDir # if {[info exists ProgSourceDir] && [file exists $ProgSourceDir]} {return $ProgSourceDir} if {[info exists ProgSourceDir]} {return $ProgSourceDir} set Script [info script] if {$Script==""} { # tk_messageBox -message "I cannot find the script directory" set ProgSourceDir "." } else { if {[catch { while {[file exists $Script] && [file type $Script]=="link"} { set RepScript [file dirname $Script] if {[catch {set Script [file readlink $Script]} Message]} { break } if {[file pathtype $Script]=="relative"} { while {[regexp {^\.\./} $Script]} { regsub {^\.\./} $Script "" Script set RepScript [file dirname $RepScript] } set Script "$RepScript/$Script" } } } Message]} { # tk_messageBox -message "Plante avec message \n$Message" } set ProgSourceDir [file dirname $Script] if {[file tail $ProgSourceDir]=="bin"} { set Meilleur [file dirname $ProgSourceDir] if {[file exists "$Meilleur/gscope_source.tcl"]} { set ProgSourceDir $Meilleur } } } global InfoScript ; set InfoScript $Script return $ProgSourceDir } proc ProjetGscope {} { return [file tail [RepertoireDuGenome]] } proc PromAnPanel {args} { global TableauFilePromoterAnalysis #PromAnPanel unset #PromAnPanel set Qui(1 end-1) Quoi(end) --> set TableauFilePromoterAnalysis($Qui) $Quoi #PromAnPanel append Qui(1 end-1) Quoi(end --> lappend TableauFilePromoterAnalysis($Qui) $Quoi et le cree si n'existe pas #PromAnPanel ini $File "" --> initiallisation de tout le fichierPromAn #PromAnPanel ini $File $Method #PromAnPanel ini $File $ResultType #PromAnPanel add $File $Texte --> AppendAuFichier $File $Texte #PromAnPanel del $File #PromAnPanel ask $File LesResultTypes #PromAnPanel ask $File LesMethods #PromAnPanel ask $File ResultType $ResultType LesMethods #PromAnPanel ask $File ResultType $ResultType Method $Method n #PromAnPanel ask $File ResultType $ResultType Method $Method n $n D --> Debut #PromAnPanel ask $File ResultType $ResultType Method $Method n $n F --> Fin #PromAnPanel ask $File ResultType $ResultType Method $Method n $n Sens #PromAnPanel ask $File ResultType $ResultType Method $Method n $n Name --> Id #PromAnPanel ask $File ResultType $ResultType Method $Method n $n TSSLoc #PromAnPanel ask $File ResultType $ResultType Method $Method n $n TSSDist #PromAnPanel ask $File ResultType $ResultType Method $Method n $n Identity #PromAnPanel ask $File ResultType $ResultType Method $Method n $n Organism #PromAnPanel ask $File ResultType $ResultType Method $Method n $n LesInfosSup ### Methods developpees: GenomicSequence FirstExonPrediction DBTSS EPD Pattern set FirstArg [lindex $args 0] ############ ask ################ if {$FirstArg == "ask"} { ### Interroge les donnees de l'analyse de promoteurs ### set args [lrange $args 1 end] set FirstArg [lindex $args 0 ] set Quoi [join $args "," ] if { [info exists TableauFilePromoterAnalysis($Quoi)]} { return [set TableauFilePromoterAnalysis($Quoi)]} if {![file exists $FirstArg] || [info exists TableauFilePromoterAnalysis($FirstArg,EstCharge)]} { return } set TableauFilePromoterAnalysis($FirstArg,EstCharge) 1 LoadPromAn TableauFilePromoterAnalysis $FirstArg if {[info exists TableauFilePromoterAnalysis($Quoi)]} { return [set TableauFilePromoterAnalysis($Quoi)]} return } ############ unset ################ if {$FirstArg == "unset"} { if {[info exists TableauFilePromoterAnalysis]} {unset TableauFilePromoterAnalysis} return } ############ set ################# if {$FirstArg == "set"} { set Qui [lrange $args 1 end-1] set Quoi [lindex $args end] set TableauFilePromoterAnalysis($Qui) $Quoi return } ############ append ################# if {$FirstArg == "append"} { set Qui [lrange $args 1 end-1] set Quoi [lindex $args end] if {![info exists TableauFilePromoterAnalysis($Qui)]} {set TableauFilePromoterAnalysis($Qui) {}} lappend TableauFilePromoterAnalysis($Qui) $Quoi return } ############ ini ################# if {$FirstArg == "ini"} { set File [lindex $args 1] if {[file exists $File]} { set Method [lindex $args 2] if {$Method != ""} { PrepareLeFichierPourLeProtocole $File $Method "OnRemplacera" } else { foreach ResultType [PromAnPanel ask $File LesResultTypes] { foreach Method [PromAnPanel ask $File ResultType $ResultType LesMethods] { PrepareLeFichierPourLeProtocole $File $Method "OnRemplacera" } } } } return } ############ add ################# if {$FirstArg == "add"} { set File [lindex $args 1] set Texte [lindex $args 2] AppendAuFichier $File $Texte return } ############ del ################# if {$FirstArg == "del"} { set File [lindex $args 1] if {[file exists $File]} {file delete -force $File} return } return } proc PromAn_GUI {{FilePromAn ""} {w ""} {Option ""}} { global RepDesSequencesIni if {![info exists RepDesSequencesIni]} {set RepDesSequencesIni "."} if {$FilePromAn == ""} { set FilePromAn [tk_getOpenFile -title "PromAn project file selection" -initialdir $RepDesSequencesIni] set RepDesSequencesIni [file dirname $FilePromAn] } if {![file exists $FilePromAn]} {Espionne "File PromAn does not exists" ; return } PromAnPanel unset if {[string equal -nocase $Option "exit"]} { destroy $w if {[winfo children .] == ""} {exit} return } if {[winfo children .] != ""} { set w [NomDe "promanview"] if {[winfo exists $w]} { return } toplevel $w } else { set w "." $w config -bd 3 -relief flat } wm title $w "PromAn View" wm iconname $w "PromAn View" ##################################################### set LargeurFenetre [expr [winfo screenwidth .] * 3.0 / 4] set HauteurFenetre [expr [winfo screenheight .] * 2.0 / 3] set LargeurCanva $LargeurFenetre set HauteurSeq 30 set HauteurFExon 40 set HauteurType 20 set GdEcartY 40 set EcartY 35 set BordGaucheX 50 set BordDroitX 400 set BordY 100 set LargeurAffichage [expr $LargeurFenetre - ($BordGaucheX + $BordDroitX)] set TailleContig [PromAnPanel ask $FilePromAn ResultType "GenomicSequence" Method "GenomicSequence" n 1 F] if {$TailleContig == ""} { return } set FacteurX [expr $LargeurAffichage * 1.0 / $TailleContig] ##################################################### set LesFormesAPlacer {} set Titre "PromAn analysis on [file tail $FilePromAn]" set XTitreText [expr $LargeurFenetre * 1.0 / 2] set YTitreText [expr $BordY * 1.0 / 2] set LesTags {} lappend LesFormesAPlacer [list text $XTitreText $YTitreText "center" $Titre $LesTags "slategrey" "courier 16 bold"] set HauteurCanva $BordY ###Dessin de la GenomicSequence################## set XMin $BordGaucheX set XMax [expr $LargeurFenetre - $BordDroitX] set YMin [expr $BordY + ($HauteurFExon * 1.0/2) - ($HauteurSeq * 1.0/2)] set YMax [expr $BordY + ($HauteurFExon * 1.0/2) + ($HauteurSeq * 1.0/2)] set ColorFill "lightslategrey" set ColorLine "black" set LesTags [list "GenomicSequence"] lappend LesFormesAPlacer [list rectangle $XMin $YMin $XMax $YMax $ColorFill $ColorLine $LesTags] set Text "1" set YTitreText [expr $YMin + ($YMax - $YMin) * 1.0 / 2] set LesTags {} lappend LesFormesAPlacer [list text $XMin $YTitreText "e" $Text $LesTags "black" "courier 12"] set Text $TailleContig set LesTags {} lappend LesFormesAPlacer [list text $XMax $YTitreText "w" $Text $LesTags "black" "courier 12"] ###Dessin du FirstExonPrediction################## set D [Mini [PromAnPanel ask $FilePromAn ResultType "ProtocolGeneStructure" Method "FirstExon" n 1 D] [PromAnPanel ask $FilePromAn ResultType "ProtocolGeneStructure" Method "FirstExon" n 1 F]] set F [Maxi [PromAnPanel ask $FilePromAn ResultType "ProtocolGeneStructure" Method "FirstExon" n 1 D] [PromAnPanel ask $FilePromAn ResultType "ProtocolGeneStructure" Method "FirstExon" n 1 F]] if {$D == "" || $F == ""} { return } set XMin [expr $D * $FacteurX + $BordGaucheX] set YMin $BordY set XMax [expr $F * $FacteurX + $BordGaucheX] set YMax [expr $BordY + $HauteurFExon] set ColorFill "yellow" set ColorLine "yellow" set LesTags {} lappend LesFormesAPlacer [list rectangle $XMin $YMin $XMax $YMax $ColorFill $ColorLine $LesTags] set Text $D set YTitreText [expr $YMin + ($YMax - $YMin) * 1.0 / 2] set LesTags {} lappend LesFormesAPlacer [list text $XMin $YTitreText "e" $Text $LesTags "black" "courier 12"] set Text $F set LesTags {} lappend LesFormesAPlacer [list text $XMax $YTitreText "w" $Text $LesTags "black" "courier 12" ] set HauteurCanva $YMax ###Dessin de tous les types de resultats selon toutes les methodes####################### set LesTdResults [PromAnPanel ask $FilePromAn LesResultTypes] set nMethods 0 foreach TdResult $LesTdResults { foreach TdMethod [PromAnPanel ask $FilePromAn ResultType $TdResult LesMethods] { incr nMethods } } set LesCouleurs [GammeDeCouleursVBR $nMethods "Degrade"] set XTitreText [expr $LargeurFenetre - $BordDroitX * 1.0 / 2] set SuisJeSurUnGenScan 0 set m 0 foreach TdResult $LesTdResults { foreach TdMethod [PromAnPanel ask $FilePromAn ResultType $TdResult LesMethods] { incr m if {$TdMethod == "GenomicSequence"} {continue} if {$TdMethod == "FirstExon"} {continue} if {$TdMethod == "GenScan"} { set SuisJeSurUnGenScan 1 } else { if {$SuisJeSurUnGenScan} {set HauteurCanva [expr $YMax + $EcartY]} set SuisJeSurUnGenScan 0 } set ColorFillBoite [lindex $LesCouleurs [expr $m-1]] set ColorLineBoite $ColorFillBoite set n [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n] if {$n == "" || $n <= 0} {continue} if {![info exists TabDejaPlace($TdResult)]} { set TabDejaPlace($TdResult) 1 set HauteurCanva [expr $HauteurCanva + $EcartY] set XLineMin 1 set XLineMax $LargeurFenetre set YLine [expr $HauteurCanva - $EcartY * 1.0 / 2] set ColorFill "slategrey" set ColorLine "slategrey" set LesTags {} lappend LesFormesAPlacer [list line $XLineMin $YLine $XLineMax $YLine $ColorFill $ColorLine $LesTags] #set HauteurCanva [expr $HauteurCanva + $EcartY] set Text $TdResult set LesTags {} lappend LesFormesAPlacer [list text $XTitreText $HauteurCanva "center" $Text $LesTags "black" "courier 15 bold"] } set HauteurCanva [expr $HauteurCanva + $EcartY] set XLineMin 1 set XLineMax $LargeurFenetre set YLine [expr $HauteurCanva - $EcartY * 1.0 / 2] set ColorFill "slategrey" set ColorLine "slategrey" set LesTags {} lappend LesFormesAPlacer [list line $XLineMin $YLine $XLineMax $YLine $ColorFill $ColorLine $LesTags] set Text $TdMethod set LesTags {} lappend LesFormesAPlacer [list text $XTitreText $HauteurCanva "n" $Text $LesTags $ColorFillBoite "courier 14 bold"] set HauteurCanva [expr $HauteurCanva + $EcartY] set Text [format "%-20s %-7s %-7s %-7s" "Name" "TSSDist" "Start" "End"] set LesTags {} lappend LesFormesAPlacer [list text $LargeurFenetre $HauteurCanva "e" $Text $LesTags "black" "courier 11"] set HauteurCanva [expr $HauteurCanva + $EcartY] set nGenScanPredictionOld "" for {set i 1} {$i <= $n} {incr i} { set Name [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i Name] set DoisJeDessinerLeTSS 1 set DoisJeEcrireLaLegende 1 if {$SuisJeSurUnGenScan} { regexp {^([0-9]+)\.} $Name tmp nGenScanPrediction set Name "Prediction $nGenScanPrediction" if {[info exists TabDejaPlace(GenScan,$nGenScanPrediction)]} { set DoisJeDessinerLeTSS 0 set DoisJeEcrireLaLegende 0 } else { set TabDejaPlace(GenScan,$nGenScanPrediction) 1 } if {$nGenScanPredictionOld != $nGenScanPrediction && $nGenScanPredictionOld != ""} { set HauteurCanva [expr $HauteurCanva + $EcartY] } set nGenScanPredictionOld $nGenScanPrediction } set D [Mini [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i D] [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i F]] set F [Maxi [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i D] [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i F]] set TSSDist [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i TSSDist] set XMin [expr $D * $FacteurX + $BordGaucheX] set YMin $HauteurCanva set XMax [expr $F * $FacteurX + $BordGaucheX] set YMax [expr $YMin + $HauteurType] set ColorLine "black" set LesTags [list "Sequence" "" $ColorFillBoite "orange"] lappend LesFormesAPlacer [list rectangle $XMin $YMin $XMax $YMax $ColorFillBoite $ColorLineBoite $LesTags] if {$DoisJeEcrireLaLegende} { set Text $D set YTitreText [expr $YMin + ($YMax - $YMin) * 1.0 / 2] set LesTags {} lappend LesFormesAPlacer [list text $XMin $YTitreText "e" $Text $LesTags] set Text $F set LesTags {} lappend LesFormesAPlacer [list text $XMax $YTitreText "w" $Text $LesTags] set Text [format "%-20s %-7s %-7s %-7s" [string range $Name 0 19] $TSSDist $D $F] set LesTags {} lappend LesFormesAPlacer [list text $LargeurFenetre $YTitreText "e" $Text $LesTags "black" "courier 11"] } set TSSLoc [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i TSSLoc] if {$TSSLoc != "" && $DoisJeDessinerLeTSS} { set XLine [expr $TSSLoc * $FacteurX + $BordGaucheX] set Sens [PromAnPanel ask $FilePromAn ResultType $TdResult Method $TdMethod n $i Sens] if {$Sens == "+"} { set ColorFill "red" set ColorLine "red" } else { set ColorFill "green3" set ColorLine "green3" } if {$D <= $TSSLoc && $TSSLoc <= $F} {set DashOuPas ""} else {set DashOuPas "dash"} set LesTags {} lappend LesFormesAPlacer [list line $XLine $YMin $XLine $YMax $ColorFill $ColorLine $LesTags $DashOuPas] set Text "TSS" set LesTags {} lappend LesFormesAPlacer [list text $XLine $YMin "s" $Text $LesTags $ColorFill "courier 10 bold"] set Text $TSSLoc set LesTags {} lappend LesFormesAPlacer [list text $XLine $YMax "n" $Text $LesTags $ColorFill "courier 10"] } if {$SuisJeSurUnGenScan} {continue} set HauteurCanva [expr $YMax + $EcartY] } } } set TSSLoc [PromAnPanel ask $FilePromAn ResultType "GenomicSequence" Method "GenomicSequence" n 1 TSSLoc] if {$TSSLoc != ""} { set XLine [expr $TSSLoc * $FacteurX + $BordGaucheX] set YLineMin $BordY set YLineMax $HauteurCanva set ColorFill "yellow" set ColorLine "yellow" #set ColorFill "#3d70b1688624" #set ColorLine "#3d70b1688624" set LesTags [list "LineTSS"] lappend LesFormesAPlacer [list line $XLine $YLineMin $XLine $YLineMax $ColorFill $ColorLine $LesTags dash] set Text "TSS" set LesTags {} lappend LesFormesAPlacer [list text $XLine $YLineMin "s" $Text $LesTags $ColorFill "courier 12 bold"] } set HauteurCanva [expr $HauteurCanva + $BordY] if {$w == "."} {set w ""} set FrameGeneral "${w}.frame" set FrameCanva "$FrameGeneral.framecanva" set BoutonClose "${w}.boutonclose" set BoutonNew "${w}.boutonnew" if {$w == ""} {set w "."} ############################################################# frame $FrameGeneral frame $FrameCanva button $BoutonClose -borderwidth 1 -text "Close" button $BoutonNew -borderwidth 1 -text "New PromAn Project" ###################################################################### pack $FrameGeneral -side top -fill both -expand 1 pack $FrameCanva -side top -fill both -expand 1 pack $BoutonClose -side left -fill x -expand 1 pack $BoutonNew -side left -fill x -expand 1 $BoutonNew configure -command "PromAn_GUI" $BoutonClose configure -command "PromAn_GUI $FilePromAn $w exit" if {$HauteurCanva < $HauteurFenetre} {set HauteurFenetre $HauteurCanva} set KCanva [Canva $LargeurCanva $HauteurCanva $LargeurFenetre $HauteurFenetre "NoY" "PromAn View" "" $FrameCanva] $KCanva configure -background lightgrey set i 0 foreach LaForme $LesFormesAPlacer { #Espionne $LaForme set Forme [lindex $LaForme 0] set XMin [lindex $LaForme 1] set YMin [lindex $LaForme 2] if {$Forme == "text"} { set Anch [lindex $LaForme 3] set Text [lindex $LaForme 4] set LesTags [lindex $LaForme 5] set Color [lindex $LaForme 6] set Police [lindex $LaForme 7] if {$Color == ""} {set Color "black" } if {$Police == ""} {set Police "courier 10"} $KCanva create text $XMin $YMin -text $Text -anchor $Anch -fill $Color -font $Police -tags $LesTags continue } set XMax [lindex $LaForme 3] set YMax [lindex $LaForme 4] set Color [lindex $LaForme 5] if {$Forme == "rectangle"} { set COutLine [lindex $LaForme 6] set LesTags [lindex $LaForme 7] set Ou [lindex $LaForme 8] set Id [$KCanva create rectangle $XMin $YMin $XMax $YMax -fill $Color -outline $COutLine -tags $LesTags] if {$Ou == "back"} {$KCanva lower $Id} continue } if {$Forme == "line"} { set LesTags [lindex $LaForme 7] if {[lindex $LaForme 8] == "dash"} { $KCanva create line $XMin $YMin $XMax $YMax -tags $LesTags -fill $Color -width 2 -dash {1 1} } else { $KCanva create line $XMin $YMin $XMax $YMax -tags $LesTags -fill $Color -width 2 } continue } } set IdLineTSS [$KCanva find withtag "LineTSS"] $KCanva lower $IdLineTSS set IdGenomicSequence [$KCanva find withtag "GenomicSequence"] $KCanva lower $IdGenomicSequence PromAnPanel unset $KCanva bind "Sequence" <1> "TraceLesAxesDePositionPourPromAn $KCanva %x %y" return } proc PromobiToNm {Path} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : Start" set FichierPromobi [open "$Path.promobi" "r"] set FichierDesAccess [open "$Path.acc" "w"] set Compteur 0 while { [gets $FichierPromobi Ligne] >=0 } { incr Compteur ScanLaListe $Ligne ID Chromosome Start End Distance NM1 NM2 puts $FichierDesAccess "$Distance $NM1" puts $FichierDesAccess "$Distance $NM2" } close $FichierPromobi close $FichierDesAccess set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|NmToBlastP : End ($Compteur I/O)" } proc PropaDomainWithinGroup {n g ft df ff} { global CpB Sequences set pccover 0 foreach b $CpB(LcBck) { lassign $b db fb code if {[set lg [BlockOverlap $db $fb $df $ff]] >= 0} { incr pccover $lg } } foreach ccb $CpB(CcBck) { if {$g in [lindex $ccb 0]} { lassign $ccb Lgs dcc fcc ccode if {[set lg [BlockOverlap $dcc $fcc $df $ff]] >= 0} { incr pccover $lg } } } set pccover [expr {100.*$pccover/($ff - $df + 1)}] set seq1 [set Sequences($n)] foreach sq [set CpB($g)] { if {$n eq $sq} {continue} # propagate if more than 40% of domain is in # local core blocks, or 2 sequences share # more than 40% identity */ set l 0 ; set nbr 0 for {set i $df} {$i <= $ff} {incr i} { if {[set c [string index $seq1 $i]] ne "."} { incr n if {$c eq [string index [set Sequences($sq)] $i]} { incr l } } set l [expr {100.*$l/$n}] if {($pccover > 40. && $l > 20) || [set TPCICB($n,$sq)] > 80 || $l > 50} { switch $type { "PROSITE" { puts "$n $sq $note $pccover [set TPCICB($n,$sq)] $l" if {$l > 30} { PropagateFeat $sq $ft } } "SITE" { set found [CheckSiteFeat $n $sq $ft] if {$found} { PropagateFeat $sq $ft } } "STRUCT" { if {$l > 30} { PropagateFeat $sq $ft } } "PFAM-A" - "PFAM-B" - "DOMAIN" { if {$l > 20} { PropagateFeat $sq $ft } } default { if {$l > 40} { PropagateFeat $sq $ft } } } } } } return } proc PropaShortWithinGroup {n g ft df ff} { global CpB Sequences set pccover 0 foreach b $CpB(LcBck) { lassign $b db fb code if {[set lg [BlockOverlap $db $fb $df $ff]] >= 0} { incr pccover $lg } } foreach ccb $CpB(CcBck) { if {$g in [lindex $ccb 0]} { lassign $ccb Lgs dcc fcc ccode if {[set lg [BlockOverlap $dcc $fcc $df $ff]] >= 0} { incr pccover $lg } } } set pccover [expr {100.*$pccover/($ff - $df + 1)}] set seq1 [set Sequences($n)] foreach sq [set CpB($g)] { if {$n eq $sq} {continue} # propagate if more than 90% of domain is in # local core blocks, or 2 sequences share # more than 40% identity */ set l 0 ; set nbr 0 for {set i $df} {$i <= $ff} {incr i} { if {[set c [string index $seq1 $i]] ne "."} { incr n if {$c eq [string index [set Sequences($sq)] $i]} { incr l } } set l [expr {100.*$l/$n}] if {$pccover > 70. || [set TPCICB($n,$sq)] > 80 || $l > 50} { switch $type { "SITE" { set found [CheckSiteFeat $n $sq $ft] if {$found} { PropagateFeat $sq $ft } } "STRUCT" { if {$l > 30} { PropagateFeat $sq $ft } } "PFAM-A" - "PFAM-B" - "DOMAIN" - "PROSITE" { if {$l > 20} { PropagateFeat $sq $ft } } default { if {$l > 40} { PropagateFeat $sq $ft } } } } } } return } proc PropaSiteBetweenGroups {n g ft d f} { global CpB lassign $ft tm type tm deb tm fin tm col tm score tm note lassign [set CpB(startstop,$n)] ds fs set found 0 foreach ccb $CpB(CcBck) { lassign $bcc Lgs dcc fcc ccode if {$g in $Lgs} { if {[BlockOverlap $dcc $fcc $df $ff] >= 0} { set found 1 set boncc $ccb break } } if {$found} {break} } # propagate single residue sites only if the # residue is identical if {! $found} {return} lassign $boncc Lgs dcc fcc score foreach gr [lrange $CpB(LNDG) 1 end] { if {$gr eq $g} {continue} if {$gr in $Lgs} { foreach seq [set CpB($gr)] { if {$type eq "STRUCT"} { PropagateFeat $seq $ft } else { # don't propagate sites on # n/c-ter between groups */ if {$ds == $deb || $fs == $fin} { continue } set found [CheckSiteFeat $n $seq $ft] if {$found} { PropagateFeat $seq $ft } } } } } return } proc PropaSiteWithinGroup {n g ft df ff} { global CpB set nft [lindex $ft 1] set dft [lindex $ft 3] set fft [lindex $ft 5] lassign [set CpB(startstop,$n)] deb fin set found 0 foreach b $CpB(LcBck) { lassign $b db fb code if {[BlockOverlap $db $fb $df $ff] >= 1} { set found 1 break } } if {! $found} { foreach bcc $CpB(CcBck) { lassign $bcc Lgs dcc fcc ccode if {$g in $Lgs} { if {[BlockOverlap $dcc $fcc $df $ff] >= 0} { set found 1 break } } if {$found} {break} } } # propagate short residue sites only if # the residue is identical */ foreach sq [set CpB($g)] { if {$found || $TPCICB($sq,$n) > 80.} { if {$sq ne $n} { if {$nft eq "STRUCT"} { PropagateFeat $sq $ft } else { # if site to be propagated is on # n/c-ter and does not match # n/c-ter in new sequence, # continue lassign [set CpB(startstop,$sq)] dsq fsq if {($dft == $deb && $dft != $dsq) || ($fft == $fin && $fsq != $fin)} {continue} set found [CheckSiteFeat $n $sq $ft] if {$found} { PropagateFeat $sq $ft } } } } } return } proc PropagateDomainBetweenGroups {n g ft d f} { global CpB Sequences set sqn [set Sequences($n)] set nft [lindex $ft 1] set dft [lindex $ft 3] set fft [lindex $ft 5] lassign [set CpB(startstop,$n)] deb fin foreach gr [lrange $CpB(LNDG) 1 end] { set cov($gr) 0 } foreach ccb $CpB(CcBck) { lassign $ccb Lgs dcc fcc cccode if {$g ni $Lgs} {continue} # if the conserved core block overlaps the # domain .... */ if {[BlockOverlap $dcc $fcc $dft $fft] >=0} { foreach gr [lrange $CpB(LNDG) 1 end] { if {$gr in $Lgs} { set sq0 [lindex [set CpB($gr)] 0] set s1 [DonnePosGS $sq0 $dcc] set e1 [DonnePosGS $sq0 $fcc] set s2 [DonnePosGS $sq0 $dft] set e2 [DonnePosGS $sq0 $fft] if {[set l [BlockOverlap $s1 $e1 $s2 $e2]] >=0} { set cov($gr) [expr {[set cov($gr)]+$l}] } } } } } # propagate if more than 40% of domain is in # shared core blocks set dr [DonnePosGS $n $dft] set fr [DonnePosGS $n $fft] foreach gr [lrange $CpB(LNDG) 1 end] { if {$gr eq $g} {continue} set pccover [expr {100.0*[set cov($gr)]/($fr-$dr+1)}] foreach sq [set CpB($gr)] { if {$pccover > 70 || [set TPCICB($n,$sq)] > 80} { set sqs [set Sequences($sq)] set l 0 ; set nb 0 for {set kk $dft} {$kk <= $fft} {incr kk} { if {[string index $sqn $kk] ne "." || [string index $sqs $kk] ne "."} { incr n if {[string index $sqn $kk] eq [string index $sqs $kk]} { incr l } } } set l [expr {$l*100.0/$n}] if {($pccover > 40 && $l > 20) || [set TPCICB($n,$sq)] > 80 || $l > 60} { set l 0 ; set nb 0 for {set kk $dft} {$kk <= $fft} {incr kk} { if {[string index $sqn $kk] ne "."} { incr n if {[string index $sqn $kk] eq [string index $sqs $kk]} { incr l } } } set l [expr {$l*100.0/$n}] if {$nft eq "PROSITE"} { if {$l > 30} { PropagateFeat $sq $ft } } elseif {$nft eq "SITE"} { set found [CheckSiteFeat $n $sq $ft] if {$found} { PropagateFeat $sq $ft } } elseif {$nft eq "STRUCT"} { PropagateFeat $sq $ft } elseif {$nft in [list PFAM-A PFAM-B DOMAIN]} { if {$l > 20} { PropagateFeat $sq $ft } } elseif {$l > 40} { PropagateFeat $sq $ft } } } } } return } proc PropagateFeat {n2 ft} { global CpB lassign [set CpB(startstop,$n2)] d2 f2 lassign $ft tm type tm fdeb tm ffin tm col tm score tm note set seq2 [set Sequences($n2)] if {$fdeb > $f2 || $ffin < $d2} {return} if {$fdeb < $d2} {set fdeb $d2} if {$ffin > $f2} {set ffin $f2} while {[string index $seq2 $fdeb] eq "."} { incr fdeb } while {[string index $seq2 $ffin] eq "."} { incr ffin -1 } if {$ffin < $fdeb} {return} set fdres [DonnePosGS $n2 $fdeb] set ffres [DonnePosGS $n2 $ffin] set lg [expr {$ffres - $fdres + 1}] # check that the feat does not exist already foreach nf [set CpB(tb,$n2)] { lassign $nf tm type2 tm fdeb2 tm ffin2 tm col2 tm score2 tm note2 set fd2 [DonnePosGS $n2 $fdeb2] set ff2 [DonnePosGS $n2 $ffin2] if {[BlockOverlap $fdres $ffres $fd2 $ff2] >= (1.0*$lg/4.0)} { if {[regexp {^PROP\_|^PRED\_} $note2]} { set nwnote [string range $note2 5 end] } } else { set nwnote $note2 } if {$nwnote eq $note} { return } } # Ok , create the feature set nw [list ftype $type fstart $fdeb fstop $ffin fcolor $col fscore $score fnote "PROP_$note_from_$n1"] lappend CpB(tp,$n2) $nw return } proc PropagateFeatBetweenGroup {n g} { global CpB foreach ft [set CpB(tb,$n)] { set name [lindex $ft 1] if {$name ni [list SWDOMAIN SIGNAL REPEAT STRUCT PFAM-A PFAM-B PROSITE SITE MODRES]} { continue } set note [lindex $ft end] if {[regexp {^PRED\_|^WARN\_|^ERROR\_|^PROP\_} $note]} {continue} set d [lindex $ft 3] set f [lindex $ft 5] set dr [DonnePosGS $n $d] set fr [DonnePosGS $n $f] set len [expr {$fr-$dr+1}] if {$len <= 3} { PropaSiteBetweenGroups $n $g $ft $d $f } elseif {$len <= 15} { PropaShortBetweenGroups $n $g $ft $d $f } else { PropaDomainBetweenGroups $n $g $ft $d $f } } return } proc PropagateFeatBetweenSimilarSeq {n g} { global CpB return } proc PropagateFeatWithinGroup {n g} { global CpB foreach ft [set CpB(tb,$n)] { set name [lindex $ft 1] if {$name ni [list SWDOMAIN SIGNAL REPEAT STRUCT PFAM-A PFAM-B PROSITE SITE MODRES]} { continue } set note [lindex $ft end] if {[regexp {^PRED\_|^WARN\_|^ERROR\_|^PROP\_} $note]} {continue} set d [lindex $ft 3] set f [lindex $ft 5] set dr [DonnePosGS $n $d] set fr [DonnePosGS $n $f] set len [expr {$fr-$dr+1}] if {$len <= 3} { PropaSiteWithinGroup $n $g $ft $d $f } elseif {$len <= 15} { PropaShortWithinGroup $n $g $ft $d $f } else { PropaDomainWithinGroup $n $g $ft $d $f } } return } proc PropagateFeatures {} { global TPCICB foreach g $CpB(LNDG) { foreach b [set CpB(LcBck,$g)] { lassign $b db fb code foreach n [set CpB($g)] { set found 0 foreach err [set SeqErr($n)] { lassign $err dg fg ds fs if {[BlockOverlap $db $fb $dg $fg] >=1} { set found 1 break } } if {! $found} { if {$fb > $db} { AddNewFeatEntry $n $db $fb $code BLOCK LBLOCK 0.0 } } } } } # Traite chared blocks set n 0 foreach shb $CpB(ShBck) { lassign $shb g1 g2 db fb score set found 0 for {set j 0} {$j < $n} {incr j} { set found1 0 ; set found2 0 set ccb [lindex $CpB(CcBck) $j] lassign $ccb Lgs dcc fcc cccode if {[BlockOverlap $db $fb $dcc $fcc] >= 4} { set s [expr {max($db,$dcc)}] set e [expr {min($fb,$fcc)}] if {$g1 in $Lgs} { set g $g2 set found1 1 set found 1 } if {$g2 in $Lgs} { set g $g1 set found2 1 set found 1 } if {($found1 && ! $found2) || ($found2 && ! $found1)} { if {[set len [BlockOverlap $db $fb $dcc $fcc]] >= 4} { if {($s - $dcc) > 5} { puts "need ccblock $dcc $s" lset ccb 2 $s lappend CpB(CcBck) $ccb incr n } set dcc $s if {($fcc-$e) > 5} { puts "need ccblock $e $dcc" lset ccb 1 $e lappend CpB(CcBck) $ccb incr n } set fcc $e if {$g eq $g1} { set sco $score } else { set sco $score } lappend Lgs $g $sco lset ccb 0 $Lgs lset CpB(CcBck) $j $ccb } else { lassign $shb g1 g2 db fb score lappend CpB(CcBck) [list [list $g1 $score $g2 $score] $db $fb $code] puts "new block $code $db $fb $g1 $g2" incr n set found 0 } update } } } if {! $found} { lassign $shb g1 g2 db fb score lappend CpB(CcBck) [list [list $g1 $score $g2 $score] $db $fb $code] puts "new block $code $db $fb $g1 $g2" incr n } update } set i 0 foreach cc $CpB(CcBck) { lset CpB(CcBck) $i 3 $i incr i } foreach ccb $CpB(CcBck) { lassign $ccb Lgs dcc fcc ccode foreach {gc sc} $Lgs { foreach n [set CpB($gc)] { set found 0 foreach sqe [set SeqErr($n)] { lassign $sqe de fe dr fr if {[BlockOverlap $dcc $fcc $de $fe] >= 1} { set found 1 break } } if {! $found} { if {$fcc > $dcc} { AddNewFeatEntry $n $dcc $fcc $ccode BLOCK SBLOCK $sc } } } } } foreach g [lrange $CpB(LNDG) 1 end] { foreach n [set CpB($g)] { foreach ccb $CpB(CcBck) { lassign $ccb Lgs dcc fcc ccode if {$g in $Lgs} { continue } set found 0 foreach {gc sc} $Lgs { foreach ns [set CpB($gc)] { set pci [PCISegment $n $ns $dcc $fcc] if {$pci > 90} { AddNewFeatEntry $n $dcc $fcc $ccode BLOCK SBLOCK [expr {int($sc/10000.0)}] puts "addnew block $n [string range $gc 5 end] $dcc $fcc $pci" set found 1 break } if {$found} {break} } } } } } # features SEQERR foreach n [array names SeqErr] { foreach sqe [set SeqErr($n)] { lassign $sqe dg fg ds fs AddNewFeatEntry $n $dg $fg 0 SEQERR SEQERR 0.0 } } # Calcule PCI sans gaps foreach n $::LNOrdali s $::LSOrdali { if {$n eq ""} {continue} lappend LNom $n lappend LSeq $s } set Lpci [Ccode_Pairwise2 $LSeq] set i 0 foreach n1 $LNom { foreach n2 $LNom { set TPCICB($n1,$n2) [lindex $Lpci $i] incr i } } # propagate the feature within a group, # if 2 sequences are >40% identical in the domain # or local core blocks exist */ foreach g [lrange $CpB(LNDG) 1 end] { if {[llength [set CpB($g)]] <= 1} { continue } foreach n [set CpB($g)] { PropagateFeattWithinGroup $n $g } } # also propagate the feature if shared core # blocks are found between 2 groups foreach g [lrange $CpB(LNDG) 1 end] { if {[llength [set CpB($g)]] < 1} {continue} foreach n [set CpB($g)] { PropagateFeattBetweenGroup $n $g } } # final check foreach n1 $CpB(GroupeToutLeMonde) { foreach n2 $CpB(GroupeToutLeMonde) { if {$n1 eq $n2} {continue} } } return } proc PropagateShortBetweenGroups {n g ft d f} { global CpB Sequences set sqn [set Sequences($n)] set nft [lindex $ft 1] set dft [lindex $ft 3] set fft [lindex $ft 5] lassign [set CpB(startstop,$n)] deb fin foreach gr [lrange $CpB(LNDG) 1 end] { set cov($gr) 0 } foreach ccb $CpB(CcBck) { lassign $ccb Lgs dcc fcc cccode if {$g ni $Lgs} {continue} # if the conserved core block overlaps the # domain .... */ if {[BlockOverlap $dcc $fcc $dft $fft] >=0} { foreach gr [lrange $CpB(LNDG) 1 end] { if {$gr in $Lgs} { set sq0 [lindex [set CpB($gr)] 0] set s1 [DonnePosGS $sq0 $dcc] set e1 [DonnePosGS $sq0 $fcc] set s2 [DonnePosGS $sq0 $dft] set e2 [DonnePosGS $sq0 $fft] if {[set l [BlockOverlap $s1 $e1 $s2 $e2]] >=0} { set cov($gr) [expr {[set cov($gr)]+$l}] } } } } } # propagate if more than 100% of domain is in # shared core blocks set dr [DonnePosGS $n $dft] set fr [DonnePosGS $n $fft] foreach gr [lrange $CpB(LNDG) 1 end] { if {$gr eq $g} {continue} set pccover [expr {100.0*[set cov($gr)]/($fr-$dr+1)}] foreach sq [set CpB($gr)] { if {$pccover > 70 || [set TPCICB($n,$sq)] > 80} { set sqs [set Sequences($sq)] set l 0 ; set nb 0 for {set kk $dft} {$kk <= $fft} {incr kk} { if {[string index $sqn $kk] ne "."} { incr n if {[string index $sqn $kk] eq [string index $sqs $kk]} { incr l } } } set l [expr {$l*100.0/$n}] if {$nft eq "SITE"} { set found [CheckSiteFeat $n $sq $ft] if {$found} { PropagateFeat $sq $ft } } elseif {$nft eq "STRUCT"} { PropagateFeat $sq $ft } elseif {$nft in [list PFAM-A PFAM-B DOMAIN PROSITE]} { if {$l > 20} { PropagateFeat $sq $ft } } elseif {$l > 40} { PropagateFeat $sq $ft } } } } return } proc Proprio {{Qui ""} {Quoi ""}} { global Proprio if {[info exists Proprio($Qui,$Quoi)]} { return $Proprio($Qui,$Quoi) } if {[info exists Proprio("EstCharge")]} { return "" } set Proprio("EstCharge") 1 foreach Ligne [LesLignesDuFichier "/gstock/LogsRsync/proprios.txt"] { regsub -all {[ \t]+} $Ligne " " Ligne if { ! [regexp "^d" $Ligne]} { continue } if { ! [regexp { /data[0-9]+/g[0-9]+} $Ligne]} { continue } set LesMots [split $Ligne " "] set O [lindex $LesMots 2] set R [lindex $LesMots 7] lappend Proprio(ListOf,O) $O lappend Proprio(ListOf,R) $R lappend Proprio(RepFrom,$O) $R set Proprio(OwnerOf,$R) $O } set Proprio(ListOf,O) [lsort -unique $Proprio(ListOf,O)] foreach O $Proprio(ListOf,O) { lappend Proprio(Count,All) "[format %3d [llength $Proprio(RepFrom,$O)]] $O" } return [Proprio $Qui $Quoi] } proc PrositeWebService {args} { # see : # http://prosite.expasy.org/scanprosite/scanprosite_doc.html # for information # if {[llength $args] == 0 || [regexp -nocase "help" $args]} { PrositeWebServiceHelp return } if {([llength $args] % 2)} { puts "Wrong number of arguments !\nShould be key-value pairs or 'help'" return } # re-order args. puts '-seq' or '-sig' first foreach key {"-seq" "-sig"} { if {[set ix [lsearch $args $key]] > -1} { set val [lindex $args $ix+1] set args [lreplace $args $ix $ix+1] set args [linsert $args 0 $key $val] } } set Lquery [list] set YaSeq 0 ; set YaDB 0 ; set yaSig 0 ; set YaOutput 0 foreach {key value} $args { switch $key { "-seq" { if {[string is list $value]} { set value [join $value "\n"] } lappend Lquery seq $value set YaSeq 1 } "-sig" { if {[string is list $value]} { set value [join $value ,] } lappend Lquery sig $value set yaSig 1 } "-output" { set value [string tolower $value] if {0 && $value ni {"xml" "json" "txt"}} { puts "Bad output value !\nShould be XML, JSON or TXT" return } lappend Lquery output $value set YaOutput 1 } "-db" { set value [string tolower $value] if {$value ni {"tr" "pdb" "sp"}} { puts "\nBad value for 'db'nShould be one of 'sp', 'tr' or 'pdb'. you can specify more than one database by assigning several 'db' keys" return } lappend Lquery db $value set YaDB 1 lappend dbs $value } "-varsplit" { if {! $YaDB} { continue } if {'sp' ni $dbs || 'tr' ni $dbs} { continue } if {! [string is boolean $value]} { puts "\nBad value for -varsplic option.\nMust be a boolean" return } lappend Lquery varsplic $value } "-lineage" { if {! $YaDB} { continue } if {'sp' ni $dbs || 'tr' ni $dbs} { continue } if {[string is list $value]} { set value [join $value ;] } lappend Lquery lineage $value } "-skip" { if {$YaSeq && ! $YaSig} { if {! [string is boolean $value]} { puts "Bad value for -skip option !\nShould be a boolean" return } lappend Lquery skip $value } } "-noprofile" { if {$YaSeq && ! $YaSig} { if {! [string is boolean $value]} { puts "Bad value for -noprofile option !\nShould be a boolean" return } lappend Lquery noprofile $value } } "-max_x" { if {$YaSig} { if {! [string is integer $value] || $value == 0} { puts "Bad value ofr -max_x option.\nShould be an integer > 0" return } } } "-lowscore" { if {! [string is boolean $value]} { puts "Bad value for -lowscore option.\nShould be a boolean." return } lappend Lquery lowscore $value } "-minhits" { if {$YaSig && $YaDB} { if {! [string is integer $value] || $value == 0} { puts "Bad value for -minhits option\nShould be integer > 0" return } lappend Lquery minhits $value } } } } # check incompatibilites if {$YaSeq && $YaDB} { puts "\nYou can't specify both 'seq' and 'db'" return } if {! $YaOutput} { lappend Lquery output json } set query [http::formatQuery {*}$Lquery] #puts "Query\n$que" set url "http://prosite.expasy.org/cgi-bin/prosite/PSScan.cgi" set result [HttpCopy $url "" $query] #puts "$result" return $result } proc PrositeWebServiceHelp {} { puts "\nAllowed parameters :" puts "--------------------" puts "\n -seq :" puts "\t Sequence(s) to be scanned: UniProtKB accessions e.g. P98073 or identifiers e.g. ENTK_HUMAN or PDB identifiers e.g. 4DGJ or sequences in FASTA format or UniProtKB/Swiss-Prot format." puts "\n -sig :" puts "\t Motif(s) to scan against: PROSITE accession e.g. PS50240 or identifier e.g. TRYPSIN_DOM or your own pattern e.g. P-x(2)-G-E-S-G(2)-\[AS\]." puts "\t Default : all PROSITE motifs are used." puts "\n -db :" puts "\t Target protein database for scans of motifs against whole protein databases: 'sp' (UniProtKB/Swiss-Prot) or 'tr' (UniProtKB/TrEMBL) or 'pdb' (PDB)." puts "\t Only work if 'seq' is not defined. Parameter can be repeated; 1 target db by 'db' parameter." puts "\n -varsplic :" puts "\t If true (defined, non empty, non zero): includes UniProtKB/Swiss-Prot splice variants." puts "\t Only works on scans against UniProtKB/Swiss-Prot." puts "\n -lineage :" puts "\t Any taxonomical term e.g. 'Homo sapiens', e.g. 'Fungi; Arthropoda' or corresponding NCBI TaxID e.g. 9606, e.g. '4751; 6656'" puts "\t Separate multiple terms with a semicolon." puts "\t Only works on scans against UniProtKB/Swiss-Prot and UniProtKB/TrEMBL." puts "\n -description :" puts "\t Description (DE) filter: e.g. protease." puts "\t Only works on scans against UniProtKB/Swiss-Prot and UniProtKB/TrEMBL." puts "\n -max_x :" puts "\t Number of X characters in a scanned sequence that can be matched by a conserved position in a pattern." puts "\t Only works if 'sig' is defined, i.e. on scans of specific sequences/protein database(s) against specific motif(s)." puts "\t Only works on scans against patterns." puts "\n -output :" puts "\t Output format: 'xml' or 'json' (or 'txt')" puts "\n -skip :" puts "\t If true (defined, non empty, non zero): excludes motifs with a high probability of occurrence." puts "\t Default: ON." puts "\t Only works if 'seq' is defined and 'sig' is not defined, i.e. on scans of specific sequence(s) against all PROSITE motifs." puts "\n -lowscore :" puts "\t If true (defined, non empty, non zero): shows matches with low level scores." puts "\t Default: OFF." puts "\t Only works with PROSITE profiles." puts "\n -noprofile :" puts "\t If true (defined, non empty, non zero): does not scan against profiles." puts "\t Only works if 'seq' is defined and 'sig' is not defined, i.e. on scans of specific sequence(s) against all PROSITE motifs." puts "\n -minhits :" puts "\t Mimimal number of hits per matched sequences." puts "\t Only works if 'sig' and 'db' are defined, i.e. on scans of protein database(s) against specific motif(s)." exit } proc ProtAndmRNA {Nom {IdMin 0.8} {IdMax 0.95} {ExpectMax 0.001} {NbSubjectMax 500}} { set RepOut "[RepertoireDuGenome]/ProtAndmRNA" if {![file exists $RepOut]} {File mkdir $RepOut} set FileOut "$RepOut/$Nom" set FBmRNA "[RepertoireDuGenome]/blastnmrna/$Nom" if {![file exists $FBmRNA]} {return} set FBProt "[RepertoireDuGenome]/blastx/$Nom" if {![file exists $FBProt]} {return} set FNucTFA "[RepertoireDuGenome]/nuctfa/$Nom" set OrgaDeRef [OrganismeDuPAB $Nom] AskBlast unset Espionne "$Nom -> Prot. extraction" set LesProteinesBrutes [LesProteinesDuBlast $FBProt $ExpectMax $NbSubjectMax] Espionne "$Nom -> mRNA extraction" set LesmRNAsBruts [LesmRNAsDuBlast $FBmRNA $ExpectMax $NbSubjectMax] AskBlast unset set LesmRNAs {} set LesProteines {} set LesCandidatsTmp {} ###Elimine les mRNAs et les proteines identiques############################################# ###Elimine les mRNAs codant pour les memes proteines et ceux references par la meme proteine### foreach LemRNA $LesmRNAsBruts { set Access [lindex $LemRNA 1 ] set Orga [lindex $LemRNA 12] if {[info exists TabTmp($Orga,$Access)]} {continue} set TabTmp($Orga,$Access) 1 set LesProtsDumRNA [lindex $LemRNA 14] set LesProteinesEquivalentes $LesProtsDumRNA set LesmRNAsEquivalents $Access foreach UnAutremRNA $LesmRNAsBruts { set Orga2 [lindex $UnAutremRNA 12 ] set Access2 [lindex $UnAutremRNA 1 ] if {![string equal -nocase $Orga $Orga2] || [string equal -nocase $Access $Access2]} {continue} set AiJeUneProtEnCommun 0 foreach Prot2 [lindex $UnAutremRNA 14] { foreach Prot $LesProtsDumRNA {if {$Prot == $Prot2} {set AiJeUneProtEnCommun 1;break}} if {$AiJeUneProtEnCommun} {break} } if {!$AiJeUneProtEnCommun} {continue} lappend LesmRNAsEquivalents $Access2 set TabTmp($Orga,$Access2) 1 foreach Prot2 [lindex $UnAutremRNA 14] {lappend LesProteinesEquivalentes $Prot2} } foreach UneProteine $LesProteinesBrutes { set Orga2 [lindex $UneProteine 12] if {$Orga2 != $Orga} {continue} set Access2 [lindex $UneProteine 1 ] set SuisJeUnDeSesmRNAs 0 foreach mRNA2 [lindex $UneProteine 14] {if {$mRNA2 == $Access} {set SuisJeUnDeSesmRNAs 1;break}} if {!$SuisJeUnDeSesmRNAs} {continue} lappend LesProteinesEquivalentes $Access2 foreach mRNA2 [lindex $UneProteine 14] { lappend LesmRNAsEquivalents $mRNA2 set TabTmp($Orga,$mRNA2) 1 } } set LemRNA [lreplace $LemRNA 14 14 [ElimineLesRedondancesDansUneListe $LesProteinesEquivalentes]] set LemRNA [lreplace $LemRNA 1 1 [ElimineLesRedondancesDansUneListe $LesmRNAsEquivalents ]] lappend LesmRNAs $LemRNA lappend LesCandidatsTmp $LemRNA } ###Elimine les Proteines codees par les memes mRNAs et celles referencees par le meme mRNA### foreach LaProt $LesProteinesBrutes { set Access [lindex $LaProt 1 ] set Orga [lindex $LaProt 12 ] if {[info exists TabTmp($Orga,$Access)]} {continue} set TabTmp($Orga,$Access) 1 set LesmRNAsDeLaProt [lindex $LaProt 14] set LesmRNAsEquivalents $LesmRNAsDeLaProt set LesProteinesEquivalentes $Access foreach UneAutreProt $LesProteinesBrutes { set Orga2 [lindex $UneAutreProt 12] set Access2 [lindex $UneAutreProt 1 ] if {$Orga != $Orga2 || $Access == $Access2} {continue} set AiJeUnmRNAEnCommun 0 foreach mRNA2 [lindex $UneAutreProt 14] { foreach mRNA $LesmRNAsDeLaProt {if {$mRNA == $mRNA2} {set AiJeUnmRNAEnCommun 1;break}} if {$AiJeUnmRNAEnCommun} {break} } if {!$AiJeUnmRNAEnCommun} {continue} lappend LesProteinesEquivalentes $Access2 set TabTmp($Orga,$Access2) 1 foreach mRNA2 [lindex $UneAutreProt 14] {lappend LesmRNAsEquivalents $mRNA2} } foreach UnmRNA $LesmRNAsBruts { set Orga2 [lindex $UnmRNA 12] if {$Orga2 != $Orga} {continue} set Access2 [lindex $UnmRNA 1 ] set SuisJeUneDeSesProteines 0 foreach Prot2 [lindex $UnmRNA 14] {if {$Prot2 == $Access} {set SuisJeUneDeSesProteines 1;break}} if {!$SuisJeUneDeSesProteines} {continue} lappend LesmRNAsEquivalents $Access2 foreach Prot2 [lindex $UnmRNA 14] { lappend LesProteinesEquivalentes $Prot2 set TabTmp($Orga,$Prot2) 1 } } set LaProt [lreplace $LaProt 14 14 [ElimineLesRedondancesDansUneListe $LesmRNAsEquivalents ]] set LaProt [lreplace $LaProt 1 1 [ElimineLesRedondancesDansUneListe $LesProteinesEquivalentes]] lappend LesProteines $LaProt lappend LesCandidatsTmp $LaProt } ###################################################################################################### #########Elimination des proteines ou des mRNAs homologues ######################### set LesCandidatsTmp [lsort -integer -decreasing -index 10 $LesCandidatsTmp] set LesCandidatsTmp [lsort -real -decreasing -index 7 $LesCandidatsTmp] set LesCandidatsTmp [lsort -integer -decreasing -index 8 $LesCandidatsTmp] if {[info exists TabTmp]} {unset TabTmp} set LesCandidats {} foreach LeCandidat $LesCandidatsTmp { set Orga [lindex $LeCandidat 12] set LesAccess [lindex $LeCandidat 1] set EnAiJeDejaVuUn 0 foreach Access $LesAccess { if {![info exists TabTmp($Orga,$Access)]} {set TabTmp($Orga,$Access) 1;continue} set EnAiJeDejaVuUn 1;break } if {$EnAiJeDejaVuUn} {continue} set EnAiJeDejaVuUn 0 foreach Ref [lindex $LeCandidat 14] { if {![info exists TabTmp($Orga,$Ref)]} {set TabTmp($Orga,$Ref) 1;continue} set EnAiJeDejaVuUn 1;break } if {$EnAiJeDejaVuUn} {continue} lappend LesCandidats $LeCandidat } if {[info exists TabTmp]} {unset TabTmp} ############################################################################### #######PRESENTATION DU FICHIER################################################# set LeTexte "" set Taille [TailleDeLaSequenceDuFichierTFA $FNucTFA] lappend LeTexte "Box: $Nom" lappend LeTexte "LengthBox: $Taille" PourcentagesDeMasking Repeat $Nom if {[info exists Repeat(Masking)] } { lappend LeTexte "Masking: [set Repeat(Masking)]"} if {[info exists Repeat(ReMasking)]} { lappend LeTexte "ReMasking: [set Repeat(ReMasking)]" } if {[info exists Repeat(MRM)] } { lappend LeTexte "MRM: [set Repeat(MRM)]" } if {[info exists Repeat]} {unset Repeat} set i 0 foreach LeCandidat $LesCandidats { incr i set BId [lindex $LeCandidat 0 ] set LesAccess [lindex $LeCandidat 1 ] set Taille [lindex $LeCandidat 2 ] set TailleCDS [lindex $LeCandidat 3 ] set Sens [lindex $LeCandidat 4 ] set Expect [lindex $LeCandidat 5 ] set Score [lindex $LeCandidat 6 ] set Id [lindex $LeCandidat 7 ] set Nb [lindex $LeCandidat 8 ] set NbIn5UTR [lindex $LeCandidat 9 ] set NbInCDS [lindex $LeCandidat 10 ] set NbIn3UTR [lindex $LeCandidat 11 ] set Orga [lindex $LeCandidat 12 ] set Def [lindex $LeCandidat 13 ] set LesRefs [lindex $LeCandidat 14 ] set QuiSuisJe [lindex $LeCandidat end] set EstCeNotreOrga 0 set EstCeUnParalogue 0 set SuisJeDansLeCDS 0 set LesRefsAbsentes {} set LesAccessAbsents {} if {$Orga == $OrgaDeRef} {set EstCeNotreOrga 1 } if {$EstCeNotreOrga } {set IdDeRef $IdMax} else {set IdDeRef $IdMin} if {$Id < $IdDeRef } {set EstCeUnParalogue 1 } if {$NbInCDS != 0 } {set SuisJeDansLeCDS 1 } if {$QuiSuisJe == "PROTEIN"} { set AutreType "mRNA" ;set LesAutres $LesmRNAsBruts ;set LesMemes $LesProteinesBrutes } else { set AutreType "PROTEIN";set LesAutres $LesProteinesBrutes;set LesMemes $LesmRNAsBruts } foreach Ref $LesRefs { set LAiJeVu 0 foreach UnAutre $LesAutres { if {$Orga != [lindex $UnAutre 12]} {continue} if {$Ref == [lindex $UnAutre 1 ]} {set LAiJeVu 1;break} } if {!$LAiJeVu} {lappend LesRefsAbsentes $Ref } } foreach Jumeau $LesAccess { set LAiJeVu 0 foreach UnMeme $LesMemes { if {$Orga != [lindex $UnMeme 12]} {continue} if {$Jumeau == [lindex $UnMeme 1 ]} {set LAiJeVu 1;break} } if {!$LAiJeVu} {lappend LesAccessAbsents $Jumeau} } lappend LeTexte "" lappend LeTexte "Rank: $i" lappend LeTexte "Type: $QuiSuisJe" lappend LeTexte "BanqueId_Access: $BId [lindex $LesAccess 0]" if {1 < [llength $LesAccess]} { lappend LeTexte "EquivalentAccess: [join [lrange $LesAccess 1 end] " "]" } if {$LesAccessAbsents != {}} { lappend LeTexte "AbsentAccess: [join $LesAccessAbsents " "]" } lappend LeTexte "Definition: $Def" lappend LeTexte "Organism: $Orga" lappend LeTexte "Length: $Taille" if {$LesRefs != {}} { lappend LeTexte "[format "%-20s" "$AutreType:"] [join $LesRefs " "]" } if {$SuisJeDansLeCDS && $LesRefsAbsentes != {}} { lappend LeTexte "[format "%-20s" "Absent$AutreType:"] [join $LesRefsAbsentes " "]" } if {$QuiSuisJe == "PROTEIN"} { lappend LeTexte "NTot: $Nb" } else { lappend LeTexte "NTot_5UTR_CDS_3UTR: [format "%-6s%-6s%-5s%-6s" $Nb $NbIn5UTR $NbInCDS $NbIn3UTR]" } lappend LeTexte "Expect_Score_Id: [format "%-8s%-8.1f%.2f" $Expect $Score $Id]" if {$EstCeUnParalogue} { lappend LeTexte "WARNING: MayBeAParalogue ([expr round($Id*100)]%)" } } Sauve [join $LeTexte "\n"] dans $FileOut return $LeTexte } proc ProtComputed_TissueType {FichierSelEST} { #liste des 931 foreach Nom [ListeDesPABs] { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$AccBestProtHuman!=""} { set DefinitionProtHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestProtHuman Definition] if {[regexp -nocase "HYPOTHETICAL" $DefinitionProtHuman] || [regexp -nocase "PREDICTED" $DefinitionProtHuman] || [regexp -nocase "SIMILAR TO" $DefinitionProtHuman] || [regexp -nocase "KIAA" $DefinitionProtHuman] || [regexp -nocase "DKFZp" $DefinitionProtHuman]|| [regexp -nocase "FLJ" $DefinitionProtHuman]} { #Espionne $DefinitionProtHuman lappend LpourAffy $AccBestProtHuman lappend L $Nom } } } Espionne [llength $L] foreach Nom $L { set LesEST [InterrogeSelectedEST $FichierSelEST Nom $Nom LesAccess] if {$LesEST==""} {lappend LesSansEST $Nom; continue} set T 0 set LesT [InterrogeSelectedEST $FichierSelEST Nom $Nom LesTissueType] foreach Elt $LesT { if {[regexp -nocase "TUMOR" $Elt] || [regexp -nocase "CARCINOMA" $Elt] || [regexp -nocase "TUMOR" $Elt]} { set T 1; break } } if {$T==0} {lappend LesSansT $Nom} } Espionne "hyp sans est: [llength [lsort -unique $LesSansEST]]" Espionne "hyp et no tissue type tumor: [llength [lsort -unique $LesSansT]]" Espionne [lsort -unique $LesSansT] } proc ProtDansNuc {TFA Pro} { set Seq [QueLaSequenceDuTexteTFA $TFA] set Sortie {} foreach Frame [list 0 1 2] { set BonSeq [string range $Seq $Frame end] set SeqPro [SeqNucToSeqPro $BonSeq] if {[regexp -indices -nocase $Pro $SeqPro Indices]} { lappend Sortie $Indices } } return $Sortie } proc ProtIDStringFromAffx {Affx TaxId} { CanalSqlString foreach {Pi Pn So} [SqlExec "select protein_id,protein_name,source from items.proteins_names where protein_name = '$Affx' and species_id = $TaxId order by is_preferred_name desc;" "GetList"] { #Espionne "$Pi\t$Pn\t$So" return $Pi } CanalSqlDisconnect return "" } proc ProtIDStringFromGn {Gn TaxId} { CanalSqlString set GnMaj [string toupper $Gn] set GnMin [string tolower $Gn] set GnMajMin [string totitle $Gn] foreach {Pi Pn So} [SqlExec "select protein_id,protein_name,source from items.proteins_names where (protein_name = '$Gn' or protein_name = '$GnMajMin' or protein_name = '$GnMaj' or protein_name = '$GnMin') and species_id = $TaxId order by is_preferred_name desc;" "GetFirstValue"] { #Espionne "$Pi\t$Pn\t$So" return $Pi } foreach {Pi Pn So} [SqlExec "select protein_id,protein_name,source from items.proteins_names where (protein_name = '$Gn' or protein_name = '$GnMajMin' or protein_name = '$GnMaj' or protein_name = '$GnMin') and species_id = $TaxId;" "GetFirstValue"] { #Espionne "$Pi\t$Pn\t$So" return $Pi } CanalSqlDisconnect return "" } proc ProtIDStringFromNM {NM TaxId} { CanalSqlString set sql "select protein_id,protein_name,source from items.proteins_names where ( protein_name = '$NM' or protein_name = '$NM.1' or protein_name = '$NM.2' or protein_name = '$NM.3' or protein_name = '$NM.4' or protein_name = '$NM.5' or protein_name = '$NM.6' or protein_name = '$NM.7' or protein_name = '$NM.8' or protein_name = '$NM.9') and species_id = $TaxId order by is_preferred_name desc limit 1;" foreach {Pi Pn So} [SqlExec $sql "GetList"] { return $Pi } CanalSqlDisconnect return "" } proc ProtParGeneNamePourTous {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set Repprotembl "[RepertoireDuGenome]/protembl" if { ! [file exists $Repprotembl]} { File mkdir $Repprotembl } foreach Nom $Liste { #Espionne $Nom set Texte "" set FichierProtembl "[GscopeFile $Nom protembl]_1" if {[FileExists $FichierProtembl]} {continue} set Acc [AccessEvi $Nom] if {$Acc==""} { continue } #Espionne "$Nom $Acc" if {[regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc]} { set Commande "getz \"\\\[refseq-acc:$Acc\\\] > \(\\\[swissprot-org:Mus musculus\\\] | \\\[sptrembl-org:Mus musculus\\\]\)\" \-vf acc" set Texte [eval exec $Commande] } else { set Commande "getz \"\\\[genbankfull-acc:$Acc\\\] > \(\\\[swissprot-org:Mus musculus\\\] | \\\[sptrembl-org:Mus musculus\\\]\)\" \-vf acc" set Texte [eval exec $Commande] } Espionne "$Texte" if {$Texte==""} { continue } set I 0 foreach BIdAcc [split $Texte "\n"] { scan $BIdAcc "%s %s" BId Access Espionne "BIdAcc $BIdAcc" set LesLignesEMBL [LaSequenceDesBanques $BId $Access "OnVeutEMBL"] if {$LesLignesEMBL == {}} { continue } incr I set FichierEMBL "[GscopeFile $Nom protembl]_$I" set Queue [file tail $FichierEMBL] set LesMots [split $BIdAcc ":"] set Tab($Queue) [lindex $LesMots 0] set F [SauveLesLignes $LesLignesEMBL dans $FichierEMBL] #Espionne "$Nom $Acc [file tail $F]\n[join $LesLignesEMBL "\n"]" } } set FichierTabCorres "[RepertoireDuGenome]/fiches/TabCorres" AppendAuFichier $FichierTabCorres [join [array get Tab] "\n"] #SauveLesLignes [array get Tab] dans TabCorres #array set Tab [LesLignesDuFichier toto] } proc ProtParGeneNamePourTousGb {} { foreach Nom [ListeDesPABs] { Espionne $Nom set FichierTfaBest [GscopeFile $Nom prottfa] if {[FileExists $FichierTfaBest]} {continue} set Acc [AccessEvi $Nom] if {$Acc==""} { continue } Espionne "$Nom $Acc" set Commande "getz \"\\\[genbankfull-acc:$Acc\\\]>\\\[protein-org:Mus musculus\\\]\" \-vf acc" set Texte [eval exec $Commande] if {$Texte==""} { continue } scan $Texte "%s %s" BId Access set LesLignesEMBL [LaSequenceDesBanques $BId $Access "OnVeutEMBL"] if {$LesLignesEMBL == {}} { continue } set FichierEMBL "[GscopeFile $Nom protemblGB]" set F [SauveLesLignes $LesLignesEMBL dans $FichierEMBL] Espionne "$Nom $Acc [file tail $F]\n[join $LesLignesEMBL "\n"]" } } proc ProtParLocUcsc {Nom} { set Acc [AccessEvi $Nom] set ProtId [LocUcsc $Acc proteinID] if {$ProtId==""} { return "" } set LesLignesEmbl [LaSequenceDesBanques $ProtId] return [SauveLesLignes $LesLignesEmbl dans "[RepertoireDuGenome]/protembl2/$Nom"] } proc ProtParLocUcscPourTous {} { foreach Nom [ListeDesPABs] { Espionne [ProtParLocUcsc $Nom] } } proc ProteinProtocol {Nom} { set FichierTFA "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FichierTFA]} {return} set TFA [SequenceFormatTFA [QueLaSequenceDuFichierTFA $FichierTFA] "QUERY_PROTEIN"] AskMSF unset AskBlast unset set Option "PipeAlign BlastP -> Ballast -> MSF -> RASCAL -> CLUSTERING" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set Expect [OptionsDesProtocoles $Option ExpectMax ] set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set NbProtein [OptionsDesProtocoles $Option NbProteinMax] set NbPDB [OptionsDesProtocoles $Option NbPDBMax ] set RepPipeAlign "[RepertoireDuGenome]/PipeAlign" if {![file exists $RepPipeAlign]} {file mkdir $RepPipeAlign} set RepBlastP "[RepertoireDuGenome]/blastp" if {![file exists $RepBlastP]} {file mkdir $RepBlastP} set RepBallast "[RepertoireDuGenome]/ballast" if {![file exists $RepBallast]} {file mkdir $RepBallast} set RepMSF "[RepertoireDuGenome]/msf" if {![file exists $RepMSF]} {file mkdir $RepMSF} set RepMSFDb "[RepertoireDuGenome]/msfdbclustal" if {![file exists $RepMSFDb]} {file mkdir $RepMSFDb} set RepMSFRascal "[RepertoireDuGenome]/msfrascal" if {![file exists $RepMSFRascal]} {file mkdir $RepMSFRascal} set RepMSFClust "[RepertoireDuGenome]/msfclust" if {![file exists $RepMSFClust]} {file mkdir $RepMSFClust} set FileTFATmp "$RepPipeAlign/$Nom" file copy -force $FichierTFA $FileTFATmp Espionne "$Nom -> BlastP" set FileBlastP "$RepBlastP/$Nom" set FileBlastPTmp "$FileTFATmp.blastp" if {![file exists "$RepBlastP/$Nom"] || ![OptionsDesProtocoles $Option Continue]} { PipeBlast $FileTFATmp protall $FileBlastPTmp P $NbSubject $Expect T 4 if {[file exists $FileBlastPTmp]} {File copy -force $FileBlastPTmp $FileBlastP} } Espionne "$Nom -> Ballast" set FileBallast "$RepBallast/$Nom" set FileAnchors "$FileBallast.anchors" set FileBallastTmp "$FileTFATmp.ballast" set FileAnchorsTmp "$FileBallastTmp.anchors" if {[file exists $FileBlastP] && (![file exists $FileBallast] || ![OptionsDesProtocoles $Option Continue])} { PipeBallast $FileBlastP $FileBallastTmp if {[file exists $FileBallastTmp]} {File copy -force $FileBallastTmp $FileBallast} if {[file exists $FileAnchorsTmp]} { File copy -force $FileAnchorsTmp $FileAnchors CorrigeFichierAnchors $FileAnchors } } Espionne "$Nom -> TFAs extraction" set FileTFAs "$FileBallast.tfas" if {![file exists $FileTFAs] || ![OptionsDesProtocoles $Option Continue]} { if { [file exists $FileAnchors]} { Espionne "$Nom -> TFAs from BALLAST results" Sauve [join [linsert [LesTFAsDesHitsDuBallast $FileAnchors $NbProtein $NbPDB 0] 0 $TFA] "\n"] dans $FileTFAs } elseif {[file exists $FileBlastP]} { Espionne "$Nom -> TFAs from BLASTP results" Sauve [join [linsert [LesTFAsDesHitsDuBlastP $FileBlastP $NbProtein $NbPDB 0] 0 $TFA] "\n"] dans $FileTFAs } } Espionne "$Nom -> DbClustal" set FileMSF "$RepMSF/$Nom" set FileMSFDb "$RepMSFDb/$Nom" set FileMSFTmp "$FileTFATmp.msfdbclustal" if {[file exists $FileTFAs] && (![file exists $FileMSF] || ![OptionsDesProtocoles $Option Continue])} { PipeDbClustal $FileTFAs "$FileAnchors" $FileMSFTmp if {[file exists $FileMSFTmp] && [file size $FileMSFTmp] > 0} { File copy -force $FileMSFTmp $FileMSF File copy -force $FileMSFTmp $FileMSFDb } } Espionne "$Nom -> Rascal" set FileMSFRasc "$RepMSFRascal/$Nom" set FileMSFRascTmp "$FileTFATmp.msfrascal" if {[file exists $FileMSF] && (![file exists $FileMSFRasc] || ![OptionsDesProtocoles $Option Continue])} { PipeRascal $FileMSF $FileMSFRascTmp if {[file exists $FileMSFRascTmp]} {File copy -force $FileMSFRascTmp $FileMSFRasc} } if {![OptionsDesProtocoles $Option Continue] && [file exists $FileMSFRascTmp] && [file exists $FileMSF]} { if {[PipeNorMD $FileMSF] <= [PipeNorMD $FileMSFRascTmp]} {File copy -force $FileMSFRasc $FileMSF} } Espionne "$Nom -> Clustering" set FileMSFClust1 "$RepMSF/$Nom.clust" set FileMSFClust2 "$RepMSFClust/$Nom" set FileClustTmp "$FileMSFTmp.clust" if {[file exists $FileMSF] && (![file exists $FileMSFClust1] || ![OptionsDesProtocoles $Option Continue])} { PipeClustering $FileMSF $FileClustTmp if {[file exists $FileClustTmp]} {File copy -force $FileClustTmp $FileMSFClust1} if {[file exists $FileClustTmp]} {File copy -force $FileClustTmp $FileMSFClust2} } foreach File [glob -nocomplain -directory $RepPipeAlign "$Nom*"] {File delete $File} } set FileMSF "[RepertoireDuGenome]/msf/$Nom" set FileClust "[RepertoireDuGenome]/msf/$Nom.clust" set Option "Descriptifs file" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepDes "[RepertoireDuGenome]/descriptifs" if {![file exists $RepDes]} {file mkdir $RepDes} set FileDes "$RepDes/$Nom" if {(![file exists $FileDes] || ![OptionsDesProtocoles $Option Continue]) && [file exists $FileMSF]} { set LesDescriptifs [LesDescriptifsDuMSF $FileMSF] if {$LesDescriptifs != ""} {Sauve [join $LesDescriptifs "\n"] dans $FileDes} } } set Option "Gene Ontology : IPO -> PPO -> MSO -> GPO" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepGO "[RepertoireDuGenome]/GeneOntology" if {![file exists $RepGO]} {file mkdir $RepGO} set FileGO "$RepGO/$Nom.xml" set AccessQuery [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] if {[string equal -nocase $AccessQuery "NoProtein"] || $AccessQuery == ""} { set AccessQuery [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] } #debut LP 2 proc ci-dessus marche pas, autre moyen de recuperer accessprot if {$AccessQuery==""} { set IdAccProt [ExtraitInfo $Nom "IdAccProt"] set LesProt [split $IdAccProt " "] set AccessQuery [lindex $LesProt 1] } #finLP Espionne "$AccessQuery" set Id [OptionsDesProtocoles $Option IdentityMin] set NorMD [OptionsDesProtocoles $Option NorMDMin ] set P [OptionsDesProtocoles $Option P ] set F [OptionsDesProtocoles $Option F ] AskMSF unset if {[AskMSF $FileMSF $Nom] != ""} { set Query $Nom } elseif {[AskMSF $FileMSF "QUERY_PROTEIN"] != ""} { set Query "QUERY_PROTEIN" } else { set Query "" } if {(![file exists $FileGO] || ![OptionsDesProtocoles $Option Continue]) && [file exists $FileMSF] && [file exists $FileClust]} { GOAnalyse $AccessQuery $FileMSF $FileClust $FileGO $Query $Id $NorMD $P $F } AskMSF unset } set Option "Gene Ontology : File fiches/GeneOntology_{Method}" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set Methode "GPO" set FileGO "[RepertoireDuGenome]/fiches/GeneOntology_$Methode" set FileGOXML "[RepertoireDuGenome]/GeneOntology/$Nom.xml" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FileGO $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FileGO $Nom "OnRemplacera"] } if {!$Presence || !$Continue} { set LesGO [GeneOntology $Nom $FileGOXML $Methode] foreach LeGO $LesGO { AppendAuFichier $FileGO [join $LeGO "\t"] } } } set Option "Gene name" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileGN "[RepertoireDuGenome]/fiches/GeneName" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FileGN $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FileGN $Nom "OnRemplacera"] } set Id [OptionsDesProtocoles $Option IdentityMin] set NorMD [OptionsDesProtocoles $Option NorMDMin ] AskMSF unset if {!$Presence || !$Continue} { set LesGN [LesGeneName $Nom $FileMSF $FileClust $Id $NorMD] if {$LesGN == {}} {set LesGN [list [list $Nom Nothing]]} foreach LeGN $LesGN { AppendAuFichier $FileGN [join $LeGN "\t"] } } AskMSF unset } set Option "Mean definition" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileMD "[RepertoireDuGenome]/fiches/DefinitionsConsensus" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FileMD $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FileMD $Nom "OnRemplacera"] } set Id [OptionsDesProtocoles $Option IdentityMin] set NorMD [OptionsDesProtocoles $Option NorMDMin ] set Duree [OptionsDesProtocoles $Option Duree ] set NbIndiv [OptionsDesProtocoles $Option NbIndividus] AskMSF unset if {!$Presence || !$Continue} { set Def [DefinitionConsensus $Nom $FileMSF $FileClust $Id $NorMD $Duree $NbIndiv] if {$Def == ""} {set Def "Nothing"} AppendAuFichier $FileMD "$Nom\t$Def" } AskMSF unset } set Option "KEGG" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileKegg "[RepertoireDuGenome]/fiches/Kegg" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FileKegg $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FileKegg $Nom "OnRemplacera"] } set Id [OptionsDesProtocoles $Option IdentityMin] set NorMD [OptionsDesProtocoles $Option NorMDMin ] AskMSF unset if {!$Presence || !$Continue} { AppendAuFichier $FileKegg [join [KEGG $Nom $FileMSF $FileClust $Id $NorMD] "\n"] } AskMSF unset } set Option "Domains" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileDom "[RepertoireDuGenome]/fiches/Domaines" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FileDom $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FileDom $Nom "OnRemplacera"] } set Id [OptionsDesProtocoles $Option IdentityMin ] set NorMD [OptionsDesProtocoles $Option NorMDMin ] set FractionDuDomaine [OptionsDesProtocoles $Option FractionDuDomaineMin] AskMSF unset if {!$Presence || !$Continue} { set LesDomaines [LesDomaines $Nom $FileMSF $FileClust $Id $NorMD $FractionDuDomaine] if {$LesDomaines == {}} {set LesDomaines [list [list $Nom Nothing]]} foreach LeDomaine $LesDomaines { AppendAuFichier $FileDom [join $LeDomaine "\t"] } } AskMSF unset } set Option "Best protein and mRNA for each organism" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileBPM "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FileBPM $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FileBPM $Nom "OnRemplacera"] } set Id [OptionsDesProtocoles $Option IdentityMin ] set IdStrict [OptionsDesProtocoles $Option IdentityStrict ] if {!$Presence || !$Continue} { set LesBPM [LesBestProteinAndmRNAForeachOrganism $Nom $FileMSF $Id $IdStrict] if {$LesBPM == {}} {set LesBPM [list "$Nom\tNothing"]} foreach Ligne $LesBPM {AppendAuFichier $FileBPM $Ligne} } } set Option "Best Human mRNA sequence TFA" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepTFA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" if {![file exists $RepTFA]} {file mkdir $RepTFA} set FileTFA "$RepTFA/$Nom" set Id [OptionsDesProtocoles $Option IdentityMin ] if {![file exists $FileTFA] || ![OptionsDesProtocoles $Option Continue]} { TFADeLaProteineOuDumRNADeLOrganisme $Nom mRNA "Homo sapiens" $Id $FileTFA } } set Option "Best Mouse mRNA sequence TFA" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepTFA "[RepertoireDuGenome]/mrnatfa_Mus_musculus" if {![file exists $RepTFA]} {file mkdir $RepTFA} set FileTFA "$RepTFA/$Nom" set Id [OptionsDesProtocoles $Option IdentityMin ] if {![file exists $FileTFA] || ![OptionsDesProtocoles $Option Continue]} { TFADeLaProteineOuDumRNADeLOrganisme $Nom mRNA "Mus musculus" $Id $FileTFA } } set Option "Best Human protein sequence TFA" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepTFA "[RepertoireDuGenome]/prottfa_Homo_sapiens" if {![file exists $RepTFA]} {file mkdir $RepTFA} set FileTFA "$RepTFA/$Nom" set Id [OptionsDesProtocoles $Option IdentityMin ] if {![file exists $FileTFA] || ![OptionsDesProtocoles $Option Continue]} { TFADeLaProteineOuDumRNADeLOrganisme $Nom Protein "Homo sapiens" $Id $FileTFA } } set Option "TBlastN Human with the corresponding protein" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] set Filter [OptionsDesProtocoles $Option Filter ] set FileTFA "[RepertoireDuGenome]/prottfa/$Nom" if {[file exists $FileTFA]} { set RepTBlastNHuman "[RepertoireDuGenome]/prottfa_tblastnhuman" if {![file exists $RepTBlastNHuman]} {file mkdir $RepTBlastNHuman} set FileTBlastNHuman "$RepTBlastNHuman/$Nom" if {![file exists $FileTBlastNHuman] || ![OptionsDesProtocoles $Option Continue]} { PipeBlast $FileTFA human $FileTBlastNHuman TN $NbSubject $Expect $Filter 4 } } } set Option "TBlastN Mouse with the corresponding protein" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] set Filter [OptionsDesProtocoles $Option Filter ] set FileTFA "[RepertoireDuGenome]/prottfa/$Nom" if {[file exists $FileTFA]} { set RepTBlastNMouse "[RepertoireDuGenome]/prottfa_tblastnmouse" if {![file exists $RepTBlastNMouse]} {file mkdir $RepTBlastNMouse} set FileTBlastNMouse "$RepTBlastNMouse/$Nom" if {![file exists $FileTBlastNMouse] || ![OptionsDesProtocoles $Option Continue]} { PipeBlast $FileTFA mouse $FileTBlastNMouse TN $NbSubject $Expect $Filter 4 } } } set Option "TBlastN Human with the best Human protein" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileTFA "[RepertoireDuGenome]/prottfa_Homo_sapiens/$Nom" set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] set Filter [OptionsDesProtocoles $Option Filter ] if {[file exists $FileTFA]} { set RepTBlastNHuman "[RepertoireDuGenome]/prottfa_Homo_sapiens_tblastnhuman" if {![file exists $RepTBlastNHuman]} {file mkdir $RepTBlastNHuman} set FileTBlastNHuman "$RepTBlastNHuman/$Nom" if {![file exists $FileTBlastNHuman] || ![OptionsDesProtocoles $Option Continue]} { PipeBlast $FileTFA human $FileTBlastNHuman TN $NbSubject $Expect $Filter 4 } } } set Option "TBlastN Mouse with the best Human protein" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileTFA "[RepertoireDuGenome]/prottfa_Homo_sapiens/$Nom" set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] set Filter [OptionsDesProtocoles $Option Filter ] if {[file exists $FileTFA]} { set RepTBlastNMouse "[RepertoireDuGenome]/prottfa_Homo_sapiens_tblastnmouse" if {![file exists $RepTBlastNMouse]} {file mkdir $RepTBlastNMouse} set FileTBlastNMouse "$RepTBlastNMouse/$Nom" if {![file exists $FileTBlastNMouse] || ![OptionsDesProtocoles $Option Continue]} { PipeBlast $FileTFA mouse $FileTBlastNMouse TN $NbSubject $Expect $Filter 4 } } } set Option "BlastN Human with the best Human mRNA" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileTFA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" set FileTFAMasked "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom.masked" set RepBlastNHuman "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_blastnhuman" if {![file exists $RepBlastNHuman]} {file mkdir $RepBlastNHuman} set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] set Filter [OptionsDesProtocoles $Option Filter ] if {[file exists $FileTFA]} { set FileBlastNHuman "$RepBlastNHuman/$Nom" if {![file exists $FileBlastNHuman] || ![OptionsDesProtocoles $Option Continue]} { Espionne "$Nom -> Masking the best Human mRNA" set SeqTFA [MasqueLesRepeatsDuFichier $FileTFA "Homo sapiens"] Sauve $SeqTFA dans $FileTFAMasked PipeBlast $FileTFAMasked human $FileBlastNHuman N $NbSubject $Expect $Filter 4 } } } set Option "BlastN Mouse with the best Human mRNA" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set FileTFA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" set FileTFAMasked "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom.masked" set RepBlastNMouse "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_blastnmouse" if {![file exists $RepBlastNMouse]} {file mkdir $RepBlastNMouse} set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] set Filter [OptionsDesProtocoles $Option Filter ] if {[file exists $FileTFA]} { set FileBlastNMouse "$RepBlastNMouse/$Nom" if {![file exists $FileBlastNMouse] || ![OptionsDesProtocoles $Option Continue]} { Espionne "$Nom -> Masking the best Human mRNA" set SeqTFA [MasqueLesRepeatsDuFichier $FileTFA "Homo sapiens"] Sauve $SeqTFA dans $FileTFAMasked PipeBlast $FileTFAMasked mouse $FileBlastNMouse N $NbSubject $Expect $Filter 4 } } } set Option "Human exonic map with the corresponding protein" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepEM "[RepertoireDuGenome]/prottfa_exonicmap" if {![file exists $RepEM]} {file mkdir $RepEM} set FileEM "$RepEM/$Nom" set FileTFA "[RepertoireDuGenome]/prottfa/$Nom" set FileBlast "[RepertoireDuGenome]/prottfa_tblastnhuman/$Nom" set AvecBlastOuSansBlast [OptionsDesProtocoles $Option AvecBlastOuSansBlast] set Var [OptionsDesProtocoles $Option Var] set IdMin [OptionsDesProtocoles $Option IdentityMin] set SplitWithGap [OptionsDesProtocoles $Option SplitWithGap] set IdAlert [OptionsDesProtocoles $Option IdAlert] set TailleMin [OptionsDesProtocoles $Option TailleMin] set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] if {![file exists $FileEM] || ![OptionsDesProtocoles $Option Continue]} { if {[file exists $FileTFA] && [file exists $FileBlast]} { ExonicMapHuman $FileTFA $FileBlast $FileEM $AvecBlastOuSansBlast $Var $IdMin $SplitWithGap $IdAlert $TailleMin $NbSubject $Expect } } } set Option "Human exonic map with the best Human mRNA" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepEM "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap" if {![file exists $RepEM]} {file mkdir $RepEM} set FileEM "$RepEM/$Nom" set FileTFA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" set FileBlast "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_blastnhuman/$Nom" set AvecBlastOuSansBlast [OptionsDesProtocoles $Option AvecBlastOuSansBlast] set Var [OptionsDesProtocoles $Option Var] set IdMin [OptionsDesProtocoles $Option IdentityMin] set SplitWithGap [OptionsDesProtocoles $Option SplitWithGap] set IdAlert [OptionsDesProtocoles $Option IdAlert] set TailleMin [OptionsDesProtocoles $Option TailleMin] set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] if {![file exists $FileEM] || ![OptionsDesProtocoles $Option Continue]} { if {[file exists $FileTFA] && [file exists $FileBlast]} { ExonicMapHuman $FileTFA $FileBlast $FileEM $AvecBlastOuSansBlast $Var $IdMin $SplitWithGap $IdAlert $TailleMin $NbSubject $Expect } } } set Option "Human exonic map with the best Human protein" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepEM "[RepertoireDuGenome]/prottfa_Homo_sapiens_exonicmap" if {![file exists $RepEM]} {file mkdir $RepEM} set FileEM "$RepEM/$Nom" set FileTFA "[RepertoireDuGenome]/prottfa_Homo_sapiens/$Nom" set FileBlast "[RepertoireDuGenome]/prottfa_Homo_sapiens_tblastnhuman/$Nom" set AvecBlastOuSansBlast [OptionsDesProtocoles $Option AvecBlastOuSansBlast] set Var [OptionsDesProtocoles $Option Var] set IdMin [OptionsDesProtocoles $Option IdentityMin] set SplitWithGap [OptionsDesProtocoles $Option SplitWithGap] set IdAlert [OptionsDesProtocoles $Option IdAlert] set TailleMin [OptionsDesProtocoles $Option TailleMin] set NbSubject [OptionsDesProtocoles $Option NbSubjectMax] set Expect [OptionsDesProtocoles $Option ExpectMax ] if {![file exists $FileEM] || ![OptionsDesProtocoles $Option Continue]} { if {[file exists $FileTFA] && [file exists $FileBlast]} { ExonicMapHuman $FileTFA $FileBlast $FileEM $AvecBlastOuSansBlast $Var $IdMin $SplitWithGap $IdAlert $TailleMin $NbSubject $Expect } } } set Option "Location of the corresponding protein on Human genome" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepLoc "[RepertoireDuGenome]/Localisation" if {![file exists $RepLoc]} {file mkdir $RepLoc} set FichierBoxLoc "$RepLoc/ProttfaLocalisation_Human" set FichierExonicMap "[RepertoireDuGenome]/prottfa_exonicmap/$Nom" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnRemplacera"] } if {!$Presence || !$Continue} { AppendAuFichier $FichierBoxLoc [join [ProttfaLocalisation $Nom $FichierExonicMap] "\n"] } } set Option "Location of the best human mRNA on Human genome" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepLoc "[RepertoireDuGenome]/Localisation" if {![file exists $RepLoc]} {file mkdir $RepLoc} set FichierBoxLoc "$RepLoc/mRNAHsapLocalisation_Human" set FichierExonicMap "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap/$Nom" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnRemplacera"] } if {!$Presence || !$Continue} { AppendAuFichier $FichierBoxLoc [join [mRNAHsapLocalisation $Nom $FichierExonicMap] "\n"] } } } proc ProteinePredite {Nom {Homologue ""} {Write ""}} { global RepertoireDuGenome Wup "Creates the TFA file of the predicted protein, writes in info file. Returns the TFA file name" if {$Write==""} { set Write 1 } else { set Write 0 } set RepGSPredictions "$RepertoireDuGenome/genscanpredictions" if { ! [file exists $RepGSPredictions]} { File mkdir $RepGSPredictions } set FichierGSP "$RepGSPredictions/$Nom" if {$Homologue=="FromFile"} { set Homologue "" if {[file exists $FichierGSP]} { return [ContenuDuFichier $FichierGSP] } else { if {[regexp "no overlap" [ExtraitInfo $Nom "GS"]]} { return "" } } } set LesHomologies [ChaqueSegmentDuBlastN $Nom] EspionneL $LesHomologies if {$Homologue==""} { set Homologue [lindex $LesHomologies 0] } scan $Homologue "%s" Voulu foreach Homologie $LesHomologies { ScanLaListe [split $Homologie "\t"] ChroContigTroncon nCops nCopsDansCetteSequence Orga PourcentageIdentiteCacheDansScore Expect DebutQuery FinQuery DebutSbjct FinSbjct if { ! [string compare [string toupper $Voulu] [string toupper $ChroContigTroncon]]} { lappend LesBornes $DebutSbjct $FinSbjct } else { if {[info exists LesBornes]} { break } } } if { ! [info exists LesBornes] } { return "" } set LesBornes [lsort -integer $LesBornes] set Gauche [lindex $LesBornes 0] set Droite [lindex $LesBornes end] set TexteGS [GenScanEnStock $Voulu] if {$TexteGS==""} { set TexteGS [GenScan [ContigComplet $Voulu]] GenScanEnStock $Voulu $TexteGS } foreach Prot [DecortiqueGenScan All All Numbers $TexteGS] { set G [DecortiqueGenScan $Prot All Gauche] set D [DecortiqueGenScan $Prot All Droite] if { $Gauche <= $D && $G <= $Droite } { if {$Write} { InformeSansDemander $Nom "=GS: overlap found with a predicted protein" } set BonneProt $Prot foreach Exon [DecortiqueGenScan $BonneProt All Numbers] { if {[info exists Fin3] && [info exists Debut3]} {break} set Sens [DecortiqueGenScan $BonneProt $Exon Sens] set B [DecortiqueGenScan $BonneProt $Exon Begin] set E [DecortiqueGenScan $BonneProt $Exon End] set Nature [DecortiqueGenScan $BonneProt $Exon Nature] if { $Nature=="PlyA" } { if {$Sens=="+"} { set Fin3 $E } else { set Debut3 $E} } if { $Nature=="Term" || $Nature=="Sngl" } { if {$Sens=="+"} { set Debut3 $B } else { set Fin3 $B } } } if {![info exists Fin3] || ![info exists Debut3]} { if {$Write} { InformeSansDemander $Nom "=GS3: 3' region not found by GenScan" } } else { Espionne "$Debut3 $Fin3" if {$Gauche <= $Fin3 && $Debut3 <= $Droite} { if {$Write} { InformeSansDemander $Nom "=GS3: in 3' region " } } else { if {$Write} { InformeSansDemander $Nom "=GS3: not in 3' region" } set DansIntron 1 foreach Exon [DecortiqueGenScan $BonneProt All Numbers] { set B [DecortiqueGenScan $BonneProt $Exon Begin] set E [DecortiqueGenScan $BonneProt $Exon End] set Nature [DecortiqueGenScan $BonneProt $Exon Nature] if {($Gauche <= $E && $B <= $Droite) && $Nature!="Prom"} {set DansIntron 0} } if {$DansIntron} { if {$Write} { InformeSansDemander $Nom "=GSE: not in an exon" } } else { if {$Write} { InformeSansDemander $Nom "=GSE: in an exon" } } } } set TFA [DecortiqueGenScan $Prot All TFA] if {$Write} { set Fichier [Sauve $TFA dans $FichierGSP] return $Fichier } else { return $TFA } } } if {$Write} { InformeSansDemander $Nom "=GS: no overlap with any predicted protein" } return "" } proc ProteinePreditePourTous {{CommenceIci ""}} { global RepertoireDuGenome set Rep "$RepertoireDuGenome/genscanpredictions" if { ! [file exists $Rep]} { File mkdir $Rep } foreach Nom [ListeDesPABs] { Espionne $Nom if {$CommenceIci!="" && $Nom!=$CommenceIci} { continue } set CommenceIci "" set PolyLoc [PolyLocalise $Nom] if { ! [regexp "MonoLocalization|MayBePolyLocalization" $PolyLoc]} { continue } set FichierGSP "$Rep/$Nom" if {[file exists $FichierGSP]} { continue } # ProteinePredite $Nom "FromFile" ProteinePredite $Nom } } proc Proteines {FichierClusters} { set n 0 set Liste [ListeMinimumDesJR $FichierClusters] set RepProttfa "[RepertoireDuGenome]/prottfa" foreach Nom $Liste { set Fichier "$RepProttfa/$Nom" if {[file exists $Fichier] } { incr n } } return $n } proc ProteinesContig {FichierClusters} { set n 0 set Liste [ListeMinimumDesJR $FichierClusters] set RepProttfa "[RepertoireDuGenome]/prottfa" foreach Nom $Liste { set Fichier "$RepProttfa/$Nom" if {[file exists $Fichier] } { set Contenu [ContenuDuFichier $Fichier] if {[regexp "CONTIG" $Contenu]} {incr n} } } return $n } proc ProteomeFilesFusion {args} { puts ">>> Fusion des proteomes : output=proteomeToBlast.fasta" set compteur 0 set output [open "proteomeToBlast.fasta" "w"] foreach fileName $args { set input [open "$fileName" "r"] while {[gets $input line]!=-1} { if {$line=="" || $line=="\n" || ([string index $line 0]=="#")} {continue} if {[string index $line 0]==">"} { #set mots [split $line " "] #set pab [lindex $mots 1] #lset mots 0 ">" #set newLine "" #foreach m $mots { # if {$m==">"} { # append newLine ">" # } else { # append newLine "$m " # } #} #set line $newLine incr compteur } puts $output $line } close $input set nombre($fileName) $compteur set compteur 0 } close $output puts " -->OK" puts " -->Pour info : " foreach {cle val} [array get nombre] { puts " - $cle : contient $val entrées" } } proc ProteomePABsFusion {args} { puts ">>> Fusion des 'bornesdespabs'" set compteur 0 set output [open "bornesdespabs" "w"] foreach fileName $args { set input [open "$fileName" "r"] while {[gets $input line]!=-1} { incr compteur puts $output $line } close $input set nombre($fileName) $compteur set compteur 0 } close $output puts " -->OK" puts " -->Pour info : " foreach {cle val} [array get nombre] { puts " - $cle : contient $val PABs" } } proc Protocol {Nom} { OptionsDesProtocoles AskMSF unset AskBlast unset AskLesPagesInfos unset DNAProtocol $Nom ProteinProtocol $Nom set Option "Best Human genome location" if {[OptionsDesProtocoles $Option]} { Espionne "$Nom -> $Option" set RepLoc "[RepertoireDuGenome]/Localisation" if {![file exists $RepLoc]} {file mkdir $RepLoc} set FichierBoxLoc "$RepLoc/BestLocalisation_Human" set Continue [OptionsDesProtocoles $Option Continue] if {$Continue} { set Presence [PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnContinuera"] } else { set Presence [PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnRemplacera"] } set IdMin [OptionsDesProtocoles $Option IdentityMin] if {!$Presence || !$Continue} { AppendAuFichier $FichierBoxLoc [join [BestLocalisation $Nom $IdMin] "\n"] } } set Option "HTML file summary" if {[OptionsDesProtocoles $Option]} { set Continue [OptionsDesProtocoles $Option Continue] set File "[RepertoireDuGenome]/BilanHTML/$Nom.html" if {![file exists $File] || !$Continue} { set IdMin [OptionsDesProtocoles $Option IdentityMin ] set IdMax [OptionsDesProtocoles $Option IdentityMax ] FichierRecapitulatif $Nom $IdMin $IdMax } } } proc ProtocolAlternatifPourTous {{LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} set LesNoms [MorceauxChoisis $LesNoms] Espionne $LesNoms if {[OuiOuNon "Would you want to delete all information concerning these GscopeBoxes ?"]} { if {[OuiOuNon "Are you sure you want to delete all these information ?"]} { ###Efface et corrige les fichiers crees avec ces Boites###### foreach Nom $LesNoms { Espionne $Nom if {$Nom == ""} {continue} if {1} { ###BlastX Protein##### set RepBlastX "[RepertoireDuGenome]/blastx" set FileBlastX "$RepBlastX/$Nom" if {[file exists $FileBlastX]} {file delete -force $FileBlastX} ###BlastN Genembl##### set RepBlastGenembl "[RepertoireDuGenome]/blastngenembl" set FileBlastGenembl "$RepBlastGenembl/$Nom" if {[file exists $FileBlastGenembl]} {file delete -force $FileBlastGenembl} } ###BlastN mRNA##### set RepBlastmRNA "[RepertoireDuGenome]/blastnmrna" set FileBlastmRNA "$RepBlastmRNA/$Nom" if {[file exists $FileBlastmRNA]} {file delete -force $FileBlastmRNA} set RepProtAndmRNA "[RepertoireDuGenome]/ProtAndmRNA" set File "$RepProtAndmRNA/$Nom" if {[file exists $File]} {file delete -force $File} set FichierAccessProt "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" PrepareLeFichierPourLeProtocole $FichierAccessProt $Nom "OnRemplacera" ###Protein searches according to contig searches#### set RepContig "[RepertoireDuGenome]/contig" foreach FileContig [glob -nocomplain "$RepContig/$Nom*"] {file delete -force $FileContig} set FichierContigAndProt "[RepertoireDuGenome]/fiches/ContigAndProt" PrepareLeFichierPourLeProtocole $FichierContigAndProt $Nom "OnRemplacera" set FichierAccessProt "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesContigsChoisis" PrepareLeFichierPourLeProtocole $FichierAccessProt $Nom "OnRemplacera" set FProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {[file exists $FProttfa]} {file delete -force $FProttfa} #PipeAlign BlastP -> Ballast -> MSF -> RASCAL -> CLUSTERING set RepBlastP "[RepertoireDuGenome]/blastp" set RepBallast "[RepertoireDuGenome]/ballast" set RepMSF "[RepertoireDuGenome]/msf" set RepMSFDb "[RepertoireDuGenome]/msfdbclustal" set RepMSFRascal "[RepertoireDuGenome]/msfrascal" set RepMSFClust "[RepertoireDuGenome]/msfclust" set FileBlastP "$RepBlastP/$Nom" if {[file exists $FileBlastP]} {file delete -force $FileBlastP} foreach FBallast [glob -nocomplain "$RepBallast/$Nom*" ] {file delete -force $FBallast} foreach FMSF [glob -nocomplain "$RepMSF/$Nom*" ] {file delete -force $FMSF} foreach FMSFDb [glob -nocomplain "$RepMSFDb/$Nom*" ] {file delete -force $FMSFDb} foreach FMSFRascal [glob -nocomplain "$RepMSFRascal/$Nom*"] {file delete -force $FMSFRascal} foreach FMSFClust [glob -nocomplain "$RepMSFClust/$Nom*" ] {file delete -force $FMSFClust} set RepDes "[RepertoireDuGenome]/descriptifs" set FDes "$RepDes/$Nom" if {[file exists $FDes]} {file delete -force $FDes} set RepGO "[RepertoireDuGenome]/GeneOntology" set FileGO "$RepGO/$Nom.xml" if {[file exists $FileGO]} {file delete -force $FileGO} set FileGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" PrepareLeFichierPourLeProtocole $FileGO $Nom "OnRemplacera" set FileGN "[RepertoireDuGenome]/fiches/GeneName" PrepareLeFichierPourLeProtocole $FileGN $Nom "OnRemplacera" set FileMD "[RepertoireDuGenome]/fiches/DefinitionsConsensus" PrepareLeFichierPourLeProtocole $FileMD $Nom "OnRemplacera" set FileKegg "[RepertoireDuGenome]/fiches/Kegg" PrepareLeFichierPourLeProtocole $FileKegg $Nom "OnRemplacera" set FileDom "[RepertoireDuGenome]/fiches/Domaines" PrepareLeFichierPourLeProtocole $FileDom $Nom "OnRemplacera" set FileBPM "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" PrepareLeFichierPourLeProtocole $FileBPM $Nom "OnRemplacera" set RepTFA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" foreach File [glob -nocomplain "$RepTFA/$Nom*"] {file delete -force $File} set RepTFA "[RepertoireDuGenome]/prottfa_Homo_sapiens" foreach File [glob -nocomplain "$RepTFA/$Nom*"] {file delete -force $File} set RepTBlastNHuman "[RepertoireDuGenome]/prottfa_tblastnhuman" set FileTBlastNHuman "$RepTBlastNHuman/$Nom" if {[file exists $FileTBlastNHuman]} {file delete -force $FileTBlastNHuman} set RepTBlastNMouse "[RepertoireDuGenome]/prottfa_tblastnmouse" set FileTBlastNMouse "$RepTBlastNMouse/$Nom" if {[file exists $FileTBlastNMouse]} {file delete -force $FileTBlastNMouse} set RepTBlastNHuman "[RepertoireDuGenome]/prottfa_Homo_sapiens_tblastnhuman" set FileTBlastNHuman "$RepTBlastNHuman/$Nom" if {[file exists $FileTBlastNHuman]} {file delete -force $FileTBlastNHuman} set RepTBlastNMouse "[RepertoireDuGenome]/prottfa_Homo_sapiens_tblastnmouse" set FileTBlastNMouse "$RepTBlastNMouse/$Nom" if {[file exists $FileTBlastNMouse]} {file delete -force $FileTBlastNMouse} set RepBlastNHuman "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_blastnhuman" set FileBlastNHuman "$RepBlastNHuman/$Nom" if {[file exists $FileBlastNHuman]} {file delete -force $FileBlastNHuman} set RepBlastNMouse "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_blastnmouse" set FileBlastNMouse "$RepBlastNMouse/$Nom" if {[file exists $FileBlastNMouse]} {file delete -force $FileBlastNMouse} set RepEM "[RepertoireDuGenome]/prottfa_exonicmap" set FileEM "$RepEM/$Nom" if {[file exists $FileEM]} {file delete -force $FileEM} set RepEM "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap" set FileEM "$RepEM/$Nom" if {[file exists $FileEM]} {file delete -force $FileEM} set RepEM "[RepertoireDuGenome]/prottfa_Homo_sapiens_exonicmap" set FileEM "$RepEM/$Nom" if {[file exists $FileEM]} {file delete -force $FileEM} set RepLoc "[RepertoireDuGenome]/Localisation" set FichierBoxLoc "$RepLoc/ProttfaLocalisation_Human" PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnRemplacera" set FichierBoxLoc "$RepLoc/mRNAHsapLocalisation_Human" PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnRemplacera" set FichierBoxLoc "$RepLoc/BestLocalisation_Human" PrepareLeFichierPourLeProtocole $FichierBoxLoc $Nom "OnRemplacera" set File "[RepertoireDuGenome]/BilanHTML/$Nom.html" if {[file exists $File]} {file delete -force $File} } } } ProtocolPourTous $LesNoms } proc ProtocolContigPourTous {} { set LesNoms {} foreach Nom [ListeDesPABs] { set FProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FProttfa]} {lappend LesNoms $Nom;continue} set Entete [EnteteDuFichierTFA $FProttfa] if {![regexp " from CONTIG " $Entete]} {continue} lappend LesNoms $Nom } ProtocolAlternatifPourTous $LesNoms } proc ProtocolPourGilbert {FileIn} { set LesNoms {} set F [open $FileIn] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} lappend LesNoms $Ligne } close $F ProtocolPourTous $LesNoms } proc ProtocolPourTous {{LesNoms ""}} { if {$LesNoms == ""} {set LesNoms [MorceauxChoisis [ListeDesPABs]]} OptionsDesProtocoles INI foreach Nom $LesNoms { Espionne "$Nom" if { ! [regexp -nocase {[a-z]} $Nom]} { continue } Protocol $Nom } } proc ProtocolPourTousSansLesProteinesJumelles_AL {} { set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierProtJum "[RepertoireDuGenome]/fiches/ProteinesJumelles" InterrogeOrf2Cluster2Access2Def2Expression unset InterrogeProteinesJumelles unset set LesNoms {} foreach Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesClusters] { foreach Nom [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE Cluster $Cluster LesNoms] { #if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} if {[info exists TabDeJaVu($Cluster,$Nom)]} {continue} set TabDeJaVu($Cluster,$Nom) 1 foreach Jum [lsort -unique [InterrogeProteinesJumelles $FichierProtJum $Nom LesProteinesJumelles]] {set TabDeJaVu($Cluster,$Jum) 1} lappend LesNoms $Nom } } set LesNoms [lsort -unique $LesNoms] Espionne $LesNoms Espionne [llength $LesNoms] set LesNoms [MorceauxChoisis $LesNoms] ProtocolPourTous $LesNoms InterrogeOrf2Cluster2Access2Def2Expression unset InterrogeProteinesJumelles unset return } proc ProtocolPourTous_FichierLesNoms {FichierLesNoms} { ##BBS set Repertoire "[RepertoireDuGenome]/nuctfa" foreach Nom [LesLignesDuFichier $FichierLesNoms] { if {[regexp "bidon" [lindex [LesLignesDuFichier "$Repertoire/$Nom"] 0]]} { continue } lappend LesNoms $Nom } ##avant:set LesNoms [LesLignesDuFichier $FichierLesNoms] ###BBS ProtocolPourTous $LesNoms return $LesNoms } proc ProtocolProtmRNAPourTous {} { set LesNoms {} foreach Nom [ListeDesPABs] { set FProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FProttfa]} {continue} set Entete [EnteteDuFichierTFA $FProttfa] if {[regexp " from CONTIG " $Entete]} {continue} lappend LesNoms $Nom } ProtocolAlternatifPourTous $LesNoms } proc ProtocoleAffymetrixValidationProbeSet {} { #1-0 Demarrage de l identification des Probe Set Ids #################################################### #1-1 Extraction des sequences des probe sets par le probe set Id #On utilise le fichier .sif de la release Affymetrix d une puce ExtraitLesTFAsDesProbeSet $FichierAffy $FichierOut $LesProbeSetIDOuFichier #1-2 Positionne dans un projet gscope les Affy access dans infos PositionneCodeAffymetrix #1-3 BlastN des sequences de la puce dans les 2 banques nt de reference pour savoir ce qu il y a dessus BlastNPourTous "/genomics/g1/AffyProbes/banque/rsmouse_r9" BlastNPourTous unigenemm #1-4 Fichier contenant les Acc dans RefSeq et Unigene ainsi que la definition LesAccRSEtUG_Affymetrix #InterrogeLesAccRSEtUG_Affymetrix #(pour le fichier LesAccDefReSeqEtUnigene) #InterrogeLesAnnotAffymetrix #(pour le fichier [AffymetrixDir]/$CHIP/Annotation/.txt) #1-5 Jumeaux de LesAccRSEtUG_Affymetrix JumeauLesAccRSEtUG_Affymetrix $PABOuRefSeq LesPAB #1-6 Stat sur le projet StatRechercheProbeSet #1-7 Permet de reunir le fichier Bilan RetScope BilanRetScope/RecapitulatifTotal.xls et les infos # de la validation des ProbeSets avec RefSeq et Unigene # ATTENTION il faut avoir lancer une bilan RetScope au prealable FichierRecapitulatifTotal_RSEtUG_Affy "[RepertoireDuGenome]/BilanRetScope/RecapitulatifTotal_RSEtUG_Affy" return "" } proc ProtocoleChip_Ontario {} { #1-0 Demarrage du projet Puce Ontario ##################################### #1-1 Creation des readers des fichiers fournies par Ontario #Site Web http://www.microarrays.ca/support/glists.html #Rq: le fichier iob ne possede pas les meme caracteristique #GAL FILE is BLOCK ROW COLUMN - definition et que verifiedID #IOB FILE is GRID COLUMN ROW - pas de definition, originalID et verifiedID InterrogeLeIOBFile_Ontario #(pour le fichier .iob) InterrogeLeGalFile_Ontario #(pour le fichier .gal) #1-2 Extraction des sequences presentes sur la puce du fichier .txt CreeFichierTFA_Ontario #1-3 BlastN des sequences de la puce dans les 2 banques nt de reference pour savoir ce qu il y a dessus BlastNPourTous rshuman BlastNPourTous unigenehs #1-4 Fichier contenant les Acc dans RefSeq et Unigene ainsi que la definition LesAccRSEtUG_Ontario InterrogeLesAccRSEtUG_Ontario #(pour le fichier LesAccDefRefSeqEtUnigene) #2-0 Determination des sequences d Actinome presentes sur la puce Ontario ######################################################################### #2-1 Creation de la banque blast nucleotidique CreeBanqueBlast_Ontario FastaCmd_Ontario #2-2 BlastN de nos genes contre la puce pour savoir lesquels sont presents BlastNContreChipPourTous_Ontario BlastNContreChip_Ontario #2-3 Pour rechercher les access par blast ou par reference (dans 2-4) LesMeilleursOntarioDeNosSequencesParBlast LesMeilleursOntarioDeNosSequencesParReference #2-4 Creation du fichier contenant les ref ontario pour nos sequences Actinome CreeLeFichierChip_EST_Gene_Present #2-5 Pour determiner la position sur la puce (Block Column Row) des refs Actinome InterrogeActiChip2Ontario #LesPositionsDeNosAccessSurLaPuce_Ontario #3-0 Refonte du GalFile avec amelioration des annotations et ajout des refs Actinome #################################################################################### #3-1 Permet de refaire le GalFile en y ajoutant les definitions, les controles et nos genes RefaitLeGalFile_Ontario #Ou a partir du fichier .iob RefaitLeIOBFileEnGalFile_Ontario #3-2 Pour faire le fichier .sdt (annotation pour Acuity) LeFichierSDT_Ontario #4-0 Divers ########### #Refait un fichier avec les Ori et verified_ID plus les infos de def et acc ReCreeLeFichierDeSequencesOriginal_Ontario #Statistiques du projet StatProjetPuceEST StatProjetPuceESTEtOriginal return "" } proc ProtocoleChip_UMCU {} { #1-0 Demarrage du projet Puce UMCU ################################## #1-1 Creation des readers des fichiers fournies par UMCU #Site Web http://www.microarrays.med.uu.nl/microarrays/human2.php InterrogeLesInfosUMCU #(pour le fichier UMCU-H25k11.txt) #1-2 Extraction des sequences presentes sur la puce du fichier .txt #Recherche SRS (getz refseq et genbank) LesSequences_UMCU EnleveRedondanceRefSeq_UMCU #2-0 Determination des sequences d Actinome presentes sur la puce UMCU ###################################################################### #2-1 Creation de la banque blast nucleotidique des sequences UMCU CreeBanqueBlast_UMCU FastaCmd_UMCU #2-2 BlastN de nos genes contre la puce pour savoir lesquels sont presents BlastNContreChip_UMCU_Main BlastNContreChip_UMCU #2-3 Pour rechercher les access par blast ou par reference (dans 2-4) LesMeilleursUMCUDeNosSequencesParReference LesMeilleursUMCUDeNosSequencesParBlast #2-4 Creation du fichier contenant les ref UMCU pour nos sequences Actinome CreeLeFichierChip_UMCU_Gene_Present #3-0 Extraction des resultats de sequences d interets ActiChip2.0 ################################################################# #3-1 Permet de refaire le GalFile InterrogeActiChip2UMCU RefaitLeGalFile_UMCU #3-2 Permet de refaire les .gpr en gardant uniquement les donnees interresantes RefaitLeGPRFile_UMCU ExtraitDonneesUMCU_ActiChip return "" } proc ProtocoleDuProttfaAuMacsim {{Nom ""}} { Espionne "BlastPPourTous" BlastPPourTous $Nom Espionne "DaedaluhitsDuBlastPPourTous" DaedalusHitsDuBlastPPourTous $Nom "EnProcessExterne" if {$Nom==""} { CreeLeFichierNombreDeCopainsDansBlast } Espionne "DbClustalPourTous" DbClustalPourTous $Nom "daedalus" if {$Nom==""} { Espionne "CreeLesFichiersPhylos" CreeLesFichiersPhylos $Nom } Espionne "LeonEtMacsimPourTous" LeonEtMacsimPourTous $Nom } proc ProtocoleEukaryotePourDNA {{PABouNomsInteressantsouListeouFichier PAB}} { set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] LaSelectionDeNoe #Masking et ReMasking des repeats de DNA de la sequence Espionne "Masking et ReMasking des repeats de DNA de la sequence" RepeatMaskerPourTous $LesNoms FichierBilanMaskingPourTous $LesNoms #Recherche dans les banques proteiques et nucleiques Espionne "Recherche dans les banques proteiques et nucleiques" BlastNPourTous human $LesNoms BlastNPourTous genembl $LesNoms BlastNmRNAPourTous $LesNoms BlastXPourTous $LesNoms protall #Localisation sur le genome humain de la sequence initiale Espionne "Localisation sur le genome humain de la sequence initiale" LocalisationGenomique #Recherche de la proteine de ref Espionne "Recherche de la proteine de ref" FichierProtAndmRNAPourTous $LesNoms FichierContigAndProtPourTous $LesNoms #Je lance le protocole sur la meilleure proteine trouvee Espionne "Je lance le protocole sur la meilleure proteine trouvee" ProtocoleEukaryotePourProteines $PABouNomsInteressantsouListeouFichier return } proc ProtocoleEukaryotePourProteines {{PABouNomsInteressantsouListeouFichier PAB}} { set LesNoms [LesNoms $PABouNomsInteressantsouListeouFichier] LaSelectionDeNoe BlastPPourTous $LesNoms #Alignement multiple Espionne "Alignement multiple" #FichierSizeMSF FichierOrgImportantsDesEukaryotes FichierGenomesEukaryotes DbClustalPourTous $LesNoms #Rascal Espionne "Rascal" RascalPourTous $LesNoms QuelMSFChoisirPourTous $LesNoms #Clustering Espionne "Clustering" ClusteringDesMSFPourTous $LesNoms #Macsim Espionne "Macsim" FichierMacsimPourTous #Ontology Espionne "Ontology" FichierGeneOntologyDesProttfaPourTous $LesNoms FichierGeneOntologyDesClustersDeMSFPourTous $LesNoms FichierBestGeneOntologyPourTous $LesNoms #Kegg Espionne "Kegg" FichierKEGGPourTous $LesNoms #Domaines Espionne "Domaines" FichierDomainesPourTous $LesNoms #DefinitionConsensus Espionne "Definition consensus" FichierDefinitionsConsensusPourTous $LesNoms #GeneName Espionne "GeneName" FichierGeneNamePourTous $LesNoms #Localisation des proteines de ref sur le genome humain Espionne "Localisation des proteines de ref sur le genome humain" TBlastNPourTous human $LesNoms FichierExonicMapHumanPourTous prottfa tblastnhuman PROTEIN SansBlast $LesNoms FichierProttfaLocalisation $LesNoms "ProttfaLocalisation_Human" #Meilleure proteine et mrna pour chaque organisme de l'alignement Espionne "Meilleure proteine et mrna pour chaque organisme de l'alignement" FichierBestProteinAndmRNAForeachOrgaPourTous $LesNoms #Creation des fichiers tfa des proteines et des mrna de la selection de noe Espionne "Creation des fichiers tfa des proteines et des mrna de la selection de noe" FichierTFADesOrganismes [list "Homo sapiens"] mRNA $LesNoms FichierTFADesOrganismes [list "Homo sapiens"] Protein $LesNoms #Localisation du mRNA humain sur le genome => Carte exonique FichierExonicMapHumanPourTous mrnatfa_Homo_sapiens mrnatfa_blastnhuman DNA SansBlast $LesNoms FichiermRNAHsapLocalisation $LesNoms "mRNAHsapLocalisation_Human" FichierBestLocalisation $LesNoms "BestLocalisation_Human" FichierRecapitulatifPourTous $LesNoms return } proc ProtocolePeroxisome {{Nom ""}} { if {$Nom==""} { set Bornes [UneNouvelleSequencePourGscope] if {$Bornes!=""} { scan $Bornes "%s" Nom } } Espionne "PsiBlastPPourTous" PsiBlastPPourTous $Nom Espionne "DernierBlastDuPsiBlastPourTous" DernierBlastDuPsiBlastPourTous $Nom Espionne "DbClustalPourTous" DbClustalPourTous $Nom Espionne "CreeLesFichiersPhylos" CreeLesFichiersPhylos $Nom Espionne "RemplaceAccessParOrganismeDansFichierPhylo" RemplaceAccessParOrganismeDansFichierPhyloPourTous $Nom Espionne "LeonEtMacsimPourTous" LeonEtMacsimPourTous $Nom } proc ProtocoleRepeatMasker {FichierTFA Organisme {SelonMasking 1} {SelonReMasking 1}} { if {![file exists $FichierTFA] || ![EstUnFichierTFA $FichierTFA]} {return} set FileM "$FichierTFA.m" set FileRM "$FichierTFA.rm" set FileMRM "$FichierTFA.mrm" set FileMasked "$FichierTFA.masked" set OrgaDeRef $Organisme File copy -force $FichierTFA $FileMasked if {$SelonMasking && !$SelonReMasking} { Espionne "$FichierTFA -> Masking" AppendAuFichier [Fiches]/qds.log "$FichierTFA -> Masking" set SeqTFA [MasqueLesRepeatsDuFichier $FichierTFA $OrgaDeRef] if {$SeqTFA != ""} {Sauve $SeqTFA dans $FileM} else {File copy -force $FileMasked $FileM } File copy -force $FileM $FileMasked } if {!$SelonMasking && $SelonReMasking} { Espionne "$FichierTFA -> ReMasking" AppendAuFichier [Fiches]/qds.log "$FichierTFA -> ReMasking" set SeqTFA [ReMasqueLesRepeatsDuFichier $FichierTFA $OrgaDeRef] if {$SeqTFA != ""} {Sauve $SeqTFA dans $FileRM} else {File copy -force $FileMasked $FileRM} File copy -force $FileRM $FileMasked } if {$SelonMasking && $SelonReMasking} { Espionne "$FichierTFA -> Masking" AppendAuFichier [Fiches]/qds.log "$FichierTFA -> Masking" set SeqTFA [MasqueLesRepeatsDuFichier $FichierTFA $OrgaDeRef] if {$SeqTFA != ""} {Sauve $SeqTFA dans $FileM} else {File copy -force $FichierTFA $FileM} File copy -force $FileM $FileMasked Espionne "$FichierTFA -> ReMasking" AppendAuFichier [Fiches]/qds.log "$FichierTFA -> ReMasking" set SeqTFA [ReMasqueLesRepeatsDuFichier $FichierTFA $OrgaDeRef] if {$SeqTFA != ""} {Sauve $SeqTFA dans $FileRM} else {File copy -force $FichierTFA $FileRM} File copy -force $FileRM $FileMasked Espionne "$FichierTFA -> Masking & ReMasking" AppendAuFichier [Fiches]/qds.log "$FichierTFA -> Masking & ReMasking" set SeqTFA [MasqueEtReMasqueLesRepeatsDuFichier $FichierTFA] if {$SeqTFA != ""} {Sauve $SeqTFA dans $FileMRM} else {File copy -force $FichierTFA $FileMRM} File copy -force $FileMRM $FileMasked } return $FileMasked } proc ProtocoleXHDA {} { Espionne "Creation des familles:\n\tCreeLesFamillesDesSelectionnes LaTotale NoAsk\n" Espionne "Creation des bilans X-HDA:\n\tNewHDACroisesPourTous\n" Espionne "Creation du fichier pour Dpc:\n\tPourNucaPourTous\n" Espionne "Pour lancer Dpc:\n\t/biolo/secator/dpc TousLesBilans_PourNuca write_coordinates\n" Espionne "Pour repertorier les proteines ratees chez Tous:\n\tLesLoupesDeTous\nGenere 2 fichiers .parpab .parorga\n" Espionne "Pour repertorier les proteines ratees seulement chez DiaBac:\n\tLesLoupesDiaBac\nGenere 2 fichiers .parpab .parorga\n" Espionne "On peut ensuite relire les rates par PAB ou par Orga:\n\tLesLoupesDe\n" Espionne "Pour visualiser les profils de Dpc:\n\tDpcShow TousLesBilans_PourNuca.dpc OrgaOrdonnes.nuca\n" Espionne "Le Fichier demande pour avoir les orga en X sur les profils:\n\txhda\OrgaOrdonnes.nuca\n" Espionne "Pour les infos d'un cluster:\n\t InfoSurLeCluster NumeroOuPAB" } proc ProttfaAccessInFirstPlace {} { set lPAB [ListeDesPABs] foreach pab $lPAB { set fic [file join [RepertoireDuGenome] prottfa $pab] set lignes [LesLignesDuFichier $fic] set LesLignes [lreplace $lignes 0 0 ">[lindex [lindex $lignes 0] 1]"] set f [open $fic w] foreach l $LesLignes { puts $f $l } close $f } return 1 } proc ProttfaLocalisation {Nom FileExonicMap} { set FileEM $FileExonicMap if {![file exists $FileEM]} {return} set TailleFragment 100000 set LeTexte {} set LesRangs [InterrogeFichierExonicMap $FileEM LesRangs] set BestLoc "BestLoc" set InfoLoc "MonoLoc" if {1 < [llength $LesRangs]} {set InfoLoc "PolyLoc";set BestLoc "BestPolyLoc"} foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FileEM Rang $Rang Chromosome] set Contig [InterrogeFichierExonicMap $FileEM Rang $Rang Contig ] set LesContigsFrag [InterrogeFichierExonicMap $FileEM Rang $Rang ContigFragments] set nChiffresFragContig [string length [lindex $LesContigsFrag 0]] set NbExonicAreas [InterrogeFichierExonicMap $FileEM Rang $Rang NbExonicAreas] if {$NbExonicAreas <= 0} {continue} set LesRegions {} for {set i 1} {$i <= $NbExonicAreas} {incr i} { set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i nAli ] set Id [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i Identity] lappend LesRegions [list $i $nAli $Id] } set LesRegions [lsort -index 1 -real -decreasing [lsort -index 2 -real -decreasing $LesRegions]] set nAliMax [lindex [lindex $LesRegions 0] 1] set EstCeLePremier 1 foreach LaRegion $LesRegions { set Info "" if {$EstCeLePremier} {set Info $BestLoc;set EstCeLePremier 0} set ExonArea [lindex $LaRegion 0] set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea nAli ] set Id [expr [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Identity]/100] set DQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DQ ] set FQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FQ ] set DS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DS ] set FS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FS ] set Orient [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Orientation] set Sens [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Sens ] set Fragments "" if {0 < $nChiffresFragContig} { set FragmentMin [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Mini $DS $FS] / $TailleFragment)]] set FragmentMax [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Maxi $DS $FS] / $TailleFragment)]] set Fragments $FragmentMin if {$FragmentMin != $FragmentMax} {set Fragments [string trim "$FragmentMin $FragmentMax"]} } set LaLocSurLeChrom [CoordonneesSurChromosome $Contig $DS $FS $Sens] set DChrom [lindex $LaLocSurLeChrom 1] set FChrom [lindex $LaLocSurLeChrom 2] set SensChrom [lindex $LaLocSurLeChrom 3] set BandesCyto {} foreach LaBC [LesBandesCytologiquesDeLaRegion [NumeroDuChromosome $Chromosome] $DChrom $FChrom] { lappend BandesCyto [lindex $LaBC 0] } set BandesCyto [join $BandesCyto " "] set EMax "" set E "" set Ligne "$Nom\t$InfoLoc\t$EMax\t$E\t$nAliMax\t$nAli\t$Id\t$DQ\t$FQ\t$Chromosome\t$DChrom\t$FChrom\t$SensChrom\t$Contig\t$Fragments\t$DS\t$FS\t$Orient\t$Sens\t$BandesCyto\t$Info\tprottfa" lappend LeTexte $Ligne } } InterrogeFichierExonicMap unset return $LeTexte } proc PrrpDesMSF {} { global RepertoireDuGenome global ListeDeBoites if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites } foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] if { [regexp {[5-9]} [FiabiliteFonction $Nom]] } { set FichierPrrp "$RepertoireDuGenome/prrp/$Nom" if {[file exists $FichierPrrp]} { continue } set FichierClustalw "$RepertoireDuGenome/clustalw/$Nom" if {[file exists $FichierClustalw]} { PrrpDuMSF $FichierClustalw } } } } proc PrrpDuMSF {FichierMSF} { global RepertoireDuGenome set DirDesPrrp "$RepertoireDuGenome/prrp" if {[YaPABdans $FichierMSF]} { set Nom [file tail $FichierMSF] } DecortiqueUnMSF $FichierMSF LesSequencesDansLOrdre Sequences foreach NomSeq $LesSequencesDansLOrdre { set Sequence [set Sequences($NomSeq)] set NomFichier "$NomSeq[NomDe ""]" lappend ListeDeFichiers [Sauve [TexteBrutToGCG $Sequence $NomFichier] dans $NomFichier] } set MSF [AlignePar "prrp" [join $ListeDeFichiers "\n"] "Interactif" $Nom] File rename $MSF "$DirDesPrrp/$Nom" } proc Prsch {str} { global TParser set type [lindex $TParser(S) end] if {! $TParser(inKey)} {return} switch $type { GBFeature_key { if {$str ne "CDS"} { set TParser(inKey) 0 } } GBFeature_location { set TParser(currLoc) $str } GBQualifier_name { if {$str eq "protein_id"} { set TParser(readV) 1 } } GBQualifier_value { if {$TParser(readV)} { if {[regexp -nocase "$TParser(target)" $str]} { set TParser(id) $str set TParser(readV) 0 set TParser(loc) $TParser(currLoc) } } } GBSeq_sequence { set TParser(seq) $str } } } proc Prsee {name} { set ::TParser(S) [lrange $::TParser(S) 0 end-1] ;# pop } proc Prsel {name atts} { global TParser lappend TParser(S) $name ;# push if {$name eq "GBFeature_key"} { set TParser(inKey) 1 } } proc PsSsExpCongrd1RMA200 {{Qui ""} {Quoi ""}} { global PsSsExpCongrd1RMA200 set FichierRMA200 "/genomics/link/WP14/Ravi/thierry_EVI/rma_less_200.txt" if {[info exists PsSsExpCongrd1RMA200($Qui,$Quoi)]} { return $PsSsExpCongrd1RMA200($Qui,$Quoi) } if {[info exists PsSsExpCongrd1RMA200("EstCharge")]} { return "" } set PsSsExpCongrd1RMA200("EstCharge") 1 foreach Ligne [LesLignesDuFichier $FichierRMA200] { if {$Ligne==""} {continue} set LesMots [split $Ligne "\t"] ScanLaListe $LesMots Ps Bidon Call #regsub -all "/" $Ps "-OU-" Ps lappend PsSsExpCongrd1RMA200(ListOf,Ps) $Ps set PsSsExpCongrd1RMA200($Ps,Call) $Call } return [PsSsExpCongrd1RMA200 $Qui $Quoi] } proc PsSsExpCongrd1RMA40 {{Qui ""} {Quoi ""}} { global PsSsExpCongrd1RMA40 set FichierRMA40 "/genomics/link/WP14/Ravi/thierry_EVI/rma_less_40.txt" if {[info exists PsSsExpCongrd1RMA40($Qui,$Quoi)]} { return $PsSsExpCongrd1RMA40($Qui,$Quoi) } if {[info exists PsSsExpCongrd1RMA40("EstCharge")]} { return "" } set PsSsExpCongrd1RMA40("EstCharge") 1 #set FichierRMA200 "/genomics/link/WP14/Ravi/thierry_EVI/rma_less_200.txt" foreach Ligne [LesLignesDuFichier $FichierRMA40] { if {$Ligne==""} {continue} set LesMots [split $Ligne "\t"] ScanLaListe $LesMots Ps Bidon Call #regsub -all "/" $Ps "-OU-" Ps lappend PsSsExpCongrd1RMA40(ListOf,Ps) $Ps set PsSsExpCongrd1RMA40($Ps,Call) $Call } return [PsSsExpCongrd1RMA40 $Qui $Quoi] } proc PsSsExpCongrd1dChip100 {{Qui ""} {Quoi ""}} { global PsSsExpCongrd1dChip100 set FichierdChip100 "/genomics/link/WP14/Ravi/thierry_EVI/dchips_less_100.txt" if {[info exists PsSsExpCongrd1dChip100($Qui,$Quoi)]} { return $PsSsExpCongrd1dChip100($Qui,$Quoi) } if {[info exists PsSsExpCongrd1dChip100("EstCharge")]} { return "" } set PsSsExpCongrd1dChip100("EstCharge") 1 foreach Ligne [LesLignesDuFichier $FichierdChip100] { if {$Ligne==""} {continue} set LesMots [split $Ligne "\t"] ScanLaListe $LesMots Ps Bidon Call #regsub -all "/" $Ps "-OU-" Ps lappend PsSsExpCongrd1dChip100(ListOf,Ps) $Ps set PsSsExpCongrd1dChip100($Ps,Call) $Call } return [PsSsExpCongrd1dChip100 $Qui $Quoi] } proc PsSsExpCongrd1dChip500 {{Qui ""} {Quoi ""}} { global PsSsExpCongrd1dChip500 set FichierdChip500 "/genomics/link/WP14/Ravi/thierry_EVI/dchips_less_500.txt" if {[info exists PsSsExpCongrd1dChip500($Qui,$Quoi)]} { return $PsSsExpCongrd1dChip500($Qui,$Quoi) } if {[info exists PsSsExpCongrd1dChip500("EstCharge")]} { return "" } set PsSsExpCongrd1dChip500("EstCharge") 1 foreach Ligne [LesLignesDuFichier $FichierdChip500] { if {$Ligne==""} {continue} set LesMots [split $Ligne "\t"] ScanLaListe $LesMots Ps Bidon Call #regsub -all "/" $Ps "-OU-" Ps lappend PsSsExpCongrd1dChip500(ListOf,Ps) $Ps set PsSsExpCongrd1dChip500($Ps,Call) $Call } return [PsSsExpCongrd1dChip500 $Qui $Quoi] } proc PseudoToFastaAndSeq {Path} { set FileIn [open "$Path.pnb" "r"] set FileSeq [open "$Path.pnb.seq" "w"] set FileTfa [open "$Path.pnb.tfa" "w"] while { [gets $FileIn Ligne] >= 0 } { set Header $Ligne gets $FileIn Ligne puts $FileSeq $Ligne set Tfa [formatFasta $Header, $Ligne] puts $FileTfa $Tfa } } proc PsiBlast {FichierTFA {FichierPsiBlast ""} {Banque ""} {Options ""}} { if {$Banque==""} { set Banque "/catalog/blast/protall" } if {$FichierPsiBlast==""} { regsub {\.[^\.]+$} FichierTFA "" FichierPsiBlast append FichierPsiBlast ".psiblast" } if {$Options==""} { set Options "-j 1 -F T" } if {[catch { exec blastpgp -i $FichierTFA -d $Banque $Options -o $FichierPsiBlast.encours } Message]} { Espionne $Message return "" } if {[file exists $FichierPsiBlast.encours]} { file rename $FichierPsiBlast.encours $FichierPsiBlast return $FichierPsiBlast } return "" } proc PsiBlastPPourTous {{NomATraiter ""} {PsiBlastPDataBase ""}} { global RepertoireDuGenome global CommandePsiBlastPPourTous global GardeToutPsiBlastPPourTous global TestExistenceBlastPPourTous JeMeSignale set AvecPasTouche 1 if {$NomATraiter == ""} { set Liste [ListeDesPABs] } elseif {[llength $NomATraiter] > 1} { set Liste $NomATraiter } elseif {$NomATraiter=="ListeDesFusions"} { set Liste [ListeDesFusions] } else { if {[EstUnPAB $NomATraiter]} { set AvecPasTouche 0 } set Liste [list $NomATraiter] } set Repertoire "[RepertoireDuGenome]/psiblastp" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } if {[info exists CommandePsiBlastPPourTous]} { set CommandePsiBlast $CommandePsiBlastPPourTous if {[info exists GardeToutPsiBlastPPourTous]} { set GardeTout $GardeToutPsiBlastPPourTous } else { setGardeTout 0 } if {[info exists TestExistencePsiBlastPPourTous]} { set TestExistence $TestExistencePsiBlastPPourTous } else { set TestExistence 1 } } else { set GardeTout 0 set TestExistence 1 if {$PsiBlastPDataBase==""} { set PsiBlastPDataBase [LocalisePsiBlastPDataBase] } if {$PsiBlastPDataBase==""} { return "" } set j 2 set v 500 set b $v set K 0 set e 10 set F "T" set d $PsiBlastPDataBase set LesObliges " i o d j v b K e F" set MoreOptions "" foreach {Key Value} [BlastParameters] { regsub -- {^\-+} $Key "" Key if {[regexp " $Key " $LesObliges]} { set $Key $Value } else { append MoreOptions " -$Key $Value" } } set CommandePsiBlast "blastpgp -i \$FichierTFA -o \$FichierPsiBlast.encours -d $d -j $j -v $v -b $b -K $K -e $e -F $F $MoreOptions" if {[OuiOuNon "Do You want to edit the PsiBlast command ?" 0]} { set CommandePsiBlast [Entre $CommandePsiBlast] if {$CommandePsiBlast==""} { return "" } } while {[llength [glob -nocomplain "$Repertoire/*"]]> 0} { if {[OuiOuNon "Some files exist in $Repertoire\nDo I keep all of them ?"]} { set TestExistence 1 set GardeTout 1 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I replace all of them ?"]} { set TestExistence 0 set GardeTout 0 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I ask for each ?"]} { set TestExistence 1 set GardeTout 0 break } } set CommandePsiBlastPPourTous $CommandePsiBlast set GardeToutPsiBlastPPourTous $GardeTout set TestExistencePsiBlastPPourTous $TestExistence } foreach Nom $Liste { if {$AvecPasTouche && [PasTouche $Nom]} { continue } set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" set FichierPsiBlast "$Repertoire/$Nom" if { ! [file exists $FichierTFA]} { Warne "$FichierTFA does'nt exist." if {$AvecPasTouche} { FinPasTouche $Nom } continue } if {$GardeTout && [file exists $FichierPsiBlast] } { Espionne "$Nom already done" if {$AvecPasTouche} { FinPasTouche $Nom } continue } if { $TestExistence && [file exists $FichierPsiBlast] } { if {[OuiOuNon "$FichierPsiBlast already exists\nDo I keep it ?"]} { if {$AvecPasTouche} { FinPasTouche $Nom } continue } } catch {eval exec $CommandePsiBlast} if {[file exists "$FichierPsiBlast.encours"]} { file rename -force "$FichierPsiBlast.encours" $FichierPsiBlast } if {$AvecPasTouche} { FinPasTouche $Nom } Espionne $FichierPsiBlast } } proc PsiBlastPXavierPourTous {{NomATraiter ""} {PsiBlastPDataBase ""}} { global RepertoireDuGenome global CommandePsiBlastPPourTous global GardeToutPsiBlastPPourTous global TestExistenceBlastPPourTous JeMeSignale #creation du repertoire pssm (garde les pssm de chaque psiblast) if { ! [file exists "[RepertoireDuGenome]/pssm"]} { File mkdir [RepertoireDuGenome]/pssm } set AvecPasTouche 1 if {$NomATraiter == ""} { set Liste [ListeDesPABs] } elseif {[llength $NomATraiter] > 1} { set Liste $NomATraiter } elseif {$NomATraiter=="ListeDesFusions"} { set Liste [ListeDesFusions] } else { if {[EstUnPAB $NomATraiter]} { set AvecPasTouche 0 } set Liste [list $NomATraiter] } set Repertoire "[RepertoireDuGenome]/psiblastp" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } if {[info exists CommandePsiBlastPPourTous]} { set CommandePsiBlast $CommandePsiBlastPPourTous if {[info exists GardeToutPsiBlastPPourTous]} { set GardeTout $GardeToutPsiBlastPPourTous } else { set GardeTout 0 } if {[info exists TestExistencePsiBlastPPourTous]} { set TestExistence $TestExistencePsiBlastPPourTous } else { set TestExistence 1 } } else { set GardeTout 0 set TestExistence 1 if {$PsiBlastPDataBase==""} { set PsiBlastPDataBase [LocalisePsiBlastPDataBase] } if {$PsiBlastPDataBase==""} { return "" } set CommandePsiBlast "blastpgp -i \$FichierTFA -d $PsiBlastPDataBase -j 1 -B \$FichierMSF -C \$FichierPSSM -R \$FichierPSSM -o \$FichierPsiBlast.encours" # -F T if {[OuiOuNon "Do You want to edit the PsiBlast command ?" 0]} { set CommandePsiBlast [Entre $CommandePsiBlast] if {$CommandePsiBlast==""} { return "" } } while {[llength [glob -nocomplain "$Repertoire/*"]]> 0} { if {[OuiOuNon "Some files exist in $Repertoire\nDo I keep all of them ?"]} { set TestExistence 1 set GardeTout 1 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I replace all of them ?"]} { set TestExistence 0 set GardeTout 0 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I ask for each ?"]} { set TestExistence 1 set GardeTout 0 break } } set CommandePsiBlastPPourTous $CommandePsiBlast set GardeToutPsiBlastPPourTous $GardeTout set TestExistencePsiBlastPPourTous $TestExistence } foreach Nom $Liste { if {$AvecPasTouche && [PasTouche $Nom]} { continue } set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" set FichierMSF "$RepertoireDuGenome/alignClustal/$Nom" set FichierPSSM "$RepertoireDuGenome/pssm/$Nom" set FichierPsiBlast "$Repertoire/$Nom" if { ! [file exists $FichierTFA]} { Warne "$FichierTFA does'nt exist." if {$AvecPasTouche} { FinPasTouche $Nom } continue } if {$GardeTout && [file exists $FichierPsiBlast] } { Espionne "$Nom already done" if {$AvecPasTouche} { FinPasTouche $Nom } continue } if { $TestExistence && [file exists $FichierPsiBlast] } { if {[OuiOuNon "$FichierPsiBlast already exists\nDo I keep it ?"]} { if {$AvecPasTouche} { FinPasTouche $Nom } continue } } #Espionne $CommandePsiBlast #Espionne "FichierTFA: $FichierTFA" #Espionne $PsiBlastPDataBase #Espionne "FichierMSF: $FichierMSF" #Espionne "FichierPSSM: $FichierPSSM" catch {eval exec $CommandePsiBlast} if {[file exists "$FichierPsiBlast.encours"]} { file rename -force "$FichierPsiBlast.encours" $FichierPsiBlast } if {$AvecPasTouche} { FinPasTouche $Nom } Espionne $FichierPsiBlast } } proc PubMedProcessXML {Lxml Lid} { #Espionne $Lxml set RId [dom parse $Lxml] set doc [$RId documentElement] array set T [list] foreach aP [$doc selectNodes //PubmedArticleSet/PubmedArticle] { set mD [$aP selectNodes ./MedlineCitation] set id [$mD selectNode string(./PMID)] set aT [$mD selectNodes ./Article] set jrn [$aT selectNodes ./Journal] set jrI [$jrn selectNodes ./JournalIssue] set T($id,Volume) [$jrI selectNode string(./Volume)] set T($id,Issue) [$jrI selectNode string(./Issue)] set T($id,PubYear) [$jrI selectNode string(./PubDate/Year)] set T($id,PubMonth) [$jrI selectNode string(./PubDate/Month)] set T($id,JrnName) [$jrn selectNode string(./Title)] set T($id,JrnAbbv) [$jrn selectNode string(./ISOAbbreviation)] set T($id,Title) [$aT selectNode string(./ArticleTitle)] set T($id,Pages) [$aT selectNode string(./Pagination/MedlinePgn)] set T($id,Abstract) [$aT selectNode string(./Abstract/AbstractText)] # Authors set aL [$aT selectNodes ./AuthorList] set LlastName [list] ; set LfirstName [list] set Laffi [list] foreach aU [$aL selectNodes ./Author] { lappend LlastName [$aU selectNode string(./LastName)] lappend LfirstName [$aU selectNode string(./ForeName)] set affi [list] set aF [$aU selectNodes ./AffiliationInfo] if {$aF ne ""} { foreach aFi $aF { lappend affi [$aFi selectNode string(./Affiliation)] } } lappend Laffi $affi } foreach l $LlastName f $LfirstName a $Laffi { lappend T($id,LAuthors) [list $l $f $a] } # Keywords/MeSH set LkeyP [list] ; set LkeyS [list] set mL [$mD selectNodes ./MeshHeadingList] if {$mL != {} } { foreach mN [$mL selectNodes ./MeshHeading] { set dN [$mN selectNodes ./DescriptorName] set mes [$dN selectNode string(.)] set maj [$dN getAttribute MajorTopicYN N] if {$maj eq "Y"} { lappend LkeyP $mes } else { lappend LkeyS $mes } } } lappend T($id,MeSHMajor) {*}$LkeyP lappend T($id,MeSHMinor) {*}$LkeyS } $RId delete update #parray T return [array get T] exit } proc Pubmed {PubmedId {What ""}} { if {$What==""} { set What "GetText" if {[PourWscope]} { set What "GetHtml" } } set PubmedId [join $PubmedId ","] regsub -all " +" $PubmedId "," PubmedId set Url http://www.ncbi.nlm.nih.gov/pubmed/$PubmedId?report=medline&format=text if {[catch {set Texte [ContenuDuFichier $Url]} Message]} { return "ErrorPubmed: I got the message $Message" } if {$What=="GetHtml"} { return $Texte } set BonTexte "" if {[regexp {

    (.*)
    } $Texte Match BonTexte]} { set Texte $BonTexte } if {$What=="GetText"} { return $BonTexte } if {$What=="GetList"} { return [split $BonTexte "\n"] } append BonTexte "\nZZZZZZ - Bidon" set OldK "" foreach Ligne [split $BonTexte "\n"] { if {[regexp {^([A-Z]+) *\- (.*)} $Ligne Match K Info]} { if {$OldK!=""} { lappend LesInfosDe($OldK) $CurrentInfo } set CurrentInfo $Info set OldK $K continue } append CurrentInfo " [string trim $Ligne]" } if {[info exists LesInfosDe(TI)] } { set LesInfosDe(Title) [lindex $LesInfosDe(TI) 0] } if {[info exists LesInfosDe(AB)] } { set LesInfosDe(Abstract) [lindex $LesInfosDe(AB) 0] } if {[info exists LesInfosDe(DP)] } { set LesInfosDe(Date) [lindex $LesInfosDe(DP) 0] } if {[info exists LesInfosDe(SO)] } { set LesInfosDe(Journal) [lindex $LesInfosDe(SO) 0] } if {[info exists LesInfosDe(AU)] } { set LesInfosDe(Authors) [join $LesInfosDe(AU) ";"] } if {[info exists LesInfosDe(FAU)]} { set LesInfosDe(FullAuthors) [join $LesInfosDe(FAU) ";"] } if {[info exists LesInfosDe(AU)] } { set LesInfosDe(FirstAuthor) [lindex $LesInfosDe(AU) 0] } if {[info exists LesInfosDe(AU)] } { set LesInfosDe(LastAuthor) [lindex $LesInfosDe(AU) end] } if {[info exists LesInfosDe(FAU)]} { set LesInfosDe(FirstFullAuthor) [lindex $LesInfosDe(FAU) 0] } if {[info exists LesInfosDe(FAU)]} { set LesInfosDe(LastFullAuthor) [lindex $LesInfosDe(FAU) end] } if {[info exists LesInfosDe($What)]} { return $LesInfosDe($What) } return "" } proc PubmedField {Pmid Field} { array set TInfo [eFetchREST pubmed $Pmid] parray TInfo if { ! [info exists TInfo($Pmid,$Field)]} { return "" } return $TInfo($Pmid,$Field) } proc PullFromStack {{OtherStack ""}} { return [ValFromStack $OtherStack Pull] } proc PushOnStack {Val {OtherStack ""}} { global OurCurrentStack OurStacks if {$OtherStack!=""} { set OurCurrentStack $OtherStack } if {! [info exists OurCurrentStack] || $OurCurrentStack==""} { set OurCurrentStack [NomDe Stack] } if { ! [info exists OurStacks($OurCurrentStack,StackHeight)]} { set OurStacks($OurCurrentStack,StackHeight) 0 } set h [set OurStacks($OurCurrentStack,StackHeight)] incr h set OurStacks($OurCurrentStack,$h) $Val set OurStacks($OurCurrentStack,StackHeight) $h return $h } proc PutPipe {Path} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "PutPipe-$timestamp : Start" set FileIn [open "$Path.csv" "r"] set FileOut [open "$Path.pipe.csv" "w"] while { [gets $FileIn Ligne] >= 0 } { # set Lili [split $Ligne "\t "] ScanLaListe $Ligne ID ChromosomeH StartH EndH OrientationH SequenceH ScoreH accessIn txStartIn txEndIn strandIn X1 X2 X3 X4 X5 X6 idIn name2In X7 X8 X9 X10 X11 descriptionIn typegeneIn pseudogeneIn spanIn spanlocIn confidenceIn accessAP txStartAP txEndAP strandAP X12 X13 X14 X15 X16 X17 idAP name2AP mRNAAP spIDAP spDisplayIDAP geneSymbolAP protAccAP descriptionAP typegeneAP pseudogeneAP X18 X19 X20 Distance1 Avis1 access txStart txEnd strand X18 X19 X20 X21 X22 X23 id2 name2 mRNA spID spDisplayID geneSymbol protAcc description typegene pseudogene X24 X25 X26 Distance2 Avis2 set LigneOut "$ID\tChromosomeH\t$StartH\t$EndH\t$OrientationH\t$SequenceH\t$ScoreH\t$accessIn\t$txStartIn $txEndIn\t$strandIn\t$X1\t$X2\t$X3\t$X4\t$X5\t$X6\t$idIn\t$name2In\t$X7\t$X8\t$X9\t$X10\t$X11\t$descriptionIn\t$typegeneIn\t$pseudogeneIn\t$spanIn $spanlocIn $confidenceIn $accessAP $txStartAP $txEndAP $strandAP $X12 $X13 $X14 $X15 $X16 $X17 $idAP $name2AP\t$mRNAAP\t$spIDAP\t$spDisplayIDAP\t$geneSymbolAP\t$protAccAP\t$descriptionAP\t$typegeneAP\t$pseudogeneAP\t$X18\t$X19\t$X20\t$Distance1\t$Avis1\t$access\t$txStart\t$txEnd\t$strand\t$X18\t$X19\t$X20\t$X21\t$X22\t$X23\t$id2\t$name2\t$mRNA $spID\t$spDisplayID\t$geneSymbol\t$protAcc\t$description\t$typegene\t$pseudogene\t$X24\t$X25\t$X26\t$Distance2\t$Avis2" puts $FileOut $LigneOut } close $FileIn close $FileOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "PutPipe-$timestamp : End" } proc PutsDuTaisToi {args} { switch -regexp -- [lindex $args 0] { {\-nonewline} { return } {file[0-9]+} - {sock[0-9]+} { rename ::puts ::PutsDuTaisToi rename ::putsCmdOriginale ::puts puts {*}$args rename ::puts ::putsCmdOriginale rename ::PutsDuTaisToi ::puts } default { return } } return } proc Py {} { foreach Double [Pythonerie ListOf Double] { } } proc PyroLike {Orga} { if {[regexp "paby|phor|pfur|txxx|pkod|psp|pwoe|thyd" $Orga]} { return 1 } return 0 } proc Pythonerie {{Qui ""} {Quoi ""}} { global Pythonerie if {[info exists Pythonerie($Qui,$Quoi)]} { return $Pythonerie($Qui,$Quoi) } if {[info exists Pythonerie("EstCharge")]} { return "" } set Pythonerie("EstCharge") 1 set RePy "/home/ripp/blam/cgi-bin" NousAllonsAuBoulot $RePy foreach FiPy [lsort [glob -nocomplain *.py]] { regsub {.py$} $FiPy "" Fi lappend Pythonerie(ListOf,FiPy) $FiPy lappend Pythonerie(ListOf,Fi) $Fi foreach Ligne [LesLignesDuFichier $FiPy] { if {[regexp {import ([a-zA-Z]+)} $Ligne Match Imported]} { lappend Pythonerie($Fi,imports) $Imported lappend Pythonerie($Imported,importedfrom) $Fi } if {[regexp {from ([a-zA-Z]+) } $Ligne Match Imported]} { lappend Pythonerie($Fi,imports) $Imported lappend Pythonerie($Imported,importedfrom) $Fi } if {[regexp {^def ([a-zA-Z]+) *\(} $Ligne Match Def]} { lappend Pythonerie(ListOf,Def) $Def lappend Pythonerie($Def,Fi) $Fi lappend Pythonerie($Def,args) $Ligne } } } set Pythonerie(ListOf,Def) [lsort -unique $Pythonerie(ListOf,Def)] foreach Def $Pythonerie(ListOf,Def) { # Espionne "$Def [llength $Pythonerie($Def,Fi)]" if {[llength $Pythonerie($Def,Fi)]>1} { lappend Pythonerie(ListOf,Double) $Def Espionne "$Def : $Pythonerie($Def,Fi)" } } OnRevientDuBoulot Espionne "" return [Pythonerie $Qui $Quoi] } proc QDrag {x y} { set W $::pgl(width) set H $::pgl(height) set lQuat [trackball [expr {(2.0*$::BQx - $W) / $W}] [expr {($H - 2.0*$::BQy) / $H}] [expr {(2.0*$x - $W) / $W}] [expr {($H - 2.0*$y) / $H}]] set ::BQx $x set ::BQy $y set ::cQuat [add_quats $lQuat $::cQuat] #update $::pgl(wogl) postredisplay return $lQuat } proc QGQ {args} { return [QuestionDeScience "GeneQuid" "ret [join $args { }]"] } proc QfO {{Qui ""} {Quoi ""}} { global QfO if {[info exists QfO($Qui,$Quoi)]} { return $QfO($Qui,$Quoi) } if {[info exists QfO("EstCharge")]} { if {[info exists QfO($Qui,TaxId)]} { set TaxId $QfO($Qui,TaxId) if {[info exists QfO($TaxId,$Quoi)]} { return $QfO($TaxId,$Quoi) } } return "" } set QfO("EstCharge") 1 set QfO(FileName,) "[QfO_Dir]/README" foreach F [lsort [glob "[QfO_Dir]/*/*"]] { set Queue [file tail $F] if { ! [regexp {^[^_]+_([0-9]+)\.fasta$} $Queue Match OX] } { continue } set QfO($OX,Fasta) $F lappend QfO(ListOf,Fasta) $F } set OnAttendProteomeID 1 set OnEstDansProteomeID 0 foreach Ligne [LesLignesDuFichier $QfO(FileName,)] { if {$OnAttendProteomeID} { if { ! [regexp {^Proteome_ID Tax_ID} $Ligne] } { continue } set OnAttendProteomeID 0 set OnEstDansProteomeID 1 continue } if {$OnEstDansProteomeID && [string trim $Ligne]==""} { break } set LesMots [LesMotsDeLaLigne $Ligne] lassign $LesMots ProteomeId TaxId OsCode NbProt NbAdd set SpeciesName [join [lrange $LesMots 6 end] " "] scan $SpeciesName "%s %s" G E set OS "${G}_$E" set Fasta $QfO($TaxId,Fasta) set QfO($TaxId,ProteomeId) $ProteomeId set QfO($TaxId,OsCode) $OsCode set QfO($TaxId,NbProt) $NbProt set QfO($TaxId,NbAdd) $NbAdd set QfO($TaxId,SpeciesName) $SpeciesName set QfO($TaxId,OS) $OS set QfO($ProteomeId,TaxId) $TaxId set QfO($TaxId,TaxId) $TaxId set QfO($OsCode,TaxId) $TaxId set QfO($SpeciesName,TaxId) $TaxId set QfO($OS,TaxId) $TaxId set QfO($Fasta,TaxId) $TaxId lappend QfO(ListOf,TaxId) $TaxId lappend QfO(ListOf,ProteomeId) $ProteomeId lappend QfO(ListOf,SpeciesName) $SpeciesName lappend QfO(ListOf,OS) $OS lappend QfO(ListOf,NbProt) $NbProt lappend QfO(ListOf,NbAdd) $NbAdd incr QfO(NumberOf,Proteins) $NbProt } return [QfO $Qui $Quoi] } proc QfO_BlastbaseDir {} { return "/genomics/link/QfO/blastbase" } proc QfO_CreateBlastbase {} { set BlastbaseDir [QfO_BlastbaseDir] file mkdir $BlastbaseDir NousAllonsAuBoulot $BlastbaseDir exec cat [QfO_ProteomesDir]/* > QfO /biolo/blast/bin/makeblastdb -in QfO -out QfO -hash_index -parse_seqids -dbtype prot file rename formatdb.log QfO.formatdb.log OnRevientDuBoulot return "$BlastbaseDir/Qfo" } proc QfO_CreateProteomesWithOX {} { set LesNouveaux {} set ProteomesDir [QfO_ProteomesDir] file mkdir $ProteomesDir foreach TaxId [QfO ListOf TaxId] { set OX $TaxId set OS [QfO $TaxId OS] set FastaFile [QfO $TaxId Fasta] Espionne $FastaFile set Queue [file tail $FastaFile] set TfasFile "$ProteomesDir/${OS}_$OX" set LeTfas {} foreach Ligne [LesLignesDuFichier $FastaFile] { if {[regexp ">" $Ligne]} { append Ligne " OX=$OX" } lappend LeTfas $Ligne } Espionne $TfasFile lappend LesNouveaux [SauveLesLignes $LeTfas dans $TfasFile] } return $LesNouveaux } proc QfO_Dir {} { return "/genomics/link/QfO" } proc QfO_ProteomesDir {} { return "/genomics/link/QfO/proteomes" } proc QfO_Wup {} { #rR QfO #rR Quest for Orthologs http://www.ebi.ac.uk/reference_proteomes #rR C'est un site qui fournit de beaux proteomes complets avec les proteines de référence, sans tous les variants ... :) #rR Voici la procédure manuelle #rR cd QfO_Dir #rR ramener ftp://ftp.ebi.ac.uk/pub/databases/reference_proteomes/QfO/QfO_release_2015_04.tar.gz #rR gunzip QfO_release_2015_04.tar #rR gscope CreateProteomesWithOX #rR gscope QfO_CreateBlastbase #rR C'est tout :) } proc Qsub {CommandeOuFichier {GetWhat ""} {O ""} {E ""} {Q ""} {Options ""}} { if {[regexp {^(sh|csh|bash|tcsh|tclsh|java) } $CommandeOuFichier]} { set CommandeOuFichier "-b y $CommandeOuFichier" } if {[regexp -- {^\-b y } $CommandeOuFichier]} { append Options " -b y" regsub -- {^\-b y } $CommandeOuFichier "" CommandeOuFichier } set Binary [regexp -- {-b y} $Options] set Notice [expr ! [regexp -nocase "NoNotice" $GetWhat]] regsub -nocase "NoNotice" $GetWhat "" GetWhat if {$GetWhat==""} { set GetWhat "GetAll" } if {$Q==""} { set Q "qsub" } if { ! $Binary && [regexp {[ ;]} $CommandeOuFichier]} { set ScriptFile "[TmpFile Qsub].tcsh" Sauve $CommandeOuFichier dans $ScriptFile file attribute $ScriptFile -permissions 0775 if {$O==""} { regsub ".tcsh$" $ScriptFile ".log" O } } else { set ScriptFile $CommandeOuFichier } if {$O==""} { set O "[TmpFile Qsub].log" } if {$E==""} { set E $O } if {$E=="Oerror"} { regsub ".log$" $O "_error.log" E } set QsubCommand "\"source /usr/N1GE6/default/common/settings.csh ; $Q -l arch=lx24-amd64 -o $O -e $E -cwd -V $Options $ScriptFile\"" if { ! [regexp -nocase "NoEval" $GetWhat]} { if {$Notice} { AppendAuFichier $O "[Date _] I run $Q\n$QsubCommand\n**********\n" } set Retour [eval exec tcsh -c $QsubCommand] } if {[regexp -nocase "GetCommand" $GetWhat] } { return $QsubCommand } if {[regexp -nocase "GetO" $GetWhat] } { return $O } if {[regexp -nocase "GetE" $GetWhat] } { return $E } if {[regexp -nocase "GetAll" $GetWhat] } { return [list $O $E $QsubCommand $Retour] } return $Retour } proc QuEstCeQuIlManque {} { set Rep [RepertoireDuGenome] foreach Nom [ListeDesPABs] { if {![file exists "$Rep/prottfa/$Nom"]} {continue} if {![file exists "$Rep/blastp/$Nom" ]} { Espionne "$Nom does not exist" continue } } } proc QualiteDesSequences {} { set n 0; set Sn 0;set Sa 0;set St 0;set Sg 0;set Sc 0 set PercentNMini 1; set PercentNMaxi 0.000001 foreach Nom [ListeDesPABs] { set FichierTFA "[RepertoireDuGenome]/nuctfa/$Nom" if {![file exists $FichierTFA]} {FaireLire "$FichierTFA n existe pas"} incr n set SeqTFA [QueLaSequenceDuFichierTFA $FichierTFA] set L [string length $SeqTFA] regsub -all -nocase "N" $SeqTFA "" SeqTFASansN set LSansN [string length $SeqTFASansN] set NbN [expr $L-$LSansN] set PercentN [expr $NbN*1.0/$L] set Sn [expr $PercentN + $Sn] #min max if {$PercentN<$PercentNMini} {set PercentNMini $PercentN} if {$PercentN>$PercentNMaxi} {set PercentNMaxi $PercentN} # regsub -all -nocase "A" $SeqTFA "" SeqTFASansA set LSansA [string length $SeqTFASansA] set NbA [expr $L-$LSansA] set PercentA [expr $NbA*1.0/$L] set Sa [expr $PercentA + $Sa] # regsub -all -nocase "T" $SeqTFA "" SeqTFASansT set LSansT [string length $SeqTFASansT] set NbT [expr $L-$LSansT] set PercentT [expr $NbT*1.0/$L] set St [expr $PercentT + $St] # regsub -all -nocase "G" $SeqTFA "" SeqTFASansG set LSansG [string length $SeqTFASansG] set NbG [expr $L-$LSansG] set PercentG [expr $NbG*1.0/$L] set Sg [expr $PercentG + $Sg] # regsub -all -nocase "C" $SeqTFA "" SeqTFASansC set LSansC [string length $SeqTFASansC] set NbC [expr $L-$LSansC] set PercentC [expr $NbC*1.0/$L] set Sc [expr $PercentC + $Sc] } set PercentNMoyen [expr 100*$Sn/$n] set PercentAMoyen [expr 100*$Sa/$n] set PercentTMoyen [expr 100*$St/$n] set PercentGMoyen [expr 100*$Sg/$n] set PercentCMoyen [expr 100*$Sc/$n] return "N:$PercentNMoyen PercentNmini: $PercentNMini PercentNMaxi: $PercentNMaxi A:$PercentAMoyen T:$PercentTMoyen G:$PercentGMoyen C:$PercentCMoyen" } proc Quartiles {Liste} { set ListeTriee [lsort -real $Liste] set NbElements [llength $ListeTriee] set LesQuartiles [list] puts "Effectif: $NbElements" lappend LesQuartiles [lindex $ListeTriee 0] if {[expr $NbElements %4]} { lappend LesQuartiles [lindex $ListeTriee [expr $NbElements/4]] } else { set MedianePlus1 [lindex $ListeTriee [expr $NbElements/4]] set MedianeMoins1 [lindex $ListeTriee [expr ($NbElements/4)-1]] lappend LesQuartiles [expr ($MedianePlus1+$MedianeMoins1)*1.0/2] } if {[expr $NbElements %2]} { lappend LesQuartiles [lindex $ListeTriee [expr $NbElements/2]] } else { set MedianePlus1 [lindex $ListeTriee [expr $NbElements/2]] set MedianeMoins1 [lindex $ListeTriee [expr ($NbElements/2)-1]] lappend LesQuartiles [expr ($MedianePlus1+$MedianeMoins1)*1.0/2] } if {[expr ($NbElements*3) %4]} { lappend LesQuartiles [lindex $ListeTriee [expr ($NbElements*3)/4]] } else { set MedianePlus1 [lindex $ListeTriee [expr ($NbElements*3)/4]] set MedianeMoins1 [lindex $ListeTriee [expr ($NbElements*3/4)-1]] lappend LesQuartiles [expr ($MedianePlus1+$MedianeMoins1)*1.0/2] } lappend LesQuartiles [lindex $ListeTriee end] puts "Min: [lindex $LesQuartiles 0]" puts "Max: [lindex $LesQuartiles end]" puts "Mediane: [lindex $LesQuartiles 2]" puts "Quartile1: [lindex $LesQuartiles 1]" puts "Quartile3: [lindex $LesQuartiles 3]" return $LesQuartiles } proc QueDitAful {Nom} { global RepertoireDuGenome global KanvaCourant scan [MeilleurAful $Nom] "%s %s %f %s" AF AFok PN Raison if {$AFok} { set ListeDesDonnees [DonneesAful $AF] if { $ListeDesDonnees == {} } { set Message "$AF $PN" return 0 } else { set Message "$AF $PN\n[join $ListeDesDonnees "\n"]" } } else { set Message "$AF $PN $Raison" return 0 } # if {[FiabiliteFonction $Nom] < 7} { return 0 } set Fenetre [AfficheVariable "$Message\n\n[ContenuDuFichier $RepertoireDuGenome/infos/$Nom]" "GrandeLargeur"] set DEs [ExtraitInfo $Nom "DE"] set LesDEs [split $DEs "/"] set GNs [ExtraitInfo $Nom "GN"] set LesGNs [split $GNs "/"] scan [lindex $ListeDesDonnees 0] "%s %s %s %s" AF RoleFamille HomologueDuAful GNduAful set ListeDesMots [split [lindex $ListeDesDonnees 0] " "] set DEduAful [join [lrange $ListeDesMots 4 end] " "] set ListeDesMots [split [lindex $ListeDesDonnees 1] "/"] set StringRoleFamille [join [lrange $ListeDesMots 1 2] "/"] if {[info exists KanvaCourant]} { RepereBox "Nom: $Nom" $KanvaCourant "SansInforme" } set ValiDE "$DEduAful" set ValiGN "$GNduAful" set ValiCF "$RoleFamille / $StringRoleFamille" set Action [ChoixParmi [list "Aful CF DE GN" "Aful CF DE " "Aful CF GN" "Aful CF " "Autres choix ..." "Abandonne ce [PreFixe]" ]] switch $Action { "Aful CF DE GN" { Informe $Nom "ValiDE: $ValiDE\nValiGN: $ValiGN\nValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Aful CF GN" { Informe $Nom "ValiGN: $ValiGN\nValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Aful CF DE " { Informe $Nom "ValiDE: $ValiDE\nValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Aful CF " { Informe $Nom "ValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Abandonne ce [PreFixe]" { catch { $Fenetre.buttons.dismiss invoke } return 1 } "Autres choix ..." { set YaCF 0 set ValiDE [ChoixParmi [concat $LesDEs [list "$DEduAful"] "EditInfo"]] if {$ValiDE != ""} { if {$ValiDE == "EditInfo"} { Informe $Nom } else { if {$ValiDE == $DEduAful} { Informe $Nom "ValiDE: $ValiDE\nValiCF: $ValiCF" set YaCF 1 } else { Informe $Nom "ValiDE: $ValiDE" } } } set ValiGN [ChoixParmi [concat $LesGNs $GNduAful "EditInfo"]] if {$ValiGN != ""} { if {$ValiGN == "EditInfo"} { Informe $Nom } else { if {$ValiGN == $GNduAful} { Informe $Nom "ValiGN: $ValiGN\nValiCF: $ValiCF" set YaCF 1 } else { Informe $Nom "ValiGN: $ValiGN" } } } if { ! $YaCF } { Informe $Nom "ValiCF: $ValiCF" } catch { $Fenetre.buttons.dismiss invoke } return 1 } } $Fenetre.buttons.dismiss invoke return 0 } proc QueDitCohen {Nom} { global RepertoireDuGenome set FichierCohen "$RepertoireDuGenome/cohen/$Nom" if {! [file exists $FichierCohen] } { FaireLire "Cohen ne dit rien" ; return "" } return [AfficheVariable [ContenuDuFichier $FichierCohen] "AvecRien"] } proc QueDitYvan {Nom} { global LesLignesDeYvan global RepertoireDuGenome if {! [info exists LesLignesDeYvan] } { set LesLignesDeYvan [LesLignesDuFichier "$RepertoireDuGenome/Yvan/Yvan_la_totale.txt"] } set i [lsearch -regexp $LesLignesDeYvan $Nom] if { $i == -1 } { set Message "Yvan ne dit rien" } else { set Message [join [lrange $LesLignesDeYvan [expr $i-1] [expr $i+1]] "\n"] } AfficheVariable "$Message\n\n[ContenuDuFichier $RepertoireDuGenome/infos/$Nom]" "GrandeLargeur" return $Message } proc QueFaitLeBouton {Bouton} { set LesActions {} foreach Sequence {<1> <2> <3> } { set Action {} catch {set Action [bind $Bouton $Sequence]} if {$Action == {} } { continue } lappend LesActions "$Sequence $Action" } return $LesActions } proc QueFaitOn {} { global env return "[set env(GSCOPEDIR)] [set env(REPERTOIREDUGENOME)]" } proc QueFontLesBoutonsDe {w} { set LesActions [list " "] foreach Bouton [LesBoutonsDeLaFrame $w.buttons] { foreach SeqAct [QueFaitLeBouton $Bouton] { lappend LesActions "$Bouton $SeqAct" } } Espionne [join $LesActions "\n"] # ShowText [join $LesActions "\n"] "AvecCallProc" } proc QueLaSequence {TFA} { set Seq [join [lrange [split $TFA "\n"] 1 end] ""] regsub -all {[ 0-9\.]} $Seq "" Seq return $Seq } proc QueLaSequenceADNDuAccessRefseq {Access} { set Texte [Getz $Access refseq] return [QueLaSequenceADNDuTexteGenbank $Texte] } proc QueLaSequenceADNDuTexteGenbank {Texte} { return QueLaSequenceDuTexteGenbank $Texte } proc QueLaSequenceDesBanques {BanqueId {Access ""}} { set EMBL [SequenceDesBanques $BanqueId $Access "" "OnVeutEMBL"] return [QueLaSequenceDuTexteEMBL $EMBL] } proc QueLaSequenceDesBanquesDeLaListe {Liste} { set Liste [split $Liste " ,;\n\t"] set LeResultat {} foreach Access $Liste { set Seq [QueLaSequenceDesBanques $Access] regsub -all -nocase {[^a-z]} $Seq "" Seq lappend LeResultat "$Access $Seq" } return $LeResultat } proc QueLaSequenceDuAlias {Alias {Rep ""}} { set Nom [NomDuAlias $Alias] return [QueLaSequenceDuPAB $Nom $Rep] } proc QueLaSequenceDuEMBL {Fichier} { return [QueLaSequenceDuFichierEMBL $Fichier] } proc QueLaSequenceDuFichierEMBL {Fichier} { return [QueLaSequenceDuTexteEMBL [ContenuDuFichier $Fichier]] } proc QueLaSequenceDuFichierGenbank {Fichier} { return [QueLaSequenceDuTexteGenbank [ContenuDuFichier $Fichier]] } proc QueLaSequenceDuFichierTFA {Fichier {MergeTFAs ""}} { return [QueLaSequenceDuTexteTFA [ContenuDuFichier $Fichier] $MergeTFAs] } proc QueLaSequenceDuPAB {Nom {Rep ""}} { set FichierTFA [GscopeFile $Nom $Rep] if {[FileAbsent $FichierTFA]} { return "" } return [QueLaSequenceDuFichierTFA $FichierTFA] } proc QueLaSequenceDuTFA {Fichier {MergeTFAs ""}} { return [QueLaSequenceDuFichierTFA $Fichier $MergeTFAs] } proc QueLaSequenceDuTexteEMBL {Texte} { set TFA [SequenceFormatTFA $Texte "" "embl"] return [QueLaSequenceDuTexteTFA $TFA] } proc QueLaSequenceDuTexteGenbank {Texte} { set OnAttendOrigine 1 foreach Ligne [split $Texte "\n"] { if {$OnAttendOrigine} { if {[regexp {^ORIGIN} $Ligne]} { set OnAttendOrigine 0 ; continue } continue } lappend LesLignes $Ligne } if {$OnAttendOrigine} { FaireLire "No sequence in the Genbank Texte\n\$Texte" return "" } set Seq [join $LesLignes ""] if {[regexp -nocase {[^[0-9 a-z/]} $Seq]} { FaireLire "Bad sequence in the Genbank Texte\n\$Texte" return "" } regsub -all {[^a-z]} $Seq "" Seq return $Seq } proc QueLaSequenceDuTexteTFA {Texte {MergeTFAs ""}} { if {$MergeTFAs==""} { set MergeTFAs "FirstOnly" } if {$MergeTFAs=="MergeTFAs"} { set Merge 1 ; set FirstOnly 0 ; set ListOfTxt 0 } if {$MergeTFAs=="FirstOnly"} { set Merge 0 ; set FirstOnly 1 ; set ListOfTxt 0 } if {$MergeTFAs=="ListOfTxt"} { set Merge 0 ; set FirstOnly 0 ; set ListOfTxt 1 } set LesSequences {} set Sequence "" set DejaVuChevron 0 foreach Ligne [split $Texte "\n"] { if {[regexp ">" $Ligne]} { if {$Merge} { continue } if {$FirstOnly && $DejaVuChevron} { return $Sequence } if {$ListOfTxt && $DejaVuChevron} { lappend LesSequences $Sequence set Sequence "" } set DejaVuChevron 1 continue } regsub -nocase -all -- {[^a-z\*\.\-]} $Ligne "" Ligne append Sequence $Ligne } if { ! $ListOfTxt} { return $Sequence } lappend LesSequences $Sequence return $LesSequences } proc QueLePremierGCG {Texte} { scan $Texte "%s" PremierMot set Prochain "\n$PremierMot" set iProchain [string first $Prochain $Texte] if {$iProchain<0} { return $Texte } return [string range $Texte 0 [incr iProchain -1]] } proc QueLesHumanDeMatch {} { set FichierIn [open "matrix.dat" "r"] set FichierOut [open "human.sub" "w"] set oldLigneOut "" while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne keyword Reste if {$keyword == "ID"} { set LigneOut $Reste } if {[regexp {human} $Ligne] && $oldLigneOut != $LigneOut} { puts $FichierOut $LigneOut set oldLigneOut $LigneOut } } close $FichierIn close $FichierOut } proc QueLesHumanDePrf {} { set FichierHumanPRF [open "human.sub" "r"] set FichierOut [open "human.prf" "w"] while { [gets $FichierHumanPRF IdHuman] >=0 } { set FichierToutPRF [open "VertebresOptimises2.prf" "r"] while { [gets $FichierToutPRF LigneToutPRF] >=0 } { ScanLaListe $LigneToutPRF Score1 Score2 Score3 AC ID if {$IdHuman == $ID} { puts $FichierOut $LigneToutPRF } } close $FichierToutPRF } close $FichierHumanPRF close $FichierOut } proc QueLesIntergenes {Path} { set FileIn [open "$Path.bidir" "r"] set FileOut [open "$Path.Intergenes.bidir" "w"] set SuperLigne "" set ListeDeSequences {} set ListeDesEntetes {} set I 0 set J 0 while { [gets $FileIn Ligne] >= 0 } { if {[string range $Ligne 0 0] != ">"} { regsub -all -nocase {\n} $Ligne "" Ligne set SuperLigne "$SuperLigne$Ligne" #Espionne $SuperLigne } else { #Espionne $SuperLigne if { $I > 0 } { lappend ListeDeSequences $SuperLigne } lappend ListeDesEntetes $Ligne set SuperLigne "" incr I } } foreach Sequence $ListeDeSequences { Espionne $Sequence incr J set Len [string length $Sequence] set Start 399 set End [expr $Len - 399] set Intergene [string range $Sequence $Start $End] set Header [lindex $ListeDesEntetes $J] set Pouet [formatFasta "$Header" "$Intergene"] puts $FileOut $Pouet } close $FileIn close $FileOut } proc QueLesUniquesMappesToBed {Path} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|QueLesUniquesMappesToBed : Start" set FichierIn2 [open "$Path.txt" "r"] set FichierIn1 [open "$Path.nb" "r"] set FichierOut [open "$Path.bed" "w"] set reads 0 set written 0 set multiChrom 0 set multiHit 0 while { [gets $FichierIn1 Ligne1] >=0 } { incr reads gets $FichierIn2 Ligne2 if {$Ligne1 == 1} { if {![regexp {\,} $Ligne2]} { ScanLaListe $Ligne2 BigID Sequence MM Coord set SeqID [lindex [split $BigID ":"] 0] set chrom [lindex [split $Coord "."] 5] set startEtStrand [lindex [split $Coord ":"] 1] regsub {(F|R)[0-9]} $startEtStrand "" start regsub {>KN-1342_PC19_6_} $SeqID "" SeqID if {[regexp {R} $startEtStrand] } { set strand "-" } else { set strand "+" } set end [expr $start + 31] puts $FichierOut "chr$chrom $start $end $SeqID . $strand" incr written } else { incr multiHit } } else { incr multiChrom } } set PourcentageGarde [expr 100 * $written/$reads] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|QueLesUniquesMappesToBed : $reads reads" Espionne "$timestamp|QueLesUniquesMappesToBed : $written written ($PourcentageGarde %)" Espionne "$timestamp|QueLesUniquesMappesToBed : $multiHit matching more than one time on the same chromosom" Espionne "$timestamp|QueLesUniquesMappesToBed : $multiChrom matching more than one time on several chromosoms" close $FichierIn1 close $FichierIn2 close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|QueLesUniquesMappesToBed : End" } proc QueSequenceFormatEMBL {Seq {AvecSQ ""} {AvecReperes ""}} { if {$AvecSQ==""} { set AvecSQ "AvecSQ" } set AvecReperes [string equal -nocase $AvecReperes "AvecReperes"] Wup "Returns the EMBL format (lines of 6 groups of 10) from the string of AAs or NAs $Seq" Wup "Removes . and -" regsub -all -nocase {[^a-z]} $Seq "" Seq set Long [string length $Seq] set LesLignes {} if {$AvecSQ == "AvecSQ"} { if {[regexp -nocase {[MVLDEFHIKLPQRSVW]} $Seq Match]} { set EnteteSQ "SQ SEQUENCE $Long AA;" } else { set EnteteSQ "SQ SEQUENCE $Long Bp;" } lappend LesLignes $EnteteSQ } set nRepere 1 set nDevant 9 set Repere [string repeat " " [expr $nDevant+1]] set Ligne "" for {set i 0} {$i < $Long} {incr i} { if {$AvecReperes} { set Repere [format "%${nDevant}s " $nRepere] } if {[expr $i%60 == 0]} { if {$Ligne != ""} { lappend LesLignes $Ligne } set Ligne $Repere incr nRepere 60 } if { ! [expr $i%60 == 0] && [expr $i%10 == 0]} {append Ligne " " } append Ligne [string range $Seq $i $i] } if {[regexp -nocase {[a-z]} $Ligne]} { lappend LesLignes $Ligne } set Tout [join $LesLignes "\n"] return $Tout } proc QueSequenceFormatEMBL_l {Seq {AvecSQ AvecSQ}} { return [QueSequenceFormatEMBL [join $Seq "\n"] $AvecSQ] } proc QueSequenceFormatEMBLduPAB {Boite {AvecSQ AvecSQ}} { Wup "Takes the DNA, translates in AAs and formates in EMBL" set Nom [Box $Boite nom] set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] set Long [expr $Fin-$Debut+1] set SeqNuc [BoutADN $Debut $Fin $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] return [QueSequenceFormatEMBL $SeqPro $AvecSQ] } proc QuelAlignementPourMacsims {Box} { set FichierLog "[RepertoireDuGenome]/log/$Box" foreach Ligne [LesLignesDuFichier $FichierLog] { if {[regexp "rbest" $Ligne]} {set type [lindex [split $Ligne " "] 2]} if {[regexp "addSeq" $Ligne]} {set type [lindex [split $Ligne " "] 3]} } return $type } proc QuelAnnoteXmlPour {P} { set P [string toupper $P] if {$P=="DISEMBL" } { return "AnnoteXmlPourDisEMBL" } if {$P=="GLOBPLOT" } { return "AnnoteXmlPourGlobPlot" } if {$P=="FOLDINDEX"} { return "AnnoteXmlPourFoldIndex" } if {$P=="RONN" } { return "AnnoteXmlPourRonn" } return "" } proc QuelAnnoteXmlPourX {P} { set P [string toupper $P] if {$P=="DISEMBL" } { return "AnnoteXmlPourDisEMBLX" } if {$P=="GLOBPLOT" } { return "AnnoteXmlPourGlobPlotX" } if {$P=="FOLDINDEX"} { return "AnnoteXmlPourFoldIndexX" } if {$P=="RONN" } { return "AnnoteXmlPourRonnX" } return "" } proc QuelInterval {Valeur LesBornes LesIntervals} { foreach Borne $LesBornes Interval $LesIntervals { if {$Valeur < $Borne} { return $Interval } } return [lindex $LesIntervals end] } proc QuelMSFChoisirPourTous {{LesNoms ""}} { set RepMSF "[RepertoireDuGenome]/msf" set RepMSFDbClustal "[RepertoireDuGenome]/msfdbclustal" set RepMSFRascal "[RepertoireDuGenome]/msfrascal" if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} if {![file exists $RepMSFDbClustal]} {File mkdir $RepMSFDbClustal} foreach Nom [ListeDesPABs] { Espionne $Nom set FichierMSFRascal "$RepMSFRascal/$Nom" set FichierMSFDbClustal "$RepMSFDbClustal/$Nom" set FichierMSF "$RepMSF/$Nom" if {[file exists $FichierMSF]} {File rename -force $FichierMSF $FichierMSFDbClustal} if {![file exists $FichierMSFDbClustal] && ![file exists $FichierMSFRascal]} {continue} if {[file exists $FichierMSFDbClustal] && ![file exists $FichierMSFRascal]} { Espionne "DbClustal" File copy -force $FichierMSFDbClustal $FichierMSF continue } if {![file exists $FichierMSFDbClustal] && [file exists $FichierMSFRascal]} { Espionne "Rascal" File copy -force $FichierMSFRascal $FichierMSF continue } if {[info exists OldScore]} {unset OldScore} if {[info exists NewScore]} {unset NewScore} set Texte [ContenuDuFichier $FichierMSFRascal] regexp -nocase {from ([0-9\-\.]*) to ([0-9\-\.]*)} $Texte tmp OldScore NewScore if {![info exists OldScore] && ![info exists NewScore]} {continue} if {![info exists OldScore] && [info exists NewScore]} { Espionne "Rascal" File copy -force $FichierMSFRascal $FichierMSF continue } if { [info exists OldScore] && ![info exists NewScore]} { Espionne "DbClustal" File copy -force $FichierMSFDbClustal $FichierMSF continue } if {$OldScore <= $NewScore} { Espionne "Rascal" File copy -force $FichierMSFRascal $FichierMSF continue } Espionne "DbClustal" File copy -force $FichierMSFDbClustal $FichierMSF } return } proc QuelMask {Nom {Color ""}} { global RepertoireDuGenome global CouleurDuFond set Color [string equal -nocase $Color "ColorPlease"] set CouleurDuMask(NoAnnotationFound) "lightgrey" set CouleurDuMask(NoSequenceToMask) "white" set CouleurDuMask(NoTfaFile) "black" set CouleurDuMask(NoMaskFile) "grey" set CouleurDuMask(NoRepeatToMask) "green" set CouleurDuMask(PartiallyMasked) "orange" set CouleurDuMask(TotallyMasked) "red" set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" if { ! [file exists $FichierTFA]} { set Annotation "NoTfaFile" if {$Color} { return [set CouleurDuMask($Annotation)] } else { return $Annotation } } set FichierMAS "$RepertoireDuGenome/nucmask/$Nom" if { ! [file exists $FichierMAS]} { set Annotation "NoMaskFile" if {$Color} { return [set CouleurDuMask($Annotation)] } else { return $Annotation } } set LeMAS [LesLignesDuFichier $FichierMAS] set Entete [lindex $LeMAS 0] set Annotation "NoAnnotationFound" foreach Possible [list NoSequenceToMask NoRepeatToMask TotallyMasked PartiallyMasked NoSequenceToReMask NoRepeatToReMask TotallyReMasked PartiallyReMasked NoSequenceToMRM NoRepeatToMRM TotallyMRM PartiallyMRM Bidon] { if {[regexp $Possible $Entete Annotation]} { break } } regsub "allyMRM$" $Annotation "allyMRMed" Annotation regsub "ReMask|MRM" $Annotation "Mask" Annotation if {$Color} { return [set CouleurDuMask($Annotation)] } else { return $Annotation } } proc QuelMaskMRM {Nom {Color ""}} { global RepertoireDuGenome global CouleurDuFond set Color [string equal -nocase $Color "ColorPlease"] set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" set FichierMRM "$RepertoireDuGenome/nucmask/$Nom.mrm" set CouleurDuMRM(NoSequenceToMRM) "white" set CouleurDuMRM(NoMaskFile) "grey" set CouleurDuMRM(NoRepeatToMRM) "green" set CouleurDuMRM(PartiallyMRM) "orange" set CouleurDuMRM(TotallyMRM) "red" set CouleurDuMRM(ERROR) "black" if { ! [file exists $FichierMRM] || ! [file exists $FichierTFA]} { set Annotation "NoMaskFile" if {$Color} { return [set CouleurDuMRM($Annotation)] } else { return $Annotation } } set SeqTFA [string toupper [QueLaSequenceDuTFA $FichierTFA]] set SeqMRM [string toupper [QueLaSequenceDuTFA $FichierMRM]] set NbBasesTot [string length $SeqTFA] set NbBasesMasquees [NombreDeBasesDansRepeat $SeqTFA $SeqMRM] set Pourcentage [PourcentageArrondiSup $NbBasesMasquees $NbBasesTot] if { [string length $SeqTFA] != [string length $SeqMRM] || $SeqTFA == "" || $SeqMRM == ""} { set Annotation "ERROR" if {$Color} { return [set CouleurDuMRM($Annotation)] } else { return $Annotation } } if {$Pourcentage==0} { set Annotation "NoRepeatToMRM" } else { if {$Pourcentage==-1} { set Annotation "NoSequenceToMRM" } else { set SeuilPourcentage 90 if {[expr $Pourcentage > $SeuilPourcentage]} { set Annotation "TotallyMRM" } else { set Annotation "PartiallyMRM" } } } if {$Color} {return [set CouleurDuMRM($Annotation)] } else {return $Annotation} } proc QuelMaskPourTous {{Quoi ""}} { foreach Nom [ListeDesPABs] { Espionne [QuelMask $Nom $Quoi] } exit } proc QuelMasqueApresReMasking {Nom} { #utilise pour creer les notes global RepertoireDuGenome set FichierMRM "$RepertoireDuGenome/nucmask/$Nom.mrm" if {![file exists $FichierMRM]} {return ""} set Contenu [ ContenuDuFichier $FichierMRM] scan $Contenu "%s %s %s %s" pab code user masq regsub -all ">" $pab "" pab if {$Nom==$pab} { return $masq } } proc QuelMasqueAvantReMasking {Nom} { #utilise pour creer les notes global RepertoireDuGenome set FichierM "$RepertoireDuGenome/nucmask/$Nom.m" if {![file exists $FichierM]} {return ""} set Contenu [ ContenuDuFichier $FichierM] scan $Contenu "%s %s %s %s" pab masq code user regsub -all ">" $pab "" pab if {$Nom==$pab} { return $masq } } proc QuelMode {{mode ""}} { if {$mode == ""} { return [set ::Defauts(dispmode)] } else { LesDefauts dispmode $mode } return } proc QuelPourcentageApresMRM {Nom} { #utilise pour creer les notes set FichierMRM "[RepertoireDuGenome]/nucmask/$Nom" if {![file exists $FichierMRM]} {return ""} set Contenu [ ContenuDuFichier $FichierMRM] scan $Contenu "%s %s %s %s %d" pab code user masq percent if {[regexp "NoRepeatTo" $masq]} {return "0"} regsub -all ">" $pab "" pab if {$Nom==$pab} { return $percent } } proc QuelProjet {{projet ""}} { global DefautsPipe if {$projet == ""} { return [set DefautsPipe(Project,project)] } else { LesDefautsDuPipe(Project,project) $projet } return } proc QuelRepeat {Nom} { set FichierRM "[RepertoireDuGenome]/nucmask/$Nom" if {![file exists $FichierRM]} {return ""} set Ligne [EnteteDuFichierTFA $FichierRM] set Repeat [lindex $Ligne end-1] if {[regexp -nocase "norepeat" $Repeat]} {return ""} return $Repeat } proc QuelRepeatApresReMasking {Nom} { set FichierRM "[RepertoireDuGenome]/nucmask/$Nom.rm" if {![file exists $FichierRM]} {return ""} set Ligne [EnteteDuFichierTFA $FichierRM] set Repeat [lindex $Ligne end-1] if {[regexp -nocase "norepeat" $Repeat]} {return ""} return $Repeat } proc QuelleCoupure {R2} { set N [Rec1 $R2 N] set P5 [VirtualPPCREnStock $N P5] set Signaux [Oli $P5 Signals] set LesSignaux [split $Signaux "_"] set Enzyme "" foreach Signal $LesSignaux { set Pos [CoupureParEnzyme $Signal position] set Type [CoupureParEnzyme $Signal type] if {$Pos!=""} { set Enzyme $Signal ; set Position $Pos ; break } } if {$Enzyme==""} { return "" } return "$Enzyme $Position $Type" } proc QuelleCoupurePourTous {} { foreach R2 [Rec2 LaListeDes Rec2] { Espionne "$R2 [QuelleCoupure $R2]" } } proc QuelleFonte {F} { puts [font measure {Courier 8} X] } proc QuelleSequenceManqueDansMacsims {} { set nbincomplet 0; set nbsequence 0; set nbsequencetotal 0 set LesSPaRelancer {} if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} {set Org "Mouse"} if {[regexp -nocase "Rat" [RepertoireDuGenome]]} {set Org "Rat"} foreach Box [ListeDesPABs] { set Cluster [ExtraitInfo $Box "Cluster"] set LesNamesInitial [InterrogeNames $Cluster Name $Org] set Ref [ExtraitInfo $Box "Ref"] set FileMacsim "[RepertoireDuGenome]/macsimXml/$Box" if {![file exists $FileMacsim]} {continue} set fh [open $FileMacsim "r"] dom parse -channel $fh doc close $fh $doc documentElement root foreach seq [$root selectNodes "//sequence"] { lappend LesNamesMacsim [$seq selectNodes "string(./seq-name)"] } set incomplet 0 foreach NameInitial $LesNamesInitial { set trouve 0 incr nbsequencetotal if {$NameInitial==$Ref} { #ds le cas de la query(la ref)du macsims,c'est le nom de la box qui est reference ds macsims (pas le name) set NameInitial $Box } foreach NameMacsim $LesNamesMacsim { if {[regexp "$NameInitial" $NameMacsim]} { set trouve 1 break } } if {$trouve} { #Espionne "$NameInitial trouve dans le macsim" } else { set incomplet 1 incr nbsequence lappend LesSPaRelancer $Box Espionne "$NameInitial PAS trouve dans le macsim $FileMacsim" } } if {$incomplet} {incr nbincomplet} } Espionne "" Espionne "nbSPincomplettotal $nbincomplet" Espionne "nbsequencegicleparleon $nbsequence sur $nbsequencetotal" set LesSPaRelancer [ListeSansDoublon $LesSPaRelancer] Espionne "$LesSPaRelancer" #SauveLesLignes $LesSPaRelancer dans "[RepertoireDuGenome]/LesSPARefaire" } proc QuellesSontLocPossibles {Box} { set File "/genomics/link/SpliRet/Loc/htdocs/results/$Box.html" foreach Ligne [LesLignesDuFichier $File] { if {![regexp "^\<" $Ligne]} { set index1 [expr [string first "/" $Ligne] +4] set index2 [expr [string first "\<" $Ligne $index1] - 1 ] set LocDeBox [string range $Ligne $index1 $index2] set LesLocDeBox [split $LocDeBox ","] foreach elmt $LesLocDeBox { set elmt [string trim $elmt] set elmt [lindex [split $elmt ":"] 0] lappend LesLoc $elmt } } } set LesLoc [ListeSansDoublon $LesLoc] return "$LesLoc" } proc QuelquesChiffresSurLesGenes {{Save Save} {ReInitialise 0}} { global RepertoireDuGenome set Rep "[HumanGenomeDir]/Localisation" if {$Save != "Save"} { FaireLire "All the Chromosomic distributions are going to be calculated.\nPlease wait... That takes much time" } if {$ReInitialise == 1} { Espionne "Chromosomal distribution" DistributionDesGenesSurLesChromosomes $Save Espionne "Contigs distribution" DistributionDesGenesSurLesContigs $Save Espionne "Cytologic distribution" DistributionDesGenesSurLesBandesCytologiques $Save Espionne "Area distribution" DistributionDesGenesSurLesRegions 1e6 $Save DistributionDesGenesSurLesRegions 1e7 $Save return "" } if {[file exists "$Rep/Gene_chr_Distribution"]} { if {[OuiOuNon "$Rep/Gene_chr_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesGenesSurLesChromosomes $Save } } else { DistributionDesGenesSurLesChromosomes $Save } if {[file exists "$Rep/Gene_ctg_Distribution"]} { if {[OuiOuNon "$Rep/Gene_ctg_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesGenesSurLesContigs $Save } } else { DistributionDesGenesSurLesContigs $Save } if {[file exists "$Rep/Gene_cyto_Distribution"]} { if {[OuiOuNon "$Rep/Gene_cyto_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesGenesSurLesBandesCytologiques $Save } } else { DistributionDesGenesSurLesBandesCytologiques $Save } if {[file exists "$Rep/Gene_area1e6bp_Distribution"]} { if {[OuiOuNon "$Rep/Gene_area1e6bp_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesGenesSurLesRegions 1e6 $Save } } else { DistributionDesGenesSurLesRegions 1e6 $Save } if {[file exists "$Rep/Gene_area1e7bp_Distribution"]} { if {[OuiOuNon "$Rep/Gene_area1e7bp_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesGenesSurLesRegions 1e7 $Save } } else { DistributionDesGenesSurLesRegions 1e7 $Save } return "" } proc QuelquesChiffresSurLesSequences {{Save Save} {ReInitialise 0}} { global RepertoireDuGenome set Rep "$RepertoireDuGenome/Localisation" if {$Save != "Save"} { FaireLire "All the Chromosomic distributions are going to be calculated.\nPlease wait... That takes much time" } if {$ReInitialise == 1} { Espionne "Chromosomal distribution" DistributionDesSequencesSurLesChromosomes $Save Espionne "Contigs distribution" DistributionDesSequencesSurLesContigs $Save Espionne "Cytologic distribution" DistributionDesSequencesSurLesBandesCytologiques $Save Espionne "Area distribution" DistributionDesSequencesSurLesRegions 1e6 $Save DistributionDesSequencesSurLesRegions 1e7 $Save return "" } if {[file exists "$Rep/chr_Distribution"]} { if {[OuiOuNon "$Rep/chr_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesSequencesSurLesChromosomes $Save } } else { DistributionDesSequencesSurLesChromosomes $Save } if {[file exists "$Rep/ctg_Distribution"]} { if {[OuiOuNon "$Rep/ctg_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesSequencesSurLesContigs $Save } } else { DistributionDesSequencesSurLesContigs $Save } if {[file exists "$Rep/cyto_Distribution"]} { if {[OuiOuNon "$Rep/cyto_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesSequencesSurLesBandesCytologiques $Save } } else { DistributionDesSequencesSurLesBandesCytologiques $Save } if {[file exists "$Rep/area1e6bp_Distribution"]} { if {[OuiOuNon "$Rep/area1e6bp_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesSequencesSurLesRegions 1e6 $Save } } else { DistributionDesSequencesSurLesRegions 1e6 $Save } if {[file exists "$Rep/area1e7bp_Distribution"]} { if {[OuiOuNon "$Rep/area1e7bp_Distribution exists\nWould you want I create a new version of this file?"]} { DistributionDesSequencesSurLesRegions 1e7 $Save } } else { DistributionDesSequencesSurLesRegions 1e7 $Save } return "" } proc QuelsCopainsDisponibles {} { global RepertoireDuGenome set LesRepertoiresCopains [glob -nocomplain $RepertoireDuGenome/co*] foreach Copain $LesRepertoiresCopains { lappend LesCopainsDisponibles [file tail $Copain] } return $LesCopainsDisponibles } proc Query2FirstExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./query2first" } if {[set tcl_platform(platform)] != "windows"} { return "/biolo/macsim/query2first" } else { set lexe [file join $OrdBinDir "query2first.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc QueryDeLaLigne {LigneQuery {CreateIt ""} {PossiblePAB ""}} { global RepertoireDuGenome global CreateQueryDeLaLigne if {$CreateIt=="CreateIt"} { set CreateIt 1 } elseif {$CreateIt=="DoNotCreateIt"} { set CreateIt 0 } else { if {[info exists CreateQueryDeLaLigne]} { set CreateIt $CreateQueryDeLaLigne } else { set CreateIt 1 } } Wup "Tries to find the query then returns the file name. If not returns the name only" set IndexBlanc [string first " " $LigneQuery] set LigneQuery [string trim [string range $LigneQuery $IndexBlanc end]] if { [regexp -indices {[, :\|]} $LigneQuery IndexesFin] } { set IndexFin [expr [lindex $IndexesFin 0]-1] } else { set IndexFin "end" } set Query [string trim [string range $LigneQuery 0 $IndexFin]] Wup "Le TryQuery suivant etait pour aider Julie a trouver les bons fichiers" foreach TryQuery [list "$Query" "$RepertoireDuGenome/../casimir/prottfa/[file tail $Query]" "[RepertoireDeTravail]/[file tail $Query]" "$RepertoireDuGenome/nuctfa/[file tail $Query]" "$RepertoireDuGenome/prottfa/[file tail $Query]"] { if { [file exists $TryQuery] } { return $TryQuery } } if {$PossiblePAB!="" && [Alias $PossiblePAB]==$Query} { set Query $PossiblePAB } if { ! $CreateIt} { return $Query } set SequenceQuery [SequenceDesBanquesVite $Query] if {$SequenceQuery!=""} { set TmpQuery [Sauve $SequenceQuery dans "[RepertoireDeTravail]/[file tail $Query]"] return $TmpQuery } return $Query } proc QueryDuBlast {Fichier} { set LeDebut [LesLignesIaJDuFichier $Fichier 1 10] set IndexQuery [lsearch -regexp $LeDebut "Query="] if {$IndexQuery==-1} { return "" } return [StringApres "Query=" dans [lindex $LeDebut $IndexQuery]] } proc QueryDuFichierBlast {Fichier} { set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne [lrange $LesLignes 0 20] { if {[regexp "Query=" $Ligne]} { scan $Ligne "%s %s" Bidon Query return $Query } } return "" } proc QueryDuTFA {fquery} { global PipeCollection if {$PipeCollection} { set fquery [file join "[RepertoireDuGenome]" "prottfa" "${fquery}"] } set LesLignes [LesLignesDuFichier $fquery] set lq [lindex $LesLignes 0] set lq [string trim [string range $lq 1 end]] set ib [string first " " $lq] if {$ib == -1} { set ib "end" } else { set ib [expr $ib - 1] } set queryname [string range $lq 0 $ib] return $queryname } proc QueryMacsims {{Qui ""} {Quoi ""} {Key ""} {Where ""} {Order ""} {GetWhat ""}} { if {$Key=="x"} { set Key "*" } CanalSqlMacsims if {[regexp "^select" $Qui]} { if {$GetWhat==""} { set GetWhat "GetList" } return [SqlExec $Qui $GetWhat] } if {[IsColsConsFreeSurf $Qui]} { } if {$Qui ==""} { set Qui "ListOf" } if {$Qui == "ListOf"} { if {$GetWhat==""} { set GetWhat "GetList" } set Table $Quoi if {$Table==""} { set Table "macsims" } if {$Key ==""} { set Key "pk_$Table" } set LesValeurs [SqlExec "select $Key from $Table $Where $Order" $GetWhat] return $LesValeurs } set Table $Qui set Qui $Quoi if {$Where == ""} { if {[IsPk $Qui]} { set Where "where pk_$Table = $Qui" } else { set Where "where name ilike '$Qui'" } } if {$GetWhat=="" && [regexp {[\*\,]} $Key]} { set GetWhat "GetList" } set LesValeurs [SqlExec "select $Key from $Table $Where $Order" $GetWhat] return $LesValeurs } proc QueryMacsimsLinkedInfo {Macs Seq Table} { CanalSqlMacsims if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""} set Sql "select t.* from $Table t , ln_seq_$Table ln where ln.pk_seq=$Seq and ln.pk_$Table=t.pk_$Table" return [SqlExec $Sql "GetList"] } proc QueryMacsimsSeq {Macs {Seq ""} {Key ""} {GetWhat ""}} { CanalSqlMacsims if {$Seq==""} { set Seq "ListOf" } if {$Key==""} { set Key "NAME" } if {[regexp -nocase {\*|x} $Key] } { set Key "*" if {$GetWhat==""} { set GetWhat "GetList" } } if {$Seq=="ListOf"} { set Sql "select $Key from SEQ s where s.PK_MACSIMS=$Macs" if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" set GetWhat "GetList" } if {$GetWhat==""} { set GetWhat "GetList" } return [SqlExec $Sql $GetWhat] } if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""} set Sql "select $Key from SEQ s where s.PK_MACSIMS=$Macs and s.PK_SEQ=$Seq" if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" set GetWhat "GetList" } return [SqlExec $Sql $GetWhat] } proc QueryMacsimsSeqFeature {Macs Seq FType {Key ""} {GetWhat ""}} { CanalSqlMacsims if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""} if {[regexp -nocase {ListOfFType} $FType] } { set Sql "select distinct FTYPE from SEQFEATURE where PK_SEQ=$Seq" if {[regexp -nocase "^order by |^Get" $Key]} { set GetWhat $Key } if {[regexp -nocase "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" } if {$GetWhat==""} { set GetWhat "GetList" } return [SqlExec $Sql $GetWhat] } if {[regexp -nocase {\*|x|ListOfAll} $FType] } { set Sql "select * from SEQFEATURE where PK_SEQ = $Seq" if {[regexp -nocase "^order by |^Get" $Key]} { set GetWhat $Key } if {[regexp -nocase "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" } if {$GetWhat==""} { set GetWhat "GetList" } return [SqlExec $Sql $GetWhat] } if {[regexp -nocase {\*|x} $Key] } { set Key "*" } set Sql "select $Key from SEQFEATURE where FTYPE = '$FType' and PK_SEQ = $Seq" if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" } if {$GetWhat==""} { set GetWhat "GetList" } Espionne $Sql return [SqlExec $Sql $GetWhat] } proc QueryMacsimsSeqInfo {Macs Seq Type {GetWhat ""}} { CanalSqlMacsims if { ! [ConvertToPkMacsSeq Macs Seq]} { return ""} if {$Type == "ListOfType"} { set Sql "select distinct TYPE from SEQINFO where PK_SEQ=$Seq" if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" } if {$GetWhat==""} { set GetWhat "GetList" } return [SqlExec $Sql $GetWhat] } if {$Type == "x" || $Type == "ListOfTypeValue" } { set Sql "select TYPE, VALUE from SEQINFO where PK_SEQ=$Seq" if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" } if {$GetWhat==""} { set GetWhat "GetList" } return [SqlExec $Sql $GetWhat] } set Sql "select VALUE from SEQFEATURE where TYPE='$Type' and PK_SEQ=$Seq" if {[regexp "^order by " $GetWhat]} { append Sql " $GetWhat" ; set GetWhat "GetList" } return [SqlExec $Sql $GetWhat] } proc QuestionDeScience {IpCafeScience Questions} { global Cafe global Ip DecortiqueIpCafeScience $IpCafeScience Ip Cafe Science PotinsDeQuestion "$IpCafeScience $Ip $Cafe $Science" PotinsDeQuestion "$Questions" if {$Science=="Animateur"} { return [QuestionPourAnimateur $Ip $Cafe $Questions] } set CanalSavant [SavantSVP $Ip $Cafe $Science] if {[regexp -nocase "^erreur" $CanalSavant]} { return "$CanalSavant" } set Reponse [QuestionReponse $CanalSavant $Questions] ClosUniquement $CanalSavant return $Reponse } proc QuestionPourAnimateur {Ip Cafe Question} { regsub {^(batch |ret |puts |putb )} $Question "" Question if {$Question==""} { set Question "EtatDesLieux" } set CanalAnimateur [AnimateurSVP "$Ip:$Cafe"] if {[regexp -nocase "^erreur" $CanalAnimateur]} { return $CanalAnimateur } Poste $CanalAnimateur $Question set Reponse [read -nonewline $CanalAnimateur] return $Reponse } proc QuestionReponse {Canal Question} { global ReponseDuSavant global Cafe global Ip #rR je ne suis pas sur que ca marche pour le binaire #rR fconfigure $Canal -translation binary ;#rR pour permettre le transfert d'image fconfigure $Canal -buffering line fileevent $Canal readable "OreilleQuestionneur $Canal" Poste $Canal "$Question\nFinDeMessage" if {[regexp {^(batch|exe)} $Question]} { return "Question was sent to $Ip:$Cafe. I do not wait for the response. Question was : $Question" } vwait ReponseDuSavant($Canal) set Reponse $ReponseDuSavant($Canal) unset ReponseDuSavant($Canal) return $Reponse } proc QuestionneStringSelonFicProtIDetSeuil {fic seuil} { set listeId [LesLignesDuFichier $fic] set ficOut "${fic}.string" set f [open $ficOut w] #puts $f "protId1\tprotid2\tprotName1\tcombinedScore\tevidenceScore" CanalSqlString foreach e $listeId { puts "traite $e" QuestionneStringSelonProtIDetSeuil $e $seuil $f } close $f CanalSqlDisconnect return 1 } proc QuestionneStringSelonProtIDetSeuil {protId seuil fl} { #puts "$protId\t$seuil" set idx 0 foreach {Pi1 Pi2 Cs Pn1 Pn2 Ns Nst Fs Ps Hs As Ast Es Est Ds Dst Ts Tst} [SqlExec "select p.protein_id_a, p.protein_id_b, p.combined_score, n1.protein_name, n2.protein_name, p.equiv_nscore, p.equiv_nscore_transferred, p.equiv_fscore, p.equiv_pscore, p.equiv_hscore, p.array_score, p.array_score_transferred, p.experimental_score, p.experimental_score_transferred, p.database_score, p.database_score_transferred, p.textmining_score, p.textmining_score_transferred from network.protein_protein_links p, items.proteins_names n1, items.proteins_names n2 where p.protein_id_a = n2.protein_id and p.protein_id_b = n1.protein_id and p.combined_score > '$seuil' and n1.is_preferred_name is true and n2.is_preferred_name is true and p.protein_id_b = '$protId' order by p.combined_score DESC;" "GetList"] { set idx 1 set evidence "" if {$Ns != 0} { append evidence "neighborhood $Ns " } if {$Nst != 0} { append evidence "neighborhoodT $Nst " } if {$Fs != 0} { append evidence "fusion $Fs " } if {$Ps != 0} { append evidence "co-occ $Ps " } if {$Hs != 0} { append evidence "homology $Hs " } if {$As != 0} { append evidence "array $As " } if {$Ast != 0} { append evidence "arrayT $Ast " } if {$Es != 0} { append evidence "experimental $Es " } if {$Est != 0} { append evidence "experimentalT $Est " } if {$Ds != 0} { append evidence "database $Ds " } if {$Dst != 0} { append evidence "databaseT $Dst " } if {$Ts != 0} { append evidence "textmining $Ts " } if {$Tst != 0} { append evidence "textminingT $Tst " } puts "$Pi2\t$Pn1\t$Pi1\t$Pn2\t$Cs\t$evidence" puts $fl "$Pi2\t$Pn1\t$Pi1\t$Pn2\t$Cs\t$evidence" } return 1 } proc QuestionneStringSelonProtIDetSeuilOld {protId seuil fl} { puts "$protId\t$seuil" set idx 0 foreach {Pi1 Pi2 Cs Pn Ns Nst Fs Ps Hs As Ast Es Est Ds Dst Ts Tst} [SqlExec "select p.protein_id_a, p.protein_id_b, p.combined_score, n.protein_name, p.equiv_nscore, p.equiv_nscore_transferred, p.equiv_fscore, p.equiv_pscore, p.equiv_hscore, p.array_score, p.array_score_transferred, p.experimental_score, p.experimental_score_transferred, p.database_score, p.database_score_transferred, p.textmining_score, p.textmining_score_transferred from network.protein_protein_links p, items.proteins_names n where p.protein_id_a = n.protein_id and p.combined_score > '$seuil' and n.is_preferred_name is true and p.protein_id_b = '$protId' order by p.combined_score DESC;" "GetList"] { set idx 1 set evidence "" if {$Ns != 0} { append evidence "neighborhood $Ns " } if {$Nst != 0} { append evidence "neighborhoodT $Nst " } if {$Fs != 0} { append evidence "fusion $Fs " } if {$Ps != 0} { append evidence "co-occ $Ps " } if {$Hs != 0} { append evidence "homology $Hs " } if {$As != 0} { append evidence "array $As " } if {$Ast != 0} { append evidence "arrayT $Ast " } if {$Es != 0} { append evidence "experimental $Es " } if {$Est != 0} { append evidence "experimentalT $Est " } if {$Ds != 0} { append evidence "database $Ds " } if {$Dst != 0} { append evidence "databaseT $Dst " } if {$Ts != 0} { append evidence "textmining $Ts " } if {$Tst != 0} { append evidence "textminingT $Tst " } puts "$Pi1\t$Pi2\t$Pn\t$Cs\t$evidence" puts $fl "$Pi1\t$Pi2\t$Pn\t$Cs\t$evidence" } return 1 } proc QuiContient {Texte {Rep ""}} { if {$Rep==""} { set Rep "infos" } set LesBons {} foreach Nom [ListeDesPABs] { set Fichier "[RepertoireDuGenome]/$Rep/$Nom" if { ! [file exists $Fichier]} { continue } if { ! [regexp -nocase $Texte [ContenuDuFichier $Fichier]]} { continue } lappend LesBons $Nom } return $LesBons } proc QuiEstFaux {} { set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set ListeARefaire "" foreach PAB [ListeDesPABs] { set NewAccessSeq [AccessDeLaBoite $PAB mRNA] set Query "$RepmRNA/$PAB" set OldAccessSeq [AccessDuTFADumRNA $Query] if {$NewAccessSeq =="" || $OldAccessSeq =="" || [regexp "ACT" $NewAccessSeq]} {continue} if {$NewAccessSeq != $OldAccessSeq} { Espionne "$PAB New $NewAccessSeq OLD $OldAccessSeq" lappend ListeARefaire $PAB } } set RepRef "[RepertoireDuGenome]/Probes/RefSeqBLAST2/" set RepUni "[RepertoireDuGenome]/Probes/UnigeneBLAST2/" set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/" foreach PAB $ListeARefaire { if {[file exists "$RepmRNA$PAB"]} {File delete -force "$RepmRNA$PAB"} foreach Rep [list $RepRef $RepUni] { if {[file exists "$Rep${PAB}.oligo"]} {File delete -force "$Rep${PAB}.oligo"} if {[file exists "$Rep${PAB}.log"]} {File delete -force "$Rep${PAB}.log"} if {[file exists "$Rep${PAB}.masked"]} {File delete -force "$Rep${PAB}.masked"} if {[file exists "$Rep${PAB}.croisee"]} {File delete -force "$Rep${PAB}.croisee"} if {[file exists "$Rep${PAB}.selection"]} {File delete -force "$Rep${PAB}.selection"} if {[file exists "$Rep${PAB}.blastn"]} {File delete -force "$Rep${PAB}.blastn"} } } } proc QuiEstGros {{Action ""} {Quoi ""}} { if {$Action==""} { set Action "Show" } if {$Quoi==""} { set Quoi "All" } set TotL 0 set TotM 0 set TotC 0 set TotP 0 set LaSortie {} foreach Fichier [LesSourcesDeGscope "Absolu"] { if { ! [file exists $Fichier]} { continue } if {[regexp "/etc/" $Fichier]} { continue } set WC "0 0 0" catch {set WC [exec wc $Fichier]} scan $WC "%d %d %d" L M C set P 0 catch {set P [exec grep proc $Fichier | wc -l]} if {$M>0} { set X [expr $C/$M] } else { set X 0 } set WC [format "%8d %8d %8d" $L $M $C] incr TotL $L incr TotM $M incr TotC $C incr TotP $P if {[regexp {gscope_contrib/([^/]+)/} $Fichier Match Auteur]} { regsub {.+/gscope_contrib/} $Fichier "" BeauFichier } else { regsub {/home/} $Fichier "" BeauFichier set Auteur "ripp" } if { ! [info exists SonTotL($Auteur)]} { set SonTotL($Auteur) 0 set SonTotM($Auteur) 0 set SonTotC($Auteur) 0 } incr SonTotL($Auteur) $L incr SonTotM($Auteur) $M incr SonTotC($Auteur) $C incr SonTotP($Auteur) $P set Ligne "$WC $BeauFichier" if {[regexp "NoDetail" $Quoi]} { continue } Espionne $Ligne lappend LaSortie $Ligne } foreach Auteur [lsort [array names SonTotL]] { if {$SonTotM($Auteur)>0} { set X [expr $SonTotC($Auteur)/$SonTotM($Auteur)] } else { set X 0 } set BelAuteur [People $Auteur PrenomNom] if {$BelAuteur==""} { set BelAuteur $Auteur if {$Auteur=="carles"} { set BelAuteur "Annaick CARLES" } if {$Auteur=="jmuller"} { set BelAuteur "Jean MULLER" } if {$Auteur=="chalmel"} { set BelAuteur "Frederic CHALMEL" } if {$Auteur=="lardenoi"} { set BelAuteur "Aurelie LARDENOIS" } if {$Auteur=="hoffer"} { set BelAuteur "Laurent HOFFER" } } # set Ligne [format "%8d %8d %8d %s" $SonTotL($Auteur) $SonTotM($Auteur) $SonTotC($Auteur) "$BelAuteur"] if {[info exists SonTotL($Auteur)] && [info exists SonTotP($Auteur)] && $SonTotL($Auteur)>0 && $SonTotP($Auteur)} { set NbCarParLigne [expr $SonTotC($Auteur)/$SonTotL($Auteur)] set NbLigParProc [expr $SonTotL($Auteur)/$SonTotP($Auteur)] set Ligne [format "%8d %6d %4d %4d %s" $SonTotL($Auteur) $SonTotP($Auteur) $NbCarParLigne $NbLigParProc "$BelAuteur"] } if {[regexp "NoAuthor" $Quoi]} { continue } Espionne $Ligne lappend LaSortie $Ligne } if {$TotM>0} { set X [expr $TotC/$TotM] } else { set X 0 } set Ligne [format "%8d %8d %8d %8d %s" $TotL $TotM $TotC $TotP "all together"] if { ! [regexp "NoTotal" $Quoi]} { Espionne $Ligne lappend LaSortie $Ligne } set Sortie [join $LaSortie "\n"] if {$Action=="Show"} { return [AfficheVariable $Sortie "AvecFetch" "QuiEstGros"] } if {$Action=="GetText"} { return $Sortie } return $LaSortie } proc QuiEstLa {DebutSeq FinSeq Banque} { global ListeDeBoites global AQuiEstCeDebut global AQuiEstCetteFin global LesDebuts global LesFins global LesDebutsTries global LesFinsTries set OrientSeq "F" if {[expr $DebutSeq > $FinSeq]} { set Toto $DebutSeq set DebutSeq $FinSeq set FinSeq $Toto set OrientSeq "R" } if {$Banque == "phor"} { return "Pour Phor faut attendre" } if { $Banque == "paby" } { if { ! [info exists AQuiEstCeDebut]} { if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites } foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] if {[regexp "TROU" $Nom]} { continue } set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] lappend AQuiEstCeDebut($Debut) $Nom lappend AQuiEstCetteFin($Fin) $Nom lappend LesDebuts $Debut lappend LesFins $Fin } set LesDebutsTries [lsort -integer $LesDebuts] set LesFinsTries [lsort -integer $LesFins] } set ppDebut [lindex $LesDebutsTries 0] set pgDebut [lindex $LesDebutsTries end] set nDebuts [llength $LesDebutsTries] set Probable [expr ($DebutSeq-$ppDebut)*$nDebuts/($pgDebut-$ppDebut)] if {[expr $Probable < 6]} { set Probable 6 } elseif {[expr $Probable > [llength $LesDebutsTries]-1-6]} { set Probable [expr [llength $LesDebutsTries]-1-6] } else { if {[expr [lindex $LesDebutsTries $Probable] < $DebutSeq]} { while { [expr [lindex $LesDebutsTries $Probable] < $DebutSeq] } { incr Probable } } else { while { [expr [lindex $LesDebutsTries $Probable] > $DebutSeq] } { incr Probable -1} } } set Touches {} foreach X [lrange $LesDebutsTries [expr $Probable-6] [expr $Probable+6]] { foreach Lui [set AQuiEstCeDebut($X)] { if {[Box $Lui orient] != $OrientSeq} { continue } if { [Box $Lui debut] <= $DebutSeq && $DebutSeq <= [Box $Lui fin] || [Box $Lui debut] <= $FinSeq && $FinSeq <= [Box $Lui fin] } { lappend Touches $Lui } elseif {$DebutSeq <= [Box $Lui debut] && [Box $Lui debut] <= $FinSeq || $DebutSeq <= [Box $Lui fin] && [Box $Lui fin] <= $FinSeq } { lappend Touches $Lui } } } return $Touches } } proc QuiJAppel {Procedure {Selection ""}} { global LesSousProcedures Wup "Shows the procs that Procedure calls in the Selected lines" if {$Selection=="LaListeMerci"} { set Selection "" set CreerLesSousProcedures 1 if {[info exists LesSousProcedures($Procedure)]} { return [set LesSousProcedures($Procedure)] } } else { set CreerLesSousProcedures 0 } if {$Selection != ""} { set MonBody $Selection } else { set MonBody [info body $Procedure] } set Body $MonBody while 0 { if { ! [regexp -indices {\[[A-Z]} $Body Indices]} { break } scan $Indices "%d %d" iCrochet iProc set Body [string range $Body $iProc end] if {[scan $Body "%s" ProcAppelee]!=1} { continue } regsub -all -nocase {[^a-z_0-9]} $ProcAppelee "" ProcAppelee if {[info exists QuiJAppelDejaVu($ProcAppelee)]} { continue } set QuiJAppelDejaVu($ProcAppelee) 1 if {$CreerLesSousProcedures} { AppendLaProc $ProcAppelee $Procedure } else { AfficheLaProc $ProcAppelee } } set Body $MonBody while 1 { set i 0 if { [regexp -indices {^[ \t]+[A-Z]} $Body IndicesN([incr i])] | [regexp -indices {[\n][ \t]+[A-Z]} $Body IndicesN([incr i])] | [regexp -indices { +\{[ \t]*[A-Z]} $Body IndicesN([incr i])] | [regexp -indices {\;[ \t]*[A-Z]} $Body IndicesN([incr i])] | [regexp -indices {\[[ \t]*[A-Z]} $Body IndicesN([incr i])] } { set iProc 999999 foreach {i Ind} [array get IndicesN] { scan $Ind "%d %d" iExpr iProcLu if {$iProcLu==-1} { continue } set iProc [Mini $iProc $iProcLu] } if {$iProc==999999} { break } set Body [string range $Body $iProc end] if {[scan $Body "%s" ProcAppelee]!=1} { continue } regsub -all -nocase {[^a-z_0-9]} $ProcAppelee "" ProcAppelee if {[info exists QuiJAppelDejaVu($ProcAppelee)]} { continue } set QuiJAppelDejaVu($ProcAppelee) 1 if {$CreerLesSousProcedures} { AppendLaProc $ProcAppelee $Procedure } else { AfficheLaProc $ProcAppelee } } else { break } } set Body $MonBody while 1 { if { ! [regexp -indices {command +[\"][A-Z]} $Body Indices]} { break } scan $Indices "%d %d" iCommand iProc set Body [string range $Body $iProc end] if {[scan $Body "%s" ProcAppelee]!=1} { continue } regsub -all -nocase {[^a-z_0-9]} $ProcAppelee "" ProcAppelee if {[info exists QuiJAppelDejaVu($ProcAppelee)]} { continue } set QuiJAppelDejaVu($ProcAppelee) 1 if {$CreerLesSousProcedures} { AppendLaProc $ProcAppelee $Procedure } else { AfficheLaProc $ProcAppelee } } set Body $MonBody while 1 { if { ! [regexp -indices {> +[\"]*[A-Z]} $Body Indices]} { break } scan $Indices "%d %d" iCommand iProc set Body [string range $Body $iProc end] if {[scan $Body "%s" ProcAppelee]!=1} { continue } regsub -all -nocase {[^a-z_0-9]} $ProcAppelee "" ProcAppelee if {[info exists QuiJAppelDejaVu($ProcAppelee)]} { continue } set QuiJAppelDejaVu($ProcAppelee) 1 if {$CreerLesSousProcedures} { AppendLaProc $ProcAppelee $Procedure } else { AfficheLaProc $ProcAppelee } } if {$CreerLesSousProcedures} { if {[info exists LesSousProcedures($Procedure)]} { return [set LesSousProcedures($Procedure)] } else { return {} } } } proc QuiJAppelRecursif {Procedure} { global DejaVuCetteProcedure global Tabulation if { ! [info exists Tabulation]} { set Tabulation "" } set LesAppelees [QuiJAppel $Procedure "LaListeMerci"] if {$LesAppelees == {}} { return } foreach Appelee $LesAppelees { if {[info exists DejaVuCetteProcedure($Appelee)]} { continue } Espionne "$Tabulation $Appelee" set DejaVuCetteProcedure($Appelee) 1 set Tabulation "$Tabulation " QuiJAppelRecursif $Appelee set Tabulation [string range $Tabulation 4 end] } } proc QuiMAppel {Procedure {LaListeMerci ""}} { Wup "Shows the procs calling Procedure" set LesAppelantes {} foreach Autre [LesProceduresExistantes] { set LesAppeleesParAutre [QuiJAppel $Autre "LaListeMerci"] if {[lsearch -exact $LesAppeleesParAutre $Procedure] != -1} { lappend LesAppelantes $Autre } continue Wup "Reste est pas bon car on cherche tout le texte et pas que les procedures" set Body [info body $Autre] if {[regexp "$Procedure" $Body]} { lappend LesAppelantes $Autre } } if {$LaListeMerci != ""} { return $LesAppelantes } if {$LesAppelantes=={}} { FaireLire "No calling procs for $Procedure" return "" } return [ShowText [join $LesAppelantes "\n"] "SansFetchAvecRienAvecAffiProc" "$Procedure 's CallingProcs "] } proc QuiManque {} { set LesReps [list prottfa blastp tfasdescopains aliinout msf] foreach Nom [ListeDesPABs] { set Message "$Nom" foreach Rep $LesReps { if {[file exists "[RepertoireDuGenome]/$Rep/$Nom"]} { continue } append Message " $Rep" } if {[regexp " " $Message]} { Espionne $Message } } } proc QuiManqueDsInterproscan {} { set i 0 set Chemin "/genomics/link/SpliRetMouse/FichiersModifUnique/PROT_VARIANTES_61_mai" set RepertoireSourisTfactor "$Chemin/SOURIS_Tfactor_61_mai" set RepertoireSourisOthers "$Chemin/SOURIS_others_61_mai" set LesRepertoires [list $RepertoireSourisTfactor $RepertoireSourisOthers] foreach Repertoire $LesRepertoires { foreach File [glob -nocomplain "$Repertoire/*"] { incr i set cluster [lindex [split [file tail $File] "."] 0] set box [InterrogeBox $cluster Box] if {![file exists "/genomics/link/SpliRetMouse/Interproscan/$box.is"]} { Espionne "$cluster $box" } } } Espionne "$i" } proc QuiManqueDsPipe {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set Tout 0; set NbRien 0; set SsProt 0; set ToutSsVideEtSsProt 0; set AcBlast 0; set AcBlastSsHit 0; set SansBlast 0; set AcMsfDbClustal 0; set SansMsfDbClustal 0; set AcMsfRascal 0; set SansMsfRascal 0; set AcMsfLeon 0; set SansMsfLeon 0; set AcNormd 0; set SansNormd 0 set FichierSortie "[RepertoireDuGenome]/fiches/quimanque" foreach Nom $Liste { puts "$Nom" incr Tout set FichierNuctfa "[RepertoireDuGenome]/nuctfa/$Nom" set LesLignes [LesLignesDuFichier $FichierNuctfa] set LaPremiereLigne [lindex $LesLignes 0] if {[regexp {bidon} $LaPremiereLigne]} { incr NbRien continue } set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {! [file exists $FichierProttfa]} { incr SsProt continue } incr ToutSsVideEtSsProt set FichierBlast "[RepertoireDuGenome]/blastp/$Nom" if {[file exists $FichierBlast]} { incr AcBlast set LesLignes [LesLignesDuFichier $FichierBlast] foreach Ligne $LesLignes { if {[regexp "No hits found" $Ligne]} { incr AcBlastSsHit AppendAuFichier $FichierSortie "$Ligne" AppendAuFichier $FichierSortie "$Nom => pas de hits" break } } } if {! [file exists $FichierBlast]} { incr SansBlast AppendAuFichier $FichierSortie "$Nom => ssblastp" } #set FichierBallast "[RepertoireDuGenome]/ballast/$Nom" #if {! [file exists $FichierBallast]} {incr SansBallast; AppendAuFichier $FichierSortie "$Nom => ssballast"} set FichierMsfDbclustal "[RepertoireDuGenome]/msfdbclustal/$Nom" if {[file exists $FichierMsfDbclustal]} { incr AcMsfDbClustal } if {! [file exists $FichierMsfDbclustal]} { incr SansMsfDbClustal AppendAuFichier $FichierSortie "$Nom => ssmsfdbclustal" } set FichierMsfRascal "[RepertoireDuGenome]/msfrascal/$Nom" if {[file exists $FichierMsfRascal]} { incr AcMsfRascal } if {! [file exists $FichierMsfRascal]} { incr SansMsfRascal AppendAuFichier $FichierSortie "$Nom => ssmsfrascal" } set FichierMsfLeon "[RepertoireDuGenome]/msfleon/$Nom" if {[file exists $FichierMsfLeon]} { incr AcMsfLeon } if {! [file exists $FichierMsfLeon]} { incr SansMsfLeon AppendAuFichier $FichierSortie "$Nom => ssmsfleon" } set FichierNormd "[RepertoireDuGenome]/normd/$Nom" if {[file exists $FichierNormd]} { incr AcNormd } if {! [file exists $FichierNormd]} { incr SansNormd AppendAuFichier $FichierSortie "$Nom => ssnormd" } } AppendAuFichier $FichierSortie "tout= $Tout nbrien= $NbRien ssprot= $SsProt toutssvide= $ToutSsVideEtSsProt avecblast= $AcBlast sansblast= $SansBlast avecmsfdbclustal= $AcMsfDbClustal sansmsfdbclustal= $SansMsfDbClustal avecmsfrascal= $AcMsfRascal sansmsfrascal= $SansMsfRascal avecmsfleon= $AcMsfLeon sansmsfleon= $SansMsfLeon avecnormd= $AcNormd sansnormd= $SansNormd" } proc QuiSuisJe {} { global MoiJeSuis set alter [winfo children .] if {$alter != $MoiJeSuis} { BasculeVariables MoiJeSuis alter set MoiJeSuis $alter } return } proc QuiTouche {Chro {Contig ""}} { set LesBons {} foreach Nom [ListeDesPABs] { set ML [MeilleureLocalisationSurChroContig $Nom] scan $ML "%s %s" Ch Co if {$Ch!=$Chro} { continue } if {$Contig!="" && $Co!=$Contig} { continue } lappend LesBons $Nom } return $LesBons } proc QuiToucheCeChromosome {Chromo} { set Fichier "~/$Chromo.liste" return [SauveLesLignes [QuiTouche $Chromo] dans $Fichier] } proc QuiToucheChroContig {Chro {Contig ""}} { set LesBons {} foreach Nom [ListeDesPABs] { set ML [MeilleureLocalisationSurChroContig $Nom] scan $ML "%s %s" Ch Co if {$Ch!=$Chro} { continue } if {$Contig!="" && $Co!=$Contig} { continue } lappend LesBons $Nom } return $LesBons } proc QuidSeqEstDisponible {} { global QuidSeqEstDisponible if { ! [info exists QuidSeqEstDisponible]} { set QuidSeqEstDisponible 0 } return $QuidSeqEstDisponible } proc QuitMMM {} { SaveDB exit } proc QuitSampleTOL {{w ""}} { if {$w eq ""} { set w [winfo toplevel $::Tx(PAD)] } $::db close destroy [winfo toplevel $w] exit } proc QuitteAnnotation {} { DetruitBoutonsOrdali $::NomTextSeq tag delete selZone unset ::Anno return } proc QuitteInfosMac {w} { destroy $w return } proc QuitteModeClusters {w} { unset -nocomplain ::Clus # catch {unset ::ZoneCFlusterisation} # AppliqueFeature Clear ClearSelections destroy $w return } proc QuitteModeConservation {w} { global Cons ListeTypesDeFeatures TabSF ScoreMeth unset -nocomplain Cons set Li [lsearch -all -regexp $ListeTypesDeFeatures "tmpCons"] if {$Li ne ""} { set Li [lsort -decreasing -integer $Li] foreach i $Li { set f [lindex $ListeTypesDeFeatures $i] DetruitLaFeature $f } } array unset ScoreMeth "tmpCons*" AppliqueFeature Clear destroy $w return } proc QuitteViandox {} { global Mol3dCou pgl StrucAVoir Obj3dCou Feat3dCou Feat3dCou2 trace remove variable Mol3dCou write UpdateMol3dObjets trace remove variable ListeTypesDeFeatures write MetAJourFeaturesViandox # We only delete display lists foreach mold $StrucAVoir { set nom [DonneIdDeAccessPDB $mold] foreach o [$nom _ListeObjets] { $nom _dellist $o } } if {$pgl(SelectionList) ne ""} { glDeleteLists $pgl(SelectionList) 1 } destroy [winfo toplevel $pgl(wogl)] unset pgl unset -nocomplain NwOj NwOjR unset -nocomplain Obj3dCou Feat3dCou Feat3dCou2 return } proc QuoteEtBackslashPourSql {Texte {Trim ""}} { set Trim [string equal -nocase $Trim "Trim"] if {[regexp {^[0-9]+$} $Texte]} { return $Texte } if {$Texte==""} { return "DEFAULT" } regsub -all {\\} $Texte {\\} Texte regsub -all {\,} $Texte {\\,} Texte regsub -all {\'} $Texte "''" Texte if {$Trim} { set Texte [string trim $Texte] } return "'$Texte'" } proc RACtoTFA {Fichier} { global ADN TDN RAC global NotreOS if { ! [info exists ADN]} { ChargeADNetTDNetRAC } set TFA [SequenceFormatTFA [string range $RAC 1 end] "$NotreOS reverse and complement" "nucbrut"] Espionne [Sauve $TFA dans $Fichier] exit } proc RAZNomSeq {} { $::NomNomSeq tag remove InvNm 1.0 end return } 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 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 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 RGBDeLaCouleur {c} { global Lookup_Couleurs set r [lindex [set Lookup_Couleurs($c)] 0] set r [string trim [format "%x" $r]] set r "$r[string repeat "0" [expr {4-[string length $r]}]]" set g [lindex [set Lookup_Couleurs($c)] 1] set g [string trim [format "%x" $g]] set g "$g[string repeat "0" [expr {4-[string length $g]}]]" set b [lindex [set Lookup_Couleurs($c)] 2] set b [string trim [format "%x" $b]] set b "$b[string repeat "0" [expr {4-[string length $b]}]]" set hrgb "#$r$g$b" return $hrgb } proc RGBDeLaTkCol {name} { if {[string index $name 0] eq "#"} { return [CouleurHexa2Deci $name] } elseif {$name eq "couldefond"} { return [RGBDeLaTkCol [set ::Defauts(CoulVariable)]] } else { if {! [info exists ::TkCol]} { InitTkCol } set name [string map [list " " _] $name] return [CouleurInt2Deci [set ::TkCol($name)]] } } proc RGBToInteger {r g b} { binary scan [binary format "c1c1c1c1" $b $g $r 0] "i" Couleur return $Couleur } proc RGKTSA {Sequence DR} { # Evalue la proximité a un consensus (RGKTSA des VDR) regsub {DR} $DR "" DR set Sequence [string toupper $Sequence] set Liste [split $Sequence ""] set Mismatch 0 set QuelMismatch "M" set Score 12 set Seq1 [string range $Sequence 0 5] set Seq2 [string range $Sequence [expr 6 + $DR] [expr 11 + $DR]] for {set I 1} {$I<=6} {incr I} { set S1C$I [string range $Seq1 [expr $I - 1] [expr $I - 1]] set S2C$I [string range $Seq2 [expr $I - 1] [expr $I - 1]] } if {$S1C1 == "A" || $S1C1 == "G"} { set S1C1 "R" } else { incr Mismatch append QuelMismatch "@S1C1" set Score [expr $Score - 1] } if {$S1C2 == "G"} { set S1C2 "G" } else { incr Mismatch append QuelMismatch "@S1C2" set Score [expr $Score - 4] } if {$S1C3 == "T" || $S1C3 == "G"} { set S1C3 "K" } else { incr Mismatch append QuelMismatch "@S1C3" set Score [expr $Score - 2] } if {$S1C4 == "T"} { set S1C4 "T" } else { incr Mismatch append QuelMismatch "@S1C4" set Score [expr $Score - 1] } if {$S1C5 == "C" || $S1C5 == "G"} { set S1C5 "S" } else { incr Mismatch append QuelMismatch "@S1C5" set Score [expr $Score - 2] } if {$S1C6 == "A"} { set S1C6 "A" } else { incr Mismatch append QuelMismatch "@S1C6" set Score [expr $Score - 2] } if {$S2C1 == "A" || $S2C1 == "G"} { set S2C1 "R" } else { incr Mismatch append QuelMismatch "@S2C1" set Score [expr $Score - 1] } if {$S2C2 == "G"} { set S2C2 "G" } else { incr Mismatch append QuelMismatch "@S2C2" set Score [expr $Score - 1] } if {$S2C3 == "T" || $S2C3 == "G"} { set S2C3 "K" } else { incr Mismatch append QuelMismatch "@S2C3" set Score [expr $Score - 4] } if {$S2C4 == "T"} { set S2C4 "T" } else { incr Mismatch append QuelMismatch "@S2C4" set Score [expr $Score - 0.5] } if {$S2C5 == "C" || $S2C5 == "G"} { set S2C5 "S" } else { incr Mismatch append QuelMismatch "@S2C5" set Score [expr $Score - 2] } if {$S2C6 == "A"} { set S2C6 "A" } else { incr Mismatch append QuelMismatch "@S2C6" set Score [expr $Score - 1] } set Retour "$Score $Mismatch $QuelMismatch" return $Retour } proc RIch {str} { set type [lindex $::TParser(S) end] switch $type { "pdb_code" { set ::TParser(Id) $str lappend ::TParser(LId) $str set ::TParser($str,Interface) 0 } "chain-1" - "chain-2" - "seqnum-1" - "seqnum-2" - "res-1" - "res-2" { set id [set ::TParser(Id)] set ::TParser($id,$type) $str } default return } return } proc RIed {name} { global TParser set TParser(S) [lrange $TParser(S) 0 end-1] ;# pop switch $name { "bond" { set id [set TParser(Id)] if {[set TParser($id,Interface)] > 1} { return } set bnd [list $TParser($id,chain-1) $TParser($id,res-1) $TParser($id,seqnum-1) $TParser($id,chain-2) $TParser($id,res-2) $TParser($id,seqnum-2)] set par [set TParser($id,parent)] lappend TParser($id,$par) $bnd } default return } return } proc RIst {name atts} { global TParser lappend TParser(S) $name ;# push switch $name { "interface" { set id [set TParser(Id)] incr TParser($id,Interface) } "h-bonds" { set id [set TParser(Id)] if {[set TParser($id,Interface)] < 2} { set TParser($id,parent) $name set TParser($id,$name) [list] } } "bond" { set id [set TParser(Id)] set TParser($id,chain-1) "" ; set TParser($id,chain-2) "" set TParser($id,seqnum-1) "" ; set TParser($id,seqnum-2) "" set TParser($id,res-1) "" ; set TParser($id,res-2) "" } } return } proc RNAFromFastaCDS {txt prot} { if {[set i [string first "." $prot]] != -1} { set prot [string range $prot 0 $i-1] } set Lnm [list] LitLeTFA $txt Lnm Tsq foreach n $Lnm { set acc [StringSuivant "_cdsid_" Dans $n] if {[set i [string first "." $acc]] != -1} { set acc [string range $acc 0 $i-1] } if {$acc eq $prot} { return [set Tsq($n)] } } return "" } proc RPCA {} { global OrdEtcDir TBlosum ListeDesAcidesAmines set laa [split "ARNDCQEGHILKMFPSTWYV" ""] # set f [file join $OrdEtcDir pam250.bla] set f [file join $OrdEtcDir blosum62.dat] InitTBlosum $f puts "\nREFERENCE $f" set f [open luc.R w] puts $f "s<-matrix(nrow=20,ncol=20)" set i 1 foreach a $laa { set j 1 foreach b $laa { puts $f "s\[$i,$j\]<-[set TBlosum($a,$b)]" incr j } incr i } set type "princomp" puts $f "# PRCOMP" puts $f "# ------" puts $f "# pca2 <-prcomp(s, center = TRUE, scale = FALSE)" puts $f "# summary(pca2)" puts $f "# ?prcomp" puts $f "# print(pca2\$rotation\[,1\])" puts $f "# write.table(pca2\$sdev,\"evals.R\",row.names = FALSE, col.name = FALSE)" puts $f "# write.table(pca2\$rotation\[,1\],\"axe1.R\",row.names = FALSE, col.name = FALSE)" puts $f "# write.table(pca2\$rotation\[,2\],\"axe2.R\",row.names = FALSE, col.name = FALSE)" puts $f "# write.table(pca2\$rotation\[,3\],\"axe3.R\",row.names = FALSE, col.name = FALSE)" puts $f "#" puts $f "# PRINCOMP" puts $f "# --------" puts $f "pca2 <-princomp(s,cor=FALSE)" puts $f "#summary(pca2)" puts $f "print(pca2\$scores)" puts $f "write.table(pca2\$sdev,\"evals.R\",row.names = FALSE, col.name = FALSE)" puts $f "write.table(pca2\$loadings\[,1\],\"axe1.R\",row.names = FALSE, col.name = FALSE)" puts $f "write.table(pca2\$loadings\[,2\],\"axe2.R\",row.names = FALSE, col.name = FALSE)" puts $f "write.table(pca2\$loadings\[,3\],\"axe3.R\",row.names = FALSE, col.name = FALSE)" puts $f "#" puts $f "# EIGEN" puts $f "# -----" puts $f "#pca2 <-eigen(s)" puts $f "#summary(pca2)" puts $f "#write.table(pca2\$values,\"evals.R\",row.names = FALSE, col.name = FALSE)" puts $f "#write.table(pca2\$vectors\[,1\],\"axe1.R\",row.names = FALSE, col.name = FALSE)" puts $f "#write.table(pca2\$vectors\[,2\],\"axe2.R\",row.names = FALSE, col.name = FALSE)" puts $f "#write.table(pca2\$vectors\[,3\],\"axe3.R\",row.names = FALSE, col.name = FALSE)" close $f file delete -force axe1.R axe2.R axe3.R evals.R set log [exec R --vanilla < luc.R] puts $log # Traitement Eigenvalues set Ll [LesLignesDuFichier evals.R] if {$type ne "eigen"} { foreach e $Ll { lappend Le [expr {$e*$e}] } } else { set Le $Ll } AnalyseValeursPropres $Le # traite Eignevectors set Ev1 [join [LesLignesDuFichier "axe1.R"]] set Ev2 [join [LesLignesDuFichier "axe2.R"]] set Ev3 [join [LesLignesDuFichier "axe3.R"]] for {set i 1} {$i < 4} {incr i} { puts "\n $i vecteur propre" puts "==================" lassign [AnalyseVecteursPropres [set Ev$i]] k$i cor if {$i == 2} { puts "Test -1.0 * Vect. Propre" set En$i [V_SV -1.0 * [set Ev$i]] lassign [AnalyseVecteursPropres [set En$i]] kn$i cn if {$cn > $cor || $i == 2} { set Ev$i [set En$i] set k$i [set kn$i] set cor $cn } } set Av$i [VecteurDeAAIndex [set k$i]] puts [format "Select %d, corr. = %6.3f" [set k$i] $cor] puts "[DescriptionDeAAIndex [set k$i]]" } puts "" puts "V1 [CentreVecteur $Av1]" puts "V2 [CentreVecteur $Av2]" puts "V3 [CentreVecteur $Av3]" puts "" FittingParRotation $Ev1 $Ev2 $Ev3 $Av1 $Av2 $Av3 puts "\nApres CENTRAGE" FittingParRotation $Ev1 $Ev2 $Ev3 $Av1 $Av2 $Av3 1 puts "\nApres centrage et mise a l'echelle" FittingParRotation $Ev1 $Ev2 $Ev3 $Av1 $Av2 $Av3 1 1 exit } proc RRACTAYRscore {Sequence {Mode 8}} { set actarray [split $Sequence ""] set score 0 if {$Mode == 8} { if {[lindex $actarray 0] == "A" || [lindex $actarray 0] == "G" } { incr score } if {[lindex $actarray 1] == "A" || [lindex $actarray 1] == "G" } { incr score } if {[lindex $actarray 2] == "A"} { incr score } if {[lindex $actarray 3] == "C"} { incr score } if {[lindex $actarray 4] == "T"} { incr score } if {[lindex $actarray 5] == "A"} { incr score } if {[lindex $actarray 6] == "C" | [lindex $actarray 6] == "T"} { incr score } if {[lindex $actarray 7] == "A" | [lindex $actarray 7] == "G"} { incr score } } if {$Mode == 6} { if {[lindex $actarray 0] == "A"} { incr score } if {[lindex $actarray 1] == "C"} { incr score } if {[lindex $actarray 2] == "T"} { incr score } if {[lindex $actarray 3] == "A"} { incr score } if {[lindex $actarray 4] == "C" | [lindex $actarray 6] == "T"} { incr score } if {[lindex $actarray 5] == "A" | [lindex $actarray 5] == "G"} { incr score } } return $score } proc RRGardeLesEucaryotes {Fichier} { set LesEucaryotes {} set Texte [ContenuDuFichier $Fichier] while {[set BH [ValeurDeLaBalise "BlastHit" Texte]]!=""} { set AC [ValeurDeLaBalise AC BH NePasRogner] set OX [ValeurDeLaBalise OX BH NePasRogner] set DE [ValeurDeLaBalise DE BH NePasRogner] Espionne "OX $OX" set HasEuka 0 foreach TaxId [split $OX " "] { regsub {[^0-9]} $TaxId "" TaxId if { ! [EstUnEucaryote $TaxId]} { continue } set HasEuka 1 break } Espionne "$HasEuka $BH" if {$OX!="" && ! $HasEuka} { continue } # AppendAuFichier les_eucaryotes $Ligne lappend LesEucaryotes $BH } return $LesEucaryotes } proc RRPSMemeSequences {s1 s2} { set Ls1 [split $s1 ""] set Ls2 [split $s2 ""] set meme 1 foreach a $Ls1 b $Ls2 { if {$a ne $b && $a ne "-" && $b ne "-" && $a ne "X" && $b ne "X" && $a ne "0" && $b ne "0"} { set meme 0 break } } return $meme } proc RRPS_AnalyseResultatsBruts {} { set dcdn toto sqlite3 $dcdn wobble.sql $dcdn eval {begin transaction} set result [list] $dcdn eval "PRAGMA TABLE_INFO(wobble)" row { lappend result $row(name) $row(type) $row(pk) } set i 0 foreach {n t pk} [lrange $result 3 end] { set min [$dcdn eval "select min($n) from wobble"] set nbmin [$dcdn eval "select count($n) from wobble where $n=$min"] set max [$dcdn eval "select max($n) from wobble"] set nbmax [$dcdn eval "select count($n) from wobble where $n=$max"] puts [format "%2d %-13s %5.3f %5d %5.3f %5d" $i $n $min $nbmin $max $nbmax] incr i } $dcdn close return } proc RRParseSvg {{FichierSvg ""} {FichierSvgOut ""}} { if {[regexp "\n" $FichierSvg]} { set Texte $FichierSvg set FichierSvg "FromText" if {$FichierSvgOut==""} { set FichierSvgOut "GetSvg" } } else { if {$FichierSvg ==""} { set FichierSvg "/genomics/link/CilioCarta2014/CanvasToSvgFile.svg" } if {$FichierSvgOut==""} { set FichierSvgOut $FichierSvg regsub ".svg$" $FichierSvgOut "" FichierSvgOut append FichierSvgOut "_Out.svg" } set Texte [ContenuDuFichier $FichierSvg] } set Svg [ValeurDeLaBalise "svg" Texte "NePasRogner" AttSvg] set SvgOut $Texte regsub -all "\{>" $Svg "\{@" Svg # Espionne $AttSvg while 1 { set B [ProchaineBalise Svg Att "Rogner"] # Espionne "[string length $Svg] Balise=$B Att: $Att :::::::::::::::::::::::::::" # Espionne $B if {[regexp { id='([^']+)'} $Att Match ID]} { set LesChampsDuId $ID # Espionne "Pour la balise <$B> LesChamps" # EspionneL $LesChampsDuId lassign $LesChampsDuId Acc FichierBlast AliBrut Subject Type set dMatch [string first [string range $Match 0 10] $SvgOut] set fMatch [expr $dMatch + [string length $Match]] set SvgOut [string replace $SvgOut $dMatch $fMatch " id='${Type}_$Acc' class='$Type' data-alibrut='$AliBrut' data-subject='$Subject' "] # if {[incr i]>3} { Espionne $SvgOut; exit } } if {$B==""} { break } } regsub -all "='@" $SvgOut "='>" SvgOut if {$FichierSvgOut=="GetSvg"} { return $SvgOut } return [Sauve $SvgOut dans $FichierSvgOut ] } proc RRRRRCanvasDuBlastToSvg {FileBlast {FileSvg ""}} { set K [IllustreLeBlast $FileBlast] if {$FileSvg == ""} { set FileSvg "[TmpFile Blastp].svg" } set svg [CanvasToSvgFile $K GetSvg] # TODO id-> data regsub -all {id=} $svg "class=" svg return $svg } proc RVof {Nom} { regsub -all {[^0-9]} $Nom "" Numero set RV [string range $Numero 0 1] return $RV } proc R_M {M} { # Attention les indices des tableaux commencent a 1 global MemoRMoldU ; if { ! [info exists MemoRMoldU]} { T_V MemoRMoldU [V_unit] 1 } T_M B $M 1 set Determ [S_deterM $M] set PiS2 [expr 0.5*[Pi]] if { $Determ < 0.7 || 1.3 < $Determ } { ErreurMath3D "Determinant $Determ is not 1.0" } set Theta2 [expr atan2( sqrt($B(1,3)*$B(1,3) + $B(2,3)*$B(2,3)), $B(3,3) )] set Zeta [expr 1.-cos($Theta2)] if {[expr $Zeta > 0.001] && [expr $Zeta < 1.999]} { set Theta1 [expr atan2($B(3,1),-$B(3,2))] set Theta3 [expr atan2($B(1,3), $B(2,3))] } else { set Theta3 0. if {[expr $Zeta < 0.001]} { set Theta1 [expr atan2( $B(1,2)-$B(2,1), $B(1,1)+$B(2,2) )] } else { set Theta1 [expr atan2( $B(1,2)+$B(2,1), $B(1,1)-$B(2,2) )] } } set Alpha [Between0And2Pi [expr $Theta1-$PiS2]] set Beta $Theta2 set Gamma [Between0And2Pi [expr $Theta3+$PiS2]] set Angle(1) $Alpha set Angle(2) $Beta set Angle(3) $Gamma set CKappa [expr 0.5*($B(1,1)+$B(2,2)+$B(3,3)-1.)] if {[expr abs($CKappa)>1.01]} { ErreurMath3D "CKappa $CKappa to big" } set Kappa [expr acos($CKappa)] if {[expr $CKappa>0.9999]} { # ROTATION NULLE. DIRECTION ARBITRAIRE (axe Z) non!! # crr non !!!!!!!! il vaut mieux prendre la precedente. T_T U MemoRMoldU } elseif {[expr $CKappa < -0.99]} { # ROTATION PROCHE DE 180 foreach I {1 2 3} { set ARG [expr $B($I,$I)-$CKappa] if {[expr $ARG < -0.01]} { ErreurMath3D "SQRT $ARG <0" } if {[expr $ARG < 0.0 ]} { set ARG 0.0 } set U($I) [expr sqrt($ARG/(1.-$CKappa))] } # DETERMINER LE SIGNE DU PLUS GRAND COS.DIR. set I 1 if {$U(2)>$U($I)} { set I 2 } if {$U(3)>$U($I)} { set I 3 } set K [expr $I%3+1] set L [expr $K%3+1] set U(I) [Sign $U($I) [expr ($B($K,$L)-$B($L,$K))]] set U(K) [Sign $U($K) [expr $U($I)*($B($K,$I)+$B($I,$K))]] set U(L) [Sign $U($L) [expr $U($I)*($B($L,$I)+$B($I,$L))]] } else { # ROTATION GENERALE set DSK [expr 2.*sin($Kappa)] foreach I {1 2 3} { set K [expr $I%3+1] set L [expr $K%3+1] set U($I) [expr ($B($K,$L)-$B($L,$K))/$DSK] } } # puts [array get U] set PsiZ [expr acos($U(3))] set PhiZ [expr atan2($U(2),$U(1))] set Angle(4) $Kappa set Angle(5) $PsiZ set Angle(6) $PhiZ if {[S_VV [V_T U] * [V_T MemoRMoldU]] < 0} { set U(1) [expr -$U(1)] set U(2) [expr -$U(2)] set U(3) [expr -$U(3)] set Angle(4) [expr -$Angle(4)] } T_T MemoRMoldU U return [R_create $Angle(4) [V_create $U(1) $U(2) $U(3)]] } proc R_create {Angle Axe} { set A [list $Angle] set AxeNormalise [V_nV $Axe] return [concat $A $AxeNormalise] } proc R_unit {Angle k {n 3}} { set Axe [V_unit $k $n] return [R_create $Angle $Axe] } proc RacineDuPDB {Access} { regsub {_[A-Z]+$} $Access "" Racine return $Racine } proc RafraichitAffichage {} { MetAJourNomsEtSeqs ChangeNomsAff $::Defauts(NomsAffiches) AfficheNomsEtSeqs RepeintNomsEtSeqs return } proc Ragot {args} { set Texte [join $args " "] AppendAuFichier [HomeRipp]/magos.log $Texte } proc RaiseLesAverageDeLOligo {K} { Wup "Met au premier plan les averages des graphes" set LesGraphes [LesGraphesDeLOligo $K] foreach Graph $LesGraphes { Raiser $K "Average${Graph}" } return "" } proc Raiser {K tagorid} { Wup "Met au premier plan le widget marque par tagorid" $K raise $tagorid return "" } proc RajoutBallastGrid {bfile liste e m MaxLength aBId aAcc} { global DefautsPipe upvar $aBId BId upvar $aAcc Acc set VerifFrag [set DefautsPipe(Filter,fragment)] set EnleveVarSplic [set DefautsPipe(Filter,varsplic)] if {! [file exists $bfile]} {return $liste} set LBlast [LesLignesDuFichier $bfile] DecortiqueBlastGrid $LBlast 9999. 5000 Query lBanqueId lAccess lDE lProfil lPN "LongDescription" set nelt [llength $liste] set nmax [expr $nelt / 2] if {[expr $nelt + $nmax] > $m} { set nrajout [expr $m - $nelt] } else { set nrajout $nmax } set npris 0 foreach p $lPN a $lBanqueId x $lAccess des $lDE { if {$npris >= $nrajout} {break} if {$p < $e} {continue} if {[EstTropLong $des $MaxLength]} {continue} if {$VerifFrag && [EstUnFragmentGrid $des]} {continue} if {$EnleveVarSplic && [EstUnVarSplic $a]} {continue} lappend liste $a lappend BId $a lappend Acc $x incr npris } return $liste } proc RajoutEnFinDesLignesDuFichier {Fichier Rajout {Sortie ""}} { if {$Sortie=="GetList"} { set Sortie "" } set LeNew {} foreach Ligne [LesLignesDuFichier $Fichier] { lappend LeNew "$Ligne$Rajout" } if {$Sortie!=""} { return [SauveLesLignes $LeNew dans $Sortie] } if {$Sortie=="GetText"} { return [join $LeNew "\n"] } return $LeNew } proc RajouteAccess {Path} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "RajouteAccess-$timestamp : Start" set TfaFile [open "$Path.prom" "r"] set AccessFile [open "$Path.acc" "r"] set FileOut [open "$Path.promo" "w"] set AccessRead 0 while { [gets $TfaFile Ligne] >= 0 } { set FirstChar [string range $Ligne 0 0] if { $FirstChar == ">" } { gets $AccessFile Access incr AccessRead regsub {>.} $Ligne ">$Access|" Ligne } else { #regsub -all {a} $Ligne "N" Ligne #regsub -all {t} $Ligne "N" Ligne #regsub -all {c} $Ligne "N" Ligne #regsub -all {g} $Ligne "N" Ligne } puts $FileOut $Ligne } close $TfaFile close $AccessFile close $FileOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "RajouteAccess-$timestamp : End ($AccessRead)" } proc RajouteChrom {Path} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "RajouteAccess-$timestamp : Start" set AccessFile [open "$Path.acc" "r"] set FichierDesRequetes [open "/tmp/RajouteChrom.bql" "w"] set FichierEnrichi [open "$Path.acc2" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "RajouteAccess-$timestamp : Building requests" while { [gets $AccessFile Access] >= 0 } { puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT name, chrom FROM ucschuman.refgene where name='$Access'" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } close $FichierDesRequetes set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "RajouteAccess-$timestamp : Executing requests" exec /biolo/bird/bin/birdql_client.sh "/tmp/RajouteChrom.bql" "bird" "/tmp/RajouteChrom.res" set FichierDesRequetesExecutees [open "/tmp/RajouteChrom.res" "r"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "RajouteAccess-$timestamp : Parsing results" while { [gets $FichierDesRequetesExecutees Query] >= 0 } { gets $FichierDesRequetesExecutees LigneE ScanLaPipe $LigneE Access Chromosome puts $FichierEnrichi "$Access $Chromosome" } close $FichierDesRequetesExecutees close $AccessFile set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "RajouteAccess-$timestamp : End" } proc RajouteCrEnFinDeFasta {} { set Rep "/biolo/orthoinspector/DataOrthoinspector/Orthoinspector_v2/eukaryota/all" foreach Fichier [lsort [glob -nocomplain "$Rep/*.fasta"]] { set Queue [file tail $Fichier] set f [open $Fichier "a+"] set Texte [read $f] if {[string index $Texte end]=="\n"} { close $f; continue } puts $f "" Espionne $Queue close $f } } proc RajouteEnFinDeEnteteFasta {{FichierFastaIn ""} {Fin ""} {FichierFastaOut ""} {Clean ""}} { set MaxLigne 900 set Clean [string equal -nocase $Clean "Clean"] #rR attention il faut le blanc en début de ce qu'on rajoute set LeNouveau {} foreach Ligne [LesLignesDuFichier $FichierFastaIn] { if {[regexp "^>" $Ligne] && ! [regexp $Fin $Ligne] } { set F [string length $Fin] set L [string length $Ligne] if {$F +$L > 960 } { set Milieu [expr $L/2] set Excuse " ... HERE XXXX CHARACTERS WERE CUTTED ... " set ACouper [expr $L - $MaxLigne + [string length $Excuse]] regsub "XXXX" $Excuse $ACouper Excuse set Half [expr $ACouper/2] set AvantMilieu [expr $Milieu - $Half] set ApresMilieu [expr $Milieu + $Half] set LigneCoupee "" append LigneCoupee [string range $Ligne 0 $AvantMilieu] append LigneCoupee $Excuse append LigneCoupee [string range $Ligne $ApresMilieu end] set Ligne $LigneCoupee } append Ligne $Fin } if {$Clean} { regsub -all {[\[\]]} $Ligne "" Ligne } lappend LeNouveau $Ligne } SauveLesLignes $LeNouveau dans $FichierFastaOut return $FichierFastaOut } proc RajouteOXDansBanqueOrthoinspector {{Qui ""}} { #rR Quand j'ai créé les protéomes et les banques blast de Orthoinspector j'ai mis TAXID=9606 et non pas OX=9606 #rR Je corrige ça ici if {$Qui==""} { set Qui "*" } set RepBank "[RepertoireDuGenome]/banques" NousAllonsAuBoulot $RepBank file mkdir "../newbanques" set LesNouvellesBanques {} foreach Fichier [lsort [glob $Qui]] { if {[regexp {\.p} $Fichier]} { continue } Espionne $Fichier set Nouveau "../newbanques/$Fichier" set LeNouveau {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp "^>" $Ligne] } { lappend LeNouveau $Ligne; continue } if { ! [regexp { TAXID=([0-9]+)} $Ligne Match OX] } { lappend LeNouveau $Ligne; continue } append Ligne " OX=$OX" lappend LeNouveau $Ligne } SauveLesLignes $LeNouveau dans $Nouveau lappend LesNouvellesBanques $Fichier } OnRevientDuBoulot return $LesNouvellesBanques } proc RajouteOXDansEnteteFasta {{FichierFastaIn ""} {OX ""} {FichierFastaOut ""}} { set LeNouveau {} foreach Ligne [LesLignesDuFichier $FichierFastaIn] { if {[regexp "^>" $Ligne] && ! [regexp { OX=([0-9]+)} $Ligne] } { append Ligne " OX=$OX" } lappend LeNouveau $Ligne } SauveLesLignes $LeNouveau dans $FichierFastaOut return $FichierFastaOut } proc RajouterACTA {} { #Rajoute le RRACTACA a partir des SBS et recupere les 50pb upstream et downstream en tenant compte du brin #set FichierDesBiDirAvecSBS [open "/genomics/link/STAF/fiches/Bidir/1000/SBSDansLes847promoteurs.txt" "r"] Espionne "RajouterACTA : Start" set FichierIn [open "/genomics/link/STAF/fiches/inputFiles/localisations082.coord" "r"] set FichierOut [open "/genomics/link/STAF/fiches/inputFiles/ActaLocalisations082.coord" "w"] set I 0 while { [gets $FichierIn Ligne] >=0} { incr I if { $I == 41250 } {Espionne "25% done"} if { $I == 82500 } {Espionne "50% done"} if { $I == 123750 } {Espionne "75% done"} if { $I == 165000 } {Espionne "100% done"} ScanLaListe $Ligne ID Chromosome SBSStart SBSEnd SBSOrientation Sequence Score regsub -all -nocase {chr} $Chromosome "" Chromosome if { $SBSStart != "X" } { if {$SBSEnd == "X" } { Espionne $LigneBiDir } if { $SBSOrientation == "+"} { set ActaStart [expr $SBSStart - 9] set ActaEnd [expr $SBSStart - 1] set CinqPrimeStart [expr $SBSStart - 50] set CinqPrimeEnd [expr $SBSStart - 1] set TroisPrimeStart [expr $SBSEnd + 1] set TroisPrimeEnd [expr $SBSEnd + 50] } else { set ActaStart [expr $SBSEnd + 1] set ActaEnd [expr $SBSEnd + 9] set CinqPrimeStart [expr $SBSEnd + 1] set CinqPrimeEnd [expr $SBSEnd + 50] set TroisPrimeStart [expr $SBSStart - 50] set TroisPrimeEnd [expr $SBSStart - 1] } #set SBS [string toupper [BoutAdnDeUcscBoost $SBSStart $SBSEnd $SBSOrientation "Human" $Chromosome "bigZips200603" ]] set RRACTACA [string toupper [BoutAdnDeUcscBoost $ActaStart $ActaEnd $SBSOrientation "Homo_sapiens" $Chromosome "bigZips200603" ]] set CinqPrime [string toupper [BoutAdnDeUcscBoost $CinqPrimeStart $CinqPrimeEnd $SBSOrientation "Homo_sapiens" $Chromosome "bigZips200603" ]] set TroisPrime [string toupper [BoutAdnDeUcscBoost $TroisPrimeStart $TroisPrimeEnd $SBSOrientation "Homo_sapiens" $Chromosome "bigZips200603" ]] } else { set RRACTACA "X" set CinqPrime "X" set TroisPrime "X" set SBS "X" } puts $FichierOut "$ID $Chromosome $SBSStart $SBSEnd $SBSOrientation $RRACTACA $Sequence $Score $CinqPrime $TroisPrime" } Espionne "RajouterACTA : End" close $FichierOut } proc RajouterAutoIncrementMysqimport {File} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterAutoIncrementMysqimport : Start" set FichierIn [open "$File" "r"] set FichierOut [open "$File.csv" "w"] set lus 0 while { [gets $FichierIn Ligne] >= 0} { incr lus ScanLaListe $Ligne chrom start end sequence score strand puts $FichierOut "0\t$Ligne" } close $FichierIn close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterAutoIncrementMysqimport : End" } proc RajouterCellLineDansEncode {Factor Table} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncode : Start for factor $Factor" set FichierEncodePure [open "/tmp/$Table.csv" "w"] set lus 0 #foreach CellType "Gm12878Pol2" "Hek293Pol2" "Helas3Pol2" "Hepg2Pol2" "K562Pol2" "Nb4Pol2" foreach CellType { "Gm12878" "Hepg2" "K562" } { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncode : Cell $CellType" set FichierEncode [open "wgEncodeUncFAIREseqPeaks$CellType.narrowPeak" "r"] while { [gets $FichierEncode Ligne] >= 0} { incr lus ScanLaListe $Ligne chrom chromStart chromEnd name2 score strand signalValue pValue qValue regsub $Factor $CellType "" CellType puts $FichierEncodePure "0\t$chrom\t$chromStart\t$chromEnd\t$name2\t$score\t$strand\t$signalValue\t$pValue\t$qValue\t$CellType" } close $FichierEncode } close $FichierEncodePure set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncode : Loading $lus records is table $Table..." exec /usr/bin/mysqlimport --user=anno --password=ceji387. --host=[LbgiHost] "ucschuman" "/tmp/$Table.csv" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncode : End" } proc RajouterCellLineDansEncodeHistone {Table} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncodeHistone : Start" set FichierEncodePure [open "/tmp/$Table.csv" "w"] set lus 0 foreach Modif {"H3k27ac" "H3k27me3" "H3k36me3" "H3k4me1" "H3k4me2" "H3k4me3" "H3k9ac" "H4k20me1" "H3k9me1"} { foreach CellType { "Gm12878" "Huvec" "K562" "Nhek" } { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncodeHistone : Modif=$Modif Cell=$CellType" if { [file exists "wgEncodeBroadChipSeqPeaks$CellType$Modif.broadPeak"]} { set FichierEncode [open "wgEncodeBroadChipSeqPeaks$CellType$Modif.broadPeak" "r"] while { [gets $FichierEncode Ligne] >= 0} { incr lus ScanLaListe $Ligne chrom chromStart chromEnd name2 score strand signalValue pValue qValue puts $FichierEncodePure "0\t$Modif\t$chrom\t$chromStart\t$chromEnd\t$name2\t$score\t$strand\t$signalValue\t$pValue\t$qValue\t$CellType" } close $FichierEncode } else { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncodeHistone : File wgEncodeBroadChipSeqPeaks$CellType$Modif.broadPeak is missing" } } } close $FichierEncodePure set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncodeHistone : Loading $lus records is table $Table..." exec /usr/bin/mysqlimport --user=anno --password=ceji387. --host=[LbgiHost] "ucschuman" "/tmp/$Table.csv" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterCellLineDansEncodeHistone : End" } proc RajouterXP {PathPeaks PathBsDansPeaks} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RajouterOK : Start" set FichierPeaks [open "$PathPeaks.csv" "r"] set FichierPeaksEnrichi [open "$PathPeaks.xp.csv" "w"] set I 0 set O 0 set ListeDesID {} while { [gets $FichierPeaks LignePeak] >=0 } { incr I ScanLaListe $LignePeak chrom start end length summit tags peak fold set FichierBsDansPeaks [open "$PathBsDansPeaks.coord" "r"] while { [gets $FichierBsDansPeaks LigneBsDansPeaks] >=0 } { ScanLaListe $LigneBsDansPeaks IDBS chromBS startBS endBS strandBS chromX startX endX length extendStart extendEnd summit tags peak fold if { $chrom == $chromX && $start == $startX && $end == $endX } { set LignePeak "$LignePeak $IDBS" incr O if { [lsearch -all $ListeDesID $IDBS] == ""} { lappend ListeDesID $IDBS } } } puts $FichierPeaksEnrichi $LignePeak close $FichierBsDansPeaks } close $FichierPeaks close $FichierPeaksEnrichi set timestamp [clock format [clock seconds] -format "%H:%M:%S"] set vrais [llength $ListeDesID] Espionne "$timestamp|$timestamp|RajouterOK : End ($I/$O) dont $vrais vrais" } proc RajouterXP2 {Path Separator} { #Verifie dans un set de SBS s'ils sont des experimentaux ou non set FichierIn [open "$Path.txt" "r"] set FichierOut [open "$Path.XP.csv" "w"] while { [gets $FichierIn Ligne] >=0 } { ScanLeTruc $Ligne $Separator ID chrom start end reste if {$ID != "BS|ID" } { set FichierXP [open "/genomics/link/STAF/fiches/inputFiles/XP/Decortic.best" "r"] set trouve "non" while { [gets $FichierXP LigneXP] >=0 } { ScanLaListe $LigneXP IDX chromX startX endX restex if {[expr $start - 5] <= $startX && [expr $end + 5] >= $endX && $chromX == "chr$chrom"} { incr written set trouve "yes" Espionne "$ID est le XP num $written ($IDX)" break } } close $FichierXP #puts $FichierOut "$trouve $Ligne" } } close $FichierIn close $FichierOut } proc RallongeXie {} { # Rajoute le SBS potentiel derriere les sequences Xie hg18 et le propose dans une colonne unique set FichierDesCoordonneesIn [open "[Fiches]/Bidir/FichierDeCoordonnees-200603.txt" "r"] set FichierDesCoordonneesOut [open "[Fiches]/Bidir/FichierDeCoordonnees-200603-AvecSequences.txt" "w"] Espionne "RallongeXie: Start" while { [gets $FichierDesCoordonneesIn LigneCoordonnees] >=0 } { ScanLaListe $LigneCoordonnees Id Chromosome Start End Strand set Length [expr $End - $Start] if {$Length == 7 } { set LengthToAdd 20 } if {$Length == 12} { set LengthToAdd 13 } if {$Length == 11} { set LengthToAdd 14 } if {$Strand == "+"} { set StartNew $Start set EndNew [expr $End + $LengthToAdd] } else { set StartNew [expr $Start - $LengthToAdd] set EndNew $End } regsub -all -nocase {chr} $Chromosome "" Chromosome set Sequence [BoutAdnDeUcscBoost $StartNew $EndNew $Strand "huamn" $Chromosome "bigZips200603"] if {$Length == 7} { set SbsPotentiel [string range $Sequence 9 26] } if {$Length == 12} { set SbsPotentiel [string range $Sequence 7 24] } if {$Length == 11} { set SbsPotentiel [string range $Sequence 7 24] } puts $FichierDesCoordonneesOut "$LigneCoordonnees $Sequence $SbsPotentiel" } close $FichierDesCoordonneesIn close $FichierDesCoordonneesOut Espionne "RallongeXie: Done" } proc RallongerSequence {Path LongueurARallongerEnCinqPrime LongueurARallongerEnTroisPrime {Organisme human} {VersionGenome bigZips200603}} { #Rallonge un ensemble de séquences d'une longueur LongueurARallonger # Compteurs : # -------- set CompteurLus 0 set Ecrit 0 # Déclaration des fichiers # ------------------------ set FichierEntree [open "$Path.coord" "r"] set FichierDesRallonges [open "$Path.ral" "w"] # Do the loop, baby yeah ! # ------------------------ while { [gets $FichierEntree LigneEntree] >=0 } { incr CompteurLus Espionne "SBS $CompteurLus : done" set SeqUcsc "ZZZZZZZZZZZZZZZZZZZZZZZZZ" ScanLaListe $LigneEntree ChromosomeQ StartQ EndQ OrientationQ SequenceQ # Pour rallonger les fichiers Conservations totaux de EasyPHICS ( accolade en bas !!) # ScanLaListe $LigneEntree ChromosomeH IdH DrH StartH EndH OrientationH Score MM NbMM Slashes Reste # set ListeSlashes [split $Slashes "/"] # set ChromosomeQ [lindex $ListeSlashes 1] # set OrientationQ [lindex $ListeSlashes 2] # set StartQ [lindex $ListeSlashes 3] # set EndQ [lindex $ListeSlashes 4] # if { $ChromosomQ != "X" } { #Ptite moulinette car parfois j'inverse Start et End if { $StartQ > $EndQ } { set Temporaire $EndQ set EndQ $StartQ set StartQ $Temporaire } if { $OrientationQ == "+" } { set DebutInput [expr $StartQ - $LongueurARallongerEnCinqPrime] set FinInput [expr $EndQ + $LongueurARallongerEnTroisPrime] } else { set DebutInput [expr $StartQ - $LongueurARallongerEnTroisPrime] set FinInput [expr $EndQ + $LongueurARallongerEnCinqPrime] } regsub -all {chr} $ChromosomeQ "" Chromosome set SeqUcsc [BoutAdnDeUcscBoost $DebutInput $FinInput $OrientationQ $Organisme $Chromosome $VersionGenome] set RR [string range $SeqUcsc 0 1] set ACTACAN [string range $SeqUcsc 2 8] puts $FichierDesRallonges "$LigneEntree $RR $ACTACAN" # } } close $FichierEntree close $FichierDesRallonges } proc RameneBalibase {} { set BalibaseWB "/workbench/julie/bb/bb3" if { ! [OuiOuNon "Really, you want to reload Balibase with $BalibaseWB ?" 0]} { return {} } set Fin 299 foreach Rep [list "ref1/v1" "ref1/v2" "ref2/test" "ref3/test" "ref4/test" "ref5/test"] { regsub -all {[^0-9]} $Rep " " RV set V 0 scan $RV "%d %d" R V set Numero "$R${V}000" foreach F [lsort [glob -nocomplain "$BalibaseWB/$Rep/*.rsf"]] { incr Numero set Nom "BB$Numero" set Debut [expr $Fin + 299] set Fin [expr $Debut + 1802] set Orient "F" lappend LesBornesDesPABs "$Nom $Debut $Fin $Orient" Espionne "$Nom $F" set BBfile [file tail $F] regsub ".rsf$" $BBfile "" BBname set Alias $BBname set LeTexte {} lappend LeTexte "Nom: $Nom" lappend LeTexte "Alias: $Alias" lappend LeTexte "RV: $R$V" set FichierInfos [BalibaseFile $Nom "infos"] SauveLesLignes $LeTexte dans $FichierInfos set FichierRsf [BalibaseFile $Nom "rsf"] Sauve [ContenuDuFichier $F] dans $FichierRsf set FichierXml [BalibaseFile $Nom "xml"] regsub ".rsf$" $F ".xml" Fxml if {[file exists $Fxml]} { Sauve [ContenuDuFichier $Fxml] dans $FichierXml } } } return [SauveLesLignes $LesBornesDesPABs dans "[RepertoireBalibase]/fiches/bornesdespabs"] } proc RameneInfoSeq {} { global LNOrdali global NomOrgaCanon global ListeNomAssocieALAccess global LaClasseAssocieeAuxSequences global LesSequencesAssocieesClassesCanon global ListeDesNomsDeGene global ListeDesDefinitions if {[TypeAli] eq "pasdali"} {return} set ListeNomAssocieALAccess {} set ListeDesDefinitions {} set ListeDesNomsDeGenes {} set lorp {} FaireAttendre "Please wait ....\nRetrieving canonical names from access numbers ...." AuLog "\nCanonical names from access numbers\n===================================\n" set k 1 foreach NmSq $LNOrdali { # DecortiqueLesLignesEMBL [LaSequenceDesBanques $NmSq $NmSq AccessOK "OnVeutEMBL"] ID AC DE GN OS OC OG set ID "" set GN "" set OS "" set OC "" set OG "" set DE "" set leslignes [RecupereUnFichierSurWeb [string toupper $NmSq]] if {$leslignes != "ERREUR"} { DecortiqueLesLignesEMBL $leslignes ID AC DE GN OS OC OG } if {$GN == ""} {set GN "XXXXX"} set NomOrgaCanon "Unkn.unknw" if {$OS != ""} { set Organisme [OrganismeCanonique $OS Sommaire] if {$Organisme != ""} { set NomOrgaCanon [Glossaire "$Organisme" "Demi"] } } set idx [lsearch -regexp $lorp $NomOrgaCanon] if {$idx != -1} { scan [lindex $lorp $idx] "%s %s" n k incr k set NomOrgaCanon "$NomOrgaCanon$k" set nv "$n $k" set lorp [lreplace $lorp $idx $idx $nv] } else { lappend lorp "$NomOrgaCanon 1" } lappend ListeNomAssocieALAccess [list $NmSq $NomOrgaCanon] set Phylum "PhylumUnknown" if {$OC != ""} { set Classe $OC set Phylum [Phylum $Classe] set LaClasseAssocieeAuxSequences($NmSq) $Classe switch $Phylum { "ARCHAEA" { lappend LesSequencesAssocieesClassesCanon(archaea) $NmSq } "EUKARYOTA" { lappend LesSequencesAssocieesClassesCanon(eukaryota) $NmSq } "BACTERIA" { lappend LesSequencesAssocieesClassesCanon(bacteria) $NmSq } } } AuLog "$NmSq $NomOrgaCanon $Phylum $DE" regsub -all {\-} $DE " " DE regsub -all { +} $DE " " DE lappend ListeDesDefinitions $DE lappend ListeDesNomsDeGenes $GN } CreeLookupNoms FaireLaSuite .attendre return } proc Random {} { set n 30 while {[incr n -1]} { set F [expr round(rand()*30)] set S [expr round(rand()*50)] if {$S<=10} { set F [expr -$F] } puts [expr $F/10] } exit } proc RandomCutter {NumeroFichier $Total $Desire} { # Elimine aléatoirement un nombre désiré de séquences du total des séquences d'un fichier set FichierClu [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/Cluster4/Cluster$NumeroFichier.slx" "r"] set OutTFA "[Fiches]/Cluster4/ClusterCutted$Cluster.tfa" set ListeSLX {} if { [file exists $OutTFA] } { file delete $OutTFA } while { [gets $FichierClu LigneClu] >=0 } { ScanLaListe $LigneClu AccessClu SequenceClu set LanceLeDe [expr round(rand()*$Total)] if {$LanceLeDe < $Desire} { AppendAuFichier $OutTFA ">$AccessClu" AppendAuFichier $OutTFA "$SequenceClu" } } } proc RangeBalibase {} { foreach Nom [ListeDesPABs] { set RV "RV[RVof $Nom]" set FicTfa "[RepertoireDuGenome]/tfas/$Nom" set NewTfa "[RepertoireDuGenome]/$RV/$Nom.tfa" set FicMsf "[RepertoireDuGenome]/msf/$Nom" set NewMsf "[RepertoireDuGenome]/$RV/$Nom.msf" file rename $FicTfa $NewTfa file rename $FicMsf $NewMsf exec ln -s $NewTfa $FicTfa exec ln -s $NewMsf $FicMsf Espionne [exec ls -l $NewMsf] Espionne [exec ls -l $FicMsf] } } proc RangeDansLaCase {NbInteract Bornes aCase} { upvar $aCase Case set Reverse [lreverse $Bornes] foreach Borne $Reverse { if {$NbInteract >= $Borne} { if {![info exists Case($Borne)]} {set Case($Borne) 0} return [incr Case($Borne)] } } if {![info exists Case($Borne)]} {set Case($Borne) 0} return [incr Case($Borne)] } proc RangeGbNmFromNcbiEnStock {} { } proc RangeGstock {{Projets ""} {DestinDefaut ""} {Force ""}} { set Force [string equal -nocase $Force "Force"] if {$DestinDefaut=="" || $DestinDefaut=="-"} { set DestinDefaut "Projets_Owner" } set LesProjets [split $Projets "\n"] foreach Ligne $LesProjets { lassign [LesMotsDeLaLigne $Ligne] Owner Projet Path if {[regexp "ProjetsManu" $Path]} { continue } if {[FileAbsent $Path]} { continue } regsub "/$Projet/fiches.*" $Path "/$Projet" Dir # Espionne "$Owner $Dir $Projet" if {$DestinDefaut=="Projets_Owner"} { set Destin "Projets_$Owner" } else { set Destin $DestinDefaut } if { ! [regexp "/" $Destin] } { set Destin "/gstock/$Destin" } file mkdir $Destin lappend ToDo "file rename $Dir $Destin/" set Link "/genomics/link/$Projet" if {[FileAbsent $Link]} { FaireLire "No $Link" } else { if {[file type $Link]!="link"} { if {[OuiOuNon "$Link is not a link\nDo I skip ? (Otherwize I'll stop)"]} { continue } else { return "" } } else { lappend ToDo "file delete $Link" } } lappend ToDo "file link $Link $Destin/$Projet" } if {$Force} { set DoIt [join $ToDo "\n"] } else { set DoIt "" set DoIt [AfficheListe $ToDo "AvecRetour"] } set LesNewPath {} foreach Do [split $DoIt "\n"] { eval $Do if {[regexp {file rename ([^ ]+) ([^ ]+)} $Do Match Dir Destin]} { lappend LesNewPath $Do } } EspionneL $LesNewPath return $LesNewPath } proc RangeLeFichier {Fichier dans Destination} { global RepertoireDuGenome set ConFi [ContenuDuFichier $Fichier] if {[regexp "[ExpressionReguliereDesPABs]" $ConFi Nom]} { set Destin "$Destination/$Nom" if { [Sauve $ConFi dans $Destin] == $Destin } { if { [file exists "$RepertoireDuGenome/clustalw/$Nom"]} { File delete -force $Fichier } return $Destin } else { Warne "$Fichier n'a pas ete range en $Destin" return "" } } Warne "$Fichier ne contient pas de nom en [PreFixe]xxxx" return "" } proc RangeLesFichiers {Extension} { global RepertoireDuGenome set Source [pwd] set Destination "$RepertoireDuGenome/$Extension" if { $Source == $Destination } { FaireLire "Attention tu es la ou tu veux ranger." return -1 } foreach Fichier [glob $Source/*.$Extension] { RangeLeFichier $Fichier dans "$Destination" } } proc RangeMacsim {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set RepertoireIn "[RepertoireDuGenome]/macsim" set RepertoireOutRsf "[RepertoireDuGenome]/macsimRsf" set RepertoireOutXml "[RepertoireDuGenome]/macsimXml" if {! [file exists $RepertoireOutRsf]} {file mkdir "[RepertoireDuGenome]/macsimRsf"} if {! [file exists $RepertoireOutXml]} {file mkdir "[RepertoireDuGenome]/macsimXml"} foreach Nom $Liste { file copy -force "$RepertoireIn/$Nom.rsf" "$RepertoireOutRsf/$Nom.rsf" file copy -force "$RepertoireIn/$Nom.xml" "$RepertoireOutXml/$Nom.xml" } file delete -force $RepertoireIn } proc RangeMoi {{Action ""} {Quoi ""} {Qui ""} {BonneBoite ""} {Raison ""}} { global RangeMoi set FichierBoiteRepresentative "[Fiches]/BoiteRepresentative" if { ! [info exists RangeMoi("EstCharge")]} { set RangeMoi("EstCharge") 1 if {[file exists $FichierBoiteRepresentative]} { array set RangeMoi [LesLignesDuFichier $FichierBoiteRepresentative] } } if {$Action=="show"} { return [AfficheVariable [join [RangeMoi get ListOf Status] "\n"]] } if {$Action=="get"} { if {[info exists RangeMoi($Quoi,$Qui)]} { return $RangeMoi($Quoi,$Qui) } else { return "" } } if {$Action=="set"} { set Ligne $Qui lappend RangeMoi(ListOf,Lines) $Ligne lappend RangeMoi(ListOf,Reasons) $Raison foreach Nom $BonneBoite { set Status "$Ligne $Raison $Nom [AccessEvi $Nom] [ExtraitInfo $Nom ValiDE]" lappend RangeMoi(StatusOf,$Ligne) $Status lappend RangeMoi(EviOf,$Ligne) $Nom lappend RangeMoi(ListOf,Evi) $Nom lappend RangeMoi(ListOf,Status) $Status lappend LesInfos $Status } RangeMoi save return $RangeMoi(StatusOf,$Ligne) } if {$Action=="save"} { if {[info exists RangeMoi(ListOf,Evi)]} { set RangeMoi(ListOf,Evi) [lsort -unique $RangeMoi(ListOf,Evi)] } return [SauveLesLignes [array get RangeMoi] dans $FichierBoiteRepresentative] } } proc RangePipeLocal {Nom} { #leon va dans le msf final avoir set FichierBlastp "[RepertoireDuGenome]/prottfa/$Nom.blastp" set FichierCopains "[RepertoireDuGenome]/prottfa/$Nom.copains" set FichierBallastMoti "[RepertoireDuGenome]/prottfa/$Nom.ballast.motifs" set FichierBallastProf "[RepertoireDuGenome]/prottfa/$Nom.ballast.prof" set FichierBallastAnch "[RepertoireDuGenome]/prottfa/$Nom.ballast.anchors" set FichierBallastAncl "[RepertoireDuGenome]/prottfa/$Nom.ballast.anclist" set FichierBallastMsf "[RepertoireDuGenome]/prottfa/$Nom.ballast.msf" set FichierBallast "[RepertoireDuGenome]/prottfa/$Nom.ballast" set FichierMsf "[RepertoireDuGenome]/prottfa/$Nom.msf" set FichierDnd "[RepertoireDuGenome]/prottfa/$Nom.dnd" set FichierRascal "[RepertoireDuGenome]/prottfa/$Nom.rascal.msf" set FichierLeon "[RepertoireDuGenome]/prottfa/$Nom.leon.msf" set FichierLeon2 "[RepertoireDuGenome]/prottfa/$Nom.leon.msf.xml" set FichierLeon3 "[RepertoireDuGenome]/prottfa/$Nom.leon.log" set FichierNormd "[RepertoireDuGenome]/prottfa/$Nom.normd" set FichierClu "[RepertoireDuGenome]/prottfa/$Nom.clu" set FichierTfa "[RepertoireDuGenome]/prottfa/${Nom}2.tfa" set FichierMacsimXml "[RepertoireDuGenome]/prottfa/$Nom.macsims.xml" set FichierMacsimRsf "[RepertoireDuGenome]/prottfa/$Nom.macsims.tmp.rsf" set bestmsf [ChoisisLeMeilleurMsf $FichierNormd] #Espionne "bestmsf $bestmsf" set RepertoireBlastpSortie "[RepertoireDuGenome]/blastp" set RepertoireCopainsSortie "[RepertoireDuGenome]/tfasdescopains" set RepertoireBallastSortie "[RepertoireDuGenome]/ballast" set RepertoireDbClustalSortie "[RepertoireDuGenome]/msfdbclustal" set RepertoireRascalSortie "[RepertoireDuGenome]/msfrascal" set RepertoireLeonSortie "[RepertoireDuGenome]/msfleon" set RepertoireNormdSortie "[RepertoireDuGenome]/normd" set RepertoireCluspackSortie "[RepertoireDuGenome]/cluspack" set RepertoireMsf "[RepertoireDuGenome]/msf" set RepertoireMacsimXml "[RepertoireDuGenome]/macsimXml" set RepertoireMacsimRsf "[RepertoireDuGenome]/macsimRsf" #file attributes $RepertoireBlastpSortie -permissions rwxrwxrwx if {! [file exists $RepertoireBlastpSortie]} {file mkdir $RepertoireBlastpSortie} if {! [file exists $RepertoireCopainsSortie]} {file mkdir $RepertoireCopainsSortie} if {! [file exists $RepertoireBallastSortie]} {file mkdir $RepertoireBallastSortie} if {! [file exists $RepertoireDbClustalSortie]} {file mkdir $RepertoireDbClustalSortie} if {! [file exists $RepertoireRascalSortie]} {file mkdir $RepertoireRascalSortie} if {! [file exists $RepertoireLeonSortie]} {file mkdir $RepertoireLeonSortie} if {! [file exists $RepertoireNormdSortie]} {file mkdir $RepertoireNormdSortie} if {! [file exists $RepertoireCluspackSortie]} {file mkdir $RepertoireCluspackSortie} if {! [file exists $RepertoireMacsimXml]} {file mkdir $RepertoireMacsimXml} if {! [file exists $RepertoireMacsimRsf]} {file mkdir $RepertoireMacsimRsf} file rename -force $FichierBlastp "$RepertoireBlastpSortie/$Nom" file rename -force $FichierCopains "$RepertoireCopainsSortie/$Nom" file rename -force $FichierBallastMoti "$RepertoireBallastSortie/$Nom.motifs" file rename -force $FichierBallastProf "$RepertoireBallastSortie/$Nom.prof" file rename -force $FichierBallastAnch "$RepertoireBallastSortie/$Nom.anchors" file rename -force $FichierBallastAncl "$RepertoireBallastSortie/$Nom.anclist" file rename -force $FichierBallastMsf "$RepertoireBallastSortie/$Nom.msf" file rename -force $FichierBallast "$RepertoireBallastSortie/$Nom" file rename -force $FichierMsf "$RepertoireDbClustalSortie/$Nom" file rename -force $FichierDnd "$RepertoireDbClustalSortie/$Nom.dnd" file rename -force $FichierRascal "$RepertoireRascalSortie/$Nom" if {[regexp "Leon" $bestmsf]} { Espionne "prendsMsfLeon" file copy -force $FichierLeon "$RepertoireCluspackSortie/$Nom" } elseif {[regexp "Rascal" $bestmsf]} { Espionne "prendsMsfRascal" file copy -force $FichierRascal "$RepertoireCluspackSortie/$Nom" } else { Espionne "prendsMsfDbClustal" file copy -force $FichierMsf "$RepertoireCluspackSortie/$Nom" } file rename -force $FichierLeon "$RepertoireLeonSortie/$Nom" file rename -force $FichierLeon2 "$RepertoireLeonSortie/$Nom.xml" file rename -force $FichierLeon3 "$RepertoireLeonSortie/$Nom.log" file rename -force $FichierNormd "$RepertoireNormdSortie/$Nom" file rename -force $FichierClu "$RepertoireCluspackSortie/$Nom.clust" file rename -force $FichierTfa "$RepertoireCluspackSortie/$Nom.tfa" file rename -force $FichierMacsimXml "$RepertoireMacsimXml/$Nom.xml" file rename -force $FichierMacsimRsf "$RepertoireMacsimRsf/$Nom.rsf" if {! [file exists $RepertoireMsf]} {file link $RepertoireMsf $RepertoireCluspackSortie} } proc RangeProt {Nom} { set RepProtembl_ "[RepertoireDuGenome]/protintermediare/protembl_" if { ! [file exists $RepProtembl_]} { File mkdir $RepProtembl_ } foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/protembl/$Nom*_*"] { file rename -force $Fichier $RepProtembl_/. } set RepProttfa "[RepertoireDuGenome]/prottfa" if { ! [file exists $RepProttfa]} { File mkdir $RepProttfa } set Fichier "[RepertoireDuGenome]/protintermediare/prottfaBEST/$Nom" set Fichier2 "[RepertoireDuGenome]/protintermediare/prottfaBEST2/$Nom" if {[file exists $Fichier]} { file copy -force $Fichier $RepProttfa/. } else { file copy -force $Fichier2 $RepProttfa/. } } proc RangeTaxobla {Id LeTaxobla} { set Nom [PABsDuIdOuAc $Id] if {$Nom==""} { return "" } set FicTaxobla [GscopeFile $Nom taxobla] if {[file exists $FicTaxobla]} { return "" } if {[PasTouche "RangeTaxobla_$Nom"]} { return "" } file mkdir [GscopeFile "" taxobla] set LesIdSub {} set LesInfos {} foreach Ligne $LeTaxobla { lassign [split $Ligne "\t"] TaxId Query Subject PId AL MM GOpen Qstart Qend Sstart Send PN Score if {[regexp {\|} $Subject]} { lassign [split $Subject "|"] Bank AcSub IdSub } else { set Bank "xx" set AcSub $Subject set IdSub $Subject } lappend LesIdSub $IdSub lappend LesInfos $IdSub $AcSub $Bank $TaxId $PN $Score } set Ids [join $LesIdSub ","] set GQ [QuestionDeScience GeneQuid "ret UniprotData $Ids QY,+GN-,+DE-"] set LesQGD [split [string trim $GQ "\n"] "\n"] set Message "$Nom $Id [llength $LeTaxobla] [llength $LesIdSub] [llength $LesQGD]" Espionne $Message LogWscope $Message foreach {Q G D} $LesQGD { regsub "GN " $G "" G regsub "DE " $D "" D regsub {;.*$} $G "" G regsub { *\{.*$} $G "" G regsub {^[^=]+=} $G "" G regsub {;.*$} $D "" D regsub {^[^=]+=} $D "" D regsub { *\{.*$} $D "" D regsub -all {[\[\]]} $D "" D set GnDe($Q) $G set DeDe($Q) $D } set LeNew {} foreach {IdSub AcSub Bank TaxId PN Score} $LesInfos { set Organisme [TaxMemo $TaxId Name] set Orga $Organisme if {[string length $Orga]>36} { set Orga "[string range $Orga 0 36]..." } set GN $GnDe($IdSub) set DE $DeDe($IdSub) set Info "$IdSub $AcSub $DE GN=$GN OS=$Organisme TAXID=$TaxId BANK=$Bank" lappend LeNew [format "%7s\t%6s\t%8s\t%-40s\t%s" $PN $Score $TaxId $Orga $Info] ;#rR rajout de score 2015/06/08 } set Fichier [SauveLesLignes $LeNew dans [GscopeFile $Nom taxobla]] if {0 && [regexp {1$} $Fichier]} { Espionne $Fichier } FinPasTouche "RangeTaxobla_$Nom" return $Fichier } proc RangeTm {K TmMoyenne X Y XDebut XFin YDebut {YFin ""} {OneNtPixel ""} {Minimum ""}} { Wup "Permet de dessiner les zones de Tm de + ou - 5 degres" global LigneZone set Police {-family "comic" -size 10 -weight bold} set XMoyenneMoins [expr $TmMoyenne - 5.0] set XMoyennePlus [expr $TmMoyenne + 5.0] set Borne1 $XMoyenneMoins set Borne2 $XMoyennePlus set CoupleDeZone [list $Borne1 $Borne2] foreach Zone $CoupleDeZone { set x [expr $XDebut + $Zone * $OneNtPixel - $Minimum * $OneNtPixel] if {[info exists LigneZone($K,$Zone)]} { catch {$K delete [set LigneZone($K,$Zone)]} catch {$K delete [set LigneZone($K,$Zone,zone)]} unset LigneZone($K,$Zone) if {[info exists LigneZone($K,$Zone,zone)]} {unset LigneZone($K,$Zone,zone)} } if {$x>$XFin} { set x $XFin set Zone [format "%.1f" [expr (($x-$XDebut) / (1.0*$OneNtPixel)) +$Minimum]] } set Numero "" set Numero $Zone set LigneZone($K,$Zone,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "$Numero" -fill "yellow" -anchor "center" -tags [list "" "Zonable" "Flag"]] set LigneZone($K,$Zone) [$K create line $x $YDebut $x $YFin -fill "green3" -tags [list "" "$Zone" "Affichable" "Zonable"]] } return "" } proc RankBlockAllConnectes {Lag} { global TAg T # Verifie connection de tous avec tous set nv 0 ; set srk 0.0 set log {} set ok 1 set min 99999 ; set max -9999. foreach {n1 ag1} $Lag { foreach {n2 ag2} $Lag { if {$n1 eq $n2 && $ag1 == $ag2} { continue } set Lag12 [lsearch -inline -all -index 0 $T($n1,$ag1) $n2] set Lag12 [lsort -real -decreasing -index 2 $Lag12] set idx [lsearch -exact -index 1 $Lag12 $ag2] if {$idx == -1} { set ok 0 break } else { if {$idx < $min} { set min $idx } if {$idx > $max} { set max $idx } set srk [expr {$srk + $idx}] incr nv } } if {! $ok} { break } } if {$ok} { set srk [list [expr {double($srk) / $nv}] $min $max] } else { set srk -1 } return $srk } proc RankBlockAllConnectes2 {Lag} { global TAg T # Verifie connection de tous avec tous set nv 0 ; set srk 0.0 set log {} set ok 1 set min 99999 ; set max -9999. set nZero 0 ; set nSup 0 foreach {n1 ag1} $Lag { foreach {n2 ag2} $Lag { if {$n1 eq $n2 && $ag1 == $ag2} { continue } set idx [lsearch -exact -index 0 $T($n1,$ag1,$n2) $ag2] if {$idx == -1} { set ok 0 break } else { if {$idx == 0} { incr nZero } else { incr nSup } if {$idx < $min} { set min $idx } if {$idx > $max} { set max $idx } set srk [expr {$srk + $idx}] incr nv } } if {! $ok} { break } } if {$ok} { set srk [list [expr {double($srk) / $nv}] $min $max $nZero $nSup] } else { set srk -1 } return $srk } proc RankBlockChaines {Lag} { global TAg T # verifie que les agents sont lies # deux a deux set ok 1 set log {} set n1 [lindex $Lag 0] set ag1 [lindex $Lag 1] # pour faire le tour, # rajoute n1 ag1 a la fin lappend Lag $n1 $ag1 set srk 0.0 ; set nrk 0 foreach {n2 ag2} [lrange $Lag 2 end] { set Lag12 [lsearch -inline -all -index 0 $T($n1,$ag1) $n2] set Lag12 [lsort -real -decreasing -index 2 $Lag12] set idx [lsearch -exact -index 1 $Lag12 $ag2] if {$idx == -1} { puts "cherche $ag2 dans $Lag12" set ok 0 break } else { set srk [expr {$srk + $idx}] incr nrk lappend log "($n1,$ag1) -> $n2 $ag2 $idx" set n1 $n2 set ag1 $ag2 } } if {$ok} { set rk [expr {$srk / $nrk}] lappend log "rank moyen $rk" } else { lappend log "agent non chaines" } return $log } 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 RankSample {{What ""} {Criteria ""}} { set Increment 1 if {$Criteria==""} { set Criteria "Rank" } if {$Criteria=="Rank"} { set RankSample [list 1 2 3 4 5 7 8 9 10 15 20 25 30 35 40 45 50 55 60 70 75 80 90 101] } if {$Criteria=="DeltaR"} { set RankSample [concat [list -100] [NombresEntre -75 50 5] [list 100]] } if {$Criteria=="DeltaE"} { set RankSample [concat [list -250] [NombresEntre -220 50 5] [list -250]] } if {$Criteria=="DeltaS"} { set RankSample [concat [list 9000] [NombresEntre 3000 0 -100] ] ; set Increment -1 } if {$Criteria=="Score"} { set RankSample [concat [list 9000] [NombresEntre 3000 0 -100] [list -3000]] ; set Increment -1 } if {$Criteria=="LogExp"} { set RankSample [concat [list -250] [NombresEntre -220 0 5] ] } set RankSampleDeb {} set RankSampleFin {} foreach D [lrange $RankSample 0 end-1] F [lrange $RankSample 1 end] { incr F -1 lappend RankSampleDeb $D lappend RankSampleFin $F } foreach D $RankSampleDeb F $RankSampleFin { lappend RankSampleLimits "$D-$F" } if {$What=="List"} { return $RankSample } if {$What=="ListOfList"} { set LL {} foreach D $RankSampleDeb F $RankSampleFin { lappend LL [NombresEntre $D $F $Increment] } return $LL } } proc RapatrieLaPageHTMLDeId {CompleteId Access {JEffaceLesFichiersExistants 0} {RepHTML ""}} { package require http if {$RepHTML == "" } { set RepHTML [ChoisirUnRepertoire "Choisir Le Repertoire de destination"] } if {$JEffaceLesFichiersExistants == 0 } { if { [file exists "$RepHTML/$CompleteId.html"]} { Espionne "$CompleteId : deja rapatrie" return "" } } if {[regexp "/" $CompleteId]} {regsub -all "/" $CompleteId "_" CompleteId} Espionne "$CompleteId\t$Access" if {[regexp -nocase "^YEL" $CompleteId]} { Espionne "$Access n\'a pas le bon format" return "" } elseif {[regexp -nocase "^AFFX" $CompleteId] || [regexp -nocase "^Msa" $CompleteId]} { set BanqueId [BanqueIdDeLAccess $Access] if {$BanqueId == ""} {return ""} set Uid [GIDeLAccess $Access] if {$Uid == ""} {return ""} set Adresse [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=&list_uids=$Uid&db=nucleotide&view=fasta"] set PageHTML [::http::data $Adresse] Sauve $PageHTML dans "$RepHTML/$CompleteId.html" set Adresse [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=on&list_uids=$Uid&db=nucleotide&view=xml"] set PageHTML [::http::data $Adresse] regsub -all "<" $PageHTML "<" PageHTML regsub -all ">" $PageHTML ">" PageHTML set PageXML [NettoieLaPageXML $PageHTML] Sauve $PageXML dans "$RepHTML/$CompleteId.xml" } elseif {[regexp -nocase "^ET" $CompleteId]} { ##############FICHIER EGAD################################# set Adresse [::http::geturl "http://www.tigr.org/docs/tigr-scripts/nhgi_scripts/egad_report.pl?htnum=$Access"] set PageHTML [::http::data $Adresse] Sauve $PageHTML dans "$RepHTML/$CompleteId.html" } elseif {[regexp -nocase "^TC" $CompleteId]} { ##############FICHIER TIGR############################### set Adresse [::http::geturl "http://www.tigr.org/docs/tigr-scripts/nhgi_scripts/tc_report.pl?species=Mouse&tc=$Access"] set PageHTML [::http::data $Adresse] Sauve $PageHTML dans "$RepHTML/$CompleteId.html" if {[regexp -nocase "is no longer current. It split into:" $PageHTML]} { set LesLignesDeLaPage [split $PageHTML "\n"] set AllNewAccess {} foreach Ligne $LesLignesDeLaPage { if {[regexp -nocase "is no longer current. It split into:" $Ligne]} { regsub "

    $Access is no longer current. It split into: " $Ligne "" Ligne set i 0 while {[regexp "HREF=\"/docs/tigr-scripts/" $Ligne]} { regexp ">(TC\[0-9]*)<" $Ligne tmp NewAccess regsub "HREF=\"/docs/tigr-scripts/" $Ligne "" Ligne regsub ">(TC\[0-9]*)<" $Ligne "" Ligne lappend AllNewAccess $NewAccess } foreach NewAccess $AllNewAccess {RapatrieLaPageHTMLDeId $NewAccess $NewAccess $JEffaceLesFichiersExistants $RepHTML} } } } } else { #############FICHIER GB####################################### set BanqueId [BanqueIdDeLAccess $Access] if {$BanqueId == ""} {return ""} set Uid [GIDeLAccess $Access] if {$Uid == ""} {return ""} set Adresse [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=on&list_uids=$Uid&db=nucleotide&view=fasta"] set PageHTML [::http::data $Adresse] Sauve $PageHTML dans "$RepHTML/$CompleteId.html" set Adresse [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=on&list_uids=$Uid&db=nucleotide&view=xml"] set PageHTML [::http::data $Adresse] regsub -all "<" $PageHTML "<" PageHTML regsub -all ">" $PageHTML ">" PageHTML set PageXML [NettoieLaPageXML $PageHTML] Sauve $PageXML dans "$RepHTML/$CompleteId.xml" } return "" } proc RapatrieLaPageHTMLDeLaProteine {BanqueId Access {RepHTML ""} {JeSauve 1}} { package require http if {$RepHTML == "" } { set RepHTML [ChoisirUnRepertoire "Choisir Le Repertoire de destination"] } set Uid [GIDeLAccess $BanqueId] if {$Uid == ""} {return ""} Espionne "Lycos va chercher $BanqueId...." set AdresseHTML [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=on&list_uids=$Uid&db=protein&view=GenPept"] set PageHTML [::http::data $AdresseHTML] set Adresse [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=on&list_uids=$Uid&db=protein&view=xml"] set PageHTML [::http::data $Adresse] regsub -all "<" $PageHTML "<" PageHTML regsub -all ">" $PageHTML ">" PageHTML set PageXML [NettoieLaPageXML $PageHTML] if {$JeSauve == 1} { Sauve $PageHTML dans "$RepHTML/$BanqueId.html" Sauve $PageXML dans "$RepHTML/$BanqueId.xml" } Espionne "Merci Lycos" return $PageHTML } proc RapatrieLaPageXMLDeGB {Uid} { package require http set Adresse [::http::geturl "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?cmd=&txt=&save=0&cfm=on&list_uids=$Uid&db=nucleotide&view=xml"] set PageHTML [::http::data $Adresse] regsub -all "<" $PageHTML "<" PageHTML regsub -all ">" $PageHTML ">" PageHTML set PageXML [NettoieLaPageXML $PageHTML] return "$PageXML" } proc RapatrieLesPagesHTMLDesProteines {LesBanquesId {RepHTML ""}} { if {$RepHTML == "" } { set RepHTML [ChoisirUnRepertoire "Choisir Le Repertoire de destination"] } foreach BanqueId $LesBanquesId { set Access [AccessDuBanqueId $BanqueId] set PageHTML "" append PageHTML [RapatrieLaPageHTMLDeLaProteine $BanqueId $Access $RepHTML 0] if {[regexp -nocase "\[0-9a-z]" $PageHTML]} { Sauve $PageHTML dans "$RepHTML/$BanqueId.html" } } return "" } proc RapatrieLesPagesHTMLDesProteinesDuFichier {Fichier} { if {![file exists $Fichier]} {return ""} set RepHTML [ChoisirUnRepertoire "Choisir Le Repertoire de destination"] set Contenu [ContenuDuFichier $Fichier] regsub -all "\t" $Contenu " " Contenu regsub -all "\n" $Contenu " " Contenu while {[regexp " " $Contenu]} {regsub " " $Contenu " " Contenu} while {[regexp "^ " $Contenu]} {regsub "^ " $Contenu "" Contenu} while {[regexp " $" $Contenu]} {regsub " $" $Contenu "" Contenu} set LesBanquesId [split $Contenu " "] RapatrieLesPagesHTMLDesProteines $LesBanquesId $RepHTML return "" } proc RapatrieToutesLesPagesHTMLDesIdsDuFichier {{FichierContennantLesId ""}} { set Fichier $FichierContennantLesId if {$Fichier == ""} { set Fichier [ButineArborescence All [pwd]] } else { if {![file exist "$Fichier"]} { Espionne "$Fichier does not exist" return "" } } set RepHTML [ChoisirUnRepertoire "Choisir Le Repertoire de destination"] set JEffaceLesFichiersExistants 0 if {[OuiOuNon "Voulez-vous effacer les Fichiers deja rapatries"]} { set JEffaceLesFichiersExistants 1 } foreach Ligne [LesLignesDuFichier "$Fichier"] { if {$Ligne == "" } { continue } else { set LesInfos [split $Ligne "\t"] if {![regexp {^[0-9]} [lindex $LesInfos 0]]} { continue } else { set CompleteId [lindex $LesInfos 1] set Id [lindex $LesInfos 2] RapatrieLaPageHTMLDeId $CompleteId $Id $JEffaceLesFichiersExistants $RepHTML } } } return "" } proc RapetisseLesBoutonsDe {w {Reset ""}} { global RapetisseLesBoutonsDe if {$Reset=="Reset" && ! [info exists RapetisseLesBoutonsDe($w)]} { return "" } set RapetisseLesBoutonsDe($w) 1 foreach Bouton [LesBoutonsDeLaFrame $w.buttons] { set NewWidth [lindex [$Bouton configure -width] 4] incr NewWidth -3 if {$NewWidth < 3} { set NewWidth 20 } $Bouton configure -width $NewWidth continue if { ! [info exists RapetisseLesBoutonsDe($w,$Bouton)]} { set Texte [lindex [$Bouton configure -text] 4] set RapetisseLesBoutonsDe($w,$Bouton) $Texte set RapetisseLesBoutonsDe($Bouton) $Texte regsub -all {[a-z]} $Texte "" NewTexte } else { set NewTexte [set RapetisseLesBoutonsDe($w,$Bouton)] unset RapetisseLesBoutonsDe($w,$Bouton) if {[info exists RapetisseLesBoutonsDe($w)]} { unset RapetisseLesBoutonsDe($w) } } $Bouton configure -text $NewTexte } return $w } proc RapportAliInOut {Rapport Nom} { global SortieRapportAliInOut global SortieRapportAliInOutFichierMemo if { ! [info exists SortieRapportAliInOut]} { set Texte "$Nom $Rapport" Espionne $Texte return $Texte } set FichierSortie "$SortieRapportAliInOut/$Nom" if { ! [info exists SortieRapportAliInOutFichierMemo] || $FichierSortie!=$SortieRapportAliInOutFichierMemo} { if {[file exists $FichierSortie]} { File delete -force $FichierSortie } } set SortieRapportAliInOutFichierMemo $FichierSortie return [AppendAuFichier $FichierSortie $Rapport] } proc RapportDuDifferentiel {DisBla DisAli {Test AvecDis}} { if {$Test=="AvecDis"} { set MaxDis [Maxi [Maxi $DisAli $DisBla] 1] set EcartDis [Maxi 0 [expr ($DisBla-$DisAli) - 1]] set EcartDisProp [expr (100*$EcartDis)/100] set SeuilEcartDisProp 5 if {$EcartDisProp > $SeuilEcartDisProp} { set Rapport "Different" } else { set Rapport "Close" } set Ecart $EcartDisProp return "$Rapport $Ecart" } if {$Test=="AvecPI"} { set SeuilEcartPI 90 set EcartPI [expr 100-($DisBla-$DisAli)] if {$EcartPI < $SeuilEcartPI} { set Rapport "Different" } else { set Rapport "Close" } set Ecart $EcartPI return "$Rapport $Ecart" } } proc RapportGroupeSecator {Nom} { global RepertoireDuGenome global RapportGroupeSecator if {[info exists RapportGroupeSecator($Nom)]} { return [set RapportGroupeSecator($Nom)] } if {[info exists RapportGroupeSecator("EstCharge")]} { return "-1 -1" } set FichierRapportGroupeSecator "$RepertoireDuGenome/fiches/rapportgroupesecator" if {[file exists $FichierRapportGroupeSecator]} { foreach Ligne [LesLignesDuFichier $FichierRapportGroupeSecator] { scan $Ligne "%s %d %d" NomLu i n set RapportGroupeSecator($NomLu) "$i $n" } set RapportGroupeSecator("EstCharge") 1 return [RapportGroupeSecator $Nom] } foreach PAB [ListeDesPABs] { set MSF "$RepertoireDuGenome/msf/$PAB" if { ! [file exists $MSF]} { set i 0 set n 0 } else { DecortiqueUnMSF $MSF LesNomsDeSequences set LeGroupe [GroupeSecator $PAB $PAB "Out"] set i [llength $LeGroupe] set n [llength $LesNomsDeSequences] } AppendAuFichier $FichierRapportGroupeSecator "$PAB $i $n" set RapportGroupeSecator($PAB) "$i $n" } return [RapportGroupeSecator $Nom] } proc RapportStartCodonPourMSFIndependant {Summary Cluster} { global RepertoireDuGenome set LesNoms {} foreach ligne $Summary { if {$ligne==""} continue while {[regexp " " $ligne]} { regsub -all " " $ligne " " ligne } regsub -all $ligne + ligne " " set Nom [lindex $ligne 0] set AA [lindex $ligne 2] set Pos [lindex $ligne 3] set IndexNbAccord [lsearch -regexp $ligne "/"] set NbAccord [lindex [split [lindex $ligne $IndexNbAccord] "/"] 0] lappend LesNoms $Nom lappend Classement($Nom) [list $AA $Pos $NbAccord] set Indice 3 set OK 0 foreach el [lrange $ligne 3 end] { if {[string match -nocase {[a-z]*} $el]} { set OK 1 break } incr Indice } if {$OK} { set Commentaire($Nom) [lrange $ligne $Indice end] } else { set Commentaire($Nom) " " } } set LesNoms [lsort -unique $LesNoms] #Categories Raymond # 0 Met initial conserve # 1 Met initial a egalite # 2 Autre met # 3 Autre met a egalite foreach Nom $LesNoms { if {[info exists DejaVu($Nom)]} { continue } 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 } } } Espionne "$Nom CatRay [set CatRay($Nom)]" } #TRAITEMENT DES RESULTATS CLUSTERING set lesNomsCl [list] foreach ligne $Cluster { Espionne $ligne if {$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 || $Percent>50} { set Bilan($Nom) "green Validated_Start_Codon" set StartCodonProposal($Nom) $MetRaymond } else { Espionne "Je vais lire CatRay($Nom)" 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) " " } lappend Sortie "$Nom [set Bilan($Nom)] [set StartCodonProposal($Nom)] $Decal [set Classement($Nom)]" } return $Sortie } proc Rascal {FichierOuNom {Destin ""} {Annotate Annotate}} { global RepertoireDuGenome set Annotate [string equal -nocase $Annotate "Annotate"] set Nom [file tail $FichierOuNom] if { ! [regexp "/" $FichierOuNom]} { set FichierOuNom "$RepertoireDuGenome/msf/$Nom" } set FichierMSF $FichierOuNom if { ! [file exists $FichierOuNom]} { return "" } if {[regexp "NoSequence" [PremiereLigneDuFichier $FichierOuNom]]} { return "NoSequencesToAlign" } if {$Annotate} { set OldNorMD [MDScore $FichierMSF "CalculeMoi"] } if {[string equal -nocase $Destin "InRascalDir"]} { set RascalDir "$RepertoireDuGenome/msfrascal" if { ! [file exists $RascalDir]} { File mkdir $RascalDir } set FichierRascal "$RascalDir/$Nom" } elseif { $Destin=="" } { set FichierRascal $FichierMSF } else { set FichierRascal $Destin } set TmpRascal "[TmpFile].rascal" if {[catch {exec rascal $FichierMSF $TmpRascal} Message]} { Warne "Error from rascal. Message follows \n$Message" return "" } if { ! [file exists $TmpRascal]} { Warne "Error from rascal. File not created" return "" } global RascalConvertToOneHundred if { ! [info exists RascalConvertToOneHundred]} { set RascalConvertToOneHundred 1 } if {$RascalConvertToOneHundred} { ConvertToOneHundred $TmpRascal $TmpRascal } if {$Annotate} { set NewNorMD [MDScore $TmpRascal "CalculeMoi"] set LeRascal [LesLignesDuFichier $TmpRascal] set DeuxiemeLigne [string trimright [IemeLigneDuFichier $FichierMSF 2]] if {$OldNorMD<=$NewNorMD} { set Changed "improved" } else { set Changed "reduced" } append DeuxiemeLigne " Rascal $Changed NorMD from $OldNorMD to $NewNorMD" set LeRascal [linsert $LeRascal 1 $DeuxiemeLigne] } File delete -force $TmpRascal return [SauveLesLignes $LeRascal dans $FichierRascal] } proc RascalExe {} { global tcl_platform global OrdBinDir global env if {[info exists env(GRILLE)] && $env(GRILLE)} { return "./rascal" } if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { # return [file join $OrdBinDir "rascal"] return "/biolo/rascal/rascal" } else { return "/biolo/rascal/rascal" } } else { set lexe [file join $OrdBinDir "rascal.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc RascalGrid {NomATraiter} { global PipeCollection if {$PipeCollection} { set In [file join [RepertoireDuGenome] msf $NomATraiter] set Out [file join [RepertoireDuGenome] rascal $NomATraiter] if {[file exists $Out]} {return 1} } else { set In "[file rootname ${NomATraiter}].msf" set Out "[file rootname ${NomATraiter}].rascal.msf" } if {! [file exists $In]} {return 0} catch {eval exec [RascalExe] $In $Out} Message if {[file exists $Out]} { AjouteAuLogPipe "rascal = ok" } else { AjouteAuLogPipe "rascal failed" } return 1 } proc RascalPourTous {{NomATraiter ""}} { global RepertoireDuGenome set AvecPasTouche 1 if {$NomATraiter == ""} { set Liste [ListeDesPABs] } elseif {[llength $NomATraiter]==1} { if {[EstUnPAB $NomATraiter]} { set AvecPasTouche 0 } set Liste [list $NomATraiter] } else { set Liste $NomATraiter } set Repertoire "$RepertoireDuGenome/msfrascal" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } set GardeTout 1 set TestExistence 1 while {[llength [glob -nocomplain "$Repertoire/*"]]> 0} { if {[OuiOuNon "Some files exist in $Repertoire\nDo I keep all of them ?"]} { set TestExistence 1 set GardeTout 1 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I replace all of them ?"]} { set TestExistence 0 set GardeTout 0 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I ask for each ?"]} { set TestExistence 1 set GardeTout 0 break } } set LesCrees {} foreach Nom $Liste { if {$AvecPasTouche && [PasTouche $Nom]} { continue } set FichierMSF "$RepertoireDuGenome/msf/$Nom" set FichierRascal "$Repertoire/$Nom" if { ! [file exists $FichierMSF]} { if {$AvecPasTouche} { FinPasTouche $Nom } continue } if {$GardeTout && [file exists $FichierRascal] } { Espionne "$Nom already done" if {$AvecPasTouche} { FinPasTouche $Nom } continue } if { $TestExistence && [file exists $FichierRascal] } { if {[OuiOuNon "$FichierRascal already exists\nDo I keep it ?"]} { if {$AvecPasTouche} { FinPasTouche $Nom } continue } } set FichierCree [Rascal $FichierMSF $FichierRascal "Annotate" ] lappend LesCrees $FichierCree Espionne "Rascal created $FichierCree" if {$AvecPasTouche} { FinPasTouche $Nom } } return $LesCrees } proc RasmolExe {} { global tcl_platform global OrdBinDir if {[set tcl_platform(platform)] != "windows"} { if {[info exists OrdBinDir]} { return [file join $OrdBinDir "rasmol"] } else { return "/biolo/rasmol/bin/rasmol" } } else { set lexe [file join $OrdBinDir "raswin.exe"] regsub "Program Files" $lexe "PROGRA~1" lexe return $lexe } } proc RayonDansRosace {R X Y {CentreX ""} {CentreY ""}} { global ParametresDuBoard if {$CentreX == ""} { set CentreX [set ParametresDuBoard($R,CentreX)] set CentreY [set ParametresDuBoard($R,CentreY)] } if {$R == "CoordonneesVraies"} { set xVrai $X set yVrai $Y } else { set xVrai [$R canvasx $X] set yVrai [$R canvasy $Y] } set x [expr $xVrai-$CentreX] set y [expr $yVrai-$CentreY] set Rayon [expr sqrt($x*$x+$y*$y)] return $Rayon } proc RayonDeAtome {a} { if {! [string is integer $a]} { set a [string index [string trim $a] 0] } return [VdWDe $a] } proc Rclose {} { global SckR close $SckR(socket) unset -nocomplain SckR return } proc ReAjusteCoordonnees {AId} { global Abr set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] set Of 20 $PAD xview moveto 0.0 $PAD yview moveto 0.0 set LDes [$PAD bbox all] lassign $LDes x1 y1 x2 y2 foreach d [$t nodes] { $t set $d xdes [expr {[$t get $d xdes]-$x1+$Of}] $t set $d ydes [expr {[$t get $d ydes]-$y1+$Of}] } set xm [expr {($x2-$x1)+2*$Of}] set ym [expr {($y2-$y1)+2*$Of}] $PAD configure -scrollregion [list 0 0 $xm $ym] $PAD move all [expr {-$x1+$Of}] [expr {-$y1+$Of}] set x [expr {int($xm/2)}] set y [expr {int($ym/2)}] $PAD xview scroll $x units $PAD yview scroll $y units return } proc ReAjusteCoordonnees2 {AId} { global Abr set PAD [set Abr($AId,PAD)] set t [set Abr(Arbre,$AId)] set PL [PlusLongNomAff $AId] # Recentrage + Offset # Offset = longuer du nom le + grd mis a l'horizontale set LDes [$PAD bbox all] lassign $LDes x1 y1 x2 y2 foreach d [$t nodes] { $t set $d xdes [expr {[$t get $d xdes]-$x1+$PL}] $t set $d ydes [expr {[$t get $d ydes]-$y1+$PL}] } set xm [expr {($x2-$x1)+2*$PL}] set ym [expr {($y2-$y1)+2*$PL}] $PAD configure -scrollregion [list 0 0 $xm $ym] return } proc ReAligne {Nom {FichierMSF ""}} { global RepertoireDuGenome global MyDbClustal if {$FichierMSF=="" || $FichierMSF=="RetourneTexteMSF"} { set FichierMSF [TmpFile].msf set RetourneTexte 1 } else { set RetourneTexte 0 } while { ! [info exists MyDbClustal]} { set MyDbClustal "integral" if { ! [OuiOuNon "Do You want to use $MyDbClustal"]} { set MyDbClustal [Entre $MyDbClustal] } if {$MyDbClustal==""} { unset MyDbClustal } } set MSFOrigine "$RepertoireDuGenome/msf/$Nom" if { ! [file exists $MSFOrigine]} { return "" } set n [DecortiqueUnMSF $MSFOrigine LesNomsDesSeqs Seqs] if {$n<2} { return "" } set LesTFAs {} foreach NomSeq $LesNomsDesSeqs { set Seq [set Seqs($NomSeq)] regsub -all -nocase {[^a-z]} $Seq "" Seq set TFA [SequenceFormatTFA $Seq $NomSeq "protbrut"] lappend LesTFAs $TFA } set TFAs [join $LesTFAs "\n"] set Status [DbClustal $Nom $FichierMSF $TFAs "AvecTexteTFAs"] if {$RetourneTexte} { if {[file exists $FichierMSF]} { return [ContenuDuFichier $FichierMSF] } else { return "" } } else { return $Status } } proc ReAlignePourTous {} { global RepertoireDuGenome global MyDbClustal while { ! [info exists MyDbClustal]} { set MyDbClustal "integral" if { ! [OuiOuNon "Do You want to use $MyDbClustal"]} { set MyDbClustal [Entre $MyDbClustal] } if {$MyDbClustal==""} { unset MyDbClustal } } set RepSortie "" while {$RepSortie==""} { set RepSortie "$RepertoireDuGenome/msf2" if { ! [OuiOuNon "Do You want to store the new alignments in\n$RepSortie"]} { set RepSortie [Entre "$RepertoireDuGenome/"] } } if { ! [file exists $RepSortie]} { File mkdir $RepSortie } set Keep 1 if {[llength [glob -nocomplain "$RepSortie/*"]]>0} { set Keep [OuiOuNon "Do I keep existing files in \n$RepSortie ?"] } foreach Nom [ListeDesPABs] { if {[PasTouche $Nom]} { continue } set FichierMSF "$RepSortie/$Nom" if {$Keep && [file exists $FichierMSF]} { continue } set Status [ReAligne $Nom $FichierMSF] Espionne "$Nom $Status" FinPasTouche $Nom } } proc ReBaptiseLaSequenceGCG {Sequence NomDeBapteme} { Wup "On remplace le premier mot de la ligne des '..'" Wup "MAis attention avant c'etait autrement ..." set ListeDesLignes [split $Sequence "\n"] set iPP [lsearch -regexp $ListeDesLignes {\.\.}] if {$iPP<0} { FaireLire "$Sequence is not in GCG format." ; return $Sequence } set LignePP [lindex $ListeDesLignes $iPP] scan $LignePP "%s" AncienNom regsub "$AncienNom" $LignePP "$NomDeBapteme " BonneLignePP return [join [lreplace $ListeDesLignes $iPP $iPP $BonneLignePP] "\n"] } proc ReBaptiseLaSequenceTFA {Sequence NomDeBapteme} { Wup "On remplace la premiere ligne." set ListeDesLignes [split $Sequence "\n"] set PremiereLigne ">$NomDeBapteme" return [join [lreplace $ListeDesLignes 0 0 $PremiereLigne] "\n"] } proc ReColore {Marque Color} { set tid [lindex [split $Marque :] 0] set tc [lindex [split $Marque :] 1] $tc itemconfigure $tid -fill $Color } proc ReCreeLeFichierDeSequencesOriginal_Ontario {{LesPABs ""} {FichierOut ""}} { Wup "Permet de regenerer un fichier du meme type que celui original H19k_seq_250702.txt avec les nouvelles infos" #Original_Image_ID Verified_Image_ID accessionID clusterID expectValue matchLength percentId score statusFlag sequence if {$LesPABs == ""} {set LesPABs [ListeDesPABs]} if {$FichierOut == ""} {set FichierOut "[RepertoireDuGenome]/Test_Donnees"} set EnteteFichier [join [list Original_Image_ID Verified_Image_ID Definition AccRefSeq IdGRS CoverRS AccUniseq clusterID IdGUS CoverUS Sequence] "\t"] AppendAuFichier $FichierOut $EnteteFichier foreach PAB $LesPABs { set FichierQuery "[RepertoireDuGenome]/nuctfa/$PAB" set Original_Image_ID [InterrogeLesAccRSEtUG_Ontario $PAB OriginalID] set Verified_Image_ID [InterrogeLesAccRSEtUG_Ontario $PAB VerifiedID] set AccRefSeq [InterrogeLesAccRSEtUG_Ontario $PAB AccRefSeq] #set DefRefSeq [InterrogeLesAccRSEtUG_Ontario $PAB DefRefSeq] set IdGRS [InterrogeLesAccRSEtUG_Ontario $PAB IdGRefSeq] set CoverRS [InterrogeLesAccRSEtUG_Ontario $PAB CoverRefSeq] set AccUniseq [InterrogeLesAccRSEtUG_Ontario $PAB AccUniseq] #set DefUniseq [InterrogeLesAccRSEtUG_Ontario $PAB DefUniseq] set clusterID [InterrogeLesAccRSEtUG_Ontario $PAB AccUnigene] set IdGUS [InterrogeLesAccRSEtUG_Ontario $PAB IdGRefSeq] set CoverUS [InterrogeLesAccRSEtUG_Ontario $PAB CoverRefSeq] #Meilleur definition entre RefSeq et Unigene if {[InterrogeLesAccRSEtUG_Ontario $PAB AccRefSeq]!="None" && [InterrogeLesAccRSEtUG_Ontario $PAB AccUniseq]!="None"} { if {[InterrogeLesAccRSEtUG_Ontario $PAB CoverRefSeq]>=[InterrogeLesAccRSEtUG_Ontario $PAB CoverUniseq]} { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $PAB DefRefSeq] } else { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $PAB DefUniseq] } } elseif {[InterrogeLesAccRSEtUG_Ontario $PAB AccRefSeq] != "None"} { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $PAB DefRefSeq] } elseif {[InterrogeLesAccRSEtUG_Ontario $PAB AccUniseq] != "None"} { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $PAB DefUniseq] } else {set DefinitionNew "None"} if {$DefinitionNew=="None"} { set Definition "Data not found" } else {set Definition $DefinitionNew} set Sequence [QueLaSequenceDuFichierTFA $FichierQuery] set Entete [PremiereLigneDuFichier $FichierQuery] set LaSequence [join [list $Entete $Sequence] " "] set Texte [join [list $Original_Image_ID $Verified_Image_ID $Definition $AccRefSeq $IdGRS $CoverRS $AccUniseq $clusterID $IdGUS $CoverUS $LaSequence] "\t"] AppendAuFichier $FichierOut $Texte } return "" } proc ReDesignControlesAccess {} { Wup "Permet le design des Controles utilise sur la puce a ADN" set ListeControles [list NM001087 NM005345 NM001013 NM018955 NM006082 NM006009 NM004048 NM001916 NM001005 NM000981 NM000942] #set ListeControles [list NM018955] #set DataBase1 "/blast/rshuman.nsq" #set DataBase2 "/blast/unigenehs.nsq" set DataBase1 "none" set DataBase2 "none" set Wdir1 "[RepertoireDuGenome]/Probes/Controles_ActiChip/RefSeq_Controles_2" set Wdir2 "[RepertoireDuGenome]/Probes/Controles_ActiChip/Unigene_Controles_2" foreach PAB $ListeControles { set PAB "[RepertoireDuGenome]/Probes/Controles_ActiChip/$PAB" set step 1 set LaSeq [split [QueLaSequenceDuFichierTFA $PAB] ""] set Taille [llength $LaSeq] set Debut [expr $Taille - 3000] set Fin 10000 set Areas "$Debut $Fin" Espionne "avant $Debut $Fin Taille $Taille" CADO4MI -q $PAB -l 60 -nb 1000 -t 92 -r 10 -b $DataBase1 -ar "$Areas" -st $step -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w $Wdir1 CADO4MI -q $PAB -l 60 -nb 1000 -t 92 -r 10 -b $DataBase2 -ar "$Areas" -st $step -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w $Wdir2 } return "" } proc ReDessineArbre {AId args} { global Abr set PAD [set Abr($AId,PAD)] $PAD delete all DessineArbre $AId root 20 20 lassign [$PAD bbox all] x1 y1 x2 y2 set dx [expr {$x2-$x1+50}] set dy [expr {$y2-$y1+50}] $PAD move all [expr {-$x1+20}] [expr {-$y1+20}] if {$dx < [set Abr($AId,PADWdt)]} {set dx [set Abr($AId,PADWdt)]} if {$dy < [set Abr($AId,PADHgt)]} {set dy [set Abr($AId,PADHgt)]} $PAD configure -scrollregion [list 0 0 $dx $dy] puts "bootshow in [set Abr($AId,BootShow)]" if {[set Abr($AId,BootDone)]} { AfficheBootstrap $AId root MontreBootstrap $AId } #puts "bootshow out [set Abr($AId,BootShow)]" if {[TypeAli] in [list "XML" "ORD"]} { PeintParPhylum $AId } #puts "bootshow out [set Abr($AId,BootShow)]" PeintParClusters $AId #puts "bootshow out [set Abr($AId,BootShow)]" return } proc ReDessineArbreCart {AId args} { global Abr set PAD [set Abr($AId,PAD)] $PAD delete all TransformationCartesienne $AId root AjusteCoordonneesInit $AId ScaleArbre $AId $args RetraceToutCart $AId root ReAjusteCoordonnees $AId # $PAD delete all # RetraceToutCart $AId root puts "bootshow in [set Abr($AId,BootShow)]" if {[set Abr($AId,BootDone)]} { #AfficheBootstrap $AId root MontreBootstrap $AId } puts "bootshow out [set Abr($AId,BootShow)]" if {[TypeAli] in [list "XML" "ORD"]} { PeintParPhylum $AId } puts "bootshow out [set Abr($AId,BootShow)]" PeintParClusters $AId return } proc ReDessineArbreCirculaire {AId args} { global Abr global CurrAng set PAD [set Abr($AId,PAD)] $PAD delete all set CurrAng 0. CalculeDimensionsArbre $AId set SWdt [expr {int([set Abr($AId,Xmax)]-[set Abr($AId,Xmin)]+10)}] set SHgt [expr {int([set Abr($AId,Ymax)]-[set Abr($AId,Ymin)]+10)}] set MWdt [expr {$SWdt/2}] set MHgt [expr {$SHgt/2}] if {0} { puts "Xmin [set Abr($AId,Xmin)]" puts "Xmax [set Abr($AId,Xmax)]" puts "Ymin [set Abr($AId,Ymin)]" puts "Ymax [set Abr($AId,Ymax)]" puts "SWdt $SWdt SHgt $SHgt" puts "MWdt $MWdt MHgt $MHgt" puts "" } $PAD configure -scrollregion [list 0 0 $SWdt $SHgt] update idletasks $PAD create oval [expr {-1*$Abr($AId,Xmin)-6}] [expr {-1*$Abr($AId,Ymin)-6}] [expr {-1*$Abr($AId,Xmin)+6}] [expr {-1*$Abr($AId,Ymin)+6}] -fill magenta AjusteXY $AId root [expr {-1*$Abr($AId,Xmin)}] [expr {-1*$Abr($AId,Ymin)}] set CurrAng 0. DessineArbreCirculaire $AId root [expr {-1*$Abr($AId,Xmin)}] [expr {-1*$Abr($AId,Ymin)}] if {[TypeAli] in [list "XML" "ORD"]} { PeintParPhylum $AId } # AmelioreArbre $AId Daylight $AId update idletasks return } proc ReDessineLesScores {} { global LongueurTotale NomTextSeq FrmSequence Toggle if {! [set Toggle(Scores)]} {return} switch [QuelMode] { "feature" { set l [LesBoutonsEnfonces] set Lf [lsearch -regexp -all -inline $l {^Cons\-|^Score\-}] if {! [llength $Lf]} { #set Toggle(Scores) 0 return } } "conservation" { set Toggle(Scores) [set ::Cons(Show)] set Lf [lindex [set ::Cons(ConsCou)] 0] if {$Lf eq "None"} {return} } default return } foreach f $Lf { DessineLesScores $f } $FrmSequence.csc xview moveto [lindex [$FrmSequence.scrollxseq get] 0] update idletasks return } proc ReFaitText {} { global NomTextSeq NomNomSeq LNOrdali LSOrdali $NomNomSeq configure -state normal $NomTextSeq configure -state normal catch {$NomNomSeq edit redo} catch {$NomTextSeq edit redo} $NomNomSeq configure -state disabled $NomTextSeq configure -state disabled return } proc ReLanceLeonMS2PH {type pab} { set leon "/biolo/leon/leon.tcsh" puts "On est dans Leon : pour $type" puts "traite $pab" set logFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" "${pab}.log"] set alnFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" $pab] set inFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" $pab] if {![file exists $alnFile]} { if {[file exists $inFile]} { catch {exec $leon $inFile $pab $alnFile $logFile} } } puts "fin calcul leon" #CalculNorMDMS2PH $type leon #puts "fin calcul NorMD suite a Leon" return 1 } proc ReLanceRascal {type} { puts "pour $type" set Lpab [ListeDesPABs] set Lpab [lrange $Lpab 201 end] foreach pab $Lpab { #foreach pab {SPDB055 SPDB057 SPDB073} {} puts "traite $pab" set outFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" $pab] if {![file exists $outFile]} { set inFile [file join [RepertoireDuGenome] "msf_$type" $pab] if {[file exists $inFile]} { catch {exec rascal $inFile $outFile} } } ReLanceLeonMS2PH $type $pab } CalculNorMDMS2PH $type rascal CalculNorMDMS2PH $type leon return 1 } proc ReLoadFichier {} { if {[TypeAli] == "pasdali"} {return} if {[QuelMode] == "seqlab"} { FaireLire "Leave Editor first !" return } set file "Fichier[TypeAli]" set ftype [TypeAli] global Defauts set vfile [set Defauts($file)] FermeFichier nosave OuvrirFichierAlignementDansOrdali $ftype $vfile return } proc ReMasqueLesRepeats {Nom {Organisme ""}} { set ExtendArea 1000 set FileTFA "[RepertoireDuGenome]/nuctfa/$Nom" set FileM "[RepertoireDuGenome]/nucmask/$Nom.m" set FileBlastHTG "[RepertoireDuGenome]/nucmask/$Nom.blastnhtg" if {![file exists $FileTFA] || ![file exists $FileM]} {return} if {![EstCeQueLeFichierTFAEstConvenable $FileM]} {return} Espionne "$Nom -> blastn against HTG database" #BlastNDuFichier $FileM htg $FileBlastHTG 1 100 0.1 0 if {![file exists $FileBlastHTG]} {return} Espionne "$Nom -> blastn against HTG database done" set EnteteDeMonClone [EnteteDuFichierTFA $FileTFA] set SeqDeMonCloneIni [QueLaSequenceDuTFA $FileTFA] set SeqDeMonCloneRM $SeqDeMonCloneIni Espionne "$Nom -> selection of the best contig from the blastn file" DepouilleLeBlast TabBlast $FileBlastHTG if {![info exists TabBlast(NbSubject)]} { Espionne "$Nom -> Blast File is empty" return } set LesContigs {} set NbSubjectDansBlast [set TabBlast(NbSubject) ] for {set i 1} {$i <= $NbSubjectDansBlast} {incr i} { set BId [set TabBlast($i) ] set n [NombreDeBasesEnCommun_TabBlast TabBlast $BId Query] lappend LesContigs [list $BId $n] } if {$LesContigs == {}} { Espionne "$Nom -> No contig selected" return } set OrganismeDeRef "" foreach LeContig [lsort -index 1 -real -decreasing $LesContigs] { set BIdDuContig [lindex $LeContig 0] Espionne "$Nom -> Is $BIdDuContig a good contig ?" set TailleContig1 [set TabBlast($BIdDuContig,Taille)] set SeqDuContig [QueLaSequenceDuTexteTFA [PageInfo $BIdDuContig genbankfull seq]] set TailleContig2 [string length $SeqDuContig] if {$TailleContig1 != $TailleContig2} {continue} foreach Orga [LesOrgasDeLAccess $BIdDuContig] { if {[LesLibrariesOuOptionsSpeciesAutomatiques $Orga] != ""} { set OrganismeDeRef $Orga break } } if {$OrganismeDeRef != ""} {break} } if {$OrganismeDeRef == ""} { Espionne "$Nom -> No library selected for RepeatMasker" return } Espionne "$Nom -> $BIdDuContig is the best contig ; I am running RepeatMasker on this contig with $Organisme option" cd [RepertoireDeTravail] set SeqDuContigFinal [string repeat "n" $TailleContig2] set NbSegment [set TabBlast($BIdDuContig,NbSegment)] set LesRegions {} for {set i 1} {$i <= $NbSegment} {incr i} { set DS [Mini [set TabBlast($BIdDuContig,$i,DS)] [set TabBlast($BIdDuContig,$i,FS)]] set FS [Maxi [set TabBlast($BIdDuContig,$i,DS)] [set TabBlast($BIdDuContig,$i,FS)]] set DQ [Mini [set TabBlast($BIdDuContig,$i,DQ)] [set TabBlast($BIdDuContig,$i,FQ)]] set FQ [Maxi [set TabBlast($BIdDuContig,$i,DQ)] [set TabBlast($BIdDuContig,$i,FQ)]] lappend LesRegions [list $DS $FS] set DArea [expr $DS - $ExtendArea] set FArea [expr $FS + $ExtendArea] if {$DArea < 1 } {set DArea 1 } if {$TailleContig2 < $FArea} {set FArea $TailleContig2} set SeqDuContigFinal [string replace $SeqDuContigFinal $DArea $FArea [string range $SeqDuContig $DArea $FArea]] } set FichierTFATmp [TmpFile ""].tfa Sauve [SequenceFormatTFA $SeqDuContigFinal "$Nom $BIdDuContig"] dans $FichierTFATmp Espionne "Je vais lancer RepeatMasker sur $FichierTFATmp $Nom" MasqueLesRepeatsDuFichier $FichierTFATmp $OrganismeDeRef set LesRepeats {} foreach Repeat [lsort -unique [InterrogeFichierOutRepeatMasker "$FichierTFATmp.out" LesRepeats ]] { foreach LaRegion [InterrogeFichierOutRepeatMasker "$FichierTFATmp.out" Repeat $Repeat LesRegions] { lappend LesRepeats [list $Repeat [lindex $LaRegion 0] [lindex $LaRegion 1]] } } Espionne $LesRepeats ##################################PBL Espionne "$Nom -> Now the contig is masked, I am ReMasking my clone sequence" if {[file exists "$FichierTFATmp.masked"]} { set SeqDuContigFinal [QueLaSequenceDuFichierTFA "$FichierTFATmp.masked"] set NomsDesRepeats {} foreach LaRegion $LesRegions { set D [lindex $LaRegion 0] set F [lindex $LaRegion 1] foreach LeRepeat $LesRepeats { set Repeat [lindex $LeRepeat 0] set D2 [lindex $LeRepeat 1] set F2 [lindex $LeRepeat 2] if {[info exists DejaVu($D2,$F2)]} {continue} if {![CesRegionsSontEllesOverlappantes $D $F $D2 $F2]} {continue} set DejaVu($D2,$F2) 1 lappend NomsDesRepeats $Repeat } } set NomsDesRepeats [join $NomsDesRepeats " "] for {set i 1} {$i <= $NbSegment} {incr i} { set DS [set TabBlast($BIdDuContig,$i,DS)] set FS [set TabBlast($BIdDuContig,$i,FS)] set DQ [set TabBlast($BIdDuContig,$i,DQ)] set FQ [set TabBlast($BIdDuContig,$i,FQ)] set LesAlignementsLineaires [split [set TabBlast($BIdDuContig,$i,AlignLineaire)] "\n"] set Query [lindex $LesAlignementsLineaires 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex $LesAlignementsLineaires 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] if {$FQ < $DQ} {set Sens "-"} else {set Sens "+"} if {$DS <= $FS} {set IndiceS 1} else {set IndiceS -1} if {$DQ <= $FQ} {set IndiceQ 1} else {set IndiceQ -1} set PosQ [expr $DQ - 1] set PosS [expr $DS - 1] foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ == "-"} {incr PosS $IndiceS;continue} if {$AS == "-"} {incr PosQ $IndiceQ;continue} set ADuNouveauContig [string index $SeqDuContigFinal $PosS] if {![string equal -nocase $AQ "n"] && ![string equal -nocase $AS "n"] && [string equal -nocase $ADuNouveauContig "n"]} { set SeqDeMonCloneRM [string replace $SeqDeMonCloneRM $PosQ $PosQ $ADuNouveauContig] } incr PosS $IndiceS incr PosQ $IndiceQ } } set NombreDeBasesRM [NombreDeBasesDansRepeat $SeqDeMonCloneIni $SeqDeMonCloneRM ] set Annotations [InfoSurRemasking $SeqDeMonCloneIni $NombreDeBasesRM $NomsDesRepeats] } else { set Annotations "NoRepeatToReMask EndReMask" } return [SequenceFormatTFA $SeqDeMonCloneRM "$EnteteDeMonClone $Annotations"] } proc ReMasqueLesRepeatsDuFichier {FichierTFA Organisme} { set ExtendArea 500 set FileM "$FichierTFA.m" set FileBlastHTG "$FichierTFA.blastnhtg" if {![file exists $FichierTFA] || ![file exists $FileM] || ![EstCeQueLeFichierTFAEstConvenable $FileM]} {return} set Nom [file tail $FichierTFA] Espionne "$Nom -> blastn against HTG database" #debutLP sur star le nb de processus ne peut etre egal qu'a 1 pour l'instant #PipeBlast $FileM htg $FileBlastHTG N 100 0.1 T 4 PipeBlast $FileM htg $FileBlastHTG N 100 0.1 T 1 #finLP if {![file exists $FileBlastHTG]} {return} Espionne "$Nom -> blastn against HTG database done" set EnteteDeMonClone [EnteteDuFichierTFA $FichierTFA] set SeqDeMonCloneIni [QueLaSequenceDuTFA $FichierTFA] set SeqDeMonCloneRM $SeqDeMonCloneIni Espionne "$Nom -> selection of the best contig from the blastn file" if {[AskBlast $FileBlastHTG NbSubject] == ""} {return} set LesContigs {} for {set i 1} {$i <= [AskBlast $FileBlastHTG NbSubject]} {incr i} { set BId [AskBlast $FileBlastHTG Subject $i] set n [NombreDeBasesEnCommun $FichierTFA $BId Query] lappend LesContigs [list $BId $n] } if {$LesContigs == {}} { Espionne "$Nom -> No contig selected" return } set BIdDeRef "" foreach LeContig [lsort -index 1 -real -decreasing $LesContigs] { set BIdDuContig [lindex $LeContig 0] Espionne "$Nom -> Is $BIdDuContig a good contig ?" set TailleContig1 [AskBlast $FileBlastHTG BanqueId $BIdDuContig Taille] set SeqDuContig [QueLaSequenceDuTexteTFA [PageInfo $BIdDuContig htg seq]] set TailleContig2 [string length $SeqDuContig] if {$TailleContig1 != $TailleContig2} { Espionne "$Nom -> HTG $BIdDuContig problem with its sequence length ..." continue } set EstCeLeBonOrga 0 set PageInfo [PageInfo $BIdDuContig htg "id acc org des"] foreach Orga [LesOrgasDeLaPage_PageInfo $PageInfo] { if {$Orga == $Organisme} {set EstCeLeBonOrga 1;break} } if {!$EstCeLeBonOrga} { Espionne "$Nom -> HTG $BIdDuContig not the good organism $Organisme ..." continue } set BIdDeRef $BIdDuContig break } if {$BIdDeRef == ""} { Espionne "$Nom -> No HTG sequence selected for RepeatMasker" return } set BIdDuContig $BIdDeRef set OrganismeDeRef $Organisme Espionne "$Nom -> $BIdDuContig is the best contig ; I am running RepeatMasker on this contig with $Organisme option" cd [RepertoireDeTravail] set SeqDuContigFinal [string repeat "n" $TailleContig2] set NbSegment [AskBlast $FileBlastHTG BanqueId $BIdDuContig NbSegment] set LesRegions {} for {set i 1} {$i <= $NbSegment} {incr i} { set DS [Mini [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i DS] [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i FS]] set FS [Maxi [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i DS] [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i FS]] lappend LesRegions [list $DS $FS] set DArea [expr $DS - $ExtendArea] set FArea [expr $FS + $ExtendArea] if {$DArea < 1 } {set DArea 1 } if {$TailleContig2 < $FArea} {set FArea $TailleContig2} set SeqDuContigFinal [string replace $SeqDuContigFinal $DArea $FArea [string range $SeqDuContig $DArea $FArea]] } set FichierTFATmp [TmpFile ""].tfa Espionne $FichierTFATmp Sauve [SequenceFormatTFA $SeqDuContigFinal "$Nom $BIdDuContig"] dans $FichierTFATmp Espionne "Je vais lancer RepeatMasker sur $FichierTFATmp $Nom" MasqueLesRepeatsDuFichier $FichierTFATmp $OrganismeDeRef set LesRepeats {} foreach Repeat [lsort -unique [InterrogeFichierOutRepeatMasker "$FichierTFATmp.out" LesRepeats ]] { foreach LaRegion [InterrogeFichierOutRepeatMasker "$FichierTFATmp.out" Repeat $Repeat LesRegions] { lappend LesRepeats [list $Repeat [lindex $LaRegion 0] [lindex $LaRegion 1]] } } ##################################PBL Espionne "$Nom -> Now the contig is masked, I am ReMasking my clone sequence" if {[file exists "$FichierTFATmp.masked"]} { set SeqDuContigFinal [QueLaSequenceDuFichierTFA "$FichierTFATmp.masked"] set NomsDesRepeats {} foreach LaRegion $LesRegions { set D [lindex $LaRegion 0] set F [lindex $LaRegion 1] foreach LeRepeat $LesRepeats { set Repeat [lindex $LeRepeat 0] set D2 [lindex $LeRepeat 1] set F2 [lindex $LeRepeat 2] if {[info exists DejaVu($D2,$F2)]} {continue} if {![CesRegionsSontEllesOverlappantes $D $F $D2 $F2]} {continue} set DejaVu($D2,$F2) 1 lappend NomsDesRepeats $Repeat } } set NomsDesRepeats [join $NomsDesRepeats " "] for {set i 1} {$i <= $NbSegment} {incr i} { set DS [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i DS] set FS [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i FS] set DQ [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i DQ] set FQ [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i FQ] set LesAlignementsLineaires [split [AskBlast $FileBlastHTG BanqueId $BIdDuContig Segment $i AlignLineaire] "\n"] set Query [lindex $LesAlignementsLineaires 0] scan $Query "%s %d %s %d" Entete D AliQuery F set LAliQuery [split $AliQuery ""] set Sbjct [lindex $LesAlignementsLineaires 2] scan $Sbjct "%s %d %s %d" Entete D AliSbjct F set LAliSbjct [split $AliSbjct ""] if {$FQ < $DQ} {set Sens "-"} else {set Sens "+"} if {$DS <= $FS} {set IndiceS 1} else {set IndiceS -1} if {$DQ <= $FQ} {set IndiceQ 1} else {set IndiceQ -1} set PosQ [expr $DQ - 1] set PosS [expr $DS - 1] foreach AQ $LAliQuery AS $LAliSbjct { if {$AQ == "-"} {incr PosS $IndiceS;continue} if {$AS == "-"} {incr PosQ $IndiceQ;continue} set ADuNouveauContig [string index $SeqDuContigFinal $PosS] if {![string equal -nocase $AQ "n"] && ![string equal -nocase $AS "n"] && [string equal -nocase $ADuNouveauContig "n"]} { set SeqDeMonCloneRM [string replace $SeqDeMonCloneRM $PosQ $PosQ $ADuNouveauContig] } incr PosS $IndiceS incr PosQ $IndiceQ } } set NombreDeBasesRM [NombreDeBasesDansRepeat $SeqDeMonCloneIni $SeqDeMonCloneRM ] set Annotations [InfoSurRemasking $SeqDeMonCloneIni $NombreDeBasesRM $NomsDesRepeats] } else { set Annotations "NoRepeatToReMask EndReMask" } return [SequenceFormatTFA $SeqDeMonCloneRM "$EnteteDeMonClone $Annotations"] } proc ReOrdonneOoMSF {} { global RepertoireDuGenome set Fichier "$RepertoireDuGenome/fiches/oomsf" set LesG [LesGenomesComplets] set LesT [LesGenomesDansLeBonOrdre] Espionne $LesG Espionne $LesT foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom foreach Oo [lrange [split $Ligne " "] 1 end] G $LesG { set OoDuGenome($G) $Oo } set Liste [list $Nom] foreach T $LesT { lappend Liste [set OoDuGenome($T)] } Espionne [join $Liste " "] lappend LaSortie [join $Liste " "] } Espionne [SauveLesLignes $LaSortie dans $Fichier.arenommer] } proc ReOrganiseLeTableauDeGretta {FichierIn NbColumn FichierOut} { set Tab(LesSeq) {} set Tab(LesEntetes) {} set i 0 set F [open $FichierIn] while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} incr i set LaLigne [split $Ligne "\t"] for {set c 0} {$c < $NbColumn} {incr c} { set V [string trim [lindex $LaLigne $c]] while {[regexp " " $V]} {regsub -all " " $V " " V} if {$V == ""} {continue} if {$i == 1} {set Tab(Entete,$c) $V;lappend Tab(LesEntetes) $V;continue} if {![info exists Tab(Seq,$V,LesEntetes)]} { lappend Tab(LesSeq) $V set Tab(Seq,$V,LesEntetes) {} } set Entete [set Tab(Entete,$c)] lappend Tab(Seq,$V,LesEntetes) $Entete set Tab(Seq,$V,Entete,$Entete) 1 } } close $F set Entetes [join [set Tab(LesEntetes)] "\t"] set LeTexte {} lappend LeTexte "Accession\t$Entetes" foreach Seq [lsort -unique [set Tab(LesSeq)]] { set LaLigne [list $Seq] foreach Entete [set Tab(LesEntetes)] { if {![info exists Tab(Seq,$Seq,Entete,$Entete)]} {lappend LaLigne "";continue} lappend LaLigne [set Tab(Seq,$Seq,Entete,$Entete)] } lappend LeTexte [join $LaLigne "\t"] } Sauve [join $LeTexte "\n"] dans $FichierOut return $FichierOut } proc ReOuvrePierre {} { global CanalPierre NomDuFichierPierre if { [info exists CanalPierre] } { ClosPierre } if { ! [info exists NomDuFichierPierre] } { set NomDuFichierPierre "pierre" } if { ! [file exists $NomDuFichierPierre]} { return "" } set CanalPierre [open $NomDuFichierPierre r] return $CanalPierre } proc ReParDefaut {{Type ""}} { #rR on modifie les noms des repertoires msf blastp ... pour en avoir avec extension et un lien qui leur pointe dessus #rR tout ca parce que Gscope travaille avec les defauts msf, blastp if {$Type==""} { FaireLire "Please enter the directory type for which you want to change the default (blastp, msf, etc.)" set Type [ChoixParmi [list "blastp" "blastn" "tblastn" "msf" "Other"]] if {$Type==""} { return "" } if {$Type=="Other"} { set Type [Entre ""] } if {$Type==""} { return "" } return [ReParDefaut $Type] } NousAllonsAuBoulot [RepertoireDuGenome] set LesExistants [glob -nocomplain "$Type*"] set i [lsearch $LesExistants "aliinout"] if {$i>=0} { set LesExistants [lreplace $LesExistants $i $i] } if {$LesExistants=={}} { if {[OuiOuNon "Do I create $Type (I'll ask you later for an extension)"]} { file mkdir $Type OnRevientDuBoulot return [ReParDefaut $Type] } return {} } set LesDirs {} set Target "" foreach D $LesExistants { if {$D!=$Type && [file isdirectory $D]} { lappend LesDirs $D } if {$D==$Type && [file type $D]=="link"} { set Target [file readlink $D] } } set Existants [join $LesDirs "\n"] if {$Target!=""} { append Existants "\n$Type -> $Target" } set YaNuDir 0 set YaNu 0 foreach D $LesExistants { if {$D==$Type} { set YaNu 1 if {[file type $D]!="link" && [file isdirectory $D]} { if {[OuiOuNon "$Existants\n$D\n $D is a directory do you want to add an extension"]} { set Ext [Entre ".[Date]"] while {$Ext=="" && ! [OuiOuNon "We keep it without extension"]} { set Ext [Entre ".[Date]"] } if {$Ext!=""} { file rename $D "$D$Ext" OnRevientDuBoulot return [ReParDefaut $Type] } } set YaNuDir 1 break OnRevientDuBoulot return "$Existants\n$Type" } if {[file type $D]=="link"} { set Target [file readlink $D] if {[OuiOuNon "$D links to $Target\n Do you want to change it"]} { set NewTarget [ChoixParmi $LesDirs] if {$NewTarget!=""} { file delete $D file link $D $NewTarget OnRevientDuBoulot return [ReParDefaut $Type] } } break } set YaNu 0 FaireLire "$D is not a directory and not a link. Please correct it. I'll skip it" } } if {$YaNu} { while {[OuiOuNon "Do you want to create another directory with an extension"]} { set Ext [Entre ".[Date]"] if {$Ext==""} { continue } set NewDir "$Type$Ext" if {[file exists $NewDir]} { FaireLire "$NewDir already exists ..." ; continue } file mkdir $NewDir OnRevientDuBoulot return [ReParDefaut $Type] } set E $Existants if {$YaNuDir} { append E $Type } OnRevientDuBoulot return $E } while {[OuiOuNon "There is no directory or link named $Type ; Do we create a link ?"]} { set NewTarget [ChoixParmi $LesDirs] while {$NewTarget==""} { if {[OuiOuNon "Do we stop ?"]} { OnRevientDuBoulot return $Existants } set NewTarget [ChoixParmi $LesDirs] } file link $Type $NewTarget OnRevientDuBoulot return [ReParDefaut $Type] } if {[OuiOuNon "Do you want to create a directory named $Type"]} { file mkdir $Type OnRevientDuBoulot return [ReParDefaut $Type] } OnRevientDuBoulot return $Existants } proc ReReLanceLeonMS2PH {type} { set leon "/biolo/leon/leon.tcsh" puts "On est dans Leon : pour $type" #set Lpab [ListeDesPABs] set Lpab [lrange $Lpab 544 750] foreach pab $Lpab { #foreach pab {MSPH0666 MSPH0636 MSPH0642 MSPH0463 MSPH0459 MSPH0447 MSPH0444 MSPH0622 MSPH0623 MSPH0805 MSPH0976 MSPH0977 MSPH0978 MSPH0750 MSPH0746 MSPH0742 MSPH0736 MSPH0731 MSPH0728 MSPH0915 MSPH0700 MSPH0707 MSPH0725 MSPH0907 MSPH0902 MSPH0898 MSPH0684 MSPH0710 } {} puts "traite $pab" set logFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" "${pab}.log"] set alnFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" $pab] set inFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" $pab] if {![file exists $alnFile]} { if {[file exists $inFile]} { catch {exec $leon $inFile $pab $alnFile $logFile} } } } puts "fin calcul leon" #CalculNorMDMS2PH $type leon #puts "fin calcul NorMD suite a Leon" return 1 } proc ReReLanceLeonTriBlast {type} { set leon "/biolo/leon/leon.tcsh" puts "On est dans Leon : pour $type" set Lpab [ListeDesPABs] set Lpab [lrange $Lpab 21 21] foreach pab $Lpab { puts "traite $pab" set logFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" "${pab}.log"] set alnFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" "Leon" $pab] set inFile [file join [RepertoireDuGenome] "msf_$type" "Rascal" $pab] if {![file exists $alnFile]} { if {[file exists $inFile]} { catch {exec $leon $inFile $pab $alnFile $logFile} } } } puts "fin calcul leon" #CalculNorMDMS2PH $type leon #puts "fin calcul NorMD suite a Leon" return 1 } proc ReScale {l {a -2} {b 1}} { # transforme selon : # X = a x (max - x)/(max - min) + b # # si a= -2 b= 1 val entre -1 et 1 # si a=1 b=0 val entre 0 et 1 set Lv [lsort -real $l] set min [lindex $Lv 0] set max [lindex $Lv end] set new [list] foreach v $l { lappend new [expr {$a*($max-$v)/($max-$min) + $b}] } return $new } proc ReSource {{Fichier ""}} { global ReSource if {$Fichier=="Precedent"} { if {[info exists ReSource]} { set Fichier $ReSource } else { set Fichier "" } } if {$Fichier==""} { set LesSourcesTcl {} foreach F [lsort -command TriDeFichiers [LesSourcesDuProgramme "Absolute"]] { if { ! [regexp ".tcl$" $F]} { continue } lappend LesSourcesTcl $F } set Fichier [ChoixParmi $LesSourcesTcl] if {$Fichier==""} { set ReSource "" ; return "" } } if {[FileAbsent $Fichier] && [FileExists [set Possible "[ProgSourceDir]/$Fichier"]]} { set Fichier $Possible } if {[FileAbsent $Fichier] && [FileExists [set Possible "[ProgSourceDir]/$Fichier.tcl"]]} { set Fichier $Possible } if {[FileAbsent $Fichier] && [FileExists [set Possible "[ProgSourceDir]/gscope_$Fichier.tcl"]]} { set Fichier $Possible } if {[FileAbsent $Fichier]} { FaireLire "$Fichier doesn't exist" set ReSource "" return "" } set ReSource $Fichier source $Fichier return $Fichier } proc ReTexte {Marque Texte} { set tid [lindex [split $Marque :] 0] set tc [lindex [split $Marque :] 1] $tc itemconfigure [expr $tid +1] -text $Texte } proc ReTrieLesJumeaux {} { Wup "Permet de trier les jumeaux en mettant en premier les sequences utilisee pour le design" Wup "On a utilise les fichiers .txt issus des OligoPourExcel4_6.xls et New_OligoPourExcel_2_1.xls" set FichierDesJumeaux "[RepertoireDuGenome]/test/LesJumeaux" set FichierDesJumeaux "[RepertoireDuGenome]/test/LesJumeaux2" set Fichier "[RepertoireDuGenome]/test/jumeaux2" set LesAccDeRef1 [InterrogeLesOligosPourExcel "[RepertoireDuGenome]/Probes/OligoPourExcel4_6.txt" LesAccessGScope] set LesAccDeRef2 [InterrogeLesOligosPourExcel "[RepertoireDuGenome]/Probes/New_OligoPourExcel_2_1.txt" LesAccessGScope] set LesAccessDeRef [lsort -unique [concat $LesAccDeRef1 $LesAccDeRef2]] #On stocke les PAB qu on a foreach PAB $LesAccessDeRef {set TabDeRef($PAB) 1} set LesLignesASauver "" set F [open "$FichierDesJumeaux"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set LesPABs "" set PAB "" set First "" set OnAchange 0 set LesPABs [split [string trim $Ligne] " "] set i 0 foreach PAB $LesPABs { incr i #On stocke ceux deja fait pour apres savoir ceux qui ne sont pas fait set StockDesPABs($PAB) 1 if {[info exists TabDeRef($PAB)]} { set OnAchange 1 set First $PAB if {$i!="1"} { #Espionne "On va changer qqch $i" } } } if {$OnAchange} { regsub "$First" $LesPABs "" LesPABs set LesPABs [linsert $LesPABs 0 $First] } else { set LesPABs $Ligne } lappend LesLignesASauver $LesPABs } close $F #On cherche les PAbs qui n ont pas ete faits set PAB "" foreach PAB [ListeDesPABs] { if {[info exists StockDesPABs($PAB)]} { continue } else { lappend LesLignesASauver $PAB } } AppendAuFichier $Fichier "[join [lsort -index 0 $LesLignesASauver] "\n"]" return "" } proc ReadAllSpineXML {{Action ""} {Fichier ""}} { Wup "Action can be 'ShowOnly' , 'CompareHeaders' or 'Append" if {$Action==""} { set Action "ShowOnly" } package require tdom if {$Action=="Append"} { set DernierPAB [DernierPAB "EnNumero"] regsub "SPINE" $DernierPAB "" Numero set Fin [Box $DernierPAB fin] FaireLire "Please browse for the Xml file with the targets to append" if {$Fichier==""} { set Fichier [ButineArborescence All "[RepertoireDuGenome]/DeSpine/"] } } else { set Numero 100000 set Fin 100 if {$Fichier==""} { FaireLire "Please browse for the Xml file with all targets" set Fichier [ButineArborescence All "[RepertoireDuGenome]/DeSpine/"] } } if { ! [file exists $Fichier]} { return "" } if { $Action=="Append" && ! [OuiOuNon "Are you sure to run \n ReadAllSpineXML $Fichier\n creating new PABs after $DernierPAB"]} { return "" } set RepXmlFromSpine "[RepertoireDuGenome]/XmlFromSpine" if { ! [file exists RepXmlFromSpine]} { file mkdir $RepXmlFromSpine } set AllSpineXML [ContenuDuFichier $Fichier] set Root [[dom parse $AllSpineXML] documentElement] set LesNoeudsTarget [$Root selectNodes "//target"] foreach NoeudTarget $LesNoeudsTarget { incr Numero 10 set OneTargetXml [DoctypeForOneSpineTarget] append OneTargetXml [$NoeudTarget asXML -indent 2] set ID [$NoeudTarget selectNodes "string(ID)"] set Workpackage [$NoeudTarget selectNodes "string(workpackage)"] set Workpackage [string trim $Workpackage] set Sequence [$NoeudTarget selectNodes "string(sequence)"] set ProteinName [$NoeudTarget selectNodes "string(proteinName)"] set Species [$NoeudTarget selectNodes "string(species)"] set LesNar {} foreach NoeudDbID [$NoeudTarget selectNodes "databaseID"] { set DatabaseID [$NoeudDbID selectNodes "string(.)"] set Database [$NoeudDbID selectNodes "string(database)"] set Release [$NoeudDbID selectNodes "string(release)"] set Accession [$NoeudDbID selectNodes "string(accession)"] set DB $Database if {$Database=="not provided"} { set DB "unk" } if {$Accession=="" || $Accession=="not provided"} { set MonNar "" } else { set MonNar "$DB:$Accession" } lappend LesNar $MonNar } set Nar [join $LesNar ","] set TexteOS "" if {$Species!="" || $Species!="not provided"} { set TexteOS "of $Species" } set Nom "SPINE[format "%5.5d" $Numero]" set Entete "$Nom SpineRef ($Nar) SpineDef ($ProteinName $TexteOS) SpineID ($ID of $Workpackage)" if {$Action=="CompareHeaders"} { set FichierTFA "[RepertoireDuGenome]/prottfa/$Nom" set EnteteGscope [EnteteDuFichierTFA $FichierTFA] regsub ">" $EnteteGscope "" EnteteGscope if {$Entete!=$EnteteGscope} { FaireLire "$Entete\n$EnteteGscope" } continue } if {$Action=="ShowOnly"} { lappend LesEntetes $Entete continue } if {$Action!="Append"} { FaireLire "Illegal Action $Action in ReadAllSpineXml\nI'll create nothing !" } set FichierXmlFromSpine "$RepXmlFromSpine/$Nom" Sauve $OneTargetXml dans $FichierXmlFromSpine set TFA [SequenceFormatTFA $Sequence $Entete "protbrut"] Sauve $TFA dans "[RepertoireDuGenome]/prottfa/$Nom" set Debut [expr $Fin + 99] set Fin [expr $Debut + 300] set Orient "F" Espionne "MiseAJourBornesDesPABs $Nom $Debut $Fin $Orient" MiseAJourBornesDesPABs "$Nom $Debut $Fin $Orient" } if {$Action=="ShowOnly"} { set Page [join $LesEntetes "\n"] return [AfficheVariable $Page "GrandeLargeur" "AllSpineHeaders"] } exit } proc ReadDict {} { global Tbond OrdEtcDir set Ll [LesLignesDuFichier [file join $OrdEtcDir "stereo_chem.odb"]] set YaRes 0 foreach l $Ll { if {[regexp {^residue} $l]} { set YaRes 1 regsub -all { +} $l " " l set Lr [split $l " "] set Res [lindex $Lr 1] continue } if {[regexp {^-------} $l]} { set YaRes 0 continue } if {$YaRes} { if {[regexp {^bond_distance} $l]} { regsub -all { +} $l " " l set Lb [split $l " "] set a1 [lindex $Lb 1] set a2 [lindex $Lb 2] lappend Tbond($Res) [list $a1 $a2] } } } return } proc ReadFile {Fichier} { set Size [file size $Fichier] #rR pour un test Espionne $Size set f [open $Fichier] set BufferSize 134217728 fconfigure $f -buffersize $BufferSize set Con "" set i 0 while { ! [eof $f]} { Espionne [incr i] lappend LesPortions [read $f $BufferSize] } set Tout [join $LesPortions ""] Espionne [string length $Tout] } proc ReadHydrophb {file} { global Rosace VrpC if {! [info exists Rosace]} {InitialiseRosace} set VrpC(NbAA) 0 set i 0 foreach a [array names Rosace] { if {[regexp {Norm} $a]} {continue} lassign [set Rosace($a)] x y set ny [expr {-1.0*$y}] set AA1name $a set VrpC(HydX,$AA1name) $x set VrpC(HydY,$AA1name) $ny set VrpC(HydX,$i) $x set VrpC(HydY,$i) $ny set VrpC(AA1name,$i) $a lappend Lx $x lappend Ly $ny incr VrpC(NbAA) incr i } set VrpC(MinX) [expr min([join $Lx ,])] set VrpC(MinY) [expr min([join $Ly ,])] set VrpC(MaxX) [expr max([join $Lx ,])] set VrpC(MaxY) [expr max([join $Ly ,])] return } proc ReadLink {Lien {Rep ""}} { if {[file type $Lien]=="link" && ! [regexp "^/" [file readlink $Lien]]} { set Lien "$Rep/[file readlink $Lien]" } if {[file type $Lien]=="link"} { set Lien [file readlink $Lien] } return $Lien } proc ReadNAccessOutput {text} { if {! [regexp {^REM } $text]} { return {} } set Ll [split $text \n] # RES MET B 31 135.05 69.6 112.19 71.6 22.86 60.9 116.03 73.5 19.02 52.4 # RES MET B1031 135.05 69.6 112.19 71.6 22.86 60.9 116.03 73.5 19.02 52.4 foreach l $Ll { if {! [regexp {^RES } $l]} { continue } scan $l "%s %s %1s%d %f %f %f" tmp res chn num tmp rsa tmp lappend RSA(rsa,$chn) $rsa lappend RSA(seq,$chn) [AutreCodeLuc $res] lappend RSA(nmr,$chn) [string trim $num] } return [array get RSA] } proc ReadRawFeatureFile {{file ""}} { global LNOrdali Sequences TabSF ListeTypesDeFeatures EFeat SDG #puts "\n$file" # format : # FEATURE FeatName ?PROPAGATE? ?all|group? # ;;;;;;" # if {$file eq ""} { set file [DemandeEtOuvreFichier txt 1] } if {$file eq "" || ! [file exists $file]} { return } # FaireAttendre "Please wait ...\nParsing feature file ..." array set TFtmp [list] set Ll [LesLignesDuFichier $file] set Lg [list] foreach l $Ll { regsub -all { +} [string trim $l] " " l if {$l eq "" || [regexp {^\#} $l]} { continue } if {[regexp -nocase {^FEATURE} $l]} { set Ld [split $l " "] set feat [lindex $Ld 1] set feat [string map [list "." ","] $feat] lappend ListeTypesDeFeatures "$feat" # propagation ? set pro [string tolower [lindex $Ld 2]] if {$pro eq "propagate"} { set pro [string tolower [lindex $Ld 3]] if {$pro ni {group all} } { FaireLire "Warning ! Feature propagation target unknown ($pro). Should be \"all\" or \"group\".\nFeature reading cancelled !" return } } continue } set Lv [split $l ";"] if {[llength $Lv] != 7} { FaireLire "Beware !\nLine is :\n;;;;;;" continue } lassign $Lv nom csys d f col score note set nom [string map [list " " ""] $nom] set csys [string tolower [string map [list " " ""] $csys]] set d [string map [list " " ""] $d] set f [string map [list " " ""] $f] set col [string map [list " " ""] $col] set sco [string map [list " " ""] $score] # check coords system if {$csys ne "local" && $csys ne "global"} { FaireLire "Beware !\nCoordinate system should be either 'local' or 'global' !" continue } # check if name is present in alignment if {[set ix [lsearch -nocase $LNOrdali $nom]] == -1} { FaireLire "Sequence named $nom not present in the alignment !\nFeature discarded !" continue } # check if start and stop are valid if {! [string is integer -strict $d] || ! [string is integer -strict $f]} { FaireLire "Start and Stop positions should be integers values !\nFeature discarded" continue } if {$d < 1 || $f < 1} { FaireLire "Start and Stop can't be zero or negative !\nFeature discarded !" continue } set seq [set Sequences($nom)] set sdg [string map [list "." ""] $seq] if {$csys eq "local"} { set lgl [string length $sdg] set Skip 0 while { ! ($d <= $lgl && $f <= $lgl) } { if {[OuiOuNon "For $nom Start or Stop outside local coordinates system !\n I expect $d <= $lgl && $f <= $lgl \nDo you want to enter other limits ?" 0]} { set Skip 1 } set DF [Entre "$d $f"] scan $DF "%d %d" d f } if {$Skip} { continue } incr d -1 incr f -1 set sd [string index $sdg $d] set sf [string index $sdg $f] if {$sd eq "." || $sf eq "."} { FaireLire "For $nom Start and Stop can't correspond to a gap position\nin local coordinates system !\nFeature discarded !" continue } set d [DonnePosSG $nom $d] set f [DonnePosSG $nom $f] } else { set lgt [string length $seq] if {$d > $lgt || $f > $lgt} { FaireLire "Start $d or Stop $f are greater than sequence length $lgt \nin global coordinates system !\nFeature discarded !" continue } } if {$pro eq "all"} { lappend Lg [list $nom "GroupeToutLeMonde"] } else { lappend Lg [list $nom [set ::GroupeDeLaSequence($nom)]] } lappend TFtmp(${nom},$feat) [list fstart $d fstop $f fcolor $col fscore $score fnote $note fcsys $csys] } # propagate if needed if {$pro ne ""} { set Lg [lsort -unique $Lg] foreach ng $Lg { lassign $ng nom grp foreach s [set SDG($grp)] { if {$s eq $nom} {continue} foreach ft [set TFtmp($nom,$feat)] { # Check if feature can be propagted in this # sequence. DecortiqueUneFeature $ft d f col sco note csys #puts "$ft $d $f" # we are in global coords, check in local. if {$csys eq "local"} { if {[string index [set Sequences($s)] $d] eq "." || [string index [set Sequences($s)] $f] eq "."} { continue } } lappend TabSF($s,$feat) $ft } } } } array set TabSF [array get TFtmp] set ListeTypesDeFeatures [lsort -unique $ListeTypesDeFeatures] # update feature Mode window if {[info exists EFeat]} { set EFeat(FTypes) [linsert $ListeTypesDeFeatures 0 "None"] set wdt [PlusLongEltDe $ListeTypesDeFeatures] $EFeat(FeatCombo) configure -values $EFeat(FTypes) set EFeat(Feat) $feat ChangeFeatureForEditing } else { ChangeMode } # FaireLaSuite return } proc ReadStrideOutput {text} { if {! [regexp {^REM } $text]} { return {} } set Ll [split $text \n] # H G I : helix # E strand # T turn foreach l $Ll { if {[string first "REM " $l] == 0} { continue } # read sec str #LOC AlphaHelix ALA 54 A GLU 62 A 1IL2 regsub -all { +} $l " " l switch -regexp $l { {^LOC } { lassign [split $l " "] tmp type resDep nmrDep chn resFin nmrFin chn tmp if {$type ne "Disulfide"} { lappend Str(SS,$chn) [list $type $resDep $nmrDep $resFin $nmrFin] } } {^CHN } { lassign $l tmp tmp chn tmp set Str(seq,$chn) [list] set Str(nmr,$chn) [list] set Str(SS,$chn) [list] set Str(SA,$chn) [list] set Str(iS,$chn) "" } {^ASG } { lassign $l asg res chn nmr sti sec1 sec phi psi asa tmp lappend Str(seq,$chn) [AutreCodeLuc $res] lappend Str(nmr,$chn) $nmr lappend Str(SA,$chn) $asa append Str(iS,$chn) $sec1 } } } return [array get Str] } proc ReadUserTaxId {FileOrList gui} { global Tx set LIdInit [list] if {[file exists $FileOrList]} { foreach l [LesLignesDuFichier $FileOrList] { set l [string trim $l] if {$l eq "" || [regexp {^#} $l]} { continue } if {! [string is integer -strict $l]} { set Msg "ERROR ! The organisms file should contain Taxa ID numbers !" if {! $gui} { puts $Msg } else { FaireLire $Msg } return 0 } lappend LIdInit $l } } else { set LIdInit $FileOrList } set LIdInit [lsort -unique $LIdInit] set LUserId [list] foreach l $LIdInit { set l [string trim $l] if {[string is integer -strict $l]} { lappend LUserId $l } } return $LUserId } proc RealignSeqContreSeq {seq1 seq2 {WithX 1} {With0 1}} { # re-align seq 1 contre seq2 => seq1 change #puts "seq1\n$seq1" #puts "seq2\n$seq2" set Ls1 [split $seq1 ""] set Ls2 [split $seq2 ""] set ns "" set i 0 #puts "Ls2 [llength $Ls2] Ls1 [llength $Ls1]" foreach a $Ls2 { if {$a eq "-"} { set ch "-" append ns "-" } elseif {$a eq "0"} { if {$With0} { set ch "-" append ns "-" } else { append ns [lindex $Ls1 $i] set ch [lindex $Ls1 $i] incr i } } elseif {$a eq "X"} { if {$WithX} { set ch "X" append ns "X" } else { set ch [lindex $Ls1 $i] append ns [lindex $Ls1 $i] incr i } } else { set ch [lindex $Ls1 $i] append ns [lindex $Ls1 $i] incr i } #puts "$a $ch" } #puts "i= $i" #puts "\nseq1\n$seq1" #puts "seq2\n$seq2" #puts "ns\n$ns" #exit return $ns } proc Realpath {Path} { #rR suit tous les liens et enleve les .. #rR on essaye realpath if { ! [catch { set P [exec realpath $Path] }] } { return $P } #rR sinon on le fait nous meme while {[file type $Path]=="link"} { Espionne $Path set Li [file readlink $Path] if {[regexp "^/" $Li]} { set Path $Li; continue } set PathDir [file dirname $Path] set Path $PathDir/$Li } while {[regexp {/[^/]+/../} $Path]} { Espionne $Path regsub {/[^/]+/../} $Path "/" Path } return $Path } proc ReapparierLesBidir {Rep} { # A partir des NM de RefseqToCoord, recherche dans le fichier référence contenant pour # chaque organisme la paire de genes du promoteur bidir et reassocie les couples set Lus 0 set Ecrits 0 set PairesCompletes 0 set PairesIncompletes 0 set FichierDesCoordonnees [open "$Rep/ReapparierLesBidir.coord" "r"] set FichierDesPairesBidir [open "$Rep/ReapparierLesBidir.acc" "r"] set FichierOut [open "$Rep/ReapparierLesBidir.csv" "w"] while { [gets $FichierDesPairesBidir Ligne] >=0 } { ScanLaListe $Ligne Access1 Access2 Distance incr Lus set LigneOut $Ligne set FichierDesCoordonnees [open "$Rep/ReapparierLesBidir.coord" "r"] while { [gets $FichierDesCoordonnees Ligne2] >=0 } { if {[regexp {$Access1} $Ligne2]} { set LigneOut "$LigneOut $Ligne2" set flag1 "ok" } elseif {[regexp {$Access2} $Ligne2]} { set LigneOut "$LigneOut $Ligne2" set flag2 "ok" } } close $FichierDesCoordonnees puts $FichierOut $LigneOut incr Ecrits if {$flag1 == "ok" && $flag2 == "ok"} { incr PairesCompletes } else { incr PairesIncompletes } } Espionne "$timestamp|ReapparierLesBidir : End" Espionne "$timestamp|ReapparierLesBidir : Read = $Lus" Espionne "$timestamp|ReapparierLesBidir : Written = $Ecrits" Espionne "$timestamp|ReapparierLesBidir : * Complete: $PairesCompletes" Espionne "$timestamp|ReapparierLesBidir : * Incomplete: $PairesIncompletes" } proc ReassembleLesTronconsGenscan {LesTronconsGSC TailleTroncon {FichierGSC ""}} { if {$FichierGSC==""} { set RetourneLeTexte 1 } else { set RetourneLeTexte 0 } set Offset 0 if {[llength $LesTronconsGSC]==0} { return {}} set FichierGscA [lindex $LesTronconsGSC 0] if {[llength $LesTronconsGSC]==1} { if {$RetourneLeTexte} { return [ContenuDuFichier $FichierGscA] } else { return [File copy $FichierGscA $FichierGSC] } } set LeGscA [LesLignesDuFichier $FichierGscA] set Offset 0 foreach FichierGscB [lrange $LesTronconsGSC 1 end] { Espionne $FichierGscB incr Offset $TailleTroncon set LeGscB [LesLignesDuFichier $FichierGscB] set LeGscA [FusionneLesGenscan $LeGscA $LeGscB $Offset] } if {$RetourneLeTexte} { return [join $LeGscA "\n"] } else { return [SauveLesLignes $LeGscA dans $FichierGSC] } } proc Rec1 {{Qui ""} {Quoi ""}} { global Rec1 if {$Qui=="ReLoad"} { if {[info exists Rec1]} { unset Rec1 } return Rec1 } if {[regexp {^Fus_(.+)$} $Qui Match BonQui]} { set Qui $BonQui } if {[regexp {^(N[0-9]+_[^_]+)_[^_]+$} $Qui Match BonQui]} { set Qui $BonQui } Wup "Rec1 lit le fichier fiches/rec1 qui DOIT ETRE MIS A JOUR (en l'effacant il se recree) !!!!!!!!!!!!!!" if {$Qui==""} { set Qui "LaListeDes" set Quoi "Rec1" } set FichierRec1 "[RepertoireDuGenome]/fiches/rec1" if {$Qui=="CreateRec1File"} { if {[FileExists $FichierRec1]} { Garde $FichierRec1 file delete $FichierRec1 } return [Rec1] } if {$Quoi==""} { set Quoi "Description" } if {[info exists Rec1($Qui,$Quoi)]} { return [set Rec1($Qui,$Quoi)] } if {[info exists Rec1("EstCharge")]} { return [set Rec1("EstCharge")] } set Rec1(LesQuois) [list Description Fichier N Ppcr Vecteur ] set Rec1("EstCharge") "" if {[file exists $FichierRec1]} { array set Rec1 [LesLignesDuFichier $FichierRec1] return [Rec1 $Qui $Quoi] } foreach Fichier [glob "[RepertoireDuGenome]/rec1/N*"] { set Queue [file tail $Fichier] set Entete [EnteteDuFichierTFA $Fichier] if {$Entete==""} { continue } set R1 [EnteteDuFichierTFA $Fichier "access"] set Vecteur [StringApres "Rec1 in " dans $Entete] set N [StringApres "Rec1 in $Vecteur of " dans $Entete] set ToutPpcr [StringSuivant " Ppcr for " dans $Entete] set Nom [StringApres " Ppcr for " dans $Entete] lappend Rec1($Nom,LesRec1) $R1 regsub ">" $Entete "" Description set Rec1($R1,Description) $Description set Rec1($R1,Fichier) $Fichier set Rec1($R1,Vecteur) $Vecteur set Rec1($R1,N) $N set Rec1($R1,Ppcr) "$N Ppcr for $ToutPpcr" lappend Rec1($N,LesFichiers) $Fichier lappend Rec1($N,LesRec1) $R1 lappend Rec1($N,LesVecteurs) $Vecteur lappend Rec1(LaListeDes,Fichiers) $Fichier lappend Rec1(LaListeDes,Rec1) $R1 lappend Rec1(LaListeDes,Descriptions) $Description } SauveLesLignes [array get Rec1] dans $FichierRec1 return [Rec1 $Qui $Quoi] } proc Rec2 {{Qui ""} {Quoi ""}} { global Rec2 Wup "Attention on peut appeler Rec1 R2 pour les infos specif Rec1" if {$Qui=="ReLoad"} { if {[info exists Rec2]} { unset Rec2 } return Rec2 } if {$Qui==""} { set Qui "LaListeDes" set Quoi "Rec2" } if {[regexp {^Fus_(.+)$} $Qui Match BonQui]} { set Qui $BonQui } if {$Quoi==""} { set Quoi "Description" } if {$Quoi=="Sequence"} { set Fichier [Rec2 $Qui "Fichier"] if {$Fichier==""} { return "" } return [QueLaSequenceDuFichierTFA $Fichier] } if {[info exists Rec2($Qui,$Quoi)]} { return [set Rec2($Qui,$Quoi)] } if {[info exists Rec2("EstCharge")]} { return [set Rec2("EstCharge")] } set FichierRec2 "[RepertoireDuGenome]/fiches/rec2" set Rec2("EstCharge") "" if {[file exists $FichierRec2]} { array set Rec2 [LesLignesDuFichier $FichierRec2] return [Rec2 $Qui $Quoi] } foreach Fichier [glob "[RepertoireDuGenome]/rec2/*"] { set Queue [file tail $Fichier] set Entete [EnteteDuFichierTFA $Fichier] if {$Entete==""} { continue } set R2 [EnteteDuFichierTFA $Fichier "access"] set Vecteur [StringApres "Rec2 in " dans $Entete] set R1 [StringApres "Rec2 in $Vecteur of " dans $Entete] set Rec1Description [StringSuivant " Rec1 " dans $Entete] set Nom [StringApres " Ppcr for " dans $Entete] lappend Rec2($Nom,LesRec2) $R2 regsub ">" $Entete "" Description set Rec2($R2,Description) $Description set Rec2($R2,Fichier) $Fichier set Rec2($R2,Vecteur) $Vecteur set Rec2($R2,R1) $R1 set Rec2($R2,R2) $R2 set Rec2($R2,Rec1Description) $Rec1Description lappend Rec2($R1,LesFichiers) $Fichier lappend Rec2($R1,LesRec2) $R2 lappend Rec2($R1,LesVecteurs) $Vecteur lappend Rec2(LaListeDes,Fichiers) $Fichier lappend Rec2(LaListeDes,Descriptions) $Description lappend Rec2(LaListeDes,Rec2) $R2 } set Rec2(LaListeDes,Fichiers) [lsort [set Rec2(LaListeDes,Fichiers)]] set Rec2(LaListeDes,Rec2) [lsort [set Rec2(LaListeDes,Rec2)]] SauveLesLignes [array get Rec2] dans $FichierRec2 return [Rec2 $Qui $Quoi] } proc Recall {file} { set Ll [LesLignesDuFichier $file] puts "[llength $Ll] events recorded" foreach l $Ll { lassign $l w x y puts "[winfo class $w] $w" set c [winfo class $w] switch $c { "Menubutton" {continue} "Menu" {$w invoke @$y} "Button" {$w invoke} "Radiobutton" {$w invoke} "Checkbutton" {$w invoke} } # update idletasks # after 200 } # default {continue} return } proc RecapADNc {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set RepertoireSortie "[RepertoireDuGenome]/ResultcDNA/RecapInfoADNc" if {! [file exists $RepertoireSortie]} {file mkdir $RepertoireSortie} foreach Nom $Liste { Espionne $Nom set LesLignes {} set InfoADNc [ExtraitInfo $Nom "BanqueADNc"] if {$InfoADNc==""} { set Ligne "no sequence" lappend LesLignes $Ligne } if {[regexp "No" $InfoADNc]} { set Ligne "no cDNA" lappend LesLignes $Ligne } if {[regexp "Yes" $InfoADNc]} { #Espionne "$Nom $InfoADNc" set LesElmts [split $InfoADNc " "] foreach elmt $LesElmts { set type "" set nbcdna ""; set nbcdnaComplet ""; set atgCo ""; set atgCoComplet ""; set posatgCo ""; set posatgCoComplet "" if {$elmt=="Yes"} {continue} set type [RecupereTypeDescDNA $elmt Type] if {$type=="CO"} { set nbcdna [RecupereInfoDescDNACO $elmt nbcdna] set nbcdnaComplet "number:$nbcdna" set atgCo [RecupereInfoDescDNACO $elmt atg] set atgCoComplet "ATG:$atgCo" if {$atgCo=="yes"} { set posatgCo [RecupereInfoDescDNACO $elmt posatg] set posatgCoComplet "ATGpos:$posatgCo" } set Ligne "$type $elmt $nbcdnaComplet $atgCoComplet $posatgCoComplet" lappend LesLignes $Ligne #Espionne "$type $elmt $nbcdnaComplet $atgCoComplet $posatgCoComplet" set LesADNc [RecupereInfoDescDNACO $elmt IdGenos] foreach ADNc $LesADNc { set LesADNc {}; set sens ""; set atgADNc ""; set atgADNcComplet ""; set posatgADNc ""; set posatgADNcComplet "" set sens [RecupereInfoDescDNACO $ADNc sens] set atgADNc [RecupereInfoDescDNACO $ADNc atg] set atgADNcComplet "ATG:$atgADNc" if {$atgADNc=="yes"} { set posatgADNc [RecupereInfoDescDNACO $ADNc posatg] set posatgADNcComplet "ATGpos:$posatgADNc" } set Ligne "\t$ADNc $sens $atgADNcComplet $posatgADNcComplet" lappend LesLignes $Ligne #Espionne "\t$ADNc $sens $atgADNcComplet $posatgADNcComplet" } } if {$type=="SI"} { set IdGenos ""; set atgSi ""; set atgSiComplet "";set posatgSi ""; set posatgSiComplet "" set IdGenos [RecupereInfoDescDNASI $elmt IdGenos] set atgSi [RecupereInfoDescDNASI $elmt atg] set atgSiComplet "ATG:$atgSi" if {$atgSi=="yes"} { set posatgSi [RecupereInfoDescDNASI $elmt posatg] set posatgSiComplet "ATGpos:$posatgSi" } set Ligne "$type $elmt $IdGenos $atgSiComplet $posatgSiComplet" lappend LesLignes $Ligne #Espionne "$type $elmt $IdGenos $atgSiComplet $posatgSiComplet" } } } SauveLesLignes $LesLignes dans "$RepertoireSortie/$Nom" } } proc RecapitulatifDesNbCombiDesCompulsory {{Liste ""}} { set compulsory 0 set LesGns {} set Tot 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set Repertoire "[RepertoireDuGenome]/transcriptomique/LesCopainsClusterOld" foreach Nom [ListOfCompulsoryGenes] { set LesGnsDuNom {} Espionne "$Nom" incr compulsory foreach File [glob -nocomplain "$Repertoire/${Nom}-*-lesbestcops"] { set Queue [file tail $File] Espionne "File $File" if {[regexp "AFFX" $File]} {Espionne "Attention1"} set premiereligne 1 foreach Ligne [LesLignesDuFichier $File] { #puts $Ligne if {$premiereligne} { set premiereligne 0 scan $Ligne "%s %s" nbdecombinaisoncompul bidon set TabCompul($Nom) $nbdecombinaisoncompul } } } Espionne "$Nom $Queue $TabCompul($Nom)" } } proc RecapitulatifDesOrthologues {Nom {TPA OTPMA}} { global RecapitulatifDesOrthologues global SeparationShowBox if { ! [info exists SeparationShowBox]} { set SeparationShowBox [string repeat "-" [string length [ORGAorgaDesMSFs $Nom]]] } set LesLignes "\n" set Operons "" set Names "" if {[regexp "O" $TPA] && [ORGAorgaDesOperons]!="ORGAorgaNonValide"} { set Names [ORGAorgaDesOperons $Nom "Names"] set Operons [ORGAorgaDesOperons $Nom "Stars"] lappend LesLignes " Operons: $Operons" } set TBlastNs "" if {[regexp "T" $TPA] && [ORGAorgaDesTBlastNs]!="ORGAorgaNonValide"} { set Names [ORGAorgaDesTBlastNs $Nom "Names"] set TBlastNs [ORGAorgaDesTBlastNs $Nom "Stars"] lappend LesLignes " TBlastN: $TBlastNs" } if {[regexp "P" $TPA] && [ORGAorgaDesBlastPs]!="ORGAorgaNonValide"} { set Names [ORGAorgaDesBlastPs $Nom "Names"] set BlastPs [ORGAorgaDesBlastPs $Nom "Stars"] lappend LesLignes " BlastP: $BlastPs" } if {[ORGAorgaDesMSFs]!="ORGAorgaNonValide"} { set Names [ORGAorgaDesMSFs $Nom "Names"] if {[regexp "M" $TPA]} { set Missed [ORGAorgaDesMSFs $Nom "StarsP"] lappend LesLignes " InAlign: $Missed" } if {[regexp "A" $TPA]} { set DbClustal [ORGAorgaDesMSFs $Nom "Stars"] lappend LesLignes " WellAlign: $DbClustal" } } lappend LesLignes $Names return [join $LesLignes "\n"] } proc RecapitulatifRetChip {{Liste ""} {Action ""}} { global RecapitulatifRetChip Wup "Attention on travaille normalement dans le fichier .csv" if {$Liste=="" && $Action=="GetIt"} { set Action "GetContent" } if {$Action==""} { if {[EstUnPAB $Liste] || [regexp "Headers" $Liste]} { set Action "GetIt" } } set FichierRecapitulatifRetChip "[RepertoireDuGenome]/fiches/RecapitulatifRetChip.csv" if {$Action=="GetOnlyFileName"} { return $FichierRecapitulatifRetChip } if {$Action=="CreateAndGetFileName"} { set Action "GetFileName" } if {$Action=="GetContent" && [file exists $FichierRecapitulatifRetChip]} { return [LesLignesDuFichier $FichierRecapitulatifRetChip] } if {$Action=="GetContentIfExists"} { if {[file exists $FichierRecapitulatifRetChip]} { return [LesLignesDuFichier $FichierRecapitulatifRetChip] } else { return "" } } if {$Action=="GetIt"} { set NomDemande $Liste if {[info exists RecapitulatifRetChip($NomDemande)]} { return $RecapitulatifRetChip($NomDemande) } if { ! [info exists RecapitulatifRetChip("EstCharge")]} { set RecapitulatifRetChip("EstCharge") 1 foreach Ligne [RecapitulatifRetChip "" "GetContentIfExists"] { if { ! [info exists RecapitulatifRetChip(Headers)]} { set RecapitulatifRetChip(Headers) $Ligne set RecapitulatifRetChip(LesHeaders) [split $Ligne ";"] continue } regexp {^[^;]+} $Ligne NomLu set RecapitulatifRetChip($NomLu) [list $Ligne] } } if {[info exists RecapitulatifRetChip($NomDemande)]} { return $RecapitulatifRetChip($NomDemande) } set LeRetour {} foreach Nom $Liste { lappend LeRetour [lindex [RecapitulatifRetChip $Nom "GetIt"] 0] } return $LeRetour } set RecapitulatifRetChip("EstCharge") 1 set Stop "" if {[regexp {^[0-9]+$} $Liste]} { set Stop "[PreFixe]$Liste" set Liste "" } if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" foreach Nom $Liste { Espionne "$Nom" set LesHeaders {} set yena2 0 set LocUcsc ""; set CytoBand1 ""; set CytoBand2 ""; set CytoBand "" if {$Stop!="" && $Nom>$Stop} { break } set LaLigne {} lappend LaLigne $Nom lappend LesHeaders "GscopeId" #set Status [ExtraitInfo $Nom "Status"] #lappend LaLigne $Status #lappend LesHeaders "Status" set GeneName [ExtraitInfo $Nom "ValiGN"] lappend LaLigne $GeneName lappend LesHeaders "GeneName" lappend LaLigne "" lappend LesHeaders "Card" #set Alias [RecupereSynomyms $Nom] #lappend LaLigne $Alias #lappend LesHeaders "AliasGeneName" set Organism [ExtraitInfo $Nom "Organism"] set AccessmRNA [AccessEvi $Nom] lappend LaLigne $AccessmRNA lappend LesHeaders "AccessmRNA" set IdEtAccessProt [ExtraitInfo $Nom "IdAccProt:"] set LesInfosProt [split $IdEtAccessProt " "] set AccessProt [lindex $LesInfosProt 1] lappend LaLigne $AccessProt lappend LesHeaders "AccessProt" set LocUcsc [ExtraitInfo $Nom "LocUcscFrom200602:"] lappend LaLigne $LocUcsc lappend LesHeaders "LocUcsc" set CytoBand [ExtraitInfo $Nom "CytoBand:"] lappend LaLigne $CytoBand lappend LesHeaders "CytoBand" #set HomologeneId [ExtraitInfo $Nom "HomologeneId:"] #lappend LaLigne $HomologeneId #lappend LesHeaders "HomoloGene" #set LesComponent {}; set LesFunction {}; set LesProcess {} #foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { # set Type [InterrogeGeneOntology $FichierGO GO $GO Type] # set DefGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] # if {[regexp {component} $Type]} {lappend LesComponent $DefGO} # if {[regexp {function} $Type]} {lappend LesFunction $DefGO} # if {[regexp {process} $Type]} {lappend LesProcess $DefGO} #} #set LesComponent [ListeSansDoublon $LesComponent] #set LesFunction [ListeSansDoublon $LesFunction] #set LesProcess [ListeSansDoublon $LesProcess] #set comp [join $LesComponent ","] #set func [join $LesFunction ","] #set proce [join $LesProcess ","] #lappend LaLigne $comp #lappend LesHeaders "GoComponent" #lappend LaLigne $func #lappend LesHeaders "GoFunction" #lappend LaLigne $proce #lappend LesHeaders "GoProcess" set nbdetissue 0; set nbest 0 set TissueTypesInteressant [ExtraitInfo $Nom "TissueType:"] foreach Tissue [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesTissueType] { incr nbdetissue set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom TissueType $Tissue n] set nbest [expr $nbest + $n] } if {$nbdetissue==0 && $nbest==0} { lappend LaLigne "$nbest EST, $nbdetissue Tissues, ESTretine:N" } else { if {$TissueTypesInteressant=="" || $TissueTypesInteressant=="no value"} { lappend LaLigne "$nbest EST, $nbdetissue Tissues, ESTretine:N" } else { lappend LaLigne "$nbest EST, $nbdetissue Tissues, ESTretine:Y" } } lappend LesHeaders "TissueTypes" set nbdestage 0; set nbest 0 foreach DevStage [InterrogeSelectedEST $FichierSelectedEST Nom $Nom LesDevStage] { incr nbdestage set n [InterrogeSelectedEST $FichierSelectedEST Nom $Nom DevStage $DevStage n] set nbest [expr $nbest + $n] } if {$nbdestage==0 && $nbest==0} { lappend LaLigne "$nbest EST, $nbdestage DevStage" } else { lappend LaLigne "$nbest EST, $nbdestage DevStage" } lappend LesHeaders "DevStages" set BanqueCdna [ExtraitInfo $Nom "BanqueCDNA:"] set LesMots [split $BanqueCdna " "] set OuiNon [lindex $LesMots 0] lappend LaLigne $OuiNon lappend LesHeaders "cDNA" set DE [ExtraitInfo $Nom "ValiDE:"] regsub "Mus musculus " $DE "" DE regsub -all ";" $DE "," DE lappend LaLigne [string range $DE 0 79] lappend LesHeaders "Description" set Pathway [ExtraitInfo $Nom "Pathways:"] lappend LaLigne [string range $Pathway 0 79] lappend LesHeaders "Pathways" set ProbeSetId [ExtraitInfo $Nom "ProbeSetId:"] regsub -all "," $ProbeSetId " " ProbeSetId lappend LaLigne $ProbeSetId lappend LesHeaders "ProbeSetId" if { ! [info exists RecapitulatifRetChip(Headers)]} { set Headers [join $LesHeaders ";"] set RecapitulatifRetChip(LesHeaders) $LesHeaders set RecapitulatifRetChip(Headers) $Headers lappend LesLignes $Headers } set Ligne [join $LaLigne ";"] lappend LesLignes $Ligne set RecapitulatifRetChip($Nom) $Ligne } set FRRC [SauveLesLignes $LesLignes dans $FichierRecapitulatifRetChip] if {$Action=="GetFileName"} { return $FRRC } return $LesLignes } proc RecapitulatifRetChipCourt {{Liste ""} {Action ""}} { global RecapitulatifRetChipCourt Wup "Attention on travaille normalement dans le fichier .csv" if {$Liste=="" && $Action=="GetIt"} { set Action "GetContent" } if {$Action==""} { if {[EstUnPAB $Liste] || [regexp "Headers" $Liste]} { set Action "GetIt" } } set FichierRecapitulatifRetChipCourt "[RepertoireDuGenome]/fiches/RecapitulatifRetChipCourt.csv" if {$Action=="GetOnlyFileName"} { return $FichierRecapitulatifRetChipCourt } if {$Action=="CreateAndGetFileName"} { set Action "GetFileName" } if {$Action=="GetContent" && [file exists $FichierRecapitulatifRetChipCourt]} { return [LesLignesDuFichier $FichierRecapitulatifRetChipCourt] } if {$Action=="GetContentIfExists"} { if {[file exists $FichierRecapitulatifRetChipCourt]} { return [LesLignesDuFichier $FichierRecapitulatifRetChipCourt] } else { return "" } } if {$Action=="GetIt"} { set NomDemande $Liste if {[info exists RecapitulatifRetChipCourt($NomDemande)]} { return $RecapitulatifRetChipCourt($NomDemande) } if { ! [info exists RecapitulatifRetChipCourt("EstCharge")]} { set RecapitulatifRetChipCourt("EstCharge") 1 foreach Ligne [RecapitulatifRetChipCourt "" "GetContentIfExists"] { if { ! [info exists RecapitulatifRetChipCourt(Headers)]} { set RecapitulatifRetChipCourt(Headers) $Ligne set RecapitulatifRetChipCourt(LesHeaders) [split $Ligne ";"] continue } regexp {^[^;]+} $Ligne NomLu set RecapitulatifRetChipCourt($NomLu) [list $Ligne] } } if {[info exists RecapitulatifRetChipCourt($NomDemande)]} { return $RecapitulatifRetChipCourt($NomDemande) } set LeRetour {} foreach Nom $Liste { lappend LeRetour [lindex [RecapitulatifRetChipCourt $Nom "GetIt"] 0] } return $LeRetour } set RecapitulatifRetChipCourt("EstCharge") 1 set Stop "" if {[regexp {^[0-9]+$} $Liste]} { set Stop "[PreFixe]$Liste" set Liste "" } if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { Espionne "$Nom" set LesHeaders {} set yena2 0 if {$Stop!="" && $Nom>$Stop} { break } set LaLigne {} #lappend LaLigne "$Nom" lappend LaLigne $Nom lappend LesHeaders "GscopeId" set GeneName [ExtraitInfo $Nom "ValiGN"] lappend LaLigne $GeneName lappend LesHeaders "GeneName" set AccessmRNA [AccessEvi $Nom] lappend LaLigne $AccessmRNA lappend LesHeaders "AccessmRNA" set IdEtAccessProt [ExtraitInfo $Nom "IdAccProt:"] set LesInfosProt [split $IdEtAccessProt " "] set AccessProt [lindex $LesInfosProt 1] lappend LaLigne $AccessProt lappend LesHeaders "AccessProt" if { ! [info exists RecapitulatifRetChipCourt(Headers)]} { set Headers [join $LesHeaders ";"] set RecapitulatifRetChipCourt(LesHeaders) $LesHeaders set RecapitulatifRetChipCourt(Headers) $Headers lappend LesLignes $Headers } set Ligne [join $LaLigne ";"] lappend LesLignes $Ligne set RecapitulatifRetChipCourt($Nom) $Ligne } if {$Action=="GetFileName"} { set FRRC [SauveLesLignes $LesLignes dans $FichierRecapitulatifRetChipCourt] return $FRRC } return $LesLignes } proc RechargeListeDesPABs {} { global ListeDesPABs if {[info exists ListeDesPABs]} { unset ListeDesPABs } return [ListeDesPABs] } proc RechercheDansInfo {Texte} { global ListeDesContenuInfo if { ! [info exists ListeDesContenuInfo]} { foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] set Info [ExtraitInfo $Nom] if {$Info != ""} { lappend ListeDesContenuInfo [string toupper $Info] } else { lappend ListeDesContenuInfo [string toupper "Nom: $Nom"] } } } } proc RechercheDansLesBody {{Texte ""}} { Wup "Asks which text is to search in all proc bodies" if {$Texte==""} { set Texte [Entre ""] if {$Texte==""} { return ""} } set LesTrouvees {} foreach Proc [LesProceduresExistantes] { set Body [info body $Proc] if {[regexp -nocase $Texte $Body]} { lappend LesTrouvees $Proc } } return $LesTrouvees } proc RechercheESTInteressant {{Liste ""}} { set FichierEst "[RepertoireDuGenome]/fiches/SelectedEST" set LesTermesRecherches {eye retina rpe} if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Ligne [LesLignesDuFichier $FichierEst] { set LesMots [split $Ligne "\t"] set Nom [lindex $LesMots 0] set Acc [lindex $LesMots 1] set Genre [lindex $LesMots 2] set Info [lindex $LesMots 3] if {[regexp "TissueType" $Genre]} { if {[info exists TabComplet($Nom)]} { incr TabComplet($Nom) } else { set TabComplet($Nom) 1 } } foreach Terme $LesTermesRecherches { if {[regexp -nocase $Terme $Info]} { #Espionne "$Acc $Nom $Info" lappend Tableau$Nom "$Acc $Info" break } } } foreach Nom $Liste { Espionne "$Nom" if {[info exists Tableau$Nom]} { set LesCV {} array unset TabFinal array unset LesTissusDunNom foreach elmt [set Tableau$Nom] { set index [string first " " $elmt] set Tissue [string range $elmt $index end] set Tissue [string toupper $Tissue] if {[info exists LesTissusDunNom($Tissue)]} { incr LesTissusDunNom($Tissue) } else { set LesTissusDunNom($Tissue) 1 } } foreach Clef [array names LesTissusDunNom] { set ClefMinus [string tolower $Clef] set ClefMinus [string trim $ClefMinus] lappend LesCV "$ClefMinus=$LesTissusDunNom($Clef)/$TabComplet($Nom)" } Espionne "$Nom TissueType: [join $LesCV " | "]" #InformeSansDemander $Nom "TissueType: [join $LesCV " | "]" } else { Espionne "$Nom novalue" #InformeSansDemander $Nom "TissueType: no value" } } } proc RechercheESTInteressant2 {{Liste ""}} { InterrogeSelectedEST unset set FichierEst "[RepertoireDuGenome]/fiches/SelectedEST" AppendAuFichier [Fiches]/EST.log "$FichierEst" set LesTermesRecherches {rpe eye retina} if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { #Espionne "$Nom" AppendAuFichier [Fiches]/EST.log "$Nom" array unset Tableau; set LesCV {} set nbtissu 0; set nbest 0; set nbestRetinaEyeRpe 0 foreach Tissue [InterrogeSelectedEST $FichierEst Nom $Nom LesTissueType] { #Espionne "$Tissue" AppendAuFichier [Fiches]/EST.log "$Tissue" incr nbtissu set ntot [InterrogeSelectedEST $FichierEst Nom $Nom TissueType $Tissue n] set nbest [expr $nbest + $ntot] foreach Terme $LesTermesRecherches { if {[regexp -nocase $Terme $Tissue]} { set n [InterrogeSelectedEST $FichierEst Nom $Nom TissueType $Tissue n] set Tableau($Tissue) $n set nbestRetinaEyeRpe [expr $nbestRetinaEyeRpe + $n] break } } } Espionne [array get Tableau] #Espionne "nbtotaltissu= $nbtissu" AppendAuFichier [Fiches]/EST.log "nbtotaltissu= $nbtissu" #Espionne "nbest= $nbest" AppendAuFichier [Fiches]/EST.log "nbest= $nbest" if {[info exists Tableau]} { lappend LesCV "RetinaEyeRpeTotal=$nbestRetinaEyeRpe/$nbest" foreach Clef [array names Tableau] { lappend LesCV "$Clef=$Tableau($Clef)/$nbest" } Espionne "$Nom TissueType: [join $LesCV " | "]" AppendAuFichier [Fiches]/EST.log "$Nom TissueType: [join $LesCV " | "]" InformeSansDemander $Nom "TissueType: [join $LesCV " | "]" } elseif {$nbtissu == 0} { Espionne "$Nom novalue" AppendAuFichier [Fiches]/EST.log "$Nom novalue" InformeSansDemander $Nom "TissueType: no value" } else { Espionne "$Nom noRetinaEyeRpeEST" AppendAuFichier [Fiches]/EST.log "$Nom noRetinaEyeRpeEST" InformeSansDemander $Nom "TissueType: noRetinaEyeRpeEST" } } } proc RechercheGenesParmiResultatsUSAGE {FichGenCherch FichRes} { #FichGenCherch fichier avec la liste des genes d interet et leur unigene #FichRes fichier avec les tags et les abondances if {![file exists $FichGenCherch] || ![file exists $FichRes]} {return} foreach Ligne [LesLignesDuFichier $FichGenCherch] { set Ligne [string trim $Ligne] scan $Ligne "%s %s %s" nom uq ug regsub "^Hs\." $ug "" ug set Vu($ug) 1 set N($ug) $nom } foreach Ligne [LesLignesDuFichier $FichRes] { set Ligne [string trim $Ligne] scan $Ligne "%s %s %s" tag ab ug if {[info exists Vu($ug)]} { lappend LeFinal "$N($ug)\t$ug\t$ab\t$tag" #EspionneL $LeFinal } } return $LeFinal } proc RechercheLesAccess {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s" Alias Access set LL [LaSequenceDesBanques $Access $Access AccessOk "OnVeutNature"] if {$LL=={}} { Espionne "$Access ....................... not found" } else { set LigneAC [lindex $LL 1] if { ! [regexp "^AC " $LigneAC]} { FaireLire "Probleme avec $Alias $Access" AfficheVariable [join $LL "\n"] "AvecFormateAvecBlasteAvecRetour" set BonAccess "????????" set TresBonAccess "?????????" } else { regsub -all ";" $LigneAC " " LigneAC scan $LigneAC "%s %s" AC BonAccess if {[LaSequenceDesBanques $BonAccess $BonAccess TresBonAccess]=={}} { set TresBonAccess "Introuvable" } else { if {$BonAccess==$TresBonAccess} { set TresBonAccess "" } lappend LesBons "$BonAccess $Alias" } } Espionne [format "%-15s %-15s %-15s %-15s %-15s" $Alias $Access $AccessOk $BonAccess $TresBonAccess] } } Espionne [SauveLesLignes $LesBons dans "access_alias.txt"] exit } proc RechercheLesBugsMacsims {FichierMacsimXml} { package require tdom set fh [open $FichierMacsimXml "r"] set domDoc [dom parse -channel $fh] close $fh set root [$domDoc documentElement] set startStopProb 0 set startOrStop0Prob 0 foreach n [$root selectNodes "//fitem"] { set type [string trim [$n selectNodes "string(ftype)"]] set start [string trim [$n selectNodes "string(fstart)"]] set stop [string trim [$n selectNodes "string(fstop)"]] set color [string trim [$n selectNodes "string(fcolor)"]] set score [string trim [$n selectNodes "string(fscore)"]] set note [string trim [$n selectNodes "string(fnote)"]] # Macsims bugs !!! if {$start > $stop} { set tmp $start set start $stop set stop $tmp set startStopProb 1 } if {$start < 1} { set startOrStop0Prob 1 continue } } puts "$FichierMacsimXml-> startStopProb: $startStopProb startOrStop0Prob: $startOrStop0Prob" } proc RechercheLesSansGN {FichierPop} { set L [CreeListePourFichierAUneColonne $FichierPop] foreach Nom $L { set LesGN [InterrogeGeneName $Nom LesGeneNames] if {$LesGN==""} {Espionne $Nom} } } proc RechercheMoi {} { Html_ZeroToBody Html_Banner Wscope Html_Append "
    " Html_Append "

    " Html_Append "Search any string within the infos files of [Science]" Html_Append "
        to search a Gene Name exactly, use the search string 'ValiGN: Pax6' (with ':' and one space)" Html_Append "

    " Html_Append "
    " Html_Append "

    " Html_Append " " Html_Append " " Html_Append " " Html_Append " " Html_Append "     " Html_Append " " Html_Append "     " Html_Append " " Html_Append " " Html_Append "     " Html_Append " " Html_Append "

    " Html_Append "
    " #lP if {[Science]=="EVImm" || [OnTraite REFUNI]} { set RG [file tail [RepertoireDuGenome]] Html_Append "

    or do a blast search

    " Html_Append "" } else { set RG [file tail [RepertoireDuGenome]] set PreFixe [PreFixe] set refWikiBlastOnGscope "[LbgiUrl]/wikili/index.php/Blast_On_Gscope_Project" Html_Append "

    or do a blast search within all $PreFixe of $RG (see Wiki)

    " Html_Append "" } #rR Html_BodyToEnd return [Html_Get] } proc RechercheTaxonomy {Nom Recherche} { regsub -all " " $Recherche "_" NomRecherche set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" set FichierSortie "[RepertoireDuGenome]/annotation/$NomRecherche.total" set Jai 0 if {! [file exists $Fichier]} { AppendAuFichier $FichierSortie "$Nom 0 0" return } ParseMACSIMS $Fichier macsims # set ListeSequences [LesSequencesDuGroupeMacsims $Nom "Sans"] set Liste $macsims(Noms) set ListeSequences [EnleveLaSequenceDeMonOrganisme $Nom $Liste] # Espionne $ListeSequences set Res [LesSequencesDesClassificationsEtOrganismesDuMacsims $Nom $ListeSequences $Recherche] set Nb [llength $Res] if {$Res == ""} { set Jai 0 } else { set Jai 1 } AppendAuFichier $FichierSortie "$Nom $Jai $Nb $Res" } proc RechercheTaxonomyPourTous {Recherche} { regsub -all " " $Recherche "_" NomRecherche set FichierSortie "[RepertoireDuGenome]/annotation/$NomRecherche.total" AppendAuFichier $FichierSortie "Recherche de: $Recherche" foreach Nom [ListeDesPABs] { Espionne $Nom RechercheTaxonomy $Nom $Recherche } } proc RecoloreLesBoites {TypeDeCouleur K} { global ListeDeBoites OnColorieLesFrames 1 SetSignification $K "AnnulerToutesSignifications" "" foreach Boite $ListeDeBoites { if {[regexp "GLIMMER" $Boite]} { continue } set Nom [Box $Boite nom] set Id [$K find withtag "$Nom"] RecoloreUneBoite $Nom $TypeDeCouleur $K $Id } OnColorieLesFrames 0 #?? MiseAJourHtml $K return $K } proc RecoloreLesLinges {TypeDeCouleur K} { global ListeDeBoites SetSignification $K "AnnulerToutesSignifications" "" foreach Boite $ListeDeBoites { if {[regexp "GLIMMER" $Boite]} { continue } set Nom [Box $Boite nom] set Id [$K find withtag "Linge$Nom"] RecoloreUnLinge $Nom $TypeDeCouleur $K $Id } #?? MiseAJourHtml $K return $K } proc RecoloreUnLinge {Nom TypeDeCouleur K {Id ""}} { global CouleurDuFond global ColorierLesBox ColorierLesLinges if { $Id == "" } { set Id [$K find withtag "Linge$Nom"] } if {0 && [Fantome $Nom]} { set Couleur $CouleurDuFond set CouleurOutline "black" } else { set Couleur [CouleurParTypeEtNom $TypeDeCouleur $Nom $K] set CouleurOutline $Couleur } if {[Enterre $Nom]} { set CouleurOutline "white" } $K itemconfigure $Id -fill $Couleur -outline $Couleur } proc RecoloreUneBoite {Nom TypeDeCouleur K {Id ""}} { global CouleurDuFond if {[regexp "GLIMMER" $Nom]} { return } if { $Id == "" } { set Id [$K find withtag $Nom] } if {[Fantome $Nom]} { set Couleur $CouleurDuFond set CouleurOutline "black" } else { set Couleur [CouleurParTypeEtNom $TypeDeCouleur $Nom $K] set CouleurOutline $Couleur } if {[Enterre $Nom]} { set CouleurOutline "white" } if {[regexp "rond" $K]} { $K itemconfigure $Id -fill $Couleur } else { $K itemconfigure $Id -fill $Couleur -outline $CouleurOutline } } proc Recombinaison {FichierSiteB FichierSiteP FichierSiteL {FichierSiteR ""} {PremSec ""}} { JeMeSignale set Premiere 0 ; set Seconde 0 if {$PremSec=="Premiere"} { set Premiere 1 } if {$PremSec=="Seconde"} { set Seconde 1 } Wup "FichierSiteB must be tfa file." Wup "FichierSiteP can be with extension .txt or .tfa ..." Wup " NomSiteP, BanqueDuSiteP, FichierTFASiteP are equivalent (to FichierSiteP without extension)" if { ! [file exists $FichierSiteB] } { FaireLire "$FichierSiteB\n doesn't exist.\nI cancel Recombinaison." return "" } if { ! [file exists $FichierSiteP]} { FaireLire "$FichierSiteP\n doesn't exist.\nI cancel Recombinaison." return "" } if {[regexp ">" [string range [ContenuDuFichier $FichierSiteB] 1 end]]} { FaireLire "$FichierSiteB\ncontains more then one sequence. I cancel Recombinaison." return "" } set OriFichierSiteB $FichierSiteB set FichierSiteB [FichierPpcrSansAttBAdapter $FichierSiteB] set OriFichierSiteP $FichierSiteP regsub {\.[^\.]*$} $FichierSiteP "" NomSiteP set BanqueDuSiteP "$NomSiteP" set FichierTFASiteP $OriFichierSiteP if {[regexp ">" [string range [ContenuDuFichier $FichierTFASiteP] 1 end]]} { FaireLire "$FichierSiteP\ncontains more then one sequence. I cancel Recombinaison." return "" } set UseLambdaIntegrase 0 if {$Premiere} { set SeqPPCR [QueLaSequenceDuFichierTFA $FichierSiteB] if {[regexp -nocase [SEQAttB1] $SeqPPCR] && [regexp -nocase [SEQAttB2] $SeqPPCR]} { if {[OuiOuNonMemo "Do I use the 'Phage Lambda integrase' to do recombination ?"]} { set UseLambdaIntegrase 1 } } } if {$Seconde} { set SeqPPCR [QueLaSequenceDuFichierTFA $FichierSiteB] Espionne "[SEQAttL1] $SeqPPCR" if {[regexp -nocase [SEQAttL1] $SeqPPCR] && [regexp -nocase [SEQAttL2] $SeqPPCR]} { if {[OuiOuNonMemo "Do I use the 'Phage Lambda integrase' to do recombination ?"]} { set UseLambdaIntegrase 1 } } } Espionne "UseLambdaIntegrase is $UseLambdaIntegrase" if {$UseLambdaIntegrase} { set SeqSiteP [QueLaSequenceDuFichierTFA $FichierTFASiteP] if {$Premiere} { set Att1 [SEQAttB1] ; set Att2 [SEQAttB2] } if {$Seconde } { set Att1 [SEQAttL1] ; set Att2 [SEQAttL2] } set LesBornes [LesBornesParLambdaIntegrase $SeqPPCR $SeqSiteP $Att1 $Att2] if {$LesBornes==""} { set UseLambdaIntegrase 0 } else { ScanLaListe $LesBornes BN BC PN PC } } if { ! $UseLambdaIntegrase } { if {[OuiOuNonMemo "Do I skip all recombination WITHOUT LambdaIntegrase ?"]} { return "" } if { ! [file exists $FichierTFASiteP] || ! [file exists "$BanqueDuSiteP.nhr"]} { set BanqueDuSiteP [CreeBanqueBlastDuFichier $FichierSiteP $NomSiteP] } set FichierTFASiteP $BanqueDuSiteP set FichierBlast "[TmpFile].blastn" exec blastall -p blastn -d $BanqueDuSiteP -i $FichierSiteB -F F -o $FichierBlast if {[OuiOuNonMemo "Do You want to see the blast file ?" 0]} { AfficheFichier $FichierBlast "AvecEtudeBlastAvecSegAlignement" } global SansOffsetEtOrganisme ; set SansOffsetEtOrganisme 1 set LesHomologues [ChaqueSegmentDuBlastN $FichierBlast 0.98989 "" "AvecLaSeq"] set LesBornesTrouvees {} foreach Homologie $LesHomologues { ScanLaListe [split $Homologie "\t"] ChroContigTroncon nCops nCopsDansCetteSequence Orga PourcentageIdentiteCacheDansScore Expect DebutQuery FinQuery DebutSbjct FinSbjct Sequence if {[expr ($FinSbjct-$DebutSbjct)<=0]} { Warne "Reverse sequence in the blast. I'll skipp it" continue } lappend LesBornesTrouvees "$DebutQuery $FinQuery $DebutSbjct $FinSbjct $Sequence" } set LesBornesTrouvees [lsort -integer -index 0 $LesBornesTrouvees] if {[llength $LesBornesTrouvees]<2} { FaireLire "I found less than 2 hits for \n[PremiereLigneDuFichier $FichierSiteB]\nI cancel" return "" } if {[llength $LesBornesTrouvees]>2} { Warne "I found more than 2 hits. I'll eliminate those larger than 40." set LesBornesGardees {} foreach Bo $LesBornesTrouvees { scan $Bo "%d %d %d %d %s" DQ FQ DS FS Sq if {[expr ($FQ-$DQ) > 40]} { continue } lappend LesBornesGardees $Bo } if {[llength $LesBornesGardees]!=2} { FaireLire "I found more than 2 hits. Please select two of them." AfficheFichier $FichierBlast "AvecEtudeBlastAvecSegAlignement" set LesBons [MorceauxChoisis $LesBornesTrouvees] } else { set LesBons $LesBornesGardees } } else { set LesBons $LesBornesTrouvees } if {[llength $LesBons]!=2} { FaireLire "I found less than 2 hits for \n[PremiereLigneDuFichier $FichierSiteB]\nI cancel" return "" } foreach Essai {1 2} { scan [lindex $LesBons 0] "%d %d %d %d" dBN fBN dPN fPN scan [lindex $LesBons 1] "%d %d %d %d" dBC fBC dPC fPC if {($dBN < $dBC && $dPN < $dPC)} { break } Warne "There is a problem with the order of the recombination site. I'll change order." set LesMeilleurs {} lappend LesMeilleurs [lindex $LesBons 1] lappend LesMeilleurs [lindex $LesBons 0] set LesBons $LesMeilleurs } if {[expr ! ($dBN < $dBC && $dPN < $dPC)]} { Warne "I'll cancel creation of rec for \n $FichierSiteB" return "" } set MiN [expr ($fBN-$dBN)/2] set BN [expr $dBN+$MiN] set PN [expr $dPN+$MiN] set MiC [expr ($fBC-$dBC)/2] set BC [expr $dBC+$MiC] set PC [expr $dPC+$MiC] } set SeqB [QueLaSequenceDuFichierTFA $FichierSiteB] set SeqP [QueLaSequenceDuFichierTFA $FichierTFASiteP] set SeqL "" append SeqL [string range $SeqP 0 [expr $PN-1]] append SeqL [string range $SeqB $BN $BC] append SeqL [string range $SeqP [expr $PC+1] end] set SeqR "" append SeqR [string range $SeqB 0 [expr $BN-1]] append SeqR [string range $SeqP $PN $PC] append SeqR [string range $SeqB [expr $BC+1] end] set NomB [file tail $OriFichierSiteB] regsub ".tfa$" $NomB "" NomB set NomP [file tail $OriFichierSiteP] regsub ".tfa$" $NomP "" NomP set BonTitre "" while {$BonTitre==""} { set EnteteB [EnteteDuFichierTFA $FichierSiteB] set EnteteL "" if {$Seconde && [file exists $FichierSiteL]} { set EnteteL [EnteteDuFichierTFA $FichierSiteL] } set Vecteur [EnteteDuFichierTFA $FichierSiteP "access"] if {[regexp " Rec2 in " $EnteteB]} { if {[OuiOuNon "$EnteteB is a Rec2 file.\n\Do I cancel recombinaison ?"]} { return "" } } if {$Premiere && [regexp " Rec1 in " $EnteteB]} { if {[OuiOuNon "$EnteteB is a Rec1 file and You want to do a rec1.\n\ Do I cancel recombinaison ?"]} { return "" } } if {[regexp " Rec1 in " $EnteteB]} { regsub ">" $EnteteB "" TitreDuRec1 set BonTitre "Rec2 in $Vecteur of $TitreDuRec1" break } if {[regexp " Ppcr for " $EnteteB]} { regsub ">" $EnteteB "" TitreDuPpcr set BonTitre "Rec1 in $Vecteur of $TitreDuPpcr" break } if {[OuiOuNonMemo "You use uses old notation of Ppcr. Do I cancel recombinaison ?"]} { return "" } # set EnteteL "RecombinaisonL [file tail $OriFichierSiteB] in [file tail $FichierSiteP]" # set EnteteL "Rec1_${NomB}__$NomP" set EnteteB [EnteteDuFichierTFA $FichierSiteB "access"] set Titre "" if {[regexp "^ProduitPCR_" $EnteteB]} { regsub -nocase "ProduitPCR_" $EnteteB "" EnteteB set Titre "Rec1_" } if {[regexp "^PPCR_" $EnteteB]} { regsub -nocase "PPCR_" $EnteteB "" EnteteB set Titre "Rec1_" } if {[regexp "^Rec1_" $EnteteB]} { regsub -nocase "Rec1_" $EnteteB "" EnteteB set Titre "Rec2_" } set EnteteP [EnteteDuFichierTFA $FichierSiteP "access"] set pDONR $EnteteP set EnteteL "${Titre}${EnteteB}_$EnteteP" set BonTitre "" set AllEnteteB [EnteteDuFichierTFA $FichierSiteB "all"] set SonTitre [StringSuivant "Rec1 in " dans $AllEnteteB] if {$SonTitre==""} { set SonTitre [StringSuivant "Rec1 with " dans $AllEnteteB] } if {$SonTitre!=""} { set BonTitre "Rec2 with $SonTitre" } else { set SonNom "" scan $AllEnteteB "%s" SonNom regsub ">" $SonNom "" SonNom set SonTitre [StringSuivant "Ppcr for " dans $AllEnteteB] set BonTitre "Rec1 in $pDONR of $SonNom ppcr $SonTitre" } } if {$Premiere} { if {$EnteteL==""} { scan $EnteteB "%s" AccessDuEnteteB set EnteteP [EnteteDuFichierTFA $FichierSiteP "access"] scan $EnteteP "%s" AccessDuEnteteP set EnteteL "${AccessDuEnteteB}_$AccessDuEnteteP" } } if {$Seconde} { if {$EnteteL==""} { scan $EnteteB "%s" AccessDuEnteteB set EnteteP [EnteteDuFichierTFA $FichierSiteP "access"] scan $EnteteP "%s" AccessDuEnteteP set EnteteL "${AccessDuEnteteB}_$AccessDuEnteteP" } } set TfaL [SequenceFormatTFA $SeqL "$EnteteL $BonTitre" "nucbrut"] set FSL [Sauve $TfaL dans $FichierSiteL] if {$FichierSiteR!=""} { if {[regexp "Rec1" $EnteteL]} { regsub "" $EnteteL "Rec1R_" EnteteR } if {[regexp "Rec2" $EnteteL]} { regsub "" $EnteteL "Rec1R_" EnteteR } set TfaR [SequenceFormatTFA $SeqR $EnteteR "nucbrut"] set FSR [Sauve $TfaR dans $FichierSiteR] } if {[OuiOuNonMemo "Do You want to see the tfa files ?" 0]} { if {$OriFichierSiteB!=$FichierSiteB} { AfficheFichier $OriFichierSiteB "AvecFormateAvecBlaste" } AfficheFichier $FichierSiteB "AvecFormateAvecBlaste" AfficheFichier $FichierSiteP "AvecFormateAvecBlaste" AfficheFichier $FichierTFASiteP "AvecFormateAvecBlaste" AfficheFichier $FichierSiteL "AvecFormateAvecBlaste" AfficheFichier $FichierSiteR "AvecFormateAvecBlaste" } return $FSL } proc RecompteCorrelationDDArrays {FichierProfils} { #FichierProfils: /HeadNecknonrnr/compar_profils_mb_gscope #Resultats: 73/110 avec meme profil donc 66.4% set NbBons 0 set NbDifts 0 set NbTotal 0 foreach Ligne [LesLignesDuFichier $FichierProfils] { if {$Ligne==""} {continue} incr NbTotal set LesInfos [split $Ligne "\t"] set ResultatComparaison [lindex $LesInfos 4] if {$ResultatComparaison==1} {incr NbBons} if {$ResultatComparaison==0} {incr NbDifts} } Espionne "$NbBons bons sur $NbTotal -$NbDifts differents" set P [expr $NbBons*1.0/$NbTotal] return $P } proc ReconsidereLesDifferentiels {} { global RepertoireDuGenome set LesXDifferent {} set LesYDifferent {} set LesXClose {} set LesYClose {} foreach DiffBlaAli [LesLignesDuFichier "$RepertoireDuGenome/fiches/diffblaali"] { scan $DiffBlaAli "%s %s" Nom Rapport if {[regexp "No(More|Bla|Ali)" $Rapport]} { lappend Sortie $DiffBlaAli continue } scan $DiffBlaAli "%s %s %s %s %s %s %s %s" Nom BestBla BestAli DisBla DisAli Ecart Rapport Fragments if { ! [regexp "Problem" $Rapport] && ! [regexp "Same" $Rapport]} { scan [RapportDuDifferentiel $DisBla $DisAli] "%s %d" Rapport Ecart } set Beau [format "%s %-9s %-9s %3d %3d %3d %-10s %s" $Nom $BestBla $BestAli $DisBla $DisAli $Ecart $Rapport $Fragments] lappend LesX $DisBla lappend LesY $DisAli if {$Rapport=="Different"} { lappend LesXDifferent $DisBla lappend LesYDifferent $DisAli } if {$Rapport=="Close"} { lappend LesXClose $DisBla lappend LesYClose $DisAli } lappend Sortie $Beau } SauveLesLignes $Sortie dans "$RepertoireDuGenome/fiches/diffblaali" set K [Graphe $LesX $LesY "" "green"] Graphe $LesXClose $LesYClose $K "blue" Graphe $LesXDifferent $LesYDifferent $K "red" MainLeveeSurUnCanva $K } proc RecopieLesFichiersDuPipe {Nom} { set FichierTFA "[RepertoireDuGenome]/prottfa/$Nom" set FichierBlast "[RepertoireDuGenome]/prottfa/$Nom.blastp" set FichierMsf "[RepertoireDuGenome]/prottfa/$Nom.msf" set FichierRascal "[RepertoireDuGenome]/prottfa/$Nom.rascal.msf" set FichierLeon "[RepertoireDuGenome]/prottfa/$Nom.leon.msf" set FichierNormd "[RepertoireDuGenome]/prottfa/$Nom.normd" set FichierMacsims "[RepertoireDuGenome]/prottfa/$Nom.macsims.xml" set FichierBlastSortie "[RepertoireDuGenome]/blastp/$Nom" set FichierMsfSortie "[RepertoireDuGenome]/msfclustal/$Nom" set FichierRascalSortie "[RepertoireDuGenome]/msfrascal/$Nom" set FichierLeonSortie "[RepertoireDuGenome]/msfleon/$Nom" set FichierNormdSortie "[RepertoireDuGenome]/normd/$Nom" set FichierMacsimsSortie "[RepertoireDuGenome]/macsims/$Nom.xml" set RepertoireBlastSortie "[RepertoireDuGenome]/blastp" set RepertoireMsfSortie "[RepertoireDuGenome]/msfclustal" set RepertoireRascalSortie "[RepertoireDuGenome]/msfrascal" set RepertoireLeonSortie "[RepertoireDuGenome]/msfleon" set RepertoireNormdSortie "[RepertoireDuGenome]/normd" set RepertoireMacsims "[RepertoireDuGenome]/macsims" if {! [file exists $RepertoireBlastSortie]} {file mkdir $RepertoireBlastSortie} if {! [file exists $RepertoireMsfSortie]} {file mkdir $RepertoireMsfSortie} if {! [file exists $RepertoireRascalSortie]} {file mkdir $RepertoireRascalSortie} if {! [file exists $RepertoireMacsims]} {file mkdir $RepertoireMacsims} if {! [file exists $RepertoireLeonSortie]} {file mkdir $RepertoireLeonSortie} if {! [file exists $RepertoireNormdSortie]} {file mkdir $RepertoireNormdSortie} if {[file exists $FichierBlast]} { file rename -force $FichierBlast $FichierBlastSortie } if {[file exists $FichierMsf]} { file rename -force $FichierMsf $FichierMsfSortie } if {[file exists $FichierRascal]} { file rename -force $FichierRascal $FichierRascalSortie } if {[file exists $FichierLeon]} { file rename -force $FichierLeon $FichierLeonSortie } if {[file exists $FichierNormd]} { file rename -force $FichierNormd $FichierNormdSortie } if {[file exists $FichierMacsims]} { file rename -force $FichierMacsims $FichierMacsimsSortie } file delete -force "[RepertoireDuGenome]/prottfa/$Nom.leon.log" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.anchors" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.anclist" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.motifs" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.msf" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.prof" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.copains" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.dnd" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.clu" set Extension "2.tfa" file delete -force "[RepertoireDuGenome]/prottfa/$Nom$Extension" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.macsims.rsf" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.leon.msf.xml" } proc RecopieLesFichiersDuPipe_AEffacer {Nom} { set FichierTFA "[RepertoireDuGenome]/prottfa/$Nom" set FichierBlast "[RepertoireDuGenome]/prottfa/$Nom.blastp" set FichierMsf "[RepertoireDuGenome]/prottfa/$Nom.msf" set FichierRascal "[RepertoireDuGenome]/prottfa/$Nom.rascal.msf" set FichierLeon "[RepertoireDuGenome]/prottfa/$Nom.leon.msf" set FichierNormd "[RepertoireDuGenome]/prottfa/$Nom.normd" set FichierMacsims "[RepertoireDuGenome]/prottfa/$Nom.macsims.xml" set FichierBlastSortie "[RepertoireDuGenome]/blastp/$Nom" set FichierMsfSortie "[RepertoireDuGenome]/msfclustal/$Nom" set FichierRascalSortie "[RepertoireDuGenome]/msfrascal/$Nom" set FichierLeonSortie "[RepertoireDuGenome]/msfleon/$Nom" set FichierNormdSortie "[RepertoireDuGenome]/normd/$Nom" set FichierMacsimsSortie "[RepertoireDuGenome]/macsims/$Nom.xml" set RepertoireBlastSortie "[RepertoireDuGenome]/blastp" set RepertoireMsfSortie "[RepertoireDuGenome]/msfclustal" set RepertoireRascalSortie "[RepertoireDuGenome]/msfrascal" set RepertoireLeonSortie "[RepertoireDuGenome]/msfleon" set RepertoireNormdSortie "[RepertoireDuGenome]/normd" set RepertoireMacsims "[RepertoireDuGenome]/macsims" if {! [file exists $RepertoireBlastSortie]} {file mkdir $RepertoireBlastSortie} if {! [file exists $RepertoireMsfSortie]} {file mkdir $RepertoireMsfSortie} if {! [file exists $RepertoireRascalSortie]} {file mkdir $RepertoireRascalSortie} if {! [file exists $RepertoireMacsims]} {file mkdir $RepertoireMacsims} if {! [file exists $RepertoireLeonSortie]} {file mkdir $RepertoireLeonSortie} if {! [file exists $RepertoireNormdSortie]} {file mkdir $RepertoireNormdSortie} if {[file exists $FichierBlast]} { file rename -force $FichierBlast $FichierBlastSortie } if {[file exists $FichierMsf]} { file rename -force $FichierMsf $FichierMsfSortie } if {[file exists $FichierRascal]} { file rename -force $FichierRascal $FichierRascalSortie } if {[file exists $FichierLeon]} { file rename -force $FichierLeon $FichierLeonSortie } if {[file exists $FichierNormd]} { file rename -force $FichierNormd $FichierNormdSortie } if {[file exists $FichierMacsims]} { file rename -force $FichierMacsims $FichierMacsimsSortie } file delete -force "[RepertoireDuGenome]/prottfa/$Nom.leon.log" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.anchors" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.anclist" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.motifs" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.msf" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast.prof" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.ballast" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.copains" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.dnd" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.clu" set Extension "2.tfa" file delete -force "[RepertoireDuGenome]/prottfa/$Nom$Extension" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.macsims.rsf" file delete -force "[RepertoireDuGenome]/prottfa/$Nom.leon.msf.xml" } proc Record {w x y} { AppendAuFichier "events.dat" "$w $x $y" return } proc RecordsContaining {Query {FileOrList ""}} { #rR pour Faire une recherche dans un texte même s'il y a de accents if {$FileOrList == ""} { set FileOrList "/home/moumou/www/cgi-bin/all.csv" } if {! [string is list $FileOrList]} { set Text [ContenuDuFichierSansAccent $FileOrList] set List [split $Text "\n"] } else { set List $FileOrList } set QuerySansAccent [SansAccent $Query] set LesRecords {} foreach Ligne $List { if {[regexp -nocase $QuerySansAccent $Ligne]} { lappend LesRecords $Ligne } } return $LesRecords } proc Recouvrement {a b c d} { if {$b<$c || $d<$a} { return 0 } return 1 } proc RecouvrementDeLaRegion {Debut Fin LesRegionsOccupees {Option Etendre}} { if {$Fin < $Debut} { set tmp $Debut set DebutR $Fin set Fin $tmp } set Recouvrement 0 if {$LesRegionsOccupees == {} } {return "$Recouvrement"} set LesRegionsOccupees [lsort -increasing -integer -index 0 [lsort -increasing -integer -index 1 $LesRegionsOccupees]] if {$Option == "Etendre"} { set n 0 set LesRegions {} set Taille [llength $LesRegionsOccupees] set End [expr $Taille - 1] for {set i 0} {$i <= $End} {incr i} { set RegionsOccupees [lindex $LesRegionsOccupees $i] set DebutR [lindex $RegionsOccupees 0] set FinR [lindex $RegionsOccupees 1] if {$FinR < $DebutR} { set tmp $DebutR set DebutR $FinR set FinR $tmp } if {![info exists OldDebutR] || ![info exists OldFinR]} { set OldDebutR $DebutR set OldFinR $FinR } if {$DebutR <= $OldFinR} { incr n if {$OldFinR < $FinR} { set OldFinR "$FinR" } if {$i == $End} { set LaRegion [list "$OldDebutR" "$OldFinR" "$n"] lappend LesRegions $LaRegion break } } else { set LaRegion [list "$OldDebutR" "$OldFinR" "$n"] lappend LesRegions $LaRegion set n 0 set OldDebutR $DebutR set OldFinR $FinR set i [expr $i - 1] continue } } set Recouvrement foreach Region $LesRegions { set DebutR [lindex $Region 0] set FinR [lindex $Region 1] if { ($DebutR <= $Debut && $Fin <= $FinR ) || ($DebutR <= $Debut && $Debut <= $FinR) || ($DebutR <= $Fin && $Fin <= $FinR ) || ($Debut <= $DebutR && $FinR <= $Fin )} { set Recouvrement [expr $Recouvrement + [lindex $Region 2]] } } } elseif {$Option == "NePasEtendre"} { foreach RegionsOccupees $LesRegionsOccupees { set DebutR [lindex $RegionsOccupees 0] set FinR [lindex $RegionsOccupees 1] if {$FinR < $DebutR} { set tmp $DebutR set DebutR $FinR set FinR $tmp } if { ($DebutR <= $Debut && $Fin <= $FinR ) || ($DebutR <= $Debut && $Debut <= $FinR) || ($DebutR <= $Fin && $Fin <= $FinR ) || ($Debut <= $DebutR && $FinR <= $Fin )} { incr Recouvrement } } } return $Recouvrement } proc RecouvrementDesSequences {SeqCible SeqAppat} { #Definit la taille de la sequence une fois pour toute set SeqAppatL [llength $SeqAppat] #calcul la position du debut de la sequence dans le tableau for {set x 0} {$x<$SeqAppatL} {incr x} { if {[lindex $SeqAppat $x]!="-"} { set StartPos [expr $x+1] #Espionne "startPos: $StartPos" break } } for {set x [expr $SeqAppatL -1]} {$x>0} {incr x -1} { if {[lindex $SeqAppat $x]!="-"} { set EndPos [expr $x+1] #Espionne "EndPos: $EndPos" break } } set StartPos [expr $StartPos -1] set EndPos [expr $EndPos -1] #maintenant je recupere les positions correspondant ¨¤ la sequence d'interet set firstPos 0 set lastPos 0 for {set x $StartPos} {$x>0} {incr x -1} { if {[lindex $SeqCible $x]!="-"} { set firstPos [expr $firstPos +1] } } for {set x $EndPos} {$x>0} {incr x -1} { if {[lindex $SeqCible $x]!="-"} { set lastPos [expr $lastPos +1] } } return "$firstPos/$lastPos" } proc RecreeLeFichierClust {Nom AvecOuSansOrganismeEtudie} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" set FichierSortie "[RepertoireDuGenome]/annotation/$Nom.clust" ParseMACSIMS $Fichier macsims set out [open $FichierSortie "w"] set SequenceAEnlever [AccessDeMonOrganisme $Nom] puts $out "Number of clusters : [llength $macsims(Groupes)]" puts $out "" foreach Groupe $macsims(Groupes) { puts $out "Cluster [expr $Groupe - 1] ; size=[llength $macsims(Groupe,$Groupe)]" foreach Access $macsims(Groupe,$Groupe) { if {$AvecOuSansOrganismeEtudie == "Sans"} { if {$Access == $SequenceAEnlever} { continue } } puts $out $Access } puts $out "" } close $out } proc RectangleDegrade {K X1 Y1 X2 Y2 UnPeu Passion {Orient ""} {N ""}} { if {$Orient==""} { set Orient "X" } if {$N==""} { set N 256 } if {$N < 1} { set N 1 } set PasC [expr 1.*($Passion-$UnPeu)/$N] set PasX [expr 1.*($X2-$X1)/$N] set PasY [expr 1.*($Y2-$Y1)/$N] set Xd $X1 set Xf $X2 set Yd $Y1 set Yf $Y2 set LesIds {} foreach i [NombresEntre 0 [expr $N - 1]] { if {$Orient=="X"} { set Xd [expr $X1+$i*$PasX] set Xf [expr $Xd+$PasX] } if {$Orient=="Y"} { set Yd [expr $Y1+$i*$PasY] set Yf [expr $Yd+$PasY] } set Couleur [Nuance [expr $UnPeu + $i*$PasC] $UnPeu $Passion] set Id [$K create rectangle $Xd $Yd $Xf $Yf -fill $Couleur -outline $Couleur ] lappend LesIds $Id } return $LesIds } proc RecupAccSeqParBird {lAcc seq} { # Procedure d interrogation de BIRD # le fichier d entree va contenir les requetes # lAcc est la liste des Access a interroger par BIRD # la requete va rappatrier les Access et selon la valeur de seq, la sequence associee (seq=1), ou pas (seq!=1) set ficTmp "listeAccForBird.txt" set ficOutTar "bird.tar.gz" set ficOut "listeResu" if {$lAcc != ""} { # creation du fichier necessaire pour interroger BIRD # on donne ici en entree l Access de la prot # on demande de retourner les Access + la sequence associee selon $seq set f [open $ficTmp w] foreach a $lAcc { puts $f "ID $a DB Prot" if {$seq == 1} { puts $f "FD AC,SQ" } else { puts $f "FD AC" } puts $f "//" } close $f # lancement de l interrogation de BIRD #set CommandeBird "curl -F upload=@$ficTmp http://star4:8080/mybiodb/bsearch?service=querycomplexe&out_file=${ficOut}&interpro=yes -o ${ficOutTar}" set CommandeBird "curl -F upload=@$ficTmp http://d1.crihan.fr:8080/bird/bsearch?service=querycomplexe&out_file=${ficOut}&interpro=yes -o ${ficOutTar}" if {[catch {eval exec $CommandeBird} Message]} { return 1 } else { return 0 } } } proc RecupDiseaseGenesGC {lignes} { # creer et retourne la liste des "Disease Genes" # copie cette liste dans le fichier DiseaseGenesFromGC afin d en garder une trace global RepAJourGC set file [file join $RepAJourGC "DiseaseGenesFromGC"] set f [open $file w] # initialisation de la liste de genes set Lgenes "" # parcours des lignes foreach l $lignes { if {[string first "=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [regexp -nocase {^GI} $Ligne]} {continue} set LigneSplitee [split $Ligne "\t"] set Multiples 0 set GeneName [join [lindex $LigneSplitee 1] "_"] regsub -all {\-} $GeneName {_} GeneName set Accession [lindex $LigneSplitee 0] if {! [info exists TabControles($Accession)]} { set TabControles($Accession) 1 set TabControles($Accession,indices) 1 } else { set Multiples 1 incr TabControles($Accession,indices) } if {[regexp -nocase {^[a-z]+} $Accession]} { set AccOri $Accession if {[regexp "NM_" $Accession]} { regsub {NM_} $Accession "NM" Accession if {! [regexp {RSHUM:} $Accession]} { set Acc "RSHUM:${Accession}" } set Sequence [FastaCmd $Acc Complet 0] if {$Multiples} { regsub {^>} $Sequence ">${Accession}_[set TabControles($AccOri,indices)] " Sequence } else { regsub {^>} $Sequence ">${Accession} " Sequence } } else { set option "-view FastaSeqs" #On utilise le champs ugi dans Uniseq pour obtenir l Id Unigene set Commande "getz $option \"\\\[genbank-all: $Accession\\\]\"" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {continue} if { $GetzOut == ""} {Espionne "$Accession pb";continue} set Sequence $GetzOut } } else { set Sequence [lindex $LigneSplitee 2] if {$Multiples} {set Accession "${Accession}_[set TabControles($Accession,indices)]"} set Sequence [join [list ">$Accession $GeneName" $Sequence] "\n"] } #Espionne "$Sequence" AppendAuFichier $Fichier $Sequence } close $F return "" } proc RecupLesSequencesSpike {} { Wup "Permet de recuperer les sequences des Spike Athaliana et de les sauver au format fasta" set RepSpike "[RepertoireDuGenome]/Probes/Spike_Athaliana" set Fichier "$RepSpike/Spike_RNA_Athaliana.txt" set LesSpikes "" if {[file exists $Fichier]} { set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} #RCP1 Root cap 1 protein AF168390 AACAGTATCTTGCCTGGGACAACTGCTTTTGGTATTGCTGTGGCAGCTATAATCATGGCTCGAACTGGGA set Ligne [split $Ligne "\t"] set Name [string trim [lindex $Ligne 0]] #Espionne "$Name" set Tab($Name,Def) [string trim [lindex $Ligne 1]] set Tab($Name,Acc) [string trim [lindex $Ligne 2]] set Tab($Name,Oligo) [string trim [lindex $Ligne 3]] lappend LesSpikes $Name } close $F } #Espionne "[set Tab($Name,Acc)] [set Tab($Name,Def)] [set Tab($Name,Oligo)] " #Espionne "$LesSpikes" foreach Spike $LesSpikes { set Access [set Tab($Spike,Acc)] set option "-view FastaSeqs" #On utilise le champs ugi dans Uniseq pour obtenir l Id Unigene set Commande "getz $option \"\\\[genbank-all: $Access\\\]\"" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {continue} if { $GetzOut == ""} {Espionne "$Spike $Access pb";continue} Espionne "$GetzOut" AppendAuFichier "$RepSpike/$Spike" "$GetzOut" } return "" } proc RecupSequences {Path} { set FichierDeMapping [open "$Path.coord" "r"] set FichierDeSequence [open "$Path.seq" "w"] while { [gets $FichierDeMapping Ligne] >=0 } { #ScanLaListe $Ligne ID Chromosome Start End Gene DebutGene FinGene Brin dTSS ExOuIn CDSouPas UtrOuCDS DebutExOuIn FinExOuIn BorneProche DaLaBorne Pourcentage ScanLaListe $Ligne ID Chromosome Start End Brin Rechromosome ChromosomeSouris StartW EndW SensW SeqH SeqS StartM EndM Conserve Completetude Gaps Score set Sequence [BoutADNDeUcscBoost $Start $End "Brin" "Human" $Chromosome "bigZips200603" ] set Reverse [NucToReverseAndComplementNuc $Sequence] puts $FichierDeSequence "$Sequence $Reverse $Ligne" } } proc RecupUneColonne {Rep} { #Recupere une colonne dans un fichier "tableau2D") set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RecupUneColonne : Start" set FichierIn [open "$Rep/EpouvanBlast.csv" "r"] set FichierOut [open "$Rep/EpouvanBlast.XPacc" "w"] while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne DB numero NP XP Expect Identities IndetityPercentage Positive PositivePercentage Score Gaps GapsPercentage DebutQuery FinQuery DebutTarget FinTarget" puts $FichierOut $XP } close $FichierIn close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RecupUneColonne : End" } proc RecupaStaf {} { # Déclaration des fichiers set FichierDes230000 [open "/tmp/Conservation/localisations_samedi.txt" "r"] set FichierDesID [open "/tmp/Conservation/IdDesProximitesa2000.txt" "r"] set FichierDesSequencesRecuperees "/tmp/Conservation/SequencesDesSbsAProximite2000.txt" # Suppressions des éventuelles versions précédentes des fichiers if { [file exists $FichierDesSequencesRecuperees] } { file delete $FichierDesSequencesRecuperees } while { [gets $FichierDesID LigneID] >=0 } { lappend ListeDesID $LigneID } while { [gets $FichierDes230000 Ligne] >=0 } { ScanLaListe $Ligne ID Chro Start End Ori Sequence set StafID "Staf$ID" foreach Heidi $ListeDesID { if { $Heidi == $StafID } { AppendAuFichier $FichierDesSequencesRecuperees "$Ligne" continue } } } } proc RecuperationGDBSelonMIM {} { package require tdom set Fichier1 "/groupes/poch/moumou/ordali/MIMmyo.txt" set Fichier2 "/groupes/poch/moumou/ordali/ListeMimGDB.fof" set Fichier3 "GDBImpliquesDansMyopathie" set LLignesMIM [LesLignesDuFichier $Fichier1] set LLignesGDB [LesLignesDuFichier $Fichier2] set File3 [open $Fichier3 w] set Lgbd "" foreach l $LLignesGDB { set lnew [split $l \t] set GDB [lindex $lnew 0] set MIM [lindex $lnew 1] set i [lsearch -exact $LLignesMIM $MIM] if {$i != -1} { lappend Lgdb $GDB } } set LgdbNew [lsort -unique $Lgdb] foreach l $LgdbNew { puts $File3 $l } close $File3 return } proc RecuperationMIM {} { package require tdom set Fichier1 "/groupes/poch/moumou/ordali/myo.txt" set Fichier2 "MIMmyo.txt" set LLignes [LesLignesDuFichier $Fichier1] set File2 [open $Fichier2 w] foreach l $LLignes { set j [string first ":" $l] if {[regexp {^[0-9]} $l] && $j != -1 } { set lnew [string range $l [expr $j+1] end] set MIM [string trim $lnew] if {[regexp {\#} $MIM]} { set MIM [string trim $MIM "\#"] } if {[regexp {\%} $MIM]} { set MIM [string trim $MIM "\%"] } if {[regexp {\*} $MIM]} { set MIM [string trim $MIM "\*"] } if {[regexp {\+} $MIM]} { set MIM [string trim $MIM "\+"] } puts $File2 $MIM } } close $File2 return } proc Recupere {Canal} { global LiaisonCoupee RecuperationEffectuee if {! [eof $Canal]} {gets $Canal Reponse} set iturlu [string first "TURLU" $Reponse] if {$iturlu != -1} { incr iturlu -1 set Reponse [string range $Reponse 0 $iturlu] set RecuperationEffectuee 1 } AuLog "$Reponse" if {[PlusDeRasMol]} { set RecuperationEffectuee 1 set LiaisonCoupee 1 close $Canal } return } proc RecupereAccProtPourLesVides {} { set normal 0; set pasnormal 0; set retrouve 0; set lesnp 0; set lesucsc 0 set FichierProtVide "/genomics/link/EVI3/LesProtVides" set FichierPauvre "/genomics/link/EVI3/LesLignesPauvres" foreach Ligne [LesLignesDuFichier $FichierProtVide] { set onatrouve 0 set Texte "" if {[regexp {^nombre} $Ligne]} {continue} if {$Ligne==""} {continue} scan $Ligne "%s %s" bidon Nom set LesMorceaux [split $Nom "_"] set VraiNomevi [lindex $LesMorceaux 0] #Espionne $VraiNomevi set Nomevi [string range $VraiNomevi 0 end-1] set LesLignes [LesLignesDuFichier $FichierPauvre] set premiereligne [lindex $LesLignes 0] set LesMots [LesMotsDeLaLigne $premiereligne] foreach Mot $LesMots { if {[string length $Mot]==4} { set NvMot "EVI$Mot" } if {[string length $Mot]==3} { set NvMot "EVI0$Mot" } if {[string length $Mot]==2} { set NvMot "EVI00$Mot" } if {[string length $Mot]==1} { set NvMot "EVI000$Mot" } if {$NvMot==$Nomevi} { set onatrouve 1 } } if {$onatrouve} { incr normal } if {!$onatrouve} { incr pasnormal Espionne "$VraiNomevi" set Acc [AccessEvi $VraiNomevi] Espionne "$Acc" if { [regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc]} { set Commande "getz \"\\\[refseq-acc:$Acc\\\] > \\\[refseqp-org:Mus musculus\\\]\" \-vf acc" set Texte [eval exec $Commande] } if {$Texte!=""} { incr lesnp Espionne "$VraiNomevi super" Espionne $Texte set LesMots2 [split $Texte ":\t "] set AccProt [lindex $LesMots2 1] Espionne "AccProt $AccProt" set Commande2 "getz \"\\\[refseqp-acc:$AccProt\\\]\" \-e" set Fiche [eval exec $Commande2] #set LesLignesEmbl [LaSequenceDesBanques $AccProt "OnVeutNature"] Espionne $Fiche Sauve $Fiche dans "[RepertoireDuGenome]/protemblRecupere/$VraiNomevi" } if {$Texte==""} { set ProtId [LocUcsc $Acc proteinID] if {$ProtId!=""} { incr lesucsc Espionne "ProtId $ProtId" set LesLignesEmbl [LaSequenceDesBanques $ProtId] SauveLesLignes $LesLignesEmbl dans "[RepertoireDuGenome]/protemblRecupere/$VraiNomevi" } } } } Espionne "normal $normal" Espionne "pasnormal $pasnormal" Espionne "lesnp $lesnp" Espionne "lesucsc $lesucsc" } proc RecupereAccProtWolfgang {Nom} { set Repertoirelur "/genomics/link/lur" set F "$Repertoirelur/prottfa/$Nom" set LesLignes [LesLignesDuFichier $F] set premiereligne [lindex $LesLignes 0] set AccProt [StringApres "PROTEIN" dans $premiereligne] #Espionne "$F $AccProt" #lappend LesAccProt $AccProt return $AccProt } proc RecupereAdnc {Nom} { set InfoADNc [ExtraitInfo $Nom "BanqueADNc"] set LesInfoFinalADNc {} if {$InfoADNc==""} {set InfoFinalADNc "no sequence"} if {[regexp "a refaire" $InfoADNc]} {set InfoFinalADNc "a refaire"} if {[regexp "No" $InfoADNc]} {set InfoFinalADNc "no cDNA"} if {[regexp "Yes" $InfoADNc]} { set LesElmts [split $InfoADNc " "] foreach IdGscope $LesElmts { set type "" if {$IdGscope=="Yes"} {continue} set type [RecupereTypeDescDNA $IdGscope Type] if {$type=="CO"} { set nbcdna ""; set nbcdnaComplet ""; set atgCo ""; set atgCoComplet ""; set posatgCo ""; set posatgCoComplet "" set nbcdna [RecupereInfoDescDNACO $IdGscope nbcdna] set nbcdnaComplet "number:$nbcdna" set atgCo [RecupereInfoDescDNACO $IdGscope atg] set atgCoComplet "ATG:$atgCo" if {$atgCo=="yes"} { set posatgCo [RecupereInfoDescDNACO $IdGscope posatg] set posatgCoComplet "ATGpos:$posatgCo" } set LesADNc [RecupereInfoDescDNACO $IdGscope IdGenos] set ADNc [join $LesADNc " "] lappend LesInfoFinalADNc "$IdGscope $type $nbcdnaComplet ($ADNc) $atgCoComplet $posatgCoComplet" } if {$type=="SI"} { set IdGenos ""; set atgSi ""; set atgSiComplet "";set posatgSi ""; set posatgSiComplet "" set IdGenos [RecupereInfoDescDNASI $IdGscope IdGenos] set atgSi [RecupereInfoDescDNASI $IdGscope atg] set atgSiComplet "ATG:$atgSi" if {$atgSi=="yes"} { set posatgSi [RecupereInfoDescDNASI $IdGscope posatg] set posatgSiComplet "ATGpos:$posatgSi" } lappend LesInfoFinalADNc "$IdGscope $type $IdGenos $atgSiComplet $posatgSiComplet" } } set InfoFinalADNc [join $LesInfoFinalADNc ", "] } return $InfoFinalADNc } proc RecupereAliasGn {LesLignes} { set LesAlias {} set onestentre 0 foreach Ligne $LesLignes { if {$onestentre} { set onestentre 0 set DeuxiemePartie [string trim [string range $Ligne 0 end-1]] if {$DeuxiemePartie!=""} { set LesDeuxParties "$PremierePartie $DeuxiemePartie" lappend LesAlias $LesDeuxParties } if {$DeuxiemePartie==""} {lappend LesAlias $PremierePartie} } if {[regexp {synonym} $Ligne]} { set index [string first "\"" $Ligne] if {[string first "\"" $Ligne [expr $index +1]]==-1} { set PremierePartie [string range $Ligne [expr [string first ":" $Ligne] + 2] end] set onestentre 1 } else { lappend LesAlias [string range $Ligne [expr [string first ":" $Ligne] + 2] [expr [string first "\"" $Ligne [expr $index +1]] -1]] } } } set InfoAlias [join $LesAlias " "] set InfoAlias [string trim $InfoAlias] return $InfoAlias } proc RecupereCallGCRma {Nom} { set false 0; set true 0; set LesCallcgrma {}; set LesProbesSet {} set ProbesSet [ExtraitInfo $Nom "ProbeSetId"] if {$ProbesSet=="no value" || $ProbesSet==""} { set Callcgrma "no value" } else { set LesProbesSet [split $ProbesSet ","] foreach Ps $LesProbesSet { set Ligne {} #set Calldchip100 [PsSsExpCongrd1dChip100 $Ps Call] set CallcgrmaPs [TrouveLesJamaisExprimes $Ps OuiNon] lappend LesCallcgrma $CallcgrmaPs if {$CallcgrmaPs=="FALSE"} {incr false} if {$CallcgrmaPs=="TRUE"} {incr true} } set LesCallcgrma [ListeSsElmtVide $LesCallcgrma] if {$true=="0" && $false=="0" && $LesCallcgrma== {} } { set Callcgrma "no value" } elseif {$true==$false} { set Callcgrma "nbNO=nbYES" } elseif {$true=="0"} { set Callcgrma "NO" } elseif {$false=="0"} { set Callcgrma "YES" } elseif {$true<$false} { set nbcallF [expr $true + $false] set pourcentagedefaulse [expr ($false*100)/$nbcallF] set Callcgrma "NO $pourcentagedefaulse %" } elseif {$true>$false} { set nbcallT [expr $true + $false] set pourcentagedetrue [expr ($true*100)/$nbcallT] set Callcgrma "YES $pourcentagedetrue %" } } return $Callcgrma } proc RecupereControldeMGU74 {} { set version "na32" set FichierMGU74A "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Av2.$version.annot.csv" set FichierMGU74B "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Bv2.$version.annot.csv" set FichierMGU74C "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Cv2.$version.annot.csv" set LesFichiers [list $FichierMGU74A $FichierMGU74B $FichierMGU74C] foreach File $LesFichiers { Espionne "$File" set i 0 set LesLignes [TabulonsSansQuote $File "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { if {[regexp "^#" $Ligne]} {continue} if {[regexp "^Probe" $Ligne]} {continue} set Elmt [split $Ligne ";"] set Probesetid [lindex $Elmt 0] set type [lindex $Elmt 4] if {$type=="Control sequence"} { incr i lappend LesControl $Probesetid if {[info exists DejaVu($Probesetid)]} { incr DejaVu($Probesetid) } else { set DejaVu($Probesetid) 1 } } } Espionne "$i" } set LesControl [ListeSansDoublon $LesControl] EspionneL "$LesControl" set j 0 foreach Clef [array names DejaVu] { incr j Espionne "$Clef $DejaVu($Clef)" } Espionne "j $j" } proc RecupereDesNP {LesLignes} { set LesDes {} set onestentre 0 foreach Ligne $LesLignes { if {$onestentre} { set onestentre 0 set DeuxiemePartie [string trim [string range $Ligne 0 end]] if {$DeuxiemePartie!=""} { set LesDeuxParties "$PremierePartie $DeuxiemePartie" lappend LesDes $LesDeuxParties } if {$DeuxiemePartie==""} {lappend LesDes $PremierePartie} } if {[regexp {DEFINITION } $Ligne]} { if {[string first "." $Ligne]==-1} { set PremierePartie [string range $Ligne 12 end] set onestentre 1 } else { lappend LesDes [string range $Ligne 12 end] } } } set InfoDes [join $LesDes ", "] return $InfoDes } proc RecupereDescriptionProt {LesLignes} { set LigneDe [lindex $LesLignes [lsearch -regexp $LesLignes "DE"]] set InfoDe [string range $LigneDe 5 end] return $InfoDe } proc RecupereDescriptionRecommandeUniprot {description} { foreach {regMatch category subcategories} [regexp -all -inline {(RecName|SubName):(.+?)(?=RecName|AltName|SubName|$)} $description] { foreach {regMatch subcategory de} [regexp -all -inline {(\w+)=([^;]+)} $subcategories] { if {$subcategory eq "Full" && ![info exists $category]} { set $category $de break } } } if {[info exists RecName]} { set description $RecName } elseif {[info exists SubName]} { set description $SubName } return [string trimright $description "."] } proc RecupereDomainDansPDB {CodeGscope IdPdb debDom finDom} { set PositionAtom {} Espionne "dans recupere!!!!!" Espionne "dans recupereDomainDansPDB -> $CodeGscope; $IdPdb; $debDom; $finDom" if {![file exists "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope/PDBFile"]} { File mkdir "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope/PDBFile" } set fichierPDB "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope/PDBFile/$IdPdb" if {[regexp {PDB:} $IdPdb]} { regsub {:} $IdPdb "_" IdPdb } set nom [DonneIdDeAccessPDB $IdPdb] set lignes [RecupereUnFichierSurWeb $nom] foreach l $lignes { if {![regexp {^ATOM .*} $l]} { continue } regsub -all { +} $l " " l2 Espionne "::::l2: $l2" set l2 [split $l2 " "] set positionAtomPDB [lindex $l2 5] Espionne "------>l: $l" Espionne "positionAtomPDB: $positionAtomPDB" Espionne "debDom: $debDom; finDom: $finDom" if {$positionAtomPDB>=$debDom && $positionAtomPDB<=$finDom} { #ajoute dans la liste lappend PositionAtom $l } } SauveLesLignes $PositionAtom dans $fichierPDB } proc RecupereDonneesGlobales {t} { global LNOrdali global LNDG global ConsRef #Recupere le nombre de sequences set Nseq [llength $LNOrdali] #Recupere le nombre de groupes crees set Ngrp [expr [llength $LNDG] - 2] if {$Ngrp == 0} {set Ngrp 1} #Recupere le nombre d indentites globales set NIglb 0 if {[info exists ConsRef(IdenGlob)]} { set NIglb [llength [set ConsRef(IdenGlob)]] } #Recupere le nombre de conservations globales set NCglb 0 if {[info exists ConsRef(ConsGlob)]} { set NCglb [llength [set ConsRef(ConsGlob)]] } #Recupere le nombre de similarites globales set NSglb 0 if {[info exists ConsRef(SimiGlob)]} { set NSglb [llength [set ConsRef(SimiGlob)]] } foreach t [ReordonneTypeCons "plein"] { set res {} if {[info exists ConsRef($t)]} { set res [set ConsRef($t)] } lappend Ngrx [list $t $res] } return [list $Nseq $Ngrp $NIglb $NCglb $NSglb $Ngrx] } proc RecupereGeneNameAliasProt {LesLignes} { set LigneGn [lindex $LesLignes [lsearch -regexp $LesLignes "GN.*Name="]] set index [expr [string first "=" $LigneGn] + 1] if {[string first "=" $LigneGn $index]==-1} {return ""} set InfoGn [string range $LigneGn [expr [string first "=" $LigneGn] + 1] [expr [string first ";" $LigneGn] - 1]] set InfoAlias [string range $LigneGn [expr [string first "=" $LigneGn $index] + 1] end-1] regsub -all ", " $InfoAlias " " InfoAlias regsub -all "," $InfoAlias " " InfoAlias while {[regexp " " $InfoAlias]} { regsub -all " " $InfoAlias " " InfoAlias } return $InfoAlias } proc RecupereGeneNameNP {LesLignes} { set LigneGnNp [lindex $LesLignes [lsearch -regexp $LesLignes "/gene="]] set InfoGnNp [string range $LigneGnNp [expr [string first "=" $LigneGnNp] + 2] end-1] return $InfoGnNp } proc RecupereGeneNameProt {LesLignes} { set LigneGn [lindex $LesLignes [lsearch -regexp $LesLignes "GN.*Name="]] set InfoGn [string range $LigneGn [expr [string first "=" $LigneGn] + 1] [expr [string first ";" $LigneGn] - 1]] return "$InfoGn" } proc RecupereGoDeNm {LesLignes Quoi} { #Quoi= Comp ou Func ou Proc set LesGo {} set onestentre 0 foreach Ligne $LesLignes { if {$onestentre} { set onestentre 0 set DeuxiemePartie [string trim [string range $Ligne 0 [expr [string first "\[" $Ligne] - 2]]] if {$DeuxiemePartie!=""} { set LesDeuxParties "$PremierePartie $DeuxiemePartie" lappend LesGo $LesDeuxParties } if {$DeuxiemePartie==""} {lappend LesGo $PremierePartie} } if {($Quoi=="Comp" && [regexp {/go_component} $Ligne]) || ($Quoi=="Func" && [regexp {/go_function} $Ligne]) || ($Quoi=="Proc" && [regexp {/go_process} $Ligne])} { if {[string first "\[" $Ligne]==-1} { set PremierePartie [string range $Ligne [expr [string first "=" $Ligne] + 2] end] set onestentre 1 } else { lappend LesGo [string range $Ligne [expr [string first "=" $Ligne] + 2] [expr [string first "\[" $Ligne]-2]] } } } set InfoGo [join $LesGo ", "] return $InfoGo } proc RecupereGoNp {LesLignes Quoi} { #Quoi component ou function ou process set LesGo {}; set LesC {}; set LesF {}; set LesP {} set onestentre 0 foreach Ligne $LesLignes { if {$onestentre} { set onestentre 0 set DeuxiemePartie [string trim [string range $Ligne 0 [string first "]" $Ligne]]] if {$DeuxiemePartie!=""} { set LaLigneComplete "$PremierePartie $DeuxiemePartie" lappend LesGo $LaLigneComplete } if {$DeuxiemePartie==""} { set LaLigneComplete $PremierePartie lappend LesGo $LaLigneComplete } } if {[regexp {/go_} $Ligne]} { if {[string first "\]" $Ligne]==-1} { set PremierePartie $Ligne set onestentre 1 } else { set LaLigneComplete $Ligne lappend LesGo $LaLigneComplete } } } foreach Go $LesGo { set LesMots [split $Go "_=\"\[\]"] set ChampDesGo [lindex $LesMots 1] set ChampDesGo [string trim $ChampDesGo] set DesGo [lindex $LesMots 3] set DesGo [string trim $DesGo] set NumGo [lindex $LesMots 4] set NumGo [string trim $NumGo] regsub "goid " $NumGo "" NumGo set LigneFinale "$DesGo $NumGo" if {$ChampDesGo=="component"} {lappend LesC $LigneFinale} if {$ChampDesGo=="function"} {lappend LesF $LigneFinale} if {$ChampDesGo=="process"} {lappend LesP $LigneFinale} } if {$Quoi=="component"} {set InfoGo [join $LesC ", "]} if {$Quoi=="function"} {set InfoGo [join $LesF ", "]} if {$Quoi=="process"} {set InfoGo [join $LesP ", "]} return $InfoGo } proc RecupereGoProt {LesLignes Quoi} { #Quoi C ou F ou P set LesC {}; set LesF {}; set LesP {} foreach Ligne $LesLignes { if {[regexp {^DR.*GO;} $Ligne]} { set LesMots [split $Ligne ";"] set numGo [lindex $LesMots 1] set numGo [string trim $numGo] set ChampDesGo [lindex $LesMots 2] set ChampDesGo [string trim $ChampDesGo] set LesMotsDesGo [split $ChampDesGo ":"] set ChampGo [lindex $LesMotsDesGo 0] set DesGo [lindex $LesMotsDesGo 1] set LigneFin "$DesGo $numGo" if {$ChampGo=="C"} {lappend LesC $LigneFin} if {$ChampGo=="F"} {lappend LesF $LigneFin} if {$ChampGo=="P"} {lappend LesP $LigneFin} } } if {$Quoi=="C"} {set InfoGo [join $LesC ", "]} if {$Quoi=="F"} {set InfoGo [join $LesF ", "]} if {$Quoi=="P"} {set InfoGo [join $LesP ", "]} return $InfoGo } proc RecupereIdentifiantHumain {} { CanalSqlString #set Fichier "/genomics/link/Tau/GSTRdCVF/BlastpSurStringHomme/9606" set Fichier "/genomics/link/Tau/GSTControl/BlastpSurStringHomme/9606" #set Fichier "/genomics/link/Tau/Dec2008/GSTControl/BlastpSurStringHomme/9606" foreach Ligne [LesLignesDuFichier $Fichier] { set IdString [lindex [split $Ligne " "] 0] set LesEnsembl [IdentifiantDunIdString $IdString] if {[llength $LesEnsembl]>1} {Espionne "pb avec $Ligne"} set Ligne [lindex $LesEnsembl 0] lappend LesLignes $Ligne } #SauveLesLignes $LesLignes dans "/genomics/link/Tau/enrichismt/LesIdsHumaines" SauveLesLignes $LesLignes dans "/genomics/link/Tau/enrichismt/ControlLesIdsHumaines" #SauveLesLignes $LesLignes dans "/genomics/link/Tau/Dec2008/GSTControl/ControlLesIdsHumaines" CanalSqlDisconnect } proc RecupereInfoDescDNACO {{Qui ""} {Quoi ""}} { global RecupereInfoDescDNACO set Fichier "/genomics/link/SuperSouris/fiches/LesATGs" if {[info exists RecupereInfoDescDNACO($Qui,$Quoi)]} { return $RecupereInfoDescDNACO($Qui,$Quoi) } if {[info exists RecupereInfoDescDNACO("EstCharge")]} { return "" } set RecupereInfoDescDNACO("EstCharge") 1 foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne == ""} {continue} if {[regexp {^CO} $Ligne]} { scan $Ligne "%s %s %s %s %s %s" Type IdGscope bidon infonb infoatg posatg set LesElmtsNb [split $infonb ":"] set nbcdna [lindex $LesElmtsNb 1] set LesElmtsATG [split $infoatg ":"] set atg [lindex $LesElmtsATG 1] regsub -all {\[} $posatg "" posatg regsub -all {\]} $posatg "" posatg lappend RecupereInfoDescDNACO(ListOf,IdGscope) $IdGscope set RecupereInfoDescDNACO($IdGscope,Type) $Type set RecupereInfoDescDNACO($IdGscope,nbcdna) $nbcdna set RecupereInfoDescDNACO($IdGscope,atg) $atg set RecupereInfoDescDNACO($IdGscope,posatg) $posatg } if {[regexp {^\tRD} $Ligne]} { scan $Ligne "%s %s %s %s %s" bidon IdGenos sens infoatg posatg set LesElmtsATG [split $infoatg ":"] set atg [lindex $LesElmtsATG 1] regsub -all {\[} $posatg "" posatg regsub -all {\]} $posatg "" posatg lappend RecupereInfoDescDNACO($IdGscope,IdGenos) $IdGenos set RecupereInfoDescDNACO($IdGenos,sens) $sens set RecupereInfoDescDNACO($IdGenos,atg) $atg set RecupereInfoDescDNACO($IdGenos,posatg) $posatg } } return [RecupereInfoDescDNACO $Qui $Quoi] } proc RecupereInfoDescDNASI {{Qui ""} {Quoi ""}} { global RecupereInfoDescDNASI set Fichier "/genomics/link/SuperSouris/fiches/LesATGs" if {[info exists RecupereInfoDescDNASI($Qui,$Quoi)]} { return $RecupereInfoDescDNASI($Qui,$Quoi) } if {[info exists RecupereInfoDescDNASI("EstCharge")]} { return "" } set RecupereInfoDescDNASI("EstCharge") 1 foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {^SI} $Ligne]} { scan $Ligne "%s %s %s %s %s" Type IdGscope IdGenos infoatg posatg set LesElmtsATG [split $infoatg ":"] set atg [lindex $LesElmtsATG 1] regsub -all {\[} $posatg "" posatg regsub -all {\]} $posatg "" posatg lappend RecupereInfoDescDNASI(ListOf,IdGscope) $IdGscope set RecupereInfoDescDNASI($IdGscope,Type) $Type set RecupereInfoDescDNASI($IdGscope,IdGenos) $IdGenos set RecupereInfoDescDNASI($IdGscope,atg) $atg set RecupereInfoDescDNASI($IdGscope,posatg) $posatg } } return [RecupereInfoDescDNASI $Qui $Quoi] } proc RecupereItemDuGDB {Lnds item id} { set Lns "" set Val "" foreach e $Lnds { set nom [$e selectNodes string(.)] # si un des nom de noeud contient Protein ... if {! [regexp $item $nom]} {continue} switch $item { "Protein Sequence Links" { set Lns [$e selectNodes ./../../../*/*/a|./../../../*/a|./../../../a] set id2 "!key=XXXX\&!shortDetail=1\&!sub=0\&_expand=proteinSequenceLink#proteinSequenceLink" } "Phenotype Links" { set Lns [$e selectNodes ./../../../*/*/a|./../../../*/a] } } foreach s $Lns { set seqname [$s selectNodes string()] regsub -all {[\{\}]} $seqname "" seqname lappend lseqname $seqname } set len [llength $lseqname] # liste commence par un titre, type Protein Sequence Links # si pas de 2nd argument, on sort de la procedure if {$len <= 1} {return} # on verifie que la liste est bien sur cette page web set k [lsearch -regexp $lseqname "Show All"] if {$k != -1} { regsub "XXXX" $id2 $id newid TraiteUnGDB $newid } switch $item { "Protein Sequence Links" { set Val [TraiteProtSeqLink $lseqname] } "Phenotype Links" { set Val [TraitePhenoLink $lseqname] puts "val : $Val" } } } return $Val } proc RecupereLeCodeGscope {} { set Fichier "/genomics/link/HeadNecknonrnr/pourgscope_FromRegine_mbs" set NouveauF "/genomics/link/HeadNecknonrnr/pourgscope_FromRegine_mbs_gscopecode" #set C [ContenuDuFichier $Fichier] foreach Ligne [LesLignesDuFichier $Fichier] { set CC [lindex $Ligne 0] set GscopeCode [GscopeCode $CC] AppendAuFichier $NouveauF "$CC\t$GscopeCode" } } proc RecupereLesProches {SeuilIdentiteInitial Org} { #######attention #avt: le seuil d'identite etait calcule sur l'alignement local #now: le seuil d'identite est calcule sur l'alignement global par rapport a la seq query (=> le seuil doit etre inf a 85% sinon trouve rien) #query_group_old recupere le cluster de seq contenant notre query ou chaque seq a au moins x (cutoff) % d'ident avec une sequence du cluster #query_group recupere le cluster de seq contenant notre query ou chaque seq a au moins x (cutoff) % d'ident avec notre query #arguments de query_group: alignement(macsim en xml), la query, le cutoff du % d'ident,et le output #Org peut etre Mouse Rat #VIDER LE PASTOUCHE AVANT set RepertoireSortie "[RepertoireDuGenome]/ProchesQuery$SeuilIdentiteInitial" if {! [file exists $RepertoireSortie]} {file mkdir $RepertoireSortie} foreach PAB [ListeDesPABs] { if {[file exists "$RepertoireSortie/$PAB.proches"]} { continue } if {[PasTouche $PAB]} { continue } set LesNamesProches {} set FileMacsims "[RepertoireDuGenome]/macsimXml/$PAB.org" if {![file exists $FileMacsims]} { continue } set Cluster [ExtraitInfo $PAB "Cluster"] set Ref [ExtraitInfo $PAB "Ref"] set LesNames [InterrogeNames $Cluster Name $Org] foreach Name $LesNames { set SeuilIdentite $SeuilIdentiteInitial if {$Name==$Ref} {set Name $PAB} set FileOut "$RepertoireSortie/$Name.proches" set SeqSsGap [FromMacsims $FileMacsims $Name SeqDataSansGap] set LongSeq [string length $SeqSsGap] if {$LongSeq<120} {set SeuilIdentite [expr $SeuilIdentite -5]} set Commande "/biolo/macsim/query_group $FileMacsims $Name $SeuilIdentite $FileOut" eval exec $Commande foreach Ligne [LesLignesDuFichier $FileOut] { if {[regexp "" $Ligne]} { set NameProche [string range $Ligne [expr [string first ">" $Ligne] +1] [expr [string last "<" $Ligne] -1]] lappend LesNamesProches $NameProche } } file delete $FileOut } set LesNamesProches [ListeSansDoublon $LesNamesProches] if {$Org=="Mouse"} { set LesNamesProches [lsort -decreasing -command TrienomMouse $LesNamesProches] } if {$Org=="Rat"} { set LesNamesProches [lsort -decreasing -command TrienomRat $LesNamesProches] } SauveLesLignes $LesNamesProches dans "$RepertoireSortie/$PAB.proches" } } proc RecupereLesVieuxP {} { FaireLire "obsolete" foreach P [LesLignesDuFichier lili] { if {$P==""} { continue } set N [RepertoireDuGenome]/oligos/$P.tfa set V [RepertoireDuGenome]/oligos.20060608/$P.tfa Espionne [ContenuDuFichier $N] Espionne [ContenuDuFichier $V] Sauve [ContenuDuFichier $V] dans $N } exit } proc RecupereLesVraisEmbls {} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/original_description"] { regsub -all {[\:\|]} $Ligne " " Ligne scan $Ligne "%s %s %s %s %s" PAB b c d Access set AccessDuEmbl($PAB) $Access } foreach Nom [ListeDesPABs] { Espionne $Nom set Narcisse [Narcisse $Nom] set Access [set AccessDuEmbl($Nom)] if { ! [string equal -nocase $Narcisse $Access]} { Espionne "$Nom $Narcisse $Access" } set Embl [join [LaSequenceDesBanques $Access $Access a "OnVeutEMBL"] "\n"] if {$Embl==""} { Espionne "$Access introuvable" ; continue } set Tfa [SequenceFormatTFA $Embl $Access "embl"] set SaSeq [QueLaSequenceDuTexteTFA $Tfa] set MaSeq [QueLaSequenceDuTFA "[RepertoireDuGenome]/prottfa/$Nom"] if {$MaSeq!=$SaSeq} { Espionne "$Nom\n$MaSeq\n$SaSeq" } Sauve $Embl dans "[RepertoireDuGenome]/protemblnew/$Nom" } exit } proc RecupereNmPrIngenuity {{Liste ""}} { set nbnm 0; set nbgb 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { Espionne "$Nom" set Acc [AccessEvi $Nom] if { [regexp {^NM_} $Acc] || [regexp {^XM_} $Acc] || [regexp {^NR_} $Acc]} { incr nbnm set LigneNm "$Acc" set LigneNmAcEvi "$Acc $Nom" lappend LesLignesNm $LigneNm lappend LesLignesNmAcEvi $LigneNmAcEvi } if { ! [regexp {^NM_} $Acc] && ! [regexp {^XM_} $Acc] && ! [regexp {^NR_} $Acc]} { if {$Acc=="" || $Acc=="no value"} {continue} incr nbgb set LigneGb "$Acc" set LigneGbAcEvi "$Acc $Nom" lappend LesLignesGb $LigneGb lappend LesLignesGbAcEvi $LigneGbAcEvi } } puts "nbnm $nbnm" puts "nbgb $nbgb" SauveLesLignes $LesLignesNm dans "[RepertoireDuGenome]/ListeIngenuityNm.xls" SauveLesLignes $LesLignesNmAcEvi dans "[RepertoireDuGenome]/ListeIngenuityNmAcEvi" SauveLesLignes $LesLignesGb dans "[RepertoireDuGenome]/ListeIngenuityGb.xls" SauveLesLignes $LesLignesGbAcEvi dans "[RepertoireDuGenome]/ListeIngenuityGbAcEvi" } proc RecupereOmimDeNm {LesLignes} { lappend LesLignesOmim [lindex $LesLignes [lsearch -regexp $LesLignes "/db_xref=\"MIM:"]] foreach LigneOmim $LesLignesOmim { set UneInfoOmim [string range $LigneOmim [expr [string first ":" $LigneOmim] + 1] end-1] regsub -all " " $UneInfoOmim "" UneInfoOmim lappend LesInfosOmim $UneInfoOmim } set LesInfosOmim [ListeSansDoublon $LesInfosOmim] set InfoOmim [join $LesInfosOmim ", "] return $InfoOmim } proc RecupereOrganisme {Nom} { set Espece "" set Repertoirelur "/genomics/link/lur" set F "$Repertoirelur/prottfa/$Nom" set LesLignes [LesLignesDuFichier $F] set premiereligne [lindex $LesLignes 0] Espionne "$premiereligne" if {[regexp "from mRNA" $premiereligne]} { set index [string first "from" $premiereligne [expr [string first "from" $premiereligne] +2]] set Espece [string range $premiereligne [expr $index +5] [expr $index +15]] return $Espece } else { set index [string first "from" $premiereligne] set Espece [string range $premiereligne [expr $index+5] [expr $index +15]] return $Espece } } proc RecuperePathway {Nom} { set ResultIntermediarePathway {}; set ResultPathway "" set LesPathway [ExtraitInfo $Nom "Pathways"] if {$LesPathway==""} { set ResultPathway "no pathway" } else { set ListePathway [split $LesPathway ","] foreach Pathway $ListePathway { set LesGnsDunPathway {}; set long ""; set LesCopsPath {} set LesCopsPath [LesCopainsDePathway $Pathway] foreach Boite $LesCopsPath { set GeneName [ExtraitInfo $Boite "ValiGN"] lappend LesGnsDunPathway $GeneName } set LesGnsDunPathway [ListeSsElmtVide $LesGnsDunPathway] set LesGnsDunPathway [ListeSansDoublon $LesGnsDunPathway] set long [llength $LesGnsDunPathway] lappend ResultIntermediarePathway "$Pathway ($long)" } set ResultPathway [join $ResultIntermediarePathway ", "] } return $ResultPathway } proc RecuperePfamProt {LesLignes} { set LesPfam {} foreach Ligne $LesLignes { if {[regexp {^DR.*Pfam;} $Ligne]} { set LesMots [split $Ligne ";"] set IdPfam [lindex $LesMots 1] set IdPfam [string trim $IdPfam] set NomPfam [lindex $LesMots 2] set NomPfam [string trim $NomPfam] set LigneFin "$IdPfam $NomPfam" lappend LesPfam $LigneFin } } set InfoPfam [join $LesPfam ", "] return $InfoPfam } proc RecuperePourPyMol {Canal} { global RecuperationEffectuee flush stdout set Reponse [read $Canal] AuLog "recu $Reponse" if {[regexp "TURLUTUTU" $Reponse]} { set RecuperationEffectuee 1 } return } proc RecupereProtParknownGene {} { set FichierRequete "[Fiches]/requeteKG.bql" set FichierSortie "[Fiches]/sortiebirdKG.txt" foreach Nom [ListeDesPABs] { set AccProt [ExtraitInfo $Nom "AccessProt:"] Espionne "AccProt $AccProt" lappend LesLignes "ID * DB UCSC" lappend LesLignes "WH SQLNATIVE select chrom, txStart, txEnd, strand, proteinID from ucschuman.knownGene where proteinID='$AccProt'" lappend LesLignes "FM FLAT" lappend LesLignes "//" } SauveLesLignes $LesLignes dans $FichierRequete BirdForceHoan $FichierRequete "star4" $FichierSortie } proc RecupereProtParpureGene {} { set FichierRequete "[Fiches]/requetePG.bql" set FichierSortie "[Fiches]/sortiebirdPG.txt" foreach Nom [ListeDesPABs] { set AccProt [ExtraitInfo $Nom "AccessProt:"] Espionne "AccProt $AccProt" lappend LesLignes "ID * DB UCSC" lappend LesLignes "WH SQLNATIVE select chrom, txStart, txEnd, strand, spID from ucschuman.pureGene where spID='$AccProt'" lappend LesLignes "FM FLAT" lappend LesLignes "//" } SauveLesLignes $LesLignes dans $FichierRequete BirdForceHoan $FichierRequete "star4" $FichierSortie } proc RecupereR {} { set rep "" if {! [eof $::CnlR]} { gets $::CnlR rep } if {[string first "TURLU" $rep] != -1} { set ::ReponseR $::tmp_RepR set ::tmp_RepR {} } else { lappend ::tmp_RepR $rep } return } proc RecupereR_AEffacer {} { set rep "" if {! [eof $::CnlR]} { gets $::CnlR rep } if {[string first "TURLUTUTU" $rep] != -1} { set ::ReponseR $::tmp_RepR set ::tmp_RepR {} } else { lappend ::tmp_RepR $rep } return } proc RecupereR_old {} { global CnlR RecuperationEffectuee ReponseR ReponseR_prec set ReponseR_prec "" if {! [eof $CnlR]} { #gets $CnlR ReponseR_prec set ReponseR_prec [split [read -nonewline $CnlR] \n] } set ReponseR $ReponseR_prec return set iturlu [string first "TURLU" $ReponseR_prec] if {$iturlu != -1} { set RecuperationEffectuee 1 } else { lappend ReponseR $ReponseR_prec } #puts "==>$ReponseR" return } proc RecupereReference {} { global TableauCouleurEtGroupe global ConsRef global LNDG set LesVals [array get TableauCouleurEtGroupe] foreach {v b} $LesVals { set l [split $v ","] set r [lindex $l 0] set g [lindex $l 1] # augmente r car ali commence a 0 ! incr r lappend ConsRef($b) $r } if {! [info exists ConsRef(IdenGlob)]} {set ConsRef(IdenGlob) {} } if {! [info exists ConsRef(ConsGlob)]} {set ConsRef(ConsGlob) {} } if {! [info exists ConsRef(SimiGlob)]} {set ConsRef(SimiGlob) {} } VerifieNbrDeGroupes return } proc RecupereRegionNp {LesLignes} { set LesRegions {}; set LesRegionsbis {} set onestentre 0 foreach Ligne $LesLignes { if {$onestentre} { set onestentre 0 set DeuxiemePartie [string trim [string range $Ligne 0 end-1]] if {$DeuxiemePartie!=""} { set LesDeuxParties "$PremierePartie $DeuxiemePartie" lappend LesRegions $LesDeuxParties } if {$DeuxiemePartie==""} {lappend LesRegions $PremierePartie} } if {[regexp {/region_name=} $Ligne]} { set index [string first "\"" $Ligne] if {[string first "\"" $Ligne [expr $index +1]]==-1} { set PremierePartie [string range $Ligne [expr [string first "=" $Ligne] + 2] end] set onestentre 1 } else { lappend LesRegions [string range $Ligne [expr [string first "=" $Ligne] + 2] [expr [string first "\"" $Ligne [expr $index +1]] -1]] } } } foreach Region $LesRegions { if {[info exists DejaVu($Region)]} { incr DejaVu($Region) continue } set DejaVu($Region) 1 } foreach Clef [array names DejaVu] { set nbdefois $DejaVu($Clef) lappend LesRegionsbis "$Clef ($DejaVu($Clef))" } set InfoRegion [join $LesRegionsbis "/"] return $InfoRegion } proc RecupereRepRasMol {Canal} { global RecuperationEffectuee global LiaisonCoupee global ReponseRasmol set ReponseRasmol "" set LRep {} if {! [eof $Canal]} { after 100 flush $Canal set ReponseRasmol [read $Canal] } set LRep [split $ReponseRasmol "\n"] AtomePicke $LRep set RecuperationEffectuee 1 if {[eof $Canal]} { set RecuperationEffectuee 1 set LiaisonCoupee 1 close $Canal destroy .fcviewer flush stdout } return } proc RecupereSc {} { foreach Ligne [LesLignesDuFichier [Fiches]/lili] { set B [lindex [split $Ligne " "] end] set B "/home/bedez/junkdir/$B" regsub ".blastp$" $B "" F scan [ContenuDuFichier $F] "%s" Sc regsub ">" $Sc "" Sc if {[FileAbsent "[RepertoireDuGenome]/prottfaSc/$Sc"]} { file copy $F "[RepertoireDuGenome]/prottfaSc/$Sc" } if {[FileAbsent "[RepertoireDuGenome]/blastpScReciproc/$Sc"]} { file copy $B "[RepertoireDuGenome]/blastpScReciproc/$Sc" } } } proc RecupereSecStrDeFeature {pdbid} { global Sequences TabSF set Bpid [BonAccess $pdbid] set pid [DonneIdDeAccessPDB $Bpid] set chn [DonneChainDeAccessPDB $pdbid] global PDB_[set pid]_SecStr set seq [set Sequences($Bpid)] regsub -all {\.} $seq "" seq set nH 1 set nS 1 set nT 1 set SStmp {} foreach e [array names TabSF -regexp ",STRUCT"] { lassign [split $e ,] n f if {! [regexp -nocase $n $Bpid]} {continue} if {$f != "STRUCT"} {continue} foreach ft [set TabSF($e)] { DecortiqueUneFeature $ft dg fg col score note set lg [expr {$fg - $dg + 1}] set nrd [string index $seq $dg] set nrf [string index $seq $fg] set ss "pasbon" switch $note { "HELIX" { set ss "Helix Alpha $nH $chn $dg $nrd $fg $nrf $lg" incr nH } "STRAND" { set ss "Sheet 1 $nS $chn $dg $nrd $fg $nrf 1" incr nS } "TURN" { set ss "Turn XXX $nT $chn $dg $nrd $fg $nrf" incr nT } } if {$ss != "pasbon"} {lappend SStmp $ss} } } set PDB_[set pid]_SecStr($chn) [CombleSSParCoil $SStmp $pid $chn] return } proc RecupereSeq {} { set Fichier "/genomics/link/STRING_UP/FichierInitial/RefSeq_NPs_UP.txt" foreach Name [LesLignesDuFichier $Fichier] { if {$Name==""} {continue} set Commande "getz \"\\\[refseqp-acc:$Name\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut==""} { lappend LesManquants "$Name sstfaref" } else { foreach Ligne [split $GetzOut "\n"] {lappend LesLignesFinales $Ligne} } } SauveLesLignes $LesLignesFinales dans "/genomics/link/STRING_UP/FichierInitial/MultiTfaDW" SauveLesLignes $LesManquants dans "/genomics/link/STRING_UP/FichierInitial/LesSsTfa" } proc RecupereSynonyms {Nom {AvecGN ""} {JoinCar ""}} { set AvecGN [string equal -nocase $AvecGN "AvecGN"] if {$JoinCar==""} { set JoinCar "," } # if { ! [EstUnPAB $Nom]} { set Nom [NomDuGN $Nom] } set LesAlias {}; set alias "" set AliasRna [ExtraitInfo $Nom "AliasGnRna"] set AliasProt [ExtraitInfo $Nom "AliasGnProt"] set LesMotsRna [split $AliasRna " ,"] foreach MotRna $LesMotsRna { lappend LesAlias $MotRna } set LesMotsProt [split $AliasProt " ,"] foreach MotProt $LesMotsProt { lappend LesAlias $MotProt } set LesAlias [lsort -unique $LesAlias] if {$AvecGN} { set GN [ExtraitInfo $Nom "ValiGN:"] if {$GN != ""} { set LesAlias [linsert $LesAlias 0 $GN] } } set Synonyms [join $LesAlias $JoinCar] return $Synonyms } proc RecupereTissueTypeEtDevStage {LesLignes Quoi} { #Quoi= Tis Dev set LesEst {} set onestentre 0 foreach Ligne $LesLignes { if {$onestentre} { set onestentre 0 set DeuxiemePartie [string trim [string range $Ligne 0 end-1]] if {$DeuxiemePartie!=""} { set LesDeuxParties "$PremierePartie $DeuxiemePartie" lappend LesEst $LesDeuxParties } if {$DeuxiemePartie==""} {lappend LesEst $PremierePartie} } if {($Quoi=="Tis" && [regexp {/tissue_type} $Ligne]) || ($Quoi=="Dev" && [regexp {/dev_stage} $Ligne])} { set index [string first "\"" $Ligne] if {[string first "\"" $Ligne [expr $index +1]]==-1} { set PremierePartie [string range $Ligne [expr [string first "=" $Ligne] + 2] end] set onestentre 1 } else { lappend LesEst [string range $Ligne [expr [string first "=" $Ligne] + 2] [expr [string first "\"" $Ligne [expr $index +1]] -1]] } } } set InfoEst [join $LesEst ", "] return $InfoEst } proc RecupereTv {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set Access [AccessEvi $Nom] set InfoDes [ExtraitInfo $Nom "ValiDE"] if {[regexp "transcript variant" $InfoDes]} { Espionne "$Nom $Access $InfoDes" } } } proc RecupereTypeDescDNA {{Qui ""} {Quoi ""}} { global RecupereTypeDescDNA set Fichier "/genomics/link/SuperSouris/fiches/LesATGs" if {[info exists RecupereTypeDescDNA($Qui,$Quoi)]} { return $RecupereTypeDescDNA($Qui,$Quoi) } if {[info exists RecupereTypeDescDNA("EstCharge")]} { return "" } set RecupereTypeDescDNA("EstCharge") 1 foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne == ""} {continue} if {[regexp {^\tRD} $Ligne]} {continue} scan $Ligne "%s %s" Type IdGscope set RecupereTypeDescDNA($IdGscope,Type) $Type lappend RecupereTypeDescDNA($Type,IdGscope) $IdGscope } return [RecupereTypeDescDNA $Qui $Quoi] } proc RecupereTypeMol {LesLignes} { set LigneType [lindex $LesLignes [lsearch -regexp $LesLignes "/mol_type="]] set InfoTypeMol [string range $LigneType [expr [string first "=" $LigneType] + 2] end-1] return $InfoTypeMol } proc RecupereUnFichierSurWeb {molid {url ""} {bnk ""}} { global Defauts if {! [info exists Defauts]} {LesDefauts} if {$url ne ""} { set site "UNK" set molid "" set bnk "" } else { if {[EstUnAccessPDB $molid]} { set site "Pdb" set bnk "pdb" #set Motor "Hoan" set Motor "World" } elseif {$bnk eq ""} { set site "SRS" set bnk "protein" set Motor "Hoan" } else { set site "SRS" set bnk $bnk set Motor "Hoan" } set url [set Defauts(Url${site}${Motor})] } if {[set ix [string first ":" $molid]] != -1} { set molid [string range $molid $ix+1 end] } set molid [DonneIdDeAccessPDB $molid] set Leslignes {} regsub -all "XXXX" $url $molid url regsub -all "YYYY" $url $bnk url HttpCopy $url Leslignes if {$site eq "UNK"} {return $Leslignes} if {$site eq "SRS"} { if {$Motor eq "World"} { set TexteHTML [join $Leslignes "\n"] set Texte [ValeurDeLaBalise "pre" TexteHTML] set Leslignes [split $Texte "\n"] } } set head [string range [lindex $Leslignes 0] 0 1] set tail [string range [lindex $Leslignes end] 0 2] if { ($site eq "SRS" && $head ne "ID") || ($site eq "Pdb" && $head ne "HE" && $tail ne "END")} { set Leslignes {} regsub -all "XXXX" [set Defauts(Url${site}World)] $molid url if {$site eq "SRS"} { ::http::config -urlencoding iso8859-1 } HttpCopy $url Leslignes if {$site eq "SRS"} { set TexteHTML [join $Leslignes "\n"] set Texte [ValeurDeLaBalise "pre" TexteHTML] set Leslignes [split $Texte "\n"] } set head [string range [lindex $Leslignes 0] 0 1] if { $head ne "HE" && $head ne "ID"} { set Leslignes "ERREUR" if {$site eq "Pdb"} { if {[file exists "${molid}.pdb"]} { set Leslignes [LesLignesDuFichier "${molid}.pdb"] set head "[string range [lindex $Leslignes 0] 0 1]" if { $head ne "HE"} {set Leslignes "ERREUR"} } } } } return $Leslignes } proc RecupereUnTFA {File ID aOS aSeq} { set tfaFile [RepertoireDuGenome]/tfasdescopains/$File set Lignes [LesLignesDuFichier $tfaFile] upvar $aOS OS upvar $aSeq Seq Espionne "ID rechercher: $ID" set cx "n" foreach l $Lignes { if {[regexp {^>} $l]} { set lineSplit [split $l " "] if {[lindex $lineSplit 1]=="$ID"} { set OS "[lindex $lineSplit 2] [lindex $lineSplit 3]" Espionne "OS: $OS" set cx "y" } } else { if {$cx=="y"} { set Seq $l set cx "n" } } } } proc RecupereVoisins {{Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set Resultat1 ""; set Resultat2 ""; set LesResultatsIntermediairesInit {}; set LesResultatsIntermediairesProv0 {}; set ResultatIntermediaireProv1 ""; set LesResultatsIntermediairesProv2 {}; set LesResultatsIntermediairesFin {}; set ResultatIntermediaire ""; set Voisin ""; set Orig ""; set h 0; set LesPairesDeDeuxAcc {}; set onesdswhile 0 puts "" set Acc [AccessEvi $Nom] puts "$Nom $Acc" set InfoLoc [ExtraitInfo $Nom "LocUcscFrom200602"] if {$InfoLoc=="" || $InfoLoc=="no value"} {continue} puts "$InfoLoc" set LesMots [split $InfoLoc {:- }] set LesMots2 [split $InfoLoc "\(\)"] set chr [lindex $LesMots 0] set start [lindex $LesMots 1] set stop [lindex $LesMots 2] set sens [lindex $LesMots2 1] for {set j $start} {$j<=$stop} {incr j 10} { set result [LocInBetween $j Mouse $chr] lappend LesResultatsIntermediairesInit [LocInBetween $j Mouse $chr] } set LesResultatsIntermediairesInit [ListeSansDoublon $LesResultatsIntermediairesInit] foreach elmt $LesResultatsIntermediairesInit { puts "--$elmt" if {![regexp -nocase "Between" $elmt]} {lappend LesResultatsIntermediairesProv0 $elmt} if {[regexp -nocase "Between" $elmt]} { puts "attention au between" set LesMotsDeBetween [LesMotsDeLaLigne $elmt] set 1eracc [lindex $LesMotsDeBetween 4] set 2emeacc [lindex $LesMotsDeBetween 8] set les2acc "$1eracc $2emeacc" lappend LesPairesDeDeuxAcc $les2acc } } set longpaire [llength $LesPairesDeDeuxAcc] set ResultatIntermediaireProv1 [join $LesResultatsIntermediairesProv0 " "] set LesResultatsIntermediairesProv2 [split $ResultatIntermediaireProv1 "In"] set LesResultatsIntermediairesProv2 [ListeSansDoublon $LesResultatsIntermediairesProv2] set LesResultatsIntermediairesProv2 [ListeSsElmtVide $LesResultatsIntermediairesProv2] foreach elmt2 $LesResultatsIntermediairesProv2 { set elmt2 [string trim $elmt2] puts "++$elmt2" set LesMotsDeelmt2 [LesMotsDeLaLigne $elmt2] if {$LesPairesDeDeuxAcc!={}} { foreach PaireDeDeuxAcc $LesPairesDeDeuxAcc { if {[regexp [lindex $LesMotsDeelmt2 3] $PaireDeDeuxAcc]} {incr h} } } if {![regexp "$Acc" $elmt2] && [lindex $LesMotsDeelmt2 2]==$sens} { lappend LesResultatsIntermediairesFin $elmt2 } } if {$h!=$longpaire} {puts "attention une paire pas trouve"} set LesResultatsIntermediairesFin [ListeSsElmtVide $LesResultatsIntermediairesFin] set ResultatIntermediaire [join $LesResultatsIntermediairesFin "\t"] puts "ResultatIntermediaire $ResultatIntermediaire" if {$sens=="+"} { set nvstop [expr $stop + 1] set Resultat2 [LocInBetween $nvstop Mouse $chr] puts "Resultat2 $nvstop $Resultat2" if {[regexp "In" $Resultat2]} { puts "attention au in" set LesResultat2 [split $Resultat2 "In"] set LesResultat2 [ListeSsElmtVide $LesResultat2] foreach result2 $LesResultat2 { set onladschevauch 0 puts "$result2" set Accresult2 [lindex $result2 3] set stopAccresult2 [lindex $result2 1] puts "$stopAccresult2" foreach chevauch $LesResultatsIntermediairesProv2 { set Accchevauch [lindex $chevauch 3] if {[regexp $Accresult2 $Accchevauch]} { set onladschevauch 1 } } if {$onladschevauch} { puts "rentrela" lappend LesNvxStop $stopAccresult2 } if {!$onladschevauch} { puts "attention pas retrouve ds chevauch" } } foreach NvxStop $LesNvxStop { puts "NvxStop $NvxStop" set NvxStop [expr $NvxStop + 1] set Resultat2inter [LocInBetween $NvxStop Mouse $chr] puts "Resultat2inter $NvxStop $Resultat2inter" lappend LesResultat2inter $Resultat2inter } set LesResultat2inter [ListeSansDoublon $LesResultat2inter] if {[llength $LesResultat2inter]>1} {puts "plus d'un"} set MaxStop [DetermineLePlusGrand $LesNvxStop] set MaxStop [expr $MaxStop + 1] puts "MaxStop $MaxStop" set Resultat2 [LocInBetween $MaxStop Mouse $chr] puts "Resultat2 $MaxStop $Resultat2" } set LesResultat2 [split $Resultat2 "Between"] if {[llength LesResultat2]>1} {puts "trop de between"} set LesMots2 [LesMotsDeLaLigne $Resultat2] set Orig1 [lindex $LesMots2 4] set Voisin [lindex $LesMots2 8] set startVoisin [lindex $LesMots2 5] set stopVoisin [lindex $LesMots2 6] set sensVoisin [lindex $LesMots2 7] puts "$sensVoisin $sens" if {$sensVoisin==$sens} { puts "le 1er voisin est $Voisin ($Orig)" set distance [expr $startVoisin - $stop] puts "$distance bases" } set iemevoisin 1 while {$sensVoisin!=$sens} { incr iemevoisin set onesdswhile 1 set nvstop2 [expr $stopVoisin + 1] set Resultat2bis [LocInBetween $nvstop2 Mouse $chr] set LesMotsVoisins2 [LesMotsDeLaLigne $Resultat2bis] set Orig2 [lindex $LesMotsVoisins2 4] set Voisin [lindex $LesMotsVoisins2 8] set startVoisin [lindex $LesMotsVoisins2 5] set stopVoisin [lindex $LesMotsVoisins2 6] set sensVoisin [lindex $LesMotsVoisins2 7] } if {$onesdswhile} { puts "Resultat2bis $nvstop2 $Resultat2bis" puts "le $iemevoisin ieme voisin est $Voisin ($Orig1)" set distance [expr $startVoisin - $stop] puts "$distance bases" } } if {$sens=="-"} { set nvstart [expr $start - 1] set Resultat1 [LocInBetween $nvstart Mouse $chr] puts "Resultat1 $nvstart $Resultat1" if {[regexp "In" $Resultat1]} { puts "attention au in" set LesResultat1 [split $Resultat1 "In"] set LesResultat1 [ListeSsElmtVide $LesResultat1] foreach result1 $LesResultat1 { set onladschevauch 0 set Accresult1 [lindex $result1 3] set startAccresult1 [lindex $result1 0] foreach chevauch $LesResultatsIntermediairesProv2 { set Accchevauch [lindex $chevauch 3] if {[regexp $Accresult1 $Accchevauch]} { set onladschevauch 1 } } if {$onladschevauch} { lappend LesNvxStart $startAccresult1 } if {!$onladschevauch} { puts "attention pas retrouve ds chevauch" } } foreach NvxStart $LesNvxStart { set NvxStart [expr $NvxStart + 1] set Resultat1inter [LocInBetween $NvxStart Mouse $chr] puts "Resultat1inter $NvxStart $Resultat1inter" lappend LesResultat1inter $Resultat1inter } set LesResultat1inter [ListeSansDoublon $LesResultat1inter] if {[llength $LesResultat1inter]>1} {puts "plus d'un"} set MinStart [DetermineLePlusPetit $LesNvxStart] set MinStart [expr $MinStart - 1] set Resultat1 [LocInBetween $MinStart Mouse $chr] puts "Resultat1 $MinStart $Resultat1" } set LesResultat1 [split $Resultat1 "Between"] if {[llength LesResultat1]>1} {puts "trop de between"} set LesMots [LesMotsDeLaLigne $Resultat1] set Voisin [lindex $LesMots 4] set startVoisin [lindex $LesMots 1] set stopVoisin [lindex $LesMots 2] set sensVoisin [lindex $LesMots 3] set Orig1 [lindex $LesMots 8] if {$sensVoisin==$sens} { puts "Le 1er voisin est $Voisin ($Orig)" set distance [expr $start - $stopVoisin] puts "$distance bases" } set iemevoisin 1 while {$sensVoisin!=$sens} { incr iemevoisin set onesdswhile 1 set nvstart2 [expr $startVoisin - 1] set Resultat1bis [LocInBetween $nvstart2 Mouse $chr] set LesMotsVoisins [LesMotsDeLaLigne $Resultat1bis] set Voisin [lindex $LesMotsVoisins 4] set startVoisin [lindex $LesMotsVoisins 1] set stopVoisin [lindex $LesMotsVoisins 2] set sensVoisin [lindex $LesMotsVoisins 3] set Orig2 [lindex $LesMotsVoisins 8] } if {$onesdswhile} { puts "Resultat1bis $nvstart2 $Resultat1bis" puts "le $iemevoisin ieme voisin est $Voisin ($Orig1)" set distance [expr $start - $stopVoisin] puts "$distance bases" } } } } proc RecurSeriallistFromSerial {aTexte aiT fin} { upvar $aTexte Texte upvar $aiT iT while {[set Prem [string index $Texte $iT]] eq ";" || $Prem eq ":" || $Prem eq "\}"} { incr iT } if {$iT>=$fin} { return {} } if {0 && $iT%1000==0} { Espionne $iT } set X [string index $Texte $iT] if {$X=="N"} { incr iT 2 return "" } if {$X=="i" || $X=="d"} { set V "" incr iT 2 while 1 { set Z [string index $Texte $iT] incr iT if {$iT > $fin} { return "ERROR scanning_{$X}_in_$Texte" } if {$Z eq ";"} { break } append V $Z } set Liste [list "i" $V] return $Liste } if {$X=="s"} { set N "" incr iT 2 while 1 { set Z [string index $Texte $iT] incr iT if {$iT > $fin} { return "ERROR scanning_{$X}_in_$Texte" } if {$Z eq ":"} { break } append N $Z } incr iT 1 ;# on passe le " set d [expr $iT] set f [expr $iT+$N-1] set S [string range $Texte $d $f] set Liste [list "s" $S] incr iT $N incr iT return $Liste } if {$X=="a"} { set N "" incr iT 2 while 1 { set Z [string index $Texte $iT] incr iT if {$iT > $fin} { return "ERROR scanning_{$X}_in_$Texte" } if {$Z eq ":"} { break } append N $Z } incr iT set LKV {} for {set i 0} {$i<$N} {incr i} { lappend LKV [RecurSeriallistFromSerial Texte iT $fin] [RecurSeriallistFromSerial Texte iT $fin] } set Liste [list "a" $LKV] return $Liste } return "ERROR scanning_unknown_{$X}_in_$Texte" } proc Recure {W} { global Indentation while 1 { set B [ProchaineBalise W] if {$B==""} { Espionne "[string repeat " " $Indentation] $W" ; break } set V [ValeurDeLaBalise $B W] if { ! [info exists Indentation]} { set Indentation 1 } Espionne "[string repeat " " $Indentation] ($B)" if {$V==""} { continue } incr Indentation Recure $V incr Indentation -1 } return "" } proc RecureSubdirFrom {Dir} { set LesSubDir [lsort [glob -nocomplain -type d -directory $Dir *]] set List $LesSubDir foreach SubDir $LesSubDir { LConcat List [RecureSubdirFrom $SubDir] } return List } proc RedefinirLaCouleur {K {NouveauTypeCouleur ""} {Ou ""}} { global TypeCouleur global TypeCouleurDuLinge global TypeFard if {$Ou==""} { set Ou "Boite" } Gs "UpdateK" if {$NouveauTypeCouleur == ""} { set NouveauTypeCouleur [ChoixColoration] } if { $NouveauTypeCouleur != "" } { if {$K!="OrdrePourGif" && [regexp "PresenceAndAbsence" $NouveauTypeCouleur]} { ChoixDesGenomesCompletsPresentsAbsents Ask } if {$NouveauTypeCouleur=="NombreDeCopainsDansBlast"} { NombreDeCopainsDansBlast "Reload" } if {$NouveauTypeCouleur=="HomologDetectionAgreement"} { HomologDetectionAgreement "Reset" } if {$NouveauTypeCouleur=="SameClusterXHda"} { ColorationDesClustersXHdaDesNomsPiques "Reset" } if {$NouveauTypeCouleur=="FromTamis"} { CreeLeTasTamis } if {$Ou=="Boite"} { set TypeCouleur($K) $NouveauTypeCouleur RecoloreLesBoites $NouveauTypeCouleur $K } if {$Ou=="Linge"} { set TypeCouleurDuLinge($K) $NouveauTypeCouleur RecoloreLesLinges $NouveauTypeCouleur $K } if {$Ou=="Fard"} { set TypeFard($K) $NouveauTypeCouleur } } return $K } proc RedefinirLaCouleurDuLinge {K {NouveauTypeCouleur ""}} { return [RedefinirLaCouleur $K $NouveauTypeCouleur "Linge"] } proc RedefinirLeFard {K {NouveauTypeCouleur ""}} { return [RedefinirLaCouleur $K $NouveauTypeCouleur "Fard"] } proc RedondanceBandes {Fichier Fichier118 Fichier247} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Clones_bandes_new"] { ## (rq: pas de user R dans ce fichier) if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set U [lindex $LesChamps 0] ### ATTENTION: enlever les espaces qui sont parfois apres le codeclone ###### set CodeClone [string trim [lindex $LesChamps 1]] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } if {$U=="R"} {set U "I"} set B [lindex $LesChamps 2] set Band($U,$CodeClone) $B } foreach Ligne [LesLignesDuFichier $Fichier118] { if {$Ligne==""} {continue} set LesElts [split $Ligne "\t"] set Nom [lindex $LesElts 0] set Pas($Nom) 1 } foreach Ligne [LesLignesDuFichier $Fichier247] { if {$Ligne==""} {continue} set Pas($Ligne) 1 } foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set LesDD [split $Ligne " "] foreach DD $LesDD { if {[info exists Pas($DD)]} {continue} set U [ExtraitInfo $DD "OwnerOfCDNA"] set CodeClone [ExtraitInfo $DD "CodeClone"] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } if {$U=="R"} {set U "I"} if {[info exists Band($U,$CodeClone)]} { set BandeDD $Band($U,$CodeClone) if {![info exists Vu($U,$BandeDD)]} {set Vu($U,$BandeDD) 1; lappend LesBandes "$U $BandeDD"} } else {Espionne "$DD user:$U clone:$CodeClone"} } } Espionne "nb de bandes differentes:[llength $LesBandes]" } proc RedondanceBandes2 {Fichier931etjum} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Clones_bandes_new"] { ## (rq: pas de user R dans ce fichier) if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set U [lindex $LesChamps 0] ### ATTENTION: enlever les espaces qui sont parfois apres le codeclone ###### set CodeClone [string trim [lindex $LesChamps 1]] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } if {$U=="R"} {set U "I"} set B [lindex $LesChamps 2] set Band($U,$CodeClone) $B } foreach Ligne [LesLignesDuFichier $Fichier931etjum] { if {$Ligne==""} {continue} set LesDD [split $Ligne " "] set n 0 foreach DD $LesDD { set U [ExtraitInfo $DD "OwnerOfCDNA"] set CodeClone [ExtraitInfo $DD "CodeClone"] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } if {$U=="R"} {set U "I"} if {[info exists Band($U,$CodeClone)]} { set BandeDD $Band($U,$CodeClone) } else {Espionne "$DD pb no band"} if {[info exists Vu($U,$BandeDD)]} {continue} else {set Vu($U,$BandeDD) 1;incr n} } if {$n>1} {lappend Red $Ligne; if {$n>10} {Espionne $n}} unset Vu } Espionne [llength $Red] return $Red } proc RedondanceBandes3 {Fichier931etjum FichierTot FichierUniq} { #FichierTot "[RepertoireDuGenome]/OVERLAP931NEW/TotalDesData" #FichierUniq "[RepertoireDuGenome]/OVERLAP931NEW/DataUniques" foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Clones_bandes_new"] { ## (rq: pas de user R dans ce fichier) if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set U [lindex $LesChamps 0] ### ATTENTION: enlever les espaces qui sont parfois apres le codeclone ###### set CodeClone [string trim [lindex $LesChamps 1]] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } if {$U=="R"} {set U "I"} set B [lindex $LesChamps 2] set Band($U,$CodeClone) $B } set p 0 foreach Ligne [LesLignesDuFichier $Fichier931etjum] { if {$Ligne==""} {continue} set LesDD [split $Ligne " "] set JR [lindex $LesDD 0] set NumGeneDD [InterrogeFichierTotalDataDD $FichierTot $JR N] set AccBestProtHuman [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD AccProt] if {$AccBestProtHuman==""} {continue} incr p set n 0; set u 0 foreach DD $LesDD { set U [ExtraitInfo $DD "OwnerOfCDNA"] set CodeClone [ExtraitInfo $DD "CodeClone"] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } if {$U=="R"} {set U "I"} if {[info exists Band($U,$CodeClone)]} { set BandeDD $Band($U,$CodeClone) } else {Espionne "$DD pb no band"} if {[info exists Vu($U,$BandeDD)]} {continue} else {set Vu($U,$BandeDD) 1;incr n;if {![info exists VuUser($U)]} {set VuUser($U) 1; incr u}} } if {$u>1} {lappend Red $Ligne; if {$n>10} {Espionne $n}} unset Vu; unset VuUser } Espionne $p Espionne [llength $Red] return $Red } proc RedondanceClu {} { #les numeros de cluster peuvent être redondants entre souris et rat mais jamais entre les repertoires souris ni entre les repertoires rat set LesRepertoires [LesRepertoires "Mouse" "Ini"] #set LesRepertoires [LesRepertoires "Rat" "Ini"] foreach Repertoire $LesRepertoires { set RepertoireCourt [file tail $Repertoire] foreach FileST [glob -nocomplain "$Repertoire/*"] { set cluster [lindex [split [file tail $FileST] "."] 0] lappend Compte($cluster) $RepertoireCourt } } set i 0 set LesCombi {} foreach CluUni [array names Compte] { if {[llength $Compte($CluUni)]>1} { incr i lappend LesCombi [join $Compte($CluUni) " "] Espionne "$CluUni $Compte($CluUni)" } } set LesCombi [ListeSansDoublon $LesCombi] Espionne "$i" EspionneL $LesCombi } proc RedondanceGnDsSpliRetMouse {} { foreach Box [ListeDesPABs] { set Gn [ExtraitInfo $Box "ValiGN"] if {$Gn==""} {continue} set GN [string toupper $Gn] if {[info exists DejaVu($GN)]} { incr DejaVu($GN) } else { set DejaVu($GN) 1 } } foreach Box [ListeDesPABs] { set Gn [ExtraitInfo $Box "ValiGN"] if {$Gn==""} {continue} set GN [string toupper $Gn] if {$DejaVu($GN) > 1} { Espionne "$Box" Espionne "$GN" } } } proc RedondanceGnEntreSpliRetMouseEtSpliRetRat {} { set RepertoireMouse "/genomics/link/SpliRetMouse/infos" set RepertoireRat "/genomics/link/SpliRetRat/infos" set i 0 foreach file [glob -nocomplain "$RepertoireMouse/*"] { set Box [file tail $file] foreach Ligne [LesLignesDuFichier $file] { if {[regexp "ValiGN" $Ligne]} { set GnMouse [lindex [split $Ligne ":"] 1] if {$GnMouse==""} {continue} set GnMouse [string trim $GnMouse] set GNMouse [string toupper $GnMouse] lappend Mouse($GNMouse) $Box } } } foreach file [glob -nocomplain "$RepertoireRat/*"] { set Box [file tail $file] foreach Ligne [LesLignesDuFichier $file] { if {[regexp "ValiGN" $Ligne]} { set GnRat [lindex [split $Ligne ":"] 1] if {$GnRat==""} {continue} set GnRat [string trim $GnRat] set GNRat [string toupper $GnRat] if {[info exists Mouse($GNRat)]} { incr i Espionne "$Mouse($GNRat) $Box $GNRat" } } } } Espionne "$i" } proc RedondanceProbesetControl {} { set LesFichiers [LesAffyAnnotDansLeBonOrdre] foreach Fichier $LesFichiers { Espionne "$Fichier" set Queue [file tail $Fichier] set LesLignes [TabulonsSansQuote $Fichier "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { set Elmt [split $Ligne ";"] set Ps [lindex $Elmt 0] if {[regexp "AFFX" $Ps]} { if {[info exists DejaVu($Ps)]} { incr DejaVu($Ps) lappend DejaVu2($Ps) $Queue continue } set DejaVu($Ps) 1 lappend DejaVu2($Ps) $Queue } } } set I 0; set J 0 foreach Clef [array names DejaVu] { incr I if {$DejaVu($Clef)==1} {incr J} set LigneFinal "$Clef $DejaVu($Clef) $DejaVu2($Clef)" lappend LesLignesFinal $LigneFinal } lappend LesLignesFinal "nbcontrol $I" lappend LesLignesFinal "nbcontrolnonredondant $J" SauveLesLignes $LesLignesFinal dans "[GxData]/ToGx/RedondanceProbesetControl.txt" } proc RedrawDesign {K} { Wup "Permet de redessiner les boites en utilisant des parametres restreint a l affichage" if {$K==""} {return ""} ResetZoom $K EffaceLesBoitesDuCanvas $K #Recupere les infos essentielles du canvas a redessiner set LesDirs [LesInfosDe $K MesDirs] set LesFichiersBlast [LesInfosDe $K MesBlasts] set LesLogs [LesInfosDe $K MesLogs] set LesFichiersOligo [LesInfosDe $K MesFichiersOligo] set PAB [LesInfosDe $K MonPAB] set FichierQuery [LesInfosDe $K MonFichierQuery] set TailleQueryNt [LesInfosDe $K MaTailleDeQuery] set AccessQuery [LesInfosDe $K MonAccessQuery] set Police "Courier 12" set Police2 {-family "arial" -size 12 -weight bold} set CouleurOutline "black" set LargeurMax [expr [winfo screenwidth .] - 200] set HauteurMax [expr [winfo screenheight .] * 1/2] set LargeurFenetre [expr [winfo screenwidth .] - 200] set HauteurFenetre [expr [winfo screenheight .] * 1/2] set XMilieu [expr $LargeurMax/2] set BordureX 50.0 set BordureY 50.0 set Intervalle 10.0 set EpaisseurBoite 15.0 #Position du Graph content set YDebutGraph [expr 0 + $BordureY] set YFinGraph [expr $YDebutGraph + 100] #Position de la query set XDebutQuery [expr 0 + $BordureX] #set YDebutQuery [expr $YFinGraph + 10] set YDebutQuery [expr $YFinGraph + 20] set XFinQuery [expr $LargeurMax - $BordureX] set YFinQuery [expr $YDebutQuery + $EpaisseurBoite] #Rapport du nombre de pixel pour un nt set OneNtPixel [expr ($XFinQuery-$XDebutQuery)/($TailleQueryNt-1)] #Attention on commence au premier nt #Debut des Oligos set YDebutDeOligo [expr $YFinQuery + $Intervalle] #CutOff pour limiter l affichage si besoin est ############################################## set LesCutOffs [list NomOligo GC Tm ExpTm XDebutDeOligoNt XFinDeOligoNt NbCandidats NbContigues NbUnrelated LesCandidats] #Dessine les boites des differentes sources ########################################### set IdDuGraph 0 foreach DirOligo $LesDirs { set DB [file tail $DirOligo] incr IdDuGraph #Charge le fichier pour obtenir les infos sur les oligos ######################################################## set FichierACharger "$DirOligo/$PAB.oligo" set lesXDebutFinDeOligo [InterrogeInfoDeLOligo $FichierACharger LesDebutFin] if {$lesXDebutFinDeOligo == ""} { if {[InterrogeInfoDeLOligo $FichierACharger NotDone]=="1"} { set Message "No Oligo calculated for $PAB in $DirOligo" } elseif {[InterrogeInfoDeLOligo $FichierACharger NoOligo]=="1"} { set Message "No Oligo available for $PAB in $DirOligo" } else {set Message "Petit probleme"} $K create text $XMilieu $YDebutDeOligo -text "$Message" -font "$Police2" set YDebutDeOligo [expr $YDebutDeOligo + 20] continue } #Construction des boites des Oligos #Classement des bornes du Nt vers Ct (3prime vers 5prime) #Creation des boites avec plus de 40 d ecart ######################################################### while {1} { if {$lesXDebutFinDeOligo==""} {break} set YFinDeOligo [expr $YDebutDeOligo + $EpaisseurBoite] set OldDebut -40 foreach UnDebutFinDeOligo [lsort -real -increasing -index 0 $lesXDebutFinDeOligo] { set NbUnrelated "" set NomOligo [InterrogeInfoDeLOligo $FichierACharger [lindex $UnDebutFinDeOligo 0] [lindex $UnDebutFinDeOligo 1] NomOligo] set LaSequence [InterrogeInfoDeLOligo $FichierACharger $NomOligo Sequence] set TailleOligo [InterrogeInfoDeLOligo $FichierACharger $NomOligo Taille] set GC [InterrogeInfoDeLOligo $FichierACharger $NomOligo GC] set Tm [InterrogeInfoDeLOligo $FichierACharger $NomOligo Tm] set ExpTm [InterrogeInfoDeLOligo $FichierACharger $NomOligo ExpTm] set XDebutDeOligoNt [InterrogeInfoDeLOligo $FichierACharger $NomOligo Debut] set XFinDeOligoNt [InterrogeInfoDeLOligo $FichierACharger $NomOligo Fin] set NbCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbCandidats] set NbContigues [InterrogeInfoDeLOligo $FichierACharger $NomOligo NbContigues] set LesCandidats [InterrogeInfoDeLOligo $FichierACharger $NomOligo LesCandidats] set NbUnrelated [regexp -all {NG[0-9]+} $LesCandidats] if {$TailleOligo == ""} {set TailleOligo [string length $LaSequence]} if {$TailleOligo>$TailleQueryNt} {set TailleOligo $TailleQueryNt} if { $GC == ""} { set GC [format "%.1f" [expr (([NombreDeBaseDe $LaSequence "G|C"])/($TailleOligo*1.0))*100.0]] } if {$Tm == ""} {set Tm [CalculTmDeLaSeq $LaSequence "" "" NearestNeighbor]} if {$ExpTm == ""} {set ExpTm [CalculTmDeLaSeq $LaSequence "" "" DNADNA]} if {$XDebutDeOligoNt == ""} {set XDebutDeOligoNt 1} if {$XFinDeOligoNt == ""} {set XFinDeOligoNt $TailleOligo} if {$NbCandidats == ""} {set NbCandidats "-1"} if {$NbContigues == ""} {set NbContigues "-1"} if {$NbUnrelated == ""} {set NbUnrelated "0"} set Next 0 set Result 1 foreach CutOff $LesCutOffs { set Result [CheckForRestrictedParameter [set $CutOff] $CutOff] if {$Result=="0"} { set Next 1 break } } if {$Next} { set index [lsearch $lesXDebutFinDeOligo $UnDebutFinDeOligo] set lesXDebutFinDeOligo [lreplace $lesXDebutFinDeOligo $index $index] continue } set CouleurBoite [CouleurDeLOligo $NbCandidats] #Les infos contenues dans l info bulle #set Texte [format "%-10s%-10s" "Id-Oligo:" "$NomOligo"] set Texte [format "%-4s%-10s" "Id:" "$NomOligo"] append Texte [format "\n%-10s%-10s" "Database:" "$DB"] append Texte [format "\n%-10s%-3d %5s" "Length:" "$TailleOligo" "nt(s)"] append Texte [format "\n%-10s%3.1f %1s" "GC:" "$GC" "%"] append Texte [format "\n%-10s%3.1f %5s" "NN-Tm:" "$Tm" "degree(s)"] append Texte [format "\n%-10s%3.1f %5s" "Ex-Tm:" "$ExpTm" "degree(s)"] append Texte [format "\n%-10s%3d %5s" "Begin:" "$XDebutDeOligoNt" "/ $TailleQueryNt nt(s)"] append Texte [format "\n%-10s%3d %5s" "End:" "$XFinDeOligoNt" "/ $TailleQueryNt nt(s)"] append Texte [format "\n%-15s%2d" "X-Detected:" "$NbCandidats"] append Texte [format "\n%-15s%2d" "Contiguous:" "$NbContigues"] append Texte [format "\n%-15s%2d" "Unrelated Acc:" "$NbUnrelated"] #Calcul positions de l oligo sur la query set XDebutDeOligo [expr $XDebutQuery + $OneNtPixel * $XDebutDeOligoNt - $OneNtPixel] set XFinDeOligo [expr $XDebutDeOligo + $OneNtPixel * $TailleOligo - $OneNtPixel] if {[expr $XDebutDeOligo > [expr $OldDebut+40.0]] =="1"} { #On dessine la boite de l oligo $K create rectangle $XDebutDeOligo $YDebutDeOligo $XFinDeOligo $YFinDeOligo -outline "white" -fill "$CouleurBoite" -tags [list "" $Texte $XDebutDeOligoNt $XFinDeOligoNt $NomOligo $DirOligo Affichable Positionner Boite] set OldDebut $XFinDeOligo set index [lsearch $lesXDebutFinDeOligo $UnDebutFinDeOligo] set lesXDebutFinDeOligo [lreplace $lesXDebutFinDeOligo $index $index] } } #On ajoute de l espace pour la deuxieme ligne set YDebutDeOligo [expr $YFinDeOligo + $Intervalle] } set YDebutDeOligo [expr $YDebutDeOligo + 15] #Separateur entre chaque banque de design $K create text $XDebutQuery [expr $YDebutDeOligo-8] -text "$IdDuGraph: $DB" -font {-family "arial" -size 10 -weight bold} -anchor "w" $K create line $XDebutQuery $YDebutDeOligo $XFinQuery $YDebutDeOligo -fill "black" -width 2 set YDebutDeOligo [expr $YDebutDeOligo+$Intervalle] } if {$YDebutDeOligo < [winfo screenheight .] } { $K configure -height $YDebutDeOligo } #Pour accorder la scrollbar au dernier oligo affiche $K configure -scrollregion [list 0 0 $LargeurMax $YDebutDeOligo] return "" } proc ReduceBlastSize {} { global RepertoireDuGenome set min 50000 set max 200000 #set max 3 set compteur 1 foreach PAB [ListeDesPABs2] { if {$compteur<$min} {continue} puts "$compteur : $PAB" set A [ContenuDuFichier "$RepertoireDuGenome/blastpBIGBANK/$PAB"] set FICOUT [open "$RepertoireDuGenome/blastpSANS/$PAB" "w"] regsub {\n>.*} $A "" B if {![info exists B]} {puts "gros probleme pour $PAB"} puts $FICOUT $B close $FICOUT incr compteur if {$compteur>$max} {exit} } } proc ReduceMsf {NomOuFichier {FicOut ""} {MinAB ""}} { if {$FicOut==""} { set FicOut "GetText" } if {$MinAB==""} { set MinAB 0.2 } set Nom [file tail $NomOuFichier] if {[EstUnPAB $NomOuFichier]} { set Fichier "[RepertoireDuGenome]/msf/$Nom" } else { set Fichier $NomOuFichier } set TexteMsf [ContenuDuFichier $Fichier] if {[regexp "QUERY_PROTEIN" $TexteMsf]} { set Nom "QUERY_PROTEIN" } set LesAccess [PairwizeDistancesInMsf "AccessList" $Fichier] set LesRejetes {} foreach A $LesAccess { set Adist [PairwizeDistancesInMsf $Nom $A] if {$Adist==""} { continue } foreach B $LesAccess { set Bdist [PairwizeDistancesInMsf $Nom $B] if {$Bdist==""} { continue } if {$A>$B} { set PremAlpha $A } else { set PremAlpha $B } if {$Adist > $Bdist} { set PlusLoin($A,$B) [set PlusLoin($B,$A) $A] } if {$Bdist > $Adist} { set PlusLoin($A,$B) [set PlusLoin($B,$A) $B] } if {$Adist == $Bdist} { set PlusLoin($A,$B) [set PlusLoin($B,$A) $PremAlpha] } } } set I 0 foreach A $LesAccess { incr I if {$A==$Nom} {continue} set Adist [PairwizeDistancesInMsf $Nom $A] if {$Adist==""} { continue } foreach B [lrange $LesAccess $I end] { if {$B==$Nom} {continue} set ABdist [PairwizeDistancesInMsf $A $B] if {$ABdist==""} { continue } if {$ABdist>$MinAB} { continue } set Bdist [PairwizeDistancesInMsf $Nom $B] if {$Bdist==""} { continue } if {$PlusLoin($A,$B)==$A} { lappend LesRejetes $A } if {$PlusLoin($A,$B)==$B} { lappend LesRejetes $B } } } set LesRejetes [lsort -unique $LesRejetes] set NewMSF [MSFSelection $TexteMsf $LesRejetes "Out"] if {$FicOut=="GetText"} { return $NewMSF } return [Sauve $NewMSF dans $FicOut] } proc ReecritLeGPR {Input Output MAIA} { Wup "Pour reconstruire un fichier GPR" #1- Creation de l entete set Entete "" set NOptionAndFields 1 foreach Q [InterrogeLeGPRFile $Input Quoi] { if {[regexp -nocase "LesDataFields" $Q]} {continue} if {[regexp -nocase "^ATF" $Q]} { set Ligne [list $Q [InterrogeLeGPRFile $Input $Q]] set Ligne [join $Ligne "\t"] lappend Entete $Ligne set Ligne "" continue } if {$NOptionAndFields && [regexp -nocase "^NMaxOptionalHeader" $Q] || [regexp -nocase "^NDataFields" $Q]} { if {$NOptionAndFields} { set NMaxOptionalHeader [InterrogeLeGPRFile $Input NMaxOptionalHeader] set NDataFields [InterrogeLeGPRFile $Input NDataFields] set Ligne [list $NMaxOptionalHeader $NDataFields] set Ligne [join $Ligne "\t"] set NOptionAndFields 0 lappend Entete $Ligne set Ligne "" } continue } lappend Entete "\"$Q=[InterrogeLeGPRFile $Input $Q]\"" } set Entete [join $Entete "\n"] AppendAuFichier $Output $Entete #2- Creation des datafields (titre des champs d information) set DataFields "" foreach Field [InterrogeLeGPRFile $Input LesDataFields] { lappend DataFields "\"$Field\"" } set DataFields [join $DataFields "\t"] AppendAuFichier $Output $DataFields #3- Creation des donnees (champs d information) set NbBlock [InterrogeLeGPRFile $Input NbBlock] set NbColumn [InterrogeLeGPRFile $Input NbColumn] set NbRow [InterrogeLeGPRFile $Input NbRow] for {set i 1} {$i <= $NbBlock} {incr i} { for {set k 1} {$k <= $NbRow} {incr k} { for {set j 1} {$j <= $NbColumn} {incr j} { set Ligne "" foreach Champs [InterrogeLeGPRFile $Input LesDataFields] { set Valeur "" #Attention Modif pour MAIA if {$Champs == "X"} { set Valeur [InterrogeLeGPRFile $MAIA $i $j $k "Overall Quality"] regsub -all "," $Valeur "." Valeur if {$Valeur==""} {set Valeur "0"} else {set Valeur [expr $Valeur * 100]} } else { set Valeur [InterrogeLeGPRFile $Input $i $j $k $Champs] } lappend Ligne $Valeur } AppendAuFichier $Output [join $Ligne "\t"] } } } return "" } proc ReecritMacsimOrdonnee {{Liste ""}} { if {$Liste==""} { set Liste [ListeDesPABs] } ############VIDER LE PASTOUCHE AVANT #detruit le .org et construit le .orgord foreach Box $Liste { set LesTries {}; set LesPasTries {}; set LesCol {} set FileProches "[RepertoireDuGenome]/ProchesQuery85/$Box.proches" set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.org" if {![file exists $FileProches] || ![file exists $FileMacsims]} { continue } if {[file exists ${FileMacsims}ord]} { continue } if {[PasTouche $Box]} { continue } set fh [open $FileMacsims "r"] dom parse -channel $fh doc close $fh $doc documentElement root set depart [$root selectNodes "//alignment"] set LesNamesProches [LesLignesDuFichier $FileProches] set nbproches [llength $LesNamesProches] foreach NameProche $LesNamesProches { foreach seq [$root selectNodes "//sequence"] { set noeud_name [$seq selectNodes "./seq-name/text()"] set Name [$noeud_name nodeValue] if {"$Name"=="$NameProche"} { lappend LesTries $seq $depart removeChild $seq break } } } foreach seq [$root selectNodes "//sequence"] { lappend LesPasTries $seq $depart removeChild $seq } foreach col [$root selectNodes "//column-score"] { lappend LesCol $col $depart removeChild $col } #set column [$root selectNodes "//column-score"] #set refChild $column set refChild "" foreach Tries $LesTries { $depart insertBefore $Tries $refChild #set refChild $Tries } foreach PasTries $LesPasTries { $depart insertBefore $PasTries $refChild #set refChild $PasTries } foreach Col $LesCol { $depart insertBefore $Col $refChild } set fh2 [open ${FileMacsims}ord "w"] puts $fh2 "" $doc asXML -channel $fh2 -doctypeDeclaration 0 close $fh2 $doc delete #file delete $FileMacsims } } proc ReecritTousLesMacsimsAcOrga {} { #attention pour un projet general (pas SpliRetMouse ni SpliRetRat), ReecritTousLesMacsimsAcOrga doit etre lance apres LitEtCompleteXML (sinon LitEtCompleteXML ne marche pas correctement) #on reecrit dans le meme fichier => n'ecrit plus de .org package require tdom foreach FichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsimXml/*"] { #if {[regexp ".org" $FichierMacsim]} { continue } #if {[file exists $FichierMacsim.org]} { continue } Espionne "$FichierMacsim" set fh [open $FichierMacsim "r"] dom parse -channel $fh doc close $fh $doc documentElement root foreach seq [$root selectNodes "//sequence"] { set noeud_name [$seq selectNodes "./seq-name/text()"] set Name [$noeud_name nodeValue] set Organism "" set Organism [FromMacsims $FichierMacsim $Name Organism] if {[regexp "^ENSMUST" $Name] || [regexp "^ENSRNOT" $Name] || [regexp "^NM_" $Name] || [regexp "^XM_" $Name] || [regexp "^YM_" $Name] || [regexp "^ZM_" $Name] || [regexp "^AM_" $Name] || [regexp "^NR_" $Name]} {continue} if {[regexp "^ENS" $Name]} { set prefixe [string range $Name 0 5] if {[regexp {[0-9]} $prefixe]} { set prefixe [string range $Name 0 2] } set OS [InterrogeCorresEnsEtOS $prefixe OS] if {$OS!=""} { scan $OS "%s %s" G E set Organism $G } else { set Organism "" } } elseif {$Organism=="" && [regexp "\-" $Name]} { #plus utile julie lit les varsplic maintenant # set Commande "getz \"\\\[varsplic-id:$Name\\\]\" \-vf acc" set Commande "getz \"\\\[UniprotVarSplice-acc:$Name\\\]\" \-vf id" #set Commande "getz \"\\\[refseqp-acc:$Name\\\]\" \-vf org" #set Commande "getz \"\\\[uniprot-acc:$Name\\\]\" \-vf org" set GetzOut [eval exec $Commande] set Acc [lindex [split $GetzOut "\t"] 1] set Organism [lindex [split $Acc "_"] 1] } if {$Organism!=""} { $noeud_name nodeValue ${Name}_$Organism } } #set fh2 [open $FichierMacsim.org "w"] set fh2 [open $FichierMacsim "w"] puts $fh2 "" $doc asXML -channel $fh2 -doctypeDeclaration 0 close $fh2 $doc delete } } proc ReelVersEcran {z zMin zMax ZMin ZMax} { set zPlage [expr $zMax-$zMin] if {[expr $zPlage == 0]} { set zPlage 1 } set Z [expr $ZMin + (($z-$zMin)*($ZMax-$ZMin)) / $zPlage] return $Z } proc RefDuGenomeComplet {Banque} { global RefDuGenomeComplet set Banque [string toupper $Banque] if {[info exists RefDuGenomeComplet($Banque)]} { return [set RefDuGenomeComplet($Banque)] } if {[info exists RefDuGenomeComplet("EstCharge")]} { return "" } set FichierRefDuGenomeComplet "[RepertoireDuGenome]/fiches/ref_des_genomes_complets" if { ! [file exists $FichierREfDuGenomeComplet]} { set FichierRefDuGenomeComplet "[GscopeDatabaseDir Common]/fiches/ref_des_genomes_complets" } if {[file exists $FichierRefDuGenomeComplet]} { array set RefDuGenomeComplet [LesLignesDuFichier $FichierRefDuGenomeComplet] } set RefDuGenomeComplet("EstCharge") 1 return [RefDuGenomeComplet $Banque] } proc RefFlatUcscMouse {{Qui ""} {Quoi ""}} { global RefFlatUcscMouse if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists RefFlatUcscMouse($Qui,$Quoi)]} {return $RefFlatUcscMouse($Qui,$Quoi)} set QUI [string toupper $Qui] if {[info exists RefFlatUcscMouse($QUI,$Quoi)]} {return $RefFlatUcscMouse($QUI,$Quoi)} if {[info exists RefFlatUcscMouse("EstCharge")]} {return ""} set RefFlatUcscMouse("EstCharge") 1 set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/refFlat.txt" set EnteteCommuneRefFlat "genename name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds" set LesTetes [split $EnteteCommuneRefFlat " "] set RefFlatUcscMouse(ListOf,Header) $LesTetes set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set GeneName [lindex $LesMots 0] set Name [lindex $LesMots 1] lappend RefFlatUcscMouse(ListOf,GeneName) $GeneName lappend RefFlatUcscMouse($Name,GeneName) $GeneName lappend RefFlatUcscMouse($Name,[string toupper GeneName]) $GeneName lappend RefFlatUcscMouse($GeneName,Name) $Name lappend RefFlatUcscMouse([string toupper $GeneName],Name) $Name foreach Mot $LesMots Tete $LesTetes { set RefFlatUcscMouse($Name,$Tete) $Mot } } return [RefFlatUcscMouse $Qui $Quoi] } proc RefGeneOmimOld {LesLignes} { set lGene "" foreach l $LesLignes { if { [regexp {\*} $l] } { set toAddG "" set idx1 [expr [string first "*" $l] + 1] set l [string range $l $idx1 end] set idx2 [string first " " $l] set toAddG [string range $l 0 [expr $idx2 - 1]] set desc [string range $l [expr $idx2 + 1] end] set desc [string range $desc 0 [expr [string first "up" $desc] - 1]] set desc [string trimright $desc] append toAddG ".$desc" lappend lGene $toAddG } } return $lGene } proc RefGeneUcscMouse {{Qui ""} {Quoi ""}} { global RefGeneUcscMouse if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {$Quoi==""} { set Quoi "Name2" } if {[info exists RefGeneUcscMouse($Qui,$Quoi)]} {return $RefGeneUcscMouse($Qui,$Quoi)} set QUI [string toupper $Qui] if {[info exists RefGeneUcscMouse($QUI,$Quoi)]} {return $RefGeneUcscMouse($QUI,$Quoi)} if {[info exists RefGeneUcscMouse("EstCharge")]} {return ""} set RefGeneUcscMouse("EstCharge") 1 set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/refGene.txt" set EnteteCommuneRefGene "bin name chrom strand txStart txEnd cdsStart cdsEnd exonCount exonStarts exonEnds id name2 cdsStartStat cdsEndStat exonFrames" set LesTetes [split $EnteteCommuneRefGene " "] set RefGeneUcscMouse(ListOf,Header) $LesTetes set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Name [lindex $LesMots 1] set Name2 [lindex $LesMots 12] lappend RefGeneUcscMouse(ListOf,Name) $Name lappend RefGeneUcscMouse($Name,Name2) $Name2 lappend RefGeneUcscMouse($Name,[string toupper Name2]) $Name2 lappend RefGeneUcscMouse($Name2,Name) $Name lappend RefGeneUcscMouse([string toupper $Name2],Name) $Name foreach Mot $LesMots Tete $LesTetes { set RefGeneUcscMouse($Name,$Tete) $Mot } } return [RefGeneUcscMouse $Qui $Quoi] } proc RefLinkUcscMouse {{Qui ""} {Quoi ""}} { global RefLinkUcscMouse if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {$Quoi==""} { set Quoi "NM" if {[regexp "^NM_" $Qui]} { set Quoi "name" } } if {[info exists RefLinkUcscMouse($Qui,$Quoi)]} {return $RefLinkUcscMouse($Qui,$Quoi)} #si le tab est deja charge on retourne valeur set QUI [string toupper $Qui] if {[info exists RefLinkUcscMouse($QUI,$Quoi)]} {return $RefLinkUcscMouse($QUI,$Quoi)} if {[info exists RefLinkUcscMouse("EstCharge")]} {return ""} #si on ne trouve pas la corres et que le tableau est charge on rend rien et sort du prog set RefLinkUcscMouse("EstCharge") 1 #on mets 1 dans cette varaiable pour dire qu'on est passe par la et qu'on a rempli tab set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/refLink.txt" set LesLignes [LesLignesDuFichier $Fichier] set OnAttendEntete 1 foreach Ligne $LesLignes { if {$OnAttendEntete} { set LesHeaders [split $Ligne "\t"] set RefLinkUcscMouse(ListOf,headers) $LesHeaders set OnAttendEntete 0 continue } set LesMots [split $Ligne "\t"] set Name [lindex $LesMots 0] set Prot [lindex $LesMots 3] set NM [lindex $LesMots 2] lappend RefLinkUcscMouse(ListOf,NM) $NM lappend RefLinkUcscMouse($Name,NM) $NM lappend RefLinkUcscMouse([string toupper $Name],NM) $NM lappend RefLinkUcscMouse($Prot,NM) $NM foreach Mot $LesMots Header $LesHeaders { #Espionne "On remplit la case $Header pour la ligne $Name" set RefLinkUcscMouse($NM,$Header) $Mot } } return [RefLinkUcscMouse $Qui $Quoi] } proc RefOfAC {AC} { return [QuestionDeScience QuidSeq "QuidRefOfAC $AC"] } proc RefPhenoOmimOld {LesLignes} { set lPheno "" foreach l $LesLignes { if { [regexp "#" $l] || [regexp {\+} $l] } { set toAddP "" set idx1 [expr [string first "#" $l] + 1] if {$idx1 == -2 } { set idx1 [expr [string first {\+} $l] + 1] } set l [string range $l $idx1 end] set idx2 [string first " " $l] set toAddP [string range $l 0 [expr $idx2 - 1]] set desc [string range $l [expr $idx2 + 1] end] set desc [string range $desc 0 [expr [string first "up" $desc] - 1]] set desc [string trimright $desc] append toAddP ".${desc}" lappend lPheno $toAddP } } return $lPheno } proc RefSeq_Design {} { Wup "Design de RefSeq complet, environ 19200" Wup "Pour lancer le design avec les parametres ajustes" set DataBase "/blast/rshuman.nsq" set Dir "[RepertoireDuGenome]/Probes/RefSeq_TFA" set LesQuerys [glob -nocomplain -directory $Dir "NM*"] set WDir "[RepertoireDuGenome]/Probes/RefSeq_Design" CADO4MI -q $LesQuerys -l 60 -nb 50 -t 91.2 -r 5 -b $DataBase -sp 70.0 -nc 15 -m NearestNeighbor -gl 30.00 -gu 70.00 -p "AAAAAAA TTTTTTT CCCCCCC GGGGGGG" -w $WDir return "" } proc RefaireLesProteomesNonUniprotStandard {{Domaine ""}} { if {$Domaine==""} { set Domaine [OiDomain] } NousAllonsAuBoulot "/genomics/link/OrthoInspector_Proteomes/$Domaine" foreach Fichier [lsort [glob -nocomplain "*fasta_Original"]] { Espionne Espionne $Fichier set OX "" if { ! [regexp {_([0-9]+)\.fasta_Original$} $Fichier Match OX]} { continue } Espionne $OX foreach NewCree [glob -nocomplain "*_new_$OX.fasta"] { Espionne $NewCree file delete $NewCree } foreach NB [glob -nocomplain "NotaBene/*_$OX"] { Espionne $NB file delete $NB } set FastaAConvertir "" regsub {_Original$} $Fichier "" FastaAConvertir file copy -force $Fichier $FastaAConvertir } OnRevientDuBoulot } proc RefaitBornesDesPABsAvecLesJumeaux {FichierDesJumeaux {FichierSortie ""}} { Wup "Permet a partir du fichier des Jumeaux Tries de refaire BornesDesPABs" set DirDesJumeaux "[RepertoireDuGenome]/Jumeaux" if {! [file exists $FichierDesJumeaux]} {return "No existing Input file"} if {$FichierSortie==""} {set FichierSortie "$DirDesJumeaux/BornesDesJumeaux"} set TailleBoite 999 set EcartEntreBoite 99 set EcartEntrePetiteBoite 16 set TaillePetiteBoite 440 set NouvellesBornes {} ChargeLesJumeaux TabJumeaux $FichierDesJumeaux set Debut 0 foreach PAB [ListeDesPABs] { if {! [info exists TabJumeaux($PAB,NombreDeJumeaux)]} {continue} set NbJumeaux [set TabJumeaux($PAB,NombreDeJumeaux)] if {$NbJumeaux==0} { set Fin [expr $Debut + $TailleBoite] } else { set Fin [expr $NbJumeaux * $TaillePetiteBoite + ($NbJumeaux-1) * $EcartEntrePetiteBoite] } Espionne "$PAB $Debut $Fin F NbJumeaux $NbJumeaux" lappend NouvellesBornes [list $PAB $Debut $Fin F] set Premier 1 foreach Jumeaux [set TabJumeaux($PAB,LesJumeaux)] { if {$Premier} { set DebutJumeaux $Debut set Premier 0 } else { set DebutJumeaux [expr $DebutJumeaux + $EcartEntrePetiteBoite] } set FinJumeaux [expr $DebutJumeaux + $TaillePetiteBoite] Espionne "$Jumeaux $DebutJumeaux $FinJumeaux F" lappend NouvellesBornes [list $PAB $Debut $Fin F] } set Debut [expr $Fin + $EcartEntreBoite] } return $NouvellesBornes #SauveLesLignes $NouvellesBornes dans $FichierSortie } proc RefaitChampsEMBL {} { set Fichier1 "[RepertoireDuGenome]/fiches/tubgroupe3" set Fichier2 "[RepertoireDuGenome]/fiches/tub3" set FichierSortie "[RepertoireDuGenome]/fiches/lestuberculosis" foreach Ligne1 [LesLignesDuFichier $Fichier1] { AppendAuFichier $FichierSortie $Ligne1 } foreach Ligne2 [LesLignesDuFichier $Fichier2] { scan $Ligne2 "%s %s %s %s %s" A B C D E set D "None" if {$C >= 40} { Espionne "$A $B $C $D $E" AppendAuFichier $FichierSortie "$A $B $C $D $E" } } } proc RefaitLeGPRFile_UMCU {{Fichier ""} {FichierOut ""}} { Wup "Permet de refaire le GPRFile pour mieux l utiliser" Wup "On le refait en relisant le gpr file initial" Wup "et lui ajoutant la position des genes et les nouvelles definitions" set RepUMCU "[RepertoireDuGenome]/Autres_Puces/UMCU" set RepGPRFile "$RepUMCU/GPR" if {$Fichier ==""} { Espionne "Usage: Input Output" } if {$FichierOut==""} { Espionne "Usage: Input Output" } if {[file exists $FichierOut]} { while {1} { if {[OuiOuNon "$FichierOut already exists.\nPlease choose a file name for new GalFile"]} { set FichierOut [tk_getOpenFile -title "Choose a file" -initialdir "$RepGalFile"] if {$FichierOut==""} {continue} else {break} } } } set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set PremierBlock 0 set LesLignes "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #Block Row Column Name ID #1 1 1 LTP8 LTP6 if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLeHeader !="1" && [regexp -nocase "^ATF" $Ligne]} { set SurLeHeader 1 set LigneSplitee [split $Ligne "\t"] set InfoGPRUMCU(ATF) [lindex $LigneSplitee 1] lappend InfoGPRUMCU(Quoi) ATF set NDeLigne 0 lappend LesLignes $Ligne continue } if {$SurLeHeader=="1" && $NDeLigne=="0"} { set LigneSplitee [split $Ligne "\t"] set InfoGPRUMCU(NMaxOptionalHeader) [lindex $LigneSplitee 0] set InfoGPRUMCU(NDataFields) [lindex $LigneSplitee 1] lappend InfoGPRUMCU(Quoi) NMaxOptionalHeader lappend InfoGPRUMCU(Quoi) NDataFields set NDeLigne 1 lappend LesLignes $Ligne continue } if {$SurLeHeader=="1" && [expr $NDeLigne <= [set InfoGPRUMCU(NMaxOptionalHeader)]]} { if {$PremierBlock=="0" && [regexp -nocase {Block[0-9]+=} $Ligne]} { set NBlock [expr [set InfoGPRUMCU(NMaxOptionalHeader)] - $NDeLigne + 1] set InfoGPRUMCU(NBlock) $NBlock lappend InfoGPRUMCU(Quoi) NBlock set PremierBlock 1 } regsub -all "\"" $Ligne "" LigneSplitee set LigneSplitee [split $LigneSplitee "="] set InfoGPRUMCU([lindex $LigneSplitee 0]) [string trim [lindex $LigneSplitee 1]] lappend InfoGPRUMCU(Quoi) [lindex $LigneSplitee 0] incr NDeLigne lappend LesLignes $Ligne continue } else {set SurLeHeader 0} if {$SurLeHeader=="0" && ([regexp -nocase "^Block\t" $Ligne] || [regexp -nocase "^\"Block\"\t" $Ligne])} { set LesDataFields [join "$Ligne" "\t"] set InfoGPRUMCU(LesDataFields) $LesDataFields set LesDataFields [split "$Ligne" "\t"] set LesDataFieldsOrdonnes "" set Rang "0" foreach Field $LesDataFields { regsub -all "\"" $Field "" Field set RangDe($Field) $Rang #Espionne "$Field $Rang" incr Rang } lappend InfoGPRUMCU(Quoi) LesDataFields set SurLesDonnees 1 lappend LesLignes $Ligne continue } regsub -all {\"} $Ligne "" Ligne set LigneSplitee [split $Ligne "\t"] set Name [lindex $LigneSplitee [set RangDe(Name)]] set ID [lindex $LigneSplitee [set RangDe(ID)]] set AccGscope [InterrogeActiChip2UMCU $ID AccessGscope] if {$AccGscope != ""} { #Espionne "$ID -- $AccGscope" set Name "ZZZZ_${AccGscope}_$Name" set Rang [set RangDe(Name)] set NewLigne [lreplace $LigneSplitee $Rang $Rang $Name] #Espionne "$LigneSplitee" #Espionne "$NewLigne" } else { set NewLigne $LigneSplitee } lappend LesLignes [join $NewLigne "\t"] continue } AppendAuFichier $FichierOut [join $LesLignes "\n"] close $F return "" } proc RefaitLeGalFile_Ontario {{Fichier ""} {FichierOut ""}} { Wup "Permet de refaire le GalFile pour mieux l utiliser" Wup "On le refait en relisant le gal file initial" Wup "et lui ajoutant la position des genes et les nouvelles definitions" ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## set RepPuceOntario "[RepertoireDuGenome]/Autres_Puces/Ontario/" set RepGalFile "$RepPuceOntario/GalFile" if {$Fichier ==""} {set Fichier "$RepGalFile/SS-H19k7.gal"} if {$FichierOut==""} {set FichierOut "$RepGalFile/Modified_SS-H19k7.gal"} if {[file exists $FichierOut]} { while {1} { if {[OuiOuNon "$FichierOut already exists.\nPlease choose a file name for new GalFile"]} { set FichierOut [tk_getOpenFile -title "Choose a file" -initialdir "$RepGalFile"] if {$FichierOut==""} {continue} else {break} } } } set Bizar 0 set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set nbSpot 0 set nbControle 0 set nbNosGenes 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #block col row name id if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLeHeader !="1" && [regexp -nocase "^ATF" $Ligne]} { set SurLeHeader 1 set NDeLigne 0 AppendAuFichier $FichierOut "$Ligne" continue } if {$SurLeHeader=="1" && $NDeLigne=="0"} { set LigneSplitee [split $Ligne "\t"] #On ajoute 1 colonne de donnee supplementaire set NMaxOptionalHeader [lindex $LigneSplitee 0] set NewLigne [join [list $NMaxOptionalHeader [expr [lindex $LigneSplitee 1]+1]] "\t"] set NDeLigne 1 AppendAuFichier $FichierOut "$NewLigne" continue } if {$SurLeHeader=="1" && [expr $NDeLigne <= $NMaxOptionalHeader]} { incr NDeLigne AppendAuFichier $FichierOut "$Ligne" continue } else {set SurLeHeader 0} if {$SurLeHeader=="0" && [regexp -nocase "^Block\t" $Ligne]} { set LesDataFields [split "$Ligne" "\t"] lappend LesDataFields "Old_Name" set SurLesDonnees 1 AppendAuFichier $FichierOut "[join $LesDataFields "\t"]" continue } set OnAUnBizar 0 set NewLigne "" set LigneSplitee "" set block "" set row "" set col "" set name "" set ID "" set Original_ID "" set Definition "" set C1Controle 0 incr nbSpot set LigneSplitee [split $Ligne "\t"] set block [lindex $LigneSplitee 0] set row [lindex $LigneSplitee 1] set col [lindex $LigneSplitee 2] set name [lindex $LigneSplitee 3] set ID [lindex $LigneSplitee 4] set Original_ID [lindex [split $name ":"] 6] #Les controles de la puce # No clone (temoin negatif du bruit de fond) # 3xSCC (temoin negatif du bruit de fond + du tampon) # arabidopsis (temoin negatif du bruit de fond + du tampon + de la sonde) if {$ID=="Arabidopsis"} { set Definition "Control_$ID" set C1Controle 1 } elseif {$ID=="3XSSC"} { set Definition "Control_$ID" set C1Controle 1 } elseif {[regexp "No clone in this well" $ID]} { set Definition "Control_NoClone" set C1Controle 1 } elseif {[regexp {No_seq|Unresolved|N/A|Unknown} $ID] } { incr Bizar set OnAUnBizar 1 #set ID $Original_ID } if {$C1Controle!="1"} { if {$ID == $Original_ID} {set ListeID $ID} else {set ListeID [list $ID $Original_ID]} if {$OnAUnBizar=="1"} {set ListeID ""} foreach id $ListeID { #Recherche de la definition # Meilleure entre RefSeq et Unigene (RefSeq par defaut) # Si aucune alors on conserve l original sinon Data not found if {[InterrogeLesAccRSEtUG_Ontario $id AccRefSeq]!="None" && [InterrogeLesAccRSEtUG_Ontario $id AccUniseq]!="None"} { if {[InterrogeLesAccRSEtUG_Ontario $id CoverRefSeq]>=[InterrogeLesAccRSEtUG_Ontario $id CoverUniseq]} { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $id DefRefSeq] } else { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $id DefUniseq] } } elseif {[InterrogeLesAccRSEtUG_Ontario $id AccRefSeq] != "None"} { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $id DefRefSeq] } elseif {[InterrogeLesAccRSEtUG_Ontario $id AccUniseq] != "None"} { set DefinitionNew [InterrogeLesAccRSEtUG_Ontario $id DefUniseq] } else { set DefinitionNew "None" } if {$DefinitionNew=="None"} { set Definition [InterrogeLeIOBFile_Ontario $id Definition] } else { set Definition $DefinitionNew } if {$Definition!=""} {break} } if {$Definition==""} {set Definition "Data not found"} } else { incr nbControle } #Marquage de nos genes en particulier # On ajoute ZZZZ devant nos access presents # On renvoi a la fin leur name (bordel) # On met a la place la definition if {[InterrogeActiChip2Ontario "" $block $row $col]=="1"} { set NewLigne [join [list $block $row $col \"ZZZZ_[join [lsort -unique [InterrogeActiChip2Ontario "" $block $row $col GscopeAccess]] "_"]_${Definition}\" $ID $name] "\t"] incr nbNosGenes } else { set NewLigne [join [list $block $row $col \"${Definition}\" $ID $name] "\t"] } AppendAuFichier $FichierOut "$NewLigne" continue } close $F Espionne "Original GalFile : $Fichier" Espionne "Modified GalFile : $FichierOut" Espionne "Spots :" Espionne " - Controls : $nbControle" Espionne " - NosGenes : $nbNosGenes" Espionne " - Total : $nbSpot" Espionne " - Bizar : $Bizar (No_seq, Unresolved, N/A, Unknow)" return "" } proc RefaitLeGalFile_UMCU {{Fichier ""} {FichierOut ""}} { Wup "Permet de refaire le GalFile pour mieux l utiliser" Wup "On le refait en relisant le gal file initial" Wup "et lui ajoutant la position des genes et les nouvelles definitions" ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## set RepUMCU "[RepertoireDuGenome]/Autres_Puces/UMCU" set RepGalFile "$RepUMCU/GalFile" if {$Fichier ==""} {set Fichier "$RepGalFile/UMCU_H25k11_juillet05.gal"} if {$FichierOut==""} {set FichierOut "$RepGalFile/Modified_UMCU_H25k11_juillet05.gal"} if {[file exists $FichierOut]} { while {1} { if {[OuiOuNon "$FichierOut already exists.\nPlease choose a file name for new GalFile"]} { set FichierOut [tk_getOpenFile -title "Choose a file" -initialdir "$RepGalFile"] if {$FichierOut==""} {continue} else {break} } } } set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set PremierBlock 0 set LesLignes "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #Block Row Column Name ID #1 1 1 LTP8 LTP6 if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLeHeader !="1" && [regexp -nocase "^ATF" $Ligne]} { set SurLeHeader 1 set LigneSplitee [split $Ligne "\t"] set InfoGalFileUMCU(ATF) [lindex $LigneSplitee 1] lappend InfoGalFileUMCU(Quoi) ATF set NDeLigne 0 lappend LesLignes $Ligne continue } if {$SurLeHeader=="1" && $NDeLigne=="0"} { set LigneSplitee [split $Ligne "\t"] set InfoGalFileUMCU(NMaxOptionalHeader) [lindex $LigneSplitee 0] set InfoGalFileUMCU(NDataFields) [lindex $LigneSplitee 1] lappend InfoGalFileUMCU(Quoi) NMaxOptionalHeader lappend InfoGalFileUMCU(Quoi) NDataFields set NDeLigne 1 lappend LesLignes $Ligne continue } if {$SurLeHeader=="1" && [expr $NDeLigne <= [set InfoGalFileUMCU(NMaxOptionalHeader)]]} { if {$PremierBlock=="0" && [regexp -nocase {Block[0-9]+=} $Ligne]} { set NBlock [expr [set InfoGalFileUMCU(NMaxOptionalHeader)] - $NDeLigne + 1] set InfoGalFileUMCU(NBlock) $NBlock lappend InfoGalFileUMCU(Quoi) NBlock set PremierBlock 1 } regsub -all "\"" $Ligne "" LigneSplitee set LigneSplitee [split $LigneSplitee "="] set InfoGalFileUMCU([lindex $LigneSplitee 0]) [string trim [lindex $LigneSplitee 1]] lappend InfoGalFileUMCU(Quoi) [lindex $LigneSplitee 0] incr NDeLigne lappend LesLignes $Ligne continue } else {set SurLeHeader 0} if {$SurLeHeader=="0" && ([regexp -nocase "^Block\t" $Ligne] || [regexp -nocase "^\"Block\"\t" $Ligne])} { set LesDataFields [join "$Ligne" "\t"] set InfoGalFileUMCU(LesDataFields) $LesDataFields set LesDataFields [split "$Ligne" "\t"] #Espionne "$LesDataFields" set LesDataFieldsOrdonnes "" foreach Field [list Block Row Column Name ID] { set Rang "" set Rang [lsearch -regexp $LesDataFields $Field] set RangDe($Field) $Rang Espionne "$Field $Rang" lappend LesDataFieldsOrdonnes [list $Field $Rang] } set LesDataFieldsOrdonnes [lsort -index 1 -integer -increasing $LesDataFieldsOrdonnes] Espionne "$LesDataFieldsOrdonnes" lappend InfoGalFileUMCU(Quoi) LesDataFields set SurLesDonnees 1 lappend LesLignes $Ligne continue } regsub -all {\"} $Ligne "" Ligne set LigneSplitee [split $Ligne "\t"] set Block [lindex $LigneSplitee [set RangDe(Block)]] set Row [lindex $LigneSplitee [set RangDe(Row)]] set Column [lindex $LigneSplitee [set RangDe(Column)]] set Name [lindex $LigneSplitee [set RangDe(Name)]] set ID [lindex $LigneSplitee [set RangDe(ID)]] set AccGscope [InterrogeActiChip2UMCU $ID AccessGscope] #Espionne "$Block - $ID" set NewLigne "" foreach ValeurRang $LesDataFieldsOrdonnes { set Valeur [lindex $ValeurRang 0] set Rang [lindex $ValeurRang 1] #Espionne "$Valeur -- [set $Valeur] -- $Rang" if {$Valeur=="Name"} { if {$AccGscope != ""} { #Espionne "$ID -- $AccGscope" set $Valeur "ZZZZ_${AccGscope}_[set $Valeur]" } #set $Valeur \"[set $Valeur]\" } lappend NewLigne \"[set $Valeur]\" } lappend LesLignes [join $NewLigne "\t"] #Double reference pour eviter les problemes lies au N/A set InfoGalFileUMCU($ID,Block) $Block set InfoGalFileUMCU($ID,Row) $Row set InfoGalFileUMCU($ID,Col) $Column set InfoGalFileUMCU($Block,$Row,$Column,Id) $ID set InfoGalFileUMCU($Block,$Row,$Column,Name) $Name set InfoGalFileUMCU($ID) 1 lappend InfoGalFileUMCU(LesIDs) [list $ID] continue } AppendAuFichier $FichierOut [join $LesLignes "\n"] close $F set InfoGalFileUMCU(LesIDs) [lsort -unique [set InfoGalFileUMCU(LesIDs)]] return "" } proc RefaitLeIOBFileEnGalFile_Ontario {{Fichier ""} {FichierOut ""} {GalFile ""}} { Wup "Transforme le fichier iobion en gal file" Wup "1 On recupere l entete du GalFile a copier" Wup "2 On traite le fichier iobion (.iob)" Wup " en echangeant les col et row nouveau header Block" ############################## #GAL FILE is BLOCK ROW COLUMN# ############################## set RepPuceOntario "[RepertoireDuGenome]/Autres_Puces/Ontario" set RepGalFile "$RepPuceOntario/GalFile" if {$Fichier ==""} {set Fichier "$RepGalFile/SS-H19k7.iob"} if {$FichierOut==""} {set FichierOut "$RepGalFile/Modified-SS-H19k7_iob.gal"} if {[file exists $FichierOut]} { while {1} { if {[OuiOuNon "$FichierOut already exists.\nPlease choose a file name for new GalFile"]} { set FichierOut [tk_getOpenFile -title "Choose a file" -initialdir "$RepGalFile"] if {$FichierOut==""} {continue} else {break} } } } if {$GalFile ==""} {set GalFile "$RepGalFile/SS-H19k7.gal"} #Recuperation d une entete d un autre GalFile set EnteteDuGalFile [LEnteteDuGalFile $GalFile] #On verifie que l entete est correcte #Pour cela on teste juste le 2 element de la deuxieme ligne, le nbr de colonne attendu set 2Ligne [lindex $EnteteDuGalFile 1] set First [lindex $2Ligne 0] set ToTest [lindex $2Ligne 1] if {$ToTest!="5"} { set ToTest 5 set NewElement "$First\t$ToTest" set EnteteDuGalFile [lreplace $EnteteDuGalFile 1 1 $NewElement] } foreach Ligne $EnteteDuGalFile { AppendAuFichier $FichierOut "$Ligne" } set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set NewLigne "" set Ligne "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { #grid col row sample gene desc flag #1 3 1 5548382 5548382 Seq_Ver:Hs.159410:BM549033:molybdenum cofactor synthesis 3:MOCS3:20:20q13.13:3:33800 if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if { [regexp -nocase "^grid" $Ligne]} { set Ligne "Block\tRow\tColumn\tName\tID" AppendAuFichier $FichierOut "$Ligne" continue } set LigneSplitee [split $Ligne "\t"] set grid [lindex $LigneSplitee 0] set col [lindex $LigneSplitee 1] set row [lindex $LigneSplitee 2] set sample [lindex $LigneSplitee 3] #set gene [lindex $LigneSplitee 4] set desc [lindex $LigneSplitee 5] #set flag [lindex $LigneSplitee 6] #Marquage de nos genes en particulier #On ajoute ZZZZ devant nos access presents if {[InterrogeActiChip2Ontario "" $block $row $col]=="1"} { set NewLigne [join [list $grid $row $col \"ZZZZ_[join [lsort -unique [InterrogeActiChip2Ontario "" $grid $row $col GscopeAccess]] "_"]_${desc}\" $sample] "\t"] incr nbNosGenes } else { set NewLigne [join [list $grid $row $col \"$desc\" $sample] "\t"] } AppendAuFichier $FichierOut "$NewLigne" continue } close $F return "" } proc RefaitMacsimsSansMoi {Nom} { set Fichier "[RepertoireDuGenome]/macsims/$Nom.xml" set Liste $macsims(Noms) set ListeSequences [EnleveLaSequenceDeMonOrganisme $Nom $Liste] set RepertoireDuMsf "leonrefait" ExtractionDeMaSequenceDuMSF $Nom # MacsimManu $Nom $RepertoireDuMsf } proc ReferenceClade {{Orga ""}} { global ReferenceClade if {$Orga!=""} { if {[info exists ReferenceClade]} { unset ReferenceClade } } if { ! [info exists ReferenceClade]} { set Orga "" FaireLire "Please enter the Reference Clade" while {$Orga==""} { set Orga [string trim [Entre "Fungi"]] regsub -all " " $Orga "_" Orga if {[Tax $Orga TaxId]==""} { FaireLire "I did not found the taxon '$Orga', please enter an otherone." set Orga "" continue } } set ReferenceClade $Orga } return $ReferenceClade } proc ReferenceGscope {args} { return "[WscopeScience]&[join $args "&"]" } proc References {Qui} { global References set Qui [string toupper $Qui] if {[info exists References($Qui)]} { return $References($Qui) } if {[info exists References("EstCharge")]} { return "" } set References("EstCharge") 1 foreach Ligne [LesLignesDuFichier "References.txt"] { scan $Ligne "%s %s %s %s" I G E A set Entete [string trim [StringSuivant $A dans $Ligne]] scan $Entete "%s" Access set A [string toupper $A] set References($A) $Entete set References([string toupper $Access]) $A } return [References $Qui] } proc ReferencesBSD {} { set FiAll "BSDall20080207.tfa" set i 0 set LesBons {} set LeTFAs {} foreach Access [LaSequenceDuTFAs $FiAll "LaListeDesAccess"] { set E [References $Access] lappend LesBons "$E $Access" set TFA [LaSequenceDuTFAs $FiAll $Access] set Seq [QueLaSequenceDuTexteTFA $TFA] set Bon [SequenceFormatTFA $Seq $E] lappend LeTFAs $Bon } AfficheVariable [join $LeTFAs "\n"] "" LeTFAs AfficheVariable [join $LesBons "\n"] "" LesBons } proc ReformateLeGalFile_ActiChip {Input Output} { Wup "Permet de lire et reecrire le gal file de ActiChip" Wup "Ajoute a Name les guillemets pour les caracteres speciaux" Wup "Ajoute a Spike RNA aux spikes" set SurLeHeader 0 set SurLesDonnees 0 set NDeLigne 0 set PremierBlock 0 set LesLignes "" set F [open "$Input"] while {[gets $F Ligne]>=0} { #Block Row Column Name ID #1 1 1 LTP8 LTP6 if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {$SurLeHeader !="1" && [regexp -nocase "^ATF" $Ligne]} { set SurLeHeader 1 set LigneSplitee [split $Ligne "\t"] set InfoGalFileActiChip(ATF) [lindex $LigneSplitee 1] lappend InfoGalFileActiChip(Quoi) ATF set NDeLigne 0 lappend LesLignes $Ligne continue } if {$SurLeHeader=="1" && $NDeLigne=="0"} { set LigneSplitee [split $Ligne "\t"] set InfoGalFileActiChip(NMaxOptionalHeader) [lindex $LigneSplitee 0] set InfoGalFileActiChip(NDataFields) [lindex $LigneSplitee 1] lappend InfoGalFileActiChip(Quoi) NMaxOptionalHeader lappend InfoGalFileActiChip(Quoi) NDataFields set NDeLigne 1 lappend LesLignes $Ligne continue } if {$SurLeHeader=="1" && [expr $NDeLigne <= [set InfoGalFileActiChip(NMaxOptionalHeader)]]} { if {$PremierBlock=="0" && [regexp -nocase {Block[0-9]+=} $Ligne]} { set NBlock [expr [set InfoGalFileActiChip(NMaxOptionalHeader)] - $NDeLigne + 1] set InfoGalFileActiChip(NBlock) $NBlock lappend InfoGalFileActiChip(Quoi) NBlock set PremierBlock 1 } regsub -all "\"" $Ligne "" Ligne set LigneSplitee [split $Ligne "="] set InfoGalFileActiChip([lindex $LigneSplitee 0]) [string trim [lindex $LigneSplitee 1]] lappend InfoGalFileActiChip(Quoi) [lindex $LigneSplitee 0] incr NDeLigne lappend LesLignes $Ligne continue } else {set SurLeHeader 0} if {$SurLeHeader=="0" && ([regexp -nocase "^Block\t" $Ligne] || [regexp -nocase "^\"Block\"\t" $Ligne])} { set LesDataFields [join "$Ligne" "\t"] set InfoGalFileActiChip(LesDataFields) $LesDataFields set LesDataFields [split "$Ligne" "\t"] #Espionne "$LesDataFields" set LesDataFieldsOrdonnes "" foreach Field [list Block Row Column Name ID] { set Rang "" set Rang [lsearch -regexp $LesDataFields $Field] set RangDe($Field) $Rang #Espionne "$Field $Rang" lappend LesDataFieldsOrdonnes [list $Field $Rang] } set LesDataFieldsOrdonnes [lsort -index 1 -integer -increasing $LesDataFieldsOrdonnes] #Espionne "$LesDataFieldsOrdonnes" lappend InfoGalFileActiChip(Quoi) LesDataFields set SurLesDonnees 1 lappend LesLignes $Ligne continue } set LigneSplitee [split $Ligne "\t"] set Block [lindex $LigneSplitee [set RangDe(Block)]] set Row [lindex $LigneSplitee [set RangDe(Row)]] set Column [lindex $LigneSplitee [set RangDe(Column)]] set Name [lindex $LigneSplitee [set RangDe(Name)]] set ID [lindex $LigneSplitee [set RangDe(ID)]] set NewLigne "" foreach ValeurRang $LesDataFieldsOrdonnes { set Valeur [lindex $ValeurRang 0] set Rang [lindex $ValeurRang 1] #Espionne "$Valeur -- [set $Valeur] -- $Rang" if {$Valeur=="Name"} { if {[EstUnSpikeRNA_ActiChip $ID]} { set $Valeur "Spike RNA" } set $Valeur \"[set $Valeur]\" } if {$Valeur=="ID"} { if {[regexp -nocase "filamin" $ID]} { regsub -nocase " " $ID "_" ID } } lappend NewLigne [set $Valeur] } lappend LesLignes [join $NewLigne "\t"] #Double reference pour eviter les problemes lies au N/A set InfoGalFileActiChip($ID,Block) $Block set InfoGalFileActiChip($ID,Row) $Row set InfoGalFileActiChip($ID,Col) $Column set InfoGalFileActiChip($Block,$Row,$Column,Id) $ID set InfoGalFileActiChip($Block,$Row,$Column,Name) $Name set InfoGalFileActiChip($ID) 1 lappend InfoGalFileActiChip(LesIDs) [list $ID] continue } AppendAuFichier $Output [join $LesLignes "\n"] close $F set InfoGalFileActiChip(LesIDs) [lsort -unique [set InfoGalFileActiChip(LesIDs)]] return "" } proc ReformateLePlateFile_ActiChip {Input Output} { Wup "Permet de lire et reecrire le fichier pour le plate file qui va donner le gal file de ActiChip" Wup "Ajoute a Name les guillemets pour les caracteres speciaux" set LesLignes "" set F [open "$Input"] while {[gets $F Ligne]>=0} { #Plate # Column Row Reference Definition GScope Access #1 A 1 ACT0017_Oligo36_BC009848 Actin, cytoplasmic 2 (Gamma-actin). ACT0017 if {! [regexp -nocase {[a-z0-9]+} $Ligne]} {continue} if {[regexp -nocase "^Plate" $Ligne]} { lappend LesLignes $Ligne continue } set LigneSplitee [split $Ligne "\t"] set Plate "" set Column "" set Row "" set Reference "" set Definition "" set GscopeAccess "" set Plate [lindex $LigneSplitee 0] set Column [lindex $LigneSplitee 1] set Row [lindex $LigneSplitee 2] set Reference [lindex $LigneSplitee 3] set Definition [lindex $LigneSplitee 4] set GscopeAccess [lindex $LigneSplitee 5] set Definition "\"$Definition\"" set NewLigne [list $Plate $Column $Row $Reference $Definition $GscopeAccess] lappend LesLignes [join $NewLigne "\t"] continue } close $F AppendAuFichier $Output [join $LesLignes "\n"] return "" } proc ReformateRes {} { set Li [LesLignesDuFichier "log"] set Tt 0 set Suite 0 foreach l $Li { if {[regexp "SPDB" $l]} { set n [string range $l 2 8] set R($n) {} if {$Suite} {set Tt 1} if {! $Tt && !$Suite} { set R(Alignt) {} set Suite 1 } } if {[regexp "NSeqs" $l]} { lappend R($n) [string range $l 8 end] if {! $Tt} {lappend R(Alignt) "NSeqs"} } if {[regexp "NSites" $l]} { lappend R($n) [string range $l 9 end] if {! $Tt} {lappend R(Alignt) "NSites"} } if {[regexp "Comment" $l]} { set Cmt [string trim [string range $l 19 end]] regsub -all " " $Cmt "" Cmt } if {[regexp "NClus" $l]} { lappend R($n) [string range $l 12 end] if {! $Tt} {lappend R(Alignt) "NClus$Cmt"} } if {[regexp "NGroup" $l] && [regexp "IdenGlob" $l]} { lappend R($n) [string range $l 18 end] if {! $Tt} {lappend R(Alignt) "NGrp$Cmt"} } if {[regexp "Compar" $l] && [regexp "IdenGlob" $l]} { lappend R($n) [string range $l 18 end] if {! $Tt} {lappend R(Alignt) "Cmpr$Cmt"} } } set f [open "resu.dat" w] foreach r [lsort [array names R]] { if {[llength [set R($r)]] == 0} {continue} puts $f "$r\t[join [set R($r)] "\t"]" } close $f 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 RefseqToCoord {Rep} { # Va chercher les coordonnées de NM a l'UCSC en choisissant la database # d'apres l'organisme indiqué dans l'EpouvanBlast set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RefseqToCoord : Start" set FichierIn [open "$Rep/EpouvanBlast2.csv" "r"] set FichierOut [open "$Rep/RefseqToCoord.csv" "w"] set FichierDesRequetes [open "/tmp/RefseqToCoord.bql" "w"] Espionne "$timestamp|RefseqToCoord : Building UCSC queries" set CompteurRgEcrits 0 set CompteurLus 0 while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne numero NM NP NMt Organism Expect if { [regexp {troglodytes|Drosophila_melanogaster|Caenorhabditis|Danio|Mus} $Ligne] } { incr CompteurLus regsub "Drosophila_melanogaster" $Organism "droso" Organism regsub "Danio_rerio" $Organism "zebrafish" Organism regsub "Pan_troglodytes" $Organism "chimp" Organism regsub "Mus_musculus" $Organism "mouse" Organism regsub "Caenorhabditis_elegans" $Organism "celegans" Organism puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE SELECT chrom, txStart, txEnd FROM ucsc$Organism.refGene WHERE name='$NMt'" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } } close $FichierDesRequetes3 close $FichierDesRequetesExecutees set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RefseqToCoord : Executing UCSC queries" exec /biolo/bird/bin/birdql_client.sh /tmp/RefseqToCoord.bql bird /tmp/RefseqToCoord.res set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RefseqToCoord : Parsing UCSC queries" set CompteurTotalEcrit 0 set FichierDesRequetesExecutees [open "/tmp/RefseqToCoord.res" "r"] set FichierIn [open "$Rep/EpouvanBlast2.csv" "r"] while { [gets $FichierDesRequetesExecutees Ligne3] >=0 } { incr CompteurTotalEcrit gets $FichierDesRequetesExecutees Ligne3 gets $FichierIn Ligne4 puts $FichierOut "$Ligne4 $Ligne3" } close $FichierDesRequetesExecutees close $FichierOut close $FichierIn set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|RefseqToCoord : End" Espionne "$timestamp|RefseqToCoord : Read = $CompteurLus" Espionne "$timestamp|RefseqToCoord : Uniprot found = $CompteurRsEcrits ($CompteurRsVidesEcrits unfound)" Espionne "$timestamp|RefseqToCoord : Refseq Xref found = $CompteurUcscEcrits" Espionne "$timestamp|RefseqToCoord : Written = $CompteurTotalEcrit" } proc RegardeDsAccessDesProteinesEtDesmRNAsChoisis {} { set Fichier "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" set LesLignes [LesLignesDuFichier $Fichier] foreach Ligne $LesLignes { scan $Ligne "%s %s" EVI Prot #puts "$EVI $Prot" if {![regexp "NoProtein" $Prot]} { puts "$EVI $Prot" } } } proc RegenereEntrees {} { global OrdTmpDir for {set i 1} {$i < 30} {incr i} { set a [format "SM%02d" $i] set f [file join [RepertoireDuGenome] tfasdescopains $a] set LNoms {} catch {unset Seqs} puts "Traite $a" puts "===========" DecortiqueUnTFA $f LNoms Seqs foreach n $LNoms { switch -regexp -- $n { {^Cin_} {set g "Ciona intestinalis"} {^Tps_} {set g "Thalassiosira pseudonana"} default {set g ""} } if {$g eq ""} {continue} puts "\t$n" set Ftmp [file join $OrdTmpDir FTfaTmp] set Fout [file join $OrdTmpDir FBlaTmp] set s [string range [set Seqs($n)] 100 300] if {[regsub -all "X" $s "" tmp]} { set s [string range [set Seqs($n)] 200 400] } EcritLeTfa $Ftmp $n $s # catch {exec [BlastallExe] -d protein -i $Ftmp -p blastp -b 10 -v 10 -o $Fout} catch {exec blastcl3 -p blastp -i $Ftmp -u "${g}\[organism\]" -o $Fout} Msg if {! [file exists $Fout]} { puts "Probleme with $a" continue } DecortiqueBlast $Fout "" 1 "" BId Acc DE Pr PN Ali puts "Bid [lindex $BId 0]" puts "Acc [lindex $Acc 0]" puts "DE [lindex $DE 0]" puts "Prf [lindex $Pr 0]" puts "PN [lindex $PN 0]" puts "Ali :" foreach e [lindex $Ali 0] { puts "$e" } file delete -force $Ftmp $Fout puts "--> $a $n [lindex $BId 0]" lappend Keep [list $a $n [lindex $BId 0]] set Acc {} set BId {} set DE {} set Pr {} set PN {} set Ali {} puts "" } puts "" } exit } proc RegexpEscape {re} { return [regsub -all {[*+?.^$\\()\[\]{}|]} $re {\\\0}] } proc RegionAlignerDansLeBlast {CodeGscope PosDebRelative PosFinRelative accessPDB} { #QR002 1 1 SPT:Q7TMC7_RAT iinc 97.46 0.0 21 690 21 676 set FichierBlastP "[RepertoireDuGenome]/blastp/$CodeGscope" set FichierPsiBlastP "[RepertoireDuGenome]/psiblastp/$CodeGscope" set accepter "N" #transforme le PDB_ en PDB:... Espionne "Verifie que la region du pdb soit un hit du blast" Espionne "PDB: $accessPDB" set taille [string length $accessPDB] set accessPDB "PDB:[string range $accessPDB 4 $taille]" Espionne "ACCPDB:$accessPDB" set infoSeqCible [ChaqueHitDuBlastP $FichierBlastP "" $accessPDB] Espionne "infoSeqCible: $infoSeqCible" #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!DONNE PAS LES BONNES POSITIONS!!!!! if {$infoSeqCible==""} { if {[file exists $FichierPsiBlastP]} { Espionne "Je cherche dans spliblast car ce PDB n'est pas dans le blast" set infoSeqCible [ChaqueHitDuBlastP $FichierPsiBlastP "" $accessPDB] } } if {$infoSeqCible==""} { return $accepter } Espionne "infoSeqCible: $infoSeqCible" foreach positionBlast $infoSeqCible { #Espionne "$positionBlast" #modifie les noms parcequ'il veulent rien dire le noms des variables de du scan scan $positionBlast "%s %s %s %s %s %s %s %s %s %s %s" query n nn cible truc valeur valeur2 startQ endQ startCible endCible Espionne "PosDebRelative: $PosDebRelative ; startCible: $startCible" if {$PosDebRelative>=$startCible} {return "Y"} } return $accepter } proc Regions {FichierMacsimXml {QueryAccess ""}} { package require tdom if {$QueryAccess eq ""} {regexp {^[^.]+} [file tail $FichierMacsimXml] QueryAccess} set tfa [open "[file dirname $FichierMacsimXml]/$QueryAccess.regions.tfa" "w"] set brut [open "[file dirname $FichierMacsimXml]/$QueryAccess.regions.brut" "w"] set fh [open $FichierMacsimXml "r"] set domDoc [dom parse -channel $fh] set root [$domDoc documentElement] close $fh foreach n [$root selectNodes "//sequence"] { set group [string trim [$n selectNodes "string(.//group\[1\])"]] lappend groups($group) $n } foreach g [lsort -integer [array names groups]] { foreach n $groups($g) { set access [string trim [$n selectNodes "string(.//accession)"]] set sequence [string trim [$n selectNodes "string(seq-data)"]] # puts $tfa [formatFasta $access $sequence] set mask [string repeat "0" [string length $sequence]] array unset index array set index [seqPos2AlnPosIndex $sequence] # foreach pos [array names index] { # set mask [string replace $mask [expr $index($pos) - 1] [expr $index($pos) - 1] "1"] # } foreach ft [$n selectNodes ".//fitem\[ftype=\"REGION\"\]"] { set type [string trim [$ft selectNodes "string(ftype)"]] set start [string trim [$ft selectNodes "string(fstart)"]] set stop [string trim [$ft selectNodes "string(fstop)"]] set color [string trim [$ft selectNodes "string(fcolor)"]] set score [string trim [$ft selectNodes "string(fscore)"]] set note [string trim [$ft selectNodes "string(fnote)"]] if {$start > $stop} { set tmp $start set start $stop set stop $tmp } if {$start < 1} {continue} set mask [string replace $mask [expr $index($start) - 1] [expr $index($stop) - 1] [string repeat "1" [expr $index($stop) - $index($start) + 1]]] } puts $tfa [formatFasta $access $mask] puts $brut "$access $mask" } puts $tfa [formatFasta "SPACER" ""] puts $brut "SPACER" } close $tfa close $brut } proc RegisterNewMailServer {} { global CMDef db set imapID $CMDef(imapID) # get folders set Lfold [::imap4::folders $imapID -inline] # check for INBOX folder, if exists, take it , or take first set iInbox [lsearch -nocase -index 0 $Lfold "\"INBOX\""] if {$iInbox == -1} { set iInbox 0 } set CMDef(currFolder) [lindex [lindex $Lfold $iInbox] 0] ::imap4::select $imapID $CMDef(currFolder) # fill database $db eval {begin transaction} $db eval {insert into mailbox values(NULL,$CMDef(ServerName),$CMDef(ServerAddress),$CMDef(Username),$CMDef(Password),$CMDef(UseSSL),$CMDef(Port))} set pkmb [$db last_insert_rowid] set CMDef(pk_mailbox) $pkmb set CMDef(Lfolders) [list] foreach f $Lfold { set folder [lindex $f 0] lappend CMDef(Lfolders) $folder $db eval {insert into folder values(NULL,$pkmb,$folder,0)} } $db eval {commit} set CMDef(currFolderPk) [$db eval {select pk_folder from folder where pk_mailbox = $CMDef(pk_mailbox) and name = $CMDef(currFolder)}] return } proc ReglePourAli {Largeur {Space ""} {Pointeur ""} {Pas ""} {Debut ""}} { if {$Space==""} { set Space "\\ " } if {$Debut==""} { set Debut 1 } if {$Pas==""} { set Pas 10 } if {$Pointeur==""} { set Pointeur "." } if {$Pointeur=="NoPoint"} { set Pointeur "" } set Regle "$Debut[string repeat " " [expr $Pas-[string length $Debut]-1]]" set X [expr $Pas-[string length $Pointeur]] set Format "$Pointeur%-${X}s" set N $Pas while {$N<$Largeur} { append Regle [format $Format $N] incr N $Pas } regsub -all " " $Regle $Space Regle return $Regle } proc RegroupeByDomain {{listeSequence ""} TypeDeDomain} { set IdenticalInformation {} set Concat "" set Rep "" set listeDomain {} #creation d'un repertoire #ICI ajouter DomPfam!!! switch $TypeDeDomain { "pfam" { if { ! [file exists "GPfam"]} { File mkdir [RepertoireDuGenome]/GPfam } set Concat "ConcatPfam" set Rep "GPfam" } "domain" { if { ! [file exists "GDomain"]} { File mkdir [RepertoireDuGenome]/GDomain } set Concat "ConcatDomain" set Rep "GDomain" } "region" { if { ! [file exists "GRegion"]} { File mkdir [RepertoireDuGenome]/GRegion } set Concat "ConcatRegion" set Rep "GRegion" } "DomPfam" { if { ! [file exists "GDomPfam"]} { File mkdir [RepertoireDuGenome]/GDomPfam } set Concat {"ConcatPfam" "ConcatDomain"} set Rep "GDomPfam" } } foreach Seqcible $listeSequence { Espionne "PABCible: $Seqcible" #fichier de sauvegarde set Fichier [RepertoireDuGenome]/$Rep/$Seqcible set fichierMSF [RepertoireDuGenome]/msf/$Seqcible #recupere la taille de la plus grande sequence (sert pour calcule l'echelle des images) set PlusGrandeSeq 0 set NbDomainMax 0 if { [file exists "[RepertoireDuGenome]/macsimXml/$Seqcible.aj"]} { set fileMacsim "[RepertoireDuGenome]/macsimXml/$Seqcible.aj" } else { set fileMacsim "[RepertoireDuGenome]/macsimXml/$Seqcible" } set LesSequences [FromMacsims $fileMacsim "ListOf" "Names"] foreach NomSeq $LesSequences { Espionne "-------------->Protein en cours:$NomSeq" #ne pas tenir compte des pbs dans la creation des images if {[regexp {^[1-9][A-Z0-9]{3}_[A-Z]} $NomSeq]} { continue } #recupere la taille de la sequence set SeqLength [FromMacsims $fileMacsim $NomSeq "Length"] if {$PlusGrandeSeq<$SeqLength} {set PlusGrandeSeq $SeqLength} #ICI MODIFICATION POUR AVOIR DABORD PAF PUIS DOMAIN OU CONTRAIRE PAS D'importance.... #parcours la liste des concat pfam et domain puis garde le tous... set lespfams "" set Llespfams {} set LlespfamsEtPosition {} #Test du foreach foreach Iparse $Concat { Espionne "parse:$Iparse" set annotation [FromMacsims $fileMacsim $NomSeq $Iparse] #set annotation [FromMacsims $fileMacsim $NomSeq $Concat] foreach val $annotation { Espionne "---> val:$val" #nvx code les lignes entre les # set pos [split [lindex [split $val "/"] 1] "-"] #set tabpfam [split $pfam ";"] set deb [lindex $pos 0] set fin [lindex $pos 1] #distingue PFAM de Domain... if {$Iparse=="ConcatPfam"} { set pfam [lindex [split $val " "] 0] if {[regexp {(.*)from.*} $pfam a p]} { set pfam $p } elseif {[regexp {(.*)/.*} $pfam a p] } { set pfam $p } #ne le faire que si y a un _ sinon provoque des erreurs if {[regexp {^PROP_(.*)} $pfam a p]} { set pfam $p } } elseif {$Iparse=="ConcatDomain"} { #ici faire attention virer les chiffres exemple avec kinase 1 et kinase 2 meme chose sauf comme il y en a deux noter 1 et 2 vire ces chiffres #comment vire le chiffre... set pfam [lindex [split $val "."] 0] if {[regexp {(.*)\d.*} $pfam a p]} { set pfam $p } if {[regexp {(.*)from.*} $pfam a p]} { set pfam $p } elseif {[regexp {(.*)/.*} $pfam a p] } { set pfam $p } #ne le faire que si y a un _ sinon provoque des erreurs if {[regexp {^PROP_(.*)} $pfam a p]} { set pfam $p } } #ici je dois filtre les information pour ne pas avoir des domaines qui soient les memes que les pfams set dejavue "no" if {$Iparse=="ConcatDomain"} { Espionne "ConcatDomain" foreach valeur $LlespfamsEtPosition { Espionne "Deja selectionne -->$valeur" Espionne "Nouvelle en cours de selection --> $pfam:$deb:$fin" set valeurs [split $valeur ":"] set debut [lindex $valeurs 1] set end [lindex $valeurs 2] Espionne "[expr $debut-10]<=$deb && $deb<=[expr $debut+10] && [expr $end-10]<=$fin && $fin<=[expr $end+10]" if {[expr $debut-10]<=$deb && $deb<=[expr $debut+10] && [expr $end-10]<=$fin && $fin<=[expr $end+10]} { Espionne "deja vue" set dejavue "OK" break; } } if {$dejavue!="OK"} { Espionne "pas present ajoute ce domaine" lappend listeDomain [string trim $pfam] set pfamPosition "$pfam:$deb:$fin" set pfamPosition [string trim $pfamPosition] set present [lsearch -exact $LlespfamsEtPosition $pfamPosition] if {$present==-1} { lappend LlespfamsEtPosition $pfamPosition } } } else { #lappend filetmp " $ip;$deb;$end;$inf" Espionne "Pas de ConcatDomain charge dans la liste pfam:$pfam" lappend listeDomain [string trim $pfam] set pfamPosition "$pfam:$deb:$fin" set pfamPosition [string trim $pfamPosition] set present [lsearch -exact $LlespfamsEtPosition $pfamPosition] if {$present==-1} { lappend LlespfamsEtPosition $pfamPosition } } } } #//test #ici parcourir la liste puis split par : recupere lindex 0 foreach pfamPosition $LlespfamsEtPosition { Espionne "pfamPosition: $pfamPosition" lappend Llespfams [lindex [split $pfamPosition ":"] 0] } set Llespfams [lsort -dictionary $Llespfams] #recupere le nombre de pfam max pour une protein set nbDomainCurrent [llength $Llespfams] if {$NbDomainMax<$nbDomainCurrent} {set NbDomainMax $nbDomainCurrent} set lespfams [join $Llespfams ";"] set lespfams [string trimright $lespfams ";"] #ici recuper le nombre de pfam max if {[info exists groupe($lespfams)]} { set nameac $groupe($lespfams) append nameac ";$NomSeq" #append nameac "($orga)" set groupe($lespfams) $nameac Espionne "nameac::$nameac" } else { set groupe($lespfams) $NomSeq Espionne "!!!!$NomSeq" } } #ecrit dans un fichier set f [open $Fichier w] foreach key [array names groupe] { puts $f "$key=$groupe($key)" } close $f #appel une procedure qui cree le fichier des domaines/couleur set listeDomain [lsort -unique $listeDomain] RelationDomainCouleur "" $listeDomain $Seqcible $TypeDeDomain set FileLength $Fichier append FileLength "Length" lappend MaPlusGrandeLength $PlusGrandeSeq SauveLesLignes $MaPlusGrandeLength dans $FileLength #probleme ici car si les domain et les pfam sont les meme comment je fait pour verifie cela... #peutetre fait deja un trie ici le meme que j'ai fait dans getMacimsInf... #comme cela je n'ai que les vrai domaine present pas de duplication!!!! set FileMaxDom $Fichier append FileMaxDom "DomMax" SauveLesLignes $NbDomainMax dans $FileMaxDom } } proc RegroupeLesVraisJumeaux {FichierEntree FichierSortie} { Wup "Creer les jumeaux sans redondance a partir de la liste des jumeaux de tous" #Stockage des Jumeaux des PABs set F [open "$FichierEntree"] while {[gets $F Ligne]>=0} { if {[regexp "no Fasta" $Ligne]} {set Jumeaux([lindex $Ligne 0]) "";continue} set TousLesJumeaux [join $Ligne " "] set Jumeaux([lindex $TousLesJumeaux 0]) [lrange $TousLesJumeaux 1 end] lappend MesPABs [lindex $TousLesJumeaux 0] } close $F #Traitement si un est deja vu on laisse tombe foreach PAB $MesPABs { set SesJumeaux [set Jumeaux($PAB)] set MesVraiJumeau($PAB) "" if {[info exists DejaTraite($PAB)]} {continue} foreach Jumeau $SesJumeaux { if { [info exists DejaTraite($Jumeau)]} {continue} if {! [regexp -nocase $PAB [set Jumeaux($Jumeau)]]} {continue} set DejaTraite($Jumeau) 1 lappend MesVraiJumeau($PAB) $Jumeau } set DejaTraite($PAB) 1 AppendAuFichier $FichierSortie "$PAB [set MesVraiJumeau($PAB)]" } return "" } proc RegroupementWobble {} { global classes_default Wobble Wobble_pourcent classes set liste_acides [info globals Acide*] global {*}${liste_acides} foreach acide $liste_acides { set nom_acide [string index $acide end] puts "\nACIIIIde ${nom_acide}" WobbleDeLacide ${nom_acide} update global Wobble_[set nom_acide] Wobble_pourcent_[set nom_acide] # S'il n'y a pas de wobble pour l'acide # OU s'il n y a qu'un tRNA (1 anticodon) # on copie le tableau brut if {! [info exists Wobble_[set nom_acide]]} { if {! $::traiteglobal} { continue } else { array set Wobble_[set nom_acide] [array get Acide_[set nom_acide]] } } # recupere liste des anticodons pour l'acide set Lk [array names Wobble_${nom_acide}] set lcd {} foreach k $Lk { lassign [split $k ,] cd cl lappend lcd $cd } # 1 seul trna pour l'acide if {[llength [lsort -unique $lcd]] <= 1} { if {! $::traiteglobal} { continue } } # Puis on regroupe les classes non-demandees # Met les non-demande dans la DERNIERE classe set tank [lindex $classes end] foreach cd $lcd { foreach {cle valeur} [array get Wobble_$nom_acide $cd,*] { set indices_liste [split $cle ","] lassign $indices_liste codon classe if {[lsearch $classes $classe] == -1 && $classe ne $tank} { if {[lsearch $classes $tank] != -1} { incr Wobble_[set nom_acide]($codon,$tank) $valeur } unset Wobble_[set nom_acide]($cle) } } } PourcentageDeLacide $nom_acide } return } proc RegroupementWobblePourProt {} { global classes_default Wobble Wobble_pourcent classes set liste_acides [info globals Aprot*] global {*}${liste_acides} foreach acide $liste_acides { set nom_acide [string index $acide end] WobbleDeLacidePourProt ${nom_acide} update puts "--- Aprot ---" parray Aprot_${nom_acide} global Wprot_[set nom_acide] Wprot_pourcentE_[set nom_acide] # S'il n'y a pas de wobble pour l'acide # OU s'il n y a qu'un tRNA (1 anticodon) # on copie le tableau brut if {! [info exists Wprot_[set nom_acide]]} { if {! $::traiteglobal} { continue } else { array set Wprot_[set nom_acide] [array get Aprot_[set nom_acide]] } } # liste des anticodons pour l'acide set Lk [array names Wprot_${nom_acide}] set lcd {} foreach k $Lk { lassign [split $k ,] cd cl lappend lcd $cd } set lcd [lsort -unique $lcd] # 1 seul trna pour l'acide if {[llength $lcd] <= 1} { if {! $::traiteglobal} { continue } } # on regroupe les classes non-demandees # Met les non-demande dans la DERNIERE classe set tank [lindex $classes end] foreach cd $lcd { foreach {cle valeur} [array get Wprot_$nom_acide $cd,*] { lassign [split $cle ,] codon classe if {[lsearch $classes $classe] == -1 && $classe ne $tank} { if {[lsearch $classes $tank] != -1} { incr Wprot_[set nom_acide]($codon,$tank) $valeur } unset Wprot_[set nom_acide]($cle) } } } puts "--- debug [set ::Nbr${nom_acide}] -----" parray Wprot_${nom_acide} PourcentageDeLacidePourProt $nom_acide puts "--- Pourcent ---" parray ::Wprot_pourcentE_${nom_acide} } return } 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 RejectScerFlo {} { foreach Nom [ListeDesPABs] { if {[NombreDeCopainsDansBlast $Nom]==0} { RejectIt $Nom "0 hit ParDecret" } } } proc RejetteLaBoite {Boite} { global LimiteGauche LimiteDroite set Nom [Box $Boite nom] if { ! [YaPABouTROUouTRNAouARNenDebutDe $Nom]} { return 1 } if { ! [info exists LimiteGauche]} { return 0 } set Debut [Box $Boite debut] set Fin [Box $Boite fin] if {$Fin < $LimiteGauche || $LimiteDroite < $Debut} { return 1 } return 0 } proc RelanceGrilladin {} { #rR On ne fournit au Grilladin que ceux qui manquent ... dans le nouveau répertoire ProttfaCourant NousAllonsAuBoulot [RepertoireDuGenome] set ProttfaCourant "prottfa_[Date]" file mkdir $ProttfaCourant foreach Nom [ListeDesPABs] { if {[FileExists [GscopeFile $Nom blastp]]} { continue } file copy [GscopeFile $Nom prottfa] [GscopeFile $Nom $ProttfaCourant] } set Reponse [CompleteBlastGscopeProject "" "" $ProttfaCourant] OnRevientDuBoulot return $Reponse } proc RelanceMacsimPourLesFaux {Fichier} { set RepertoireMsf "msf" foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom Espionne "$Nom" set FichierMacsim "[RepertoireDuGenome]/macsim/$Nom.xml" set FichierMsf "[RepertoireDuGenome]/$RepertoireMsf/$Nom" #if {[file exists $FichierMacsim]} {continue} if {! [file exists $FichierMsf]} {continue} MacsimManu $Nom $RepertoireMsf } } proc RelationDomainCouleur {{repertoire ""} listeDesDomains protein {TypeDeDomain ""}} { #faire une liste de couleur set Lcouleur "red blue green DarkRed pink purple silver orange magenta Brown Cyan DarkOrchid Gray Olive Navy Violet cyan darksalmon darkseagreen dodgerblue fuchsia indigo lime lightslategray mediumorchid lightsteelblue peru saddlebrown slategray orangered seagreen slategray tan tomato yellowgreen rosybrown peachpuff sienna thistle powderblue rosybrown royalblue yellow plum PaleVioletRed papayawhip teal wheat coral bisque honeydew firebrick MediumVioletRed cornsilk mistyrose IndianRed deepPink lightPink khaki chartreuse YellowGreen SpringGreen chocolate burlywood darkKhaki DarkOliveGreen mintCream aquamarine azure turquoise cadetBlue CornflowerBlue LavenderBlush hotPink maroon black AliceBlue gold Seashell Snow SkyBlue Moccasin OliveDrab MediumSpringGreen NavajoWhite LightCoral Gainsboro Aqua Crimson Beige DimGray Goldenrod Lavender Ivory LawnGreen" #ajouter des couleurs ici pour etre sure d'en avaoir assez pour l'instant probleme avec creation des region!!!!!!!! bon courage!! set listeDomColor {} if {$repertoire==""} { switch $TypeDeDomain { "pfam" { if { ! [file exists "GPfam"]} { File mkdir [RepertoireDuGenome]/GPfam } set repertoire "[RepertoireDuGenome]/GPfam" } "domain" { if { ! [file exists "GDomain"]} { File mkdir [RepertoireDuGenome]/GDomain } set repertoire "[RepertoireDuGenome]/GDomain" } "region" { if { ! [file exists "GRegion"]} { File mkdir [RepertoireDuGenome]/GRegion } set repertoire "[RepertoireDuGenome]/GRegion" } "DomPfam" { if { ! [file exists "GDomPfam"]} { File mkdir [RepertoireDuGenome]/GDomPfam } set repertoire "[RepertoireDuGenome]/GDomPfam" } } } set File "$repertoire/$protein" append File "Color" set i 0 foreach domaine $listeDesDomains { lappend listeDomColor "$domaine;[lindex $Lcouleur $i]" incr i } SauveLesLignes $listeDomColor dans $File } proc RelationDomainCouleurBilan {{repertoire ""} TypeDeDomain} { #faire une liste de couleur set Lcouleur "red blue green DarkRed pink purple silver orange magenta Brown Cyan DarkOrchid Gray Olive Navy Violet cyan darksalmon darkseagreen dodgerblue fuchsia indigo lime lightslategray mediumorchid lightsteelblue peru saddlebrown slategray orangered seagreen slategray tan tomato yellowgreen rosybrown peachpuff sienna thistle powderblue rosybrown royalblue yellow plum PaleVioletRed papayawhip teal wheat coral bisque honeydew firebrick MediumVioletRed cornsilk mistyrose IndianRed deepPink lightPink khaki chartreuse YellowGreen SpringGreen chocolate burlywood darkKhaki DarkOliveGreen mintCream aquamarine azure turquoise cadetBlue CornflowerBlue LavenderBlush hotPink maroon black AliceBlue gold Seashell Snow SkyBlue Moccasin OliveDrab MediumSpringGreen NavajoWhite LightCoral Gainsboro Aqua Crimson Beige DimGray Goldenrod Lavender Ivory LawnGreen" #ajouter des couleurs ici pour etre sure d'en avaoir assez pour l'instant probleme avec creation des region!!!!!!!! bon courage!! set listeDomColor {} if {$repertoire==""} { switch $TypeDeDomain { "pfam" { if { ! [file exists "GPfam"]} { File mkdir [RepertoireDuGenome]/GPfam } set repertoire "[RepertoireDuGenome]/GPfam" } "domain" { if { ! [file exists "GDomain"]} { File mkdir [RepertoireDuGenome]/GDomain } set repertoire "[RepertoireDuGenome]/GDomain" } "region" { if { ! [file exists "GRegion"]} { File mkdir [RepertoireDuGenome]/GRegion } set repertoire "[RepertoireDuGenome]/GRegion" } } } set ListeDesDomaines {} #recupere l'ensemble des domaines pour toutes les proteins!! set Liste [ListeDesPABs] foreach puz $Liste { append puz "Color" set file "$repertoire/$puz" Espionne $file if { [file exists $file]} { set lignes [LesLignesDuFichier $file] foreach ligne $lignes { set domaine [lindex [split $ligne ";"] 0] lappend ListeDesDomaines $domaine } } } #elimine les doublons set ListeDesDomaines [lsort -unique $ListeDesDomaines] set File "$repertoire/BilanColor" set i 0 foreach domaine $ListeDesDomaines { lappend listeDomColor "$domaine;[lindex $Lcouleur $i]" incr i } SauveLesLignes $listeDomColor dans $File } proc RelativeAdaptivenessPourUnCodon {Codon FichierCod} { set N [PourUnCodon $Codon $FichierCod n] set AA [PourUnCodon $Codon $FichierCod aa] set Nmax [NmaxPourUnAA $AA $FichierCod] set W [expr $N/$Nmax] return $W } proc ReleveBtnFeature {w} { $w configure -relief raised -background green1 -foreground black LesFeaturesUtilisees [$w cget -text] 0 return } proc RelieLesOperons {K Position} { global LesOrdresPourGif set PourGif [string equal $K "OrdrePourGif"] foreach Boite [ListeDesPABs] { set Nom [Box $Boite nom] set ListeOMO [ListeDesOrganismesAyantMemeOperon $Nom] if { [llength $ListeOMO] < 2 } { continue } set Voisin [lindex $ListeOMO 0] set Couleur [CouleurSuivantOrganismesAyantMemeOperon $Nom] if { [Box $Nom orient] == "F" } { set yHautMoi [expr $Position-30] set yBasMoi [expr $Position-3] set StartMoi 270. } else { set yHautMoi [expr $Position+3] set yBasMoi [expr $Position+30] set StartMoi 0. } if { [Box $Voisin orient] == "F" } { set yHautLui [expr $Position-30] set yBasLui [expr $Position-3] set StartLui 180. } else { set yHautLui [expr $Position+3] set yBasLui [expr $Position+30] set StartLui 90. } if {$PourGif || 1} { set xMoi [Milieu $Nom] set xLui [Milieu $Voisin] } else { set Moi [$K find withtag $Nom] set Lui [$K find withtag $Voisin] scan [$K coords $Moi] "%f %f %f %f" a b c d set xMoi [expr ($a+$c)/2] set yMoi [expr ($b+$d)/2] scan [$K coords $Lui] "%f %f %f %f" a b c d set xLui [expr ($a+$c)/2] set yLui [expr ($b+$d)/2] } $K create arc $xLui $yHautLui $xMoi $yBasLui -start $StartLui -extent 90. -style arc -outline $Couleur -width 2 -tags [list "WebEnter" [TexteOMO $Nom "Long"]] $K create arc $xLui $yHautMoi $xMoi $yBasMoi -start $StartMoi -extent 90. -style arc -outline $Couleur -width 2 -tags [list "WebEnter" [TexteOMO $Nom "Long"]] set xMilieu [expr ($xMoi+$xLui)/2] set yMilieu [expr ($yHautMoi+$yBasMoi)/2] $K create text $xMilieu $yMilieu -anchor center -font {Courier 2} -text [TexteOMO $Nom "Court"] -tags [list "Arc" "$Nom/$Voisin"] $K bind "Arc" "PiqueArc $K %x %y" $K bind "Arc" "PiqueArc $K %x %y Efface" } if {$PourGif && [info exists LesOrdresPourGif]} { return $LesOrdresPourGif } } proc RelitFichierNuca {FichierNuca} { Wup "Relit une sortie Nuca et permet de la relire en fichier .traiter" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" if { ! [regexp "/" $FichierNuca]} { set FichierNuca "$RepXHda/$FichierNuca" } if { ! [file exists $FichierNuca]} { FaireLire "$FichierNuca doesn't exist. I cancel RelitFichierNuca" return "" } set NewFile {} foreach ligne [LesLignesDuFichier $FichierNuca] { if { [regexp "Number of clusters" $ligne] } { lappend NewFile $ligne continue } if { [regexp "^Cluster" $ligne] } { lappend NewFile $ligne continue } if {$ligne==""} { lappend NewFile "\n" continue } scan $ligne "%s" PAB lappend NewFile $PAB } set FichierNewFile "$FichierNuca.traiter" return "[SauveLesLignes $NewFile dans $FichierNewFile] created." } proc RelitLeFichierLesPIDParRapportALaStructure {{Fichier ""} {FichierOut ""}} { Wup "Permet de relire le fichier des pourcentages d identite calcules par Luc" Wup "Les PID sont faits par rapport a la PDB 1yag_a et les structures IIaires sont issues de la PDB" Wup "On relit puis trie les Access en fonction de leur famille et les moyennes sont ainsi calculees" if {$Fichier == ""} { set Fichier "[RepertoireDuGenome]/PIDSecStruct_all" } if {$FichierOut == ""} { set FichierOut "[RepertoireDuGenome]/PIDSecStruct_all_Ordered" } #On recupere les familles d ARP et ont les nettoie, on ajoute aussi unknown set LesCategories [InterrogeLesInfosDesARPs LesCategories] regsub -all {\-\-\-\-} $LesCategories "" LesCategories regsub -all "Les" $LesCategories "" LesCategories lappend LesCategories "Unknown" #Espionne "$LesCategories" set i 0 set Structure "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} #chaine a #chaine a #chaine A #>Sheet 862 866 #P02568 Q9UTQ7 40.0 5 5 if {[string first ">" $Ligne]=="0"} { incr i set Structure $Ligne set TabStruct($i) $Structure continue } if {$Structure == ""} {continue} set LigneSplitee "" set Access "" set Categorie "" set LigneSplitee [split $Ligne " "] set Access [lindex $LigneSplitee 1] set Categorie [InterrogeLesInfosDesARPs [string toupper $Access] Categorie] if {$Categorie == ""} { set Categorie "Unknown" } else { regsub -all {\-\-\-\-} $Categorie "" Categorie regsub "Les" $Categorie "" Categorie } #Espionne ">Access $Access -- $Categorie" if {! [info exists TabStruct($i,$Categorie)]} { set TabStruct($i,$Categorie) "" lappend TabStruct($i,$Categorie) $Ligne } else { lappend TabStruct($i,$Categorie) $Ligne } } close $F set NbStruct $i Espionne "NbStruct: $i" for {set i 1} {$i<=$NbStruct} {incr i} { AppendAuFichier $FichierOut "[set TabStruct($i)]" Espionne "[set TabStruct($i)]" set MoyIDTotal "" set Show_LesCategorie "" set Show_LesMoyID "" foreach Cat $LesCategories { #AppendAuFichier $FichierOut "$Cat" #AppendAuFichier $FichierOut [join "[set TabStruct($i,$Cat)]" "\n"] set MoyID "" if {![info exists TabStruct($i,$Cat)]} {continue} foreach Ele [set TabStruct($i,$Cat)] { set MoyAcc "" set EleSplitee "" set EleSplitee [split $Ele " "] set MoyAcc [lindex $EleSplitee 2] lappend MoyID $MoyAcc #La moyenne Totale est faite uniquement sur les ARP1-2-3-4-5-6-7-8-9-10 et unknown if {! [regexp -nocase "actin|bacterie|reference|Orphan" $Cat]} { lappend MoyIDTotal $MoyAcc } } if {$MoyID != ""} { set MoyID [expr ([join [string trim $MoyID] "+"] * 1.0)/[llength $MoyID]] set MoyID [format "%.1f" $MoyID] lappend Show_LesCategorie $Cat lappend Show_LesMoyID $MoyID } } AppendAuFichier $FichierOut "[join $Show_LesCategorie "\t"]" AppendAuFichier $FichierOut "[join $Show_LesMoyID "\t"]" Espionne "[join $Show_LesCategorie "\t"]" Espionne "[join $Show_LesMoyID "\t"]" #La moyenne Totale est faite uniquement sur les ARP1-2-3-4-5-6-7-8-9-10 et unknown if {$MoyIDTotal != ""} { set MoyIDTotal [expr ([join [string trim $MoyIDTotal] "+"]*1.0)/[llength $MoyIDTotal]] set MoyIDTotal [format "%.1f" $MoyIDTotal] AppendAuFichier $FichierOut "[join [list Total $MoyIDTotal] "\t"]" Espionne "[join [list Total $MoyIDTotal] "\t"]" } } return "" } proc RelitSeqLeveillard {Fichier FichierOut} { set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[string first ">" $Ligne]=="0"} { #>gi|27753960|ref|NP regsub {^>gi\|} $Ligne ">" Ligne regsub {\|ref\|} $Ligne " " Ligne regsub -all {\|} $Ligne " " Ligne if {[regexp {.[0-9]+\|} $Ligne]} { regsub {.[0-9]+\|} $Ligne "" Ligne } else { regsub "\|" $Ligne "" Ligne } } AppendAuFichier $FichierOut $Ligne } close $F return "" } proc ReloadDefauts {w} { LesDefautsDuPipe destroy $w PipeInterface return } proc RemColGap {} { global NomTextSeq FaireAttendre "Please wait ...\nRemoving columns of gaps ..." #EnleveColonnesGaps $NomTextSeq delete colsgaps DumpBiotext InitWRegle AfficheRegle FaireLaSuite .colgaps return } proc RemapFeatures {s} { global TabSF # 1 4 8 11 # ---XXXXX--XXX-- # XXXXXXXX-- # 1 8 set o -1 for {set n 0} {$n < [string length $s]} {incr n} { if {[string index $s $n] ne "."} { incr o } set H($o) $n } array set newT [list] foreach key [array names TabSF] { set newF [list] set Lft [set TabSF($key)] foreach f $Lft { DecortiqueUneFeature $f fstart fstop fcolor fscore fnote fcsys set nstart [set H($fstart)] set nstop [set H($fstop)] lset f 1 $nstart lset f 3 $nstop lappend newF $f } set newT($key) $newF } unset -nocomplain TabSF array set TabSF [array get newT] update return } proc RemasqueLeCDNAAvecUnDeSesSegmentsMasques {SequenceDuCDNAARemasquer SegmentDeLaSequenceDuCDNARemasquee DebutDuSegSurCDNA FinDuSegSurCDNA SequenceDuCDNARemasquee} { #################################################### global RepertoireDuGenome set NouvelleSequenceDuCDNARemasquee "" set DebutQuery $DebutDuSegSurCDNA set FinQuery $FinDuSegSurCDNA if {$DebutQuery < $FinQuery} { set Devant [string repeat "-" [expr $DebutQuery-1]] set Derriere [string repeat "-" [expr [string length $SequenceDuCDNAARemasquer]-$FinQuery]] } else { set Devant [string repeat "-" [expr $FinQuery-1]] set Derriere [string repeat "-" [expr [string length $SequenceDuCDNAARemasquer]-$DebutQuery]] } set SegmentDeLaSequenceDuCDNARemasquee "$Devant$SegmentDeLaSequenceDuCDNARemasquee$Derriere" foreach Ref [split $SegmentDeLaSequenceDuCDNARemasquee ""] Base [split $SequenceDuCDNARemasquee ""] { if {$Ref=="N"} { set Nouveau $Ref } else { set Nouveau $Base } append NouvelleSequenceDuCDNARemasquee $Nouveau } return $NouvelleSequenceDuCDNARemasquee } proc RemetDefauts {w} { global Defauts TmpDef LesItems set Quoi [lindex $LesItems [$w curselection]] if {$Quoi eq ""} {return} set Lo [split [info body ValsDesDefauts] "\n"] lappend Lo [split [info body ValsDeCouleurs] "\n"] set DCoul 0 switch $Quoi { "General" { set Le {SeqFontFaml SeqFontSize SeqFontWght DeltaXScroll DeltaYScroll BackAppli} } "Editor" { set Le {LockSeqs} } "Databases" { set Le {UrlSRSWorld UrlSRSHome UrlPdbHoan} } "3D Display" { set Le {CoulVariable Viewer} } "Trees" { set Le {TypeGapTree TypeTree FontSizeTree FontWghtTree TreeBoot} } "Conservation" { set DCoul 1 set Le {SimiGris Threshold} } } foreach e $Le { set opt [lsearch -inline -regexp $Lo $e] regsub -all { +} [string trim $opt] " " opt # puts ">>$e<< >>$opt<< >>[lindex [split $opt] 2]<<" set TmpDef($e) [lindex [split $opt " "] 2] } if {$DCoul} { } update idletasks return } proc RemoveAllLabels {w} { $w.c delete label return } proc RemoveLesLiensModellerDansPython {{Action ""}} { if {$Action==""} { set Action "Show" } set Filtre "/usr/lib/python*/dist-packages/*modeller*" Espionne $Filtre set LesLinks {} foreach Link [lsort [glob -nocomplain "/usr/lib/python*/dist-packages/*modeller*"]] { Espionne $Link if {$Action=="Remove"} { file delete $Link } lappend LesLinks $Link } return $LesLinks } proc RemoveMito {} { global RepertoireDuGenome foreach Nom [LesLignesDuFichier "[HomeRipp]/mito"] { set EstMito($Nom) 1 } foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/cops_blastngenembl"] { scan $Ligne "%s" Nom if {[info exists EstMito($Nom)]} { continue } lappend Sortie $Ligne } Espionne [SauveLesLignes $Sortie dans "$RepertoireDuGenome/fiches/cops_blastngenembl"] exit } proc RemoveTaxFromSelection {} { global LTaxSelected LShowId Tx set PAD $Tx(PAD) set n $Tx(ItemSel) if {$n eq ""} {return} puts "Remove" puts "n=$n" set ix [lsearch $LTaxSelected $n] puts "ix show [lsearch $LShowId $n] sel [lsearch $::LTaxSelected $n] user [lsearch $::LUserId $n]" puts "" if {$ix == -1} {return} set LTaxSelected [lreplace $LTaxSelected $ix $ix] lappend LShowId $n # change outline of taxa id $PAD itemconfig "R$n" -outline $Tx(bgCan) return } proc RemplaceAccessParOrganismeDansFichierPhylo {Nom {Out ""}} { if {[regexp "/" $Nom]} { set Fichier $Nom if {$Out==""} { regsub -nocase {(.ph|)$} $Fichier "-org&" FichierOut } else { set FichierOut $Out } } else { set Fichier "[RepertoireDuGenome]/phylos/$Nom" if {$Out==""} { set Rep "[RepertoireDuGenome]/phylosOrg" if { ! [file exists $Rep]} { file mkdir $Rep } set FichierOut "$Rep/$Nom" } else { set FichierOut $Out } } if { ! [file exists $Fichier]} { return "" } set i 0 set Texte [ContenuDuFichier $Fichier] set LesAccess {} set LesIndices {} set N 0 while {[regexp -start $i -indices {[^\n\)\(\,\:]+\:} $Texte Indices]} { if {[incr N]>99999} { break } scan $Indices "%d %d" D F set i $F set Access [string range $Texte $D [expr $F -1]] regsub -nocase "^VARSPLIC_" $Access "VARSPLIC:" Access lappend LesAccess $Access lappend LesIndices $Indices } set Format "Demi" set LesAccessOrga [LesOrgasDesAccess $LesAccess $Format] set Inconnu [Glossaire "Inconnu inconnu" $Format] set LesAO [RetourneLaListe $LesAccessOrga] set LesIn [RetourneLaListe $LesIndices] foreach AO $LesAO Indices $LesIn { scan $AO "%s" Access set Orga [StringSuivant "$Access " dans $AO] if {$Orga=="" || $Orga==$Inconnu} { set Orga $Access } scan $Indices "%d %d" D F incr F -1 Espionne "$Access $Orga $D $F" set Texte [string replace $Texte $D $F $Orga] } if {$Out=="GetText"} { return $Texte } return [Sauve $Texte dans $FichierOut] } proc RemplaceAccessParOrganismeDansFichierPhyloPourTous {{Nom ""}} { if {$Nom==""} { set Liste [ListeDesPABs] } else { set Liste [list $Nom] } foreach Nom $Liste { set FiPhy "[RepertoireDuGenome]/phylos/$Nom" set FiPhyOrg "[RepertoireDuGenome]/phylosOrg/$Nom" if {[file exists $FiPhyOrg]} { continue } if { ! [file exists $FiPhy]} { continue } set BonFiPhyOrg [RemplaceAccessParOrganismeDansFichierPhylo $Nom] Espionne $BonFiPhyOrg } } proc RemplaceAccessParPABPourTous {{Rep ""}} { while {$Rep==""} { set Rep [ChoixDuRepertoire "[RepertoireDuGenome]/"] if {$Rep!=""} { break } if {[OuiOuNon "Do I cancel ? "]} { return "" } } if { ! [regexp "/" $Rep]} { set Rep "[RepertoireDuGenome]/$Rep" } foreach Nom [ListeDesPABs] { set F "$Rep/$Nom" if {[FileAbsent $F]} { continue } set TFA [ContenuDuFichier $F] if { ! [regexp {^>} $TFA]} { continue } set B "" scan $TFA "%s %s" A B regsub ">" $A "" A if {$A==$Nom} { continue } if {$A==$B} { regsub ">$A " $TFA ">$Nom " NewTFA } else { regsub ">" $TFA ">$Nom " NewTFA } Espionne $F Sauve $NewTFA dans $F } } proc RemplaceCloCloExists {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {![regexp "info exists CloClo" $Ligne]} { lappend Sortie $Ligne continue } regexp -nocase {info exists CloClo\(([\$0-9a-z_:]+[\,\)])+} $Ligne Match regsub -all {[\,\(]} $Match " " Bon regsub -all {\)} $Bon "" Bon regsub "info exists CloClo" $Bon "ClonInventoryExists" Bon regexp -nocase -indices {info exists CloClo\(([\$0-9a-z_:]+[\,\)])+} $Ligne Indices scan $Indices "%d %d" D F set Nouveau [string replace $Ligne $D $F $Bon] Espionne "\n$Ligne\n$Nouveau" lappend Sortie $Nouveau unset Match } if {[OuiOuNon "Je sauve dans $Fichier.nouveau ?" ]} { Espionne [SauveLesLignes $Sortie dans "$Fichier.nouveau"] } exit } proc RemplaceDansFichier {File OldWord NewWord} { set LeTexte {} set F [open $File] while {[gets $F Ligne]>=0} { regsub -all "$OldWord" $Ligne "$NewWord" Ligne lappend LeTexte $Ligne } close $F Sauve [join $LeTexte "\n"] dans $File return $File } proc RemplaceDansTousLesFichiersDuRep {Rep OldWord NewWord} { foreach File [glob -nocomplain "$Rep/*"] { Espionne [RemplaceDansFichier $File $OldWord $NewWord] } return } proc RemplacePartout {Ancien Nouveau {Login ""} {OverWrite ""}} { #rR si Login finit par .tcl c'est un fichier if {[string equal -nocase $Login "OverWrite"]} { set Login ""; set OverWrite "OverWrite" } set OverWrite [string equal -nocase $OverWrite "OverWrite"] if { ! $OverWrite } { FaireLire "Now you'll change nothing. \n To OverWrite use RemplacePartout Ancien Nouveau Login OverWrite" } else { if { ! [OuiOuNon "I'll overwrite what I'm allowed to do. OK?"] } { exit } } set PourUnFichierPrecis 0 set LesSources [LesSourcesDeGscope] if {[regexp "\.tcl$" $Login]} { set LesSources [list $Login] set Login "" set PourUnFichierPrecis 1 } set LesMAJ {} foreach F $LesSources { if {[regexp -nocase "Poubelle/" $F]} { continue } if { ! [regexp ".tcl$" $F]} { continue } if {$Login!="ripp" && $Login!="" && ! [regexp "/$Login/" $F]} { continue } if {$Login=="ripp" && [regexp "/" $F]} { continue } if { ! $PourUnFichierPrecis } { set F "[HomeRipp]/gscope/$F" } set LeNew {} set OK 1 foreach Ligne [LesLignesDuFichier $F] { if { ! [regexp $Ancien $Ligne]} { lappend LeNew $Ligne; continue } set OK 0 regsub -all $Ancien $Ligne $Nouveau New lappend LeNew $New Espionne $Ligne Espionne $New lappend LesLignesG $Ligne $New } if {$OK} { continue } Espionne $F Espionne if { ! [file writable $F]} { FaireLire "Je ne peux pas modifier $F" continue } if {$OverWrite} { lappend LesMAJ [SauveLesLignes $LeNew dans $F] } } AfficheListe $LesMAJ } proc RemplacePointVirguleParRetourChariot {} { set Fichier [ButineArborescence All] foreach Ligne [LesLignesDuFichier $Fichier] { regsub -all {;} $Ligne "\n" Ligne } Sauve $Ligne dans $Fichier } proc RemplaceSetCloClo {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {![regexp "set CloClo" $Ligne]} { lappend Sortie $Ligne continue } if {[regexp {(^|\{)[ \t]*set CloClo} $Ligne]} { set ClonInventorySet 1 } else { set ClonInventorySet 0 } regexp -nocase {set CloClo\(([\$0-9a-z_:]+[\,\)])+} $Ligne Match regsub -all {[\,\(]} $Match " " Bon regsub -all {\)} $Bon "" Bon if {$ClonInventorySet} { regsub "set CloClo" $Bon "ClonInventorySet" Bon } else { regsub "set CloClo" $Bon "ClonInventory" Bon } regexp -nocase -indices {set CloClo\(([\$0-9a-z_:]+[\,\)])+} $Ligne Indices scan $Indices "%d %d" D F set Nouveau [string replace $Ligne $D $F $Bon] regsub "unClonInventory" $Nouveau "ClonInventoryUnset" Nouveau Espionne "\n$Ligne\n$Nouveau" lappend Sortie $Nouveau unset Match } if {[OuiOuNon "Je sauve dans $Fichier.nouveau ?" ]} { Espionne [SauveLesLignes $Sortie dans "$Fichier.nouveau"] } exit } proc RemplitOrdaliDB {} { global OrdTmpDir LNOrdali LSOrdali global {*}[info globals "TD*"] TabSF CompteurDeMac db Defauts LNDG SDG TColScore ListePDB #$db profile DbProfile $db eval {begin transaction} #$db profile DBProfile # Met A Jour table des parametres Ordalie set var "Defauts" foreach {k v} [array get Defauts] { $db eval {insert into ordalie values ($var,'$k', '$v')} } # Met A Jour : # - table des INFOS de sequences # - table des sequences elles-memes set i 1 foreach n $LNOrdali s $LSOrdali { if {$n eq ""} {continue} set ins "$i" foreach t {TDesSeqnames TDesAccess TDesBId TDesDescriptifs TDesOrganismes TDesTaxId TDesFragment TDuGroupeDesSeqs TDesEC TDesComplex TDesPhylum TDesGO TDuLineage TDesHydro TDespI TDesMolW} { set v [set ${t}($n)] if {! [string is integer -strict $v] && ! [string is double -strict $v]} { if {$v eq ""} { lappend ins "NULL" } else { set v [string map {"'" "''"} $v] lappend ins "'$v'" } } else { lappend ins $v } } set sdegap [string map {"." "" " " ""} $s] lappend ins "'$sdegap'" $db eval "insert into seqinfo values ([join $ins ,])" set sqn [set TDesSeqnames($n)] $db eval {insert into seqali values ($i, $i, $sqn, $s)} incr i } $db eval {commit} # Met A Jour table des features # on a TabSF, copie conforme des features # du XML. On copie tel quel dans seqfeat if {[info exists TabSF]} { MetAJourTableFeatures } else { set TabSF [list] } # Met A Jour table mac. ##################### # 1er MAC : initial mac, will never be touched # ##################### $db eval {begin transaction} set Lx [$db eval {select pk_seqali from seqali order by pk_seqali}] set titre "M[NumeroNewMac] - original alignment" set pkm 1 $db eval {insert into mac values ($pkm, $titre,'original alignment')} LesDefauts IxMacCourant $pkm LesDefauts NmMacCourant $titre set pos 0 set i 1 foreach s $Lx { # seqali premier mac deja remplit $db eval {insert into ln_mac_seqali values ($pkm,$s,$pos)} incr pos } # Clustering associe au 1 mac ne contient pas # de cluster, ( 1 seul groupe : toutlemonde ) # pk_clustering set pk_Clg 1 # pk_cluster set pk_Cst 1 $db eval {insert into clustering values($pk_Clg, $pkm, 'None', NULL, NULL)} $db eval {insert into ln_mac_clustering values ($pkm,$pk_Clg, 1)} $db eval {insert into cluster values($pk_Cst, $pk_Clg, 'all')} set pos 0 foreach i $Lx { $db eval {insert into ln_seqali_cluster values ($i, $pk_Cst,$pos)} incr pos } ################ # 2eme mac # # XML : correspond au clustering du macsim # Autre : working alignment ################ incr pkm if {[TypeAli] eq "XML"} { set titre "M$pkm - macsims alignment" set name "macsim alignment" } else { set titre "M$pkm - working alignment" set name "working alignment" } $db eval {insert into mac values ($pkm, $titre,$name)} set pos 0 foreach s $Lx { $db eval {insert into ln_mac_seqali values ($pkm, $s, $pos)} incr pos } LesDefauts IxMacCourant $pkm LesDefauts NmMacCourant $titre incr pk_Clg ; # clustering incr pk_Cst ; # cluster if {[TypeAli] eq "XML"} { $db eval {insert into clustering values($pkm, $pk_Clg, 'macsim clustering', 'macsims', 'all')} } else { $db eval {insert into clustering values($pk_Clg, $pk_Cst, 'whole alignment', 'whole', 'all')} } $db eval {insert into ln_mac_clustering values ($pkm, $pk_Clg, 2)} foreach g $LNDG { if {$g eq "bidon"} {continue} if {$g eq "grise"} {continue} set Lix [LesIndexsDesSeqnames [set SDG($g)]] if {$g eq "GroupeToutLeMonde"} {set g "all"} $db eval {insert into cluster values($pk_Cst, $pk_Clg, $g)} set pos 0 foreach i $Lix { $db eval {insert into ln_seqali_cluster values ($i,$pk_Cst,$pos)} incr pos } incr pk_Cst } set pk_mac [$db eval {select max(pk_mac) from mac}] set CompteurDeMac $pk_mac # Met A Jour conservation/colscores if {[info exists TColScore]} { foreach name $TColScore(Names) { if {$name eq "(null)"} { continue } $db eval {insert into colmeasure values (NULL,$name,NULL)} set pk_meas [$db last_insert_rowid] $db eval {insert into ln_mac_colmeasure values ($pk_mac, $pk_meas)} for {set i 0} {$i < [llength $TColScore($name,Owner)]} {incr i} { set owner [lindex $TColScore($name,Owner) $i] set type [lindex $TColScore($name,Type) $i] set group [lindex $TColScore($name,Group) $i] set data [lindex $TColScore($name,Data) $i] regsub -all { +} [string trim $data] " " data set data [string map {" " ","} $data] if {$data eq ""} { continue } $db eval {insert into colscore values (NULL, $pk_meas, $name, $owner, $type, $group, $data)} set pkc [$db last_insert_rowid] if {! [string is integer $owner]} { if {$owner ne "all" && $owner ne "All"} { set g "Group[string range $owner [string first "_" $owner]+1 end]" } else { set g $owner } } else { set g "Group$owner" } set pkg [$db eval {select pk_cluster from cluster where name=$g and pk_clustering=$pk_Clg}] $db eval {insert into ln_cluster_colscore values ($pkg, $pkc)} } } } # Creation des Index $db eval {create index idx_seqinfo on seqinfo (pk_seqinfo, seqname, access)} $db eval {create index idx_seqali on seqali (pk_seqali, pk_seqinfo, seqname, seq)} $db eval {create index idx_ln_seqali_featali on ln_seqali_featali (pk_seqali, pk_featali)} $db eval {create index idx_featali on featali (pk_featali, ftype, fstart, fstop, fscore, fnote, fcsys)} $db eval {create index idx_ln_mac_seqali on ln_mac_seqali (pk_mac, pk_seqali)} $db eval {create index idx_ln_mac_clustering on ln_mac_clustering (pk_mac, pk_clustering)} $db eval {create index idx_cluster on cluster (pk_cluster, pk_clustering, name)} $db eval {create index idx_ln_seqali_cluster on ln_seqali_cluster (pk_seqali, pk_cluster, pos)} $db eval {create index idx_pdb on pdb (pk_pdb, name, header)} $db eval {create index idx_chaines on chains (pk_chains, pk_pdb, name, type)} $db eval {create index idx_residues on residues (pk_residues, pk_pdb, pk_chains, rname1l, rname3l, rnbr, type)} $db eval {create index idx_atomes on atoms (pk_atoms, pk_pdb, pk_chains, pk_residues, aname, x, y, z, na)} # Remplissage Termine ! $db eval {commit} CreeVue return } proc RemuxPromoSbs {} { set FichierDesBiDir [open "/genomics/link/STAF/fiches/Bidir/Genes.bidir" "r"] set FichierOut [open "/genomics/link/STAF/fiches/Bidir/SbsDansBidir.remux" "w"] set I 0 while { [gets $FichierDesBiDir LigneBiDir] >=0} { incr I Espionne "Traitement Bidir $I" ScanLaListe $LigneBiDir Chromosome Start End Distance Access1 Type1 Description1 Access2 Type2 Description2 set ExtendStart [expr $Start - 400] set ExtendEnd [expr $End + 400] set FichierDesSBS [open "/genomics/link/STAF/fiches/Bidir/SbsDansBidirPostMatinspector.txt" "r"] while { [gets $FichierDesSBS LigneSBS] >=0} { ScanLaListe $LigneSBS SbsId SbsThresh SbsStart SbsEnd SbsCore SbsScore SbsSequence if { [regexp $Access1 $SbsId] && [regexp $Access2 $SbsId] } { set SbsLength [expr $SbsEnd - $SbsStart + 1] set SbsPositionStart [expr $ExtendStart + $SbsStart - 1] set SbsPositionEnd [expr $SbsPositionStart + $SbsLength - 1] puts $FichierOut "$LigneBiDir $LigneSBS $SbsPositionStart $SbsPositionEnd" } } close $FichierDesSBS } close $FichierDesBiDir close $FichierOut } proc RenaissanceDuWidget {K Id {Action ""}} { global BufferMainLevee set Type [$K type $Id] set LesOptions {} foreach OptionValeurs [$K itemconfigure $Id] { set Option [lindex $OptionValeurs 0] set Valeur [lindex $OptionValeurs 4] if {$Valeur=={}} { set Valeur "\{\}" } if {[regexp " " $Valeur]} { set Valeur "\{$Valeur\}" } lappend LesOptions "$Option $Valeur" } set Ancien "$K create $Type [$K coords $Id] [join $LesOptions " "]" if {$Action=="Copy"} { set BufferMainLevee $Ancien return $Ancien } while 1 { set Nouveau [Entre $Ancien] if {$Nouveau==$Ancien} { return $Id } if {$Nouveau==""} { return "" } catch {set NouveauId [eval $Nouveau]} Message if { ! [regexp {[^0-9]} $Message]} { break } FaireLire "I got this message : \n$Message" if {[OuiOuNon "Do I keep the widget ?"]} { return $Id } } if {[OuiOuNon "Do I delete the old Widget ? "]} { $K delete $Id } return $Nouveau } proc RendLExtension {NomFichier} { if {![regexp {\.[a-z]} $NomFichier]} { #Espionne "$NomFichier does not have any extension" return "" } set L [split $NomFichier "."] #EspionneL $L set Extension "\.[lindex $L 1]" return $Extension } proc RenommageAFaire {} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "renommage.afaire"] { scan $Ligne "%s %s" Nouveau Ancien RenommeTousLesFichiersDesSousRepertoires $Ancien $Nouveau lappend LesAnciens $Ancien lappend LesNouveaux $Nouveau } foreach Fichier [glob "$RepertoireDuGenome/fiches/*"] { if { ! [file isfile $Fichier]} { continue } set Contenu [ContenuDuFichier $Fichier] foreach Ancien $LesAnciens Nouveau $LesNouveaux { regsub -all $Ancien $Contenu $Nouveau Contenu } Espionne [Sauve $Contenu dans "$Fichier"] } } proc RenommeBilan {} { Wup "Renomme les fichier Bilan* en .bilan" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set LesFichiersBilan {} set LesBilans {} set LesFichiersBilan [glob -nocomplain "$RepXHda/bilan*"] foreach file $LesFichiersBilan { lappend LesBilans [file tail $file] } EspionneL $LesBilans foreach file $LesBilans { set Nom $file regsub "^bilan_" $Nom "" Nom set Nom "$Nom.bilan" #Espionne $Nom set Resu [file rename -force "$RepXHda/$file" "$RepXHda/$Nom"] } } proc RenommeChampRefPfam {} { set i 0 foreach Box [ListeDesPABs] { set LesNouvellesLignes {} set File "[RepertoireDuGenome]/infos/$Box" incr i foreach Ligne [LesLignesDuFichier $File] { if {[regexp "^RefPfam:" $Ligne]} { regsub "RefPfam" $Ligne "RefPfamOld" LigneMod lappend LesNouvellesLignes $LigneMod } else { lappend LesNouvellesLignes $Ligne } } SauveLesLignes $LesNouvellesLignes dans $File } Espionne $i } proc RenommeCluEnClust {} { set Repertoire "cluspack" foreach Nom [ListeDesPABs] { set Fichier "" set Fichier "[RepertoireDuGenome]/cluspack/$Nom.clu" if {![file exists $Fichier]} {continue} CopieLesFichiersPourGroupedpcEtRetscope $Nom $Repertoire } } proc RenommeExtension {Avant Apres {Rep ""} {Ask ""}} { if {$Ask==""} { set Ask "Ask" } if {$Ask=="DontAsk"} { set Ask 0 } else { set Ask 1 } if {$Rep==""} { set Rep "." } set LesAvants [lsort [glob -nocomplain "$Rep/*$Avant"]] set n [llength $LesAvants] if {$n==0} { FaireLire "I found no file coresponding to $Rep/*$Avant" return "" } if { ! [OuiOuNon "Do I rename the $n files corresponding to \n$Rep/*$Avant"]} { return "" } set Ask 1 set LesAP {} foreach FicAv $LesAvants { set i [string last $Avant $FicAv] if {$i==-1} { continue } set FicAp [string replace $FicAv $i end $Apres] if {$Ask && [OuiOuNon "Do You want to verify what I'm doing ?"]} { if { ! [OuiOuNon "file rename -force \n$FicAv \n$FicAp\n\nOk ?"]} { return "" } set Ask [OuiOuNon "Do I continue asking for verification ?"] } else { set Ask 0 } file rename -force $FicAv $FicAp lappend LesAp $FicAp } return $LesAp } proc RenommeFichiers {Qui Avant Apres {Option ""} {Comment ""}} { if {$Comment==""} { set Comment "Demander" } foreach Fichier [glob -nocomplain $Qui] { if {$Option==""} { set Allons [regsub $Avant $Fichier $Apres Nouveau] } else { set Allons [regsub $Option $Avant $Fichier $Apres Nouveau] } if { ! $Allons } { continue } lappend LesAvAp $Fichier $Nouveau } set Retour [AfficheListe $LesAvAp "AvecRetour"] set LesAvAp [split $Retour "\n"] foreach {Av Ap} $LesAvAp { file rename $Av $Ap } return $Retour } proc RenommeInterRatio {} { #InterRatioGeneList_0430_20_7_MExRetAdult_MExBrnAdult_16629.worst foreach F [lsort [glob "[HomeRipp]/GxWww/HtmlTableStore/InterRatio*"]] { set Q [file tail $F] set LesMots [split $Q "_"] lassign $LesMots Racine Date Exp Soft lassign [split [lindex $LesMots end] "."] Size Type set Samples [join [split [lrange $LesMots 4 end-1]] "_"] regsub "worst" $Type "wors" Type # Espionne # Espionne $Q # EspionneL "$Racine $Date $Exp $Soft $Samples $Size $Type" set New [join [list $Racine $Date $Size $Type $Exp $Soft $Samples] "_"] Espionne $New set NewFile "[file dirname $F]/$New" file rename $F $NewFile } exit } proc RenommeLARedondant {Org} { #Un LA peut être repete plusieurs fois dans un cluster ou entre les clusters. #Soit ils ont les meme coord et dans ce cas ils portent le même nom #Soit ils ont des coord diff et là on rajoute un _2 au LA #pour les identifiants composes que de chiffres on rajoute n devant if {[regexp -nocase "Mouse" $Org]} { set LesRepertoiresIni [LesRepertoires "Mouse" "Ini"] set CheminMod "/genomics/link/SpliRetMouse/FichiersModifUnique/PROT_VARIANTES_61_mai" } if {[regexp -nocase "Rat" $Org]} { set LesRepertoiresIni [LesRepertoires "Rat" "Ini"] set CheminMod "/genomics/link/SpliRetRat/FichiersModifUnique/PROT_VARIANTES_61_mai" } foreach RepertoireIni $LesRepertoiresIni { set LastDir [file tail $RepertoireIni] set RepertoireMod "$CheminMod/$LastDir" if {! [file exists $RepertoireMod]} {file mkdir $RepertoireMod} foreach FileST [glob -nocomplain "$RepertoireIni/*"] { set LesLignesTfa {} set FileCourt [file tail $FileST] set cluster [lindex [split $FileCourt "."] 0] set taille [file size $FileST] if {$taille == 0} {continue} set CarRedon "_redondant_nb_" #LaSequenceDuTFAs $CarRedon = on rajoute "CarRedon" avant le numero pour les doublons #LaSequenceDuTFAs ForceAccessFirst = Access est en 1ere position #LaSequenceDuTFAs n or AllowDigitOnly = soit rajoute n devant des Access composés que de chiffres soit les autorise foreach Access [LaSequenceDuTFAs $FileST "LaListeDesAccess" "" $CarRedon "ForceAccessFirst" "n" ] { set TFA [LaSequenceDuTFAs $FileST $Access] set rx "${CarRedon}\[0-9\]+" regsub $rx $Access "" Access regsub $rx $TFA "" TFA set Entete [EnteteDuTexteTFA $TFA] scan $Entete "%s %s %s %s" bidon chr start stop if {[regexp "chromosome" $chr]} {lassign [split $chr ":"] b1 b2 chr start stop} set loc "$chr:$start-$stop" if {![regexp "^chr" $loc]} {set loc "chr$loc"} set seq [QueLaSequenceDuTexteTFA $TFA] if {![info exists DejaVu($Access,clu)]} { #Espionne "$Access from $cluster $loc" set DejaVu($Access,clu) $cluster set DejaVu($Access,loc) $loc set DejaVu($Access,seq) $seq set AccessNew($Access,$loc) "$Access" set Ieme($Access) 1 lappend LesLignesTfa $TFA continue } if {[info exists AccessNew($Access,$loc)]} { set NewAccess $AccessNew($Access,$loc) regsub "$Access" $TFA "$NewAccess" TFA #Espionne "$Access from $cluster $loc $NewAccess repise dans $DejaVu($Access,clu)" } else { incr Ieme($Access) set NewAccess ${Access}_$Ieme($Access) set AccessNew($Access,$loc) $NewAccess regsub "$Access" $TFA "$NewAccess" TFA #Espionne "$Access from $cluster $loc $NewAccess $cluster vu dans $DejaVu($Access,clu)" if {[regexp "^NM_" $Access] || [regexp "^ENS_" $Access]} {FaireLire "$Access from $cluster"} } lappend LesLignesTfa $TFA } SauveLesLignes $LesLignesTfa dans "$RepertoireMod/$FileCourt" } } } proc RenommeLesBlastX {} { foreach Fichier [glob *] { if { ! [regexp {MS[]0-9]+} $Fichier Nom]} { continue } if {[file exists $Nom]} { continue } file rename $Fichier $Nom } exit } proc RenommeLesClustersDansLeFichierOCADE {FichierOCADE DDExp FichierOut} { #Le fichier OCADE correspond ici a une exp cad /fiches/Orf2Cluster2Access2Def2Expression_DD1 par ex #DDExp correspond a l'expce de DD, soit DD1 et DD2 selon le fichier OCADE considéré set F [open $FichierOCADE] set LesLignes {} while {[gets $F Ligne]>=0} { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {[regexp -nocase {^\#} $Ligne]} { lappend LesLignes $Ligne continue } set LaLigne [split $Ligne "\t"] set Cl [lindex $LaLigne 1] set Cl_DDExp [set DDExp]_$Cl set LaLigne [lreplace $LaLigne 1 1 $Cl_DDExp] set LaLigne [join $LaLigne "\t"] lappend LesLignes $LaLigne } Sauve [join $LesLignes "\n"] dans $FichierOut return } proc RenommeLesCopiesDEcrans {{Racine ""}} { foreach Fichier [glob "AspRS_Decline.*.*.jpeg"] { if { ! [regexp {AspRS_Decline\.([0-9]+)\.([0-9]+)\.jpeg$} $Fichier Match X Y]} { continue } set New "AspRS_Decline-$Y-$X.jpg" file copy $Fichier $New lappend LesNew $New } return $LesNew } proc RenommeLesFichiersCluEnClust {RepClu} { foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/$RepClu/*.clu"] { set Nom [NomDeFichierSansExtension [file tail $Fichier]] set NouveauNom "$Nom.clust" File rename -force $Fichier "[RepertoireDuGenome]/$RepClu/$NouveauNom" } } proc RenommeLesGbkDeBbur {} { File mkdir "[RepertoireDuGenome]/DeIgbmcNew" foreach F [glob "[RepertoireDuGenome]/DeIgbmc/*.gbk"] { regexp {/gene=\"(BB[A-Z]?)[0-9]+} [ContenuDuFichier $F] Match BBZ File copy $F [RepertoireDuGenome]/DeIgbmcNew/$BBZ.gbk } exit } proc RenommeLesPhotos {} { set Numero 1000000 foreach Fichier [lsort [glob */P101*]] { incr Numero 10 set Nouveau "P$Numero" set Rep [file dirname $Fichier] file rename $Fichier $Rep/$Nouveau.JPG } exit } proc RenommeLesRefDesOligos {} { Wup "Permet de changer les nom des oligos" Wup "On passe de OligoNumero_AccessDuDesign (Oligo1_BC012597) a PAB_OligoNumero_AccessDuDesign ACT0001_Oligo1_BC012597" #ACT0001 Oligo1_BC012597 mRNA BC012597 from Homo sapiens 60 93.79 51 110 1 1 RSHUM:NM001100 #GACCAGGGCCCGAGCCGAGAGTAGCAGTTGTAGCTACCCGCCCAGAAACTAGACACAATG #ACT0001 ACT0001_Oligo1_BC012597 mRNA BC012597 from Homo sapiens 60 93.79 51 110 1 1 RSHUM:NM001100 #GACCAGGGCCCGAGCCGAGAGTAGCAGTTGTAGCTACCCGCCCAGAAACTAGACACAATG #set Rep "[RepertoireDuGenome]/Probes/RefSeqBLAST3" #set Rep "[RepertoireDuGenome]/Probes/UnigeneBLAST3" #set Rep "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" set Rep "[RepertoireDuGenome]/Probes/NewUnigeneBLAST3" #set LesPABs [list ACT2437 ACT2438] #set LesPABs [list ACT2437] set LesPABs [ListeDesPABs] #set LesPABs "ACT0001" foreach PAB $LesPABs { set LesExts [list "oligo" "selection" "croisee"] #set LesExts [list ".selection"] set LesFichiers "" foreach Ext $LesExts { lappend LesFichiers "$Rep/${PAB}.${Ext}" } Espionne "$LesFichiers" foreach File $LesFichiers { set LesLignes "" if {! [file exists $File]} {continue} set Ligne "" set F [open "$File"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} #Espionne "---- $Ligne" if { [string range $Ligne 0 0] != ">"} { lappend LesLignes $Ligne continue } else { set LigneSplitee "" set NomOligo "" set NewNomOligo "" set FirstElement "" set NewLigne "" set LigneSplitee [split $Ligne "\t"] #Espionne "1 -- $LigneSplitee" set NomOligo [lindex [lindex $LigneSplitee 0] 1] #Espionne "2 -- $NomOligo" #Oligo1_BC012597 set NewNomOligo "${PAB}_${NomOligo}" #Espionne "3 -- $NewNomOligo" set FirstElement [lreplace [lindex $LigneSplitee 0] 1 1 $NewNomOligo] set NewLigne [join [lreplace $LigneSplitee 0 0 $FirstElement] "\t"] #Espionne "4 -- $NewLigne" lappend LesLignes $NewLigne continue } } close $F set NewFile "[RepertoireDuGenome]/Probes/test/[file tail $File]" #Espionne "$File" AppendAuFichier "$NewFile" [join $LesLignes "\n"] set NewFile "" set LesLignes "" } } } proc RenommeLesRepertoiresDeLaGrid {} { set RepLeonGrid "[RepertoireDuGenome]/leon" set RepMsf "[RepertoireDuGenome]/msf" set RepRascal "[RepertoireDuGenome]/rascal" file rename -force $RepLeonGrid "[RepertoireDuGenome]/leongrid" file rename -force $RepMsf "[RepertoireDuGenome]/msfgrid" file rename -force $RepRascal "[RepertoireDuGenome]/rascalgrid" } proc RenommeLesTmp {Selection Fenetre} { if { $Selection == "" } { FaireLire "Please select some files" return } set Nom [Entre "keep"] foreach Fichier [split $Selection "\n"] { regsub -- {^tmp} $Fichier $Nom Nouveau if { $Fichier != "" && $Nouveau != "" } { File rename $Fichier $Nouveau } } destroy $Fenetre MenageLesTmp "Delete" } proc RenommePABenABY {SousRepertoire} { global RepertoireDuGenome foreach Fichier [lsort [glob "$RepertoireDuGenome/../casimir/$SousRepertoire/PAB*"]] { set NomPAB [file tail $Fichier] regsub "PAB" $NomPAB "ABY" NomABY set Nouveau {} foreach Ligne [LesLignesDuFichier $Fichier] { while {[regexp {PAB[0-9][0-9][0-9][0-9]} $Ligne PAB]} { regsub "PAB" $PAB "ABY" ABY regsub {PAB[0-9][0-9][0-9][0-9]} $Ligne $ABY Ligne } lappend Nouveau $Ligne } Espionne [SauveLesLignes $Nouveau dans "$RepertoireDuGenome/$SousRepertoire/$NomABY"] } } proc RenommeRetinalTargets {} { set D 1000 set PremiereFois 1 set Normal 0 set PrecedentMerde 0 set Ieme 0 foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/parser/AttriToutVf2"] { if {[regexp "^ligne" $Ligne]} { set Normal 1 set YaEuLigne 1 set NumLigne [IntegerApres "ligne" dans $Ligne] set N [expr $NumLigne*10] set Ieme 0 continue } if { ! [regexp "^>" $Ligne]} { lappend LeTFA $Ligne continue } if { ! $PremiereFois} { # Espionne "Sauve dans $Nom" # SauveLesLignes $LeTFA dans "[RepertoireDuGenome]/nuctfa/$Nom" } regsub ">" $Ligne "" Ligne if {[regexp "bidon" $Ligne] && ! $YaEuLigne} { FaireLire "Un bidon sans ligne !!!" ; continue } set PtiNom "" if { 0==$Ieme } { set NewNum [expr $N ] ; set NewNom [format "EVI%5.5d" $NewNum] } if { 0 <$Ieme && $Ieme < 10} { set NewNum [expr $N + $Ieme] ; set NewNom [format "EVI%5.5d" $NewNum] } if {10<=$Ieme } { set NewNum [expr $N*100 + $Ieme] ; set NewNom [format "EVI%7.7d" $NewNum] } if {10<=$Ieme } { set PtiNum [expr $N+50000 + $Ieme] ; set PtiNom [format "EVI%5.5d" $PtiNum] } if {$PtiNom!="" && [info exists DejaVu($PtiNom)]} { Espionne "........................................... $PtiNom par $DejaVu($PtiNom)" } set DejaVu($PtiNom) $NewNom set I 0 set NomDeBase [format "EVI%5.5d" [expr $N]] while 1 { set Nom [format "EVI%5.5d" [expr $N+$I]] if { ! [info exists DejaVu($Nom)]} { break } incr I } set DejaVu($Nom) 1 set Tout 1 if {$Tout || $Nom!=$NewNom} { set NewNomDe($Nom) $NewNom set PlaceLibre [expr [string equal $Nom $NewNom] || [string length $NewNom]>8 || [info exists NewNomDe($NewNom)]] set Texte "$Nom [format "%-10s" $NewNom] [format "%2d" $Ieme] $N $PlaceLibre $PtiNom" Espionne $Texte lappend LaCorrespondance "$Nom [expr $N/10] $Ieme" } incr Ieme continue if {$YaEuLigne && [info exists BonNom($Nom)]} { Espionne "$Nom devrait s'appeler $BonNom($Nom)" } if {(0<$I && $I<10) && $PrecedentMerde} { Espionne " ............................... $Nom" } if {$I>9 || $PrecedentMerde} { set Normal 0 set BeauNom [format "EVI%7.7d" [expr $N*100 + $I]] if {$YaEuLigne} { set MeilleurN [expr $N] set MeilleurNom [format "EVI%5.5d" [expr $MeilleurN]] Espionne "$Nom != $BeauNom mais $MeilleurNom" set PrecedentMerde 1 } else { Espionne "$Nom == $BeauNom" set PrecedentMerde 0 } set NbDizaines [expr $I/10] while {$NbDizaines>0} { set Pousse [format "EVI%5.5d" [expr $N + $NbDizaines*10]] # set MauvaisNomDuPousse($Pousse) [format "EVI%5.5d" [expr $N + $I + 1]] # set MauvaisNomPrecedent [format "EVI%5.5d" [expr $N + $I]] # if {[info exists BonNom($MauvaisNomPrecedent)]} { unset BonNom($MauvaisNomPrecedent) } set Decalage 0 set MauvaisNom [format "EVI%5.5d" [expr $Decalage + $N + $I + 1]] set BonNom($MauvaisNom) $Pousse incr NbDizaines -1 continue } } set YaEuLigne 0 continue } SauveLesLignes $LaCorrespondance dans "[Fiches]/NomLigne.txt" exit } proc RenommeTousLesFichiersDesSousRepertoires {Ancien Nouveau} { global RepertoireDuGenome foreach Fichier [glob "$RepertoireDuGenome/*/$Ancien"] { if { ! [file isfile $Fichier]} { continue } set DirName [file dirname $Fichier] regsub -all $Ancien [ContenuDuFichier $Fichier] $Nouveau NouveauContenu Espionne [Sauve $NouveauContenu dans "$DirName/$Nouveau"] } } proc RenseigneCluster {} { set i 0 set FichierRMA "[RepertoireDuGenome]/transcriptomique/ConeSpe/ListeRMAExp2J15Cond" set FichierdChip "[RepertoireDuGenome]/transcriptomique/ConeSpe/ListedChipExp2J15Cond" set RepertoireCl "[RepertoireDuGenome]/transcriptomique/ConeSpe/Hierarchisation/cluster" if {! [file exists $RepertoireCl]} {file mkdir $RepertoireCl} foreach PsRMA [LesLignesDuFichier $FichierRMA] {lappend LesPs $PsRMA} foreach PsdChip [LesLignesDuFichier $FichierdChip] {lappend LesPs $PsdChip} set LesPs [ListeSansDoublon $LesPs] set longtab [llength $LesPs] foreach Ps $LesPs { incr i Espionne "$Ps $i" set BeauPs $Ps if {[regexp {\/} $Ps]} { regsub "/" $Ps "-OU-" BeauPs } if {[file exists "$RepertoireCl/$BeauPs"]} {continue} set cluster [TrouveCluster $Ps] Sauve $cluster dans "$RepertoireCl/$BeauPs" } Espionne "longtab $longtab" } proc RenseigneClusterExp2 {EPs EAS ECS} { #abandon aussi global RenseigneClusterExp2 puts "On entre avec Ps $EPs AS $EAS CS $ECS" if {[info exists RenseigneClusterExp2($EPs,$EAS,$ECS)]} {return [set RenseigneClusterExp2($EPs,$EAS,$ECS)]} set Fichier "[RepertoireDuGenome]/transcriptomique/ConeSpe/FichierClusterExp2" set i 0 foreach Ligne [LesLignesDuFichier $Fichier] { set elmts [split $Ligne "\t"] foreach {Ps tmp AS CS Cl} $elmts {} if {$i < 10} { Espionne "Ps $Ps AS $AS CS $CS Cl $Cl" incr i } set RenseigneClusterExp2($Ps,$AS,$CS) $Cl #Espionne "$Ps $AS $CS $Cl $RenseigneClusterExp2($Ps,$AS,$CS)" } return [RenseigneClusterExp2 $EPs $EAS $ECS] } proc RenseigneCompositionEnCluster {PkExperiment AnalysisSoftware} { #AnalysisSoftware: RMA or dChip #meme but que proc PopulationDuCluster avec en arg AllClusters set LesLignes {} CanalSqlBioArrayBase foreach {Ex SoAn SoCl Cl} [SqlExec "select distinct e.pk_experiment, a.name, c.clu_description, lncep.clusternumber from retinobase3.ln_clu_exp_pro lncep, retinobase3.cluster c, retinobase3.analysissoftware a, retinobase3.experiment e where lncep.pk_experiment = e.pk_experiment and lncep.pk_cluster = c.pk_cluster and lncep.pk_software = a.pk_software and a.name = '$AnalysisSoftware' and e.pk_experiment = '$PkExperiment' order by a.name, c.clu_description, lncep.clusternumber;" "GetList"] { lappend LesLignes "$Ex\t$SoAn\t$SoCl\t$Cl" } CanalSqlDisconnect return [join $LesLignes "\n"] } proc RenseigneIntensitySignalParticulier {} { foreach Ps [AffyAnnoMG430 ListOf Index] { regsub "/" $Ps "-OU-" BeauPs set Fichier "/genomics/link/EVImm/transcriptomique/ConeSpe/SignalIntensityExp2J15/$BeauPs" set Texte [TrouveIntensitySignalParticulier $Ps 2 15] Sauve $Texte dans $Fichier } } proc RenseigneTranscriptomique {{Liste ""}} { set RepertoireIs "[RepertoireDuGenome]/transcriptomique/SignalIntensity" set RepertoireRa "[RepertoireDuGenome]/transcriptomique/ratio" set RepertoireCl "[RepertoireDuGenome]/transcriptomique/cluster" if {! [file exists $RepertoireIs]} {file mkdir $RepertoireIs} if {! [file exists $RepertoireRa]} {file mkdir $RepertoireRa} if {! [file exists $RepertoireCl]} {file mkdir $RepertoireCl} if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { # if {[PasTouche $Nom]} {continue} set IntensitySignal ""; set ratio ""; set cluster "" #Espionne "$Nom" set ProbesSet [ExtraitInfo $Nom "ProbeSetId"] if { $ProbesSet=="no value" || $ProbesSet=="" } { # FinPasTouche $Nom continue } set LesProbeSet [split $ProbesSet ","] foreach Ps $LesProbeSet { #Espionne "$Ps" set BeauPs $Ps if {[regexp {\/} $Ps]} { regsub "/" $Ps "-OU-" BeauPs } set nv "$Nom-$BeauPs" if {[file exists "$RepertoireRa/$nv"]} { # FinPasTouche $Nom continue } set IntensitySignal [TrouveIntensitySignal $Ps] set ratio [TrouveRatio $Ps] set cluster [TrouveCluster $Ps] Sauve $IntensitySignal dans "$RepertoireIs/$nv" Sauve $ratio dans "$RepertoireRa/$nv" Sauve $cluster dans "$RepertoireCl/$nv" } # FinPasTouche $Nom } } proc RenumeroteLesPABs {} { foreach Fichier [glob "[RepertoireDuGenome]/*/MSME*"] { if {[regexp {MSME[0-9]{4}$} $Fichier]} { set Nom [file tail $Fichier] set Rep [file dirname $Fichier] regsub "MSME" $Nom "MSME0" Bon file rename $Fichier "$Rep/$Bon" Espionne "[file tail $Rep] $Nom $Bon" } } exit } proc ReordonneGroupes {lg} { set lg [lsort -command TrieNomGroupe $lg] #set lg [lsort -dictionary $lg] foreach g [list GroupeToutLeMonde all] { set i [lsearch $lg $g] if {$i != -1 && ! $i} { set lg [lreplace $lg $i $i] set lg [linsert $lg 0 $g] } } return $lg } proc ReordonneLeFichierMSF {Fichier LesAccess {Nom ""}} { if { ! [file exists $Fichier]} { set Fichier "[RepertoireDuGenome]/msf/$Fichier" } if { ! [file exists $Fichier]} { return "" } if {$Nom==""} { set Nom [file tail $Fichier] } set MSF [ContenuDuFichier $Fichier] return [ReordonneMSF $MSF $LesAccess $Nom] } proc ReordonneMSF {MSF LesAccess {Nom ""}} { while 1 { if {$Nom!="" && $LesAccess=="Disphy"} { set LesAccess [concat [list $Nom] [FromDisphy $Nom]] break } if {$LesAccess=="Secator"} { set FiMSF [Sauve $MSF dans [TmpFile "secator"]] set LesAccess [GroupeSecator $FiMSF "" "ToutLeMondeAvecGroupe" "ToCalculate"] break } if {$LesAccess=="Dpc"} { FaireLire "It's not yet possible to reorder with Dpc" return "" set FiMSF [Sauve $MSF dans [TmpFile "dpc"]] set LesAccess [GroupeDpc $FiMSF "" "ToutLeMondeAvecGroupe" "ToCalculate"] break } if {$LesAccess=="Oumy"} { FaireLire "It's not yet possible to reorder with Oumy" return "" set FiMSF [Sauve $MSF dans [TmpFile "oumy"]] set LesAccess [GroupeOumy $FiMSF "" "ToutLeMondeAvecGroupe" "ToCalculate"] break } break } set i 0 foreach Ligne $LesAccess { scan $Ligne "%s" Access set ACCESS [string toupper $Access] set RangDuAccess($ACCESS) [incr i] } set LeMSF [split $MSF "\n"] lappend LeMSF "UneLignePourFinir" foreach Ligne $LeMSF { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp "^PileUp|MSF: " $Ligne]} { if {[info exists GroupeCourant]} { set GroupeCourant [lsort -integer -index 0 $GroupeCourant] foreach iLi $GroupeCourant { set Li [lindex $iLi 1] lappend LeNouveau $Li } unset GroupeCourant } if {$Ligne=="UneLignePourFinir"} { break } lappend LeNouveau $Ligne continue } scan $Ligne "%s %s" Name Access if {$Name!="Name:"} { set Access $Name } set ACCESS [string toupper $Access] if {[info exists RangDuAccess($ACCESS)]} { lappend GroupeCourant [list [set RangDuAccess($ACCESS)] $Ligne] } } return [join $LeNouveau "\n"] } proc ReordonneNucleotide {Ln Lx Lb Lz} { set Ltot [list] foreach n $Ln x $Lx b $Lb z $Lz { lappend Ltot [list $n $x $b $z] } # ordre : # (03P) P O1P O2P O5' C5' C4' O4' C3' O3' # C2' (O2') C1' set Lfin [list] foreach a [list " O3P" " P " " O1P" " O2P" " O5'" " C5'" " C4'" " O4'" " C3'" " O3'" " C2'" " O2'" " C1'"] { if {[set i [lsearch $Ltot $a]] != -1} { lappend Lfin [lindex $Ltot $i] lset Ltot $i "" } } foreach a $Ltot { if {$a != ""} { lappend Lfin $a } } set Ln [list] ; set Lx [list] set Lb [list] ; set Lz [list] foreach e $Ltot { lassign $e a x b z lappend Ln $a lappend Lx $x lappend Lb $b lappend Lz $z } return [list $Ln $Lx $Lb $Lz] } proc ReordonneRsf {NomOuFichierRsf LaListe {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetText" } set Nom "" if {[EstUnPAB $NomOuFichierRsf]} { set Nom $NomOuFichierRsf set FichierRsf [GscopeFile $Nom "macsimRsf"] if {$LaListe=="OrderFromMsf"} { set FichierMsf [GscopeFile $Nom "msf"] DecortiqueUnMSF $FichierMsf LaListe } } else { set FichierRsf $NomOuFichierRsf } set LeNouveau {} set OnAttendOuvrante 1 set LeCourant {} set LesAnciens {} foreach Ligne [LesLignesDuFichier $FichierRsf] { if {$OnAttendOuvrante} { if { ! [regexp {^\{} $Ligne] } { lappend LeNouveau $Ligne ; continue } set OnAttendOuvrante 0 } if { [regexp {^\{} $Ligne]} { lappend LeCourant $Ligne continue } if { [regexp {^\}} $Ligne]} { lappend LeCourant $Ligne set T($Courant) [join $LeCourant "\n"] set LeCourant {} continue } if {[regexp "^name " $Ligne]} { set Courant [StringApres "name" dans $Ligne] lappend LesAnciens $Courant } lappend LeCourant $Ligne } if {$LaListe=="SameOrder"} { set LaListe $LesAnciens } foreach Courant $LaListe { if { ! [info exists T($Courant)] } { continue } lappend LeNouveau $T($Courant) } set Nouveau [join $LeNouveau "\n"] if {$GetWhat=="GetText" } { return $Nouveau } if {$GetWhat=="SameFile"} { return [Sauve $Nouveau dans $FichierRsf] } return [Sauve $Nouveau dans $GetWhat] } proc ReordonneType {aTypes xtion {exc 0}} { upvar $aTypes Types if {! [regexp {^\.} $xtion]} { set fullxtion ".$xtion" } else { set fullxtion $xtion } set IdxYa 0 foreach Type $Types { set Ext [lindex $Type 1] if {[regexp $fullxtion $Ext]} {break} incr IdxYa } if {$IdxYa == [llength $Types]} {incr IdxYa -1} if {$exc} { set Types [list [lindex $Types $IdxYa] [lindex $Types end]] } else { set Types [linsert [lreplace $Types $IdxYa $IdxYa] 0 $Type] } return $Types } proc ReordonneTypeCons {{plein ""}} { global ConsRef set l [array names ConsRef] set new {} foreach e {"IdenGlob" "ConsGlob" "SimiGlob"} { set i [lsearch $l $e] if {$i != -1} { set l [lreplace $l $i $i] lappend new $e } else { if {$plein != ""} {lappend new $e} } } set lg [lsort -integer -decreasing [lsearch -all -regexp $l "Gris"]] foreach i $lg { set l [lreplace $l $i $i] } set lg [lsort -integer -decreasing [lsearch -all -regexp $l "oin"]] foreach i $lg { set l [lreplace $l $i $i] } set l [lsort -command TrieNomGroupe $l] set new [concat $new $l] return $new } proc ReorganiseBSD {{Action ""}} { if {$Action==""} { set Action "CreateFiles" } set FiAll "BSDall20080306.tfa" set i 0 set LesBons {} set LeTFAs {} set Bascule(gi_159480768_ref_xp_001698454.) "DOS" set Bascule(gi_145341500_ref_xp_001415846.) "SAP" set Bascule(gi_159474828_ref_xp_001695527.) "Other" set Famille "P62" set D 100 set F 1101 foreach Access [LaSequenceDuTFAs $FiAll "LaListeDesAccess"] { set EspionneSeqPure 0 if {[regexp "gi_145341500_ref_xp_1415847" $Access]} { continue } set Nom [NomDuOldGI $Access] if {$Nom==""} { FaireLire "Pas de Nom pour $Access" set EspionneSeqPure 1 Espionne $Access set BelAccess $Access } else { incr D 1200 incr F 1200 lappend LeBonOrdre "$Nom $D $F F" if {$Action=="GetOrder"} { continue } set OS [ExtraitInfo $Nom "OS:"] if {[regexp "Homo sapiens" $OS]} { set OS "Homo sapiens" } regsub {\:.*} $OS "" OS scan $OS "%s %s" Genre Espece set G [string index $Genre 0] set E [string range $Espece 0 2] if {[info exists OSduGE($G$E)] && $OSduGE($G$E)!="$Genre$Espece"} { FaireLire "$OSduGE($G$E)!= $Genre$Espece" } set OSduGE($G$E) "$Genre$Espece" regsub -all {[^0-9]} $Nom "" N set BelAccess "$G$E$N" } if {$Action=="GetOrder"} { continue } Espionne "$Nom $Famille $Access" InformeSansDemander $Nom "Famille: $Famille" set TFA [LaSequenceDuTFAs $FiAll $Access] set Seq [QueLaSequenceDuTexteTFA $TFA] regsub -all -nocase {[^a-z]} $Seq "" SeqPure if {$EspionneSeqPure} { Espionne $SeqPure } set Bon [SequenceFormatTFA $Seq $BelAccess "protbrut"] lappend $LeTFAs $TFA lappend LesBons $Bon if {[info exists Bascule($Access)]} { set Famille $Bascule($Access) } } if {$Action=="GetOrder"} { return $LeBonOrdre } AfficheVariable [join $LeTFAs "\n"] "" LeTFAs AfficheVariable [join $LesBons "\n"] "" LesBons regsub ".tfa$" $FiAll ".NEW.tfa" FiNew if {$Action!="CerateFiles"} { return } SauveLesLignes $LesBons dans $FiNew regsub ".tfa$" $FiNew .msf FiNewMsf ConvertToMsf $FiNew $FiNewMsf } proc ReorganiseLesDescriptifs {Nom} { global RepertoireDuGenome set FichierDescriptif "$RepertoireDuGenome/descriptifs/$Nom" set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" foreach Ligne [LesLignesDuFichier $FichierDescriptif] { regsub "Viridiplantae; Embryophyta;" $Ligne "Viridiplantae; Streptophyta; Embryophyta;" Ligne ScanLaListe [split $Ligne "="] Access Reste if {[info exists D($Access)] && [set D($Access)]!=$Ligne} { set Stock [set D($Access)] if {[regexp "Genre espece" $Stock] && ! [regexp "Genre espece" $Ligne]} { set D($Access) $Ligne continue } if { ! [regexp "Genre espece" $Stock] && [regexp "Genre espece" $Ligne]} { continue } if { ! [regexp "Escherichia coli. OX:" $Stock] && [regexp "Escherichia coli. OX:" $Ligne]} { continue } if { [regexp "Escherichia coli. OX:" $Stock] && ! [regexp "Escherichia coli. OX:" $Ligne]} { set D($Access) $Ligne continue } set i 0 while {1} { if {[string index $Stock $i]!=[string index $Ligne $i]} { break } incr i } set d [expr $i-40] set f [expr $i+100] set Fen [AfficheVariable "[string range $Stock $d $f]\n[string range $Ligne $d $f]" "AvecRien"] set Garde [expr ! [OuiOuNon "Je prend le second ?"]] after idle destroy $Fen if {$Garde} { continue } } set D($Access) $Ligne } exit } proc RepARPAnno {} { #Localisation des sources de ARPAnno global RepARPAnno if {[info exists RepARPAnno] && [file exists $RepARPAnno]} {return $RepARPAnno} #set RepARPAnno "/home/jmuller/gscoperso/ARPAnno" set RepARPAnno "/home/jmuller/gscopublic/ARPAnno" #set RepARPAnno "/export/home/jmuller/Developpement/ARPAnno" #set RepARPAnno "/usr/bioinf/ARPAnno" return $RepARPAnno } proc RepARPAnnoWeb {{Dir ""}} { #Localisation du repertoire des resultats global RepARPAnnoWeb if {$Dir == ""} { if {[info exists RepARPAnnoWeb] && [file exists $RepARPAnnoWeb]} {return $RepARPAnnoWeb} #set RepARPAnnoWeb "/home/jmuller/www/ARPAnno/results" set RepARPAnnoWeb "/srs6/WebTempFiles/ARPAnno" #set RepARPAnnoWeb "/export/home/jmuller/www/ARPAnno/results" } else { if {[file exists $Dir]} { set RepARPAnnoWeb "$Dir" } } #if {[info exists RepARPAnnoWeb] && [file exists $RepARPAnnoWeb]} {return $RepARPAnnoWeb} return $RepARPAnnoWeb } proc RepBlastDBAlternatif {} { return "/home/chalmel/BlastDB" } proc RepDesNucPourCodonW {} { global RepDesNucPourCodonw if {[info exists RepDesNucPourCodonw]} { return $RepDesNucPourCodonw } set LesPossibles {} foreach Rep [lsort [glob -type d "[RepertoireDuGenome]/*"]] { lappend LesPossibles [file tail $Rep] } FaireLire "Please chose the directory containing the nuctfa for CodonW" set RepDesNucPourCodonw [ChoixParmi $LesPossibles] return $RepDesNucPourCodonw } proc RepGenLuc {} { return "/genomics/link/286PDB/" } proc RepOk {{Qui ""} {Set ""}} { global RepOk set FichierRepOk "/gstock/LogsRsync/RepOk.txt" if {[info exists RepOk($Qui)]} { return $RepOk($Qui) } if {[info exists RepOk("EstCharge")]} { if {$Set=="set"} { set RepOk($Qui) 1 set RepOk(List) [lsort -unique [lappend RepOk(List) $Qui]] SauveLesLignes [array get RepOk] dans $FichierRepOk return 1 } return 0 } set RepOk("EstCharge") 1 if {[file exists $FichierRepOk]} { array set RepOk [LesLignesDuFichier $FichierRepOk] } set RepOk(List) [array names RepOk] set RepOk("EstCharge") 1 return [RepOk $Qui $Set] } proc RepRepeatMasker {{ProgOuLibraries Prog}} { if {[string equal -nocase $ProgOuLibraries "Libraries"]} { return "/divers_exp/RepBase/Libraries" } #debutLP passe de ouragan a star return "/gcg/extensions/bin" #return "/bips/dist/RepeatMasker/Current/RepeatMasker" #finLP } proc RepTaxonomie {} { return "/genomics/link/Taxonomie" } proc RepXbgs {} { return "[RepertoireDuGenome]/Xbgs" } proc RepareLesRebuilded {} { foreach FP [glob "[RepertoireDuGenome]/oligos20081202/P*.tfa"] { set TFA [ContenuDuFichier $FP] if { ! [regexp -nocase "Rebuilded" $TFA]} { continue } if { [regexp -nocase "without signal" $TFA]} { continue } Espionne $TFA scan $TFA "%s %s %s %s %s %s %s %s %s" P O w s f B r o S regsub ">" $P "" P set LesSubjects [Oli $B "Subjects"] set Subjects [join $LesSubjects " "] set Signals [Oli $B "Signals"] set SignalsFull [Oli $B "SignalsFull"] set Sens [Oli $B "Sens"] Espionne "$P $B $S $Subjects $Signals $SignalsFull" regsub "oligo without signal for $B" $TFA "$Sens oligo with signal $SignalsFull for $Subjects" NewTFA regsub "oligos20081202" $FP "oligos" NewFP # Sauve $NewTFA dans $NewFP } } proc RepartiGold {tx nbt} { global Tx if {$nbt == 0} {return 0} # is a leaf, which has nbt > o as we enter this proc if {$Tx(Child,$tx) == {} } { return $nbt } set Lfils [list] set nKeep 0 ; set nCum 0 ; set nGold 0 set Lv [list] foreach c $Tx(Child,$tx) { set nc $Tx(NbChildCum,$c) set ng $Tx(NbComp,$c) set nk $Tx(NbKeep,$c) if {$nc > 0 && $ng > 0} { lappend Lfils [list $c $nk $nc $ng 0] incr nCum $nc incr nGold $ng incr nKeep $nk lappend Lv $nc } } if {$Lfils == {} } { puts "Lfils vide" return $nbt return -1 } set nbtOri $nbt # traite exceptions # si nb echantillons > nb gold, pb set BigReste 0 if {$nbt > $nGold} { puts "Warning general ! more samples than gold $tx $nbt $nGold" incr BigReste [expr {$nGold-$nbt}] set nbt $nGold } if {$BigReste > 0} { puts "BigReste : $BigReste" incr nbt -$BigReste puts "New nbt : $nbt" } # cas general if {! $Tx(-weighted)} { set Lv [lrepeat [llength $Lfils] 1] } set Lres [RepartiValEntreN $nbt $Lv] # some nodes may be full at startup, because of user-defined #puts "\n---- Init pass -----" lassign [CheckChildsFull $Lfils] Lout Reste set toSubstract 0 foreach nb $Lres l $Lout { lassign $l f nk nc ng full if {$full} { #incr toSubstract $nk } incr toSubstract $nk } set Reste [expr {$nbt - $toSubstract}] if {$Reste != $nbt} { #puts "nbt init $nbt Reste $Reste" } #puts "--------------" while {$Reste > 0} { set Lin $Lout lassign [ShareBetweenChilds $Reste $Lin] Lout Reste } set sum 0 foreach l $Lout { incr sum [lindex $l 1] } if {abs($sum - $nbtOri) > 0} { #puts "MANQUE : $tx" #puts "nbt $nbt sum $sum" } # finish # the initial full nodes have per se been repartited set EffectivementRepartis $toSubstract foreach l $Lout { lassign $l f nb nc ng full if {$nb > 0} { set Tx(NbKeep,$f) $nb set inc [RepartiGold $f $nb] if {$inc == -1} { #puts "zero $tx $nb $Tx(Rank,$tx)" foreach l $Lout { lassign $l f nb nc ng full #puts "$f $Tx(Rank,$f) $nb $nc $ng $full" } #puts "fin zero" } else { incr EffectivementRepartis $inc } } } if {$EffectivementRepartis > $nbtOri} { puts "grand pour $tx | $EffectivementRepartis > $nbtOri" set EffectivementRepartis $nbtOri } if {$EffectivementRepartis < $nbtOri} { puts "petit pour $tx $Tx(Rank,$tx)| $EffectivementRepartis < $nbtOri" } return $EffectivementRepartis } proc RepartiValEntreN {n Lv} { set tot [::tcl::mathop::+ {*}$Lv] set sr 0 set Lres [list] set Ld [list] foreach v $Lv { set d [expr {double($v)*$n/$tot}] set r [expr {int($d)}] incr sr $r lappend Ld [expr {$d-$r}] lappend Lres $r } if {$sr == $n} { return $Lres } while {($n - $sr) > 0} { set icol [MaxDeListe $Ld] set nbcol [lindex $Lres $icol] incr nbcol lset Lres $icol $nbcol lset Ld $icol 0.0 incr sr update } return $Lres } proc RepartitLesFichiers {Rep} { foreach Fichier [glob -nocomplain -directory $Rep *] { set NomFichier [file tail $Fichier] set LesElts [split $NomFichier "\_"] set Sample [lindex $LesElts 1] if {![regexp -nocase "Oligo" $Sample] && ![regexp -nocase "BAC" $Sample]} {set Sample [lindex $LesElts 2]} if {![file exists "/genomics/link/Procure/ESBS/$Sample"]} { File mkdir "/genomics/link/Procure/ESBS/$Sample" file copy $Fichier "/genomics/link/Procure/ESBS/$Sample" Espionne "$Fichier: copy done" file delete $Fichier } else { if {![file exists "/genomics/link/Procure/ESBS/$Sample/$NomFichier"]} { file copy $Fichier "/genomics/link/Procure/ESBS/$Sample" Espionne "$Fichier: copy done" } file delete $Fichier } } } proc RepartitionDesOverlaps {} { global RepertoireDuGenome foreach Nom [ListeDesPABs] { set Ov [Overlap $Nom] if { ! [regexp {([0-9]+) bases. I begin} $Ov Match N] } { continue } if { ! [info exists Cumul($N)]} { set Cumul($N) 0 } incr Cumul($N) } foreach N [NombresEntre 1 20] { if { ! [info exists Cumul($N)]} { set C 0 } else { set C [set Cumul($N)] } lappend Sortie "$N $C" } return $Sortie } proc RepeatMasker {Nom} { global RepertoireDuGenome Wup "Specific to normal case" if { ! [file exists "$RepertoireDuGenome/nucmask"]} { File mkdir "$RepertoireDuGenome/nucmask" } set Keep 1 set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" set FichierMASK "$RepertoireDuGenome/nucmask/$Nom" if { ! [file exists $FichierTFA]} { return "" } if {$Keep && [file exists $FichierMASK]} { return $FichierMASK } if {[QueLaSequenceDuTFA $FichierTFA]==""} { return "" } NousAllonsAuBoulot set Racine [TmpFile "" .].tfa File copy $FichierTFA $Racine Espionne "Je vais lancer RepeatMasker sur $Racine $Nom" catch {exec RepeatMasker $Racine -nolow} Message if { ! [file exists $Racine.masked]} { FaireLire "Repeatmasker didn't create an output for $Racine\n$Message" OnRevientDuBoulot return "" } File copy $Racine.masked $FichierMASK if { [file exists "$Racine.tbl"]} { set TexteTBL [join [LesLignesDuFichier $Racine.tbl] "\n"] Espionne $TexteTBL set PourcentMasque [DecortiqueSortieRepeatMasker All Pourcent $TexteTBL] InformeSansDemander $Nom "=RMPourcent: $PourcentMasque" set LesRepeats [DecortiqueSortieRepeatMasker All Numbers $TexteTBL] foreach R $LesRepeats { set Nature [DecortiqueSortieRepeatMasker $R Nature $TexteTBL] set nOccs [DecortiqueSortieRepeatMasker $R Occurrences $TexteTBL] InformeSansDemander $Nom "=RM: $nOccs $Nature" } } else { InformeSansDemander $Nom "=RMPourcent: 0" } foreach F [glob -nocomplain $Racine*] { File delete -force $F } OnRevientDuBoulot QuelMask $Nom return $FichierMASK } proc RepeatMaskerDeLaBoite {Nom {SelonComposition 1} {SelonMasking 1} {SelonReMasking 1} {TN 25} {TX 50}} { set FileTFA "[RepertoireDuGenome]/nuctfa/$Nom" set FileM "[RepertoireDuGenome]/nucmask/$Nom.m" set FileRM "[RepertoireDuGenome]/nucmask/$Nom.rm" set FileMRM "[RepertoireDuGenome]/nucmask/$Nom.mrm" set FileMask "[RepertoireDuGenome]/nucmask/$Nom" if {$SelonComposition && ![EstCeQueLaCompositionDeLaSequenceEstConvenable $FileTFA $TN $TX 100]} {File rename $FileTFA "$FileTFA.bias"} if {![file exists $FileTFA]} {return} set OrgaDeRef [OrganismeDuPAB $Nom] if {$SelonMasking} { set SeqTFA [MasqueLesRepeats $Nom $OrgaDeRef] Sauve $SeqTFA dans $FileM File copy -force $FileM $FileMask } if {![file exists $FileM]} {return} if {$SelonReMasking} { Sauve [SequenceFormatTFA [QueLaSequenceDuTFA $FileTFA] "[EnteteDuFichierTFA $FileTFA] NoRepeatToReMask EndReMask"] dans $FileRM Sauve [SequenceFormatTFA [QueLaSequenceDuTFA $FileM ] "[EnteteDuFichierTFA $FileM ] NoRepeatToReMask EndReMask"] dans $FileMRM set SeqTFARM [ReMasqueLesRepeats $Nom $OrgaDeRef] if {$SeqTFARM != ""} {Sauve $SeqTFARM dans $FileRM} set SeqTFAMRM [MasqueEtReMasqueLesRepeats $Nom] if {$SeqTFAMRM != ""} {Sauve $SeqTFAMRM dans $FileMRM} File copy -force $FileMRM $FileMask } return } proc RepeatMaskerDuContigEnStock {Access} { global RepertoireDuGenome set AccessMasque "${Access}_mask" set TFAMask [ContigEnStock $AccessMask] if {$TFAMask!=""} { return $TFAMask } set TFA [ContigEnStock $Access] set TFAMask [RepeatMaskerDuTexte $TFA] if {[TFAMask==""]} { return $TFA } ContigEnStock $AccessMask $TFAMask return $TFAMask } proc RepeatMaskerDuFichier {Fichier} { set FichierMasque [RepeatMaskerDuTexte [ContenuDuFichier $Fichier]] return $FichierMasque } proc RepeatMaskerDuFichierTFA {Fichier} { set MaskedFile [RepeatMaskerDuTexte [QueLaSequenceDuFichierTFA $Fichier] ] return $MaskedFile } proc RepeatMaskerDuTexte {Texte {aRacine ""}} { set GarderRacine 0 if {$aRacine!=""} { set GarderRacine 1 upvar $aRacine Racine } if {$Texte==""} { FaireLire "The sequence to mask is empty !! " set Racine "" return "" } NousAllonsAuBoulot set Racine [TmpFile "" .].tfa Sauve $Texte dans $Racine catch {exec RepeatMasker $Racine -nolow} Message if { ! [file exists $Racine.masked]} { FaireLire "Repeatmasker didn't create an output for $Racine\n$Message" OnRevientDuBoulot return "" } set TexteMask [ContenuDuFichier $Racine.masked] if { ! $GarderRacine} { foreach F [glob -nocomplain $Racine*] { file delete -force $F } } set Racine "[pwd]/$Racine" OnRevientDuBoulot return $TexteMask } proc RepeatMaskerForAll {} { foreach Nom [ListeDesPABs] { set Mask [RepeatMasker $Nom] Espionne "$Nom $Mask" } } proc RepeatMaskerPourTous {{LesNoms ""}} { set RepMask "[RepertoireDuGenome]/nucmask" if {![file exists $RepMask]} {File mkdir $RepMask} set TN 25 set TX 50 set SelonComposition 0 set SelonMasking 0 set SelonReMasking 0 if {![OuiOuNon "Would you want to mask your sequence with RepeatMasker ?" 1]} {return} if { [OuiOuNon "Would you want to eliminate the sequence with a bias in composition?" 0]} { set SelonComposition 1 if {[OuiOuNon "The threshold of 'n' is $TN %.\nWould you want to change it?" ]} {set TN [Entre $TN]} if {[OuiOuNon "The threshold of 'a,t,g,c' is $TX %.\nWould you want to change it?"]} {set TX [Entre $TX]} } if { [OuiOuNon "Would you want to mask your Sequences with RepeatMasker?" ]} {set SelonMasking 1} if { [OuiOuNon "Would you want to remask your sequence\nagainst the genome?" ]} {set SelonReMasking 1} if { [OuiOuNon "If some files exists, Would you want to conserve them ?" ]} {set Keep 1} else {set Keep 0} if {$LesNoms == ""} {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { if {![file exists "[RepertoireDuGenome]/nuctfa/$Nom"]} {continue} Espionne $Nom set SM $SelonMasking set SRM $SelonReMasking if {$Keep && [file exists "$RepMask/$Nom.m" ]} {set SM 0} if {$Keep && [file exists "$RepMask/$Nom.rm"]} {set SRM 0} RepeatMaskerDeLaBoite $Nom $SelonComposition $SM $SRM $TN $TX } FichierBilanMaskingPourTous $LesNoms return } proc RepeintNoms {} { if {$::Defauts(AffPhy)} { ColorieNomsSelonPhylum show } if {$::Defauts(AffGrp)} { ColorieNomsSelonGroupes show } if {[QuelMode] eq "seqlab"} { set LNoms $::LNSeqlab } else { set LNoms $::LNOrdali } $::NomNomSeq configure -state normal $::NomNomSeq tag configure PDB -foreground black -background red -underline 1 set Ajout {} set y 0 foreach s $LNoms { incr y if {$s in $::ListePDB} { lappend Ajout $y.0 "$y.0 wordend" } } if {$Ajout != {}} { $::NomNomSeq tag add PDB {*}$Ajout } if {[QuelMode] eq "seqlab"} { global ListeSeqsGroupees LNSeqlab NomNomSeq foreach g [array names ListeSeqsGroupees] { set t "TC$g" if {$t ni [$NomNomSeq tag names]} { set ig [string range $g 1 end] set bcoul [CouleurO2Ordali [CouleurDuGroupe $ig]] $NomNomSeq tag configure $t -background $bcoul -foreground black } foreach s [set ListeSeqsGroupees($g)] { set i [lsearch $LNSeqlab $s] incr i $NomNomSeq tag add TC$g $i.0 "$i.0 lineend" } } } $::NomNomSeq configure -state disabled return } proc RepeintNomsEtSeqs {} { RepeintNoms RepeintSeqs return } proc RepeintSeqs {} { global Cons Defauts if {[set Defauts(AffSS)]} { set Defauts(AffSS) 0 MontreStrSecDansAlignement } switch [QuelMode] { "feature" { set Lf [lreverse $::LFeatCourantes] if {$Lf != {} } { ColorieSelonFeature "Clear" foreach f $Lf { ColorieSelonFeature $f } } } "search" { ChercheMotif } "annotation" {} "arbres" { AfficheZonesSelectionnees $::ZoneSelect } "conservation" { AppliqueFeature Clear set ft [lindex $Cons(ConsCou) 0] if {$ft ne "None"} { AppliqueFeature $ft } } "cluster" { # ChangeFeaturePourCluster AfficheZonesSelectionnees $::ZoneSelect } "superpose" { AfficheZonesSelectionneesSuper } default {} } return } proc RepereBox {Texte {K ""} {Next ""}} { global RepertoireDuGenome global ListeDesContenuInfo global ListeDeBoites global ListeRestante global OldTexte #rR Next peut être AllPlease AllPleaseInfo et même AllPleaseWith_Alias_ValiGN etc qui marche dans ExtraitInfo if {[PourWscope]} { regsub -all {\+} $Texte " " Texte } Gs "DeplaceK" if {[regexp -nocase "AllPlease" $K]} { set Next $K set K "Bidon" } if {$K==""} { if {[PourWscope]} { set K "PourWscope" } else { set K [KanvaCourant] } } set DontDisplay 0 if {[PourWscope] || $K=="PourWscope"} { set DontDisplay 1 } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } #jM Petit changement de ma part voir original ci dessous,ajout de [PreFixe] JEAN if {[regexp "^Nom: [PreFixe]" $Texte] || [regexp {^Nom: (TROU|TRNA|ARN|GLIMMER)} $Texte] } { set Nom [StringApres "Nom: " dans $Texte] if {[Box $Nom nom] == $Nom} { if {$DontDisplay} { return $Nom } return [PositionneEtInforme $Nom $K $Next] } } if {[regexp "^Nom: [ExpressionReguliereDesPABs]" $Texte] || [regexp {^Nom: (TROU|TRNA|ARN|GLIMMER)} $Texte] } { set Nom [StringApres "Nom: " dans $Texte] if {[Box $Nom nom] == $Nom} { if {DontDisplay} { return $Nom } return [PositionneEtInforme $Nom $K $Next] } } set Texte [string toupper $Texte] if { ! [info exists ListeDesContenuInfo]} { Wup "ExtraitInfo loads ListeDesContenuInfo" ExtraitInfo "Bidon" } if {[regexp -nocase "AllPlease" $Next]} { set FinString 30 if {[regexp -nocase "Info" $Next]} { set FinString "end" } set Start 0 set LesTrouves {} set LesInfosTrouves {} set iTrouveOld 99999999999999 while {[set iTrouve [lsearch -start $Start -regexp $ListeDesContenuInfo $Texte]]>-1} { if {$iTrouveOld==$iTrouve} { break } set iTrouveOld $iTrouve set NomTrouve [lindex $ListeDeBoites $iTrouve] set InfoTrouve [string range [lindex $ListeDesContenuInfo $iTrouve] 0 $FinString] if {[regexp -nocase "Info" $Next]} { } else { regsub -all "\n" $InfoTrouve "/" InfoTrouve } lappend LesTrouves "$NomTrouve" lappend LesInfosTrouvees "$InfoTrouve" set Start [expr $iTrouve + 1] } if {[regexp -nocase "Info" $Next]} { return $LesInfosTrouvees } if {[regexp -nocase "With_(.*)" $Next Match Keys]} { set Keys [split $Keys "_"] foreach Trouve $LesTrouves { set LaLigneResultat [list $Trouve] foreach K $Keys { set Info [ExtraitInfo $Trouve $K] lappend LaLigneResultat $Info } lappend LesTrouvesInfos [join $LaLigneResultat "\t"] } return [join $LesTrouvesInfos "\n"] } return $LesTrouves } if { ! [info exists ListeRestante]} { set ListeRestante $ListeDesContenuInfo } if { $Next != "" && [info exists OldTexte] } { set Texte $OldTexte } set OldTexte $Texte if { [regexp "Next" $Next] } { set iTrouve [lsearch -regexp $ListeRestante $Texte] if { $iTrouve == -1 } { set ListeRestante $ListeDesContenuInfo set iTrouve [lsearch -regexp $ListeRestante $Texte] } } else { set ListeRestante $ListeDesContenuInfo set iTrouve [lsearch -regexp $ListeRestante $Texte] } if { $iTrouve == -1 } { return "" } set DebutNom [string length "Nom: "] scan [string range [lindex $ListeRestante $iTrouve] $DebutNom end] "%s" Nom set ListeRestante [lrange $ListeRestante [expr $iTrouve+1] end] regsub -nocase [PreFixe] $Nom [PreFixe] Nom if {$DontDisplay} { return $Nom } return [PositionneEtInforme $Nom $K $Next] } proc RepereBoxEtFileMoi {Texte {Quoi ""} {Quoi2 ""} {Comment ""}} { PourWscope 1 if {$Quoi=="ListAll"} { if {$Quoi2!=""} { set Synonym $Quoi2 set Synonyms [GscopeSynonyms $Synonym "GscopeIds"] if {$Synonyms!={}} { set Synonyms [join $Synonyms " "] return [FileMoi "GscopeIdsList" $Synonyms $Comment] } return "" } return [FileMoiSearchList $Texte $Comment] } if {$Texte=="Next" || $Quoi=="NextOne"} { set Nom [RepereBox "" "" "Next"] } else { set Nom [RepereBox $Texte] } set Quoi $Quoi2 if {$Nom==""} { return [Html_DuTexteTelQuel "Sorry, I found nothing"] } else { if {$Quoi==""} { return [FileMoi $Nom ] } else { return [FileMoi $Quoi $Nom $Comment] } } } proc RepereLesErreursMito {} { set LesLignes [NomLigne ListeDes Lignes] foreach Ligne $LesLignes { if {$Ligne=="281" || $Ligne=="765" || $Ligne=="766"} { set TousLesNoms [NomLigne $Ligne Noms] set ListeDesNoms [split $TousLesNoms " "] foreach Nom $ListeDesNoms { set Acc [AccessEvi $Nom] set Gn [ExtraitInfo $Nom "ValiGN"] set Des [ExtraitInfo $Nom "ValiDE"] Espionne "$Nom $Gn $Acc $Des" } } } } proc RepereNuc {Position K} { global RepertoireDuGenome global ScrollRectangleOriginal IdScrollRectangle scan $Position "%s" Position if { ! [regexp {^[0-9]+$} $Position]} {return ""} if {[regexp "rond" $K]} { Aiguille "$Position" "black" $K "RepereBox" $Position return $K } scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO set Fraction [expr ($Position-$xMinO)/($xMaxO-$xMinO)] $K xview moveto $Fraction if {$K!="OrdrePourGif"} { ShowNuc $K 0 20 "Point" $Position } $K xview scroll -5 units if { $K=="OrdrePourGif"} { return "Fraction $Fraction" } return $K } proc RepereNucOuBox {Ca K} { if {[YaPABouTROUouTRNAouARNenDebutDe $Ca]} { return [RepereBox $Ca $K] } set Nar [Narcisse $Ca] if {[YaPABouTROUouTRNAouARNenDebutDe $Nar]} { return [RepereBox $Nar $K] } if { ! [regexp {^[0-9]*$} $Ca]} { return [RepereBox $Ca $K] } if {[regexp {^[0-9]{,6}$} $Ca]} { return [RepereBox [Prefixe]$Ca $K] } return [RepereNuc $Ca $K] } proc RepertoireAffyAnnot {{version ""}} { if {$version==""} {return [AffyAnnot]} if {$version=="na27"} {return "/genomics/link/affyArrayAnnot/AffyAnno20081130"} if {$version=="na29"} {return "/genomics/link/affyArrayAnnot/AffyAnno20090701"} if {$version=="na31"} {return "/genomics/link/affyArrayAnnot/AffyAnno20100823"} if {$version=="na32"} {return "/genomics/link/affyArrayAnnot/AffyAnno20110609"} if {$version=="na33"} {return "/genomics/link/affyArrayAnnot/AffyAnno20121030"} if {$version=="na34"} {return "/genomics/link/affyArrayAnnot/AffyAnno20131024"} } proc RepertoireBalibase {} { global RepertoireBalibase set RepertoireBalibase "/genomics/link/Balibase" return $RepertoireBalibase } proc RepertoireDeTravail {{JunkDir ""}} { global RepertoireDeTravail global env if {[info exists RepertoireDeTravail]} { return $RepertoireDeTravail } if {$JunkDir == ""} { if {[PourWscope]} { set JunkDir "[HomeRipp]/junkdir" } else { if {[info exists env(HOME)]} { set JunkDir "$env(HOME)/junkdir" } else { #rR set JunkDir "/tmp/tmp[pid]" set JunkDir "[HomeRipp]/junkdir" } } } if {[file isdirectory $JunkDir]} { set RepertoireDeTravail $JunkDir return $RepertoireDeTravail } if {[OuiOuNon "Can I create a Working directory\n$JunkDir\n ?"]} { File mkdir $JunkDir set RepertoireDeTravail $JunkDir return $RepertoireDeTravail } if {[OuiOuNon "Do You want to choose an other Working directory ?"]} { set AutreJunkDir [Entre [pwd]] } else { set AutreJunkDir "" } set RepertoireDeTravail [RepertoireDeTravail $AutreJunkDir] return $RepertoireDeTravail } proc RepertoireDuGenome {{Repertoire ""}} { global env global RepertoireDuGenome global FichierMiniConfig global GscopeDir global argv if {$Repertoire!=""} { if { ! [regexp "^/" $Repertoire]} { set Repertoire "/genomics/link/$Repertoire" } set RepertoireDuGenome $Repertoire } if { ! [info exists RepertoireDuGenome]} { #rR 2010/08/26 pour permettre -project UnRepertoire (avec ou sans /genomics/link) if {[info exists argv] && [lindex $argv 0]=="-project"} { set PossibleRepertoireDuGenome [lindex $argv 1] set argv [lreplace $argv 0 1] if { ! [regexp "^/" $PossibleRepertoireDuGenome] && [FileAbsent $PossibleRepertoireDuGenome]} { set PossibleRepertoireDuGenome "/genomics/link/$PossibleRepertoireDuGenome" } if {[FileExists $PossibleRepertoireDuGenome]} { return [RepertoireDuGenome $PossibleRepertoireDuGenome] } } if {[info exists env(REPERTOIREDUGENOME)]} { set RepertoireDuGenome $env(REPERTOIREDUGENOME) } else { package require Tk set RepertoireDuGenome [tk_chooseDirectory -mustexist 1 -title "Browse for 'REPERTOIREDUGENOME' the root directory of your data" -initialdir "$GscopeDir/.."] } } regsub -all {\\} $RepertoireDuGenome "/" RepertoireDuGenome if {[info exists RepertoireDuGenome]} { set FichierMiniConfig "$RepertoireDuGenome/beton/miniconfig" return $RepertoireDuGenome } Warne "Please use setgscope subdirectory_of_/genomics/link" Warne " or change your program to Gscope directory_of_the_genome" exit } proc RepertoireMsfAPartirDePipe {} { set repMsf "[RepertoireDuGenome]/msf" set repDbclustal "[RepertoireDuGenome]/dbclustal" set repRascal "[RepertoireDuGenome]/rascal" set repLeon "[RepertoireDuGenome]/leon" set repNormd "[RepertoireDuGenome]/normd" set repCluspack "[RepertoireDuGenome]/cluspack" set repMacsims "[RepertoireDuGenome]/macsims" if {[file exists $repMsf]} { Espionne "WARNING: $repMsf exists. Do nothing." return } file mkdir $repMsf foreach pab [ListeDesPABs] { if {[file exists "$repNormd/$pab"]} { Espionne $pab set best [DefineBestMsfPipe "$repNormd/$pab"] if {$best eq "Leon" && [file exists "$repLeon/$pab"]} { file link -symbolic "$repMsf/$pab" "$repLeon/$pab" } elseif {$best eq "Rascal" && [file exists "$repRascal/$pab"]} { file link -symbolic "$repMsf/$pab" "$repRascal/$pab" } elseif {[file exists "$repDbclustal/$pab"]} { file link -symbolic "$repMsf/$pab" "$repDbclustal/$pab" } if {[file exists "$repCluspack/$pab.clu"]} { file link -symbolic "$repMsf/$pab.clust" "$repCluspack/$pab.clu" } } } } proc RepresentantDeTaxId {t} { global TDesTaxId TDesOrganismes LNOrdali set Lrep [list] foreach n $LNOrdali { if {$n eq ""} {continue} if {$TDesTaxId($n) == $t} { lappend Lrep $n } } return $Lrep } proc RepriseBigBlast {expectLimit} { puts ">>>> reprise du BIGBLAST" exec gscope "yes" "BlastPPourTousOptionFiltre2" "" "BIGBANK" "" "$expectLimit" "F" } proc RepriseDeOldBsuX {} { global RepertoireDuGenome foreach Bornes [LesLignesDuFichier "$RepertoireDuGenome/fiches/bornesdespabs"] OldBor [LesLignesDuFichier "/genomics/link/OldBsuX/fiches/bornesdespabs"] { if {$Bornes==$OldBor} { scan $Bornes "%s" Nom foreach Rep {apns blastp descriptifs msf aliinout tfasdescopains} { set S "/genomics/link/OldBsuX/$Rep" set D "$RepertoireDuGenome/$Rep" Espionne " Copie de $Rep/$Nom" if { ! [file exists "$S/$Nom"] || [file exists "$D/$Nom"]} { continue } File copy "$S/$Nom" "$D/$Nom" } } } exit } proc RepriseDeVieuxPABs {{FichierBornesACreer ""}} { global RepertoireDuGenome if {$FichierBornesACreer==""} { set FichierBornesACreer "[Fiches]/bornesdespabs" } while { ! [OuiOuNon " I need a file with all 'ORFnumber begin end orientation'\n . like 'PAB2205 1017846 1018601 R'\n or 'ORFnumber' (without begin end)\n OK ?"]} { if {[OuiOuNon "Stop ?"]} { exit } if {[OuiOuNon "Abort reading old ORFs ?"]} { return 0 } } set ControleSurADN [OuiOuNon "Do You wish that I use DNA to verify * in each ORF"] set Fichier [ButineArborescence All] if {$Fichier==""} { if {[OuiOuNon "Stop ?"]} { exit } else { return 0 } } set OwnBorne [OuiOuNonMemo "Do I create my own begin end for each orf" 0] set L 999 set D 100 set F [expr $D + $L] set I 99 foreach Ligne [LesLignesDuFichier $Fichier] { catch {unset Nom} catch {unset Debut} catch {unset Fin} catch {unset Orient} if {$OwnBorne} { scan $Ligne "%s" Nom set Debut $D set Fin $F set Orient "F" set D [expr $F + $I] set F [expr $D + $L] set nLus 3 } else { set nLus [scan $Ligne "%s %d %d %s" Nom Debut Fin Orient] } if {$nLus<3} { if {[OuiOuNon "$Ligne \n I skip it ?"]} { continue } else { if {[OuiOuNon "Stop and exit?"]} { exit } if {[OuiOuNon "Stop scanning ?"]} { break } if {[OuiOuNon "Skip this line ?"]} { continue } return 0 } } if {$Debut < $Fin} { set OrientCalcule "F" set DebutCalcule $Debut set FinCalcule $Fin } else { set OrientCalcule "R" set DebutCalcule $Fin set FinCalcule $Debut } if {$nLus==3} { set Debut $DebutCalcule set Fin $FinCalcule set Orient $OrientCalcule } else { if {$Debut!=$DebutCalcule || $Fin!=$FinCalcule} { FaireLire "$Ligne\nWhen Orientation is used I want that Begin < End ..." if {[OuiOuNon "Stop and exit ?"]} { exit } if {[OuiOuNon "Stop scanning ?"]} { break } if {[OuiOuNon "Skip this line ?"]} { continue } } } regsub -all {[^0-9]} $Nom "" sNumero scan $sNumero "%d" Numero set BeauNom [format "%s%4.4d" [PreFixe] $Numero] if {$ControleSurADN} { set SeqNuc [BoutADN $Debut $Fin $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] if {[regexp -nocase {\*} $SeqPro]} { if {[regexp {[^\*]+\*$} $SeqPro]} { if {$Orient=="F"} { incr Fin -3 } else { incr Debut 3 } } else { FaireLire "$Ligne\nContains *'s or other wrong characters in DNA" if {[OuiOuNon "Stop and exit ?"]} { exit } if {[OuiOuNon "Stop scanning ?"]} { break } if {[OuiOuNon "Skip this line ?"]} { continue } } } } lappend LesBornes "$BeauNom $Debut $Fin $Orient" } set FichierCree [SauveLesLignes $LesBornes dans $FichierBornesACreer] ChargeLesPABs return 1 } proc RepriseDesPABsCitesDans {FOF} { foreach Nom [LesLignesDuFichier $FOF] { ReprisePAB $Nom } } proc RepriseDesVieuxInfos {Source PrefixeSource} { global RepertoireDuGenome global ListeDeBoites set RepertoireSource $Source if { ! [file exists $RepertoireSource]} { set RepertoireRacine [file dirname $RepertoireDuGenome] set RepertoireSource "$RepertoireRacine/$Source" } if { ! [file exists $RepertoireSource]} { FaireLire "I cannot find $Source" exit } set RepertoireDestin "$RepertoireDuGenome/infos" if { ! [file exists $RepertoireDestin]} { File mkdir $RepertoireDestin } set Garde 0 if {[llength [glob -nocomplain "$RepertoireDestin/*"]] > 0} { set Garde [OuiOuNon "Do I keep the existing info files ?"] } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] regsub [PreFixe] $Nom $PrefixeSource NomSource set InfoSource "$RepertoireSource/infos/$NomSource" set InfoDestin "$RepertoireDuGenome/infos/$Nom" if {! [file exists $InfoSource]} { continue } if {$Nom==$NomSource} { if { $Garde && [file exists $InfoDestin]} { continue } File copy $InfoSource $InfoDestin continue } set Texte [ContenuDuFichier $InfoSource] while {[regexp "$PrefixeSource\[0-9\]+" $Texte Match]} { regsub $PrefixeSource $Match [PreFixe] Nouveau regsub -all $Match $Texte $Nouveau Texte } Espionne [Sauve $Texte dans $InfoDestin] } } proc RepriseDuGscope {Ancien Nouveau} { if { ! [regexp "/" $Ancien] } { set Ancien "/genomics/link/$Ancien" } if { ! [regexp "/" $Nouveau]} { set Nouveau "/genomics/link/$Nouveau" } if { ! [file exists $Ancien]} { FaireLire "$Ancien doesn't exist\nPlease use the absolute path of your GscopeDir\nfor example:\n gscope RepriseDuGscope /genomics/link/OldTrululu /genomics/link/TrululuNew" exit } if { ! [file exists $Nouveau]} { if { ! [OuiOuNon "Do I create $Nouveau"]} { exit } File mkdir $Nouveau } foreach Tail {beton fiches} { set RepN "$Nouveau/$Tail" if { ! [file exists $RepN]} { File mkdir $RepN } } foreach Fichier [glob "$Ancien/beton/*"] { File copy -force $Fichier "$Nouveau/beton/" } FaireLire "Please choose the files to be copied from \n$Ancien/fiches\n to \n$Nouveau/fiches/" set LesAnciensFiches [glob "$Ancien/fiches/*"] set LesAnciensACopier [ChoixDesPresents $LesAnciensFiches] foreach Fichier $LesAnciensACopier { File copy -force $Fichier "$Nouveau/fiches" } FaireLire "Please select the directories to be copied" set LesTails {nuctfa nucembl prottfa protembl infos blastp blastn tblastngenomes msf aliinout tfasdescopains} set LesTails [ChoixDesPresents $LesTails] foreach Tail $LesTails { set RepA "$Ancien/$Tail" if { ! [file exists $RepA]} { continue } set RepN "$Nouveau/$Tail" if { ! [file exists $RepN]} { File mkdir $RepN } foreach Fichier [glob -nocomplain "$RepA/*"] { File copy $Fichier "$RepN/" } } FaireLire "Now You can \nsetgscope [file tail $Nouveau]\n and \n gscope" exit } proc RepriseDuProcessus {expectLimit} { puts "#########################################" puts "--Lancement des blasts--" puts "#########################################" puts "remarque: si un des blast plante (très long, 3h pour Anopheles)" puts " lancer la fonction 'RepriseDuProcessus'" puts "vous avez dejà lancé du blast, acceptez d'utiliser ceux déjà réalisés" exec gscope "yes" "BlastPPourTousOptionFiltre" "" "[PreFixe]" "" "$expectLimit" "F" } proc RepriseDuProcessus2 {database expectLimit} { puts "#########################################" puts "--Lancement des blasts--" puts "#########################################" puts "remarque: si un des blast plante (très long, 3h pour Anopheles)" puts " lancer la fonction 'RepriseDuProcessus'" puts "vous avez dejà lancé du blast, acceptez d'utiliser ceux déjà réalisés" exec gscope "yes" "BlastPPourTousOptionFiltre2" "" "$database" "" "$expectLimit" "F" } proc ReprisePAB {Nom} { global RepertoireDuGenome global ListeDeBoites global ListeDesTROUs global ADN TDN RAC if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } if { ! [info exists ADN]} { ChargeADNetTDNetRAC } set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Orient [Box $Nom orient] set Reprises [ExtraitInfo $Nom "Fusion"] if {[llength $Reprises] == 0} { return "" } foreach Reprise [split $Reprises "/"] { set LesChamps [split [string trim $Reprise] " "] set SequenceLimite [lindex $LesChamps 0] set PABaCreer [lindex $LesChamps 2] set Commentaire $Reprise Espionne "$Commentaire" if {[file exists "$RepertoireDuGenome/prottfa/$PABaCreer"]} { if {[OuiOuNon "J'ecrase $PABaCreer, si non j'abandonne $PABaCreer."]} { continue } } switch -regexp -- $SequenceLimite { {^\-\-\-} { set Offset -2 } {^\-\-} { set Offset -1 } {^\-} { set Offset -0 } {\*$} { set Offset 1 } default { FaireLire "Ca merde pour $Nom $sequenceLimite"; continue} } regsub -all -- {[^A-Za-z]} $SequenceLimite "" SequenceLimite if {$Offset <=0} { if {$Orient == "F"} { set D [expr $Debut-3+$Offset] set F [expr $D + [string length $SequenceLimite]*3 - 1] set AntiSens -1 } else { set F [expr $Fin+3-$Offset] set D [expr $F - [string length $SequenceLimite]*3 + 1] set AntiSens 1 } set InsisteEncore 10000 while {$InsisteEncore} { set SeqNuc [BoutADN $D $F $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] if {$SequenceLimite == $SeqPro} { break } incr D $AntiSens incr F $AntiSens } if {$SequenceLimite != $SeqPro} { FaireLire "Je ne trouve pas $SequenceLimite devant $Nom. J'abandonne." return "" } if {$Orient == "F"} { set NouveauDebut $D set F [expr $NouveauDebut+2] while { [AAduCodon [BoutADN [incr F 1] [incr F 2] $Orient]] != "\*" } { } set NouvelleFin [incr F -3] } else { set NouvelleFin $F set D [expr $NouvelleFin] while { [AAduCodon [BoutADN [incr D -5] [incr D 2] $Orient]] != "\*" } { } set NouveauDebut [incr D 1] } Wup "Ici on a donc etendu la proteine en devant." } else { if {$Orient == "F"} { set D [expr $Debut+3] set F [expr $D + [string length $SequenceLimite]*3 - 1] set AntiSens +3 } else { set F [expr $Fin-3] set D [expr $F - [string length $SequenceLimite]*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 $SeqenceLimite derriere $Nom." break } if {$SequenceLimite == $SeqPro} { break } incr D $AntiSens incr F $AntiSens } if {$Orient == "F"} { set NouvelleFin $F set NouveauDebut $Debut } else { set NouveauDebut $D set NouvelleFin $Fin } Wup "Ici on a donc etendu la proteine derriere." } set SeqNuc [BoutADN $NouveauDebut $NouvelleFin $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] Espionne "$PABaCreer $NouveauDebut $NouvelleFin $Orient" set NUC [SequenceFormatTFA $SeqNuc "$PABaCreer $NouveauDebut $NouvelleFin $Orient" "nucbrut"] Espionne [Sauve $NUC dans "$RepertoireDuGenome/nuctfa/$PABaCreer"] set TFA [SequenceFormatTFA $SeqPro "$PABaCreer $NouveauDebut $NouvelleFin $Orient" "protbrut"] Espionne [Sauve $TFA dans "$RepertoireDuGenome/prottfa/$PABaCreer"] Box $PABaCreer nom $PABaCreer Box $PABaCreer debut $NouveauDebut Box $PABaCreer fin $NouvelleFin Box $PABaCreer orient $Orient } } proc ReqSrs {def {Type ""}} { set rep "" # ll : Nbr de hits # lb : Hit no set url1 "http://bips.u-strasbg.fr/srsbin/cgi-bin/wgetz?-e+\[protein-AllText:XXXX\]&" set url2 "\[protein-AllText:YYYY\]&" set url3 "\[protein-Organism:human\]+-vn+2+-lb+1+-ll+1" regsub "XXXX" $url1 [lindex $def 0] newurl set Ld [split [string trim [lindex $def 1]] " "] foreach e $Ld { regsub "YYYY" $url2 $e nu2 append newurl $nu2 if {$Type == "mini"} {break} } append newurl $url3 HttpCopy $newurl LeslignesBrutes set LeslignesBrutes [join $LeslignesBrutes "\n"] set Leslignes [ValeurDeLaBalise "pre" LeslignesBrutes] set Leslignes [split $Leslignes "\n"] set ID "" set AC "" set DE "" set GN "" set OS "" set OC "" set OX "" DecortiqueLesLignesEMBL $Leslignes ID AC DE GN OS OC OX set rep [list $ID $AC $DE] if {$ID == "" && $Type == ""} {set rep [ReqSrs $def "mini"]} return $rep } proc RequestUriFromWscope {{Value ""}} { LogWscope "RequestUriFromWscope =$Value=" global RequestUriFromWscope if {$Value=="unset"} { if {[info exists RequestUriFromWscope]} { unset RequestUriFromWscope } return "" } if {$Value!=""} { set RequestUriFromWscope $Value } if {[info exists RequestUriFromWscope]} { LogWscope "$RequestUriFromWscope"; return $RequestUriFromWscope } return "" } proc Requete {Fichier} { #Fichier = les 342 PFAM-A avec 100% d'identite (fiches/pfamA100) #ATTENTION! ETRE DS LE REPERTOIRE DAEDALUS foreach PF [CreeListePourFichierAUneColonne $Fichier] { set Commande "getz \"(\\\[swisspfam-pfa:$PF\\\] \\\> (\\\[protein-org:Homo sapiens\\\] \!\\\[protein-des:fragment | fragments\\\]))\!(daedalus>protein)\" \-c" set GetzOut [eval exec $Commande] #Espionne $GetzOut if {$GetzOut==""} {set GetzOut 0} set Def [InterrogeFichierCompletDesPFAMUniques $PF Definition] set Nb [InterrogeFichierCompletDesPFAMUniques $PF Nombre] set L [InterrogeFichierCompletDesPFAMUniques $PF Liste] AppendAuFichier "[RepertoireDuGenome]/FichierRequeteSansFragmentsComplet" "$PF\t$GetzOut\t$Nb\t$Def\t$L" } } proc RequetePourGOFromGopanel {} { set Commande "getz \"(\\\[protein-DR:GO:0000130|GO:0003700|GO:0003705|IPR000005|IPR000047|IPR000232|IPR000281|IPR000327|IPR000394|IPR000418|IPR000427|IPR000451|IPR000485|IPR000524|IPR000536|IPR000551|IPR000580|IPR000625|IPR000647|IPR000655|IPR000679|IPR000792|IPR000818|IPR000831|IPR000835|IPR000838|IPR000843|IPR000847|IPR000943|IPR000967|IPR000972|IPR000976|IPR001034|IPR001067|IPR001083|IPR001138|IPR001217|IPR001222|IPR001275|IPR001289|IPR001321|IPR001346|IPR001356|IPR001367|IPR001471|IPR001628|IPR001630|IPR001647|IPR001669|IPR001699|IPR001766|IPR001808|IPR001827|IPR001831|IPR001845|IPR002070|IPR002084|IPR002100|IPR002112|IPR002117|IPR002197|IPR002409|IPR002418|IPR002481|IPR002487|IPR002515|IPR003022|IPR003025|IPR003026|IPR003120|IPR003163|IPR003223|IPR003309|IPR003316|IPR003482|IPR003711|IPR003894|IPR003923|IPR004598|IPR004600|IPR004974|IPR004979|IPR005542|IPR007309|IPR008121|IPR008122|IPR008123|PF00046|PF00104|PF00105|PF00126|PF00140|PF00157|PF00165|PF00172|PF00178|PF00196|PF00250|PF00309|PF00319|PF00320|PF00325|PF00356|PF00376|PF00392|PF00424|PF00440|PF00447|PF00455|PF00511|PF00539|PF00554|PF00605|PF00649|PF00751|PF00847|PF00859|PF00870|PF00907|PF01017|PF01022|PF01037|PF01047|PF01056|PF01096|PF01166|PF01285|PF01316|PF01325|PF01340|PF01371|PF01418|PF01422|PF01475|PF01486|PF01530|PF02023|PF02045|PF02165|PF02200|PF02292|PF02319|PF02467|PF02559|PF02742|PF02863|PF02864|PF02865|PF02954|PF03294|PF03299|PF03529|PF03540|PF03614|PF03792|PF03849|PF03850|PF04182|PR00024|PR00025|PR00028|PR00029|PR00030|PR00031|PR00032|PR00033|PR00034|PR00035|PR00036|PR00037|PR00038|PR00039|PR00040|PR00041|PR00043|PR00044|PR00045|PR00046|PR00047|PR00049|PR00053|PR00054|PR00055|PR00056|PR00057|PR00065|PR00267|PR00367|PR00386|PR00404|PR00454|PR00455|PR00598|PR00616|PR00617|PR00619|PR00755|PR00778|PR00785|PR00937|PR00938|PR01080|PR01255|PR01256|PR01257|PR01443|PR01467|PR01590|PR01748|PR01749|PR01750|PR01751|PD000010|PD000035|PD000307|PD000425|PD000583|PD000672|PD001423|PD001788|PD002003|PD002355|PD002681|PD003860|PD007152|PD007402|PD009050|PD012582|PD016683|PD020365|PD054632|PS00027|PS00031|PS00032|PS00035|PS00041|PS00042|PS00043|PS00044|PS00344|PS00345|PS00346|PS00348|PS00349|PS00350|PS00356|PS00434|PS00463|PS00465|PS00466|PS00519|PS00552|PS00554|PS00601|PS00622|PS00657|PS00658|PS00686|PS00715|PS00716|PS00717|PS00718|PS00846|PS00894|PS01063|PS01081|PS01117|PS01119|PS01124|PS01204|PS01264|PS01283|PS01289|PS40000|PS50039|PS50043|PS50044|PS50048|PS50061|PS50066|PS50071|PS50073|PS50114|PS50116|PS50252|PS50254|PS50804|PS50809|SM00066|SM00301|SM00339|SM00342|SM00344|SM00345|SM00347|SM00348|SM00352|SM00354|SM00380|SM00389|SM00399|SM00401|SM00412|SM00413|SM00415|SM00418|SM00419|SM00420|SM00421|SM00422|SM00424|SM00425|SM00426|SM00430|SM00431|SM00432|SM00438|SM00440|SM00521|SM00529|SM00549\\\] & \\\[protein-org:Homo sapiens\\\])\" \-f {ID ACC DES ORG}" set Res [eval exec $Commande] return $Res } proc RequeteSurLaMeilleureLocalisation {Requete Fichier {Qui OnlyTheBest} {LesNoms ""}} { global RepertoireDuGenome set LesResultats {} foreach Nom $LesNoms {set TabNom($Nom) 1} set F [open $Fichier] while {[gets $F Ligne]>=0} { set LaLigne [split $Ligne "\t"] set Nom [lindex $LaLigne 0] if {$LesNoms != {} && ![info exists TabNom($Nom)]} {continue} if {![regexp -nocase "\[^0-9a-z\]$Requete" $Ligne]} {continue} set InfoQui [lindex $LaLigne 20] if {$Qui == "OnlyTheBest" && $InfoQui != "BestLoc"} {continue} lappend LesResultats $Ligne } close $F return $LesResultats } proc RequireOnce {args} { set LesPacks $args global RequireOnce foreach Pack $LesPacks { if {[info exists RequireOnce($Pack)]} {continue} set RequireOnce($Pack) 1 package require $Pack if {$Pack=="BLT"} {namespace import blt::*} } } 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 RerootNode {AId} { global Abr set t [set Abr(Arbre,$AId)] set PAD [set Abr($AId,PAD)] set id [$PAD find withtag current] set Ln [$t attr IdRer] set i [lsearch $Ln $id] set n [lindex $Ln [expr {$i - 1}]] set a [NouveauRoot $t $n] set Ser [$a serialize] $a destroy struct::tree $t $t deserialize $Ser $t set root r 0.0 $t set root theta 0.0 $t set root oldtheta 0.0 $t set root length 0.0 $t set root width [llength [$t leaves]] ReDessineArbre $AId ModeReroot $AId ModeSwap $AId return } proc ResAnaBalAgents {pk job log {motiflen ""}} { global dbR lassign $log file nbS length motiflen matrix score wgt Lblocks set Lpath [file split $file] set dataset [lindex $Lpath end-1] set file [lindex $Lpath end] set pkfile [$dbR eval {select pk_file from file where nom = $file}] if {$pkfile eq ""} { $dbR eval {insert into file values (NULL,$file,$dataset,$nbS,$length)} set pkfile [$dbR last_insert_rowid] } foreach block $Lblocks { #puts "\n$block" if {[llength $block] < 4} { continue } lassign $block tmp start stop Lseg set len [expr {$stop - $start + 1}] set pkblock [$dbR eval {select b.pk_block from block as b, file as f, ln_file_block as lfb where f.nom = $file and lfb.pk_file = f.pk_file and lfb.pk_block = b.pk_block and b.start = $start and b.stop = $stop}] if {$pkblock eq ""} { $dbR eval {insert into block values (NULL,$start,$stop,$len)} set pkblock [$dbR last_insert_rowid] $dbR eval {insert into ln_file_block values ($pkfile,$pkblock)} } set pkanalyse [$dbR eval {select pk_analyse from analyse where score = $score and matrix = $matrix and weight = $wgt and motiflen = $motiflen}] if {$pkanalyse eq ""} { $dbR eval {insert into analyse values (NULL,$score,$matrix,$wgt,$motiflen)} set pkanalyse [$dbR last_insert_rowid] } $dbR eval {insert into ln_block_analyse values($pkblock,$pkanalyse)} foreach seg $Lseg { lassign $seg tmpmotiflen rank min max nzero nsup $dbR eval {insert into segment values (NULL,$rank,$min,$max,$nzero,$nsup)} set pkseg [$dbR last_insert_rowid] $dbR eval {insert into ln_analyse_segment values($pkanalyse,$pkseg)} } } return [list] } proc ResInterProcessXML-SAX {Lxml} { global TParser unset -nocomplain TParser set p [expat -elementstartcommand RIst -characterdatacommand RIch -elementendcommand RIed ] if [catch {$p parse $Lxml} res] { puts "ERROR while parsing XML !" puts "$res" $p free unset p return [list] } $p free unset p return [array get TParser] } proc RescaleNormale {a1 a3 {cof 2.}} { lassign $a1 nx ny nz lassign $a3 vx vy vz set rx [expr {$vx+$cof*$nx}] set ry [expr {$vy+$cof*$ny}] set rz [expr {$vz+$cof*$nz}] return [list $rx $ry $rz] } proc RescorM {} { #Attribue un score aux SBS murins par rapport aux SBS humains #Définition des fichiers set FichierDesComparaisons [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/Conservation/EtudeDesConservations.txt" "r"] set FichierDesScores "[Fiches]/Conservation/EtudeDesConservationsScoreM.txt" #Effacer les fichier de sortie si ils existent if { [file exists $FichierDesScores] } { file delete $FichierDesScores } #Initialisations set CompteurScore 0 set Lus 0 while { [gets $FichierDesComparaisons LigneComparaison] >=0 } { incr Lus set Score 0.000 set PosiScore 0.000 set H 0 set M 0 for { set J 1 } { $J <= 18 } { incr J } { set CaractereM$J " " set CaractereH$J " " } ScanLaListe $LigneComparaison StafID LocChro LocStart LocEnd LocStrand ChromosomeH StartH EndH ChromosomeM StartM EndM StrandM ScoreAli SequenceSbsH SequenceSbsM StartSbsDansLeBonSensM EndSbsDansLeBonSensM SequenceSbsMReverse Conservation RandomOuPas GapOuPas ScoreC if { $GapOuPas == "SansGaps" } { if { $LocStrand == "-" } { set SequenceSbsM [NucToReverseAndComplementNuc $SequenceSbsM] } foreach CaractereMouse [split $SequenceSbsM ""] { incr M set CaractereM$M $CaractereMouse } for { set I 1 } { $I <= 18 } { incr I } { set PosiScore [StafPosiScore $I [set CaractereM$I]] set Score [expr $Score + $PosiScore] } AppendAuFichier $FichierDesScores "$Score" } else { AppendAuFichier $FichierDesScores "0" } } Espionne "Lus : $Lus" } proc ResetAllLesZones {K} { Wup "Unset toutes les zones de design" LesParametresDuDesign LesZones all "Reset" AjouteAuLog "Own specific designing areas reset to null for all." return "" } proc ResetArbre {AId w} { global Abr $w delete all $Abr(Arbre,$AId) deserialize $Abr(ArbreSer,$AId) InitialiseUnArbre $AId ModeReroot $AId ModeSwap $AId return } proc ResetColoriage {} { global Vrp set c $Vrp(WCanvas) $c itemconfigure ligne -fill black $c itemconfigure dot -fill $Vrp(colDot) return } proc ResetDesBoutons {} { if {[QuelMode] ne "feature"} {return} foreach c [winfo children $::FrmBtnFea] { if {[EtatDuBouton $c]} {ChangeEtatBouton $c} } update idletasks return } proc ResetFenetreDrawBlast {w} { set FichierBlast [AskOptionsDeDrawBlast ask $w FichierBlast] if {![file exists $FichierBlast]} { AskBlast unset } else { AskBlast unsetfile $FichierBlast } #DrawInfoDeDrawBlast unset return } proc ResetFonctions {} { if {[$::pgl(BoutonCenter) cget -fg] eq "yellow"} { FinCentreAtome } if {[$::pgl(BoutonDistance) cget -fg] eq "yellow"} { ProcessMeasureDistance reset } return } proc ResetLesZones {K} { Wup "Unset les zones de design" set PAB [LesInfosDe $K MonPAB] LesParametresDuDesign LesZones $PAB "Reset" AjouteAuLog "Own specific designing areas reset to null for $PAB." return "" } proc ResetLesZonesDeGC {K} { Wup "Unset les zones de GC pour le design " LesParametresDuDesign GCContentMinus "Reset" LesParametresDuDesign GCContentPlus "Reset" AjouteAuLog "Own GC limit reset to null." return "" } proc ResetLesZonesDeTm {K} { Wup "Unset les zones de Tm pour le design " LesParametresDuDesign TmLimit "Reset" LesParametresDuDesign TmRange "Reset" AjouteAuLog "Own Tm limit and range reset to null." return "" } proc ResetMesGO {} { global LesAccessPourLeGO global AccessPourLeGO global LesBoxGscopePourLeGO global BoxGscopePourLeGO global LesProjGscopePourLeGO global ProjGscopePourLeGO global LesBlastPPourLeGO global BlastPPourLeGO global LesFichiersDPC2GO global FichierDPC2GO global LesGOPourLeGO global GOPourLeGO global LesRequetesPourLeGO global RequetePourLeGO global TabValidationDesGO if {[info exists TabValidationDesGO]} {unset TabValidationDesGO} set LesAccessPourLeGO {} set AccessPourLeGO "" set LesBoxGscopePourLeGO {} set BoxGscopePourLeGO "" set LesProjGscopePourLeGO {} set ProjGscopePourLeGO "" set LesBoxGscopePourLeGO {} set BoxGscopePourLeGO "" set LesBlastPPourLeGO {} set BlastPPourLeGO "" set LesFichiersDPC2GO {} set FichierDPC2GO "" set LesGOPourLeGO {} set GOPourLeGO "" set LesRequetesPourLeGO {} set RequetesPourLeGO "" OntoMesGOReset return "" } proc ResetRotations {} { tcl3dMatfIdentity $::Transform tcl3dMatfIdentity $::ThisRot tcl3dMatfIdentity $::LastRot set ::TransformList [tcl3dVectorToList $::Transform 16] .top.fr.toglwin postredisplay } proc ResetZoom {K} { Wup "Permet de faire un reset du zoom" set factorx [expr 1/[ZoomFacteur $K X]] set factory [expr 1/[ZoomFacteur $K Y]] zoom $K $factorx $factory return "" } proc ReshapeCallback {toglwin {w -1} {h -1}} { set w [$toglwin width] set h [$toglwin height] glViewport 0 0 $w $h # Reset The Current Viewport glMatrixMode GL_PROJECTION # Select The Projection Matrix glLoadIdentity # Reset The Projection Matrix # Calculate The Aspect Ratio Of The Window gluPerspective 90.0 [expr {double($w)/double($h)}] 0.1 50.0 #glFrustum -30. 30. -30. 30. 0. 100. glMatrixMode GL_MODELVIEW # Select The Modelview Matrix glLoadIdentity # Reset The Modelview Matrix tcl3dSetArcBallBounds $::ArcBall $w $h # *NEW* Update mouse bounds for arcball set ::gDemo(winWidth) $w set ::gDemo(winHeight) $h puts "reshape $w $h done ..." flush stdout return } proc ResiduesEnContact {pdbid chn {Seuil 3.4}} { global PDB_[set pdbid]_AtmXYZ global PDB_[set pdbid]_NmrRes set Lr [set PDB_[set pdbid]_AtmXYZ($chn)] set Ld [lrange $Lr 0 end-1] set La [lrange $Lr 1 end] set Contact {} set i 0 foreach d $Ld { incr i set j 1 foreach a $La { incr j foreach rd $d { lassign $rd x1 y1 z1 foreach ra $a { lassign $ra x2 y2 z2 set dist [expr {sqrt(($x1-$x2)**2 + ($y1-$y2)**2 + ($z1-$z2)**2)}] if {$dist > $Seuil} {continue} lappend Contact "$i $j" } } } } return $Contact } proc ResiduesInterface {Lxml pdb chn} { set aT [ResInterProcessXML-SAX $Lxml] if {$aT != {} } { array set T $aT if {! [info exists T($pdb,h-bonds)]} { return [list] } set Lres [list] foreach b [set T($pdb,h-bonds)] { lassign $b c1 t1 n1 c2 t2 n2 if {$c1 eq $chn} { lappend Lres [list $n1 $t1] } if {$c2 eq $chn} { lappend Lres [list $n2 $t2] } } set Lres [lsort -unique -integer -index 0 $Lres] } else { set Lres [list] } return $Lres } proc ResiduesInterface_old {Lxml pdb chn} { set RId [dom parse -simple $Lxml] set doc [$RId documentElement] set Lent [$doc selectNodes //pisa_interfaces/pdb_entry] set found 0 foreach ent $Lent { set npc [$ent selectNodes ./pdb_code] if {[$npc selectNode string(.)] eq "[string toupper $pdb]"} { set found 1 break } } if {! $found} { puts " ==> PDB $pdb not found in interfaces !" $RId delete update return [list] } # check set ni [lindex [$ent selectNodes ./interface] 0] if {$ni eq ""} { puts " ==> No interfaces found for $pdb !" $RId delete update return [list] } set gc 0 set Lres [list] set Lb [$ni selectNodes ./h-bonds/bond] foreach nb $Lb { set Lv [$nb childNodes] set nr "" ; set nm "" foreach nv $Lv { switch [$nv nodeName] { "chain-1" - "chain-2" { set v [$nv selectNode string(.)] if {$v eq $chn} { set gc 1 } } "seqnum-1" - "seqnum-2" { set v [$nv selectNode string(.)] if {$gc} { set nr $v set gc 0 } } "res-1" - "rse-2" { set v [$nv selectNode string(.)] if {$gc} { set nm $v set gc 0 } } } if {$nr ne ""} { lappend Lres [list $nr $nm] } } } $RId delete update return [lsort -unique -integer -index 0 $Lres] } proc ResizeApp2 {w NewH NewW} { return global OldAppW OldAppH AppChangeSize if {[QuelMode] ne "feature"} {return} if {$AppChangeSize} {return} bind $::NomFenetreOrdali "" set AppChangeSize 1 if {abs($OldAppW-$NewW) > 50 || abs($OldAppH-$NewH) > 50} { # ChangeMode sans arguments recharge le mode ChangeMode set OldAppH $NewH set OldAppW $NewW } set AppChangeSize 0 update bind $::NomFenetreOrdali {ResizeApp2 %W %w %h} return } proc ResizeApplication {} { return global OldGeom global FrmBtnFea global NomTextSeq global EtatBtnFeat if {[QuelbMode] ne "seqlab"} {return} if {[QuelMode] != "feature"} {return} update set sg [wm geometry .] lassign [split $sg "+"] xy l h lassign [split ${xy} "x"] x y set Geom [list $x $y $l $h] if {! [info exists OldGeom]} { set OldGeom $Geom return } set AFaire 0 foreach o $OldGeom v $Geom { if {[expr {abs($o-$v)}] > 100} {set AFaire 1 ; break} } if {$AFaire} { DetruitBoutonsOrdali AfficheBoutonsFeatures foreach b [array names EtatBtnFeat] { if {[set EtatBtnFeat($b)]} {EnfonceBtnFeature $b} } set OldGeom $Geom } return } proc ResizeEtMontageDesCrops {{Racine ""} {Ext ""} {Resize ""}} { if {$Resize==""} { set Resize "10%" } if {$Ext==""} { set Ext "png" } foreach Fichier [glob "$Racine.*.*.png"] { set RX "$Racine\.(\[0-9\]+)\.(\[0-9\]+)\-Crop\.$Ext$" if { ! [regexp $RX $Fichier Match X Y]} { continue } set ImageDe($X,$Y) $Fichier lappend LesX $X lappend LesY $Y } set LesX [lsort -integer $LesX] set LesY [lsort -integer $LesY] foreach Y $LesY { foreach X $LesX { set Source $ImageDe($X,$Y) regsub "\.$Ext" $Source "-Small.$Ext" Destin set Destin "Small/$Destin" exec convert -resize $Resize $Source $Destin lappend LesDestin $Destin } } return $LesDestin } proc ResolutionUnPDB {IdPdb} { Espionne "$IdPdb" if {[regexp {PDB:} $IdPdb]} { regsub {:} $IdPdb "_" IdPdb } Espionne "$IdPdb" set nom [DonneIdDeAccessPDB $IdPdb] set lignes [RecupereUnFichierSurWeb $nom] foreach l $lignes { if {![regexp {^REMARK 2 RESOLUTION.*} $l]} { continue } Espionne "l: $l" regsub -all { +} $l " " l set l [split $l " "] set res [lindex $l 3] if {![string is double $res]} { set res -1 break } } return $res } proc RestaureLeCanva {K {ListeOuFichier ""}} { if {[llength $ListeOuFichier] > 1} { set LesCommandesDeCreation $ListeOuFichier } else { if {[llength $ListeOuFichier] == 1} { set Fichier $ListeOuFichier } else { set Fichier [ButineArborescence] if {$Fichier == ""} { return "" } } set LesCommandesDeCreation [LesLignesDuFichier $Fichier] } foreach CommandeDeCreation $LesCommandesDeCreation { eval $K $CommandeDeCreation } return $K } proc RestaureUneDemarcation {K {NomDuFichier ""}} { Demarcation "dallv" $K return [AppendUneDemarcation $K $NomDuFichier] } proc ResteDesFeuilles {t Le} { foreach f [$t leaves] { if {$f ni $Le} {lappend Lr $f} } return $Lr } proc RestrictedParameter {Qui {Valeur ""} {Quoi ""}} { Wup "Permet de gerer et stocker les parametres de restriction et de les redonner a toutes les procedures" #Positionne Positionne le parametre a la valeur #Ajoute Ajoute ou positionne le parametre si il n existe pas #Existe Retourne 1 si la valeur existe ou 0 sinon #LaValeurMerci Retourne la valeur du parametre ou vide sinon #Reset Positionne la valeur a vide #ResetAll Efface tout global RestrictedParameters #Espionne "Param $Qui $Valeur $Quoi" if {$Qui==""} { return "" } elseif {$Qui=="all"} { if {[info exists RestrictedParameters]} {return [array get RestrictedParameters]} } elseif {$Qui=="ResetAll"} { if {[info exists RestrictedParameters]} {array unset RestrictedParameters;return ""} } if {$Quoi==""} {set Quoi "LaValeurMerci"} if {$Quoi=="Positionne"} { set RestrictedParameters($Qui) $Valeur return "" } elseif {$Quoi=="Reset"} { if {[info exists RestrictedParameters($Qui)]} {unset RestrictedParameters($Qui)} } elseif {$Quoi=="LaValeurMerci"} { if {[info exists RestrictedParameters($Qui)]} {return [set RestrictedParameters($Qui)]} else {return ""} } elseif {$Quoi=="Ajoute"} { lappend RestrictedParameters($Qui) $Valeur } elseif {$Quoi=="Existe"} { if {[info exists RestrictedParameters($Qui)]} {return 1} else {return 0} } return "" } proc RestrictedParameter_Panel {K} { Wup "Panel permettant de mettre des criteres de restriction pour l affichage des oligos" set w "$K.restricted" if {[winfo exists $w]} { wm deiconify $w raise $w return "" } else {toplevel $w} wm geometry $w +300+100 wm title $w "Restricted Drawing" wm resizable $w true false set FParameters "$w.fparameters" frame $FParameters -relief "groove" pack $FParameters -fill both -expand no set LesVars [list NomOligo GC Tm ExpTm XDebutDeOligoNt XFinDeOligoNt NbCandidats NbContigues NbUnrelated LesCandidats] #On a des boutons differents pour les speciaux set LesSpeciaux [list GC Tm ExpTm XDebutDeOligoNt XFinDeOligoNt NbCandidats NbContigues NbUnrelated] foreach Param $LesSpeciaux {set Special($Param) 1} foreach Nom $LesVars { switch -exact -- $Nom { "NomOligo" {set Dico($Nom) "Id-Oligo:"} "GC" {set Dico($Nom) "GC:"} "Tm" {set Dico($Nom) "NN-Tm:"} "ExpTm" {set Dico($Nom) "Ex-Tm:"} "XDebutDeOligoNt" {set Dico($Nom) "Begin:"} "XFinDeOligoNt" {set Dico($Nom) "End:"} "NbCandidats" {set Dico($Nom) "Nb X-Detected:"} "NbContigues" {set Dico($Nom) "Nb Contiguous:"} "NbUnrelated" {set Dico($Nom) "Unrelated Acc:"} "LesCandidats" {set Dico($Nom) "X-Detected Acc:"} } } foreach NomDeVar $LesVars { if {[info exists Special($NomDeVar)]} {set OkSpecial 1} else {set OkSpecial 0} set LowerNomDeVar [string tolower $NomDeVar] global $NomDeVar set FRestricted "$FParameters.frestricted${LowerNomDeVar}" set LRestricted "$FRestricted.lrestricted" if {$OkSpecial} { set L2Restricted "$FRestricted.l2restricted" set L3Restricted "$FRestricted.l3restricted" set L4Restricted "$FRestricted.l4restricted" set E2Restricted "$FRestricted.e2restricted" } set LRestricted "$FRestricted.lrestricted" set E1Restricted "$FRestricted.e1restricted" set BRestricted "$FRestricted.brestricted" frame $FRestricted -background "#808080" -relief "groove" -padx 0 pack $FRestricted -side top -fill both -expand no label $LRestricted -background "#808FFF" -relief "groove" -text "[set Dico($NomDeVar)]" -width "14" -anchor "w" if {$OkSpecial} { label $L2Restricted -background "#808FFF" -relief "groove" -text "<=" -width "2" -anchor "center" label $L3Restricted -background "#808080" -relief "groove" -text "X" -width "2" -anchor "center" label $L4Restricted -background "#808FFF" -relief "groove" -text "<=" -width "2" -anchor "center" entry $E1Restricted -width "5" -textvariable $NomDeVar entry $E2Restricted -width "5" -textvariable "${NomDeVar}_2" button $BRestricted -background "yellow" -padx "2" -text "Ok" -command "RestrictedParameter $NomDeVar \$$NomDeVar Positionne;RestrictedParameter ${NomDeVar}_2 \$${NomDeVar}_2 Positionne" } else { entry $E1Restricted -textvariable $NomDeVar button $BRestricted -background "yellow" -padx "2" -text "Ok" -command "RestrictedParameter $NomDeVar \$$NomDeVar Positionne" } pack $LRestricted -side left -fill both -expand no if {$OkSpecial} { pack $E1Restricted -side left -fill both -expand yes pack $L2Restricted -side left -fill both pack $L3Restricted -side left -fill both pack $L4Restricted -side left -fill both pack $E2Restricted -side left -fill both -expand yes } else { pack $E1Restricted -side left -fill both -expand yes } pack $BRestricted -side left -fill both } set FPiedDeFrame "$w.fpieddeframe" set BDismiss "$FPiedDeFrame.bdismiss" set BReset "$FPiedDeFrame.breset" set BReDraw "$FPiedDeFrame.bredraw" frame $FPiedDeFrame -relief "ridge" button $BDismiss -background "red" -padx "2" -text "Dismiss" -command "destroy $w" button $BReset -background "orange" -padx "2" -text "Reset" -command "RestrictedParameter ResetAll" button $BReDraw -background "green" -padx "2" -text "ReDraw" -command "RedrawDesign $K" pack $FPiedDeFrame -expand no pack $BDismiss -fill y -side left -expand no pack $BReset -fill y -side left -expand no pack $BReDraw -fill y -side left -expand no return "" } proc RestrictionEnzyme {{Qui ""} {Quoi ""}} { global RestrictionEnzyme if {$Qui==""} { set Qui "ListOf" } if {$Quoi==""} { set Quoi "Sequence" if {$Qui=="ListOf"} { set Quoi "Enzymes" } } if {[info exists RestrictionEnzyme($Qui,$Quoi)]} { return $RestrictionEnzyme($Qui,$Quoi) } if {[info exists RestrictionEnzyme("EstCharge")]} { return "" } set RestrictionEnzyme("EstCharge") 1 set FichierEnzyme "[GscopeEtc]/enzyme.dat" set RestrictionEnzyme(File,Name) $FichierEnzyme set RestrictionEnzyme(File,Content) [ContenuDuFichier $FichierEnzyme] set OnAttendPointPoint 1 foreach Ligne [LesLignesDuFichier $FichierEnzyme] { if {$OnAttendPointPoint} { if {[regexp {\.\.\s*$} $Ligne]} { set OnAttendPointPoint 0 } continue } if {[regexp {^\;} $Ligne]} { continue } regsub {>.*} $Ligne "" Ligne set Ligne [string trim $Ligne] set Enz "" set SeqCut "" set Autres "" scan $Ligne "%s %d %s %d %s %s" Enz P SeqCut M Exclam Autres if {$Enz=="" || $SeqCut==""} { continue } set LesEnzymesCourants [split $Autres ","] lappend LesEnzymesCourants $Enz regsub -all {['_]} $SeqCut "" Seq foreach Enzyme $LesEnzymesCourants { set RestrictionEnzyme($Enzyme,SequenceCut) $SeqCut set RestrictionEnzyme($Enzyme,Sequence) $Seq lappend RestrictionEnzyme(ListOf,Enzymes) $Enz lappend RestrictionEnzyme(ListOf,Sequence) $Seq lappend RestrictionEnzyme(ListOf,SequenceCut) $SeqCut } set RestrictionEnzyme(ListOf,Sequence) [lsort -unique -dictionary $RestrictionEnzyme(ListOf,Sequence)] set RestrictionEnzyme(ListOf,SequenceCut) [lsort -unique -dictionary $RestrictionEnzyme(ListOf,SequenceCut)] set RestrictionEnzyme(ListOf,Enzymes) [lsort -unique -dictionary $RestrictionEnzyme(ListOf,Enzymes)] } return [RestrictionEnzyme $Qui $Quoi] } proc RestrictionEnzymesStatistics {{Quoi ""}} { set FichierStat "[Fiches]/EnzymesStatistics.txt" set FichierHits "[Fiches]/EnzymesHits.txt" if {$Quoi==""} { set Quoi "ShowHits" } if {$Quoi=="Update"} { file delete -force $FichierStat file delete -force $FichierHits regsub "Update" $Quoi "" Quoi } if {[FileExists $FichierStat] || [FileExists $FichierHits]} { if {[regexp "Statistics" $Quoi]} { set Texte [ContenuDuFichier $FichierStat] } if {[regexp "Hits" $Quoi]} { set Texte [ContenuDuFichier $FichierHits] } if {[regexp "Show" $Quoi]} { return [AfficheVariable $Texte "" "RestrictionEnzymesStatistics"] } return $Texte } foreach E [RestrictionEnzyme ListOf Enzymes] { set SE [string toupper [RestrictionEnzyme $E "Sequence"]] set SEX [IUPAC $SE] set LesHits {} set NbHits 0 foreach Nom [ListeDesPABs] { if {[EstUnPABMute $Nom]} { continue } set FichierTFA [GscopeFile $Nom "nuctfa"] if {[FileAbsent $FichierTFA]} { continue } set Seq [string toupper [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nuctfa"]]] if { ! [set N [regexp -all $SEX $Seq]]} { continue } lappend LesHits [Alias $Nom] incr NbHits $N } set EnzHitsCount "[format "%-8s %-20s %3d %4d" $E $SE [llength $LesHits] $NbHits]" Espionne "$EnzHitsCount" AppendAuFichier "$FichierStat" "$EnzHitsCount" AppendAuFichier "$FichierHits" "$EnzHitsCount $LesHits" } return [RestrictionEnzymesStatistics $Quoi] } proc RestrictionMap {TexteOuFichierTFA} { if {[regexp "\n" $TexteOuFichierTFA]} { set FichierTFA [Sauve $TexteOuFichierTFA dans "[TmpFile].tfa"] } else { if {[EstUnPAB $TexteOuFichierTFA]} { set Nom $TexteOuFichierTFA set FichierTFA [GscopeFile $Nom "nuctfa"] } else { set FichierTFA $TexteOuFichierTFA } } set FichierMap "[TmpFile].map" set ExecRemap "/gcg/EMBOSS/bin/remap" if {[FileAbsent $ExecRemap]} { set ExecRemap "/bips/EMBOSS/bin/remap" } set Retour [exec $ExecRemap -noreverse -outfile=$FichierMap -auto $FichierTFA] return [AfficheFichier $FichierMap ""] } proc ResultAcChmr {} { foreach Ligne [Chmr12 ListOf Index] { set LaLigne [Chmr12 $Ligne WholeLine] set GeneNameIni [Chmr12 $Ligne HUGO] set GeneId [Chmr12 $Ligne Gene_ID] set GeneNameIni [string trim $GeneNameIni] set LesGeneNameIni [split $GeneNameIni " "] set GeneNameMod [lindex $LesGeneNameIni 0] #Espionne "LaLigne $LaLigne" Espionne "$Ligne $GeneNameIni G= $GeneNameMod" if {$GeneNameIni==""} {continue} set Boite [GscopeIdsOfGeneName $GeneNameMod] set RC [ExtraitInfo $Boite "RetChip:"] set Ligne "$Ligne;$GeneId;$GeneNameIni;$GeneNameMod;$Boite;$RC" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/parser2007/Chmr12Result" } proc ResultatCluster {} { global TabRecap if { ! [info exists TabRecap]} { CreeTableRecapDesClusters } set FichierClu "[RepertoireDuGenome]/transcriptomique/ResultatClusteringMGU74.clu" LectureClusters $FichierClu LesNomsDuGroupe LesGrp cluster set LesLignesSortie {} foreach Grp $LesGrp { foreach elmt $LesNomsDuGroupe($Grp) { lappend LesLignesSortie "$Grp $TabRecap($elmt)" } } set LesTetesValides $TabRecap(LesTetesValides) set NbTetesValides [llength $LesTetesValides] set EnteteTitre [join $LesTetesValides " "] set EnteteTitre "NumCluster Boite-Ps $EnteteTitre" SauveLesLignes [concat [list $EnteteTitre] $LesLignesSortie] dans "[RepertoireDuGenome]/transcriptomique/ResultatFinalMGU74" } proc ResumeCarteExonic {{LesPABs ""}} { if {$LesPABs==""} {set LesPABs [ListeDesPABs]} set RepExonicMap "[RepertoireDuGenome]/prottfaexonicmap" foreach PAB $LesPABs { set nbExonicAreas "" set Chromosome "" set Contig "" set LesRegionsExonicLocalises {} set FichierExonicMap "$RepExonicMap/$PAB" for {set i 1} {$i<5} {incr i} { set nbExonicAreas [InterrogeFichierExonicMap $FichierExonicMap Rang $i NbExonicAreas] if {$nbExonicAreas==""} {break} set Chromosome [InterrogeFichierExonicMap $FichierExonicMap Rang $i Chromosome] set Contig [InterrogeFichierExonicMap $FichierExonicMap Rang $i Contig] lappend LesRegionsExonicLocalises "[format "%5s %8s %2s " $Chromosome $Contig $nbExonicAreas]" } Espionne "[format "%-6s %10s %10s" $PAB [Alias $PAB] [join $LesRegionsExonicLocalises " "]]" } } proc RetChip {Ligne Colonne} { global RetChip if {[info exists RetChip($Ligne,$Colonne)]} { return $RetChip($Ligne,$Colonne) } if {[info exists RetChip("EstCharge")]} { return "" } set RetChip("EstCharge") 1 #rR set FichierRetChip "[RepertoireDuGenome]/DeLaetitia/genoret_050909_sansPV.csv" set FichierRetChip "[RepertoireDuGenome]/parser/AcNMetProt_v4.csv" set Queue [file tail $FichierRetChip] regsub -nocase {\.[^\.]+$} $Queue "" Queue #rR LoadTxl LoadTxl $FichierRetChip RetChip -1 ";" set LesTetes $RetChip(ListHeaderPlease,$Queue) set LesIndex $RetChip(ListAllPlease,$Queue) #rR loadTxl set RetChip(ListOf,Header) $LesTetes set RetChip(ListOf,Index) $LesIndex return [RetChip $Ligne $Colonne] exit } proc RetChipGenesOnWeb {{ListeDesNoms ""} {TitreSummary ""} args} { set LesHeadSup {} set I 0 foreach {PH LesV} $args { regsub "_" $PH " " PH scan $PH "%s %s" Pos Head incr Pos $I lappend LesHeadSup $Head set PosSup($Head) $Pos set K 0 if {[regexp "^Generic_" $LesV]} { set VG $LesV regsub "^Generic_" $VG "" VG regsub -all "_" $VG " " VG set ValeurGenerique($Head) $VG } else { foreach V $LesV { set ValSup($Head,$K) $V incr K } } incr I } set FichierComp "[RepertoireDuGenome]/Reduction/TableauDesCompulsory" set Fichier78 "[RepertoireDuGenome]/Reduction/TableauDes7et8" set FichierParal "[RepertoireDuGenome]/Reduction/TableauDesParalogue" set Fichier7 "[RepertoireDuGenome]/Reduction/TableauDes7" set LesLignesComp [LesLignesDuFichier $FichierComp] set LesLignes78 [LesLignesDuFichier $Fichier78] set LesLignesParal [LesLignesDuFichier $FichierParal] set LesLignes7 [LesLignesDuFichier $Fichier7] set LigneDeTete [lindex $LesLignesComp 0] set LesHeaders [split $LigneDeTete ";"] foreach Head $LesHeadSup { set LesHeaders [linsert $LesHeaders $PosSup($Head) $Head] } set NbHeaders [llength $LesHeaders] set Titre "1500 RetChip Genes $TitreSummary" set HeaderDuHtml "" Html_ZeroToBody $Titre $HeaderDuHtml Html_BackTo Html_Append [H_Balise $Titre "h2"] foreach L [list $LesLignesComp $LesLignes78 $LesLignes7] T [list "Compulsory Genes" "+7+8 Genes" "+7-8 Genes"] { Html_Append [H_Balise $T "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 } set K 0 foreach Ligne $L { Espionne "Debut$Ligne FIN" set LesValeurs [split $Ligne ";"] incr I set Nom [lindex $LesValeurs 0] foreach Head $LesHeadSup { set P $PosSup($Head) set V "" if {[info exists ValSup($Head,$K)]} { set V $ValSup($Head,$K) } if {[info exists ValeurGenerique($Head)]} { regsub -all "XXXX" $ValeurGenerique($Head) $Nom V set V [eval $V] } set LesValeurs [linsert $LesValeurs $P $V] } if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { if {$H=="ProbeSet" || $H=="Pathway"} { set LongV [string length $V] if {$LongV>=200} { set Milieu [expr $LongV / 2] set V "[string range $V 0 $Milieu]
    [string range $V [expr $Milieu+1] end]" } } set Vue [BelleVue $H $V $Nom] lappend Liste $Vue } incr K } Html_TableFromList $Liste } Html_BodyToEnd return [Html_Get "ZeroIt"] #rR suite obsolete Html_Append [H_Balise "Compulsory Genes" "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 } set K 0 foreach Ligne $LesLignesComp { Espionne "Debut$Ligne FIN" set LesValeurs [split $Ligne ";"] foreach Head $LesHeadSup { set P $PosSup($Head) set V "" if {[info exists ValSup($Head,$K)]} { set V $ValSup($Head,$K) } set LesValeurs [linsert $LesValeurs $P $V] } incr I set Nom [lindex $LesValeurs 0] if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { if {$H=="ProbeSet" || $H=="Pathway"} { set LongV [string length $V] if {$LongV>=200} { set Milieu [expr $LongV / 2] set V "[string range $V 0 $Milieu]
    [string range $V [expr $Milieu+1] end]" } } set Vue [BelleVue $H $V $Nom] lappend Liste $Vue } incr K } Html_TableFromList $Liste Html_Append [H_Balise "+7+8 Genes" "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 } set K 0 foreach Ligne $LesLignes78 { Espionne "Debut$Ligne FIN" set LesValeurs [split $Ligne ";"] foreach Head $LesHeadSup { set P $PosSup($Head) set V "" if {[info exists ValSup($Head,$K)]} { set V $ValSup($Head,$K) } set LesValeurs [linsert $LesValeurs $P $V] } incr I set Nom [lindex $LesValeurs 0] if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { set Vue [BelleVue $H $V $Nom] lappend Liste $Vue } incr K } Html_TableFromList $Liste #Html_Append [H_Balise "removed paralogues" "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 #} #set K 0 #foreach Ligne $LesLignesParal { #Espionne "Debut$Ligne FIN" #set LesValeurs [split $Ligne ";"] #foreach Head $LesHeadSup { # set P $PosSup($Head) # set V "" # if {[info exists ValSup($Head,$K)]} { set V $ValSup($Head,$K) } # set LesValeurs [linsert $LesValeurs $P $V] # } #incr I #set Nom [lindex $LesValeurs 0] #if { ! [EstUnPAB $Nom]} { continue } #foreach H $LesHeaders V $LesValeurs { # set Vue [BelleVue $H $V $Nom] # lappend Liste $Vue #} #incr K #} #Html_TableFromList $Liste Html_Append [H_Balise "+7-8 Genes" "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 } set K 0 foreach Ligne $LesLignes7 { Espionne "Debut$Ligne FIN" set LesValeurs [split $Ligne ";"] foreach Head $LesHeadSup { set P $PosSup($Head) set V "" if {[info exists ValSup($Head,$K)]} { set V $ValSup($Head,$K) } set LesValeurs [linsert $LesValeurs $P $V] } incr I set Nom [lindex $LesValeurs 0] if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { set Vue [BelleVue $H $V $Nom] lappend Liste $Vue } incr K } Html_TableFromList $Liste Html_BodyToEnd return [Html_Get "ZeroIt"] } 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 RetchipOuPas {} { set lesoui 0; set lesnon 0 set Repertoire "[RepertoireDuGenome]/Arnaud/nuctfa1500Final" foreach Nom [ListeDesPABs] { if {[file exists "$Repertoire/$Nom"]} { incr lesoui InformeSansDemander $Nom "RetChip: yes" Espionne "$Nom Oui" } else { incr lesnon InformeSansDemander $Nom "RetChip: no" Espionne "$Nom Non" } } Espionne "nombre de oui= $lesoui" Espionne "nombre de non= $lesnon" } proc RetexteUneBoite {Nom Texte K {Id ""}} { global CouleurDuFond if { $Id == "" } { set Id [$K find withtag "Txt_$Nom"] } if { $Id == "" } { return "" } set AvecOrganismesSimilaires 0 set TexteAvant "" set TexteApres "" if {$AvecOrganismesSimilaires} { set OrganismesSimilaires [lrange [LesOrganismesTresProches] 0 1] if { $OrganismesSimilaires == {}} { return [NomDeScene $Nom] } if {[llength $OrganismesSimilaires] > 0} { set OrgaAvant [lindex $OrganismesSimilaires 0] if {[YaPABdans $Nom] && ! [ExisteOrthologueDans $OrgaAvant $Nom]} { set TexteAvant "+ " } } if {[llength $OrganismesSimilaires] > 1} { set OrgaApres [lindex $OrganismesSimilaires 1] if {[YaPABdans $Nom] && ! [ExisteOrthologueDans $OrgaApres $Nom]} { set TexteApres " +" } } } set BonTexte "${TexteAvant}[NomDeScene $Nom]${TexteApres}" $K itemconfigure $Id -text $BonTexte return "$BonTexte" } proc RetinalGene {{Qui ""} {Quoi ""}} { global RetinalGene if {$Qui==""} { set Qui "ListAll" set Quoi "GN" } if {[regexp -nocase {^Genes?$} $Quoi]} { set Quoi "GN" } if {[info exists RetinalGene($Qui,$Quoi)]} { return $RetinalGene($Qui,$Quoi)} if {$Qui=="GscopeIdsOf"} { if {[info exists RetinalGene(GscopeIdsOfUppercase,[string toupper $Quoi])]} { return $RetinalGene($Qui,$Quoi) } } if {[info exists RetinalGene("EstCharge")]} { return ""} set RetinalGene(ListAll,GN) {} foreach Nom [ListeDesPABs] { set GN [ExtraitInfo $Nom "ValiGN"] if {$GN==""} { continue } set RetinalGene(GeneNameOf,$Nom) $GN lappend RetinalGene(GscopeIdsOf,$GN) $Nom lappend RetinalGene(GscopeIdsOfUppercase,[string toupper $GN]) $Nom lappend RetinalGene(ListAll,GN) $GN } set RetinalGene(ListAll,GN) [lsort -u $RetinalGene(ListAll,GN)] foreach GN $RetinalGene(ListAll,GN) { foreach Nom $RetinalGene(GscopeIdsOf,$GN) { lappend RetinalGene(ListAll,GscopeIds) $Nom } } set RetinalGene("EstCharge") 1 return [RetinalGene $Qui $Quoi] } proc RetinalGenesForSelectionOnWeb {{ListeDesNoms ""} {TitreSummary ""} args} { set LesHeadSup {} set I 0 foreach {PH LesV} $args { regsub "_" $PH " " PH scan $PH "%s %s" Pos Head incr Pos $I lappend LesHeadSup $Head set PosSup($Head) $Pos set K 0 foreach V $LesV { set ValSup($Head,$K) $V incr K } incr I } set Fichier "[RepertoireDuGenome]/Reduction/TableauPourReductionSsRedondanceTrie" set LesLignes [LesLignesDuFichier $Fichier] set LigneDeTete [lindex $LesLignes 0] set LesHeaders [split $LigneDeTete ";"] #set LesHeaders [RecapitulatifRetChip "LesHeaders" "GetIt"] foreach Head $LesHeadSup { set LesHeaders [linsert $LesHeaders $PosSup($Head) $Head] } set NbHeaders [llength $LesHeaders] set Titre "Selection of Retinal Genes $TitreSummary" 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 } set K 0 foreach Ligne $LesLignes { #foreach Ligne [RecapitulatifRetChip $ListeDesNoms "GetIt"] Espionne "Debut$Ligne FIN" set LesValeurs [split $Ligne ";"] foreach Head $LesHeadSup { set P $PosSup($Head) set V "" if {[info exists ValSup($Head,$K)]} { set V $ValSup($Head,$K) } set LesValeurs [linsert $LesValeurs $P $V] } incr I set Nom [lindex $LesValeurs 0] if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { set Vue [BelleVue $H $V $Nom] #set LongV [string length $V] #if {$LongV>=80} #set Milieu [expr $LongV / 2] #set Vue "[string range $Vue 0 $Milieu]
    [string range $Vue [expr $Milieu+1] end]" lappend Liste $Vue } incr K } Html_TableFromList $Liste Html_BodyToEnd return [Html_Get "ZeroIt"] } proc RetinalGenesSummaryOnWeb {{ListeDesNoms ""} {TitreSummary ""} args} { set LesHeadSup {} set I 0 foreach {PH LesV} $args { regsub "_" $PH " " PH scan $PH "%s %s" Pos Head incr Pos $I lappend LesHeadSup $Head set PosSup($Head) $Pos set K 0 foreach V $LesV { set ValSup($Head,$K) $V incr K } incr I } set LesHeaders [RecapitulatifRetChip "LesHeaders" "GetIt"] foreach Head $LesHeadSup { set LesHeaders [linsert $LesHeaders $PosSup($Head) $Head] } set NbHeaders [llength $LesHeaders] set Titre "Gscope summary for Retinal Genes $TitreSummary" 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 } set K 0 foreach Ligne [RecapitulatifRetChip $ListeDesNoms "GetIt"] { Espionne "Debut$Ligne FIN" set LesValeurs [split $Ligne ";"] foreach Head $LesHeadSup { set P $PosSup($Head) set V "" if {[info exists ValSup($Head,$K)]} { set V $ValSup($Head,$K) } set LesValeurs [linsert $LesValeurs $P $V] } incr I set Nom [lindex $LesValeurs 0] if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { set Vue [BelleVue $H $V $Nom] lappend Liste $Vue } incr K } Html_TableFromList $Liste Html_BodyToEnd return [Html_Get "ZeroIt"] } proc RetinobaseArraytype {} { set LesLignes {} CanalSqlBioArrayBase foreach {Pk Manuf Type Batch ArrNa ArrDes} [SqlExec "select a.pk_arraytype, a.manufacturer, a.type, a.batch, a.arrayname, a.arraydescription from retinobase3.arraytype a order by a.pk_arraytype;" "GetList"] { lappend LesLignes "$Pk\t$Manuf\t$Type\t$Batch\t$ArrNa\t$ArrDes" } CanalSqlDisconnect return $LesLignes } proc RetireAttB {Seq} { set Seq [string toupper $Seq] if {[string first [SEQAttB1Invitrogen] $Seq]==0} { regsub [SEQAttB1Invitrogen] $Seq "" Bon ; return $Bon} if {[string first [SEQAttB2InvitrogenRaC] $Seq]==0} { regsub [SEQAttB2InvitrogenRaC] $Seq "" Bon ; return $Bon} return $Seq } proc RetireLesAccessDuMSF {FichierAvant LesAccess {FichierApres ""} {InOut Out}} { if {$InOut=="In"} { set In 1 } else { set In 0 } set LeNouveau {} foreach Ligne [LesLignesDuFichier $FichierAvant] { if {[regexp "^PileUp" $Ligne] || ! [regexp -nocase {[a-z0-9]} $Ligne] } { lappend LeNouveau $Ligne ; continue } set Tope 0 scan $Ligne "%s %s" Access AccessBis if {[regexp -nocase "Name:" $Ligne]} { set Access $AccessBis } foreach AccessARetirer $LesAccess { if {[string equal -nocase $AccessARetirer $Access]} { set Tope 1 ; break } } if { $Tope && ! $In } { continue } if { ! $Tope && $In } { continue } lappend LeNouveau $Ligne } if {$FichierApres=="" | $FichierApres=="GetLines"} { return $LeNouveau } return [SauveLesLignes $LeNouveau dans $FichierApres] } proc RetireNarcisseDesMSFs {} { global RepertoireDuGenome foreach Nom [ListeDesPABs] { set FichierMSF "$RepertoireDuGenome/msf/$Nom" set FichierMSF2 "$RepertoireDuGenome/msf2/$Nom" if { ! [file exists $FichierMSF]} { continue } set Nar [Narcisse $Nom] if {$Nar==""} { continue } set LeNouveau {} foreach Ligne [LesLignesDuFichier $FichierMSF] { if {[regexp -nocase "^$Nar " $Ligne] } { continue } if {[regexp -nocase "Name: $Nar " $Ligne] } { continue } lappend LeNouveau $Ligne } Espionne [SauveLesLignes $LeNouveau dans $FichierMSF2] } exit } proc RetireUnOrgaDansTFAs {Orga Source Destination} { set Ignore 0 foreach Ligne [LesLignesDuFichier $Source] { if {[regexp "^>$Orga" $Ligne]} { set Ignore 1 continue } if {[regexp "^>" $Ligne]} { set Ignore 0 } if {$Ignore} { continue } lappend LesNouveaux $Ligne } return [SauveLesLignes $LesNouveaux dans $Destination] } proc RetourAlignement {} { global NomFenetreOrdali focus $NomFenetreOrdali # raise [winfo toplevel $NomFenetreOrdali] raise . update idletasks return } proc RetourEditFeatures {what} { global TabSF TSFori LTFori ListeTypesDeFeatures EFeat if {$what ne "save"} { array set TabSF [array get TSFOri] set ListeTypesDeFeatures $LTFori } if {[array get TabSF] != [array get TSFori]} { VueEditee 1 } # verifie si on n'a pas cree des features vides set i 0 set Li [list] foreach f $ListeTypesDeFeatures { if {! [llength [array names TabSF "*,$f"]]} { lappend Li $i } incr i } if {[llength $Li]} { set Li [lsort -integer -decreasing $Li] foreach i $Li { set ListeTypesDeFeatures [lreplace $ListeTypesDeFeatures $i $i] } } # clear display AppliqueFeature "Clear" # back to normal BindModeNormal DetruitBoutonsOrdali unset EFeat return } proc RetourFeatSummary {} { destroy $::EFeat(SumWindow) font delete FontFeat return } proc RetourFenetreOrdali {w opt {bdis ""}} { global Sequences LSOrdali LNOrdali LNSeqlab LSSeqlab FrmSequence NomTextSeq wtx wxx TScrollX TScrollY NomNomSeq ListeTypesDeFeatures ListeSeqsGroupees oldMode SeqChangeDansSeqlab LNSTemp LSSTemp # avoid interactions bindtags $NomTextSeq "" update idletasks # disable the button if {$bdis ne ""} { $bdis configure -command "" } update idletasks FaireAttendre "Please wait ...\n\nChecking sequences ...\nReassigning features positions ..." # par precaution ... $NomTextSeq delete colsgaps update idletasks # Sauve widget SauveTempSeqlab 1 update idletasks # Re-assigne vue set SeqChangeDansSeqlab 0 if {$opt ne "dismiss"} { lassign [VerifieChangementSeqlab $LNSeqlab $LSSTemp] ChClu ChSeq ChAas LogSeqlab $ChClu $ChSeq $ChAas if {$ChClu} { set LNOrdali $LNSeqlab set LSOrdali [list] foreach n $LNOrdali s $LSSTemp { if {$n ne ""} { lappend LSOrdali $s } else { lappend LSOrdali "" } } set SeqChangeDansSeqlab 1 VueEditee 1 FlagFeatureScore 1 MetAJourGroupes } if {$ChSeq} { # Re-assign globals unset Sequences set LSOrdali [list] foreach n $LNOrdali s $LSSTemp { if {$n eq ""} { lappend LSOrdali "" } else { lappend LSOrdali $s set Sequences($n) $s } } VueEditee 1 UpdatePosFeatures if {$ChAas} { CalculeComposition CalculePI CalculeMolecularWeight LogSeqInfoGlobales LogLesCompositions } InitPosSeqGenGenSeq } if {$ChClu || $ChSeq} { CalculeLesPCIDuMac LogPCI } } unset -nocomplain ListeSeqsGroupees # Remet fenetres avec widgets text bind $NomTextSeq "" "" bind $NomNomSeq "" "" $NomTextSeq clean grid forget $wtx grid $wxx -row 0 -column 1 -columnspan 2 -sticky news set NomTextSeq $FrmSequence.textsequence update idletasks #$TScrollX configure -command "$NomTextSeq xview" $TScrollX configure -command {CoupleX} $TScrollY configure -command {CoupleY} destroy $w update idletasks FaireLaSuite BindModeNormal return } proc RetourGrilladin {} { set LesFichesPassePlats [lsort [glob "[RepertoireDuGenome]/fiches/PassePlat*"]] set PassePlat [ContenuDuFichier [lindex $LesFichesPassePlats end]] set RepBlastPP "$PassePlat/blastp" set LesNouveaux {} file mkdir "[RepertoireDuGenome]/blastp" foreach F [lsort [glob "$RepBlastPP/[PreFixe]*"]] { set Queue [file tail $F] set B "[RepertoireDuGenome]/blastp/$Queue" if {[file exists $B]} { continue } lappend LesNouveaux $Queue file copy $F $B } return $LesNouveaux } proc RetourneBisAccess {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s" A B L if {$B=="sw:"} { set B $A } Espionne "$B $A $L" } exit } proc RetourneLaChaine {chaine} { if {[string length $chaine] < 2} { return $chaine } for {set i [expr [string length $chaine] - 1]} {$i >= 0} {incr i -1} { append chaineInverse [string index $chaine $i] } return $chaineInverse } proc RetourneLaListe {Liste} { #lM change le 18/05/2009 #lM utilise lreverse (tcl 8.5) return [lreverse $Liste] if {[llength $Liste] < 2} { return $Liste } set X [lindex $Liste 0] set ResteRetourne [RetourneLaListe [lrange $Liste 1 end]] return [lappend ResteRetourne $X] } proc RetourneLaListeIter {liste} { if {[llength $liste] < 2} { return $liste } for {set i [expr [llength $liste] -1]} {$i >= 0} {incr i -1} { lappend listeInverse [lindex $liste $i] } return $listeInverse } proc RetourneTableau {aI aO} { upvar $aI I $aO O foreach {k v} [array get I] { lappend O($v) $k } return } proc RetraceTout {AId n {init 0}} { global Abr set t [set Abr(Arbre,$AId)] set PAD [set Abr($AId,PAD)] set x [$t get $n xO] set y [$t get $n yO] set x [SurGrille $x] set y [SurGrille $y] # puts [format "Nd xO=%5d yO=%5d %s" $x $y $n] $PAD create oval [expr {$x-5}] [expr {$y-5}] [expr {$x+5}] [expr {$y+5}] -fill red -outline red if {[$t isleaf $n]} { set xf [$t get $n xE] set yf [$t get $n yE] set xf [SurGrille $xf] set yf [SurGrille $yf] # puts [format " xE=%5d yE=%5d %s" $xf $yf $n] DessineLigneCirculaire $AId $n $x $y $xf $yf set id [$PAD create oval [expr {$xf-5}] [expr {$yf-5}] [expr {$xf+5}] [expr {$yf+5}] -fill red -outline red] $PAD raise $id $PAD create text $xf $yf -anchor w -text $n } else { set Le [$t children $n] foreach e $Le { set xe [$t get $e xO] set ye [$t get $e yO] set xf [$t get $e xE] set yf [$t get $e yE] $PAD create text $xf $yf -anchor w -text $e DessineLigneCirculaire $AId $n $x $y $xe $ye RetraceTout $AId $e $init } } return } proc RetraceToutCart {AId n} { global Abr set t [set Abr(Arbre,$AId)] set PAD [set Abr($AId,PAD)] set x [SurGrille [$t get $n xdes]] set y [SurGrille [$t get $n ydes]] if {[$t isleaf $n]} { EcritNomCart $AId $n $x $y [$t get $n oldtheta] return } MarquePourRotation $AId $n $x $y foreach e [$t children $n] { set xe [SurGrille [$t get $e xdes]] set ye [SurGrille [$t get $e ydes]] $PAD create line $x $y $xe $ye -width 1 -tags [list "DItem" "line-$n"] RetraceToutCart $AId $e } return } proc RetrieveMails {} { global db CMDef TMail set imapID $CMDef(imapID) # get uid of the last recorder mail set lastRec [$db eval {select lastuid from folder where pk_mailbox = $CMDef(pk_mailbox) and name = $CMDef(currFolder)}] # get uid of the last received mail on the server set lrec [::imap4::mboxinfo $imapID recent] puts "lrec $lrec" set lastIn [::imap4::mboxinfo $imapID exists] puts "lastIn $lastIn" # new mails ::imap4::search $imapID RECENT set Lrecent [::imap4::mboxinfo $imapID found] puts "recents [llength $Lrecent] | $Lrecent" set Lmail [list] set first 1 # first time use if {$lastRec == 0} { # first use, get all messages set lastRec 1 } else { # get mails from DB lappend Lmail [GetMailsFromDB $first $lastRec] incr lastRec } if {$lastRec != $lastIn} { lappend Lmail {*}[GetMailsFromServer $lastRec $lastIn] } puts "Lmail [llength $Lmail]" # reverse all foreach k [array names TMail] { set TMail($k) [lreverse $TMail($k)] } set Lmail [lreverse $Lmail] set TMail(List) $Lmail set i 0 ; set uid 1 foreach r $TMail(Read) { # recent or not read if {! $r || $uid in $Lrecent} { $CMDef(TbL) rowconfigure $i -font CMFontBold } incr i incr uid } update return } proc RetrievePIDBetweenPosInMACS {{FichierMSF ""} {FichierPosition ""} {FichierOut ""}} { Wup "Permet de calculer les pourcentages d identite entre des positions dans un MACS a partir d un fichier de positions" #Format d entree du fichier #1ere ligne Seq de ref (P02568) #2eme ligne les positions separees par des blancs (1 34 546 21 ...) #ligne suivante un nom de sequence par ligne #/home/julie/bin/aln_res Actin_Complet3_1_Propre.rsf ARP_ntbinding set Aln_Insert "aln_insert" if {![file exists $FichierMSF] || $FichierMSF ==""} {return "-1"} if {![file exists $FichierPosition] || $FichierPosition==""} {return "-1"} if { $FichierOut ==""} {return "-1"} #Lecture du fichier contenant les positions a recherchees set Reference "" set LesPos "" set i 0 set F [open "$FichierPosition"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {$i=="1"} { set Reference [lindex $Ligne 0] continue } if {$i=="2"} { set LesPos [split [string trim $Ligne] " "] break } } close $F AppendAuFichier $FichierOut [join [join [list Positions $LesPos] " "] "\t"] #Recherche des positions equivalentes aux positions demandees set LesResidus "" set Result "" if {[catch {set LesResidus [exec $Aln_Insert $FichierMSF $FichierPosition]} Message]} { Espionne ">>>RetrievePIDBetweenPosInMACS $FichierMSF $FichierPosition" Espionne "pb $Message" return "-1" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } return "1" } return "" } proc RetrievePositionsInMACS {{FichierMSF ""} {FichierPosition ""} {FichierOut ""}} { Wup "Permet de rechercher les positions equivalentes dans un MACS a partir d un fichier de positions" #Format d entree du fichier #1ere ligne Seq de ref (P02568) #2eme ligne les positions separees par des blancs (1 34 546 21 ...) #ligne suivante un nom de sequence par ligne #/home/julie/bin/aln_res Actin_Complet3_1_Propre.rsf ARP_ntbinding set Aln_Pos "aln_pos" if {![file exists $FichierMSF] || $FichierMSF ==""} {return "-1"} if {![file exists $FichierPosition] || $FichierPosition==""} {return "-1"} if { $FichierOut ==""} {return "-1"} #Lecture du fichier contenant les positions a recherchees set Reference "" set LesPos "" set i 0 set F [open "$FichierPosition"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {$i=="1"} { set Reference [lindex $Ligne 0] continue } if {$i=="2"} { set LesPos [split [string trim $Ligne] " "] break } } close $F AppendAuFichier $FichierOut [join [join [list Positions $LesPos] " "] "\t"] #Recherche des positions equivalentes aux positions demandees set LesResidus "" set Result "" if {[catch {set LesResidus [exec $Aln_Pos $FichierMSF $FichierPosition]} Message]} { Espionne ">>>RetrievePositionsInMACS $FichierMSF $FichierPosition" Espionne "pb $Message" return "-1" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } return "1" } return "" } proc RetrievePourUn {Nom} { #mettre en public gscope_analyse and gscope_pipe and gscope_transcriptomique #set Commande "pipe -batch -File,file=/genomics/link/GGWmm/prottfa/$Nom -Filter,maxseq=200 -Filter,add=1" #eval exec $Commande PipeLuc $Nom LancePourLaetitiaEnSortieDePipeLocal $Nom #LanceMonMacsim $Nom #RangeMacsim $Nom #sur beaufort choisit laetitia protocol #QuestionDeScience ouragan::GGWmm "ProtocolPourTous $Nom" ProtocolPourTous $Nom #CreeLesToilesPourTous $Nom RechercheESTInteressant2 $Nom BlastNPourTousEviVsADNc $Nom AnalyseSortieBlastADNc $Nom RecapADNc $Nom RenseigneTranscriptomique $Nom } proc RetrieveResidueInMACS {{FichierMSF ""} {FichierPosition ""} {FichierOut ""}} { Wup "Permet de rechercher les residus dans un MACS a partir d un fichier de positions" #Format d entree du fichier #1ere ligne Seq de ref (P02568) #2eme ligne les positions separees par des blancs (1 34 546 21 ...) #ligne suivante un nom de sequence par ligne #/home/julie/bin/aln_res Actin_Complet3_1_Propre.rsf ARP_ntbinding set Aln_Res "aln_res" if {![file exists $FichierMSF] || $FichierMSF ==""} {return "-1"} if {![file exists $FichierPosition] || $FichierPosition==""} {return "-1"} if { $FichierOut ==""} {return "-1"} #Lecture du fichier contenant les positions a recherchees set Reference "" set LesPos "" set i 0 set F [open "$FichierPosition"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if {$i=="1"} { set Reference [lindex $Ligne 0] continue } if {$i=="2"} { set LesPos [split [string trim $Ligne] " "] break } } close $F AppendAuFichier $FichierOut [join [join [list Positions $LesPos] " "] "\t"] #Recherche des residus aux positions demandees set LesResidus "" set Result "" if {[catch {set LesResidus [exec $Aln_Res $FichierMSF $FichierPosition]} Message]} { Espionne ">>>RetrieveResidueInMACS $FichierMSF $FichierPosition" Espionne "pb $Message" return "-1" } else { foreach Result [split $LesResidus "\n"] { set Result [join [string trim $Result] "\t"] AppendAuFichier $FichierOut $Result } return "1" } return "" } proc RetrouveLesVEsDeDidier {} { foreach VE [VEDidier ListeDes VE] { set ProtName [VEDidier $VE ProtName] set ProtName [string trim $ProtName] regsub { [^ ]$} $ProtName "" ProtName set CodeRipp [VEDidier $VE CodeRipp] set Alias [AliasAlias $ProtName Gscope] set PGS [NomDuAlias $Alias] if {$PGS!=""} { continue } Espionne [VEDidier $VE] Espionne "$VE $ProtName " } exit } proc ReturnBestHitFromLogFile {PAB Rep} { Wup "Permet de connaitre le meilleur Access pour un design en utilisant le fichier .log" Wup "Utiliser dans IllustreOligo et GUI pour mettre un warning si necessaire au design" Wup "Attention on ne recalcule rien sinon voir ReturnBestHitInDatabase ou CheckForBestHitInDatabase" set FichierLog "$Rep/${PAB}.log" set Bid "" set i 0 if {[file exists $FichierLog]} { set F [open "$FichierLog"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} incr i if { [regexp -nocase -indices "has no equivalent sequence in DataBase:" $Ligne Tmp]} { if { [regexp -nocase "No Hit found in Blast searches" $Ligne] || [regexp -nocase "No fitting sequence in Blast searches" $Ligne]} { set Bid "" break } else { set NewLigne [split [string trim [string range $Ligne [expr [lindex $Tmp 1]+1] end]] " "] set Bid "Warning [lindex $NewLigne 0] [lrange $NewLigne 1 end]" break } } if {[regexp -nocase -indices "has an equivalent sequence in DataBase:" $Ligne Tmp]} { set NewLigne [split [string trim [string range $Ligne [expr [lindex $Tmp 1]+1] end]] " "] set Bid "[lindex $NewLigne 0]" break } if {$i=="6"} {break} } close $F } return "$Bid" } proc ReturnBestHitInDatabase {PAB Rep} { Wup "Permet de verifier si la query a un access dans le blast et de le rendre" Wup "Retourne l access et le BId si c un peu juste" if {$PAB =="" || $Rep==""} {return ""} set FichierBlast "$Rep/${PAB}.blastn" set BId "" set AccessDeRef "" set AccessDeRef [InterrogeBestHitInDatabase $FichierBlast AccessDeRef] set BId [InterrogeBestHitInDatabase $FichierBlast BId] return "[list $AccessDeRef $BId]" } proc ReturnDefinitionFromBestHitFromLogFile {Id} { Wup "Permet de connaitre la definition du meilleur Access pour un design" Wup "On passe par FastaCmd marche bien pour RefSeq et Unigene" set OnaWarning 0 if {$Id==""} { set Id "Warning no best Id for the design" set Def "No Definition" } else { if {[regexp -nocase "Warning" $Id]} { set OldId $Id set Id [lindex $Id 1] set OnaWarning 1 } if { [regexp "UG:Hs" $Id]} { #set Def [join [FastaCmd $Id "" 0] ""] set Def [FastaCmd $Id "" 0] if {! [regexp "No Result for" $Def]} { set Def [lrange $Def 1 end] } } elseif {[regexp "RSHUM:" $Id]} { #set Def [join [FastaCmd $Id "" 0] ""] set Def [FastaCmd $Id "" 0] if {! [regexp "No Result for" $Def]} { set Def [lrange $Def 2 end] } } else { set Def "No Definition" } if {$OnaWarning==1} { set Id $OldId } } return "$Def" } proc ReunitBranches {a b} { set i [incr ::NoDeLArbre] set Id Tree-$i set ab [lindex $a 0]-[lindex $b 0] set LI [CreeNouveauArbre Tree-$i Noeud-$ab 0.0] set LI [CopieArbre $LI $a] set LI [CopieArbre $LI $b] return $LI } proc ReunitLesBilansXHDA {{Nom ""}} { Wup "Reunit les fichiers de bilans en un seul par defaut BilanXHdaTotal" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set BilanLaTotale {} set RepBilan "$RepertoireDuGenome/bilan_xhda" if { $Nom!="" } { set FichierBilanLaTotale "$RepXHda/$Nom" } else { set FichierBilanLaTotale "$RepXHda/BilanXHdaTotal" } set LesFichiersBilan [glob -nocomplain "$RepBilan/*"] #EspionneL $LesFichiersBilan foreach file $LesFichiersBilan { foreach ligne [LesLignesDuFichier $file] { lappend BilanLaTotale $ligne } } set BilanLaTotale [lsort -unique $BilanLaTotale] return [SauveLesLignes $BilanLaTotale dans $FichierBilanLaTotale] } proc ReunitMesTFAs {RepDeTravail FichierSave {Quoi LaTotale}} { Wup "Reunit les Fichiers TFA pour pouvoir faire une liste de 10 genes" #set RepDeTravail "[RepertoireDuGenome]/$RepDeTravail" #set FichierSave "[RepertoireDuGenome]/DeLBMAGM/$FichierSave" if {$Quoi=="LaTotale"} { set Prefixe [PrefixeDuGenome [CurrentGenome]] #Espionne $Prefixe set FausseListe [lsort -unique [glob -nocomplain "$RepDeTravail/${Prefixe}*"]] foreach element $FausseListe { set Queue [file tail $element] lappend Liste $Queue } } if {$Liste==""} {set $Liste [ListeDesPABs]} foreach PAB $Liste { foreach Ligne [LesLignesDuFichier "$RepDeTravail/$PAB"] { AppendAuFichier $FichierSave $Ligne } } } proc ReverseString {S} { set Reverse "" for {set i [expr [string length $S]-1]} {$i>=0} {incr i -1} { append Reverse [string range $S $i $i] } return $Reverse } proc RewriteXmlMsaToMacsim {Fichier {FichierSortie ""}} { if {$FichierSortie==""} { set FichierSortie $Fichier } set AncienXML [ContenuDuFichier $Fichier] set Root [[dom parse $AncienXML] documentElement] set NouveauXml [DoctypeForMacsim] append NouveauXml [$Root asXML -indent 1] regsub "" $NouveauXml "" NouveauXml regsub "" $NouveauXml "" NouveauXml if {$FichierSortie=="GetIt"} { return $NouveauXml } return [Sauve $NouveauXml dans $FichierSortie] } proc RewriteXmlMsaToMacsimPourTous {} { foreach Nom [ListeDesPABs] { set Fichier "[RepertoireDuGenome]/macsimXmlMsa/$Nom" if { ! [file exists $Fichier]} { continue } regsub "/macsimXmlMsa/" $Fichier "/macsimXml/" FichierSortie if {[file exists $FichierSortie]} { continue } Espionne [RewriteXmlMsaToMacsim $Fichier $FichierSortie] } } proc RewriteXmlToXml {FichierSource {FichierDestin ""} {Doctype ""}} { package require tdom if {$Doctype==""} { set Doctype [DoctypeForMacsim] } if {$Doctype=="NoDoctype"} { set Doctype "" } if {$FichierDestin==""} { set FichierDestin $FichierSource } set AncienXML [ContenuDuFichier $FichierSource] set Doc [dom parse $AncienXML] set Root [$Doc documentElement] set NouveauXml $Doctype append NouveauXml [$Root asXML -indent 1] if {$FichierDestin=="GetIt"} { return $NouveauXml } return [Sauve $NouveauXml dans $FichierDestin] } proc RewriteXmlToXmlPourTous {RepSource {RepDestin ""} {Doctype ""}} { if { ! [regexp "/" $RepSource]} { set RepSource "[RepertoireDuGenome]/$RepSource" } if {$RepDestin==""} { set RepDestin $RepSource } if { ! [regexp "/" $RepDestin]} { set RepDestin "[RepertoireDuGenome]/$RepDestin" } foreach Nom [ListeDesPABs] { set FichierSource "$RepSource/$Nom" set FichierDestin "$RepDestin/$Nom" if { ! [file exists $FichierSource]} { continue } Espionne [RewriteXmlToXml $FichierSource $FichierDestin $Doctype] } } proc RienQueLeNumeroDuChromosome {Chromo} { if {![regexp -nocase {^HS[0-9]{2}$|^HS[XY]{1}$|^HSun$} $Chromo]} {return -1} set Caractere1 [string index $Chromo 2] set Caractere2 [string index $Chromo 3] return "$Caractere1$Caractere2" } proc RogneImage {img {bg #ffffff}} { set data [$img data -background $bg] set w [image width $img] set h [llength $data] set id 0 foreach l $data { set c [regsub -all $bg $l "" tmp] if {$c == $w} {incr id} {break} } set if 0 foreach l [lreverse $data] { set c [regsub -all $bg $l "" tmp] if {$c == $w} {incr if} {break} } set x 0 for {set x 0} {$x < $w} {incr x} { set col {} foreach l $data { lappend col [lindex $l $x] } lappend Idata $col } set il 0 foreach l $Idata { set c [regsub -all $bg $l "" tmp] if {$c == $h} {incr il} {break} } set ir 0 foreach l [lreverse $Idata] { set c [regsub -all $bg $l "" tmp] if {$c == $h} {incr ir} {break} } # nettoyage de l'image if {$id != 0} {set data [lreplace $data 0 [expr {$id-1}]]} if {$if != 0} {set data [lreplace $data "end-[expr {$if-1}]" end]} set new {} if {$il != 0} { set x [expr {8*$il}] foreach l $data { lappend new [string range $l $x end] } set data $new } set new {} if {$ir != 0} { set x [expr {8*$ir}] foreach l $data { lappend new [string range $l 0 end-$x] } set data $new } set w [regsub -all "#" [lindex $data 0] "" tmp] set h [llength $data] set t3 [image create photo -width $w -height $h] $t3 blank $t3 put $data set t4 [image create photo -width $w -height $h] $t4 blank $t4 copy $t3 -compositingrule set image delete $img $t3 return $t4 } proc RosaceDeLaRosaceCourante {Type {K ""} {Interieur ""} {Exterieur ""}} { global RosaceCourante global CurrentGenome global TypeCouleur if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } set TypeDeCouleur [set TypeCouleur($K)] if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 } foreach Nom [ListeDesPABs] { set Couleur [CouleurParTypeEtNom $TypeDeCouleur $Nom $K] lappend LesPointes $Nom lappend LesPointes $Couleur } AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur return $K } proc RosaceDesArcEnCiel {Type {Orga ""} {R ""}} { Wup "Creates the wheel of orga's orthologs colored like CurrentGenome" global RepertoireDuGenome global ListeDeBoites global ListeDesPABs global RosaceCourante global CurrentGenome global LesAutresTagsPourAiguilles set PI 3.14159 if {$R==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set R $RosaceCourante } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } if { ! [info exists ListeCompleteDesOrganismesAyantPosOrth]} { set ListeCompleteDesOrganismesAyantPosOrth [PositionsDesOrthologues "LaListeDesOrgas" "genomes"] } set LesOrgas [CocheDansLaListe [concat $ListeCompleteDesOrganismesAyantPosOrth "AllTogether"]] if {$LesOrgas==""} { return } if {[lsearch $LesOrgas "AllTogether"] > -1} { set LesOrgas $ListeCompleteDesOrganismesAyantPosOrth } set MaxExterieur 0.77 set MinInterieur 0.55 set MaxExterieur 1.35 set MinInterieur 1.15 set Delta [expr ($MaxExterieur-$MinInterieur)/[llength $LesOrgas]] set Exterieur $MaxExterieur foreach Orga $LesOrgas { set Interieur [expr $Exterieur + $Delta*0.6] set LesPointes {} foreach Nom $ListeDesPABs { set LesPosOrth [PositionsDesOrthologues $Nom "genomes" $Orga] if {[llength $LesPosOrth]==0} { continue } set PosOrth [lindex $LesPosOrth 0] if {$PosOrth == -1 } { continue } set HeureOrth [HeureDePosADN $PosOrth $Orga] set Couleur [Nuance [expr $HeureOrth/(2*$PI)] 0.0 0.987] lappend LesPointes $Nom lappend LesPointes $Couleur } set LesAutresTagsPourAiguilles [list "RosaceArcEnCiel" "AEC_$Orga"] AiguilleLaListe $LesPointes $R "UneListeEnPlus" "milieu" $Interieur $Exterieur unset LesAutresTagsPourAiguilles set Exterieur [expr $Exterieur - $Delta] } } proc RosaceDesCas {Type {K ""} {Interieur ""} {Exterieur ""}} { global RepertoireDuGenome global ListeDeBoites global ListeDesPABs global RosaceCourante global CurrentGenome if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } set Black 0 set Red 0 set Orange 0 foreach Nom $ListeDesPABs { if {[Fantome $Nom]} { set Couleur $CouleurDuFond } elseif {[regexp "CasNonConnu" [Cas $Nom]]} { set Couleur "white" } elseif {[regexp {^1} [Cas $Nom]]} { set Couleur "black" incr Black } elseif {[regexp {1$} [Cas $Nom]]} { set Couleur "red" incr Red } elseif {[regexp {1,0$} [Cas $Nom]]} { set Couleur "orange" incr Orange } elseif {[regexp {1,0,0$} [Cas $Nom]]} { set Couleur "yellow" } else { set Couleur "green" } if {$Couleur=="black" || $Couleur=="red" } { lappend LesPointes $Nom lappend LesPointes $Couleur } } AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur return $K } proc RosaceDesGCSkew {Type {K ""} {Interieur ""} {Exterieur ""}} { global RepertoireDuGenome global ListeDeBoites global ListeDesPABs global RosaceCourante global CurrentGenome if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } if {$Interieur==""} { set Interieur 0.70 set Exterieur 0.74 } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] if {[regexp "GLIMMER" $Nom]} { continue } set GC [CompositionEn GC $Nom] if { $GC == "" } { set Couleur "white" } else { set Couleur [QuelInterval $GC [LesSeuilsGC] [CouleursDuRougeAuBleu 5]] } lappend LesPointes $Nom lappend LesPointes $Couleur } AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur return $K } proc RosaceDesPIOs {Type {K ""} {LesOrgas ""}} { global RepertoireDuGenome global ListeDeBoites global ListeDesPABs global RosaceCourante global CurrentGenome global ListeCompleteDesOrganismesAyantMemeOperon if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } if {$LesOrgas == ""} { if { ! [info exists ListeCompleteDesOrganismesAyantPIO]} { set ListeCompleteDesOrganismesAyantPIO [PourcentageIdentiteOrga "LaListe" "Merci"] } set LesOrgas [CocheDansLaListe [concat $ListeCompleteDesOrganismesAyantPIO "AllTogether"]] if {$LesOrgas==""} { return $K } if {[lsearch $LesOrgas "AllTogether"] > -1} { set LesOrgas $ListeCompleteDesOrganismesAyantMemeOperon } } set MaxExterieur 0.45 set MinInterieur 0.30 set Delta [expr ($MaxExterieur-$MinInterieur)/[llength $LesOrgas]] set Exterieur $MaxExterieur foreach Orga $LesOrgas { set Interieur [expr $Exterieur + $Delta*0.6] set LesPointes {} foreach Nom $ListeDesPABs { set PIO [PourcentageIdentiteOrga $Nom $Orga] if {$PIO == -1 } { continue } if {$PIO > 80} { set Couleur "red" } elseif {$PIO > 50} { set Couleur "orange" } elseif {$PIO > 30} { set Couleur "green" } else { continue } lappend LesPointes $Nom lappend LesPointes $Couleur } AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur set Exterieur [expr $Exterieur - $Delta] } return $K } proc RosaceDesPhylosFolles {Type {K ""} {Interieur ""} {Exterieur ""}} { global RepertoireDuGenome global ListeDeBoites global ListeDesPABs global RosaceCourante global CurrentGenome if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } foreach Nom $ListeDesPABs { if {[PhyloFolle $Nom]} { lappend LesPointes $Nom lappend LesPointes "red" } } AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur return $K } proc RosaceDesTables {Type {K ""} {Interieur ""} {Exterieur ""}} { global RepertoireDuGenome global ListeDeBoites global ListeDesPABs global RosaceCourante global CurrentGenome global OuEstIlRetenu if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } if { ! [info exists LesNomDesTables]} { set LesNomsDesTables {"no_ark" "manque_euryarks" "toutes_euryarks"} set LesCouleursDesTables {"red" "orange" "green" } foreach Table $LesNomsDesTables { foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/pabretenus.$Table"] { scan $Ligne "%s" Nom set ${Table}($Nom) 1 } } } foreach Nom $ListeDesPABs { foreach Table $LesNomsDesTables Couleur $LesCouleursDesTables { if {[info exists ${Table}($Nom)]} { if {$Couleur != "green"} { lappend LesPointes $Nom lappend LesPointes $Couleur } break } } } AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur return $K } proc RosaceDesTwoGenesCluster {Type {K ""} {LesOrgas ""}} { global RepertoireDuGenome global ListeDeBoites global ListeDesPABs global RosaceCourante global CurrentGenome global ListeCompleteDesOrganismesAyantMemeOperon Gs "Rien" if {$K==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set K $RosaceCourante } if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } if {$LesOrgas==""} { if { ! [info exists ListeCompleteDesOrganismesAyantMemeOperon]} { ChargeLesOrganismesAyantMemeOperon } set LesOrgas [CocheDansLaListe [concat $ListeCompleteDesOrganismesAyantMemeOperon "AllTogether"]] if {$LesOrgas==""} { return $K } if {[lsearch $LesOrgas "AllTogether"] > -1} { set LesOrgas $ListeCompleteDesOrganismesAyantMemeOperon } } set MaxExterieur 0.50 set MinInterieur 0.30 if {[regexp "MsFinal" [RepertoireDuGenome]]} { set MaxExterieur 0.65 set MinInterieur 0.40 } set Delta [expr ($MaxExterieur-$MinInterieur)/[llength $LesOrgas]] set Exterieur $MaxExterieur foreach Orga $LesOrgas { set Interieur [expr $Exterieur + $Delta*0.6] set LesPointes {} foreach Nom $ListeDesPABs { set ListeOMO [ListeDesOrganismesAyantMemeOperon $Nom] if {[lsearch $ListeOMO $Orga] == -1} { continue } lappend LesPointes $Nom lappend LesPointes "black" } AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur set Exterieur [expr $Exterieur - $Delta] } return $K } proc RosaceDuDotPlot {K {R ""}} { Wup "Creates the wheel of the dotplot" global CurrentGenome global RosaceCourante global ParametresDuBoard global ParametresDuDotPlot global NePasDessinerLesZonesDansLaRosace set PI 3.14159 if {$R==""} { if { ! [info exists RosaceCourante]} { RscopeBoard $CurrentGenome } set R $RosaceCourante } set xFin [set ParametresDuBoard($R,xFin)] set CentreX [set ParametresDuBoard($R,CentreX)] set CentreY [set ParametresDuBoard($R,CentreY)] set RayonMoyen [set ParametresDuBoard($R,RayonMoyen)] set OffsetRayonMin [set ParametresDuBoard($R,OffsetRayonMin)] set OffsetRayonMax [set ParametresDuBoard($R,OffsetRayonMax)] incr ParametresDuBoard($R,IemeCouche) set IemeCouche [set ParametresDuBoard($R,IemeCouche)] set MinX [set ParametresDuDotPlot($K,MinX)] set MaxX [set ParametresDuDotPlot($K,MaxX)] set MinY [set ParametresDuDotPlot($K,MinY)] set MaxY [set ParametresDuDotPlot($K,MaxY)] set LargeurMaxi [set ParametresDuDotPlot($K,LargeurMaxi)] set HauteurMaxi [set ParametresDuDotPlot($K,HauteurMaxi)] set LesDots [$K find withtag "Coeur"] set LesTagsDePivotPossibles {"ABY0254" "ABY0247" "ABY0248"} foreach TagDuPivot $LesTagsDePivotPossibles { set IdDuPivot [$K find withtag $TagDuPivot] if {$IdDuPivot > 0} { break } } scan [$K gettags $IdDuPivot] "%s %d" NomDuPivot PivotY set PositionEquivalenteDuPivot [expr ([Box $NomDuPivot debut]+[Box $NomDuPivot fin])/2] set CouleurDuPivot [CouleurDeLaZone $NomDuPivot] set OldPos 0 foreach Dot $LesDots { scan [$K gettags $Dot] "%s %d" Nom Pos if {[info exists DejaVu($Pos)]} { continue } set CouleurFouR [$K itemcget $Dot -fill] if {$CouleurFouR=="red"} { set FouR "R" } if {$CouleurFouR=="blue"} { set FouR "F" } if {$CouleurFouR=="grey"} { set FouR "Z" } set Couleur [CouleurDeLaZone $Nom] if {$Couleur==$CouleurDuPivot} { set Couleur "black" } set HeureF [Entre0Et2PI [expr ($Pos-$MinY)*2*$PI/($MaxY-$MinY)]] set HeureCF [Entre0Et2PI [expr $PivotY*2*$PI/($MaxY-$MinY)]] set HeureCA [Entre0Et2PI [expr $PositionEquivalenteDuPivot*2*$PI/($MaxX-$MinX)]] set HeureA [Entre0Et2PI [expr $HeureCA+$HeureCF-$HeureF]] set Angle [Entre0Et2PI [expr $PI/2-$HeureA]] lappend LesAngles $Angle set CouleurDe($Angle) $Couleur set OrientationDe($Angle) [expr $Pos < $OldPos] set DejaVu($Pos) 1 set OldPos $Pos } set LesAnglesTries [lsort -real $LesAngles] set LesAngles2x [concat $LesAnglesTries $LesAnglesTries] set OuvertureFenetre 50 set ScoreBascule 8 set CombienDeDejaVus 0 set LesCouleursLocales {} foreach Angle $LesAngles2x { set Couleur [set CouleurDe($Angle)] set FouR [set OrientationDe($Angle)] if { [llength $LesCouleursLocales] > $OuvertureFenetre } { set OldCouleur [lindex $LesCouleursLocales 0] set LesCouleursLocales [lreplace $LesCouleursLocales 0 0] } lappend LesCouleursLocales $Couleur if {[info exists Histo($Couleur)]} { incr Histo($Couleur) 1 } else { set Histo($Couleur) 1 } if {[info exists OldCouleur] && [incr Histo($OldCouleur) -1] == 0} { unset Histo($OldCouleur) } set MeilleurScore -1 set CumulFouR 0 foreach {C ValHisto} [array get Histo] { if {$FouR > 0} { incr CumulFouR } else { incr CumulFouR -1 } set N $ValHisto if {$N>$MeilleurScore} { set MeilleurScore $N set MeilleureCouleur $C } } if {[info exists DejaVu($Angle)]} { Espionne "DejaVu $Angle" if {[incr CombienDeDejaVus] > 10} { break } continue } set DejaVu($Angle) 1 if {$MeilleurScore > $ScoreBascule} { if {$CumulFouR < 0} { lappend LesPointes "Reverse_$Angle" } else { lappend LesPointes $Angle } lappend LesPointes $MeilleureCouleur } } set Rayon [expr $RayonMoyen + $OffsetRayonMax + $IemeCouche*$OffsetRayonMax*0.5] ArcLaListe $LesPointes $R "UneListeEnPlus" "angle" $Rayon $Rayon return $R } proc RotLuc {T A} { # pris dans tcl3d/rotations.tcl chez rR set c [expr {cos($T)}] set s [expr {sin($T)}] set u [expr {1.-$c}] set xx [expr {$x*$x*$u}] set yy [expr {$y*$y*$u}] set zz [expr {$z*$z*$u}] set xy [expr {$x*$y*$u}] set yz [expr {$y*$z*$u}] set xz [expr {$z*$x*$u}] set xs [expr {$x*$s}] set ys [expr {$y*$s}] set zs [expr {$z*$s}] set M [M_create [V_create [expr {$xx+$c }] [expr {$xy+$zs}] [expr $xz-$ys]] [V_create [expr $xy-$zs] [expr $yy+$c ] [expr $yz+$xs]] [V_create [expr $xz+$ys] [expr $yz-$xs] [expr $zz+$c ]] ] return } proc RotTrans {} { global pgl glMatrixMode GL_MODELVIEW # glLoadIdentity glTranslatef [expr {-1.*$pgl(xdist)}] [expr {-1.0*$pgl(ydist)}] 0.0 # glTranslatef $pgl(xdist) $pgl(ydist) 0.0 set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef $pgl(yRot) [lindex $mvList 0] [lindex $mvList 4] [lindex $mvList 8] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef $pgl(yRot) [lindex $mvList 1] [lindex $mvList 5] [lindex $mvList 9] glTranslatef $pgl(xdist) $pgl(ydist) 0.0 return } proc RotTrans1 {} { global pgl glMatrixMode GL_MODELVIEW # glLoadIdentity # glTranslatef $pgl(xdist) $pgl(ydist) 0.0 set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef $pgl(yRot) [lindex $mvList 0] [lindex $mvList 4] [lindex $mvList 8] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef $pgl(yRot) [lindex $mvList 1] [lindex $mvList 5] [lindex $mvList 9] glTranslatef [expr {-1.*$pgl(xdist)}] [expr {-1.0*$pgl(ydist)}] 0.0 return } proc RotTrans2 {} { global pgl glTranslatef $pgl(xdist) $pgl(ydist) 0.0 return } proc RotX {w angle} { global pgl set pgl(xRotate) [expr {$pgl(xRotate) + $angle}] $w postredisplay return } proc RotY {w angle} { global pgl set pgl(yRotate) [expr {$pgl(yRotate) + $angle}] $w postredisplay return } proc RotZ {w angle} { set ::pgl(zRotate) [expr {$::pgl(zRotate) + $angle}] $w postredisplay return } proc RotateImage {img angle} { # angle en radians ! set angle [expr {$angle*180./acos(-1)}] set angle [expr {fmod($angle, 360.0)}] if {$angle < 0} {set angle [expr {$angle + 360.0}]} if {$angle} { set w [image width $img] set h [image height $img] set tmp [image create photo] $tmp copy $img $img blank set buf {} if {$angle == 90} { # This would be easier with lrepeat set row {} for {set i 0} {$i<$h} {incr i} { lappend row "#000000" } for {set i 0} {$i<$w} {incr i} { lappend buf $row } set i 0 foreach row [$tmp data] { set j 0 foreach pixel $row { lset buf $j $i $pixel incr j } incr i } $img config -width $h -height $w $img put $buf } elseif {$angle == 180} { $img copy $tmp -subsample -1 -1 } elseif {$angle == 270} { # This would be easier with lrepeat set row {} for {set i 0} {$i<$h} {incr i} { lappend row "#000000" } for {set i 0} {$i<$w} {incr i} { lappend buf $row } set i $h foreach row [$tmp data] { set j 0 incr i -1 foreach pixel $row { lset buf $j $i $pixel incr j } } $img config -width $h -height $w $img put $buf } else { set a [expr {atan(1)*8*$angle/360.}] set xm [expr {$w/2.}] set ym [expr {$h/2.}] set w2 [expr {round(abs($w*cos($a)) + abs($h*sin($a)))}] set xm2 [expr {$w2/2.}] set h2 [expr {round(abs($h*cos($a)) + abs($w*sin($a)))}] set ym2 [expr {$h2/2.}] $img config -width $w2 -height $h2 for {set i 0} {$i<$h2} {incr i} { set toX -1 for {set j 0} {$j<$w2} {incr j} { set rad [expr {hypot($ym2-$i,$xm2-$j)}] set th [expr {atan2($ym2-$i,$xm2-$j) + $a}] if { [set x [expr {$xm-$rad*cos($th)}]] < 0 || $x >= $w || [set y [expr {$ym-$rad*sin($th)}]] < 0 || $y >= $h } then { continue } set x0 [expr {int($x)}] set x1 [expr {($x0+1)<$w? $x0+1: $x0}] set dx_ [expr {1.-[set dx [expr {$x1-$x}]]}] set y0 [expr {int($y)}] set y1 [expr {($y0+1)<$h? $y0+1: $y0}] set dy_ [expr {1.-[set dy [expr {$y1-$y}]]}] # This is the fastest way to get the data, because # in 8.4 [$photo get] returns a string and not a # list. This is horrible, but fast... scan "[$tmp get $x0 $y0] [$tmp get $x0 $y1] [$tmp get $x1 $y0] [$tmp get $x1 $y1]" "%d %d %d %d %d %d %d %d %d %d %d %d" r0 g0 b0 r1 g1 b1 r2 g2 b2 r3 g3 b3 set r [expr {round($dx*($r0*$dy+$r1*$dy_)+$dx_*($r2*$dy+$r3*$dy_))}] set g [expr {round($dx*($g0*$dy+$g1*$dy_)+$dx_*($g2*$dy+$g3*$dy_))}] set b [expr {round($dx*($b0*$dy+$b1*$dy_)+$dx_*($b2*$dy+$b3*$dy_))}] lappend buf [format "#%02x%02x%02x" $r $g $b] if {$toX == -1} { set toX $j } } if {$toX>=0} { $img put [list $buf] -to $toX $i set buf {} update } } } image delete $tmp } } proc RotateMode {AId val} { if {$val > 0.} {set quoi rplus} {set quoi rmoins} ChangeCurseur $AId $quoi TourneArbreEntier $AId $val OnReDessineArbre $AId return } proc RotateTextImg2 {in angle {xc ""} {yc ""}} { # xi = + (x - s/2) * cos(-a) + (y - s/2) * sin(-a) + xc # yi = - (x - s/2) * sin(-a) + (y - s/2) * cos(-a) + yc # ATTENTION ! Angle Transmis est en radians !!! set width [image width $in] set height [image height $in] set w2 [expr {$width / 2}] set h2 [expr {$height / 2}] if {$xc == ""} { set xc $w2 } if {$yc == ""} { set yc $h2 } set ww [expr {abs($width - $xc)}] if {$ww < $xc} { set ww $xc } set hh [expr {abs($height - $yc)}] if {$hh < $yc} { set hh $yc } set size [expr {round(sqrt($ww*$ww+$hh*$hh))}] set sx2 [expr {$size * 2}] set out [image create photo -width $sx2 -height $sx2] set pi2 [expr {acos(0)}] set alpha $angle # set alpha [expr {$angle * $pi2 / 90.0}] set cos [expr {cos(-$alpha)}] set sin [expr {sin(-$alpha)}] for {set y 0} {$y < $sx2} {incr y} { for {set x 0} {$x < $sx2} {incr x} { set x1 [expr {$x-$size}] set y1 [expr {$y-$size}] set x0 [expr {round(+$x1*$cos + $y1*$sin + $xc)}] set y0 [expr {round(-$x1*$sin + $y1*$cos + $yc)}] if {$x0 >= 0 && $x0 < $width && $y0 >= 0 && $y0 < $height} { if {![$in transparency get $x0 $y0]} { set col [eval format #%2.2x%2.2x%2.2x [$in get $x0 $y0]] $out put $col -to $x $y } } } } return $out } proc RowsOfCells {Texte {Separateur ""} {NewSep ""} {NewQQ ""} {NewRet ""}} { #rR attention j'ai rajoute le dernier caractere a Cell le 2009/01/22 if {$Separateur==""} { set Separateur ";" } if {$NewSep==""} { set NewSep "," } if {$NewQQ ==""} { set NewQQ "\"" } if {$NewRet==""} { set NewRet " " } if {$NewSep=="Keep"} { set NewSep $Separateur } set E 0 set Q "\"" set Ret "\n" set C "" set QQ 0 set InQ 0 set LesCell {} set LesRows {} set Cell "" foreach Suivant [split [string trim $Texte " \n\t\f\r\v"] ""] { if {$C==""} { set C $Suivant ; continue } if {$E} { Espionne $C } if {$C==$Q} { if {$QQ} { set QQ 0 append Cell $NewQQ if {$E} { Espionne "$C =$Cell= QQ 0" } set C $Suivant; continue } if {$InQ} { if {$Suivant==$Q} { set QQ 1 if {$E} { Espionne "$C =$Cell= InQ QQ 1" } set C $Suivant; continue } append Cell $Q set InQ 0 if {$E} { Espionne "$C =$Cell= InQ 0" } set C $Suivant ; continue } set InQ 1 append Cell $Q if {$E} { Espionne "$C =$Cell= InQ 1" } set C $Suivant; continue } if {$C==$Separateur} { if {$InQ} { append Cell $NewSep if {$E} { Espionne "$C =$Cell= S InQ" } set C $Suivant; continue } lappend LesCell $Cell set Cell "" if {$E} { Espionne "$C =$Cell= S OutQ" } set C $Suivant; continue } if {$C==$Ret} { if {$InQ} { append Cell $NewRet if {$E} { Espionne "$C =$Cell= R InQ" } set C $Suivant; continue } lappend LesCell $Cell set Cell "" lappend LesRows $LesCell if {$E} { Espionne [join $LesCell "/"] } set LesCell {} if {$E} { Espionne "$C =$Cell= R OutQ" } set C $Suivant; continue } append Cell $C if {$E} { Espionne "$C =$Cell=" } set C $Suivant; continue } #rR rajoute le 2009/01/22 if {$C!=$Ret && $C!=$Separateur && $C!=$Q} { append Cell $C } #rR rajoute le 2009/01/22 lappend LesCell $Cell lappend LesRows $LesCell return $LesRows } proc Rpipe {Cmd} { global SckR #set o [open cmds.R a+] #puts $o $Cmd #close $o if {! [info exists SckR(socket)] || [eof $SckR(socket)]} { if {$Cmd eq "RClose"} { return } unset -nocomplain SckR set rsHost "localhost" set rsPort 8888 set SckR(socket) [socket $rsHost $rsPort] if {[eof $SckR(socket)] == 1} { puts "probleme SckR !" close $SckR(socket) ;# connection closed ... abort } else { puts "SckR open $SckR(socket)\n" #fconfigure $SckR(socket) -buffering line fconfigure $SckR(socket) -buffering line -blocking 0 #fconfigure $SckR(socket) -buffering full -blocking 0 fileevent $SckR(socket) readable read_sock } set SckR(Reponse) "" set SckR(tmp) "" } if {$Cmd eq "RClose"} { close $SckR(socket) unset SckR return } #puts "Cmd= $Cmd" append Cmd " ; print('turlututu');" #puts "Cmd= $Cmd" puts $SckR(socket) "$Cmd" update idletasks flush $SckR(socket) vwait SckR(Reponse) set rep $SckR(Reponse) set SckR(Reponse) "" set SckR(tmp) "" #puts "rep : $rep" set Lrep [split $rep "\n"] set i [lsearch -regexp $Lrep "turlututu"] if {$i != -1} { set Lrep [lreplace $Lrep $i $i] } set rep [join $Lrep \n] #puts "rep= $rep" return $rep } proc Rpipe_AEffacer {Commande} { global CnlR ReponseR if {! [info exists CnlR]} { set CnlR [open "|R_surf --vanilla " r+] fconfigure $CnlR -blocking 0 -buffering none fileevent $CnlR readable RecupereR puts $CnlR "# TURLUTUTU" flush $CnlR vwait ReponseR set ReponseR "" } puts $CnlR $Commande puts $CnlR "# TURLUTUTU" flush $CnlR vwait ReponseR return $ReponseR } proc Rpipe_old {Commande} { global CnlR RecuperationEffectuee ReponseR if {! [info exists CnlR]} { set CnlR [open "|R --vanilla " r+] fconfigure $CnlR -blocking 0 -buffering none fileevent $CnlR readable RecupereR puts $CnlR "# TURLUTUTU" flush $CnlR vwait RecuperationEffectuee unset RecuperationEffectuee } puts $CnlR "$Commande" flush $CnlR puts $CnlR "# TURLUTUTU" flush $CnlR vwait RecuperationEffectuee unset RecuperationEffectuee set rep $ReponseR set ReponseR "" return $rep } proc Rpipe_old2 {Commande} { global CnlR ReponseR if {! [info exists CnlR]} { set CnlR [open "|R_surf --vanilla " r+] fconfigure $CnlR -blocking 0 -buffering none fileevent $CnlR readable RecupereR puts $CnlR "# TURLUTUTU" flush $CnlR vwait ReponseR set ReponseR "" } puts $CnlR $Commande puts $CnlR "# TURLUTUTU" flush $CnlR vwait ReponseR return $ReponseR } proc Rpipe_working {Cmd} { global CnlR CnlRReady spawn_id set rep "" set prompt "turlututu> " if {! [info exists CnlR]} { #exp_internal 1 exp_log_user 0 switch $::tcl_platform(platform) { unix {set Rexe R_surf} windows {set Rexe [file join c:/ PROGRA~1 R R-2.15.2 bin i386 Rterm.exe]} } exp_spawn $Rexe --vanilla set CnlR $spawn_id exp_stty raw -echo set ready 0 while {! $ready} { expect -timeout 1000 "> " {set ready 1} } set opt "options(prompt='$prompt');" exp_send "$opt\n" while {[expect -ex "$opt"] ne ""} { after 1000 } while {[expect "$prompt"] ne ""} { after 1000 } } exp_send "$Cmd\n" while {[expect "$Cmd"] ne ""} { after 200 } set rep "" ; set done 0 while {! $done} { after 200 expect $prompt { append rep $expect_out(buffer) set done 1 } } set rep [string map [list \r ""] $rep] set rep [lrange [split $rep \n] 1 end-1] return $rep } proc RscopeBoard {Titre {PourGif ""}} { global RepertoireDuGenome global ListeDeBoites global ScaleCumuleDeGonfle OrigXCumuleDeGonfle OrigYCumuleDeGonfle global ScrollRectangleOriginal IdScrollRectangle global bVisuPepCurrentGenome bVisuBlastCurrentGenome bVisuMSFCurrentGenome global CouleurDuFond global KanvaCourant global LesKanvasOuverts global RosaceCourante global Org1 Org2 global ParametresDuBoard global FichierGscopeHublot global LesOrdresPourGif Gs "Canvas" if {$PourGif != ""} { set PourGif 1 set Canvas NeRienFaire set Bind NeRienFaire set Pack NeRienFaire set Fram NeRienFaire set Button NeRienFaire set Scrollbar NeRienFaire set Grid NeRienFaire set FonctionRejetteLaBoite "RejetteLaBoite" set LesOrdresPourGif {} } else { set PourGif 0 set Canvas canvas set Bind bind set Pack pack set Fram frame set Button button set Scrollbar scrollbar set Grid grid set FonctionRejetteLaBoite "NeRejettePasLaBoite" JeMeSignale "Patience" } if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites } if { ! $PourGif} { set w [NomDe rond] catch {destroy $w} toplevel $w wm title $w "$Titre" wm iconname $w "$Titre" set K $w.canvas set CanvasizeX 800 set CanvasizeX 800 } else { set w "PourGif" set K "OrdrePourGif" set CanvasizeX 256 } scan [BoundingBox $ListeDeBoites] "%d %d" xDebut xFin set CanvaScroMinX 0 set CanvaScroMaxX $CanvasizeX set CanvasizeY $CanvasizeX set CanvaScroMinY 0 set CanvaScroMaxY $CanvasizeY set CanvascreenX $CanvasizeX set CanvascreenY $CanvascreenX set CentreX [expr $CanvascreenX/2] set CentreY [expr $CanvascreenY/2] set RayonMoyen [expr $CentreX*0.60] set RayonMoyen [expr $CentreX*0.80] set OffsetRayonMin [expr $RayonMoyen*0.02] set OffsetRayonMax [expr $RayonMoyen*0.18] set ScroHor $w.hscroll set ScroVer $w.vscroll set KShSv $w.grid set Boutons $w.buttons $Fram $Boutons $Pack $Boutons -side bottom -fill x -pady 2m $Button $Boutons.dismiss -text "Dismiss" -background red -command "DetruireLaRosace $w" $Bind $Boutons.dismiss "MainLeveeSurUnCanva $K" $Pack $Boutons.dismiss -side left -expand 1 $Button $Boutons.gonfle -text "Zoom/UnZoom/Desel\nJpg/Postscript/Print\nErase Sticks/Textes/Arcs" $Bind $Boutons.gonfle <1> "Gonfle $w all gonfle gonfle" $Bind $Boutons.gonfle <2> "Gonfle $w all degonfle degonfle" $Bind $Boutons.gonfle <3> "Deselecte $K" # $Bind $Boutons.gonfle "ToggleCanva $K TEXTE" # $Bind $Boutons.gonfle "CanvaEnPNG $K" $Bind $Boutons.gonfle "CanvaEnJpg $K" $Bind $Boutons.gonfle "CanvaEnPostscript $K Visible AskForFile" $Bind $Boutons.gonfle "CanvaEnImpression $K Visible AskForFile" $Bind $Boutons.gonfle "CleanRosace $K Aiguilles" $Bind $Boutons.gonfle "CleanRosace $K Textes" $Bind $Boutons.gonfle "CleanRosace $K Zones" $Pack $Boutons.gonfle -side left -expand 1 $Button $Boutons.recolore -text "Color ORFs/Banner/Which\nColors display/to file/On enter\nAction ORF-Enter/Clic/Show" -background "yellow" $Bind $Boutons.recolore <1> "RedefinirLaCouleur $K" $Bind $Boutons.recolore <2> "RedefinirLaCouleurDuLinge $K" $Bind $Boutons.recolore <3> "FaireLire \[SignificationLingeFrameFard $K\]" $Bind $Boutons.recolore "AfficheLesCouleursEtSignifications $K" $Bind $Boutons.recolore "CreeLeFichierAssocieAuxCouleurs $K" $Bind $Boutons.recolore "RedefinirLeFard $K" if { ! [PourWscope]} { $Bind $Boutons.recolore "ShowBoxAction Enter" $Bind $Boutons.recolore "ShowBoxAction Clic" $Bind $Boutons.recolore "ShowBoxAction Which" } $Pack $Boutons.recolore -side left -expand 1 $Button $Boutons.repere -text "Search/Next/Info\nNucleic\nNarcisse" -background "green" $Bind $Boutons.repere <1> "RepereBox \[Entre \"Nom: [PreFixe]\"\] $K" $Bind $Boutons.repere "RepereNuc \[Entre \] $K" $Bind $Boutons.repere "RepereBox \"Nom: \[Narcisse \[Entre\]\]\" $K" $Bind $Boutons.repere <2> "RepereBox Salut $K NextSansInforme" $Bind $Boutons.repere <3> "RepereBox Salut $K Next" $Pack $Boutons.repere -side left -expand 1 $Button $Boutons.intero -text "Wheel Add/New/Which\nText Add/Save/Append\nfrom list/ /Erase" $Bind $Boutons.intero <1> "InteRosace Add $K" $Bind $Boutons.intero <2> "InteRosace New $K" $Bind $Boutons.intero <3> "InteRosace Which $K" $Bind $Boutons.intero "TextePourRosace Add $K" $Bind $Boutons.intero "SauveLeCanva $K {Zone Fleche Etiquette}" $Bind $Boutons.intero "RestaureLeCanva $K ; BindLaRosace $K" $Bind $Boutons.intero "TextePourRosace AddFromList $K " $Bind $Boutons.intero "" $Bind $Boutons.intero "TextePourRosace Erase $K" $Pack $Boutons.intero -side left -expand 1 $Button $Boutons.rosarc -text "Wheel Turn+/Turn-/Switch\nText Add/Save/Append\nfrom list/ /Erase" $Bind $Boutons.rosarc <1> "InteRosace Turn+ $K" $Bind $Boutons.rosarc <2> "InteRosace Turn- $K" $Bind $Boutons.rosarc <3> "InteRosace Switch $K" $Bind $Boutons.rosarc "TextePourRosace Add $K" $Bind $Boutons.rosarc "TextePourRosace Save $K" $Bind $Boutons.rosarc "TextePourRosace Append $K" $Bind $Boutons.rosarc "TextePourRosace AddFromList $K " $Bind $Boutons.rosarc "" $Bind $Boutons.rosarc "TextePourRosace Erase $K" # $Pack $Boutons.rosarc -side left -expand 1 $Button $Boutons.piques -text "Create FOF" $Bind $Boutons.piques <1> "Presente \[LesNomsPiques\]" # $Pack $Boutons.piques -side left -expand 1 $Button $Boutons.selnuc -text "Blast: X nuc zone/6P zone/ 6P sel Prot\nCreate DNA sequence/Extend DNA" $Bind $Boutons.selnuc <1> "BlastXsurZone $K" $Bind $Boutons.selnuc <2> "SixBlastPsurZone $K" $Bind $Boutons.selnuc <3> "SixBlastPsurPiques \[LesNomsPiques\]" $Bind $Boutons.selnuc "CreeLaSequenceDeLaZone $K" $Bind $Boutons.selnuc "VoisinADNDeLaZone $K" $Pack $Boutons.selnuc -side left -expand 1 $Fram $KShSv $Scrollbar $ScroHor -orient horiz -command "$K xview" $Scrollbar $ScroVer -command "$K yview" $Canvas $K -relief sunken -borderwidth 2 -width $CanvascreenX -height $CanvascreenY -scrollregion [list $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY] -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" $Pack $KShSv -expand yes -fill both -padx 1 -pady 1 $Grid rowconfig $KShSv 0 -weight 1 -minsize 0 $Grid columnconfig $KShSv 0 -weight 1 -minsize 0 $Grid $K -in $KShSv -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew $Grid $ScroVer -in $KShSv -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew $Grid $ScroHor -in $KShSv -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew set CouleurDuFond "cadetblue" if {[regexp "casimir" $RepertoireDuGenome]} { set CouleurDuFond "white" } if {[regexp "MsFinal" $RepertoireDuGenome]} { set CouleurDuFond "white" } $K configure -background $CouleurDuFond set IdScrollRectangle($K) [$K create rectangle $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY -outline $CouleurDuFond -tag [list "Cadre"]] set ScrollRectangleOriginal($K) "[$K coords [set IdScrollRectangle($K)]]" set ParametresDuBoard($K,xDdebut) $xDebut set ParametresDuBoard($K,xFin) $xFin set ParametresDuBoard($K,CentreX) $CentreX set ParametresDuBoard($K,CentreY) $CentreY set ParametresDuBoard($K,RayonMoyen) $RayonMoyen set ParametresDuBoard($K,OffsetRayonMin) $OffsetRayonMin set ParametresDuBoard($K,OffsetRayonMax) $OffsetRayonMax if {0 && [info exists FichierGscopeHublot] && [file exists $FichierGscopeHublot]} { image create photo Hublot -file $FichierGscopeHublot $K create image $CentreX $CentreY -image Hublot -tags "Hublot" } foreach Boite $ListeDeBoites { if {[regexp "GLIMMER" $Boite]} { continue } if {[regexp "TROU" $Boite]} { continue } set Nom [Box $Boite nom] set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] set Milieu [expr ($Debut+$Fin)/2] if {$Orient == "F"} { set Sens 1 } else { set Sens -1 } if {[YaPABenDebutDe $Nom]} { set RayonMin [expr $RayonMoyen + $Sens*$OffsetRayonMin] set RayonMax [expr $RayonMoyen + $Sens*$OffsetRayonMax] set LargeurDuTrait 1 } elseif {[regexp "TRNA" $Nom]} { set RayonMin [expr $RayonMoyen - $OffsetRayonMin] set RayonMax [expr $RayonMoyen + $OffsetRayonMin] set LargeurDuTrait 2 } elseif {[regexp "ARN" $Nom]} { set RayonMin [expr $RayonMoyen - $OffsetRayonMin] set RayonMax [expr $RayonMoyen + $OffsetRayonMin] set LargeurDuTrait 3 } else { set RayonMin [expr $RayonMoyen - $OffsetRayonMin] set RayonMax [expr $RayonMoyen + $OffsetRayonMin] set LargeurDuTrait 1 } set DecalageAngulaire [DecalageAngulaireRosace] set Angle [expr $DecalageAngulaire + 3.14159/2 - $Milieu*2*3.14159/$xFin] set PosMinX [expr $CentreX+$RayonMin*cos($Angle)] set PosMinY [expr $CentreY-$RayonMin*sin($Angle)] set PosMaxX [expr $CentreX+$RayonMax*cos($Angle)] set PosMaxY [expr $CentreY-$RayonMax*sin($Angle)] set Couleur $CouleurDuFond if {[Fantome $Nom]} { set CouleurTrait "white" } else { set CouleurTrait "black" } $K create line $PosMinX $PosMinY $PosMaxX $PosMaxY -width $LargeurDuTrait -fill $Couleur -tags [list "Box" "$Boite"] } Wup " .......................................... et Rscope crea les boites." DefinirLaCouleurAuLancement $K $K $Bind "RepereBox" <1> "$K delete current" $K $Bind "SelectionNucleique" <1> "$K delete current" $K $Bind "Box" <1> "FetcheBox $K %x %y" $K $Bind "Box" "FetcheBox $K %x %y" $K $Bind "Box" "Informe \[Box \[BoiteDuCourant $K %x %y\] nom \]" $K $Bind "Box" "OrganismesOrthologues $K %x %y" $K $Bind "Box" "SautParalogue $K %x %y" $K $Bind "Box" <3> "PiqueBox $K %x %y Fixe" $Bind $K "ShowNucRosace $K %x %y Point" $Bind $K "ShowNucRosace $K %x %y Motion" $Bind $K <2> "$K scan mark %x %y" $Bind $K "$K scan dragto %x %y" if {$PourGif } { return $LesOrdresPourGif } if { ! $PourGif } { set KanvaCourant $K set RosaceCourante $K lappend ParametresDuBoard(RosacesEnCours) $K lappend LesKanvasOuverts $K JeMeSignale "FinPatience" if {0 && [PourWscope] } { return $w } else { return $K } } } proc RsfFromRsf {TexteOuFichierRSF {LesAccess ""} {KeepOrReject ""}} { if {$KeepOrReject==""} { set KeepOrReject "Keep" } set Keep [string equal -nocase "Keep" $KeepOrReject] if {[regexp {[ \t\n\,\;]} $LesAccess]} { regsub -all {[ \t\n\,\;]+} $LesAccess " " LesAccess set LesAccess [split [string trim $LesAccess]] } set LesACCESS {} foreach Access $LesAccess { lappend LesACCESS [string toupper $Access] } if {[regexp "\n" $TexteOuFichierRSF]} { set LesLignes [split $TexteOuFichierRSF "\n"] set FichierRSF "RSF" } else { set FichierRSF $TexteOuFichierRSF set LesLignes [LesLignesDuFichier $FichierRSF] } if {[llength $LesLignes] < 2} { return "" } set OnAttend 1 set LeCourant {} foreach Ligne $LesLignes { if {$OnAttend && [string index $Ligne 0]!="\{"} { continue } set OnAttend 0 lappend LeCourant $Ligne if {[regexp {^name (.+)$} $Ligne Match Access]} { set ACCESS [string toupper $Access] if {[info exists DejaVu($ACCESS)]} { FaireLire "DejaVu $Access !!!\nTant pis, le dernier sera le bon" } set DejaVu($ACCESS) $Ligne continue } if {[string index $Ligne 0]=="\}"} { lappend LesAccessExistants $ACCESS set LesLignesDe($ACCESS) $LeCourant set LeCourant {} } } set LeNew "" lappend LeNew "!!RICH_SEQUENCE 1.0" lappend LeNew ".." if {$Keep} { set LesAccessAGarder $LesACCESS } else { set LesAccessAGarder [ListsComplement $LesAccessExistants $LesACCESS] } foreach Access $LesAccessAGarder { set ACCESS [string toupper $Access] if { ! [info exists LesLignesDe($ACCESS)]} { continue } LConcat LeNew $LesLignesDe($ACCESS) } return [join $LeNew "\n"] } proc RsfFromXmlMacsim {NomOuFichier {FichierRsf ""}} { set Nom "" set Fichier $NomOuFichier if { ! [regexp "/" $NomOuFichier]} { if {[EstUnPAB $NomOuFichier]} { set Nom $NomOuFichier set FichierPossible "[RepertoireDuGenome]/macsimXml/$Nom" if {[FileExists $FichierPossible]} { set Fichier $FichierPossible } } } if {[FileAbsent $Fichier]} {return ""} if {$FichierRsf==""} { if {$Nom!=""} { set FichierRsf "[RepertoireDuGenome]/macsimRsf/$Nom" } else { regsub -nocase ".xml$" $Fichier "" FichierRsf append FichierRsf ".rsf" } } set GetText 0 if {$FichierRsf=="GetText"} { set GetText 1 set FichierRsf "[TmpFile].rsf" } if {[catch {exec clustalw $Fichier -convert -output=RSF -outfile=$FichierRsf} Message]} { return "" } if {$GetText} { set TexteRSF [ContenuDuFichier $FichierRsf] file delete $FichierRsf return $TexteRSF } return $FichierRsf } proc RsyncGstock {{Qui ""} {Quoi ""}} { global RsyncGstock if {[info exists RsyncGstock($Qui,$Quoi)]} { return [join $RsyncGstock($Qui,$Quoi) "\n"] } if {[info exists RsyncGstock("EstCharge")]} { return "" } set RsyncGstock("EstCharge") 1 foreach Log [lsort -dictionary [glob -nocomplain "/gstock/LogsRsync/*.log"]] { foreach Ligne [LesLignesDuFichier $Log] { if { ! [regexp "^rsync\:" $Ligne] } { continue } if { ! [regexp {failed to open \"([^\"]+)\"} $Ligne Match File] } { continue } if { [file tail $File]=="core"} { continue } if { ! [regexp {^(/data[0-9]+/g[0-9]+/[^/]+)/} $File Match R]} { continue } if { [RepOk $R]} { continue } set O [Proprio OwnerOf $R] lappend RsyncGstock(ListOf,O) $O lappend RsyncGstock(ListOf,File) $File lappend RsyncGstock(RepFromOwner,$O) $R lappend RsyncGstock(FilesFromOwner,$O) $File lappend RsyncGstock(FilesFromRep,$R) $File } } set RsyncGstock(ListOf,O) [lsort -unique $RsyncGstock(ListOf,O)] foreach O $RsyncGstock(ListOf,O) { set RsyncGstock(RepFromOwner,$O) [lsort -unique $RsyncGstock(RepFromOwner,$O)] set RsyncGstock(NumberOfFilesFromOwner,$O) [llength $RsyncGstock(FilesFromOwner,$O)] lappend RsyncGstock(Count,All) "[format %8d $RsyncGstock(NumberOfFilesFromOwner,$O)] $O" } set RsyncGstock(NumberOf,File) [llength $RsyncGstock(ListOf,File)] return [RsyncGstock $Qui $Quoi] } proc RunAgents {} { global iter Start Sequences NbSeq LNOrdali Lscores MotifLen WeightMotif nAgents LgMax puts "\nWeightMotif : $WeightMotif" puts "MotifLen : $MotifLen" lappend Lscores -10 set score0 [ScoreAlignmentAgents] lappend Lscores $score0 puts "score initial : $score0" #ShowAlignmentAgent UpdateGUI set switchMotifWg 0 set ndone 0 ; set nAligned 0 ; set nfailed 0 while {1} { update if {$::StepMode} { set ::Lab " Nouvelle iteration" update idletasks if {$::WithGUI} { tkwait variable ::DoStep } } if {! $::Start} {break} set ::Lab "[format %6d $iter] " if {$::debug} { #DebugAgents "Enter with:" } set aligned [AlignAgent] puts "==> aligned $aligned\n" incr ndone if {$aligned == 0} { incr nfailed } elseif {$aligned == 1} { incr nAligned set score [ScoreAlignmentAgents] puts "score $score" lappend Lscores $score AgentsRemoveColsGaps UpdateGUI InitAgents } if {0 && $ndone < (0.2*$nAgents)} { continue } if {$nAligned < (0.5 * $nAgents)} { continue } puts "\nndone $ndone" puts "nfailed $nfailed" puts "nAligned $nAligned" set score [ScoreAlignmentAgents] lappend Lscores $score puts "score : $score" # re-init tout set nfailed 0 set nAligned 0 set ndone 0 set stop [StopAgents $Lscores] if {$stop} { ToggleStepMode puts "\nSTOP : change parameters" set hasChanged 0 if {$switchMotifWg} { if {! $WeightMotif} { set WeightMotif 1 set hasChanged 1 } } if {! $hasChanged} { set WeightMotif 0 incr MotifLen -2 if {$MotifLen < 3} { break } } puts "\nWeightMotif : $WeightMotif" puts "MotifLen : $MotifLen" InitAgents } if {$::debug} { #DebugAgents "After Move :" } incr iter update update idletasks } set Ln [list] ; set Ls [list] foreach n $::LNOrdali { lappend Ln $n lappend Ls $::Sequences($n) } set score [ScoreAlignmentAgents] lappend Lscores $score puts "\n---------------------" puts "| Final score : $score" puts "---------------------\n" set ::Lab "Final score $score" AgentsRemoveColsGaps ShowAlignmentAgent CreeLeMSF agent.msf $Ln $Ls foreach n $LNOrdali { set ::TDesSeqWeights($n) 1.0 } set ::LNDG [list GroupeToutLeMonde] set ::SDG(GroupeToutLeMonde) $LNOrdali #ComputeBlocks #parray ::CpB return } proc RunBlastOutliers {K {UseExpect ""}} { set Id [$K find withtag current]Seuil set Clade [lindex [$K gettags $Id] 1] BlastOutliers $UseExpect $Clade } proc RunDbClustal {Selection {NomOuFichierBlastP ""} {QuoiFaire ""}} { JeMeSignale global RepertoireDuGenome global Commandes Wup "Runs DbClustal on Selection (if wanted with the anchors of the blastpfile NomOuFichierBlastP)" if {$QuoiFaire==""} { set QuoiFaire "ShowMsf" } if { ! [regexp "\n" $Selection] && ! [regexp " " $Selection] && [regexp "/" $Selection]} { set Selection [ContenuDuFichier $Selection] } if {[regexp "Query=" $Selection]} { set Query [StringApres "Query=" dans $Selection] } else { set Query "" } set Nom "?" set WithAnchors 0 if {$NomOuFichierBlastP!=""} { set Nom [file tail $NomOuFichierBlastP] set FichierBlastP $NomOuFichierBlastP if { ! [file exists $FichierBlastP]} { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } if {[EstUnFichierBlastP $FichierBlastP]} { set WithAnchors 1 } if { ! [regexp "^/" $FichierBlastP]} { set FichierBlastP "[pwd]/$FichierBlastP" } } else { set FichierBlastP "" } NousAllonsAuBoulot set Racine [TmpFile] set Anchors "" if {$WithAnchors} { set RepBallast "$Racine.ballast" File mkdir $RepBallast set FichierBallast [Ballast $FichierBlastP $RepBallast $Query] if {$FichierBallast != "" && [regexp -nocase "fatal error" [join [LesPremieresLignesDuFichier $FichierBallast 10]] "\n"]} { set FichierBallast "" } set Anchors "$FichierBallast.anchors" if { ! [file exists $Anchors]} { Warne "$Anchors\nfile not found, I run dbclustal without anchors" set Anchors "" } } set In "$Racine.inp" set Out "$Racine.out" set Log "$Racine.log" if {$Anchors!=""} { set Anc "$Racine.anchors" File copy $Anchors $Anc } else { set Anc "" } if {[regexp "^>" $Selection]} { set TFAaAligner $Selection } else { set TFAaAligner [ConcatLesTFAs $Selection] } Sauve $TFAaAligner dans $In if {$Anc!=""} { set Anc [AnchorsCoherents $In $Anc $FichierBlastP] } if {[regexp -nocase "Get" $QuoiFaire]} { set Mode "Interactif" } else { set Mode "Batch" } if {$Mode=="Batch"} { catch {set Canal [open "| [set Commandes(dbclustal)] $In $Out $Log $Anc"]} Message fconfigure $Canal -blocking false -buffering line fileevent $Canal readable "ClosCanalEtMontreMSF dbclustal $Canal $Out.msf $Log" Warne "dbclustal est lance en batch" OnRevientDuBoulot return "$Out.msf" } Warne "DbClustal sur $Nom lance en interactif ... un peu de patience. Merci." eval exec "[set Commandes(dbclustal)] $In $Out $Log $Anc" Warne " ... j'ai fini." if { ! [file exists "$Out.msf"]} { if {$QuoiFaire=="GetMsfText" || $QuoiFaire=="GetMsfFilename"} { return "" } set Fenetre [AfficheVariable [ContenuDuFichier $Log] "AvecRien" $Log] } else { if {$QuoiFaire=="GetMsfText"} { return [ContenuDuFichier $Out.msf] } if {$QuoiFaire=="GetMsfFilename"} { return $Out.msf } set Fenetre [AfficheVariable [ContenuDuFichier $Out.msf] "AvecEtudeMSFGrandeLargeur" $Out.msf ] } foreach Fichier [glob -nocomplain "$Racine.*"] { if {$Fichier=="$Out.msf"} { continue } if {$Fichier=="$Anc"} { continue } # File delete -force $Fichier } OnRevientDuBoulot return $Fenetre } proc RunDecortiqueGenBank {{Fichier ""} {Destin ""}} { while {$Fichier==""} { set Fichier [ButineArborescence "All" "./"] if {$Fichier=="" && [OuiOuNon "Do i cancel ?"]} { return "" } } set Queue [file tail $Fichier] if {$Destin==""} { set Destin "~/decortiqueGB_$Queue.txt" } return [SauveLesLignes [DecortiqueGenBank OS OC SeqADN $Fichier] dans $Destin] } proc RunDeltaDistributionForClade {K {Method ""}} { set Touche [$K find withtag current] set LesTags [$K gettags $Touche] lassign $LesTags Bidon Clade return [DeltaDistributionForClade $Clade {} {} $Method] } proc RunGenScanEtAffiche {FichierTFAOuTexte} { set GSC [GenScan $FichierTFAOuTexte] if {$GSC==""} { return "" } return [AfficheVariable $GSC "AvecRien" $FichierTFAOuTexte] } proc RunMethode {method {Grp ""}} { global ConsMeth ScoreMeth LNDG SDG LNOrdali TableScore OrdTmpDir ListeTypesDeFeatures ListeDesPiliersDuGroupe TbScores set NSqs [llength $LNOrdali] if {$NSqs <= 3} { FaireLire "Too few sequences ! !" return } switch $method { "Cluster" { set cols [list Norm Thompson] set ident "Multi" set lameth "Multi" set ft "Cons-Multi" } "VectorNorm" { set cols Norm set ident "VectorNorm" set lameth "Vector Norm" set ft "Cons-VectorN" } "MeanDistance" { set cols Thompson set ident "MeanDistance" set lameth "Mean Distance" set ft "Cons-MeanD" } "Ranganathan" { set cols Ranganatan set ident "Ranganathan" set lameth "Ranganathan" set ft "Cons-Ranga" } "Liu" { set cols Liu set ident "Liu" set lameth "Liu" set ft "Cons-Liu" } "Liu2" { set cols Liu2 set ident "Liu2" set lameth "Liu2" set ft "Cons-Liu2" } "BILD" { set cols BILD set ident "BILD" set lameth "BILD" set ft "Cons-BILD" } "User" { set cols "" set ident "User" set lameth "User" set ft "Cons-User" } } FaireAttendre "Please wait ...\nComputing residue conservation using $lameth method" # Check if the feature name already exists. # If yes , find a new name set Lf $ListeTypesDeFeatures if {! [llength [lsearch -regexp -all $Lf "${ft}_"]]} { set i 1 } else { set Li [lsearch -all -inline -regexp $Lf "${ft}_"] set nmax -1 foreach f $Li { set n [string range $f [expr {[string last "_" $f]+1}] end] if {$n > $nmax} {set nmax $n} } set i [expr {$nmax+1}] } # at this point , we have a temporary name set ft "tmp${ft}_$i" unset -nocomplain ConsMeth set ScoreMeth($ft,Edit) 0 if {$Grp eq ""} { set LGrp $LNDG } else { set LGrp $Grp } if {! [info exists ListeDesPiliersDuGroupe]} { CreeLesPiliers } unset -nocomplain TbScores set TbScores(Lcols) $cols foreach g $LGrp { array unset TbScore "Score,*" if {$g eq ""} {set g [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($g)] puts "RunMethod g=$g size [llength [set SDG($g)]]" if {$g eq "bidon" || $g eq "grise"} {continue} if {$g eq "GroupeToutLeMonde"} { set g "" } if {$g ne "" && [llength [set SDG($g)]] < 3} { puts "\t VIRE g= $g size [llength [set SDG($g)]]" continue } foreach c $cols { set TbScores(Score,$c) [ScoreDe$c $ListePil] } CreeListeScore $g set cok [NormalisationColonnes] if {! $cok} { puts "\tNormalisation g= $g size [llength [set SDG($g)]]" continue } StockScores $ft $g set Lgr [Tclcluspack $::ListeScore -dt coordinates -cm mm -nbc aic -wc] TraiteResultatClusteringTcl $Lgr $ident $g "mixturemodels" } CreeFeaturesMethod $ft FaireLaSuite .runmth return $ft } proc RunOrdali {{OGlob ""}} { global Threshold ListeDesConsensusDuGroupe SDG LNDG NombreDeSequences Defauts NombreDeGroupes FaireAttendre "Please wait ....\nRunning Ordalie ...." set NomDuGroupeToutLeMonde "GroupeToutLeMonde" OteConsensusGlobal InitConsensus InitPoints set NombreDeGroupes [llength $LNDG] set LesGroupes [lrange $LNDG 1 end] if {$OGlob ne ""} { set OGlob 1 CreeLesIdentitesDuGroupe GroupeToutLeMonde CreeLesConservesDuGroupe GroupeToutLeMonde CreeLesConservesGlobaux set OGlob 1 } else { set OGlob 0 CreeLesIdentitesDuGroupe $NomDuGroupeToutLeMonde foreach NomDeGroupe $LesGroupes { set ListeDesConsensusDuGroupe($NomDeGroupe) [set ListeDesConsensusDuGroupe($NomDuGroupeToutLeMonde)] } foreach NomDeGroupe $LesGroupes { CreeLesIdentitesDuGroupe $NomDeGroupe } if {$NombreDeGroupes <= 4} { CreeLesABC } if {$NombreDeGroupes == 1} { CreeLesConservesDuGroupe $NomDuGroupeToutLeMonde } else { foreach NomDeGroupe $LesGroupes { CreeLesConservesDuGroupe $NomDeGroupe } } if {$NombreDeGroupes == 4} { CreeLesOranges CreeLesViolets CreeLesVerts } } CreeLesSimilaires $OGlob CreeLesConservesGlobaux CreeLesPoints CreeLesRBJOVVSurFondGris if {[regexp "ord" [set Defauts(TypeDeGroupesACreer)]]} { ColorieAlignement } else { ColorieAlignementSecator } set ft [CreeFeaturesOrdali $OGlob] StockScoreOrdali $ft AppliqueFeature $ft EcritLeBilanConservation $ft if {[set Defauts(AffSS)]} { MontreStrSecDansAlignement } FaireLaSuite return $ft } proc RunRepeatMaskerEtAffiche {Texte} { set TexteMask [RepeatMaskerDuTexte $Texte] if {$TexteMask==""} { return "" } return [AfficheVariable $TexteMask "AvecFormateAvecBlaste"] } proc SB {} { set w .toto toplevel $w set S $w.sb scrollbar $S -command {Espionne} pack $S } proc SEACIDuNom {Nom {TypeRequete Interpro} {AvecDistribution 0} {Remplace 1}} { global RepertoireDuGenome set RepertoireSEACI "$RepertoireDuGenome/srsSEACI" cd $RepertoireSEACI if {![file exists $RepertoireSEACI]} { Espionne "Je dois les copier de chez Arnaud" return "" } set RepLMS "$RepertoireDuGenome/lms" set FichierLMS "$RepLMS/$Nom" if {![file exists $FichierLMS]} {return ""} Espionne "Effacement des fichiers dans $RepertoireSEACI" foreach File [glob -nocomplain "$RepertoireSEACI/*.seaci"] {File delete -force $File} foreach File [glob -nocomplain "$RepertoireSEACI/Index/*"] {File delete -force $File} if { $TypeRequete == "Interpro"} { set FichierSortie "$RepLMS/$Nom.ipr" } elseif {$TypeRequete == "EC" } { set FichierSortie "$RepLMS/$Nom.ec" } elseif {$TypeRequete == "Keywords"} { set FichierSortie "$RepLMS/$Nom.kw" } if {!$Remplace && [file exists $FichierSortie]} {Espionne "$FichierSortie exists";return ""} Espionne "Copie des fichiers dans $RepertoireSEACI" File copy -force $FichierLMS "$RepertoireSEACI/$Nom.seaci" Espionne "Indexator" eval exec "$RepertoireSEACI/indexator.csh" set FichierRequeteReq "$RepertoireSEACI/requete.req" Espionne "Configuration du fichier $FichierRequeteReq" if {$AvecDistribution} { if {$TypeRequete == "Interpro"} { set FDistribution "$RepLMS/Distribution.ipr" } elseif {$TypeRequete == "EC"} { set FDistribution "$RepLMS/Distribution.ec" } elseif {$TypeRequete == "Keywords"} { set FDistribution "$RepLMS/Distribution.kw" } Sauve [FichierRequeteSEACI $FichierSortie $TypeRequete $FDistribution] dans $FichierRequeteReq } else { Sauve [FichierRequeteSEACI $FichierSortie $TypeRequete] dans $FichierRequeteReq } Espionne "SEACI" eval exec "seaci -fichier $FichierRequeteReq" return "" } proc SEACIPourTous {{TypeRequete Interpro} {LesNoms ""} {Remplace 1}} { if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} set i 0 foreach Nom $LesNoms { Espionne "$Nom" if {$i == 0} { SEACIDuNom $Nom $TypeRequete 1 $Remplace } else { SEACIDuNom $Nom $TypeRequete 0 $Remplace } incr i } return } proc SEACIToutesLesRequetesPourTous {{Remplace 1} {LesNoms ""}} { if {$LesNoms == {}} {set LesNoms [ListeDesPABs]} SEACIPourTous Interpro $LesNoms $Remplace SEACIPourTous Keywords $LesNoms $Remplace SEACIPourTous EC $LesNoms $Remplace FichiersSEACI2FichierGOPourTous $LesNoms return "" } proc SEQ2TFA {SEQ HEADER} { set lTextTFA {} regsub "^>" $HEADER "" HEADER lappend lTextTFA ">[string trim $HEADER]" regsub -all "\n" $SEQ "" SEQ set NTot [string length $SEQ] set Start 0 set End 49 set Line [string range $SEQ $Start $End] while {$Line != ""} { lappend lTextTFA $Line set Start [expr $End + 1 ] if {$NTot <= $Start} {break} set End [expr $Start + 49] set Line [string range $SEQ $Start $End] } return [join $lTextTFA "\n"] } proc SEQAttB1 {} { return "GGGGACAAGTTTGTACAAAAAAGCAGGCTTC" } proc SEQAttB1Adapter {} { return "AAAAAGCAGGCTTC" } proc SEQAttB1AddToInvitrogen {} { return "TC" } proc SEQAttB1Begin {} { regsub [SEQAttB1Adapter] [SEQAttB1] "" Debut return $Debut } proc SEQAttB1Invitrogen {} { Wup "This is the short AttB1 signal, frame is wrong so it need add of TC" return "GGGGACAAGTTTGTACAAAAAAGCAGGCT" } proc SEQAttB2 {} { return "GACCCAGCTTTCTTGTACAAAGTGGTCCCC" } proc SEQAttB2Adapter {} { return "GACCCAGCTTTCT" } proc SEQAttB2AdapterRaC {} { return [NucToReverseAndComplementNuc [SEQAttB2Adapter]] } proc SEQAttB2AddToInvitrogen {} { return "G" } proc SEQAttB2AddToInvitrogenRaC {} { return [NucToReverseAndComplementNuc [SEQAttB2AddToInvitrogen]] } proc SEQAttB2End {} { regsub [SEQAttB2Adapter] [SEQAttB2] "" Fin return $Fin } proc SEQAttB2EndRaC {} { return [NucToReverseAndComplementNuc [SEQAttB2End]] } proc SEQAttB2Invitrogen {} { Wup "This is the short AttB2 signal. frame is wrong so it needs add of G " return "ACCCAGCTTTCTTGTACAAAGTGGTCCCC" } proc SEQAttB2InvitrogenRaC {} { return [NucToReverseAndComplementNuc [SEQAttB2Invitrogen]] } proc SEQAttB2RaC {} { return [NucToReverseAndComplementNuc [SEQAttB2]] } proc SEQAttL1 {} { return "CCAACTTTGTACAAAAAAGC" } proc SEQAttL2 {} { return "CAGCTTTCTTGTACAAAGT" } proc SEQAttL2RaC {} { return [NucToReverseAndComplementNuc [SEQAttL2]] } proc SEQAttR1 {} { return "ACAAGTTTGTACAAAAAAGCTGAAC" } proc SEQAttR2 {} { return "GTTCAGCTTTCTTGTACAAAGTGGT" } proc SEQAttR2RaC {} { return [NucToReverseAndComplementNuc [SEQAttR2]] } proc SIGN {b a} { if {$a < 0.} { return [expr {-1.*abs($b)}] } else { return [expr {abs($b)}] } } proc SM2PHKB {{Kb ""} {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "GetList" } if {$Kb==""} { set Kb "YourFavoriteDirectory" } if {[regexp "/" $Kb]} { set RepKb $Kb } else { set RepKb "/genomics/link/$Kb" } while {[FileAbsent $RepKb]} { set RepKb [ChoixDuRepertoire $RepKb] } if {$GetWhat=="SaveList"} { set GetWhat "$RepKb/ListOfAcces.txt" } set FichierListGene "$RepKb/DeSM2PH/list_gene.txt" LoadTxl $FichierListGene TLG 1 "\t" set RepEmbl "$RepKb/proteome" file mkdir $RepEmbl foreach Gn $TLG(ListOf,Index) { set Access $TLG($Gn,Proteins) set LeEmbl [LaSequenceDesBanques $Access] if {$LeEmbl=={}} { FaireLire "I can't find $Access" ; continue } lappend LesAccess $Access # SauveLesLignes $LeEmbl dans "$RepEmbl/$Access" } if {[regexp {[/\.]} $GetWhat]} { return [SauveLesLignes $LesAccess dans $GetWhat] } return $LesAccess } proc SMI3 {aA aAI aD} { upvar $aA A upvar $aAI AI upvar $aD D paray A foreach I {1 2 3} { set K [expr {1+($I+1)%3}] set M [expr {1+($I+3)%3}] foreach J {1 2 3} { set L [expr {1+($J+1)%3}] set N [expr {1+($J+3)%3}] set B($I,$J) [expr {[set A($L,$K)]*[set A($N,$M)]-[set A($L,$M)]*[set A($N,$K)]}] } } set D 0. foreach I {1 2 3} { set D [expr {$D+[set A($I,1)]*[set B(1,$I)]}] } foreach I {1 2 3} { foreach J {1 2 3} { set AI($I,$J) [expr {[set B($I,$J)]/$D}] } } return } proc SMSM {} { global Defauts DS Sref Threshold set Sref(S) 1ser set Sref(T) 1nyr set Sref(P) 1h4q set Sref(G) 1ati set Sref(H) 1kmm set Sref(D) 1asy set Sref(N) 3m4q set Sref(V) 1ivs set Sref(I) 1ffy set Sref(L) 1wz2 set Sref(M) 2csx set Sref(C) 1u0b set Sref(K) 1bbu set Sref(Fa) 3pco set Sref(Y) 1h3e set Sref(W) 3kt3 set Sref(E) 2dxi set Sref(Q) 1o0b set Sref(R) 1f7u if {[TypeAli] eq "XML"} { set f [set Defauts(FichierXML)] } else { set f [set Defauts(FichierORD)] } set DS(AddPDB) 0 set DS(Pfam) 0 set DS(AddGrps) 0 set Defauts(Threshold) 90 set Threshold 90 SM_InitFig $f 0 SM_FrameWork SM_View SM_Features2PdbRef #SM_PCI SM_Stats SM_Features2PdbRef_2 #SM_CalculeSurface #SM_Chapelet #$::db close #exit return } proc SM_AddNewOrganisms {f} { global db LOrgs2Add LNOrdali LSOrdali ListePDB LNDG GroupeDeLaSequence TOrgs2Add Sequences # # add new organisms to the alignment # - search closest organism # - search homolog inside this organism # - align all new sequences set pre [string range [file tail $f] 0 [string first "_" [file tail $f]]-1] # 1er etape : mise a jour du fichier AuLog @title Système : $pre - fichier $f LesDefauts LesDefauts TypeAli "XML" LesDefauts FichierXML $f DecortiqueUnXml2 $f InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF global {*}[info globals "TD*"] AuLog @text Number of sequences : [llength $LNOrdali] # Initialise Orga proches SM_InitOrganismeProche $Ltid # search for homologs in new organisms puts -nonewline "Doing blasts ..." AuLog @separator AuLog @title Blast searches : set BJobs [list] foreach org $LOrgs2Add { if {! [info exists TOrgs2Add(Name,$org)]} { # bad organism AuLog @begin warning AuLog @text Warning ! $org is not in taxonomy database AuLog @end continue } set orgname $TOrgs2Add(Name,$org) set OrgProche [SM_OrganismeProche $org] set TOrgs2Add(Proche,$org) $OrgProche set Lrep [RepresentantDeTaxId $OrgProche] set Laccrep [list] foreach sqnpro $Lrep { set acpro $TDesAccess($sqnpro) lappend BJobs [list -p blastp -d nr -orga $org -expect 0.00001 -query $acpro -nlist 10 -f 1] } } puts " submitting [llength $BJobs] jobs" array set Bres [ThreadedBlastService $BJobs] # Retourne tableau foreach k [array names Bres "*,Input"] { lassign [split $k ,] id tmp lassign $Bres($k) acpro org lappend Bres(Lorg) $org lappend Bres($org,Lid) $id } set Bres(Lorg) [lsort -unique $Bres(Lorg)] set LaccNew [list] foreach org $Bres(Lorg) { set orgname $TOrgs2Add(Name,$org) set OrgProche $TOrgs2Add(Proche,$org) set nAttendus [llength $Bres($org,Lid)] # trouve un representant des appats lassign $Bres([lindex $Bres($org,Lid) 0],Input) acrep tmp foreach k [array names TDesAccess] { if {$TDesAccess($k) eq $acrep} { set sqnrep $k break } } AuLog @text Organisme : $org $orgname proche de $OrgProche $TDesOrganismes($sqnrep) puts "Organisme : $org $orgname proche de $OrgProche $TDesOrganismes($sqnrep)" set Laccrep [list] foreach id $Bres($org,Lid) { set Lblast $Bres($id,Res) lassign $Bres($id,Input) acpro tmp if {$Lblast eq ""} { puts "Probleme avec blast :" puts " organism $org" puts " proche $OrgProche" puts " query $acpro" puts "$Lblast\n" continue } # sqnpro correspondant foreach k [array names TDesAccess] { if {$TDesAccess($k) eq $acpro} { set sqnpro $k break } } set prerep [string range $sqnpro 0 [string first "_" $sqnpro]-1] DecortiqueBlast $Lblast "" "" "" Lbid Lacc Lde "" LPN set outfile [file join Blasts "${pre}_${org}_${prerep}.blast"] Sauve [join $Lblast \n] dans $outfile # log AuLog @text Query $sqnpro $acpro AuLog @link " Voir le blast " [file join ../ $outfile] set first [lindex $Lacc 0] puts "Take $first" if {$first ne ""} { lappend Laccrep [BonAccess $first] AuLog @begin tabular AuLog @typecols T R T foreach a [lrange $Lacc 0 2] p [lrange $LPN 0 2] d [lrange $Lde 0 2] { AuLog @row [BonAccess $a] $p $d } AuLog @end } else { AuLog @text No homolog found in Blast ... } AuLog @text "" } set Laccrep [lsort -unique $Laccrep] if {[llength $Laccrep] != $nAttendus} { AuLog @begin warning AuLog @text Warning ! $nAttendus sequences attendues et seulement [llength $Laccrep] trouvees AuLog @end } foreach e $Laccrep { if {$e ne "" || $e != {} } { lappend LaccNew $e } } AuLog @text "" } puts " Done !" if {[llength $LaccNew] == 0} { puts "No new sequences !" AuLog @begin warning AuLog @text Warning ! No new sequences AuLog @end set outh [file join HTML ${pre}.html] AuLog LOutput HTML $outh cd .. FermeFichier return } # # recupere seq et infos # passe en UniProt # enleve blancs set Ltmp $LaccNew set LaccNew [list] foreach e $Ltmp { if {$e ne "" && $e != {} } { lappend LaccNew $e } } set Luni [Convert2UniProtAcc $LaccNew] # recupere infos EMBL puts -nonewline "Fetching new sequences ..." set Lres [split [DbFetchGET uniprot $Luni] \n] set Lembl [SplitLesEMBL $Lres] puts " Done !" puts -nonewline "Retrieve infos ..." set Lacc [list] set Lseq [list] set Lorg [list] set Llfd [list] set Llin [list] set Ltax [list] set Lsqn [list] set Lbid [list] set Ldes [list] foreach em $Lembl { DecortiqueLesLignesEMBL $em ID AC DE GN OS OC OX Seq LaDETotal GNTotal set lifed [lindex [split $OC ";"] 0] lassign [split $OS " "] genre espece tmp set sqn [SM_DonneNom $pre $lifed $DE $genre $espece] set no [llength [lsearch -all -regexp $LNOrdali $sqn]] if {$no > 0} { set sqn "${sqn}$no" } lappend Lsqn $sqn lappend Lacc $AC lappend Lbid $ID lappend Lorg $OS lappend Ltax $OX lappend Llfd $lifed lappend Llin $OC lappend Ldes $DE lappend Lseq $Seq unset -nocomplain ID AC DE GN OS OC OX Seq LaDETotal GNTotal } # cree tfa with new sequences InitInfoSeqs $Lsqn EcritLeTfa "./TFAs/${pre}_newseq.tfa" $Lsqn $Lseq puts " Done !" # alignement des nouvelles sequences # mafft-linsi --add newseq.tfa alnref.tfa > out.tfa puts -nonewline "Aligning sequences ..." cd ./tmp CreeLeTfa ${pre}_tmp.tfa if {[catch {exec /usr/bin/mafft --add ../TFAs/${pre}_newseq.tfa ${pre}_tmp.tfa >& log > ${pre}_all.tfa} Msg]} { puts "mafft error !" puts "mafft --add ../TFAs/${pre}_newseq.tfa ${pre}_tmp.tfa > ${pre}_all.tfa\n" puts "Msg: $Msg" } puts " Done !" if {[file exists ${pre}_all.tfa] && [EstLeBonFormat ${pre}_all.tfa TFA]} { # definit groupe pour nouvelles sequences set Lg [lsort -dictionary [lrange $LNDG 1 end]] set No [string range [lindex $Lg end] 5 end] set Grp "Group[expr {$No+1}]" lappend LNOrdali "" lappend LSOrdali "" lappend LNDG $Grp DecortiqueUnTFA ${pre}_all.tfa Lntmp Stmp set Lrows [list] foreach n $Lntmp { if {$n eq ""} { continue } # remplace la sequence dans tous les cas. # on peut avoir inserer des gaps dans l'alignement # de depart. set s [BonneSequencePourAlignement $Stmp($n)] set Sequences($n) $s if {$n in $LNOrdali} { # remplace. set ix [lsearch $LNOrdali $n] lset LSOrdali $ix $s continue } set ix [lsearch $Lsqn $n] if {$ix == -1} {continue} # il faut inserer la sequence dans le merdier lappend LNOrdali $n lappend LSOrdali $s set TDesSeqnames($n) $n set TDesAccess($n) [lindex $Lacc $ix] set TDesBId($n) [lindex $Lbid $ix] set TDesPhylum($n) [lindex $Llfd $ix] set TDesTaxId($n) [lindex $Ltax $ix] set TDesDescriptifs($n) [lindex $Ldes $ix] set TDuLineage($n) [lindex $Llin $ix] set TDesOrganismes($n) [lindex $Lorg $ix] set GroupeDeLaSequence($n) $Grp lappend SDG($Grp) $n # Accumule pour log lappend Lrows [list $n $TDesAccess($n) $TDesOrganismes($n) $TDesTaxId($n) $TDesPhylum($n) $TDesDescriptifs($n)] } # Log AuLog @separator AuLog @begin table AuLog @title Infos sur les nouvelles séquences if {[llength $Lrows] == 0} { AuLog @subtitle ... Pas d'infos ... bizarre ... } else { AuLog @begin tabular AuLog @titlecols Seqname Accession Organisme "Taxa Id" Kingdom Description AuLog @typecols T T T I T T foreach row $Lrows { AuLog @row {*}$row } AuLog @end } AuLog @end AuLog @text "" } SauveLAlignement XML "${pre}_all.xml" XML4Macsim ${pre}_all.xml if {[catch {exec macsim ${pre}_all.xml ../${pre}_update > log >& err} Msg]} { puts "Macsim error !" puts "Msg: $Msg" } cd .. # output log file as HTML set outh [file join HTML ${pre}.html] AuLog LOutput HTML $outh FermeFichier return } proc SM_AliRNA {} { global LNOrdali LSOrdali Sequences if {0} { set f [open fitest w] puts $f [join $LNOrdali \n] close $f exit } if {0} { if {1} { set Lntest [list "_sub_135102" "_sub_283782453" "_sub_119180393"] } else { set Lntest [LesLignesDuFichier fitest] } set LSOrdali [list] foreach n $Lntest { lappend LSOrdali [set Sequences($n)] } set LNOrdali $Lntest foreach n $LNOrdali s $LSOrdali { puts "$n >[string range $s 0 19]<" } } InitWebServices set Lr [list] ; set Ln [list] set Lnom [list] ; set Lseq [list] # retrieve NCBI Refseq-P IDs from GI numbers puts "\nProtein GI number -> accession" foreach n $LNOrdali s $LSOrdali { if {$n eq ""} {continue} set n [string map [list "_sub_" ""] $n] if {[regexp "_" $n]} { lassign [split $n "_"] tmp toto tata if {[string length $tmp] > 2} { set n $tmp } } lappend Lnom $n lappend Lseq $s } set nDoublons 0 ; set Tdbl(liste) [list] set Lref [list] ; set Lsqp [list] set Lgin [list] ; set LNoAcc [list] set aT [eSummaryREST protein $Lnom] array set T $aT foreach n $Lnom s $Lseq { if {! [info exists T($n,refseq)]} { set acc "" } else { set acc [set T($n,refseq)] } if {$acc eq ""} { set Lel [eLinkREST protein protein $n] if {$Lel ne ""} { unset -nocomplain Ttmp set at [eSummaryREST protein $Lel] array set Ttmp $at foreach e [array names Ttmp "*,refseq"] { if {[set acc [set Ttmp($e)]] ne ""} { set n [lindex [split $e ,] 0] if {$n in $Lnom} { puts " -> $n est en double !" incr nDoublons lappend Tdbl(liste) $n set Tdbl($n) 0 } break } } } } if {$acc eq ""} { puts "no access for $n" lappend LNoAcc $n } else { puts "$n $acc" lappend Lgin $n lappend Lref $acc lappend Lsqp $s } } # retrieve refseq entry # take dbsource field to have nucleotide access puts "\nREFSEQ sequences" set LNoNuc [list] ; set LNoRNA [list] set Lfs {} ; set Lfn {} ; set Lps {} ; set Lpn {} set Lcorr [list] foreach p $Lref SqProt $Lsqp gi $Lgin { if {$gi in $Tdbl(liste) && [set Tdbl($gi)]} { continue } puts -nonewline "\nprot= $p $gi | " set Lidn [eLinkREST protein nucleotide $gi] unset -nocomplain T set aT [eSummaryREST nucleotide $Lidn] array set T $aT set Lnuc [list] foreach {a v} [array get T "*,refseq"] { lappend Lnuc $v } if {$Lnuc == {} } { set xml [eFetchREST protein $p] set Lnuc [ExtraitSourceFromRefSeqPXML $xml] if {$Lnuc == {} } { puts "No refseq nuc found !" lappend LNoNuc $gi continue } } set nuc " no good nucleotide entry found !" foreach tstn $Lnuc { # direct access to cds sequence set txt [eFetchREST nucleotide $tstn cds] if {[string index $txt 0] ne ">"} { puts "PB: access to CDS $tstn" puts "$txt" set SqRNA "" } else { set SqRNA [RNAFromFastaCDS $txt $p] } if {$SqRNA ne ""} { set nuc $tstn break } } puts "$nuc" if {$SqRNA ne ""} { set sq [AlignRDNA2Prot $SqProt $SqRNA] if {$sq ne ""} { puts "... OK" lappend Lfs $sq lappend Lfn $nuc lappend Lps $SqProt lappend Lpn $p lappend Lcorr [list $gi $p $nuc] set Tdbl($gi) 1 } else { lappend LNoRNA $gi } } else { lappend LNoRNA $gi puts " => no RNA seq found !" } update } if {$Lfn ne {}} { set bf [set ::Defauts(Fichier[TypeAli])] set bf [file rootname $bf] EcritLeTfa ${bf}_rna.tfa $Lfn $Lfs EcritLeTfa ${bf}_prot.tfa $Lpn $Lps set f [open $bf.corr w] foreach e $Lcorr { lassign $e a b c puts $f "$a\t$b\t$c" } close $f } # # Stats finales puts "\nDepart : [llength $Lnom] gi number" puts "doublons : $nDoublons" puts "RefseqP : [llength $Lref]" if {$LNoAcc != {} } { unset -nocomplain T set Lr [eSummaryREST protein $LNoAcc] array set T $Lr set Ltx [list] foreach n $LNoAcc { lappend Ltx [set T($n,TaxId)] } if {$Ltx != {}} { unset -nocomplain Ttax set Lr [eSummaryREST taxonomy $Ltx] array set Ttax $Lr foreach n $LNoAcc { set tx [set T($n,TaxId)] puts " $n [set Ttax($tx,Division)]" } } } puts "Nucleot : [llength $Lfn]" if {$LNoNuc != {} } { unset -nocomplain T unset -nocomplain Ttax set Lr [eSummaryREST protein $LNoNuc] array set T $Lr set Ltx [list] foreach n $LNoNuc { lappend Ltx [set T($n,TaxId)] } if {$Ltx != {} } { set Lr [eSummaryREST taxonomy $Ltx] array set Ttax $Lr foreach n $LNoNuc { if {$n in $Tdbl(liste) && [set Tdbl($n)]} { continue } set tx [set T($n,TaxId)] puts " $n [set Ttax($tx,Division)]" } } } puts "Bad sequence" if {$LNoRNA != {} } { unset -nocomplain T unset -nocomplain Ttax set Lr [eSummaryREST protein $LNoRNA] array set T $Lr set Ltx [list] foreach n $LNoRNA { lappend Ltx [set T($n,TaxId)] } if {$Ltx != {} } { set Lr [eSummaryREST taxonomy $Ltx] array set Ttax $Lr foreach n $LNoRNA { if {$n in $Tdbl(liste) && [set Tdbl($n)]} { continue } set tx [set T($n,TaxId)] puts " $n [set Ttax($tx,Division)]" } } } puts "\nCorrespondances : gi -> refseq -> nuc" foreach e $Lcorr { lassign $e a b c puts [format "%-20s%-20s%-20s" $a $b $c] } exit return } proc SM_BackFigure {} { global DS SDG TDesSeqnames ListePDB set Can [set DS(Can)] $Can delete all # Trace 8 rectangles (4 2 2) set YOffset 0 set x1 $DS(StartX) set x2 [expr {$DS(StartX) + $DS(LaneW)}] set y1 $DS(StartY) set Lnames $DS(NomFG) set xn [expr {$x1 - 10}] set hn [lindex [font metrics FigF] 5] set DS(IdBegin) [$Can create text $x1 $y1 -justify center -anchor s -text "1" -font FigF] set DS(IdEnd) [$Can create text $x2 $y1 -justify center -anchor s -text "[set DS(AliLg)]" -font FigF] foreach i {0 1 2 3 4 5 6 7} n $Lnames Lg $DS(LG) { if {$n eq $DS(GCyt) && $n eq $DS(GMit)} { set fonte FigCyMi } elseif {$n eq $DS(GMit)} { set fonte FigMito } elseif {$n eq $DS(GCyt)} { set fonte FigCyto } else { set fonte FigF } if {$i == 3 || $i == 6} {set YOffset 30} {set YOffset 10} set y2 [expr {$y1 + $DS(LaneH)}] $Can create rectangle $x1 $y1 $x2 $y2 -fill LightGrey -tags [list "R$n"] set yn [expr {$y1 + ($y2-$y1)/2}] $Can create text $xn $yn -justify right -anchor e -font "$fonte" -text $n -tag T$n if {[set DS(AddPDB)] && [set DS($n,PDB)] != {}} { set Ln [list] foreach e [set DS($n,PDB)] { lappend Ln [string range $e 4 end] } set Spdb [join $Ln " "] $Can create text $x2 $yn -text "$Spdb" -justify left -anchor w -font FigPDB } if {[set DS(AddGrps)]} { if {$Lg != {} } { set LPG [list] foreach g $Lg { lappend LPG $g } set SGrp [join $LPG] $Can create text $x2 $yn -text "$SGrp" -justify left -anchor w -font FigPDB } } set y1 [expr {$y2 + $YOffset}] } set DS(StopY) $y1 return } proc SM_BonnesFeatures {} { global db TabSF LNOrdali ListeTypesDeFeatures catch {array unset TabSF *,Discri} catch {array unset TabSF *,DisPDB} # traite features set t Discri $db eval {begin transaction} set pkm [MacCourant] set Lv [$db eval {select si.access, sf.* from seqfeat as sf, seqinfo as si, ln_seqinfo_seqfeat as lss where sf.ftype=$t and lss.pk_seqinfo=si.pk_seqinfo and lss.pk_seqfeat=sf.pk_seqfeat}] $db eval {commit} foreach {nom x ftype fstart fstop fcolor fscore fnote} $Lv { set nl [list "fstart" $fstart "fstop" $fstop "fcolor" $fcolor "fscore" $fscore "fnote" $fnote] lappend TabSF($nom,$t) $nl } return } proc SM_CSV2Feature {{f ""}} { global LNOrdali ListeTypesDeFeatures TPosGS GroupeDeLaSequence LSOrdali TabSF db set score 0.0 if {$f eq ""} { set Lcsv [lsort [glob *.csv]] } else { set Lcsv $f } foreach fcsv $Lcsv { LesDefauts LesDefauts Mode batch set db [FabriqueDeTables [set ::Defauts(TablesDB)]] set Pre [file rootname $fcsv] puts " $Pre :" puts "----" set XmlOut "${Pre}_new.xml" catch {unset TPosGS} catch {unset TabSF} catch {unset LNOrdali} catch {unset GroupeDeLaSequence} DecortiqueUnXml2 ${Pre}_recup.xml InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF set LongTot [LongueurDeLAlignement] set Lfeat [SM_FeatDuCsv $fcsv] set LNomG [SM_NomsDuCsv $fcsv] set LG [SM_GroupesDesNomsDuCsv $fcsv] foreach lg $LG { lappend LGtot {*}$lg } set LGtot [lunique $LGtot] puts "" puts "LGtot $LGtot" puts "LG $LG" puts "LNom $LNomG" # traite feature set t Discri lappend ListeTypesDeFeatures $t set LSOrdali [list] foreach n $LNOrdali { if {$n eq ""} { lappend LSOrdali "" continue } lappend LSOrdali [set ::Sequences($n)] set g [set GroupeDeLaSequence($n)] if {$g ni $LGtot} {continue} set idx 0 set i 0 foreach v $LG { if {$g in $v} { set idx $i break } incr i } foreach f $Lfeat { lassign $f cln Lnote set note [lindex $Lnote $idx] if {$note eq "" || $note eq "var."} { continue } set color [SM_DefinitCouleur $g $LG $Lnote $LNomG] # Remet numerotation start 0 if {[string is integer $cln]} { set start $cln set stop $start } else { set Lb [split $cln " "] if {[llength $Lb] > 1} { set type [lindex $Lb 0] if {[string is integer [lindex $Lb 1]]} { set bornes [list [lindex $Lb 1] [lindex $Lb 1]] } else { set bornes [split [lindex $Lb 1] -] } } else { set bornes [split $Lb -] } lassign $bornes start stop if {$stop eq "end"} { set stop [LongueurDeLAlignement] } } set nl [list "fstart" $start "fstop" $stop "fcolor" $color "fscore" $score "fnote" $note] lappend TabSF($n,$t) $nl } } CreeLeMacsim $XmlOut FermeFichier puts "" } exit } proc SM_CalculeSurface {} { global Sref Defauts set ford [set Defauts(FichierORD)] set pre [string range $ford 0 [string first _ $ford]-1] if {! [info exists Sref($pre)]} {return} set pdbid [set Sref($pre)] CreePDBPourSurface $pdbid if {0} { D Asp 1asy N Asn 3m4q K Lys * 1bbu Fa Phe a (catalytic) 3pco (et 3hfv pour mito) Fb Phe b A Ala Tyr *** 1h3e (et 2pid pour mito) Trp *** 3kt3 } return } proc SM_Chapelet {} { global Sref Defauts TabSF ListePDB set ford [set Defauts(FichierORD)] set pre [string range $ford 0 [string first _ $ford]-1] if {! [info exists Sref($pre)]} {return} set pdbid [set Sref($pre)] foreach chn [$pdbid _chains] { set nom [BonNomPDB ${pdbid}_$chn] if {$nom ni $ListePDB} {continue} # Recup atomes du Discri donne foreach ft [array names TabSF "$nom,Dis-*"] { puts "\n$ft" set Latm [list] foreach e [lsort -unique [set TabSF($ft)]] { DecortiqueUneFeature $e d f c s n y if {[regexp -nocase {^indel} $n]} { continue } if {[regexp -nocase {^gap} $n]} { continue } set Ln [list] for {set i $d} {$i <= $f} {incr i} { set in [DonnePosGS $nom $i] if {$in ni $Ln} { lappend Latm [list [$pdbid ResidueCDM $in $chn] $in] } lappend Ln $in } } set Latm [lsort -unique $Latm] puts "on a [llength $Latm] atomes" # calcule inter-distances # seuil de distance AU CARRE !! set s2 25. unset -nocomplain D Type RT foreach e $Latm { lassign $e vr1 n1 lassign $vr1 x1 y1 z1 r1 set D($n1) "" foreach f $Latm { lassign $f vr2 n2 lassign $vr2 x2 y2 z2 r2 set seuil2 [expr {($r1+$r2+1.4)**2}] set d2 [Dist2 [list $x1 $y1 $z1] [list $x2 $y2 $z2]] if {$n1 ne $n2 && $d2 < $seuil2} { lappend D($n1) $n2 } } } # detection parray D foreach a [array names D] { if {[llength [set D($a)]] == 0} { set Type($a) I } elseif {[llength [set D($a)]] == 1} { set Type($a) D } elseif {[llength [set D($a)]] == 2} { set Type($a) Cp } else { set Type($a) P } } RetourneTableau Type RT parray RT # Plus grande distance foreach a [array names D] { if {[set Type($a)] ne "P"} {continue} set Ld [concat $a [set D($a)]] set dmax -999. foreach e $Ld { set v1 [$pdbid ResidueCDM $e $chn] foreach f $Ld { set v2 [$pdbid ResidueCDM $f $chn] set d [Dist2 [lrange $v1 0 2] [lrange $v2 0 2]] if {$d > $dmax} { set dmax $d set x1 $e set x2 $f } } } puts "patch $Ld\n Dmax [expr {sqrt($dmax)}]\n $x1 $x2" } } } return } proc SM_CheckNames {Lnin Lsin} { global SwLookUp SwSeqs # prend le bon nom, et sa sequence set Lnew [list] set Lseq [list] foreach n $Lnin s $Lsin { if {[info exists SwLookUp($n)]} { lappend Lnew [set SwLookUp($n)] lappend Lseq [set SwSeqs($n)] } else { lappend Lnew $n lappend Lseq $s } } return [list $Lnew $Lseq] } proc SM_CladeCommunDesTaxIds {Ln} { global TDuLineage set Lcom [list] set Ld [list] foreach n $Ln { # TaxClass 1097 RankOnly forward Name set Li [set TDuLineage($n)] set level 1 foreach i $Li { if {$level == 1} { set lfd [string range $i 0 3] lappend Ld $lfd } if {$i in $Lcom} { incr Count($lfd,$i,$level) } else { lappend Lcom $i set Count($lfd,$i,$level) 1 } incr level } } set Ld [lsort [lunique $Ld]] set T [llength $Ln] foreach ld $Ld { set Lc [list] foreach {e v} [array get Count] { lassign [split $e ,] d k l if {$d eq $ld} { lappend Lc [list $k $l $v] } } set Lc [lsort -integer -decreasing -command SM_TrieTax $Lc] lappend T [list $ld $Lc] } return $T } proc SM_CladeDesGroupes {{f ""}} { global LNDG SDG TDesTaxId TDuLineage db if {$f eq ""} { set Lfx [lsort [glob *_new.xml]] } else { set Lfx $f } foreach fx $Lfx { LesDefauts LesDefauts Mode batch set db [FabriqueDeTables [set ::Defauts(TablesDB)]] set Pre [string range $fx 0 [expr {[string first "_" $fx] - 1}]] set cld ${Pre}.clade set fcl [open $cld w] puts " $Pre :" puts "----" puts $fcl " $Pre :" puts $fcl "----" DecortiqueUnXml2 $fx InitSequences InitInfoSeqs DonneTabFeature TabSF set fcsv ${Pre}.csv set Ll [LesLignesDuFichier $fcsv] set i 0 foreach l $Ll { switch $i { 2 { set LNomG [lrange [split $l ";"] 1 8] } 4 { set Ltmp [lrange [split $l ";"] 1 8] set LG [list] foreach g $Ltmp { if {[string first "\(" $g] != -1} { set if [expr {[string first "\)" $g]+1}] set g [string range $g $if end] } set Lig [split $g " "] set Linter [list] foreach ig $Lig { if {$ig eq "" || $ig eq "+"} { continue } elseif {! [regexp {^gpe} $ig]} { lappend Linter 99 } else { lappend Linter [string range $ig 3 end] } } lappend LG $Linter } } } incr i } set Ltot [list] foreach g $LG { lappend Ltot {*}$g } puts "LG $LG" puts "Ltot $Ltot" set Ltot [lsort -integer -unique $Ltot] puts "Ltot $Ltot" if {[lindex $Ltot end] == 99} { set gp [expr {[lindex $Ltot end-1] + 1}] } set LGtmp [list] set LGtot [list] foreach lg $LG { set toto [list] foreach s $lg { if {$s == 99} { set g "Group$gp" } else { set g "Group$s" } lappend toto $g lappend LGtot $g } lappend LGtmp [lunique $toto] } set LG $LGtmp puts "LG $LG" foreach n $LNomG lg $LG { puts $fcl "$n $lg" if {$lg == {} } { puts $fcl " Groupe vide\n" continue } set Lt [list] set Ls [list] set Li [list] foreach g $lg { lappend Ls {*}[set SDG($g)] } foreach s $Ls { #set tax [set TDesTaxId($s)] set lin [set TDuLineage($s)] if {$lin ne ""} {lappend Li $s} } if {$Li == {}} { puts $fcl "Probleme ! Pas de TaxId pour :" puts $fcl "[join $Ls \n]" continue #exit } set Lc [SM_CladeCommunDesTaxIds $Li] puts $fcl "$g -> [llength $Ls] [llength $Li]" #puts $fcl "[join $Lc \n]" SM_PrintClade $Lc $fcl puts $fcl "" } FermeFichier } exit } proc SM_Copy {} { puts "Copie fichier RSF :\n" set Lcsv [lsort [glob *.csv]] foreach fcsv $Lcsv { set prefixe [file rootname $fcsv] set Lgcsv [LesLignesDuFichier $fcsv] set sm [lindex [split [lindex $Lgcsv 0] ";" ] 0] puts " fichier csv $fcsv -> sm= $sm" set frsfin [file join /home/sissler/fichierspoch/ ${sm}_final.rsf] set frsfout ${prefixe}.rsf file copy -force $frsfin $frsfout } exit } proc SM_DataOrgs2Add {} { global db LOrgs2Add TOrgs2Add InitTaxDB $db eval {begin transaction} # verifie que les organismes sont dans la taxonomy set Lrep [list] foreach t $LOrgs2Add { if {[$db eval {select Name from taxonomy where taxid=$t}] eq ""} { array set T [eFetchREST taxonomy $t] foreach k [array names T "*,isReplaced"] { if {$T($k)} { lassign [split $k ,] Tax tmp if {$t in $T($Tax,Replaces)} { lappend Lrep $t $Tax break } } } } elseif {[$db eval {select taxid from gold where taxid=$t}] eq ""} { # pas present dans gold, regarde si le parent y est set par [$db eval {select Parent from taxonomy where taxid=$t}] if {[$db eval {select taxid from gold where taxid=$par}] ne ""} { lappend Lrep $t $par } } } if {$Lrep != {} } { foreach {ori new} $Lrep { set ix [lsearch $LOrgs2Add $ori] lset LOrgs2Add $ix $new update # log AuLog @begin warning AuLog @text Warning ! Taxon $ori is replaced by $new AuLog @end AuLog @text "\n" } } set Ldata [$db eval "select taxid,Name,Lineage from taxonomy where taxid in ([join $LOrgs2Add ,])"] $db eval {commit} foreach {t n l} $Ldata { set TOrgs2Add(Name,$t) $n set TOrgs2Add(Lineage,$t) $l } update $db close unset -nocomplain db if {[array names TOrgs2Add "Name,*"] == {} } { return } AuLog @begin table AuLog @title Récapitulatif organismes à ajouter AuLog @begin tabular AuLog @titlecols TaxaId Name Lineage AuLog @typecols I T T foreach k [array names TOrgs2Add "Name,*"] { lassign [split $k ,] tmp taxid AuLog @row $taxid $TOrgs2Add($k) $TOrgs2Add(Lineage,$taxid) } AuLog @end AuLog @end return } proc SM_DefinitCouleur {go LG Ln Ldef} { set Lnote [list] foreach n $Ln { lappend Lnote [lindex [split $n " "] 0] } lassign $Lnote n1 n2 n3 n4 n5 n6 n7 n8 lassign $LG g1 g2 g3 g4 g5 g6 g7 g8 lassign $Ldef d1 d2 d3 d4 d5 d6 d7 d8 # Definit groupes d'indices pour bact , euka, arc for {set i 1} {$i < 9} {incr i} { lappend Lpre [list $i [string tolower [string range [set d$i] 0 2]]] } set Lpre [lsort -index 1 -command TriePre $Lpre] foreach e $Lpre { lassign $e i t switch $t { "bac" {lappend Lbac $i} "euk" {lappend Leuk $i} "arc" {lappend Larc $i} } } # Groupe de la seq set v -1 for {set i 1} {$i < 9} {incr i} { if {$go in [set g$i]} { set v $i break } } if {$v == -1} { puts "\n ERREUR !! pas de groupe bact , euka our arch !!\n" return "" } # definition couleurs set brun "\#8b8545601333" if {$v in $Lbac} { set BE 0 foreach i $Leuk { set BE [expr {$BE || [set n$v] eq [set n$i]}] } set BA 0 foreach i $Larc { set BA [expr {$BA || [set n$v] eq [set n$i]}] } if {$BE && ! $BA} { set col orange } elseif {$BA && ! $BE} { set col green } elseif {$BE && $BA} { # brun pour tous ensemble set col $brun } else { set col yellow } } if {$v in $Leuk} { set EA 0 foreach i $Larc { set EA [expr {$EA || [set n$v] eq [set n$i]}] } set EB 0 foreach i $Lbac { set EB [expr {$EB || [set n$v] eq [set n$i]}] } if {$EA && ! $EB} { set col magenta } elseif {$EB && ! $EA} { set col orange } elseif {$EA && $EB} { # brun pour tous ensemble set col $brun } else { set col red } } if {$v in $Larc} { set AE 0 foreach i $Leuk { set AE [expr {$AE || [set n$v] eq [set n$i]}] } set AB 0 foreach i $Lbac { set AB [expr {$AB || [set n$v] eq [set n$i]}] } if {$AE && ! $AB} { set col magenta } elseif {$AB && ! $AE} { set col green } elseif {$AE && $AB} { # brun pour tous ensemble set col $brun } else { # nouveau bleu set col "#0000b439fae0" } } return $col } proc SM_Dimer {system} { # ordali exe SM_Dimer sars2 (a faire dans directory sars2) # # cree dimer a partir de sars2_mon.pdb # Class II : # SerRS, ThrRS, ProRS, HisRS, GlyRS, AspRS, AsnRS, LysRS, (PheRS mono chez mito !!), AlaRS set Lf [glob -nocomplain "${system}*"] if {[llength $Lf] > 0} { #file delete {*}$Lf } CreateDimer $system # ask for closest pdb ID while {[gets stdin p1] < 0} {} puts "p1 $p1" file delete ${p1}.pdb DoDimer $system update lsqsup $system $p1 exit } proc SM_DoAdd {pre} { global TToDo GroupeDeLaSequence ListePDB LNOrdali Sequences LSOrdali TInfos {*}[info globals "TD*"] puts "\nadding sequenes ..." # Add if {$TToDo(add) == {} } { return } set Lsqn [list] set Lacc [list] foreach {sqn acc} $TToDo(add) { puts " $sqn $acc" lappend Lsqn $sqn lappend Lacc $acc } puts "" array set TInfos [InfosFromUniProt $Lacc] if {[set rep [InfosFromRefSeq $Lacc]] != {}} { array set TInfos $rep } set Lseq [list] set LAccPris [list] set LSqnPris [list] foreach k $Lacc { if {[info exists TInfos($k,Sequence)]} { lappend Lseq $TInfos($k,Sequence) lappend LAccPris $k set ix [lsearch $Lacc $k] lappend LSqnPris [lindex $Lsqn $ix] } } # access not found in uniprot/refseq if {$Lacc != $LAccPris} { puts "Lacc $Lacc" puts "Lpris $LAccPris" puts "manque [lor $Lacc $LAccPris]" } file delete "./TFAs/${pre}_newseq.tfa" EcritLeTfa "./TFAs/${pre}_newseq.tfa" $LAccPris $Lseq cd ./tmp file delete ${pre}_tmp.tfa CreeLeTfa ${pre}_tmp.tfa # Add seq bidon set n0 [lindex [array names ::Sequences] 0] set sbid $::Sequences($n0) set sbid [string map {"." X} $sbid] set fo [open ${pre}_tmp.tfa a+] puts $fo ">bidon" puts $fo "$sbid" close $fo if {[catch {exec /usr/bin/mafft --add ../TFAs/${pre}_newseq.tfa ${pre}_tmp.tfa >& ${pre}_log > ${pre}_all.tfa} Msg]} { puts "\n>>>>>>>>>>>>>>>>>>>>>>>>" puts "mafft error !" puts "mafft --add ../TFAs/${pre}_newseq.tfa ${pre}_tmp.tfa > ${pre}_all.tfa\n" puts "Msg:\n$Msg" } if {! [file exists ${pre}_all.tfa]} { cd .. return } DecortiqueUnTFA ${pre}_all.tfa Lntmp Stmp foreach n $Lntmp { if {$n eq ""} { continue } if {$n eq "bidon"} {continue} # remplace la sequence dans tous les cas. # on peut avoir inserer des gaps dans l'alignement # de depart. set s [BonneSequencePourAlignement $Stmp($n)] if {$n in $LNOrdali} { set Sequences($n) $s # remplace. set ix [lsearch $LNOrdali $n] lset LSOrdali $ix $s continue } set acc $n set ix [lsearch $LAccPris $acc] if {$ix == -1} {continue} set n [lindex $LSqnPris $ix] set Sequences($n) $s # il faut inserer la sequence dans le merdier lappend LNOrdali $n lappend LSOrdali $s set TDesSeqnames($n) $n set TDesAccess($n) $acc set TDesBId($n) $TInfos($acc,BId) set TDesPhylum($n) $TInfos($acc,Phylum) set TDesTaxId($n) $TInfos($acc,TaxId) set TDesDescriptifs($n) $TInfos($acc,Desc) set TDuLineage($n) $TInfos($acc,Lineage) set TDesOrganismes($n) $TInfos($acc,Organism) } DefineGroupForNewSeq $LSqnPris CalculePI CalculeMolecularWeight RemapFeatures $Stmp(bidon) cd ../ return } proc SM_DoRemove {pre} { global TToDo ListePDB LNOrdali Sequences LSOrdali TInfos {*}[info globals "TD*"] LRemove puts "\nremoving sequences ..." if {[llength $TToDo(remove)] == 0} { return } foreach {accsqn} $TToDo(remove) { lassign $accsqn acc sqn puts " $sqn $acc" if {[set ix [lsearch $LNOrdali $sqn]] != -1} { set LNOrdali [lreplace $LNOrdali $ix $ix] set LSOrdali [lreplace $LSOrdali $ix $ix] unset -nocomplain TDesSeqnas($sqn) TDesAccess($sqn) TDesBId($sqn) } else { puts ">>> trying to remove $acc $sqn" puts ">>> not found !" } } update return } proc SM_DoRename {pre} { global TToDo ListePDB LRemove LNOrdali Sequences LSOrdali TInfos {*}[info globals "TD*"] puts "\nrenaming sequences ..." foreach n $LNOrdali { if {$n eq "" || $n in $ListePDB} { continue } # rename seq-name set sqn [set TDesSeqnames($n)] set org [string range $sqn [string first "_" $sqn]+1 end] if {[string index $pre 0] eq "F"} { set ixs 2 } else { set ixs 1 } set suf [string range $sqn $ixs [string first "_" $sqn]-1] switch $suf { "cy" {set new "cyto"} "mi" {set new "mito"} "ch" {set new "chlo"} "ar" {set new "arch"} "ba" {set new "bact"} } set TDesSeqnames($n) "${pre}${new}_$org" } # rename from Marie set Lv [array get TDesSeqnames] foreach {old new} $TToDo(rename) { puts " $old $new" set i [lsearch $Lv $old] if {$i == -1} { # verif que ce qu'on renomme existe bien ... puts "ERROR !\n$k does not exists !\n" continue } set TDesSeqnames($old) $new } return } proc SM_DonneNom {pre lifed title genre espece} { set suf "cy" switch -regexp -- $lifed { {^Bacter} {set suf "ba"} {^Archae} {set suf "ar"} {^Eukar} {set suf "cy"} } if {[regexp -nocase {mitochondr} $title]} { set suf "mi" } if {[regexp -nocase {chloroplas} $title]} { set suf "cl" } set seqname "${pre}${suf}_[string range $genre 0 3].[string range $espece 0 3]" set seqname [string map [list "(" "" ")" ""] $seqname] return $seqname } proc SM_DrawIdP {args} { global PrI ScoreMeth Sc Defauts EFeat if {"FontSM" ni [font names]} { font create FontSM -family courier -size 10 } set EFeat(WdtL) [font measure FontSM "Z"] set EFeat(HgtL) [lindex [font metrics FontSM] 5] set PAD $EFeat(PAD) set OffX 10 ; set OffY 20 # calcule place pour compteur pos set EFeat(WdtCmpt) [expr {[string length [LongueurDeLAlignement]] * $EFeat(WdtL)}] # calcule place pour le texte de seq set EFeat(CharsPerLine) 200 set nChar $EFeat(CharsPerLine) if {$nChar eq ""} { set nChar [expr {($EFeat(FWidth) - 2*$OffX - 2*$EFeat(WdtCmpt) - 2*2)/$EFeat(WdtL)}] } set WdtSeq [expr {$nChar * $EFeat(WdtL)}] set EFeat(WdtPxl) $WdtSeq # hauteur de l'axe Y set HgY 105 ; set EFeat(HgY) $HgY # check canvas size lassign [$PAD cget -scrollregion] tmp tmp wdt hgt # width set Lpage [expr {2*($OffX+$EFeat(WdtCmpt))+$WdtSeq+100}] if {[$PAD cget -width] < $Lpage} { set wdt $Lpage } # height set slgt [LongueurDeLAlignement] set nY [expr {round($slgt/$nChar)+1}] set Hpage [expr {($OffY+2*$EFeat(HgtL)+5+5+2+$HgY)*$nY + 100}] if {[$PAD cget -height] < $Hpage} { set hgt $Hpage } $PAD configure -scrollregion [list 0 0 $wdt $hgt] #set Nom F2TZY5 #set Nom Q74Z19 #set Nom HUMAN.CHR1 set Nom Q6PI48 set EFeat(LFeat,Exons) 1 set EFeat(LFeat,PFAM-A) 1 #set d 0 ; set f [expr {$nChar-1}] set d 400 ; set f 599 set slgt 1600 set xPos $OffX set yPos $OffY $PAD delete all while {$d < $slgt} { if {$f >= $slgt} { set f [expr {$slgt-1}] } set xAxeY [expr {$OffX+2+$EFeat(WdtCmpt)}] # trace feature (sans label) set yPos [DrawFeatSum $Nom $xPos $yPos $d $f 0] incr yPos 5 # Trace Profile SM_TraceProfile $xAxeY $yPos $d $f # axe Y $PAD create line $xAxeY $yPos $xAxeY [expr {$yPos+$HgY}] -arrow first -width 2 set y25 [expr {$yPos + 5 + 3*($HgY-5)/4}] set y50 [expr {$yPos + 5 + ($HgY-5)/2}] set y75 [expr {$yPos + 5 + ($HgY-5)/4}] set y100 [expr {$yPos + 5}] incr yPos $HgY set fxAxeY [expr {$xAxeY+$WdtSeq}] # axe 25% ident $PAD create line $xAxeY $y25 $fxAxeY $y25 -dash {2 4} # axe 50% ident $PAD create line $xAxeY $y50 $fxAxeY $y50 # axe 75% ident $PAD create line $xAxeY $y75 $fxAxeY $y75 -dash {2 4} # axe 100% ident if {0} { $PAD create line $xAxeY $y100 $fxAxeY $y100 } # axe X $PAD create line $xAxeY $yPos $fxAxeY $yPos -width 2 # on aligne a droite, on se positionne # a la fin du compteur set yPosm3 [expr {$yPos-3}] set yCmp [expr {$yPos+5}] $PAD create text $xAxeY $yCmp -anchor n -justify center -text "[expr {$d+1}]" -font FontFeat # ecrit pos au 1/4 , 1/2 et 3/4 ... set x25 [expr {$xAxeY+$WdtSeq/4}] $PAD create line $x25 $yPos $x25 $yPosm3 $PAD create text $x25 $yCmp -anchor n -justify center -text "[expr {$d+int(($f-$d+1)/4)}]" -font FontFeat set x50 [expr {$xAxeY+$WdtSeq/2}] $PAD create line $x50 $yPos $x50 $yPosm3 $PAD create text $x50 $yCmp -anchor n -justify center -text "[expr {$d + int(($f-$d+1)/2)}]" -font FontFeat set x75 [expr {$xAxeY+3*$WdtSeq/4}] $PAD create line $x75 $yPos $x75 $yPosm3 $PAD create text $x75 $yCmp -anchor n -justify center -text "[expr {$d+int(3*($f-$d+1)/4)}]" -font FontFeat set xCmp [expr {$xAxeY+$WdtSeq}] $PAD create text $xCmp $yCmp -anchor n -justify center -text "[expr {$f+1}]" -font FontFeat set xPos $xAxeY set yPos [expr {$yCmp+$EFeat(HgtL)}] incr d $nChar ; incr f $nChar incr yPos [expr {$OffY+$EFeat(HgtL)+2}] set xPos $OffX } if {0 && $Nom ne "Q74Z19"} { foreach g $::LNDG def {All Fungi Animals Plants Bactos} { puts "grp $g [string index $g 5]" if {$g eq "GroupeToutLeMonde"} { set col black } else { set col [CouleurDuGroupe [string index $g 5]] if {$col eq "yellow"} {set col magenta} } puts "$g $def $col" } } return } proc SM_DrawPfam {} { global TabSF DS if {"FPfam" ni [font names]} { font create FPfam -size 14 } set Lr [SM_ExtractPfam] # decale Id set Can $DS(Can) $Can itemconfigure $DS(IdBegin) -justify right -anchor e $Can itemconfigure $DS(IdEnd) -justify left -anchor w set n [lindex $DS(NomFG) 0] set bb [$Can bbox [$Can find withtag R$n]] set lgt $DS(AliLg) lassign $bb x1 y1 x2 y2 set h $DS(LaneH) set x1 $DS(StartX) foreach e $Lr { lassign $e Id d f c n set xd [expr {$x1+int(1.0*$DS(LaneW)/$lgt*$d)}] set xf [expr {$x1+int(1.0*$DS(LaneW)/$lgt*$f)}] SM_EntetePfam $n $xd $xf $c set i -1 set y1 $DS(StartY) foreach Lg $DS(LG) { incr i if {$i == 3 || $i == 6} {set YOffset 30} {set YOffset 10} set y2 [expr {$y1 + $h}] if {$Lg ne "" && [PfamDansGroupe $Lg $Id $d $f]} { set yd [expr {$y1-6}] set yf [expr {$y2+6}] $Can create rectangle $xd $yd $xf $yf -fill $c -outline $c -tags PFam } set y1 [expr {$y2 + $YOffset}] } } $Can lower PFam return } proc SM_EntetePfam {n d f c} { global DS set y1 $DS(StartY) regsub -all "_" [string trim $n] " " n set w [font measure FPfam $n] set lb [regexp -all -inline -indices { } $n] set lb [lsort -decreasing -index 0 -integer $lb] set note $n set i 0 while {$w > ($f - $d + 1)} { set ib [lindex [lindex $lb $i] 0] set note "[string range $n 0 $ib-1]\n[string range $n $ib+1 end]" set w [font measure FPfam [string range $n 0 $ib-1]] incr i } set Can $DS(Can) set xn [expr {$d + ($f - $d + 1)/2}] set yn [expr {$DS(StartY) - 10}] # entete deja la set ie [$Can find closest $xn $yn] if {$ie ne ""} { lassign [$Can bbox $ie] tmp yn tmp tmp } set id [$Can create text $xn $yn -text "$note" -font FPfam -fill white -anchor s -justify center] lassign [$Can bbox $id] tmp y1 tmp y2 $Can create rectangle $d $y1 $f $y2 -fill $c -outline $c -tags entete $Can raise $id return } proc SM_Essai {} { set LA [LesLignesDuFichier D_new.xml] set LE [LesLignesDuFichier L_new.xml] foreach l $LA { set l [string trim $l] if {[regexp "seq-name" $l]} { lappend nA [string range $l 11 end-11] } } foreach l $LE { set l [string trim $l] if {[regexp "seq-name" $l]} { lappend nE [string range $l 11 end-11] } } puts "[join [lrange $nA 0 3] \n]" puts "[join [lrange $nE 0 3] \n]" puts "A : [llength $nA]" puts "E : [llength $nE]" puts "[join [lor $nA $nE] \n]" puts "A&E : [llength [land $nA $nE]]" exit } proc SM_ExtractPfam {} { global TabSF DS # 1 recupere les TYPES de pfam presents set Lp [array names TabSF "*,PFAM*"] set Ltp [list] foreach e $Lp { lassign [split $e ,] n p lappend Ltp $p } set Ltp [lsort -unique $Ltp] # 2 recupere les ID/noms pfam foreach p $Ltp { set Ln [array names TabSF "*,$p"] foreach n $Ln { foreach e [set TabSF($n)] { DecortiqueUneFeature $e d f c tmp note lassign [SM_TraitePfam $note] Id txt lappend Trbrut($Id) [list $d $f $c $txt] } } } set Lr [TrieZonesPfam Trbrut] return $Lr } proc SM_FeatDuCsv {f} { set Ll [LesLignesDuFichier $f] foreach l [lrange $Ll 6 end] { set Lvals [split $l ";"] set col [lindex $Lvals 0] if {$col ne ""} { set Lnote [lrange $Lvals 1 8] lappend Lfeat [list $col $Lnote] } } return $Lfeat } proc SM_Features2PdbRef {} { global TabSF ListeTypesDeFeatures LNOrdali DS GroupeDeLaSequence ListePDB SM_KillFeatDis set Lfeat [array names TabSF *,Discri] foreach nm $ListePDB { set sq [set ::Sequences($nm)] foreach lg $DS(LG) nomg $DS(NomFG) { if {$lg eq {} } {continue} set Dis "Dis-$nomg" lappend ListeTypesDeFeatures $Dis set Lnf [list] foreach lf $Lfeat { lassign [split $lf ,] nom type if {[set GroupeDeLaSequence($nom)] ni $lg} {continue} foreach e [set TabSF($lf)] { DecortiqueUneFeature $e d f c s n y set d1 -1 ; set f1 -1 for {set i $d} {$i <= $f} {incr i} { if {[string index $sq $i] eq "."} { if {$d1 != -1} { lappend Lnf [list $d1 $f1 $c $s $n $y] } set d1 -1 } else { if {$d1 == -1} { set d1 $i } set f1 $i } } if {$d1 != -1} { lappend Lnf [list $d1 $f1 $c $s $n $y] } } } set Lnf [lunique $Lnf] if {0} { puts "$nm $Dis" puts "[join $Lnf \n]" puts "" } foreach e $Lnf { lassign $e d f c s n y lappend TabSF(${nm},$Dis) [list "fstart" $d "fstop" $f "fcolor" $c "fscore" $s "fnote" $n "fcsys" $y] } } } set ListeTypesDeFeatures [lsort -unique $ListeTypesDeFeatures] puts "\nDebug" foreach n $ListePDB { set Ld [array names TabSF "${n},*mito*"] puts "[join $Ld \n]" foreach z $Ld { foreach e [set TabSF($z)] { DecortiqueUneFeature $e d f c s note puts "$d $f $c $note" } } } puts "" return } proc SM_Features2PdbRef_2 {} { global TabSF ListeTypesDeFeatures LNOrdali DS GroupeDeLaSequence ListePDB R2C parray R2C set ngm -1 foreach e [array names R2C] { set Lg [lsort -unique [set R2C($e)]] if {[set n [llength $Lg]] > $ngm} { set ngm $n } } set CyMi [list] set BaMi [list] set RAll [list] foreach e [array names R2C] { set Lg [lsort -unique [set R2C($e)]] if {[lsearch -regexp $Lg {mito}] == -1} { continue } set yab [expr {[lsearch -regexp $Lg {bact}] != -1}] set yaa [expr {[lsearch -regexp $Lg {arch}] != -1}] set yac [expr {[lsearch -regexp $Lg {cyto}] != -1}] # doublet cyto-mito if {$yac && ! $yaa && ! $yab} { lappend CyMi $e } # doublet Bact-mito if {$yab && ! $yaa && ! $yac} { lappend BaMi $e } # all if {[llength $Lg] == $ngm} { lappend RAll $e } } puts "CyMi $CyMi" puts "BaMi $BaMi" puts "RAll $RAll" foreach nm $ListePDB { set sq [set ::Sequences($nm)] # doublet Cyto-Mito if {[llength $CyMi]} { set c orange set s 0.0 set n "Cyto-Mito" set y "local" set Dis "Dis-Mito-Cyto" lappend ListeTypesDeFeatures $Dis foreach e $CyMi { if {[string index $sq $e] ne "."} { lappend TabSF(${nm},$Dis) [list "fstart" $e "fstop" $e "fcolor" $c "fscore" $s "fnote" $n "fcsys" $y] } } } # doublet Bact-Mito if {[llength $BaMi]} { set c green set s 0.0 set n "Bact-Mito" set y "local" set Dis "Dis-Mito-Bact" lappend ListeTypesDeFeatures $Dis foreach e $BaMi { if {[string index $sq $e] ne "."} { lappend TabSF(${nm},$Dis) [list "fstart" $e "fstop" $e "fcolor" $c "fscore" $s "fnote" $n "fcsys" $y] } } } # Opposition if {[llength $RAll]} { set c gold set s 0.0 set n "Opposition" set y "local" set Dis "Dis-Opposition" lappend ListeTypesDeFeatures $Dis foreach e $RAll { if {[string index $sq $e] ne "."} { lappend TabSF(${nm},$Dis) [list "fstart" $e "fstop" $e "fcolor" $c "fscore" $s "fnote" $n "fcsys" $y] } } } } set ListeTypesDeFeatures [lsort -unique $ListeTypesDeFeatures] return } proc SM_FigAuto {} { global db DS TabSF foreach a {A C D E Fa Fb G H I K L M N P Q R S T V W Y} { set file ${a}_verylastfinal.xml set fpng ${a}_test.png puts "\n$file" LesDefauts LesDefauts TypeAli XML LesDefauts FichierXML $file LoadingAlignement InitAffichage update if {[info exists ::TabSF]} { puts "feature done" ChangeMode "feature" } #AfficheProfileResults # Traite les command-line options set VariablesAuDepart [info globals] AssignSeqToGroup CreeLesPiliers SM_View .fg.cb.print configure -command [list PrintCanvas ".fg.css.can" png $fpng] .fg.cb.print invoke update idletasks destroy .fg catch {unset GroupeDeLaSequence} FermeFichier } return } proc SM_Figure {f} { global DS db ListeDesPiliersDuGroupe if {[TypeAli] eq "XML"} { set f [set Defauts(FichierXML)] } else { set f [set Defauts(FichierORD)] } SM_InitFig $f SM_BackFigure SM_TraceAliFig SM_TraceFeatureFig return } proc SM_FrameWork {{addpdb 0}} { global DS SDG TDesSeqnames ListePDB # groupe ou est mito et cyto if {[TypeAli] eq "XML"} { set f [set ::Defauts(FichierXML)] } else { set f [set ::Defauts(FichierORD)] } set Pre [string range $f 0 [expr {[string first "_" $f] - 1}]] set ncyt "${Pre}cy_Homo.sapi" set nmit "${Pre}mi_Homo.sapi" set DS(GCyt) "turlututu" set DS(GMit) "turlututu" foreach Lg $DS(LG) n $DS(NomFG) { set DS($n,PDB) [list] foreach g $Lg { foreach ns [set SDG($g)] { if {[set TDesSeqnames($ns)] eq $ncyt} { set DS(GCyt) $n } if {[set TDesSeqnames($ns)] eq $nmit} { set DS(GMit) $n } if {$ns in $ListePDB} { lappend DS($n,PDB) $ns } } } } set DS(StartX) 300 set DS(StartY) 200 set DS(LaneW) 800 set DS(LaneH) 50 if {"FigF" ni [font names]} { font create FigF -family Helvetica -size 28 font create FigMito -family Helvetica -size 28 -underline 1 font create FigCyto -family Helvetica -size 28 -slant italic font create FigCyMi -family Helvetica -size 28 -slant italic -underline 1 font create FigPDB -family Helvetica -size 14 -slant italic -underline 1 } set w .barcode toplevel $w frame $w.css grid $w.css -row 0 -column 0 -sticky news grid columnconfig $w 0 -weight 1 grid rowconfig $w 0 -weight 1 set Can $w.css.can set DS(Can) $Can canvas $w.css.can -scrollregion [list 0 0 2000 2000] -width 500 -height 500 -yscrollcommand "$w.css.scy set" -xscrollcommand "$w.css.scx set" -background white scrollbar $w.css.scy -orient vertical -command {$c.css.can yview} scrollbar $w.css.scx -orient horizontal -command {$w.css.can xview} grid $w.css.can -row 0 -column 0 -sticky news grid $w.css.scy -row 0 -column 1 -sticky ns grid $w.css.scx -row 1 -column 0 -sticky ew grid rowconfig $w.css 0 -weight 1 grid columnconfig $w.css 0 -weight 1 frame $w.cb grid $w.cb -row 1 -column 0 -sticky ew button $w.cb.print -text "Print" -background yellow -command {PrintCanvas ".fg.css.can" png} checkbutton $w.cb.pfam -text " PFAM " -onvalue 1 -offvalue 0 -variable DS(Pfam) checkbutton $w.cb.pdb -text " PDB " -onvalue 1 -offvalue 0 -variable DS(AddPDB) checkbutton $w.cb.grp -text " Groups " -onvalue 1 -offvalue 0 -variable DS(AddGrps) grid $w.cb.print -row 0 -column 0 grid $w.cb.pfam -row 0 -column 1 grid $w.cb.pdb -row 0 -column 2 grid $w.cb.grp -row 0 -column 3 bind $Can {%W scan mark %x %y} bind $Can {%W scan dragto %x %y 1} trace add variable DS(Pfam) write SM_View trace add variable DS(AddPDB) write SM_View trace add variable DS(AddGrps) write SM_View return } proc SM_GroupesDesNomsDuCsv {f} { set Ll [LesLignesDuFichier $f] set l [lindex $Ll 4] set Ltmp [lrange [split $l ";"] 1 8] set LG [list] foreach g $Ltmp { if {[string first "\(" $g] != -1} { set if [expr {[string first "\)" $g]+1}] set g [string range $g $if end] } set Lig [split $g " "] set Linter [list] foreach ig $Lig { if {$ig eq "" || $ig eq "+"} { continue } elseif {! [regexp {^gpe} $ig]} { lappend Linter 99 } else { lappend Linter [string range $ig 3 end] } } lappend LG $Linter } set Ltot [list] foreach g $LG { lappend Ltot {*}$g } set Ltot [lsort -integer -unique $Ltot] if {[lindex $Ltot end] > 99} { set gp [expr {[lindex $Ltot end-1] + 1}] } set LGtmp [list] set LGtot [list] foreach lg $LG { set toto [list] foreach s $lg { if {$s == 99} { set g "Group$gp" } else { set g "Group$s" } lappend toto $g lappend LGtot $g } lappend LGtmp [lunique $toto] } set LG $LGtmp return $LG } proc SM_IdP {} { global PrI ScoreMeth Sc Defauts EFeat LNDG CreeLesPiliers # FiltreLesPiliers 95 #set Lwin [list 10 20 50 100] set Lwin [list 50] foreach win $Lwin { # last group is outgroup set PrI(grp) [lrange $LNDG 0 end-1] set PrI(win) $win set PrI(jump) 1 set PrI(CSV) 0 LanceIdentityProfile puts "$win done ..." set f "Score-Iden" #set ScoreMeth($f,ListeGrps) [set PrI(grp)] set Sc($win,v) [array get ScoreMeth "$f,*,*"] #set Sc($win,Lg) $ScoreMeth($f,ListeGrps) set Sc($win,Lg) $ScoreMeth($f,ListeGrps) foreach g $ScoreMeth($f,ListeGrps) { set Sc($win,$g,min) $ScoreMeth($f,${g}-min) set Sc($win,$g,max) $ScoreMeth($f,${g}-max) } array unset ScoreMeth "$f,*" update } set w .dpi toplevel $w set EFeat(PADWdt) [set Defauts(CanvasWSFeat)] set EFeat(PADHgt) [set Defauts(CanvasHSFeat)] set EFeat(FWidth) [set Defauts(FWidthSFeat)] set EFeat(FHeight) [set Defauts(FHeightSFeat)] set wc "$w.c" set EFeat(PAD) $wc set PAD $wc canvas $w.c -width [set EFeat(FWidth)] -height [set EFeat(FHeight)] -scrollregion [list 0 0 [set EFeat(PADWdt)] [set EFeat(PADHgt)]] -cursor hand2 -background white -relief groove -xscrollcommand "$w.hs set" -yscrollcommand "$w.vs set" scrollbar $w.vs -command "$wc yview" -width 8 scrollbar $w.hs -orient horiz -command "$wc xview" -width 8 grid $w.c -row 0 -column 0 -sticky news grid $w.vs -row 0 -column 1 -sticky ns grid $w.hs -row 1 -column 0 -sticky ew bind $PAD {%W scan mark %x %y} bind $PAD {%W scan dragto %x %y 1} bind $PAD <4> {eval %W yview scroll -1 units} bind $PAD <5> {eval %W yview scroll 1 units} bind $PAD {eval %W xview scroll -1 units} bind $wc {eval %W xview scroll 1 units} # frame window lenght frame $w.fw grid $w.fw -row 2 -column 0 -columnspan 2 -sticky we set col 0 foreach win $Lwin { radiobutton $w.fw.r$win -text "$win" -relief flat -value $win -variable PrI(DisWin) grid $w.fw.r$win -row 0 -column $col -sticky w -padx 5 incr col } button $w.fw.prt -text "Print" -bg yellow -command "PrintCanvas $wc png" grid $w.fw.prt -row 0 -column $col -sticky e -padx 5 grid rowconfig $w 0 -weight 1 grid columnconfig $w 0 -weight 1 trace add variable PrI(DisWin) write SM_DrawIdP set PrI(DisWin) [lindex $Lwin 0] return } proc SM_InitFig {f {Init 1}} { global db DS TabSF set Pre [string range $f 0 [string first "_" $f]-1] if {$Init} { LesDefauts LesDefauts Mode batch set db [FabriqueDeTables [set ::Defauts(TablesDB)]] DecortiqueUnXml2 ${Pre}_new.xml InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF } CreeLesPiliers set DS(AliLg) [LongueurDeLAlignement] set Lfeat [SM_FeatDuCsv ${Pre}.csv] set LNomG [SM_NomsDuCsv ${Pre}.csv] set LG [SM_GroupesDesNomsDuCsv ${Pre}.csv] foreach lg $LG { lappend LGtot {*}$lg } set LGtot [lunique $LGtot] foreach g $LG n $LNomG { lappend LNG [list $g $n] } set LNG [lsort -decreasing -command SM_ReordonneClasses $LNG] foreach e $LNG { lassign $e g n lappend DS(NomFG) $n lappend DS(LG) $g } return } proc SM_InitOrganismeProche {Ltax} { global db TGen InitTaxDB $db eval {begin transaction} foreach t $Ltax { set TGen($t) [DonneGenealogie $t] } $db eval {commit} return } proc SM_KillFeatCons {} { global TabSF ListeTypesDeFeatures array unset TabSF "*,*Cons-*" set Li [lsearch -all -regexp $ListeTypesDeFeatures {Cons-}] foreach i [lsort -integer -decreasing $Li] { puts "del [lindex $ListeTypesDeFeatures $i]" set ListeTypesDeFeatures [lreplace $ListeTypesDeFeatures $i $i] } return } proc SM_KillFeatDis {} { global TabSF ListeTypesDeFeatures array unset TabSF "*,Dis-*" set Li [lsearch -all -regexp $ListeTypesDeFeatures {^Dis\-}] foreach i [lsort -integer -decreasing $Li] { set ListeTypesDeFeatures [lreplace $ListeTypesDeFeatures $i $i] } return } proc SM_MAJ {{in ""}} { global LNOrdali TDesAccess TDesBId TDesTaxId TDesDescriptifs TDuLineage TDesOrganismes TabSF if {$in eq ""} { set Lf [glob /home/moumou/synmito/3Data/*_verylastfinal.xml] } else { set Lf [glob /home/moumou/synmito/3Data/${in}_verylastfinal.xml] } set Lf [lsort $Lf] puts "Number of files to process : [llength $Lf]" foreach f $Lf { puts "Doing $f" LesDefauts LesDefauts TypeAli "XML" LesDefauts FichierXML $f #LoadingAlignement DecortiqueUnXml2 $f InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF puts "Number of sequences : [llength $LNOrdali]" set Lacc [list] set Lbid [list] set Lsqn [list] # LNOrdali est liste seq-names # cree liste access et enleve les blancs foreach n $LNOrdali { if {$n eq ""} {continue} lappend Lacc [set TDesAccess($n)] lappend Lbid [set TDesBId($n)] lappend Lsqn $n } set Luni [Convert2UniProtAcc $Lacc] # liste correspondance access - nouveaux access set LcorSqnUni [list] foreach s $Lsqn u $Luni { lappend LcorSqnUni [list $s $u] } # recupere infos sequences set Lres [split [DbFetchGET uniprot $Luni] \n] set Lembl [SplitLesEMBL $Lres] foreach em $Lembl { DecortiqueLesLignesEMBL $em ID AC DE GN OS OC OX "" LaDETotal GNTotal if {[set idx [lsearch -index 1 -exact $LcorSqnUni $AC]] != -1} { lassign [lindex $LcorSqnUni $idx] sqn uni set AC $sqn } elseif {[set idx [lsearch -index 1 -exact $LcorSqnUni $ID]] != -1} { lassign [lindex $LcorSqnUni $idx] sqn uni set AC $sqn } else { puts "can't find $AC $ID" continue } foreach t {TDesDescriptifs TDesTaxId TDuLineage TDesOrganismes} v {DE OX OC OS} { if {[set ${t}($AC)] eq "" || [set ${t}($AC)] == 0} { #puts "${t}($AC) [set $v]" set ${t}($AC) [set $v] } } } set fn [file tail $f] set pre [string range $fn 0 [string first "_" [file tail $f]]-1] set outfile "${pre}_luc.xml" SauveLAlignement "" $outfile FermeFichier # lululu } exit } proc SM_MAJ3Data {{systeme ""}} { global TToDo TabSF Defauts if {$systeme eq ""} { set systeme [string range [set Defauts(FichierXML)] 0 [string first "_" [set Defauts(FichierXML)]]-1] } puts "System $systeme" # on met a jour : # - SMXX comme seqname # - accession/BId de type Cme_xxxRS # infos du fichier modif2.txt set Ll [LesLignesDuFichier modif2.txt] set ix [lsearch -nocase $Ll "system $systeme"] if {$ix == -1} { puts "Probleme ! systeme $systeme n'existe pas !" exit } # init tableau des choses a faire array set TToDo [list] set TToDo(remove) [list] set TToDo(add) [list] set TToDo(rename) [list] set rename 0 set add 0 set delete 0 foreach l [lrange $Ll $ix+1 end] { set l [string trim $l] regsub -all { +} $l " " l if {[regexp {^#} $l]} { continue } if {$l eq ""} { set delete 0 set add 0 set rename 0 } switch -regexp -nocase $l { {^system} { break } {^rename} { set rename 1 set add 0 set delete 0 continue } {^add} { set add 1 set rename 0 set delete 0 continue } {^remove} { set delete 1 set rename 0 set add 0 continue } } if {$rename} { lappend TToDo(rename) {*}[split $l " "] } if {$add} { lassign [split $l " "] sqn acc lappend TToDo(add) $sqn $acc } if {$delete} { lappend TToDo(remove) [list {*}[split $l " "]] } } SM_DoRemove $systeme SM_DoAdd $systeme #SM_DoRename $systeme puts "" # cherche les SMxx dans les access global {*}[info globals "TD*"] Sequences LNOrdali ListePDB set ToDef [list] foreach n $LNOrdali { if {$n eq "" || $n in $ListePDB} {continue} set acc [set TDesAccess($n)] set bid [set TDesBId($n)] if {[string range $acc 0 3] eq "Cme_"} { lappend ToDef 45157 $acc $Sequences($n) } elseif {[regexp {SM[0-9][0-9]} $acc]} { # mito Homo sapiens lappend ToDef 9606 $acc $Sequences($n) } elseif {$n eq $acc && $n eq $bid} { if {[regexp -nocase {Dani\.reri} $n]} { lappend ToDef 7955 $acc $Sequences($n) } } lappend Lacc $acc lappend Lbid $bid lappend Lsqn $n } if {$ToDef != {} } { set Lres [SM_MAJUnknown $ToDef] foreach {tax acc seq} $Lres {tmp oldAcc tmp} $ToDef { if {$acc eq "NotFound"} { continue } set ix [lsearch $Lacc $oldAcc] lset Lacc $ix $acc lset Lbid $ix $acc # remplace access dans tableau set sqn [lindex $Lsqn $ix] set TDesAccess($sqn) $acc set TDesBId($sqn) $acc } update } InitInfoSeqs SM_DoRename $systeme puts "update infos" AssigneLesPoids UpdateInfosDesSeqs ComputeConservation puts "sauve alignement" SauveLAlignement XML [file join /home/moumou/synmito/3Data/test "${systeme}_maj.xml"] AdieuOrdali exit return } proc SM_MAJUnknown {Ldef} { set Lres [list] foreach {tax acc seq} $Ldef { set s [string map {"." "" "-" ""} $seq] set Lblast [BlastService -p blastp -d nr -orga $tax -expect 0.00001 -query ">toto\n$s" -nlist 10 -f 1 -qdef yes] DecortiqueBlast $Lblast "" "" "" Lbid Lacc Lde "" LPN if {[lindex $LPN 0] == 0.0} { set acc [BonAccess [lindex $Lacc 0]] set acc [Convert2UniProtAcc $acc] } else { foreach p $LPN d $Lde { puts "==> $p $d" } set acc NotFound } lappend Lres $tax $acc $seq unset -nocomplain Lbid Lacc Lde LPN } return $Lres } proc SM_Macsims {{f ""}} { if {$f eq ""} { set Lrsf [glob *.rsf] } else { set Lrsf $f } foreach InRsf $Lrsf { set Pre [file rootname $InRsf] set InTfa ${Pre}.tfa set OutMsf ${Pre}.msf puts " $Pre :" puts "----" puts "InRsf $InRsf" puts "InTfa $InTfa" puts "OutMsf $OutMsf" exec /biolo/clustal/bin/clustalw -infile=$InTfa -convert -outfile=$OutMsf -output=gscope if {! [file exists $OutMsf]} { puts "Error Conversion : $InRsf" exit } # # Attention ! Macsim cree un .rsf, qui va # ecraser le premier. # set suffixe "${Pre}_new" exec /biolo/macsim/macsim $InTfa $suffixe >& log if {! [file exists ${suffixe}.xml]} { puts "Error Macsim : $OutMsf" exit } puts "OutXml ${Pre}.xml" puts "" file delete -force ${suffixe}.rsf file rename -force ${suffixe}.xml ${Pre}.xml } exit } proc SM_NomsDuCsv {f} { set Ll [LesLignesDuFichier $f] set l [lindex $Ll 2] set LNomG [lrange [split $l ";"] 1 8] return $LNomG } proc SM_NorMD {} { set o [open "normd.dat" w] foreach frsf [glob *.rsf] { set Pre [file rootname $frsf] exec [NorMDExe] ${Pre}.msf > tmp set n [LesLignesDuFichier tmp] puts $o "$Pre : $n" } exit } proc SM_OnceMore {{Lf ""}} { global db LNOrdali TabSF TDesSeqnames TDesBId Sequences GroupeDeLaSequence if {$Lf eq ""} { set Lf [lsort [glob [file join .. 2Data *_new2.xml]]] } foreach f $Lf { LesDefauts LesDefauts Mode batch LesDefauts TypeAli XML LesDefauts FichierXML $f DefinitionPreferences #set db [FabriqueDeTables [set ::Defauts(TablesDB)]] set Pre [string range [file tail [file rootname $f]] 0 end-5] puts " $Pre :" puts "----" catch {unset TabSF} catch {unset LNOrdali} catch {unset GroupeDeLaSequence} LoadingAlignement set LongTot [LongueurDeLAlignement] puts " LNOrdali [llength $LNOrdali]" puts " ListePDB [llength $::ListePDB]" foreach n $LNOrdali { if {$n eq ""} {continue} lappend LSOrdali [set Sequences($n)] if {[info exists TabSF(${n},Discri)]} { set Garde($n,Discri) [set TabSF($n,Discri)] } set Garde($n,sqn) [set TDesSeqnames($n)] set Garde($n,bid) [set TDesBId($n)] set g [string range [set GroupeDeLaSequence($n)] 5 end] set Garde($n,grp) $g } CreeLeTfa ${Pre}_temp.tfa catch {eval exec /biolo/macsim/macsim ${Pre}_temp.tfa ${Pre}_new} Msg if {! [file exists ${Pre}_new.xml]} { puts "\n ${Pre}_new.xml not created" puts "$Msg" exit } puts "#### MACSIM OUTPUT ###" puts "$Msg" puts "#### MACSIM OUTPUT ###" set o [open "${Pre}.grd" w] puts $o [array get Garde] close $o unset Garde unset GroupeDeLaSequence FermeFichier puts "\n" } exit } proc SM_OnceMore2 {{f ""}} { global db LNOrdali TabSF TDesSeqnames TDesBId Sequences GroupeDeLaSequence TColScore TDesPhylum if {$f eq ""} { set Lf [lsort [glob *_new.xml]] set Lg [lsort [glob *.grd]] } else { set Lf ${f}_new.xml set Lg ${f}.grd } foreach f $Lf g $Lg { LesDefauts LesDefauts Mode batch LesDefauts TypeAli XML LesDefauts FichierXML $f DefinitionPreferences #set db [FabriqueDeTables [set ::Defauts(TablesDB)]] set Pre [file rootname $g] puts " $Pre :" puts "----" puts "xml $f" puts "garde $g" array set Garde [ContenuDuFichier $g] catch {unset TabSF} catch {unset LNOrdali} catch {unset GroupeDeLaSequence} #DecortiqueUnXml2 $f #InitSequences #InitInfoSeqs #AssignSeqToGroup #DonneTabFeature TabSF LoadingAlignement set LongTot [LongueurDeLAlignement] foreach n $LNOrdali { if {$n eq ""} {continue} lappend LSOrdali [set Sequences($n)] if {[info exists Garde(${n},Discri)]} { set TabSF($n,Discri) [set Garde($n,Discri)] } set sqn [set Garde($n,sqn)] set TDesSeqnames($n) $sqn set TDesBId($n) [set Garde($n,bid)] set GroupeDeLaSequence($n) "Group[set Garde($n,grp)]" set Lc [array names TabSF "$n,Cons-*"] foreach c $Lc { array unset TabSF "$c" } if {! [info exists TDesPhylum($n)] || [set TDesPhylum($n)] eq "undefined" || [set TDesPhylum($n)] eq ""} { set what [string range $sqn 1 2] set lifed "undefined" switch $what { "ba" {set lifed "Bacteria"} "cy" {set lifed "Eukaryota"} "cl" {set lifed "Eukaryota"} "mi" {set lifed "Eukaryota"} "ar" {set lifed "Archaea"} } set TDesPhylum($n) $lifed } catch {unset TColScore} } set Out "${Pre}_new2.xml" CreeLeMacsim $Out unset Garde FermeFichier puts "\n" } exit } proc SM_OrganismeProche {org} { global db TGen set Lorg [DonneGenealogie $org] set max -1 foreach t [array names TGen] { set n [llength [land $Lorg $TGen($t)]] if {$n > $max} { set max $n set pro $t } } return $pro } proc SM_PCI {} { global LNOrdali LSOrdali DS Sequences ListePDB SDG # Dans Pfam set Lr [SM_ExtractPfam] foreach e $Lr { lassign $e Id d f c n lappend PF($Id) [list $d $f $c $n] } lappend PF(All) [list 0 [expr {[LongueurAlignement]-1}] white "All"] parray PF set w [PlusLongEltDe $DS(NomFG)] set fmt "%${w}s | %3d | %5.2f %5.2f" foreach elt [lsort [array names PF]] { set nom "" foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np append nom $np } set nom [string trim $nom] puts "\n################" puts "# $elt - $nom\n" # global unset -nocomplain TDesPCI set moy -1. ; set std -1. set Sali [list] set nseqs 0 foreach n $LNOrdali s $LSOrdali { if {$n eq "" || $n in $ListePDB} { continue } incr nseqs set seq "" foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np append seq [string range $s $dp $fp] } lappend SAli $n $seq } CalculeLesPCIGenerique $SAli TDesPCI lassign [SM_StatPCI [array get TDesPCI]] moy std tmp tmp puts [format $fmt "whole" $nseqs $moy $std] foreach lg $DS(LG) nomg $DS(NomFG) { if {$lg == {} } {continue} set SAli [list] set moy -1. ; set std -1. unset -nocomplain TDesPCI set nseqs 0 foreach g $lg { foreach n [set SDG($g)] { if {$n eq "" || $n in $ListePDB} { continue } incr nseqs set seq "" foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np append seq [string range [set Sequences($n)] $dp $fp] } lappend SAli $n $seq } } CalculeLesPCIGenerique $SAli TDesPCI lassign [SM_StatPCI [array get TDesPCI]] moy std tmp tmp puts [format $fmt $nomg $nseqs $moy $std] } } return } proc SM_PDBRef {} { global Defauts LNOrdali set pre [file rootname $Defauts(FichierXML)] set Ll [LesLignesDuFichier Ref.pdb] foreach l $Ll { if {[regexp {^ } $l]} {continue} regsub -all { +} $l " " l set l [string map [list ":" ""] $l] set lv [split $l " "] lappend Lr [list {*}$lv] } set i [lsearch -regexp -index 0 $Lr $pre] set nr [lindex [lindex $Lr $i] 1] set nRef [lsearch -regexp -inline $LNOrdali $nr] return $nRef } proc SM_PrintClade {Lc fo} { set tot [lindex $Lc 0] foreach e [lrange $Lc 1 end] { lassign $e d Lv #puts "$d" set nltot 0 set sumtot 0 set sum 0 set nl 0 set lcou 1 set stop 0 set ToPrint [list] foreach n $Lv { #puts "n-> $n" lassign $n i l c if {! $stop} { if {$l != $lcou} { set info [expr {double($sum)/$nl}] if {$info >= 1.5 || ($sumtot/$nltot) == 1} { puts $fo [join $ToPrint \n] set ToPrint [list] } else { set stop 1 } set lcou $l set nl 0 set sum 0 } incr sum $c incr nl incr sumtot $c incr nltot lappend ToPrint "[string repeat " " [expr {($lcou - 1) * 2}]]$i $c" } } } return } proc SM_RecreateObj {} { global db $db eval {begin transaction} set Lt [$db eval {select tbl_name from sqlite_master}] foreach t $Lt { if {! [regexp {^obj\_} $t]} {continue} if {[regexp {^obj_AL} $t] || [regexp {^obj_SF} $t] || [regexp {^obj_CA} $t]} {continue} set pkp [$db eval "select distinct pk_pdb from $t"] $db eval "drop table $t" $db eval "create table $obj as select * from objetinit where pk_pdb = $pkp" } return } proc SM_RecupereGroupeEtNom {{f ""}} { global GroupeDeLaSequence TColScore TDesOrganismes TDesDescriptifs TDesPhylum LNOrdali LSOrdali Sequences TDesSeqnames TabSF db # Recupere nom et type de seq (mito, cyto, ...) # pour certains access set Ltxt [LesLignesDuFichier noms.txt] foreach l $Ltxt { lassign $l acc tmp nom tmp type set LkNom($acc) $nom } set faux [open "BadAccess" w] puts "Traite Groupe et noms :" if {$f eq ""} { set Lrsf [glob *.rsf] } else { set Lrsf $f } foreach frsf $Lrsf { #LesDefauts LesDefauts Mode batch DefinitionPreferences set db [FabriqueDeTables [set ::Defauts(TablesDB)]] set Pre [file rootname $frsf] puts " ${Pre} :" puts "----" puts $faux "${Pre} :" puts $faux "----" # Lookup des noms corriges catch {unset Lookup} source ${Pre}.lookup # Traite le RSF qui contient les groupes DecortiqueUnRSF $frsf LSeqRSF SeqRSF TabRSF catch {unset GDLS} set Lnew [list] foreach nrsf $LSeqRSF { if {[string trim $nrsf] eq ""} { lappend Lnew "" continue } # recupere le groupe if {[info exists TabRSF($nrsf,group)]} { set g [set TabRSF($nrsf,group)] } else { set g 999 } # Prend le vrai nom set nrsf [string trim $nrsf] if {[EstUnAccessPDB $nrsf]} { set n $nrsf puts " PDB $nrsf" } elseif {[info exists Lookup($nrsf)]} { set n [set Lookup($nrsf)] } else { puts "!! Error : $nrsf n'existe pas !" exit } set n [string trim $n] if {[EstUnAccessPDB $n]} {set n [BonAccess $n]} set GDLS($n) $g } # Traite XML pour inclure nouveau noms set fxml ${Pre}.xml set OutXml "${Pre}_recup.xml" puts "Traite $fxml" DecortiqueUnXml2 $fxml if {! [InitSequences]} { puts "Error initsequence" puts "$fxml" exit } InitInfoSeqs DonneTabFeature TabSF # traite groupe AssignSeqToGroup catch {unset GroupeDeLaSequence} set Lg [list] foreach n $LNOrdali { if {$n eq ""} {continue} lappend Lg [set GDLS($n)] } set Lg [lsort -integer [lunique $Lg]] if {[lindex $Lg end] == 999} { set gplus [expr {[lindex $Lg end-1]+1}] } # Traite noms set Lnew [list] set Lori [list] foreach n $LNOrdali { if {$n eq ""} { lappend Lnew "" lappend Lori "" continue } set g [set GDLS($n)] if {$g == 999} {set g $gplus} set GroupeDeLaSequence($n) "Group$g" if {[EstUnAccessPDB $n]} { lappend Lnew $n lappend Lori $n continue } if {[info exists LkNom($n)]} { set nom [set LkNom($n)] } else { set ge [set TDesOrganismes($n)] lassign [split $ge " "] g e set des [set TDesDescriptifs($n)] if {[set TDesPhylum($n)] eq "Bacteria"} { set suf "ba" } elseif {[set TDesPhylum($n)] eq "Archaea"} { set suf "ar" } else { if {[regexp -nocase {mitoch} $des]} { set suf "mi" } elseif {[regexp -nocase {chlorop} $des]} { set suf "cl" } else { set suf "cy" } } if {[regexp {^Tps\_} $n]} { set g "Thalassiosira" set e "pseudonana" set TDesOrganismes($n) "Thalassiosira pseudonana" set TDesPhylum($n) "Eukaryota" set TDesTaxId($n) 35128 eukar. } if {[regexp -nocase {^Cme\_} $n]} { set g "Cyanidioschyzon" set e "merolae" set TDesOrganismes($n) "Cyanidioschyzon merolae" set TDesPhylum($n) "Eukaryota" set TDesTaxId($n) 9606 } if {[regexp -nocase {^Cin\_} $n]} { set g "Ciona" set e "intestinalis" set TDesOrganismes($n) "Ciona intestinalis" set TDesPhylum($n) "Eukaryota" set TDesTaxId($n) 7719 } if {[regexp -nocase {^Cin\_|^Tps\_|^Cme\_} $n]} { set lou [split $n _] if {[llength $lou] == 4} { set ou [lindex $lou 3] } elseif {[llength $lou] == 3} { set ou [lindex $lou 2] } else { set ou [string range [lindex $lou 1] 5 end] } if {[string is integer $ou]} { set suf "cy" } elseif {[string length $ou] == 4} { set suf "mi" } else { set suf [string tolower $ou] } } if {[string length $n] == 4 && [regexp {^SM} $n]} { set suf "mi" set g "homo" set e "sapiens" set TDesOrganismes($n) "Homo sapiens" set TDesPhylum($n) "Eukaryota" set TDesTaxId($n) 9606 } set nom "${Pre}${suf}_[string totitle [string range $g 0 3]].[string tolower [string range $e 0 3]]" } if {$nom eq "${Pre}cy_."} { puts $faux " -> $n $ge" } else { set nbn [llength [lsearch -all $Lnew "$nom*"]] incr nbn if {$nbn > 1} { set nom "${nom}$nbn" puts "\t : MULTIPLE $nom" } lappend Lnew $nom lappend Lori $n } puts "$nom $n ${ge}" } catch {unset TColScore} set LNOrdali $Lori set LSOrdali [list] foreach n $LNOrdali w $Lnew { if {$n eq ""} { lappend LSOrdali "" } else { lappend LSOrdali [set Sequences($n)] } set TDesSeqnames($n) $w } CreeLeMacsim $OutXml FermeFichier puts "" puts $faux "" } close $faux exit } proc SM_RecupereInfosRefSeq {Lacc {Lsqn ""}} { global {*}[info globals "TD*"] LNOrdali array set T [InfosFromRefSeq $Lacc] set Lfail [list] foreach acc $Lacc sqn $Lsqn { if {[array names T "$acc,*"] == {}} { lappend Lfail $acc continue } foreach k {Desc TaxId Lineage Organism Phylum} t {TDesDescriptifs TDesTaxId TDuLineage TDesOrganismes TDesPhylum} { set ${t}($sqn) [set T($acc,$k)] } } return $Lfail } proc SM_RecupereInfosUniProt {Luni {Lsqn ""}} { global ListePDB LNOrdali {*}[info globals "TD*"] if {$Lsqn == {} } { foreach n $LNOrdali { if {$n eq "" || $n in $ListePDB} {continue} lappend Lsqn $n } } array set T [InfosFromUniProt $Luni] foreach acc $Luni sqn $Lsqn { if {! [info exists T($acc,Desc)]} { continue } foreach t {TDesDescriptifs TDesTaxId TDuLineage TDesOrganismes TDesPhylum} k {Desc TaxId Lineage Organism Phylum} { set ${t}($sqn) [set T($acc,$k)] } } return } proc SM_ReordonneClasses {ea eb} { lassign $ea tmpg a lassign $eb tmpg b set da [string tolower [string range $a 0 1]] set db [string tolower [string range $b 0 1]] if {$da eq "ba" && $db ne $da} {return 1} if {$db eq "ba" && $db ne $da} {return -1} if {$da eq "ba" && $da eq $db} { set na [string index $a end] set nb [string index $b end] if {$na < $nb} {return 1} if {$na > $nb} {return -1} } if {$da eq "eu" && $db ne $da} {return 1} if {$db eq "eu" && $db ne $da} {return -11} if {$db eq "eu" && $da eq $db} { set ca [string index $a end] set cb [string index $b end] if {$ca eq "o"} {return 1} if {$cb eq "o"} {return -1} if {$ca eq "1" && $cb eq "2"} {return 1} if {$ca eq "2" && $cb eq "1"} {return -1} } # Archaea 2 devant 1 set na [string index $a end] set nb [string index $b end] if {$na < $nb} {return -1} if {$na > $nb} {return 1} return } proc SM_ResiduPlusProche {seq x {sens right}} { if {[string index $seq $x] ne "."} {return $x} if {$sens eq "right"} { set lg [string length $seq] while {[string index $seq $x] eq "." && $x < $lg} { incr x } } else { while {[string index $seq $x] eq "." && $x >= 0} { incr x -1 } } return $x } proc SM_SauveNoms {} { global TDesSeqnames TDesAccess TDesBId LNOrdali db foreach fxml [lsort [glob *_new.xml]] { LesDefauts LesDefauts Mode batch set db [FabriqueDeTables [set ::Defauts(TablesDB)]] set Pre [file rootname $fxml] set NmOut ${Pre}.noms set fout [open $NmOut w] puts " $Pre :" puts "----" catch {unset TabSF} catch {unset LNOrdali} catch {unset TDesSeqnames} catch {unset TDesAccess} catch {unset TDesBId} DecortiqueUnXml2 $fxml InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF foreach n $LNOrdali { if {$n eq ""} {continue} set s [set TDesSeqnames($n)] set a [set TDesAccess($n)] set b [set TDesBId($n)] puts $fout "$s $a $b" } close $fout FermeFichier } exit } proc SM_StatOut {} { foreach o [lsort [glob *_verylastfinal.ord]] { set pre [string range $o 0 [string first _ $o]-1] set out "${pre}_surf.txt" if {$pre eq "Fb"} {continue} puts "doing $pre ... -> $out" exec -- ordali $o -precompute 0 -exe SMSM > $out } exit } proc SM_StatPCI {Lv} { if {! [string is list -strict $Lv] || [llength $Lv] % 2} {return} set m 0.0 ; set m2 0.0 set max -99999. ; set min 99999. ; set nb 0 foreach {k v} $Lv { set pci [lindex $v 0] set m [expr {$m + $pci}] set m2 [expr {$m2 + $pci**2}] if {$pci > $max} { lassign [split $k ,] a b if {$a ne $b} { set max $pci } } if {$pci < $min} {set min $pci} } set nb [expr {[llength $Lv]/2}] set moy [expr {$m/$nb}] set std [expr {sqrt($m2/$nb - $moy*$moy)}] set moy [expr {$moy*100.}] set std [expr {$std*100.}] set max [expr {$max*100.}] set min [expr {$min*100.}] return [list $moy $std $min $max] } proc SM_Stats {} { global TabSF LNDG ListeDesPiliersDuGroupe ListeTypesDeFeatures DS TDuGroupeDesSeqs SDG db ListePDB DCpt Threshold R2C CreeLesPiliers set ngrp [lindex $LNDG 0] set ListePil [set ListeDesPiliersDuGroupe($ngrp)] SM_KillFeatCons # Dans Pfam set Lr [SM_ExtractPfam] foreach e $Lr { lassign $e Id d f c n lappend PF($Id) [list $d $f $c $n] } lappend PF(All) [list 0 [expr {[LongueurAlignement]-1}] white "All"] parray PF foreach elt [lsort [array names PF]] { set nom "" foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np append nom $np } set nom [string trim $nom] puts "\n\n####################" puts "# $nom - $elt " puts "# " set NbRC 0 foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np # Nbr res communs foreach p [lrange $ListePil $dp $fp] { incr NbRC [expr {! [regexp {\.} $p]}] } } puts "Nbr residues commun : $NbRC" # comptage invariants update if {[set Lft [array names TabSF "*,Cons-T${Threshold}*"]] eq ""} { global Cons ScoreMeth set Cons(ListeCons) "None" set Cons(Method) Threshold set Cons(PDB) 0 set Cons(Show) 0 set Cons(OnlyGlobal) 1 set ft [PrepareRunOrdali] puts "Compute conservation : $ft" set Cons(Title) "Threshold global" set Cons(ConsCou) $ft set ScoreMeth($ft,Title) $Cons(Title) set ScoreMeth($ft,Methode) $Cons(Method) SauveConservation AppliqueFeature Clear update set Lft [array names TabSF "*,Cons-T$Threshold"] DetruitBoutonsOrdali AfficheModeFeatures } set idx 0 set sq [lindex $Lft $idx] lassign [split $sq ,] nom tmp while {$nom in $ListePDB} { incr idx set sq [lindex $Lft $idx] lassign [split $sq ,] nom tmp } set nInv 0 foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np foreach ft [lsort -unique [set TabSF($sq)]] { DecortiqueUneFeature $ft d f c s n if {$d >= $dp && $f <= $fp} { incr nInv if {$elt eq "All"} { lappend DCpt(invariants) $d } } } } puts "Nbr invariants : $nInv" puts "" # Discri de toutes sortes set lng [PlusLongEltDe $DS(NomFG)] puts " [string repeat " " $lng] | All | aa | gap | I/D" set fmt "Nbr %${lng}s | %3d | %3d | %3d | %3d" foreach lg $DS(LG) nomg $DS(NomFG) { if {$lg == {} } {continue} set g [lindex $lg 0] set nsi 0 set sq [lindex [set SDG($g)] $nsi] while {(! [info exists TabSF($sq,Discri)] || ! [set lgd [llength [set TabSF($sq,Discri)]]] || $sq in $ListePDB) && $nsi < [llength [set SDG($g)]]} { incr nsi set sq [lindex [set SDG($g)] $nsi] } if {! $lgd} {continue} set nb 0 set nbID 0 set nbGAP 0 foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np foreach e [lunique [lsort -integer -index 1 [set TabSF($sq,Discri)]]] { DecortiqueUneFeature $e d f c s note if {$d < $dp || $f > $fp} { continue } if {[regexp -nocase {^indel} $note]} { incr nbID [expr {$f - $d + 1}] continue } if {[regexp -nocase {^gap} $note]} { incr nbGAP [expr {$f - $d + 1}] continue } incr nb [expr {$f - $d + 1}] if {$elt eq "All"} { for {set cpt $d} {$cpt <= $f} {incr cpt} { lappend DCpt($nomg) $cpt } } } } puts [format $fmt $nomg [expr {$nb + $nbID + $nbGAP}] $nb $nbGAP $nbID] } puts "" # Discri <-> Discri / Discri <-> variable set NbG 0 unset -nocomplain GRes R T foreach lg $DS(LG) nomg $DS(NomFG) { if {$lg == {} } {continue} incr NbG set g [lindex $lg 0] set nsi 0 set sq [lindex [set SDG($g)] $nsi] while {(! [info exists TabSF($sq,Discri)] || ! [set lgd [llength [set TabSF($sq,Discri)]]] || $sq in $ListePDB) && $nsi < [llength [set SDG($g)]]} { incr nsi set sq [lindex [set SDG($g)] $nsi] } if {! $lgd} {continue} foreach e [lunique [lsort -integer -index 1 [set TabSF($sq,Discri)]]] { DecortiqueUneFeature $e d f c s note if {[regexp -nocase {^indel} $note]} { continue } if {[regexp -nocase {^gap} $note]} { continue } for {set i $d} {$i <= $f} {incr i} { lappend GRes($i) $nomg } } } foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np foreach e [array names GRes] { if {$e < $dp || $e > $fp} {continue} set R($e) [join [lsort -unique [set GRes($e)]] " "] if {$elt eq "All"} { set R2C($e) [lsort -unique [set GRes($e)]] } } } RetourneTableau R T set w [PlusLongEltDe [array names T]] set fmt "%${w}s : %d" puts "Co-presence in groups :" puts "-----------------------" puts "Nbr groups max : $NbG" foreach e [lsort [array names T]] { puts [format $fmt $e [llength [set T($e)]]] } puts "" # Montre nombre par PDB set Ld [lsearch -regexp -all -inline $ListeTypesDeFeatures {^Dis\-}] foreach dis $Ld { puts "$dis\n[string repeat - [string length $dis]]" set Lsq [lsort [array names TabSF "*,$dis"]] foreach sq $Lsq { lassign [split $sq ,] nom type set Lv [list] foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np foreach e [set TabSF($sq)] { DecortiqueUneFeature $e d f c s note if {[regexp -nocase {^indel} $note] || [regexp -nocase {^gap} $note]} { continue } if {$d >= $dp && $f <= $fp} { lappend Lv [list $d $f] } } } set nb 0 foreach e [lsort -unique $Lv] { lassign $e d f incr nb [expr {$f - $d + 1}] } set gPDB [set TDuGroupeDesSeqs($nom)] set grp "NotFound" foreach lg $DS(LG) nomg $DS(NomFG) { if {$lg eq {} } {continue} if {$gPDB in $lg} { set grp $nomg break } } puts "in $nom ($grp) $nb " } puts "" } # inspecte objets puts "\nInside 3D objects :" puts "-------------------" $db eval {begin transaction} set Lt [$db eval {select tbl_name from sqlite_master}] set Lo [list] foreach t $Lt { if {[regexp {^obj_} $t]} { lappend Lo $t } } set Lpkpdb [$db eval {select pk_pdb,nom from pdb}] foreach {pkp nom} $Lpkpdb { set Lpkc [$db eval {select pk_chaines, nom from chaines where pk_pdb=$pkp}] foreach {pkc chn} $Lpkc { foreach o $Lo { set Lr [$db eval "select distinct r.rnmr from residues as r, $o as o where o.pk_chaines=$pkc and o.pearl=1 and r.pk_residues = o.pk_residues"] set l 0 foreach zpf [set PF($elt)] { lassign $zpf dp fp cp np foreach r $Lr { set r [string trimleft $r 0] if {$r >= $dp && $r <= $fp} { incr l } } } if {! $l} { continue } puts "$nom $chn [string range $o 4 end] $l" } } puts "" } $db eval {commit} } #exit return } proc SM_TraceAliFig {} { global DS db ListeDesPiliersDuGroupe foreach lg [set DS(LG)] n [set DS(NomFG)] { if {$lg eq {}} {continue} for {set i 0} {$i < $DS(AliLg)} {incr i} { set p$i "" } foreach g $lg { set i 0 foreach p [set ListeDesPiliersDuGroupe($g)] { append p$i $p incr i } } set plg [string length $p0] set DS(Dep) -1 set DS(Contig) 0 for {set i 0} {$i < $DS(AliLg)} {incr i} { set p$i [string map [list "." ""] [set p$i]] set pl [string length [set p$i]] if {100.*$pl/$plg >= 10 } { SM_TracePilierFig [expr {$i+1}] $n } } SM_TracePilierFig $i $n 1 $DS(Can) lower R$n } return } proc SM_TraceDiscriFig {n Lf} { global DS set Can $DS(Can) set bb [$Can bbox [$Can find withtag R$n]] lassign $bb x1 y1 x2 y2 incr y1 2 incr y2 -2 set Lg $DS(AliLg) foreach f $Lf { lassign $f d f c ctr set xd [expr {$x1+int(1.0*$DS(LaneW)/$Lg*$d)}] set xf [expr {$x1+int(1.0*$DS(LaneW)/$Lg*$f)}] if {$ctr} { # INDEL = contour de la zone $Can create rectangle $xd $y1 $xf $y2 -width 6 -outline $c } else { # residue = trace ligne if {$d == $f} { $Can create line $xd $y1 $xd $y2 -fill $c -width 3 } else { $Can create rectangle $xd $y1 $xf $y2 -fill $c -outline $c } } } return } proc SM_TraceFeatureFig {} { global DS TabSF LNOrdali SDG foreach lg [set DS(LG)] n [set DS(NomFG)] { if {$n eq ""} {continue} set Lfaf [list] foreach g $lg { set Ls [set SDG($g)] foreach nom $Ls { if {! [info exists TabSF($nom,Discri)]} { continue } foreach e [set TabSF($nom,Discri)] { DecortiqueUneFeature $e d f c tmp note set cont [regexp {indel} $note] lappend Lfaf [list $d $f $c $cont] } } } set Lfaf [lunique [lsort -integer -index 1 $Lfaf]] SM_TraceDiscriFig $n $Lfaf } return } proc SM_TracePilierFig {i n {fin 0}} { global DS if {! $DS(Contig)} { set DS(Contig) 1 set DS(Dep) $i } elseif {$DS(Dep)+$DS(Contig) == $i} { incr DS(Contig) if {$fin} { set fin 0 } else { return } } set c $DS(Can) set bb [$c bbox [$c find withtag R$n]] lassign $bb x1 y1 x2 y2 set ic1 [expr {int(double($DS(LaneW))/$DS(AliLg)*$DS(Dep))}] set xi1 [expr {$x1+$ic1}] set ic2 [expr {int(double($DS(LaneW))/$DS(AliLg)*($DS(Dep)+$DS(Contig)))}] set xi2 [expr {$x1+$ic2}] if {$xi1 == $xi2} { $c create line $xi1 $y1 $xi1 $y2 -fill DarkSlateGrey } else { $c create rectangle $xi1 $y1 $xi2 $y2 -fill DarkSlateGrey -outline DarkSlateGrey } set DS(Contig) 1 set DS(Dep) $i return } proc SM_TraceProfile {xPos yPos dp fp} { global PrI EFeat Sc set LgLtr $EFeat(WdtL) set HgPxl $EFeat(HgY) set Ccs $EFeat(PAD) set f "Score-Iden" set win $PrI(DisWin) set Lg [set Sc($win,Lg)] array set T [set Sc($win,v)] set min 999. ; set max -999. foreach g $Lg { set gmax [set Sc($win,$g,max)] set gmin [set Sc($win,$g,min)] if {$gmin < $min} {set min $gmin} if {$gmax > $max} {set max $gmax} } foreach g $Lg { if {$g eq "grise" || $g eq "bidon"} {continue} if {$g eq "GroupeToutLeMonde"} { set col black } else { set No [string range $g 5 end] set col [CouleurO2Ordali [CouleurDuGroupe $No]] if {$col eq "yellow"} {set col magenta} } set Lv {} ; set Lx {} set Li [array names T "$f,$g,*"] foreach v $Li { lassign [split $v ,] t m i lappend Lx $i } set Li [lsort -integer $Lx] set idp [lsearch $Li $dp] set ifp [lsearch $Li $fp] set c [expr {$dp-1}] foreach i [lrange $Li $idp $ifp] { while {$c != ($i - 1)} { lappend Lv -999.0 incr c } set v [set T($f,$g,$i)] lappend Lv $v incr c } if {! [llength $Lv]} {continue} set i -1 set Coord {} foreach v [lrange $Lv 1 end] { incr i if {$v == -999.} { if {$Coord == {}} {continue} set x [expr {$xPos+$i*$LgLtr}] #set y [expr {$yPos+$HgPxl}] set y [lindex $Coord 1] #lappend Coord $x $y $Ccs create line $Coord -fill $col -width 2 set Coord {} } else { set v [expr {1.0*($v-$min)/($max-$min)}] if {$Coord == {}} { set x [expr {$xPos+$i*$LgLtr}] #set y [expr {$yPos+$HgPxl}] set y [expr {$yPos + round($HgPxl-$v*$HgPxl)}] lappend Coord $x $y } set x [expr {$xPos+$i*$LgLtr+$LgLtr}] set y [expr {$yPos + round($HgPxl-$v*$HgPxl)}] lappend Coord $x $y } } if {$Coord != {}} { incr i set x [expr {$xPos+$i*$LgLtr-1}] #set y [expr {$yPos+$HgPxl}] set y [lindex $Coord 1] lappend Coord $x $y $Ccs create line $Coord -fill $col -width 2 } } return } proc SM_TraitePfam {n} { if {[regexp {^PROP_} $n]} { set n [string range $n 5 end] } set Li [regexp -inline -indices {_from_} $n] if {$Li != ""} { set i [lindex [lindex $Li 0] 0] set n [string range $n 0 $i-1] } set Id [string range $n 0 6] set tx [string range $n 8 end] return [list $Id $tx] } proc SM_TraiteSw {f} { global SwLookUp SwSeqs set Ll [LesLignesDuFichier $f] catch {unset SwSeqs} catch {unset SwLookUp} set YaSeq 0 set Lacc [list] foreach l $Ll { if {[regexp {^AC } $l]} { regsub -all ";" [string trim $l] "" l regsub -all { +} $l " " l lappend Lacc {*}[split [string range $l 3 end] " "] continue } if {[regexp {^SQ } $l]} { set YaSeq 1 set seq "" continue } if {[regexp {^//} $l]} { # lookup , comme un bourrin ... set prime [lindex $Lacc 0] foreach acc $Lacc { set SwLookUp($acc) $prime } set YaSeq 0 set seq [string map [list "\n" "" " " ""] $seq] set seq [string toupper $seq] foreach acc $Lacc { set SwSeqs($acc) $seq } set Lacc [list] } if {$YaSeq} { append seq [string trim $l] continue } } return } proc SM_Tree {{f ""}} { global Abr Defauts set pre [file rootname $Defauts(FichierXML)] set fdes ${pre}.png StockPosition SelectionneToutesColonnes set Defauts(TreeBoot) 1 set Defauts(TreeNBoot) 500 set AId [CalculeUnArbre] update idletasks set Abr($AId,TypeTree) radial set Abr($AId,BootDone) 1 set Abr($AId,Bootstrap) 1 set Abr($AId,ThresBoot) 400 set Abr($AId,TAff) "Seq Name" set Abr($AId,Phylum) 1 OnReDessineArbre $AId update idletasks PrintCanvas $Abr($AId,PAD) png $fdes update idletasks DetruitArbre $AId exit } proc SM_TriePfam {l} { set l [lsort -index 1 -integer $l] set Lr [list] lassign [lindex $l 0] id1 d1 f1 c1 t1 set Done 0 foreach e [lrange $l 1 end] { if {$Done} { lappend Lr [list $id1 $d1 $f1 $c1 $t1 $s] } else { set Done 1 } lassign $e id2 d2 f2 c2 t2 # inclusion if {$d2 <= $f1} { set s 1 } else { set s 0 } lassign $e id1 d1 f1 c1 t1 } lappend Lr [list $id1 $d1 $f1 $c1 $t1 $s] return $Lr } proc SM_TrieTax {a b} { lassign $a ka la va lassign $b kb lb vb if {$la < $lb} { return 1 } elseif {$la > $lb} { return -1 } else { if {$va > $vb} { return 1 } elseif {$va < $vb} { return -1 } else { return 0 } } } proc SM_Type {} { global TDesSeqnames TDesAccess db set fnm [open noms.txt a] foreach fxml [glob *_recup.xml] { LesDefauts LesDefauts Mode batch set db [FabriqueDeTables [set ::Defauts(TablesDB)]] set Pre [string range $fxml 0 [expr {[string first _ $fxml]-1}]] puts " $Pre :" puts "----" set fnom "${Pre}_new.noms" catch {unset TPosGS} catch {unset TabSF} catch {unset LNOrdali} catch {unset GroupeDeLaSequence} DecortiqueUnXml2 ${Pre}_recup.xml InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF set Ll [LesLignesDuFichier $fnom] foreach l $Ll { lassign [split $l " "] sn acc bid lappend Lsn $sn lappend Lac $acc lappend Lbi $bid } # on compare nom des fichier _recup a _new. # Si _new != _recup, garde _new dans noms.txt RetourneTableau TDesAccess TR foreach n $Lsn a $Lac { set o [set TR($a)] if {$n ne $o} { puts " $o -> $n" set type [string range $n 1 2] puts $fnm "$a nom $n type $type" } } FermeFichier } close $fnm exit } proc SM_UpdateAlignment {f} { global db LOrgs2Add LNOrdali LSOrdali ListePDB LNDG GroupeDeLaSequence TOrgs2Add Sequences # # update existing alignments # - update names/access # - check number of sequences per taxa # - assign seq-names if necessary LesDefauts LesDefauts Mode batch # 1er etape : mise a jour du fichier set pre [string range [file tail $f] 0 [string first "_" [file tail $f]]-1] AuLog @title Système : $pre - fichier $f # Inits Ordali LesDefauts TypeAli "XML" LesDefauts FichierXML $f # Load file DecortiqueUnXml2 $f InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF global {*}[info globals "TD*"] AuLog @text Number of sequences : [llength [array names ::Sequences]] # update access AuLog @title Mise à jour séquence actuelles set Lacc [list] set Lbid [list] set Lsqn [list] # LNOrdali est liste seq-names # cree liste access et enleve les blancs # # Met a jour access pour SMxx et Cme set ToDef [list] foreach n $LNOrdali { if {$n eq "" || $n in $ListePDB} {continue} set acc [set TDesAccess($n)] set bid [set TDesBId($n)] if {[string range $acc 0 3] eq "Cme_"} { lappend ToDef 45157 $acc $Sequences($n) } elseif {[regexp {SM[0-9][0-9]} $acc]} { # mito Homo sapiens lappend ToDef 9606 $acc $Sequences($n) } elseif {$n eq $acc && $n eq $bid} { if {[regexp -nocase {Dani\.reri} $n]} { lappend ToDef 7955 $acc $Sequences($n) } } lappend Lacc $acc lappend Lbid $bid lappend Lsqn $n } if {$ToDef != {} } { set Lres [SM_MAJUnknown $ToDef] foreach {tax acc seq} $Lres {tmp oldAcc tmp} $ToDef { if {$acc eq "NotFound"} { AuLog @begin warning AuLog @text No access found for $oldAcc AuLog @end continue } AuLog @text MAJ : $oldAcc remplacé par $acc set ix [lsearch $Lacc $oldAcc] lset Lacc $ix $acc lset Lbid $ix $acc # remplace access dans tableau set sqn [lindex $Lsqn $ix] set TDesAccess($sqn) $acc } update } # convert access to UniProt access set Luni [Convert2UniProtAcc $Lacc] AuLog @begin table AuLog @title Correspondances Accession - Seqnames AuLog @begin tabular AuLog @titlecols seq-name Access UniProt "" AuLog @typecols T T T T set Lother [list] set Lfail [list] foreach s $Lsqn a $Lacc u $Luni { set good "" if {! [EstUnUniProt $u]} { set good "<====" if {$u eq "DELETED"} { lappend Lfail $a } else { lappend Lother $u } } AuLog @row $s $a $u $good } AuLog @end AuLog @end if {$Lother != {} } { AuLog @begin warning AuLog @text The following access don't have a UniProt counterpart : AuLog @text "$Lother" AuLog @end } if {$Lfail != {} } { AuLog @begin warning AuLog @text DELETED ENTRY FROM UNIPROT : AuLog @text "$Lfail" AuLog @end } # recupere infos sequences # # from UniProt puts -nonewline "Fetching sequences ..." SM_RecupereInfosUniProt $Luni # from RefSeq if {$Lother != {} } { set Ltmp [Convert2RefSeq $Lother] set Lref [list] foreach t $Ltmp { lappend Lref [EnleveVersionDeAccess $t] } set Lsass [list] foreach o $Lother { set found [EnleveVersionDeAccess $o] foreach k [array names TDesAccess] { if {[set TDesAccess($k)] eq "$o"} { set found $k break } } lappend Lsass $found } lappend Lfail {*}[SM_RecupereInfosRefSeq $Lref $Lsass] } # pas refseq pas uniprot # cherche seq identique en blast if {$Lfail != {}} { set Lout [list] set LfoundAcc [list] ; set LfoundSqn [list] foreach acc $Lfail { # seq-name correspondant set ix [lsearch $Lacc $acc] set sqn [lindex $Lsqn $ix] set seqaa [string map {"-" "" "." ""} $Sequences($sqn)] set LgQuery [string length $seqaa] set seq ">$acc\n$seqaa" set Lblast [BlastServiceEBI -p blastp -d uniprotkb -expect 1e-5 -query $seq -nlist 10 -f T -stype protein] if {$Lblast eq ""} { puts "Error while parsing Blast file !" lappend Lout $acc AuLog @begin warning AuLog @text No Blast results with $acc $sqn AuLog @end continue } DecortiqueBlast $Lblast "" "" "" LBbid LBacc LBde "" LBPN LBAli # sauve le blast set bfile [file join Blasts "BlastUniprot_${pre}_$acc"] Sauve $Lblast dans $bfile AuLog @text Query $acc $sqn AuLog @link " Voir le blast " [file join ../ $bfile] AuLog @text "" set bacc [BonAccess [lindex $LBacc 0]] set lgt -1 ; set pid -1 foreach l [lindex $LBAli 0] { set l [string trim $l] if {[string range $l 0 5] eq "Length"} { set lgt [string range $l 7 end] } if {[string range $l 0 9] eq "Identities"} { set id [string first "(" $l] set if [string first ")" $l] set NsurN [string range $l 13 $id-2] set pid [string range $l $id+1 $if-2] } } AuLog @text Lgt Query $LgQuery AuLog @text Lgt $bacc $lgt AuLog @begin tabular AuLog @typecols T R T T AuLog @row $bacc [lindex $LBPN 0] "$pid $NsurN" [lindex $LBde 0] AuLog @end if {$pid != 100} { lappend Lout $acc AuLog @text NOT TAKEN as identity != 100% continue } if {[lindex $LBPN 0] != 0.0} { lappend Lout $acc AuLog @text NOT TAKEN as Expect != 0.0 continue } # integrate the access to access list lappend LfoundAcc $bacc lappend LfoundSqn $sqn lset Lacc $ix $bacc lset Lbid $ix [lindex $LBbid 0] } # if some have been found, retrieve information if {$LfoundAcc != {} } { SM_RecupereInfosUniProt $LfoundAcc $LfoundSqn } if {$Lout != {}} { # nothing, nothing for thses seqs AuLog @begin warning AuLog @text No information available for : AuLog @text "$Lout" AuLog @end } } puts " Done !" # list of taxa Ids set Ltax [list] set Ltid [list] set Lnotid [list] foreach n $LNOrdali { if {$n eq "" || $n in $ListePDB} {continue} set tid $TDesTaxId($n) if {$tid eq ""} { AuLog @text Warning ! No TaxId for $n lappend Lnotid $n continue } set type [string range $n [string first "_" $n]-2 [string first "_" $n]-1] lappend Ttax($tid) $type lappend Ltid $tid lappend Ltax [list $tid $TDesPhylum($n) $TDesOrganismes($n)] } # output set Ltid [lsort -unique $Ltid] set Lrows [list] foreach i [array names Ttax] { set Ln [RepresentantDeTaxId $i] set n [lindex $Ln 0] # no -unique sorting as there may be two 'cy' for example set types [join [lsort $Ttax($i)] -] lappend Lrows [list $i $types $TDesPhylum($n) $TDesOrganismes($n) $Ln] } set Lrows [lsort -index 1 $Lrows] AuLog @title Distribution par organisme AuLog @begin table AuLog @begin tabular AuLog @titlecols "Taxa Id" Types Organism Seq-Names AuLog @typecols I T T T set kgOld "" foreach row $Lrows { lassign $row tx ty kg or ln if {$kg ne $kgOld} { AuLog @row $kg "" "" "" set kgOld $kg } AuLog @row $tx $ty $or $ln } AuLog @end AuLog @end AuLog @separator if {$Lnotid != {} } { foreach n $Lnotid { # if there is no taxid, that means it couldn't fetch # information. So try to find a new id AuLog @text $n [set TDesAccess($n)] } } SauveLAlignement XML "${pre}_up3data.xml" # output log file as HTML set outh [file join HTML ${pre}_update.html] AuLog LOutput HTML $outh FermeFichier return } proc SM_UpdateSystems {{pre ""}} { global LOrgs2Add AuLog @title Updating systems cd /home/moumou/synmito/3Data if {0} { set LOrgs2Add [LesLignesDuFichier eukaTTL.id] #set LOrgs2Add [LesLignesDuFichier toto.id] SM_DataOrgs2Add lappend ::VariablesAuDepart LOrgs2Add TOrgs2Add } if {$pre eq ""} { set Lf [lsort [glob ../3Data/*_verylastfinal.xml]] } else { set Lf ../3Data/${pre}_verylastfinal.xml } AuLog @separator AuLog @subtitle Updating 3Data files foreach f $Lf { set pre [string range [file tail $f] 0 [string first "_" [file tail $f]]-1] AuLog @link " $pre " ./${pre}_update.html } AuLog @separator AuLog LOutput HTML ./HTML/index.html foreach f $Lf { set pre [string range [file tail $f] 0 [string first "_" [file tail $f]]-1] if {[file exists "${pre}_up3data.xml"]} { continue } puts "[DonneDateEtHeure]" AuLog LClean SM_UpdateAlignment $f puts "[DonneDateEtHeure]" } exit return } proc SM_VerifSeqs {{f ""}} { global SMSeqs if {$f eq ""} { set Lrsf [glob *.rsf] } else { set Lrsf $f } foreach InRsf $Lrsf { set Pre [file rootname $InRsf] set fLkp [open "${Pre}.lookup" w] set OutMsf ${Pre}.msf set TfaOut ${Pre}.tfa puts " $Pre :" puts "----" puts "InRsf $InRsf" puts "OutMsf $OutMsf" puts "OutTfa $TfaOut" catch {unset SMSeqs} catch {unset LNOrdali} catch {unset LSOrdali} if {[catch {exec /biolo/clustal/bin/clustalw -infile=$InRsf -convert -outfile=$OutMsf -output=gscope} Msg]} { puts "Error Conversion : $InRsf" puts "$Msg" exit } puts " msf file done ..." set LSOrdali [list] DecortiqueUnMSF $OutMsf LNOrdali SMSeqs foreach n $LNOrdali { lappend LSOrdali [set SMSeqs($n)] } # Nettoie noms exec /biolo/macsim/runbird $Pre puts " runbird done ...\n" SM_TraiteSw ${Pre}.sw lassign [SM_CheckNames $LNOrdali $LSOrdali] Lnw Lsw foreach no $LNOrdali nw $Lnw so $LSOrdali sw $Lsw { puts $fLkp "set Lookup($no) $nw" if {$no ne $nw} { puts " $no -> $nw" set sodgp [string map [list . "" - ""] $so] set swdgp [string map [list . "" - ""] $sw] if {$sodgp ne $swdgp} { puts " --> seqs differentes" } } } # Traite les doublons set Lavirer [list] foreach n $Lnw { set Li [lsearch -all $Lnw $n] if {[llength $Li] > 1} { set avirer {*}[lrange $Li 1 end] puts " $n en doublon, vire $avirer" lappend Lavirer $avirer } } if {[llength $Lavirer]} { set La [lsort -integer -decreasing $Lavirer] foreach i $La { set Lnw [lreplace $Lnw $i $i] set LSOrdali [lreplace $LSOrdali $i $i] } } # ATTENTION !! # On prend les nouveaux noms (Ln) # et les anciennes sequences (LSOrdali) EcritLeTfa $TfaOut $Lnw $LSOrdali file delete -force ${Pre}.tar ${Pre}.sw ${Pre}.msf ${Pre}.daedalus ${Pre}.pdb ${Pre}.ipr close $fLkp puts "" } exit } proc SM_View {args} { global Defauts DS SM_BackFigure SM_TraceAliFig SM_TraceFeatureFig if {$DS(Pfam)} { SM_DrawPfam } return } proc SM_checkdb {{Lf ""}} { if {$Lf eq ""} { set Lf [glob *.ord] } set db root foreach f $Lf { sqlite3 $db $f puts -nonewline "$f ..." flush stdout $db eval {begin transaction} set Lt [$db eval {select tbl_name from sqlite_master}] set c [$db eval {select cacol from objetinit}] set cdef [lindex [lindex [DenombreLaListe $c] 0] 0] # nettoie table set Lnom [$db eval {select nom from pdb}] foreach nom $Lnom { set Lpkp [$db eval {select pk_pdb from pdb where nom = $nom}] if {[llength $Lpkp] == 1} {continue} foreach pk [lrange $Lpkp 1 end] { $db eval {delete from pdb where pk_pdb = $pk} $db eval {delete from chaines where pk_pdb = $pk} $db eval {delete from residues where pk_pdb = $pk} $db eval {delete from atomes where pk_pdb = $pk} foreach t $Lt { if {! [regexp {^obj} $t]} {continue} $db eval "delete from $t where pk_pdb = $pk" } } } foreach t $Lt { if {! [regexp {^obj} $t]} {continue} set Lpk [$db eval "select pk_obj from $t where cacol = '$cdef'"] $db eval "update $t set cacol = 'couldefond' where pk_obj in ([join $Lpk ,])" set Lpk [$db eval "select pk_obj from $t where ribcol = '$cdef'"] $db eval "update $t set ribcol = 'couldefond' where pk_obj in ([join $Lpk ,])" # atoms colors foreach c {red yellow green blue} v {"1. 0. 0." "1. 1. 0." "0. 1. 0." "0. 0. 1."} { set Lpk [$db eval "select pk_obj from $t where atmcol = '$v'"] $db eval "update $t set atmcol = '$c' where pk_obj in ([join $Lpk ,])" } } $db eval {commit} $db close puts " done !" } exit } proc SM_correction {f} { set Ll [LesLignesDuFichier $f] set new [list] set doit 1 foreach l $Ll { if {[regexp {} $l]} { set v [CorrGetItem $l] set doit [EstUnAccessPDB $v] } if {! $doit && [regexp {} $l]} { set v [CorrGetItem $l] incr v 2 set l [CorrSetItem $l $v] } if {! $doit && [regexp {} $l]} { set v [CorrGetItem $l] incr v 2 set l [CorrSetItem $l $v] } lappend new $l } set foo [open $f w] puts $foo [join $new \n] close $foo exit } proc SNduFNgcg {N} { return [SNvsLNgcg $N sn] } proc SNduLNgcg {N} { return [SNvsLNgcg $N sn] } proc SNvsLNgcg {N x} { global RepertoireDuGenome global SNvsLNgcg set N [string toupper $N] if {[info exists SNvsLNgcg($N,$x)]} { return [set SNvsLNgcg($N,$x)] } if {[info exists SNvsLNgcg("EstCharge")]} { return "" } set LesHeaders {} set FichierDesHeaders "$RepertoireDuGenome/banques/gcgheaders" if {[file exists $FichierDesHeaders]} { set LesHeaders [LesLignesDuFichier $FichierDesHeaders] } else { set LesFichiersHeader [glob -nocomplain "/genome/*/*.header"] if {$LesFichiersHeader!={}} { foreach FichierHeader [glob -nocomplain "/genome/*/*.header"] { set Header [string toupper [PremiereLigneDuFichier $FichierHeader]] lappend LesHeaders $Header } if {[OuiOuNon "Do I create the file $FichierDesHeaders ?"]} { SauveLesLignes $LesHeaders dans $FichierDesHeaders } } } foreach Header $LesHeaders { set Header [string toupper $Header] set F [StringApres "NAME:" dans $Header] set L [StringApres "LN:" dans $Header] set S [StringApres "SN:" dans $Header] lappend SNvsLNgcg($F,sn) $S lappend SNvsLNgcg($F,ln) $L set SNvsLNgcg($L,fn) $F set SNvsLNgcg($S,fn) $F set SNvsLNgcg($L,sn) $S set SNvsLNgcg($S,ln) $L } set SNvsLNgcg("EstCharge") 1 return [SNvsLNgcg $N $x] } proc SP {{Menage ""} {Test ""}} { #rR Attention InfoPubmed fait une mémorisation en fonction du MD5 de LesPmids package require tdom set Test [string equal -nocase $Test "Test"] if {$Test} { set LesT [SurveillancePubmed GetResult] set LesA [SurveillancePubmed GetResult AllFields] set LesTuA [ListsUnion $LesT $LesA] set LesTiA [ListsIntersection $LesT $LesA] set LesTnA [ListsComplement $LesT $LesA] set LesAnT [ListsComplement $LesA $LesT] # set LesPmids [concat [lrange $LesAnT 0 5] [lrange $LesTiA 0 5]] set LesPmids [lrange $LesA 0 end] set LesDejaVu [SqlExecForDatabase MiSynpat "select pmid from biblio" "GetList"] foreach L [list LesTuA LesTiA LesTnA LesAnT LesDejaVu] { Espionne "$L [llength [set $L]]" } } else { set LesPmids [SqlExecForDatabase MiSynPat "select pmid from biblio where accepted=-1 OR accepted=2" "GetList"] } set Menage [string equal -nocase $Menage "Menage"] set LeH {} lappend LeH "" lappend LeH "" lappend LeH " " lappend LeH " " lappend LeH " " lappend LeH " " lappend LeH "
    " lappend LeH "
    " if {$Test} { lappend LeH "Bonjour Marie.
    " lappend LeH "A bientôt :)
    " lappend LeH "         Raymond" lappend LeH "
    " } else { lappend LeH "Bonjour.
    " lappend LeH "Cette page affiche en clair tous les pmids à traiter." lappend LeH "A bientôt :)
    " lappend LeH "         Raymond" lappend LeH "" } set NbNew 0 if {0 && $Test} { set TexteXml [eSummaryREST pubmed $LesPmids "GetXml"] while {[set Xml [ValeurDeLaBalise "DocSum" TexteXml]]!=""} { set Pmid "" regexp {([0-9]+)} $Xml Match Pmid Espionne $Pmid if {[regexp 27625683 $Xml]} { Espionne $Xml } if {[regexp {Kars[ \,]*Turkey} $Xml Match]} { Espionne "$Pmid $Match"; set Saute($Pmid) 1 ; continue } } } if {0 && $Test} { set LesKarsTurkey [split [ContenuDuFichier "/home/ripp/msp/KarsTurkey.txt"] "\n "] foreach Pmid $LesKarsTurkey { set Saute($Pmid) 1 } } foreach Pmid $LesPmids { Espionne $Pmid if {[info exists Saute($Pmid)] } { continue } if {$Menage} { set Xml [ContenuDuFichier "https://www.ncbi.nlm.nih.gov/pubmed/$Pmid/&format=text?report=xml&format=text"] #Espionne $Xml if {[regexp {Kars[ \,]*TR} $Xml Match]} { Espionne "$Pmid $Match"; set Saute($Pmid) 1 ; continue } if {[regexp {Kars[ \,]*Turkey} $Xml Match]} { Espionne "$Pmid $Match"; set Saute($Pmid) 1 ; continue } if {[regexp {Kafkas[^\n]+Kars} $Xml Match]} { Espionne "$Pmid $Match"; set Saute($Pmid) 1 ; continue } if {[regexp {Hospital[^\n]+Kars} $Xml Match]} { Espionne "$Pmid $Match"; set Saute($Pmid) 1 ; continue } if {[regexp {LastName[^\n]+Kars} $Xml Match]} { Espionne "$Pmid $Match"; set Saute($Pmid) 1 ; continue } if {[regexp {LastName[^\n]+Gars} $Xml Match]} { Espionne "$Pmid $Match"; set Saute($Pmid) 1 ; continue } } if {[info exists Saute($Pmid)] } { continue } set DejaVu "" set ColorDejaVu "red" set Origin "" set ColorOrigin "green" if {$Test} { if {[lsearch $LesDejaVu $Pmid]<0} { set DejaVu "Is not yet in Database" set ColorDejaVu "red" } else { set DejaVu "Is in Database" set ColorDejaVu "green" continue } if {[lsearch $LesT $Pmid]<0} { set Origin "Query in Title/Abstract (should be in the database)" set ColorOrigin "green" } else { set Origin "Query in All Fields" set ColorOrigin "red" } } set Title [InfoPubmed $LesPmids $Pmid Title] set Abstract [InfoPubmed $LesPmids $Pmid Abstract] regsub -all "\n" $Abstract "
    \n" Abstract lappend LeH "
    " lappend LeH "
    " lappend LeH "
    $Pmid $Origin $DejaVu" lappend LeH "
    " lappend LeH "

    $Title

    " lappend LeH $Abstract lappend LeH "" incr NbNew } Espionne $NbNew lappend LeH "
    " lappend LeH " " lappend LeH "" set Html [join $LeH "\n"] set Query [SurveillancePubmed GetQuery] foreach {Bidon Hit } [split $Query "\""] { if {[regexp {^[0-9]+$} $Hit]} { continue } if { ! [regexp -nocase {^[a-z0-9]+$} $Hit]} { continue } lappend LesHits $Hit } Espionne $LesHits foreach Hit $LesHits { regsub -nocase -all $Hit $Html "&" Html } regsub -nocase -all mito $Html "&" Html regsub -nocase -all trna $Html "&" Html regsub -nocase -all synthetase $Html "&" Html if {$Menage} { return "" } return $Html } proc SProut {} { global ListePDB mol Rad pgl LesVecs ListeTypesDeFeatures StrucAVoir set StrucAVoir {} set ListeTypesDeFeatures {} set ListePDB {} set LesVecs {} #set mol "1c0a" #set mol "1ile" #set chn A #Structure create $mol #$mol new "1ile.pdb" $chn Initialisation set Rad 10.0 set pgl(Rad) $Rad set pgl(backclip) -10. set pgl(frontclip) 20. set pgl(xc) 0. set pgl(yc) 0. set pgl(zc) 0. set pgl(xCen) $pgl(xc) set pgl(yCen) $pgl(yc) set pgl(zCen) $pgl(zc) set pgl(eyeX) 0.0 set pgl(eyeY) 0.0 set pgl(eyeZ) 15.0 AfficheFenetreOpengl $pgl(wogl) postredisplay return } proc S_VV {u op v {Init 0.}} { #JeMeSignale set w $Init switch $op { "+" { foreach e $u f $v { set w [expr {$w + ($e + $f)}] } } "-" { foreach e $u f $v { set w [expr {$w + ($e-$f)}] } } "*" { foreach e $u f $v { set w [expr {$w + ($e * $f)}] } } "/" { foreach e $u f $v { set w [expr {$w + ($e/$f)}] } } } return $w } proc S_deterM {M} { if {[IsScalar_M $M]} { return [S_fromM $M 0 0] } set DeterM 0.0 set J 0 set PM 1 foreach X [V_fromM $M 0] { set P [M_Mwithout $M 0 $J] set DeterP [S_deterM $P] set DeterM [expr {$DeterM + $PM * $X * $DeterP}] set PM [expr {-$PM}] incr J } return $DeterM } proc S_fromM {M {i 0} {j 0}} { return [S_fromV [V_fromM $M $i] $j] } proc S_fromV {V i} { return [lindex $V $i] } proc S_nV {u} { return [expr {sqrt([S_VV $u * $u])}] } proc Sablier {{DureeEnMilliSec ""}} { global DateDeLaFinDuSablier set TempsActuel [clock clicks -milliseconds] if {$DureeEnMilliSec != ""} { set DateDeLaFinDuSablier [expr $TempsActuel + $DureeEnMilliSec] set DureeEnMilliSec "" } if {$DureeEnMilliSec == "" && [info exists DateDeLaFinDuSablier]} { if {$TempsActuel < $DateDeLaFinDuSablier} {return 1} } return 0 } proc SafeAcneForString1 {} { #avec le nb de cond ou le gn est perturbe set LesGnAll [InterrogeCiblesSafeAcne ListOf Gn] set LesLignesAll [list "#Gn\tQueryColor"] foreach Gn $LesGnAll { set nbCond [llength [InterrogeCiblesSafeAcne $Gn LesCond]] lappend LesLignesAll "$Gn\t$nbCond" } SauveLesLignes $LesLignesAll dans "/genomics/link/SafeAcne/STRING/InputAll" set LesLignesCond1 [list "#Gn\tQueryColor"] set LesGnCond1 [InterrogeCiblesSafeAcne Condition_1_FC_sign LesGn] foreach GnCond1 $LesGnCond1 { set nbCond [llength [InterrogeCiblesSafeAcne $GnCond1 LesCond]] lappend LesLignesCond1 "$GnCond1\t$nbCond" } SauveLesLignes $LesLignesCond1 dans "/genomics/link/SafeAcne/STRING/InputCond1" } proc SafeAcneForString2 {} { #avec les cond ou le gn est perturbe set NbCondTotal [llength [InterrogeCiblesSafeAcne ListOf Cond]] set LaLigneTeteAll "#Gn" for {set i 1} {$i <= $NbCondTotal} {incr i} { append LaLigneTeteAll "\tQueryColor${i}" } set LesLignesAll [list $LaLigneTeteAll] set LesLignesCond1 [list $LaLigneTeteAll] set LesGnAll [InterrogeCiblesSafeAcne ListOf Gn] foreach Gn $LesGnAll { set LaLigneAll [list $Gn] set LesCond {} set LesCond [InterrogeCiblesSafeAcne $Gn LesCond] for {set i 1} {$i <= $NbCondTotal} {incr i} { set trouve 0 foreach Cond $LesCond { set NumCond [lindex [split $Cond "_"] 1] if {$i == $NumCond} {set trouve 1} } if {$trouve} {lappend LaLigneAll $i} else {lappend LaLigneAll ""} } lappend LesLignesAll [join $LaLigneAll "\t"] } SauveLesLignes $LesLignesAll dans "/genomics/link/SafeAcne/STRING/InputAll_2" set LesGnCond1 [InterrogeCiblesSafeAcne "Condition_1_FC_sign" LesGn] foreach GnCond1 $LesGnCond1 { set LaLigneCond1 [list $GnCond1] set LesCond {} set LesCond [InterrogeCiblesSafeAcne $GnCond1 LesCond] for {set i 1} {$i <= $NbCondTotal} {incr i} { set trouve 0 foreach Cond $LesCond { set NumCond [lindex [split $Cond "_"] 1] if {$i == $NumCond} {set trouve 1} } if {$trouve} {lappend LaLigneCond1 $i} else {lappend LaLigneCond1 ""} } lappend LesLignesCond1 [join $LaLigneCond1 "\t"] } SauveLesLignes $LesLignesCond1 dans "/genomics/link/SafeAcne/STRING/InputCond1_2" } proc SameOrganism {Organisme Famille {SansGlossaire ""}} { if {[llength $Famille]>1 && [regexp " " [lindex $Famille 0]]} { set Famille [join $Famille ":"] } Espionne $Famille if {[regexp {(\||\&)} $Organisme Separateur]} { set AuMoinsUN 0 foreach O [split $Organisme $Separateur] { if {$O==""} { continue } set Courant [SameOrganism $O $Famille $SansGlossaire] if { $Courant && $Separateur=="|"} { return 1 } if { ! $Courant && $Separateur=="&"} { return 0 } set AuMoinsUn 1 } return $AuMoinsUn } if {$SansGlossaire!="SansGlossaire"} { set Organisme [Glossaire $Organisme "Complet"] } return [regexp "\:$Organisme\:" ":$Famille:"] } proc SampleTOL {args} { global db Tx TaxRoot LModelId LSelectableId LUserId LwarningHTML if {[llength $args] == 0 || [lsearch -nocase $args "help"] != -1} { HelpSampleTOL return } unset -nocomplain db set db [InitTaxDB] package require http if {$args ne "gui"} { # bad number of args if { ([llength $args] % 2) > 0} { puts "Bad number of arguments" HelpSampleTOL return 0 } } if {! [CheckSampleTOLParameters {*}$args]} { puts "bad checking return" return "" } FaireAttendre "Please wait ...\nSampling Tree of Life ..." puts "[DonneDateEtHeure]" TaxDB2Memory puts "TaxRoot $::TaxRoot TaxDB2Mem" # check User IDs if given CheckUserId # Define who is a Gold genome depending. # Do we use 'all' or 'representative' set Tx(Rank,0) "" set LSelectableId [DefineSelectableGenomes] CountCompleteGenomesPerNode set Tx(hasSel,0) 1 set Tx(hasSel,$TaxRoot) 1 foreach id $LSelectableId { set Tx(isGold,$id) 1 set Tx(hasSel,$id) 1 } DefineChildsWithGold # count cumulated number of childs at each node CumulChild set Tx(isInt,$TaxRoot) 0 set Tx(NbInt,$TaxRoot) 0 DefineInternalNodes $TaxRoot 0 foreach n $LSelectableId { AssignNbInternal $n } set nbT [set Tx(-ntaxa)] # repartition selon les enfants, si ils ont des gold puts "\nRepartition ..." set Lkeep $LUserId if {$Tx(-modelsin)} { foreach n $LModelId { if {$TaxRoot in [DonneGenealogieMem $n]} { lappend Lkeep $n } } } set Lkeep [lsort -unique -integer $Lkeep] foreach n $Lkeep { foreach a [DonneGenealogieMem $n] { incr Tx(NbKeep,$a) } } set repart [RepartiGold $TaxRoot $nbT] puts "Repartis : $repart" puts "\nSelection ..." FaitTaxSelection $db close unset -nocomplain db update FaireLaSuite DefineNodeState if {$args eq "gui"} { GUIViewSampleTOL } if {$Tx(-output) eq "html" || $Tx(-output) eq "terminal"} { set out [DrawTaxoHTML] puts "write file" set tmpFile "tmp_$Tx(-fileOut)" file delete $tmpFile file delete $Tx(-fileOut) set o [open $tmpFile w] puts $o $out close $o file rename $tmpFile $Tx(-fileOut) file attribute $Tx(-fileOut) -permissions 0664 if {$Tx(-output) eq "terminal"} { file delete out.tax set o [open out.tax w] puts $o [join $::LTaxSelected \n] close $o } if {$Tx(-output) eq "html"} { file delete out_html.tax set o [open out_html.tax w] puts $o [join $::LTaxSelected \n] close $o } exit return 1 } else { return $::LTaxSelected } } proc SampleVdW {} { global Chm SpS set Offset 0 set cof [set ::Defauts(Sampling)] foreach e [array names Chm *,vdw] { if {[set Chm($e)] == 0} {continue} lassign [split $e ,] n tmp set r [expr {int([set Chm($e)]*$cof+0.5)}] for {set i [expr {-1*$r}]} {$i <= $r} {incr i} { for {set j [expr {-1*$r}]} {$j <= $r} {incr j} { for {set k [expr {-1*$r}]} {$k <= $r} {incr k} { if {($i*$i+$j*$j+$k*$k) <= $r*$r} { lappend SpS($n) [list $i $j $k] if {$i > $Offset} {set Offset $i} if {$j > $Offset} {set Offset $j} if {$k > $Offset} {set Offset $k} } } } } } set SpS(Offset) $Offset return } proc SampledOrganism {Genre {Espece ""}} { global SampledOrganism global RepertoireDuGenome if {$Espece==""} { set O $Genre } else { set O "$Genre $Espece" } set Orga [Glossaire $O Complet] if {$Orga==""} { set Orga $O } if {[info exists SampledOrganism($Orga)]} { return [set SampledOrganism($Orga)] } if {[info exists SampledOrganism ]} { return [set SampledOrganism("NotFound")] } set Fichier "$RepertoireDuGenome/fiches/sampled_organism" if {[file exists $Fichier]} { set SampledOrganism(LaListeMerci) {} foreach Ligne [LesLignesDuFichier $Fichier] { set OrgaLu [string trim $Ligne] lappend SampledOrganism(LaListeMerci) $OrgaLu set SampledOrganism($OrgaLu) 1 } set SampledOrganism("NotFound") 0 return [SampledOrganism $O] } set LaFamille {} while {[OuiOuNon "Do You want to define 'Sampled Organisms' ?"]} { if {[OuiOuNon "Do You want to copy or link an other 'SampledOrganism' file ?"]} { set Autre [ButineArborescence "All" "$RepertoireDuGenome/.."] if {$Autre==""} { continue } if {[OuiOuNon "Do I link \n$Autre\n to \n$Fichier\n ?"]} { exec ln -s $Autre $Fichier } elseif {[OuiOuNon "Do I copy it ?"]} { File copy $Autre $Fichier } return [SampledOrganism $O] } set LaFamille [ChoixDesPresents [FamiliarOrganism LaListeMerci]] set Other "" while {[OuiOuNon "Do You want to add other organisms to the sampled organisms list ?" 0]} { set Other [Entre $Other] set BonOther [Glossaire $Other Complet] if {$BonOther==""} { FaireLire "I don't know the organism $Other" } else { lappend LaFamille $BonOther } } if {[OuiOuNon "[join $LaFamille "\n"]\n\nOK ?"]} { break } } if {$LaFamille=={}} { if { ! [OuiOuNon "Do You want to save 'Sampled Organisms' as an empty list ?"]} { set SampledOrganism("NotFound") 0 set SampledOrganism(LaListeMerci) {} return [SampledOrganism $O] } } SauveLesLignes $LaFamille dans $Fichier return [SampledOrganism $O] } proc SansAccent {Texte} { if {[catch {set R [exec tcsh -c "setenv LANG utf-8 ; echo '$Texte' | uni2ascii -q -B"]} Error]} { #puts "Error $Error pout '$Texte'" return $Texte } else { return $R } } proc SansAmbiguite {LesNouveaux} { foreach Nouveau $LesNouveaux { set Numero 1 while {[info exists DejaVu($Nouveau)]} { incr Numero if {$Numero<10} { regsub -nocase {[a-z0-9]$} $Nouveau $Numero Nouveau } else { regsub -nocase {[a-z0-9][a-z0-9]$} $Nouveau $Numero Nouveau } } set DejaVu($Nouveau) 1 lappend LesNouveauxNouveaux $Nouveau } return $LesNouveauxNouveaux } proc SansBalises {Texte} { set LeBon {} foreach Ligne [split $Texte "\n"] { if {[regexp "^<" $Ligne]} { continue } lappend LeBon $Ligne } return [join $LeBon "\n"] } proc SansEST {FichierDesPABs FichierEST} { set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set n 0 foreach Nom $L { set EST [InterrogeSelectedEST $FichierEST Nom $Nom LesAccess] if {$EST==""} {incr n} } return $n } proc SansESTs {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] foreach Nom $Liste { set LesCops [LesMeilleursCopainsDuBlast $Nom "blastnest"] if {$LesCops=={} ||[lindex $LesCops 0]=="File not yet available" ||[lindex $LesCops 0]=="No value" ||[lindex $LesCops 0]=="No hit"} { set Loc [PolyLocalise $Nom] lappend LesSans "$Nom $Loc" } } return $LesSans } proc SansLesDoublons {Fichier} { #fichier allprot (toutes les sequences au format fasta a la suite) sans les doublons #nouveau gscope procure set Proteine pppp set ListeTriee [TriListeCorrespondance $Fichier] foreach Ligne $ListeTriee { scan $Ligne "%s %s %s" old new prot if {$prot!=$Proteine} { #lappend LaListeSansDoublons $Ligne set Proteine $prot } else { lappend LesDoubles ">$old Protein $prot" continue } } set VuDoublon 0 foreach Doublon $LesDoubles { set Vu($Doublon) 1 } foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/allprot"] { if {[regexp "^>" $Ligne]} { scan $Ligne "%s %s %s" old prot acc set D "$old $prot $acc" if {![info exists Vu($D)]} { set Vu($Ligne) 1 set AConserver 1 lappend LaNouvelleListe $Ligne } else { set AConserver 0 lappend LesDoublons $Ligne continue } } elseif {$AConserver==1} { lappend LaNouvelleListe $Ligne } else {continue} } return $LaNouvelleListe } proc SansNarcisse {} { foreach Nom [ListeDesPABs] { if {[Narcisse $Nom]==""} { Espionne $Nom } set FichierBlastP "[RepertoireDuGenome]/blastp/$Nom" if { ! [file exists $FichierBlastP]} { Espionne "$Nom Sans Blastp" } # AfficheFichier $FichierBlastP "AvecSegAlignement" } } proc SansProteine {FichierDesPABs} { set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set n 0 foreach Nom $L { set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {![file exists $FichierProttfa]} {incr n } } return $n } proc SansRien {Nom} { set ListeNo0 {} set ListeNo1 {} set FichierLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" if {![file exists $FichierLoc]} {return "$FichierLoc doesn t exist"} set FMRM "[RepertoireDuGenome]/nucmask/$Nom.mrm" if {![file exists $FMRM]} {return "$Nom -> pas de nucmask!"} set SeqMRM [QueLaSequenceDuFichierTFA $FMRM] regsub -all -nocase "N" $SeqMRM "" SeqSansNMRM set LApresMRM [string length $SeqSansNMRM] if {$LApresMRM>=10} { #Espionne $Nom #la loc des seq DD est tellement difficile qu'il ne faut pas en tenir compte! #(polyloc) sauf si elle est nulle. Voir proc CompteLesSequencesDDBizarres set Loc [InterrogeLocalisation $FichierLoc Nom $Nom] set AccessmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "mRNA" Access] set AccessProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "Protein" Access] set FichierBlastnest "[RepertoireDuGenome]/blastnest-human/$Nom" if {$Loc==""} {set L 0} else {set L 1} if {$AccessmRNAHuman==""} {set R 0} else {set R 1} if {$AccessProtHuman==""} {set P 0} else {set P 1} if {$R==0 && $P==0} { Espionne coucou if {[file exists $FichierBlastnest]} { set Test [MatchWithESTsOuiOuNon $Nom $FichierBlastnest] Espionne $Test if {$Test==0 && $L==1} { lappend ListeNo1 $Nom #AppendAuFichier "[RepertoireDuGenome]/locmaisrien75" $Nom Espionne coucou1 } if {$Test==0 && $L==0} { lappend ListeNo0 $Nom #AppendAuFichier "[RepertoireDuGenome]/seqsansrien75" $Nom } #if {$Test==1} {lappend ListeNoAvecEST $Nom} } else { if {$L==1} { lappend ListeNo1 $Nom #AppendAuFichier "[RepertoireDuGenome]/locmaisrien75" $Nom } if {$L==0} { lappend ListeNo0 $Nom #AppendAuFichier "[RepertoireDuGenome]/seqsansrien75" $Nom } } } } #Espionne "avec est: [llength $ListeNoAvecEST]" Espionne "sans rien:[llength $ListeNo0]" Espionne "loc mais rien:[llength $ListeNo1]" return "" } proc SansTag {FichierMsf FichierSortie} { set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a regsub ">SPTNEW_" [string toupper $a] ">" a regsub ">SPTNEW:" [string toupper $a] ">" a regsub ">SPT_" [string toupper $a] ">" a regsub ">SPT:" [string toupper $a] ">" a regsub ">SW_" [string toupper $a] ">" a regsub ">SW:" [string toupper $a] ">" a lappend TFAFin $a } else { regsub -all {\.} $Ligne "-" Ligne lappend TFAFin $Ligne } } EcritFichier $TFAFin "essai.temp" exec clustalw "essai.temp" -convert -output=gcg -outfile=$FichierSortie } proc Sature {Amour {UnPeu ""} {Passion ""} {Format ""} {Hue ""} {Brightness ""}} { #rR réécrit 2014/11/17 #rR Amour va de 0 à 1 et de ce fait correspondra à Saturation de UnPeu à Passion if {$Hue ==""} { set Hue 0.5 } if {$Brightness==""} { set Brightness 1. } if {$UnPeu ==""} { set UnPeu 0.1 } if {$Passion ==""} { set Passion 0.6 } if {$Format ==""} { set Format "hexa" } set Saturation [expr $UnPeu + ($Passion-$UnPeu)*$Amour] set rgb [hsbToRgb $Hue $Saturation $Brighness] return [CouleurFormat $rgb $Format] } proc SautParalogue {K X Y} { set Boite [BoiteDuCourant $K $X $Y] if { $Boite == "" } { return $Boite} set Nom [Box $Boite nom] set LesParas [ParaloguesDe $Nom] if { $LesParas == {} } { return "" } foreach Para LesParas { set DE [DefinitionApproximative $Para] lappend LesBeauxParas "$Para $DE" } set Para [ChoixParmi $LesParas $LesBeauxParas] if { $Para == "" } { return "" } RepereBox "Nom: $Para" $K return $Para } proc SauteSurCible {K x y} { global RepertoireDuGenome global yDuContig set Id [$K find withtag current] set QueryFraction [lindex [$K gettags $Id] 0] scan $QueryFraction "%s %s" Contig Fraction set CibleEtc [lindex [$K gettags $Id] 1] scan $CibleEtc "%s" Cible set y [set yDuContig($Cible)] $K yview moveto $y $K yview scroll -5 units } proc Sauve {Texte dans Fichier} { set f [open $Fichier w] if { $Texte != "" } { puts $f $Texte } close $f if {[file owned $Fichier]} { file attribute $Fichier -permissions 0664 } return $Fichier } proc SauveBilanHDACroises {LesFamilles LesOrgCibles aBilan {Fichier ""}} { upvar $aBilan Bilan global RepertoireDuGenome set FichierDefaut "$RepertoireDuGenome/fiches/bilan_hda_croises" if {$Fichier=="AskForFile"} { set Fichier [FichierPourSaveAs $FichierDefaut] if {$Fichier==""} { return "" } } if {$Fichier==""} { set Fichier $FichierDefaut } set Sortie [list] foreach Fam $LesFamilles { foreach Org $LesOrgCibles { lappend Sortie "$Fam $Org [join [set Bilan($Fam,$Org)] " "]" } } return [SauveLesLignes $Sortie dans $Fichier] } proc SauveBilanHDACroisesDuCanvas {K {Fichier ""}} { global MemoBilanHDACroises set LesXs [set MemoBilanHDACroises($K,LesXs)] set LesYs [set MemoBilanHDACroises($K,LesYs)] foreach {C V} [array get MemoBilanHDACroises] { regsub "$K," $C "" C set T($C) $V } return [SauveBilanHDACroises $LesXs $LesYs T $Fichier] } proc SauveConservation {} { global TabSF ListeTypesDeFeatures ScoreMeth Cons ConsMeth if {$Cons(ConsCou) eq "None"} {return} if {[regexp {^Cons\-} $Cons(ConsCou)]} {return} set ftold [lindex $Cons(ConsCou) 0] # check if feature to be saved already exists set ftnew [string range $ftold 3 end] set ifin [string last "_" $ftnew] if {$ifin != -1} { set ext [string range $ftnew [string last "_" $ftnew]+1 end] if {[regexp {[0-9]*} $ext]} { set ftnew [string range $ftnew 0 [string last "_" $ftnew]-1] } } set if 0 set iftv [lsearch -all -regexp $ListeTypesDeFeatures "^$ftnew"] if {$iftv ne ""} { set if [llength $iftv] } # replace tmp feat by normal one set ftrad $ftnew if {$if} { set ftnew "${ftnew}_$if" } # replace in TabSF set Lf [array names TabSF "*,$ftold"] foreach f $Lf { regsub ",$ftold" $f ",$ftnew" nf set TabSF($nf) [set TabSF($f)] } set Lf [array names ScoreMeth "${ftold},*"] foreach f $Lf { regsub "$ftold" $f "$ftnew" nf set ScoreMeth($nf) [set ScoreMeth($f)] } array unset ScoreMeth "${ftold},*" set ConsMeth(${nf},Title) [set Cons(Title)] DetruitLaFeature $ftold lappend ListeTypesDeFeatures $ftnew set i [lsearch -regexp $Cons(ListeCons) "$ftold"] set titre [lrange [lindex $Cons(ListeCons) $i] 1 end] set newf "$ftnew [join $titre]" set Cons(Title) "" set Cons(ConsCou) $ftnew if {[info exists Cons(ComboSel)] && $Cons(ComboSel) ne ""} { lset Cons(ListeCons) $i $newf $Cons(ComboSel) configure -values $Cons(ListeCons) $Cons(ComboSel) current $i } VueEditee 1 puts [array names TabSF "*tmp*"] puts [array names ScoreMeth "*tmp*"] puts [array names consMeth "*tmp*"] return } proc SauveContenuDeLaListeDuPanelFindProtein {KListBox {AllOrJustIDOrJustTFA All}} { set LesLignes [$KListBox get 0 end] if {$LesLignes == {}} {return} set FichierOUT [SauveLeFichierSous [ProgSourceDir]] if {$FichierOUT == ""} {return} Espionne $FichierOUT if {[string equal -nocase $AllOrJustIDOrJustTFA "All"]} { Sauve [join $LesLignes "\n"] dans $FichierOUT return } set LesID {} foreach Ligne $LesLignes { if {![regexp -nocase "^ID " $Ligne]} {continue} if {[info exists ID]} {unset ID} scan $Ligne "%s %s" Ent ID if {![info exists ID]} {continue} lappend LesID $ID } if {$LesID != {} && [string equal -nocase $AllOrJustIDOrJustTFA "JustID"]} { Sauve [join [lsort -unique $LesID] "\n"] dans $FichierOUT return } set LesSeqTFAs [LesSeqTFAsDesBanqueId $LesID "protein"] if {$LesSeqTFAs == {}} {return} Sauve [join $LesSeqTFAs "\n"] dans $FichierOUT return } proc SauveDataClustering {Ld} { set o [open clus.dat w] foreach l $Ld { puts $o $l } close $o return } proc SauveFirstAlignment {fichier} { if { ! [file exists "[RepertoireDuGenome]/Alignment"]} { File mkdir [RepertoireDuGenome]/Alignment } exec cp $fichier [RepertoireDuGenome]/Alignment } proc SauveFirstAlignmentPourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/msf} set r [glob -directory $directory *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } SauveFirstAlignment $fichier FinPasTouche $f } } proc SauveGscoperso {} { global FichierGscopePerso set RepGscoperso [file dirname $FichierGscopePerso] if {![file exists $RepGscoperso]} {File mkdir $RepGscoperso} set RepBackup1 "$RepGscoperso/backup" if {![file exists $RepBackup1]} {File mkdir $RepBackup1} regsub -nocase {\/[0-9a-z]*$} $RepGscoperso "" RepHome set RepBackup2 "$RepHome/BackUpGscope" if {![file exists $RepBackup2]} {File mkdir $RepBackup2} set Date [clock format [clock seconds] -format "%Y%m%d_%HH%M"] set RepBackup1 "$RepBackup1/$Date" if {![file exists $RepBackup1]} {File mkdir $RepBackup1} set RepBackup2 "$RepBackup2/$Date" if {![file exists $RepBackup2]} {File mkdir $RepBackup2} foreach File [glob -nocomplain "$RepGscoperso/*.*"] { File copy -force $File $RepBackup1 File copy -force $File $RepBackup2 Espionne "$File save in :\n\t$RepBackup1\n\t$RepBackup2" } Espionne "Sauvegarde effectuee" return "" } proc SauveLAlignement {{SauveEn ""} {Out ""}} { global AliFilOut OutputFormat Defauts # variables AliFilOut and OutputFormat are not initialized # at startup. if {[TypeAli] eq "pasdali"} {return} if {[QuelMode] ne "seqlab"} { if {[VueEditee]} { if {[ModeI]} { set chx [tk_dialog .chx "Warning" "Warning !\nThis alignment has not been saved !" "" 0 "Overwrite it" "Create a new one" "Cancel"] if {$chx < 2} { SauveLeMac $chx } else { return } } else { # si mode batch, on overwrite SauveLeMac 0 } } VueEditee 0 } # Gere type format : selon save/save as # cas "save" -> OUt est "" if {$Out eq "JLeSauveAs"} { set OutputFormat $SauveEn } else { if {! [info exists OutputFormat]} { set OutputFormat [TypeAli] } if {[QuelMode] ne "seqlab"} { # sqlite s'auto-sauve ... # on remet a jour le backup if {[TypeAli] eq "ORD"} { FaireAttendre "Please wait ...\nSaving database file ..." if {$Defauts(FichierOBK) eq ""} { file tempfile Defauts(FichierOBK) } $::db eval {vacuum} $::db backup $Defauts(FichierOBK) FaireLaSuite return } } } # gere cas mode seqlab. # ne peut pas sauver en ORD/XML/RSF if {[QuelMode] eq "seqlab"} { if {$OutputFormat in {ORD XML RSF}} { FaireLire "In Editor Mode, you can only save the alignment in ALN/TFA/MSF format.\nLeave the Editor to save in other formats" return } } # Gere outname : save "" et "save as" demande if {! [info exists AliFilOut]} { set v Fichier[TypeAli] set AliFilOut [set Defauts($v)] } if {$Out eq "JLeSauveAs"} { set FicDef "[file rootname $AliFilOut].[string tolower $OutputFormat]" if {[ModeI]} { set outfile [DemandeEtSauveFichier $SauveEn 1 $FicDef] if {$outfile eq ""} {return} } else { set outfile $FicDef } set AliFilOut $outfile } elseif {$Out ne "JLeSauveAs" && $Out ne ""} { set AliFilOut $Out } switch $OutputFormat { "FenetreMSF" {CreeLAlignementDeLaFenetre $AliFileOut} "MSF" {CreeLeMSF $AliFilOut} "XML" {CreeLeXml $AliFilOut} "TFA" {CreeLeTfa $AliFilOut} "ALN" {CreeLeAln $AliFilOut} "ORD" {CreeLeOrd $AliFilOut} } return } proc SauveLaDemarcation {K {NomDuFichier ""}} { set LesNoms [Demarcation "lv" $K] set LesXs [Demarcation "av" $K] set LesEtiq [Demarcation "ev" $K] if {$NomDuFichier == ""} { set NomDuFichier [FichierPourSaveAs] } if {$NomDuFichier == ""} { return "" } foreach Nom $LesNoms X $LesXs Etiq $LesEtiq { lappend Sortie "$Nom $X $Etiq" } lappend $Sortie "#Don't remove this line it marks the end." return [SauveLesLignes $Sortie dans $NomDuFichier] } proc SauveLeCanva {K ListeDeTags {Fichier ""}} { Wup "Retourne le nom du fichier de sauvegarde. String vide si rien n'est sauve." set LesCommandesDeCreation {} foreach Tag $ListeDeTags { set LesIds [$K find withtag $Tag] foreach Id $LesIds { if {[info exists DejaVu($Id]} { continue } set DejaVu($Id) 1 set CommandeDeCreation "create [$K type $Id] [join [$K coords $Id] " "] " Espionne "[$K itemconfigure $Id]" foreach Option [$K itemconfigure $Id] { set NomDOption [lindex $Option 0] set Valeur [lindex $Option end] if {$Valeur == ""} { set Valeur "\{\}" } if {[regexp " " $Valeur]} { set Valeur "\{$Valeur\}" } append CommandeDeCreation " $NomDOption $Valeur" } lappend LesCommandesDeCreation $CommandeDeCreation } } if {$Fichier != ""} { set Fichier $ListeOuFichier } else { set Fichier [FichierPourSaveAs] if {$Fichier == ""} { return "" } } return [SauveLesLignes $LesCommandesDeCreation dans $Fichier] } proc SauveLeFichierSous {{RepertoireEtFichier Nouveau}} { if {[regexp {/$} $RepertoireEtFichier]} { regsub {/$} $RepertoireEtFichier "" Rep set Fic "" } else { set Rep [file dirname $RepertoireEtFichier] set Fic [file tail $RepertoireEtFichier] } set RepertoireInitial [pwd] set FichierInitial "Nouveau" set Fichier [tk_getSaveFile -title "Enregistrement du fichier" -initialfile $FichierInitial -initialdir $RepertoireInitial] if { $Fichier == "" } { return ""} set RepertoireInitial [file dirname $Fichier] return $Fichier } proc SauveLeLog {{fichier ""}} { if {[TypeAli] eq "pasdali"} {return} if {$fichier eq ""} { set fichier [DemandeEtSauveFichier "all"] if {$fichier eq ""} { return } } set f [open $fichier w] global TexteDuLog if {[info exists TexteDuLog]} { puts $f [OutputTLog Text $TexteDuLog] } close $f return } proc SauveLeMac {{new 1} {atitre ""} {adesc ""}} { if {$new} { if {$atitre eq "" && $adesc eq ""} { set tide [DemandeTitreEtDescDuMac] lassign $tide atitre adesc ctitre cdesc } if {$atitre eq ""} {return} } else { if {[MacCourant] == 1} { FaireLire "Beware !\nYou can not overwrite the 'Original alignment'.\nThis alignment constitute a reference alignment. You can only \ncreate new alignemts from it." return } set atitre "" set adesc "" } MetAJourGroupes EnregistreLeMac $atitre $adesc MetAJourWMacs return } proc SauveLePDB {lignes mol} { global OrdTmpDir global env if {! [info exists OrdTmpDir]} { set labas [RepertoireDeTravail] set lepid "" } else { set labas $OrdTmpDir set lepid "[pid]_" } set file [file join $labas "${lepid}pdb${mol}.ent"] set f [open $file w] puts $f [join $lignes "\n"] close $f return $file } proc SauveLeTamis {{Tam ""} {Fichier ""}} { if {$Tam==""} { set Tam [ChoisisUnTamis "ChampNom" "AvecNewTamis"] } if {$Fichier==""} { set Fichier [FichierPourSaveAs] } if {$Fichier==""} { return "" } return [SauveLesLignes [Tamis $Tam] dans $Fichier] } proc SauveLesGlobal {} { global VariablesAuDepart set lesv [info globals] global LesGlobal foreach Variable $lesv { global $Variable if {[regexp "Glossaire" $Variable]} { continue } if {$Variable=="VariablesAuDepart"} { continue } if { ! [info exists $Variable]} { continue } if {[lsearch $VariablesAuDepart $Variable] != -1} {continue} if {[array exists $Variable]} { lappend LesGlobal [PaqArray $Variable $Variable] } else { lappend LesGlobal [PaqListe $Variable [set $Variable]] } } return } proc SauveLesInfosDe {K Qui Quoi} { Wup "Stock les informations liees au canvas qu on a besoin d interroger" global TabCanvas #Espionne "Construit $K $Qui $Quoi" if {! [info exists TabCanvas($K,$Qui)]} { set TabCanvas($K,$Qui) $Quoi } else { foreach Q $Quoi { lappend TabCanvas($K,$Qui) $Q } } return "" } proc SauveLesLignes {LesLignes dans Fichier} { set f [open $Fichier w] foreach Ligne $LesLignes { puts $f $Ligne } close $f file attribute $Fichier -permissions 0664 return $Fichier } proc SauveLesPDB {} { global SP ListePDB if {[TypeAli] eq "pasdali"} {return} if {$ListePDB == {}} {return} if {[winfo exists .sp]} { raise .sp return } toplevel .sp wm title .sp "Select parameters ..." wm protocol .sp WM_DELETE_WINDOW KillParLaCroix wm resizable .sp 0 0 set SP(Top) .sp set f [frame .sp.f] grid $f -row 0 -column 0 -sticky news grid columnconfig $f 0 -weight 1 label $f.lbl -text "Select parameters ..." -font "Helvetica 14 bold" -anchor w -justify left grid $f.lbl -row 0 -column 0 -sticky w -padx 10 -pady 10 frame $f.fmol grid $f.fmol -row 1 -column 0 -sticky ew -padx 10 -pady {10 5} set SP(Mol) [lindex $ListePDB 0] label $f.fmol.lbl -text "Select molecule :" -fg blue -font "Helvetica 12" -anchor w -justify left tk_optionMenu $f.fmol.mol SP(Mol) {*}$ListePDB trace add variable SP(Mol) write DonneChainesDe grid $f.fmol.lbl -row 0 -column 0 -sticky w grid $f.fmol.mol -row 0 -column 1 -sticky w set SP(ListeChn) "Choose" set SP(ChnAll) "all" set SP(ChnMenu) $f.fchn.lch frame $f.fchn grid $f.fchn -row 2 -column 0 -sticky ew -padx 10 -pady 5 label $f.fchn.lbl -text "Select chain :" -fg blue -anchor w -justify left checkbutton $f.fchn.chk -text "all" -relief flat -anchor w -justify left -variable SP(ChnAll) -onvalue "all" -offvalue "one" tk_optionMenu $f.fchn.lch SP(LaChn) {*}$SP(ListeChn) grid $f.fchn.lbl -row 0 -column 0 -columnspan 2 -sticky w grid $f.fchn.chk -row 1 -column 0 -sticky w grid $f.fchn.lch -row 1 -column 1 grid columnconfig $f.fchn all -weight 1 set SP(ResAll) "all" frame $f.fres grid $f.fres -row 3 -column 0 -sticky ew -padx 10 -pady {5 10} label $f.fres.lbl -text "Select residues range :" -fg blue -anchor w -justify left checkbutton $f.fres.chk -text "all" -relief flat -anchor w -justify left -variable SP(ResAll) -onvalue "all" -offvalue "rng" label $f.fres.lfr -text "from" -anchor w -justify left entry $f.fres.efr -width 4 -textvariable SP(ResFrom) label $f.fres.lto -text "to" -anchor w -justify left entry $f.fres.eto -width 4 -textvariable SP(ResTo) grid $f.fres.lbl -row 0 -column 0 -columnspan 5 -sticky w grid $f.fres.chk -row 1 -column 0 -sticky w -padx {1 5} grid $f.fres.lfr -row 1 -column 1 -sticky w -padx {5 1} grid $f.fres.efr -row 1 -column 2 -sticky w -padx {1 2} grid $f.fres.lto -row 1 -column 3 -sticky w -padx {2 1} grid $f.fres.eto -row 1 -column 4 -sticky w frame $f.fbut grid $f.fbut -row 4 -column 0 -sticky ew -padx 10 -pady 10 button $f.fbut.bok -text " OK " -bg green1 -command [list FinSauvePDBParams ok] button $f.fbut.bdi -text "Dismiss" -bg red -command [list FinSauvePDBParams dismiss] grid $f.fbut.bdi -row 0 -column 0 -sticky w -padx {1 10} grid $f.fbut.bok -row 0 -column 1 -sticky e -padx {10 1} grid columnconfig $f.fbut all -weight 1 set oldGrab [grab current] grab .sp FenetreAuCentre $SP(Top) tkwait window $SP(Top) if {$oldGrab ne ""} { grab $oldGrab } unset -nocomplain SP return } proc SauveLesSelectionnes {K PAB LesDirs} { Wup "Sauve les Oligos selectionnes en distinguant les differentes sources" foreach DirOligo $LesDirs { set FichierSelection "$DirOligo/$PAB.selection" set DB [file tail $DirOligo] set NosIds "" set NosIds [$K find withtag "Selected && $DirOligo"] if {$NosIds==""} { if {[file exists $FichierSelection]} { if {[OuiOuNon "A previous selection exists for $PAB in $DB.\nWould you like to delete it ?"]} { file delete -force $FichierSelection } } #file delete -force $FichierSelection continue } if {[file exists $FichierSelection]} { if {[OuiOuNon "A selection has already been saved for $PAB in $DB.\nWould you like to overwrite it ?"]} { file delete -force $FichierSelection } elseif {! [OuiOuNon "It will append it.\nYou still want to save ?"]} {continue} } foreach Id $NosIds { set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Selection [join [ExtraitOligoDuTFA $PAB $NomOligo $DirOligo] "\n"] AppendAuFichier $FichierSelection "$Selection" } } return "" } proc SauveLesSequencesDesProteinesDeletees {LimInf RepSeq {LesPos ""} {LesNoms ""}} { # Enregistre les sequences au format fasta des sequences des proteines correpondantes # aux genes localises dans les segments deletes au dela d'un certain seuil # Liste des cas set LesCas {Oligo806 Oligo807 Oligo809 Oligo810 Oligo811 Oligo812 Oligo814 Oligo815 Oligo816 Oligo817 Oligo818 Oligo819 Oligo820 Oligo821 Oligo822 Oligo823 Oligo825 Oligo826 Oligo827} Espionne [llength $LesCas] # Liste chromosomes set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} # Position des genes set FichierLocGenes "[RepertoireDuGenome]/PRIMA_Affichage/HumanAllGenesUCSC" if {![file exists $FichierLocGenes] || $FichierLocGenes == ""} {return ""} foreach Chromosome $ListeChro { ChargeFichierLoc TabG $FichierLocGenes $Chromosome $LesNoms if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabG($FichierLocGenes,Chromosome,$Chromosome,$Nom)] { set DebutGene [lindex $LInfo 1] set FinGene [lindex $LInfo 2] set Deb($Chromosome,$Nom) $DebutGene set Fin($Chromosome,$Nom) $FinGene } } } } # pour chaque fichier CGH Segmente foreach NomFichier $LesCas { set NomFichierSeg "$NomFichier\.seg" set FichierSeg "[RepertoireDuGenome]/PRIMA_CGH_SEG/$NomFichierSeg" # Pour chaque chromosome foreach Chromosome $ListeChro { set x [InterrogeFichierSEG $FichierSeg "unset"] ChargeFichierSEG TabS $FichierSeg $Chromosome $LesPos if {[info exists TabS($FichierSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabS($FichierSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabS($FichierSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] set Val [format "%.2f" [expr $Val*1.0]] set LesAcc "" # Segments Amplifies ou Deletes if {($Val<0 && $Val<$LimInf)} { # Quels genes? if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { # Pour chaque Gene foreach Name [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { # Soit le gene est : |-------------| # 1 : a cheval sur le debut du segment ***** # 2 : a cheval sur la fin du segment | ***** # 3 : au sein du segment | ***** | # 4 : par dela le segment ******************* if {$PosInf>=$Deb($Chromosome,$Name) && $PosInf<=$Fin($Chromosome,$Name) || $PosSup>=$Deb($Chromosome,$Name) && $PosSup<=$Fin($Chromosome,$Name) || $PosInf<=$Deb($Chromosome,$Name) && $PosSup>=$Fin($Chromosome,$Name) || $PosInf>=$Deb($Chromosome,$Name) && $PosSup<=$Fin($Chromosome,$Name)} { lappend LesAcc $Name } } } } if {$LesAcc==""} {continue} # Quelles proteines? Quelles sequences? foreach Acc $LesAcc { if {[regexp -nocase "NM" $Acc]} { # Access Refseq set AccessProt [InterrogeFichierRefLink /genomics/link/UCSCGenomes/Homo_sapiens/database/refLink.txt $Acc NP] if {$AccessProt==""} {continue} set Commande "getz \"\\\[\\\{refseqprelease refseqpnew\\\}-acc:$AccessProt\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut==""} { Espionne "no seq for $AccessProt" } else { set FichierSeq "$RepSeq/$AccessProt\_$NomFichier\_$Chromosome\_$PosInf" if {[file exists $FichierSeq]} { continue } else { # Entete TFA specifique pour le projet !!! set Entete [EnteteDuTexteTFA $GetzOut] set NouvelleEntete "$Entete $NomFichier $Chromosome $PosInf $PosSup $Val" set Seq [QueLaSequenceDuTexteTFA $GetzOut] set SeqProtTFA [SequenceFormatTFA $Seq $NouvelleEntete "brut"] Sauve $SeqProtTFA dans $FichierSeq Espionne $FichierSeq } } } else { # Access Genbank set LesAccProt [LesProteinesDeLAcNuc $Acc] # Probleme : pls access proteine pour le meme access Genbank if {[llength $LesAccProt]>1} {Espionne "! acc>1 !! $Acc: $LesAccProt"} foreach AccProt $LesAccProt { set Commande "getz \"\\\[protein-acc:$AccProt\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut==""} { Espionne "no seq for $AccProt" } else { set FichierSeq "$RepSeq/$AccProt\_$NomFichier\_$Chromosome\_$PosInf" if {[file exists $FichierSeq]} { continue } else { set Entete [EnteteDuTexteTFA $GetzOut] set NouvelleEntete "$Entete $NomFichier $Chromosome $PosInf $PosSup $Val" set Seq [QueLaSequenceDuTexteTFA $GetzOut] set SeqProtTFA [SequenceFormatTFA $Seq $NouvelleEntete "brut"] Sauve $SeqProtTFA dans $FichierSeq Espionne $FichierSeq } } } } } } } } } } return } proc SauveLesSequencesPourCreerLaBanqueBlastP {LimInf LimSup RepSeq {LesPos ""} {LesNoms ""}} { # Enregistre les sequences au format fasta des sequences des proteines correpondantes # aux genes localises dans les segments amplifies ou deletes au dela d'un certain seuil # Liste des cas set LesCas {Oligo806 Oligo807 Oligo809 Oligo810 Oligo811 Oligo812 Oligo814 Oligo815 Oligo816 Oligo817 Oligo818 Oligo819 Oligo820 Oligo821 Oligo822 Oligo823 Oligo825 Oligo826 Oligo827} Espionne [llength $LesCas] # Liste chromosomes set ListeChro {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} # Position des genes set FichierLocGenes "[RepertoireDuGenome]/PRIMA_Affichage/HumanAllGenesUCSC" if {![file exists $FichierLocGenes] || $FichierLocGenes == ""} {return ""} foreach Chromosome $ListeChro { ChargeFichierLoc TabG $FichierLocGenes $Chromosome $LesNoms if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabG($FichierLocGenes,Chromosome,$Chromosome,$Nom)] { set DebutGene [lindex $LInfo 1] set FinGene [lindex $LInfo 2] set Deb($Chromosome,$Nom) $DebutGene set Fin($Chromosome,$Nom) $FinGene } } } } # pour chaque fichier CGH Segmente foreach NomFichier $LesCas { set NomFichierSeg "$NomFichier\.seg" set FichierSeg "[RepertoireDuGenome]/PRIMA_CGH_SEG/$NomFichierSeg" # Pour chaque chromosome foreach Chromosome $ListeChro { set x [InterrogeFichierSEG $FichierSeg "unset"] ChargeFichierSEG TabS $FichierSeg $Chromosome $LesPos if {[info exists TabS($FichierSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabS($FichierSeg,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabS($FichierSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] set Val [format "%.2f" [expr $Val*1.0]] set LesAcc "" # Segments Amplifies ou Deletes if {($Val>0 && $Val>=$LimSup) || ($Val<0 && $Val<=$LimInf)} { # Quels genes? if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { # Pour chaque Gene foreach Name [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { # Soit le gene est : |-------------| # 1 : a cheval sur le debut du segment ***** # 2 : a cheval sur la fin du segment | ***** # 3 : au sein du segment | ***** | # 4 : par dela le segment ******************* if {$PosInf>=$Deb($Chromosome,$Name) && $PosInf<=$Fin($Chromosome,$Name) || $PosSup>=$Deb($Chromosome,$Name) && $PosSup<=$Fin($Chromosome,$Name) || $PosInf<=$Deb($Chromosome,$Name) && $PosSup>=$Fin($Chromosome,$Name) || $PosInf>=$Deb($Chromosome,$Name) && $PosSup<=$Fin($Chromosome,$Name)} { lappend LesAcc $Name } } } } if {$LesAcc==""} {continue} # Quelles proteines? Quelles sequences? foreach Acc $LesAcc { if {[regexp -nocase "NM" $Acc]} { # Access Refseq set AccessProt [InterrogeFichierRefLink /genomics/link/UCSCGenomes/Homo_sapiens/database/refLink.txt $Acc NP] if {$AccessProt==""} {continue} set Commande "getz \"\\\[\\\{refseqprelease refseqpnew\\\}-acc:$AccessProt\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut==""} { Espionne "no seq for $AccessProt" } else { set FichierSeq "$RepSeq/$AccessProt\_$NomFichier\_$Chromosome\_$PosInf" if {[file exists $FichierSeq]} { continue } else { # Entete TFA specifique pour le projet !!! set Entete [EnteteDuTexteTFA $GetzOut] set NouvelleEntete "$Entete $NomFichier $Chromosome $PosInf $PosSup $Val" set Seq [QueLaSequenceDuTexteTFA $GetzOut] set SeqProtTFA [SequenceFormatTFA $Seq $NouvelleEntete "brut"] Sauve $SeqProtTFA dans $FichierSeq Espionne $FichierSeq } } } else { # Access Genbank set LesAccProt [LesProteinesDeLAcNuc $Acc] # Probleme : pls access proteine pour le meme access Genbank if {[llength $LesAccProt]>1} {Espionne "! acc>1 !! $Acc: $LesAccProt"} foreach AccProt $LesAccProt { set Commande "getz \"\\\[protein-acc:$AccProt\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut==""} { Espionne "no seq for $AccProt" } else { set FichierSeq "$RepSeq/$AccProt\_$NomFichier\_$Chromosome\_$PosInf" if {[file exists $FichierSeq]} { continue } else { set Entete [EnteteDuTexteTFA $GetzOut] set NouvelleEntete "$Entete $NomFichier $Chromosome $PosInf $PosSup $Val" set Seq [QueLaSequenceDuTexteTFA $GetzOut] set SeqProtTFA [SequenceFormatTFA $Seq $NouvelleEntete "brut"] Sauve $SeqProtTFA dans $FichierSeq Espionne $FichierSeq } } } } } } } } } } return } proc SauveLesXSelectionnes {K PAB LesDirs} { Wup "Sauve les Oligos croisee selectionnes en distinguant les differentes sources" foreach DirOligo $LesDirs { set FichierSelection "$DirOligo/$PAB.croisee" set NosIds "" set NosIds [$K find withtag "XSelect && $DirOligo"] if {$NosIds==""} { file delete -force $FichierSelection continue } if {[file exists $FichierSelection]} { if {[OuiOuNon "Some X-Selected Oligo have already been saved for $PAB\nWould you like to overwrite it ?"]} { file delete -force $FichierSelection } elseif {! [OuiOuNon "It will append to it\nYou still want to save ?"]} {return ""} } foreach Id $NosIds { set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Selection [join [ExtraitOligoDuTFA $PAB $NomOligo $DirOligo] "\n"] AppendAuFichier $FichierSelection "$Selection" } } return "" } proc SauveLesZones {K} { Wup "Sauvegarde les zones de design" set LesZones "" set LesIds [$K find withtag {"Zonable" && "Affichable"}] foreach Id $LesIds { lappend LesZones [lindex [$K gettags $Id] 1] } set LesZones [lsort -integer -increasing $LesZones] set NbZones [llength $LesZones] #Si impair if {[expr $NbZones%2]} { FaireLire "You need pairs of Flags" } else { set PAB [LesInfosDe $K MonPAB] LesParametresDuDesign LesZones $PAB "Reset" foreach {Debut Fin} $LesZones { LesParametresDuDesign LesZones $PAB [list $Debut $Fin] "Ajoute" AjouteAuLog "Design from $Debut to $Fin for $PAB" } } return "" } proc SauveLesZonesDeGC {K} { Wup "Sauvegarde les zones de GC pour le design" set LesZones "" set LesIds [$K find withtag {"Zonable" && "Affichable"}] foreach Id $LesIds { lappend LesZones [lindex [$K gettags $Id] 1] } set LesZones [lsort -real -increasing $LesZones] set NbZones [llength $LesZones] #Si impair if {$NbZones!="2"} { FaireLire "You need 2 Flags for a range of GC" } else { LesParametresDuDesign GCContentMinus "Reset" LesParametresDuDesign GCContentPlus "Reset" if {[lindex $LesZones 0]> [lindex $LesZones 1]} { set GCSup [lindex $LesZones 0] set GCInf [lindex $LesZones 1] } else { set GCSup [lindex $LesZones 1] set GCInf [lindex $LesZones 0] } LesParametresDuDesign GCContentMinus "$GCInf" "Positionne" LesParametresDuDesign GCContentPlus "$GCSup" "Positionne" AjouteAuLog "% GC lower: $GCInf %" AjouteAuLog "% GC upper: $GCSup %" } return "" } proc SauveLesZonesDeTm {K} { Wup "Sauvegarde les zones de Tm pour le design" set LesZones "" set LesIds [$K find withtag {"Zonable" && "Affichable"}] foreach Id $LesIds { lappend LesZones [lindex [$K gettags $Id] 1] } set LesZones [lsort -real -increasing $LesZones] set NbZones [llength $LesZones] #Si impair if {$NbZones!="2"} { FaireLire "You need 2 Flags for a range of Tm" } else { LesParametresDuDesign TmLimit "Reset" LesParametresDuDesign TmRange "Reset" if {[lindex $LesZones 0]> [lindex $LesZones 1]} { set TmSup [lindex $LesZones 0] set TmInf [lindex $LesZones 1] } else { set TmSup [lindex $LesZones 1] set TmInf [lindex $LesZones 0] } set TmToStore [expr ($TmSup + $TmInf)/2.0] set RangeToStore [expr $TmSup - $TmToStore] LesParametresDuDesign TmLimit $TmToStore "Positionne" LesParametresDuDesign TmRange $RangeToStore "Positionne" AjouteAuLog "Tm: $TmToStore \°C +/- $RangeToStore \°C" } return "" } proc SauveNwOjCourant {} { global NwOj NwOjR set c $NwOj(Can) set Lit [$c find withtag NBox] foreach i $Lit { set Lt [$c gettags $i] foreach t $Lt { switch -regexp $t { {^Nbr} { set n [string range $t 3 end] } {^Type} { set type [string range $t 4 end] } {^NBox} { set co [$c itemcget $i -background] } } } if {$co eq "black"} {set co $::Defauts(CoulVariable)} set NwOjR($chn,$n) [list $n $type $co] } return } proc SauveOrdalieDefauts {{fout ""}} { global Defauts OrdEtcDir env if {$fout eq ""} { package require platform set plat [::platform::generic] if {[regexp -nocase {^window} $plat]} { set fout [file join $env(APPDATA) ordalierc.def] } else { set fout [file join $env(HOME) .ordalierc] } } if {[catch {set foo [open $fout w]} Msg]} { return } if {1} { puts $foo [array get Defauts] } else { foreach e [set Defauts(UserDef)] { set v [set Defauts($e)] regsub -all -- {\{} $v "\\\{" v regsub -all -- {\}} $v "\\\}" v regsub -all -- {\[} $v "\\\[" v regsub -all -- {\]} $v "\\\]" v regsub -all -- {\(} $v "\\\(" v regsub -all -- {\)} $v "\\\)" v regsub -all -- {\"} $v "" v puts $foo "set Defauts($e) \"$v\"" } } close $foo return } proc SauveProfile {} { global WProfile set file [DemandeEtSauveFichier "all"] if {$file == ""} {return} set f [open $file w] set lignes [$WProfile get 1.0 end] puts $f $lignes close $f return } proc SauvePuzzleFit {Texte dans Fichier} { if {[OuiOuNonMemo "Do I overwrite" 0] && [FileExists $Fichier]} { return ""} return [Sauve $Texte dans $Fichier] } proc SauveSeqTFADesIDDUnTableau {{FichierTableau ""}} { if {$FichierTableau == ""} { FaireLire "Choisir le fichier contenant le tableau" set FichierTableau [ButineArborescence All [pwd]] } if {![file exists $FichierTableau]} {return ""} set RepSeq [ChoisirUnRepertoire "Choisir le repertoire qui contiendra les sequences"] set UneEntete 0 if {[OuiOuNon "Le Tableau a t'il une entete?"]} {set UneEntete 1} FaireLire "Dans quelle colonne se situe l'Access ou le BanqueId? \[0\-n\]" set nId [Entre] FaireLire "Quel sera le suffix des boites gscope?" set Box [Entre] FaireLire "Combien de chiffres seront dans les suffix des gscope?" set nNb [Entre] set Banque "GB" set i 0 set nSeq 0 set ToutesLesSequences {} set LeNouveauTableau {} set F [open $FichierTableau] while {[gets $F Ligne]>=0} { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} incr i set LaLigne [split $Ligne "\t"] if {$UneEntete && $i == 1} { set LaLigne [linsert $LaLigne 2 "Bank"] set LaLigne [linsert $LaLigne 3 "Seq infos"] set LaLigne [linsert $LaLigne 4 "RefGscope"] Espionne $LaLigne lappend LeNouveauTableau [join $LaLigne "\t"] continue } incr nSeq set RefGscope [format "%s%${nNb}.${nNb}d" $Box $nSeq] set LaLigne [linsert $LaLigne 2 "$Banque"] set Access [lindex $LaLigne $nId ] set FichierTFA "$RepSeq/$Access.tfa" set Seq [SequenceDeLAccess $Access] if {$Seq == ""} { Espionne "$Access no sequence found" set LaLigne [linsert $LaLigne 3 "Not found"] set SeqTFA "$Access does not exist in Bank" Sauve $SeqTFA dans $FichierTFA } else { set Entete "$Access" set SeqTFA [SequenceFormatTFA $Seq $Entete] Sauve $SeqTFA dans $FichierTFA if {![EstCeDeLADN $FichierTFA]} { set LaLigne [linsert $LaLigne 3 "Not DNA"] } else { set LaLigne [linsert $LaLigne 3 "OK"] } } set LaLigne [linsert $LaLigne 4 "$RefGscope"] Espionne $LaLigne lappend LeNouveauTableau [join $LaLigne "\t"] lappend ToutesLesSequences $SeqTFA } set Rep [file dirname $FichierTableau] set FichierToutesSeq "$Rep/ToutesLesSequences.tfa" Sauve [join $LeNouveauTableau "\n"] dans "${FichierTableau}_NewTable" Sauve [join $ToutesLesSequences "\n"] dans $FichierToutesSeq close $F Espionne "J'ai fini" return "" } proc SauveTDom {IdXML EnteteXML Fichier} { set f [open $Fichier w] puts $f $EnteteXML puts $f [$IdXML asXML -doctypeDeclaration 1 -indent 2] close $f return $Fichier } proc SauveTempSeqlab {{nofile 0}} { global FSTemp LNSeqlab LNSTemp LSSTemp update idletasks FaireAttendre "Please wait ...\nSaving ..." set LNSTemp $LNSeqlab set LSSTemp [list] set LSSTemp [$::NomTextSeq output all] after 200 update idletasks FaireLaSuite if {! $nofile} { if {! [info exists FSTemp]} { set FSTemp [DemandeEtSauveFichier tfa 0] } EcritLeTfa $FSTemp $LNSTemp $LSSTemp } return } proc SauveTfasPourInterproPourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set r [glob -directory $directory *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } SauvetfasPourInterpro $f FinPasTouche $f } } proc SauveWobblePourProt {pk} { global dcdn {*}[info globals Wobble*] {*}[info globals Wprot*] classes foreach aa [lsort [array names Wobble]] { # si un seul anticodon, passe if {[llength $Wobble($aa)] < 2} { continue } set ins "insert into ${aa}_AA values($pk," set Lv [list] set Lk [lsort [array names Wprot_pourcentE_$aa]] foreach key $Lk { lappend Lv [set Wprot_pourcentE_${aa}($key)] } append ins "[join $Lv ,])" if {0 && $pk == 2} { puts "$ins" } $dcdn eval $ins } return } proc SauvetfasPourInterpro {fichier} { if { ! [file exists "lesCopainsPourInterpro"]} { File mkdir [RepertoireDuGenome]/lesCopainsPourInterpro } exec cp [RepertoireDuGenome]/tfasdescopains/$fichier [RepertoireDuGenome]/lesCopainsPourInterpro/$fichier exec rm [RepertoireDuGenome]/tfasdescopains/$fichier exec mv [RepertoireDuGenome]/lescopainsComplet/$fichier [RepertoireDuGenome]/tfasdescopains/$fichier } proc SavantSVP {Ip Cafe Science} { global SavantSpecialise global TrySocketNTimes set MonIdent [IdentificationDeSavant] set Animateur [AnimateurSVP "$Ip:$Cafe"] if {[regexp -nocase "^erreur" $Animateur]} { return $Animateur } fconfigure $Animateur -buffering line -blocking false fileevent $Animateur readable "AttendLeSavant $Animateur $Ip $Cafe $Science $MonIdent" Poste $Animateur "$Science" vwait SavantSpecialise($Science,$Cafe,$MonIdent) set IpSavant [set SavantSpecialise($Science,$Cafe,$MonIdent)] unset SavantSpecialise($Science,$Cafe,$MonIdent) Clos $Animateur if {[regexp -nocase "^erreur" $IpSavant]} { return "$IpSavant" } DecortiqueIpCafe "$IpSavant" Ip Savant if {[catch {set CanalSavant [socket $Ip $Savant]} Message]} { PotinsDeQuestion "$Message ... I tried $TrySocketNTimes times" if {[incr TrySocketNTimes]>5} { return $Message } return [SavantSVP $Ip $Cafe $Science] } set TrySocketNTimes 0 return $CanalSavant } proc SaveAs {Page {RepertoireEtFichier unnamed}} { set Fichier [FichierPourSaveAs $RepertoireEtFichier] if {$Fichier==""} { return "" } return [Sauve $Page dans $Fichier] } proc SaveClustersNames {w what} { global SDG LNDG if {$what eq "dismiss"} { destroy [winfo toplevel $w] return } set i 0 foreach g $LNDG { if { ! [regexp {^Group[0-9+]} $g]} {continue} set wdg "$w.eg$i" set name [string trim [$wdg get]] if {$name ne ""} { set SDG(Equiv,$g) $name } incr i } destroy [winfo toplevel $w] return } proc SaveDB {} { global db CMDef set var CMDef $db eval {begin transaction} foreach key [lsort [array names CMDef]] { set val "[string map {' ''} [set ${var}($key)]]" set rep [$db eval {insert into clientvar values($var,$key,:val)}] puts "rep $rep" } $db eval {commit} parray CMDef $db close return } proc SaveInFile {Text File} { set Channel [open $File "w"] if {$Text != ""} {puts $Channel $Text} close $Channel return $File } proc SaveLog {file} { global DefautsPipe if {[set DefautsPipe(File,log)] != "verbose"} { return 0 } set f [open $file a+] global TexteDuLog puts $f $TexteDuLog close $f return 1 } proc SaveMailsToDB {first last} { global db set imapID $CMDef(imapID) set LfieldsIn [list uid from: to: Subject: date: flags] for {set i $first} {$i <= $last} {incr i} { foreach k $LfieldsIn { set val [::imap4::msginfo $imapID $i $k] } } return } proc SavePhylOrder {K OrgaEtSesPlaces} { global LigneOriginePhylo set PossibleFichier "${OrgaEtSesPlaces}_2" while {1} { set NouveauOrgaEtSesPlaces [FichierPourSaveAs $PossibleFichier] if {$NouveauOrgaEtSesPlaces==""} { return "" } if {[regexp "orgaetsesplaces" $NouveauOrgaEtSesPlaces]} { break } } regsub "orgaetsesplaces" $OrgaEtSesPlaces "pabretenus" PabsRetenus regsub "orgaetsesplaces" $NouveauOrgaEtSesPlaces "pabretenus" NouveauPabsRetenus foreach Id [$K find withtag "TexteOrga"] { set LesTags [$K gettags $Id] set iLigne [lsearch -regexp $LesTags "Ligne_"] set Ligne [lindex $LesTags $iLigne] set i [IntegerApres "Ligne_" dans $Ligne] lappend Liste "$i [lindex $LesTags 1]" } set ListeTriee [lsort -command CompareLesIntegersEnDebut $Liste] foreach Couple $ListeTriee { regsub {[0-9]+ +} $Couple "" Orga lappend Sortie [set LigneOriginePhylo($K,$Orga)] } File copy $PabsRetenus $NouveauPabsRetenus return [SauveLesLignes $Sortie dans $NouveauOrgaEtSesPlaces] } proc SaveTree {AId {file ""}} { if {$file eq ""} { set file [DemandeEtSauveFichier ph 1] } if {$file eq ""} {return} set fo [open $file w] puts $fo $::Abr($AId,TextePH) close $fo set file "${file}.test" EcritUnArbre $AId $file return } proc Save_SetUp {} { Wup "Pour le setup de CADO4MI" set ToSave "" set LesSetUps [list PROGDIR BLASTDIR BLASTDBDIR GETZDIR] foreach SetUp $LesSetUps { set Valeur [LesParametresDuSetUp $SetUp "" LaValeurMerci] #Les defauts switch -exact $SetUp { "GETZDIR" { if {$Valeur == ""} { set Valeur "www.igbmc" } } } lappend ToSave "$SetUp\t$Valeur" } set SaveDir [LesParametresDuSetUp PROGDIR "" LaValeurMerci] set FichierSetUp "$SaveDir/setup_CADO4MI" #AppendAuFichier $FichierSetup [join $ToSave "\n"] } proc ScafoldDeCiona {S} { return [LaSequenceDuTFAs "/genomics/link/Ciona/banques/Ciona_intestinalis" "Ciona_intestinalis_$S" DontMemorize] } proc Scalaire {u v} { set s [expr {[S_nV $u]*[S_nV $v]/[S_VV $u "*" $v]}] return $s } proc ScaleArbre {AId args} { global Abr if {$args != ""} {lassign [lindex $args 0] xc yc} {set xc ""} set t [set Abr(Arbre,$AId)] set m [set Abr($AId,ScaleR)] set PAD [set Abr($AId,PAD)] if {$xc eq ""} { set Le [$t children root] set xc 0. ; set yc 0. foreach e $Le { set xc [expr {$xc + [$t get $e xcoord]}] set yc [expr {$yc + [$t get $e ycoord]}] } set xc [expr {$xc / [llength $Le]}] set yc [expr {$yc / [llength $Le]}] } foreach e [$t nodes] { set x [$t get $e xdes] set y [$t get $e ydes] set x [expr {$m*($x-$xc)+$xc}] set y [expr {$m*($y-$yc)+$yc}] $t set $e xdes $x $t set $e ydes $y } return } proc ScaleRest {w} { global Vrp set c $w.c set invScale [expr 1.0/$Vrp(Scale)] $c scale all $Vrp(CX) $Vrp(CY) $invScale $invScale set Vrp(Scale) 1.0 return } proc ScanCOV {COV aCritere aOperateur aValeur} { upvar $aCritere Critere upvar $aOperateur Operateur upvar $aValeur Valeur scan $COV "%s %s" Critere Operateur regsub "$Critere +$Operateur +" $COV "" Valeur } 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 ScanLaListe {Liste args} { set i 0 set Long [llength $Liste] foreach aV $args { upvar $aV V if {$i >= $Long} { break } set V [lindex $Liste $i] incr i } return $i } proc ScanLaPipe {Pipe args} { # Equivalent ScanLaListe mais pour les sorties Bird qui sont "pipees" set Liste [split $Pipe "|"] set i 0 set Long [llength $Liste] foreach aV $args { upvar $aV V if {$i >= $Long} { break } set V [lindex $Liste $i] incr i } return $i } proc ScanLeTruc {ListeI Separator args} { # Equivalent ScanLaListe mais pour les sorties Bird qui sont "pipees" set Liste [split $ListeI "$Separator"] set i 0 set Long [llength $Liste] foreach aV $args { upvar $aV V if {$i >= $Long} { break } set V [lindex $Liste $i] incr i } return $i } proc ScanOS {} { global RepertoireDuGenome set Repertoire "$RepertoireDuGenome/.." set FichierDesOSsBrut "$Repertoire/OSbrut" set FichierDesOSs "$Repertoire/LesOSs" set FichierDesBonsOSs "$Repertoire/LesBonsOSs" set FichierDesVulgaireOSs "$Repertoire/VulgaireOSs" if { ! [file exists $FichierDesOSs]} { if { ! [file exists $FichierDesOSsBrut]} { eval exec "grep '^OS' /prot/gcgswissprot/swissprot.ref > $FichierDesOSsBrut" } foreach Ligne [LesLignesDuFichier $FichierDesOSsBrut] { regsub -all {\t} $Ligne " " Ligne regsub -all {(^OS +)|( *$)} $Ligne "" Texte if {[regexp {\([^\)]*\,} $Ligne]} { set BonTexte "" set I 0 foreach C [split $Texte ""] { if {$C=="("} { incr I } if {$C==")"} { incr I -1} if {$C=="," && $I} { set C " " } append BonTexte $C } set Texte $BonTexte } if { ! [regexp {\.$} $Texte]} { lappend LeOS $Texte continue } while {[regexp " " $Texte]} { regsub -all " " $Texte " " Texte } lappend LeOS [string trim $Texte] set OS [join $LeOS " "] lappend LesOSs $OS set LeOS {} } set LesOSs [lsort -unique $LesOSs] SauveLesLignes $LesOSs dans $FichierDesOSs } foreach Ligne [LesLignesDuFichier $FichierDesOSs] { regsub {\.$} $Ligne "" Ligne regsub { and } $Ligne "" Ligne set LesChamps [split $Ligne ","] foreach Champ $LesChamps { set Champ [string trim $Champ] if {[info exists Strain]} { unset Strain } if {[info exists Vulgus]} { unset Vulgus } set I 0 while {[regexp {\(} $Champ]} { incr I set P [string last ")" $Champ] set N 1 while {$N} { incr P -1 if {$P<0} { FaireLire "Wrong parenthesis in $Ligne" ; break } set C [string index $Champ $P] if {$C==")"} { incr N } if {$C=="("} { incr N -1} } set Parent [string rang $Champ $P end] set Champ [string trim [string range $Champ 0 [incr P -1]]] if {[regexp -nocase "strain" $Parent]} { set Strain($I) [string range $Parent 1 end-1] } else { set Vulgus($I) [string range $Parent 1 end-1] } } set LesStrains {} set LesVulguss {} while {$I} { if {[info exists Strain($I)]} { lappend LesStrains [set Strain($I)] } if {[info exists Vulgus($I)]} { lappend LesVulguss [set Vulgus($I)] } incr I -1 } set Souche "" set Vulgaire "" if {$LesStrains!={}} { set Souche [join $LesStrains " "] } if {$LesVulguss!={}} { set Vulgaire [join $LesVulguss " "]} set OS [string trim $Champ] set OriginOS $OS if {[regexp -nocase "VIRUS" $OS]} { set OS "VIRUS $OS" } if {[regexp -nocase "ENDOSYMBIONT" $OS]} { set OS "ENDOSYMBIONT $OS" } if {[regexp -nocase "ENDOBACTERIUM" $OS]} { set OS "ENDOBACTERIUM $OS" } set LesMots [split $OS " "] set OS [join [lrange $LesMots 0 1] " "] lappend LesBonsOSs $OS if {$Vulgaire!=""} { lappend LesOSduVulgaire($Vulgaire) $OS } } set LesBonsOSs [lsort -unique $LesBonsOSs] } foreach Vulgaire [array names LesOSduVulgaire] { set LesOSOS [lsort -unique [set LesOSduVulgaire($Vulgaire)]] lappend LesVulgairesOSOS "$Vulgaire:[join $LesOSOS ":"]" } SauveLesLignes $LesVulgairesOSOS dans $FichierDesVulgaireOSs SauveLesLignes $LesBonsOSs dans $FichierDesBonsOSs exit } proc Scene {K Action Quoi} { global SceneMemo if { ! [info exists SceneMemo($K,font)]} { set SceneMemo($K,font) {{Courier 8} {Courier 10} {Courier 12}} } if { ! [info exists SceneMemo($K,fill)]} { set SceneMemo($K,fill) {black white} } if {$Action=="toggle"} { set Top [lindex [set SceneMemo($K,$Quoi)] 0] set SceneMemo($K,$Quoi) [lreplace [set SceneMemo($K,$Quoi)] 0 0] lappend SceneMemo($K,$Quoi) $Top set Nouveau [lindex [set SceneMemo($K,$Quoi)] 0] $K itemconfigure TEXTE -$Quoi $Nouveau } return $Nouveau } proc ScerFlo {} { set Source "/genomics/link/ScerREFUNI" if {[OuiOuNon "Do I create bornesdespabs"]} { set LesBornes [LesLignesDuFichier "$Source/fiches/bornesdespabs.backup"] set LesNew [LesLignesDuFichier "[RepertoireDuGenome]/DeFlo/ListeDesSCER.txt"] set Fin [expr [llength $LesNew]-1] foreach Ligne [lrange $LesBornes 0 $Fin] New $LesNew { regsub {SCER[0-9]+} $Ligne $New NewLigne lappend LesNewLigne $NewLigne } return [SauveLesLignes $LesNewLigne dans "[Fiches]/bornesdespabs"] } if {[OuiOuNon "Do I copy the files"]} { foreach Nom [ListeDesPABs] { foreach Rep [list prottfa protembl infos] { set S "$Source/$Rep/$Nom" set D "[RepertoireDuGenome]/$Rep/$Nom" file copy $S $D Espionne $D } } } return } proc SchemaPFAM {} { set LName [list "AARS2" "CARS2" "DARS2" "EARS2" "FARS2" "GARS " "HARS2" "IARS2" "KARS " "LARS2" "MARS2" "NARS2" "PARS2" "RARS2" "SARS2" "TARS2" "VARS2" "WARS2" "YARS2"] foreach Name $LName { FeaturesdesMacsims $Name } } proc SchematicView {Seq Concat {option ""} {position ""}} { #creation du fichier script python set fileText {} set listePos {} if {$option==""} {set option pfam} set couleur(pfam) "red" set couleur(domain) "DeepPink" set couleur(globulaire) "Orange" set couleur(Ronn_DR) "blue" set couleur(GlobPlot_Disorder) "purple" set couleur(FoldIndex_pds) "green" set couleur(filtre) "darkblue" set couleur(ALLPDB) "darkblue" Espionne "---------concat: $Concat" #pourquoi deux fois domain erreur devrait etre autre chose? comme koanno? switch $Concat { "pfam" { set Concat "ConcatPfam" set fileName ${Seq}Pfam } "domain" { set Concat "ConcatDomain" set fileName ${Seq}Domain } "DomPfam" { set Concat "ConcatDomPf" set fileName ${Seq}DomPfam } "koanno" { set Concat "ConcatKoanno" } "pdb" { set fileName ${Seq}PDB } } switch $option { "globulaire" { set fileName ${Seq}globulaire } "Ronn_DR" { set fileName ${Seq}ronn } "GlobPlot_Disorder" { set fileName ${Seq}GlobPlot_D } "FoldIndex_pds" { set fileName ${Seq}FoldIndex } } if {$position == "position"} { set fileName ${fileName}P } else { Espionne "dans le else" set fileName $fileName Espionne "f: $fileName" } #Espionne "Seq: $Seq" #Espionne "Concat: $Concat" #Espionne "option: $option" #Espionne "--->position: $position" set listeInfo [getMacsimsInf $Seq $Concat $option] #Pour faire une image par PDB il faut faire parcourir la liste des pdb... #Et pour chaque pdb ecrire un fichier .py lappend fileText "import sys" lappend fileText "sys.path.append(\"/groupes/poch/luudao/ms2phdb/applis/ms2phdb/libtools\")" lappend fileText "import images" lappend fileText "first = 1" set length [LongueurDeLaSequence $Seq prottfa] lappend fileText "length = $length" lappend fileText "listfeat = \[\]" foreach pfam $listeInfo { Espionne $pfam set deb [lindex [split $pfam ";"] 1] set fin [lindex [split $pfam ";"] 2] lappend fileText "listfeat.append(\[$deb,$fin,\"$couleur($option)\"\])" lappend listePos $deb lappend listePos $fin } lappend fileText "filename = \"$fileName.png\"" lappend fileText "list_mut = \[\]" set listePos [lsort -integer $listePos] if {$position!="position"} { foreach pfam $listeInfo { set deb [lindex [split $pfam ";"] 1] set fin [lindex [split $pfam ";"] 2] lappend fileText "list_mut.append(\[$deb,$deb,\"$couleur($option)\"\])" lappend fileText "list_mut.append(\[$fin,$fin,\"$couleur($option)\"\])" } } else { foreach pos $listePos { Espionne "pos: $pos" lappend fileText "list_mut.append(\[$pos,$pos,\"$couleur($option)\"\])" } } lappend fileText "tmppath = \"/tmp/\"" if {$position=="position"} { lappend fileText "images.visu_mut(first, length, filename, list_mut, tmppath)" } else { lappend fileText "images.visu_ms2ph(first, length, listfeat, filename, \"\", list_mut, tmppath)" } set File [RepertoireDuGenome]/$fileName.py SauveLesLignes $fileText dans $File } proc SchematicViewNew {fileMac Seq Concat {option ""} {position ""}} { set filecolor $fileMac append filecolor "Color" #creation du fichier script python set fileText {} set listePos {} set TailleSeqPixelMax 750 if {$option==""} {set option pfam} set couleur(pfam) "red" set couleur(domain) "DeepPink" set couleur(globulaire) "Orange" set couleur(Ronn_DR) "blue" set couleur(GlobPlot_Disorder) "purple" set couleur(FoldIndex_pds) "green" set couleur(filtre) "darkblue" set couleur(ALLPDB) "darkblue" #Espionne "concat: $position" switch $Concat { "pfam" { set Concat "ConcatPfam" set fileName ${Seq}Pfam set filecolor [RepertoireDuGenome]/GPfam/$filecolor #recupere la valeur de la plus grande des sequences #lire le fichier et mettre la valeur dans la variable set fileLength $fileMac append fileLength "Length" set fileLength [RepertoireDuGenome]/GPfam/$fileLength set TPlusGSeq [LesLignesDuFichier $fileLength] #set TPlusGSeq [expr log ($TPlusGSeq)] #calcule direct du log } "domain" { set Concat "ConcatDomain" set fileName ${Seq}Domain set filecolor [RepertoireDuGenome]/GDomain/$filecolor set fileLength $fileMac append fileLength "Length" set fileLength [RepertoireDuGenome]/GDomain/$fileLength set TPlusGSeq [LesLignesDuFichier $fileLength] #set TPlusGSeq [expr log ($TPlusGSeq)] #calcule direct du log } "region" { set Concat "ConcatRegion" set fileName ${Seq}Region set filecolor [RepertoireDuGenome]/GRegion/$filecolor set fileLength $fileMac append fileLength "Length" set fileLength [RepertoireDuGenome]/GRegion/$fileLength set TPlusGSeq [LesLignesDuFichier $fileLength] #set TPlusGSeq [expr log ($TPlusGSeq)] #calcule direct du log } "DomPfam" { set Concat "ConcatDomPf" set fileName ${Seq}DomPfam set filecolor [RepertoireDuGenome]/GDomPfam/$filecolor set fileLength $fileMac append fileLength "Length" set fileLength [RepertoireDuGenome]/GDomPfam/$fileLength set TPlusGSeq [LesLignesDuFichier $fileLength] } "domain" { set Concat "ConcatDomain" } "pdb" { set fileName ${Seq}PDB } } switch $option { "globulaire" { set fileName ${Seq}globulaire } "Ronn_DR" { set fileName ${Seq}ronn } "GlobPlot_Disorder" { set fileName ${Seq}GlobPlot_D } "FoldIndex_pds" { set fileName ${Seq}FoldIndex } } if {$position == "position"} { set fileName ${fileName}P #Espionne "-----------------> $fileName" } else { set fileName $fileName } set mes_lignescolor [LesLignesDuFichier $filecolor] foreach ligne $mes_lignescolor { set DColor [split $ligne ";"] set tabcolor([lindex $DColor 0]) [lindex $DColor 1] } set listeInfo [getMacsimsInfNew $fileMac $Seq $Concat $option] lappend fileText "import sys" lappend fileText "sys.path.append(\"/groupes/poch/luudao/ms2phdb/applis/ms2phdb/libtools\")" lappend fileText "import images_for_xavier" lappend fileText "first = 1" if { [file exists "[RepertoireDuGenome]/macsimXml/$fileMac.aj"]} { set fileMacsim "[RepertoireDuGenome]/macsimXml/$fileMac.aj" } else { set fileMacsim "[RepertoireDuGenome]/macsimXml/$fileMac" } set length [FromMacsims $fileMacsim $Seq "Length"] lappend fileText "length = $length" set Tseq [expr ($length*$TailleSeqPixelMax)/$TPlusGSeq] lappend fileText "Tseq = $Tseq" lappend fileText "listfeat = \[\]" foreach pfam $listeInfo { Espionne "Boucle PFAM:$pfam" set tabpfam [split $pfam ";"] set QuelDom [string trim [lindex $tabpfam 0]] set deb [lindex $tabpfam 1] set fin [lindex $tabpfam 2] set namepfam [lindex $tabpfam 3] #Espionne "tabpfam: $tabpfam" #Espionne "QuelDom:$QuelDom" if {$QuelDom=="Domain"} { Espionne "dans Domain" set namepfam [lindex [split $namepfam "."] 0] if {[regexp {(.*)\d.*} $namepfam a p]} { set namepfam $p } if {[regexp {(.*)from.*} $namepfam a p]} { set namepfam $p } elseif {[regexp {(.*)/.*} $namepfam a p] } { set namepfam $p } if {[regexp {^PROP_(.*)} $namepfam a p]} { set namepfam $p } } else { Espionne "pas un domain" set namepfam [lindex [split $namepfam " "] 0] if {[regexp {(.*)from.*} $namepfam a p]} { set namepfam $p } elseif {[regexp {(.*)/.*} $namepfam a p] } { set namepfam $p } #ne le faire que si y a un _ sinon provoque des erreurs if {[regexp {^PROP_(.*)} $namepfam a p]} { set namepfam $p } } #semble plus simple a voir avec #if {[regexp {(PF\d{5}).*} $namepfam a p]} { # #pour les PFAM # set namepfam $p #} set namepfam [string trim $namepfam] #Espionne "Namepfam #### $namepfam" #definit la couleur du pfam lappend fileText "listfeat.append(\[$deb,$fin,\"$tabcolor($namepfam)\"\])" lappend listePos $deb lappend listePos $fin } lappend fileText "filename = \"$fileName.png\"" lappend fileText "list_mut = \[\]" set listePos [lsort -integer $listePos] if {$position!="position"} { foreach pfam $listeInfo { Espionne "####boucle pfam: $pfam" set tabpfam [split $pfam ";"] set QuelDom [string trim [lindex $tabpfam 0]] set deb [lindex $tabpfam 1] set fin [lindex $tabpfam 2] set namepfam [lindex $tabpfam 3] #set namepfam [lindex [split $namepfam " "] 0] if {$QuelDom=="Domain"} { Espionne "dans domain" set namepfam [lindex [split $namepfam "."] 0] if {[regexp {(.*)\d.*} $namepfam a p]} { set namepfam $p } if {[regexp {(.*)from.*} $namepfam a p]} { set namepfam $p } elseif {[regexp {(.*)/.*} $namepfam a p] } { set namepfam $p } if {[regexp {^PROP_(.*)} $namepfam a p]} { set namepfam $p } } else { set namepfam [lindex [split $namepfam " "] 0] if {[regexp {(.*)from.*} $namepfam a p]} { set namepfam $p } elseif {[regexp {(.*)/.*} $namepfam a p] } { set namepfam $p } #ne le faire que si y a un _ sinon provoque des erreurs if {[regexp {^PROP_(.*)} $namepfam a p]} { set namepfam $p } } set namepfam [string trim $namepfam] #Espionne "pfma: $pfam" Espionne "namepfma: $namepfam" lappend fileText "list_mut.append(\[$deb,$deb,\"$tabcolor($namepfam)\"\])" lappend fileText "list_mut.append(\[$fin,$fin,\"$tabcolor($namepfam)\"\])" } } else { foreach pos $listePos { Espionne "pos: $pos" lappend fileText "list_mut.append(\[$pos,$pos,\"$couleur($option)\"\])" } } lappend fileText "tmppath = \"/tmp/\"" if {$position=="position"} { lappend fileText "images_for_xavier.visu_mut(first, length, filename, list_mut, Tseq, tmppath)" } else { lappend fileText "images_for_xavier.visu_ms2ph(first, length, listfeat, filename, Tseq, \"\", list_mut, tmppath)" } set File [RepertoireDuGenome]/$fileName.py SauveLesLignes $fileText dans $File } proc SchematicViewPDB {Seq deb fin puz {position ""}} { #creation du fichier script python set fileText {} set listePos {} set length [LongueurDeLaSequence $puz prottfa] set couleur(ALLPDB) "darkblue" set fileName $Seq if {$position == "position"} { set fileName ${fileName}P } else { set fileName $fileName } #ligne du fichier py lappend fileText "import sys" lappend fileText "sys.path.append(\"/groupes/poch/luudao/ms2phdb/applis/ms2phdb/libtools\")" lappend fileText "import images" lappend fileText "first = 1" lappend fileText "length = $length" lappend fileText "listfeat = \[\]" lappend fileText "listfeat.append(\[$deb,$fin,\"darkblue\"\])" lappend listePos $deb lappend listePos $fin lappend fileText "filename = \"$fileName.png\"" lappend fileText "list_mut = \[\]" set listePos [lsort -integer $listePos] if {$position!="position"} { lappend fileText "list_mut.append(\[$deb,$deb,\"$couleur(ALLPDB)\"\])" lappend fileText "list_mut.append(\[$fin,$fin,\"$couleur(ALLPDB)\"\])" } else { foreach pos $listePos { lappend fileText "list_mut.append(\[$pos,$pos,\"$couleur(ALLPDB)\"\])" } } lappend fileText "tmppath = \"/tmp/\"" if {$position=="position"} { lappend fileText "images.visu_mut(first, length, filename, list_mut, tmppath)" } else { lappend fileText "images.visu_ms2ph(first, length, listfeat, filename, \"\", list_mut, tmppath)" } set File [RepertoireDuGenome]/$fileName.py SauveLesLignes $fileText dans $File } proc SchematicViewPourTous {{directory ""} Concat {option ""} {position ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set r [glob -directory $directory *] if { ! [file exists "[RepertoireDuGenome]/SchematicView"]} { File mkdir [RepertoireDuGenome]/SchematicView } foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } SchematicView $f $Concat $option $position switch $Concat { "pfam" { set fileName ${f}Pfam } "pdb" { set fileName ${f}PDB } "domain" { set fileName ${f}Domain } "DomPfam" { set fileName ${f}DomPfam } #test pour fusionner PFAM & Domain #"koanno" { set fileName ${f}Domain } } switch $option { "globulaire" { set fileName ${f}globulaire } "Ronn_DR" { set fileName ${f}ronn } "GlobPlot_Disorder" { set fileName ${f}GlobPlot_D } "FoldIndex_pds" { set fileName ${f}FoldIndex } } if {$position == "position"} { set fileName ${fileName}P } else { set fileName $fileName } Espionne "execute PYTHON" exec python [RepertoireDuGenome]/$fileName.py Espionne "MV" exec mv [RepertoireDuGenome]/$fileName.py [RepertoireDuGenome]/SchematicView/. exec mv /home/luudao/www/ms2phdb/tmp/$fileName.png [RepertoireDuGenome]/SchematicView/. #ajouter un mv des py vers SchematicView Espionne "fin de SchematicViewPourTous" FinPasTouche $f } } proc SchematicViewPourTousPDB {{directory ""} {position ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/tfasdescopains} set r [glob -directory $directory *] if { ! [file exists "[RepertoireDuGenome]/SchematicView"]} { File mkdir [RepertoireDuGenome]/SchematicView } foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } if { ! [file exists "[RepertoireDuGenome]/SchematicView/$f"]} { File mkdir [RepertoireDuGenome]/SchematicView/$f } #if { ! [file exists "[RepertoireDuGenome]/SchematicView/$f/Images"]} { # File mkdir [RepertoireDuGenome]/SchematicView/$f/Images #} #if { ! [file exists "[RepertoireDuGenome]/SchematicView/$f/PY"]} { # File mkdir [RepertoireDuGenome]/SchematicView/$f/PY #} #recupere les pdbs set listepdb [getMacsimsInf $f pdb ""] foreach pdb $listepdb { #recuperation du nom PDB set infos [split $pdb ";"] set name [string trim [lindex $infos 0]] set deb [lindex $infos 1] set fin [lindex $infos 2] #creation du fichier py (script python pour la creation d'image) if {[regexp {([1-9][A-Z0-9]{3}_[A-Z])_.*} $name tmp name2]} {set name $name2} SchematicViewPDB $name $deb $fin $f $position set fileName $name if {$position == "position"} { set fileName ${fileName}P } else { set fileName $fileName } exec python $fileName.py exec mv [RepertoireDuGenome]/$fileName.py [RepertoireDuGenome]/SchematicView/$f/. exec mv /home/luudao/www/ms2phdb/tmp/$fileName.png [RepertoireDuGenome]/SchematicView/$f/. } FinPasTouche $f } } proc Science {{Value ""}} { global Science if {$Value!=""} { set Science $Value } if {[info exists Science]} { return $Science } if {[info proc RepertoireDuGenome]!=""} { return [file tail [RepertoireDuGenome]] } return "ScienceUnknown" } proc ScienceEstPour {Qui Science} { return [string equal -nocase $Qui $Science] } proc ScienceEstPourAlvinella {Science} { return [regexp -nocase "^Alvin" $Science] } proc ScienceEstPourEviHs {Science} { return [regexp -nocase "^EVIhs$" $Science] } proc ScienceEstPourEviMm {Science} { return [regexp -nocase "^EVImm$" $Science] } proc ScienceEstPourFasabi {Science} { return [regexp -nocase "^Fasabi$" $Science] } proc ScienceEstPourGeneQuid {Science} { return [regexp -nocase "^GeneQuid$" $Science] } proc ScienceEstPourGenoret {Science} { return [regexp -nocase "^Genoret$" $Science] } proc ScienceEstPourGgHs {Science} { return [regexp -nocase "^GGhs$" $Science] } proc ScienceEstPourGgMm {Science} { return [regexp -nocase "^GGmm$" $Science] } proc ScienceEstPourGgwHs {Science} { return [regexp -nocase "^GGWhs$" $Science] } proc ScienceEstPourGgwMm {Science} { return [regexp -nocase "^GGWmm$" $Science] } proc ScienceEstPourGraphiste {Science} { return [regexp -nocase "^Graphiste$" $Science] } proc ScienceEstPourGscope {Science} { if {[file exists "/genomics/link/$Science"]} { return 1 } set GS [GenomicsSubDir $Science] if {[file exists $GS/$Science]} { return 1 } return 0 } proc ScienceEstPourGx {Science} { return [regexp -nocase "^Gx$" $Science] } proc ScienceEstPourOntology {Science} { return [regexp -nocase "^Onto" $Science] } proc ScienceEstPourQuidSeq {Science} { return [regexp -nocase "^QuidSeq$" $Science] } proc ScienceEstPourSpine {Science} { return [regexp -nocase "^Spine$" $Science] } proc ScienceEstPourSpliRet {Science} { return [regexp -nocase "^SpliRet" $Science] } proc ScienceEstPourSpliRetMouse {Science} { return [regexp -nocase "^SpliRetMouse$" $Science] } proc ScienceEstPourSpliRetRat {Science} { return [regexp -nocase "^SpliRetRat$" $Science] } proc ScienceEtCommandeDeQueryString {QS} { #rR ATTENTION il y a le meme en Base64Encode !!!!!!!!!!!! voir plus bas set i [string first "&" $QS] if {$i<0} { set Science $QS set NewQS "" } else { set Science [string range $QS 0 [expr $i-1]] set NewQS [string range $QS [expr $i+1] end] } if { ! [regexp -nocase {[a-z]} $NewQS]} { set NewQS "GuideMoi" } return [list $Science $NewQS] } proc ScienceIsPublic {{Science ""}} { if {$Science==""} { set Science [Science] } set PublicSciences [list SynMito Peroxisome Spine ImAnnoGenes Balibase KoAnno Actinome SpliRet SpliRetMouse SpliRetRat EVImm GGmm GGWmm EVIhs GGhs GGWhs YEAH Zero RetGene ProGS TroisPrima ] return [expr [lsearch $PublicSciences [Science]]>=0] } proc ScienceOiDeMonDomaine {} { set Science "OI" set Projet [file tail [RepertoireDuGenome]] if {$Projet=="OI"} { return "OI" } if {$Projet=="OIA"} { return "OIA" } if {$Projet=="OIB"} { return "OIB" } if {$Projet=="OIE"} { return "OI" } if {$Projet=="OIV"} { return "OIV" } if { ! [regexp {^([A-Z])[A-Z][a-z]+} $Projet Match Initial]} { return $Science } set Initial [string index $Projet 0] if {$Initial=="A"} { set Science "OIA" } if {$Initial=="B"} { set Science "OIB" } if {$Initial=="E"} { set Science "OI" } if {$Initial=="V"} { set Science "OIV" } return $Science } proc SciencePublic {Science} { if {$Science=="Peroxisome"} {return 1} if {$Science=="Balibase"} {return 1} if {$Science=="CR"} {return 1} return 0 } proc ScoCu {} { global LNDG SDG LNOrdali LSOrdali Sequences ListeScore LongueurTotale TableScore ListeDesPiliersDuGroupe puts "\n[DonneDateEtHeure]" set LNDG GroupeToutLeMonde # break points set Llim -99999999999. set v -2.0 while {$v < 2.01} { lappend Llim $v $v set v [expr {$v + 0.1}] } lappend Llim 99999999999. # PFAM set LfPfam [lsort [glob [file join /home moumou work moumou BenchPfam PF*]]] # Balibase set LfBali [list] set BDir /home/moumou/Balibase3/bb3_release set Ldir [lsort [glob -types d [file join $BDir RV*]]] foreach d $Ldir { lappend LfBali {*}[lsort [glob [file join $d *.msf]]] } set Lf [concat $LfPfam {*}$LfBali] set LMethods [list Norm Thompson Ranganatan VolPol Liu Liu2 RPCA Entrop1 Entrop2 EnpCube] set NAli 0 foreach f $Lf { puts "\n====================" puts "= [file tail $f]" puts "====================\n" set LNOrdali [list] ; set LSOrdali [list] if {[string range [file tail $f] 0 1] eq "PF"} { DecortiqueUnTFA $f LNOrdali Sequences } else { DecortiqueUnMSF $f LNOrdali Sequences } # codnition REJET if {[set nseq [llength $LNOrdali]] < 5} { unset -nocomplain Sequences puts "less than 5 sequnces" continue } set LongueurTotale [string length [set Sequences([lindex $LNOrdali 0])]] if {$LongueurTotale < 100} { unset -nocomplain Sequences puts "alignment too short !" continue } incr NAli set SAli [list] foreach n $LNOrdali { lappend SAli $n [set Sequences($n)] lappend LSOrdali [set Sequences($n)] } set SDG($LNDG) $LNOrdali CalculeLesPCIGenerique $SAli TDesPCI # moyenne et ecart-type set i 1 set m 0. ; set s2 0. foreach n1 [lrange $LNOrdali 0 end-1] { foreach n2 [lrange $LNOrdali $i end] { set v [lindex [set TDesPCI($n1,$n2)] 0] set m [expr {$m + $v}] set s2 [expr {$s2 + $v*$v}] } incr i } set Ni [expr {$nseq*($nseq-1)/2}] set m [expr {$m/$Ni}] set sd [expr {100.*sqrt($s2/$Ni - $m*$m)}] set m [expr {100.*$m}] # Recap puts "longueur : [string length [lindex $LSOrdali 0]]" puts "nbr seqs : [llength $LNOrdali]" puts "%Id m/sd : [format %6.2f $m] [format %6.2f $sd]" foreach meth $LMethods { ScoreDe$meth "" CreeListeScore "" "" NormalisationColonnes 1 set Lv [ExtraitListeDeListe $ListeScore 1] set Nv [llength $Lv] set Lres [file tail $f] foreach {l1 l2} $Llim { set Cnt 0 foreach v $Lv { incr Cnt [expr {$v > $l1 && $v <= $l2}] } lappend Lres [expr {double($Cnt)/$Nv}] } unset -nocomplain TableScore ListeScore lappend Tres($meth) $Lres } unset -nocomplain TDesPCI Sequences ListeDesPiliersDuGroupe } foreach meth $LMethods { set o [open ${meth}.dat w] foreach e [set Tres($meth)] { puts $o [join $e \t] } close $o } puts "\nNbr ali $NAli" puts "\n[DonneDateEtHeure]" exit } proc ScoreAffymetrixFinal {} { set Liste [CreeListeDeListesDansTemp] ScoreCompareAffymetrix $Liste 0 } proc ScoreAgentsPair {n1 a1 n2 a2} { global Wg Sequences TAg Mbl debug Cbl MblNeg set s1 $TAg($a1,$n1,seq) set s2 $TAg($a2,$n2,seq) set lg [string length $s1] #return [list [tnora $s1 $s2] 0.0] if {0} { # code pour si on a longueur motifs differ set l1 [string length $s1] set l2 [string length $s2] set diff [expr {int(abs($l1 - $l2)/2)}] if {$diff > 0} { if {$l1 > $l2} { set s1 [string range $s1 $diff end-$diff] set lg $l2 } else { set s2 [string range $s2 $diff end-$diff] set lg $l1 } } else { set lg $l1 } } set sc 0.0 ; set seuil 0.0 set i 0 foreach c1 [split $s1 ""] c2 [split $s2 ""] { # score symetrique #set sc [expr {$sc + $Wg($lg,$i)*(($Cbl($c1,$c2) - $Cbl($c1,classe)) + ($Cbl($c1,$c2) - $Cbl($c2,classe)))}] # seuil symetrique #set seuil [expr {$seuil + $Wg($lg,$i)*($Cbl($c1,classe) + $Cbl($c2,classe))}] # score symetrique #set sc [expr {$sc + $Wg($lg,$i)*$Cbl($c1,$c2)}] # score NON symetrique, la refernce est # le premier motif ! => arete orientee #set sc [expr {$sc + $Wg($lg,$i)*($Cbl($c1,$c2)-$Cbl($c1,classe))}] # seuil oriente, car se refere a motif 1 #set seuil [expr {$seuil + $Wg($lg,$i)*$Cbl($c1,classe)}] # seuil symetrique #set seuil [expr {$seuil + $Wg($lg,$i)*($Cbl($c1,classe) + $Cbl($c2,classe))/2.}] # score NON symetrique ! #set sc [expr {$sc + $Wg($lg,$i)*($Mbl($c1,$c2)-$Mbl($c1,classe))}] # score symetrique set sc [expr {$sc + $Wg($lg,$i)*$Mbl($c1,$c2)}] #set seuil [expr {$seuil + $Wg($lg,$i)*$Mbl($c1,classe)}] incr i } set sc [expr {$sc / $Wg($lg)}] set seuil [expr {$seuil / $Wg($lg)}] if {$debug} { #DebugAgents $n1 $a1 $n2 $a2 $sc $seuil } # Attention # selon la matrice, faut multiplier par -1. return [list $sc $seuil] #return [list [expr {-1.0 * $sc}] $seuil] #return [list $sc $seuil] if {$sc >= $seuil} { return [list $sc $seuil] } else { return [list "skip" $seuil] } } proc ScoreAl2Co {ListePil} { global LNDG SDG TableScore Sequences OrdTmpDir TableScore # Pour Shunter TableScore if {1} { foreach i [array names TableScore] { lappend TableScore($i) -999.0 } } return if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set fa [file join $OrdTmpDir [pid]_tmp_al2co.aln] set fo [file join $OrdTmpDir [pid]_tmp_al2co.out] CreeLeAln $fa if {[catch {set res [exec al2co -i $fa -o $fo -f 0]} Msg]} { # Attention ! on commence a 1 , donc <= for {set i 1} {$i <= [LongueurDeLAlignement]} {incr i} { lappend TableScore($i) -999.0 } } else { set L [LesLignesDuFichier $fo] set i 1 foreach l $L { if {[regexp {^\*} $l]} {break} lassign $l ix n c s if {$s eq "*"} {set c -999.0} lappend TableScore($i) $c incr i } } file delete -force $fa $fo return } proc ScoreAlignmentAgents {{aT ""}} { global Sequences LNOrdali if {$aT eq ""} { array set TSeq [array get Sequences] } else { upvar $aT TSeq } DonneMemeLongueur TSeq set i 1 set sc 0.0 foreach n1 [lrange $LNOrdali 0 end-1] { set s1 [set TSeq($n1)] foreach n2 [lrange $LNOrdali $i end] { set s2 [set TSeq($n2)] set sc [expr {$sc + [SumOfPairs $s1 $s2 1]}] } incr i } set sc [expr {$sc / [llength $LNOrdali]}] return $sc } proc ScoreBlockVsBlock {s1 s2 Lp1 Lp2} { if {$Lp1 == {} || $Lp2 == {}} { return 0 } if {$s1 > $s2} { set offset1 0 set offset2 [expr {$s1-$s2}] } elseif {$s2 > $s1} { set offset2 0 set offset1 [expr {$s2 - $s1}] } else { set offset1 0 set offset2 0 } set len [expr {min(([llength $Lp1]-$offset1),([llength $Lp2]-$offset2))}] set score 0.0 for {set i 0 ; set i1 $offset1 ; set i2 $offset2} {$i < $len} {incr i ; incr i1 ; incr i2} { set s 0.0 foreach v [lindex $Lp1 $i1] w [lindex $Lp2 $i2] { set s [expr {$s + $v*$w}] } set score [expr {$score + $s/1000.}] } if {$len > 0} { set score [expr {double($score)/$len}] } else { set score 0.0 } return $score } proc ScoreCompareAffymetrix {Liste {ListeInteret 0}} { set RepNuctfa "[GscopeDatabaseDir AffyHS]/nuctfa/" if {![file exists $RepNuctfa]} {return ""} #choisir la liste d interet if {$ListeInteret=="1"} { set Fichier [ButineArborescence All] set ListeDInteret [split [ContenuDuFichier $Fichier] " "] foreach Code $ListeDInteret { Espionne $Code set FichierNuctfa "$RepNuctfa/$Code" if {![file exists $FichierNuctfa]} {continue} foreach Ligne [LesLignesDuFichier $FichierNuctfa] { if {[regexp "^>" $Ligne]} { scan $Ligne "%s %s" CodeGscope CodeAffy set Vu($CodeAffy) 1 } } } } else {foreach FichierNuctfa [glob -nocomplain "$RepNuctfa/*"] { if {![file exists $FichierNuctfa]} {continue} foreach Ligne [LesLignesDuFichier $FichierNuctfa] { if {[regexp "^>" $Ligne]} { scan $Ligne "%s %s" CodeGscope CodeAffy set Vu($CodeAffy) 1 } } } } set Score 0 foreach PetiteListe $Liste { if {$PetiteListe==""} {continue} foreach Access $PetiteListe { if {! [info exists Vu($Access)]} { continue } else { Espionne $Access incr Score } } } return $Score } proc ScoreCompareProteineChristineEtAutre {Liste {ListeInteret 0}} { global RepertoireDuGenome set RepProtembl "$RepertoireDuGenome/protembl/" if {![file exists $RepProtembl]} {return ""} #choisir la liste d interet if {$ListeInteret=="1"} { set Fichier [ButineArborescence All] set ListeDInteret [split [ContenuDuFichier $Fichier] " "] foreach Code $ListeDInteret { Espionne $Code set FichierProtembl "$RepProtembl/$Code" if {![file exists $FichierProtembl]} {continue} foreach Ligne [LesLignesDuFichier $FichierProtembl] { scan $Ligne "%s" champ if {$champ!="AC"} { continue } else { regsub "AC" $Ligne "" Ligne regsub -all " " $Ligne "" Ligne regsub ";$" $Ligne "" Ligne set LesAccess [split $Ligne ";"] #Espionne $LesAccess foreach Access $LesAccess { set Vu($Access) 1 } } } } } else { foreach FichierProtembl [glob -nocomplain "$RepProtembl/*"] { if {![file exists $FichierProtembl]} {continue} foreach Ligne [LesLignesDuFichier $FichierProtembl] { scan $Ligne "%s" champ if {$champ!="AC"} { continue } else { regsub "AC" $Ligne "" Ligne regsub -all " " $Ligne "" Ligne regsub ";$" $Ligne "" Ligne set LesAccess [split $Ligne ";"] #Espionne $LesAccess foreach Access $LesAccess { set Vu($Access) 1 } } } } } set Score 0 foreach PetiteListe $Liste { if {$PetiteListe==""} {continue} foreach Access $PetiteListe { if {! [info exists Vu($Access)]} { continue } else { Espionne $Access incr Score } } } return $Score } proc ScoreDeBILD {ListePil {ThrGap ""}} { global BILDback BILDweight BILDalpha BILDAlpha if {! [info exists BILDback]} { lassign [InitScoreDeBILD] BILDback BILDweight BILDalpha BILDAlpha } set nseq [string length [lindex $ListePil 0]] if {$ThrGap eq ""} { set ThrGap [DefineGapThreshold $nseq] } set Laa [split "ARNDCQEGHILKMFPSTWYV" ""] set Lres [list] foreach p $ListePil { set pdg [string map {X "" Z "" " " "" "." "" - ""} $p] if {[set ntot [string length $pdg]] < $ThrGap} { lappend Lres -999.0 continue } set caa {} set count 0 foreach a $Laa { set n [expr {$ntot - [string length [string map [list $a ""] $pdg]]}] lappend caa $n incr count $n } set bild 0.0 ; set logprob 0.0 for {set m 0} {$m < 20} {incr m} { set logprob [expr { log([lindex $BILDweight $m]) + [::math::ln_Gamma [lindex $BILDAlpha $m]] - [::math::ln_Gamma [::tcl::mathop::+ [lindex $BILDAlpha $m] $count]]}] for {set i 0} {$i < 20} {incr i} { set logprob [expr {$logprob + [::math::ln_Gamma [::tcl::mathop::+ [lindex [lindex $BILDalpha $m] $i] [lindex $caa $i]]] - [::math::ln_Gamma [lindex [lindex $BILDalpha $m] $i]]}] } if {$m == 0} { set bild $logprob } elseif {$bild > $logprob} { set bild [expr {$bild + log(1.0+exp($logprob-$bild))}] } else { set bild [expr {$logprob+log(1.0+exp($bild-$logprob))}] } } for {set i 0} {$i < 20} {incr i} { set bild [expr {$bild - [lindex $caa $i]*log([lindex $BILDback $i])}] } set bild [expr {$bild / log(2.0)}] lappend Lres $bild } return $Lres } proc ScoreDeCaffrey {ListePil} { # Caffrey et al, 2004 # # C = -Tr(mxlog20(m)), Tr(m) = matrix trace = 1 # m : density matrix at column x, computed as # = mfreq x Blosum62 , mfreq beeing the # frequency matrix, all diagonal elements are aa # freaquencies and all other terms = 0 # Blosum is blosum62 frequencies matrix # # gap pen = nres/nseq # S= 1 - nres/nseq x C package require math::linearalgebra set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] # set-up matrices set Mb [::math::linearalgebra::mkMatrix 20 20 0.0] set Mf [::math::linearalgebra::mkMatrix 20 20 0.0] set Mr [::math::linearalgebra::mkMatrix 20 20 0.0] array set Mori [InitialiseBlosum62f] set Laa [split [set Mori(laa)] ""] set i 0 foreach a $Laa { set vec [list] foreach b $Laa { lappend vec [set Mori($a,$b)] } lset Mb $i $vec incr i } set Lv [list] foreach p $ListePil { set pdg [string map [list X "" Z "" " " "" "." ""] $p] if {[set lpdg [string length $pdg]] < $ThrGap} { lappend Lv -999.0 continue } set i 0 foreach a $Laa { set pk [expr {(double($lpdg-[string length [string map [list $a ""] $pdg]]))/double($lpdg)}] lset Mf $i $i $pk incr i } #puts "Mf :" #puts [::math::linearalgebra::show $Mf] #puts "" set Mr [::math::linearalgebra::matmul $Mf $Mb] #puts "Mr brute" #puts [::math::linearalgebra::show $Mr] #puts "" # scale so that Tr(Mr)=1 set sum 0.0 for {set i 0} {$i < 20} {incr i} { set sum [expr {$sum + [lindex [lindex $Mr $i] $i]}] } set sum [expr {1.0/$sum}] set Mr [::math::linearalgebra::scale $sum $Mr] #puts "Mr scaled $sum" #puts [::math::linearalgebra::show $Mr] #puts "" if {1} { # calcule Mr x log20(Mr) for {set i 0} {$i < 20} {incr i} { for {set j 0} {$j < 20} {incr j} { set x [lindex [lindex $Mr $i] $j] if {$x > 0} { set x [expr {$x*log($x)}] lset Mr $i $j $x } } } # c= -Tr(Mr) set sum 0.0 for {set i 0} {$i < 20} {incr i} { set sum [expr {$sum - [lindex [lindex $Mr $i] $i]/log(20.)}] } } else { # calcule vecteurs propres set Vp [lindex [::math::linearalgebra::determineSVD $Mr] 1] #set Vp [lindex [::math::linearalgebra::eigenvectorsSVD $Mr] 1] set svp 0.0 foreach v $Vp { set svp [expr {$svp + $v}] } puts "svp $svp\n" set sum 0 foreach v $Vp { if {$v > 0} { set sum [expr {$sum - $v*log($v)/log(20.)}] } } } lappend Lv [expr {double($lpdg)/$nseq*$sum}] } set tmp [lsort -real -unique $Lv] if {[set min [lindex $tmp 0]] == -999.0} { set min [lindex $tmp 1] } set max [lindex $tmp end] # revert set Lres [list] foreach v $Lv { if {$v != -999.0} { set v [expr {$max - $v + $min}] } lappend Lres $v } return $Lres } proc ScoreDeCapra {ListePil} { # Capra et all, 2007, bioinformatics # # RE(pk,q) = pk x ln(pk/q) # pk = probability of an aminoacid at site k # q = database proportion of an aminoacid # C = (RE(pk,r) + RE(q,r))/2, r=(pk + q)/2 # # # from MAFFT set aamafft "ARNDCQEGHILKMFPSTWYV" set freqaa [list 0.077 0.051 0.043 0.052 0.020 0.041 0.062 0.074 0.023 0.052 0.091 0.059 0.024 0.040 0.051 0.069 0.059 0.014 0.032 0.066] # from Ranganatan # set freqaa [list 0.072658 0.024692 0.050007 0.061087 0.041774 0.071589 0.023392 0.052691 0.063923 0.089093 0.023150 0.042931 0.052228 0.039871 0.052012 0.073087 0.055606 0.063321 0.012720 0.032955] # set aamafft "ACDEFGHIKLMNPQRSTVWY" set Laa [split $aamafft ""] set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set Lv [list] foreach p $ListePil { set pdg [string map [list X "" Z "" " " "" "." ""] $p] if {[set lpdg [string length $pdg]] < $ThrGap} { lappend Lv -999.0 continue } set v 0.0 foreach aa $Laa f $freqaa { set pk [expr {(double($nseq - [string length [string map [list $aa ""] $p]]))/double($nseq)}] set r [expr {($pk+$f)/2.}] if {$pk > 0} { set Rpkr [expr {$pk*log($pk/$r)}] } else { set Rpkr 0.0 } set Rqr [expr {$f*log($f/$r)}] set v [expr {$v + ($Rpkr + $Rqr)/2.}] } lappend Lv $v } return $Lv } proc ScoreDeEnpCube {{ngrp ""}} { global ListeDesPiliersDuGroupe LNDG TableScore TRPCA if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set nseq [string length [lindex $ListePil 0]] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lclas [list [list CIVLMFYW HNDEQKRST AGP] [list C IVLM FYW H NDE QKR STAGP] [list C IV LM FWY H ND EQ KR ST AG P] [list C I V L M F W Y H N D E Q K R S T A G P]] set LS [list] set Smax 0. foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 4} { lappend LS -999.0 continue } set sa 0. set ntotclas 0 foreach Lc $Lclas { set nclas [llength $Lc] incr ntotclas $nclas set p $pori foreach a $Lc { set n [regsub -all "\[$a\]" $p "" tmp] set r [expr {(double($n) + ($nseq-$ntot)/$nclas)/$nseq}] set sa [expr {$sa + $r*$r*$r}] } } set sa [expr {$sa/$ntotclas}] lappend LS $sa if {$sa > $Smax} {set Smax $sa} } set i 1 foreach s $LS { if {$s != -999.0} { #set s [expr {$Smax-$s}] } lappend TableScore($i) $s incr i } return } proc ScoreDeEntrop1 {ListePil} { # Moulinier and Wicker set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lclas [list [list CIVLMFYW HNDEQKRST AGP] [list C IVLM FYW H NDE QKR STAGP] [list C IV LM FWY H ND EQ KR ST AG P] [list C I V L M F W Y H N D E Q K R S T A G P]] set NbFam [llength $Lclas] set LS [list] set Smax 0. foreach pori $ListePil { set p [string map {X "" Z "" " " "" "." ""} $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend LS -999.0 continue } set sa 0. set ntotclas 0 foreach Lc $Lclas { set nclas [llength $Lc] incr ntotclas $nclas set p $pori foreach a $Lc { set n [regsub -all "\[$a\]" $p "" tmp] set r [expr {(double($n) + ($nseq-$ntot)/$nclas)/$nseq}] #set r [expr {(double($n) - ($nseq-$ntot)/$nclas)/$nseq}] if {$r > 0.0} { set sa [expr {$sa - $r*log($r)}] } } set sa [expr {$sa/log(double($nclas))}] } #set sa [expr {$sa/$ntotclas}] set sa [expr {$sa/$NbFam}] lappend LS $sa if {$sa > $Smax} {set Smax $sa} } set Lres [list] foreach s $LS { if {$s != -999.0} { set s [expr {$Smax - $s}] } lappend Lres $s } return $Lres } proc ScoreDeEntrop2 {{ngrp ""}} { global ListeDesPiliersDuGroupe LNDG TableScore TRPCA if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set nseq [string length [lindex $ListePil 0]] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lclas [list [list CIVLMFYW HNDEQKRST AGP] [list C IVLM FYW H NDE QKR STAGP] [list C IV LM FWY H ND EQ KR ST AG P] [list C I V L M F W Y H N D E Q K R S T A G P]] set LS [list] set Smax 0. foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 4} { lappend LS -999.0 continue } set sa 0. set ntotclas 0 foreach Lc $Lclas { set nclas [llength $Lc] incr ntotclas $nclas set p $pori foreach a $Lc { set n [regsub -all "\[$a\]" $p "" tmp] set r [expr {(double($n) + ($nseq-$ntot)/$nclas)/$nseq}] if {$r == 0.0} {continue} set sa [expr {$sa - $r*log($r)}] } } set sa [expr {$sa/$ntotclas}] lappend LS $sa if {$sa > $Smax} {set Smax $sa} } set i 1 foreach s $LS { if {$s != -999.0} { set s [expr {exp(-1.0*$s)}] } lappend TableScore($i) $s incr i } return } proc ScoreDeEntrop3 {{ngrp ""}} { global ListeDesPiliersDuGroupe LNDG TableScore TRPCA if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set nseq [string length [lindex $ListePil 0]] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lclas [list [list CIVLMFYW HNDEQKRST AGP] [list C IVLM FYW QNDE KRH STAGP] [list C I V L M F W Y H N D E Q K R S T A G P]] set LS [list] set Smax 0. foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 4} { lappend LS -999.0 continue } set sa 0. set ntotclas 0 foreach Lc $Lclas { set nclas [llength $Lc] incr ntotclas $nclas set p $pori foreach a $Lc { set n [regsub -all "\[$a\]" $p "" tmp] set r [expr {(double($n) + ($nseq-$ntot)/$nclas)/$nseq}] if {$r == 0.0} {continue} set sa [expr {$sa - $r*log($r)}] } } set sa [expr {$sa/$ntotclas}] lappend LS $sa if {$sa > $Smax} {set Smax $sa} } set i 1 foreach s $LS { if {$s != -999.0} { set s [expr {$Smax - $s}] } lappend TableScore($i) $s incr i } return } proc ScoreDeEntrop4 {{ngrp ""}} { global ListeDesPiliersDuGroupe LNDG TableScore TRPCA if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set nseq [string length [lindex $ListePil 0]] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lclas [list [list CIVLMFYW HNDEQKRST AGP] [list C IVLM FYW QNDE KRH STAGP] [list C I V L M F W Y H N D E Q K R S T A G P]] set LS [list] set Smax 0. foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 4} { lappend LS -999.0 continue } set sa 0. set ntotclas 0 foreach Lc $Lclas { set nclas [llength $Lc] set p $pori foreach a $Lc { set n [regsub -all "\[$a\]" $p "" tmp] set r [expr {(double($n) + ($nseq-$ntot)/$nclas)/$nseq}] if {$r == 0.0} {continue} set sa [expr {$sa - $r*log($r)}] incr ntotclas } } set sa [expr {$sa/$ntotclas}] lappend LS $sa if {$sa > $Smax} {set Smax $sa} } set i 1 foreach s $LS { if {$s != -999.0} { set s [expr {exp(-1.0*$s)}] } lappend TableScore($i) $s incr i } return } proc ScoreDeEntrop5 {{ngrp ""}} { global ListeDesPiliersDuGroupe LNDG TableScore TRPCA if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set nseq [string length [lindex $ListePil 0]] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lclas [list [list C IVLM FYW QNDE KRH STAGP] [list C I V L M F W Y H N D E Q K R S T A G P]] set LS [list] set Smax 0. foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 4} { lappend LS -999.0 continue } set sa 0. set ntotclas 0 foreach Lc $Lclas { set nclas [llength $Lc] set p $pori foreach a $Lc { set n [regsub -all "\[$a\]" $p "" tmp] set r [expr {(double($n) + ($nseq-$ntot)/$nclas)/$nseq}] if {$r == 0.0} {continue} set sa [expr {$sa - $r*log($r)}] incr ntotclas } } set sa [expr {$sa/$ntotclas}] lappend LS $sa if {$sa > $Smax} {set Smax $sa} } set i 1 foreach s $LS { if {$s != -999.0} { set s [expr {$Smax - $s}] } lappend TableScore($i) $s incr i } return } proc ScoreDeEntrop6 {{ngrp ""}} { global ListeDesPiliersDuGroupe LNDG TableScore TRPCA if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set nseq [string length [lindex $ListePil 0]] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lclas [list [list C IVLM FYW QNDE KRH STAGP] [list C I V L M F W Y H N D E Q K R S T A G P]] set LS [list] set Smax 0. foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 4} { lappend LS -999.0 continue } set sa 0. set ntotclas 0 foreach Lc $Lclas { set nclas [llength $Lc] set p $pori foreach a $Lc { set n [regsub -all "\[$a\]" $p "" tmp] set r [expr {(double($n) + ($nseq-$ntot)/$nclas)/$nseq}] if {$r == 0.0} {continue} set sa [expr {$sa - $r*log($r)}] incr ntotclas } } set sa [expr {$sa/$ntotclas}] lappend LS $sa if {$sa > $Smax} {set Smax $sa} } set i 1 foreach s $LS { if {$s != -999.0} { set s [expr {exp(-1.0*$s)}] } lappend TableScore($i) $s incr i } return } proc ScoreDeKabat {ListePil} { # Wu TT, Kabat EA. An analysis of the sequences of the variable regions of Bence Jones proteins and myeloma light chains and their implications for antibody complementarity. J Exp Med 1970; 132: 211–249. # # V = k/n1xN # k : number of different kind of aa in column # n1 : number of times the most present aa in col # N : number of seqs set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set Lv [list] foreach pori $ListePil { set p [string map [list X "" Z "" " " "" "." "" "-" ""] $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend Lv -999.0 continue } set nkind 0 ; set nmax 0 foreach a $ListeAA { set n [expr {$ntot - [string length [string map [list $a ""] $p]]}] if {$n > 0} { if {$n > $nmax} { set nmax $n } incr nkind } } set v [expr {double($nkind)/double($nmax)*double($nseq)}] lappend Lv $v } set tmp [lsort -real -unique $Lv] if {[set min [lindex $tmp 0]] == -999.0} { set min [lindex $tmp 1] } set max [lindex $tmp end] # revert set Lres [list] foreach v $Lv { if {$v != -999.0} { set v [expr {$max - $v + $min}] } lappend Lres $v } # WARNING ! # highest score of Kabat depends on the number of seqs ! return $Lres } proc ScoreDeKarlin {ListePil} { # Karlin # # C(x) = sum_ixsum_j>i M(a,b)x 2/(N(N-1)) # M(a,b) = m(a,b)/sqrt(m(a,a)xm(b,b)) # m is the blosum62 matrix set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] # scale matrix array set Mori [InitClustalMatrix blosum62] set Lnon [list average X laa] foreach k [array names Mori] { lassign [split $k ,] a b if {$a eq $b || $a in $Lnon || $b in $Lnon} { set Tmat($a,$a) 1.0 } else { set Tmat($a,$b) [expr {double([set Mori($a,$b)])/sqrt([set Mori($a,$a)]*[set Mori($b,$b)])}] } } set Lv [list] foreach p $ListePil { set pdg [string map [list X "" Z "" U "" B "" J "" " " "" "." "" "-" ""] $p] if {[set lpdg [string length $pdg]] < $ThrGap} { lappend Lv -999.0 continue } set i -1 ; set sum 0.0 set Ltpdg [split $pdg ""] foreach a $Ltpdg { incr i foreach b [lrange $Ltpdg $i+1 end] { set sum [expr {$sum + [set Tmat($a,$b)]}] } } lappend Lv [expr {$sum * 2./($nseq*($nseq-1))}] } return $Lv } proc ScoreDeLaRegionPromAnFromMAF {LeProfiln LeProfilN {DQ ""} {FQ ""}} { ### Rend un score, nSurNMoyen, a partir du maf pour chaque region definie par DQ et FQ ### ### n est, pour chaque position de la query, ### le nb de seq dont le res aligne a cette position est identique au residu de la query ### N est le nb de seq presentes dans un block d'alignement pour chaque position de la query set nSurNMoyen 0 for {set Pos $DQ} {$Pos <= $FQ} {incr Pos} { #Espionne "DQ: $DQ ; FQ: $FQ ; Pos: $Pos" set n [lindex $LeProfiln [expr $Pos - 1]] set N [lindex $LeProfilN [expr $Pos - 1]] if {$n == 1 || ($n == 1 && $N == 1)} {set nSurN 0} else {set nSurN [expr $n * 1.0 / $N]} #Espionne "nSurN: $nSurN" set nSurNMoyen [expr $nSurNMoyen + $nSurN] } return [expr $nSurNMoyen / ($FQ - $DQ +1)] } proc ScoreDeLiu {ListePil} { global ListeDesAcidesAmines TBLiu if {! [info exists TBLiu]} { InitialiseBLiu } set ListeAA [lrange $ListeDesAcidesAmines 0 end-1] set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set Lres [list] foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend Lres -999.0 continue } set nmax -1 foreach a $ListeAA { if {[set n [regsub -all $a $p "" tmp]] > $nmax} { set nmax $n set amax $a } } set s 0. foreach a $ListeAA { set n [regsub -all $a $p "" p] if {! $n} {continue} set s [expr {$s + double($n)*log([set TBLiu($amax,$a)])}] } set s [expr {$s/double($nseq)}] lappend Lres $s } return $Lres } proc ScoreDeLiu2 {ListePil} { global TBLiu ListeDesAcidesAmines if {! [info exists TBLiu]} { InitialiseBLiu } set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set Lres [list] foreach pori $ListePil { set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend Lres -999.0 continue } set nmax -1 foreach a $ListeAA { if {[set n [regsub -all $a $p "" tmp]] > $nmax} { set nmax $n set amax $a } } set s 0. foreach a $ListeAA { set n [expr {$ntot - [string length [string map [list $a ""] $p]]}] if {! $n} {continue} set s [expr {$s + double($n)*[set TBLiu($amax,$a)]}] } set s [expr {$s/double($nseq)}] lappend Lres $s } return $Lres } proc ScoreDeNorm {ListePil {MyThrGap ""}} { global Rosace if {! [info exists Rosace]} {InitialiseRosace} set ListeAA [list A C D E F G H I K L M N P Q R S T V W Y] set nseq [string length [lindex $ListePil 0]] if {$MyThrGap eq ""} { set ThrGap [DefineGapThreshold $nseq] } else { set ThrGap $MyThrGap } set Lres [list] foreach pori $ListePil { set p [string map {B "" J "" X "" Z "" " " "" "." ""} $pori] if {[set ntot [string length $p]] < $ThrGap} { puts "$p $ntot $ThrGap" lappend Lres -999.0 continue } set sn 0. set Vp {0.0 0.0} foreach a $ListeAA { set n [expr {$ntot - [string length [string map [list $a ""] $p]]}] if {! $n} {continue} set Vp [V_VV $Vp + [V_SV $n * [set Rosace($a)]]] set sn [expr {$sn + $n * [set Rosace(Norm$a)]}] } # norme vecteur resultant set nVp [S_nV $Vp] # Somme des normes set SnV $sn set norm [expr {($nVp/$sn)*$ntot/$nseq}] lappend Lres $norm } return $Lres } proc ScoreDePeivar {ListePil} { # Pei et all 2001 # # S = sqrt(sum_1^20(pk(i)-p(i))**2) # pk(i) = proportion of i at site k # p(i) = proportion of i in the alignment set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set ListeAA [list A C D E F G H I K L M N P Q R S T V W Y] foreach aa $ListeAA { set ntot$aa 0 } set Lv [list] foreach p $ListePil { set pdg [string map [list X "" Z "" " " "" "." "" "-" ""] $p] if {[set lpdg [string length $pdg]] < $ThrGap} { lappend Lv -999.0 continue } set vec $lpdg foreach aa $ListeAA { set naa [expr {$lpdg - [string length [string map [list $aa ""] $pdg]]}] incr ntot$aa $naa lappend vec $naa } lappend Lv $vec } set ntot 0 foreach aa $ListeAA { incr ntot [set ntot$aa] } set Lres [list] foreach v $Lv { if {$v == -999.} { lappend Lres $v continue } set nv [lindex $v 0] set sum 0.0 foreach aa $ListeAA x [lrange $v 1 end] { set sum [expr {$sum + ((double($x)/$nv)-(double([set ntot$aa])/$ntot))**2}] } lappend Lres [expr {sqrt($sum)}] } return $Lres } proc ScoreDeRPCA {ListePil} { global TRPCA if {! [info exists TRPCA]} {InitialiseRPCA} set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set ListeAA [split "ARNDCQEGHILKMFPSTWYV" ""] set Lres [list] foreach pori $ListePil { set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend Lres -999.0 continue } set sn 0. set Vp [list 0.0 0.0 0.0] foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} set Vp [V_VV $Vp + [V_SV $n * [set TRPCA($a)]]] set sn [expr {$sn+$n*[set TRPCA(Norm$a)]}] } set nVp [S_nV $Vp] set C [expr {$nVp/$sn*$ntot/$nseq}] lappend Lres $C } return $Lres } proc ScoreDeRanganatan {ListePil} { global ListeDesAcidesAmines # from MAFFT # set freqaa [list 0.077 0.051 0.043 0.052 0.020 0.041 0.062 0.074 0.023 0.052 0.091 0.059 0.024 0.040 0.051 0.069 0.059 0.014 0.032 0.066] # set aamafft "ARNDCQEGHILKMFPSTWYV" # from Ranganatan set freqaa [list 0.072658 0.024692 0.050007 0.061087 0.041774 0.071589 0.023392 0.052691 0.063923 0.089093 0.023150 0.042931 0.052228 0.039871 0.052012 0.073087 0.055606 0.063321 0.012720 0.032955] set aamafft "ACDEFGHIKLMNPQRSTVWY" set sp 0. foreach s $freqaa { set sp [expr {$sp+$s}] } # puts "somme des frequences naturelles : $sp" set ListeAA [split $aamafft ""] foreach a $ListeAA f $freqaa { set Fnat($a) $f } set nseqs [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseqs] # Calcul proba sur l'ensemble de l'alignement set N $nseqs foreach a $ListeAA { set n [expr {[set Fnat($a)]*$N}] set LnpA($a) [CalculeLogProba2 $N $n [set Fnat($a)]] } # Calcule proba sur chaque colonne set N $nseqs if {$N < 170} { set Fct "CalculeLogProba1" } else { set Fct "CalculeLogProba2" } set Lres [list] foreach p $ListePil { set p [string map [list B "" J "" Z "" X "" "." "" " " ""] $p] if {[string length $p] < $ThrGap} { lappend Lres -999.0 continue } set sum 0. set na [string length $p] foreach a $ListeAA { set n [expr {$na - [string length [string map [list $a ""] $p]]}] if {! $n} {continue} set f [set Fnat($a)] set Lnp [CalculeLogProba2 $N $n $f] set sum [expr {$sum+pow($Lnp-[set LnpA($a)],2)}] } set dG [expr {sqrt($sum)}] # set dG [expr {sqrt($sum)*$na/$nseqs}] # set dG [expr {(sqrt($sum)*$na)/20.}] # set dG [expr {sqrt($sum)*0.0001*$na}] # if {$i > 200 && $i < 221} {puts "pos $i dG $dG"} lappend Lres $dG } return $Lres } proc ScoreDeRosace {{ngrp ""}} { global ListeDesAcidesAmines ListeDesPiliersDuGroupe LNDG TableScore Rosace if {! [info exists Rosace]} {InitialiseRosace} if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set ListeAA [lrange $ListeDesAcidesAmines 0 end-1] set nseq [string length [lindex $ListePil 0]] set i 1 set Angx -999.0 ; set Angn 999.0 set SfMin 9999999. ; set SfMax -9999999.0 foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 4} { lappend TableScore($i) -999.0 -999.0 -999.0 -999.0 incr i continue } set sn 0. set Vp [list 0.0 0.0] set Angle 0. set surf 0. foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} set Vp [V_VV $Vp + [V_SV $n * [set Rosace($a)]]] set sn [expr {$sn + $n * [set Rosace(Norm$a)]}] } # norme vecteur resultant set nVp [S_nV $Vp] # Somme des normes set SnV $sn # param 1 : Norm set norm [expr {($nVp/$sn)*$ntot/$nseq}] foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} # param 2 : Somme surfaces triangles set Va [set Rosace($a)] set NVa [V_SV $n * $Va] set nVa [expr {$n * [set Rosace(Norm$a)]}] set Vc [V_VV $Vp - $NVa] set nVc [S_nV $Vc] set st [SurfaceTriangle $nVa $nVc $nVp] set surf [expr {$surf + $st}] # param 3 : Somme angles set sca [S_VV $Vp * $NVa] set cos [expr {$sca/($nVa*$nVp)}] if {$cos <= -1.0} { set Angle [expr {$Angle + $n * 180.}] } elseif {$cos > -1. && $cos < 1.} { set Angle [expr {$Angle + $n * acos($cos)*180./[Pi]}] } } # param 2 : Surface if {$surf > $SfMax} {set SfMax $surf} if {$surf < $SfMin} {set SfMin $surf} #set srf [expr {exp(-1.0*$surf)*$ntot/$nseq}] #set srf2 [expr {exp(-1.0*$surf*$ntot/$nseq)}] #set srf3 [expr {exp(-1.0*sqrt($surf))}] set srft [expr {sqrt($surf)/$nVp*$ntot/$nseq}] # set srft2 [expr {exp(-1.0*sqrt($surf)/$nVp*$ntot/$nseq)}] set srft3 [expr {exp(-1.0*sqrt($surf)/$nVp)*$ntot/$nseq}] if {$Angle > $Angx} {set Angx $Angle} if {$Angle < $Angn} {set Angn $Angle} set Angle [expr {$Angle*$ntot/$nseq}] # write # on a norm srf nVp lappend TableScore($i) $norm $srft $Angle $srft3 incr i } if {0} { foreach i [array names TableScore] { set l [set TableScore($i)] lset l 1 [expr {$SfMax+$SfMin-[lindex $l 1]}] lset l 2 [expr {$Angx+$Angn-[lindex $l 2]}] set TableScore($i) $l } } return } proc ScoreDeRosace2 {{ngrp ""}} { global ListeDesAcidesAmines ListeDesPiliersDuGroupe LNDG TableScore Rosace if {! [info exists Rosace]} {InitialiseRosace} if {! [info exists ListeDesPiliersDuGroupe]} {CreeLesPiliers} if {$ngrp eq ""} {set ngrp [lindex $LNDG 0]} set ListePil [set ListeDesPiliersDuGroupe($ngrp)] set ListeAA [lrange $ListeDesAcidesAmines 0 end-1] set nseq [string length [lindex $ListePil 0]] # Pre-calcule Normes des vecteurs de la rosace foreach a $ListeAA { set NormRos($a) [S_nV [set Rosace($a)]] } set i 1 set DNmax -99999. ; set DNmin 99999. set SfMin 999. ; set SfMax -999. foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < 2} { lappend TableScore($i) -999.0 -999.0 -999.0 -999.0 incr i continue } set sx 0. set sy 0. set sn 0. foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} lassign [set Rosace($a)] x y set sx [expr {$sx + $n*$x}] set sy [expr {$sy + $n*$y}] set sn [expr {$sn+$n*[set NormRos($a)]}] } # vecteur resultant set Vp [list $sx $sy] # norme vecteur resultant set nVp [S_nV $Vp] # Somme des normes set SnV $sn # param 1 : Norm set norm [expr {($nVp/$sn)*$ntot/$nseq}] set norm2 [expr {($nVp/$sn)/$nseq}] # set norm [expr {($nVp / ($maxa*$ntot)) * $ntot/$nseq}] # param 2 : Somme surfaces triangles set surf 0. set surf2 0. set Angle 0. foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} set Va [set Rosace($a)] set nVa [set NormRos($a)] # 1er methode : n * surface(Va,Vp,Vc) set Vc [V_VV $Vp - $Va] set nVc [S_nV $Vc] set surf [expr {$surf + $n * [SurfaceTriangle $nVa $nVp $nVc]}] # 2eme methode : calcule NVA, puis surface set Na [V_SV $n * $Va] set nNa [expr {$n * [set NormRos($a)]}] set Nc [V_VV $Vp - $Na] set nNc [S_nV $Nc] set surf2 [expr {$surf2 + [SurfaceTriangle $nVp $nNa $nNc]}] # Calcul angle entre Va et Vp set sca [S_VV $Vp * $Va] set Angle [expr {$Angle + $n * acos($sca/($nVa*$nVp))*180./[Pi]}] } if {$surf > $SfMax} {set SfMax $surf} if {$surf < $SfMin} {set SfMin $surf} set srf [expr {exp(-1.0*$surf)*$ntot/$nseq}] set srf2 [expr {exp(-1.0*$surf*$ntot/$nseq)}] set srf3 [expr {exp(-1.0*sqrt($surf))}] set srf4 [expr {exp(-1.0*sqrt($surf)*$ntot/$nseq)}] puts [format "%3d %7.4f %7.4f %7.4f %7.4f %7.4f" $i $surf $surf2 $Angle $srf2 $srf3] # param 3 : rien # write # on a norm srf nVp lappend TableScore($i) $norm $srf2 $nVp $srf3 incr i } puts "surf max $SfMax" puts "surf min $SfMin" return } proc ScoreDeSanderSP {ListePil Ln LPCI} { # Sander and Schneider 1991 # weighted sum of pairs # # Sk = scale x sum_i^N sum_j>i^N wijxM(a,b) # scale = 1./(sum_i,j wij) # M(a,b) = M(a,b)/sqrt(M(a,a)xM(b,b)) set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] # weighting scale set scale 0.0 foreach {k v} $LPCI { lassign [split $k ,] a b if {$a ne $b} { if {! [info exists T($a,$b)]} { set scale [expr {$scale + (1. - [lindex $v 0])}] set T($a,$b) 1 set T($b,$a) 1 } } } unset T set scale [expr {1.0/$scale}] # scale matrix #array set Mori [InitClustalMatrix pam250] array set Mori [InitClustalMatrix blosum62] set Lnon [list average X laa] foreach k [array names Mori] { lassign [split $k ,] a b if {$a eq $b || $a in $Lnon || $b in $Lnon} { set Tmat($a,$a) 1.0 } else { set Tmat($a,$b) [expr {double([set Mori($a,$b)])/sqrt([set Mori($a,$a)]*[set Mori($b,$b)])}] } } # main loop array set T $LPCI set Lv [list] set Laa [list A C D E F G H I K L M N P Q R S T V W Y] foreach p $ListePil { set pdg [string map [list X "" Z "" " " "" "." ""] $p] if {[string length $pdg] < $ThrGap} { lappend Lv -999.0 continue } set v 0.0 set Lp [split $p ""] set i -1 foreach ca $Lp { incr i if {$ca ni $Laa} { continue } set a [lindex $Ln $i] set j $i foreach cb [lrange $Lp $i+1 end] { incr j if {$cb ni $Laa} { continue } set b [lindex $Ln $j] set v [expr {$v + (1.0 - [lindex [set T($a,$b)] 0])*[set Tmat($ca,$cb)]}] } } lappend Lv [expr {$scale*$v}] } return $Lv } proc ScoreDeSurf {ListePil} { global ListeDesAcidesAmines Rosace if {! [info exists Rosace]} {InitialiseRosace} set ListeAA [lrange $ListeDesAcidesAmines 0 end-1] set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set SfMax -99999999.0 set LS [list] foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend LS -999.0 continue } set Vp [list 0.0 0.0] foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} set Vp [V_VV $Vp + [V_SV $n * [set Rosace($a)]]] } set surf 0. foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} set NVa [V_SV $n * [set Rosace($a)]] set vec [V_VV $Vp * $NVa] set surf [expr {$surf + 0.5*[S_nV $vec]}] } set srft [expr {$surf * $ntot / $nseq}] #set srft [expr {sqrt($surf)/$nVp*$ntot/$nseq}] lappend LS $srft if {$srft > $SfMax} {set SfMax $srft} } set Lres [list] foreach s $LS { if {$s != -999.0} { set s [expr {$SfMax - $s}] } lappend Lres $s } return $Lres } proc ScoreDeThompson {ListePil {ThrGap ""}} { global ListeDesAcidesAmines DistBlosum if {! [info exists DistBlosum]} { InitTBlosum gon250 } set ListeAA [lrange $ListeDesAcidesAmines 0 end-1] set nseq [string length [lindex $ListePil 0]] if {$ThrGap eq ""} { set ThrGap [DefineGapThreshold $nseq] } set Lres [list] foreach pori $ListePil { incr i set p [string map {X "" Z "" "." "" " " ""} $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend Lres -999.0 continue } set d 0. set npw [expr {$ntot*$ntot}] set j 0 foreach a [lrange $ListeAA 0 end-1] { set n [regsub -all "$a" $p "" tmp] incr j if {! $n} {continue} foreach b [lrange $ListeAA $j end] { set m [regsub -all "$b" $p "" tmp] if {! $m} {continue} set d [expr {$d+$n*$m*[set DistBlosum($a,$b)]}] } } set dist [expr {double($ntot)/$nseq*exp(-1.*$d/$npw)*100.}] lappend Lres $dist } return $Lres } proc ScoreDeValdar {ListePil Ln LPCI} { # Valdar and Thornton, 2002 # # C= lambdaxsum_i^Nsum_j>i^N wiwjxM(Si(x)Sj(x)) # N : nbr sequences # lambda : (sum_i^Nsum_j>i^N wiwj)-1 # wi : weight of sequence Si # # wi = 1/(N-1)sum_i!=j^N d(Si,Sj) # d(Si,Sj) = distance from sequence Si to Sj , # = 1- 1/nALIxsum_x=1^NALI M(Si(x),Sj(x)) # nALI : nbr of positions that have aa in Si and/or Sj # # set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] # PET matrix set Lmat [InitialisePET91] set Lmat [lsort -stride 2 -index 1 -real $Lmat] set min [expr {double([lindex $Lmat 1])}] set max [expr {double([lindex $Lmat end])}] # scale matrix array set Mori $Lmat set Lnon [list average X laa] foreach k [array names Mori] { lassign [split $k ,] a b if {$a ni $Lnon && $b ni $Lnon} { set Tmat($a,$b) [expr {(double([set Mori($a,$b)])-$min)/($max-$min)}] } set Tmat($a,.) 0. ; set Tmat(.,$a) 0. set Tmat($b,.) 0. ; set Tmat(.,$b) 0. } # weight calculation array set T $LPCI set Lw [list] foreach n $Ln { set w 0.0 foreach t $Ln { if {$t ne $n} { set w [expr {$w + (1. - [lindex [set T($n,$t)] 0])}] } } lappend Lw [expr {$w/($nseq-1)}] } # scale calculation set scale 0.0 set i 1 foreach w1 [lrange $Lw 0 end-1] { foreach w2 [lrange $Lw $i end] { set scale [expr {$scale + $w1*$w2}] } incr i } set scale [expr {2.0 / $scale}] set Lv [list] set Laa [list A C D E F G H I K L M N P Q R S T V W Y] foreach pori $ListePil { set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[string length $p] < $ThrGap} { lappend Lv -999.0 continue } set val 0.0 set Lp [split $pori ""] set i -1 foreach a $Lp wi $Lw { incr i foreach b [lrange $Lp $i+1 end] wj [lrange $Lw $i+1 end] { if {$a in $Laa && $b in $Laa} { set val [expr {$val + $wi*$wj*[set Tmat($a,$b)]}] } } } lappend Lv [expr {$scale * $val}] } return $Lv } proc ScoreDeVolPol {ListePil} { global ListeDesAcidesAmines VolPol # Base sur volume - polarite if {! [info exists VolPol]} { InitialiseVolPol } set ListeAA [lrange $ListeDesAcidesAmines 0 end-1] set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set Lres [list] foreach pori $ListePil { set p $pori set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend Lres -999.0 continue } set sn 0. set Vp [list 0.0 0.0] foreach a $ListeAA { set n [regsub -all "$a" $p "" tmp] if {! $n} {continue} set Vp [V_VV $Vp + [V_SV $n * [set VolPol($a)]]] set sn [expr {$sn + $n*[set VolPol(Norm$a)]}] } set nVp [S_nV $Vp] set C [expr {$nVp/$sn*$ntot/$nseq}] lappend Lres $C } return $Lres } proc ScoreDeWang {ListePil} { # Wang , 2006 # # C = sum_1^20 pkxlog(pk/f) # pk = frequency of aa at position x # f = observed frequency of aa in databases # from MAFFT set aamafft "ARNDCQEGHILKMFPSTWYV" set freqaa [list 0.077 0.051 0.043 0.052 0.020 0.041 0.062 0.074 0.023 0.052 0.091 0.059 0.024 0.040 0.051 0.069 0.059 0.014 0.032 0.066] # from Ranganatan # set freqaa [list 0.072658 0.024692 0.050007 0.061087 0.041774 0.071589 0.023392 0.052691 0.063923 0.089093 0.023150 0.042931 0.052228 0.039871 0.052012 0.073087 0.055606 0.063321 0.012720 0.032955] # set aamafft "ACDEFGHIKLMNPQRSTVWY" set Laa [split $aamafft ""] set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set Lv [list] foreach p $ListePil { set pdg [string map [list X "" Z "" " " "" "." ""] $p] if {[string length $pdg] < $ThrGap} { lappend Lv -999.0 continue } set v 0.0 foreach aa $Laa f $freqaa { set pk [expr {double($nseq - [string length [string map [list $aa ""] $p]])/$nseq}] if {$pk > 0.0} { set v [expr {$v + $pk*log($pk/$f)}] } } lappend Lv $v } return $Lv } proc ScoreDeWilliamson {ListePil} { # Williamson RM. Information theory analysis of the # relationship between primary sequence structure and # ligand recognition among a class of facilitated # transporters. # J Theor Biol 1995; 174: 179 # # # V = sum_i^K Pixln(Pi/Pmi) # K=9 : # [VLIM] [FWY] [ST] [NQ] [HKR] [DE] [AG] [P] [C]. # Pi : fractional frequency for classe i # Pmi : fractional frequancy for class i over the whole alignment # This score does not account for gaps. set nseq [string length [lindex $ListePil 0]] set ThrGap [DefineGapThreshold $nseq] set Lclas [list VLIM FWY ST NQ HKR DE AG P C] foreach c $Lclas { set sum$c 0 } set Lpat [list [list V "" L "" I "" M ""] [list F "" W "" Y ""] [list S "" T ""] [list N "" Q ""] [list R "" H "" K ""] [list D "" E ""] [list A "" G ""] [list C ""] [list P ""]] set Lres [list] set nRTot 0 foreach pori $ListePil { set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[set ntot [string length $p]] < $ThrGap} { lappend Lres -999.0 continue } incr nRTot $ntot set ltmp [list] foreach c $Lclas pat $Lpat { set n [expr {$ntot - [string length [string map $pat $p]]}] incr sum$c $n lappend ltmp [expr {double($n)/$ntot}] } lappend Lres $ltmp } if {$nRTot == 0} { puts "Something wrong !\nNo residues !" return [lrepeat [llength $ListePil] -999.0] } # compute global fractions foreach c $Lclas { set f$c [expr {double([set sum$c])/$nRTot}] } # reprend tout set Lv [list] set smax -9999999999999999. set smin 9999999999999999. foreach r $Lres { if {$r == -999.0} { lappend Lv $r } else { set s 0.0 foreach c $Lclas v $r { if {$v > 0 && [set f$c] > 0.0} { set s [expr {$s + $v*log($v/[set f$c])}] } } if {$s > $smax} {set smax $s} if {$s < $smin} {set smin $s} lappend Lv $s } } # revert the list set Lres [list] foreach r $Lv { if {$r != -999.0} { set r [expr {$smax - $r + $smin}] } lappend Lres $r } return $Lres } proc ScoreExe {Largs} { global Sequences LNOrdali LSOrdali ListeDesPiliersDuGroupe LNDG SDG TbScores ListeScore LongueurTotale ConsMeth puts "[join $Largs]" lassign $Largs pkpfam fpfam Lmscore mclus # use executable -> exe or library -> lib #set how "exe" set how "lib" unset -nocomplain Sequences LNOrdali LSOrdali unset -nocomplain SDG LNDG TbScores ListeDesPiliersDuGroupe LongueurTotale if {[info commands thread::id] ne ""} { set tid [thread::id] } else { set tid [pid] } set pfamid [lindex [split [file tail $fpfam] .] 0] # lit le fichier DecortiqueUnTFA $fpfam LNOrdali Sequences set LongueurTotale [string length [set Sequences([lindex [array names Sequences] 0])]] if {"SanderSP" in $Lmscore || "Valdar" in $Lmscore} { set Lns [list] foreach n $LNOrdali { lappend Lns $n [set Sequences($n)] } set LPCI [CalculeLesPCIGenerique $Lns] } # calcule score set LNDG GroupeToutLeMonde set SDG(GroupeToutLeMonde) $LNOrdali CreeLesPiliers # prepare pour scores set TbScores(Lcols) $Lmscore if {[llength $Lmscore] > 1} { set Scale 1 } else { set Scale 0 } set Lrcm [list] set Lthrgap [list 0.005 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8] foreach pcgap $Lthrgap { LesDefauts PCThrGap $pcgap unset -nocomplain ListeScore array unset TbScores "Score,*" update foreach mscore $Lmscore { if {$mscore eq "SanderSP" || $mscore eq "Valdar"} { set sco [ScoreDe$mscore [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)] $LNOrdali $LPCI] } else { set sco [ScoreDe$mscore [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)]] } if {$Scale} { set sco [CentreData $sco -999.0] } set TbScores(Score,$mscore) $sco } CreeListeScore set Lori $ListeScore set LgS [llength $ListeScore] if {$LgS < 2} { # Probleme : nb cols < 2 puts "\nListeScore=0\n$Lmscore $pcgap $pfamid" continue } if {$how eq "exe"} { set o [file tempfile fdat] foreach l $Lori { puts $o [join $l \t] } close $o update idletasks catch {file copy $fdat [file tail $fdat]} } # pour chaque meth clustering set Lres [list] set Lval $Lori # Fait clusters switch $mclus { "dpc" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm kmeans -nbc dpc -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=kmeans -nbc=dpc -wc] } set lab dpc } "secator" { if {$how eq "lib"} { if {0} { set fout [open "fout_[thread::id]" w] foreach xval $Lval { puts $fout "{*}$xval" } close $fout } set Lgr [Tclcluspack $Lval -dt coordinates -cm hierar -nbc secator -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=hierar -nbc=secator -wc] } set lab secator } "mixturemodel" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm mm -nbc aic -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=mm -nbc=aic -wc] } set lab mm } } if {$how eq "exe"} { if {[catch {exec {*}$cmd >& ${tid}.log} Msg]} { puts "Pb Cluspack\n$Msg" puts "[ContenuDuFichier ${tid}.log]" } # lit clusters if {[file exists "${fdat}.clu"]} { set Lres [TraiteResultatClustering "${fdat}.clu" ""] } else { puts "log cluspack :\n[ContenuDuFichier ${tid}.log]" continue } file delete -force ${tid}.log ${fdat}.clu } else { set Lres [TraiteResultatClusteringTcl $Lgr ""] } # Lres est du type IdenGlob {list} ConsGlob {list} ... # recupere les deux premiers groupes set Ltrouve [list [lindex $Lres 1] [lindex $Lres 1]] set res [list "'$lab'" $pcgap $Ltrouve $LgS] lappend Lrcm $res unset -nocomplain Lgr Lres update } if {$how eq "exe"} { file delete -force [file tail $fdat] $fdat } unset -nocomplain LPCI return $Lrcm } proc ScoreMaxChro {Chromo {NbVoisins 6}} { if {![regexp "^HS" $Chromo]} {return "Please, give a chromosome beginning by HS"} set ScoreMax 1 set Liste [LesNNScores $Chromo $NbVoisins] foreach Element $Liste { scan $Element "%s %d" nom score if {$score<=$ScoreMax} {continue} set ScoreMax $score } return $ScoreMax } proc ScoreMaxGlobal {{NbVoisins 6}} { set ScoreMaxGlobal 1 foreach Chro [ListeDesChromosomesHS] { set ScoreMaxChro [ScoreMaxChro $Chro $NbVoisins] if {$ScoreMaxChro<=$ScoreMaxGlobal} {continue} set ScoreMaxGlobal $ScoreMaxChro } return $ScoreMaxGlobal } proc ScoreMediane {l} { set l [lsort -real -decreasing $l] set n [llength $l] set t [expr {0.5 + $n/4.}] set it [expr {int($t)}] set itm1 [expr {$it-1}] set nend [expr {$n-1}] puts " t= $t it= $it itm1= $itm1 nend= $nend" if {($t - $it) == 0.5} { set q3 [expr {([lindex $l $it] + [lindex $l $it+1])/2.}] set q1 [expr {([lindex $l $nend-$it] + [lindex $l $nend-$itm1])/2.}] } elseif {($t - $it) > 0.5} { set q3 [lindex $l $it+1] set q1 [lindex $l $nend-$itm1] } else { set q3 [lindex $l $it] set q1 [lindex $l $nend-$it] } puts "q1= $q1 q3= $q3" if {$n < 4} { set ul [lindex $l 0] set ll [lindex $l end] } else { set ul [expr {$q3 + ($q3-$q1)/2.}] set ll [expr {$q1 - ($q3-$q1)}] } puts " $ll" return $ll } proc ScorePoisson {r R n N} { set f [expr $n * 1.0 /$N] set rFact [Factoriel $r] return [expr -1.0 * $R * $f + $r * log($R * $f) - log($rFact)] } proc ScoreProteineFinal {} { set Liste [CreeListeDeListesDansTemp] ScoreCompareProteineChristineEtAutre $Liste 1 } proc ScoreResults {pktest pfamid Lval} { global TDT db dres set args [$dres eval {select args from tests where pk_tests=$pktest}] set LErr [list] if {[llength $Lval] == 0} { lappend LErr "No values returnes !" return $LErr } set YaErr 0 set Lcm [list "'dpc'" "'mm'" "'secator'"] foreach res $Lval { lassign $res cm gap Lpos lgs # test output consistency if {$cm ni $Lcm} { set YaErr 1 lappend LErr "no good cm" } if {! [string is double -strict $gap]} { set YaErr 1 lappend LErr "no good gap" } if {$YaErr} { lappend LErr $res } else { $db eval {insert into results values(NULL,$pktest,$pfamid,$args,$cm,$gap,$Lpos,$lgs)} } } return $LErr } proc ScoreSequence {seq Lprf deb fin} { set Laa [split "ABCDEFGHIKLMNPQRSTVWXYZ" ""] set score 0.0 for {set i $deb} {$i < $fin} {incr i} { set prf [lindex $Lprf $i-$deb] if {[set c [string index $seq $i]] ne "."} { set k [lsearch $Laa $c] set score [expr {$score+[lindex $prf $k]}] puts " $c [lindex $prf $k] $score" } } set l [expr {$fin-$deb}] if {$l == 0} { set score 0 } else { set score [expr {$score/$l}] } return $score } proc ScorerLesActaBidir {Path} { set FileIn [open "$Path.txt" "r"] set FileOut [open "$Path.actacta" "w"] set nblus 0 set nbsbs 0 set nbactacas 0 incr nbsbs Espionne $rractaca while { [gets $FileIn Ligne] >=0 } { ScanLaListe $Ligne intergene chrom qqch qqch2 acc1 type1 definition1 acc2 type2 definition2 start end strand score rractaca reste if {$rractaca != "X"} { set score [RRACTAYRscore $rractaca 8] puts $FileOut "$Ligne $score" if {$score >= 7} { incr nbactacas } incr nbLus } } Espionne "Lus: $nblus Sbs: $nbsbs ACTAYR: $nbactacas" close $FileIn close $FileOut } proc ScriptCmd {args} { # puts "ScriptCmd: $args" } proc Scrunch {Sequence} { regsub -all {\.|\~} $Sequence "" Sequence return $Sequence } proc SearchAllAARSPDB {} { #set xml [MakePDBQuery -orga "Homo sapiens (human)" -ec "6.1.1.*" -cellcomp 1] #set xml [MakePDBQuery -orga "Homo sapiens" -ec "6.1.1.*"] set xml [MakePDBQuery -orga -ec "6.1.1.*"] set xml " head org.pdb.query.simple.EnzymeClassificationQuery Enzyme Classification Search : EC=6.1.1.* 6.1.1.* " set Lpdb [SendPDBQuery $xml] return $Lpdb } proc SearchForChromo {} { set rep "" set url1 "http://www.gdb.org/gdbreports/Chr.XXXX.omim.html" set Lchr [list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y Unknown_or_Multiple_Locations] foreach i $Lchr { regsub "XXXX" $url1 $i newurl set Leslignes {} HttpCopy $newurl Leslignes ParseFicheChromo $i $Leslignes } } proc SearchGoodGoldChild {n} { global Tx set found -1 if {$Tx(isGold,$n)} { return $n } foreach c $Tx(Child,$n) { set found [SearchGoodGoldChild $c] if {$found != -1} { return $found } } return $found } proc SearchInformation {stringInfo {fastaFile ""}} { if {$fastaFile==""} {set fastaFile "[RepertoireDuGenome]/listeEntetesFasta"} if { [catch {set res [exec grep -i $stringInfo $fastaFile]} message] } { set res "$message" } return $res } proc SearchOnBoard {Texte} { Gs "DeplaceK" scan $Texte "%s" Nom if {[EstUnPAB $Nom]} { return [RepereBox "Nom: $Nom"] } foreach Mot [LesMotsDeLaLigne $Texte] { if {[EstUnPAB $Mot]} { return [RepereBox "Nom: $Mot"] } } return "" } proc SearchTaxIdOrName {} { global Tx set v $Tx(SearchEnt) if {$v eq ""} { return } set PAD $Tx(PAD) set Found 0 if {[string is integer -strict $v]} { set id [$PAD find withtag "N$v"] if {$id ne ""} { set Found 1 } } else { foreach nd [$PAD find withtag NodeName] { set name [$PAD itemcget $nd -text] if {[regexp -nocase "^$v" $name]} { set Found 1 set id $nd break } } } if {$Found} { CanvasSee $PAD $id } return } proc Secator {FichierMSF {Sortie ""}} { if {$Sortie==""} { set Sortie "GetClusterFile" } set Racine [TmpFile secator "" "_"] file copy $FichierMSF $Racine global env ; set env(SECATORHOME) "/biolo/secator" global ExecutableSecator #rR if { ! [info exists ExecutableSecator]} { set ExecutableSecator "secator" } if { ! [info exists ExecutableSecator]} { set ExecutableSecator "/biolo/cluspack/binNew/cluspack" } set OptionAlignment "" set FichierDesClusters "$Racine.sec" if {[regexp "cluspack" $ExecutableSecator]} { set OptionAlignment "-dt=alignment -cm=bionj -nbc=secator" set FichierDesClusters "$Racine.clu" } if {$ExecutableSecator=="dpc"} { set OptionAlignment "alignment" set FichierDesClusters "$Racine.dpc" } if {[catch {eval exec $ExecutableSecator $Racine $OptionAlignment} Message]} { Warne "$ExecutableSecator $Racine $OptionAlignment\n failed with \n$Message" return "" } if { ! [file exists $FichierDesClusters]} { Warne "$ExecutableSecator didn't create $FichierDesClusters for \n$FichierMSF" return "" } if {$Sortie=="ListAllOutputs"} { set LesSorties [glob -nocomplain $Racine*] return $LesSorties } if {$Sortie=="GetText"} { return [ContenuDuFichier $FichierDesClusters] } if {$Sortie=="GetClusterFile"} { return $FichierDesClusters } file copy $FichierDesClusters $Sortie return $Sortie } proc SecatorPourFichierEntreStrStat {CodeGscope} { Espionne "CodeGscope: $CodeGscope" set RepertoireDeDomaines "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope" Espionne "RepertoireDeDomaines: $RepertoireDeDomaines" #Creation du repertoire ou l'on met les fichiers d'entre de StrStat if {![file exists "$RepertoireDeDomaines/StrStatInPutFile"]} { File mkdir $RepertoireDeDomaines/StrStatInPutFile } set FileInPutStrStat $RepertoireDeDomaines/StrStatInPutFile #teste si y a des fichiers msf pour ne pas avoir d'erreur dans la suite #ici j'ai une erreur!!!! pour le set r Mais j'ai peut etre corriger l'erreur!!! Espionne "RepertoireDeDomaines: $RepertoireDeDomaines" set r [glob -directory $RepertoireDeDomaines *.msf] foreach fichier $r { set ResultSecator [GroupeSecator $fichier "" ToutLeMondeAvecGroupe ToCalculate] #set ResultSecator [GroupeSecator PDBParDomaine/QR009/domaine1.msf "" SameAs ToutLeMondeAvecGroupe] set groupePrecedent "" foreach PDB $ResultSecator { scan $PDB "%s %s" IdPDB groupe Espionne "IdPDB: $IdPDB Groupe: $groupe" if {$groupe ne $groupePrecedent} { if {$groupePrecedent!=""} { SauveLesLignes $cluster dans "$FileInPutStrStat/$groupe" } set cluster {} set lineSplit [split $IdPDB "_"] lappend cluster "[lindex $lineSplit 0]:[lindex $lineSplit 1]::" set groupePrecedent $groupe } else { set lineSplit [split $IdPDB "_"] lappend cluster "[lindex $lineSplit 0]:[lindex $lineSplit 1]::" set groupePrecedent $groupe } } SauveLesLignes $cluster dans "$FileInPutStrStat/$groupe" } } proc SeeADN {FichierPep} { global RepertoireDuGenome global ADN TDN RAC if { ! [info exists ADN] } { ChargeADNetTDNetRAC } set Nom [file tail $FichierPep] AfficheFichier "$RepertoireDuGenome/nuctfa/$Nom" "SansFetchAvecVoisinsAvecFormateAvecBlaste" } proc SeeAby {Quoi Fichier} { global SeeAby global RepertoireDuGenome global PABCourant global VariableToSetForWscope Gs "Frame" if {$Fichier==""} { return "" } scan $Fichier "%s" Fichier set Nom [file tail $Fichier] set PABCourant $Nom if {$Quoi=="OnList"} { set LesPossibles [LesOnListDeSeeAbyPossibles] lappend LesPossibles Loc set Quoi [ChoixParmi $LesPossibles] if {$Quoi==""} { return } } if {$Quoi=="Loc"} { return [AfficheChaqueSegmentDuBlastN $Nom] } global MemoAny if {$Quoi=="MemoAny"} { if {[info exists MemoAny]} { return [SeeAby $MemoAny $Fichier] } else { return [SeeAby "ChooseAny" $Fichier] } } if {$Quoi=="ChooseAny" || $Quoi=="AllAny"} { set LesAnyDisponibles {} foreach Rep [glob -nocomplain "$RepertoireDuGenome/*"] { set Queue [file tail $Rep] if {$Quoi=="AllAny"} { if {[file exists "$Rep/$Nom"]} { SeeAby "Any" $Fichier } continue } if {$Quoi=="ChooseAny"} { lappend LesAnyDisponibles $Queue } } if {$Quoi=="AllAny"} { return $LesAnyDisponibles } if {$Quoi=="ChooseAny"} { set VariableToSetForWscope "MemoAny" set Choix [ChoixParmi $LesAnyDisponibles] if {$Choix==""} { return "" } set MemoAny "$Choix" return [SeeAby "MemoAny" $Fichier] } } global MemoMsf if {$Quoi=="MemoMsf"} { if {[info exists MemoMsf]} { return [SeeAby "$MemoMsf" $Fichier] } else { if {[OnTraiteUnGenome]} { set MemoMsf "MSF_msf" } if {[OnTraiteDesCDNAs]} { set MemoMsf "MSF_msf" } if {[info exists MemoMsf]} { return [SeeAby "MemoMsf" $Fichier] } else { return [SeeAby "ChooseMsf" $Fichier] } } } if {$Quoi=="ChooseMsf" || $Quoi=="AllMsf"} { set LesMsfDisponibles {} foreach Rep [glob -nocomplain "$RepertoireDuGenome/*msf*"] { set Queue [file tail $Rep] if {$Quoi=="AllMsf"} { if {[file exists "$Rep/$Nom"]} { SeeAby "Msf" $Fichier } continue } if {$Quoi=="ChooseMsf"} { lappend LesMsfDisponibles $Queue } } if {$Quoi=="AllMsf"} { return $LesMsfDisponibles } if {$Quoi=="ChooseMsf"} { set VariableToSetForWscope "MemoMsf" set Choix [ChoixParmi $LesMsfDisponibles] if {$Choix==""} { return "" } set MemoMsf "MSF_$Choix" return [SeeAby "MemoMsf" $Fichier] } } global MemoBlast if {$Quoi=="MemoBlast"} { if {[info exists MemoBlast]} { if {$MemoBlast=="Blast"} { return [SeeAby "Banque$MemoBlast" $Fichier] } return [SeeAby "Banque$MemoBlast" $Fichier] } else { if {[OnTraiteUnGenome]} { set MemoBlast "blastp" } if {[OnTraiteDesCDNAs]} { set MemoBlast "blastn" } if {[info exists MemoBlast]} { return [SeeAby "MemoBlast" $Fichier] } else { return [SeeAby "ChooseBlast" $Fichier] } } } if {$Quoi=="ChooseBlast" || $Quoi=="AllBlast"} { set LesBlastDisponibles {} foreach Rep [glob -nocomplain "$RepertoireDuGenome/*blast*"] { set Banque [file tail $Rep] # regsub -nocase {trou[sx]+} $Banque "" Banque if {$Quoi=="AllBlast"} { if {[file exists "$Rep/$Nom"]} { SeeAby "Banque$Banque" $Fichier } continue } if {$Quoi=="ChooseBlast"} { lappend LesBlastDisponibles $Banque } } if {$Quoi=="AllBlast"} { return $LesBlastDisponibles } if {$Quoi=="ChooseBlast"} { set VariableToSetForWscope "MemoBlast" set Ban [ChoixParmi $LesBlastDisponibles] if {$Ban==""} { return "" } set MemoBlast $Ban return [SeeAby "MemoBlast" $Fichier] } } if {[regexp "LesTBlastN" $Quoi]} { foreach Rep [glob -nocomplain "$RepertoireDuGenome/tblastn*"] { set Banque [file tail $Rep] if {[file exists "$Rep/$Nom"]} { SeeAby "Banque$Banque" $Fichier } } } if {[regexp "^all" $Quoi]} { set Quoi [string tolower $Quoi] regsub "all" $Quoi "" Quoi set Quoi "[string range $Quoi 0 end-1]last[string range $Quoi end end]" foreach Rep [glob -nocomplain "$RepertoireDuGenome/$Quoi*"] { if {[file type $Rep]=="link"} { set Cible [file readlink $Rep] if {[regexp "^$Quoi" [file tail $Cible]]} { continue } } if {[file exists "$Rep/$Nom"]} { set Rep [file tail $Rep] SeeAby $Rep $Fichier } } return } if {[regexp "^Banque" $Quoi]} { regsub "Banque" $Quoi "" Banque set Quoi "Banque" } if {[regexp "^MSF_" $Quoi]} { regsub "MSF_" $Quoi "" MsfDir set Quoi "MSF_" } set FichierExcuse "Sorry_I_cannot_find_the_file_associate_with_${Quoi}_${Fichier}" if {[OnTraiteUneCollection] && $Quoi=="Pep"} { set Quoi "PhEnNJPlot" } if {$Quoi=="Other"} { set LesPossibles [LesRepertoiresPossiblesPour $Nom] set Quoi [ChoixParmi [lsort $LesPossibles]] if {$Quoi==""} { return "" } } if {$Quoi=="Nicolas"} { set LesPossibles {Correlator Secator NuCA} set LesPossibles {Correlator} set Quoi [ChoixParmi $LesPossibles] if {$Quoi==""} { return "" } } if {$Quoi=="Blast" && [OnTraiteDesCDNAs]} { set Quoi "BlastN" } if {$Quoi=="Seq" && [OnTraiteDesCDNAs]} { set Quoi "Nuc" } if {$Quoi=="Taxobla"} { return [AfficheFichier "[RepertoireDuGenome]/taxobla/$Nom" "GrandeLargeur"] } switch $Quoi { "Show" { # OnList foreach Rep [LesRepertoiresPourSeeAbyShow] { set FichierShow "$RepertoireDuGenome/$Rep/$Nom" if { ! [file exists $FichierShow]} { continue } if {$Rep=="msf" && [regexp "NoSequenceToAlign" $FichierShow]} { continue } break } if {[file exists $FichierShow] && [file size $FichierShow]>0} { if {$Rep=="msf"} { return [SeeAby "MSF" $FichierShow] } return [AfficheFichier $FichierShow "AutoManiere"] } return [AfficheVariable "I found nothing to display for $Nom" "" $Nom] } "Correlator" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } default { set FichierBlastP $FichierExcuse } if {$FichierBlastP == $FichierExcuse || ! [file exists $FichierBlastP]} { FaireLire "No file to show" return "" } else { return [Correlator $FichierBlastP [NomDe fenetre]] } } "Secator" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } default { set FichierBlastP $FichierExcuse } if {$FichierBlastP == $FichierExcuse || ! [file exists $FichierBlastP]} { FaireLire "No file to show" return "" } else { return [Correlator $FichierBlastP [NomDe fenetre]] } } "Ordali" { # OnList switch -regexp $Nom "[PreFixe]" { return [Ordali $Nom $Fichier] } default { return ""} } "PhEnNJPlot" { switch -regexp $Nom "[PreFixe]" { set FichierPh "$RepertoireDuGenome/phylos/$Nom" } default { set FichierPh $FichierExcuse } if {$FichierPh == $FichierExcuse} { FaireLire "No file to plot" return "" } else { return [NJPlotPH $FichierPh] } } "Nuc" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } "ARN" { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } "TRNA" { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } {TROU[0-9]*N} { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } {TROU[0-9]*[A-F]} { set FichierNuc "$RepertoireDuGenome/prottfa/$Nom" } default { set FichierNuc $FichierExcuse } if {$FichierNuc==$FichierExcuse} { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" if {[FileAbsent $FichierNuc]} { set FichierNuc $FichierExcuse } } return [AfficheFichier $FichierNuc "AvecBlasteAvecFormate"] } "Seq" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierPep "$RepertoireDuGenome/prottfa/$Nom" } "ARN" { set FichierPep "$RepertoireDuGenome/nuctfa/$Nom" } "TRNA" { set FichierPep "$RepertoireDuGenome/nuctfa/$Nom" } {TROU[0-9]*N} { set FichierPep "$RepertoireDuGenome/nuctfa/$Nom" } {TROU[0-9]*[A-F]} { set FichierPep "$RepertoireDuGenome/prottfa/$Nom" } default { set FichierPep $FichierExcuse } if {$FichierPep==$FichierExcuse} { set FichierPep "$RepertoireDuGenome/prottfa/$Nom" if {[FileAbsent $FichierPep]} { set FichierPep $FichierExcuse } } return [AfficheFichier $FichierPep "AvecBlasteAvecFormate"] } "Embl" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierPep "$RepertoireDuGenome/protembl/$Nom" } "ARN" { set FichierPep "$RepertoireDuGenome/nucembl/$Nom" } "TRNA" { set FichierPep "$RepertoireDuGenome/nucembl/$Nom" } {TROU[0-9]*N} { set FichierPep "$RepertoireDuGenome/nucembl/$Nom" } {TROU[0-9]*[A-F]} { set FichierPep "$RepertoireDuGenome/protembl/$Nom" } default { set FichierPep $FichierExcuse } if {$FichierPep==$FichierExcuse} { set FichierPep "$RepertoireDuGenome/protembl/$Nom" if {[FileAbsent $FichierPep]} { set FichierPep $FichierExcuse } } return [AfficheFichier $FichierPep "AvecBlasteAvecFormate"] } "BlastN" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierBlast "$RepertoireDuGenome/blastn/$Nom" } "ARN" { set FichierBlast "$RepertoireDuGenome/arnblastn/$Nom" } "TRNA" { set FichierBlast "$RepertoireDuGenome/trnablastn/$Nom" } {TROU[0-9]*N} { set FichierBlast "$RepertoireDuGenome/troustblastxgenembl/$Nom" } "TROU" { set FichierBlast "$RepertoireDuGenome/trousblastn/$Nom" } default { set FichierBlast $FichierExcuse } if {$FichierBlast==$FichierExcuse} { set FichierBlast "$RepertoireDuGenome/blastn/$Nom" if {[FileAbsent $FichierBlast]} { set FichierBlast $FichierExcuse } } return [AfficheFichier $FichierBlast "AvecGrapheAvecSegAlignementAvecAligneurs"] } "Blast" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierBlast "$RepertoireDuGenome/blastp/$Nom" } "ARN" { set FichierBlast "$RepertoireDuGenome/arnblastp/$Nom" } "TRNA" { set FichierBlast "$RepertoireDuGenome/trnablastp/$Nom" } {TROU[0-9]*N} { set FichierBlast "$RepertoireDuGenome/trousblastx/$Nom" } "TROU" { set FichierBlast "$RepertoireDuGenome/trousblastp/$Nom" } default { set FichierBlast $FichierExcuse } if {$FichierBlast==$FichierExcuse} { set FichierBlast "$RepertoireDuGenome/blastp/$Nom" if {[FileAbsent $FichierBlast]} { set FichierBlast $FichierExcuse } } return [AfficheFichier $FichierBlast "AvecGrapheAvecSegAlignementAvecAligneurs"] } "Ballast" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } "TROU" { set FichierBlastP "$RepertoireDuGenome/trousblastp/$Nom" } default { return "" } return [AfficheBallastDuBlastP $FichierBlastP $Nom] } "Banque" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierBlast "$RepertoireDuGenome/$Banque/$Nom" } "ARN" { set FichierBlast "$RepertoireDuGenome/arn$Banque/$Nom" } "TRNA" { set FichierBlast "$RepertoireDuGenome/trna$Banque/$Nom" } {TROU[0-9]+N} { set FichierBlast "$RepertoireDuGenome/$Banque/$Nom" } {aRemettreTROU[0-9]+N} { regsub "p" $Banque "x" Banque ; set FichierBlast "$RepertoireDuGenome/$Banque/$Nom" } "TROU" { set FichierBlast "$RepertoireDuGenome/trou$Banque/$Nom" } default { set FichierBlast $FichierExcuse } if {[regexp -nocase "tblastn" $Banque]} { set Maniere "AvecSegAlignement" } else { set Maniere "AvecGrapheAvecSegAlignementAvecAligneurs" } return [AfficheFichier $FichierBlast $Maniere] } "MSF_" { # OnList switch -regexp $Nom "[PreFixe]" { set FichierMSF "$RepertoireDuGenome/$MsfDir/$Nom" } "ARN" { set FichierMSF "" } "TRNA" { set FichierMSF "" } "TROU" { set FichierMSF "$RepertoireDuGenome/$MsfDir/$Nom" } default { set FichierMSF $FichierExcuse } if {$FichierMSF==$FichierExcuse} { set FichierMSF "$RepertoireDuGenome/$MsfDir/$Nom" if {[FileAbsent $FichierMSF]} { set FichierMSF $FichierExcuse } } set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"] return $FenetreMSF } "MSF" { # OnList set MSFouDBC "msf" switch -regexp $Nom "[PreFixe]" { set FichierMSF "$RepertoireDuGenome/$MSFouDBC/$Nom" } "ARN" { set FichierMSF "" } "TRNA" { set FichierMSF "" } "TROU" { set FichierMSF "$RepertoireDuGenome/trousmsf/$Nom" } default { set FichierMSF $FichierExcuse } if {$FichierMSF==$FichierExcuse} { set FichierMSF "$RepertoireDuGenome/$MSFouDBC/$Nom" if {[FileAbsent $FichierMSF]} { set FichierMSF $FichierExcuse } } set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"] return $FenetreMSF } "MSF2" { # OnList set FichierMSF "$RepertoireDuGenome/msf2/$Nom" if { ! [file exists $FichierMSF]} { set FichierMSFMSF "$RepertoireDuGenome/msf2/$Nom.msf" if { ! [file exists $FichierMSFMSF]} { return "" } set FichierMSF $FichierMSFMSF } if {[file isdirectory $FichierMSF]} { set RepMSF "$RepertoireDuGenome/msf2/$Nom" set FichierMSF [ChoixParmi [glob -nocomplain "$RepMSF/*"]] } if {$FichierMSF==""} { return "" } set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"] return $FenetreMSF } "MSF3" { # OnList set FichierMSF "$RepertoireDuGenome/msf3/$Nom" if { ! [file exists $FichierMSF]} { set FichierMSFMSF "$RepertoireDuGenome/msf3/$Nom.msf" if { ! [file exists $FichierMSFMSF]} { return "" } set FichierMSF $FichierMSFMSF } if {[file isdirectory $FichierMSF]} { set RepMSF "$RepertoireDuGenome/msf3/$Nom" set FichierMSF [ChoixParmi [glob -nocomplain "$RepMSF/*"]] } if {$FichierMSF==""} { return "" } set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"] return $FenetreMSF } "SpineXml" { # Onlist set FichierXml "$RepertoireDuGenome/XmlFromSpine/$Nom" return [AfficheFichier $FichierXml "AvecXmlGrandeLargeur"] } "MacsimXml" { # Onlist set FichierXml "$RepertoireDuGenome/macsimXml/$Nom" return [AfficheFichier $FichierXml "AvecXmlGrandeLargeur"] } "Para" { # OnList set FichierMSF "$RepertoireDuGenome/msfparalogues/$Nom" return [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"] } "Disphy" { # OnList set Fichier "$RepertoireDuGenome/disphy/$Nom" if {$Fichier==""} { return "" } return [AfficheFichier $Fichier ""] } default { set Fichier "$RepertoireDuGenome/$Quoi/$Nom" if {$Fichier==""} { return "" } return [AfficheFichier $Fichier "AutoManiere"] } } } proc SeeBlast {Fichier} { global RepertoireDuGenome set Nom [file tail $Fichier] AfficheUneSortieBlast "$RepertoireDuGenome/blasts/$Nom" } proc SeeTag {} { global iTag set Ltg [.t tag ranges Spy] if {$Ltg == {} } { return } if {$iTag >= [llength $Ltg]} { set iTag 0 } set tag [lindex $Ltg $iTag] .t see $tag incr iTag update idletasks return } proc SelectAllItemFeatureForEditing {what pos} { global NomTextSeq LNOrdali GroupeDeLaSequence EFeat SDG TabSF set ft [set EFeat(Feat)] # reference set posi [$NomTextSeq index $pos] lassign [split $posi .] y x set nom [lindex $LNOrdali $y-1] if {$nom eq ""} {return} set toTag [list] switch $what { "seq" { set Ln $nom } "group" { set gref [set GroupeDeLaSequence($nom)] set Ln [set SDG($gref)] } "all" { set gref GroupeToutLeMonde set Ln [set SDG($greef)] } } # select all items of the feature for the given names foreach n $Ln { if {! [info exists TabSF($n,$ft)]} { continue } set y [expr {[lsearch $LNOrdali $n] +1}] foreach f [set TabSF($n,$ft)] { DecortiqueUneFeature $f dg fg col sco note csys set noteRef [string map [list " " _] $ft]_[string map [list " " _] $note] incr fg lappend toTag $y.$dg $y.$fg lappend EFeat(LItemSel) [list [list $y.$dg $y.$fg] $noteRef $ft] } } if {$toTag == {}} {return} # tag the items as selected $NomTextSeq configure -state normal $NomTextSeq tag add slct {*}$toTag $NomTextSeq tag raise slct $NomTextSeq configure -state disabled update idletasks set EFeat(LRanges) $toTag lappend EFeat(LZonesT) $toTag return } proc SelectBlastDatabase {{Selected ""} {Name ""} {Class ""} {Type ""}} { if {$Name ==""} { set Name "SelectBlastDatabase" } if {$Class==""} { set Class "SelectBlastDatabase" } if {$Type ==""} { set Type "ProNucBestFirstWithTitle" } set Databases [BlastDatabaseInventory ListOf $Type] set LesDatabases [split $Databases "\n"] # set LesDatabases [linsert $LesDatabases 0 "CeQuOnVeut"] set LeHtml {} set Col "" if {$Selected!=""} { set Col " style='background-color:lightgreen;'" } lappend LeHtml "" return [join $LeHtml "\n"] } proc SelectChainNwOj {what} { global NwOj NwOjR TabSF set Strtype $NwOj(TypeSel) set can $NwOj(Can) switch $Strtype { "None" {set type 0} "Atoms" {set type 1} "Ca/P Trace" {set type 2} "Ribbon" {set type 3} "Ribbon + Atoms" {set type 4} "Ribbon + CPK" {set type 5} "Pearls" {set type 6} "CPK" {set type 7} } set chn $NwOj(Chain) switch $what { "all" { foreach e [array names NwOjR "${chn},*"] { lset NwOjR($e) 1 $type } } "selected" { set Li [$can find withtag Selected] foreach i $Li { set Lt [$can gettags $i] set nb [lsearch -inline -regexp $Lt {^Nbr}] set n [string range $nb 3 end] lset NwOjR($chn,$n) 1 $type } ClearSelectionNwOj } "feature" { if {$NwOj(FeatSel) eq "None"} {return} set feat $NwOj(FeatSel) set mol $NwOj(Mol) set chn $NwOj(Chain) set nom [BonNomPDB "${mol}_$chn"] if {! [info exists TabSF($nom,$feat)]} { return } foreach e [set TabSF($nom,$feat)] { DecortiqueUneFeature $e d f col sc note # Special case for Discri : # don't take if indel present if {[regexp -nocase {^indel} $note]} { continue } for {set i $d} {$i <= $f} {incr i} { set n [DonnePosGS $nom $i] if {$n eq ""} { DonnePosGS $nom $i 1 } lset NwOjR($chn,$n) 1 $type } } } } CanvasDeChaine return } proc SelectClade {{Multiple ""} {UseQds ""}} { if {$Multiple==""} { set Multiple "One" } set GetAll [string equal -nocase "GetAll" $Multiple] set Multiple [string equal -nocase "Multiple" $Multiple] set UseQds [string equal -nocase "UseQds" $UseQds] if {[OnTraite "CilioCarta" "Like"]} { if {$UseQds} { set LesBilCla [QuestionDeScience CilioCarta "ret BilanCilio ListOf Clade"] } else { set LesBilCla [BilanCilio ListOf Clade] } set LesClades {} foreach BilCla $LesBilCla { regsub {[^_]+_} $BilCla "" Clade ;#rR on enleve Y_ N_ et PR_ lappend LesClades $Clade } set LesClades [lsort -unique $LesClades] } elseif {[OnTraite "OI2017" "Like"]} { if {$UseQds} { set LesClades [QuestionDeScience OI "ret CMC ListOf Clade"] } else { set LesClades [CMC ListOf Clade] } set LesClades [lsort -unique $LesClades] } if {$GetAll} { return $LesClades } if {$Multiple} { if {[OnTraite "CilioCarta"]} { return [lrange $LesClades 0 end] } set Choisis [Affiche [join $LesClades "\n"] "AvecRetour" "Select within this list. Highlight several and press 'Validate selection' or 'All'"] return [split $Choisis "\n"] } set LesClades [linsert $LesClades 0 "Use another one"] set Choisi [ChoixParmi $LesClades] if {$Choisi=="Use another one"} { set Choisi [Entre "Hominidae"] } return $Choisi } proc SelectFromVEDidier {Clef ValeurVoulue {Op ""} {LesChamps ""} {Action ""}} { if {$Action==""} { set Action "Show" } if {$LesChamps==""} { set LesChamps [list "VE" "Ligne"] } if {$Op==""} { set Op "string equal -nocase" } set LesLignes {} foreach VE [VEDidier ListeDes VE] { set Valeur [VEDidier $VE $Clef] if { ! [eval $Op \$Valeur \$ValeurVoulue]} { continue } set LaLigne {} foreach Champ $LesChamps { lappend LaLigne [VEDidier $VE $Champ] } lappend LesLignes [join $LaLigne " "] } if {$Action=="GetList"} { return $LesLignes } if {$Action=="GetText"} { return [join $LesLignes "\n"] } set Titre "select [join $LesChamps "_"] where $Op $Clef $ValeurVoulue" return [AfficheVariable [join $LesLignes "\n"] "" $Titre] } proc SelectItemFeatureForEditing {what pos} { global NomTextSeq LNOrdali GroupeDeLaSequence EFeat # reference set posi [$NomTextSeq index $pos] lassign [split $posi .] y x set nom [lindex $LNOrdali $y-1] if {$nom eq ""} {return} # Process clicked tag set noteRef "" set tg [lsearch -inline -regexp [$NomTextSeq tag names $posi] {^FDisp_}] if {$tg eq ""} {return} set noteRef [string range $tg 6 end] switch $what { "seq" { set Ly $y } "group" { set g0 [set GroupeDeLaSequence($nom)] foreach s [set ::SDG($g0)] { lappend Ly [expr {[lsearch $LNOrdali $s]+1}] } } "all" { set i 0 foreach s $LNOrdali { incr i if {$s ne ""} {lappend Ly $i} } } } set toTag [list] foreach y $Ly { set r [$NomTextSeq tag prevrange $tg $y.$x] if {$r eq ""} {continue} lassign $r p1 p2 lassign [split $p1 .] y1 x1 lassign [split $p2 .] y2 x2 # check if we deal with a feature onto the # current line if {$y1 != $y} {continue} lappend toTag $y.$x1 $y.$x2 } if {$toTag == {}} {return} # select the regions $NomTextSeq configure -state normal $NomTextSeq tag add slct {*}$toTag $NomTextSeq tag raise slct $NomTextSeq configure -state disabled update idletasks set EFeat(LRanges) $toTag lappend EFeat(LZonesT) $toTag lappend EFeat(LItemSel) [list $toTag $noteRef $EFeat(Feat)] return } proc SelectLaFeature {posi} { global PositionInitiale NomTextSeq set posi [$NomTextSeq index $posi] lassign [split $posi .] y x set LaListe [lsearch -regexp -all -inline [$NomTextSeq tag names $posi] {^FX\_}] # lowest priority first , highest last set NomTag [lindex $LaListe end] set TagZone [$NomTextSeq tag ranges $NomTag] foreach {p1 p2} $TagZone { lassign [split $p1 .] y1 x1 lassign [split $p2 .] y2 x2 if {$y == $y1 && $x >= $x1 && $x <= $x2} { if {! [VerifieOverlap $x1 $x2]} { set PositionInitiale $p1 SelectLesColonnes $p2 } else { return } } } $NomTextSeq tag remove Marque 1.0 end return } proc SelectLesColonnes {pos2} { global ZoneSelect PositionInitiale LNOrdali NomTextSeq if {$PositionInitiale eq "-1.-1"} {return} lassign [split $PositionInitiale .] y1 x1 if {[regexp {^@} $pos2] && [ModeI]} { set pos2 [$NomTextSeq index $pos2] } lassign [split $pos2 .] y2 x2 if {$x1 > $x2} { set tmp $x1 set x1 $x2 set x2 $tmp } lappend ZoneSelect [list $x1 $x2] set ZoneSelect [lsort -integer -index 0 $ZoneSelect] foreach pos $ZoneSelect { lassign $pos z1 z2 if {$x1 == $z1 && $x2 > $z2} { set i [lsearch $ZoneSelect $pos] set ZoneSelect [lreplace $ZoneSelect $i $i] break } } if {! [ModeI]} {return} $NomTextSeq configure -state normal $NomTextSeq tag delete Marque $NomTextSeq tag configure slct -background LightGrey # widget text y commence a 1 set i 0 foreach n $LNOrdali { incr i if {$n eq ""} {continue} $NomTextSeq tag add slct $i.$x1 $i.[expr {$x2+1}] } $NomTextSeq configure -state disabled return } proc SelectMailbox {name user} { global db CMDef set Lfolders [$db eval {select f.name, f.pk_folder from folder as f, mailbox as m where m.name = $name and m.pk_mailbox = f.pk_mailbox}] set Lvals [$db eval {select address, password, usessl, port from mailbox where name = $name and username = $user}] lassign $Lvals address password usessl port set CMDef(Lfolders) $Lfolders set CMDef(Password) $password set CMDef(Username) $user set CMDef(ServerName) $name set CMDef(ServerAddress) $address set CMDef(UseSSL) $usessl set CMDef(Port) $port if {[set idx [lsearch -nocase $Lfolders "\"INBOX\""]] != -1} { set curr [lindex $Lfolders $idx] set currPk [lindex $Lfolders $idx+1] } else { set curr [lindex $Lfolders 0] set currPk [lindex $Lfolders 1] } set CMDef(currFolder) $curr set CMDef(currFolderPk) $currPk return } proc SelectNomSeq {quoi pos} { global PosInitNom NomNomSeq NomSeqSel set LNoms [split [$NomNomSeq get 1.0 end] \n] set pos [$NomNomSeq index $pos] lassign [split $PosInitNom .] y1 x1 lassign [split $pos .] y2 x2 switch $quoi { "une" { RAZNomSeq if {[lindex $LNoms [expr {$y2-1}]] eq ""} {return} set NomSeqSel $pos $NomNomSeq tag add InvNm $y2.0 $y2.end $NomNomSeq tag raise InvNm } "ctr" { if {$NomSeqSel == {}} { SelectNomSeq "une" $pos return } set ix [lsearch $NomSeqSel $pos] if {$ix == -1} { lappend NomSeqSel $pos } else { set NomSeqSel [lreplace $NomSeqSel $ix $ix] } InverseTagNom $pos } "shf" { if {$NomSeqSel == {}} { SelectNomSeq "une" $pos return } if {$y2 < $y1} { set tmp $y2 set y2 $y1 set y1 $tmp incr y2 -1 } else { incr y1 } for {set i $y1} {$i <= $y2} {incr i} { set idx [lsearch $NomSeqSel "$i.0"] if {$idx == -1} { lappend NomSeqSel "$i.0" } else { set NomSeqSel [lreplace $NomSeqSel $idx $idx] } InverseTagNom "$i.0" } } "all" { RAZNomSeq set NomSeqSel {} set i 0 foreach n $LNoms { incr i if {[string trim $n] == ""} {continue} # InverseTagNom "$i.0" $NomNomSeq tag add InvNm $i.0 $i.end lappend NomSeqSel "$i.0" } } } set PosInitNom $pos return } proc SelectNomSeqSB {quoi pos} { global NomSeqSel NomNomSeq PosInitNom LNSeqlab set LNoms $LNSeqlab set pos [$NomNomSeq index $pos] lassign [split $PosInitNom ,] y1 x1 lassign [split $pos ,] y2 x2 switch $quoi { "une" { $NomNomSeq tag cell {} [$NomNomSeq tag cell InvNm] TagSeqsGroupees if {[lindex $LNoms $y2] ne ""} { set NomSeqSel $pos $NomNomSeq tag cell InvNm $y2,0 $NomNomSeq tag raise InvNm } } "ctr" { if {$NomSeqSel == {}} { SelectNomSeqSB "une" $pos return } set ix [lsearch $NomSeqSel $pos] if {$ix == -1} { lappend NomSeqSel $pos } else { set NomSeqSel [lreplace $NomSeqSel $ix $ix] } InverseTagNomSB $pos } "shf" { if {$NomSeqSel == {}} { SelectNomSeqSB "une" $pos return } if {$y2 < $y1} { set tmp $y2 set y2 $y1 set y1 $tmp incr y2 -1 } else { incr y1 } for {set i $y1} {$i <= $y2} {incr i} { set idx [lsearch $NomSeqSel "$i,0"] if {$idx == -1} { lappend NomSeqSel "$i,0" } else { set NomSeqSel [lreplace $NomSeqSel $idx $idx] } InverseTagNomSB "$i,0" } } "all" { $NomNomSeq clear tags set NomSeqSel {} set i 0 foreach n $LNoms { if {[string trim $n] eq ""} {continue} $NomNomSeq tag cell InvNm $i,0 lappend NomSeqSel "$i,0" incr i } } } set PosInitNom $pos return } proc SelectObjItemsOnLine {l x1 x2} { global NwOj set y1 [expr {($l-1)*$NwOj(YPerLine)+$NwOj(YOffset)+15}] set y2 [expr {$l*$NwOj(YPerLine)+$NwOj(YOffset)-1}] set w $NwOj(Can) set Lsel [list] foreach id [lrange [lsort -integer [$w find overlapping $x1 $y1 $x2 $y2]] 1 end-1] { set Lt [$w gettags $id] set nb [lsearch -regexp -inline $Lt {^Nbr}] if {$nb ne ""} { set e [$w find withtag "BgRes && $nb"] lappend Lsel $e } } return [lsort -unique -integer $Lsel] } proc SelectPdbForRefX {InFile OutFile {Cutoff ""} {MatBla ""} {LogFile ""}} { set BaliBaseDir "/workbench/julie/bb/src" if {$LogFile==""} { set LogFile "/dev/null" } if {$MatBla ==""} { set MatBla "$BaliBaseDir/id.bla" } if {$Cutoff ==""} { set Cutoff 30 } exec $BaliBaseDir/selectpdbforref1 $InFile $Cutoff $MatBla $OutFile > $LogFile if {[file exists $OutFile]} { return $OutFile } return "" } proc SelectPdbForRefXPourTous {} { set RepSap "[RepertoireDuGenome]/tfaspoursap" if { ! [file exists $RepSap]} { file mkdir $RepSap } set RepMafft "[RepertoireDuGenome]/mafft" foreach Nom [ListeDesPABs] { set InFile "$RepMafft/$Nom" if { ! [file exists $InFile]} { continue } set OutFile "$RepSap/$Nom" set Retour [SelectPdbForRefX $InFile $OutFile] Espionne "With $Nom I got >$Retour<" } } proc SelectSSDeType {type} { global PositionInitiale ListePDB NomNomSeq NomTextSeq set prems 1 foreach elt $ListePDB { lassign $elt MolId PDB set chn [DonneChainDeAccessPDB $MolId] if {$chn eq ""} {set chn "a"} set MolId [DonneIdDeAccessPDB $MolId] set lss [$MolId SSBin $type $chn] if {$prems} { set final $lss set prems 0 } else { set tmp "" foreach a [split $final ""] b [split $lss ""] { append tmp [expr {$a & $b}] } set final $tmp } } set d 0 set i 0 foreach e [split $final ""] { if {$e} { if {! $d} {set d $i} } else { if {$d} { set f $i set PositionInitiale "1.$d" SelectLesColonnes "1.$f" set d 0 } } incr i } return } proc SelectSeqRegion {pos what {what2 ""}} { global NomTextSeq SDG LNDG LNOrdali LSOrdali EFeat GroupeDeLaSequence if {$what eq "stock"} { set pos [$NomTextSeq index $pos] lassign [split $pos .] y x if {[lindex $LNOrdali $y-1] eq ""} {return} set EFeat(PosInit) $pos switch $what2 { "group" { set nom [lindex $LNOrdali $y-1] set EFeat(gref) [set GroupeDeLaSequence($nom)] } "all" { set EFeat(Ly) [list] set i -1 foreach n $LNOrdali { incr i if {$n eq ""} {continue} set y [expr {$i+1}] lappend EFeat(Ly) $y } } } if {$what2 eq ""} {set what2 "seq"} PoseUneMarque $pos $what2 return } if {$EFeat(PosInit) eq ""} {return} lassign [split $EFeat(PosInit) .] yi xi set pos [$NomTextSeq index $pos] lassign [split $pos .] yf xf if {$xf == $xi} {incr xf} set toTag $EFeat(ZonesSel) switch $what { "motion" { $NomTextSeq configure -state normal $NomTextSeq tag remove slct 1.0 end $NomTextSeq tag remove Marque 1.0 end $NomTextSeq configure -state disabled switch $what2 { "seq" { lappend toTag $yi.$xi $yi.$xf } "group" { if {$EFeat(gref) eq ""} {return} foreach s [set SDG($EFeat(gref))] { set y [expr {[lsearch $LNOrdali $s]+1}] lappend toTag $y.$xi $y.$xf } } "all" { foreach y $EFeat(Ly) { lappend toTag $y.$xi $y.$xf } } } if {$toTag != {}} { $NomTextSeq configure -state normal $NomTextSeq tag add slct {*}$toTag $NomTextSeq tag raise slct $NomTextSeq configure -state disabled } set EFeat(ZonesSel) $toTag } "seq" { set EFeat(PosInit) "" } "group" { set EFeat(gref) "" set EFeat(PosInit) "" } "all" { set EFeat(Ly) [list] set EFeat(PosInit) "" } } return } proc SelectSeqsRegion {xt yt} { global LNSeqlab xIR yIR global NomTextSeq RegionSeqSel lassign [split [$NomTextSeq index @${xt},${yt}] .] y x if {[string trim [lindex $LNSeqlab [expr {$y-1}]]] eq ""} { return } if {$x > $xIR} { set xmin $xIR set xmax $x } else { set xmin $x set xmax $xIR } if {$y > $yIR} { set ymin $yIR set ymax $y } else { set ymin $y set ymax $yIR } if {$RegionSeqSel != {}} { eval $NomTextSeq tag remove InvS $RegionSeqSel } set RegionSeqSel {} for {set j $ymin} {$j <= $ymax} {incr j} { if {[string trim [lindex $LNSeqlab [expr {$j-1}]]] eq ""} {continue} lappend RegionSeqSel "$j.$xmin" "$j.$xmax" } eval $NomTextSeq tag add InvS $RegionSeqSel $NomTextSeq tag raise InvS return } proc SelectZoneAnnotation {w x y} { lassign [split [$w index @$x,$y] .] yf xf set xd [set ::Anno(xdebut)] set yd [set ::Anno(ydebut)] if {$xf < $xd} { set xt $xd set xd $xf set xf $xt } if {$yf < $yd} { set yt $yd set yd $yf set yf $yt } set Lt {} for {set y $yd} {$y <= $yf} {incr y} { lappend Lt $y.$xd $y.$xf } if {$Lt != {}} {$w tag add selZone {*}$Lt } return } proc SelectionBornesdespabs {} { set Fichier "[RepertoireDuGenome]/fiches/bornesdespabs" foreach Nom [ListeDesDifferentiellementExprimesSansJumeaux "target"] { set Vu($Nom) 1 } foreach Ligne [LesLignesDuFichier $Fichier] { set Code [lindex $Ligne 0] if {![info exists Vu($Code)]} {continue} append NouveauFichier "$Ligne\n" } return $NouveauFichier } proc SelectionControlesAccess {} { Wup "Permet le design des Controles utilise sur la puce a ADN" set ListeControles [ListeControlesActiChip] set Wdir1 "[RepertoireDuGenome]/Probes/Controles_ActiChip/RefSeq_Controles" set Wdir2 "[RepertoireDuGenome]/Probes/Controles_ActiChip/Unigene_Controles" SelectionDesOligosPourTous $ListeControles $Wdir1 SelectionDesOligosPourTous $ListeControles $Wdir2 #SelectionCroiseeDesOligosPourTous $ListeControles $Wdir1 $Wdir2 return "" } proc SelectionCroiseeControlesAccess {} { Wup "Permet le design des Controles utilise sur la puce a ADN" set ListeControles [ListeControlesActiChip] set Wdir1 "[RepertoireDuGenome]/Probes/Controles_ActiChip/RefSeq_Controles" set Wdir2 "[RepertoireDuGenome]/Probes/Controles_ActiChip/Unigene_Controles" SelectionCroiseeDesOligosPourTous $ListeControles $Wdir1 $Wdir2 return "" } proc SelectionCroiseeDesOligos {PAB DirOligo1 DirOligo2 {DeGUI ""}} { Wup "Selectionne de maniere automatique le meilleur oligo entre 2 banques" Wup "On prend l Oligo le plus a droite (3 prime,lie a la technique d extraction) et avec le meilleur score" Wup "Si le meilleur est avec 0 candidat, on retient aussi un oligo avec plus que 0 si il existe" set FichierCroisee "$DirOligo1/${PAB}.croisee" set FichierOligo "$DirOligo1/${PAB}.oligo" set FichierBlastn "$DirOligo1/${PAB}.blastn" set RefBId "" set AccessDeRef "" set BId "" set AccessDeRef2 "" set Categorie "" set LesCategories "" set SelOligo "" set OligoAlternatif "" set Selection "" if {[file exists $FichierCroisee]} { if {[OuiOuNonMemo "X-Selection already done.\nWould You like to keep it" ]} { return "" } else { file delete -force FichierCroisee } } set initTime [clock clicks -milliseconds] #Test de la presence de la query dans le blast ############################################## set RefBId [ReturnBestHitInDatabase $PAB $DirOligo1] set AccessDeRef [lindex $RefBId 0] set BId [lindex $RefBId 1] set AccessDeRef2 [lindex [ReturnBestHitInDatabase $PAB $DirOligo2] 0] set LesOligosEnCommuns [LesOligosIdentiques $PAB $DirOligo1 $DirOligo2] if {$LesOligosEnCommuns==""} { if {$DeGUI==""} { Espionne "Try to X-Select Oligo for $PAB but no shared oligo" } else { FaireLire "Try to X-Select Oligo for $PAB but no shared oligo" } return "" } foreach OligoEnCommun $LesOligosEnCommuns { if {! [regexp -nocase {[a-z]+ || [0-9]+} $OligoEnCommun]} {continue} set NbCandidatsTotal [lindex $OligoEnCommun 3] if { $Categorie!=$NbCandidatsTotal} { set Categorie $NbCandidatsTotal lappend LesCategories $Categorie } lappend TabCroisee($Categorie,LesOligos) $OligoEnCommun } #Si on pas de ref dans la banque on pose la question si on doit quand meme choisir #Sinon prend un access de categorie 0 si y en a if {$AccessDeRef==""} { if {$DeGUI!=""} { if {! [OuiOuNonMemo "It seems that no accession has passed cutoffs for Best Hit check !\nYou might all the same choose an Oligo ?"]} { Espionne "No Oligo to select for $PAB due to no relevant reference in blastn" return "" } set AccessDeRef $BId } else { Espionne "No Oligo to select for $PAB due to no relevant reference in blastn" return "" } } if {$AccessDeRef == "" && $AccessDeRef2 == ""} { if {[info exists TabCroisee(0,LesOligos)]} {set LesCategories "0"} } set LesCategories [lsort -integer -increasing $LesCategories] #Espionne "LesCategories $LesCategories" foreach Categorie $LesCategories { set LesOligos [lsort -integer -index 1 -decreasing [set TabCroisee($Categorie,LesOligos)]] foreach Oligo $LesOligos { set NomOligo [lindex $Oligo 0] set NbCandidats1 [lindex $Oligo 4] set NbCandidats2 [lindex $Oligo 5] #Espionne "Oligo $NomOligo OligoAlternatif $OligoAlternatif SelOligo $SelOligo" #Modif les candidats #################### set LesCandidats [InterrogeInfoDeLOligo $FichierOligo $NomOligo LesCandidats] if {($AccessDeRef!="" && [regexp "No Hit" $LesCandidats]) || ($AccessDeRef!="" && ! [regexp -nocase "$AccessDeRef" $LesCandidats]) || ($AccessDeRef=="" && ! [regexp "No Hit" $LesCandidats])} { #Espionne "$PAB No query $AccessDeRef for $NomOligo we skip this one" #Espionne "$NomOligo $LesCandidats" continue } #Le Meilleur a garde en alternatif if {$Categorie=="0" || $Categorie=="1"} { #Si il y a ces categories c que un des deux design a eu des regions sans la query set OligoAlternatif $NomOligo break } #Dans une categorie on prefere garder ceux sans 0 candidats if {$NbCandidats1=="0" || $NbCandidats2=="0"} { #Si on a pas encore de roue de secours if { $OligoAlternatif == ""} { set OligoAlternatif $NomOligo } else {continue} } else { #On tient quelque chose set SelOligo $NomOligo if {$NbCandidats1>1} { #On va ici car il n est pas specifique #On met donc l oligo alternatif a la place #Espionne "On passe par la $Categorie $NbCandidats1 $NbCandidats2" if {$OligoAlternatif!=""} { #Espionne "On change $SelOligo pour $OligoAlternatif" set SelOligo $OligoAlternatif;set OligoAlternatif "" } } #Cas ou on a 2 candidats au total et en a 1 seul dans les 2 Design #Oligo specifique pour les 2 TOP if {$Categorie == "2" && $NbCandidats1 == "1"} { set SelOligo $NomOligo;set OligoAlternatif "" } #Cas ou on a plus de 2 candidats au total mais un des 2 design n en a qu 1 #On doit cependant bien tester si ceci a lieu pour des design correct (AccessDeRef non nul !!) if {($AccessDeRef != "" && $NbCandidats1 == "1")||($AccessDeRef2 != "" && $NbCandidats2 == "1")} { set SelOligo $NomOligo;set OligoAlternatif "" } break } } #On en a un et on quitte ou alors on continue if {$SelOligo!=""} {break} else {continue} } if {$SelOligo=="" || $AccessDeRef==""} { #Si au final on a rien du tout on prend OligoAlternatif if {$OligoAlternatif!=""} { set SelOligo $OligoAlternatif;set OligoAlternatif "" } } #Espionne "OligoAlternatif $OligoAlternatif SelOligo $SelOligo" if {$SelOligo!=""} { #Si au final on a rien du tout on ne sauve pas set Selection [join [ExtraitOligoDuTFA $PAB $SelOligo $DirOligo1] "\n"] Sauve $Selection dans $FichierCroisee } else { if {$DeGUI==""} { Espionne "Try to X-Select Oligo for $PAB but it fails" } else { FaireLire "Try to X-Select Oligo for $PAB but it fails" } } #Espionne "Selection $Selection" if {$OligoAlternatif!=""} { set Selection [join [ExtraitOligoDuTFA $PAB $OligoAlternatif $DirOligo1] "\n"] AppendAuFichier $FichierCroisee $Selection } return "" } proc SelectionCroiseeDesOligosPourTous {{LesPABs ""} {DirOligo1 ""} {DirOligo2 ""}} { Wup "Selectionne de maniere automatique le meilleur oligo entre 2 banques" Wup "On prend l Oligo le plus a droite (3 prime, lie a la technique d extraction) et avec le meilleur score" Wup "Si le meilleur est avec 0 candidat, on retient aussi un oligo avec plus que 0 si il existe" if {$DirOligo1=="" || $DirOligo2==""} { FaireLire "You need 2 directories containing 2 design for your sequence." set i 0 while {1} { incr i if {$i=="1"} { set Texte "Choose directory N°${i} (the one where the file is also saved)" } else {set Texte "Choose directory N°${i}"} FaireLire "$Texte" set Dir [tk_chooseDirectory -title "Choose a directory where to save" -initialdir "[RepertoireDuGenome]"] if {$Dir == ""} { set i [expr $i-1] if {! [OuiOuNon "Would you like to continue ?"]} {return ""} } else {set DirOligo${i} $Dir} if {$i =="2"} {break} } } if {$LesPABs==""} { set ListeAcc "" foreach Acc [glob -nocomplain -directory $DirOligo1 "*.masked"] { regsub ".masked" $Acc "" Acc lappend ListeAcc [file tail $Acc] } set LesPABs [EntreDeux $ListeAcc] if { $LesPABs == ""} {return ""} } elseif {$LesPABs == "LaTotale"} { set LesPABs [ListeDesPABs] } foreach MonPAB $LesPABs { SelectionCroiseeDesOligos $MonPAB $DirOligo1 $DirOligo2 DeGui set FichierOligo1 "$DirOligo1/${MonPAB}.oligo" set FichierOligo2 "$DirOligo2/${MonPAB}.oligo" set FichierBlast1 "$DirOligo1/${MonPAB}.blastn" set FichierBlast2 "$DirOligo2/${MonPAB}.blastn" #Attention #InterrogeInfoDeLOligo "$DirOligo1/$MonPAB" Decharge #InterrogeInfoDeLOligo "$DirOligo2/$MonPAB" Decharge #InterrogeBestHitInDataBase "$DirOligo1/$MonPAB" Decharge #InterrogeBestHitInDataBase "$DirOligo2/$MonPAB" Decharge InterrogeInfoDeLOligo $FichierOligo1 Decharge InterrogeInfoDeLOligo $FichierOligo2 Decharge InterrogeBestHitInDatabase $FichierBlast1 Decharge InterrogeBestHitInDatabase $FichierBlast2 Decharge } OuiOuNonMemo UnsetAllPlease return "" } proc SelectionCroiseeDesOligos_GUI {PAB DirOligo1 {DirOligo2 ""}} { Wup "Selectionne de maniere automatique le meilleur oligo entre 2 banques" Wup "On prend l Oligo le plus a droite (3 prime, lie a la technique d extraction) et avec le meilleur score" Wup "Si le meilleur est avec 0 candidat, on retient aussi un oligo avec plus que 0 si il existe" if {$PAB=="" || $DirOligo1==""} {return ""} set FichierCroisee "$DirOligo1/${PAB}.croisee" if {[file exists $FichierCroisee]} { if {![OuiOuNon "X-Selection already done.\nShould we proceed again (lost previous) ?"]} {return ""} file delete -force $FichierCroisee } FaireLire "You need 2 directories containing 2 design for your sequence." set i 0 while {1} { incr i if {$i=="1"} { set Texte "Choose directory N°${i} (the one where the file is also saved)" } else { set Texte "Choose directory N°${i}" } FaireLire "$Texte" set Essai "DirOligo${i}" if {[OuiOuNon "Shall we use [set $Essai] ?"]} { set Dir "[set $Essai]" } else { set Dir [tk_chooseDirectory -title "Choose a directory where to save" -initialdir "[RepertoireDuGenome]"] } if {$Dir == ""} { set i [expr $i-1] if {! [OuiOuNon "Would you like to continue ?"]} {return ""} } else {set DirOligo${i} $Dir} if {$i =="2"} {break} } SelectionCroiseeDesOligos $PAB $DirOligo1 $DirOligo2 DeGUI OuiOuNonMemo UnsetAllPlease return "" } proc SelectionCroiseeDesRho {} { set Wdir1 "[RepertoireDuGenome]/Probes/RefSeq_Rho" set Wdir2 "[RepertoireDuGenome]/Probes/Unigene_Rho" set ListeDesRhos [ListeDesRhos] SelectionCroiseeDesOligosPourTous $ListeDesRhos $Wdir1 $Wdir2 } proc SelectionDePasTouche {{LesPABs ""}} { if {$LesPABs eq ""} { set LesPABs [MorceauxChoisis [ListeDesPABs]] } foreach pab [ListeDesPABs] { set fichierPasTouche "[RepertoireDuGenome]/pastouche/$pab" file delete $fichierPasTouche if {[lsearch -exact $LesPABs $pab] == -1} {continue} Espionne $pab set fh [open $fichierPasTouche "w"] puts $fh "SelectionDePasTouche" close $fh } } proc SelectionDesGODansFichier {K X Y} { global LesNomsSelectionnesSurLAffichage set Fichier "[RepertoireDuGenome]/fiches/SelectionDesGOSurLAffichage" if {![info exists LesNomsSelectionnesSurLAffichage]} { if {[file exists $Fichier]} { if {[OuiOuNon "Would you want to delete $Fichier?"]} { File delete $Fichier set LesNomsSelectionnesSurLAffichage {} } else { set LesNomsSelectionnesSurLAffichage [LesLignesDuFichier $Fichier] } } else { set LesNomsSelectionnesSurLAffichage {} } } set Id [$K find withtag current] set MesTags [$K gettags $Id] set Type [lindex $MesTags 1] set GO [lindex $MesTags 2] set Niv [lindex $MesTags 3] set Def [lindex [lindex $MesTags 4] 0] Espionne "$GO\t$Type\t$Niv\t$Def" lappend LesNomsSelectionnesSurLAffichage "$GO\t$Type\t$Niv\t$Def" Sauve [join $LesNomsSelectionnesSurLAffichage "\n"] dans $Fichier return $LesNomsSelectionnesSurLAffichage } proc SelectionDesOligos {PAB DirOligo {DeGUI ""}} { Wup "Selectionne de maniere automatique le meilleur oligo pour une banque" Wup "On prend l Oligo le plus a droite (3 prime,lie a la technique d extraction) et avec le meilleur score" Wup "Attention si aucun Accessderef on ne choisit que parmi la categorie 0 candidat" Wup "On retiendra 2 oligos si un des 2 a 0 candidat et l autre plus de 1 candidat" Wup "Attention pose la question si pas d access retenu si on vient de GUI" set FichierOligo "$DirOligo/$PAB.oligo" set FichierSelection "$DirOligo/$PAB.selection" set FichierBlastn "$DirOligo/$PAB.blastn" set AccessDeRef "" set BId "" set LesCategories "" set Categorie "" set SelOligo "" set OligoAlternatif "" set Selection "" if {[file exists $FichierSelection]} { if {[OuiOuNonMemo "Selection already done.\nWould You like to keep it" ]} { return "" } else { file delete -force $FichierSelection } } #Test de la presence de la query dans le blast ############################################## #On ne veut pas forcement tenir compte de la query if {[LesParametresDuDesign QueryCheck "LaValeurMerci"]=="1"} { set RefBId [ReturnBestHitInDatabase $PAB $DirOligo] set AccessDeRef [lindex $RefBId 0] set BId [lindex $RefBId 1] } else { set RefBId "" set AccessDeRef "" set BId "" } set LesOligos [InterrogeInfoDeLOligo $FichierOligo LesNoms] if {$LesOligos == ""} { if { [InterrogeInfoDeLOligo $FichierOligo NotDone]=="1"} { #Oligo non calcules Espionne "No Oligo yet designed for $PAB" return "" } elseif { [InterrogeInfoDeLOligo $FichierOligo NoOligo]=="1"} { #Oligo non trouves Espionne "No Oligo found for $PAB" if {[file exists "$FichierOligo"]} { file copy -force "$FichierOligo" $FichierSelection } return "" } else {Espionne "Rien a faire ...";return ""} } foreach Oligo $LesOligos { set NbCandidats [InterrogeInfoDeLOligo $FichierOligo $Oligo NbCandidats] if { $Categorie!=$NbCandidats} { set Categorie $NbCandidats lappend LesCategories $Categorie } lappend TabCroisee($Categorie,LesOligos) [list $Oligo [InterrogeInfoDeLOligo $FichierOligo $Oligo Debut]] } set LesCategories [lsort -integer -increasing $LesCategories] #Si on pas de ref dans la banque on pose la question si on doit quand meme choisir #Sinon prend un access de categorie 0 si y en a if {$AccessDeRef==""} { if {$DeGUI!=""} { if {! [OuiOuNonMemo "It seems that no accession has passed cutoffs for Best Hit check !\nYou might all the same choose an Oligo ?"]} { Espionne "No Oligo to select for $PAB due to no relevant reference in blastn" return "" } set AccessDeRef $BId } else { Espionne "No Oligo to select for $PAB due to no relevant reference in blastn" return "" } } if {$AccessDeRef==""} { if {[info exists TabCroisee(0,LesOligos)]} {set LesCategories "0"} } #Espionne "LesCategories $LesCategories" foreach Categorie $LesCategories { set LesOligos [lsort -integer -index 1 -decreasing [set TabCroisee($Categorie,LesOligos)]] foreach Oligo $LesOligos { set NomOligo [lindex $Oligo 0] #Espionne "OligoAlternatif $OligoAlternatif SelOligo $SelOligo" set LesCandidats [InterrogeInfoDeLOligo $FichierOligo $NomOligo LesCandidats] if {($AccessDeRef!="" && [regexp "No Hit" $LesCandidats]) || ($AccessDeRef!="" && ! [regexp -nocase "$AccessDeRef" $LesCandidats]) || ($AccessDeRef=="" && ! [regexp "No Hit" $LesCandidats])} { #Espionne "$PAB No query $AccessDeRef for $NomOligo we skip this one" #Espionne "$NomOligo $LesCandidats" continue } if { $Categorie=="0"} { set OligoAlternatif $NomOligo break } else { set SelOligo $NomOligo if {$Categorie=="1"} {set OligoAlternatif ""} break } } if {$SelOligo!=""} {break} else {continue} } #Si au final on a rien du tout on prend OligoAlternatif if {$SelOligo==""} {set SelOligo $OligoAlternatif;set OligoAlternatif ""} #Espionne "OligoAlternatif $OligoAlternatif SelOligo $SelOligo" if {$SelOligo!=""} { set Selection [join [ExtraitOligoDuTFA $PAB $SelOligo $DirOligo] "\n"] Sauve $Selection dans $FichierSelection } else { if {$DeGUI==""} { Espionne "Try to Select Oligo for $PAB but it fails" } else { FaireLire "Try to Select Oligo for $PAB but it fails" } } #Espionne "Selection $Selection" if {$OligoAlternatif!=""} { set Selection [join [ExtraitOligoDuTFA $PAB $OligoAlternatif $DirOligo] "\n"] AppendAuFichier $FichierSelection $Selection } if {[info exist TabCroisee]} {unset TabCroisee} return "" } proc SelectionDesOligosPourTous {{LesPABs ""} {Dir ""}} { Wup "Selectionne de maniere automatique le meilleur oligo pour une banque" Wup "On prend l Oligo le plus a droite (3 prime,lie a la technique d extraction) et avec le meilleur score" Wup "On retiendra 2 oligos si un des 2 a 0 candidat et l autre plus de 1 candidat" Wup "Attention pose la question si pas d access retenu" if {$Dir == ""} { FaireLire "Please choose directory where your design is saved." set Dir [tk_chooseDirectory -title "Choose result directory." -initialdir "[RepertoireDuGenome]"] if {$Dir == ""} {return ""} } if {$LesPABs==""} { set ListeAcc "" foreach Acc [glob -nocomplain -directory $Dir "*.masked"] { regsub ".masked" $Acc "" Acc lappend ListeAcc [file tail $Acc] } set LesPABs [EntreDeux $ListeAcc] if { $LesPABs == ""} {return ""} } elseif {$LesPABs == "LaTotale"} { set LesPABs [ListeDesPABs] } foreach MonPAB $LesPABs { set FichierOligo "$Dir/${MonPAB}.oligo" set FichierBlast "$Dir/${MonPAB}.blastn" SelectionDesOligos $MonPAB $Dir DeGUI InterrogeBestHitInDatabase $FichierOligo Decharge InterrogeBestHitInDatabase $FichierBlast Decharge } OuiOuNonMemo UnsetAllPlease return "" } proc SelectionDesOligos_GUI {PAB DirOligo} { Wup "Selectionne de maniere automatique le meilleur oligo pour une banque" Wup "On prend l Oligo le plus a droite (3 prime,lie a la technique d extraction) et avec le meilleur score" Wup "On retiendra 2 oligos si un des 2 a 0 candidat et l autre plus de 1 candidat" Wup "Attention pose la question si pas d access retenu" if {$PAB=="" || $DirOligo==""} {return ""} set FichierSelection "$DirOligo/$PAB.selection" if {[file exists $FichierSelection]} { if {! [OuiOuNon "Selection already done.\nShould we proceed again (lost previous) ?"]} { return "" } file delete -force $FichierSelection } SelectionDesOligos $PAB $DirOligo DeGUI OuiOuNonMemo UnsetAllPlease return "" } proc SelectionDesPrimers {PAB DirOligo {DeGUI ""}} { Wup "Selectionne de maniere automatique les 2 meilleurs oligo pour une banque" Wup "On prend les oligos le plus a droite dans chaque zone de design" # D1 F1 D2 F2 # D ------------------------------------------------------------- F # | Zone 1 | 50 | ICDS 2 seq | 50 | Zone2 | Wup "Attention si aucun Accessderef on ne choisit que parmi la categorie 0 candidat" Wup "On retiendra 2 oligos si un des 2 a 0 candidat et l autre plus de 1 candidat" Wup "Attention pose la question si pas d access retenu si on vient de GUI" LesParametresDuDesign QueryCheck 0 Positionne set FichierOligo "$DirOligo/$PAB.oligo" set FichierSelection "$DirOligo/$PAB.selection" set FichierBlastn "$DirOligo/$PAB.blastn" set AccessDeRef "" set BId "" set LesCategories "" set Categorie "" set SelOligo "" set OligoAlternatif "" set Selection "" set SelectionOk 0 if {0 && [file exists $FichierSelection]} { if {[OuiOuNonMemo "Selection already done.\nWould You like to keep it" ]} { return "" } else { file delete -force $FichierSelection } } #Test de la presence de la query dans le blast ############################################## #On ne veut pas forcement tenir compte de la query if {[LesParametresDuDesign QueryCheck "LaValeurMerci"]=="1"} { set RefBId [ReturnBestHitInDatabase $PAB $DirOligo] set AccessDeRef [lindex $RefBId 0] set BId [lindex $RefBId 1] } else { set RefBId "" set AccessDeRef "" set BId "" } set LesOligos [InterrogeInfoDeLOligo $FichierOligo LesNoms] if {$LesOligos == ""} { if { [InterrogeInfoDeLOligo $FichierOligo NotDone]=="1"} { #Oligo non calcules Espionne "No Oligo yet designed for $PAB" return "" } elseif { [InterrogeInfoDeLOligo $FichierOligo NoOligo]=="1"} { #Oligo non trouves Espionne "No Oligo found for $PAB during design" if {[file exists "$FichierOligo"]} { file copy -force "$FichierOligo" $FichierSelection } return "" } else {Espionne "Rien a faire ...";return ""} } #Recuperation des infos de position de design (cf dessin plus haut) set D1 [InterrogeLesInfosICDS $PAB D1] set F1 [InterrogeLesInfosICDS $PAB F1] set D2 [InterrogeLesInfosICDS $PAB D2] set F2 [InterrogeLesInfosICDS $PAB F2] set LesCutOffs [list Tm XDebutDeOligoNt NbCandidats] set LesTms [list 64 62 66 68 60] foreach Tm $LesTms { #Espionne ">>>>>>>>>$Tm<<<<<<<<<" set Tm_2 $Tm set XDebutDeOligoNt $D1 set XDebutDeOligoNt_2 $F1 set NbCandidats 1 set NbCandidats_2 1 foreach NomDeVar $LesCutOffs { RestrictedParameter $NomDeVar [set $NomDeVar ] Positionne if {! [info exists ${NomDeVar}_2]} {continue} RestrictedParameter ${NomDeVar}_2 [set ${NomDeVar}_2] Positionne } set LOligo1 [ListeDesOligosRestreints $FichierOligo $LesCutOffs] RestrictedParameter ResetAll set XDebutDeOligoNt $D2 set XDebutDeOligoNt_2 $F2 set NbCandidats 1 set NbCandidats_2 1 foreach NomDeVar $LesCutOffs { RestrictedParameter $NomDeVar [set $NomDeVar ] Positionne if {! [info exists ${NomDeVar}_2]} {continue} RestrictedParameter ${NomDeVar}_2 [set ${NomDeVar}_2] Positionne } set LOligo2 [ListeDesOligosRestreints $FichierOligo $LesCutOffs] #On a pas de candidats if {$LOligo1 == "" || $LOligo2 == ""} {continue} #On a des candidats #On trie les oligos en fonction de la distance puis en fonction du nombre de candidats if {$D1<$D2} { set LOligo1_PosNbX [lsort -increasing -integer -index 3 [lsort -decreasing -integer -index 2 $LOligo1]] set LOligo2_PosNbX [lsort -increasing -integer -index 3 [lsort -increasing -integer -index 2 $LOligo2]] } else { set LOligo1_PosNbX [lsort -increasing -integer -index 3 [lsort -increasing -integer -index 2 $LOligo1]] set LOligo2_PosNbX [lsort -increasing -integer -index 3 [lsort -decreasing -integer -index 2 $LOligo2]] } EspionneL $LOligo1_PosNbX Espionne "-----------------------------" EspionneL $LOligo2_PosNbX set BestOligo1 [lindex $LOligo1_PosNbX 0] set BestOligo2 [lindex $LOligo2_PosNbX 0] set SelectionOk 1 Espionne "-----------------------------" Espionne "$BestOligo1" Espionne "$BestOligo2" break } if {$SelectionOk=="1"} { Espionne "Oligo found" set Selection [join [ExtraitOligoDuTFA $PAB [lindex $BestOligo1 0] $DirOligo] "\n"] append Selection "\n" append Selection [join [ExtraitOligoDuTFA $PAB [lindex $BestOligo2 0] $DirOligo] "\n"] #Espionne "$Selection" Sauve $Selection dans $FichierSelection } else { Espionne "No Oligo found during selection" } return "" } proc SelectionDesPrimersPourTous {} { set GenomeName [file tail [RepertoireDuGenome]] set LesSeqs [glob -nocomplain -directory "[RepertoireDuGenome]/regions" "[PrefixeDuGenome $GenomeName]*"] set DirOligo "[RepertoireDuGenome]/oligos" foreach Seq $LesSeqs { Espionne ">>>>>>>$Seq" set SeqName [file tail $Seq] SelectionDesPrimers $SeqName $DirOligo Espionne "" } } proc SelectionDesSequences {GroupeSecator} { set LesNouveauxNoms [list] foreach Nom $GroupeSecator { if {![regexp {^[0-9]} $Nom]} { lappend LesNouveauxNoms $Nom } } return $LesNouveauxNoms } proc SelectionDuGOPourDrawGOTreeBall {K X Y {SeulOuAvecCesDescendants Seul}} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set LesGO [lindex $MesTags 3 ] global LePanelPrincipalDuTreeBall set LargeurMax [lindex $LePanelPrincipalDuTreeBall 1] set HauteurMax [lindex $LePanelPrincipalDuTreeBall 2] set LargeurFenetre [lindex $LePanelPrincipalDuTreeBall 3] set HauteurFenetre [lindex $LePanelPrincipalDuTreeBall 4] if {[string equal -nocase $SeulOuAvecCesDescendants "Seul"]} { DrawGOTreeBall $LesGO $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre } else { DrawGOTreeBall [concat [TousLesDescendantsGODesGO $LesGO] $LesGO] $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre } return } proc SelectionDuGOPourDrawTreeOneGO {K X Y} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set GO [lindex [lindex $MesTags 3] 0] set w ".selectiondrawtreeonego" set FrameTree "$w.frametree" set KTreeOneGO "$FrameTree.wtree" if {![winfo exists $w]} { toplevel $w ######################################################### frame $FrameTree -bg grey pack $FrameTree -fill both -expand 1 -side top ############One GO -> frame right######################### Tree:create $KTreeOneGO -width 400 -height 600 -yscrollcommand "$FrameTree.sby set" -xscrollcommand "$FrameTree.sbx set" scrollbar $FrameTree.sby -orient vertical -command "$KTreeOneGO yview" scrollbar $FrameTree.sbx -orient horizontal -command "$KTreeOneGO xview" grid $KTreeOneGO -row 0 -column 0 -sticky news grid $FrameTree.sby -row 0 -column 1 -sticky news grid $FrameTree.sbx -row 1 -column 0 -sticky news grid rowconfigure $FrameTree 0 -weight 1 grid columnconfigure $FrameTree 0 -weight 1 ######################################################### $KTreeOneGO bind x <1> { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl if {[regexp -nocase {(GO:[0-9]+)} $lbl tmp GO]} { set KTreeOneGO ".selectiondrawtreeonego.frametree.wtree" DrawTreeOneGO $KTreeOneGO $GO } } $KTreeOneGO bind x <3> { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl set dir [file dirname $lbl ] set lbl [file tail $lbl ] set lblPere [file tail $dir ] set lblGdPere [file tail [file dirname $dir]] if {[string equal -nocase $lblPere "access"]} { DrawInfo Access $lbl } if {[string equal -nocase $lblGdPere "gscopebox"]} { regsub -all "\\|" $lblPere "/" lblPere DrawInfo Box $lblPere $lbl } if {[regexp -nocase {^ipr[0-9]+$} $lbl]} { DrawInfo Interpro $lbl } } $KTreeOneGO bind x { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl Tree:openallchildren %W $lbl } $KTreeOneGO bind x { set lbl [Tree:labelat %W %x %y] Tree:setselection %W $lbl Tree:closeallchildren %W $lbl } $KTreeOneGO bind x { Tree:open %W [Tree:labelat %W %x %y] } set FrameExit "$w.frameexit" frame $FrameExit pack $FrameExit -fill x -side bottom -expand 1 set BoutonExit "$FrameExit.buttonexit" button $BoutonExit -borderwidth 1 -text "CLOSE" pack $BoutonExit -fill x -side bottom -expand 0 $BoutonExit configure -command "destroy $w" } ######################################################### DrawTreeOneGO $KTreeOneGO $GO ######################################################### return } proc SelectionFichierRequete {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set PFAM [lindex $Ligne 0] set NbSupp [lindex $Ligne 1] if {$Nb==0} {lappend LesPFAMSpecifiques $Ligne} } Espionne [llength $LesPFAMSpecifiques] set L [lsort -index 2 -integer $LesPFAMSpecifiques] SauveLesLignes $L dans "[RepertoireDuGenome]/fiches/DomainesSpe" } proc SelectionLoc {} { foreach Nom [ListeDesDifferentiellementExprimesSansJumeaux] { set Vu($Nom) 1 } set FichierLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" if {![file exists $FichierLoc]} { FaireLire "Please, create the file $FichierLoc" return "" } set LaSelection {} foreach Ligne [LesLignesDuFichier $FichierLoc] { set CodeGscope [lindex $Ligne 0] if {![info exists Vu($CodeGscope)]} {continue} lappend LaSelection $Ligne } return $LaSelection } proc SelectionLocAvecCodeClones {} { foreach Nom [ListeDesDifferentiellementExprimesSansJumeaux] { set Code [ExtraitInfo $Nom "CodeClone"] set Vu($Code) 1 } set FichierLoc "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" if {![file exists $FichierLoc]} { FaireLire "Please, create the file $FichierLoc" return "" } set LaSelection {} foreach Ligne [LesLignesDuFichier $FichierLoc] { set CodeGscope [lindex $Ligne 0] set CodeClone [ExtraitInfo $Nom "CodeClone"] if {![info exists Vu($CodeClone)]} {continue} lappend LaSelection $Ligne } return $LaSelection } proc SelectionMeilleurMsfOlida {FichierTFA {NbSequencesMin 10}} { set lScores {} foreach ligne [LesLignesDuFichier "$FichierTFA.normd"] { if {[regexp -nocase {(dbclustal|rascal|leon)\s*:\s*(.+)} $ligne regMatch prog score]} { if {$score ne "undetermined"} { if {$prog eq "dbclustal"} { set prefixe "" } else { set prefixe ".[string tolower $prog]" } lappend lScores [list $prefixe $score] } } } foreach score [lsort -real -decreasing -index 1 $lScores] { set prefixe [lindex $score 0] set fichierMsf "${FichierTFA}${prefixe}.msf" if {[llength [LesAccessDuMsf $fichierMsf]] >= $NbSequencesMin} { return $fichierMsf } } return "$FichierTFA.msf" } proc SelectionZoneForObj {w x y} { set ::NwOj(isSelecting) 1 set Lsel [NewObjRangeSelected $w $x $y] if {$Lsel == {}} {return} set LToSel [lor $Lsel $::NwOj(ListeIdSel) from1] foreach e $LToSel { $w addtag Selected withtag $e } set LToUnsel [lor $Lsel $::NwOj(ListeIdSel) from2] if {$LToUnsel != {}} { ClearSelectionNwOj $LToUnsel } $w itemconfig Selected -fill DarkSlateGrey set ::NwOj(ListeIdSel) $Lsel update idletasks return } proc SelectionneCeCritere {Texte} { global CritereSelectionne Wup "Give a value to the waiting variable CritereSelectionne" if {$Texte=="CritereNonVoulu"} { set Critere "" } else { scan $Texte "%s" Critere } set CritereSelectionne $Critere } proc SelectionneLaLongueur {} { global Defauts global LNOrdali global LongueurTotale global Sequences global BonSeq set plupetit 99999 set plugrand -99999 set BonSeq {} set Long 0 set Care 0 set k 0 foreach Nm $LNOrdali { set SeqTmp [set Sequences($Nm)] regsub -all {\.} $SeqTmp "" Seq set LgSeq [string length $Seq] set Idxseq $k set Long [expr $Long + $LgSeq] if {$LgSeq > $plugrand} { set plugrand $LgSeq set Idxpg $Idxseq } if {$LgSeq < $plupetit} { set plupetit $LgSeq set Idxpp $Idxseq } set Care [expr $Care + ($LgSeq * $LgSeq)] incr k } set NbSq [llength $LNOrdali] set Moy [expr $Long / $NbSq] set MoyCare [expr $Moy * $Moy] set CareMoy [expr $Care / $NbSq] set Ecart [expr sqrt($CareMoy - $MoyCare)] set SeuilSup [expr $Moy + [set Defauts(CutLong)] * $Ecart] set SeuilInf [expr $Moy - [set Defauts(CutLong)] * $Ecart] AuLog "plus grand : [lindex $LNOrdali $Idxpg] $plugrand , Plus petit : [lindex $LNOrdali $Idxpp] $plupetit" AuLog "Moyenne : $Moy , Ecart-type : $Ecart , NbSq : $NbSq" AuLog "Seuil Inf : $SeuilInf , seuil sup : $SeuilSup" foreach Nm $LNOrdali { set SeqTmp [set Sequences($Nm)] regsub -all {\.} $SeqTmp "" Seq set LgSeq [string length $Seq] set Idxseq $k if {$LgSeq < $SeuilInf || $LgSeq > $SeuilSup} { lappend BonSeq 0 } else { lappend BonSeq 1 } } TermineSelection return } proc SelectionneLesBonsNoms {} { global Defauts global LNOrdali global ListeDesPiliersDuGroupe global ListeDesNomsDeGenes global ListeDesDefinitions global LongueurTotale global Sequences global BonSeq if {![set Defauts(CheckSeq)]} {return} set BonSeq {} set SynoNoms {} # ---- TRAITE LE NOM DU GENE DE REFERENCE ------ set NbG 0 scan [lindex $ListeDesNomsDeGenes 0] "%s " NGRef set NGRef [string trim $NGRef] if {![regexp {[A-Z]} [string index $NGRef end]]} { set NGRef [string replace $NGRef end end] } for {set i 1} {$i <= 5} {incr i} { scan [lindex $ListeDesNomsDeGenes $i] "%s " Gene set Gene [string trim $Gene] if {![regexp {[A-Z]} [string index $Gene end]]} { set Gene [string replace $Gene end end] } if {$Gene == $NGRef} {incr NbG} } if {$NbG < "2"} {set NGRef ""} AuLog "$NGRef" # ---- TRAITE LE CODE D'ENZYME , I.E. EC Z.Z.Z.Z ---- set ECRef "" set DE0 [lindex $ListeDesDefinitions 0] if {[string first "(EC " $DE0] != -1} { set Idxl [string first "(EC " $DE0] set Idxr [string first ")" [string range $DE0 $Idxl end]] set ECRef [string range $DE0 $Idxl [expr $Idxl + $Idxr]] } if {$ECRef != ""} { set NbEC 1 } else { set NbEC 0 } for {set i 1} {$i <= 5} {incr i} { set ECCou "" set DE [lindex $ListeDesDefinitions $i] if {[string first "(EC " $DE] != -1} { set Idxl [string first "(EC " $DE] set Idxr [string first ")" [string range $DE $Idxl end]] set ECCou [string range $DE $Idxl [expr $Idxl + $Idxr]] } if {$ECRef == ""} { set ECRef $ECCou } else { if {$ECCou == $ECRef} { incr NbEC } } } if {$NbEC < "2"} {set ECRef ""} AuLog "$ECRef" # ---- TRAITE LE NOM DE L'ENZYME ---- for {set i 0} {$i <= 5} {incr i} { set DE [lindex $ListeDesDefinitions $i] set DE [string trim $DE] if {![regexp {[A-Z]} [string index $DE end]]} { set DE [string replace $DE end end] } regsub -all "HYPOTHETICAL" $DE "" DE regsub -all "LONG" $DE "" DE regsub -all "FRAGMENT" $DE "" DE regsub -all "PUTATIVE" $DE "" DE set fini 1 while {$fini} { if {[string first "(" $DE] != -1} { set Idxl [string first "(" $DE] set Idxr [string first ")" $DE] set DE [string replace $DE $Idxl $Idxr] } else { set fini 0 } } regsub -all { +} $DE " " DE set DE [string trim $DE] if {[lsearch $SynoNoms $DE] == -1} { lappend SynoNoms $DE } } # ---- ON TRAITE ALORS TOUTES LES SEQUENCES ---- set NbrSeq [llength $LNOrdali] set f [open "test" w] puts $f "NGRef : $NGRef , ECRef : $ECRef , syn : [join $SynoNoms]" for {set i 0} {$i < $NbrSeq} {incr i} { set DE [lindex $ListeDesDefinitions $i] set GN [lindex $ListeDesNomsDeGenes $i] set BonGN 0 set BonEC 0 set BonDE 0 if {$NGRef != ""} { if {[string first $NGRef $GN] != -1} {set BonGN 1} } if {$ECRef != ""} { if {[string first $ECRef $DE] != -1} {set BonEC 1} } foreach syn $SynoNoms { if {[string first $syn $DE] != -1} {set BonDE 1} } if {$BonEC || $BonDE || $BonGN} { lappend BonSeq 1 puts $f "OUI !! BonEC $BonEC BonDE $BonDE BonGN $BonGN" puts $f "[lindex $LNOrdali $i] : $GN ---- $DE" } else { lappend BonSeq 0 puts $f "non !! BonEC $BonEC BonDE $BonDE BonGN $BonGN" puts $f "[lindex $LNOrdali $i] : $GN ---- $DE" } } puts $f "Longueur Totale : $i" close $f TermineSelection if {![set Defauts(SelectionNom)]} { InitPremierGroupe InitWTexte InitWRegle AfficheTexteSeq AfficheRegle set menustatus "Sequences selected by name" } return } proc SelectionneOligo {K} { Wup "Selectionne graphiquement l oligo choisis" set Id [$K find withtag current] set MesTags [$K gettags $Id] if {[regexp "Selected" $MesTags]} { $K itemconfigure $Id -outline "white" $K itemconfigure $Id -width "1" $K itemconfigure $Id -dash {} $K dtag $Id "Selected" return "" } else { $K itemconfigure $Id -outline "black" $K itemconfigure $Id -width "2" $K itemconfigure $Id -dash {6 4 2 4} $K addtag "Selected" withtag $Id } return "" } proc SelectionneOligoCroisee {K} { Wup "Selectionne graphiquement l oligo choisis et croisee" set Id [$K find withtag current] set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] if {[regexp "XSelect" $MesTags]} { $K dtag $Id "XSelect" set LesIds [$K find withtag "XSelect && Trace && $NomOligo"] foreach Ids $LesIds { $K delete $Ids } return "" } else { set MesCoords [$K coords $Id] set Xmin [lindex $MesCoords 0] set Xmax [lindex $MesCoords 2] set Ymin [expr [lindex $MesCoords 1]-([lindex $MesCoords 3]-[lindex $MesCoords 1])/4] set Ymax [expr [lindex $MesCoords 3]+([lindex $MesCoords 3]-[lindex $MesCoords 1])/4] $K create line $Xmin $Ymin $Xmax $Ymax -tags [list "XSelect" "Trace" "$NomOligo"] -fill "black" -width 4 $K create line $Xmin $Ymax $Xmax $Ymin -tags [list "XSelect" "Trace" "$NomOligo"] -fill "black" -width 2 $K addtag "XSelect" withtag $Id } return "" } proc SelectionneTousLesPDB {} { global lesbts foreach p $lesbts { $p deselect $p select } return } proc SelectionneToutesColonnes {} { global NomTextSeq StockPosition "" 1.0 $NomTextSeq tag delete Marque set fin 1.[expr {[LongueurDeLAlignement]-1}] SelectLesColonnes $fin return } proc SelfComplementarity {Query {AvecAffichage ""} {Titre ""}} { Wup "Test le repliement de la sequence query sur elle meme" #On cherche a detecter une sequence complementaire dans notre sequence #Il faut donc avec (blast ou fasta ou) regexp detecter une sequence identique dans le complementaire #On prend le reverse pour respecter le sens des sequence 5--3 et 3--5 et donc de l appariement #Position Q 5 14 30 37 #Normal 5-D----ATGCCCCG--------------CGGGGCAT-----F-3 # |||||||| |||||||| #Complement 3-D----TACGGGGC--------------GCCCCGTA-----F-5 # |||||||| |||||||| #Reverse 5-F----ATGCCCCG--------------CGGGGCAT-----D-3 #Position Q 37 30 14 5 # #On fasta notre sequence contre elle meme #le -i permet d avoir notre query en reverse and complement # ____ # / \ # | | # | | # \ / # |--| # |--| Hairpin # |--| # |--| # D F # | | # 5 3 if {$AvecAffichage=="" || $AvecAffichage=="1"} {set AvecAffichage 1} else {set AvecAffichage 0} if {! [file exists $Query]} { set LaSeq [join $Query ""] set NomDuFichier "N/A" } else { set LaSeq [join [QueLaSequenceDuFichierTFA $Query] ""] set NomDuFichier [file tail $Query] } if {$Titre == ""} { if {$NomDuFichier != ""} {set Titre $NomDuFichier} else {set Titre "Self Complementary Test"} } set LaSeq [string toupper $LaSeq] set TailleQuery [string length $LaSeq] set LaSeqComp [NucToReverseAndComplementNuc $LaSeq] set MaxContigue 6 #Qiagen stem length in loop is 9 set Fin [expr 1 + $MaxContigue - 1] for {set Debut 1} {$Fin <= $TailleQuery} {incr Debut 1} { set HairPin 0 set NewDebut "" set OldFin "" set Fin [expr $Debut + $MaxContigue - 1] if {! [expr $Fin <= $TailleQuery]} {break} #Une recherche avec le nombre de fois trouve et les dernieres coordonnees if {1} { #On recherche a etendre au maximum notre sequence complementaire while {1} { set tmp "" set NbMatches "" set TmpSeq "" if {! [expr $Fin <= $TailleQuery]} { set TmpSeq [string range $LaSeq [expr $Debut - 1] [expr $Fin - 1]] set NbMatches [regexp -indices -all "$TmpSeq" $LaSeqComp tmp] } #On verifie si la sequence n est pas un palindrome set TailleSeq [string length $TmpSeq] if {! [expr $TailleSeq % 2]} { #Si pas impair donc pair set FirstHalfSeq [string range $TmpSeq 0 [expr ($TailleSeq/2) -1]] set SecondHalfSeq [string range $TmpSeq [expr $TailleSeq/2] end] set FirstComp [NucToReverseAndComplementNuc $FirstHalfSeq] if {$FirstComp==$SecondHalfSeq} {set NbMatches 0} } if {$NbMatches =="0"} { if {$OldFin== ""} { #Espionne "meme fin" break } set Fin $OldFin set NewDebut [expr $Fin - $MaxContigue + 1] if {$NewDebut<$Debut} {set NewDebut ""} break } set OldFin $Fin incr Fin } } set tmp "" set NbMatches "" set TmpSeq "" #On recherche les coordonnees du plus long set TmpSeq [string range $LaSeq [expr $Debut - 1] [expr $Fin - 1]] set NbMatches [regexp -indices -all "$TmpSeq" $LaSeqComp tmp] set AfterFirstTime 0 if {$NbMatches> 1} {set Multiple 1} else {set Multiple 0} if {$NbMatches>=1} { while {$NbMatches > 0} { foreach {BorneGComp BorneDComp} $tmp { #Coordonnees liste (0 a 59) en reverse et passage en normal (1 a 60) set FComp [expr $TailleQuery - $BorneGComp - 1 + 1] set DComp [expr $TailleQuery - $BorneDComp - 1 + 1] #Espionne "Attention $TmpSeq en double $Debut $Fin $tmp $DComp $FComp" if {$Fin<$DComp} {set HairPin 1} else {if {$FComp<$Debut} {set HairPin 1}} } if {$HairPin} { set MonComp [string range $LaSeq [expr $DComp - 1] [expr $FComp - 1]] #Espionne "$TailleQuery Attention $TmpSeq/$MonComp seq complementaire $Debut/$Fin $DComp/$FComp" if {$Multiple=="1" || (! [info exists TabDesHairPin($Debut,$Fin)] && ! [info exists TabDesHairPin($DComp,$FComp)])} { #On ne stock que les sequences presentes dans un sens #Ex: 25/30 matche 55/60 est stocke mais 55/60 qui matche aussi 25/30 ne sera pas stocke #On stock les coordonnees reelles sur la sequences de 1 a 60 set TabDesHairPin($Debut,$Fin) 1 set TabDesHairPin($DComp,$FComp) 1 set TabDesHairPin($Fin) 1 set TabDesHairPin($Debut) $Fin lappend TabDesHairPin($Debut,$Fin,Complementaire) [list $DComp $FComp] lappend TabDesHairPin(LesPosHairPin) [list $Debut $Fin] } else { #Espionne "On passe pas par le stockage $Debut/$Fin $DComp/$FComp" } } else { #Espionne "Overlapping region not retained" } if {$Multiple=="1"} { #Plusieurs matches donc on oublie la seq deja faite et on continue set LaNewSeqComp [string range $LaSeqComp 0 [lindex $tmp 0]] set NbMatches [regexp -indices -all $TmpSeq $LaNewSeqComp tmp] } else { incr NbMatches -1 } #Espionne "Fin Nb $NbMatches" } } if {$NewDebut !=""} {set Debut $NewDebut} } #Tableau de bord contenant un resume de ce qui a ete trouve if {! [info exists TabDesHairPin(LesPosHairPin)]} { set Entete [list "Potential Complementary Sequence Searches"] lappend Entete "" lappend Entete "File: $NomDuFichier" lappend Entete "Sequence: $LaSeq" lappend Entete "Length (Query): $TailleQuery" lappend Entete "Stem Length: $MaxContigue" lappend Entete "" lappend Entete "No Complementary Sequence found" set Fen [AfficheVariable [join $Entete "\n"] "" $Titre] return "$Fen" } else { set LesDFHairPin [lsort -unique [set TabDesHairPin(LesPosHairPin)]] set LesDFHairPin [lsort -integer -increasing -index 0 $LesDFHairPin] } #Affichage des appariements if {$AvecAffichage} { foreach DF $LesDFHairPin { set Query "" set QReverse "" set NbBlancNR "" set NbBlancNN "" set NucNor [string tolower $LaSeq] set NucRev [string tolower [NucToReverseNuc $NucNor]] set D [lindex $DF 0] set F [lindex $DF 1] set Taille [expr $F-$D+1] if {! [info exists TabComptage($Taille)]} { set TabComptage($Taille) 0 lappend TabComptage(LesTailles) $Taille } incr TabComptage($Taille) set LesComp [set TabDesHairPin($D,$F,Complementaire)] foreach DFComp $LesComp { set Query "" set QReverse "" set LesX "" #Coordonnes en normal pour reverse seulement et changement N->Liste contre set DComp [expr $TailleQuery - [lindex $DFComp 1] +1] set FComp [expr $TailleQuery - [lindex $DFComp 0] +1] set NucNor [string toupper $NucNor [expr $D -1] [expr $F -1]] set NucNor [string toupper $NucNor [expr [lindex $DFComp 0] -1] [expr [lindex $DFComp 1] -1]] set NucRev [string toupper $NucRev [expr $DComp -1] [expr $FComp -1]] set NucRev [string toupper $NucRev [expr $TailleQuery -$F] [expr $TailleQuery -$D]] lappend ToShow ">$D/$F -- [lindex $DFComp 0]/[lindex $DFComp 1] Stem $Taille" if {$D > $DComp} { set NbBlancNR [expr $D - $DComp] for {set i 1} {$i <= $NbBlancNR} {incr i} {append QReverse " "} for {set i 1} {$i < $D} {incr i} {append LesX " "} } elseif {$D < $DComp} { set NbBlancNN [expr $DComp - $D] for {set i 1} {$i <= $NbBlancNN} {incr i} {append Query " "} for {set i 1} {$i < $DComp} {incr i} {append LesX " "} } set TailleAligne [expr $F - $D + 1] for {set i 1} {$i <= $TailleAligne} {incr i} {append LesX "X"} append Query $NucNor append QReverse $NucRev lappend ToShow $Query lappend ToShow $LesX lappend ToShow $QReverse } } set Entete [list "Potential Complementary Sequence Searches"] lappend Entete "" lappend Entete "File: $NomDuFichier" lappend Entete "Sequence: $LaSeq" lappend Entete "Length (Query): $TailleQuery" lappend Entete "Stem Length: $MaxContigue" lappend Entete "" lappend Entete [format "%6s %7s" "Length" "Count"] lappend Entete "---------------" set LesTailles [lsort -increasing -integer [set TabComptage(LesTailles)]] foreach Taille $LesTailles { lappend Entete [format "%4d %4d" $Taille [set TabComptage($Taille)]] } lappend Entete "" set ToShow [concat $Entete $ToShow] return "[AfficheVariable [join $ToShow "\n"] "" $Titre]" } else { set ListeFinale "" foreach DF $LesDFHairPin { set D [lindex $DF 0] set F [lindex $DF 1] set Segment [list $D $F] set LesComp [set TabDesHairPin($D,$F,Complementaire)] foreach DFComp $LesComp { lappend Segment [list [lindex $DFComp 0] [lindex $DFComp 1]] } lappend ListeFinale $Segment } return "$ListeFinale" } } proc SelfComplementarity_GUI {K PAB} { Wup "Test le repliement contre elle meme pour l interface graphique" set Answer "" set LesNomsOligos "" while {1} { set Texte "Please choose with Control+1 the oligo(s) to test:" set Answer [FaireSavoir $Texte "Self Complementary - Waiting your selection."] set LesNomsOligos [LesOligosSelectionnes $K LesIds] if {$LesNomsOligos==""} { if {! [OuiOuNon "No Oligo selected !\nWould you like to retry ?"]} {break} else {continue} } break } set LesFen "" foreach Id $LesNomsOligos { set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Dir [lindex $MesTags 5] set Fichier "$Dir/${PAB}.oligo" if {! [file exists $Fichier]} { set Fichier "$Dir/$PAB" if {! [file exists $Fichier]} {return ""} } set Seq [InterrogeInfoDeLOligo $Fichier $NomOligo Sequence] set Fen [SelfComplementarity $Seq "" "$PAB $NomOligo"] lappend LesFen $Fen } return "$LesFen" } proc SembleEtreUnAccessVarsplic {Access} { if {[regexp -nocase {[A-Z][0-9]+\-[0-9]{1,2}$} $Access]} { return 1 } return 0 } proc SendPDBQuery {query} { set url "http://www.rcsb.org/pdb/rest/search" ::http::config -urlencoding utf-8 set tok [::http::geturl $url -query $query -type "application/x-www-form-urlencoded"] set Lpdb [::http::data $tok] ::http::cleanup $tok return $Lpdb } proc SendToWeb {Texte} { Log "SendToWeb $Texte" [HomeRipp]/log/gscopehtmlserver.log # regsub -all {<} $Texte "\<" Texte # regsub -all {>} $Texte "\>" Texte return "
    $Texte
    " } proc SensDeLaRegion {TypeRegion} { if {$TypeRegion == "Plus / Plus"} { set Sens "+" } elseif {$TypeRegion == "Plus / Minus"} { set Sens "-" } elseif {$TypeRegion == "N"} { set Sens "0" } elseif {$TypeRegion == "RAS"} { set Sens "0" } elseif {$TypeRegion == "+1"} { set Sens "+" } elseif {$TypeRegion == "+2"} { set Sens "+" } elseif {$TypeRegion == "+3"} { set Sens "+" } elseif {$TypeRegion == "-1"} { set Sens "-" } elseif {$TypeRegion == "-2"} { set Sens "-" } elseif {$TypeRegion == "-3"} { set Sens "-" } elseif {$TypeRegion == "Prot / Prot"} { set Sens "+" } elseif {[regexp "\[1-3\+]{2} / \[1-3\+]{2}" $TypeRegion] || [regexp "\[1-3\-]{2} / \[1-3\-]{2}" $TypeRegion]} { set Sens "+" } elseif {[regexp "\[1-3\+]{2} / \[1-3\-]{2}" $TypeRegion] || [regexp "\[1-3\-]{2} / \[1-3\+]{2}" $TypeRegion]} { set Sens "-" } else { set Sens "+" } return $Sens } proc Separator2HTML {} { Html_Append "
    " return } proc Separator2Text {} { lappend ::TextOut "" return } proc Seq2Abs {} { global TAg Sequences set res [list] foreach {n ag} $TAg(mem) { set seq [set Sequences($n)] set da $TAg($ag,$n,da) set fa $TAg($ag,$n,fa) set a -1 ; set i -1 set dod 0 ; set dof 0 set Ls [split $seq ""] foreach c $Ls { incr a if {$c ne "."} {incr i} if {! $dod && $i == $da} { set dep $a set dod 1 } if {! $dof && $i == $fa} { set fin $a set dof 1 } } lappend res $dep $fin } return $res } proc Seq2AbsRef {n ag} { global TAg Sref set res [list] set seq [set Sref($n)] set da $TAg($ag,$n,dep) set fa $TAg($ag,$n,fin) set sdeg [string map {. ""} $seq] set a -1 ; set i -1 set dod 0 ; set dof 0 set Ls [split $seq ""] foreach c $Ls { incr a if {$c ne "."} {incr i} if {! $dod && $i == $da} { set dep $a set dod 1 } if {! $dof && $i == $fa} { set fin $a set dof 1 } } lappend res $dep $fin return $res } proc Seq3dAndA5From {Fichier} { set Alphabet3d "?ARNDCQEGHILKMFPSTWYV" set LesAAs {} set LesRangs {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^SEQRES " $Ligne]} { regsub "SEQRES " $Ligne "" Texte LConcat LesAAs [LesMotsDeLaLigne $Texte] } if {[regexp "^SEQWRD " $Ligne]} { regsub "SEQWRD " $Ligne "" Texte LConcat LesRangs [LesMotsDeLaLigne $Texte] } } set SeqAA "" foreach AA $LesAAs { if {[string length $AA]==3} { set AA [UT $AA] } append SeqAA $AA } set Seq3d "" foreach R $LesRangs { if {[regexp {^[0-9]+$} $R]} { set R [string index $Alphabet3d $R] } append Seq3d $R } set iAA 0 foreach D [split $Seq3d ""] { set A5 [string range $SeqAA $iAA [expr $iAA+4]] incr iAA 2 lappend LesA5 $A5 } return [list $Seq3d $LesA5] exit } proc SeqCalage {Nom} { set Tfa "" ; set FiTfa [GscopeFile $Nom prottfa] set Hit "" ; set FiHit [GscopeFile $Nom prottfa_besthumanhit] set Acc "" ; set FiAcc [GscopeFile $Nom prottfa_access] if {[FileExists $FiTfa]} { set Tfa [string toupper [QueLaSequenceDuTexteTFA [ContenuDuFichier $FiTfa]]] } if {[FileExists $FiHit]} { set Hit [string toupper [QueLaSequenceDuTexteTFA [ContenuDuFichier $FiHit]]] } if {[FileExists $FiAcc]} { set Acc [string toupper [QueLaSequenceDuTexteTFA [ContenuDuFichier $FiAcc]]] } set OkHit [string equal $Tfa $Hit] set OkAcc [string equal $Tfa $Acc] set InHit [string first $Tfa $Hit] set InAcc [string first $Tfa $Acc] if {$OkHit} { return 1; [FaireLire "$Nom Ok. Les séquences sont pile-poil égales !"] } set LesParties [list 2 3 4] foreach Part $LesParties { set MTfa [expr [string length $Tfa]/$Part] set Bout [string range $Tfa $MTfa $MTfa+9] set MHit [string first $Bout $Hit] set XTfa [string first $Bout $Tfa] if {$MHit>=0} { break } } if {$MHit>=0} { set NbDecal [expr $MTfa - $MHit] if {$NbDecal<0} { set N [expr -$NbDecal] set Decal [string repeat " " $N] set NewTfa "$Decal$Tfa" set NewHit $Hit } else { set Decal [string repeat " " $NbDecal] set NewHit "$Decal$Hit" set NewTfa $Tfa } set X "" foreach CTfa [split $NewTfa ""] CHit [split $NewHit ""] { if {$CTfa!=$CHit} { append X "X" } else { append X " " } } return [Affiche "$NewTfa\n$NewHit\n$X" "GrandeLargeur" "$Nom"] } return [SeeAby "blast_myself" $Nom] } proc SeqCalagePourTous {} { foreach Nom [ListeDesPABs] { Espionne [SeqCalage $Nom] } } proc SeqDuEmbl {} { set Texte [ContenuDuFichier "/genomics/link/CilioCarta/protembl/HSAP00001"] regexp {\nSQ[^\n]+\n([^/|$]+)(/|$)} $Texte Match Sequence regsub -all -nocase {[^a-z]} $Sequence "" Sequence return $Sequence } proc SeqElong {} { foreach Access [LesLignesDuFichier "[RepertoireDuGenome]/DeStephane/AccessElongases.list"] { set LEmbl [LaSequenceDesBanques $Access] if {$LEmbl=={}} { continue } Espionne [SauveLesLignes $LEmbl dans "$Access.embl"] set TFA [SequenceFormatTFA [join $LEmbl "\n"] "$Access" "embl"] Espionne [Sauve $TFA dans "$Access.tfa"] } exit } proc SeqErrors {} { global CpB Sequences array set Matrix [InitClustalMatrix gon250] set window 8 set conserved 0.5 set minlength 6 foreach g [lrange [set CpB(LNDG)] 1 end] { set nseqs [llength [set CpB($g)]] if {$nseqs < 2} {continue} if {$nseqs < 10} { set block_cutoff 15 } else { set block_cutoff 10 } unset -nocomplain CpB(Blocks,$g) unset -nocomplain CpB($g,Lprf1) get_blocks $g $block_cutoff $window $conserved $minlength puts "DEBITEM SQEB[string range $g 5 end]" set Lprf1 [list] foreach b [set CpB(Blocks,$g)] { lassign $b d f puts "ITEM $d $f" lappend Lprf1 [Profile1DuBlock $g $b Matrix 1.0] } set CpB($g,Lprf1) $Lprf1 } set cut 0.75 foreach g1 [lrange $CpB(LNDG) 1 end] { puts "length $g1 [llength [set CpB($g1)]]" puts "DEBITEM SQE[string range $g1 5 end]" foreach n [set CpB($g1)] { puts "ITEM $n" } if {[llength [set CpB($g1)]] < 2} {continue} set LscoTh [list] set LscoSq [list] set ib 0 foreach b [set CpB(Blocks,$g1)] p1 [set CpB($g1,Lprf1)] { lassign $b deb fin set scoSq [list] set scoTh [list] set in 0 ; set Li [list] foreach n [set CpB($g1)] { lassign [set CpB(startstop,$n)] f l set seq [set Sequences($n)] if {$f < $deb && $l > $fin} { set score [ScoreSequence $seq $p1 $deb $fin] lappend scoSq $score lappend Li $in puts "deberr [string range $g1 5 end] $ib [expr {int($score)}]" puts "SEQERRO $n [string range $g1 5 end] $deb $fin $score" } else { lappend scoSq 0.0 } incr in } if {$Li != {}} { set lmed [list] foreach v $Li { lappend lmed [lindex $scoSq $v] } if {$g1 eq "Group1"} { puts "MedScore [llength $lmed] $deb $fin" } lappend scoTh [ScoreMediane $lmed] if {$g1 eq "Group1"} { #puts " [ScoreMediane $lmed]" } } else { lappend scoTh 0 } lappend LscoSq $scoSq lappend LscoTh $scoTh incr ib } foreach b [set CpB(Blocks,$g1)] s $LscoTh lsn $LscoSq { lassign $b deb fin foreach n [set CpB($g1)] ns $lsn { lassign [set CpB(startstop,$n)] f l if {$f < $deb && $l > $fin} { if {$s > 0.0 && ($ns/$s) < $cut} { lappend seqerr($n) 2 } else { lappend seqerr($n) 0 } } else { lappend seqerr($n) 0 } } } foreach n [set CpB($g1)] { set SeqErr($n) [list] set in_err 0 set ol -1 foreach b [set CpB(Blocks,$g1)] sc [set seqerr($n)] { lassign $b fc lc if {! $in_err} { if {$sc > 1} { if {$ol == -1} { set s2 0 } else { set s2 $ol } set s1 $lc set in_err 1 } } else { if {$sc <= 1} { set e $fc set e1 $ol set in_err 0 set derr [expr {$s2+2}] set ferr [expr {$e-1}] puts "SEQ_ERROR $n $derr $ferr" lappend SeqErr($n) [list $derr $ferr [DonnePosGS $n $derr] [DonnePosGS $n $ferr]] } } set ob $b lassign $ob of ol } if {$in_err} { set e [expr {$CpB(Ltot)-1}] set e1 $ol set derr [expr {$s2+2}] set ferr [expr {$e-1}] puts "SEQ_ERROR $n $derr $ferr" lappend SeqErr($n) [list $derr $ferr [DonnePosGS $n $derr] [DonnePosGS $n $ferr]] set in_err 0 } } } return } proc SeqFasta {SeqBrute Entete} { set CarParLigne 50 set ListeDesLignes [list] for {set i 0} {$i < [string length $SeqBrute]} { incr i $CarParLigne} { lappend ListeDesLignes [string range $SeqBrute $i [expr $i+$CarParLigne-1]] } regsub ">" $Entete "" Entete append Fasta ">" $Entete "\n" append Fasta [join $ListeDesLignes "\n"] return $Fasta } proc SeqFiles2MultipleAlignmentWithTBA {FileTFA FileTFAs FileOUT} { } proc SeqFiles2MultipleAlignmentWithTBAPrograms {FileTFA FileTFAs FileOUT} { ### proc used in the "multiz" method of creation of multiple alignment in PromAn ### ######################################################################### ### Developped in June 2005 ### ### Uses programs of the TBA suite but not the tba program itself: ### ### 1- all_bz simulation with blastz, lav2maf and single_cov ### ### 2- maf_project and multiz whereas the tba program corresponds to: ### ### tba = get_covered, multiz, pair2tb and next maf_project) ### ######################################################################### ### FileOUT est le MAFFile if {![file exists $FileTFA] } {Espionne "FileTFA: $FileTFA does not exists" ; return} if {![file exists $FileTFAs]} {Espionne "FileTFAs: $FileTFAs does not exists" ; return} set LeTexteMAFWithID {} set LesFileTFA {} set i 0 ### Creation d'un fichierTFA pour chaque seq du FichierTFAs et renomme les fichiers en "$FileOUT.seq$i.tfa" foreach TFA [LesTFADuFileTFAs $FileTFAs] { incr i set File "$FileOUT.seq$i.tfa" lappend LesFileTFA $File set Tab($File,i) $i SaveInFile $TFA $File } set LesFileTFA [linsert $LesFileTFA 0 $FileTFA] set Tab($FileTFA,i) 0 ################################################################################## ### Generating pair-wise alignments ### ### Simulation du programme all_bz qui execute blastz, lav2maf puis single_cov ### ################################################################################## set n 0 set LesFileMAFWO {} set FileTmp "$FileOUT.1" foreach TFAFile1 $LesFileTFA { set i1 [set Tab($TFAFile1,i)] foreach TFAFile2 $LesFileTFA { if {$TFAFile1 == $TFAFile2} {continue} if {[info exists TabBlastZDone($TFAFile1,$TFAFile2)]} {continue} incr n set i2 [set Tab($TFAFile2,i)] ### blastz set FileBlastZ "$FileOUT.$i1.$i2.blastz" BlastZ $TFAFile1 $TFAFile2 $FileBlastZ 3400 2000 2 0 set TabBlastZDone($TFAFile1,$TFAFile2) 1 set TabBlastZDone($TFAFile2,$TFAFile1) 1 ### lav2maf set FileMAF "$FileOUT.$i1.$i2.maf" Lav2Maf $FileBlastZ $TFAFile1 $TFAFile2 $FileMAF set Tab($FileMAF,i) $i1.$i2 ### single_cov2 # WO means "without overlaps" Espionne "single_cov2" set FileMAFWO $FileMAF.single_cov2 Single_cov2 $FileMAF $FileMAFWO lappend LesFileMAFWO $FileMAFWO if {$n == 1} {file copy -force $FileMAFWO "$FileTmp"} } } ################################################################################## ### Creating the multiple alignment ### ### (programme tba = get_covered, multiz, pair2tb puis maf_project) ### ### Ici utilisation des programmes multi z puis maf_project seulement ### ################################################################################## set n 1 set LesFileMAFWO [lrange $LesFileMAFWO 1 end] while {$LesFileMAFWO != {}} { #Espionne "LesFileMAFWO: $LesFileMAFWO" incr n ### multiz set FileMAFWO [lindex $LesFileMAFWO 0] set MultizFileTmp "$FileTmp.$n" MultiZ $FileTmp $FileMAFWO $MultizFileTmp ### # multiz integre a nouveau des overlap, trouver un programme pour les enlever... ### A VERIFIER... ### maf_project # -> maf blocks have ref seq in the top row # -> maf blocks are ordered by the starting position of the top row set NewFileTmp $MultizFileTmp.maf_project Maf_project $MultizFileTmp $FileTFA $NewFileTmp set FileTmp [regsub "\.maf_project" $NewFileTmp ""] ### le fichier multiz , avec meme refseq et ordonne devient la query du prochain multiz file copy -force $NewFileTmp "$FileTmp" set LesFileMAFWO [lrange $LesFileMAFWO 1 end] } ######################################################################################################### ### Remplace dans le MAFFile les noms de TFAFile qui definissent les seq dans les blocks d'alignement ### ### par l'ID de cette sequence extrait de l'entete du TFAFile ### ######################################################################################################### foreach Line [split [File2Text $FileTmp] "\n"] { set lLine [split $Line " "] set What [lindex $lLine 0] if {$What != "s"} {lappend LeTexteMAFWithID [join $lLine " "] ; continue} set File [lindex $lLine 1] set ID [TFA2Header $File] scan $ID "%s" ID regsub "$File" $lLine "$ID" lLine lappend LeTexteMAFWithID [join $lLine " "] } SaveInFile [join $LeTexteMAFWithID "\n"] $FileOUT return $FileOUT } proc SeqGCGCheckSum {s} { if {$s eq ""} {return -1} set i 0 set check 0 foreach c [split $s ""] { scan $c %c n set check [expr {$check+(($i % 57)+1) * $n}] incr i } return [expr {$check % 10000}] } proc SeqIdentical {SeqA SeqB} { if {[string equal $SeqA $SeqB]} {return 1} else {return 0} } proc SeqIn {{Texte ""}} { if { $Texte == "" } { set T [EntreTexte] } else { set T $Texte } set T [string trim $T] if { $T == "" } { return "" } if { ! [regexp {[a-zA-Z0-9_]} $T] } { return "" } #rR nom de fichier ou access if { ! [regexp {[\n ]} $T] } { if {[file isdirectory $T]} { set ListeDeFichiers [glob -nocomplain -type f -- "$T/*"] if {$ListeDeFichiers=={}} { return "" } return [LOFtoTFAs $ListeDeFichiers "UseAccess"] } if {[regexp {[/\:]} $T] || [regexp -nocase {^[a-z0-9_]{4,12}$} $T] } { scan $T "%s" Access set LaSeq [LaSequenceDesBanques $Access $Access AccessOK "OnVeutNature"] if {$LaSeq!={}} { return [join $LaSeq "\n"] } } } #rR on a une sequence avec un format connu ou une sequence brute set Format [FormatDeLaSequence $T] if {[regexp "tfas|tfa|gcg|gcgmaybe|embl" $Format]} { return $T } if {[regexp "brut" $Format]} { #rR sequence brute, on ne permet que les chiffres ou blanc regsub -all {[0-9 \t]} $T "" T regsub -all {\*} $T "X" T return [SequenceFormatTFA $T "" $Format] } Warne "Je ne sais pas quoi faire de\n$T" return "" } proc SeqLength {{LesNoms ""}} { global RepertoireDuGenome set Repertoire "$RepertoireDuGenome/nuctfa/" if {![file exists $Repertoire]} {return ""} set LesLongueurs {} set ListeDesNoms [split $LesNoms " "] foreach Nom $ListeDesNoms { set Longueur [string length [QueLaSequenceDuFichierTFA "$RepertoireDuGenome/nuctfa/$Nom"]] lappend LesLongueurs $Longueur } return $LesLongueurs } proc SeqMac {Nom {D ""} {F ""}} { set SeqGap [MSPFroMac $Nom Sequences [MitoHs $Nom]] set SeqGap [string toupper $SeqGap] regsub -all -nocase {[^a-z]} $SeqGap "" SeqMac if {$F==""} { set F $D } if {$D!=""} { return [string range x$SeqMac $D $F] } return $SeqMac } proc SeqNucToSeqPro {SeqNuc} { set SeqPro "" set longueur [string length $SeqNuc] for {set i 0} {$i<$longueur} {incr i 3} { set Codon [string range $SeqNuc $i $i+2] append SeqPro [AAduCodon $Codon] } return $SeqPro } proc SeqProtDumRNA {Access} { set PageInfo [PageInfo $Access genbankfull] if {$PageInfo == ""} {return} return [SeqProtDumRNA_PageInfo $PageInfo] } proc SeqProtDumRNA_PageInfo {PageInfo} { set LaSeq {} set SuisJeSurLaSeq 0 foreach Ligne [split $PageInfo "\n"] { set Ligne [string trim $Ligne] if {[regexp -nocase "/translation=\"" $Ligne tmp]} { regsub $tmp $Ligne "" Ligne set SuisJeSurLaSeq 1 lappend LaSeq $Ligne continue } if {[regexp -nocase "\"" $Ligne tmp] && $SuisJeSurLaSeq} { regsub $tmp $Ligne "" Ligne set SuisJeSurLaSeq 1 lappend LaSeq $Ligne break } if {!$SuisJeSurLaSeq} {continue} lappend LaSeq $Ligne } return [join $LaSeq ""] } proc SeqToFasta {Path} { # Génére un fasta é partir d'une liste de séquences >$PrefixeIncrement set FichierSequence [open "$Path.txt" "r"] set FichierFasta [open "$Path.tfa" "w"] set I 0 while { [gets $FichierSequence Ligne] >=0 } { incr I set Fasta [formatFasta ">Sequence$I" $Ligne] puts $FichierFasta $Fasta } close $FichierFasta close $FichierSequence } proc SeqToTfa {FichierSeq {FichierTFA ""}} { if {$FichierTFA==""} { regsub ".seq$" $FichierSeq "" FichierTFA append FichierTFA ".tfa" } set EuNA 0 set EuTitre 0 set EuPP 0 set Titre "" set Seq "" foreach Ligne [LesLignesDuFichier $FichierSeq] { if { ! $EuNA && ! [regexp "!!NA_SEQUENCE" $Ligne]} { return "" } if { ! $EuNA} { set EuNA 1 ; continue } if { ! $EuTitre} { if { ! [regexp -nocase {[a-z0-9]+} $Ligne]} { set EuTitre 1 continue } append Titre $Ligne continue } if { ! $EuPP } { if { [regexp {\.\. *} $Ligne]} { set EuPP 1 } continue } regsub -all -nocase {[^a-z]} $Ligne "" BoutSeq append Seq $BoutSeq } set TFA [SequenceFormatTFA $Seq ">$Titre" "nucbrut"] return [Sauve $TFA dans $FichierTFA] } proc SeqToTfaPourTous {} { foreach S [glob *.seq] { regsub ".seq$" $S ".tfa" T Espionne [SeqToTfa $S "seqtotfa/$T"] } exit } proc SeqlabFont {} { if {[QuelMode] ne "seqlab"} {return} set sze [font configure SeqFont -size] set wgt [font configure SeqFont -weight] set fam [font configure SeqFont -family] set fam [string map [list " " ""] $fam] $::NomTextSeq font family $fam size $sze weight $wgt return } proc SeqsGroupeSeqlabDe {s} { global ListeSeqsGroupees set gcou "none" foreach g [array names ListeSeqsGroupees] { if {$s in [set ListeSeqsGroupees($g)]} { set gcou $g break } } if {$gcou eq "none"} { return $s } else { return [set ListeSeqsGroupees($gcou)] } } proc SequencageAlvi {} { set Projet [file tail [RepertoireDuGenome]] foreach FiSeq [lsort [glob -nocomplain "[RepertoireDuGenome]/sequencage/*.seq"]] { regsub {\.seq$} $FiSeq ".tfa" FiTfa set Queue [file tail $FiSeq] regsub ".seq" $Queue "" NS regsub "AP-" $NS "" NS if {[FileAbsent $FiTfa]} { set Seq [ContenuDuFichier $FiSeq] set TFA [SequenceFormatTFA $Seq $NS nucbrut] Sauve $TFA dans $FiTfa Espionne $FiTfa } set FiBla "[RepertoireDuGenome]/blastseq/$NS" if {[FileAbsent $FiBla]} { set TFA [ContenuDuFichier $FiTfa] set Nuc [QueLaSequenceDuTexteTFA $TFA] regsub -nocase -all {[ATGC]} $Nuc "" Nuc if {[string length $Nuc] < 10} { Espionne "$NS mauvaise sequence=$Nuc=" ; continue } set Sortie [Blast blastn $TFA $FiBla "[RepertoireDuGenome]/banques/${Projet}NucOli"] Espionne $Sortie } Espionne set Best 0 set LesHits [DecortiqueBlat $FiBla] foreach LeHit $LesHits { ScanLaListe $LeHit Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct SeqQuery Barres SeqSbjct] set Access "x" if {[IntegerApres "/" dans $Identities]<200} { continue } if {$Score < 0.8*$Best} { continue } if {$Best==0} { set Best $Score } Espionne "[format %-25s $Query] $LongQuery $BId $Access $Length $Score $Expect $Identities $Strand" regsub -- {\-.*} $BId "" Nom set Affecte 1 if {[info exists IdDe($Nom)]} { set Old [IntegerApres "/" dans $IdDe($Nom)] set New [IntegerApres "/" dans $Identities] set Affecte [expr $New > $Old] } if {$Affecte} { set IdDe($Nom) "$Identities" set LeHitDe($Nom) [join $LeHit " "] } } } NousAllonsAuBoulot "[RepertoireDuGenome]/blastseq" foreach Nom [ListeDesPABs] { if { ! [info exists LeHitDe($Nom)]} { continue } InformeSansDemander $Nom "BlastSeq: $LeHitDe($Nom)" scan $LeHitDe($Nom) "%s" Queue exec ln -sf $Queue $Nom } } proc Sequence {Access {Alias ""}} { #rR a ameliorer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if {$Alias!=""} { return [QueLaSequenceDuAlias $Access "prottfa"] } set EMBL [SequenceDesBanques $Access] set Seq [QueLaSequenceDuTexteEMBL $EMBL] return $Seq } proc SequenceADNDesFichiersGenBank {{Rep ""}} { global RepertoireDuGenome set OldSeqADN "" if {$Rep==""} { set Rep "[RepertoireDuGenome]/De*" set LesReps [glob -type d $Rep] if {[llength $LesReps]!=1} { FaireLire "I cannot decide for directory. Please browse for it." set Rep [tk_chooseDirectory -mustexist 1 -initialdir "[RepertoireDuGenome]"] if {$Rep==""} { return "" } } else { set Rep [lindex $LesReps 0] } } set LesFichiers [lsort [glob "$Rep/*_*"]] if { ! [OuiOuNon "Ok to use \n [lindex $LesFichiers 0] \n ...\n [lindex $LesFichiers end]\n ?"]} { return "" } set ADN "" foreach Fichier $LesFichiers { DecortiqueGenBank OS OC SeqADN $Fichier set SeqADN [NonOverlapingSeqADN $SeqADN] append ADN $SeqADN } set TFA [SequenceFormatTFA $ADN "adn_corrige" "brut"] Sauve $TFA dans "[RepertoireDuGenome]/beton/correct.tfa" exit } proc SequenceColoree {Sequence Index1 Index2 Index3 Index4 Index5 Index6} { set Nombre 0 set Nombre2 -1 foreach Base [split $Sequence ""] { incr Nombre incr Nombre2 if {[expr $Nombre2%50]==0} { lappend NouvelleSequence "
    " } if {$Nombre==$Index1} { lappend NouvelleSequence "" } if {$Nombre==$Index2} { lappend NouvelleSequence "" } if {$Nombre==$Index3} { lappend NouvelleSequence "" } if {$Nombre==$Index4} { lappend NouvelleSequence "" } if {$Nombre==$Index5} { lappend NouvelleSequence "" } if {$Nombre==$Index6} { lappend NouvelleSequence "" } lappend NouvelleSequence $Base } set NouvelleSequence [join $NouvelleSequence ""] return $NouvelleSequence } proc SequenceDeLAccess {AccessOuBanqueId {Banque genbank}} { set SeqTFA [PageInfo $AccessOuBanqueId $Banque "seq"] if {$SeqTFA == ""} {return ""} regsub "^>" $SeqTFA "" SeqTFA set PosAutreSeq [string first ">" $SeqTFA] if {0 < $PosAutreSeq} {set SeqTFA [string range $SeqTFA 0 [expr $PosAutreSeq - 1]]} return [QueLaSequenceDuTexteTFA ">$SeqTFA"] } proc SequenceDecoupee {Sequence Index1 Index2} { set Nombre 0 set Index2 [expr $Index2+1] foreach Base [split $Sequence ""] { incr Nombre if {$Nombre == "$Index1"} { lappend NouvelleSequence "\n" } if {$Nombre == "$Index2"} { lappend NouvelleSequence "\n" } } set NouvelleSequence [join $NouvelleSequence ""] return $NouvelleSequence } proc SequenceDesBanques {args} { return [join [eval LaSequenceDesBanques $args] "\n"] } proc SequenceDesBanquesVite {Access {OnVeutEMBL ""}} { return [join [LaSequenceDesBanques $Access $Access AccessOK $OnVeutEMBL] "\n"] } proc SequenceDesSignaux {Signaux {Sens ""}} { Wup "Signaux can be a list or a text with '_' separating the signals" if {[regexp "_" $Signaux]} { set LesSignaux [split $Signaux "_"] } else { set LesSignaux $Signaux } set LesSeq {} foreach Signal $LesSignaux { lappend LesSeq [Signal $Signal] } set Seq [join $LesSeq " "] if {$Sens=="3'"} { set Seq [NucToReverseAndComplementNuc $Seq] } return $Seq } proc SequenceDuContig {Chromosome Contig BorneMin BorneMax {nChiffres ""} {TailleContig ""}} { set TailleFragment 100000 if {$BorneMax < $BorneMin} { set tmp $BorneMin set BorneMin $BorneMax set BorneMax $tmp } if {$nChiffres == ""} {set nChiffres [NbDeChiffresPourLeFragmentDuContig $Chromosome $Contig]} if {$TailleContig == ""} { set TailleContig [TailleDuContig $Chromosome $Contig $nChiffres] } if {$TailleContig < $BorneMin} {return ""} if {$TailleContig < $BorneMax} {set BorneMax $TailleContig} set TailleSeq [expr $BorneMax - $BorneMin + 1] set FragmentMin [expr round($BorneMin / $TailleFragment)] set FragmentMax [expr round($BorneMax / $TailleFragment)] set Seq "" if {$nChiffres == 0} { set BId "$Chromosome:$Contig" #Espionne $BId set Seq [QueLaSequenceDuTexteTFA [SequenceFormatTFA_l [LaSequenceDesBanques $BId]]] set Seq [string range $Seq [expr $BorneMin-1] [expr $BorneMax-1]] } else { if {$FragmentMin == $FragmentMax} { set Debut [expr $BorneMin % $TailleFragment] set Fin [expr $BorneMax % $TailleFragment] set Fragment [format "%${nChiffres}.${nChiffres}d" $FragmentMin] set BId "$Chromosome:${Contig}_$Fragment" #Espionne $BId set Seq [QueLaSequenceDuTexteTFA [SequenceFormatTFA_l [LaSequenceDesBanques $BId]]] set Seq [string range $Seq [expr $Debut-1] [expr $Fin-1]] } else { set Seq "" for {set i $FragmentMin} {$i <= $FragmentMax} {incr i} { if { $i == $FragmentMin} { set Debut [expr $BorneMin % $TailleFragment] set Fin $TailleFragment } elseif {$i == $FragmentMax} { set Debut 1 set Fin [expr $BorneMax % $TailleFragment] } else { set Debut 1 set Fin $TailleFragment } set Fragment [format "%${nChiffres}.${nChiffres}d" $i] set BId "$Chromosome:${Contig}_$Fragment" #Espionne $BId set SeqTmp [QueLaSequenceDuTexteTFA [SequenceFormatTFA_l [LaSequenceDesBanques $BId]]] set SeqTmp [string range $SeqTmp [expr $Debut-1] [expr $Fin-1]] append Seq $SeqTmp } } } return $Seq } proc SequenceDuNCBI {Uid {Type nucleotide}} { set PageHTML [PageHTMLDuNCBI $Uid $Type fasta] if {[regexp "ERROR: Cannot find" $PageHTML]} {Espionne "$Uid -> No sequence found";return ""} set SuisJeSurLaSequence 0 set Sequence "" foreach Ligne [split $PageHTML "\n"] { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} if {[regexp ">
    >" $Ligne]} {set SuisJeSurLaSequence 1;continue}
    	if {[regexp "
    " $Ligne] && $SuisJeSurLaSequence} {break} if {$SuisJeSurLaSequence} { set Ligne [string trim $Ligne] append Sequence $Ligne } } regsub -all -nocase {[^a-z]} $Sequence "" Sequence return $Sequence } proc SequenceFormatBrut {Seq {CarParLigne ""} {DoVerify ""}} { global SequenceFormatBrutIn SequenceFormatBrutOut if {$DoVerify==""} { if { [AllowIllegalCharactersInTFA] } { set DoVerify "DoNotVerify" } } set DoVerify [expr ! [string equal -nocase $DoVerify "DoNotVerify"]] if {[info exists SequenceFormatBrutIn] && $Seq==$SequenceFormatBrutIn} { return $SequenceFormatBrutOut } set SequenceFormatBrutIn $Seq if {$CarParLigne==""} { set CarParLigne [FastaLineWidth] } if {$DoVerify} { while {[regexp -nocase {\*$} $Seq]} { regsub {\*$} $Seq "" Seq } if {[regexp -nocase {\*} $Seq]} { if { ! [OuiOuNonMemo "Do I stop signaling when I found * ?" 0]} { FaireLire "$Seq\n contains *\n I'll replace them with x." } regsub -all {\*} $Seq "X" Seq } if {[regexp "\~" $Seq]} { regsub -all "\~" $Seq "." Seq } if {[regexp -nocase {[^0-9 \-\n\ta-z\.]} $Seq]} { if { ! [OuiOuNonMemo "Do I stop signaling when I found illegal characters ?" 0]} { FaireLire "$Seq\n contains illegal characters\n I'll remove them." } } regsub -all -nocase {[^a-z\-\.]} $Seq "" Seq } if {$Seq == "" } { set SequenceFormatBrutOut "" ; return "" } for {set i 0} {$i < [string length $Seq]} { incr i $CarParLigne} { lappend ListeDesLignes [string range $Seq $i [expr $i+$CarParLigne-1]] } set SequenceFormatBrutOut [join $ListeDesLignes "\n"] return $SequenceFormatBrutOut } proc SequenceFormatBrut_l {Seq} { return [SequenceFormatBrut [join $Seq "\n"]] } proc SequenceFormatBrutduPAB {Boite} { Wup "Takes the DNA, translates to AAs and returns lines of 60 AAs." set Nom [Box $Boite nom] set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] set Long [expr $Fin-$Debut+1] set SeqNuc [BoutADN $Debut $Fin $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] return [SequenceFormatBrut $SeqPro] } proc SequenceFormatEMBL {Texte {NomDeBapteme ""} {Format ""} {AccessAsGN ""} {OsStartsDe ""} {Premiere ""} {ClearSequence ""}} { if {$Texte==""} { return "" } if { ! [regexp "\n" $Texte] && [file exists $Texte]} { set Texte [ContenuDuFichier $Texte] } if {$AccessAsGN==""} { set AccessAsGN "Ask" } if {$OsStartsDe==""} { set OsStartsDe "Ask" } if {$ClearSequence==""} { set ClearSequence "ClearSequence" } set ClearSequence [string equal -nocase $ClearSequence "ClearSequence"] if {$Format==""} { set Format [FormatDeLaSequence $Texte]} if {$Format=="embl"} { return $Texte } if {[string equal -nocase $Format "tfa"]} { set LesLignesTFA [split $Texte "\n"] if {$Premiere==""} { set Premiere [lindex $LesLignesTFA 0] } #rR là on joue subtilement sur les Majuscule minuscule de l'OS situe entre #rR ID AC Genre espece definition ou #rR ID Genre espece definition set IdMayBe "" set AcMayBe "" set OsMayBe "" if {[regexp {^>([A-Za-z0-9_\-\.\:]+) ([A-Za-z0-9_\-\.\:]+) ([A-Z][a-z]+) ([a-z\.]+)} $Premiere Match Id Ac Ge Es]} { set IdMayBe $Id set AcMayBe $Ac set OsMayBe "$Ge $Es" } if {[regexp {^>([A-Za-z0-9_\-\.\:]+) ([A-Z][a-z]+) ([a-z\.]+)} $Premiere Match Id Ge Es]} { set IdMayBe $Id set AcMayBe $Id set OsMayBe "$Ge $Es" } #rR rajouté 2014/06/29 pour prendre en compte OS=Home_sapiens_strain_bidule GN=Pax2 TAXID=9606 #rR mais attention Genre espece peut quand meme etre devant la definition set AEnleverDeDE {} if {[regexp {OS=(.*?) [A-Z]+=} $Premiere Match FullOs] || [regexp {OS=(.*?)$} $Premiere Match FullOs]} { lappend AEnleverDeDE "OS=$FullOs" regsub -all "_" $FullOs " " FullOs set OsMayBe [lrange [split $FullOs " "] 0 1] ;#rR on le positionne pour pouvoir l'enlever } if {[regexp {GN=(.*?) [A-Z]+=} $Premiere Match GeneName] || [regexp {GN=(.*?)$} $Premiere Match GeneName]} { lappend AEnleverDeDE "GN=$GeneName" set BestGN "Name=$GeneName;" } if {[regexp {TAXID=(.*?) [A-Z]+=} $Premiere Match TaxId] || [regexp {TAXID=(.*?)$} $Premiere Match TaxId]} { lappend AEnleverDeDE "TAXID=$TaxId" set BestOX "NCBI_TaxID=$TaxId;" if {[TaxClass "IsAlreadyLoaded"]} { set OC [TaxClass $TaxId "Name"] set OC [string trim $OC " ;"] if {$OC!=""} { set BestOC "$OC." } } } scan $Premiere "%s" Access regsub ">" $Access "" Access regsub {[^ ]+ } $Premiere "" Definition #rR pour traiter >sp|P12345|Bidule_HUMAN Definition... set ID "" if {[regexp -nocase {^([a-z\:]+)\|([a-z0-9_]+)\|([a-z0-9_]+)$} $Access Match BA AC ID]} { if {[regexp -nocase "pdb:" $BA]} { set AC $BA$AC } set Premiere ">$AC $ID $Definition" set Access $AC } if {[regexp {\|} $Access]} { set LesPossibles [split $Access "|"] set Bon $Access foreach Possible $LesPossibles { if { ! [regexp -nocase {^refseq} $Possible]} { set Bon $Possible; break } } set Access $Bon } set OS "" # Espionne "$Premiere $Access" if {[EstUnPAB $Access]} { set DE $Definition set GN "" set OS "" } else { if {[string equal -nocase $AccessAsGN "Ask"]} { set AccessAsGN [OuiOuNonMemo "Do I use the access as GeneName GN ?" 0] } else { set AccessAsGN [string equal -nocase $AccessAsGN "AccessAsGn"] } set GN "" if {$AccessAsGN} { set GN $Access } set Definition [string trim $Definition] if {[string equal -nocase $OsStartsDe "Ask"]} { set OsStartsDe [OuiOuNonMemo "Do all following definitions always start with the organism name ?" 0] } else { set OsStartsDe [string equal -nocase $AccessAsGN "OsStartsDe"] } if {$Definition==""} { set DE "" } else { set DE "$Definition" } set GE "" if {$AccessAsGN} { set GE "$Access" } if {$OsStartsDe} { set Genre "" set Espece "" set OS "" scan $DE "%s %s" Genre Espece if {[regexp {^[A-Z][a-z]+ [a-z]+$} "$Genre $Espece"]} { set OS "$Genre $Espece" regsub "$Genre +$Espece +" $DE "" DE } } if {[regexp {\.{2,} *$} $DE]} { regsub {\.{2,} *$} $DE "" DE } if {$OS=="" && [regexp {\[([^\]]+)\]} $DE Match OsPossible]} { set Genre "" set Espece "" scan $OsPossible "%s %s" Genre Espece if {$Espece!=""} { set OS "$Genre $Espece" } } } if {$ID==""} { set ID $Access } foreach T $AEnleverDeDE { regsub -all {\(} $T "\\(" T regsub -all {\)} $T "\\(" T regsub -all {\+} $T "\\+" T regsub -all {\-} $T "\\-" T regsub -all {\\} $T "." T catch {regsub $T $DE "" DE} ;#rR 2014/07/30 car ça peut planter } #rR rajout 2014/06/19 ..................... pour OrthoInspector if {$OS=="" && $OsMayBe!=""} { set OS $OsMayBe regsub "^$AcMayBe $OS " $DE "" DE regsub "^$OS " $DE "" DE if {$IdMayBe!=""} { set ID $IdMayBe } if {$AcMayBe!=""} { set Access $AcMayBe } } #rR rajout 2014/06/29 ..................... il peut quand meme y avor un OS devant ... donc on garde ci-dessus if {[info exists FullOs]} { set OS $FullOs } if {[info exists BestGN]} { set GN $BestGN } if {[info exists BestOX]} { set OX $BestOX } else { set OX "" } if {[info exists BestOC]} { set OC $BestOC } else { set OC "" } regsub -all " +" $DE " " DE set DE [string trim $DE] #rR attention si NomDeBapteme est non vide on l'utilise a la place de ID (qui est garde depuis 2015/01/13) set RealID "" if {$NomDeBapteme!=""} { if {$ID!=$Access} { set RealID $ID } set ID $NomDeBapteme } set Header "" append Header "ID $ID;$RealID cree par Gscope avec tfa." append Header "\nAC $Access" if {$GN!=""} { append Header "\nGN $GN" } if {$DE!=""} { append Header "\nDE $DE" } if {$OS!=""} { append Header "\nOS $OS" } if {$OC!=""} { append Header "\nOC $OC" } if {$OX!=""} { append Header "\nOX $OX" } if {$ClearSequence} { regsub -all {[ 0-9/\n\t]} [join [lrange $LesLignesTFA 1 end] ""] "" Sequence } else { set Sequence [join [lrange $LesLignesTFA 1 end] ""] } set EMBL "$Header\n[QueSequenceFormatEMBL $Sequence AvecSQ]\n" return $EMBL } if {$Format=="gcg"} { set LesLignesGCG [split $Texte "\n"] set ResteLaSequence 0 foreach Ligne $LesLignesGCG { if {$ResteLaSequence} { lappend LaSequence $Ligne continue } if {[regexp {[^.]\.\.[ \t]*$} $Ligne]} { set ResteLaSequence 1 continue } if {[regexp {^[A-Z][A-Z] } $Ligne]} { lappend lEmbl $Ligne set DerniereLigne $Ligne } } set Sequence [join $LaSequence] regsub -all {[ 0-9/\n\t]} $Sequence "" Sequence if {[regexp "^SQ" $DerniereLigne]} { lappend lEmbl [QueSequenceFormatEMBL $Sequence "SansSQ"] } else { lappend lEmbl [QueSequenceFormatEMBL $Sequence "AvecSQ"] } return [join $lEmbl "\n"] } if {$Format=="gcgmaybe"} { set LesLignesGCG [split $Texte "\n"] set AttendPP 1 foreach Ligne $LesLignesGCG { if {$AttendPP} { if {[regexp {[^.]\.\.[ \t]*$} $Ligne]} { set AttendPP 0 } continue } if { ! [regexp -nocase {[A-Z]} $Ligne]} { continue } lappend LaSequence $Ligne } set Sequence [join $LaSequence] regsub -all {[ 0-9/\n\t]} $Sequence "" Sequence if {$NomDeBapteme==""} { set Access "Unknown" } else { set Access $NomDeBapteme } set Header "ID $Access; cree par Gscope avec gcgmaybe.\nAC $Access" set EMBL "$Header\n[QueSequenceFormatEMBL $Sequence AvecSQ]\n\\" return $EMBL } } proc SequenceFormatEMBLDuFichier {Fichier {NomDeBapteme ""} {Format ""} {AccessAsGN ""} {OsStartsDe ""} {Premiere ""} {ClearSequence ""}} { return [SequenceFormatEMBL [ContenuDuFichier $Fichier] $NomDeBapteme $Format $AccessAsGN $OsStartsDe $Premiere $ClearSequence] } proc SequenceFormatEMBLDuFichierTFA {Fichier {NomDeBapteme ""} {AccessAsGN ""} {OsStartsDe ""} {Premiere ""} {ClearSequence ""}} { set Format "tfa" return [SequenceFormatEMBL [ContenuDuFichier $Fichier] $NomDeBapteme $Format $AccessAsGN $OsStartsDe $Premiere $ClearSequence] } proc SequenceFormatEMBL_l {Liste {NomDeBapteme ""} {Format ""} {AccessAsGN ""} {OsStartsDe ""} {Premiere ""} {ClearSequence ""}} { return [SequenceFormatEMBL [join $Liste "\n"] $NomDeBapteme $Format $AccessAsGN $OsStartsDe $Premiere $ClearSequence] } proc SequenceFormatGCG {Sequence {NomDeBapteme ""} {Format ""}} { Wup "Converts to GCG but doesn't yet use NomDeBapteme" NousAllonsAuBoulot set FichierTmpTfa "[TmpFile].tfa" regsub ".tfa$" $FichierTmpTfa ".list" FichierTmpList Sauve [SequenceFormatTFA $Sequence $NomDeBapteme $Format] dans $FichierTmpTfa set Seq [QueLaSequenceDuFichierTFA $FichierTmpTfa] set Long [string length $Seq] set YaAA [expr [regexp -nocase {[^ATGCN]} $Seq]] if {$YaAA} { set NucOuPro "protein" } else { set NucOuPro "nuc" } Espionne "fromfasta -begin=1 -end=$Long -$NucOuPro $FichierTmpTfa -List=$FichierTmpList" catch {exec fromfasta -begin=1 -end=$Long -$NucOuPro $FichierTmpTfa -List=$FichierTmpList} if { ! [file exists $FichierTmpList]} { File delete -force $FichierTmpTfa OnRevientDuBoulot return "Error : I couln't find the list of filenames." } foreach Ligne [LesLignesDuFichier $FichierTmpList] { if { ! [info exists DejaVuPP]} { if {[regexp {\.\. *$} $Ligne ]} { continue } set DejaVuPP 1 } set FichierTmpPep "" scan $Ligne "%s" FichierTmpPep if {$FichierTmpPep==""} { continue } } if { ! [file exists $FichierTmpPep]} { File delete -force $FichierTmpTfa File delete -force $FichierTmpList return "Error : I couln't find the converted file" } set GCG [ContenuDuFichier $FichierTmpPep] # File delete -force $FichierTmpTfa # File delete -force $FichierTmpPep # File delete -force $FichierTmpList OnRevientDuBoulot Espionne $GCG return $GCG } proc SequenceFormatGCGDuFichier {Fichier {NomDeBapteme ""} {Format ""}} { set Sequence [QueLaSequenceDuFichierTFA $Fichier] Espionne $Sequence return [SequenceFormatGCG $Sequence $NomDeBapteme $Format] } proc SequenceFormatTFA {Sequence {NomDeBapteme ""} {Format ""} {WithoutGapForTFA ""}} { #rR attention withoutGapNeMarche que pour un tfa set WithoutGapForTFA [string equal -nocase "WithoutGapForTFA" $WithoutGapForTFA] Wup "Sequence peut etre une sequence au format Format ou du simple texte" set NomParDefaut "unamed" # if {$NomDeBapteme==""} { set NomDeBapteme $NomParDefaut } regsub {^>} $NomDeBapteme "" NomDeBapteme if {[set ForceHeader [regexp "^ForceHeaderTo=" $NomDeBapteme]]} { regsub "^ForceHeaderTo=" $NomDeBapteme "" NomDeBapteme } if {$Format==""} { set Format [FormatDeLaSequence $Sequence] } if {$Format=="tfa" && $NomDeBapteme=="" && ! $WithoutGapForTFA} { return $Sequence } if {$Format=="tfa"} { set Seq [QueLaSequenceDuTexteTFA $Sequence] if {$WithoutGapForTFA} { regsub -all -nocase {[^A-Z]} $Seq "" Seq } return [SequenceFormatTFA $Seq $NomDeBapteme "brut"] } if {$Format=="tfas"} { return $Sequence } if {$Format=="embl" || $Format=="protembl" || $Format=="nucembl" } { set LesLignesEMBL [split $Sequence "\n"] DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX SequenceBrute #LP set ID "TR:$ID" #LP set OS "OS:$OS" if {$ForceHeader} { if {$NomDeBapteme==""} { set NomDeBapteme $NomParDefaut } set Entete $NomDeBapteme } else { if {$NomDeBapteme=="ID"} { set NomDeBapteme $ID } if {$NomDeBapteme=="AC"} { set NomDeBapteme $AC } if {$NomDeBapteme=="OS"} { set NomDeBapteme $OS } if {[regexp "fields_" $NomDeBapteme]} { set LesFields {} foreach F [split $NomDeBapteme "_"] { if {[info exists $F]} {lappend LesFields [set $F]} } set NomDeBapteme [join $LesFields " "] } if {$NomDeBapteme=="" || $NomDeBapteme==$NomParDefaut} { set NomDeBapteme "$AC $OS $DE ($ID)" } set Entete [string range "$NomDeBapteme" 0 998] regsub "$AC $AC " $Entete "$AC " Entete } regsub -all {>} $Entete " " Entete set Entete [string trim $Entete] set TFA ">$Entete\n[SequenceFormatBrut $SequenceBrute]" return $TFA } if {$Format=="gbprot" || $Format=="genbank" } { LesKeywordsInteressantsDuGenbank $Sequence Tab LOCUS ACCESSION DEFINITION SOURCE ORIGIN set Seq [StringSuivant "ORIGIN" dans $Tab(ORIGIN)] set ID [StringApres "LOCUS" dans $Tab(LOCUS)] set AC [StringApres "ACCESSION" dans $Tab(ACCESSION)] set DE [StringSuivant "DEFINITION" dans $Tab(DEFINITION)] regsub -all {[ \n]+} $DE " " DE set Source [StringSuivant "SOURCE" dans $Tab(SOURCE)] set LaSource [split $Source "\n"] set Vulgaire "" if {[regexp {\(([^\)]+)\)} [lindex $LaSource 0] Match Vul]} { set Vulgaire $Vul } set OS [StringSuivant "ORGANISM" dans [lindex $LaSource 1]] if {$OS==""} {set OS [StringSuivant "ORGANISM" dans [lindex $LaSource 2]]} set OS [string trim $OS] set OC [join [lrange $LaSource 2 end] " "] regsub -all {[ \n]+} $OC " " OC set AvecFields 0 if {$ForceHeader} { if {$NomDeBapteme==""} { set NomDeBapteme $NomParDefaut } set Entete $NomDeBapteme } else { if {$NomDeBapteme=="ID"} { set NomDeBapteme $ID } if {$NomDeBapteme=="AC"} { set NomDeBapteme $AC } if {$NomDeBapteme=="OS"} { set NomDeBapteme $OS } if {[regexp "fields_" $NomDeBapteme]} { set AvecFields 1 set LesFields {} foreach F [split $NomDeBapteme "_"] { if {[regexp {^([A-Z]+)with(.+)$} $F Match Field Filter]} { if { ! [info exists $Field] } { return "" } if { ! [regexp -nocase $Filter [set $Field]] } { return "" } continue } if {[info exists $F]} { lappend LesFields [set $F] } } set NomDeBapteme [join $LesFields " "] } if {$NomDeBapteme=="" || $NomDeBapteme==$NomParDefaut} { set NomDeBapteme "$AC $OS $DE ($ID)"} set Entete [string range "$NomDeBapteme" 0 998] if { ! $AvecFields} { regsub "$AC $AC " $Entete "$AC " Entete } } regsub -all {>} $Entete " " Entete set Entete [string trim $Entete] set TFA ">$Entete\n[SequenceFormatBrut $Seq]" return $TFA } if {$Format=="gcg" || $Format=="gcgmaybe"} { set LesLignesGCG [split $Sequence "\n"] set iAC [lsearch -regexp $LesLignesGCG "^AC "] if {$iAC>0} { scan [lindex $LesLignesGCG $iAC] "%s %s" Cle Access regsub -all {[^a-zA-Z0-9_]} $Access "" Access } elseif { [set iACCESSION [lsearch -regexp $LesLignesGCG "^ACCESSION "]] > -1 } { scan [lindex $LesLignesGCG $iACCESSION] "%s %s" Cle Access regsub -all {[^a-zA-Z0-9_]} $Access "" Access } else { set Access "" } set DE "" set iDE [lsearch -regexp $LesLignesGCG "^DE "] if {$iDE>0} { set DE [string range [lindex $LesLignesGCG $iDE] 5 end] } elseif { [set iDEFINITION [lsearch -regexp $LesLignesGCG "^DEFINITION "]] > -1 } { set DE [string trim [string range [lindex $LesLignesGCG $iDEFINITION] 11 end]] while {[regexp {^ } [lindex $LesLignesGCG [incr iDEFINITION]]]} { append DE " [string trim [lindex $LesLignesGCG $iDEFINITION]]" } } else { set DE "" } set iPP [lsearch -regexp $LesLignesGCG {\.\.}] set SequenceBrute [join [lrange $LesLignesGCG [incr iPP] end] ""] regsub -all {[0-9\n \t]} $SequenceBrute "" SequenceBrute if {$NomDeBapteme==""} { set NomDeBapteme $NomParDefaut } if {$NomDeBapteme==$NomParDefaut) && $Access!=""} { set NomDeBapteme $Access } set Entete [string range "$NomDeBapteme $Access $DE" 0 998] regsub -all {>} $Entete " " Entete set Entete [string trim $Entete] set TFA ">$Entete\n[SequenceFormatBrut $SequenceBrute]" return $TFA } if {$Format=="brut" || $Format=="protbrut" || $Format=="nucbrut"} { if {$NomDeBapteme==""} { set NomDeBapteme $NomParDefaut } set Entete $NomDeBapteme regsub -all {>} $Entete " " Entete set Entete [string trim $Entete] set TFA ">$Entete\n[SequenceFormatBrut $Sequence]" return $TFA } FaireLire "Unknown sequence format. I don't convert to TFA." return "" } proc SequenceFormatTFADuEMBLMultiple {FichierOuTexte {NomDeBapteme ""} {Deb ""} {Fin ""}} { if {$Deb==""} { set Deb 0 } if {$Fin==""} { set Fin 9999999 } set LesTFA {} for {set I $Deb} {$I<=$Fin} { incr I} { set LePremier [ExtractPartsFromEMBL $FichierOuTexte $I $I] if {$LePremier=={}} { break } set Premier [lindex $LePremier 0] lappend LesTFA [SequenceFormatTFA $Premier $NomDeBapteme "embl"] } ExtractPartsFromEMBL $FichierOuTexte "close" return [join $LesTFA "\n"] } proc SequenceFormatTFADuFichier {Fichier {NomDeBapteme ""} {Format ""} {WithoutGap ""}} { return [SequenceFormatTFA [ContenuDuFichier $Fichier] $NomDeBapteme $Format $WithoutGap] } proc SequenceFormatTFADuGenBankMultiple {Fichier {NomDeBapteme ""} {Deb ""} {Fin ""}} { if {$Deb==""} { set Deb 0 } if {$Fin==""} { set Fin 9999999 } set FGB "" if {[regexp ".gz$" $Fichier]} { set FGB "[TmpFile].gb" exec gunzip -c $Fichier > $FGB set Fichier $FGB } set LesTFA {} for {set I $Deb} {$I<=$Fin} {incr I} { set LePremier [ExtractPartsFromGenBank $Fichier $I $I] if {$LePremier=={}} { break } set Premier [lindex $LePremier 0] set TFA [SequenceFormatTFA $Premier $NomDeBapteme "gbprot"] if {$TFA==""} { continue } lappend LesTFA $TFA } ExtractPartsFromGenBank $Fichier "close" if {$FGB!="" && [file exists $FGB]} { file delete $FGB } return [join $LesTFA "\n"] } proc SequenceFormatTFA_l {LaSequence {NomDeBapteme ""} {Format ""} {WithoutGap ""}} { return [SequenceFormatTFA [join $LaSequence "\n"] $NomDeBapteme $Format $WithoutGap] } proc SequenceLockee {s} { global LockSeqs return [set LockSeqs($s)] } proc SequencePourProttfaVidePourTous {} { foreach F [glob -nocomplain "[RepertoireDuGenome]/protemblVide/*"] { set Nom [file tail $F] set SiteUcsc "http://genome.ucsc.edu" set NM [AccessEvi $Nom] set Id [LocUcsc $NM proteinID] set Texte [HttpGetUrl "$SiteUcsc/cgi-bin/pbGlobal?proteinID=$Id"] set TFA [ValeurDeLaBalise "pre" Texte] regexp {>([^\| ]+)} $TFA Match Access set Seq [QueLaSequenceDuTexteTFA $TFA] if {$Seq==""} { FaireLire "$Nom $NM $Id merde" ; continue } set Entete [EnteteDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"] append Entete " $Id $Access" set Bon [SequenceFormatTFA $Seq $Entete "protbrut"] Espionne "$Bon" set Nouveau [Sauve $Bon dans "[RepertoireDuGenome]/prottfa/$Nom"] lappend LesNouveaux $Nouveau set FRS "[RepertoireDuGenome]/prottfaUcscRs/$Nom" set FGB "[RepertoireDuGenome]/prottfaGB/$Nom" if {[file exists $FRS]} { Sauve $Bon dans $FRS } if {[file exists $FGB]} { Sauve $Bon dans $FGB } } SauveLesLignes $LesNouveaux dans "[Fiches]/LesProttfaVidesRetrouves" } 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 SequenceSansOligosDuVirtualPPCR {N} { set Seq [VirtualPPCREnStock $N "Seq"] set P5 [VirtualPPCREnStock $N "P5"] set P3 [VirtualPPCREnStock $N "P3"] set S5 [Oli $P5 "SeqSignals"] set S3 [NucToReverseAndComplementNuc [Oli $P3 "SeqSignals"]] if { ! [regexp -nocase $S5 $Seq]} { FaireLire "Error I can't find $P5 in virtualPPCR $N" } if { ! [regexp -nocase $S3 $Seq]} { FaireLire "Error I can't find $P3 in virtualPPCR $N" } set SeqSujet $Seq regsub -nocase "^$S5" $SeqSujet "" SeqSujet regsub -nocase "$S3$" $SeqSujet "" SeqSujet return $SeqSujet } proc SequenceTFADuContig {Chromosome Contig BorneMin BorneMax {nChiffres ""} {TailleContig ""}} { if {$TailleContig == ""} { set TailleContig [TailleDuContig $Chromosome $Contig $nChiffres] if {$TailleContig < $BorneMin} {return ""} if {$TailleContig < $BorneMax} {set BorneMax $TailleContig} } set Seq [SequenceDuContig $Chromosome $Contig $BorneMin $BorneMax $nChiffres $TailleContig] return [SequenceFormatTFA $Seq "$Chromosome $Contig $BorneMin to $BorneMax"] } proc SequenceTaggee {y xd xf} { global TabSF PrmPrt NomTextSeq set xdori $xd ; set xfori $xf set Lf [lreverse [ListeDesFeaturesUtilisees]] set n [lindex $PrmPrt(LNoms) $y] set Ltags [list] set ti -1 foreach ft $Lf { incr ti if {! [info exists TabSF($n,$ft)]} { continue } set Ltmp [list] foreach f [lsort -integer -unique -index 1 [set TabSF($n,$ft)]] { DecortiqueUneFeature $f dg fg col sco note if {$dg <= $xf && $fg >= $xd} { if {$dg < $xd} { set x1 $xd } else { set x1 $dg } if {$fg > $xf} { set x2 $xf } else { set x2 $fg } lappend Ltags [list $x1 $x2 $col $ti] } } } return $Ltags } proc SequenceType {} { #la sequence est soit Exemplar, Consensus or Control set version "na32" set FichierMG430A "[RepertoireAffyAnnot $version]/MG430A_2.0/Mouse430A_2.$version.annot.csv" set FichierMG430 "[RepertoireAffyAnnot $version]/MG430_2.0/Mouse430_2.$version.annot.csv" set FichierMGU74A "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Av2.$version.annot.csv" set FichierMGU74B "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Bv2.$version.annot.csv" set FichierMGU74C "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Cv2.$version.annot.csv" set FichierRGU34A "[RepertoireAffyAnnot $version]/RG-U34/RG_U34A.$version.annot.csv" set FichierHGU1332 "[RepertoireAffyAnnot $version]/HG-U133+2/HG-U133_Plus_2.$version.annot.csv" set FichierHGU133A "[RepertoireAffyAnnot $version]/HG-U133/HG-U133A.$version.annot.csv" set FichierHGU133B "[RepertoireAffyAnnot $version]/HG-U133/HG-U133B.$version.annot.csv" set FichierZebra "[RepertoireAffyAnnot $version]/Zebrafish/Zebrafish.$version.annot.csv" set FichierDroso "[RepertoireAffyAnnot $version]/Drosophila/DrosGenome1.$version.annot.csv" set FichierChick "[RepertoireAffyAnnot $version]/Chicken/Chicken.$version.annot.csv" set FichierXenop "[RepertoireAffyAnnot $version]/Xenopuslaevis/Xenopus_laevis.$version.annot.csv" set LesFichiers [list $FichierMG430A $FichierMG430 $FichierMGU74A $FichierMGU74B $FichierMGU74C $FichierRGU34A $FichierHGU1332 $FichierHGU133A $FichierHGU133B $FichierZebra $FichierDroso $FichierChick $FichierXenop] foreach File $LesFichiers { set LesTypes {} set LesTetes [TabulonsSansQuote $File "," ";" " " "GetListOfHeaders"] set LesLignes [TabulonsSansQuote $File "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { if {[regexp "^#" $Ligne]} {continue} if {[regexp "^Probe" $Ligne]} {continue} set Elmt [split $Ligne ";"] set Type [lindex $Elmt 4] lappend LesTypes $Type } set LesTypes [ListeSansDoublon $LesTypes] Espionne "$File" foreach x $LesTypes {Espionne "\t$x"} } } proc SequenceWeight {tid} { global Abr set A [set Abr(Arbre,$tid)] set Lf [$A leaves] set nf [llength $Lf] set LW [list] foreach l $Lf { set sum 0 set f $l while {[$A parent $f] ne "root"} { set lg [$A get $f length] if {[$A isleaf $f]} { set sz 1 } else { set sz [LesFeuillesDuSousArbre $A $f] } puts " node $lg $sz" set sum [expr {$lg/$sz + $sum}] set o [$A parent $f] set f $o update } set sum [expr {int($sum * 100)}] puts "leaf $l [$A get $l length] $sum" lappend LW $l $sum } puts "DEBITEM WOri" set i 0 array set T $LW foreach n [set ::CpB(GroupeToutLeMonde)] { puts "ITEM $n [set T($n)]" incr i } unset -nocomplain T # Normalisation to 1000 # (see seqweight.c rascal code) set sum 0 foreach {k v} $LW { incr sum $v } set new [list] if {$sum == 0} { set LW [list] foreach f $Lf { lappend new $f 1 } set sum [llength $Lf] } foreach {k v} $LW { set v [expr {int($v)*1000/int($sum)}] if {$v < 1} {set v 1} lappend new $k $v } return $new } proc SequencesASauver {} { global NomSeqSel LNOrdali LSOrdali LNSeqlab set LesNoms [list] set LesSeqs [list] if {[info exists NomSeqSel] && $NomSeqSel != {} } { set choix [tk_dialog .chx "Beware !!" "There are selected sequences ...\nDo you want to " "" 1 " Save selected" "Save all" "Cancel"] } else { set choix 1 } switch $choix { 0 { set LesNoms [LesNomsDesSeqsSel] set LesSeqs [LesSeqsDesSeqsSel] } 1 { if {[QuelMode] eq "seqlab"} { set LNoms $LNSeqlab set LSeqs [$::NomTextSeq output all] } else { set LNoms $LNOrdali set LSeqs $LSOrdali } foreach n $LNoms s $LSeqs { if {[string trim $n] eq ""} { continue } lappend LesNoms $n lappend LesSeqs $s } } 2 { return } } return [list $LesNoms $LesSeqs] } proc SequencesCourtes {} { #pour tous meme si pas de mRNA set n 0 foreach JR [VraieListeDesJR2] { #Espionne $JR #if {[file exists "[GscopeDatabaseDir HeadNeck3]/mrnahuman/$JR"]} {continue} set FichierTfa "[GscopeDatabaseDir HeadNeck3]/nucMaskAndReMask/$JR" if {[NombreDeBasesContinuesMax $FichierTfa]<20} { incr n continue } } return "nb seq trop courtes sur totalite des jr:$n" } proc SequencesCourtesAvecRNA {} { #pour tous meme si pas de mRNA set n 0 foreach JR [VraieListeDesJR2] { #Espionne $JR set FichierTfa "[GScopeDatabaseDir HeadNeck3]/nucMaskAndReMask/$JR" if {[NombreDeBasesContinuesMax $FichierTfa]<20 && [file exists "[GscopeDatabaseDir HeadNeck3]/mrnahuman/$JR"]} { Espionne $JR incr n continue } } return "nb seq trop courtes mais avec mrna:$n" } proc SequencesDesBanques {Liste {AvecQY ""}} { set AvecQY [regexp -nocase "QY" $AvecQY] regsub -all {[ \,\n\;\t]+} $Liste " " Liste set Liste [string trim $Liste] set LesAccess [split $Liste " "] PrepareLesSequencesDesBanques $LesAccess set LeResultat {} foreach Access $LesAccess { set R [SequenceDesBanques $Access] set R [string trim $R "\n"] if {$AvecQY} { lappend LeResultat "QY $Access" } if {$R!=""} { lappend LeResultat $R } if { ! [regexp {//$} $R] } { lappend LeResultat "//" } } return [join $LeResultat "\n"] } proc SequencesDesVeryLast {} { global LNOrdali LSOrdali TabSF ListeTypeDeFeatures set Fichier "[MiSynPatDir]/misynpat.sql" set db "root" sqlite3 $db $Fichier #set Names [$db eval {select sName from synthetase}] set Names [list "GARS" "KARS"] foreach Name $Names { # recupere les données MACSIMS set system [string index $Name 0] set fileMacsim "[HomeRipp]/wwwLinux/misynpat/data/alignments/${system}_maj.xml" Espionne "$Name" Espionne "$system" Espionne "$fileMacsim" DecortiqueUnXml2 $fileMacsim InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF global {*}[info globals "TD*"] set Lsqn [list] ; set Lseq [list] ; set Lacc [list] foreach n $LNOrdali s $LSOrdali { if {$n eq ""} {continue} lappend Lsqn $n lappend Lacc [set TDesAccess($n)] lappend Lseq $s } set idmito [Lsearch -glob -inline $Lsqn "${system}mi*_Homo.sapi"] set indexseqmito [Lsearch -glob $Lsqn "$idmito"] set accmito [lindex $Lacc $indexseqmito] set seqmitoG [lindex $Lseq $indexseqmito] regsub -all {\.} $seqmitoG {} seqmitoL } } proc SequencesDitesNormales {} { #normales: devraient commencer par TAAGCTTTTT ou finir par AAAAAGCTTA set Rep "[RepertoireDuGenome]/nucmask" foreach Fichier [glob -nocomplain -directory $Rep "DD*.mrm"] { set Nom [NomDeFichierSansExtension [file tail $Fichier]] set EnteteTFA [EnteteDuFichierTFA $Fichier] set TexteSeq [QueLaSequenceDuTFA $Fichier] if {[regexp -nocase "TAAGCTTTTT" $TexteSeq] || [regexp -nocase "AAAAAGCTTA" $TexteSeq]} { lappend LesSeqNormales $Nom } else {lappend LesSeqPasNormales $Nom} } Espionne [llength $LesSeqNormales] Espionne [llength [lsort -unique $LesSeqNormales]] Espionne [llength $LesSeqPasNormales] Espionne [llength [lsort -unique $LesSeqPasNormales]] } proc SequencesPourAgent {file RenameSeq} { global LNOrdali LSOrdali Sequences Lref Sref NbSeq unset -nocomplain Ltmp Stmp Lref Sref if {$file ne ""} { if {[file extension $file] eq ".tfa"} { LitLeTFA $file Ltmp Stmp } else { DecortiqueUnMSF $file Ltmp Stmp } } else { # fichier deja lu set Ltmp [list] foreach n $LNOrdali { if {$n ne ""} { lappend Ltmp $n } } array set Stmp [array get Sequences] } set NbSeq [llength $Ltmp] if {$NbSeq == 0} { puts "Error ! No sequences !" return 0 } # rename sequences set Lref [list] if {$RenameSeq} { for {set i 1} {$i <= $NbSeq} {incr i} { set n [lindex $Ltmp $i-1] set new "s[format %02d $i]" lappend Lref $new set Sref($new) [set Stmp($n)] } } else { set Lref $Ltmp array set Sref [array get Stmp] } set LNOrdali $Lref foreach n $Lref { set sref [set Sref($n)] set sref [string map {X "." "~" "." "-" "."} $sref] set s [string map {"." "" "-" ""} $sref] set Sequences($n) $s } #DonneMemeLongueur Sequences set LSOrdali {} foreach n $LNOrdali { lappend LSOrdali $Sequences($n) } return } proc SequencesSelectionnees {{ix name}} { global LNOrdali global NomSeqSel if {$NomSeqSel eq ""} {return ""} foreach v $NomSeqSel { lassign [split $v .] y x lappend Li [expr {$y-1}] lappend Lg $y lappend Ln [lindex $LNOrdali [expr {$y-1}]] } switch $ix { "index" {return $Li} "graphic" {return $Lg} "name" {return $Ln} } } proc Seraphin37Orfs {} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/atelier/Seraphin/37Orfs.tfa"] { set Ligne [string trim $Ligne] if {[regexp {\#(.+)} $Ligne Match Orga]} { continue } if {$Ligne==""} { continue } if {[regexp ">" $Ligne]} { regsub -all { +} $Ligne " " Ligne regsub "Chr " $Ligne "Chr" Ligne regsub " reverse complement" $Ligne "-" Ligne scan $Ligne "%s %s" Access Id regsub ">" $Access "" Access if {[NomDuAlias $Access] != ""} { FaireLire "$Access est deja [NomDuAlias $Access]" } lappend LesAccess $Access set LaDesc {} set Desc "" if {$Orga=="Saccharomyces cerevisiae"} { set Info [YeastGlossary $Id] set InDesc 0 foreach Li [split $Info "\n"] { if {[regexp {Description\.*\:(.+)} $Li Match D]} { set InDesc 1 lappend LaDesc [string trim $D] set Desc [join $LaDesc " "] continue } if { ! [regexp -nocase {^[A-Z]} $Li] && $InDesc} { set D $Li lappend LaDesc [string trim $D] set Desc [join $LaDesc " "] continue } set InDesc 0 } } else { set Info [join [LaSequenceDesBanques $Id] "\n"] foreach Li [split $Info "\n"] { if {[regexp {^DE ([^\n]+)} $Li Match D]} { lappend LaDesc [string trim $D] set Desc [join $LaDesc " "] } } } regsub " " $Ligne " $Orga " Ligne append Ligne " $Desc" lappend LesEntetes "$Ligne" set LeTfaDe($Access) [list $Ligne] continue } lappend LeTfaDe($Access) $Ligne } set LesNouveaux {} foreach Access $LesAccess { set FichierTFA "[RepertoireDuGenome]/atelier/Seraphin/$Access.tfa" SauveLesLignes $LeTfaDe($Access) dans $FichierTFA lappend LesNouveaux "$Access $FichierTFA" } SauveLesLignes $LesNouveaux dans "[RepertoireDuGenome]/atelier/Seraphin/37Orfs.lst" AfficheListe $LesNouveaux AfficheListe $LesEntetes } proc SeraphinDu {Cas} { global ListeSeraphin ListeCasimir if { ! [info exists ListeSeraphin]} { ChargeSeraphinEtCasimir } set iPrecedent -999999 set jPrecedent -999999 foreach i $ListeSeraphin j $ListeCasimir { if { [expr $jPrecedent <= $Cas] && [expr $Cas < $j] } { return [expr $iPrecedent+$Cas-$jPrecedent] } } return [expr $iPrecedent+$Cas-$jPrecedent] } proc SeriaList {args} { return "$args" } proc SerialFromArray {aT {TypeK ""} {TypeV ""}} { upvar $aT T if {$TypeK==""} { set TypeK "s" } if {$TypeV==""} { set TypeV "s" } set LesKey [lsort -integer [array names T]] set N [llength $LesKey] set LesElements {} foreach K $LesKey { set V $T($K) if {$TypeK=="i"} { set EK "i:$K" } else { set LK [string length $K] set EK "s:$LK:\"$K\"" } if {$TypeV=="i" || $TypeV=="d"} { set EV "$TypeV:$V" } else { set LV [string length $V] set EV "s:$LV:\"$V\"" } lappend LesElements "$EK;$EV" } set Elements [join $LesElements ";"] set S "a:$N:{$Elements;}" return $S } proc SerialFromLinesOfFile {File} { set Liste [LesLignesDuFichier $File] CreateArrayFromList T 0 $Liste return [SerialFromArray T "i" "s"] } proc SerialFromList {Liste} { CreateArrayFromList T 0 $Liste return [SerialFromArray T "i" "s"] } proc SeriallistFromSerial {Texte} { set fin [string length $Texte] set deb 0 return [RecurSeriallistFromSerial Texte deb $fin] } proc ServiceEBI {Lbkid} { foreach e $Lbkid { lassign $e bk Lid # do bunch of 200 seqs set nId [llength $Lid] set nB [expr {$nId/200+1}] for {set i 0} {$i < $nB} {incr i} { set fin [expr {($i+1)*200 - 1}] if {$fin > $nId} {set fin end} set Lr [lrange $Lid $i $fin] set url "http://www.uniprot.org/uniprot/[join $Lr ,].txt" #set url "http://www.uniprot.org/uniprot/?query=database:(type:refseq [join $Lr ,])&format=txt" puts "$url" #set url "http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-noSession+-ascii+-e+\[refseqp-id:[join $Lid ,]\]" #puts "$url" #exit #set url "http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=$bk&id=[join $Lr ,]&style=raw" set rep [::http::data [::http::geturl $url]] set Lfi [SplitLesEMBL $rep] } } return } proc SetCenter {c x y} { global Vrp set Vrp(CX) [$c canvasx $x] set Vrp(CY) [$c canvasy $y] ShowCenter $c $Vrp(CX) $Vrp(CY) return } proc SetCenterOfMass {c} { global Vrp SetCenter $c $Vrp(CmX) $Vrp(CmY) return } proc SetDeTest {} { set RepTFA "[RepertoireDuGenome]/alignement_ARP/ARPAnno/ARP_TFA_lesarps" if {![file exists "$RepTFA"]} { file mkdir "$RepTFA" } set LesAccess [lsort [InterrogeLesInfosDesARPs LesAccess]] #Espionne "$LesCategories" #set LesAccess O15142 foreach Acc $LesAccess { #Espionne "$Acc" set Categorie [InterrogeLesInfosDesARPs [string toupper $Acc] Categorie] if {[regexp -nocase "actin" $Categorie]} {continue} if {[regexp -nocase {^arp[0-9]{1,2}} $Acc]} {continue} set FichierTFA "$RepTFA/${Acc}.tfa" if {[file exists $FichierTFA]} { file delete -force $FichierTFA } set LesAccessGetz $Acc set Banques "protein" set option "-view FastaSeqs" set Typ1 "acc" set Typ2 "id" set Commande "getz $option \"\\\[$Banques-$Typ1: $LesAccessGetz\\\] | \\\[$Banques-$Typ2: $LesAccessGetz\\\]\"" #Espionne "$Commande" catch {unset GetzOut} catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut]} {continue} if {$GetzOut==""} {continue} regsub -all {protein\|} $GetzOut "" GetzOut regsub -all {\|} $GetzOut " " GetzOut #Espionne "$Acc\n$GetzOut" if {[regexp -nocase -all "^>" $GetzOut]>1} { continue } AppendAuFichier $FichierTFA $GetzOut } return "" } proc SetDotColor {w} { global Vrp set color [tk_chooseColor -title "Choose a dot color" -parent $w -initialcolor $Vrp(colDot)] if { ![string compare $color ""] == 0 } { set Vrp(colDot) $color $w.c itemconfigure dot -fill $color } return } proc SetFeatValue {w what} { global EFeat set v $::EFeat(C$what) if {$v eq "Select"} {return} switch $what { "Name" { SetupDefineFeature $w if {$v ni $::EFeat(FTypes)} { lappend ::EFeat(FTypes) $v $::EFeat(CbName) configure -values $::EFeat(FTypes) $::EFeat(FeatCombo) configure -values $::EFeat(FTypes) } set ::EFeat(Name) $v } "Range" { lassign $v x1 x2 set ::EFeat(ZoneX1) $x1 set ::EFeat(ZoneX2) $x2 } "Color" { if {$v eq "More Colors"} { set v [tk_chooseColor -title "Choose new feature color"] if {$v eq ""} {return} } if {$v ni $EFeat(Lcolor)} { set EFeat(Lcolor) [linsert $EFeat(Lcolor) end-1 $v] $EFeat(CbColor) configure -values $EFeat(Lcolor) set EFeat(CColor) $v } set EFeat(Color) $v } default { set ::EFeat($what) $v } } return } proc SetFullScreenMode {} { global pgl set win [winfo toplevel $pgl(wogl)] if {1} { set pgl(Oldw) [winfo width $win] set pgl(Oldh) [winfo height $win] set sh [winfo screenheight $win] set sw [winfo screenwidth $win] wm minsize $win $sw $sh wm maxsize $win $sw $sh wm overrideredirect $win 1 } #wm withdraw $win wm attributes $win -fullscreen 1 #wm deiconify $win update idletasks focus $win return } proc SetFullScreenMode_paul {w} { set win [winfo toplevel $w] set sh [winfo screenheight $win] set sw [winfo screenwidth $win] wm minsize $win $sw $sh wm maxsize $win $sw $sh set fmtStr [format "%dx%d+0+0" $sw $sh] wm geometry $win $fmtStr wm overrideredirect $win 1 focus -force $win } proc SetGeneNameForPerox {} { foreach Nom [ListeDesPABs] { set Fichier "[RepertoireDuGenome]/prottfa/$Nom" if { ! [file exists $Fichier]} { continue } set Entete [EnteteDuFichierTFA $Fichier] set D 0 set LesPossibles {} while {[regexp -start $D -indices {\([^ ]+\)} $Entete Indices]} { scan $Indices "%d %d" D F set Match [string range $Entete [expr $D+1] [expr $F-1]] incr D if {[string length $Match]< 2} { continue } if {[string length $Match]>12} { continue } if {[regexp -nocase {[^0-9a-z\-]} $Match]} { continue } if {[regexp -nocase {^[0-9]+kD$} $Match]} { continue } lappend LesPossibles $Match } lappend LeTout "$Nom $LesPossibles" } set Tout [join $LeTout "\n"] set Fenetre [AfficheVariable $Tout "" PossibleGenNames] BoutonneLaFenetre $Fenetre "InformeWithSelection" "InformeGeneNameForPerox \[selection get\]" } proc SetLabelColor {w} { global Vrp set color [tk_chooseColor -title "Choose a label color" -parent $w -initialcolor $Vrp(colLabel)] if { ![string compare $color ""] == 0 } { set Vrp(colLabel) $color $w.c itemconfigure label -fill $color } return } proc SetLabelSize {w size} { global Vrp set Vrp(fontSize) $size set Vrp(font) "$Vrp(fontFamily) $Vrp(fontSize) $Vrp(fontStyle)" $w.c itemconfigure label -font $Vrp(font) return } proc SetLabelStyle {w} { global Vrp set style {} lappend style $Vrp(style1) if { $Vrp(styleItalic) } { lappend style italic } if { $Vrp(styleRoman) } { lappend style roman } if { $Vrp(styleUnderline) } { lappend style underline } set Vrp(fontStyle) [join $style " "] set Vrp(font) "$Vrp(fontFamily) $Vrp(fontSize) $Vrp(fontStyle)" $w.c itemconfigure label -font $Vrp(font) return } proc SetListeDesPresentsAbsents {Liste} { global ChoixDesGenomesCompletsPresentsAbsents set ChoixDesGenomesCompletsPresentsAbsents $Liste } proc SetMacCourant {quoi} { if {$quoi eq "last"} { set imac [$::db eval {select max(pk_mac) from mac}] } elseif {$quoi eq "first"} { set imac [$::db eval {select min(pk_mac) from mac}] } set nmac [NomDeMac $imac] LesDefauts IxMacCourant $imac LesDefauts NmMacCourant $nmac return } proc SetOnTraiteLike {Quoi {RG ""}} { if {$RG!=""} { if {[FileAbsent $RG]} { set RG [GscopeDatabaseDir $RG] } } if {$RG==""} { set RG [RepertoireDuGenome] } return [AppendAuFichier "$RG/beton/miniconfig" "OnTraiteLike $Quoi"] } proc SetOptions {Liste} { set LesValeurs [lrange $Liste 1 end] lappend LesValeurs 1 foreach Option $Liste Valeur $LesValeurs { if { ! [regexp {^\-} $Option]} { continue } regsub {^\-} $Option "" Option if {[regexp {^[0-9]} $Option]} { continue } lappend LesOptions $Option if {[regexp {^\-[^0-9]} $Valeur]} { set Valeur 1 } uplevel set $Option \"$Valeur\" } return $LesOptions } proc SetSignification {K Couleur {Signe ""}} { global SignificationEnStock if { ! [OnColorieLesFrames] } { append K "_Linge" } if {$Couleur == "AnnulerToutesSignifications"} { if {[info exists SignificationEnStock($K)]} { foreach C [set SignificationEnStock($K)] { catch {unset SignificationEnStock($C,$K)} } catch {unset SignificationEnStock($K)} } } else { if { ! [info exists SignificationEnStock($Couleur,$K)]} { lappend SignificationEnStock($K) $Couleur set SignificationEnStock($Couleur,$K) $Signe } } } proc SetWindowMode {} { global pgl set win [winfo toplevel $pgl(wogl)] set h $pgl(Oldh) set w $pgl(Oldw) set sh [winfo screenheight $win] set sw [winfo screenwidth $win] wm minsize $win 10 10 wm maxsize $win $w $h set fmtStr [format "%dx%d+0+25" $w $h] wm overrideredirect $win 0 wm geometry $win $fmtStr wm attributes $win -fullscreen 0 focus $win return } proc SetWindowMode_paul {window w h} { set win [winfo toplevel $window] set sh [winfo screenheight $win] set sw [winfo screenwidth $win] wm minsize $win 10 10 wm maxsize $win $sw $sh set fmtStr [format "%dx%d+0+25" $w $h] wm geometry $win $fmtStr wm overrideredirect $win 0 focus -force $win } proc SetupAnaBali {} { set GscopeDir $env(GSCOPEDIR) set OrdaliDejaSource 1 #source [file join $GscopeDir gscope_source.tcl] source [file join $GscopeDir gscope_outils.tcl] source [file join $GscopeDir gscope_sequence.tcl] set OrdaliDir $env(ORDALIDIR) set OrdaliDejaSource 0 source [file join $OrdaliDir src ordali_source.tcl] package require Thread LoadTclPackages package require sqlite3 InitLesDefauts #set VariablesAuDepart [info globals] LesDefauts OnlyTLog 1 LesDefauts Mode batch set ::OuiOuNonToujoursParDefaut 1 } proc SetupDefineFeature {w} { global EFeat LNOrdali TabSF set ft [$w get] set Lcolor [list] set Lscore [list] set Lnote [list] foreach nom $LNOrdali { if {$nom eq "" || ! [info exists TabSF(${nom},$ft)]} {continue} foreach e [set TabSF(${nom},$ft)] { DecortiqueUneFeature $e d f col score note csys lappend Lcolor $col lappend Lnote $note lappend Lscore $score } } set Lcolor [lsort -unique $Lcolor] set Lscore [lsort -unique $Lscore] set Lnote [lsort -unique $Lnote] set Lcolor [linsert $Lcolor 0 "Select"] set EFeat(Lcolor) [linsert $Lcolor end "More Colors"] set EFeat(Lnote) [linsert $Lnote 0 "Select"] set EFeat(Lscore) [linsert $Lscore 0 "Select"] $EFeat(CbColor) configure -values $EFeat(Lcolor) $EFeat(CbScore) configure -values $EFeat(Lscore) $EFeat(CbNote) configure -values $EFeat(Lnote) return } proc SetupGscope {} { set LesSetupsPossibles [list "ShowDirectoriesOrder" "" "" "GlobalVariables" "" "" ] set Setup [ChoixParmiJoliDansListe $LesSetupsPossibles] switch $Setup { "ModifyAllFonts" { ModifyAllFonts } "ShowDirectoriesOrder" { LesRepertoiresPourSeeAbyShow "Ask" } "GlobalVariables" { ModifyGlobalVariables } } return $Setup } proc SetupPDBObject {} { oo::class create Structure { destructor { my variable db if {[info exists db]} { set Ltbl [$db eval {select tbl_name from sqlite_master}] foreach tbl $Ltbl { $db eval "drop table $tbl" } $db close update } } } oo::define Structure method new {nom {chn ""} {init 0} {InDb 0}} { my variable NomAtm NomRes1l NmrRes ChnIdn AtmXYZ AtmBQ Superseeded Obsolete Rot Trans # Inits set Rot [list 1,1 1.0 1,2 0.0 1,3 0.0 2,1 0.0 2,2 1.0 2,3 0.0 3,1 0.0 3,2 0.0 3,3 1.0] set Trans [list 1 0.0 2 0.0 3 0.0] # Arguments # - nom : file or text or lines or id # - init : 1 -> load from db, 0 load fram if {$init eq ""} {set init 0} # - InDb : 1 store in db, 0 don't if {$InDb eq ""} {set InDb 1} if {$init} { my UpdateFromDB set cok 1 } else { set cok 1 if {[regexp "\n" $nom]} { set Llignes [split $nom \n] set src "text" } elseif {[llength $nom] > 1} { set Llignes $nom set src "list" } elseif {[file extension $nom] eq ""} { #set Llignes [RecupereUnFichierSurWeb [string toupper $nom]] set textePDB [TextePDB [string toupper $nom] ALL "" "OnTheWeb"] set Llignes [split $textePDB \n] if {$Llignes eq "ERREUR" || $Llignes eq ""} { return 0 } set src "download" } else { set Llignes [LesLignesDuFichier $nom] set src "file" } set nom [string range [self] 2 end] set cok [my _DecortiqueUnPdbObject $Llignes $nom] if {$cok == 0} { return 0 } if {$Obsolete != 0} { return [list "obsolete" $Obsolete] } # if superseeded entry, return new one if {$Superseeded != 0} { set cok [list "superseeded" $Superseeded] set newid $cok } else { set cok 1 set newid "" } if {$InDb} { my _RemplitLeSQL $src $newid } } return $cok } oo::define Structure method title {} { my variable Header set titre "" foreach l $Header { if {[regexp {^TITLE } $l]} { append titre [string range $l 5 end] } } return $titre } oo::define Structure method dbref {chn} { my variable DbRef return [set DbRef($chn)] } oo::define Structure method PDBInfos {chn} { set nom [string range [self] 2 end] set nom [BonNomPDB ${nom}_$chn] my _PDBSetup my _ExtraitSecStrucDuPDB $nom return } oo::define Structure method UpdateFromDB {} { global db my variable Header Site TypChn AtmNA ChnIdn NomRes1l NomRes3l NmrRes AtmXYZ AtmBQ NomAtm TypRes $db eval {begin transaction} set nom [string range [self] 2 end] set pkp [$db eval {select pk_pdb from pdb where name=$nom}] set Header {*}[$db eval {select header from pdb where name=$nom}] foreach {pkc chn ctype} [$db eval {select pk_chains, name, type from chains where pk_pdb=$pkp}] { lappend ChnIdn $chn lappend TypChn($chn) $ctype foreach {n1l n3l nmr type} [$db eval {select rname1l, rname3l, rnbr, type from residues where pk_chains=$pkc order by pk_residues}] { lappend NomRes1l($chn) $n1l lappend NomRes3l($chn) $n3l lappend NmrRes($chn) [string trimleft $nmr 0] lappend TypRes($chn) $type } set lxyz [list] set lbq [list] set lna [list] set latn [list] set pkold -1 foreach {pkr atn ax ay az ab aq ana} [$db eval {select pk_residues, aname, x, y, z, b, q, na from atoms where pk_chains=$pkc order by pk_atoms}] { if {$pkr != $pkold} { if {$pkold != -1} { lappend NomAtm($chn) $latn lappend AtmXYZ($chn) $lxyz lappend AtmBQ($chn) $lbq lappend AtmNA($chn) $lna set lxyz [list] set lbq [list] set lna [list] set latn [list] } set pkold $pkr } lappend lxyz [list $ax $ay $az] lappend lbq [list $ab $aq] lappend lna $ana lappend latn $atn } lappend NomAtm($chn) $latn lappend AtmXYZ($chn) $lxyz lappend AtmBQ($chn) $lbq lappend AtmNA($chn) $lna } $db eval {commit} update my _Dimensions return } oo::define Structure method _RemplitLeSQL {source {newid ""}} { my variable TypRes NmrRes NomRes1l NomRes3l NomAtm AtmXYZ ChnIdn AtmBQ AtmNA TypChn Header db global OrdTmpDir Defauts # if newid != null, superseeded ! if {$newid ne ""} { set nom [string range $newid 2 end] } else { set nom [string range [self] 2 end] } set nom [string range [self] 2 end] # database not open, create it if {! [info exists db] || $db eq ""} { set db [FabriqueDeTables [set ::Defauts(TablesDB1.1)] "root$nom" memory] } # ATTENTION ! # ne regle pas cas superseeded et obsolete $db eval {begin transaction} #set cdef [set Defauts(CoulVariable)] set cdef "couldefond" $db eval {insert into pdb values(NULL,$nom,$source,$Header)} set pkp [$db last_insert_rowid] foreach n $ChnIdn { set Ct [set TypChn($n)] if {$Ct eq "DNA" || $Ct eq "Water"} { continue } $db eval {insert into chains values (NULL,$pkp,$n,$Ct)} set pkc [$db last_insert_rowid] set Lr1 [set NomRes1l($n)] set Lr3 [set NomRes3l($n)] set Lrn [set NmrRes($n)] set Lrt [set TypRes($n)] set LLa [set NomAtm($n)] set LLx [set AtmXYZ($n)] set LLb [set AtmBQ($n)] set LLz [set AtmNA($n)] foreach r1 $Lr1 r3 $Lr3 rn $Lrn rt $Lrt La $LLa Lx $LLx Lb $LLb Lz $LLz { set dbrn [format "%08s" $rn] $db eval {insert into residues values(NULL,$pkp,$pkc,$r1,$r3,$dbrn,$rt)} set pkr [$db last_insert_rowid] foreach a $La p $Lx f $Lb na $Lz { lassign $p x y z lassign $f b q set a [string map {"'" "''"} $a] set label "[string trim $a] $r3 ${n}${rn}" $db eval {insert into atoms values(NULL,$pkp,$pkc,$pkr,$a,$x,$y,$z,$b,$q,$na)} set cola [CouleurDeAtome $a] $db eval {insert into objetinit values (NULL,$pkp,$pkc,$pkr,0,0,0,$cdef,0,$cdef,0,$cola, 0,0,0,$label)} } } } $db eval {commit} update my _Dimensions return } oo::define Structure method bbox {} { my variable Size return [list $Size(xmin) $Size(xmax) $Size(ymin) $Size(ymax) $Size(zmin) $Size(zmax)] } oo::define Structure method _Dimensions {} { my variable Size db set pdb [string range [self] 2 end] set sdb $db $sdb eval {begin transaction} set pkp [$sdb eval {select pk_pdb from pdb where name=$pdb}] lassign [$sdb eval {select min(x),min(y),min(z) from atoms where pk_pdb=$pkp}] Size(xmin) Size(ymin) Size(zmin) lassign [$sdb eval {select max(x),max(y),max(z) from atoms where pk_pdb=$pkp}] Size(xmax) Size(ymax) Size(zmax) $sdb eval {commit} set Size(xc) [expr {($Size(xmin)+$Size(xmax))/2.}] set Size(yc) [expr {($Size(ymin)+$Size(ymax))/2.}] set Size(zc) [expr {($Size(zmin)+$Size(zmax))/2.}] return } oo::define Structure method setboite {obj chn} { set obj [BonObjName $obj] my variable AtmXYZ $obj dict set $obj FlagBox 1 return } oo::define Structure method _drawBoite {obj chn} { set obj [BonObjName $obj] my variable AtmXYZ $obj if {! [dict get [set $obj] FlagBox]} {return} # calcule la boite file delete -force vec.dat file delete -force vec.out set f [open "vec.dat" w] foreach lx [set AtmXYZ($chn)] { foreach e $lx { puts $f [join $e] } } close $f if {[catch {set log [exec 3DToParallelepiped vec.dat vec.out]} Msg]} { puts "Error computing box !\n$Msg" return } set Lb [LesLignesDuFichier vec.out] lassign $Lb a1 b1 c1 d1 a2 b2 c2 d2 glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE # glColor3f 1.0 1.0 0.0 set col [list 0.37 0.5 1.0 0.1] FacesDuCube $col $a1 $b1 $c1 $d1 $a2 $b2 $c2 $d2 glColor3f 1.0 0.0 0.0 AretesDuCube $a1 $b1 $c1 $d1 $a2 $b2 $c2 $d2 glDisable GL_BLEND return } oo::define Structure method _superseed {header} { set i [lsearch -regexp $header {^SPRSDE}] if {$i != -1} { set l " [lindex $header $i]" set newid [string tolower [string range $l 32 35]] if {$newid eq [string range [self] 2 end]} { return 0 } else { return $newid } } else { return 0 } } oo::define Structure method _obsolete {header} { set i [lsearch -regexp $header {^OBSLTE}] if {$i != -1} { set l [lindex $header $i] regsub { +} [string trim $l] " " l set newid [string tolower [lindex [split $l " "] end]] if {$newid eq [string range [self] 2 end]} { return 0 } else { return $newid } } else { return 0 } } oo::define Structure method _DecortiqueUnPdbObject {Llignes pdbid} { my variable Header Site TypChn TypRes AtmNA ChnIdn NomRes1l NomRes3l NmrRes AtmXYZ AtmBQ NomAtm Superseeded Obsolete DbRef Lkp SeqAdv set Superseeded 0 set Obsolete 0 set lignesPDB [ExtraitLignesAtomesDuPDB $Llignes] set Header [ExtraitHeadDuPDB $Llignes] if {$lignesPDB == -1} {return 0} # Is this entry superseeded ? set Superseeded [my _superseed $Header] # Is this entry superseeded ? set Obsolete [my _obsolete $Header] if {$Obsolete != 0} { return $Obsolete } set ChnIdn [list] # Traite chaines apres chaines set Lter [lsearch -regexp -all $lignesPDB {^TER}] set Lter [linsert $Lter 0 "0"] set Lter [linsert $Lter end "end"] set LterAr [lrange $Lter 1 end] set d [lindex $Lter 0] foreach f $LterAr { set deb $d set fin $f if {$deb != 0} {incr deb} if {$fin ne "end"} {incr fin -1} set LLignesChn [lrange $lignesPDB $deb $fin] if {$LLignesChn == {}} { set d $f continue } if {[lsearch -regexp $LLignesChn {^ATOM }] != -1} {set polymer 1} {set polymer 0} my _LectureDeChainePdbObject $LLignesChn $polymer set d $f } # Traitement des chaines set ChnIdn [lunique $ChnIdn] # define type of chains from SEQRES my _LectureSeqRes $Header # verif que toutes chaines aient un type my variable TypRes foreach c $ChnIdn { if {! [info exists TypChn($c)] || [set TypChn($c)] eq ""} { set TypChn($c) [DonneChaineType [set TypRes($c)]] } } # Recupere site actif (souvenir ...) set Site [ExtraitSiteActifDuPDB $Header] # recupere SeqAdv my _LectureSeqAdv # Recupere access UniProt foreach c $ChnIdn { set DbRef($c) [ExtraitDbRefDuPdb $Header $c] } # recupere organisme par chain my _LectureSource # Create lookup for residue number foreach chn $ChnIdn { set i 1 foreach r [[self] _resnumber -chain $chn -polymer] { set Lkp($chn,$r) $i incr i } } return 1 } oo::define Structure method _lookup {c r} { my variable Lkp if {[info exists Lkp($c,$r)]} { return $Lkp($c,$r) } else { return "" } } oo::define Structure method _seqadv {c} { my variable SeqAdv set Lret [list] foreach adv $SeqAdv { lassign $adv nm1 chn if {$chn eq $c} { lappend Lret $adv } } return $Lret } oo::define Structure method _source {c {type "taxid"}} { my variable Source set ret "" switch $type { "taxid" {set ret [set Source($c,OrgTx)]} "orga" {set ret [set Source($c,OrgSc)]} } return $ret } oo::define Structure method _LectureSource {} { my variable Source Header ChnIdn # init foreach c $ChnIdn { set Source($c,OrgSc) "unknown" set Source($c,OrgTx) -1 } # first, get chains by mol_id set Lm [lsearch -all -regexp $Header {^COMPND.+MOL_ID:}] set Lc [lsearch -all -regexp $Header {^COMPND.+CHAIN:}] foreach m $Lm c $Lc { set molid [lindex $Header $m] set molid [string trim [string range $molid [string first "MOL_ID:" $molid]+7 end]] # remove ; regsub -all ";" $molid "" molid set chain [lindex $Header $c] set chain [string trim [string range $chain [string first "CHAIN:" $chain]+6 end]] # remove ';' and space regsub -all { +|;} $chain "" chain set Lchn [split $chain ,] set mol($molid) $Lchn } # now retrieve sources set Lm [lsearch -all -regexp $Header {SOURCE.+MOL_ID:}] foreach m $Lm { set j $m set ligne [lindex $Header $j] set molid [string trim [string range $ligne [string first "MOL_ID:" $ligne]+7 end]] set molid [string range $molid 0 end-1] incr j set ligne [lindex $Header $j] while {[string range $ligne 0 5] eq "SOURCE" || [string first "MOL_ID:" $ligne] != -1} { if {[set iosc [string first "ORGANISM_SCIENTIFIC:" $ligne]] != -1} { set osc [string trim [string range $ligne $iosc+20 end]] set osc [string range $osc 0 end-1] foreach c $mol($molid) { set Source($c,OrgSc) $osc } } elseif {[set iotx [string first "ORGANISM_TAXID:" $ligne]] != -1} { set otx [string trim [string range $ligne $iotx+15 end]] set otx [string range $otx 0 end-1] foreach c $mol($molid) { set Source($c,OrgTx) $otx } } incr j set ligne [lindex $Header $j] } } return } oo::define Structure method _LectureSeqAdv {} { my variable Header SeqAdv set SeqAdv [list] foreach l $Header { if {[string range $l 0 5] ne "SEQADV"} { continue } # file format description starts at 1 set l " $l" set nm1 [string range $l 13 15] set chn [string index $l 17] set rn1 [string range $l 19 22] set rn1 [string trim $rn1] set alt [string index $l 23] set alt [string trim $alt] set db [string range $l 25 28] set db [string trim $db] set acc [string range $l 30 38] set acc [string trim $acc] set nm2 [string trim [string range $l 40 42]] set rn2 [string trim [string range $l 44 48]] set rn2 [string trim $rn2] set cft [string trim [string tolower [string range $l 50 70]]] # the conflict (cft) can be : # - Cloning artifact # - Expression tag # - Conflict # - Engineered # - Variant # - Insertion # - Deletion # - Microheterogeneity # - Chromophore # # 'microheterogeneity' is when a # residue in PDB differs from the # corresponding UniPort reference prot set item [list $nm1 $chn "${rn1}$alt" $db $acc $nm2 $rn2 $cft] lappend SeqAdv $item } return $SeqAdv } oo::define Structure method _LectureSeqRes {LesLignes} { my variable TypChn SeqRes set Li [lsearch -all -regexp $LesLignes {^SEQRES } ] foreach i $Li { set l " [lindex $LesLignes $i]" set c [string index $l 12] for {set x 20} {$x < 70} {incr x 4} { set res [string trim [string range $l $x $x+2]] if {$res eq ""} {break} set r1 [AutreCodeLuc $res] if {$r1 eq "XXX"} {set r1 X} lappend SeqRes($c) $r1 lappend TypChn($c) [DonneResidueType $res] } } foreach c [array names TypChn] { set TypChn($c) [DonneChaineType [set TypChn($c)]] } return } oo::define Structure method _LectureDeChainePdbObject {LesLignes Polymer} { my variable NomAtm TypRes NomRes1l NomRes3l NmrRes ChnIdn AtmXYZ AtmBQ AtmNA ChnTyp set ChaineCourant -1 set ResiduCourant -999 set AlterLocRes "" set CC "" set Latmn {} set Latmx {} set Latmb {} set Latmz {} foreach ligne $LesLignes { set ee " $ligne" set AtomName [string range $ee 13 16] # set AlterLocRes [string index $ee 17] set NomRes3L [string range $ee 18 20] set NomRes1L [AutreCodeLuc $NomRes3L] set ChainIdent [string index $ee 22] scan [string range $ee 23 27] "%s" ResidueNumber scan [string range $ee 31 54] "%8f%8f%8f" x y z set AtomXYZ [list $x $y $z] scan [string range $ee 55 66] "%6f%6f" q b set AtomBQ [list $b $q] set AtomNA [NoAtomicDe [string trim [string range $ee 77 78]]] if {$AtomNA == 0 || $AtomNA == {}} { #puts "[self] AtomicNumber [string trim [string range $ee 77 78]] atm $AtomName chn >>$ChainIdent<< res $ResidueNumber res3l >$NomRes3L< >$NomRes1L<" } ## ATTENTION !! # Cette version ne lit pas les hydrogenes if {$AtomNA == 1} {continue} # if {$AlterLocRes ne ""} {continue} if {$ResiduCourant == -999} { set ResiduCourant $ResidueNumber set CC $ChainIdent if {$Polymer} { set tyres [DonneResidueType $NomRes3L] } else { set tyres "ligand" } } if {$ResidueNumber != $ResiduCourant || $ChainIdent ne $CC} { if {$Polymer} { set tyres [DonneResidueType $N3LCou] # check atom ordering. # important for drawing. if {$tyres eq "Nucleic" && ([lindex $Latmn 0] ne " P " || [lindex $Latmn 0] ne " O3P")} { lassign [ReordonneNucleotide $Latmn $Latmx $Latmb $Latmz] Latmn Latmx Latmb Latmz } } else { set tyres "ligand" } lappend TypRes($CC) $tyres lappend NomRes1l($CC) $N1LCou lappend NomRes3l($CC) $N3LCou lappend NmrRes($CC) $ResiduCourant lappend NomAtm($CC) $Latmn lappend AtmXYZ($CC) $Latmx lappend AtmBQ($CC) $Latmb lappend AtmNA($CC) $Latmz set Latmn {} set Latmx {} set Latmb {} set Latmz {} if {$ChainIdent ne $ChaineCourant} { lappend ChnIdn $ChainIdent set ChaineCourant $ChainIdent set CC $ChainIdent } } lappend Latmn $AtomName lappend Latmx $AtomXYZ lappend Latmb $AtomBQ lappend Latmz $AtomNA set ResiduCourant $ResidueNumber set N3LCou $NomRes3L set N1LCou $NomRes1L } # lappend ChnIdn $CC lappend TypRes($CC) $tyres lappend NomRes1l($CC) $N1LCou lappend NomRes3l($CC) $N3LCou lappend NmrRes($CC) $ResiduCourant lappend NomAtm($CC) $Latmn lappend AtmXYZ($CC) $Latmx lappend AtmBQ($CC) $Latmb lappend AtmNA($CC) $Latmz return } oo::define Structure method _PDBSetup {} { my variable NmrRes NomRes1l ChnIdn EqResType Header DictDesObjets ResSel ResCol NomRes3l global Defauts if {[info exists EqResType]} {return} set EqResType [dict create] foreach c $ChnIdn { foreach e [set NmrRes($c)] t [set NomRes3l($c)] { set ResSel($c,$e) 0 set ResCol($c,$e) [set Defauts(CoulVariable)] dict lappend EqResType "$t" "$c,$e" } } dict set DictDesObjets Index 0 return } oo::define Structure method SecStr {args} { if {! [llength $args]} {return ""} my variable SecStr NomRes1l set i [lsearch $args "-chain"] if {$i == -1} { puts "Error ! no >>-chain<< card !" return } set c [lindex $args $i+1] if {! [info exists NomRes1l($c)]} { puts "Error ! Chain >>$c<< does not exists" return } if {! [info exists SecStr($c)]} { return {} } else { return [set SecStr($c)] } } oo::define Structure method SSBin {type chn} { my variable SSBin set rep "" switch [string tolower $type] { "helix" {set rep [lindex [set SSBin($chn)] 0]} "sheet" {set rep [lindex [set SSBin($chn)] 1]} "turn" {set rep [lindex [set SSBin($chn)] 2]} } return $rep } oo::define Structure method _ExtraitSecStrucDuPDB {mol} { my variable ChnIdn SSBin SecStr Header Lkp set MolId [DonneIdDeAccessPDB $mol] set chn [DonneChainDeAccessPDB $mol] if {[info exists SecStr($chn)]} {return} if {! [info exists ::LNOrdali]} { # we're not in Ordali, .... set InOrdali 0 set Lres [$MolId _resnumber -chain $chn -polymer] set Long [llength $Lres] } else { set InOrdali 1 set Long [LongueurDeLAlignement] } set ssbh [string repeat "0" $Long] set ssbs [string repeat "0" $Long] set ssbt [string repeat "0" $Long] set SStmp {} foreach l $Header { set t [string range $l 0 4] switch $t { "HELIX" {set lhelix [LitHelixDansPDB $l $chn]} "SHEET" {set lhelix [LitSheetDansPDB $l $chn]} "TURN " {set lhelix [LitTurnDansPDB $l $chn]} default {continue} } if {$lhelix eq "PasBon"} {continue} regsub -all { +} [string trim $lhelix] " " ss DecortiqueSS $ss Elmt NomChnDep NmrResDep NmrResFin Rmk if {$NomChnDep ne $chn} {continue} if {$InOrdali} { set Deb [DonnePosSG $mol $NmrResDep] set Fin [DonnePosSG $mol $NmrResFin] } else { # lookup commence a 1, ramene a 0 if {! [info exists Lkp($chn,$NmrResDep)]} { set Deb "" } else { set Deb [expr {[set Lkp($chn,$NmrResDep)]-1}] } if {! [info exists Lkp($chn,$NmrResFin)]} { set Fin "" } else { set Fin [expr {[set Lkp($chn,$NmrResFin)]-1}] } } if {$Deb eq "" || $Fin eq ""} { continue } lappend SStmp $ss switch $Elmt { "Alpha" { set ssbh [MetDesUnsDansSS $ssbh $Deb $Fin] } "Sheet" { set ssbs [MetDesUnsDansSS $ssbs $Deb $Fin] } "Turn" { set ssbs [MetDesUnsDansSS $ssbt $Deb $Fin] } } } set SStmp [lsort -integer -index 4 $SStmp] set SStmp [CombleSSParCoil $SStmp $MolId $chn] set SecStr($chn) $SStmp set SSBin($chn) [list $ssbh $ssbs $ssbt] return } oo::define Structure method _DefinitTypeRes {s p c} { my variable TypRes set id [string first 0 $p] set if [string last 0 $p] if {$id == -1} { set type [DefinitTypeSeq $s] set TypRes($c) [lrepeat [string length $s] $type] return } set nlg [expr {$if - $id + 1}] set llg [lrepeat $nlg "ligand"] if {$id == 0} { set sub [string range $s [expr {$if+1}] end] set type [DefinitTypeSeq $sub] set TypRes($c) [concat $llg [lrepeat [string length $sub] $type]] } else { set sub [string range $s 0 [expr {$id-1}]] set type [DefinitTypeSeq $sub] set TypRes($c) [concat [lrepeat [string length $sub] $type] $llg] } set p [join [set TypRes($c)] ""] set p [string map [list "Protein" "P" "ligand" "l"] $p] set l [string length $p] set i 0 while {0 && $i < $l} { set f [expr {$i + 59}] incr i 60 } return } oo::define Structure method _SetB {d f B c} { my variable AtmBQ db set pdb [string range [self] 2 end] if {$c eq ""} {set c "a"} if {$d eq "all"} { set Add "" } else { set deb [format "%08s" $d] set fin [format "%08s" $f] set Add "and r.rnbr >= '$deb' and r.rnbr <= '$fin' " } $db eval {begin transaction} set La [$db eval "select a.pk_atoms from atoms as a, residues as r, chains as c, pdb as p where a.pk_residues = r.pk_residues and r.pk_chains=c.pk_chains and c.name='$c' and r.pk_pdb = p.pk_pdb and p.name='$pdb' $Add"] $db eval "update atoms set b=$B where pk_atoms in ([join $La ,])" $db eval {commit} return } oo::define Structure method center {} { my variable Size return [list $Size(xc) $Size(yc) $Size(zc)] } oo::define Structure method radius {} { my variable Size return $Size(Rad) } oo::define Structure method _chains {} { my variable ChnIdn return $ChnIdn } oo::define Structure method _seqres {c} { my variable SeqRes return [join [set SeqRes($c)] ""] } oo::define Structure method _chainIs {c} { my variable TypChn return [set TypChn($c)] } oo::define Structure method _resname {args} { my variable NomRes1l NomRes3l TypRes if {! [llength $args]} { puts "Error ! num args" return } set 3lcode 0 if {"-code3l" in $args} {set 3lcode 1} set polymer 1 if {"-allres" in $args} {set polymer 0} set i [lsearch $args "-chain"] if {$i == -1} { puts "Error ! no >>-chain<< card !" return } set c [lindex $args $i+1] if {! [info exists NomRes1l($c)]} { puts "Error ! Chain >>$c<< does not exists" return } set res [list] if {$polymer} { if {! $3lcode} { set Lres [set NomRes1l($c)] } else { set Lres [set NomRes3l($c)] } foreach p [set TypRes($c)] r $Lres { if {$p ne "ligand"} { lappend res $r } } } else { if {! $3lcode} { set [set NomRes1l($c)] } else { set [set NomRes3l($c)] } } return $res } oo::define Structure method CoordsSeq2PDB {c x} { # Conversion pour features PDB dans MACSIM # seq macsim est 1,2,3 ... et seq PDB peut # etre 67,68,69 ... set lr [my _resnumber -chain $c -polymer] return [lindex $lr $x-1] } oo::define Structure method CoordsPDB2Seq {c x} { # Conversion pour PDB dans MACSIM # seq macsim est 1,2,3 ... et seq PDB peut # etre 67,68,69 ... set lr [my _resnumber -chain $c -polymer] # ATTENTION ! # return value starts at 0 ! return [lsearch $lr $x] } oo::define Structure method CoordsDeAtom {chn res atm} { my variable NmrRes NomAtm AtmXYZ set i [lsearch $NmrRes($chn) $res] set a [lindex $NomAtm($chn) $i] set x [lindex $AtmXYZ($chn) $i] set ia [lsearch $a $atm] return [lindex $x $ia] } oo::define Structure method _resnumber {args} { my variable NmrRes NomRes1l TypRes NomRes3l if {! [llength $args]} { puts "Error ! num args" return } set i [lsearch $args "-chain"] if {$i == -1} { puts "Error ! no >>-chain<< card !" return } set c [lindex $args [expr {$i+1}]] if {! [info exists NomRes1l($c)]} { puts "Error ! Chain >>$c<< does not exists" return } set ip [lsearch $args "-polymer"] set il [lsearch $args "-ligand"] if {$ip != -1 && $il != -1} { # can't ask for polymer and ligned at te same time return } if {$ip != -1} { set quoi [list "Protein" "Nucleic"] } elseif {$il != -1} { set quoi "ligand" } else { set quoi [list Protein Nucleic ligand] } set Lres [list] foreach t [set TypRes($c)] a [set NmrRes($c)] { if {$t in $quoi} { lappend Lres $a } } return $Lres } oo::define Structure method selcolor {col} { my variable ResSel ResCol foreach e [array names ResSel] { if {[set ResSel($e)]} {set ResCol($e) $col} } return } oo::define Structure method select {args} { my variable NomAtm NomRes1l NmrRes ChnIdn AtmXYZ AtmBQ SSBin SecStr Header ResSel global Defauts if {! [llength $args]} { puts "Error ! num args" return } if {[llength $args] == 1 && $args eq "all"} { foreach e [array names ResSel] { set ResSel($e) 1 } return } if {[llength $args] == 1 && $args eq "none"} { foreach e [array names ResSel] { set ResSel($e) 0 set ResCol($e) [set Defauts(CoulVariable)] } return } # Si pas de cle chain, -> toutes les chaines if {"chain" in $args} { set ChnSel -1 } set LExp $args # Si parentheses, traite d'abord interne if {[lsearch $args "("] != -1} { set LExp [_DecoupeParParenthese $args] } set rep [my _TraiteExp $LExp] set i 0 foreach v $ChnIdn { foreach r [set NmrRes($v)] { set ResSel($v,$r) [lindex $rep $i] incr i } } return } oo::define Structure method _DecoupeParParenthese {l} { set LO [lreverse [lsearch -all $l "\("]] set LF [lreverse [lsearch -all $l "\)"]] if {! [info exists DSel]} {set DSel [dict create]} set comp 0 foreach o $LO f $LF { set exp [lrange $l [expr {$o+1}] [expr {$f-1}]] set res [my _TraiteExp $exp] dict set DSel tmp${comp} $res set l [lreplace $l $o $f "tdict" tmp${comp}] incr comp } return $l } oo::define Structure method _Mult {a b op} { set res [list] foreach x $a y $b { if {$op eq "and"} { lappend res [expr {$x & $y}] } else { lappend res [expr {$x | $y}] } } return $res } oo::define Structure method _TraiteExp {exp} { set Lelt {} foreach e $exp { if {$e eq "and" || $e eq "or"} { lappend LHow $e lappend Lexp $Lelt set Lelt {} } else { lappend Lelt $e } } lappend Lexp $Lelt set init 0 set i 0 foreach x $Lexp { set RS [my _ExecSel $x] if {! $init} { set init 1 set tmp $RS } else { set tmp [my _Mult $RS $tmp [lindex $LHow $i]] incr i } } return $tmp } oo::define Structure method _ExecSel {sel} { my variable ResSel NomRes1l NmrRes ChnIdn EqResType set what [string tolower [lindex $sel 0]] switch -regexp -- $what { "chain" { set c [lindex $sel 1] foreach e [array names ResSel "$c,*"] { set ResSel($e) 1 } set res [list] foreach v [set ChnIdn] { if {$v eq $c} {set s 1} {set s 0} set n [llength [set NomRes1l($v)]] set res [concat $res [lrepeat $n $s]] } return $res } "resid" { foreach e [array names ResSel] { set ResSel($e) 0 } set v [lindex $sel 1] set Lx [split $v ","] foreach x $Lx { if {[regexp {:} $x]} { lappend Lix [split $x ":"] } else { lappend Lix [list $x $x] } } foreach v [set ChnIdn] { foreach e $Lix { lassign $e d f for {set i $d} {$i <= $f} {incr i} { set x "$v,$i" set ResSel($x) 1 } } } foreach c [set ChnIdn] { foreach r [set NmrRes($c)] { lappend res [set ResSel($c,$r)] } } return $res } "ala|cys|asp|glu|phe|gly|his|ile|lys|leu|met|asn|pro|gln|arg|ser|thr|val|trp|tyr" { # variable EqResType set AA [string toupper $what] set Li [dict get [set EqResType] $AA] foreach c [set ChnIdn] { foreach r [set NmrRes($c)] { if {"$c,$r" in $Li} {set s 1} {set s 0} lappend res $s } } return $res } "tdict" { variable DSel set key [lindex $sel 1] set res [dict get [set DSel] $key] return $res } default { puts "keyword not found : $what" return } } return } proc _CombleSSParCoil {{lss {} } molid chn} { variable SecStr variable NmrRes set LesRes [set NmrRes($chn)] set 1ResPDB [lindex $LesRes 0] set DResPDB [lindex $LesRes end] set df {} foreach s $lss { lassign $s Elt a z e Nm1 r Nm2 t q lappend df [list $Nm1 $Nm2] } if {$df == {}} { lappend df "Coil xxx xxx $chn $1ResPDB xxx $DResPDB xxx" return $df } set 1ResSS [lindex [lindex $df 0] 0] if {$1ResPDB - $1ResSS < 0} { lappend lss "Coil xxx xxx $chn $1ResPDB xxx [expr {$1ResSS-1}]" } set debc [_NextResDuPdb $name [lindex [lindex $df 0] 1] $chn $molid] foreach cpl [lrange $df 1 end] { set finc [_PreviousResDuPdb $name [lindex $cpl 0] $chn $molid] if {$finc-$debc >= 0} { lappend lss "Coil xxx xxx $chn $debc xxx $finc xxx" } set debc [_NextResDuPdb $name [lindex $cpl 1] $chn $molid] } if {$debc ne ""} { if {$DResPDB - $debc >= 0} { lappend lss "Coil xxx xxx $chn $debc xxx $DResPDB xxx" } } return [lsort -integer -index 4 $lss] } proc _NextResDuPdb {name res chn mol} { variable NmrRes set ires [lsearch [set NmrRes($chn)] $res] set deb [lindex [set NmrRes($chn)] [expr {$ires+1}]] return $deb } proc _PreviousResDuPdb {name res chn mol} { variable NmrRes set ires [lsearch [set NmrRes($chn)] $res] set fin [lindex [set NmrRes($chn)] [expr {$ires-1}]] return $fin } oo::define Structure method newObj {objname {init 0}} { my variable DictDesObjets db set objname [BonObjName $objname] if {[dict exists $DictDesObjets $objname]} { puts "Error ! Object >>$objname<< already exists !" return -1 } set ix [dict get $DictDesObjets Index] dict set DictDesObjets $objname $ix incr ix dict set DictDesObjets Index $ix my variable $objname dict set $objname OOn 1 dict set $objname globj 0 dict set $objname glList -1 dict set $objname glsel -1 dict set $objname glbox -1 dict set $objname FlagSrf 0 dict set $objname FlagRib 0 dict set $objname FlagCat 0 dict set $objname FlagAtm 0 dict set $objname FlagCPK 0 dict set $objname FlagPrl 0 dict set $objname FlagBox 0 dict set $objname Labels [list] if {$init} {return} set pdb [string range [self] 2 end] $db eval {begin transaction} set pkp [$db eval {select pk_pdb from pdb where name=$pdb}] $db eval "create table $objname as select * from objetinit where pk_pdb = $pkp" set idxname "idx_$objname" $db eval "create index $idxname on $objname (pk_obj, pk_residues, currsel, surface, ribbon, ribcol, catrace, cacol, atoms, atmcol, cpk, pearl, picked, label)" $db eval {commit} update set Lt [$db eval {select tbl_name from sqlite_master}] my select none return } oo::define Structure method CPK {obj} { set obj [BonObjName $obj] my variable ResSel ResCol $obj TypRes ChnIdn NmrRes db dict set $obj CPKatm [array names ResSel] dict set $obj CPKcol [array names ResCol] set pdb [string range [self] 2 end] set sdb $db $sdb eval {begin transaction} foreach c $ChnIdn { set l1 [list] set l0 [list] foreach t $TypRes($c) r $NmrRes($c) { if {$t eq "ligand"} { continue } set v [set ResSel($c,$r)] set Nn [format "%08s" $r] if {$v} { lappend l1 '$Nn' } else { lappend l0 '$Nn' } } set ix1 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l1 ,])"] $sdb eval "update $obj set atoms=1 where pk_residues in ([join $ix1 ,])" set ix0 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l0 ,])"] $sdb eval "update $obj set atoms=0 where pk_residues in ([join $ix0 ,])" } $sdb eval {commit} dict set $obj FlagCPK 1 return } oo::define Structure method atomes {obj} { set obj [BonObjName $obj] my variable ResSel ResCol $obj TypRes ChnIdn NmrRes db dict set $obj atomes [array names ResSel] dict set $obj atmcol [array names ResCol] set pdb [string range [self] 2 end] set sdb $db $sdb eval {begin transaction} foreach c $ChnIdn { set l1 [list] set l0 [list] foreach t $TypRes($c) r $NmrRes($c) { if {$t eq "ligand"} { continue } set v [set ResSel($c,$r)] set Nn [format "%08s" $r] if {$v} { lappend l1 '$Nn' } else { lappend l0 '$Nn' } } set ix1 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l1 ,])"] $sdb eval "update $obj set atoms=1 where pk_residues in ([join $ix1 ,])" set ix0 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l0 ,])"] $sdb eval "update $obj set atoms=0 where pk_residues in ([join $ix0 ,])" } $sdb eval {commit} dict set $obj FlagAtm 1 return } oo::define Structure method pearl {obj} { set obj [BonObjName $obj] my variable ResSel ResCol $obj TypRes ChnIdn NmrRes db dict set $obj pearl [array get ResSel] dict set $obj prlcol [array get ResCol] set pdb [string range [self] 2 end] set sdb $db $sdb eval {begin transaction} foreach c $ChnIdn { set l1 [list] set l0 [list] foreach t $TypRes($c) r $NmrRes($c) { if {$t eq "ligand"} { continue } set v [set ResSel($c,$r)] set Nn [format "%08s" $r] if {$v} { lappend l1 '$Nn' } else { lappend l0 '$Nn' } } set ix1 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l1 ,])"] $sdb eval "update $obj set pearl=1, ribbon=0 where pk_residues in ([join $ix1 ,])" set ix0 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l0 ,])"] $sdb eval "update $obj set pearl=0, ribbon=0 where pk_residues in ([join $ix0 ,])" } $sdb eval {commit} dict set $obj FlagPrl 1 return } oo::define Structure method catrace {obj} { set obj [BonObjName $obj] my variable ResSel ResCol $obj TypRes ChnIdn NmrRes db dict set $obj catrace [array get ResSel] dict set $obj cacol [array get ResCol] set pdb [string range [self] 2 end] set sdb $db $sdb eval {begin transaction} foreach c $ChnIdn { set l1 [list] set l0 [list] foreach t $TypRes($c) r $NmrRes($c) { if {$t eq "ligand"} { continue } set v [set ResSel($c,$r)] set Nn [format "%08s" $r] if {$v} { lappend l1 '$Nn' } else { lappend l0 '$Nn' } } set ix1 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l1 ,])"] $sdb eval "update $obj set catrace=1, ribbon=0 where pk_residues in ([join $ix1 ,])" set ix0 [$sdb eval "select r.pk_residues from chains as c, residues as r, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l0 ,])"] $sdb eval "update $obj set catrace=0, ribbon=0 where pk_residues in ([join $ix0 ,])" } $sdb eval {commit} dict set $obj FlagCat 1 return } oo::define Structure method ribbons {obj} { set obj [BonObjName $obj] my variable ResSel ResCol $obj TypRes ChnIdn NmrRes db dict set $obj ribbon [array get ResSel] dict set $obj ribcol [array get ResCol] set val [dict get [set $obj] ribbon] set pdb [string range [self] 2 end] set sdb $db $sdb eval {begin transaction} foreach c $ChnIdn { set l1 [list] ; set l0 [list] foreach t $TypRes($c) r $NmrRes($c) { if {$t eq "ligand"} {continue} set v [set ResSel($c,$r)] set Nn [format "%08s" $r] if {$v} { lappend l1 '$Nn' } else { lappend l0 '$Nn' } } set ix1 [$sdb eval "select r.pk_residues from residues as r, chains as c, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l1 ,])"] $sdb eval "update $obj set ribbon=1, catrace=0 where pk_residues in ([join $ix1 ,])" set ix0 [$sdb eval "select r.pk_residues from residues as r, chains as c, pdb as p where p.name='$pdb' and c.pk_pdb=p.pk_pdb and c.name='$c' and r.pk_chains=c.pk_chains and r.rnbr in ([join $l0 ,])"] $sdb eval "update $obj set ribbon=0, catrace=0 where pk_residues in ([join $ix0 ,])" } $sdb eval {commit} dict set $obj FlagRib 1 return } oo::define Structure method surface {obj} { set obj [BonObjName $obj] my variable $obj ChnIdn ResSel db dict set $obj surface [array get ResSel] $db eval "update $obj set surface = 1 where ribbon=1 or catrace=1 or atoms=1 or cpk=1 or pearl=1" dict set $obj FlagSrf 1 return } oo::define Structure method assignSelection {obj Lsel} { set obj [BonObjName $obj] my variable $obj ResSel ChnIdn db #global db set nom [string range [self] 2 end] array set TSel $Lsel $db eval {begin transaction} $db eval "drop table $obj" set pkp [$db eval {select pk_pdb from pdb where name=$nom}] $db eval "create table $obj as select * from objetinit where pk_pdb = $pkp" foreach chn $ChnIdn { unset -nocomplain Rib Atm Cpk Prl Cap foreach t {Rib Atm Cpk Prl Cap} { set ${t}(toto) "" } foreach e [array names TSel "$chn,*"] { lassign [set TSel($e)] n type col # grab all colors lappend Lcols $col set Nn [format "%08s" $n] switch $type { 0 { # None } 1 { # Atoms lappend Atm($col) '$Nn' } 2 { # Ca/P trace lappend Cap($col) '$Nn' } 3 { # Ribbon lappend Rib($col) '$Nn' } 4 { # Ribbon + Atoms lappend Rib($col) '$Nn' lappend Atm($col) '$Nn' } 5 { # Ribbon + CPK lappend Rib($col) '$Nn' lappend Cpk($col) '$Nn' } 6 { # Pearls lappend Prl($col) '$Nn' } 7 { # CPK lappend Cpk($col) '$Nn' } } } set Lcols [lsort -unique $Lcols] foreach col $Lcols { # update table for ribbon if {[info exists Rib($col)]} { dict set $obj FlagRib 1 set Lpkr [$db eval "select r.pk_residues from residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.rnbr in ([join [set Rib($col)] ,])"] $db eval "update $obj set ribcol='$col', ribbon=1 where pk_residues in ([join $Lpkr ,])" } # update table for Ca/P trace if {[info exists Cap($col)]} { dict set $obj FlagCat 1 set Lpkr [$db eval "select r.pk_residues from residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.rnbr in ([join [set Cap($col)] ,])"] $db eval "update $obj set cacol='$col', catrace=1 where pk_residues in ([join $Lpkr ,])" } # update table for Atoms if {[info exists Atm($col)]} { dict set $obj FlagAtm 1 set Lpkr [$db eval "select r.pk_residues from residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.rnbr in ([join [set Atm($col)] ,])"] $db eval "update $obj set atmcol='$col', atoms=1 where pk_residues in ([join $Lpkr ,])" } # update table for CPK if {[info exists Cpk] && [info exists Cpk($col)]} { dict set $obj FlagCPK 1 set Lpkr [$db eval "select r.pk_residues from residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.rnbr in ([join [set Cpk($col)] ,])"] $db eval "update $obj set atmcol='$col', cpk=1 where pk_residues in ([join $Lpkr ,])" } # update table for Pearl if {[info exists Prl($col)]} { dict set $obj FlagPrl 1 set Lpkr [$db eval "select r.pk_residues from residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.rnbr in ([join [set Prl($col)] ,]) order by r.pk_residues"] $db eval "update $obj set cacol='$col', pearl=1 where pk_residues in ([join $Lpkr ,])" } } } $db eval "create index idx_$obj on $obj (pk_obj, pk_residues, currsel, surface, ribbon, ribcol, catrace, cacol, atoms, atmcol, cpk, pearl, picked, label)" $db eval {commit} #$db eval {vacuum} return } oo::define Structure method editObject {obj} { set obj [BonObjName $obj] my variable $obj ChnIdn db global Defauts #global db set nom [string range [self] 2 end] $db eval {begin transaction} foreach chn $ChnIdn { set Lv [$db eval "select r.rnbr, o.ribbon, o.ribcol, o.catrace, o.cacol, o.atoms, o.atmcol, o.cpk, o.pearl from $obj as o, atoms as a, residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type != 'ligand' and a.pk_residues = r.pk_residues and (a.aname = ' CA ' or a.aname = ' P ') and o.pk_obj = a.pk_atoms"] foreach {rn rb rc ca cc at ac cp pr} $Lv { if {$rc eq $Defauts(CoulVariable)} { set rc couldefond } if {$ac eq $Defauts(CoulVariable)} { set ac couldefond } if {$cc eq $Defauts(CoulVariable)} { set rc couldefond } set rn [string trimleft $rn 0] if {$rb && $at} { set type 4 set col $rc } elseif {$rb && $cp} { set type 5 set col $rc } elseif {$at} { set type 1 set col $ac } elseif {$ca} { set type 2 set col $cc } elseif {$rb} { set type 3 set col $rc } elseif {$pr} { set type 6 set col $cc } elseif {$cp} { set type 7 set col $ac } else { set type 0 set col couldefond } if {[llength $col] > 1} { set col [CouleurDeci2Hexa $col] } lappend Lres "${chn},$rn" [list $rn $type $col] } } $db eval {commit} return $Lres } oo::define Structure method deleteObjects {{oIn ""}} { my variable DictDesObjets db if {! [info exists DictDesObjets]} { return 0 } if {$oIn eq ""} { set Lo [my _ListeObjets] } else { set Lo $oIn } $db eval {begin transaction} foreach o $Lo { $db eval "drop table $o" dict unset DictDesObjets $o my _dellist $o } $db eval {commit} if {$oIn eq ""} { dict set DictDesObjets Index 0 } return } oo::define Structure method _dellist {obj} { set obj [BonObjName $obj] my variable $obj # display list for objects foreach list [lreverse [dict get [set $obj] glList]] { if {$list != -1 && [glIsList $list]} { glDeleteLists $list 1 } } # display list for selection set list [dict get [set $obj] glsel] if {$list != -1 && [glIsList $list]} { glDeleteLists $list 1 } dict set $obj glList -1 dict set $obj glsel -1 dict set $obj globj 0 return } oo::define Structure method GLListDe {type} { set obj "${type}[string range [self] 2 end]" my variable $obj return [dict get [set $obj] ribobj] } oo::define Structure method _ListeObjets {} { my variable DictDesObjets set l [dict keys $DictDesObjets] set Le {} foreach e $l { if {$e eq "Index"} {continue} lappend Le $e } return $Le } oo::define Structure method _EtatDeObjet {obj} { set obj [BonObjName $obj] my variable $obj return [dict get [set $obj] OOn] } oo::define Structure method ObjetOff {obj} { set obj [BonObjName $obj] my variable $obj dict set $obj OOn 0 return } oo::define Structure method ObjetOn {obj} { set obj [BonObjName $obj] my variable $obj dict set $obj OOn 1 return } oo::define Structure method Ind2Obj i { my variable DictDesObjets lassign [dict filter $DictDesObjets value $i] obj i return $obj } oo::define Structure method ClearPicked {} { set Lo [my _ListeObjets] my variable db {*}$Lo $db eval {begin transaction} foreach obj $Lo { $db eval "update $obj set picked=0" dict set $obj Labels [list] } $db eval {commit} return } oo::define Structure method AddPicked {obj v} { my variable db set obj [BonObjName $obj] $db eval "update $obj set picked=1 where pk_obj=$v" my _Labels $obj return } oo::define Structure method _drawCPK {obj} { my variable $obj ChnIdn if {! [dict get [set $obj] FlagCPK]} {return} set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricNormals $QObj GLU_SMOOTH foreach chn $ChnIdn { set La [my _AtomesDuCpk $obj $chn] if {$La == {}} {continue} foreach {x y z na col} $La { if {$col eq "undefined"} { set vcol [CouleurDeAtome $na] } else { set vcol [RGBDeLaTkCol $col] } set rad [RayonDeAtome $na] glPushMatrix glTranslatef $x $y $z glColor4f {*}$vcol 1.0 gluSphere $QObj $rad 32 32 glPopMatrix } } gluDeleteQuadric $QObj return } oo::define Structure method _drawAtoms obj { my variable $obj if {! [dict get [set $obj] FlagAtm]} {return} glLineWidth 2.0 foreach Lat [dict get [set $obj] atmvec] { lassign $Lat tag type Lx La Ln Lan # on ne trace pas la chaine principale si # on est en ribbon ou catrace (flag cp) if {$tag eq "Rib"} { #use_light set cp 0 set cyl 1 set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricNormals $QObj GLU_SMOOTH } elseif {$tag eq "Cat"} { set cp 0 set cyl 0 set QObj "" } else { set cp 1 set cyl 0 set QObj "" } switch $type { "Protein" { DrawAtomsProtein $cp $cyl $QObj $Lx $La $Ln } "Nucleic" { DrawAtomsNucleic $cp $cyl $QObj $Lx $La $Ln } "ligand" { DrawAtomsLigand $cp $cyl $QObj $Lx $La $Ln } } if {$tag eq "Rib"} { gluDeleteQuadric $QObj } } return } oo::define Structure method _drawSurface obj { my variable $obj db if {! [dict get [set $obj] FlagSrf]} {return} puts "\nSurface de [self]" glLightModelfv GL_LIGHT_MODEL_TWO_SIDE 0.0 glLightModeli GL_LIGHT_MODEL_COLOR_CONTROL $::GL_SEPARATE_SPECULAR_COLOR glMaterialfv GL_FRONT_AND_BACK GL_AMBIENT {0.0 0.0 0.0 0.0} glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glEnable GL_CULL_FACE glCullFace GL_BACK glPolygonMode GL_FRONT_AND_BACK GL_FILL glHint GL_PERSPECTIVE_CORRECTION_HINT $::GL_NICEST glEnable GL_TEXTURE_2D #set FileTex "gold.jpg" #set FileTex "glass.jpg" set FileTex [file join $::OrdEtcDir fond.png] #lassign [Bidon_LoadImage $FileTex] imgData imgW imgH type puts "\nFileTex $FileTex" catch {image create photo phImg -file $FileTex} Msg if {$Msg ne "phImg"} { puts "\n==== Failed :\n$Msg" set FileTex [file join $::OrdEtcDir fond.gif] catch {image create photo phImg -file $FileTex} Msg if {$Msg ne "phImg"} { puts "\n==== Failed :\n$Msg" } } set imgH [image height phImg] set imgW [image width phImg] set imgData [tcl3dVectorFromPhoto phImg 1] image delete phImg set latex [tcl3dVector GLuint 1] glGenTextures 1 $latex glBindTexture GL_TEXTURE_2D [$latex get 0] gluBuild2DMipmaps GL_TEXTURE_2D $::GL_ALPHA $imgW $imgH $::GL_ALPHA GL_UNSIGNED_BYTE $imgData $imgData delete glEnable GL_TEXTURE_GEN_S glEnable GL_TEXTURE_GEN_T glTexEnvi GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE $::GL_REPLACE glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER $::GL_LINEAR glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER $::GL_LINEAR glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_S $::GL_REPEAT glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_T $::GL_REPEAT glTexGeni GL_S GL_TEXTURE_GEN_MODE $::GL_SPHERE_MAP glTexGeni GL_T GL_TEXTURE_GEN_MODE $::GL_SPHERE_MAP #glMaterialfv GL_BACK GL_AMBIENT_AND_DIFFUSE {0.0 0.0 0.0 1.0} # Recupere atomes contribuant a la surface set Lva [list] $db eval "select a.x, a.y, a.z, a.na from atoms as a, $obj as o where a.pk_atoms = o.pk_obj and o.surface=1" {lappend Lva [list $x $y $z $na 1]} set Lva [lsort -unique $Lva] #lassign [tsurf -sample 2 -expand 2 -contract 2 -smooth -connolly -filter 13 $Lva] Lv Ln #lassign [tsurf -sample 2 -expand 2 -contract 2 -smooth -connolly $Lva] Lv Ln lassign [tsurf -expand 2 -contract 2 -smooth -connolly $Lva] Lv Ln puts "Surface Computation done ..." # 1 glcol per vertex set Lco [list] for {set i 0} {$i<[llength $Lv]/3} {incr i} { lappend Lco 0.2 0.2 0.05 0.05 } dict set $obj globj 1 if {1} { set Vec [tcl3dVectorFromList GLfloat $Lv] set Nml [tcl3dVectorFromList GLfloat $Ln] set Col [tcl3dVectorFromList GLfloat $Lco] glEnableClientState GL_VERTEX_ARRAY glEnableClientState GL_COLOR_ARRAY glEnableClientState GL_NORMAL_ARRAY glVertexPointer 3 GL_FLOAT 0 $Vec glColorPointer 4 GL_FLOAT 0 $Col glNormalPointer GL_FLOAT 0 $Nml glDrawArrays GL_TRIANGLES 0 [expr {[llength $Lv]/3}] glDisableClientState GL_VERTEX_ARRAY glDisableClientState GL_COLOR_ARRAY glDisableClientState GL_NORMAL_ARRAY } else { set Lvert [list] set Lnorm [list] foreach {x y z} $Lv {nx ny nz} $Ln { lappend Lvert [list $x $y $z] lappend Lnorm [list $nx $ny $nz] } set Lcol [list] set Lcol [lrepeat [llength $Lvert] [list 0.2 0.2 0.05 0.05]] foreach {v1 v2 v3} $Lvert {n1 n2 n3} $Lnorm col $Lcol { glBegin GL_TRIANGLES glColor4fv $col glNormal3fv $n1 glVertex3fv $v1 glNormal3fv $n2 glVertex3fv $v2 glNormal3fv $n3 glVertex3fv $v3 glEnd } } glLightModeli GL_LIGHT_MODEL_COLOR_CONTROL $::GL_SINGLE_COLOR glDisable GL_TEXTURE_GEN_S glDisable GL_TEXTURE_GEN_T glDisable GL_TEXTURE_2D glDisable GL_BLEND glDisable GL_CULL_FACE glLightModelfv GL_LIGHT_MODEL_TWO_SIDE 1.0 return } oo::define Structure method _drawRibbon obj { my variable $obj if {! [dict get [set $obj] FlagRib]} {return} set ListLesVecs [dict get [set $obj] ribvec] if {[lindex $ListLesVecs 0] eq "Nucleic" || [lindex $ListLesVecs 0] eq "Protein"} { # Only one ribbon set ListLesVecs [list $LesVecs] } foreach LesVecs $ListLesVecs { if {$LesVecs == {}} {continue} if {0} { DebugRib $LesVecs return } # cas nucleic : #glFrontFace GL_CW if {[lindex $LesVecs 0] eq "Nucleic"} { DrawRibbonNucleic [lindex $LesVecs 1] [lindex $LesVecs 2] } else { DrawRibbonProtein [lindex $LesVecs 1] } #glFrontFace GL_CCW } if {[dict get [set $obj] FlagBox]} { set chn [string index $obj end] my _drawBoite $obj $chn } return } oo::define Structure method _drawCatrace obj { my variable $obj ChnIdn if {! [dict get [set $obj] FlagCat]} {return} foreach chn $ChnIdn { set LLa [my _AtomesDuCaTrace $obj $chn] if {$LLa == 0} {continue} foreach Lcc $LLa { set C1 [lrange $Lcc 0 end-1] set C2 [lrange $Lcc 1 end] foreach e1 $C1 e2 $C2 { set v1 [lrange $e1 0 2] set c1 [lindex $e1 3] set v2 [lrange $e2 0 2] set c2 [lindex $e2 3] TraceLiaison "" $v1 $v2 $c1 $c2 0 } } } return } oo::define Structure method _drawPearl {obj} { my variable $obj ChnIdn TypChn if {! [dict get [set $obj] FlagPrl]} {return} set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricNormals $QObj GLU_SMOOTH foreach chn $ChnIdn { if {[set TypChn($chn)] eq "Protein"} { set Rad 2. } else { set Rad 4. } set La [my _AtomesDuPearl $obj $chn] if {$La == {}} {continue} foreach {x y z col} $La { set vcol [RGBDeLaTkCol $col] glPushMatrix glTranslatef $x $y $z glColor4f {*}$vcol 1.0 gluSphere $QObj $Rad 32 32 glPopMatrix } } gluDeleteQuadric $QObj return } oo::define Structure method _SetupPicking {obj} { set obj [BonObjName $obj] my variable $obj ChnIdn DictDesObjets set Lres [list] foreach chn $ChnIdn { set La [my _AtomesToPick $obj $chn] if {$La ne {} } { lappend Lres {*}$La } } return $Lres } oo::define Structure method ResidueCDM {n c} { global db set nom [string range [self] 2 end] set rn [format "%08s" $n] $db eval {begin transaction} set La [$db eval {select a.x, a.y, a.z from atoms as a, residues as r, chains as c, pdb as p where p.name = $nom and c.pk_pdb=p.pk_pdb and c.name=$c and r.pk_chains=c.pk_chains and r.rnbr=$rn and a.pk_residues=r.pk_residues}] set Ln [$db eval {select min(a.x), min(a.y), min(a.z) from atoms as a, residues as r, chains as c, pdb as p where p.name = $nom and c.pk_pdb=p.pk_pdb and c.name=$c and r.pk_chains=c.pk_chains and r.rnbr=$rn and a.pk_residues=r.pk_residues}] set Lx [$db eval {select max(a.x), max(a.y), max(a.z) from atoms as a, residues as r, chains as c, pdb as p where p.name = $nom and c.pk_pdb=p.pk_pdb and c.name=$c and r.pk_chains=c.pk_chains and r.rnbr=$rn and a.pk_residues=r.pk_residues}] $db eval {commit} set na 0 set mx 0. ; set my 0. ; set mz 0. foreach {x y z} $La { set mx [expr {$mx + $x}] set my [expr {$my + $y}] set mz [expr {$mz + $z}] incr na } set mx [expr {$mx/$na}] set my [expr {$my/$na}] set mz [expr {$mz/$na}] lassign $Ln xmin ymin zmin lassign $Lx xmax ymax zmax set r [expr {sqrt(($xmax-$xmin)**2 + ($ymax-$ymin)**2 + ($zmax-$zmin)**2)/2.}] return [list $mx $my $mz $r] } oo::define Structure method AtomXYZ {v} { my variable db return [$db eval {select x, y, z from atoms where pk_atoms=$v}] } oo::define Structure method _ClearIDs {} { foreach o [my _ListeObjets] { my _ClearObjIDs $o } return } oo::define Structure method _ClearObjIDs {obj} { my variable db set obj [BonObjName $obj] $db eval "update $obj set picked=0" return } oo::define Structure method _mapfeat {obj f la2} { my variable db global TabSF Defauts StrucAVoir set obj [BonObjName $obj] my variable $obj if {$f eq ""} {return} set nom [string range [self] 2 end] if {$f eq "None" && ! $la2} { set c [set Defauts(CoulVariable)] $db eval {begin transaction} $db eval "update $obj set atmcol='$c', ribcol='$c', cacol='$c'" $db eval {commit} return } set i [lsearch -regexp $StrucAVoir $nom] set nomf [BonAccess [lindex $StrucAVoir $i]] if {! [info exists TabSF($nomf,$f)]} {return} $db eval {begin transaction} foreach e [set TabSF(${nomf},$f)] { DecortiqueUneFeature $e dg fg col score note set dg [DonnePosGS $nomf $dg] set fg [DonnePosGS $nomf $fg] set fdeb [format "%08s" $dg] set ffin [format "%08s" $fg] switch -regexp -- $f { {^Cons} { if {$col eq "black"} { set c white } else { set c [CouleurO2Ordali $col] } } "SS-Cons" { set c $note } default { set c [CouleurO2Ordali $col] } } set Li [$db eval "select o.pk_obj from $obj as o, pdb as p, residues as r where (r.rnbr >= '$fdeb' and r.rnbr <= '$ffin') and o.pk_residues=r.pk_residues and o.pk_pdb=p.pk_pdb and p.name='$nom'"] $db eval "update $obj set atmcol='$c', ribcol='$c', cacol='$c' where pk_obj in ([join $Li ,])" } $db eval {commit} return } oo::define Structure method AllLabels {} { set Res [list] set Lo [my _ListeObjets] my variable {*}$Lo foreach o $Lo { if {[my _EtatDeObjet $o]} { set l [dict get [set $o] Labels] if {$l != {}} { lappend Res {*}$l } } } return $Res } oo::define Structure method _Labels {obj} { my variable $obj db dict set $obj Labels [$db eval "select a.x, a.y, a.z, o.label from atoms as a, $obj as o where a.pk_atoms=o.pk_obj and o.picked=1"] } oo::define Structure method display {} { set LObj [my _ListeObjets] my variable DictDesObjets {*}$LObj db foreach obj $LObj { if {! [my _EtatDeObjet $obj]} {continue} switch [dict get [set $obj] globj] { 1 { glCallList [dict get [set $obj] glList] } 2 { glDrawArrays GL_TRIANGLES 0 [llength [dict get [set $obj] Ltrig]] } 0 { set list [glGenLists 1] dict set $obj globj 1 dict set $obj glList $list glNewList $list GL_COMPILE_AND_EXECUTE $db eval {begin transaction} my _drawRibbon $obj my _drawCatrace $obj my _drawPearl $obj my _drawAtoms $obj my _drawCPK $obj my _drawSurface $obj #my _drawboite $obj $chn glEndList $db eval {commit} #glCallList [dict get [set $obj] glList] } } } return } oo::define Structure method render {obj} { set obj [BonObjName $obj] my variable $obj DictDesObjets TypChn ChnIdn db global HashPDB set nom [string range [self] 2 end] set mx [set HashPDB($nom)] set ox [dict get $DictDesObjets $obj] set tag [format "%02d%02d" $mx $ox] $db eval {begin transaction} # Trace le RIBBON if {[dict get [set $obj] FlagRib]} { set LesVecs [list] foreach chn $ChnIdn { set ListeLat [my _AtomesDuRibbon $obj $chn] if {$ListeLat == 0} {continue} foreach Lat $ListeLat { lassign $Lat Lca Lcol Lc Lo lappend LesVecs [CheminRibbon $TypChn($chn) $Lca $Lcol $Lc $Lo] } } dict set $obj ribvec $LesVecs # Pour Picking # Faut cle atmvec, avec chaine principale set Lv [$db eval "select r.pk_residues, r.rname3l, a.x, a.y, a.z, a.aname, a.pk_atoms from residues as r, atoms as a, $obj as o, pdb as p where o.ribbon=1 and r.pk_residues=a.pk_residues and o.pk_obj=a.pk_atoms and r.type = 'Protein' and r.pk_pdb=p.pk_pdb and p.name='$nom' and a.aname=' CA ' order by a.pk_atoms"] set first 1 set LX [list] ; set LA [list] set Li [list] set ncou [lindex $Lv 0] set rcou [lindex $Lv 1] set Lxyz {} ; set Lnm {} ; set Lli {} foreach {n r x y z a i} $Lv { if {$n != $ncou} { lappend Ln $rcou lappend LX $Lxyz lappend LA $Lnm lappend Li $Lli set Lxyz {} set Lnm {} set Lli {} set rcou $r set ncou $n } set xyz [list $x $y $z] lappend Lxyz $xyz lappend Lli [format "%d%02d%02d" $i $mx $ox] lappend Lnm $a } lappend Ln $rcou lappend LX $Lxyz lappend LA $Lnm lappend Li $Lli #dict set $obj atmvec [list $Li $LX $LA $Ln] } if {[dict get [set $obj] FlagCat]} { foreach chn $ChnIdn { set Lat [my _AtomesDuCaTrace $obj $chn] if {$Lat == 0} {continue} lassign $Lat Li Lca Lcol dict lappend $obj catvec [list $Li $Lca] dict lappend $obj catcol $Lcol } } if {[dict get [set $obj] FlagAtm] || [dict get [set $obj] FlagCPK] || [dict get [set $obj] FlagSrf]} { dict set $obj atmvec [list] foreach chn $ChnIdn { set Lat [my _AtomesDuAtm $obj $chn] if {$Lat == {}} {continue} if {[lindex $Lat 0] eq "Rib" || [lindex $Lat 0] eq "Cat" || [lindex $Lat 0] eq "Atm"} { dict lappend $obj atmvec $Lat } else { dict lappend $obj atmvec {*}$Lat } } } $db eval {commit} return } oo::define Structure method save {c d f {lgd 1} {file ""}} { #global db my variable db if {$file eq ""} { set file [DemandeEtSauveFichier pdb] if {$file eq ""} {return} } set Lres [list] set pdb [string range [self] 2 end] if {$c ne "all"} { set Lc $c } else { set Lc [my _chains] } if {$d ne "all"} { set deb [format "%08s" $d] set fin [format "%08s" $f] set Ar "and r.rnbr >= '$deb' and r.rnbr <= '$fin'" } else { set Ar "" } $db eval {begin transaction} set header [$db eval {select header from pdb where name=$pdb}] if {$header != {}} { lappend Lres {*}[lindex $header 0] } set i 1 foreach c $Lc { # Traite polymer set Lv [$db eval "select a.aname, r.rname3l, r.rnbr, a.x, a.y, a.z, a.b, a.q from atoms as a, residues as r, chains as c, pdb as p where p.name = '$pdb' and c.pk_pdb = p.pk_pdb and c.name = '$c' and r.pk_chains = c.pk_chains and r.type != 'ligand' and a.pk_residues= r.pk_residues $Ar"] foreach {an rn rr x y z b q} $Lv { set rr [string trimleft $rr 0] if {$rr eq ""} {set rr 0} set an [string map {"''" "'"} $an] lappend Lres [format "ATOM %5d %4s %3s %1s%4s %8.3f%8.3f%8.3f%6.2f%6.2f" $i $an $rn $c $rr $x $y $z $q $b] incr i } if {[llength $Lc] > 1} { lappend Lres "TER " } # Traite ligand if {$lgd} { set Lv [$db eval "select a.aname, r.rname3l, r.rnbr, a.x, a.y, a.z, a.b, a.q from atoms as a, residues as r, chains as c, pdb as p where p.name = '$pdb' and c.pk_pdb = p.pk_pdb and r.pk_chains = c.pk_chains and c.name = '$c' and r.type = 'ligand' and a.pk_residues = r.pk_residues $Ar"] if {$Lv != {}} { foreach {an rn rr x y z b q} $Lv { set rr [string trimleft $rr 0] set an [string map [list "''" "'"] $an] lappend Lres [format "HETATM%5d %4s %3s %1s%4s %8.3f%8.3f%8.3f%6.2f%6.2f" $i $an $rn $c $rr $x $y $z $q $b] incr i } if {[llength $Lc] > 1} { lappend Lres "TER " } } } } $db eval {commit} lappend Lres "END " if {$file eq "ListeEnRetour"} { return $Lres } else { set f [open $file w] puts $f [join $Lres \n] close $f } return } proc Tag2MolObjAtm {i} { set x [expr {[string length $i]-4}] scan $i "%${x}d%02d%02d" atm iobj imol set mol [lindex $::StrucAVoir $imol] set mol "::[DonneIdDeAccessPDB $mol]" set obj [lindex [$mol _ListeObjets] $iobj] return [list $mol $obj $atm] } oo::define Structure method GiveVar {n} { my variable $n return [set $n] } oo::define Structure method SetVar {n v} { my variable $n set $n $v return } oo::define Structure method AddVar {n v} { my variable $n set $n $v return } oo::define Structure method _AtomesDuAtm {obj chn} { my variable TypChn $obj db set nom [string range [self] 2 end] set rtype $TypChn($chn) # if FlagRib or FlagCat are set, then some # Atoms may be set with ribbons ... if {$rtype eq "Protein"} { set prib "and (a.anom in (' N ', ' CA ',' C ',' O ')) " set pnrib "and (a.aname not in (' N ', ' CA ',' C ',' O ')) " set pcat "and (a.aname not in (' N ', ' CA ',' C ',' O ')) " set pca "and a.aname = ' CA '" } else { set prib "and (a.aname in (' P ', ' OP1',' OP2',' OP3',' O5''',' C5''',' C4''',' C3''',' C2''',' O2''',' C1''',' O4''',' O3''')) " set pnrib "and (a.aname not in (' P ', ' OP1',' OP2',' OP3',' O5''',' C5''',' C4''',' C3''',' C2''',' O2''',' C1''',' O4''',' O3''')) " set pca "and a.aname = ' P '" } set Lres [list] # pass for Ca-Trace/ribbon if {[dict get [set $obj] FlagCat] || [dict get [set $obj] FlagRib]} { set tag Cat set Lv [$db eval "select r.pk_residues, r.rname3l, a.x, a.y, a.z, a.na, a.aname, a.pk_atoms from residues as r, atoms as a, $obj as o, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and o.pk_obj = a.pk_atoms and o.atoms = 1 and (o.catrace = 1 or o.ribbon = 1) $pnrib order by a.pk_atoms"] if {$Lv != {}} { set Ln [list] ; set Lan [list] set LX [list] ; set LA [list] set Lna {} set first 1 set Lxyz {} ; set Lnm {} set ncou [lindex $Lv 0] set rcou [lindex $Lv 1] foreach {n r x y z na a i} $Lv { if {$n != $ncou} { lappend Ln $rcou lappend LX $Lxyz lappend LA $Lnm lappend Lan $Lna set Lxyz {} set Lnm {} set Lna {} set rcou $r set ncou $n } lappend Lxyz [list $x $y $z] lappend Lnm $a lappend Lna $na } lappend Ln $rcou lappend LX $Lxyz lappend LA $Lnm lappend Lan $Lna lappend Lres [list $tag $rtype $LX $LA $Ln $Lan] } } # pass for full all-atoms set tag Atm set Lv [$db eval "select r.pk_residues, r.rname3l, a.x, a.y, a.z, a.na, a.aname, a.pk_atoms from residues as r, atoms as a, $obj as o, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and o.pk_obj = a.pk_atoms and o.atoms = 1 and o.ribbon = 0 and o.catrace = 0 order by o.pk_obj"] if {$Lv != {}} { set Ln [list] ; set Lan [list] set LX [list] ; set LA [list] set Li [list] ; set Lna {} set first 1 set Lxyz {} ; set Lnm {} set ncou [lindex $Lv 0] set rcou [lindex $Lv 1] foreach {n r x y z na a i} $Lv { if {$n != $ncou} { lappend Ln $rcou lappend LX $Lxyz lappend LA $Lnm lappend Lan $Lna set Lxyz {} set Lnm {} set Lna {} set rcou $r set ncou $n } lappend Lxyz [list $x $y $z] lappend Lnm $a lappend Lna $na } lappend Ln $rcou lappend LX $Lxyz lappend LA $Lnm lappend Lan $Lna lappend Lres [list $tag $rtype $LX $LA $Ln $Lan] } return $Lres } oo::define Structure method _AtomesToPick {obj chn} { my variable TypChn $obj set nom [string range [self] 2 end] set rtype $TypChn($chn) # if FlagRib or FlagCat are set, then some # Atoms may be set with ribbons ... if {$rtype eq "Protein"} { set prib "and (a.aname in (' N ', ' CA ',' C ',' O ')) " set pnrib "and (a.aname not in (' N ', ' CA ',' C ',' O ')) " set pcat "and (a.aname not in (' N ', ' CA ',' C ',' O ')) " set pca "and a.aname = ' CA '" } else { set prib "and (a.aname in (' P ', ' OP1',' OP2',' OP3',' O5''',' C5''',' C4''',' C3''',' C2''',' O2''',' C1''',' O4''',' O3''')) " set pnrib "and (a.aname not in (' P ', ' OP1',' OP2',' OP3',' O5''',' C5''',' C4''',' C3''',' C2''',' O2''',' C1''',' O4''',' O3''')) " set pca "and a.aname = ' P '" } set Lres [list] # three passes : # first for ribbon main-chain if {[dict get [set $obj] FlagRib]} { set tag Rib set Lv [$db eval "select a.x, a.y, a.z, a.pk_atoms from residues as r, atoms as a, $obj as o, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and o.pk_obj = a.pk_atoms and o.ribbon = 1 and o.atoms = 0 $prib order by o.pk_obj"] if {[llength $Lv] > 3} { set Lres $Lv } } # pass for Ca-Trace if {[dict get [set $obj] FlagCat]} { set tag Cat set Lv [$db eval "select a.x, a.y, a.z, a.pk_atoms from residues as r, atoms as a, $obj as o, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and o.pk_obj = a.pk_atoms and o.catrace = 1 and o.atoms = 0 $pca order by a.pk_atoms"] if {[llength $Lv] > 3} { lappend Lres {*}$Lv } } # pass for Cat/ribbon + atoms if {[dict get [set $obj] FlagCat] || [dict get [set $obj] FlagRib]} { set tag Atm set Lv [$db eval "select a.x, a.y, a.z, a.pk_atoms from residues as r, atoms as a, $obj as o, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and o.pk_obj = a.pk_atoms and o.atoms = 1 and (o.ribbon = 1 or o.catrace = 1) $pnrib order by o.pk_obj"] if {[llength $Lv] > 3} { lappend Lres {*}$Lv } } # pass for full all-atoms set tag Atm set Lv [$db eval "select a.x, a.y, a.z, a.pk_atoms from residues as r, atoms as a, $obj as o, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and o.pk_obj = a.pk_atoms and (o.atoms = 1 or o.cpk = 1 or o.pearl = 1) and o.ribbon = 0 and o.catrace = 0 order by o.pk_obj"] if {[llength $Lv] > 3} { lappend Lres {*}$Lv } return $Lres } oo::define Structure method _AtomesDuCaTrace {obj chn} { my variable TypChn db set nom [string range [self] 2 end] set rtype $TypChn($chn) if {$TypChn($chn) eq "Protein"} { set caatm " CA " } elseif {$TypChn($chn) eq "Nucleic"} { set caatm " P " } else { return 0 } set Lv [$db eval "select o.cacol, a.x, a.y, a.z from atoms as a, $obj as o, residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and a.aname = '$caatm' and o.pk_obj = a.pk_atoms and o.catrace = 1 order by o.pk_obj"] # pas de catrace if {$Lv == {}} {return 0} set Lcac [list] foreach {c x y z} $Lv { lappend Lcac [list $x $y $z [RGBDeLaTkCol $c]] } set Lcac [TestCoupeMainChain $rtype $Lcac] return $Lcac } oo::define Structure method _AtomesDuPearl {obj chn} { my variable TypChn db set nom [string range [self] 2 end] set rtype $TypChn($chn) if {$TypChn($chn) eq "Protein"} { set caatm " CA " } elseif {$TypChn($chn) eq "Nucleic"} { set caatm " P " } set Lcac [$db eval "select a.x, a.y, a.z, o.cacol from atoms as a, $obj as o, residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and a.aname = '$caatm' and o.pk_obj = a.pk_atoms and o.pearl = 1 order by o.pk_obj"] return $Lcac } oo::define Structure method _AtomesDuCpk {obj chn} { my variable TypChn $obj db set nom [string range [self] 2 end] # must make two pass : # - if ribbon set on the residue no main chain # - if ribbon not set , send all atoms if {[set TypChn($chn)] eq "Protein"} { set exp " and (a.aname != ' CA ' and a.aname != ' C ' and a.aname != ' N ' and a.aname != ' O ') " } else { set exp "" } set La [$db eval "select a.x, a.y, a.z, a.na, o.atmcol from pdb as p, chains as c, atoms as a, $obj as o where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and a.pk_chains = c.pk_chains and o.pk_obj = a.pk_atoms and o.cpk = 1 order by pk_obj"] lappend La {*}[$db eval "select a.x, a.y, a.z, a.na, o.atmcol from pdb as p, chains as c, residues as r, atoms as a, $obj as o where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and a.pk_residues = r.pk_residues and o.pk_obj = a.pk_atoms and o.cpk = 1 and o.ribbon = 1 $exp order by pk_obj"] puts ">>$La<<" return $La } oo::define Structure method _AtomesDuRibbon {obj chn} { my variable TypChn db set nom [string range [self] 2 end] set rtype $TypChn($chn) if {$rtype eq "Protein"} { set caatm " CA " } elseif {$rtype eq "Nucleic"} { set caatm " P " } else { return 0 } set iLca [list] ; set iLc [list] ; set iLo [list] ; set iLcol [list] set Lca [list] ; set Lc [list] ; set Lo [list] ; set Lcol [list] set Lpca [list] ; set Lpc [list] ; set Lpo [list] set tmp [$db eval "select distinct r.pk_residues, a.x, a.y, a.z, o.ribcol from atoms as a, $obj as o, residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = '$rtype' and a.pk_residues = r.pk_residues and a.aname = '$caatm' and o.pk_obj = a.pk_atoms and o.ribbon = 1 order by a.pk_atoms"] # pas de ribbon ! if {$tmp == {}} { return 0 } foreach {p x y z c} $tmp { lappend Lpca $p lappend iLcol [RGBDeLaTkCol $c] lappend iLca [list $x $y $z] } if {$obj eq "obj_tRNA"} { puts "tRNA nb P : [llength $Lca]" } if {$rtype eq "Protein"} { set tmp [$db eval "select distinct r.pk_residues, a.x,a.y,a.z from atoms as a, $obj as o, residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = 'Protein' and a.pk_residues = r.pk_residues and a.aname = ' C ' and o.pk_obj = a.pk_atoms and o.ribbon = 1 order by a.pk_atoms"] foreach {p x y z} $tmp { lappend Lpc $p lappend iLc [list $x $y $z] } set tmp [$db eval "select r.pk_residues, a.x,a.y,a.z from atoms as a, $obj as o, residues as r, chains as c, pdb as p where p.name = '$nom' and c.pk_pdb = p.pk_pdb and c.name = '$chn' and r.pk_chains = c.pk_chains and r.type = 'Protein' and a.pk_residues = r.pk_residues and a.aname = ' O ' and o.pk_obj = a.pk_atoms and o.ribbon = 1 order by a.pk_atoms"] foreach {p x y z} $tmp { lappend Lpo $p lappend iLo [list $x $y $z] } if {$Lpca != $Lpc} { if {[llength $iLca] > [llength $iLc]} { set i 0 ; set Li [list] foreach pa $Lpca { if {$pa ni $Lpc} {lappend Li $i} incr i } set Li [lreverse $Li] foreach i $Li { set iLca [lreplace $iLca $i $i] set iLcol [lreplace $iLcol $i $i] } } else { set i 0 ; set Li [list] foreach p $Lpc { if {$p ni $Lpca} {lappend Li $i} incr i } set Li [lreverse $Li] foreach i $Li { set iLc [lreplace $iLc $i $i] set iLo [lreplace $iLo $i $i] } } } } set Lca $iLca set Lcol $iLcol if {$rtype eq "Protein"} { set Lc $iLc set Lo $iLo } # regarde si le ribbon est coupe en # plusieurs morceaux puts "$nom $chn $obj [llength $Lca] [llength $Lc] [llength $Lo] [llength $Lcol]" set Lat [TestCoupeMainChain $rtype $Lca $Lcol $Lc $Lo] puts "[llength $Lat]" puts "" flush stdout return $Lat } oo::define Structure method updateObjFlags {obj} { my variable $obj db # update flags $db eval {begin transaction} foreach k {catrace atoms ribbon pearl cpk surface} n {Cat Atm Rib Prl CPK Srf} { set v [expr {[$db eval "select count(pk_obj) from $obj where $k = 1"] > 0}] dict set $obj Flag$n $v } $db eval {commit} return } oo::define Structure method ResetDrawing {} { set LObj [my _ListeObjets] if {$LObj == {} } {return} my variable db {*}$LObj foreach obj $LObj { dict set $obj globj 0 my _dellist $obj } return } oo::define Structure method CopiePDB {new} { my variable db $db close unset -nocomplain db oo::copy [self] $new $new SetVar db "" $new _RemplitLeSQL web return } oo::define Structure export CPK CopiePDB CoordsSeq2PDB CoordsPDB2Seq _SetB _EtatDeObjet ObjetOn ObjetOff _ListeObjets _mapfeat _dellist Ind2Obj AddPicked AtomXYZ _chains _chainIs _resnumber _resname _Dimensions SecStr PDBInfos SSBin CoordsDeAtom AddVar GiveVar ClearPicked SetVar _SetupPicking AllLabels ResetDrawing ResidueCDM dbref _seqres title _seqadv _lookup _source _RemplitLeSQL return } proc SetupRRPSOrga {{args yeast}} { global OrgaScientific taxid organism switch $args { "human" { set OrgaScientific "sapiens" set taxid 9606 set organism "human" } "coli" { set OrgaScientific "Escherichia" set taxid 562 set organism "coli" } "yeast" { set OrgaScientific "Saccharomyces" set taxid 4932 set organism "yeast" } } return } proc SeuilStringInteractomeDefaut {} { return 700 } proc ShareBetweenChilds {nbt Lin} { # first take elt not full set Lv [list] ; set Lf [list] foreach l $Lin { lassign $l f nb nc ng full if {! $full} { lappend Lv $nc lappend Lf $f } } if {$Lv == {} } { return [list $Lin 0] } # second , share between if {! $::Tx(-weighted)} { set Lv [lrepeat [llength $Lv] 1] } set Lres [RepartiValEntreN $nbt $Lv] # third, adjust nb selected foreach f $Lf r $Lres { set i [lsearch -exact -index 0 $Lin $f] set nb [lindex [lindex $Lin $i] 1] incr nb $r lset Lin $i 1 $nb } # fourth , check if full lassign [CheckChildsFull $Lin] Lout Reste return [list $Lout $Reste] } proc ShineDalgarno {Nom {Format raw}} { global RepertoireDuGenome global ShineDalgarno set Nice(sans) "ShineDalgarno : not found" set Nice(bons) "ShineDalgarno : ok" set Nice(mets) "ShineDalgarno : too close ... better with next start codon" set Nice(loin) "ShineDalgarno : too far" set Nice(invalide) "" if {[info exists ShineDalgarno]} { set SD "invalide" if {[info exists ShineDalgarno($Nom)]} { set SD [set ShineDalgarno($Nom)] } if {$Format=="Nice"} { set Sequence "" scan $SD "%s %s" Etat Sequence set SD [string trim "[set Nice($Etat)] $Sequence"] } return $SD } foreach NomDuFichier {"sd_bons" "sd_loin" "sd_mets" "sd_sans"} { set Fichier "$RepertoireDuGenome/fiches/$NomDuFichier" if { ! [file exists $Fichier]} { continue } foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" NomLu set Etat [lindex [split $NomDuFichier "_"] 1] set Seq [StringSuivant " " dans $Ligne] set ShineDalgarno($NomLu) "$Etat $Seq" } } set ShineDalgarno(Bidon) "EstCharge" return [ShineDalgarno $Nom $Format] } proc ShineDalgarnoSiNouveauMet {Nom {P 0}} { global MotifShineDalgarno incr P -1 if { ! [info exists MotifShineDalgarno]} { set Motif [CreeLesFichiersDesShineDalgarnoDesPABs "LeMotifMerci"] } set Motif $MotifShineDalgarno Wup "returns 1 if ShineDalgarno before alternative Met at position P" set MinSD -18 set MaxSD -3 set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Orient [Box $Nom orient] if {$Orient=="F"} { set D [expr $Debut + $P*3 + $MinSD] set F [expr $Debut + $P*3 + $MaxSD] set dATG $D set fATG [expr $Debut + $P*3 + 2] } else { set D [expr $Fin - $P*3 - $MinSD] set F [expr $Fin - $P*3 - $MaxSD] set dATG [expr $Fin - $P*3 - 2] set fATG $F } set PlageSD [BoutADN $D $F $Orient] if { ! [regexp -indices -nocase $Motif $PlageSD Indices]} { return "" } set i [lindex $Indices 0] set PlageAvantATG [BoutADN $dATG $fATG $Orient] set GGTtoATG [string range $PlageAvantATG $i end] set GGT [string range $GGTtoATG 0 2] set ggt [string tolower $GGT] set ATG [string range $GGTtoATG end-2 end] set atg [string tolower $ATG] regsub "^$GGT" $GGTtoATG "$ggt" GGTtoATG regsub "$ATG$" $GGTtoATG "$atg" GGTtoATG set iGGT [expr -($MinSD+$i)] return $GGTtoATG } proc ShouldMoveAgents {n1 a1 n2 a2 {neg 0}} { global LNOrdali Sequences TAg WeightMotif set s1 $TAg($a1,$n1,seq) set s2 $TAg($a2,$n2,seq) #set l1 [string length $s1] #set l2 [string length $s2] set lg [string length $s1] set wdt [expr {($lg-1)/2}] set m1 $TAg($a1,$n1,mil) set m2 $TAg($a2,$n2,mil) # Check if the columns that will receive # the new agent # are more conserved than the one they leave array set Tseq [array get Sequences] set sgap [string repeat "." $lg] set nc1 0 ; set nc2 0 ; set nco 0 set Lcol1 {} ; set Lcol2 {} ; set Lcolo {} foreach n $LNOrdali { if {$n eq $n1} { lappend Lcol2 $s1 incr nc2 } else { set tmp [string range $Tseq($n) $m2-$wdt $m2+$wdt] lappend Lcol2 $tmp if {$tmp ne $sgap} {incr nc2} } set tmp [string range $Tseq($n) $m2-$wdt $m2+$wdt] lappend Lcolo $tmp if {$tmp ne $sgap} {incr nco} set tmp [string range $Tseq($n) $m1-$wdt $m1+$wdt] lappend Lcol1 $tmp if {$tmp ne $sgap} {incr nc1} } set sc1 0.0 ; set sc2 0.0 ; set sco 0.0 set i 1 foreach s11 [lrange $Lcol1 0 end-1] s21 [lrange $Lcol2 0 end-1] so1 [lrange $Lcolo 0 end-1] { foreach s12 [lrange $Lcol1 $i end] s22 [lrange $Lcol2 $i end] so2 [lrange $Lcolo $i end] { set sc1 [expr {$sc1 + [SumOfPairs $s11 $s12 0 $neg]}] set sc2 [expr {$sc2 + [SumOfPairs $s21 $s22 0 $neg]}] set sco [expr {$sco + [SumOfPairs $so1 $so2 0 $neg]}] } incr i } if {$WeightMotif} { # pondere score par la longueur set tcol1 [join $Lcol1 ""] set tcol2 [join $Lcol2 ""] set tcolo [join $Lcolo ""] set l [string length $tcol1] set ldeg1 [string length [string map {"." ""} $tcol1]] set ldeg2 [string length [string map {"." ""} $tcol2]] set ldego [string length [string map {"." ""} $tcolo]] set sc1 [expr {1.0*$sc1*$ldeg1/$l}] set sc2 [expr {1.0*$sc2*$ldeg2/$l}] set sco [expr {1.0*$sco*$ldego/$l}] } # ATTENTION ! si nc1=1 -> divise par 0 ! #set sc1 [expr {$sc1 / ($nc1*($nc1-1)/2.)}] #set sc2 [expr {$sc2 / ($nc2*($nc2-1)/2.)}] #set sco [expr {$sco / ($nco*($nco-1)/2.)}] set sc1 [expr {$sc1/$nc1}] set sc2 [expr {$sc2/$nc2}] set sco [expr {$sco/$nco}] if {$::debug} { DebugAgents $sc1 $sc2 $sco $Lcol1 $Lcol2 $Lcolo } set move 0 # test if {0 && ($sc1 == 0.0 || $sc2 == 0.0) && ! $neg} { set move [ShouldMoveAgents $n1 $a1 $n2 $a2 1] } # test2 if {0 && $sc1 == 0.0 && ! $neg} { set move [ShouldMoveAgents $n1 $a1 $n2 $a2 1] } if {0 && $sc1 <= $sc2 && $sc2 >= $sco} { set move 1 } if {0 && $sco != 0.0 && $sc2 > $sco} { set move 1 } if {0 && $sco == 0.0} { set move 0 } if {0 && ($sc1 == 0.0 && $sc2 > 0.0 && $sc2 >= $sco && $sco > 0.0)} { set move 1 } if {1 && $sco == 0.0 && $sc1 == 0.0} { set move 1 } if {0 && $sco == 0.0 && ! $neg} { # une seule seq dans origine. # recalcule en matrice negative set move [ShouldMoveAgents $n1 $a1 $n2 $a2 1] } if {1 && $sc2 >= $sc1 && $sc2 >= $sco} { set move 1 } return $move } proc ShowAlignmentAgent {{args ""}} { array set T [array get ::Sequences] puts "\n==> [join $args]" foreach n [lsort [array names T]] { puts "$n $T($n)" } update idletasks return } proc ShowBalloonOnItem {w text x y} { if {"BalloonFont" ni [font names]} { set BalloonFont TkTooltipFont } else { set BalloonFont "BalloonFont" } set x [$w canvasx $x] set y [$w canvasy $y] set id [$w create text $x $y -font $BalloonFont -text $text -tag {cballoon} -anchor sw -justify left] $w create rect [$w bbox $id] -fill lightyellow -tag {cballoon} $w raise $id } proc ShowBlastFromSelection {Selection {Dir ""}} { if { ! [regexp "/" $Dir]} { set Dir "[RepertoireDuGenome]/$Dir" } foreach Mot [LesMotsDeLaLigne $Selection] { regsub -all {[><=\+]} $Mot "" Mot set Fichier "$Dir/$Mot" if {[FileExists $Fichier]} { return [AfficheFichier $Fichier "AvecSegAlignement"] } } return "" } proc ShowBlastOfOligo {Selection} { if {[regexp "\n" $Selection]} { foreach Ligne $Selection { ShowBlastOfOligo $Ligne } return "" } if { ! [regexp {P[0-9]+} $Selection P]} { return "" } set FB "[RepertoireDuGenome]/blastnoligo/$P" if {[file exists $FB]} {AfficheFichier $FB "AvecSegAlignement"} set FB "[RepertoireDuGenome]/blastnAllProGS/$P" if {[file exists $FB]} {AfficheFichier $FB "AvecSegAlignement"} } proc ShowBox {K X Y Action} { global ShowBoxEnter global YaQuelquUnDansShowBox global OnEstSortiDUneBox global SeparationShowBox global LesEvenementsShowBox Wup "Pour ne pas revenir pendant le traitement" if {[info exists YaQuelquUnDansShowBox] && $YaQuelquUnDansShowBox} { if { $Action == "Leave" } { set OnEstSortiDUneBox 1 } return } regsub ".canvas" $K ".message" M catch {destroy $M} set Boite [BoiteDuCourant $K $X $Y] if { $Boite == "" || [regexp "GLIMMER" $Boite] } { return } set Nom [Box $Boite nom] if { $Action == "Fixe"} { return "JeNeSaisPasCeQueFaitFixe" } if { $Action == "Leave" } { set OnEstSortiDUneBox 1 return "" } set OnEstSortiDUneBox 0 set YaQuelquUnDansShowBox 1 set LesLignes {} if {[info exists ShowBoxEnter(Definition)] && [set ShowBoxEnter(Definition)]} { if {[set DE [Definition $Nom "ApproxDansInfo"]]!=""} { regsub { +ID\:.*} $DE "" DE while {[string length $DE]>100} { lappend LesLignes [string trim [string range $DE 0 99]] set DE [string range $DE 100 end] } lappend LesLignes [string trim $DE] } } set QuelsOrthos {} if {[info exists ShowBoxEnter(OrthoOperons)] && [set ShowBoxEnter(OrthoOperons)]} { lappend QuelsOrthos "O" } if {[info exists ShowBoxEnter(OrthoTBlastN)] && [set ShowBoxEnter(OrthoTBlastN)]} { lappend QuelsOrthos "T" } if {[info exists ShowBoxEnter(OrthoBlastP)] && [set ShowBoxEnter(OrthoBlastP)]} { lappend QuelsOrthos "P" } if {[info exists ShowBoxEnter(OrthoMissed)] && [set ShowBoxEnter(OrthoMissed)]} { lappend QuelsOrthos "M" } if {[info exists ShowBoxEnter(OrthoDbClustal)] && [set ShowBoxEnter(OrthoDbClustal)]} { lappend QuelsOrthos "A" } if {$QuelsOrthos!={}} { lappend LesLignes [RecapitulatifDesOrthologues $Nom [join $QuelsOrthos ""]] } set Texte [join $LesLignes "\n"] if {$OnEstSortiDUneBox} { set YaQuelquUnDansShowBox 0 return "" } if {$Texte!=""} { label $M -borderwidth 3 -font {Courier 10} -relief raise -background "lightyellow" -foreground "black" -justify left -anchor w -text $Texte if {$Y < 200} { set dY 40 ; set Anc "nw" } else { set dY -40 ; set Anc "sw" } place $M -x 10 -y [expr $Y+$dY] -anchor $Anc update idletasks } set YaQuelquUnDansShowBox 0 return $M } proc ShowBoxAction {{Action Enter}} { global RepertoireDuGenome global ShowBoxEnter DefautShowBoxEnter global ShowBoxClic DefautShowBoxClic if {$Action!="Which" && ($Action=="EnterDefaults" || ! [info exists ShowBoxEnter])} { set ShowBoxEnter(Definition) 1 set ShowBoxEnter(OrthoOperons) [file exists "$RepertoireDuGenome/fiches/oooperons"] set ShowBoxEnter(OrthoTBlastN) [file exists "$RepertoireDuGenome/fiches/ootblastn"] set ShowBoxEnter(OrthoBlastP) [file exists "$RepertoireDuGenome/fiches/ooblastp"] set ShowBoxEnter(OrthoMissed) [file exists "$RepertoireDuGenome/fiches/oomsf"] set ShowBoxEnter(OrthoDbClustal) [file exists "$RepertoireDuGenome/fiches/oomsf"] if {[PreFixe]=="PEROX"} { set ShowBoxEnter(OrthoDbClustal) 0 set ShowBoxEnter(OrthoTBlastN) 0 } } Wup "Clic ne sert pas encore" if {$Action=="Clic" || ! [info exists ShowBoxClic]} { foreach R [LesRepertoiresPourSeeAbyShow] { set ShowBoxClic($R) 0 } } if {$Action=="Which"} { set Entete "When you enter in a box it appears :" set Affiche [list $Entete] if { ! [info exists ShowBoxEnter]} { FaireLire "$Entete nothing. (You can choose an action)" } else { foreach {Act ValShowBoxEnter} [array get ShowBoxEnter] { if { ! $ValShowBoxEnter} { continue } lappend Affiche $Act } FaireLire [join $Affiche "\n"] } return } foreach Act [array names ShowBox$Action] { set DefautShowBox[set Action]($Act) [set ShowBox[set Action]($Act)] } if {$Action=="Which" || $Action=="EnterDefaults" || $Action=="ClicDefaults"} { return } set Tableau [CochonsLes ShowBox$Action DefautShowBox$Action] Espionne $Tableau parray $Tableau if {$Tableau=="ShowBoxClic"} { set LesDevant {} foreach {K V} [array get ShowBoxClic] { if {$V==0} { continue } lappend LesDevant $K } return [LesRepertoiresPourSeeAbyShow "PutInFront" $LesDevant] } } proc ShowCenter {c x y} { set cent [$c find withtag center] if {[llength $cent] > 0 } { set crd [$c coords center] $c delete center set x1 [lindex $crd 0] set x2 [lindex $crd 2] set l [expr ($x2 - $x1)/2.0] } else { set l 10 } $c create line [expr {$x - $l}] $y [expr {$x + $l}] $y -fill red -tags center $c create line $x [expr {$y - $l}] $x [expr {$y + $l}] -fill red -tags center return } proc ShowCharOnVrp {t x y} { set cpos [$t index @$x,$y] set index [lindex [split $cpos .] 1] HitPointIndex $t $index HighlightChar $t $index return } proc ShowCloning {Nom} { foreach Ligne [LesLignesDuFichier [GscopeFile $Nom "notes"]] { if { ! [regexp -nocase {[a-z]} $Ligne]} { lappend LaPage $Ligne continue } set Ref "" scan $Ligne "%s" Cible if {0} { } elseif {[regexp {^P[0-9]{4,}$} $Cible]} { set Ref "[WscopeScience]\\&ShowOli\\&$Cible" } elseif {[regexp {^N[0-9]{4,}$} $Cible]} { set Ref "[WscopeScience]\\&ShowVirtualPPCR\\&$Cible" } elseif {[regexp {^N[0-9]{4,}_[0-9a-zA-Z]+$} $Cible]} { set Ref "[WscopeScience]\\&FileMoi\\&rec1\\&$Cible" } elseif {[regexp {^N[0-9]{4,}_[0-9a-zA-Z]+_[0-9a-zA-Z]+$} $Cible]} { set Ref "[WscopeScience]\\&FileMoi\\&rec2\\&$Cible" } if {$Ref==""} { lappend LaPage $Ligne continue } regsub $Cible $Ligne "$Cible" Ligne lappend LaPage $Ligne } Html_ZeroToBody Html_BackTo Html_Append "
    [join $LaPage \n]
    " return [Html_Get] } proc ShowContextMenu {AId menu} { if {[set ::Abr($AId,TypeTree)] eq "dendrogram"} { set m "${menu}Den" } else { set m "${menu}Rad" } set w [winfo parent $m] lassign [winfo pointerxy $w] x y tk_popup $m $x $y return } proc ShowContextMenuFeat {} { CreateContextMenuFeature set m [set ::EFeat(ContextMenu)] set w [winfo parent $m] lassign [winfo pointerxy $w] x y tk_popup $m $x $y return } proc ShowContextMenuTax {w x y} { puts "ShowContext" puts "x= $x y= $y" set ::Tx(ItemSel) "" #set n [CanvasCoords2TaxId $w $x $y] set id [$w find withtag current] if {$id eq ""} {return} set Lt [$w gettags $id] puts "Lt $Lt" if {"sensor" in $Lt} { set id [$w find below $id] } else { return } set Lt [$w gettags $id] puts "Lt2 $Lt" foreach t $Lt { if {[regexp {(N|R)[0-9]+} $t]} { set n [string range $t 1 end] } } set ::Tx(ItemSel) $n puts "n= $n" if {$n ne ""} { puts "$::Tx(Name,$n)" } puts "" if {"Leaf" ni [$w gettags "N$n"]} {return} # display context menu set m [set ::Tx(ContextMenu)] set w [winfo parent $m] lassign [winfo pointerxy $w] x y puts "x $x y $y" tk_popup $m $x $y return } proc ShowCorrespondingFile {Selection} { scan $Selection "%s" PRRF if {[regexp "^Fus_" $PRRF]} { foreach Fichier [glob "[RepertoireDuGenome]/fusion/$PRRF*"] { AfficheFichier $Fichier "avecFormate" return } } set Type [regexp -all "_" $PRRF] if {$Type==0} { return [AfficheFichier "[RepertoireDuGenome]/ppcr_virtuels/$PRRF"] } if {$Type==1} { return [AfficheFichier "[RepertoireDuGenome]/rec1/$PRRF"] } if {$Type==2} { return [AfficheFichier "[RepertoireDuGenome]/rec2/$PRRF"] } return "" } proc ShowDeltaDistribution {Selection} { set LesFenetres {} foreach Sel [split $Selection "\n"] { if {[regexp "^#" $Sel]} { continue } regsub -all {[ \t]+} $Sel " " Sel set Sel [string trim $Sel] set TaxId [lindex [split $Sel " "] 3] set LaDistrib [MemoCase $TaxId "LaDistrib"] if {$LaDistrib==""} { continue } regsub -all {[ \t]+} $Sel " " SelPourTitre set F [AfficheListe $LaDistrib "AvecCase" "Delta distribution concerning $SelPourTitre"] set B [BoutonneLaFenetre $F "ShowHits" "ShowHitsFromTaxoBlast \[selection get\]"] $B configure -background "Magenta" lappend LesFenetres $F } return $LesFenetres } proc ShowDeltaDistributionForClade {{Clade ""} {Seuil ""} {GetWhat ""} {SelectMethod ""} {UseExpect ""}} { set LesLignes [HistoDelta $Clade $Seuil "GetList" $SelectMethod $UseExpect] set T(Min,Delta) 99999 set T(Max,Delta) -99999 foreach Ligne $LesLignes { if {[regexp "^#" $Ligne]} { continue } regsub -all {[ \t]+} $Ligne " " Ligne set LesMots [split [string trim $Ligne] " "] lassign $LesMots TailleProteome NbDelta Moyenne TaxId set OS [join [lrange $LesMots 4 end] " "] set T($TaxId,OS) $OS set LaDistrib [MemoCase $TaxId "LaDistrib"] lappend T(ListOf,TaxId) $TaxId set T($TaxId,MinDelta) 99999 set T($TaxId,MaxDelta) -99999 foreach Distri $LaDistrib { if {[regexp "^#" $Distri]} { continue } lassign [split $Distri "\t"] Delta Count Case tid o RefCla regsub -all " " $Delta "" Delta regsub -all " " $Count "" Count regsub -all " " $Case "" Case regsub "ReferenceClade:" $RefCla "" ReferenceClade Espionne "$Delta $Count $Case" set T($TaxId,$Delta) $Count set T($TaxId,MinDelta) [Mini $T($TaxId,MinDelta) $Delta] set T($TaxId,MaxDelta) [Maxi $T($TaxId,MaxDelta) $Delta] lappend T($Delta,ListOfTaxId) $TaxId lappend T(ListOf,Delta) $Delta } set T(Min,Delta) [Mini $T(Min,Delta) $T($TaxId,MinDelta)] set T(Max,Delta) [Maxi $T(Max,Delta) $T($TaxId,MaxDelta)] } set UseExpect [string equal -nocase $UseExpect "UseExpect"] if {$UseExpect} { set T(ListOf,Delta) [lsort -integer -decreasing $T(ListOf,Delta)] } else { set T(ListOf,Delta) [lsort -integer -increasing $T(ListOf,Delta)] } set LesHeaders {} set Box 0 set LesDelta $T(ListOf,Delta) set OnBreak 0 while {1} { set N [llength $LesDelta] Espionne $LesDelta set Portion [expr $N/3] if {$N<12} { set LesCourants $LesDelta set OnBreak 1 } else { set PortionMoinsUn [expr $Portion-1] set LesCourants [lrange $LesDelta end-$Portion end] set LesDelta [lrange $LesDelta 0 end-$PortionMoinsUn] } Espionne "Box $Box : $LesCourants" set BoxVide($Box) 1 foreach D $LesCourants { if {[info exists DejaVu($D)]} { continue } set DejaVu($D) 1 foreach TaxId $T($D,ListOfTaxId) { set BoxVide($Box) 0 set BM1 [expr $Box - 1] if { ! [info exists CumulParBox($BM1,$TaxId)]} { set CumulParBox($BM1,$TaxId) 0 } if { ! [info exists CumulParBox($Box,$TaxId)]} { set CumulParBox($Box,$TaxId) $CumulParBox($BM1,$TaxId) } incr CumulParBox($Box,$TaxId) $T($TaxId,$D) Espionne "incr CumulParBox($Box,$TaxId) $T($TaxId,$D) > $CumulParBox($Box,$TaxId)" } MemoDistri $Box ListOfDelta $D } if { ! $BoxVide($Box) } { set Delta [lindex $LesCourants 0] MemoDistri $Delta ItsBox $Box lappend LesHeaders $Delta } if {$OnBreak} { break } incr Box } set MaxBox $Box set I 0 foreach TaxId $T(ListOf,TaxId) { set Box 0 set LaLigne {} foreach Box [NombresEntre 0 $MaxBox] { if {$BoxVide($Box)} { continue } if { ! [info exists CumulParBox($Box,$TaxId)]} { set CumulParBox($Box,$TaxId) 0 } lappend LaLigne [format "%7d" $CumulParBox($Box,$TaxId)] set W($I,$Box) $CumulParBox($Box,$TaxId) incr Box } Espionne "[format %-30s $T($TaxId,OS)] [join $LaLigne { }]" lappend LesTitres $T($TaxId,OS) MemoDistri $I ItsTaxId $TaxId incr I } set NbBox [expr $MaxBox + 1] if {$UseExpect} { set LesSensDuTri [string repeat "100red-0blue" $NbBox] } else { set LesSensDuTri [string repeat "0blue-100red" $NbBox] } set LeW [array get W] return [Medals $LesTitres $LeW $LesHeaders $LesSensDuTri "Distri"] } proc ShowDescription {pxy} { global NomNomSeq TDesDescriptifs LNOrdali LNSeqlab if {! [info exists TDesDescriptifs]} {return} if {$pxy eq "-1.-1"} { set ledes "" } else { lassign [split [$NomNomSeq index $pxy] .] y x if {[QuelMode] eq "seqlab"} { set nom [lindex $LNSeqlab $y-1] } else { set nom [lindex $LNOrdali $y-1] } if {$nom eq ""} {return} if {[info exists TDesDescriptifs($nom)]} { set ledes [set TDesDescriptifs($nom)] } else { set ledes "" } } MontreCacheLeDescriptif $pxy $ledes return } proc ShowDifferentielBlastAlignement {Selection} { global RepertoireDuGenome Gs "Frame" foreach DiffBlaAli [split $Selection "\n"] { scan $DiffBlaAli "%s %s" Nom Rapport if {[regexp NoMore $Rapport]} { FaireLire "$Rapport for $Nom" continue } scan $DiffBlaAli "%s %s %s %s %s %s %s" Nom BestBla BestAli DisBla DisAli Ecart Rapport if {[regexp "Problem|Same" $Rapport]} { FaireLire "$DiffBlaAli" continue } set ToShow "$Nom\n$BestBla\n$BestAli" set FichierMSF "$RepertoireDuGenome/msf/$Nom" set MSF [ContenuDuFichier $FichierMSF] regsub -nocase "Name: $BestBla oo " $MSF "Name: $BestBla $DisBla" MSF regsub -nocase "Name: $BestAli oo " $MSF "Name: $BestAli $DisAli" MSF set Fen [AfficheRognure $MSF $ToShow "" $FichierMSF "In"] Illumine $BestAli $Fen Illumine [string toupper $BestAli] $Fen continue } } proc ShowDirectories {Page NomDuFichierOrigine {Maniere ""}} { foreach Ligne [split $Page "\n"] { if {[regexp {^ *(P[0-9]+) } $Ligne Match P]} { set DirOli "[RepertoireDuGenome]/oligos/$P" regsub $P $Ligne $DirOli Ligne lappend LesNouvelles $Ligne continue } if {[regexp {^ *(N[0-9]+) } $Ligne Match N]} { set DirRec1 "[RepertoireDuGenome]/ppcr_virtuels/$N" regsub $N $Ligne $DirRec1 Ligne lappend LesNouvelles $Ligne continue } lappend LesNouvelles $Ligne continue } return [Affiche [join $LesNouvelles "\n"] $NomDuFichierOrigine $Maniere] } proc ShowDistriHits {K} { set Touche [$K find withtag current] set LesTags [$K gettags $Touche] lassign $LesTags Distri I J Clade RepresentativeDelta Espionne $LesTags set TaxId [MemoDistri $I ItsTaxId] set Box [MemoDistri $RepresentativeDelta ItsBox] Espionne "$TaxId=$Box=" set LaSortie {} foreach Delta [MemoDistri $Box ListOfDelta] { set LesNoms [MemOlym $TaxId-$Delta ListOfNom] Espionne "MemOlym $TaxId-$Delta ListOfNom" Espionne $LesNoms foreach Nom $LesNoms { set Id [ExtraitInfo $Nom Id] set Ac [ExtraitInfo $Nom Ac] set ValiGN [ExtraitInfo $Nom ValiGN] lappend LesGn $ValiGN set ValiDE [ExtraitInfo $Nom ValiDE] lappend LaSortie "$Nom\t$Id\t$Ac\t$ValiGN\t$ValiDE" } } set F [AfficheListe "#n°HSAP\n$LaSortie" "AvecFetch" "Hits with at least $Distri for $Clade"] set GeneNames [join $LesGn ","] set B [BoutonneLaFenetre $F "GeneOntology" "GoGetShowFromGeneList $GeneNames"] $B configure -background "Magenta" } proc ShowDuplicates {} { foreach GN [RetinalGene] { if {[llength [set LesNoms [RetinalGene GscopeIdOf $GN]]]<2} { continue } Espionne "$GN $LesNoms" } } proc ShowFeatNote {} { global EFeat set PAD $EFeat(PAD) set Li [$PAD find withtag TNote] if {$EFeat(ShowNote)} { foreach i $Li { set note [string range [lsearch -regexp -inline [$PAD gettags $i] {^Tx@}] 3 end] InitBalloonOnItem $PAD $i $note } } else { foreach i $Li { $PAD bind $i "" $PAD bind $i "" } } return } proc ShowFeature {pxy {show 1}} { set note "" if {$show} { set Ltg [$::NomTextSeq tag names [$::NomTextSeq index $pxy]] set Lf [lsearch -all -inline -regexp $Ltg "FDisp"] if {$Lf != {} } { foreach f $Lf { lappend note [string range $f [string first "_" $f]+1 end] } } } MontreCacheLaFeature $pxy $note return } proc ShowFile {{Fichier ""}} { Gs "Frame" set LesAvecExistants {} set Source [info body AfficheVariable] foreach Ligne [split [info body AfficheVariable] "\n"] { if { ! [regexp -indices "Maniere" $Ligne Indices]} { continue } scan $Indices "%d" iManiere if { ! [regexp -indices "regexp" $Ligne Indices]} { continue } scan $Indices "%d %d" iDebutRegexp iFinRegexp set UnAvec [string range $Ligne [incr iFinRegexp 3] [incr iManiere -4]] lappend LesAvecExistants $UnAvec } set AvecCeuxCi [join [ChoixDesPresents $LesAvecExistants] ""] if {$Fichier == "" } { set Fichier [ButineArborescence All] if {$Fichier == ""} { return "" } } return [AfficheFichier $Fichier $AvecCeuxCi] } proc ShowFileOld {{Fichier ""}} { global LesAvecs LesAvecsDefaut TousLesAvecs Gs "Frame" if { ! [info exists LesAvecs]} { set LesAvecs(AvecShow) 0 set LesAvecs(AvecEtudeBlast) 0 set LesAvecs(AvecRetour) 0 set LesAvecs(AvecAligneurs) 0 set LesAvecs(AvecLog) 0 set LesAvecs(AvecBlaste) 0 set LesAvecs(AvecGraphe) 0 set LesAvecs(AvecAlignement) 0 set LesAvecs(SansFetch) 0 array set LesAvecsDefaut [array get LesAvecs] set Source [info body AfficheVariable] foreach Ligne [split [info body AfficheVariable] "\n"] { if { ! [regexp -indices "Maniere" $Ligne Indices]} { continue } scan $Indices "%d" iManiere if { ! [regexp -indices "regexp" $Ligne Indices]} { continue } scan $Indices "%d %d" iDebutRegexp iFinRegexp set UnAvec [string range $Ligne [incr iFinRegexp 3] [incr iManiere -4]] if { ! [info exists LesAvecs($UnAvec)] } { if {[info exists LesAvecsDefaut($UnAvec)]} { set LesAvecs($UnAvec) [set LesAvecsDefaut($UnAvec)] } else { set LesAvecs($UnAvec) 0 } } set TousLesAvecs($UnAvec) [set LesAvecs($UnAvec)] } } CochonsLes LesAvecs TousLesAvecs set AvecCeuxCi "" foreach Avec [array names LesAvecs] { if { [set LesAvecs($Avec)] } { append AvecCeuxCi $Avec } } if {$Fichier == "" } { set Fichier [ButineArborescence All] if {$Fichier == ""} { return "" } } return [AfficheFichier $Fichier $AvecCeuxCi] } proc ShowFragment {PAB D F} { Wup "Permet d afficher la sequence du fragment" set FichierQuery "[RepertoireDuGenome]/nuctfa/$PAB" set Entete [list ">PAB $D $F"] lappend Entete [ZoneADNDuFichierTFA $D $F $FichierQuery] return [AfficheVariable [join $Entete "\n"] "" $PAB] } proc ShowGOs {Nom} { set GOs [ExtraitInfo $Nom "GOs:"] if {$GOs==""} { return "" } set LesName {} foreach Go [split $GOs " "] { set Name [GoGetFromGo $Go "acc,name" "="] regsub -all {[\{\}]} $Name "" Name lappend LesName $Name } set Clavier "Postpone" TouchePour $Clavier NouvelleCouleur "Magenta" TouchePour $Clavier "GO Ancestors" "ShowGo Ancestors \[selection get\] Ancestors_$Nom" TouchePour <2> "/Parents" "ShowGo Parents \[selection get\] Parents_$Nom" TouchePour <3> "/Children" "ShowGo Children \[selection get\] Children_$Nom" return [AfficheListe $LesName "" "GOs_from_$Nom"] } proc ShowGo {What Selection {NomDuFichierOrgine ""}} { if {[regexp "\n" $Selection]} { set LesF {} foreach Sel [split $Selection "\n"] { lappend LesF [ShowGo $What $Sel $NomDuFichierOrgine] } return $LesF } set Action "Go$What" if {[info proc $Action]==""} { return "" } regsub "=.*" $Selection "" Acc regsub " " $Selection "_" S set LesReponses {} foreach Name [$Action $Acc "acc,name" "="] { regsub -all {[\{\}]} $Name "" Name lappend LesReponses $Name } set Clavier "Postpone" TouchePour $Clavier NouvelleCouleur "Magenta" TouchePour $Clavier "GO Ancestors" "ShowGo Ancestors \[selection get\] Ancestors_$NomDuFichierOrgine" TouchePour <2> "/Parents" "ShowGo Parents \[selection get\] Parents_$NomDuFichierOrgine" TouchePour <3> "/Children" "ShowGo Children \[selection get\] Children_$NomDuFichierOrgine" return [AfficheListe $LesReponses "" "${What}_of_${S}_from_${NomDuFichierOrgine}"] } proc ShowHDACroises {{Fichier ""} {Delete ""} {Option ""}} { set Fichier [LectureBilanHDACroises LesFamilles LesOrgCibles Bilan $Fichier] if {$Fichier=={}} { return "" } if {$Delete=="Delete"} { File delete -force $Fichier set Fichier "X-hda" } #Jean a rajoute if {$Option=="AvecTri"} { set LesXs $LesFamilles set LesYs $LesOrgCibles set Ordre "SampledBAE" set LesGenoTries [LesGenomesDansLeBonOrdre $Ordre] foreach Y $LesYs { set JExiste($Y) 1 } foreach G $LesGenoTries { set Y [string toupper [Glossaire $G Court]] if { ! [info exists JExiste($Y)]} { continue } lappend LesYsTries $Y } #set Fichier [File tail $Fichier] set LesFamilles $LesXs set LesOrgCibles $LesYsTries } return [DessineBilanHDACroises $LesFamilles $LesOrgCibles Bilan $Fichier] } proc ShowHTMLBox {K Action} { global ShowHTMLBox JeMeSignale set Id [$K find withtag current] if {$Action=="Enter"} { if {[info exists ShowHTMLBox($K,Image)]} { $K raise [set ShowHTMLBox($K,Image)] } set LesTags [$K gettags $Id] set Alias [lindex $LesTags 0] set Nom [NomDuAlias $Alias] if {$Nom!=""} { return [FetcheBox $K $Nom $Nom] } else { return [RepereBox $Alias] } } if {$Action=="Press"} { $K lower $Id set ShowHTMLBox($K,Image) $Id return } if {$Action=="Release"} { if {[info exists ShowHTMLBox($K,Image)]} { $K raise [set ShowHTMLBox($K,Image)] } } } proc ShowHitsFromTaxoBlast {Selection} { set LaSortie [list "#[PreFixe] EcartMoy Moyenne Id VaLign Valide NumeroDuTaxId OS Reference"] set LesGn {} foreach Sel [split $Selection "\n"] { if {[regexp "^#" $Sel]} { continue } regsub -all {[ \t]+} $Sel " " Sel lassign [split [string trim $Sel] " "] Delta N Case set TaxId [StringApres "TaxId:" dans $Sel] set OS [StringApres "OS:" dans $Sel] set Clade [StringApres "ReferenceClade:" dans $Sel] set LesAccess {} foreach Info [MemoInfo $TaxId $Case] { scan $Info "%s" Nom set Id [ExtraitInfo $Nom Id] set Ac [ExtraitInfo $Nom Ac] set ValiGN [ExtraitInfo $Nom ValiGN] lappend LesGn $ValiGN set ValiDE [ExtraitInfo $Nom ValiDE] lappend LaSortie $Info\t$Id\t$Ac\t$ValiGN\t$ValiDE\tTaxId:$TaxId\tOS:$OS\tReferenceClade:$Clade } } set LaSortie [lsort -unique $LaSortie] set GeneNames [join $LesGn ","] set F [AfficheListe $LaSortie "" "$TaxId [TaxClass $TaxId Name Reverse]"] set B [BoutonneLaFenetre $F "GeneOntology" "GoGetShowFromGeneList $GeneNames"] $B configure -background "Magenta" set B [BoutonneLaFenetre $F "Outliers" "OutliersFromSelection \[selection get\]"] $B configure -background "Magenta" return $F } proc ShowHsapHits {LesNoms {Quoi ""} {RefTaxId ""}} { JeMeSignale set Science "CilioCarta" if {[OnTraite OI2017 Like]} { set Science "EHomsa" } if {[regexp "\n" $LesNoms]} { set LesNomsLus {} foreach Ligne [split $LesNoms "\n"] { if {[regexp "^#" $Ligne]} { continue } scan $Ligne "%s" NomLu lappend LesNomsLus $NomLu } set LesNoms $LesNomsLus } if {[regexp "," $LesNoms]} { set LesNoms [split $LesNoms ","] } if {$Quoi==""} { set Quoi "Info" } if {$RefTaxId==""} { set RefTaxID 9606 } set LesHsapGeneNames {} set LesHsapInfo {} set LesHsap {} foreach Nom $LesNoms { set FicTaxobla [GscopeFile $Nom "taxobla"] if {[FileAbsent $FicTaxobla]} { continue } foreach Ligne [LesLignesDuFichier $FicTaxobla] { lassign [split $Ligne "\t"] PN Score TaxId Orga Info set TaxId [string trim $TaxId] if { ! [string equal $RefTaxID $TaxId]} { continue } set Access [string trim [lindex [split $Info " "] 1]] set Hsap [QuestionDeScience $Science "ret RepereBox $Access"] if {$Hsap==""} { continue } set HsapGN [QuestionDeScience $Science "ret BestGN $Hsap"] set HsapDE [QuestionDeScience $Science "ret BestDE $Hsap"] lappend LesHsapGeneNames $HsapGN lappend LesHsapInfo "$Nom first Hsap hit: $Hsap $HsapGN $HsapDE" lappend LesHsap $Hsap } } if {$Quoi=="GO" } { return [GoGetShowFromGeneList $LesHsapGeneNames] } if {$Quoi=="Info"} { return [AfficheListe $LesHsapInfo] } return } proc ShowIp {} { global Ip CafeDesSciencesDir DecortiqueIpCafeScience "coucou" I C S return "$CafeDesSciencesDir $I $C $S $Ip" } proc ShowItsOligos {Selection {NA ""} {GetThem ""}} { if {[regexp "\n" $Selection]} { foreach Sujet [split $Selection "\n"] { ShowItsOligos $Sujet $NA } return } set Sujet "" scan $Selection "%s" Sujet if {$Sujet==""} { return "" } set LesCoAvAp {} foreach FiCoAvAp [ClonInventory $Sujet Oligos$NA] { set Fichier [lindex $FiCoAvAp 0] set CoAvAp [lindex $FiCoAvAp 1] set TexCoAvAp [join $CoAvAp " === "] lappend LesCoAvAp $TexCoAvAp ClonInventoryAppend $TexCoAvAp $Fichier } set LesCoAvAp [lsort -unique $LesCoAvAp] if {$GetThem=="GetThem"} { return $LesCoAvAp } set Fen [AfficheVariable [join $LesCoAvAp "\n"] "AvecFiOl" $Sujet] return $Fen } proc ShowItsPPCR {Selection {NA ""} {GetThem ""}} { if {[regexp "\n" $Selection]} { foreach Sujet [split $Selection "\n"] { ShowItsPPCR $Sujet $NA } return } set Sujet "" scan $Selection "%s" Sujet if {$Sujet==""} { return "" } set LesCoAvAp {} foreach FiCoAvAp [ClonInventory $Sujet PPCR$NA] { set Fichier [lindex $FiCoAvAp 0] set CoAvAp [lindex $FiCoAvAp 1] set TexCoAvAp [join $CoAvAp " +++ "] lappend LesCoAvAp $TexCoAvAp ClonInventoryAppend $TexCoAvAp $Fichier } set LesCoAvAp [lsort -unique $LesCoAvAp] if {$GetThem=="GetThem"} { return $LesCoAvAp } set Fen [AfficheVariable [join $LesCoAvAp "\n"] "AvecFiPPCR" $Sujet] return $Fen } proc ShowLabelevery {w every} { global Vrp set c $w.c for {set i 0 } { $i < $Vrp(Sz) } { incr i $every} { HitPointIndex $c $i } return } proc ShowLesBlastsDuPsiBlast {Fichier {Nieme ""}} { if {$Nieme==""} { set Nieme "All" ; set Trie "" } else { set Trie "Trie" } set Queue [file tail $Fichier] set LesBlasts [LesBlastsDuPsiBlast $Fichier $Nieme $Trie] if {$Nieme!="All"} { set LesBlasts [list $LesBlasts] set LesIiemes [list $Nieme] } else { set LesIiemes [NombresEntre 1 [llength $LesBlasts]] } foreach Blast $LesBlasts Iieme $LesIiemes { set Fen [AfficheVariable $Blast "AvecSegAlignement" "${Iieme}_iteration_of_Psi_Blast/$Queue"] } return $Fen } proc ShowLesOligosDuPGS {} { set LaPage {} foreach PGS [ListeDesPABs] { set LesOlis [LesOligosDuPGS $PGS] lappend LaPage "$PGS [join $LesOlis " "]" } set Page [join $LaPage "\n"] return [AfficheVariable $Page "AvecOli" "OligosOfAllPGSs"] } proc ShowLesRec1DuVirtualPPCR {N} { if {[regexp "\n" $N]} { foreach Nlu [split $N "\n"] { set Fen [ShowLesRec1DuVirtualPPCR $Nlu] } return $Fen } scan $N "%s" N set LeTexte {} set LesRec1 {} foreach R [VirtualPPCREnStock $N LesRec1] { Espionne $R lappend LesRec1 $R } Espionne $LesRec1 return [AfficheLesRec1 $LesRec1] } proc ShowLesVEDidierDuPGS {PGS} { set LesVE [] } proc ShowLesVirtualPPCRsDuPGS {PGS} { set LesVirtualPPCRsDuPGS [LesVirtualPPCRsDuPGS $PGS] if {$LesVirtualPPCRsDuPGS=={}} { FaireLire "No VirtualPPCR were found for $PGS [Alias $PGS]" return "" } set LeTexte {} foreach N $LesVirtualPPCRsDuPGS { lappend LeTexte [VirtualPPCREnStock $N "Resume"] } set Titre "VirtualPPCRs_for_[Alias $PGS]_/$PGS" return [AfficheVariable [join $LeTexte "\n"] "AvecVirtualPPCR" $Titre] } proc ShowLineage {w x y} { global Tx set Id [$w find below current] set Lt [$w gettags $Id] set n "" foreach t $Lt { if {[regexp {N[0-9]+} $t]} { set n [string range $t 1 end] break } } if {$n eq ""} {return} set Llin [list "$n | "] set Lgen [DonneGenealogieMem $n] foreach elt $Lgen { if {$elt == -1} { continue } lappend Llin [set Tx(Name,$elt)] } set lineage [join $Llin "; "] set Tx(WLin,text) $lineage update idletasks return } proc ShowListbox {Page args} { global ShowListbox Wup "Cette proc est issue de AfficheVariable ... en plus simple" if { ! [info exists ShowListbox]} { set ShowListbox(wNumber) 0 } foreach {A B} $args { regsub -- {^\-} $A "" A eval set $A $B } if { ! [info exists w]} { set w ".slb[incr ShowListbox(wNumber)]" } if { ! [info exists Titre]} { set Titre "$w" } if { ! [info exists Maniere]} { set Maniere "" } toplevel $w wm title $w "$Titre" wm iconname $w "$Titre" regsub -all {\t} $Page " " PagePropre set ShowListbox(Page,$w) $PagePropre label $w.msg -wraplength 4i -justify left -text "$Titre" pack $w.msg -side top set Clavier $w.buttons frame $Clavier pack $Clavier -side bottom -fill x -padx 3m -pady 1m TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "red" TouchePour $Clavier "Dismiss" "unset ShowListbox(Page,$w) ; after 10 destroy $w" TouchePour $Clavier NouvelleCouleur "grey" TouchePour $Clavier "Save all" "SaveAs \[set ShowListbox(Page,$w)\]" TouchePour <2> "/sel." "SaveAs \[selection get\]" TouchePour <3> " /Edit" "EditAndShow \[set ShowListbox(Page,$w)\]" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "yellow" TouchePour $Clavier "Next" "Focalise $w" TouchePour <2> "/Top" "Focalise $w top" TouchePour <3> "/New" "Focalise $w ask" TouchePour $Clavier "High word" "Illumine \[Entre\] $w" frame $w.frame -borderwidth 10 pack $w.frame -side top -expand yes -fill both scrollbar $w.frame.yscroll -command "$w.frame.list yview" scrollbar $w.frame.xscroll -command "$w.frame.list xview" -orient horizontal set Largeur 80 set Hauteur 35 if { [regexp "GrandeLargeur" $Maniere] } { set Largeur 128 } listbox $w.frame.list -width $Largeur -height $Hauteur -setgrid 1 -yscroll "$w.frame.yscroll set" -xscroll "$w.frame.xscroll set" -selectmode extended -background "LightGrey" -foreground "Black" -selectbackground "LightYellow" -selectforeground "Black" -font [list Courier [PolicePourListBox]] grid $w.frame.list -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $w.frame 0 -weight 1 -minsize 0 grid columnconfig $w.frame 0 -weight 1 -minsize 0 set nLignes 0 foreach Ligne [split [set ShowListbox(Page,$w)] "\n"] { incr nLignes $w.frame.list insert end $Ligne } if {$nLignes<30} { $w.frame.list configure -height [expr $nLignes+3] } bind $w.frame.list <3> "DecrisLaLigne %W %x %y" bind $w.frame.list "DecrisLaLigne %W %x %y Efface" return $w } proc ShowLongInfoSeq {pos} { global NomNomSeq LNOrdali LNSeqlab if {$pos eq "-1,-1"} { set Idx "0.0" set des "" } else { set Idx [$NomNomSeq index @$pos] lassign [split $Idx .] y x if {[QuelMode] eq "seqlab"} { set nom [lindex $LNSeqlab $y-1] } else { set nom [lindex $LNOrdali $y-1] } if {$nom eq ""} {return} set des [LongInfoSeq $nom] } MontreCacheLongInfoSeq $Idx $des return } proc ShowModelOrganismsList {} { global db Tx LModelId set LModelId [lsort -unique [$db eval {select taxid from gold where Model=1}]] set w .limodor if {[winfo exists $w]} { return } toplevel $w wm title $w "Model Organisms" wm iconname $w "Model" wm protocol $w WM_DELETE_WINDOW KillParLaCroix wm withdraw $w # title frame frame $w.ftit grid $w.ftit -row 0 -column 0 -sticky w -pady {10 30} -padx 10 label $w.ftit.lb1 -font "Helvetica 20 bold italic" -text "SoTOL" -anchor w -justify left label $w.ftit.lb2 -text "Model Organisms" -font "Helvetica 12 bold" -anchor w -justify left grid $w.ftit.lb1 -row 0 -column 0 -sticky w grid $w.ftit.lb2 -row 0 -column 1 -sticky w -padx 20 frame $w.fmo grid $w.fmo -row 1 -column 0 -sticky ew -pady {5 30} -padx 10 set Lprm [$db eval "select taxid,Name,Rank from taxonomy where taxid in ([join $LModelId ,])"] set i 0 foreach {t n r} $Lprm { label $w.fmo.nm$i -text $n -font "Helvetica 12" -justify left -anchor w label $w.fmo.id$i -text $t -font "Helvetica 12" -justify right -anchor w label $w.fmo.rk$i -text $r -font "Helvetica 12" -justify left -anchor w grid $w.fmo.nm$i -row $i -column 0 -sticky w grid $w.fmo.id$i -row $i -column 1 -sticky w grid $w.fmo.rk$i -row $i -column 2 -sticky w incr i } grid columnconfig $w.fmo all -weight 1 button $w.bok -text " Close " -bg green1 -command "destroy $w" grid $w.bok -row 2 -column 0 -pady {30 10} MesCouleurs $w wm deiconify $w FenetreAuCentre $w return } proc ShowMoleculeDansRasMol {m i} { global RasM IlFautVoir "molecule $i" if {[set RasM(mol$m,See)]} { IlFautVoir "[set RasM(mol$m,Style)]" } else { IlFautVoir "[set RasM(mol$m,Style)] off" } return } 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 ShowNote {Nom} { return [SeeAby notes $Nom] } proc ShowNuc {K X Y Action {PositionNucleique 0}} { global ADN TDN RAC global OldX OldADN OldTDN OldPosD OldPosG OldLigne global RectangleDeSelectionNucleique global xDebutRectangleDeSelectionNucleique global yDebutRectangleDeSelectionNucleique global xFinRectangleDeSelectionNucleique global yFinRectangleDeSelectionNucleique if { ! [info exists ADN]} { ChargeADNetTDNetRAC } set xVrai [$K canvasx $X] set yVrai [$K canvasy $Y] if { $Action == "Point" } { set xDebutRectangleDeSelectionNucleique($K) $xVrai set yDebutRectangleDeSelectionNucleique($K) $yVrai } if {[info exists OldLigne($K)]} { catch {$K delete [set OldADN($K)]} catch {$K delete [set OldTDN($K)]} catch {$K delete [set OldPosD($K)]} catch {$K delete [set OldPosG($K)]} catch {$K delete [set OldLigne($K)]} unset OldLigne($K) if { $PositionNucleique == 0 && $X == [set OldX($K)] } { return } } set x [$K canvasx $X] set y [$K canvasy $Y] if {$PositionNucleique > 0} { set i $PositionNucleique } else { set i [PositionCanvaOriginaleX $K [$K canvasx $X]] } set Orient "Inconnue" set BoiteTouchee [BoiteDuCourant $K $X $Y] if { $BoiteTouchee != "" } { if { [expr $i < ([Box $BoiteTouchee debut]+[Box $BoiteTouchee fin])/2]} { set i [Box $BoiteTouchee debut] } else { set i [expr [Box $BoiteTouchee fin]+1] } set x [PositionCanvaActuelleX $K $i] set y [expr $y-30] set Orient [Box $BoiteTouchee orient] } set ZoneADN [string range $ADN [expr $i-20] [expr $i+19]] set ZoneTDN [string range $TDN [expr $i-20] [expr $i+19]] set PositionD [format " %4.4d" $i] set PositionG [format "%4.4d " [expr $i-1]] set Fonte {Courier 10} set OldX($K) $X if { $Orient != "R" } { set OldADN($K) [$K create text [expr $x] [expr $y-10] -text $ZoneADN -font $Fonte -anchor center] } if { $Orient != "F" } { set OldTDN($K) [$K create text [expr $x] [expr $y+10] -text $ZoneTDN -font $Fonte -anchor center] } set OldPosD($K) [$K create text $x [expr $y] -text $PositionD -font $Fonte -anchor w] set OldPosG($K) [$K create text $x [expr $y] -text $PositionG -font $Fonte -anchor e] set OldLigne($K) [$K create line $x [expr $y-1000] $x [expr $y+1000]] if {[info exists RectangleDeSelectionNucleique($K)]} { $K delete [set RectangleDeSelectionNucleique($K)] } if { $Action == "Motion" } { set xFinRectangleDeSelectionNucleique($K) $xVrai set yFinRectangleDeSelectionNucleique($K) $yVrai set RectangleDeSelectionNucleique($K) [$K create rect [set xDebutRectangleDeSelectionNucleique($K)] [set yDebutRectangleDeSelectionNucleique($K)] [set xFinRectangleDeSelectionNucleique($K)] [set yFinRectangleDeSelectionNucleique($K)] -outline "yellow" -width 3 -tags "SelectionNucleique"] } } proc ShowNucRosace {K X Y Action {PositionNucleique 0}} { global ADN TDN RAC global OldX OldADN OldTDN OldPosD OldPosG OldLigne global RectangleDeSelectionNucleique global xDebutRectangleDeSelectionNucleique global yDebutRectangleDeSelectionNucleique global xFinRectangleDeSelectionNucleique global yFinRectangleDeSelectionNucleique global xMinCercleDeSelectionNucleique global yMinCercleDeSelectionNucleique global xMaxCercleDeSelectionNucleique global yMaxCercleDeSelectionNucleique global DebutAngleDeSelectionNucleique global FinAngleDeSelectionNucleique global ParametresDuBoard global PremiereMotion global JeChargeADNduCalme global CouleurArcDeZone global OldRayonJaune if { [info exists JeChargeADNduCalme] } { return } if { ! [info exists ADN]} { set JeChargeADNduCalme 1 ChargeADNetTDNetRAC unset JeChargeADNduCalme } set PI 3.14159 set x [$K canvasx $X] set y [$K canvasy $Y] set xFin [set ParametresDuBoard($K,xFin)] set CentreX [set ParametresDuBoard($K,CentreX)] set CentreY [set ParametresDuBoard($K,CentreY)] if {$PositionNucleique > 0} { set Angle [expr $PositionNucleique*(2*$PI)/$xFin] set PositionSurADN $PositionNucleique } else { set Angle [HeureDansRosace $K $X $Y] set PositionSurADN [expr round($xFin*$Angle/(2*$PI))] } if { $Action == "Point" } { set PremiereMotion($K) 1 set xDebutRectangleDeSelectionNucleique($K) $PositionSurADN set DebutAngleDeSelectionNucleique($K) [expr ([DecalageAngulaireRosace] + $PI/2 - $Angle)*180./$PI] set RayonJaune [RayonDansRosace $K $X $Y] if {[info exists OldRayonJaune] && [expr abs($RayonJaune-$OldRayonJaune)/$RayonJaune < 0.05]} { set RayonJaune $OldRayonJaune } set OldRayonJaune $RayonJaune set xMinCercleDeSelectionNucleique($K) [expr $CentreX-$RayonJaune] set yMinCercleDeSelectionNucleique($K) [expr $CentreY-$RayonJaune] set xMaxCercleDeSelectionNucleique($K) [expr $CentreX+$RayonJaune] set yMaxCercleDeSelectionNucleique($K) [expr $CentreY+$RayonJaune] } if {[info exists OldLigne($K)]} { catch {$K delete [set OldADN($K)]} catch {$K delete [set OldTDN($K)]} catch {$K delete [set OldPosD($K)]} catch {$K delete [set OldPosG($K)]} catch {$K delete [set OldLigne($K)]} unset OldLigne($K) if { $PositionNucleique == 0 && $X == [set OldX($K)] } { return } } set i $PositionSurADN set Orient "Inconnue" set BoiteTouchee [BoiteDuCourant $K $X $Y] if { $BoiteTouchee != "" } { if { [expr $i < ([Box $BoiteTouchee debut]+[Box $BoiteTouchee fin])/2]} { set i [Box $BoiteTouchee debut] } else { set i [expr [Box $BoiteTouchee fin]+1] } set x [PositionCanvaActuelleX $K $i] set y [expr $y-30] set Orient [Box $BoiteTouchee orient] } set ZoneADN [string range $ADN [expr $i-20] [expr $i+19]] set ZoneTDN [string range $TDN [expr $i-20] [expr $i+19]] set PositionD [format " %4.4d" $i] set PositionG [format "%4.4d " [expr $i-1]] set Fonte {Courier 8} set OldX($K) $X if { $Orient != "R" } { set OldADN($K) [$K create text [expr $x] [expr $y-10] -text $ZoneADN -font $Fonte -anchor center] } if { $Orient != "F" } { set OldTDN($K) [$K create text [expr $x] [expr $y+10] -text $ZoneTDN -font $Fonte -anchor center] } set OldPosD($K) [$K create text $x [expr $y] -text $PositionD -font $Fonte -anchor w] set OldPosG($K) [$K create text $x [expr $y] -text $PositionG -font $Fonte -anchor e] set OldLigne($K) [$K create line $CentreX $CentreY $x $y] if { $Action == "Motion" } { if { ! [set PremiereMotion($K)]} { if {[info exists RectangleDeSelectionNucleique($K)]} { $K delete [set RectangleDeSelectionNucleique($K)] } } set PremiereMotion($K) 0 set xFinRectangleDeSelectionNucleique($K) $PositionSurADN set FinAngleDeSelectionNucleique($K) [expr ([DecalageAngulaireRosace] + $PI/2 - $Angle)*180./$PI] set Start [set DebutAngleDeSelectionNucleique($K)] set Extent [expr [set FinAngleDeSelectionNucleique($K)] - $Start] if {[info exists CouleurArcDeZone]} { set CouleurArc $CouleurArcDeZone set Epaisseur 7 set LesTags {} } else { set CouleurArc "yellow" set Epaisseur 3 set LesTags [list "SelectionNucleique"] } set RectangleDeSelectionNucleique($K) [$K create arc [set xMinCercleDeSelectionNucleique($K)] [set yMinCercleDeSelectionNucleique($K)] [set xMaxCercleDeSelectionNucleique($K)] [set yMaxCercleDeSelectionNucleique($K)] -start $Start -extent $Extent -style "arc" -outline $CouleurArc -width $Epaisseur -tags $LesTags] return [set RectangleDeSelectionNucleique($K)] } } proc ShowOli {Selection {Action ""}} { global ActionOli if { ! [info exists ActionOli]} { set ActionOli "All" } if {$Action==""} { set Action $ActionOli } if {[regexp "\n" $Selection]} { foreach Sel [split $Selection "\n"] { ShowOli $Sel $Action } return } if {[regexp { (P[0-9]+) \-+ (P[0-9]+)} $Selection Match P1 P2]} { set fP1 [ShowOli $P1 $Action] set fP2 [ShowOli $P2 $Action] return "$fP1 $fP2" } if {[regexp { >(P[0-9]+) } $Selection Match P]} { return [ShowOli $P $Action] } if {$Action=="Choose"} { set Action [ChoixParmi [lrange [Oli] 2 end]] } if {$Action==""} { return "" } set ActionOli $Action set P "" foreach PPossible [split $Selection " "] { if {[regexp {^P[0-9]+$} $PPossible]} { set P $PPossible ; break} } if {$P==""} { return "" } if {$Action=="All"} { set LesInfos {} if {[PourWscope]} { lappend LesInfos "<<Oligo $PKeepChevrons>>>" } foreach A [lrange [Oli] 2 end-1] { lappend LesInfos "\n$A :\n[Oli $P $A]" if {$A=="Type"} { set Fournis [Fournisseur $P] regsub " " $Fournis "\n " Fournis lappend LesInfos "\nFournisseur: $Fournis" lappend LesInfos " [OlIgbmc $P]" } } set Info [join $LesInfos "\n"] } else { set Info "[Oli $P $Action]" } set Texte $Info set Fen [AfficheVariable $Texte "AvecFormateAvecBlasteAvecOli" $P] return $Fen } proc ShowOligosFiles {Selection {GetThem ""}} { if {[regexp "\n" $Selection]} { foreach TexCoAvAp [split $Selection "\n"] { ShowOligosFiles $TexCoAvAp } return } set TexCoAvAp [string trim $Selection] if {[regexp "===$" $TexCoAvAp]} { append TexCoAvAp " " } set LesFichiers [ClonInventory $TexCoAvAp] if {$GetThem=="GetThem"} { return $LesFichiers } return [AfficheVariable [join $LesFichiers "\n"] "AvecDecFiOl" "OligosFilesOf$TexCoAvAp"] } proc ShowOrthologyResults {reciprocalHitOrthoT triClusterT putOrthoAnalysedT outputType} { upvar $reciprocalHitOrthoT reciprocalHitOrtho upvar $putOrthoAnalysedT putOrthoAnalysed upvar $triClusterT triCluster set compteur 0 puts "############################################################################" puts "###HOMOLOGUES (simple best hit)" array set compteurRapportsParOrgaHomo {} foreach {cle val} [array get putOrthoAnalysed] { set couple [split $cle ","] if {[lindex $putOrthoAnalysed($cle) 1]==1} { #on compte le nombre de rapports set orgaFrom [GetOrga [lindex $couple 0]] set orgaTo [GetOrga [lindex $couple 1]] if {![info exists compteurRapportsParOrgaHomo($orgaFrom,$orgaTo)]} { set compteurRapportsParOrgaHomo($orgaFrom,$orgaTo) 1 } else { incr compteurRapportsParOrgaHomo($orgaFrom,$orgaTo) } if {$outputType} { putLog "-->lien $cle : $val\n [BenEnteteTFA [lindex $couple 0]]\n [BenEnteteTFA [lindex $couple 1]]" "homology.log" } else { puts "-->groupe $cle : $val" puts " [BenEnteteTFA [lindex $couple 0]]" puts " [BenEnteteTFA [lindex $couple 1]]" } incr compteur } } if {$outputType} { putLog "###nbre de relations en tout : $compteur" "homology.log" putLog "###détails des relations par orga :" "homology.log" foreach {cle val} [array get compteurRapportsParOrgaHomo] { putLog "### - $cle : $val" "homology.log" } } foreach {cle val} [array get compteurRapportsParOrgaHomo] { puts "### - $cle : $val" } puts "###nbre de relations en tout: $compteur" set compteur 0 puts "############################################################################" puts "###ORTHO RECIPROQUES" array set compteurRapportsParOrgaOrtho {} foreach {cle val} [array get reciprocalHitOrtho] { set couple [split $cle ","] if {[info exists infos([lindex $couple 1],[lindex $couple 0])]} {continue} set infos([lindex $couple 0],[lindex $couple 1]) 1 #on compte le nombre de rapports set orgaFrom [GetOrga [lindex $couple 0]] set orgaTo [GetOrga [lindex $couple 1]] if {![info exists compteurRapportsParOrgaOrtho($orgaFrom,$orgaTo)]} { set compteurRapportsParOrgaOrtho($orgaFrom,$orgaTo) 1 } else { incr compteurRapportsParOrgaOrtho($orgaFrom,$orgaTo) } if {$outputType} { putLog "-->groupe $cle : $val\n [BenEnteteTFA [lindex $couple 0]]\n [BenEnteteTFA [lindex $couple 1]]" "orthology.log" } else { puts "-->groupe $cle : $val" puts " [BenEnteteTFA [lindex $couple 0]]" puts " [BenEnteteTFA [lindex $couple 1]]" } incr compteur } if {$outputType} { putLog "###nbre de relations en tout : $compteur" "orthology.log" putLog "###détails des relations par orga :" "orthology.log" foreach {cle val} [array get compteurRapportsParOrgaOrtho] { putLog "### - $cle : $val" "orthology.log" } } foreach {cle val} [array get compteurRapportsParOrgaOrtho] { puts "### - $cle : $val" } puts "###nbre de relations en tout: $compteur" set compteur 0 puts "############################################################################" puts "###ORTHO TRI CLUSTERS" array set compteurRapportsTriCluster {} foreach {cle val} [array get triCluster] { set triplet [split $cle ","] if {[info exists infos([lindex $triplet 1],[lindex $triplet 0],[lindex $triplet 2])] || [info exists infos([lindex $triplet 1],[lindex $triplet 2],[lindex $triplet 0])] || [info exists infos([lindex $triplet 0],[lindex $triplet 2],[lindex $triplet 1])] || [info exists infos([lindex $triplet 2],[lindex $triplet 0],[lindex $triplet 1])] || [info exists infos([lindex $triplet 0],[lindex $triplet 1],[lindex $triplet 2])] || [info exists infos([lindex $triplet 2],[lindex $triplet 1],[lindex $triplet 0])] } { continue } set infos([lindex $triplet 0],[lindex $triplet 1],[lindex $triplet 2]) 1 #on compte le nombre de rapports set orga1 [GetOrga [lindex $triplet 0]] set orga2 [GetOrga [lindex $triplet 1]] set orga3 [GetOrga [lindex $triplet 2]] if {![info exists compteurRapportsTriCluster($orga1,$orga2,$orga3)]} { set compteurRapportsTriCluster($orga1,$orga2,$orga3) 1 } else { incr compteurRapportsTriCluster($orga1,$orga2,$orga3) } if {$outputType} { putLog "-->groupe $cle : $val\n [BenEnteteTFA [lindex $triplet 0]]\n [BenEnteteTFA [lindex $triplet 1]]\n [BenEnteteTFA [lindex $triplet 2]]" "orthology.log" } else { puts "-->groupe $cle : $val" puts " [BenEnteteTFA [lindex $triplet 0]]" puts " [BenEnteteTFA [lindex $triplet 1]]" puts " [BenEnteteTFA [lindex $triplet 2]]" } incr compteur } if {$outputType} { putLog "###nbre de relations en tout : $compteur" "orthology.log" putLog "###détails des relations par orga :" "orthology.log" foreach {cle val} [array get compteurRapportsTriCluster] { putLog "### - $cle : $val" "orthology.log" } } foreach {cle val} [array get compteurRapportsTriCluster] { puts "### - $cle : $val" } puts "###nbre de relations en tout: $compteur" } proc ShowPC {Fichier} { set QS [GetQS $Fichier] set Q [lindex $QS 0] set S [lindex $QS 1] puts [PC $Q $S] exit } proc ShowPairGUIAgent {seq1 ag1 seq2 ag2 {type 1}} { global TAg LNOrdali WithGUI if {! $WithGUI} {return} set y1 [expr {[lsearch $LNOrdali $seq1] + 1}] set y2 [expr {[lsearch $LNOrdali $seq2] + 1}] if {$type == 1} { set d1 $TAg($ag1,$seq1,dep) set f1 $TAg($ag1,$seq1,fin) set d2 $TAg($ag2,$seq2,dep) set f2 $TAg($ag2,$seq2,fin) } else { lassign [Seq2Abs] d1 f1 d2 f2 } .t tag remove Spy 1.0 end .t tag remove Col 1.0 end if {$type == 1} { .t tag configure Spy -foreground white -background "#770000" -underline 1 } else { .t tag configure Spy -foreground white -background green -underline 1 } incr f1 ; incr f2 .t tag add Spy $y1.$d1 $y1.$f1 $y2.$d2 $y2.$f2 if {$d1 < $d2} { .t see $y1.$d1 } else { .t see $y1.$d2 } update idletasks tkwait variable ::DoStep return } proc ShowParalogyResults {rapportsValides rapportRejetes sansRapports outputType} { upvar $rapportsValides rapportsInParaValides upvar $rapportRejetes rapportsInParaRejetes upvar $sansRapports sansRapportsInPara ###inparalogs validés organisme par organisme, on va rapidement compter+afficher tout ça ######################################################################################### puts "###PARALOGUES VALIDES ########################################################" #modele = rapportsInParaValides($celuiDeBase,$listeAAnalyser,$orga) "$countOK/$aTrouver" array set compteurProtParOrga {} array set compteurGroupParOrga {} array set compteurRapportsParOrga {} array set compteurProtParRapportsParOrga {} foreach {cle val} [array get rapportsInParaValides] { set listt [split $cle ","] set lis [split [lindex $listt 0] " "] set currentOrga [GetOrga [lindex $lis 0]] set vsOrga [lindex $listt 1] #on compte le nombre total de proteines if {![info exists compteurProtParOrga($currentOrga)]} { set compteurProtParOrga($currentOrga) [llength $lis] } else { incr compteurProtParOrga($currentOrga) [llength $lis] } #on compte le nombre de groupe if {![info exists compteurProtParOrga($currentOrga)]} { set compteurGroupParOrga($currentOrga) 1 } else { incr compteurGroupParOrga($currentOrga) } #on compte le nombre de rapports if {![info exists compteurRapportsParOrga($currentOrga,$vsOrga)]} { set compteurRapportsParOrga($currentOrga,$vsOrga) 1 } else { incr compteurRapportsParOrga($currentOrga,$vsOrga) } #on compte le nombre de protéines par rapports if {![info exists compteurProtParRapportsParOrga($currentOrga,$vsOrga)]} { set compteurProtParRapportsParOrga($currentOrga,$vsOrga) [llength $lis] } else { incr compteurProtParRapportsParOrga($currentOrga,$vsOrga) [llength $lis] } if {$outputType} { set unGroupe "+++ inparalogs=$lis : validé $val / [lindex $listt 2] \n" foreach val1 $lis { append unGroupe " [BenEnteteTFA $val1] \n" } putLog $unGroupe "inParaValides.log" } else { puts "+++ inparalogs=$lis : validé $val / [lindex $listt 2]" foreach val1 $lis { puts " [BenEnteteTFA $val1]" } } } ###proteines détectées comme sans inparalogues ######################################################################################### puts "###PROTEINES SANS INPARALOGUES #############################################" #set sansRapportsInPara($celuiDeBase,$orga) "$countOK/$aTrouver" array set compteurProtParOrgaSans {} array set compteurGrpParOrgaSans {} foreach {cle val} [array get sansRapportsInPara] { set listt [split $cle ","] set base [lindex $listt 0] set currentOrga [GetOrga $base] set vsOrga [lindex $listt 1] #on compte le nombre total de proteines if {![info exists compteurProtParOrgaSans($currentOrga)]} { set compteurProtParOrgaSans($currentOrga) 1 } else { incr compteurProtParOrgaSans($currentOrga) } #on compte le nombre de rapports if {![info exists compteurGrpParOrgaSans($currentOrga,$vsOrga)]} { set compteurGrpParOrgaSans($currentOrga,$vsOrga) 1 } else { incr compteurGrpParOrgaSans($currentOrga,$vsOrga) } if {$outputType} { set unGroupe "+++ seul au monde = $base / $vsOrga \n" append unGroupe " [BenEnteteTFA $base]" putLog $unGroupe "sansInPara.log" } else { puts "+++ seul au monde = $base / $vsOrga \n" puts " [BenEnteteTFA $base]" } } ###inparalogs non validés organisme par organisme ######################################################################################### puts "###PARALOGUES REJETES ########################################################" #rapportsInParaRejetes($celuiDeBase,$listeAAnalyser,$orga) "$countOK/$aTrouver" array set compteurProtParOrgaBad {} array set compteurGroupParOrgaBad {} array set compteurRapportsParOrgaBad {} foreach {cle val} [array get rapportsInParaRejetes] { set listt [split $cle ","] set lis [split [lindex $listt 1] " "] set currentOrga [GetOrga [lindex $listt 0]] set vsOrga [lindex $listt 2] #on compte le nombre total de proteines if {![info exists compteurProtParOrgaBad($currentOrga)]} { set compteurProtParOrgaBad($currentOrga) [llength $lis] } else { incr compteurProtParOrgaBad($currentOrga) [llength $lis] } #on compte le nombre de groupe if {![info exists compteurGroupParOrgaBad($currentOrga)]} { set compteurGroupParOrgaBad($currentOrga) 1 } else { incr compteurGroupParOrgaBad($currentOrga) } #on compte le nombre de rapports if {![info exists compteurRapportsParOrgaBad($currentOrga,$vsOrga)]} { set compteurRapportsParOrgaBad($currentOrga,$vsOrga) 1 } else { incr compteurRapportsParOrgaBad($currentOrga,$vsOrga) } if {$outputType} { set unGroupe "+++ inparalogs=$lis : rejeté $val / [lindex $listt 2] \n" foreach val1 $lis { append unGroupe " [BenEnteteTFA $val1] \n" } putLog $unGroupe "inParaRejetes.log" } else { puts "+++ inparalogs=$lis : rejeté $val / [lindex $listt 2]" foreach val1 $lis { puts " [BenEnteteTFA $val1]" } } } #creation d'un bilan pour les proteines sans inparalogs ####################################################### if {$outputType} {putLog "###BILAN DES SANS INPARALOGUES [Maintenant]#################################################\n###nombre de protéines pour :" "sansInPara.log"} puts "###BILAN DES SANS INPARALOGUES [Maintenant]#################################################\n###nombre de protéines pour :" foreach {cle val} [array get compteurProtParOrgaSans] { if {$outputType} {putLog "### - $cle : $val" "sansInPara.log"} puts "### - $cle : $val" } foreach {cle val} [array get compteurGrpParOrgaSans] { set mots [split $cle ","] if {$outputType} {putLog "### - [lindex $mots 0] / [lindex $mots 1] : $val" "inParaValides.log"} puts "### - [lindex $mots 0] / [lindex $mots 1] : $val" } #creation d'un bilan pour les inparalogs confirmés ####################################################### if {$outputType} {putLog "###BILAN DES VALIDES [Maintenant]########################################################\n###nombre de protéines pour :" "inParaValides.log"} puts "###BILAN DES VALIDES [Maintenant]########################################################\n###nombre de protéines pour :" foreach {cle val} [array get compteurProtParOrga] { if {$outputType} {putLog "### - $cle : $val" "inParaValides.log"} puts "### - $cle : $val" } if {$outputType} {putLog "###nombre de groupes pour :" "inParaValides.log"} puts "###nombre de groupes pour :" foreach {cle val} [array get compteurGroupParOrga] { if {$outputType} {putLog "### - $cle : $val" "inParaValides.log"} puts "### - $cle : $val" } if {$outputType} {putLog "###nombre de rapports pour :" "inParaValides.log"} puts "###nombre de rapports pour :" foreach {cle val} [array get compteurRapportsParOrga] { set mots [split $cle ","] if {$outputType} {putLog "### - [lindex $mots 0] / [lindex $mots 1] : $val contains $compteurProtParRapportsParOrga($cle) proteins mean=[expr $compteurProtParRapportsParOrga($cle)/$val+0.0]" "inParaValides.log"} puts "### - [lindex $mots 0] / [lindex $mots 1] : $val contains $compteurProtParRapportsParOrga($cle) proteins mean=[expr $compteurProtParRapportsParOrga($cle)/$val+0.0]" } #creation d'un bilan pour les inparalogs rejetés ####################################################### if {$outputType} {putLog "###BILAN DES REJETES [Maintenant]########################################################\n###nombre de protéines pour :" "inParaRejetes.log"} puts "###BILAN DES REJETES [Maintenant]########################################################\n###nombre de protéines pour :" foreach {cle val} [array get compteurProtParOrgaBad] { if {$outputType} {putLog "### - $cle : $val" "inParaRejetes.log"} puts "### - $cle : $val" } if {$outputType} {putLog "###nombre de groupes pour :" "inParaRejetes.log"} puts "###nombre de groupes pour :" foreach {cle val} [array get compteurGroupParOrgaBad] { if {$outputType} {putLog "### - $cle : $val" "inParaRejetes.log"} puts "### - $cle : $val" } if {$outputType} {putLog "###nombre de rapports pour :" "inParaRejetes.log"} puts "###nombre de rapports pour :" foreach {cle val} [array get compteurRapportsParOrgaBad] { set mots [split $cle ","] if {$outputType} {putLog "### - [lindex $mots 0] / [lindex $mots 1] : $val" "inParaRejetes.log"} puts "### - [lindex $mots 0] / [lindex $mots 1] : $val" } puts "################################################################" } proc ShowPrimer {K PAB} { Wup "Permet d afficher les infos d un primer ou d un fragment" set Id [$K find withtag current] set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] #On a un oligo if {[regexp {^(P[0-9]+)_} $NomOligo Match P]} { return [ShowOli $P] } #On a le fragment set Debut [lindex $MesTags 2] set Fin [lindex $MesTags 3] return [ShowFragment $PAB $Debut $Fin] } proc ShowProtDiff {aseqT aseqU} { upvar $aseqT seqT $aseqU seqU set lg1 [string length $seqT] set lg2 [string length $seqU] puts "\n--- prot diff --------------" puts "seqT = $aseqT" puts "seqU = $aseqU" if {$lg1 > $lg2} {set lg $lg1} {set lg $lg2} for {set i 0} {$i < $lg} {incr i 50} { set st [string range $seqT $i $i+49] set su [string range $seqU $i $i+49] if {$su eq $st} { puts "[expr {$i + 1}]" puts "Same $su" } else { set Lst [split $st ""] set Lsu [split $su ""] set sok "" foreach cu $Lsu ct $Lst { if {$cu eq $ct} { append sok "." } elseif {$cu eq "-" || $ct eq "-"} { append sok " " } else { append sok "*" } } puts "[expr {$i + 1}]" puts "seqT $st" puts " $sok" puts "seqU $su" } puts "" } puts "--------------------" return } proc ShowRank {w x y} { #if {[$w gettags balloon] != {} } {return} set Lt [$w gettags current] #puts "Lt >$Lt<" #puts "[$w gettags balloon]" set x [expr {[$w canvasx $x] + 5}] set y [expr {[$w canvasx $y] + 5}] set id [$w create text $x $y -font "Helvetica 14 bold" -text "this is the rank" -justify left -anchor nw -tags {balloon}] $w lower $id sensor set R [$w create rectangle [$w bbox $id] -fill lightyellow -tags {balloon}] $w lower $R $id return } proc ShowRankOfNode {PAD x y} { #puts "ShowRank" #puts "x $x y $y" #set n [CanvasCoords2TaxId $PAD $x $y] set Lt [$PAD gettags current] if {"sensor" in $Lt} { set id [$PAD find below current] foreach t [$PAD gettags $id] { if {[regexp {(N|R)[0-9]+} $t]} { set n [string range $t 1 end] } } } if {$n eq ""} {return} set Rank $::Tx(Rank,$n) if {"BalloonFont" ni [font names]} { set BalloonFont TkTooltipFont } else { set BalloonFont "BalloonFont" } set x [expr {[$PAD canvasx $x] + 5}] set y [expr {[$PAD canvasy $y] + 5}] set id [$PAD create text [list $x $y] -font $BalloonFont -text $Rank -tag {crank} -anchor sw -justify left] set Lc [$PAD bbox $id] $PAD create rectangle $Lc -fill lightyellow -tag {crank} $PAD raise $id return } proc ShowRestrictionEnzyme {} { foreach E [RestrictionEnzyme ListOf Enzymes] { set Ligne [format "%-8s %-20s %s" $E [RestrictionEnzyme $E "Sequence"] [RestrictionEnzyme $E "SequenceCut"]] lappend LesLignes $Ligne } set Texte [join $LesLignes "\n"] return [AfficheVariable $Texte "AvecEnzyme" "RestrictionEnzymes"] } proc ShowTarget {Commande} { if {[regexp -nocase "ListAllTargets" $Commande]} { return [FileMoi] } if {[regexp -nocase "TargetId=" $Commande Clef]} { set SpineID [StringApres $Clef dans $Commande] } else { set SpineID $Commande } if {[EstUnPAB $SpineID]} { set GscopeID $SpineID } else { set GscopeID [GscopeID $SpineID] } return [FileMoi macsimHtml $GscopeID] } proc ShowText {Page Maniere {NomDuFichierOrigine ""}} { Wup "Shows the text Page in a listbox, with a lot of buttons." Wup "Copyright 1999 Raymond Ripp" global PagePropre set w [NomDe fenetre] regsub -all {\t} $Page " " PagePropre($w) if { $NomDuFichierOrigine == "" } { set NomDuFichierOrigine "Tsointsoin" } toplevel $w set Titre "$NomDuFichierOrigine" wm title $w "$Titre" wm iconname $w "$Titre" label $w.msg -wraplength 4i -justify left -text "$Titre" pack $w.msg -side top frame $w.buttons pack $w.buttons -side bottom -fill x -pady 2m button $w.buttons.dismiss -text "Dismiss//?" -background "red" -command "destroy $w" bind $w.buttons.dismiss <3> "QueFontLesBoutonsDe $w" pack $w.buttons.dismiss -side left -expand 1 button $w.buttons.save -text "Save\nAll/Sel/Edit" bind $w.buttons.save <1> "SaveAs \[set PagePropre($w)\]" bind $w.buttons.save <2> "SaveAs \[selection get\]" bind $w.buttons.save <3> "EditAndShow \[set PagePropre($w)\]" bind $w.buttons.save "destroy $w.buttons.save" pack $w.buttons.save -side left -expand 1 button $w.buttons.focalise -text "Nex/Top/New" bind $w.buttons.focalise <1> "Focalise $w" bind $w.buttons.focalise <2> "Focalise $w top" bind $w.buttons.focalise <3> "Focalise $w ask" pack $w.buttons.focalise -side left -expand 1 if { [regexp "AvecShow" $Maniere] } { button $w.buttons.show -text "Show" -background green -foreground black bind $w.buttons.show <1> {AfficheLesFichiers "[selection get]" "GrandeLargeur"} pack $w.buttons.show -side right -expand 1 } if {[regexp "AvecAffiProc" $Maniere]} { button $w.buttons.affiproc -text "Show" -background "green" bind $w.buttons.affiproc <1> "AfficheLaProc \[selection get\]" pack $w.buttons.affiproc -side left -expand 1 } if {[regexp "AvecCallProc" $Maniere]} { button $w.buttons.quijappel -text "Called Procs sel./all" -background "green" bind $w.buttons.quijappel <1> "QuiJAppel $NomDuFichierOrigine \[selection get\] " bind $w.buttons.quijappel <2> "AfficheLesProcs NameIsIn \[QuiJAppel $NomDuFichierOrigine LaListeMerci\]" pack $w.buttons.quijappel -side left -expand 1 button $w.buttons.quimappel -text "Calling Procs" -background "yellow" bind $w.buttons.quimappel <1> "QuiMAppel $NomDuFichierOrigine" pack $w.buttons.quimappel -side left -expand 1 button $w.buttons.execute -text "Execute\nEdit\nNew proc" -background "orange" bind $w.buttons.execute <1> "CompleteEtExecute \[selection get\]" bind $w.buttons.execute "CreeUneNouvelleProcedure \[set PagePropre($w)\]" bind $w.buttons.execute "CreeUneNouvelleProcedure" pack $w.buttons.execute -side left -expand 1 } frame $w.frame -borderwidth 5 pack $w.frame -side top -expand yes -fill both scrollbar $w.frame.yscroll -command "$w.frame.list yview" scrollbar $w.frame.xscroll -command "$w.frame.list xview" -orient horizontal set Largeur 80 set Hauteur 30 if { [regexp "GrandeLargeur" $Maniere] } { set Largeur 128 } listbox $w.frame.list -width $Largeur -height $Hauteur -setgrid 1 -yscroll "$w.frame.yscroll set" -xscroll "$w.frame.xscroll set" -selectmode extended -background "deepskyblue4" -foreground "white" -font {Courier 10} grid $w.frame.list -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $w.frame 0 -weight 1 -minsize 0 grid columnconfig $w.frame 0 -weight 1 -minsize 0 foreach Ligne [split [set PagePropre($w)] "\n"] { $w.frame.list insert end $Ligne } return $w } proc ShowTreeFromDirectory {Dir} { package require BLT namespace import blt::* set top [GetAbsolutePath $Dir] set trim "$top" set T [tree create] CreateTreeFromDirectory $T root $top set w [NomDe fenetre] toplevel $w set Ta $w if {$Ta==""} { set Ta "." } set TV "$w.tv" set HoSb "$w.hs" set VeSb "$w.vs" scrollbar $HoSb -orient vertical -command "$TV yview" scrollbar $VeSb -orient horizontal -command "$TV xview" treeview $TV -width 100 -yscrollcommand "$HoSb set" -xscrollcommand "$VeSb set" -selectmode single -tree $T $TV column configure treeView -text "Salut toi" #file $TV column insert end mtime atime gid $TV column insert end nlink mode type ctime uid ino size dev $TV column configure uid -background \#eaeaff -relief raised $TV column configure mtime -hide no -bg \#ffeaea -relief raised $TV column configure size gid nlink uid ino dev -justify left -edit yes $TV column configure size type -justify left -edit yes $TV column configure treeView -hide no -edit no -icon blt::tv::normalOpenFolder focus $TV $T find root -glob *.html -addtag "html_files" $TV entry configure "html_files" -foreground magenta $TV column bind all { %W configure -flat no } foreach Colonne [$TV column names] { $TV column configure $Colonne -command [list SortColumnForTreeView $Colonne $TV] } table $Ta 0,0 $TV -fill both 0,1 $HoSb -fill y 1,0 $VeSb -fill x table configure $Ta c1 r1 -resize none } proc ShowTreeLegend {AId {quoi draw}} { global Abr # if hide legend, if {$quoi eq "hide"} { $Abr($AId,PAD) delete Legend return } if {$quoi eq "draw"} { # if text window for caption definition exists # then create a new caption if {[winfo exists $Abr($AId,LegWText)]} { set txt [$Abr($AId,LegWText) get 1.0 end] set Abr($AId,Text) $txt if {$Abr($AId,LegGap)} { if {$Abr($AId,TypeGapTree) eq "global"} { append txt "\nGlobal gap removal" } else { append txt "\nPairwise gap removal" } } if {$Abr($AId,LegSites)} { append txt "\n[set Abr($AId,NbrSites)] sites" } if {$Abr($AId,LegBoot)} { if {$Abr($AId,BootDone)} { append txt "\n$Abr($AId,TreeNBoot) bootstraps; Threshold $Abr($AId,ThresBootPC)%" } } if {$Abr($AId,LegCoul)} { set i 1 ; set cum "\n" foreach g [lrange $::LNDG 1 end] { if {$g eq "bidon" || $g eq "grise"} { continue } set n [string range $g 5 end] set col [CouleurDuGroupe $n] append cum "$g $col " if {! ($i % 5)} { append txt $cum set cum "" } } if {$cum ne ""} { append txt $cum } } set txt "$txt\n" set Abr($AId,Legend) $txt } else { set txt $Abr($AId,Legend) } } # pour dismiis et si on vient de DefineLegend if {[winfo exists $Abr($AId,LegWText)]} { destroy [winfo toplevel $Abr($AId,LegWText)] if {$quoi eq "dismiss"} { set Abr($AId,AddLeg) 0 $Abr($AId,PAD delete Legend return } } if {$txt eq ""} { return } # on trace ! set PAD [set Abr($AId,PAD)] lassign [$PAD bbox all] Axm Aym Axx Ayx $PAD create text 0 0 -text $txt -anchor nw -justify left -tags {Legend} lassign [$PAD bbox Legend] xm ym xx yx $PAD delete Legend set wx [expr {$xx-$xm+1}] set wy [expr {$yx-$ym+1}] # cherche dans zone si y a une place set fin 0 for {set i $Axm} {$i <= $Axx} {incr i 10} { set x2 [expr {$i+$wx}] for {set j $Aym} {$j <= $Ayx} {incr j 10} { set y2 [expr {$j+$wy}] set Lt [$PAD find overlapping $i $j $x2 $y2] if {$Lt == {} } { set fin 1 break } } if {$fin} { break } } if {! $fin} { set lx $Axm ; set ly $Ayx } else { set lx $i ; set ly $j } $PAD create text $lx $ly -text $txt -anchor nw -justify left -tags {Legend} return } proc ShowVEDidier {args} { set Titre [join $args "_"] regsub -all " " $Titre "_" Titre set Collapse "" if {[llength $args]%2==1} { set Collapse [lindex $args end] set args [lrange $args 0 end-1] } set Collapse [string equal -nocase $Collapse "Collapse"] set LesLignes {} set LesNouveaux {} foreach VE [VEDidier ListeDes VE] { set ProtName [VEDidier $VE "ProtName"] set Scientist [VEDidier $VE "Scientist"] set Vectorname [VEDidier $VE "Vectorname"] set Organism [VEDidier $VE "Organism"] set DomainLimit [string trim [VEDidier $VE "DomainLimit"]] set CodeRipp [VEDidier $VE "CodeRipp"] set ProtOrga "${ProtName}_$Organism" regsub -all " " $ProtOrga "_" ProtOrga set AliasGscope [AliasAlias $ProtOrga "Gscope"] set Comments [VEDidier $VE "Comments"] if {$AliasGscope==""} { set AliasGscope "-" } if {$CodeRipp==""} { set CodeRipp "-" } set Ok 1 foreach {C V} $args { if {$V=="NotEmpty"} { if {[set $C]==""} { set Ok 0 ; break } continue } if { ! [string equal [set $C] $V] } { set Ok 0 ; break } } if { ! $Ok } { continue } if {$Collapse && [info exists DejaVu($ProtOrga)]} { continue } set PGS "" set DE "" if {$AliasGscope!="-"} { set PGS [NomDuAlias $AliasGscope] set DE [DefinitionRapide $PGS] } if {$PGS!=""} { lappend LesNouveaux "$ProtName;$Organism;$PGS;$AliasGscope;$DE" } set DejaVu($ProtOrga) 1 lappend LesLignes "$VE $ProtName $Organism $AliasGscope $Vectorname $Scientist $DomainLimit $CodeRipp $PGS $Organism $Comments $DE" } SauveLesLignes $LesNouveaux dans "[Fiches]/NouveauCodeRipp.txt" return [AfficheVariable [join $LesLignes "\n"] "" $Titre] } proc ShowVirtualPPCR {Selection {Action ""}} { global ActionShowVirtualPPCR if { ! [info exists ActionShowVirtualPPCR]} { set ActionShowVirtualPPCR "All" } if {$Action==""} { set Action $ActionShowVirtualPPCR } if {[regexp "\n" $Selection]} { foreach Sel [split $Selection "\n"] { ShowVirtualPPCR $Sel $Action } return } if {[regexp {>(N[0-9]+) } $Selection Match N]} { return [ShowVirtualPPCR $N $Action] } if {$Action=="Choose"} { set Action [ChoixParmi [VirtualPPCREnStock "LesQuois"]] } if {$Action==""} { return "" } set ActionShowVirtualPPCR $Action set N "" foreach NPossible [split $Selection " "] { if {[regexp {^N[0-9]+$} $NPossible]} { set N $NPossible ; break} } if {$N==""} { return "" } if {$Action=="All"} { set LesInfos {} foreach A [VirtualPPCREnStock "LesQuois"] { lappend LesInfos "\n$A :\n[VirtualPPCREnStock $N $A]" } set Info [join $LesInfos "\n"] } else { set Info "[VirtualPPCREnStock $N $Action]" } set Texte $Info set Fen [AfficheVariable $Texte "AvecFormateAvecBlasteAvecVirtualPPCRAvecOli" $N] return $Fen } proc ShowZonards {K NomDeDistri} { set Touche [$K find withtag current] set LesTags [$K gettags $Touche] lassign $LesTags Distri I J Clade RankZone lassign [split $Clade "_"] TaxId set LaSortie {} set LesNoms [MemoZonards $NomDeDistri $TaxId-$RankZone ListOfNom] foreach Nom $LesNoms { set Id [ExtraitInfo $Nom Id] set Ac [ExtraitInfo $Nom Ac] set ValiGN [ExtraitInfo $Nom ValiGN] lappend LesGn $ValiGN set ValiDE [ExtraitInfo $Nom ValiDE] lappend LaSortie "$Nom\t$Id\t$Ac\t$ValiGN\t$ValiDE" } set F [AfficheListe "#n°[PreFixe]\n$LaSortie" "AvecFetch" "Hits with at least $Distri for $Clade"] set GeneNames [join $LesGn ","] set Noms [join $LesNoms ","] set B [BoutonneLaFenetre $F "GeneOntology / Show Taxobla"] bind $B <1> "GoGetShowFromGeneList $GeneNames" bind $B <2> "SeeAby Taxobla \[selection get\]" $B configure -background "Magenta" set B [BoutonneLaFenetre $F "Homo sapiens Hits/ Info/ GOs"] bind $B <1> "ShowHsapHits \[set PagePropre($F)\] Hits" bind $B <2> "ShowHsapHits \[set PagePropre($F)\] Info" bind $B <3> "ShowHsapHits \[set PagePropre($F)\] GO" $B configure -background "Orange" } proc Sign {V S} { if { 0 <= $S } { return [expr abs($V)] } else { return [expr -abs($V)] } } proc Signal {{S ""} {TFAouSEQ ""}} { global RepertoireDuGenome global MemoSignaux if {$S==""} { set S "ListOf" ; set TFAouSEQ "TFA" } if {[PourWscope] && $S=="ListOf"} { set S "All" ; set TFAouSEQ "HTML" } if {$TFAouSEQ==""} { set TFAouSEQ "SEQ" } set TFAouSEQ [string toupper $TFAouSEQ] if {[info exists MemoSignaux($S,$TFAouSEQ)]} { return [set MemoSignaux($S,$TFAouSEQ)] } if {[info exists MemoSignaux("EstCharge")]} { return "" } set MemoSignaux("EstCharge") 1 set FichierTFAs [LeFichierDesSignaux] set LesAccess [LaSequenceDuTFAs $FichierTFAs "LaListeDesAccess"] set MemoSignaux(LaListeDesAccess,SEQ) $LesAccess foreach Signal [lsort $LesAccess] { set TFA [LaSequenceDuTFAs $FichierTFAs $Signal] set MemoSignaux($Signal,TFA) $TFA set MemoSignaux($Signal,SEQ) [QueLaSequence $TFA] if {[regexp "_" $Signal]} { regsub "_" $Signal "" Signal set MemoSignaux($Signal,TFA) $TFA set MemoSignaux($Signal,SEQ) [QueLaSequence $TFA] } lappend MemoSignaux(ListOf,SIGNALS) $Signal lappend MemoSignaux(ListOf,TFA) $TFA } set MemoSignaux(All,TFA) [join $MemoSignaux(ListOf,TFA) "\n"] set MemoSignaux(All,HTML) "
    \n$MemoSignaux(All,TFA)\n
    " return [Signal $S $TFAouSEQ] } proc SignalDAutresHomologues {Nom} { set AutresHomologues [ExtraitInfo $Nom "AutresHomologues"] if { ! [regexp "signal" $AutresHomologues]} { return "" } return "$AutresHomologues" } proc SignalIntensities {Nom {Quoi ""}} { if {$Quoi==""} { set Quoi "All"} set Fichier "[SignalIntensityDir]/${Nom}_$Quoi" if {[FileExists $Fichier]} { return [ContenuDuFichier $Fichier] } set Probesets [ExtraitInfo $Nom "ProbeSetId:"] regsub -all "/" $Probesets "-OU-" Probesets regsub -all "," $Probesets " " Probesets set LesPS [LesMotsDeLaLigne $Probesets] set LaSortie {} foreach PS $LesPS { set Fichier "[SignalIntensityDir]/$Nom-$PS" if {[FileAbsent $Fichier]} {continue} if {$Quoi=="FileNames"} { lappend LaSortie $Fichier } if {$Quoi=="All"} { lappend LaSortie [ContenuDuFichier $Fichier] } } return [join $LaSortie "\n"] } proc SignalIntensityDir {} { return "[RepertoireDuGenome]/transcriptomique/SignalIntensity" } proc SignalIntensityFromExp30 {} { #set FichierEntree "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/PSPoulet" set FichierEntree "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/PSPouletControl" set premierefois 1 foreach Ligne [LesLignesDuFichier $FichierEntree] { set LesMots [split $Ligne "\t"] set GI [lindex $LesMots 0] set Acc [lindex $LesMots 1] set Probesets [lindex $LesMots 2] set LesProbesets [split $Probesets ","] foreach PS $LesProbesets { set Title [AffyAnnoChicken $PS Gene_Title] set Symbol [AffyAnnoChicken $PS Gene_Symbol] #Espionne "GI $GI Acc $Acc PS $PS" set LesLignesTransc [TrouveIntensitySignalParticulierChicken $PS 30] foreach LigneTransc $LesLignesTransc { #Espionne "LigneTransc $LigneTransc" set LesMotsTransc [split $LigneTransc "\t"] set sample [lindex $LesMotsTransc 2] set SI [lindex $LesMotsTransc 3] set Repl [lindex $LesMotsTransc 4] set AS [lindex $LesMotsTransc 5] if {$premierefois} { # Espionne "entre premierefois" set GIprecedent $GI set Accprecedent $Acc set PSprecedent $PS set Titleprecedent $Title set Symbolprecedent $Symbol set sampleprecedent $sample set SIprecedent $SI lappend LesSI $SI set ASprecedent $AS set premierefois 0 continue } else { if {$PSprecedent==$PS && $sample==$sampleprecedent && $AS==$ASprecedent} { # Espionne "entre deuxieme" lappend LesSI $SI } else { # Espionne "entre troisieme" set long [llength $LesSI] set SIjoin [join $LesSI ","] set premierefois2 1 foreach SIAS $LesSI { if {$premierefois2} { set somme $SIAS set premierefois2 0 } else { set somme [expr $somme + $SIAS] } } set avg [expr $somme/$long] set LigneResult "$GIprecedent\t$Accprecedent\t$PSprecedent\t$Titleprecedent ($Symbolprecedent)\t$sampleprecedent\t$ASprecedent\t($SIjoin)\t$avg" lappend LesLigneResult $LigneResult set LesSI {} set GIprecedent $GI set Accprecedent $Acc set PSprecedent $PS set Titleprecedent $Title set Symbolprecedent $Symbol set sampleprecedent $sample set SIprecedent $SI lappend LesSI $SI set ASprecedent $AS } } } } } #Espionne "entre quatrieme" set long [llength $LesSI] set SIjoin [join $LesSI ","] set premierefois2 1 foreach SIAS $LesSI { if {$premierefois2} { set somme $SIAS set premierefois2 0 } else { set somme [expr $somme + $SIAS] } } set avg [expr $somme/$long] set LigneResult "$GIprecedent\t$Accprecedent\t$PSprecedent\t$Titleprecedent ($Symbolprecedent)\t$sampleprecedent\t$ASprecedent\t($SIjoin)\t$avg" lappend LesLigneResult $LigneResult #SauveLesLignes $LesLigneResult dans "/genomics/link/Tau/GSTRdCVF/BlastpSurStringPoulet/SIPoulet" SauveLesLignes $LesLigneResult dans "/genomics/link/Tau/GSTControl/BlastpSurStringPoulet/SIPouletControl" } proc SignalMiner {LongueurDesMots LongueurRallongee UpstreamOuDownstream ASortir} { #Recherche un enrichissement en signal en criblant tous les mots possibles dans un intervalle donné (en amont ou en aval d'une séquence) # Déclaration des fichiers set FichierDesRallonges [open "/tmp/Conservation/SequencesDes230000rallongeesDe100Downstream.txt" "r"] #set FichierDeMining "/tmp/Conservation/Mining/Mining230000AvecMotDe$LongueurDesMots.RallongesDe$LongueurRallongee.Top$ASortir.txt" set FichierDeMining "/tmp/SignalMiner.txt" set PathOut $FichierDeMining set SeqOut "/tmp/Conservation/SeqOut.txt" # Suppressions des éventuelles versions précédentes des fichiers if { [file exists $FichierDeMining] } { file delete $FichierDeMining } #Compteurs set CompteurLus 0 set CompteurGC 0 set CompteurDeChar 0 Espionne " " puts -nonewline "Chargement de la Liste des séquences à explorer ..." while { [gets $FichierDesRallonges LigneRalongee] >=0 } { incr CompteurLus ScanLaListe $LigneRalongee StafID Sequence # ScanLaListe $LigneRalongee Sequence Reste if {$UpstreamOuDownstream == "Upstream"} { set Debut 0 set Fin $LongueurRallongee set Rangy [string range $Sequence $Debut $Fin] } if {$UpstreamOuDownstream == "Downstream"} { set LongueurDeLaSequence [string length $Sequence] set Debut [expr $LongueurDeLaSequence - ($LongueurRallongee + 1)] set Fin [expr $LongueurDeLaSequence - 1] set Rangy [string range $Sequence $Debut $Fin] } set ListeDesChars [split [string range $Sequence $Debut $Fin] ""] foreach Char $ListeDesChars { if { $Char == "G" || $Char == "C" } { incr CompteurGC } incr CompteurDeChar } lappend ListeDesSequences $Rangy } set ListeDesCompteursDuCadre {} Espionne " (Terminé !)" set TauxGC [expr (100*$CompteurGC)/$CompteurDeChar] Espionne "Taux de GC : $TauxGC %" set NombreDeCadres [expr $LongueurRallongee - $LongueurDesMots ] for {set Cadre 0 } { $Cadre <= $NombreDeCadres} { incr Cadre } { array unset Compteurs set GoodCadre [expr $Cadre + 1] puts $FichierDeMining "Cadre $GoodCadre :" Espionne "Recherche dans le cadre $GoodCadre" foreach Sequence $ListeDesSequences { AppendAuFichier $SeqOut $Sequence set Range [string range $Sequence $Cadre [expr $Cadre + $LongueurDesMots - 1]] set Range [string toupper $Range] if { [regexp {N} $Range] } { continue } if { ![info exists Compteurs($Range)] } { set Compteurs($Range) 1 } else { incr Compteurs($Range) } } foreach Mot [array names Compteurs] { lappend ListeDesCompteursDuCadre [list $Compteurs($Mot) $Mot] } set ListeDesCompteursDuCadre [lsort -index 0 -integer -decreasing $ListeDesCompteursDuCadre] for { set K 0 } { $K < $ASortir } { incr K} { set Classement [lindex $ListeDesCompteursDuCadre $K] set GoodK [expr $K+1] AppendAuFichier $FichierDeMining "$GoodK: $Classement" } set ListeDesCompteursDuCadre {} set Meilleur "" set Second "" } Espionne "Resultats écrits dans $PathOut (Lus: $CompteurLus)" } proc SignalParser {TopCombien Fichier} { set FichierAparser [open "$Fichier" "r"] set FichierBienFormate "$Fichier.sig" set FichierBienFormateQueLesEffectifs "$Fichier.sfx" # Suppressions des éventuelles versions précédentes des fichiers if { [file exists $FichierBienFormate] } { file delete $FichierBienFormate } #Initialisations Espionne "" Espionne "Initialisations" for {set I 1} {$I<=$TopCombien} {incr I} { set LigneDuClassement$I "" set LigneDuClassementQueLesEffectifs$I "" } #Boucle Espionne "Boucle" while { [gets $FichierAparser Ligne] >=0 } { for {set I 1} {$I<=$TopCombien} {incr I} { gets $FichierAparser Ligne ScanLaListe $Ligne Numero Nombre Sequence set LigneDuClassement [set LigneDuClassement$I] set LigneDuClassementQueLesEffectifs [set LigneDuClassementQueLesEffectifs$I] set LigneDuClassement$I "$LigneDuClassement $Ligne" set LigneDuClassementQueLesEffectifs$I "$LigneDuClassementQueLesEffectifs $Nombre" } } #Ecriture Espionne "Ecriture dans $FichierBienFormate" for {set I 1} {$I<=$TopCombien} {incr I} { set LigneDuClassement [set LigneDuClassement$I] set LigneDuClassementQueLesEffectifs [set LigneDuClassementQueLesEffectifs$I] AppendAuFichier $FichierBienFormate "$LigneDuClassement" AppendAuFichier $FichierBienFormateQueLesEffectifs "$LigneDuClassementQueLesEffectifs" } } proc SignalReverse {Signal} { return [NucToReverseAndComplementNuc [Signal $Signal]] } proc SigneFichier {file} { if {[regexp "[pid]_" $file]} { regsub "[pid]_" $file "" nfile } else { set f "[pid]_[file tail $file]" set nfile [file join [file dirname $file] $f] } return $nfile } proc SignificationDesCouleursDeLOligo {} { Wup "Signification des Couleurs des oligos" set Texte "Oligonucleotide Color:\n" append Texte "\n" append Texte "White ------ O Oligo detected\n" append Texte "Green ------ 1 Oligo detected\n" append Texte "Blue ------- 2 Oligos detected\n" append Texte "Yellow ---- 3-5 Oligos detected\n" append Texte "Orange ---- 6-8 Oligos detected\n" append Texte "Red ------- >8 Oligos detected\n" append Texte "Black ----- -1 Problem\n" after idle { .fairelire.msg configure -wraplength 10i -background red -font "Courier 12 bold"} tk_dialog .fairelire "Please press OK" "$Texte" {} 0 Acknowledge catch {destroy .fairelire} return "" } proc SignificationDesCouleursDuPrimer {} { Wup "Signification des Couleurs des oligos" set Texte "Primer Color:\n" append Texte "\n" append Texte "Green ------ Primers\n" append Texte "Blue ------- Amplified Region\n" append Texte "Red ------- Problem\n" after idle {.fairelire.msg configure -wraplength 10i -background red -font "Courier 12 bold"} tk_dialog .fairelire "Please press OK" "$Texte" {} 0 Acknowledge catch {destroy .fairelire} return "" } proc SignificationLingeFrameFard {K} { global TypeCouleur global TypeFard global TypeCouleurDuLinge global TypeFardDuLinge set U 15 if {[info exists TypeCouleurDuLinge($K)]} { set TypeC [lindex [LaTraduction [list [set TypeCouleurDuLinge($K)]]] 0] set Linge "Banner : $TypeC" set Signif "" set KLinge "${K}_Linge" foreach S [GetSignification "ToutesLesCouleursPossibles" $KLinge] { set Sppp [string range " $S [string repeat "_" $U]" 0 $U] append Signif "\n$Sppp [GetSignification $S $KLinge]" } append Linge "\n$Signif" } else { set Linge "No color for the banner" } if {[info exists TypeCouleur($K)]} { set TypeC [lindex [LaTraduction [list [set TypeCouleur($K)]]] 0] set Frames "ORFs : $TypeC" set Signif "" foreach S [GetSignification "ToutesLesCouleursPossibles" $K] { set Sppp [string range " $S [string repeat "_" $U]" 0 $U] append Signif "\n$Sppp [GetSignification $S $K]" } append Frames "\n$Signif" } else { set Frames "No color for ORFs" } if {[info exists TypeFard($K)]} { set TypeC [lindex [LaTraduction [list [set TypeFard($K)]]] 0] set Fard "Highlight color : $TypeC" } else { set Fard "No highlight color" } return "$Linge\n\n\n$Frames\n\n\n$Fard" } proc SimExtra {} { global LNDG SDG Sequences foreach g $LNDG { set SAli [list] unset -nocomplain TP foreach n [set SDG($g)] { lappend SAli $n [string range [set Sequences($n)] 1003 1205] } CalculeLesPCIGenerique $SAli TP lassign [SM_StatPCI [array get TP]] moy sd min max puts "\ngroupe $g" puts " moyenne $moy" puts " std. dev. $sd" puts " min pci $min" puts " max pci $max" } return } proc SimilitudeSurUneZone {i j} { global ADN CDN set Score 0 set l $j for {set k $i} {$k < [expr $i+10]} {incr k} { if {[string index $ADN $k] == [string index $CDN $l]} { incr Score } incr l } return $Score } proc SimpleFasta {{FicIn ""} {FicOu ""} {Ask ""}} { set Ask [string equal -nocase "Ask" $Ask] if {$FicIn==""} { set FicIn [ButineArborescence] } if {$FicOu==""} { set FicOu $FicIn regsub {\.tfa$} $FicOu "" FicOu set FicOu "$FicIn.new.tfa" } set LeNew {} foreach Ligne [LesLignesDuFichier $FicIn] { if { ! [regexp ">" $Ligne]} { lappend LeNew $Ligne ; continue } regsub {^>gi\|} $Ligne ">" Ligne regsub {^>} $Ligne "" Ligne regsub -all {\|} $Ligne " " Ligne scan $Ligne "%s" Access regsub "^$Access " $Ligne "" Ligne if {[regexp {\[([^\]]+)\]$} $Ligne Match OS]} { regsub {\([^\)]+\) } $OS "" OS ; #rR pour enlever cette merde de (Silurana) set G "" ; set E "" scan $OS "%s %s" G E set OS "$G $E" if {[info exists Petit($OS)]} { set Gesp $Petit($OS) } else { set G1 [string index $G 0] set i 2 set Esp [string range $E 0 $i] set Gesp [string totitle "$G1$Esp"] while {[info exists DejaVu($Gesp)]} { if { ! $Ask} { incr i if {$i>=[string length $E]} { append Gesp "x" ; continue } set Esp [string range $E 0 $i] set Gesp [string totitle "$G1$Esp"] continue } FaireLire "Trying to find a short name for $OS\n I already saw $Gesp for $DejaVu($Gesp). \n Please tell me what I have to use for $OS" set Gesp [Entre $OS] } set DejaVu($Gesp) $OS set Petit($OS) $Gesp } append Access "_$Gesp" } set Ligne ">$Access $Ligne" lappend LeNew $Ligne if {[string equal -nocase $FicOu "Show"]} { Espionne $Ligne } } if {[string equal -nocase $FicOu "Show"]} { return "I dodn't create anny output." } return [SauveLesLignes $LeNew dasn $FicOu] } proc SimplementKeywords2_0 {lDefsDesRef MotsOuExprCreux} { # Converti la chaine de mots ou expr creux en liste set lMotsOuExprCreux [split [string trim $MotsOuExprCreux "\#"] "\#"] # Création de la liste des mots concaténés après quelques pré-traitements set lMotsDesRef {} foreach DefRef $lDefsDesRef { # Normalisation de la def set DefRefNorm [NormaliseDEOuMotOuExpr $DefRef] # Regroupement de plusieurs mots en une expression pour les expressions creuses # (composées de plusieurs mots séparés par des espaces) foreach Mot $lMotsOuExprCreux { #regsub -all -nocase [MotOuExprNormPourRegexp $Mot] $DefRefNorm {{\0}} DefRefNorm set regexMC [regsub -all -nocase {[^a-z0-9]} [NormaliseDEOuMotOuExpr $Mot] " "] if {[regexp {\s} $regexMC]} {regsub -all -nocase $regexMC $DefRefNorm {{\0}} DefRefNorm} } # Ajoute les mots à la liste... foreach Mot $DefRefNorm { set MotNorm [NormaliseDEOuMotOuExpr $Mot] # ... s'ils n'ont pas au moins une lettre # (nombres, fractions, EC, ...) if {[regexp -nocase {[a-z]} $MotNorm]} { lappend lMotsDesRef $MotNorm } } } set Nref [llength $lMotsDesRef] # Construit tableau n(mot en majuscules) = nb_occurences foreach MotRef $lMotsDesRef { set MotRef [string toupper [regsub -all -nocase {[^a-z0-9]} $MotRef " "]] if {[info exists n($MotRef)]} { incr n($MotRef) } else { set n($MotRef) 1 } } # Construit tableau factoriel(nb_occurences) = nb_occurences! # pour les valeurs dont on a besoin Wup "Calcul de factoriel en utilisant l'approximation de Stirling" foreach MotRef [array names n] { set i $n($MotRef) if {![info exists factoriel($i)]} { if {$i > 13} { catch {set factoriel($i) [expr sqrt(2*3.14) * pow($i,[expr $i + 0.5]) * exp(-$i)]} Wup "pow explose si i > 130" if {![info exists factoriel($i)]} {set factoriel($i) 1e+300} } else { set fact 1 while {$i != 1} { Wup "ce calcul ne marche plus pour i > 13 sur star5" set fact [expr $fact*$i] incr i -1 } set factoriel($n($MotRef)) $fact } } } # NbTotauxDeMots = total des mots dans descriptions swissprot AVEC DOUBLONS POSSIBLES !! Wup "On determine les mots-cles" Wup "Nb de mots indexes dans le champs description de swissprot" set lInfos [exec getz -info UNIPROT_SWISSPROT] set lInfos [split $lInfos "\n"] foreach Ligne $lInfos { if {[regexp "^Description" $Ligne]} { set NbTotauxDeMots [lindex $Ligne 6] break } } # Recupère nb d'entrées avec chaque mot... # fait pleins de calculs savants pour calculer le score du mot... # et garde le mot s'il a un score < -13 (+ c petit, et + c discriminant) set lMotsDiscriminants {} foreach MotRef [array names n] { set NbRef "getz {\[UNIPROT_SWISSPROT-des:\"[MotOuExprNormPourSRS $MotRef]\"\]} -c" set NbRef [eval exec $NbRef] if {$NbRef == 0 || $NbRef == ""} {set NbRef 1} set f($MotRef) [expr double($NbRef)/$NbTotauxDeMots] set lnp [expr -$Nref*$f($MotRef)] set lnp [expr $lnp + $n($MotRef)*log($Nref*$f($MotRef))] set lnp [expr $lnp - log($factoriel($n($MotRef)))] set lnp [format "%.1f" $lnp] #nG if {$lnp <= -13} {} if {$lnp <= -13.5} { lappend lMotsDiscriminants [list $lnp $MotRef] set Lnp($MotRef) $lnp } } # Vire les mots creux Wup "On elimine les mots creux" set lMotsDiscriminantsNR {} foreach Element $lMotsDiscriminants { set Mot [lindex $Element 1] set avirer 0 foreach MotCreux $lMotsOuExprCreux { if {[regexp -nocase "^[MotOuExprNormPourRegexp $MotCreux]$" $Mot]} { set avirer 1 #Espionne "MC : $MotCreux TROUVE DANS $Mot" break } } if {!$avirer} {lappend lMotsDiscriminantsNR $Element} } set lMotsDiscriminants $lMotsDiscriminantsNR # Retourne la liste triée du + discrimant au - discriminant # (score le + petit au + grand) Wup "On classe les mots restant en fonction de leur score" set lFinale [lsort -real -index 0 $lMotsDiscriminants] return [join $lFinale] } proc Simplet {x} { return [list $x] } proc Single_cov2 {PairwiseMAFFile Single_cov2MafFile} { ### Execution du programme single_cov2 ### # single_cov2 removes overlapped regions from PairwiseMAFFile # if {![file exists $PairwiseMAFFile]} {Espionne "PairwiseMAFFile: $PairwiseMAFFile does not exists" ; return} #set Commande "exec [PATH single_cov2] $PairwiseMAFFile > $Single_cov2MafFile" set Commande "exec single_cov2 $PairwiseMAFFile > $Single_cov2MafFile" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $Single_cov2MafFile } proc SiteBips {} { set SiteBips "http://bips.u-strasbg.fr/" return $SiteBips } proc SiteElimine {Quoi InfoRef Name AbsStart AbsStop RelStart RelStop} { scan $InfoRef "%s" PforPsRef set PforPsRef [string toupper $PforPsRef] regsub -nocase {^PROP_} $PforPsRef "" PforPsRef if {$Quoi=="Pfam"} { set Des [InterrogePfamDesFrom1500 $PforPsRef Des] return "$Name elimine \"$PforPsRef\" ($Des) en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } } proc SiteElmGagne {InfoName Name} { return " $Name a gagne \"$InfoName\"" } proc SiteElmPerdu {InfoRef Name AbsStart AbsStop RelStart RelStop} { lassign $InfoRef ElmRef RFstart RFstop set ElmRef [string toupper $ElmRef] return " $Name a perdu \"$ElmRef\" en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } proc SiteGagne {Quoi InfoName Name AbsStart AbsStop RelStart RelStop} { if {$Quoi=="Pfam"} { scan $InfoName "%s" PfamName set PfamName [string toupper $PfamName] regsub -nocase {^PROP_} $PfamName "" PfamName set Des [InterrogePfamDesFrom1500 $PfamName Des] return "$Name gagne \"$PfamName\" ($Des) en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } if {$Quoi=="Block"} { set BlockName [lindex [split $InfoName "/"] 0] set BlockName [string toupper $BlockName] return "$Name gagne \"$BlockName\" en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } } proc SiteGarde {Quoi InfoRef Name AbsStart AbsStop RelStart RelStop} { if {$Quoi=="Pfam"} { scan $InfoRef "%s" PfamRef set PfamRef [string toupper $PfamRef] regsub -nocase {^PROP_} $PfamRef "" PfamRef set Des [InterrogePfamDesFrom1500 $PfamRef Des] return "$Name garde \"$PfamRef\" ($Des) en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } if {$Quoi=="Block"} { set BlockName [lindex [split $InfoRef "/"] 0] set BlockName [string toupper $BlockName] return "$Name garde \"$BlockName\" en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } } proc SiteHybridisation {SeqO Sequence {FouR ""}} { if {$FouR==""} { set FouR "F" } set SO [string toupper $SeqO] if {$FouR=="R"} { set SO [NucToReverseAndComplementNuc $SO] } set SS [string toupper $Sequence] while 1 { set I [string first $SO $SS] Espionne "$I $SO" if {$I>0} { break } if {$SO==""} { break } if {$FouR=="F"} { set SO [string range $SO 1 end] } else { set SO [string range $SO 0 end-1] } } set LSO [string length $SO] set TmH 0 foreach C [split $SO ""] { if {$C=="A" | $C=="T"} { incr TmH 2 } if {$C=="G" | $C=="C"} { incr TmH 4 } } if {$FouR=="F"} { set IDebut [expr $I + 1] set IApresOli5 [expr $IDebut + $LSO] return "$IDebut $IApresOli5 $TmH $SO" } else { set SO [NucToReverseAndComplementNuc $SO] set IAvantOli3 [expr $I - 1 + 1] set IFin [expr $IAvantOli3 + $LSO] return "$IFin $IAvantOli3 $TmH $SO" } } proc SiteICDS {} { return "http://www.lbgi.fr/ICDS" } proc SitePerdu {Quoi InfoRef Name AbsStart AbsStop RelStart RelStop {InfoPfam ""}} { #InfoPfam ne sert que pour les block if {$Quoi=="Pfam" || $Quoi=="Prosite"} { scan $InfoRef "%s" PforPsRef set PforPsRef [string toupper $PforPsRef] regsub -nocase {^PROP_} $PforPsRef "" PforPsRef if {$Quoi=="Pfam"} { set Des [InterrogePfamDesFrom1500 $PforPsRef Des] return "$Name perd \"$PforPsRef\" ($Des) en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } if {$Quoi=="Prosite"} { scan $InfoPfam "%s" Pfam set Pfam [string toupper $Pfam] regsub -nocase {^PROP_} $Pfam "" Pfam FstartFstop $InfoPfam Fstart Fstop return "$Name perd \"$PforPsRef\" from $InfoPfam en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } } if {$Quoi=="Block"} { set BlockName [lindex [split $InfoRef "/"] 0] set BlockName [string toupper $BlockName] return "$Name perd \"$BlockName\" from $InfoPfam en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } if {$Quoi=="Fragment"} { return "$Name perd \"$InfoRef\" from $InfoPfam en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } } proc SitePfamGarde {InfoName Name AbsStart AbsStop RelStart RelStop} { scan $InfoName "%s" PfamName set PfamName [string toupper $PfamName] regsub -nocase {^PROP_} $PfamName "" PfamName set Des [InterrogePfamDesFrom1500 $PfamName Des] return "$Name garde \"$PfamName\" ($Des) en absolue: $AbsStart $AbsStop en relatif: $RelStart $RelStop" } proc SixBlastPsurPique {Pique} { global ADN TDN RAC if { ! [info exists ADN] } { ChargeADNetTDNetRAC } set Debut [Box $Pique debut] set Fin [Box $Pique fin] foreach Frame {a b c d e f} Orient {F F F R R R} Offset {1 2 3 1 2 3} { set DebutFrame [expr ($Debut/3)*3+$Offset] set FinFrame [expr ( $Fin/3)*3+$Offset] set Nom "$Pique$Frame" set SeqNuc [BoutADN $DebutFrame $FinFrame $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] set TFA [SequenceFormatTFA $SeqPro $Nom "protbrut"] Blaste P $TFA "$Nom" } } proc SixBlastPsurPiques {Selection} { foreach Pique [split $Selection "\n"] { SixBlastPsurPique $Pique } } proc SixBlastPsurZone {K} { global xDebutRectangleDeSelectionNucleique global yDebutRectangleDeSelectionNucleique global xFinRectangleDeSelectionNucleique global yFinRectangleDeSelectionNucleique if { ! [info exists xDebutRectangleDeSelectionNucleique($K)]} { FaireLire "IL faut selectionner une zone par " return "" } set Debut [PositionCanvaOriginaleX $K [Mini [set xDebutRectangleDeSelectionNucleique($K)] [set xFinRectangleDeSelectionNucleique($K)] ]] set Fin [PositionCanvaOriginaleX $K [Maxi [set xDebutRectangleDeSelectionNucleique($K)] [set xFinRectangleDeSelectionNucleique($K)] ]] foreach Frame {a b c d e f} Orient {F F F R R R} Offset {1 2 3 1 2 3} { set DebutFrame [expr ($Debut/3)*3+$Offset] set FinFrame [expr ( $Fin/3)*3+$Offset] set Nom "${Orient}_${DebutFrame}_${FinFrame}" set SeqNuc [BoutADN $DebutFrame $FinFrame $Orient] set SeqPro [SeqNucToSeqPro $SeqNuc] set TFA [SequenceFormatTFA $SeqPro $Nom "protbrut"] Blaste P $TFA "$Nom" } } proc SizeOfClusters {} { foreach C [LesCopainsDeCluster ListOfCombi] { Espionne "++$C" ScanLaListe [split $C ","] Ex An Cl Nu set S [LesCopainsDeCluster SizeOf$Ex $An $Cl $Nu] lappend LesLignes "$S $C" } SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/SizeOfClusters" } proc SizeOfFilesIn {A B} { foreach FA [glob -nocomplain "$A/*"] { set sA [file size $FA] set Q [file tail $FA] set FB "$B/$Q" if {[file exists $FB]} { set sB [file size $FB] } else { set sB -1 } lappend Sortie [format "%20d %10d %s" $sA $sB $Q] } set Sortie [lsort -command CompareLesIntegersEnDebut $Sortie] EspionneL $Sortie exit } proc SizeOfFont {f} { foreach {a v} [font configure $f] { if {$a eq "-size"} {return $v} } } proc Size_WordML {Size} { set Size [expr round($Size * 2)] return "" } proc SkipKnownEquivalent {fileOfEquivalence completeProteome} { set fileToScan [open $fileOfEquivalence "r"] set fileFasta [open $completeProteome "r"] #reads input line by line set compteur 0 set eltsRef [list ] set eltsUni [list ] while {[gets $fileToScan line]!=-1} { set la [split $line " "] lappend eltsRef [lindex $la 0] lappend eltsUni [lindex $la 1] incr compteur } puts " -->le fichier d'equivalence contient $compteur entrées" set compteur 0 # on va recupérer tous les access uniprot présents dans nos séquences while {[gets $fileFasta line]!=-1} { if {[string index $line 0]==">" && ([string index $line 1]=="s" || [string index $line 1]=="t")} { set current [split $line "|"] set isPresent([lindex $current 1]) 1 incr compteur } } puts " -->$compteur équivalences vont etre vérifiées" set i 0 set compteur 0 foreach elt $eltsUni { if {[info exists isPresent($elt)]} { lappend lesCorrespondances($elt) [lindex $eltsRef $i] incr compteur } incr i } #creation d'une liste simple avec tous les equivalents set file1 [open "listeDesEquivalents.log" "w"] set finalList [list ] foreach {cle valeur} [array get lesCorrespondances] { foreach sselt $valeur { lappend finalList $sselt puts $file1 "$sselt" } } close $file1 puts " -->nombre d'équivalences détectées : $compteur" set altList [lsort -unique $finalList] puts " -->nombre d'équivalences uniques détectées : [llength $altList]" return $altList } proc SlideAgent {n1 ag1 n2 ag2} { global TAg Sequences LNOrdali MotifLen LSOrdali #ShowAlignmentAgent "Avatn Slide" set m1 $TAg($ag1,$n1,mil) set m2 $TAg($ag2,$n2,mil) set dec [expr {abs($m2 - $m1)}] if {$dec == 0} {return} array set Tseq [array get Sequences] unset Sequences LSOrdali set lmax [string length $Tseq($n1)] set wdt [expr {($MotifLen - 1)/2}] set ngap [string repeat "." $dec] if {$m2 < $m1} { set ixInsMv [expr {$m2 - $wdt}] set sfixe $n1 set ixInsFx [expr {$m1 + $wdt + 1}] } else { set ixInsMv [expr {$m2 + $wdt + 1}] set sfixe $n1 set ixInsFx [expr {$m1 - $wdt}] } #puts "IN $n1 [format %02d $m1] $Tseq($n1)" #puts "IN $n2 [format %02d $m2] $Tseq($n2)" #puts "ixInsMv $ixInsMv ixInsFx $ixInsFx dec $dec" foreach n $LNOrdali { if {$n eq $sfixe} {continue} set sq $Tseq($n) if {$ixInsMv == $lmax} { append sq $ngap } else { set ains [string index $sq $ixInsMv] set sq [string replace $sq $ixInsMv $ixInsMv "$ngap$ains"] } set Sequences($n) $sq } set sq $Tseq($sfixe) if {$ixInsFx == $lmax} { append sq $ngap } else { set ains [string index $sq $ixInsFx] set sq [string replace $sq $ixInsFx $ixInsFx "$ngap$ains"] } set Sequences($sfixe) $sq #puts "OUT $n1 $Sequences($n1)" #puts "OUT $n2 $Sequences($n2)" #puts "" set LSOrdali [list] foreach n $LNOrdali { lappend LSOrdali $Sequences($n) } update #ShowAlignmentAgent "APRES Slide" return } proc SlidingCodonRare {FichierOuTexteTFAOuSeq {WindowSize ""}} { set LesRares [CodonsRares "LaListeMerci"] if {[regexp "^>" $FichierOuTexteTFAOuSeq]} { set Seq [QueLaSequenceDuTexteTFA $FichierOuTexteTFAOuSeq] } else { if { ! [regexp {[^ATGCN \n\t]} $FichierOuTexteTFAOuSeq]} { regsub -all {[^ATGCN]} $FichierOuTexteTFAOuSeq "" Seq } else { if {[file exists $FichierOuTexteTFAOuSeq]} { set Seq [QueLaSequenceDuFichierTFA $FichierOuTexteTFAOuSeq] } else { FaireLire "Following line(s) is not a filename, TFA text or a nucleic sequence\n $FichierOuTexteTFAOuSeq" return "" } } } set Seq [string toupper $Seq] set WindowSize [ChoisisWindowSizePourSlidingCodonRare $WindowSize] if {$WindowSize<0} { set WindowSize [expr [string length $Seq]/3] } set Decale [string range "[string repeat "NNN" $WindowSize]$Seq" 0 [string length $Seq]] set LesBases [split $Seq ""] set LesDecales [split $Decale ""] set i 0 foreach {A B C} $LesBases {D E F} $LesDecales { set Codon "$A$B$C" set Decal "$D$E$F" lappend LesCodons $Codon if { ! [info exists Pic($Codon)]} { set Pic($Codon) 0 } if { ! [info exists Cumul($Codon)]} { set Cumul($Codon) 0 } if { ! [info exists Cumul($Decal)]} { set Cumul($Decal) 0 } incr Cumul($Codon) incr Cumul($Decal) -1 if {[set Cumul($Codon)] == [set Pic($Codon)]} { lappend PosDuPic($Codon) [expr $i/3+1] } if {[set Cumul($Codon)] > [set Pic($Codon)]} { set Pic($Codon) [set Cumul($Codon)] set SeqDuPic($Codon) [string range $Seq [expr $i+3-$WindowSize*3] [expr $i+2]] set PosDuPic($Codon) [list [expr $i/3+1]] } incr i 3 } set LesCodons [lsort -unique $LesCodons] set Sortie {} foreach Rare $LesRares { if { ! [info exists Pic($Rare)]} { continue } set SdP [set SeqDuPic($Rare)] set BelleSdP "" foreach {A B C} [split $SdP ""] { set Codon "$A$B$C" if {$Codon!=$Rare} { set Codon [string tolower $Codon] } append BelleSdP "$Codon " } lappend Sortie "$Rare [set Pic($Rare)] $BelleSdP [join [set PosDuPic($Rare)] " "]" } Espionne $Sortie return $Sortie } proc Sm2PhPhenotype {{Qui ""} {Quoi ""}} { global Sm2PhPhenotype if {$Qui==""} { set Qui "ListOf" ; set Quoi "Omim" } if {$Quoi==""} { set Quoi "Phenotype" } if {$Qui!="ListOf"} { set Qui [string toupper $Qui] } if {[info exists Sm2PhPhenotype($Qui,$Quoi)]} { return $Sm2PhPhenotype($Qui,$Quoi) } if {[info exists Sm2PhPhenotype($Qui,Omims)]} { set LeResultat {} foreach Omim $Sm2PhPhenotype($Qui,Omims) { if {[info exists Sm2PhPhenotype($Omim,$Quoi)]} { lappend LeResultat $Sm2PhPhenotype($Omim,$Quoi) } } set LeResultat [lsort -unique $LeResultat] return [join $LeResultat "///"] } if {[info exists Sm2PhPhenotype("EstCharge")]} { return "" } set Sm2PhPhenotype("EstCharge") 1 set RepKb "/genomics/link/AmdKb" set FichierListPhenotype "$RepKb/DeSM2PH/20000_list_phenotype.txt" LoadTxl $FichierListPhenotype LPh 1 "\t" foreach Omim $LPh(ListOf,Index) { set Ph [string trim $LPh($Omim,Phenotype)] set Gn [string trim [StringSuivant "; " dans $Ph]] if {[regexp " " $Gn]} { FaireLire "bad Gn in $Ph" } if {[info exists Sm2PhPhenotype($Ph,Omims)]} { # FaireLire "DejaVu $Ph $Sm2PhPhenotype($Ph,Omims) \n [set Sm2PhPhenotype([set Sm2PhPhenotype($Ph,Omims)],Phenotype)]" } set LP $LPh($Omim,Proteins) regsub -all {[ ,]+} $LP " " LP set LP [split [string trim $LP] " "] foreach P $LP { lappend Sm2PhPhenotype(ListOf,Protein) $P lappend Sm2PhPhenotype($P,Omim) $Omim lappend Sm2PhPhenotype($P,Phenotype) $Ph lappend Sm2PhPhenotype($Omim,Proteins) $P } lappend Sm2PhPhenotype(ListOf,Omim) $Omim lappend Sm2PhPhenotype(ListOf,Phenotype) $Ph set Sm2PhPhenotype($Omim,Phenotype) $Ph set Sm2PhPhenotype($Omim,Genename) $Gn lappend Sm2PhPhenotype($Ph,Omims) $Omim if {$Gn!=""} { lappend Sm2PhPhenotype(ListOf,Genename) $Gn lappend Sm2PhPhenotype($Gn,Omims) $Omim } } unset LPh set Sm2PhPhenotype(ListOf,Phenotype) [lsort -unique $Sm2PhPhenotype(ListOf,Phenotype)] set Sm2PhPhenotype(ListOf,Protein) [lsort -unique $Sm2PhPhenotype(ListOf,Protein)] set Sm2PhPhenotype(ListOf,Genename) [lsort -unique $Sm2PhPhenotype(ListOf,Genename)] return [Sm2PhPhenotype $Qui $Quoi] } proc SnpInside {Path} { CanalSqlUcscHuman set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "SnpInside|$timestamp : Start" set FichierIn [open "$Path.enriched" "r"] set FichierOut [open "$Path.snp" "w"] set nbSNP 0 set nbLigne 0 Espionne "SnpInside|$timestamp : File to list" while { [gets $FichierIn Ligne] >=0 } { lappend ListeDesLigne $Ligne } close $FichierIn Espionne "SnpInside|$timestamp : Sorting list" set ListeDesLigne [lsort -u $ListeDesLigne] Espionne "SnpInside|$timestamp : Looping" foreach Ligne $ListeDesLigne { set Chrom [lindex [split $Ligne ":"] 0 ] set StartH [lindex [split $Ligne ":"] 1 ] set EndH [lindex [split [lindex [split $Ligne ":"] 2 ] ";"] 0] set sequence [lindex [split [lindex [split $Ligne ":"] 2 ] ";"] 1] set reverse [lindex [split [lindex [split $Ligne ":"] 2 ] ";"] 2] set strand "F" if { $StartH > $EndH } { set strand "R" set temp $EndH set EndH $StartH set StartH $temp } #set sequence [BoutAdnDeUcscBoost $StartH $EndH $strand "Homo_sapiens" $Chrom "bigZips200603"] #set reverse [NucToReverseAndComplementNuc $sequence] #set Ligne "$Ligne;$sequence;$reverse" set request "SELECT chrom, chromStart, chromEnd, name, score, strand, refNCBI, refUCSC, observed, molType, class , valid, func, locType FROM ucschuman.snp130 WHERE chrom='$Chrom' AND chromStart >= $StartH AND chromEnd <= $EndH LIMIT 1" #Espionne $request foreach {chrom chromStart chromEnd name score strand refNCBI refUCSC observed molType class valid func locType} [SqlExec $request -flatlist] { incr nbSNP set Ligne "$Ligne;$name,$chrom,$chromStart,$chromEnd,$score,$strand,$refNCBI,$refUCSC,$observed,$molType,$class,$valid,$func,$locType" set diff [expr $chromStart - $StartH] set newBase [lindex [split $observed "/"] 1] set theoricalBase [lindex [split $observed "/"] 0] set reverseTheoricalBase [NucToReverseAndComplementNuc $theoricalBase] set base [string range $sequence $diff $diff] if { $base == $reverseTheoricalBase } { Espionne "Reveeeeerse base=$base alors que theorical=$theoricalBase" #set sequence $reverse Espionne $sequence } set base2 [string range $sequence $diff $diff] if { $base2 != $theoricalBase} { Espionne " $Chrom:$StartH-$EndH $chrom:$chromStart-$chromEnd $theoricalBase/$newBase $observed $base2 $sequence $reverse $diff" } else { set nbNewbase [string length $newBase] if {$nbNewbase > 1 } { set end [$diff + $nbNewbase - 1] } else { set end $diff } set sequenceList [split $sequence ""] lreplace $sequenceList $diff $end $newBase set newSequence [ join $sequenceList ""] set Ligne "$Ligne;$newSequence" } } puts $FichierOut $Ligne } close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "SnpInside|$timestamp : End $nbSNP SNP sur $nbLigne" } proc SoTOLHtmlSetup {what} { global LwarningHTML switch $what { "head" { if {$LwarningHTML == {} } { set divwarning "" set boutwarn "" } else { set divwarning [join $LwarningHTML \n] set boutwarn " Warnings " } set boutons "
    Tooltips show
    Taxa ID : Search
    Expand all nodes
    Collapse all nodes
    Prev Sel. node
    Next Sel. node
    Info $boutwarn
    Save selected Help
    " return "
    $boutons
    Close
    [LogInfosSoTOL] Close
    $divwarning Close

    " } "tail" { return "
    " } } } proc Sock {} { return "Coucou\n[BoutADN 1 10 "F"]\nBeau bout de sequence." } proc SoleilsDesBlasts {Selection} { global GalerieCourante global ExpoCourante set ExpoCourante [NomDe expo] set GalerieCourante $ExpoCourante[NomDe galerie] CreeGalerie $GalerieCourante foreach Fichier [split $Selection "\n"] { GrapheBout $Fichier } ClosGalerieCourante ClosExpoCourante } proc SoleilsDesTBlastNs {Selection} { global RepertoireDuGenome foreach Nom [split $Selection "\n"] { lappend ListeDeBlasts "$RepertoireDuGenome/tblastngenomes/$Nom" } SoleilsDesBlasts [join $ListeDeBlasts "\n"] } proc SontCeLesMemes {} { set f [open /genomics/link/Ms/beton/adn "r"] gets $f Manu set f [open /genomics/link/MsTigrManu/beton/adn "r"] gets $f Tigr set GrosTigr "$Tigr[string range $Tigr 1 end]" set Mama [string range $Manu 1 end] set Titi [string range $GrosTigr 1070522 end] foreach Ligne [LesLignesDuFichier "/genomics/link/MsTigrManu/fiches/bornesdespabs"] { scan $Ligne "%s %s %s %s" MST DebT FinT SensT set AdnT [string range $Tigr $DebT $FinT] set DebM [expr $DebT - 1070521] set FinM [expr $FinT - 1070521] if {$DebM<0} { continue } set AdnM [string range $Manu $DebM $FinM] if {$AdnT==$AdnM} { continue } Espionne "$Ligne\n[string range $AdnT 0 end]\n[string range $AdnM 0 end]" set i 0 foreach T [split $AdnT ""] M [split $AdnM ""] { incr i if {$T==$M} { continue } Espionne "$i $T $M" } } exit foreach Ligne [LesLignesDuFichier "/genomics/link/Ms/fiches/bornesdespabs"] { scan $Ligne "%s %s %s %s" MSM DebM FinM SensM set AdnM [string range $Manu $DebM $FinM] set DebT [expr $DebM + 1070521] set FinT [expr $FinM + 1070521] set AdnT [string range $GrosTigr $DebT $FinT] if {$AdnM==$AdnT} { continue } Espionne "$Ligne\n[string range $AdnM 0 end]\n[string range $AdnT 0 end]" set i 0 foreach M [split $AdnM ""] T [split $AdnT ""] { incr i if {$M==$T} { continue } Espionne "$i $M $T" } } } proc Sophie {} { set Racine "/genomics/link/Sophie/" catch {set Tifs [exec find $Racine -name "*.tif" -print]} set LesTif [split $Tifs "\n"] set LesTif [lsort $LesTif] foreach Tif $LesTif { if { ! [regexp -nocase ".tif$" $Tif]} { continue } # Espionne $Tif set Dir [file dirname $Tif] lappend LesDir $Dir lappend LesTifDuDir($Dir) $Tif } set LesDir [lsort -unique $LesDir] EspionneL $LesDir foreach Dir $LesDir { Espionne $Dir set LesIDuDir {} set DirJpg "$Dir/jpegs" if {[FileAbsent $DirJpg]} { file mkdir $DirJpg } cd $DirJpg foreach Tif [lsort $LesTifDuDir($Dir)] { set Queue [file tail $Tif] regsub -nocase ".tif$" $Queue ".jpg" QueueJpg set Jpg "$DirJpg/$QueueJpg" if {[FileAbsent $Jpg]} { exec convert $Tif $Jpg } set I "" if {[regexp -- "\-OD\-" $Jpg Oeil]} { set I [IntegerApres "-OD-" dans $QueueJpg] } if {[regexp -- "\-OG\-" $Jpg Oeil]} { set I [IntegerApres "-OG-" dans $QueueJpg] } if {$I==""} { continue } lappend LesIDuDir $I set So($Dir,$Oeil,$I) $Jpg } set LesImages {} set LesIDuDir [lsort -unique -integer $LesIDuDir] set M [expr ([llength $LesIDuDir]+1)/2] set LesU [lrange $LesIDuDir 0 [expr $M-1]] set LesD [lrange $LesIDuDir $M end] lappend LesU "" lappend LesD "" set LesIEnDeuxColonnes {} foreach U $LesU D $LesD { if {$U==""} { break } lappend LesIEnDeuxColonnes $U if {$D==""} { break } lappend LesIEnDeuxColonnes $D } foreach I $LesIEnDeuxColonnes { set FD "$So($Dir,-OD-,$I)" if {[FileAbsent $FD]} { set FD "null" } lappend LesImages $FD set FG "$So($Dir,-OG-,$I)" if {[FileAbsent $FG]} { set FG "null" } lappend LesImages $FG Espionne "$I $FD $FG" } set Commande "montage -size 140x104 " foreach Image $LesImages { set QueueJpg [file tail $Image] set Titre $QueueJpg regsub -nocase "\.jpg" $Titre "" Titre if {[regexp {[EP][0-9]+\.[0-9]+} $Titre Match]} { regsub "$Match.*" $Titre "" Debut regsub ".*$Match\-?" $Titre "" Fin } append Commande " -label $Debut-$Match\\n$Fin $QueueJpg" } set Title $Dir regsub $Racine $Title "" Title set Slash [string first "/" $Title 20] if {$Slash>-1} { set Title "[string range $Title 0 $Slash]\\n[string range $Title [incr Slash] end]" } append Commande " -geometry +5+5 -tile 4x -frame 5 -title $Title photo_index.html" eval exec $Commande } } proc SortBy {quoi} { global WProfile LPV switch $quoi { "calls" {set LPV [lsort -integer -index 1 -decreasing $LPV]} "avgRn" {set LPV [lsort -integer -index 2 -decreasing $LPV]} "total" {set LPV [lsort -integer -index 3 -decreasing $LPV]} "exclu" {set LPV [lsort -integer -index 4 -decreasing $LPV]} "avgEx" {set LPV [lsort -integer -index 5 -decreasing $LPV]} } $WProfile delete 0.0 end set fmt "%-20s |%7d|%10d|%10d|%10d|%10d|" foreach v $LPV { lassign $v n c a t x e $WProfile insert end "[format $fmt [string range $n 0 19] $c $a $t $x $e]\n" } return } proc SortByStart {A B} { scan $A "%s %d" BidonA StartA scan $B "%s %d" BidonB StartB if {$StartA<$StartB} { return -1 } if {$StartA>$StartB} { return 1 } return 0 } proc SortColumn {w Idx} { set oldOrdre [$w sortorder] set oldIdx [$w sortcolumn] if {$oldIdx == $Idx} { # reverse ordre if {$oldOrdre eq "increasing"} { set ordre "decreasing" } else { set ordre "increasing" } } $w sortbycolumn $Idx -$ordre return } proc SortColumnForTreeView {column TV} { set old [$TV sort cget -column] set decreasing 0 if { "$old" == "$column" } { set decreasing [$TV sort cget -decreasing] set decreasing [expr !$decreasing] } $TV sort configure -decreasing $decreasing -column $column -mode integer if { ![$TV cget -flat] } { $TV configure -flat yes } $TV sort auto yes blt::busy hold $TV update blt::busy release $TV } proc SortDeCoeur {K X Y {Propagate ""}} { if {$Propagate==""} { set Propagate "Propagate" } if {[set R [GraphesEnStock "HighlightId" $K]]!=""} { $K delete $R } regsub ".canvas" $K ".message" M catch {destroy $M} if {[string equal -nocase $Propagate "Propagate"]} { foreach KK [GraphesEnStock] { if {$KK==$K} { continue } SortDeCoeur $KK "" "" "DontPropagate" } } $K delete "MessageAffiche" } proc SortDeSeq {K X Y} { global TitreOrigine wm title [winfo toplevel $K] [set TitreOrigine($K)] } proc SortLimits {A B} { scan $A "%d" StartA scan $B "%d" StartB if {$StartA<$StartB} { return -1 } if {$StartA>$StartB} { return 1 } return 0 } proc SortTriangles {Lt Ln} { foreach t $Lt {n1 n2 n3} $Ln { lassign $t v1 v2 v3 set Ltn [list] foreach v {v1 v2 v3} n {n1 n2 n3} { lappend Ltn [list [set $v] [set $n]] } set Ltn [lsort -index {0 2} -real $Ltn] lappend Lall $Ltn } set Lall [lsort -real -index {0 0 2} $Lall] set Lt [list] ; set Ln [list] foreach e $Lall { set Lt [list] foreach vn $e { lassign $vn v n lappend Lt $v lappend Ln $n } lappend Ltri $Lt } return [list $Ltri $Ln] } proc SortTrig {Lt Ln} { foreach t $Lt {n1 n2 n3} $Ln { lassign $t v1 v2 v3 set Ltn [list] foreach v {v1 v2 v3} n {n1 n2 n3} { lappend Ltn [list [set $v] [set $n]] } set Ltn [lsort -index 0 -real $Ltn] lappend Lall $Ltn } set Lall [lsort -real -index {0 0} $Lall] set Lt [list] ; set Ln [list] foreach e $Lall { set Lt [list] foreach vn $e { lassign $vn v n lappend Lt $v lappend Ln $n } lappend Ltri $Lt } return [list $Ltri $Ln] } proc SortiePlateau {if nbb} { lassign $nbb x1 y1 x2 y2 set changed 0 set old $::TFB($if,angle) if {$x1 < 1 || $x2 > ($::TFB(dimX)-1)} { if {$x1 < 1} { set ang [expr {180.*rand() - 90.}] } else { set ang [BonAngle [expr {180.*rand() + 90.}]] } set ::TFB($if,oldAng) $old set ::TFB($if,angle) $ang set changed 1 } if {$y1 < 1 || $y2 > ($::TFB(dimY)-1)} { if {$y1 < 1} { set ang [expr { 180.*rand()}] } else { set ang [expr {-180.*rand()}] } set ::TFB($if,oldAng) $old set ::TFB($if,angle) $ang set changed 1 } if {$changed} { return 1 } else { return 0 } } proc SortirLesCoordonneesBidirEncode {Path} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "CorrigerLongueurMatInspector : Start" set FileIn [open "$Path.coord" "r"] set FileOut [open "$Path.coo" "w"] while { [gets $FileIn Ligne] >=0 } { ScanLaListe $Ligne chrom chromStart chromEnd name score strand promoterStart promoterEnd puts $FileOut "$name $chrom $chromStart $chromEnd $strand" } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "CorrigerLongueurMatInspector : End" close $FileIn close $FileOut } proc SotolImg {} { LoadTkAndPackages set img " 01110001110001110001110001110001110001110001110 01110001110001110001110001110001110001110001110 01110001110001110001110001110001110001110001110 01110001110001110001110001110001110001110001110 01110001110001110001110001110001110001110001110 01110001111111110001110001110001110001110001110 01110001111111110001110001110001110001110001110 01110001111111110001110001110001110001110001110 01110000001110000001110001110001110001110001110 01110000001110000001110001110001110001110001110 01110000001110000001110001110001110001110001110 01110000001111111111110001110001110001110001110 01110000001111111111110001111111110001110001110 01110000001111111111110001111111110001110001110 01110000000000111000000000001110000001110001110 01110000000000111000000000001110000001110001110 01110000000000111000000000001110000001110001110 01111111111111111000000000001111111111110001110 01111111111111111000000000001111111111110001110 01111111111111111000000000001111111111110001110 00000000011100000000000000000000011100000001110 00000000011100000000000000000000011100000001110 00000000011100000000000000000000011100000001110 00000000011111111111111111111111111111111111110 00000000011111111111111111111111111111111111110 00000000011111111111111111111111111111111111110 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 00000000000000000000000011100000000000000000000 " set Li [split $img \n] set Ldata [list] foreach i $Li { if {$i == {}} {continue} set i [string trim [string map {0 " #ffffff" 1 " #000000"} $i]] lappend Ldata $i } set wdt [llength [split [lindex $Ldata 0]]] set hgt [llength $Ldata] set ph [image create photo -width $wdt -height $hgt] $ph put $Ldata $ph write tree.png exit } proc SoumettreAuServeurWscope {LesCommandes} { global ForumWscope global FichierAFaire global FichierDejaFait global SansServeurWscope NommeLesFichiersForum if {[info exists SansServeurWscope] && $SansServeurWscope} { ChargeConfig FaireAFaire $LesCommandes return } LanceLeServeurWscope SauveLesLignes $LesCommandes dans $FichierAFaire } proc SourceAutonome {Fichier args} { global GscopeDir GscopeContrib if { ! [regexp "/" $Fichier] } { set Fichier "$GscopeDir/$Fichier" } foreach Supplement $args { if { ! [regexp "/" $Supplement] } { set Supplement "$GscopeDir/$Supplement" } set EstSupplement($Supplement) 1 } OuSontLesProcedures FichierContenant set LesNomProc [LesProceduresDuFichier $Fichier] foreach NomProc $LesNomProc { if {[regexp "^Teste_" $NomProc]} { continue } foreach Appelee [QuiJAppel $NomProc "LaListeMerci"] { if {[info exists FichierContenant($Appelee)]} { set Contenant [set FichierContenant($Appelee)] } else { set Contenant "non_trouve" } if {$Contenant==$Fichier || [info exists EstSupplement($Contenant)]} { continue } Espionne [format "%-30s %-30s %s" $NomProc $Appelee $Contenant] } } exit } proc SourceProbesetInput {{LesFichiers ""}} { if { ! [WithWebService "Gx" "TestIfExists"]} { WithWebService "Gx" 1 } if {$LesFichiers=="" } { set LesFichiers [LesAffyAnnot] } if {$LesFichiers=="DansLeBonOrdre"} { set LesFichiers [LesAffyAnnotDansLeBonOrdre] } set LesTetes "filename,information,arraytypename" foreach File $LesFichiers { set LesLignesDes {} set Queue [file tail $File] set Result [HeaderFileAffy $File] set Chip "UnknownArraytypeName" foreach R $Result { regsub -all "#%" $R "" R if {[regexp "^chip_type=" $R]} { set Chip [StringApres "chip_type=" dans $R] } lappend LesLignesDes $R } regsub {\..*} $Queue "" NomFic if {$Chip!=$NomFic} { if {[OuiOuNon "The chip_type $Chip doesn't correspond to the file name \n$File\n\nDo I skip it ?"] } { continue } } set Existant [GxDbSqlExec "select pk_sourceprobeset from sourceprobeset where arraytypename='$Chip';" "GetFirstValue"] if {$Existant!=""} { continue } set Des [join $LesLignesDes "\n"] regsub -all {'} $Des "''" Des set Ligne "'$File','$Des','$Chip'" set Commande "insert into sourceprobeset ($LesTetes) values ($Ligne);" Espionne "$Commande" set status [GxDbSqlExec $Commande] } } proc SousListe {ListeDepart} { set ListeDepart [ListeDesPABs] if {$ListeDepart=={}} { return {} } FaireLire "Please select two elements within following elements" while 1 { set BornesSubList [Entre "[lindex $ListeDepart 0] [lindex $ListeDepart end]"] if {$BornesSubList==""} { return "" } scan $BornesSubList "%s %s" Prems Derns set D [lsearch -exact $ListeDepart $Prems] set F [lsearch -exact $ListeDepart $Derns] if {$D<0 || $F<0} { FaireLire "Please select two elements within\n$ListeDeDepart" continue } set Liste [lrange $ListeDepart $D $F] if {$Liste!={} || [OuiOuNon "I got an empty list ... is it OK ?"]} { break } } return $Liste } proc SpOnlyFromFasta {Fasta NewFasta} { set LeNew {} set LeTFA {} foreach Ligne [LesLignesDuFichier $Fasta] { if { ! [regexp ">" $Ligne]} { lappend LeTFA $Ligne ; continue } if {[regexp "BANK=sp" $LeTFA]} { lappend LeNew [join $LeTFA "\n"] } set LeTFA {} lappend LeTFA $Ligne } return [SauveLesLignes $LeNew dans $NewFasta] } proc SpecialBandes {{LesNoms ""} {Keep ""}} { #a revoir (c est long...requete sur le web...pb de sockets de temps en temps) global RepertoireDuGenome set RepRapports "$RepertoireDuGenome/rapportsaccessspecialbande" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set Liste [ListeDesPABs]} else {set Liste [split $LesNoms " "]} foreach Nom $Liste { if {$Keep && [file exists "$RepRapports/$Nom"]} { continue } Espionne $Nom set Rapport {} lappend Rapport "GscopeCode: $Nom" set codeCl [CodeClone $Nom] Espionne "code clone: $codeCl" lappend Rapport "CodeClone: $codeCl" #bande cytologique if {[OnTraiteDesAffymetrix]} { set Bandes [BandeTrouveePourAffymetrix $Nom] if {$Bandes!=""} { lappend Rapport "CytologicBand: $Bandes" } } else { set Bandes [PremiereBandeTrouvee $Nom] if {$Bandes!=""} { lappend Rapport "CytologicBand: $Bandes" } } SauveLesLignes $Rapport dans "$RepRapports/$Nom" } } proc SpecialIllustreLesChromosomes2Histogrammes {{NSeqMin 6} {SplitScreen1 0} {SplitScreen2 1} {OldW ""}} { global RepertoireDuGenome if {$OldW!=""} {catch {after 10 Destroy $OldW}} set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierLocalisation "$RepertoireDuGenome/Localisation/BoxLocalisation" if {![file exists $FichierLocalisation]} { if {[OuiOuNon "$FichierLocalisation doesn't exist.\nDo you want I create it?"]} { InfosLocalisationPourTous Save } else { return "" } } if {$FichierLocalisation == ""} { set FichierLocalisation [ButineArborescence All [pwd]] } elseif {![file exists $FichierLocalisation]} { Espionne "$FichierLocalisation does not exist" return "" } set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierFold "$RepertoireDuGenome/fiches/FoldExpression" if {![file exists $FichierFold]} {set Fold 0} else {set Fold 1} ChoixDesVariablesDeLHistogramme TabVar foreach VariableDemandee [set TabVar(LesVariables)] { regsub -all " " $VariableDemandee "_" VariableDemandee lappend LesVariablesDemandees $VariableDemandee set Variable [set TabVar($VariableDemandee)] } set nVariables [llength $LesVariablesDemandees] if {$nVariables == 0} {exit} #lappend LesVariablesDemandees "Nb_Seq" set TousLesChromos {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} foreach Chro $TousLesChromos { set ChromDeRef [NumeroDuChromosome $Chro] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp #set LesRegions [set Tab(LesRegions)] set LesRegions [set Tab($ChromDeRef,LesRegions)] #set LesRegions [ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp] #Espionne $LesRegions #set LesRegions [ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] #Espionne $Variable foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] #set Valeur [set Tab($Region,$Variable)] if {![info exists VMax]} {set VMax $Valeur;continue} if { $VMax < $Valeur} {set VMax $Valeur} } #set Tab($VariableDemandee,$Chro,Max) $VMax } } #Espionne $VMax set VMaxi $VMax #Espionne $nVariables #ChargeMeilleureLocalisationDeMesSequences MesSequences $FichierLocalisation $FichierContigs ChargeFoldDesSequences Expression #numero du chromosome en gras (en bas du chromosome) set PoliceChromo "Courier 7 bold" #ne sert pas? set PoliceBande "Courier 4" # set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] ChargeBandesCytologiques Genome $FichierBandesCytos set TailleMaxBrasP [set Genome(TaillePMax)] set TailleMaxBrasQ [set Genome(TailleQMax)] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] #ex: 30cm /72 donne 4 mm pour largeur chromo set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] # ecart entre chro a augmenter : *2 ou 3 set EcartEntreChromo [expr $LargeurChromo*4] #voir explication largeur boite plus loin #dans le dessin des ovals (les sequences) set LargeurBoite [expr $EcartEntreChromo/2] #facteur a modifier #si 3 niveaux de representation #compter aerer aussi set Facteur [expr $HauteurAffichage / ($TailleMaxChromo*3)] #position centromere a changer set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] #centromere pour 1er niveau #la fenetre a fond blanc : ne rien changer set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY] $K configure -background white regsub "/home/carles/genomes/" $RepertoireDuGenome "" Titre $K create text [expr $LargeurAffichage/2] 20 -text "$Titre" -font "courrier 12 bold" ################################################################## set LesChromosomes {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08} set PosX $BordX foreach Chromosome $LesChromosomes { #Espionne $VMaxi set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## #Espionne $Chromosome set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp set LesRegions [set Tab($ChromDeRef,LesRegions)] #set LesRegions [set Tab(LesRegions)] #Espionne $VMaxi foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] #Espionne $Valeur } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen2} { set HauteurAffichageHisto [expr $EcartEntreChromo -20] set PosAxeHisto [expr $PosXMaxHisto - $EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1 ] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} { incr i continue } #set ColorFill [set TabVar($Variable,Couleur)] #Espionne "$VariableDemandee $ColorFill" set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMax] if {$SplitScreen2 && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto set OutLine "green" set ColorFill "green" } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] set OutLine "red" set ColorFill "red" } $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } #tous les chromosomes (1 a 8) faits $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill red ############################################################################################ set LesChromosomes {HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16} set PosX $BordX foreach Chromosome $LesChromosomes { set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] #pos y a modifier selon numero du chromosome... set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] # set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp #set LesRegions [set Tab(LesRegions)] set LesRegions [set Tab($ChromDeRef,LesRegions)] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen2} { set HauteurAffichageHisto [expr $EcartEntreChromo-20] set PosAxeHisto [expr $PosXMaxHisto - $EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} { incr i continue } set ColorFill [set TabVar($Variable,Couleur)] set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMaxi] if {$SplitScreen2 && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto set OutLine "green" set ColorFill "green" } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] set OutLine "red" set ColorFill "red" } $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] $K create line $BordX $PosY [expr $LargeurMax-$BordX] $PosY -fill red ################################################################################### set LesChromosomes {HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set PosX $BordX foreach Chromosome $LesChromosomes { #HS01....HSY #Espionne $Chromosome set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] #pos y a modifier selon numero du chromosome... set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer *2)+60+60] # set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer*2)+60+60] set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp #set LesRegions [set Tab(LesRegions)] set LesRegions [set Tab($ChromDeRef,LesRegions)] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen2} { set HauteurAffichageHisto [expr $EcartEntreChromo-20] set PosAxeHisto [expr $PosXMaxHisto -$EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1 ] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} { incr i continue } set ColorFill [set TabVar($Variable,Couleur)] set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMaxi] if {$SplitScreen2 && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto set OutLine "green" set ColorFill "green" } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] set OutLine "red" set ColorFill "red" } $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer*2)+60+60] $K create line $BordX $PosY [expr $LargeurMax-$BordX] $PosY -fill red ################################################################################## #################Histo2########################################################### ChoixDesVariablesDeLHistogramme TabVar foreach VariableDemandee [set TabVar(LesVariables)] { regsub -all " " $VariableDemandee "_" VariableDemandee lappend LesVariablesDemandees $VariableDemandee set Variable [set TabVar($VariableDemandee)] } set nVariables [llength $LesVariablesDemandees] if {$nVariables == 0} {exit} lappend LesVariablesDemandees "Nb_Seq" set TousLesChromos {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} foreach Chro $TousLesChromos { set ChromDeRef [NumeroDuChromosome $Chro] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp set LesRegions [set Tab($ChromDeRef,LesRegions)] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] #Espionne $Variable foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {![info exists VMax]} {set VMax $Valeur;continue} if { $VMax < $Valeur} {set VMax $Valeur} } #set Tab($VariableDemandee,$Chro,Max) $VMax } } #Espionne $VMax set VMaxi $VMax set LesChromosomes {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08} set PosX $BordX foreach Chromosome $LesChromosomes { #Espionne $VMaxi set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - ($Taille*$Facteur)] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## #Espionne $Chromosome set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp set LesRegions [set Tab($ChromDeRef,LesRegions)] #Espionne $VMaxi foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] #Espionne $Valeur } } #set XBordDroitChromo $PosXMax set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen1} { set HauteurAffichageHisto [expr $EcartEntreChromo -20] set PosAxeHisto [expr $PosXMaxHisto - $EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { #Espionne $VMaxi set ValSeq [set Tab($ChromDeRef,$Region,NbSeq)] #Espionne $ValSeq #Espionne $ValSeq set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1 ] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 if {$ValSeq<$NSeqMin} { set Debut [expr $Fin + 1] continue } foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] if {$Variable=="NbSeq"} { incr i continue } set Valeur [set Tab($ChromDeRef,$Region,$Variable)] #set VMax [set Tab($VariableDemandee,Max)] if {$VMaxi == 0 || $Valeur == 0} {continue} set ColorFill [set TabVar($Variable,Couleur)] set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMaxi] if {$SplitScreen1 && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosXMax - $FacteurY*$Valeur] set PosXMax $PosAxeHisto } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] } if {$ColorFill == "black"} {set OutLine "white"} else {set OutLine "black"} $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } #tous les chromosomes (1 a 8) faits $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill red ############################################################################################ set LesChromosomes {HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16} set PosX $BordX foreach Chromosome $LesChromosomes { #HS01....HSY #Espionne $Chromosome set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] #pos y a modifier selon numero du chromosome... set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] # set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp set LesRegions [set Tab($ChromDeRef,LesRegions)] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen1} { set HauteurAffichageHisto [expr $EcartEntreChromo-20] set PosAxeHisto [expr $PosXMaxHisto - $EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set ValSeq [set Tab($ChromDeRef,$Region,NbSeq)] set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 if {$ValSeq<$NSeqMin} { set Debut [expr $Fin + 1] continue } foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] if {$Variable=="NbSeq"} { incr i continue } set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} {continue} set ColorFill [set TabVar($Variable,Couleur)] set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMaxi] if {$SplitScreen1 && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] } if {$ColorFill == "black"} {set OutLine "white"} else {set OutLine "black"} $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] $K create line $BordX $PosY [expr $LargeurMax-$BordX] $PosY -fill red ################################################################################### set LesChromosomes {HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set PosX $BordX foreach Chromosome $LesChromosomes { #HS01....HSY #Espionne $Chromosome set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] #pos y a modifier selon numero du chromosome... set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer *2)+60+60] # set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer*2)+60+60] set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp set LesRegions [set Tab($ChromDeRef,LesRegions)] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen1} { set HauteurAffichageHisto [expr $EcartEntreChromo-20] set PosAxeHisto [expr $PosXMaxHisto -$EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set ValSeq [set Tab($ChromDeRef,$Region,NbSeq)] set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1 ] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 if {$ValSeq<$NSeqMin} { set Debut [expr $Fin + 1] continue } foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] if {$Variable=="NbSeq"} { incr i continue } set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} {continue} set ColorFill [set TabVar($Variable,Couleur)] set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMaxi] if {$SplitScreen1 && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] } if {$ColorFill == "black"} {set OutLine "white"} else {set OutLine "black"} $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer*2)+60+60] $K create line $BordX $PosY [expr $LargeurMax-$BordX] $PosY -fill red ################################################################################# regsub {\.canvas} $K "" w #ces 2 lignes sont necessaires pour affichage #lors du passage de la souris sur chaque region de l histo $K bind "Variable" "DevoileLesHistogrammes $K %x %y Enter" $K bind "Variable" "DevoileLesHistogrammes $K %x %y Leave" # $K bind "Chromosome" <1> "ChromosomeSelectionne $K" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "Histogramm"] bind $B <1> "ChoixHistogramme" set Boutons "$w.buttons" } proc SpecialIllustreLesChromosomesPourSeqPlusEtMoins {{SplitScreen 0} {OldW ""}} { global RepertoireDuGenome if {$OldW!=""} {catch {after 10 Destroy $OldW}} set RepLocalisation "[HumanGenomeDir]/Localisation" set FichierLocalisation "$RepertoireDuGenome/Localisation/BoxLocalisation" if {![file exists $FichierLocalisation]} { if {[OuiOuNon "$FichierLocalisation doesn't exist.\nDo you want I create it?"]} { InfosLocalisationPourTous Save } else { return "" } } if {$FichierLocalisation == ""} { set FichierLocalisation [ButineArborescence All [pwd]] } elseif {![file exists $FichierLocalisation]} { Espionne "$FichierLocalisation does not exist" return "" } set FichierBandesCytos "$RepLocalisation/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierFold "$RepertoireDuGenome/fiches/FoldExpression" if {![file exists $FichierFold]} {set Fold 0} else {set Fold 1} ChoixDesVariablesDeLHistogramme TabVar foreach VariableDemandee [set TabVar(LesVariables)] { regsub -all " " $VariableDemandee "_" VariableDemandee lappend LesVariablesDemandees $VariableDemandee set Variable [set TabVar($VariableDemandee)] } set nVariables [llength $LesVariablesDemandees] if {$nVariables == 0} {exit} #lappend LesVariablesDemandees "Nb_Seq" set TousLesChromos {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08 HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16 HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} foreach Chro $TousLesChromos { set ChromDeRef [NumeroDuChromosome $Chro] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp #set LesRegions [set Tab(LesRegions)] set LesRegions [set Tab($ChromDeRef,LesRegions)] #set LesRegions [ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp] #Espionne $LesRegions #set LesRegions [ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] #Espionne $Variable foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] #set Valeur [set Tab($Region,$Variable)] if {![info exists VMax]} {set VMax $Valeur;continue} if { $VMax < $Valeur} {set VMax $Valeur} } #set Tab($VariableDemandee,$Chro,Max) $VMax } } #Espionne $VMax set VMaxi $VMax #Espionne $nVariables #ChargeMeilleureLocalisationDeMesSequences MesSequences $FichierLocalisation $FichierContigs ChargeFoldDesSequences Expression #numero du chromosome en gras (en bas du chromosome) set PoliceChromo "Courier 7 bold" #ne sert pas? set PoliceBande "Courier 4" # set LargeurMax [expr [winfo screenwidth .] - 100] set HauteurMax [expr [winfo screenheight .] - 200] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set HauteurFenetre [expr [winfo screenheight .] - 200] set BordX 50.0 set BordYInf 50 set BordYSup 50 set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurAffichage [expr ($HauteurMax - ($BordYInf+$BordYSup))*1.0] ChargeBandesCytologiques Genome $FichierBandesCytos set TailleMaxBrasP [set Genome(TaillePMax)] set TailleMaxBrasQ [set Genome(TailleQMax)] set TailleMaxChromo [expr $TailleMaxBrasP + $TailleMaxBrasQ] set NbChromosomes [set Genome(NbChromosomes)] #ex: 30cm /72 donne 4 mm pour largeur chromo set LargeurChromo [expr $LargeurAffichage/($NbChromosomes*3.0)] # ecart entre chro a augmenter : *2 ou 3 set EcartEntreChromo [expr $LargeurChromo*4] #voir explication largeur boite plus loin #dans le dessin des ovals (les sequences) set LargeurBoite [expr $EcartEntreChromo/2] #facteur a modifier #si 3 niveaux de representation #compter aerer aussi set Facteur [expr $HauteurAffichage / ($TailleMaxChromo*3)] #position centromere a changer set PosYDuCentromer [expr $TailleMaxBrasP * $Facteur + $BordYSup] #centromere pour 1er niveau #la fenetre a fond blanc : ne rien changer set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre WithY] $K configure -background white regsub "/home/carles/genomes/" $RepertoireDuGenome "" Titre $K create text [expr $LargeurAffichage/2] 20 -text "$Titre : $LesVariablesDemandees" -font "courrier 12 bold" ################################################################## set LesChromosomes {HS01 HS02 HS03 HS04 HS05 HS06 HS07 HS08} set PosX $BordX foreach Chromosome $LesChromosomes { #Espionne $VMaxi set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] set PosY $PosYDuCentromer set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY $PosYDuCentromer set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## #Espionne $Chromosome set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp set LesRegions [set Tab($ChromDeRef,LesRegions)] #set LesRegions [set Tab(LesRegions)] #Espionne $VMaxi foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] #Espionne $Valeur } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen} { set HauteurAffichageHisto [expr $EcartEntreChromo -20] set PosAxeHisto [expr $PosXMaxHisto - $EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1 ] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} { incr i continue } set ColorFill [set TabVar($Variable,Couleur)] #Espionne "$VariableDemandee $ColorFill" set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMax] if {$SplitScreen && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto set OutLine "red" } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] set OutLine "blue" } $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } #tous les chromosomes (1 a 8) faits $K create line $BordX $PosYDuCentromer [expr $LargeurMax-$BordX] $PosYDuCentromer -fill red ############################################################################################ set LesChromosomes {HS09 HS10 HS11 HS12 HS13 HS14 HS15 HS16} set PosX $BordX foreach Chromosome $LesChromosomes { set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] #pos y a modifier selon numero du chromosome... set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] # set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp #set LesRegions [set Tab(LesRegions)] set LesRegions [set Tab($ChromDeRef,LesRegions)] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen} { set HauteurAffichageHisto [expr $EcartEntreChromo-20] set PosAxeHisto [expr $PosXMaxHisto - $EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} { incr i continue } set ColorFill [set TabVar($Variable,Couleur)] set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMaxi] if {$SplitScreen && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto set OutLine "red" } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] set OutLine "blue" } $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + $PosYDuCentromer+60] $K create line $BordX $PosY [expr $LargeurMax-$BordX] $PosY -fill red ################################################################################### set LesChromosomes {HS17 HS18 HS19 HS20 HS21 HS22 HSX HSY} set PosX $BordX foreach Chromosome $LesChromosomes { #HS01....HSY #Espionne $Chromosome set LesBandesP [lsort [set Genome($Chromosome,LesBandesP)]] #pos y a modifier selon numero du chromosome... set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer *2)+60+60] # set PosXMin [expr $PosX + $EcartEntreChromo] set PosXMax [expr $PosXMin + $LargeurChromo] set PosXBande $PosX set PosX [expr $PosXMax + $EcartEntreChromo] set TailleBrasP [set Genome($Chromosome,TailleP)] set TailleBrasQ [set Genome($Chromosome,TailleQ)] set PosXNomChromo [expr ($PosXMax + $PosXMin)/2] set PosYNomChromoSup [expr $PosY - ($TailleBrasP * $Facteur) - 20] set PosYNomChromoInf [expr $PosY + ($TailleBrasQ * $Facteur) + 20] set Position($Chromosome) [list "$PosXMin" "$PosXMax"] $K create text $PosXNomChromo $PosYNomChromoSup -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] $K create text $PosXNomChromo $PosYNomChromoInf -text "$Chromosome" -font "$PoliceChromo" -tags [list "$Chromosome" "$FichierLocalisation" "Chromosome"] foreach BandeP $LesBandesP { set LesInfos [set Genome($Chromosome,$BandeP)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin [expr $PosY - $Taille*$Facteur] set PosYMax $PosY set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMin $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeP" "$Taille" "BandesCytologiques"] } set ExtremiteDuChromosome $PosYMin set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer*2)+60+60] set LesBandesQ [lsort [set Genome($Chromosome,LesBandesQ)]] foreach BandeQ $LesBandesQ { set LesInfos [set Genome($Chromosome,$BandeQ)] set Taille [lindex $LesInfos 1] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosYMin $PosY set PosYMax [expr $PosY + $Taille*$Facteur] set PosYBande [expr ($PosYMin+$PosYMax)/2] set PosY $PosYMax $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$BandeQ" "$Taille" "BandesCytologiques"] } set ExtremiteBasseDuChromo $PosYMax ##########Affichage Histogrammes################## set ChromDeRef [NumeroDuChromosome $Chromosome] ChargeDistributionsSurRegions Tab $ChromDeRef area1e6bp #set LesRegions [set Tab(LesRegions)] set LesRegions [set Tab($ChromDeRef,LesRegions)] foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] foreach Region $LesRegions { set Valeur [set Tab($ChromDeRef,$Region,$Variable)] } } set PosXMaxHisto [expr $PosXMax + 2*$EcartEntreChromo] if {$SplitScreen} { set HauteurAffichageHisto [expr $EcartEntreChromo-20] set PosAxeHisto [expr $PosXMaxHisto -$EcartEntreChromo] } else { set PosAxeHisto [expr $PosXMax+10] set HauteurAffichageHisto [expr 2*$EcartEntreChromo -20] } set TailleChromo [set Tab($ChromDeRef,Taille)] set FacteurHisto [expr ($ExtremiteBasseDuChromo-$ExtremiteDuChromosome)/$TailleChromo] set Debut 1 foreach Region $LesRegions { set Taille [set Tab($ChromDeRef,$Region,Taille)] set Fin [expr $Debut + $Taille - 1 ] set PosYMin [expr $ExtremiteDuChromosome + ($Debut*$FacteurHisto)] set PosYMax [expr $ExtremiteDuChromosome + ($Fin*$FacteurHisto)] set LargeurDesBarres [expr $Taille*$FacteurHisto/$nVariables] set i 0 foreach VariableDemandee $LesVariablesDemandees { set Variable [set TabVar($VariableDemandee)] set Valeur [set Tab($ChromDeRef,$Region,$Variable)] if {$VMaxi == 0 || $Valeur == 0} { incr i continue } set ColorFill [set TabVar($Variable,Couleur)] set Unit [set TabVar($Variable,Unit)] set PosYm [expr $PosYMin + $i*$LargeurDesBarres] set PosYM [expr $PosYm + $LargeurDesBarres] incr i set FacteurY [expr $HauteurAffichageHisto/$VMaxi] if {$SplitScreen && [regexp -nocase {moins|minus} $Variable]} { set PosXMin [expr $PosAxeHisto - $FacteurY*$Valeur] set PosXMax $PosAxeHisto set OutLine "red" } else { set PosXMin $PosAxeHisto set PosXMax [expr $PosAxeHisto + $FacteurY*$Valeur] set OutLine "blue" } $K create rectangle $PosXMin $PosYm $PosXMax $PosYM -outline $OutLine -fill $ColorFill -tags [list "$VariableDemandee" "$Valeur" "$Unit" "$Region" "Variable"] } set Debut [expr $Fin + 1] } $K create line $PosAxeHisto $ExtremiteDuChromosome $PosAxeHisto $ExtremiteBasseDuChromo -fill black -width 2 } set PosY [expr $TailleMaxBrasP * $Facteur + $BordYSup + ($PosYDuCentromer*2)+60+60] $K create line $BordX $PosY [expr $LargeurMax-$BordX] $PosY -fill red ################################################################################## regsub {\.canvas} $K "" w #ces 2 lignes sont necessaires pour affichage #lors du passage de la souris sur chaque region de l histo $K bind "Variable" "DevoileLesHistogrammes $K %x %y Enter" $K bind "Variable" "DevoileLesHistogrammes $K %x %y Leave" # $K bind "Chromosome" <1> "ChromosomeSelectionne $K" $K bind "Chromosome" <2> "AfficheRequeteSurLaMeilleureLocalisation $K" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" $K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K" $K bind "Box" "DevoileLesBoites $K %x %y Enter" $K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Box" <1> "AfficheFicheInfo $K" set B [BoutonneLaFenetre $w "Histogramm"] bind $B <1> "ChoixHistogramme" set Boutons "$w.buttons" } proc SpecialPourLesProteinesProCure {{LesNoms ""} {Keep ""}} { global RepertoireDuGenome set RepRapports "$RepertoireDuGenome/rapportsaccess" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set Liste [ListeDesPABs]} else {set Liste [split $LesNoms " "]} foreach Nom $Liste { if {$Keep && [file exists "$RepRapports/$Nom"]} { continue } Espionne $Nom set Rapport {} #Generalites lappend Rapport "GscopeCode: $Nom" set Longueur [DecortiqueBlastPourLongueurQuery $Nom] set Access [DecortiqueBlastPourAccessQuery $Nom] lappend Rapport "Length: $Longueur" lappend Rapport "Access: $Access" #BlastP set LesCopains [MeilleursCopains $Nom] if {$LesCopains != {} } { set MeilleurCopain [lindex $LesCopains 0] if {$MeilleurCopain=="No hits found" || $MeilleurCopain=="No human protein with expect less than 1.e-3 in the BlastP results" || $MeilleurCopain=="No blastp file available" } { lappend Rapport "BlastPDef: $MeilleurCopain" } else { set Access "" set PlusieursFonctions 0 scan $MeilleurCopain "%s %s" BID Access regsub "$BID $Access" $MeilleurCopain "" PremDef set PremDef [string trim $PremDef] lappend Rapport "BlastPAccess: $BID" lappend Rapport "BlastPDef: $PremDef" if {[expr [llength $LesCopains] > 1]} { foreach Cop [lrange $LesCopains 1 end] { scan $Cop "%s %s" BID Access set Definition [join [lrange [split $Cop " "] 2 end] " "] if {$Definition!=$PremDef} {set PlusieursFonctions 1 ; break} } } lappend Rapport "BlastPMore: $PlusieursFonctions" } } #TBlastN est set LesCopains [LesMeilleursCopainsDuBlast $Nom "tblastnest"] if {$LesCopains != {} } { set MeilleurCopain [lindex $LesCopains 0] if {[regexp -nocase "^no hit" $MeilleurCopain]} { set MeilleurCopain "No hits found" } if {$MeilleurCopain=="No hits found" } { lappend Rapport "TBlastNest: $MeilleurCopain" } else { set Access "" set PlusieursFonctions 0 scan $MeilleurCopain "%s %s %s" BID Access Expect regsub "$BID $Access $Expect" $MeilleurCopain "" PremDef set PremDef [string trim $PremDef] lappend Rapport "TBlastNestAccess: $BID" lappend Rapport "TBlastNestDef: $PremDef" lappend Rapport "TBlastNestExpect: $Expect" if {[expr [llength $LesCopains] > 1]} { foreach Cop [lrange $LesCopains 1 end] { scan $Cop "%s %s" BID Access set Definition [join [lrange [split $Cop " "] 2 end] " "] if {$Definition!=$PremDef} {set PlusieursFonctions 1 ; break} } } lappend Rapport "TBlastNestMore: $PlusieursFonctions" } } Espionne "fin" SauveLesLignes $Rapport dans "$RepRapports/$Nom" } return "" } proc SpecialProstateConsensus {{Start ""} {Keep ""}} { global RepertoireDuGenome set RepRapports "$RepertoireDuGenome/rapportsaccess" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } foreach Nom [ListeDesPABs] { Espionne $Nom if {$Start!="" && $Nom!=$Start} { continue } set Start "" if {$Keep && [file exists "$RepRapports/$Nom"]} { continue } set Rapport {} #Generalites lappend Rapport "GscopeCode: $Nom" set Longueur [SeqLength $Nom] set codeCl [CodeClone $Nom] set User [OwnerOfCDNA $Nom] lappend Rapport "Length: $Longueur" lappend Rapport "CodeClone: $codeCl" lappend Rapport "User: $User" #RepeatMasker set TypeMask [QuelMask $Nom] Espionne $TypeMask set PourcentMask [ExtraitInfo $Nom "RMPourcent"] lappend Rapport "MaskType: $TypeMask" lappend Rapport "MaskedProportion: $PourcentMask" set TypeRepeat [ExtraitInfo $Nom "RM"] if { $TypeRepeat!="" } { lappend Rapport "RepeatType: $TypeRepeat" } #ReMasking set TypeMask2 [QuelMask2 $Nom] Espionne $TypeMask2 set PourcentMask2 [QuelPourcent2 $Nom] if {$PourcentMask2==""} { lappend Rapport "ReMasking: $TypeMask2" lappend Rapport "ReMaskingPercent: 0%" } else { lappend Rapport "ReMasking: $TypeMask2" lappend Rapport "ReMaskingPercent: $PourcentMask2" } #BlastN contre le genome humain apres remasking set PolyLoc [PolyLocalise $Nom] Espionne $PolyLoc lappend Rapport "LocType: $PolyLoc" if { $PolyLoc!="NoBlastFile" && $PolyLoc!="NoLocalization"} { set MeilleureLoc [MeilleureLocalisationSurChroContig $Nom] scan $MeilleureLoc "%s %s %d %d %s" Chro Contig Debut Fin Orient regsub "HS" $Chro "" Chro lappend Rapport "Chromosome: $Chro" lappend Rapport "Contig: $Contig" lappend Rapport "Begin: $Debut" lappend Rapport "End: $Fin" lappend Rapport "Orientation: $Orient" } #BlastX set LesCopains [LesMeilleursCopainsDuBlast $Nom "blastx"] if {$LesCopains != {} } { set MeilleurCopain [lindex $LesCopains 0] if {[regexp -nocase "^no hit" $MeilleurCopain]} { set MeilleurCopain "No hits found" } if {$MeilleurCopain=="No hits found" || $MeilleurCopain=="No human protein with expect less than 1.e-3 in the BlastX results" || $MeilleurCopain=="No blastx file available" } { lappend Rapport "BlastXDef: $MeilleurCopain" } else { set Access "" set PlusieursFonctions 0 scan $MeilleurCopain "%s %s" BID Access regsub "$BID $Access" $MeilleurCopain "" PremDef set PremDef [string trim $PremDef] lappend Rapport "BlastXAccess: $BID" lappend Rapport "BlastXDef: $PremDef" if {[expr [llength $LesCopains] > 1]} { foreach Cop [lrange $LesCopains 1 end] { scan $Cop "%s %s" BID Access set Definition [join [lrange [split $Cop " "] 2 end] " "] if {$Definition!=$PremDef} {set PlusieursFonctions 1 ; break} } } lappend Rapport "BlastXMore: $PlusieursFonctions" } } #mRNA complete cds set ResultatRecherche [ExtraitInfosDesInfosautomatiquesPourNotes $Nom] if {$ResultatRecherche != ""} { Espionne "mRNA:$ResultatRecherche" lappend Rapport "mRNA: $ResultatRecherche" } #BlastN contre genembl et est foreach {Banque Titre} {blastngenembl Genembl blastnest Est} { set LesCops [LesMeilleursCopainsDuBlast $Nom $Banque] if {$LesCops=={}} { lappend Rapport "${Titre}Def: values not yet available" } elseif {[lindex $LesCops 0]=="File not yet available"} { lappend Rapport "${Titre}Def: values not yet available" } elseif {[lindex $LesCops 0]=="No value"} { lappend Rapport "${Titre}Def: no value available" } elseif {[lindex $LesCops 0]=="No hit"} { lappend Rapport "${Titre}Def: no hit" } else { set PremiereFois 1 set Autre 0 foreach Cop $LesCops { set Genre "Inconnu" set Espece "inconnu" scan $Cop "%s %s %s %s %s" BID Access Expect Genre Espece set OS "$Genre $Espece" set DE [join [lrange [split $Cop " "] 5 end] " "] if { ! [regexp -nocase "Homo sapiens" $OS]} { continue } if {$PremiereFois} { lappend Rapport "${Titre}Def: $DE" lappend Rapport "${Titre}Access: $BID" set PremDE $DE set PremiereFois 0 continue } if {$DE!=$PremDE} { incr Autre } } lappend Rapport "${Titre}More: [expr $Autre > 0]" } } Espionne "fin" SauveLesLignes $Rapport dans "$RepRapports/$Nom" } return "" } proc SpineDef {Nom} { return [ExtraitInfo $Nom "SpineDef:"] } proc SpineDefinition {Nom} { return [SpineDef $Nom] } proc SpineID {Nom {Full ""}} { set Tout [ExtraitInfo $Nom "SpineID"] if {$Full=="Full"} {return $Tout} set SpineID "" scan $Tout "%s" SpineID return $SpineID } proc SpineIgbmcSite {} { return "http://www-bio3d-igbmc.u-strasbg.fr/Spine" } 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 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 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 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 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 SpineTaskLatest {PAB} { return [lindex [SpineTaskOrdered $PAB] end] } 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 SplitFichierDPC2GO {FichierClust} { if {![file exists $FichierClust]} {return ""} set LeTexte {} foreach Ligne [LesLignesDuFichier $FichierClust] { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} set LaLigne [split $Ligne "\t"] set nClust [lindex $LaLigne 0] if {![info exists nClustDeRef]} {set nClustDeRef $nClust} if {$nClust == $nClustDeRef} { lappend LeTexte $Ligne } else { Sauve [join $LeTexte "\n"] dans "${FichierClust}_clust$nClustDeRef" Espionne "\nClust $nClustDeRef" EspionneL $LeTexte set nClustDeRef $nClust set LeTexte {} lappend LeTexte $Ligne } } Sauve [join $LeTexte "\n"] dans "${FichierClust}_clust$nClust" Espionne "\nClust $nClust" EspionneL $LeTexte return "" } proc SplitGrid {file} { global PipTmpDir global EmuleGrid set Ll [LesLignesDuFichier $file] set EmuleGrid 0 set ns [regsub -all ">" $Ll "" tmp] if {$ns == 1} {return [list $file]} file mkdir "tmp[pid]" set PipTmpDir "tmp[pid]" cd $PipTmpDir set EmuleGrid 1 set Contenu 0 foreach l $Ll { if {[string trim $l] eq ""} {continue} if {[regexp {^>} $l]} { if {[info exists of]} { close $of if {$Contenu < 2} { file delete -force $lefic } else { lappend LesFic $lefic } } set Contenu 0 set ib [string first " " $l] if {$ib == -1} { set ib end } else { set ib [expr {$ib - 1}] } set lefic [string range $l 1 $ib] set of [open $lefic w] } puts $of $l incr Contenu } close $of if {$Contenu < 2} { file delete -force $lefic } else { lappend LesFic $lefic } return $LesFic } proc SplitIntoChrom {Path GPStype} { # Filtre les resultats de match sur la longueur des sequences , le score et le score du coeur set FileIn [open "$Path.coord" "r"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "SplitIntoChrom : Start" while { [gets $FileIn Line] >=0 } { set Line [string trim $Line] #ScanLaListe $Line DR ID ChromosomeH StartH EndH OrientationH SequenceH Score NbMismatch Mismatchs if {$GPStype == "VDR"} { ScanLaListe $Line ChromosomeH DR ID StartH EndH OrientationH SequenceH Score NbMismatch Mismatchs } #GPS CLASSIC: if {$GPStype == "STAF"} { ScanLaListe $Line ID ChromosomeH StartH EndH OrientationH ActacaH SequenceH ScoreH UpstreamH DownstreamH } if {$GPStype == "Classic"} { ScanLaListe $Line ID ChromosomeH StartH EndH OrientationH } foreach chrom {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 "X" "Y"} { if { $ChromosomeH == $chrom } { if {![info exists FileOut($chrom)]} { set FileOut($chrom) [open "$Path.chr$chrom.coord" "w"] } puts $FileOut($chrom) $Line } } } foreach chrom {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 "X" "Y"} { if { [info exists FileOut($chrom)] } { close $FileOut($chrom) } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "SplitIntoChrom : End" } proc SplitLaSortieOligoArray {{Fichier ""} {Destination ""}} { Wup "Split le fichier de sortie de OligoArray 1.0 en plusieurs fichier par PAB" Wup "Modifie entete en ajoutant OligoNb >PAB OligoNb ...." if {$Fichier == "" || $Destination == ""} { return "Correct syntax SplitLaSortieOligoArray FileOligoarray SaveDestination" } set RepDesOligos "[RepertoireDuGenome]/Probes" if {[regexp {/} "$Fichier"]} { set FichierOligoArray "$RepDesOligos/[file tail $Fichier]" } else { set FichierOligoArray "$RepDesOligos/$Fichier" } if {! [file exists $FichierOligoArray]} { return "No Existings OligoArray 1.0 output file" } else { Espionne "I treat [file tail $FichierOligoArray] as OligoArray 1.0 Input file" } if {[regexp {/} $Destination]} { set Destination "$RepDesOligos/[file tail $Destination]" } else { set Destination "$RepDesOligos/$Destination" } if {! [file exists $Destination]} {file mkdir $Destination} set FichierRejete "$RepDesOligos/${Fichier}_Rejected" set AvecRejete 1 if {! [file exists $FichierRejete]} { set AvecRejete 0 Espionne "No Existing OligoArray 1.0 Rejected files" } else {Espionne "I will use [file tail $FichierRejete] for OligoArray 1.0 Rejected file"} set F [open "$FichierOligoArray"] set i 0 while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [regexp {\>} $Ligne] } { scan $Ligne "%s" PAB regsub {\>} $PAB "" PAB if {[info exists DejaFait($PAB)]} {continue} set FileToSave "$Destination/$PAB" if {! [info exists DejaVu($PAB)] && [file exists $FileToSave]} { set DejaFait($PAB) 1 continue } if {! [info exists DejaVu($PAB)]} { set IDePAB($PAB) 1 set DejaVu($PAB) 1 } regsub ">$PAB" $Ligne ">$PAB Oligo[set IDePAB($PAB)]" Ligne incr IDePAB($PAB) AppendAuFichier $FileToSave $Ligne continue } if {[info exists DejaFait($PAB)]} {continue} AppendAuFichier $FileToSave $Ligne } close $F if {$AvecRejete} {SplitLesRejetesOligoArray $FichierRejete $Destination} return "" } proc SplitLeGrosGenbank {{Fichier ""} {Petit ""}} { global RepertoireDuGenome if {$Fichier==""} { set Fichier [ButineArborescence "All" "$RepertoireDuGenome"] } if {$Fichier==""} { return {} } set n 1 foreach Ligne [LesLignesDuFichier $Fichier] { lappend T($n) $Ligne if {[regexp "^//" $Ligne]} { incr n } } incr n -1 if {$n==1} { FaireLire "I found only one section in $Fichier" } set Format "%5.5d" if { 1<$n && $n< 10} { set Format "%1.1d" } if { 9<$n && $n< 100} { set Format "%2.2d" } if { 99<$n && $n< 1000} { set Format "%3.3d" } if {999<$n && $n<10000} { set Format "%4.4d" } if {$Petit==""} { set Petit [file tail $Fichier] set Rep [file dirname $Fichier] regsub ".gbk$" $Petit "" Petit regsub -nocase {_[a-z]*$} $Petit "" Petit append Petit "_" while {1} { set PetitMin [format "%s$Format%s" $Petit 1 ".gbk"] set PetitMax [format "%s$Format%s" $Petit $n ".gbk"] if {[OuiOuNon "I will create the files\n$PetitMin to $PetitMax\nin $Rep"]} { break } set Petit [Entre $Petit] } } foreach i [NombresEntre 1 $n] { set PetitNom [format "%s$Format%s" $Petit $i ".gbk"] set PetitFichier [SauveLesLignes [set T($i)] dans "$Rep/$PetitNom"] lappend LesPetits $PetitFichier } return $LesPetits } proc SplitLeTFAS {{Fichier ""} {Destination ""}} { Wup "Split le fichier fasta multiple en fichier separes" Wup "Retourne les noms de fichiers crees" if {$Destination==""} { set Destination [tk_chooseDirectory -title "Choose a saving directory." -initialdir "[RepertoireDuGenome]"] } if {$Destination!=""} {set Destination "$Destination/"} set PABOk 0 if {[OuiOuNon "The name of the files will be the word next to the >\nex: >ACT0001 will be saved in ACT0001\nDo you want to use this (Yes) or choose yourself the file name (No) ?"]} { set PABOk 1 } else {set PABOk 0} set i 0 set FileToSave "" set LesNewFiles "" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [string range $Ligne 0 0] == ">"} { incr i if {$PABOk} { scan $Ligne "%s" PAB regsub {\>} $PAB "" PAB if {[regexp "RSHUM:" $PAB]} { regsub "RSHUM:" $PAB "" PAB } set FileToSave "${Destination}${PAB}" } else { set FileToSave "" while {$FileToSave==""} { set FileToSave [tk_getSaveFile -title "Choose a file name to save sequence N°${i}" -initialdir "[RepertoireDuGenome]"] } } lappend LesNewFiles $FileToSave if {[file exists $FileToSave]} { if {[OuiOuNon "$FileToSave already exists !\nWould you like to save either and lost previous?"]} { file delete -force $FileToSave AppendAuFichier $FileToSave $Ligne } else { set FileToSave "" } } else { AppendAuFichier $FileToSave $Ligne } continue } if {$FileToSave == ""} { continue } else { AppendAuFichier $FileToSave $Ligne } } close $F return "$LesNewFiles" } proc SplitLesEMBL {rep} { # list or not ? if {[string first "\n" $rep] != -1} { set rep [split $rep \n] } set Li [lsearch -all -regexp $rep {^//} ] set Lfile [list] set a 0 foreach b $Li { set Ll [lrange $rep $a $b] lappend Lfile $Ll set a [expr {$b + 1}] } return $Lfile } proc SplitLesRejetesOligoArray {FichierRejete Destination} { Wup "Split la sortie des fichiers rejete par OligoArray 1.0" Wup "Modifie entete en ajoutant >PAB NoOligo Available" Wup "Un fichier par Sequence dans le repertoire indique" set F [open "$FichierRejete"] while {[gets $F Ligne]>=0} { set PAB "" if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {[regexp {\>} $Ligne] } { scan $Ligne "%s" PAB regsub {\>} $PAB "" PAB set FichierASauver "$Destination/$PAB" if {[file exists $FichierASauver]} {continue} regsub ">$PAB" $Ligne ">$PAB NoOligo Available" Ligne AppendAuFichier $FichierASauver $Ligne } } close $F return "" } proc SplitOrgas {Organismes} { set OrgaJoinCar ":" return [split $Organismes $OrgaJoinCar] } proc SplitterSelonBrin {} { foreach J {0 1 2 3 4 5 6} { foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y} { if { [file isfile "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-unperfect.coord"]} { Espionne "SplitterSelonBrin : DR$J / Chromosome $I" set FichierIn [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-unperfect.coord" "r"] set FichierF [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-F.coord" "w"] set FichierR [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-R.coord" "w"] while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne nbMatchs sequenceNumber matchStart matchEnd matchType hs1Mistake hs2Mistake matchSequence if { $matchType == "F"} { puts $FichierF $Ligne } else { puts $FichierR $Ligne } } close $FichierF close $FichierR close $FichierIn file delete "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-unperfect.coord" } } } } proc SplitterSelonMM {} { foreach J {0 1 2 3 4 5 6} { foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y} { if { [file isfile "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless.coord"]} { Espionne "SplitterSelonRepeats : DR$J / Chromosome $I" set FichierIn [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless.coord" "r"] set FichierPerfect [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless-perfect.coord" "w"] set FichierHalfPerfect1 [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless-halfperfect1.coord" "w"] set FichierHalfPerfect2 [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless-halfperfect2.coord" "w"] set FichierUnperfect [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless-unperfect.coord" "w"] while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne nbMatchs sequenceNumber matchStart matchEnd matchType hs1Mistake hs2Mistake matchSequence if { $hs1Mistake == "0@" && $hs2Mistake == "0@"} { puts $FichierPerfect $Ligne } elseif { $hs1Mistake == "0@" && $hs2Mistake != "0@"} { puts $FichierHalfPerfect1 $Ligne } elseif { $hs1Mistake != "0@" && $hs2Mistake == "0@"} { puts $FichierHalfPerfect2 $Ligne } else { puts $FichierUnperfect $Ligne } } close $FichierPerfect close $FichierHalfPerfect1 close $FichierHalfPerfect2 close $FichierUnperfect close $FichierIn file delete "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless.coord" } } } } proc SplitterSelonMM2 {} { foreach J {0 1 2 3 4 5 6} { foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y} { if { [file isfile "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-unperfect.coord"]} { Espionne "SplitterSelonMM2 : DR$J / Chromosome $I" set FichierIn [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-unperfect.coord" "r"] set Fichier1MM [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-1MM.coord" "w"] set Fichier2MM [open "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-2MM.coord" "w"] while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne nbMatchs sequenceNumber matchStart matchEnd matchType hs1Mistake hs2Mistake matchSequence set hs1Mistake [string range $hs1Mistake 0 1] if { $hs1Mistake == "1@" || $hs2Mistake == "1@"} { puts $Fichier1MM $Ligne } else { puts $Fichier2MM $Ligne } } close $Fichier1MM close $Fichier2MM close $FichierIn file delete "/genomics/link/RGKTSA/Coordonnees/unperfect/chr$I-$J-repeatless-unperfect.coord" } } } } proc SplitterSelonNbLignes {Path DR NbLignesVoulues} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|SplitterSelonNbLignes : Start" set lus 0 #foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y} { #if { [file isfile "$Path/chr$I-$DR.coord"]} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|SplitterSelonNbLignes : DR$DR / Chromosome $I" #set FichierIn [open "$Path/chr$I-$DR.coord" "r"] set FichierIn [open "$Path.coord" "r"] set facteur 0 #set FichierOut [open "$Path/cut/chr$I-$DR-0.coord" "w"] set FichierOut [open "$Path-0.coord" "w"] set L 0 while { [gets $FichierIn Ligne] >=0 } { #Espionne $lus set K 0 for {set K 0} { $K <= 100} {incr K} { set facteur [expr $K * $NbLignesVoulues] #Espionne "$NbLignesVoulues $facteur" if { $lus == $facteur } { incr L set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|SplitterSelonNbLignes : New file ! ($L)" close $FichierOut #set FichierOut [open "$Path/cut/chr$I-$DR-$L.coord" "w"] set FichierOut [open "$Path-$L.coord" "w"] break } } incr lus puts $FichierOut $Ligne } close $FichierIn set K 0 set L 0 set lus 0 #} #file delete "$Path/chr$I-$DR-0.coord" #} } proc SplitterSelonRepeats {} { foreach J {0 1 2 3 4 5 6} { foreach I {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y} { Espionne "SplitterSelonRepeats : DR$J / Chromosome $I" set FichierIn [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J.coord" "r"] set FichierSansRepeat [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeatless.coord" "w"] set FichierAvecRepeats [open "/genomics/link/RGKTSA/Coordonnees/chr$I-$J-repeats.coord" "w"] while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne nbMatchs sequenceNumber matchStart matchEnd matchType hs1Mistake hs2Mistake matchSequence if {[regexp {[a t c g]} $matchSequence]} { puts $FichierAvecRepeats $Ligne } else { puts $FichierSansRepeat $Ligne } } close $FichierSansRepeat close $FichierAvecRepeats close $FichierIn file delete "/genomics/link/RGKTSA/Coordonnees/chr$I-$J.coord" } } } proc Spy {T} { JeMeSignale puts [$T dump root] } proc SpyAgent {w pos} { global TAg LNOrdali debug debsq debag lassign [split [$w index $pos] .] y x set idx [expr {$y-1}] # search agent in seq y-th with mil at x set n [lindex $LNOrdali $idx] set debag "" set Lag [array names TAg "*,$n,mil"] foreach k $Lag { lassign $k ag tmp tmp if {$TAg($k) == $x} { set debug 1 set debsq $n set debag $ag .t tag add Spy $y.$TAg($ag,$n,dep) $y.[expr {$TAg($ag,$n,fin)+1}] break } } return } proc SpyOnEntryVariable {} { Wup "Positionne des espions et des procedures pour empecher l entree de donnees non valides" set LesVars [list EdgeBegin EdgeEnd] foreach Var $LesVars { global $Var trace add variable $Var write {forceLen 6} trace add variable $Var write forceInt set $Var "" } set LesVars [list StepVar LengthVar NbContiguous WordVar NbAlignedVar] foreach Var $LesVars { global $Var trace add variable $Var write {forceLen 3} trace add variable $Var write forceInt set $Var "" } set LesVars [list TmVar TmRange SpecificityVar GCContentMinusVar GCContentPlusVar] foreach Var $LesVars { global $Var trace add variable $Var write {forceLen 4} trace add variable $Var write forceReal set $Var "" } set LesVars [list ExpectVar] foreach Var $LesVars { global $Var trace add variable $Var write {forceLen 7} set $Var "" } set LesVars [list NbAlignedVar] foreach Var $LesVars { global $Var trace add variable $Var write {forceLen 5} trace add variable $Var write forceInt set $Var "" } set LesVars [list NbOligoVar] foreach Var $LesVars { global $Var trace add variable $Var write {forceLen 7} trace add variable $Var write forceInt set $Var "" } set LesVars [list ProhibVar] foreach Var $LesVars { global $Var trace add variable $Var write {forceRegexp {^[ ATGC]*$}} set $Var "" } return "" } proc Sqdb {D64 Q64 {Quoi ""} {Clear ""}} { return [SqlExecForDatabase [Base64Decode $D64] [Base64Decode $Q64] $Quoi $Clear] } proc SqdbTest {Database Query {Quoi ""} {Clear ""}} { set D64 [Base64Encode $Database] set Q64 [Base64Encode $Query] # set Url "[LbgiUrl]/~ripp/cgi-bin/GscopeServer?EVImm&Sqdb&$D64&$Q64&$Quoi&$Clear" # set R [ContenuDuFichier $Url] set R [QuestionDeScience EVImm "ret Sqdb $D64 $Q64 $Quoi $Clear"] return $R } proc SqlColumnName {Table {Schema ""} {Database ""}} { if {$Schema==""} { if {[regexp {^([^\.]+)\.([^\.]+)} $Table S T]} { set Schema $S set Table $T } else { set Schema "public" } } set Sql "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS where table_schema='$Schema' and table_name='$Table'"; if {$Database!=""} { return [SqlExecForDatabase $Database $Sql "GetList"] } return [SqlExec $Sql "GetList"] } proc SqlConnect {args} { global SqlExecCounter if { ! [info exists SqlExecCounter]} { set SqlExecCounter 0 } if {[TestonsSql]} { set Query [join $args " "] return [incr SqlExecCounter] } set Retour [eval pg_connect $args] return $Retour } proc SqlDisconnect {Canal} { if {[TestonsSql]} { return "$Canal is closed" } if {[regexp "mysql" $Canal]} { mysqlclose $Canal return "$Canal is closed" } if {[regexp -nocase "Sqlite" $Canal]} { $Canal close return "$Canal is closed" } pg_disconnect $Canal return "$Canal is closed" } proc SqlExec {Query {Quoi ""} {Clear ""}} { if {[regexp "EqUaL" $Query]} { regsub -all "EqUaL" $Query "=" Query } if { ! [regexp {[ \n]} $Query]} { regsub -all @ $Query " " Query } LogInsUpDelPourExec $Query global SqlExecCounter if {[TestonsSql]} { if { ! [info exists SqlExecCounter]} { set SqlExecCounter 0 } return [incr SqlExecCounter] } if {[regexp -nocase "mysql" [CanalSql]]} { if {$Quoi==""} { set Quoi "-flatlist" } if {[regexp -nocase "^ *(select)" $Query]} { set Result [mysqlsel [CanalSql] $Query $Quoi] } elseif {[regexp -nocase "^ *(insert|update|delete)" $Query]} { set Result [mysqlexec [CanalSql] $Query] } else { if { ! [regexp -nocase { *mysql[^ \n]+[ \n]+mysql[^ \n]+[ \n]} $Query]} { regsub -nocase {mysql[^ \n]+[ \n]} $Query "&[CanalSql] " Query } set Result [eval $Query] } return $Result } if {[regexp -nocase "sqlite" [CanalSql]]} { if {$Quoi==""} { set Quoi "GetArray" } set Handle [CanalSql] if {$Quoi=="GetList"} { return [$Handle eval $Query] } if {$Quoi=="GetFirstValue"} { return [$Handle onecolumn $Query] } set i 0 set LeA {} set LeR {} $Handle eval $Query X { if {$Quoi=="GetNames"} { return $X(*) } set LeRecord {} # foreach {K V} [array get X] #rR il y avai tça avant 2016/10/07 ... du coup on n'avait pas l'ordre foreach K $X(*) { set V $X($K) if {$K=="*"} { continue } lappend LeR [list $K $V] lappend LeA [list "$i,$K" $V] lappend LeRecord $V } incr i lappend LesRecords $LeRecord } if {$Quoi=="GetListOfList"} { return $LesRecords } if {$Quoi=="GetArray"} { return $LeA } return $LeR return [array get X] } set Handle [pg_exec [CanalSql] $Query] if {$Quoi=="GetHandle"} { return $Handle } return [SqlResult $Handle $Quoi $Clear] } proc SqlExecForDatabase {Database Query {Quoi ""} {Clear ""}} { CanalSql [ConnInfoForDatabase $Database] return [SqlExec $Query $Quoi $Clear] } proc SqlInsertOnceRecordIntoTable {Table args} { if {[set TellMeIfAlreadyExists [regexp {^\+} $Table]]} { regsub {^\+} $Table "" Table } set LeWhere {} foreach {C V} $args { if {$C==""} { continue } if {$V==""} { continue } lappend LeWhere "$C=[QuoteEtBackslashPourSql $V]" } if {$LeWhere!={}} { set Where [join $LeWhere " and "] if {[AvecPkTable $Table]} { set Query "select pk_$Table from $Table where $Where" } else { set Query "select * from $Table where $Where" } set Pk [SqlExec $Query "GetFirstValue"] if { ! [IsSqlNull $Pk]} { if {$TellMeIfAlreadyExists} { append Pk " already exists" } return $Pk } } return [eval SqlInsertRecordIntoTable $Table $args] } proc SqlInsertRecordIntoTable {Table args} { set LesC {} set LesV {} set AvecPkTable [AvecPkTable $Table] set PkTable -1 if {$AvecPkTable} { set PkTable [ProchainPk $Table] set LesC [list "pk_$Table"] set LesV [list $PkTable] } foreach {C V} $args { if {$C==""} { continue } lappend LesC $C lappend LesV [QuoteEtBackslashPourSql $V] } set Cs "([join $LesC ","])" set Vs "([join $LesV ",\n"]\n)" set SqlInsert "insert into $Table $Cs values $Vs" SqlExec $SqlInsert "Clear" "Clear" if {$PkTable==-1} { catch { regsub {[^\.]+\.} $Table "" LocalTable set SqlLastValue "select last_value from ${Table}_pk_${LocalTable}_seq ;" set PkTable [SqlExec $SqlLastValue] } } LogInsUpDelPourExec "pk_$Table inserted $PkTable" return $PkTable } proc SqlResult {Handle {Quoi ""} {Clear ""}} { if {$Clear==""} { set Clear "Clear" } if {$Quoi==""} { set Quoi "GetFirstValue" } if {$Quoi=="Clear"} { pg_result $Handle -clear ; return "" } # Espionne [pg_result $Handle -attributes] # exit # pg_result $Handle -assign toto # EspionneL [array get toto] # exit set Resultat "" if {[regexp -- {^\-} $Quoi]} { #rR on peut demander ce qu'on veut set Resultat [encoding convertfrom ascii [pg_result $Handle $Quoi]] } elseif {$Quoi=="GetFirstValue" || $Quoi=="GetLastValue" || $Quoi=="GetList"} { set LeResultat [encoding convertfrom ascii [pg_result $Handle -list]] if {$LeResultat=={}} { set Resultat "" } else { if {$Quoi=="GetList" } { set Resultat $LeResultat } if {$Quoi=="GetFirstValue"} { set Resultat [lindex $LeResultat 0] } if {$Quoi=="GetLastValue" } { set Resultat [lindex $LeResultat end] } } } else { FaireLire "Wrong second arg in SqlResult" return "" } if {$Clear=="Clear"} { pg_result $Handle -clear } return $Resultat } proc SqueletteDeProc {} { lappend LeSquel "proc ChangeMyName {} {" lappend LeSquel " global RepertoireDuGenome" lappend LeSquel " " lappend LeSquel " " lappend LeSquel "}" return [join $LeSquel "\n"] } proc SshScore {{Query ""} {Subject ""}} { #rR SequenceSizeHomologyScore set OxQ [OiCode $Query OX] set OxS [OiCode $Subject OX] set OiQ [OiCode $Query OI] set OiS [OiCode $Subject OI] } proc Staf {Ligne Colonne} { global Staf if {[info exists Staf($Ligne,$Colonne)]} { return $Staf($Ligne,$Colonne) } if {[info exists Staf("EstCharge")]} { return "" } set Staf("EstCharge") 1 set FichierStaf "/genomics/link/UCSCAlignements/STAF/DeCarbon/sites_SBS_Table_S1_14cOK.csv" set Queue [file tail $FichierStaf] regsub -nocase {\.[^\.]+$} $Queue "" Queue if {[FileAbsent $FichierStaf]} { regsub "OK.csv$" $FichierStaf ".csv" FichierStafOri set Texte [ContenuDuFichier $FichierStafOri] set In 0 foreach C [split $Texte ""] { if {$C=="\""} { set In [expr ! $In] continue } if {$In && $C=="\n"} { set C "#/" } lappend LesC $C } set BonTexte [join $LesC ""] Sauve $BonTexte dans $FichierStaf } #rR LoadTxl LoadTxl $FichierStaf Staf -1 "" set LesTetes $Staf(ListHeaderPlease,$Queue) set LesIndex $Staf(ListAllPlease,$Queue) #rR loadTxl set Staf(ListOf,Header) $LesTetes set Staf(ListOf,Index) $LesIndex return [Staf $Ligne $Colonne] } proc StafDansBidir {} { set FichierDesBiDir [open "/genomics/link/STAF/fiches/Bidir/1000/Genes.bidir" "r"] set FichierDesSequencesPromotricesTotales [open "/genomics/link/STAF/fiches/Bidir/1000/SequencesTotales.bidir" "w"] set FichierDesSequencesPromotricesIdentifiees [open "/genomics/link/STAF/fiches/Bidir/1000/SequencesOK.bidir" "w"] set FichierDesParfaits [open "/genomics/link/STAF/fiches/Bidir/1000/GenesAvecSbs.bidir" "w"] set FichierDesEtendus [open "/genomics/link/STAF/fiches/Bidir/1000/GenesAvecSbsEtendus.bidir" "w"] set I 0 while { [gets $FichierDesBiDir LigneBiDir] >=0} { incr I Espionne "Scan du bidir $I" ScanLaListe $LigneBiDir Chromosome Start End Distance Access1 Type1 Description1 Access2 Type2 Description2 regsub -all -nocase {chr0} $Chromosome "" Chromosome regsub -all -nocase {chr} $Chromosome "" Chromosome set ExtendLeft [expr $Start - 400] set ExtendRight [expr $End + 400] set Sequence [BoutAdnDeUcscBoost $ExtendLeft $ExtendRight "+" "Human" $Chromosome "bigZips200603" ] # Deprecated : Verifier les SBS de master dans les genes bidir #set FichierLocalisations [open "/genomics/link/STAF/fiches/Mapping/NV3/MappingSurLeChromosome$Chromosome.txt" "r"] #while { [gets $FichierLocalisations LigneLocalisation] >=0} { #ScanLaListe $LigneLocalisation StafId Chromosome SbsStart SbsEnd TargetGene Reste # if { $ExtendLeft <= $SbsStart && $SbsEnd <= $ExtendRight } { # if { $Start <= $SbsStart && $SbsEnd <= $End } { # puts $FichierDesParfaits "$LigneLocalisation $LigneBiDir" # } else { # puts $FichierDesEtendus "$LigneLocalisation $LigneBiDir" # } # } #} set Entete ">$Access1.$Access2.$Start.$End.$ExtendLeft.$ExtendRight." puts $FichierDesSequencesPromotricesTotales [formatFasta $Entete $Sequence] # close $FichierLocalisations } close $FichierDesSequencesPromotricesIdentifiees close $FichierDesSequencesPromotricesTotales close $FichierDesBiDir close $FichierDesParfaits close $FichierDesEtendus Espionne "SbsDansBiDir : Done" } proc StafLogScoreFunction {Sequence} { set Score 0 set Position 0 set SequenceArray [split $Sequence ""] foreach Base $SequenceArray { incr Position set ScoreBase 0 if {$Position == 1 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -1.33 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 0.39 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -1.41 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase 0.97 } else { set ScoreBase -1000 } } if {$Position == 2 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -3.01 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -2.17 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -4.09 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase 1.96 } else { set ScoreBase -1000 } } if {$Position == 3 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -6.18 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 1.86 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -6.41 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -3.86 } else { set ScoreBase -1000 } } if {$Position == 4 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -60.18 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 1.88 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -60.41 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -60.18 } else { set ScoreBase -1000 } } if {$Position == 5 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -60.18 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 1.88 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -60.41 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -60.18 } else { set ScoreBase -1000 } } if {$Position == 6 } { if { $Base == "A" || $Base == "a" } { set ScoreBase 1.89 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -5.41 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -0.96 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -6.18 } else { set ScoreBase -1000 } } if {$Position == 7 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -1.28 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -1.02 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase 1.29 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -1.01 } else { set ScoreBase -1000 } } if {$Position == 8 } { if { $Base == "A" || $Base == "a" } { set ScoreBase 0.6 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 0.53 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -0.31 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -2.38 } else { set ScoreBase -1000 } } if {$Position == 9 } { if { $Base == "A" || $Base == "a" } { set ScoreBase 1.54 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -3.83 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase 0.09 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -0.12 } else { set ScoreBase -1000 } } if {$Position == 10 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -0.9 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -1.77 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase 0.39 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase 0.95 } else { set ScoreBase -1000 } } if {$Position == 11 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -1.23 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -1.33 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase 1.45 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -2.01 } else { set ScoreBase -1000 } } if {$Position == 12 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -4.18 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 1.86 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -5.41 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -6.18 } else { set ScoreBase -1000 } } if {$Position == 13 } { if { $Base == "A" || $Base == "a" } { set ScoreBase 0.26 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 0.72 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -2.24 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -0.05 } else { set ScoreBase -1000 } } if {$Position == 14 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -0.72 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 0.68 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -0.37 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -0.07 } else { set ScoreBase -1000 } } if {$Position == 15 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -2.1 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 1.07 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -2.41 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase 0.52 } else { set ScoreBase -1000 } } if {$Position == 16 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -1.28 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -3.61 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase 1.64 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -2.38 } else { set ScoreBase -1000 } } if {$Position == 17 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -3.18 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase 1.5 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase -0.46 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -3.86 } else { set ScoreBase -1000 } } if {$Position == 18 } { if { $Base == "A" || $Base == "a" } { set ScoreBase -1.05 } elseif { $Base == "C" || $Base == "c" } { set ScoreBase -3.24 } elseif { $Base == "G" || $Base == "g" } { set ScoreBase 1.54 } elseif { $Base == "T" || $Base == "t" } { set ScoreBase -1.6 } else { set ScoreBase -1000 } } if {![info exists ScoreBase] } { Espionne "Aleeeeert $Sequence" } set Score [expr $Score + $ScoreBase] } return $Score } proc StafNP {} { # Récupére les NP à partir des NM set FichierDesGenesOK [open "/tmp/Conservation/EtudeDesProximitesTotales.txt" "r"] #set FichierDesGenesOK [open "/genomics/link/UCSCAlignements/g11/STAF/fiches/Woot/LesBonsBetween.txt" "r"] set FichierDesProteinesOK "/tmp/Conservation/EtudeDesProteinesTotales.txt" if { [file exists $FichierDesProteinesOK] } { file delete $FichierDesProteinesOK } while { [gets $FichierDesGenesOK Ligne] >=0 } { ScanLaListe $Ligne StafID ChromosomeH StartH EndH OrientationBeforeBoost AccBeforeBoost DebBeforeBoost FinBeforeBoost DistanceBefore BeforeValide OrientationAfterBoost AccAfterBoost DebAfter FinAfter DistanceAfter AfterValide OrientationIn AccIn DebIn FinIn DistanceIn TypeIn set NPBeforeBoost "" set NPAfterBoost "" set NP5 "" set NP3 "" if { $BeforeValide == "BeforeOK" } { set NPBeforeBoost [NPduNMperso $AccBefore] if { $NPBeforeBoost == "" } { set NPBeforeBoost "" } } if { $AfterValide == "AfterOK" } { set NPAfterBoost [NPduNMperso $AccAfter] if { $NPAfterBoost == "" } { set NPAfterBoost "" } } if { $TypeIn == "CinqPrime" } { set NP5 [NPduNMperso $AccIn] if { $NP5 == "" } { set NP5 "" } } if { $TypeIn == "TroisPrime" } { set NP3 [NPduNMperso $AccIn] if { $NP3 == "" } { set NP3 "" } } AppendAuFichier $FichierDesProteinesOK "$StafID $NPBeforeBoost $NPAfterBoost $NP5 $NP3" } } proc StafPosiScore {Position Base} { if {$Position == 1 } { if { $Base == "A" || $Base == "a" } { set Score [expr 28./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 111./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 31./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 141./312] } } if {$Position == 2 } { if { $Base == "A" || $Base == "a" } { set Score [expr 8./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 1./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 4./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 282./312] } } if {$Position == 3 } { if { $Base == "A" || $Base == "a" } { set Score [expr 0./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 308./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 0./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 4./312] } } if {$Position == 4 } { if { $Base == "A" || $Base == "a" } { set Score -100000 } if { $Base == "C" || $Base == "c" } { set Score [expr 312./312] } if { $Base == "G" || $Base == "g" } { set Score -100000 } if { $Base == "T" || $Base == "t" } { set Score -100000 } } if {$Position == 5 } { if { $Base == "A" || $Base == "a" } { set Score -100000 } if { $Base == "C" || $Base == "c" } { set Score [expr 312./312] } if { $Base == "G" || $Base == "g" } { set Score -100000 } if { $Base == "T" || $Base == "t" } { set Score -100000 } } if {$Position == 6 } { if { $Base == "A" || $Base == "a" } { set Score [expr 268./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 1./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 43./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 0./312] } } if {$Position == 7 } { if { $Base == "A" || $Base == "a" } { set Score [expr 29./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 41./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 207./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 35./312] } } if {$Position == 8 } { if { $Base == "A" || $Base == "a" } { set Score [expr 109./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 122./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 68./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 13./312] } } if {$Position == 9 } { if { $Base == "A" || $Base == "a" } { set Score [expr 211./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 5./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 90./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 6./312] } } if {$Position == 10 } { if { $Base == "A" || $Base == "a" } { set Score [expr 38./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 24./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 111./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 139./312] } } if {$Position == 11 } { if { $Base == "A" || $Base == "a" } { set Score [expr 30./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 33./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 232./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 17./312] } } if {$Position == 12 } { if { $Base == "A" || $Base == "a" } { set Score [expr 3./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 308./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 1./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 0./312] } } if {$Position == 13 } { if { $Base == "A" || $Base == "a" } { set Score [expr 86./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 140./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 17./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 69./312] } } if {$Position == 14 } { if { $Base == "A" || $Base == "a" } { set Score [expr 43./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 136./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 65./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 68./312] } } if {$Position == 15 } { if { $Base == "A" || $Base == "a" } { set Score [expr 16./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 178./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 15./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 103./312] } } if {$Position == 16 } { if { $Base == "A" || $Base == "a" } { set Score [expr 29./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 6./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 264./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 13./312] } } if {$Position == 17 } { if { $Base == "A" || $Base == "a" } { set Score [expr 7./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 240./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 61./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 4./312] } } if {$Position == 18 } { if { $Base == "A" || $Base == "a" } { set Score [expr 34./312] } if { $Base == "C" || $Base == "c" } { set Score [expr 8./312] } if { $Base == "G" || $Base == "g" } { set Score [expr 247./312] } if { $Base == "T" || $Base == "t" } { set Score [expr 23./312] } } return $Score } proc StafScoreFunctionFois {Sequence} { set Score 1. set Position 0 set SequenceArray [split $Sequence ""] if { ![regexp {\-} $Sequence] } { foreach Base $SequenceArray { incr Position if {$Position == 1 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 18*28./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 18*111./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 18*31./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 18*141./312] } else { set ScoreBase 0 } } if {$Position == 2 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*8./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*1./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*4./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*282./312] } else { set ScoreBase 0 } } if {$Position == 3 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*1./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*308./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*1./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*4./312] } else { set ScoreBase 0 } } if {$Position == 4 } { if { $Base == "A" || $Base == "a" } { set ScoreBase 0 } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*312./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase 0 } elseif {$Base == "T" || $Base == "t" } { set ScoreBase 0 } else { set ScoreBase 0 } } if {$Position == 5 } { if { $Base == "A" || $Base == "a" } { set ScoreBase 0 } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*312./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase 0 } elseif {$Base == "T" || $Base == "t" } { set ScoreBase 0 } else { set ScoreBase 0 } } if {$Position == 6 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*268./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*1./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*43./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*0./312] } else { set ScoreBase 0 } } if {$Position == 7 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*29./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*41./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*207./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*35./312] } else { set ScoreBase 0 } } if {$Position == 8 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*109./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*122./312 + $Score] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*68./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*13./312] } else { set ScoreBase 0 } } if {$Position == 9 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*211./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*5./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*90./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*6./312] } else { set ScoreBase 0 } } if {$Position == 10 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*38./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*24./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*111./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*139./312] } else { set ScoreBase 0 } } if {$Position == 11 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*30./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*33./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*232./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*17./312] } else { set ScoreBase 0 } } if {$Position == 12 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*3./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*308./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*1./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*1./312] } else { set ScoreBase 0 } } if {$Position == 13 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*86./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*140./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*17./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*69./312] } else { set ScoreBase 0 } } if {$Position == 14 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*43./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*136./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*65./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*68./312] } else { set ScoreBase 0 } } if {$Position == 15 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*16./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*178./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*15./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*103./312] } else { set ScoreBase 0 } } if {$Position == 16 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*29./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*6./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*264./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*13./312] } else { set ScoreBase 0 } } if {$Position == 17 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*7./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*240./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*61./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*4./312] } else { set ScoreBase 0 } } if {$Position == 18 } { if { $Base == "A" || $Base == "a" } { set ScoreBase [expr 1.*34./312] } elseif {$Base == "C" || $Base == "c" } { set ScoreBase [expr 1.*8./312] } elseif {$Base == "G" || $Base == "g" } { set ScoreBase [expr 1.*247./312] } elseif {$Base == "T" || $Base == "t" } { set ScoreBase [expr 1.*23./312 ] } else { set ScoreBase 0 } } if {![info exists ScoreBase] } { Espionne "Aleeeeert $Sequence" } #Espionne "$Base : $ScoreBase $Score" set Score [expr $Score * $ScoreBase] } } return $Score } proc StafScoreFunctionPlus {Sequence} { set Score 0 set Position 0 set SequenceArray [split $Sequence ""] if { ![regexp {\-} $Sequence] } { foreach Base $SequenceArray { incr Position if {$Position == 1 } { if { $Base == "A" || $Base == "a" } { set Score [expr 28./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 111./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 31./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 141./312 + $Score] } } if {$Position == 2 } { if { $Base == "A" || $Base == "a" } { set Score [expr 8./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 1./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 4./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 282./312 + $Score] } } if {$Position == 3 } { if { $Base == "A" || $Base == "a" } { set Score [expr 0./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 308./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 0./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 4./312 + $Score] } } if {$Position == 4 } { if { $Base == "A" || $Base == "a" } { set Score -100000 } if { $Base == "C" || $Base == "c" } { set Score [expr 312./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score -100000 } if { $Base == "T" || $Base == "t" } { set Score -100000 } } if {$Position == 5 } { if { $Base == "A" || $Base == "a" } { set Score -100000 } if { $Base == "C" || $Base == "c" } { set Score [expr 312./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score -100000 } if { $Base == "T" || $Base == "t" } { set Score -100000 } } if {$Position == 6 } { if { $Base == "A" || $Base == "a" } { set Score [expr 268./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 1./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 43./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 0./312 + $Score] } } if {$Position == 7 } { if { $Base == "A" || $Base == "a" } { set Score [expr 29./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 41./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 207./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 35./312 + $Score] } } if {$Position == 8 } { if { $Base == "A" || $Base == "a" } { set Score [expr 109./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 122./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 68./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 13./312 + $Score] } } if {$Position == 9 } { if { $Base == "A" || $Base == "a" } { set Score [expr 211./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 5./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 90./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 6./312 + $Score] } } if {$Position == 10 } { if { $Base == "A" || $Base == "a" } { set Score [expr 38./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 24./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 111./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 139./312 + $Score] } } if {$Position == 11 } { if { $Base == "A" || $Base == "a" } { set Score [expr 30./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 33./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 232./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 17./312 + $Score] } } if {$Position == 12 } { if { $Base == "A" || $Base == "a" } { set Score [expr 3./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 308./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 1./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 0./312 + $Score] } } if {$Position == 13 } { if { $Base == "A" || $Base == "a" } { set Score [expr 86./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 140./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 17./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 69./312 + $Score] } } if {$Position == 14 } { if { $Base == "A" || $Base == "a" } { set Score [expr 43./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 136./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 65./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 68./312 + $Score] } } if {$Position == 15 } { if { $Base == "A" || $Base == "a" } { set Score [expr 16./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 178./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 15./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 103./312 + $Score] } } if {$Position == 16 } { if { $Base == "A" || $Base == "a" } { set Score [expr 29./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 6./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 264./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 13./312 + $Score] } } if {$Position == 17 } { if { $Base == "A" || $Base == "a" } { set Score [expr 7./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 240./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 61./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 4./312 + $Score] } } if {$Position == 18 } { if { $Base == "A" || $Base == "a" } { set Score [expr 34./312 + $Score] } if { $Base == "C" || $Base == "c" } { set Score [expr 8./312 + $Score] } if { $Base == "G" || $Base == "g" } { set Score [expr 247./312 + $Score] } if { $Base == "T" || $Base == "t" } { set Score [expr 23./312 + $Score] } } } } return $Score } proc Standardise {l} { set mo 0. set m2 0. set n [llength $l] foreach v $l { set mo [expr {$mo + $v}] set m2 [expr {$m2 + $v*$v}] } set mo [expr {1.*$mo/$n}] set m2 [expr {1.0*$m2/$n}] set var [expr {$m2 - ($mo*$mo)}] if {abs($var) < 1.0e-10} { puts "Achtung !! Var = $var dans normalise" set var 0. } set ect [expr {sqrt($var)}] set nl {} foreach v $l { if {$ect != 0.0} { set nv [expr {($v - $mo)/$ect}] } else { set nv [expr {$v - $mo}] } lappend nl $nv } return $nl } proc StartCodonCluster {Query {FichierMsf ""} {BorneSup 250} {LeGroupeSecator ""} {Affiche 0}} { global RepertoireDuGenome if {$FichierMsf==""} { set FichierMsf "$RepertoireDuGenome/msf/$Query" } if { ! [file exists $FichierMsf]} { return "$Query Pas de fichier msf" } if {$LeGroupeSecator==""} { set LeGroupeSecator [list $Query] set LeGroupeSecator [concat $LeGroupeSecator [GroupeSecator $Query]] } if {[llength $LeGroupeSecator]==1} { return "$Query Pas de groupe secator" } set LesNoms [SelectionDesSequences $LeGroupeSecator] if {[llength $LesNoms]<=2} { return "$Query Pas assez de sequences" } set Contenu [LesLignesDuFichier $FichierMsf] set TailleSeq [LireMSF $Contenu $LesNoms Proteines $BorneSup] MSF2binaire $LesNoms Proteines Bin $TailleSeq set LongueurOK 0 for {set i 1} {$i<=$TailleSeq} {incr i} { if {[set Bin($Query,$i)]} { set LongueurOK 1 break } } if {!$LongueurOK} { array unset Bin array unset Proteines array unset AA set TailleSeq [LireMSF $Contenu $LesNoms Proteines 500] MSF2binaire $LesNoms Proteines Bin $TailleSeq set Longueur500OK 0 for {set i $BorneSup} {$i<500} {incr i} { if {[set Bin($Query,$i)]} { set Longueur500OK 1 break } } if {!$Longueur500OK} { return "$Query Probleme" } } set LissageOK 0 ClusterPositions $LesNoms Bin $TailleSeq GenereCases $LissageOK $TailleSeq set ColDuMet [ColonneDuMet $LesNoms Bin] set Rapport [DiagnosticQuery $Query $LesNoms Bin $ColDuMet $TailleSeq] if {$Affiche} { ClusterSequences Bin $LesNoms $TailleSeq GenereTabSeq $LesNoms TabSeq CodageParCase $LesNoms Bin Affichage $LesNoms Proteines TabSeq } array unset Bin array unset Proteines return $Rapport } 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 StartCodonClusterPourTous_VOIR_LE_NOUVEAU_DANS_gscope_orfs {{BorneSup 250}} { global RepertoireDuGenome set Affiche 0 set FichierStartCodonCluster "$RepertoireDuGenome/fiches/startcodon_cluster" while {[file exists $FichierStartCodonCluster]} { if {[OuiOuNon "$FichierStartCodonCluster already exists.\nDo I append to it ?"]} { foreach Ligne [LesLignesDuFichier $FichierStartCodonCluster] { Espionne "Je garde $Ligne" scan $Ligne "%s" NomLu set DejaVu($NomLu) 1 } break } if {[OuiOuNon "$FichierStartCodonCluster already exists.\nDo I replace it ?" 0]} { File delete -force $FichierStartCodonCluster break } if {[OuiOuNon "$FichierStartCodonCluster already exists.\nDo 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 StartCodonReport {Nom {Quoi Signification}} { global StartCodonReport global RepertoireDuGenome if {[info exists StartCodonReport($Nom,$Quoi)]} { return [set StartCodonReport($Nom,$Quoi)]} if {[info exists StartCodonReport("EstCharge")]} { return [set StartCodonReport("Inexistant",$Quoi)]} set StartCodonReport("EstCharge") 1 set Fichier "$RepertoireDuGenome/fiches/startcodon_report" while { ! [file exists $Fichier]} { if {[OuiOuNon "Do I create $Fichier ?"]} { set Fichier [CreeStartCodonReport] continue } set StartCodonReport("Inexistant",Couleur) "grey" set StartCodonReport("Inexistant",Signification) "StartCodonReporting_not_yet_available" set StartCodonReport("Inexistant",Rapport) "StartCodonReport_not_yet_available" set StartCodonReport("Inexistant",Start) "X0" return [StartCodonReport $Nom $Quoi] } foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s" NomLu Couleur Signification set StartCodonReport($NomLu,Couleur) $Couleur set StartCodonReport($NomLu,Signification) $Signification regsub " *$NomLu +$Couleur *" $Ligne "" Rapport set StartCodonReport($NomLu,Rapport) $Rapport scan $Rapport "%s %s" Signif CodonsProposes set Match "X1" if {[regexp "No_Value|Problem" $Signif]} { set Match "M1" } else { regexp {[MVLX]([0-9]+)} $CodonsProposes Match Pos } set StartCodonReport($NomLu,Start) $Match } set StartCodonReport("Inexistant",Couleur) "darkgrey" set StartCodonReport("Inexistant",Signification) "StartCodonReporting_no_value" set StartCodonReport("Inexistant",Rapport) "StartCodonReport_no_value" set StartCodonReport("Inexistant",Start) "X0" return [StartCodonReport $Nom $Quoi] } proc StartCodonSummary {Nom {Quoi Summary}} { global StartCodonSummary if {[info exists StartCodonSummary($Nom,$Quoi)]} { return [set StartCodonSummary($Nom,$Quoi)] } if {[info exists StartCodonSummary("EstCharge",Summary)]} { if {[info exists StartCodonSummary("EstCharge",Quoi)]} { return [set StartCodonSummary("EstCharge",$Quoi)] } else { return "NoSummaryExists" } } set FichierSummary [CreeStartCodonSummary "FileName"] if {$FichierSummary==""} { set StartCodonSummary("EstCharge",Summary) "NoSummaryAvalaible" return [StartCodonSummary $Nom $Quoi] } foreach Ligne [LesLignesDuFichier $FichierSummary] { if { ! [regexp -nocase {[A-Z]} $Ligne]} { continue } if {[regexp {[0-9]\+} $Ligne]} { regsub {\+} $Ligne " +" Ligne } scan $Ligne "%s" NomLu regsub "$NomLu *" $Ligne "" Summary lappend StartCodonSummary($NomLu,Summary) $Summary scan $Summary "%d %s %d" iGGT AA P set StartCodonSummary($NomLu,$P) $Summary } set StartCodonSummary("EstCharge",Summary) "NoSummaryExists" return [StartCodonSummary $Nom $Quoi] } proc StartFourmis {} { global TFB PAD set ::go 1 set iF "F0" #$PAD moveto $iF 300 300 set TFB(F0,angle) 45. #trace add variable TFB(F5,angle) write tangle # bounding box du mur lassign [$PAD bbox "mur"] x1m y1m x2m y2m while {1} { update idletasks #after 200 # $PAD delete marque if {! $::go} { after 50 update idletasks continue } # select a fourmi set ix [expr {int($TFB(nFourmis)*rand())}] set iF "F[lindex $TFB(LFourmis) $ix]" # puts "\nbouge $iF" # coords de fourmis set xadd [expr {round($TFB(step)*cos($TFB($iF,angle)*[Pi]/180.))}] set yadd [expr {round($TFB(step)*sin($TFB($iF,angle)*[Pi]/180.))}] # puts "xadd $xadd yadd $yadd $TFB($iF,angle)" set bbox [$PAD bbox $iF] lassign $bbox x1 y1 x2 y2 set xn1 [expr {$x1 + $xadd}] set yn1 [expr {$y1 + $yadd}] set xn2 [expr {$x2 + $xadd}] set yn2 [expr {$y2 + $yadd}] set nbb [list $xn1 $yn1 $xn2 $yn2] set deplace 0 set xd 0 ; set yd 0 if {[SortiePlateau $iF $nbb]} { TourneFourmi $iF OnSortPas $iF set nbb [$PAD bbox $iF] } else { $PAD move $iF $xadd $yadd } # test choc switch [MeetBall $iF $bbox $nbb] { "repart" { set TFB($iF,oldAng) $TFB($iF,angle) set TFB($iF,angle) [BonAngle [expr {359.*rand()}]] TourneFourmi $iF OnSortPas $iF } "danslemur" { # on a la bbox avant deplacement # on cherche de quel cote on tape set TFB($iF,oldAng) $TFB($iF,angle) if {$x1 < $x1m} { # tape mur a gauche set ang [BonAngle [expr {180.*rand() + 90.}]] } elseif {$x2 > $x2m} { # tape mur a droite set ang [BonAngle [expr {-180.*rand() + 90.}]] } elseif {$y1 < $y1m} { # tape mur par le haut set ang [BonAngle [expr {-180.*rand()}]] } else { # tape mur par le bas set ang [BonAngle [expr {180.*rand()}]] } set TFB($iF,angle) $ang TourneFourmi $iF set deplace 1 } "droit" { set deplace 1 } } if {$deplace} { #$PAD move $iF $xadd $yadd } lassign [$PAD bbox $iF] a b c d incr a -10 ; incr b -10 incr c 10 ; incr d 10 set Lb [list $a $b $c $d] if {0} { $PAD create rectangle $Lb -width 3 -outline white -tags [list marque] } $PAD raise "fourmi" $PAD raise "ball" # $PAD raise marque } return } proc StartOfOligos {} { foreach P [Oli "LaListeMerci"] { if {[Oli $P Sens]=="3'"} { continue } set Seq [string toupper [Oli $P SeqSubject]] set Codon [string range $Seq 0 2] if {$Codon==""} { continue } if { ! [info exists Cumul($Codon)]} { set Cumul($Codon) 0 } incr Cumul($Codon) lappend LesCodons $Codon } foreach Codon [lsort -unique $LesCodons] { lappend LaSortie "$Codon $Cumul($Codon)" } return $LaSortie } proc StartSelectionForObj {w x y} { set ::NwOj(isSelecting) 0 ClearSelectionNwOj set x [expr {$x - ($x-$::NwOj(XOffset)-3)%7}] set ::NwOj(Start) [list $x $y] return } proc StartStop {} { global Start set Start [expr {! $Start}] update if {$Start} { RunAgents } return } proc StatAffyU133_UCSC {} { Wup "Permet de faire quelque statistiques sur les infos fournies par UCSC sur les probes Affy" InterrogeAffy_UCSC "" human set LesProbeSetIds [InterrogeAffy_UCSC "" human LesProbeSets] set nbLesProbeSetIds [llength $LesProbeSetIds] set TabResAffy(LesNbLoc) "" set TabResAffy(LesNbChro) "" foreach ProbesetId $LesProbeSetIds { foreach CHR [InterrogeAffy_UCSC "" human $ProbesetId Chromosome] { set NbLoc [llength [InterrogeAffy_UCSC "" human $ProbesetId $CHR Debut]] #Nombre de fois plurilocalise (inclut meme chromo) if {! [info exists TabResAffy(CatNbLoc,$NbLoc)]} { set TabResAffy(CatNbLoc,$NbLoc) 0 } incr TabResAffy(CatNbLoc,$NbLoc) } lappend TabResAffy(LesNbLoc) $NbLoc set NbChro [llength [lsort -unique [InterrogeAffy_UCSC "" human $ProbesetId Chromosome]]] #Nombre de fois plurilocalise par chromo if {! [info exists TabResAffy(CatNbChro,$NbChro)]} { set TabResAffy(CatNbChro,$NbChro) 0 } incr TabResAffy(CatNbChro,$NbChro) lappend TabResAffy(LesNbChro) $NbChro } Espionne "Nombre total ProbeSet: $nbLesProbeSetIds" Espionne "" Espionne "Nombre de ProbeSet par nombre de localisation sur le genome:" foreach Cat [lsort -integer -unique -increasing [set TabResAffy(LesNbLoc)]] { Espionne "$Cat [set TabResAffy(CatNbLoc,$Cat)]" } Espionne "Nombre de ProbeSet par nombre de chromosomes differents:" foreach CatChromo [lsort -integer -unique -increasing [set TabResAffy(LesNbChro)]] { Espionne "$CatChromo [set TabResAffy(CatNbChro,$CatChromo)]" } return "" } proc StatFromFasta {{Qui ""} {Quoi ""} {FastaFile ""} {StatFile ""} {ProcessAlsoId ""}} { global StatFromFasta set ProcessAlsoId [string equal -nocase $ProcessAlsoId "ProcessAlsoId"] set Qui [string toupper $Qui] set Quoi [string toupper $Quoi] if {$FastaFile!=""} { if {[info exists StatFromFasta(FASTAFILE,)]} { if {$StatFromFasta(FASTAFILE,)!=$FastaFile} { unset StatFromFasta } } set StatFromFasta(FASTAFILE,) $FastaFile set StatFromFasta(STAFILE,) $StatFile } if { ! [info exists StatFromFasta(FASTAFILE,)]} { FaireLire "Please give the name of the FastaFile" return "" } if {[info exists StatFromFasta($Qui,$Quoi)]} { return $StatFromFasta($Qui,$Quoi) } if {[info exists StatFromFasta("EstCharge")]} { if {[info exists StatFromFasta($Qui,TAXID)]} { set TID $StatFromFasta($Qui,TAXID) if {[info exists StatFromFasta($TID,$Quoi)]} { return $StatFromFasta($TID,$Quoi) } } return "" } set StatFromFasta("EstCharge") 1 set FastaFile $StatFromFasta(FASTAFILE,) set OnGarde 1 set DejaFaits 0 set MaxiPourTestons -1000 ;#rR 100 pour limité, -100 pour illimité set F [open $StatFromFasta(FASTAFILE,) "r"] while {1} { set OnBreak [expr [gets $F Ligne] < 0 ] if {$OnBreak } { break } if { ! [regexp ">" $Ligne]} { continue } if {[incr MaxiPourTestons -1]==0} { break } regsub -all " +" $Ligne " " Ligne set Ligne [string trim $Ligne] if {[incr DejaFaits]%10000==0} { Espionne "$DejaFaits déjà faits" } if {[regexp {\|} $Ligne]} { #rR normalement on a que le cas else si on a fait FastaForBlast #rR on espere >Banque|Ac|Id Definition... (attention à l'ordre) set ResteDeLaLigne "" regexp {^>([^ ]+) (.+)} $Ligne Match BAI ResteDeLaLigne set Banque "" set Ac "" set Id "" lassign [split $BAI "|"] Banque Ac Id if {$Ac==""} { set Ac $BAI } if {$Id==""} { set Id $Ac } if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } } else { #rR on espere >Banque:Id Ac Definition... (Attention à l'ordre Id avant Ac) set Banque "" set Id "" set Ac "" set ResteDeLaLigne "" regexp {^>([^ ]+) ([^ ]+) (.+)} $Ligne Match Id Ac ResteDeLaLigne if {[regexp {([^\:]+)\:(.+)} $Id Match B I]} { set Banque $B set Id $I } if {$Ac==""} { set Ac $Id } if {[regexp "_" $Ac] && ! [regexp "_" $Id]} { set W $Id set Id $Ac set Ac $W } } set FullOs "Unknown unknown" if {[regexp { OS=(.+)} $Ligne Match FullOsWithJunk]} { regsub {[A-Z][A-Z]=.*} $FullOsWithJunk "" FullOs set FullOs [string trim $FullOs] } set TaxId [IntegerApres "OX=" dans $Ligne] if {$TaxId==""} { set TaxId [IntegerApres "OX:" dans $Ligne] } if {$TaxId!=""} { lappend LesTaxId $TaxId set StatFromFasta($TaxId,FULLOS) $FullOs } set Courant $Id set COURANT [string toupper $Courant] set ID [string toupper $Id] set AC [string toupper $Ac] if {$ProcessAlsoId} { if {$ID!=$AC} { set StatFromFasta($AC,ID) $ID } set StatFromFasta($ID,FULLOS) $FullOs } set FULLOS [string toupper $FullOs] set StatFromFasta($FULLOS,TAXID) $TaxId set ID [string toupper $Id] set COURANT [string toupper $Courant] lappend StatFromFasta(LISTOF,IDS) $Id lappend StatFromFasta(LISTOF,ACS) $Ac lappend StatFromFasta($TaxId,IDS) $Id lappend StatFromFasta($TaxId,ACS) $Ac if {$ProcessAlsoId} { set StatFromFasta($ID,ID) $Id set StatFromFasta($ID,AC) $Ac set StatFromFasta($ID,TAXID) $TaxId } } set LesTaxId [lsort -unique $LesTaxId] set StatFromFasta(LISTOF,TAXID) $LesTaxId foreach TaxId $LesTaxId { if { ! [info exists StatFromFasta($TaxId,IDS)]} { FaireLire "$TaxId empty" ; continue } set FullOs $StatFromFasta($TaxId,FULLOS) lappend StatFromFasta(LISTOF,FULLOS) "$FullOs" lappend StatFromFasta(LISTOF,TAXIDOS) "${TaxId}_$FullOs" set nOK [llength $StatFromFasta($TaxId,IDS)] lappend StatFromFasta(LISTOF,COUNT) "$nOK $TaxId $FullOs" } set StatFromFasta(LISTOF,TAXID) [join $StatFromFasta(LISTOF,TAXID) "\n"] set StatFromFasta(LISTOF,TAXIDOS) [join $StatFromFasta(LISTOF,TAXIDOS) "\n"] set StatFromFasta(LISTOF,FULLOS) [join $StatFromFasta(LISTOF,FULLOS) "\n"] set StatFromFasta(LISTOF,COUNT) [join $StatFromFasta(LISTOF,COUNT) "\n"] if {$StatFile!=""} { set StatFromFasta(STAT,FILENAME) [Sauve $StatFromFasta(LISTOF,COUNT) dans $StatFile] } return [StatFromFasta $Qui $Quoi] } proc StatLongGCFile {FichierFasta {MinLength 0}} { set LongMin 10000 ; set ORFMin "" set LongMax 0 ; set ORFMax "" set NbSeq 0 set LongTot 0 ; set GCTot 0 set Liste [list] set Fichier [LitFichier $FichierFasta] set NbLignes [llength $Fichier] set i 0 while {$i<$NbLignes} { set ligne [lindex $Fichier $i] if {$ligne==""} {incr i;continue} if {[regexp ">" $ligne]} { scan $ligne "%s" entete regsub ">" $entete "" entete incr NbSeq set Seq "" incr i while {$i<$NbLignes && ![regexp ">" [lindex $Fichier $i]]} { append Seq [lindex $Fichier $i] incr i } set Long [string length $Seq] set GC [expr ([regexp -all -nocase "G" $Seq]+[regexp -all -nocase "C" $Seq])*100/$Long] puts "$entete $Long $GC" set LongTot [expr $LongTot+$Long] set GCTot [expr $GCTot+$GC] lappend ListeLong $Long; lappend ListeGC $GC if {$Long>$LongMax} {set LongMax $Long; set ORFMax $entete} if {$Long<$LongMin} {set LongMin $Long; set ORFMin $entete} } else { puts "probleme" } } puts "Nombre de sequences : $NbSeq" puts "Longueur totale : $LongTot; Longueur moyenne : [expr $LongTot/$NbSeq]" puts "GC moyen : [expr $GCTot/$NbSeq]" puts "Longueur min : $ORFMin $LongMin; Longueur Max : $ORFMax $LongMax" set DistriLong [Distribution $ListeLong 40 $MinLength] set DistriGC [Distribution $ListeGC 2] EcritFichier $DistriLong "$FichierFasta.distrilong" EcritFichier $DistriGC "$FichierFasta.distrigc" DessineDistribution $DistriLong } proc StatProjetPuceEST {} { Wup "Comptabilise le nbr de acc dans RefSeq et UG, meilleur Def ..." set NbPAB 0 set NbDefDeProjet 0 set NbAccRefSeq 0 set NbDefRefSeq 0 set NbAccUniseq 0 set NbAccUnigene 0 set NbDefAccUniseq 0 set NbBothAcc 0 set NbBestRefSeq 0 set NbBestUniseq 0 set NbBestBoth 0 foreach PAB [ListeDesPABs] { incr NbPAB if {[InterrogeLesAccRSEtUG_Ontario $PAB AccRefSeq] != "None"} {incr NbAccRefSeq} if {[InterrogeLesAccRSEtUG_Ontario $PAB DefRefSeq] != "None"} {incr NbDefRefSeq} if {[InterrogeLesAccRSEtUG_Ontario $PAB AccUniseq] != "None"} {incr NbAccUniseq} if {[InterrogeLesAccRSEtUG_Ontario $PAB AccUnigene] != "None"} {incr NbAccUnigene} if {[InterrogeLesAccRSEtUG_Ontario $PAB DefUniseq] != "None"} {incr NbDefAccUniseq} if {[InterrogeLesAccRSEtUG_Ontario $PAB BestDefinition] != "None"} {incr NbDefDeProjet} if {[InterrogeLesAccRSEtUG_Ontario $PAB AccRefSeq] != "None" && [InterrogeLesAccRSEtUG_Ontario $PAB AccUniseq] != "None"} { if {[InterrogeLesAccRSEtUG_Ontario $PAB CoverRefSeq]>[InterrogeLesAccRSEtUG_Ontario $PAB CoverUniseq]} { incr NbBestRefSeq } elseif {[InterrogeLesAccRSEtUG_Ontario $PAB CoverRefSeq]==[InterrogeLesAccRSEtUG_Ontario $PAB CoverUniseq]} { incr NbBestBoth } else {incr NbBestUniseq} incr NbBothAcc } continue } Espionne "Total PAB $NbPAB NbDefProjet $NbDefDeProjet" Espionne "Nb RefSeq: Acc $NbAccRefSeq Def $NbDefRefSeq" Espionne "Nb Uniseq: Acc $NbAccUniseq AccUg $NbAccUnigene Def $NbDefAccUniseq" Espionne "Nb RefSeq & Uniseq: $NbBothAcc" Espionne "Nb RefSeq & Uniseq: Best RefSeq $NbBestRefSeq Best Uniseq $NbBestUniseq Equal $NbBestBoth" return "" } proc StatProjetPuceESTEtOriginal {} { Wup "Comptabilise le nbr de Def a l origine et celles recuperees..." set NoDef 0 set NbDef 0 set NbPAB 0 set NbTeste 0 set NbCommun 0 set NbDefDeProjet 0 set NbRattrape 0 set NbPerdu 0 foreach PAB [ListeDesPABs] { incr NbPAB set Definition "" set C1Controle 0 set id "" set OriginalID [InterrogeLesAccRSEtUG_Ontario $PAB OriginalID] set VerifiedID [InterrogeLesAccRSEtUG_Ontario $PAB VerifiedID] set MaDef [InterrogeLesAccRSEtUG_Ontario $PAB BestDefinition] if {$MaDef!="None"} {incr NbDefDeProjet} if {$VerifiedID=="Arabidopsis"} { set Definition "Control_$ID" set C1Controle 1 } elseif {$VerifiedID=="3XSSC"} { set Definition "Control_$ID" set C1Controle 1 } elseif {[regexp "No clone in this well" $VerifiedID]} { set Definition "Control_NoClone" set C1Controle 1 } elseif {[regexp {No_seq|Unresolved|N/A|Unknown} $VerifiedID] } { set VerifiedID $OriginalID } if {$C1Controle!="1"} { incr NbTeste if {$VerifiedID == $OriginalID} {set ListeID $VerifiedID} else {set ListeID [list $VerifiedID $OriginalID]} foreach id $ListeID { if {$Definition!=""} {break} set Definition [InterrogeLeIOBFile_Ontario $id Definition] } if {$Definition!=""} { incr NbDef } } if {$Definition!="" && $MaDef!="None"} { incr NbCommun } elseif {$Definition!=""} { incr NbPerdu } elseif {$MaDef!="None"} { incr NbRattrape } else { incr NoDef } } Espionne "Projet PuceEST:" Espionne "NbSequence $NbPAB" Espionne "NbTeste $NbTeste" Espionne "AvecDef(iob) $NbDef" Espionne "AvecDef(Projet) $NbDefDeProjet" Espionne "NbCommun $NbCommun" Espionne "+ NbRattrape(Projet) $NbRattrape + NbExistantPasRetrouve $NbPerdu" Espionne "Final AvecDef [expr $NbRattrape + $NbPerdu + $NbCommun] NoDef $NoDef" return "" } proc StatRA {} { set A 0 set B 0 set C 0 set T 0 foreach I [RetChip2 ListOf Index] { set Des [RetChip2 $I "description_customer"] set Ac1 [RetChip2 $I "refseq_PIQOR"] set Ac2 [RetChip2 $I "DNA_acc"] set Ac3 [RetChip2 $I "prot_acc_PIQOR"] set Ac4 [RetChip2 $I "prot_acc"] if { ![regexp {^RA[0-9]+} $Des] } { continue } incr T puts "RA=$Des=>$T" if { $Ac1=="" && $Ac2=="" && $Ac3=="" && $Ac4=="" } { incr A puts "Aucun access=$A" } if { $Ac1!="" || $Ac2!="" } { incr B puts "A access dna=$B" } if { $Ac1=="" && $Ac2=="" } { if {$Ac3!="" || $Ac4!="" } { incr C puts "N'a pas access dna, a access prot=$C" } } } Espionne "$T =nb de RA" Espionne "$A =nb de RA ss aucun acces" Espionne "$B =nb de RA ac un access dna" Espionne "$C =nb de RA ss access dna ms ac un access prot" } proc StatRechercheProbeSet {} { Wup "Permet de faire quelque stats simles sur le projet" set NbUnigeneOnly "0" set NbRefSeqOnly "0" set NbBoth "0" set NbRefSeq "0" set NbUnigene "0" set NbTotal "0" foreach PAB [ListeDesPABs] { set LesAccRefSeq [InterrogeLesAccRSEtUG_Affymetrix $PAB AccRefSeq] set LesAccUnigene [InterrogeLesAccRSEtUG_Affymetrix $PAB AccUniseq] incr NbTotal if {$LesAccRefSeq != "None" && $LesAccUnigene != "None"} { incr NbBoth } if {$LesAccRefSeq != "None" && $LesAccUnigene == "None"} { incr NbRefSeqOnly } if {$LesAccRefSeq == "None" && $LesAccUnigene != "None"} { incr NbUnigeneOnly } if {$LesAccRefSeq != "None"} { incr NbRefSeq } if {$LesAccUnigene != "None"} { incr NbUnigene } } #Affichage des Access RefSeq avec les Probe Set Id: #On tient compte des access en doubles (plusieurs RefSeq par PAB) set LesAccEquivalents "" set LesEquivalents "" foreach Acc [InterrogeLesAccRSEtUG_Affymetrix LesAccRefSeq] { if {[info exists TabDejaFait($Acc)]} {continue} if {[InterrogeLesAccRSEtUG_Affymetrix $Acc Equivalent]!=""} { set LesAccEquivalents "" set LesAccEquivalents [InterrogeLesAccRSEtUG_Affymetrix $Acc Equivalent] #Espionne ">>>> $LesAccEquivalents" set LesEquivalents "" foreach Equi $LesAccEquivalents { if {$Acc==$Equi} {continue} lappend LesEquivalents $Equi set TabDejaFait($Equi) 1 } } set TabDejaFait($Acc) 1 set LesProbeSetIds [InterrogeLesAccRSEtUG_Affymetrix $Acc ProbeSetId] set LesPABs "" foreach PSId $LesProbeSetIds { lappend LesPABs [InterrogeLesAccRSEtUG_Affymetrix $PSId Gscope] } Espionne "$Acc ${LesEquivalents}: $LesProbeSetIds [join $LesPABs " "]" } set PercentRefseq [expr ($NbRefSeq * 100.0) / $NbTotal] set PercentUnigene [expr ($NbUnigene * 100.0) / $NbTotal] set PercentValidRsUg [expr ($NbBoth * 100.0) / $NbTotal] set PercentValidRs [expr ($NbRefSeqOnly * 100.0) / $NbTotal] set PercentValidUg [expr ($NbUnigeneOnly * 100.0) / $NbTotal] set NbValider [expr $NbBoth + $NbRefSeqOnly + $NbUnigeneOnly] set PercentValider [expr ($NbValider * 100.0) / $NbTotal] Espionne "Nombre de RefSeq trouves:" Espionne "[format "%3d / %3d = %.1f " $NbRefSeq $NbTotal $PercentRefseq]" Espionne "Nombre de Unigene trouves:" Espionne "[format "%3d / %3d = %.1f " $NbUnigene $NbTotal $PercentUnigene]" Espionne "Validation:" Espionne "1- RefSeq et Unigene" Espionne "[format "%3d / %3d = %.1f " $NbBoth $NbTotal $PercentValidRsUg]" Espionne "2- Uniquement RefSeq" Espionne "[format "%3d / %3d = %.1f " $NbRefSeqOnly $NbTotal $PercentValidRs]" Espionne "3- Uniquement Unigene" Espionne "[format "%3d / %3d = %.1f " $NbUnigeneOnly $NbTotal $PercentValidUg]" Espionne "--> Validation finale :" Espionne "[format "%3d / %3d = %.1f " $NbValider $NbTotal $PercentValider]" #Espionne "[format "%3d / %3d = 3.1%" $NbRefSeq $NbTotal [expr ($NbRefSeq /$NbTotal) 1.0]]" return "" } proc StatScore {} { global VariablesAuDepart TbScores package require sqlite3 set db root sqlite3 $db /home/moumou/ordali/typify/bench.sql set Lpfam [$db eval {select pfamid from pfam where lgt > 100 and nseqs > 200}] $db close set Lmeth [list Kabat Williamson Thompson Norm] #set Lmeth [list Norm Kabat] set TbScores(Lcols) $Lmeth lappend VariablesAuDepart TbScores Lpfam Lpris Lmeth CumulS set Lpris [list] while {[llength $Lpris] < 200} { set ix [expr {int([llength $Lpfam]*rand())}] if {$ix in $Lpris} { continue } lappend Lpris $ix set f [lindex $Lpfam $ix] set f [lindex [lsort [glob "/genomics/link/Pfam/$f*"]] end ] DonneScoreDe $f $Lmeth foreach m $Lmeth { lappend CumulS(Score,$m) {*}$TbScores(Score,$m) } FermeFichier } set o [open tbs.dat w] foreach m $Lmeth { set TbScores(Score,$m) $CumulS(Score,$m) puts $o $TbScores(Score,$m) } close $o set K [DrawScore] bind $K {%W scan mark %x %y} bind $K {%W scan dragto %x %y 1} set ::iMeth [expr {[llength $TbScores(Lcols)] - 1}] bind $K { set Lm $TbScores(Lcols) incr iMeth %W itemconfigure all -fill black %W itemconfigure oval -outline black if {$iMeth == [llength $Lm]} { foreach m $Lm { set col $TbScores(Color,$m) %W itemconfigure $m -fill $col %W itemconfigure "\{$m && oval\}" -outline $col } set iMeth -1 } else { set m [lindex $Lm $iMeth] %W itemconfigure $m -fill $TbScores(Color,$m) %W itemconfigure "\{$m && oval\}" -outline $TbScores(Color,$m) } } return } proc StatSwGnRf {} { set I 0 set J 0 set LesNms [LocUcsc ListOfMouse Access] foreach Nm $LesNms { set Names {} if { ![regexp {^NM_} $Nm] } { continue } incr J puts "J=$J" set Prot [LocUcsc $Nm proteinID] set Commande4 "getz \"\\\[protein-id:$Prot\\\]\" \-f gen" set GetzOut4 [eval exec $Commande4] puts "GetzOut4=$GetzOut4" if { $GetzOut4 == "" } { puts "pas de fiches pour la prot" set J [expr $J-1] continue } set Commande3 "getz \"\\\[refseq-acc:$Nm\\\]\" \-vf Gene" set GetzOut3 [eval exec $Commande3] puts "GetzOut3=$GetzOut3" if { $GetzOut3 == "" } { puts "pas de fiches pour le nm" set J [expr $J-1] continue } set LesLignes [split $GetzOut3 "\n"] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Nb [llength $LesMots] lappend Names [lindex $LesMots [expr $Nb-1]] } set Names [lsort -unique $Names] if {[llength $Names] > 1 } { puts "attention" } set Name [lindex $Names 0] puts "le nom=$Name" if {[regexp -nocase $Name $GetzOut4]} { incr I; puts "I=$I\n" } else { puts "pas corres" } } Espionne "nb de seq traite = $J" Espionne "nb de seq ou gene name correspond= $I" } proc StatSwGnRfBis {} { set I 0 set J 0 set LesNms [LocUcsc ListOfMouse Access] foreach Nm $LesNms { if { ![regexp {^NM_} $Nm] } { continue } set Names {} incr J puts "J=$J" set Prot [LocUcsc $Nm proteinID] set Commande4 "getz \"\\\[protein-id:$Prot\\\]\" \-f gen" set GetzOut4 [eval exec $Commande4] puts "GetzOut4=$GetzOut4" if { $GetzOut4 == "" } { puts "pas de fiches pour la prot\n" set J [expr $J-1] continue } set LesMotsP [split $GetzOut4 "=;"] foreach z $LesMotsP { puts "++$z" } set NameP [lindex $LesMotsP 1] puts "nomProt=$NameP" set Commande3 "getz \"\\\[refseq-acc:$Nm\\\]\" \-vf Gene" set GetzOut3 [eval exec $Commande3] puts "GetzOut3=$GetzOut3" if { $GetzOut3 == "" } { puts "pas de fiches pour le nm" set J [expr $J-1] continue } set LesLignes [split $GetzOut3 "\n"] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Nb [llength $LesMots] lappend Names [lindex $LesMots [expr $Nb-1]] } set Names [lsort -unique $Names] if {[llength $Names] > 1 } { puts "attention" } set Name [lindex $Names 0] puts "nomNM=$Name" if {[string equal -nocase $Name $NameP]} { incr I; puts "I=$I\n" } else { puts "pas corres" } } Espionne "nb de seq traite = $J" Espionne "nb de seq ou gene name correspond= $I" } proc StatSwGnRfBis_AEffacer {} { set I 0 set J 0 set LesNms [LocUcsc ListOfMouse Access] foreach Nm $LesNms { if { ![regexp {^NM_} $Nm] } { continue } set Names {} incr J puts "J=$J" set Prot [LocUcsc $Nm proteinID] set Commande4 "getz \"\\\[protein-id:$Prot\\\]\" \-f gen" set GetzOut4 [eval exec $Commande4] puts "GetzOut4=$GetzOut4" if { $GetzOut4 == "" } { puts "pas de fiches pour la prot\n" set J [expr $J-1] continue } set LesMotsP [split $GetzOut4 "=;"] foreach z $LesMotsP { puts "++$z" } set NameP [lindex $LesMotsP 1] puts "nomProt=$NameP" set Commande3 "getz \"\\\[refseq-acc:$Nm\\\]\" \-vf Gene" set GetzOut3 [eval exec $Commande3] puts "GetzOut3=$GetzOut3" if { $GetzOut3 == "" } { puts "pas de fiches pour le nm" set J [expr $J-1] continue } set LesLignes [split $GetzOut3 "\n"] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Nb [llength $LesMots] lappend Names [lindex $LesMots [expr $Nb-1]] } set Names [lsort -unique $Names] if {[llength $Names] > 1 } { puts "attention" } set Name [lindex $Names 0] puts "nomNM=$Name" if {[string equal -nocase $Name $NameP]} { incr I; puts "I=$I\n" } else { puts "pas corres" } } Espionne "nb de seq traite = $J" Espionne "nb de seq ou gene name correspond= $I" } proc StatSwGnRf_AEffacer {} { set I 0 set J 0 set LesNms [LocUcsc ListOfMouse Access] foreach Nm $LesNms { set Names {} if { ![regexp {^NM_} $Nm] } { continue } incr J puts "J=$J" set Prot [LocUcsc $Nm proteinID] set Commande4 "getz \"\\\[protein-id:$Prot\\\]\" \-f gen" set GetzOut4 [eval exec $Commande4] puts "GetzOut4=$GetzOut4" if { $GetzOut4 == "" } { puts "pas de fiches pour la prot" set J [expr $J-1] continue } set Commande3 "getz \"\\\[refseq-acc:$Nm\\\]\" \-vf Gene" set GetzOut3 [eval exec $Commande3] puts "GetzOut3=$GetzOut3" if { $GetzOut3 == "" } { puts "pas de fiches pour le nm" set J [expr $J-1] continue } set LesLignes [split $GetzOut3 "\n"] foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Nb [llength $LesMots] lappend Names [lindex $LesMots [expr $Nb-1]] } set Names [lsort -unique $Names] if {[llength $Names] > 1 } { puts "attention" } set Name [lindex $Names 0] puts "le nom=$Name" if {[regexp -nocase $Name $GetzOut4]} { incr I; puts "I=$I\n" } else { puts "pas corres" } } Espionne "nb de seq traite = $J" Espionne "nb de seq ou gene name correspond= $I" } proc StatistiquesCompoATGC {} { set GrandGCContent 0 set PetitGCContent 150 set GCMoyen 0 set i 0 foreach PAB [ListeDesPABs] { set GCContent [CompositionATGCDuPAB $PAB "GC"] if {$GCContent=="0"} {continue} set GCMoyen [expr $GCMoyen + $GCContent] incr i if {$GCContent>$GrandGCContent} {set GrandGCContent $GCContent;continue} if {$GCContent<$PetitGCContent} {set PetitGCContent $GCContent;continue} } set GCMoyen [expr (1.0 * $GCMoyen)/$i] return "G $GrandGCContent\nP $PetitGCContent\n Moyenne $GCMoyen" } proc StatistiquesProjetActin {} { set ListeDesPABs [lrange [ListeDesPABs] 1164 end] set ListeDesPABs [ListeDesPABs] set nbPAB 0 set nbmRNA 0 set nbDesign 0 set DirOligo "[RepertoireDuGenome]/Probes/RefSeqBLAST3" set DirOligo2 "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" foreach PAB $ListeDesPABs { set JumeauRepresentatif [JumeauRepresentatif $PAB] if {$JumeauRepresentatif!="" && $PAB!=$JumeauRepresentatif} {continue} incr nbPAB if {[file exists "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$PAB"]} { incr nbmRNA } set REFSEQ [ReturnBestHitFromLogFile $PAB $DirOligo] if {$REFSEQ==""} { set REFSEQ [ReturnBestHitFromLogFile $PAB $DirOligo2] } if {[regexp -nocase "warning" $REFSEQ]} { set REFSEQ [lindex $REFSEQ 1] Espionne "toto $REFSEQ" } if { ! [info exists Tab($REFSEQ)]} { set Tab($REFSEQ) 1 incr nbDesign Espionne "$REFSEQ" } } Espionne "PAB total: [llength $ListeDesPABs]" Espionne "nbPAB effectif: $nbPAB" Espionne "nb mRNA: $nbmRNA" Espionne "nbDesign different: $nbDesign" } proc StatistiquesSurLesProteines {{QuelleListe ""} {EnContinu ""}} { if {$QuelleListe==""} { set QuelleListe ListeDesPABs } set EnContinu [string equal -nocase "Continu" $EnContinu] if {[regexp "^ListeDes" $QuelleListe]} { set Liste [eval $QuelleListe] } else { set Liste $QuelleListe } set nTotal 0 foreach Nom $Liste { set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Long [expr $Fin - $Debut +1] if { ! [info exists Compteur($Long)]} { set Compteur($Long) 0 } incr Compteur($Long) incr nTotal } set LesLongueurs [lsort -integer [array names Compteur]] set Precedent 0 foreach Long $LesLongueurs { set Cumul($Long) [expr $Precedent + [set Compteur($Long)]] set Precedent [set Cumul($Long)] } if {$EnContinu} { set LesLongueursAVoir [NombresEntre [lindex $LesLongueurs 0] [lindex $LesLongueurs end]] } else { set LesLongueursAVoir $LesLongueurs } foreach Long $LesLongueursAVoir { if {[info exists Compteur($Long)]} { set N [set Compteur($Long)] set C [set Cumul($Long)] } else { set N 0 } set S [expr ($C/18)%80] puts [format "%5d %5d %5d %s" $Long $N $C [string repeat "*" $S]] } return [list [array get Compteur] [array get Cumul]] } proc StatsAgents {} { global T LNOrdali array set T [ContenuDuFichier filsde.dat] set LNOrdali [list] foreach k [array names T "*,*"] { lassign [split $k ,] n tmp lappend LNOrdali $n } set LNOrdali [lsort -unique -dictionary $LNOrdali] LoadTkAndPackages foreach k [array names T] { lassign [split $k ,] n ag set i [lsearch $LNOrdali $n] if {$i == ([llength $LNOrdali]-1)} { set n2 [lindex $LNOrdali 0] } else { set n2 [lindex $LNOrdali $i+1] } set Lf [lsearch -all -index 0 $T($k) "$n2"] lappend Lv "[llength $Lf].0" } puts "llength [llength $Lv]" set K [UnCanva] $K configure -bg black $K itemconfig oval -fill white array set Tres [CreeHistogramme $Lv 50] foreach k [lsort -real [array names Tres]] { puts "[format %6.2f $k] [set Tres($k)]" } # agents par sequence set Lres [list] set i 0 foreach n $LNOrdali { lappend Lres $n set Lk [array names T "$n,*"] lappend Lres [llength $Lk] set nVide 0 set nFils 0 incr i if {$i == [llength $LNOrdali]} { set i 0 } set n2 [lindex $LNOrdali $i] foreach k $Lk { set Lf $T($k) if {[llength $Lf] == 0} { incr nVide continue } set Lv [lsearch -all -index 0 $T($k) $n2] incr nFils [llength $Lv] } lappend Lres $nFils } puts "" foreach {n all fils} $Lres { puts "$n $all $fils" } exit } proc StatsCdn {} { set dcdn "toto" sqlite3 $dcdn wobble.sql set Ltables [lsort [$dcdn eval {select tbl_name from sqlite_master}]] foreach table $Ltables { set aa [string index $table 0] set Lcols [list] $dcdn eval "PRAGMA TABLE_INFO($table)" row { lappend Lcols $row(name)} # enleve pk_items en 0 set Lcols [lrange $Lcols 1 end] # init compteurs set TCols($aa) $Lcols foreach {a b} $Lcols { # cdn : A_XXX_Exposed set cdn [string index $a 2 4] set Nb${aa}_$cdn 0 set L${aa}_$cdn [list] } } set table [lindex $Ltables 0] set Lpk [$dcdn eval "select pk_items from $table"] foreach pk $Lpk { foreach table $Ltables { set Lv [$dcdn eval "select * from $table where pk_items=$pk"] foreach {a b} [lrange $Lv 1 end] { # cdn : A_XXX_Exposed set cdn [string range $a 2 4] #set diff [expr {abs($a-$b)}] set diff [expr {$a-$b}] if {abs($diff) == 1.0} { incr Nb${aa}_$cdn lappend L${aa}_$cdn $pk } } } } foreach table $Ltables { set aa [string index $table 0] puts "" lappend Laa $aa foreach {a b} $TCols($aa) { # cdn : A_XXX_Exposed set cdn [string range $a 2 4] set T($aa,$cdn) [set L${aa}_$cdn] puts "[string range $a 0 4] [set Nb${aa}_$cdn]" } } $dcdn close foreach aa $Laa { set Lk [array names T "$aa,*"] set Lpk [list] foreach k $Lk { lappend Lpk {*}[set T($k)] } set Lpk [lsort -unique $Lpk] set P($aa) $Lpk } puts "" puts "Nombre PDBs ayant diff=0. par AA :" foreach aa $Laa { puts -nonewline " $aa" } puts "" foreach aa $Laa { puts -nonewline [format " %3d" [llength [set P($aa)]]] } puts "" puts "" puts "PDBs communs avec diff=0" puts -nonewline " " foreach aa $Laa { puts -nonewline " $aa" } puts "" set ix 1 foreach aa [lrange $Laa 0 end-1] { set nspc [expr {$ix*4}] set spc [string repeat " " $nspc] puts -nonewline " $aa $spc" foreach ab [lrange $Laa $ix end] { set A($aa,$ab) [land [set P($aa)] [set P($ab)]] puts -nonewline [format " %3d" [llength [set A($aa,$ab)]]] } puts "" incr ix } puts "" puts "PDBs differents avec diff=0" puts -nonewline " " foreach aa $Laa { puts -nonewline " $aa" } puts "" set ix 1 foreach aa [lrange $Laa 0 end-1] { set nspc [expr {$ix*4}] set spc [string repeat " " $nspc] puts -nonewline " $aa $spc" foreach ab [lrange $Laa $ix end] { set A($aa,$ab) [lor [set P($aa)] [set P($ab)]] puts -nonewline [format " %3d" [llength [set A($aa,$ab)]]] } puts "" incr ix } #exit return } proc SteroidPattern {chr MM} { # Recherche un motif en générant un mismatch (adapté récepteurs nucléaires) set Chromosome "/genomics/link/UCSCGenomes/Homo_sapiens/bigZips200603/chr$chr.fa" set DR3 0 array unset SeqTFA array set SeqTFA [readFasta $Chromosome 0] set Acc [lindex $SeqTFA(index) 0] set RegExp {AG[AG][AT]CA[ATCG][ATCG][ATCG]AC[AT][AG]GA} append RegExp {|TC[TC][TA]GT[ATCG][ATCG][ATCG]TG[TA][TC]CT} if { $MM > 0 } { append RegExp {|[TGC]G[AG][AT]CA[ATCG][ATCG][ATCG]AC[AT][AG]GA} append RegExp {|A[ACT][AG][AT]CA[ATCG][ATCG][ATCG]AC[AT][AG]GA} append RegExp {|AG[TC][AT]CA[ATCG][ATCG][ATCG]AC[AT][AG]GA} append RegExp {|AG[AG][CG]CA[ATCG][ATCG][ATCG]AC[AT][AG]GA} append RegExp {|AG[AG][AT][AGT]A[ATCG][ATCG][ATCG]AC[AT][AG]GA} append RegExp {|AG[AG][AT]C[CGT][ATCG][ATCG][ATCG]AC[AT][AG]GA} append RegExp {|AG[AG][AT]CA[ATCG][ATCG][ATCG][TCG]C[AT][AG]GA} append RegExp {|AG[AG][AT]CA[ATCG][ATCG][ATCG]A[ATG][AT][AG]GA} append RegExp {|AG[AG][AT]CA[ATCG][ATCG][ATCG]AC[CG][AG]GA} append RegExp {|AG[AG][AT]CA[ATCG][ATCG][ATCG]AC[AT][TC]GA} append RegExp {|AG[AG][AT]CA[ATCG][ATCG][ATCG]AC[AT][AG][CT]A} append RegExp {|AG[AG][AT]CA[ATCG][ATCG][ATCG]AC[AT][AG][AG][TCG]} append RegExp {|[ACG]C[TC][TA]GT[TAGC][TAGC][TAGC]TG[TA][TC]CT} append RegExp {|T[TGA][TC][TA]GT[TAGC][TAGC][TAGC]TG[TA][TC]CT} append RegExp {|TC[AG][TA]GT[TAGC][TAGC][TAGC]TG[TA][TC]CT} append RegExp {|TC[TC][GC]GT[TAGC][TAGC][TAGC]TG[TA][TC]CT} append RegExp {|TC[TC][TA][TCA]T[TAGC][TAGC][TAGC]TG[TA][TC]CT} append RegExp {|TC[TC][TA]G[GCA][TAGC][TAGC][TAGC]TG[TA][TC]CT} append RegExp {|TC[TC][TA]GT[TAGC][TAGC][TAGC][AGC]G[TA][TC]CT} append RegExp {|TC[TC][TA]GT[TAGC][TAGC][TAGC]T[TAC][TA][TC]CT} append RegExp {|TC[TC][TA]GT[TAGC][TAGC][TAGC]TG[GC][TC]CT} append RegExp {|TC[TC][TA]GT[TAGC][TAGC][TAGC]TG[TA][AG]CT} append RegExp {|TC[TC][TA]GT[TAGC][TAGC][TAGC]TG[TA][TC][GAT]T} append RegExp {|TC[TC][TA]GT[TAGC][TAGC][TAGC]TG[TA][TC]C[AGC]} } set ListeDesPositions [regexp -indices -all -inline -nocase "$RegExp" $SeqTFA($Acc,sequence)] set DR3f [open "/tmp/Conservation/Marc-DR3-Chr$chr.txt" "w"] foreach PaireDeBornes $ListeDesPositions { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] puts $DR3f "$DR3 $NewStart $NewEnd" } close $DR3f } proc SticksDe {liste pdbid} { global Tbond global PDB_[set pdbid]_AtmXYZ global PDB_[set pdbid]_NomAtm global PDB_[set pdbid]_NomRes set QObj [gluNewQuadric] gluQuadricDrawStyle $QObj GLU_FILL gluQuadricNormals $QObj GLU_SMOOTH gluQuadricTexture $QObj GL_TRUE set Lch [lrange [array names PDB_[set pdbid]_AtmXYZ] 1 end] foreach c $Lch { set LNat [set PDB_[set pdbid]_NomAtm($c)] set LNrs [set PDB_[set pdbid]_NomRes($c)] set Lxyz [set PDB_[set pdbid]_AtmXYZ($c)] foreach Lx $Lxyz La $LNat r1 $LNrs { set r [AutreCodeLuc $r1] set Lb [set Tbond($r)] foreach a $La c $Lx { set Ar([string trim $a]) $c } foreach bd [set Tbond($r)] { lassign $bd a b if {$a eq "C-" || $b eq "C-"} {continue} TraceCylindre $liste $QObj [set Ar($a)] [set Ar($b)] } unset Ar } } return } proc StockNomSeqAssPDB {Win PDBin SeqSel} { global LNOrdali NomEtSeqAssPDB Defauts if {[ModeI]} { if {[llength $SeqSel] != 1} { FaireLire "You must choose only ONE sequence !!" return } destroy $Win } if {[info exists NomEtSeqAssPDB]} { set SeqSel [lindex $LNOrdali $SeqSel] foreach ligne $NomEtSeqAssPDB { scan $ligne "%s %s %s" pdb seq molid if {$seq == $SeqSel} { FaireLire "Sequence $SeqSel has already a PDB file \n attached to it" return } } } set molid [DefinitNomMolecule $PDBin] set NomSeqAss "$PDBin $SeqSel $molid" lappend NomEtSeqAssPDB $NomSeqAss AssigneStructure return } proc StockNomsSeqsOrdre {ft {q nothing}} { global OldNomsSeqsOrdre global LNOrdali switch $q { "clear" {catch {unset OldNomsSeqsOrdre($ft)}} "get" {return [set OldNomsSeqsOrdre($ft)]} "nothing" {set OldNomsSeqsOrdre($ft) $LNOrdali} } return } proc StockPosition {{w ""} {pos ""}} { global PositionInitiale if {! [info exists PositionInitiale] || $pos eq ""} { set PositionInitiale "-1.-1" } else { if {$w ne ""} {set pos [$w index $pos]} set PositionInitiale $pos PoseUneMarque $pos } return } proc StockScoreOrdali {f} { global TableauCouleurEtGroupe ScoreMeth LNDG Threshold Defauts set sIde "[set Defauts(ThresholdIden)]." set sThr "$Threshold." set sSim 60. set sGrp $sIde foreach g [ReordonneGroupes $LNDG] { set Lv [array names TableauCouleurEtGroupe "*,$g"] set Lx {} foreach v $Lv { lassign [split $v ,] i tmp lappend Lx $i } # # Methof Ordali is still running from 0 go n-1 # columns. All methods runs form 1 to N set Lx [lsort -integer $Lx] set c 0 foreach i $Lx { while {$c != $i} { set ScoreMeth($f,$g,[expr {$c+1}]) 0. incr c } switch -regexp -- $TableauCouleurEtGroupe($i,$g) { "IdenGlob" {set v $sIde} "ConsGlob" {set v $sThr} "SimiGlob" {set v $sSim} {^CoulG} {set v $sIde} } set ScoreMeth($f,$g,[expr {$i+1}]) $v incr c } } return } proc StockScores {f g {DoNorm 1}} { global ScoreMeth ListeScore if {$g eq "" || $g eq "all" || $g eq "All"} { set g "GroupeToutLeMonde" } lappend ScoreMeth($f,ListeGrps) $g set Li [ExtraitListeDeListe $ListeScore 0] set nvar [expr {[llength [lindex $ListeScore 0]] - 1}] set nval [expr {$nvar * [llength $Li]}] if {$nvar == 1} { set Lval [ExtraitListeDeListe $ListeScore 1] } else { foreach l $ListeScore { set m 0. foreach e [lrange $l 1 end] { set m [expr {$m + $e}] } set m [expr {$m/$nval}] lappend Lval $m } } if {$DoNorm} { set nlval [Standardise $Lval] } else { set nlval $Lval } set min 99999999. ; set max -99999999. foreach i $Li v $nlval { set ScoreMeth($f,$g,$i) $v if {$v < $min} {set min $v} if {$v > $max} {set max $v} } set ScoreMeth($f,${g}-min) $min set ScoreMeth($f,${g}-max) $max set ScoreMeth(ScaleGlobal) 0 return } proc StockeCetOligo {Entete Sequence {ForceProchainP ""} {FichierOli ""}} { global DernierPStocke if {$Entete=="Reset"} { if {[info exists DernierPStocke]} { unset DernierPStocke } return "" } if {$ForceProchainP==""} { set ForceProchainP "AutoNumbering" } if {$ForceProchainP=="AutoNumbering"} { if { ! [info exists DernierPStocke]} { set LesExistants [lsort [Oli "LaListeMerci"]] set DernierPStocke [lindex $LesExistants end] set OriProchainP [NumeroSuivant $DernierPStocke] set ProchainP $OriProchainP while { ! [OuiOuNon "Do I start oligos numbering with $ProchainP ?"]} { set ProchainP [Entre $OriProchainP] if {[regexp -nocase "Test" $ProchainP]} { set ProchainP "T7701" set DernierPStocke $ProchainP } } } else { set ProchainP [NumeroSuivant $DernierPStocke] } } else { set ProchainP $ForceProchainP } set DernierPStocke $ProchainP if {[regexp "^T7" $ProchainP]} { return $ProchainP } regsub "Pxxxx" $Entete $ProchainP Entete set TFA [SequenceFormatTFA $Sequence $Entete "nucbrut"] if {$FichierOli==""} { set FichierOli "[RepertoireDuGenome]/oligos/$ProchainP.tfa" } return [Sauve $TFA dans $FichierOli] } proc StockeLeDescriptif {Access Texte {PourQui ""}} { global LesDescriptifs if { ! [regexp "^file_" $PourQui] && [YaPABdans $PourQui]} { set RepDesc "[RepertoireDuGenome]/descriptifs" if { ! [file exists $RepDesc]} { File mkdir $RepDesc } set Nom $PourQui Wup "It does not yet exist or has an other value" if {[LeDescriptif $Access $Nom $Texte]!=$Texte} { return [AppendAuFichier "$RepDesc/$Nom" "$Access=$Texte"] } return "$RepDesc/$Nom" } if {$PourQui==""} { puts stdout "$Access=$Texte" return } if {[regexp "file_" $PourQui]} { regsub "file_" $PourQui "" Fichier return [AppendAuFichier $Fichier "$Access=$Texte"] } if {[regexp "itself_?" $PourQui]} { set Descriptif "$Access=$Texte" return [MiseEnPageDuDescriptif $Descriptif] } return } proc StockeLesSequencesEtMaquilleLeMSF {FichierMSF Alias Nom} { global RepertoireDuGenome global MaquilleNon JeMeSignale set N [DecortiqueUnMSF $FichierMSF LesNoms Sequences] set LeMSF [LesLignesDuFichier $FichierMSF] File mkdir "$RepertoireDuGenome/copains/$Nom" set MaquillageNecessaire 0 foreach NomDeSequence $LesNoms { if {[regexp "tfiih" "$RepertoireDuGenome"] && [set NouveauNom [Nommenclature $NomDeSequence]] != "" } { Espionne $NouveauNom set OS [Nommenclature $NomDeSequence "OrganismeComplet"] set LesLignesEMBL {} lappend LesLignesEMBL "ID $NouveauNom; cree par rR d'apres Nommenclature et MSF $FichierMSF" lappend LesLignesEMBL "AC $NouveauNom" lappend LesLignesEMBL "DE $NouveauNom" lappend LesLignesEMBL "OS $OS" lappend LesLignesEMBL "OC [OCduOS $OS]" lappend LesLignesEMBL [QueSequenceFormatEMBL [set Sequences($NomDeSequence)] "AvecSQ"] } elseif {[regexp -nocase {^[a-z]+_[a-z]+$} $NomDeSequence]} { set G [string index $NomDeSequence 0] set Esp [string range [StringSuivant "_" dans $NomDeSequence] 0 2] set GEsp [string tolower "${G}$Esp"] set OS [Glossaire $GEsp "Complet"] set LesLignesEMBL {} set NouveauNom $NomDeSequence Espionne "$NouveauNom $OS" lappend LesLignesEMBL "ID $NouveauNom; cree par rR car Genr_Espe et MSF $FichierMSF" lappend LesLignesEMBL "AC $NouveauNom" lappend LesLignesEMBL "DE $NouveauNom" lappend LesLignesEMBL "OS $OS" lappend LesLignesEMBL "OC [OCduOS $OS]" lappend LesLignesEMBL [QueSequenceFormatEMBL [set Sequences($NomDeSequence)] "AvecSQ"] } else { set LesLignesEMBL [LaSequenceDesBanques $NomDeSequence $NomDeSequence AccessOK "OnVeutEMBL"] if {$LesLignesEMBL == {}} { if { ! [info exists Ask]} { set Ask [OuiOuNonMemo "Do You want to help me for each definition, orga, etc. ?"] } if {$Ask && ! [OuiOuNon "$NomDeSequence cannot be found in databases. I'll create the EMBL file.\n Do You want to give a name ?"]} { set NouveauNom [Entre "$NomDeSequence"] } else { set NouveauNom $NomDeSequence } set LesLignesEMBL {} lappend LesLignesEMBL "ID $NouveauNom; cree par rR d'apres MSF $FichierMSF." lappend LesLignesEMBL "AC $NouveauNom" if {$Ask} { lappend LesLignesEMBL "DE [Entre definition]" set Organisme [Entre "Genus species"] lappend LesLignesEMBL "OS $Organisme" lappend LesLignesEMBL "OC [OCduOS $Organisme]" } lappend LesLignesEMBL [QueSequenceFormatEMBL [set Sequences($NomDeSequence)] "AvecSQ"] } else { DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX if { ! [info exists MaquilleNon] || ! $MaquilleNon} { set Organisme [OrganismeCanonique $OS] if {$Organisme==""} { if {[set Organisme [Nommenclature $NomDeSequence "OrganismeComplet"]] == "" } { set Organisme "Unknown unknown" } } scan $Organisme "%s %s" Genre Espece set GenEspe "" append GenEspe "[string toupper [string range $Genre 0 0]]" append GenEspe "[string tolower [string range $Genre 1 2]]" append GenEspe "[string toupper [string range $Espece 0 0]]" append GenEspe "[string tolower [string range $Espece 1 3]]" set NouveauNom "${Alias}_$GenEspe" } else { set NouveauNom $NomDeSequence } } } lappend LesSequencesEMBL $LesLignesEMBL if {$NomDeSequence!=$NouveauNom} { set MaquillageNecessaire 1 } lappend LesAnciens $NomDeSequence lappend LesNouveaux $NouveauNom continue } set LesNouveaux [SansAmbiguite $LesNouveaux] foreach Nouveau $LesNouveaux LesLignesEMBL $LesSequencesEMBL { SauveLesLignes $LesLignesEMBL dans "$RepertoireDuGenome/copains/$Nom/$Nouveau" } if {$MaquillageNecessaire} { set LeNouveauMSF [MaquilleLeMSF $FichierMSF $LesAnciens $LesNouveaux] } else { set LeNouveauMSF [LesLignesDuFichier $FichierMSF] } return $LeNouveauMSF } proc StopAgents {Ls} { set nLs [llength $Ls] set start [expr {$nLs - ($::NbSeq*5)}] if {$start < 0} { set start 0 } set Ls [lrange $Ls $start end] set ns [llength $Ls] set m 0.0 ; set m2 0.0 ; set sdif 0.0 foreach s $Ls { set m [expr {$m + $s}] set m2 [expr {$m2 + $s*$s}] } set m [expr {1.0*$m/$ns}] set sd [expr {sqrt($m2/$ns - $m*$m)}] foreach s $Ls { set sdif [expr {$sdif + abs($m-$s)}] } set sdif [expr {$sdif/$ns}] if {$::debug} { DebugAgents $m $sd $sdif } if {$sdif < 0.1*$m} { return 1 } else { return 0 } } proc StopAllGscope {{Action ""}} { set Action [string totitle $Action] set RepPasTouche "[RepertoireDuGenome]/pastouche" set FichierStopAll "$RepPasTouche/stopall" if {$Action=="Test" } { return [file exists $FichierStopAll] } if {$Action=="Delete"} { file delete -force $FichierStopAll ; return "" } if {$Action!="Force" } { if { ! [OuiOuNon "Ok to stop all running gscope on \n[RepertoireDuGenome]\n through pastouche/stopall" 0]} { return "No" } } Sauve "StopAll demande sur [info hostname] , pid [pid] depuis [Date Nice] = [info level -1]" dans $FichierStopAll file attribute $FichierStopAll -permissions 0777 return $FichierStopAll } proc StopAvant {Seq {Depart ""}} { Wup "numerotation commence a 0" regsub -all " " $Seq "" Seq set FinSeq [string length $Seq] if {$Depart==""} { set Depart $FinSeq-1 } set PremierBon -1 foreach I [NombresEntre [expr $Depart-3] 0 -3] { set Codon [string range $Seq $I [expr $I+2]] if {[CodonStopPossible $Codon]} { set PremierBon $I ; break } } return $PremierBon } proc StopCommeGlimmer {{Qui compte}} { foreach X {P G} Liste {ListeDesPABs ListeDesGLIMMERs} { foreach PAB [$Liste] { set Orient [Box $PAB orient] set O $Orient if {$Orient=="F"} { set Debut [Box $PAB debut] set Fin [Box $PAB fin] set Long [expr $Fin-$Debut] if {[info exists Fins($X,$O,$Fin)]} { FaireLire "[set Fins($X,$O,$Fin)] et $PAB meme fin" } set Fins($X,$O,$Fin) $PAB set Longs($X,$O,$Fin) $Long } else { set Debut [Box $PAB fin] set Fin [Box $PAB debut] set Long [expr $Debut-$Fin] if {[info exists Fins($X,$O,$Fin)]} { FaireLire "[set Fins($X,$O,$Fin)] et $PAB meme fin" } set Fins($X,$O,$Fin) $PAB set Longs($X,$O,$Fin) $Long } } } lappend LesListesDispos LesMemesFins lappend LesListesDispos LesMemesFinsPetits lappend LesListesDispos LesMemesFinsSeules lappend LesListesDispos LesMemesFinsSeulesPetits lappend LesListesDispos LesMemesPile lappend LesListesDispos LesMemesPilePetits lappend LesListesDispos LesAutres lappend LesListesDispos LesAutresPetits lappend LesListesDispos LesGlimmersAuMax lappend LesListesDispos LesGlimmersAuMaxPetits lappend LesListesDispos LesGlimmersPasAuMax lappend LesListesDispos LesGlimmersPasAuMaxPetits lappend LesListesDispos LesCutted lappend LesListesDispos LesCuttedPetits foreach L $LesListesDispos { set $L {} } foreach {XOFin PAB} [array get Fins] { regsub -all "," $XOFin " " X_O_Fin scan $X_O_Fin "%s %s %s" X O Fin if {$X=="G"} { continue } if {[info exists Fins(G,$O,$Fin)]} { if {[set Longs($X,$O,$Fin)]==[set Longs(G,$O,$Fin)]} { lappend LesMemesPile "$PAB [set Fins(G,$O,$Fin)]" if {[set Longs($X,$O,$Fin)]<300} { lappend LesMemesPilePetits "$PAB [set Longs($X,$O,$Fin)]" } } else { lappend LesMemesFinsSeules "$PAB [set Fins(G,$O,$Fin)]" if {[set Longs($X,$O,$Fin)]<300} { lappend LesMemesFinsSeulesPetits "$PAB [set Longs($X,$O,$Fin)]" } scan [BornesDuGeneEtendu $PAB] "%s %d %d %s" Etendu DE FE OE if {[CasimirCutted $PAB]!=0} { if {[set Longs($X,$O,$Fin)]<300} { lappend LesCuttedPetits "$PAB [set Longs($X,$O,$Fin)]" } lappend LesCutted "$PAB [set Fins(G,$O,$Fin)]" } set Glim [set Fins(G,$O,$Fin)] set DG [Box $Glim debut] set FG [Box $Glim fin] set OG [Box $Glim orient] if {"$DE $FE $OE"=="$DG $FG $OG"} { lappend LesGlimmersAuMax [set Fins(G,$O,$Fin)] if {[set Longs($X,$O,$Fin)]<300} { lappend LesGlimmersAuMaxPetits "$PAB [set Longs($X,$O,$Fin)]" } } else { lappend LesGlimmersPasAuMax [set Fins(G,$O,$Fin)] if {[set Longs($X,$O,$Fin)]<300} { lappend LesGlimmersPasAuMaxPetits "$PAB [set Longs($X,$O,$Fin)]" } } } lappend LesMemesFins "$PAB [set Fins(G,$O,$Fin)]" if {[set Longs($X,$O,$Fin)]<300} { lappend LesMemesFinsPetits "$PAB [set Longs($X,$O,$Fin)]" } } else { lappend LesAutres "$PAB [set Longs($X,$O,$Fin)]" if {[set Longs($X,$O,$Fin)]<300} { lappend LesAutresPetits "$PAB [set Longs($X,$O,$Fin)]" } } } if {$Qui=="compte"} { foreach L $LesListesDispos { lappend Sortie [format "%5d %s" [llength [set $L]] $L] } return $Sortie } return [set $Qui] } proc StopDuMs {} { foreach Nom [ListeDesPABs] { set S [Box $Nom orient] set F [Box $Nom fin] if {$S=="R"} { continue } set Stop [BoutADN [incr F 1] [incr F 2] $S] Espionne "$Nom $Stop" } exit } proc StopProchain {Seq {Depart ""}} { Wup "numerotation commence a 0" if {$Depart==""} { set Depart 0 } regsub -all " " $Seq "" Seq set FinSeq [string length $Seq] set PremierBon -1 foreach I [NombresEntre $Depart $FinSeq 3] { set Codon [string range $Seq $I [expr $I+2]] if {[CodonStopPossible $Codon]} { set PremierBon $I ; break } } return $PremierBon } proc StopSelectionForObj {w x y} { return return -code break } proc StorePDBInDB {} { global Tpdb parray Tpdb puts "" puts "[llength [array names Tpdb *,aaRS]] to be recorded" set db root sqlite3 $db misynpat.sql # loop over all pdb to add in DB foreach k [array names Tpdb *,aaRS] { lassign [split $k ,] id tmp set sys $Tpdb($k) # unknown system if {$sys == "unknown" || ! $Tpdb($id,ok)} { set pc -1. set acc "NULL" set pks 0 $db eval {insert into structure values(NULL,$pks,$id,$acc,$pc)} continue } set sn "${sys}ARS2" set pks [$db eval "select pk_synthetase from synthetase where sName like '${sys}ARS%'"] if {$pks == {} } { puts "PROBLEM SNAME $sn" continue } set acc $Tpdb($id,acc) if {$acc eq "unknown"} { set pc -1. } else { set pc $Tpdb($id,pc) } $db eval {insert into structure values(NULL,$pks,$id,$acc,$pc)} } $db close return } 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 StoreSignal {} { } proc StrStatPipe {ID {resolution ""} {Sequence ""} {Alignement ""} {ListeDesBornes ""}} { ############################# # Si l'utilisateur donne des bornes alors on se fixe uniquement sur les bornes # Regarde la sequence borne comme un domaine (Ne regarde pas les PFAMs) # Si les bornes sont vide alors recherche les domaines avec macsim -> regarde les PFAMs # Prends les PFAMs comme les domaines et les bornes de ces PFAMs ############################# if {$resolution==""} {set resolution 4} #Etape 1 set CodeGscope [AddSeq $ID $Sequence] if {$Alignement==""} { Espionne "Pas d'alignement" #Etape 2 set NbPDB [BlastPPourStrStat $CodeGscope] set tfasdescop [RepertoireDuGenome]/tfasdescopains/$CodeGscope #Etape 3 DbClustalPourTous $CodeGscope set msfFile [RepertoireDuGenome]/msf/$CodeGscope Espionne "Nombre de PDB trouver par le Blast: $NbPDB" #Etape 5 (cherche dans psiblast) if {$NbPDB<3} { CherhePDBParpsiblast $msfFile $CodeGscope $resolution DeleteLesSeqRedondanteDansTfasDesCop $CodeGscope set NbPDBApresPsi [NombreDePDBDansTfasdescopains $CodeGscope] Espionne "Nombre de PDB apres PsiBlast: $NbPDBApresPsi / Nombre de PDB Blast: $NbPDB" if {$NbPDBApresPsi<2} { Espionne "Nombre de PDB: $NbPDBApresPsi" Espionne "Moins de 2 PDB, arret" exit } if {$NbPDBApresPsi>$NbPDB} { DbClustalPourTous $CodeGscope set NbPDB $NbPDBApresPsi } } } else { if {![file exists "[RepertoireDuGenome]/msf"]} { File mkdir [RepertoireDuGenome]/msf } #puis mettre le fichier dedans le msf du user!! #fait un mv du fichier que j'ai deja ou..? faut definir les tfasdescopains!!! } #Creation des repertoires pour sauvegarder les PDB selectionne par domaine if {![file exists "[RepertoireDuGenome]/PDBParDomaine"]} { File mkdir [RepertoireDuGenome]/PDBParDomaine/ } if {![file exists "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope"]} { File mkdir [RepertoireDuGenome]/PDBParDomaine/$CodeGscope } set RepertoireDeDomaines "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope" #Etape 6 (Optionnel) pas de bornes de domaines, rechercher des domaines en automatique (PFAM) if {$ListeDesBornes==""} { LeonEtMacsimPourTous $CodeGscope #Analyse par Interproscan? #Etape 7 #faire le trie des domaines et leur position absolue #Determiner les differents domaines à traiter donne une liste de donmaine (nom debutDuDomaine FinDuDomaine) set ListeDesDomaines [TestDefDesDomaine $CodeGscope] Espionne "Fin ETAPE 6 ListedesDomaines" } else { set ListeDesDomaines [CreationDeLaListeDesDomaines $ListeDesBornes] } #Etape 8 foreach domaine $ListeDesDomaines { Espionne "Etape 8" Espionne "domaine: $domaine" scan $domaine "%s %s %s" domaine start end PositionRelativeSeqCibleParRapportSeqRef $domaine $CodeGscope $start $end #PositionRelativeSeqCibleParRapportSeqRef "" QR009 1758 1844 } #Si aucune PDB accepter alors on a rien dans le fichier.... #donc faut prendre en compte cette possibilite #Etape 9 #parcourir tous les fichiers de domaines et faire l'alignement multiple sauvegarde de l'alignement multiple dans le repertoire correspondant set r [glob -type f $RepertoireDeDomaines *] #faut pas prendre les dossiers!! Espionne "Etape 9" foreach fichier $r { Espionne "fichier: $fichier" set fichierTfasDePDBByDomaine "$fichier.msf" set fichierTmpMsf [RunDbClustal $fichier "" "GetMsfFilename"] Espionne "fichierTmpMsf: $fichierTmpMsf" Espionne "file rename -force $fichierTmpMsf $fichier.msf" file rename -force $fichierTmpMsf $fichierTfasDePDBByDomaine } #Etape 10 Espionne "Etape 10" #RepertoireDeDomaines SecatorPourFichierEntreStrStat $CodeGscope #Etape 11 Appel vers StrStat #Voir avec Benjamin pour la decoupe des PDBs } proc StringApres {Champ dans Texte} { return [ValeurApres $Champ dans $Texte "%s"] } proc StringDistribution {{Pattern ""}} { set LesFichiersParser [glob -nocomplain "$Pattern/WithAny.parser"] set LesK {} foreach FichierParser $LesFichiersParser { set DirName [file dirname $FichierParser] set K [CreateRichAndPoor $FichierParser "GetDistribution"] lappend LesK "$DirName $K" } return [AfficheListe $LesK] } proc StringInteractome {FichierDepart RepertoireParent Org {SeuilString ""} {From ""} {WithoutTextMiningOnly ""} {GetWhat ""} {WithoutDuplicateYesOrNo ""} {UserListOrFile ""}} { #FichierDepart 1ereligne=#lignetitre attention #(diese) obligatoire sinon on met #data1 data2 etc. # lignessuivantes=donneesexpression separateur=tabulation # PourOcean (2016/08/23) # Si RepertoireParent = PourOcean cela veut dire : # que c'est le repertoire de FichierDepart # que le repertoire existe déjà # On force GetWhat à GetGnGetSw # On en profite pour faire ce qu'il faut pour Ocean #Si RepertoireParent est de la forme /ici/ou/la/SameAsFile on cree un rep du meme nom que FichierDepart #exemple: # DeAffyAString /genomics/link/R_RNG209/RNG209_259FDR_WRsel.txt /genomics/link/R_RNG209/SameAsFile "Mus musculus" 700 # va creer /genomics/link/R_RNG209/RNG209_259FDR_WRsel avec tout dedans, y compris FichierDepart # et s'il exists FichierDepart_context.txt # et meme FichierDepart.tgz #if {$GetWhat==""} { set GetWhat "GetZip" } # Ne sert plus ! #Utilise maintenant le GetWhat pour savoir quel type d identifiant on veut récupérer dans les fichiers sorties #Par défaut, c'est GetGn mais peut être GetSw ou GetGnGetSw if {$GetWhat==""} { set GetWhat "GetGn" } #Quand on appelle CanalSqlString, par defaut on travaille sur la base de donnees string9.1 #Si on veut travailler avec une autre version (comme string8.3) et que l'on veut que ce choix soit pris en compte par toutes les proc que StringInteractome appelle. On ajoute "ConnInfoString DefaultDbName string8.3" avant CanalSqlString. Ensuite tous les CanalSqlString de toutes les proc appelees concerneront la base string8.3. #ConnInfoString DefaultDbName string8.3 CanalSqlString if {$SeuilString!="" && ! [regexp {^[0-9\.eE\+\-]+$} $SeuilString] && $UserListOrFile==""} { set UserListOrFile $SeuilString; set SeuilString "" } if {[regexp {^([0-9\,]+)_([0-9\,]*)(_([TFX]?))?(_([0-9]*))?(_([0-9]*))?$} $UserListOrFile Match R A UT T UMi Mi UMa Ma]} { if {$T=="X"} { set T "" } if {$A==""} { set A 0 } set UserListOrFile [GxGenesFromRealExp $R $A $T $Mi $Ma] } set Pwd [pwd] if {$RepertoireParent=="."} { set RepertoireParent $Pwd } regsub {^\./} $RepertoireParent "$Pwd/" RepertoireParent regsub {^\../} $RepertoireParent "$Pwd/../" RepertoireParent set RepertoireParent [string trimright $RepertoireParent "/"] set Date [Date] if { ! [info exists QueryColor] || $QueryColor==""} { set QueryColor [string range $Date 4 end] } set LocalWithoutTextMiningOnly [string equal -nocase $WithoutTextMiningOnly "WithoutTextMiningOnly"] if {!$LocalWithoutTextMiningOnly} { set WithoutTextMiningOnly "WithTextMiningOnly" } if {$WithoutDuplicateYesOrNo==""} { set WithoutDuplicateYesOrNo "Yes" } set Source "FromAffy" if {$From==""} { set From "Test" } if {[regexp "_" $From]} { set LesMots [split $From "_"] set From [lindex $LesMots 0] set LesColonnes [lrange $LesMots 1 end] } else { set LesColonnes [list 0] } if {$From=="FromAffy"} { set Source "FromAffy" } if {$From=="FromNM"} { set Source "FromNM" } if {$From=="FromGn"} { set Source "FromGn"} if {$From=="FromSw"} { set Source "FromGn"} ;#FromSw == FromGn if {$From=="FromEns"} { set Source "FromAffy"} set total 0; set vide 0; set bon 0 set LesLignesRecap {} if {[regexp {^[0-9]+$} $Org]} { set TaxId $Org set Org [TaxIdOrg $TaxId] } else { regsub "_" $Org " " Org set TaxId [TaxIdOrg $Org] } regsub " " $Org "_" Org set PourOcean 0 if {$RepertoireParent=="PourOcean"} { set PourOcean 1 set RepertoireParent [file dirname $FichierDepart] set GetWhat "GetGnGetSw" set Racine [file tail $RepertoireParent] } if {$PourOcean} { set RepertoireSortie $RepertoireParent } else { if {[regexp "/SameAsFile$" $RepertoireParent]} { set Racine [file tail $FichierDepart] regsub {\.txt} $Racine "" Racine while {$Racine==[file tail $FichierDepart]} { append Racine "_" } regsub "/SameAsFile$" $RepertoireParent "" RepertoireParent } else { set Racine "String_${TaxId}_$Date" } set RepertoireSortie "$RepertoireParent/$Racine" file mkdir $RepertoireSortie } set FichierDepartCopie "$RepertoireSortie/[file tail $FichierDepart]" file copy -force $FichierDepart $FichierDepartCopie set IdentifiersFile "$RepertoireSortie/Identifiers" if {[file exists $UserListOrFile]} { set UserListOrFileCopie "$RepertoireSortie/[file tail $UserListOrFile]" file copy -force $UserListOrFile $UserListOrFileCopie } elseif {$UserListOrFile!={}} { SauveLesLignes $UserListOrFile dans "$RepertoireSortie/filter_${R}_${A}_${T}_${Mi}_${Ma}.txt" } set InfoDatabase [StringApres "dbname=" dans [ConnInfoString]] lappend LesParametresString "date=$Date" lappend LesParametresString "dbname=$InfoDatabase" lappend LesParametresString "organism=$Org" if {$SeuilString!=""} { lappend LesParametresString "threshold=$SeuilString" } else { lappend LesParametresString "threshold=[SeuilStringInteractomeDefaut] (default)" } lappend LesParametresString "wtmo=$WithoutTextMiningOnly" SauveLesLignes $LesParametresString dans "$RepertoireSortie/StringParameters.txt" regsub ".txt$" $FichierDepart "" FichierContext append FichierContext "_context.txt" set FichierContextCopie "$RepertoireSortie/[file tail $FichierContext]" if {[file exists $FichierContext]} {file copy -force $FichierContext $FichierContextCopie } set FicQueryOnly "$RepertoireSortie/QueryOnly.string" set FicSandwich "$RepertoireSortie/Sandwich.string" set FicWithAny "$RepertoireSortie/WithAny.string" set FicWithAnyParser "$RepertoireSortie/WithAny.parser" # if {$LocalWithoutTextMiningOnly} { # set FicQueryOnly "$RepertoireSortie/QueryOnly_noTM.string" # set FicSandwich "$RepertoireSortie/Sandwich_noTM.string" # set FicWithAny "$RepertoireSortie/WithAny_noTM.string" # set FicWithAnyParser "$RepertoireSortie/WithAny_noTM.parser" # } else { # set FicQueryOnly "$RepertoireSortie/QueryOnly.string" # set FicSandwich "$RepertoireSortie/Sandwich.string" # set FicWithAny "$RepertoireSortie/WithAny.string" # set FicWithAnyParser "$RepertoireSortie/WithAny.parser" # } set TitreAMettre 1 set LesIdentifiants {} foreach Ligne [LesLignesDuFichier $FichierDepart] { regsub -all "\t" $Ligne ";" LigneOrigine if {$TitreAMettre} { set TitreAMettre 0 if {[regexp {^\#(.+)} $Ligne Match Titre]} { regsub {^\#} $LigneOrigine "" LigneOrigine set TitreOrigine $LigneOrigine } else { set col 1 set LeTitre {} foreach x [split $Ligne "\t"] { lappend LeTitre "data$col" incr col } set Titre [join $LeTitre "\t"] set TitreOrigine $Titre regsub -all "\t" $TitreOrigine ";" TitreOrigine } set AppendQueryColor 0 if { ! [regexp "QueryColor" $Titre]} { append Titre "\tQueryColor" set AppendQueryColor 1 } set LesLignesAttributeNode [list "Pn\tPid\t$Titre"] lappend LesLignesRecap "Initial;ProteinID;PreferredName;$TitreOrigine" } if {[regexp "^#" $Ligne]} { continue } incr total set LesMots [split $Ligne "\t"] set NomRetenu "" foreach Col $LesColonnes { set Mot [lindex $LesMots $Col] scan $Mot "%s" Nom if {$NomRetenu==""} { set NomRetenu $Nom } set Nom [string trim $Nom "\"\'"] if {$From=="Test"} { set Source "FromGn" if {[regexp -nocase {^[0-9]+$} $Nom]} { set Source "FromString" } elseif {[regexp -nocase {_at} $Nom]} { set Source "FromAffy" } elseif {[regexp -nocase {^(NM|NP)[_0-9\.]+} $Nom]} { set Source "FromNM" } elseif {[regexp -nocase {^ENS} $Nom]} { set Source "FromAffy" } else { set Source "FromGn" } } switch $Source { "FromAffy" { set IdString [ProtIDStringFromAffx $Nom $TaxId] } "FromNM" { set IdString [ProtIDStringFromNM $Nom $TaxId] } "FromGn" { set IdString [ProtIDStringFromGn $Nom $TaxId] } "FromString" { set IdString $Nom } } if {$IdString!=""} { break } } set Nom $NomRetenu set PN "" if {$IdString==""} { incr vide set LigneRecap "$Nom;000000;xxxxxx" } else { incr bon lappend LesIdentifiants $IdString set PNAll [PreferredName $IdString $Org "All"] set PN [PreferredName $IdString $Org] set LigneRecap "$Nom;$IdString;$PNAll" if {$AppendQueryColor} { append Ligne "\t$QueryColor" } lappend LesLignesAttributeNode "$PN\t$IdString\t$Ligne" } append LigneRecap ";$LigneOrigine" Espionne $LigneRecap lappend LesLignesRecap $LigneRecap } SauveLesLignes $LesLignesRecap dans "$RepertoireSortie/Summary.txt" SauveLesLignes $LesLignesAttributeNode dans "$RepertoireSortie/AttributeNode" set LesIdentifiants [ListeSansDoublon $LesIdentifiants] SauveLesLignes $LesIdentifiants dans $IdentifiersFile Espionne "CreateWithAny $IdentifiersFile $FicWithAny $SeuilString $Org $WithoutTextMiningOnly " CreateWithAny $IdentifiersFile $FicWithAny $SeuilString $Org $WithoutTextMiningOnly $GetWhat ParseString $IdentifiersFile $FicWithAny $FicWithAnyParser if {$WithoutDuplicateYesOrNo=="Yes"} { Espionne "EnleveDoublonOfString" EnleveDoublonOfString $FicWithAny } CreateSandwich $FicWithAny $FicSandwich $IdentifiersFile ; LitString Reset CreateQueryOnly $FicWithAny $FicQueryOnly $IdentifiersFile ; LitString Reset if {$UserListOrFile!=""} { file copy $FicWithAny "$FicWithAny.NotFiltered" file copy $FicSandwich "$FicSandwich.NotFiltered" file copy $FicQueryOnly "$FicQueryOnly.NotFiltered" file copy $FicWithAnyParser "$FicWithAnyParser.NotFiltered" FilterWithAny $FicWithAny $UserListOrFile $TaxId $IdentifiersFile ; LitString Reset ParseString $IdentifiersFile $FicWithAny $FicWithAnyParser CreateSandwich $FicWithAny $FicSandwich $IdentifiersFile ; LitString Reset CreateQueryOnly $FicWithAny $FicQueryOnly $IdentifiersFile ; LitString Reset } CanalSqlDisconnect set HitCounts [QuestionDeScience EVImm "ret HitCounts $RepertoireSortie"] Sauve $HitCounts dans "$RepertoireSortie/StringInfo.txt" if { ! $PourOcean } { set NomZip "$Racine.tgz" set FichierZip "$RepertoireSortie/$NomZip" exec tcsh -c "cd $RepertoireParent; tar -cf - $Racine | gzip -9 > $NomZip" #Espionne "$msg" #if {$msg ne ""} {Espionne "bordel"} file rename -force "$RepertoireParent/$NomZip" $FichierZip } set LesFichiers {} foreach F [lsort [glob "$RepertoireSortie/*"]] { lappend LesFichiers [file tail $F] } #set Retour "$RepertoireSortie contains all files concerning $Racine\n\[join $LesFichiers '\n'] # $bon WithStringID $vide WithoutStringID from $total entries\n" set Retour "$RepertoireSortie contains all files concerning $Racine ([join $LesFichiers |])\n $bon WithStringID $vide WithoutStringID from $total entries\n" return $Retour } proc StringInteractome_fm {FichierDepart RepertoireParent Org {SeuilString ""} {From ""} {WithoutTextMiningOnly ""} {WithoutDuplicateYesOrNo ""} {UserListOrFile ""}} { #FichierDepart 1ereligne=#lignetitre attention #(diese) obligatoire sinon on met #data1 data2 etc. # lignessuivantes=donneesexpression separateur=tabulation #Si RepertoireParent et sde la forme /ici/ou/la/SameAsFile on cree un rep du meme nom que FichierDepart #exemple: # DeAffyAString /genomics/link/R_RNG209/RNG209_259FDR_WRsel.txt /genomics/link/R_RNG209/SameAsFile "Mus musculus" 700 # va creer /genomics/link/R_RNG209/RNG209_259FDR_WRsel avec tout dedans, y compris FichierDepart # et s'il exists FichierDepart_context.txt # et meme FichierDepart.tgz #if {$GetWhat==""} { set GetWhat "GetZip" } # Ne sert plus ! #Utilise maintenant le GetWhat pour savoir quel type d identifiant on veut récupérer dans les fichiers sorties #Par défaut, c'est GetGn mais peut être GetSw #Quand on appelle CanalSqlString, par defaut on travaille sur la base de donnees string9.1 #Si on veut travailler avec une autre version (comme string8.3) et que l'on veut que ce choix soit pris en compte par toutes les proc que StringInteractome appelle. On ajoute "ConnInfoString DefaultDbName string8.3" avant CanalSqlString. Ensuite tous les CanalSqlString de toutes les proc appelees concerneront la base string8.3. #ConnInfoString DefaultDbName string8.3 CanalSqlString if {$SeuilString!="" && ! [regexp {^[0-9\.eE\+\-]+$} $SeuilString] && $UserListOrFile==""} { set UserListOrFile $SeuilString; set SeuilString "" } if {[regexp {^([0-9\,]+)_([0-9\,]*)(_([TFX]?))?(_([0-9]*))?(_([0-9]*))?$} $UserListOrFile Match R A UT T UMi Mi UMa Ma]} { if {$T=="X"} { set T "" } if {$A==""} { set A 0 } set UserListOrFile [GxGenesFromRealExp $R $A $T $Mi $Ma] } set Pwd [pwd] if {$RepertoireParent=="."} { set RepertoireParent $Pwd } regsub {^\./} $RepertoireParent "$Pwd/" RepertoireParent regsub {^\../} $RepertoireParent "$Pwd/../" RepertoireParent set RepertoireParent [string trimright $RepertoireParent "/"] set Date [Date] if { ! [info exists QueryColor] || $QueryColor==""} { set QueryColor [string range $Date 4 end] } set LocalWithoutTextMiningOnly [string equal -nocase $WithoutTextMiningOnly "WithoutTextMiningOnly"] if {!$LocalWithoutTextMiningOnly} { set WithoutTextMiningOnly "WithTextMiningOnly" } if {$WithoutDuplicateYesOrNo==""} { set WithoutDuplicateYesOrNo "Yes" } set Source "FromAffy" if {$From==""} { set From "Test" } if {[regexp "_" $From]} { set LesMots [split $From "_"] set From [lindex $LesMots 0] set LesColonnes [lrange $LesMots 1 end] } else { set LesColonnes [list 0] } if {$From=="FromAffy"} { set Source "FromAffy" } if {$From=="FromNM"} { set Source "FromNM" } if {$From=="FromGn"} { set Source "FromGn"} if {$From=="FromSw"} { set Source "FromGn"} ;#FromSw == FromGn if {$From=="FromEns"} { set Source "FromAffy"} set total 0; set vide 0; set bon 0 set LesLignesRecap {} if {[regexp {^[0-9]+$} $Org]} { set TaxId $Org set Org [TaxIdOrg $TaxId] } else { regsub "_" $Org " " Org set TaxId [TaxIdOrg $Org] } regsub " " $Org "_" Org if {[regexp "/SameAsFile$" $RepertoireParent]} { set Racine [file tail $FichierDepart] regsub {\.txt} $Racine "" Racine while {$Racine==[file tail $FichierDepart]} { append Racine "_" } regsub "/SameAsFile$" $RepertoireParent "" RepertoireParent } else { set Racine "String_${TaxId}_$Date" } #set RepertoireSortie "$RepertoireParent/$Racine" #file mkdir $RepertoireSortie set FichierDepartCopie "$RepertoireParent/[file tail $FichierDepart]" file copy -force $FichierDepart $FichierDepartCopie set IdentifiersFile "$RepertoireParent/Identifiers" if {[file exists $UserListOrFile]} { set UserListOrFileCopie "$RepertoireParent/[file tail $UserListOrFile]" file copy -force $UserListOrFile $UserListOrFileCopie } elseif {$UserListOrFile!={}} { SauveLesLignes $UserListOrFile dans "$RepertoireParent/filter_${R}_${A}_${T}_${Mi}_${Ma}.txt" } set InfoDatabase [StringApres "dbname=" dans [ConnInfoString]] lappend LesParametresString "date=$Date" lappend LesParametresString "dbname=$InfoDatabase" lappend LesParametresString "organism=$Org" if {$SeuilString!=""} { lappend LesParametresString "threshold=$SeuilString" } else { lappend LesParametresString "threshold=[SeuilStringInteractomeDefaut] (default)" } lappend LesParametresString "wtmo=$WithoutTextMiningOnly" SauveLesLignes $LesParametresString dans "$RepertoireParent/StringParameters.txt" regsub ".txt$" $FichierDepart "" FichierContext append FichierContext "_context.txt" set FichierContextCopie "$RepertoireParent/[file tail $FichierContext]" if {[file exists $FichierContext]} {file copy -force $FichierContext $FichierContextCopie } set FicQueryOnly "$RepertoireParent/QueryOnly.string" set FicSandwich "$RepertoireParent/Sandwich.string" set FicWithAny "$RepertoireParent/WithAny.string" set FicWithAnyParser "$RepertoireParent/WithAny.parser" # if {$LocalWithoutTextMiningOnly} { # set FicQueryOnly "$RepertoireSortie/QueryOnly_noTM.string" # set FicSandwich "$RepertoireSortie/Sandwich_noTM.string" # set FicWithAny "$RepertoireSortie/WithAny_noTM.string" # set FicWithAnyParser "$RepertoireSortie/WithAny_noTM.parser" # } else { # set FicQueryOnly "$RepertoireSortie/QueryOnly.string" # set FicSandwich "$RepertoireSortie/Sandwich.string" # set FicWithAny "$RepertoireSortie/WithAny.string" # set FicWithAnyParser "$RepertoireSortie/WithAny.parser" # } set TitreAMettre 1 set LesIdentifiants {} foreach Ligne [LesLignesDuFichier $FichierDepart] { regsub -all "\t" $Ligne ";" LigneOrigine if {$TitreAMettre} { set TitreAMettre 0 if {[regexp {^\#(.+)} $Ligne Match Titre]} { regsub {^\#} $LigneOrigine "" LigneOrigine set TitreOrigine $LigneOrigine } else { set col 1 set LeTitre {} foreach x [split $Ligne "\t"] { lappend LeTitre "data$col" incr col } set Titre [join $LeTitre "\t"] set TitreOrigine $Titre regsub -all "\t" $TitreOrigine ";" TitreOrigine } set AppendQueryColor 0 if { ! [regexp "QueryColor" $Titre]} { append Titre "\tQueryColor" set AppendQueryColor 1 } set LesLignesAttributeNode [list "Pn\tPid\t$Titre"] lappend LesLignesRecap "Initial;ProteinID;PreferredName;$TitreOrigine" } if {[regexp "^#" $Ligne]} { continue } incr total set LesMots [split $Ligne "\t"] set NomRetenu "" foreach Col $LesColonnes { set Mot [lindex $LesMots $Col] scan $Mot "%s" Nom if {$NomRetenu==""} { set NomRetenu $Nom } set Nom [string trim $Nom "\"\'"] if {$From=="Test"} { set Source "FromGn" if {[regexp -nocase {^[0-9]+$} $Nom]} { set Source "FromString" } elseif {[regexp -nocase {_at} $Nom]} { set Source "FromAffy" } elseif {[regexp -nocase {^(NM|NP)[_0-9\.]+} $Nom]} { set Source "FromNM" } elseif {[regexp -nocase {^ENS} $Nom]} { set Source "FromAffy" } else { set Source "FromGn" } } switch $Source { "FromAffy" { set IdString [ProtIDStringFromAffx $Nom $TaxId] } "FromNM" { set IdString [ProtIDStringFromNM $Nom $TaxId] } "FromGn" { set IdString [ProtIDStringFromGn $Nom $TaxId] } "FromString" { set IdString $Nom } } if {$IdString!=""} { break } } set Nom $NomRetenu set PN "" if {$IdString==""} { incr vide set LigneRecap "$Nom;000000;xxxxxx" } else { incr bon lappend LesIdentifiants $IdString set PNAll [PreferredName $IdString $Org "All"] set PN [PreferredName $IdString $Org] set LigneRecap "$Nom;$IdString;$PNAll" if {$AppendQueryColor} { append Ligne "\t$QueryColor" } lappend LesLignesAttributeNode "$PN\t$IdString\t$Ligne" } append LigneRecap ";$LigneOrigine" Espionne $LigneRecap lappend LesLignesRecap $LigneRecap } SauveLesLignes $LesLignesRecap dans "$RepertoireParent/Summary.txt" SauveLesLignes $LesLignesAttributeNode dans "$RepertoireParent/AttributeNode" set LesIdentifiants [ListeSansDoublon $LesIdentifiants] SauveLesLignes $LesIdentifiants dans $IdentifiersFile Espionne "CreateWithAny $IdentifiersFile $FicWithAny $SeuilString $Org $WithoutTextMiningOnly " CreateWithAny $IdentifiersFile $FicWithAny $SeuilString $Org $WithoutTextMiningOnly "GetGnGetSw" ParseString $IdentifiersFile $FicWithAny $FicWithAnyParser if {$WithoutDuplicateYesOrNo=="Yes"} { Espionne "EnleveDoublonOfString" EnleveDoublonOfString $FicWithAny } CreateSandwich $FicWithAny $FicSandwich $IdentifiersFile ; LitString Reset CreateQueryOnly $FicWithAny $FicQueryOnly $IdentifiersFile ; LitString Reset if {$UserListOrFile!=""} { file copy $FicWithAny "$FicWithAny.NotFiltered" file copy $FicSandwich "$FicSandwich.NotFiltered" file copy $FicQueryOnly "$FicQueryOnly.NotFiltered" file copy $FicWithAnyParser "$FicWithAnyParser.NotFiltered" FilterWithAny $FicWithAny $UserListOrFile $TaxId $IdentifiersFile ; LitString Reset ParseString $IdentifiersFile $FicWithAny $FicWithAnyParser CreateSandwich $FicWithAny $FicSandwich $IdentifiersFile ; LitString Reset CreateQueryOnly $FicWithAny $FicQueryOnly $IdentifiersFile ; LitString Reset } CanalSqlDisconnect set HitCounts [QuestionDeScience EVImm "ret HitCounts $RepertoireParent"] Sauve $HitCounts dans "$RepertoireParent/StringInfo.txt" #set NomZip "$Racine.tgz" #set FichierZip "$RepertoireParent/$NomZip" #exec tcsh -c "cd $RepertoireParent; tar -cf - $Racine | gzip -9 > $NomZip" #Espionne "$msg" #if {$msg ne ""} {Espionne "bordel"} #file rename -force "$RepertoireParent/$NomZip" $FichierZip set LesFichiers {} foreach F [lsort [glob "$RepertoireParent/*"]] { lappend LesFichiers [file tail $F] } #set Retour "$RepertoireSortie contains all files concerning $Racine\n\[join $LesFichiers '\n'] # $bon WithStringID $vide WithoutStringID from $total entries\n" set Retour "$RepertoireParent contains all files concerning $Racine ([join $LesFichiers |])\n $bon WithStringID $vide WithoutStringID from $total entries\n" return $Retour } proc StringInteractomesInDir {{Dir ""} {Org ""} {SeuilString ""} {From ""} {WithoutTextMiningOnly ""} {GetWhat ""}} { set LesRepertoiresCrees {} foreach FichierDepart [glob -nocomplain "$Dir/*.txt"] { lappend LesRepertoiresCrees [StringInteractome $FichierDepart "$Dir/SameAsFile" $Org $SeuilString $From $WithoutTextMiningOnly $GetWhat] } return $LesRepertoiresCrees } proc StringPourTous {{File ""} {RepertoireOut ""}} { if {$File == ""} { set File [RepertoireDuGenome]/pabID #Si je n'ai pas directement le le fichier surlequel je dois faire l'analyse alors creation de ce fichier set r [glob -directory [RepertoireDuGenome]/protembl *] set listId "" foreach fichier $r { #Espionne $fichier set LL [LaSequenceDesBanques $fichier] DecortiqueLesLignesEMBL $LL ID AC DE GN OS OC OX SequenceBrute LaDETotal #EspionneL [list $ID $AC $DE $GN $OS $OC $OX $LaDETotal] #Espionne "Entete: $Entete" lappend listId $AC } SauveLesLignes $listId dans $File } Espionne "InFile $File" #exit #verification de l'organisme des seq du fichier d'entre... executer si liste des pab si pas ca??? set organisme [OrganismeDuPAB [lindex [ListeDesPABs] 0]] foreach Nom [ListeDesPABs] { if { [OrganismeDuPAB $Nom] != $organisme} { Espionne "Toutes les sequences ne proviennent pas du meme organisme revoir le fichier d'entre pour String" exit } } if {$RepertoireOut == ""} { set RepertoireOut [RepertoireDuGenome]/StringRep } if { ! [file exists $RepertoireOut]} { File mkdir StringRep } Espionne "Organisme: $organisme" Espionne "output: $RepertoireOut" #gscope puts StringInteractome {FichierDepart RepertoireParent "Saccharomyces cerevisiae" {SeuilString ""} {From ""} {WithoutTextMiningOnly ""}} #gscope puts StringInteractome tototSring "Saccharomyces cerevisiae" "" "" WithoutTextMiningOnly StringInteractomeX $File $RepertoireOut $organisme } proc StringSuivant {Champ dans Texte} { set i [string first $Champ $Texte] if {$i==-1} { return "" } incr i [string length $Champ] return [string range $Texte $i end] } proc Stringinsert {astrg i v} { upvar $astrg s if {$i == "end" || $i > [string length $s]} { append s $v } elseif {$i < 0} { set s "${v}${s}" } else { set s [string range $s 0 $i]${v}[string range $s [expr {$i+1}] end] } return $s } proc StructStyleDansRasMol {m i w f} { global RasM IlFautVoir "molecule $i" if {! [set RasM(mol$m,See)]} { set RasM(mol$m,Style) [set RasM(mol$m,PrevStyle)] return } IlFautVoir "[set RasM(mol$m,PrevStyle)] off" IlFautVoir "$f" set RasM(mol$m,PrevStyle) $f return } proc StructuralModuleColor {Qui} { global SMC set Qui [string tolower $Qui] if {[info exists SMC($Qui)]} { return $SMC($Qui) } if {[info exists SMC("EstCharge")]} { return "grey" } set SMC("EstCharge") 1 set CM " brown;C-terminal extension domain blue;Anticodon Binding domain green;alpha-helical domain green;Bacterial-type C-terminal extension green;TGS domain green;tRNA edge-binding domain green;WHEP domain lightgreen;second additional domain magenta;Putative MTS orange;Insertion domain red;Catalytic domain cyan;Helix of dimerization grey;HIGH grey;KMSKS grey;motif_1 grey;motif_2 grey;motif_3 " regsub -all {[\;\n]+} [string trim $CM "\n;"] ";" CM foreach {C D} [split $CM ";"] { set SMC([string tolower [string trim $D]]) $C } return [StructuralModuleColor $Qui] } proc Student {L1 {L2 ""}} { if {$L2=={}} { FaireLire "Splitter la liste en 2" set L12 $L1 set L1 [MorceauxChoisis $L12] set L2 [ListsComplement $L12 $L1] } Espionne "Je compare $L1 - $L2" return } proc SubSequence {File Start End {FromWhere Start}} { set FileIn [open "$File" "r"] gets $FileIn Sequence set Sequence [string trim $Sequence] set Size [string length $Sequence] set Length [expr $End - $Start + 1] if { $FromWhere == "End" } { set End $Size set Start [expr $Size - $Length] } set Sub [string range $Sequence $Start $End] puts $Sub } proc SubjectDeLaSelection {K} { set Liste [$K find withtag current] foreach Id $Liste { set BId [lindex [$K gettags $Id] 0] set Subject [lindex [$K gettags $Id] 3] AfficheVariable $Subject "AvecRien" $BId } } proc SubmitGscope {{Commande ""} {NbProc ""} {RunningDir ""} {Log ""}} { set NbP 4 set RDir "[RepertoireDuGenome]/Running" set HoteCourt [HoteCourt] set LogR "${HoteCourt}_date.log" if {$Commande==""} { return [Espionne "Usage SubmitGscope BlastPPourTous {NbProc $NbP} {RunningDir $RDir} {Log $LogR}"] } if {$NbProc==""} { set NbProc $NbP } if {$Log==""} { set Log [HoteCourt] } if {$RunningDir==""} { set RunningDir $RDir } if { ! [file exists $RunningDir]} { file mkdir $RunningDir } NousAllonsAuBoulot $RunningDir set LesSoumis {} foreach N [NombresEntre 1 $NbProc] { while {1} { set LogFile "${Log}_[Date %m%d_%H%M%S]" if { ! [file exists $LogFile]} { break } after 500 } set Message "$Commande lance sur $HoteCourt [Date NiceSeconds]" lappend LesSoumis $Message Sauve $Message dans $LogFile eval exec gscope yes $Commande >& $LogFile & } OnRevientDuBoulot return $LesSoumis } proc SubstitueAvecBlancsDevant {Texte A B} { regexp -indices $A $Texte Indices scan $Indices "%d %d" d f incr d -1 while {$d>0 && [string index $Texte $d]==" "} { incr d -1 } incr d 2 set LongBlancAvant [expr $f-$d+1-[string length $B]] set Platre "[string repeat " " $LongBlancAvant]$B" set NouveauTexte [string replace $Texte $d $f $Platre] return $NouveauTexte } proc SubstitueHtml {FichierOuTexte} { set Texte $FichierOuTexte if { ! [regexp "<" $Texte] && [file exists $FichierOuTexte]} { set Texte [ContenuDuFichier $FichierOuTexte] } while {[regexp {_=([^=]*)=_} $Texte Match Variable]} { Espionne $Variable if {[uplevel info exists $Variable]} { set Nouveau [uplevel set $Variable] } else { set Nouveau "" } set d [string first $Match $Texte] set f [expr $d+[string length $Match]-1] set Texte [string replace $Texte $d $f $Nouveau] } return $Texte } proc Subtitle2HTML {aT} { upvar $aT tbl set txt "$tbl(Subtitle)" Html_Append "
    " Html_Append "

    $txt

    " Html_Append "
    " return } proc Subtitle2Text {aT} { upvar $aT tbl global TextOut lappend TextOut "$tbl(Subtitle)" lappend TextOut [string repeat = [string length $tbl(Subtitle)]] return } proc SumOfPairs {s1 s2 {force 0} {UseNeg 0}} { global Mbl WeightCols Wg MblNeg if {$force} { set wc 0 } else { set wc $WeightCols } set sc 0.0 set len [string length $s1] set Ls1 [split $s1 ""] ; set Ls2 [split $s2 ""] set ic 0 foreach c1 $Ls1 c2 $Ls2 { if {$c1 ne "." && $c2 ne "."} { if {$UseNeg} { if {$wc} { set sc [expr {$sc + $Wg($len,$ic)*$MblNeg($c1,$c2)}] } else { set sc [expr {$sc + $MblNeg($c1,$c2)}] } } else { if {$wc} { set sc [expr {$sc + $Wg($len,$ic)*$Mbl($c1,$c2)}] } else { set sc [expr {$sc + $Mbl($c1,$c2)}] } } } incr ic } return $sc } proc SumSpecies {tx {rank ""}} { global Tx set Lfils $Tx(ChildD,$tx) if {$Lfils == {} } { set sum 1 } else { set sum 0 } foreach f $Lfils { set r $Tx(Rank,$f) if {$r eq $rank} { set n 1 set Tx(NbChildCum,$f) 1 } else { set n [SumSpecies $f $rank] } incr sum $n } set Tx(NbChildCum,$tx) $sum return $sum } proc SumStat {} { foreach f [glob *_stats2.txt] { set aa [string range $f 0 [string first "_" $f]-1] if {$aa eq "Fb" || $aa eq "Hbis"} {continue} lappend Laa $aa set Ll [LesLignesDuFichier $f] set i [lsearch -regexp $Ll {Co\-presen}] set nb [lindex $Ll ${i}+2] incr i 2 lassign [split $nb " "] a b c d nbg incr i set ntot 0 set R($aa,nmit) 0 while {[set l [string trim [lindex $Ll $i]]] ne ""} { set Lv [split [string trim $l] " "] set Lg [lrange $Lv 0 end-2] set n [lindex $Lv end] if {[lsearch -regexp $Lg {mito}] != -1} { incr R($aa,nmit) $n } if {[llength $Lg] == $nbg} { set R($aa,all) $n } incr ntot $n incr i } set R($aa,ntot) $ntot set R($aa,v) [expr {1.0*([set R($aa,nmit)] - [set R($aa,all)])/[set R($aa,ntot)]}] } set Lres [list] foreach a $Laa { set Lv [list] lappend Lv $a lappend Lv [set R($a,v)] lappend Lv [expr {[set R($a,nmit)] - [set R($a,all)]}] lappend Lv [set R($a,ntot)] lappend Lres $Lv } set Lres [lsort -real -index 1 -decreasing $Lres] set fmt "%2s | %5.3f %d %d" puts "\n\n" foreach l $Lres { puts [format $fmt {*}$l] } puts "" exit } proc SumStatSA {} { foreach f [glob *_stats2.txt] { set aa [string range $f 0 [string first "_" $f]-1] if {$aa eq "Fb" || $aa eq "Hbis"} {continue} lappend Laa $aa set Ll [LesLignesDuFichier $f] if {$aa eq "E"} { set i [lsearch -regexp $Ll {^# tRNA-synt_1}] } else { set i [lsearch -regexp $Ll {^# tRNA-synt}] } if {$i == -1} { puts "problem $aa" exit } set Ll [lrange $Ll $i end] set i [lsearch -regexp $Ll {Co\-presen}] incr i 2 #set nb [lindex $Ll $i] #lassign [split $nb " "] a b c d nbg incr i set ntot 0 set R($aa,nmit) 0 set nbg -1 while {[set l [string trim [lindex $Ll $i]]] ne ""} { set Lv [split [string trim $l] " "] set Lg [lrange $Lv 0 end-2] set n [lindex $Lv end] if {[lsearch -regexp $Lg {mito}] != -1} { incr R($aa,nmit) $n } if {[llength $Lg] > $nbg} { set nbg [llength $Lg] set R($aa,all) $n } incr ntot $n incr i } set R($aa,ntot) $ntot set R($aa,v) [expr {1.0*([set R($aa,nmit)] - [set R($aa,all)])/[set R($aa,ntot)]}] } set Lres [list] foreach a $Laa { set Lv [list] lappend Lv $a lappend Lv [set R($a,v)] lappend Lv [expr {[set R($a,nmit)] - [set R($a,all)]}] lappend Lv [set R($a,ntot)] lappend Lres $Lv } set Lres [lsort -real -index 1 -decreasing $Lres] set fmt "%2s | %5.3f %d %d" puts "\n\n" foreach l $Lres { puts [format $fmt {*}$l] } puts "" exit } proc SummaryPCI {} { global SDG LNDG TPCI LNOrdali set top .spci toplevel $top wm title $top "Sequence Identity summary" label $top.lbl -text "Sequence Identity Summary" -font "Helvetica 14 bold" -justify left grid $top.lbl -row 0 -column 0 -sticky w -pady 10 set Ln [list] foreach n $LNOrdali { if {$n ne ""} {lappend Ln $n} } set lg [PlusLongEltDe $Ln] frame $top.fgr set dg 0 ; set r 0 foreach g $LNDG { if {$g eq "grise" || $g eq "bidon"} { continue } if {$g eq "GroupeToutLeMonde"} { set gt "Whole Alignment" } else { set gt $g } frame $top.fgr.f$dg label $top.fgr.f$dg.ltt -text "$gt" -font "Helvetica 12 bold" -justify left set min 999. ; set max -999. set pmn "" ; set pmx "" set m 0.0 ; set m2 0.0 set i 1 ; set npairs 0 foreach n1 [lrange $Ln 0 end-1] { foreach n2 [lrange $Ln $i end] { lassign [set TPCI($n1,$n2)] pc l1 l2 l1sl2 set pc [expr {100.*$pc}] set m [expr {$m + $pc}] set m2 [expr {$m2 + $pc*$pc}] incr npairs if {$pc > $max} { set max $pc set pmx "[format %${lg}s $n1-$n2] [format %6.1f $max]" } if {$pc < $min} { set min $pc set pmn "[format %${lg}s $n1-$n2] [format %6.1f $min]" } } incr i } set m [expr {$m/$npairs}] set s [expr {sqrt($m2/$npairs - $m*$m)}] set vms [format "%6.2f %6.2f" $m $s] set vnx [format "%6.2f %6.2f" $min $max] label $top.fgr.f$dg.lms -font "Helvetica 10" -text "Average/Std. dev" -justify left label $top.fgr.f$dg.vms -font "Helvetica 10" -text $vms -justify left label $top.fgr.f$dg.lnx -font "Helvetica 10" -text "Minimum/Maximum" -justify left label $top.fgr.f$dg.vnx -font "Helvetica 10" -text $vnx -justify left label $top.fgr.f$dg.lpn -font "Helvetica 10" -text "Pair with min Iden. :" -justify left label $top.fgr.f$dg.vpn -font "Helvetica 10" -text $pmn -justify left label $top.fgr.f$dg.lpx -font "Helvetica 10" -text "Pair with max. iden. :" -justify left label $top.fgr.f$dg.vpx -font "Helvetica 10" -text $pmx -justify left grid $top.fgr.f$dg.ltt -column 0 -row 0 -columnspan 2 -sticky w grid $top.fgr.f$dg.lms -column 0 -row 1 -sticky w grid $top.fgr.f$dg.vms -column 1 -row 1 -sticky w grid $top.fgr.f$dg.lnx -column 0 -row 2 -sticky w grid $top.fgr.f$dg.vnx -column 1 -row 2 -sticky w grid $top.fgr.f$dg.lpn -column 0 -row 3 -sticky w grid $top.fgr.f$dg.vpn -column 1 -row 3 -sticky w grid $top.fgr.f$dg.lpx -column 0 -row 4 -sticky w grid $top.fgr.f$dg.vpx -column 1 -row 4 -sticky w set c [expr {$dg%2}] grid $top.fgr.f$dg -row $r -column $c -sticky ew -ipadx 5 -ipady 5 if {$dg%2} {incr r} incr dg } grid $top.fgr -row 1 -column 0 -padx 5 -pady 5 button $top.bok -text " OK " -bg green1 -command [list destroy $top] grid $top.bok -row 2 -column 0 -pady {15 5} FenetreAuCentre $top tkwait window $top return } proc SuperAvecO {} { global EquivalenceZone global StrucAVoir set mref [lindex $StrucAVoir 0] set init 0 set CmdO {} foreach elt [array names EquivalenceZone] { if {$elt == $mref} {continue} set cmdref "" foreach z0 [set EquivalenceZone($mref)] z [set EquivalenceZone($elt)] { set xo1 [lindex [lindex $z0 0] 0] set xo2 [lindex [lindex $z0 0] 1] set chn0 [lindex $z0 1] if {$chn0 == "a"} {set chn0 ""} set Exclue [expr {[lsearch [lindex $z 0] "exclue"] != -1}] if {$Exclue} {continue} set x1 [lindex [lindex $z 0] 0] set x2 [lindex [lindex $z 0] 1] set chn [lindex $z 1] if {$chn == "a"} {set chn ""} if {! $init} { set init 1 set cmdref "lsq_ex $mref $elt $chn0$xo1 $chn0$xo2 ; $chn$x1\n" } else { append cmdref " $chn0$xo1 $chn0$xo2 ; $chn$x1\n" } } if {$cmdref != ""} { append cmdref "; ${elt}2$mref " lappend CmdO $cmdref set cmdref "lsq_mol ${elt}2$mref $elt ;" lappend CmdO $cmdref set init 0 } } return $CmdO } proc SuperAvecOrdali {} { global Defauts StrucAVoir EquivalenceZone set molref [lindex $StrucAVoir 0] set mref [DonneIdDeAccessPDB $molref] set nref [BonNomPDB $molref] set LAtS [set Defauts(Super)] AuLog @begin table AuLog @title Superposition statistics AuLog @begin tabular AuLog [list @titlecols molecules Natoms {RMS (A)} {Mex. deviation}] AuLog @typecols T I R R foreach elt [array names EquivalenceZone] { if {$elt eq $molref} {continue} unset -nocomplain XX W unset -nocomplain Rot Trans set ii0 1 set melt [DonneIdDeAccessPDB $elt] foreach z0 [set EquivalenceZone($molref)] z [set EquivalenceZone($elt)] { if {$z0 eq "exclue" || $z eq "exclue"} { continue } # Traite reference lassign $z0 lx chn0 pref tmp xgr1 xgr2 # traite elt a superposer lassign $z lx chn pelt tmp xge1 xge2 for {set i $xgr1} {$i <= $xgr2} {incr i} { # for refernce set lxyz0 [$mref CoordsDeAtom $chn0 [DonnePosGS $pref $i] " CA "] # for moving struct. set lxyz [$melt CoordsDeAtom $chn [DonnePosGS $pelt $i] " CA "] if {$lxyz0 eq "" || $lxyz eq ""} { continue } lassign $lxyz0 XX(1,${ii0},1) XX(2,${ii0},1) XX(3,${ii0},1) lassign $lxyz XX(1,${ii0},2) XX(2,${ii0},2) XX(3,${ii0},2) set W($ii0) 1. incr ii0 } } # No atoms in common ! if {$ii0 == 1} {continue} incr ii0 -1 # compute superposition set resup [COMPARORTHO XX W Rot Trans] set rms [format %.2f [lindex $resup 0]] set mxd [format %.2f [lindex $resup 1]] AuLog @row $mref-$elt $ii0 $rms $mxd puts "$molref -- $elt : RMS = $rms ; max dev = $mxd" if {$resup == -1} {continue} $melt AddVar Rot [array get Rot] $melt AddVar Trans [array get Trans] } AuLog @end AuLog @end return } proc SuperClasse {Classe} { if {[regexp {^00} $Classe]} { return "Hy" } if {[regexp {000} $Classe]} { return "Hy" } if {[regexp {161} $Classe]} { return "Hy" } if {[regexp {153} $Classe]} { return "NC" } if {[regexp {^14|^08|121|151} $Classe]} { return "CP" } if {[regexp {^11} $Classe]} { return "Tl" } if {[regexp {^09|^10} $Classe]} { return "RT" } if {[regexp {^13|^03} $Classe]} { return "CE" } if {[regexp {^01|^02|^04|^05|^06|^07} $Classe]} { return "Me" } if {[regexp {191} $Classe]} { return "tR" } if {[regexp {192} $Classe]} { return "RR" } if {[regexp {200} $Classe]} { return "IG" } FaireLire "Class $Classe unknown ... I call it 'UK'" return "UK" } proc SupprimeBoutDePlasmideDeLaSequence {} { set Rep "[RepertoireDuGenome]/nucmask" set NewRep "[RepertoireDuGenome]/nucmask_SansBoutPlasmide" if {![file exists $NewRep]} {file mkdir $NewRep} foreach Fichier [glob -nocomplain -directory $Rep "DD*.mrm"] { #set Fichier "$Rep/DD0089.mrm" set Nom [NomDeFichierSansExtension [file tail $Fichier]] set EnteteTFA [EnteteDuFichierTFA $Fichier] set TexteSeq [QueLaSequenceDuTFA $Fichier] if {[regexp -nocase "GAATTCGAT" $TexteSeq]} { lappend ListeSeqAvecBoutPlasmide $Nom if {[regexp -nocase {[A-Z]+GAATTCGAT} $TexteSeq]} {Espionne "$Nom a qq nuc avt le motif"} #regsub -nocase $TexteSeq {[a-z]+GAATTCGAT} TexteSeqSansPlasmide : ca veut dire oblige d'avoir qq chose avt le motif du bout de plasmide #t est le nb de fois que le motif a ete vu set t [regexp -nocase -indices "GAATTCGAT" $TexteSeq tmp] if {$t!=1} {Espionne "Pls fois le motif du plasmide ($t) pour $Nom"} regexp -nocase -indices "GAATTCGAT" $TexteSeq tmp #Espionne "$Nom: $tmp" #if {$tmp==""} {Espionne $Nom : PB tmp} set NewText [string range $TexteSeq [expr [lindex $tmp 1]+1] end] #Espionne "avant: $TexteSeq" #Espionne "apres: $Text" set TFA [SequenceFormatTFA $NewText ">$EnteteTFA" "brut"] if {![file exists "$NewRep/$Nom"]} {Sauve $TFA dans "$NewRep/$Nom"} } } return [llength [lsort -unique $ListeSeqAvecBoutPlasmide]] } proc SupprimeBoxFromPipe {TypeBoxOrFile {BoxOrFileWithBoxList ""}} { if {$TypeBoxOrFile =="Box"} {lappend ListBox $BoxOrFileWithBoxList} if {$TypeBoxOrFile =="File"} { if {$BoxOrFileWithBoxList =={}} { set ListBox [PipeOkOuNon] } else { set ListBox [LesLignesDuFichier $FileWithBoxList] } } set ListBox [ListeSansDoublon $ListBox] #EspionneL $ListBox set RepertoirePastouche "[RepertoireDuGenome]/pastouche" set RepertoireLog "[RepertoireDuGenome]/log" set RepertoireBallast "[RepertoireDuGenome]/ballast" set RepertoireBlastp "[RepertoireDuGenome]/blastp" set RepertoireTfaDesCops "[RepertoireDuGenome]/tfasdescopains" set RepertoireMsf "[RepertoireDuGenome]/msf" set RepertoireRascal "[RepertoireDuGenome]/rascal" set RepertoireLeon "[RepertoireDuGenome]/leon" set RepertoireMacsims "[RepertoireDuGenome]/macsims" set RepertoireMacsimXml "[RepertoireDuGenome]/macsimXml" set RepertoireNormd "[RepertoireDuGenome]/normd" set LesRepertoires [list $RepertoirePastouche $RepertoireLog $RepertoireBallast $RepertoireBlastp $RepertoireTfaDesCops $RepertoireMsf $RepertoireRascal $RepertoireLeon $RepertoireMacsims $RepertoireMacsimXml $RepertoireNormd] foreach Repertoire $LesRepertoires { foreach File [glob -nocomplain "$Repertoire/*"] { foreach BoxASupp $ListBox { if {[regexp $BoxASupp $File]} { Espionne "delete $File" file delete $File } } } } } proc SupprimeDansListe {listVariable value} { #upvar 1 $listVariable var set idx [lsearch -exact $listVariable $value] set var [lreplace $listVariable $idx $idx] return $var } proc SupprimeDoublons {Fichier} { if {![file exists $Fichier]} {return} foreach Ligne [LesLignesDuFichier $Fichier] { if {![info exists Vu($Ligne)]} { set Vu($Ligne) 1 lappend LaListeSansDoublons $Ligne } else { continue } } #FaireLire "[llength $LaListeSansDoublons]" return $LaListeSansDoublons } proc SupprimeDoublonsDansMatricesOfOligos {} { set FiMatDefaut "[RepertoireDuGenome]/fiches/matrices_of_oligos" Garde $FiMatDefaut set LesBons {} foreach Ligne [LesLignesDuFichier $FiMatDefaut] { set Sujets [StringSuivant "=> " dans $Ligne] set Sujets [join [lsort -unique [split $Sujets " "]] " "] regsub {=> .*} $Ligne "" Debut lappend LesBons "$Debut => $Sujets" } SauveLesLignes $LesBons dans $FiMatDefaut return $FiMatDefaut } proc SupprimeJumeauxProtChoisie {FichierDesPABs FichierSortie} { #FichierDesPABs=fiches/LesPABsSansJumeauxSeqSansCourts #FichierSortie=fiches/LesDDSansJumSeqSansCourtsSansJumProtChoisie set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set Zero 0; set Un 0; set NoHuman 0 foreach Nom $L { set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set Orga [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] if {$AccessProt!="NOPROTEIN" && $AccessProt!=""} { set Prot($Nom) $AccessProt } } set NoProt 0; set NbProtUniq 0 foreach Nom $L { #cas1: no prot if {![info exists Prot($Nom)]} {incr NoProt;lappend Liste $Nom;continue} #cas2: prot existe set Access $Prot($Nom) if {![info exists Vu($Access)]} {set Vu($Access) 1; lappend Liste $Nom; incr NbProtUniq; continue} } Espionne "no prot: $NoProt" Espionne "nb prot uniq: $NbProtUniq" Espionne "nb pabs sans jumeaux prot: [llength $Liste]" Espionne "verif no doublons: [llength [lsort -unique $Liste]]" SauveLesLignes $Liste dans $FichierSortie } proc SupprimeJumeauxProtFromContig {FichierDesPABs FichierSortie} { #FichierDesPABs=fiches/LesDDSansJumSeqSansCourtsSansJumProtChoisie #FichierSortie=fiches/LesDDSansJumSeqSansCourtsSansJumProtChoisieNiFromContig set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set Zero 0; set Un 0; set NoHuman 0 foreach Nom $L { set AccessProt [InterrogeProtAndContigChoisis $Nom ProteineChoisie Access] set Orga [InterrogeProtAndContigChoisis $Nom OrganismeChoisi] if {$AccessProt!=""} { set Prot($Nom) $AccessProt } } set NoProt 0; set NbProtUniq 0 foreach Nom $L { #cas1: no prot if {![info exists Prot($Nom)]} {incr NoProt;lappend Liste $Nom;continue} #cas2: prot existe set Access $Prot($Nom) if {![info exists Vu($Access)]} {set Vu($Access) 1; lappend Liste $Nom; incr NbProtUniq; continue} } Espionne "no prot: $NoProt" Espionne "nb prot uniq: $NbProtUniq" Espionne "nb pabs sans jumeaux prot: [llength $Liste]" Espionne "verif no doublons: [llength [lsort -unique $Liste]]" SauveLesLignes $Liste dans $FichierSortie } proc SupprimeLeLogFileDeLOligo {DF Log1} { Wup "proc AjouteUnOligoPourCeuxDejaFait --> Ajoute un oligo a la liste de ceux deja designe de dir1 a dir2" Wup "Ici on supprime le log file associe si l oligo existait pas" Wup "Cas particulier pour un redesign et completer la liste" set Fichier1 $Log1 set FichierNew "$Log1.tmp" if {![file exists $Fichier1] || $DF == ""} {return ""} set Debut [lindex $DF 0] set Fin [lindex $DF 1] #Recopiage du deuxieme log et insertion au bon endroit de la zone extraite precedemment set OnAPasCommence 0 set OnEfface 0 set OnSkip 0 set LesLignes "" set Ligne "" set F [open "$Fichier1"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {$OnAPasCommence=="0" && ![regexp -nocase {Moving on:} $Ligne]} { AppendAuFichier $FichierNew $Ligne continue } if {[regexp -nocase {Moving on:} $Ligne]} { set OnAPasCommence 1 set MaLigne "" regsub "^Moving on: " $Ligne "" MaLigne scan $MaLigne "%s %s" ND NF #On voulait laisser tomber un resultat et maintenant on arrete if { $OnSkip == "1"} { set OnSkip 0 AppendAuFichier $FichierNew $Ligne continue } if {$Debut==$ND} { set OnSkip 1 continue } AppendAuFichier $FichierNew $Ligne continue } if {$OnSkip==0} {AppendAuFichier $FichierNew $Ligne} } close $F if {$OnAPasCommence=="0"} { file delete -force $FichierNew } else { file delete -force $Fichier1 file rename -force $FichierNew $Fichier1 } return "" } proc SupprimeLesFantomesDeOuATapeTBN {} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/ouatapetbn.myself"] { scan $Ligne "%s" Nom if {[Fantome $Nom]} { lappend LesFantomes $Ligne continue } lappend LesBons $Ligne } SauveLesLignes $LesBons dans "[RepertoireDuGenome]/fiches/ouatapetbn.myself" SauveLesLignes $LesFantomes dans "[RepertoireDuGenome]/fiches/ouatapetbn.myselffantomes" exit } proc SupprimeLesFantomesDuTBlastN {} { foreach Nom [ListeDesPABs] { if { ! [Fantome $Nom]} {continue} set Fichier "[RepertoireDuGenome]/tblastnmyself/$Nom" if { ! [file exists $Fichier]} {continue} file rename $Fichier "[RepertoireDuGenome]/tblastnmyselffantomes/$Nom" } exit } proc SupprimeLesJumeaux {FichierSortie} { foreach Nom [ListeDesPABs] { set JR [JumeauRepresentatif $Nom] if {$JR!=""} {lappend Liste $JR} else {lappend Liste $Nom} } Espionne [llength $Liste] set Lt [lsort -unique $Liste] Espionne [llength $Lt] SauveLesLignes $Lt dans $FichierSortie } proc SupprimeLignesDoublons {Fichier FichierNew} { set L [lsort -unique [LesLignesDuFichier $Fichier]] SauveLesLignes $L dans $FichierNew } proc SupprimeLignesMemePos {Fichier FichierNew} { # fichier du type pourCBS (trie) : logval chro pos foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne $Ligne if {$Ligne==""} {continue} set LesInfos [split $Ligne " "] set val [lindex $LesInfos 0] set chro [lindex $LesInfos 1] set pos [lindex $LesInfos 2] if {![info exists Vu($chro,$pos)]} { set Vu($chro,$pos) 1 } else { continue } lappend L $LesInfos } SauveLesLignes $L dans $FichierNew } proc SupprimeLignesSansChroEtChangeHS {Fichier FichierNew} { # pour fichier de type CGH oligo Agilent 44K foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne $Ligne if {$Ligne==""} {continue} set LesInfos [split $Ligne "\t"] set chro [lindex $LesInfos 0] if {![regexp "chr" $chro]} { continue } set val [lindex $LesInfos 3] if {$val==""} {continue} regsub "chr" $chro "" chrom if {$chrom<10} {set NewChro "HS0$chrom"} else {set NewChro "HS$chrom"} set NewL [lreplace $LesInfos 0 0 $NewChro] set NewL [join $NewL "\t"] lappend L $NewL } SauveLesLignes $L dans $FichierNew } proc SupprimeLignesSansChroOuValEtAjouteHS {Fichier FichierNew} { foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne $Ligne if {$Ligne==""} {continue} set LesInfos [split $Ligne "\t"] set chro [lindex $LesInfos 0] # fichier du type : chro\tposmid\tvalue set val [lindex $LesInfos 2] if {$chro==0} {continue} if {$chro==""} {continue} if {$val==""} {continue} if {$chro<10} {set NewChro "HS0$chro"} else {set NewChro "HS$chro"} set NewL [lreplace $LesInfos 0 0 $NewChro] #FaireLire $NewL set NewL [join $NewL "\t"] lappend L $NewL } SauveLesLignes $L dans $FichierNew } proc SupprimeNA {Fichier FichierNew} { foreach Ligne [LesLignesDuFichier $Fichier] { #Espionne $Ligne if {$Ligne==""} {continue} if {[regexp -nocase "N/A" $Ligne]} {Espionne $Ligne;continue} lappend L $Ligne } SauveLesLignes $L dans $FichierNew } proc SupprimeUnGraph {K} { Wup "Ajoute un graph a un canvas ici Id et NbSeq lie au blastn" set LesGraphes [EntreDeux [LesGraphesDeLOligo $K]] foreach Graphe $LesGraphes { set LesIds [$K find withtag $Graphe] foreach Id $LesIds { catch {$K delete $Id} } } return "" } proc SupprimeUnOligoPourCeuxDejaFait {Fichier Quoi} { Wup "Supprime un oligo a la liste de ceux deja designe" Wup "Cas particulier pour un redesign et completer la liste" Wup "Quoi peut etre ref de oligo ou coordonnees debut fin" set FichierNew "${Fichier}.new" set LesOligos1 [InterrogeInfoDeLOligo $Fichier LesNoms] if {$LesOligos1 == ""} { if {[InterrogeInfoDeLOligo $Fichier NotDone]=="1"} { Espionne "Try to delete $Quoi in $Fichier but no Oligo yet designed for $Fichier" return "" } elseif {[InterrogeInfoDeLOligo $Fichier NoOligo]=="1"} { Espionne "Try to delete $Quoi in $Fichier but no Oligo found for $Fichier" return "" } else {Espionne "Petit probleme";return ""} } set LeNomOligo "" if {[llength $Quoi]>1} { set LeNomOligo [InterrogeInfoDeLOligo $Fichier [lindex $Quoi 0] [lindex $Quoi 1] NomOligo] } else {set LeNomOligo $Quoi} if { $LeNomOligo == ""} {return ""} if {! [regexp "$LeNomOligo" $LesOligos1]} {Espionne "No $LeNomOligo in $Fichier";return ""} set OnLeTient 0 set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if { [string range $Ligne 0 0] != ">"} { if {$OnLeTient} {set OnLeTient 0;continue} AppendAuFichier $FichierNew $Ligne continue } if {[regexp "$LeNomOligo" $Ligne]} {set OnLeTient 1;continue} AppendAuFichier $FichierNew $Ligne } close $F file delete -force $Fichier file rename -force $FichierNew $Fichier return "" } proc SupprimeVide {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} { continue } puts $Ligne } exit } proc SurGrille {x} { global PasDeLaGrille if {! [info exists PasDeLaGrille]} { set PasDeLaGrille 1 } set X [expr {round($x/$PasDeLaGrille)*$PasDeLaGrille}] return $X } proc SurLignage_WordML {Couleur} { return "" } proc SurfBall {} { global doneSurfBall pgl listSurfBall Rad if {! $doneSurfBall} { set listSurfBall [glGenLists 1] glNewList $listSurfBall GL_COMPILE_AND_EXECUTE glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glEnable GL_CULL_FACE glCullFace GL_BACK glPolygonMode GL_FRONT_AND_BACK GL_FILL glHint GL_PERSPECTIVE_CORRECTION_HINT $::GL_NICEST glEnable GL_TEXTURE_2D #set FileTex "gold.jpg" #set FileTex "glass.jpg" set FileTex [file join $::OrdEtcDir fond.png] #lassign [Bidon_LoadImage $FileTex] imgData imgW imgH type puts "\nFileTex $FileTex" catch {image create photo phImg -file $FileTex} Msg if {$Msg ne "phImg"} { puts "\n==== Failed :\n$Msg" set FileTex [file join $::OrdEtcDir fond.gif] catch {image create photo phImg -file $FileTex} Msg if {$Msg ne "phImg"} { puts "\n==== Failed :\n$Msg" } } set imgH [image height phImg] set imgW [image width phImg] set imgData [tcl3dVectorFromPhoto phImg 1] image delete phImg set latex [tcl3dVector GLuint 1] glGenTextures 1 $latex glBindTexture GL_TEXTURE_2D [$latex get 0] gluBuild2DMipmaps GL_TEXTURE_2D $::GL_ALPHA $imgW $imgH $::GL_ALPHA GL_UNSIGNED_BYTE $imgData $imgData delete glEnable GL_TEXTURE_GEN_S glEnable GL_TEXTURE_GEN_T glTexEnvi GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE $::GL_REPLACE glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER $::GL_LINEAR glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER $::GL_LINEAR glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_S $::GL_REPEAT glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_T $::GL_REPEAT glTexGeni GL_S GL_TEXTURE_GEN_MODE $::GL_SPHERE_MAP glTexGeni GL_T GL_TEXTURE_GEN_MODE $::GL_SPHERE_MAP #glMaterialfv GL_BACK GL_AMBIENT_AND_DIFFUSE {0.0 0.0 0.0 1.0} set Lv [LesLignesDuFichier Lv.xyz] foreach {x y z} $Lv { lappend Lx $x lappend Ly $y lappend Lz $z } set Ln [LesLignesDuFichier Ln.xyz] set Lco [list] for {set i 0} {$i<[llength $Lv]/3} {incr i} { lappend Lco 0.5 0.5 0.5 0.95 } set Vec [tcl3dVectorFromList GLfloat $Lv] set Nml [tcl3dVectorFromList GLfloat $Ln] set Col [tcl3dVectorFromList GLfloat $Lco] glEnableClientState GL_VERTEX_ARRAY glEnableClientState GL_COLOR_ARRAY glEnableClientState GL_NORMAL_ARRAY glVertexPointer 3 GL_FLOAT 0 $Vec glColorPointer 4 GL_FLOAT 0 $Col glNormalPointer GL_FLOAT 0 $Nml glDrawArrays GL_TRIANGLES 0 [expr {[llength $Lv]/3}] glDisableClientState GL_VERTEX_ARRAY glDisableClientState GL_COLOR_ARRAY glDisableClientState GL_NORMAL_ARRAY glLightModeli GL_LIGHT_MODEL_COLOR_CONTROL $::GL_SINGLE_COLOR glDisable GL_TEXTURE_GEN_S glDisable GL_TEXTURE_GEN_T glDisable GL_TEXTURE_2D glDisable GL_BLEND glDisable GL_CULL_FACE glLightModelfv GL_LIGHT_MODEL_TWO_SIDE 1.0 set doneSurfBall [expr {[llength $Lv]/3}] set xm [lindex [lsort -real $Lx] 0] set xx [lindex [lsort -real $Lx] end] set ym [lindex [lsort -real $Ly] 0] set yx [lindex [lsort -real $Ly] end] set zm [lindex [lsort -real $Lz] 0] set zx [lindex [lsort -real $Lz] end] # Calcul exact de Rad # Rad = dist entre points extremes/2 + # 2 * rayon boules set rad 10. set Rad [expr {sqrt(($xx-$xm)**2 + ($yx-$ym)**2 + ($zx-$zm)**2)/2. + 2.*$rad}] set pgl(xCen) [expr {($xx+$xm)/2.}] set pgl(yCen) [expr {($yx+$ym)/2.}] set pgl(zCen) [expr {($zx+$zm)/2.}] #set pgl(xCen) 0.0 #set pgl(yCen) 0.0 #set pgl(zCen) 0.0 # backclip = z near (z neg) set pgl(backclip) [expr {$pgl(zCen)-1.1*$Rad }] # frontclip = z far set pgl(frontclip) [expr {$pgl(zCen)+1.1*$Rad}] # backclip = z near (z neg) #set pgl(backclip) [expr { -1.1 * $Rad}] # frontclip = zfar #set pgl(frontclip) [expr { 1.1 * $Rad}] # backclip = z near (z neg) set pgl(backclip) [expr { -2.1 * $Rad}] # frontclip = zfar set pgl(frontclip) 0.0 # backclip = z near (z neg) set pgl(backclip) [expr { -0.1 * $Rad}] # frontclip = zfar set pgl(frontclip) [expr { 2.1 * $Rad}] set pgl(eyeX) 0.0 set pgl(eyeY) 0.0 set pgl(eyeZ) [expr {$pgl(frontclip)-1.}] puts "" puts [format "max %6.2f %6.2f %6.2f" $xx $yx $zx] puts [format "min %6.2f %6.2f %6.2f" $xm $ym $zm] puts "" puts [format "centre %6.2f %6.2f %6.2f" $pgl(xCen) $pgl(yCen) $pgl(zCen)] puts [format "tranla %6.2f %6.2f %6.2f" $pgl(xTra) $pgl(yTra) $pgl(zTra)] puts [format "eye %6.2f %6.2f %6.2f" $pgl(eyeX) $pgl(eyeY) $pgl(eyeZ)] puts "" puts "Rad $Rad" puts "frontclip $pgl(frontclip)" puts "backclip $pgl(backclip)" puts "" glEndList update } else { glCallList $listSurfBall #glDrawArrays GL_TRIANGLES 0 $doneSurfBall } return } proc SurfaceTriangle {a b c} { set p [expr {$a+$b+$c}] set 16s2 [expr {$p*($p-2.*$a)*($p-2.*$b)*($p-2.*$c)}] if {$16s2 <= 0.} { return 0. } else { return [expr {sqrt($16s2/16.)}] } } proc SurveillancePubmed {{GetWhat ""} {AllFields ""}} { package require sqlite3 package require tdom regsub -nocase GetNews $GetWhat "GetNew" GetWhat regsub -nocase GetResults $GetWhat "GetResult" GetWhat if {$AllFields==""} { set AllFields "AllFields" } set AllFields [string equal -nocase $AllFields "AllFields"] set WebServer "lbgi.fr" if {[info exists ::env] && [info exists ::env(HOST)]} { set Host [set ::env(HOST)] if {$Host=="bob"} { set WebServer "misynpat.org" } else { set WebServer "lbgi.fr" } } set Fichier "[MiSynPatDir]/misynpat.sql" set db "root" set url "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?" # set Query {( ("aars2"[Abstract] OR "ears2"[Abstract] OR "fars2"[Abstract] OR "hars2"[Abstract] OR "vars2"[Abstract] OR "yars2"[Abstract] OR "cars2"[Abstract] OR "dars2"[Abstract] OR "iars2"[Abstract] OR "lars2"[Abstract] OR "mars2"[Abstract] OR "nars2"[Abstract] OR "rars2"[Abstract] OR "sars2"[Abstract] OR "tars2"[Abstract] OR "wars2"[Abstract] OR "pars2"[Abstract] OR "gars"[Abstract] OR "gars2"[Abstract] OR "kars"[Abstract] OR "kars2"[Abstract] OR "mtARS"[Abstract]) OR "mt-AspRs"[Abstract]) AND ("2007"[Date - Publication] : "3000"[Date - Publication])) AND ( "mutation"[Title/Abstract] OR "patient"[Title/Abstract] OR "mutations"[Title/Abstract] OR "patients"[Title/Abstract] OR "lbsl"[Title/Abstract] OR "leukoencephalopathy"[Title/Abstract] OR "subject"[Abstract] OR "subjects"[Abstract] OR "disease"[Abstract] OR "diseases"[Abstract] OR "disorder"[Abstract] OR "disorders"[Abstract]) AND "English"[Language]} if {0} { set QueryOld {("aars2"[Abstract] OR "ears2"[Abstract] OR "fars2"[Abstract] OR "hars2"[Abstract] OR "vars2"[Abstract] OR "yars2"[Abstract] OR "cars2"[Abstract] OR "dars2"[Abstract] OR "iars2"[Abstract] OR "lars2"[Abstract] OR "mars2"[Abstract] OR "nars2"[Abstract] OR "rars2"[Abstract] OR "sars2"[Abstract] OR "tars2"[Abstract] OR "wars2"[Abstract] OR "pars2"[Abstract] OR "gars2"[Abstract] OR "kars2"[Abstract] OR "mtARS"[Abstract]) AND ("2007"[Date - Publication] : "3000"[Date - Publication]) AND ("mutation"[Title/Abstract] OR "patient"[Title/Abstract] OR "mutations"[Title/Abstract] OR "patients"[Title/Abstract] OR "lbsl"[Title/Abstract] OR "leukoencephalopathy"[Title/Abstract] OR "subject"[Abstract] OR "subjects"[Abstract] OR "disease"[Abstract] OR "diseases"[Abstract] OR "disorder"[Abstract] OR "disorders"[Abstract]) AND "English"[Language]} # Espionne [string repeat "\n" 4] # Espionne $QueryOld set QueryOld [list "[string map {"\"" "\\\""} $QueryOld]"] set LsearchOld [eSearchREST pubmed $QueryOld] } if {$AllFields} { set FieldSystemes "" set FieldNecessaires "" } else { set FieldSystemes "\[TIAB\]" set FieldNecessaires "\[TIAB\]" } set DateRange {"2007"[Date - Publication] : "3000"[Date - Publication]} set LesSystemes [list aars2 cars2 dars2 ears2 fars2 gars gars2 hars2 iars2 kars kars2 lars2 mars2 nars2 pars2 rars2 sars2 tars2 vars2 wars2 yars2] lappend LesSystemes mtARS set LaQuerySystemes {} foreach Term $LesSystemes { if {($Term=="gars" || $Term=="kars")} { lappend LaQuerySystemes "\"$Term\"\[TIAB\]" } else { lappend LaQuerySystemes "\"$Term\"$FieldSystemes" } } set QuerySystemes [join $LaQuerySystemes " OR "] set LesMotsNecessaires [list mutation mutations patient patients subject subjects disease diseases disorder disorders lbsl leukoencephalopathy] foreach Term $LesMotsNecessaires { lappend LaQueryMotsNecessaires "\"$Term\"$FieldNecessaires" } set QueryMotsNecessaires [join $LaQueryMotsNecessaires " OR "] set Langue {"English"[Language]} set QueryMitoSynMut "mitochondrial\[TIAB\] and aminoacyl-tRNA\[TIAB\] and synthetase\[TIAB\] and mutation*\[TIAB\]" set Query "($DateRange) AND (($QueryMitoSynMut) OR (($QuerySystemes) AND ($QueryMotsNecessaires) NOT Kainate\[TIAB\] NOT Groningen\[TIAB\])) AND $Langue" # Espionne $Query if {$GetWhat=="GetQuery"} { return $Query } set Query [list "[string map {"\"" "\\\""} $Query]"] set Lsearch [eSearchREST pubmed $Query] #return $Lsearch set LesKarsGarsMalTopes {} foreach Ligne [LesLignesDuFichier "/home/ripp/msp/KarsTurkey.txt"] { scan $Ligne "%d" Pmid lappend LesKarsGarsMalTopes $Pmid } set Lsearch [ListsComplement $Lsearch $LesKarsGarsMalTopes] if {$GetWhat=="GetResult"} { return $Lsearch } sqlite3 $db $Fichier set Lold [$db eval {select pmid from biblio}] set Lnew [ListsComplement $Lsearch $Lold] if {$GetWhat=="GetNew"} { return $Lnew } foreach Pmid $Lsearch { set Title [InfoPubmed $Lsearch $Pmid Title] set Abstract [InfoPubmed $Lsearch $Pmid Abstract] set PubYear [InfoPubmed $Lsearch $Pmid PubYear] set PubMonth [InfoPubmed $Lsearch $Pmid PubMonth] set LesHitSysteme {} foreach Term $LesSystemes { if {[regexp -nocase "\[^a-z\]$Term\[^a-z\]" " $Title "]} { lappend LesHitSysteme $Term } if {[regexp -nocase "\[^a-z\]$Term\[^a-z\]" " $Abstract "]} { lappend LesHitSysteme $Term } } set LesHitSysteme [lsort -unique $LesHitSysteme] set LesHitNecessaire {} foreach Term $LesMotsNecessaires { if {[regexp -nocase "\[^a-z\]$Term\[^a-z\]" " $Title "] } { lappend LesHitNecessaire $Term } if {[regexp -nocase "\[^a-z\]$Term\[^a-z\]" " $Abstract "]} { lappend LesHitNecessaire $Term } } set LesHitNecessaire [lsort -unique $LesHitNecessaire] # Espionne # Espionne "$Pmid $PubYear $PubMonth $Title" # Espionne "I found $LesHitSysteme $LesHitNecessaire" set HitsTrouves($Pmid) [join [concat $LesHitSysteme $LesHitNecessaire]] } set adresse "m.sissler@ibmc-cnrs.unistra.fr,luc.moulinier@unistra.fr,raymond.ripp@unistra.fr" set sender "MiSynPat@$WebServer" if {$Lnew != {}} { set N [llength $Lnew] set sujet ">> $N New article" set corps "Hello !\n\n -> $N publication appears in the bibliographic system : Go to \nhttp://$WebServer/misynpat/BibliographyUpdate.rvt\n\n\nHave a good reading !" foreach new $Lnew { set Hits "" if {[info exists HitsTrouves($new)]} { set Hits $HitsTrouves($new) } Espionne "new PMID : $new $Hits" $db eval {insert into biblio values (NULL,$new,-1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,$Hits)} } # Record new articles in db AjouteEntreesBiblio $db } else { set sujet "From $WebServer : Nothing new in MiSynPat Bibliography." set corps "Hello !\n\nFrom $WebServer : Nothing new in MiSynPat Bibliography.\n\nSee you tomorrow !" } # check for unseen articles set NbUnseen [$db eval {select count(pk_biblio) from biblio where accepted = -1}] $db close if {$NbUnseen} { append sujet " $NbUnseen unseen articles !" set Message "BEWARE ! There are $NbUnseen articles that have not been processed !" append corps "\n$Message\n" puts $Message } send_simple_message $adresse localhost $sujet $corps $sender exit } proc SwFromProtIDString10 {ProtIDString TaxId} { CanalSqlString set LesSw [SqlExec "select protein_name from items.proteins_names where protein_id = $ProtIDString and (source = 'BLAST_UniProt_AC' or source = 'Ensembl_UniProt_AC') and species_id = $TaxId;" "GetList"] set LesSw [ListeSansDoublon $LesSw] LConcat TousLesSw $LesSw CanalSqlDisconnect return $TousLesSw } proc SwFromProtIDString9 {ProtIDString TaxId} { CanalSqlString set LeSwRepresentant [SqlExec "select protein_name from items.proteins_names where protein_id = $ProtIDString and linkout = 'UniProt' and species_id = $TaxId;" "GetList"] set LeSwRepresentant [ListeSansDoublon $LeSwRepresentant] LConcat TousLesSw $LeSwRepresentant set LesSw [SqlExec "select protein_name from items.proteins_names where protein_id = $ProtIDString and (source = 'BLAST_UniProt_AC' or source = 'Ensembl_UniProt_AC') and linkout is null and species_id = $TaxId;" "GetList"] set LesSw [ListeSansDoublon $LesSw] LConcat TousLesSw $LesSw CanalSqlDisconnect return $TousLesSw } proc SwapNode {AId} { global Abr set t [set Abr(Arbre,$AId)] set PAD [set Abr($AId,PAD)] set id [$PAD find withtag current] set Ln [$t attr IdRot] set i [lsearch $Ln $id] set n [lindex $Ln [expr {$i - 1}]] $t set $n ordre [expr {![$t get $n ordre]}] # $t swap {*}[$t children $n] if {[set Abr($AId,TypeTree)] ne "dendrogram"} { Tree2Coordonnees $AId } else { TransformationCartesienne $AId root } AjusteCoordonneesInit $AId # ReAjusteCoordonnees $AId OnReDessineArbre $AId ModeReroot $AId ModeSwap $AId return } proc SwapRoot {T N {Path ""}} { #The node N becomes the new root" JeMeSignale puts "SwapRoot [ValueOfTree $T] [ValueOfTree $N] $Path" if {$T==$N} { return $T } if {$Path==""} { set Path [PathToNode $T $N] } set Bonne [lindex $Path 1] set Haut [CutBranch $T $Bonne] DataSet linksappend $Bonne $Haut set Swap [SwapRoot $Bonne $N [lrange $Path 1 end]] return $Swap } proc SwitchEnX {Liste PivotX} { Wup "Returns the X-symetrical list" foreach {X Y} $Liste { lappend Sortie [expr $PivotX+$PivotX-$X] lappend Sortie $Y } return $Sortie } proc SwitchWindows {sens} { #return set Stack [wm stackorder .] if {$sens eq "up"} { set w [lindex $Stack 0] wm attributes $w -topmost 1 } else { set uw [lindex $Stack end] set w [lindex $Stack end-1] lower $uw } update idletasks return } proc Synonyms {Nom} { return [SynonymsOfGscopeId $Nom] } proc SynonymsFromSameOrganism {G {Programme ""}} { while {$Programme==""} { set OS [NotreOS] if {$OS=="Homo sapiens"} { set Programme "HumanSynonyms" ; break } if {$OS=="Mus musculus"} { set Programme "MouseSynonyms" ; break } if {[PourWscope]} { return "" } set Programme [ChoixParmi [list "MouseSynonyms" "HumanSynonyms"]] if {$Programme==""} { return "" } } if {$G=="NameOfProgram"} { return $Programme } return [$Programme $G] } proc SynonymsOfGscopeId {Nom} { set GN [ValiGN $Nom] set Alias [Alias $Nom] if {$GN==""} { set GN $Alias } if {$GN==""} { return {} } set FromGscope [list $GN $Alias] set FromSameOrga [SynonymsFromSameOrganism $GN] set LesSynonymes [concat $FromGscope $FromSameOrga] set LesSynonymes [ListeSansDoublon $LesSynonymes "" "NoEmpty"] return $LesSynonymes } proc SynonymsPourTous {{Liste ""} {Quoi ""} {GscopeSyn ""}} { set GscopeSyn [string equal -nocase $GscopeSyn "GscopeSyn"] set SynGscope [expr ! $GscopeSyn] if {$Quoi==""} { set Quoi "GetList" } if {$Liste==""} { set Liste [ListeDesPABs] } if {$GscopeSyn} { set LesGscopeSyn {} foreach Nom $Liste { lappend LesGscopeSyn "$Nom [join [SynonymsOfGscopeId $Nom] " "]" } if {$Quoi=="GetList"} { return $LesGscopeSyn } set GscopeSyn [join $LesGscopeSyn "\n"] if {[PourWscope]} { return [Html_DuTexteTelQuel $GscopeSyn] } if {$Quoi=="GetTxt"} { return $GscopeSyn } if {$Quoi=="Show"} { return [AfficheVariable $GscopeSyn] } return $LesGscopeSyn } if {$SynGscope} { set LesSynGscope {} foreach Synonym [GscopeSynonyms ListOf Synonyms] { lappend LesSynGscope "[format %-20s $Synonym] [join [GscopeSynonyms $Synonym GscopeIds] " "]" } if {$Quoi=="GetList"} { return $LesSynGscope } set SynGscope [join $LesSynGscope "\n"] if {[PourWscope]} { return [Html_DuTexteTelQuel $SynGscope] } if {$Quoi=="GetTxt"} { return $SynGscope } if {$Quoi=="Show"} { return [AfficheVariable $SynGscope] } return $LesSynGscope } } proc T33_invT33 {aTinv aT} { upvar $aTinv Tinv upvar $aT T set Det [expr { $T(1,1) * ($T(2,2)*$T(3,3)-$T(3,2)*$T(2,3)) - $T(1,2) * ($T(2,1)*$T(3,3)-$T(3,1)*$T(2,3)) + $T(1,3) * ($T(2,1)*$T(3,2)-$T(3,1)*$T(2,2))}] if {abs($Det)<1.e-30} { T_M Ttmp [M_unit 3 0.0] } else { set Ttmp(1,1) [expr {($T(2,2)*$T(3,3)-$T(3,2)*$T(2,3))/$Det}] set Ttmp(1,2) [expr {($T(3,2)*$T(1,3)-$T(1,2)*$T(3,3))/$Det}] set Ttmp(1,3) [expr {($T(1,2)*$T(2,3)-$T(2,2)*$T(1,3))/$Det}] set Ttmp(2,1) [expr {($T(2,3)*$T(3,1)-$T(3,3)*$T(2,1))/$Det}] set Ttmp(2,2) [expr {($T(3,3)*$T(1,1)-$T(1,3)*$T(3,1))/$Det}] set Ttmp(2,3) [expr {($T(1,3)*$T(2,1)-$T(2,3)*$T(1,1))/$Det}] set Ttmp(3,1) [expr {($T(2,1)*$T(3,2)-$T(3,1)*$T(2,2))/$Det}] set Ttmp(3,2) [expr {($T(3,1)*$T(1,2)-$T(1,1)*$T(3,2))/$Det}] set Ttmp(3,3) [expr {($T(1,1)*$T(2,2)-$T(2,1)*$T(1,2))/$Det}] } array set Tinv [array get Ttmp] return $aTinv } proc TAC {aVar} { upvar $aVar V if {$V eq "salut"} { set V "ca gazouille" } elseif {$V eq "sale uc"} { set V "gros con !" } return } proc TAdd {pre} { global TabSF TToDo GroupeDeLaSequence ListePDB LNOrdali Sequences LSOrdali TInfos {*}[info globals "TD*"] puts "\nadding sequenes ..." # Add lappend TToDo(add) Dmi_Gall.gall XP_422251 Dmi_Dros.mela NP_001260520 set Lf [set TabSF(Dmi_Homo.sapi,PFAM-A)] set s [set Sequences(Dmi_Homo.sapi)] foreach f $Lf { DecortiqueUneFeature $f iStart iStop color score note csys puts "$iStart [DonnePosGS Dmi_Homo.sapi $iStart]" puts "$iStop [DonnePosGS Dmi_Homo.sapi $iStop]" puts [string range $s $iStart $iStop] } set Lsqn [list] set Lacc [list] foreach {sqn acc} $TToDo(add) { set uni [Convert2UniProtAcc $acc] puts " $sqn $acc $uni" lappend Lsqn $sqn lappend Lacc $uni } array set TInfos [InfosFromUniProt $Lacc] array set TInfos [InfosFromRefSeq $Lacc] set Lseq [list] set LAccPris [list] set LSqnPris [list] foreach k $Lacc { if {[info exists TInfos($k,Sequence)]} { lappend Lseq $TInfos($k,Sequence) lappend LAccPris $k set ix [lsearch $Lacc $k] lappend LSqnPris [lindex $Lsqn $ix] } } # access not found in uniprot/refseq if {$Lacc != $LAccPris} { puts "Lacc $Lacc" puts "Lpris $LAccPris" puts "manque [lor $Lacc $LAccPris]" } EcritLeTfa "./TFAs/${pre}_newseq.tfa" $LAccPris $Lseq cd ./tmp CreeLeTfa ${pre}_tmp.tfa # Add seq bidon set n0 [lindex [array names ::Sequences] 0] set sbid $::Sequences($n0) set sbid [string map {"." X} $sbid] set fo [open ${pre}_tmp.tfa a+] puts $fo ">bidon" puts $fo "$sbid" close $fo if {[catch {exec /usr/bin/mafft --add ../TFAs/${pre}_newseq.tfa ${pre}_tmp.tfa >& log > ${pre}_all.tfa} Msg]} { puts "\n>>>>>>>>>>>>>>>>>>>>>>>>" puts "mafft error !" puts "mafft --add ../TFAs/${pre}_newseq.tfa ${pre}_tmp.tfa > ${pre}_all.tfa\n" puts "Msg:\n$Msg" } if {! [file exists ${pre}_all.tfa]} { cd .. exit } DecortiqueUnTFA ${pre}_all.tfa Lntmp Stmp puts $Stmp(bidon) RemapFeatures $Stmp(bidon) foreach n $Lntmp { if {$n eq ""} {continue} if {$n eq "bidon"} {continue} # remplace la sequence dans tous les cas. # on peut avoir inserer des gaps dans l'alignement # de depart. set s [BonneSequencePourAlignement $Stmp($n)] set Sequences($n) $s if {$n in $LNOrdali} { # remplace. set ix [lsearch $LNOrdali $n] lset LSOrdali $ix $s continue } set acc $n set ix [lsearch $LAccPris $n] if {$ix == -1} {continue} set n [lindex $LSqnPris $ix] # il faut inserer la sequence dans le merdier lappend LNOrdali $n lappend LSOrdali $s set TDesSeqnames($n) $n set TDesAccess($n) $acc set TDesBId($n) $TInfos($acc,BId) set TDesPhylum($n) $TInfos($acc,Phylum) set TDesTaxId($n) $TInfos($acc,TaxId) set TDesDescriptifs($n) $TInfos($acc,Desc) set TDuLineage($n) $TInfos($acc,Lineage) set TDesOrganismes($n) $TInfos($acc,Organism) if {! [info exists GroupeDeLaSequence($n)]} { set GroupeDeLaSequence($n) "Group0" } } CalculePI CalculeMolecularWeight set Lf [set TabSF(Dmi_Homo.sapi,PFAM-A)] set s [set Sequences(Dmi_Homo.sapi)] foreach f $Lf { DecortiqueUneFeature $f iStart iStop color score note csys puts "$iStart [DonnePosGS Dmi_Homo.sapi $iStart]" puts "$iStop [DonnePosGS Dmi_Homo.sapi $iStop]" puts [string range $s $iStart $iStop] } cd ../ SauveLAlignement XML hopla.xml exit } proc TBA {PhyloTree RefSeq FileOUT} { ### TBA, "Threaded Blockset Aligner" execution ### # RefSeq == Reference sequence used to project the multiple alignment # The sequences to align must have the same name as the organisms in the phylogenetic tree ############################################## ### TBA is composed of three steps: ### ### 1- Pair-wise alignments ### ### --> all_bz program ### ### 2- Creating the multiple alignment ### ### --> tba program ### ### 3- "Projecting" the multiple alignment ### ### --> maf_project ### ############################################## # 1- all_bz program # All_bz $PhyloTree $FileOUT.all_bz.log # 2- tba program # set MafFile $FileOUT.tba.maf Tba $PhyloTree $MafFile $FileOUT.tba.log # 3- maf_project program # #set Maf_projectedFile $FileOUT.tba.maf_project #Maf_project $MafFile $RefSeq $Maf_projectedFile Maf_project $MafFile $RefSeq $FileOUT # ==> Maf_projectFile = FileOUT = TBA multiple alignment ready for analysis return $FileOUT } proc TBS {} { puts "[DonneDateEtHeure]" set Ltax [LesLignesDuFichier show.id] set Ljobs [list] foreach org $Ltax { lappend Ljobs [list -p blastp -d nr -orga $org -expect 0.00001 -query p21889 -nlist 10 -f 1] } array set rep [ThreadedBlastService $Ljobs] parray rep exit } proc TBS2 {} { puts "[DonneDateEtHeure]" set Ltax [LesLignesDuFichier show.id] set Ljobs [list] foreach org $Ltax { set Lres [BlastService -p blastp -d nr -orga $org -expect 0.00001 -query p21889 -nlist 10 -f 1] } exit } proc TBlastNDuConsacreDeLaPreditePourTous {{Banque est}} { global RepertoireDuGenome set NomDeLaBanque "/catalog/blast/$Banque" set FichierLog "$RepertoireDuGenome/fiches/consacre_versus_predite" set Rep "$RepertoireDuGenome/tblastn$Banque" if { ! [file exists $Rep]} { File mkdir $Rep } set Keep 1 if {[llength [glob -nocomplain $Rep/*]]>0} { if { ! [OuiOuNon "Some TBlastN against $Banque have already be made.\nDo I keep them ?"]} { set Keep 0 } else { if {[file exists $FichierLog]} { File copy -force $FichierLog "${FichierLog}.copie" foreach Ligne [LesLignesDuFichier $FichierLog] { scan $Ligne "%s" NomLu set TexteLog($NomLu) $Ligne } } } File delete -force $FichierLog } foreach Nom [ListeDesPABs] { Espionne "Je vais lancer TBlastN $NomDeLaBanque pour $Nom" set FichierBlast "$Rep/$Nom" if {$Keep && [file exists $FichierBlast]} { if {[info exists TexteLog($Nom)]} { AppendAuFichier $FichierLog [set TexteLog($Nom)] } continue } set FichierPredite "$RepertoireDuGenome/genscanpredictions/$Nom" if { ! [file exists $FichierPredite]} { AppendAuFichier $FichierLog "$Nom no GenScan prediction available" continue } set TfaP [ContenuDuFichier $FichierPredite] set SeqP [QueLaSequenceDuTexteTFA $TfaP] set LongP [string length $SeqP] if {$LongP < 10} { AppendAuFichier $FichierLog "$Nom less than 10 aa in GenScan prediction" continue } set Consacre [lindex [MeilleursCopains $Nom] 0] if {[regexp "^No " $Consacre]} { continue } scan $Consacre "%s %s" BID Access set LesLignesEMBL [LaSequenceDesBanques $BID $Access AccessOK "OnVeutEMBL"] if {$LesLignesEMBL=={}} { AppendAuFichier $FichierLog "$Nom $BID $Access not found" continue } set TfaC [SequenceFormatTFA_l $LesLignesEMBL $AccessOK "embl"] set SeqC [QueLaSequenceDuTexteTFA $TfaC] set LongC [string length $SeqC] if {$LongC < 10} { AppendAuFichier $FichierLog "$Nom less than 10 aa in best blastp hit" continue } set CsP [expr (1.0*$LongC)/$LongP] if { 0.7 < $CsP && $CsP < 1.3 } { set FichierTFA [Sauve $TfaC dans "[TmpFile].tfa"] AppendAuFichier $FichierLog "$Nom" } elseif { $LongC < $LongP } { set FichierTFA [Sauve $TfaC dans "[TmpFile].tfa"] AppendAuFichier $FichierLog "$Nom may be missing exons in predicted protein" } else { set FichierTFA $FichierPredite AppendAuFichier $FichierLog "$Nom may be surnumerous exons or merged proteins in predicted protein" } set CommandeTBlastN "blastall -p tblastn -i $FichierTFA -o ${FichierBlast}.encours -d $NomDeLaBanque -v 125 -K 0 -b 125 -e 10.0 -F T " eval exec $CommandeTBlastN if {[file exists ${FichierBlast}.encours]} { file rename -force ${FichierBlast}.encours $FichierBlast } } } proc TBlastNDuFichier {Fichier {Banque genomes} {Filtre 1} {FichierBlast ""} {EditCommand 0}} { global RepertoireDuGenome AttendreTantQueExiste "/gcg/Update/.updtgcgnew_running" if {$Filtre} {set Filtre "T"} else {set Filtre "F"} if {[regexp "/" $Banque]} { set NomDeLaBanque "$Banque" } else { set NomDeLaBanque "/blast/$Banque" } set Repertoire [RepertoireDeTravail] set CommandeTBlastN "eval exec blastall -p tblastn -i \$FichierTFA -o \$FichierBlast -d $NomDeLaBanque -v 500 -K 0 -b 500 -e 10.0 -F $Filtre" Wup "To find the pseudo-gene use ungapped -g F" if {0 && [regexp -nocase "human" $NomDeLaBanque]} { append CommandeTBlastN " -g F" } if {$EditCommand && [OuiOuNon "Do You want to edit the TBlastN command ?" 0]} { set CommandeTBlastN [Entre $CommandeTBlastN] } if { ! [file exists "$Repertoire"] && [OuiOuNon "Do I create $Repertoire"]} { File mkdir $Repertoire } set FichierTFA "$Fichier" set FileName [file tail $Fichier] if {$FichierBlast == ""} {set FichierBlast "$Repertoire/$FileName.tblastn"} if { ! [file exists $FichierTFA]} { Warne "$FichierTFA doesn't exist." exit } if {[catch {eval $CommandeTBlastN} Message]} { #Warne "Error in $CommandeTBlastN command:\n>>>>$Message" } #eval $CommandeTBlastN return $FichierBlast } proc TBlastNDuFichierPourTous {Rep {Banque genomes} {Filtre 1} {RepOut ""} {EditCommand 0}} { if {$RepOut != "" && ![file exists $RepOut]} {Espionne "$RepOut does not exists";return} foreach File [glob -nocomplain -directory $Rep "*"] { if {![EstCeQueLeFichierTFAEstConvenable $File] || [EstCeDeLADN $File]} {continue} set NameF [file tail $File] if {$RepOut != ""} { set FileOut "$RepOut/$NameF" } else { set FileOut "$File.tblastn" } Espionne "$File -> TBLASTN against $Banque in $FileOut" TBlastNDuFichier $File $Banque $Filtre $FileOut $EditCommand } return } proc TBlastNPourTous {{Banque ""} {Liste ""}} { global RepertoireDuGenome if {$Banque==""} { #rR 2016/01/24 j'ai introduit LocaliseTBlastNDatabase ... set Banque "tblastndatabase" set NomDeLaBanque [LocaliseTBlastNDataBase] } else { set NomDeLaBanque "" if {$Banque == "human"} { set NomDeLaBanque "/catalog/blast/human" } if {$Banque == "completegenomes"} { set NomDeLaBanque "$RepertoireDuGenome/banques/completegenomes" } if {$Banque == "myself"} { set NomDeLaBanque "$RepertoireDuGenome/banques/MSoverlap"} if {[regexp "/" $Banque]} { set NomDeLaBanque $Banque } #rR je ne suis pas sûr que ce qui suit est réellement pris en compte car j'ai rajouté LocaliseTBlastNDataBase dans la commande !!! while { ! [file exists "$NomDeLaBanque"] && ! [file exists "$NomDeLaBanque.nal"] && ! [file exists "$NomDeLaBanque.nhr"] } { if {$NomDeLaBanque!="" && [OuiOuNon "Do You want to create the tblastn database $NomDeLaBanque"]} { if {$Banque == "genomes"} { CreationDuNalDesGenomesComplets "PleaseAsk" "PleaseAsk" "PleaseAsk" } continue } else { if {[OuiOuNon "Can You tell me where to find the blast database $Banque ?"]} { set NomDeLaBanque [Entre "/genomics/link"] continue } if {[OuiOuNon "Do I cancel ?"]} { return } if {[OuiOuNon "Do I exit ?"]} { exit } } } } set Repertoire "$RepertoireDuGenome/tblastn_[file tail $NomDeLaBanque]" #rR 2016/02/11 j'ai introduit la possiblilité d'utiliser BlastParameters is dans le rep tblastn set p "tblastn" set v 100 set b $v set K 0 set e 10.0 set F "T" set d $NomDeLaBanque set LesObliges " p i o d v b K e F " set MoreOptions "" foreach {Key Value} [BlastParameters $Repertoire] { regsub -- {^\-+} $Key "" Key if {[regexp " $Key " $LesObliges]} { set $Key $Value } else { append MoreOptions " -$Key $Value" } } set CommandeTBlastN "blastall -p $p -i \$FichierTFA -o \$FichierBlast.encours -d $d -v $v -b $b -K $K -e $e -F $F" Wup "To find the pseudo-gene use ungapped -g F" if {0 && [regexp -nocase "human" $NomDeLaBanque]} { append CommandeTBlastN " -g F" } if {[OuiOuNon "Do You want to edit the tBlastN command ?" 0]} { set CommandeTBlastN [Entre $CommandeTBlastN] if {$CommandeTBlastN==""} { return "" } } if { ! [file exists "$Repertoire"]} { file mkdir $Repertoire } set TestExistence 1 set GardeTout 0 if {$Liste==""} { set Liste [ListeDeBoites] } foreach Nom $Liste { if {[regexp "GLIMMER|TRNA|ARN" $Nom]} { continue } if {[Fantome $Nom]} { continue } if {[PasTouche $Nom]} { continue } set FichierTFA "$RepertoireDuGenome/prottfa/$Nom" set FichierBlast "$Repertoire/$Nom" if { ! [file exists $FichierTFA]} { Warne "$FichierTFA doesn't exist." FinPasTouche $Nom continue } if {$GardeTout && [file exists $FichierBlast] } { FinPasTouche $Nom continue } if { $TestExistence && [file exists $FichierBlast] } { if {[OuiOuNon "Some tblastn file already exist.\nDo I replace all of them ?" 0]} { set TestExistence 0 } else { if {[OuiOuNon "Do I keep them ?"]} { set GardeTout 1 } if {$GardeTout || [OuiOuNon "$FichierBlast exists.\nDo I keep it ?"]} { FinPasTouche $Nom continue } } } if {[catch {eval exec $CommandeTBlastN} Message]} { Warne "Error in CommandeTBlastN\n$Message" } if {[file exists "$FichierBlast.encours"]} { file rename -force "$FichierBlast.encours" $FichierBlast } Espionne $FichierBlast FinPasTouche $Nom } } proc TBlastXPourTous {{NomATraiter ""} {Banque ""}} { global RepertoireDuGenome if {$Banque==""} { set TBlastXDataBase "/catalog/blast/genembl" } else { if {[regexp "/" $Banque]} { set TBlastXDataBase $Banque } else { set TBlastXDataBase "/catalog/blast/$Banque" } } set RepFileMask "$RepertoireDuGenome/nucmask" set Queue [file tail $TBlastXDataBase] regsub {\.[^\.]+$} $Queue "" Queue set Repertoire "$RepertoireDuGenome/tblastx$Queue" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } if {$NomATraiter == ""} { set Liste [ListeDesPABs] } elseif {[llength $NomATraiter] > 1} { set Liste $NomATraiter } else { set Liste [list $NomATraiter] } set CommandeBlast "blastall -p tblastx -i \$FichierTFA -o \$FichierBlast.encours -d $TBlastXDataBase -v 50 -b 50 " if {[OuiOuNonMemo "Do You want to edit the Blast command ?" 0]} { set CommandeBlast [Entre $CommandeBlast] if {$CommandeBlast==""} { return "" } } set TestLongueurMinimale [OnTraiteDesCDNAs] set SeuilLongueur 9 foreach Nom $Liste { set FichierTFA "" foreach Rep {nucMaskAndReMask nucmask nuctfa} { set FichierTFA "$RepertoireDuGenome/$Rep/$Nom" if {[file exists $FichierTFA]} { break } } if { $FichierTFA=="" || ! [file exists $FichierTFA]} { Warne "$FichierTFA doesn't exist." continue } set FichierBlast "$Repertoire/$Nom" if {$TestLongueurMinimale} { set LeTFA [LesLignesDuFichier $FichierTFA] set Seq [join [lrange $LeTFA 1 end]] regsub -all -nocase "N" $Seq "" SeqSansN if {[string length $SeqSansN]<$SeuilLongueur} { continue } } if {[file exists $FichierBlast] } { continue } if {[PasTouche $Nom]} { continue } Espionne "Je vais lancer TBlastX de $FichierTFA" if {[catch {eval exec $CommandeBlast} Message]} { Espionne "Problem with $FichierBlast" Espionne $Message } if {[file exists "${FichierBlast}.encours"]} { file rename -force "${FichierBlast}.encours" $FichierBlast } else { Espionne "${FichierBlast}.encours doesn't exist ... bouhouhouhou !" } FinPasTouche $Nom } } proc TCNI {} { global RepertoireDuGenome set CNI [ConcordanceNumerotationDesIntergenes ] set LesMemes [lindex $CNI 1] set LesModifies [lindex $CNI 2] EspionneL $LesMemes Espionne "" EspionneL $LesModifies exit } proc TCPJ {} { set L {a b c d} set A {Arnaud Bob Claude Denis} set C {red blue yellow green} return [ChoixParmiJoli $L $C $A] } proc TDP {{Element ""}} { set PS [PeptideSort "[RepertoireDuGenome]/prottfa/PGS047"] Espionne $PS Espionne [DecortiquePeptideSort $PS $Element] exit } proc TFA2Header {TFA} { if {[file exists $TFA]} {set TFA [File2Text $TFA]} if {![regexp "^>" $TFA]} {return} set Header {} foreach Line [split $TFA "\n"] { if {![regexp "^>" $Line]} {continue} regsub "^>" $Line "" Line lappend Header [string trim $Line] } return [join $Header "\n"] } proc TFA2SEQ {TFA} { if {[file exists $TFA]} {set TFA [File2Text $TFA]} if {![regexp "^>" $TFA]} {return} set LaSeq {} foreach Line [split $TFA "\n"] { if {[regexp "^>" $Line]} {continue} lappend LaSeq $Line } return [join $LaSeq ""] } proc TFADNA2Prot {SeqTFA {Frame1ou2ou3 Frame1}} { set Entete [TFA2Header $SeqTFA] set Seq [DNA2Prot [TFA2SEQ $SeqTFA] $Frame1ou2ou3] return [SEQ2TFA $Seq $Entete] } proc TFADeLaBanqueBlast {Banque Access} { return [TfaDeLaBanqueBlast $Banque $Access] } proc TFADeLaBanqueBlast_AEffacer {Banque Access} { set Banque [string tolower $Banque] if {[catch {set TFADeLaBanqueBlast [exec [ProgPathway fastacmd] -d $Banque -s $Access 2> /dev/null]} Message]} {return} return $TFADeLaBanqueBlast } proc TFADeLaProteineChoisie {Nom {Rang 1}} { set RepProtTFA "[RepertoireDuGenome]/prottfa" if {![file exists $RepProtTFA]} {File mkdir $RepProtTFA} set FichierProtTFA "$RepProtTFA/$Nom" set FichierAccDesProtEtDesmRNAsChoisis "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" set LesProteines [InterrogeProtAndmRNA $Nom Rang $Rang LesProteines] set LesmRNAs [InterrogeProtAndmRNA $Nom Rang $Rang LesmRNAs ] if {$LesProteines == "" && $LesmRNAs == ""} { AppendAuFichier $FichierAccDesProtEtDesmRNAsChoisis "$Nom\tNoProtein\tNomRNA\tNoOrganism\tNoSeq\tNoSeq" return } set Organism [InterrogeProtAndmRNA $Nom Rang $Rang Organism ] set Type [InterrogeProtAndmRNA $Nom Rang $Rang Type ] set LesWarning [InterrogeProtAndmRNA $Nom Rang $Rang LesWarning ] set AccessmRNA [lindex $LesmRNAs 0] set AccessProt [lindex $LesProteines 0] set SeqProt "" if {[string equal -nocase $Type "mRNA"]} { if {$LesProteines != ""} { set Entete "$Nom PROTEIN $AccessProt from mRNA $AccessmRNA from $Organism" set SeqProt [SequenceDeLAccess $AccessProt protein] } else { set AccessProt "NoProtein" set Entete "$Nom PROTEIN $AccessProt from $AccessmRNA from $Organism" set SeqProt [SeqProtDumRNA_PageInfo [PageInfo $AccessmRNA genbankfull]] } } elseif {[string equal -nocase $Type "PROTEIN"]} { set Entete "$Nom PROTEIN $AccessProt from $Organism" set SeqProt [SequenceDeLAccess $AccessProt protein] if {$LesmRNAs == ""} {set AccessmRNA "NomRNA"} } if {$SeqProt == ""} { AppendAuFichier $FichierAccDesProtEtDesmRNAsChoisis "$Nom\t$AccessProt\t$AccessmRNA\t$Organism\tSeqNotFound\tNoSeq" return } set Warning "" if {$LesWarning != ""} {set Warning [join $LesWarning " "];append Entete " $Warning"} AppendAuFichier $FichierAccDesProtEtDesmRNAsChoisis "$Nom\t$AccessProt\t$AccessmRNA\t$Organism\tSeqOK\t$Warning" set SeqTFA [SequenceFormatTFA $SeqProt $Entete] Sauve $SeqTFA dans $FichierProtTFA return $SeqTFA } proc TFADeLaProteineDuContig {Nom {IdMin 0.8}} { set RepProtTFA "[RepertoireDuGenome]/prottfa" if {![file exists $RepProtTFA]} {File mkdir $RepProtTFA} set FichierProtTFA "$RepProtTFA/$Nom" set FichierAccDesProtEtDesContigsChoisis "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesContigsChoisis" InterrogeContigAndProt unset set Prot [InterrogeContigAndProt $Nom Protein BanqueId] if {$Prot == ""} {return} set Contig [InterrogeContigAndProt $Nom Contig Access] set IdProt [InterrogeContigAndProt $Nom Protein Identity] if {$IdProt < $IdMin} {return} set OrgaContig [InterrogeContigAndProt $Nom Contig Organisme] set OrgaProt [InterrogeContigAndProt $Nom Protein Organisme] set IdProt [InterrogeContigAndProt $Nom Protein Identity] set Identity [expr round($IdProt * 100)] set Entete "$Nom PROTEIN $Prot from $OrgaProt from CONTIG $Contig from $OrgaContig ${Identity}%" #Espionne $Entete set Warning "" AppendAuFichier $FichierAccDesProtEtDesContigsChoisis "$Nom\t$Prot\t$Contig\t$OrgaProt\tSeqOK\t$Warning" if {1} { set Def [PageInfo $Prot protein "des"] set SeqProt [SequenceDeLAccess $Prot protein] set SeqTFA [SequenceFormatTFA $SeqProt $Entete] Sauve $SeqTFA dans $FichierProtTFA return $SeqTFA } } proc TFADeLaProteineOuDumRNADeLOrganisme {Nom {mRNAouProtein mRNA} {Organism "Homo sapiens"} {IdMin 0.8} {FileOut ""}} { set FileBPM "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" if {![file exists $FileBPM]} {return} set SeqTFA "" set F [open $FileBPM] while {[gets $F Ligne]>=0} { set LaLigne [split $Ligne "\t"] if {[lindex $LaLigne 0] != $Nom } {continue} if {[lindex $LaLigne 1] != $Organism } {continue} if {[lindex $LaLigne 2] != $mRNAouProtein} {continue} set Access [lindex $LaLigne 3] set Id [lindex $LaLigne 5] if {$mRNAouProtein == "mRNA"} { set SeqTFA [PageInfo $Access "genbankfull" seq] } else { set SeqTFA [PageInfo $Access "protein" seq] } if {$SeqTFA == ""} {return} if {$Id < $IdMin} {set Warning " WARNING the percent of identity with the query protein is $Id (< $IdMin)"} else {set Warning ""} set SeqTFA [SequenceFormatTFA [QueLaSequenceDuTexteTFA $SeqTFA] "$Nom $mRNAouProtein $Access from ${Organism}$Warning"] if {$FileOut != ""} {Sauve $SeqTFA dans $FileOut} break } close $F return $SeqTFA } proc TFADeLaRegionPromotrice {Nom FichierCarteExonique {TailleFenetreMin 10000} {TailleFenetreMax 10000}} { if {![file exists $FichierCarteExonique]} {return} if {[InterrogeFichierExonicMap $FichierCarteExonique Rang 1 ExonArea 1 Taille ] == ""} {return} set Chromosome [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 Chromosome] set Contig [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 Contig ] set LesContigsFrag [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 ContigFragments] set NbChiffres [string length [lindex $LesContigsFrag 0]] set TailleContig [TailleDuContig $Chromosome $Contig $NbChiffres] set Sens [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 Sens ] if {[InterrogeFichierExonicMap $FichierCarteExonique Rang 1 Area 1 Type] != "ExonArea"} { set TailleFenetre $TailleFenetreMax } else { set TailleFenetre $TailleFenetreMin } set DQ [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 ExonArea 1 DQ] if {$Sens == "+"} { set DS [Mini [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 ExonArea 1 DS] [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 ExonArea 1 FS]] } else { set DS [Maxi [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 ExonArea 1 DS] [InterrogeFichierExonicMap $FichierCarteExonique Rang 1 ExonArea 1 FS]] } if {$Sens == "+"} { set Amont [expr $DS - $TailleFenetre] if {$Amont < 1 } {set Amont 1 } set BeforeStart [expr $DS - $Amont] set Aval [expr $DS + $TailleFenetre] if {$TailleContig < $Aval} {set Aval $TailleContig} set AfterStart [expr $Aval - $DS ] } else { set Amont [expr $DS + $TailleFenetre] if {$TailleContig < $Amont} {set Amont $TailleContig} set BeforeStart [expr $Amont - $DS ] set Aval [expr $DS - $TailleFenetre] if {$Aval < 1 } {set Aval 1 } set AfterStart [expr $DS - $Aval] } set Seq [SequenceDuContig $Chromosome $Contig $Amont $Aval $NbChiffres] if {$Sens == "-"} {set Seq [NucToReverseAndComplementNuc $Seq]} set Entete "$Nom $Chromosome $Contig Strand $Sens Query $DQ Subject $DS BeforeStart $BeforeStart AfterStart $AfterStart" set SeqTFA [SequenceFormatTFA $Seq "$Entete"] #Espionne $SeqTFA return $SeqTFA } proc TFADuPDB {aPDB {ForceSEQRES ""}} { #rR attention on fait fastacmd pour avoir les infos et la sequence global PreviensTFADuPDB global SequencePDBDansBanqueBlast SequencePDBDansSEQRES if {[regexp -nocase {^PDB\:} aPDB]} { regsub -nocase {^PDB\:} $AccessDuPdb "" AccessDuPdb } if {[regexp -nocase {[^a-z0-9_]} $aPDB]} {return ""} set Sequence "" if {$ForceSEQRES=="ForceSEQRES"} { set ForceSEQRES 1 } else { set ForceSEQRES 0 } if { !$ForceSEQRES && ! [info exists SequencePDBDansBanqueBlast] && ! [info exists SequencePDBDansSEQRES]} { set SequencePDBDansBanqueBlast 1 } #rR on met un while pour pouvoir faire break (modifie 20130424) while { ! $ForceSEQRES && [info exists SequencePDBDansBanqueBlast] && $SequencePDBDansBanqueBlast} { set AccessDuPdb "PDB:$aPDB" set TfaDeLaBanqueBlast "" if {[catch {set TfaDeLaBanqueBlast [exec fastacmd -d /catalog/blast/pdb -s $AccessDuPdb 2> /dev/null]} Message]} { set TfaDeLaBanqueBlast "" } if {$TfaDeLaBanqueBlast==""} { set AccessDuPdb $aPDB if {[catch {set TfaDeLaBanqueBlast [exec fastacmd -d /catalog/blast/pdb -s $AccessDuPdb 2> /dev/null]} Message]} { break } } if {$TfaDeLaBanqueBlast==""} { set AccessDuPdb "PDB:$aPDB" if {[catch {set TfaDeLaBanqueBlast [exec fastacmd -d /catalog/blast/pdb -s $AccessDuPdb 2> /dev/null]} Message]} { break } } set Header [lindex [split $TfaDeLaBanqueBlast "\n"] 0] regsub -nocase "^.*$aPDB " $Header "" DE set Sequence [QueLaSequenceDuTexteTFA $TfaDeLaBanqueBlast] break } #rR a mis la sequence=="" et les break ci-dessus (20130424) if {$Sequence=="" || $ForceSEQRES || ([info exists SequencePDBDansSEQRES] && $SequencePDBDansSEQRES)} { if { ! [info exists PreviensTFADuPDB]} { set PreviensTFADuPDB 1 } set JoinCar "|" set Sequence [TextePDB $aPDB "SEQRES" $JoinCar] if {$Sequence==""} { return "" } set DE [TextePDB $aPDB "KEYWDS"] if { ! [regexp -nocase {_([A-Z]+)} $aPDB Bidon SubUnit]} { set SubUnit "NoSubUnit" } set LesAs {} foreach Ligne [split $Sequence $JoinCar] { regsub -nocase {^ *[0-9]+ +[A-Z]* +[0-9]+ +} $Ligne "" Seq3 while {[regexp " " $Seq3]} { regsub -all " " $Seq3 " " Seq3 } foreach AAA [split $Seq3 " "] { set A [UT $AAA] if {($A=="x" || [string length $A]!=1) && $PreviensTFADuPDB} { FaireLire "I got '$A' translating '$AAA' to one letter in pdb $aPDB\n$Seq3" if {[OuiOuNon "Do I stop warning ? "]} { set PreviensTFADuPDB 0 } } lappend LesAs $A } } set Sequence [join $LesAs ""] } if {$Sequence==""} { return "" } set TFA [SequenceFormatTFA $Sequence "$aPDB $DE" "protbrut"] return $TFA } proc TFAToComplementTFA {TFA {Entete ""}} { if {$Entete==""} { set OldEntete [EnteteDuTexteTFA $TFA All] regsub ">" $OldEntete ">Com_" $Entete } set Seq [QueLaSequenceDuTexteTFA $TFA] set Com [NucToComplementNuc $Seq] set NewTFA [SequenceFormatTFA $Com $Entete "brut"] return $NewTFA } proc TFAToReverseAndComplementTFA {TFA {Entete ""}} { if {$Entete==""} { set OldEntete [EnteteDuTexteTFA $TFA All] regsub ">" $OldEntete ">RevAndCom_" $Entete } set Seq [QueLaSequenceDuTexteTFA $TFA] set RevCom [NucToReverseAndComplementNuc $Seq] set NewTFA [SequenceFormatTFA $RevCom $Entete "brut"] return $NewTFA } proc TFAToReverseTFA {TFA {Entete ""}} { if {$Entete==""} { set OldEntete [EnteteDuTexteTFA $TFA All] regsub ">" $OldEntete ">Rev_" $Entete } set Seq [QueLaSequenceDuTexteTFA $TFA] set Rev [NucToReverseNuc $Seq] set NewTFA [SequenceFormatTFA $Rev $Entete "brut"] return $NewTFA } proc TFAs2DB {FichierTFAs} { if {[EstCeDeLADN $FichierTFAs]} {set Option "F"} else {set Option "T"} ###Creation d'une database a partir de sequences tfa dans le repertoire ou fichier tfas ini### if {![file exists $FichierTFAs]} {return 0} #set Commande "[PATH formatdb] -i $FichierTFAs -p $Option" #LP passe de ouragan a star #set Commande "/gcg/extensions/bin/formatdb -i $FichierTFAs -p $Option " set Commande "/bips/bin/formatdb -i $FichierTFAs -p $Option " #LP if {[catch {eval exec $Commande} Message]} { Espionne "Pbl dans la creation de la DB" Espionne $Message return 0 } return 1 } proc TFAsDeLaListe {Liste {Rep ""} {FichierACreer ""}} { set LaSelection {} if {$FichierACreer=="" && ($Rep=="GetText" || $Rep=="GetList")} { set Rep $FichierACreer set Rep "" } if {$Rep==""} { set LaSelection $Liste } else { foreach El $Liste { lappend LaSelection "$El $Rep" } } set Selection [join $LaSelection "\n"] return [CreeUnTFAs $Selection $FichierACreer] } proc TFAsDesExons {Nom {Extension 100} {AvecIntron 0}} { global RepertoireDuGenome set RepCExon "$RepertoireDuGenome/mrnaexonicmap" set RepTFAsExons "$RepertoireDuGenome/mrnaexonstfas" if {![file exists $RepTFAsExons]} {File mkdir $RepTFAsExons} set FichierCExon "$RepCExon/$Nom" if {![file exists $FichierCExon]} { Espionne "$Nom -> $FichierCExon does not exist" return "" } ChargeCarteExonique TabExon $FichierCExon if {![info exists TabExon(NbExon)] || [set TabExon(NbExon)] <= 0} { Espionne "$Nom -> No exon area detected" return "" } set Chromosome [set TabExon(Chromosome)] set Contig [set TabExon(Contig) ] set Sens [set TabExon(Sens) ] set Strand [set TabExon(Strand) ] set NbChiffres [NbDeChiffresPourLeFragmentDuContig $Chromosome $Contig] set NbExon [set TabExon(NbExon)] set LesSeq {} for {set i 1} {$i <= $NbExon} {incr i} { set DS [set TabExon(Exon,$i,DS)] set FS [set TabExon(Exon,$i,FS)] set Taille [expr abs($FS - $DS + 1)] if {$Sens == "+"} { set DSAvecExt [expr $DS - $Extension] set FSAvecExt [expr $FS + $Extension] } else { set DSAvecExt [expr $DS + $Extension] set FSAvecExt [expr $FS - $Extension] } if {$AvecIntron} { if {[info exists FSDeRef]} { if {$Sens == "+"} { set DSIntron [expr $FSDeRef + 1] set FSIntron [expr $DS - 1] set TailleIntron [expr $FSIntron - $DSIntron + 1] } else { set DSIntron [expr $FSDeRef - 1] set FSIntron [expr $DS + 1] set TailleIntron [expr $DSIntron - $FSIntron + 1] } if {0 < $TailleIntron} { set Entete ">$Nom Intron [expr $i-1] Length $TailleIntron Start $DSIntron Stop $FSIntron" lappend LesSeq $Entete } } set FSDeRef $FS } set Seq [SequenceDuContig $Chromosome $Contig $DSAvecExt $FSAvecExt $NbChiffres] if {$Sens == "-"} {set Seq [NucToReverseAndComplementNuc $Seq]} if {0 < $Extension} { set Entete "$Nom Exon $i Length $Taille Start \($DS \- $Extension\) Stop \($FS \+ $Extension\) $Chromosome $Contig $Strand" } else { set Entete "$Nom Exon $i Length $Taille Start $DS Stop $FS $Chromosome $Contig $Strand" } set SeqTFA [SequenceFormatTFA $Seq $Entete] lappend LesSeq $SeqTFA } set SeqTFAs [join $LesSeq "\n"] Espionne $SeqTFAs Sauve $SeqTFAs dans "$RepTFAsExons/$Nom" return "" } proc TFAsDesExonsPourTous {{LesNoms ""} {Extension 100} {AvecIntron 0}} { global RepertoireDuGenome set RepCExon "$RepertoireDuGenome/mrnaexonicmap" set RepTFAsExons "$RepertoireDuGenome/mrnaexonstfas" if {![file exists $RepTFAsExons]} {File mkdir $RepTFAsExons} if {0 < [llength [glob -nocomplain "$RepTFAsExons/*"]]} { if {[OuiOuNon "Some files exist in $RepTFAsExons, would you want to conserv them?"]} { set Keep 1 } else { set Keep 0 } } else { set Keep 1 } if {$LesNoms == {} } {set LesNoms [ListeDesPABs]} foreach Nom $LesNoms { set FichierCExon "$RepCExon/$Nom" if {![file exists $FichierCExon]} {continue} set FichierTFAsExons "$RepTFAsExons/$Nom" if {$Keep && [file exists $FichierTFAsExons]} {continue} Espionne "\n$Nom en cours..." Sauve "$Nom en cours" dans $FichierTFAsExons TFAsDesExons $Nom $Extension $AvecIntron } return "" } proc TFAsDesSelectParGretta {FileId FileTFAs FileOut} { ChargeTFAsDeGretta Tab $FileTFAs set LesTFAs {} foreach Id [LesIdSelectParGretta $FileId] { if {![info exists Tab($Id)]} { Espionne $Id continue } set TFA [set Tab($Id)] lappend LesTFAs $TFA } if {$LesTFAs == ""} {return} Sauve [join $LesTFAs "\n"] dans $FileOut return } proc TFAsDuBlast {Fichier {Organisme ""} {SeuilExpect ""} {MaxSeq ""} {WithBId ""} {AlreadyTFA ""}} { if {$SeuilExpect==""} { set SeuilExpect 0.001 } if {$MaxSeq==""} { set MaxSeq "SansLimiteDeNombre" } set WithBId [string equal -nocase $WithBId "WithBId"] set AlreadyTFA [string equal -nocase $AlreadyTFA "AlreadyTFA"] if {$Organisme!=""} { set Organisme [Glossaire $Organisme Complet] } DecortiqueBlast $Fichier $SeuilExpect $MaxSeq Query lBanqueId lAccess lDE lProfil lPN PrepareLesSequencesDesBanques $lBanqueId $lAccess set OnVeutQuoi "OnVeutEMBL" if {$AlreadyTFA} { set OnVeutQuoi "OnVeutNature" } set LesTFAs {} foreach BanqueId $lBanqueId Access $lAccess Profil $lProfil PN $lPN { set LesLignesEMBL [LaSequenceDesBanques $BanqueId $Access AccessOK $OnVeutQuoi] if { ! $AlreadyTFA} { DecortiqueLesLignesEMBL $LesLignesEMBL ID AC DE GN OS OC OX if {$Organisme!="" && $OS!=$Organisme} { continue } regsub -all {\:} $DE "_" DE set Format "embl" if {[regexp -nocase {^REFSEQ:} $BanqueId]} { set Format "tfa" } set BouA $AC if {$WithBId} { set BouA $BanqueId } set TFA [SequenceFormatTFA_l $LesLignesEMBL "$BouA $OS $DE" $Format] } else { set TFA [join $LesLignesEMBL "\n"] } lappend LesTFAs $TFA # lappend LesCandidats "$BanqueId $Access $PN $OS $OC" } return [join $LesTFAs "\n"] # return $LesCandidats } proc TFAsFromAccessList {ListeOuFichier {GetWhat ""}} { if {[regexp "\n" $ListeOuFichier]} { set ListeOuFichier [split ListeOuFichier "\n"] } if {[llength $ListeOuFichier]==1 && [file exists $ListeOuFichier]} { set ListeOuFichier [LesLignesVitales $ListeOuFichier "SansVide"] } set LeTFAs {} set Liste $ListeOuFichier foreach Ligne $Liste { scan $Ligne "%s" Access set Embl [SequenceDesBanques $Access] if {$Embl==""} { Warne "Je laisse tomber $Access :'(" ; continue } set TFA [SequenceFormatTFA $Embl $Access] lappend LeTFAs $TFA } if {$GetWhat=="GetList"} { return $LeTFAs } if {$GetWhat=="GetText"} { return [join $LeTFAs "\n"] } return [SauveLesLignes $LeTFAs dans $GetWhat] } proc TFAtoGDE {LesLignesTFA} { Wup "On remplace les > par % avec juste le nom derriere >" set lesLignesGDE {} foreach Ligne $LesLignesTFA { if {[regexp "^>" $Ligne]} { set Entete Ligne regsub ">SEQ ID " $Entete "%" Entete regsub ">" $Entete "%" Entete regsub "," $Entete " " Entete scan $Entete "%s" Ligne } lappend LesLignesGDE $Ligne } return $LesLignesGDE } proc TGO {} { Espionne [LesGenomesDansLeBonOrdre] Espionne [LesGenomesDansLeBonOrdre] } proc TGR {} { lappend LesOrdres "create rectangle 3 5 10 10 -fill red" Graphiste $LesOrdres 500 500 0 0 20 20 /home/wscope/toto.png exit } proc THoan {} { puts "[clock format [clock seconds]]" global FaireLireNon set FaireLireNon 1 set Ll [LesLignesDuFichier "lpdb.txt"] foreach l $Ll { set Li [split $l " "] set id [string range [lindex $Li 0] 3 end] puts "Traite $id" set Lpdb [RecupereUnFichierSurWeb $id] set rep [DecortiqueUnPDB $Lpdb $id] if {! $rep} {continue} global PDB_[set id]_AtmXYZ set xmin 999. set ymin 999. set zmin 999. set xmax -999. set ymax -999. set zmax -999. foreach c [array names PDB_[set id]_AtmXYZ] { foreach v [set PDB_[set id]_AtmXYZ($c)] { foreach a $v { lassign $a x y z set xmin [expr {$x<$xmin?$x:$xmin}] set ymin [expr {$y<$ymin?$y:$ymin}] set zmin [expr {$z<$zmin?$z:$zmin}] set xmax [expr {$x>$xmax?$x:$xmax}] set ymax [expr {$y>$ymax?$y:$ymax}] set zmax [expr {$z>$zmax?$z:$zmax}] } } } set d [expr {sqrt(abs($xmax-$xmin)*abs($xmax-$xmin)+abs($ymax-$ymin)*abs($ymax-$ymin)+abs($zmax-$zmin)*abs($zmax-$zmin))}] puts "\td= $d" foreach v [info globals "PDB*"] { global $v unset $v } } puts "[clock format [clock seconds]]" exit } proc TL {} { foreach Orf [lrange [ListeDesPABs] 1 10] { foreach Orga [FamiliarOrganism LaListeMerci] { Espionne [Glossaire $Orga Demi] } } exit } proc TLN {} { set Xml [ContenuDuFichier "/home/ripp/msp/exemp.txt"] if {[regexp {LastName.Kars} $Xml Match]} { Espionne "$Match"; set Saute($Pmid) 1 } exit } proc TLSDB {} { EspionneL [LaSequenceDesBanques VARSPLIC:Q15911-2 Q15911-2 A] Espionne $A exit } proc TLogTo {what lT} { array set T $lT foreach elt $T(LElt) { unset -nocomplain Tbl array set Tbl [array get T "$elt,*"] NettoieTbl Tbl switch -regexp -- $elt { {^table} { #Table2$what Tbl TLogTo $what [array get Tbl] } {^warning} { if {$what eq "HTML"} { BeginWarning2$what Tbl } TLogTo $what [array get Tbl] if {$what eq "HTML"} { EndWarning2$what } #TLogTo $what [array get Tbl] } {^teletype} { #Blob2$what Tbl if {$what eq "HTML"} { Html_BaliseOpen pre } TLogTo $what [array get Tbl] if {$what eq "HTML"} { Html_BaliseClose pre } } {^link} { if {$what eq "HTML"} { Link2$what Tbl } } {^blob} { #Blob2$what Tbl TLogTo $what [array get Tbl] } {^tabular} { Tabular2$what Tbl } {^title\_} { Title2$what Tbl } {^subtitle} { Subtitle2$what Tbl } {^separator} { Separator2$what } {^text} { Text2$what Tbl } {^tele} { Tele2$what Tbl } } } return } proc TMDeLaSequence {Seq} { regsub -all " " $Seq "" Seq set Seq [string toupper $Seq] set Texte [ContenuDuFichier "[LbgiUrl]/MeltingTemperatureBioPhp.php?primer=$Seq&NearestNeighbor=1&cp=500&cs=50&cmg=1"] set Temp [FloatApres "" dans $Texte] if {$Temp>55} { Espionne "$Temp $Seq" } return $Temp #suite obsolete set nAT [regexp -all -nocase {[AT]} $Seq] set nGC [regexp -all -nocase {[GC]} $Seq] set nATGC [expr $nAT+$nGC] if {$nATGC < 14 } { set Temp [expr $nAT*2 + $nGC*4] } else { set Temp [expr 64.9 + 41*($nGC - 16.4)/$nATGC] } return $Temp #suite obsolete if {0} { set TM(A) 2 set TM(T) 2 set TM(G) 4 set TM(C) 4 set Seq [string toupper $Seq] set Cumul 0 foreach Base [split $Seq ""] { if {[info exists TM($Base)]} { incr Cumul [set TM($Base)] } } return $Cumul } } proc TOC {} { puts "je dis : [set titi salut]" TAC titi puts "---> $titi" puts "je dis : [set titi "sale uc"]" TAC titi puts "---> $titi" exit } proc TOCEnHTML {} { global TbLog Html_Append "
    " Html_Append "

    Table Of Contents

    " Html_Append "
      " foreach elt $TbLog(LElt) { if {[set Lix [lsearch -all -regexp [set TbLog($elt,LElt)] "title_"]] == -1} { continue } set InSub 0 foreach ix $Lix { set ittl [lindex [set TbLog($elt,LElt)] $ix] if {[regexp {^subt} $ittl]} { if {! $InSub} { set InSub 1 Html_Append "
        " } Html_Append "
      • " set subtitle [set TbLog($elt,$ittl,Subtitle)] Html_Href $subtitle "#$ittl" "style='fontsize:big;'" Html_Append "
      • " } else { if {$InSub} { set InSub 0 Html_Append "
      " } Html_Append "
    • " set title [set TbLog($elt,$ittl,Title)] Html_Href $title "#$ittl" "style='fontsize:big;'" Html_Append "
    • " } } if {$InSub} { Html_Append "
    " } } Html_Append "" Html_Append "
    " Html_Append "
    " Html_BR return } proc TOCEnText {} { global TbLog TextOut lappend TextOut "" lappend TextOut "Table Of Contents" lappend TextOut "-----------------" foreach elt $TbLog(LElt) { if {[set Lix [lsearch -all -regexp [set TbLog($elt,LElt)] "title_"]] == -1} { continue } set InSub 0 foreach ix $Lix { set ittl [lindex [set TbLog($elt,LElt)] $ix] if {[regexp {^subt} $ittl]} { if {! $InSub} { set InSub 1 set pre " " } set subtitle [set TbLog($elt,$ittl,Subtitle)] lappend TextOut "$pre$subtitle" } else { if {$InSub} { set InSub 0 set pre "" } set title [set TbLog($elt,$ittl,Title)] lappend TextOut $title } } } lappend TextOut "" return } proc TOT {} { global StrucAVoir LoadTkAndPackages rename EnvoieLesObjets Envoie_wait rename Cubes EnvoieLesObjets catch {glDeleteLists 513 1} glFlush glFinish set StrucAVoir [list] Initialisation AfficheFenetreOpengl #Update3DMatrices $::pgl(wogl) postredisplay return } proc TPIO {} { foreach Nom [ListeDesPABs] { Espionne [time {set PIO [PourcentageIdentiteOrga $Nom taci]}] Espionne $PIO } exit } proc TRANSFORME {VX MC VXP} { set PROV [V_VV $VX "-" $VXP] set VXMOL [V_MV $MC * $PROV] return $VXMOL } proc TRCOOR {NA,X,TRANS,IAT,IMOL} { foreach K {1 2 3} { set XO($K) [set X($K,$IAT,$IMOL)] } foreach K {1 2 3} { set X($K,$IAT,$IMOL) [expr {[set TRANS($K,1,$IMOL)]*$XO(1)+[set TRANS($K,2,$IMOL)]*$XO(2)+[set TRANS($K,3,$IMOL)]*$XO(3)}] } return } proc TRNAscanSE {} { global RepertoireDuGenome global FichierSequenceADN File mkdir "$RepertoireDuGenome/trnadir" set FichierTRNAscanSE "$RepertoireDuGenome/trnadir/tRNAscan-SE.out" set Ordre "-G" set OC [NotreOC] if {[regexp -nocase "Archaea" $OC]} { set Ordre "-A" } if {[regexp -nocase "Bacteria" $OC]} { set Ordre "-P" } if {[regexp -nocase "Eukaryota" $OC]} { set Ordre "" } set CommandeTRNAscanSE "" while {$CommandeTRNAscanSE==""} { set CommandeTRNAscanSE "tRNAscan-SE $Ordre -o $FichierTRNAscanSE $FichierSequenceADN" set CommandeTRNAscanSE [Entre $CommandeTRNAscanSE] if {$CommandeTRNAscanSE=="" && [OuiOuNon "Do I cancel TRNAscanSE ?"]} { return "" } } catch {eval exec $CommandeTRNAscanSE} Message if { ! [file exists $FichierTRNAscanSE]} { FaireLire "TRNAscanSE didn't run properly.\nMay be You forget to set the environment." return 0 } set FichierBornesDesTRNAs "$RepertoireDuGenome/fiches/bornesdestrnas" while {[file exists $FichierBornesDesTRNAs]} { if {[OuiOuNon "I have to calculate $FichierBornesDesTRNAs.\n Do I delete the old one ? (You can copy it before answer)"]} { File delete -force $FichierBornesDesTRNAs } else { if {[OuiOuNon "Do I keep the old version ?"]} { break } } } ChargeLesTRNAs return 1 } proc TSB {} { CreeLesPiliers set Lp [set ::ListeDesPiliersDuGroupe(GroupeToutLeMonde)] set sc [ScoreDeBILD $Lp] foreach p $Lp s $sc { puts "$p [format %6.2f $s]" } exit } proc TSE {args} { set pf [lindex $args 0] set Lm [lrange $args 1 end] TestScoreExe $pf $Lm } proc TSOH {} { set OHLaListe [CompteDesOrganismesAyantMemeOperon "LaListeMerci"] Espionne [lsort -integer $OHLaListe] Espionne [MoyenneEcartMinMaxCumulLong $OHLaListe] } proc TSeq {} { DecortiqueUnTFA ./tmp/D_all.tfa Ln Sq foreach {k tax} {Dcy_Cyan.mero 45157 Dmi_Cyan.mero 45157 Dcy_Homo.sapi 9606 Dmi_Homo.sapi 9606} { set s $Sq($k) set s [string map {"." "" "-" ""} $s] #set Lblast [BlastService -p blastp -d nr -orga $tax -expect 0.00001 -query ">toto\n$s" -nlist 10 -f 1 -qdef yes] puts "$k $tax" #puts [join $Lblast \n] #SauveLesLignes $Lblast dans tmp/bl${k}_$tax.blast set Lblast [LesLignesDuFichier tmp/bl${k}_$tax.blast] DecortiqueBlast $Lblast "" "" "" Lbid Lacc Lde "" LPN set i 1 foreach a $Lacc b $Lbid p $LPN d $Lde { puts "$i hit $a $b $p $d" incr i } puts "" unset -nocomplain Lbid Lacc Lde LPN } exit } proc TT {} { puts [string repeat "*" 600] package require BLT set T [blt::tree create] set I1 [CreateNode $T] Spy $T puts "insert de $I1 dans $T en root" $T root $I1 puts "$I1 devient root" Spy $T set I2 [CreateNode $T] puts "insert de $I2 dans $T en root" Spy $T set I3 [CreateNode $T] puts "insert de $I3 dans $T en root" Spy $T set I4 [CreateNode $T $I3] puts "insert de $I4 dans $T en $I3" Spy $T set I5 [CreateNode $T $I4] puts "insert de $I5 dans $T en $I4" Spy $T set TV ".tv" blt::treeview $TV -tree $T $TV open all pack $TV puts "ai trouve [$T path "IAm4"]" set R [NewRoot $T "IAm4"] set RV ".rv" blt::treeview $RV -tree $R $RV open all pack $RV } proc TTLL {{Qui ""} {Quoi ""}} { #rR Les Clades pour les TTLL de Sarah Djeddi global TTLL regsub -all "_" $Qui " " Qui if {[regexp -nocase "Help" $Qui]} { lappend LeHelp "TTLL stands for Tubulin Tyrosine Ligase Like (from Sarah)" lappend LeHelp "TTLL ListOf Clade" lappend LeHelp "TTLL ListOf OX" lappend LeHelp "TTLL ListOf OS" lappend LeHelp "TTLL 9606 Clade" lappend LeHelp "TTLL Homo_sapiens Clade -> Sarcopterygii (eh oui !!! on est comme ça !!) " lappend LeHelp "TTLL 9606 Clade -> Sarcopterygii" lappend LeHelp "TTLL Sarcopterygii OX -> 7897 10090 9606 9913 9031 8364 8496 9258 13616 8469 28377" lappend LeHelp "TTLL Sarcopterygii OS -> lists the organism names" lappend LeHelp "TTLL 9606 OX -> 9606" lappend LeHelp "TTLL 9606 OS -> Homo sapiens" lappend LeHelp "TTLL Homo_sapiens OX -> 9606 (nb : with underscore _ you don't need quotes) " lappend LeHelp "TTLL Homo_sapiens OS -> Homo sapiens" lappend LeHelp "Attention some Organims can belong to several Clades" lappend LeHelp "TTLL 12345 Clade may return several hits" lappend LeHelp "" lappend LeHelp " Raymond" return [join $LeHelp "\n"] } set FichierCsv "[BlomeDir]/TTLL.csv" set Fichier "/genomics/link/OI/fiches/TTLL.txt" if {[regexp -nocase "^ReDo_" $Qui]} { if {[file exists $Fichier]} { file delete $Fichier } regsub -nocase "^ReDo_" $Qui "" Qui return [TTLL $Qui $Quoi] } if {[info exists TTLL($Qui,$Quoi)]} { return $TTLL($Qui,$Quoi) } if {[info exists TTLL("EstCharge")]} { return "" } set TTLL("EstCharge") 1 set OnMemorise 0 ; #rR Attention si on mémorise il faut faire redo quand il faut if { $OnMemorise && [file exists $Fichier]} { array set TTLL [ContenuDuFichier $Fichier] set TTLL(csv,file) $FichierCsv return [TTLL $Qui $Quoi] } set TTLL(ListOf,Clade) {} foreach Ligne [LesLignesDuFichier $FichierCsv] { set A "" set B "" lassign [split $Ligne ";"] A B set A [string trim $A] set B [string trim $B] if {[regexp -nocase {[A-Z]} $A]} { regsub -all " " $A "" A set Clade $A set TTLL($Clade,OX) {} set TTLL($Clade,OS) {} lappend TTLL(ListOf,Clade) $Clade continue } if {[regexp {^[0-9]+$} $A]} { set B [Tax $A Name] lappend TTLL($Clade,OX) $A lappend TTLL($Clade,OS) $B lappend TTLL($A,Clade) $Clade lappend TTLL($B,Clade) $Clade lappend TTLL(ListOf,OX) $A lappend TTLL(ListOf,OS) $B set TTLL($A,OX) $A set TTLL($A,OS) $B set TTLL($B,OX) $A set TTLL($B,OS) $B continue } } set TTLL(ListOf,Clade) [lsort -unique $TTLL(ListOf,Clade)] set TTLL(ListOf,JoinedClade) [join $TTLL(ListOf,Clade) " "] set TTLL(ListOf,OX) [lsort -unique $TTLL(ListOf,OX)] set TTLL(ListOf,OS) [lsort -unique $TTLL(ListOf,OS)] if {$OnMemorise} { Sauve [array get TTLL] dans $Fichier } return [TTLL $Qui $Quoi] } proc TTLLrenomme {} { set Fic "/genomics/link/TTLL/DeYann/ttll_seq_fasta.txt" foreach Access } proc TTT {} { set A "Q92947-2" if {[catch {set Sortie [exec getz -e -cs "\\\|" \[VARSPLIC:$A\]>protein]} Message]} { FaireLire "error from getz \n$Message" exit } Espionne $Sortie exit } proc TW1 {} { package require http set url "http://bips.u-strasbg.fr/PipeAlign/get_pdb_file.cgi?1ile" if {[catch {::http::geturl $url} token]} { puts "Error $url : bad url or no network" return 0 } upvar #0 $token toto set lignes [split [set toto(body)] "\n"] unset toto return $lignes } proc T_DoBootstrap {Ln Lpil} { set lgs [llength $Lpil] set nbs [llength $Ln] set NewA [list] set Lr [list] for {set col 0} {$col < $lgs} {incr col} { # Attention !! int(9.99) = 9 !! donc lgs et pas lgs-1 ! set H [expr {int(rand()*$lgs)}] set pil [lindex $Lpil $H] for {set i 0} {$i < $nbs} {incr i} { lappend l$i [lindex $pil $i] } } for {set i 0} {$i < $nbs} {incr i} { lappend NewA [set l$i] lappend Lr [string length [string map {"." ""} [join [set l$i] ""]]] set l$i [list] } set i 1 foreach n1 $Ln s1 $NewA l1 $Lr { set TPCI($n1,$n1) 0.0 foreach n2 [lrange $Ln $i end] s2 [lrange $NewA $i end] l2 [lrange $Lr $i end] { set dist [expr {1.0-[NRIdentite $s1 $l1 $s2 $l2]}] set TPCI($n1,$n2) $dist set TPCI($n2,$n1) $dist } incr i } set Ldst [list] foreach n1 $Ln { foreach n2 $Ln { lappend Ldst [set TPCI($n1,$n2)] } } return $Ldst } proc T_DoBootstrap2 {Ln Lpil Lrd} { set lgs [llength $Lpil] set nbs [llength $Ln] set NewA [list] set Lr [list] for {set col 0} {$col < $lgs} {incr col} { # Attention !! int(9.99) = 9 !! donc lgs et pas lgs-1 ! # set H [expr {int(rand()*$lgs)}] set H [lindex $Lrd $col] set pil [lindex $Lpil $H] for {set i 0} {$i < $nbs} {incr i} { lappend l$i [lindex $pil $i] } } for {set i 0} {$i < $nbs} {incr i} { lappend NewA [set l$i] lappend Lr [string length [string map [list "." ""] [join [set l$i] ""]]] set l$i [list] } set i 1 foreach n1 $Ln s1 $NewA l1 $Lr { set TPCI($n1,$n1) 0.0 foreach n2 [lrange $Ln $i end] s2 [lrange $NewA $i end] l2 [lrange $Lr $i end] { set dist [expr {1.0-[NRIdentite $s1 $l1 $s2 $l2]}] set TPCI($n1,$n2) $dist set TPCI($n2,$n1) $dist } incr i } set Ldst [list] foreach n1 $Ln { foreach n2 $Ln { lappend Ldst [set TPCI($n1,$n2)] } } return $Ldst } proc T_M {aT M {StartIndex 0}} { upvar $aT T set I $StartIndex foreach V $M { set J $StartIndex foreach X $V { set T($I,$J) $X incr J } incr I } } proc T_T {aD aS} { # Attention D est reinitialise upvar $aD D upvar $aS S array set T [array get S] if {[info exists D]} { unset D } array set D [array get T] } proc T_V {aT V {StartIndex 0}} { upvar $aT T set I $StartIndex foreach X $V { set T($I) $X incr I } } proc TabFeaturesDesSeqs {id aTab} { upvar $aTab tb global LNOrdali set RId [$id documentElement] ExtraitListeItemFeatures $id LItemFeat set tb(Items) $LItemFeat foreach n $LNOrdali { set query "//*\[string(seq-name)='$n'\]/descendant::*\[name()='fitem'\]" set lneitem [$RId selectNodes "$query"] set tb($n) {} foreach f $lneitem { set ValI {} foreach i $LItemFeat { set nfi [$f selectNodes "./$i"] set val [$nfi selectNodes string(.)] regsub -all " " $val {_} val lappend ValI $val } lappend tb($n) $ValI } } return } proc TabGlobaux {pab data conv} { # conv permet de determiner s il faut convertir ou non les positions ds l ali en position dans la sequence foreach n {"IdenGlob" "ConsGlob" "SimiGlob"} { set l$n {} set l${n}R {} # ce qui se situe apres $n et commence ou non par "{" jusqu a "}" regexp "$n {{0,1}(\[^\}\{\]+)}" [set data] match l$n foreach e [set l$n] { # si conv est vide, on convertit if { $conv == "" } { set pos [CorrespondanceGenSeqOrd $pab $e] # sinon on garde les positions dans l alignement } else { set pos $e } if { $pos != -1 } { lappend l${n}R $pos } } lappend lTotal [set l${n}R] } return $lTotal } proc TabGroupe {id numGrp liste} { set lResu {} set li {} set n "CoulG$numGrp" # ce qui se situe apres $n et commence ou non par "{" jusqu a "}" regexp "$n {{0,1}(\[^\}\{\]+)}" $liste match li #puts "les $n sont [set l$n]" if {$li != ""} { foreach e $li { set pos [CorrespondanceGenSeqOrd $id $e] lappend lResu $pos } } return $lResu } proc TabLMSDesAccessDuBallast {aTabAccess FichierBallastMotifs FichierBallastAnchors} { upvar $aTabAccess TabAccess if {![file exists $FichierBallastMotifs]} { Espionne "$FichierBallastMotifs does not exist." return "" } if {![file exists $FichierBallastAnchors]} { Espionne "$FichierBallastAnchors does not exist." return "" } set LesLMS {} set nLMS 0 set F [open $FichierBallastMotifs] while {[gets $F Ligne]>=0} { if {![regexp -nocase {[0-9a-z]} $Ligne]} {continue} if {[regexp "Suggested Words" $Ligne]} {continue} set Ligne [string trim $Ligne] scan $Ligne "%d %s %d" DebutLMS Separateur FinLMS incr nLMS lappend LesLMS [list "$DebutLMS" "$FinLMS" "$nLMS"] } close $F set LesAccess {} set F [open $FichierBallastAnchors] while {[gets $F Ligne]>=0} { if {![regexp -nocase "seq:" $Ligne]} {continue} if {[info exists LMS]} {unset LMS} if {[info exists Access] } {unset Access } if {[info exists Position]} {unset Position} scan $Ligne "%s %s %s %s %d %s %d" Seq Query Access Pos Pos1 Beg Position if {![info exists TabAccess($Access)]} { lappend LesAccess $Access set TabAccess($Access) {} } set TrouveLeLMS 0 foreach LeLMS $LesLMS { set Debut [lindex $LeLMS 0] set Fin [lindex $LeLMS 1] if { $Debut <= $Position && $Position <= $Fin} { set nLMS [lindex $LeLMS 2] lappend TabAccess($Access) $nLMS set TrouveLeLMS 1 break } } if {$TrouveLeLMS == 0} { Espionne "$Nom -> ERROR $Access $Position ERROR" } } close $F return $aTabAccess } proc TabLesEmbranchementsGO {aTab Type Individu} { upvar $aTab Tab global nEmbranchements if {![info exists nEmbranchements]} {set nEmbranchements 1 } set Individu [string toupper $Individu] set Individu [GODB Type $Type GOSynonyme $Individu GODeRef] if {![info exists Tab($nEmbranchements,LEmbranchement)]} {set Tab($nEmbranchements,LEmbranchement) {}} lappend Tab($nEmbranchements,LEmbranchement) $Individu set LesParents [concat [GODB Type $Type GO $Individu LesParents] [GODB Type $Type GO $Individu LesConstituants]] set nParents [llength $LesParents] if {1 < $nParents} {set LEmbranchemenAvantLeNoeud [set Tab($nEmbranchements,LEmbranchement)]} for {set i 0} {$i < $nParents} {incr i} { if {1 < $nParents && 0 < $i} { incr nEmbranchements set Tab($nEmbranchements,LEmbranchement) $LEmbranchemenAvantLeNoeud } set Parent [string toupper [lindex $LesParents $i]] set Parent [GODB Type $Type GOSynonyme $Parent GODeRef] TabLesEmbranchementsGO Tab $Type $Parent } return $aTab } proc TabLesEmbranchementsOntologiques {aTab Type Individu} { upvar $aTab Tab global nEmbranchements if {![info exists nEmbranchements]} {set nEmbranchements 1 } set Individu [string toupper $Individu] if {[OntoExists $Individu MonJumeau]} {set Individu [string toupper [Onto $Individu MonJumeau]]} if {![info exists Tab($nEmbranchements,LEmbranchement)]} {set Tab($nEmbranchements,LEmbranchement) {}} lappend Tab($nEmbranchements,LEmbranchement) $Individu set LesParents [concat [Onto $Type $Individu LesParents] [Onto $Type $Individu LesConstituants]] set nParents [llength $LesParents] if {1 < $nParents} {set LEmbranchemenAvantLeNoeud [set Tab($nEmbranchements,LEmbranchement)]} for {set i 0} {$i < $nParents} {incr i} { if {1 < $nParents && 0 < $i} { incr nEmbranchements set Tab($nEmbranchements,LEmbranchement) $LEmbranchemenAvantLeNoeud } set Parent [string toupper [lindex $LesParents $i]] if {[OntoExists $Parent MonJumeau]} {set Parent [string toupper [Onto $Parent MonJumeau]]} TabLesEmbranchementsOntologiques Tab $Type $Parent } return $aTab } proc TabLesPageInfos {aTab {LesId ""} {Banque ""}} { upvar $aTab Tab if {$LesId == {}} {return} set LesIdModif {} foreach Id $LesId { set IdModif $Id regsub -nocase {^[^\:]+\:} $Id "" IdModif regsub -nocase {\-[0-9]+$} $IdModif "" IdModif set IdModif [string toupper $IdModif] set TabTmp($Id,modif) $IdModif set TabTmp($IdModif,ini) $Id lappend LesIdModif $IdModif } if {$Banque == ""} {set Banque "\{genbankfull protein est\}"} set Ids [join $LesIdModif "|"] set Ids "\($Ids\)" set Commande "[ProgPathway getz] \" \( \\\[$Banque-acc:$Ids\\\] \| \\\[$Banque-id:$Ids\\\] \) \" -e" catch {set GetzOut [eval exec $Commande]} Message if {![info exists GetzOut] || $GetzOut == ""} {return} set LaPageInfo {} foreach Ligne [split $GetzOut "\n"] { lappend LaPageInfo $Ligne if {[string trim $Ligne] != "//"} {continue} set PageInfo [join $LaPageInfo "\n"] set LesAccess [LesAccessDeLaPageInfo $PageInfo] lappend LesAccess [BanqueIdDeLaPageInfo $PageInfo] foreach Access $LesAccess { set Access [string toupper $Access] set TabTmp($Access,PageInfo) $PageInfo } set LaPageInfo {} } foreach Id $LesId { set IdModif [set TabTmp($Id,modif)] if {![info exists TabTmp($IdModif,PageInfo)]} {continue} set Tab($Id) [set TabTmp($IdModif,PageInfo)] } return $aTab } proc Table2HTML {aT} { upvar $aT tbl if {[set id $tbl(Id)] ne ""} { Html_Append "
    " } else { Html_Append "
    " } foreach elt $tbl(LElt) { switch -regexp -- $elt { {^title\_} { Html_Append "

    $tbl($elt,Title)

    " } {^Subtitle\_} { Html_Append "

    $tbl($elt,Subtitle)

    " } {^text} { Html_Teletype "[join $tbl($elt,Text) \n]" } {^tabular} { set lt [array get tbl "$elt,*"] #puts "[join $lt \n]" array set tt $lt Tabular2HTML tt } } } Html_Append "
    " Html_BR return } proc Table2Text {aT} { upvar $aT tbl global TextOut foreach elt $tbl(LElt) { switch -regexp -- $elt { {^title\_} { lappend TextOut $tbl($elt,Title) lappend TextOut [string repeat - [string length $tbl($elt,Title)]] } {^Subtitle\_} { lappend TextOut $tbl($elt,Subtitle) } {^text} { lappend TextOut [join $tbl($elt,Text) \n] } {^tabular} { set lt [array get tbl "$elt,*"] array set tt $lt Tabular2Text tt } } } lappend TextOut "" return } proc TableCorrespondanceAncienNouveau {} { foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/prottfa/*"] { #premier mot de l entete sans ">" set Nouveau [EnteteDuFichierTFA $Fichier ""] #entete entiere avec ">" set Entete [EnteteDuFichierTFA $Fichier] scan $Entete "%s %s %s %s" new old prot acc lappend LaCorrespondance "$old\t$Nouveau\t$acc" } return $LaCorrespondance } proc TableauActinome {} { #327 ACT set LesLignes {} set FichierActinome "[RepertoireDuGenome]/TableauActiChip" set LigneDeTete "RetscopeId;GeneName;Description;NucAccessionNumber;ProtAccessionNumber;CytoBand;ProbeSet;processGO;functionGO;componentGO" lappend LesLignes $LigneDeTete foreach Nom [ActiChip2_0] { set Gn [ExtraitInfo $Nom "ValiGN"] set Des [ExtraitInfo $Nom "ValiDE"] regsub -all ";" $Des "," Des set AccARNm [AccessEvi $Nom] set ProbesSet [ExtraitInfo $Nom "ProbeSetId"] set CytoBand [ExtraitInfo $Nom "CytoBand"] set AccProt [ExtraitInfo $Nom "IdAccProt"] set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set LesComponent {}; set LesFunction {}; set LesProcess {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { set Type [InterrogeGeneOntology $FichierGO GO $GO Type] #set DefGO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""] if {[regexp {component} $Type]} {lappend LesComponent $GO} if {[regexp {function} $Type]} {lappend LesFunction $GO} if {[regexp {process} $Type]} {lappend LesProcess $GO} } set LesComponent [ListeSansDoublon $LesComponent] set LesFunction [ListeSansDoublon $LesFunction] set LesProcess [ListeSansDoublon $LesProcess] set comp [join $LesComponent ","] set func [join $LesFunction ","] set proce [join $LesProcess ","] set Ligne "$Nom;$Gn;$Des;$AccARNm;$AccProt;$CytoBand;$ProbesSet;$proce;$func;$comp" lappend LesLignes $Ligne } SauveLesLignes $LesLignes dans $FichierActinome } proc TableauRecapDesSelectionnes {Fichier} { #Fichier est soit [RepertoireDuGenome]/transcriptomique/ConeSpe/ListeRMAExp2J15Cond soit [RepertoireDuGenome]/transcriptomique/ConeSpe/ListedChipExp2J15Cond if {[regexp "RMA" $Fichier]} {set AnalysisSoftware RMA} if {[regexp "dChip" $Fichier]} {set AnalysisSoftware dChip} set PkExperiment 2 #attention faire autrement amettreenarg set RepertoireSi "[RepertoireDuGenome]/transcriptomique/ConeSpe/SignalIntensityExp2J15" set FichierSortie "[RepertoireDuGenome]/transcriptomique/ConeSpe/TableauRecapExp2J15$AnalysisSoftware" CanalSqlBioArrayBase set i 0 foreach Ps [LesLignesDuFichier $Fichier] { incr i Espionne "Ps $Ps $i" set Fichier "$RepertoireSi/$Ps" set LesSiTrb {}; set LesSiRd7 {}; set LesSiWt {} foreach Ligne [LesLignesDuFichier $Fichier] { set elmts [split $Ligne "\t"] if {[regexp "Trbeta" $Ligne] && [regexp -nocase "$AnalysisSoftware" $Ligne]} { lappend LesSiTrb [lindex $elmts 4] } if {[regexp "rd7" $Ligne] && [regexp -nocase "$AnalysisSoftware" $Ligne]} { lappend LesSiRd7 [lindex $elmts 4] } if {[regexp "wt" $Ligne] && [regexp -nocase "$AnalysisSoftware" $Ligne]} { lappend LesSiWt [lindex $elmts 4] } } set MoyTrb [MoyenneDeLaListe $LesSiTrb] set MoyRd7 [MoyenneDeLaListe $LesSiRd7] set MoyWt [MoyenneDeLaListe $LesSiWt] set Rapport [expr $MoyRd7 / $MoyTrb] regsub -all {\-OU\-} $Ps "/" Ps set TexteCluster [TrouveClusterParticulier $Ps $PkExperiment] foreach Ligne [split $TexteCluster "\n"] { if {[regexp -nocase "$AnalysisSoftware" $Ligne]} { set ElmtLigne [split $Ligne "\t"] if {[regexp "K-Means cluster method from TMEV" $Ligne]} { set KMTMEV [lindex $ElmtLigne 4] set PopulationTotaleDeKMTMEV [PopulationDuCluster $KMTMEV $PkExperiment $AnalysisSoftware "K-Means cluster method from TMEV (TIGR MultiExperiment Viewer(MeV))"] set PopulationParticuliereDeKMTMEV [InterrogePopulationDesClustersCorresAuProfilParticulier $KMTMEV $AnalysisSoftware "K-Means cluster method from TMEV (TIGR MultiExperiment Viewer(MeV))"] } elseif {[regexp "K-Means cluster method from FASABI" $Ligne]} { set KMFASABI [lindex $ElmtLigne 4] set PopulationTotaleDeKMFASABI [PopulationDuCluster $KMFASABI $PkExperiment $AnalysisSoftware "K-Means cluster method from FASABI"] set PopulationParticuliereDeKMFASABI [InterrogePopulationDesClustersCorresAuProfilParticulier $KMFASABI $AnalysisSoftware "K-Means cluster method from FASABI"] } elseif {[regexp "MixtureModel clustering method from FASABI" $Ligne]} { set MMFASABI [lindex $ElmtLigne 4] set PopulationTotaleDeMMFASABI [PopulationDuCluster $MMFASABI $PkExperiment $AnalysisSoftware "MixtureModel clustering method from FASABI"] set PopulationParticuliereDeMMFASABI [InterrogePopulationDesClustersCorresAuProfilParticulier $MMFASABI $AnalysisSoftware "MixtureModel clustering method from FASABI"] } } } set AccessGb [AffyAnnoMG430 $Ps "Representative_Public_ID"] set GeneName [AffyAnnoMG430 $Ps "Gene_Symbol"] set AccessNm [AffyAnnoMG430 $Ps "RefSeq_Transcript_ID"] set Go [AffyAnnoMG430 $Ps "Gene_Ontology_Cellular_Component"] set transmb [AffyAnnoMG430 $Ps "Trans_Membrane"] #attention aux /// set LesMorceaux {}; set LesComp {} if {$Go=="---"} { set CompFin "no" } else { regsub -all {/{3}} $Go "@" Go set LesMorceaux [split $Go "@"] foreach Morceau $LesMorceaux { #Espionne "Morceau $Morceau" regsub -all {/{2}} $Morceau "@" Morceau set Comp [lindex [split $Morceau "@"] 1] set Comp [string trim $Comp] lappend LesComp $Comp } set LesComp [ListeSansDoublon $LesComp] set CompFin [join $LesComp "/"] } if {$transmb=="---"} { set transmb "no" } else { set transmb "yes" } set LigneFin "$Ps;$GeneName;$AccessGb;$AccessNm;$CompFin;$transmb;$MoyRd7;$MoyWt;$MoyTrb;$Rapport;$KMTMEV;$PopulationTotaleDeKMTMEV;$PopulationParticuliereDeKMTMEV;$KMFASABI;$PopulationTotaleDeKMFASABI;$PopulationParticuliereDeKMFASABI;$MMFASABI;$PopulationTotaleDeMMFASABI;$PopulationParticuliereDeMMFASABI" lappend LesLignesFin $LigneFin } CanalSqlDisconnect set LesLignesFin [lsort -real -command CompareFlottant -decreasing $LesLignesFin] SauveLesLignes $LesLignesFin dans $FichierSortie } proc TableauRecapLoc {} { foreach Box [ListeDesPABs] { set LesLignesResult {} set File "[RepertoireDuGenome]/Loc/htdocs/results/$Box.html" set LesLocPossiblesGen [QuellesSontLocPossibles $Box] set formatstring "%-28s" foreach LocPossibleGen $LesLocPossiblesGen { set longloc [llength [split $LocPossibleGen ""]] if {$longloc<5} {set longloc 5} append formatstring " %${longloc}s" } set finalTete [format "$formatstring" Name {*}$LesLocPossiblesGen] lappend LesLignesResult $finalTete foreach Ligne [LesLignesDuFichier $File] { if {![regexp "^\<" $Ligne]} { set LesValues {} set LesLocPossibles $LesLocPossiblesGen set Name [lindex [split $Ligne " "] 0] set index1 [expr [string first "/" $Ligne] +4] set index2 [expr [string first "\<" $Ligne $index1] - 1 ] set LocDeName [string range $Ligne $index1 $index2] set LesLocDeName [split $LocDeName ","] foreach LocPossible $LesLocPossibles { set trouve 0; set indexelmt -1 foreach elmt $LesLocDeName { incr indexelmt set elmt [string trim $elmt] set LesMots [split $elmt ":"] set tete [lindex $LesMots 0] set valeur [lindex $LesMots 1] if {$LocPossible == $tete} { set trouve 1 lappend LesValues $valeur set LesLocPossibles [lreplace $LesLocPossibles 0 0] set LesLocDeName [lreplace $LesLocDeName $indexelmt $indexelmt] break } } if {!$trouve} {lappend LesValues " -"} } set final [format $formatstring $Name {*}$LesValues] lappend LesLignesResult $final } } SauveLesLignes $LesLignesResult dans "[RepertoireDuGenome]/Loc/$Box" } } proc Tabular2HTML {aT} { upvar $aT tbl if {[set id $tbl(Id)] ne ""} { Html_Append "
    " } else { Html_Append "
    " } Html_Append "" Html_Append "" if {$tbl(TitleCols) != {}} { Html_Append "" foreach c $tbl(TitleCols) { if {$c eq "NULL"} {set c ""} Html_Append "" } Html_Append "" } #puts "nbr cols [llength [lindex [set tbl(Rows)] 0]]" #puts "nbr rows [llength [set tbl(Rows)]]" #puts "typecols $tbl(TypeCols)" if {! [info exists tbl(Rows)]} { set tbl(Rows) [list] } for {set i 0} {$i < [llength [lindex $tbl(Rows) 0]]} {incr i} { set classe($i) "" if {[info exists tbl(TypeCols)]} { set type [lindex $tbl(TypeCols) $i] if {$type eq "R" || $type eq "I"} { set classe($i) "class='rightalign'" } } } foreach lrow $tbl(Rows) { Html_Append "" set i 0 foreach c $lrow { if {$c eq "NULL"} {set c ""} Html_Append "" incr i } Html_Append "" } Html_Append "" Html_Append "
    $c
    $c
    " Html_Append "
    " return } proc Tabular2Text {aT} { upvar $aT tbl global TextOut # determine columns widths set TotLg 0 for {set i 0} {$i < [llength [lindex [set tbl(Rows)] 0]]} {incr i} { set lgt [PlusLongEltDe [ExtraitListeDeListe $tbl(Rows) $i]] if {$tbl(TitleCols) != {}} { set c [lindex $tbl(TitleCols) $i] if {$c eq "NULL"} {set c ""} set l [string length $c] if {$l > $lgt} {set lgt $l} } set TFmt($i) [list " %${lgt}s |" $lgt] incr TotLg $lgt incr TotLg 3 ; # white space + | } incr TotLg ; # leading | # fill the table set sep [string repeat - $TotLg] lappend TextOut "" lappend TextOut $sep if {$tbl(TitleCols) != {}} { set i 0 set textcol "|" foreach c $tbl(TitleCols) { if {$c eq "NULL"} {set c ""} lassign [set TFmt($i)] fmt tmp append textcol [format $fmt $c] incr i } lappend TextOut $textcol lappend TextOut $sep } foreach lrow $tbl(Rows) { set tcol "|" set i 0 foreach c $lrow { if {$c eq "NULL"} {set c ""} lassign [set TFmt($i)] fmt tmp append tcol [format $fmt $c] incr i } lappend TextOut $tcol } lappend TextOut $sep lappend TextOut "" return } proc TabulonsSansQuote {Fichier {TabIn ""} {TabOut ""} {ReplaceTabOut ""} {GetWhat ""}} { if {$GetWhat==""} { set Getwhat "GetFilename" } if {[regexp -nocase "Tab" $TabIn]} { set TabIn "\t" } if {$TabOut==""} { set TabOut ";" } if {$ReplaceTabOut==""} { set ReplaceTabOut " " } set Nouveau "$Fichier.NEW" set Export "$Fichier.EXPORT" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^#" $Ligne]} {continue} set LesMots [LesMotsDeLaLigneTabulee $Ligne $TabIn] set LesBons {} foreach Mot $LesMots { if {0 && [regexp $TabOut $Mot]} { FaireLire $Mot } regsub -all $TabOut $Mot $ReplaceTabOut Bon lappend LesBons $Bon } set Bons [join $LesBons $TabOut] lappend LeNouveau $Bons } if {$GetWhat=="GetListOfHeaderValues"} { return $LeNouveau } set Headers [lindex $LeNouveau 0] if {$GetWhat=="GetHeaders"} { return $Headers } if {$GetWhat=="GetListOfHeaders"} { return [split $Headers $TabOut] } set LesNouvellesValeurs [lrange $LeNouveau 1 end] if {$GetWhat=="GetListOfValues"} { return $LesNouvellesValeurs } SauveLesLignes $LesNouvellesValeurs dans $Export return [SauveLesLignes $LeNouveau dans $Nouveau] } proc Tag2MolObjAtm {i} { set x [expr {[string length $i]-4}] scan $i "%${x}d%02d%02d" atm iobj imol set mol [lindex $::StrucAVoir $imol] set mol "::[DonneIdDeAccessPDB $mol]" set obj [lindex [$mol _ListeObjets] $iobj] return [list $mol $obj $atm] } proc TagLaFenetre {args} { global NomTextSeq LSOrdali if {$::TypeSeq eq "DNA"} { set Lgaa [list A G C T U] set Lfreg [list A G C T U] } else { # set Lgaa [list STAC DE IJLMV FYW P RK Q G HN] # take one representative per group set Lgaa [list S D I F P R Q G H] set Lfreg [list "S|T|A|C" "D|E" "I|J|L|M|V" "F|Y|W" "P" "R|K" "Q" "G" "H|N"] } $NomTextSeq configure -state normal lassign [$::TScrollX get] fx1 fx2 lassign [$::TScrollY get] fy1 fy2 set w [LongueurDeLAlignement] set h [llength $LSOrdali] set xm [expr {int($fx1*$w)-1}] set xx [expr {int($fx2*$w)+1}] set ym [expr {int($fy1*$h)-1}] set yx [expr {int($fy2*$h)+1}] foreach a $Lgaa freg $Lfreg { $NomTextSeq tag remove Tag$a 1.0 end set lt {} for {set y $ym ; set yt [expr {$ym-1}]} {$y <= $yx} {incr y ; incr yt} { # set yt [expr {$y-1}] set t [string range [lindex $LSOrdali $yt] $xm $xx] set lv [regexp -all -inline -indices -- $freg $t] foreach e $lv { lassign $e d f lappend lt $y.[expr {$d+$xm+1}] $y.[expr {$f+$xm+2}] } } if {$lt != {}} { $NomTextSeq tag add Tag$a {*}$lt } } $NomTextSeq configure -state disabled return } proc TagNode {AId} { global Abr set t [set Abr(Arbre,$AId)] set PAD [set Abr($AId,PAD)] set Li [$PAD gettags [$PAD find withtag current]] if {[set ix [lsearch -regexp $Li "rota-"]] ==-1} { return } set i [lindex $Li $ix] set n [$t attr $i] set Abr($AId,NodeSel) $n set Lbox [$PAD bbox $i] set Id [$PAD create oval $Lbox -fill black -outline black -tags IdNodeSel] set Li [$PAD find withtag rotation] foreach i $Li { $PAD itemconfig $i -fill white -outline white } $PAD lower rotation $PAD bind rotation "" $PAD bind IdNodeSel [list $PAD delete IdNodeSel ; set Abr($AId,NodeSel) ""] return } proc TagNomsSelectionnes {} { foreach e $::NomSeqSel { $::NomNomSeq tag add InvNm $e "$e wordend" } return } proc TagSeqsGroupees {} { global ListeSeqsGroupees global LNSeqlab global NomNomSeq foreach t [array names ListeSeqsGroupees] { set Tcol "TC$t" set Ls [set ListeSeqsGroupees($t)] foreach s $Ls { set i [lsearch $LNSeqlab $s] $NomNomSeq tag cell $Tcol $i,0 } } return } proc Tagoff {Value Index K} { global CouleurTag set CouleurTag "CouleurTagParDefaut" } proc Tagon {Value Index K} { global CouleurTag set CouleurTag $Value } proc TagsDuDump {d} { set Ltags {} set YaFnd 0 set TOn 0 set TOff 0 set ld [split $d " "] foreach {k v i} $ld { if {$v eq "InvS"} {continue} if {$v eq "Fnd" && !$YaFnd} { lappend Ltags $v 0 "end-1c" set YaFnd 1 } if {$k eq "tagon"} { lassign [split $i "."] y1 x1 set TOn 1 } if {$k eq "tagoff"} { lassign [split $i "."] y2 x2 if {! $TOn} {set x1 -1} lappend Ltags $v $x1 $x2 set TOn 0 } } if {$TOn} {lappend Ltags $v $x1 "Fin"} return $Ltags } proc TagsGenerauxFenetre {} { $::NomNomSeq tag configure InvNm -background black -foreground white $::NomNomSeq tag configure NrmNm -background white -foreground black return } proc TailleDeLAcNuc_PageInfo {PageInfo} { set Taille "" foreach Ligne [split $PageInfo "\n"] { if {![string equal -nocase [string range $Ligne 0 5] "LOCUS "]} {continue} regexp -nocase {([0-9]+) bp} $Ligne tmp Taille break } return $Taille } proc TailleDeLAccess {Access {Banque ""}} { set PageInfo [PageInfo $Access protein id] if {$PageInfo != ""} { return [TailleDeLaProt_PageInfo $PageInfo] } else { set PageInfo [PageInfo $Access genbankfull id] return [TailleDeLAcNuc_PageInfo $PageInfo] } return } proc TailleDeLaBanque {Banque} { set Taille 0 foreach F [glob -nocomplain $Banque.*] { set Size [file size $F] incr Taille $Size } return "$Taille [expr $Taille/1000 + 1]KO [expr $Taille/1000000 + 1]MO [expr $Taille/1000000000 + 1]GO" } proc TailleDeLaProt_PageInfo {PageInfo} { set Taille "" foreach Ligne [split $PageInfo "\n"] { if {![string equal -nocase [string range $Ligne 0 2] "ID "]} {continue} regexp -nocase {([0-9]+) AA} $Ligne tmp Taille break } return $Taille } proc TailleDeLaQueryDuBlast {FichierBlast} { if {[file exists $FichierBlast]} { set F [open $FichierBlast] set nHits 0 set Taille "" while {[gets $F Ligne]>=0} { if {[regexp "\[0-9\,]* letters" $Ligne tmp]} { regsub " letters" $tmp "" Taille regsub "\," $Taille "" Taille break } } close $F return "$Taille" } else { return "" } } proc TailleDeLaSequenceDuFichierTFA {FichierTFA} { if {![file exists $FichierTFA]} {return ""} return [string length [string trim [QueLaSequenceDuFichierTFA $FichierTFA]]] } proc TailleDesAffymetrix {} { #cette proc fait des tas #ici de 1000 #pour les sequences <10000 foreach Nom [ListeDesPABs] { set L [SeqLength $Nom] if {$L>10000} { continue } set L [expr $L/1000] lappend LesLongueurs $L } Histogramme $LesLongueurs Graphe } proc TailleDesInsertions_article {RepMACSResults Famille FichierMACS} { Wup "Permet de calculer la taille moyenne, le min et le max des insertions des ARPs" Wup "Besoin un alignement au format msf sans features" set AccessDeRef "P02568" set LesFichiersASupprimer "" #1 Liste des Access a traiter a priori ###################################### set LesQuery_tmp [InterrogeLesInfosDesARPs $Famille LesAccess] # Recuperation des Access effectivement dans l alignement DecortiqueUnMSF $FichierMACS LesNoms Sequences set LesQuery "" foreach Q $LesQuery_tmp { if {! [regexp $Q $LesNoms]} {continue} lappend LesQuery $Q } set Query [join $LesQuery "\n"] #2 Recherche des positions equivalentes pour ces insertions dans la query ######################################################################### # Les positions des insertions dans la sequence de reference set LesPositionsDesDomaines [InterrogeLesDomainesDesARPs $Famille $AccessDeRef IN LesPositions] if {$LesPositionsDesDomaines==""} {return "-2"} # Creation du fichier pour aller questionner l alignement avec aln_pos set LesDFPositionsDesDomaines "" foreach Position $LesPositionsDesDomaines { lappend LesDFPositionsDesDomaines $Position lappend LesDFPositionsDesDomaines [expr $Position + 1] } set LesDFPositionsDesDomaines [join $LesDFPositionsDesDomaines " "] if {$LesDFPositionsDesDomaines == ""} {return "-2"} set FichierPosDomTmpDeRef "$RepMACSResults/PosDomTmpDeRef_${Famille}" if {[file exists $FichierPosDomTmpDeRef]} {file delete -force $FichierPosDomTmpDeRef} set LesLignes [list $AccessDeRef $LesDFPositionsDesDomaines $Query] AppendAuFichier $FichierPosDomTmpDeRef [join $LesLignes "\n"] set LesLignes "" lappend LesFichiersASupprimer $FichierPosDomTmpDeRef # On questionne l alignement avec aln_pos # On recherche les positions des insertions de la ref dans notre query pour toutes les insertions # Creation d un fichier contenant les positions equivalentes qui ont ete recherchees pour la query set FichierResTmp "$RepMACSResults/PosDomEquiTmpDeRef_${Famille}" if {[file exists $FichierResTmp]} {file delete -force $FichierResTmp} set Result [RetrievePositionsInMACS "$FichierMACS" $FichierPosDomTmpDeRef "$FichierResTmp"] if {$Result=="-1"} {Espionne "Pb RetrieveResidueInMACS";return ""} lappend LesFichiersASupprimer $FichierResTmp # Boucle sur les couples de positions (debut et fin) de la query pour tous les domaines set LesDFPositionsDesDomaines [split $LesDFPositionsDesDomaines " "] foreach Acc $LesQuery { set LesPositions [InterrogeRetrievePositionsInMACS $FichierResTmp $Acc LesPositions] foreach {DomainD DomainF} $LesPositions {RefD RefF} $LesDFPositionsDesDomaines { #Verification des positions initiales pour les extremites N-Ter et C-Ter #si N-Ter on remet la position de debut a 1 #si C-Ter on ne touche pas car le prog de Julie va prendre la fin automatiquement (bug ??) if {$RefD=="1"} { #On a une extension en N-Terminal set DomainD 1 } #3 Calcul de la taille de l insertion pour la query ################################################### set TailleInsertQuery [expr $DomainF - $DomainD] if {! [info exists TabDomain($RefD)]} { set TabDomain($RefD) "" } if {! [info exists TabDomain($RefD,Min)]} { set TabDomain($RefD,Min) 100000000000 } if {! [info exists TabDomain($RefD,Max)]} { set TabDomain($RefD,Max) 1 } lappend TabDomain($RefD) $TailleInsertQuery if {$TailleInsertQuery > [set TabDomain($RefD,Max)]} { set TabDomain($RefD,Max) $TailleInsertQuery } if {$TailleInsertQuery < [set TabDomain($RefD,Min)]} { set TabDomain($RefD,Min) $TailleInsertQuery } #Espionne "$Acc -- $RefD - $DomainF / $DomainD - $TailleInsertQuery" } } #4 Affichage des resultats ########################## Espionne "$Famille" Espionne "PosRef\tMeanLength\tMinLength\tMaxLength" foreach {D F} $LesDFPositionsDesDomaines { set LesDebutTaille [set TabDomain($D)] set Nb [llength $LesDebutTaille] set Mean [expr 1.0*(([join $LesDebutTaille "+"])/$Nb)] Espionne "$D\t$Mean\t[set TabDomain($D,Min)]\t[set TabDomain($D,Max)]" } #5 Suppression des fichiers ########################### foreach F $LesFichiersASupprimer { if {[file exists $F]} {file delete -force $F} } return "" } proc TailleDesJunkdirs {{Quoi ""}} { Wup "Donne la taille des junkdirs des personnes appartenant au groupe Poch" set CoefDiv 1 if {$Quoi==""} {set Quoi enmega } if {$Quoi=="enkilo"} {set CoefDiv 1e3} if {$Quoi=="enmega"} {set CoefDiv 1e6} set Listing [lsort [glob -nocomplain "/groupes/poch/*"]] foreach element $Listing { if {! [file isdirectory $element]} {continue} lappend ListePoch $element } foreach Repertoire $ListePoch { set NomAAfficher "Junkdir de " if {[File exists "$Repertoire/junkdir"]} { regsub "/groupes/poch/" $Repertoire "" QuiCest append NomAAfficher $QuiCest set TailleRepJunkdir [TailleDuRepertoire "$Repertoire/junkdir"] Espionne [format "%-25s%13d" $NomAAfficher [expr round($TailleRepJunkdir*1.0/$CoefDiv)]] } continue } } proc TailleDesSeq {LesQuery} { set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set Repnuctfa "[RepertoireDuGenome]/nuctfa" if {$LesQuery=="LaTotale"} {set LesQuery [ListeDesPABs]} foreach PAB $LesQuery { if {[file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else {Espionne "No File for the Query ($PAB)";continue} Espionne "$PAB [string length [QueLaSequenceDuFichierTFA $FichierQuery]]" } } proc TailleDesSequencesAAligner {{Liste ""}} { set EnDetails 0 if {$Liste==""} { set Liste [ListeDesPABs] } if {[EstUnPAB $Liste]} { set EnDetails 1 set Liste [list $Liste] set LesLongueursAccess {} } foreach Nom $Liste { set Fichier "[RepertoireDuGenome]/tfasdescopains/$Nom" if { ! [file exists $Fichier]} { continue } set MinLong 999999 set MaxLong 0 set LesLongueurs {} foreach Access [LaSequenceDuTFAs $Fichier "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $Fichier $Access] set Long [string length [QueLaSequenceDuTexteTFA $TFA]] lappend LesLongueurs $Long if {$EnDetails} { set Entete [EnteteDuTexteTFA $TFA] lappend LesLongueursAccess "$Long $Entete" } set MinLong [Mini $MinLong $Long] set MaxLong [Maxi $MaxLong $Long] } set LesLongueurs [lsort -integer $LesLongueurs] if {$EnDetails} { set LesLongueursAccess [lsort -index 0 -integer $LesLongueursAccess] return [AfficheVariable [join $LesLongueursAccess "\n"] "AvecFetch" "SequenceLengthesOf/$Fichier"] } if {$MaxLong<1000} { continue } lappend ToutesLesLongueurs "$Nom $MaxLong" } if {$EnDetails} { exit } set ToutesLesLongueurs [lsort -index 1 -integer $ToutesLesLongueurs] SauveLesLignes $ToutesLesLongueurs dans "[RepertoireDuGenome]/fiches/toutesleslongueurs" exit } proc TailleDesTFAsDesCopains {} { foreach Nom [ListeDesPABs] { set FiTFAs [GscopeFile $Nom "tfasdescopains"] if {[FileAbsent $FiTFAs]} { incr C(-1) ; lappend T(-1) $Nom; continue } set TFAs [ContenuDuFichier $FiTFAs] set N [regexp -all ">" $TFAs] if { 0 <= $N && $N < 1 } { incr C(0) ; lappend T(0) $Nom; continue } if { 1 <= $N && $N < 2 } { incr C(1) ; lappend T(1) $Nom; continue } if { 2 <= $N && $N < 3 } { incr C(2) ; lappend T(2) $Nom; continue } if { 3 <= $N && $N < 10 } { incr C(7) ; lappend T(7) $Nom; continue } set D 0 set I 10 while {$D < 500} { incr D $I ; set F $D ; incr F $I ; set M [expr ($D+$F)/2] if { $D <= $N && $N < $F } { incr C($M) ; lappend T($M) $Nom; break } } } foreach N [lsort -integer [array names C]] { if {$C($N) > 10 } { lappend LeResultat "$N $C($N)" } else { lappend LeResultat "$N $C($N) $T($N)" } } AfficheListe $LeResultat } proc TailleDuChromosomeEnMb {Chromo} { set LesTailles [list 0 245 243 199 191 180 170 158 145 134 135 134 133 114 105 100 90 81 77 63 63 46 49 152 50 1] if {$Chromo=="LaListeMerci"} { return [lrange $LesTailles 1 end] } if { ! [regexp -nocase {^HS[0-9]{2}$|^HS[XY]{1}$|^HSun$} $Chromo]} { return -1 } regsub -nocase "X" $Chromo 23 Chromo regsub -nocase "Y" $Chromo 24 Chromo regsub -nocase "un" $Chromo 25 Chromo regsub -all {[^0-9]} $Chromo "" Numero regsub "^0" $Numero "" Numero if {0<$Numero && $Numero <26} { return [lindex $LesTailles $Numero] } return -2 } proc TailleDuContig {Chromosome Contig {nChiffres ""}} { if {$nChiffres == ""} {set nChiffres [NbDeChiffresPourLeFragmentDuContig $Chromosome $Contig]} set Fragment [string repeat 0 $nChiffres] if {$nChiffres != 0} { set BId "$Chromosome:${Contig}_$Fragment" } else { set BId "$Chromosome:$Contig" } set LaFiche [LaSequenceDesBanques $BId $BId AccessOk "OnVeutNature"] if {$LaFiche == {} } {return ""} foreach Ligne $LaFiche { if {![regexp "^LOCUS" $Ligne]} {continue} scan $Ligne "%s %s %d" LOCUS Contig Taille break } return $Taille } proc TailleDuDescriptifDuBlastP {{Ask ""}} { global RepertoireDuGenome global GscopeDir global TailleDuDescriptifDuBlastP set Ask [regexp -nocase "^Ask$" $Ask] if {! $Ask && [info exists TailleDuDescriptifDuBlastP]} { return $TailleDuDescriptifDuBlastP } set FichierTaille "$RepertoireDuGenome/fiches/sizedescriptif" if { $Ask || ! [file exists $FichierTaille]} { set FichierTailleDefaut "$GscopeDir/gscope_sizedescriptif" if {[file exists $FichierTailleDefaut] && [OuiOuNon "Do I copy the file \n $FichierTailleDefaut\n to $FichierTaille\n ?"]} { File copy $FichierTailleDefaut $FichierSortie } else { while {[OuiOuNon "Do You want to load an existing file with sizes for description ?"]} { set F [ButineArborescence "All" $RepertoireDuGenome] if {$F==""} { continue } if {[OuiOuNon "Do I copy it to $FichierTaille ?"]} { File copy -force $F $FichierTaille } else { set FichierTaille $F } break } } } if {[file exists $FichierTaille]} { set VT [ContenuDuFichier $FichierTaille] } else { set VT "90 120 30 10. respectively : at_least max_with_complete_genomes max_pdb expect" set Ask 1 } while {$Ask && [OuiOuNon "Do You want to modify the sizes ?"]} { set NewVT [Entre $VT] if {$NewVT==""} { continue } set VT $NewVT if {[OuiOuNon "Do I save these values in $FichierTaille ?"]} { Sauve $VT dans $FichierTaille } } set TailleDuDescriptifDuBlastP $VT return $VT } proc TailleDuRepertoire {{Repertoire ""}} { Wup "Rend la taille d'un repertoire" if {$Repertoire==""} {return 0} set Taille 0 foreach file [glob -nocomplain "$Repertoire/*"] { set Taillefile 0 if {![File readable $file]} {continue} set Taillefile [File size $file] #Espionne "$file $Taillefile" if {[File isdirectory $file]} { set Taille [expr [TailleDuRepertoire $file] + $Taille] } else { set Taille [expr $Taillefile + $Taille] } } return $Taille } proc TailleEchantillon {FichierCod} { set TailleEchantillon 0 foreach Ligne [LesLignesDuFichier $FichierCod] { set Ligne [string trim $Ligne] if {$Ligne==""} {continue} if {[regexp {^Gly} $Ligne]} { set VuDebut 1 scan $Ligne "%s %s %s" aa cod n set TailleEchantillon [expr $TailleEchantillon +$n] } else { if {![info exists VuDebut]} {continue} if {[info exists VuDebut]} { scan $Ligne "%s %s %s" aa cod n set TailleEchantillon [expr $TailleEchantillon +$n] } } } return $TailleEchantillon } proc TailleFonte {incr} { set size [font configure SeqFont -size] incr size $incr # keep font sizes sane... if {$size >= 6 && $size <= 32} { font configure SeqFont -size $size } else { return } if {[QuelMode] eq "seqlab"} { #puts "change fonte $incr" set wgt [font configure SeqFont -weight] set fam [font configure SeqFont -family] set fam [string map [list " " ""] $fam] $::NomTextSeq font family $fam size $size weight $wgt if {$incr > 0} { #$::NomTextSeq font bigger } else { #$::NomTextSeq font smaller } } update ReDessineLesScores FenetreAuCentre $::NomFenetreOrdali return } proc TailleMoyenne {ExonOuIntron NumeroExonOuIntron {org human_hg18} {fromwhere refGene}} { CanalSqlUcsc $org # Donne la taille moyenne d'un exon ou d'un intron donné sur un ensemble de génes if { [regexp -nocase "Last" $ExonOuIntron]} { regsub -all -nocase "Last" $ExonOuIntron "" ExonOuIntron set NumeroExonOuIntron "Last" } # Initialisation : set Liste {} set StartsDuCount {} set EndsDuCount {} set I 0 set J 0 set LongueurTotale 0 # Déclaration des fichiers if {$fromwhere==""} { set fromwhere "refGene" } set Numero $NumeroExonOuIntron if {$NumeroExonOuIntron == "Last"} { set NumeroExonOuIntron 1} if { $ExonOuIntron == "Intron" || $ExonOuIntron == "IntronLast"} { set Where "exonCount > $NumeroExonOuIntron" } if { $ExonOuIntron == "Exon" || $ExonOuIntron == "ExonLast"} { set Where "exonCount >= $NumeroExonOuIntron" } set ListeDesExonsStarts {} set ListeDesExonsEnds {} set timestamp [clock format [clock seconds] -format "%H:%M:%S"] set Query "select name from ucsc$org.$fromwhere where $Where order by txStart" foreach name [SqlExec $Query] { lappend ListeName $name } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "TailleMoyenne|$timestamp : Stockage des exonCount" set Query "select exonCount from ucsc$org.$fromwhere where $Where order by txStart" foreach exonCount [SqlExec $Query] { lappend ListeCount $exonCount } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "TailleMoyenne|$timestamp : Stockage des Start" set Query "select exonStarts from ucsc$org.$fromwhere where $Where order by txStart" foreach start [SqlExec $Query] { lappend ListeStart $start } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "TailleMoyenne|$timestamp : Stockage des End" set Query "select exonEnds from ucsc$org.$fromwhere where $Where order by txStart" foreach end [SqlExec $Query] { lappend ListeEnd $end } #Espionne "TailleMoyenne|$timestamp : Stockage des Strand" set Query "select strand from ucsc$org.$fromwhere where $Where order by txStart" foreach strand [SqlExec $Query] { lappend ListeStrand $strand } set NumeroExonOuIntron $Numero foreach Count $ListeCount { set Strand [lindex $ListeStrand $I] set Acc [lindex $ListeName $I] set StartsDuCount [split [lindex $ListeStart $I] ","] set EndsDuCount [split [lindex $ListeEnd $I] ","] set Numero $NumeroExonOuIntron if {$NumeroExonOuIntron == "Last" && $ExonOuIntron == "Intron"} { set NumeroExonOuIntron [expr $Count - 1] } if {$NumeroExonOuIntron == "Last" && $ExonOuIntron == "Exon"} { set NumeroExonOuIntron $Count } incr I if { $Strand == "+"} { if {$ExonOuIntron == "Exon" } { set Start [lindex $StartsDuCount [expr $NumeroExonOuIntron - 1]] set End [lindex $EndsDuCount [expr $NumeroExonOuIntron - 1]] } else { set Start [lindex $EndsDuCount [expr $NumeroExonOuIntron - 1]] set End [lindex $StartsDuCount $NumeroExonOuIntron] } } else { # Attention : la liste des exons se terminant aussi par une virgule, les listes contiennet un élément vide é la fin if {$ExonOuIntron == "Exon" } { set Start [lindex $StartsDuCount [expr $Count - $NumeroExonOuIntron ]] set End [lindex $EndsDuCount [expr $Count - $NumeroExonOuIntron]] } else { set Start [lindex $EndsDuCount [expr $Count - 1 - $NumeroExonOuIntron]] set End [lindex $StartsDuCount [expr $Count - $NumeroExonOuIntron]] #Espionne "$Acc $Strand $Start $End" } } if { $Start != "" && $End != ""} { incr J set LongueurExonOuIntron [expr $End - $Start + 1] set LongueurTotale [expr $LongueurTotale + $LongueurExonOuIntron] } set NumeroExonOuIntron $Numero } set LongueurMoyenne [expr round($LongueurTotale/$J)] #Espionne "===========================================" #Espionne " Statistiques du traitement TailleMoyenne =" #Espionne "===========================================" #Espionne " " #Espionne "* Organisme considere: $org" #Espionne "* Entite consideree: $ExonOuIntron $NumeroExonOuIntron" #Espionne "* Nombre de genes possedant cette entite : $I" #Espionne "* Nombre de genes corrects possédant cette entite : $J" #Espionne "* Somme des longueurs de cette entite : $LongueurTotale pb" #Espionne "* Longueur moyenne de cette entite: $LongueurMoyenne pb" #Espionne " " return $LongueurMoyenne } proc TailleProteome {Qui} { global TailleProteome if {[OnTraite "OI2017" "Like"]} { return [OiProteomeSize $Qui] } if {[info exists TailleProteome($Qui)]} { return $TailleProteome($Qui) } if {[info exists TailleProteome("EstCharge")]} { return -1 } set TailleProteome("EstCharge") 1 set Fichier "[RepertoireDuGenome]/banques/Proteome201501_TaillesDesOs.txt" foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp {^([0-9]+)[ \t].+_([0-9]+)} $Ligne Match Taille TaxId]} { continue } set TailleProteome($TaxId) $Taille } set TailleProteome(9606) 20193 ; #rR dans la banque il y en a 66922 #rR on n'a gardé que les swissprot return [TailleProteome $Qui] } proc TailleSequenceEPDOuDBTSS {EPDOuDBTSS} { if {$EPDOuDBTSS == "EPD"} {set TailleSequenceEPDOuDBTSS 600} if {$EPDOuDBTSS == "DBTSS"} {set TailleSequenceEPDOuDBTSS 1200} return $TailleSequenceEPDOuDBTSS } proc TailleSortiePourDBClustal {{Ask ""}} { global RepertoireDuGenome global GscopeDir global TailleSortiePourDBClustal set Ask [regexp -nocase "^Ask$" $Ask] if {! $Ask && [info exists TailleSortiePourDBClustal]} { return $TailleSortiePourDBClustal } set FichierTailleSortie "$RepertoireDuGenome/fiches/sizemsf" if { $Ask || ! [file exists $FichierTailleSortie]} { set FichierTailleSortieDefaut "$GscopeDir/gscope_sizemsf" if {[file exists $FichierTailleSortieDefaut] && [OuiOuNon "Do I copy the file \n $FichierTailleSortieDefaut\n to $FichierTailleSortie\n ?"]} { File copy $FichierTailleSortieDefaut $FichierTailleSortie } else { while {[OuiOuNon "Do You want to load an existing file with output sizes for dbclustal ?"]} { set F [ButineArborescence "All" $RepertoireDuGenome] if {$F==""} { continue } if {[OuiOuNon "Do I copy it to $FichierTailleSortie ?"]} { File copy -force $F $FichierTailleSortie } else { set FichierTailleSortie $F } break } } } if {[file exists $FichierTailleSortie]} { set VT [ContenuDuFichier $FichierTailleSortie] } else { set VT "40 70 30 0.001 respectively : at_least max_with_complete_genomes max_pdb expect" set Ask 1 } while {$Ask && [OuiOuNon "Do You want to modify the output sizes ?"]} { set NewVT [Entre $VT] if {$NewVT==""} { continue } set VT $NewVT if {[OuiOuNon "Do I save these values in $FichierTailleSortie ?"]} { Sauve $VT dans $FichierTailleSortie } } set TailleSortiePourDBClustal $VT return $VT } proc TaisToi {{Silence ""}} { if {$Silence eq ""} {set Silence 1} if {$Silence} { if {"putsCmdOriginale" ni [info commands]} { rename ::puts ::putsCmdOriginale rename ::PutsDuTaisToi ::puts } } else { if {"putsCmdOriginale" in [info commands]} { rename ::puts PutsDuTaisToi rename ::putsCmdOriginale ::puts } } return } proc Tamis {{TamisOuListe ListeDesPABs} {Action ForAll} {TamisOuListe2OuGrilleOuCritere X} {Operateur ""} {Valeur ""}} { if {[regexp "^NewTamis" $TamisOuListe]} { regsub "NewTamis" $TamisOuListe "" Action set TamisOuListe "X" set TamisOuListe2OuGrilleOuCritere "X" } if {$TamisOuListe=="X"} { set NomTamisEntrant [ChoisisUnTamis "ChampNom"] if {$NomTamisEntrant==""} { return {} } set ComTamisEntrant [LeTamis $NomTamisEntrant] } elseif {[LeTamis $TamisOuListe]!="TamisInconnu"} { set NomTamisEntrant $TamisOuListe set ComTamisEntrant [LeTamis $NomTamisEntrant] } else { set NomTamisEntrant $TamisOuListe set ComTamisEntrant $TamisOuListe } if {[regexp -nocase "ForAll" $Action]} { if {$ComTamisEntrant=="TamisInconnu"} { return {} } return [eval $ComTamisEntrant] } if {[regexp -nocase "And|Or|ButNot" $Action]} { set TamisOuListe2 $TamisOuListe2OuGrilleOuCritere if {$TamisOuListe2=="X"} { set NomTamisEntrant2 [ChoisisUnTamis "ChampNom"] if {$NomTamisEntrant2==""} { return {} } set ComTamisEntrant2 [LeTamis $NomTamisEntrant2] } elseif {[LeTamis $TamisOuListe2]!="TamisInconnu"} { set NomTamisEntrant2 $TamisOuListe2 set ComTamisEntrant2 [LeTamis $NomTamisEntrant2] } else { set NomTamisEntrant2 $TamisOuListe2 set ComTamisEntrant2 $TamisOuListe2 } set Commande "Tamis $NomTamisEntrant $Action $NomTamisEntrant2" NommeEtStockeLeTamis $Commande if {$ComTamisEntrant=="TamisInconnu"} { set ListeDeNoms1 {} } else { set ListeDeNoms1 [eval $ComTamisEntrant] } if {$ComTamisEntrant2=="TamisInconnu"} { set ListeDeNoms2 {} } else { set ListeDeNoms2 [eval $ComTamisEntrant2] } switch [string toupper $Action] { "AND" { return [ListsIntersection $ListeDeNoms1 $ListeDeNoms2] } "OR" { return [ListsUnion $ListeDeNoms1 $ListeDeNoms2] } "BUTNOT" { return [ListsComplement $ListeDeNoms1 $ListeDeNoms2] } } FaireLire "Y a un probleme dans Tamis" return {} } if {[regexp -nocase "Where" $Action]} { set NoMayBe "NoMayBe" set GrilleOuCritere $TamisOuListe2OuGrilleOuCritere if {$Operateur==""} { set Grille $GrilleOuCritere if {$Grille=="X"} { set Grille [ChoisisUneGrille] } set NoMayBe $Grille set COV [NoCo "Commande" $Grille] ScanCOV $COV Critere Operateur Valeur } else { set Critere $GrilleOuCritere } if {$Critere=="X"} { set Critere [ChoisisLeCritere] if {$Critere==""} { set Critere "AlwaysTrue" set Operateur "==" set Valeur "1" } } if {$Operateur=="X"} { set Operateur [ChoixDansLaListe {"<" "<=" "==" ">=" ">" "!=" "Contains" "NotContains"} ] } if {$Valeur=="X"} { set Valeur [Entre] } if {$Valeur=="?"} { set QuestionnerToujours 1 set Valeur [Entre] } else { set QuestionnerToujours 0 } if {$QuestionnerToujours} { set COV "$Critere $Operateur ?" } else { set COV "$Critere $Operateur $Valeur" } set Grille [NoCo "MieuxNommer" $NoMayBe $COV] set Commande "Tamis $NomTamisEntrant $Action $Grille" NommeEtStockeLeTamis $Commande set LesBons {} set CasFavorables {} switch $Operateur { "<" { set CasFavorable {"-1"} } "<=" { set CasFavorable {"-1" "0"} } "==" { set CasFavorable {"0"} } ">=" { set CasFavorable {"0" "1"} } ">" { set CasFavorable {"1"} } "!=" { set CasFavorable {"-1" "1"} } default { set CasFavorable "1" } } regsub {\?$} $Valeur "" Valeur if {$ComTamisEntrant=="TamisInconnu"} { return {} } set ListeDeNoms [eval $ComTamisEntrant] set AutresArgs "" set SesArgs [info args $Critere] set nArgs [llength $SesArgs] if {$nArgs>1} { FaireLire "$Critere \{$SesArgs\} need [incr nArgs -1] additionnal arguments. Please give me them." set AutresArgs [Entre] } foreach Nom $ListeDeNoms { if {$AutresArgs==""} { set ValeurCalculee [eval $Critere $Nom] } else { set ValeurCalculee [eval $Critere $Nom $AutresArgs] } if {$Operateur=="Contains"} { set T [regexp -nocase "$Valeur" "$ValeurCalculee"] } elseif {$Operateur=="NotContains"} { set T [expr ! [regexp -nocase "$Valeur" "$ValeurCalculee"]] } else { if { ! [catch {if {[expr $ValeurCalculee $Operateur $Valeur]} { lappend LesBons $Nom }}]} { continue } set T [string compare $ValeurCalculee $Valeur] } foreach Cas $CasFavorable { if {$T==$Cas} { lappend LesBons $Nom break } } } return $LesBons } if {[regexp -nocase "Keep" $Action]} { set NoMayBe "NoMayBe" set Critere $TamisOuListe2OuGrilleOuCritere if {$Critere=="X"} { set Critere [ChoisisLeCritere] if {$Critere==""} { set Critere "AlwaysTrue" } } set COV [NoCo "Commande" $Critere] if {$COV!=""} { set NoNomme $Critere set Critere $COV } else { # on pourrait y rajouter des args supplementaires pris dans operateur et valeur set COV $Critere set NoNomme [NoCo "MieuxNommer" $NoMayBe $COV] } set Commande "Tamis $NomTamisEntrant $Action $NoNomme" NommeEtStockeLeTamis $Commande set LesBons {} if {$ComTamisEntrant=="TamisInconnu"} { return {} } set ListeDeNoms [eval $ComTamisEntrant] set AutresArgs "" set SesArgs [info args $Critere] set nArgs [llength $SesArgs] if {$nArgs>1} { FaireLire "$Critere \{$SesArgs\} need [incr nArgs -1] additionnal arguments. Please give me them." set AutresArgs [Entre] } foreach Nom $ListeDeNoms { if {$AutresArgs==""} { set ValeurCalculee [eval $Critere $Nom] } else { set ValeurCalculee [eval $Critere $Nom $AutresArgs] } lappend LesBons "$Nom $ValeurCalculee" } return $LesBons } FaireLire "Action $Action unknown in Tamis" return {} } proc TamponNFois {quoi {n ""}} { global Tampon set res 1 switch $quoi { "init" {set Tampon ""} "ajoute" { if {! [string is integer $n]} {return} append Tampon $n } "vide" { if {$Tampon ne ""} { set res $Tampon set Tampon "" } } } return $res } proc TarDeGscope {{TarDestin ""}} { if {$TarDestin==""} { set TarDestin "[GscopeDir]/gscope.tar" } if { ! [regexp "^/" $TarDestin]} { set TarDestin "[pwd]/$TarDestin" } if { ! [OuiOuNon "Ok to create $TarDestin ?"]} { return ""} set LesSourcesDeGscope [LesSourcesDeGscope "Relatif" "AvecMain"] set RepDessus "[GscopeDir]/.." NousAllonsAuBoulot $RepDessus if {[file exists $TarDestin]} { file delete $TarDestin } foreach S $LesSourcesDeGscope { set BonS "gscope/$S" Espionne $BonS set UC "u" if { ! [file exists $TarDestin]} { set UC "c" } exec tar -${UC}hf $TarDestin $BonS } OnRevientDuBoulot return $TarDestin } proc TasTamis {{Tam ""} {Fichier ""}} { global TasTamis Wup "Create a file Fichier (or returns a list) with 'Nom Value' foreach Nom verifying Tam" if {[info exists TasTamis]} { unset TasTamis } CreeLeTasTamis $Tam set Liste {} foreach Nom [array names TasTamis] { lappend Liste "$Nom [set TasTamis($Nom)]" } if {$Fichier==""} { return $Liste } else { return [SauveLesLignes $Liste dans $Fichier] } } proc Tau {{Qui ""} {Quoi ""}} { global Tau if {$Qui==""} { set Qui "ListOf" ; set Quoi "Header" } if {[info exists Tau($Qui,$Quoi)]} { return $Tau($Qui,$Quoi) } if {[info exists Tau("EstCharge")]} { return "" } set Tau("EstCharge") 1 #set Fichier "/genomics/link/Tau/GSTControl/BlastpSurStringHomme/9606.string" #set Fichier "/genomics/link/Tau/GSTControl/BlastpSurStringHomme/9606_SsTm.string" set Fichier "/genomics/link/Tau/Dec2008/GSTControl/BlastpSurStringHomme/9606.string" set Q [file tail $Fichier] regsub -nocase {\.[^\.]+$} $Q "" Q LoadTxlWithRowsOfCells $Fichier Txl -1 "\t" set Tau(File,Name) $Fichier set Tau(File,Queue) $Q set Tau(ListOf,Header) $Txl(ListHeaderPlease,$Q) set Tau(ListOf,Index) $Txl(ListAllPlease,$Q) foreach I $Tau(ListOf,Index) { foreach H $Tau(ListOf,Header) { set Tau($I,$H) $Txl($I,$H) } set PI $Txl($I,PIDInitial) set PC $Txl($I,PIDCop) lappend Tau($PI,ListOfCop) $PC lappend Tau($PC,ListOfRef) $PI lappend Tau(ListOf,Ref) $PI lappend Tau(ListOf,Cop) $PC set Tau($PI,IsRef) 1 if { ! [info exists Tau($PC,IsRef)]} { set Tau($PC,IsRef) 0 } } set Tau(ListOf,Ref) [lsort -unique $Tau(ListOf,Ref)] set Tau(ListOf,Cop) [lsort -unique $Tau(ListOf,Cop)] return [Tau $Qui $Quoi] } proc TauNew {} { set Fichier [Tau File Name] regsub "\.string$" $Fichier "-QueInitial.string" NewFichier set LesHeader [Tau ListOf Header] set LesLignes {} lappend LesLignes [join $LesHeader "\t"] foreach I [Tau ListOf Index] { set PC [Tau $I PIDCop] if { ! [Tau $PC IsRef] } { continue } set LaLigne {} foreach H $LesHeader { lappend LaLigne [Tau $I $H] } lappend LesLignes [join $LaLigne "\t"] } EspionneL $LesLignes return [SauveLesLignes $LesLignes dans $NewFichier] } proc TauxAccessTrouves {Rep Database} { #Compte les access trouvés dans bird a apartir d'une liste d'access set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TauxAccessTrouves : Start" set FichierIn [open "$Rep/EpouvanBlast.XPacc" "r"] set FichierDesRequetes [open "/tmp/EpouvanBlastTAV.bql" "w"] gets $FichierIn Ligne set IDligne "ID $Ligne" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TauxAccessTrouves : Building queries" while { [gets $FichierIn Ligne] >=0 } { set IDligne "$IDligne,$Ligne" } puts $FichierDesRequetes "$IDligne DB $Database" puts $FichierDesRequetes "FD GET_COUNT" puts $FichierDesRequetes "//" close $FichierDesRequetes close $FichierIn set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TauxAccessTrouves : Executing queries" exec /biolo/bird/bin/birdql_client.sh /tmp/EpouvanBlastTAV.bql bird /tmp/EpouvanBlastTAV.res set FichierDesRequetesExecutees [open "/tmp/EpouvanBlastTAV.res" "r"] while { [gets $FichierDesRequetesExecutees Ligne2] >=0 } { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TauxAccessTrouves : $Ligne2" } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TauxAccessTrouves : End" } proc Tavernier {} { set R "hopla ! On est au Magos , gell !" return $R } proc TavernierDuMagos {f template maxSeq filter gapped maxE db} { NousAllonsAuBoulot "[MagosDir]/Depot" set LaCentrale "[MagosDir]/Centrale" Ragot Tavernier # set url "http://www-bio3d-igbmc.u-strasbg.fr/~friedric/XXXX" # pour lancer la procedure, Lyon nous envoie # http://www-bio3d-igbmc.u-strasbg.fr/~ripp/cgi-bin/gscope_html_server.tcsh?Magos&TavernierDuMagos&XXXX&none&100&1&1&1E-3&protall set url "http://pig-pbil.ibcp.fr/tmp/MODELING/XXXX/XXXX.tfa" set Lf [WgetzSurWeb $f $url] set foo [open $f w] puts $foo [join $Lf "\n"] close $foo #exec [file join $LaCentrale TraiteCommande.tcsh] $f $template $maxSeq $filter $gapped $maxE $db & Ragot "avant TraiteCommande" if {[catch {eval exec [file join $LaCentrale TraiteCommande.tcsh] $f $template $maxSeq $filter $gapped $maxE $db &} Message]} { Ragot $Message return "TraiteCommande se plante avec le message $Message" } Ragot "apres TraiteCommande" return "Commande passee \n" } proc Tax {Query {Quoi ""} {Valeur ""}} { regsub -all " +" [string trim $Query] "_" Query #f {[OnTraite "CilioCarta" "Like"] || [OnTraite MSP]} { return [QuestionDeScience EVImm "ret Tax $Query $Quoi $Valeur"] } if { ! [OnTraite EVImm] } { return [QuestionDeScience EVImm "ret Tax $Query $Quoi $Valeur"] } set TaxSystem [TaxSystem] return [Tax$TaxSystem $Query $Quoi $Valeur] } proc TaxC {TaxIdOuTaxName {E ""}} { global TaxI global TaxJ global TaxN global TaxC if {[info exists TaxC($TaxIdOuTaxName)]} { return [set TaxC($TaxIdOuTaxName)] } if {[regexp -nocase {[a-z]} $TaxIdOuTaxName]} { set TaxId [TaxI $TaxIdOuTaxName $E] } else { set TaxId $TaxIdOuTaxName } if {[info exists TaxC($TaxId)]} { return [set TaxC($TaxId)] } if {[info exists TaxC("EstCharge")]} { return "" } ChargeTaxIJNC return [TaxC $TaxId] } proc TaxClass {Query {AllOrRankOnly ""} {Reverse ""} {Quoi ""}} { global TaxClass #rR on parcourt recursivement les classes ... mais on stocke en memoire ce qui a deja ete vu if {$Query=="IsAlreadyLoaded"} { return [info exists TaxClass] } regsub -all "_" $Query " " Query if {$Query==""} { return "" } if {[regexp "^ERROR" $Query]} { return $Query } if {[regexp -nocase "Name" $AllOrRankOnly]} { set Quoi "Name"; set AllOrRankOnly "" } if {[regexp -nocase "Name" $Reverse]} { set Quoi "Name"; set Reverse "" } if {$Quoi==""} { set Quoi "TaxId" } if {[regexp -nocase "Name" $Quoi]} { set Quoi "Name" } if {[string equal -nocase $Reverse "Reverse"]} { set Reverse "Reverse" } else { set Reverse "Forward" } if {[regexp -nocase "RankOnly|Ranked" $AllOrRankOnly]} { set AllOrRankOnly "RankOnly" } else { set AllOrRankOnly "All" } if {$AllOrRankOnly==""} { set AllOrRankOnly "All" } if {[regexp -nocase {[a-z]} $Query]} { set Query [Tax $Query TaxId] } if {[info exists TaxClass($Query,$AllOrRankOnly,$Reverse,$Quoi)]} { return [set TaxClass($Query,$AllOrRankOnly,$Reverse,$Quoi)] } set Moi $Query if {$Moi==1} { return [Tax $Moi $Quoi]} set Moi [Tax $Moi $Quoi] set Parent [Tax $Query "Parent"] set Ancetres [TaxClass [Tax $Query "Parent"] $AllOrRankOnly $Reverse $Quoi] if {[regexp -nocase "Rank" $AllOrRankOnly] && [Tax $Query "Rank"]=="no rank"} { return $Ancetres } if {[string equal -nocase $Reverse "Reverse"]} { set Class "$Moi; $Ancetres" } else { set Class "$Ancetres; $Moi" } set TaxClass($Query,$AllOrRankOnly,$Reverse,$Quoi) $Class return $Class } proc TaxDB2Memory {} { global db TaxRoot Tx Lfeuilles LSelectableId LAllIds LCompleteId InitTaxDB $db eval {PRAGMA synchronous = OFF} #$db eval {PRAGMA journal_mode = MEMORY} $db eval {PRAGMA journal_mode = OFF} # depending on the database requested if {$Tx(-txdb) eq "uniprot"} { set dbtaxo "/genomics/link/taxonomy/uniprot_taxonomy/uniprot_taxonomy.sql" $db eval {attach database $dbtaxo as tax} $db eval {begin transaction} set Lfpar1 [$db eval {select taxid, Rank, Parent, Name from tax.taxonomy}] } else { set dbtaxo /genomics/link/taxonomy/ncbi_taxonomy/ncbi_taxonomy.sql $db eval {attach database $dbtaxo as taxonomy} $db eval {begin transaction} set Lfpar1 [$db eval {select n.taxid, n.Rank, n.Parent, m.name from nodes as n, names as m where n.taxid=m.taxid and m.name_class = 'scientific name'}] } set key "'$Tx(-cgdb),LComp'" set LCompleteId [split $::VSotol($Tx(-cgdb),LComp) " "] $db eval {commit} puts "load taxonomy into memory done ..." array unset Tx "*,*" set Lallf [list] ; set Lallp [list] set Lenv [list] foreach {f r p n} $Lfpar1 { if {$f eq $p || $p eq ""} { puts "gros cons $f" } lappend Lallf $f lappend Lallp $p if {0 && ! [regexp -nocase "environmental samples" $n]} { lappend Lallf $f lappend Lallp $p } else { lappend Lenv $f #continue } set Tx(Name,$f) $n set Tx(Rank,$f) $r set Tx(Parent,$f) $p lappend Tx(Child,$p) $f incr Tx(NbChild,$p) set Tx(NbChildCum,$f) 0 set Tx(hasSel,$f) 0 set Tx(Etat,$f) 0 set Tx(isComp,$f) 0 set Tx(NbComp,$f) 0 set Tx(isGold,$f) 0 set Tx(isInt,$f) 0 set Tx(NbInt,$f) 0 set Tx(ShowInt,$f) 0 set Tx(NbKeep,$f) 0 } puts "memorize done ..." # set Ln [list] set Lnor [list] foreach g $LCompleteId { set Lv [DonneGenealogieMem $g] puts "[llength $Lv] | $g" if {131567 ni $Lv} { lappend Lnor $g } lappend Ln [llength $Lv] foreach v $Lv { if {$Tx(Name,$v) eq "environmental samples"} { #puts "$g $Tx(Name,$g) $v" } } } puts "[join [DenombreLaListe $Ln] \n]" puts "lnor $Lnor" #exit set LAllIds $Lallf set Lfeuilles [lsort -unique -integer [lor $Lallf $Lallp from1]] puts "Lall : [llength [lsort -unique $Lallf]]" puts "Lfeuilles : [llength $Lfeuilles]" # add info for leaves foreach f $Lfeuilles { set Tx(Child,$f) [list] set Tx(NbChild,$f) 0 set Tx(Etat,$f) -1 } # flag complete genomes foreach g $LCompleteId { set Tx(isComp,$g) 1 } return } proc TaxDir {{system ""}} { if {$system==""} { set system "NCBI" } #lM rajoute system pour avoir TaxUniProt set TaxDir "[GscopeDatabaseDir Common]/fiches/Tax$system" return $TaxDir } proc TaxFontMode {quoi val} { eval font configure TaxFont -${quoi} $val DrawTaxo return } proc TaxGetz {Query {Quoi ""}} { regsub -all "_" $Query "" Query set RankOnly 0 if {$Quoi=="RankedParent"} { set Quoi "Parent" ; set RankOnly 1 } if {$Quoi==""} { set Quoi "TaxId" if {[regexp -nocase {^[0-9]+$} $Query]} { set Quoi "Name" } } if {[string equal -nocase $Quoi "ID"]} { set Quoi "TaxId" } if {[string equal -nocase $Quoi "Name"]} { set Quoi "Name" } set ChampQuery "Taxon" if {[regexp -nocase {^[0-9]+$} $Query]} { set ChampQuery "ID" } Espionne "getz -e \[TAXONOMY-$ChampQuery:$Query\]" if {[catch {set Reponse [exec getz -e \[TAXONOMY-$ChampQuery:$Query\]]} Message]} { regsub -all "\n" $Message " " Message # return "error from getz : $Message" } foreach Ligne [split $Reponse "\n"] { set Var "" if {[regexp -nocase {^ID *\: *} $Ligne Match]} { set Var "TaxId" } if {[regexp -nocase {^PARENT ID *\: *} $Ligne Match]} { set Var "Parent" } if {[regexp -nocase {^RANK *\: *} $Ligne Match]} { set Var "Rank" } if {[regexp -nocase {^GC ID *\: *} $Ligne Match]} { set Var "GCID" } if {[regexp -nocase {^MGC ID *\: *} $Ligne Match]} { set Var "MGCID" } if {[regexp -nocase {^SCIENTIFIC NAME *\: *} $Ligne Match]} { set Var "Name" } if {[regexp -nocase {^SYNONYM *\: *} $Ligne Match]} { set Var "Synonym" } if {[regexp -nocase {^EQUIVALENT NAME *\: *} $Ligne Match]} { set Var "Equiv" } if {$Var==""} { continue } set Info [StringSuivant ":" dans $Ligne] set $Var [string trim $Info] # regsub $Match $Ligne "" $Var # set $Var [string trim [set $Var]] } if {[info exists $Quoi]} { if {$RankOnly && $Parent>1 && [TaxGetz $Parent Rank]=="no rank"} { return [TaxGetz $Parent "RankedParent"] } return [set $Quoi] } return "ERROR in TaxGetz $Query $Quoi I got $Reponse" } proc TaxI {TaxName {E ""}} { global TaxI global TaxJ global TaxN global TaxC if {$E!=""} { set TaxName "$TaxName $E" } if {[info exists TaxI($TaxName)]} { return [set TaxI($TaxName)] } if {[info exists TaxI("EstCharge")]} { set TN $TaxName while {$TN!=""} { if {[info exists TaxJ($TN)]} { return [set TaxJ($TN)] } set TN [CondenseTaxName $TN] } return "" } ChargeTaxIJNC return [TaxI $TaxName] } proc TaxIdDuAccess {Access {Nom ""}} { if {$Nom!=""} { set TaxId [TaxIdDuMacsim $Access $Nom] if {$TaxId!=""} { return $TaxId } set TaxId [ChampDaedalus "OX" $Access $Nom ] if {$TaxId!=""} { return $TaxId } set Descriptif [LeDescriptif $Access $Nom] set TaxId [ChampDuDescriptif $Descriptif "OX"] if {$TaxId!=""} { return $TaxId } return "" } set Embl [join [LaSequenceDesBanques $Access $Access a "OnVeutEMBL"] "\n"] if {$Embl!=""} { return [TaxIdDuTexteEmbl $Embl] } Espionne "Je n'ai pas trouve LaSequenceDesBanques $Access" return "" } proc TaxIdDuFichierRef {Fichier} { global TaxIdDuFichierRef if {[info exists TaxIdDuFichierRef($Fichier)]} { return [set TaxIdDuFichierRef($Fichier)] } if {[info exists TaxIdDuFichierRef("EstCharge")]} { return "" } set FichierTaxIdDuFichierRef "/genomics/link/Common/fiches/taxid_du_fichierref" array set TaxIdDuFichierRef [LesLignesDuFichier $FichierTaxIdDuFichierRef] set TaxIdDuFichierRef("EstCharge") 1 return [TaxIdDuFichierRef $Fichier] } proc TaxIdDuGenomeComplet {Banque} { global TaxIdDuGenomeComplet set Banque [string toupper $Banque] if {[info exists TaxIdDuGenomeComplet($Banque)]} { return [set TaxIdDuGenomeComplet($Banque)] } if {[info exists TaxIdDuGenomeComplet("EstCharge")]} { return "" } set FichierTaxIdDuGenomeComplet "[RepertoireDuGenome]/fiches/taxid_des_genomes_complets" if { ! [file exists $FichierTaxIdDuGenomeComplet]} { set FichierTaxIdDuGenomeComplet "[GscopeDatabaseDir Common]/fiches/taxid_des_genomes_complets" } if {[file exists $FichierTaxIdDuGenomeComplet]} { array set TaxIdDuGenomeComplet [LesLignesDuFichier $FichierTaxIdDuGenomeComplet] } set FichierTaxIdDuGenomeCompletRR "[RepertoireDuGenome]/fiches/taxid_des_genomes_complets_RR" if { ! [file exists $FichierTaxIdDuGenomeCompletRR]} { set FichierTaxIdDuGenomeCompletRR "[GscopeDatabaseDir Common]/fiches/taxid_des_genomes_complets_RR" } if {[file exists $FichierTaxIdDuGenomeCompletRR]} { array set TaxIdDuGenomeComplet [LesLignesDuFichier $FichierTaxIdDuGenomeCompletRR] } foreach {C V} [array get TaxIdDuGenomeComplet] { lappend TaxIdDuGenomeComplet(LESNOMS) $C lappend TaxIdDuGenomeComplet(LESTAXIDS) $V } set TaxIdDuGenomeComplet("EstCharge") 1 return [TaxIdDuGenomeComplet $Banque] } proc TaxIdDuPAB {Nom} { global TaxIdDuPAB if {[info exists TaxIdDuPAB($Nom)]} { return [set TaxIdDuPAB($Nom)] } if {[info exists TaxIdDuPAB("EstCharge")]} { return "" } set FichierTaxIdDuPAB "[RepertoireDuGenome]/fiches/taxiddespabs" if {[file exists $FichierTaxIdDuPAB]} { array set TaxIdDuPAB [LesLignesDuFichier $FichierTaxIdDuPAB] set TaxIdDuPAB("EstCharge") 1 return [TaxIdDuPAB $Nom] } while { ! [OuiOuNon "Do I create TaxIdDesPABs ?"]} { if {[OuiOuNon "Do I create an empty file ?\n(You can delete it later and run this prog again)"]} { SauveLesLignes {} dans FichierTaxIdDuPAB return "" } if {[OuiOuNon "Do I cancel TaxIdDuPAB ?"]} { return "" } } set TaxIdDuPAB("EstCharge") 1 set Sql "insert (pk_into taxonomy values ($TaxId, DEFAULT, $Name)" lappend LesSql $Sql if {[OuiOuNon "Do I search in OX field from protembl ?"]} { foreach PAB [ListeDesPABs] { set Embl [ContenuDuFichier "[RepertoireDuGenome]/protembl/$PAB"] set TaxIdDuPAB($PAB) [TaxIdDuTexteEmbl $Embl] } } SauveLesLignes [array get TaxIdDuPAB] dans $FichierTaxIdDuPAB return [TaxIdDuPAB $Nom] } proc TaxIdDuTexteEmbl {Embl} { foreach Ligne [split $Embl "\n"] { if { ! [regexp {^OX } $Ligne]} { continue } set TaxId [StringSuivant "NCBI_TaxID=" dans $Ligne] regsub -all {[\.\;\,]} $TaxId " " TaxId set TaxId [string trim $TaxId] if { ! [regexp {^[0-9 ]+$} $TaxId]} { FaireLire "The Embl file contains following OX line\n$Ligne\n\nPlease help me ..." set TaxId [Entre $TaxId] } while {[regexp -all " " $TaxId]} { regsub -all " " $TaxId " " TaxId } return $TaxId } return "" } proc TaxIdOfFamiliarOrganisms {} { set LesOrgaTaxId {} foreach Orga [FamiliarOrganism LaListeMerci] { set TaxId [Tax $Orga TaxId] if {$TaxId=="" || [regexp "ERROR" $TaxId]} { FaireLire "I can't find TaxId for $Orga. I'll skip" continue } lappend LesOrgaTaxId "$Orga $TaxId" } SauveLesLignes $LesOrgaTaxId dans "[RepertoireDuGenome]/fiches/familiar_organism_with_taxid" return $LesOrgaTaxId } proc TaxIdOrg {OrgOuTaxId} { #exemple format org: Mus musculus, Rattus norvegicus, Gallus gallus CanalSqlString if {[regexp {^[0-9]+$} $OrgOuTaxId]} { set out [SqlExec "select official_name from items.species where species_id = '$OrgOuTaxId';"] } else { set out [SqlExec "select species_id from items.species where official_name = '$OrgOuTaxId';" "GetList"] } return $out CanalSqlDisconnect } proc TaxMemo {{Qui ""} {Quoi ""}} { if {[info exists TaxMemo($Qui,$Quoi)]} { return $TaxMemo($Qui,$Quoi) } set R [Tax $Qui $Quoi] set TaxMemo($Qui,$Quoi) $R return $R } proc TaxN {TaxId} { global TaxI global TaxJ global TaxN global TaxC if {[info exists TaxN($TaxId)]} { return [set TaxN($TaxId)] } if {[info exists TaxN("EstCharge")]} { return "" } ChargeTaxIJNC return [TaxN $TaxId] } proc TaxNCBI {TaxId {Quoi ""} {Value ""}} { global TaxNCBI #rR je ne sais pas pourquoi il n'y a pas de ranked comme dans Getz if {$Quoi=="RankedParent"} { set Quoi "Parent" } set TaxId [string map [list "_" " "] $TaxId] if {$Quoi==""} { set Quoi "TaxId" if {[regexp -nocase {^[0-9]+$} $TaxId]} { set Quoi "Name" } } if {$Value==""} { set Value "GetValue" } if {[string equal -nocase $Value "GetValue"]} { if {[info exists TaxNCBI($TaxId,$Quoi)]} { return [set TaxNCBI($TaxId,$Quoi)] } if { ! [info exists TaxNCBI("EstCharge")]} { LoadTaxNCBI return [TaxNCBI $TaxId $Quoi $Value] } if {$Quoi=="Deleted"} { return 0 } if {($Quoi=="Name" || $Quoi=="Parent" || $Quoi=="Children" || $Quoi=="ItsNames") && ! [regexp {^[0-9]+$} $TaxId]} { set TNCBI [TaxNCBI $TaxId TaxId] if {$TNCBI==""} { return "" } return [TaxNCBI $TNCBI $Quoi] } set MAJUSCULE [string toupper $TaxId] if {[info exists TaxNCBI($MAJUSCULE,OriginalCase)] && [info exists TaxNCBI($TaxNCBI($MAJUSCULE,OriginalCase),$Quoi)]} { return $TaxNCBI($TaxNCBI($MAJUSCULE,OriginalCase),$Quoi) } return "" } set TaxNCBI("EstCharge") 1 #rR ***************************************** il faut =value ************** if { ! [regexp "^=" $Value]} { return "" } set Value [string map [list "=" ""] $Value] if { ! [info exists TaxNCBI(Query,$Quoi)]} { set TaxNCBI(Query,$Quoi) 1 lappend TaxNCBI(List,Queries) $Quoi } if {[string equal -nocase $Value "ResetValue"]} { if {[info exists TaxNCBI($TaxId,$Quoi)]} { set V [set TaxNCBI($TaxId,$Quoi)] unset TaxNCBI($TaxId,$Quoi) } return $V } if {$TaxId=="SortUnique" && $Quoi=="ListOf" && $Value=="Names"} { set TaxNCBI(ListOf,Names) [lsort -unique $TaxNCBI(ListOf,Names)] return 1 } set MAJUSCULE [string toupper $TaxId] set TaxNCBI($MAJUSCULE,OriginalCase) $TaxId if {$TaxId=="ListOf" && $Quoi=="Names"} { lappend TaxNCBI(ListOf,Names) $Value return $Value } if {$Quoi=="ItsNames" || $Quoi=="ItsTaxIds" || $Quoi=="Children"} { lappend TaxNCBI($TaxId,$Quoi) $Value return [set TaxNCBI($TaxId,$Quoi)] } set TaxNCBI($TaxId,$Quoi) $Value if {$Quoi=="Name"} { if { ! [info exists TaxNCBI($TaxId,exists)]} { set TaxNCBI($TaxId,exists) 1 lappend TaxNCBI(List,TaxId) $TaxId } } return $Value } proc TaxParQdsMemo {{Qui ""}} { #rR on appelle QuestionDeScience et on mémorise pour le coup d'après. global TaxParQdsMemo regsub -all "_" $Qui " " Qui if {[info exists TaxParQdsMemo($Qui)]} { return $TaxParQdsMemo($Qui)} set Q $Qui regsub -all {\[} $Q "\\\[" Q regsub -all {\]} $Q "\\\]" Q set R [QuestionDeScience EVImm "ret Tax \"$Q\""] set TaxParQdsMemo($Qui) $R if {$R!=""} { set TaxParQdsMemo($R) $Qui } return $R } proc TaxSystem {{Value ""}} { global TaxSystem # set DefaultValue "NCBI" set DefaultValue "UniProt" if {$Value!=""} { set VALUE [string toupper $Value] set TaxSys(GETZ) "Getz" set TaxSys(NCBI) "NCBI" set TaxSys(UNIPROT) "UniProt" if {[info exists TaxSys($VALUE)]} { set Value $TaxSys($VALUE) } else { set DEFAULT [string toupper $DefaultValue] set Better $TaxSys($DEFAULT) Warne "Attention $Value is not a valid TaxSystem I'll use $Better" set Value $Better } set TaxSystem $Value } if { ! [info exists TaxSystem]} { set TaxSystem $DefaultValue } return $TaxSystem } proc TaxUniProt {TaxId {Quoi ""} {Value ""}} { global TaxUniProt #lM a repris TaxNCBI et l'a change pour faire UniProt taxonomy #rR je ne sais pas pourquoi il n'y a pas de ranked comme dans Getz if {$Quoi=="RankedParent"} { set Quoi "Parent" } set TaxId [string map [list "_" " "] $TaxId] if {$Quoi==""} { set Quoi "TaxId" if {[regexp -nocase {^[0-9]+$} $TaxId]} { set Quoi "Name" } } if {$Value==""} { set Value "GetValue" } if {[string equal -nocase $Value "GetValue"]} { if {[info exists TaxUniProt($TaxId,$Quoi)]} { return [set TaxUniProt($TaxId,$Quoi)] } if { ! [info exists TaxUniProt("EstCharge")]} { LoadTaxUniProt return [TaxUniProt $TaxId $Quoi $Value] } if {($Quoi=="Name" || $Quoi=="Parent" || $Quoi=="Children" || $Quoi=="ItsNames") && ! [regexp {^[0-9]+$} $TaxId]} { return [TaxUniProt [TaxUniProt $TaxId TaxId] $Quoi] } set MAJUSCULE [string toupper $TaxId] if {[info exists TaxUniProt($MAJUSCULE,OriginalCase)] && [info exists TaxUniProt($TaxUniProt($MAJUSCULE,OriginalCase),$Quoi)]} { return $TaxUniProt($TaxUniProt($MAJUSCULE,OriginalCase),$Quoi) } return "" } set TaxUniProt("EstCharge") 1 #rR ***************************************** il faut =value ************** if { ! [regexp "^=" $Value]} { return "" } set Value [string map [list "=" ""] $Value] if { ! [info exists TaxUniProt(Query,$Quoi)]} { set TaxUniProt(Query,$Quoi) 1 lappend TaxUniProt(List,Queries) $Quoi } if {[string equal -nocase $Value "ResetValue"]} { if {[info exists TaxUniProt($TaxId,$Quoi)]} { set V [set TaxUniProt($TaxId,$Quoi)] unset TaxUniProt($TaxId,$Quoi) } return $V } if {$TaxId=="SortUnique" && $Quoi=="ListOf" && $Value=="Names"} { set TaxUniProt(ListOf,Names) [lsort -unique $TaxUniProt(ListOf,Names)] return 1 } set MAJUSCULE [string toupper $TaxId] set TaxUniProt($MAJUSCULE,OriginalCase) $TaxId if {$TaxId=="ListOf" && $Quoi=="Names"} { lappend TaxUniProt(ListOf,Names) $Value return $Value } if {$Quoi=="ItsNames" || $Quoi=="ItsTaxIds" || $Quoi=="Children"} { lappend TaxUniProt($TaxId,$Quoi) $Value return [set TaxUniProt($TaxId,$Quoi)] } set TaxUniProt($TaxId,$Quoi) $Value if {$Quoi=="Name"} { if { ! [info exists TaxUniProt($TaxId,exists)]} { set TaxUniProt($TaxId,exists) 1 lappend TaxUniProt(List,TaxId) $TaxId } } return $Value } proc TaxoBla {{Cadre ""} {Qui ""} {Quoi ""}} { #rR TaxoBla stocke tout ce qu'il peut pour tous les CladeDistrbution ci-dessus #rR En fait Cadre est censé être du style Clade_0.001_FirstOnly_UseExpect #rR On peut donc faire l'étude d'un clade dans plusieurs cadres ;) #rR attention Expect est le vrai expect ... LogExp = log10($Expect) #rR attention Expect est le vrai expect ... LogExp = log10($Expect) #rR attention Expect est le vrai expect ... LogExp = log10($Expect) #rR attention Expect est le vrai expect ... LogExp = log10($Expect) #rR TaxoBla lit les fichiers taxobla où ne figure qu'une fois chaque organisme... #rR FirstOnly concerne le First d'un Clade ... #rR Petite remarque : les Rank et LogExpect sont croissants, les Score sont décroissants #rR DeltaE va de -250 à +250 #rR DeltaS de 3000 à -3000 #rR DeltaR de -100 à +100 global TaxoBla if {[info exists TaxoBla($Cadre,$Qui,$Quoi)]} { return $TaxoBla($Cadre,$Qui,$Quoi) } if {[info exists TaxoBla($Cadre,"EstCharge")]} { return "" } if {[regexp {^New_(.+)} $Cadre Match CadreLu]} { foreach Name [array names TaxoBla -glob "$CadreLu,*"] { unset TaxoBla($Name) } set Cadre $CadreLu set FichierTaxoBla [Fiches "taxobla_$Cadre.txt"] if {[file exists $FichierTaxoBla]} { file delete $FichierTaxoBla } } set TaxoBla($Cadre,"EstCharge") 1 set Clade "" set Seuil "" set SelectMethod "" set UseExpect "" lassign [split $Cadre "_"] Clade Seuil SelectMethod UseExpect if {[OnTraite CilioCarta Like]} { set LesTaxId [CladeContent $Clade "UseQds" "Without,[NotreOX]"] } elseif {[OnTraite OI2017 Like]} { set LesTaxId [CladeContentWithinOi2017 $Clade] } else { FaireLire "Désolé. Il faut être CilioCarta Like ou OI2017 Like ..." } set LesOS {} foreach TaxId $LesTaxId { set OS [join [Tax $TaxId Name] "_"] lappend LesOS $OS } if {$Seuil==""} { set Seuil 0.001 } if {$SelectMethod==""} { set SelectMethod "FirstOnly" } if {$UseExpect==""} { set USeExpect "UseExpect" } set TaxoBla($Cadre,Cadre,) $Cadre set TaxoBla($Cadre,ListOf,TaxId) $LesTaxId set TaxoBla($Cadre,ListOf,OS) $LesOS set TaxoBla($Cadre,Seuil,) $Seuil set TaxoBla($Cadre,SelectMethod,) $SelectMethod set TaxoBla($Cadre,UseExpect,) $UseExpect set TaxoBla($Cadre,ListOf,DeltaE) {} set TaxoBla($Cadre,ListOf,DeltaS) {} set TaxoBla($Cadre,ListOf,DeltaR) {} set FichierTaxoBla [Fiches "taxobla_$Cadre.txt"] set TaxoBla($Cadre,file,) $FichierTaxoBla #rR Attention ici on lit le fichier memorisé ... à effacer s'il faut le refaire if {[file exists $FichierTaxoBla]} { array set TaxoBla [LesLignesDuFichier $FichierTaxoBla] return [TaxoBla $Cadre $Qui $Quoi] } if {$LesTaxId=={}} { return [TaxoBla $Cadre $Qui $Quoi] } foreach TaxId $LesTaxId { set TaxoBla($Cadre,$TaxId-Sum,LogExp) 0 set TaxoBla($Cadre,$TaxId-Sum,Score) 0 set TaxoBla($Cadre,$TaxId-Sum,Rank) 0 set TaxoBla($Cadre,$TaxId-Sum,DeltaE) 0 set TaxoBla($Cadre,$TaxId-Sum,DeltaS) 0 set TaxoBla($Cadre,$TaxId-Sum,DeltaR) 0 } set SumAllLogExp 0 set SumAllScore 0 set SumAllRank 0 set SumAllFirstLogExp 0 set SumAllFirstScore 0 set SumAllFirstRank 0 set SumAllDeltaE 0 set SumAllDeltaS 0 set SumAllDeltaR 0 set NbNom 0 foreach Nom [ListeDesPABs] { set TaxoBla($Cadre,$Nom,ListOfTaxId) {} set LesOrgaTrie [LesLignesDuFichier [GscopeFile $Nom "taxobla"]] if {$LesOrgaTrie=={}} { continue } set LesChoisis {} set FirstTaxId "" set Ieme 0 set NbHits 0 foreach Ligne $LesOrgaTrie { incr Ieme #rR je rappelle que taxobla ne contient qu'une fois chaque organisme lassign [split $Ligne "\t"] Expect Score TaxId OS Reste set TaxId [string trim $TaxId] if {[lsearch $LesTaxId $TaxId]<0} { continue } if {$Expect==0.0} { set Expect 1.0e-250 } #if {$Expect >1.0} { set Expect 1.0 } set OS [string trim $OS] set Reste [string trim $Reste] set Expect [string trim $Expect] set Score [expr round([string trim $Score])] set BonSeuil $Seuil if {[regexp -nocase "^e" $Seuil]} { set BonSeuil "1.0$Seuil" } if {$Expect > $BonSeuil} { break } incr NbHits if { ! [info exists DejaVu($Nom)]} { set DejaVu($Nom) 1 ; lappend TaxoBla($Cadre,ListOf,Nom) $Nom } set LogExp [expr round(log10($Expect))] ;#rR on passe en log !!!!!!!!!!!!!!!!! set AbsRank $Ieme lappend LesLogExps $LogExp lappend LesScores $Score lappend TaxoBla($Cadre,$Nom,ListOfTaxId) $TaxId set TaxoBla($Cadre,$Nom-$TaxId,Expect) $Expect set TaxoBla($Cadre,$Nom-$TaxId,LogExp) $LogExp set TaxoBla($Cadre,$Nom-$TaxId,Score) $Score set TaxoBla($Cadre,$Nom-$TaxId,AbsRank) $AbsRank if {$FirstTaxId==""} { set FirstTaxId $TaxId set FirstLogExp $LogExp set FirstScore $Score set FirstAbsRank $AbsRank set TaxoBla($Cadre,$Nom-First,TaxId) $TaxId set TaxoBla($Cadre,$Nom-First,LogExp) $LogExp set TaxoBla($Cadre,$Nom-First,Score) $Score set TaxoBla($Cadre,$Nom-First,AbsRank) $AbsRank lappend TaxoBla($Cadre,FirstTaxId-$TaxId,ListOfNom) $Nom set TaxoBla($Cadre,$TaxId-First,LogExp) $LogExp set TaxoBla($Cadre,$TaxId-First,Score) $Score } set TaxoBla($Cadre,$TaxId-Sum,LogExp) [expr $TaxoBla($Cadre,$TaxId-Sum,LogExp) + $LogExp] set TaxoBla($Cadre,$TaxId-Sum,Score) [expr $TaxoBla($Cadre,$TaxId-Sum,Score) + $Score] lappend TaxoBla($Cadre,$TaxId,ListOfNom) $Nom } set NbHitsInBlast $Ieme set TaxoBla($Cadre,$Nom,NbHits) $NbHits if {$NbHits==0} { continue} incr NbNom set SumLogExp 0 set SumScore 0 set SumRank 0 foreach TaxId $TaxoBla($Cadre,$Nom,ListOfTaxId) { #set Rank [expr $TaxoBla($Cadre,$Nom-$TaxId,AbsRank)*100/$NbHitsInBlast] set Rank [NiceRank $TaxoBla($Cadre,$Nom-$TaxId,AbsRank) $NbHitsInBlast] set TaxoBla($Cadre,$Nom-$TaxId,Rank) $Rank if {$TaxId==$FirstTaxId} { set TaxoBla($Cadre,$Nom-First,Rank) $Rank set TaxoBla($Cadre,$TaxId-First,Rank) $Rank set FirstRank $Rank } set SumLogExp [expr $SumLogExp + $TaxoBla($Cadre,$Nom-$TaxId,LogExp)] set SumScore [expr $SumScore + $TaxoBla($Cadre,$Nom-$TaxId,Score)] set SumRank [expr $SumRank + $TaxoBla($Cadre,$Nom-$TaxId,Rank)] } set AverageLogExp [expr round($SumLogExp / $NbHits)] set AverageScore [expr round($SumScore / $NbHits)] set AverageRank [expr max(1,round($SumRank / $NbHits))] ;#rR j'ai mis 1 minimum #set AverageRank [expr max(1,[NiceRank $SumRank $NbHits])] ;#rR j'ai mis 1 minimum set TaxoBla($Cadre,$Nom-Average,LogExp) $AverageLogExp set TaxoBla($Cadre,$Nom-Average,Score) $AverageScore set TaxoBla($Cadre,$Nom-Average,Rank) $AverageRank lappend TaxoBla($Cadre,AverageLogExp-$AverageLogExp,ListOfNom) $Nom lappend TaxoBla($Cadre,AverageScore-$AverageScore,ListOfNom) $Nom lappend TaxoBla($Cadre,AverageRank-$AverageRank,ListOfNom) $Nom lappend TaxoBla($Cadre,FirstLogExp-$FirstLogExp,ListOfNom) $Nom lappend TaxoBla($Cadre,FirstScore-$FirstScore,ListOfNom) $Nom lappend TaxoBla($Cadre,FirstRank-$FirstRank,ListOfNom) $Nom set SumDeltaE 0 set SumDeltaS 0 set SumDeltaR 0 foreach TaxId $TaxoBla($Cadre,$Nom,ListOfTaxId) { set DeltaE [expr round($TaxoBla($Cadre,$Nom-$TaxId,LogExp) - $TaxoBla($Cadre,$Nom-Average,LogExp))] set DeltaS [expr round($TaxoBla($Cadre,$Nom-$TaxId,Score) - $TaxoBla($Cadre,$Nom-Average,Score))] set DeltaR [expr round($TaxoBla($Cadre,$Nom-$TaxId,Rank) - $TaxoBla($Cadre,$Nom-Average,Rank))] set TaxoBla($Cadre,$TaxId-First,DeltaE) $DeltaE set TaxoBla($Cadre,$TaxId-First,DeltaS) $DeltaS set TaxoBla($Cadre,$TaxId-First,DeltaR) $DeltaR incr SumDeltaE $DeltaE incr SumDeltaS $DeltaS incr SumDeltaR $DeltaR set TaxoBla($Cadre,$Nom-$TaxId,DeltaE) $DeltaE set TaxoBla($Cadre,$Nom-$TaxId,DeltaS) $DeltaS set TaxoBla($Cadre,$Nom-$TaxId,DeltaR) $DeltaR lappend TaxoBla($Cadre,DeltaE-$DeltaE,ListOfNom) $Nom lappend TaxoBla($Cadre,DeltaS-$DeltaS,ListOfNom) $Nom lappend TaxoBla($Cadre,DeltaR-$DeltaR,ListOfNom) $Nom lappend TaxoBla($Cadre,ListOf,DeltaE) $DeltaE lappend TaxoBla($Cadre,ListOf,DeltaS) $DeltaS lappend TaxoBla($Cadre,ListOf,DeltaR) $DeltaR set LogExp $TaxoBla($Cadre,$Nom-$TaxId,LogExp) set Score $TaxoBla($Cadre,$Nom-$TaxId,Score) set Rank $TaxoBla($Cadre,$Nom-$TaxId,Rank) lappend TaxoBla($Cadre,ListOf,LogExp) $LogExp lappend TaxoBla($Cadre,ListOf,Score) $Score lappend TaxoBla($Cadre,ListOf,Rank) $Rank lappend TaxoBla($Cadre,$TaxId-LogExp-$LogExp,ListOfNom) $Nom lappend TaxoBla($Cadre,$TaxId-Score-$Score,ListOfNom) $Nom lappend TaxoBla($Cadre,$TaxId-Rank-$Rank,ListOfNom) $Nom lappend TaxoBla($Cadre,$TaxId-DeltaE-$DeltaE,ListOfNom) $Nom lappend TaxoBla($Cadre,$TaxId-DeltaS-$DeltaS,ListOfNom) $Nom lappend TaxoBla($Cadre,$TaxId-DeltaR-$DeltaR,ListOfNom) $Nom set TaxoBla($Cadre,$TaxId-Sum,Rank) [expr $TaxoBla($Cadre,$TaxId-Sum,Rank) + $Rank] set TaxoBla($Cadre,$TaxId-Sum,DeltaE) [expr $TaxoBla($Cadre,$TaxId-Sum,DeltaE) + $DeltaE] set TaxoBla($Cadre,$TaxId-Sum,DeltaS) [expr $TaxoBla($Cadre,$TaxId-Sum,DeltaS) + $DeltaS] set TaxoBla($Cadre,$TaxId-Sum,DeltaR) [expr $TaxoBla($Cadre,$TaxId-Sum,DeltaR) + $DeltaR] } set TaxoBla($Cadre,$Nom-Average,DeltaE) [expr round($SumDeltaE / $NbHits)] set TaxoBla($Cadre,$Nom-Average,DeltaS) [expr round($SumDeltaS / $NbHits)] set TaxoBla($Cadre,$Nom-Average,DeltaR) [expr round($SumDeltaR / $NbHits)] set SumAllLogExp [expr $SumAllLogExp + $TaxoBla($Cadre,$Nom-Average,LogExp)] set SumAllScore [expr $SumAllScore + $TaxoBla($Cadre,$Nom-Average,Score)] set SumAllRank [expr $SumAllRank + $TaxoBla($Cadre,$Nom-Average,Rank)] set SumAllDeltaE [expr $SumAllDeltaE + $TaxoBla($Cadre,$Nom-Average,DeltaE)] set SumAllDeltaS [expr $SumAllDeltaS + $TaxoBla($Cadre,$Nom-Average,DeltaS)] set SumAllDeltaR [expr $SumAllDeltaR + $TaxoBla($Cadre,$Nom-Average,DeltaR)] set SumAllFirstLogExp [expr $SumAllFirstLogExp + $TaxoBla($Cadre,$Nom-First,LogExp)] set SumAllFirstScore [expr $SumAllFirstScore + $TaxoBla($Cadre,$Nom-First,Score)] set SumAllFirstRank [expr $SumAllFirstRank + $TaxoBla($Cadre,$Nom-First,Rank)] } ;#rR fin de la boucle sur Nom set TaxoBla($Cadre,ListOf,LogExp) [lsort -unique -integer -increasing $TaxoBla($Cadre,ListOf,LogExp)] set TaxoBla($Cadre,ListOf,Score) [lsort -unique -integer -decreasing $TaxoBla($Cadre,ListOf,Score)] set TaxoBla($Cadre,ListOf,Rank) [lsort -unique -integer -increasing $TaxoBla($Cadre,ListOf,Rank)] set TaxoBla($Cadre,ListOf,DeltaE) [lsort -unique -integer -increasing $TaxoBla($Cadre,ListOf,DeltaE)] set TaxoBla($Cadre,ListOf,DeltaS) [lsort -unique -integer -decreasing $TaxoBla($Cadre,ListOf,DeltaS)] set TaxoBla($Cadre,ListOf,DeltaR) [lsort -unique -integer -increasing $TaxoBla($Cadre,ListOf,DeltaR)] set TaxoBla($Cadre,Average,LogExp) [expr $SumAllLogExp/$NbNom] set TaxoBla($Cadre,Average,Score) [expr $SumAllScore/$NbNom] set TaxoBla($Cadre,Average,Rank) [expr $SumAllRank/$NbNom] set TaxoBla($Cadre,Average,DeltaE) [expr $SumAllDeltaE/$NbNom] set TaxoBla($Cadre,Average,DeltaS) [expr $SumAllDeltaS/$NbNom] set TaxoBla($Cadre,Average,DeltaR) [expr $SumAllDeltaR/$NbNom] set TaxoBla($Cadre,First,LogExp) [expr $SumAllFirstLogExp/$NbNom] set TaxoBla($Cadre,First,Score) [expr $SumAllFirstScore/$NbNom] set TaxoBla($Cadre,First,Rank) [expr $SumAllFirstRank/$NbNom] foreach TaxId $LesTaxId { if { ! [info exists TaxoBla($Cadre,$TaxId,ListOfNom)]} { continue } set N [llength $TaxoBla($Cadre,$TaxId,ListOfNom)] set TaxoBla($Cadre,$TaxId-Average,LogExp) [expr $TaxoBla($Cadre,$TaxId-Sum,LogExp)/$N] set TaxoBla($Cadre,$TaxId-Average,Score) [expr $TaxoBla($Cadre,$TaxId-Sum,Score)/$N] set TaxoBla($Cadre,$TaxId-Average,Rank) [expr $TaxoBla($Cadre,$TaxId-Sum,Rank)/$N] ; set TaxoBla($Cadre,$TaxId-Average,Rank) [expr max(1,$TaxoBla($Cadre,$TaxId-Average,Rank))] set TaxoBla($Cadre,$TaxId-Average,DeltaE) [expr $TaxoBla($Cadre,$TaxId-Sum,DeltaE)/$N] set TaxoBla($Cadre,$TaxId-Average,DeltaS) [expr $TaxoBla($Cadre,$TaxId-Sum,DeltaS)/$N] set TaxoBla($Cadre,$TaxId-Average,DeltaR) [expr $TaxoBla($Cadre,$TaxId-Sum,DeltaR)/$N] } SauveLesLignes [array get TaxoBla "$Cadre,*"] dans $FichierTaxoBla return [TaxoBla $Cadre $Qui $Quoi] } proc TaxoBlaAvecScore {Nom} { FaireLire "Attention TaxoBlaAvecScore ne devrait plus servir." exit # on apprend par coeur set FiBla [GscopeFile $Nom "blastp"] set OnAttendSQ 1 set OnEstDansLaPartie 0 foreach Ligne [LesLignesDuFichier $FiBla] { if {$OnAttendSQ} { if { ! [regexp {^Sequences producing} $Ligne]} { continue } set OnAttendSQ 0 continue } if {[regexp "^>" $Ligne]} { break } regsub -all {[ \t]+} [string trim $Ligne] " " Ligne set LesMots [split $Ligne " "] if {$LesMots=={}} { continue } set Access [lindex $LesMots 0] set Score [lindex $LesMots end-1] set Score [expr round($Score)] set Expect [lindex $LesMots end] set ScoreDe($Access) $Score } # on a bien appris par coeur !!! set FiTax [GscopeFile $Nom "taxobla"] set FiTaxOLD [GscopeFile $Nom "taxoblaOLD"] set LesNouvellesLignes {} foreach Ligne [LesLignesDuFichier $FiTaxOLD] { set LesChamps [split $Ligne "\t"] set Info [lindex $LesChamps 3] scan $Info "%s" Access set Score $ScoreDe($Access) set BeauScore [format %5d $Score] regsub "\t" $Ligne \t$BeauScore\t Ligne lappend LesNouvellesLignes $Ligne } return [SauveLesLignes $LesNouvellesLignes dans $FiTax] } proc TaxoBlaAvecScorePourTous {} { FaireLire "Attention TaxoBlaAvecScorePourTous ne devrait plus servir." exit foreach Nom [ListeDesPABs] { set FiTax [GscopeFile $Nom "taxobla"] if {[File exists $FiTax]} { continue } if {[PasTouche $Nom]} { continue } set Fichier [TaxoBlaAvecScore $Nom] FinPasTouche $Nom Espionne $Fichier } } proc TaxoValide {Liste {Quoi ""}} { if {$Quoi == ""} { set Quoi "GetValid" } set LesValides {} set LesInconnus {} foreach A $Liste { if {[Tax $A "TaxId"]==""} { lappend LesInconnus $A } else { lappend LesValides $A } } if {[regexp -nocase "Valid" $Quoi]} { return $LesValides } return $LesInconnus } proc TaxoblaDuCongelo {LesOP} { if {[regexp {[ ,\n\t]} $LesOP]} { regsub -all {[ ,\n\t]+} $LesOP "," LesOP set LesOP [split [string trim $LesOP ","] ","] } set PreviousId "" set LeTaxobla {} set Ieme 0 set Keme 0 set LesFicTax {} foreach OP $LesOP { if {[file exists "[RepertoireDuGenome]/$OP"]} { set g [open "[RepertoireDuGenome]/$OP" "r"] Espionne "j'utilise le dezipé" } else { set Gz [DernierGz $OP] set g [open $Gz "r"] zlib push gunzip $g } while {[gets $g Ligne]>=0} { if {[incr Keme]%10000==1} { Espionne $Keme } if {[string index $Ligne 0]=="#"} { continue } scan $Ligne "%s %s" BAI Subject set Id [lindex [split $BAI "|"] end] if {$PreviousId!="" && $Id!=$PreviousId} { if {[info exists DejaVu]} { unset DejaVu } if {[incr Ieme]%100==1} { LogWscope $Ieme } if { $Ieme % 10==1} { Espionne $Ieme } set FicTax [RangeTaxobla $PreviousId $LeTaxobla] if {$FicTax!=""} { lappend LesFicTax $FicTax } set LeTaxobla {} } set PreviousId $Id set IdSubject [lindex [split $Subject "|"] end] #set OX [QuestionDeScience OI "ret WiwOxFrom $IdSubject"] set OX [WiwOxFrom $IdSubject] if {[info exists DejaVu($OX)]} { continue } set DejaVu($OX) $IdSubject lappend LeTaxobla "$OX\t$Ligne" } close $g } if {$LeTaxobla!={}} { RangeTaxobla $PreviousId $LeTaxobla } return $LesFicTax } proc TaxoblaFromOi {} { set OX [NotreOX] set Science [ScienceOiDeMonDomaine] Espionne "QuestionDeScience $Science ret WIW $OX ListOfOP" set LesOP [QuestionDeScience $Science "ret WIW $OX ListOfOP"] Espionne $LesOP LogWscope $LesOP return [TaxoblaDuCongelo $LesOP] } proc TaxoblaKeepOnly {{KeepWhat ""} {Extension ""} {TaxoblaOrigin ""}} { if {$KeepWhat ==""} { set KeepWhat "AEB_ListOf_OX" } if {$Extension ==""} { set Extension $KeepWhat } if {$TaxoblaOrigin==""} { set TaxoblaOrigin "taxobla" } set LesKeepedOX {} if {[regexp {^([A-Z]+)_([^_]+)_([^_]+)$} $KeepWhat Match Domaines Lo W]} { foreach D [split $Domaines ""] { Espionne "OiCodeForDomain $D $Lo $W" set LesOX [OiCodeForDomain $D $Lo $W] LConcat LesKeepedOX $LesOX } } Espionne $LesKeepedOX foreach OX $LesKeepedOX { set Keep($OX) 1 } NousAllonsAuBoulot [RepertoireDuGenome] set DestDir "taxobla$Extension" foreach Nom [ListeDesPABs] { if {[PasTouche $Nom]} { continue } set Orig "$TaxoblaOrigin/$Nom" set Dest "$DestDir/$Nom" file mkdir $DestDir if {[FileExists $Orig] && [FileAbsent $Dest]} { set LeNew {} foreach Ligne [LesLignesDuFichier $Orig] { scan $Ligne "%s %s %s" Pn Score OX if { ! [info exists Keep($OX)]} { continue } lappend LeNew $Ligne } SauveLesLignes $LeNew dans $Dest Espionne $Dest lappend LesNouveaux $Dest } FinPasTouche $Nom } OnRevientDuBoulot return $LesNouveaux } proc TaxoblaProject {{Qui ""} {Quoi ""}} { global TaxoblaProject set FichierMemo "/genomics/link/OI/fiches/TaxoblaProject.txt" if {[regexp -nocase "^ReDo_" $Qui]} { if {[file exists $FichierMemo]} { file delete $FichierMemo } regsub -nocase "^ReDo_" $Qui "" Qui if {[info exists TaxoblaProject]} { unset TaxoblaProject } return [TaxoblaProject $Qui $Quoi] } if {[info exists TaxoblaProject($Qui,$Quoi)]} { return $TaxoblaProject($Qui,$Quoi) } if {[info exists TaxoblaProject("EstCharge")]} { return "" } set TaxoblaProject("EstCharge") 1 if {[file exists $FichierMemo]} { array set TaxoblaProject [ContenuDuFichier $FichierMemo] return [TaxoblaProject $Qui $Quoi] } set LesRepExistants [glob -nocomplain "/genomics/link/*/taxobla"] foreach RepT $LesRepExistants { set Rep [file dirname $RepT] set LesProttfa [lsort [glob -nocomplain "$Rep/prottfa/*"]] if { [set NbProttfa [llength $LesProttfa]] < 10} { continue } set LesTaxobla [lsort [glob -nocomplain "$Rep/taxobla/*"]] set Projet [file tail $Rep] if { [set NbTaxobla [llength $LesTaxobla]] < $NbProttfa } { Espionne "$Projet $NbTaxobla/$NbProttfa" ; continue } lappend LesProjets [file tail $Rep] set OX [IntegerApres "NotreOX" dans [ContenuDuFichier "$Rep/beton/miniconfig"]] set TaxoblaProject($Projet,NS) $NbProttfa set TaxoblaProject($Projet,NT) $NbTaxobla set TaxoblaProject($Projet,OX) $OX } set TaxoblaProject(ListOf,Project) [lsort -unique $LesProjets] Sauve [array get TaxoblaProject] dans $FichierMemo return [TaxoblaProject $Qui $Quoi] } proc Taxonomy {Nom} { return [ExtraitInfo $Nom "Taxonomy"] } proc TaxonomyDuBlast {TexteOuListeOuFichier {CutPN ""} {MaxListe ""} {GetWhat ""} {AvecMemoTaxo ""}} { #rR Toute cette histoire de taxonomy présente dans le blast date de CilioCarta (2015) #rR Ca marche si la banque blast a été créée avec les OX que je rajoute pour tout Uniprot #rR on lit les chevrons du blast qui contiennent l'expect et le TaxId (pour CilioCarta en tout cas) #rR on rend la liste du premier hit de chaque orga rencontré sauf si CutPN contient KeepAll set KeepAll [regexp -nocase "KeepAll" $CutPN] if {$KeepAll} { regsub -nocase "KeepAll" $CutPN "" CutPN } if {$CutPN=="" || $CutPN =="-" } { set CutPN "9999999" } if {$MaxListe==""|| $MaxListe=="-" } { set MaxListe "9999999" } if {$GetWhat==""} { set GetWhat "Show" } if {[regexp -nocase "Memo" $AvecMemoTaxo]} { global MemoTaxoPourTaxobla } set LesRetenus {} set Nom "" if {[EstUnPAB $TexteOuListeOuFichier]} { set Nom $TexteOuListeOuFichier set TexteOuListeOuFichier [GscopeFile $Nom "blastp"] if {[FileAbsent TexteOuListeOuFichier]} { set ListeDesLignes {} } else { set ListeDesLignes [LesLignesDuFichier $TexteOuListeOuFichier] } #rR ici on prend le fichier set FichierTaxobla [GscopeFile $Nom "taxobla"] if {[file exists $FichierTaxobla]} { set LesRetenus [LesLignesDuFichier $FichierTaxobla] } } elseif {[regexp "^/FromOi/(.+)$" $TexteOuListeOuFichier Match Nom]} { set ListeDesLignes [BlastFromOi $Nom] } elseif {[regexp "\n" $TexteOuListeOuFichier]} { set ListeDesLignes [split $TexteOuListeOuFichier "\n"] } elseif {[regexp " " $TexteOuListeOuFichier]} { set ListeDesLignes $TexteOuListeOuFichier } elseif {[file exists $TexteOuListeOuFichier]} { set ListeDesLignes [LesLignesDuFichier $TexteOuListeOuFichier] set Nom [file tail $TexteOuListeOuFichier] } elseif {[string length $TexteOuListeOuFichier] > 100} { set ListeDesLignes [split [Base64Decode $TexteOuListeOuFichier] "\n"] } else { FaireLire "I don't know how to analyse the blast\n$TexteOuListeOuFichier\n It's not a text, not a list, not a file" return "" } if {$LesRetenus=={}} { set DansChevron 0 set NbLus 0 foreach Ligne $ListeDesLignes { set Chev [regexp "^>" $Ligne] if { ! $DansChevron && ! $Chev} { continue } if { ! $DansChevron && $Chev} { regsub ">" $Ligne "" Ligne scan $Ligne "%s" Access if {[info exists DejaVu($Access)]} { set DansChevron 0 ; continue } set DejaVu($Access) $Ligne set Info $Ligne set Expect "" set DansChevron 1 continue } if {[regexp "^ *Identities" $Ligne]} { set DansChevron 0 ; continue } if {[regexp {Expect *= *([^\,]+)} $Ligne Match sPN]} { set Score [expr round([StringApres "Score =" dans $Ligne])] ;#rR rajoute le 2015/06/08 regsub {^[eE]} $sPN "1e" sPN # scan $sPN "%f" PN set PN $sPN if {[catch { expr $PN > $CutPN } ]} { Warne "Oh le vilain $PN" set PN 1E-200 } if {[expr $PN <= $CutPN]} { regsub -all " +" $Info " " Info set Info [string trim $Info] set TaxId "" if {[regexp -nocase {(TAXID|OX)(=|:)([0-9]+)( |$)} $Info Match K S T]} { set TaxId $T } else { if {[regexp {OS=(.*)$} $Info Match OS]} { regsub { [A-Z]+=.*$} $OS "" OS regsub -all {\[} $OS "\\\[" OS regsub -all {\]} $OS "\\\]" OS regsub {\.$} $OS "" OS if {[info exists MemoTaxoPourTaxobla($OS)]} { set TaxId $MemoTaxoPourTaxobla($OS) } else { regsub -all " " $OS "_" O_S set TaxId [QuestionDeScience EVImm "ret Tax $O_S"] if {$TaxId==""} { lassign [split $O_S "_"] Genre Espece set G_E "${Genre}_$Espece" set TaxId [QuestionDeScience EVImm "ret Tax $G_E"] } set MemoTaxoPourTaxobla($OS) $TaxId } } } if {[info exists MemoTaxoPourTaxobla($TaxId)]} { set Orga $MemoTaxoPourTaxobla($TaxId) } else { if {$TaxId!=""} { set Orga [QuestionDeScience EVImm "ret Tax $TaxId"] set MemoTaxoPourTaxobla($TaxId) $Orga } else { set Orga "Unknown unknown" } } if { $KeepAll || ! [info exists DejaVu($TaxId)] } { if {[string length $Orga]>36} { set Orga "[string range $Orga 0 36]..." } lappend LesRetenus [format "%7s\t%6s\t%8s\t%-40s\t%s" $PN $Score $TaxId $Orga $Info] ;#rR rajout de score 2015/06/08 if {[incr NbLus]>$MaxListe} { break } set DejaVu($TaxId) 1 } } set Info "" set Access "" set DansChevron 0 continue } append Info " $Ligne" } } if {$GetWhat=="GetList"} { return $LesRetenus } if {$GetWhat=="GetText"} { return [join $LesRetenus "\n"] } if {$GetWhat=="Show"} { #rR On peut postponé les TouchePour ... ils sont mis en mémoire et rajoutés en queue des boutons :) set Clavier "Postpone" TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "Orange" TouchePour $Clavier "See Taxo" "AfficheTaxoFromTaxoLine \[selection get\] $Nom" TouchePour "<2>" "/ Fetch" "AfficheFetchFromTaxoLine \[selection get\] $Nom" TouchePour $Clavier NouvelleCouleur "Magenta" TouchePour $Clavier "OutlierOrganism" "OutlierOrganismInBlast $Nom" TouchePour $Clavier "Set Current Clade" "HighlightClade @F@ New" ;#rR les @F@ seront remplacés par la fenêtre car Postpone TouchePour "<2>" "/ See" "HighlightClade @F@ See" TouchePour $Clavier "Highlight Clade" "HighlightClade @F@ Current" if {[PourWscope]} { return [AfficheListe $LesRetenus "GrandeLargeur" $Nom] } set F [AfficheListe $LesRetenus "GrandeLargeur" $Nom] } set Fichier "" if {[regexp "/" $GetWhat]} { set Fichier $GetWhat } if {$GetWhat=="Save" && [EstUnPAB $Nom]} { mkdir "[RepertoireDuGenome]/taxobla"; set Fichier [GscopeFile $Nom "taxobla"] } if {$Fichier!=""} { return [SauveLesLignes $LesRetenus dans $Fichier] } if {$GetWhat=="GetText"} { return [join $LesRetenus "\n"] } return $LesRetenus } proc TaxonomyDuBlastPourTous {{RepBlast ""} {RepTaxobla ""} {CutPN ""} {MaxListe ""}} { if {$RepBlast==""} { set RepBlast "[RepertoireDuGenome]/blastp" } if {$RepTaxobla==""} { set RepTaxobla "[RepertoireDuGenome]/taxobla" } if { ! [regexp "/" $RepBlast]} { set RepBlast "[RepertoireDuGenome]/$RepBlast" } if { ! [regexp "/" $RepTaxobla]} { set RepTaxobla "[RepertoireDuGenome]/$RepTaxobla" } if {[FileAbsent $RepTaxobla]} { file mkdir $RepTaxobla } set I 0 set LesFichierTaxoblaCrees {} foreach Nom [ListeDesPABs] { if {$I%100==0} { Espionne "TaxonomyDuBlast $Nom" } incr I set FichierTaxobla $RepTaxobla/$Nom if {[file exists $FichierTaxobla] && [file size $FichierTaxobla]>0} { continue } set FichierBlast "$RepBlast/$Nom" if {[PasTouche "Taxobla$Nom"]} { continue } set F [TaxonomyDuBlast $FichierBlast $CutPN $MaxListe $FichierTaxobla "AvecMemoTaxo"] lappend LesFichierTaxoblaCrees $F set L [llength [LesLignesDuFichier $F]] Espionne "$FichierTaxobla [format %6d $L] different organisms" FinPasTouche "Taxobla$Nom" } return $LesFichierTaxoblaCrees } proc TaxonomyProcessXML {Lxml Lid} { set RId [dom parse $Lxml] set doc [$RId documentElement] array set T [list] foreach nT [$doc selectNodes //TaxaSet/Taxon] { set Tax [$nT selectNode string(./TaxId)] set isReplaced [expr {$Tax ni $Lid}] set sn [$nT selectNode ./ScientificName] set ScName [$sn selectNode string(.)] set Rank [$nT selectNode string(./Rank)] set Lin [$nT selectNode string(./Lineage)] set Lon [list] foreach no [$nT selectNode ./OtherNames/Synonym] { lappend Lon [$no selectNode string(.)] } set T($Tax,isReplaced) $isReplaced set T($Tax,ScientificName) "$ScName" set T($Tax,Rank) $Rank set T($Tax,Lineage) "$Lin" set T($Tax,Synonyms) $Lon # check for taxid changes set Lrep [list] foreach no [$nT selectNode ./AkaTaxIds/TaxId] { lappend Lrep [$no selectNode string(.)] } set T($Tax,Replaces) $Lrep } $RId delete update return [array get T] } proc Tba {PhyloTree TbaFile TbaLogFile} { ### tba program execution from the TBA suite ### # generates the multiple alignment from get_covered, multiz, pair2tb and maf_project programs # Espionne "Tba ..." set Rep [file dirname $TbaFile] ##################################################################################################### ### Attention, pb avec le "*.maf" !!!!!!!!!!!!!!!!!!!!!!! a voir !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ### ### dans proman par web, possibilite de x fichier maf de differents projets dans le meme repertoire ... #set Commande "exec [PATH tba] + \"$PhyloTree\" [glob -nocomplain "*.maf"] $TbaFile >& $TbaLogFile" set Commande "exec tba + \"$PhyloTree\" [glob -nocomplain "*.maf"] $TbaFile >& $TbaLogFile" ##################################################################################################### puts "$Commande" if {[catch {eval $Commande} Message]} {Espionne $Message;return} return $TbaFile } proc Tbrucei {} { set Dir "/genomics/link/Tbrucei" file mkdir "$Dir/beton" file mkdir "$Dir/fiches" file mkdir "$Dir/prottfa" set Pep "$Dir/DuTigr/TBA1.pep" set Prefixe "TB" set LesBornes {} set LeTFA {} if {[FileAbsent "$Dir/prottfa"]} { file mkdir "$Dir/prottfa" } if {[FileAbsent "$Dir/fiches"]} { file mkdir "$Dir/fiches" } set Deb 100 set Fin [expr $Deb+300] set Sens "F" foreach Ligne [LesLignesDuFichier $Pep] { if {[regexp ">" $Ligne]} { if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/prottfa/$Nom" } set Ligne [string trim $Ligne "> "] set LesMots [split $Ligne "/ "] ScanLaListe $LesMots A set O "Trypanosoma brucei" set Nom $A regsub "Tb" $Nom "TB" Nom regsub {[^TB0-9\.]} $Nom "" Nom set Entete ">$Nom $O $Ligne" Espionne $Entete set LeTFA [list $Entete] lappend LesBornes ">$Nom $Deb $Fin $Sens" incr Deb 390 set Fin [expr $Deb+300] continue } lappend LeTFA $Ligne } if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/prottfa/$Nom" } return [SauveLesLignes $LesBornes dans "$Dir/fiches/bornesdespabs"] } proc TbruceiChromosomes {} { foreach Fichier [lsort [glob "[RepertoireDuGenome]/DuTigr/Tbrucei_chr*.tfa"]] { regsub -all {\.tfa+$} $Fichier "" NewFichier set Racine [file tail $NewFichier] append NewFichier ".new" set LesLignes [LesLignesDuFichier $Fichier] set OnAttendLeDebut 1 foreach Ligne $LesLignes { if {$OnAttendLeDebut && ! [regexp {^>} $Ligne]} { continue } if {$OnAttendLeDebut} { set Entete $Ligne scan $Entete "%s" Access regsub ">" $Access "" Access set Entete [StringSuivant " " dans $Entete] set Entete ">$Racine $Entete $Access" Espionne $Entete set OnAttendLeDebut 0 set LeNew [list $Entete] continue } if {[regexp -nocase {[^ATGCNMYWRK]} $Ligne] && [OuiOuNon "Est-ce la fin en \n$Ligne"]} { break } lappend LeNew $Ligne } lappend LesNews [SauveLesLignes $LeNew dans $NewFichier] } return $LesNews } proc TbruceiNuc {} { set Dir "/genomics/link/Tbrucei" file mkdir "$Dir/nuctfa" set LeTFA {} foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/DuTigr/TBA1.cds"] { if {[regexp ">" $Ligne]} { if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/nuctfa/$Nom" } set Ligne [string trim $Ligne "> "] set LesMots [split $Ligne "/ "] ScanLaListe $LesMots A set O "Trypanosoma brucei" set Nom $A regsub "Tb" $Nom "TB" Nom regsub {[^TB0-9\.]} $Nom "" Nom set Entete ">$Nom $O $Ligne" Espionne $Entete set LeTFA [list $Entete] continue } lappend LeTFA $Ligne } if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/nuctfa/$Nom" } return } proc Tche2 {} { global T LNOrdali array set T [ContenuDuFichier filsde.dat] set LNOrdali [list s01 s02 s03 s04 s05 s06 s07 s08] set Lch [Che2] puts [join $Lch \n] exit } proc Tcomp {} { global db package require sqlite3 set db root sqlite3 $db bench.sql set pfdir /genomics/link/Pfam set Lpfam [$db eval {select distinct job from results}] set Lj2d [list] foreach pf $Lpfam { set pfile [lindex [glob -nocomplain [file join $pfdir "${pf}*"]] end] lappend Lj2d [list $pf $pfile] } Thr_Submit -joblist $Lj2d -proccreate Tcree -procexe TcompExe -procresults TcompResults -nthreads 20 $db close exit } proc TcompExe {Largs} { global LNDG SDG ListeDesPiliersDuGroupe LNOrdali Sequences LongueurTotale lassign $Largs pfile unset -nocomplain ListeDesPiliersDuGroupe SDG Sequences LNOrdali set LNDG GroupeToutLeMonde DecortiqueUnTFA $pfile LNOrdali Sequences set LongueurTotale [string length [set Sequences([lindex $LNOrdali 0])]] set SDG(GroupeToutLeMonde) $LNOrdali CreeLesPiliers set Lpil [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)] set nseq [string length [lindex $Lpil 0]] set Lthrgap [list 0.005 0.1 0.25 0.5 0.7] set Lres [list] foreach pcgap $Lthrgap { LesDefauts PCThrGap $pcgap set ThrGap [DefineGapThreshold $nseq] set lgt 0 foreach pori $Lpil { set p [string map [list X "" Z "" " " "" "." ""] $pori] if {[string length $p] >= $ThrGap} { incr lgt } } lappend Lres [list $pcgap $lgt] } puts "[join $Lres \n]" return $Lres } proc TcompResults {pktest pfamid Lval} { global db set LErr [list] foreach e $Lval { lassign $e gp lgt set Lpk [$db eval {select pk_results from results where gapthr=$gp and job=$pfamid}] $db eval "update results set lgt=$lgt where pk_results in ([join $Lpk ,])" puts "nVal [llength $Lval] npkr [llength $Lpk]" } return $LErr } proc TcpDump {Commande} { set Fichier "TcpDump" set PidTcpDump [exec tcpdump -s 0 -i any -w $Fichier &] afte 100 eval exec $Commande exec kill -9 PidTcpDump return $Fichier } proc Tcree {} { set GscopeDir $env(GSCOPEDIR) set OrdaliDejaSource 1 source [file join $GscopeDir gscope_source.tcl] set OrdaliDir $env(ORDALIDIR) set OrdaliDejaSource 0 source [file join $OrdaliDir src ordali_source.tcl] package require Thread package require http #LoadTclPackages package require tclcluspack package require tclordalie #package require sqlite3 set VariablesAuDepart [info globals] source /home/moumou/gscopublic/bcm.tcl source /home/moumou/gscopublic/bcm_setup.tcl source /home/moumou/gscopublic/bcm_run.tcl InitLesDefauts LesDefauts OnlyTLog 1 LesDefauts Mode batch BCM_setup } proc Td {} { puts [join [DecoupeEnSousOrdresPourGif "create rectangle 1 2 3 4 -a \{A AA\} -b \\\{ -c -9"] "\n"] exit } proc Tdbc {} { global RepertoireDuGenome set LesAccess [LesLignesDuFichier "$RepertoireDuGenome/descriptifs/VCHO10004"] set Texte [join $LesAccess "\n"] DbClustal toto oscar.msf $Texte "AvecSelection" exit } proc Tele2HTML {aT} { upvar $aT tbl if {$tbl(Text) eq ""} { Html_BR } else { Html_Append "$tbl(Text)" } return } proc Tele2Text {aT} { upvar $aT tbl lappend ::TextOut "$tbl(Text)" return } proc TempsExecutionDesBlast {{GetWhat ""} {Qui ""} {Mi ""} {Ma ""}} { #rR Je prends la date de création du fasta et du blast dans oif/OI1234/fasta et oif/OI1234/blast if {$Mi==""} { set Mi -1 } if {$Ma==""} { set Ma 9999999 } if {$Qui==""} { set Qui [lsort [glob -nocomplain "[RepertoireDuGenome]/oif/OI*"]] } set N 0 set Total 0 set LesTemps {} set Min 999999 set Max -1 set NbNom 0 foreach Nom $Qui { set Nom [file tail $Nom] incr NbNom Espionne $Nom NousAllonsAuBoulot "[RepertoireDuGenome]/oif/$Nom" foreach B [lsort [glob -nocomplain "blast/*"]] { set S [file size $B] if {$S==0} { continue } set Q [file tail $B] set F "fasta/$Q" set Deb [file mtime $F] set Fin [file mtime $B] set Duree [expr $Fin-$Deb] if {$Duree<$Mi} { continue } if {$Ma<$Duree} { continue } incr N incr Total $Duree lappend LesTemps $Duree set Min [Mini $Min $Duree] set Max [Maxi $Max $Duree] } OnRevientDuBoulot } set M [expr $Total/$N] set JoursTotalLbgi [expr $Total/(60*60*24)] set JoursTotal [expr 10000000*$JoursTotalLbgi/$N] set AnsTotal [expr $JoursTotal/365] set Message "Sur $N blast faits Min $Min Moyenne $M Max $Max Temps total $JoursTotalLbgi jours au lbgi ... et en extraolant $JoursTotal jours pour les 10 000 000 soit $AnsTotal ans !" Espionne $Message set LesTemps [lsort -integer $LesTemps] if {[regexp -nocase "Histo" $GetWhat]} { lassign [Histogramme $LesTemps "GetLists"] LesN LesY Graphe $LesN $LesY "" "" 1200 1200 } if {[regexp -nocase "Graphe" $GetWhat]} { Graphe $LesTemps "" "" "" 1200 1200 } return $Message } proc TermineChangePreferences {w} { global LNDG global NomFenetreOrdali global Defauts global NomTextSeq global NomNomSeq global WTexteRegle global LesPoidsDesSequences if {[winfo exists $NomFenetreOrdali.lessequences.tognoms] && ![set Defauts(CheckSeq)]} { destroy $NomFenetreOrdali.lessequences.tognoms } if {![winfo exists $NomFenetreOrdali.lessequences.tognoms] && [set Defauts(CheckSeq)]} { button $NomFenetreOrdali.lessequences.tognoms -text "Access/Name" -command "ChangeTypeNom \[$NomFenetreOrdali.lessequences.scrolly get \]" -background green1 grid $NomFenetreOrdali.lessequences.tognoms -in $NomFenetreOrdali.lessequences -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news } font configure SeqFont -size [set Defauts(SeqFontSize)] -family [set Defauts(SeqFontFaml)] -weight [set Defauts(SeqFontWght)] if {[set Defauts(Poids)]} { global LesPoidsDesSequences global LesPoidsLus set LesPoidsDesSequences $LesPoidsLus } destroy $w update return } proc TermineSelection {} { global Defauts global Sequences global LNOrdali global LNDG global SDG global ListeNomAssocieALAccess global ListeDesNomsDeGenes global ListeDesDefinitions global ListeDesPiliersDuGroupe global LongueurTotale global BonSeq AuLog "Termine : Nbr Seq [llength $LNOrdali]" set Encore 1 while {$Encore} { set Idx [lsearch $BonSeq "0"] if {$Idx != -1} { set Seq [lindex $LNOrdali $Idx] unset Sequences($Seq) set LNOrdali [lreplace $LNOrdali $Idx $Idx] if {[set Defauts(CheckSeq)]} { set ListeNomAssocieALAccess [lreplace $ListeNomAssocieALAccess $Idx $Idx] set ListeDesNomsDeGenes [lreplace $ListeDesNomsDeGenes $Idx $Idx] set ListeDesDefinitions [lreplace $ListeDesDefinitions $Idx $Idx] } if {[info exists SDG]} { foreach ng [array names SDG] { set IdG [lsearch [set SDG($ng)] $Seq] if {$IdG != -1} { set SDG($ng) [lreplace [set SDG($ng)] $IdG $IdG] } } } set BonSeq [lreplace $BonSeq $Idx $Idx] } else { set Encore 0 } } if {! [info exists LNDG]} { InitPremierGroupe } set LeGrpDesPiliersAcreer 0 CreeLesPiliers $LeGrpDesPiliersAcreer set PilPoint [string repeat "." [llength $LNOrdali]] set Encore 1 while {$Encore} { set Idx [lsearch -exact $ListeDesPiliersDuGroupe(GroupeToutLeMonde) $PilPoint] if {$Idx != -1} { set ListeDesPiliersDuGroupe(GroupeToutLeMonde) [lreplace $ListeDesPiliersDuGroupe(GroupeToutLeMonde) $Idx $Idx] } else { set Encore 0 } } set k 0 foreach Seq $LNOrdali { set NewSeq "" set i 0 foreach Pilier $ListeDesPiliersDuGroupe(GroupeToutLeMonde) { append NewSeq [string index $Pilier $k] incr i } set Sequences($Seq) $NewSeq incr k } set LongueurTotale [string length [set Sequences([lindex $LNOrdali 0])]] unset ListeDesPiliersDuGroupe(GroupeToutLeMonde) AuLog "Termine : Nbr Seq [llength $LNOrdali]" InitWRegle if {![info exists LNDG]} { InitWTexte } else { MetAJourWNomsWSeqs } AfficheTexteSeq AfficheRegle return } proc TermineZoneAnnotation {w x y} { PositionAnnotation $w $x $y "fin" set Lt [$w tag ranges selZone] if {$Lt != {} } { set Ntag "Anno_[incr ::Anno(NoTag)]" set ::Anno(NtagCou) $Ntag $w tag configure $Ntag -background $::Anno(fgcol) $w tag add $Ntag {*}$Lt $w tag remove selZone 1.0 end } $w configure -state disabled return } proc TestAAduCodon {} { Espionne [AAduCodon Tga] Espionne [AAduCodon TGA W] Espionne [AAduCodon tGA] Espionne [AAduCodon ATG] Espionne [AAduCodon ATG S] Espionne [AAduCodon ATG] Espionne [AAduCodon Reset] Espionne [AAduCodon ATG] Espionne [AAduCodon tGA] exit } proc TestAccessEnCommun {} { global MesAccessInterressants foreach PAB [ListeDesPABs] { set AccProt [AccessDeLaBoite $PAB protein] if {![info exists DejaVu($AccProt)]} {set DejaVu($AccProt) 1} else {continue} if {$AccProt==""} {Espionne "No prot for $PAB $AccProt"} #Si existe rend 0 if {[AccessToKeepOrNotToKeep $AccProt]==1} { set Id [lindex [DefDeAcc $AccProt "protein" "Id"] 1] if {$Id =="" || [regexp "ACT" $Id]} {continue} #Espionne "$PAB Acc $Acc" if {[AccessToKeepOrNotToKeep $Id]==1} { #EnrichiAccessToKeepOrNotToKeep $AccProt Espionne "$AccProt\t[lindex [DefDeAcc $AccProt "protein" "Id"] 1]\t[AccessDeLaBoite $PAB protein Definition]" continue } continue } } #set LesAccess [array names MesAccessInterressants] #EspionneL [lsort $LesAccess] } proc TestAff {} { AfficheFichier "[RepertoireDuGenome]/nuctfa/EVI0001" "AvecFormate" set Texte [ContenuDuFichier "[RepertoireDuGenome]/nuctfa/EVI0001"] AfficheVariable $Texte "AvecFormate" } proc TestAffiche {} { AfficheFichier "[RepertoireDuGenome]/nuctfa/EVI00020" "AvecFormate" set Texte [ContenuDuFichier "[RepertoireDuGenome]/nuctfa/EVI00020"] AfficheVariable $Texte "AvecFormate" } proc TestAffyAnno {} { foreach Index [AffyAnno ListOf Index] { foreach Header [AffyAnno ListOf Header] { Espionne "$Index $Header [AffyAnno $Index $Header]" } } } proc TestAllEleGen {} { set SizeFMin 99999999999 set SizeFMax -1 foreach Gn [AllEleGen ListOf Gn] { if {$Gn=="" || $Gn=="NA"} { continue } set Size [AllEleGen $Gn Size] if {$Size>1000000} { continue; Espionne $Gn } if {$Size==""} { continue } if { ! [info exists SizeMin(F)]} { set SizeMin(F) $Size ; set SizeMax(F) $Size } set SizeMin(F) [Mini $SizeMin(F) $Size] set SizeMax(F) [Maxi $SizeMax(F) $Size] foreach T [AnnotType ListOf T] { set Size [AllEleGen $Gn Size $T] if {$Size==""} { continue } if { ! [info exists SizeMin($T)]} { set SizeMin($T) $Size ; set SizeMax($T) $Size } set SizeMin($T) [Mini $SizeMin($T) $Size] set SizeMax($T) [Maxi $SizeMax($T) $Size] } } lappend LaSortie [format "%9s %9d %9d" Final $SizeMin(F) $SizeMax(F)] foreach T [lreverse [AnnotType ListOf T]] { set Code [AnnotType $T Code] if { ! [info exists SizeMin($T)]} { continue } lappend LaSortie [format "%9s %9s %9s" $Code $SizeMin($T) $SizeMax($T)] } return $LaSortie } proc TestAnalyseBlastP {} { Wup "Test AnalyseDesBlastPs nombredecopainsdansblast orthoblastp ooblastp" global RepertoireDuGenome global CheckResultat if { ![file exists "$RepertoireDuGenome/apns"] || [glob -nocomplain "$RepertoireDuGenome/apns/*"]=={} || ![file exists "$RepertoireDuGenome/fiches/nombredecopainsdansblast" ]} { lappend CheckResultat "No $RepertoireDuGenome/fiches/nombredecopainsdansblast, run CreeLesFichiersApns" lappend CheckResultat " and run CreeLeFichierNombreDeCopainsDansBlast" } else { lappend CheckResultat " Count les BlastPs done" } if {![file exists "$RepertoireDuGenome/fiches/orthoblastp"]} { lappend CheckResultat "No $RepertoireDuGenome/fiches/orthoblastp, run CreeOrthoBlastP" } else { lappend CheckResultat " $RepertoireDuGenome/fiches/orthoblastp exists, CreeOrthoBlastP done" } if {![file exists "$RepertoireDuGenome/fiches/ooblastp"]} { lappend CheckResultat "No $RepertoireDuGenome/fiches/ooblastp, run ORGAorgaDesBlastPs" } else { lappend CheckResultat " $RepertoireDuGenome/fiches/ooblastp exists, ORGAorgaDesBlastPs done" } } proc TestAnalyseDbClustal {} { Wup "Test AnalyseDbClustaL oomsf startcodon_summary phylumsorthologues paralogues.blastp" Wup "et startcodon_report startcodon_cluster" global RepertoireDuGenome global CheckResultat if {[file exists "$RepertoireDuGenome/fiches/oomsf"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/oomsf\t exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/oomsf" } if {[file exists "$RepertoireDuGenome/fiches/phylumsorthologues"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/phylumsorthologues exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/phylumsorthologues" } if {[file exists "$RepertoireDuGenome/fiches/paralogues.blastp"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/paralogues.blastp exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/paralogues.blastp" } if {[file exists "$RepertoireDuGenome/fiches/startcodon_summary"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/startcodon_summary exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/startcodon_summary" } if {[file exists "$RepertoireDuGenome/fiches/startcodon_cluster"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/startcodon_cluster exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/startcodon_cluster" } #start_codon_report_essai ou start_codon_report if {[file exists "$RepertoireDuGenome/fiches/startcodon_report_essai"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/startcodon_report_essai exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/startcodon_report_essai" } #start_codon_report_essai ou start_codon_report if {![file exists "$RepertoireDuGenome/fiches/oomsf"] || ![file exists "$RepertoireDuGenome/fiches/phylumsorthologues"] || ![file exists "$RepertoireDuGenome/fiches/startcodon_summary"] || ![file exists "$RepertoireDuGenome/fiches/startcodon_cluster"] || ![file exists "$RepertoireDuGenome/fiches/startcodon_report_essai"] || ![file exists "$RepertoireDuGenome/fiches/paralogues.blastp"] } { lappend CheckResultat "Analysis on DbClustal incomplete, run AnalyseLesDbClustal" } else { lappend CheckResultat "AnalyseLesDbClustal done" } } proc TestAnalyseTBlastN {} { Wup "Test AnalyseDesTBlastNs ouatapetbn orthotblastn ootblastn" global RepertoireDuGenome global CheckResultat if {![file exists "$RepertoireDuGenome/fiches/ouatapetbn.genomes"]} { lappend CheckResultat "No $RepertoireDuGenome/fiches/ouatapetbn.genomes, run CreeOuATapeTBlastN" } else { lappend CheckResultat " $RepertoireDuGenome/fiches/ouatapetbn.genomes exists" } if {![file exists "$RepertoireDuGenome/fiches/orthotblastn"]} { lappend CheckResultat "No $RepertoireDuGenome/fiches/orthotblastn, run CreeOrthoTBlastN" } else { lappend CheckResultat " $RepertoireDuGenome/fiches/orthotblastn exists, CreeOrthoTBlastN done" } if {![file exists "$RepertoireDuGenome/fiches/ootblastn"]} { lappend CheckResultat "No $RepertoireDuGenome/fiches/ootblastn, run ORGAorgaDesTBlastNs" } else { lappend CheckResultat " $RepertoireDuGenome/fiches/ootblastn exists, ORGAorgaDesTBlastNs done" } if {![file exists "$RepertoireDuGenome/fiches/organismesayantmemeoperon"]} { lappend CheckResultat "No $RepertoireDuGenome/fiches/organismesayantmemeoperon, run CreeLeFichierOrganismesAyantMemeOperon" } else { lappend CheckResultat " $RepertoireDuGenome/fiches/organismesayantmemeoperon exists" } } proc TestAnchorsCoherents {} { global RepertoireDuGenome set FichierTFA "$RepertoireDuGenome/tfasdescopains/PDB66" set FichierAnchors "$RepertoireDuGenome/ballast/PDB66.anchors" set FichierBlast "$RepertoireDuGenome/blastp/PDB66" Espionne [AnchorsCoherents $FichierTFA $FichierAnchors $FichierBlast] exit } proc TestAnnotationXml {} { ParseAnnotationXml "[RepertoireDuGenome]/annotation/BA0003.xml" AX parray AX exit } proc TestArClade {} { foreach Ligne [LesLignesDuFichier [GscopeFile AHalma04100 taxobla]] { scan $Ligne "%s %s %s" E S OX Espionne [format "%-30s %s OX = %s" [ArCladeOf $OX Name] [Tax $OX Name] $OX] } } proc TestArbreEnListe {{args ""}} { global AfficheArbreIndent set AfficheArbreIndent 0 if {$args != ""} {set Fic $args} {set Fic "/genomics/link/ARP/phylos/ARP47"} set Arbre [ArbreEnListe [ContenuDuFichier $Fic]] AfficheArbre $Arbre exit } proc TestArchaeaGenomesDeClaudine {} { foreach OS [ClaudineArchaea ListOf OS] { regsub -all " +" [string trim $OS] "_" OS Espionne [format "%-30s %s" [ArCladeOf $OS Name] $OS] } } proc TestBali {} { global LNOrdali LSOrdali Sequences PABCourant OrdTmpDir FichierTFA Defauts SDG NomSeqSel global NId NCo NTt NConsDansId NConsDansCo NConsDansTt TableScore LNorMD NAli LongTot Sequences global VariablesAuDepart TNResConsNSA TNResConsSA LongueurTotale global ConsRef TNResConsSA ListePDB ConsSA global NomSeqSel NBench global TResSeeAsId TResSeeAsCo TResSeeAsTt TResId TResCo TResTt set FichierMSF "" LesDefauts set NomSeqSel {} set Ntypes [list Norm Thompson Ranganatan VolPol Liu Liu2 RPCA Entrop1 Entrop2] set BDir /home/moumou/tmp/Balibase3/bb3_release set Ldir [lsort [glob -types d [file join $BDir RV*]]] foreach d $Ldir { puts "\n====================" puts "= [file tail $d]" puts "====================\n" # Init Variables sens/spec set LongTot 0 set NAli 0 set NBench 0 foreach type $Ntypes { set TResSeeAsId($type) 0 set TResSeeAsCo($type) 0 set TResSeeAsTt($type) 0 set TResId($type) 0 set TResCo($type) 0 set TResTt($type) 0 } LesDefauts TypeAli MSF LesDefauts Mode "Batch" set VariablesAuDepart [info globals] set Lf [glob [file join $d *.msf]] foreach f $Lf { if {[regexp {^BBS} [file tail $f]]} { continue } set FichierMSF $f LesDefauts FichierMSF $FichierMSF puts "\n => [file tail $f]" LoadingAlignement InitInfoSeqs LongueurDeLAlignement set NSqs [llength $SDG(GroupeToutLeMonde)] set PABCourant $f puts "NSeqs : $NSqs Lgt $LongueurTotale" if {$NSqs < 10} { puts "Less than 10 Sequences !!" FermeFichier continue } AnyBal $f FermeFichier } # Calcul Specificite et Sensibilite puts "" puts "" puts "=========================" puts "= R E S U L T A T S =" puts "=========================" puts "" puts "Nombre alignements ..............: $NAli" puts "Longueur totale .................: $LongTot" puts "Nombre residus du benchmark .....: $NBench" puts "" foreach tnom $Ntypes { # Sens = VraiPos/(VraiPos + FauxNeg) # Spec = VraiNeg/(VraiNeg + FauxPos) # VraiPos : Identi ET SA # FauxPos : SA non vu (non identifie) # VraiNeg : lg - sa - colo cons qui sont pas sites # FauxNeg : Sa qui ne sont pas dans une col de cons set ResSeeAsId "[set TResSeeAsId($tnom)]." set ResId "[set TResId($tnom)]." set ResSeeAsCo "[set TResSeeAsCo($tnom)]." set ResCo "[set TResCo($tnom)]." set ResSeeAsTt "[set TResSeeAsTt($tnom)]." set ResTt "[set TResTt($tnom)]." # Pour Identite # -------- set sensId [expr {1.*$ResSeeAsId/$NBench}] set specId [expr {1.*($LongTot - $ResId - ($NBench - $ResSeeAsId))/(($LongTot - $ResId - ($NBench - $ResSeeAsId))+($ResId - $ResSeeAsId))}] set SumSensSpecId [expr {($sensId + $specId) - 1.0}] # Pour Conserve # -------- set sensCo [expr {1.*$ResSeeAsCo/$NBench}] set specCo [expr {1.*($LongTot - $ResCo - ($NBench - $ResSeeAsCo))/(($LongTot - $ResCo - ($NBench - $ResSeeAsCo))+($ResCo - $ResSeeAsCo))}] set SumSensSpecCo [expr {($sensCo + $specCo) - 1.0}] # Pour Global (Identite+Cons) #set NConsTt [expr {$NConsId + $NConsCo}] set sensTt [expr {$ResSeeAsTt/$NBench}] set specTt [expr {1.*($LongTot - $ResTt - ($NBench - $ResSeeAsTt))/(($LongTot - $ResTt - ($NBench - $ResSeeAsTt))+($ResTt - $ResSeeAsTt))}] set SumSensSpecTt [expr {($sensTt + $specTt) - 1.0}] puts "" puts "type [join $tnom +] :" puts "--------------" puts "Nombre residus vus Identite........... : $ResId" puts "Nombre residus vus Conserves ......... : $ResCo" puts "Nombre residus vus Iden+Cons ......... : $ResTt" puts "Nombre residus typifies Ident ........ : $ResSeeAsId" puts "Nombre residus typifies Cons ......... : $ResSeeAsCo" puts "Nombre residus typifies Iden+Cons .... : $ResSeeAsTt" set fmt "%s %5.3f" puts "" puts [format $fmt "\tsensibilite Identite ......:" $sensId] puts [format $fmt "\tspecificite Identite ......:" $specId] puts [format $fmt "\tSomme sens+spec Identite...:" $SumSensSpecId] puts [format $fmt "\tsensibilite Conserve ......:" $sensCo] puts [format $fmt "\tspecificite Conserve ......:" $specCo] puts [format $fmt "\tSomme sens+spec Conserve ..:" $SumSensSpecCo] puts [format $fmt "\tsensibilite totale ........:" $sensTt] puts [format $fmt "\tspecificite totale ........:" $specTt] puts [format $fmt "\tSomme sens+spec totale ....:" $SumSensSpecTt] puts "" puts "" set ResPF($tnom,sensId) $sensId set ResPF($tnom,specId) $specId set ResPF($tnom,sumId) $SumSensSpecId set ResPF($tnom,sensCo) $sensCo set ResPF($tnom,specCo) $specCo set ResPF($tnom,sumCo) $SumSensSpecCo set ResPF($tnom,sensTt) $sensTt set ResPF($tnom,specTt) $specTt set ResPF($tnom,sumTt) $SumSensSpecTt } puts "\n\n" foreach titre {"Sensibilite Identite" "Specificite Identite" "Sum Identite" "Sensibilite Conserve" "Specificite Conserve" "Sum Conserve" "Sensibilite Totale" "Specificite Totale" "Sum Totale"} cle {sensId specId sumId sensCo specCo sumCo sensTt specTt sumTt} { puts "$titre" set Lv [array names ResPF "*,$cle"] set Lr [list] foreach v $Lv { lassign [split $v ,] nom tmp set x [set ResPF($v)] lappend Lr [list $nom $x] } set Lr [lsort -real -index 1 $Lr] foreach v $Lr { lassign $v nom x puts [format "%15s %7.2f" [join $nom +] [expr {$x*100.}]] } puts "" } puts "\nTermine\n" } return } proc TestBird {} { set Query "select * from ucschuman.refgene where txend < 990000 and txstart >= 924207 and chrom='chr1'" Espionne [Bird $Query xml] } proc TestBirdFromQueryText {} { set Query {} # foreach Access [list NP_000035 NP_001009012 NP_001028083 XP_001504915 NP_001003053 NP_038504 NP_036634 NP_999479 XP_001376683] {} foreach Access [list P12345999 PAX2_HUMAN] { lappend Query "ID $Access DB uniprot" lappend Query "FM FLAT" } set Query [join $Query "\n"] Espionne $Query set R [BirdFromQueryText $Query] return $R } proc TestBirdFromTheBlast {} { BirdFromTheBlast EF001 return [BirdWeb "uniprot" "UniRef50_Q057N6"] } proc TestBirdQL {} { set LaQuery {} lappend LaQuery "ID CO8B_HUMAN DB Uniprot" lappend LaQuery "FD AC,ID,DR,GN" lappend LaQuery "FM FLAT" lappend LaQuery "AC P12345 DB Uniprot" lappend LaQuery "FD AC,ID,DR,GN" lappend LaQuery "FM FLAT" set Query [join $LaQuery "\n"] return [BirdFromQueryText $Query] return [BirdQL $Query] } proc TestBlastP {} { Wup "Test BlastP et AnalyseBlastP " global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test BlastP------" if {[file exists "$RepertoireDuGenome/blastp"]} { set Reponse " $RepertoireDuGenome/blastp exists" if {[glob -nocomplain "$RepertoireDuGenome/blastp/*"]=={}} { append Reponse " but you should run BlastPPourTous" lappend CheckResultat $Reponse } else { append Reponse " and BlastPPourTous done" lappend CheckResultat $Reponse TestAnalyseBlastP } } else { set Reponse "Create $RepertoireDuGenome/blastp, run BlastPPourTous" lappend CheckResultat $Reponse } } proc TestBlastReduit {} { BlastReduit PGS542 [LesLignesDuFichier liste.txt] AEnlever exit } proc TestBlastnOnHumanJunctions {} { #Comparaison entre les versions de blast 2.2.10 (blastall) et 2.2.29 avec et sans filtre set BankJuncHuman "/genomics/link/SpliRetMouse/201404/PubliFarkas/JunctionsHumanFromFarkas" foreach FileNuc [glob -nocomplain "/genomics/link/SpliRetMouse/201404/RepDeTravail/VersionBlastn/*.tfa"] { regsub {\.tfa} $FileNuc "" FileNucOut set CommandeBlastOld "blastall -p blastn -i $FileNuc -o ${FileNucOut}_.bl2.2.10 -d $BankJuncHuman -e 50.0 -W 8" Espionne "$CommandeBlastOld" lappend LesCommandes $CommandeBlastOld if {[catch {eval exec $CommandeBlastOld} Message]} { Espionne "Problem with $CommandeBlastOld" Espionne $Message } set CommandeBlastOldFT "blastall -p blastn -i $FileNuc -o ${FileNucOut}_FT.bl2.2.10 -d $BankJuncHuman -e 50.0 -F T -W 8" Espionne "$CommandeBlastOldFT" lappend LesCommandes $CommandeBlastOldFT if {[catch {eval exec $CommandeBlastOldFT} Message]} { Espionne "Problem with $CommandeBlastOldFT" Espionne $Message } set CommandeBlastOldFF "blastall -p blastn -i $FileNuc -o ${FileNucOut}_FF.bl2.2.10 -d $BankJuncHuman -e 50.0 -F F -W 8" Espionne "$CommandeBlastOldFF" lappend LesCommandes $CommandeBlastOldFF if {[catch {eval exec $CommandeBlastOldFF} Message]} { Espionne "Problem with $CommandeBlastOldFF" Espionne $Message } set CommandeBlastNew "/biolo/blast/bin/blastn -task blastn -query $FileNuc -out ${FileNucOut}_.bl2.2.29 -db $BankJuncHuman -evalue 50.0 -word_size 8" Espionne "$CommandeBlastNew" lappend LesCommandes $CommandeBlastNew if {[catch {eval exec $CommandeBlastNew} Message]} { Espionne "Problem with $CommandeBlastNew" Espionne $Message } set CommandeBlastNewDustYes "/biolo/blast/bin/blastn -task blastn -query $FileNuc -out ${FileNucOut}_dustyes.bl2.2.29 -db $BankJuncHuman -evalue 50.0 -dust yes -word_size 8" Espionne "$CommandeBlastNewDustYes" lappend LesCommandes $CommandeBlastNewDustYes if {[catch {eval exec $CommandeBlastNewDustYes} Message]} { Espionne "Problem with $CommandeBlastNewDustYes" Espionne $Message } set CommandeBlastNewDustNo "/biolo/blast/bin/blastn -task blastn -query $FileNuc -out ${FileNucOut}_dustno.bl2.2.29 -db $BankJuncHuman -evalue 50.0 -dust no -word_size 8" Espionne "$CommandeBlastNewDustNo" lappend LesCommandes $CommandeBlastNewDustNo if {[catch {eval exec $CommandeBlastNewDustNo} Message]} { Espionne "Problem with $CommandeBlastNewDustNo" Espionne $Message } } #SauveLesLignes $LesCommandes dans "/genomics/link/SpliRetMouse/201404/RepDeTravail/VersionBlastn/Commandes" } proc TestBlastpOnProtall {} { #Comparaison entre les versions de blast 2.2.10 (blastall) et 2.2.29 avec et sans filtre foreach FileProt [glob -nocomplain "/genomics/link/SpliRetMouse/201404/RepDeTravail/VersionBlastp/*.tfa"] { regsub {\.tfa} $FileProt "" FileProtOut set CommandeBlastOld "blastall -p blastp -i $FileProt -o ${FileProtOut}_.bl2.2.10 -d /blast/protall -v 5000 -b 5000" Espionne "$CommandeBlastOld" lappend LesCommandes $CommandeBlastOld if {[catch {eval exec $CommandeBlastOld} Message]} { Espionne "Problem with $CommandeBlastOld" Espionne $Message } set CommandeBlastOldFT "blastall -p blastp -i $FileProt -o ${FileProtOut}_FT.bl2.2.10 -d /blast/protall -F T -v 5000 -b 5000" Espionne "$CommandeBlastOldFT" lappend LesCommandes $CommandeBlastOldFT if {[catch {eval exec $CommandeBlastOldFT} Message]} { Espionne "Problem with $CommandeBlastOldFT" Espionne $Message } set CommandeBlastOldFF "blastall -p blastp -i $FileProt -o ${FileProtOut}_FF.bl2.2.10 -d /blast/protall -F F -v 5000 -b 5000" Espionne "$CommandeBlastOldFF" lappend LesCommandes $CommandeBlastOldFF if {[catch {eval exec $CommandeBlastOldFF} Message]} { Espionne "Problem with $CommandeBlastOldFF" Espionne $Message } set CommandeBlastNew "/biolo/blast/bin/blastp -query $FileProt -out ${FileProtOut}_.bl2.2.29 -db /blast/protall -num_descriptions 5000 -num_alignments 5000" Espionne "$CommandeBlastNew" lappend LesCommandes $CommandeBlastNew if {[catch {eval exec $CommandeBlastNew} Message]} { Espionne "Problem with $CommandeBlastNew" Espionne $Message } set CommandeBlastNewSegYes "/biolo/blast/bin/blastp -query $FileProt -out ${FileProtOut}_segyes.bl2.2.29 -db /blast/protall -seg yes -num_descriptions 5000 -num_alignments 5000" Espionne "$CommandeBlastNewSegYes" lappend LesCommandes $CommandeBlastNewSegYes if {[catch {eval exec $CommandeBlastNewSegYes} Message]} { Espionne "Problem with $CommandeBlastNewSegYes" Espionne $Message } set CommandeBlastNewSegNo "/biolo/blast/bin/blastp -query $FileProt -out ${FileProtOut}_segno.bl2.2.29 -db /blast/protall -seg no -num_descriptions 5000 -num_alignments 5000" Espionne "$CommandeBlastNewSegNo" lappend LesCommandes $CommandeBlastNewSegNo if {[catch {eval exec $CommandeBlastNewSegNo} Message]} { Espionne "Problem with $CommandeBlastNewSegNo" Espionne $Message } } SauveLesLignes $LesCommandes dans "/genomics/link/SpliRetMouse/201404/RepDeTravail/VersionBlastp/Commandes" } proc TestBlomeSql {Projet Phylum} { set LeSql [list] lappend LeSql "SELECT COUNT(ln_organism_taxobla.pk_taxobla), specie, taxid, ln_organism_taxobla.pk_organism, clade.nom " lappend LeSql "FROM ln_organism_taxobla join taxobla ON taxobla.pk_taxobla =ln_organism_taxobla.pk_taxobla " lappend LeSql "JOIN organism ON organism.pk_organism= ln_organism_taxobla.pk_organism " lappend LeSql "JOIN ln_clade_organism ON ln_clade_organism.pk_organism = organism.pk_organism " lappend LeSql "JOIN clade ON clade.pk_clade=ln_clade_organism.pk_clade " lappend LeSql "GROUP BY organism.pk_organism ORDER BY clade.pk_clade" set Sql [join $LeSql " "] set R [SqlExecForDatabase "[BlomeDbDir]/${Projet}_${Phylum}.db" $Sql GetList] EspionneL $R exit } proc TestBrocOli {} { set FicOligos "[RepertoireDuGenome]/atelier/rr/oligos_rr.tfa" set FicOligos "[RepertoireDuGenome]/atelier/AnneCath2/oligos_HsCyclinT1-2-533-674-726.tfa" # set FicOligos "[RepertoireDuGenome]/atelier/Levy/Ordre2/oligos_AttB1_NdeI-ToDo20080710hsVBP1-BamHI_TEV2_STREP_STOP_AttB2.tfa" foreach Access [LaSequenceDuTFAs $FicOligos "LaListeDesAccess"] { set TFA [LaSequenceDuTFAs $FicOligos $Access] set B [BrocOli $TFA] Espionne $B } } proc TestCA {} { return [CompareADNDesFichiersTFA "/genomics/link/ProGS/nuctfa/PGS002" "/genomics/link/ProGS/nuctfa/PGS502" SansAffichage] } proc TestCanalSqlCurrent {} { CanalSql Espionne [CanalSqlCurrent] CanalSqlDisconnect Espionne [CanalSqlCurrent] CanalSql Espionne [CanalSqlCurrent] } proc TestCanvasToSvgFile {} { # set K [GscopeBoard] package require Tk LogWscope coucoucoucoucouc set K [IllustreLeBlast "/genomics/link/CilioCarta2014/blastp/CIL006"] LogWscope $K return [CanvasToSvgFile $K "GetSvg"] } proc TestCanvasToSvgFileSvg {} { package require Tk set K [IllustreLeBlastSvg] return [CanvasToSvgFile $K "GetSvg"] } proc TestCdsFromNM {} { set Fasta [eFetchREST nucleotide "NM_019955 AI852232 NM_019778" cds] Espionne $Fasta } proc TestCenar {} { set G [QueLaSequenceDuFichierTFA "/genomics/link/Cenar/beton/cenarchaeum_symbiosum.tfa"] regsub -all -nocase {[ATGC]} $G "" g Espionne $g set O [QueLaSequenceDuFichierTFA "/home/sage2014/odile/NC_014820.tfa"] if {$G==$O} { FaireLire "C bon" } exit } proc TestChaqueProteineDuTBlastN {Nom} { global RepertoireDuGenome set Fichier "$RepertoireDuGenome/tblastngenomes/$Nom" if { ! [file exists $Fichier]} { return "" } Espionne [join [ChaqueProteineDuTBlastN $Fichier] "\n"] exit } proc TestChemin {} { global T LNOrdali set LNOrdali [list s01 s02 s03 s04 s05 s06 s07 s08] array set T [ContenuDuFichier filsde.dat] set n1 s01 foreach k [array names T "$n1,*"] { lassign [split $k ,] n1 ag1 set Lchemin [CheminsAgent $n1 $ag1 $n1 $ag1] puts "\n$n1 $ag1 :" puts [join $Lchemin \n] } exit } proc TestCheminRR {} { global T LNOrdali set LNOrdali [list s01 s02 s03 s04 s05 s06 s07 s08] array set T [ContenuDuFichier "/home/moumou/Agents/filsde.dat"] # foreach {K V} [array get T] { # lassign [split $k ,] n1 ag1 # Espionne "$K" # } set n1 s01 foreach k [array names T "$n1,*"] { lassign [split $k ,] n1 ag1 set A "$n1,$ag1" set B "$n1,$ag1" set Lchemin [CheminsAgentRR $A $B] puts "\n$A :" puts [join $Lchemin \n] } exit } proc TestChoixParmi {} { set LCP [ColorationsPossibles] set LCPT [LaTraduction $LCP] Espionne [ChoixParmiJoli $LCP {} $LCPT] exit } proc TestCineticCongRD1 {} { foreach GN [CineticCongRD1 ListOf GN] { foreach Mot [split $GN ","] { set GscopeId [QuestionDeScience "EVImm" "ret GscopeIdsOfGeneName $Mot WithSynonyms"] Espionne "$Mot $GscopeId" } } } proc TestCladeCourant {} { Espionne [CladeCourant] Espionne [CladeCourant Insecta] Espionne [CladeCourant See] Espionne [CladeCourant New] } proc TestCleaning {} { Chronometre Depart #Rapide CleanFeaturesInMACS "[RepertoireDuGenome]/alignement_ARP/Actin_Complet6_7.rsf" toto Chronometre Arrivee Chronometre Depart #Lent CleanFeaturesInMACS2 "[RepertoireDuGenome]/alignement_ARP/Actin_Complet6_7.rsf" tutu Chronometre Arrivee } proc TestClonage {} { set LesOli [ClonInventory LesOligos] set LesOli [ClonInventory LesOligos] Espionne [OligosFiles [ChoixParmi [ItsOligos [ChoixParmi $LesOli]]]] } proc TestClusterPos {{file ""}} { global LNOrdali PABCourant OrdTmpDir FichierMSF Defauts SDG NomSeqSel global NId NCo NConsDansId NConsDansCo TableScore LNorMD ConsRef Sequences global VariablesAuDepart TNResConsNSA TNResConsSA LongueurTotale LongTot set FichierMSF "" NousAllonsAuBoulot $OrdTmpDir LoadReferencePDB LoadNorMD LesDefauts NettoieLeTmp set rep "[RepGenLuc]/msf" #set repLeon [file join [RepGenLuc] "msf_nature" "Rascal" "Leon"] #aF on prend les fichiers issus de Rascal et non pas de leon! set repRascal [file join [RepGenLuc] "msf_nature" "Rascal"] if {$file ne ""} { set LesFiles $file if {[string index [string trim $file] end] == "+"} { set tmp [LPABLuc] set file [string range $file 0 end-1] set i [lsearch $tmp $file] set LesFiles [lrange $tmp $i end] } } else { set LesFiles [LPABLuc] #aF je ne veux pas traiter l ensemble de la liste, mais simplement certains PAB, contenu dans le fichier fichierPAB #set fichierPAB [file join [RepGenLuc] "Typification" "ResuThese" "listeComQualSansrm"] #set LesFiles [LesLignesDuFichier $fichierPAB] } set NomSeqSel {} # Types de conservations a tester # Originaux : # set Ltypes [list 0 1 2 4 5 04 05 45 045 6 7 8 9] # set Ntypes [list Norm Surf Angle Dist Delta Norm+Dist Norm+Delta Dist+Delta Norm+Dist+Delta VolPol Al2Co Liu RPCA] # # to work set Ltypes [list 0 1 2 3 4 5 6 8 9] set Ntypes [list Norm Surf Angle Surf2 Dist Delta VolPol Liu RPCA] set LongTot 0 foreach type $Ltypes { set TNConsId($type) 0 set TNConsCo($type) 0 set TNId($type) 0 set TNCo($type) 0 } set VariablesAuDepart [info globals] LesDefauts TypeAli MSF LesDefauts Mode "Batch" set NAli 0 set NResConsSA 0 set NResConsNSA 0 foreach n $LesFiles { # set fic [file join $repLeon $n] #aF a modifie repLeon en repRascal set fic [file join $repRascal $n] if {! [file exists $fic]} { puts " >>$fic<< doesn t exists !" puts " -----------------------\n\n" continue } file copy -force $fic [file join $OrdTmpDir $n] set FichierMSF [file join $OrdTmpDir $n] LesDefauts FichierMSF $FichierMSF puts "===========" puts "| $n |" puts "===========" set PABCourant $n if {[set LNorMD($n)] < 0.3} { puts "" puts " >>> NorMD est < a 0.3 <<<" puts "" FermeFichier continue } LoadingAlignement # ::profiler::reset MetAJourGroupes set NSqs [llength $SDG(GroupeToutLeMonde)] puts "NSeqs : $NSqs" if {$NSqs < 10} { puts "Les than 10 Sequences !!" FermeFichier continue } if {[info exists TableScore]} {unset TableScore} set grp "" ScoreDeNorm $grp ; # 0 1 2 3 ScoreDeSurf $grp ; # 0 1 2 3 ScoreDeThompson $grp ; # 4 ScoreDeRanganatan $grp ; # 5 ScoreDeVolPol $grp ; # 6 ScoreAl2Co $grp ; # 7 ScoreDeLiu $grp ; # 8 ScoreDeLiu2 $grp ; # 8 ScoreDeRPCA $grp ; # 9 set rep1 [VerificationAvantCalculs] if {! $rep1} { puts "Une des methode foireuse !!" puts "skip alignement\n" } else { set BonTousTypes 1 foreach type $Ltypes tnom $Ntypes { set NConsDansId 0 set NConsDansCo 0 set NId 0 set NCo 0 set rep2 [LanceLesCalculs $type $grp] update if {$rep2} { set tmp_TNConsId($type) $NConsDansId set tmp_TNConsCo($type) $NConsDansCo set tmp_TNId($type) $NId set tmp_TNCo($type) $NCo } else { set BonTousTypes 0 break } } if {$BonTousTypes} { incr LongTot $LongueurTotale incr NAli incr NResConsSA [set TNResConsSA($n)] incr NResConsNSA [set TNResConsNSA($n)] foreach type $Ltypes tnom $Ntypes { incr TNConsId($type) [set tmp_TNConsId($type)] incr TNConsCo($type) [set tmp_TNConsCo($type)] incr TNId($type) [set tmp_TNId($type)] incr TNCo($type) [set tmp_TNCo($type)] } } } file delete -force [file join $OrdTmpDir $n] FermeFichier puts "" puts "" #AfficheProfileResults } # Calcul Specificite et Sensibilite puts "" puts "" puts "=========================" puts "= R E S U L T A T S =" puts "=========================" puts "" puts "Nombre alignements ..............: $NAli" puts "Longueur totale .................: $LongTot" puts "Nombre residus site actif .......: $NResConsSA" puts "Nombre residus NON site actif ...: $NResConsNSA" puts "" set NResCons ${NResConsSA} foreach t $Ltypes tnom $Ntypes { # Sens = VraiPos/(VraiPos + FauxNeg) # Spec = VraiNeg/(VraiNeg + FauxPos) # VraiPos : Identi ET SA # FauxNeg : SA non vu (non identifie) # VraiNeg : lg - sa - colo cons qui sont pas sites # FauxNeg : Sa qui ne sont pas dans une col de cons if {$t == 7} {continue} set NConsId "[set TNConsId($t)]." set NId "[set TNId($t)]." # Pour Identite set sensId [expr {1.*$NConsId/$NResCons}] set specId [expr {1.*($LongTot - $NId - ($NResCons - $NConsId))/(($LongTot - $NId - ($NResCons - $NConsId))+($NId - $NConsId))}] set SumSensSpecId [expr {($sensId + $specId) - 1.0}] # Pour Global (Identite+Cons) set NTt [expr {$NId + [set TNCo($t)]}] set NConsTt [expr {$NConsId + [set TNConsCo($t)]}] set sensTt [expr {$NConsTt/$NResCons}] set specTt [expr {1.*($LongTot - $NTt - ($NResCons - $NConsTt))/(($LongTot - $NTt - ($NResCons - $NConsTt))+($NTt - $NConsTt))}] set SumSensSpecTt [expr {($sensTt + $specTt) - 1.0}] # CalculSensibiliteSpecificite $NConsId [expr {$NId-$NConsId}] [expr {$LongTot - $NId}] puts "" puts "type $tnom :" puts "--------------" puts "Nombre residus Identite........... : $NId" puts "Nombre residus Ident+Cons .........: $NTt" puts "Nombre residus SA typifie Iden ....: $NConsId" puts "Nbr resi SA typifie Iden+Cons .....: $NConsTt" set fmt "%s %5.3f" puts "" puts [format $fmt "\tsensibilite Identite ......:" $sensId] puts [format $fmt "\tspecificite Identite ......:" $specId] puts [format $fmt "\tSomme sens+spec Identite...:" $SumSensSpecId] puts [format $fmt "\tsensibilite totale ........:" $sensTt] puts [format $fmt "\tspecificite totale ........:" $specTt] puts [format $fmt "\tSomme sens+spec totale ....:" $SumSensSpecTt] puts "" puts "" } exit } proc TestCodeOrga {} { foreach OX [WIW ListOf OX] { } } 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 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 TestConcatLesTFAs {} { # set Selection "EST:[StringSuivant "EST:" dans [ContenuDuFichier ~/sele]]" set Selection [ContenuDuFichier "[HomeRipp]/SelectionBOX006.txt"] return [ConcatLesTFAs $Selection] } proc TestCorrectionPourThrombin {Fi} { return [CorrectionPourThrombin [LesLignesDuFichier $Fi] $Fi zz] } proc TestCoupeMainChain {type Lca {Lcol ""} {Lc ""} {Lo ""}} { if {$type eq "Protein"} { # CA - CA : en gros 4.3 A -> Thr 6. set dst 36. } else { # P - P : en gros 5.5 A -> Thr 8 set dst 64. } set Li 0 set i 0 set p0 [lindex $Lca 0] foreach p [lrange $Lca 1 end] { lassign $p0 a b c d lassign $p x y z w if {($a-$x)**2 + ($b-$y)**2 + ($c-$z)**2 > $dst} { lappend li $i } set p0 $p incr i } lappend Li [expr {[llength $Lca]-1}] set i0 0 set Lres [list] foreach i [lrange $Li 1 end] { set rca [lrange $Lca $i0 $i] if {$Lcol != {}} { set rcol [lrange $Lcol $i0 $i] } else { lappend Lres $rca continue } if {$Lc != {}} { set rc [lrange $Lc $i0 $i] set ro [lrange $Lo $i0 $i] lappend Lres [list $rca $rcol $rc $ro] } else { lappend Lres [list $rca $rcol] } set i0 [expr {$i+1}] } return $Lres if {[llength $Li] == 2} { return [list $Lres] } else { return $Lres } } proc TestCreeLaListeLesCopains {} { } proc TestCrmMapper {} { # set A [BirdSendQueryUrlAndGetFromUrl {select TXSTART from ucscmouse.refgene where chrom='chr11' and 77696429<=txStart and strand='+' order by TXSTART fetch first 1 rows only} {} format=flat] # Espionne "$A" set B [BirdSendQueryUrlAndGetFromUrl {select NAME, TXSTART, TXEND, STRAND from ucscmouse.refgene where chrom='chr11' and 77747137=txStart and strand='+' order by TXEND} {} format=plat] Espionne "$B" } proc TestDataSet {} { global DataSet set A [DataSet create AAA] set B [DataSet create BBB] set C [DataSet create CCC] DataSet father $B $A DataSet linksappend $A $C DataSet spyAll $A set Z [DataSet clone $A] DataSet updateFather $Z foreach X [concat [list $A $B $C $Z] [DataSet links $Z]] { DataSet spyAll $X } exit Grave DataSet exit } proc TestDecortiqueBlast {{Nom ""}} { global RepertoireDuGenome global ListeDesPABs if { $Nom == "" } { ChargeListeDeBoites set Liste $ListeDesPABs } else { set Liste [list $Nom] } foreach Nom $Liste { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" set lPartieSegAli {} # DecortiqueBlast $FichierBlastP "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN lPartieSegAli DecortiqueBlast $FichierBlastP "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN SegAli $lPartieSegAli { # puts "$BanqueId $Access $DE $Profil $PN \n$SegAli" puts "$BanqueId $Access $DE" } continue set FichierBlast "$RepertoireDuGenome/blastngenembl/$Nom" if { ! [file exists $FichierBlast]} { continue } DecortiqueBlast $FichierBlast 0.001 5 Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN { Espionne "$Nom $BanqueId $Access $DE $Profil $PN" set LeEMBL [LaSequenceDesBanques $BanqueId $Access a "OnVeutNucEMBL"] if {$LeEMBL=={}} { } else { EspionneL $LeEMBL break } } Espionne "" continue set FichierBallast "$RepertoireDuGenome/ballast/$Nom" if { ! [file exists $FichierBallast]} { continue } set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" DecortiqueBlast $FichierBallast "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN { puts "$BanqueId $Access $DE $Profil $PN" } DecortiqueBlast $FichierBlastP "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN { puts "$BanqueId $Access $DE $Profil $PN" } } exit } proc TestDecortiqueBlat {Fichier} { set LesHits [DecortiqueBlat $Fichier] foreach LeHit $LesHits { ScanLaListe $LeHit Query LongQuery BId Access Length Score Expect Identities Strand DebQuery FinQuery DebSbjct FinSbjct SeqQuery Barres SeqSbjct] Espionne "$Query $LongQuery $BId $Access $Length $Score $Expect $Identities $Strand" } } proc TestDecortiqueEMBL {{Fichier ""}} { if {$Fichier==""} { set Fichier "./essai.embl" } set LL [LaSequenceDesBanques $Fichier] DecortiqueLesLignesEMBL $LL ID AC DE GN OS OC OX SequenceBrute LaDETotal EspionneL [list $ID $AC $DE $GN $OS $OC $OX $LaDETotal] Espionne $SequenceBrute exit } proc TestDecortiqueGenScan {} { set X [DecortiqueGenScan All All Numbers [ContenuDuFichier "IT0002.gsc"]] Espionne $X Espionne [DecortiqueGenScan 1 All Gauche] Espionne [DecortiqueGenScan 1 All Droite] foreach N [DecortiqueGenScan 1 All Numbers] { Espionne [DecortiqueGenScan 1 $N Begin] Espionne [DecortiqueGenScan 1 $N End] } exit } proc TestDecortiqueUnMSF {FichierMSF} { DecortiqueUnMSF $FichierMSF LesNoms Sequences foreach NomSeq $LesNoms { set Seq $Sequences($NomSeq) regsub -all {\.} $Seq "" Lettres Espionne "$NomSeq [string length $Seq] [string length $Lettres]" Espionne $Seq } exit } proc TestDecortiqueUnMacsimXml {{Quoi ""}} { global Voir_dans_MacsimsVariables LesDefauts set FichierOuTexteXML "/genomics/link/CilioCarta2014/macsimXml/CIL006" set MacsimsVariables [DecortiqueUnMacsimXml $FichierOuTexteXML] lassign $MacsimsVariables LesL LesT if {[array exists ::$Quoi]} { parray ::$Quoi } else { EspionneL [set ::$Quoi] } foreach T $LesT { # parray ::$T } return $MacsimsVariables } proc TestDecortiqueUnRSF {} { set n [DecortiqueUnRSF "/genomics/link/CilioCarta2014/macsimRsf/CIL006" LesName Sequences TabRSF "" "AvecBornesLocales"] foreach Name $LesName { Espionne "name $Name [set TabRSF($Name,group)]" set LesTypes [set TabRSF($Name,LesTypesDeFeatures)] foreach Type $LesTypes { Espionne "\nPour $Name : Type $Type" EspionneL [set TabRSF($Name,Type,$Type)] } } Espionne $TabRSF($Name,LesClefs) exit } proc TestDefDesDomaine {CodeGscope} { set compt 1 set ListeDesDomaines {} set LdomaineName {} set fichierMSF [RepertoireDuGenome]/msf/$CodeGscope set fichierMacsim [RepertoireDuGenome]/macsimXml/$CodeGscope set annotation [FromMacsims "$fichierMacsim" "$CodeGscope" "ConcatPfam"] foreach pfam $annotation { Espionne "---> pafm: $pfam" scan $pfam "%s %s %s %s" pfamName complement from position if {[regexp {^PROP_(.*)} $pfamName a p]} { set pfamName $p } set pos [split [lindex [split $position "/"] 1] "-"] set start [lindex $pos 0] set end [lindex $pos 1] #Espionne "Pfam: $pfamName; start: $start; END: $end" #Espionne "Pfam: $pfamName" #definir la position absolue set start [DansAlignementPositionAbsolue $start $CodeGscope $fichierMSF] set end [DansAlignementPositionAbsolue $end $CodeGscope $fichierMSF] if {$LdomaineName==""} { lappend LdomaineName $pfamName lappend ListeDesDomaines "$pfamName $start $end" } else { set value [lsearch -exact $LdomaineName $pfamName] Espionne "value: $value" if {$value==-1} { #Espionne "$pfamName" lappend LdomaineName $pfamName lappend ListeDesDomaines "$pfamName $start $end" } else { append pfamName "_$compt" #Espionne "pfamName: $pfamName" lappend LdomaineName $pfamName lappend ListeDesDomaines "$pfamName $start $end" incr compt } } } return $ListeDesDomaines } proc TestDefinitionPartagee {} { foreach Nom [ListeDesPABs] { if {[EstUnPABMute $Nom]} { continue } set Fichier "[RepertoireDuGenome]/blastp/$Nom" DecortiqueBlast $Fichier 0.001 80 Query lBId lA lDE lProfil lPN DefinitionPartagee $lDE $Fichier } } proc TestDesdomaine {CodeGscope} { set ListeDesDomaines [TestDefDesDomaine $CodeGscope] foreach domaine $ListeDesDomaines { #Espionne "domaine: $domaine" scan $domaine "%s %s %s" pfam start end #Espionne "pfam: $pfam; start: $start; end: $end" set PosDebAbsolueSeqRef 0 set PosFinAbsolueSeqRef 0 PositionRelativeSeqCibleParRapportSeqRef $pfam $CodeGscope $start $end } } proc TestDialogPort {} { Espionne [DialogPort] Espionne [DialogPort] Espionne [DialogPort GetFirst] Espionne [DialogPort New] Espionne [DialogPort GetAll] Espionne [DialogPort 21109] Espionne [DialogPort New] Espionne [DialogPort GetAll] Espionne [DialogPort] } proc TestDict2Json {} { set D [Json] source "[HomeRipp]/Desktop/exp_json.tcl" return [::json::dict2json $D] } proc TestEE {} { set Meilleur [lindex [LesAccessEMBLDesLignesEMBL [LaSequenceDesBanques syd_ecoli syd_ecoli AccessOK "OnVeutEMBL"]] 2] set LeGenBank [LaSequenceDesBanques $Meilleur $Meilleur AccessOK "OnVeutNature"] EspionneL [DecortiqueGenBank OS OC SeqADN $LeGenBank] exit } proc TestEstCeVraimentUneNouvelleSequence {{NP ""}} { set TFA [ContenuDuFichier [GscopeFile PGS001 $NP]] # append TFA "ATGATGATAG" regsub {>[^ ]+} $TFA ">AR" TFA Espionne [EstCeVraimentUneNouvelleSequence $TFA $NP] } proc TestExec {} { # CanalSqlString # CanalSqlDisconnect return [exec which tcsh] exec tcsh -c "cd /home/luudao/tmp/ ; tar -cf - String_9606_201109201940 | gzip -9 > String_9606_201109201940.tgz " } proc TestExtractPartsFromEMBL {} { Espionne [ExtractPartsFromEMBL ./uniprot_trembl_vertebrates.dat 0 2] Espionne [ExtractPartsFromEMBL ./uniprot_trembl_vertebrates.dat 3 3] Espionne [ExtractPartsFromEMBL ./uniprot_trembl_vertebrates.dat 2 3] Espionne [ExtractPartsFromEMBL ./uniprot_trembl_vertebrates.dat 26224 26224] Espionne [ExtractPartsFromEMBL ./uniprot_trembl_vertebrates.dat 26225 26225] Espionne [ExtractPartsFromEMBL ./uniprot_trembl_vertebrates.dat 26224] Espionne [ExtractPartsFromEMBL ./uniprot_trembl_vertebrates.dat 26225] exit } proc TestFiches {} { Wup "Test le repertoire /fiches similarite sizedescriptif sizemsf codonstartpossible codonstoppossible" global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test /fiches------" if {[file exists "$RepertoireDuGenome/fiches"] &&[file isdirectory "$RepertoireDuGenome/fiches"]} { set Reponse " $RepertoireDuGenome/fiches\t\t\t exists" lappend CheckResultat $Reponse if {[file exists "$RepertoireDuGenome/fiches/similarite"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/similarite\t exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/similarite\t copy it" } if {[file exists "$RepertoireDuGenome/fiches/sizedescriptif"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/sizedescriptif \t exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/sizedescriptif \tcopy it" } if {[file exists "$RepertoireDuGenome/fiches/sizemsf"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/sizemsf\t\t exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/sizemsf\t\tcopy it" } if {[file exists "$RepertoireDuGenome/fiches/codonstartpossible"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/codonstartpossible exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/codonstartpossible copy it" } if {[file exists "$RepertoireDuGenome/fiches/codonstoppossible/"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/codonstoppossible exists" } else { lappend CheckResultat "No $RepertoireDuGenome/fiches/codonstoppossible copy it" } } else { set Reponse "Create $RepertoireDuGenome/fiches \(mkdir fiches\)" lappend CheckResultat $Reponse } } proc TestFormatQuery {} { set Query [::http::formatQuery A B "Donnees" "Bonjour Madame il fait beau et 2+2=4"] Espionne $Query Espionne [TexteAscii $Query] exit } proc TestFrappeQuUnCoup {} { Espionne [set Moi [FrappeQuUnCoup "AskWhereToBegin" "set"]] Espionne [FrappeQuUnCoup PGS015 $Moi] Espionne [FrappeQuUnCoup PGS111 $Moi] Espionne [FrappeQuUnCoup PGS018 $Moi] } proc TestFromMacsim {} { Espionne [FromMacsim CIL007 Sequences G1PUE7_MYOLU] FromMacsim UnsetAll Espionne [FromMacsim CIL007 Sequences G1PUE7_MYOLU] FromMacsim CIL007 unset Espionne [FromMacsim CIL007 Sequences G1PUE7_MYOLU] } proc TestFusionneLesGenscan {A B TailleTroncon} { set LeGscA [LesLignesDuFichier $A] set LeGscB [LesLignesDuFichier $B] EspionneL [FusionneLesGenscan $LeGscA $LeGscB $TailleTroncon] exit } proc TestGenoretProteomicsLinks {} { set Nom EVI00520 foreach Ref [GenoretProteomicsLinks $Nom "Ref"] { Espionne $Ref EspionneL [GenoretProteomicsLinks "$Nom$Ref" "Columns"] } exit } proc TestGlossaire {} { Glossaire Reset Glossaire exit } proc TestGraphe {{Fichier ""}} { set LaListeDesTags [list [list a] [list b] [list c] [list d] [list e] [list f] [list g] [list h]] set K [Graphe {1 3 4 5 6 3 4 2} {3 4 2 1 3 4 4 5} "" "blue" 800 600 {} "" "Beau titre" $LaListeDesTags] set G {1 3 2 5 2 3 2 2} # Graphe $G "Regulier" $K "red" "" "" {400 400 500 550} # Graphe [list 0 [llength $G]] [list [MiniDeLaListe $G] [MiniDeLaListe $G]] $K "red" "" "" {400 400 500 550} $K create text 400 400 -text Coucou MainLeveeSurUnCanva $K set K2 [Graphe {1 3 4 5 6 3 4 2} {3 4 2 1 3 4 4 5} "" "blue" 800 600 {} "" "K2" $LaListeDesTags] Espionne [GraphesEnStock] } proc TestGscopeCroises {} { EspionneL [QuestionDeScience Pabyssi "ret LesOrganismesOrthologues PABY2353 BlastP {} Court"] EspionneL [QuestionDeScience Pabyssi "ret LesOrganismesOrthologues PABY1969 BlastP {} Court"] EspionneL [QuestionDeScience Pabyssi "ret LesOrganismesOrthologues PABY2353333 BlastP {} Court"] EspionneL [QuestionDeScience Pabyssi "ret LesOrganismesOrthologues PABY2354 BlastP"] EspionneL [QuestionDeScience Pabyssi "ret LesOrganismesOrthologues PABY2353 BlastP"] EspionneL [QuestionDeScience Pabyssi "ret LesOrganismesOrthologues PABY2353 BlastP"] } proc TestHdac {} { set LesEnzymes [list BamHI BglII EcoRI NcoI NdeI NruI] foreach Fichier [lsort -dictionary [glob "[RepertoireDuGenome]/atelier/hdac/hdac*.tfa"]] { set ProtTfa [NucToProtTFA [ContenuDuFichier $Fichier]] set L [string length [QueLaSequenceDuTexteTFA $ProtTfa]] regsub ".tfa$" $Fichier .prottfa FichierProt Sauve $ProtTfa dans $FichierProt set Hits [CheckRestrictionEnzymes $Fichier $LesEnzymes "" "GetHits"] lappend LaSortie $Hits lappend LaSortie "[expr 3*$L] bases $L AA" lappend LaSortie " " } set Sortie [join $LaSortie "\n"] return [AfficheVariable $Sortie] } proc TestHttpCopy {} { HttpCopy "http://hgdownload.cse.ucsc.edu/goldenPath/currentGenomes" LesLignes EspionneL $LesLignes exit } proc TestInfoEmbl {} { set Access "P12345" Espionne [InfoEmbl $Access SQ] Espionne [InfoEmbl $Access Delete] exit } proc TestInterrogeAffy_UCSC {} { set Chr [InterrogeAffy_UCSC "" human 1552481_s_at Chromosome] set LesDebuts [InterrogeAffy_UCSC "" human 1552481_s_at $Chr Debut] Espionne "--------------------------------------------" Espionne "Chr $Chr -- LesDebuts $LesDebuts" } proc TestInterrogeSeq {} { Espionne "1 [InterrogeSeq REFSEQPREL:NP_001116571 Tfa]" Espionne "2 [InterrogeSeq REFSEQPREL:NP_001116571 Seq]" Espionne "3 [InterrogeSeq ENSECAP00000014430 Seq]" } proc TestIt {} { set Name [Iterator New "Init" {a b c} {1 2 3}] Espionne "name=$Name" Espionne [Iterator $Name Get Total Iter] while {[Iterator $Name "Next" A N]} { Espionne "$A $N" } Iterator $Name Reset while {[Iterator $Name "Next" A N]} { Espionne "$A $N" } set Name [Iterator New "Init" {A B C D} {1 2 3}] Espionne "Iterator New Init {A B C D} {1 2 3} = $Name" Espionne "while {\[Iterator $Name Next A N\]} { Espionne \$A \$N }" while {[Iterator $Name "Next" A N]} { Espionne "$A $N" } Espionne "Iterator $Name Reset" Iterator $Name Reset while {[Iterator $Name "Next" A N]} { Espionne "$A $N" if {$A=="C" && $N==2} { Espionne "break pour C et 2"; break } } Espionne "Iterator $Name Get Current All = [Iterator $Name Get Current All]" Espionne "Iterator $Name Get Current 2 = [Iterator $Name Get Current 2]" Espionne "Iterator $Name Get Current 0 = [Iterator $Name Get Current 0]" Espionne "Iterator Iterator Get ListOf Name = [Iterator Iterator Get ListOf Name]" exit } proc TestLKI {} { set Texte [ContenuDuFichier "[RepertoireDuGenome]/protemblRecupere/EVI03681"] LesKeywordsInteressantsDuGenbank $Texte T LOCUS DEFINITION SOURCE FEATURES Espionne $T(DEFINITION) Espionne $T(SOURCE) Espionne $T(FEATURES) } proc TestLODB {fileBlast} { set fileBlast "/genomics/link/CilioCarta/blastp/HSAP00001" set fileBlast "/home/kress/elephas.blastp" set blast [ContenuDuFichier $fileBlast] set B64 [Base64Encode $blast] # set orgas [QuestionDeScience EVImm "ret TaxonomyDuBlast $B64 - - GetText"] set orgas [TaxonomyDuBlast $B64 KeepAll - GetText] Espionne $orgas } proc TestLSDT {} { foreach Access [LaSequenceDuTFAs toto.tfa "LaListeDesAccess"] { set Seq [LaSequenceDuTFAs toto.tfa $Access] Espionne " .................$Access\n[SequenceFormatTFA $Seq]" } exit } proc TestLaProteineADesVariants {} { global MesAccessInterressants set Liste [ListeDesPABs] set MesAcc "" foreach PAB $Liste { set AccProt "" set Id "" set AccProt [AccessDeLaBoite $PAB protein] if {$AccProt == $PAB} {continue} lappend MesAcc $AccProt continue } set MesAcc [lsort -unique $MesAcc] #Espionne $MesAcc Espionne "Les PABs [llength $MesAcc]" MesAccessInterressants set LesAcc [array names MesAccessInterressants] foreach Acc $LesAcc {lappend MesAcc $Acc} #Espionne $MesAcc set NbProt [llength $MesAcc] Espionne "Les acc en + $NbProt" set NbProtAvecV 0 set NbVariantTot 0 set NbSWAvecV 0 set SW 0 set NbSW 0 set NbSWVariantTot 0 foreach Acc $MesAcc { if {[EstUnAccessDeQuelleBanque $Acc swissprot]} { incr NbSW set SW 1 Espionne "SW $Acc" } set AdesV [LaProteineADesVariants $Acc Etat] if {$AdesV=="1"} { set NbVariant [LaProteineADesVariants $Acc NbVariant] if {$SW} {incr NbSWAvecV;incr NbSWVariantTot} incr NbProtAvecV incr NbVariantTot $NbVariant } else {set NbVariant 0} Espionne "$Acc\t$AdesV\t$NbVariant" #Espionne "[LesVariantsDeLaProteine $Acc Sequence]" set SW 0 } Espionne "NbProt $NbProt Avec Variant $NbProtAvecV" Espionne "Nb Variant total $NbVariantTot" Espionne "NbSw $NbSW avec variant $NbSWAvecV pour $NbSWVariantTot variants au total" } proc TestLaSequenceDesBanques {BanqueId {Access ""} {aAccessOK ""} {OnVeutEMBL ""} {NouveauPABCourant ""}} { set LaSeq [LaSequenceDesBanques $BanqueId $Access AccessOK $OnVeutEMBL $NouveauPABCourant] set R [concat $LaSeq [list "\n" $AccessOK]] return $R } proc TestLambdaIntegrase {} { set SeqPPCR [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/ppcr_virtuels/N1733"] set SeqSiteP [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/vecteurs/pDONR/pDONR207.tfa"] set LesBornes [LesBornesParLambdaIntegrase $SeqPPCR $SeqSiteP [SEQAttB1] [SEQAttB2]] Espionne $LesBornes exit } proc TestLambdaIntegrase2 {} { set SeqRec1 [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/rec1/N1733_pDONR207"] set SeqPDest [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/vecteurs/pDEST/pDEST17.tfa"] set LesBornes [LesBornesParLambdaIntegrase $SeqRec1 $SeqPDest [SEQAttL1] [SEQAttL2]] Espionne $LesBornes exit } proc TestLeDesignREFSEQ {} { Wup "Tester les design qui sont pourris" set Dir "[RepertoireDuGenome]/Probes/RefSeq_TFA" set LesQuerys [glob -nocomplain -directory $Dir "NM*"] set WDir "[RepertoireDuGenome]/Probes/RefSeq_Design" #set LesQuerys "[RepertoireDuGenome]/Probes/RefSeq_TFA/NM002026" set LesRepPourris "" foreach Q $LesQuerys { set L "" set Q [file tail $Q] set LeRep [LeRepertoireDeRefSeq $Q] #set File "$WDir/$LeRep/$Q.oligo" set File "$WDir/$LeRep/$Q.log" #Espionne "$Q $File" if {! [file exists $File]} {continue} #set L [EnteteDuFichierTFA $File] set L [LesLignesDuFichier $File] set toto "No Hit found during DataBase searches" if {[regexp "NoHitFound" $L]} { set Nb [regexp -all "NoHitFound" $L] if {$Nb > 10} { lappend LesRepPourris $LeRep lappend LesFilePourris $Q #file delete -force "$WDir/$LeRep/$Q.log" #file delete -force "$WDir/$LeRep/$Q.oligo" #file delete -force "$WDir/$LeRep/$Q.selection" } else { continue } } } set LesRepPourris [lsort -unique $LesRepPourris] set LesFilePourris [lsort -unique $LesFilePourris] Espionne "[llength $LesRepPourris] $LesRepPourris" Espionne "[llength $LesFilePourris] $LesFilePourris" } proc TestLego {} { ScanLaListe [Seq3dAndA5From 1oxa_20.mod] Seq3d LesA5 Espionne "$Seq3d \n$LesA5" set GappedSeq3d [Entre $Seq3d] set GappedSeqAA [GappedSeqAAFromGappedSeq3d $GappedSeq3d $LesA5 $Seq3d] Espionne $GappedSeq3d Espionne $GappedSeqAA exit } proc TestLesAbsentsBestProtAndmRNA {} { set Liste [lrange [ListeDesPABs] 1164 end] set Nbfrag 0 set Nbfragetnomrna 0 set Nomrna 0 foreach PAB $Liste { set AccProt [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" Protein Access] #set TailleProt [InterrogeBestProteinAndmRNAForeachOrga Access $AccProt Taille] set DefProt [InterrogeBestProteinAndmRNAForeachOrga Access $AccProt Definition] set AccmRNA [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" mRNA Access] #set TaillemRNA [InterrogeBestProteinAndmRNAForeachOrga Access $AccmRNA Taille] set DefmRNA [InterrogeBestProteinAndmRNAForeachOrga Access $AccmRNA Definition] if {[regexp -nocase "fragment" $DefProt]} { incr Nbfrag if {$AccmRNA!=""} { Espionne "$PAB AccProt $AccProt $DefProt AccmRNA $AccmRNA $DefmRNA" } } if {$AccmRNA==""} { incr Nomrna if {[regexp -nocase "fragment" $DefProt]} { incr Nbfragetnomrna #Espionne "$PAB AccProt $AccProt $DefProt AccmRNA $AccmRNA $DefmRNA" } #Espionne "$PAB no mrna" } } Espionne "Norna $Nomrna -- NoRNAAndFrag $Nbfragetnomrna -- Nbfrag $Nbfrag" } proc TestLesBestProtAndmRNA {} { set Liste [ListeDesPABs] foreach PAB $Liste { set AccmRNA [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" mRNA Access] set TaillemRNA [InterrogeBestProteinAndmRNAForeachOrga Access $AccmRNA Taille] set AccProt [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" Protein Access] set TailleProt [InterrogeBestProteinAndmRNAForeachOrga Access $AccProt Taille] if {$TaillemRNA=="" || $TailleProt==""} {continue} if {$TaillemRNA>$TailleProt} {continue} else { Espionne "$PAB AccmRNA $AccmRNA $TaillemRNA AccProt $AccProt $TailleProt" } } } proc TestLesDescriptifs {} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/lesdescriptifs"] { ScanLaListe [split $Ligne "="] AC Reste # Espionne "[ChampDuDescriptif [LeDescriptif $AC] OS] # [ChampDuDescriptif [LeDescriptif $AC] OX]" # continue ScanLaListe [split $Ligne " "] Bidon OSGenre Espece regsub "OS\:" $OSGenre "" Genre set Organisme "$Genre $Espece" Espionne [time {Getz $AC}] Espionne [time {set OS [QuestionDeScience QuidSeq "QuidOSOfAC $AC"]}] regsub {^[ \n]|[ \n]$} $OS "" OS if {$OS==$Organisme} { Espionne "$Organisme $AC" } else { Espionne "$Organisme $AC >$OS< +++++++++++++++++" } } } proc TestLesJumeauxProts {} { set LesPABs [lrange [ListeDesPABs] 0 1165] set LesPABs "" set Fichier "[RepertoireDuGenome]/ListeDesPABsDesOligosCommandes.txt" set F [open "$Fichier"] while {[gets $F Ligne]>=0} { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} set PAB "" scan $Ligne "%s" PAB if {$PAB==""} {continue} lappend LesPABs $PAB } close $F foreach PAB $LesPABs { set Acc [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" Protein Access] if {$Acc==""} {continue} #Espionne "$PAB $Acc" lappend LesAccessProt $Acc } set LesPAB2s [lrange [ListeDesPABs] 0 1165] foreach PAB $LesPAB2s { set Acc [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" Protein Access] if {$Acc==""} {continue} if {[regexp -nocase $Acc $LesAccessProt]} {continue} set JR [JumeauRepresentatif $PAB] if {$JR != $PAB} { if {[regexp -nocase $JR $LesPABs]} {continue} if {[regexp -nocase $JR $LesPAB2s]} {continue} } Espionne "$PAB $Acc" lappend LesAccessProt2 $Acc } Espionne "[llength $LesAccessProt]" Espionne "[llength [lsort -unique $LesAccessProt]]" Espionne "[llength $LesAccessProt2]" Espionne "[llength [lsort -unique $LesAccessProt2]]" return "" } proc TestLesNotes {} { Wup "Test les notes" global RepertoireDuGenome global CheckResultat if {[file exists "$RepertoireDuGenome/notes"] &&[file isdirectory "$RepertoireDuGenome/notes"]} { set Reponse " $RepertoireDuGenome/notes exists" if {[glob -nocomplain "$RepertoireDuGenome/notes/*"]=={}} { append Reponse " but you should run CreeToutesLesNotes" lappend CheckResultat $Reponse } else { append Reponse " and CreeToutesLesNotes done" lappend CheckResultat $Reponse } } else { set Reponse "Create $RepertoireDuGenome/notes, run CreeToutesLesNotes" lappend CheckResultat $Reponse } } proc TestLesOligoExcel {} { #set Liste [lrange [ListeDesPABs] 0 1164] #set Liste [lrange [ListeDesPABs] 1164 end] #set Liste [list ACT0022 ACT0004] #set Liste [list ACT0073 ACT0200 ACT0213 ACT0235 ACT0274 ACT0309 ACT0377 ACT0390 ACT0408 ACT0445 ACT0453 ACT0456 ACT0467 ACT0537 ACT0618 ACT0662 ACT0669 ACT0670 ACT0698 ACT0744 ACT0746 ACT0746 ACT0780 ACT0783 ACT0830 ACT0846 ACT0849 ACT0850 ACT0852 ACT0855 ACT0985 ACT1059 ACT1086] set Liste [ListeDesRhos] LesOligosPourExcel "$Liste" "[RepertoireDuGenome]/Probes/RefSeq_Rho" "[RepertoireDuGenome]/Probes/Unigene_Rho" "" "[RepertoireDuGenome]/Essai_OligoPourExcel_Rho" #LesOligosPourExcel "$Liste" "[RepertoireDuGenome]/Probes/RefSeqBLAST3" "[RepertoireDuGenome]/Probes/UnigeneBLAST3" "" "" #LesOligosPourExcel "$Liste" "[RepertoireDuGenome]/Probes/RefSeqBLAST3" "[RepertoireDuGenome]/Probes/UnigeneBLAST3" "" "[RepertoireDuGenome]/Essai_AvecNewListeACT1164" #LesOligosPourExcel "ACT0001 ACT2291 ACT1618 ACT1247 ACT1524 ACT1323" "[RepertoireDuGenome]/Probes/TEST_RefSeq" "[RepertoireDuGenome]/Probes/TEST_Unigene" "" "" #LesOligosPourExcel "LaVraieTotale" "[RepertoireDuGenome]/Probes/RefSeqBLAST3" "[RepertoireDuGenome]/Probes/UnigeneBLAST3" "" "" #set Liste [lrange [ListeDesPABs] 0 1164] #set Liste [lrange [ListeDesPABs] 1164 end] #LesOligosPourExcel "$Liste" "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" "[RepertoireDuGenome]/Probes/NewUnigeneBLAST3" "" "" #LesOligosPourExcel "$Liste" "[RepertoireDuGenome]/Probes/NewRefSeqBLAST3" "[RepertoireDuGenome]/Probes/NewUnigeneBLAST3" "" "[RepertoireDuGenome]/Essai_AvecNewListeACT2436" return "" } proc TestLesTrous {} { Wup "Test les trous" global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test Trous et Notes------" if {[file exists "$RepertoireDuGenome/fiches/bornesdestrous"]} { lappend CheckResultat " TrousLaTotale done" } else { lappend CheckResultat "Create les trous, run TrousLaTotale" } } proc TestLienDbclustalw {} { Wup "Test LiensdeDbclustalW" global RepertoireDuGenome global CheckResultat if {[file exists "$RepertoireDuGenome/dbclustalw"]} { set Reponse " $RepertoireDuGenome/dbclustalw exists" if {[file type "$RepertoireDuGenome/dbclustalw" ]=="link" && [file readlink "$RepertoireDuGenome/dbclustalw"]=="msf"} { append Reponse " and linked to msf" lappend CheckResultat $Reponse } else { append Reponse " but not linked to msf" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/dbclustalw create dbclustalw linked to $RepertoireDuGenome/msf" lappend CheckResultat $Reponse } } proc TestLiens {} { Wup "Test les liens pouvant exister" global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test des Important Links------" if {[file exists "$RepertoireDuGenome/banques"]} { set Reponse " $RepertoireDuGenome/banques exists" if {[file type "$RepertoireDuGenome/banques" ]=="link"} { set Link [file readlink "$RepertoireDuGenome/banques"] append Reponse " and linked to $Link" lappend CheckResultat $Reponse } else { append Reponse " and is not a Link" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/banques create it if necessary" lappend CheckResultat $Reponse } if {[file exists "$RepertoireDuGenome/fiches/familiar_organism"]} { set Reponse " $RepertoireDuGenome/fiches/familiar_organism exists" if {[file type "$RepertoireDuGenome/fiches/familiar_organism" ]=="link"} { set Link [file readlink "$RepertoireDuGenome/fiches/familiar_organism"] append Reponse " and linked to $Link" lappend CheckResultat $Reponse } else { append Reponse " and is not a Link" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/fiches/familiar_organism create it if necessary" lappend CheckResultat $Reponse } if {[file exists "$RepertoireDuGenome/fiches/lesgenomescomplets"]} { set Reponse " $RepertoireDuGenome/fiches/lesgenomescomplets exists" if {[file type "$RepertoireDuGenome/fiches/lesgenomescomplets" ]=="link"} { set Link [file readlink "$RepertoireDuGenome/fiches/lesgenomescomplets"] append Reponse " and linked to $Link" lappend CheckResultat $Reponse } else { append Reponse " and is not a Link" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/fiches/lesgenomescomplets create it if necessary" lappend CheckResultat $Reponse } if {[file exists "$RepertoireDuGenome/stockgenscan"]} { set Reponse " $RepertoireDuGenome/stockgenscan exists" if {[file type "$RepertoireDuGenome/stockgenscan" ]=="link"} { set Link [file readlink "$RepertoireDuGenome/stockgenscan"] append Reponse " and linked to $Link" lappend CheckResultat $Reponse } else { append Reponse " and is not a Link" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/stockgenscan create link to /genomics/common/stockgenscan (for ex.)" lappend CheckResultat $Reponse } if {[file exists "$RepertoireDuGenome/stockcontigs"]} { set Reponse " $RepertoireDuGenome/stockcontigs exists" if {[file type "$RepertoireDuGenome/stockcontigs" ]=="link"} { set Link [file readlink "$RepertoireDuGenome/stockcontigs"] append Reponse " and linked to $Link" lappend CheckResultat $Reponse } else { append Reponse " and is not a Link" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/stockcontigs create link to /genomics/common/stockcontigs (for ex.)" lappend CheckResultat $Reponse } if {[file exists "$RepertoireDuGenome/blastn"]} { set Reponse " $RepertoireDuGenome/blastn exists" if {[file type "$RepertoireDuGenome/blastn" ]=="link"} { set Link [file readlink "$RepertoireDuGenome/blastn"] append Reponse " and linked to $Link" lappend CheckResultat $Reponse } else { append Reponse " and is not a Link" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/blastn create link to $RepertoireDuGenome/blastnhuman (for ex.)" lappend CheckResultat $Reponse } } proc TestLiensDiabac {} { Wup "Test les Liens specifiques a Diabac" global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test des Important Links in DiaBac------" if {[file exists "$RepertoireDuGenome/banques"]} { set Reponse " $RepertoireDuGenome/banques exists" if {[file type "$RepertoireDuGenome/banques" ]=="link" && [file readlink "$RepertoireDuGenome/banques"]=="../DiaBac/banques"} { append Reponse " and linked to /genomics/DiaBac/banques" lappend CheckResultat $Reponse } else { append Reponse " and not linked to /genomics/DiaBac/banques" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/banques create link to ../../DiaBac/banques" lappend CheckResultat $Reponse } if {[file exists "$RepertoireDuGenome/fiches/familiar_organism"]} { set Reponse " $RepertoireDuGenome/fiches/familiar_organism exists" if {[file type "$RepertoireDuGenome/fiches/familiar_organism" ]=="link" && [file readlink "$RepertoireDuGenome/fiches/familiar_organism"]=="../../DiaBac/fiches/familiar_organism"} { append Reponse " and linked to familiar_organism" lappend CheckResultat $Reponse } else { append Reponse " and not linked to familiar_organism" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/fiches/familiar_organism create link to ../../DiaBac/fiches/familiar_organism" lappend CheckResultat $Reponse } if {[file exists "$RepertoireDuGenome/fiches/lesgenomescomplets"]} { set Reponse " $RepertoireDuGenome/fiches/lesgenomescomplets exists" if {[file type "$RepertoireDuGenome/fiches/lesgenomescomplets" ]=="link" && [file readlink "$RepertoireDuGenome/fiches/lesgenomescomplets"]=="../../DiaBac/fiches/lesgenomescomplets"} { append Reponse " and linked to lesgenomescomplets " lappend CheckResultat $Reponse } else { append Reponse " and not linked to lesgenomescomplets" lappend CheckResultat $Reponse } } else { set Reponse "No $RepertoireDuGenome/fiches/lesgenomescomplets create link to ../../DiaBac/fiches/lesgenomescomplets" lappend CheckResultat $Reponse } } proc TestLiensGenomesOuCollection {} { if {[OnTraiteUnGenome]} { TestLiensDiabac } else { TestLiens } } proc TestListMix {} { set A [list 1 2 3 4 5 6 7 8 9] set B [list 2 4 6 8] set C [list 3 6] Espionne [MixLists $A No $C In $B] } proc TestListTranspose {} { set LL {{a b c} {d e} {g h i k}} EspionneL $LL EspionneL [ListTranspose $LL] return [ListTranspose $LL] } proc TestLocAfter {} { set Var [LocAfter 77696429 Mouse chr11 +] Espionne $Var } proc TestLocalisationDesVirtualPPCRs {} { set Loc [LocalisationDesVirtualPPCRs GetLocOf N1733] scan $Loc "%s %s %d %s %d %d %s %d %s" NLu PGSLu DPLu Tiret1 FPLu DNLu Tiret2 FNLu FullNameMemo Espionne "$NLu $DPLu $FPLu $DNLu $FNLu" set Loc [LocalisationDesVirtualPPCRs GetLocOf N1732] scan $Loc "%s %s %d %s %d %d %s %d %s" NLu PGSLu DPLu Tiret1 FPLu DNLu Tiret2 FNLu FullNameMemo Espionne "$NLu $DPLu $FPLu $DNLu $FNLu" exit } proc TestLong {} { set A "abcefdyeyf" set B "abcdxcef" puts [expr [Long $A $B [expr [string length $A]-1] [expr [string length $B]-1]]+1] exit } proc TestLsortMultipleIndex {} { set lt [list "9003 90041 John_Doe HSeL" "9003 90040 Vernor_Vinge DJu" "0009 98000 Gerard_Majax HSeE" "9999 00001 Man_SuperMan HseE"] foreach elmt $lt { Espionne $elmt } set lt [lsort -index 1 $lt] Espionne "1ere" Espionne $lt set lt [lsort -index 0 $lt] Espionne "2eme" EspionneL $lt } proc TestMDScore {} { foreach Nom [ListeDesPABs] { set MD [MDScore $Nom] set Couleur [QuelInterval $MD [LesSeuilsMDScore] [LesSeuilsMDScore "CouleurMerci"]] set Signif [QuelInterval $MD [LesSeuilsMDScore] [LesSeuilsMDScore "SignificationMerci"]] Espionne "$Nom $MD $Couleur $Signif" } } proc TestMSFDeDomaine {CodeGscope} { set RepertoireDeDomaines "[RepertoireDuGenome]/PDBParDomaine/$CodeGscope" Espionne $RepertoireDeDomaines set r [glob -directory $RepertoireDeDomaines *] foreach fichier $r { set fichierTmpMsf [RunDbClustal $r "" "GetMsfFilename"] Espionne "file rename -force $fichierTmpMsf $r.msf" file rename -force $fichierTmpMsf $r.msf } } proc TestMSP {} { set YaCons 0 set LesStart {} foreach Ligne [LesLignesDuFichier "[HomeRipp]/msp/data/alignments/dcethal1.txt"] { if {$YaCons && [regexp {([0-9]+)} $Ligne Match Start]} { lappend LesStart $Start set YaCons 0 continue } if {[regexp {Cons\-T80} $Ligne]} { set YaCons 1 ; continue } } set LesStart [lsort -integer $LesStart] Espionne $LesStart exit } proc TestM_lMM {} { set A [M_unit] set B [M_unit] puts [Nice_M $A] set C [M_lMM 2 $A * 3 $B] return [Nice_M $C] } proc TestMacsimsAcOrga {} { # test si tous les .org ont bien ete cres foreach FichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsimXml/*"] { if {[regexp ".org" $FichierMacsim]} { continue } if {[file exists $FichierMacsim.org]} { continue } Espionne "doitcreer le .org de $FichierMacsim" } } proc TestMacsimsInfo {} { global MacsimsInfo MacsimsInfo LoadXml "/genomics/link/SpliRet/macsimXml/SP0001" parray MacsimsInfo exit EspionneL [MacsimsInfo ListOf Key1] Espionne "=================================" EspionneL [MacsimsInfo ListOf FeaturesKeys] foreach Access [MacsimsInfo Noms] { Espionne "$Access [MacsimsInfo $Access Features]" } } proc TestMacsimsOnWeb {} { set Msf [ContenuDuFichier [GscopeFile PGS779 "msf"]] set Xml [MacsimsOnWeb $Msf] return $Xml } proc TestMafft {{file ""}} { global OrdTmpDir NousAllonsAuBoulot puts "[OuSuisJe]" set repmsf [file join [RepertoireDuGenome] "msf_mounir"] set reptfa [file join [RepertoireDuGenome] "tfasdescopains_mounir"] set LesFiles $file if {$file == ""} {set LesFiles [ListeDesPABs]} foreach f $LesFiles { if {! [file exists [file join $reptfa $f]]} {continue} if {! [file exists [file join $repmsf $f]]} {continue} file copy -force [file join $reptfa $f] $f set nseq [LitLeTFA $f nom seq] catch {exec mafft --quiet $f > maout.tfa} {Message} exec clustalw -infile=maout.tfa -outfile=maout.msf -convert -output=gscope set normMafft [exec normd maout.msf pam250.bla 0.0 0.1] exec rascal maout.msf maras.msf set normRas 0.0001 if {[file exists maras.msf]} { set normRas [exec normd maras.msf pam250.bla 0.0 0.1] } file copy -force [file join $repmsf $f] $f set normClustal [exec normd $f pam250.bla 0.0 0.1] puts "$f\t$nseq\t$normMafft\t$normRas\t$normClustal" file delete -force $f maout.msf maout.tfa maras.msf unset nom seq } exit return } proc TestMath3D {} { set V [V_unit 1 3 4.8] set Angle [AngleRad 30 degres] set R [R_create $Angle $V] puts R puts [Nice_R $R] set M [M_R $R] puts [Nice_M $M "m"] set R [R_M $M] puts [Nice_R $R] set M [M_R $R] puts [Nice_M $M "mr de R"] set IM [M_invM $M] puts [Nice_M $IM "inv de mr"] set I [M_MM $M * $IM] puts [Nice_M $I "mr*inv"] set R [R_M $IM] puts [Nice_R $R] set A [list [list 2 3 4] [list 5 6 7]] set B [list [list 2 3 4 5] [list 5 6 7 8] [list 2 2 2 2]] set C [M_MM $A * $B] puts [Nice_M $A A] puts [Nice_M $B B] puts [Nice_M $C AB] exit } proc TestMeilleuresDefinitions2_0 {{LesPABs ""} {MotsOuExprCreux ""} {MotsOuExprInterdits ""} {ratioScores 0.80}} { set fichierOut "[RepertoireDuGenome]/fiches/TestMeilleuresDefs2" #if {$LesPABs eq ""} {set LesPABs [ListeDesPABs]} if {$LesPABs eq ""} {set LesPABs [MorceauxChoisis [ListeDesPABs]]} foreach pab $LesPABs { set fichierMacsims "[RepertoireDuGenome]/macsims/$pab.xml" if {[file isfile $fichierMacsims]} { Espionne $pab ParseMACSIMS $fichierMacsims macsims set groupe $macsims(Groupe,$macsims($pab,Groupe)) set posQuery [lsearch -exact $groupe $pab] set groupeSansQuery [lreplace $groupe $posQuery $posQuery] AppendAuFichier $fichierOut "$pab [MeilleuresDefinitions2_0 $groupeSansQuery $MotsOuExprCreux $MotsOuExprInterdits $ratioScores]" } } } proc TestMemoDelta {} { MemoDelta a b x MemoDelta a b y MemoDelta a b z Espionne [MemoDelta a b] Espionne [MemoDelta a r] MemoDelta Reset MemoDelta a b y MemoDelta a b z Espionne [MemoDelta a b] Espionne [MemoDelta a r] } proc TestMonCopain {} { foreach IndexA [RetChip2 ListOf Index] { if {[set IndexB [MonCopain Nouveau $IndexA]]==""} { Espionne "$IndexA [RetChip2 $IndexA description_customer]" continue } set VA [RetChip2 $IndexA WholeLine] set VB [RetChip3 $IndexB WholeLine] set LesMots [split $VB ";"] set LesMots [concat [lrange $LesMots 0 6] [list ""] [lrange $LesMots 8 end]] set VB [join $LesMots ";"] if {[string first $VA $VB]==0} { continue } Espionne "$IndexA $IndexB\n$VA\n$VB\n" } exit } proc TestMoyenneRank {} { set LesClades [OlymStock ListOf Clade] # set LesClades [list Deuterostomia Fungi] foreach Nom [ListeDesPABs] { foreach Clade $LesClades { set M [OlymStock $Nom $Clade-MoyenneRank] Espionne "$Nom $M $Clade" } } } proc TestMsf {} { Wup "Test du repertoire msf et TestAnalyseDbClustal TestLienDbclustalw" global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test Msf------" if {[file exists "$RepertoireDuGenome/msf"] &&[file isdirectory "$RepertoireDuGenome/msf"]} { set Reponse " $RepertoireDuGenome/msf exists" if {[glob -nocomplain "$RepertoireDuGenome/msf/*"]=={}} { append Reponse ", you should run DbClustalPourTous" lappend CheckResultat $Reponse } else { append Reponse " and DbClustalPourTous done" lappend CheckResultat $Reponse TestAnalyseDbClustal } TestLienDbclustalw } else { set Reponse "Create $RepertoireDuGenome/msf \(mkdir msf\)" lappend CheckResultat $Reponse } } 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 TestNCBINames {} { set Fichier "./names.dmp" set f [open $Fichier "r"] set nTaxId 0 # set iMaxPourTest 999 set iMaxPourTest -1 while {[gets $f Ligne]>=0} { if {[incr iMaxPourTest -1]%1000==0} { Espionne $Ligne } if {[incr iMaxPourTest -1] == 0} { break } regsub -all "\t" $Ligne "" Ligne set LesChamps [split $Ligne "|"] ScanLaListe $LesChamps TaxId Name UniqueName NameClass if {$TaxId=="1890940"} { Espionne $Ligne } if {[info exists DejaVu($Name)]} { lappend LesDoublons $Name } set DejaVu($Name) 1 TaxNCBI $TaxId TaxId "=$TaxId" TaxNCBI $TaxId ItsNames "=$Name" if {$UniqueName!=""} { TaxNCBI $TaxId UniqueName "=$UniqueName" TaxNCBI $Name ItsTaxIds "=$TaxId" } TaxNCBI $Name TaxId "=$TaxId" TaxNCBI $Name NameClass "=$NameClass" if {[string equal -nocase $NameClass "scientific name"]} { incr nTaxId TaxNCBI $TaxId Name "=$Name" } TaxNCBI "ListOf" "Names" "=$Name" } } proc TestNW {sr su} { lassign [NW $sr $su] sra sua ShowProtDiff sra sua exit } proc TestNewAndOldUnigene {} { set LesPABs [ListeDesPABs] set FichierOut "[RepertoireDuGenome]/Essai_Compare_NewAndOld_Unigene" set Result "Gscope_Access\tOLD_Uniseq\tOLD_Unigene\tNEW_Uniseq\tNEW_Unigene\tOLD_Definition\tNEW_Definition" AppendAuFichier $FichierOut "$Result" foreach PAB $LesPABs { if {$PAB==""} {continue} set Result "" set DirOligo2 "[RepertoireDuGenome]/Probes/UnigeneBLAST3" set OtherDirOligo2 "[RepertoireDuGenome]/Probes/NewUnigeneBLAST3" if {![file exists "$DirOligo2/${PAB}.masked"]} { set DirOligo2 $OtherDirOligo2 } #Access Unigene ############### set BestBanque [ReturnBestHitFromLogFile $PAB $DirOligo2] set Definition [ReturnDefinitionFromBestHitFromLogFile $BestBanque] set BestBanqueUg [LeUnigeneDeUniseq $BestBanque] set Definition1 [ReturnDefinitionFromBestHitFromLogFile $BestBanque] set NewBestBanque [InterrogeLesAccessUnigeneDesPABs $PAB UniseqId] set NewBestBanqueUg [InterrogeLesAccessUnigeneDesPABs $PAB UnigeneId] set Definition2 [ReturnDefinitionFromBestHitFromLogFile $NewBestBanque] #On essaie avec les nouveaux blastn Unigene if {$BestBanqueUg==""} { set BestBanqueUg "No Unigene Id associated" } if {$NewBestBanqueUg==""} { set NewBestBanqueUg "No Unigene Id associated" } set Result "$PAB\t$BestBanque\t$BestBanqueUg\t$NewBestBanque\t$NewBestBanqueUg\t$Definition1\t$Definition2" AppendAuFichier $FichierOut "$Result" } } proc TestNewVirtualPPCR {} { set PPCR "GFP-1-239 +++ AttB1 XhoI +++ XhoI AttB2" AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaire Espionne [NewVirtualPPCR $PPCR "PGS311" "GFP-1-239"] Espionne [NewVirtualPPCR $PPCR "PGS311" "GFP-1-239"] exit } proc TestNucExtension5PrimeDeRec2 {FiRec2} { set TFA [SequenceFormatTFA [NucExtension5PrimeDeRec2 $FiRec2] "fusion" "nucbrut"] Espionne [Sauve $TFA dans "testfusion.tfa"] } proc TestNucProtTFAEMBL {} { Wup "Test le presence de NucTFA NucEMBL ProtTFA ProtEMBL" global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test TFA et EMBL------" if { ![file exists "$RepertoireDuGenome/nuctfa"] || [glob -nocomplain "$RepertoireDuGenome/nuctfa/*"]=={}} { lappend CheckResultat "No $RepertoireDuGenome/nuctfa, run CompleteLaDataBase" } else { lappend CheckResultat " $RepertoireDuGenome/nuctfa exists" } if { ![file exists "$RepertoireDuGenome/prottfa"] || [glob -nocomplain "$RepertoireDuGenome/prottfa/*"]=={}} { lappend CheckResultat "No $RepertoireDuGenome/prottfa, run CompleteLaDataBase" } else { lappend CheckResultat " $RepertoireDuGenome/prottfa exists" } if { ![file exists "$RepertoireDuGenome/nucembl"] || [glob -nocomplain "$RepertoireDuGenome/nucembl/*"]=={}} { lappend CheckResultat "No $RepertoireDuGenome/nucembl, run CompleteLaDataBase" } else { lappend CheckResultat " $RepertoireDuGenome/nucembl exists" } if { ![file exists "$RepertoireDuGenome/protembl"] || [glob -nocomplain "$RepertoireDuGenome/protembl/*"]=={}} { lappend CheckResultat "No $RepertoireDuGenome/protembl, run CompleteLaDataBase" } else { lappend CheckResultat " $RepertoireDuGenome/protembl exists" } } proc TestOO {args} { source "[GscopeDir]/gscope_oo.tcl" return [eval $args] } proc TestOXOC {} { foreach Nom [ListeDesPABs] { set X [ExtraitInfo $Nom "Organism"] set C [ExtraitInfo $Nom "Taxonomy"] Espionne "$Nom $X $C" if {[regexp "sapiens" $X] && ! [regexp "sapiens" $C]} { FaireLire $Nom } if {! [regexp "sapiens" $X] && [regexp "sapiens" $C]} { FaireLire $Nom } } exit } proc TestOnto {} { Espionne [QuestionDeScience Ontology "ret Onto GO:0003674 Type"] Espionne [QuestionDeScience Ontology "ret Onto GO:0003674 Type"] exit Espionne [QuestionDeScience Ontology "ret ListeDesPABs"] Espionne [QuestionDeScience Ontology "ret ListeDesPABs"] exit } proc TestOr {} { LesDefauts Espionne $::Defauts(PrefixesBank) exit } proc TestOrgaDuDescriptif {Nom1 Nom2} { global RepertoireDuGenome foreach Nom [list $Nom1 $Nom2 $Nom1 $Nom2 $Nom1 $Nom2 $Nom1 $Nom2 $Nom1 $Nom2 $Nom1 $Nom2 $Nom1 $Nom2] { Espionne $Nom set FichierDescriptif "$RepertoireDuGenome/descriptifs/$Nom" set LesAccess {} foreach Ligne [LesLignesDuFichier $FichierDescriptif] { ScanLaListe [split $Ligne "="] Access lappend LesAccess $Access Espionne $Access } set O [LesOrgasDesAccess $LesAccess Court $Nom] } exit } proc TestPCRAlvi {} { foreach Ligne [LesLignesDuFichier "[Fiches]/OligosF.csv"] LigneR [LesLignesDuFichier "[Fiches]/OligosR.csv"] { ScanLaListe [split $Ligne ";"] OligoNameF OligoF Bidon1 Bidon2 Bidon3 NotesF regexp {BOX[0-9]+} $NotesF Nom ScanLaListe [split $LigneR ";"] OligoNameR OligoR Bidon1 Bidon2 Bidon3 NotesR set OligoRSens [NucToReverseAndComplementNuc $OligoR] Espionne $Ligne Espionne $LigneR if {[regexp "RunOff" $OligoNameR]} { set OligoR "" } set MF [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nuctfa"]] PCR $MF $OligoF $OligoR $Nom } exit } proc TestPDB {} { set Lpdbid [list 1c0a 1il2 1asy] source [HomeRipp]/oso.tcl SetupPDBObject foreach pdbid $Lpdbid { set file "/db/catalog/pdb/compressed_files/[string range $pdbid 1 2]/pdb${pdbid}.ent.gz" Structure create $pdbid set cok [$pdbid new $file "" 0 0] foreach c [$pdbid _chains] { puts "$pdbid" puts "$c [$pdbid _chainIs $c]" # set s [join [$pdbid _resname -chain A] ""] } } exit foreach pdbid $Lpdbid { Structure create $pdbid set Rep [string range $pdbid 1 2] set file "/db/catalog/pdb/compressed_files/[string range $pdbid 1 2]/pdb${pdbid}.ent.gz" set cok [$pdbid new $file "" 0 0] foreach c [$pdbid _chains] { Espionne "$pdbid chain $c is [$pdbid _chainIs $c]" Espionne "$pdbid chain $c is [$pdbid _chainIs $c]" # Espionne [$pdbid _resname -chain $c] } $pdbid destroy } exit } proc TestParseGOAnno {nomFichier} { ParseGOAnno $nomFichier goanno parray goanno } proc TestParseMACSIMS {nomFichier} { ParseMACSIMS $nomFichier macsims parray macsims } proc TestPasTouche {} { return [PasTouche Bidon12345] } proc TestPckFastme {aT} { upvar $aT T global auto_path lappend auto_path [file join home moumou fastme1.1] package require fastme set Ln [array names T] foreach e $Ln { set Le [join [split $e ,]] lappend Lnom {*}$Le } set Lnom [lsort -unique $Lnom] foreach n1 $Lnom { foreach n2 $Lnom { lassign [set T($n1,$n2)] pc l1 l2 lsl lappend Ldst [expr {1.-$pc}] } } set rep [fastme $Lnom $Ldst] puts $rep return } proc TestPcrProduct {} { set Oli5 [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/oligos/P2081.tfa"] set Oli3 [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/oligos/P2193.tfa"] set Seq [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/nuctfa/PGS990"] set R [QuestionDeScience "EVImm" "ret PcrProduct $Oli5 $Seq $Oli3 getfasta"] return $R return [PcrProduct $Oli5 $Seq $Oli3 "getfasta"] } proc TestPosPfam {{file ""}} { global LNOrdali LSOrdali Sequences PABCourant OrdTmpDir FichierTFA Defauts SDG NomSeqSel global NId NCo NTt NConsDansId NConsDansCo NConsDansTt TableScore LNorMD ConsRef Sequences global VariablesAuDepart TNResConsNSA TNResConsSA LongueurTotale LongTot set FichierTFA "" # LoadReferencePDB global ConsRef TNResConsSA TNResConsNSA source ConsPfam.txt LesDefauts set rep [file join /home moumou work moumou BenchPfam] if {$file ne ""} { set LesFiles [split $file ,] } else { set LesFiles [glob [file join $rep *]] } set NomSeqSel {} # Types de conservations a tester # Originaux : # set Ntypes [list Norm Surf Angle Thompson Delta Norm+Thompson Norm+Delta Thompson+Delta Norm+Thompson+Delta VolPol Al2Co Liu RPCA] # # to work #set iNtypes [list Norm Surf] #set iNtypes [list Norm Thompson VolPol Liu Liu2 RPCA Entrop1 Entrop2] set iNtypes [list Norm Thompson Ranganatan VolPol Liu Liu2 RPCA Entrop1 Entrop2] #set Ntypes [list Norm Surf Angle Surf2 Thompson Delta VolPol Liu RPCA Liu2 Liu+RPCA Norm+Liu Norm+Thompson+Liu] set iNtypes [list Entrop1 Entrop2 Entrop3 Entrop4 Entrop5 Entrop6] # # brute force: # Cree tous les couples set Ntypes $iNtypes if {0} { set i 1 foreach n1 [lrange $iNtypes 0 end-1] { foreach n2 [lrange $iNtypes $i end] { lappend Ntypes [list ${n1} $n2] } incr i } } set LongTot 0 foreach type $Ntypes { set TResSeeAsId($type) 0 set TResSeeAsCo($type) 0 set TResSeeAsTt($type) 0 set TResId($type) 0 set TResCo($type) 0 set TResTt($type) 0 } set VariablesAuDepart [info globals] LesDefauts TypeAli TFA LesDefauts Mode "Batch" set NAli 0 set NBenchId 0 set NBenchCo 0 set NBenchTt 0 # BOUCLE PRINCIPZLE foreach f [lsort $LesFiles] { set fic [file tail $f] if {$fic in {"PF00836"}} {continue} set FichierTFA $f LesDefauts FichierTFA $FichierTFA puts "===========" puts "| $fic |" puts "===========" DecortiqueUnTFA $f LNOrdali Sequences LongueurDeLAlignement foreach n $LNOrdali { lappend LSOrdali [set Sequences($n)] } # ::profiler::reset MetAJourGroupes set NSqs [llength $SDG(GroupeToutLeMonde)] set PABCourant $fic puts "NSeqs : $NSqs Lgt $LongueurTotale" if {$NSqs < 10} { puts "Less than 10 Sequences !!" FermeFichier continue } set grp "" foreach tnom $Ntypes { unset -nocomplain TableScore foreach t $tnom { ScoreDe$t $grp } set rep1 [VerificationAvantCalculs] if {! $rep1} { puts "Une des methode foireuse !!" puts "skip alignement\n" file delete -force [file join $OrdTmpDir $fic] set BonTousTypes 0 FermeFichier puts "" puts "" break } set BonTousTypes 1 set rep2 [LanceLesCalculs $tnom $grp 0 pfam] #puts "Score [join $tnom +] done ..." if {$rep2} { set tmp_TResSeeAsId($tnom) $NConsDansId set tmp_TResSeeAsCo($tnom) $NConsDansCo set tmp_TResSeeAsTt($tnom) $NConsDansTt set tmp_TResId($tnom) $NId set tmp_TResCo($tnom) $NCo set tmp_TResTt($tnom) $NTt } else { puts "fail for method $tnom" set BonTousTypes 0 break } } if {$BonTousTypes} { incr LongTot $LongueurTotale incr NAli incr NBenchId [set TNResConsSA($fic)] incr NBenchCo [set TNResConsNSA($fic)] foreach tnom $Ntypes { incr TResSeeAsId($tnom) [set tmp_TResSeeAsId($tnom)] incr TResSeeAsCo($tnom) [set tmp_TResSeeAsCo($tnom)] incr TResSeeAsTt($tnom) [set tmp_TResSeeAsTt($tnom)] incr TResId($tnom) [set tmp_TResId($tnom)] incr TResCo($tnom) [set tmp_TResCo($tnom)] incr TResTt($tnom) [set tmp_TResTt($tnom)] } } file delete -force [file join $OrdTmpDir $fic] FermeFichier puts "" puts "" #AfficheProfileResults } set NBenchTt [expr {$NBenchId + $NBenchCo}] # Calcul Specificite et Sensibilite puts "" puts "" puts "=========================" puts "= R E S U L T A T S =" puts "=========================" puts "" puts "Nombre alignements ..............: $NAli" puts "Longueur totale .................: $LongTot" puts "Nombre residus identites ........: $NBenchId" puts "Nombre residus conserves ........: $NBenchCo" puts "Nombre residus à identifier .....: $NBenchTt" puts "" foreach tnom $Ntypes { # Sens = VraiPos/(VraiPos + FauxNeg) # Spec = VraiNeg/(VraiNeg + FauxPos) # VraiPos : Identi ET SA # FauxPos : SA non vu (non identifie) # VraiNeg : lg - sa - colo cons qui sont pas sites # FauxNeg : Sa qui ne sont pas dans une col de cons set ResSeeAsId "[set TResSeeAsId($tnom)]." set ResId "[set TResId($tnom)]." set ResSeeAsCo "[set TResSeeAsCo($tnom)]." set ResCo "[set TResCo($tnom)]." set ResSeeAsTt "[set TResSeeAsTt($tnom)]." set ResTt "[set TResTt($tnom)]." # Pour Identite # -------- set sensId [expr {1.*$ResSeeAsId/$NBenchId}] set specId [expr {1.*($LongTot - $ResId - ($NBenchId - $ResSeeAsId))/(($LongTot - $ResId - ($NBenchId - $ResSeeAsId))+($ResId - $ResSeeAsId))}] set SumSensSpecId [expr {($sensId + $specId) - 1.0}] # Pour Conserve # -------- set sensCo [expr {1.*$ResSeeAsCo/$NBenchCo}] set specCo [expr {1.*($LongTot - $ResCo - ($NBenchCo - $ResSeeAsCo))/(($LongTot - $ResCo - ($NBenchCo - $ResSeeAsCo))+($ResCo - $ResSeeAsCo))}] set SumSensSpecCo [expr {($sensCo + $specCo) - 1.0}] # Pour Global (Identite+Cons) #set NConsTt [expr {$NConsId + $NConsCo}] set sensTt [expr {$ResSeeAsTt/$NBenchTt}] set specTt [expr {1.*($LongTot - $ResTt - ($NBenchTt - $ResSeeAsTt))/(($LongTot - $ResTt - ($NBenchTt - $ResSeeAsTt))+($ResTt - $ResSeeAsTt))}] set SumSensSpecTt [expr {($sensTt + $specTt) - 1.0}] puts "" puts "type [join $tnom +] :" puts "--------------" puts "Nombre residus vus Identite........... : $ResId" puts "Nombre residus vus Conserves ......... : $ResCo" puts "Nombre residus vus Iden+Cons ......... : $ResTt" puts "Nombre residus typifies Ident ........ : $ResSeeAsId" puts "Nombre residus typifies Cons ......... : $ResSeeAsCo" puts "Nombre residus typifies Iden+Cons .... : $ResSeeAsTt" set fmt "%s %5.3f" puts "" puts [format $fmt "\tsensibilite Identite ......:" $sensId] puts [format $fmt "\tspecificite Identite ......:" $specId] puts [format $fmt "\tSomme sens+spec Identite...:" $SumSensSpecId] puts [format $fmt "\tsensibilite Conserve ......:" $sensCo] puts [format $fmt "\tspecificite Conserve ......:" $specCo] puts [format $fmt "\tSomme sens+spec Conserve ..:" $SumSensSpecCo] puts [format $fmt "\tsensibilite totale ........:" $sensTt] puts [format $fmt "\tspecificite totale ........:" $specTt] puts [format $fmt "\tSomme sens+spec totale ....:" $SumSensSpecTt] puts "" puts "" set ResPF($tnom,sensId) $sensId set ResPF($tnom,specId) $specId set ResPF($tnom,sumId) $SumSensSpecId set ResPF($tnom,sensCo) $sensCo set ResPF($tnom,specCo) $specCo set ResPF($tnom,sumCo) $SumSensSpecCo set ResPF($tnom,sensTt) $sensTt set ResPF($tnom,specTt) $specTt set ResPF($tnom,sumTt) $SumSensSpecTt } puts "\n\n" foreach titre {"Sensibilite Identite" "Specificite Identite" "Sum Identite" "Sensibilite Conserve" "Specificite Conserve" "Sum Conserve" "Sensibilite Totale" "Specificite Totale" "Sum Totale"} cle {sensId specId sumId sensCo specCo sumCo sensTt specTt sumTt} { puts "$titre" set Lv [array names ResPF "*,$cle"] set Lr [list] foreach v $Lv { lassign [split $v ,] nom tmp set x [set ResPF($v)] lappend Lr [list $nom $x] } set Lr [lsort -real -index 1 $Lr] foreach v $Lr { lassign $v nom x puts [format "%15s %7.2f" [join $nom +] [expr {$x*100.}]] } puts "" } puts "\nTermine\n" #exit return } proc TestPost {} { set query [::http::formatQuery "ka" "va" "kb" "vb\navecNL" "kc" "vc"] set token [::http::geturl "http://ena/wscoperr?Zero&CaVa" -query $query] upvar #0 $token state set body $state(body) ::http::cleanup $token return $body } proc TestPostgreSQL {} { puts [package require Pgtcl] } proc TestQdsHitCounts {} { set RepertoireParent /genomics/link/GxData/GxUpload/HumanGeneAtlas/Study/Distances/String_9606_201212101651 set HitCounts [QuestionDeScience EVImm "ret HitCounts $RepertoireParent"] return $HitCounts } proc TestQsub {{GetWhat ""}} { set S "-b y pwd" set S "tcsh -c 'pwd; hostname; pwd; ls'" return [Qsub $S $GetWhat "" "" "" ""] } proc TestQueLePremierGCG {} { set GCG [ContenuDuFichier p12345.swissprot] Espionne [QueLePremierGCG "$GCG\n$GCG"] exit } proc TestQueSequenceFormatEMBL {} { Espionne [QueSequenceFormatEMBL " METKGYHSLPEGLDMERRWGQVSQAVERSSLGPTERTDENNYMEIVNVSC VSGAIPNNSTQGSSKEKQELLPCLQQDNNRPGILTSDIKTELESKELSAT VAESMGLYMDSVRDADYSYEQQNQQGSMSPAKIYQNVEQLVKFYKGNGHR PSTLSCVNTPLRSFMSDSGSSVNGGVMRAIVKSPIMCHEKSPSVCSPLNM TSSVCSPAGINSVSSTTASFGSFPVHSPITQGTPLTCSPNAENRGSRSHS PAHASNVGSPLSSPLSSMKSSISSPPSHCSVKSPVSSPNNVTLRSSVSSP ANINNSRCSVSSPSNTNNRSTLSSPAASTVGSICSPVNNAFSYTASGTSA GSSTLRDVVPSPDTQEKGAQEVPFPKTEEVESAISNGVTGQLNIVQYIKP EPDGAFSSSCLGGNSKINSDSSFSVPIKQESTKHSCSGTSFKGNPTVNPF" "" AvecReperes] } proc TestQuidSeq {} { set LesACOS [QuestionDeScience QuidSeq "QuidOSsOfACs P12345|P12345 "] regsub {[ \n]+$} $LesACOS "" LesACOS Espionne $LesACOS exit } proc TestRGS {Nom} { set LeGroupe [GroupeSecator $Nom $Nom "Out"] Espionne $LeGroupe Espionne [llength $LeGroupe] Espionne [RapportGroupeSecator $Nom] exit } proc TestRand {l} { set dl [expr {10*$l}] Init_C_Random for {set i 0} {$i < 10} {incr i} { lappend lc {*}[C_Random $l] # after 1000 } for {set i 0} {$i < $dl} {incr i} { lappend lt [expr {int(rand()*$l)}] } set lc [lsort -unique -integer $lc] set lt [lsort -unique -integer $lt] #puts "lc [llength $lc]" #puts "lt [llength $lt]" if {$lc != $lt} { #puts "diff dans lc et lt" #puts "[lor $lc $lt]" } #flush stdout #update idletasks exit return } proc TestRavi {} { package require tdom set MacsimXml [ContenuDuFichier "ra.xml"] set NoeudMacsim [[dom parse $MacsimXml] documentElement] Espionne $NoeudMacsim } proc TestReassembleLesTronconsGenscan {Contig TailleTroncon} { set LesTroncons [lsort [glob -nocomplain "toto*.gsc"]] Espionne [ReassembleLesTronconsGenscan $LesTroncons $TailleTroncon "fusion.gsc"] exit } proc TestRecombinaisonEtFusion {} { set LespD [list "[RepertoireDuGenome]/vecteurs/pet15b-FLAG-gcassette-frameA.tfa" "[RepertoireDuGenome]/vecteurs/pETG60A.tfa" "[RepertoireDuGenome]/vecteurs/pETG28c2.tfa" "[RepertoireDuGenome]/vecteurs/pDEST10.tfa" ] set LespD [ChoixDesPresents $LespD] set LesR1 [ChoixDesPresents [glob -nocomplain "[RepertoireDuGenome]/rec1/*.tfa"]] set LesFiFuN {} foreach R1 $LesR1 { set QR1 [file tail $R1] regsub ".tfa$" $QR1 "" QR1 foreach pD $LespD { Espionne "[file tail $R1] [file tail $pD]" set QpD [file tail $pD] regsub ".tfa$" $QpD "" QpD set D "[RepertoireDuGenome]/rec2/${QR1}_$QpD.tfa" if { ! [file exists $D]} { Espionne [Recombinaison $R1 $pD $D "" "Seconde"] } if { ! [file exists $D]} { Warne "$D\nwas not created. I'll skipp." ; continue } set FiFuNP [CreeLesFichiersExtension5PrimeDeRec2 $D] if {$FiFuNP==""} { continue } scan $FiFuNP "%s" $FiFuN lappend LesFiFuN $FiFuN } } return $LesFiFuN } proc TestRepOrga {} { Wup "Test le repertoire du genome" global RepertoireDuGenome global CheckResultat if {[file exists "$RepertoireDuGenome"]} { lappend CheckResultat "The project exists" return 1 } else { lappend CheckResultat "No project \"$RepertoireDuGenome\" available" return 0 } } proc TestRetourne {} { set L {a b c d e f g} puts [join $L " "] puts [join [RetourneLaListe $L] " "] } proc TestRewriteXmlToXml {FichierSource {FichierDestin ""} {Doctype ""}} { package require tdom if {$Doctype==""} { set Doctype [DoctypeForMacsim] } if {$Doctype=="NoDoctype"} { set Doctype "" } if {$FichierDestin==""} { set FichierDestin $FichierSource } set AncienXML [ContenuDuFichier $FichierSource] set Doc [dom parse $AncienXML] set Root [$Doc documentElement] foreach Noeud [$Root selectNodes "//subgroup"] { set Valeur [$Noeud selectNodes "string(.)"] set Papa [$Noeud parentNode] set Nouveau [$Doc createElement "group"] $Nouveau appendChild [$Doc createTextNode $Valeur] $Papa replaceChild $Nouveau $Noeud } foreach Noeud [$Root selectNodes "//column-score"] { set Nouveau [$Doc createElement "colsco-type"] $Nouveau appendChild [$Doc createTextNode "int"] set Suivant [$Noeud selectNodes "colsco-data"] Espionne $Suivant $Noeud insertBefore $Nouveau $Suivant } set NouveauXml $Doctype append NouveauXml [$Root asXML -indent 1] regsub "" $NouveauXml "" NouveauXml regsub "" $NouveauXml "" NouveauXml if {$FichierDestin=="GetIt"} { return $NouveauXml } return [Sauve $NouveauXml dans $FichierDestin] } proc TestRowsOfCells {} { set Texte [ContenuDuFichier "[HomeRipp]/GenoretWww/AmdConsortium/FamLevel2OK.csv"] EspionneL [RowsOfCells $Texte] exit } proc TestSampleTOL {} { InitTaxDB LoadTkAndPackages ChangeTkOptions GUITaxInitialise #SampleTOL -ntaxa 200 -UserFile marie.id set Lt [LesLignesDuFichier marie.tax] #set Lt [LesLignesDuFichier tax.txt] set sLt [join $Lt ,] if {0} { exec ordali exe SampleTOL -fileOut tutu.html -ntaxa 212 -root 131567 -output terminal -addmodel 0 -modelsin 1 -userids $sLt >& logcmd exit } set addm 0 ; set modelsin 1 set ntaxa 212 set taxroot "131567" set useall "representative" set file "tol_exec.html" set others "-userids $sLt" #set others "" #set Cmd "setenv ORDALIEONWEB 1 ; setenv ORDALIDIR /home/moumou/ordali ; setenv PATH /home/moumou/ordali/bin ; setenv HOME /home/moumou/ ; ordali puts SampleTOL -ntaxa $ntaxa -root $taxroot -modelsin $modelsin -addmodel $addm -useorgs $useall -output terminal -fileOut $file $others" #exec tcsh -c $Cmd >& logSotol & #::profiler::reset eval SampleTOL -ntaxa $ntaxa -root $taxroot -modelsin $modelsin -addmodel $addm -useorgs $useall -fileOut $file $others #AfficheProfileResults #SampleTOL -fileOut tutu.html -ntaxa 20 -root 561 -output terminal -addmodel 0 -modelsin 1 -userids $sLt #SampleTOL -fileOut tutu.html -ntaxa 20 -root 561 -output terminal -addmodel 0 -modelsin 1 GUIViewSampleTOL return } proc TestScoreExe {fpfam Lmscore} { global Sequences LNOrdali LSOrdali ListeDesPiliersDuGroupe LNDG SDG TbScores ListeScore LongueurTotale ConsMeth # use executable -> exe or library -> lib set how "exe" #set how "lib" # lit le fichier DecortiqueUnTFA $fpfam LNOrdali Sequences set LongueurTotale [string length [set Sequences([lindex [array names Sequences] 0])]] if {"SanderSP" in $Lmscore || "Valdar" in $Lmscore} { set Lns [list] foreach n $LNOrdali { lappend Lns $n [set Sequences($n)] } set LPCI [CalculeLesPCIGenerique $Lns] } # calcule score set LNDG GroupeToutLeMonde set SDG(GroupeToutLeMonde) $LNOrdali CreeLesPiliers # prepare pour scores set TbScores(Lcols) $Lmscore if {[llength $Lmscore] > 1} { set Scale 1 } else { set Scale 0 } set Lthrgap [list 0.005 0.1 0.25 0.5 0.7] foreach pcgap $Lthrgap { LesDefauts PCThrGap $pcgap unset -nocomplain ListeScore array unset TbScores "Score,*" update foreach mscore $Lmscore { if {$mscore eq "SanderSP" || $mscore eq "Valdar"} { set sco [ScoreDe$mscore [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)] $LNOrdali $LPCI] } else { set sco [ScoreDe$mscore [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)]] } if {$Scale} { set sco [CentreData $sco -999.0] } set TbScores(Score,$mscore) $sco } CreeListeScore set Lori $ListeScore set LgS [llength $ListeScore] puts "\ngap ${pcgap}% $LgS" if {$LgS < 2} { # Probleme : nb cols < 2 puts "\nListeScore=0\n$Lmscore $pcgap $pfamid" continue } if {$how eq "exe"} { set o [file tempfile fdat] foreach l $Lori { puts $o [join $l \t] } close $o update idletasks catch {file copy $fdat [file tail $fdat]} } # pour chaque meth clustering foreach cm [list dpc mixturemodel secator] { set Lval $Lori # Fait clusters switch $cm { "dpc" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm kmeans -nbc dpc -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=kmeans -nbc=dpc -wc] } set lab dpc } "secator" { if {$how eq "lib"} { if {0} { set fout [open "fout_[thread::id]" w] foreach xval $Lval { puts $fout "{*}$xval" } close $fout } set Lgr [Tclcluspack $Lval -dt coordinates -cm hierar -nbc secator -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=hierar -nbc=secator -wc] } set lab secator } "mixturemodel" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm mm -nbc aic -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=mm -nbc=aic -wc] } set lab mm } } if {$how eq "exe"} { if {[catch {exec {*}$cmd >& cout.log} Msg]} { file copy $fdat plantage.dat puts "Pb Cluspack\n$Msg" puts "$cmd" puts "[ContenuDuFichier cout.log]" } # lit clusters if {[file exists "${fdat}.clu"]} { set Lres [TraiteResultatClustering "${fdat}.clu" ""] } else { puts "log cluspack :\n[ContenuDuFichier cout.log]" continue } file delete -force cout.log ${fdat}.clu } else { set Lres [TraiteResultatClusteringTcl $Lgr ""] } set Ltrouve [lindex $Lres 1] set res [list "'$lab'" $pcgap $Ltrouve $LgS] puts "-> $res" } if {$how eq "exe"} { file delete -force [file tail $fdat] $fdat } } exit } proc TestSelLuc {id} { set fileBlast [file join [RepertoireDuGenome] "blastp" $id] set fileCopain [file join [RepertoireDuGenome] "tfasdescopains_luc" $id] set fOut "/home/friedric/gscoperso/Final$id" set listeId {} if {[file exists $fileCopain]} { set li [LesLignesDuFichier $fileBlast] set line [LesLignesDuFichier $fileCopain] set f [open $fOut w] foreach l $line { if {[regexp ">" $l]} { set n [string range $l 9 15] lappend listeId $n } } foreach n $listeId { foreach ll $li { if {[regexp $n $ll]} { puts $f "$id $ll" break } } #eval exec "grep \"$n\" $file" } close $f } return 1 } proc TestSeriallistFromSerial {{F ""}} { if {$F!=""} { set Texte [ContenuDuFichier $F] } else { set Texte "a:4:{i:0;s:10:\"1415670_at\";i:1;s:6:\"270637\";i:2;s:10:\"1415672_at\";i:3;s:6:\"270639\";}" } # ArrayFromSerial $Texte A #parray A # exit set R [SeriallistFromSerial $Texte] return $R set A(coucou) 1 ArrayFromSerial $Texte A parray A exit } proc TestSetOptions {A B C D args} { set LesOptions [SetOptions $args] foreach Option $LesOptions { Espionne "$Option [set $Option]" } exit } proc TestSiProteine {Fichier} { Wup "Verifie si une sequence est proteique ou pas" set Sequence [QueLaSequenceDuFichierTFA $Fichier] if {[regexp -nocase {[^ATGCNXMKRSYWVHDB]} $Sequence]} {return "1"} else {return "-1"} } proc TestSignalsInside {LesPGS {LesSignaux ""}} { if {$LesSignaux==""} { set LesSignaux [list "NdeI" "BamHI"] } set LesHits {} foreach PGS $LesPGS { set FiNuc [GscopeFile $PGS "nuctfa"] foreach Signal $LesSignaux { set Pattern [Signal $Signal] set PosNPosA [PositionDuPatternDansFichierTFA $Pattern $FiNuc] if {$PosNPosA!="-1 -1"} { lappend LesHits "$PGS [Alias $PGS] $Signal $PosNPosA" } } } return $LesHits } proc TestSock {} { LogWscope "dans TestSock" return "Bonjour" } proc TestSocket {} { # set Reponse [QuestionDeScience] set SocketLBGS [socket lbgs.u-strasbg.fr 80] puts $SocketLBGS "GET /people/peoplealpha.php\n" gets $SocketLBGS Reponse puts $Reponse exit while {1} { Espionne [socket ouragan 20000] } exit Espionne [socket ouragan 20000] Espionne [catch {set Soso [socket ouragan 20001]} Message] Espionne $Soso Espionne $Message Espionne [socket ouragan 25000] Espionne [socket ouragan 25001] exit } proc TestSqlCilioCarta {{Quoi ""}} { CanalSqlCilioCarta # set R [SqlExec "select name from sqlite_master" $Quoi] set R [SqlExec "select * from prot where genename is not null limit 3" $Quoi] return $R } proc TestSqlInsert {} { CanalSqlMacsims set R [SqlInsertOnceRecordIntoTable macsims name salut ] Espionne $R } proc TestStack {} { puts [PushOnStack Bonjour] puts [PushOnStack Ca] puts [PushOnStack va] puts [IsEmptyStack] puts [PullFromStack] puts [ValFromStack] puts [ValFromStack] puts [ValFromStack] puts [PullFromStack] puts [PullFromStack] puts [PullFromStack] puts [PullFromStack] DestroyStack exit } proc TestStatNuc {} { Wup "Test Statistiques sur Nuc" global RepertoireDuGenome global CheckResultat if {[file exists "$RepertoireDuGenome"]&&[file isdirectory "$RepertoireDuGenome"]} { lappend CheckResultat "\n------Test des Statistiques------" if {![file exists "$RepertoireDuGenome/fiches/compositionenatgc"]} { lappend CheckResultat "No composition en ATGC, run CreeLeFichierCompositionEnATGC" } else { lappend CheckResultat "Ok for Composition en ATGC" } if {![file exists "$RepertoireDuGenome/fiches/spectregc"] || ![file exists "$RepertoireDuGenome/fiches/spectregcxy"] } { lappend CheckResultat "No SpectreGC, run CreeLesFichiersSpectreDesGC" } else { lappend CheckResultat "Ok for SpectreGC" } if {![file exists "$RepertoireDuGenome/fiches/sd_bons"] || ![file exists "$RepertoireDuGenome/fiches/sd_loin"] || ![file exists "$RepertoireDuGenome/fiches/sd_mets"] || ![file exists "$RepertoireDuGenome/fiches/sd_sans"] } { lappend CheckResultat "No ShineDalgarno, run CreeLesFichiersDesShineDalgarnoDesPABs" } else { lappend CheckResultat "Ok for ShineDalgarno" } if {[file exists "$RepertoireDuGenome/codonw"] &&[file isdirectory "$RepertoireDuGenome/codonw"]} { set Reponse " $RepertoireDuGenome/codonw exists" if {[glob -nocomplain "$RepertoireDuGenome/codonw/*"]=={}} { append Reponse " but codonw was not launched \(do setcodonw before\)" lappend CheckResultat $Reponse } else { append Reponse " and codonw done" lappend CheckResultat $Reponse } } else { lappend CheckResultat "Codonw was not launched \(do setcodonw before\)" } if {[file exists "$RepertoireDuGenome/trnadir"] &&[file isdirectory "$RepertoireDuGenome/trnadir"] } { set Reponse " $RepertoireDuGenome/trnadir exists" if {[glob -nocomplain "$RepertoireDuGenome/trnadir/*"]=={}} { append Reponse " but tRNAscan-SE was not launched \(do settrnascan before\)" lappend CheckResultat $Reponse } else { append Reponse " and tRNAscan done" lappend CheckResultat $Reponse } } else { lappend CheckResultat "tRNAscan-SE was not launched \(do settrnascan before\)" } if {[file exists "$RepertoireDuGenome/fiches/coglimmer"]} { lappend CheckResultat " $RepertoireDuGenome/fiches/coglimmer exists so Glimmer done" } else { lappend CheckResultat "Glimmer \(compare to existing\) was not launched \(do setglimmer before\)" } } } proc TestStudent {} { Student "a b c d e" "x y z" } proc TestTBlastN {} { Wup "Test TblastN et TestAnalyseTBlastN" global RepertoireDuGenome global CheckResultat lappend CheckResultat "\n------Test tBlastN genome------" if {[file exists "$RepertoireDuGenome/tblastngenomes"]} { set Reponse " $RepertoireDuGenome/tblastngenomes exists" if {[glob -nocomplain "$RepertoireDuGenome/tblastngenomes/*"]=={}} { append Reponse " but you should run TBlastNPourTous" lappend CheckResultat $Reponse } else { append Reponse " and TBlastNPourTous done" lappend CheckResultat $Reponse TestAnalyseTBlastN } } else { set Reponse "Create $RepertoireDuGenome/tblastngenomes, run TBlastNPourTous" lappend CheckResultat $Reponse } } proc TestTDomSurSpineAnnotation {} { package require tdom # package require tnc set FichierXml "[HomeRipp]/spine/public/xml/macsim.xml" set XML [ContenuDuFichier $FichierXml] set Id [dom parse $XML] set Root [$Id documentElement] set NoeudAli [$Root selectNodes "alignment"] set AlnName [$NoeudAli selectNodes "string(aln-name)"] Espionne $AlnName foreach Noeud [$NoeudAli selectNodes "sequence"] { set SeqName [$Noeud selectNodes "string(seq-name)"] Espionne "$SeqName" } exit } proc TestTDomSurSpineTarget {} { package require tdom set FichierXml "[HomeRipp]/spine/public/xml/Tpetit.xml" set XML [ContenuDuFichier $FichierXml] set Id [dom parse $XML] set Root [$Id documentElement] set LesNoeudsTarget [$Root selectNodes {//target[//target/status/@access='PUBLIC']}] foreach NoeudTarget $LesNoeudsTarget { set ID [$NoeudTarget selectNodes "string(ID)"] set NoeudStatus [$NoeudTarget selectNodes "status"] set Task [$NoeudStatus selectNodes "string(task)"] set Lab [$NoeudStatus selectNodes "string(lab)"] Espionne "$ID $Task $Lab" } exit } proc TestTailleEtTmPourLeDesignDesOligos {LesPABs {LesTailles ""} {LesTemperatures ""} {Ecart ""} {FichierSortie ""}} { Wup "Affiche le choix des oligo par leur tm et leur longueur" global TabSeqTm #LesParametres a comparer if {$LesPABs == "LaTotale"} {set LesPABs [lsort -increasing [ListeDesPABs]]} #if {$LesTailles == ""} {set LesTailles [list 50 55 60 65 70]} if {$LesTailles == ""} {set LesTailles [list 60]} if {$LesTemperatures == ""} {set LesTemperatures [list 86 88 90 92 94 96 98]} if {$Ecart == ""} {set Ecart 5} if {$FichierSortie == ""} {set FichierSortie "[RepertoireDuGenome]/StatOligoPossible_60.new"} #set LesPABs [lrange $LesPABs 874 end] #AppendAuFichier $FichierSortie [join [list "Sequence" "Length" "Tm" "Range" "Total" "Accepted" "\%" "Rejected" "\%" "GCAccepted \%" "GCRejected \%"] "\t"] foreach PAB $LesPABs { if {$PAB=="ACT1165"} {continue} foreach Taille $LesTailles { foreach Temperature $LesTemperatures { set Res [ChoixDesOligosParLeTm $PAB $Taille $Temperature $Ecart] set Total [lindex $Res 0] set Accepted [lindex $Res 1] set Rejected [lindex $Res 2] set GCAccepted [lindex $Res 3] set GCRejected [lindex $Res 4] if {$Total==0} {set Total 1} #Espionne "$PAB $Taille $Temperature $Ecart $Total $Accepted [format "%.1f" [expr ($Accepted/($Total*1.0))*100.0]] $Rejected [format "%.1f" [expr ($Rejected/($Total*1.0))*100.0]]" AppendAuFichier $FichierSortie [join [list $PAB $Taille $Temperature $Ecart $Total $Accepted [format "%.1f" [expr ($Accepted/($Total*1.0))*100.0]] $Rejected [format "%.1f" [expr ($Rejected/($Total*1.0))*100.0]] $GCAccepted $GCRejected] "\t"] } } if {[info exists TabSeqTm]} {unset TabSeqTm} } return "" } proc TestTaxClass {} { Espionne [TaxClass 9606] Espionne [TaxClass 9606] Espionne [TaxClass 9605] Espionne [TaxClass 9606 "" "" Name] Espionne [TaxClass 9606 "" "" Rank] Espionne [TaxClass 9606 "" "" Name] exit } proc TestTaxParQdsMemo {} { Espionne [TaxParQdsMemo "Frog virus 3 (isolate Goorha)"] Espionne [TaxParQdsMemo "Frog virus 3 (isolate Goorha)"] Espionne [TaxParQdsMemo 9606] Espionne [TaxParQdsMemo "Homo sapiens"] Espionne [TaxParQdsMemo "Homo_sapiens"] } proc TestTmpFile {} { set F1 "[TmpFile RRR ~ "" WithDateAndUniqueRoot]_F1" Sauve xxx dans $F1 set F2 "[TmpFile RRR ~ "" WithDateAndUniqueRoot]_F2" Sauve xxx dans $F2 exit } proc TestTransfert {} { #test si le transfert entre macsims et macsimXml est complet set i 0; set j 0 foreach FichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsims/*xml"] { set Box [file tail $FichierMacsim] regsub {\.[^\.]+$} $Box "" Box incr i if {[file exists "[RepertoireDuGenome]/macsimXml/$Box"]} { incr j } else { Espionne "Manque $FichierMacsim dans macsimXml" } } Espionne "$i doit etre egale a $j" } proc TestTree {Nom {Type Access}} { global RepertoireDuGenome set A [ArbreEnListe [ContenuDuFichier "$RepertoireDuGenome/phylos/$Nom"]] puts $A set T [TreeFromArbre "Racine" $A $Type] NicePrintOfTree $T set P [PathToNode N_00006 $T "value"] set N [lindex $P end] puts $P set S [SwapRoot $T $N $P] puts " et le meme en N_00006" NicePrintOfTree $S exit } proc TestUnCanva {} { set K [UnCanva 600 400 300 200] $K configure -background red $K create rectangle 100 100 200 250 -fill green set G [Graphe {10 20}] $G configure -background red return $K } proc TestUnixFileName {} { foreach Ligne [LesLignesDuFichier "[HomeRipp]/lesbanquestblastn"] { scan $Ligne "%s" Banque Espionne "$Banque [UnixFileName $Banque]" } exit } proc TestUpload {{Fichier ""}} { if {$Fichier==""} { set Fichier "[HomeRipp]/images/TintinEtBD/pirogue.gif" } set Queue [file tail $Fichier] # format a gif file upload according to the following form: #
    # # # #
    # #
    # get contents of the gif set fd [open $Fichier] fconfigure $fd -translation binary set image [read $fd] close $fd # set up other fields array set fields { MAX_FILE_SIZE " " action 1 img_resize "100%" } # format the image and form puts [form-data::format file1 $Queue $image image/gif] } proc TestW {} { load wrapwave/tcl_wavelib.so set vp [split [IniVolPol] \n] foreach l $vp { regsub -all { +} [string trim $l] " " l lassign [split $l " "] aa v p puts ">$aa< >$v< >$p<" set VP($aa,Vol) $v set VP($aa,Pol) $p } set VP(-,Vol) -1 set VP(-,Pol) -1 set s1 "ACDHGMSPKMSKSANWRGAL" set s2 "MTSHKMSKSPILSEHT" set Ls1V {} ; set Ls1P {} set Ls2V {} ; set Ls2P {} foreach x1 [split $s1 ""] x2 [split $s2 ""] { if {$x1 ne ""} { lappend Ls1V $VP($x1,Vol) lappend Ls1P $VP($x1,Pol) } if {$x2 ne ""} { lappend Ls2V $VP($x2,Vol) lappend Ls2P $VP($x2,Pol) } } # standise : -moy et / par ecarttype set Ls1P [Standardise $Ls1P] set Ls2P [Standardise $Ls2P] lappend Ls2P 0.0 0.0 0.0 0.0 set ws1P [::wavelets::forwardDWT haar 1 $Ls1P] puts "ws1P [llength $ws1P]" set ws2P [::wavelets::forwardDWT bior3.3 2 $Ls2P] } proc TestWali {{Quoi ""}} { #rR Attention ici on redéfinit certaines choses .. donc à ne pas exécuter dans Wali global WaliSourceDir ; set WaliSourceDir "[HomeRipp]/wwwLinux/wali" ; source $WaliSourceDir/wali_source.tcl if {[info proc SESSION]==""} { proc SESSION args { return "" } } if {$Quoi=="TaxonomyToHTML"} { return [TaxonomyToHTML CIL007] } return [UlAli "[WaliRootDir]/example.rsf"] } proc TestWarne {} { global WarneEnPuts set WarneEnPuts 0 set WarneEnPuts 0 Warne salut Warne "Comment ca va ?" } proc TestWebService {} { set R [WebService "Gx" Execute querytext "GxFun::SignalIntensity&&0&1&301&&T&&&GeneAsText&limit 10"] return $R set R [WebService "Gx" GxDbSqlExec querytext "select name,pk_tissue from tissue" getwhatfromserial "GetList"] return $R set R [WebService "Gx" GxDbSqlExec querytext "select probeset_id,pk_probeset from probeset where probeset_id in ('1415670_at','1415672_at');" getwhatfromserial "GetList"] return $R } proc TestWebServiceOLD {} { ;#rR ???????? package require http return [WebService "http://www.uniprot.org/mapping/?" toto [list from ACC to P_REFSEQ_AC format tab query P13368]] } proc TestXav {} { DecortiqueUnMSF msf/QR002 LesAccess Sequences foreach access $LesAccess { Espionne "$access" } } proc TestYaOrthologue {} { global RepertoireDuGenome set Somme 0 set n 0 foreach Nom [ListeDesPABs] { incr n # set Somme [expr $Somme + [PourcentageIdentiteOrga $Nom phor "$RepertoireDuGenome/fiches/piclustalw"]] incr Somme [YaOrthologue $Nom phor $RepertoireDuGenome] # set Somme [expr $Somme + [PourcentageIdentiteOrga $Nom phor "$RepertoireDuGenome/fiches/piclustalw"]] } puts [expr $Somme/$n] puts $n exit } proc Test_DbClustal {} { #! /bin/tcsh while (1) sleep 5 ps au |grep lardenoi >> Test_DbClustal.txt end } proc Test_H_Open_Close {} { lappend LT [H_Open [H_BalAtt [H_Pivot] Coucou "a b c d"]] lappend LT [H_Open [H_Color [H_Pivot]]] lappend LT "These lines will" lappend LT "be enclosed" lappend LT "between Opens and Closes" lappend LT [H_Close] lappend LT [H_Close] EspionneL $LT } proc Testcode {} { source /home/moumou/ordali/src/ordali_misynpat.tcl set sys "dars2" set pos "512" set aa "P" set retour [ComputeMiSynPatMutation $sys $pos $aa] puts "$retour" exit } proc TesteDoublon {} { foreach Ligne [LesLignesDuFichier LesDoublons.fof] { scan $Ligne "%s %s" Ps Fic regsub "/rng313.forAnnot/" $Fic "/xenoAovFDR.35/" Fix Espionne $Fic if {[ContenuDuFichier $Fic]!=[ContenuDuFichier $Fix]} { Espionne "$Fic\n$Fix" } } } proc TesteGrave {} { global NomDuFichierPierre set NomDuFichierPierre "pierre.testegrave" File delete -force $NomDuFichierPierre set L {6 8 9 7 } Grave L set A(toto) [list 4 5 "bonjour madame" [list comment va votre mari "Jules Dupont"]] set A(tutu) 5 set A(lili) $L Grave A EspionneL [array get A] unset A Degrave A unset L Degrave L Espionne $L EspionneL [array get A] exit } proc TesteIndexation {} { scan [BoundingBox [ListeDeBoites]] "%d %d" xDebut xFin set xDebut [Maxi 1 [expr $xDebut-3000]] incr xFin 1000 set ScalX [ expr 1024.0 / ( $xFin - $xDebut ) ] set Pas [expr round ( ( 10240.0 / round ( 1.0 / $ScalX ) ) * ( $xFin - $xDebut ) / 1024.0 ) ] set DebutCourant $xDebut set FinCourant [expr $xDebut + $Pas] Espionne "$ScalX $xDebut $xFin $Pas" ChargeOrdres "NombreDeCopainsDansBlast" ordrescomplets.txt indexes.txt signif.txt LesOrdresEntrePositions "NombreDeCopainsDansBlast" [expr 1+5*$Pas] [expr 1+7*$Pas] exit } 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 TesteRepereBox {K} { LesOrdresPourGif [GscopeBoard titi PourGif] exit Espionne [RepereBox "serrs" OrdrePourGif] } proc TesteSavantEnBatch {} { set Question "batch set x 3\nbatch set y \$x" puts [QuestionDeScience Paby $Question] exit } proc TesteTamis {} { set Commande [ChoisisUnTamis "ChampCommande"] if {$Commande==""} { exit } Espionne [eval $Commande] exit } proc TesteTouteLaBalise {} { Espionne [TouteLaBalise protein match.xml] Espionne [TouteLaBalise protein] Espionne [TouteLaBalise protein match.xml "CloseFileAfterRead"] Espionne [TouteLaBalise protein match.xml] Espionne [TouteLaBalise protein "" "CloseFileAfterRead"] Espionne [TouteLaBalise protein match.xml] } proc TesteUnCanva {} { set K [UnCanva 600 600 600 600 EtY] set K2 [UnCanva 600 800 6000 8000 EtY] $K create rectangle 200 200 300 500 -fill red set I [image create photo ima -file [HomeRipp]/images/hammer.gif] $K create image 0 0 -anchor nw -image ima MainLeveeSurUnCanva $K } proc TesteValeurDeLaBalise {} { set Texte " " set V [ValeurDeLaBalise BlastHit Texte "NePasRogner" A] Espionne "Valeur >$V<" Espionne "Attrib >$A<" Espionne "/$Texte/" set V [ValeurDeLaBalise DE Texte "NePasRogner" A] Espionne "Valeur >$V<" Espionne "Attrib >$A<" Espionne "/$Texte/" set V [ValeurDeLaBalise AC Texte "NePasRogner" A] Espionne "Valeur >$V<" Espionne "Attrib >$A<" Espionne "/$Texte/" Espionne [AttributsDeLaBalise DE Texte] exit } proc Teste_Fleche {} { set K [UnCanva 600 600] Fleche $K 200 100 430 100 -width 50 -outlinewidth 1 -fill "red" -outline "blue" -arrowdirection "both" -flatside "left" Fleche $K 200 300 230 300 -width 50 -outlinewidth 1 -outline "green" -arrowdirection "both" Fleche $K 200 400 230 400 -width 50 -outlinewidth 1 -fill "" -outline "orange" -arrowdirection "start" Fleche $K 200 500 230 500 -width 50 -outlinewidth 1 -fill "red" -outline "grey" -arrowdirection "none" $K create oval 10 10 100 200 MainLeveeSurUnCanva $K regsub ".canvas" $K "" w Gonfle $w all 1. 1. set K [UnCanva 600 600] Fleche $K 200 100 230 100 -width 50 -outlinewidth 1 -fill "red" -outline "blue" -arrowdirection "end" Fleche $K 200 300 230 300 -width 50 -outlinewidth 1 -fill "red" -outline "blue" -arrowdirection "both" Fleche $K 200 400 230 400 -width 50 -outlinewidth 1 -fill "red" -outline "blue" -arrowdirection "start" Fleche $K 200 500 230 500 -width 50 -outlinewidth 1 -fill "red" -outline "blue" -arrowdirection "none" $K create oval 10 10 100 200 MainLeveeSurUnCanva $K regsub ".canvas" $K "" w Gonfle $w all 1. 1. } proc Teste_LaTraduction {} { set Liste [ColorationsPossibles] foreach X $Liste T [LaTraduction $Liste "english" "SansBlanc"] { Espionne "$X $T" } exit } proc Teste_ScanLaListe {} { set L {1 2 3 4 5 6 7 } puts [ScanLaListe $L a b c] puts $a puts $b puts $c exit } proc Testlib {} { global OrdEtcDir TBlosum ListeDesAcidesAmines # set f [file join $OrdEtcDir pam250.bla] set f [file join $OrdEtcDir blosum62.dat] InitTBlosum $f # sans parametres --> gonnet250 # InitTBlosum array set TPam [array get TBlosum] #set laa [lrange $ListeDesAcidesAmines 0 end-1] set laa [split "ARNDCQEGHILKMFPSTWYV" ""] package require math::linearalgebra namespace import -force math::linearalgebra::* set M [mkMatrix 20 20] set i 0 foreach a $laa { set r [list] foreach b $laa { lappend r [set TPam($a,$b)] } setrow M $i $r incr i } # set M [CentreReduitMatrice $M] set M [CentreMatrice $M] set Lv [eigenvectorsSVD $M] lassign $Lv Vecs Vals AnalyseValeursPropres $Vals package require sqlite set Ev1 [lindex $Vecs 0] set Ev2 [lindex $Vecs 1] set Ev3 [lindex $Vecs 2] for {set i 1} {$i < 4} {incr i} { lassign [AnalyseVecteursPropres [set Ev$i]] k$i cp if {$i != 1} { set En$i [V_SV -1.0 * [set Ev$i]] lassign [AnalyseVecteursPropres [set En$i]] kn$i cn if {$cn > $cp} { set Ev$i [set En$i] set k$i [set kn$i] } } set Av$i [VecteurDeAAIndex [set k$i]] } FittingParRotation $Ev1 $Ev2 $Ev3 $Av1 $Av2 $Av3 puts "\nApres centrage et mise a l'echelle" FittingParRotation $Ev1 $Ev2 $Ev3 $Av1 $Av2 $Av3 1 1 exit } proc TestonsExec {} { #rR voir dans [HomeRipp]/Werig/bugPgtclExec puts "First exec" puts [exec pwd] puts [package require Pgtcl] puts "Second exec" puts [exec pwd] return "return from TestonExec" # load /usr/local/ActiveTcl/lib/pgtcl2.0.0/libpgtcl2.0.0.so } proc TestonsOligo {} { set FichierPourExcel1 "[RepertoireDuGenome]/Probes/OligoPourExcel4_6.txt" set FichierPourExcel2 "[RepertoireDuGenome]/Probes/New_OligoPourExcel_2_1.txt" #set LesAccessDeRef [InterrogeLesOligosPourExcel "$FichierPourExcel1" LesAccess] set LesAccessDeRef [InterrogeLesOligosPourExcel "$FichierPourExcel2" LesAccess] set ListeDeja [list ACT1168 ACT1200 ACT1375 ACT1384 ACT1396 ACT1457 ACT1476 ACT1671 ACT2437 ACT2438] set LesAcc "" foreach Acc $LesAccessDeRef { set ExisteAcc [InterrogeLesOligosPourExcel "$FichierPourExcel1" $Acc] if {$ExisteAcc=="1"} { set LesPABAssocie [InterrogeLesOligosPourExcel "$FichierPourExcel2" $Acc PAB] foreach PABAssocie $LesPABAssocie { if {! [regexp "$PABAssocie" $ListeDeja]} { lappend LesAcc "$PABAssocie On a deja $Acc [InterrogeLesOligosPourExcel "$FichierPourExcel2" $Acc Definition]" #Espionne "$PABAssocie On a deja $Acc [InterrogeLesOligosPourExcel "$FichierPourExcel2" $Acc Definition]" } } } } set LesAcc [lsort -index 0 $LesAcc] Espionne "[join $LesAcc "\n"]" return "" } proc TestonsSql {{Action ""}} { global TestonsSql if {[regexp -nocase "^(Y|O|1)" $Action]} { set TestonsSql 1 } if {[regexp -nocase "^(N|0)" $Action]} { set TestonsSql 0 } if { ! [info exists TestonsSql]} { set TestonsSql [catch {package require Pgtcl} Message] } if {$TestonsSql} { Espionne "Attention TestonsSql est a 1. I got the message \n$Message" } return $TestonsSql } proc Testsipathsontlesmemepourunememeligne {} { set LesLignes [NomLigne ListeDes Lignes] foreach Ligne $LesLignes { Espionne "" Espionne "ligne $Ligne" set Lesnombrepathway {} set TousLesNoms [NomLigne $Ligne Noms] set ListeDesNoms [split $TousLesNoms " "] foreach Nom $ListeDesNoms { set nombrepathway 0 set ListePathPourUnNom {} set Lesnombrepathway {} Espionne "$Nom" set LesPathway [ExtraitInfo $Nom "Pathways"] if {$LesPathway==""} { lappend Lesnombrepathway "" Espionne "nopathway" continue } Espionne "$LesPathway" set ListePathPourUnNom [split $LesPathway ","] foreach Pathway $ListePathPourUnNom { incr nombrepathway } } lappend Lesnombrepathway $nombrepathway Espionne "nombrepathway $nombrepathway" set Lesnombrepathway [ListeSansDoublon $Lesnombrepathway] set longLesnombrepathway [llength $Lesnombrepathway] Espionne "longLesnombrepathway $longLesnombrepathway" if {$longLesnombrepathway>1} { Espionne "Attention" #FaireLire "$Ligne pas meme pathway" } } } proc Testtoupper {{CC XJ4.1_i1}} { set CC [string toupper $CC] return $CC } proc TetesIdentiquesOuNon {} { set version "na32" set FichierMG430A "[RepertoireAffyAnnot $version]/MG430A_2.0/Mouse430A_2.$version.annot.csv" set FichierMG430 "[RepertoireAffyAnnot $version]/MG430_2.0/Mouse430_2.$version.annot.csv" set FichierMGU74A "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Av2.$version.annot.csv" set FichierMGU74B "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Bv2.$version.annot.csv" set FichierMGU74C "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Cv2.$version.annot.csv" set FichierRGU34A "[RepertoireAffyAnnot $version]/RG-U34/RG_U34A.$version.annot.csv" set FichierHGU1332 "[RepertoireAffyAnnot $version]/HG-U133+2/HG-U133_Plus_2.$version.annot.csv" set FichierHGU133A "[RepertoireAffyAnnot $version]/HG-U133/HG-U133A.$version.annot.csv" set FichierHGU133B "[RepertoireAffyAnnot $version]/HG-U133/HG-U133B.$version.annot.csv" set FichierZebra "[RepertoireAffyAnnot $version]/Zebrafish/Zebrafish.$version.annot.csv" set FichierDroso "[RepertoireAffyAnnot $version]/Drosophila/DrosGenome1.$version.annot.csv" set FichierChick "[RepertoireAffyAnnot $version]/Chicken/Chicken.$version.annot.csv" set FichierXenop "[RepertoireAffyAnnot $version]/Xenopuslaevis/Xenopus_laevis.$version.annot.csv" set LesFichiers [list $FichierMG430A $FichierMG430 $FichierMGU74A $FichierMGU74B $FichierMGU74C $FichierRGU34A $FichierHGU1332 $FichierHGU133A $FichierHGU133B $FichierZebra $FichierDroso $FichierChick $FichierXenop] foreach File $LesFichiers { Espionne "File $File" set Tete [TabulonsSansQuote $File "," ";" " " "GetHeaders"] #set LesLignes [TabulonsSansQuote $File "," ";" " " "GetListOfHeaders"] Espionne "Tete $Tete" lappend LesTetes $Tete } set LesTetes [ListeSansDoublon $LesTetes] set long [llength $LesTetes] if {$long==1} { Espionne "tous les fichiers ont les memes tetes" } else { Espionne "tous les fichiers n ont pas les memes tetes" } } proc Texe {Largs} { global LNOrdali LSOrdali Sequences lassign $Largs pkpfam fpfam Lpdb2id unset -nocomplain Sequences LNOrdali LSOrdali set pfamid [lindex [split [file tail $fpfam] .] 0] puts "$pfamid" # lit le fichier DecortiqueUnTFA $fpfam LNOrdali Sequences set Lout [BCM_Pdb2Pfam $pfamid $Lpdb2id] update # finish EcritLeTfa "${fpfam}_smp" $LNOrdali $LSOrdali puts "" return $Lout } proc Text2HTML {aT} { upvar $aT tbl set txt $tbl(Text) if {[string index $txt 0] eq "\{"} { set txt [string range $txt 1 end] } if {[string index $txt end] eq "\}"} { set txt [string range $txt 0 end-1] } set txt [string map {"\n" "
    "} $txt] if {$txt ne "" || $txt ne "{}"} { Html_Append $txt } Html_BR return } proc Text2Text {aT} { upvar $aT tbl lappend ::TextOut "$tbl(Text)" return } proc TextFilesFusion {args} { puts ">>> Fusion des fichiers : output=fusionnedFile" set compteur 0 set tout 0 set output [open "fusionnedFile" "w"] foreach fileName $args { set input [open "$fileName" "r"] while {[gets $input line]!=-1} { if {$line=="" || $line=="\n" || ([string index $line 0]=="#")} {continue} incr compteur incr tout set infos [split $line ";"] puts $output "$tout;[lindex $infos 1];[lindex $infos 2];[lindex $infos 3];[lindex $infos 4]" } close $input set nombre($fileName) $compteur set compteur 0 } close $output puts " -->OK" puts " -->Pour info : " set total 0 foreach {cle val} [array get nombre] { puts " - $cle : contient $val lignes" set total [expr $total+$val] } puts "Total : $total" } proc TextOnCanva {Value Index K DecalX DecalY} { global CouleurTag regsub -all {\{|\}} $Value "" Value if {$Value == ""} { return "0 0"} Wup "Voir PrintOrdali ... pour compatibilite" set TailleFonte 10 set OffsetLettre [font measure [list CourierNew $TailleFonte] Z] set HauteurLettre 14 regsub {\.} $Index " " XY scan $XY "%d %d" Y X set x [expr ( $X + 2 + $DecalX)*$OffsetLettre ] set y [expr ( $Y + 1 + $DecalY)*$HauteurLettre] set FG [CouleurOrdali fg] set BG [CouleurOrdali bg] set fx [expr $x+[font measure [list CourierNew $TailleFonte] $Value]] set fy [expr $y+$HauteurLettre] if {$FG=="NoColor"} { set FG "black" } if {$BG!="NoColor"} { $K create rectangle $x $y $fx $fy -fill $BG -outline $BG } $K create text $x $y -text "$Value" -anchor nw -fill $FG -font [list CourierNew $TailleFonte] set PosX [expr round($fx/$OffsetLettre)] set PosY [expr round($fy/$HauteurLettre)] return "$PosX $PosY" } proc TextOnHTML {Value Index aTextOnHTML} { upvar $aTextOnHTML TextOnHTML global CouleurTag global CodeSpanOrdali global OldY global GaucheOrdali regsub -all {\{|\}} $Value "" Value regsub {\.} $Index " " XY scan $XY "%d %d" Y X if { ! [info exists OldY] || $Y!=$OldY} { append TextOnHTML "\n" set Gauche "" if {[info exists GaucheOrdali($Y)]} { set Gauche [set GaucheOrdali($Y)] } append TextOnHTML [BelleGauche $Gauche] } set OldY $Y set CodeSpan [set CodeSpanOrdali($CouleurTag)] append TextOnHTML "$Value" set PosY $Y set PosX [expr $X+[string length $Value]] return "$PosX $PosY" } proc TextToHTML {FichierText FichierHtml} { if {![file exists $FichierText]} {return ""} set NomFichier [file tail $FichierText] set TexteHtml [Html_DuTexteTelQuel $FichierText $NomFichier] Sauve $TexteHtml dans $FichierHtml } proc TextToHTMLPourTous {RepFichiersText RepFichiersHtml} { if {![file exists $RepFichiersText]} {return ""} if {![file exists $RepFichiersHtml]} {file mkdir "[RepertoireDuGenome]/$RepFichiersHtml"} foreach Fichier [glob -nocomplain "$RepFichiersText/*"] { set NomFichier [file tail $Fichier] if {[file exists "[RepertoireDuGenome]/$RepFichiersHtml/$NomFichier.html"]} {Espionne "$NomFichier already exists";continue} Espionne "$NomFichier en cours" set TexteHtml [Html_DuTexteTelQuel $Fichier $NomFichier] set Fichier_html "[RepertoireDuGenome]/$RepFichiersHtml/$NomFichier.html" Sauve $TexteHtml dans $Fichier_html } } proc TexteAscii {Texte} { regsub -all {\+} $Texte " " Texte regsub -all "%0D" $Texte "%0A" Texte while {[regexp -nocase {%[0-9a-h]{2}} $Texte Hexa]} { set Car [HexaToAscii $Hexa] if {$Car=="&"} { set Car "\\&" } regsub -all $Hexa $Texte $Car Texte } regsub -all "\<" $Texte "<" Texte regsub -all "\>" $Texte ">" Texte return $Texte } proc TexteEntreChevrons {Texte} { set i [string first "<" $Texte] if {$i<0} { return "" } set Bon "" set N 1 foreach C [split [string range $Texte [incr i] end] ""] { if {$C==">" && $N==1} { return $Bon } append Bon $C if {$C=="<"} { incr N } if {$C==">"} { incr N -1} } return $Bon } proc TexteExonicMap {FichierBlast FichierTFA LesRegions {AlertId 0.95} {NbIteration No}} { set TailleFragment 100000 set RepTFA [file dirname $FichierTFA] set NameRepTFA [file tail $RepTFA] set RepBlast [file dirname $FichierBlast] set NameFileTFA [file tail $FichierTFA] set NameFileTFA "$NameRepTFA/$NameFileTFA" set TypeDeBlast [AskBlast $FichierBlast TypeDeBlast] if {$TypeDeBlast == ""} {return} set Entete [EnteteDuFichierTFA $FichierTFA] set LeTexte {} lappend LeTexte "Box: $Entete" lappend LeTexte "File: $NameFileTFA" if {$TypeDeBlast == "BLASTN"} { lappend LeTexte "Type: DNA" } else { lappend LeTexte "Type: PROTEIN" } lappend LeTexte "LengthBox: [AskBlast $FichierBlast Taille]" if {$NbIteration != "No"} { lappend LeTexte "NbCycles: $NbIteration" } set LesAccessEtLeurSens {} foreach UneRegion [lsort -integer -index end -decreasing $LesRegions] { set LeBId [lindex $UneRegion 4] set Chrom [lindex $LeBId 0] set Access [lindex $LeBId 1] set NdeN [lindex $LeBId 2] set Sens [lindex $UneRegion 6] set Orient [lindex $UneRegion 5] set Score [lindex $UneRegion end] if {![info exists TabTmp($Access,$Sens,LesRegions)]} { lappend LesAccessEtLeurSens [list $Chrom $Access $Sens $NdeN] set TabTmp($Access,$Sens,LesRegions) {} set TabTmp($Access,$Sens,BorneMin) 1e200 set TabTmp($Access,$Sens,BorneMax) 0 set TabTmp($Access,$Sens,LesOrient) {} set TabTmp($Access,$Sens,Score) 0 set TabTmp($Access,$Sens,NbAli) 0 set TabTmp($Access,$Sens,NbAliTot) 0 set TabTmp($Access,$Sens,NbExon) 0 set TabTmp($Access,$Sens,NbAbsent) 0 set TabTmp($Access,$Sens,NbPolyLoc) 0 } lappend TabTmp($Access,$Sens,LesRegions) $UneRegion if {$Orient != ""} {lappend TabTmp($Access,$Sens,LesOrient) $Orient} if {[set TabTmp($Access,$Sens,Score)] < $Score} {set TabTmp($Access,$Sens,Score) $Score} set N [lindex $UneRegion 3] if {$N == 1 } {incr TabTmp($Access,$Sens,NbExon)} if {$N == 0 } {incr TabTmp($Access,$Sens,NbAbsent)} if {1 < $N} {incr TabTmp($Access,$Sens,NbPolyLoc)} if {$N != 1} {continue} incr TabTmp($Access,$Sens,NbAliTot) [lindex $UneRegion 10] incr TabTmp($Access,$Sens,NbAli) [lindex $UneRegion 9] set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] if {$DS < [set TabTmp($Access,$Sens,BorneMin)]} {set TabTmp($Access,$Sens,BorneMin) $DS} if {[set TabTmp($Access,$Sens,BorneMax)] < $FS} {set TabTmp($Access,$Sens,BorneMax) $FS} } if {1 < [llength $LesAccessEtLeurSens]} { lappend LeTexte "WARNING: polylocalised" } set i 0 foreach LAccessEtLeSens $LesAccessEtLeurSens { set Chrom [lindex $LAccessEtLeSens 0] set Access [lindex $LAccessEtLeSens 1] set Sens [lindex $LAccessEtLeSens 2] set NdeN [lindex $LAccessEtLeSens 3] set Score [set TabTmp($Access,$Sens,Score) ] set NbAli [set TabTmp($Access,$Sens,NbAli)] set NbAliTot [set TabTmp($Access,$Sens,NbAliTot)] set IdTot [expr $NbAli * 1.0 / $NbAliTot] set NbExon [set TabTmp($Access,$Sens,NbExon)] set NbAbsent [set TabTmp($Access,$Sens,NbAbsent)] set NbPolyLoc [set TabTmp($Access,$Sens,NbPolyLoc)] set BorneMin [set TabTmp($Access,$Sens,BorneMin)] set BorneMax [set TabTmp($Access,$Sens,BorneMax)] set LesOrient [lsort -unique [set TabTmp($Access,$Sens,LesOrient)]] if {$Sens == "+"} { set LesRegions [lsort -real -index 7 [set TabTmp($Access,$Sens,LesRegions)]] } else { set LesRegions [lsort -real -index 7 -decreasing [set TabTmp($Access,$Sens,LesRegions)]] } set LesRegions [lsort -integer -index 0 $LesRegions] set Fragments "" if {$NdeN != 0} { set FragmentMin [format "%${NdeN}.${NdeN}d" [expr round($BorneMin / $TailleFragment)]] set FragmentMax [format "%${NdeN}.${NdeN}d" [expr round($BorneMax / $TailleFragment)]] if {$Sens == "+"} { set Fragments "From $FragmentMin to $FragmentMax" } else { set Fragments "From $FragmentMax to $FragmentMin" } } if {$Sens == "+"} { set Bornes "From $BorneMin to $BorneMax" } else { set Bornes "From $BorneMax to $BorneMin" } incr i lappend LeTexte "" lappend LeTexte "RANK_SCORE: $i $Score" lappend LeTexte "Chromosome: $Chrom" lappend LeTexte "Contig: $Access" if {$Fragments != ""} { lappend LeTexte "ContigFragments: $Fragments" } lappend LeTexte "ContigLocalisation: $Bornes" lappend LeTexte "Orientation: [join $LesOrient " "]" lappend LeTexte "Sense: $Sens" lappend LeTexte "NbExonicAreas: $NbExon" lappend LeTexte "NbAbsentAreas: $NbAbsent" lappend LeTexte "NbPolyLocAreas: $NbPolyLoc" if {$IdTot < $AlertId} { lappend LeTexte "WARNING: MayBeWrongLoc ([expr round($IdTot * 100)] %)" } set nRepeat 0 set nExon 0 set nAbsent 0 foreach UneRegion $LesRegions { set N [lindex $UneRegion 3] if {$N == 1} {incr nExon ;set QuEstCeQueCEst "ExonArea" ;set n $nExon} if {$N < 1} {incr nAbsent;set QuEstCeQueCEst "AbsentArea" ;set n $nAbsent} if {1 < $N} {incr nRepeat;set QuEstCeQueCEst "PolyLocArea";set n $nRepeat} set DQ [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set FQ [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] set TailleArea [expr $FQ - $DQ + 1] if {$Sens == "+"} { set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] } else { set DS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] } if {$N != 0} { set Orient [lindex $UneRegion 5] set Sens [lindex $UneRegion 6] set nAli [lindex $UneRegion 9] set nAliTot [lindex $UneRegion 10] set nCont [lindex $UneRegion 11] set Id [expr $nAli * 100.0 / $nAliTot] lappend LeTexte [format "%-5d %-5d %-5d %12s %-3s %-9d %-9d %-11s %s %-5d %-5d %-5.1f %-5d" $DQ $FQ $TailleArea $QuEstCeQueCEst $n $DS $FS $Orient $Sens $nAli $nAliTot $Id $nCont] } else { lappend LeTexte [format "%-5d %-5d %-5d %12s %-3s" $DQ $FQ $TailleArea $QuEstCeQueCEst $n] } } } return [join $LeTexte "\n"] } proc TexteExonicMap_TabBlast {aTabBlast Nom FichierTFA FichierBlast LesRegions {AlertId 0.95} {NbIteration No}} { upvar $aTabBlast TabBlast set TailleFragment 100000 set RepTFA [file dirname $FichierTFA] set NameRepTFA [file tail $RepTFA] set RepBlast [file dirname $FichierBlast] set NameFileTFA [file tail $FichierTFA] set NameFileTFA "$NameRepTFA/$NameFileTFA" set TypeDeBlast [set TabBlast(TypeDeBlast)] if {![info exists TabBlast(TypeDeBlast)]} {return ""} set LeTexte {} lappend LeTexte "Box: $Nom" lappend LeTexte "File: $NameFileTFA" if {$TypeDeBlast == "BLASTN"} { lappend LeTexte "Type: DNA" } else { lappend LeTexte "Type: PROTEIN" } lappend LeTexte "LengthBox: [set TabBlast(Taille)]" PourcentagesDeMasking Repeat $Nom $RepTFA $RepBlast if {[info exists Repeat(Masking)] } { lappend LeTexte "Masking: [set Repeat(Masking)]" } if {$NbIteration != "No"} { lappend LeTexte "NbCycles: $NbIteration" } set LesAccessEtLeurSens {} foreach UneRegion [lsort -integer -index end -decreasing $LesRegions] { set LeBId [lindex $UneRegion 4] set Chrom [lindex $LeBId 0] set Access [lindex $LeBId 1] set NdeN [lindex $LeBId 2] set Sens [lindex $UneRegion 6] set Orient [lindex $UneRegion 5] set Score [lindex $UneRegion end] if {![info exists TabTmp($Access,$Sens,LesRegions)]} { lappend LesAccessEtLeurSens [list $Chrom $Access $Sens $NdeN] set TabTmp($Access,$Sens,LesRegions) {} set TabTmp($Access,$Sens,BorneMin) 1e200 set TabTmp($Access,$Sens,BorneMax) 0 set TabTmp($Access,$Sens,LesOrient) {} set TabTmp($Access,$Sens,Score) 0 set TabTmp($Access,$Sens,NbAli) 0 set TabTmp($Access,$Sens,NbAliTot) 0 set TabTmp($Access,$Sens,NbExon) 0 set TabTmp($Access,$Sens,NbAbsent) 0 set TabTmp($Access,$Sens,NbPolyLoc) 0 } lappend TabTmp($Access,$Sens,LesRegions) $UneRegion if {$Orient != ""} {lappend TabTmp($Access,$Sens,LesOrient) $Orient} if {[set TabTmp($Access,$Sens,Score)] < $Score} {set TabTmp($Access,$Sens,Score) $Score} set N [lindex $UneRegion 3] if {$N == 1 } {incr TabTmp($Access,$Sens,NbExon)} if {$N == 0 } {incr TabTmp($Access,$Sens,NbAbsent)} if {1 < $N} {incr TabTmp($Access,$Sens,NbPolyLoc)} if {$N != 1} {continue} incr TabTmp($Access,$Sens,NbAliTot) [lindex $UneRegion 10] incr TabTmp($Access,$Sens,NbAli) [lindex $UneRegion 9] set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] if {$DS < [set TabTmp($Access,$Sens,BorneMin)]} {set TabTmp($Access,$Sens,BorneMin) $DS} if {[set TabTmp($Access,$Sens,BorneMax)] < $FS} {set TabTmp($Access,$Sens,BorneMax) $FS} } if {1 < [llength $LesAccessEtLeurSens]} { lappend LeTexte "WARNING: polylocalised" } set i 0 foreach LAccessEtLeSens $LesAccessEtLeurSens { set Chrom [lindex $LAccessEtLeSens 0] set Access [lindex $LAccessEtLeSens 1] set Sens [lindex $LAccessEtLeSens 2] set NdeN [lindex $LAccessEtLeSens 3] set Score [set TabTmp($Access,$Sens,Score) ] set NbAli [set TabTmp($Access,$Sens,NbAli)] set NbAliTot [set TabTmp($Access,$Sens,NbAliTot)] set IdTot [expr $NbAli * 1.0 / $NbAliTot] set NbExon [set TabTmp($Access,$Sens,NbExon)] set NbAbsent [set TabTmp($Access,$Sens,NbAbsent)] set NbPolyLoc [set TabTmp($Access,$Sens,NbPolyLoc)] set BorneMin [set TabTmp($Access,$Sens,BorneMin)] set BorneMax [set TabTmp($Access,$Sens,BorneMax)] set LesOrient [lsort -unique [set TabTmp($Access,$Sens,LesOrient)]] if {$Sens == "+"} { set LesRegions [lsort -real -index 7 [set TabTmp($Access,$Sens,LesRegions)]] } else { set LesRegions [lsort -real -index 7 -decreasing [set TabTmp($Access,$Sens,LesRegions)]] } set LesRegions [lsort -integer -index 0 $LesRegions] set Fragments "" if {$NdeN != 0} { set FragmentMin [format "%${NdeN}.${NdeN}d" [expr round($BorneMin / $TailleFragment)]] set FragmentMax [format "%${NdeN}.${NdeN}d" [expr round($BorneMax / $TailleFragment)]] if {$Sens == "+"} { set Fragments "From $FragmentMin to $FragmentMax" } else { set Fragments "From $FragmentMax to $FragmentMin" } } if {$Sens == "+"} { set Bornes "From $BorneMin to $BorneMax" } else { set Bornes "From $BorneMax to $BorneMin" } incr i lappend LeTexte "" lappend LeTexte "RANK_SCORE: $i $Score" lappend LeTexte "Chromosome: $Chrom" lappend LeTexte "Contig: $Access" if {$Fragments != ""} { lappend LeTexte "ContigFragments: $Fragments" } lappend LeTexte "ContigLocalisation: $Bornes" lappend LeTexte "Orientation: [join $LesOrient " "]" lappend LeTexte "Sense: $Sens" lappend LeTexte "NbExonicAreas: $NbExon" lappend LeTexte "NbAbsentAreas: $NbAbsent" lappend LeTexte "NbPolyLocAreas: $NbPolyLoc" if {$IdTot < $AlertId} { lappend LeTexte "WARNING: MayBeWrongLoc ([expr round($IdTot * 100)] %)" } set nRepeat 0 set nExon 0 set nAbsent 0 foreach UneRegion $LesRegions { set N [lindex $UneRegion 3] if {$N == 1} {incr nExon ;set QuEstCeQueCEst "ExonArea" ;set n $nExon} if {$N < 1} {incr nAbsent;set QuEstCeQueCEst "AbsentArea" ;set n $nAbsent} if {1 < $N} {incr nRepeat;set QuEstCeQueCEst "PolyLocArea";set n $nRepeat} set DQ [Mini [lindex $UneRegion 0] [lindex $UneRegion 1]] set FQ [Maxi [lindex $UneRegion 0] [lindex $UneRegion 1]] set TailleArea [expr $FQ - $DQ + 1] if {$Sens == "+"} { set DS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] } else { set DS [Maxi [lindex $UneRegion 7] [lindex $UneRegion 8]] set FS [Mini [lindex $UneRegion 7] [lindex $UneRegion 8]] } if {$N != 0} { set Orient [lindex $UneRegion 5] set Sens [lindex $UneRegion 6] set nAli [lindex $UneRegion 9] set nAliTot [lindex $UneRegion 10] set nCont [lindex $UneRegion 11] set Id [expr $nAli * 100.0 / $nAliTot] lappend LeTexte [format "%-5d %-5d %-5d %12s %-3s %-9d %-9d %-11s %s %-5d %-5d %-5.1f %-5d" $DQ $FQ $TailleArea $QuEstCeQueCEst $n $DS $FS $Orient $Sens $nAli $nAliTot $Id $nCont] } else { lappend LeTexte [format "%-5d %-5d %-5d %12s %-3s" $DQ $FQ $TailleArea $QuEstCeQueCEst $n] } } } return [join $LeTexte "\n"] } proc TexteHDACroises {V Fam Orga {Quoi ""}} { if {$Quoi=="Devoile"} { return "$Fam $Orga [join $V " "]" } set T [lindex $V 0] set P [lindex $V 1] set J [lindex $V 2] if {1 || [CouleurHDACroises $V]=="O"} { return "$P" } return " " } proc TexteOMO {NomVoulu {Format Court}} { global RepertoireDuGenome global TexteOMO if { ! [YaPABdans $NomVoulu]} { return "" } if { ! [info exists TexteOMO]} { set FichierOMO "$RepertoireDuGenome/fiches/organismesayantmemeoperon" if { ! [ file exists $FichierOMO]} { set TexteOMO Bidon return } foreach Ligne [LesLignesDuFichier $FichierOMO] { set LesMots [split $Ligne " "] set Nom [lindex $LesMots 0] set Voisin [lindex $LesMots 1] set iOMO [string length "$Nom $Voisin xxxx"] set sOMO [string trim [string range $Ligne $iOMO end]] set Texte "" for {set i 0} {$i < [string length $sOMO]} {incr i 5} { set C [string index $sOMO $i] if { $C != " " } { append Texte $C } else { append Texte "." } } set TexteOMO($Nom,Court) $Texte set TexteOMO($Nom,Long) $Ligne set TexteOMO($Nom,Avant) $Voisin set TexteOMO($Voisin,Apres) $Nom } } if { ! [info exists TexteOMO($NomVoulu,$Format)]} { return ""} return [set TexteOMO($NomVoulu,$Format)] } proc TextePDB {aPDB {Quoi ""} {JoinCar " "} {OnTheWeb ""}} { if {$Quoi==""} { set Quoi "Ref" } set OnTheWeb [string equal -nocase $OnTheWeb "OnTheWeb"] regsub -nocase "^PDB:" $aPDB "" aPDB #rR pour avoir la sequence de SEQRES il faut donner la chaine SEQRES_B. #rR par defaut on prend la chaine A set Chain "A" if {[regexp "SEQRES" $Quoi]} { if {[regexp {SEQRES_([A-Za-z]+)} $Quoi Match ChaineVoulue]} { set Chain $ChaineVoulue } set Quoi "SEQRES" } if { ! [regexp "/" $aPDB]} { regsub -nocase {_[a-z]*} $aPDB "" aPDB set RepLocalPDB "[RepertoireDuGenome]/localpdb" set FichierLocalPDB "$RepLocalPDB/pdb[string tolower $aPDB].ent" if {[file exists $FichierLocalPDB]} { set TextePDB [ContenuDuFichier $FichierLocalPDB] } else { set SousRep [string range $aPDB 1 2] set FichierPDB "/catalog/pdb/compressed_files/$SousRep/pdb$aPDB.ent.gz" if {[file exists $FichierPDB]} { set TextePDB [exec zcat $FichierPDB] } else { if {! $OnTheWeb} { return "" } #lm ne passe plus par RecupereUnFichierSurWeb... #lm prend cas general #set LTextePDB [RecupereUnFichierSurWeb [string toupper $aPDB]] set pdbid [string toupper $aPDB] set url "http://www.rcsb.org/pdb/cgi/export.cgi/XXXX.pdb?format=PDB&pdbId=XXXX&compression=None" regsub -all "XXXX" $url $aPDB url set TextePDB [HttpCopy $url] } } } else { set TextePDB [ContenuDuFichier $aPDB] } if {[string equal -nocase "All" $Quoi]} { return $TextePDB } if {$TextePDB==""} { return "" } #lm ultime test pour savoir si on a bien un PDB #rR ................... supprime par rR 2016/09/14 if {0 && [string range $TextePDB 0 5] ne "HEADER"} { return "" } set JusquASeqres 0 set JusquAAtom 1 if {$Quoi=="Ref" && $JusquASeqres} { set iSEQRES [string first "\nSEQRES " $TextePDB] if {$iSEQRES<0} { set iSEQRES end } return [string range $TextePDB 0 $iSEQRES] } if {$Quoi=="Ref" && $JusquAAtom} { set iATOM [string first "\nATOM " $TextePDB] if {$iATOM<0} { set iATOM end } return [string range $TextePDB 0 $iATOM] } if {$Quoi!=""} { set Sortie {} foreach Ligne [split $TextePDB "\n"] { if { ! [regexp "^$Quoi" $Ligne]} { continue } if {$Quoi=="SEQRES"} { scan $Ligne "%s %s %s %s" K I C N if {$K!="SEQRES"} { break } if {$Chain!=$C} { continue } regsub "$K *$I *$C *$N" $Ligne "" CodesTroisLettres lappend Sortie $CodesTroisLettres continue } set Ligne [string range $Ligne 0 69] regsub "$Quoi" $Ligne "" Ligne set Ligne [string trim $Ligne] lappend Sortie $Ligne if {$Quoi!="ATOM" && [regexp "^ATOM" $Ligne]} { break } } if {$Quoi=="SEQRES"} { set Sortie [join $Sortie " "] regsub -all { +} $Sortie " " Sortie return [string trim $Sortie] } return [join $Sortie $JoinCar] } return $TextePDB } proc TextePourRosace {Action K {ListeOuFichier ""}} { global ParametresDuBoard set CentreX [set ParametresDuBoard($K,CentreX)] set CentreY [set ParametresDuBoard($K,CentreY)] if {$Action == "Add"} { set Liste $ListeOuFichier if {$Liste == {}} { set Texte [Entre] if {$Texte == ""} { return } $K create text $CentreX $CentreY -text "$Texte" -font {Courier 10} -tags [list "Etiquette" $Texte] return $Texte } if {$Liste != {}} { set DefautX $CentreX set DefautY $CentreY foreach Ligne $Liste { set X [incr DefautX 10] set Y [incr DefautY 10] scan $Ligne "%s %s %s" Texte X Y $K create text $X $Y -text "$Texte" -font {Courier 10} -tags [list "Etiquette" $Texte] } } } if {$Action == "AddFromList"} { if {$ListeOuFichier == ""} { set Fichier [ButineArborescence] if {$Fichier == ""} { return "" } foreach Ligne [LesLignesDuFichier $Fichier] { set Texte "Bidon" scan $Ligne "%s" Texte lappend Liste $Texte } } else { set Liste $ListeOuFichier } return [TextePourRosace "Add" $K $Liste] } } proc TexteTFAsDesMeilleursCopainsDuBlast {Nom RepBlast GrosFichierTFAs {Expect 0.001}} { global RepertoireDuGenome if { ! [regexp "/" $RepBlast]} { set RepBlast "$RepertoireDuGenome/$RepBlast" } set FichierBlast "$RepBlast/$Nom" if {$FichierBlast==""} { return "" } set n [DecortiqueBlast $FichierBlast $Expect "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN] if {$n==0} { set n [DecortiqueBlast $FichierBlast 0.001 5 Query lBanqueId lAccess lDE lProfil lPN] if {$n==0} { return "" } } Espionne $lBanqueId set Texte [ExtraitLesSequencesDuTFAs $GrosFichierTFAs $lBanqueId] return $Texte } proc TexteTfaFromTexteTfaWithoutNumbers {TexteTFA} { set Seq [QueLaSequenceDuTexteTFA $TexteTFA] set Ent [EnteteDuTexteTFA $TexteTFA] set NouveauTexteTFA [SequenceFormatTFA $Seq $Ent] return $NouveauTexteTFA } proc TexteUT {TexteOuFichier} { set Texte $TexteOuFichier if {[regexp "/" $TexteOuFichier]} { set Texte [ContenuDuFichier $TexteOuFichier] } set New "" foreach Mot [LesMotsDuTexte $Texte] { set X [UT $Mot] append New $X } return $New } proc Texte_WordML {Texte} { return "$Texte" } proc TfaATCGbackground {} { set FichierTfa [open "/genomics/link/STAF/fiches/Bidir/1000/SequencesTotales.bidir" "r"] set A 0 set T 0 set C 0 set G 0 set I 0 set Chars 0 Espionne "TfaATCGbackground : Start" while { [gets $FichierTfa Sequence] > 0 } { if { [string index $Sequence 0] != ">" } { set CharArray [split $Sequence ""] foreach Char $CharArray { if { $Char == "A" } { incr A incr Chars } if { $Char == "T" } { incr T incr Chars } if { $Char == "C" } { incr C incr Chars } if { $Char == "G" } { incr G incr Chars } } } } set FA [expr double($A)/$Chars] set FT [expr double($T)/$Chars] set FC [expr double($C)/$Chars] set FG [expr double($G)/$Chars] Espionne "TfaATCGbackground : A=$FA ($A)" Espionne "TfaATCGbackground : T=$FT ($T)" Espionne "TfaATCGbackground : C=$FC ($C)" Espionne "TfaATCGbackground : G=$FG ($G)" Espionne "TfaATCGbackground : $Chars chars in $I sequences" Espionne "TfaATCGbackground : End" } proc TfaAvecOrgaEnAccess {Fichier {Out ""}} { foreach Ligne [LesLignesDuFichier $Fichier] { if { [regexp {>.*\[(.*)\]} $Ligne Match Orga] } { regsub -all " " $Orga "_" Orga lappend LeNew ">$Orga" continue } lappend LeNew $Ligne } if {$Out==""} { return [join $LeNew "\n"] } return [SauveLesLignes $LeNew dans $Out] } proc TfaDeLaBanqueBlast {Banque Access} { set Banque [string tolower $Banque] set TfaDeLaBanqueBlast "" catch { set TfaDeLaBanqueBlast [exec fastacmd -d $Banque -s $Access 2> /dev/null] } Message #rR Rajout du 2014/11/10 car il y a PDB: if {$TfaDeLaBanqueBlast!=""} { return $TfaDeLaBanqueBlast } #Warne $Message if { ! [regexp {^[0-9]} $Access]} { return "" } catch { set TfaDeLaBanqueBlast [exec fastacmd -d $Banque -s "PDB:$Access" 2> /dev/null] } Message return $TfaDeLaBanqueBlast } proc TfaPourPipe {} { set FichierTfaPourPipe [RepertoireDuGenome]/PourPipe.tfa foreach Nom [ListeDesPABs] { set FichierTfa "[GscopeFile $Nom prottfa]" if {[FileAbsent $FichierTfa]} {continue} Espionne $FichierTfa AppendAuFichier $FichierTfaPourPipe [ContenuDuFichier $FichierTfa] } } proc TfaPourPipeVideRetrouve {} { set FichierTfaPourPipe [RepertoireDuGenome]/PourPipeVideRetrouve.tfa foreach F [glob -nocomplain "[RepertoireDuGenome]/protemblVide/*"] { set Queue [file tail $F] lappend LesVidesRetrouves $Queue } EspionneL $LesVidesRetrouves foreach VideRetrouve $LesVidesRetrouves { set FichierTfa [GscopeFile $VideRetrouve "prottfa"] if {[FileAbsent $FichierTfa]} {continue} Espionne $FichierTfa AppendAuFichier $FichierTfaPourPipe [ContenuDuFichier $FichierTfa] } } proc TfaTmpFromGCG {FiOl} { set LesLignes [LesLignesDuFichier $FiOl] set Entete [lindex $LesLignes 1] set TFA [SequenceFormatTFA_l [lrange $LesLignes 2 end] $Entete "gcg"] return [Sauve $TFA dans "[TmpFile].tfa"] } proc Tgbk {FichierGBK} { set LesInfosGenBank [DecortiqueGenBank OS OC SeqADN $FichierGBK] Espionne [FromInfoOfGenBankToEMBL $LesInfosGenBank ] } proc Tgbt {} { set LesInfosGBTags [DecortiqueGBTags OS OC AC gb] Espionne [FromInfoOfGenBankToEMBL $LesInfosGBTags nuc] exit } proc TheTrueMacsimsFile {Nom {Preference ""}} { if {[regexp "/" $Nom]} { if {[file exists $Nom]} { return $Nom } if {[file exists $Nom.xml]} { return $Nom.xml } if {[file exists $Nom.xml.gz]} { return $Nom.xml.gz } if {[file exists $Nom.gz]} { return $Nom.gz } } if { ! [EstUnPAB $Nom]} { return $Nom } foreach Dir [list "[RepertoireDuGenome]/macsimXml" "[RepertoireDuGenome]/macsims"] { if {[file exists $Dir/$Nom]} { return $Dir/$Nom } if {[file exists $Dir/$Nom.xml]} { return $Dir/$Nom.xml } if {[file exists $Dir/$Nom.xml.gz]} { return $Dir/$Nom.xml.gz } if {[file exists $Dir/$Nom.gz]} { return $Dir/$Nom.gz } } return $Nom } proc ThrBal {} { global dbR AlATables LesDefsAlA package require sqlite3 file delete res.sql set dbR [FabriqueDeTables $AlATables "" res.sql] LesDefauts #set Lf [LesFichiersDeBalibase] set Lf /home/moumou/Agents/BB11001.xml set Ljobs {} set iJob 0 foreach f $Lf { foreach len {5 7 11 13 15 17} { lappend Ljobs [list $iJob [list $f $len]] incr iJob } } puts "\nNbr of jobs : [llength $Ljobs]\n" #set args [lindex $Ljobs 0] #AnalyseFichierBalibase {*}$args #exit Thr_Submit -joblist $Ljobs -proccreate SetupAnaBali -procexe AnalyseFichierBalibase -procresults ResAnaBalAgents -nthreads 40 #tpoolagents $Ljobs $dbR close exit } proc ThrPfam {} { global db # clean #file delete -force {*}[glob /genomics/link/Pfam/PF*_smp] set db root sqlite3 $db bench.sql # Nettoyage Pfam si besoin est set Lf [glob -nocomplain "/genomics/link/Pfam/*_smp"] if {$Lf != {} } { file delete -force {*}$Lf } puts "inits and cleaning done ..." # define jobs 2 do $db eval {begin transaction} set Lpfamid [lsort -unique -dictionary [$db eval {select pfamid from pdbmap}]] set Ljobs [list] foreach pf $Lpfamid { set pk_pfam [$db eval {select pk_pfam from pfam where pfamid=$pf}] set Lpdb2id [$db eval {select pk_pdbmap,id from pdbmap where pfamid=$pf}] set fpfam [glob [file join /genomics/link/Pfam "${pf}*"]] set Largs [list $pk_pfam $fpfam $Lpdb2id] lappend Ljobs [list $pf $Largs] } $db eval {commit} Thr_Submit -joblist $Ljobs -proccreate Tcree -procexe Texe -procresults Tresults -nthreads 100 $db close exit } proc ThrSco {} { global db package require Thread set db root sqlite3 $db bench.sql #set Ljobs [BCM_CreateJobs2Do_Tests PF01239] set Ljobs [BCM_CreateJobs2Do_Tests] Thr_Submit -joblist $Ljobs -proccreate Tcree -procexe ScoreExe -procresults ScoreResults -nthreads 22 $db close exit } proc Thr_CreateJobs2Do {} { global DThr dres # - liste jobs2do set Lval [set DThr(JobList)] if {$DThr(Limit) == -1} { set DThr(Limit) [llength $Lval] } set Lval [lrange $Lval 0 $DThr(Limit)-1] puts "Nbr of jobs to do : [llength $Lval]" $dres eval {begin transaction} foreach e $Lval { lassign $e job par $dres eval {insert into tests values (NULL,$job,$par,'-1',0)} } $dres eval {create index idx_tests on tests (job,thread)} $dres eval {commit} return $Lval } proc Thr_CreeThread {} { global TDT DThr set scr [info body $DThr(ProcCreate)] set body [info body MyPuts] set CreateIt " global MyLog VueEditee set MyLog {} set VueEditee 0 proc MyPuts {args} {$body} #package require profiler #::profiler::init $scr Thr_Setup set cmdIn \[info commands\] set VariablesAuDepart \[info globals\] rename puts oldputs rename MyPuts puts after 1000 " set Id [thread::create] set retour $Id set TDT($Id) $Id trace add variable TDT($Id) write Thr_RecupResults thread::preserve $Id thread::configure $Id -unwindonerror 1 -eventmark 1 set done "" set ret [thread::send $Id $CreateIt] #vwait done puts "done $done $ret" puts "thread $Id created ([llength [thread::names]]) ...\n" return $retour } proc Thr_DonneUnJob {lId} { global CestFini TDT dres db DThr set pkmin [$dres eval {select min(pk_tests) from tests where thread='-1'}] if {! [string is integer -strict $pkmin]} { puts "\nAll done !\nReleasing threads ...\n" flush stdout #thread::send $lId {thread::release} thread::release $lId if {[llength [thread::names]] == 1} { set CestFini 1 } return } set params [$dres eval {select job,args from tests where pk_tests=$pkmin}] lassign $params job Largs set TDT($lId,Data) [list $job $Largs] $dres eval {update tests set thread=$lId where pk_tests=$pkmin} update idletasks #parray TDT #puts "after info [after info]" #flush stdout update idletasks after 1000 thread::send -async $lId [list ::Thr_ThreadExe $DThr(ProcExe) $job $Largs] TDT($lId) return } proc Thr_DonneUnJobNoThr {} { global CestFini TDT dres db DThr set pkmin [$dres eval {select min(pk_tests) from tests where thread='-1'}] if {! [string is integer -strict $pkmin]} { puts "\nAll done !\nReleasing threads ...\n" flush stdout return 0 } set params [$dres eval {select pk_tests,job,args from tests where pk_tests=$pkmin}] lassign $params pktest job Largs $dres eval {update tests set thread='1' where pk_tests=$pkmin} set TDT(job,Data) [list $job $Largs] return [list $job $Largs] } proc Thr_RecupResults {a b op} { global TDT dres DThr update idletasks after 1000 set tid $b set pkt [$dres eval {select pk_tests from tests where thread=$tid}] set Lres [set TDT($b)] #set Larg [set TDT($tid,Data)] # if thread is in error if {[string range $Lres 0 4] ne "tid0x" || ! [string is list -strict $Lres]} { # on est en train de traiter une erreur !! puts "==> $b : $Lres\n$::errorInfo" flush stdout after 1000 trace remove variable TDT($tid) write Thr_RecupResults update idletasks if {[thread::exists $tid]} { set scr " global MyLog rename ::puts ::MyPuts rename ::oldputs ::puts puts \[join \$MyLog \n\] flush stdout " thread::send $tid $scr catch {thread::release $tid} } array unset TDT "${tid}*" # met le job du thread à -1 $dres eval {update tests set res=-1,thread=0 where pk_tests=$pkt} set Larg "prout" puts "Leave on error\n$pkt $Larg [llength [thread::names]]" set b [Thr_CreeThread] Thr_DonneUnJob $b return } lassign $Lres Id job Lval if {$b ne $Id} { puts "\nProblem\n$b ne $Id !" flush stdout set b $Id } # Treat result set LErr [$DThr(ProcResults) $pkt $job $Lval] set ires 1 if {$LErr != {} } { puts "\nProblem $b !\npkt $pkt\nLval\n[join $Lval \n]Error : [join $LErr \n]\n" set ires -1 } $dres eval {update tests set res=$ires,thread='0' where pk_tests=$pkt} incr DThr(nDone) if {! ($DThr(nDone) % 1000)} { puts "... $DThr(nDone) done ([llength [thread::names]]) [DonneDateEtHeure]" flush stdout } set scr { global MyLog #rename ::puts ::MyPuts #rename ::oldputs ::puts set out "\nLog [thread::id]\n" foreach l $::MyLog { append out "$l\n" } puts "$out" flush stdout set MyLog {} rename ::puts ::oldputs rename ::MyPuts ::puts } #thread::send $b $scr Thr_DonneUnJob $b return } proc Thr_Setup {} { global DThr set DThr(Threaded) 1 set DThr(nThreads) 20 set DThr(Limit) -1 set DThr(nDone) 0 set DThr(TableTests) " - tests : tests a faire { . pk_tests P . job V32 . args T methodes scoring . thread V32 . res I -1 error, 0 pas fait, 1 ok } " return } proc Thr_Submit {args} { global DThr dres package require Thread Thr_Setup Thr_VerifArgs {*}$args puts "[DonneDateEtHeure]" set DThr(TMaster) [thread::id] puts "\nThread Master : $DThr(TMaster)\n" set CestFini 0 file delete -force dres.sql #set dres [FabriqueDeTables $DThr(TableTests) memory] set dres [FabriqueDeTables $DThr(TableTests) dres.sql] # creation des jobs Thr_CreateJobs2Do #CorrectifDres # Creation des threads et preserved set listeID [list] thread::errorproc Thr_ThreadError for {set i 1} {$i<$DThr(nThreads)} {incr i} { set Id [Thr_CreeThread] lappend ListeThreadID $Id } update idletasks puts "" puts "[DonneDateEtHeure]" puts "Start working ...\n" foreach Id $ListeThreadID { Thr_DonneUnJob $Id } # lance l'event loop du master vwait CestFini foreach a [array names TDT "tid*"] { if {[regexp {,} $a]} {continue} puts "trace $a [join [trace info variable $a] \n]" } # Stat glob on jobs puts "\n" puts "====================================" puts "Jobs ...... : [$dres eval {select count(pk_tests) from tests}]" puts "Successfull : [$dres eval {select count(pk_tests) from tests where res = 1}]" puts "Failed .... : [$dres eval {select count(pk_tests) from tests where res = -1}]" puts "" $dres backup dres_bak.sql $dres close puts "[DonneDateEtHeure]" return } proc Thr_SubmitNoThr {args} { global DThr dres Thr_Setup Thr_VerifArgs {*}$args set DThr(Threaded) 0 puts "[DonneDateEtHeure]" file delete -force dres.sql set dres [FabriqueDeTables $DThr(TableTests) dres memory] # creation des jobs Thr_CreateJobs2Do #CorrectifDres set ::DebVerif 1 while {[set Ljar [Thr_DonneUnJobNoThr]] != 0} { lassign $Ljar job Largs set pkt [$dres eval {select pk_tests from tests where thread='1'}] puts "\n$job - $pkt - $Largs" set Lval [$DThr(ProcExe) $Largs] set LErr [$DThr(ProcResults) $pkt $job $Lval] set ires 1 if {$LErr != {} } { puts "\nProblem !\npkt $pkt job $job\nLval\n[join $Lval \n]\nErreur : [join $LErr \n]\n" set ires -1 } $dres eval {update tests set res=$ires,thread='0' where pk_tests=$pkt} incr DThr(nDone) if {! ($DThr(nDone) % 1000)} { puts "... $DThr(nDone) done ([llength [thread::names]]) [DonneDateEtHeure]" flush stdout } } # Stat glob on jobs puts "\n" puts "====================================" puts "Jobs ...... : [$dres eval {select count(pk_tests) from tests}]" puts "Successfull : [$dres eval {select count(pk_tests) from tests where res = 1}]" puts "Failed .... : [$dres eval {select count(pk_tests) from tests where res = -1}]" puts "" $dres backup dres.sql $dres close puts "[DonneDateEtHeure]" return } proc Thr_ThreadError {tid stack} { global TDT dres DThr if {$tid eq $DThr(TMaster)} { puts "\nMASTER Error $tid\n$stack\n" if {[info exists ::errorInfo]} { puts "$::errorInfo" } flush stdout return } set pkt [$dres eval {select pk_tests from tests where thread=$tid}] set Larg [set TDT($tid,Data)] puts "\nError in thread $tid\npktest $pkt, args $Larg\n$stack" trace remove variable TDT($tid) write Thr_RecupResults after 100 if {[thread::exists $tid]} { puts "... deleting thread $tid" set scr " global MyLog rename ::puts ::toto rename ::oldputs ::puts puts \[join \$::MyLog \n\] flush stdout thread::release $tid " thread::send $tid $scr } array unset TDT "${tid}*" # met le job du thread à -1 $dres eval {update tests set res=-1,thread=0 where pk_tests=$pkt} if {[llength [thread::names]] < $DThr(nThreads)} { set Id [Thr_CreeThread] after 1000 update idletasks Thr_DonneUnJob $Id } return } proc Thr_ThreadExe {scr job Largs} { if {$::DThr(Threaded)} { set tid [thread::id] } else { set tid "tid0xturlulu" } #::profiler::reset set Lout [$scr $Largs] #AfficheProfileResults set LRT [list $tid $job $Lout] return $LRT } proc Thr_Usage {} { puts "Arguments :" puts " -joblist " puts " -proccreate " puts " -procexe " puts " -procresults " puts "\nOpetional :" puts " -nthreads " puts " -limit " puts "" return } proc Thr_VerifArgs {args} { global DThr if {[llength $args] < 8} { Thr_Usage exit } foreach {k v} $args { switch $k { "-joblist" { if {! [string is list -strict $v]} { puts "Error ! jobList is not a proper list !\n" exit } set DThr(JobList) $v } "-proccreate" { set DThr(ProcCreate) $v } "-procexe" { set DThr(ProcExe) $v } "-procresults" { set DThr(ProcResults) $v } "-nthreads" { if {! [string is integer -strict $v] || $v <= 0} { puts "Error ! Invalid number of threads !" exit } set DThr(nThreads) $v } "-limit" { if {! [string is integer -strict $v] || $v <= 0} { puts "Error ! Invalid limit !" exit } set DThr(Limit) $v } default { puts "unknown keyword $k\nIgnored" } } } if {$DThr(nThreads) > [llength $DThr(JobList)]} { set DThr(nThreads [llength $DThr(JobList)] } return } proc ThreadedBlastService {Ljobs} { package require Thread set program { set OrdaliDejaSource 1 set GscopeDir $env(GSCOPEDIR) source [file join $GscopeDir gscope_source.tcl] set OrdaliDir $env(ORDALIDIR) set OrdaliDejaSource 0 source [file join $OrdaliDir src ordali_source.tcl] package require Thread set VariablesAuDepart [info globals] InitLesDefauts LesDefauts OnlyTLog 1 LesDefauts Mode batch } # Create a pool of threads and initialize them with our code set poolid [tpool::create -maxworkers 20 -initcmd $program] # Create a number of job requests and # submit the jobs to the pool. # We keep an id for each job so we can # track when they complete set jids {} foreach Largs $Ljobs { set id [tpool::post -nowait $poolid [list BlastService {*}$Largs]] lappend jids $id set iq [lsearch $Largs "-query"] set query [lindex $Largs $iq+1] # is query a fasta ? if {[string first "\n" $query] != -1} { set query [lindex [split $query \n] 0] } set io [lsearch $Largs "-orga"] if {$io == -1} { set orga "none" } else { set orga [lindex $Largs $io+1] } lappend Tj(Lid) $id set Tj($id,Largs) $Largs set Tj($id,Input) [list $query $orga] set Tj($id,query) $query set Tj($id,Res) "" set Tj($id,nTimes) 0 } # Wait for the jobs we submitted to complete. # Collect the results and remove completed jobs # from the set of job ids so that we can # wait on the running jobs each time around the outer loop. set limit 0 set maxlim [expr {5*[llength $jids]}] set nDone 0 set nInit [llength $jids] while {[llength $jids] > 0 && $limit < $maxlim} { if {! ($nDone % 10)} { puts [format "%d done ..." $nDone] flush stdout } set done [tpool::wait $poolid $jids] # check finished jobs foreach id $done { set Tj($id,Res) [tpool::get $poolid $id] if {$Tj($id,Res) eq "ServerError" && $Tj($id,nTimes) < 5} { puts "----------------------" puts "Server Error !" puts "Args : $Tj($id,Largs)" puts "----------------------" flush stdout update idletasks incr Tj($id,nTimes) set newid [tpool::post -nowait $poolid [list BlastService {*}$Tj($id,Largs)]] lappend jids $newid foreach k [array names Tj "$id,*"] { lassign [split $k ,] tmp key set Tj($newid,$key) $Tj($k) } array unset Tj "$id,*" } set ndx [lsearch -exact $jids $id] if {$ndx != -1} { set jids [lreplace $jids $ndx $ndx] update } } incr limit set nDone [expr {$nInit - [llength $jids]}] } if {$limit >= $maxlim} { puts "hit limit"} # Clean up and report tpool::release $poolid return [array get Tj] } proc Thrombin {} { return "CTGGTGCCACGCGGTTCT" } proc ThrombinOld {} { return "CTGGTGCCGCGCGGCAGC" } proc TiltArbre {AId ref n ang} { global Abr set t [set Abr(Arbre,$AId)] set x [$t get $ref xcoord] set y [$t get $ref ycoord] set Ld [concat $ref $n [$t descendants $n]] foreach d $Ld { set xd [$t get $d xcoord] set yd [$t get $d ycoord] set Lxy [TourneBoite $x $y $xd $yd $ang] lassign $Lxy xE yE if {0 && $ref eq "root"} { puts [format "xi %6.3f xf %6.3f | yi %6.3f yf %6.3f | %s" $xd $xE $yd $yE $d] } $t set $d xcoord $xE $t set $d ycoord $yE foreach a {oldtheta theta LeftL LeftR RightR RightL LeftA RightA} { if {[$t keyexists $d $a]} { set Adep [$t get $d $a] set Afin [expr {$Adep+$ang}] set Afin [expr {$Afin >= [2Pi]?$Afin-[2Pi]:$Afin}] set Afin [expr {$Afin <= [2Pi]?$Afin+[2Pi]:$Afin}] set Afin [expr {$Afin < 0.?$Afin+[2Pi]:$Afin}] $t set $d $a $Afin } } } return } proc Timer {Programme {Tic 1000}} { if {[info exists $TicCounter] } { incr TicCounter } else { set TicCounter 1 } if { $Tic = $TicCounter } { Espionne "$Programme : $Tic traites" set Tic 0 } } proc TissueTypesGeneraux {TissueType {LesTissuesImportants ""}} { foreach TissueImportant $LesTissuesImportants { set TissueImportant [string toupper $TissueImportant] set TabTmp($TissueImportant) 1 } if {[regexp -nocase {leptotene|spermat|epididymis|gonad|mullerian|genital|mesonephros|ovary|oviduct|sertoli|testis|uterus|vagin|zygoten|vesicular gland} $TissueType]} { set TissueType "REPRODUCTION" } elseif {[regexp -nocase {pituitary} $TissueType]} { set TissueType "PITUARY GLAND" } elseif {[regexp -nocase {adrenal|hypothalam|langerhans|pancrea} $TissueType]} { set TissueType "ENDOCRINE SYSTEM" } elseif {[regexp -nocase {gland|rathke|saliv} $TissueType]} { set TissueType "GLAND" } elseif {[regexp -nocase {retin|eye|optic|lens} $TissueType]} { set TissueType "EYE" } elseif {[regexp -nocase {hippocamp|cortex|brain|cerebel|neural|cerebral|corpora quadrigemina|corpus striatum|medulla oblongata|postrema|subfornical} $TissueType]} { set TissueType "BRAIN" } elseif {[regexp -nocase {bone marrow|hematopoiet|aorta|vein} $TissueType]} { set TissueType "BLOOD" } elseif {[regexp -nocase {bone|maxilla|osteoblast|cartilage|cranio|mandibl|joints} $TissueType]} { set TissueType "BONE" } elseif {[regexp -nocase {amnion|blastocy|branchial arches|endoderm|embryo|gastrula|blastul|placent|egg|fetus|mesenchym|notochord|primitive|trophoblast|es cell|diencephal} $TissueType]} { set TissueType "EMBRYO" } elseif {[regexp -nocase {spinal|cord} $TissueType]} { set TissueType "CNS" } elseif {[regexp -nocase {adipose} $TissueType]} { set TissueType "FAT TISSUE" } elseif {[regexp -nocase {bowel|cecum|colon|intestin|isthmal|stomach|tongue|jejunal} $TissueType]} { set TissueType "GASTROINTESTINAL TRACK" } elseif {[regexp -nocase {lymph|spleen|b cell|macrophage|nk cell|sympathetic ganglion|tcell|thymus} $TissueType]} { set TissueType "IMMUNE SYSTEM" } elseif {[regexp -nocase {carcino|cancer|tumor|melanom|metastat} $TissueType]} { set TissueType "TUMOR" } elseif {[regexp -nocase {wolffian|bladder|kidney} $TissueType]} { set TissueType "URINARY TRACK" } elseif {[regexp -nocase {olfactory} $TissueType]} { set TissueType "NEUROSENSORY SYSTEM" } elseif {[regexp -nocase {inner ear} $TissueType]} { set TissueType "INNER EAR" } elseif {[regexp -nocase {lung} $TissueType]} { set TissueType "LUNG" } elseif {[regexp -nocase {liver} $TissueType]} { set TissueType "LIVER" } elseif {[regexp -nocase {cardiac|heart} $TissueType]} { set TissueType "HEART" } elseif {[regexp -nocase {diaphragm|muscle} $TissueType]} { set TissueType "MUSCLE" } elseif {[regexp -nocase {skin} $TissueType]} { set TissueType "SKIN" } else { set TissueType "OTHER" } if {$LesTissuesImportants != {} && ![info exists TabTmp($TissueType)]} {return "OTHER"} return $TissueType } proc Title2HTML {aT} { upvar $aT tbl Html_Append "
    " Html_Append "

    $tbl(Title)

    " Html_Append "
    " return } proc Title2Text {aT} { upvar $aT tbl global TextOut lappend TextOut "$tbl(Title)" lappend TextOut [string repeat = [string length $tbl(Title)]] return } proc TkH {} { global GscopeDir # NouveauPack set w [AfficheFichier "$GscopeDir/gscope.tcl"] QueFontLesBoutonsDe $w EspionneL [$w.frame.list get 0 end] } proc Tlts {} { set L [list [list 60. 40. 0.] [list 60. 35. 5.] [list 60. 30. 10.] [list 55. 5. 40.] [list 60. 20. 20.] [list 60. 25. 15.] [list 55. 10. 35.] [list 65. 0. 35.] [list 65. 5. 30.] [list 65. 10. 25.] [list 65. 15. 20.]] set Ls [list] foreach e $L { lassign $e g n p set m2 [expr {($g*$g + $n*$n + $p*$p)/3.}] set s [expr {sqrt($m2 - (100./3.)**2)}] set gn [expr {abs($g - $n)}] set gp [expr {abs($g - $p)}] set np [expr {abs($n - $p)}] set ss [expr {($gn + $gp + $np)/3.}] lappend Ls [list $s $ss $g $n $p $gn $gp $np] } set fmt "%5.2f %5.2f %5.2f %5.2f %5.2f" set Ls [lsort -real -index 0 $Ls] foreach e $Ls { lassign $e std sgnp g n p gn gp np puts [format $fmt $std $sgnp $g $n $p] } puts "" set Ls [lsort -real -index 1 $Ls] foreach e $Ls { lassign $e std sgnp g n p gn gp np puts [format $fmt $std $sgnp $g $n $p] } puts "" set Ls [lsort -command TrieDoubles -increasing $Ls] foreach e $Ls { lassign $e std sgnp g n p gn gp np puts [format $fmt $std $sgnp $g $n $p] } puts "" exit } proc TmMoyenDesSequences {{Liste ""}} { Wup "Permet de calculer la moyenne des Tm de plusieurs sequences" if {$Liste==""} { #set Liste [ListeTest] #set Liste [list ACT0001 ACT0010] set Liste [ListeDesPABs] } set RepmRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" set Repnuctfa "[RepertoireDuGenome]/nuctfa" set TmMoyenne 0.0 set nbTm 0 set TmTotal 0.0 foreach PAB $Liste { set Tm "" set LaSeq "" set FichierQuery $PAB if {[file exists $FichierQuery]} { set FichierQuery $FichierQuery } elseif { [file exists "$RepmRNA/$PAB"]} { set FichierQuery "$RepmRNA/$PAB" } elseif {[file exists "$Repnuctfa/$PAB"]} { set FichierQuery "$Repnuctfa/$PAB" } else { continue } set LaSeq [QueLaSequenceDuFichierTFA $FichierQuery] if {$LaSeq==""} {Espionne "$FichierQuery no sequence available";continue} set Tm [CalculTmDeLaSeq $LaSeq "" "" "NearestNeighbor"] if {$Tm=="-1"} {continue} elseif {$Tm==""} {continue} set TmTotal [expr $TmTotal+$Tm] incr nbTm } set TmMoyenne [expr $TmTotal/$nbTm] return "$TmMoyenne" } proc TmPanel {LeCanvasPere} { Wup "Panel de choix d affichage et de couleur du graphes du meilleur Tm" set LesGraphes [LesGraphesDeLOligo $LeCanvasPere] if {$LesGraphes==""} {return ""} set GrapheTopLevel "$LeCanvasPere.besttmgraphe" if {[winfo exists $GrapheTopLevel]} { wm deiconify $GrapheTopLevel raise $GrapheTopLevel return "" } else {toplevel $GrapheTopLevel} wm geometry $GrapheTopLevel +300+100 wm title $GrapheTopLevel "Best Tm Selection" wm resizable $GrapheTopLevel false false set FrameGraphe "$GrapheTopLevel.besttmframe" frame $FrameGraphe -borderwidth "3" -relief "groove" pack $FrameGraphe -expand "true" -side "top" -fill "both" set NbGraph [llength $LesGraphes] set NbRow 0 set IndGraph 0 foreach Graphe $LesGraphes { incr IndGraph incr NbRow set TagOrId $Graphe set Graphe [string tolower $Graphe] set PetiteFrameGraphe "$FrameGraphe.f$Graphe" set LGraph "$PetiteFrameGraphe.l$Graphe" set BGrOn "$PetiteFrameGraphe.bgon$Graphe" set BGrOff "$PetiteFrameGraphe.bgoff$Graphe" set BMoyOn "$PetiteFrameGraphe.bmoyon$Graphe" set BMoyOff "$PetiteFrameGraphe.bmoyoff$Graphe" set BColor1 "$PetiteFrameGraphe.bcolor1$Graphe" set BColor2 "$PetiteFrameGraphe.bcolor2$Graphe" frame $PetiteFrameGraphe -borderwidth "0" -relief "groove" label $LGraph -text "$TagOrId" -padx "2" -borderwidth "3" -relief "groove" -background "orange" button $BGrOn -text "On" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Raiser $LeCanvasPere ${TagOrId}Lines" button $BGrOff -text "Off" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Lower $LeCanvasPere ${TagOrId}Lines" button $BMoyOn -text "On" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Raiser $LeCanvasPere ${TagOrId}Plot" button $BMoyOff -text "Off" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -command "Lower $LeCanvasPere ${TagOrId}Plot" button $BColor1 -text "Color" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -background deepskyblue2 -command "LePanneauDeCouleursDuGraph $BColor1 $LeCanvasPere ${TagOrId}Lines" button $BColor2 -text "Color" -anchor "center" -padx "3" -borderwidth "2" -relief "groove" -background deepskyblue2 -command "LePanneauDeCouleursDuGraph $BColor1 $LeCanvasPere ${TagOrId}Plot" grid $PetiteFrameGraphe -sticky ewns grid $LGraph -row $NbRow -column 0 -sticky ewns -rowspan 2 grid $BGrOn -row $NbRow -column 1 -sticky ewns grid $BGrOff -row $NbRow -column 2 -sticky ewns grid $BMoyOn -row $NbRow -column 3 -sticky ewns grid $BMoyOff -row $NbRow -column 4 -sticky ewns incr NbRow grid $BColor1 -row $NbRow -column 1 -sticky ewns -columnspan 2 grid $BColor2 -row $NbRow -column 3 -sticky ewns -columnspan 2 if {$IndGraph==1} { set DismissB "$PetiteFrameGraphe.destroybutton" set LDuGraph "$PetiteFrameGraphe.ldugraph" set LDuMoyenne "$PetiteFrameGraphe.ldumoyenne" button $DismissB -text "Exit" -anchor "center" -padx "3" -background "red" -borderwidth "2" -relief groove -activebackground "red" -overrelief "sunken" -command "destroy $GrapheTopLevel" label $LDuGraph -text "Lines" -anchor "center" -padx "2" -background "#808FFF" -borderwidth "3" -relief groove label $LDuMoyenne -text "Plot" -anchor "center" -padx "2" -background "#808FFF" -borderwidth "3" -relief groove grid $DismissB -row 0 -column 0 -sticky ewns grid $LDuGraph -row 0 -column 1 -sticky ewns -columnspan 2 grid $LDuMoyenne -row 0 -column 3 -sticky ewns -columnspan 2 } if {$IndGraph==$NbGraph} { set LAllDuGr "$PetiteFrameGraphe.lalldugraph" set BAllGrOn "$PetiteFrameGraphe.ballgon" set BAllGrOff "$PetiteFrameGraphe.ballgoff" label $LAllDuGr -text "Both" -anchor "center" -padx "2" -relief "groove" -background "green3" -borderwidth "3" button $BAllGrOn -text "On" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "Raiser $LeCanvasPere OligoGraph" button $BAllGrOff -text "Off" -anchor "center" -padx "3" -relief "groove" -background "yellow" -borderwidth "2" -command "Lower $LeCanvasPere OligoGraph" incr NbRow grid $LAllDuGr -row $NbRow -column 0 -sticky ewns grid $BAllGrOn -row $NbRow -column 1 -sticky ewns -columnspan 2 grid $BAllGrOff -row $NbRow -column 3 -sticky ewns -columnspan 2 } grid columnconfigure $PetiteFrameGraphe 0 -weight 1 grid columnconfigure $PetiteFrameGraphe 1 -weight 0 grid columnconfigure $PetiteFrameGraphe 2 -weight 0 grid columnconfigure $PetiteFrameGraphe 3 -weight 0 grid columnconfigure $PetiteFrameGraphe 4 -weight 0 } return "" } proc TmpDecortiqueUnPDB {Fichier toto {LaMolId ""}} { if {[llength $Fichier] == 1} { if {! [regsub {\.} $Fichier "" tmp]} { set lignes [RecupereUnFichierSurWeb $Fichier] } else { set lignes [LesLignesDuFichier $Fichier] } } else { set lignes $Fichier } set MolId [string range $LaMolId 0 3] set lignesPDB [ExtraitLignesAtomesDuPDB $lignes] if {$MolId == ""} {set MolId [file rootname [file tail $Fichier]]} # set Header [ExtraitHeadDuPDB $lignes] # set PDB_[set MolId]_Header $Header if {$lignesPDB == -1} {return 0} set ChaineCourant -1 set NomResCourant "" set ResiduCourant -999 set CC "" set PremRes 1 set Latmn {} set Latmx {} set Latmb {} set fmt "%*13s%4s%*1s%3s%*1s%1s%4d%24s%12s" foreach ligne $lignesPDB { set ee " $ligne" if {$toto} { set AtomName [string range $ee 13 16] set ResidueName [string range $ee 18 20] set ChainIdent [string range $ee 22 22] if {$ChainIdent == " "} {set ChainIdent "a"} scan [string range $ee 23 26] "%d" ResidueNumber set AtomXYZ [string range $ee 31 54] set AtomBQ [string range $ee 55 66] } else { scan $ee $fmt AtomName ResidueName ChainIdent ResidueNumber AtomXYZ AtomBQ if {$ChainIdent == " "} {set ChainIdent "a"} } if {$ResiduCourant == -999} { set ResiduCourant $ResidueNumber set NomRes1L [AutreCodeLuc $ResidueName] set CC $ChainIdent } if {$ResidueNumber != $ResiduCourant} { set NomRes1L [AutreCodeLuc $ResidueName] if {! [string equal $NomResCourant "XXX"]} { lappend PDB_[set MolId]_NomRes($CC) $NomResCourant lappend PDB_[set MolId]_NmrRes($CC) $ResiduCourant lappend PDB_[set MolId]_NomAtm($CC) $Latmn lappend PDB_[set MolId]_AtmXYZ($CC) $Latmx lappend PDB_[set MolId]_AtmBQ($CC) $Latmb set Latmn {} set Latmx {} set Latmb {} lappend Latmx $AtomXYZ lappend Latmb $AtomBQ lappend Latmn $AtomName } if { ! [string equal $ChainIdent $ChaineCourant]} { lappend PDB_[set MolId]_ChnIdn $ChainIdent set ChaineCourant $ChainIdent set CC $ChainIdent } } lappend Latmx $AtomXYZ lappend Latmb $AtomBQ lappend Latmn $AtomName set ResiduCourant $ResidueNumber set NomResCourant $NomRes1L } # lappend PDB_[set MolId]_ChnIdn $ChainIdent if {$NomResCourant != "XXX"} { lappend PDB_[set MolId]_NomRes($CC) $NomResCourant lappend PDB_[set MolId]_NmrRes($CC) $ResiduCourant lappend PDB_[set MolId]_NomAtm($CC) $Latmn lappend PDB_[set MolId]_AtmXYZ($CC) $Latmx lappend PDB_[set MolId]_AtmBQ($CC) $Latmb } # set lsite [ExtraitSiteActifDuPDB $Header] # if {$lsite != {}} {array set PDB_[set MolId]_Site $lsite} return 1 } proc TmpFile {{Racine ""} {Rep ""} {Sep ""} {WithDate ""}} { global TmpFileNumber if {[regexp -nocase "Date" $Sep]} { set WithDate $Sep ; set Sep "" } set TestUniqueRoot [regexp -nocase "UniqueRoot" $WithDate] set WithDate [regexp -nocase "WithDate" $WithDate] if {$Rep=="envTEMP"} { global env if {[info exists env(TEMP)]} { set Rep [set env(TEMP)] } else { set Rep "" } } set MemoSep $Sep if {$Sep==""} { set Sep "." } if {[regexp "NoSep" $Sep]} { set Sep "" } if {$Rep==""} { set Rep [RepertoireDeTravail] } regsub -all {/*$} $Rep "" Rep if { ! [info exists TmpFileNumber]} { set TmpFileNumber 0 } if {$Racine==""} { set Racine "tmp" } if {$WithDate} { set Date [Date "Seconds"] set TmpFileName "$Rep/$Racine$Sep$Date" if {$TestUniqueRoot && [glob -nocomplain "$TmpFileName*"]!={}} { after 1000 return [TmpFile $Racine $Rep $MemoSep "WithDateAndUniqueRoot"] } return $TmpFileName } set Pid [pid] incr TmpFileNumber set TmpFileName "$Rep/$Racine$Sep$Pid$Sep$TmpFileNumber" return $TmpFileName } proc ToBeOrthologue {Nom {PlusMinusOrgas ""}} { global ToBeOrthologue if {[info exists ToBeOrthologue($PlusMinusOrgas)]} { if {[info exists ToBeOrthologue($Nom)] } { return [set ToBeOrthologue($Nom)] } else { return 0 } } if {[info exists ToBeOrthologue]} { unset ToBeOrthologue } LaListeToBeOrthologue $PlusMinusOrgas if {[info exists ToBeOrthologue($Nom)] } { return [set ToBeOrthologue($Nom)] } else { return 0 } } proc Today {} { return [clock format [clock seconds] -format "%A %d %B %Y"] } proc Toggle {SaVariable} { upvar $SaVariable MaVariable set MaVariable [expr ! $MaVariable] return $MaVariable } proc ToggleAllOff {} { global StrucAVoir pgl set fobj $pgl(frObjc) foreach e $StrucAVoir { lassign $e nc f set nom [DonneIdDeAccessPDB $nc] set t [$fobj.f${nom}.b0 cget -text] if {[string index $t 0] eq "-"} { $fobj.f${nom}.b0 invoke } } return } proc ToggleAuLog {{Init ""}} { global wtlog Toggle if {$Init ne ""} { set Toggle(AuLog) $Init if {! $Init} { if {[info commands AuLogText] ne ""} { rename AuLogText AuLog } } else { if {[info commands AuLogWindow] ne ""} { rename AuLogWindow AuLog } } return } set Toggle(AuLog) [expr {! $Toggle(AuLog)}] if {$Toggle(AuLog)} { rename AuLog AuLogText rename AuLogWindow AuLog AuLog } else { rename AuLog AuLogWindow rename AuLogText AuLog DetruitLogConsole destroy } return } proc ToggleCanva {K Tag} { global Action global CouleurDuFond if { ! [info exists Action]} { set Action "raise" } if { $Action == "raise" } { set Action "lower" set Couleur $CouleurDuFond } else { set Action "raise" set Couleur "black" } $K itemconfigure $Tag -fill $Couleur $K $Action $Tag } proc ToggleCouleursResidues {args} { global Toggle NomTextSeq if {[TypeAli] eq "pasdali"} {return} if {[QuelMode] eq "seqlab"} {return} set Ldtags [EditorMappingData] $NomTextSeq configure -state normal if {! $Toggle(ColRes)} { set Toggle(ColRes) 1 $NomTextSeq configure -background DimGray set lt [$NomTextSeq tag names] if {"TagA" ni $lt} { foreach def $Ldtags { lassign $def n f b $NomTextSeq tag configure Tag$n -background $b -foreground $f } } FaireAttendre "Please wait ...\nColoring according to residues types ..." BindModeColors TagLaFenetre FaireLaSuite } else { set Toggle(ColRes) 0 $NomTextSeq configure -background white set Ltodel [list] foreach c $Ldtags { lassign $c n f b lappend Ltodel "Tag$n" } $NomTextSeq tag delete {*}$Ltodel BindModeNormal } $NomTextSeq configure -state disabled return } proc ToggleFeature {} { global FrmBouton NomFenetreOrdali Toggle if {[QuelMode] ni [list "feature" "ordali"] && [TypeAli] eq "pasdali"} { set Toggle(Feature) [expr {! $Toggle(Feature)}] return } if {$Toggle(Feature)} { grid $FrmBouton -row 5 -column 0 -padx 10 -pady 10 -sticky news } else { grid forget $FrmBouton } FenetreAuCentre [winfo toplevel $NomFenetreOrdali] update idletasks return } proc ToggleFullScreen {} { global GeomNormal Defauts NomFenetreOrdali #puts "TogglefullScreen" set top [winfo toplevel $NomFenetreOrdali] wm withdraw $top set Etat [wm attributes $top -fullscreen] puts "toplevel $top Etat $Etat Def [set Defauts(FullScreen)]" #set Defauts(FullScreen) [expr {! [set Defauts(FullScreen)]}] set Etat [expr {! $Etat}] if {$Etat} { puts "Full Screen" set GeomNormal [wm geometry $top] puts " GeomNormal $GeomNormal" set xw [winfo screenwidth $top] set xh [winfo screenheight $top] puts " $xw $xh" #wm maxsize $top $xw $xh #wm minsize $top $xw $xh #wm overrideredirect $top 1 #wm attributes $top -fullscreen 1 wm attributes $top -fullscreen 1 puts " New [wm geometry $top]" } else { puts "Normal" set geom [string map [list + " " - " " x " "] $GeomNormal] lassign [split $geom " "] w h x y #wm overrideredirect $top 0 #wm attributes $top -fullscreen 0 if {$x eq ""} {set x 0} if {$y eq ""} {set y 0} if {$w eq ""} {set w 0} if {$h eq ""} {set h 0} wm geometry $top +${x}+$y wm attributes $top -fullscreen 0 } wm deiconify $top update idletasks set Defauts(FullScreen) $Etat return } proc ToggleScores {{args ""}} { global Toggle LFeatCourantes NomFenetreOrdali FrmSequence Cons ListeTypesDeFeatures puts "toggleScores [info level 0]" catch {puts " -1 [info level -1]"} update switch [QuelMode] { "feature" { set Lft [lsearch -regexp -all -inline $ListeTypesDeFeatures {^Cons\-|^Score\-}] if {! [llength $Lft]} { set Toggle(Scores) 0 return } } "conservation" { set Toggle(Scores) [set Cons(Show)] set Lft [lindex [set Cons(ConsCou)] 0] if {$Lft eq "None"} { #return set Lft "" } } default return } #puts "Lft $Lft" if {[set Toggle(Scores)]} { if {[QuelMode] eq "feature"} { DessineLesScores foreach e $Lft { set w [BtnDeLaFeature $e] if {[EtatDuBouton $w]} { #puts "e= $e" DessineLesScores $e } } } elseif {[QuelMode] eq "conservation"} { DessineLesScores $Lft } } else { if {[winfo exists $FrmSequence.csc]} { grid forget $FrmSequence.csc destroy $FrmSequence.csc } } update idletasks FenetreAuCentre [winfo toplevel $NomFenetreOrdali] return } proc ToggleSecStr {} { if {! $::Defauts(AffSS)} { set ::Defauts(AffSS) 1 CacheStrSecDansAlignement } else { set ::Defauts(AffSS) 0 MontreStrSecDansAlignement } return } proc ToggleShowFrame {} { global pgl if {$pgl(showframe)} { grid forget $pgl(frInfo) grid forget $pgl(frCtrl) grid forget $pgl(frObjc) grid forget $pgl(frFonc) set pgl(showframe) 0 } else { grid $pgl(frInfo) -row 0 -column 0 -columnspan 3 -sticky ew grid $pgl(frCtrl) -row 1 -column 0 -columnspan 3 -sticky ew grid $pgl(frObjc) -row 2 -column 0 -sticky ns -pady 15 grid $pgl(frFonc) -row 2 -column 2 -sticky ns -pady 15 set pgl(showframe) 1 } FenetreAuCentre [winfo toplevel $pgl(wogl)] raise $pgl(wogl) update idletasks return } proc ToggleShowSeqFrame {} { global Defauts FrmMenu FrmToolBar FrmVues FrmScores FrmBouton FrmDebug if {! [set Defauts(ShowFrame)]} { grid forget $FrmMenu grid forget $FrmToolBar grid forget $FrmVues grid forget $FrmScores grid forget $FrmBouton grid forget $FrmDebug set Defauts(ShowFrame) 1 } else { grid $FrmMenu -row 0 -column 0 -padx 5 -sticky ew grid $FrmToolBar -row 1 -column 0 -sticky ew -padx 5 grid $FrmVues -row 2 -column 0 -sticky ew -padx 5 -pady {1 3} grid $FrmScores -row 4 -column 0 -sticky ew grid $FrmBouton -row 5 -column 0 -padx 10 -pady 10 -sticky news grid $FrmDebug -row 6 -column 0 -padx 10 -pady 5 set Defauts(ShowFrame) 0 } return } proc ToggleStepMode {} { set ::StepMode [expr {! $::StepMode}] puts "\n-> Step Mode : $::StepMode" return } proc ToggleTabBouton {w} { set Lw [split $w .] set mol [string range [lindex $Lw end-1] 1 4] set sea [join [lrange $Lw 0 end-1] .] set Lwo [lsearch -regexp -all -inline [winfo children $sea] "\.bto"] set Lwd [lsearch -regexp -all -inline [winfo children $sea] "\.btd"] set Lwe [lsearch -regexp -all -inline [winfo children $sea] "\.bte"] if {[string index [$w cget -text] 0] eq "-"} { $w configure -text "+ $mol" -foreground green1 if {$Lwo != {} } { grid forget {*}$Lwo grid forget {*}$Lwe grid forget {*}$Lwd } } else { $w configure -text "- $mol" -foreground yellow set c 1 foreach o $Lwo e $Lwe d $Lwd { # re-grid obj name button grid $o -row $c -column 0 -sticky w -pady 0 -ipady 0 -padx {10 0} grid $e -row $c -column 1 -sticky e -pady 0 -ipady 0 grid $d -row $c -column 2 -sticky e -pady 0 -ipady 0 incr c } } update idletasks $::pgl(wogl) postredisplay return } proc ToggleTaxArrow {w} { set Lt [$w gettags current] set n "" foreach t $Lt { if {[regexp {A[0-9]+} $t]} { set n [string range $t 1 end] set toSee $t break } } if {$n eq ""} { puts "pb n=>< . Lt >$Lt<" return } set ::Tx(Etat,$n) [expr {! $::Tx(Etat,$n)}] DrawTaxo $toSee return } proc ToggleTaxInternal {w} { set Lt [$w gettags current] set n "" foreach t $Lt { if {[regexp {(NI|RI)[0-9]+} $t]} { set n [string range $t 2 end] set toSee $t break } } # Etat = 0 means closed if {! $::Tx(Etat,$n)} { return } set NbI $::Tx(NbInt,$n) # Open/Close internal nodes if {! $::Tx(ShowInt,$n)} { # open it set do 1 } else { # close it set do 0 } set ::Tx(ShowInt,$n) $do for {set i 0} {$i <= $NbI} {incr i} { set c $::Tx(ChildD,$n) set ::Tx(ShowInt,$c) $do set n $c } update DrawTaxo $toSee return } proc ToggleTextePhylo {K {Qui Both}} { global ToggleTextePhylo if { ! [info exists ToggleTextePhylo($K)]} { set ToggleTextePhylo($K) "raise" } set Etat [set ToggleTextePhylo($K)] if {$Etat=="raise"} { set Etat "lower" } else { set Etat "raise" } if {$Qui=="Both" || $Qui=="Orga"} { $K $Etat "TexteOrga" } if {$Qui=="Both" || $Qui=="Rank"} { $K $Etat "TexteRang" } set ToggleTextePhylo($K) $Etat return $Etat } proc ToggleToolbar {} { global FrmToolBar if {! [winfo exists $FrmToolBar]} { AfficheBarreBoutons } else { set Le [winfo children $FrmToolBar] destroy {*}$Le grid forget $FrmToolBar destroy $FrmToolBar } return } proc ToggleWindowMode {{from ""}} { global pgl if {! $pgl(fscreen) } { SetFullScreenMode set pgl(fscreen) 1 } else { SetWindowMode set pgl(fscreen) 0 } FenetreAuCentre [winfo toplevel $pgl(wogl)] return } proc ToggleWindowMode_paul {} { if { $::gDemo(fullScreen) } { SetFullScreenMode .top set ::gDemo(fullScreen) false } else { SetWindowMode .top $::gDemo(winWidth) $::gDemo(winHeight) set ::gDemo(fullScreen) true } } proc Togl_CreateFonct {w} { global BUFSIZE selectBuffer pgl Rad set BUFSIZE 512 set selectBuffer [tcl3dVector GLuint $BUFSIZE] set pgl(FontBase) [$w loadbitmapfont] set pgl(FontBase) [$w loadbitmapfont] set ambient { 0.4 0.4 0.4 1.0 } set diffuse { 0.8 0.8 0.8 1.0 } set specular { 1.0 1.0 1.0 1.0 } # x,y,z,w if w=0 lumier a l'infini , 1 set position { 0.0 50.0 100.0 0.0 } set lmodel_ambient { 0.2 0.2 0.2 1.0 } set local_view { 0.0 } glClearColor 0.0 0.0 0.0 0.0 glDepthFunc GL_LEQUAL glEnable GL_DEPTH_TEST glLightfv GL_LIGHT0 GL_AMBIENT $ambient glLightfv GL_LIGHT0 GL_DIFFUSE $diffuse glLightfv GL_LIGHT0 GL_SPECULAR $specular glLightf GL_LIGHT0 GL_SHININESS 85. glLightfv GL_LIGHT0 GL_POSITION $position glLightModelfv GL_LIGHT_MODEL_AMBIENT $lmodel_ambient glLightModelfv GL_LIGHT_MODEL_TWO_SIDE 1.0 glLightModeli GL_LIGHT_MODEL_COLOR_CONTROL $::GL_SEPARATE_SPECULAR_COLOR #glLightModelfv GL_LIGHT_MODEL_LOCAL_VIEWER $local_view glEnable GL_LIGHTING glEnable GL_LIGHT0 glColorMaterial GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE glEnable GL_COLOR_MATERIAL glMaterialfv GL_FRONT_AND_BACK GL_SPECULAR {1.0 1.0 1.0 1.0} glMaterialf GL_FRONT_AND_BACK GL_SHININESS 100. # Fog section glEnable GL_FOG set fogColor {0.0 0.0 0.0 0.0} glFogfv GL_FOG_COLOR $fogColor glFogi GL_FOG_MODE $::GL_EXP2 glFogf GL_FOG_DENSITY 0.02 glFogf GL_FOG_START 0.0 glFogf GL_FOG_END 10.0 glFogi GL_FOG_COORD_SRC $::GL_FOG_COORD glHint GL_FOG_HINT $::GL_NICEST glEnable GL_LINE_SMOOTH glHint GL_LINE_SMOOTH_HINT $::GL_NICEST glEnable GL_POLYGON_SMOOTH glHint GL_POLYGON_SMOOTH_HINT $::GL_NICEST glShadeModel $pgl(shadeModel) glEnable GL_RESCALE_NORMAL return } proc Togl_DisplayFonct {w} { glViewport 0 0 [$w width] [$w height] glClear [expr $::GL_COLOR_BUFFER_BIT | $::GL_DEPTH_BUFFER_BIT] glMatrixMode GL_MODELVIEW glLoadIdentity glTranslatef 0.0 0.0 [expr {-1. * $::Rad}] set mat [build_rotmatrix $::cQuat] glMultMatrixf $mat glTranslatef [expr {-1.0*$::pgl(xCen)}] [expr {-1.0*$::pgl(yCen)}] [expr {-1.0*$::pgl(zCen)}] EnvoieLesObjets AfficheDistances AfficheLabels glFlush $w swapbuffers return } proc Togl_ReshapeFonct {toglwin {w -1} {h -1}} { global pgl Rad # for tcl3d 0.5.0 set h [$toglwin height] set w [$toglwin width] if { $h == 0 } {set h 1} if { $w == 0 } {set w 1} set pgl(width) $w set pgl(height) $h if {$w > $h} { set pgl(ratioX) [expr {double($w)/$h}] set pgl(ratioY) 1.0 } else { set pgl(ratioY) 1.0 set pgl(ratioY) [expr {double($h)/$w}] } glViewport 0 0 $w $h set ratX $pgl(ratioX) set ratY $pgl(ratioY) set zoom $pgl(Zoom) set frontclip $pgl(frontclip) set backclip $pgl(backclip) glMatrixMode GL_PROJECTION glLoadIdentity glOrtho [expr {-$ratX*$zoom*($Rad+$pgl(xTra))}] [expr { $ratX*$zoom*($Rad-$pgl(xTra))}] [expr {-$ratY*$zoom*($Rad+$pgl(yTra))}] [expr { $ratY*$zoom*($Rad-$pgl(yTra))}] [expr {$pgl(backclip) +$pgl(zTra)}] [expr {$pgl(frontclip)+$pgl(zTra)}] glMatrixMode GL_MODELVIEW glLoadIdentity puts "reshape done ..." flush stdout $toglwin swapbuffers return } proc Tok {{TexteInitial ""}} { global ChaineTok global TokCourant if {$TexteInitial!=""} { set ChaineTok $TexteInitial } if { $ChaineTok=="" } { set TokCourant "" ; return "" } set Tok [string index $ChaineTok 0] set ChaineTok [string range $ChaineTok 1 end] if {[regexp {[ \n\t]} $Tok]} { return [Tok] } set TokCourant $Tok return $Tok } proc TooCloseOrganism {Genre {Espece ""}} { global TooCloseOrganism global RepertoireDuGenome if {$Espece==""} { set O $Genre } else { set O "$Genre $Espece" } if {[info exists TooCloseOrganism($O)]} { return [set TooCloseOrganism($O)] } set Orga [Glossaire $O Complet] if {$Orga==""} { set Orga $O } if {[info exists TooCloseOrganism($Orga)]} { return [set TooCloseOrganism($Orga)] } if {[info exists TooCloseOrganism ]} { return [set TooCloseOrganism("NotFound")] } set Fichier "$RepertoireDuGenome/fiches/tooclose_organism" if {[file exists $Fichier]} { Wup "We do it first for the most common used" foreach G [LesGenomesComplets] { set C [Glossaire $G Court] set TooCloseOrganism($G) 0 set TooCloseOrganism($C) 0 } set TooCloseOrganism(LaListeMerci) {} foreach Ligne [LesLignesDuFichier $Fichier] { set OrgaLu [string trim $Ligne] lappend TooCloseOrganism(LaListeMerci) $OrgaLu set TooCloseOrganism($OrgaLu) 1 set TooCloseOrganism([Glossaire $OrgaLu "Court"]) 1 Espionne [Glossaire $OrgaLu "Court"] } set TooCloseOrganism("NotFound") 0 return [TooCloseOrganism $O] } set LaFamille {} while {[OuiOuNon "Do You want to define 'Too close organisms' ?"]} { if {[OuiOuNon "Do You want to copy or link an other 'TooCloseOrganism' file ?"]} { set Autre [ButineArborescence "All" "$RepertoireDuGenome/.."] if {$Autre==""} { continue } if {[OuiOuNon "Do I link \n$Autre\n to \n$Fichier\n ?"]} { exec ln -s $Autre $Fichier } elseif {[OuiOuNon "Do I copy it ?"]} { File copy $Autre $Fichier } return [TooCloseOrganism $O] } set LaFamille [ChoixDesPresents [LesGenomesComplets]] set Other "" while {[OuiOuNon "Do You want to add other organisms to the too close organisms list ?" 0]} { set Other [Entre $Other] set BonOther [Glossaire $Other Complet] if {$BonOther==""} { FaireLire "I don't know the organism $Other" } else { lappend LaFamille $BonOther } } if {[OuiOuNon "[join $LaFamille "\n"]\n\nOK ?"]} { break } } if {$LaFamille=={}} { if { ! [OuiOuNon "Do You want to save 'Too Close Organisms' as an empty list ?"]} { set TooCloseOrganism("NotFound") 0 set TooCloseOrganism(LaListeMerci) {} return [TooCloseOrganism $O] } } SauveLesLignes $LaFamille dans $Fichier return [TooCloseOrganism $O] } proc TopoDuBlastN {} { global RepertoireDuGenome global PlottePourBlastN global DotPlotDesProches ; set DotPlotDesProches 0 global yDuContig set OnVeutLeDotPlot 0 set OnVeutLesQuery 1 foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/bornesdescontigs"] { scan $Ligne "%s %d %d" Contig d f set Debut($Contig) $d set Fin($Contig) $f set Long($Contig) [expr $f-$d+1] lappend LesFins $f set ContigDeLaFin($f) $Contig } set OldContig "" foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/ouonttapelescontigs.mini"] { if { ! [regexp {[a-z0-9]} $Ligne]} { continue } scan $Ligne "%s %d %d %s %s %s %s %d %d %d %d" Contig a b OrgaComplet Orga Fraction PN dQ fQ dC fC regsub {TTH\-} $Contig "" Contig set Sens "F" if {$dC>$fC} { set W $dC set dC $fC set fC $W set Sens "R" } foreach FinDeContig $LesFins { if {$FinDeContig < $fC} { continue } set ContigCible [set ContigDeLaFin($FinDeContig)] if {$dC < [set Debut($ContigCible)]} { FaireLire "A cheval sur $ContigCible\n$Ligne" } break } ScanLaListe [split $Fraction "/"] IdenHSP LongHSP if {$LongHSP < 1} { continue } set Limite -0 if {[incr dQ $Limite]<0} { continue } if {[incr fQ $Limite]<0} { continue } if {[incr dC $Limite]<0} { continue } if {[incr fC $Limite]<0} { continue } lappend Nous "$Contig $dQ $fQ" lappend Nous "$Contig $dQ $fQ" lappend Vous "$ContigCible $dC $fC" lappend Vous "$ContigCible $dC $fC" lappend NosPos $dQ lappend NosPos $fQ lappend VosPos $dC lappend VosPos $fC set dQr [format "%3d" [expr round(100.*($dQ-[set Debut($Contig)])/[set Long($Contig)])] ] set fQr [format "%3d" [expr round(100.*($fQ-[set Debut($Contig)])/[set Long($Contig)])] ] set dCr [format "%3d" [expr round(100.*($dC-[set Debut($ContigCible)])/[set Long($ContigCible)])] ] set fCr [format "%3d" [expr round(100.*($fC-[set Debut($ContigCible)])/[set Long($ContigCible)])] ] set BelleFraction [format "%15s" $Fraction] set OldContig $Contig set Resume "$Sens $Contig $dQr $fQr $ContigCible $dCr $fCr $BelleFraction $dQ $fQ [set Debut($Contig)] [set Long($Contig)] $dC $fC [set Debut($ContigCible)] [set Long($ContigCible)]" lappend LesCommunsDeCible($ContigCible) $Resume lappend LesCommunsDeQuery($Contig) $Resume } set xMax 12000 set yMax 250000 set K [UnCanva $xMax $yMax 1000 1000] MainLeveeSurUnCanva $K set dy 50 set y [expr 10*$dy] set lQueryMax 0 foreach Contig [lsort -decreasing [array names LesCommunsDeCible]] { set lQuery 0 set MettreEntete 1 foreach Ligne [set LesCommunsDeQuery($Contig)] { scan $Ligne "%s %s %d %d %s %d %d %s %d %d %d %d %d %d %d %d" Sens Query dQr fQr Cible dCr fCr Fraction dQ fQ aQ lQ dC fC aC lC if { ! $lQuery } { set lQuery $lQ } if { ! $lQueryMax } { set lQueryMax $lQ } set oC [expr $lQueryMax+$dQ-$aQ-$dC+$aC] incr y $dy if {$Sens=="F"} { set CouleurAuSens "red" } else { set CouleurAuSens "blue" } set X1 $oC set X2 [expr $oC+$lC] set X1 [expr $X1/24.] set X2 [expr $X2/24.] if {$MettreEntete} { set MettreEntete 0 $K create text [expr $X1] [expr $y-2*$dy] -text $Contig -fill black -anchor w set yDuContig($Query) [expr 1.*$y/$yMax] set X2Query $X2 set n 0 lappend LesTextesAssocies "" } $K create line $X1 $y $X2 $y -fill black set bdQ [format "%7d" $dQ] set bfQ [format "%7d" $fQ] set bdC [format "%7d" $dC] set bfC [format "%7d" $fC] set blQ [format "%7d" [set Long($Query)]] set blC [format "%7d" [set Long($Cible)]] set baQ [format "%7d" [set Debut($Query)]] set bzQ [format "%7d" [set Fin($Query)]] set baC [format "%7d" [set Debut($Cible)]] set bzC [format "%7d" [set Fin($Cible)]] set bFraction [format "%11s" $Fraction] set BeauTexteQuery "$Query $bFraction $blQ $bdQ-$bfQ $baQ $bzQ" set TexteQuery "$Query $Fraction [set Long($Query)] $dQ-$fQ [set Debut($Query)] [set Fin($Query)]" set TexteCible "$Cible [string repeat " " [string length $Fraction]] [set Long($Cible)] $dC-$fC [set Debut($Cible)] [set Fin($Cible)]" set BeauTexteCible "$Cible $blC $bdC-$bfC $baC $bzC" set LesTags [list "$TexteQuery" "\n$TexteCible" "Coeur"] set Texte [format "%2.2d %s" [incr n] $Cible] $K create text [expr $X2Query+100] $y -text $Texte -anchor w -font {Courier 4} lappend LesTextesAssocies "[format %2d $n] $BeauTexteQuery $BeauTexteCible" set X1 [expr $oC+$dC-$aC] set X2 [expr $oC+$fC-$aC] set X1 [expr $X1/24.] set X2 [expr $X2/24.] $K create line $X1 $y $X2 $y -fill $CouleurAuSens -width 3 -tag $LesTags } incr y [expr 5*$dy] $K create line 0 $y 24000 $y -fill grey incr y [expr 5*$dy] } SauveLesLignes $LesTextesAssocies dans "$RepertoireDuGenome/textesassocies" regsub {\.canvas} $K "" FK Gonfle $FK all 0.2 0.2 BoutonneLaFenetre $FK "Coucou" "puts coucou" $K bind "Coeur" <1> "AfficheLeBlastNDuContig $K %x %y" $K bind "Coeur" <2> "SauteSurCible $K %x %y" $K bind "Coeur" "EntreDansCoeur $K %x %y" $K bind "Coeur" "SortDeCoeur $K %x %y" if {$OnVeutLeDotPlot} { set PlottePourBlastN 0 Plotte $Nous $Vous $NosPos $VosPos unset PlottePourBlastN } } proc TotalWSize {win} { set top [winfo toplevel $win] wm geometry $top +10+10 update idletasks # Recuperation geometrie (avec decoration) # Scan de la geometrie pour extraire les champs set g [wm geometry $top] scan $g "%dx%d%d%d" w h x y set w [winfo width $top] set h [winfo height $top] # Position absolue de la fenetre set tx [winfo rootx $top] set ty [winfo rooty $top] # Epaisseur de la bordure set borderw [expr {$tx-$x}] # Hauteur de la barre de titre set titleh [expr {$ty-$y}] #On peut alors, en supposant que la bordure est la #meme a gauche a droite et en bas, et que la barre # de titre est en haut, "deviner" les dimensions # totales du toplevel set totalwidth [expr {$w + 2*$borderw}] set totalheight [expr {$h + $titleh + $borderw}] update return [list $totalwidth $totalheight] } proc TouchePour {Clavier {Texte ""} {Commande ""} {Action ""} {Couleur ""}} { global TouchePour if {[regexp -nocase "GetPostpone" $Clavier]} { if { ! [info exists TouchePour(Postpone)]} { set TouchePour(Postpone) {} } set Memo $TouchePour(Postpone) if {[regexp -nocase "Reset" $Clavier]} { set TouchePour(Postpone) {} set TouchePour(ClavierCourant) "" } return $Memo } if { ! [info exists TouchePour(ClavierCourant)]} { set TouchePour(ClavierCourant) "" } set CC $Clavier if {[regexp "^<" $CC]} { set CC $TouchePour(ClavierCourant) } else { set TouchePour(ClavierCourant) $CC } if {$CC=="Postpone"} { if {[regexp "^<" $Clavier]} { lappend TouchePour(Postpone) [list $Clavier $Texte $Commande $Action $Couleur] } else { lappend TouchePour(Postpone) [list $Texte $Commande $Action $Couleur] } return $TouchePour(Postpone) } if {$Texte=="ReAcceptAll" && [info exists TouchePour($CC,RefuseAll)]} { unset TouchePour($CC,RefuseAll) return "" } if {$Texte=="RefuseAll"} { set TouchePour($CC,RefuseAll) 1 } if {[info exists TouchePour($CC,RefuseAll)]} { return "" } #rR if {[PourWscope]} { return [TouchePourWscope $Clavier $Texte $Commande $Action $Couleur] } #rR #????? if {[regexp "NoWeb" $Action]} { return "" } if {[regexp "^<" $Clavier]} { set Bouton [set TouchePour(BoutonCourant)] set NewTexte [lindex [$Bouton configure -text] 4] append NewTexte $Texte $Bouton configure -text $NewTexte bind $Bouton $Clavier $Commande return $Bouton } if {$Texte=="NouvelleCouleur"} { set TouchePour($Clavier,Couleur) $Commande return [set TouchePour($Clavier,Couleur)] } if {$Texte=="NouvelleGamme"} { if {[PourWscope]} { return } if { ! [info exists TouchePour($Clavier,Gamme)]} { set TouchePour($Clavier,Gamme) -1 } set Gamme [incr TouchePour($Clavier,Gamme)] set DestFrame "$Clavier.gamme$Gamme" frame $DestFrame pack $DestFrame -side "left" -fill x -pady 0 -anchor "n" set TouchePour($Clavier,DestFrame) $DestFrame return $DestFrame } if {$Action=="NoWeb"} { set NoWeb 1 } else { set NoWeb 0 } if {$NoWeb && [PourWscope]} { return "" } if { ! [info exists TouchePour($Clavier,nTouches)]} { set TouchePour($Clavier,nTouches) -1 } if { ! [info exists TouchePour($Clavier,Couleur)]} { set TouchePour($Clavier,Couleur) "grey" } set B [incr TouchePour($Clavier,nTouches)] if {$Couleur==""} { set Couleur [set TouchePour($Clavier,Couleur)] } set Bouton "$Clavier.touche$B" set WidthButton 15 if {[regexp "\.board\." $Bouton]} { set WidthButton 25 } button $Bouton -text $Texte -background $Couleur -foreground black -relief raise -width $WidthButton -height 1 -pady 0 bind $Bouton <1> $Commande if { ! [PourWscope]} { pack $Bouton -in [set TouchePour($Clavier,DestFrame)] -side "top" -expand 1 } set TouchePour(BoutonCourant) $Bouton return $Bouton } proc TouchePourWscope {QuoiOuClavier {QuiOuTexte ""} {Commande ""} {Maniere ""} {Couleur ""}} { global TouchePourWscope #rR TouchePourWscope est appele au fur et a mesure de la contruction des boutons par AfficheVariable #rR il sera interroge ensuite pour creer la WebForm #rR et puis pour traiter l'appel utilisateur #rR Finalement detruit par Dismiss si tout est fait dans les regles de l'art #rR cas ou il faut rendre qq chose ************************************************************************* set Quoi $QuoiOuClavier set Qui $QuiOuTexte set Retour "OnNeDemandeRien" if {[regexp "LesInfosDuBouton" $Quoi]} { set Bouton $Qui set Fenetre "" regexp {_[^_]+} $Bouton Fenetre set Retour "" if {[info exists TouchePourWscope($Fenetre,$Bouton)]} { set Retour $TouchePourWscope($Fenetre,$Bouton) } return $Retour } if {[regexp "LesBoutonsDeLaFenetre" $Quoi]} { set Fenetre $Qui if {[info exists TouchePourWscope($Fenetre,Boutons)]} { set Retour $TouchePourWscope($Fenetre,Boutons) } } if {[regexp "RemiseAZero" $Quoi]} { set Fenetre $Qui if {[info exists TouchePourWscope($Fenetre)]} { foreach k $TouchePourWscope($Fenetre) { if {[info exists TouchePourWscope($Fenetre,$k)]} { unset $TouchePourWscope($Fenetre,$k) } } unset TouchePourWscope($Fenetre) } return $Retour } if {$Retour!="OnNeDemandeRien"} { return $Retour } #rr fin cas rendre qq chose ******************************************************************************** set Clavier $QuoiOuClavier regsub -all {[\.\-]} $Clavier "_" Clavier if { ! [info exists TouchePourWscope(IndexTouche)]} { set TouchePourWscope(IndexTouche) 0 } incr TouchePourWscope(IndexTouche) set Texte $QuiOuTexte if {[regexp "NoWeb" $Maniere]} { return "" } set Fenetre "" if {[info exists TouchePourWscope(FenetreCourante)]} { set Fenetre $TouchePourWscope(FenetreCourante) } if {[regexp {_[^_]+} $Clavier FenetreDuClavier]} { set Fenetre $FenetreDuClavier } set TouchePourWscope(FenetreCourante) $Fenetre if {[regexp {^<([^>]+)>} $Clavier Match NumTouche]} { set Clavier $TouchePourWscope(ClavierCourant) append Clavier $NumTouche } else { set TouchePourWscope(ClavierCourant) $Clavier append Clavier "1" } append Clavier "_$TouchePourWscope(IndexTouche)" if {$Texte=="NouvelleGamme"} { lappend TouchePourWscope($Fenetre,Boutons) "NouvelleGamme" return "" } if {$Texte=="NouvelleCouleur"} { set TouchePourWscope(Couleur) $Commande return $TouchePourWscope(Couleur) } if {$Couleur==""} { if { ! [regexp {^ */} $Texte] && [info exists TouchePourWscope(PropreCouleur)]} {unset TouchePourWscope(PropreCouleur) } if { ! [info exists TouchePourWscope(Couleur)]} { set TouchePourWscope(Couleur) "red" } set Couleur $TouchePourWscope(Couleur) } else { if { ! [regexp {^ */} $Texte]} { set TouchePourWscope(PropreCouleur) $Couleur } } if {[info exists TouchePourWscope(PropreCouleur)]} { set Couleur $TouchePourWscope(PropreCouleur) } set LesInfosDuBouton [list $Clavier $Texte $Commande $Maniere $Couleur] set TouchePourWscope($Fenetre,$Clavier) $LesInfosDuBouton lappend TouchePourWscope($Fenetre,Boutons) $LesInfosDuBouton return $Clavier } proc TouchePressee {w t} { global LSSeqlab LNSeqlab set idx [$w index] lassign [split $idx ,] il ic set s [string trim [lindex $LNSeqlab $il]] if {$s eq ""} {return} set sq [lindex $LSSeqlab $il] set sq [lreplace $sq $ic $ic [string toupper $t]] lset LSSeqlab $il $sq $w chars $il,[expr {$ic+1}] $t return } proc ToujoursFaire {CurGeno} { global FichierAFaire global FichierDejaFait global CurrentGenome set Pointeuse 0 set Attente 2000 set MaxIdle [expr 1000*60*15] while { 1 } { incr Pointeuse $Attente if {[file exists $FichierAFaire]} { set Pointeuse 0 FaireAFaire continue } if {$Pointeuse > $MaxIdle} { exit } after $Attente } } proc TourneArbreEntier {AId rot} { global Abr set t [set Abr(Arbre,$AId)] foreach e [$t nodes] { if {[$t keyexists $e theta]} { set th [$t get $e theta] $t set $e theta [expr {$th+$rot}] } if {[$t keyexists $e oldtheta]} { set th [$t get $e oldtheta] $t set $e oldtheta [expr {$th+$rot}] } } # TransformationCartesienne $AId root # AjusteCoordonneesInit $AId # ReAjusteCoordonnees $AId return } proc TourneBoite {x1 y1 x2 y2 deltaA} { # ramene a l'origine, tourne et revient # Angle en RADIANS !! set cd [expr {cos($deltaA)}] set sd [expr {sin($deltaA)}] set xp [expr {$x2-$x1}] set yp [expr {$y2-$y1}] set x [expr {$xp*$cd-$yp*$sd}] set y [expr {$xp*$sd+$yp*$cd}] set xf [expr {$x+$x1}] set yf [expr {$y+$y1}] return [list $xf $yf] } proc TourneBoiteD {x1 y1 x2 y2 deltaA} { # ramene a l'origine, tourne et revient # Angle en DEGRES !! # -------- set cd [expr {cos($deltaA*[Pi]/180.)}] set sd [expr {sin($deltaA*[Pi]/180.)}] set xp [expr {$x2-$x1}] set yp [expr {$y2-$y1}] set x [expr {$xp*$cd-$yp*$sd}] set y [expr {$xp*$sd+$yp*$cd}] set xf [expr {$x+$x1}] set yf [expr {$y+$y1}] return [list $xf $yf] } proc TourneFourmi {tag} { global PAD TFB lassign [CentreFourmi $tag] xm ym set ov "" foreach elt [$PAD find withtag $tag] { if {[$PAD type $elt] == "oval"} { set ov $elt continue } set Lc [$PAD coords $elt] set angTot [BonAngle [expr {$TFB($tag,angle) - $TFB($tag,oldAng)}]] set Lc [TourneListe $xm $ym $angTot $Lc] #set Lc [TourneListe $xm $ym [expr {-1.*$TFB($tag,oldAng)}] $Lc] #set Lc [TourneListe $xm $ym $TFB($tag,angle) $Lc] $PAD coords $elt {*}$Lc } if {$ov != ""} { BouleSurCorps $tag $ov } set TFB($tag,oldAng) $TFB($tag,angle) return } proc TourneLaListeAutour {Liste CentreX CentreY AngleDelta} { Wup "Returns the rotated list" set PI 3.14159 foreach {X Y} $Liste { set Angle [AngleDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY] set Rayon [RayonDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY] set NouvelAngle [Entre0Et2PI [expr $Angle+$AngleDelta]] lappend Sortie [expr $CentreX+$Rayon*cos($NouvelAngle)] lappend Sortie [expr $CentreY+$Rayon*sin($NouvelAngle)] } return $Sortie } proc TourneListe {xr yr ang Lc} { set cd [expr {cos($ang*[Pi]/180.)}] set sd [expr {sin($ang*[Pi]/180.)}] set Lout [list] foreach {x2 y2} $Lc { set xp [expr {$x2 - $xr}] set yp [expr {$y2 - $yr}] set x [expr {$xp*$cd-$yp*$sd}] set y [expr {$xp*$sd+$yp*$cd}] set xf [expr {round($x + $xr)}] set yf [expr {round($y + $yr)}] lappend Lout $xf $yf } return $Lout } proc TousAMemeTaille {Path tailleLimite {Organism Homo_sapiens} {bigzips bigZips200603}} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TousA$tailleLimite: Start" set FichierIn [open "$Path.coord" "r"] set FichierOut [open "$Path.tfa" "w"] set FichierOutMasked [open "$Path.masked.tfa" "w"] set FichierOutMaskedPure [open "$Path.pure.tfa" "w"] set FichierOutMaskedPureSeq [open "$Path.pure.seq" "w"] set reads 0 set written1 0 set written2 0 set pure 0 while { [gets $FichierIn LigneIn] >=0 } { incr reads ScanLaListe $LigneIn chrom start end summit tags peak fold set length [expr $end - $start + 1] Espionne "Sequence $reads" if { $length < $tailleLimite} { incr written1 set extend [expr int(($tailleLimite - $length)/2)] set extendStart [expr $start - $extend] set extendEnd [expr $end + $extend] set extendLength [expr $length + 2 * $extend] regsub -all -nocase "chr" $chrom "" chrom set header ">Seq$reads.chr$chrom:$extendStart-$extendEnd.$summit.$tags.$peak.$fold" set sequence [BoutAdnDeUcscBoost $extendStart $extendEnd "F" $Organism $chrom $bigzips] } else { incr written2 regsub -all -nocase "chr" $chrom "" chrom set header ">Seq$reads.chr$chrom:$start-$end.$summit.$tags.$peak.$fold" set sequence [BoutAdnDeUcscBoost $start $end "F" $Organism $chrom $bigzips] set extendStart $start set extendEnd $end } regsub -all {[a t c g]} $sequence "N" sequenceMasked if {[regexp {[A T C G]} $sequenceMasked]} { puts $FichierOutMaskedPure [formatFasta $header $sequenceMasked] set header ">chr$chrom:$extendStart-$extendEnd" puts $FichierOutMaskedPureSeq $header puts $FichierOutMaskedPureSeq $sequenceMasked incr pure } puts $FichierOut [formatFasta $header $sequence] puts $FichierOutMasked [formatFasta $header $sequenceMasked] } close $FichierIn close $FichierOut close $FichierOutMasked close $FichierOutMaskedPure set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TousA$tailleLimite: Lus = $reads" Espionne "$timestamp|TousA$tailleLimite: Ecrit<$tailleLimite = $written1" Espionne "$timestamp|TousA$tailleLimite: Ecrit>=$tailleLimite = $written2" Espionne "$timestamp|TousA$tailleLimite: Pure = $pure" Espionne "$timestamp|TousA$tailleLimite: End" } proc TousFreres {} { global db InitTaxDB $db eval {begin transaction} set Lpere [$db eval {select distinct(Parent) from taxonomy where Rank="Species"}] foreach id $Lpere { set Lrk [$db eval {select distinct(Rank) from taxonomy where Parent=$id}] if {[llength $Lrk] > 1} { puts "$id $Lrk" } } $db eval {commit} exit } proc TousLesAncetresEtLesDescendantsGODesGO {LesGO} { return [concat [TousLesAncetresGODesGO $LesGO] [TousLesDescendantsGODesGO $LesGO]] } proc TousLesAncetresGO {Type Individu {TousLesAncetres ""}} { set Individu [string toupper $Individu] set Individu [GODB Type $Type GOSynonyme $Individu GODeRef] set LesParents [GODB Type $Type GO $Individu LesParents] set LesConstituants [GODB Type $Type GO $Individu LesConstituants] set TousLesParents [concat [GODB Type $Type GO $Individu LesParents] [GODB Type $Type GO $Individu LesConstituants]] if {![info exists TousLesAncetres]} {set TousLesAncetres {}} foreach Parent $TousLesParents { if {[GODB Exists Type $Type GOSynonyme $Parent GODeRef]} { set Parent [GODB Type $Type GOSynonyme $Parent GODeRef] } lappend TousLesAncetres $Parent set TousLesAncetres [TousLesAncetresGO $Type $Parent $TousLesAncetres] } return [ElimineLesRedondancesDansUneListe $TousLesAncetres] } proc TousLesAncetresGODesGO {LesGO} { set LesAncetres {} foreach GO $LesGO { if {[info exists TabTmp($GO)]} {continue} foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {[info exists TabTmp($GO)]} {continue} foreach GOPere [TousLesAncetresGO $Type $GO] { if {[info exists TabTmp($GOPere)]} {continue} set TabTmp($GOPere) 1 lappend LesAncetres $GOPere } } } if {[info exists TabTmp]} {unset TabTmp} return [ElimineLesRedondancesDansUneListe $LesAncetres] } proc TousLesAncetresOntologiques {Type Individu {TousLesAncetres ""}} { set Individu [string toupper $Individu] if {[OntoExists $Individu MonJumeau]} {set Individu [Onto $Individu MonJumeau]} if {![TypeOntologieExiste $Type]} { set Type [Onto $Individu Type] } set TousLesParents [concat [Onto $Type $Individu LesParents] [Onto $Type $Individu LesConstituants]] if {![info exists TousLesAncetres]} {set TousLesAncetres {}} foreach Parent $TousLesParents { if {[OntoExists $Parent MonJumeau]} {set Parent [Onto $Parent MonJumeau]} lappend TousLesAncetres $Parent set TousLesAncetres [TousLesAncetresOntologiques $Type $Parent $TousLesAncetres] } return [ElimineLesRedondancesDansUneListe $TousLesAncetres] } proc TousLesAscendantsGO {GO} { set ascendants {} set monType [Onto $GO "Type"] set mesParents [Onto $monType $GO "LesParents"] foreach parent $mesParents { set type [Onto $parent "Type"] set niv [lsort -unique [Onto $type $parent "LesNiveaux"]] # garde seulement la premiere def set def [lindex [Onto $type $parent "LesDefinitions"] 0] set parents [Onto $type $parent "LesParents"] if {$niv != 0} { set ascendants [concat $ascendants [TousLesAscendantsGO $parent]] lappend ascendants [list $parent $type $niv $def $parents] } } return [lsort -dictionary -index 2 [lsort -unique $ascendants]] } proc TousLesBlastsContreAffy {Rep1 Rep2} { foreach PAB [ListeDesPABs] { set AccessmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $PAB Organisme "Homo sapiens" "mRNA" Access] if {$AccessmRNAHuman==""} { #blastn nuctfa contre affytarget if {![file exists "$Rep1/$PAB"]} { BlastNNuctfaContreBanqueAffy $PAB $Rep1 } } else { #blastn mrna contre affytarget if {![file exists "$Rep2/$PAB"]} { BlastNmRNAHumanContreBanqueAffy $PAB $Rep2 } } } } proc TousLesBlastsContreAffy945 {Rep1 Rep2 Rep3} { foreach Nom [ListeDesPABs] { set Banque "[GscopeDatabaseDir AffyTarget]/banques/AffyTarget" set FichiermRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {[file exists $FichiermRNA]} { #blastn mrna contre affytarget BlastNmRNAHumanContreBanqueAffy $Nom $Rep1 continue } elseif {[file exists $FichierProttfa]} { set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] set H 0 if {[regexp "from CONTIG" $EnteteProttfa]} { if {[regexp "from Homo sapiens from CONTIG" $EnteteProttfa]} {set H 1} } elseif {[regexp "from Homo sapiens" $EnteteProttfa] || [regexp "from mitochondrion Homo" $EnteteProttfa]} {set H 1} if {$H==1} { set FichierBlast "$Rep2/$Nom" if {![file exists $Rep2]} {file mkdir $Rep2} if {[file exists $FichierBlast]} {continue} Espionne "Je lance $FichierProttfa en TblastN contre $Banque" set FichierBlastTmp [TmpFile] set FichierBlastTmp [TBlastNDuFichier $FichierProttfa $Banque 1 $FichierBlastTmp] if {[file exists $FichierBlastTmp]} { File rename -force $FichierBlastTmp $FichierBlast } continue } } BlastNNuctfaContreBanqueAffy $Nom $Rep3 } } proc TousLesBlastsContreAffy951 {Rep1 Rep2 Rep3} { foreach Nom [ListeDesPABs] { set Banque "[GscopeDatabaseDir AffyTarget]/banques/AffyTarget" set FichiermRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$AccBestmRNAHuman!="" && [file exists $FichiermRNA]} { #blastn mrna contre affytarget BlastNmRNAHumanContreBanqueAffy $Nom $Rep1 continue } elseif {$AccBestProtHuman!="" && [file exists $FichierProttfa]} { set FichierBlast "$Rep2/$Nom" if {![file exists $Rep2]} {file mkdir $Rep2} if {[file exists $FichierBlast]} {continue} Espionne "Je lance $FichierProttfa en TblastN contre $Banque" set FichierBlastTmp [TmpFile] set FichierBlastTmp [TBlastNDuFichier $FichierProttfa $Banque 1 $FichierBlastTmp] if {[file exists $FichierBlastTmp]} { File rename -force $FichierBlastTmp $FichierBlast } continue } BlastNNuctfaContreBanqueAffy $Nom $Rep3 } } proc TousLesCodesAffy {} { set LesCodes {} foreach PAB [ListeDesPABs] { set CodeClone [CodeClone $PAB] #Espionne $CodeClone lappend LesCodes "$PAB\t$CodeClone" } return $LesCodes } proc TousLesCopainsDesCompulsory {} { #attention certain ont pas gn set compulsory 0 set LesGns {} set Tot 0 #set Repertoire "[RepertoireDuGenome]/transcriptomique/LesCopainsClusterAll" set Repertoire "[RepertoireDuGenome]/transcriptomique/LesCopainsClusterSsBigClu" foreach Nom [ListOfCompulsoryGenes] { set LesGnsDuNom {} #Espionne "$Nom" incr compulsory foreach File [glob -nocomplain "$Repertoire/${Nom}-*-lesbestcops"] { #Espionne "File $File" if {[regexp "AFFX" $File]} {Espionne "Attention1"} set premiereligne 1 foreach Ligne [LesLignesDuFichier $File] { if {$premiereligne} { set premiereligne 0 scan $Ligne "%s %s" nbdecombinaisoncompul bidon set TabCompul($Nom) $nbdecombinaisoncompul } set LesMots [split $Ligne " "] set nb [lindex $LesMots 0] if {$nb < 4} {continue} #Espionne "nb $nb" set EviPs [lindex $LesMots 1] if {[regexp "AFFX" EviPs]} {Espionne "Attention2"} set LesEviPs [split $EviPs "-"] set Boite [lindex $LesEviPs 0] set Gn [lindex $LesMots 2] lappend LesGnsDuNom $Gn #Espionne "$Boite $Gn" lappend LesGns $Gn } } set LesGnsDuNom [ListeSsElmtVide $LesGnsDuNom] set LesGnsDuNom [lsort -unique $LesGnsDuNom] set longLesGnsDuNom [llength $LesGnsDuNom] incr Tot $longLesGnsDuNom set TabLongLesGnsDuNom($Nom) $longLesGnsDuNom } set Max 0 set Min 20 foreach {cle val} [array get TabCompul] { if {$val>$Max} {set Max $val} if {$val<$Min} {set Min $val} #Espionne "$cle $val" } Espionne "MaxCombinaison $Max" Espionne "MinCombinaison $Min" set LesResults {} foreach {clef valeur} [array get TabLongLesGnsDuNom] { lappend LesResults "$valeur $clef" } set LesResults [lsort -integer -index 0 -decreasing $LesResults] foreach x $LesResults { #Espionne "$x" } set LesGns [ListeSsElmtVide $LesGns] set LesGns [lsort -unique $LesGns] set longLesGns [llength $LesGns] Espionne $LesGns Espionne "compulsory $compulsory" Espionne "longLesGns $longLesGns" } proc TousLesCopainsDesCompulsoryDifferentSeuil {} { #le seuil etablie pour chaque compulsory est dependant du nbdecombinaison set compulsory 0 set LesGns {} set Tot 0 set Repertoire "[RepertoireDuGenome]/transcriptomique/LesCopainsClusterSsBigClu" foreach Nom [ListOfCompulsoryGenes] { set LesGnsDuNom {} Espionne "$Nom" incr compulsory foreach File [glob -nocomplain "$Repertoire/${Nom}-*-lesbestcops"] { Espionne "File $File" if {[regexp "AFFX" $File]} {Espionne "Attention1"} set premiereligne 1 foreach Ligne [LesLignesDuFichier $File] { if {$premiereligne} { set premiereligne 0 scan $Ligne "%s %s" nbdecombinaisoncompul bidon set TabCompul($Nom) $nbdecombinaisoncompul } set LesMots [split $Ligne " "] set nb [lindex $LesMots 0] if {$nbdecombinaisoncompul<=5} { #prend que ceux dont le nb=nbdecombinaisoncompul if {$nb != $nbdecombinaisoncompul} {continue} } else { if {$nb < expr $nbdecombinaisoncompul} {continue} } Espionne "nb $nb" set EviPs [lindex $LesMots 1] if {[regexp "AFFX" EviPs]} {Espionne "Attention2"} set LesEviPs [split $EviPs "-"] set Boite [lindex $LesEviPs 0] set Gn [lindex $LesMots 2] lappend LesGnsDuNom $Gn Espionne "$Boite $Gn" lappend LesGns $Gn } } set LesGnsDuNom [ListeSsElmtVide $LesGnsDuNom] set LesGnsDuNom [lsort -unique $LesGnsDuNom] set longLesGnsDuNom [llength $LesGnsDuNom] incr Tot $longLesGnsDuNom set TabLongLesGnsDuNom($Nom) $longLesGnsDuNom } set Max 0 set Min 20 foreach {cle val} [array get TabCompul] { if {$val>$Max} {set Max $val} if {$val<$Min} {set Min $val} #Espionne "$cle $val" } puts "MaxCombinaison $Max" puts "MinCombinaison $Min" set LesResults {} foreach {clef valeur} [array get TabLongLesGnsDuNom] { lappend LesResults "$valeur $clef" } set LesResults [lsort -integer -index 0 -decreasing $LesResults] foreach x $LesResults { Espionne "$x" } set LesGns [ListeSsElmtVide $LesGns] set LesGns [lsort -unique $LesGns] set longLesGns [llength $LesGns] Espionne $LesGns Espionne "compulsory $compulsory" Espionne "longLesGns $longLesGns" } proc TousLesCopainsDesRetinalFate {{Liste ""}} { set retinalfate 0; set LesGns {} if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set Repertoire "[RepertoireDuGenome]/transcriptomique/LesCopainsClusterSsBigClu" foreach Nom $Liste { set trouve 0 set LesGnsDuNom {} set Status [ExtraitInfo $Nom "Status"] set StatusCompOpt [string range $Status 0 [expr [string first "\(" $Status] - 1]] if {$StatusCompOpt=="optional"} {continue} set LesElmt [split $Status "\(\),"] foreach elmt $LesElmt { if {$elmt=="retinal_fate"} {set trouve 1} } if {!$trouve} {continue} incr retinalfate foreach File [glob -nocomplain "$Repertoire/$Nom*-lesbestcops"] { set premiereligne 1 foreach Ligne [LesLignesDuFichier $File] { if {$premiereligne} { set premiereligne 0 scan $Ligne "%s %s" nbdecombinaisoncompul bidon set TabCompul($Nom) $nbdecombinaisoncompul continue } set LesMots [split $Ligne " "] set nb [lindex $LesMots 0] if {$nb<8} {continue} #Espionne "nb $nb" set EviPs [lindex $LesMots 1] set LesEviPs [split $EviPs "-"] set Boite [lindex $LesEviPs 0] set Gn [lindex $LesMots 2] lappend LesGnsDuNom $Gn #Espionne "$Boite $Gn" lappend LesGns $Gn } } set LesGnsDuNom [ListeSsElmtVide $LesGnsDuNom] set LesGnsDuNom [lsort -unique $LesGnsDuNom] set longLesGnsDuNom [llength $LesGnsDuNom] #Espionne "LesGnsDuNom $LesGnsDuNom" #Espionne "longLesGnsDuNom $longLesGnsDuNom" set TabLongLesGnsDuNom($Nom) $longLesGnsDuNom } set Max 0 set Min 20 foreach {cle val} [array get TabCompul] { if {$val>$Max} {set Max $val} if {$val<$Min} {set Min $val} #Espionne "$cle $val" } Espionne "MaxCombinaison $Max" Espionne "MinCombinaison $Min" set LesResults {} foreach {clef valeur} [array get TabLongLesGnsDuNom] { lappend LesResults "$valeur $clef" } set LesResults [lsort -integer -index 0 -decreasing $LesResults] foreach x $LesResults { Espionne "$x" } set LesGns [ListeSsElmtVide $LesGns] set LesGns [lsort -unique $LesGns] Espionne $LesGns set longLesGns [llength $LesGns] Espionne "retinalfate $retinalfate" Espionne "longLesGns $longLesGns" } proc TousLesDescendantsGO {Type Individu {TousLesDescendants ""}} { set Individu [string toupper $Individu] set Individu [GODB Type $Type GOSynonyme $Individu GODeRef] set TousLesEnfants [concat [GODB Type $Type GO $Individu LesEnfants] [GODB Type $Type GO $Individu LesContributions]] if {![info exists TousLesDescendants]} {set TousLesDescendants {}} foreach Enfant $TousLesEnfants { set Enfant [string toupper $Enfant] if {[GODB Exists Type $Type GOSynonyme $Enfant GODeRef]} {set Enfant [GODB Type $Type GOSynonyme $Enfant GODeRef]} lappend TousLesDescendants $Enfant set TousLesDescendants [TousLesDescendantsGO $Type $Enfant $TousLesDescendants] } return [ElimineLesRedondancesDansUneListe $TousLesDescendants] } proc TousLesDescendantsGODesGO {LesGO} { set LesDescendants {} foreach GO $LesGO { if {[info exists TabTmp($GO)]} {continue} foreach Type [GODB GO $GO LesTypes] { set GO [GODB Type $Type GOSynonyme $GO GODeRef] if {[info exists TabTmp($GO)]} {continue} foreach GOFils [TousLesDescendantsGO $Type $GO] { if {[info exists TabTmp($GOFils)]} {continue} set TabTmp($GOFils) 1 lappend LesDescendants $GOFils } } } if {[info exists TabTmp]} {unset TabTmp} return [ElimineLesRedondancesDansUneListe $LesDescendants] } proc TousLesDescendantsOntologiques {Type Individu {TousLesDescendants ""}} { set Individu [string toupper $Individu] if {[OntoExists $Individu MonJumeau]} {set Individu [Onto $Individu MonJumeau]} if {![TypeOntologieExiste $Type]} { set Type [Onto $Individu Type] } set TousLesEnfants [concat [Onto $Type $Individu LesEnfants] [Onto $Type $Individu LesContributions]] if {![info exists TousLesDescendants]} {set TousLesDescendants {}} foreach Enfant $TousLesEnfants { set Enfant [string toupper $Enfant] if {[OntoExists $Enfant MonJumeau]} {set Enfant [Onto $Enfant MonJumeau]} lappend TousLesDescendants $Enfant set TousLesDescendants [TousLesDescendantsOntologiques $Type $Enfant $TousLesDescendants] } return [ElimineLesRedondancesDansUneListe $TousLesDescendants] } proc TousLesEMBLtoGCG {{Rep ""} {Dest ""}} { global RepertoireDuGenome if {$Rep==""} { set Rep "$RepertoireDuGenome/nucembl" } if {$Dest==""} { regsub "embl" $Rep "" BaseRep set Dest "${BaseRep}gcg" } if { ! [OuiOuNon "Do I create the files in $Dest ?"]} { return } if {[file exists $Dest]} { File mkdir $Dest } foreach Fichier [glob -nocomplain "$Rep/*"] { set Nom [file tail $Fichier] set Sortie {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^SQ " $Ligne]} { append Ligne " .." } lappend Sortie $Ligne } SauveLesLignes $Sortie dans "$Dest/$Nom" } FaireLire "Please do following : \ncd $Dest\nand run the gcg command reformat with *" } proc TousLesJumeauxDuPAB {PAB FichierClusters} { foreach Ligne [LesLignesDuFichier $FichierClusters] { if {$Ligne==""} {continue} set Ligne [split $Ligne " "] foreach Nom $Ligne { if {$Nom==$PAB} { return $Ligne } } } } 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 TousLesMiniBootstrap {} { global RepertoireDuGenome foreach FichierPhylo [glob "$RepertoireDuGenome/bootstrap/*"] { MiniBootstrap $FichierPhylo } } proc TousLesPremiersDuClade {Nom LesOrganismesInteressants {Seuil ""} {GetWhat ""}} { if {$GetWhat==""} { set GetWhat "Show" } if {$Seuil==""} { set Seuil 0.001 } set LesOrgaTrie [LesLignesDuFichier [GscopeFile $Nom "taxobla"]] if {$LesOrgaTrie=={}} { return "The file taxobla/$Nom does not exist" } set LaSortie {} foreach Ligne $LesOrgaTrie { lassign [split $Ligne "\t"] Expect Score TaxId OS Reste set TaxId [string trim $TaxId] set OS [string trim $OS] set Reste [string trim $Reste] if {[lsearch $LesOrganismesInteressants $TaxId]<0} { continue } set Expect [string trim $Expect] if {$Expect > $Seuil} { break } lappend LaSortie $Ligne } if {$LaSortie=={}} { return "" } if {[regexp "/" $GetWhat] || [string equal -nocase "Save" $GetWhat]} { set FichierPremiers $GetWhat if {[string equal -nocase "Save" $GetWhat]} { set FichierPremiers [GscopeFile $Nom premier] } return [SauveLesLignes $LaSortie dans $FichierPremiers] } if {[string equal -nocase "GetList" $GetWhat]} { return $LaSortie } if {[string equal -nocase "GetText" $GetWhat]} { return [join $LaSortie "\n"] } return [AfficheListe $LaSortie] } proc TousLesSegmentsConsecutifs {Liste {JoinCar }} { set LL [llength $Liste] set LesSegments {} foreach N [NombresEntre 1 $LL] { foreach D [NombresEntre 0 [expr $LL-$N]] { set F [expr $D+$N-1] set W [lrange $Liste $D $F] lappend LesSegments [join $W $JoinCar] } } return $LesSegments } proc TousObjetsOff {} { global pgl StrucAVoir set fobj $pgl(frObjc) set Lf [winfo children $fobj] foreach w $Lf { set c [lindex [split $w .] end] if {[string index $c 0] ne "f"} {continue} set nom [string range $c 1 end] foreach e [winfo children $w] { set b [lindex [split $e .] end] if {[string range $b 0 2] ne "bto"} {continue} set o [string trim [$e cget -text]] if {! [$nom _EtatDeObjet $o]} { continue } $nom ObjetOff $o $e configure -foreground red } } update idletasks $pgl(wogl) postredisplay return } proc TousObjetsOn {} { global pgl StrucAVoir set fobj $pgl(frObjc) set Lf [winfo children $fobj] foreach w $Lf { set c [lindex [split $w .] end] if {[string index $c 0] ne "f"} {continue} set nom [string range $c 1 end] foreach e [winfo children $w] { set b [lindex [split $e .] end] if {[string range $b 0 2] ne "bto"} {continue} set o [string trim [$e cget -text]] if {[$nom _EtatDeObjet $o]} {continue} $nom ObjetOn $o $e configure -foreground green1 } } update idletasks $pgl(wogl) postredisplay return } proc TousSens {} { foreach P [Oli "LaListeMerci"] { Espionne $P Espionne [Oli $P "Sens"] } } proc TousToTFA {} { foreach F [glob "*.nuc"] { regsub ".nuc$" $F ".tfa" T regsub ".nuc$" $F "" T if {[file exists "$T.tfa"]} { continue } set TFA [SequenceFormatTFA [ContenuDuFichier $F] ">$T" "gcg"] Espionne [Sauve $TFA dans "$T.tfa"] } exit } proc ToutPourYann {} { # set Sequence [QueLaSequenceDuFichierTFA "/genomics/link/ProGS/prottfa/PGS001"] set Access "P10827" set Site "http://globplot.embl.de/cgiDict.py" set Url $Site append Url "?key=" append Url "process" append Url "&SP_entry=" append Url $Access append Url "&sequence_string=" append Url "" append Url "¶ms=" append Url "RL" append Url "&peak_frame_dis=" append Url 5 append Url "&join_frame_dis=" append Url 4 append Url "&do_smart=" append Url "true" append Url "&peak_frame_dom=" append Url 74 append Url "&join_frame_dom=" append Url 15 append Url "&plot_title=" append Url "titreduplot" append Url "&smooth_frame_1=" append Url 5 append Url "&smooth_frame_2=" append Url 5 set LesLignes {} HttpCopy $Url LesLignes EspionneL $LesLignes SauveLesLignes $LesLignes dans GlobPlotResultat.html # set Sequence [QueLaSequenceDuFic set Site "http://dis.embl.de/cgiDict.py" set LesCVs {} lappend LesCVs "key=process" lappend LesCVs "SP_entry=$Access" lappend LesCVs "sequence_string=" lappend LesCVs "smooth_frame=8" lappend LesCVs "peak_frame=8" lappend LesCVs "join_frame=4" lappend LesCVs "fold_coils=1.20" lappend LesCVs "fold_rem465=1.20" lappend LesCVs "fold_hotloops=1.40" lappend LesCVs "plot_title=" lappend LesCVs "doApplet=true" lappend LesCVs "tango_PH=7.40" lappend LesCVs "tango_T=278.15" lappend LesCVs "tango_I=0.05" lappend LesCVs "tango_TFE=0.00" lappend LesCVs "fold_tango=1.00" set CVs [join $LesCVs "&"] set Url "$Site?$CVs" set LesLignes {} HttpCopy $Url LesLignes EspionneL $LesLignes SauveLesLignes $LesLignes dans DisEmblResultat.html exit } proc ToutSurLesEntetesDeFrag {FichierFrag {Rep ""}} { if {$Rep==""} { set Rep "SameDir" } if {$Rep=="SameDir"} { set Rep "[file dirname $FichierFrag]" } set LesBanques {} foreach Ligne [LesLignesDuFichier $FichierFrag] { regsub {\:} $Ligne " " Ligne scan $Ligne "%s" Banque set LesMots [split $Ligne " "] set Genre [lindex $LesMots 9] set Espece [lindex $LesMots 10] if {[info exists DejaVu($Banque)]} { continue } set DejaVu($Banque) 1 lappend LesBanques $Banque lappend LesOrganismes "$Genre $Espece" } set LesBonnesBanques {} foreach SN $LesBanques O $LesOrganismes { set FN [FNduSNgcg $SN] set LN [LNduSNgcg $SN] if {$FN==""} { FaireLire "$SN inconnu" ; continue } ScanLaListe [split $FN ":"] Dir Fic if {$LN!=$Fic} { FaireLire "FN $FN <> LN $LN" } if {[catch {set VraieDir [exec name $Dir]} Message]} { FaireLire "Problem with 'exec name $Dir'\ I got message \n$Message" continue } set BonRef "" foreach FiRef [glob -nocomplain "$VraieDir/*.ref"] { set Queue [file tail $FiRef] if {[string equal -nocase $Queue "$Fic.ref"]} { set BonRef $FiRef ; break } } if {$BonRef==""} { Warne "$VraieDir/$Fic.ref doen't exist" } set TaxId [TaxIdDuFichierRef $BonRef] set TaxIdDuO [Tax $O] Espionne "$O<$TaxIdDuO>" if {$TaxId==""} { if {$TaxIdDuO==""} { FaireLire "I didn't found a TaxId for\n$BonRef" } set TaxId $TaxIdDuO } set N 7 set TaxIdAuBonNiveau $TaxId while { [incr N -1] } { Espionne "$N $TaxIdAuBonNiveau $TaxIdDuO" if {$TaxIdAuBonNiveau==$TaxIdDuO} { break } set TaxIdAuBonNiveau [Tax $TaxIdAuBonNiveau Parent] } if {0 && $TaxIdAuBonNiveau!=$TaxIdDuO} { FaireLire "$TaxIdDuO is not a parent of $TaxId for \n$BonRef" } lappend LesBonnesBanques "$SN $BonRef $TaxId" set TaxIdDuGenomeComplet($SN) $TaxId set RefDuGenomeComplet($SN) $BonRef } if {[OuiOuNon "Do I save TaxIdDuGenomeComplet ?"]} { set FichierTaxIdDuGenomeComplet "/genomics/link/Common/fiches/taxid_des_genomes_complets" SauveLesLignes [array get TaxIdDuGenomeComplet] dans $FichierTaxIdDuGenomeComplet } if {[OuiOuNon "Do I save RefDuGenomeComplet ?"]} { set FichierRefDuGenomeComplet "/genomics/link/Common/fiches/ref_des_genomes_complets" SauveLesLignes [array get RefDuGenomeComplet] dans $FichierRefDuGenomeComplet } return $LesBonnesBanques } proc TouteLaBalise {Bal {Fichier ""} {Close ""}} { global CanalPourTouteLaBalise FichierPourTouteLaBalise if {$Bal=="CloseFilePlease"} { if {[info exists CanalPourTouteLaBalise]} { close $CanalPourTouteLaBalise unset CanalPourTouteLaBalise unset FichierPourTouteLaBalise } } set CloseFileIfEmpty [string equal $Close "CloseFileIfEmpty"] set CloseFileAfterRead [string equal $Close "CloseFileAfterRead"] if {[info exists FichierPourTouteLaBalise]} { if {$Fichier!="" && $FichierPourTouteLaBalise != $Fichier} { close $CanalPourTouteLaBalise unset CanalPourTouteLaBalise } } if { ! [info exists CanalPourTouteLaBalise] } { set FichierPourTouteLaBalise $Fichier set CanalPourTouteLaBalise [open $FichierPourTouteLaBalise "r"] } if {$Bal=="OpenFilePlease"} { return $CanalPourTouteLaBalise } set LesLignes {} while {[gets $CanalPourTouteLaBalise Ligne] >= 0} { if {[regexp "\<$Bal " $Ligne] || [regexp "\<$Bal *\>" $Ligne]} { set LesLignes [list $Ligne] ; break } } if {$LesLignes=={}} { if {$CloseFileIfEmpty} { if {[info exists CanalPourTouteLaBalise]} { close $CanalPourTouteLaBalise unset CanalPourTouteLaBalise unset FichierPourTouteLaBalise } } return "" } while {[gets $CanalPourTouteLaBalise Ligne] >= 0} { lappend LesLignes $Ligne if {[regexp "" $Ligne]} { break } } if {$CloseFileAfterRead} { if {[info exists CanalPourTouteLaBalise]} { close $CanalPourTouteLaBalise unset CanalPourTouteLaBalise unset FichierPourTouteLaBalise } } return [join $LesLignes "\n"] } proc ToutesLesCombinaisons {LesMots aTabPaires} { upvar $aTabPaires TabPaires if {0} { Wup "Exemple de TabPaires" #Nb maximum de mots A dans une phrase# set TabPaires(A,nMaxParPhrase) 1 set TabPaires(B,nMaxParPhrase) 1 set TabPaires(C,nMaxParPhrase) 1 #Nb maximum de couples des mots A et B dans une phrase# set TabPaires(A,B,n) 3 set TabPaires(B,C,n) 3 } set LesCombinaisons {} foreach Mot [lsort -unique $LesMots] { set LesCombinaisons [ToutesLesCombinaisons_recursifs $Mot $LesMots TabPaires $LesCombinaisons] } return $LesCombinaisons } proc ToutesLesCombinaisons_recursifs {Mot LesMots aTabPaires {LesCombinaisons ""}} { upvar $aTabPaires TabPaires set nCombi [llength $LesCombinaisons] foreach LaCombi $LesCombinaisons { set Combi [join $LaCombi " "] set TabPaires($Combi) 1 } set LesCombinaisonsTmp $LesCombinaisons set LesCombinaisons {} if {![info exists TabPaires($Mot)]} {lappend LesCombinaisons [list $Mot]} foreach LaCombi $LesCombinaisonsTmp { lappend LesCombinaisons $LaCombi set CombiAvecLeNouveauMot "[join $LaCombi " "] $Mot" if {[info exists TabPaires($CombiAvecLeNouveauMot)]} {continue} set nDeCeMot 1 foreach MotPrec $LaCombi {if {$Mot == $MotPrec} {incr nDeCeMot}} if {[info exists TabPaires($Mot,nMaxParPhrase)] && [set TabPaires($Mot,nMaxParPhrase)] < $nDeCeMot} {continue} set MotPrec [lindex $LaCombi end] if {![info exists TabPaires($MotPrec,$Mot,n)]} {continue} lappend LaCombi $Mot lappend LesCombinaisons $LaCombi } if {[ListEqual $LesCombinaisonsTmp $LesCombinaisons]} {return $LesCombinaisons} foreach MotSuiv [lsort -unique $LesMots] { if {$Mot != "" && ![info exists TabPaires($Mot,$MotSuiv,n)]} {continue} set LesCombinaisons [ToutesLesCombinaisons_recursifs $MotSuiv $LesMots TabPaires $LesCombinaisons] } return $LesCombinaisons } proc ToutesLesProcsDeGscope {{file ""}} { global ProcsAuDepart LoadTkAndPackages set PAll [list] set ListeProc [lsort [info procs]] foreach e $ListeProc { if {$e in $ProcsAuDepart} {continue} set a [info args $e] set b [info body $e] set sar "" foreach g $a { if {[info default $e $g Def]} { if {$Def == ""} {set Def "\"\""} if {[regexp " " $Def]} {set Def "\"$Def\""} append sar "{$g $Def} " } else { append sar "$g " } } set sar [string trim $sar] lappend PAll "proc $e {$sar} {" lappend PAll $b lappend PAll "}" lappend PAll "" } if {$file ne ""} { set f [open "LesProcsDeGscope.tcl" w] puts $f [join $PAll \n] close $f } return $PAll } proc ToutesLesRegionsDeLaQuery {aTabBlast FichierBlast BanqueId FichierTFA} { upvar $aTabBlast TabBlast set TailleQ [TailleDeLaQueryDuBlast $FichierBlast] set LesRegionsMasquees {} if { ([file exists $FichierTFA] || $FichierTFA != "") && [EstCeDeLADN $FichierTFA] == 1 } { set LesRegionsMasquees [LesRegionsMasqueesDeLaQuery $FichierTFA] } set LesRegionsDuBlast [LesRegionsDeLaQuerySurLeSubject TabBlast $BanqueId] set TailleS [lindex [lindex $LesRegionsDuBlast 0] 4] set ToutesLesRegions {} foreach UneRegionMasquee $LesRegionsMasquees { lappend UneRegionMasquee "" lappend UneRegionMasquee "" lappend UneRegionMasquee "$TailleS" lappend UneRegionMasquee "N" lappend ToutesLesRegions $UneRegionMasquee } foreach UneRegionDuBlast $LesRegionsDuBlast { set UneRegionDuBlast [linsert $UneRegionDuBlast 2 $TailleQ] lappend ToutesLesRegions $UneRegionDuBlast } set ToutesLesRegions [lsort -increasing -integer -index 0 [lsort -decreasing -integer -index 1 $ToutesLesRegions]] set LesRegionsVidesDeLaQuery [LesRegionsVidesDeLaListe $ToutesLesRegions $TailleQ] foreach UneRegionVide $LesRegionsVidesDeLaQuery { lappend UneRegionVide "" lappend UneRegionVide "" lappend UneRegionVide "$TailleS" lappend UneRegionVide "RAS" lappend ToutesLesRegions $UneRegionVide } set ToutesLesRegions [lsort -increasing -integer -index 0 [lsort -decreasing -integer -index 1 $ToutesLesRegions]] if {$LesRegionsDuBlast != {}} { set LesRegionsOccupeesSurLeSubject {} foreach UneRegion $ToutesLesRegions { if {[lindex $UneRegion 3] == "" || [lindex $UneRegion 4] == ""} {continue} set DS [lindex $UneRegion 3] set FS [lindex $UneRegion 4] set UneRegion [list "$DS" "$FS"] lappend LesRegionsOccupeesSurLeSubject $UneRegion } set LesRegionsVidesDuSubject [LesRegionsVidesDeLaListe $LesRegionsOccupeesSurLeSubject $TailleS] set LesAutresRegions $ToutesLesRegions set ToutesLesRegions {} foreach UneRegionVide $LesRegionsVidesDuSubject { set LaRegion [list "" "" "$TailleQ"] lappend LaRegion [lindex $UneRegionVide 0] lappend LaRegion [lindex $UneRegionVide 1] lappend LaRegion [lindex $UneRegionVide 2] lappend LaRegion "RAS" lappend ToutesLesRegions $LaRegion } foreach UneRegion $LesAutresRegions { lappend ToutesLesRegions $UneRegion } } return $ToutesLesRegions } proc ToutesLesSequencesTFA {Fichier Rep FileSave} { if {![file exists $Fichier]} {return ""} set LesSequences {} foreach LAccess [LesAccessDuFichier $Fichier] { set Access [lindex $LAccess 0] set File "$Rep/${Access}.tfa" if {![file exists $File]} {Espionne "$File does not exist";continue} lappend LesSequences [ContenuDuFichier $File] } Sauve [join $LesSequences "\n"] dans $FileSave return $LesSequences } proc Toutou {X} { Espionne $X } proc Tparva {} { set Dir "/genomics/link/Tparva" set Pep "$Dir/DuTigr/TPA1.pep" set Prefixe "TP" set LesBornes {} set LeTFA {} if {[FileAbsent "$Dir/prottfa"]} { file mkdir "$Dir/prottfa" } if {[FileAbsent "$Dir/fiches"]} { file mkdir "$Dir/fiches" } set Deb 100 set Fin [expr $Deb+300] set Sens "F" foreach Ligne [LesLignesDuFichier $Pep] { if {[regexp ">" $Ligne]} { if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/prottfa/$Nom" } set LesMots [split $Ligne "|"] ScanLaListe $LesMots A T TT D O C X Y set A [string trim $A "> "] regsub "_" $T "" N regsub "TP0" $N "" N set Nom "$Prefixe$N" set LeTFA [list ">$Nom $O $D $C $X $A"] lappend LesBornes ">$Nom $Deb $Fin $Sens" incr Deb 390 set Fin [expr $Deb+300] continue } lappend LeTFA $Ligne } if {$LeTFA!={}} { SauveLesLignes $LeTFA dans "$Dir/prottfa/$Nom" } return [SauveLesLignes $LesBornes dans "$Dir/fiches/bornesdespabs"] } proc TracageFeatureSummary {} { global EFeat LNOrdali Sequences set PAD $EFeat(PAD) $PAD delete all # Liste seq a tracer set Lnoms [list] ; set Lseqs [list] foreach n $LNOrdali { if {$n eq "" || ! $EFeat(LMSeq,$n)} {continue} lappend Lnoms $n lappend Lseqs [set Sequences($n)] lappend Lnaff $EFeat(NSeq,$n) } # nothing to draw if {$Lnoms == {} } {return} set lgnoms [PlusLongEltDe $Lnaff val] set EFeat(WdtNoms) [font measure FontFeat $lgnoms] set EFeat(WdtL) [font measure FontFeat "Z"] set EFeat(HgtL) [lindex [font metrics FontFeat] 5] set OffX 10 ; set OffY 10 # calcule place pour compteur pos set EFeat(WdtCmpt) [expr {[string length [LongueurDeLAlignement]] * $EFeat(WdtL)}] # calcule place pour le texte de seq set nChar [expr {($EFeat(FWidth) - 2*$OffX - $EFeat(WdtNoms) - 2*$EFeat(WdtCmpt) - 3*2)/$EFeat(WdtL)}] set WdtSeq [expr {$nChar * $EFeat(WdtL)}] set d 0 ; set f [expr {$nChar-1}] set slgt [LongueurDeLAlignement] set xPos [expr {$OffX + $EFeat(WdtNoms)}] set yPos $OffY while {$d < $slgt} { if {$f >= $slgt} { set f [expr {$slgt-1}] } # on aligne a droite, on se positionne # a la fin du nom foreach n $Lnoms s $Lseqs naf $Lnaff { $PAD create text $xPos $yPos -anchor ne -justify right -text "$naf" -font FontFeat # DonnePosGS gives ix strting at 1 ! set deb [DonnePosGS $n $d] set fin [DonnePosGS $n $f] incr xPos [expr {2 + $EFeat(WdtCmpt)}] $PAD create text $xPos $yPos -anchor ne -justify right -text "$deb" -font FontFeat incr xPos 2 $PAD create text $xPos $yPos -anchor nw -justify left -text "[string range $s $d $f]" -font FontFeat incr xPos $WdtSeq incr xPos 2 $PAD create text $xPos $yPos -anchor nw -justify left -text "$fin" -font FontFeat incr yPos $EFeat(HgtL) set xPos [expr {$OffX + $EFeat(WdtNoms)}] set yPos [DrawFeatSum $n $xPos $yPos $d $f] } incr d $nChar ; incr f $nChar incr yPos [expr {$EFeat(HgtL)+1}] } lassign [$PAD bbox all] xm ym xx yx set wd [expr {$xx - $xm + 2*$OffX}] set hg [expr {$yx - $ym + 2*$OffY}] $PAD configure -scrollregion [list 0 0 $wd $hg] ShowFeatNote return } proc TraceColBox {x y n col} { set c $::NwOj(Can) set x1 [expr {$x+7}] set y1 [expr {$y-3}] if {$col eq "couldefond"} {set col black} $c create rectangle $x $y1 $x1 $y -fill $col -outline $col -tags [list ColRes Nbr$n] return } proc TraceCylindre {liste QObj la lb col1 col2 {Rd1 0.1} {Rd2 0.1}} { lassign $la x1 y1 z1 lassign $lb x2 y2 z2 set vx [expr {$x2-$x1}] set vy [expr {$y2-$y1}] set vz [expr {$z2-$z1}] set lg [expr {sqrt($vx*$vx+$vy*$vy+$vz*$vz)}] if {$lg == 0.0} { puts "===> lg=0. la = $la lb = $lb" set lg 1. } set al [expr {acos($vz/$lg)*180./acos(-1.)}] if {$vz < 0.0} {set al [expr {-1.*$al}]} set rx [expr {-$vy*$vz}] set ry [expr {$vx*$vz}] set rz 0. glPushMatrix glTranslatef $x1 $y1 $z1 glRotatef $al $rx $ry 0.0 gluCylinder $QObj $Rd1 $Rd2 $lg 32 1 glPopMatrix return } proc TraceHistogramme {LesX LesY {MinX ""} {MaxX ""} {MinY ""} {MaxY ""}} { set LesXTries [lsort -real $LesX] set LesYTries [lsort -real $LesX] if {$MinX eq ""} { set MinX [lindex $LesXTries 0] } if {$MaxX eq ""} { set MaxX [lindex $LesXTries end] } if {$MinY eq ""} { set MinY [lindex $LesYTries 0] } if {$MaxY eq ""} { set MaxY [lindex $LesYTries end] } return } proc TraceLesAxesDePositionPourPromAn {KCanva X Y} { global TabApparitionOuDisparitionDeCetteSelection set Id [$KCanva find withtag current] set MesTags [$KCanva gettags $Id] set ColorIni [lindex $MesTags 2 ] set ColorSel [lindex $MesTags 3 ] set IdDeRef [$KCanva find withtag "GenomicSequence"] set IdCadre [$KCanva find withtag "Cadre" ] if {![info exists TabApparitionOuDisparitionDeCetteSelection($KCanva,$Id)] || [set TabApparitionOuDisparitionDeCetteSelection($KCanva,$Id)] == {}} { set LesCoordsDeRef [$KCanva coords $IdDeRef] set YMinDeRef [lindex $LesCoordsDeRef 1] set YMaxDeRef [lindex $LesCoordsDeRef 3] set LesCoordsDuCadre [$KCanva coords $IdCadre] set XMaxDeRef [lindex $LesCoordsDuCadre 2] set LesCoords [$KCanva coords $Id] set XMin [lindex $LesCoords 0] set YMin [lindex $LesCoords 1] set XMax [lindex $LesCoords 2] set YMax [lindex $LesCoords 3] set LesId {} lappend LesId [$KCanva create line $XMax $YMin $XMaxDeRef $YMin -dash {4 2} -width 2 -fill $ColorSel] lappend LesId [$KCanva create line $XMax $YMax $XMaxDeRef $YMax -dash {4 2} -width 2 -fill $ColorSel] lappend LesId [$KCanva create line $XMin $YMin $XMin $YMaxDeRef -dash {4 2} -width 2 -fill $ColorSel] lappend LesId [$KCanva create line $XMax $YMin $XMax $YMaxDeRef -dash {4 2} -width 2 -fill $ColorSel] $KCanva itemconfigure $Id -fill $ColorSel set TabApparitionOuDisparitionDeCetteSelection($KCanva,$Id) $LesId } else { $KCanva itemconfigure $Id -fill $ColorIni foreach IdLine [set TabApparitionOuDisparitionDeCetteSelection($KCanva,$Id)] {$KCanva delete $IdLine} set TabApparitionOuDisparitionDeCetteSelection($KCanva,$Id) {} } return } proc TraceLiaison {qobj la lb col1 col2 stick} { if {$stick} { #use_light TraceCylindre "" $qobj $la $lb $col1 $col2 } else { #dont_use_light TraceLigne "" $la $lb $col1 $col2 } return } proc TraceLigne {liste la lb col1 col2} { lassign $la x1 y1 z1 lassign $lb x2 y2 z2 set vx [expr {($x2-$x1)/2.+$x1}] set vy [expr {($y2-$y1)/2.+$y1}] set vz [expr {($z2-$z1)/2.+$z1}] if {0} { puts "col1 $col1" puts "col2 $col2" puts " $x1 $y1 $z1" puts " $vx $vy $vz" puts " $x2 $y2 $z2\n" } # glColor3f {*}$col1 nolight_color3fv $col1 glLineWidth 1.0 glBegin GL_LINES glNormal3f 0.0 0.0 0.0 glVertex3f $x1 $y1 $z1 glNormal3f 0.0 0.0 0.0 glVertex3f $vx $vy $vz glEnd # glColor3f {*}$col2 nolight_color3fv $col2 glBegin GL_LINES glNormal3f 0.0 0.0 0.0 glVertex3f $x2 $y2 $z2 glNormal3f 0.0 0.0 0.0 glVertex3f $vx $vy $vz glEnd return } proc TraceObjetDansO {{LaMolId ""}} { global NomEtSeqAssPDB global StrucAVoir global Defauts set LesStruc $LaMolId if {$LaMolId == ""} {set LesStruc $StrucAVoir} foreach mol $LesStruc { set elt [lindex $NomEtSeqAssPDB [lsearch -regexp $NomEtSeqAssPDB $mol]] scan $elt "%s %s %s" pdb NomSeqAss MolId set chn [string index $MolId 5] set MolId [string range $MolId 0 3] IlFautVoir "mol $MolId" IlFautVoir "pai_zo ; ; [CouleurOrdali2O [set Defauts(CoulVariable)]]" set LesOrdres [CouleursPourO [CouleursOrdali ${MolId}_$chn]] foreach ord $LesOrdres { IlFautVoir $ord } IlFautVoir "mol $MolId obj ca$MolId ca ; end" IlFautVoir "mol $MolId obj sp$MolId z ; end" } return } proc TraceObjetDansRasMol {mol} { IlFautVoir "wireframe off" IlFautVoir "structure" IlFautVoir "cartoon" return } proc TraceObjetsDeLaMolDansPyMOL {mol} { VersPyMOL "cartoon loop" set LCmds [CouleursOrdali $mol] foreach c $LCmds { VersPyMOL "$c" } VersPyMOL "show cartoon" VersPyMOL "hide lines" return } proc TraceResBox {x y n type} { set c $::NwOj(Can) set ::NwOj(TypeMax) 7 if {$type > $::NwOj(TypeMax)} {set type 0} incr y -5 switch $type { 0 { # "None" - nothing set x1 [expr {$x+3}] set y2 [expr {$y-4}] $c create line $x1 $y $x1 $y2 -fill cyan -tags [list NBox Type0 Nbr$n NBox$n] } 1 { # "Atoms" - wireframe or stick set y1 $y set x1 [expr {$x+3}] set y2 [expr {$y-3}] $c create line $x1 $y1 $x1 $y2 -fill cyan -tags [list NBox Type1 Nbr$n NBox$n] set x2 $x set y3 [expr {$y2-3}] $c create line $x1 $y2 $x2 $y3 -fill cyan -tags [list NBox Type1 Nbr$n] set x3 [expr {$x1+3}] $c create line $x1 $y2 $x3 $y3 -fill cyan -tags [list NBox Type1 Nbr$n] set y4 [expr {$y3-2}] $c create line $x3 $y3 $x3 $y4 -fill cyan -tags [list NBox Type1 Nbr$n] } 2 { # "Ca/P Trace" - simple ca/p trace set x1 $x ; set x2 [expr {$x+7}] set y1 [expr {$y-2}] $c create line $x1 $y1 $x2 $y1 -fill cyan -tags [list NBox Type2 Nbr$n] } 3 { # "Ribbon" - lit Ribbon on CA or P trace set x1 [expr {$x+7}] set y1 [expr {$y-3}] $c create rectangle $x $y $x1 $y1 -fill black -outline cyan -tags [list NBox Type3 Nbr$n] } 4 { # "Ribbon + Atoms" - Ribbon + sticks set x1 [expr {$x+7}] set y1 [expr {$y-3}] $c create rectangle $x $y $x1 $y1 -fill black -outline cyan -tags [list NBox Type4 Nbr$n] set x2 [expr {$x+3}] set y2 [expr {$y1-3}] $c create line $x2 $y1 $x2 $y2 -fill cyan -tags [list NBox Type4 Nbr$n] set y3 [expr {$y2-3}] $c create line $x2 $y2 $x $y3 -fill cyan -tags [list NBox Type4 Nbr$n] $c create line $x2 $y2 $x1 $y3 -fill cyan -tags [list NBox Type4 Nbr$n] } 5 { # "Ribbon + CPK" - ribbon + CPK sidechains set x1 [expr {$x+7}] set y1 [expr {$y-3}] $c create rectangle $x $y $x1 $y1 -fill black -outline cyan -tags [list NBox Type5 Nbr$n] # 2eme ball , just on top set y2 [expr {$y1-3}] set x1 [expr {$x+3}] ; set x2 [expr {$x+5}] $c create oval $x1 $y1 $x2 $y2 -fill black -outline cyan -tags [list NBox Type5 Nbr$n] set x1 $x ; set x2 [expr {$x+3}] set y1 $y2 ; set y2 [expr {$y1-3}] $c create oval $x1 $y1 $x2 $y2 -fill black -outline cyan -tags [list NBox Type5 Nbr$n] set x1 [expr {$x+4}] ; set x2 [expr {$x+7}] $c create oval $x1 $y1 $x2 $y2 -fill black -outline cyan -tags [list NBox Type5 Nbr$n] } 6 { # "Pearls" - Big ball at residue position set x1 [expr {$x+7}] set y1 [expr {$y-7}] $c create oval $x $y $x1 $y1 -fill black -outline cyan -tags [list NBox Type6 Nbr$n] } 7 { # "CPK" - whole residue as CPK # premiere boule set x1 [expr {$x+2}] ; set x2 [expr {$x+5}] set y1 $y ; set y2 [expr {$y-3}] $c create oval $x1 $y1 $x2 $y2 -fill black -outline cyan -tags [list NBox Type7 Nbr$n NBox$n] # 2eme ball , just on top set y1 $y2 ; set y2 [expr {$y1-3}] $c create oval $x1 $y1 $x2 $y2 -fill black -outline cyan -tags [list NBox Type7 Nbr$n] set x1 $x ; set x2 [expr {$x+3}] set y1 $y2 ; set y2 [expr {$y1-3}] $c create oval $x1 $y1 $x2 $y2 -fill black -outline cyan -tags [list NBox Type7 Nbr$n] set x1 [expr {$x+4}] ; set x2 [expr {$x+7}] $c create oval $x1 $y1 $x2 $y2 -fill black -outline cyan -tags [list NBox Type7 Nbr$n] } } $c raise NBox return } proc TraceStrSec {widget x1 x2 y1 Type} { set HautFont [font metrics SeqFont -displayof $widget -linespace ] set LargFont [font measure SeqFont -displayof $widget A] set y2 [expr {$y1+$HautFont}] set ymil [expr {$y1+$HautFont/2}] set y1t [expr {$y1+$HautFont/3}] set y12t [expr {$y1+2*$HautFont/3+1}] set Id "" if {$Type == "Alpha"} { set Id [$widget create rectangle $x1 $y1 $x2 $y2 -fill red] } if {$Type == "Pi"} { set Id [$widget create rectangle $x1 $y1 $x2 $y2 -fill pink] } if {$Type == "3_10"} { set Id [$widget create rectangle $x1 $y1 $x2 $y2 -fill magenta] } if {$Type == "Sheet"} { set x1f [expr {$x2-$LargFont}] set Id [$widget create polygon $x1 $y1t $x1f $y1t $x1f $y1 $x2 $ymil $x1f $y2 $x1f $y12t $x1 $y12t -fill green -outline black] } if {$Type == "Turn"} { set Id [$widget create oval $x1 $y1 $x2 $y2 -fill blue] } if {$Type == "Coil"} { set xp [expr {$x2+$LargFont-1}] $widget create line $x1 $ymil $x2 $ymil } if {$Id != ""} {$widget raise $Id} return } proc TraceVecLC {f col} { global CanvasLC global MaxX MaxY MinX MinY Max global Delta WinX WinY CentX CentY Radius WinScale global malx maly malnom macol global lx$f global ly$f global LAA set c $CanvasLC if {[$c find withtag $col] != {}} { $c delete $col return } set lx [set lx$f] set ly [set ly$f] puts "\nTrace $f col $col" foreach x $lx y $ly n $LAA { set xv [expr {$x * $WinScale + $CentX}] set yv [expr {$y * $WinScale + $CentY}] $c create line $CentX $CentY $xv $yv -arrow last -fill $col -tags "$col" if {$xv >= $CentX} { set anchorv [expr "{$yv} >= $CentY ? {nw} : {sw} "] } else { set anchorv [expr "{$yv} >= $CentY ? {ne} : {se}" ] } $c create text $xv $yv -text $n -anchor $anchorv -fill $col -tags "$col" } return } proc Tracelaproc {args} { puts "info var [info level -1]" catch {puts "info var [info level -2]"} catch {puts "info var [info level -3]"} return } proc Tracelavar {n1 n2 o} { puts "\n ############" catch {puts "info var -3 : [info level -3]"} catch {puts "info var -2 : [info level -2]"} puts "info var -1 : [info level -1]" global $n1 puts "$n1 [set $n1]" ; flush stdout puts " ############\n" return set i 0 while {$i <= [llength $::LNOrdali]} { puts "\t[join [lrange $::LNOrdali $i [expr {$i+4}]]]" incr i 5 } puts "" return } proc Traduction {Terme {Sortie ""}} { return [lindex [LaTraduction [list $Terme] $Sortie] 0] } proc TraiteAABizarres {{force 0}} { global Sequences Warn foreach n [array names Sequences] { set s [set Sequences($n)] if {! [info exists Warn($n)] || $force} { set val 0 switch -regexp $s { {B} { set val 1 lappend Warn(B) $n } {Z} { set val 1 lappend Warn(Z) $n } {U} { set val 1 lappend Warn(U) $n } {X} { set val 1 lappend Warn(X) $n } {J} { set val 1 lappend Warn(J) $n } {O} { set val 1 lappend Warn(O) $n } {[0-9]} { set val 1 lappend Warn(Numbers) $n } } set Warn($n) $val } } return } proc TraiteComponent {} { set Ll [LesLignesDuFichier components.cif] foreach l $Ll { switch -regexp $l { {^data_} { set cmp [string range $l 5 7] } {^_chem_comp\.type } { regsub -all { +} $l " " l set type [string toupper [join [lrange [split $l " "] 1 end]]] } {^_chem_comp\.pdbx_type } { regsub -all { +} $l " " l set ptyp [lindex [split $l " "] 1] } {^_chem_comp\.one_letter_code } { regsub -all { +} $l " " l set 1ltc [lindex [split $l " "] 1] lappend res [list $cmp $type $ptyp $1ltc] } } } set res [lsort -index 2 $res] set f [open comp.txt w] foreach e $res { puts $f [join $e \t] } close $f exit } proc TraiteGenBankId {pdbid} { global TInf puts "Genbank treatment :" set okseq 0 foreach c [set TInf($pdbid,LChains)] { if {[info exists TInf($pdbid,$c,ok)] && ! $TInf($pdbid,$c,ok)} { continue } puts "\tChain $c" # sequnp peut avoir change avec SEQADV # prend l'original pour comparer set sequnpal $TInf($pdbid,$c,sequnpal) set sequnpori $TInf($pdbid,$c,sequnpori) set SeqAdn "" set Lacc [list] # utilise d abord refseq set Lacc [set TInf($pdbid,$c,rs_acc)] puts "\tAccess: [join $Lacc]" set Lres [DbFetchGET refseq $Lacc] if {$Lres == 0 || $Lres eq ""} { set Lres [eFetchREST nucleotide $Lacc] } if {$Lres == 0 || $Lres eq ""} { puts "PROBLEM loading RefSeq $Lacc !" set Lres "" } set Lres [SplitLesEMBL $Lres] foreach res $Lres { set Lorfs [DecortiqueGenBank OS OC SeqAdn $res] # cherche seq ADN correspondant à la sequence Sws set SeqAdn [ChercheQuelOrf $Lorfs $sequnpori] if {$SeqAdn ne ""} { break } } # not found, try genbank ids set Lacc [set TInf($pdbid,$c,gb_acc)] if {$SeqAdn eq "" && $Lacc != {}} { set Lres [DbFetchGET ena_coding $Lacc] set Lres [SplitLesEMBL $Lres] set fasta [DbFetchGET ena_coding $Lacc fasta] set Lsf [list] DecortiqueUnTFA $fasta Lsf TSf foreach seq $Lsf { set sadn $TSf($seq) if {[SeqNucToSeqPro [string range $sadn end-2 end]] eq "*"} { set sadn [string range $sadn 0 end-3] } set seqtra [SeqNucToSeqPro $sadn] set off [string first $sequnpori $seqtra] if {$off > -1} { set SeqAdn $sadn break } } } set SeqAdn [string toupper $SeqAdn] set TInf($pdbid,$c,seqadn) $SeqAdn if {$SeqAdn eq ""} { # pas bon pour cette chaine set TInf($pdbid,$c,ok) 0 continue } # find an ORF that mathc sequnproi incr okseq set seqpdn [SeqNucToSeqPro $SeqAdn] set TInf($pdbid,$c,seqpdn) $seqpdn set TInf($pdbid,$c,seqpdnal) $seqpdn # met les X dans seqpdn set sequnp $TInf($pdbid,$c,sequnp) if {[string first "X" $sequnp] > -1} { # align seqpdn sur sequnproi # ca s'aligne car c'est le bon orf lassign [NW $seqpdn $sequnpori] seqpdnal tmp set Lsunp [split $sequnp ""] set Lix [lsearch -all $Lsunp "X"] set Lspdn [split $seqpdnal ""] foreach i $Lix { set g 0 ; set s 0 while {$s < $i} { if {[lindex $Lsunp $s] ne "-"} { incr s } incr g } lset Lspdn $g "X" } set seqpdn [join $Lspdn ""] } if {$sequnpori ne $sequnpal} { # sequnp et sequnpori diff sont les X # align sur uniprot deja aligne lassign [NW $seqpdn $sequnpal] seqpdnal sequnpal2 set TInf($pdbid,$c,seqpdnal) $seqpdnal # seqpdb a change, corige ADN if {$seqpdn ne $seqpdnal} { # aligne ADN set a 0 set ns "" for {set i 0} {$i < [string length $seqpdnal]} {incr i} { if {[string index $seqpdnal $i] eq "-"} { append ns "XXX" } else { append ns [string range $SeqAdn [expr {3*$a}] [expr {3*$a+2}]] incr a } } set TInf($pdbid,$c,seqadn) $ns } } # recale si decale set offset [string first $sequnpori $seqpdn] if {$offset > 0} { set seqpdbal $TInf($pdbid,$c,seqpdbal) set seqresal $TInf($pdbid,$c,seqresal) set rep [string repeat "-" $offset] set seqpdbal "$rep$seqpdbal" set sequnpal "$rep$sequnpal" set seqresal "$rep$seqresal" set TInf($pdbid,$c,seqpdbal) $seqpdbal set TInf($pdbid,$c,sequnpal) $sequnpal set TInf($pdbid,$c,seqresal) $seqresal } } if {$okseq > 0} { return 1 } else { return 0 } } proc TraiteGenBankId_test {pdbid} { global TInf puts "Genbank treatment :" set okseq 0 foreach c [set TInf($pdbid,LChains)] { if {[info exists TInf($pdbid,$c,ok)] && ! $TInf($pdbid,$c,ok)} { continue } puts "\tChain $c" set sequnp $TInf($pdbid,$c,sequnpori) set SeqAdn "" set Lacc [list] # utilise d abord refseq set Lacc [set TInf($pdbid,$c,rs_acc)] set Lres [DbFetchGET refseq $Lacc] if {$Lres == 0 || $Lres eq ""} { set Lres [eFetchREST nucleotide $Lacc] } if {$Lres == 0 || $Lres eq ""} { puts "PROBLEM loading RefSeq $Lacc !" set Lres "" } set Lres [SplitLesEMBL $Lres] foreach res $Lres { set Lorfs [DecortiqueGenBank OS OC SeqAdn $res] # cherche seq ADN correspondant à la sequence Sws set SeqAdn [ChercheQuelOrf $Lorfs $sequnp] if {$SeqAdn ne ""} { break } } # not found, try genbank ids if {$SeqAdn eq ""} { set Lacc [set TInf($pdbid,$c,gb_acc)] } set SeqAdn [string toupper $SeqAdn] set TInf($pdbid,$c,seqadn) $SeqAdn if {$SeqAdn ne ""} { incr okseq } else { # pas bon pour cette chaine set TInf($pdbid,$c,ok) 0 } } if {$okseq > 0} { return 1 } else { return 0 } } proc TraiteLesRefSeqP {AccessRefseq} { set Entry [BirdEntryMoi $AccessRefseq entrez_protein] if {$Entry==""} {return ""} foreach Ligne [split $Entry "\n"] { if {[regexp "/gene=" $Ligne]} { set index1 [expr [string first "\"" $Ligne] + 1] set index2 [expr [string last "\"" $Ligne ] - 1] set gn [string range $Ligne $index1 $index2] } if {[regexp "/coded_by=" $Ligne]} { set index1 [expr [string first "\"" $Ligne] + 1] set index2 [expr [string last ":" $Ligne ] - 1] set NM [string range $Ligne $index1 $index2] } if {[regexp "/db_xref=\"GeneID:" $Ligne]} { set index1 [expr [string first ":" $Ligne] + 1] set GeneId [string range $Ligne $index1 end-1] } if {[regexp "/db_xref=\"taxon:" $Ligne]} { set index1 [expr [string first ":" $Ligne] + 1] set taxId [string range $Ligne $index1 end-1] } } return "$gn|$NM|$GeneId|$taxId" } proc TraiteLogTampon {line} { global inBeginLog LogTampon switch -regexp -- $line { {^\@begin} {incr inBeginLog} {^\@end} {incr inBeginLog -1} } append LogTampon $line set res "" if {! $inBeginLog} { set res [OutputTLog Text $LogTampon] set LogTampon "" } return $res } proc TraitePDBDeLAlignement {} { global ListePDB BadPDB HashPDB Sequences LNOrdali PBV PBW PipeCollection Warn LSOrdali SDG Defauts set ListePDB {} set BadPDB {} set HashPDB(iHmax) 0 set ix -1 set PBW "Treating PDB sequences ...." set PBV 0. set Nseq [llength $LNOrdali] set LNtmp $LNOrdali set ToChange [list] foreach seq $LNtmp { set PBV [expr {$PBV + 100. / $Nseq}] incr ix if {! [EstUnAccessPDB $seq]} { continue } set pdbid [DonneIdDeAccessPDB $seq] set chn [DonneChainDeAccessPDB $seq] set ChgN 0 ; set ChgC 0 # try DownloadPDB dont if {$pdbid ni [info commands] && $Defauts(DownloadPDB) ne "dont"} { set cok [LoadNouveauPDB $pdbid] if {$cok == 0} { lappend BadPDB $ix continue } # obsolete or superseeded if {$cok != 1} { set pdbid $cok set ChgN 1 } if {$chn ni [set Lc [$pdbid _chains]]} { set chn [lindex $Lc 0] set ChgC 1 } if {$ChgN || $ChgC} { lappend ToChange [list $ix $pdbid $chn] } } else { # PDB existe deja. # On ne traite pas le PDB mais on # enregistre la nouvelle chaine } # Carefull !! # ListePDB contains the RIGHT name set newname [BonNomPDB ${pdbid}_$chn] lappend ListePDB $newname # update names in group array if {[info exists SDG]} { foreach grp [array names SDG] { if {[set isdg [lsearch [set SDG($grp)] $seq]] != -1} { set SDG($grp) [lreplace [set SDG($grp)] $isdg $isdg $newname] } } } } # Superseeded/obsolete/chain changed if {$ToChange != {} } { foreach k [lsort -integer -decreasing -index 0 $ToChange] { lassign $k i n c set old [lindex $LNtmp $i] set oldid [DonneIdDeAccessPDB $old] set chn [DonneChainDeAccessPDB $old] set newn [BonNomPDB ${n}_$c] puts "old $old newn $newn" set LNtmp [lreplace $LNtmp $i $i $newn] set seq [lindex $LSOrdali $i] unset Sequences($old) set Sequences($newn) $seq # logs ... set log "Warning : entry $old changed to $newn" AuLog @begin warning AuLog @text $log AuLog @end puts "" puts [string repeat "=" [string length $log]] puts $log puts [string repeat "=" [string length $log]] puts "" } } set LNOrdali $LNtmp return } proc TraitePdbId {pdbid} { global TInf SA InitSolventArea puts "PDB treatment :" set pdbText [TextePDB $pdbid ALL "" OnTheWeb] if {$pdbText eq ""} { puts "PDB does not exists !" return 0 } Structure create $pdbid set cok [$pdbid new $pdbText "" 0 1] if {$cok != 1} { puts "\tBad PDB, obsolete or superseeded" if {[info exists ::db]} { #$::db close #unset -nocomplain ::db update } return 0 } unset -nocomplain TInf Str NAcc update # proteins chains set Lc [$pdbid _chains] if {[llength $Lc] == 0 || [llength $Lc] > 20} { puts "\tTOO many chains !" if {[info exists ::db]} { #$::db close #unset -nocomplain ::db } $pdbid destroy update return 0 } set TInf($pdbid,LChains) [list] foreach c $Lc { puts "\tChain $c" set TInf($pdbid,$c,ok) 0 if {[$pdbid _chainIs $c] ne "Protein"} { puts "\tNot a protein" continue } # si residue numerotes avec ABC..., on passe ... set Lnmr [$pdbid _resnumber -chain $c -polymer] set nmr [join $Lnmr ""] if {[regexp {[A-Z]} $nmr]} { puts "\tNumerotation de merde ... passe !" continue } # protein de fusion, on passe if {[EstProteineDeFusion [$pdbid GiveVar Header]]} { puts "\tThis is a fusion protein" continue } # cross reference set Laccid [$pdbid dbref $c] lassign $Laccid acc bid if {$acc eq "" && $bid eq ""} { puts "\tError : no DBREF !" continue } puts "\tDBREF $acc $bid" # sequence set seqpdb [join [$pdbid _resname -chain $c] ""] if {$seqpdb eq ""} { puts "PROBLEM : seqpdb vide !" continue } # sequence seqres ... set seqres [$pdbid _seqres $c] if {$seqres eq ""} { puts "\tPROBLEM ! seqres vide !" continue } # 1: test inclusion simple set seqpdbal $seqpdb set seqresal $seqres set ix [string first $seqpdb $seqres] if {$ix == -1} { lassign [NW $seqpdb $seqres] seqpdbal seqresal if {[string first "-" $seqresal] != -1} { set ok 0 puts "\tERROR : gaps in seqresal !" } else { set ok [RRPSMemeSequences $seqpdbal $seqresal] } if {! $ok} { ShowProtDiff seqpdbal seqresal puts "\tError : SeqRes != SeqPDB !" if {0 && $c eq "A"} { set f1 [open str1.fa w] puts $f1 ">seqpdb" puts $f1 $seqpdb close $f1 set f1 [open str2.fa w] puts $f1 ">seqres" puts $f1 $seqres close $f1 exit } set TInf($pdbid,$c,ok) 0 continue } } else { # offset > -1 # seqpdb included in seqres set seqpdbal "[string repeat - $ix]$seqpdb" } # il y a deja des X dans seqpdb ? (res mod) # si oui, met dans sequnp if {0 && [string first "X" $seqpdbal] != -1} { puts "\t-> Modified residues in PDB !" continue } # chain ok # collect infos # longueur chaine set slgt [string map {- "" X "" 0 ""} $seqpdb] set lgt [string length $slgt] # Recup infos sec struc $pdbid PDBInfos $c # struc. sec. set secstr [$pdbid SecStr -chain $c] set binhe [$pdbid SSBin "helix" $c] set binsh [$pdbid SSBin "sheet" $c] set bintu [$pdbid SSBin "turn" $c] lappend TInf($pdbid,LChains) $c set TInf($pdbid,$c,ok) 1 set TInf($pdbid,$c,length) $lgt set TInf($pdbid,$c,seqpdb) $seqpdb set TInf($pdbid,$c,seqpdbal) $seqpdbal set TInf($pdbid,$c,seqres) $seqres set TInf($pdbid,$c,seqresori) $seqres set TInf($pdbid,$c,up_acc) $acc set TInf($pdbid,$c,up_bid) $bid set TInf($pdbid,$c,secstr) $secstr set TInf($pdbid,$c,bin_he) $binhe set TInf($pdbid,$c,bin_sh) $binsh set TInf($pdbid,$c,bin_tu) $bintu # sauve pdb de la chain $pdbid save $c all all 0 "${pdbid}_${c}.pdb" } # Nettoyage #$::db close #unset -nocomplain ::db update if {$TInf($pdbid,LChains) == {} } { puts "Error : no good chains" return 0 } # sauve le fichier pour exec stride # stride secondary structures # si une chaine non traitee , flag ok=0 set strRSA "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx" foreach c $TInf($pdbid,LChains) { # init set TInf($pdbid,$c,seqrsa) "" # calcul STRIDE catch {exec /home/moumou/bin/stride ${pdbid}_$c.pdb} Msg update set aStride [ReadStrideOutput $Msg] if {$aStride == {} } { puts "STRIDE ERROR ${pdbid}_${c}.pdb\n$Msg" set TInf($pdbid,$c,ok) 0 file delete ${pdbid}_${c}.pdb continue } #set Str(SS,$c) "" #set Str(iS,$c) "" array set Str $aStride set TInf($pdbid,$c,SSi) [set Str(SS,$c)] set TInf($pdbid,$c,sSS) [set Str(iS,$c)] # NAccess # init set TInf($pdbid,$c,seqnac) "" catch {exec naccess ${pdbid}_${c}.pdb} Msg #update if {! [file exists ${pdbid}_${c}.rsa]} { puts "Error in NAccess !" file delete ${pdbid}_${c}.pdb continue } set seqrsa "" if {1} { set Crsa [ContenuDuFichier ${pdbid}_$c.rsa] #puts "$Crsa" set aNAccess [ReadNAccessOutput $Crsa] file delete ${pdbid}_${c}.asa file delete ${pdbid}_${c}.log file delete ${pdbid}_${c}.rsa file delete ${pdbid}_${c}.pdb #puts "aNAccess $aNAccess" array set NAcc $aNAccess set Lseq [split [set TInf($pdbid,$c,seqpdb)] ""] # stride surface area # transforme accessibilite en 'sequence set seqrsa "" if {[info exists Str(SA,$c)]} { set Lsa [set Str(SA,$c)] if {[llength $Lseq] != [llength $Lsa]} { puts "\tSTRIDE : length PDB != length Stride !" } else { foreach sa $Lsa aa $Lseq { if {$aa eq "X" || $sa eq ""} { append seqrsa "0" continue } if {! [info exists SA($aa)]} { append seqrsa "0" continue } set rsa [expr {$sa/$SA($aa)*100.}] if {$rsa >= 100.} { set rsa 99.9 } set rsa [expr {int($rsa/2)}] set arsa [string index $strRSA $rsa] append seqrsa $arsa } } } } set TInf($pdbid,$c,seqrsa) $seqrsa # NAccess accessibility set seqnac "" if {[info exists NAcc(rsa,$c)]} { set Lseq [split [set TInf($pdbid,$c,seqpdb)] ""] if {[llength $Lseq] != [llength [set NAcc(rsa,$c)]]} { puts "\tPROBLEM : length PDB != length NACCESS !" } else { foreach na [set NAcc(rsa,$c)] aa $Lseq sq [set NAcc(seq,$c)] { if {$aa eq "X" || $na eq ""} { append seqnac "0" continue } if {$na >= 100.} { set na 99.9 } set nac [expr {int($na /2)}] set anac [string index $strRSA $nac] append seqnac $anac } } } set TInf($pdbid,$c,seqnac) $seqnac } return 1 } proc TraitePdbId_test {pdbid} { global TInf SA InitSolventArea puts "PDB treatment :" Structure create $pdbid set pdbText [TextePDB $pdbid ALL "" OnTheWeb] set cok [$pdbid new $pdbText "" 0 1] if {$cok != 1} { puts "\tBad PDB, obsolete or superseeded" if {[info exists ::db]} { $::db close unset -nocomplain ::db update } return 0 } unset -nocomplain TInf # proteins chains set Lc [$pdbid _chains] if {[llength $Lc] == 0 || [llength $Lc] > 20} { puts "\tTOO many chains !" if {[info exists ::db]} { $::db close unset -nocomplain ::db } $pdbid destroy update return 0 } set TInf($pdbid,LChains) [list] foreach c $Lc { puts "\tChain $c" if {[$pdbid _chainIs $c] ne "Protein"} { puts "\tNot a protein" set TInf($pdbid,$c,ok) 0 continue } # si residue numerotes avec ABC...etc, on passe ... set Lnmr [$pdbid _resnumber -chain $c -polymer] set nmr [join $Lnmr ""] if {[regexp {[A-Z]} $nmr]} { puts "\tNumerotation de merde ... passe !" set TInf($pdbid,$c,ok) 0 continue } # protein de fusion, on passe if {[EstProteineDeFusion [$pdbid GiveVar Header]]} { puts "\tThis is a fusion protein" set TInf($pdbid,$c,ok) 0 continue } # cross reference set Laccid [$pdbid dbref $c] lassign $Laccid acc bid if {$acc eq "" && $bid eq ""} { puts "\tError : no DBREF !" set TInf($pdbid,$c,ok) 0 continue } puts "\tDBREF $acc $bid" # sequence set seqpdb [join [$pdbid _resname -chain $c] ""] # sequence seqres ... set seqres [$pdbid _seqres $c] # 1: test inclusion simple set seqpdbal $seqpdb set seqresal $seqres set ix [string first $seqpdb $seqres] # chain ok # collect infos # longueur chaine set lgt [string length $seqpdb] # Recup infos sec struc $pdbid PDBInfos $c # struc. sec. set secstr [$pdbid SecStr -chain $c] set binhe [$pdbid SSBin "helix" $c] set binsh [$pdbid SSBin "sheet" $c] set bintu [$pdbid SSBin "turn" $c] lappend TInf($pdbid,LChains) $c set TInf($pdbid,$c,ok) 1 set TInf($pdbid,$c,length) $lgt set TInf($pdbid,$c,seqpdb) $seqpdb set TInf($pdbid,$c,seqpdbal) $seqpdbal set TInf($pdbid,$c,seqres) $seqres set TInf($pdbid,$c,seqresori) $seqres set TInf($pdbid,$c,up_acc) $acc set TInf($pdbid,$c,up_bid) $bid set TInf($pdbid,$c,secstr) $secstr set TInf($pdbid,$c,bin_he) $binhe set TInf($pdbid,$c,bin_sh) $binsh set TInf($pdbid,$c,bin_tu) $bintu # sauve pdb de la chain $pdbid save $c all all 0 "${pdbid}_${c}.pdb" } # Nettoyage $::db close unset -nocomplain ::db update if {$TInf($pdbid,LChains) == {} } { puts "Error : no good chains" return 0 } # sauve le fichier pour exec stride # stride secondary structures # si une chaine non traitee , flag ok=0 set strRSA "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx" foreach c $TInf($pdbid,LChains) { # init set TInf($pdbid,$c,seqrsa) "" # calcul STRIDE catch {exec /home/moumou/bin/stride ${pdbid}_$c.pdb} Msg set aStride [ReadStrideOutput $Msg] file delete ${pdbid}_${c}.pdb set TInf($pdbid,$c,SSi) "ssi" set TInf($pdbid,$c,sSS) "sss" # NAccess # init set TInf($pdbid,$c,seqnac) "" #catch {exec naccess ${pdbid}_${c}.pdb} Msg set seqrsa "" set TInf($pdbid,$c,seqrsa) $seqrsa # NAccess accessibility set seqnac "" set TInf($pdbid,$c,seqnac) $seqnac } return 1 } proc TraitePfamScanResult {a b op} { set res $::Rpfm($b) if {$res eq ""} { set ::Rpfm($b,feat) "" return } package require json set Ldict [::json::json2dict $res] foreach dict $Ldict { set name [dict get $dict name] set desc [dict get $dict desc] set desc [string map {" " "_"} $desc] set acc [dict get $dict acc] if {! [info exists ::Rpfm($acc)]} { incr ::Rpfam(num) set ::Rpfm($acc) $::Rpfm(num) } set color $::Rpfm($acc) set seq [dict get $dict seq] lassign $seq tmp to tmp from lappend ::Rpfm($b,feat) [list $from $to $color "${acc}_$desc"] } exit return } proc TraitePhenoLink {lseq} { foreach ligne $lseq { set disease [DeterminationDisease $ligne] lappend ldisease $disease } return $ldisease } proc TraiteProtSeqLink {lseq} { set acnum "" # on prend en priorite le num swiss-prot set j [lsearch -regexp $lseq "SWISS-PROT"] if {$j != -1} { set acnum [DeterminationAcNum [lindex $lseq $j]] } else { set j [lsearch -regexp $lseq "PIR"] if {$j != -1} { set acnum [DeterminationAcNum [lindex $lseq $j]] } else { set acnum [DeterminationAcNum [lindex $lseq 1]] } } return $acnum } proc TraiteResultatClustering {fres ident {nomgrp ""} {method dpc}} { global ConsMeth LNDG # Lit fichier .clu de CLUSPACK , mais # AVEC LES COORDONNEES !! set IdG 0 if {$nomgrp ne ""} { set IdG [lsearch $LNDG $nomgrp] incr IdG 2 } else { set ConsMeth(IdenGlob) {} set ConsMeth(ConsGlob) {} } # lecture clusters. # Calcule norme moyenne de chaque cluster # Gres : Tab indexe par le residu, donne le groupe # Tres : Tab indexe par le groupe, donne les resius set Lf [LesLignesDuFichier $fres] lappend Lf "" set i 1 foreach l [lrange $Lf 2 end] { if {[regexp -nocase {^Cluster|^Unclustered} $l]} { set ngr "gr$i" set Lv {} set mv 0. set nval 0 } elseif {$l ne ""} { if {! [info exists ngr]} {puts "[join $Lf \n]"} set listev [split $l "\t"] set v [lindex $listev 0] lappend Lv $v set Gres($v) $ngr foreach e [lrange $listev 1 end] { set mv [expr {$mv + $e}] incr nval } } else { if {! $nval} {continue} set Tres($ngr) $Lv set Mnorm [expr {$mv/$nval}] set TNormI($ngr) $Mnorm set TNormV($Mnorm) $ngr incr i } } # cherche cluster avec + grde norme # nel : nbr d'element de ce cluster # ne2 : nbr elemes cluster No 2 set lv [lsort -decreasing -real [array names TNormV]] if {[llength $lv] > 1} { set top [set TNormV([lindex $lv 0])] set nel [llength [set Tres($top)]] set lel [set Tres($top)] if {[llength $lv] > 2} { set dos [set TNormV([lindex $lv 1])] set ne2 [llength [set Tres($dos)]] set le2 [set Tres($dos)] } else { set dos -1 set ne2 0 set le2 {} } } else { set nel 0 set lel {} set ne2 0 set le2 {} } # remplit tableau des conservations set Lout [list] if {$nomgrp eq ""} { set ConsMeth(IdenGlob) $lel set ConsMeth(ConsGlob) $le2 set Lout [list IdenGlob $lel ConsGlob $le2] } else { set ConsMeth($nomgrp) $lel } return $Lout } proc TraiteResultatClusteringTcl {Lres ident {nomgrp ""} {method dpc}} { global ConsMeth LNDG set IdG 0 if {$nomgrp ne ""} { set IdG [lsearch $LNDG $nomgrp] incr IdG 2 } else { set ConsMeth(IdenGlob) {} set ConsMeth(ConsGlob) {} } # Calcule norme moyenne de chaque cluster # Gres : Tab indexe par le residu, donne le groupe # Tres : Tab indexe par le groupe, donne les resius set i 1 foreach c $Lres { set ngr "gr$i" set Lv [list] set mv 0.0 set nval 0 foreach ind $c { set listev [lrange $ind 1 end] set v [lindex $ind 0] lappend Lv $v set Gres($v) $ngr foreach e $listev { set mv [expr {$mv + $e}] incr nval } } if {! $nval} {continue} set Tres($ngr) $Lv set Mnorm [expr {$mv/$nval}] set TNormI($ngr) $Mnorm set TNormV($Mnorm) $ngr incr i } # cherche cluster avec + grde norme # nel : nbr d'element de ce cluster # ne2 : nbr elemes cluster No 2 set lv [lsort -decreasing -real [array names TNormV]] if {[llength $lv] > 1} { set top [set TNormV([lindex $lv 0])] set nel [llength [set Tres($top)]] set lel [set Tres($top)] if {[llength $lv] > 2} { set dos [set TNormV([lindex $lv 1])] set ne2 [llength [set Tres($dos)]] set le2 [set Tres($dos)] } else { set dos -1 set ne2 0 set le2 {} } } else { set nel 0 set lel {} set ne2 0 set le2 {} } # remplit tableau des conservations set Lret [list] if {$nomgrp eq ""} { set ConsMeth(IdenGlob) $lel set ConsMeth(ConsGlob) $le2 lappend Lret IdenGlob $lel ConsGlob $le2 } else { set ConsMeth($nomgrp) $lel lappend Lret $nomgrp $lel } return $Lret } proc TraiteSequencesAInserer {pkvo l pkvue} { global db foreach e $l { lassign $e new nf old if {! $nf} { lappend Li [$db eval {select lvs.pk_seqali from ln_vue_seqali as lvs, seqinfo as si, seqali as sa where si.access=$new and sa.pk_seqinfo=si.pk_seqinfo and lvs.pk_vue=$pkvue and lvs.pk_seqali=sa.pk_seqali}] } else { set L [$db eval {select * from seqinfo where access=$old}] set ins '$new' set pkref [lindex $L 0] foreach e [lrange $L 2 end] { if {[string trim $e] eq ""} { lappend ins "NULL" } elseif {[string is integer $e] || [string is double $e]} { lappend ins $e } else { lappend ins '$e' } } $db eval "insert into seqinfo values (NULL,[join $ins ,])" set seq [$db eval {select s.seq from seqali as s, ln_vis_seqali as l where s.pk_seqinfo=$pkref and l.pk_vis=$pkvo and l.pk_seqali=s.pk_seqali}] set Npki [$db eval {select max(pk_seqinfo) from seqinfo}] $db eval {insert into seqali values (NULL,$Npki,$seq)} set Npks [$db eval {select max(pk_seqali) from seqali}] lappend Li $Npks } } return $Li } proc TraiteTag {Lt} { set res [list] foreach {k v i} $Lt { if {[regexp {^FX\_} $v]} { set bg [$::NomTextSeq tag cget $v -background] set fg [$::NomTextSeq tag cget $v -foreground] lappend res [list $k $fg $bg $i] } } return $res } proc TraiteUnGDB {id} { global file1 global file2 package require tdom # puts $id set url "http://www.gdb.org/gdb-bin/genera/genera/hgd/Gene?" append url $id set Lignes {} HttpCopy $url Lignes # les lignes sont mises les 1 a la suite des autres # --> introduction de retour chariot pour que le fichier soit analysable set Lnew {} foreach l $Lignes { regsub -all ">" $l ">\n" l set Lnew [concat $Lnew [split $l "\n"]] } # certaines balises sont mal fermees # --> decoupage de la 1ere partie du fichier qui ne contient pas d'info interessantes set i [lsearch -regexp $Lnew "
    "] set nl [lrange $Lnew [expr $i+1] end] set Id [dom parse -simple -html $nl] set RId [$Id documentElement] set Lnds [$RId selectNodes //dt/b/a/i] # si le modele de noeud a ete trouve sur la page web if {$Lnds == ""} {return} set test [[lindex $Lnds 0] selectNodes string(.)] # si le premier noeud contient le mot Symbol if {! [regexp "Symbol" $test]} {return} set acnum [RecupereItemDuGDB $Lnds "Protein Sequence Links" $id] if {$acnum != ""} { if {! [regexp "Show" $acnum]} { puts $file2 $acnum } if {![regexp "shortDetail" $id]} { puts $file1 $id } } # set disease [RecupereItemDuGDB $Lnds "Phenotype Links" $id] return } proc TraiteUnGDB_AEffacer {id} { #rR la derniere version est dans dans ~moumou/ordali/src/ordali_ms2ph.Tcl # procedure qui va recuperer les infos de seq proteique pour chaque identifiant gdb global RepAJourGDB global listeARetranscrire set url "http://www.gdb.org/gdb-bin/genera/genera/hgd/Gene?" append url $id set Lignes {} HttpCopy $url Lignes if {$Lignes != ""} { #verification de l'existence d'un lien vers la HGMD if {[lsearch -regexp $Lignes "Human Gene Mutation Database"] != -1} { # si ce lien existe, on recupère la séquences prot du GDB DetermineProtSeqGDB $Lignes $id } else { puts "pas de lien hgmd pour $id" } } return 1 } proc TraiteUnGDB_bis {id} { global file1 global file2 package require tdom # puts $id set url "http://www.gdb.org/gdb-bin/genera/genera/hgd/Gene?" append url $id set Lignes {} HttpCopy $url Lignes # les lignes sont mises les 1 a la suite des autres # --> introduction de retour chariot pour que le fichier soit analysable set Lnew {} foreach l $Lignes { regsub -all ">" $l ">\n" l set Lnew [concat $Lnew [split $l "\n"]] } # certaines balises sont mal fermees # --> decoupage de la 1ere partie du fichier qui ne contient pas d'info interessantes set i [lsearch -regexp $Lnew "
    "] set nl [lrange $Lnew [expr $i+1] end] set Id [dom parse -simple -html $nl] set RId [$Id documentElement] # puts "RId = $RId" set Lnds [$RId selectNodes //dt/b/a/i] # si le modele de noeud a ete trouve sur la page web if {$Lnds == ""} {return} set test [[lindex $Lnds 0] selectNodes string(.)] # si le premier noeud contient le mot Symbol if {! [regexp "Symbol" $test]} {return} set Ldisease [RecupereItemDuGDB $Lnds "Phenotype Links" $id] foreach dis $Ldisease { if {[regexp {^[0-9]} $dis]} { puts $file2 "$id\t$dis" } } return } proc TraiteUniProtId {pdbid} { global TInf OrgaScientific puts "UniProt treatment :" foreach c [set TInf($pdbid,LChains)] { if {[info exists TInf($pdbid,$c,ok)] && ! [set TInf($pdbid,$c,ok)]} { continue } puts "\tChain $c" set acc [set TInf($pdbid,$c,up_acc)] puts "\tUniProt $acc" set Lres [split [DbFetchGET uniprot $acc] \n] if {$Lres == 0 || $Lres eq ""} { puts "PROBLEM ! can't retrieve $acc" set TInf($pdbid,$c,ok) 0 continue } set Lgb [ExtraitDRDeUniProt $Lres] set Lrs [ExtraitDRDeUniProt $Lres RefSeq] if {$Lgb == {} && $Lrs == {}} { puts "PROBLEM : no cross db with genbank/refseq in uniprot $acc" set TInf($pdbid,$c,ok) 0 continue } set TInf($pdbid,$c,gb_acc) $Lgb set TInf($pdbid,$c,rs_acc) $Lrs # test organisme et recupere sequence DecortiqueLesLignesEMBL $Lres ID AC DE GN OS OC OX SeqUnp if {! [regexp -nocase "$OrgaScientific" $OS]} { puts "\tError : Bad organism : $OS" set TInf($pdbid,$c,ok) 0 continue } set TInf($pdbid,$c,sequnpori) $SeqUnp set seqres $TInf($pdbid,$c,seqres) set seqresal $seqres set TInf($pdbid,$c,seqresal) $seqresal set seqpdbal $TInf($pdbid,$c,seqpdbal) set TInf($pdbid,$c,sequnp) $SeqUnp # check if seqadv ... set seqadvChange 0 set Ladv [$pdbid _seqadv $c] if {$Ladv != {} } { set chg [CheckSeqAdv $c $Ladv] if {$chg} { set seqadvChange 1 puts "\tseqres, sequnp changed by SEQADV" set seqres $TInf($pdbid,$c,seqres) set SeqUnp $TInf($pdbid,$c,sequnp) set seqpdbal $TInf($pdbid,$c,seqpdbal) } } if {0} { set f1 [open f1.fa w] puts $f1 ">seqres" puts $f1 $seqres close $f1 set f1 [open f2.fa w] puts $f1 ">sequnp" puts $f1 $SeqUnp close $f1 exit } set offset [string first $seqres $SeqUnp] if {$offset == -1} { lassign [NW $seqres $SeqUnp] seqresal sequnpal set ok [RRPSMemeSequences $seqresal $sequnpal] if {! $ok} { puts "Error : seqres pdb pas dans seq uniprot" ShowProtDiff seqresal sequnpal set TInf($pdbid,$c,ok) 0 continue } set seqpdbal [RealignSeqContreSeq $seqpdbal $seqresal 0 0] set TInf($pdbid,$c,seqpdbal) $seqpdbal #ShowProtDiff seqpdbal seqresal } else { # offset != -1 set dec [string repeat - $offset] set seqresal "$dec$seqres" set sequnpal $SeqUnp # et ausi pdbal set seqpdbal $TInf($pdbid,$c,seqpdbal) set seqpdbal "$dec$seqpdbal" set TInf($pdbid,$c,seqpdbal) $seqpdbal } set TInf($pdbid,$c,seqres) $seqres set TInf($pdbid,$c,seqresal) $seqresal set TInf($pdbid,$c,sequnp) $SeqUnp set TInf($pdbid,$c,sequnpal) $sequnpal set TInf($pdbid,$c,offset) $offset #ShowProtDiff seqresal seqpdbal # si seqres a bouge, re-ealigner seqpdbal if {0 && $seqadvChange} { set seqpdbal [set TInf($pdbid,$c,seqpdbal)] # record 0 <-insertions set Lres [split $seqresal ""] set Li0 [lsearch -all $Lres "0"] foreach i $Li0 { lset Lres $i "-" } set seqg [join $Lres ""] #lassign [NW $seqpdbal $seqg] seqpdbal seqg set seqpdbal [RealignSeqContreSeq $seqpdbal $seqg] set TInf($pdbid,$c,seqpdbal) $seqpdbal } } return 1 } proc TraiteUniProtId_old {pdbid} { global TInf OrgaScientific puts "UniProt treatment :" foreach c [set TInf($pdbid,LChains)] { if {[info exists TInf($pdbid,$c,ok)] && ! [set TInf($pdbid,$c,ok)]} { continue } puts "\tChain $c" set acc [set TInf($pdbid,$c,up_acc)] puts "\tUniProt $acc" set Lres [split [DbFetchGET uniprot $acc] \n] if {$Lres == 0 || $Lres eq ""} { puts "PROBLEM ! can't retrieve $acc" set TInf($pdbid,$c,ok) 0 continue } #set Lgb [ExtraitDRDeUniProt $Lres] set Lrs [IDMapping "ACC+ID" REFSEQ_NT_ID $acc] set Lgb [IDMapping "ACC+ID" EMBL_ID $acc] #set Lrs [ExtraitDRDeUniProt $Lres RefSeq] if {$Lgb == {} && $Lrs == {}} { puts "Error : no cross db with genbank/refseq in uniprot $acc" set TInf($pdbid,$c,ok) 0 continue } set TInf($pdbid,$c,gb_acc) $Lgb set TInf($pdbid,$c,rs_acc) $Lrs # test organisme et recupere sequence DecortiqueLesLignesEMBL $Lres ID AC DE GN OS OC OX SeqUnp if {! [regexp -nocase "$OrgaScientific" $OS]} { puts "\tError : Bad organism : $OS" set TInf($pdbid,$c,ok) 0 continue } set TInf($pdbid,$c,sequnp) $SeqUnp set TInf($pdbid,$c,sequnpori) $SeqUnp # test seqres pdb contre uniprot set seqres $TInf($pdbid,$c,seqres) set offset [string first $seqres $SeqUnp] set TInf($pdbid,$c,offset) $offset } return 1 } proc TraitementDesPFAMs {Sequence Type Note LongueurFeature} { scan $Note "%s" NumeroPFAM set DefinitionPFAM [StringSuivant $NumeroPFAM dans $Note] set OriginePropagation [StringSuivant "from" dans $Note] set OriginePropagation [string trim $OriginePropagation] regsub -all " from $OriginePropagation" $DefinitionPFAM "" DefinitionPFAM set DefinitionPFAM [string trim $DefinitionPFAM] set ListePFAMs [list $Sequence $Type $NumeroPFAM $DefinitionPFAM $OriginePropagation $LongueurFeature] return $ListePFAMs } proc TraitementDesRegionsEtBlocks {Sequence Type Note LongueurFeature} { regsub -all "REGION_|SBLOCK_" $Note "" NumeroRegion set ListeRegions [list $Sequence $Type $NumeroRegion $LongueurFeature] return $ListeRegions } proc Transcript {Bornes aSeqADN} { upvar $aSeqADN SeqADN Wup "create the mRAN from the DNA ... I will soon use join and complement etc." scan $Bornes "%d %d %s" Debut Fin Orient incr Debut -1 incr Fin -1 set Seq [string range $SeqADN $Debut $Fin] if {$Orient=="F"} { return $Seq } else { return [NucToReverseAndComplementNuc $Seq] } } proc TranscriptVariants {} { set Titre "Trancript Variants" set Old [PourWscope] PourWscope 1 Html_ZeroToBody $Titre PourWscope $Old Html_Append "

    $Titre

    " Html_Append "
    " foreach Box [ListeDesPABs] { Espionne [Html_TranscriptVariants $Box] } Html_BodyToEnd set Texte [Html_Get "ZeroIt"] return $Texte } proc TranscriptVariantsEnDur {} { if {[regexp -nocase "Mouse" [RepertoireDuGenome]]} { set FileHtml TranscriptVariantsMouse } elseif {[regexp -nocase "Rat" [RepertoireDuGenome]]} { set FileHtml TranscriptVariantsRat } else { set FileHtml TranscriptVariants } set LeHtml [TranscriptVariants] Garde "[GenoretDir]/Collaboration/Splicing/${FileHtml}.html" set ficOut "[GenoretDir]/Collaboration/Splicing/${FileHtml}.html" set f [open $ficOut w] puts $f $LeHtml } proc TranscriptomicBestFriendsInCluster {Nom {Quoi ""} {Comment ""}} { set Extension "-lesbestcops" if {$Comment==""} { set Comment "FileContent" } if {$Quoi==""} { set Quoi "All"} set Fichier "[TranscriptomicBestFriendsInClusterDir]/${Nom}-$Quoi$Extension" if {[FileExists $Fichier]} { if {$Comment=="FileContent"} { return [ContenuDuFichier $Fichier] } if {$Comment=="NiceWeb"} { return [NiceWebOfCluster [ContenuDuFichier $Fichier]] } } if {$Quoi!="Filenames" || $Quoi!="All"} { return "" } set Probesets [ExtraitInfo $Nom "ProbeSetId:"] regsub -all "/" $Probesets "-OU-" Probesets regsub -all "," $Probesets " " Probesets set LesPS [LesMotsDeLaLigne $Probesets] set LaSortie {} foreach PS $LesPS { set Fichier "[TranscriptomicBestFriendsInClusterDir]/$Nom-$PS$Extension" if {[FileAbsent $Fichier]} {continue} if {$Quoi=="FileNames"} { lappend LaSortie $Fichier } if {$Quoi=="All"} { lappend LaSortie [ContenuDuFichier $Fichier] } } return [join $LaSortie "\n"] } proc TranscriptomicBestFriendsInClusterDir {} { return "[RepertoireDuGenome]/transcriptomique/LesCopainsCluster" } proc TranscriptomicClusters {Nom {Quoi ""}} { if {$Quoi==""} { set Quoi "All"} set Fichier "[TranscriptomicClustersDir]/${Nom}_$Quoi" if {[FileExists $Fichier]} { return [ContenuDuFichier $Fichier] } set Probesets [ExtraitInfo $Nom "ProbeSetId:"] regsub -all "/" $Probesets "-OU-" Probesets regsub -all "," $Probesets " " Probesets set LesPS [LesMotsDeLaLigne $Probesets] set LaSortie {} foreach PS $LesPS { set Fichier "[TranscriptomicClustersDir]/$Nom-$PS" if {[FileAbsent $Fichier]} {continue} if {$Quoi=="FileNames"} { lappend LaSortie $Fichier } if {$Quoi=="All"} { lappend LaSortie [ContenuDuFichier $Fichier] } } return [join $LaSortie "\n"] } proc TranscriptomicClustersDir {} { return "[RepertoireDuGenome]/transcriptomique/cluster" } proc TranscriptomicSignalIntensity {Nom} { set Rep "[RepertoireDuGenome]/transcriptomique/SignalIntensity" set LesFichiers [glob -nocomplain "$Rep/$Nom-*"] set LaSortie {} foreach Fichier $LesFichiers { set Queue [file tail $Fichier] set Probeset [StringSuivant "-" dans $Queue] lappend LaSortie "" lappend LaSortie "$Nom $Probeset" foreach Ligne [LesLignesDuFichier $Fichier] { ScanLaListe [split $Ligne "\t"] Ps Ch Ex Sa Si Ca Re So lappend LaSortie "$Ps [format "%6.2f" $Si] [format "%1s" $Ca] $Re [format "%-8s" $So] $Ch $Ex $Sa" } } set Texte [join $LaSortie "\n"] if {[PourWscope]} { return [Html_DuTexteTelQuel $Texte] } return $Texte } proc TranscritRetina {} { return [TranscriptVariants] } proc TransformationCartesienne {AId n} { global Abr global Xmin Xmax Ymin Ymax set t [set Abr(Arbre,$AId)] set Le [$t children $n] if {$n ne "root" && [$t get $n ordre]} {set Le [lreverse $Le]} foreach e $Le { TransformationCartesienne $AId $e } set theta [$t get $n theta] set r [$t get $n r] set x [expr {$r*cos($theta)}] set y [expr {$r*sin($theta)}] $t set $n xcoord $x $t set $n ycoord $y set Xmin [expr {$Xmin<$x?$Xmin:$x}] set Ymin [expr {$Ymin<$y?$Ymin:$y}] set Xmax [expr {$Xmax>$x?$Xmax:$x}] set Ymax [expr {$Ymax>$y?$Ymax:$y}] return } proc TransformationPolaire {AId n theta lower upper} { global Abr subangleMax set t [set Abr(Arbre,$AId)] if {[$t isleaf $n]} {return} set epsilon 0.0001 set w [$t get $n width] set pr [$t get $n r] set ptheta [$t get $n theta] set subangle [expr {($upper-$lower)/$w}] if {$subangle < $subangleMax} {set subangleMax $subangle} set angle $upper set Le [$t children $n] if {$n ne "root" && [$t get $n ordre]} {set Le [lreverse $Le]} foreach e $Le { set we [$t get $e width] set len [$t get $e length] set angle [expr {$angle - $we / 2.0 * $subangle}] set len [expr {$len<0.?0.:$len}] set nr [expr {sqrt($len*$len + $pr*$pr + 2.*$len*$pr*cos($angle - $ptheta))}] $t set $e r $nr if {abs( $pr*cos($ptheta) + $len*cos($angle)) > $epsilon} { set ntheta [expr {atan( ($pr*sin($ptheta) + $len*sin($angle)) / ($pr*cos($ptheta) + $len*cos($angle)))}] } elseif {$pr*sin($ptheta) + $len*sin($angle) >= 0.0} { set ntheta [expr {[Pi] / 2.}] } else { set ntheta [expr {1.5 * [Pi]}] } if {$pr*cos($ptheta) + $len*cos($angle) < -$epsilon} { set ntheta [expr {$ntheta + [Pi]}] } $t set $e theta $ntheta if {! [$t isleaf $e]} { TransformationPolaire $AId $e $ntheta [expr {$angle - $we*$subangle/2.}] [expr {$angle + $we*$subangle/2.}] } else { $t set $e oldtheta $angle } set angle [expr {$angle - $we / 2.0 * $subangle}] } return } proc TransformeColonneEnLigne {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" nom append Fichier "$nom " } return $Fichier } proc TransformeExonsEnIntrons {Path Limit} { #Parser de GetExons permettant de recuperer le plus proche intron d'un Exon pour Dave set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TransformeExonsEnIntrons : Start" set FichierExon [open "$Path.coord" "r"] set FichierIntron [open "$Path.csv" "w"] set Davisque 0 set nbIntrons 0 set moyenne 0 set distanceCumulee 0 set distanceCumuleeIntron1 0 set oldAccess "" set oldStartE 0 set oldEndE 0 set exonPargeneDuGene 1 set sommeExon 0 set introns1 0 set nbIntronsConsideres 0 set listeDesRatios {} while { [gets $FichierExon Ligne] >= 0} { ScanLaListe $Ligne ID Access Exon Chromosome StartE EndE strand exonCount if { $oldEndE != $EndE && $oldStartE != $StartE } { if { $Exon != "Exon1"} { set IntronStart $oldEndE set IntronEnd $StartE set Distance [expr $IntronEnd - $IntronStart + 1] set distanceCumulee [expr $distanceCumulee + $Distance] if {$Exon == "Exon2" && $strand == "+"} { set distanceCumuleeIntron1 [expr $distanceCumuleeIntron1 + $Distance] incr introns1 } regsub -all -nocase {Exon|Intron} $Exon "" Num if {$Distance <= $Limit} { incr Davisque set rat [expr (100 * $Num) / $exonCount] lappend listeDesRatios $rat Espionne $rat } puts $FichierIntron "$Distance $Access $Exon $Chromosome:$IntronStart-$IntronEnd" incr exonPargeneDuGene incr nbIntronsConsideres } else { if { $exonPargeneDuGene != 0} { lappend ListeDesNombreDIntron $exonPargeneDuGene } else { lappend ListeDesNombreDIntron 1 } set exonPargeneDuGene 1 } } set oldEndE $EndE set oldStartE $StartE incr nbIntrons } set MoyenneIntron1 [expr $distanceCumuleeIntron1 / $introns1] Espionne "Consideres $nbIntronsConsideres / Totaux $nbIntrons (Intron 1 : $MoyenneIntron1" set len [llength $ListeDesNombreDIntron] foreach nbExon $ListeDesNombreDIntron { set sommeExon [expr $sommeExon + $nbExon] #-Espionne $sommeExon } set sommeRatio 0 set nbRatios [llength $listeDesRatios] foreach ratio $listeDesRatios { set sommeRatio [expr $sommeRatio + $ratio] } set ratioMoyen [expr $sommeRatio / $nbRatios] Espionne "$sommeExon / $len" set moyenneNbExon [expr $sommeExon / $len ] set ProportionDavisque [expr (100 * $Davisque) / $nbIntrons] set moyenne [expr $distanceCumulee / $nbIntrons] Espionne "$nbIntrons avec en moyenne une longeur de $moyenne pb dont $Davisque ($ProportionDavisque %) a moins de $Limit avec un ratio de $ratioMoyen" Espionne "De plus les genes ont en moyenne moyenne $nbExon exons" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|TransformeExonsEnIntrons : End" close $FichierExon close $FichierIntron } proc TransformeFC {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set LesElts [split $Ligne "\t"] set NumGene [lindex $LesElts 0] set FC [lindex $LesElts 1] if {$FC>0 && $FC<1} {set FC [expr -(1/$FC)]} if {$FC==1} {set FC 0} lappend L "$NumGene\t$FC" } return $L } proc TransformeFichierBACPourCBS {LesFichiers} { foreach nom $LesFichiers { puts $nom set FIC [open $nom "r"] gets $FIC ligne set compteur 0 while {[gets $FIC ligne]>10} { set chrom($compteur) [lindex $ligne 0] set position($compteur) [expr round([lindex $ligne 1])] set log_ratios($compteur) [lindex $ligne 2] set compteur [expr $compteur + 1] } close $FIC set FIC [open "$nom.txt" "w"] puts $FIC "log_ratios chrom position" for {set i 0} {$i<$compteur} {incr i} { set mot $chrom($i) if {![regexp {_random} $chrom($i)]} { puts $FIC "$log_ratios($i) $chrom($i) $position($i)"; } } close $FIC } } proc TransformeFichierOligoPourCBS {LesFichiers} { foreach nom $LesFichiers { puts $nom set FIC [open $nom "r"] gets $FIC ligne set compteur 0 while {[gets $FIC ligne]>10} { if {[regexp -nocase "random" $ligne]} {continue} set chrom($compteur) [lindex $ligne 0] set debut($compteur) [lindex $ligne 1] regsub {^0+} $debut($compteur) {} debut($compteur) set fin($compteur) [lindex $ligne 2] regsub {^0+} $fin($compteur) {} fin($compteur) set position($compteur) [expr round(($debut($compteur)+$fin($compteur))/2.0)] set log_ratios($compteur) [expr [lindex $ligne 3]*log(10.0)/log(2.0)] set compteur [expr $compteur + 1] } close $FIC set FIC [open "$nom.txt" "w"] puts $FIC "log_ratios chrom position" for {set i 0} {$i<$compteur} {incr i} { set mot $chrom($i) if {![regexp {_random} $chrom($i)]} { puts $FIC "$log_ratios($i) $chrom($i) $position($i)"; } } close $FIC } } proc TransformeLesClonesDeCW {} { set Fichier "/home/carles/genomes/DD2/CW.txt" set CodesBonsPourDataBase "" foreach Ligne [LesLignesDuFichier $Fichier] { regsub -all -nocase {\s} $Ligne " " Ligne set LesCodes [split $Ligne " "] foreach Code $LesCodes { regsub -all {[ab]} $Code "-" Code append CodesBonsPourDataBase "$Code\n" } } return $CodesBonsPourDataBase } proc TransformeLigneEnColonne {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { set LesNoms [split $Ligne " "] foreach Nom $LesNoms { #Espionne $Nom append Fichier "$Nom\n" } } return $Fichier } proc Tree2Coordonnees {AId} { global Abr subangleMax Xmin Xmax Ymin Ymax set subangleMax 999. TransformationPolaire $AId root [expr {[Pi]/2.}] [expr {-[Pi]/2.}] [expr {3.*[Pi]/2.}] set Abr($AId,subangleMax) $subangleMax set Xmin 999999. set Ymin 999999. set Xmax -999999. set Ymax -999999. TransformationCartesienne $AId root return } proc Tree2PH {t n} { if {[$t isleaf $n]} {return $n} set x "(" set Lnd [list] foreach fils [$t children $n] { set l ":[$t get $fils length]" lappend Lnd "[Tree2PH $t $fils]$l" } append x [join $Lnd ,] ")" if {$n eq "root"} {append x ";"} return $x } proc Tree:closeallchildren {w v} { global Tree if {![info exists Tree($w:$v:open)]} return Tree:close $w $v foreach c $Tree($w:$v:children) { Tree:closeallchildren $w "$v/$c" } } proc Tree:createallchildren {KTree LeCheminComplet} { global Tree set Chemin "" foreach LeNewChild $LeCheminComplet { set NewChild [lindex $LeNewChild 0] set OpenOuClose [lindex $LeNewChild 1] set image [lindex $LeNewChild 2] set Chemin "$Chemin/$NewChild" if {[info exists Tree($KTree:$Chemin:open)]} {continue} Tree:newitem $KTree $Chemin -image $image TreeOpenOuClose $KTree $Chemin $OpenOuClose } } proc Tree:delitem {w v} { global Tree if {![info exists Tree($w:$v:open)]} return if {[string compare $v /]==0} { # delete the whole widget catch {destroy $w} foreach t [array names Tree $w:*] { unset Tree($t) } } if {[info exists Tree($w:$v:children)]} { foreach c $Tree($w:$v:children) { catch {Tree:delitem $w $v/$c} } unset Tree($w:$v:children) } if {[info exists Tree($w:$v:open)]} {unset Tree($w:$v:open)} if {[info exists Tree($w:$v:icon)]} {unset Tree($w:$v:icon)} set dir [file dirname $v] if {[info exists Tree($w:$dir:children)]} { set n [file tail $v] set i [lsearch -exact $Tree($w:$dir:children) $n] if {$i>=0} { set Tree($w:$dir:children) [lreplace $Tree($w:$dir:children) $i $i] } } Tree:buildwhenidle $w } proc Tree:openallchildren {w v} { global Tree if {![info exists Tree($w:$v:open)]} return Tree:open $w $v foreach c $Tree($w:$v:children) { Tree:openallchildren $w "$v/$c" } } proc TreeDeLeaf {name} { foreach t $::Ltrees { set Lt [$t serialize] if {[lsearch -exact [lindex $Lt 2] $name] != -1} { return $t } } return "" } proc TreeFromArbre {Valeur Arbre {Type Classe}} { global NumeroPourTreeFromArbre if { ! [info exists NumeroPourTreeFromArbre]} { set NumeroPourTreeFromArbre 0 } incr NumeroPourTreeFromArbre set Beau [format "N_%5.5d" $NumeroPourTreeFromArbre] set Valeur $Beau if {[EstUneFeuille $Arbre]} { set Access [NomDeLaFeuille $Arbre] if {$Type=="Access"} { set Info $Access } if {$Type=="Organisme"} { set Info [OrgaDuAccess $Access] } if {$Type=="Classe"} { set Info [OCduOS [OrgaDuAccess $Access]] } # set L [NewLeaf [list $Valeur $Info]] set L [NewLeaf $Info] return $L } Dedouble $Arbre G x D y # set T [NewTreeFromTrees [list $Valeur ""] [TreeFromArbre $x $G $Type] [TreeFromArbre $y $D $Type]] set T [NewTreeFromTrees $Valeur [TreeFromArbre $x $G $Type] [TreeFromArbre $y $D $Type]] return $T } proc TreeOpenOuClose {K Chemin {OpenOuClose Open}} { global Tree if {![info exists Tree]} {return} if {[string equal -nocase $OpenOuClose "Open"]} { set Tree($K:$Chemin:open) 1 return } if {[string equal -nocase $OpenOuClose "Close"]} { set Tree($K:$Chemin:open) 0 return } return } proc TresseVRP {{FichierMSF ""} {FichierTresse ""} {Derive 0}} { while { ! [file exists $FichierMSF]} { if {$FichierMSF==""} { FaireLire "Please, browse for a MSF file." set FichierMSF [ButineArborescence "All" "[RepertoireDuGenome]/"] } elseif {[regexp [ExpressionReguliereDesPABs] $FichierMSF]} { set FichierMSF "[RepertoireDuGenome]/msf/$FichierMSF" } if {$FichierMSF==""} { return "" } if { ! [file exists $FichierMSF]} { if {[OuiOuNon "$FichierMSF\n doesn't exist. Do I skipp ?"]} { return "" } set FichierMSF "" } } if {$FichierTresse==""} { FaireLire "Please, give a filename for output." set FichierTresse [FichierPourSaveAs] } if {$FichierTresse==""} { return "" } set NombreDeSequences [DecortiqueUnMSF $FichierMSF LesNomsDeSequences Sequences] set Sortie {} lappend Sortie "begin_object [string range [file tail $FichierMSF] end-5 end ]" set Ieme 0 foreach Nom $LesNomsDeSequences { incr Ieme set Sequence [set Sequences($Nom)] set Objet [format "%s%3.3d" "Seq" $Ieme] set Couleur [Nuance3x8 [expr 1.0*$Ieme/$NombreDeSequences]] scan $Couleur "%d %d %d" r g b set CouleurPourO [expr ($r*256 + $g)*256 + $b] lappend Sortie " colour $CouleurPourO" set Trace "move" set X 0.0 set Y 0.0 set Z 0.0 set dZ 1.0 foreach A [split $Sequence ""] { set Z [expr $Z+$dZ] scan [VecteurVRP $A] "%f %f" dX dY set X [expr $X+$dX] set Y [expr $Y+$dY] if {$Derive} { lappend Sortie "$Trace $X $Y $Z" } else { lappend Sortie "move 0.0 0.0 $Z" lappend Sortie "line $dX $dY $Z" } set Trace "line" } # lappend Sortie "end" # Espionne [set FichierCree [SauveLesLignes $Sortie dans ${FichierTresse}$Objet]] # regsub "/groupes/poch" $FichierCree "/home" FichierCree # lappend LesFichiersCrees "draw $FichierCree" } Espionne [SauveLesLignes $Sortie dans $FichierTresse] # Espionne [SauveLesLignes $LesFichiersCrees dans $FichierTresse] exit } proc Tresults {pktest pfamid Lval} { global db lassign $Lval Nseq Lgt m sd Lpro $db eval {update pfam set nseqs=$Nseq,lgt=$Lgt,idm=$m,idsd=$sd where pfamid=$pfamid} foreach p $Lpro { $db eval {insert into propfam values(NULL,$p,$pfamid)} } update return [list] } proc TriAlea {SeuilExpect MaxListe lAccess lPN} { if {[llength $lAccess] < 3} {return $lAccess} set i 0 foreach e $lPN { if {$e <= $SeuilExpect} { incr i } else { break } } set Ntot $i # on a au max 500 sequences dans init, donc on peut garder au max # 0.6 * 500 sequences if {$Ntot > 500} { set Garde [expr 500 * 0.4] } else { set Garde [expr $Ntot * 0.4] } # set NOte [expr $Ntot * 0.6] # set Garde [expr $Ntot - $NOte] if {$Garde > $MaxListe} {set Garde $MaxListe} #Espionne "NOte vaut $NOte" Espionne "garde vaut $Garde" #set Garde [expr round($Garde)] #Espionne "garde vaut $Garde" set n 1 set Lidx {} while {$n < $Garde} { set idx [expr round(rand() * [expr $Ntot - 1])] if {[lsearch $Lidx $idx] == -1} { lappend Lidx $idx incr n } } set Lidx [lsort -integer -decreasing $Lidx] #Espionne $Lidx set LesElus {} foreach e $Lidx { lappend LesElus [lindex $lAccess $e] } #Espionne "les elus sont $LesElus" return $LesElus } proc TriBilanHDACroises {K Index SurQui} { global MemoBilanHDACroises set LesXs [set MemoBilanHDACroises($K,LesXs)] set LesYs [set MemoBilanHDACroises($K,LesYs)] foreach {C V} [array get MemoBilanHDACroises] { regsub "$K," $C "" C set T($C) $V } if {$SurQui=="SurOrganisme"} { set Ordres {"bidon" "BAE" "SampledBAE" "Alpha"} set Ordre [lindex $Ordres $Index] set LesGenoTries [LesGenomesDansLeBonOrdre $Ordre] foreach Y $LesYs { set JExiste($Y) 1 } set LesVYs {} foreach G $LesGenoTries { set Y [string toupper [Glossaire $G Court]] if { ! [info exists JExiste($Y)]} { continue } lappend LesYsTries $Y } set Titre "X-HDA sorted by Organisms ($Ordre)" return [DessineBilanHDACroises $LesXs $LesYsTries T $Titre] } if {$SurQui=="SurFamille"} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set Famille [lindex $MesTags 1] set LesVYs {} foreach Y $LesYs { set V [set T($Famille,$Y)] set VY [split $V " "] lappend VY $Y lappend LesVYs $VY set YduVY($VY) $Y } set LesVYsTries [lsort -decreasing -index [expr $Index-1] -integer $LesVYs] set LesYsTries {} foreach VY $LesVYsTries { set Y [set YduVY($VY)] lappend LesYsTries $Y } set Titre "X-HDA sorted by $Famille ($Index)" return [DessineBilanHDACroises $LesXs $LesYsTries T $Titre] } if {$SurQui=="SurLaMoyenne"} { Wup "il faut trier LesXs en fonction de la valeur du Bilan" set Id [$K find withtag current] set MesTags [$K gettags $Id] set Complet [lindex $MesTags 0] set Orga [lindex $MesTags 1] set LesVXs {} foreach X $LesXs { set Famille $X set V [set T($Famille,$Orga)] set VX [split $V " "] lappend VX $X lappend LesVXs $VX set XduVX($VX) $X } set LesVXsTries [lsort -decreasing -index [expr $Index-1] -integer $LesVXs] set LesXsTries {} foreach VX $LesVXsTries { set X [set XduVX($VX)] lappend LesXsTries $X } set Titre "X-HDA sorted with $Complet ($Index)" return [DessineBilanHDACroises $LesXsTries $LesYs T $Titre] } } proc TriCami {e m la lp} { global DefautsPipe set lbon "" set maxPQS [expr $m - 50] set i 0 set j 0 foreach a $la { if {![regexp -nocase {^PQS} $a] && ![regexp -nocase {^PDB} $a]} { if {$i < 50} { lappend lbon $a incr i } } else { if {$j < $maxPQS} { lappend lbon $a incr j } } } return $lbon } proc TriDeFichiers {A B} { set DA [file dirname $A] set DB [file dirname $B] if {$DA<$DB} { return -1 } if {$DA>$DB} { return 1 } return [string compare [file tail $A] [file tail $B]] } proc TriDeJean {fichier} { set NombreDeY 0 set NombreDeN 0 set NombreTotal 0 foreach ligne [LesLignesDuFichier $fichier] { scan $ligne "%s %s" PAB Type if {$Type=="y"} {incr NombreDeY} if {$Type=="n"} {incr NombreDeN} incr NombreTotal lappend LesPabs $ligne } EspionneL $LesPabs Espionne "Nbr Total $NombreTotal WrongStartCodon" Espionne "In O-Island $NombreDeY [format "%4.2f" [expr $NombreDeY./$NombreTotal.*100]]%" Espionne "In Both strain $NombreDeN [format "%4.2f" [expr $NombreDeN./$NombreTotal.*100]]%" exit return [list $LesPabs $NombreDeY [format "%4.2f" [expr $NombreDeY./$NombreTotal.]] $NombreDeN [format "%4.2f" [expr $NombreDeN./$NombreTotal]] $NombreTotal] } proc TriEuca {e m la lp} { global DefautsPipe if {$m > 100} { set maxPDB 25 } else { set maxPDB [expr $m/4] } # m est MaxHitListe set ficTmp "./listeAccForBird.txt" set ficOutTar "bird.tar.gz" set ficOutTarDec "bird.tar" set ficOut "listeEuca" set lbon "" set nbPDB 0 if {$la != ""} { # creation du fichier necessaire pour interroger BIRD set f [open $ficTmp w] foreach a $la { puts $f "ID [EnlevePrefixeBank $a] DB Prot" puts $f "WH OC contains Eukaryota" puts $f "FD ID,AC" puts $f "//" } close $f set urlBird [set DefautsPipe(Url,birdHoan)] set CommandeBird "[CurlExe] -F upload=@$ficTmp ${urlBird}bsearch?service=querycomplexe&out_file=${ficOut}&interpro=yes -o ${ficOutTar}" if {[catch {eval exec $CommandeBird} Message]} {puts "$Message"} if {[file exists $ficOutTar]} { catch {eval exec gunzip -f $ficOutTar} Message catch {eval exec tar -xf $ficOutTarDec} Message if {[file exists ${ficOut}.sw]} { set lignes [LesLignesDuFichier ${ficOut}.sw] foreach a $la { if {[EstUnAccessPDB $a]} { if {[llength $lbon] < $m && $nbPDB < $maxPDB} { lappend lbon $a incr nbPDB } } elseif {[lsearch -regexp $lignes [EnlevePrefixeBank $a]] != -1 && [llength $lbon] < $m} { lappend lbon $a } } } } file delete -force $ficTmp $ficOutTar ${ficOut}.* } return $lbon } proc TriFDD {exp mxs la lp} { set lBanqueId $la set lPN $lp set LDPN {} set LD2PN {} set LD3PN {} if {[llength $lPN] < 5} { set LesElus $lBanqueId return $LesElus } # Transformation E-values # set lPN [LisseCourbe $lPN] foreach e $lPN { if {$e == 0.0} {set e "1.0e-300"} set e [expr log($e)] lappend llogPN $e } set Eder [lindex $lPN end] # Calcul des derivee premiere, seconde et tierce set LDPN [Derivee $llogPN] # set LDPN [LisseCourbe $LDPN] set LDPN [linsert $LDPN 0 -300.] set LD2PN [Derivee $LDPN] set LD2PN [linsert $LD2PN 0 300.] # set LD2PN [linsert $LD2PN end 300.] set LD3PN [Derivee $LD2PN] set LD3PN [linsert $LD3PN 0 300.] # set LD3PN [linsert $LD3PN end 300. 300.] # fait tri # Met toujours le Premier lappend LesElus [lindex $lBanqueId 0] set nelus 0 set i 0 set LDt [lrange $LD3PN 0 end] set LBt [lrange $lBanqueId 0 end] foreach e $LDt { if {$i == 0 || $i == 1} { incr i continue } set icou [expr $i-1] set Flag 0 if {$e < 0.0} { set prev [lindex $LDt ${icou}] if {$prev > 0.0} { lappend LesElus [lindex $LBt $icou] lappend Lid $icou set Flag 1 incr nelus } } if {$nelus >= $mxs} {break} incr i } foreach i $LesElus { if {$i == ""} {continue} lappend res $i } set LesElus $res return $LesElus } proc TriFragments {Page {Maniere ""} {Action ""}} { if {$Action==""} { set Action "Affiche" } if {$Maniere==""} { set Maniere "Ask" } if {$Maniere=="Ask"} { set Maniere [ChoixParmi [list "FillLimitsWith_000" "FullLeftRightOnSameLine" "1_3_0" "0_3_1" "0_" "1_" "2_" "3_" "Other"]] } if {$Maniere=="Other"} { set Maniere [Entre "0_1_2_3_"] } set LesLignes [split $Page "\n"] if {$Maniere=="FillLimitsWith_000"} { foreach Ligne $LesLignes { if {[regexp -- {^[^_]+_([^ \-_]+\-[0-9]+\-[0-9]+)_} $Ligne Match Sujet]} { set LesMots [split $Sujet "-"] ScanLaListe $LesMots N D F set BeauSujet [format "%s-%4.4d-%4.4d" $N $D $F] regsub -- "\-" $Sujet "\\\-" SujetRX regsub $SujetRX $Ligne $BeauSujet Ligne set DiffLong [expr [string length $BeauSujet]-[string length $Sujet]] set iB [string first " " $Ligne] regsub [string repeat " " $DiffLong] $Ligne "" Ligne } lappend LesLignesTriees $Ligne } } elseif {[regexp {^[0-9]+_[0-9]*} $Maniere]} { set Maniere [string trim $Maniere "_"] set LOrdre [split $Maniere "_"] set LesLignesTriees [LesLignesTrieesSurUneClefEntete $LesLignes $LOrdre] } elseif {$Maniere=="FullLeftRightOnSameLine"} { foreach Ligne $LesLignes { set Entete "" scan $Ligne "%s %d %d %f %f" Entete Residues Charged Molecularweight Isoelectricpoint if {$Entete==""} { continue } regsub "_" $Entete " " ZoNom scan $ZoNom "%s %s" Zone Nom if { ! [info exists DejaVu($Nom)]} { lappend LesNoms $Nom } set DejaVu($Nom) 1 foreach Var [list Entete Residues Charged Molecularweight Isoelectricpoint] { set P($Nom,$Zone,$Var) [set $Var] } } foreach Nom $LesNoms { set ZoNom [string range "All_$Nom" 0 36] set ChargedF [set P($Nom,Full,Charged)] set ChargedL [set P($Nom,Left,Charged)] set ChargedR [set P($Nom,Righ,Charged)] set MolecularweightF [set P($Nom,Full,Molecularweight)] set MolecularweightL [set P($Nom,Left,Molecularweight)] set MolecularweightR [set P($Nom,Righ,Molecularweight)] set IsoelectricpointF [set P($Nom,Full,Isoelectricpoint)] set IsoelectricpointL [set P($Nom,Left,Isoelectricpoint)] set IsoelectricpointR [set P($Nom,Righ,Isoelectricpoint)] lappend LesLignesTriees [format "%-40.40s %3d %3d %3d %10.2f %10.2f %10.2f %5.2f %5.2f %5.2f" $ZoNom $ChargedF $ChargedL $ChargedR $MolecularweightF $MolecularweightL $MolecularweightR $IsoelectricpointF $IsoelectricpointL $IsoelectricpointR ] } } else { return $Page } set BellePage [join $LesLignesTriees "\n"] if {$Action=="Retour"} { return $BellePage } return [AfficheVariable $BellePage "AvecTriFragments"] } proc TriHKL {Fichier} { set Sortie {} foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%5d %5d %5d %f %f %f %f %f %f %f %f" h k l Fp SFp Fm SFm F SF DF SDF puts "$h $k $l" if {$SDF<0} { continue } if {$SFm<0} { set SFm 0 } lappend Sortie [format "%5d%5d%5d%12.4e%12.4e%12.4e%12.4e%12.4e%12.4e%12.4e%12.4e" $h $k $l $Fp $SFp $Fm $SFm $F $SF $DF $SDF] } puts [SauveLesLignes $Sortie dans "$Fichier.nouveau"] } proc TriLesLocalisations {{BestOnly ""}} { global RepertoireDuGenome set BestOnly [regexp -nocase "BestOnly" $BestOnly] if {$BestOnly} { set Best ".best" } else { set Best "" } set FichLoc "$RepertoireDuGenome/fiches/localisationchrocontig" set FichTrD "$RepertoireDuGenome/fiches/localisationchrocontig.trid$Best" set FichTrF "$RepertoireDuGenome/fiches/localisationchrocontig.trif$Best" if { ! [file exists $FichLoc]} { return [list {} {}] } while {[file exists $FichTrD]} { if {[OuiOuNon "$FichTrD already exists. Do I use it ?"]} { return [list [LesLignesDuFichier $FichTrD] [LesLignesDuFichier $FichTrF]] } if {[OuiOuNon "$FichTrD already exists. Do I overwrite it ?"]} { File delete -force $FichTrD File delete -force $FichTrF } else { if {[OuiOuNon "Do I stop ?"]} { exit } } } foreach Ligne [LesLignesDuFichier $FichLoc] { scan $Ligne "%s %s %s %d %d %s" Nom Chro Contig Debut Fin Sens if {$BestOnly && [info exists Dejavu($Nom)]} { continue } set Dejavu($Nom) 1 set CC "$Chro $Contig" lappend LesLocsDesCC($CC) $Ligne if { ! [info exists DejaVu($CC)]} { lappend LesCC $CC } set DejaVu($CC) 1 } set LesCCT [lsort $LesCC] foreach CC $LesCCT { set LesDebuts {} set LesFins {} if {[info exists DejaDebut]} { unset DejaDebut ; unset LesLocsDesDebuts} if {[info exists DejaFin]} { unset DejaFin ; unset LesLocsDesFins} foreach Ligne [set LesLocsDesCC($CC)] { scan $Ligne "%s %s %s %d %d %s" Nom Chro Contig Debut Fin Sens lappend LesLocsDesDebuts($Debut) $Ligne if { ! [info exists DejaDebut($Debut)]} { lappend LesDebuts $Debut } set DejaDebut($Debut) 1 lappend LesLocsDesFins($Fin) $Ligne if { ! [info exists DejaFin($Fin)]} { lappend LesFins $Fin } set DejaFin($Fin) 1 } set LesDebuts [lsort -integer $LesDebuts] set LesFins [lsort -integer $LesFins] foreach Debut $LesDebuts { AppendAuFichier $FichTrD [join [set LesLocsDesDebuts($Debut)] "\n"] } foreach Fin $LesFins { AppendAuFichier $FichTrF [join [set LesLocsDesFins($Fin)] "\n"] } } return [list [LesLignesDuFichier $FichTrD] [LesLignesDuFichier $FichTrF]] } proc TriListeCorrespondance {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { lappend LaCorrespondance $Ligne } set ListeTriee [lsort -dictionary -index 2 $LaCorrespondance] return $ListeTriee } proc TriMeta {e m la lp} { global DefautsPipe if {$m > 100} { set maxPDB 25 } else { set maxPDB [expr $m/4] } # m est MaxHitListe set ficTmp "./listeAccForBird.txt" set ficOutTar "bird.tar.gz" set ficOutTarDec "bird.tar" set ficOut "listeMeta" set lbon "" set nbPDB 0 if {$la != ""} { # creation du fichier necessaire pour interroger BIRD set f [open $ficTmp w] foreach a $la { puts $f "ID [EnlevePrefixeBank $a] DB Prot" puts $f "WH OC contains Metazoa" puts $f "FD ID,AC" puts $f "//" } close $f set urlBird [set DefautsPipe(Url,birdHoan)] set CommandeBird "[CurlExe] -F upload=@$ficTmp ${urlBird}bsearch?service=querycomplexe&out_file=${ficOut}&interpro=yes -o ${ficOutTar}" if {[catch {eval exec $CommandeBird} Message]} {puts "$Message"} if {[file exists $ficOutTar]} { catch {eval exec gunzip -f $ficOutTar} Message catch {eval exec tar -xf $ficOutTarDec} Message if {[file exists ${ficOut}.sw]} { set lignes [LesLignesDuFichier ${ficOut}.sw] foreach a $la { if {[EstUnAccessPDB $a]} { if {[llength $lbon] < $m && $nbPDB < $maxPDB} { lappend lbon $a incr nbPDB } } elseif {[lsearch -regexp $lignes [EnlevePrefixeBank $a]] != -1 && [llength $lbon] < $m} { lappend lbon $a } } } } file delete -force $ficTmp $ficOutTar ${ficOut}.* } return $lbon } proc TriMounir {e m la lp} { if {[llength $la] < 2} {return $la} set i 0 set n 0 set palier 0. foreach p $lp { set pal($i) $p if {$p == "1e-200"} {set pal($i) 0.} set j [expr $i - 1] if {$i > 0 && [expr [set pal($i)] * [set pal($j)] ]} { set palier [expr $palier + log([set pal($i)]) - log([set pal($j)]) ] } incr i incr n } set palier [expr $palier / ($n - 1)] # prends toujours le premier set i 0 set nok 0 set liste {} while {($i < $n) && ($nok < $m)} { if {$i == 0} { lappend liste [lindex $la 0] set exprev [set pal(0)] incr nok } else { if {[set pal($i)] != 0.} { if {$exprev == 0.} { lappend liste [lindex $la $i] set exprev [set pal($i)] set difference 0. incr nok } else { set difference [expr log([set pal($i)])-log($exprev)] } # Si la difference est sup. au palier on prend la sequence if {$difference > $palier} { lappend liste [lindex $la $i] set exprev [set pal($i)] incr nok } } } incr i } return $liste } proc TriNature {e m la lp} { # m est MaxHitListe set lbon [lrange $la 0 $m] return $lbon } proc TriParMoisAnnee {R1 R2} { lassign $R1 M1 A1 if {$M1==""} { set M1 Juin } lassign $R2 M2 A2 if {$M2==""} { set M2 Juin } return [CompareDate "$M1 $A1" "$M2 $A2"] } proc TriParScoreMinEtLongueurMin {ratioScores a b} { set scoreA [lindex $a 0] set defA [lindex $a 1] set scoreB [lindex $b 0] set defB [lindex $b 1] # Attention : scores tous négatifs (<= -13) if {[expr ($scoreA < $scoreB) ? double($scoreB) / $scoreA : double($scoreA) / $scoreB] >= $ratioScores} { if {[string length $defA] < [string length $defB]} { return -1 } elseif {[string length $defA] > [string length $defB]} { return 1 } } else { if {$scoreA < $scoreB} { return -1 } elseif {$scoreA > $scoreB} { return 1 } } return 0 } proc TriSplice {e m la lac lp ld} { global DefautsPipe set lbon {} # defini le nombre max de sequences de chaque orga set max [expr $m / 11] set i 0; set j 0; set k 0; set l 0; set o 0; set p 0 set q 0; set r 0; set s 0; set t 0; set u 0 set n 0 foreach a $la ac $lac de $ld { set Orga "" if {![regexp {^ENS} $a]} { if {[regexp "OS=" $de]} { set Orga [string trim [StringSuivant "OS=" dans $de]] if {[regexp "GN=" $Orga]} { set index [string first "GN=" $Orga] set Orga [string trim [string range $Orga 0 [expr $index-1]]] } elseif {[regexp "Length =" $Orga]} { set index [string first "Length =" $Orga] set Orga [string trim [string range $Orga 0 [expr $index-1]]] } else { Espionne "==========$a n'a pas d'OS============" } } } if { ([regexp "[InterrogeCorresEnsEtOS "Homo sapiens" Ens]P\[0-9\]" $ac] || ($Orga == "Homo sapiens" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $i < $max } { lappend lbon $a incr i incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Mus musculus" Ens]P\[0-9\]" $ac] || ($Orga == "Mus musculus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $j < $max } { lappend lbon $a incr j incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Rattus norvegicus" Ens]P\[0-9\]" $ac] || ($Orga == "Rattus norvegicus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $k < $max } { lappend lbon $a incr k incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Canis familiaris" Ens]P\[0-9\]" $ac] || (($Orga == "Canis familiaris" || $Orga == "Canis lupus familiaris") && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $l < $max } { lappend lbon $a incr l incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Danio rerio" Ens]P\[0-9\]" $ac] || ($Orga == "Danio rerio" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $o < $max } { lappend lbon $a incr o incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Xenopus tropicalis" Ens]P\[0-9\]" $ac] || ($Orga == "Xenopus tropicalis" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $p < $max } { lappend lbon $a incr p incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Bos taurus" Ens]P\[0-9\]" $ac] || ($Orga == "Bos taurus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $q < $max } { lappend lbon $a incr q incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Gallus gallus" Ens]P\[0-9\]" $ac] || ($Orga == "Gallus gallus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $r < $max } { lappend lbon $a incr r incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Tetraodon nigroviridis" Ens]P\[0-9\]" $ac] || ($Orga == "Tetraodon nigroviridis" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $s < $max } { lappend lbon $a incr s incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Ornithorhynchus anatinus" Ens]P\[0-9\]" $ac] || ($Orga == "Ornithorhynchus anatinus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $t < $max } { lappend lbon $a incr t incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Monodelphis domestica" Ens]P\[0-9\]" $ac] || ($Orga == "Monodelphis domestica" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $u < $max } { lappend lbon $a incr u incr n } } return $lbon } proc TriSpliceAnne {e m la lac lp ld} { global DefautsPipe set lbon "" # defini le nombre max de sequences de chaque orga set max [expr $m / 4] set i 0 set j 0 set k 0 set l 0 set n 0 foreach a $la ac $lac de $ld { if {([regexp {ENSP[0-9]} $a] || [regexp {_HUMAN} $a] || ([regexp {[NXYZA]P_[0-9]} $ac] && [regexp {\[Homo sapiens\]} $de])) && $i < $max} { lappend lbon $a incr i incr n } elseif {([regexp {ENSMUSP[0-9]} $a] || [regexp {_MOUSE} $a] || ([regexp {[NXYZA]P_[0-9]} $ac] && [regexp {\[Mus musculus\]} $de])) && $j < $max} { lappend lbon $a incr j incr n } elseif {([regexp {ENSRNOP[0-9]} $a] || [regexp {_RAT} $a] || ([regexp {[NXYZA]P_[0-9]} $ac] && [regexp {\[Rattus norvegicus\]} $de])) && $k < $max} { lappend lbon $a incr k incr n } elseif {([regexp {ENSTNIP[0-9]} $a] || [regexp {_TETNG} $a] || ([regexp {[NXYZA]P_[0-9]} $ac] && [regexp {\[Tetraodon nigroviridis\]} $de])) && $l < $max} { lappend lbon $a incr l incr n } elseif {[EstUnAccessVarSplic $a]} { if {([regexp {_HUMAN} $ac] || [regexp {_MOUSE} $ac] || [regexp {_RAT} $ac] || [regexp {_TETNG} $ac]) && $n < $m} { lappend lbon $a incr n } } } return $lbon } proc TriSpliceMoi {e m la lac lp ld} { global DefautsPipe set lbon {} # defini le nombre max de sequences de chaque orga set max [expr $m / 11] set i 0; set j 0; set k 0; set l 0; set o 0; set p 0 set q 0; set r 0; set s 0; set t 0; set u 0 set n 0 foreach a $la ac $lac de $ld { Espionne "a $a ac $ac de $de" set Orga "" if {![regexp {^ENS} $a]} { Espionne "onentre" if {[regexp "OS=" $de]} { set Orga [string trim [StringSuivant "OS=" dans $de]] if {[regexp "GN=" $Orga]} { set index [string first "GN=" $Orga] set Orga [string trim [string range $Orga 0 [expr $index-1]]] } elseif {[regexp "Length =" $Orga]} { set index [string first "Length =" $Orga] set Orga [string trim [string range $Orga 0 [expr $index-1]]] } else { Espionne "==========$a n'a pas d'OS============" } } } Espionne "onestla" Espionne "Orga $Orga ++" if { ([regexp "[InterrogeCorresEnsEtOS "Homo sapiens" Ens]P\[0-9\]" $ac] || ($Orga == "Homo sapiens" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $i < $max } { Espionne "entre Homo" lappend lbon $a incr i incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Mus musculus" Ens]P\[0-9\]" $ac] || ($Orga == "Mus musculus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $j < $max } { Espionne "entre Mus" lappend lbon $a incr j incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Rattus norvegicus" Ens]P\[0-9\]" $ac] || ($Orga == "Rattus norvegicus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $k < $max } { Espionne "entre Rattus" lappend lbon $a incr k incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Canis familiaris" Ens]P\[0-9\]" $ac] || (($Orga == "Canis familiaris" || $Orga == "Canis lupus familiaris") && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $l < $max } { Espionne "entre Canis" lappend lbon $a incr l incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Danio rerio" Ens]P\[0-9\]" $ac] || ($Orga == "Danio rerio" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $o < $max } { Espionne "entre Danio" lappend lbon $a incr o incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Xenopus tropicalis" Ens]P\[0-9\]" $ac] || ($Orga == "Xenopus tropicalis" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $p < $max } { Espionne "entre Xenopus" lappend lbon $a incr p incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Bos taurus" Ens]P\[0-9\]" $ac] || ($Orga == "Bos taurus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $q < $max } { Espionne "entre Bos" lappend lbon $a incr q incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Gallus gallus" Ens]P\[0-9\]" $ac] || ($Orga == "Gallus gallus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $r < $max } { Espionne "entre Gallus" lappend lbon $a incr r incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Tetraodon nigroviridis" Ens]P\[0-9\]" $ac] || ($Orga == "Tetraodon nigroviridis" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $s < $max } { Espionne "entre Tetraodon" lappend lbon $a incr s incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Ornithorhynchus anatinus" Ens]P\[0-9\]" $ac] || ($Orga == "Ornithorhynchus anatinus" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $t < $max } { Espionne "entre Ornithorhynchus" lappend lbon $a incr t incr n } elseif { ([regexp "[InterrogeCorresEnsEtOS "Monodelphis domestica" Ens]P\[0-9\]" $ac] || ($Orga == "Monodelphis domestica" && ([regexp {[NXYZA]P_[0-9]} $ac] || [regexp {^SW:} $a] || [regexp {^TR:} $a] || [EstUnAccessVarSplic $a]))) && $u < $max } { Espionne "entre Monodelphis" lappend lbon $a incr u incr n } } return $lbon } proc TriStrips {SeuilExpect MaxListe lAccess lBanqueId lPN lDE} { if {[llength $lAccess] < 2} {return $lAccess} set MaxNbElus $MaxListe set NombreMiniDeProches 1 set LesLBsEtLeursCandidats [LesBandelettesDuBlastGrid $lAccess $lBanqueId $lPN $lDE] set LesElus {} set TousLesProches {} set NbElus 0 foreach {LB SesCandidats} $LesLBsEtLeursCandidats { catch {unset PremierSW} catch {unset PremierTout} catch {unset PremierPDB} foreach Candidat $SesCandidats { scan $Candidat "%s %s %s %s %s %s" LogPN BId Access PN DE OX if {[EstUnAccessPDB $BId]} { if {! [info exists PremierPDB]} {set PremierPDB $BId } continue } if {[EstUnAccessSwissprot $BId]} { if {! [info exists PremierSW]} { set PremierSW $BId } } if {! [info exists PremierTout]} { set PremierTout $BId } } set Capital "" if { [info exists PremierSW]} { set Capital $PremierSW } elseif { [info exists PremierTout]} { set Capital $PremierTout } elseif { [info exists PremierPDB]} { set Capital $PremierPDB } set NProchesPrisPourCetteBandelette 0 foreach Candidat $SesCandidats { set OX "" scan $Candidat "%s %s %s %s %s %s" LogPN BId Access PN DE OX # on ne prend pas les PDB par defaut... if {![EstUnAccessPDB $BId]} { lappend LesProches "$BId $Access $PN $OX" set BonAPrendre [expr $PN<=0.001 && [string equal $BId $Capital]] } #lappend LesProches "$BId $Access $PN $OX" #set BonAPrendre [expr [EstUnAccessPDB $BId] || $PN<=0.001 && [string equal $BId $Capital]] if {$BonAPrendre} { lappend LesElus "$BId $Access $PN $OX" set NbElus [llength $LesElus] if {$NbElus > $MaxNbElus} { break } } if {$PN<=0.001} { lappend TousLesProches "$BId $Access $PN $OX" } else { if { ! [info exists DejaBascule] && [llength $LesElus]<$NombreMiniDeProches} { set DejaBascule 1 lappend TousLesProches "$BId $Access $PN $OX" set LesElus $TousLesProches } } } if {$NbElus > $MaxNbElus} { break } } Espionne "il y a $NbElus elus" set res [ExtraitListeDeListe $LesElus 0] return $res } proc TriVert {e m la lp} { global DefautsPipe if {$m > 100} { set maxPDB 25 } else { set maxPDB [expr $m/4] } # m est MaxHitListe set ficTmp "./listeAccForBird.txt" set ficOutTar "bird.tar.gz" set ficOutTarDec "bird.tar" set ficOut "listeVert" set lbon "" set nbPDB 0 if {$la != ""} { # creation du fichier necessaire pour interroger BIRD set f [open $ficTmp w] foreach a $la { puts $f "ID [EnlevePrefixeBank $a] DB Prot" puts $f "WH OC contains Vertebrata" puts $f "FD ID,AC" puts $f "//" } close $f set urlBird [set DefautsPipe(Url,birdHoan)] set CommandeBird "[CurlExe] -F upload=@$ficTmp ${urlBird}bsearch?service=querycomplexe&out_file=${ficOut}&interpro=yes -o ${ficOutTar}" if {[catch {eval exec $CommandeBird} Message]} {puts "$Message"} if {[file exists $ficOutTar]} { catch {eval exec gunzip -f $ficOutTar} Message catch {eval exec tar -xf $ficOutTarDec} Message if {[file exists ${ficOut}.sw]} { set lignes [LesLignesDuFichier ${ficOut}.sw] foreach a $la { if {[EstUnAccessPDB $a]} { if {[llength $lbon] < $m && $nbPDB < $maxPDB} { lappend lbon $a incr nbPDB } } elseif {[EstUnAccessVarSplic $a] && [llength $lbon] < $m} { lappend lbon $a } elseif {[lsearch -regexp $lignes [EnlevePrefixeBank $a]] != -1 && [llength $lbon] < $m} { lappend lbon $a } } } } file delete -force $ficTmp $ficOutTar ${ficOut}.* } return $lbon } proc TrieAleatoirement {TexteA TexteB} { set n [expr round(rand())] if {[string equal $TexteA $TexteB]} { return 0 } elseif {$n == 0} { return -1 } else { return 1 } } proc TrieBCMRes {what} { global GR Lrm if {$what eq "cree"} { lassign [split $GR(lim) " "] slimmin slimmax if {$GR(gap) eq "All"} { set sgap "*" } else { set sgap $GR(gap) } if {$GR(cm) eq "All"} { set scm "*" } else { set scm $GR(cm) } set Ltmp [array names Lrm "$slimmin,$slimmax,$sgap,$scm"] set GR(vis) [list] foreach k $Ltmp { lassign [split $k ,] lmin lmax gap cm foreach l [set Lrm($k)] { lassign $l meth sens spec power nTot nLSA nFind npkr lappend GR(vis) [list $sens $spec $power $meth $gap $cm $nTot $nLSA $nFind] } } set GR(LabelInfo) "Sens Spec Power " } elseif {$GR(vis) == {} } { return } elseif {$what eq "sens"} { set GR(vis) [lsort -real -index 0 -decreasing $GR(vis)] } elseif {$what eq "spec"} { set GR(vis) [lsort -real -index 1 -decreasing $GR(vis)] } else { set GR(vis) [lsort -real -index 2 -decreasing $GR(vis)] } $GR(text) configure -state normal $GR(text) delete 1.0 end set lgt [PlusLongEltDe $GR(Lmeth)] puts "lgt $lgt" set Elvis [list] set fmt "%6.4f %6.4f %6.4f | %- ${lgt}s %4.2f %s | %6d %6d %6d" foreach l $GR(vis) { lappend Elvis [format $fmt {*}$l] } $GR(text) insert end "[join $Elvis \n]" $GR(text) configure -state disabled return } proc TrieDoubles {a b} { lassign $a sa ssa ga na pa gna gpa npa lassign $b sb ssb gb nb pb gnb gpb npb set mxa [expr {max($ga,$pa,$na)}] set mxb [expr {max($gb,$pb,$nb)}] if {abs($mxa-$mxb) >= 5.} { if {$mxa < $mxb} {return 1} if {$mxa > $mxb} {return -1} } else { if {min($ga,$pa,$na) != 0. && min($gb,$nb,$pb) != 0.} { set ma [expr {$ga*$pa*$na}] set mb [expr {$gb*$pb*$nb}] if {$ma < $mb} {return 1} if {$ma > $mb} {return -1} } else { if {$mxa > $mxb} {return 1} if {$mxa < $mxb} {return -1} } } return 0 return 0 } proc TrieEtAffiche {Texte {CommandeDeTri ""} {Maniere ""} {NomDuFichierOrigine ""}} { set LesLignes [split $Texte "\n"] if {$CommandeDeTri==""} { set CommandeDeTri "Alpha" } if {[regexp -nocase "^Alpha" $CommandeDeTri]} { set LesTriees [lsort $LesLignes] } elseif {[regexp {^[0-9]+$} $CommandeDeTri]} { set Colonne $CommandeDeTri set LesTriees [lsort -index $Colonne $LesLignes] } else { set Commande [Entre "lsort -index 1 "] if {$Commande==""} { return "" } set LesTriees [eval $Commande \$LesLignes] } return [AfficheListe $LesTriees $Maniere $NomDuFichierOrigine] } proc TrieFileGrid {a b} { set x [NumeroDuWU $a] set y [NumeroDuWU $b] if {$x > $y} {return 1} if {$x == $y} {return 0} if {$x < $y} {return -1} } proc TrieGroupesSeqlab {a b} { if {[string range $a 1 end] >= [string range $b 1 end]} { return 1 } elseif {[string range $a 1 end] == [string range $b 1 end]} { return 0 } else { return -1 } } proc TrieIntPfam {a b} { lassign $a d1 f1 lassign $b d2 f2 if {$d1 < $d2} {return -1} if {$d1 > $d2} {return 1} if {$f1 < $f2} {return 1} if {$f1 > $f2} {return -1} return 0 } proc TrieKey {a b} { set ia -1 set ib -1 set i 0 foreach c {name type manufacturer composition description url} { if {[regexp "^$c" $a]} {set ia $i} if {[regexp "^$c" $b]} {set ib $i} incr i } if {$ia > $ib} {return 1} if {$ia < $ib} {return -1} if {$ia == $ib && $ia != -1} {return 0} return 0 } proc TrieLaSortie {LaSortie} { #refait le contenu du fichier #met le clone dont la sequence est la plus longue devant foreach Ligne $LaSortie { set LesJumeaux [split $Ligne " "] set LaNouvelleLigne [TrieLesJumeauxParLongueurDecroissante $LesJumeaux] append TexteDuNouveauFichier "$LaNouvelleLigne\n" } set LeTexteDuNouveauFichier [split $TexteDuNouveauFichier "\n"] set LeTexteTrieDuNouveauFichier [lsort -dictionary $LeTexteDuNouveauFichier] set TexteTrieDuNouveauFichier [join $LeTexteTrieDuNouveauFichier "\n"] return $TexteTrieDuNouveauFichier } proc TrieLesExons {ListeDesExons} { foreach Homologie $ListeDesExons { ScanLaListe [split $Homologie "\t"] ChroContigTroncon nCops nCopsDansCetteSequence Orga PourcentageIdentiteCacheDansScore Expect DebutQuery FinQuery DebutSbjct FinSbjct lappend LesDebuts "$DebutSbjct" set MonHomo($DebutSbjct) $Homologie if {[expr ($DebutQuery-$FinQuery)*($DebutSbjct-$FinSbjct)>0]} { set Sens increasing } else { set Sens decreasing } } foreach DebutSbjct [lsort -$Sens -integer $LesDebuts] { lappend LesTries [set MonHomo($DebutSbjct)] } return $LesTries } proc TrieLesExonsEtPurgeLesOverlaps {ListeDesHomologues} { set LesTries {} set ListeDesExons {} set OldChroContigTroncon "Bidon" foreach Homologie $ListeDesHomologues { ScanLaListe [split $Homologie "\t"] ChroContigTroncon nCops nCopsDansCetteSequence Orga PourcentageIdentiteCacheDansScore Expect DebutQuery FinQuery DebutSbjct FinSbjct if {$OldChroContigTroncon!="Bidon" && $ChroContigTroncon!=$OldChroContigTroncon} { set LesTries [concat $LesTries [TrieLesExons $ListeDesExons]] set ListeDesExons {} } set OldChroContigTroncon $ChroContigTroncon lappend ListeDesExons $Homologie } set LesTries [concat $LesTries [TrieLesExons $ListeDesExons]] set ListeDesExons {} foreach Homologie $LesTries { ScanLaListe [split $Homologie "\t"] ChroContigTroncon nCops nCopsDansCetteSequence Orga PourcentageIdentiteCacheDansScore Expect DebutQuery FinQuery DebutSbjct FinSbjct set S "$DebutSbjct,$FinSbjct" if { ! [info exists nHits($ChroContigTroncon)]} { set nHits($ChroContigTroncon) 0 } incr nHits($ChroContigTroncon) if {[info exists DejaVu($S)]} { lappend LesPurgeables [set DejaVu($S)] lappend LesPurgeables $Homologie set DejaDejaVu($S) [set DejaVu($S)] } set DejaVu($S) $Homologie } foreach Homologie $LesTries { ScanLaListe [split $Homologie "\t"] ChroContigTroncon nCops nCopsDansCetteSequence Orga PourcentageIdentiteCacheDansScore Expect DebutQuery FinQuery DebutSbjct FinSbjct set S "$DebutSbjct,$FinSbjct" if {[info exists DejaPurge($S)]} { continue } if {[info exists DejaDejaVu($S)]} { set DejaPurge($S) 1 scan [set DejaDejaVu($S)] "%s" CCT1 scan [set DejaVu($S)] "%s" CCT2 if {[set nHits($CCT1)] > [set nHits($CCT2)]} { lappend LesPurges [set DejaDejaVu($S)] } else { lappend LesPurges [set DejaVu($S)] } continue } lappend LesPurges $Homologie } return $LesPurges } proc TrieLesJumeauxParLongueurDecroissante {LesJumeaux} { global RepertoireDuGenome set LesListes {} foreach Nom $LesJumeaux { set Longueur [string length [QueLaSequenceDuFichierTFA "$RepertoireDuGenome/nuctfa/$Nom"]] set Liste [list $Nom $Longueur] lappend LesListes $Liste } set LesListesTriees [lsort -integer -decreasing -index 1 $LesListes] set LaNouvelleLigne {} foreach PetiteListe $LesListesTriees { set Boite [lindex $PetiteListe 0] lappend LaNouvelleLigne $Boite } return $LaNouvelleLigne } proc TrieLesListesDeDemarcation {K VouH} { global LesDemarcationsVerticales global LesDemarcationsHorizontales global LesAbscissesVerticales global LesAbscissesHorizontales global LesEtiquettesVerticales global LesEtiquettesHorizontales if {$VouH=="v"} { set ListeA [set LesAbscissesVerticales($K)] set ListeB [set LesDemarcationsVerticales($K)] set ListeC [set LesEtiquettesVerticales($K)] } if {$VouH=="h"} { set ListeA [set LesAbscissesHorizontales($K)] set ListeB [set LesDemarcationsHorizontales($K)] set ListeC [set LesEtiquettesHorizontales($K)] } foreach A $ListeA B $ListeB C $ListeC { set Bdu($A) $B set Cdu($A) $C } set ListeATriee [lsort -integer $ListeA] foreach A $ListeATriee { lappend ListeBTriee [set Bdu($A)] lappend ListeCTriee [set Cdu($A)] } if {$VouH=="v"} { set LesAbscissesVerticales($K) $ListeATriee set LesDemarcationsVerticales($K) $ListeBTriee set LesEtiquettesVerticales($K) $ListeCTriee return } if {$VouH=="h"} { set LesAbscissesHorizontales($K) $ListeATriee set LesDemarcationsHorizontales($K) $ListeBTriee set LesEtiquettesHorizontales($K) $ListeCTriee return } } proc TrieLesReductions {} { set Fichier "[RepertoireDuGenome]/TableauPourReductionSsRedondanceFiltrer" set LesLignes {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {^GscopeId} $Ligne]} { set LigneDeTete $Ligne continue } lappend LesLignes $Ligne } set LesLignesFinales [list $LigneDeTete] set LesLignesTriees [lsort -command CompareReduction $LesLignes] LConcat LesLignesFinales $LesLignesTriees SauveLesLignes $LesLignesFinales dans "[RepertoireDuGenome]/TableauPourReductionSsRedondanceFiltrerTrie" #EspionneL $LesLignesTriees #return $LesLignesTriees } proc TrieLesTimesDesDevStage {{Fichier ""}} { if {$Fichier==""} { set Fichier "[Fiches]/SelectedEST" } foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase "DevStage" $Ligne]} { continue } set T [StringSuivant "DevStage" dans $Ligne] set T [string trim $T " \t"] lappend LesTs $T } set LesTs [lsort -unique $LesTs] set LesBonsT {} foreach T $LesTs { set OldT $T set T [string tolower $T] if {$T=="adult"} { set T "7 week" } regsub "adult" $T "" T regsub -all {approx\.|age|old|\~} $T "" T regsub {e18\-p} $T {p0-p} T regsub "whole embryo including extraembryonic tissues at " $T "" T regsub {days? *pc} $T "day post coitum" T regsub " pc embryo" $T "day post coitum" T regsub "postcoitum" $T "post coitum" T regsub "d\.p\.c" $T "dpc" T regsub "p\.c" $T "dpc" T regsub "embryonic" $T "embryo" T regsub "cells" $T "cell" T regsub "one\-cell" $T "1 cell" T regsub "two\-cell" $T "2 cell" T regsub "four\-cell" $T "4 cell" T regsub "eight\-cell" $T "8 cell" T regsub "eigth\-cell" $T "8 cell" T regsub "sixteen\-cell" $T "16 cell" T regsub "cell\-.*" $T "cell" T regsub -all "days" $T "day" T if {[regexp "cell" $T]} { regsub {embryo[a-z]*} $T "" T } if {[regexp {embryo[a-z]*[0-9\.\- ]+dpc} $T]} { regsub {embryo[a-z]*} $T "" T } regsub "dpc" $T "day post coitum" T regsub {embryos?} $T "day post coitum" T set T [join [LesMotsDeLaLigne $T] " "] regsub -all "day day" $T "day" T regsub -all "day day" $T "day" T set T [join [LesMotsDeLaLigne $T] " "] regsub -all {day post coitum +day post coitum} $T "day post coitum" T regsub {day post coitum[^0-9]+} $T "day post coitum " T regsub {([0-9])\-([a-z])} $T {\1 \2} T regsub -all {([0-9])([a-z])} $T {\1 \2} T set T [join [LesMotsDeLaLigne $T] " "] if {[regexp "day post coitum" $T]} { regsub "day post coitum" $T "" T set T "daypostcoitum $T" } elseif {[regexp {weeks?|months?|years?|days?} $T Match]} { regsub $Match $T "" T set T [string trim $T " -"] regsub "s$" $Match "" Match set T "postnatal$Match $T" } elseif {[regexp {cell} $T]} { regsub "cell" $T "" T set T [string trim $T " -"] set T "cell $T" } elseif {[regexp {^[0-9\. ]+$} $T]} { set T [string trim $T " -"] set T "daypostcoitum $T" } elseif {[regexp {^e[0-9\. ]+$} $T]} { set T [string trim $T " -"] regsub "e" $T "" T set T "daypostcoitum $T" } elseif {[regexp {^p[0-9]+[ \-]p[0-9]+$} $T]} { regsub -all "p" $T "" T set T "postnatalday $T" } elseif {[regexp {^p[0-9]+$} $T]} { regsub -all "p" $T "" T set T "postnatalday $T" } # regsub -all {[0-9][0-9\.\- ]*[0-9]} $T "XXX" T lappend LesBonsT "$T = $OldT" } set LesBonsT [lsort -unique $LesBonsT] return [AfficheVariable [join $LesBonsT "\n"]] } proc TrieLesTissuesDesSelectedEST {{Fichier ""} {Quoi ""}} { if {$Quoi==""} { set Quoi "Choose" } if {$Fichier==""} { set Fichier "[Fiches]/SelectedEST" } foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase "TissueType" $Ligne]} { continue } set T [StringSuivant "TissueType" dans $Ligne] set T [string trim $T " \t"] lappend LesTs $T } set LesTs [lsort -unique $LesTs] set LesBonsT {} foreach T $LesTs { lappend LesBonsT $T } # set LesBonsT [lsort -unique $LesBonsT] if {$Quoi=="GetList"} { return $LesBonsT } return [MorceauxChoisis $LesBonsT] } proc TrieList {a b} { #utilise dans un lsort avec l'argument command, voir proc du dessus FaitTrieListe #on veut trier dabord a partir de la 1ère colonne puis de la 2ème colonne lassign $a a0 a1 lassign $b b0 b1 if {$a0 > $b0} {return 1} if {$a0 < $b0} {return -1} if {$a1 > $b1} {return 1} if {$a1 < $b1} {return -1} } proc TrieNomGroupe {a b} { set ea [ExtraitNoDuGroupe $a] set eb [ExtraitNoDuGroupe $b] if {$ea > $eb} {return 1} if {$ea == $eb} {return 0} if {$ea < $eb} {return -1} } proc TriePfSS {a b} { scan $a "%s %d %d" Pa Da Fa scan $b "%s %d %d" Pb Db Fb if {$Da==$Db} { if {$Fa==$Fb} { return [string compare "$Pa" "$Pb"] } if {$Fa<$Fb} { return -1 } if {$Fa>$Fb} { return 1 } } if {$Da<$Db} { return -1 } if {$Da>$Db} { return 1 } } proc TriePre {a b} { lassign $a ia da lassign $b ib db if {$da eq $db} {return 0} if {$da eq "bac"} {return 1} if {$da eq "arc"} {return -1} if {$da ne "euk" && $db eq "bac"} {return -1} if {$da eq "euk" && $db eq "arc"} {return 1} } proc TrieResPos {} { #g d n dg ndg set Li [LesLignesDuFichier "res_pos"] foreach l $Li { if {! [regexp "IdenGlob" $l]} {continue} foreach id {" g" " d" " n" " dg" "ndg"} { if {[regexp "$id-IdenG" $l]} {break} } set txt [OteLesBlancsEnTrop $l] set le [split $txt " "] set ni [lindex $le 2] if {! $ni} {continue} set df [lindex $le 9] if {[expr abs($df)] > 100} {continue} lappend R[string trim $id] $df } set file [open "respos.dat" w] foreach a $Rg b $Rd c $Rn d $Rdg e $Rndg { puts $file "$a\t$b\t$c\t$d\t$e" } close $file foreach id {"g" "d" "n" "dg" "ndg"} { set sm 0 set sm2 0 foreach e [set R$id] { incr sm $e incr sm2 [expr $e*$e] } set n [llength [set R$id]] set sm [expr $sm/$n.] set sm2 [expr $sm2/$n.] set ec [expr sqrt($sm2 - $sm*$sm)] puts "pour $id : m= $sm, std= $ec" } exit } proc TrieZonesPfam {aI} { upvar $aI I set out [list] foreach id [array names I] { set res [list] foreach e [set I($id)] { lassign $e d f col txt lappend Ldf($id) [list $d $f] } set Ldf($id) [lsort -integer -command TrieIntPfam [set Ldf($id)]] set i 0 set t$i [list [lindex [set Ldf($id)] 0]] foreach e [lrange [set Ldf($id)] 1 end] { lassign $e d f set bon 0 for {set c 0} {$c <= $i} {incr c} { foreach v [set t$c] { lassign $v dv fv if {$d < $fv} { set bon 1 lappend t$c $e break } } if {$bon} {break} } if {! $bon} { incr i set t$i [list $e] } } set dm -999. for {set c 0} {$c <= $i} {incr c} { lassign [lindex [set t$c] 0] d1 f1 lassign [lindex [set t$c] end] d2 f2 set dst [expr {$f2-$d1+1}] if {$dst > $dm} { set dm $dst set cm $c } lappend res "${id}@$c" $d1 $f2 } set res [lsort -stride 3 -integer -index 1 $res] foreach {n d f} $res { lassign [split $n @] id c set t "" if {$c == $cm} { set t $txt } lappend out "${id}@$c)" $d $f $col $t } } set out [lsort -stride 5 -integer -index 1 $out] set Lr [list] foreach {a b c d e} $out { lassign [split $a @] id tmp lappend Lr [list $id $b $c $d $e] } return $Lr } proc TrieZonesPfam_AEffacer {aI} { upvar $aI I set out [list] foreach id [array names I] { set res [list] foreach e [set I($id)] { lassign $e d f col txt lappend Ldf($id) [list $d $f] } set Ldf($id) [lsort -integer -command TrieIntPfam [set Ldf($id)]] set i 0 set t$i [list [lindex [set Ldf($id)] 0]] foreach e [lrange [set Ldf($id)] 1 end] { lassign $e d f set bon 0 for {set c 0} {$c <= $i} {incr c} { foreach v [set t$c] { lassign $v dv fv if {$d < $fv} { set bon 1 lappend t$c $e break } } if {$bon} {break} } if {! $bon} { incr i set t$i [list $e] } } set dm -999. for {set c 0} {$c <= $i} {incr c} { lassign [lindex [set t$c] 0] d1 f1 lassign [lindex [set t$c] end] d2 f2 set dst [expr {$f2-$d1+1}] if {$dst > $dm} { set dm $dst set cm $c } lappend res "${id}@$c" $d1 $f2 } set res [lsort -stride 3 -integer -index 1 $res] foreach {n d f} $res { lassign [split $n @] id c set t "" if {$c == $cm} { set t $txt } lappend out "${id}@$c)" $d $f $col $t } } set out [lsort -stride 5 -integer -index 1 $out] set Lr [list] foreach {a b c d e} $out { lassign [split $a @] id tmp lappend Lr [list $id $b $c $d $e] } return $Lr } proc TrienomMouse {a b} { set ia -1 set ib -1 set i 0 foreach c {LA0AAA ENSMUST NM_ XM_ SP} { if {[regexp "^$c" $a]} {set ia $i} if {[regexp "^$c" $b]} {set ib $i} incr i } if {$ia > $ib} {return 1} if {$ia < $ib} {return -1} if {$ia == $ib && $ia != -1} {return 0} set fa [lindex [split $a _] end] set fb [lindex [split $b _] end] set ea [string toupper $fa] set eb [string toupper $fb] set ia -1 set ib -1 set i 0 foreach c {"^(HUMAN|HOMO)" "^(RAT|RATTUS)" "^(MOUSE|MUS)"} { if {[regexp $c $ea]} {set ia $i} if {[regexp $c $eb]} {set ib $i} incr i } if {$ia > $ib} {return 1} if {$ia < $ib} {return -1} if {$ia == $ib && $ia != -1} {return 0} return 0 } proc TrienomRat {a b} { set ia -1 set ib -1 set i 0 foreach c {LA0ACA ENSRNOT NM_ XM_ SP} { if {[regexp "^$c" $a]} {set ia $i} if {[regexp "^$c" $b]} {set ib $i} incr i } if {$ia > $ib} {return 1} if {$ia < $ib} {return -1} if {$ia == $ib && $ia != -1} {return 0} set fa [lindex [split $a _] end] set fb [lindex [split $b _] end] set ea [string toupper $fa] set eb [string toupper $fb] set ia -1 set ib -1 set i 0 foreach c {"^(HUMAN|HOMO)" "^(MOUSE|MUS)" "^(RAT|RATTUS)"} { if {[regexp $c $ea]} {set ia $i} if {[regexp $c $eb]} {set ib $i} incr i } if {$ia > $ib} {return 1} if {$ia < $ib} {return -1} if {$ia == $ib && $ia != -1} {return 0} return 0 } proc Triplet {x y z} { return [list $x $y $z] } proc TrogStatus {Nom} { global RepertoireDuGenome global TrogStatus if {[info exists TrogStatus($Nom)]} { return [set TrogStatus($Nom)] } if {[info exists TrogStatus("EstCharge")]} { return "" } set FichierTrogStatus "$RepertoireDuGenome/fiches/trogstatus" set TrogStatus("EstCharge") "EstCharge" if { ! [file exists $FichierTrogStatus]} { return "" } foreach Ligne [LesLignesDuFichier $FichierTrogStatus] { scan $Ligne "%s %s" NomLu Valeur set TrogStatus($NomLu) $Valeur } return [TrogStatus $Nom] } proc TroisBoots {{Texte ""}} { global TokCourant if {$Texte!=""} { Tok $Texte } if { ! [regexp {^\(} $TokCourant]} { return "TroisBootsNonValideCarSansOuvrante" } Tok set Gauche [Arboot] if {[regexp "NonValide" $Gauche]} { return "TroisBootsNonValideCar$Gauche" } if { ! [regexp {\,} $TokCourant]} { return "TroisBootsNonValideCarSansVirgule" } Tok set Milieu [Arboot] if {[regexp "NonValide" $Milieu]} { return "TroisBootsNonValideCar$Milieu" } if { ! [regexp {\,} $TokCourant]} { return "TroisBootsNonValideCarSansVirgule" } Tok set Droite [Arboot] if {[regexp "NonValide" $Droite]} { return "TroisBootsNonValideCar$Droite" } if { ! [regexp {\)} $TokCourant]} { return "TroisBootsNonValideCarSansFermante" } Tok if { ! [regexp {\;} $TokCourant]} { return "TroisBootsNonValideCarSansPointVirgule" } return [list $Gauche $Milieu $Droite] } proc TronconneLeFichierTFA {FichierTFA {TailleTroncon 100000} {TailleOverlap 10000} {Working UseSameNameOnTmp}} { Wup "Cuts the tfa file into fragments" if {$Working=="UseSameNameOnTmp"} { set Queue [file tail $FichierTFA] regsub ".tfa$" $Queue "" Queue set WD "[RepertoireDeTravail]" } if {$Working=="UseSameName"} { set Queue [file tail $FichierTFA] regsub ".tfa$" $Queue "" Queue set WD [file dirname $FichierTFA] } if {$Working=="UseTmpFile"} { set Tmp [TmpFile] set Queue [file tail $Tmp] set WD [file dirname $Tmp] } set LesTroncons {} set iFinTroncon [expr $TailleTroncon + $TailleOverlap -1] set TFA [ContenuDuFichier $FichierTFA] set Entete [PremiereLigneDuFichier $FichierTFA] scan $Entete "%s" ChevronAccess set Seq [QueLaSequenceDuTFA $FichierTFA] set PasLaPeine [expr [string length $Seq] < $TailleTroncon] set N 1 set D 1 while {$Seq!=""} { set Troncon [string range $Seq 0 $iFinTroncon] set F [expr $D+[string length $Troncon]-1] if {$PasLaPeine} { set BeauN "" set FromBase "" } else { set BeauN "_[format "%2.2d" $N]" set FromBase "from base $D to $F " } set FichierSortie "$WD/${Queue}${BeauN}.tfa" regsub "$ChevronAccess " $Entete "$ChevronAccess $FromBase" NouvelleEntete regsub "^>" $NouvelleEntete "" NouvelleEntete Sauve [SequenceFormatTFA $Troncon $NouvelleEntete "brut"] dans $FichierSortie lappend LesTroncons $FichierSortie if {[string length $Seq] <= $iFinTroncon} { break } set Seq [string range $Seq $TailleTroncon end] incr D $TailleTroncon incr N } return $LesTroncons } proc TronquerSequence {Path Acouper BoutACouper} { # Procédure rognant en 5' ou en 3' un ensemble de séquences. Le nombre de pb é rogner est é préciser. La sortie est faite aux formats # SLX, TFA, IG, SEQ # Au passage, il filtre les Acta et les mets dans un fichier (é commenter si nécessaire) # Déclaration des fichiers # ------------------------ set FichierDesSequencesATronquer [open "$Path.bidir" "r"] set FichierDesSLX [open "$Path.slx" "w"] set FichierDesTFA [open "$Path.tfa" "w"] set FichierDesIG [open "$Path.ig" "w"] set FichierDesSEQ [open "$Path.seq" "w"] # Suppression des versions précédentes des fichiers # -------------------------------------------------- if { [file exists $FichierDesSLX] } { file delete $FichierDesSLX } if { [file exists $FichierDesTFA] } { file delete $FichierDesTFA } if { [file exists $FichierDesSEQ] } { file delete $FichierDesSEQ } if { [file exists $FichierDesIG] } { file delete $FichierDesIG } set I 0 # Do the loop, baby yeah ! # ------------------------ while { [gets $FichierDesSequencesATronquer Ligne] >=0 } { puts $FichierDesTFA "$Ligne" gets $FichierDesSequencesATronquer Ligne if { $Ligne != "" } { incr I 1 ScanLaListe $Ligne Sequence if { $BoutACouper == 3 || $BoutACouper == "both" } { set Fin [expr 24 - $Acouper] set Sequence [string range $Sequence 0 $Fin ] } if { $BoutACouper == 5 || $BoutACouper == "both" } { set Sequence [string range $Sequence $Acouper 24] } set Un 1 puts $FichierDesSLX "Sp$I $Sequence" #puts $FichierDesTFA ">Sp$I" puts $FichierDesTFA "$Sequence" puts $FichierDesSEQ "$Sequence" puts $FichierDesIG "; comment" puts $FichierDesIG "; comment" puts $FichierDesIG "Sp$I" puts $FichierDesIG "$Sequence$Un" } } close $FichierDesSequencesATronquer close $FichierDesSLX close $FichierDesTFA close $FichierDesSEQ close $FichierDesIG } 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 Trouve {FichierAccess} { foreach Ligne [LesLignesDuFichier $FichierAccess] { if {$Ligne==""} {continue} set Access $Ligne set Commande "getz \"\\\[protein-acc:$Access\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut==""} {Espionne $Access} } } proc TrouveAccAcPlsEvi {} { #set Fichier "[RepertoireDuGenome]/ListeIngenuityNmAcEvi" set Fichier "[RepertoireDuGenome]/ListeIngenuityGbAcEvi" foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set LesElmts [split $Ligne " "] set Acc [lindex $LesElmts 0] if {[info exists DejaVu($Acc)]} { incr DejaVu($Acc) continue } set DejaVu($Acc) 1 } foreach Clef [array names DejaVu] { set nbdefois $DejaVu($Clef) if {$nbdefois>1} { puts "$Clef $DejaVu($Clef)" } } } proc TrouveBestPDB {pab} { global LesNomsDesSequencesDansLOrdre global Sequences global TDesPCI global PipeCollection global DefautsPipe global Defauts LesDefauts catch {array unset LesNomsDesSequencesDansLOrdre} catch {array unset Sequences} catch {array unset TDesPCI} if {$PipeCollection} { set fileIn [file join [RepertoireDuGenome] prottfa $pab] set fileOut [file join [RepertoireDuGenome] blastp3D $pab] set destBallast [file join [RepertoireDuGenome] blastp3D $pab-bal] set anchors [file join [RepertoireDuGenome] blastp3D $pab-bal.anchors] set fileDnd [file join [RepertoireDuGenome] blastp3D $pab-3d.dnd] set fileTmp [file join [RepertoireDuGenome] blastp3D $pab-3d.tmp] set fileCl [file join [RepertoireDuGenome] blastp3D $pab-3d.cl] set fileOutCl [file join [RepertoireDuGenome] blastp3D $pab-3dAli.tfa] } else { set fileIn "$pab" set fileOut "[file rootname $pab].blastp3D" set destBallast "[file rootname $pab]-bal" set anchors "[file rootname $pab]-bal.anchors" set fileDnd "[file rootname $pab]-3d.dnd" set fileTmp "[file rootname $pab]-3d.tmp" set fileCl "[file rootname $pab]-3d.cl" set fileOutCl "[file rootname $pab]-3dAli.tfa" } set lesPDB "" set NQuery [QueryDuTFA $fileIn] # recherche des template potentiels : blastp dans la PDB set CommandeBlast "[BlastallExe] -i $fileIn -o $fileOut -p blastp -d pdb -e 0.01 -b 100 -v 100 -F F" if {[catch {eval exec $CommandeBlast} Message]} {puts "$Message"} # verif output blastp set Ll [LesLignesDuFichier $fileOut] if {[llength $Ll] < 10} { Espionne "Something wrong with BlastP file" return 0 } # ballast sur blastp PDB set CommandeBallast "[BallastExe] -p $fileOut -o $destBallast -anchors -noext -queryname $NQuery" catch {eval exec $CommandeBallast} Message # modification du fichier d ancres de maniere a pouvoir en tenir compte if {[file exists $anchors]} { if {[llength [LesLignesDuFichier $anchors]] > 1} { DecortiqueAncresBallast $anchors Qu Ob Ps B1 B2 Ln Wg set fout [open $anchors w] puts $fout "Ballast 0.000000" foreach q $Qu o $Ob p $Ps d $B1 f $B2 l $Ln w $Wg { set o [EnlevePrefixeBank $o] set fmt [format "seq: %15s %15s\tpos: %10d\tbeg: %10d %10d\tlen: %6d\tweight: %6.2f\n" $q $o $p $d $f $l $w] puts $fout $fmt } close $fout } } set LBlast [LesLignesDuFichier $fileOut] DecortiqueBlastGrid $LBlast 100 100 Query lBanqueId lAccess lDE lScoreDansProfil lPN if {[llength $lBanqueId] == 0} { return "" } if { ![file exists $fileOutCl] } { set o [open "$fileTmp" w] puts $o [join $lBanqueId "\n"] close $o catch {exec [FastacmdExe] -i $fileTmp -d pdb} Msg if {[string first "\[fastacmd\]" $Msg] != -1} { Espionne "Error in Fastacmd ! Aborting \n$Msg" return 0 } set Lq [LesLignesDuFichier $fileIn] set Ls [split $Msg "\n"] set Lr "" foreach l $Ls { if {[string index $l 0] ne ">"} { lappend Lr $l continue } set ib [PremierBlanc $l] if {$ib ne "end"} {incr ib -1} set bid [string range $l 0 $ib] set bid [EnlevePrefixeFastacmd $bid] set bid [EnlevePrefixeBank $bid] lappend Lr ">$bid" } set lf [concat $Lq $Lr] set f [open $fileCl w] puts $f [join $lf "\n"] close $f if {[file exists $anchors]} { set opt "-propagate -motifs=$anchors" } else { set opt "" } set CommandeClustal "[ClustalwExe] $opt -infile=$fileCl -outfile=$fileOutCl -output=fasta" if {[catch {eval exec $CommandeClustal} Message]} {puts "$Message"} } LesDefauts Mode "Batch" if {[file exists $fileOutCl]} { LitLeTFA $fileOutCl LesNomsDesSequencesDansLOrdre Sequences set LPCI [CalculeLesPCI "" "" $NQuery "" 1] foreach e [array names TDesPCI] { set le [split $e ","] #cree 1 liste qui contient "deb, fin, %id, idPDB" pour chaque template potentiel if { [lindex $le 0] != $NQuery } { set id [lindex [set TDesPCI($e)] 0] #on recupere uniquement les PDB qui ont + de 25% d'identite avec la query #if {$id > 0.25} {} if {$id > 0.3} { set name [lindex $le 0] set l$name "" set seq [set Sequences($name)] set lseq [split $seq {}] set pos1 [lsearch -regexp $lseq {[A-Z]}] set posEnd [expr $pos1 + [lindex [set TDesPCI($e)] 1]] #set id [lindex [set TDesPCI($e)] 0] set pdbId [lindex $le 0] set long [expr $posEnd - $pos1] # on ne tient compte que des template de plus de 45 residus de long if {$long > 45} { lappend l$name $pos1 lappend l$name $posEnd lappend l$name $id lappend l$name $pdbId lappend l$name $long lappend lesPDB [set l$name] } unset l$name } } } } #EspionneL $lesPDB # on classe les PDB par longueur decroissante set lesPDBSort [lsort -integer -decreasing -index 4 $lesPDB] set ltemplate "" foreach pdb $lesPDBSort { set ltemplate [comparePDB $pdb $ltemplate] } puts "les templates sont:" EspionneL $ltemplate set lBest "" foreach template $ltemplate { set toAdd "[lindex $lAccess [lsearch -regexp $lBanqueId [lindex $template 3]]]" if {[regexp "^PDB:" $toAdd]} { regsub "PDB:" $toAdd "" toAdd } lappend lBest $toAdd } if {[info exists LesNomsDesSequencesDansLOrdre]} { array unset LesNomsDesSequencesDansLOrdre } if {[info exists Sequences]} { array unset Sequences } if {[info exists TDesPCI]} { array unset TDesPCI } if {[info exists LPCI]} { unset LPCI } #set lf [glob -nocomplain "[RepertoireDuGenome]/blastp3D/$file-3d*"] #eval file delete -force $lf set lf [glob -nocomplain "{$destBallast}*"] catch {eval file delete -force $lf} Message if {[file exists $fileTmp]} { File delete -force $fileTmp } if {[file exists $fileDnd]} { File delete -force $fileDnd } if {[file exists $fileCl]} { File delete -force $fileCl } if {[file exists $fileOutCl]} { File delete -force $fileOutCl } return $lBest } proc TrouveCdna {} { set total 0; set vide 0; set vraiplein 0; set fauxplein 0 set RepertoireSortieBlast "[RepertoireDuGenome]/blastnRetMouse" #set File "$RepertoireSortieBlast/EVI00020" #set File "$RepertoireSortieBlast/EVI32380" foreach File [glob -nocomplain "$RepertoireSortieBlast/*"] { incr total set Queue [file tail $File] set Query {}; set lBanqueId {}; set lAccess {}; set lDE {}; set lProfil {}; set lPN {} DecortiqueBlast $File "0.001" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN #DecortiqueBlast $File "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN #foreach BanqueId $lBanqueId PN $lPN if {$lPN=={}} { incr vide set LaLigneVide "$Queue => pas de touche" lappend LesLignesVides $LaLigneVide } else { if {[lindex $lPN 0] == 0.0} { incr vraiplein lappend LesLignesVraiPleines "$Queue" foreach BanqueId $lBanqueId Access $lAccess PN $lPN { set LaLigneVraiPleine "$BanqueId $Access $PN" lappend LesLignesVraiPleines $LaLigneVraiPleine } } else { incr fauxplein lappend LesLignesFauxPleines "$Queue" foreach BanqueId $lBanqueId Access $lAccess PN $lPN { set LaLigneFauxPleine "$BanqueId $Access $PN" lappend LesLignesFauxPleines $LaLigneFauxPleine } } } } lappend LesLignesVides "nb $vide" lappend LesLignesVraiPleines "nb $vraiplein" lappend LesLignesFauxPleines "nb $fauxplein" SauveLesLignes $LesLignesVides dans "[RepertoireDuGenome]/ResultcDNA/CDNAVide" SauveLesLignes $LesLignesVraiPleines dans "[RepertoireDuGenome]/ResultcDNA/CDNAVraiPlein" SauveLesLignes $LesLignesFauxPleines dans "[RepertoireDuGenome]/ResultcDNA/CDNAFauxPlein" Espionne "total $total" Espionne "vide $vide" Espionne "vraiplein $vraiplein" Espionne "fauxplein $fauxplein" } proc TrouveCluster {ProbeSet} { set LesLignes {} CanalSqlBioArrayBase foreach {Ps Ex SoAn SoCl Cl} [SqlExec "select p.probeset_id, e.description, a.name, c.clu_description, lncep.clusternumber from retinobase3.ln_clu_exp_pro lncep, retinobase3.cluster c, retinobase3.analysissoftware a, retinobase3.experiment e, retinobase3.probeset p where lncep.pk_experiment = e.pk_experiment and lncep.pk_probeset = p.pk_probeset and lncep.pk_cluster = c.pk_cluster and lncep.pk_software = a.pk_software and p.probeset_id= '$ProbeSet' order by e.pk_experiment;" "GetList"] { lappend LesLignes "$Ps\t$Ex\t$SoAn\t$SoCl\t$Cl" } CanalSqlDisconnect return [join $LesLignes "\n"] } proc TrouveClusterParticulier {ProbeSet PkExperiment} { set LesLignes {} foreach {Ps Ex SoAn SoCl Cl} [SqlExec "select p.probeset_id, e.pk_experiment, a.name, c.clu_description, lncep.clusternumber from retinobase3.ln_clu_exp_pro lncep, retinobase3.cluster c, retinobase3.analysissoftware a, retinobase3.experiment e, retinobase3.probeset p where lncep.pk_experiment = e.pk_experiment and lncep.pk_probeset = p.pk_probeset and lncep.pk_cluster = c.pk_cluster and lncep.pk_software = a.pk_software and p.probeset_id= '$ProbeSet' and e.pk_experiment = '$PkExperiment' order by e.pk_experiment;" "GetList"] { lappend LesLignes "$Ps\t$Ex\t$SoAn\t$SoCl\t$Cl" } return [join $LesLignes "\n"] } proc TrouveCommuns {l} { set luni [lsort -unique $l] set com {} foreach e $luni { set n [llength [lsearch -all $l $e]] if {$n != 1} { if {$e != ""} { lappend com $e } } } return $com } proc TrouveDansLesInfos {K} { Wup "Trouve des oligos en fonction de vos criteres" set Quoi [Entre "Ex: Id: Oligo1_ACT1013"] if {$Quoi==""} {return ""} #Pour tenir compte des multiples blancs if {[regexp {: } $Quoi]} {regsub {: } $Quoi ": +" Quoi} DeselectionneLesTrouves $K set LesIdsRetenus "" set LesIds [$K find withtag "Boite"] foreach Id $LesIds { set Info [lindex [$K gettags $Id] 1] if {[regexp -nocase "$Quoi" $Info]} {lappend LesIdsRetenus $Id} else {continue} } foreach Id $LesIdsRetenus { $K itemconfigure $Id -outline "darkviolet" $K itemconfigure $Id -width "3" $K itemconfigure $Id -dash {6 4 2 4} $K addtag "Finded" withtag $Id } return "" } proc TrouveDesCas {} { foreach Box [ListeDesPABs] { Espionne "$Box" set Org Mouse set refpfaminitial 0 set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj.reduit" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.reduit"} set LesPfamNettoyeDeLaRef {}; set LesPfamStartStop {}; array unset DejaVu set LesNamesTotal {}; array unset LesAnciens set Cluster [ExtraitInfo $Box "Cluster"] set Ref [ExtraitInfo $Box "Ref"] set LesNames [InterrogeNames $Cluster Name $Org] set RefPfam [ExtraitInfo $Box "RefPfam"] set NbPFAMRef [InterrogeRefPfam $Box-$RefPfam nombrePFAMMacsims] Espionne "Ref $Ref" Espionne "RefPfam $RefPfam" LConcat LesNamesTotal $LesNames LConcat LesNamesTotal $RefPfam LConcat LesNamesTotal $Box set LesNamesTotal [ListeSansDoublon $LesNamesTotal] Espionne "LesNamesTotal $LesNamesTotal" InitPosRel2Abs $FileMacsims $LesNamesTotal set Gn [ExtraitInfo $Box "ValiGN"] set Des [ExtraitInfo $Box "ValiDE"] set LesPfamInfoRef [FromMacsims $FileMacsims $RefPfam "Concat"] foreach PfamInfoRef $LesPfamInfoRef { Espionne "PfamInfoRef $PfamInfoRef" set MotsPfamInfoRef [split $PfamInfoRef "/"] set Pfam [lindex $MotsPfamInfoRef 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id set PfamNettoye "$Id $PfamName" Espionne "PfamNettoye $PfamNettoye" lappend LesPfamNettoyeDeLaRef $PfamNettoye FstartFstop $PfamInfoRef RFstart RFstop Espionne "RFstart $RFstart RFstop $RFstop" set Start [DonnePosRA $RefPfam $RFstart Absolue] set Stop [DonnePosRA $RefPfam $RFstop Absolue] set PfSS "$Id $Start $Stop" Espionne "PfSS $PfSS" Espionne "" lappend LesPfamStartStop $PfSS set PossedePfSS($RefPfam,$PfSS) 1 } foreach Name $LesNames { Espionne "" Espionne "Name $Name" if {$Name==$Ref} {set Name $Box} if {$Name==$RefPfam} {set refpfaminitial 1} Espionne "refpfaminitial $refpfaminitial" set LesPfamInfoName [FromMacsims $FileMacsims $Name "Concat"] foreach PfamInfoName $LesPfamInfoName { set MotsPfamInfoName [split $PfamInfoName "/"] set Pfam [lindex $MotsPfamInfoName 0] set MotsPfam [split $Pfam " "] set Id [lindex $MotsPfam 0] set PfamName [lindex $MotsPfam 1] regsub "PROP_" $Id "" Id set PfamNettoye "$Id $PfamName" Espionne "PfamNettoye $PfamNettoye" lappend LesPfamNettoyeDeLaName $PfamNettoye FstartFstop $PfamInfoName RFstart RFstop Espionne "RFstart $RFstart RFstop $RFstop" set Start [DonnePosRA $Name $RFstart Absolue] set Stop [DonnePosRA $Name $RFstop Absolue] set PfSS "$Id $Start $Stop" Espionne "PfSS $PfSS" lappend LesPfamStartStop $PfSS set PossedePfSS($Name,$PfSS) 1 } } set LesPfamStartStop [lsort -unique $LesPfamStartStop] set LesPfamStartStop [lsort -command TriePfSS $LesPfamStartStop] Espionne "" Espionne "LesPfamStartStop $LesPfamStartStop" set LaCourante $LesPfamStartStop set collapse 1 while {$collapse} { if {[llength $LaCourante]<2} {break} set lA [lrange $LaCourante 0 end-1] set lB [lrange $LaCourante 1 end] Espionne "lA $lA" Espionne "lB $lB" set i -1 foreach A $lA B $lB { DecortiquePfSS $A PfA StartA StopA DecortiquePfSS $B PfB StartB StopB Espionne "PfA $PfA StartA $StartA StopA $StopA" Espionne "PfB $PfB StartB $StartB StopB $StopB" if {$PfA!=$PfB || ! [Recouvrement $StartA $StopA $StartB $StopB]} { set collapse 0 Espionne "onentre" incr i continue } set StartN [Mini $StartA $StartB] set StopN [Maxi $StopA $StopB] set N "$PfA $StartN $StopN" Espionne "N $N" lappend LesAnciens($N) $A $B Espionne "3 toto" foreach Ancien [array names LesAnciens] { Espionne "$Ancien=$LesAnciens($Ancien)" } if {[info exists LesAnciens($A)]} { Espionne "A existe: $A values= $LesAnciens($A)" set LesAnciens($N) [lsort -unique [concat $LesAnciens($N) $LesAnciens($A)]] } if {[info exists LesAnciens($B)]} { Espionne "B existe: $B values= $LesAnciens($B)" set LesAnciens($N) [lsort -unique [concat $LesAnciens($N) $LesAnciens($B)]] } Espionne "4 titi" foreach Ancien [array names LesAnciens] { Espionne "$Ancien=$LesAnciens($Ancien)" } set collapse 1 break } if { ! $collapse } { break } set LaCourante [lreplace $LaCourante [expr $i+1] [expr $i+2] $N] Espionne "LaCourante $LaCourante" } set LesPfamStartStopCollapse $LaCourante Espionne "LesPfamStartStopCollapse $LesPfamStartStopCollapse" set longancien [llength [array names LesAnciens]] Espionne "longancien $longancien" Espionne "LesAnciens [array names LesAnciens]" foreach Ancien [array names LesAnciens] { Espionne "$Ancien=$LesAnciens($Ancien)" } Espionne "result" foreach Ancien [array names LesAnciens] { Espionne "$Ancien=$LesAnciens($Ancien)" if {[llength $LesAnciens($Ancien)]>3} {Espionne "okkkkkkkkkkkkkkkkkkkkkkkkkk"} } Espionne "" } } proc TrouveDescription {NomComplet} { global RepertoireDuGenome set FichierNotes $RepertoireDuGenome/notes/$NomComplet if {! [file exists $FichierNotes]} { return [list "Infos for $NomComplet not found."] } return [LesLignesDuFichier $FichierNotes] } proc TrouveIncoherenceChezRetinobase2 {} { set NbDePs 0; set PasFromPs 0; set PasFromEv 0; set CestOk 0; set Non 0; set LesSsPs {}; set LesAcPsSsEv {}; set LesEgaux {}; set LesDifferents {} foreach Ps [AffyAnno ListOf Index] { CanalSqlBioArrayBase set trouve 1 set pastrouveps 1 puts "++$Ps" incr NbDePs set RequestPs [SqlExec "select ps.pk_probeset, ps.pk_arraytype, ps.probeset_id, ps.accno, ps.genesymbol, ps.refseqtranscript_id from retinobase2.probeset ps where ps.probeset_id = '$Ps';" "GetList"] if {$RequestPs=={}} { set trouve 0 set pastrouveps 0 puts "pas ds ps" incr PasFromPs lappend LesSsPs $Ps } set RequestEv [SqlExec "select ev.pk_expressionvalue, ev.pk_probeset, ev.pk_sample, ev.probsetid, ev.ratio, ev.ratiodescription from retinobase2.expressionvalue ev where ev.probsetid = '$Ps';" "GetList"] if {$pastrouveps && $RequestEv=={}} { set trouve 0 puts "pas ds ev" incr PasFromEv lappend LesAcPsSsEv $Ps } if {$trouve} { set Request [SqlExec "select ps.pk_probeset, ps.pk_arraytype, ps.probeset_id, ps.accno, ps.genesymbol, ps.refseqtranscript_id, ev.pk_expressionvalue, ev.pk_probeset, ev.pk_sample, ev.probsetid, ev.ratio, ev.ratiodescription from retinobase2.expressionvalue ev, retinobase2.probeset ps where ev.pk_probeset=ps.pk_probeset and ps.probeset_id = '$Ps';" "GetList"] # EspionneL $Request set PsIdFromPs [lindex $Request 2] set PsIdFromEv [lindex $Request 9] if {[string equal $PsIdFromPs $PsIdFromEv]} { incr CestOk Espionne "$PsIdFromPs = $PsIdFromEv" lappend LesEgaux "$PsIdFromPs = $PsIdFromEv" } else { incr Non Espionne "$PsIdFromPs != $PsIdFromEv" lappend LesDifferents "$PsIdFromPs != $PsIdFromEv" } } Espionne "" Espionne "" CanalSqlDisconnect } SauveLesLignes $LesSsPs dans /genomics/link/EVI/RaviSsPs.txt SauveLesLignes $LesAcPsSsEv dans /genomics/link/EVI/RaviAcPsSsEv.txt SauveLesLignes $LesEgaux dans /genomics/link/EVI/RaviEgaux.txt SauveLesLignes $LesDifferents dans /genomics/link/EVI/RaviDifferents.txt puts "nombre total= $NbDePs" puts "nombre ou ok= $CestOk" puts "nombre ou non= $Non" } proc TrouveIncoherenceChezRetinobase3 {} { set NbDePs 0; set PasFromPs 0; set PasFromEv 0; set corres 0; set CestOk 0; set Non 0; set LesSsPs {}; set LesAcPsSsEv {}; set LesEgaux {}; set LesDifferents {} foreach Ps [AffyAnno ListOf Index] { CanalSqlBioArrayBase set trouve 1 set pastrouveps 1 puts "++$Ps" incr NbDePs set RequestPs [SqlExec "select ps.pk_probeset, ps.probeset_id, ps.accno, ps.genesymbol, ps.refseqtranscript_id from retinobase2.probeset ps where ps.probeset_id = '$Ps';" "GetList"] if {$RequestPs=={}} { set trouve 0 set pastrouveps 0 puts "pas ds ps" incr PasFromPs lappend LesSsPs $Ps } set RequestEv [SqlExec "select ev.pk_expressionvalue, ev.pk_ln, ev.probsetid, ev.ratio, ev.ratiodescription from retinobase2.expressionvalue ev where ev.probsetid = '$Ps';" "GetList"] if {$pastrouveps && $RequestEv=={}} { set trouve 0 puts "pas ds ev" incr PasFromEv lappend LesAcPsSsEv $Ps } if {$trouve} { incr corres set Request [SqlExec "select ps.pk_probeset, ps.probeset_id, ps.accno, ps.genesymbol, ps.refseqtranscript_id, ev.pk_expressionvalue, ev.pk_ln, ev.probsetid, ev.ratio, ev.ratiodescription from retinobase2.expressionvalue ev, retinobase2.probeset ps where ev.pk_probeset=ps.pk_probeset and ps.probeset_id = '$Ps';" "GetList"] # EspionneL $Request set PsIdFromPs [lindex $Request 1] puts $PsIdFromPs set PsIdFromEv [lindex $Request 7] puts $PsIdFromEv if {[string equal $PsIdFromPs $PsIdFromEv]} { incr CestOk Espionne "$PsIdFromPs = $PsIdFromEv" lappend LesEgaux "$PsIdFromPs = $PsIdFromEv" } else { incr Non Espionne "$PsIdFromPs != $PsIdFromEv" lappend LesDifferents "$PsIdFromPs != $PsIdFromEv" } } Espionne "" Espionne "" CanalSqlDisconnect } SauveLesLignes $LesSsPs dans /genomics/link/EVI/Retinobase3SsPs.txt SauveLesLignes $LesAcPsSsEv dans /genomics/link/EVI/Retinobase3AcPsSsEv.txt SauveLesLignes $LesEgaux dans /genomics/link/EVI/Retinobase3Egaux.txt SauveLesLignes $LesDifferents dans /genomics/link/EVI/Retinobase3Differents.txt puts "nombre total= $NbDePs" puts "nombre de ps a comparer= $corres" puts "nombre ou ok= $CestOk" puts "nombre ou non= $Non" } proc TrouveIntensitySignal {ProbeSet} { set LesLignes {} CanalSqlBioArrayBase foreach {Ps Ch Ex Sa SaC Si Ca Re So} [SqlExec "select p.probeset_id, at.type, e.description, s.description_sample, s.short_description, rd.signalintensity, rd.call, rd.noofreplicate, a.name from retinobase3.realexp re, retinobase3.experiment e, retinobase3.sample s, retinobase3.arraytype at, retinobase3.rawdata rd, retinobase3.analysissoftware a, retinobase3.probeset p where p.pk_probeset = rd.pk_probeset and rd.pk_software = a.pk_software and rd.pk_realexp = re.pk_realexp and re.pk_experiment = e.pk_experiment and re.pk_sample = s.pk_sample and re.pk_arraytype = at.pk_arraytype and p.probeset_id = '$ProbeSet' order by re.pk_experiment, re.pk_sample;" "GetList"] { lappend LesLignes "$Ps\t$Ch\t$Ex\t$Sa\t$SaC\t$Si\t$Ca\t$Re\t$So" } CanalSqlDisconnect return [join $LesLignes "\n"] } proc TrouveIntensitySignalParticulier {ProbeSet PkExperiment Age} { set LesLignes {} CanalSqlBioArrayBase foreach {Ps Ex Sa Ag Si Re So} [SqlExec "select p.probeset_id, e.pk_experiment, s.short_description, i.age, rd.signalintensity, rd.noofreplicate, a.name from retinobase3.realexp re, retinobase3.experiment e, retinobase3.sample s, retinobase3.individual i, retinobase3.rawdata rd, retinobase3.analysissoftware a, retinobase3.probeset p where p.pk_probeset = rd.pk_probeset and rd.pk_software = a.pk_software and rd.pk_realexp = re.pk_realexp and re.pk_experiment = e.pk_experiment and re.pk_sample = s.pk_sample and s.pk_individual = i.pk_individual and p.probeset_id = '$ProbeSet' and e.pk_experiment = '$PkExperiment' and i.age = '$Age' order by re.pk_sample;" "GetList"] { lappend LesLignes "$Ps\t$Ex\t$Sa\t$Ag\t$Si\t$Re\t$So" } CanalSqlDisconnect return [join $LesLignes "\n"] } proc TrouveIntensitySignalParticulierChicken {ProbeSet PkExperiment} { set LesLignes {} CanalSqlBioArrayBase foreach {Ps Ex Sa Ag Si Re So} [SqlExec "select p.probeset_id, e.pk_experiment, s.short_description, i.age, rd.signalintensity, rd.noofreplicate, a.name from retinobase3.realexp re, retinobase3.experiment e, retinobase3.sample s, retinobase3.individual i, retinobase3.rawdata rd, retinobase3.analysissoftware a, retinobase3.probeset p where p.pk_probeset = rd.pk_probeset and rd.pk_software = a.pk_software and rd.pk_realexp = re.pk_realexp and re.pk_experiment = e.pk_experiment and re.pk_sample = s.pk_sample and s.pk_individual = i.pk_individual and p.probeset_id = '$ProbeSet' and e.pk_experiment = '$PkExperiment' and (s.short_description = 'Chicken_fibroblasts_adult' OR s.short_description = 'Chicken_cone_adult') order by re.pk_sample;" "GetList"] { lappend LesLignes "$Ps\t$Ex\t$Sa\t$Si\t$Re\t$So" } CanalSqlDisconnect return $LesLignes #return [join $LesLignes "\n"] } proc TrouveLAParticulier {} { set j 0 set RepertoireSourisTfactor "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_avr/SOURIS_Tfactor_61_avr" set RepertoireSourisOthers "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_avr/SOURIS_others_61_avr" set RepertoireSourisNOALT "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_avr/SOURIS_NO_ALT_61_avr" set RepertoireRatTfactor "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_avr/RAT_Tfactor_61_avr" set RepertoireRatOthers "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_avr/RAT_others_61_avr" set RepertoireRatNOALT "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_avr/RAT_NO_ALT_61_avr" set LesRepertoires [list $RepertoireSourisTfactor $RepertoireSourisOthers $RepertoireSourisNOALT $RepertoireRatTfactor $RepertoireRatOthers $RepertoireRatNOALT] foreach Repertoire $LesRepertoires { set i 0 foreach FileST [glob -nocomplain "$Repertoire/*"] { set cluster [lindex [split [file tail $FileST] "."] 0] set taille [file size $FileST] if {$taille == 0} {incr i; incr j} foreach Ligne [LesLignesDuFichier $FileST] { if {[regexp "^>LA" $Ligne]} { scan $Ligne "%s" Name regsub ">" $Name "" Name if {[regexp "LA0ACA45YB14CM1" $Name]} {Espionne "$Name $cluster"} if {[regexp "LA0ACA90YD21.CONTIG" $Name]} {Espionne "$Name $cluster"} if {[regexp "LA0ACA99YB24CM1" $Name]} {Espionne "$Name $cluster"} } } } #Espionne "$Repertoire $i" } Espionne "$j" } proc TrouveLARedondant {} { #set RepertoireSourisTfactor "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_mai/SOURIS_Tfactor_61_mai" #set RepertoireSourisOthers "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_mai/SOURIS_others_61_mai" #set RepertoireSourisNOALT "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_mai/SOURIS_NO_ALT_61_mai" #set LesRepertoires [list $RepertoireSourisTfactor $RepertoireSourisOthers $RepertoireSourisNOALT] set RepertoireRatTfactor "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_mai/RAT_Tfactor_61_mai" set RepertoireRatOthers "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_mai/RAT_others_61_mai" set RepertoireRatNOALT "/genomics/link/SpliRetMouse/FichiersInitial/PROT_VARIANTES_61_mai/RAT_NO_ALT_61_mai" set LesRepertoires [list $RepertoireRatTfactor $RepertoireRatOthers $RepertoireRatNOALT] foreach Repertoire $LesRepertoires { foreach FileST [glob -nocomplain "$Repertoire/*"] { set FileCourt [string range $FileST 66 end] set cluster [lindex [split [file tail $FileST] "."] 0] set taille [file size $FileST] if {$taille == 0} {continue} foreach Ligne [LesLignesDuFichier $FileST] { if {[regexp "^>LA" $Ligne]||[regexp "^>303" $Ligne]} { scan $Ligne "%s" Name regsub ">" $Name "" Name lappend DejaVu($Name) $FileCourt } } } } #Espionne "LA0AAA85YB23CM1:" #EspionneL "$DejaVu(LA0AAA85YB23CM1)" foreach Clef [array names DejaVu] { if {[llength $DejaVu($Clef)]>1} { Espionne "\t $Clef" EspionneL "$DejaVu($Clef)" } } } proc TrouveLaBoiteRepresentative {} { set LesLignes [NomLigne ListeDes Lignes] set nblignes 0 set unnom 0; set plsnom 0 set cas3a 0; set cas3b 0; set cas3c 0; set cas3d 0; set cas3e 0 set unseulgn 0; set plsgn 0 foreach Ligne $LesLignes { #if {$Ligne!="2067"} {continue} if {[RangeMoi get EviOf $Ligne]!={}} { continue } incr nblignes set ListeDesNoms {} set LesGns {}; set LesGnsNM {}; set LesDes {}; set LesLoc {} set BonneBoite {} set TV 0 set TousLesNoms [NomLigne $Ligne Noms] set ListeDesNoms [split $TousLesNoms " "] set NbDeNomPrUneLigne [llength $ListeDesNoms] if {[llength $ListeDesNoms]==1} { incr unnom continue } if {[llength $ListeDesNoms]>1} {incr plsnom} Espionne "" Espionne "Ligne $Ligne" foreach Nom $ListeDesNoms { set Gn [ExtraitInfo $Nom "ValiGN"] set Acc [AccessEvi $Nom] set Des [ExtraitInfo $Nom "ValiDE"] Espionne "$Nom $Gn $Acc $Des" if {[regexp "NM" $Acc]} {lappend LesGnsNM $Gn} lappend LesGns $Gn lappend LesDes $Des } set LesGns [ListeSansDoublon $LesGns] set LesGnsNM [ListeSansDoublon $LesGnsNM] set LongLesGns [llength $LesGns] set LongLesGnsNM [llength $LesGnsNM] set LongLesDes [llength $LesDes] if { $Ligne=="729" || $Ligne=="1417" || $Ligne=="413"} { set BonneBoite $ListeDesNoms } if {$Ligne=="413"} { set BonneBoite [list "EVI04130"] } if {$BonneBoite!={}} { Espionne "$BonneBoite Main" RangeMoi set EviOf $Ligne $BonneBoite "LaetitiaChoose" continue } ScanLaListe [CompteDans $ListeDesNoms "NM" "XM"] nbNM nbXM if {$nbNM==1} { incr cas3a; Espionne "cas3a" foreach Nom $ListeDesNoms { set Acc [AccessEvi $Nom] if {[regexp {NM_} $Acc]} { lappend BonneBoite $Nom break } } if {$BonneBoite!={}} { Espionne "$BonneBoite NmAlone" RangeMoi set EviOf $Ligne $BonneBoite "NmAlone" #ok continue } FaireLire "Probleme NmUnSeul" } if {$nbNM>1} { incr cas3b; Espionne "cas3b" set LongMax 0 if {$LongLesGnsNM==1} { set BonneBoitetv "" incr unseulgn; Espionne "unseulgn" foreach Nom $ListeDesNoms { set Acc [AccessEvi $Nom] if {![regexp {NM_} $Acc]} {continue} set Loc [ExtraitInfo $Nom "LocUcscFrom200602"] lappend LesLoc $Loc set LesMotsLoc [split $Loc ":- "] set start "" set stop "" Espionne "$Nom $Loc" set start [lindex $LesMotsLoc 1] set stop [lindex $LesMotsLoc 2] if {$start=="" || $stop==""} { continue } set longgn [expr $stop - $start] Espionne "$longgn" if {$longgn > $LongMax} { set BonneBoitetv $Nom set LongMax $longgn } } lappend BonneBoite $BonneBoitetv } if {$BonneBoite!={}} { Espionne "$BonneBoite NmBestLoc" RangeMoi set EviOf $Ligne $BonneBoite "NmBestLoc" continue } if {$LongLesGnsNM!=1} { set onapls 0 incr plsgn; Espionne "plsgn" set LaDesClient [RetChip5 $Ligne description_customer] regsub -nocase -all "\\+" $LaDesClient "" LaDesClient regsub -all {\-} $LaDesClient "" LaDesClientCompact regsub -all " " $LaDesClientCompact "" LaDesClientCompact regsub -all "beta" $LaDesClientCompact "b" LaDesClientCompact regsub -all "alpha" $LaDesClientCompact "a" LaDesClientCompact set premiereloc 1; set client 0; Espionne "LaDesClient $LaDesClient" Espionne "LaDesClientCompact $LaDesClientCompact" foreach Nom $ListeDesNoms { set Acc [AccessEvi $Nom] set Gn [ExtraitInfo $Nom "ValiGN"] set Des [ExtraitInfo $Nom "ValiDE"] regsub -nocase -all "\\+" $Des "" Des regsub -all {\-} $Des "" DesCompact regsub -all " " $DesCompact "" DesCompact regsub -all "beta" $DesCompact "b" DesCompact regsub -all "alpha" $DesCompact "a" DesCompact if {![regexp {NM_} $Acc]} {continue} if {$Gn!="" && [regexp -nocase $Gn $LaDesClientCompact]} { Espionne "rentreici" set client 1 Espionne "Des $Des" Espionne "DesCompact $DesCompact" Espionne "$Nom $Gn ce que veut client" lappend BonneBoite $Nom if {![regexp {transcript variant} $Des]} { break } } if {$Des!="" && $LaDesClient!="" && ([regexp -nocase $LaDesClient $Des]|| [regexp -nocase $DesCompact $LaDesClientCompact] || [regexp -nocase $LaDesClientCompact $DesCompact])} { Espionne "rentrela" if {[regexp {similar} $Des]} {continue} set client 1 Espionne "Des $Des" Espionne "DesCompact $DesCompact" Espionne "$Nom [string range $Des 0 10] ce que veut client" lappend BonneBoite $Nom if {![regexp {transcript variant} $Des]} { break } } } if {[llength $BonneBoite]>1} { Espionne "attention" set LongMax 0; set BonneBoiteFinal {} foreach Boite $BonneBoite { set Loc [ExtraitInfo $Boite "LocUcscFrom200602"] lappend LesLoc $Loc set LesMotsLoc [split $Loc ":- "] set start "" set stop "" Espionne "$Boite $Loc" set start [lindex $LesMotsLoc 1] set stop [lindex $LesMotsLoc 2] if {$start=="" || $stop==""} { continue } set longgn [expr $stop - $start] Espionne "$longgn" if {$longgn > $LongMax} { lappend BonneBoiteFinal $Boite set LongMax $longgn } } set BonneBoite $BonneBoiteFinal } if {$BonneBoite!={}} { Espionne "$BonneBoite NmBestClient" RangeMoi set EviOf $Ligne $BonneBoite "NmBestClient" continue } if {$BonneBoite=={}} { set BonneBoite [ChoisisBonneBoite $Ligne] if {$BonneBoite!={}} { RangeMoi set EviOf $Ligne $BonneBoite "LaetitiaChoose" continue } } } } if {$nbNM==0} { incr cas3c; Espionne "cas3c" if {$NbDeNomPrUneLigne==$nbXM} { incr cas3d; Espionne "cas3d" Espionne "que des xm" foreach Nom $ListeDesNoms { lappend BonneBoite $Nom break } Espionne "$BonneBoite XmFirstNoNm" RangeMoi set EviOf $Ligne $BonneBoite "XmFirstNoNm" continue } incr cas3e; Espionne "cas3e" set LongMax 0 Espionne "pas que des xm" set nbpartial 0; set nbxml 0 ScanLaListe [CompteDans $ListeDesNoms "NM" "XM"] nbNM nbXM set PremierGb "" set PremierXm "" foreach Nom $ListeDesNoms { if { $PremierGb=="" && ! [regexp "XM" [AccessEvi $Nom]]} { set PremierGb $Nom } if { $PremierXm=="" && [regexp "XM" [AccessEvi $Nom]]} { set PremierXm $Nom } set Des [ExtraitInfo $Nom "ValiDE"] if {[regexp {partial} $Des] || [regexp {fragment} $Des]} { continue } if {[regexp "XM" [AccessEvi $Nom]]} { continue } if {[regexp "NR" [AccessEvi $Nom]]} { continue } lappend BonneBoite $Nom Espionne "$BonneBoite GbFirstNotPartial" RangeMoi set EviOf $Ligne $BonneBoite "GbFirstNotPartial" break } if {$BonneBoite!={}} { continue } foreach Nom $ListeDesNoms { set Des [ExtraitInfo $Nom "ValiDE"] if {[regexp {partial} $Des] || [regexp {fragment} $Des]} { continue } lappend BonneBoite $Nom Espionne "$BonneBoite XmFirstNonPartial" RangeMoi set EviOf $Ligne $BonneBoite "XmFirstNotPartial" #ok break } if {$BonneBoite!={}} { continue } if {$PremierGb!=""} { lappend BonneBoite $PremierGb Espionne "$BonneBoite GbFirst" RangeMoi set EviOf $Ligne $BonneBoite "GbFirst" #ok continue } if {$PremierXm!=""} { lappend BonneBoite $PremierXm Espionne "$BonneBoite XmFirst" RangeMoi set EviOf $Ligne $BonneBoite "XmFirst" #ok continue } lappend BonneBoite [lindex $ListeDesNoms 0] Espionne "$BonneBoite First" RangeMoi set EviOf $Ligne $BonneBoite "First " #ok continue } FaireLire "Horreur $Ligne" } RangeMoi save #AfficheVariable [join [RangeMoi get ListOf Status] "\n"] Espionne "nblignes $nblignes" Espionne "nblignesacunseulnom $unnom" Espionne "nblignesacplsnom $plsnom" Espionne "unnm cas3a $cas3a" Espionne "plsnm cas3b $cas3b" Espionne "unseulgn $unseulgn" Espionne "plsgn $plsgn" Espionne "aucunnm cas3c $cas3c" Espionne "quedesxm cas3d $cas3d" Espionne "pasquedesxm cas3e $cas3e" } proc TrouveLaReferenceVoulue {ReferenceVoulue FichierPhylo} { Wup "Texte est un arbre phylo" Wup "Recherche l'Access qui correspond a l'organisme ReferenceVoulue" Wup " Ne marche bien que pour les synthetases... et encore ... j'ai tout change." set Texte [ContenuDuFichier $FichierPhylo] regsub -all {\(|\)|\:|\n} $Texte " " Texte foreach Mot [split $Texte " "] { if { ! [regexp -nocase {[A-Z]} $Mot]} { continue } if {0 && [regexp -indices {[0-9]} $Mot sChiffre]} { scan $sChiffre "%d" iChiffre puts "$sChiffre $iChiffre" puts $Mot set Mot "[string range $Mot 0 [incr iChiffre -1]]_[string range $Mot [incr iChiffre] end]" puts $Mot } lappend LesMots $Mot } puts [join $LesMots " "] foreach Access $LesMots { if {[regexp $ReferenceVoulue [OrgaDuAccess $Access Court]]} { return $Access } } exit set LesReferencesPossibles {} if { [lsearch -regexp $LesMots $ReferenceVoulue] < 0 } { FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]" set Reference [ChoixParmi $LesMots] } else { while {[set iReference [lsearch -regexp $LesMots $ReferenceVoulue]] > -1} { lappend LesReferencesPossibles [lindex $LesMots $iReference] set LesMots [lrange $LesMots [expr $iReference+1] end] } if {[llength $LesReferencesPossibles] == 2 && [AutreCode $Nom]=="glu"} { set iReference [lsearch -regexp $LesReferencesPossibles "sye"] if {$iReference > -1} { set Reference [lindex $LesReferencesPossibles $iReference] } else { FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]" set Reference [ChoixParmi $LesReferencesPossibles] } } elseif {[llength $LesReferencesPossibles] == 2 && [AutreCode $Nom]=="gln"} { set iReference [lsearch -regexp $LesReferencesPossibles "syq"] if {$iReference > -1} { set Reference [lindex $LesReferencesPossibles $iReference] } else { FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]" set Reference [ChoixParmi $LesReferencesPossibles] } } elseif {[llength $LesReferencesPossibles] > 1} { FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]" set Reference [ChoixParmi $LesReferencesPossibles] } else { set Reference [lindex $LesReferencesPossibles 0] } } } proc TrouveLeOldJR {Ligne} { #oldjr= jr de la liste des 926 (pour lequel tout est calcule) set LesJumeaux [split $Ligne " "] set Trouve 0 foreach DD $LesJumeaux { if {[info exists Vu($DD)]} {set Trouve 1;return $DD} } if {$Trouve==0} {return ""} } proc TrouveLesInsuffisants {} { set LesExonhitNonJR {} foreach PAB [ListeDesPABs] { set VuJR 0 set Old [AncienNom $PAB] if {[regexp "^EX" $Old]} { foreach Ligne [LesLignesDuFichier "[GscopeDatabaseDir Exonhit]/fiches/clusters"] { scan $Ligne "%s" jr if {$Old!=$jr} { continue } else { set VuJR 1 } } if {$VuJR==0} {lappend LesExonhitNonJR $PAB} } } return $LesExonhitNonJR } proc TrouveLesJamaisExprimes {{Qui ""} {Quoi ""}} { global TrouveLesJamaisExprimes if {$Qui==""} {set Qui "ListeDes" ; set Quoi "ProbeSet"} if {$Quoi==""} {set Quoi "OuiNon"} if {[info exists TrouveLesJamaisExprimes($Qui,$Quoi)]} { return $TrouveLesJamaisExprimes($Qui,$Quoi) } if {[info exists TrouveLesJamaisExprimes("EstCharge")]} { return "" } set TrouveLesJamaisExprimes("EstCharge") "" set Fichier "/genomics/link/WP14/Wolfgang/congRD1/gcrma/which.2ndHi.ps.neverAbove4.7gcrma.txt" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^affyID" $Ligne]} {continue} set LesMots [split $Ligne "\t"] set Ps [lindex $LesMots 0] set OuiNon [lindex $LesMots 1] lappend TrouveLesJamaisExprimes(ListeDes,ProbeSet) $Ps set TrouveLesJamaisExprimes($Ps,OuiNon) $OuiNon } return [TrouveLesJamaisExprimes $Qui $Quoi] } proc TrouveLesRefs {Org} { set nbVide 0; set nbSsRef 0 #ici la ref est le plus grand NM ou ENS #ds le cas ou le cluster n'a ni NM ni ENS, on prend le plus grand LA #Oldversion: #1ereversion: la ref est le plus grand ensembl #2emeversion: la ref est le plus grand NM ou ENS if {[regexp -nocase "Test" $Org]} { set RepertoireSourisOthers "/genomics/link/SpliRetTest/FichiersInitial/PROT_VARIANTES_61_mai/SOURIS_others_61_mai" set RepertoireSourisTfactor "/genomics/link/SpliRetTest/FichiersInitial/PROT_VARIANTES_61_mai/SOURIS_Tfactor_61_mai" set RepertoireSourisNoAlt "/genomics/link/SpliRetTest/FichiersInitial/PROT_VARIANTES_61_mai/SOURIS_NO_ALT_61_mai" set LesRepertoires [list $RepertoireSourisTfactor $RepertoireSourisOthers $RepertoireSourisNoAlt] set FichierOut "/genomics/link/SpliRetTest/FichiersInitial/RefsDesClusters" } if {[regexp -nocase "Mouse" $Org]} { set LesRepertoires [LesRepertoires "Mouse" "Mod"] set FichierOut "/genomics/link/SpliRetMouse/FichiersModifUnique/RefsDesClusters" } if {[regexp -nocase "Rat" $Org]} { set LesRepertoires [LesRepertoires "Rat" "Mod"] set FichierOut "/genomics/link/SpliRetRat/FichiersModifUnique/RefsDesClusters" } foreach Repertoire $LesRepertoires { foreach FileST [glob -nocomplain "$Repertoire/*"] { set cluster [lindex [split [file tail $FileST] "."] 0] set taille [file size $FileST] if {$taille == 0} {incr nbVide; continue} set YaRef [ClusterAvOuSsRef $cluster ref $Org] if {!$YaRef} {incr nbSsRef} set NameDuPlusGrandRef "" set LongDuPlusGrandRef -999 foreach Access [LaSequenceDuTFAs $FileST "LaListeDesAccess" "" "" "ForceAccessFirst" "AllowDigitOnly"] { regsub "Nbr" $Access "" Access set TFA [LaSequenceDuTFAs $FileST $Access] set Seq [QueLaSequenceDuTexteTFA $TFA] set LongCourant [string length $Seq] #Espionne "$Access $LongCourant" if {$YaRef && ! [regexp {^(ENS|NM|XM)} $Access] } { continue } if {$LongCourant>$LongDuPlusGrandRef} { set LongDuPlusGrandRef $LongCourant set NameDuPlusGrandRef $Access } } set LigneResult "$cluster $NameDuPlusGrandRef" #Espionne $LigneResult lappend LesLigneResult $LigneResult } } Espionne "nbvide= $nbVide nbssref= $nbSsRef" SauveLesLignes $LesLigneResult dans $FichierOut } proc TrouveLesSsProt {{Liste ""}} { set lesmanquants 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set NvNom "$Nom _1" regsub " " $NvNom "" NvNom set Fichier "[GscopeFile $NvNom protembl]" if {![file exists $Fichier]} { incr lesmanquants Espionne "$lesmanquants $NvNom manque" } } Espionne "nombre= $lesmanquants" } proc TrouveLesSsProt2 {{Liste ""}} { set lesmanquants 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set Fichier "[GscopeFile $Nom prottfa]" if {![file exists $Fichier]} { incr lesmanquants Espionne "$Fichier" Espionne "$lesmanquants $Nom manque" } } Espionne "nombre= $lesmanquants" } proc TrouveMacsimFaux {{Liste ""}} { set total 0; set A 0; set B 0; set C 0; set D 0; set Dbis 0; set E 0; set Ebis 0; set F 0; set G 0 set LesARefaire {} if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { puts "" puts "$Nom" incr total set FichierMsf "[RepertoireDuGenome]/msf/$Nom" set FichierMacsimRsf "[RepertoireDuGenome]/macsim/$Nom.rsf" set FichierMacsimXml "[RepertoireDuGenome]/macsim/$Nom.xml" if {![file exists $FichierMsf] && ![file exists $FichierMacsimRsf] && ![file exists $FichierMacsimXml]} { incr A puts "normal pas msf" } if {[file exists $FichierMsf] && (![file exists $FichierMacsimRsf] || ![file exists $FichierMacsimXml])} { incr B puts "pas normal ac msf" lappend LesARefaire $Nom #arelancer } if {[file exists $FichierMsf] && [file exists $FichierMacsimRsf] && [file exists $FichierMacsimXml]} { incr C set LesLignesRsf [LesLignesDuFichier $FichierMacsimRsf] set longrsf [llength $LesLignesRsf] set premLigneRsf [lindex $LesLignesRsf 0] set derniereligneRsf [lindex $LesLignesRsf [expr $longrsf -1]] if {![regexp {^!!RICH_SEQUENCE} $premLigneRsf]} { incr D puts "pb ac rsf" lappend LesARefaire $Nom } if {![regexp {^\}} $derniereligneRsf]} { incr Dbis puts "pbbis ac rsf" lappend LesARefaire $Nom } set LesLignesXml [LesLignesDuFichier $FichierMacsimXml] set longxml [llength $LesLignesXml] set premLigneXml [lindex $LesLignesXml 0] set derniereligne [lindex $LesLignesXml [expr $longxml -1]] if {![regexp {^<\?xml version="1.0"\?>} $premLigneXml]} { incr E puts "pb ac xml" lappend LesARefaire $Nom } if {![regexp {^} $derniereligne]} { incr Ebis puts "pbbis ac xml" lappend LesARefaire $Nom } set taillersf [file size $FichierMacsimRsf] set taillexml [file size $FichierMacsimXml] puts "taillersf $taillersf" puts "taillexml $taillexml" if {$taillersf <=1} { incr F puts "rsf trop petit" lappend LesARefaire $Nom } if {$taillexml <=1} { incr G puts "xml trop petit" lappend LesARefaire $Nom } } } set LesARefaire [ListeSansDoublon $LesARefaire] set longdesarefaire [llength $LesARefaire] puts "longdesarefaire $longdesarefaire" SauveLesLignes $LesARefaire dans "[RepertoireDuGenome]/MacsimARelancer4" puts "total $total" #5543 puts "A $A" #410 puts "B $B" #146 puts "C $C" #4987 puts "D $D" #2 puts "Dbis $Dbis" #2 puts "E $E" #0 puts "Ebis $Ebis" #2 puts "F $F" #2 puts "G $G" #0 } proc TrouveRatio {ProbeSet} { set LesLignes {} CanalSqlBioArrayBase foreach {Ps Ch Ex Ra De So} [SqlExec "select p.probeset_id, at.type, e.description, ra.ratio, ra.ratiodescription, a.name from retinobase3.realexp re, retinobase3.experiment e, retinobase3.ratio ra, retinobase3.arraytype at, retinobase3.analysissoftware a, retinobase3.probeset p where p.pk_probeset = ra.pk_probeset and ra.pk_software = a.pk_software and ra.pk_realexp = re.pk_realexp and re.pk_experiment = e.pk_experiment and re.pk_arraytype = at.pk_arraytype and p.probeset_id = '$ProbeSet' order by re.pk_realexp;" "GetList"] { lappend LesLignes "$Ps\t$Ch\t$Ex\t$Ra\t$De\t$So" } CanalSqlDisconnect return [join $LesLignes "\n"] } proc TrouveRedondantDsRefGene {} { set premier 1 set RepertoireUcsc "/genomics/link/UCSCGenomes" set FichierLocUcscMouse "$RepertoireUcsc/Mus_musculus/database/refGene.txt" foreach Ligne [LesLignesDuFichier $FichierLocUcscMouse] { set trouve 0 if {$Ligne==""} {continue} set LesMots [LesMotsDeLaLigne $Ligne] set AccNm [lindex $LesMots 1] #Espionne "AccNm $AccNm" if {$premier} { set premier 0 lappend LesAcc $AccNm } else { foreach Acc $LesAcc { if {$Acc==$AccNm} { Espionne "$AccNm en pls exemplaires" set trouve 1 } } if {!$trouve} { lappend LesAcc $AccNm } } } } proc TrouveRedondants {} { set File "/genomics/link/SpliRetMouse/database/TousLesAccess" foreach Ligne [LesLignesDuFichier $File] { set Access [StringSuivant "Access:" dans $Ligne] set index [string first "Access" $Ligne] set Morceau [string range $Ligne 0 [expr $index -1]] lappend Redond($Morceau) $Access } foreach Clef [array names Redond] { Espionne "" Espionne "$Clef" EspionneL "$Redond($Clef)" set nbPotentiel [llength $Redond($Clef)] if {$nbPotentiel>1} { array unset Redond2; set LesLignesRedond {} set i -1 foreach Value $Redond($Clef) { incr i # Espionne "$i: $Value" set Seq$i [string trim [InterrogeSeq $Value Seq]] # Espionne "[set Seq$i]" set Redond2($i) $Value } for {set j 0} {$j <$nbPotentiel} {incr j} { for {set k 1} {$k <$nbPotentiel} {incr k} { if {$k<=$j} {continue} if {[string equal [set Seq$j] [set Seq$k]]} { set LigneRedond "$Redond2($j) egale $Redond2($k)" # Espionne "$LigneRedond" lappend LesLignesRedond $LigneRedond } } } if {$LesLignesRedond=={}} {continue} set premierefois 1; set m 0 foreach cas $LesLignesRedond { #Espionne "cas $cas" set LesMots [split $cas " "] set Un [lindex $LesMots 0] set Deux [lindex $LesMots 2] if {$premierefois} { lappend Liste$m $Un lappend Liste$m $Deux set premierefois 0 #Espionne "1er m=$m" #EspionneL "[set Liste$m]" } else { #Espionne "2eme m=$m" set trouve 0 for {set n 0} {$n <= $m} {incr n} { #Espionne "n=$n (m=${m})" foreach Ac [set Liste$n] { #Espionne "Ac $Ac" #Espionne "Un $Un Deux $Deux" if {$Ac==$Un || $Ac==$Deux} { set trouve 1 #Espionne "onatrouve" lappend Liste$n $Un lappend Liste$n $Deux break } } } if {!$trouve} { incr m #Espionne "pastrouve m=$m" lappend Liste$m $Un lappend Liste$m $Deux } } } for {set p 0} {$p <= $m} {incr p} { set LesNonRefs {} # Espionne "Liste $p :" set Liste$p [ListeSansDoublon [set Liste$p]] # EspionneL "[set Liste$p]" set Accesss [join [set Liste$p] " "] if {[regexp "SW:" $Accesss]} { set ref "SW:" } elseif {[regexp "TR:" $Accesss]} { set ref "TR:" } elseif {[regexp "VARSPLIC:" $Accesss]} { set ref "VARSPLIC:" } elseif {[regexp "REFSEQPNEW:" $Accesss]} { set ref "REFSEQPNEW:" } elseif {[regexp "REFSEQPREL:" $Accesss]} { set ref "REFSEQPREL:" } elseif {[regexp "ENS" $Accesss]} { set ref "ENS" } else { return "aucune ref trouve pour $Clef" } Espionne "quelle ref? $ref" set trouveref 0 foreach elmt [set Liste$p] { if {[regexp $ref $elmt] && !$trouveref} { set trouveref 1 set LaRef $elmt } else { lappend LesNonRefs $elmt lappend TousLesNonsRefs $elmt } } Espionne "LaRef $LaRef" set LesNonRefs [join $LesNonRefs " "] Espionne "LesNonRefs $LesNonRefs" set LigneASauver "$LaRef $LesNonRefs" lappend LesLignesASauver $LigneASauver set Liste$p {} } } } SauveLesLignes $LesLignesASauver dans "/genomics/link/SpliRetMouse/database/LaRefEtLesAccessRedondants" SauveLesLignes $TousLesNonsRefs dans "/genomics/link/SpliRetMouse/database/LesAccessRedondants" } proc TssForESRARE {} { set Fichier "/home/gioalt/WORK-IN-PROGRESS/data/HSDRs_coordinates_input.txt" foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp {^ESRAR} $Ligne] } { continue } scan $Ligne "%s %s %s %s %s %s %s" N Name Chr Strand Seq D F set M [expr ($D +$F)/2] set B [LocBefore $M "Mouse" $Chr]; scan $B "%s %s %s %s" RB DB FB SB set A [LocAfter $M "Mouse" $Chr]; scan $A "%s %s %s %s" RA DA FA SA set I [LocIn $M "Mouse" $Chr]; scan $I "%s %s %s %s" RI DI FI SI set DeltaI "NotFound" if {$I!=""} { set DeltaI 0 set LeTfaI [LaSequenceDesBanques $RI]; set EI [lindex $LeTfaB 0] } set DeltaB [expr $M-$FB] set DeltaA [expr $DA-$M] set LeTfaB [LaSequenceDesBanques $RB]; set EB [lindex $LeTfaB 0] set LeTfaA [LaSequenceDesBanques $RA]; set EA [lindex $LeTfaA 0] set Ok "" if {$DeltaI==0} { if {[regexp -nocase $Name $EI]} { set Ok "Hourrahhhh" Espionne "\n$N $Name $Strand $SB $FB $M $DA $SA $DeltaB $DeltaA Inside $RI $Ok" lappend LesInside "$N $Name $M $Strand $SI $DI $FI $DeltaI $RI $EI" continue } } if {$DeltaB < $DeltaA} { if {[regexp -nocase $Name $EB]} { set Ok "Hourrahhhh" Espionne "\n$N $Name $Strand $SB $FB $M $DA $SA $DeltaB $DeltaA Before $RB $Ok" lappend LesBefore "$N $Name $M $Strand $SB $DB $FB $DeltaB $RB $EB" continue } } if {$DeltaA < $DeltaB} { if {[regexp -nocase $Name $EA]} { set Ok "Hourrahhhh" Espionne "\n$N $Name $Strand $SB $FB $M $DA $SA $DeltaB $DeltaA After $RA $Ok" lappend LesAfter "$N $Name $M $Strand $SA $DA $FA $DeltaA $RA $EA" continue } } if {$DeltaA == $DeltaB} { FaireLire "$N $Name $FB $M $DA $DeltaB $DeltaA Equality !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" } if {$Ok==""} { Espionne "\n$N $Name $Strand $SB $FB $M $DA $SA $DeltaB $DeltaA Before $RB Perduuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu" Espionne "$EB\n$EA" lappend LesPerdus "$N $Name $Strand $SB $FB $M $DA $SA $DeltaB $DeltaA \n$EB\n$EA\n" } } AfficheVariable [join $LesBefore "\n"] "" "Before" AfficheVariable [join $LesAfter "\n"] "" "After" AfficheVariable [join $LesPerdus "\n"] "" "Perdus" } proc TuArretesDeBosser {} { global Bosseurs set LesTextes [list "Select the process you want to stop"] foreach Texte [array names Bosseurs] { if {[regexp "/" $Texte]} { continue } lappend LesTextes $Texte } set Texte [ChoixParmi $LesTextes] if {$Texte=="" || ! [info exists Bosseurs($Texte)]} { return "" } set Toi [set Bosseurs($Texte)] if {$Toi==""} { return "" } Sauve $Texte dans $Toi return $Toi } proc TuMontrerasCeQueFaitLeBouton {Bouton} { global QuelBouton return [set QuelBouton [after 1000 MontreCeQueFaitLeBouton $Bouton]] } proc TwoPi {} { return [expr 2*3.1415926] } proc Tx {{D ""} {F ""}} { global Tx TxD TxF if {$D==""} { set D $TxD } if {$F==""} { set F $TxF } return [string range $Tx $D $F] } proc TypeAc {} { set K 0 set list {} foreach I [RetChip5 ListOf Index] { set Ac [RetChip5 $I "DNA_acc"] if {$Ac!=""} { set LesAC [split $Ac ","] foreach AC $LesAC { set pref [string range $AC 0 1] if {[regexp {[0-9]+} $pref]} { set pref [string range $pref 0 0] } Espionne "le prefixe est $pref a la ligne $I" lappend list $pref } } } set L [lsort -unique $list] set NB [llength $L] foreach x $L { puts $x } Espionne "nb de type d'access different=$NB" } proc TypeAc_AEffacer {} { set K 0 set list {} foreach I [RetChip2 ListOf Index] { set AC [RetChip2 $I "DNA_acc"] if {$AC!=""} { if { [regexp {.\,.} $AC] } { incr K Espionne "attention il y a pls access pour ligne $I=>$K" continue } # set pref [string range $AC 0 2] # if {[regexp -nocase {^[a-z]3} $pref]} {Espionne "attention $pref a 3 lettres=>$I"} set pref [string range $AC 0 1] if {[regexp {[0-9]+} $pref]} { set pref [string range $pref 0 0] } Espionne "le prefixe est $pref a la ligne $I" lappend list $pref } } set L [lsort -unique $list] set NB [llength $L] foreach x $L { puts $x } Espionne "nb de type d'access different=$NB" } proc TypeAli {} { return [set ::Defauts(TypeAli)] } proc TypeDeVecteurGateway {Vecteur} { if {$Vecteur==""} { return 0 } if {[regexp "/" $Vecteur]} { set Fichier $Vecteur } else { set Fichier [FindVector $Vecteur] if {[FileAbsent $Fichier]} { return 0 } } set Seq [QueLaSequenceDuFichierTFA $Fichier] if {[regexp -nocase [SEQAttL1] $Seq] && [regexp -nocase [SEQAttL2] $Seq]} { return 1 } if {[regexp -nocase [SEQAttR1] $Seq] && [regexp -nocase [SEQAttR2] $Seq]} { return 2 } return 0 } proc TypeDeVecteurGatewayPourTous {} { foreach Vecteur [LesVecteurs] { Espionne "[TypeDeVecteurGateway $Vecteur] $Vecteur" } } proc TypeOntologieExiste {Type} { if {![File exists "[OntologyDir]/$Type.ontology"]} {return 0} return 1 } proc TypeProsite {IdProsite} { #un prosite est soit MATRIX soit PATTERN set link "http://prosite.expasy.org/$IdProsite" set LesLignes [LesLignesDuFichier $link] foreach Ligne $LesLignes { if {![regexp "Entry type" $Ligne]} {continue} ValeurDeLaBalise "td" Ligne set type [ValeurDeLaBalise "td" Ligne] return $type } } proc TypeSeq {} { return $::TypeSeq } proc UCSCGenomeDir {Genome} { Wup "Genome directory" global UCSCGenomeDir if {[info exists UCSCGenomeDir($Genome)] && [file exists [set UCSCGenomeDir($Genome)]]} {return [set UCSCGenomeDir($Genome)]} switch -exact -- $Genome { "human" {set UCSCGenomeDir($Genome) "/genomics/g3/UCSCGenomes/Homo_sapiens"} "mouse" {set UCSCGenomeDir($Genome) "/genomics/g3/UCSCGenomes/Mus_musculus"} "mstigr" {set UCSCGenomeDir($Genome) "/genomics/g5/MsTigr/DuTigr"} "default" {return ""} } if {[info exists UCSCGenomeDir($Genome)] && [file exists [set UCSCGenomeDir($Genome)]]} {return [set UCSCGenomeDir($Genome)]} return "" } proc UNRREAL {fileIn fileOut hs1 type hs2 nbmistakes1 nbmistakes2 chr {includeRepeats no}} { # Recherche un motif en générant un mismatch (adapté récepteurs nucléaires) set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Start" if {$includeRepeats == "no"} { set casse "" } else { set casse "-nocase" } set ChromoSize [ChromoSize "human" "hg18" "chr$chr"] set FichierOut [open "$fileOut" "w"] set FichierRepeats [open "$fileOut.rep" "w"] set FichierDesDR "RGKTSA-$type.txt" regsub -all -nocase {[A-z]} $type "" type set hs1length [string length $hs1] set hs2length [string length $hs2] set reverseHs1 [IUPACtoReverseAndComplementIUPAC $hs1] set reverseHs2 [IUPACtoReverseAndComplementIUPAC $hs2] set pseudoRegExp1 [IUPACtoRegExp $hs1] set pseudoRegExp2 [IUPACtoRegExp $hs2] set pseudoRegExp1R [IUPACtoRegExp $reverseHs1] set pseudoRegExp2R [IUPACtoRegExp $reverseHs2] set matchArray {} set AllMatchesArray {} set oneMatch {} set regExpMistakeParam1 {} set regExpMistakeParam2 {} regsub -all {\_} $pseudoRegExp1 "" regExp1 regsub -all {\_} $pseudoRegExp2R "" regExp2R if {$nbmistakes1 == 1} { for {set i 0} {$i < $hs1length} {incr i} { unset regExpMistakeParam1 set regExpMistakeParam1 $i set regExp1Add [regExpMistake $pseudoRegExp1 $regExpMistakeParam1] set regExp2AddR [regExpMistake $pseudoRegExp2R $regExpMistakeParam1] set regExp1 "$regExp1|$regExp1Add" set regExp2R "$regExp2R|$regExp2AddR" } } if {$nbmistakes1 == 2} { for {set i 0} {$i < $hs1length} {incr i} { for {set l 0} {$l < $hs1length} {incr l} { if { $l <= $i } { unset regExpMistakeParam1 set regExpMistakeParam1 "$i $l" set regExp1Add [regExpMistake $pseudoRegExp1 $regExpMistakeParam1] set regExp2AddR [regExpMistake $pseudoRegExp2R $regExpMistakeParam1] set regExp1 "$regExp1|$regExp1Add" set regExp2R "$regExp2R|$regExp2AddR" } } } } regsub -all {\_} $pseudoRegExp2 "" regExp2 regsub -all {\_} $pseudoRegExp1R "" regExp1R if {$nbmistakes2 == 1} { for {set j 0} {$j < $hs2length} {incr j} { unset regExpMistakeParam2 set regExpMistakeParam2 $j set regExp2Add [regExpMistake $pseudoRegExp2 $regExpMistakeParam2] set regExp1AddR [regExpMistake $pseudoRegExp1R $regExpMistakeParam2] set regExp2 "$regExp2|$regExp2Add" set regExp1R "$regExp1R|$regExp1AddR" } } if {$nbmistakes2 == 2} { for {set j 0} {$j < $hs2length} {incr j} { for {set k 0} {$k < $hs2length} {incr k} { unset regExpMistakeParam2 set regExpMistakeParam2 "$j $k" set regExp2Add [regExpMistake $pseudoRegExp2 $regExpMistakeParam2] set regExp1AddR [regExpMistake $pseudoRegExp1R $regExpMistakeParam2] set regExp2 "$regExp2|$regExp2Add" set regExp1R "$regExp1R|$regExp1AddR" } } } set regExp "($regExp1)" append regExp {[ATCGatcgN]} append regExp "{$type}" append regExp "($regExp2)" set regExpR "($regExp2R)" append regExpR {[ATCGatcgN]} append regExpR "{$type}" append regExpR "($regExp1R)" set len [expr $hs1length + $hs2length + $type] set sequenceNumber 0 set totalHits 0 set totalMatches {} set nbMatchs 0 array unset SeqTFA set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Loading sequences" array set SeqTFA [readFasta $fileIn 0] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] foreach Acc $SeqTFA(index) { set sequence $SeqTFA($Acc,sequence); set listeDesStarts {} set indo -1 set sequenceHitNumber 0 incr sequenceNumber set AllMatchesArray {} set matches {} set sequenceLength [string length $sequence] set oneMatch {} puts -nonewline "$timestamp|UNRREAL chr$chr/DR$type : Scanning Plus strand " set startOffset 0 set Hit 0 while { [eval regexp $casse -indices -start {$startOffset} {$regExp} {$sequence} Position] } { incr Hit incr HitPlus set PositionStart [lindex $Position 0] set PositionEnd [lindex $Position 1] set matchSequence [string range $sequence $PositionStart $PositionEnd] lappend AllMatchesArray [list $matchSequence $PositionStart $PositionEnd "F"] set startOffset [expr $PositionStart +1] } puts "(Hits : $HitPlus)" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts -nonewline "$timestamp|UNRREAL chr$chr/DR$type : Scanning Minus strand " set startOffset 0 flush stdout while { [eval regexp $casse -indices -start {$startOffset} {$regExpR} {$sequence} Position] } { incr Hit incr HitMoins set PositionStart [lindex $Position 0] set PositionEnd [lindex $Position 1] set matchSequence [string range $sequence $PositionStart $PositionEnd] lappend AllMatchesArray [list $matchSequence $PositionStart $PositionEnd "R"] set startOffset [expr $PositionStart + 1] } puts "(Hits : $HitMoins)" set numou 0 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Parsing $Hit merged results" foreach Match $AllMatchesArray { incr nbMatchs set sequenceHitNumber [llength $AllMatchesArray] set hs1MistakeArray {} set hs2MistakeArray {} set hs1Mistake 0 set hs2Mistake 0 set matchSequence [lindex $Match 0] set matchStart [lindex $Match 1] set matchEnd [lindex $Match 2] set matchType [lindex $Match 3] if {$matchType == "F"} { set hs1Sequence [string range $matchSequence 0 [expr $hs1length - 1] ] set hs2Sequence [string range $matchSequence [expr $hs1length + $type] [expr $hs1length + $type + $hs2length]] set linkerStart $hs1length set linkerStop [expr $hs1length + $type - 1] set linker [string range $matchSequence $linkerStart $linkerStop ] set hs1MistakeArray [IUPACcheck $hs1 $hs1Sequence] set hs2MistakeArray [IUPACcheck $hs2 $hs2Sequence] } else { set hs1Sequence [string range $matchSequence [expr $hs2length + $type] [expr $hs2length + $type + $hs1length]] set hs2Sequence [string range $matchSequence 0 [expr $hs1length - 1]] set linkerStart $hs2length set linkerStop [expr $hs2length + $type - 1] set linker [string range $matchSequence $linkerStart $linkerStop] set hs1MistakeArray [IUPACcheck $reverseHs1 $hs1Sequence] set hs2MistakeArray [IUPACcheck $reverseHs2 $hs2Sequence] #Espionne "$matchSequence $hs2Sequence $linker $hs1Sequence $reverseHs1" } set matchStart [expr $matchStart + 1] set matchEnd [expr $matchEnd + 1] set hs1Mistake [llength $hs1MistakeArray] set hs2Mistake [llength $hs2MistakeArray] set hs1SequenceArray [split $hs1Sequence ""] set hs2SequenceArray [split $hs2Sequence ""] set mm1 "" set mm2 "" set mm1Array {} set mm2Array {} if {$matchType == "R"} { foreach mm1 $hs1MistakeArray { set mm1 [expr 7 - $mm1] lappend mm1Array $mm1 } foreach mm2 $hs2MistakeArray { set mm2 [expr 7 - $mm2] lappend mm2Array $mm2 } } else { foreach mm1 $hs1MistakeArray { lappend mm1Array $mm1 } foreach mm2 $hs2MistakeArray { lappend mm2Array $mm2 } } lsort $mm1Array lsort $mm2Array set themistakes1 "" foreach mis1 $mm1Array { append themistakes1 "/$mis1" } set themistakes2 "" foreach mis2 $mm2Array { append themistakes2 "/$mis2" } set start 0 set acc "" incr indice; set matchEnd [expr $matchStart + $hs1length + $hs2length + $type - 1] if {[regexp {a|t|c|g} $matchSequence]} { if {$includeRepeats == "yes"} { puts $FichierRepeats "$nbMatchs $sequenceNumber $chr $matchStart $matchEnd $matchType $hs1Mistake@$themistakes1 $hs2Mistake@$themistakes2 $matchSequence" incr totalHits } } else { puts $FichierOut "$nbMatchs $sequenceNumber $chr $matchStart $matchEnd $matchType $hs1Mistake@$themistakes1 $hs2Mistake@$themistakes2 $matchSequence" incr totalHits } set verif "true" incr numou } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : End ($totalHits hits)" close $FichierOut } proc UNRREALc {chrom type} { set fileIn "/genomics/link/UCSCGenomes/Homo_sapiens/bigZips200603/chr$chrom.fa" set fileOut "/genomics/link/RGKTSA/Coordonnees/chr$chrom-$type.coord" set hs1 "RGKTSA" set hs2 "RGKTSA" set nbmistakes1 2 set nbmistakes2 2 UNRREAL $fileIn $fileOut $hs1 $type $hs2 $nbmistakes1 $nbmistakes2 $chrom } proc UNRREALold {chr DR} { # Recherche un motif en générant un mismatch (adapté récepteurs nucléaires) set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Start" set Chromosome "/genomics/link/UCSCGenomes/Homo_sapiens/bigZips200603/chr$chr.fa" set FichierDesDR1 "RGKTSA-Chr$chr-DR1.txt" if { [file exists $FichierDesDR1] } { file delete $FichierDesDR1 } if { [file exists $FichierDesDR2] } { file delete $FichierDesDR2 } if { [file exists $FichierDesDR3] } { file delete $FichierDesDR3 } if { [file exists $FichierDesDR4] } { file delete $FichierDesDR4 } if { [file exists $FichierDesDR5] } { file delete $FichierDesDR5 } if { [file exists $FichierDesDR6] } { file delete $FichierDesDR6 } set DR1 0 set DR2 0 set DR3 0 set DR4 0 set DR5 0 set DR6 0 array unset SeqTFA array set SeqTFA [readFasta $Chromosome 0] set Acc [lindex $SeqTFA(index) 0] set RegExp {[AG]G[TG]T[CG]A} append RegExp {|[CT]G[TG]T[CG]A} append RegExp {|[AG][ATC][TG]T[CG]A} append RegExp {|[AG]G[AC]T[CG]A} append RegExp {|[AG]G[TG][ACG][CG]A} append RegExp {|[AG]G[TG]T[AT]A} append RegExp {|[AG]G[TG]T[CG][TCG]} set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Scanning plus strand" set ListeDesPositionsPlus [regexp -indices -all -inline -nocase "$RegExp" $SeqTFA($Acc,sequence)] set RegExp {T[GC]A[CA]C[TC]} append RegExp {|[ACG][GC]A[CA]C[TC]} append RegExp {|T[AT]A[CA]C[TC]} append RegExp {|T[GC][CGT][CA]C[TC]} append RegExp {|T[GC]A[GC]C[TC]} append RegExp {|T[GC]A[CA][GAT][TC]} append RegExp {|T[GC]A[CA]C[AG]} set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Scanning minus strand" set ListeDesPositionsMoins [regexp -indices -all -inline -nocase "$RegExp" $SeqTFA($Acc,sequence)] set Start 0 set End 0 set DR1f [open $FichierDesDR1 "w"] set DR2f [open $FichierDesDR2 "w"] set DR3f [open $FichierDesDR3 "w"] set DR4f [open $FichierDesDR4 "w"] set DR5f [open $FichierDesDR5 "w"] set DR6f [open $FichierDesDR6 "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Parsing plus strand" foreach PaireDeBornes $ListeDesPositionsPlus { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] if { [expr $NewStart - $End] == 2 } { incr DR1 puts $DR1f " DR1 $DR1 chr$chr $Start $NewEnd +" } if { [expr $NewStart - $End] == 3 } { incr DR2 puts $DR2f "DR2 $DR2 chr$chr $Start $NewEnd +" } if { [expr $NewStart - $End] == 4 } { incr DR3 puts $DR3f "DR3 $DR3 chr$chr $Start $NewEnd +" } if { [expr $NewStart - $End] == 5 } { incr DR4 puts $DR4f "DR4 $DR4 chr$chr $Start $NewEnd +" } if { [expr $NewStart - $End] == 6 } { incr DR5 puts $DR5f "DR5 $DR5 chr$chr $Start $NewEnd +" } if { [expr $NewStart - $End] == 7 } { incr DR6 puts $DR6f "DR6 $DR6 chr$chr $Start $NewEnd +" } set Start $NewStart set End $NewEnd } set Start 0 set End 0 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : Parsing minus strand" foreach PaireDeBornes $ListeDesPositionsMoins { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] if { [expr $NewStart - $End] == 2 } { incr DR1 puts $DR1f "DR1 $DR1 chr$chr $Start $NewEnd -" } if { [expr $NewStart - $End] == 3 } { incr DR2 puts $DR2f "DR2 $DR2 chr$chr $Start $NewEnd -" } if { [expr $NewStart - $End] == 4 } { incr DR3 puts $DR3f "DR3 $DR3 chr$chr $Start $NewEnd -" } if { [expr $NewStart - $End] == 5 } { incr DR4 puts $DR4f "DR4 $DR4 chr$chr $Start $NewEnd -" } if { [expr $NewStart - $End] == 6 } { incr DR5 puts $DR5f "DR5 $DR5 chr$chr $Start $NewEnd -" } if { [expr $NewStart - $End] == 7 } { incr DR6 puts $DR6f "DR6 $DR6 chr$chr $Start $NewEnd -" } set Start $NewStart set End $NewEnd } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UNRREAL chr$chr/DR$type : End" close $DR1f close $DR2f close $DR3f close $DR4f close $DR5f close $DR6f } proc UT {X} { global UT if {[string length $X]==1} { set X [string toupper $X] } else { set X [string tolower $X] } if {$X=="ace"} { return "" } if { ! [info exists UT]} { set UT(ala) A set UT(glu) E set UT(gln) Q set UT(trp) W set UT(phe) F set UT(pha) F set UT(phb) f set UT(tyr) Y set UT(cys) C set UT(met) M set UT(ser) S set UT(lys) K set UT(ly1) k set UT(leu) L set UT(val) V set UT(ile) I set UT(asp) D set UT(thr) T set UT(his) H set UT(arg) R set UT(pro) P set UT(gly) G set UT(gla) J set UT(glb) j set UT(asn) N foreach {Y ValUT} [array get UT] { set UT($ValUT) $Y } set UT(csy) C set UT(asi) [set UT(asn)] set UT(aya) [set UT(ala)] set UT(cea) [set UT(cys)] set UT(cme) [set UT(cys)] set UT(cro) [set UT(ser)] set UT(csd) [set UT(cys)] set UT(css) [set UT(cys)] set UT(csw) [set UT(cys)] set UT(cxm) [set UT(met)] set UT(glh) [set UT(glu)] set UT(hic) [set UT(his)] set UT(hph) [set UT(phe)] set UT(kcx) [set UT(lys)] set UT(mho) [set UT(met)] set UT(mse) [set UT(met)] set UT(mso) [set UT(met)] set UT(nep) [set UT(his)] set UT(oas) [set UT(ser)] set UT(omt) [set UT(met)] set UT(pca) [set UT(gln)] set UT(sac) [set UT(ser)] set UT(tpo) [set UT(thr)] } if {[info exists UT($X)]} { return [set UT($X)] } if {[string length $X]==1} { return XXX } if {[string length $X]==3} { return x } return $X } proc UTRsansCDS {Organisme database} { set FichierDesRequetes [open "/genomics/link/STAF/fiches/Requetes-MNCEKiller.sql" "w"] set FichierDesResultats "/genomics/link/STAF/fiches/Resultats-MNCEKiller.result" puts $FichierDesRequetes "ID * DB UCSC" puts $FichierDesRequetes "WH SQLNATIVE select ExonCount, ExonStarts, ExonEnds, CdsStart, CdsEnd, Strand from ucsc$Organisme.$database where ExonCount >=1" puts $FichierDesRequetes "FM FLAT" puts $FichierDesRequetes "//" close $FichierDesRequetes set Tada [BirdFetch "/genomics/link/STAF/fiches/Requetes-MNCEKiller.sql" "$FichierDesResultats"] set FichierDesResultats [open "/genomics/link/STAF/fiches/Resultats-MNCEKiller.result" "r"] set I 0 set J 0 while { [gets $FichierDesResultats LigneResultat] >=0 } { if { [string range $LigneResultat 0 4] !="Query" } { ScanLaListe $LigneResultat ExonCount ExonStarts ExonEnds CdsStart CdsEnd Strand if { $Strand == "+" } { if { $ExonCount == 1 } { set DernierExonEnd [lindex [split $ExonEnds ","] [expr $ExonCount - 1]] } else { set DernierExonEnd [lindex [split $ExonEnds ","] [expr $ExonCount - 1]] } if { $CdsStart > $DernierExonEnd } { incr I } } if { $Strand == "-" } { set DernierExonEnd [lindex [split $ExonStarts ","] 0] if { $CdsEnd < $DernierExonEnd } { incr J } } } } Espionne "Resultat $I et $J" } proc UbiquitinProtHumanToMouse {} { set File "/genomics/link/FLD/Input/Ubiquitin-related_proteins.csv" set OnAttend 1 set total 0; set SsMgiId 0; set ParSwAcString 0; set ParSwSsString 0; set ParSwTrAcString 0; set ParSwTrSsString 0; set SsSw 0; set ParTrAcString 0; set ParTrSsString 0; set SsSwEtTr 0 set TousLesIdString {} foreach Line [LesLignesDuFichier $File] { Espionne "" if {$OnAttend} { set OnAttend 0; continue } incr total set HumanGeneId [lindex [split $Line ";"] 0] set HumanGeneId [string trim $HumanGeneId] set MgiId [MGIHGNC $HumanGeneId MgiId] Espionne "$HumanGeneId $MgiId" if {$MgiId==""} { incr SsMgiId Espionne "SsMgiId $SsMgiId" set NewLine "$Line" lappend LesNewLines $NewLine continue } set onaSw 0; set onaTrEMBL 0 set LesSw [MGISW $MgiId Sw "/genomics/link/UCSCGenomes/GeneNaming/MRK_SwissProt.rpt"] set LesSwTrEMBL [MGISW $MgiId Sw "/genomics/link/UCSCGenomes/GeneNaming/MRK_SwissProt_TrEMBL.rpt"] if {$LesSw!=""} { set onaSw 1 } if {$LesSwTrEMBL!=""} { set onaTrEMBL 1 } set LesSwFin {}; set LesIdString {} if {$onaSw} { Espionne "AcSw: $LesSw" foreach Sw [split $LesSw " "] { set IdString [ProtIDStringFromGn $Sw "10090"] Espionne "$Sw $IdString" if {$IdString!=""} {lappend LesIdString $IdString} } if {$LesIdString!={}} { incr ParSwAcString set LesIdString [lsort -unique $LesIdString] LConcat LesSwFin $LesSw # if {[llength $LesIdString]>1} { FaireLire "contradiction" } } else { incr ParSwSsString if {$onaTrEMBL} { Espionne "LesSwTrEMBL: $LesSwTrEMBL" foreach Tr [split $LesSwTrEMBL " "] { set IdString [ProtIDStringFromGn $Tr "10090"] Espionne "$Tr $IdString" if {$IdString!=""} {lappend LesIdString $IdString} } LConcat LesSwFin $LesSw LConcat LesSwFin $LesSwTrEMBL if {$LesIdString!={}} { incr ParSwTrAcString set LesIdString [lsort -unique $LesIdString] # if {[llength $LesIdString]>1} { FaireLire "contradiction" } } else { incr ParSwTrSsString } } } } else { incr SsSw Espionne "SsSw $SsSw" if {$onaTrEMBL} { Espionne "LesSwTrEMBL: $LesSwTrEMBL" foreach Tr [split $LesSwTrEMBL " "] { set IdString [ProtIDStringFromGn $Tr "10090"] Espionne "$Tr $IdString" if {$IdString!=""} {lappend LesIdString $IdString} } LConcat LesSwFin $LesSwTrEMBL if {$LesIdString!={}} { incr ParTrAcString set LesIdString [lsort -unique $LesIdString] # if {[llength $LesIdString]>1} { FaireLire "contradiction" } } else { incr ParTrSsString } } else { incr SsSwEtTr } } Espionne "Final $LesIdString" Espionne "LesSwFin $LesSwFin" set SwFin [join $LesSwFin "|"] if {$LesIdString!={}} { LConcat TousLesIdString $LesIdString set IdString [join $LesIdString "|"] } else { set IdString "" } set NewLine "$Line;$MgiId;$SwFin;$IdString" Espionne "NewLine $NewLine" lappend LesNewLines $NewLine } SauveLesLignes $LesNewLines dans "/genomics/link/FLD/Input/Ubiquitin-related_proteinsWithMouseId.csv" SauveLesLignes $TousLesIdString dans "/genomics/link/FLD/Input/UbiquitinMouseStringId" Espionne "total $total" Espionne "SsMgiId $SsMgiId" Espionne "SsSw $SsSw" Espionne "SsSwEtTr $SsSwEtTr" Espionne "ParSwAcString $ParSwAcString " Espionne "ParSwSsString $ParSwSsString" Espionne "ParSwTrAcString $ParSwTrAcString" Espionne "ParSwTrSsString $ParSwTrSsString" Espionne "ParTrAcString $ParTrAcString" Espionne "ParTrSsString $ParTrSsString" set SsIdString [expr $SsMgiId + $SsSwEtTr + $ParSwTrSsString + $ParTrSsString] Espionne "SsIdString $SsIdString" } proc UcscAssemblyNameOf {Espece} { set ValueofCol "Uu" if {[regexp -nocase "^Mus" $Espece]} {set ValueofCol "mm"} if {[regexp -nocase "^Rattus" $Espece]} {set ValueofCol "rn"} if {[regexp -nocase "^Homo" $Espece]} {set ValueofCol "hg"} if {[regexp -nocase "^Brachidanio" $Espece]} {set ValueofCol "danRer"} if {[regexp -nocase "^Danio" $Espece]} {set ValueofCol "danRer"} if {[regexp -nocase "^Drosophila" $Espece]} {set ValueofCol "dm"} if {[regexp -nocase "^Gallus" $Espece]} {set ValueofCol "galGal"} if {[regexp -nocase "^Caenorhabditis" $Espece]} {set ValueofCol "ce"} if {[regexp -nocase "^Xenopus" $Espece]} {set ValueofCol "xl"} if {$Espece=="mm"} {set ValueofCol "Mus musculus"} if {$Espece=="rn"} {set ValueofCol "Rattus norvegicus"} if {$Espece=="hg"} {set ValueofCol "Homo sapiens"} if {$Espece=="hs"} {set ValueofCol "Homo sapiens"} if {$Espece=="dr"} {set ValueofCol "Danio rerio"} if {$Espece=="dm"} {set ValueofCol "Drosophila melanogaster"} if {$Espece=="gg"} {set ValueofCol "Gallus gallus"} if {$Espece=="ce"} {set ValueofCol "Caenorhabditis elegans"} if {$Espece=="xl"} {set ValueofCol "Xenopus laevis"} return $ValueofCol } proc UltraMiner {LongueurDesMots {ASortir ""} {monofasta yes} {combinations no} {MaxSpacer 0} {framed no} {masked yes} {typeSequence genome}} { #Lance XignalMiner en mode genome sur tous les chromosomes , parse les resultats et upload dans mysql foreach I { 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 "X" "Y"} { Espionne "" set FichierFasta "/genomics/link/UCSCGenomes/Homo_sapiens/bigZips200603/chr$I.fa" set indiceFichier "$I" XignalMiner $FichierFasta $indiceFichier $LongueurDesMots $ASortir $monofasta $combinations $MaxSpacer $framed $masked $typeSequence } XignalParser $LongueurDesMots "yes" } proc UnCanva {{LargeurMaxi ""} {HauteurMaxi ""} {LargeurVoulue ""} {HauteurVoulue ""} {GonfleAussiY ""} {Titre ""} {AvecMainLevee ""}} { if {$LargeurVoulue==""} { set LargeurVoulue 512 } if {$HauteurVoulue==""} { set HauteurVoulue [expr ($LargeurVoulue*3)/4] } if {$LargeurMaxi==""} { set LargeurMaxi 512 } if {$HauteurMaxi==""} { set HauteurMaxi [expr ($LargeurMaxi*3)/4] } if {$GonfleAussiY==""} { set GonfleAussiY "GonfleAussiY" } global ScrollRectangleOriginal IdScrollRectangle global CouleurDuFondDeUnCanva if { ! [info exists CouleurDuFondDeUnCanva]} { set CouleurDuFondDeUnCanva "white" } if {[regexp "MainLevee" $AvecMainLevee]} { set AvecMainLevee 1 } else { set AvecMainLevee 0 } if {$GonfleAussiY=="NoY"} { set GonfleY 1.0 set DegonfleY 1.0 } else { set GonfleY "gonfle" set DegonfleY "degonfle" } set w [NomDe canva] if {$Titre==""} { set Titre $w } catch {destroy $w} toplevel $w wm title $w $Titre wm iconname $w $Titre set CanvaScroMinX 0 set CanvaScroMinY 0 set CanvaScroMaxX $LargeurMaxi set CanvaScroMaxY $HauteurMaxi set K $w.canvas set ScroHor $w.hscroll set ScroVer $w.vscroll set KShSv $w.grid set Boutons $w.buttons frame $Boutons pack $Boutons -side bottom -fill x -pady 2m button $Boutons.dismiss -text "Dismiss" -background "red" -command "destroy $w" bind $Boutons.dismiss "MainLeveeSurUnCanva $K" bind $Boutons.dismiss "FaireLire \[$KShSv configure\]" pack $Boutons.dismiss -side left -expand 1 button $Boutons.postscript -text "Zoom/UnZoom/Reset\nPNG/Postscript/Print\nFull PNG/Postscript/Print" -background "yellow" if { ! [string equal -nocase "NoZoom" $GonfleAussiY]} { bind $Boutons.postscript <1> "Gonfle $w all gonfle $GonfleY" bind $Boutons.postscript <2> "Gonfle $w all degonfle $DegonfleY" bind $Boutons.postscript <3> "Gonfle $w all reset reset" } bind $Boutons.postscript "CanvaEnPNG $K Visible" bind $Boutons.postscript "CanvaEnPostscript $K Visible AskForFile" bind $Boutons.postscript "CanvaEnImpression $K Visible" bind $Boutons.postscript "CanvaEnPNG $K OnVeutTout" bind $Boutons.postscript "CanvaEnPostscript $K OnVeutTout AskForFile" bind $Boutons.postscript "CanvaEnImpression $K OnVeutTout" pack $Boutons.postscript -side left -expand 1 button $Boutons.jpg -text "Create Jpg file" -background "yellow" bind $Boutons.jpg <1> "CanvaEnJpg $K \[FichierPourSaveAs\]" pack $Boutons.jpg -side left -expand 1 frame $KShSv scrollbar $ScroHor -orient horiz -command "$K xview" scrollbar $ScroVer -command "$K yview" canvas $K -width $LargeurVoulue -height $HauteurVoulue $K configure -scrollregion [list $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY] -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" -background $CouleurDuFondDeUnCanva set IdScrollRectangle($K) [$K create rect $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY -tags [list "Cadre"] -outline $CouleurDuFondDeUnCanva] set ScrollRectangleOriginal($K) "[$K coords [set IdScrollRectangle($K)]]" grid rowconfig $KShSv 0 -weight 1 -minsize 0 grid columnconfig $KShSv 0 -weight 1 -minsize 0 grid $K -in $KShSv -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $ScroVer -in $KShSv -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $ScroHor -in $KShSv -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew pack $KShSv -expand yes -fill both -padx 1 -pady 1 if {$AvecMainLevee} { MainLeveeSurUnCanva $K } return $K } proc UnCanvaDe {LargeurMaxi HauteurMaxi {LargeurVoulue 768} {HauteurVoulue 512} {Titre ""} {AvecMainLevee ""}} { Wup "Permet de cree une fenetre composee de 1 canvas, de une frame avec des boutons ..." set CouleurDuFondDeUnCanva "white" if {[regexp "MainLevee" $AvecMainLevee]} {set AvecMainLevee 1} else {set AvecMainLevee 0} set w [NomDe canva] if {$Titre==""} {set Titre $w} catch {destroy $w} toplevel $w wm title $w $Titre wm iconname $w $Titre set CanvaScroMinX 0 set CanvaScroMinY 0 set CanvaScroMaxX $LargeurMaxi set CanvaScroMaxY $HauteurMaxi set K $w.canvas set ScroHor $w.hscroll set ScroVer $w.vscroll set KShSv $w.grid set Boutons $w.buttons frame $Boutons pack $Boutons -side bottom -fill x -pady 2m button $Boutons.dismiss -text "Dismiss" -background "red" -command "eval \[wm protocol $w WM_DELETE_WINDOW\]" -padx 3 bind $Boutons.dismiss "MainLeveeSurUnCanva $K" pack $Boutons.dismiss -side left -expand 1 button $Boutons.zoom -text "Zoom In / Out\nZoom x In / Out\nZoom Reset all" -background "yellow" -padx 3 bind $Boutons.zoom <1> "zoom $K 1.25 1.25" bind $Boutons.zoom <2> "zoom $K 0.8 0.8" bind $Boutons.zoom "zoom $K 1.25 1.0" bind $Boutons.zoom "zoom $K 0.8 1.0" bind $Boutons.zoom "ResetZoom $K" #bind $Boutons.zoom "zoom $K 1.0 1.25" #bind $Boutons.zoom "zoom $K 1.0 0.8" pack $Boutons.zoom -side left -expand 1 frame $KShSv scrollbar $ScroHor -orient horiz -command "$K xview" scrollbar $ScroVer -command "$K yview" canvas $K -width $LargeurVoulue -height $HauteurVoulue $K configure -scrollregion [list $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY] -xscrollcommand "$ScroHor set" -yscrollcommand "$ScroVer set" grid rowconfig $KShSv 0 -weight 1 -minsize 0 grid columnconfig $KShSv 0 -weight 1 -minsize 0 grid $K -in $KShSv -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $ScroVer -in $KShSv -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $ScroHor -in $KShSv -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew pack $KShSv -expand yes -fill both -padx 1 -pady 1 if {$AvecMainLevee} {MainLeveeSurUnCanva $K} wm protocol $w WM_DELETE_WINDOW "after 10 destroy $w" return $K } proc UnOligoDePlusPour {P TFA} { set FiSeqOl [FiSeqOl $P] set Rep [file dirname $FiSeqOl] if { ! [file exists $Rep]} { file mkdir $Rep } if { ! [file exists $FiSeqOl]} { return [Sauve $TFA dans $FiSeqOl] } set LL [LesLignesDuFichier $FiSeqOl] set OldEntete [lindex $LL 0] set OldSeq [join [lrange $LL 1 end] ""] set OldPSig [join [lrange [split $OldEntete " "] 0 6] " "] set AA [split $TFA "\n"] set NewEntete [lindex $AA 0] set NewSeq [join [lrange $AA 1 end] ""] set NewPSig [join [lrange [split $NewEntete " "] 0 6] " "] if { ! [string equal -nocase $OldSeq $NewSeq]} { FaireLire "Different oligo sequences for $P\n$OldSeq\n$NewSeq\n I'll keep the first one." } if { ! [string equal -nocase $OldPSig $NewPSig]} { FaireLire "Different oligo signal header for $P\n$OldPSig\n$NewPSig\n I'll keep the first one." } set NouvelleEntete "$OldEntete [lindex [split $NewEntete " "] end]" set NewLL [lreplace $LL 0 0 $NouvelleEntete] return [SauveLesLignes $NewLL dans $FiSeqOl] } proc UnOligoPourExcel_GUI {K PAB} { Wup "Permet de sauver les oligos selectionnes dans le format excel" Wup "Rq les oligos sont ceux choisis dans l interface et pour le seul PAB affiche" #Choix du fichier de sauvegarde while {1} { set Texte "Choose a file name to save your selection" FaireLire "$Texte" set FichierSave [tk_getSaveFile -title "Choose a file name to save" -initialdir "[RepertoireDuGenome]"] if {$FichierSave == ""} { if {! [OuiOuNon "Would you like to continue ?"]} {return ""} } else { break } } #Choix des Oligos a sauver set Answer "" set LesNomsOligos "" while {1} { set Texte "Please choose with Control+1 the oligo(s) to save under file:" set Answer [FaireSavoir $Texte "Saving File - Waiting your selection."] set LesNomsOligos [LesOligosSelectionnes $K LesIds] if {$LesNomsOligos==""} { if {! [OuiOuNon "No Oligo selected !\nWould you like to retry ?"]} {break} else {continue} } else {break} } if {[OuiOuNon "Would you like to save the header one time in your file ?"]} { set AvecEntete "AvecEntete" } else {set AvecEntete "SansEntete"} set Dir "" set Dir2 "" set FirstTime 0 foreach Id $LesNomsOligos { set MesTags [$K gettags $Id] set NomOligo [lindex $MesTags 4] set Dir [lindex $MesTags 5] set Dir2 "" set Fichier "$Dir/${PAB}.oligo" if { ! [file exists $Fichier]} { set Fichier "$Dir/$PAB" if {! [file exists $Fichier]} {return ""} } #Deuxieme resultat de design si il y a eu une selection croisee if {[file exists "$Dir/$PAB.croisee"]} { if {[info exists TabDirCroiseeDe($Dir)]} { set Question "You previously defined a crossed directory for $Dir\n Should I always use it ?" if {[OuiOuNonMemo $Question]} { set Dir2 [set TabDirCroiseeDe($Dir)] } else { set Dir2 "" unset TabDirCroiseeDe($Dir) } } set Essai "[lindex [LesInfosDe $K MesDirs] end]" if {$Dir2==""} { while {1} { set Texte "Some crossed results exists for your sequence between \nthis design ($Dir) and another ! \nCould you give me the other directory containing these results ?" if {[OuiOuNon "$Texte"]} { while {1} { if {$Essai!="" && [OuiOuNon "Shall we use $Essai ?"]} { set Dir2 "$Essai" } else { set T "Choose the other directory" set Dir2 [tk_chooseDirectory -title $T -initialdir "[RepertoireDuGenome]"] } if {$Dir2 == ""} { if {! [OuiOuNon "Would you like to reselect ?"]} {continue} } break } break } else {break} } } } if {! [info exists TabDirCroiseeDe($Dir)] && $Dir2!=""} {set TabDirCroiseeDe($Dir) $Dir2} set D [InterrogeInfoDeLOligo $Fichier $NomOligo Debut] set F [InterrogeInfoDeLOligo $Fichier $NomOligo Fin] incr FirstTime if {$FirstTime!="1"} {set AvecEntete "SansEntete"} LesOligosPourExcel $PAB $Dir $Dir2 "$D $F" $FichierSave $AvecEntete } if {[info exists TabDirCroiseeDe]} {unset TabDirCroiseeDe} OuiOuNonMemo UnsetAllPlease return "" } 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 UnSeulGetz {Texte} { set Prem [string first "\n//" $Texte] set Dern [string last "\n//" $Texte] if {$Prem==$Dern} { return $Texte } set AvDe [string last "\n//" $Texte [incr Dern -3]] return "[string range $Texte [incr AvDe 3] end]" } proc UnSubjectDuBlast {FichierBlast BanqueId Access} { if {![file exists $FichierBlast]} { Espionne "$FichierBlast does not exist" return "" } set Query "$BanqueId | $Access" set Subject "" set SuisJeSurMonSubject 0 set F [open $FichierBlast] while {[gets $F Ligne]>=0} { if {$Subject != "" && !$SuisJeSurMonSubject} {break} if {[regexp "^>\[0-9]" $Ligne]} {continue} if {![regexp -nocase {[a-z]} $Ligne ]} {continue} while {[regexp " " $Ligne]} {regsub " " $Ligne " " Ligne} while {[regexp "^ " $Ligne]} {regsub "^ " $Ligne "" Ligne} if {[regexp "^>" $Ligne] && [regexp -nocase "$Query" $Ligne]} { set SuisJeSurMonSubject 1 regsub "\n" $Ligne "" Ligne append Subject $Ligne } if {[regexp -nocase "Query: " $Ligne]} { set SuisJeSurMonSubject 0 } if {![regexp "^>" $Ligne] && $SuisJeSurMonSubject } { regsub "\n" $Ligne "" Ligne append Subject " $Ligne" } } close $F set Subject [string trim $Subject] while {[regexp " " $Subject]} {regsub -all " " $Subject " " Subject} return $Subject } proc UnderLine_WordML {} { return "" } proc UneCouleurPourMainLevee {{CouleurParDefaut ""}} { global CouleurDuFond global LesCouleursPourMainLevee set CouleurParDefautParDefaut "grey" if { ! [info exists LesCouleursPourMainLevee]} { if {[info exists CouleurDuFond]} { set CdF $CouleurDuFond } else { set CdF "white" } set LesCouleursPourMainLevee [list "black" "grey" "white" "blue" "lightblue" "yellow" "green" "orange" "red" "purple" $CdF "-Transparent-" "-NewColor-" "-Default-"] } if {$CouleurParDefaut=="LaListe"} { return $LesCouleursPourMainLevee } if {$CouleurParDefaut==""} { set CouleurParDefaut $CouleurParDefautParDefaut } foreach C $LesCouleursPourMainLevee { if {$C=="-Default-"} { set C $CouleurParDefaut } if {[regexp {^\-} $C]} { set C "grey" } lappend LesCouleursColorees $C } set Couleur [ChoixParmi $LesCouleursPourMainLevee $LesCouleursColorees] if {$Couleur == ""} { return "Cancel" } if {$Couleur == "-Transparent-"} { return "" } if {$Couleur == "-Default-"} { return $CouleurParDefaut } if {$Couleur == "-NewColor-"} { set Couleur [PaletteDeCouleurs] if {$Couleur == ""} { return "" } lappend LesCouleursPourMainLevee $Couleur return $Couleur } return $Couleur } proc UneNouvelleSequencePourGscope {{Nouveau ""} {Maniere ""}} { if {$Maniere==""} { set Maniere "Ask" } if {$Nouveau==""} { # if { ! [OuiOuNon "Do You want to add a new sequence to the GscopeDatabase ?"]} { return "" } FaireLire "Please enter the sequence or its access or its file name ..." } set Seq [SeqIn $Nouveau] set Format [FormatDeLaSequence $Seq] set EMBL "" if {[regexp "embl" $Format]} { set EMBL $Seq if {$Maniere!="Auto"} { AfficheVariable $EMBL "AvecChangeFormat" "Your sequence in EMBL format" } } set TFA [SequenceFormatTFA $Seq "" $Format] if {$Maniere!="Auto"} { while 1 { FaireLire "Please verify (and/or edit) the TFA sequence" set BonTFA [EntreTexte $TFA] if {$BonTFA!=""} { set TFA $BonTFA ; break } if {[OuiOuNon "Do you want to edit it again ?"]} { continue } if { ! [OuiOuNon "Do we cancel ?"]} { return "" } return [UneNouvelleSequencePourGscope $Nouveau] } while {$EMBL!=""} { set SeqTFA [QueLaSequenceDuTexteTFA $TFA] set SeqEMBL [QueLaSequenceDuTexteEMBL $EMBL] if {[string equal -nocase $SeqTFA $SeqEMBL]} { break } if {[OuiOuNon "The original EMBL sequence doesn't correspond to the TFA sequence.\n Do I forget the original EMBL sequence ?"]} { set EMBL "" ; break } if {[OuiOuNon "The original EMBL sequence doesn't correspond to the TFA sequence.\n Do we cancel UneNouvelleSequencePourGscope ?"]} { return "" } } } if {[regexp -nocase "P" [NucOuProt $TFA]]} { set NucOuProt "prot" } else { set NucOuProt "nuc" } set ExisteDeja [EstCeVraimentUneNouvelleSequence $TFA $NucOuProt] set LongS [string length [QueLaSequenceDuTexteTFA $TFA]] if {[regexp -nocase "P" $NucOuProt]} { set LongN [expr $LongS*3] } else { set LongN $LongS } set Dernier [DernierPAB "EnNumero"] regsub -all -nocase {[A-Z_]} $Dernier "" Numero set N [Base10 $Numero] incr N set NouveauNom [format "%s%[FormatDesNumerosPourCollection]" [PreFixe] $N] if {$Maniere!="Auto"} { while 1 { set NouveauNom [format "%s%[FormatDesNumerosPourCollection]" [PreFixe] $N] if {[OuiOuNon "Do I use $NouveauNom ?"]} { break } set NouveauNom [Entre $NouveauNom] if {$NouveauNom!=""} { break } } } set AncienNom [Box $NouveauNom nom] set AncienDeb [Box $NouveauNom debut] set AncienFin [Box $NouveauNom fin] set AncienOri [Box $NouveauNom orient] if {$AncienNom!=""} { set Nom $AncienNom set Debut $AncienDeb set Fin $AncienFin set Orient $AncienOri } else { set DernierPosition [DernierPAB "EnPosition"] set FinActuelle [Box $DernierPosition fin] set Nom $NouveauNom set Debut [expr $FinActuelle +100] set Fin [expr $Debut + $LongN] set Orient "F" } set Borne "$Nom $Debut $Fin $Orient" if {$Maniere!="Auto"} { while { ! [OuiOuNon "Ok to use $Borne ?"]} { set NouvelleBorne [Entre $Borne] if {$NouvelleBorne==""} { continue } set Borne $NouvellesBorne } } scan $Borne "%s %d %d %s" Nom Debut Fin Orient MiseAJourBornesDesPABs $Borne set LesExistants [glob -nocomplain "[RepertoireDuGenome]/*/$Nom"] if {$Maniere!="Auto"} { if {$LesExistants!={}} { FaireLire "Please select the OLD files I have to delete" set LesEffacables [MorceauxChoisis $LesExistants] foreach Effacables $LesEffacables { file delete $Effacables } } } set FichierTFA "[RepertoireDuGenome]/${NucOuProt}tfa/$Nom" if { $Maniere=="Auto" || ! [file exists $FichierTFA] || [OuiOuNon "Ok to overwrite $FichierTFA ?"]} { set Rep "[RepertoireDuGenome]/${NucOuProt}tfa" if { ! [file exists $Rep]} { file mkdir $Rep } Sauve $TFA dans $FichierTFA } if {$EMBL!=""} { set Rep "[RepertoireDuGenome]/${NucOuProt}embl" if { ! [file exists $Rep]} { file mkdir $Rep } set FichierEMBL "$Rep/$Nom" if { $Maniere=="Auto" || ! [file exists $FichierEMBL] || [OuiOuNon "Ok to overwrite $FichierEMBL ?"]} { Sauve $EMBL dans $FichierEMBL } } return "$Nom $Debut $Fin $Orient" } proc UneSequenceDuMSF {FichierMSF NomDeLaSequence {NoGap ""}} { if {[DecortiqueUnMSF $FichierMSF LesNomsDesSequencesDansLOrdre Sequences]==0} { return "" } if { ! [info exists Sequences($NomDeLaSequence)]} { return "" } set Seq $Sequences($NomDeLaSequence) if {[regexp -nocase "NoGap" $NoGap]} { regsub -all {[\.\-]} $Seq "" Seq } return $Seq } proc UneTaillePourMainLevee {{TailleParDefaut ""}} { global LesTaillesPourMainLevee JeMeSignale set TailleParDefautParDefaut 1.1 if { ! [info exists LesTaillesPourMainLevee] } { set LesTaillesPourMainLevee [list 0.1 0.5 0.9 1.0 1.1 2.0 10. -1 "Other" "Default"] } if {$TailleParDefaut=="LaListe"} { return $LesTaillesPourMainLevee } if {$TailleParDefaut==""} { set TailleParDefaut $TailleParDefautParDefaut } set Taille [ChoixParmi $LesTaillesPourMainLevee] if {$Taille == ""} { return "" } if {$Taille == "Default"} { return $TailleParDefaut } if {$Taille == "Other"} { set Taille [Entre $TailleParDefaut] if {$Taille == ""} { return "" } lappend LesTaillesPourMainLevee $Taille return $Taille } return $Taille } proc UniProtProteome {{pref 0}} { # Taxonomy identifier of top node for query, e.g. 2 for Bacteria, 2157 for Archea, etc. # (see http://www.uniprot.org/taxonomy) set top_node 131567 # Toggle this to 1 if you want reference instead of complete proteomes. set reference $pref set proteome [expr {$reference ? "reference:yes" : "complete:yes"}] set keyword [expr {$reference ? "keyword:1185" : "keyword:181"}] # Get a list of all taxons below the top node with a complete/reference proteome. set url "http://www.uniprot.org/taxonomy/?query=ancestor:$top_node+$proteome&format=list" set response_list [split [HttpCopy $url] \n] set Lout [list] foreach id $response_list { if {[string trim $id] ne ""} { lappend Lout $id } } return $Lout } proc UniprotHistory {{Qui ""} {Quoi ""}} { #rR on rend la référence ou l'historique de Id ou Ac #rR uniprot ne rend que le premier si on lui fournit l'id, mais il rend l'historique avec ac if {$Quoi==""} { set Quoi "History" } set Access [string toupper $Qui] set Url "http://www.uniprot.org/uniprot/$Access.txt?version=*" set LesTFAs [LesLignesDuFichier $Url] set IdReference "" set IdHistory {} set AcReference "" set AcHistory {} set IdAcReference "" set HistoryOfId {} set HistoryOfAc {} foreach Ligne $LesTFAs { if {[regexp {ID ([^ ]+)} $Ligne Match IDLu]} { if {$IDLu!=""} { if {$IdReference==""} { set IdReference $IDLu } lappend IdHistory $IDLu lappend HistoryOfId $IDLu } } if {[regexp {AC (.+)} $Ligne Match ACsLus]} { set ACs $ACsLus regsub -all {[ ;]+} $ACs " " ACs set LesACs [split [string trim $ACs] " "] if {$LesACs!={}} { lappend HistoryOfAc $ACsLus if {$AcReference==""} { set AcReference [lindex $LesACs 0] if {$AcReference!=$Qui} { return [UniprotHistory $AcReference $Quoi] } } foreach AC $LesACs { lappend AcHistory $AC } } } } set IdHistory [ListeSansDoublon $IdHistory] set AcHistory [ListeSansDoublon $AcHistory] set IdAcReference "$IdReference $AcReference" if {[regexp -nocase "^IdAcR" $Quoi]} { set Quoi "IdAcReference" } if {[regexp -nocase "^IdR" $Quoi]} { set Quoi "IdReference" } if {[regexp -nocase "^IdH" $Quoi]} { set Quoi "IdHistory" } if {[regexp -nocase "^AcR" $Quoi]} { set Quoi "AcReference" } if {[regexp -nocase "^AcH" $Quoi]} { set Quoi "AcHistory" } if {[info exists $Quoi]} { return [set $Quoi] } if {[regexp -nocase "^H" $Quoi]} { set LeHis {} foreach A $HistoryOfAc I $HistoryOfId { lappend LeHis "$I\t$A" } set LeHis [ListeSansDoublon $LeHis] return $LeHis } return "" } proc UniprotToCoord {Rep} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Start" set FichierIn [open "$Rep/EpouvanBlastEnriched.csv" "r"] set FichierOut [open "$Rep/ProtaccToCoord.csv" "w"] set FichierDesRequetes [open "/tmp/ProtaccToCoord.bql" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Building SP queries" set CompteurLus 0 while { [gets $FichierIn Ligne] >=0 } { ScanLaListe $Ligne numero NP XP Acc Organism Expect incr CompteurLus puts $FichierDesRequetes "ID $Acc DB UNIPROT" puts $FichierDesRequetes "FD DR" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" } close $FichierDesRequetes close $FichierIn set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Executing SP queries" exec /biolo/bird/bin/birdql_client.sh /tmp/ProtaccToCoord.bql bird /tmp/ProtaccToCoord.res set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Parsing SP queries" set FichierDesRequetesExecutees [open "/tmp/ProtaccToCoord.res" "r"] set FichierDesRequetes2 [open "/tmp/ProtaccToCoord.bql2" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Building RS queries" set Written "no" set CompteurRsEcrits 0 set CompteurRsVidesEcrits 0 set Uniprot 0 while { [gets $FichierDesRequetesExecutees Ligne] >=0 } { if { [regexp -nocase $Ligne]} { incr Uniprot } if { [regexp -nocase {RefSeq} $Ligne] && [regexp {DR} $Ligne] && $Written == "no"} { incr CompteurRsEcrits set RefSeq [string trim [lindex [split [lindex [split $Ligne ";"] 1] "."] 0]] puts $FichierDesRequetes2 "AC $RefSeq DB REFSEQ" #puts $FichierDesRequetes2 "FD DBSOURCE" puts $FichierDesRequetes2 "LM 1" puts $FichierDesRequetes2 "//" set Written "yes" } if { [string range $Ligne 0 1] == "//" } { if {$Written == "no"} { incr CompteurRsVidesEcrits puts $FichierDesRequetes2 "ID IMPOSSIBLE DB REFSEQP" #puts $FichierDesRequetes2 "FD DBSOURCE" puts $FichierDesRequetes2 "LM 1" puts $FichierDesRequetes2 "//" } set Written "no" } } Espionne "$CompteurRsEcrits refseq ($Uniprot fiches)" close $FichierDesRequetes2 close $FichierDesRequetesExecutees Espionne "$timestamp|ProtaccToCoord : Executing RS queries" exec /biolo/bird/bin/birdql_client.sh /tmp/ProtaccToCoord.bql2 bird /tmp/ProtaccToCoord.res2 set FichierDesRequetesExecutees2 [open "/tmp/ProtaccToCoord.res2" "r"] set FichierDesRequetes3 [open "/tmp/ProtaccToCoord.bql3" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Building RG queries" set CompteurRgEcrits 0 while { [gets $FichierDesRequetesExecutees2 Ligne2] >=0 } { if { [regexp -nocase {DBSOURCE} $Ligne2] && [regexp -nocase {REFSEQ} $Ligne2]} { incr CompteurRgEcrits set NM [string trim [lindex [split $Ligne2 ":"] 1]] set NM [string trim [lindex [split $NM " "] 1]] set NM [string trim [lindex [split $NM "."] 0]] puts $FichierDesRequetes3 "ID * DB UCSC" puts $FichierDesRequetes3 "WH SQLNATIVE SELECT chrom, txStart, txEnd FROM ucschuman.refGene WHERE name='$NM'" puts $FichierDesRequetes3 "LM 1" puts $FichierDesRequetes3 "//" } } close $FichierDesRequetes3 close $FichierDesRequetesExecutees2 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Executing RG queries" exec /biolo/bird/bin/birdql_client.sh /tmp/ProtaccToCoord.bql3 bird /tmp/ProtaccToCoord.res3 set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : Parsing RG queries" set CompteurTotalEcrit 0 set FichierDesRequetesExecutees3 [open "/tmp/ProtaccToCoord.res3" "r"] set FichierIn [open "$Rep/EpouvanBlast.csv" "r"] while { [gets $FichierDesRequetesExecutees3 Ligne3] >=0 } { incr CompteurTotalEcrit gets $FichierDesRequetesExecutees3 Ligne3 gets $FichierIn Ligne4 puts $FichierOut "$Ligne4 $Ligne3" } close $FichierDesRequetesExecutees3 close $FichierOut close $FichierIn set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|ProtaccToCoord : End" Espionne "$timestamp|ProtaccToCoord : Read = $CompteurLus" Espionne "$timestamp|ProtaccToCoord : Uniprot found = $CompteurRsEcrits ($CompteurRsVidesEcrits unfound)" Espionne "$timestamp|ProtaccToCoord : Refseq Xref found = $CompteurRgEcrits" Espionne "$timestamp|ProtaccToCoord : Written = $CompteurTotalEcrit" } proc UnixFileName {Banque} { global DirectoryNames DirLogNames CompleteFileNames if {[info exists DirectoryNames]} { if {[info exists CompleteFileNames([string toupper $Banque])]} { return [set CompleteFileNames([string toupper $Banque])] } else { return $Banque } } set OnAttendPP 1 foreach Ligne [LesLignesDuFichier "/gcg/gcg/gcgdbconfigure/dblogicals"] { if {$OnAttendPP && ! [regexp {\.\. *$} $Ligne]} { continue } if {$OnAttendPP && [regexp {\.\. *$} $Ligne]} { set OnAttendPP 0 ; continue } if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s %s" DirLogName Directory set DirectoryNames([string toupper $DirLogName]) $Directory set DirLogNames([string toupper $Directory]) $DirLogName } set OnAttendPP 1 foreach Ligne [LesLignesDuFichier "/gcg/gcg/gcgdbconfigure/dbnames.map"] { if {$OnAttendPP && ! [regexp {\.\. *$} $Ligne]} { continue } if {$OnAttendPP && [regexp {\.\. *$} $Ligne]} { set OnAttendPP 0 ; continue } if { [regexp -nocase { *\!} $Ligne]} { continue } if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } scan $Ligne "%s %s %s %s" FlatFileName DirLogName LibLogName ShortLogName set Directory [set DirectoryNames([string toupper $DirLogName])] foreach Ext [list gbk dat seq ""] { set CompleteFileName "$Directory/$FlatFileName.$Ext" if {[file exists $CompleteFileName]} { break } } set CompleteFileNames([string toupper $ShortLogName]) $CompleteFileName } return [UnixFileName $Banque] } proc Unknown {} { foreach Nom [ListeDesPABs] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} set GO [InterrogeFichierFinal $Nom GO] set Pathway [InterrogeFichierFinal $Nom Pathway] set PFAM [InterrogeFichierFinal $Nom PFAM] if {$GO=="" && $Pathway=="" && $PFAM==""} {lappend Liste $Nom} } Espionne [llength $Liste] Espionne $Liste } proc Unknown2 {} { foreach Nom [ListeDesPABs] { if {![file exists "[RepertoireDuGenome]/prottfa/$Nom"]} {continue} set GO [InterrogeFichierFinal $Nom GO] set Pathway [InterrogeFichierFinal $Nom Pathway] set PFAM [InterrogeFichierFinal $Nom PFAM] if {$GO=="" && $Pathway=="" && $PFAM==""} { #lappend Liste $Nom set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$AccBestProtHuman!=""} { set DefinitionProtHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestProtHuman Definition] if {[regexp -nocase "HYPOTHETICAL" $DefinitionProtHuman] || [regexp -nocase "PREDICTED" $DefinitionProtHuman] || [regexp -nocase "SIMILAR TO" $DefinitionProtHuman] || [regexp -nocase "KIAA" $DefinitionProtHuman] || [regexp -nocase "DKFZp" $DefinitionProtHuman] || [regexp -nocase "FLJ" $DefinitionProtHuman] || [regexp -nocase "PUTATIVE" $DefinitionProtHuman]} { #Espionne $DefinitionProtHuman #lappend LpourAffy $AccBestProtHuman lappend Liste $Nom } } } } Espionne [llength $Liste] } proc UnsetLesTableauxDesGraphAvecBlast {} { Wup "Permet de supprimer les tableaux en memoire des profils du blast pour faire Id et NbSeq" global ProfilBlast if {[array exists ProfilBlast]} {array unset ProfilBlast} return "" } proc UpDownCommeIlFaut {aUpDown aJoinCar aRecordsJoinCar {aListJoinCar ""}} { upvar $aUpDown UpDown upvar $aJoinCar JoinCar upvar $aRecordsJoinCar RecordsJoinCar if {$aListJoinCar!=""} { upvar $aListJoinCar ListJoinCar } else { set ListJoinCar "" } set L [list $JoinCar $RecordsJoinCar $ListJoinCar $UpDown] set I 0 foreach E $L { if {[EstUpDown $E]} { break } incr I } if {$I >= [expr [llength $L]-1]} { foreach Car [list JoinCar RecordsJoinCar ListJoinCar] { if {[set $Car]=="nl"} { set $Car "\n" } if {[set $Car]=="tab"} { set $Car "\t" } } return } set N [lreplace $L $I $I] lappend N [lindex $L $I] lassign $N JoinCar RecordsJoinCar ListJoinCar UpDown foreach Car [list JoinCar RecordsJoinCar ListJoinCar] { if {[set $Car]=="nl"} { set $Car "\n" } if {[set $Car]=="tab"} { set $Car "\t" } } return } proc Update3DMatrices {} { global pgl Rad set ratX $pgl(ratioX) set ratY $pgl(ratioY) set zoom $pgl(Zoom) set frontclip $pgl(frontclip) set backclip $pgl(backclip) glMatrixMode GL_PROJECTION glLoadIdentity glOrtho [expr {-$ratX*$zoom*($Rad+$pgl(xTra))}] [expr { $ratX*$zoom*($Rad-$pgl(xTra))}] [expr {-$ratY*$zoom*($Rad+$pgl(yTra))}] [expr { $ratY*$zoom*($Rad-$pgl(yTra))}] [expr {$pgl(backclip) }] [expr {$pgl(frontclip)}] glMatrixMode GL_MODELVIEW glLoadIdentity $pgl(wogl) postredisplay return } proc UpdateAgentsOfSeq {n} { global TAg Sequences MotifLen set s $Sequences($n) set lgt [string length $s] set Lag [list] set nchar 0 set iDep 0 ; set iFin -1 set iAg 0 set step [expr {$MotifLen - 1}] if {0} { for {set i 0} {$i < ($lgt-$step)} {incr i} { set mot [string range $s $i $i+$step] set dgmot [string map {. ""} $mot] if {$dgmot eq $mot} { lappend Lag [list $n $iAg 1 $i [expr {$i+$step}]] incr iAg } } } if {1} { for {set i 0} {$i < $lgt} {incr i} { set ai [string index $s $i] set isChar [expr {$ai ne "."}] incr nchar $isChar if {$isChar} { if {$nchar == 1} { set iDep $i } if {$i != ($lgt-1)} { continue } } # gap suit un gap if {$nchar == 0} { continue } # on peut etre au dernier aa de seq # (i= lgt-1) # ou bien # on a un gap qui sequence if {$isChar} { incr i } if {0 && $n eq "S03"} { puts "iDep $iDep" puts "i= $i" puts "lgt $lgt" } if {($i-$iDep) < $MotifLen} { set nchar 0 set iDep $i continue } set AgActif 1 # cree agents for {set j $iDep} {$j <= ($i-$MotifLen)} {incr j} { # cree agent lappend Lag [list $n $iAg 1 $j [expr {$j+$MotifLen-1}]] incr iAg } set iDep $i set nchar 0 } } CreateAgents $Lag return [llength $Lag] } proc UpdateDBSeqInfo {} { global db TDesAccess TDesSeqnames TDesBId global LNOrdali foreach n $LNOrdali { set pk [$db eval {select pk_seqinfo from seqinfo where seqname=$n}] $db eval "update seqinfo set seqmane='$n', access='[set TDesAccess($n)]', bid='[set TDesBId($n)]' where pk_seqinfo=$pk" } return } proc UpdateDessinRasmol {{n1 ""} {n2 ""} {op ""}} { global LFCO global LFeatCourantes global RasM set Fc [lor $LFCO $LFeatCourantes] foreach e [set RasM(LMols)] { lassign $e m i DessineFeatureDansRasmol $m $i "" $Fc } return } proc UpdateGUI {} { if {! $::WithGUI} {return} .t delete 1.0 end .t tag remove Col 1.0 end .t tag remove Spy 1.0 end set Ltxt [list] foreach n $::LNOrdali { lappend Ltxt $::Sequences($n) } .t insert end [join $Ltxt \n] #.t tag configure Spy -foreground white -background "#DD0000" .t tag configure Spy -foreground black -background "#aaaaaa" .t tag configure Col -foreground white -background "#0000DD" FenetreAuCentre [winfo toplevel .t] update idletasks return } proc UpdateInfosDesSeqs {} { global {*}[info globals "TD*"] LNOrdali Sequences LSOrdali ListePDB if {[QuelMode] ne "ordali" && [QuelMode] ne "feature"} { return } # create co-list seqname-access set Luni [list] ; set Lnun [list] set Lref [list] ; set Lnrf [list] set Lgi [list] ; set Lngi [list] foreach n $LNOrdali { if {$n eq "" || $n in $ListePDB} { continue } set bid [set TDesBId($n)] if {[EstUnUniProt $bid]} { lappaend Lnun $n # In Uniprot, Access is not moving lappend Luni [set TDesAccess($n)] } elseif {[EstUnRefseq $bid]} { lappend Lnrf $n lappend Lref $bid } elseif {[EstUnGI $bid]} { lappend Lngi $n lappend Lgi $bid } } # first : Check UniProt ID haven't change set Lnew [ConvertUniProt2UniProtAcc $Luni] foreach u $Luni n $Lnew { if {$u ne $n} { puts "old $u new $n" } } array set T {} # infos from uniprot if {$Luni != {}} { array set T [InfosFromUniProt $Luni] } # change GI to refseq ID if {$Lgi != {}} { set Lchn [ConvertGI2RefSeq $Lgi] foreach g $Lgi c $Lchn n $Lngi { # not found if {$g eq $c} {continue} # add as refseq ID lappend Lref $c lappend Lnrf $n } } # get refseq infos if {$Lref != {}} { array set T [InfosFromRefSeq $Lref] } if {[llength [array names T]] == 0} { puts "\nNothing updated ..." puts "array names T 0" puts "\nLuniprot [join $Luni \n]" puts "\nLrefseq [join $Lref \n]" return } # make summary of changes set Lsqn [concat $Lnun $Lnrf] set Lid [concat $Luni $Lref] array set Chg [list] if {[TypeAli] eq "XML" || [TypeAli] eq "ORD"} { foreach sqn $Lsqn id $Lid { if {! [info exists T($id,Desc)]} { continue } # check AC if {$TDesAccess($sqn) ne $sqn && $TDesAccess($sqn) ne $T($id,currAC)} { set Chg($sqn,AC) [list $TDesAccess($sqn) $T($id,currAC)] } # check ID if {$TDesBId($sqn) ne $sqn && $TDesBId($sqn) ne $id} { set Chg($sqn,BId) [list $TDesBId($sqn) $id] } # check all other data foreach t {TDesDescriptifs TDesTaxId TDuLineage TDesOrganismes TDesPhylum TDesAccess} k {Desc TaxId Lineage Organism Phylum currAC} { if {[set ${t}($sqn)] ne "" && [set ${t}($sqn)] ne [set T($id,$k)]} { set Chg($sqn,$k) [list [set ${t}($sqn)] [set T($id,$k)]] } } } } # Now update the different tables foreach sqn $Lsqn id $Lid { if {! [info exists T($id,Desc)]} { continue } foreach t {TDesDescriptifs TDesTaxId TDuLineage TDesOrganismes TDesPhylum TDesAccess} k {Desc TaxId Lineage Organism Phylum currAC} { set ${t}($sqn) [set T($id,$k)] } } LogChangesDuringInfoUpdate [array get Chg] return } proc UpdateKoAnnoMsf {NomMsf} { set RepParent "[OnGoingDir]/$NomMsf" set FichierMsf "$RepParent/$NomMsf.msf" set FichierXml "$RepParent/$NomMsf.xml" set FichierXml [CreeXmlAnnotePourUnMsf $FichierMsf $RepParent] if {$FichierXml==""} { return "Sorry,but something went wrong. I didn't get a result." } set Query "HtmlFromXmlMacsim&$FichierXml" set Url "[WscopeScience]&$Query" return [HttpCopy $Url] } proc UpdateLeFichierLog {Log1 {Log2 ""}} { Wup "Mise a jour des fichiers log de la veille version a la nouvelle version" set Fichier1 $Log1 if {$Log2==""} { set FichierNew "$Log1.tmp" } else { set FichierNew "$Log2" } if {![file exists $Fichier1]||[file exists $FichierNew]} {Espionne "Dejafait $FichierNew";return ""} set LesLignes [LesLignesDuFichier $Fichier1] if {[regexp "Moving on:" $LesLignes]} { Espionne "[file tail $Log1] celui la est deja au format" return "" } set LesTrucsARemplacer [list "Length Query" "Query Length :" "Requested" "Oligo Requested:" "On se balade :" "Moving on:" "Ongarde" "Spec: We keep TOOMUCHIDENTICAL" "On garde" "Spec: We keep" "On vire" "Spec: We left" "\tOn en garde" ">>>\tWe keep" "On en vire" "We left" "On a vu des PROHIBES" "Prohibited: PROHIBES"] foreach {Replace Quoi} $LesTrucsARemplacer { regsub -all $Replace $LesLignes $Quoi LesLignes } set Sequence 0 set Prohib 0 set GC 0 set Tm 0 set Spec 0 set Spec2 0 set OnAPasCommence 0 foreach Ligne $LesLignes { if {! [regexp -nocase {[a-z]+ || [0-9]+} $Ligne]} {continue} if {$OnAPasCommence=="0" && ![regexp -nocase {Moving on:} $Ligne]} { if {[regexp "^Oligo Requested:" $Ligne ]} { set Ligne [split $Ligne " "] set IDP [lindex $Ligne 14] set IDP2 [format "%.1f" [expr $IDP *100.0]] set tmlo [format "%.1f" [lindex $Ligne 5]] set tmup [format "%.1f" [lindex $Ligne 7]] set Ligne [lreplace $Ligne 14 14 $IDP2] set Ligne [lreplace $Ligne 5 5 $tmlo] set Ligne [lreplace $Ligne 7 7 $tmup] } if {[regexp "^Query has" $Ligne ]} { if {! [regexp "Cover S/Q" $Ligne]} { set Ligne [split $Ligne " "] set Id1 [format "%.2f" [lindex $Ligne end-2]] set Id2 [format "%.2f" [lindex $Ligne end-1]] set Id3 [format "%.2f" [lindex $Ligne end]] set Ligne [lreplace $Ligne end-2 end-2 "(%Id $Id1,"] set Ligne [lreplace $Ligne end-1 end-1 "Cover S/Q $Id2,"] set Ligne [lreplace $Ligne end end "Cover Q/S $Id3)"] set Ligne [join $Ligne " "] } } lappend NewLines $Ligne continue } if {[regexp "^Moving on:" $Ligne]} { #Espionne "$Ligne" set OnAPasCommence 1 set Sequence 1 set Prohib 0 set GC 0 set Tm 0 set Spec 0 set Spec2 0 lappend NewLines $Ligne continue } if {$Sequence} { scan $Ligne "%s" Seq if {[string length $Seq] == "60"} { #Espionne "On a la sequence $Seq" lappend NewLines "Sequence: $Seq" set Sequence 0 set Prohib 1 lappend NewLines "Length: OK" continue } set Sequence 0 set Prohib 1 lappend NewLines $Ligne } if {$Prohib} { if {[regexp "^Prohibited" $Ligne]} { set Prohib 0 set GC 1 lappend NewLines "$Ligne" continue } if {[regexp "^GC\:" $Ligne]} { set Prohib 0 set GC 1 lappend NewLines "Prohibited: OK" } set Prohib 0 set GC 1 } if {$GC} { if {[regexp "^GC\:" $Ligne]} { set GCV "" scan $Ligne "%s %f" E GCV if {$Seq!=""} { set xGC [NombreDeBaseDe $Seq "G|C"] set GCV2 [expr ($xGC)/(60*1.0)] } else {Espionne "Pas desequence $Ligne"} if {$GCV==""} {Espionne "Probleme $GCV $Ligne"} lappend NewLines "GC: [format "%.1f" [expr $GCV2 * 100.0]] [join [lrange $Ligne 2 end] " "]" set GC 0 set Tm 1 continue } set GC 0 set Tm 1 } if {$Tm} { if {[regexp "^Tm\:" $Ligne]} { if {[regexp "calculation" $Ligne ]} { set Tm 0 set Spec 1 lappend NewLines $Ligne continue } set Word "" set ETM "" set TM1 "" set TM2 "" scan $Ligne "%s %f %s" ETM TM1 Word set TM1 [format "%.1f" $TM1] if {$Word == ">" || $Word == "<"} { set TM2 [format "%.1f" [lindex $Ligne end]] set Ligne "$ETM $TM1 $Word $TM2" } else { set Ligne "$ETM $TM1 OK" } set Tm 0 set Spec 1 lappend NewLines $Ligne continue } set Tm 0 set Spec 1 } if {$Spec} { if {[regexp "^Spec: We keep" $Ligne]} { lappend NewLines "$Ligne" set Spec 0 set Spec2 1 continue } if {[regexp ">>>\tWe keep" $Ligne]} { lappend NewLines "$Ligne" set Spec 0 continue } } if {$Spec2} { if {[regexp "ID G" $Ligne]} { scan $Ligne "%s %s %f" id g v lappend NewLines "\tID G [format "%.2f" [expr $v * 100.0]]" set Spec 1 set Spec2 0 continue } set Spec2 0 } #Espionne "$Ligne pb" lappend NewLines $Ligne } AppendAuFichier $FichierNew [join $NewLines "\n"] file rename -force $Fichier1 "${Fichier1}.old" file rename -force $FichierNew $Fichier1 return "" } proc UpdateLesFichiersLog {Rep {Rep2 ""}} { Wup "Mise a jour des fichiers log de la veille version a la nouvelle version" set Liste [lrange [ListeDesPABs] 0 1164] foreach PAB $Liste { set LogFile "$Rep/${PAB}.log" if {$Rep==""} { set Log2 "" } else { set Log2 "$Rep2/${PAB}.log" } #UpdateLeFichierLog $LogFile $Log2 UpdateLeFichierLog $LogFile } } proc UpdateListboxSeqFeat {} { global EFeat TDesSeqnames TDesAccess TDesBId LNOrdali foreach n $LNOrdali { if {$n ne ""} { switch $EFeat(NomsAff) { "Accession" {set naf $n} "Seq. Name" {set naf [set TDesSeqnames($n)]} "Bank Id" {set naf [set TDesBId($n)]} } set EFeat(NSeq,$n) $naf } else { set naf $n } lappend Lnaff $naf } set EFeat(ListboxListe) $Lnaff TracageFeatureSummary return } proc UpdateMol3dObjets {n1 n2 op} { global ListeMol3dObjets Obj3dCou Mol3dCou Feat3dCou set lob [[set $n1] _ListeObjets] set ListeMol3dObjets [list] foreach o $lob { lappend ListeMol3dObjets [string range $o 4 end] } set Obj3dCou "" set Feat3dCou "None" return } proc UpdateMolObjFeat {args} { global pgl Mol3dCou Obj3dCou Feat3dCou Feat3dCou2 update if {$Obj3dCou eq ""} {return} if {$Feat3dCou eq ""} {return} $Mol3dCou _mapfeat $Obj3dCou $Feat3dCou 0 $Mol3dCou _mapfeat $Obj3dCou $Feat3dCou2 1 $Mol3dCou _dellist $Obj3dCou $Mol3dCou render $Obj3dCou $pgl(wogl) postredisplay return } proc UpdateNoms {} { ChangeNomsAff $::Defauts(NomsAffiches) $::NomNomSeq configure -state normal $::NomNomSeq delete 1.0 end $::NomNomSeq insert end $::NomsAffiches $::NomNomSeq configure -state disabled return } proc UpdatePosFeatures {} { global LNOrdali LSOrdali TabSF LNSTemp LSSTemp ListePDB foreach n $LNOrdali s $LSOrdali { if {$n eq ""} {continue} # si la seq n'est pas dans nouvel alignemtn if {[set ix [lsearch $LNSTemp $n]] == -1} {continue} # Features pdb traitees a part if {$n in $ListePDB} { UpdatePosPDBFeatures $n $s continue } # cas general set Le [array names TabSF "${n},*"] foreach e $Le { set newft [list] foreach ft [set TabSF($e)] { lassign [split $e ,] tmp ftype DecortiqueUneFeature $ft d f color score note csys set gsd [expr {[string index $s $d] eq "."}] set dg [NewFeatPosDe $n $d $gsd] if {$dg < 0} { set dg [expr {-1*$dg}] } set gsf [expr {[string index $s $f] eq "."}] set fg [NewFeatPosDe $n $f $gsf] if {$fg < 0} { set fg [expr {-1*$fg}] } set nl [list fstart $dg fstop $fg fcolor $color fscore $score fnote $note fcsys $csys] lappend newft $nl } set TabSF($e) $newft } } return } proc UpdatePosPDBFeatures {n s} { global TabSF set mol [DonneIdDeAccessPDB $n] set chn [DonneChainDeAccessPDB $n] foreach e [array names TabSF "${n},*"] { lassign [split $e ,] tmp ftype set newft [list] foreach ft [set TabSF($e)] { DecortiqueUneFeature $ft d f color score note csys set gd [expr {[string index $s $d] eq "."}] set gf [expr {[string index $s $f] eq "."}] if {! $gd} { # d : position globale, start 0 set ds [DonnePosGS $n $d] # ds : position dans PDB set ids [$mol CoordsPDB2Seq $chn $ds] # ids : position seq : start 0 set dg [NewFeatPosDe $n $d $gd $ids] } else { set dg [NewFeatPosDe $n $d $gd] } if {! $gf} { #incr f set fs [DonnePosGS $n $f] set ifs [$mol CoordsPDB2Seq $chn $fs] #incr ifs -1 set fg [NewFeatPosDe $n $f $gf $ifs] } else { set fg [NewFeatPosDe $n $f $gf] } if {$dg < 0} {set dg [expr {-1*$dg}]} if {$fg < 0} {set fg [expr {-1*$fg}]} set nl [list fstart $dg fstop $fg fcolor $color fscore $score fnote $note fcsys $csys] lappend newft $nl } set TabSF($e) $newft } return } proc UpdateTableConversionNCBI {} { # A lancer sur le temp du serveur set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UpdateTableConversionNCBI : Start" # exec wget "ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/gene2accession.gz" 2>@1 # exec gunzip "/tmp/gene2accession.gz" set FichierIn [open "/tmp/gene2accessionReference" "r"] set FichierOut [open "/tmp/gene2accession.csv" "w"] set FichierDesRequetes [open "/tmp/gene2accession.bql" "w"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UpdateTableConversionNCBI : Building queries" while { [gets $FichierIn Ligne] >= 0} { ScanLaListe $Ligne bin tax_id GeneID status RNA_nucleotide_accession_version RNA_nucleotide_gi protein_accession_version protein_gi genomic_nucleotide_accession_version genomic_nucleotide_gi start_position_on_the_genomic_accession end_position_on_the_genomic_accession orientation assembly set chromoFiche [lindex [split $genomic_nucleotide_accession_version "."] 0] if {[string range $chromoFiche 0 1] == "NC" } { set database "REFSEQG" } else { set database "GBFULL" } puts $FichierDesRequetes "ID $chromoFiche DB $database" puts $FichierDesRequetes "FD DE" puts $FichierDesRequetes "LM 1" puts $FichierDesRequetes "//" incr nbRequests } close $FichierDesRequetes set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UpdateTableConversionNCBI : Executing $nbRequests queries" BirdFetch "/tmp/gene2accession.bql" "/tmp/gene2accession.res" set FichierDesRequetesExecutees [open "/tmp/gene2accession.res" "r"] while { [gets $FichierDesRequetesExecutees Ligne] } { gets $FichierDesRequetesExecutees Ligne if {$Ligne !="EMPTY"} { set chromosome "" regexp -nocase {(contig|chromosome|plasmid)\s*[A-z0-9]*-*[A-z0-9]*[, .]} $Ligne chromosome regsub -all -nocase {chromosome\s} $chromosome "chr" chromosome regsub -all -nocase {\,|\.} $chromosome "" chromosome regsub -all -nocase {\s} $chromosome "_" chromosome #regsub -all -nocase {^[A-z].*\s} $chromophrase "" chromosome if {$chromosome == ""} { regsub -nocase "DEFINITION=" $Ligne "" chromosome regsub -all -nocase {^[A-z].*\s} $chromosome "" chromosome regsub -all -nocase {^[A-z].*\s} $chromosome "" chromosome } } else { set chromosome "EMPTY" } set chromosome [string trim $chromosome] set LigneOut "$bin\t$tax_id\t$GeneID\t$status\t$RNA_nucleotide_accession_version\t$RNA_nucleotide_gi\t$protein_accession_version\t$protein_gi\t$genomic_nucleotide_accession_version\t$genomic_nucleotide_gi\t$chromosome\t$start_position_on_the_genomic_accession\t$end_position_on_the_genomic_accession\t$orientation\t$assembly" puts $FichierOut $LigneOut } close $FichierDesRequetesExecutees close $FichierIn close FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UpdateTableConversionNCBI : Loading $Table table in mySQL..." exec /usr/bin/mysqlimport --user=anno --password=ceji387. --host=[LbgiHost] "ucschuman" "/tmp/gene2accession.csv" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|UpdateTableConversionNCBI : Done." } proc UpdateVMDFeatures {name1 name2 op} { global ListeTypeDeFeatures VMDsend "NouvelleFeatures $ListeTypesDeFeatures" return } proc UpdateXmlWithMacsim {FichierXml {NewFichierXml ""}} { Espionne "UpdateXmlWithMacsim" if {$NewFichierXml==""} { set NewFichierXml $FichierXml } set VraiXmlIn $FichierXml if { ! [regexp "^/" $VraiXmlIn]} { set VraiXmlIn "[pwd]/$VraiXmlIn" } set TmpXmlOut "[TmpFile]Out.xml" NousAllonsAuBoulot #rR il y avait /home/julie/MACSIM/macsim_ko if {[catch {exec macsim $VraiXmlIn $TmpXmlOut 2> /dev/null} Message]} { return "Error : error from macsim \n$Message" } OnRevientDuBoulot if { ! [file exists $TmpXmlOut]} { return "Error : No xml output file $TmpXmlOut" } file rename -force $TmpXmlOut $NewFichierXml return $NewFichierXml } proc UpgradeOrdaliDB {fold fnew} { sqlite old $fold sqlite new $fnew FabriqueDeTables [set Defauts(TablesDB1.1)] new $fnew return } proc UrlCommandeOligo {} { return "http://wappli-igbmc.u-strasbg.fr:2030/oligcde" } proc UsageDesCodons {NomVoulu} { global UsageDesCodons global RepertoireDuGenome global ListeDeBoites if {[info exists UsageDesCodons($NomVoulu)]} { return [set UsageDesCodons($NomVoulu)] } if {[info exists UsageDesCodons("EstCharge")]} { return "" } set FichierUsageDesCodons "$RepertoireDuGenome/fiches/usagedescodons" if {[file exists $FichierUsageDesCodons]} { array set UsageDesCodons [split [ContenuDuFichier $FichierUsageDesCodons] ":"] if {[info exists UsageDesCodons($NomVoulu)]} { return [set UsageDesCodons($NomVoulu)] } return "" } if { ! [OuiOuNon "Do I calculate now UsageDesCodons ?" 0]} { set UsageDesCodons("EstCharge") 1 return "" } set NombreDeCodons 0 foreach Boite [ListeDeBoites] { set Nom [Box $Boite nom] set Debut [Box $Boite debut] set Fin [Box $Boite fin] set Orient [Box $Boite orient] if { ! [YaPABdans $Nom]} { continue } if {[Enterre $Nom]} { continue } if {$Orient == "F"} { incr Fin 3 } else { incr Debut -3 } if {[OuiOuNonMemo "Do I use the genome DNA file for CodonW?"]} { set SeqNuc [BoutADN $Debut $Fin $Orient] } else { set Rep [RepDesNucPourCodonW] set SeqNuc [QueLaSequenceDuFichierTFA [GscopeFile $Nom $Rep]] } for {set i 0} {$i <= [expr $Fin-$Debut]} {incr i 3} { set Codon [string range $SeqNuc $i [expr $i+2]] if { ! [info exists CodonUsage($Codon)]} { if { ! [regexp {^[ATGC][ATGC][ATGC]$} $Codon]} { continue } lappend ListeDesCodons $Codon set CodonUsage($Codon) 0 } incr CodonUsage($Codon) incr NombreDeCodons if { ! [info exists CodonUsage($Codon,$Nom)]} { set CodonUsage($Codon,$Nom) 0 } incr CodonUsage($Codon,$Nom) } lappend ListeDesLongueurs [expr ($Fin-$Debut+1)/3] lappend ListeDesNoms $Nom } Espionne "J'ai compte $NombreDeCodons codons" set UC {} set OldPremiereBase "X" foreach Codon [lsort $ListeDesCodons] { set PremiereBase [string index $Codon 0] if {$PremiereBase != $OldPremiereBase} { if { $OldPremiereBase != "X" } { lappend UC $Codons lappend UC $PourCent lappend UC "" } set Codons "" set PourCent "" } set OldPremiereBase [string index $Codon 0] append Codons [format " %s %s" [AAduCodon $Codon] $Codon] append PourCent [format " %5d" [expr round(10000.*[set CodonUsage($Codon)]/$NombreDeCodons)]] } lappend UC $Codons lappend UC $PourCent lappend UC "" set UsageDesCodons(Global) "\n[join $UC "\n"]" foreach Nom $ListeDesNoms Longueur $ListeDesLongueurs { Espionne $Nom set UC {} set OldPremiereBase "X" foreach Codon [lsort $ListeDesCodons] { set PremiereBase [string index $Codon 0] if {$PremiereBase != $OldPremiereBase} { if { $OldPremiereBase != "X" } { lappend UC $Codons lappend UC $PourCent lappend UC $PourNom lappend UC "" } set Codons "" set PourCent "" set PourNom "" } set OldPremiereBase [string index $Codon 0] append Codons [format " %s %s" [AAduCodon $Codon] $Codon] append PourCent [format " %5d" [expr round(10000.*[set CodonUsage($Codon)]/$NombreDeCodons)]] if {[info exists CodonUsage($Codon,$Nom)]} { set CodonUsageDuNom [set CodonUsage($Codon,$Nom)] } else { set CodonUsageDuNom 0 } append PourNom [format " %5d" [expr round(10000.*$CodonUsageDuNom/$Longueur)]] } lappend UC $Codons lappend UC $PourCent lappend UC $PourNom lappend UC "" set UsageDesCodons($Nom) "\n[join $UC "\n"]" } set UsageDesCodons("EstCharge") 1 Sauve [join [array get UsageDesCodons] ":"] dans $FichierUsageDesCodons if {[info exists UsageDesCodons($NomVoulu)]} { return [set UsageDesCodons($NomVoulu)] } return "" } proc UsageDesCodonsEtCodeCirculaire {} { #rR on veut voir si le code circulaire préférencie l'ensemble X0 ci-dessous foreach Codon [list AAC AAT ACC ATC ATT CAG CTC CTG GAA GAC GAG GAT GCC GGC GGT GTA GTC GTT TAC TTC] { set X($Codon) 1 set Codon1 "[string range $Codon 1 end][string index $Codon 0]" set Codon2 "[string range $Codon1 1 end][string index $Codon1 0]" set X1($Codon1) 1 set X2($Codon2) 1 } set NbCodons 0 foreach Nom [ListeDesPABs] { set FiNuc [GscopeFile $Nom nuctfa] if {[FileAbsent $FiNuc]} { continue } set Seq [QueLaSequenceDuFichierTFA $FiNuc] set Seq [string toupper $Seq] foreach {A B C} [split $Seq ""] { set Codon "$A$B$C" if { ! [regexp {^[ATGC][ATGC][ATGC]$} $Codon]} { continue } lappend LesCodons $Codon incr Frame0($Codon) incr NbCodons } set Seq "[string range $Seq 1 end]X" foreach {A B C} [split $Seq ""] { set Codon "$A$B$C" if { ! [regexp {^[ATGC][ATGC][ATGC]$} $Codon]} { continue } lappend LesCodons $Codon incr Frame1($Codon) } set Seq "[string range $Seq 1 end]X" foreach {A B C} [split $Seq ""] { set Codon "$A$B$C" if { ! [regexp {^[ATGC][ATGC][ATGC]$} $Codon]} { continue } lappend LesCodons $Codon incr Frame2($Codon) } } set LesCodons [lsort -unique $LesCodons] set LesN0 {} set LesN1 {} set LesN2 {} foreach Codon $LesCodons { if { ! [info exists Frame0($Codon)]} { set N 0 } else { set N $Frame0($Codon) } lappend LesCodonsDe0($N) $Codon lappend LesN0 $N if { ! [info exists Frame1($Codon)]} { set N 0 } else { set N $Frame1($Codon) } lappend LesCodonsDe1($N) $Codon lappend LesN1 $N if { ! [info exists Frame2($Codon)]} { set N 0 } else { set N $Frame2($Codon) } lappend LesCodonsDe2($N) $Codon lappend LesN2 $N } set LesN0 [lsort -integer -unique -decreasing $LesN0] set LesN1 [lsort -integer -unique -decreasing $LesN1] set LesN2 [lsort -integer -unique -decreasing $LesN2] set LesCodonsTries0 {} foreach N $LesN0 { LConcat LesCodonsTries0 $LesCodonsDe0($N) } set LesCodonsTries1 {} foreach N $LesN1 { LConcat LesCodonsTries1 $LesCodonsDe1($N) } set LesCodonsTries2 {} foreach N $LesN2 { LConcat LesCodonsTries2 $LesCodonsDe2($N) } set LesCircu0 {} foreach Codon $LesCodonsTries0 { if {[info exists Frame0($Codon)]} { set F $Frame0($Codon) } else { set P 0 } if {[info exists X($Codon)]} { lappend LesCircu0 $Codon lappend LesPourCent0 [format "%3d" [expr ($F*10000)/$NbCodons]] } else { lappend LesCircu0 " " lappend LesPourCent0 [format "%3d" [expr ($F*10000)/$NbCodons]] } } set LesCircu1 {} foreach Codon $LesCodonsTries1 { if {[info exists Frame1($Codon)]} { set F $Frame1($Codon) } else { set P 0 } if {[info exists X1($Codon)]} { lappend LesCircu1 $Codon lappend LesPourCent1 [format "%3d" [expr ($F*10000)/$NbCodons]] } else { lappend LesCircu1 " " lappend LesPourCent1 [format "%3d" [expr ($F*10000)/$NbCodons]] } } set LesCircu2 {} foreach Codon $LesCodonsTries2 { if {[info exists Frame2($Codon)]} { set F $Frame2($Codon) } else { set P 0 } if {[info exists X2($Codon)]} { lappend LesCircu2 $Codon lappend LesPourCent2 [format "%3d" [expr ($F*10000)/$NbCodons]] } else { lappend LesCircu2 " " lappend LesPourCent2 [format "%3d" [expr ($F*10000)/$NbCodons]] } } set LeMessage {} lappend LeMessage [join $LesCircu0 " "] lappend LeMessage [join $LesCodonsTries0 " "] lappend LeMessage [join $LesPourCent0 " "] lappend LeMessage "" lappend LeMessage [join $LesCircu1 " "] lappend LeMessage [join $LesCodonsTries1 " "] lappend LeMessage [join $LesPourCent1 " "] lappend LeMessage "" lappend LeMessage [join $LesCircu2 " "] lappend LeMessage [join $LesCodonsTries2 " "] lappend LeMessage [join $LesPourCent2 " "] set Message [join $LeMessage "\n"] return [Affiche $Message "" "CodonOrderFor_[NotreOS]"] } proc UseBanqueIdForDbClustal {{Value ""}} { global UseBanqueIdForDbClustal if {$Value!=""} { set UseBanqueIdForDbClustal $Value } if { ! [info exists UseBanqueIdForDbClustal]} { set UseBanqueIdForDbClustal 0 } return $UseBanqueIdForDbClustal } proc UseBirdForUniprot {{Value ""}} { #rR c'est pour que DbClustal puisse utiliser FromOrthoInspector ou FromYannis global UseBirdForUniprot if {$Value!=""} { set UseBirdForUniprot $Value } if { ! [info exists UseBirdForUniprot]} { return 0 } return $UseBirdForUniprot } proc UseExistingJalviewHtml {{Value ""}} { global UseExistingJalviewHtml if {$Value!=""} { set UseExistingJalviewHtml $Value } if { ! [info exists UseExistingJalviewHtml]} { set UseExistingJalviewHtml [file exists "[RepertoireDuGenome]/webXXXXXXXXXX"] } return $UseExistingJalviewHtml } proc UserDeRapport {Rapport} { foreach Ligne [LesLignesDuFichier $Rapport] { scan $Ligne "%s %s" type def if {$type=="User:"} {return $def} } } proc Utf8 {} { set Texte [ContenuDuFichier "[HomeRipp]/GenoretWww/Library/Ligatures.txt"] set Texte [ContenuDuFichier "[HomeRipp]/GenoretWww/phpNE/Article/pdf_txt/UpL20070206173536_of_calpain.pdf.txt"] return $Texte Espionne $Texte regsub {\uFB01} $Texte "fi" Texte Espionne "\uFB01" Espionne $Texte return $Texte } proc UtiliseCCode {} { return 1 if {0 && [catch {package require tcc} Msg]} { puts "failed package require" return 0 } else { puts "package loaded" flush stdout } # package require tcc tcc::reset tcc::cproc csum {double a double b} double {return a+b;} set c [csum 4.2 5.01] if {$c != 9.21} {return 0} return 1 } proc VE {Qui {Quoi ""}} { global VE if {[info exists VE($Qui,$Quoi)]} { return $VE($Qui,$Quoi) } if {[info exists VE("EstCharge")]} { return "" } VeFromSbgpDatabase set VE("EstCharge") 1 return [VE $Qui $Quoi] } proc VEDidier {{Qui ""} {Quoi ""}} { global VEDidier if {$Qui==""} { set Qui "ListeDes" } if {$Quoi==""} { if {$Qui=="ListeDes"} { set Quoi "VE" } else { set Quoi "Ligne" } } if {$Qui=="Show" && $Quoi=="All"} { return [VEDidier "All" "Show"] } if {$Quoi=="Show"} { set VEs $Qui if {$Qui=="All"} { set VEs [join [lsort [VEDidier ListeDes VE]] " "] } set LaPage {} foreach Mot [LesMotsDeLaLigne $VEs] { if { ! [regexp {^VE[0-9]+$} $Mot]} { continue } lappend LaPage [VEDidier $Mot Ligne] } return [AfficheListe $LaPage "AvecOligo" $Qui] } if {[info exists VEDidier($Qui,$Quoi)]} { return $VEDidier($Qui,$Quoi) } if {[info exists VEDidier("EstCharge")]} { return "" } set Texte [HttpGetTextFromUrl "http://tursan/vestatus/vecsvcrlf.php"] set DejaVuEntete 0 foreach Ligne [split $Texte "\n"] { if { ! [regexp "^VE" $Ligne]} {continue} set Ligne [string trim $Ligne ";"] set LesMots [split $Ligne ";"] if {! $DejaVuEntete} { set LesClefs $LesMots set VEDidier(ListeDes,Clefs) $LesClefs set DejaVuEntete 1 continue } set VE [lindex $LesMots 0] if {[info exists VEDidier($VE,Ligne)]} { continue } lappend VEDidier(ListeDes,VE) $VE set VEDidier($VE,Ligne) $Ligne foreach Mot $LesMots Clef $LesClefs { set VEDidier($VE,$Clef) $Mot } } set VEDidier("EstCharge") 1 return [VEDidier $Qui $Quoi] } proc VMDDemande {Id pdb quoi args} { global ListePDB set pdb [string tolower $pdb] set ix [lsearch -regexp $ListePDB $pdb] set MolId [lindex [lindex $ListePDB $ix] 0] set chn [DonneChainDeAccessPDB $MolId] switch $quoi { "Couleurs" { set type [lindex $args 0] if {$type == "conservation"} { set LesCmds [CouleursPourVMD [CouleursOrdali $MolId] $Id] } else { set LesCmds [CouleursPourVMD [ColorieStructureSelonFeature $type $MolId] $Id] } foreach ord $LesCmds { IlFautVoir $ord } IlFautVoir "MChangeStyle $Id" } } return } proc VMDacpt {sock addr port} { global clients putlog "Accept $sock from $addr port $port" set clients($sock) 1 fconfigure $sock -buffering line -blocking 1 fileevent $sock readable [list VMDrecv $sock] return } proc VMDexe {} { global tcl_platform global env set fexe [auto_execok vmd] if {$fexe ne ""} {return $fexe} if {$tcl_platform(platform) eq "windows"} { set fexe [FindTcl "vmd.exe" $env(ProgramFiles)] } return $fexe } proc VMDrecv {sock} { global CanalV global clients if { [eof $sock] || [catch {gets $sock line}]} { # end of file or abnormal connection drop close $sock putlog "Closing $sock" unset clients($sock) catch {unset CanalV} trace remove variable ListeTypeDeFeatures write UpdateVMDFeatures } else { if {$line eq "quit"} { # prevent new connections # existing connections stay open putlog "Disallowing incoming connections by request of $sock" close $CanalV unset CanalV trace remove variable ListeTypeDeFeatures write UpdateVMDFeatures } puts $line if {[regexp {^AuLog} $line]} {eval $line ; return} if {[regexp {^VMD} $line]} {eval $line ; return} if {[regexp {^Faire} $line]} {eval $line ; return} eval $line } return } proc VMDsend {line} { global clients global CanalV foreach client [array name clients] { if { [string compare $CanalV $client] != 0 } { # don't send to originator putlog "send '$line' to $client" puts $client $line } } return } proc VMDstart {} { global CanalV set port 21212 set CanalV [socket -server VMDacpt $port] putlog "Listening on port $port" update return } proc VMT {x y z L t} { lassign $L a b c return [expr {$x*$a + $y*$b + $z*$c +$t}] } proc V_MV {A op V} { set W {} foreach VA $A { lappend W [S_VV $VA * $V] } return $W } proc V_SV {s op u} { set w {} switch $op { "+" { foreach e $u {lappend w [expr {$e+$s}]} } "-" { foreach e $u {lappend w [expr {$e-$s}]} } "*" { foreach e $u {lappend w [expr {$e*$s}]} } "/" { foreach e $u {lappend w [expr {$e/$s}]} } } return $w } proc V_T {aT} { upvar $aT T set Zero 0 foreach Bornes [array names T] { set I "undefined" scan $Bornes "%d" I if {$I=="undefined"} { continue } set Valeur [set T($Bornes)] if {[regexp "\." $Valeur]} { set Zero 0.0 } set BonT($I) $Valeur lappend LesIs $I } set LesIs [lsort $LesIs] set DebI [lindex $LesIs 0] set FinI [lindex $LesIs end] set V {} for {set I $DebI} {$I<=$FinI} {incr I} { if {[info exists BonT($I)]} { lappend V [set BonT($I)] } else { lappend V $Zero } } return $V } proc V_VM {V op A} { set W {} foreach VtA [M_tM $A] { lappend W [V_VV $V * $VtA] } return $W } proc V_VS {u op s} { set w {} switch $op { "+" { foreach e $u {lappend w [expr {$e+$s}]} } "-" { foreach e $u {lappend w [expr {$e-$s}]} } "*" { foreach e $u {lappend w [expr {$e*$s}]} } "/" { foreach e $u {lappend w [expr {$e/$s}]} } } return $w } proc V_VV {u op v} { set w {} switch $op { "+" { foreach e $u f $v { lappend w [expr {$e + $f}] } } "-" { foreach e $u f $v { lappend w [expr {$e - $f}] } } "*" { foreach e $u f $v { lappend w [expr {$e * $f}] } } "/" { foreach e $u f $v { lappend w [expr {$e / $f}] } } } return $w } proc V_Vwithout {V i} { return [lreplace $V $i $i] } proc V_create {args} { return $args } proc V_fromM {M {i 0}} { return [lindex $M $i] } proc V_fromV {V d f} { return [lrange $V $d $f] } proc V_lVV {s opu u op t opv v} { set w {} foreach e $u f $v { lappend $w [expr ($s $opu $e) $op ($t $opv $f)] } return $w } proc V_nV {u} { set N [S_nV $u] if {$N < 1.e-20} { return [V_VS $u * 0] } return [V_VS $u / $N] } proc V_unit {{i 0} {n 3} {Valeur 1.0}} { set V {} set Zero [expr $Valeur - $Valeur] for {set j 0} {$j<$n} {incr j} { if {$i!=$j} { lappend V $Zero } else { lappend V $Valeur } } return $V } proc ValFromStack {{OtherStack ""} {Pull ""}} { global OurCurrentStack OurStacks if {$OtherStack!=""} { set OurCurrentStack $OtherStack } if { ! [info exists OurCurrentStack]} { return "" } if { ! [info exists OurStacks($OurCurrentStack,StackHeight)]} { set OurStacks($OurCurrentStack,StackHeight) 0 } set h [set OurStacks($OurCurrentStack,StackHeight)] if {$h==0} { return "" } set Val [set OurStacks($OurCurrentStack,$h)] if {$Pull!=""} { set OurStacks($OurCurrentStack,StackHeight) [incr h -1]} return $Val } proc Valerie {RS RD} { cd $RS foreach S [lsort [glob "*.img"]] { set D "$RD/$S" if {[file exists $D]} { continue } file copy $S $D Espionne $D } } proc ValeurApres {Champ dans Texte Format} { set iZone [string first $Champ $Texte] if {$iZone<0} { return "" } incr iZone [string length $Champ] if { $Format == "ExposantEventuellementMalFoutu" } { set sPN [string trim [string range $Texte $iZone end] " '"] regsub {^[eE]} $sPN "1.0e" sPN scan $sPN "%f" PN if {[catch { expr $PN > 0.001 } ]} { Warne "Oh le vilain $sPN trop petit, je prends 1.0E-200" set PN 1.0E-200 } set Valeur $PN } else { if {$iZone<0} {return ""} set Valeur "" scan [string range $Texte $iZone end] "$Format" Valeur } return $Valeur } proc ValeurBoot {} { global TokCourant if {$TokCourant=="\["} { Tok set Entier [Entier] if {[regexp "NonValide" $Entier]} { return "ValeurBootNonValideCar$Entier" } if {$TokCourant=="\]"} { Tok return $Entier } return "ValeurBootNonValideCarNonCrochetFermant" } return "ValeurBootNonValideCarNonCrochetOuvrant" } proc ValeurDeLaBalise {Item aTexte {Rogner Rogner} {aAttributs ""} {Vide ""}} { upvar $aTexte Texte if {$aAttributs!=""} { upvar $aAttributs Attributs } set Rogner [expr ! [string equal -nocase $Rogner "NePasRogner"]] regsub -all -- "-" $Item "\-" ItemX if { ! [regexp -indices -nocase "<${ItemX}(>| )" $Texte Indices]} { return $Vide } set FinItem [lindex $Indices 1] set NouveauTexte [string range $Texte [expr $FinItem] end] set iChevronFermant [string first ">" $NouveauTexte] if {$iChevronFermant<0} { return "" } set Attributs [string range $NouveauTexte 0 $iChevronFermant] set LongAttributs [string length $Attributs] regsub ">" $Attributs "" Attributs set Attributs [string trim $Attributs] set NouveauTexte [string trim [string range $NouveauTexte $LongAttributs end]] set Fermant [ItemHTMLFermant $Item] if {$Fermant==">"} { set Valeur $Attributs set Derriere 0 } else { regsub -all -- "-" $Fermant "\-" FermantX if { ! [regexp -indices -nocase "$FermantX" $NouveauTexte Indices]} { return $Vide } set iFin [lindex $Indices 0] if {[regexp {<[^/]} $FermantX]} { set Derriere [expr $iFin - 1] } else { set Derriere [expr [lindex $Indices 1] + 1] } set Valeur [string range $NouveauTexte 0 [expr $iFin - 1]] } if {$Rogner} { set Texte [string range $NouveauTexte $Derriere end] } if {$Valeur==""} { set Valeur $Vide } return $Valeur } proc ValeurDist {} { global TokCourant if {$TokCourant==":"} { Tok set Flottant [Flottant] if {[regexp "NonValide" $Flottant]} { return "ValeurDistNonValideCar$Flottant" } return $Flottant } return "ValeurDistNonValideCarNonDoublePoints" } proc ValeurEnFin {de Texte Format} { set BonTexte [string trim $Texte] set iZone [expr [string last " " $BonTexte]+1] scan [string range $BonTexte $iZone end] "$Format" Valeur return $Valeur } proc ValeurFeuille {} { global TokCourant global ValueurFeuille if {regexp -nocase {[a-z_]} $TokCourant} { set ValeurFeuille $TokCourant Tok set AlphaNum [AlphaNum] if { ! [regexp "NonValide" $AlphaNum} { append ValeurFeuille $AlphaNum } return $ValeurFeuille } return "ValeurFeuilleNonValideCarNonAlphaEnDebut" } proc ValeurPk {Texte} { set Pk "" scan $Texte "%s" Pk return $Pk } proc ValiDE {Nom} { set DE [ExtraitInfo $Nom "ValiDE:"] if {$DE==""} { set DE [ExtraitInfo $Nom "ValiDEProt:"] } if {[string equal -nocase "no value" $DE]} { set DE "" } return $DE } proc ValiGN {Nom} { set GN [ExtraitInfo $Nom "ValiGN:"] if {$GN==""} { set GN [ExtraitInfo $Nom "ValiGNProt:"] } if {[string equal -nocase "no value" $GN]} { set GN "" } return $GN } proc ValiGNHNR {} { foreach Nom [ListeDesPABs] { set Access [ExtraitInfo $Nom "AccessProt:"] set GN [BirdWeb uniprot $Access GN] Espionne $GN set ValiGN [StringApres "Name=" dans $GN] regsub {\;.*} $ValiGN "" ValiGN Espionne "$Nom $Access $ValiGN" InformeSansDemander $Nom "=ValiGN: $ValiGN" } exit } proc ValidBlastDatabaseForGrilladin {BlastDatabase} { return 1 return [string equal $BlastDatabase "Proteome201501"] } proc ValidBlastDatabaseForHotdog {BlastDatabase} { return [ValidBlastDatabaseForGrilladin $BlastDatabase] } proc ValidLaListeBoxDePanelFindProtein {KListBox} { set LesOrganismes {} set LesGO {} set LesEntry {} foreach Ligne [$KListBox get 0 end] { if {$Ligne == ""} {continue} set LaLigne [split $Ligne " "] if {![string equal -nocase [lindex $LaLigne 0] "\#Entry"]} {continue} lappend LesEntry $Ligne set Type [lindex $LaLigne 1 ] set Entry [lrange $LaLigne 2 end] if {$Type == "OS"} { lappend LesOrganismes $Entry if {[regexp -nocase {^Rattus} $Entry]} { lappend LesOrganismes "Rattus norvegicus" lappend LesOrganismes "Rattus sp" lappend LesOrganismes "Rattus sp." } if {[regexp -nocase {^Mus|mouse} $Entry]} { lappend LesOrganismes "Mus musculus" lappend LesOrganismes "House mouse" lappend LesOrganismes "Mouse" } if {[regexp -nocase {^Homo|Human} $Entry]} { lappend LesOrganismes "Homo sapiens" lappend LesOrganismes "Human" } if {[regexp -nocase {^Danio|Brachydanio} $Entry]} { lappend LesOrganismes "Zebrafish" lappend LesOrganismes "Brachydanio rerio" lappend LesOrganismes "Danio rerio" lappend LesOrganismes "Brachydanio rerio" } } if {$Type == "GO"} { foreach GO [lrange $LaLigne 2 end] {lappend LesGO $GO} } if {$Type == "GOF"} { if {![file exists $Entry]} {continue} foreach GO [LesLignesDuFichier $Entry] { set GO [string trim $GO] if {$GO == ""} {continue} lappend LesGO $GO } } if {$Type == "EKW"} { foreach GO [LesGOAvecCeKeyword $Entry "Exactly" ] {lappend LesGO $GO} } if {$Type == "CKW"} { foreach GO [LesGOAvecCeKeyword $Entry "Contained"] {lappend LesGO $GO} } } $KListBox delete 0 end foreach Ligne $LesEntry {$KListBox insert end $Ligne} $KListBox insert end "\#SEARCHING ..." if {$LesOrganismes != {}} {set LesOrganismes [lsort -unique $LesOrganismes]} set NbProteins 0 set LesLignes {} set EnAiJeDejaRencontreUn 0 foreach Ligne [LesProteinesAvecCesGO $LesGO $LesOrganismes "ID ACC DES ORG" protein] { if {[regexp -nocase "^ID " $Ligne]} { incr NbProteins if {$EnAiJeDejaRencontreUn} {lappend LesLignes "//"} lappend LesLignes "" set EnAiJeDejaRencontreUn 1 } lappend LesLignes $Ligne } if {$EnAiJeDejaRencontreUn} {lappend LesLignes "//"} $KListBox insert end "\#Number of proteins found : $NbProteins" foreach Ligne $LesLignes { $KListBox insert end $Ligne } return } proc ValidateServer {w} { global TCon CMDef # check for empty fields if {[string trim $TCon(ServerName)] eq ""} { FaireLire "Please give a name to this server !" return } if {[string trim $TCon(Username)] eq ""} { FaireLire "Please give a username !" return } if {[string trim $TCon(Password)] eq ""} { FaireLire "Please give a password !" return } if {[string trim $TCon(ServerAddress)] eq ""} { FaireLire "Please give a server address !" return } # debug if {1} { puts "------------------------" puts "Server Name ...: $TCon(ServerName)" puts "Server Address : $TCon(ServerAddress)" puts "Username ......: $TCon(Username)" puts "Password ......: $TCon(Password)" puts "Use SSL .......: $TCon(UseSSL)" puts "Port ..........: $TCon(Port)" puts "------------------------" } # Connect to server and log in if {[set imapID [ConnectServer $TCon(ServerAddress) $TCon(UseSSL) $TCon(Port)]] == 0} { return } set TCon(imapID) $imapID puts "connection ok" if {! [LoginServer $imapID $TCon(Username) $TCon(Password)]} { return } puts "login ok" array set CMDef [array get TCon] RegisterNewMailServer unset TCon if {[winfo toplevel $w] ne "."} { # we come from the main interface destroy $w } else { destroy .f } return } proc Validate_SetUp {} { Wup "Verifie le bon nombre de parametre" set LesSetUps [list PROGDIR BLASTDIR BLASTDBDIR GETZDIR] set Validated 1 foreach SetUp $LesSetUps { if {[LesParametresDuSetUp $SetUp "" Existe]} { continue } else { switch -exact -- $SetUp { "PROGDIR" {} "BLASTDIR" {} "BLASTDBDIR" {} "GETZDIR" {} } set Validated 0 break } } return $Validated } proc Validation {{Sens -increasing}} { global ListeDeBoites if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } set JeVeuxFaire 1 if { $Sens == "Voir"} { set Sens "-increasing" set JeVeuxFaire 0 } set JeVeuxVoir [expr ! $JeVeuxFaire] foreach Boite [lsort $Sens $ListeDeBoites] { set Nom [Box $Boite nom] if {[FiabiliteFonction $Nom] != 5} { continue } if {$JeVeuxFaire && [ExtraitInfo $Nom "ValiDE"] != "" || $JeVeuxVoir && [ExtraitInfo $Nom "ValiDE"] == "" } { continue } puts $Nom continue if { [QueDitAful $Nom] && ! [OuiOuNon "Au suivant ?"] } { break } } } proc ValidationDeLaSequenceMasquee {FichierTFA} { set TailleMin 10 if {[NombreDeBasesContinuesMax $FichierTFA] < $TailleMin} { return 0 } else { return 1 } } proc ValidationESTDeQueryParHTG {FichierTFA Organism} { ############################################################### ### Validation des EST spe de la sequence query par les HTG ### ############################################################### set FichierTFAMasked "$FichierTFA.masked" set FichierBlastnHTG "$FichierTFA.blastnhtg" set FichierBlastnHTGReduced "$FichierBlastnHTG.reduced" set FichierBlastnEST "$FichierTFA.blastnest" set FichierESTSpeQueryTFA "$FichierTFA.esttfas" set FichierESTDB "[RepertoireDeTravail]/$FichierBlastnEST.dbest" if {![file exists $FichierTFAMasked]} { Espionne "$FichierTFAMasked does not exists, please create it" return } ########## Determination du meilleur HTG de la sequence query ########## ###BlastnHTG avec filtre de la sequence query masquee contre la banque d'HTG### #BlastNDuFichier $FichierTFAMasked "htg" $FichierBlastnHTG T 2000 0.1 0 if {![file exists $FichierBlastnHTG]} { set Commande "eval exec blastall -p blastn -i \$FichierTFAMasked -o \$FichierBlastnHTG -d /blast/htg -v 2000 -K 0 -b 2000 -e 2000 -F T -a 4" if {[catch {eval $Commande} Message]} { Espionne "Problem with $FichierBlastnHTG" Espionne $Message } } ### Recherche des HTG specifiques de la sequence tfa ### if {![file exists $FichierBlastnHTGReduced]} { set FichierBlastnHTGReduced [BlastDesMeilleursHTGDuBlast $FichierBlastnHTG $FichierTFA $Organism] } ### Selection du HTG qui "centre" au mieux la query ### ### cad du HTG ayant la plus grande petite extremite ### set HTGDeLaSequenceTFA [HTGDeLaSequenceTFA $FichierBlastnHTGReduced $FichierTFA $Organism] ########## Alignement du contig selectionne sur la banque d'EST specifiques de la query ########## ### Creation de la banque des EST specifiques de la query dans le repertoire junkdir### File copy -force $FichierESTSpeQueryTFA $FichierESTDB TFAs2DB $FichierESTDB ### Alignement du contig contre cette banque ### return } proc ValsDeCouleurs {} { global Couleurs set Couleurs(IdenGlob) "white black" set Couleurs(ConsGlob) "white DimGray" set Couleurs(SimiGlob) "black LightGray" set Couleurs(IdenGrp1) "black red" set Couleurs(IdenGrp2) "black blue" set Couleurs(IdenGrp3) "black yellow" set Couleurs(IdenGrp1Gris) "red LightGray" set Couleurs(IdenGrp2Gris) "blue LightGray" set Couleurs(IdenGrp3Gris) "yellow LightGray" set Couleurs(InterG12) "black magenta" set Couleurs(InterG13) "black coral" set Couleurs(InterG23) "black green" set Couleurs(InterG12Gris) "magenta LightGray" set Couleurs(InterG13Gris) "coral LightGray" set Couleurs(InterG23Gris) "green LightGray" set Couleurs(PoinGrp1) "red white" set Couleurs(PoinGrp2) "blue white" set Couleurs(PoinGrp3) "yellow white" } proc ValsDesDefauts {} { global Defauts set Defauts(Email) luc.moulinier@unistra.fr set Defauts(WithPackages) 1 set Defauts(Mode) Interactive set Defauts(MarcheForcee) 0 set Defauts(InProject) 0 set Defauts(Project) "" set Defauts(dispmode) "ordali" set Defauts(Devlpt) 0 set Defauts(FirstPass) 1 set Defauts(MacsimDone) 0 set Defauts(ToggleAllSeqs) 1 set Defauts(ToggleToolBar) 1 set Defauts(ToggleFeature) 1 set Defauts(ToggleScores) 0 set Defauts(ToggleColRes) 0 set Defauts(ToggleAuLog) 0 set Defauts(RemovePropagated) 0 set Defauts(NmMacCourant) "" set Defauts(LogAtStartup) 0 set Defauts(OnlyTLog) 0 set Defauts(ShowFrame) 0 set Defauts(FullScreen) 1 set Defauts(TypeAli) "pasdali" set Defauts(LongNom) 30 set Defauts(NomsAffiches) "seqname" set Defauts(PreCompute) 0 set Defauts(PrecomputeSrf) 0 set Defauts(CheckSeq) 0 set Defauts(Poids) 0 set Defauts(Poids2) 0 set Defauts(Poids3) 0 set Defauts(SelectionNom) 0 set Defauts(SelectionLong) 0 set Defauts(CutLong) 2 set Defauts(TypeDeGroupesACreer) "User" set Defauts(FichierClu) "" set Defauts(Run) 0 set Defauts(PDB) 0 set Defauts(PDBDansPilier) 1 set Defauts(SeqAssocie) 0 set Defauts(FichierMSF) "" set Defauts(FichierRSF) "" set Defauts(FichierTFA) "" set Defauts(FichierXML) "" set Defauts(FichierORD) "" set Defauts(FichierOBK) "" set Defauts(FichierALN) "" set Defauts(FichierPDB) "" set Defauts(FichierOMAC) "" set Defauts(Visualize) 0 set Defauts(ConsNGrp) 1 set Defauts(AffSS) 1 set Defauts(AffPhy) 0 set Defauts(AffGrp) 0 set Defauts(SphPts) 1 set Defauts(RunScript) 0 set Defauts(FgEukaryota) black set Defauts(BgEukaryota) PaleVioletRed1 set Defauts(FgArchaea) black set Defauts(BgArchaea) LightBlue set Defauts(FgBacteria) black set Defauts(BgBacteria) LightYellow set Defauts(FgViruses) white set Defauts(BgViruses) black set Defauts(LifeDomains) [list Eukaryota Archaea Bacteria Viruses] set Defauts(PrefixesBank) [list SPT SW PDB VARSPLIC UniRef90 UniRef100 PQS ENS sp unp tr ref gb dbj ENA toto] set Defauts(RemoveBankPrefix) 1 set Defauts(Background) "white" set Defauts(BackAppli) "#ffffffffd0d0" set Defauts(BackAppliOri) "" set Defauts(ForeAppli) "#000000000000" set Defauts(ForeAppliOri) "" set Defauts(DeltaYScroll) 1 set Defauts(PCThrGap) 0.5 set Defauts(MinThrGap) 4 set fontFml "Courier New" set Defauts(SeqFontFaml) $fontFml set Defauts(SeqFontSize) 14 set Defauts(SeqFontWght) normal set Defauts(DeltaXScroll) 10 set Defauts(Mapping) [EditorMappingData] set Defauts(UrlPdbHoan) "http://d1.crihan.fr:8080/bird/bsearch?db=pdb&accession=XXXX" set Defauts(UrlPdbHome) "http://bird:8080/bird/bsearch?db=pdb&accession=XXXX" set Defauts(UrlPdbWorld) "http://www.rcsb.org/pdb/cgi/export.cgi/XXXX.pdb?format=PDB&pdbId=XXXX&compression=None" set Defauts(UrlSRSHome) "http://bips.u-strasbg.fr/srsbin/cgi-bin/wgetz?-e+\[\{sptrembl_SP_swissprot\}-acc:XXXX\]|\[swissprot-id:XXXX\]+-vn+2" set Defauts(UrlSRSWorld) "http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-e+%5b%7bsptrembl_SP_swissprot%7d-acc:XXXX%5d%7c%5bswissprot-id:XXXX%5d+-vn+2" set Defauts(UrlSRSHoan) "http://d1.crihan.fr:8080/bird/bsearch?db=YYYY&accession=XXXX" set Defauts(Threshold) 80 set Defauts(ThresholdIden) 100 set Defauts(MethodeConservation) "Threshold" set Defauts(SimiGris) 1 set Defauts(LockSeqs) 1 set Defauts(CanvasHTree) 2000 set Defauts(CanvasWTree) 2000 set Defauts(FWidthTree) 400 set Defauts(FHeightTree) 400 set Defauts(TreeBoot) 0 set Defauts(TreeNBoot) 100 set Defauts(ThresBootPC) 80 set Defauts(TypeGapTree) "pairwise" set Defauts(TypeTree) "dendrogram" set Defauts(PDBTree) 0 set Defauts(CollapseTree) 0 set Defauts(FontSizeTree) 10 set Defauts(FontSizeTreeBoot) 8 set Defauts(FontWghtTree) normal set Defauts(CanvasHSFeat) 2000 set Defauts(CanvasWSFeat) 2000 set Defauts(FWidthSFeat) 600 set Defauts(FHeightSFeat) 400 set i 0 foreach c [GammeDeCouleursRVB 10] g [GammeDeCouleursDeGris 10] { set Defauts(GammeCoul$i) $c set Defauts(GammeGris$i) $g incr i } set Defauts(Sampling) 3 set Defauts(CoulVariable) "LightSlateGray" set Defauts(Viewer) "Viandox" set Defauts(Label3DColor) [list 0.0 1.0 0.0] set Defauts(MethodeSuper) "ordali" set Defauts(Super) "CA" # peut etre 'dont' pour ne pas donwloader set Defauts(DownloadPDB) "internet" set Defauts(juju) 0 set Defauts(SaveLog) 0 set Defauts(clusdeb) 0 set Defauts(Balibase) 0 set Defauts(RemoveQuery) 0 set Defauts(Dump) 0 set Defauts(Exit) 0 set Defauts(Debug) 0 #set Defauts(UrlPdbHoan) "http://star4:8080/bird/getproduct?db=pdb&id=XXXX" set Defauts(UserDef) [list Background BackAppli BackAppliOri ForeAppli ForeAppliOri SeqFontFaml SeqFontSize SeqFontWght DeltaXScroll DeltaYScroll UrlPdbHoan UrlPdbWorld UrlPdbHome UrlSRSHome UrlSRSWorld UrlSRSHoan Threshold MethodeConservation TreeBoot TreeNBoot ThresBootPC TypeGapTree TypeTree PDBTree FontSizeTree FontWghtTree CoulVariable Label3DColor ] set Defauts(TablesDB) " - ordalie : parametres generaux d'ordalie { . key T (nom du parametre) . val T (valeur du parametre) } - seqinfo : les infos des sequences { . pk_seqinfo P . seqname T (nickname de sequence) . access T . bid T . description T . organism T . taxid I . fragment I . cgroup I . ec T . complex I . phylum T . go T . lineage T . hydrophobicity R . isoelectric R . seqori T } - seqfeat : les features des sequences { . pk_seqfeat P . ftype T (de feature (PFAM, secstr, ...)) . fstart I . fstop I . fcolor T . fscore R . fnote T . fcsys T (systeme coords, local ou global) } - ln_seqinfo_seqfeat : { . pk_seqinfo I . pk_seqfeat I } - seqali : une instance d'un seqinfo dans le contexte d'un alignement, et possede : { . pk_seqali P (pk pour chaque sequence) . pk_seqinfo I (de l'info de la sequence) . seqname T (nom affiche) . seq T (aminoacid + gap) } - mac : est un macsim { . pk_mac P . name T . description T } - ln_mac_seqali { . pk_mac I . pk_seqali I . pos I } - featali : les features des sequences DANS LE CONTEXT DE L ALIGNEMENT { . pk_featali P . ftype T (de feature (PFAM, secstr, ...)) . fstart I . fstop I . fcolor T . fscore R . fnote T . fcsys T (systeme coords, local ou global) } - ln_seqali_featali : { . pk_seqali I . pk_featali I } - clustering : definition generale du clustering { . pk_clustering P . pk_mac I . name T . methode T . zone T } - cluster : sont les paquets de sequences d'un clustering donne. { . pk_cluster P . pk_clustering I . name T } - ln_seqali_cluster : { . pk_seqali I . pk_cluster I . pos } - ln_mac_clustering : { . pk_mac I . pk_clustering I . pos I } - colmeasure : un calcul par colonne { . pk_colmeasure P . name T } - ln_mac_colmeasure { . pk_mac I . pk_colmeasure I } - colscore : conservation { . pk_colscore P . pk_colmeasure I . name T . owner T . type T . data T } - ln_cluster_colscore { . pk_cluster I . pk_colscore I } - ln_seqali_colscore { . pk_seqali I - pk_colscore I } - anno : anotations d'un mac donne { . pk_anno P . annotation T . zone T } - ln_mac_anno { . pk_mac I . pk_anno I } - pdb : stockage des PDB { . pk_pdb P . nom T . source T . header T } - chaines : contient info sur chaines { . pk_chaines P . pk_pdb I . nom T . type T } - residues : residues de chaine { . pk_residues P . pk_pdb I . pk_chaines I . rnom1l T . rnom3l T . rnmr T . type T } - atomes : info sur atome. na = numero atomique { . pk_atomes P . pk_pdb I . pk_chaines I . pk_residues I . anom T . x R . y R . z R . b R . q R . na I } - objetinit : template objet { . pk_obj P . pk_pdb I . pk_chaines I . pk_residues I . currsel I . surface I . ribbon I . ribcol T . catrace I . cacol T . atomes I . atmcol T . cpk I . pearl I . picked I . label T } " set Defauts(TablesDB1.1) " - ordalie : tableaux generaux d'ordalie { . var V64 (nom du tableau) . key V64 (nom du parametre) . val T (valeur du parametre) } - seqinfo : les infos des sequences { . pk_seqinfo P . seqname V64 (nickname de sequence) . access V64 . bid V64 . description T . organism V128 . taxid I . fragment I . cgroup I . ec V16 . complex I . phylum V16 . go T . lineage T . hydrophobicity R . isoelectric R . molweight R . seqori T } - seqfeat : les features des sequences { . pk_seqfeat P . pk_seqinfo I . ftype V32 (de feature (PFAM, secstr, ...)) . fstart I . fstop I . fcolor V32 . fscore R . fnote T . fcsys V8 (systeme coords, local ou global) } - ln_seqinfo_seqfeat : { . pk_seqinfo I . pk_seqfeat I } - mac : est un macsim { . pk_mac P . name T . description T } - seqali : une instance d'un seqinfo dans le contexte d'un alignement, et possede : { . pk_seqali P (pk pour chaque sequence) . pk_seqinfo I (de l'info de la sequence) . seqname V64 (nom affiche) . seq T (aminoacid + gap) } - ln_mac_seqali { . pk_mac I . pk_seqali I . pos I } - featali : les features des sequences DANS LE CONTEXT DE L ALIGNEMENT { . pk_featali P . ftype V32 (de feature (PFAM, secstr, ...)) . fstart I . fstop I . fcolor V32 . fscore R . fnote V256 . fcsys V8 (systeme coords, local ou global) } - ln_seqali_featali : { . pk_seqali I . pk_featali I } - clustering : definition generale du clustering { . pk_clustering P . pk_mac I . name V64 . method V64 . zone T } - ln_mac_clustering : { . pk_mac I . pk_clustering I . pos I } - cluster : sont les paquets de sequences d'un clustering donne. { . pk_cluster P . pk_clustering I . name V64 } - ln_seqali_cluster : { . pk_seqali I . pk_cluster I . pos I } - colmeasure : un calcul par colonne { . pk_colmeasure P . name V64 . method V64 } - ln_mac_colmeasure { . pk_mac I . pk_colmeasure I } - colscore : conservation { . pk_colscore P . pk_colmeasure I . name V64 . owner V64 . type V64 . cgroup T . data T } - ln_cluster_colscore { . pk_cluster I . pk_colscore I } - ln_seqali_colscore { . pk_seqali I - pk_colscore I } - annotation : anotations d'un mac donne { . pk_annotation P . pk_mac I . annotation T . zone T } - pdb : stockage des PDB { . pk_pdb P . name V4 . source T . header T } - chains : contient info sur chaines { . pk_chains P . pk_pdb I . name V1 . type V16 } - residues : residues de chaine { . pk_residues P . pk_pdb I . pk_chains I . rname1l V1 . rname3l V3 . rnbr V8 . type V16 } - atoms : info sur atome. na = numero atomique { . pk_atoms P . pk_pdb I . pk_chains I . pk_residues I . aname V4 . x R . y R . z R . b R . q R . na I } - objetinit : template objet { . pk_obj P . pk_pdb I . pk_chains I . pk_residues I . currsel I . surface I . ribbon I . ribcol V32 . catrace I . cacol V32 . atoms I . atmcol V32 . cpk I . pearl I . picked I . label V32 } " return } proc ValueAffy {Ps Fichier} { #Exemple de Fichier "[RepertoireAffyAnnot na32]/MG430A_2.0/Mouse430A_2.na32.annot.csv" set LesLignes [TabulonsSansQuote $Fichier "," ";" " " "GetListOfValues"] foreach Ligne $LesLignes { if {[regexp "$Ps" $Ligne]} { set LesElmts [split $Ligne ";"] EspionneL $LesElmts } } } proc ValueFromSerial {Texte} { return [ValueFromSeriallist [SeriallistFromSerial $Texte]] } proc ValueFromSeriallist {Liste} { return [lindex $Liste 1] } proc ValueOfTree {Tree} { return [DataSet value $Tree] } proc VanishIsolatedAgents {n {DoIt 0}} { set s $::Sequences($n) set nbC 0 for {set i 0} {$i < [string length $s]} {incr i} { set ai [string index $s $i] set isC [expr {$ai ne "."}] if {$isC} { incr nbC } else { if {$nbC > 0 && $nbC < 3} { set done 0 while {! $done} { set ai [string index $s $i-$nbC] set s [string replace $s $i $i] set s [string replace $s $i-$nbC $i-$nbC ".$ai"] set next [expr {$i+1}] if {$next >= [string length $s]} { set done 1 } elseif {[string index $s $next] ne "."} { set done 1 } else { incr i } } } set nbC 0 } } set ::Sequences($n) $s if {$DoIt == 0} { VanishIsolatedAgents $n 1 } return } proc VarianceDeLaListe {Liste {nOUnmoins1 nmoins1}} { set Mean [MoyenneDeLaListe $Liste] set n [llength $Liste] set Somme 0 foreach v $Liste { set Somme [expr $Somme + ($v - $Mean) * ($v - $Mean)] } if {[string equal -nocase $nOUnmoins1 "nmoins1"]} {return [expr $Somme * 1.0 / ($n - 1)]} return [expr $Somme * 1.0 / $n] } proc VariantSCR3 {} { foreach Fichier [lsort [glob "[RepertoireDuGenome]/atelier/SRC3/src1v*.tfa"]] { regsub ".tfa$" $Fichier "-Prot.tfa" FiPro set Entete [EnteteDuFichierTFA $Fichier] set Seq [QueLaSequenceDuFichierTFA $Fichier] set Pro [SeqNucToSeqPro $Seq] set ProtTfa [SequenceFormatTFA $Pro $Entete "protbrut"] Sauve $ProtTfa dans $FiPro } } proc VdWDe {e} { return [set ::Chm($e,vdw)] } proc VdrInteractivePattern {Sequence Strand} { # Recherche un motif en générant un mismatch (adapté récepteurs nucléaires) set Start 0 set End 0 set DR "" set SequenceOut "" set ListeDesPositionsPlus {} set ListeDesPositionsMoins {} if { $Strand == "+" } { set RegExp {[AG]G[TG]T[CG]A} append RegExp {|[CT]G[TG]T[CG]A} append RegExp {|[AG][ATC][TG]T[CG]A} append RegExp {|[AG]G[AC]T[CG]A} append RegExp {|[AG]G[TG][ACG][CG]A} append RegExp {|[AG]G[TG]T[AT]A} append RegExp {|[AG]G[TG]T[CG][TCG]} set ListeDesPositionsPlus [regexp -indices -all -inline -nocase "$RegExp" $Sequence] foreach PaireDeBornes $ListeDesPositionsPlus { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] if { [expr $NewStart - $End] == 4 } { set DR "DR3" } if { [expr $NewStart - $End] == 5 } { set DR "DR4" } if { [expr $NewStart - $End] == 7 } { set DR "DR6" } set Start $NewStart set End $NewEnd } if { [llength $ListeDesPositionsPlus] != 0 } { set SequenceOut [regexp -all -nocase "$RegExp" $Sequence] } } else { set RegExp {T[GC]A[CA]C[TC]} append RegExp {|[ACG][GC]A[CA]C[TC]} append RegExp {|T[AT]A[CA]C[TC]} append RegExp {|T[GC][CGT][CA]C[TC]} append RegExp {|T[GC]A[GC]C[TC]} append RegExp {|T[GC]A[CA][GAT][TC]} append RegExp {|T[GC]A[CA]C[AG]} set ListeDesPositionsMoins [regexp -indices -all -inline -nocase "$RegExp" $Sequence] foreach PaireDeBornes $ListeDesPositionsMoins { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] if { [expr $NewStart - $End] == 4 } { set DR "DR3" } if { [expr $NewStart - $End] == 5 } { set DR "DR4" } if { [expr $NewStart - $End] == 7 } { set DR "DR6" } set Start $NewStart set End $NewEnd } } set Retour "$DR" set Retour [string trim $Retour] return $Retour } proc VdrPHICS {OrganismeQuery Chromosome Clade Path {Projet Fichier} {LongueurVoulueDeChaqueCote 0} {DR ""} {SequenceQuery ""}} { # A partir d'une séquence d'un organisme, récuopére les séquences alignées par l'UCSC dans tous les organismes dispos # /!\ Vérifier les MAJ UCSC opour utiliser les derniéres versions des alignements ou pour intégrer de nouveaux alignements /! # Gestion des paths d'alignements é explorer en fonction de l'organisme query set I 1 set CompteurEcrit 0 set ResultatPHICS "" set ListeDeSortie {} if { $DR != "" } { set DRnumero [string range $DR 2 2] } set Chromotexte "-Chr" set FichierDesCoordonnees [open "$Path$Chromosome.pro" "r"] set FichierDesConservations [open "$Path$Chromosome$OrganismeQuery.VS.$Clade.phics" "w"] set FichierDesRepechesHuman [open "$Path$Chromosome$OrganismeQuery.VS.$Clade.hrep" "w"] set FichierDesRepechesMouse [open "$Path$Chromosome$OrganismeQuery.VS.$Clade.mrep" "w"] set ListeDeSortie {} if { $Clade == "mouse" } { set Alignement$I "/genomics/link/UCSCAlignements/mm9/" set Espece$I "mm9" incr I } gets $FichierDesCoordonnees LigneCoordonnees # Boucle de stockage du fichier de Coordonnees dans une liste while { [gets $FichierDesCoordonnees LigneCoordonnees] >=0 } { lappend ListeCoordonnees $LigneCoordonnees } close $FichierDesCoordonnees unset FichierDesCoordonnees #Routine de chargement des fichiers for {set Espece 1} {$Espece < $I} {incr Espece} { set NomEspece [set Espece$Espece] set NomAlignement [set Alignement$Espece] set Path "$NomAlignement chr $Chromosome .hg18. $NomEspece .net.axt" regsub -all -nocase {\s} $Path "" Path set AlignementChromosome [open "$Path" "r"] set ListeDesAlignementsDeCetteEspece {} Espionne "Stockage des alignements du chromosome $Chromosome $OrganismeQuery avec $Clade" while { [gets $AlignementChromosome LigneAli] >=0 } { if {$LigneAli != "" } { ScanLaListe $LigneAli SeqNum ChromosomeH AlignementStartQ EndH AlignementChromosomeT AlignementStartT AlignementEndT AlignementOrientationT ScoreAli set LigneEntete [string range $ChromosomeH 0 2 ] if { $LigneEntete == "chr" } { set FullLine "$ChromosomeH $AlignementStartQ $EndH $AlignementChromosomeT $AlignementStartT $AlignementEndT $AlignementOrientationT $ScoreAli" gets $AlignementChromosome SeqH ScanLaListe $SeqH SequenceH gets $AlignementChromosome SeqM ScanLaListe $SeqM SequenceM set FullLine "$FullLine $SequenceH $SequenceM" lappend ListeDesAlignementsDeCetteEspece $FullLine set $ChromosomeH "" } } } close $AlignementChromosome unset AlignementChromosome set NumeroLigneEntree -1 set PlusAucuneChanceDeTrouver "Faux" Espionne "Balayage des coordonnees en entree" foreach Coordonnee $ListeCoordonnees { incr NumeroLigneEntree set NomEspece [set Espece$Espece] set QuelMismatchs1 " " set QuelMismatchs1 " " set alias "" ScanLaListe $Coordonnee Acc Deb Fin Orientation Distance ExonOutron UtrOuCDS DebutExonOutron FinExonOuIntron DebutOuFinExonOuIntron DistanceAlaBorneDeExonOuIntron ChromosomeQuery DRQuery IdQuery StartQuery EndQuery OrientationQuery SequenceQuery ScoreQuery NbMismatchQuery QuelsMismatchs gID displayID alias set CoordonneeCopy $Coordonnee set Coordonnee "$ChromosomeQuery $IdQuery $DRQuery $StartQuery $EndQuery $OrientationQuery $SequenceQuery $ScoreQuery $NbMismatchQuery $QuelsMismatchs" set LongueurQ [string length $SequenceQuery] set Stockage $ResultatPHICS set input 0 set RandomOuPas "NON" set Conservation 0 set ConservesSansGap 0 set ConservesMaisGap 0 set NonConserves 0 set ConservesTotaux 0 set Retenus 0 set NonRetenus 0 set LongueurSequenceTotale [expr $EndQuery - $StartQuery] foreach Alignement $ListeDesAlignementsDeCetteEspece { set Conservation 0 ScanLaListe $Alignement ChromosomeH AlignementStartQ AlignementEndQ AlignementChromosomeT AlignementStartT AlignementEndT AlignementOrientationT ScoreAli SeQ SeT set RandomOuPas "Complet" if { [regexp -- {random} $AlignementChromosomeT] } { set RandomOuPas "Random" } if { $StartQuery >= $AlignementStartQ && $EndQuery <= $AlignementEndQ} { if { $OrientationQuery == "-" } { set SequenceRegexp [NucToReverseAndComplementNuc $SequenceQuery] } else { set SequenceRegexp $SequenceQuery } set ListeDistanceAvantQueryAvecGaps [regexp -indices -all -inline -nocase "$SequenceRegexp" $SeQ] # Si on ne retrouve pas la séquence humaine, il y a un gap chez human # On récup alors une portion plus large que la séquence souris qu'on passera au crible du pattern # si on retrouve une signature VDR (2 MM allowed) , on garde. if { [llength $ListeDistanceAvantQueryAvecGaps] == 0 } { set StartRelatifAvecEventuellementDesGapsQ [expr $StartQuery - $AlignementStartQ] if { [expr $StartRelatifAvecEventuellementDesGapsQ - 20] <= 0 } { set StartBout 0 } else { set StartBout [expr $StartRelatifAvecEventuellementDesGapsQ - 20] } set MouseExtend [string range $SeT $StartBout [expr $StartRelatifAvecEventuellementDesGapsQ + $LongueurQ + 20] ] regsub -all -nocase {\-} $MouseExtend "" MouseExtend set MouseVdrPattern "" set MouseVdrPattern [VdrInteractivePattern $MouseExtend $AlignementOrientationT] if { [string range $MouseVdrPattern 0 1] == "DR" } { puts $FichierDesRepechesHuman "Human$IdQuery $DRQuery $AlignementChromosomeT None None $AlignementOrientationT $MouseVdrPattern $SequenceQuery $gID $displayID $alias" } break } # Si une séquence occure plusieurs fois dans le meme alignement, on scan pour chaque occurence # On aura donc des séquences traitées autant de fois qu'elles ont de duplicons donc des doublons dans # le fichier en sortie mais donnannt une idée des génes multirégulés set Multi 0 foreach HitRegexp $ListeDistanceAvantQueryAvecGaps { incr Multi if { $Multi > 1 } { Espionne "Multiii !" } ScanLaListe $HitRegexp StartExp EndExp set DistanceAvantQueryAvecGaps $StartExp set DistanceAvantTargetAvecGaps $StartExp set SequenceAvantQueryAvecGaps [string range $SeQ 0 [expr $DistanceAvantQueryAvecGaps - 1]] set SequenceAvantTargetAvecGaps [string range $SeT 0 [expr $DistanceAvantQueryAvecGaps - 1]] regsub -all -nocase {\-} $SequenceAvantQueryAvecGaps "" SequenceAvantQuerySansGaps regsub -all -nocase {\-} $SequenceAvantTargetAvecGaps "" SequenceAvantTargetSansGaps set DistanceAvantQuerySansGaps [ llength [split $SequenceAvantQuerySansGaps "" ]] set DistanceAvantTargetSansGaps [ llength [split $SequenceAvantTargetSansGaps "" ]] set NbGapsBeforeQ [expr $DistanceAvantQueryAvecGaps - $DistanceAvantQuerySansGaps] set NbGapsBeforeT [expr $DistanceAvantTargetAvecGaps - $DistanceAvantTargetSansGaps] set SequenceQ [string range $SeQ $DistanceAvantQueryAvecGaps [expr $DistanceAvantQueryAvecGaps - 1 + $LongueurQ] ] set SequenceT [string range $SeT $DistanceAvantQueryAvecGaps [expr $DistanceAvantQueryAvecGaps - 1 + $LongueurQ] ] set ReverseQ [NucToReverseAndComplementNuc $SequenceQ] set ReverseT [NucToReverseAndComplementNuc $SequenceT] set StartT [expr $AlignementStartT + $DistanceAvantTargetSansGaps] set EndT [expr $StartT + $LongueurQ - 1] if { $AlignementOrientationT == "-" } { set ChromoSize [ChromoSize $Clade "mm9" $AlignementChromosomeT] set StartT [ expr $ChromoSize - $StartT] set EndT [expr $StartT + $LongueurQ - 1] } set DRQuery "DR3" if { [ regexp -- {-} $SequenceT ] } { # S'il y a des gaps peu nombreux et centrés, éa peut juste changer la classe de DR ==> On les stocke set GapsChezMouse 1 incr ConservesMaisGap 1 set ListeDesGapsSequencesT [regexp -indices -all -inline -nocase {\-} $SequenceT] set NombreDeGapsSequenceT [llength $ListeDesGapsSequencesT] if { $DRQuery == "DR4" && $NombreDeGapsSequenceT == 1 } { puts $FichierDesRepechesMouse "Human$IdQuery $DRQuery $AlignementChromosomeT $StartT $EndT $AlignementOrientationT $SequenceT GapsT$NombreDeGapsSequenceT $SequenceQ $gID $displayID $alias" } if { $DRQuery == "DR6" && $NombreDeGapsSequenceT <= 3 && $NombreDeGapsSequenceT >= 2} { puts $FichierDesRepechesMouse "Human$IdQuery $DRQuery $AlignementChromosomeT $StartT $EndT $AlignementOrientationT $SequenceT GapsT$NombreDeGapsSequenceT $SequenceQ $gID $displayID $alias" } } else { set GapsChezMouse 0 } if { !$GapsChezMouse } { set DRnumero [string range $DRQuery 2 2] set ConsensusCheck [RGKTSA $SequenceT $DRnumero] set ReverseCheck [RGKTSA $ReverseT $DRnumero] set NbMismatchT [llindex [split $ConsensusCheck "/"] 1] set NbMismatchRT [llindex [split $ReverseCheck "/"] 1] if { $NbMismatchT > $NbMismatchRT } { set ConsensusCheck $ReverseCheck set SequenceT $ReverseT } set GapsOuPas "SansGaps" } else { set ConsensusCheck "X/X/X" set GapsOuPas "AvecGaps" } set ResultatPHICS "$AlignementChromosomeT:$StartT-$EndT/$AlignementOrientationT/$GapsOuPas/$SequenceT/$ConsensusCheck" break } unset ListeDistanceAvantQueryAvecGaps } } lappend ListeDeSortie "$Coordonnee $ResultatPHICS $gID $displayID $alias" } set Long [llength $ListeDeSortie] Espionne $Long unset ListeDesAlignementsDeCetteEspece } #Routine de vidage de la liste de sortie dans le fichier de sortie set Ecrit 0 foreach LigneSortie $ListeDeSortie { incr Ecrit puts $FichierDesConservations $LigneSortie } close $FichierDesConservations close $FichierDesRepechesMouse close $FichierDesRepechesHuman } proc VdrPatternMouse {chr} { # Recherche un motif en générant un mismatch (adapté récepteurs nucléaires) set FichierSouris "/tmp/Conservation/SequencesMouse.tfa" set FichierDesDR3 "/tmp/Conservation/DR3-Mouse-Chr$chr.txt" set FichierDesDR4 "/tmp/Conservation/DR4-Mouse-Chr$chr.txt" set FichierDesDR6 "/tmp/Conservation/DR6-Mouse-Chr$chr.txt" if { [file exists $FichierDesDR3] } { file delete $FichierDesDR3 } if { [file exists $FichierDesDR4] } { file delete $FichierDesDR4 } if { [file exists $FichierDesDR6] } { file delete $FichierDesDR6 } set DR3 0 set DR4 0 set DR6 0 while { [gets $FichierSouris Ligne] >=0 } { array unset SeqTFA array set SeqTFA [readFasta $Ligne 0] set Acc [lindex $SeqTFA(index) 0] set RegExp {[AG]G[TG]T[CG]A} append RegExp {|[CT]G[TG]T[CG]A} append RegExp {|[AG][ATC][TG]T[CG]A} append RegExp {|[AG]G[AC]T[CG]A} append RegExp {|[AG]G[TG][ACG][CG]A} append RegExp {|[AG]G[TG]T[AT]A} append RegExp {|[AG]G[TG]T[CG][TCG]} set ListeDesPositionsPlus [regexp -indices -all -inline -nocase "$RegExp" $SeqTFA($Acc,sequence)] set RegExp {T[GC]A[CA]C[TC]} append RegExp {|[ACG][GC]A[CA]C[TC]} append RegExp {|T[AT]A[CA]C[TC]} append RegExp {|T[GC][CGT][CA]C[TC]} append RegExp {|T[GC]A[GC]C[TC]} append RegExp {|T[GC]A[CA][GAT][TC]} append RegExp {|T[GC]A[CA]C[AG]} set ListeDesPositionsMoins [regexp -indices -all -inline -nocase "$RegExp" $SeqTFA($Acc,sequence)] set Start 0 set End 0 set DR3f [open $FichierDesDR3 "w"] set DR4f [open $FichierDesDR4 "w"] set DR6f [open $FichierDesDR6 "w"] foreach PaireDeBornes $ListeDesPositionsPlus { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] if { [expr $NewStart - $End] == 4 } { incr DR3 puts $DR3f "$DR3 $Start $NewEnd +" } if { [expr $NewStart - $End] == 5 } { incr DR4 puts $DR4f "$DR4 $Start $NewEnd +" } if { [expr $NewStart - $End] == 7 } { incr DR6 puts $DR6f "$DR6 $Start $NewEnd +" } set Start $NewStart set End $NewEnd } set Start 0 set End 0 foreach PaireDeBornes $ListeDesPositionsMoins { set NewStart [expr [lindex $PaireDeBornes 0] + 1] set NewEnd [expr [lindex $PaireDeBornes 1] + 1] if { [expr $NewStart - $End] == 4 } { incr DR3 puts $DR3f "$DR3 $Start $NewEnd -" } if { [expr $NewStart - $End] == 5 } { incr DR4 puts $DR4f "$DR4 $Start $NewEnd -" } if { [expr $NewStart - $End] == 7 } { incr DR6 puts $DR6f "$DR6 $Start $NewEnd -" } set Start $NewStart set End $NewEnd } } close $DR3f close $DR4f close $DR6f } proc VeFromSbgpDatabase {{V ""} {P ""} {S ""}} { global VE set GetFirst 1 if {$V=="" && $P=="" && $S==""} { set GetFirst 0 set V "%" } set SiteVe "http://130.79.76.61/TREX/steroids/steroids_list/Cloning/cloning_list/Vetxt.php" set Url $SiteVe append Url "?ve=" append Url $V append Url "&protein=" append Url $P append Url "&scientist=" append Url $S set LesLignes {} HttpCopy $Url LesLignes if {$LesLignes=={}} { return "" } set Entete [lindex $LesLignes 0] set LesLignes [lrange $LesLignes 1 end] if {$Entete==""} { set Entete [lindex $LesLignes 0] set LesLignes [lrange $LesLignes 1 end] } if {$GetFirst} { return [lindex $LesLignes 0] } if {[info exists VE]} {unset VE} set Precedent "" foreach NomCol [split $Entete ";"] { regsub -all "#" $NomCol "" NomCol set NomCol [string trim $NomCol] regsub -all " " $NomCol "_" NomCol if {$NomCol==""} { set NomCol "${Precedent}_2" } lappend LesNomsCols $NomCol } set VE(ListOf,Columns) $LesNomsCols set NLig 0 foreach Ligne $LesLignes { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } incr NLig set LesVals [split $Ligne ";"] foreach NomCol $LesNomsCols Val $LesVals { if {$NomCol=="VE"} { set ValVE $Val set VE($ValVE,Line) $Ligne lappend VE(ListOf,VE) $ValVE } set VE($NLig,$NomCol) $Val set VE($ValVE,$NomCol) $Val } } return $NLig } proc VecItem {Fichier} { if { ! [file exists $Fichier]} { return {} } set LesXYZP {} foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z0-9;]} $Ligne]} { continue } if { [regexp -nocase {^\#} $Ligne]} { continue } if {[regexp {;} $Ligne] || [regexp {\:=} $Ligne]} { if {[info exists XYZP]} { lappend LesXYZP $XYZP unset XYZP } } if {[regexp {;} $Ligne]} { continue } if {[regexp {\:=} $Ligne]} { regsub {\:=} $Ligne " " Ligne scan $Ligne "%s %s %s" Objet MotVec ItemOuDots if { ! [regexp -nocase "vec" $MotVec]} { FaireLire "$Ligne is wrong" } set Item [regexp -nocase "^item" $ItemOuDots] set Dots [regexp -nocase "^dots" $ItemOuDots] set XYZP {} set y 0.0 continue } regsub -all {[\t\,]} $Ligne " " Ligne set y [expr $y+1] set z 0.0 scan $Ligne "%s %f %f %f" PL x y z set PL [string tolower $PL] if {$Item} { lappend XYZP $z $y $x $PL } if {$Dots} { lappend XYZP $x $y $z p lappend XYZP $x $y $z l } } return $LesXYZP } proc VectDeLaRosace {} { global OrdEtcDir TBlosum ListeDesAcidesAmines # set f [file join $OrdEtcDir pam250.bla] set f [file join $OrdEtcDir blosum62.dat] InitTBlosum $f array set TPam [array get TBlosum] #set laa [lrange $ListeDesAcidesAmines 0 end-1] set laa [split "ARNDCQEGHILKMFPSTWYV" ""] set lx "2 20 20" foreach a $laa { foreach b $laa { lappend lx [set TPam($a,$b)] } } set X [join $lx " "] lassign [nist_pca $X] Evals Evecs set Evals [lrange $Evals 3 end] AnalyseValeursPropres $Evals for {set k 0} {$k < 20} {incr k} { set lv [lrange $Evecs [expr {3 + $k*20}] [expr {22 + $k*20}]] for {set i 0} {$i < 20} {incr i} { lappend Vec($i) [lindex $lv $i] } } set Ev1 $Vec(0) set Ev2 $Vec(1) set Ev3 $Vec(2) package require sqlite for {set i 1} {$i < 4} {incr i} { puts "\n $i vecteur propre" puts "==================" lassign [AnalyseVecteursPropres [set Ev$i]] k$i cp if {$i != -1} { puts "Test -1.0 * Vect. Propre" set En$i [V_SV -1.0 * [set Ev$i]] lassign [AnalyseVecteursPropres [set En$i]] kn$i cn if {$cn > $cp} { set Ev$i [set En$i] set k$i [set kn$i] } } set Av$i [VecteurDeAAIndex [set k$i]] } FittingParRotation $Ev1 $Ev2 $Ev3 $Av1 $Av2 $Av3 exit } proc Vecteur {args} { return $args } proc VecteurDeAAIndex {pk} { return [lindex [$::db eval {select vecteur from aaindex where pk_aaindex = $pk}] 0] } proc VecteurVRP {AA} { global FichierGscopeVRP global VecteurVRP if {[info exists VecteurVRP($AA)]} { return [set VecteurVRP($AA)] } if {[info exists VecteurVRP("EstCharge")]} { return [set VecteurVRP(*)] } foreach Ligne [LesLignesDuFichier "$FichierGscopeVRP"] { scan $Ligne "%s %f %f" A X Y set VecteurVRP($A) "$X $Y" } set VecteurVRP("EstCharge") "0.0 0.0" return [VecteurVRP $AA]] } proc Vectoriel {u v} { #lM Prdt Vectoriel definit pour 3d. #lM ... on va plus vite .... set zu 0.0 ; set zv 0.0 lassign $u xu yu zu lassign $v xv yv zv set xw [expr {$yu*$zv - $zu*$yv}] set yw [expr {$zu*$xv - $xu*$zv}] set zw [expr {$xu*$yv - $yu*$xv}] return [list $xw $yw $zw] } proc VectorsRecuDeDidier {} { foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/vecteurs/VectorsRecuDeDidier.txt"] { if {[regexp ">" $Ligne]} { scan $Ligne "%s" Access regsub ">" $Access "" Access if {[info exists Seq($Access)]} { FaireLire "dejavu $access" } set Seq($Access) "" lappend LesAccess $Access } else { set Ligne [string toupper $Ligne] if {[regexp -nocase {[^atgc]} $Ligne]} { FaireLire $Ligne } append Seq($Access) $Ligne } } foreach Access $LesAccess { set ADN $Seq($Access) set F [FindVector $Access] if {$F!=""} { set Moi [QueLaSequenceDuFichierTFA $F] if { ! [string equal -nocase $ADN $Moi]} { VoisinADN ">[file tail $F]\n$ADN\n>Moi\n$Moi" AfficheVariable "$F" "AvecRetour" } continue } set L [string length $ADN] set TFA [SequenceFormatTFA $ADN "$Access cloning vector $L bp. (from Didier)"] Sauve $TFA dans "[RepertoireDuGenome]/vecteurs/pDEST/$Access.tfa" Espionne "$Access $L" } } proc Verbose_Mode {{Quoi ""}} { Wup "Permet de dire et positionner le mode Verbose du programme" global Verbose_Mode if {$Quoi != ""} { if {$Quoi != "0" && $Quoi != "1"} { #Par defaut on dit non Verbose set Verbose_Mode 0 } else { set Verbose_Mode $Quoi } } else { if {[info exists Verbose_Mode]} { return $Verbose_Mode } else { #Par defaut on dit non Verbose set Verbose_Mode 0 } } return $Verbose_Mode } proc Verif1 {} { #rr a renomme proc Verif set Fichier1 "[RepertoireDuGenome]/fichesannotation/bacteria" set Fichier2 "[RepertoireDuGenome]/fichesannotation/eukaryota" foreach Ligne1 [LesLignesDuFichier $Fichier1] { scan $Ligne1 "%s %s" A B foreach Ligne2 [LesLignesDuFichier $Fichier2] { scan $Ligne2 "%s %s" C D if {$A == $C} { if {$B == 0 && $D == 1} { Espionne "$A $C $B $D" } } } } } proc Verif2 {} { set Fichier1 "[RepertoireDuGenome]/fichesannotation/mycobacterium_bovis" set Fichier2 "[RepertoireDuGenome]/fichesannotation/mycobacterium_tuberculosis" lappend Liste $Fichier1 lappend Liste $Fichier2 foreach Fichier $Liste { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s" Nom Presence lappend LaPresenceOrganismeDuNom($Nom) $Presence } } } proc VerifAnnaick {FichierCourtes} { foreach Ligne [LesLignesDuFichier $FichierCourtes] { if {$Ligne==""} {continue} set LesData [split $Ligne "\t"] set DD [lindex $LesData 0] if {![info exists Vu($DD)]} {set Vu($DD) 1} else {Espionne $DD} set AccessProt [InterrogeProtAndmRNAChoisis $DD ProteineChoisie Access] set Orga [InterrogeProtAndmRNAChoisis $DD OrganismeChoisi] if {$AccessProt=="NOPROTEIN" || $AccessProt==""} { continue } elseif {$Orga=="Homo sapiens"} {set Prot 1; Espionne "$DD $AccessProt $Orga"} if {$AccessProt!="NOPROTEIN" && $AccessProt!="" && $Orga!="Homo sapiens"} {set Prot 1; Espionne "$DD $AccessProt $Orga"} } } proc VerifBlastAffy {} { foreach Nom [ListeDesPABs] { set FichiermRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" if {[file exists $FichiermRNA]} { set FichierBlastmRNA "[RepertoireDuGenome]/BlastnHumanmRNAaffy/$Nom" if {![file exists $FichierBlastmRNA]} {Espionne "$FichierBlastmRNA doesn t exist";continue} continue } elseif {[file exists $FichierProttfa]} { set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] set H 0 if {[regexp "from CONTIG" $EnteteProttfa]} { if {[regexp "from Homo sapiens from CONTIG" $EnteteProttfa]} {set H 1} } elseif {[regexp "from Homo sapiens" $EnteteProttfa] || [regexp "from mitochondrion Homo" $EnteteProttfa]} {set H 1} if {$H==1} { set FichierBlastProt "[RepertoireDuGenome]/tBlastNHumanProtAffy/$Nom" if {![file exists $FichierBlastProt]} {Espionne "$FichierBlastProt doesn t exist"; continue} continue } } set FichierBlastNucmask "[RepertoireDuGenome]/BlastNNucmaskAffy/$Nom" if {![file exists $FichierBlastNucmask]} {Espionne "$FichierBlastNucmask doesn t exist"} } } proc VerifDansEVItest {} { #rR a renomme cette proc Verif set nbseq 0; set nbpab 0; set nbnuc 0; set nbprotembl 0; set nbprotemblrecupere 0 set FichierAttritout "/genomics/link/EVItest/parser/AttriToutVf" foreach Ligne [LesLignesDuFichier $FichierAttritout] { if {[regexp "^>" $Ligne]} {incr nbseq} } set FichierBornePabs "/genomics/link/EVItest/fiches/bornesdespabs" foreach Ligne2 [LesLignesDuFichier $FichierBornePabs] { scan $Ligne2 "%s" NomPab incr nbpab } set RepertoireNuctfa "/genomics/link/EVItest/nuctfa" foreach F [glob -nocomplain "$RepertoireNuctfa/EVI*"] { incr nbnuc } set RepertoireProtemblR "/genomics/link/EVItest/protemblRecupere" foreach F [glob -nocomplain "$RepertoireProtemblR/EVI*"] {incr nbprotemblrecupere} set RepertoireProtembl "/genomics/link/EVItest/protembl" foreach F [glob -nocomplain "$RepertoireProtembl/EVI*"] { incr nbprotembl } #set RepertoireProtemblR "/genomics/link/EVI3/protemblreserve" # foreach F [glob -nocomplain "$RepertoireProtemblR/EVI*"] #set Queue [file tail $F] #set LesMots [split $Queue "_"] #set Nom [lindex $LesMots 0] #if {[info exists DejaVuR($Nom)]} {incr DejaVuR($Nom)} else {set DejaVuR($Nom) 1} set RepertoireProtembl "/genomics/link/EVItest/protembl" foreach F [glob -nocomplain "$RepertoireProtembl/EVI*"] { set Queue [file tail $F] set LesMots [split $Queue "_"] set Nom [lindex $LesMots 0] if {[info exists DejaVu($Nom)]} { incr DejaVu($Nom) } else { set DejaVu($Nom) 1 } } Espionne [array get DejaVu] Espionne "nbseq $nbseq" Espionne "nbpab $nbpab" Espionne "nbnuc $nbnuc" #Espionne [array size DejaVu] #Espionne [array size DejaVuR] Espionne "nbprotemblrecupere= $nbprotemblrecupere" Espionne "nbprotembl= $nbprotembl" } proc VerifDesCopains {} { global RepertoireDuGenome global NotreOS foreach Nom [ListeDesPABs] { set FichierDesCops "$RepertoireDuGenome/tfasdescopains/$Nom" if { ! [file exists $FichierDesCops]} { continue } set n 0 set LesPositions {} foreach Ligne [LesLignesDuFichier $FichierDesCops] { if { ! [regexp "^>" $Ligne]} { continue } incr n if {[regexp "OS\:$NotreOS" $Ligne]} { lappend LesPositions [format "%3d" $n] } } if {$n<40} { continue } Espionne "$Nom $n [join $LesPositions " "]" } } proc VerifEst {{Liste ""}} { set RepNuctfa "[RepertoireDuGenome]/nuctfa" set RepBlastnest "[RepertoireDuGenome]/blastnest-mouse" set FichierSelectedEST "[RepertoireDuGenome]/fiches/SelectedEST" if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } set total 0; set noest 0; set passeq 0; set pbblast1 0; set pbblast2 0; set pbest 0 set cas1 0; set cas2 0; set cas3 0; set cas4 0 foreach Ligne [LesLignesDuFichier $FichierSelectedEST] { scan $Ligne "%s %s" Name Acc if {$Acc=="NoESTFound"} { if {[regexp "bidon" [lindex [LesLignesDuFichier $RepNuctfa/$Name] 0]]} { continue } incr noest #set Ligne $Name; lappend LesLignes $Ligne lappend LesNamesSsEst $Name } } set LesNamesSsEst [ListeSansDoublon $LesNamesSsEst] #SauveLesLignes $LesLignes dans "[RepertoireDuGenome]/LesNamesSsEst2" foreach Nom $Liste { set cestbon1 0; set cestbon2 0; set nohits1 0; set nohits2 0 regsub "EVI" $Nom "" NomSsEvi incr total Espionne $Nom set H "$RepNuctfa/$Nom" set LesLignes [LesLignesDuFichier $H] if {[regexp "bidon" [lindex $LesLignes 0]]} { incr passeq; Espionne "pas seq" continue } set F "$RepBlastnest/$Nom" if {![file exists $F]} { incr pbblast1 Espionne "fichier blastnest1 nexiste pas"; } else { foreach Ligne [LesLignesDuFichier $F] { if {[regexp {^Gap Penalties} $Ligne]} { set cestbon1 1 break } if {[regexp "No hits found" $Ligne]} { set nohits1 1 } } if {!$cestbon1} { incr pbblast1 Espionne "fichier blastnest1 pas bon" } } set G "$RepBlastnest/$Nom.reduced" if {![file exists $G]} { incr pbblast2 Espionne "fichier blastnest2 nexiste pas"; } else { foreach Ligne [LesLignesDuFichier $G] { if {[regexp {^Gap Penalties} $Ligne]} { set cestbon2 1 break } if {[regexp "No hits found" $Ligne]} { set nohits2 1 } } if {!$cestbon2} { incr pbblast2 Espionne "fichier blastnest2 pas bon" } } if {$nohits1 && $nohits2} {incr cas1;Espionne "cas1"} if {!$nohits1 && !$nohits2} {incr cas2;Espionne "cas2"} if {$nohits1 && !$nohits2} {incr cas3;Espionne "cas3"} if {!$nohits1 && $nohits2} {incr cas4;Espionne "cas4"} foreach elmt $LesNamesSsEst { if {$elmt==$Nom} { if {!$nohits1} { Espionne "pb dans fichier Selectedest 1" incr pbest } if {!$nohits2} { Espionne "pb dans fichier Selectedest 2" incr pbest } } } } Espionne "total $total";Espionne "passeq $passeq";Espionne "noest $noest";Espionne "pbblast1 $pbblast1";Espionne "pbblast2 $pbblast2";Espionne "pbest $pbest" Espionne "cas1 $cas1";Espionne "cas2 $cas2";Espionne "cas3 $cas3";Espionne "cas4 $cas4" } proc VerifFichierAccessChoisis {FichierAccessChoisis FichierDesPABs FichierSortie} { foreach Ligne [LesLignesDuFichier $FichierAccessChoisis] { if {$Ligne==""} {continue} set DD [lindex [split $Ligne "\t"] 0 ] Espionne $DD set Vu($DD) 1 } #FichierDesPABs=fiches/LesPABsSansJumeauxSeqSansCourts set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set Liste "" foreach Nom $L { if {![info exists Vu($Nom)]} {lappend Liste $Nom} } Espionne "nb pabs des 1954 absents de FichierAccessChoisis: [llength $Liste]" SauveLesLignes $Liste dans $FichierSortie } proc VerifFichierTfaDesQuery {} { set FichierOut "/genomics/link/SpliRetMouse/FichiersModifUnique/FichierTfaDesQuery" foreach Ligne [LesLignesDuFichier $FichierOut] { if {[regexp "^>" $Ligne]} { set cluster [lindex [split $Ligne " "] 0] if {[info exists DejaVu($cluster)]} { incr DejaVu($cluster) } else { set DejaVu($cluster) 1 } } } foreach Clef [array names DejaVu] { if {$DejaVu($Clef)>1} { Espionne "$Clef $DejaVu($Clef)" } } } proc VerifFungi {} { set NbFungi 0 foreach Ligne [LesLignesDuFichier "/genomics/link/BaDe/banques/Proteome201501_TaillesDesOs.txt"] { set LesMots [split $Ligne "_"] set TaxId [lindex $LesMots 2] set EstDansProteome($TaxId) 1 if {[QuestionDeScience EVImm "ret JeSuisTonAncetre Fungi $TaxId"]} { incr NbFungi } } set NbHitFungi 0 foreach Ligne [LesLignesDuFichier "/genomics/link/BaDe/taxobla/BaDe00007"] { set LesMots [LesMotsDuTexte $Ligne] set TaxId [lindex $LesMots 2] set OS [lindex $LesMots 3] if {[QuestionDeScience EVImm "ret JeSuisTonAncetre Fungi $TaxId"]} { incr NbHitFungi } } Espionne "$NbFungi $NbHitFungi" } proc VerifInterproscan {} { foreach Box [ListeDesPABs] { if {![file exists "[RepertoireDuGenome]/Interproscan/$Box.is"]} { Espionne $Box } } } proc VerifJumeauxAdd {FichierEntree FichierJum} { set n 0 foreach Ligne [LesLignesDuFichier $FichierEntree] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach J $LesJumeaux {set Vu($J) 1} } foreach Ligne [LesLignesDuFichier $FichierJum] { if {$Ligne==""} {continue} set LesElts [split $Ligne " "] foreach Elt $LesElts { if {![info exists Vu($Elt)]} {incr n;Espionne $Elt} } } return $n } proc VerifLongSqMSF {file} { global LNOrdali global Sequence set pab [file tail $file] DecortiqueUnMSF $file LNOrdali Sequences foreach seq $LNOrdali { regsub -all "\\." [set Sequences($seq)] "" seq$seq set lg [string length [set seq$seq]] if {$lg > 3000} { puts "pour $pab, on a sq > 3000" #puts "pour $seq, on a $lg" break } } return 1 } proc VerifMasking {{Liste ""}} { set passeq 0; set manquefichier 0; set pbout 0; set pbrm 0; set pbtmp 0; set pbblast 0 set RepNucmask "[RepertoireDuGenome]/nucmask" if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set onassextension 0; set onam 0; set onarm 0; set onamrm 0; set onablastnhtg 0; set onamasked 0; set onaout 0; set onatmp 0; set onatmpcat 0; set onatmpstderr 0 Espionne "" Espionne "$Nom" set cestbon 0; set nbfichier 0 set H "[RepertoireDuGenome]/nuctfa/$Nom" set LesLignes [LesLignesDuFichier $H] if {[regexp "bidon" [lindex $LesLignes 0]]} { incr passeq; Espionne "pas seq" continue } foreach G [glob -nocomplain "$RepNucmask/$Nom*"] { set Queue [file tail $G] if {$Queue==$Nom} {set onassextension 1} if {$Queue=="$Nom.m"} {set onam 1} if {$Queue=="$Nom.rm"} {set onarm 1} if {$Queue=="$Nom.mrm"} {set onamrm 1} if {$Queue=="$Nom.blastnhtg"} {set onablastnhtg 1} if {$Queue=="$Nom.masked"} {set onamasked 1} if {$Queue=="$Nom.out"} {set onaout 1} if {$Queue=="$Nom.tmp"} {set onatmp 1} if {$Queue=="$Nom.tmp.cat"} {set onatmpcat 1} if {$Queue=="$Nom.tmp.stderr"} {set onatmpstderr 1} #Espionne $G incr nbfichier } if {$nbfichier < 10} { Espionne "manque un fichier" incr manquefichier if {!$onassextension} {Espionne "manque ssextension"} if {!$onam} {Espionne "manque m"} if {!$onarm} {Espionne "manque rm"} if {!$onamrm} {Espionne "manque mrm"} if {!$onablastnhtg} {Espionne "manque blastnhtg"} if {!$onamasked} {Espionne "manque masked"} if {!$onaout} {Espionne "manque out"} if {!$onatmp} {Espionne "manque tmp"} if {!$onatmpcat} {Espionne "manque tmpcat"} if {!$onatmpstderr} {Espionne "manque tmpstderr"} } set E "$RepNucmask/$Nom.out" if {![file exists $E]} { incr pbout Espionne "fichier out nexiste pas" } else { set LesLignes [LesLignesDuFichier $E] set long [llength $LesLignes] if {$long<2} { incr pbout Espionne "fichier out pas complet" } } set J "$RepNucmask/$Nom.rm" if {![file exists $J]} { incr pbrm Espionne "fichier rm nexiste pas" } else { set LesLignes2 [LesLignesDuFichier $J] set premiereligne [lindex $LesLignes2 0] set LesMots [split $premiereligne "."] if {[lindex $LesMots 1]==""} { incr pbrm Espionne "pas fin rm" } } set K "$RepNucmask/$Nom.tmp" if {![file exists $K]} { incr pbtmp Espionne "fichier tmp nexiste pas" } else { set LesLignes3 [LesLignesDuFichier $K] set deuxiemeligne [lindex $LesLignes3 1] if {[regexp {[a-z]} $deuxiemeligne]} { incr pbtmp Espionne "pas bon tmp" } } set F "$RepNucmask/$Nom.blastnhtg" if {![file exists $F]} { incr pbblast Espionne "fichier blastnhtg nexiste pas"; } else { foreach Ligne [LesLignesDuFichier $F] { if {[regexp {^Gap Penalties} $Ligne]} { set cestbon 1 break } } #if {$cestbon} {Espionne "fichier blastnhtg bon"} if {!$cestbon} { incr pbblast Espionne "fichier blastnhtg pas bon" } } } Espionne "passeq $passeq" Espionne "manquefichier $manquefichier" Espionne "pbout $pbout" Espionne "pbrm $pbrm" Espionne "pbtmp $pbtmp" Espionne "pbblast $pbblast" } proc VerifMemeNombreLettres {} { set Fichier "[RepertoireDuGenome]/transcriptomique/MetaCluster/Ravi/TfaAllexp_cluster.tfa" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp ">" $Ligne]} {continue} set nombre [string length $Ligne] #Espionne $nombre lappend LesComptes $nombre } set LesComptes [ListeSansDoublon $LesComptes] EspionneL $LesComptes if {[llength $LesComptes]>1} {Espionne "probleme"} } proc VerifMiRNAdeMarianna {} { foreach Nom [ListeDesPABs] { set AccessRefseq [ExtraitInfo $Nom "AccessRefseq:"] lappend NomsDe($AccessRefseq) $Nom } foreach Ligne [LesLignesDuFichier "/genomics/link/MiRNAkarali/DeMarianna/unique.lst"] { scan $Ligne "%s" Access if {[info exists NomsDe($Access)]} { continue } set LE [LaSequenceDesBanques $Access] Espionne $Access EspionneL $LE } exit } proc VerifPABLoc {FichierLoc} { foreach Ligne [LesLignesDuFichier $FichierLoc] { if {$Ligne==""} {continue} set LesElts [split $Ligne "\t"] set DD [lindex $LesElts 0] if {![info exists Vu($DD)]} {set Vu($DD) 1; lappend LesDD $DD} } Espionne [llength $LesDD] #return $LesDD } proc VerifPresenceAddSeq {pab} { global laddSeq global PipeCollection set best "leon" if {[info exists laddSeq] && $laddSeq ne ""} { if {$PipeCollection} { set fileBestMsf [file join [RepertoireDuGenome] "leon" $pab] set fileNormd [file join [RepertoireDuGenome] "normd" $pab] } else { set fileBestMsf "[file rootname $pab].leon.msf" set fileNormd "[file rootname $pab].normd" } set lignes [LesLignesDuFichier $fileBestMsf] set i 1 foreach e $laddSeq { if {[lsearch -regexp $lignes "Name: $e"] != -1} { continue } else { set best [string tolower [DefineBestMsfClRasPipe $fileNormd]] } } } return $best } proc VerifPresencePDB {file pdb} { global LesNomsDesSequencesDansLOrdre global Sequences if {[info exists LesNomsDesSequencesDansLOrdre]} {unset LesNomsDesSequencesDansLOrdre} if {[info exists Sequences]} {unset Sequences} DecortiqueUnMSF $file LesNomsDesSequencesDansLOrdre Sequences if {[lsearch $LesNomsDesSequencesDansLOrdre $pdb] == -1} { return 0 } else { return 1 } } proc VerifProtAccMouse {} { set M 0 set H 0 set R 0 set T 0 foreach I [RetChip2 ListOf Index] { set liste {} set Des [RetChip2 $I "description_customer"] set Ac1 [RetChip2 $I "refseq_PIQOR"] set Ac2 [RetChip2 $I "DNA_acc"] set Ac4 [RetChip2 $I "prot_acc"] set Ac3 [RetChip2 $I "prot_acc_PIQOR"] if { [regexp {^RA[0-9]+} $Des] } { continue } if {$Ac1=="" && $Ac2==""} { if {$Ac4!=""} { if {[regexp "," $Ac4]} { set SesAcs [split $Ac4 ","] foreach Ac $SesAcs { set Commande1 "getz \"\\\[protein-acc:$Ac\\\]\" \-f org" set GetzOut1 [eval exec $Commande1] set Lu1 "" set GenreLu1 "" set EspeceLu1 "" scan $GetzOut1 "%s %s %s" Lu1 GenreLu1 EspeceLu1 puts "plsligne=$I acc=$Ac4=>organisme=$GenreLu1 $EspeceLu1" set og "$GenreLu1 $EspeceLu1" puts "**$og" lappend liste $og } set liste [lsort -unique $liste] if {[llength $liste] > 1} { incr T puts "plus d'un orga pour ligne $I" foreach x $liste { puts "++$x" } } else { set orga [lindex $liste 0] if {[regexp {^Mus} $orga]} { incr M puts "Mpl=$M\n" } if {[regexp {^Homo} $orga]} { incr H puts "Hpl=$H\n" } if {[regexp {^Rattus} $orga]} { incr R puts "Rpl=$R\n" } } continue } set Commande "getz \"\\\[protein-acc:$Ac4\\\]\" \-f org" set GetzOut [eval exec $Commande] set Lu1 "" set GenreLu1 "" set EspeceLu1 "" scan $GetzOut "%s %s %s" Lu1 GenreLu1 EspeceLu1 puts "uniligne=$I acc=$Ac4=>organisme=$GenreLu1 $EspeceLu1" if {[regexp {^Mus$} $GenreLu1]} { incr M puts "Mui=$M\n" } if {[regexp {^Homo$} $GenreLu1]} { incr H puts "Hui=$H\n" } if {[regexp {^Rattus$} $GenreLu1]} { incr R puts "Rui=$R\n" } } } } Espionne "$M=nb de souris" Espionne "$H=nb d'homme" Espionne "$R=nb de rat" Espionne "$T=nb de multiple" } proc VerifReduction {FileMacsims} { set fh [open $FileMacsims "r"] dom parse -channel $fh doc close $fh $doc documentElement root set Box [file tail $FileMacsims] while {[regexp {\.} $Box]} {regsub {\.[^\.]+$} $Box "" Box} set ListeDesGroup [GroupDeMaSelection $Box] Espionne "$ListeDesGroup" foreach seq [$root selectNodes "//sequence"] { set Name [$seq selectNodes "string(./seq-name)"] set Group [$seq selectNodes "string(./seq-info/group)"] Espionne "$Name $Group" } } proc VerifSeqs {} { global db LNOrdali LSOrdali TDesSeqnames # Met a jour si besoin est table seqali , ou # insere nouvelle sequence foreach n $LNOrdali s $LSOrdali { if {$n eq ""} {continue} set sqn [set TDesSeqnames($n)] if {[$db eval {select count(pk_seqali) from seqali where seqname=$sqn and seq=$s}]} { # seqname et sequence existent continue } elseif {[$db eval {select count(pk_seqali) from seqali where seq=$s}]} { # seq identique , nom different ? set seqref $s if {[regexp "__" $sqn]} { set nom [string range $sqn 0 [string first "__" $sqn]-1] if {[$db eval {select count(pk_seqali) from seqali where seqname=$nom and seq=$s}]} { # seq est copie d'une autre set nomref $nom } else { # nom n'existe pas set nomref "" } } else { # on a nouveau nom set nomref "" } } elseif {[$db eval {select count(pk_seqali) from seqali where seqname=$sqn}]} { # meme nom, mais nouvelle seq set seqref "" set nomref $sqn } else { set seqref "" set nomref "" } # Si nom ref existe, prend infos de ref if {$nomref ne ""} { set refinf [lindex [$db eval {select pk_seqinfo from seqali where seqname=$nomref}] 0] $db eval {insert into seqali values (NULL, $refinf, $sqn, $s)} } else { InsereNouvelleSequence $n $s } } return } proc VerificationAvantCalculs {} { global TableScore set ncols [llength [set TableScore(1)]] for {set x 0} {$x < $ncols} {incr x} { set l 0 foreach i [array names TableScore] { lappend l [lindex [set TableScore($i)] $x] } set l [lsort -unique $l] if {[llength $l] == 1} {return 0} set neuf [lsearch $l -999.] if {$neuf != -1} { set l [lreplace $l $neuf $neuf] } if {[llength $l] == 1} {return 0} } return 1 } proc VerificationSequencage {{LesFichiersDeSequences ""} {FichierOuBanqueCible ""} {FastaOuBlast ""}} { JeMeSignale Wup "LesFichiersDeSequences can be a list of TFA files, a TFAs file or GetMacSeq or AskForsequence" set LesFichiersCibles {} if {$FichierOuBanqueCible==""} { set FichierOuBanqueCible "All" } if {$FichierOuBanqueCible=="All"} { set CibleEstAll 1 } else { set CibleEstAll 0 } if {$FichierOuBanqueCible=="Rec1OfQuery"} { set CibleEstRec1 1 } else { set CibleEstRec1 0 } if {[regexp "/Specif_" $FichierOuBanqueCible]} { set CibleEstNom 1 } else { set CibleEstNom 0 } if {$FastaOuBlast==""} { if {$CibleEstAll || $CibleEstNom} { set FastaOuBlast "Blast" } else { set FastaOuBlast "Fasta" } } if {$LesFichiersDeSequences=="AskForSequence"} { set LesFichiersDeSequences [LesFichiersDeType "All"] } if {$LesFichiersDeSequences=="GATC"} { set LesFichiersDeSequences [GetFromGATC] } if {$LesFichiersDeSequences=="GetMacSeq" || [regexp "^User_" $LesFichiersDeSequences]} { if {[regexp "^User_" $LesFichiersDeSequences]} { set User [StringSuivant "User_" dans $LesFichiersDeSequences] } else { set User "" } set LesFichiersDeSequences [GetMacSeq $User] } if {[llength $LesFichiersDeSequences]==0} { return {} } if {[llength $LesFichiersDeSequences] >1} { set LesBons {} set LesDout {} set UniqueBC [lindex $FichierOuBanqueCible 0] foreach FS $LesFichiersDeSequences BC $FichierOuBanqueCible { if {$BC==""} { set BC $UniqueBC } set LeRetour [VerificationSequencage $FS $BC $FastaOuBlast] foreach Bon [lindex $LeRetour 0] Dou [lindex $LeRetour 1] { lappend LesBons $Bon lappend LesDout $Dou } } return [list $LesBons $LesDout] } if {[llength $LesFichiersDeSequences]==1 && [file exists $LesFichiersDeSequences]} { set LesFicTFA {} set LesCiblesAll {} set LesCiblesNom {} set LesCiblesRec1 {} foreach Access [LaSequenceDuTFAs $LesFichiersDeSequences "LaListeDesAccess"] { Espionne $Access set BelAccess $Access # regsub -nocase {_A[12]$} $Access "" BelAccess # set BelAccess "${BelAccess}_Sequenced" set TFA [LaSequenceDuTFAs $LesFichiersDeSequences $Access] if {[regexp -nocase {_A[12](_|$)} $Access Match]} { if {0 && [regexp -nocase "A2" $Match]} { # set BelAccess "${BelAccess}RaC" set BelAccess $Access set RacSeq [NucToReverseAndComplementNuc [QueLaSequenceDuTexteTFA $TFA]] set TFA [SequenceFormatTFA $RacSeq "$Access RaC by Gscope" "nucbrut"] } } set Rep "[RepertoireDuGenome]/retoursequencage" set FicTFA [Sauve $TFA dans "$Rep/$BelAccess.tfa"] if {$CibleEstAll} { lappend LesCiblesAll "[RepertoireDuGenome]/banques/AllProGS" } if {$CibleEstNom} { lappend LesCiblesNom $FichierOuBanqueCible } if {$CibleEstRec1} { set Queue [file tail $FicTFA] regsub ".tfa$" $Queue "" Queue regsub -nocase {_A[12](_.*|$)} $Queue "" Queue set LesCibles [LesFichiersQuiCommencentPar "${Queue}_" "[RepertoireDuGenome]/rec1/" ".tfa"] Espionne "$Queue $LesCibles" while {[llength $LesCibles]==0} { if { ! [OuiOuNon "I cannot find the rec1 for $Queue. Can You help me ?" 0]} { break } set UneCible [ButineArborescence "All" "[RepertoireDuGenome]/rec1/"] if {$UneCible!=""} { set LesCibles [list $UneCible] ; break } } if {[llength $LesCibles]==0} { continue } if {[llength $LesCibles]>1} { FaireLire "Please help me to choose te rec1 file" } set Cible [ChoixParmi $LesCibles] lappend LesCiblesRec1 $Cible } lappend LesFicTFA $FicTFA } if {$LesFicTFA !={}} { set LesFichiersDeSequences $LesFicTFA } if {$LesCiblesAll !={}} { set LesFichiersCibles $LesCiblesAll } if {$LesCiblesNom !={}} { set LesFichiersCibles $LesCiblesNom } if {$LesCiblesRec1!={}} { set LesFichiersCibles $LesCiblesRec1 } } else { if {[OuiOuNon "You submited a list of TFA files. Does it concern the same Rec1 sequence ?"]} { } } set LesBonsFicQuery {} set LesDouteuxFicQuery {} foreach FicQuery $LesFichiersDeSequences FicCible $LesFichiersCibles { Espionne "FicQuery $FicCible" set NomQuery [file tail $FicQuery] set SeqQuery [QueLaSequenceDuFichierTFA $FicQuery] Wup "if FichierOuBanqueCible is the same for all then LesFichiersCibles is empty" if {$FicCible==""} { set FicCible $FichierOuBanqueCible } set FichierTFACible $FicCible set SeqCible [QueLaSequenceDuFichierTFA $FichierTFACible] if {[regexp -nocase -indices $SeqQuery $SeqCible]} { lappend LesBonsFicQuery $FicQuery continue } regsub {\.[^\.]*$} $FicCible "" NomCible set Banque "$NomCible" if { $FastaOuBlast=="Blast" && (! [file exists $FichierTFACible] || ! [file exists "$Banque.nhr"])} { set Banque [CreeBanqueBlastDuFichier $FicCible $NomCible] } set FichierTFACible $Banque set FichierBlast "[RepertoireDuGenome]/retoursequencage/blast/$NomQuery" regsub ".tfa$" $FichierBlast "" FichierBlast append FichierBlast ".blast" if {$FastaOuBlast=="Blast"} { if {[catch { exec blastall -p blastn -d $Banque -i $FicQuery -F F -v 2000 -b 2000 -o $FichierBlast } Message]} { FaireLire "I got an error from exec blastall with message\n$Message" continue } } else { regsub ".blast$" $FichierBlast ".fasta" FichierFasta Espionne "Je vais faire FastaN $FicQuery $Banque $FichierBlast" BlastNAvecFastaN $FicQuery $Banque.tfa $FichierBlast $FichierFasta } set OnTeste 1 set OnRange 0 if {$OnTeste} { set Val [VerificationSequencageApprofondie $FicQuery $FichierBlast "Show" "AvecRetour"] if {$Val==""} { set Val 0 } else { set Val 1 } if {$Val} { lappend LesBonsFicQuery $FicQuery } else { lappend LesDouteuxFicQuery $FicQuery } } if {$OnRange} { DecortiqueBlast $FichierBlast "SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN] } } return [list $LesBonsFicQuery $LesDouteuxFicQuery] } proc VerificationSequencageApprofondie {FichierSequence FichierBlast {Action ""} {Maniere ""}} { if {$Action==""} { set Action "Show" } global ScoreDansProfil set ScoreDansProfilMemo 0 if {[info exists ScoreDansProfil]} { set ScoreDansProfilMemo $ScoreDansProfil } set ScoreDansProfil 1 set lPartieSegAli {} set n [DecortiqueBlast $FichierBlast "SansSeuilExpect" "SansLimiteDeNombreDuTout" Query lBanqueId lAccess lDE lScore lPN lPartieSegAli] set ScoreDansProfil $ScoreDansProfilMemo set Compte 0 set NFoisQuoiMax 10 foreach BanqueId $lBanqueId ScoreLu $lScore PN $lPN { set Quoi [NatureDeLaSequenceAuVuDu $BanqueId] if { ! [info exists NFois($Quoi)]} { set NFois($Quoi) 0 } if {[incr NFois($Quoi)] > $NFoisQuoiMax} { continue } if {$Quoi==""} { lappend LesHits(Autres) $BanqueId lappend Expect(Autres) $PN lappend Score(Autres) $ScoreLu continue } if { ! [info exists Expect($Quoi)]} { set Expect($Quoi) $PN } #rR if { $PN > [set Expect($Quoi)] } { continue } if { ! [info exists Score($Quoi)]} { set Score($Quoi) $ScoreLu } if { $ScoreLu < [set Score($Quoi)] } { continue } if {$Quoi=="Alias"} { set PGS [NomDuAlias $BanqueId] foreach PG [split $PGS " "] { if {[EstUnPAB $PG]} { lappend LesHits(PGS) $PG} } } lappend LesHits($Quoi) $BanqueId } set LaPage {} lappend LaPage $FichierSequence lappend LaPage $FichierBlast set LesIllumines {} foreach Quoi [list "PGS" "Alias" "Oli" "VPPCR" "PPCR" "Rec1" "pDONR" "pDEST" "Autres"] { if { ! [info exists LesHits($Quoi)] } { continue } lappend LaPage "\n" if {[info exists Score($Quoi)] && [info exists Expect($Quoi)]} { lappend LaPage "$Quoi [set Score($Quoi)] [set Expect($Quoi)]" } set Prems 1 foreach Hi [set LesHits($Quoi)] { set Ligne " $Quoi $Hi" if {$Prems && ($Quoi=="PGS" || $Quoi=="Oli" || $Quoi=="VPPCR")} { lappend LesIllumines $Ligne } if {$Quoi=="Oli"} { append Ligne " [Oli $Hi Description]" } if {$Quoi=="VPPCR"} { append Ligne " [VirtualPPCREnStock $Hi Resume]" } set Prems 0 lappend LaPage $Ligne } } set Page [join $LaPage "\n"] if {$Action=="RetourneTexte"} { return $Page } set MaManiere $Maniere if {[regexp "AvecRetour" $Maniere]} { append MaManiere "AvecRetourMaisSansWait" } set w [AfficheVariable $Page "AvecOli$MaManiere" "Hits_of_$FichierBlast"] if { ! [regexp "AvecRetour" $Maniere]} { return $w } if {$LesIllumines!={}} { foreach Illu $LesIllumines { Illumine $Illu $w } Illumine [lindex $LesIllumines 0] $w } set Clavier "$w.buttons" TouchePour $Clavier "See the Blast" "AfficheUneSortieBlast $FichierBlast" "" "lightblue" TouchePour $Clavier "Disp SegAli" "AfficheZoneContigue $FichierBlast \[selection get\]" "" "lightblue" TouchePour $Clavier "InformSeqCheck" "InformeSeqCheck \[selection get\] \[set PagePropre($w)\]" "" "lightblue" global VariableDeRetour tkwait variable VariableDeRetour($w) set v $VariableDeRetour($w) unset VariableDeRetour($w) catch {destroy $w} return $v } proc VerificationSequencageApprofondiePourTous {} { foreach FichierBlast [glob "[RepertoireDuGenome]/retoursequencage/blast/*.blast"] { Espionne $FichierBlast if {[regexp "FASTA" [ContenuDuFichier $FichierBlast]]} { continue } set Retour [VerificationSequencageApprofondie "" $FichierBlast "Show" "AvecRetour"] if {$Retour==""} { continue } foreach Ligne [split $Retour "\n"] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } Espionne $Ligne } } } proc VerifieAgam {} { global LesSequencesDuTFAs foreach Ligne [LesLignesDuFichier "/genomics/link/Agam/banques/AGAM"] { if { ! [regexp {^>(.*?)( |$)} $Ligne Tout Access]} { continue } lappend TousLesAccess $Access } set TousLesAccess [lsort $TousLesAccess] set LesAccess [LaSequenceDuTFAs "/genomics/link/Agam/banques/AGAM" "LaListeDesAccess" "" "" "ForceAccessFirst"] Espionne [llength [array names LesSequencesDuTFAs]] set LesAccess [lsort $LesAccess] SauveLesLignes $TousLesAccess dans tla SauveLesLignes $LesAccess dans la Espionne "[llength $TousLesAccess] [llength [lsort -unique $TousLesAccess]] [llength $LesAccess] [llength [lsort -unique $LesAccess]]" exit foreach Access $LesAccess { set TFA($Access) [LaSequenceDuTFAs "/genomics/link/Agam/banques/AGAM" $Access ] } foreach Fichier [lsort [glob "/genomics/link/Agam/prottfa/*"]] { set Nom [file tail $Fichier] set Entete [EnteteDuFichierTFA $Fichier] set Access [lindex [split $Entete " "] 1] if { 0 && ! [info exists TFA($Access)]} { FaireLire "$Entete" } # Espionne "$Nom $Access" set Agam($Access) $Nom } foreach Access $LesAccess { if { ! [info exists Agam($Access)]} { FaireLire "$Access" } } } proc VerifieAllChrFinal {} { set ChrPrecedent "" set Status Ok foreach Ligne [LesLignesDuFichier "[AnnotRep]/AllChrFinalWithT.txt"] { lassign [LesMotsDeLaLigne $Ligne] Chr D F if {$Chr eq $ChrPrecedent && $D!=[incr FPrecedent]} { FaireLire "oups $Chr $FPrecedent $D $F" ; set Status "Bad" } set FPrecedent $F set ChrPrecedent $Chr } return $Rate } proc VerifieBestMsf {f} { set Vl -999. set Vd -999. set Vr -999. set Ll [LesLignesDuFichier "$f.normd"] foreach l $Ll { if {[regexp "dbclustal" $l]} { set Vd [string range $l [expr [string first ":" $l] +2] end] } if {[regexp "rascal" $l]} { set Vr [string range $l [expr [string first ":" $l] +2] end] } if {[regexp "leon" $l]} { set Vl [string range $l [expr [string first ":" $l] +2] end] } } # if {$Vl == "undetermined"} {set Vl -999.} # if {$Vd == "undetermined"} {set Vd -999.} # if {$Vr == "undetermined"} {set Vr -999.} if {$Vl == -999.} { set max [Maxi $Vr $Vd] if {$max == -999.} {return "no file"} if {$max == $Vr} { return ".rascal" } else { return "" } } if {$Vl > -999. && $Vl <= 0.3} { set max [Maxi $Vl $Vr] set max [Maxi $Vd $max] if {$max == $Vl} { return ".leon" } elseif {$max == $Vr} { return ".rascal" } else { return "" } } return ".leon" } proc VerifieBlastProGS {} { #rR il manquait les PGSxxx en debut de ces fichiers set LesBad {} foreach Nom [ListeDesPABs] { set Fichier [GscopeFile $Nom "blastp"] if {[FileAbsent $Fichier]} { lappend LesBad "$Nom absent"; continue } set Blast [ContenuDuFichier $Fichier] set Q [StringApres "Query=" dans $Blast] if {$Q==$Nom} { continue } lappend LesBad "$Nom $Q" regsub "Query= " $Blast "Query= $Nom " NewBlast Espionne [string range $NewBlast 0 400] Sauve $NewBlast dans $Fichier } AfficheListe $LesBad } proc VerifieChangementSeqlab {LNSeqlab LSSTemp} { global LNOrdali LSOrdali set ChClu 0 ; # Chgt ordre seqs set ChSeq 0 ; # Chgt +/- gaps set ChAas 0 ; # Chgt dans les aas de seqs if {$LNOrdali != $LNSeqlab} { set ChClu 1 } foreach n $LNSeqlab s $LSSTemp { if {$n eq ""} {continue} set in [lsearch $LNOrdali $n] if {$in == -1} {continue} set so [lindex $LSOrdali $in] set sd [string map [list "." "" "Z" ""] $s] set sdo [string map [list "." "" "Z" ""] $so] if {$sd ne $sdo} {set ChAas 1} if {$s ne $so} {set ChSeq 1} } return [list $ChClu $ChSeq $ChAas] } proc VerifieCoherence {} { foreach Nom [ListeDesPABs] { set A [NomDeMSP $Nom A] set MitoHs [MitoHs $Nom] set SeqMac [SeqMac $Nom] set SeqTfa [string toupper [QueLaSequenceDuFichierTFA [GscopeFile $Nom "prottfa"]]] if {[string equal $SeqMac $SeqTfa]} { continue } Espionne "$Nom $A Mac $SeqMac" Espionne Espionne "$Nom $A Tfa $SeqTfa" FaireLire $Nom } } proc VerifieCoherenceGscopeBioArrayBase {{Schema ""} {FromWhere ""}} { if {$FromWhere==""} { set FromWhere "FromInfo" } if {$Schema==""} { set Schema "poidevin" } CanalSqlBioArrayBase foreach Nom [ListeDesPABs] { set TxStartSql "" set TxEndSql "" set TxStart "" set TxEnd "" if {$Schema=="poidevin"} { set Li [SqlExec "select tsstart,tsstop from retinobase2.probeset where gscopeid = '$Nom';" "GetList"] Espionne "LI $Li" ScanLaListe $Li TxStartSql TxEndSql } if {$Schema=="retinobase2"} { set Access [AccessEvi $Nom] if {$Access==""} { continue } set Li [SqlExec "select chromo_loc from retinobase2.probeset where accno = '$Access';" "GetList"] Espionne "LI for $Nom $Access $Li" if {$Li==""} { continue } set StrandSql "?" regsub {\-} $Li " " Li regsub -all {[\:\(\)]} $Li " " Li scan $Li "%s %s %s %s" ChromSql TxStartSql TxEndSql StrandSql } if {$FromWhere=="FromInfo"} { set Loc [ExtraitInfo $Nom "InfoLocUcsc"] scan $Loc "%s %s %s %s %s" NomLu Chrom Strand TxStart TxEnd } if {$FromWhere=="From200508"} { set Access [AccessEvi $Nom] set Strand "?" regsub {\-} $Loc " " Loc regsub -all {[\:\(\)]} $Loc " " Loc scan $Loc "%s %s %s %s" Chrom TxStart TxEnd Strand } if {$FromWhere=="From200503"} { set Access [AccessEvi $Nom] set Loc [LocUcscEvi $Access "From200503"] puts $Loc set Strand "?" regsub {\-} $Loc " " Loc puts $Loc regsub -all {[\:\(\)]} $Loc " " Loc puts $Loc scan $Loc "%s %s %s %s" Chrom TxStart TxEnd Strand } Espionne "Loc for $Access $FromWhere $Loc" Espionne "$Nom $TxStart $TxEnd $FromWhere" Espionne "$Nom $TxStartSql $TxEndSql $Schema" Espionne "" if {$TxStartSql>$TxEnd || $TxStart>$TxEndSql } { FaireLire horreur } } CanalSqlDisconnect } proc VerifieDoublonsDansGo {} { foreach Ligne [LesLignesDuFichier [Fiches "NomGnGOs.txt"]] { set LesGOs [lrange [split $Ligne " "] 1 end] if {[llength $LesGOs]!=[llength [lsort -unique $LesGOs]]} { Espionne $Ligne } } } proc VerifieExtractRefseqOldAndNew {} { foreach N [lsort [glob [RepertoireDuGenome]/sequencesAllMiRNA2907/*.prottfa]] { set Q [file tail $N] set O [RepertoireDuGenome]/sequences/$Q set SN [QueLaSequenceDuFichierTFA $N] set SO [QueLaSequenceDuFichierTFA $O] if {$SN!=$SO} { FaireLire "$N\n$SN\n$SO" } } } proc VerifieFormatAlignement {file format} { set rep [EstLeBonFormat $file $format] if {[ModeI] && ! $rep} { FaireLire "This seems not to be a $format file !" } if {$rep} { return 1 } else { LesDefauts TypeAli "pasdali" return 0 } } proc VerifieGscopeGagniere {} { set LesManquants {} foreach F [glob "/home/gagniere/gscoperso/*.tcl"] { Espionne $F foreach Ligne [LesLignesDuFichier $F] { if { ! [regexp {^proc ([^ \{]+)} $Ligne Match P]} { continue } if {[info procs $P]!=""} { break } lappend LesManquants $P } } AfficheListe $LesManquants } proc VerifieInfos {} { foreach Nom [ListeDesPABs] { set Texte [ExtraitInfo $Nom] set LeBeau {} foreach Ligne [split $Texte "\n"] { if {[string trim $Ligne]==""} { Espionne "$Nom avec ligne vide" ; continue} scan $Ligne "%s" Clef if { ! [regexp -nocase {^[0-9a-z\-_]+\:$} $Clef]} { continue set Prems [string first $Ligne $Texte] set Deuss [string first $Ligne $Texte [expr $Prems + 1]] if {$Deuss<0} { Informe $Nom } else { Espionne "$Nom $Ligne" } } lappend LeBeau $Ligne } Espionne [SauveLesLignes $LeBeau dans [GscopeFile $Nom "infos2"]] } } proc VerifieInputTfa {f} { global LesNomsDesSequencesDansLOrdre global Sequences LitLeTFAMagos $f Ntm Stm if {[lindex $Ntm 0] == ""} { set Ntmp "query" } else { set Ntmp [lindex $Ntm 0] puts $Ntmp regsub -all {\|} $Ntmp "" Ntmp regsub -all {\!} $Ntmp "" Ntmp regsub -all {\"} $Ntmp "" Ntmp regsub -all {\:} $Ntmp "" Ntmp regsub -all {\.} $Ntmp "" Ntmp regsub -all {\\} $Ntmp "" Ntmp regsub -all {\/} $Ntmp "" Ntmp regsub -all {\;} $Ntmp "" Ntmp regsub -all {\,} $Ntmp "" Ntmp set Ntmp [string trim [string range [EnlevePrefixeBank $Ntmp] 0 30]] if {[regexp {^[0-9]} $Ntmp]} { set Ntmp [string replace $Ntmp 0 0 "_"] } } set LesLignes [LesLignesDuFichier $f] set LesLignes [lreplace $LesLignes 0 0 ">$Ntmp"] set fi [open $f w] foreach l $LesLignes { puts $fi $l } close $fi return $Ntmp #{} else {} #set s [set Stmp($Ntmp)] #regsub -all {\|} $Ntmp "" Ntmp #regsub -all {\!} $Ntmp "" Ntmp #regsub -all {\"} $Ntmp "" Ntmp #regsub -all {:} $Ntmp "" Ntmp #regsub -all {.} $Ntmp "" Ntmp #regsub -all {\\} $Ntmp "" Ntmp #regsub -all {\/} $Ntmp "" Ntmp #regsub -all {;} $Ntmp "" Ntmp #regsub -all {,} $Ntmp "" Ntmp #set Ntmp [string trim [string range [EnlevePrefixeBank $Ntmp] 0 30]] #if {[regexp {^[0-9]} $Ntmp]} { # set Ntmp [string replace $Ntmp 0 0 "_"] #} #set LesNomsDesSequencesDansLOrdre $Ntmp #set Sequences($Ntmp) $s #CreeLeTfa $f #catch {unset LesNomsDesSequencesDansLOrdre} #catch {unset Sequences} #return $Ntmp #{} } proc VerifieKozak {Nom} { set KozakTrouve [ExtraitKOZAK $Nom] set LaSeqKozak [list G C C G C C A C C A T G G] set LaSeqKozak2 [list G C C G C C G C C A T G G] set Similarite "" foreach Car [split $KozakTrouve ""] Base $LaSeqKozak Base2 $LaSeqKozak2 { #Espionne "$Car $Base $Base2" if {$Car==$Base} { append Similarite "$Car" } elseif {$Car==$Base2} { append Similarite "$Car" } if {$Car!=$Base && $Car!=$Base2} { append Similarite "X" } } #Espionne $KozakTrouve return $Similarite } proc VerifieKozakPourTous {} { foreach Nom [ListeDesPABs] { set Simil [VerifieKozak $Nom] set n 0 foreach Lettre [split $Simil ""] { if {$Lettre=="X"} {incr n} } append LesResultatsKozak "$Nom\t$Simil\t$n\n" } return $LesResultatsKozak } proc VerifieLeFasta {Fichier} { #rR j'ai ecrit ca pour voir pourquoi le proteome de OrthoInspector etait mauvais ... mais c'était la faute a formatdb set n 0 set t 0 foreach Ligne [LesLignesDuFichier $Fichier] { incr t if {[regexp {^>([^ ]+)( |$)} $Ligne Match Access]} { if { ! [regexp -nocase {^[A-Z0-9_\-\:\.]+$} $Access]} { FaireLire "Wrong $Access" } set ACCESS [string toupper $Access] if {[info exists DejaVu($ACCESS)]} { FaireLire "DejaVu $Access" } set DejaVu($ACCESS) 1 if {[string length $Access]>50} { FaireLire "long $Access" } if {[string length $Ligne]>1000} { FaireLire "long $Ligne" } incr n lappend LeNouveau $Ligne continue } if {[regexp -nocase {[^A-Z]} $Ligne]} { FaireLire "wrong seq for $Access\n$Ligne" } if {$Ligne==""} { continue } lappend LeNouveau $Ligne } SauveLesLignes $LeNouveau dans $Fichier.NEW return "$t lines for $n accesses" } proc VerifieLes18Conta {} { set FichierDes18 "[RepertoireDuGenome]/fiches/18nolocavecgb" foreach DD [ListeDesJR $FichierDes18] { set Vu($DD) 1 } set FichierRedondance1SansCourts "[RepertoireDuGenome]/fiches/Redondance1SansCourts" foreach Ligne [LesLignesDuFichier $FichierRedondance1SansCourts] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { if {[info exists Vu($DD)]} {lappend LesConta $Ligne} } } return $LesConta } proc VerifieLesGenomesCompletsIGBMC {{Fichier ""}} { if {$Fichier==""} { set Fichier "/genome/GCGdbs" } foreach Ligne [LesLignesDuFichier $Fichier] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } if { ! [regexp {^[ \t]} $Ligne]} { continue } if {[regexp "All the " $Ligne]} { continue } regsub -all {\.} $Ligne " " Ligne scan $Ligne "%s %s" Genre Espece if {$Espece=="sp"} { set Espece "sp." } set Organisme [Glossaire "$Genre $Espece" Complet] if {[info exists DejaVu($Organisme)]} { continue } set DejaVu($Organisme) 1 if {$Organisme!="$Genre $Espece"} { if {$Organisme==""} { set Trouve "nothing" } else { set Trouve "'$Organisme'" } set Bon "" if {[OuiOuNon "I found $Trouve for\n$Ligne\n Do I keep '$Genre $Espece' ?"]} { set Bon "$Genre $Espece" } if {$Bon=="" && $Organisme!="" && [OuiOuNon " Do I keep '$Organisme' ?"]} { set Bon "$Genre $Espece" } if {$Bon==""} { continue } } lappend LesOrganismes $Organisme } set LesBons [ChoixDesPresents $LesOrganismes] return $LesBons } 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 VerifieLesMutantsPourClonage {} { set LesMalPlaces {} foreach Ligne [LesLignesDuFichier [Fiches "bornesdespabs"]] { Espionne $Ligne scan $Ligne "%s %s %s" Nom D F if {[info exists DejaVu($D,$F)]} { set GrandFrere [GrandFrereDuMutant $Nom] while {[EstUnPABMute $GrandFrere]} { set GrandFrere [GrandFrereDuMutant $GrandFrere] } if {$DejaVu($D,$F)==$GrandFrere} { continue } # FaireLire "$Nom $D $F $DejaVu($D,$F)" lappend LesMalPlaces "$Nom $D $F $DejaVu($D,$F)" } set DejaVu($D,$F) $Nom } AfficheListe $LesMalPlaces } proc VerifieLesMutations {} { set LesMauvais {} foreach Nom [ListeDesPABs] { set Seq1 x[string toupper [QueLaSequenceDuFichierTFA [GscopeFile $Nom "prottfa"]]] set Seq1 x[SeqMac $Nom] set A [NomDeMSP $Nom A] set LesMutations [lsort -unique [concat [MSP Mut $A ListOfV1] [MSP Mut $A ListOfV2]]] foreach A123B $LesMutations { if { ! [regexp {([A-Z])([0-9]+)([A-Z])} $A123B Match W P M]} { FaireLire "$Nom $A $A123B merde !"; continue } if {$W=="X"} { continue } if {[string index $Seq1 $P]!=$W} { set Message "$Nom $A en $A123B [string index $Seq1 $P]!=$W [string range $Seq1 $P-5 $P+5]" Espionne $Message lappend LesMauvais $Message } } } return $LesMauvais } proc VerifieLesNarcissesDesMutants {} { foreach Nom [ListeDesPABs] { if { ! [EstUnPABMute $Nom]} { continue } set GF [GrandFrereDuMutant $Nom] if {$GF==""} { FaireLire "$Nom has no GrandFrere" ; continue } if {[Narcisse $GF]==[Narcisse $Nom]} { continue } FaireLire "$Nom [Narcisse $Nom] is not [Narcisse $GF] of $GF" } } 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 VerifieLesPDBs {} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/lespdbs"] { regsub ">" $Ligne "" Ligne ScanLaListe [split $Ligne ":"] Nom aPDB set SeqBanque [LaSequenceDuTFAs "/blast/pdb" $aPDB] set SeqPerox [LaSequenceDuTFAs "$RepertoireDuGenome/tfasdescopains/$Nom" $aPDB] set SeqBanque [join [lrange [split $SeqBanque "\n"] 1 end] ""] set SeqPerox [join [lrange [split $SeqPerox "\n"] 1 end] ""] if {$SeqBanque==$SeqPerox} { continue } Espionne "$Nom $aPDB" Espionne "$SeqBanque\n$SeqPerox" FaireLire "$Nom $aPDB" lappend LesMauvais $Nom } SauveLesLignes $LesMauvais dans "$RepertoireDuGenome/lesmauvais" exit } proc VerifieLesPPCR {} { set LesPerdus {} foreach Nom [ListeDesPABs] { foreach Ligne [LesLignesDuFichier [GscopeFile $Nom "notes"]] { if { ! [regexp {^N[0-9]{4} } $Ligne N]} { continue } set N [string trim $N] lappend PGS($N) $Nom if {[file exists "[RepertoireDuGenome]/ppcr_virtuels/$N"]} { continue } lappend LesPerdus $Ligne set Perdu($N) 1 } } set LesPerdus [lsort $LesPerdus] AfficheVariable [join $LesPerdus "\n"] "" "Les N manquant" set LesN {} foreach FN [lsort [glob -nocomplain "[RepertoireDuGenome]/ppcr_virtuels/N*"]] { set N [file tail $FN] set Old($N) [ContenuDuFichier $FN] set EOld [lindex [split $Old($N) "\n"] 0] regsub ">$N " $EOld "" EOld set Old($EOld) $N regsub ">$N " $Old($N) "" ESOld($EOld) lappend LesN $N lappend LesE $EOld } set LesN [lsort -unique $LesN] set LesLouches {} foreach N $LesN { Espionne $N set P [info exists Perdu($N)] set G [info exists PGS($N)] if {[info exists Old($N)]} { set VO $Old($N) } else { set VO "no Old" } if { ! $P && $G } { continue } set T "$N $P $G" if {$G} { lappend T $PGS($N) } if {$VO=="no Old"} { lappend T $VO } lappend LesLouches [join $T " "] } AfficheVariable [join $LesLouches "\n"] "" "Les N louches" } proc VerifieLesProfilsDD {} { set Fichier "[RepertoireDuGenome]/pourgscope_databaseUser" set Liste {} foreach Ligne [LesLignesDuFichier $Fichier] { #set Ligne [string trim $Ligne] if {$Ligne=={}} {continue} if {[regexp -nocase "codeClone" $Ligne]} {continue} #Espionne $Ligne set L [split $Ligne "\t"] set CC [lindex $L 0] set User [lindex $L 1] set Band [lindex $L 2] set Prof [lindex $L 3] set G [lindex $L 4] if {$Prof=="" || $Band==""} {continue} #Espionne "$CC $User $Band $Prof $G" if {[info exists P($Band)] && [info exists U($Band)]} { if {$U($Band)==$User} { if {$Prof!=$P($Band)} { lappend Liste "$G\t$User\t$CC\t$Prof\t$P($Band)\t$U($Band)" } } } else { if {$Band!=""} { set P($Band) $Prof set U($Band) $User } } } if {$Liste=={}} {return "nothing"} Espionne [llength $Liste] SauveLesLignes $Liste dans "[RepertoireDuGenome]/resultats_database_profilDD_user" } proc VerifieLesRec2 {} { foreach R [glob "[RepertoireDuGenome]/rec2Oublies/*"] { set Queue [file tail $R] regsub {\.tfa$} $Queue "" R2 set D "[RepertoireDuGenome]/rec2/$R2" if {[FileExists $D]} { continue } regexp {N[0-9]+} $R2 N lappend LesOublies "$N $R" } AfficheVariable [join $LesOublies "\n"] AvecVirtualPPCR "LesOublies" return set LesCorrectifs {} foreach D [glob "[RepertoireDuGenome]/rec2/*"] { set R2 [file tail $D] set R "[RepertoireDuGenome]/rec2Oublies/$R2" if {[FileAbsent $R]} { set R "$R.tfa" if {[FileAbsent $R]} { continue } } if {[ContenuDuFichier $D]==[ContenuDuFichier $R]} { Espionne "ok $D" ; continue } set SR [QueLaSequenceDuFichierTFA $R] set SD [QueLaSequenceDuFichierTFA $D] set ER [EnteteDuFichierTFA $R] set ED [EnteteDuFichierTFA $D] if { ! [string equal -nocase $SR $SD]} { FaireLire "les sequences different\n$ER\n$ED" ; continue } set OldER $ER if {[regexp -nocase "ppcr PGS" $ER]} { regsub -nocase "ppcr PGS" $ER "Ppcr for PGS" ER } if {$ER==$ED} { lappend LesCorrectifs "il faut corriger $OldER" ; continue } if {[string first " Rec2 " $ER]!=[set L [string last " Rec2 " $ER]]} { set ER [string range $ER 0 [incr L -1]] } if {$ER==$ED} { lappend LesCorrectifs "il enlecer le second Rec2 dans $OldER" ; continue } set Mouchard "" foreach X [split $ER ""] Y [split $ED ""] { if {$X==$Y} { set M " " } else { set M "^" } append Mouchard $M } AfficheVariable "\n$ER<\n$ED<\n$Mouchard<" AvecRetour } AfficheVariable [join $LesCorrectifs "\n"] } proc VerifieNbrDeGroupes {} { global ConsRef global LNDG update set lori [lrange $LNDG 1 end-1] set lori [lsort -command TrieNomGroupe $lori] set lgrf [lrange [ReordonneTypeCons "plein"] 3 end] set nlg [expr {[llength $lgrf] - 3}] set nbg [expr {[llength $LNDG] - 2}] if {$nlg == $nbg} {return} if {$nbg == 1} { set LNDG [lreplace $LNDG 1 1] return } set rep 0 set Radical "CoulG" foreach a $lori b $lgrf { set x [ExtraitNoDuGroupe $a] set y [ExtraitNoDuGroupe $b] if {$x == $y} {continue} set nwg "$Radical$x" set ConsRef($nwg) {} set rep 1 break } if {$rep} {set rep [VerifieNbrDeGroupes]} return $rep } proc VerifieNucProt {} { foreach FN [lsort [glob *.nuctfa]] { Espionne $FN set N [QueLaSequenceDuFichierTFA $FN] regsub ".nuctfa$" $FN "" FP append FP ".prottfa" set P [QueLaSequenceDuFichierTFA $FP] set PduN [SeqNucToSeqPro $N] if {$PduN!=$P} { Espionne "$PduN\n$P" FaireLire $FN } } } 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 VerifieOrthoBlastP {} { global RepertoireDuGenome foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/orthoblastp"] { scan $Ligne "%s" Nom regsub {RIB[0-9]+ } $Ligne "" Accesses if {[regexp {[A-Z][a-z]+ } $Accesses Match]} { Espionne "$Nom $Match" ; continue ; Espionne $Ligne } } } proc VerifieOverlap {x1 x2} { global ZoneSuperposition if {! [info exists ZoneSuperposition]} {return 0} if {$ZoneSuperposition == {} } {return 0} foreach pos $ZoneSuperposition { lassign $pos xl xr if {($x1 >= $xl && $x1 <= $xr) || ($x2 >= $xl && $x2 <= $xr)} { return 1 } else { return 0 } } } 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 VerifieParametres {} { global DefautsPipe foreach f {Filter,maxseq Blast,e Blast,v Blast,b} {max min} {500 100 10000 10 10000 10 10000 10} { foreach {p a} [split $f ,] {break} set v [set DefautsPipe($f)] if {$v > $max || $v < $min} { set rep [tk_dialog .mxs "Bad value" "Do you really want to have $v for $p $a ?" "" 0 "Yes" "No"] if {$rep == "No"} {return 0} } } return 1 } proc VerifiePresencePDB {file pdb} { DecortiqueUnMSF $file LesNomsDesSequencesDansLOrdre Sequences if {[lsearch $LesNomsDesSequencesDansLOrdre $pdb] == -1} { return 0 } else { return 1 } } proc VerifieSiTousLes1954blast {RepBlast FichierDesPABs FichierSortie} { foreach Fichier [glob -nocomplain -directory $RepBlast "DD*"] { if {[regexp "old" $Fichier]} {continue} set DD [file tail $Fichier] Espionne $DD set Vu($DD) 1 } set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set Liste "" foreach Nom $L { if {![info exists Vu($Nom)]} {lappend Liste $Nom} } Espionne "nb pabs des 1954 absents dans $RepBlast: [llength $Liste]" SauveLesLignes $Liste dans $FichierSortie } 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 VerifieTfaProGS {} { #rR il manquait les PGSxxx en debut de ces fichiers set LesBad {} foreach Nom [ListeDesPABs] { set Fichier [GscopeFile $Nom "prottfa"] if {[FileAbsent $Fichier]} { lappend LesBad "$Nom absent"; continue } set TFA [ContenuDuFichier $Fichier] if {[regexp ">$Nom" $TFA]} { continue } scan $TFA "%s" A set A [string range $A 1 end] regsub ">" $TFA ">$Nom " NewTFA Espionne $NewTFA # Sauve $NewTFA dans $Fichier } AfficheListe $LesBad } proc VerifieZonesSuperposition {} { global ZoneSelect ZoneSuperposition ListePDB LNOrdali StrucAVoir Sequences if {! [info exists ZoneSelect]} { set ZoneSelect [list] } set ZoneSuperposition $ZoneSelect # On est en coordonnes generale de l'alignement set Lzone [list] foreach z $ZoneSuperposition { puts "z= >$z<" set MolSansZone {} lassign $z x1 x2 set lgt [expr {$x2-$x1+1}] set Ltmp [lrepeat $lgt 1] set Lres [list] # Cherche la sequence du PDB foreach mol $StrucAVoir { set mol [BonNomPDB $mol] set seq [set Sequences($mol)] set Lseq [split [string range $seq $x1 $x2] ""] set Lseg [list] foreach e $Lseq { lappend Lseg [regexp {[^\.]} $e] } if {1 ni $Lseg} { lappend MolSansZone $mol puts "==> no zone : $mol $z" continue } foreach e $Ltmp v $Lseg { lappend Lres [expr {$e & $v}] } set Ltmp $Lres set Lres [list] } set dep -1 ; set arr -1 set i 0 foreach e $Ltmp { if {$e} { if {$dep == -1} { set dep [expr {$x1+$i}] } } else { if {$dep != -1} { set arr [expr {$x1 + $i - 1}] lappend Lzone [list $dep $arr $MolSansZone] set dep -1 } } incr i } if {$dep != -1} { lappend Lzone [list $dep $x2 $MolSansZone] } } set ZoneSuperposition $Lzone set rtot 0 foreach z $ZoneSuperposition { lassign $z x1 x2 e set rtot [expr {$x2-$x1+1 + $rtot}] } return $rtot } proc VerifmRNAs {} { set ListeA ""; set ListeF "" foreach Nom [ListeDesPABs] { set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$AccBestmRNAHuman!=""} { set FichiermRNA "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {![file exists $FichiermRNA]} { lappend ListeF "$Nom $FichiermRNA doesn t exist" } else { if {![regexp $AccBestmRNAHuman [EnteteDuFichierTFA $FichiermRNA]]} { lappend ListeA "$Nom $AccBestmRNAHuman [EnteteDuFichierTFA $FichiermRNA]" } } } } Espionne "n fichiers : [llength $ListeF]" Espionne "n access: [llength $ListeA]" #return $Liste } proc VerifyStaf {} { set CompteurTotal 0 set CompteurAutres 0 set CompteurLongueur 0 set CompteurOrientation 0 set CompteurDoubles 0 set CompteurComplement 0 set CompteurOK 0 set CompteurRetrouvees 0 set CompteurDecalage 0 set CompteurInversion 0 set CompteurRegexp 0 set CompteurKO 0 set LesAnomaliesAutres {} set LesAnomaliesDoubles {} set LesAnomaliesDOrientation {} set LesAnomaliesDeComplement {} set LesAnomaliesDeLongueur {} set LesSequencesOK {} set LesSequencesRetrouvees {} set LesAnomaliesDecalageG {} set LesAnomaliesDecalageD {} set LesAnomaliesDecalageRG {} set LesAnomaliesDecalageRD {} set LesAnomaliesInversion {} set LesAnomaliesRegexp {} foreach Nom [ListeDesPABs] { set Loc [ExtraitInfo $Nom "ExcelLoc200405"] set Chro [string trim [lindex [split $Loc ":"] 0]] lappend LesSTAFsDuChro($Chro) $Nom lappend LesChro $Chro } set LesChro [lsort -unique $LesChro] foreach Chro $LesChro { Espionne "Loading : $Chro" foreach Nom $LesSTAFsDuChro($Chro} { incr CompteurTotal 1 set Seq [QueLaSequenceDuFichierTFA [GscopeFile $Nom nuctfa]] set Ali [ExtraitInfo $Nom "ExcelAli:"] set Loc [ExtraitInfo $Nom "ExcelLoc200405"] set Bornes [lindex [split $Loc ":"] 1] if { ![ regexp {^[0-9]+\-[0-9]+$} $Bornes ]} { lappend LesAnomaliesRegexp $Nom continue } ScanLaListe [split $Bornes "-"] Deb Fin set Orient [ExtraitInfo $Nom "ExcelOrient:"] if {$Orient=="-"} { set $Orient "R" } if {$Orient=="+"} { set $Orient "F" } set Difference [expr $Deb-$Fin] if { ![expr $Deb-$Fin==-24] } { lappend LesAnomaliesDeLongueur $Nom continue } set SeqUcsc [BoutADNDeUcsc $Deb $Fin $Orient "Human" $Chro "bigZips200405"] set Com [NucToComplementNuc $Seq] if { [string equal -nocase $Seq $SeqUcsc] } { lappend LesSequencesOK $Nom lappend LesSequencesRetrouvees $Nom continue } # Espionne "" # Espionne "$Com (Complementaire de Seq)" # Espionne "$Seq (Seq)" # Espionne "$SeqUcsc (Ucsc)" if { [string equal -nocase $Com $SeqUcsc] } { lappend LesAnomaliesDeComplement $Nom lappend LesSequencesRetrouvees $Nom continue } if {$Orient=="F"} { set Orient "R" } elseif {$Orient=="R"} { set Orient "F" } set SeqUcsc2 [BoutADNDeUcsc $Deb $Fin $Orient "Human" $Chro "bigZips200603"] if { [string equal -nocase $Seq $SeqUcsc2] } { lappend LesAnomaliesDOrientation $Nom lappend LesSequencesRetrouvees $Nom continue } set ReverseSeq [ReverseString $Seq] if { [string equal -nocase $Seq $SeqUcsc2] } { lappend LesAnomaliesDOrientaton $Nom lappend LesSequencesRetrouvees $Nom continue } if { [string equal -nocase $SeqUcsc2 $ReverseSeq]} { lappend LesAnomaliesInversion $Nom lappend LesSequencesRetrouvees $Nom continue } if { [string equal -nocase $Com $SeqUcsc2] } { lappend LesAnomaliesDoubles $Nom lappend LesSequencesRetrouvees $Nom continue } if { ! [string equal -nocase $Com $SeqUcsc2] } { # Espionne " \n $Seq (XL)\n $SeqUcsc (UCSC)\n $Com (Complementaire XL)" set SeqFin [string range $Seq 2 24] set SeqDebut [string range $Seq 1 23] set ComFin [string range $Com 2 24] set ComDebut [string range $Com 1 23] set UCSCDebut [string range $SeqUcsc2 1 23] set UCSCFin [string range $SeqUcsc2 2 24] if { [string equal -nocase $SeqDebut $UCSCFin]} { lappend LesAnomaliesDecalageG $Nom lappend LesSequencesRetrouvees $Nom continue } if { [string equal -nocase $SeqFin $UCSCDebut]} { lappend LesAnomaliesDecalageD $Nom lappend LesSequencesRetrouvees $Nom continue } if { [string equal -nocase $ComDebut $UCSCFin]} { lappend LesAnomaliesDecalageRG $Nom lappend LesSequencesRetrouvees $Nom continue } if { [string equal -nocase $ComFin $UCSCDebut]} { lappend LesAnomaliesDecalageRD $Nom lappend LesSequencesRetrouvees $Nom continue } lappend LesAnomaliesAutres $Nom } } Espionne "\nScanning done.\n \n ************\n Statistiques\n ************\n " Espionne "* $CompteurTotal SBS lus\n" foreach Nom $LesSequencesOK { incr CompteurOK 1 } foreach Nom $LesSequencesRetrouvees { incr CompteurRetrouvees 1 } Espionne "* $CompteurRetrouvees retrouvables ($CompteurOK OK + petites erreurs)" foreach Nom $LesAnomaliesAutres { incr CompteurAutres 1 } foreach Nom $LesAnomaliesRegexp { incr CompteurRegexp 1 } foreach Nom $LesAnomaliesDeLongueur { incr CompteurLongueur 1 } set CompteurKO [expr $CompteurLongueur + $CompteurRegexp + $CompteurAutres] Espionne "* $CompteurKO non-retrouvables (dont $CompteurAutres non-identifiées)" foreach Nom $LesAnomaliesDeComplement { incr CompteurComplement 1 } foreach Nom $LesAnomaliesDOrientation { incr CompteurOrientation 1 } foreach Nom $LesAnomaliesInversion { incr CompteurInversion 1 } foreach Nom $LesAnomaliesDoubles { incr CompteurDoubles 1 } foreach Nom $LesAnomaliesDecalageG { incr CompteurDecalage 1 } foreach Nom $LesAnomaliesDecalageD { incr CompteurDecalage 1 } foreach Nom $LesAnomaliesDecalageRG { incr CompteurDecalage 1 } foreach Nom $LesAnomaliesDecalageRD { incr CompteurDecalage 1 } Espionne "\n-------------------------" Espionne "Détail des SBS identifiés:" Espionne "-------------------------" Espionne " $CompteurOrientation mauvaises orientations" Espionne " $CompteurComplement prises du complémentaires" Espionne " $CompteurDoubles prises du complémentaire et mal orientées" Espionne " $CompteurDecalage décalages de 1 dans un sens ou l'autre" Espionne "\n------------------------------" Espionne "Détail des SBS non-identifiées" Espionne "------------------------------" Espionne " $CompteurLongueur de longueur incorrecte" Espionne " $CompteurRegexp coquilles dans les bornes" Espionne " $CompteurAutres non-retruvées sur l'UCSC\n" } proc VersBiolo {{Qui ""}} { set Date [Date] set LesLogin {} foreach Destin [glob -nocomplain -type d "/biolo/gscope_contrib/*"] { if {$Qui!="" && [file tail $Destin]!=$Qui} { continue } Espionne $Destin if { [file type $Destin]!="directory" } { continue } set Login [file tail $Destin] set Source "/home/$Login/gscopublic" if { ! [file exists $Source]} { continue } set DestinOld "/biolo/gscope_contrib/Poubelle/$Login.$Date" set DestinTmp "${Destin}_Tmp" file mkdir $DestinTmp file copy -force $Source $DestinTmp file rename $Destin $DestinOld file rename "$DestinTmp/gscopublic" $Destin exec chmod -R g+w $Destin file delete $DestinTmp lappend LesLogin $Login } return $LesLogin } proc VersO {Commande} { global CanalO global RecuperationEffectuee global env if { ! [info exists CanalO]} { set vodat $env(ODAT) set CanalO [open "| /biolo/over6/sg_ono622" w+] # fconfigure $CanalO -blocking false -buffering full fconfigure $CanalO -blocking true -buffering none AuLog "Launching o." while {1} { gets $CanalO Reponse if {[regexp "Define an O file" $Reponse]} { break } after 500 } puts $CanalO "[file join $vodat menu.o]" flush $CanalO while {1} { gets $CanalO Reponse if {[regexp "Define an O file" $Reponse]} { AuLog $Reponse break } after 500 } puts $CanalO "[file join $vodat startup.o]" flush $CanalO while {1} { gets $CanalO Reponse if {[regexp "Define an O file" $Reponse]} { AuLog $Reponse break } after 500 } puts $CanalO "[file join $vodat access.o]" flush $CanalO while {1} { gets $CanalO Reponse if {[regexp "Define an O file" $Reponse]} { AuLog $Reponse break } after 500 } puts $CanalO "" flush $CanalO while {1} { gets $CanalO Reponse if {[regexp "Define an O file" $Reponse]} { break } after 500 } puts $CanalO "" flush $CanalO puts $CanalO "yes" flush $CanalO fileevent $CanalO readable "Recupere $CanalO" after 5000 # AuLog "On envoie : # TURLUTUTU" puts $CanalO "# TURLUTUTU" flush $CanalO tkwait variable RecuperationEffectuee unset RecuperationEffectuee } puts $CanalO "$Commande" flush $CanalO puts $CanalO "# TURLUTUTU" flush $CanalO tkwait variable RecuperationEffectuee unset RecuperationEffectuee return } proc VersPoubelle {Nom} { set Poubelle "[RepertoireDuGenome]/poubelle" if { ! [file exists $Poubelle]} { file mkdir $Poubelle } set LesFiPou {} foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/*/$Nom"] { if { ! [file exists $Fichier]} { continue } set Rep [file tail [file dirname $Fichier]] if {[file type $Rep]=="link"} { continue } set Pou "${Rep}_$Nom" set FiPou "$Poubelle/$Pou" if {[file exists $FiPou]} { Garde $FiPou } file rename -force $Fichier $FiPou lappend LesFiPou $FiPou } foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/*/$Nom"] { if { ! [file exists $Fichier]} { continue } set Rep [file tail [file dirname $Fichier]] if { ! [OuiOuNon "$Fichier\nis in a directory which is a link.\nDo I move to poubelle anyway ?"]} { continue } set Pou "${Rep}_$Nom" set FiPou "$Poubelle/$Pou" if {[file exists $FiPou]} { Garde $FiPou } file rename -force $Fichier $FiPou lappend LesFiPou $FiPou } return $LesFiPou } proc VersPyMOL {Commande} { global CanalP global RecuperationEffectuee if { ! [info exists CanalP]} { set Pyloc [OuEstPymol] puts "pyloc >>$Pyloc<<" if {$Pyloc == 0} { FaireLire "Pymol not found ! Choose another viewer !" return } set CanalP [open "| $Pyloc" a+] fconfigure $CanalP -blocking false -buffering full fileevent $CanalP readable "Recupere $CanalP" puts $CanalP "# TURLUTUTU" tkwait variable RecuperationEffectuee unset RecuperationEffectuee } puts $CanalP "$Commande" flush $CanalP puts $CanalP "# TURLUTUTU" flush $CanalP tkwait variable RecuperationEffectuee unset RecuperationEffectuee return } proc VersRasMol {Commande} { global CanalR global RecuperationEffectuee global tcl_platform global LiaisonCoupee global InitRasMol if {$InitRasMol && ![info exists LiaisonCoupee]} {set LiaisonCoupee 0} if {$LiaisonCoupee} {unset CanalR} if {! [info exists CanalR]} { FaireAttendre "Please wait .... \n Loading RasMol and PDB file ..." eval set CanalR [open "|[RasmolExe] " r+] fconfigure $CanalR -blocking 0 -buffering line -buffersize 4094 # InitialiseRasMol $CanalR fileevent $CanalR readable [list RecupereRepRasMol $CanalR] # set cPick [dde request RasWin System Pick] FaireLaSuite .attendre } if {$tcl_platform(platform) == "windows"} { # catch {dde execute RasWin System "$Commande ; echo TURLU"} Msg puts $CanalR $Commande flush $CanalR } else { # send rasmol "\[$Commande\] \[echo TURLU\] " puts $CanalR $Commande flush $CanalR } tkwait variable RecuperationEffectuee unset RecuperationEffectuee # AuLog "Ordali_> $Commande done !" return } proc VersVMD {Commande} { global CanalV global clients global chatsock global OrdEtcDir if {! [info exists CanalV]} { set vexe [VMDexe] if {$vexe eq ""} { FaireLire "Can't find VMD !" return } VMDstart eval exec $vexe -e [file join $OrdEtcDir "VMD.tcl"] -args 21212 & update while {! [info exists clients]} { after 200 update } InitialiseVMD } VMDsend $Commande return } proc VersionDeGscope {} { global VersionDeGscope set VersionDeGscope 2017.01 return $VersionDeGscope } proc VersionOrdalieDB {} { global db # version 1.0 - # la table 'ordalie' ne contient pas la colonne # 'var' set Lcol [list] $db eval {PRAGMA TABLE_INFO(ordalie)} col { lappend Lcol $col(name) } if {[llength $Lcol] == 2} { return 1.0 } # Version > 1.0 - # la version de la db est dans table ordalie set VersionDB [$db eval {select val from ordalie where var='Defauts' and key='VersionDB'}] return $VersionDB } proc VersionSurBiolo {{Rep ""}} { foreach Dec [lsort [glob "/dec/biolo/$Rep/*.tcl"]] { regsub "/dec/" $Dec "/linux/" Lin if {[FileAbsent $Lin]} { Espionne "absence de $Lin" continue } if {[ContenuDuFichier $Dec]==[ContenuDuFichier $Lin]} { continue } exec dxdiff $Dec $Lin } exit } proc VerticalNames {TexteDesORGAorga} { foreach Orga [split $TexteDesORGAorga " "] { set Orga [string totitle $Orga] append Orga "..." lappend L0 [string index $Orga 0] lappend L1 [string index $Orga 1] lappend L2 [string index $Orga 2] lappend L3 [string index $Orga 3] } return " O [join $L0 ""] \n r [join $L1 ""] \n g [join $L2 ""] \n a [join $L3 ""]" } proc ViewPDB {args} { global Defauts StrucAVoir db ListePDB pdbIdRef LoadTclPackages LoadTkAndPackages set db [FabriqueDeTables [set Defauts(TablesDB1.1)] memory] set pdbIdRef 9999 set StrucAVoir [list] set ListePDB [list] foreach pdbid $args { puts "pdbid in : $pdbid" if {[file exists $pdbid]} { set Lpdb [ContenuDuFichier $pdbid] set pdbid [file rootname $pdbid] } else { set pdbid [DonneIdDeAccessPDB $pdbid] set Lpdb [TextePDB $pdbid ALL "" OnTheWeb] } if {! [EstUnAccessPDB $pdbid]} { set old_pdbid $pdbid set pdbid [incr pdbIdRef -1] } puts "pdbid new : $pdbid" lappend StrucAVoir PDB_${pdbid}_A lappend ListePDB PDB_${pdbid}_A LoadNouveauPDB $Lpdb $pdbid puts "$pdbid loaded" } if {0} { Structure create $pdbid $pdbid new $Lpdb "" 0 1 } InfosDesPDB puts "ready to show !" AfficheDansViandox return } proc ViewerPourClonage {} { global PositionInitiale global NomTextSeq global NomNomSeq global FrmBouton global Retour global Defauts global WTextSequence global NomFenetreOrdali $NomNomSeq configure -state disabled $NomTextSeq configure -state disabled wm title . "Select orgalnisms and select zone (Button 1 then Shift-Button 1)" set Defauts(AffSS) 1 MontreStrSecDansAlignement EnleveColonnesGaps set WTextSequence [$NomTextSeq get 0.0 end] AfficheZonesSelectionnees StockPosition bind $NomTextSeq <1> {eval StockPosition \[$NomTextSeq index current \] } bind $NomTextSeq <2> {eval DeselectLesColonnes \[$NomTextSeq index current \] } bind $NomTextSeq {eval SelectLesColonnes \[$NomTextSeq index current \] } $NomNomSeq tag configure SelN -foreground white -background black bind $NomNomSeq <1> {eval SelectLeNomDeSeq \[$NomNomSeq index current \] } DetruitBoutonsOrdali set w $FrmBouton button $w.fin -text "Accept limits" -command "EnvoieZoneACloner" -background green1 -width 7 -height 2 pack $w.fin -expand 1 -side left button $w.dis -text "Dismiss" -command "AdieuOrdali" -background red -width 7 -height 2 pack $w.dis -expand 1 -side left button $w.cle -text "Clear" -command "DeselectToutesLesColonnes " -background cyan -width 7 -height 2 pack $w.cle -expand 1 -side left button $w.sal -text "Select All" -command "SelectionneToutesColonnes" -background cyan -width 7 -height 2 pack $w.sal -expand 1 -side left button $w.hlp -text "Help" -command {eval source [file join $OrdHlpDir superposition.tcl]} -background magenta -width 7 -height 2 pack $w.hlp -expand 1 -side left tkwait variable Retour return $Retour } proc VirerLeHeader {File} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|VirerLeHeader : Start" set Fichier [open $File "r"] set FichierPure [open "/tmp/$File.csv" "w"] set lus 0 gets $Fichier Header while { [gets $Fichier Ligne] >= 0} { incr lus ScanLaListe $Ligne chrom start end sequence score strand puts $FichierEncodePure "0\t$Factor\t$chrom\t$start\t$end\t$strand\t$score\t$Replicate\t$CellType" } close $Fichier close $FichierPure set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|VirerLeHeader : Done." } proc VirerLesQuotes {Path} { # Prepare un fichier CSV avec des ";" en remplacant les espaces par des "_" et les ";" par des tabulations set FichierIn [open "$Path.txs" "r"] set FichierOut [open "$Path.txt" "w"] set PrevLigne "" while { [gets $FichierIn Ligne] >=0 } { regsub -all -nocase "\'" $Ligne "" Ligne puts $FichierOut $PrevLigne set PrevLigne $Ligne } close $FichierIn close $FichierOut } proc VirerLesRepeats {Chrox} { # Vire les N d'un fichier masque set PathIn "/tmp/GenomeMasque" set PathOut "/tmp/GenomeMasque" set End "fa.masked" set Ligne "" set FichierFa [open "$PathIn/Chr$Chrox" "r"] set FichierDecoupe "/tmp/GenomeMasque/$Chrox" while { [gets $FichierFa LigneFa] >=0 } { ScanLaListe $LigneFa SequenceFa regsub -all -nocase {N} $LigneFa "" Ligne AppendAuFichier $FichierDecoupe $Ligne } } proc VirerLesSequencesDansEncode {CellType Factor Replicate Table} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|VirerLesSequencesDansEncode : Start for factor $Factor in cell $CellType (replicate $Replicate)" set FichierEncode [open "wgEncodeYaleChIPseqAlignments$Replicate$CellType$Factor.tagAlign" "r"] set FichierEncodePure [open "/tmp/$Table.csv" "w"] set lus 0 while { [gets $FichierEncode Ligne] >= 0} { incr lus ScanLaListe $Ligne chrom start end sequence score strand puts $FichierEncodePure "0\t$Factor\t$chrom\t$start\t$end\t$strand\t$score\t$Replicate\t$CellType" } close $FichierEncode close $FichierEncodePure set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|VirerLesSequencesDansEncode : Loading $Table table in mySQL..." exec /usr/bin/mysqlimport --user=anno --password=ceji387. --host=[LbgiHost] "ucschuman" "/tmp/$Table.csv" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|VirerLesSequencesDansEncode : Done. ($lus inserted)" } proc VirtualPPCREnStock {N {Quoi ""}} { global VirtualPPCREnStock if {$Quoi==""} { set Quoi "Resume" } if {$Quoi=="LesRec1"} { return [Rec1 $N LesRec1] } if {$Quoi=="LesFichiersRec1"} { return [Rec1 $N LesFichiers] } set RepDesVirtualPPCR "[RepertoireDuGenome]/ppcr_virtuels" if { ! [info exists VirtualPPCREnStock("EstCharge")]} { set VirtualPPCREnStock("EstCharge") 1 set LesResumes {} set LesQuois {} set VirtualPPCREnStock(LaListeDesNs) {} foreach Fichier [glob -nocomplain "$RepDesVirtualPPCR/N*"] { set Queue [file tail $Fichier] if {[regexp {~$|\.20[0-9]{4,}$} $Queue]} { continue } set Entete [EnteteDuFichierTFA $Fichier] scan $Entete "%s %s %s %s %s %s %s %s %s" Nlu ppcr for PGS Sujet with oligos P5 P3 if { ! [regexp "^>" $Nlu]} { continue } regsub ">" $Nlu "" Nlu lappend VirtualPPCREnStock(LaListeDesNs) $Nlu set FullName [StringSuivant "FN: " dans $Entete] #??? lappend VirtualPPCREnStock(N,$FullName) $Nlu set VirtualPPCREnStock($Nlu,FullName) $FullName set VirtualPPCREnStock($Nlu,PGS) $PGS set VirtualPPCREnStock($Nlu,Sujet) $Sujet set VirtualPPCREnStock($Nlu,P5) $P5 set VirtualPPCREnStock($Nlu,P3) $P3 set VirtualPPCREnStock($Nlu,File) $Fichier set Resume "$Nlu $PGS [format "%-13s" [Alias $PGS]] $P5 $P3 $FullName" set VirtualPPCREnStock($Nlu,Resume) $Resume lappend LesResumes $Resume } set LesQuois {} lappend LesQuois "Resume" "FullName" "PGS" "P5" "P3" "Seq" "SeqSubject" "TFA" "File" lappend LesQuois "LesRec1" "LesFichierRec1" set VirtualPPCREnStock(LesQuois) $LesQuois set VirtualPPCREnStock(LesResumes) $LesResumes } if {$N=="LaListeDesNs"} { return [set VirtualPPCREnStock(LaListeDesNs)] } if {$N=="LesQuois"} { return [set VirtualPPCREnStock(LesQuois)] } if {$N=="LesResumes"} { return [set VirtualPPCREnStock(LesResumes)] } if {$Quoi==""} { set Quoi "TFA" } if { ! [info exists VirtualPPCREnStock($N,FullName)]} { return "" } if {$Quoi=="TFA"} { return [ContenuDuFichier "$RepDesVirtualPPCR/$N"] } if {$Quoi=="Seq"} { return [QueLaSequenceDuFichierTFA "$RepDesVirtualPPCR/$N"] } if {$Quoi=="SeqSubject"} { return [SequenceSansOligosDuVirtualPPCR $N] } if {[info exists VirtualPPCREnStock($N,$Quoi)]} { return [set VirtualPPCREnStock($N,$Quoi)] } } proc Viseur {K X Y} { global OldLigneX OldX global OldLigneY OldY if {[info exists OldLigneX($K)] || [info exists OldLigneY($K)]} { catch {$K delete [set OldLigneX($K)]} catch {$K delete [set OldLigneY($K)]} unset OldLigneX($K) unset OldLigneY($K) if {$X == [set OldX($K)] || $Y == [set OldY($K)]} { return } } set OldX($K) $X set OldY($K) $Y set x [$K canvasx $X] set y [$K canvasy $Y] set OldLigneX($K) [$K create line $x [expr $y-1000] $x [expr $y+1000]] set OldLigneY($K) [$K create line [expr $x-1000] $y [expr $x+1000] $y ] } proc ViseurDeGC {K X Y XDebut XFin YDebut {YFin ""} {OneNtPixel ""} {Minimum ""}} { Wup "Un viseur avec la melting temperature en degre sur le graph" Wup "Domaine de validite sur X (XDebut XFin) et valeur sur Y (YDebut YFin)" Wup "Minimum est necessaire car on ne commence pas a 0 ou 1 depend des valeurs observees" global LigneX OldX if {$YFin ==""} {set YFin [$YDebut + 1000]} if {$Minimum==""} {set Minimum 0} set Police {-family "Comic" -size 10 -weight bold} if {[info exists LigneX($K)]} { catch {$K delete [set LigneX($K)]} catch {$K delete [set LigneX($K,zone)]} unset LigneX($K) if {[info exists LigneX($K,$X,zone)]} {unset LigneX($K,$X,zone)} if {$X == [set OldX($K)] } {return ""} } set OldX($K) $X set x [$K canvasx $X] if {$x>$XFin || $x<$XDebut} {return ""} set GC [expr (($x-$XDebut) / (1.0*$OneNtPixel)) + $Minimum] set LigneX($K) [$K create line $x $YDebut $x $YFin] set LigneX($K,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "[format "%.1f" $GC]" -fill "yellow" -anchor "center"] return "" } proc ViseurDeSeq {K X Y XDebut XFin YDebut {YFin ""} {OneNtPixel ""}} { Wup "Un viseur avec la position en nt sur la query" Wup "Domaine de validite sur X (XDebut XFin) et valeur sur Y (YDebut YFin)" Wup "Modif pour tenir compte du zoom" global LigneX OldX if {$YFin==""} {set YFin [$YDebut + 1000]} set Police {-family "Comic" -size 10 -weight bold} if {[info exists LigneX($K)]} { catch {$K delete [set LigneX($K)]} catch {$K delete [set LigneX($K,zone)]} unset LigneX($K) if {[info exists LigneX($K,$X,zone)]} {unset LigneX($K,$X,zone)} if {$X == [set OldX($K)] } {return ""} } set OldX($K) $X #Pour tenir compte du facteur de zoom set TailleQueryNt [LesInfosDe $K MaTailleDeQuery] if {$TailleQueryNt!=""} { set Facteurx [ZoomFacteur $K X] set Facteury [ZoomFacteur $K Y] set OneNtPixel [expr $OneNtPixel * $Facteurx] if {$Facteurx!="1.0"} { foreach F [list XDebut XFin] { set $F [expr [set $F]*$Facteurx] } } if {$Facteury!="1.0"} { foreach F [list YDebut YFin] { set $F [expr [set $F]*$Facteury] } } } set x [$K canvasx $X] if {$x>$XFin || $x<$XDebut} {return ""} set Nt [expr (($x-$XDebut) / (1.0*$OneNtPixel)) + 1] set LigneX($K) [$K create line $x $YDebut $x $YFin] set LigneX($K,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "[format "%.0f" $Nt]" -fill "yellow" -anchor "center"] return "" } proc ViseurDeTm {K X Y XDebut XFin YDebut {YFin ""} {OneNtPixel ""} {Minimum ""}} { Wup "Un viseur avec la melting temperature en degre sur le graph" Wup "Domaine de validite sur X (XDebut XFin) et valeur sur Y (YDebut YFin)" Wup "Minimum est necessaire car on ne commence pas a 0 ou 1 depend des valeurs observees" global LigneX OldX if {$YFin ==""} {set YFin [$YDebut + 1000]} if {$Minimum==""} {set Minimum 0} set Police {-family "Comic" -size 10 -weight bold} if {[info exists LigneX($K)]} { catch {$K delete [set LigneX($K)]} catch {$K delete [set LigneX($K,zone)]} unset LigneX($K) if {[info exists LigneX($K,$X,zone)]} {unset LigneX($K,$X,zone)} if {$X == [set OldX($K)] } {return ""} } set OldX($K) $X set x [$K canvasx $X] if {$x>$XFin || $x<$XDebut} {return ""} set Tm [expr (($x-$XDebut) / (1.0*$OneNtPixel)) + $Minimum] set LigneX($K) [$K create line $x $YDebut $x $YFin] set LigneX($K,zone) [$K create text $x [expr $YDebut-11] -font "$Police" -text "[format "%.1f" $Tm]" -fill "yellow" -anchor "center"] return "" } proc VisiblePartOfAlignment {} { lassign [$::NomTextSeq xview] fxm fxx lassign [$::NomTextSeq yview] fym fyx set Lgt [LongueurDeLAlignement] set xm [expr {$Lgt*$fxm}] set xx [expr {$Lgt*$fxx}] set Nseq [llength $::LNOrdali] set ym [expr {$Nseq*$fym}] set yx [expr {$Nseq*$fyx}] return [list $xm $ym $xx $yx] } proc VisualiseStructure {} { global Defauts ListePDB StrucAVoir #::profiler::reset if {[TypeAli] eq "pasdali"} {return} if {[QuelMode] eq "seqlab"} { FaireLire "Not available in Editor mode !" return } if {! [llength $ListePDB]} { FaireLire "No structures to display !" return } else { set StrucAVoir [list] foreach elt $ListePDB { lassign $elt mol pdb lappend StrucAVoir $mol } } set Ltop [winfo children .] if {".fcviewer" in $Ltop} {return} FaireAttendre "Please wait ...\nPreparing structures to be displayed ..." PrepareViewer set viewer [set Defauts(Viewer)] if {$viewer eq "O macro file"} {set viewer "Omac"} DownloadStructures AfficheDans$viewer FaireLaSuite #AfficheProfileResults return } proc Vitrine {{V ""} {Top ""}} { global VitrineCourante global RepertoireDuGenome global CurrentGenome global FichierGscopeHelp global FichierGscopeImage global FichierGscopeImage2 global FichierGscopeLogoBInG global FichierGscopeLogoMacsim global FichierGscopeExitGscope global NotreOS Org1 Org2 global LesBoutonsNonOpen global LesBoutonsDeVitrine global LesBoutonsDeVitrineCaches if {[regexp "GetVitrine" $V]} { if {[info exists VitrineCourante]} { return $VitrineCourante } if {[regexp "Create" $V]} { Vitrine "" $Top return [Vitrine "GetVitrine"] } return "NoCurrentVitrine" } set VitrineCourante $V if {$Top!=""} { toplevel $V } set SW [winfo screenwidth .] set SH [winfo screenheight .] set OffX [expr ($SW/2) - 500] set OffY [expr 200] wm geometry . +${OffX}+${OffY} set Bouton $V.bseqin lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Enter sequence/Show a file/ Edit" bind $Bouton <1> {AfficheVariable [SeqIn] "SansFetchAvecFormateAvecBlasteAvecAligneurs"} bind $Bouton <2> ShowFile bind $Bouton <3> EditeEtCreeFichier set Bouton $V.bvisu lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "See Seq/Blast/MSF" bind $Bouton <1> AfficheUneSequence bind $Bouton <2> BlastTools bind $Bouton <3> EtudieUneSortieMSF bind $Bouton AfficheUneSortieBlast set Bouton $V.bcochealigneurs lappend LesBoutonsDeVitrineCaches $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Choose multiple alignment program ..." bind $Bouton CocheAligneurs set Bouton $V.borgas lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Ontology/GOTools/Decrypthon" bind $Bouton <1> "GOPanel \[NomDe gopanel\]" bind $Bouton <2> "GOTools" bind $Bouton <3> "AfficheDecrypthon" set Bouton $V.devtissue lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Develop Stage/Tissue Type/ Taxo" bind $Bouton <1> "IllustreDevStage" bind $Bouton <2> "IllustreTissueType" bind $Bouton <3> "BrowseTaxNCBI" set Bouton $V.bmenage lappend LesBoutonsDeVitrineCaches $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Clean directory" bind $Bouton <1> {MenageLesTmp "Rename"} set Bouton $V.inventaire lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Inventory/Check /DbW" bind $Bouton <1> Inventaire bind $Bouton <2> CheckInventaire bind $Bouton <3> QuoiQuOnFait if {[PreFixe]=="HNR"} { set Bouton $V.orgatblastn lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "OrgaInBlastP genomes/wgs" bind $Bouton <1> "GenomiqueComparativeParBlast tblastncompletegenomes" bind $Bouton <2> "GenomiqueComparativeParBlast tblastnwgs" set Bouton $V.orgablastn lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "OrgaInBlastN wgs" bind $Bouton <1> "GenomiqueComparativeParBlast blastnwgs" set Bouton $V.orgatblastp lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "OrgaInBlastP protall/ refseq" bind $Bouton <1> "GenomiqueComparativeParBlast blastp" bind $Bouton <2> "GenomiqueComparativeParBlast blastprefseq-prot" } if {[regexp "YEAH" [RepertoireDuGenome]]} { set Bouton $V.yeah lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "YEAH Show / Find / What" bind $Bouton <1> YEAHshow bind $Bouton <2> YEAHfind bind $Bouton <3> YEAHshowYeast set Bouton $V.yeah2 lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "YEAH mouvement 340 319" bind $Bouton <1> YEAHmouvement } if {[regexp "Tparva" [RepertoireDuGenome]]} { set Bouton $V.genoComp lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "ComparativeGenomic Tb/Pf/Eh" bind $Bouton <1> YesScNoTb bind $Bouton <2> YesScNoPf bind $Bouton <3> YesScNoEh set Bouton $V.genoCount lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "ComparativeGenomic Counts/Combi" bind $Bouton <1> "PhyloDistribution {} {} Show" bind $Bouton <2> "PhyloDistribution ChooseCombi Name Show" } if {[OnTraite "MTM1"]} { set Bouton $V.clonage lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "MTM1" bind $Bouton <1> "MTM1 show" bind $Bouton <2> "MTM1 show" bind $Bouton <3> "MTM1 show" } if {[OnTraiteDesClones]} { set Bouton $V.clonage lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Cloning /Show/ Order" bind $Bouton <1> InventaireDeLaDatabaseClonage bind $Bouton <2> InventaireDeLaDatabaseClonage bind $Bouton <3> GestionDesClones } if {0} { set Bouton $V.genoret lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Genoret GUs /ShowUploads" bind $Bouton <1> ShowGUs bind $Bouton <2> ShowUploads } if {[OnTraite "Bathy2010"]} { set Bouton $V.assemblybbtools lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "AssemblyDbTools Bathymodiolus" bind $Bouton <1> "AssemblyDbTools Bathymodiolus" } if {[OnTraite "CilioCarta" "Like"] || [OnTraite "OI2017" "Like"]} { set Bouton $V.blastOutliers lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "OlymClades /BlastOutliers Expect/Score" bind $Bouton <1> "OlymMedals" bind $Bouton <2> "BlastOutliers UseExpect" bind $Bouton <3> "BlastOutliers UseSCore" set Bouton $V.distri lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Clades Rank Distribution Average/ First Only" bind $Bouton <1> "CladesDistribution Average Rank" bind $Bouton <2> "CladesDistribution First Rank" bind $Bouton <3> "" } set Bouton $V.baide lappend LesBoutons $Bouton button $Bouton -text "ShowOrf/ChangeGenome/Exit\nDissmiss all windows" bind $Bouton <1> {SeeAby Show [Entre [PreFixe]]} bind $Bouton <2> ChangeGenome bind $Bouton <3> Boum bind $Bouton "DismissToutesLesFenetres" if { ! [info exists AvecTintin]} { set AvecTintin 1 } if { ! [PourWscope] && $AvecTintin} { image create photo periscope -file $FichierGscopeImage image create photo periscope2 -file $FichierGscopeImage2 $Bouton configure -image periscope bind $Bouton "$Bouton configure -image periscope2" bind $Bouton "$Bouton configure -image periscope" } set Bouton $V.bgscope lappend LesBoutons $Bouton button $Bouton -text "View Linear/Circular/List of $CurrentGenome" bind $Bouton <1> "GscopeBoard $CurrentGenome" bind $Bouton <2> "RscopeBoard $CurrentGenome" bind $Bouton <3> "SeeAby Show \[ChoixParmi \[PresentationDesPABs\]\]" set Bouton $V.bmap if {[MapCliquable "Existe"]} { lappend LesBoutons $Bouton } else { lappend LesBoutonsDeVitrineCaches $Bouton } lappend LesWebDeny $Bouton button $Bouton -text "Clicable Map of $CurrentGenome" bind $Bouton <1> MapCliquable set Bouton $V.bblaali set FichierDiffBlaAli "$RepertoireDuGenome/fiches/diffblaali" if {[file exists $FichierDiffBlaAli]} { lappend LesBoutons $Bouton } else { lappend LesBoutonsDeVitrineCaches $Bouton lappend LesWebDeny $Bouton } button $Bouton -text "BlastP vs DbClust / ClustOperon" bind $Bouton <1> "AfficheVariable \[ContenuDuFichier $FichierDiffBlaAli\] AvecSmallMSF" bind $Bouton <2> "AfficheOperonsCommunsAuxClusters" set Bouton $V.bvisupepcurrentgenome lappend LesBoutonsDeVitrineCaches $Bouton button $Bouton -text "List prot/nuc of $CurrentGenome" bind $Bouton <1> {EtudieLesProteinesDe $CurrentGenome} bind $Bouton <2> {EtudieLesNucleiquesDe $CurrentGenome} if {[OnTraiteUnGenome]} { set Bouton $V.bdotplot lappend LesBoutons $Bouton button $Bouton -text "Proteome DotPlot vs ... " bind $Bouton <1> {eval DotPlot [Entre "genomes Ask Proches"]} set Bouton $V.bblastn lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "BlastN of another Complete Genome" bind $Bouton <1> BlastNDUnOrgaComplet set Bouton $V.bTGCA lappend LesBoutonsDeVitrineCaches $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Show Two Gene Cluster Analysis ... " bind $Bouton <1> RosaceDesTwoGenesCluster } if {[OnTraiteUnGenome] || [PreFixe]=="ANN"} { set Bouton $V.brangphylo lappend LesBoutons $Bouton button $Bouton -text "Phylogenic rank Show/New/Tamis" bind $Bouton <1> DemandeEtDessineOrgaEtSesPlaces bind $Bouton <2> PhyloRank bind $Bouton <3> PhyloRankDuTamis } if {0} { set Bouton $V.bDHA lappend LesBoutons $Bouton lappend LesWebDeny $Bouton button $Bouton -text "X-HDA Show/Ask/New" #Jean a rajoute #bind $Bouton <1> "ShowHDACroises {}" bind $Bouton <1> "AfficheBilanXHda" bind $Bouton <2> "ShowHDACroises AskForFile" bind $Bouton <3> "NewHDACroises" } set Bouton $V.bSetup lappend LesBoutons $Bouton lappend LesBoutonsNonOpen $Bouton lappend LesWebDeny $Bouton button $Bouton -text "SetupGscope/setenv / Bird" bind $Bouton <1> SetupGscope bind $Bouton <2> AfficheLEnvironnementDeGscope bind $Bouton <3> BirdGscopeSearch set Bouton $V.bbigbang lappend LesBoutons $Bouton lappend LesBoutonsNonOpen $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Complete database/Start/Stop" bind $Bouton <1> CreeLaBaseOuLaCollection bind $Bouton <2> JeCommenceABosser bind $Bouton <3> TuArretesDeBosser set Bouton $V.environnement lappend LesBoutons $Bouton lappend LesBoutonsNonOpen $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Gscope Sources / .tar / .exe" bind $Bouton <1> AfficheLesSourcesDeGscope bind $Bouton <2> TarDeGscope bind $Bouton <3> FreewrapGscope set Bouton $V.blittlebrother lappend LesBoutons $Bouton lappend LesBoutonsNonOpen $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Gscope chez le Psy /Src/Environ" bind $Bouton <1> AfficheLesProcs bind $Bouton <2> AfficheLesSourcesDeGscope bind $Bouton <3> AfficheLEnvironnementDeGscope set ExistingPorts [DialogPort "GetAll"] set Bouton $V.dialog lappend LesBoutons $Bouton lappend LesBoutonsNonOpen $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Dialog on [Hostname] $ExistingPorts /+" bind $Bouton <1> "DialogPort DisplayAll" bind $Bouton <2> "DialogPort New; DialogPort DisplayAll" set Bouton $V.bbigbrother lappend LesBoutons $Bouton lappend LesBoutonsNonOpen $Bouton lappend LesWebDeny $Bouton button $Bouton -text "Big Brother /Source/again" bind $Bouton <1> DemandeEtExecute bind $Bouton <2> ReSource bind $Bouton <3> "ReSource Precedent" set Bouton $V.bboum lappend LesBoutons $Bouton button $Bouton -text "Exit Gscope \!" bind $Bouton <1> Boum bind $Bouton <2> "CodeSecret 0" bind $Bouton <3> "CodeSecret 1" if {0 && ! [PourWscope] && $AvecTintin} { image create photo LogoBInG -file $FichierGscopeLogoBInG image create photo ExitGscope -file $FichierGscopeExitGscope $Bouton configure -image LogoBInG bind $Bouton "CodeSecret Enter ; $Bouton configure -image ExitGscope" bind $Bouton "CodeSecret Leave ; $Bouton configure -image LogoBInG" } set nB [llength $LesBoutons] set iB $nB foreach b $LesBoutons { if {[PourWscope] && [lsearch -exact $LesWebDeny $b]>-1 } { if {[catch {destroy $b} Message]} { Espionne $Message } continue } if { ! [GscopeIsOpen] && [lsearch -exact $LesBoutonsNonOpen $b]>-1 } { continue } lappend LesBoutonsDeVitrine $b $b configure -background [Nuance [expr [incr iB -1]/(1.*$nB)]] $b configure -foreground black pack $b -fill both if { ! [PourWscope]} { bind $b "if \[OuiOuNon \"Destroy this button ?\"\] { destroy $b }" } } foreach b $LesBoutonsDeVitrineCaches { $b configure -background "#654321" $b configure -foreground "#123456" } if {[OnTraiteDesClones]} { $V.clonage configure -background "magenta" } if { $V=="" } { set V . } set Ports [DialogPort "GetAll"] wm title $V "$CurrentGenome $Ports Gscope [VersionDeGscope]" return $V } proc VoirADNduContig {ChroContig Selection} { set SansAffichage "" set CarNature(Prom) "P" set CarNature(Init) "I" set CarNature(Intr) "X" set CarNature(Sngl) "S" set CarNature(Term) "T" set CarNature(PlyA) "A" set CarNature(InGN) "." set CarNature(OuGN) " " set LesBornes {} foreach Ligne [split $Selection "\n"] { if { ! [regexp {^ *[0-9]+\.[0-9]+ } $Ligne]} { continue } scan $Ligne "%s %s %s %d %d" Num Nature Sens D F if {$Sens=="-"} { set W $D set D $F set F $W } lappend LesBornes "$D $F $Sens" set C " " if {[info exists CarNature($Nature)]} { set C [set CarNature($Nature)] } set CarNature($D) $C set Orientation($D) $Sens } if {$LesBornes=={}} { return "" } set Seq "n[QueLaSequenceDuTFA [ContigEnStock $ChroContig "FileNamePlease"]]" Espionne "$ChroContig $Seq" if {$Seq==""} { return "" } set BornesDebut [lindex $LesBornes 0] scan $BornesDebut "%s" Debut set BornesFin [lindex $LesBornes end] scan $BornesFin "%s %s" Bidon Fin set LongN [expr $Fin-$Debut+1] set DebutEtendu [expr $Debut-99] set FinEtendu [expr $Fin +99] while { $DebutEtendu < 1 } { incr DebutEtendu 3} while { $FinEtendu >= [string length $Seq] } { incr FinEtendu -3} set adn [string range $Seq $DebutEtendu $FinEtendu] set tdn [NucToComplementNuc $adn] set Orient "F" set NaturePlus "" set NatureMinus "" set pep(0) "" set pep(1) "" set pep(2) "" set pep(3) "" set pep(4) "" set pep(5) "" set Precision 25 set Loc $DebutEtendu set Regle [string repeat " " [expr $Precision - $Loc%$Precision]] set iBornes 0 set Bornes [lindex $LesBornes $iBornes] scan $Bornes "%d %d %s" D F Sens for {set i 0} { $i < [string length $adn] } {incr i } { append pep([expr $i%3]) "[AAduCodon [string range $adn $i [expr $i+2]]] " append pep([expr $i%3+3]) "[AAduCodon [ReverseString [string range $tdn $i [expr $i+2]]]] " set Car " " if {$D <= $Loc && $Loc <= $F} { set Car [set CarNature($D)] set Sens [set Orientation($D)] if {$Car==" "} { set Car [set CarNature(InGN)] } } if {$Sens=="+"} { append NaturePlus $Car append NatureMinus " " } else { append NaturePlus " " append NatureMinus $Car } if {$Loc==$F} { incr iBornes set Bornes [lindex $LesBornes $iBornes] scan $Bornes "%d %d %s" D F Sens } if {[expr $Loc-($Loc/$Precision)*$Precision]==0} { set Gradu [string range "$Loc[string repeat " " $Precision]" 0 [expr $Precision - 1]] append Regle $Gradu } incr Loc } set FrameP0 " $pep(2)" set FrameP1 " $pep(1)" set FrameP2 "$pep(0)" set FrameM0 " $pep(3)" set FrameM1 " $pep(4)" set FrameM2 " $pep(5)" set Texte "$FrameP0\n$FrameP1\n$FrameP2\n $NaturePlus\n$adn\n$Regle\n$tdn\n$NatureMinus\n $FrameM0\n$FrameM1\n$FrameM2" set i -1 foreach Ligne [split $Texte "\n"] { set LaLigne([incr i]) $Ligne lappend LesIemes $i } set Largeur 1000 set D 0 set F [expr $D+$Largeur-1] set LeHachis {} while {$D<$FinEtendu} { foreach i $LesIemes { lappend LeHachis [string range [set LaLigne($i)] $D $F] } lappend LeHachis "\n" incr D $Largeur incr F $Largeur } set Texte [join $LeHachis "\n"] if {$SansAffichage!=""} { return $Texte } return [AfficheVariable $Texte "GrandeLargeur" $ChroContig] } proc VoirLaMeilleureLocalisationDuCDNA {Nom} { Wup "Shows the first localisation of Nom" Gs "Canvas" set Loc [MeilleureLocalisationSurChroContig $Nom] if {[regexp "Chro0 Contig00" $Loc]} { return "" } scan $Loc "%s %s" Chro Contig return [VoirLesLocalisations $Chro $Contig] } proc VoirLesLocalisations {Chro Contig} { Gs "Canvas" JeMeSignale set Minimum 999999999 set Maximum -999999999 set ChroContig "${Chro}_$Contig" set Maximum [ContigEnStock "$ChroContig" "SizePlease"] if {$Maximum==""} { return "" } set LesBornes [LesBornesDeChroContig $Chro $Contig] foreach Ligne $LesBornes { scan $Ligne "%s %d %d %s" Nom D F O set Minimum [Mini $Minimum $D] set Maximum [Maxi $Maximum $F] } set LesLocGenscan [LesProteinesPreditesDuGenscan $ChroContig "Loc"] foreach Loc $LesLocGenscan { scan $Loc "%d %d %s %s" D F O P set Maximum [Maxi $Maximum $F] lappend LesLocs $Loc } set SX 800 set SY 800 set MX [expr $Maximum + 50] set LargeurMini 20 set MY $SY set BY 100 set K [UnCanva $MX $MY $SX $SY] regsub ".canvas$" $K "" w set Y 0 set OldFPAB -999 set OldFAFF -999 foreach Ligne $LesBornes { scan $Ligne "%s %d %d %s" Nom D F O if {[info exists DejaVu($Nom)]} { continue } set DejaVu($Nom) 1 if {$O=="F"} { set C "blue" } else { set C "red" } if {[EstUnPAB $Nom]} { set DeltaY -30 if {[expr $OldFPAB < $D]} { set Y [expr $MY/2 - $BY] } else { incr Y $DeltaY } set OldFPAB $F } else { set DeltaY 30 if {[expr $OldFAFF < $D]} { set Y [expr $MY/2 + $BY] } else { incr Y $DeltaY } set OldFAFF $F } set Dm $D set Fm $F if {0 && [expr ($F-$D)*1.*$SX/$Maximum < $LargeurMini]} { set Dm [expr ($D+$F)/2-$LargeurMini*$Maximum/(2.*$SX)] set Fm [expr ($D+$F)/2+$LargeurMini*$Maximum/(2.*$SX)] } if {[EstUnPAB $Nom]} { set NdS [NomDeScene $Nom] } else { set NdS $Nom } set IdR [$K create rectangle $Dm [expr $Y-10] $Fm [expr $Y+10] -fill "white"] set IdT [$K create text [expr ($D+$F)/2] $Y -text $NdS -anchor c -fill $C -tags [list "CDNA" $Nom "$D $F $O"]] if {[EstUnPAB $Nom]} { $K itemconfigure $IdR -tags [list "Box" $Nom "FetchMe" "CDNA" "$D $F $O"] $K itemconfigure $IdT -tags [list "Box" $Nom "FetchMe" "CDNA" "$D $F $O"] } } $K bind "CDNA" "Devoile $K %x %y" $K bind "CDNA" "Devoile $K %x %y Efface" $K bind "FetchMe" <1> "FetcheBox $K %x %y" $K bind "FetchMe" <3> "FetcheBox $K %x %y" $K bind "FetchMe" <2> "SearchOnBoard \[NomDuCourant $K\]" $K create rectangle 0 [expr $MY/2-1] $Maximum [expr $MY/2+1] -fill "black" $K create text [expr ($Maximum)/2] [expr $MY/2+30] -text "$Chro $Contig $Maximum bases" -tags [list "ChroContig"] -anchor c -fill "black" $K bind "ChroContig" <1> "AfficheContigComplet ${Chro}_$Contig" $K bind "ChroContig" <3> "AfficheContigComplet ${Chro}_$Contig" set Ecart 5 foreach Loc $LesLocGenscan { scan $Loc "%d %d %s %s" D F O P if {$O=="+"} { set Couleur "blue"} else { set Couleur "red" } set Ecart [expr -$Ecart] set Haut [expr $MY/2-$Ecart-10] set Bas [expr $MY/2-$Ecart+10] $K create rectangle $D $Haut $F $Bas -fill $Couleur -outline $Couleur -tag [list "Box" "Predite" "$D $F $O $ChroContig $P"] } $K bind "Predite" "Devoile $K %x %y" $K bind "Predite" "Devoile $K %x %y Efface" $K bind "Predite" <3> "Devoile $K %x %y GenScan" wm title $w "Localisation on $Chro $Contig" Gonfle $w all [expr (1.*$SX)/$MX] 1.0 if { 0 && [PourWscope] } { return [winfo toplevel $K] } return $K } proc VoirLesLocalisationsDuCDNA {Nom {Selection ""}} { Wup "Shows all localisations of Nom if Selection is empty, otherwise only these from Selection" set K "" if {$Selection==""} { set Selection [join [ChaqueSegmentDuBlastN $Nom 0.001 {}] "\n"] } foreach Ligne [split $Selection "\n"] { scan $Ligne "%s" ChroContig ScanLaListe [split $ChroContig ":"] Chro Contig regsub {_[0-9]+} $Contig "" Contig set K [VoirLesLocalisations $Chro $Contig] } return $K } proc VoisinADN {NomOuTexte {Debut ""} {Fin ""} {Orient ""} {SansAffichage ""} {Titre ""}} { if {[regexp -nocase {[A-Z]} $Debut]} { set SansAffichage $Debut set Titre $Fin set Debut "" set Fin "" } set AvecReverse 1 if {[EstPABouTROUouTRNAouARN $NomOuTexte]} { set Nom $NomOuTexte if {$Debut=="nuctfa"} { set adn [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nuctfa"]] set Debut 1 set Fin [string length $adn] set LongN [expr $Fin-$Debut+1] set DebutEtendu $Debut set FinEtendu $Fin set Orient "F" } else { if {$Debut == "" } { set Nom [Box $Nom nom] set Debut [Box $Nom debut] set Fin [Box $Nom fin] set Orient [Box $Nom orient] } set LongN [expr $Fin-$Debut+1] set DebutEtendu [expr $Debut-900] set FinEtendu [expr $Fin +900] while { $DebutEtendu < 1 } { incr DebutEtendu 3} while { $FinEtendu > [LongueurADN] } { incr FinEtendu -3} set adn [BoutADN $DebutEtendu $FinEtendu $Orient] } } else { if {[regexp "^>" $NomOuTexte]} { set Nom [EnteteDuTexteTFA $NomOuTexte "access"] set adn [QueLaSequenceDuTexteTFA $NomOuTexte "ListOfTxt"] if {[llength $adn]>1} { set AvecReverse 0 ScanLaListe $adn adn AutreAdn } } else { if {[regexp -nocase {[^atgcn \n0-9\.]} $NomOuTexte] && ! [OuiOuNon "Do You really want to see the 6 frame translation of the whole text ?" 0] } { return "" } set Nom "Six_frames_translation" regsub -nocase -all {[^a-z]} $NomOuTexte "" adn } set Debut 1 set Fin [string length $adn] set LongN [expr $Fin-$Debut+1] set DebutEtendu $Debut set FinEtendu $Fin set Orient "F" } if {$AvecReverse} { set tdn [ComplementString $adn] } else { set tdn $AutreAdn } set pep(0) "" set pep(1) "" set pep(2) "" set pep(3) "" set pep(4) "" set pep(5) "" for {set i 0} { $i < [string length $adn] } {incr i } { append pep([expr $i%3]) "[AAduCodon [string range $adn $i [expr $i+2]]] " if {$AvecReverse} { append pep([expr $i%3+3]) "[AAduCodon [ReverseString [string range $tdn $i [expr $i+2]]]] " } else { append pep([expr $i%3+3]) "[AAduCodon [string range $tdn $i [expr $i+2]]] " } } set Blanc "" for {set i 0} {$i<6000} {incr i} {append Blanc " "} if {$Orient == "F" } { set OffsetAvant [expr $Debut-$DebutEtendu] set OffsetApres [expr $FinEtendu-$Fin] } else { set OffsetApres [expr $Debut-$DebutEtendu] set OffsetAvant [expr $FinEtendu-$Fin] } set BlancAvant [string range $Blanc 0 [expr $OffsetAvant-1]] set BlancApres [string range $Blanc 0 [expr $OffsetApres-1]] set pepOriF [string range $pep(0) $OffsetAvant [expr [string length $pep(0)]-$OffsetApres] ] set pepOriR [string range $pep(3) $OffsetAvant [expr [string length $pep(3)]-$OffsetApres] ] set Regle [string range $Blanc 0 [expr $OffsetAvant%10-1]] for {set a [expr -($OffsetAvant/10)*10]} {$a < 0} {incr a 10} { set Marque "$a " append Regle [string range $Marque 0 9] } for {set a 1} {$a<$LongN} {incr a 10} { set p [expr ($a+2)/3] set Marque "${a}<$p " append Regle [string range $Marque 0 9] } append Regle [string range $Blanc 0 [expr ($LongN-1)%10-1]] for {set a 10} {$a<$OffsetApres} {incr a 10} { set Marque "+$a " append Regle [string range $Marque 0 9] } set CodeGenetiqueN "" set CodeGenetiqueP "" foreach A {a c g t} { foreach B {a c g t} { foreach C {a c g t} { set Codon "$A$B$C" set AA [AAduCodon $Codon] set AAA [UT $AA] append CodeGenetiqueN "$Codon " append CodeGenetiqueAA [string range "$AA " 0 3] append CodeGenetiqueAAA [string totitle [string range "$AAA " 0 3]] } } } set Explication "Find below the 3 frames translation of the 2 DNA sequences. To find the differences use the horizontal scrollbar : an X indicates the mutation." set CodeGenetique "$CodeGenetiqueN\n$CodeGenetiqueAA\n$CodeGenetiqueAAA" if {$AvecReverse} { set Texte " $pep(2)\n $pep(1)\n$pep(0)\n$BlancAvant$pepOriF$BlancApres\n$adn\n$Regle\n$tdn\n $BlancAvant$pepOriR$BlancApres\n $pep(3)\n $pep(4)\n $pep(5)" } else { set Highlight "" foreach A [string toupper [split $adn ""]] T [string toupper [split $tdn ""]] { if {$A==$T} { append Highlight " " } else { append Highlight "X" } } # set Texte " $pep(2)\n $pep(5)\n$adn\n$tdn\n$Regle\n\n $pep(1)\n $pep(4)\n$adn\n$tdn\n$Regle\n\n$pep(0)\n$pep(3)\n$adn\n$tdn\n$Regle\n$BlancAvant$pepOriF$BlancApres\n$BlancAvant$pepOriR$BlancApres\n\n$Highlight" set Texte "$Explication\nFrame+2\n $pep(2)\n $pep(5)\n$adn\n$tdn\n$Regle\n\nFrame+1\n $pep(1)\n $pep(4)\n$adn\n$tdn\n$Regle\n\nFrame+0\n$pep(0)\n$pep(3)\n$adn\n$tdn\n$Regle\n$Highlight\nDifferences are highlighted with X ->" } append Texte "\nGenetic code\n$CodeGenetique" if {$SansAffichage!=""} { if {[PourWscope]} { set Texte "
    $Texte
    " } return $Texte } if {$Titre==""} { set Titre $Nom } return [AfficheVariable $Texte "GrandeLargeur" $Titre] Wup "AfficheVariable uses listbox, AfficheText uses widget text" return [AfficheTexte $Texte $Nom [expr $OffsetAvant-50]] } proc VoisinADNDeLaZone {K} { global xDebutRectangleDeSelectionNucleique global yDebutRectangleDeSelectionNucleique global xFinRectangleDeSelectionNucleique global yFinRectangleDeSelectionNucleique if { ! [info exists xDebutRectangleDeSelectionNucleique($K)]} { FaireLire "Il faut selectionner une zone par " return "" } if {[regexp "rond" $K]} { set D [set xDebutRectangleDeSelectionNucleique($K)] set F [set xFinRectangleDeSelectionNucleique($K)] set Debut [Mini $D $F] set Fin [Maxi $D $F] } else { set Debut [PositionCanvaOriginaleX $K [Mini [set xDebutRectangleDeSelectionNucleique($K)] [set xFinRectangleDeSelectionNucleique($K)] ]] set Fin [PositionCanvaOriginaleX $K [Maxi [set xDebutRectangleDeSelectionNucleique($K)] [set xFinRectangleDeSelectionNucleique($K)] ]] } set Orient "F" VoisinADN Zone $Debut $Fin $Orient } proc VoitLesPauvres {} { #set Fichier "[RepertoireDuGenome]/parser/AttriToutVf2" set Fichier "[RepertoireDuGenome]/parser2007/NewAttriToutVf" foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {^ligne } $Ligne]} { set onla 0 scan $Ligne "%s %s" bidon numeroligne } if {[regexp {bidon trouve pas} $Ligne]} { set DejaVuTrouvePas($numeroligne) 1 } if {[regexp {bidon fiche n'existe plus} $Ligne]} { set DejaVuFicheExistePlus($numeroligne) 1 } } #Espionne "DejaVuTrouvePas" set taille1 [array size DejaVuTrouvePas] Espionne $taille1 #Espionne [array names DejaVuTrouvePas] #Espionne "DejaVuFicheExistePlus" set taille2 [array size DejaVuFicheExistePlus] Espionne $taille2 #Espionne [array names DejaVuFicheExistePlus] } proc Vrac2TFA {Nom Seq} { #utilise une sequence sous forme de liste #rend la sequence au format fasta avec Nom en en-tete set NewSeq [list] lappend NewSeq ">$Nom" set NbRestant [llength $Seq] set Indice 0 while {$NbRestant>80} { set Chaine "[join [lrange $Seq $Indice [expr $Indice+79]] ""]" lappend NewSeq $Chaine set Indice [expr $Indice + 80] set NbRestant [expr $NbRestant - 80] } set Chaine "[join [lrange $Seq $Indice [expr $Indice+79]] ""]" lappend NewSeq $Chaine return [join $NewSeq "\n"] } proc VraiChemin {Chemin} { set MemoWD [pwd] if { ! [file isdirectory $Chemin]} { set Dir [file dirname $Chemin] set Queue [file tail $Chemin] } else { set Dir $Chemin } if {[catch { cd $Dir } ]} { return $Chemin } set VraiChemin [pwd] if {[info exists Queue]} { append VraiChemin "/$Queue" } cd $MemoWD return $VraiChemin } proc VraiDEDeLaLigneDE {Ligne} { regsub "^DE *" $Ligne "" DE if { ! [regexp -nocase "RecName:" $DE]} { return $DE } Espionne $DE set Full ""; regexp {Full=([^\;]+)\;} $DE Match Full set Short ""; regexp {Short=([^\;]+)\;} $DE Match Short set EC ""; regexp {EC=([^\;]+)\;} $DE Match EC Espionne $EC set Vrai "$Full $Short EC=$EC" if {$Full=="" && $Short==""} { return $DE } return $Vrai } proc VraiGNDeLaLigneGN {Ligne} { regsub "^GN *" $Ligne "" GN regsub {\;$} $GN "" GN if { ! [regexp -nocase "Name=" $GN NameEgal]} { return $GN } regsub -all "\;" $GN " " GN set Vrai [StringApres $NameEgal dans $GN] if {$Vrai==""} { return $GN } return $Vrai } proc VraiNom {Betise} { global VraiNom if {[info exists VraiNom($Betise)]} { return $VraiNom($Betise) } if {[info exists VraiNom("EstCharge")]} { return "" } set VraiNom("EstCharge") 1 set VraiNom(dm) "Drosophila melanogaster" set VraiNom(apis) "Apis melifera" set VraiNom(orizaref) "Oryza sativa" set VraiNom(kluiverxp) "Kluyveromyces lactis" set VraiNom(pombe) "Schizosaccharomyces pombe" set VraiNom(cryptococcus) "Cryptococcus neoformans" set VraiNom(dictyostelium) "Dictostelium unknownus" set VraiNom(danior) "Brachidanio rerio" set VraiNom(panisoform) "Pan troglodytes" set VraiNom(panisoform2) "Pan troglodytes" set VraiNom(panisoform5) "Pan troglodytes" set VraiNom(canis) "Canis familiaris" set VraiNom(gallusgallusp) "Gallus gallus" set VraiNom(xenopuslae) "Xenopus laevis" set VraiNom(xenoplaevis) "Xenopus laevis" set VraiNom(ncrassa) "Neurospora crassa" set VraiNom(schyzosac) "Schizosaccharomyces pombe" set VraiNom(athaliananref) "Arabidopsis thaliana" set VraiNom(nasonia) "Nasonia vitripennis" set VraiNom(bovis) "Bovis taurus" set VraiNom(gallus) "Gallus gallus" set VraiNom(opossum) "Opossum " set VraiNom(nemast) "Nematostella unknownus" set VraiNom(athalian) "Arabidopsis thaliana" set VraiNom(orizaesativ) "Oryza sativa" set VraiNom(tribolium) "Tribolium castaneum" set VraiNom(mm) "Mus musculus" set VraiNom(homosapisoform) "Homo sapiens" set VraiNom(ATHALAINA) "Arabidopsis thaliana" set VraiNom(athalaina) "Arabidopsis thaliana" set VraiNom(Aspergil) "Aspergillus unknownus" set VraiNom(aspergil) "Aspergillus unknownus" set VraiNom(Athalian) "Arabidopsis thaliana" set VraiNom(Athaliana) "Arabidopsis thaliana" set VraiNom(Orizasativ) "Oryza sativa" set VraiNom(Orizasativa) "Oryza sativa" set VraiNom(Picea) "Picea unknownus" set VraiNom(Saccharocerev) "Saccharomyces cerevisiae" set VraiNom(athalian) "Arabidopsis thaliana" set VraiNom(athaliana) "Arabidopsis thaliana" set VraiNom(orizasativ) "Oryza sativa" set VraiNom(orizasativa) "Oryza sativa" set VraiNom(picea) "Picea unknownus" set VraiNom(saccharocerev) "Saccharomyces cerevisiae" set VraiNom(epicea) "Picea unknownus" set VraiNom(orizasat) "Oryza sativa" set VraiNom(orizasativ) "Oryza sativa" set VraiNom(phycomitrella) "Phycomitrella unknownus" set VraiNom(physcomitrel) "Phycomitrella unknownus" set VraiNom(physcomitrella) "Phycomitrella unknownus" set VraiNom(physcomitrellagb) "Phycomitrella unknownus" set VraiNom(vitis) "Vitis vinifera" set VraiNom(vitisvini) "Vitis vinifera" set VraiNom(aedesput) "Aedes aegypti" set VraiNom(ascomycetes) "Ascomycete sp." set VraiNom(asper) "Aspergillus unknownus" set VraiNom(asperg) "Aspergillus unknownus" set VraiNom(aspergil) "Aspergillus unknownus" set VraiNom(athalia) "Arabidopsis thaliana" set VraiNom(athaliana) "Arabidopsis thaliana" set VraiNom(caeno) "Caenorhabditis elegans" set VraiNom(candida) "Candida unknownus" set VraiNom(ce) "Caenorhabditis elegans" set VraiNom(cryptosporidium) "" set VraiNom(dictyostel) "Dictostelium unknownus" set VraiNom(drozo) "Drosophila melanogaster" set VraiNom(fungi) "Ascomycete sp." set VraiNom(fungi-macro-gb) "Fungi unknownus" set VraiNom(homosap) "Homo sapiens" set VraiNom(kluiverlactis) "Kluyveromyces lactis" set VraiNom(leishmania3) "Leishmania unknownus" set VraiNom(monodelphis) "Monodelphis domestica" set VraiNom(orizasativ) "Oryza sativa" set VraiNom(orizasativa) "Oryza sativa" set VraiNom(ornithor) "Ornithorhynchus anatinus" set VraiNom(ostreococcus) "Ostreococcus unknownus" set VraiNom(p62canis) "Canis familiaris" set VraiNom(p62nematopref) "Nematode sp." set VraiNom(pan) "Pan troglodytes" set VraiNom(phycomitrella) "Physcomitrella patens" set VraiNom(physcomitrellagb) "Physcomitrella patens" set VraiNom(pichia) "Pichia pastoris" set VraiNom(plantegb) "Plant unkownus" set VraiNom(plasmodium) "Plasmodium sp." set VraiNom(plasmodiumvivax) "Plasmodium vivax" set VraiNom(sac) "Saccharomyces cerevisiae" set VraiNom(saccharocerev) "Saccharomyces cerevisiae" set VraiNom(sclerotina) "Sclerotinia sclerotiorum" set VraiNom(strongylo) "Unknownus unknownus" set VraiNom(tetraodon) "Tetraodon sp." set VraiNom(vitis) "Vitis vinifera" set VraiNom(xenopuslaevis) "Xenopus laevis" set VraiNom(yeast) "Yeast unknownus" return [VraiNom $Betise] } proc VraisParaloguesDe {Nom} { global VraisParaloguesDe global RepertoireDuGenome set SeuilParalogue 20 if {[info exists VraisParaloguesDe($Nom)]} { return [set VraisParaloguesDe($Nom)] } if {[info exists VraisParaloguesDe]} { return {} } set FichierVraisParalogues "$RepertoireDuGenome/fiches/paralogues" if {[file exists $FichierVraisParalogues]} { foreach Ligne [LesLignesDuFichier $FichierVraisParalogues] { set LesParas [split $Ligne " "] set NomLu [lindex $LesParas 0] lappend LesNoms $NomLu set VraisParaloguesDe($NomLu) [lrange $LesParas 1 end] } set VraisParaloguesDe(LaListeMerci) $LesNoms if {[info exists VraisParaloguesDe($Nom)]} { return [set VraisParaloguesDe($Nom)] } return {} } set PICPar "$RepertoireDuGenome/fiches/piclustalw.paralogues" if { ! [file exists $PICPar]} { FaireLire "Please create the paralogues with AlignonsLesParalogues" set VraisParaloguesDe(LaListeMerci) {} return {} } foreach Ligne [LesLignesDuFichier $PICPar] { set Liste [split $Ligne " "] set NomLu [lindex $Liste 0] set LesParas {} foreach {Para PIC} [lrange $Liste 1 end] { if {$Para==$NomLu} { continue } if { $PIC < $SeuilParalogue } { break } lappend LesParas $Para } if {$LesParas=={}} { continue } lappend LesLignes "$NomLu [join $LesParas " "]" } SauveLesLignes $LesLignes dans $FichierVraisParalogues return [VraisParaloguesDe $Nom] } proc VrpCircle {} { global VrpC if {[winfo exists .vrpcircle]} {return} set VrpC(AA1name,1) {} set WinScale 20.0 set VrpC(Radius) [expr abs($VrpC(MaxX))] if { abs($VrpC(MinX)) > abs($VrpC(MaxX)) } { set VrpC(Radius) [expr abs($VrpC(MinX))] } if { $VrpC(Radius) < abs($VrpC(MinY)) } { set VrpC(Radius) [expr abs($VrpC(MinY))] } if { $VrpC(Radius) < abs($VrpC(MaxY)) } { set VrpC(Radius) [expr abs($VrpC(MaxY))] } set VrpC(Radius) [expr int($VrpC(Radius)+0.5)] set VrpC(Delta) 10 set VrpC(CentX) [expr int( $VrpC(Radius) * $WinScale + 0.5) ] set VrpC(CentX) [expr $VrpC(CentX) + $VrpC(Delta)] set VrpC(Radius) $VrpC(CentX) set VrpC(CentY) $VrpC(CentX) set WinX [expr 2*$VrpC(CentX)] set WinY [expr 2*$VrpC(CentY)] set font "Helvetica 10 normal" # fenetre cercle VRP set w .vrpcircle toplevel $w wm title $w "Vrp Circle" set c $w.c canvas $c -scrollregion [list 0 0 $WinX $WinY] -width $WinX -height $WinY -relief sunken -borderwidth 2 -background white button $w.print -text "Print" -background yellow -command [list PrintCanvas $c png] button $w.close -text "Close" -background green1 -command [list destroy $w] grid $c -row 0 -column 0 -columnspan 2 -sticky news -padx 5 -pady 5 grid $w.print -row 1 -column 0 -sticky w -padx 5 -pady 10 grid $w.close -row 1 -column 1 -sticky e -padx 5 -pady 10 grid columnconfig $w all -weight 1 set blue DeepSkyBlue3 set red red set bisque bisque3 set green SeaGreen3 #set blue black #set red black #set bisque black #set green black set x1 $VrpC(Delta) set y1 $VrpC(Delta) set x2 [expr $WinX - $VrpC(Delta) ] set y2 [expr $WinY - $VrpC(Delta) ] # cercle et lignes $c create oval $x1 $y1 $x2 $y2 -outline $red -width 1 $c create line $VrpC(CentX) $VrpC(Delta) $VrpC(CentX) [expr $WinY-$VrpC(Delta)] -fill $red $c create line $VrpC(Delta) $VrpC(CentY) [expr $WinX-$VrpC(Delta)] $VrpC(CentY) -fill $red for {set i 0 } { $i < $VrpC(NbAA) } { incr i } { set x [expr $VrpC(HydX,$i)*$WinScale + $VrpC(CentX)] set y [expr -$VrpC(HydY,$i)*$WinScale+$VrpC(CentY)] $c create line $VrpC(CentX) $VrpC(CentY) $x $y -arrow last if { ( $x >= $VrpC(CentX) ) } { set anchor [ expr "{$y} >= $VrpC(CentY) ? {nw} : {sw} " ] } else { set anchor [ expr "{$y} >= $VrpC(CentY) ? {ne} : {se}" ] } $c create text $x $y -text $VrpC(AA1name,$i) -anchor $anchor } set lastX 0 set lastY 0 FenetreAuCentre $w return } proc VrpDeGroupe {g} { global Vrp VrpC ListeDesPiliersDuGroupe FaireAttendre "Please wait ...\nBuilding VRP for group $g" set xprev 0.0 ; set yprev 0.0 set cmx 0.0 ; set cmy 0.0 set minX 9999999. ; set minY 9999999. set maxX -9999999. ; set maxY -9999999. set newX {} ; set newY {} set Vrp(seqSS) {} set Vrp(SS) {} set Vrp(AA1) "" set Vrp(Sz) [LongueurDeLAlignement] set Vrp(Nb) {} if {! [info exists ListeDesPiliersDuGroupe]} { CreeLesPiliers } if {$g eq "All"} {set g "GroupeToutLeMonde"} set i 0 set ntot [string length [lindex [set ListeDesPiliersDuGroupe($g)] 0]] foreach p [set ListeDesPiliersDuGroupe($g)] { set xt 0.0 set yt 0.0 set n 0 foreach aa [split $p ""] { if {$aa eq "." || $aa eq "X" || $aa eq "Z"} {continue} set xt [expr {$xt + $VrpC(HydX,$aa)}] set yt [expr {$yt + $VrpC(HydY,$aa)}] incr n } # Attention ! # Suppose : 1 colonne de E par exemple # on a donc sumX = n*E et ici n=ntot # x= sumX/ntot set x [expr {(1.0/$ntot) * $Vrp(ScaleOrig)*$xt + $xprev}] set y [expr {(1.0/$ntot) * $Vrp(ScaleOrig)*$yt + $yprev}] lappend newX $x lappend newY $y lappend Vrp(Nb) [expr {$i + 1}] set xprev $x set yprev $y set cmx [expr {$cmx + $x}] set cmy [expr {$cmy + $y}] incr i } set minX [expr min([join $newX ,])] set minY [expr min([join $newY ,])] set maxX [expr max([join $newX ,])] set maxY [expr max([join $newY ,])] set Vrp(X) [LissageParFenetre $newX 5] set Vrp(Y) [LissageParFenetre $newY 5] set Vrp(CmX) [expr {$cmx / ($Vrp(Sz)+1)}] set Vrp(CmY) [expr {$cmy / ($Vrp(Sz)+1)}] set Vrp(MinX) $minX set Vrp(MinY) $minY set Vrp(MaxX) $maxX set Vrp(MaxY) $maxY set Vrp(SzX) [expr {($Vrp(MaxX) - $Vrp(MinX))/2}] set Vrp(SzY) [expr {($Vrp(MaxY) - $Vrp(MinY))/2}] FaireLaSuite return } proc VueEditee {{edt ""}} { if {$edt eq ""} {return $::VueEditee} set ::VueEditee $edt return } proc WCoucou {} { puts "un petit coucou de Wolfgang" } proc WIW {{Qui ""} {Quoi ""}} { #rR Attention pour que ça marche pour les Eukaryota Archaea et autre il faut être dasn le bon Gscope #rR oi pour Eukaryota; OIA pour Archaea etc. global WIW #rR WIW Who is Where # Attention il y a quelques P12345_BIDULE qui correspondent à plusieurs organismes if {[info exists WIW($Qui,$Quoi)]} { return $WIW($Qui,$Quoi) } if {[info exists WIW("EstCharge")]} { if {[regexp {_([^_]+)$} $Qui Match CodeOrga]} { if {[info exists WIW(CodeOrga_$CodeOrga,$Quoi)]} { return $WIW(CodeOrga_$CodeOrga,$Quoi) } else { if {[info exists WIW(CodeOrga_$CodeOrga,OX)]} { set LeResultat {} foreach OX $WIW(CodeOrga_$CodeOrga,OX) { if {[info exists WIW($OX,$Quoi)]} { lappend LeResultat $WIW($OX,$Quoi) } } return $LeResultat } } } if {[info exists WIW($Qui,ListOfOX)]} { set LeR {} foreach OX $WIW($Qui,ListOfOX) { if {[info exists WIW($OX,$Quoi)]} { LConcat LeR $WIW($OX,$Quoi) } } return $LeR } if {[info exists WIW(CodeOrga_$Qui,OX)]} { return [WIW CodeOrga_$Qui $Quoi] } return "" } set WIW("EstCharge") 1 set Science [ScienceOiDeMonDomaine] # set FicWIW "[RepertoireDuGenome]/fiches/wiw.txt" set FicWIW "/genomics/link/$Science/fiches/wiw.txt" set WIW(Filename,) $FicWIW if {[file exists $FicWIW]} { array set WIW [ContenuDuFichier $FicWIW] return [WIW $Qui $Quoi] } set RepOip "/genomics/link/$Science/oip" NousAllonsAuBoulot $RepOip set NiveauSeq 0 foreach Nom [ListeDesPABs] { lappend WIW(ListOf,OP) $Nom foreach Ligne [LesLignesDuFichier [GscopeFile $Nom "oip"]] { if {[string index $Ligne 0]!=">"} { lappend LaTranche $Ligne; continue } lassign [BAIOX $Ligne "AcceptIdOnly"] B Ac Id OX if {[info exists WIW($Ac,OX)] && $OX!=5763} { FaireLire "Double in $Nom\n$Ac\n$WIW($Ac,OX)\n$OX" } set WIW($Ac,OX) $OX if {[info exists WIW($Id,OX)] && $OX!=5763} { FaireLire "Double in $Nom\n$Id\n$WIW($Id,OX)\n$OX" } lappend WIW($OX,ListOfOP) $Nom lappend WIW($Nom,ListOfOX) $OX lappend WIW($Nom,ListOfID) $Id lappend WIW(ListOf,OX) $OX lappend WIW($OX,ListOfAC) $Ac lappend WIW($OX,ListOfID) $Id set CodeOrga [lindex [split $Id "_"] end] if {[info exists WIW(CodeOrga_$CodeOrga,OX)]} { if {[lsearch $WIW(CodeOrga_$CodeOrga,OX) $OX]<0} { lappend WIW(CodeOrga_$CodeOrga,OX) $OX lappend WIW(ListOf,CodeOrgaWithMultipleOX) $CodeOrga } } else { lappend WIW(ListOf,CodeOrga) $CodeOrga set WIW(CodeOrga_$CodeOrga,OX) $OX } if {[info exists WIW($OX,CodeOrga)] && [lsearch $WIW($OX,CodeOrga) $CodeOrga]<0} { lappend WIW($OX,CodeOrga) $CodeOrga lappend WIW(ListOf,OXWithMultipleCodeOrga) $OX } else { set WIW($OX,CodeOrga) $CodeOrga } if {$NiveauSeq} { set WIW($Ac,OX) $OX set WIW($Id,OX) $OX set WIW($Ac,AC) $Ac set WIW($Id,AC) $Ac set WIW($Ac,ID) $Ac set WIW($Id,IC) $Id lappend WIW($Nom,ItsAC) $Ac lappend WIW($Nom,ItsID) $Id lappend WIW(ListOf,AC) $Ac lappend WIW(ListOf,ID) $Id } } set WIW($Nom,ListOfID) [lsort $WIW($Nom,ListOfID)] } if {[info exists WIW(ListOf,CodeOrgaWithMultipleOX)]} { set WIW(ListOf,CodeOrgaWithMultipleOX) [lsort -unique $WIW(ListOf,CodeOrgaWithMultipleOX)] } set WIW(ListOf,OX) [lsort -integer -unique $WIW(ListOf,OX)] foreach OX $WIW(ListOf,OX) { set WIW($OX,ListOfOP) [lsort -unique $WIW($OX,ListOfOP)] } foreach OP $WIW(ListOf,OP) { set WIW($OP,ListOfOX) [lsort -integer -unique $WIW($OP,ListOfOX)] } Sauve [array get WIW] dans $FicWIW OnRevientDuBoulot return [WIW $Qui $Quoi] } proc WIWB {{Qui ""} {Quoi ""}} { #rR Who Is Where in the Blast global WIWB if {$Quoi==""} { if {[EstUnPAB $Qui]} { set Quoi "Queries" } else { set Quoi "Nom" } } if {[info exists WIWB($Qui,$Quoi)]} { return $WIWB($Qui,$Quoi) } if {[info exists WIWB("EstCharge")]} { return "" } set WIWB("EstCharge") 1 set Fichier "[RepertoireDuGenome]/fiches/WhereIsCodeOrga.txt" foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom lappend WIWB(ListOf,Nom) $Nom set LesQuery [lrange [split $Ligne " "] 1 end] set WIWB($Nom,Queries) $LesQuery foreach Query $LesQuery { lappend WIWB($Query,Nom) $Nom lappend WIWB(ListOf,Queries) $Query } } set WIWB(ListOf,Queries) [lsort -unique $WIWB(ListOf,Queries)] return [WIWB $Qui $Quoi] } proc WaliSourceDir {{Value ""}} { global WaliSourceDir if {$Value!=""} { set WaliSourceDir $Value } if { ! [info exists WaliSourceDir]} { set WaliSourceDir "[HomeRipp]/wwwLinux/wali" } return $WaliSourceDir } proc Warne {Texte} { global WarneWindow global WarneEnPuts global WarneNon if {[info exists WarneNon] && $WarneNon} { return "" } if { ! [info exists WarneEnPuts]} { set WarneEnPuts 1 } if { [info exists WarneEnPuts] && $WarneEnPuts } { puts $Texte return $Texte } # return "" Wup "La suite est a revoir si Warne dans fenetre" if { ! [info exists WarneWindow] || ! [winfo exists $WarneWindow]} { set WarneWindow [AfficheVariable "Warnings..." "" "Warnings"] wm iconify $WarneWindow } $WarneWindow.frame.list insert end $Texte $WarneWindow.frame.list yview end update return $WarneWindow } proc WarneReading {Texte} { global WarneReading global RepertoireDuGenome set Fichier "$RepertoireDuGenome/fiches/warne_reading" if { ! [info exists WarneReading]} { if {[file exists $Fichier]} { if {0 && [OuiOuNon "Do I warne reading problems in warne_reading file ?"]} { set WarneReading 1 File delete -force $Fichier } else { set WarneReading 0 } } else { set WarneReading 1 } } if { ! $WarneReading} { return "" } return [AppendAuFichier $Fichier $Texte] } proc Warning2Text {aT} { upvar $aT tbl global TextOut lappend TextOut "[string repeat = 60]" if {$tbl(Title) ne ""} { lappend TextOut "[string toupper $tbl(Title)]" } if {$tbl(Text) ne ""} { lappend TextOut $tbl(Text) } lappend TextOut "[string repeat = 60]" lappend TextOut "" return } proc WarningNterCter {Box Ref Name} { #pas termine #peut pas utiliser RefPfam comme Ref car on n a pas les coord" set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord.aj" if {![file exists $FileMacsims]} {set FileMacsims "[RepertoireDuGenome]/macsimXml/$Box.orgord"} set CoordRef [CoordGenom $Box,$Ref coord] set CoordName [CoordGenom $Box,$Name coord] scan $CoordRef "%s %s %s" ChrRef StartRef StopRef scan $CoordName "%s %s %s" ChrName StartName StopName Espionne "$Ref $CoordRef" Espionne "$Name $CoordName" if {$ChrRef!=$ChrName} {return "la ref et le name ne sont pas sur meme chr"} set Result [DiffProt $FileMacsims] foreach Ligne [split $Result "\n"] { if {[regexp "^$Name" $Ligne]} { Espionne "$Ligne" scan $Ligne "%s %s %s" toto Nter Cter break } } if {[regexp "^-" $Nter]} { Espionne "onentre1" regsub -all {\-} $Nter "" Nter set nbbuc [expr $Nter * 3] Espionne "nbbuc $nbbuc" set limit [expr $StartRef-$nbbuc] Espionne "limit $limit" if {$StartName>$limit} { Espionne "warning" } else { Espionne "ok" } } if {[regexp "^-" $Cter]} { Espionne "onentre2" regsub -all {\-} $Cter "" Cter set nbbuc [expr $Cter * 3] Espionne "nbbuc $nbbuc" set limit [expr $StopRef-$nbbuc] Espionne "limit $limit" if {$StopName>$limit} { Espionne "ok" } else { Espionne "warning" } } } proc WarningsDesSeqs {} { global Warn if {! [info exists Warn]} {return} foreach e [array names Warn] { switch $e { "B" { FaireLire "There are B amino acids (stands for D or N) in the sequence of :\n[join [set Warn(B)] ","]\nSome computations won't be available !" AuLog @begin warning AuLog @title Warning : B amino acids AuLog @text "There are B amino acids (stands for D or N) in the sequence of :\n[join [set Warn(B)] ","]\nSome computations won't be available !" AuLog @end } "Z" { FaireLire "There are Z amino acids (stands for E or Q) in the sequence of :\n[join [set Warn(Z)] ","]\nSome computations won't be available !" AuLog @begin warning AuLog @title Warning : Z amino acids AuLog @text "There are Z amino acids (stands for E or Q) in the sequence of :\n[join [set Warn(Z)] ","]\nSome computations won't be available !" AuLog @end } "J" { FaireLire "There are J amino acids (stands for L or I) in the sequence of :\n[join [set Warn(J)] ","]\nSome computations won't be available !" AuLog @begin warning AuLog @title Warning : J amino acids AuLog @text "There are J amino acids (stands for L or I) in the sequence of :\n[join [set Warn(J)] ","]\nSome computations won't be available !" AuLog @end } "O" { FaireLire "There are unknown amino acids (O) in the sequence of :\n[join [set Warn(O)] ","]\nSome computations won't be available !" AuLog @begin warning AuLog @title Warning : unknown amino acids AuLog @text "There are unknown amino acids (O) in the sequence of :\n[join [set Warn(O)] ","]\nSome computations won't be available !" AuLog @end } "U" { if {[ModeI]} { set choix [tk_dialog .uwarn "Warning" "There are seleno-cysteins (U) residues in the sequence of :\n[join [set Warn(U)] ","]\nSome computations won't be available if you keep them.\nDo you want to replace them with C ?" "" 0 " Yes " " No "] } else { set choix 1 } AuLog @begin warning AuLog @title Warning : seleno-cystein amino acids if {$choix} { ChangeSelenoC2C AuLog @text "There are seleno-cystein amino acids (U) in the sequence of :\n[join [set Warn(U)] ","]\nThey have been replaced by cysteins (C)" } else { AuLog @text "There are seleno-cystein amino acids (U) in the sequence of :\n[join [set Warn(U)] ","]\nSome computations won't be available !" } AuLog @end } "Numbers" { FaireLire "There are numbers (0-9) in the sequence of :\n[join [set Warn(Numbers)] ","]\nSome computations won't be available !" AuLog @title Warning : numbers in sequence AuLog @text "There are numbers [0-9] in the sequence of :\n[join [set Warn(Numbers)] ","]\nSome computations won't be available !" AuLog @end } "BadPdb" { FaireLire "Can't download the following PDB entries from servers :\n[join [set Warn(BadPdb)] ","]\n" AuLog @title Warning : problems downloading PDB AuLog @text "Can't download the following PDB entries from servers :\n[join [set Warn(BadPdb)] ","]\n" AuLog @end } "ChnPdb" { FaireLire "Can't find the requested chain in the following PDB entries:\n[join [set Warn(ChnPdb)] ","]\n" } "Vide" { FaireLire "The following sequences names do not contain any amino acid sequences :\n[join [set Warn(Vide)] ","].\nThey will be discarded from the alignment." AuLog @title Warning : empty sequences AuLog @text "The following sequences names do not contain any amino acid sequences :\n[join [set Warn(Vide)] ","].\nThey will be discarded from the alignment." AuLog @end } } } return } proc WebInforme {Nom} { #rR je ne sais pas qui l'utilise !! set Info [ExtraitInfo $Nom] Html_ZeroToBody Html_Banner Wscope Html_BackTo $Nom Html_Append "
    " Html_Append "

    " Html_Append "Search any string within the infos files of [Science]" Html_Append "
        to search a Gene Name exactly, use the search string 'ValiGN: Pax6' (with ':' and one space)" Html_Append "

    " Html_Append "
    " Html_Append "

    " Html_Append " " Html_Append " " Html_Append " " Html_Append " " Html_Append "     " Html_Append " " Html_Append "     " Html_Append " " Html_Append " " Html_Append "     " Html_Append " " Html_Append "

    " Html_Append "
    " #LP if {[OnTraite "EVImm"]} { Html_Append "

    or do a blast search

    " Html_Append "" } #LP Html_BodyToEnd return [Html_Get] } proc WebOrder {{LesSeq ""} {LesNom ""} {LesNot ""}} { if {$LesSeq=={}} { set LesSeq "OligosKeeper" } while {$LesSeq=="OligosKeeper" } { if { ! [OuiOuNon "Do we use OligosKeeper ?"]} { return "" } FaireLire "Please choose the OligoKeeper.tfas" set FiSeq [ButineArborescence "All" "[RepertoireDuGenome]/atelier/OligosKeeper/*.tfas"] if {$FiSeq==""} { continue } regsub {.tfas$} $FiSeq "" FiNom regsub {.tfas$} $FiSeq "" FiNot append FiNom ".noms" append FiNot ".nots" set LesSeq [LesLignesDuFichier $FiSeq] set LesNom [LesLignesDuFichier $FiNom] set LesNot [LesLignesDuFichier $FiNot] return [WebOrder $LesSeq $LesNom $LesNot] } if {[OuiOuNon "OligosKeeper\n We could keep that oligo-order in a file and order all together ?"]} { set FiSeq "" if { ! [OuiOuNon "Do we create a new OligosKeeper ?" 1]} { FaireLire "Please choose the OligoKeeper.tfas" set FiSeq [ButineArborescence "All" "[RepertoireDuGenome]/atelier/OligosKeeper/*.tfas"] } while {$FiSeq==""} { set FiSeq [FichierPourSaveAs "[RepertoireDuGenome]/atelier/OligosKeeper/OligosKeeper[Date].tfas"] if {$FiSeq=="" && [OuiOuNon "Do I cancel OligosKeeper ?"]} { break } if {$FiSeq==""} { continue } } regsub {.tfas$} $FiSeq "" FiNom regsub {.tfas$} $FiSeq "" FiNot append FiNom ".noms" append FiNot ".nots" foreach Seq $LesSeq Nom $LesNom Not $LesNot { if {$Nom==""} { set Nom "NoValue" } if {$Not==""} { set Not "NoValue" } AppendAuFichier $FiSeq $Seq AppendAuFichier $FiNom $Nom AppendAuFichier $FiNot $Not } return $FiSeq } while 1 { set FichierForm "~/oligo.php.html" set LeTexte {} lappend LeTexte "Il faut maintenant se connecter sur le site de commande d'oligos" lappend LeTexte "" lappend LeTexte "[UrlCommandeOligo]/login.html" lappend LeTexte "" lappend LeTexte "Se loguer, et sauver le cadre de commande dans le fichier" lappend LeTexte "$FichierForm" lappend LeTexte "" lappend LeTexte "Valider cette page en selectionnant le nom du fichier ci-dessus." lappend LeTexte "" lappend LeTexte " Merci." lappend LeTexte "" set Texte [join $LeTexte "\n"] set Retour [AfficheVariable $Texte "AvecRetour"] if {$Retour!=""} { break } if {[OuiOuNon "Do I cancel ?"]} { return "" } } while 1 { set NewForm [MiseAJourFormulairePourMichel $FichierForm $LesSeq $LesNom $LesNot] set FichierNewForm [Sauve $NewForm dans $FichierForm.html] set LeTexte {} regsub {\~} $FichierNewForm "" FichierNewForm lappend LeTexte "Il faut maintenant recharger le fichier suivant dans le browser (Windows ou Linux)" lappend LeTexte " en corrigeant pour que le PC s'y retrouve" lappend LeTexte "" lappend LeTexte "file://h:$FichierNewForm" lappend LeTexte "file://[HomeRipp]/$FichierNewForm" lappend LeTexte "" lappend LeTexte "et valider cette page si tout se passe bien." lappend LeTexte "" lappend LeTexte " Merci." lappend LeTexte "" set Texte [join $LeTexte "\n"] set Retour [AfficheVariable $Texte "AvecRetour"] if {$Retour!=""} { break } if {[OuiOuNon "Do I cancel ?"]} { return "" } } return $Retour } proc WebServer_Address {} { #Adresse du serveur web hebergeant ARPAnno global WebServer_Address if {[info exists WebServer_Address]} {return $WebServer_Address} #set WebServer_Address "http://bips.u-strasbg.fr:85" set WebServer_Address "http://bips.u-strasbg.fr" #set WebServer_Address "https://crpgtw.crp-sante.healthnet.lu/http://crpbio.crp-sante.healthnet.lu" #set WebServer_Address "http://bioinfo.crp-sante.lu" #set WebServer_Address "http://www.bioinformatics.lu" return $WebServer_Address } proc WebService {Qui Commande args} { #rR args est une liste key value key value key value #rR pour Execute il faut utiliser querytext #rR voir les exemples dans TestWebService package require http set Url [WebServiceUrl $Qui] if {$Commande==""} { set QueryEncode [::http::formatQuery {*}$args] } else { set QueryEncode [::http::formatQuery "webcommand" $Commande {*}$args] } # set QueryEncode [::http::formatQuery from ACC to P_REFSEQ_AC format tab query P13368] # Espionne $QueryEncode set Token [::http::geturl $Url -query $QueryEncode] set Retour [::http::data $Token] set Retour [string trim $Retour] set iGetWhat [lsearch $args "getwhatfromserial"] if {$iGetWhat>=0} { set GetWhat [lindex $args [incr iGetWhat]] if {$GetWhat=="GetList"} { return [ListFromSerial $Retour] } if {$GetWhat=="GetFirstValue"} { return [FirstElementFromSerial $Retour] } } return $Retour } proc WebServiceOOOOOOOOOOLD {Qui Commande args} { #rR args est une liste key value key value key value set Url [WebServiceUrl $Qui] set QueryEncode [eval ::http::formatQuery "webcommand" $Commande $args] Espionne $QueryEncode set Token [eval ::http::geturl $Url -query $QueryEncode] set Retour [::http::data $Token] set Retour [string trim $Retour] set iGetWhat [lsearch $args "getwhatfromserial"] if {$iGetWhat>=0} { set GetWhat [lindex $args [incr iGetWhat]] if {$GetWhat=="GetList"} { return [ListFromSerial $Retour] } if {$GetWhat=="GetFirstValue"} { return [FirstElementFromSerial $Retour] } } return $Retour } proc WebServiceUrl {{Qui ""}} { if {$Qui=="GxDb" } { return "http://gx.lbgi.fr/gx/phpRR/lance.php?action=Munitions::WebService" } if {$Qui=="Gx" } { return "http://gx.lbgi.fr/gx/phpRR/lance.php?action=Munitions::WebService" } if {$Qui=="Genoret"} { return "http://genoret.lbgi.fr/genoret/phpRR/lance.php?action=Munitions::WebService" } return $Qui } proc WeightDeHenikoff {ListePil} { # Henikoff and Henikoff # # wi= 1/L sum 1/(Kx.Nx) # L = alignment length # Kx = number of amino acid types at position x # Nx = number of amino acid at pos x that # are the same as seq i # inits set NbSeq [string length [lindex $ListePil 0]] for {set i 0} {$i < $ns} {incr i} { set w($i) 0.0 } # loop over all positions foreach p $ListePil { # number of elements set lp [split $p ""] set kx [llength [lsort -unique $lp]] set i -1 foreach a $lp { incr i if {$a ne "."} { set na [expr {$NbSeq - [string length [string map [list $a ""] $p]]}] set w($i) [expr {[set w($i)] + 1./($na*$kx)}] } } } set Lw [list] set len [expr {double([llength $Lpil])}] for {set i 0} {$i < $NbSeq} {incr i} { lappend Lw [expr {[set w($i)]/$len}] } return $Lw } proc WeightDeVingron {Ln LPCI} { # Argos and Vingron # wi = 1/(N-1) sum_i!=j d(si,sj) # moyenne des distance de seq j aux autres array set T $LPCI set Ns [llength $Ln] foreach a $Ln { set sum 0.0 foreach b $Ln { if {$a eq $b} {continue} # Attention ! distance, pas PCI set sum [expr {$sum + (1. - [lindex [set T($a,$b)] 0])}] } lappend Lw [expr {$sum/($Ns-1)}] } return $Lw } proc WeightsDeLuc {Ln LPCI} { # circular weights # # wi = sum_i!=j wj x d(si,sj) # w = D x w # (1 - D)x w = 0 # # D = distance matrix # w = vector of weights # # solved using eigen decomposition # weights are coordinates of eigenvector of the # highest eigenvalue # package require math::linearalgebra set Ns [llength $Ln] set b [::math::linearalgebra::mkVector $Ns 1.0] set mt [::math::linearalgebra::mkMatrix $Ns $Ns 0.] set mf [::math::linearalgebra::mkMatrix $Ns $Ns 0.] # Matrix (1-D) # D = 1 - pci so 1 - D = pci array set T $LPCI set Md [list] foreach a $Ln { set Lv [list] foreach b $Ln { lappend Lv [lindex [set T($a,$b)] 0] } lappend Md $Lv } # eigen decomposition set Msg "" catch {set R [::math::linearalgebra::eigenvectorsSVD $Md]} Msg if {$Msg ne ""} { set Ns [llength $Ln] set v [expr {1.0/$Ns}] set Lw [lrepeat $Ns $v] FaireLire "Error while computing Eigen decomposition !\nAll weights are set to $v" puts "Error while computing Eigen decomposition !\nAll weights are set to $v" return $Lw } lassign $R V1 V2 # vector with highest eigenvalue ranks 0 set Lv [lindex $V1 0] # puts weights so that sum wi = 1. set b [lsort -real $Lv] set min [lindex $b 0] set max [lindex $b end] set eps 0.01 set s 0.0 foreach v $Lv { set x [expr {($v - $min + $eps)/($max - $min + $eps)}] lappend Lx $x set s [expr {$s + $x}] } set sum 0.0 set Lw [list] foreach x $Lx { set n [expr {$x / $s}] lappend Lw $n set sum [expr {$sum + $n}] } return $Lw } proc WelcomeToMe {} { PourWscope 1 set FichierPresentation "[RepertoireDuGenome]/html/index.html" if {[file exists $FichierPresentation]} { return [ContenuDuFichier $FichierPresentation] } set NomGscope [file tail [RepertoireDuGenome]] set PreFixe [PreFixe] set Organisme [NotreOS] if {$Organisme=="Inconnu inconnu"} { set Organisme "" } set TexteAffiche "$NomGscope $PreFixe $Organisme" return [H_Href $TexteAffiche "[WscopeServer]?$NomGscope&GuideMoi"] } proc WelcomeToWscope {{ReScan ""} {Order ""}} { PourWscope 1 if {$Order==""} { set Order 0 } set ReScan [regexp -nocase "ReScan" $ReScan] set Science [Science] set RepExisting "[GscopeDatabaseDir Zero]/fiches" set LesFichiersExistingProjects [lsort -decreasing [glob -nocomplain "$RepExisting/ExistingProjects*.txt"]] set FichierExistingProjects [lindex $LesFichiersExistingProjects 0] set Memorise 0 if {$ReScan || [FileAbsent $FichierExistingProjects]} { set Date [Date "YMD_HMS"] set FichierExistingProjects "$RepExisting/ExistingProjects_$Date.txt" set Memorise 1 } if {[FileAbsent $FichierExistingProjects]} { set LesTexteAffiche {} foreach FichierMiniConfig [lsort [glob "/genomics/link/*/beton/miniconfig"]] { set NomGscope [file tail [file dirname [file dirname $FichierMiniConfig]]] if {[regexp -nocase {^Old|Old$|^Hidden|Hidden$} $NomGscope]} { continue } regsub "miniconfig$" $FichierMiniConfig "deny" FichierDeny if {[file exists $FichierDeny]} { continue } set OrganismeLu "Unknown organism name" set Prefixe "" foreach Ligne [LesLignesDuFichier $FichierMiniConfig] { if {[regexp "^NotreOS " $Ligne]} { scan $Ligne "%s %s %s" Bidon Genre Espece regsub {\.$} $Espece "" Espece set OrganismeLu "$Genre $Espece" continue } if {[regexp "PrefixeDesORFs" $Ligne]} { set Prefixe [StringApres "PrefixeDesORFs" dasn $Ligne] continue } } set Owner [StringApres "owner" dans [file attributes $FichierMiniConfig]] set Date [DateOfFile $FichierMiniConfig "NiceYMD"] set NbPab 0 set FichierBornes "[file dirname [file dirname $FichierMiniConfig]]/fiches/bornesdespabs" if {[file exists $FichierBornes]} { set NbPab [llength [LesLignesDuFichier $FichierBornes]] } if {[regexp -nocase {^[0-9]} $NomGscope] && $Owner=="jmuller"} { continue } ;#rR on enleve jmuller numerique set TexteAffiche "$NomGscope\t$OrganismeLu\t$NbPab\t$Prefixe\t$Owner\t$Date" lappend LesTexteAffiche $TexteAffiche } SauveLesLignes $LesTexteAffiche dans $FichierExistingProjects } else { set LesTexteAffiche [LesLignesDuFichier $FichierExistingProjects] } set LesTexteAffiche [lsort -dictionary $LesTexteAffiche] set NbProject [llength $LesTexteAffiche] if {$Order!=0} { #rR on retrie ! set LesLTA {} foreach TA $LesTexteAffiche { set LTA [split $TA "\t"] lappend LesLTA $LTA set TAdu($LTA) $TA } set LesLTATrie [lsort -index $Order -dictionary $LesLTA] set LesNouveauTexteAffiche {} foreach LTA $LesLTATrie { lappend LesNouveauTexteAffiche $TAdu($LTA) } set LesTexteAffiche $LesNouveauTexteAffiche } set LesRefText {} foreach TexteAffiche $LesTexteAffiche { scan $TexteAffiche "%s" NomGscope regsub "=.*" $NomGscope "" NomGscope lappend LesRefText "[WscopeServer]?$NomGscope&GuideMoi" $TexteAffiche } set DateVersion [file tail $FichierExistingProjects] regexp {[0-9]+_[0-9]+} $DateVersion DateVersion regsub {[0-9][0-9]$} $DateVersion "" DateVersion set AboutVersion "Last update: $DateVersion (if too old please update it)" set Titre "
    " append Titre "

    Click one of these $NbProject Gscope Projects in following list

    " append Titre "
    $AboutVersion   Order by " set C 0 foreach Header [list Project Orga NbProt Prefixe Owner Date] { append Titre " $Header" incr C } append Titre "
    " append Titre "
    " set Html [Html_ListOfRefs $LesRefText $Titre "PleaseSplitText"] return $Html } proc Wget {url args} { #rR from Kroc http://wfr.tcl.tk/1409 # Nom du fichier de sortie : if {[llength $args] && [lindex $args 0] eq "-O"} { set fichier [lrange $args 1 end] } else { set fichier [file tail $url] } # Téléchargement : if {![catch { package require http set fout [open $fichier w] set tok [http::geturl $url -binary 1 -channel $fout] http::wait $tok close $fout }]} { return [expr [http::ncode $tok] != 200] } return 1 } proc WgetAndLoadIntoDOPA {OrganismeTarget GenomeTarget {OrganismeQuery human} {GenomeQuery hg19} {NbPairesDeChromosomes 23} {BirdVersion bird}} { #script à lancer dans le repertoire ou l'on veut download les fichiers #Le nom du GenomeTarget doit commencer par une majuscule set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Start" set firstchar [string range $GenomeTarget 0 0] set rest [string range $GenomeTarget 1 10] set first [string tolower $firstchar] set GenomeTarget2 "$first$rest" for {set I 1} {$I < $NbPairesDeChromosomes} {incr I} { Espionne "Recuperation de http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chr$I.$GenomeQuery.$GenomeTarget2.net.axt.gz" exec wget "http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chr$I.$GenomeQuery.$GenomeTarget2.net.axt.gz" 2>@1 exec gunzip "/tmp/chr$I.$GenomeQuery.$GenomeTarget2.net.axt.gz" } exec wget "http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chrX.$GenomeQuery.$GenomeTarget2.net.axt.gz" exec gunzip "chrX.$GenomeQuery.$GenomeTarget2.net.axt.gz" exec wget "http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chrY.$GenomeQuery.$GenomeTarget2.net.axt.gz" exec gunzip "chrY.$GenomeQuery.$GenomeTarget2.net.axt.gz" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Dump file ($OrganismeQuery VS $OrganismeTarget) start " set Extension "$VersionGenomeQuery.$VersionGenomeTarget.net.axt" set FichierDeDump [open "$PathOut/$VersionGenomeQuery.VS.$VersionGenomeTarget.dump" "w"] set genomeT $GenomeTarget set genomeQ $GenomeQuery set organismeT $OrganismeTarget set VraiNbChromosomes [expr $NbPairesDeChromosomes + 1] for {set I 1 } { $I <= $VraiNbChromosomes } {incr I} { if { $I < $NbPairesDeChromosomes } { set Chrox $I } else { if { $I == $NbPairesDeChromosomes } { set Chrox "X" } else { set Chrox "Y" } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA: Adding chromosom $Chrox to dump file" set FichierAli [open "$Path/chr$Chrox.$Extension" "r"] set CompteurIdentifiantUnique 0 while { [gets $FichierAli Ligne] >= 0 } { set FirstChar [string range $Ligne 0 0] while { $FirstChar == "#" } { gets $FichierAli Ligne set FirstChar [string range $Ligne 0 0] } incr CompteurIdentifiantUnique ScanLaListe $Ligne aligID chromosomeQ startQ endQ chromosomeT startT endT strandT score gets $FichierAli sequenceQ gets $FichierAli sequenceT gets $FichierAli ligneVide set access "$VersionGenomeQuery.chr$I.seq$CompteurIdentifiantUnique.VS.$VersionGenomeTarget" puts $FichierDeDump "$access|$genomeQ|$genomeT|$CompteurIdentifiantUnique|$organismeT|$chromosomeQ|$startQ|$endQ|$chromosomeT|$startT|$endT|$strandT|$score|$sequenceQ|$sequenceT" } close $FichierAli unset FichierAli } close $FichierDeDump set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Dump file created. Loading..." set FichierDeDump [open "$PathOut/$VersionGenomeQuery.VS.$VersionGenomeTarget.dump" "r"] exec /biolo/bird/bin/bird_pub.sh $BirdVersion $Database.$Table $DumpFile | set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Dump file loaded into DOPA" Espionne "$timestamp|WgetAndLoadIntoDOPA : Deleting Axt files" for {set I 1} {$I < $NbPairesDeChromosomes} {incr I} { file delete "chr$I.$GenomeQuery.$GenomeTarget2.net.axt" } file delete "chrX.$GenomeQuery.$GenomeTarget2.net.axt" file delete "chrY.$GenomeQuery.$GenomeTarget2.net.axt" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : End" } proc WgetAndLoadIntoDOPAmySql {OrganismeTarget GenomeTarget {OrganismeQuery human} {GenomeQuery hg18} {NbPairesDeChromosomes 23} {BirdVersion bird}} { #script à lancer dans le repertoire ou l'on veut download les fichiers #Le nom du GenomeTarget doit commencer par une majuscule set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Start" set firstchar [string range $GenomeTarget 0 0] set rest [string range $GenomeTarget 1 10] set first [string tolower $firstchar] set GenomeTarget2 "$first$rest" for {set I 1} {$I < $NbPairesDeChromosomes} {incr I} { Espionne "Recuperation de http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chr$I.$GenomeQuery.$GenomeTarget2.net.axt.gz" catch { exec wget "http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chr$I.$GenomeQuery.$GenomeTarget2.net.axt.gz" } Espionne "Gunzipping /tmp/chr$I.$GenomeQuery.$GenomeTarget2.net.axt.gz" exec gunzip "/tmp/chr$I.$GenomeQuery.$GenomeTarget2.net.axt.gz" } catch { exec wget "http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chrX.$GenomeQuery.$GenomeTarget2.net.axt.gz"} exec gunzip "chrX.$GenomeQuery.$GenomeTarget2.net.axt.gz" catch { exec wget "http://hgdownload.cse.ucsc.edu/goldenPath/$GenomeQuery/vs$GenomeTarget/axtNet/chrY.$GenomeQuery.$GenomeTarget2.net.axt.gz"} exec gunzip "chrY.$GenomeQuery.$GenomeTarget2.net.axt.gz" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Dump file ($OrganismeQuery VS $OrganismeTarget) start " set Extension "$GenomeQuery.$GenomeTarget2.net.axt" set FichierDeDump [open "/tmp/alignements.csv" "w"] set genomeT $GenomeTarget2 set genomeQ $GenomeQuery set organismeT $OrganismeTarget set VraiNbChromosomes [expr $NbPairesDeChromosomes + 1] for {set I 1 } { $I <= $VraiNbChromosomes } {incr I} { if { $I < $NbPairesDeChromosomes } { set Chrox $I } else { if { $I == $NbPairesDeChromosomes } { set Chrox "X" } else { set Chrox "Y" } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA: Adding chromosom $Chrox to dump file" set FichierAli [open "/tmp/chr$Chrox.$Extension" "r"] set CompteurIdentifiantUnique 0 while { [gets $FichierAli Ligne] >= 0 } { set FirstChar [string range $Ligne 0 0] while { $FirstChar == "#" } { gets $FichierAli Ligne set FirstChar [string range $Ligne 0 0] } incr CompteurIdentifiantUnique ScanLaListe $Ligne aligID chromosomeQ startQ endQ chromosomeT startT endT strandT score gets $FichierAli sequenceQ gets $FichierAli sequenceT gets $FichierAli ligneVide set access "$GenomeQuery.chr$I.seq$CompteurIdentifiantUnique.VS.$GenomeTarget2" puts $FichierDeDump "$access\t$genomeQ\t$genomeT\t$CompteurIdentifiantUnique\t$organismeT\t$chromosomeQ\t$startQ\t$endQ\t$chromosomeT\t$startT\t$endT\t$strandT\t$score\t$sequenceQ\t$sequenceT" } close $FichierAli unset FichierAli } close $FichierDeDump set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Dump file created. Loading..." exec /usr/bin/mysqlimport --user=anno --password=ceji387. --host=[LbgiHost] "ucsc$OrganismeQuery" "/tmp/alignements.csv" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : Dump file loaded into DOPA" Espionne "$timestamp|WgetAndLoadIntoDOPA : Deleting Axt files" for {set I 1} {$I < $NbPairesDeChromosomes} {incr I} { file delete "chr$I.$GenomeQuery.$GenomeTarget2.net.axt" } file delete "chrX.$GenomeQuery.$GenomeTarget2.net.axt" file delete "chrY.$GenomeQuery.$GenomeTarget2.net.axt" file delete "/tmp/alignements.csv" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|WgetAndLoadIntoDOPA : End" } proc WgetzSurWeb {molid {url ""} {GetUrl ""}} { set SiteRSCB "http://www.rcsb.org" set SiteIGBMC "http://bips.u-strasbg.fr" set WGetz "srsbin/cgi-bin/wgetz" set SwTr "swissprot_SP_sptrembl" # set SwTrNw "swissprot_SP_sptrembl_SP_sptnew" set Defauts(UrlPdbHome) "$SiteIGBMC/PipeAlign/get_pdb_file.cgi?XXXX" # set Defauts(UrlSRSHome) "$SiteIGBMC/$WGetz?-e+\[\{$SwTr\}-acc:XXXX\]|\[swissprot-id:XXXX\]+-vn+2" set Defauts(UrlSRSHome) "http://www.ncbi.nlm.nih.gov/sites/entrez?Db=protein&Cmd=DetailsSearch&Term=XXXX" set Defauts(UrlRefSeqH) "$SiteIGBMC/$WGetz?-e+\[\{REFSEQ\}-acc:XXXX\]|\[REFSEQ-id:XXXX\]+-vn+2" set Defauts(UrlSRSWorld) "$SiteIGBMC/$WGetz?-e+\[\{$SwTr\}-acc:XXXX\]|\[swissprot-id:XXXX\]+-vn+2" set Defauts(UrlPdbWorld) "$SiteRSCB/pdb/cgi/export.cgi/XXXX.pdb?format=PDB&pdbId=XXXX&compression=None" set Defauts(UrlUniprot) "http://www.uniprot.org/uniprot/XXXX" set site "UNK" if {$url == ""} { if {[EstUnAccessPDB $molid]} { set site "Pdb" set url $Defauts(UrlPdbHome) } else { set site "SRS" if {[regexp "^NM" $molid]} { set url $Defauts(UrlRefSeqH) } else { set url $Defauts(UrlUniprot) } } } if {[regexp "\:" $molid]} { set molid [StringApres ":" dans $molid] } regsub -all "XXXX" $url $molid url if {$GetUrl=="GetUrl"} { return $url } set LesLignes {} set TexteHTML [HttpGetTextFromUrl $url] if {$TexteHTML!=""} { set LesLignes [split $TexteHTML "\n"] } else { HttpCopy $url LesLignes } if {$site == "UNK"} {return $LesLignes} if {$site == "SRS"} { set TexteHTML [join $LesLignes "\n"] set Texte [ValeurDeLaBalise "pre" TexteHTML] set LesLignes [split $Texte "\n"] } set head "[string range [lindex $LesLignes 0] 0 1]" if { $head != "HE" && $head != "ID"} { set LesLignes {} regsub -all "XXXX" [set Defauts(Url${site}World)] $molid url HttpCopy $url LesLignes if {$site=="SRS"} { set TexteHTML [join $LesLignes "\n"] set Texte [ValeurDeLaBalise "pre" TexteHTML] set LesLignes [split $Texte "\n"] } set head "[string range [lindex $LesLignes 0] 0 1]" if { $head != "HE" && $head != "ID"} { set LesLignes "ERREUR" if {$site == "Pdb"} { if {[file exists "${molid}.pdb"]} { set LesLignes [LesLignesDuFichier "${molid}.pdb"] set head "[string range [lindex $LesLignes 0] 0 1]" if { $head != "HE"} {set LesLignes "ERREUR"} } } } } set LesBonnesLignes {} foreach Ligne $LesLignes { if {[regexp -nocase "} $Ligne $V Ligne } lappend LesBonnesLignes $Ligne } return $LesBonnesLignes } proc WhatIsMyUcscAccess {Path Database Organisme {BirdVersion star4}} { set FichierDesCoordonnees [open "$Path.fav" "r"] set FichierDesRequetes [open "$Path.sqp" "w"] set FichierDesProteines [open "$Path.pro" "w"] Espionne "WhatIsMyUcscAccess : Constitution des requetes" while { [gets $FichierDesCoordonnees LigneCoordonnees] >=0 } { ScanLaListe $LigneCoordonnees ID Reste puts $FichierDesRequetes "ID * DB UCSC" if { $Database == "knowngene"} { puts $FichierDesRequetes "WH SQLNATIVE select geneSymbol, protAcc from ucsc$Organisme.kgxref Where kgID='$ID'" } if { $Database == "refgene"} { puts $FichierDesRequetes "WH SQLNATIVE select geneSymbol, protAcc from ucsc$Organisme.kgxref Where refseq='$ID'" } puts $FichierDesRequetes "FM FLAT" puts $FichierDesRequetes "//" puts $FichierDesRequetes "ID * DB UCSC" if { $Database == "knowngene"} { puts $FichierDesRequetes "WH SQLNATIVE select description from ucsc$Organisme.kgxref Where kgID='$ID'" } if { $Database == "refgene"} { puts $FichierDesRequetes "WH SQLNATIVE select description from ucsc$Organisme.kgxref Where refseq='$ID'" } puts $FichierDesRequetes "FM FLAT" puts $FichierDesRequetes "//" } close $FichierDesRequetes close $FichierDesCoordonnees Espionne "WhatIsMyUcscAccess : Execution des requetes" set Tudu [BirdFetch "$Path.sqp" $BirdVersion "$Path.resultp"] set FichierDesRequetesExecutees [open "$Path.resultp" "r"] set FichierDesCoordonnees [open "$Path.fav" "r"] Espionne "WhatIsMyUcscAccess : Traitement des resultats proteiques" while { [gets $FichierDesRequetesExecutees LigneResultat] >=0 } { ScanLaListe $LigneResultat Entete1 gets $FichierDesRequetesExecutees LigneResultat ScanLaListe $LigneResultat GeneSymbol ProtAcc gets $FichierDesRequetesExecutees LigneResultat ScanLaListe Entete2 gets $FichierDesRequetesExecutees LigneResultat ScanLaListe $LigneResultat Description regsub -all -nocase {\s} $LigneResultat "_" Description puts $FichierDesProteines "$LigneCoordonnees $GeneSymbol $ProtAcc $Description" gets $FichierDesCoordonnees LigneCoordonnees } close $FichierDesProteines close $FichierDesCoordonnees close $FichierDesRequetesExecutees } proc Which {Exe {AsRealpath ""}} { set AsRealpath [string equal -nocase "AsRealpath" $AsRealpath ] if {[catch {set Path [exec which $Exe]} ] } { return "" } Espionne $Path if {$AsRealpath} { return [Realpath $Path] } return $Path } proc WhichBanqueTBlastN {{BanqueTBlastN ""}} { if {$BanqueTBlastN!=""} { return $BanqueTBlastN } set LesBanquesTBlastNPossibles [glob -nocomplain "[RepertoireDuGenome]/tblastn*"] if {[llength $LesBanquesTBlastNPossibles]==0} { set BanqueTBlastN "" } else { set RepTBlastN [lindex $LesBanquesTBlastNPossibles 0] if {[llength $LesBanquesTBlastNPossibles]>1} { FaireLire "Please tell me which tblastn you want to use" set RepTBlastN [ChoixParmi $LesBanquesTBlastNPossibles] } set BanqueTBlastN [StringApres "/tblastn" dans $RepTBlastN] } return $BanqueTBlastN } proc WhyBiggerString {} { set file10items "/tempor/string/10/items_schema.v10.sql" set f [open $file10items r] set i 0 while {[gets $f Ligne] >= 0} { incr i if {[regexp {^COPY} $Ligne]} { lappend Lesi $i Espionne "$i $Ligne" continue } } Espionne "$Lesi" foreach i $Lesi { lappend Lesj $i lappend Lesj [expr $i -1] lappend Lesj [expr $i -2] lappend Lesj [expr $i -3] lappend Lesj [expr $i -4] lappend Lesj [expr $i -5] lappend Lesj [expr $i -6] lappend Lesj [expr $i -7] lappend Lesj [expr $i -8] lappend Lesj [expr $i -9] lappend Lesj [expr $i -10] } Espionne "$Lesj" set k 0 set g [open $file10items r] while {[gets $g Ligne] >= 0} { incr k foreach j $Lesj { if {$k==$j} { Espionne "$j $Ligne" } } } close $f close $g } proc WidthMode {AId val} { global Abr if {$val > 0} {set quoi wplus} {set quoi wmoins} ChangeCurseur $AId $quoi set PAD [set Abr($AId,PAD)] bind $PAD [list AppliqueWidth $AId $val] bind $PAD {} return } proc WikiTable {{TexteOuFichier ""} {What ""} {Separateur ""}} { if {$Separateur == ""} { set Separateur "\[\t|;\]" } if {$What == ""} { set What "Show" } if {[regexp "\n" $TexteOuFichier]} { set Texte $TexteOuFichier } else { if {[file exists $TexteOuFichier]} { set Texte [ContenuDuFichier $TexteOuFichier] } else { set Texte [EntreTexte $TexteOuFichier] } } set LesLignes [split $Texte "\n"] set LeNew [list "{|"] set Style "!" foreach Ligne $LesLignes { regsub -all $Separateur $Ligne "\n$Style" New lappend LeNew "$Style$New" lappend LeNew "|-" set Style "|" } lappend LeNew "|}" if {$What=="Show"} { return [AfficheVariable [join $LeNew "\n"] "AvecRetour" "WikiTable"] } if {$What=="GetList"} { return $LeNew } if {$What=="GetText"} { return [join $LeNew "\n"] } } proc WindowEditItem {type} { global EFeat set w .wedtf toplevel $w wm title $w "Feature Item Editor" wm iconname $w "Feature Editor" wm protocol $w WM_DELETE_WINDOW KillParLaCroix label $w.titre -text "Item Edition" -justify left -anchor w frame $w.f set ft $EFeat(Feat) if {$type eq "edit"} { label $w.f.lnm -text "Feature Name : " -justify right -anchor w label $w.f.lft -text " $ft " -justify left -anchor w } else { label $w.f.lm -text "Feature Name : " -justify right -anchor w entry $w.f.em -bg white -fg black -textvariable EFeat(Name) set wdt [PlusLongEltDe $EFeat(FTypes)] set EFeat(CbName) $w.f.cm ttk::combobox $w.f.cm -state readonly -width $wdt -background white -values $EFeat(FTypes) -textvariable EFeat(CName) $w.f.cm current 0 bind $w.f.cm <> [list SetFeatValue %W Name] } # Zone label $w.f.lz -text "Residue Range : " -justify right -anchor w if {[llength $EFeat(Lx1x2)] > 2} { label $w.f.lx -text "multiple zones" -justify left -anchor w } else { lassign [lindex $EFeat(Lx1x2) 1] EFeat(ZoneX1) EFeat(ZoneX2) entry $w.f.ex1 -width 6 -bg white -fg black -justify right -textvariable EFeat(ZoneX1) entry $w.f.ex2 -width 6 -bg white -fg black -justify right -textvariable EFeat(ZoneX2) #set wdt [PlusLongEltDe $EFeat(Lx1x2)] #ttk::combobox $w.f.cz -state readonly -width $wdt -background white -values $EFeat(Lx1x2) -textvariable EFeat(CRange) #$w.f.cz current 0 #bind $w.f.cz <> [list SetFeatValue %W Range] } # Color label $w.f.lc -text "Item Color : " -justify right -anchor w entry $w.f.ec -bg white -fg black -textvariable EFeat(Color) set wdt [PlusLongEltDe $EFeat(Lcolor)] set EFeat(CbColor) $w.f.cc ttk::combobox $w.f.cc -state readonly -width $wdt -background white -values $EFeat(Lcolor) -textvariable EFeat(CColor) $w.f.cc current 0 bind $w.f.cc <> [list SetFeatValue %W Color] # Score label $w.f.ls -text "Score : " -justify right -anchor w entry $w.f.es -bg white -fg black -justify right -textvariable EFeat(Score) set wdt [PlusLongEltDe $EFeat(Lscore)] set EFeat(CbScore) $w.f.cs ttk::combobox $w.f.cs -state readonly -width $wdt -background white -values $EFeat(Lscore) -textvariable EFeat(CScore) $w.f.cs current 0 bind $w.f.cs <> [list SetFeatValue %W Score] # Note label $w.f.ln -text "Note : " -justify right -anchor w entry $w.f.en -bg white -fg black -textvariable EFeat(Note) set wdt [PlusLongEltDe $EFeat(Lnote)] set EFeat(CbNote) $w.f.cn ttk::combobox $w.f.cn -state readonly -width $wdt -background white -values $EFeat(Lnote) -textvariable EFeat(CNote) $w.f.cn current 0 bind $w.f.cn <> [list SetFeatValue %W Note] if {$type eq "edit"} { grid $w.f.lnm -row 0 -column 0 -sticky e grid $w.f.lft -row 0 -column 1 -columnspan 2 -sticky w } else { grid $w.f.lm -row 0 -column 0 -sticky e grid $w.f.em -row 0 -column 1 -sticky w grid $w.f.cm -row 0 -column 2 -sticky ew } grid $w.f.lz -row 1 -column 0 -sticky e if {[llength $EFeat(Lx1x2)] > 2} { grid $w.f.lx -row 1 -column 1 -columnspan 2 -sticky w } else { grid $w.f.ex1 -row 1 -column 1 -sticky w grid $w.f.ex2 -row 1 -column 2 -sticky w } # color grid $w.f.lc -row 2 -column 0 -sticky e grid $w.f.ec -row 2 -column 1 -sticky e grid $w.f.cc -row 2 -column 2 -sticky ew # score grid $w.f.ls -row 3 -column 0 -sticky e grid $w.f.es -row 3 -column 1 -sticky e grid $w.f.cs -row 3 -column 2 -sticky ew # note grid $w.f.ln -row 4 -column 0 -sticky e grid $w.f.en -row 4 -column 1 -sticky e grid $w.f.cn -row 4 -column 2 -sticky ew grid columnconfig $w.f 2 -weight 1 frame $w.fb button $w.fb.ok -text " OK " -bg green1 -command [list AcceptNewValues $w $type ok] button $w.fb.dis -text "Dismiss" -bg red -command [list AcceptNewValues $w $type dismiss] grid $w.fb.dis -row 0 -column 0 -sticky w grid $w.fb.ok -row 0 -column 1 -sticky e grid columnconfig $w.fb all -weight 1 grid $w.titre -row 0 -column 0 -sticky ew -padx 10 -pady {10 15} grid $w.f -row 1 -column 0 -sticky news -padx 10 grid $w.fb -row 2 -column 0 -sticky news -padx 10 -pady {25 10} grid columnconfig $w all -weight 1 grab $w FenetreAuCentre $w tkwait window $w return } proc WindowSelectItemBy {} { set w .itemby toplevel $w wm title $w "Select Items by ..." wm iconname $w "Select" wm protocol $w WM_DELETE_WINDOW KillParLaCroix label $w.titre -text "Select Items by ..." -justify left -anchor w frame $w.f checkbutton $w.f.lr -text "Range : " -variable EFeat(UseRange) -onvalue 1 -offvalue 0 -justify right -anchor w entry $w.f.ex1 -width 6 -bg white -fg black -justify right -textvariable EFeat(ZoneX1) entry $w.f.ex2 -width 6 -bg white -fg black -justify right -textvariable EFeat(ZoneX2) label $w.f.lo -justify right -anchor w -text "or" checkbutton $w.f.ca -text "all alignment" -onvalue 1 -offvalue 0 -textvariable EFeat(AllAli) checkbutton $w.f.lco -text "Color : " -variable EFeat(UseColor) -onvalue 1 -offvalue 0 entry $w.f.eco -bg white -fg black -justify right -textvariable EFeat(Color) -justify right -anchor w frame $w.fb button $w.fb.ok -text " OK " -bg green1 -command [list AcceptNewValues $w $type ok] button $w.fb.dis -text "Dismiss" -bg red -command [list AcceptNewValues $w $type dismiss] grid $w.fb.dis -row 0 -column 0 -sticky w grid $w.fb.ok -row 0 -column 1 -sticky e grid columnconfig $w.fb all -weight 1 return } proc WithAnyWithSwForDao {RepertoireOut} { #RepertoireOut /home/poidevin/ordi/MS2PHProt/String_9606_201008161150 set WithAnyFile "$RepertoireOut/WithAny.string" set SummaryFile "$RepertoireOut/Summary.txt" foreach Ligne [LesLignesDuFichier $WithAnyFile] { if {[regexp "^PIDInitial" $Ligne]} {continue} set LesMots [split $Ligne "\t"] set IdSource [lindex $LesMots 0] set IdDest [lindex $LesMots 2] set SwSource [SwFromProtIDString9 $IdSource 9606] set SwSource [join $SwSource "_"] #set SwSource [FromSummary $IdSource IdInitial $SummaryFile] set SwDest [SwFromProtIDString9 $IdDest 9606] set SwDest [join $SwDest "_"] # Espionne "$IdSource $SwSource" # Espionne "$IdDest $SwDest" set LesMots [lreplace $LesMots 1 1 $SwSource] set LesMots [lreplace $LesMots 3 3 $SwDest] set LigneModif [join $LesMots "\t"] lappend LesLignesModif $LigneModif } SauveLesLignes $LesLignesModif dans "$RepertoireOut/WithAnyWithSw.string" } proc WithBrocOli {} { return [OuiOuNonMemo "Do we use BrocOli (Brocken Oligos) ?\nSo you have to do 2 PCRs." ] } proc WithOverlapAffymetrix {Nom} { return [llength [LesAffymetrixEnOverlap $Nom]] } proc WithPDB {Nom} { global RepertoireDuGenome global WithPDB if {[info exists WithPDB($Nom)]} { return [set WithPDB($Nom)] } if {[info exists WithPDB]} { return 0 } set FichierWithPDB "[RepertoireDuGenome]/fiches/withpdb" if {[file exists $FichierWithPDB]} { foreach Ligne [LesLignesDuFichier $FichierWithPDB] { scan $Ligne "%s %d" NomLu nPDB set WithPDB($NomLu) $nPDB } set WithPDB("EstCharge") 1 return [WithPDB $Nom] } if { ! [OuiOuNon "Do I count the PDBs in each blast ?"]} { set WithPDB("EstCharge") 1 return 0 } set Sortie {} foreach NomLu [ListeDesPABs] { set FichierBlast "$RepertoireDuGenome/blastp/$NomLu" if { ! [file exists $FichierBlast]} { continue } set nPDB 0 DecortiqueBlast $FichierBlast "" "" Quer lBanqueId lAccess lDE lProfil lPN foreach BanqueId $lBanqueId] { if {[EstUnAccessPDB $BanqueId]} { incr nPDB } } lappend Sortie "$NomLu $nPDB" set WithPDB($NomLu) $nPDB } SauveLesLignes $Sortie dans $FichierWithPDB return [WithPDB $Nom] } proc WithPackage {Pack {Valeur ""}} { global WithPackage if {$Valeur!=""} { set WithPackage($Pack) $Valeur } if {[info exists WithPackage($Pack)]} { return [set WithPackage($Pack)] } set WithPackage(Default,CafeDesSciences) [InsideCSTB] set WithPackage(Default,GscopeContrib) 1 set WithPackage(Default,GscopeSpecifique) 1 set WithPackage(Default,Genoret) 0 set WithPackage(Default,Ordali) 1 set WithPackage(Default,Correlator) 1 set WithPackage(Default,Math3D) 1 if { ! [info exists WithPackage(Default,$Pack)]} { set WithPackage(Default,$Pack) 0 } set WithPackage($Pack) [set WithPackage(Default,$Pack)] return [set WithPackage($Pack)] } proc WithWebService {{Qui ""} {Valeur ""}} { global WithWebService if {[string equal -nocase $Valeur "TestIfExists"]} { return [info exists WithWebService($Qui)] } if {$Qui==""} { set Qui "Gx" } if {$Valeur!=""} { set WithWebService($Qui) $Valeur} if {[info exists WithWebService($Qui)]} { return $WithWebService($Qui) } set WithWebService($Qui) 1 return [WithWebService $Qui] } proc WithinFed {} { return 0 } proc WithinGenoret {} { return 0 } proc WiwOxFrom {Qui} { global WiwOxFrom set Science [ScienceOiDeMonDomaine] #if { ! [OnTraite $Science]} { return [QuestionDeScience $Science "ret WiwOxFrom $Qui"] } if {[info exists WiwOxFrom($Qui)]} { return $WiwOxFrom($Qui) } if {[info exists WiwOxFrom("EstCharge")]} { set CodeOrga [lindex [split $Qui "|"] end] return [WIW CodeOrga_$CodeOrga OX] } set Science [ScienceOiDeMonDomaine] #set Fichier "[RepertoireDuGenome]/fiches/wiwoxfrom.txt" set Fichier "/genomics/link/$Science/fiches/wiwoxfrom.txt" if {[file exists $Fichier]} { array set WiwOxFrom [ContenuDuFichier $Fichier] } else { set WiwOxFrom("EstCharge") 1 foreach CodeOrga [WIW ListOf CodeOrgaWithMultipleOX] { Espionne $CodeOrga foreach OX [WIW CodeOrga_$CodeOrga OX] { Espionne $OX foreach Id [WIW $OX ListOfID] { if {$Id=="A0A0E9NSC1_9ASCO"} { Espionne $OX } set WiwOxFrom($Id) $OX } } } Sauve [array get WiwOxFrom] dans $Fichier } return [WiwOxFrom $Qui] } proc WobbleDeLacide {nom_acide} { global Wobble classes_default set acide "Acide_${nom_acide}" global Acide_${nom_acide} set nom_acide [string index $acide end] global Wobble_[set nom_acide] if {! [info exists Wobble($nom_acide)]} { puts "pas de wobble !" return } set wobble $Wobble($nom_acide) foreach ligne $wobble { foreach vclasse $classes_default { set $vclasse 0 } # Pour chaque anticodon, on regroupe les # valeurs des codons correspondants foreach arnc [lrange $ligne 1 end] { set arnc [string map {U T} $arnc] foreach vclasse $classes_default { set $vclasse [expr {[set $vclasse] + [set [set acide]($arnc,$vclasse)]}] } } set anti [lindex $ligne 0] foreach vclasse $classes_default { set Wobble_${nom_acide}($anti,$vclasse) [set $vclasse] } # Le tableau est de forme Wobble_aa(anticodon,classe) et contien le nombre de l'anticodon donnd dans cette classe } #parray Wobble_${nom_acide} return } proc WobbleDeLacidePourProt {nom_acide} { global Wobble classes_default set acide "Aprot_${nom_acide}" global Aprot_${nom_acide} set nom_acide [string index $acide end] global Wprot_[set nom_acide] if {! [info exists Wobble($nom_acide)] || [llength $Wobble($nom_acide)] < 2} { #puts "pas de wobble !" return } set wobble $Wobble($nom_acide) foreach ligne $wobble { foreach vclasse $classes_default { set $vclasse 0 } # Pour chaque anticodon, on regroupe les # valeurs des codons correspondants set Lcd [split $ligne " "] foreach arnc [lrange $Lcd 1 end] { set arnc [string map {U T} $arnc] foreach vclasse $classes_default { set $vclasse [expr {[set $vclasse] + [set [set acide]($arnc,$vclasse)]}] } } set anti [lindex $Lcd 0] foreach vclasse $classes_default { set Wprot_${nom_acide}($anti,$vclasse) [set $vclasse] } # Le tableau est de forme : # Wobble_aa(anticodon,classe) et contient # le nombre de l'anticodon donnd dans cette classe } #parray Wobble_${nom_acide} return } proc WrapLeTexte {Texte {Largeur 50}} { if {[string length $Texte]<=$Largeur} { return [list $Texte] } set Entamme [string range $Texte 0 [expr $Largeur-1]] set DernierBlanc [string last " " $Entamme] if {$DernierBlanc<0} { set DernierBlanc $Largeur } set Entamme [string range $Texte 0 [expr $DernierBlanc - 1]] set Reste [string trim [string range $Texte $DernierBlanc end]] return [concat [list $Entamme] [WrapLeTexte $Reste $Largeur]] } proc WriteFogPrm {} { puts "\n-- FOG ----------" puts "| fog enabled $::fogon" puts "| system $::fogsys" puts "| coords $::fogcoords" puts "" return } proc WriteSelectedTaxId {} { set file [DemandeEtSauveFichier *] if {$file eq ""} {return} set f [open $file w] foreach i $::LTaxSelected { set Lv [$::db eval {select Name,Rank,Lineage from taxonomy where taxid=$i}] puts $f "$i\t[join $Lv \t]" } close $f return } proc WriteTaxName {tid nom x1 y1} { global Tx LModelId LUserId LShowId LTaxSelected HExstModel HExstUser HExstSel set PAD [set Tx(PAD)] set xi [SurGrille $x1] set yi [SurGrille $y1] set Etat $Tx(Etat,$tid) # open/close node if {$Etat != -1} { set Id [DrawOpenCloseArrow $PAD $xi $yi $Etat] $PAD itemconfig $Id -tags [list "A${tid}" Arrow] lassign [$PAD bbox $Id] xmt ymt xxt yxt incr xi [expr {$xxt-$xmt}] if {$Tx(NbInt,$tid) > 0} { # number of intermediate nodes set Id [$PAD create text [list $xi $yi] -fill white -font TaxFont -text "$Tx(NbInt,$tid)" -anchor w -justify center -tags [list "NI$tid" IntFlag]] lassign [$PAD bbox $Id] xmt ymt xxt yxt incr xmt -1 ; incr xxt 1 incr ymt 1 ; incr yxt -1 if {$Tx(ShowInt,$tid)} { set fillInt "magenta" } else { set fillInt "blue" } set Id [$PAD create rectangle [list $xmt $ymt $xxt $yxt] -outline black -fill $fillInt -tags [list "RI$tid" RectInt IntFlag]] incr xi [expr {2 * ($xxt-$xmt-1)}] } } else { set xt [expr {$xi+10}] $PAD create line [list $xi $yi $xt $yi] -fill $Tx(fgCan) -width 1 -tags {Line} incr xi 20 } if {[info exists HExstModel($tid)]} { set cfill cyan set ctext black } elseif {$Tx(isInt,$tid)} { set cfill pink set ctext black } elseif {[info exists HExstUser($tid)]} { set cfill yellow set ctext black } else { set cfill $Tx(bgCan) set ctext $Tx(fgCan) } set Id [$PAD create text [list $xi $yi] -fill $ctext -font TaxFont -text $nom -anchor w -justify left -tags {"N$tid" NodeName LNode}] $PAD addtag "N$tid" withtag $Id # rectangle under name set RId [$PAD create rectangle [$PAD bbox $Id] -fill $cfill -outline $Tx(bgCan) -width 2 -tags {"R$tid" Rleaf LNode}] $PAD addtag "R$tid" withtag $RId $PAD raise $Id # create sensor $PAD create rectangle [$PAD bbox $Id] -fill "" -outline "" -tags sensor # if n is a leaf if {$Etat == -1} { $PAD addtag Leaf withtag $Id $PAD addtag Leaf withtag $RId if {[info exists HExstSel($tid)]} { $PAD itemconfig $RId -outline $Tx(fgCan) } } return } proc WriteTaxNameHTML {tid doBaton} { global TaxRoot Tx HExstSel HExstModel HExstUser LSelectableId set Etat $Tx(Etat,$tid) set nom $Tx(Name,$tid) set spanInt "" set LClasses [list] set LClassesNom [list] if {$tid == $TaxRoot} { lappend LClasses noleftmargin } if {$Etat != -1} { if {! $Tx(isInt,$tid)} { lappend LClasses toggable set type "noeud" } else { set type "internal" } # open/close state if {$Etat} { # div content affichee set disTit "none" set disCon "block" } else { set disTit "block" set disCon "none" } # number of internal nodes if {$Tx(NbInt,$tid) > 0} { if {$Tx(ShowInt,$tid)} { set fillInt "magenta" } else { set fillInt "blue" } set spanInt "$Tx(NbInt,$tid)" } # vertical line linking brothers if {$doBaton} { set cplus "solid" } else { set cplus "none" } } else { set type "feuille" } if {[info exists Tx(Rank,$tid)]} { set Rank [set Tx(Rank,$tid)] } else { set Rank "" } if {[info exists HExstModel($tid)]} { lappend LClassesNom cmodel } elseif {[info exists HExstUser($tid)]} { lappend LClassesNom cuser csel } if {[info exists HExstSel($tid)]} { lappend LClassesNom csel } if {$Tx(isInt,$tid) && $Etat != -1} { set type "internal" set par $Tx(Parent,$tid) while {$Tx(isInt,$par)} { set par $Tx(Parent,$par) } lappend LClasses "batardde$par" cacheDiv } # tid may not be a leaf, but a complete genome if {$Tx(isComp,$tid)} { lappend LClassesNom cfeuille } set imgArrowOpen "" set imgArrowClose "" switch $type { "noeud" { return "
    $imgArrowClose $spanInt $nom
    $imgArrowOpen $spanInt $nom " } "feuille" { return "
    $nom " } "internal" { return "
    $nom " } } } proc WscopeApplet {} { if {[SciencePublic [Science]]} { set RepApplet "~ripp/gagapplet" } else { set RepApplet "gag/applet" } set WscopeApplet "[WscopeSite]/$RepApplet" return $WscopeApplet } proc WscopeCgibin {} { #rR il vaut mieux utiliser WscopeServer !!! mais c'est pas encore tres clair pour moi if {[ScienceIsPublic]} { set RepCgi "~ripp/cgi-bin" } else { set RepCgi "gag/cgi-bin" } set WscopeCgibin "[WscopeSite]/$RepCgi" return $WscopeCgibin } proc WscopeICDS {} { return "http://www.lbgi.fr/~ripp/cgi-bin/gscope_html_server.tcsh?ICDS" } proc WscopeLinks {{Context ""} {Qui ""}} { if {$Context==""} { set Context "GuideMoi" } set Fichier "[RepertoireDuGenome]/fiches/WscopeLinks$Context.txt" if {[FileAbsent $Fichier]} { return {} } set LesRT {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp {^\#} $Ligne]} { continue } regsub -all {\[Alias \$Qui\]} $Ligne [Alias $Qui] Ligne regsub -all {\$\{Qui\}} $Ligne $Qui Ligne regsub -all {\$Qui} $Ligne $Qui Ligne regsub {\[Science\]} $Ligne [Science] Ligne regsub {\[PreFixe\]} $Ligne [PreFixe] Ligne regsub {\[LbgiUrl\]} $Ligne [LbgiUrl] Ligne regsub {\[GenoretGenesUrl\]} $Ligne [GenoretGenesUrl] Ligne regsub {\[WscopeServer\]} $Ligne [WscopeServer] Ligne regsub {\[WscopeScience\]} $Ligne [WscopeScience] Ligne regsub -all {\t+} $Ligne "\t" Ligne set RT [split $Ligne "\t"] set Ref [lindex $RT 0] set Text [join [lrange $RT 1 end] "\t"] ;#rR 2014/12/21 on garde les tab dans le texte. regsub -all {\&} $Ref "\&" Ref lappend LesRT $Ref $Text } return $LesRT } proc WscopeScience {{NewValue ""}} { global WscopeScience if {$NewValue!=""} { set WscopeScience $NewValue } if {[info exists WscopeScience]} { return $WscopeScience } set WscopeScience "[WscopeServer]?[Science]" return $WscopeScience } proc WscopeServer {{NewValue ""}} { # set WscopeServer "[WscopeCgibin]/GscopeServer" # return $WscopeServer #rR AAAAAA Attention pas encore fini #rR cette procédure doit rendre WscopeServer.tcl soit par le chemin WscopeServer soit par wscoperr #rR Mais ... WscopeServer.tcl ne marche pas encore bien. #rR en fait il faut corriger WscopeServer.tcl pour qu'il soit comme gscope_html_server.tcsh global WscopeServer #rR j'ai collé ça la dedans !!!!!! Je suppose que c'est pour rendre le meme que l'appelant. if {[RequestUriFromWscope]!=""} { regsub "/.*" [RequestUriFromWscope] "" Server return $Server } #rR on peut aussi le positionner dans gscope lui même if {$NewValue!=""} { set WscopeServer $NewValue } if {[info exists WscopeServer]} { return $WscopeServer } #rR là est le défaut : if {[ScienceIsPublic]} { set WscopeServer "wscoperr" } else { set WscopeServer "WscopeServer" } return $WscopeServer } proc WscopeSite {} { #rR .................................................... essai du 2014/05/15 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! set WscopeSite "" # set WscopeSite "http://www.lbgi.fr" } proc WscopeWebForm {args} { global PagePropre set Fenetre "" set LaSelection {} set Bouton "" set TexteB "" set VarToSet "" foreach {k v} $args { if {$k=="fenetre"} { set Fenetre $v continue } if {$k=="selectedlines"} { regsub -all {\[} $v "\\\[" v regsub -all {\]} $v "\\\]" v regsub -all {\"} $v "\\\"" v regsub -all {\$} $v "\\\$" v lappend LaSelection $v continue } set Bouton $k set TexteB $v if {$k=="vartoset"} { set VarToSet $v } } regsub "_" $Fenetre "." PFenetre set Selection [join $LaSelection "\n"] set LesInfosDuBouton [TouchePourWscope "LesInfosDuBouton" $Bouton] if {$LesInfosDuBouton=={}} { return [GuideMoi "Sorry, it seems the Gscope process was canceled on the server. I just restarted it, running a new session."] } lassign $LesInfosDuBouton Clavier Texte Commande Maniere Couleur regsub {\[selection get\]} $Commande "\"$Selection\"" Commande # LogWscope [string range $Commande 0 100] if {[regexp {set VariableDeRetour\(([^\)]+)\) (.*)} $Commande Match Var Val]} { set Val [string trim $Val "\""] global VariableDeRetour ; set VariableDeRetour($Var) $Val ;#rR servira peut etre un jour if {$VarToSet!=""} { global $VarToSet ; set $VarToSet $Val } return "Please kill this window and go back to the calling window to continue your Job" return "'" } LogWscope [string range $Commande 0 1000] if {[catch {set R [eval $Commande]} Message]} { LogWscope $Message; return $Message } if {$R==""} { set R "Nothing to display" } return $R } proc Wup {Texte} { } proc Wup_CACHEparRR {Texte} { } 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 XML4Macsim {f} { set Ll [LesLignesDuFichier $f] set o [open $f w] foreach l $Ll { if {! [regexp {goxref|goid|goclass|molecularweight|isoelectric} $l]} { puts $o $l } } close $o return } proc XYZCenterAtom {} { global pgl TypeRep AtomePique Rad if {$AtomePique eq ""} {return 0} lassign [Tag2MolObjAtm $AtomePique] mol obj atm lassign [$mol AtomXYZ $atm] x y z set pgl(xCen) $x set pgl(yCen) $y set pgl(zCen) $z set pgl(xTra) 0.0 set pgl(yTra) 0.0 set pgl(zTra) 0.0 set pgl(frontclip) [expr {$Rad+$pgl(zCen)}] set pgl(backclip) [expr {$pgl(zCen)-$Rad}] set pgl(eyeZ) $pgl(frontclip) update return 1 } proc XenoGreffe {{FichierAccessProbeset ""}} { if {$FichierAccessProbeset==""} { set FichierAccessProbeset [ButineArborescence "all" "[RepertoireDuGenome]/"] } set NewRep [file tail $FichierAccessProbeset] regsub {\.txt} $NewRep "" NewRep if {[FileAbsent "[RepertoireDuGenome]/$NewRep"]} { file mkdir "[RepertoireDuGenome]/$NewRep" } if {[FileAbsent "[RepertoireDuGenome]/$NewRep/FASTA_NM"]} { file mkdir "[RepertoireDuGenome]/$NewRep/FASTA_NM" } if {[FileAbsent "[RepertoireDuGenome]/$NewRep/FASTA"]} { file mkdir "[RepertoireDuGenome]/$NewRep/FASTA" } if {[FileAbsent "[RepertoireDuGenome]/$NewRep/EMBL"]} { file mkdir "[RepertoireDuGenome]/$NewRep/EMBL" } set LesIntrouvables {} set LesBons {} foreach Ligne [LesLignesDuFichier $FichierAccessProbeset] { scan $Ligne "%s %s" NM PS set NmPs "${NM}_$PS" set Trouve 0 foreach Rep [list "FASTA_NM" "FASTA" "EMBL"] { set Fic "[RepertoireDuGenome]/$NewRep/$Rep/$NmPs" if {[FileExists $Fic]} { lappend LesBons $Fic Espionne $Fic set Trouve 1 continue } } if {$Trouve} { continue } set LesLignesEMBL [LaSequenceDesBanques $NM] EspionneL $LesLignesEMBL if {$LesLignesEMBL!={}} { SauveLesLignes $LesLignesEMBL dans "[RepertoireDuGenome]/$NewRep/FASTA_NM/${NM}_$PS" Espionne "$NM $PS recupere pour FASTA_NM" continue } Espionne "$NM $PS est introuvable" lappend LesIntrouvables "$NM $PS est introuvable" } SauveLesLignes $LesIntrouvables dans "[RepertoireDuGenome]/$NewRep/LesIntrouvables.txt" foreach Fic $LesBons { Espionne $Fic set Queue [file tail $Fic] set Rep [file tail [file dirname $Fic]] set TFA "" if {$Rep=="FASTA" || $Rep=="FASTA_NM"} { set Seq [QueLaSequenceDuFichierTFA $Fic] set TFA [SequenceFormatTFA $Seq "$Queue" "nucbrut"] } if {$Rep=="EMBL"} { set TFA [SequenceFormatTFA [ContenuDuFichier $Fic] "$Queue" "embl"] } Espionne [Sauve $TFA dans "[RepertoireDuGenome]/$NewRep/nuctfaOri/$Queue"] } } proc XenoGreffe22 {} { foreach Ligne [LesLignesDuFichier 22.txt] { scan $Ligne "%s %s" NM PS set LesLignesEMBL [LaSequenceDesBanques $NM "" a "OnVeutEMBL"] Espionne "$NM $PS" if {$LesLignesEMBL!=""} { SauveLesLignes $LesLignesEMBL dans "[RepertoireDuGenome]/XenoGreffeEMBL/${NM}_$PS" } else { set TFA [EntreTexte $NM] Sauve $TFA dans "[RepertoireDuGenome]/XenoGreffeFASTA/${NM}_$PS" } } } proc XieVsMatrix {} { set FichierDesCoordonneesIn [open "[Fiches]/Bidir/FichierDeCoordonnees-200603-AvecSequences-Et-ActaStart-EtDoublons.txt" "r"] set FichierDesCoordonneesOut [open "[Fiches]/Bidir/FichierDeCoordonnees-200603-AvecSequences-Et-ActaStart-EtDoublons-EtScores.txt" "w"] Espionne "XieVsMatrix : Start" set NbLectures 0 set NbSbs 0 while { [gets $FichierDesCoordonneesIn LigneCoordonnees] >=0 } { incr NbLectures ScanLaListe $LigneCoordonnees ID Type ChromosomeHg17 StartHg17 EndHg17 AccessHg17 BrinHg17 ChromosomeHg18 StartHg18 EndHg18 BrinHg18 ActaRallonge SbsPotentiel ActaRealStart DoublonOuOriginal Espionne $SbsPotentiel set Score "" set AverageScore "" set I 0 set ListeDesCaracteresDuSbs [split $SbsPotentiel ""] foreach Caractere $ListeDesCaracteresDuSbs { incr I set PosiScore [StafPosiScore $I $Caractere] set Score [expr $Score + $PosiScore] } if { $Score > 0 } { set AverageScore [expr $Score / 18] } else { set AverageScore 0 set Score 0 } set LigneOut "$LigneCoordonnees $ID $Type $ChromosomeHg17 $StartHg17 $EndHg17 $AccessHg17 $BrinHg17 $ChromosomeHg18 $StartHg18 $EndHg18 $BrinHg18 $ActaRallonge $SbsPotentiel $ActaRealStart $DoublonOuOriginal $AverageScore" puts $FichierDesCoordonneesOut $LigneOut if { $Score > 12} { incr NbSbs } } close $FichierDesCoordonneesIn close $FichierDesCoordonneesOut Espionne "XieVsMatrix : Done ($NbSbs SBS valides sur $NbLectures)" } proc XignalMiner {FichierFasta indiceFichier LongueurDesMots {ASortir ""} {monofasta yes} {combinations no} {MaxSpacer 0} {framed no} {masked yes} {typeSequence genome}} { #Recherche un enrichissement en signal en criblant tous les mots possibles dans un intervalle donné (en amont ou en aval d'une séquence). Se déplace sur toutes les positions et recense egalement pour chaque position les signaux. # Si on ne precise pas la longueur du classement a sortir, tous les mots trouves seront dans le fichier de sorti # Donc basiquement 4^X, X=longuer du mot considéré if {$ASortir == ""} { set ASortir [expr round(pow(4,$LongueurDesMots))] } set FichierOut [open "/tmp/XignalMiner.chr$indiceFichier.wordOf$LongueurDesMots.txt" "w"] set CompteurLus 0 set CompteurGC 0 set CompteurDeChar 0 set CompteurDeCharSaufN 0 set Max 0 set ListeDesAccess {} set SequenceTotale "" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: Starting with monofasta=$monofasta, framed=$framed, masked=$masked, combinations=$combinations, typeSequence = $typeSequence." Espionne "$timestamp|XignalMiner|$LongueurDesMots: Expected outputs : $ASortir." set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: Loading sequences of $FichierFasta" if {$typeSequence != "promoteur"} { set FichierIn [open "$FichierFasta" "r"] gets $FichierIn Ligne } if { $monofasta == "yes" } { lappend ListeDesAccess "Unique" array set SequenceTotaleArray [readFasta $FichierFasta 0] foreach Sequence $SequenceTotaleArray(index) { set SequenceTotale $SequenceTotaleArray($Sequence,sequence) } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: Purifying" regsub -all -nocase {\s|\n|\t} $SequenceTotale "" SequenceTotale set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: Adding to sequence list" flush stdout lappend ListeDesSequences $SequenceTotale set CompteurDeChar [string length $SequenceTotale] set Max $CompteurDeChar set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: Counting GC rates" #set CompteurGC [llength [regexp -all -inline {G|C|g|c} $SequenceTotale]] #set CompteurDeCharSaufN [expr $CompteurDeChar - [llength [regexp -all -inline {N|n} $SequenceTotale]]] set CompteurLus 1 } else { if {$typeSequence == "promoteur"} { CanalSqlUcscHuman set FichierIn [open "$FichierFasta" "w"] foreach sequence [SqlExec "SELECT sequence from ucschuman.GeCo_prom" "-list"] { puts $FichierIn ">UneSequence" puts $FichierIn "$sequence" } close $FichierIn } set FichierIn [open "$FichierFasta" "r"] while { [gets $FichierIn Access] >=0 } { lappend ListeDesAccess $Access gets $FichierIn Ligne incr CompteurLus ScanLaListe $Ligne SequenceIn set LongueurSeq [string length $SequenceIn] set ListeDesChars [split $SequenceIn ""] foreach Char $ListeDesChars { if { $Char == "G" || $Char == "C" } { incr CompteurGC } if { $Char != "N" } { incr CompteurDeCharSaufN } incr CompteurDeChar } lappend ListeDesSequences $SequenceIn if { $Max < $LongueurSeq } { set Max $LongueurSeq } } } close $FichierIn #set TauxGC [expr (100*$CompteurGC)/$CompteurDeChar] #set TauxGcSansN [expr (100*$CompteurGC)/$CompteurDeCharSaufN] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] #Espionne "$timestamp|XignalMiner|$LongueurDesMots: $CompteurLus sequences loaded ($CompteurDeChar bases)" #Espionne "$timestamp|XignalMiner|$LongueurDesMots: GC%: $TauxGC % ($TauxGcSansN % without N)" Espionne "$timestamp|XignalMiner|$LongueurDesMots: Searching for overrepresented patterns of $LongueurDesMots bp" set ListeDesCompteursDuCadre {} set NombreDeCadres [expr $Max - $LongueurDesMots] for {set Cadre 0 } { $Cadre <= $NombreDeCadres} { incr Cadre } { array unset CompteursDuCadre set GoodCadre [expr $Cadre + 1] if {$framed == "yes"} { puts $FichierOut "Cadre $GoodCadre :" } foreach Sequence $ListeDesSequences { set Range [string range $Sequence $Cadre [expr $Cadre + $LongueurDesMots - 1]] if {$masked == "yes"} { if { [regexp {a|t|c|g|n|N} $Range] } { continue } } else { if { [regexp {N|n} $Range] } { continue } } set Range [string toupper $Range] set RangeComp [NucToReverseAndComplementNuc $Range] if { ![info exists CompteursDuCadre($Range)] } { set CompteursDuCadre($Range) 1 } else { incr CompteursDuCadre($Range) } if { !([info exists Compteurs($Range)] ||[info exists Compteurs($RangeComp)] ) } { set Compteurs($Range) 1 } elseif {[info exists Compteurs($Range)] } { incr Compteurs($Range) } elseif {[info exists Compteurs($RangeComp)] } { incr Compteurs($RangeComp) } } foreach MotCadre [array names CompteursDuCadre] { lappend ListeDesCompteursDuCadre [list $CompteursDuCadre($MotCadre) $MotCadre] } set ListeDesCompteursDuCadre [lsort -index 0 -integer -decreasing $ListeDesCompteursDuCadre] if {$framed == "yes"} { for { set K 0 } { $K < $ASortir } { incr K} { set ClassementCadre [lindex $ListeDesCompteursDuCadre $K] set GoodK [expr $K+1] #puts $FichierOutTotal "$GoodK: $ClassementCadre" } } set ListeDesCompteursDuCadre {} } foreach Mot [array names Compteurs] { lappend ListeDesCompteurs [list $Compteurs($Mot) $Mot] } set ListeDesCompteurs [lsort -index 0 -integer -decreasing $ListeDesCompteurs] set prevPattern "" set prevOccurences -1 for { set L 0 } { $L <= $ASortir } { incr L} { set Element [lindex $ListeDesCompteurs $L] ScanLaListe $Element NbOccurences Motif set MotifComp [NucToReverseAndComplementNuc $Motif] lappend ListeDesMotifs $Motif lappend ListeDesMotifs $MotifComp set GoodL [expr $L+1] set LigneOut "$GoodL\t$Motif\t$NbOccurences" if { $prevPattern == $Motif } { if {$prevOccurences == $NbOccurences} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: Break at $L patterns" break } else { Espionne "$timestamp|XignalMiner|$LongueurDesMots: WARNING!!! Duplicate pattern with different occurences !!!" } } else { puts $FichierOut $LigneOut set prevPattern $Motif set prevOccurences $NbOccurences } } if { $combinations == "yes"} { set SequenceNum 0 array unset CompteursDuo Espionne "" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: ======================================" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: = PATTERN COMBINATION IN SEQUENCES =" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: ======================================" foreach Sequence $ListeDesSequences { incr SequenceNum for {set M 0 } { $M < [llength $ListeDesMotifs]} {incr M} { set Motif1 [lindex $ListeDesMotifs $M] for {set N 0 } { $N < [llength $ListeDesMotifs]} {incr N} { set Motif2 [lindex $ListeDesMotifs $N] set RegExp "$Motif1\[ATCG\]{0,$MaxSpacer}$Motif2" set ListeDesPositions [regexp -indices -all -inline "$RegExp" $Sequence] foreach PaireDeBornes $ListeDesPositions { set Motif1Comp [NucToReverseAndComplementNuc $Motif1] set Motif2Comp [NucToReverseAndComplementNuc $Motif2] set Range1 "$Motif1.x.$Motif2" set Range2 "$Motif2.x.$Motif1" set Range3 "$Motif1Comp.x.$Motif2" set Range3 "$Motif2Comp.x.$Motif1" set Range4 "$Motif1.x.$Motif2Comp" set Range4 "$Motif2.x.$Motif1Comp" set Range5 "$Motif1Comp.x.$Motif2Comp" set Range6 "$Motif2Comp.x.$Motif1Comp" if { !([info exists CompteursDuo($Range1)] || [info exists CompteursDuo($Range2)] || [info exists CompteursDuo($Range3)] || [info exists CompteursDuo($Range4)] || [info exists CompteursDuo($Range5)] || [info exists CompteursDuo($Range6)]) } { set CompteursDuo($Range1) 1 } elseif {[info exists CompteursDuo($Range1)] } { incr CompteursDuo($Range1) } elseif {[info exists CompteursDuo($Range2)] } { incr CompteursDuo($Range2) } elseif {[info exists CompteursDuo($Range3)] } { incr CompteursDuo($Range3) } elseif {[info exists CompteursDuo($Range4)] } { incr CompteursDuo($Range4) } elseif {[info exists CompteursDuo($Range5)] } { incr CompteursDuo($Range5) } elseif {[info exists CompteursDuo($Range6)] } { incr CompteursDuo($Range6) } ScanLaListe $PaireDeBornes Start End set Spacer [expr $End - $Start - [string length $Motif1] - [string length $Motif1] + 1] set Access [lindex $ListeDesAccess $SequenceNum ] Espionne "$timestamp|XignalMiner|$LongueurDesMots: $Access $PaireDeBornes ($Motif1.$Spacer.$Motif2)" } } } } set ListeDesCompteursDuo {} foreach Duo [array names CompteursDuo] { lappend ListeDesCompteursDuo [list $CompteursDuo($Duo) $Duo] } Espionne "" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: ======================================" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: =OVERREPRESENTED PATTERN COMBINATIONS=" set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: ======================================" set ListeDesCompteursDuo [lsort -index 0 -integer -decreasing $ListeDesCompteursDuo] for { set P 0 } { $P < $ASortir } { incr P} { set ElementDuo [lindex $ListeDesCompteursDuo $P] ScanLaListe $ElementDuo NbDuo MotifDuo set GoodP [expr $P+1] set LigneOutF "$GoodP: $MotifDuo ($NbDuo times)" puts $FichierOut $LigneOutF Espionne "$timestamp|XignalMiner|$LongueurDesMots: $LigneOutF" } } close $FichierOut set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalMiner|$LongueurDesMots: Done" } proc XignalParser {WordOf {masked yes}} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalParser: Start" set FichierBienFormate [open "/tmp/XignalParser.WordOf$WordOf.sig" "w"] set ListeDesLignes {} set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalParser: Listing" set ListeDesPatterns {"Z"} foreach I { "Y" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 "X" } { set FichierAparser [open "XignalMiner.chr$I.wordOf$WordOf.txt" "r"] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] puts -nonewline "$timestamp|XignalParser: * adding chromosome $I" flush stdout set prevLigne "" set patternsDuFichier 0 set evidence "Z" while { [gets $FichierAparser Ligne] >=0 } { incr patternsDuFichier regsub -all -nocase {:\s|\sor\s|\s\(|\stimes\)} $Ligne "\t" LigneX set LigneX [string trim $LigneX] ScanLaListe $LigneX top pattern occurences set reverse [NucToReverseAndComplementNuc $pattern] if {$evidence == "$pattern $reverse $occurences"} { break } else { set evidence "$pattern $reverse $occurences" } if { [string compare $pattern $reverse] == -1 } { set temp $pattern set pattern $reverse set reverse $temp } lappend ListeDesLignes [list $pattern $reverse $occurences] } Espionne " ($patternsDuFichier patterns trouves)" flush stdout close $FichierAparser } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalParser: Sorting raw list" set ListeDesLignes [lsort -index 0 $ListeDesLignes] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalParser: Melting chromosomic occurencies" set precPattern "X" set precOccurences 0 set ListeDesUniques {} set greedylines 0 foreach Element $ListeDesLignes { ScanLaListe $Element pattern reverse occurences if { ($pattern == $precPattern || $reverse == $precPattern) && $precOccurences != $occurences} { set occurences [expr $occurences + $precOccurences] set melted 1 } else { set melted 0 if {$precPattern == "AAAAA" | $precPattern == "TTTTT"} { Espionne "Youhou $pattern $precPattern $occurences $precOccurences $greedylines" } if {$greedylines != 0} { set rev [NucToReverseAndComplementNuc $precPattern] lappend ListeDesUniques [list $precOccurences $precPattern $rev] } } set precPattern $pattern set precOccurences $occurences incr greedylines } lappend ListeDesUniques [list $occurences $pattern $reverse] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalParser: Sorting melted list" set ListeDesUniques [lsort -decreasing -integer -index 0 $ListeDesUniques] set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalParser: Writing" set J 0 foreach ElementUnique $ListeDesUniques { incr J ScanLaListe $ElementUnique occurences pattern rev puts $FichierBienFormate "\t$pattern\t$rev\t$occurences\t$J\tgenome" } close $FichierBienFormate Espionne "$timestamp|XignalParser: Loading into in mySQL" if {$masked == "yes"} { file rename -force "/tmp/XignalParser.WordOf$WordOf.sig" "/tmp/patterns$WordOf.txt" exec /usr/bin/mysqlimport --user='anno' --password=ceji387. --host=[LbgiHost] -L ucschuman "/tmp/patterns$WordOf.txt" #file delete "/tmp/patterns$WordOf.txt" } else { file rename -force "/tmp/XignalParser.WordOf$WordOf.sig" "/tmp/patterns$WordOf_full.txt" exec /usr/bin/mysqlimport --user='anno' --password=ceji387. --host=[LbgiHost] -L ucschuman "/tmp/patterns$WordOf_full.txt" #file delete "/tmp/patterns$WordOf_full.txt" } set ListeToDelete [glob -nocomplain -directory "/tmp/" "XignalMiner.chr*..wordOf$WordOf*"] foreach Fichier $ListeToDelete { file delete $Fichier } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|XignalParser: End" } proc XmlFromRsf {NomOuFichier {FichierXml ""}} { set Nom "" set Fichier $NomOuFichier if { ! [regexp "/" $NomOuFichier]} { if {[EstUnPAB $NomOuFichier]} { set Nom $NomOuFichier set FichierPossible "[RepertoireDuGenome]/macsimRsf/$Nom" if {[FileExists $FichierPossible]} { set Fichier $FichierPossible } } } if {[FileAbsent $Fichier]} {return ""} if {$FichierXml==""} { if {$Nom!=""} { set FichierXml "[RepertoireDuGenome]/macsimXml/$Nom" } else { regsub -nocase ".rsf$" $Fichier "" FichierXml append FichierXml ".xml" } } set GetText 0 if {$FichierXml=="GetText"} { set GetText 1 set FichierXml "[TmpFile].xml" } if {[catch {exec clustalw $Fichier -convert -output=macsim -outfile=$FichierXml} Message]} { return "" } if {$GetText} { set TexteXml [ContenuDuFichier $FichierXml] file delete $FichierXml return $TexteXml } return $FichierXml } proc XmlFromRsfMacsim {NomOuFichier {FichierXml ""}} { return XmlFromRsf $NomOuFichier $FichierXml } proc XmlValidePourTous {} { foreach Nom [ListeDesPABs] { set Fichier "[RepertoireDuGenome]/macsimXml/$Nom" if { ! [file exists $Fichier]} { continue } set Retour "nothing" if {[catch {set Retour [exec xmlvalid $Fichier]} Message]} { FaireLire "During the command 'xmlvalid $Fichier'\n I got the error message $Message\n and $Retour as output" continue } if {$Retour!=""} { FaireLire "During the command 'xmlvalid $Fichier'\n I got the output\n\'$Retour" continue } Espionne "Ok for xmlvalid $Fichier" } } proc XpertComment {Nom} { set Info [ExtraitInfo $Nom] regsub -all "\n" $Info "
    \n" Info set Date [Date Nice] regsub -all " " $Date "_" Date regsub -all "\:" $Date "h" Date Html_ZeroToBody Html_Banner Wscope Html_Append "
    " Html_Append "

    " Html_Append "Please add your comment at the end" Html_Append "

    " Html_Append "
    " Html_Append "

    " Html_Append " " Html_Append " " Html_Append " " Html_Append "$Info
    " Html_Append "XpertComment: " Html_Append " " Html_Append "

    " Html_Append "
    " Html_BodyToEnd return [Html_Get] } proc XpertCommentNew {Nom {NewInfo ""}} { return [Html_DuTexteTelQuel [InformeSansDemander $Nom "XpertComment: $NewInfo"]] set Info [ExtraitInfo $Nom] regsub -all "\n" $Info "
    \n" Info return [Html_DuTexteTelQuel "$Info\n
    XpertComment: $NewInfo"] } proc XtoN {FichierTFA} { set E [open "$FichierTFA" "r"] set S [open "$FichierTFA.new" "w"] while {[gets $E Ligne]>=0} { if { ! [regexp ">" $Ligne]} { regsub -all -nocase "X" $Ligne "N" Ligne } puts $S $Ligne } exit } proc YEAHOrganisms {{A ""} {B ""} {C ""}} { set L {} foreach O [list "Sc" "Eh" "At" "Hs"] { if {$A==$O} { continue } if {$B==$O} { continue } if {$C==$O} { continue } lappend L $O } return $L } proc YEAHStore {{Qui ""} {Start ""} {Stop ""}} { global YEAHStore if {[info exists YEAHStore($Qui)]} { return $YEAHStore($Qui) } if {$Start==""} { set Start 0 } if {$Stop==""} { set Stop 999999 } if {$Qui==""} { set Qui "ListOfAccess" } if {[info exists YEAHStore($Qui)]} { return $YEAHStore($Qui) } if {[info exists YEAHStore("EstCharge")]} { return "" } set YEAHStore("EstCharge") 1 foreach O [YEAHOrganisms] { set n 0 set Fi "[RepertoireDuGenome]/DeJohan/$O.tfa" foreach Access [LaSequenceDuTFAs $Fi "LaListeDesAccess"] { incr n if {$n<$Start} { continue } if {$n>$Stop} { break } lappend YEAHStore(ListOfAccess) $Access set TFA [LaSequenceDuTFAs $Fi $Access] set YEAHStore($Access) $TFA } } return [YEAHStore $Qui] } proc YEAHbadThingsInAlignment {{FichierSource ""}} { if {$FichierSource==""} { set FichierSource "[RepertoireDuGenome]/msf/YEAH000001" } set LesLignes [LesLignesDuFichier $FichierSource] DecortiqueUnMSF $FichierSource LesSources set i 0 set OnAttend 1 set LesMauvais {} foreach Ligne $LesLignes { if {$OnAttend} { if {[regexp "//" $Ligne]} { set OnAttend 0 } continue } if { ! [regexp -nocase {[a-z]} $Ligne]} { set i 0 ; continue } scan $Ligne "%s" Access set Source [lindex $LesSources $i] if {$Access!=$Source} { lappend LesMauvais "$Source!=$Access dans $Ligne" } Espionne "$Source $Access" incr i } return $LesMauvais } proc YEAHbilan {Qui {Quoi ""}} { global YEAHbilan if {[info exists YEAHbilan($Qui,$Quoi)]} { return $YEAHbilan($Qui,$Quoi) } if {[info exists YEAHbilan("EstCharge")]} { return "" } set YEAHbilan("EstCharge") 1 foreach Org [YEAHOrganisms] { foreach Autre [YEAHOrganisms] { if {$Autre==$Org} { continue } set YEAHbilan([YeahOui $Org],[YeahOui $Autre]) {} set YEAHbilan([YeahOui $Org],[YeahNon $Autre]) {} } } foreach Org [YEAHOrganisms] { foreach Moi [YEAHpa $Org "MySeqs"] { set Others [YEAHpa $Moi "OtherBests"] # Espionne "$Moi $Others" set nAutres 0 foreach Toi $Others { set Autre [YEAHorganOf $Toi] if {$Autre==$Org} { continue } incr nAutres lappend YEAHbilan($Moi,$Autre) "$Moi $Toi" lappend YEAHbilan([YeahOui $Org],[YeahOui $Autre]) $Moi } foreach Autre [YEAHOrganisms] { if {$Autre==$Org} { continue } if {[info exists YEAHbilan($Moi,$Autre)]} { continue } set YEAHbilan($Moi,[YeahNon $Autre])) $nAutres lappend YEAHbilan([YeahOui $Org],[YeahNon $Autre]) $Moi } } foreach SaS [YEAHpa $Org "MySeqs"] { } } # return [YEAHbilan $Qui $Quoi] foreach I [YEAHOrganisms] { foreach Iin [list "Non" "Oui"] { foreach J [YEAHOrganisms $I] { foreach Jin [list "Non" "Oui"] { if { ! [info exists YEAHbilan([$Iin $I],[$Jin $J])]} { set YEAHbilan([$Iin $I],[$Jin $J]) {}} if { ! [info exists YEAHbilan([$Jin $J],[$Iin $I])]} { set YEAHbilan([$Jin $J],[$Iin $I]) {}} foreach K [YEAHOrganisms $I $J] { foreach Kin [list "Non" "Oui"] { foreach L [YEAHOrganisms $I $J $K] { foreach Lin [list "Non" "Oui"] { if { ! [info exists YEAHbilan([$Kin $K],[$Lin $L])]} { set YEAHbilan([$Kin $K],[$Lin $L]) {}} if { ! [info exists YEAHbilan([$Lin $L],[$Kin $K])]} { set YEAHbilan([$Lin $L],[$Kin $K]) {}} } } } } } } } } set Iin "Oui" foreach I [YEAHOrganisms] { foreach J [YEAHOrganisms $I] { foreach Jin [list "Non" "Oui"] { foreach K [YEAHOrganisms $I $J] { foreach Kin [list "Non" "Oui"] { foreach L [YEAHOrganisms $I $J $K] { foreach Lin [list "Non" "Oui"] { set BI [$Iin $I] set BJ [$Jin $J] set BK [$Kin $K] set BL [$Lin $L] set ListeIJ $YEAHbilan([$Iin $I],[$Jin $J]) set ListeIK $YEAHbilan([$Iin $I],[$Kin $K]) set ListeIL $YEAHbilan([$Iin $I],[$Lin $L]) set ListeIJK [ListsIntersection $ListeIJ $ListeIK] set ListeIJKL [ListsIntersection $ListeIJK $ListeIL] set YEAHbilan([$Iin $I],[$Jin $J],[$Kin $K],[$Lin $L]) $ListeIJKL } } } } } } } return [YEAHbilan $Qui $Quoi] set LeDazi {} foreach Org [YEAHOrganisms] { foreach Autre [YEAHOrganisms] { if {$Autre==$Org} { continue } lappend LeDazi "$Org $Autre [llength $YEAHbilan($Org,$Autre)]" } foreach Autre [YEAHOrganisms] { if {$Autre==$Org} { continue } lappend LeDazi "$Org non-$Autre [llength $YEAHbilan($Org,non-$Autre)]" } } AfficheVariable [join $LeDazi "\n"] } proc YEAHblast {{Banque ""}} { set SeuilExpect "1.0e-30" set MaxListe "30" if {$Banque==""} { set Banque "protall" } set Queue [file tail $Banque] foreach S [YEAHbilan "SC" "at,eh,HS"] { foreach X [YEAHpa $S "Hs"] { set FiTFA "[RepertoireDuGenome]/prottfa/$X" if {[FileAbsent $FiTFA]} { continue } set FichierBlast "[RepertoireDuGenome]/blastp$Queue/$X" if {[FileExists $FichierBlast]} { continue } if {[PasTouche $X]} { continue } BlastPPourTous $FiTFA $Banque "SansPasTouche" $SeuilExpect FinPasTouche $X } } } proc YEAHbosse {} { set SeuilExpect "1.0e-10" set MaxListe "SansLimiteDeNombre" set Banque "[RepertoireDuGenome]/banques/YEAH" foreach S [YEAHbilan "SC" "at,EH,hs"] { set LesH [YEAHpa $S Others] foreach H $LesH { set FiBla "[RepertoireDuGenome]/blastpYEAH/$H" if {[file exists $FiBla]} { continue } if {[PasTouche $H]} { continue } set FiTFA "[RepertoireDuGenome]/prottfa/$H" Espionne "$S $H" BlastPPourTous $FiTFA $Banque "SansPasTouche" $SeuilExpect FinPasTouche $H } } } proc YEAHcorrigeOffsetEtSpaceEtTilde {{Fichier ""}} { if {$Fichier==""} { set Fichier [ButineArborescence "" "[RepertoireDuGenome]/DeJohan"] } set LeNew {} set OnAttendSeq 1 set DansSeq 0 set Offset 0 foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp "^offset " $Ligne]} { set Offset [IntegerApres "offset" dans $Ligne] continue } if {$OnAttendSeq} { if {[regexp "^sequence" $Ligne]} { set OnAttendSeq 0 set DansSeq 1 set Sequence [string repeat "." $Offset] } lappend LeNew $Ligne continue } if {$DansSeq} { if {[regexp {^\}} $Ligne]} { set OnAttendSeq 1 set DansSeq 0 set Offset 0 set LaSequence {} set SequenceRestante $Sequence while 1 { if {$SequenceRestante==""} { break } set Bout [string range $SequenceRestante 0 59] set SequenceRestante [string range $SequenceRestante 60 end] lappend LeNew " $Bout" } lappend LeNew $Ligne continue } set Seq [string range $Ligne 2 end] regsub -all {[ ~]} $Seq "." Seq append Sequence $Seq continue } lappend LeNew $Ligne } regsub ".rsf" $Fichier "-OK.rsf" NewFichier return [SauveLesLignes $LeNew dans $NewFichier] } proc YEAHcreateGoodAlignment {{Fichier ""}} { if {$Fichier==""} { set Fichier [ButineArborescence "All"] } set FiRsfOri [GscopeFile "YEAH000001" rsforiginal] file copy -force $Fichier $FiRsfOri set MaquRsf [YEAHmaquilleRsf $Fichier] set GoodRsf [YEAHcorrigeOffsetEtSpaceEtTilde $MaquRsf] set FiRsf [GscopeFile "YEAH000001" rsf] file copy -force $GoodRsf $FiRsf set GoodMsf [ConvertToMsf $GoodRsf "GetFile"] set FiMsf [GscopeFile "YEAH000001" msf] file copy -force $GoodMsf $FiMsf Espionne "I created $FiMsf" set LesMauvais [YEAHbadThingsInAlignment $FiMsf] if {$LesMauvais!={}} { AfficheVariable [join $LesMauvais "\n"] "AvecFetch" "BadThingsInAlignment" } set FiMacsimXml [GscopeFile "YEAH000001" macsimXml] set FiMacsimRsf [GscopeFile "YEAH000001" macsimRsf] Macsims $FiMsf "DeleteXmlFile" $FiMacsimRsf ReordonneRsf $FiMacsimRsf "OrderFromMsf" "SameFile" exec clustalw $FiMacsimRsf -convert -output=macsims -outfile=$FiMacsimXml -outorder=input return $FiMacsimXml } proc YEAHfind {{Qui ""}} { if {$Qui==""} { set Qui [Entre] } if {$Qui==""} { return "" } scan $Qui "%s" Qui set Others [YEAHpa $Qui Others] if {$Others==""} { return "" } return [YEAHshowList $Qui $Others] } proc YEAHmaquilleAlignmentOld {{FichierSource ""} {FichierMaquille ""}} { if {$FichierSource ==""} { set FichierSource [GscopeFile YEAH000001 "msf"] } if {$FichierMaquille==""} { set FichierMaquille [GscopeFile YEAH000001 "msfwithlinks"] ; file mkdir "[RepertoireDuGenome]/msfwithlinks" } set LesNouveaux {} DecortiqueUnMSF $FichierSource LesSources set MaxAccess -1 foreach Source $LesSources { set Nouveau $Source if { [regexp -nocase {(NP|NM|XP)_?[0-9]+$} $Source Nouveau]} { } elseif {[regexp -nocase {^(SW|SPT)[_\:][A-Z0-9]+} $Source Nouveau]} { } elseif {[regexp -nocase {_([A-Z0-9]{6,})$} $Source Match Nouveau]} { } if {[regexp -nocase {^[0-9]+$} $Nouveau]} { set Nouveau "n:$Nouveau" } if { ! [regexp -nocase {[a-z]} $Nouveau]} { set Nouveau $Source } while {[info exists DejaVu($Nouveau)]} { append Nouveau "_2" } set DejaVu($Nouveau) $Source lappend LesNouveaux $Nouveau set MaxAccess [Maxi $MaxAccess [string length $Nouveau]] if {$Source!=$Nouveau} { Espionne "$Source $Nouveau" } # EspionneL [LaSequenceDesBanques $Nouveau] } global MaquilleNon set MemoMaquilleNon $MaquilleNon set MaquilleNon 0 set LeMaquille [MaquilleLeMSF $FichierSource $LesSources $LesNouveaux $MaxAccess] set MaquilleNon $MemoMaquilleNon set Maquille [join $LeMaquille "\n"] set FM [Sauve $Maquille dans $FichierMaquille] return $FM } proc YEAHmaquilleRsf {{FichierSource ""} {FichierMaquille ""}} { if {$FichierSource ==""} { set FichierSource [ButineArborescence "" "[RepertoireDuGenome]/DeJohan"] } if {$FichierMaquille==""} { set FichierMaquille $FichierSource regsub ".rsf" $FichierMaquille "" FichierMaquille append FichierMaquille "-maquille.rsf" } set LesDifferents {} set LesNouveaux {} set LeMaquille {} foreach Ligne [LesLignesDuFichier $FichierSource] { if { ! [regexp -nocase {^name +([^ ]+)} $Ligne Match Access]} { lappend LeMaquille $Ligne ; continue } set Nouveau $Access if {[regexp -nocase {^[0-9]+$} $Nouveau]} { set Nouveau "n:$Nouveau" } if { ! [regexp -nocase {[a-z]} $Nouveau]} { set Nouveau $Source } while {[info exists DejaVu($Nouveau)]} { append Nouveau "_2" } set DejaVu($Nouveau) $Access lappend LesNouveaux $Nouveau if {$Access!=$Nouveau} { lappend LesDifferents "$Access $Nouveau" } lappend LeMaquille "name $Nouveau" } regsub {\.rsf$} $FichierMaquille "" FichierDiff append FichierDiff "-DIFFERENCES.txt" set Diff [SauveLesLignes $LesDifferents dans $FichierDiff] set FM [SauveLesLignes $LeMaquille dans $FichierMaquille] AfficheFichier $FichierDiff return $FM } proc YEAHmouvement {} { set Les340 [LesLignesDuFichier "[Fiches]/SCHS340.txt"] foreach Ligne $Les340 { set SCHS340($Ligne) 1 } set Les319 [LesLignesDuFichier "[Fiches]/SCHS319.txt"] foreach Ligne $Les319 { set SCHS319($Ligne) 1 } set LeTout [lsort -unique [concat $Les340 $Les319]] set LesPerdus [list "LesPerdus"] set LesGagnes [list "LesGagnes"] set LesCommuns [list "LesCommuns"] foreach Ligne $LeTout { if {[info exists SCHS340($Ligne)]} { if {[info exists SCHS319($Ligne)]} { lappend LesCommuns $Ligne ; continue } lappend LesPerdus $Ligne ; continue } lappend LesGagnes $Ligne } set Dazi [join $LesPerdus "\n"] set F [AfficheVariable $Dazi "" "SortisDes340"] BoutonneLaFenetre $F "ShowYeast" "YEAHshowYeast \[selection get\]" BoutonneLaFenetre $F "ShowSeq" "YEAHshowIt \[selection get\] prottfa" BoutonneLaFenetre $F "ShowBlast" "YEAHshowIt \[selection get\] blastpYEAH" set Dazi [join $LesGagnes "\n"] set F [AfficheVariable $Dazi "" "NouveauxDans319"] BoutonneLaFenetre $F "ShowYeast" "YEAHshowYeast \[selection get\]" BoutonneLaFenetre $F "ShowSeq" "YEAHshowIt \[selection get\] prottfa" BoutonneLaFenetre $F "ShowBlast" "YEAHshowIt \[selection get\] blastpYEAH" set Dazi [join $LesCommuns "\n"] set F [AfficheVariable $Dazi "" "Communs340et319"] BoutonneLaFenetre $F "ShowYeast" "YEAHshowYeast \[selection get\]" BoutonneLaFenetre $F "ShowSeq" "YEAHshowIt \[selection get\] prottfa" BoutonneLaFenetre $F "ShowBlast" "YEAHshowIt \[selection get\] blastpYEAH" return $F } proc YEAHorganOf {Qui} { return [string range $Qui 0 1] } proc YEAHpa {Qui {Quoi ""} {Val ""}} { global YEAHpa if {$Val != "" && ! [info exists YEAHpa("EstCharge")]} { YEAHpa "Load" if {$Qui!="Load"} { return [YEAHpa $Qui $Quoi $Val] } return "" } if {$Val != ""} { if { ! [info exists YEAHpa($Qui,$Quoi)]} { lappend YEAHpa(ListOf,Couples) "$Qui $Quoi" lappend YEAHpa($Qui,Others) $Quoi set YEAHpa($Qui,$Quoi) $Val } return $YEAHpa($Qui,$Quoi) } set FiYEAHpa "[Fiches]/YEAHpa.txt" if {$Qui=="Save"} { if { ! [info exists YEAHpa(ListOf,Couples)]} { YEAHpa "Load" } if { ! [info exists YEAHpa(ListOf,Couples)]} { return "" } set LesLignes {} foreach MT $YEAHpa(ListOf,Couples) { scan $MT "%s %s" Moi Toi set Val $YEAHpa($Moi,$Toi) lappend LesLignes "$Moi $Toi $Val" } SauveLesLignes $LesLignes dans $FiYEAHpa return $FiYEAHpa } if {[info exists YEAHpa($Qui,$Quoi)]} { return $YEAHpa($Qui,$Quoi) } if {[info exists YEAHpa("EstCharge")]} { return "" } set YEAHpa("EstCharge") 1 if {[file exists $FiYEAHpa]} { foreach Ligne [LesLignesDuFichier $FiYEAHpa] { set LesMots [split $Ligne " "] set Moi [lindex $LesMots 0] set Org [YEAHorganOf $Moi] lappend YEAHpa($Org,MySeqs) $Moi set Toi [lindex $LesMots 1] if {[info exists YEAHpa($Moi,$Toi)]} { continue } set Aut [YEAHorganOf $Toi] # Espionne "$Moi $Aut $Toi" if { ! [info exists YEAHpa($Moi,$Aut)]} { set YEAHpa($Moi,$Aut) $Toi lappend YEAHpa($Moi,OtherBests) $Toi } lappend YEAHpa($Moi,$Aut-all) $Toi set Val [lrange $LesMots 2 end] set YEAHpa($Moi,$Toi) $Val lappend YEAHpa($Moi,Others) $Toi lappend YEAHpa(ListOf,Couples) "$Moi $Toi" } } foreach Org [YEAHOrganisms] { if { ! [info exists YEAHpa($Org,MySeqs)]} { set YEAHpa($Org,MySeqs) {} } set YEAHpa($Org,MySeqs) [lsort -unique $YEAHpa($Org,MySeqs)] } return [YEAHpa $Qui $Quoi] } proc YEAHrecap {{Config ""}} { if {$Config==""} { set Iin "Oui" foreach I [list "Sc"] { foreach J [YEAHOrganisms $I] { foreach Jin [list "Non" "Oui"] { foreach K [YEAHOrganisms $I $J] { foreach Kin [list "Non" "Oui"] { foreach L [YEAHOrganisms $I $J $K] { foreach Lin [list "Non" "Oui"] { set Config "[$Jin $J],[$Kin $K],[$Lin $L]" foreach S [YEAHbilan "SC" $Config] { set LesH [YEAHpa $S Others] foreach H $LesH { if {$H==$S} { continue } set FiBla "[RepertoireDuGenome]/blastpYEAH/$H" if {[file exists $FiBla]} { continue } lappend LesManquants "$S $H" Espionne "$S $H" } } } } } } } } } } } proc YEAHreciprocal {} { # foreach M [YEAHpa "Sc" "MySeqs"] { } foreach M [YEAHbilan "SC" "AT,eh,hs"] { foreach T [YEAHpa $M OtherBests] { if {[YEAHpa $T $M]==""} { Espionne "$M $T [YEAHpa $M $T] [YEAHpa $T $M]" } } } } proc YEAHreduitYEAHpa {} { YEAHpa a b set FiYEAHpa "[Fiches]/YEAHpa.txt" set LeReduit {} foreach Ligne [LesLignesDuFichier $FiYEAHpa] { if {[regexp "^Sc" $Ligne]} { scan $Ligne "%s %s" Moi Toi if {[YEAHpa $Toi $Moi]==""} { continue } } lappend LeReduit $Ligne } return [SauveLesLignes $LeReduit dans "[Fiches]/YEAHpaReduit.txt"] } proc YEAHshow {} { set LeDazi {} set Iin "Oui" foreach I [YEAHOrganisms] { foreach J [YEAHOrganisms $I] { foreach Jin [list "Non" "Oui"] { foreach K [YEAHOrganisms $I $J] { foreach Kin [list "Non" "Oui"] { foreach L [YEAHOrganisms $I $J $K] { foreach Lin [list "Non" "Oui"] { set Liste [YEAHbilan [$Iin $I] "[$Jin $J],[$Kin $K],[$Lin $L]"] set Ligne "[$Iin $I] [$Jin $J] [$Kin $K] [$Lin $L] [llength $Liste]" lappend LeDazi $Ligne } } } } } } } if {[PourWscope]} { return [YEAHshowAvecRef $LeDazi] } set Dazi [join $LeDazi "\n"] set F [AfficheVariable $Dazi "" "YEAHshow"] BoutonneLaFenetre $F "Fais-voir" "YEAHshowList \[selection get\]" return $F } proc YEAHshowAvecRef {LeDazi} { set LeNew {} foreach Ligne $LeDazi { regsub -all " " $Ligne "_" Sel lappend LeNew "
    $Ligne" } set New [join $LeNew "
    \n"] return $New } proc YEAHshowAvecRefYeastProttfaBlastp {LeDazi} { set LeNew {} foreach Ligne $LeDazi { if {[regexp "^<" $Ligne]} { lappend LeNew $Ligne ; continue } scan $Ligne "%s" Sel set Gene [StringApres "gene:" dans $Ligne] lappend LeNew "Yeast Seq Blast $Ligne" } set New [join $LeNew "
    \n"] return $New } proc YEAHshowBlastAvecRef {Qui} { set LeNew [list "
    "]
        set FiBla "[RepertoireDuGenome]/blastpYEAH/$Qui"
        if {[FileAbsent $FiBla]} { return "" }
        set OnAttend 1
        foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/blastpYEAH/$Qui"] {
    	if {$OnAttend && ! [regexp "Sequences producing significant alignments" $Ligne]} { lappend LeNew $Ligne ; continue }
    	set OnAttend 0
    	if {[regexp {^(Sc|At|Eh|Hs)[0-9]+} $Ligne Match]} {
    	    if {[file exists "[RepertoireDuGenome]/blastpYEAH/$Match"]} {
    		regsub "$Match " $Ligne "" Ligne
    		set Ligne "$Match $Ligne"
    	    }
    	}
    	lappend LeNew $Ligne
        }
        lappend LeNew "
    " set New [join $LeNew "\n"] return $New } proc YEAHshowIt {Qui Quoi} { scan $Qui "%s" Qui if {[PourWscope]} { if {[regexp "blastp" $Quoi]} { return [YEAHshowBlastAvecRef $Qui] } return [FileMoi $Quoi $Qui] } set F [AfficheFichier "[RepertoireDuGenome]/$Quoi/$Qui"] BoutonneLaFenetre $F "ShowYeast" "YEAHshowYeast \[selection get\]" BoutonneLaFenetre $F "ShowSeq" "YEAHshowIt \[selection get\] prottfa" BoutonneLaFenetre $F "Protall" "YEAHshowIt \[selection get\] blastpprotall" BoutonneLaFenetre $F "ShowBlast" "YEAHshowIt \[selection get\] blastpYEAH" } proc YEAHshowList {Selection {Liste ""}} { regsub -all "_" $Selection " " Selection set I "" set J "" set K "" set L "" if {$Liste==""} { ScanLaListe [split $Selection " "] I J K L set Liste [YEAHbilan $I "$J,$K,$L"] } set LeDazi {} set LeDazi2 {} foreach S $Liste { set Def [EnteteDuFichierTFA "[RepertoireDuGenome]/prottfa/$S"] regsub ">$S *" $Def "" Def lappend LeDazi "$S $Def" set Txt "" if {[regexp "^Sc" $S]} { set OrfName [StringApres "gene:" dans $Def] set Txt [YeastGlossary $OrfName "Txt"] } lappend LeDazi2 "$S $Txt" } if {[PourWscope]} { set LeTitre [list "

    This page contains two parts ... the second has Yeast information

    "] set LeSaut [list "

    Second part with Yeast information

    "] return [YEAHshowAvecRefYeastProttfaBlastp [concat $LeTitre $LeDazi $LeSaut $LeDazi2]] } set Dazi [join $LeDazi "\n"] set F [AfficheVariable $Dazi "" "$I-$J-$K-$L"] BoutonneLaFenetre $F "ShowYeast" "YEAHshowYeast \[selection get\]" BoutonneLaFenetre $F "ShowSeq" "YEAHshowIt \[selection get\] prottfa" BoutonneLaFenetre $F "ShowBlast" "YEAHshowIt \[selection get\] blastpYEAH" set Dazi2 [join $LeDazi2 "\n"] set F2 [AfficheVariable $Dazi2 "" "$I-$J-$K-$L"] BoutonneLaFenetre $F2 "ShowYeast" "YEAHshowYeast \[selection get\]" BoutonneLaFenetre $F2 "ShowSeq" "YEAHshowIt \[selection get\] prottfa" BoutonneLaFenetre $F2 "ShowBlast" "YEAHshowIt \[selection get\] blastpYEAH" return $F } proc YEAHshowSc {{Sc ""} {What ""}} { if {$What==""} { set What "All" } if {$What=="Show"} { set Action "Show" set What "" } else { set Action "Get" } set Entete [EnteteDuFichierTFA "[GscopeDatabaseDir YEAH]/prottfa/$Sc"] return [YEAHshowYeast $Entete $Action $What] } proc YEAHshowYeast {{Selection ""} {Action ""} {What ""}} { if {$Action==""} { set Action "Show" } if {$What==""} { set What "All" } if {[regexp " " $Selection]} { set OrfName [StringApres "gene:" dans $Selection] } else { scan $Selection "%s" OrfName } if {$OrfName==""} { if {[PourWscope]} { return "Sorry there is no information about Yeast" } set Selection [Entre] if {$Selection==""} { return "" } return [YEAHshowYeast $Selection $Action] } set Info [YeastGlossary $OrfName $What] if {$Action=="Get"} { return $Info } return [Affiche $Info "" $OrfName] } proc Ya {} { set PN [LesLignesDuFichier "[HomeRipp]/pHMGWA.txt"] set P [lindex $PN 0] set N [lindex $PN 4] set Fin [string first " K D A Q T " $P] incr Fin 15 set N [string range $N 113 $Fin] set P [string range $P 112 $Fin] while 1 { set NN [string range $N 0 59] set PP [string range $P 0 59] Espionne $NN Espionne $PP Espionne set N [string range $N 60 end] set P [string range $P 60 end] if {$N==""} { break } } exit } 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 YaOrthologue {Nom Orga {Genome ""}} { global RepertoireDuGenome Wup "return 1 if piclustalw exists and >= 20" set SeuilYaOrthologue 20 Wup "YaOrthologue works also for other genomes" if {$Genome==""} { if {[YaPABouTROUouTRNAouARNenDebutDe $Nom]} { set FichierPIC "" } else { set Genome [lindex [GenomeDu $Nom] 0] set FichierPIC "$Genome/fiches/piclustalw" } } else { if { ! [file exists $Genome]} { set Genome "$RepertoireDuGenome/../$Genome" } set FichierPIC "$Genome/fiches/piclustalw" } set PI [PourcentageIdentiteOrga $Nom $Orga $FichierPIC] return [expr $PI >= $SeuilYaOrthologue] } proc YaPABdans {Texte} { if {[OnTraite "REFUNI" "NonStrict"] && [regexp {^(AGAM|SCER|XTRO)[0-9\.]+} $Texte]} { return 1 } if {[regexp "[PreFixe]" $Texte]} { return 1 } return 0 } proc YaPABenDebutDe {Texte} { if {[regexp "^[PreFixe]" $Texte]} { return 1 } return 0 } proc YaPABouTROUouTRNAouARNdans {Texte} { if {[YaPABdans $Texte]} { return 1 } if {[regexp {TROU|TRNA|ARN} $Texte]} { return 1 } return 0 } proc YaPABouTROUouTRNAouARNenDebutDe {Texte} { if {[YaPABenDebutDe $Texte]} { return 1 } if {[regexp {^TROU|^TRNA|^ARN} $Texte]} { return 1 } return 0 } proc Yann {} { # set Texte [HttpGetTextFromUrl "http://saiph"] set Texte [ContenuDuFichier "[HomeRipp]/vrac/fir.htm"] while 1 { set F [ValeurDeLaBalise font Texte Rogner Att] if {$F==""} { break } Espionne "$F $Att" } exit set X [ValeurDeLaBalise form Texte] Espionne $X Espionne "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" set X [ValeurDeLaBalise form Texte] Espionne $X exit } proc YannisOrganism {{Qui ""} {Quoi ""}} { global YannisOrganism if {$Qui==""} { set Qui "ListOf" ; set Quoi "Keys" } set LesKeys [list TaxId FullOs Filename OS Strain Keys] foreach K $LesKeys { if {[string equal -nocase $Quoi $K]} { set Quoi $K ; break } } if {[info exists YannisOrganism($Qui,$Quoi)]} { return $YannisOrganism($Qui,$Quoi) } if {[info exists YannisOrganism("EstCharge")]} { if {[info exists YannisOrganism($Qui,Id)]} { set Id $YannisOrganism($Qui,Id) if {[info exists YannisOrganism($Id,$Quoi)]} { return $YannisOrganism($Id,$Quoi) } } return "" } set YannisOrganism("EstCharge") 1 set Rep "/home/nevers/StageJuin/Proteomes" set YannisOrganism(Rep,) $Rep NousAllonsAuBoulot $Rep set LesFichiersTfa [lsort [glob -nocomplain "*.tfa"]] foreach Fichier $LesFichiersTfa { if { ! [regexp {([0-9]+)_([A-Z][a-z]+)_([a-z\.\-]+)_(.*)} $Fichier Match TaxId G E R]} { FaireLire "Bas $Fichier"; continue } set Filename "$Rep/$Fichier" set OS "${G}_$E" set Strain $R regsub "\.tfa$" $Strain "" Strain if {$Strain=="-"} { set Strain "" } set FullOs "$TaxId $G $E $Strain" lappend YannisOrganism(ListOf,TaxId) $TaxId lappend YannisOrganism(ListOf,OS) $OS lappend YannisOrganism(ListOf,Strain) $Strain lappend YannisOrganism(ListOf,Filename) $Fichier lappend YannisOrganism(ListOf,FullOs) $FullOs set YannisOrganism($TaxId,TaxId) $TaxId set YannisOrganism($TaxId,OS) $OS set YannisOrganism($TaxId,FullOs) $FullOs set YannisOrganism($TaxId,Strain) $Strain set YannisOrganism($TaxId,Filename) $Filename lappend YannisOrganism($OS,TaxId) $TaxId set YannisOrganism($FullOs,TaxId) $TaxId set YannisOrganism($Filename,TaxId) $TaxId } set YannisOrganism(ListOf,Keys) $LesKeys set YannisOrganism(ListOf,TaxId) [lsort -integer $YannisOrganism(ListOf,TaxId)] set YannisOrganism(ListOf,OS) [lsort -unique $YannisOrganism(ListOf,OS)] set YannisOrganism(ListOf,FullOs) [lsort $YannisOrganism(ListOf,FullOs)] OnRevientDuBoulot return [YannisOrganism $Qui $Quoi] } proc YatilUneMet {Org Cluster Name} { # Org Mouse Rat set trouve 0; set Premier "" if {[regexp -nocase "Mouse" $Org]} { set LesRepertoires [LesRepertoires "Mouse" "Mod"] } if {[regexp -nocase "Rat" $Org]} { set LesRepertoires [LesRepertoires "Rat" "Mod"] } lassign $LesRepertoires FirstRep SecondRep ThirdRep set FileTfa "$FirstRep/$Cluster.fa" if {![file exists $FileTfa]} {set FileTfa "$SecondRep/$Cluster.fa"} if {![file exists $FileTfa]} {set FileTfa "$ThirdRep/$Cluster.fa"} set f [open $FileTfa r] while {![eof $f]} { set Ligne [gets $f] if {[regexp "$Name" $Ligne]} { set trouve 1 continue } if {$trouve} { set Premier [lindex [split $Ligne ""] 0] set trouve 0 } } close $f return $Premier } proc YeahNon {X} { return [string tolower $X] } proc YeahOui {X} { return [string toupper $X] } proc YeastGlossary {{Qui ""} {Quoi ""}} { global YeastGlossary if {$Qui==""} { set Qui "ListOf" ; set Quoi "Locus_Name" } if {$Quoi==""} { set Quoi "All" } if {[info exists YeastGlossary($Qui,$Quoi)]} { return $YeastGlossary($Qui,$Quoi) } if {[info exists YeastGlossary("EstCharge")]} { if {[info exists YeastGlossary($Qui,Locus_Name)]} { set Y $YeastGlossary($Qui,Locus_Name) if {[info exists YeastGlossary($Y,$Quoi)]} { return $YeastGlossary($Y,$Quoi) } return } return "" } set YeastGlossary("EstCharge") 1 set YeastGlossary(Filename,) "/genomics/link/YEAH/DeJohan/YeastGenenames.txt" if {[FileAbsent $YeastGlossary(Filename,)]} { FaireLire "$YeastGlossary(Filename,) n'existe pas" ; return "" } foreach Ligne [LesLignesDuFichier $YeastGlossary(Filename,)] { set YaClef [regexp {([^\:]+)\:} $Ligne Match Clef] if {$YaClef} { set Valeur [string trim [StringSuivant $Match dans $Ligne]] if {$Clef=="Locus_Name"} { set Y $Valeur set YeastGlossary($Y,All) {} } if {[info exists YeastGlossary($Y,$Clef)]} { append YeastGlossary($Y,$Clef) " $Valeur" } else { set YeastGlossary($Y,$Clef) $Valeur } if { $Clef=="Locus_Name" || $Clef=="ORF_Name" || $Clef=="SGDID" } { set YeastGlossary($Valeur,Locus_Name) $Y lappend YeastGlossary(ListOf,$Clef) $Valeur } lappend YeastGlossary($Y,All) "[string range "$Clef.............." 0 12]: $Valeur" continue } set Reste [string trim $Ligne "\t "] regsub -all {[ \t]+} $Reste " " Reste if {$Reste!=""} { lappend YeastGlossary($Y,All) "[string repeat " " 13] $Reste" } } foreach Y $YeastGlossary(ListOf,Locus_Name) { set YeastGlossary($Y,Txt) [join $YeastGlossary($Y,All) " "] regsub -all { +} $YeastGlossary($Y,Txt) " " YeastGlossary($Y,Txt) regsub -all {\.\.+} $YeastGlossary($Y,Txt) "" YeastGlossary($Y,Txt) set YeastGlossary($Y,All) [join $YeastGlossary($Y,All) "\n"] } return [YeastGlossary $Qui $Quoi] } proc YesScNoEh {{Un ""}} { if {$Un==""} { set Un "1"} set LesSc {} foreach Nom [ListeDesPABs] { set Sc [ExtraitInfo $Nom "Reciproc${Un}_blastpSc:"] set Eh [ExtraitInfo $Nom "Reciproc1_blastpEhistolica:"] if { [regexp "^No" $Sc]} { continue } if { ! [regexp "^No" $Eh]} { continue } set Entete [EnteteDuFichierTFA "[RepertoireDuGenome]/prottfaSc/$Sc"] set Info [YEAHshowYeast $Entete "Get"] set InfoDe($Sc) $Info lappend HameconDe($Sc) $Nom lappend LesSc $Sc } set LesSc [lsort -unique $LesSc] set LaSortie {} foreach Sc $LesSc { lappend LaSortie "$Sc\n$InfoDe($Sc)\n[join $HameconDe($Sc) "\n"]" } set Sortie [join $LaSortie "\n\n"] AfficheVariable $Sortie "" "AllWithScWithoutEh" } proc YesScNoPf {{Un ""}} { if {$Un==""} { set Un "1"} set LesSc {} foreach Nom [ListeDesPABs] { set Sc [ExtraitInfo $Nom "Reciproc${Un}_blastpSc:"] set Pf [ExtraitInfo $Nom "Reciproc_blastpPfalciparum:"] if { [regexp "^No" $Sc]} { continue } if { ! [regexp "^No" $Pf]} { continue } set Entete [EnteteDuFichierTFA "[RepertoireDuGenome]/prottfaSc/$Sc"] set Info [YEAHshowYeast $Entete "Get"] set InfoDe($Sc) $Info lappend HameconDe($Sc) $Nom lappend LesSc $Sc } set LesSc [lsort -unique $LesSc] set LaSortie {} foreach Sc $LesSc { lappend LaSortie "$Sc\n$InfoDe($Sc)\n[join $HameconDe($Sc) "\n"]" } set Sortie [join $LaSortie "\n\n"] AfficheVariable $Sortie "" "AllWithScWithoutPf" } proc YesScNoTb {{Un ""}} { if {$Un==""} { set Un "1"} set LesSc {} foreach Nom [ListeDesPABs] { set Sc [ExtraitInfo $Nom "Reciproc${Un}_blastpSc:"] if {$Sc==""} { continue } set Tb [ExtraitInfo $Nom "Reciproc_blastpTbrucei:"] if { [regexp "^No" $Sc]} { continue } if { ! [regexp "^No" $Tb]} { continue } set FichierProtSc "[RepertoireDuGenome]/prottfaSc/$Sc" set Entete [EnteteDuFichierTFA $FichierProtSc] set Info [YEAHshowYeast $Entete "Get"] set InfoDe($Sc) $Info lappend HameconDe($Sc) $Nom lappend LesSc $Sc } set LesSc [lsort -unique $LesSc] set LaSortie {} foreach Sc $LesSc { lappend LaSortie "$Sc\n$InfoDe($Sc)\n[join $HameconDe($Sc) "\n"]" } set Sortie [join $LaSortie "\n\n"] AfficheVariable $Sortie "" "AllWithScWithoutTb" } proc ZScore {NbSeqDansCeGroupeAvecCeCritereInteressant NbSeqDansCeGroupe NbIndividuAyantUnCritereInteressant NbIndividuDansPop} { #Genome Biology, 6 janvier 2003 4R7, MAPPFINDER, Doniger,Salomonis... set r $NbSeqDansCeGroupeAvecCeCritereInteressant set n $NbSeqDansCeGroupe set R $NbIndividuAyantUnCritereInteressant set N $NbIndividuDansPop set RsurN [expr $R * 1.0 / $N] set Numerateur [expr ($r - $n * $RsurN)] set a [expr $n * $RsurN] set b [expr 1 - $RsurN] set c [expr 1 - ($n - 1) * 1.0 /($N - 1)] set Denominateur [expr sqrt( $a * $b * $c)] if {$Denominateur == 0} {return} return [expr $Numerateur / $Denominateur] } proc ZScoreDesClustersFusionnesParBestOntologyDesClusters {FichierGO {ZScoreMin 1.5}} { set LesClusters [lsort -unique [InterrogeGeneOntology $FichierGO LesGroupes]] foreach Cluster $LesClusters { set Tab($Cluster,LesGO) {} foreach GO [InterrogeGeneOntology $FichierGO Groupe $Cluster LesGO] { lappend Tab($Cluster,LesGO) $GO foreach Ancetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { lappend Tab($Cluster,LesGO) $Ancetre } } foreach GO [lsort -unique [set Tab($Cluster,LesGO)]] { set Type [Onto $GO Type] if {![info exists Tab($Type,NbGO) ]} {set Tab($Type,NbGO) 0} incr Tab($Type,NbGO) if {![info exists Tab($Type,$Cluster,NbGO)]} {set Tab($Type,$Cluster,NbGO) 0} incr Tab($Type,$Cluster,NbGO) if {![info exists Tab($GO,n)]} {set Tab($GO,n) 0} incr Tab($GO,n) if {![info exists Tab($Cluster,$GO,n)]} {set Tab($Cluster,$GO,n) 0} incr Tab($Cluster,$GO,n) } } foreach Cluster1 $LesClusters { foreach GO [lsort -unique [set Tab($Cluster1,LesGO)]] { set Type [Onto $GO Type] set r1 [set Tab($Cluster1,$GO,n) ] set R1 [set Tab($Type,$Cluster1,NbGO)] set n [set Tab($GO,n) ] set N [set Tab($Type,NbGO) ] set ZScore1 [ZScore $r1 $R1 $n $N ] set Def [lindex [Onto $Type $GO LesDefinitions] 0] if {$ZScore1 < $ZScoreMin} {continue} foreach Cluster2 $LesClusters { if {$Cluster1 == $Cluster2} {continue} if {![info exists Tab($Cluster2,$GO,n)]} {continue} if {![info exists Tab($Type,$Cluster2,NbGO)]} {continue} set r2 [set Tab($Cluster2,$GO,n) ] set R2 [set Tab($Type,$Cluster2,NbGO)] set r [expr $r1 + $r2] set R [expr $R1 + $R2] set ZScore12 [ZScore $r $R $n $N] set DiffZScore [expr $ZScore12 - $ZScore1] if {$DiffZScore < 0} {continue} set Distance [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance] Espionne "$Cluster1\t$Cluster2\t$Distance\t$Type\t$GO\t$ZScore1\t$ZScore12\t$DiffZScore\t$Def\t$r1\t$r2\t$R1\t$R2\t$n\t$N" } } } return } proc ZScoreDesClustersFusionnesParBestOntologyProttfa {FichierGO {ZScoreMin 1.5}} { set LesClusters [O2C2O LesClusters] foreach Cluster $LesClusters { set Tab($Cluster,LesGO) {} foreach Nom [O2C2O Cluster $Cluster LesOrfs] { foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {[info exists TabTmp($Nom,$GO)]} {continue} set TabTmp($Nom,$GO) 1 lappend Tab($Cluster,LesGO) $GO foreach Ancetre [InterrogeGeneOntology $FichierGO GO $GO LesAncetres] { if {[info exists TabTmp($Nom,$Ancetre)]} {continue} set TabTmp($Nom,$Ancetre) 1 lappend Tab($Cluster,LesGO) $Ancetre } } } foreach GO [set Tab($Cluster,LesGO)] { set Type [Onto $GO Type] if {![info exists Tab($Type,NbGO) ]} {set Tab($Type,NbGO) 0} incr Tab($Type,NbGO) if {![info exists Tab($Type,$Cluster,NbGO)]} {set Tab($Type,$Cluster,NbGO) 0} incr Tab($Type,$Cluster,NbGO) if {![info exists Tab($GO,n)]} {set Tab($GO,n) 0} incr Tab($GO,n) if {![info exists Tab($Cluster,$GO,n)]} {set Tab($Cluster,$GO,n) 0} incr Tab($Cluster,$GO,n) } } foreach Cluster1 $LesClusters { foreach GO [lsort -unique [set Tab($Cluster1,LesGO)]] { set Type [Onto $GO Type] set r1 [set Tab($Cluster1,$GO,n) ] set R1 [set Tab($Type,$Cluster1,NbGO)] set n [set Tab($GO,n) ] set N [set Tab($Type,NbGO) ] set ZScore1 [ZScore $r1 $R1 $n $N ] set Def [lindex [Onto $Type $GO LesDefinitions] 0] if {$ZScore1 < $ZScoreMin} {continue} foreach Cluster2 $LesClusters { if {$Cluster1 == $Cluster2} {continue} if {![info exists Tab($Cluster2,$GO,n)]} {continue} if {![info exists Tab($Type,$Cluster2,NbGO)]} {continue} set r2 [set Tab($Cluster2,$GO,n) ] set R2 [set Tab($Type,$Cluster2,NbGO)] set r [expr $r1 + $r2] set R [expr $R1 + $R2] set ZScore12 [ZScore $r $R $n $N] set DiffZScore [expr $ZScore12 - $ZScore1] if {$DiffZScore < 0} {continue} set Distance [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance] Espionne "$Cluster1\t$Cluster2\t$Distance\t$Type\t$GO\t$ZScore1\t$ZScore12\t$DiffZScore\t$Def\t$r1\t$r2\t$R1\t$R2\t$n\t$N" } } } return } proc ZScoreDesClustersFusionnesParBestOntologyProttfaEtClusters {FichierBestGOProttfa FichierBestGOClusterXHDA {NiveauMin 3} {ZScoreMin 1.5}} { set FichierOut "[RepertoireDuGenome]/fiches/ZScoreDesClustersFusionnesParBestOntologyProttfaEtClusters" set LesInfos {} set LesClusters [O2C2O LesClusters] foreach Cluster $LesClusters { Espionne $Cluster foreach GO [InterrogeGeneOntology $FichierBestGOClusterXHDA Groupe $Cluster LesGO] { Espionne $GO set Type [Onto $GO Type] set EstCeOk 1 foreach Niveau [Onto $Type $GO LesNiveaux] { if {$Niveau < $NiveauMin} {set EstCeOk 0; break} } if {!$EstCeOk} {continue} set TabTmp($GO) 1 foreach Ancetre [InterrogeGeneOntology $FichierBestGOClusterXHDA GO $GO LesAncetres] { set Type [Onto $Ancetre Type] foreach Niveau [Onto $Type $Ancetre LesNiveaux] { if {$Niveau < $NiveauMin} {set EstCeOk 0; break} } if {!$EstCeOk} {continue} set TabTmp($Ancetre) 1 } } set Tab($Cluster,LesGO) {} foreach Nom [O2C2O Cluster $Cluster LesOrfs] { foreach GO [InterrogeGeneOntology $FichierBestGOProttfa $Nom LesGO] { if {[info exists TabTmp($Nom,$GO)]} {continue} set TabTmp($Nom,$GO) 1 if {[info exists TabTmp($GO)]} {lappend Tab($Cluster,LesGO) $GO} foreach Ancetre [InterrogeGeneOntology $FichierBestGOProttfa GO $GO LesAncetres] { if {[info exists TabTmp($Nom,$Ancetre)]} {continue} set TabTmp($Nom,$Ancetre) 1 if {[info exists TabTmp($Ancetre)]} {lappend Tab($Cluster,LesGO) $Ancetre} } } } foreach GO [set Tab($Cluster,LesGO)] { set Type [Onto $GO Type] if {![info exists Tab($Type,NbGO) ]} {set Tab($Type,NbGO) 0} incr Tab($Type,NbGO) if {![info exists Tab($Type,$Cluster,NbGO)]} {set Tab($Type,$Cluster,NbGO) 0} incr Tab($Type,$Cluster,NbGO) if {![info exists Tab($GO,n)]} {set Tab($GO,n) 0} incr Tab($GO,n) if {![info exists Tab($Cluster,$GO,n)]} {set Tab($Cluster,$GO,n) 0} incr Tab($Cluster,$GO,n) } } foreach Cluster1 $LesClusters { foreach GO [lsort -unique [set Tab($Cluster1,LesGO)]] { set Type [Onto $GO Type] set r1 [set Tab($Cluster1,$GO,n) ] set R1 [set Tab($Type,$Cluster1,NbGO)] set n [set Tab($GO,n) ] set N [set Tab($Type,NbGO) ] set ZScore1 [ZScore $r1 $R1 $n $N ] set Def [lindex [Onto $Type $GO LesDefinitions] 0] if {$ZScore1 < $ZScoreMin} {continue} foreach Cluster2 $LesClusters { if {$Cluster1 == $Cluster2} {continue} if {![info exists Tab($Cluster2,$GO,n)]} {continue} if {![info exists Tab($Type,$Cluster2,NbGO)]} {continue} set r2 [set Tab($Cluster2,$GO,n) ] set R2 [set Tab($Type,$Cluster2,NbGO)] set r [expr $r1 + $r2] set R [expr $R1 + $R2] set ZScore12 [ZScore $r $R $n $N] set DiffZScore [expr $ZScore12 - $ZScore1] if {$DiffZScore < 0} {continue} set Distance [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 Distance] set NbCommonOp [O2C2O Cluster1 $Cluster1 Cluster2 $Cluster2 NbOperonsCommuns] Espionne "$Cluster1\t$Cluster2\t$Distance\t$NbCommonOp\t$Type\t$GO\t$ZScore1\t$ZScore12\t$DiffZScore\t$Def\t$r1\t$r2\t$R1\t$R2\t$n\t$N" lappend LesInfos "$Cluster1\t$Cluster2\t$Distance\t$NbCommonOp\t$Type\t$GO\t$ZScore1\t$ZScore12\t$DiffZScore\t$Def" } } } Sauve [join $LesInfos "\n"] dans $FichierOut return } proc ZeTestII {} { foreach f [ListeDesPABs] { AuChoixDuBlast $f } exit } proc ZincrSite {{Value ""}} { #rR Attention existe dans zincr_tools.tcl et gscope_pipala.tcl global ZincrSite if {$Value!=""} { set ZincrSite $Value } if { ! [info exists ZincrSite]} { set ZincrSite "/wali" } return $ZincrSite } proc Zippe {ListeA ListeB} { set LongPetite [Mini [llength $ListeA] [llength $ListeB]] foreach A [lrange $ListeA 0 $LongPetite] B [lrange $ListeB 0 $LongPetite] { lappend ListeAB $A $B } incr LongPetite if {[llength $ListeA] > $LongPetite} { return [concat $ListeAB [lrange $ListeA $LongPetite end]] } if {[llength $ListeB] > $LongPetite} { return [concat $ListeAB [lrange $ListeB $LongPetite end]] } return $ListeAB } proc ZoneADN {Debut Fin FicTexCon {Orient ""}} { Wup "Chooses between Texte Fichier and Contig. Use the correct if you know it" if {[regexp {[> \n\t]} $FicTexCon]} { return [ZoneADNDuTexteTFA $Debut $Fin $FicTexCon $Orient] } if {[regexp "/" $FicTexCon]} { return [ZoneADNDuFichierTFA $Debut $Fin $FicTexCon $Orient] } if {[file exists $FicTexCon]} { return [ZoneADNDuFichierTFA $Debut $Fin $FicTexCon $Orient] } if {[regexp -nocase {[A-Z0-9]+(\:|_)[A-Z0-9]+} $FicTexCon]} { set EssaiContig [ZoneADNDuContig $Debut $Fin $FicTexCon $Orient] if {$EssaiContig!=""} { return $EssaiContig } } return [ZoneADNDuTexteTFA $Debut $Fin $FicTexCon $Orient] } proc ZoneADNDuContig {Debut Fin ChroContig {Orient ""}} { set FichierTFA [ContigEnStock $ChroContig "FileNamePlease"] if {$FichierTFA==""} { return "" } return [ZoneADNDuFichierTFA $Debut $Fin $FichierTFA $Orient] } proc ZoneADNDuFichierTFA {Debut Fin FichierTFA {Orient ""}} { if {$FichierTFA=="" || ! [file exists $FichierTFA]} { return "" } return [ZoneADNDuTexteTFA $Debut $Fin [ContenuDuFichier $FichierTFA] $Orient] } proc ZoneADNDuTexteTFA {Debut Fin Texte {Orient ""}} { Wup "if Orient (F or R, + or -) exists it decides for the orientation, otherwize I test Fin < Debut" Wup "Returns a contigous DNA zone from Debut to Fin (reverse and complement if Orient - )" Wup "Count start with 1 not 0" set Seq "x[QueLaSequenceDuTexteTFA $Texte]" if {$Fin=="end"} { set Fin [string length $Seq] } set D [Maxi 1 [Mini $Debut $Fin]] set F [Maxi $Debut $Fin] set Zone [string range $Seq $D $F] if {[regexp -nocase {F|\+} $Orient]} { set Positif 1 } if {[regexp -nocase {R|\-} $Orient]} { set Positif 0 } if { $Orient=="" && $Debut<=$Fin } { set Positif 1 } if { $Orient=="" && $Fin <$Debut } { set Positif 0 } if {$Positif} { return $Zone } else { return [NucToReverseAndComplementNuc $Zone] } } proc ZonesClustering {} { set pkm [MacCourant] return [$::db eval {select zone from clustering where pk_mac=$pkm}] } proc ZonesDeSequence {s} { global ZoneClusterisation if {! [info exists ZoneClusterisation]} {return $s} set r "" foreach z $ZoneClusterisation { lassign $z x1 x2 append r [string range $s $x1 $x2] } if {$r eq ""} {set r $s} return $r } proc ZoomFacteur {K Quoi {Valeur ""}} { Wup "Permet de stocker les facteurs de zoom" global ZoomFacteur #Espionne "$Quoi $Valeur" if {$Quoi == ""} {return ""} if {$Valeur == ""} { if {[info exists ZoomFacteur($K,$Quoi)]} { return "[set ZoomFacteur($K,$Quoi)]" } else { return "1.0" } } else { if {! [info exists ZoomFacteur($K,$Quoi)]} { set ZoomFacteur($K,$Quoi) $Valeur } else { set ZoomFacteur($K,$Quoi) [expr [set ZoomFacteur($K,$Quoi)] * $Valeur] } } return "" } proc ZoomMode {AId quoi} { global Abr set Abr($AId,Mode) "zoom" ChangeCurseur $AId $quoi set PAD [set Abr($AId,PAD)] bind $PAD [list AppliqueZoom $AId $quoi %x %y] bind $PAD {} return } proc _CombleSSParCoil {{lss ""} molid chn} { variable SecStr variable NmrRes set LesRes [set NmrRes($chn)] set 1ResPDB [lindex $LesRes 0] set DResPDB [lindex $LesRes end] set df {} foreach s $lss { lassign $s Elt a z e Nm1 r Nm2 t q lappend df [list $Nm1 $Nm2] } if {$df == {}} { lappend df "Coil xxx xxx $chn $1ResPDB xxx $DResPDB xxx" return $df } set 1ResSS [lindex [lindex $df 0] 0] if {$1ResPDB - $1ResSS < 0} { lappend lss "Coil xxx xxx $chn $1ResPDB xxx [expr {$1ResSS-1}]" } set debc [_NextResDuPdb $name [lindex [lindex $df 0] 1] $chn $molid] foreach cpl [lrange $df 1 end] { set finc [_PreviousResDuPdb $name [lindex $cpl 0] $chn $molid] if {$finc-$debc >= 0} { lappend lss "Coil xxx xxx $chn $debc xxx $finc xxx" } set debc [_NextResDuPdb $name [lindex $cpl 1] $chn $molid] } if {$debc ne ""} { if {$DResPDB - $debc >= 0} { lappend lss "Coil xxx xxx $chn $debc xxx $DResPDB xxx" } } return [lsort -integer -index 4 $lss] } proc _NextResDuPdb {name res chn mol} { variable NmrRes set ires [lsearch [set NmrRes($chn)] $res] set deb [lindex [set NmrRes($chn)] [expr {$ires+1}]] return $deb } proc _PreviousResDuPdb {name res chn mol} { variable NmrRes set ires [lsearch [set NmrRes($chn)] $res] set fin [lindex [set NmrRes($chn)] [expr {$ires-1}]] return $fin } proc _____Access2GO {Access} { set TousLesGO {} foreach Requete [Access2Requetes $Access] { if {[regexp -nocase "^go:" $Requete]} { lappend TousLesGO [string toupper $Requete] continue } foreach GO [Interroge2GO $Requete] { lappend TousLesGO [string toupper $GO] } } return [lsort -unique [EnterrerLesAncetresOntologiques $TousLesGO]] } proc _____Access2Requetes {Access} { set Page [PageInfo $Access protein "DES DR Key"] #set Page [join [LaSequenceDesBanques $Access $Access AccessOK "OnVeutNature"] "\n"] return [PageInfo2Requetes $Page] } proc _____EstCeQueGO1EstUnEnfantDeGO2 {GO1 GO2} { set Type [Onto $GO1 Type] foreach Ancetre [TousLesAncetresOntologiques $Type $GO2] {if {$Ancetre == $GO2} {return 1}} return 0 } proc _____EstCeQueGO1EstUnParentDeGO2 {GO1 GO2} { set Type [Onto $GO2 Type] foreach Ancetre [TousLesAncetresOntologiques $Type $GO2] {if {$Ancetre == $GO1} {return 1}} return 0 } proc _____PageInfo2GO {PageInfo} { set TousLesGO {} foreach Requete [PageInfo2Requetes $PageInfo] { if {[regexp -nocase "^go:" $Requete]} { lappend TousLesGO [string toupper $Requete] continue } foreach GO [Interroge2GO $Requete] {lappend TousLesGO [string toupper $GO]} } set LesGO [EnterrerLesAncetresOntologiques $TousLesGO] return [ElimineLesRedondancesDansUneListe $LesGO] } proc _____PageInfo2Requetes {Page} { if {$Page == ""} {return {}} set LesSomething {} foreach Ligne [split $Page "\n"] { set Ligne [string trim $Ligne] if {$Ligne == ""} {continue} if {[info exists Champs]} {unset Champs} scan $Ligne "%s" Champs if {![info exists Champs]} {continue} if {[string equal -nocase $Champs "DE"]} { while {[regexp -nocase {EC[ \:]([0-9\.\-]+)} $Ligne tmp EC]} { lappend LesSomething [string tolower "ec [string trim [CorrigeLEC $EC]]"] regsub -nocase $tmp $Ligne "" Ligne } continue } if {[string equal -nocase $Champs "DR"]} { set Debut [expr [string first ";" $Ligne] + 1] set Ligne [string range $Ligne $Debut end] set Fin [expr [string first ";" $Ligne] - 1] lappend LesSomething [string tolower [string trim [string range $Ligne 0 $Fin]]] continue } if {[string equal -nocase $Champs "KW"]} { regsub "^$Champs" $Ligne "" Ligne set Ligne [string trim $Ligne] regsub -all "\.$" $Ligne "" Ligne set LaLigne [split [string trim $Ligne] ";"] foreach Element $LaLigne { set Element [string trim $Element] if {$Element == ""} {continue} lappend LesSomething [string tolower $Element] } continue } } return [ElimineLesRedondancesDansUneListe $LesSomething] } proc __tcl3dAddMenuCmd {menu label acc cmd} { $menu add command -label $label -accelerator $acc -command $cmd } proc __tcl3dCaptureInit {} { global __tcl3dCaptureInt set retVal [catch {package require Img} __tcl3dCaptureInt(Img,version)] set __tcl3dCaptureInt(Img,avail) [expr !$retVal] set retVal [catch {package require twapi} __tcl3dCaptureInt(twapi,version)] set __tcl3dCaptureInt(twapi,avail) [expr !$retVal] set retVal [catch {package require base64} __tcl3dCaptureInt(base64,version)] set __tcl3dCaptureInt(base64,avail) [expr !$retVal] } proc __tcl3dCaptureSubWindow {win img px py ign} { if { ![winfo ismapped $win] } { return } regexp {([0-9]*)x([0-9]*)\+([-]*[0-9]*)\+([-]*[0-9]*)} [winfo geometry $win] - w h x y if { $x < 0 || $y < 0 } { return } incr px $x incr py $y # Make an image from this widget set tmpImg [image create photo -format window -data $win] # Copy this image into place on the main image $img copy $tmpImg -to $px $py image delete $tmpImg foreach child [winfo children $win] { if { $ign ne "" && ! [string match -nocase $ign $child] } { __tcl3dCaptureSubWindow $child $img $px $py $ign } } } proc __tcl3dCgSourcePkgs {dir} { source [file join $dir tcl3dCgQuery.tcl] load [file join $dir tcl3dCg[info sharedlibextension]] tcl3dCg source [file join $dir tcl3dCgUtil.tcl] } proc __tcl3dConsoleB1Leave {w x y} { upvar #0 $w v set v(y) $y set v(x) $x __tcl3dConsoleMotor $w } proc __tcl3dConsoleB1Motion {w x y} { upvar #0 $w v set v(y) $y set v(x) $x __tcl3dConsoleSelectTo $w $x $y } proc __tcl3dConsoleBackspace {w} { upvar #0 $w v scan [$w index insert] %d.%d row col if {$col>$v(plength)} { $w delete {insert -1c} } } proc __tcl3dConsoleButton1 {w x y} { global tkPriv upvar #0 $w v set v(mouseMoved) 0 set v(pressX) $x set p [__tcl3dConsoleNearestBoundry $w $x $y] scan [$w index insert] %d.%d ix iy scan $p %d.%d px py if {$px==$ix} { $w mark set insert $p } $w mark set anchor $p focus $w } proc __tcl3dConsoleCanCut {w} { set r [catch { scan [$w index sel.first] %d.%d s1x s1y scan [$w index sel.last] %d.%d s2x s2y scan [$w index insert] %d.%d ix iy }] if {$r==1} {return 0} if {$s1x==$ix && $s2x==$ix} {return 1} return 2 } proc __tcl3dConsoleCancelMotor {w} { upvar #0 $w v catch {after cancel $v(timer)} catch {unset v(timer)} } proc __tcl3dConsoleClear {w} { $w delete 1.0 {insert linestart} } proc __tcl3dConsoleCopy {w} { if {![catch {set text [$w get sel.first sel.last]}]} { clipboard clear -displayof $w clipboard append -displayof $w $text } } proc __tcl3dConsoleCreateChild {w prompt editMenu} { upvar #0 $w.t v if {$editMenu!=""} { menu $editMenu -tearoff 0 __tcl3dAddMenuCmd $editMenu "Cut" "" "__tcl3dConsoleCut $w.t" __tcl3dAddMenuCmd $editMenu "Copy" "" "__tcl3dConsoleCopy $w.t" __tcl3dAddMenuCmd $editMenu "Paste" "" "__tcl3dConsolePaste $w.t" __tcl3dAddMenuCmd $editMenu "Clear" "" "__tcl3dConsoleClear $w.t" $editMenu add separator __tcl3dAddMenuCmd $editMenu "Source ..." "" "__tcl3dConsoleSourceFile $w.t" catch {$editMenu config -postcommand "__tcl3dConsoleEnableEditMenu $w"} } scrollbar $w.sb -orient vertical -command "$w.t yview" pack $w.sb -side right -fill y text $w.t -font fixed -yscrollcommand "$w.sb set" pack $w.t -side right -fill both -expand 1 bindtags $w.t Console set v(editmenu) $editMenu set v(text) $w.t set v(history) 0 set v(historycnt) 0 set v(current) -1 set v(prompt) $prompt set v(prior) {} set v(plength) [string length $v(prompt)] set v(x) 0 set v(y) 0 $w.t mark set insert end $w.t tag config ok -foreground blue $w.t tag config err -foreground red $w.t insert end $v(prompt) $w.t mark set out 1.0 catch {rename puts __tcl3dConsoleOldPuts$w} proc puts args [format { if {![winfo exists %s]} { rename puts {} rename __tcl3dConsoleOldPuts%s puts return [uplevel #0 puts $args] } switch -glob -- "[llength $args] $args" { {1 *} { set msg [lindex $args 0]\n set tag ok } {2 stdout *} { set msg [lindex $args 1]\n set tag ok } {2 stderr *} { set msg [lindex $args 1]\n set tag err } {2 -nonewline *} { set msg [lindex $args 1] set tag ok } {3 -nonewline stdout *} { set msg [lindex $args 2] set tag ok } {3 -nonewline stderr *} { set msg [lindex $args 2] set tag err } default { uplevel #0 __tcl3dConsoleOldPuts%s $args return } } __tcl3dConsolePuts %s $msg $tag } $w $w $w $w.t] after idle "focus $w.t" } proc __tcl3dConsoleCut {w} { if {[__tcl3dConsoleCanCut $w]==1} { __tcl3dConsoleCopy $w $w delete sel.first sel.last } } proc __tcl3dConsoleDelete {w} { $w delete insert } proc __tcl3dConsoleEnableEditMenu {w} { upvar #0 $w.t v set m $v(editmenu) if {$m=="" || ![winfo exists $m]} return switch [__tcl3dConsoleCanCut $w.t] { 0 { $m entryconf Copy -state disabled $m entryconf Cut -state disabled } 1 { $m entryconf Copy -state normal $m entryconf Cut -state normal } 2 { $m entryconf Copy -state normal $m entryconf Cut -state disabled } } } proc __tcl3dConsoleEnd {w} { $w mark set insert {insert lineend} } proc __tcl3dConsoleEnter {w} { upvar #0 $w v scan [$w index insert] %d.%d row col set start $row.$v(plength) set line [$w get $start "$start lineend"] if {$v(historycnt)>0} { set last [lindex $v(history) [expr $v(historycnt)-1]] if {[string compare $last $line]} { lappend v(history) $line incr v(historycnt) } } else { set v(history) [list $line] set v(historycnt) 1 } set v(current) $v(historycnt) $w insert end \n $w mark set out end if {$v(prior)==""} { set cmd $line } else { set cmd $v(prior)\n$line } if {[info complete $cmd]} { set rc [catch {uplevel #0 $cmd} res] if {![winfo exists $w]} return if {$rc} { $w insert end $res\n err } elseif {[string length $res]>0} { $w insert end $res\n ok } set v(prior) {} $w insert end $v(prompt) } else { set v(prior) $cmd regsub -all {[^ ]} $v(prompt) . x $w insert end $x } $w mark set insert end $w mark set out {insert linestart} $w yview insert } proc __tcl3dConsoleEraseEOL {w} { upvar #0 $w v scan [$w index insert] %d.%d row col if {$col>=$v(plength)} { $w delete insert {insert lineend} } } proc __tcl3dConsoleHome {w} { upvar #0 $w v scan [$w index insert] %d.%d row col $w mark set insert $row.$v(plength) } proc __tcl3dConsoleInsert {w a} { $w insert insert $a $w yview insert } proc __tcl3dConsoleLeft {w} { upvar #0 $w v scan [$w index insert] %d.%d row col if {$col>$v(plength)} { $w mark set insert "insert -1c" } } proc __tcl3dConsoleMotor {w} { upvar #0 $w v if {![winfo exists $w]} return if {$v(y)>=[winfo height $w]} { $w yview scroll 1 units } elseif {$v(y)<0} { $w yview scroll -1 units } else { return } __tcl3dConsoleSelectTo $w $v(x) $v(y) set v(timer) [after 50 __tcl3dConsoleMotor $w] } proc __tcl3dConsoleNearestBoundry {w x y} { set p [$w index @$x,$y] set bb [$w bbox $p] if {![string compare $bb ""]} {return $p} if {($x-[lindex $bb 0])<([lindex $bb 2]/2)} {return $p} $w index "$p + 1 char" } proc __tcl3dConsoleNext {w} { upvar #0 $w v if {$v(current)>=$v(historycnt)} return incr v(current) 1 set line [lindex $v(history) $v(current)] __tcl3dConsoleSetLine $w $line } proc __tcl3dConsolePaste {w} { if {[__tcl3dConsoleCanCut $w]==1} { $w delete sel.first sel.last } if {[catch {selection get -displayof $w -selection CLIPBOARD} topaste]} { return } set prior 0 foreach line [split $topaste \n] { if {$prior} { __tcl3dConsoleEnter $w update } set prior 1 $w insert insert $line } } proc __tcl3dConsolePrior {w} { upvar #0 $w v if {$v(current)<=0} return incr v(current) -1 set line [lindex $v(history) $v(current)] __tcl3dConsoleSetLine $w $line } proc __tcl3dConsolePuts {w t tag} { set nc [string length $t] set endc [string index $t [expr $nc-1]] if {$endc=="\n"} { if {[$w index out]<[$w index {insert linestart}]} { $w insert out [string range $t 0 [expr $nc-2]] $tag $w mark set out {out linestart +1 lines} } else { $w insert out $t $tag } } else { if {[$w index out]<[$w index {insert linestart}]} { $w insert out $t $tag } else { $w insert out $t\n $tag $w mark set out {out -1 char} } } $w yview insert } proc __tcl3dConsoleRight {w} { $w mark set insert "insert +1c" } proc __tcl3dConsoleSaveFile {w} { set types { {{Text Files} {.txt}} {{All Files} *} } set f [tk_getSaveFile -filetypes $types -title "Write Screen To..."] if {$f!=""} { if {[catch {open $f w} fd]} { tk_messageBox -type ok -icon error -message $fd } else { puts $fd [string trimright [$w get 1.0 end] \n] close $fd } } } proc __tcl3dConsoleSelectTo {w x y} { upvar #0 $w v set cur [__tcl3dConsoleNearestBoundry $w $x $y] if {[catch {$w index anchor}]} { $w mark set anchor $cur } set anchor [$w index anchor] if {[$w compare $cur != $anchor] || (abs($v(pressX) - $x) >= 3)} { if {$v(mouseMoved)==0} { $w tag remove sel 0.0 end } set v(mouseMoved) 1 } if {[$w compare $cur < anchor]} { set first $cur set last anchor } else { set first anchor set last $cur } if {$v(mouseMoved)} { $w tag remove sel 0.0 $first $w tag add sel $first $last $w tag remove sel $last end update idletasks } } proc __tcl3dConsoleSetLine {w line} { upvar #0 $w v scan [$w index insert] %d.%d row col set start $row.$v(plength) $w delete $start end $w insert end $line $w mark set insert end $w yview insert } proc __tcl3dConsoleSourceFile {w} { set types { {{TCL Scripts} {.tcl}} {{All Files} *} } set f [tk_getOpenFile -filetypes $types -title "TCL Script To Source..."] if {$f!=""} { uplevel #0 source $f } } proc __tcl3dFTGLSourcePkgs {dir} { source [file join $dir tcl3dFTGLQuery.tcl] load [file join $dir tcl3dFTGL[info sharedlibextension]] tcl3dFTGL source [file join $dir tcl3dFTGLUtil.tcl] } proc __tcl3dGaugesSourcePkgs {dir} { source [file join $dir gaugeImgs.tcl] source [file join $dir gaugeBase64.tcl] source [file join $dir airspeed.tcl] source [file join $dir altimeter.tcl] source [file join $dir compass.tcl] source [file join $dir tiltmeter.tcl] } proc __tcl3dGl2psSourcePkgs {dir} { source [file join $dir tcl3dGl2psQuery.tcl] load [file join $dir tcl3dGl2ps[info sharedlibextension]] tcl3dGl2ps source [file join $dir tcl3dGl2psUtil.tcl] } proc __tcl3dLogoPoLogo200_text {} { return { R0lGODdhyACpAPcAAAAAAAEBAQUFBQ8PDyQkJERERGhoaIODg4iIiHZ2dlRU VDIyMhgYGAkJCQMDAwsLCxwcHDs7O2VlZYyMjJ+fn5aWlnV1dUpKSiYmJhAQ EEZGRm1tbYeHh0BAQCEhIQ4ODgwMDB8fH2tra5KSkqSkpJmZmUtLSwQEBCMj I5CQkKGhoZeXl3l5eVFRUS0tLRUVFQgICAICAiIiIkVFRXFxcaioqJubmx4e Hj09PWZmZo2NjaampqWlpYuLi2RkZDw8PCUlJUlJSampqZqamnR0dEhISDMz M1lZWaKioqurq01NTSkpKRISEgYGBnh4eJycnHBwcA0NDREREScnJ3Nzc6ys rF1dXTU1NRkZGUxMTKenp5WVlUJCQiAgIB0dHTo6OmJiYpSUlGxsbEFBQQcH BxQUFFJSUn19faCgoK2trXp6ek9PTyoqKnd3d29vb0NDQ1xcXDQ0NJiYmHJy cgoKChsbGzk5OT4+Pi8vL1ZWVoKCgq6urm5ubp2dnX9/f1NTUxMTE5OTk4qK il5eXj8/P05OTigoKImJiWlpaXx8fH5+fkdHR1BQUI6OjoGBgYWFhaqqqp6e nnt7eysrK4CAgCwsLI+Pjy4uLhoaGjg4OGNjY1dXVzY2Nl9fX2FhYTc3N6Oj ozExMTAwMFtbWxYWFoaGhlpaWmBgYJGRkVVVVYSEhBcXF1hYWGdnZ2pqaq+v r8bGxv///+Li4ra2tr6+vszMzMPDw8rKytbW1tDQ0Li4uLS0tM7OztjY2NPT 08HBwc3NzcXFxbq6usjIyLOzs7m5ub+/v729vbW1tbe3t7KysrCwsLGxsf// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// /////////////////////ywAAAAAyACpAAAI/wABCBxIsKDBgwgHBhAwgEAB AwcQJFCwgEEDBwkTJkyYMGHChAkTOngAIYKECRQqWLiAIYOAAAkTJkyYMGHC hAkBBBAwgICGDRMqcJDQwcMHAQESJkyYMGHChAkTInQAIkQHESNIlEhgAkMG AQESJkyYMGHChAkTAghw4gOKAhtSqFjBooWLFzBiJEyYMGHChAkTJjwY4MQH GTNorKhhI8EFDAMEBEiYMGHChAkTJkwIIMAJEDdw5NCxg0cPHz9ugDgRIGHC hAkTJkyYMKHBACcGAAmSwIaQIUSKEPhwIkDChAkTJkyYMGFCgTEaMDBy5ACS JDYSKFnCpEmAhAkTJv9MmDBhwoQGAwjIgMGEkydCVkCZISPKiQAJEyZMmDBh woQJCQRQgCZSpgShUqIKDw5WrmBp4AAgAIEDCRY0eBBhQoULGSYMICDDlCxO nmjZsoFLFxAnAjRs2LBhw4YFAzh44OULmAk1koQRw8VDlBMBGjZs2LBhQ4QB BGSYksWJjR1hxIzpAsJBw4YNGzZseDAGmTIuzJxBk4aCmjVsmDQJ0LBhw4YN GyIMICADBhNtbGip4OaNhygnAjRs2LBhw4YGAwj4gKKAmxVpdnCAE4dBgxgN GzZs2LAhwgAnBgAJYmFIDTlzNKD4cCJAw4YNGzZseNABnTp2wOgQkmSEgTv/ Nx44aNiwYcOGDREGOPEBhYY5cmoMsRAEyIATARo2bNiwYcODMci8wJNHD4k9 NogUATJAQICGDRs2bNjwYIATUTy84bNFi402JjAMEBCgYcOGDRs2PAgwgIAM GEy06bMHiZ8/LgCRCQAQgMCBBAsaPIgwocKFDBE6ABGig4hAO2w4yTIlg4AA DRs2bNiw4cEAJ0CE6CAiTJUaggZdYdAgRsOGDRs2bIjQAYgQhEQE0tJHTSFD UgQEaNiwYcOGDRHGaIDlyqBDWpIEQnTnxgMHDRs2bNiwIUIHIEJ0ELNFCIVE a5ZIERCgYcOGDRs2RBiDDCAXfxSpSFJiziICH04E/2jYsGHDhg0PngDR5Y2b FUlUnGHERoqAAA0bNmzYsCHCAAIGEFg0R46QPmrWLJHSJEDDhg0bNmxoMMCJ KB4K0ChRBU2iNUukCAjQsGHDhg0bJnTwwMuPHI14oHGUB88LMjEaNmzYsGFD gwFORJGhYc6QKhTUKJmSQUCAhg0bNmzYMGGMBgziwAH4SIUKDlauMGgQAyAA gQMJFjR4EGFChQsZGgxw4gMKDVSGQOrTxgSGAQICNGzYsGHDhgljkCnjQoGi SCQa5fgB4YGDhg0bNmzY0GCAEx9QLKJSQogNC0GADDgRoGHDhg0bNkwYQICU JYXUPNGyhQ8XD1FOBGjYsP9hw4YNCwY48YHAIiJDapSgsojAhxMBGjZs2LBh w4QBBAwAciHBE0g2LAQBMuBEgIYNGzZs2LBggBMfCBQhMkRICSqLCHw4EaBh w4YNGzZMGODEBxQa5gypQkFSIUMZBARo2LBhw4YNCwY48YHAIiJDhAwhUoTA hxMBGjZs2LBhQ4UnQHThwmdFEiR+zExi0iRAw4YNGzZsWDDAiQ8yZtCQI8RG mwsYBggI0LBhw4YNGyp0APCBlzuIAglBQklBJUBNAgAEIHAgwYIGDyJMqHAh w4IBToDoMmZDGC191KxZIqVJgIYNGzZs2FChAzp1IkiwpAWJnjyXypAJ0LBh w4b/DRsadPDAy48clnagcZQHzwsyMRo2bNiwYUOFMRpgyqRJxw4kBzbheUEm RsOGDRs2bGgwRgMsnDod4sFDkKdMmOg4aNiwYcOGDRXGaIDlk6cJO0A9OhLq BZkYDRs2bNiwocEYZF6I2qQHCaQtG954iHIiQMOGDRs2bJgwRgMsnzxN0MKD w6gFpGDEaNiwYcOGDQ0GaCLFkBIWkapEkrSGDZMmARo2bNiwYcOEMRpg+QRG Rw0eCOAsIAUjRsOGDRs2bGgwwIkoHt7wqZCER6lRRhg0iNGwYcOGDRsmjNEA UyZNOgDW4FHKVChSZGIABCBwIMGCBg8iTKhwIcODDuhg/8p0SpAWIagM3LkB wkGAhg0bNmzYEKEDOnW+SLCkBcmBTXhekInRsGHDhg0bHoxBpoyLP4rQQCpB JAiGDAICNGzYsGHDhggdPLhxB9EILWj8/KkEqEmAhg0bNmzY8GAAAQMIaIBS QQgaSqnwvIARo2HDhg0bNjwY4EQUGQWgrBDSR00hQ1IEBGjYsGHDhg0ROngA 4YumCTt2TND0BcIDBw0bNmzYsOHBAAIyGMripA+kIUSKEBhwIkDDhg0bNmyI MAaMF3jyOFIBaQUNDQQGCAjQsGHDhg0bGoxBpsylVI6QQNqygUuXKCcCNGzY sGHDhggDCMiA4YKFIUnQ+FGA5/8FjBgNGzZs2LChwRgNADK4MugQjxqNfHyB QMcBQAACBxIsaPAgwoQKFzJMGOAEiBB3DKSooWWCjx83QJwI0LBhw4YNGxZ0 8MDLjxyWtCBRdWQBKRgxGjZs2LBhQ4UxGqxawEqPCkglEiiZVAZGjIYNGzZs 2JBgAAEDCGiAUmGHDRaF2DBpEqBhw4YNGzZUGKCJlClB5lQQQgKBpx8hopwI 0LBhw4YNGw6MQQZQpRaSnuwIw+eNjA8nAjRs2LBhw4YKAzh4AMFOJw6gIJVo w+gSqQYOGjZs2LBhw4EO6GDhNIgDKB4TNH2pQ8dBw4YNGzZsyDAGGUBsshBZ AWnHhFb/HWQMEBCgYcOGDRs2BBDgxAcPXMQEqoHkwJFQpGDEaNiwYcOGDRkG OAHCi51Bj5Ak6ZMoVSgGdBw0bNiwYUMNAQBQDBhlKjFS0wfSExaFlkhpEgAg AIEDCRY0eBBhQoULGTaMQQaQoSBQAtXYYcnVGwIZmgRo2LBhw4YMAwiIciOC JwQkaowQwcVDlBMBGjZs2LBhw4YBTjzAdIWVn0iQIvlhFQcLHQcBGjZs2LCh wgAn6DC4tMZCBS1oVI26goWOg4YNGzZs2LChwBhNMhDggqjRDi0jNmjAIKVJ jIYNGzZsqNABjDKGZhgQhGRHGBoXDDFpEqNhw4YNGzZsONBB/4NVohRIegIJ jR5TVzA9cBCgYcOGDRsijNEkgwwcnQ5EEkJBD5xMEECcCNCwYcOGDRs2HBhA wAAZHQw00iIkkJtFU5iQidGwYcOGDQ8GOAECwpVNkkpA2pFiwyJDTMjEaNiw YcOGDRsWdNBgFZ4/kp5AUgHwgJVMXqIICAAQgMCBBAsaPIgwocKFBR3AeDHJ BJQRNSCVUJPKCKYHJwIwZMiQIUOGDBkGEPDBQ4ccPUjU2EKk0KVVdBwEYMiQ IUOGCQMIGODhDhgOKiBF0tPph4cBTWIwZMiQIUOGDBkKdNCA1KU1CVbUACWo 1RsMTMjEYMiQIUOGCR00YCDqDws5Wv9UHGpVYAogGA4YMmTIkCFDhgwHBhAQ JcSXTqrQQIrkyMqXEB8EBGDIkCFDhgcDCMiAgguiCUhAWXJjwsUqOicCMGTI kCFDhgwZEoxBBpChInxQ1YAkx4mZUFgenAjAkCFDhgwNOmjAIFSeMzZ2lFCT Kk4dEAICMGTIkCFDhgwZFgxw4gEmI3kS2UiixZKYIkvKwHDAkCFDhgwLBgAo YIAMLq4s7SAxIUcHGRmaxAAIQOBAggUNHkSYUOFChg0ZBmgyQMYdMByQVFHx yNMdFFLIxHDo0KFDhDEakMKjIFEfSH0S/cGzqoEDhw4dOnTo0OFBBzDKsAmy wRIPIUMSsfr/dOODgAAOHTp0aDCAgA8eOrRqpKUGKhFcZAwQEMChQ4cOHTp0 eDDAiQeYQplJsEWLlkBUGInC8uBEAIcOHTos6KDBKlF/JPVJosIRKyMMGjhw 6NChQ4cOHSaM0eRDCDumFD2BxEOHiCJsXjRwEMChQ4cOBwZokgEFF0SWakAK 40YDkAxNAjh06NChQ4cOFcYgw4TAGB8IkFRRUQoMIRRSyMRw6NChQ4EBHNDB YmSTHwppQKkadQUTHQcOHTp06NChw4UBHDQgNemCG1Q1qgB8ouhIphsfBAQA CEDgQIIFDR5EmFChwBhNpGDQsCEQpCRboBSZIqVJjIULFy5cuHDh/8KFCwOc eIDJiAIWJZJAqmCBkSgsD04EWLhw4cKFARw8wHRl1AEke5AcGMWpzgMHARYu XLhw4cKFCxcuBBCjyYAuEazooVBlRyMRi5aUgeFg4cKFCxfGaCJlShEoW6ok CcRHAwYpTWIsXLhw4cKFCxcuXDgwBgxAGN60EkQijYpSnu7IyNAkxsKFCxcm DODgQR1OcFSB2oOG0iYjWOg4CLBw4cKFCxcuXLhw4cAADuiscpEFyogaSWxI yhOnDogTARYuXLgQYYAmUqYUoVGhihBUrt4QyNAkwMKFCxcuXLhw4cKFBQOc AFEnjgIWJSBpQeUmCJsyMBwABCBwIMGCBv8PIkx40AEdLFdGqQKVhsKZVKFW NXCgUKFChQoVKlSoUKHCgzGaDPAQYZCeSELQPPJ0R0aGJjEUKlSoUGEAAQMI zOATJomQFIjGyBggIIBChQoVKlSoUKFChQoRxoABCMObVodU7JCjJpWROg9O BFCoUKHChDEarAq1iZKKNBQUKRC1qoEDhQoVKlSoUKFChQoVJgxwgs4qF1mg pAAFKgWfC2xewHCgUKFChQgDnPjgYQwiVJAgjRDBRcYAAQEUKlSoUKFChQoV KlSoMIAAEBDipFIjRwsaDprueBggIIBChQoVHoxBpowLM4ko7AF14IgRBg0c KFSoUKFChQoVKlT/qFChwBhNMsi4owkBEkg2EqUyguWBgwAKFSqkUEEABXAA wksETRNqpJFDYxGGDE0CAAQgcCDBggYPIkyocCHDhg4fDnQA48WkLFQqQBIy gs8iQ4DIxIAIsWGAJlKmBCFSIs2OQ50y1XngACJEiBAhQoTIMMAJEF4ywTmA JA2oR50ihPggIABEiAxjNGCw4MgBJElstFHCBhCZGBAhQoQIESLEhjHIMJmi YQMqIVVKODETCsuDEwEgQlQY4ESULoQMWNrBo4ePHzdAnAgAESJEiBAhQmwY wAEdLAtSSXpSRYulDUXYvGjgIABEiAljkAE0qVCbEjuGsGjh4gWMGBAh/0KE CBEixIcBBAzwcAcMB1BpkHDwMQYIEzIxIEJEGMDBAwiZOpVCA0pHK0IePpwI ABEiRIgQIUKE6ABGGTZB3KCqUSUSJThfugxoEgAixIMBADbJgKEIlDA7+ijK E2pVgxgAAQgcSLCgwYMIEypcyLChw4cJA5x4gMmIAhYlkiSR4+TPAiwPHASA CNFgjAarFrDSg6bGFiiLgGQQEAAiRIgQIUKECFFgjCYDukSw4ohCmhopxGiY wqRJDIgQCwY4EaVLB0SoauzoAeYLhAcOAkCECBEiRIgQIQ6MAQMQhjc5DpHY g+TAKE6Y6DiACLFggCZM2BRi0SeNCj8KLr0gE/8DIkSIECFChAiRYAAHdEhV MgElEKQkYfjMQDFAQACIEAnGaMAgDhwOO6rIoaGBwAABASBChAgRIkSIEAsG EACizhVWlNCkQXPGjIsyZGJAhDgwgAMQIQghGpGkxgQwdiA8cAARIkSIECFC hHgwRhMpQGbw2ZJEy6FBV7A0iAER4kCAAQQMwBDEgo00SCgpuPSCTAyAAAQO JFjQ4EGECRUuZNjQ4UOIDuhg+nRKkBZIIwzg8PLAAUSIAwM0AVTpjx8kaWwQ KQJkgIAAECFChAgRIkSICGOQKXNJASUVSVa4KeAhyokAECEKjAFjlZFRCLQk CeSK0A0QDiBChAgRIkT/iBATBhCQAcMFC0NqDLEQBMgAAQEgQhQYowEmO5os QYKkA0wmTA1iQIQIESJEiBAhJgxwAkSIDq5SkLAhidEkJk0CQIQo0MEDL3dc halSA8GoBaRgxIAIESJEiBAhQlTooAEWToM4oImk58iCVTBiQIQIIMCJKB7e QCmxh4eeVC4ANQkAESJEiBAhQoSoMAaZF3hSKeqDZIKEH15AOAgAEWKAEwMI BEnQ5xWSM2uWSBEQACJEiCCCCCKIIFIIoAACMkwxkaDEjhVUimDIICAAQAAC BxIsaPAgwQACMhgqJAnNnkhtLgAZcCIAQoQIESJEiBAhQoQIESIcmCpVqlSZ /xAiRCgwwIkoMt7w2SJEBaVUl16QiYEQIUKEAZowmWTGD5IqJaAU8BDlRACE CBEiRIgQIUKECBEiRJgJFsBYAgcKTAUQgMCBBAsaHOiADoQIPhrV0NLDUyZM dBwcPHjwIMEATQBdSqUHlJBAiO7ceODg4MGDBw8ePHjQYCpIkCDpyCQwE6RU Bw8ePDgwFcBYAgcShAAQgMCBBAsaHBgDBqkFR1SBEhJIRIcQIE4EOHjw4MGB Mci8EMXqgAoSPTxlwtQgxsGDBw8ePHjwIEEdAGMJHBhLFgQdAmkABCBwIMGC Bg8CyBQrVqxYkCDBihUrlg6EqWLFgoSwYIAmUpYocf/yREgJIkGADBAQACFC hAdjwFhlZJQqChQOHFlACkYMhAgRIkSIEKFACLIAxhI4cKAsgbIAAhA4kGBB gwcFQooVC1JBCKkgIIQUK1YqhAUDnIjigYuYQDv6JGpRCVCTAAgRIjwYowEW Tp0QULBx5o8LQE0CIESIECFChAgFyooVKxYsHalS0YAVK1asWDQQIkRoMFas WJkQIoQVK1YmhAYd0KljB0wPEipUmVqwCkYMhAgRHnTwwMuPHDqQDGFRaImU JgEQIkSIECGATKlSpUqFcCCNWLFipTIIKVasWBAQCsyUKlWqVAgNZooVKxZC hABixYqF8GAMGKQWmFKFhIf/Dk1f6tBxgBAhQoMBTkTpwmVDmB022piYkkFA AIQEaQCEJFBgpkyQYsWKFUuWDggAAQgcSBCCDoCxBA6MpQMCQAACBwqEFSsW DYIDIcSKJYsgQQg6AMYSODCWDggAAQgcKDBVqlQ6YsWCBTCVwIEAAQgcSDBT rFiwCBIkODBAE0AuFFBSISSMmA4hQDggSJAgQYIECQoMcOIDgSJEhkCykSAI kAEnAhAkSBASwFgCBcoaOFCgLAgAAQgcKFAHwFgCBxKUBQEgAIEDAcSKFYsg QQCxYkEiOFAHwFgCBxKUBQEgAIEDMwGMJXAgQYGQAAIQOFAgJICxBA4kKBAC QAAC/wcCCCBAypI1idBUGUJlEYoPJwIQJEiQIEGCBAEEEJDBkBI1FKrYoLII xYcTAQgSJAgwlsCBBAvGkgUBIACBAyHFihUrlixIkCDFihUrlqyBAwHEihUL wsCBADLFikVj4EBIsWLFiiULEiRIsWLFiiVr4EAaAGMJHEhQoA6AAAQOFAgw lsCBBAcCBCBwoMAAAgYAudCmTxoKLLJMySAgAEGCBAkSJEgQQIAmTCaZ8YOk ihwobzxEORGAIEGCqVLpABhLoEAaEAAAAEBjoA6AAAQKhBQrVixImQYK1BEr ViwaAwfCihUL0sCBAzNBGCgQUqxYsSBlGihQR6xYsWgMFP9IAxIkSLFixQII SeDATAABCBwIIBPAWAIHEhQICSAAgQMFBjgRRcYMGiWqqDjDiI2UJgEIEiRI kCBBggACkClzKc8BEkm2iCB044EDggQJDoQUK1YsWRAICkwVK1YsgjRixYqV iiBBSLFiQSIoMFOsWLFiQYKkIxUEggQB0IgVK1YqggQhxYoFiSDBVLFiySJI kCBBCLFixSJIkCBBAA5AhOggIowQFX7+VGLSJABBggQJEiRIEEAMMqRCmeKw AxKqHBEg0HFAkCDBgbBixZIFgSBBWbFipRooK1YsHQQJAsgUK1YsggMhAYwl cKBAWBAAAhA4EICsWLF0ECQIIFP/rFixCBLUESsWJIIECRJMFSsWJIIECRIE 4IBOnS8+Gu1A4yjVpTJNAhAkSJAgQYIEAcSAweBKpx41hOgA8wlLgxgECRIc GCtWrEwECQKAFCtWKoGpYsWSRZDgwFixYhEkSANgLIEDB2YCCECgwFSxYska OHCgwFixYg0cKBBSrFipBg4cOHAgAB2xYukYOHDgwIECYzTAwqnTISRo9GzC 84JMDIAABA4kWNDgQQAxGmCy48MSpBqCBsVZBSMGQoOpYsWChVAgpFixUgmE FCsWDYQDY8WKhVBgKhqQIMGKFSuWrIKQYsWigXBgrFixEMaKFSsTQoSQYsVK hRAhgBgw/1YZgVNKhQpVR0KRghEDIUKEBR088IIDUaAqWjiYCvWCTAyEBmnE iqUDocBYsWJBEBgrViwICAVmihULFsKDmWLFipWJYKxYsSAgFJgpVixYByHE ihULIUIAsWLFQohQYAwYpBaMKoUEFAc4RlbBiIEQIcKCDkCEGMNnRRoeB/Jc AtQkAEKDkGLFSoUQAI1YsWANjBUrFsKBOmLF0jEwEyRImRACgBQrViqCsWLF QjhQR6xYOg6mihULFkKEEGLFgoUQoUCAYsAgZWQUBxI8BHW6wgBGDIAABA4k WNDgwQAnosiYMcfGHlB+zExi0iTAwYOyYsWicRAABFmxYtEYGP8rVqyDAzPF ihUr00AdsWKlOigQVqxYqQjGihXr4MBMsWLFynRQR6xYOg4eFJgqVixIBw8S jAGD1IJRHEjwENTpCgMYMQ4ePHgwwIkBQIIk6LMHjSQlhjIICHDwYKxYsWQd hCArVixZBGXFikXjIAAIsmLFgkQQUqxYNA4CgBArViwIBGXFikXjIAAIsmLF gnQQAKRYsVIdPChQR6xYqQ4CgJDqIIAYMEgtGFUKFIlDg64wgBHj4MGDBwMI yDBFiRo0afokCAJkwIkABw2mihUrVixIBTPJihUrViaCOmLFkgXBYCZZsWLJ gkBQVqxYsiAYhCArFsBYsAACEChQR6z/WLIgDByYSVasWLIgDBwoMFasWBAG Dhw4cCAASLFipRo4MBWsWJAGDhQYAwapBaYeqVDxaJQRUjBiAAQgcCDBggYP BhAgZQmjMyqqlKAxQ0aUEwEOGtQBMJZAgbJ0pNIBa2CsVAABCBSYKVasWLJ0 pEqVigasWLFixUo1EEAmgLEECtSRKlWqVJAGxoIAEIBAgZlixYolS0eqVKlo wIoVK1asVAMF0oAECVKsWLEAQhI4ECAAgQMJAoAUK5asVKlSpYIUK1asWJAK DowBY5WRUY/QUNDDStQLMjEKFixYsODAAE2YTDLjRwWkMCI6hADhoGBBgpBi xZIFMJbAgQNl/6UCCEDgQAA0AMYSOJBgLFmpAAIQKFBHrFiyAMYSOJBgrFQA AQgcCIAGwFgCBxKMJSsVQAACBwKMJXAgwYEAAQgcSBBAJoCxBA4kKFAHQAAC BwqM0YDBlUEIVERylOdSGTIBCBIkSJAgQYIBmgByoYCSCi0pcvyAQMcBQYIE BcaKFQuCDoCxBA6MpQMCQAACBw5MBTCWwIEDdUAACEDgQFmxYkGABDCWwIEC ZWUCCEDgwIGpAMYSOHCgDggAAQgcmAlgLIEDCQqEBBCAwIEEBaYCGEvgQIGy aEAACEDgwIEO6NT5okkHCQqUFLgA1CQAQYIECRIkSDAAmTKX8jhCw/9jgiY7 mBrEIEiQIAAIsWLFGphKByQdqQgSJAgAAg2AkAQKTAUBIACBAwFAgARLlsBM OiBBggRJRyaCBAlCoAEQkkCBqSAABCBwoEAIAFMJHEhQYCaAAAQOJDgQgg5I kCBBSgWhYEGBDh54uYMIlRYKisxMYtIkQMGCBQsWHBiDzAtRrFQh4dHD0ycs DWIULDgwVaxYkAACEDiQYEGDBxEmVLiQYUOHDw0GOAGiC5cNW2pEkrRmiRQB ASAyjAGD1AJTpUjs6OHpE5YGMRamSgUrVixYqVKlSpUJIkSIECFChJgwwIkP MmZAqbBDDpEgQAYICACRYQwYq4xYObSjhg7/MJ+wNIixEGAsgQMJpgIIQOBA ggUNHkSYUOFChg0dPgQQQMAAIEGIrAA1YgMXD1FOBIDIMAaMVXEGCaoBqRGY TFgaxFgIMJbAgQQhAAQgcCDBggYPIkyocCHDhg4fAgjQhMmSQixKqNCR44eX Bw4gNowBg8GVThOEJLGkKROmBjEWAoQkcCBBgAAEDiRY0OBBhAkVLmTY0OFD gTHIvMCTx1EkFYdOfcLSIAbEhjEaMODkSQekJJY0ZcLSIAZEiBAhQoQIEeLD GA2wfDp1CBSSUqOMrIIRA2LDGA2wZAJjKUmSRp4+YWkQAyJEiBAhQoQI8aGD BzfuIBpRA4mjPJfK/5CJAbGhAzp1vkhAVQXShE5XGMCIAREiRIgCA0CECBHi wgAnPqCYQUMOJAqS1rCR0iQAxIYOHni5gyhMlRoIRi0gRSYGRIgQHwZwcOLE iRgBIEKECBFhAAFSDClh0QfSECJFCAwQEAAiwwAnQHThwkdOGh4H8lwqQyYA RIgQGwZw0IROlA9RGgiIEQAiRIgQDcYgU+ZSHkdIhIQR0SEECAcQGwY48QEF wEVEbKRRcYYRGyZNAgAEIHAgwYIGDyJMqNCgAzIDGHSREWLVBzIxFi5cuHDh QoIxGmDh1EnQDi06wGTCRMfBwoUHAwgYgOFCmydJbFgIAmSAgAALFy5cuP+w YIwmA27gufMGxyUvA5rEWLhw4cKFCwc6eHDjDqIRkHiUMrWAFIwYCxceDCAg gyElLJ5oCbOBi4coJwIsXLhw4UKCAU6AqLNAiSYRmpQYgQDiRICFCxcuXLgQ QIATHwgsojIkjQpFZiYxaRJg4cKDAZpIYbNGjQ1QjXL88PLAwcKFCxcuLBiD DJMlQTYcCiPITZZKL2DEWLhw4cKFCwEEaMKEDaMzKvb0SRAEyAABARYuPBig CZNJLRLZUCEITCZMdBwsXLhw4cKCDuhg4jQIgZBZVQA2akXIwwcBAQACEDiQ YEGDBxEmVLgwBhlSoY6U2pFmxYYxXUCcCLBw4cH/AE0AuVDgJxISQac+YWkQ Y+HChQsXEgxw4oOMAjT60KplS4uiP5dewIixcOHChQsXxmiAKROYRpCSpPDx pQ4dBwsXIoxBpgyePHpU8JgAJhOmBjEWLly4cCHBAE2YsGnhJ8ktXLl0jciB 4waIEwEWLly4cKFCBw9uEBKxJU0NBHCMrIIRY+FChDHIvBDFShWJGpYkfKlD x8HChQsXLiQYA8YqI3B67OLVy9cvFW2yLGHSJMDChQsXLkwY4MQHFBqo2NhD wpECF4CaBFi4EGEMMmXwsFLFA9KIVj8g0HGwcOHChQsJOqBT50uOMLqA+coV LA0HOHEYNIixcOHChQsT/wIogIAMU5SoobAnkpMsUzIICAAQgMCBBAsaPCgw QJMyl/IcIAEpECIcXh44QIgQIUKECBEOdACiyxg+NoQNuzXMFrEwiAiFAHEi AEKECBEiRIjwYAAyZVwocASqihwoBWREOREAIUKEBgM0AeRCgSMkQgIhuuPl gQOECBEiRIgQocAAJz4QKGKBQrFfxo4dQ/bEQhAgAwQEQIgQIUKECBEejAGD QRw4HHjUSJHjB4QHDhAiRHgwQBMmk8woQlNjBKI7Xh44QIgQIUKECBEKDCAg wxQlapAkK6Zs2S5iKs60mMSkSQCECBEiRIgQocEAJ0DcwJHD0g5Qj0YZWQUj Bv9ChAgPBmjCZFILRWhqjEB058YDBwgRIkSIECFCgQGaMJlkxg8JZMx2gIL0 isQBVqJekAEYAyAAgQMJFjR4EGFChQcDNJGCIQiVFVpssFjDhkmTAAsXJgzQ hMkkM35UCAnk6s6NBw4WLly4cOHAGGRe4GGlaocyIUNWqEjCA8EgTlgaxFi4 cOHChQcdNGCwgJUjNFoCbXgj48OJAAsXJgzQBJALBY5AQQrj6s6NBw4WLly4 cOHAGA0YXOkkqMYrFZYmyKmhpVGOHxAeOFi4cOHChQYDnIjioQOiFFpIHOr0 CRMdBwsXKgxApgyeTap4VAnj6o6XBw4WLly4cOFABw//vOAwMCJJEjmqHKHi IWQLnwIyPpwIsHDhwoULC8YgU6YSIzV9qlA4Y8ZFGTIxFi5UGIPMC1FHSmmp EgYRDi8PHCxcuHDhQoEBTnwgsIjKkDRaLLFIABABmiRPnBRawqRJAIAABA4k WNDgQYQJFRZ08KCOHU+CtCTZwqcAigECAixcqDAGGVKhRiGoUSWQgR8Q6DhY uHDhwoUCAzQBNKnFGRV7VKgSYSCRHEigVJkywqCBg4ULFy5cSDCAgAxAFtGQ U2UHgk6fMNFxsHDhwhgwSBmBc6hGElQ5vtSh42DhwoULFwqMAWOVETgctKSR k2DUJjETSOywZKBDlygnAixc/7hw4cKBMWCQEpWHkooqfVgUYgOITIyFCxfG gLHKiJVDWiBZ0pQJU4MYCxcuXLhQoIMHEH7kSAGphg4DJjSYSjRkh5wEStgw aRJj4cKFCxcOdPDASwQfOmoISWGAUJcoJwIsXLgwBoxVcawc0lJjgqdPWBrE WLhw4cKFAAKc+CCjAEAoK5Ig0WPqB6cirhqBonBgVBwGDWIABCBwIMGCBg8i TKhQYAABGTAUoVIiCRJHm0KtghFj4cKFAGLAWBVnkKAdWnp0usIARoyFCxcu XAgggAAphpSw6ANpSAIleAxlOuIoEihLBgiFAHEiwMKFCxcuBBCDzAs8eRyp SFKCSv8QDBkEBFi4cCGAGDAYXBkkaMcOQYOuMIARY+HChQsXAohB5oWoTQdA CQkkgguQG5WyWCihpYQFE1MyCAiwcOHChQsBOKBT54smHTWEWMrxw8sDBwsX LhQYAwYDTqd61NDSo9MVBjBiLFy4cOFCAA7oYMoEZoIWLRM82bmxCgUXMYFq qKCU6lIZMjEWLly4cGGAEx9QzIAiJw2PR6YWrIIRY+HChQJjNMDCyZMOITV6 dLrCAEaMhQsXLrQQQAFOgOgyRsyWJDweHQmFhYmXL5p0aOGBAE6cVTBiAAQg cCDBggYPIkyoMEATQJNanFGxh4KaQkukNAmgUKHCgjEaYPn/5EkHJCETTnFi ACOGQoUKFSosGEDAACAXEjxJo+IMo0llPjAwYuoRKB4TwNjBRMeBQoUKFSos 6KABFk6DDtVIs4LPGw9RTgRQqFBhwRgNsHwC0wiSkAmnODGAEUOhQoUKFRYM 0ARQpT9+QO2xQaQIkAwPykxqIekJCUutcNx44EChQoUKFRIMcOKDBy5itlQR MsFTJkx0HChUqNBgjAZYPnnSIUTIhFNXGMCIoVChQoUKC8aAsSqOlUM1qoQR QShEFBgZgCyaswVJID4FZHw4EUChQoUKFQ6MQQbQJEaSIqVRoeiPizJkYihU qNBgjAZYOHmaUKNGj05XADKAEQMg/wCBAwkWNHgQYUKFDuhAiJADVRIhEzx9 wkSnSZQQhBBZQiKnjZIlUpoEUKhQoUKFAx3QwfSp06EdSSq4mYFigIAAChUq NBijAQNOp3po0SJoUJxVMGIoVKhQoUKCAU5E8VAAipw0PFRtEvUChgA6dexo mkACjR5WoUjBiKFQoUKFCgUGEPABRQE+YYSQQDDoEyY6DhQqVHgwBgwGVzr1 0LLjkJU4q2DEUKhQoUKFBAMIyDAlCwsKe9BIKrRESpMTDVbFsYKAhxYdmuzU oeNAoUKFChUKjEGmjIsWkvoIGdKmEBtAZGIoVKjwYIwGDDid6qFFi6BBcVbB iKFQoUKFCv8JxiBT5lIqPST2DJmjAcUHAQ7IlLmURw+oJBU2cOkCEMSJAAAB CBxIsKDBgwgTGnRAp06mTgiQkNCR406IKCcCKFSo8GCMBgw4nZpQQ4ugQVdW wYihUKFChQoJxoDBIM4gQTWqBDKAw8sDBzGaSFmyJhGaPX0SBAEyQEAAhQoV KlQYQMAAFAX4BOLRR1EqUaRgxFCoUCHCGA0YcDo1oUaNHp2uMIARQ6FChQoV EnRAp06EHKiSCJlwihOWBg4CnPhAoIiFPnuQnGHERkqTAAoVKlSoMAaZMi7M JOqjpQKNRUAyCAigUKFChDEaMOB0qkcNLT06XWEAI4ZChQoVKiT/6ABEiDEb VqTZ8YiVqBdkYgQ4AaLLGzdy9vA4kMoFoCYBFCpUqFChAzp1Mp0StENLIwk/ vDxwoFChwoQxYKyKM+gQD4A7BA26wgBGDIAABA4kWNDgQYQJEQY4EUXGjDk2 9oDyY2YSkyYBAjh4cOOOqy1VtJQ6IuoFmRgKFSpUmDCAgAEoZripkITHI1ML VsGIoVChwoQxYJBaYOoREhKHOl1h0CCGQoUKFSocGODEACBBEvTZg0aSkikZ BAQI4IAOhB+tRlTRgmDUAlJkYihUqFBhwhgwXlz6o0hFGgpq1rBh0iSAQoUK E8YgUwZPHkcUQPXwlAlTgxgKFSpUqHBg/wABGaZkUUMhTZ8EQYAMOBEAQIwG mOz4SAGpxiErRlbBiKFQoUKFCAOcAHHjhw8dQqpsEcPFQ5QTARQqVJgwQBNA lcycicTDUiscXh44UKhQoUKFAwMIkLJkTSI0VUrMmSEjyokAAGI0wPLJE0Ad Qmr06HSFAYwYAAEIHEiwoMGDCBMOjNGEyZIsCWyk2cHBCicsDRwoVKhQYQAB UgwVUtOnxhY+bzxEORFAoUKFChUKDNAEUKU/fpBA2iJmTAgQDgIAiAFjVRwr h7TUaKQpE6YGMRQqVKgQoQM6mD4N4sAjzZM2StgwaRJDoUKFCgMIGAAkiAUb kJ60MYEhg4AACv8VKlSoUGAMMi9EbTqARIulHBEg0HEgMAaZF6KOPOIBaYQB HF4eOFCoUKHCgwEEDCCgAUqFKjV0SMBxA8SJAAoVKlQY4EQUD2/crICkQpGZ SUyaBFCoUKFChQJjNGBwZRACEiQOdbrCoEEMgQGaAKr0hxKSKnKgFPAQ5UQA hQoVKjQYAwYpUXkoqagSKZGZSy9gxFCoUKFCgQA5eODlR6sUWpAc2CTqBZkY AAEIHEiwoMGDCBMedPAAwo8cjXigcZQHzwsyMQQGEJBhihIWFNJEcmICQwYB ARQqVKjQoIMHEL5o6sFDSwpEYzx8EBBAoUKFCgXGaMAgjpVSKtCoMrX/gBSM GAoVKlSoEECAEyC6jBGBClQJJ0qWSGkSQGCAEx9QaJgzJA0SP38qAWoSQKFC hQoLBjgRpcsYRI1UDEmUStSqBjEUKlSocGAMMmVcmFGzYogeU0ZWwYihUKFC hQoBBDgRxQMXETqGTHDFRcaHEwEGOnhwg5CrQEl4PDoS6gWZGAoVKlRYMMCJ KB465HiE6lEOLigGCAigUKFChQMDCMgAZNEGQSkkbVqwCkYMhQoVKlQIIMCJ KF3ugPGDgMWRK5joOCAYowEmgJk8TdCy49CgOAxgxAAIQOBAggUNHkSYMMAJ EF7ssKLhBJESPKsaOEiYMGFChAFOgAjx49QZl1VUWuB5ASNGwoQJEyY86OBB nThmXLnxNMMQIDIxCMaAQWqBqUdISAg69QlLgxgJEyZMmBCAgwarKhVIdSTL lRAfBARImDBhwoQO6GC6koeGGhFZJpUhEyNhwoQJEx6MAePFkjF/8gQx4iXK iQAEA5AB5OKPoj5IBHnKhKlBjIQJEyZMCCBGkww38Hz5sUAGIBgOEiY8GBAA Ow==} } proc __tcl3dLogoPoLogo200_text_flip {} { return { R0lGODdhyACpAPYAANjY2NbW1ri4uLe3t9DQ0M7OzsHBwb+/v8rKysjIyLOz s7Kysr29vbq6ur6+vrGxsczMzNPT07W1tWZmZmVlZTw8PDs7O8XFxcPDw21t bWxsbEJCQkFBQVFRUVBQUIeHh4aGhpGRkZCQkEVFRURERGFhYWBgYK+vr35+ fn19fZeXl5aWll5eXl1dXYKCgoGBgSgoKCcnJ5+fn56enhwcHBsbGzQ0NDMz MxQUFBMTE3Z2dnV1dWRkZElJSUhISHBwcG9vb6enp6ampq6urkBAQI+Pj2tr a4CAgC4uLi0tLZWVlSYmJlxcXDk5OSIiIiEhIYyMjIuLi5ubm5qamk5OTq2t rXt7e4SEhKKioqGhoUdHR2NjYxoaGhcXFxYWFjExMXNzc6ysrKWlpSUlJSAg ID4+PpmZmZOTk1paWqurq2hoaOLi4jg4OExMTFVVVVNTU4mJiSoqKnl5eR4e HqqqqjY2Nqmpqf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAyACp AEYH/oB4goOEhYaHiIk5Sz07KzJQFBY0OYmWl5iZmpuIOTg3bjofLmokY5Wc qaqrmzlPI2AqQVM7PaesuLm6gzldNkwfYlUqP6aou8jJl14xVHIzVVNgI07H ytfYnkhuRzJCRROT2OPkeDlJ3N5FFBU05e+6XOguWEHrFVzW8PutXRZbUYQE gbJlkj5+CC/laPaMDjFqBxNKNNfli5sUM9JgAcGCDaWJIDHlyPEFDb0gSjJs eBIxJDYcY0hMiFJPxQ4PSHC43KlpJJkKJl7MoIPlQ4ky1VryzJSDDJESIGRU KUqBw62lWFXlGDMigxI69tRsqJZVEQ1QVlQIwQJnwoYl/krLytWEwwkRIyLs pEk54lRchHU58PiAZeqHLRVYzl2srFeSDnKmCDGjw0OSv+OaVlATwk6QKCbY 5GNMupyXbS+wDJGiowdcfp6amIgSxE4RHu2SubnDuzfvBBZKz2264YcZjUc6 xMGcC2YbOVJnyLEV17d134iKXL/+w9Aa33TAfu+dxtAO3mwO0eh9aDzv8EHc 3ylfaI787dZ7OtECRkoVGVZQAQNzrHBRhwlwiCHGB0x8gQOBhdDBmxucQMEb FIew0VsTlrA3yG53XJAIiBgKoiFvHCbiIR4/8LaGO4e0eMcareQQxxtHiLHa NGSRk4MTPcQixEM9CmckIk24/qGkGxfwdoGSInHBRgkBiQECGl948U4Oc9x1 hh1YHOFGTkemMtKZZRoy0jYuCDGECiqRAeEqNnIjxglS8DjnYjgs8VwWBkQA QAEKRNHCDV2Yk2YONFhAQRFBiHEFGjd4sacqODyWggxhzGBFB5elSUhTJHgV aQguXKFCGmmcMUFui3ZRgRFKhGHlmDoh1MsNaIAgjBk/QHSkNm6gkEUQZ2gw VhdkNFECFEEMVIIFNVwKEhc2zCYQaHWMJhGjZTwqRlEsNFEtaTnUsEEGq2Lh Aq6C+DSCcSeI8W6oRvoyW7Sg2cDFTjZSoYN/C4bmbVlS8gBtEHCwYIOWhZCx gQZf/oWpnLW60rABEEoEIUWAA2I10hM3WGDBF3NgnA0ObMyWxQwogDrSIene 0IOSHMBgKbo4xEGFEVaA4Ya/otLsxLwr2CGFHG28VvQ1fQoshUYuUNqFyk8L 0gUMVFgxA7JGECFn1sh0cUMLUdgRhhJhp0z2LlvxZwYdtGhx1dt0ArmDFHSw Rh3euezKhK9prBAn1m97cQMwYthTgmiIPz0S1zrMnUXViAKuy0glXXEsOLBq rhANv7ggAx2evvFFoqI3BkMPP3SMRRSlhBy5yE9UAFUWYRR1VJGtl+MTERRE IcY3Rox1u64/QcWpGFG45XTwIY20RFdKpLH2D1qEvJgX/tdnEEIQdKywAxVx 5Er9YnH/oEIY0hrkUrpsMHGFamK09dby6++TAxf/gIIQ7BACNZRhbLoym0lm IAOOEK1/ieMVHIKwNiOU4SNbqkivZAC9EpiLExZwEidOdIdxnKc3F/iBkqDQ JBeVaSSakoIM4GCCB5aDC6iRAVtYUIerqcJCdyiRJkBEB0SsCBHjoRAhQoif 7hziiO2ZkCCImIgmQFEhOajDszzTLx/6aBsomEEWGmYDLx5CO/jpTXo6lMYr uuE+3DkEiNI4HiFOEY7WcWIh3kjH93CiS7SiQxZitpx3+KJXWWCLwfgHweqx rARFSAMdoFCCHjKyEFvpgQ5m/jCELKTAA4XUnCfi0AYgwEEJcMhAD3R2yS3R oAITKAIWPoa+Vo4qB4sDQT1ANwe8dSEOHUhBFhQggQcsQAADwEKAYmDLzHSB CGo4QxBkQMhmYpIG0BRBtKCAGwyWqQvN2IFapmAFNIygDWqAgh3oIIJXwahM UiqBCMASBSZUaiI4QEIHUFAYT4GyEtYMnMQ4hgUlTOMqTqEV/Az1sG/aYIt2 gEJoWDeRXfVKDIUDgrD4VBIQUJBtYsMkDDqQmh1R40gGYkGC8ucwilaPJBeZ QhaKoAYOIHApMHyDsaKhJzU1wwpmEIMIlEWG0gjOBVnIwgdaUMaAlgMHMWiE FIKw/oKeNpIpNoKMCrIgggz0xanDwSbFhLC0NjDzqiLRGMXSED+3ofUQfdLk VFOivLcq4gk+6E+93uUgsC7ml8GUQRpUAIQNFNWuRuPPFNIwyDfgC7GGiOve gmAGMGgBeJDlkgViKQaYOVZ9kC1EXHUwBTsQgwSYtSsM94mFwR4utGrSmFeI 8i4ywVYQn+gVFoRAScjdlhdjCNLcqAmqB/0WD/l0w0lEwANq+VUuMORGFtJA ix6c9bjmmMO6KiamxyLWE0nwQOWI8oHQeBO7rtguWT91mefOrwa8QsHpYIYG f7lXOMQxgjQXNK3zrq8pbGgBUtMghRR0YHXYtcRIYqCF/gyIQAh0MIMV3FAH /+ItXV/ogA5UAJYQAEEL102wSLyQhFLKEgtQqGlqRYVhD4BhfFTVQQducDAR b6IuG8DLNicgtvsGrgZf8MAOvhJhObiBxj4OnvV8EDtJpsQHSwAtYybXAyCE AMJmMLJ9bZyMkThhA5xRGzF8EGLozqEMg5FBEFSgZQtzGRnpNUIIwlNAIihG ZEDWKvxCkAEQJ/m2k5Ma1aymKJD8DxQbZpWEj1zjN8ODc8X6mhJ+4IO76Sqr m/rPEerbaEczb15mCIMQQGBPM/oPSKS1Q3Wn5+mQkKEM+mUrgxAF1kyKczI7 MOufWx0vGHggBVg4wQxaY2kf/jnBBzswgx2kQ4UyXyINUjwEEEO0Tt+sURk6 uBAN8CgCFnthSjTJwqQc9GgucIBidJDBC9zg3UwgAD2WWNKSWgiFJSGCDGi0 ThEO6x3evJMQYBDhIfC9nSL0MhFzKIJ8wmCyMDjc4WCgyxjaQFoh0PWm2TiH TrNgB5BiXBO9qQEnkogIaN+hiHLsjR4NQQM3QCE81jaEyVFuiDmuvDdKJMS2 e2MHTjDqLrWy15isabbBYWEj9tyZKq54id78exAJgHci1sObJapxEy28tno8 RPUSJgKIK1cIDkryAQqeQQ3taKYvjN5ALCn9EGEIUc4/5MdNzIHpeNj5jLQu CL3b/hEPLXwRy8dDo0HofQ18z3sdCUHCNaRoEBLCeSv0xkkZyKHZthwJMOUb BBFY0M0sd0N4wgOFpyOCDfJO/ZJM33c3rHP0P2B9Idjw8tdDYY1ruAAdWN/y 0Ycn9plw+SRz7vSe4KAJW4CCGNQNLx/VYLNQwMIULu89Xuui69vJRDwjaYd+ QcxHvt5UhIO1Yut/yxcseHkYQiCJc/kIl2j4AIQLGDrReYEMSKjABiqABLcW rS5SRWCtwWrZ4A88IAKSVASP02lFE10pEAQGAAEMMANggFq7phUsMxtYQE2f 9WhOQAJAEGpY8AId+DbpAmtKoAAYkAAIkAANIAUZYFMX/uhzXVAG0ZQGQpcE UpYZZEACGjA+WfAChEY2UsICviJIKiAFdrAA9oIGtvVCXLAZZ0AUR/AGheRU UoIgYhAGxGA3M+hzXMAr9GBaKaAGGuA5J+BJF7MoXrAZISBrTPCEj7YVyHYc Qdh8w1IDNihLM7BpbAADSCAwi8Vs1ZcvNsACtPEZLfVcpJIBK1AFDNMR/2Ik jOIsyrcRVqN5v5YFVeA3xUYa2LIvk2Qw18IGLBAMHacS5ScyCmQ6YkAQTTCJ kHYFOnJadyYcZqNS2zRRhrYVSOMxVuBYX3gIWxNM/aQDPlAk9PMsQZAGIRAO 7lcaBrIvA2ECPTQ/EqNQEYUb/v5XForDBBPETpIwibyAapXHNM42HI9EEzOw bkiwa2vyBhgRBlkgJuRWFlxCAsYxFVW4HNbgCYe4UuXFBqYGXVklX4P1Aysx g2tCBWqgAyrUBLJnaNhyio3TW+RYCNiCBlbwAShwFB+Hj2bjBlYgAlHgVQT4 fxNXOWIQAmHDbwnGKIIBAisABV71iW9FhzswBX2DjDgZWv9TAQpzPFAwAWVw cLBFHKZSVikJlAbSAr4SBpVlXcP4LT0IBCtAVjrQNFUJEuDkAVbAKcT1jscF E5qkbJX1VejFBdD0hhHlQSJXljDwHFIgBGdgBDaFXhrHT0MwbG1QiLC1Nb/2 NSug/gFE0I1A+WrRBBZwwFQZeVuCmWmVZYHHxQxgqYQqYFk/iVh9QnFDIQ0b dVsV+QFJRWpNFZNjwB8qoDQ74IW/xSXrkpW0BJiAlpo7qWo7oJa3hQO+FpY8 dVldWVE50JuS9lqAdiOpYQdnRwQT+V00MCXKlz/WyIBoRSz3w1tbIBoi9pXz yGyhlJSKc1HSQpAxyZZqkBdCABof9Jpe0FECoYCxiF6Zkg52sALBspnVeQ5u 8AJqVkBHiV6v4D6C5I47CJTHBgalRYjBCRtRyAOJKAIGFJJOaQE8ACksdZoT WgKoWFV/I2ILITVDcp8LKjxdMgEC5BC5RpuvCUBDSS7d/pJZT0ACalAEjXMG lKaix7UIApMR0mEZIwo1R+NgQfANYrGK7Fk6aqYElYEEBUk9XpCaPzBn9sBj RpqjzylgMrBsLmACFVClWdMLgThkdgA9VPqjWBGGJDk3QRACP9AG3yk6dWEB TMCfdtBAJmABiMlrCyETcHAsKjBhCCZKi+ADGqBNYVBgjGam0IUtaeoxKOAG q6Ool4ADZFAHaJACUxApRaBK6WN+iZBP8jgDy5YCqlOgwwJVPmAEytc3KIAG TSChnhovh/QC0zUDpJolkipaT8AGlzoDYUBAQOCm3xernbB29/Mfj5o5uWo9 WmAERSAEYSADLtACFgCrxKqR/nXABPQwBO7CBFuGX2dxEVMDrG3ApLmaJmGI Bt3ArVfABN1ipk1RBs6jpSxgAbd4rZowkpmGBe1aRlM2nD2QAbIkVG1qrvhq Ju15EVJRj1jiUiLDBRaRAlNTFDyAFOdqgrnlAjoiA6TabjsRpybgK9zqAkzg ERd7YVk4QdFQC+lYUajqYELQiSmQqAe7Cz8BEMdDUxVgrfvgBU4gp0fgq2v6 Az3QqTULN69mohsIAqERjRIBEyPgrHYwBOpGrTx7tD53ND+wAtOEOcOqK0F6 BpJ0BsGaBE2KtawQXTvlT2/KD6FIG2ujUV6KtjRoic3onzDpP9oFBKtSj29A lnTb/hh02B9TgQLCmBCAZQVSIFQvebLVWQPQGR63EZ+wISsUEH0wMyZfG7hw o58aewJmUFj36iPz2Q2pWFfKYAHyhrWZtElUCzJO9T9eEgT8Silvlwt3l0Zz pwxoMAQVIAgVUARV4HBoIDk1MCtKACa1hYXAJLF2mTxXSwhUdAhz4AZPF3k0 pwyER0dImS+8cgUM1K64uiU4EEDjMimVMid4pyJShwlo4AbvGxyJQAa9kb1T pHKX8L5ogAbya2g/ZQYoFg552hhkoFhpwLEegKN4kLttRB+GEHdtdAeJRwZ4 1Bt/JwhVUHVGpMERU8EXggj2gR/3Yb+fGlx7Qzdg0KHk/vBLmyiVxWCkENxG iYcHFuB7MPcev1cIJxREs2cH9RsxMywIkSciOmzBsxcEP0wI+aZHNCAjFgwl TBGj7tM71bQl6MCf31AQcZkKkbe7lxB5FywIV4cIQFR4hUADLXQdJIwHY3xG LnS/M4IIekfEPQFAFDBno5Z0wqNBIJBIs+awQ1R3mkBCG+x1iSAjPUcI7qF7 dKBCbGTIiIDIcLzGg9BCXmwJ6Jc27MQD2ukjXXAgxrMg9mSqmNBCzWkIluzG PPzI0ivIhsAGknRtQBTGhLAiUXcHYdfKJ+dzbCIMcGJYmYd+wYB0WRJv3avL tIwI02sIkSd4MfLGfVd8z7zL/pDnIrInI2aMB4THeu7hc2PQNdGBjE0JN2OH BkLRdpmTCCbHG2Egb+NByZBHBw8Xw+GRBmE3RyGiQivkHnyHfWkgb/nWvniA zym0JFDAz3vkGxdQbwdtHcmMSU0BaoyFAgncTPKQDq9YEKfcxBV8yRESwRLM ctN2HR6NB2xQwXZAddncdyNtHSVNAy2tbeurJnMAS9pUj3iYDTEwmFQVg9HL uYNgciVtCPFkPJjYVz4iMeKDBTahwkBdc20kEjkAnUO6VOlLui3DjgT61Ops w74nEpC7BUVABxHVUsKTXKmBLAZ0zFydDNvHKkWQnY8JpI0wNwra1thQdGW3 NgZ0/sqB0wVUnZ6LRD040AU1QAZk8CCOGy9x4AE7JQWtiZ+bM1I7VTeSvShz cANUsAUawANUkM4N+ATbBYwCYk1NQQTsImpXUsyLfU1EEEthMABB8AE8NNeU +G1UIgMFtobCkwO/UHZVAFJ+TYlReMcCQAAAgABpQNFteySQ+yxicDk5PQ7g s6Ovi3ko+9thcAEEEAEFMABKAI0n2wuwhMdV47HXEJQToE2ijKFfqjdSoAAM wAAHYAACIAO1cNkiCU3JGyZD5z++FhlrlsIxYFySU860eAJEIQYPMABikBzN bVTmOT7Ehd7pnbKNA6FlMLovVNOPEi0qAAVFkAUn8Bkm/oBkixKFgTSC7EbK XfYj28VWNBSLi701zpARSqUDcgApPFVpF9sLKMhWV3IDBr4lAfMM9Lhu97go 2DSjkWKTbsAEGwaJf3yuOeAFmxUCC3UoZzsOI5kaYUALZPbj2KKtHFQERuAD dVABJtFapzW3OPXcCwMH3grI7/BKseQZBCE/wzJxySYEtOCmNDAGOfYl7jLd 6DKNAfEZTGXnwsM1XlMFahjhf/Xb76nR/9NRGHVxy/q2taGANlS50Kk2hQnM xG3TYlBgoKTYBzoF3FqFFr6oD6VOaRDXBMmIP4I0aSAENMQGTssncykHW0VT PWYOkGsC0OKMkgB6+Kjo21RJ/l3+fj4zMEHgKR0AuFN2fFQSKUuFoR+6Kdfd stDlCy0ABwIhUe6dEAmLAoubEpQ5ZeZItZ/0pq+kBrUSiaCNLp+sUuc+nUnW KLHEL027oNH1ub98U5DmUW/i04raC9lCG29pSdXT2JHeWHKYFVfOK8D9jBUQ jQsGzn0pzg0figmCiVdtaF5wiMHQiVupwNXj6ZP0OGY0EjQAC8eBwC6PU7LC WRxbXADzSo9C6uTXlZoxAW84algiZZoVS2vBV1ryo1tBlz3p4zwBmzMqBNCj xVXpHNDxH5fnbGuynxxUlM5lVEjQ5p33KmxtaE/AARMAAiEAAlXB4S5RzoRz lwekQA8+AWZRMAVQkDx0nxUK9AJT8Kc+LzI0UAdt8L4jYLAis47jMuQFumAj YAIZYARvYANbzBinIWQukAJc+tOJEAgAOw==} } proc __tcl3dLogoPwrdLogo200 {} { return { R0lGODlhggDIAPUAAP//////zP//mf//AP/MzP/Mmf/MAP+Zmf+ZZv+ZAMz/ /8zM/8zMzMyZzMyZmcyZZsyZAMxmZsxmM8xmAMwzM8wzAJnM/5nMzJmZzJmZ mZlmmZlmZpkzZpkzM5kzAGaZzGZmzGZmmWZmZmYzZmYzMzNmzDNmmTMzmTMz ZgAzmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+BSAtZGwtACH5BAEKAAIALAAA AACCAMgAAAb+QIFwSCwaj8ikcslsOp/QqFT6qEYkWElly+1WJNOweKysVrNa r3rN9kbIcHhkfqXY2/i8Hg+O+417gYKDg29/f4SJbBOKexRiCJEPaGlbfVCN axMJCXkGA6CMmXkRZpSjX1KoXJ8Dopqgsa6rtIKGmKutnW2tsga1wHkPqqgJ sXi9sQa7wc1ew1GrscxqE76vztlcU5WKELHYXrLU2uXco62/bMag5OXa55mt 4V3K7/db8Y3H66Dq+O/0KfLXBhzAewITheo3wN3BYJegPBgFqmDFh+UiPpmY acA/L98GQKgV4QABAgW6AdTohOM+hxVa0XpAAIDNmwcwQovicuD+yGrtVtW8 SRRAgYc7JVL86YUdKgkBikqNcBBBGHT0KhDMJEEqAAwfPmCoGeCgGKxAZzVC UJRBiRRw4aJ4AKCnuauZEtCTuZboAhBxA6c4sYEAwLOZINALqigCUQyCI6fA QAEf4kYTwllTS6jrTcCSI2+wjBeY00SebZoILfmEB4Sla336GIhCVAALVrOO 3OEeyyfNGA8aymC3ZBL4fjsJtjkrngM2ixsXPGLlZVqnBXleMF0wioNJowGb Pcg2AAW6u8N9DTA8rlrC9wxNr763WTEqMzW3ZfOD+rjV1WKMAc5VMEZ+mC0U SFQX/AfXCYJsMptz6bBxYC3f0PbceQ7+wmWfHhOEZFBaDa2RAX4CelSbTaD9 F6AgInLmRS9rnCCZEwgq8glMakAnnYMDxcKUF5sNUGNkJuAom4xteEZfdx8O IkuB/HghGQgtLVlgF9BB5uCLhPRCZYlqSPZBlrRcpIdqHcqzFRufZHUjmtIY qQddXv6H3D7xqaGiGh3M2YRdHWm4Rk1PGvddkzluMSIsWQUa2UbwGepFV9w5 GOUWERQwVFmLVLkGBEN2IWlgJbyHikh6QOefi13Q5FWOIVm6BY8jRHYmcGmW eigAbW7RQQgYFLtAUQgwtCUeuQomnjTLdvVjdyiMYGNkJ3yggE05rcGXIs0G 9iwqBJICwKv+HbKWgU2GrdHnIChMqio6rQJwbbqhedYukQoqEm9gSc6blx4E ZIqvZCjou8aAo9wLF5YCY6ZHAHkeLBgJdAGwbxef+DqIvBFrA0CLFgfWAVsA dNvFZqiAzGtyACRacgUFcKuGMTzucWpcxODjWMmRfTcUoXGOsjNcPd8TgcFA w4XcTSpZY2sgR6c67jsHVNx0B6ndzGQiJAi2KxSNBpN104FVAJ3GahgwdSDh Ii1F2cAcgG7TQttklzXL7hF3CglpcwDJQJNAwU1qQPB2IP/yPDdAB8h8sAeO GdV233s0nkLAUdBdCwKSpwvhUFEvzjiqgWcTQegdVsfuzZjv4ez+FFT5zDpc t3uYMaEeNzK7FLX7drvDu1VA1j2/RxH8PbcTHlrCNi3vzNFhSF/O7XezNgJd G2ezM+fKH6S5d5NBWZPnqOw8dtLv/A1gByVkn2/K+ITteGzth0aCBxg4H/QB oLqH/eSGv3IMUDAe6MACiCeZEQAAfauI2xgOcrQHVcCB3XGAyu7ROPCxDxjJ 6oIHGliBECigO917R+MgVsBaHGCDFThOBTDQIONsAIK0aNz6PliLmvVEMr1h QA21h5EY3q+FtBgaF8aXggp04Fy7WRRGxDXBbAwFAA0YAQnG950nys9kRTQi AZEolKJ8gHjV2UDMWLMnjJzKgzxMok3+FFAsEBCuN+uSnBTdGJcdxrGMUAxN bxoArNCogQI4zMSp4KCNobzFkBU4lv62YJKTPLB+RyQjKobCQAtWwCZRHMGx bAKQATLSiqB8nhNxM50TQCeF2fjXCU7pjJowjToVcMwQtVcTGGrjXywMQwgE x8pJ0mWXoXHgJTGZAj9GYZjZ8BEbK+CAr0xHAzZJZCbsBwdoOqNLrHkNIb8o mGoC4CDcJIM3mwHO0LymJuQMDAPYVsoxhsEE2nCMA1izhXnG80FR8aU2wgZH KYggnwDYJyRt8kjWnEBvFGwmHA6aja4cIDQQ+uQad6NMbSoScBPVxuEOwMQU dJFNu1HjMvH+Eag4gCkYhytASb/jJONg85wRdWk5AkCAAwLoCyhlTeUwMks4 vDQYPPWp0yqg0ts5BpblCKYYjgoMT1UwBchR6XSeihEMxKGN3wTAVZGTMUVx 9SF+2FQw6CLGwJA1ldrrClThEQe1AqMrEmAicsxpHMPR8z5wsGst8MpEPMJV kMabazbS+g4ARMB9hi0ka3pTE4wwthwEOABkK7AuyUISOpaFwwcE60ICVDCy UdyCp0JLBhCwJ5+m5Q1nDxu0LQTgKA+xChlM8NqKnlO2nd0NcroSwqrAwTX3 eCBwaXuxCrAVI7odQwp6a8W8Cga1kzUebnMLh+neIxLjw64huxL+RvdIwbvv kEAB/oac4PKTANZLDhn8A5CeNte9xylJGFMxBvriowBHay9z49IBQh1EOU9Y TXskcN8Bm7QyXDBwRnbbxOQoNC7IuSliI4xTtEq3wvg4gMO+E4KgxiWjEnjA bYpIBriAR3MkNrHTKLA2xLE2DCY9cAgC852mRqYLCBgKi6W7x3uIgMdMlXGA PLDFh3YYsFPwT5HfcbQLKjluD1XsYsXwlimXo8pPDKRD/wplKXQ5I8WtwAjT 1oFt/XMw9LvxeXNcDo1VAoEKFHNoSizhu+CYzo3klgQ6QJ/eHOvNJfYoKj4M Vmdk7DNurYAFAIDMyFQzjIxObnSehBz+DFDaOCfBtBiWijUANDQw1fH0tCLj QIHCZgqgabQzuqI1uVRAw6xRY3xfbWZSl5qBENIqa55bRPM2AcMAoZhkKsAB m3TSpKEOI4KXQOD2mPrHYZacrvc7bSVUGyAFWOB1I7lRSwewiN1Owrfru2rk wLOBAeizb/6cAtI6gwIEmFZ1qvnFCJy7iI+QArrsfW8C5Ok7xwwaARQNDFiv +yAUYECegLrqFGzA1R6OQnoIrg0auvhwJ+QxxjMOhbTtt4Rn7A1tOX6YObv4 5BVAgQmqg6gTw9wLUzA5zFHwnZq1SNYnz3lcbi4stQXSy0F3OYiJ7piRJx0K dyM6F+QqdTX+SCE9GX2HpwgQgLIB4N9Vv3pckO6MbOKhslXvgtLJ3gyztwE6 DPfzE5AMELezgS67hvna+YAAeQvC7msgbtojHAW6s4HqqwD8GuI8+Fs04W5s RzwqFK+GaDceCqcGuiXWNoc2lOQA8qa8F0A7+FxCgT6a/wJ0AtB5NUjgJBJA 5MLZIPpYrbTqjmdCc5tE5i5IXvJeqP3U61L6gDth94fvPRdqpjLP0P72tN9u 1Y1/7EjzHqoQjXCOhM8Frhe/5NZPPvaJvwfub4Etcb/3E7KXeqCO3+9cMD9Q 4S9nJdyRD8rfQk3sEvvFQ5/2WjZkTfAk9gZ8tid9xvN86IN2aff+BMRTgF/n XNZTM5WQEgq4B3A3eHM3bmfHU2kWKyfxQghyAAVQgiWoB11Bf2XmbRxYep+k gi1XfWDkgsYDg6Qhg0NHgxXQdxr4eD+mgynWg0xwai8HhEK4BImigzQYXSwo GErogsZWBMvmDAnUASRwhTzXOFm4hVp0hV5IAh0QhmIYhvsVhUQwhYkghlc4 Ajz3bGhjHCewhVnYhV8IhmMYhtS1BmY4BLXFBmI4AoDIc284iIQIF1ZDb2PX AYEoiIXYiI7YR2LgP484iZQoUWFAhJWYiY7oTMeniZ74iJyIg584imgTirpH iqjYNB+WiqyIL6vYirCoHpEIhyZQi7v+YQJhETrpgS4m0Em1aItI8ous8Ysy cwLC2B2zuBsfcBMVBxfLeBO1tjnWZAIjkwIlUI2C4WSfFhmeZhPRSI1zZCY3 kRvTIQZu6Iym5mmJQo0LUAImME+YmAILwB3L2CCe1hrYKBmedgLzJBnUGI3o aEfFtBujZhzLGD/l1kflZk3cCCzzBCwLUGlw1j/xeI8X4FlxQY0XAALxeJDN lJCConSh8YwDGRgXGRgA0IzXuIyetoz+81AKsADR2I16lpE2IZPi+BYgkI+h UZDKeC7x+JGg8Y+hMUopcBMYxZOC4WkxGRpEOZLXpo7G4ZOs4ZFO2R8lsC1B 6WkNcpESCWfDH+CO+jgyDCkYGimWunIuy9iMyQN102GVobGTkBaXUHSNkqiN zWiRICmNSJmW0XGO9rR+3ZE7J1ACJQCYZ+SMt3iM2agbveiPjGmWwGgcBTWA sXiZg3lPmLmZw4iInPmZuOOZoMmZlXkIogUCuTOaUmWarEkEH4CagAmLptia tDkEr5mamjibtbmbRZCLuEmIusmbwokEr3mYlBicw5mcTMCRg6iczmmatxmb LvOc1AmdqDmV1ZmdwhmW6aGd3vmdSxAEADs=} } proc __tcl3dLogoSetWackelDelay {mouseX mouseY} { global __tcl3dLogoWackel set __tcl3dLogoWackel(wackelSpeed) [expr $mouseX + $mouseY] } proc __tcl3dLogoShrinkWindow {tw dir} { set width [winfo width $tw] set height [winfo height $tw] set x [winfo x $tw] set y [winfo y $tw] set inc -1 if { [string compare $dir "x"] == 0 } { for { set w $width } { $w >= 20 } { incr w $inc } { wm geometry $tw [format "%dx%d+%d+%d" $w $height $x $y] update incr inc -1 } } else { for { set h $height } { $h >= 20 } { incr h $inc } { wm geometry $tw [format "%dx%d+%d+%d" $width $h $x $y] update incr inc -1 } } } proc __tcl3dLogoStartWackel {b} { global __tcl3dLogoWackel if { $__tcl3dLogoWackel(onoff) == 0 } { set __tcl3dLogoWackel(onoff) 1 __tcl3dLogoWackel $b } else { __tcl3dLogoStopWackel $b } } proc __tcl3dLogoStopWackel {b} { global __tcl3dLogoWackel set __tcl3dLogoWackel(onoff) 0 set __tcl3dLogoWackel(curImg) 1 after $__tcl3dLogoWackel(wackelSpeed) __tcl3dLogoWackel $b } proc __tcl3dLogoSwitchLogo {b} { global __tcl3dLogoWackel if { $__tcl3dLogoWackel(onoff) == 1 } { set __tcl3dLogoWackel(onoff) 0 } set __tcl3dLogoWackel(curImg) [expr 1 - $__tcl3dLogoWackel(curImg)] $b configure -image $__tcl3dLogoWackel($__tcl3dLogoWackel(curImg)) } proc __tcl3dLogoWackel {b} { global __tcl3dLogoWackel if { $__tcl3dLogoWackel(onoff) == 1 } { set __tcl3dLogoWackel(curImg) [expr 1 - $__tcl3dLogoWackel(curImg)] $b configure -image $__tcl3dLogoWackel($__tcl3dLogoWackel(curImg)) update after $__tcl3dLogoWackel(wackelSpeed) "__tcl3dLogoWackel $b" } } proc __tcl3dOdeSourcePkgs {dir} { source [file join $dir tcl3dOdeQuery.tcl] load [file join $dir tcl3dOde[info sharedlibextension]] tcl3dOde source [file join $dir tcl3dOdeUtil.tcl] } proc __tcl3dOglCreateSafeOrDebugFunc {glFunc debugFlag normalFlag {printCmd puts}} { if { [info commands ${glFunc}Standard] eq "${glFunc}Standard" } { rename ::${glFunc} {} rename ::${glFunc}Standard $glFunc } if { $normalFlag } { return } set code [format " if { \[__%sAvail\] } { if { %d } { %s \"%s \$args\" } eval %sStandard \$args } else { %s \">>> %s \$args (N/A in driver)\" }" $glFunc $debugFlag $printCmd $glFunc $glFunc $printCmd $glFunc] uplevel "proc ${glFunc}Safe args { $code }" rename ::$glFunc ::${glFunc}Standard rename ::${glFunc}Safe ::$glFunc } proc __tcl3dOglFindExtension {type val} { set extList [tcl3dOglGetExtSuffixes] if { [string compare $type "cmd"] == 0 } { set typeList [info commands gl*] set fmtStr "%s%s" } else { set typeList [info globals GL_*] set fmtStr "%s_%s" } set result {} foreach ext $extList { set typeExt [format $fmtStr $val $ext] if { [lsearch -exact $typeList $typeExt] >= 0 } { lappend result $typeExt } } return $result } proc __tcl3dOglSourcePkgs {dir} { # Source the files from sub-module tcl3dOgl source [file join $dir tcl3dOglQuery.tcl] source [file join $dir tcl3dOglStateList.tcl] source [file join $dir tcl3dOglHelp.tcl] load [file join $dir tcl3dOgl[info sharedlibextension]] tcl3dOgl source [file join $dir tcl3dShapesGlut.tcl] # Note: This file must be loaded after the wrapped OGL library, # because of the redefined glMultiDrawElements function. source [file join $dir tcl3dOglUtil.tcl] # Source the file from former sub-module tcl3dDemoUtil source [file join $dir tcl3dDemoHeightMap.tcl] # Source the file from former sub-module tcl3dUtil source [file join $dir tcl3dGuiAutoscroll.tcl] source [file join $dir tcl3dGuiWidgets.tcl] source [file join $dir tcl3dGuiConsole.tcl] source [file join $dir tcl3dGuiToolhelp.tcl] source [file join $dir tcl3dUtilColors.tcl] source [file join $dir tcl3dUtilInfo.tcl] source [file join $dir tcl3dUtilFile.tcl] source [file join $dir tcl3dUtilTrackball.tcl] source [file join $dir tcl3dUtilLogo.tcl] source [file join $dir tcl3dUtilCapture.tcl] source [file join $dir tcl3dVecMath.tcl] source [file join $dir tcl3dVector.tcl] } proc __tcl3dOsgSourcePkgs {dir} { source [file join $dir tcl3dOsgQuery.tcl] load [file join $dir tcl3dOsg[info sharedlibextension]] tcl3dOsg load [file join $dir tcl3dOsgDB[info sharedlibextension]] tcl3dOsgDB load [file join $dir tcl3dOsgFX[info sharedlibextension]] tcl3dOsgFX load [file join $dir tcl3dOsgGA[info sharedlibextension]] tcl3dOsgGA load [file join $dir tcl3dOsgManipulator[info sharedlibextension]] tcl3dOsgManipulator load [file join $dir tcl3dOsgOpenThreads[info sharedlibextension]] tcl3dOsgOpenThreads load [file join $dir tcl3dOsgParticle[info sharedlibextension]] tcl3dOsgParticle load [file join $dir tcl3dOsgSim[info sharedlibextension]] tcl3dOsgSim load [file join $dir tcl3dOsgShadow[info sharedlibextension]] tcl3dOsgShadow load [file join $dir tcl3dOsgTerrain[info sharedlibextension]] tcl3dOsgTerrain load [file join $dir tcl3dOsgText[info sharedlibextension]] tcl3dOsgText load [file join $dir tcl3dOsgUtil[info sharedlibextension]] tcl3dOsgUtil load [file join $dir tcl3dOsgViewer[info sharedlibextension]] tcl3dOsgViewer source [file join $dir tcl3dOsgUtil.tcl] source [file join $dir tcl3dOsgKeysym.tcl] source [file join $dir tcl3dOsgBitmaps.tcl] } proc __tcl3dSDLSourcePkgs {dir} { source [file join $dir tcl3dSDLQuery.tcl] load [file join $dir tcl3dSDL[info sharedlibextension]] tcl3dSDL source [file join $dir tcl3dSDLUtil.tcl] } proc __tcl3dScrolledFrameCfgCB {wid width height} { set newSR [list 0 0 $width $height] if { ! [string equal [$wid.canv cget -scrollregion] $newSR] } { $wid.canv configure -scrollregion $newSR } } proc __tcl3dSourcePkgs {dir} { set subPkgs [list tcl3dogl tcl3dgauges tcl3dcg tcl3dftgl tcl3dsdl tcl3dgl2ps tcl3dode tcl3dosg] foreach pkg $subPkgs { set retVal [catch {package require $pkg} ::__tcl3dPkgInfo($pkg,version)] set ::__tcl3dPkgInfo($pkg,avail) [expr !$retVal] } package provide tcl3d 0.4.1 } proc _tcl3dTbAnimate {toglwin} { global __tcl3dTB tcl3dTrackballAddQuats $__tcl3dTB(lastQuat,$toglwin) $__tcl3dTB(curQuat,$toglwin) $__tcl3dTB(curQuat,$toglwin) $toglwin postredisplay set __tcl3dTB(afterId,$toglwin) [after idle "_tcl3dTbAnimate $toglwin"] } proc _tcl3dTbGetTimeMS {toglwin} { global __tcl3dTB return [expr int ([tcl3dLookupSwatch $__tcl3dTB(swatch,$toglwin)] * 10)] } proc _tcl3dTbStopIdleFunc {toglwin} { global __tcl3dTB if { [info exists __tcl3dTB(afterId,$toglwin)] } { after cancel $__tcl3dTB(afterId,$toglwin) } } proc acBlastNPourTous {{Banque human} {LesNoms ""}} { global RepertoireDuGenome global GardeToutBlastNPourTous global TestExistenceBlastNPourTous JeMeSignale if {$LesNoms == {}} { set Liste [ListeDesPABs] } else { set Liste $LesNoms } set NomDeLaBanque "/blast/$Banque" while { ! [file exists "$NomDeLaBanque.nhr"] && ! [file exists "$NomDeLaBanque.nal"]} { if {[OuiOuNon "The blastn database $NomDeLaBanque doesn't exist.\n Do I cancel BlastNPourTous ?"]} { return "" } FaireLire "Please complete the full name of the blastn database" set NomDeLaBanque [Entre "/genomics/link/"] set Banque [file tail $NomDeLaBanque] } set Repertoire "$RepertoireDuGenome/blastn$Banque" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } if {[OnTraiteDesCDNAs] && $Banque=="human" && ! [file exists "$RepertoireDuGenome/blastn"]} { set Link "$RepertoireDuGenome/blastn" if {[OuiOuNon "Do I create a link \n $Link -> \n $Repertoire\n ?"]} { exec ln -s $Repertoire $Link } } if { ! [file exists "$RepertoireDuGenome/nucmask"]} { if {[OuiOuNon "Do You want to run RepeatMasker for all ?"]} { RepeatMaskerForAll } } if {[info exists CommandeBlastNPourTous]} { set CommandeBlast $CommandeBlastNPourTous if {[info exists GardeToutBlastNPourTous]} { set GardeTout $GardeToutBlastNPourTous } else { setGardeTout 0 } if {[info exists TestExistenceBlastNPourTous]} { set TestExistence $TestExistenceBlastNPourTous } else { set TestExistence 1 } } else { set GardeTout 0 set TestExistence 1 set BlastNDataBase [LocaliseBlastNDataBase $NomDeLaBanque] if {$BlastNDataBase==""} { return "" } set CommandeBlast "blastall -p blastn -i \$FichierTFA -o \${FichierBlast}.encours -d $BlastNDataBase -v 250 -K 0 -b 250 -e 10.0 -F T -a 4" if {[OuiOuNon "Do You want to edit the Blast command ?" 0]} { set CommandeBlast [Entre $CommandeBlast] if {$CommandeBlast==""} { return "" } } while {[llength [glob -nocomplain "$Repertoire/*"]]> 0} { if {[OuiOuNon "Some files exist in $Repertoire\nDo I keep all of them ?"]} { set TestExistence 1 set GardeTout 1 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I replace all of them ?"]} { set TestExistence 0 set GardeTout 0 break } elseif {[OuiOuNon "Some files exist in $Repertoire\nDo I ask for each ?"]} { set TestExistence 1 set GardeTout 0 break } } set CommandeBlastNPourTous $CommandeBlast set GardeToutBlastNPourTous $GardeTout set TestExistenceBlastNPourTous $TestExistence } set TestLongueurMinimale [OnTraiteDesCDNAs] set SeuilLongueur 9 foreach Nom $Liste { if {[PasTouche $Nom]} { continue } set FichierTFA "" foreach Rep {nucMaskAndReMask nucmask nuctfa} { set FichierTFA "$RepertoireDuGenome/$Rep/$Nom" if {[file exists $FichierTFA]} { break } } if { $FichierTFA=="" || ! [file exists $FichierTFA]} { Warne "$FichierTFA doesn't exist." FinPasTouche $Nom continue } set FichierBlast "$Repertoire/$Nom" if {$TestLongueurMinimale} { set LeTFA [LesLignesDuFichier $FichierTFA] set Seq [join [lrange $LeTFA 1 end]] regsub -all -nocase "N" $Seq "" SeqSansN if {[string length $SeqSansN]<$SeuilLongueur} { FinPasTouche $Nom continue } } if {$GardeTout && [file exists $FichierBlast] } { FinPasTouche $Nom continue } if { $TestExistence && [file exists $FichierBlast] } { if {[OuiOuNon "$FichierBlast already exists\nDo I keep it ?"]} { FinPasTouche $Nom continue } } Espionne "Je vais lancer blastn sur $FichierBlast" if {[catch {eval exec $CommandeBlast} Message]} { Espionne "Problem with $FichierBlast" Espionne $Message } if {[file exists "${FichierBlast}.encours"]} { file rename -force "${FichierBlast}.encours" $FichierBlast } else { Espionne "${FichierBlast}.encours doesn't exist ... bouhouhouhou !" } FinPasTouche $Nom } } proc acBlastXPourTous {{NomATraiter ""} {Banque ""}} { global RepertoireDuGenome if {$Banque==""} { set BlastXDataBase "/blast/protall" } else { if {[regexp "/" $Banque]} { set BlastXDataBase $Banque } else { set BlastXDataBase "/blast/$Banque" } } set RepFileMask "$RepertoireDuGenome/nucmask" set Repertoire "$RepertoireDuGenome/blastx" if { ! [file exists "$Repertoire"]} { File mkdir $Repertoire } if {$NomATraiter == ""} { set Liste [ListeDesPABs] } else { if {[regexp " " $NomATraiter]} { regsub -all " " $NomATraiter " " NomATraiter set Liste [split $NomATraiter " "] } else { set Liste [list $NomATraiter] } } set CommandeBlast "blastall -p blastx -i \$FichierTFA -o \$FichierBlast.encours -d $BlastXDataBase -a 4 -v 50 -b 50 " if {[OuiOuNonMemo "Do You want to edit the Blast command ?" 0]} { set CommandeBlast [Entre $CommandeBlast] if {$CommandeBlast==""} { return "" } } set CommandeBlastXPourTous $CommandeBlast set TestLongueurMinimale [OnTraiteDesCDNAs] set SeuilLongueur 9 foreach Nom $Liste { set FichierTFA "" foreach Rep {nucMaskAndReMask nucmask nuctfa} { set FichierTFA "$RepertoireDuGenome/$Rep/$Nom" if {[file exists $FichierTFA]} { break } } if { $FichierTFA=="" || ! [file exists $FichierTFA]} { Warne "$FichierTFA doesn't exist." continue } set FichierBlast "$Repertoire/$Nom" if {$TestLongueurMinimale} { set LeTFA [LesLignesDuFichier $FichierTFA] set Seq [join [lrange $LeTFA 1 end]] regsub -all -nocase "N" $Seq "" SeqSansN if {[string length $SeqSansN]<$SeuilLongueur} { continue } } if {[file exists $FichierBlast] } { continue } Espionne "Je vais lancer BlastX \n de $FichierTFA \nsur $BlastXDataBase \nresultat dans $FichierBlast" if {[catch {eval exec $CommandeBlast} Message]} { Espionne "Problem with $FichierBlast" Espionne $Message } if {[file exists "${FichierBlast}.encours"]} { file rename -force "${FichierBlast}.encours" $FichierBlast } else { Espionne "${FichierBlast}.encours doesn't exist ... bouhouhouhou !" } } } proc acCreeFichiersProtTFAEtProtEMBL {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] CreeFichiersProtTFAEtProtEMBL $Liste } proc acCreeLesNotes {{LesNoms ""} {Keep ""}} { #revoir pour la bande cytologique global RepertoireDuGenome set RepNotes "[RepertoireDuGenome]/notes" if { ! [file exists $RepNotes]} { File mkdir $RepNotes } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set Liste [ListeDesPABs]} else {set Liste [split $LesNoms " "]} set FichierClusters "[RepertoireDuGenome]/fiches/clusters" if {[file exists $FichierClusters]} {set Clusters 1} else {set Clusters 0} foreach Nom $Liste { Espionne $Nom if {$Keep && [file exists "$RepNotes/$Nom"]} { continue } set Note {} #Clusters if {$Clusters==1} { #le fichier jumeaux est une copie de jumeaux_Overlap set NbJumeaux [NombreDeJumeauxOuListeDesJumeaux $Nom $FichierClusters] if {$NbJumeaux!=0} { set JR [JumeauRepresentatif $Nom] if {$JR!=$Nom} { #set CC [CodeClone $JR] lappend Note "Name" "$Nom" lappend Note "Belongs to the cluster of" "$JR ($NbJumeaux clones)" } else { lappend Note "Name" "$Nom" lappend Note "Head of the cluster" "$NbJumeaux clones" } } else { lappend Note "Name" "$Nom" } } else {lappend Note "Name" "$Nom"} lappend Note "" "" #Identites if {[file exists "$RepertoireDuGenome/nuctfa/$Nom"]} { lappend Note "cDNA length" [string length [QueLaSequenceDuFichierTFA "$RepertoireDuGenome/nuctfa/$Nom"]] } set Clone [CodeClone $Nom] set Owner [OwnerOfCDNA $Nom] lappend Note "Code in the Access database" $Clone lappend Note "Owner in the Access database" $Owner if {[OnTraiteDesAffymetrix]} { set Access [AffymetrixAccess $Nom] set DE [ExtraitInfo $Nom "GBtagsDefinition"] lappend Note "GBtags accession number" $Access lappend Note "GBtags definition" $DE } #RepeatMasker set TypeMask [QuelMasqueAvantReMasking $Nom] Espionne $TypeMask set PourcentMask [ExtraitInfo $Nom "RMPourcent"] lappend Note "RepeatMasker results" "$TypeMask ( $PourcentMask % )" set TypeRepeat [ExtraitInfo $Nom "RM"] if {$TypeRepeat!=""} { lappend Note "" "$Nom contains $TypeRepeat sequence(s)" } #ReMasking set TypeMask2 [QuelMasqueApresReMasking $Nom] Espionne $TypeMask2 set PourcentReMask [QuelPourcentageApresMRM $Nom] lappend Note "ReMasking results" "$TypeMask2 ( $PourcentReMask % )" #BlastN contre le genome humain apres ReMasking set TypeLoc [PolyLocalise $Nom] #polylocalise a ete obtenu en lancant proc FichierPolyLocalise de Fred Espionne "localisation : $TypeLoc" lappend Note "BlastN human results" $TypeLoc set LesCopains [LesMeilleursCopainsDuBlast $Nom "blastnhuman"] Espionne [lindex $LesCopains 0] lappend Note "" [lindex $LesCopains 0] foreach Copain [lrange $LesCopains 1 end] { lappend Note "" $Copain } #GenScan set GS [ExtraitInfo $Nom "GS"] if {$GS != "" } {lappend Note "GenScan results" $GS} set GS3 [ExtraitInfo $Nom "GS3"] if {$GS3 != "" } {lappend Note "" "$Nom is $GS3"} set GSE [ExtraitInfo $Nom "GSE"] if {$GSE != "" } {lappend Note "" "$Nom is $GSE"} #BlastP set LesCopains [MeilleursCopains $Nom] if {[lindex $LesCopains 0]!="No blastp file available"} { lappend Note "BlastP results" [lindex $LesCopains 0] foreach Copain [lrange $LesCopains 1 end] { lappend Note "" $Copain } } set CvP [ConsacreVersusPredite $Nom] Espionne $CvP if {$CvP!="No values available"} { lappend Note "Prediction_vs_BlastPHit" $CvP } #BlastX set LesCopains [LesMeilleursCopainsDuBlast $Nom "blastx"] Espionne [lindex $LesCopains 0] if {[lindex $LesCopains 0]!="No hits found"} { lappend Note "BlastX results" [lindex $LesCopains 0] foreach Copain [lrange $LesCopains 1 end] { lappend Note "" $Copain } } #mRNA complete cds set ResultatRecherche [ExtraitmRNADesInfosAutomatiques $Nom] Espionne $ResultatRecherche if {$ResultatRecherche != ""} { lappend Note "mRNA complete cds" $ResultatRecherche } #BlastN contre genembl, EST, AffyHS foreach {Banque Titre} {blastngenembl "BlastN Genembl" blastnest "BlastN Est" blastnaffy "BlastN Affymetrix"} { set LesCops [LesMeilleursCopainsDuBlast $Nom $Banque] if {$LesCops=={}} { lappend Note "$Titre results" "values not yet available" } elseif {[lindex $LesCops 0]=="File not yet available"} { lappend Note "$Titre results" "values not yet available" } elseif {[lindex $LesCops 0]=="No value"} { lappend Note "$Titre results" "no value available" } elseif {[lindex $LesCops 0]=="No hit"} { lappend Note "$Titre results" "no hit" } else { set PremiereFois 1 foreach Cop $LesCops { set Genre "Inconnu" set Espece "inconnu" scan $Cop "%s %s %s %s %s" BID Access Expect Genre Espece set OS "$Genre $Espece" set DE [join [lrange [split $Cop " "] 5 end] " "] if { ! [regexp -nocase "Homo sapiens" $OS]} { continue } if {$PremiereFois} { lappend Note "$Titre results" "$BID $Access $Expect $DE" set PremiereFois 0 continue } else { lappend Note "" "$BID $Access $Expect $DE" } } } } #Affymetrix overlaps if {![OnTraiteDesAffymetrix]} { set LesAffys [LesAffymetrixEnOverlap $Nom] if {$LesAffys!={}} { set TexteAffy "[join $LesAffys " "]" } else { if {[AffymetrixAssocie]=="NoAssociatedAffymetrix"} { set TexteAffy "not tested" } else { set TexteAffy "not detected" } } lappend Note "Affymetrix" $TexteAffy } #Traitement pour tous Espionne "leslignes" set LesLignes {} foreach {T V} $Note { if {$T=="Name"} { lappend LesLignes $Nom continue } if {$T!="" || $V!=""} { set L [expr 37 - [string length $T]] if {$T!=""} { set C "." ; set S ":" } else { set C " " ; set S " " } set P [string repeat $C $L] lappend LesLignes [format "%s %s %s %s" $T $P $S $V] } else { lappend LesLignes "" } } SauveLesLignes $LesLignes dans "$RepNotes/$Nom" Espionne "Sauve" } return "" } proc acCreeLesRapportsPourAccess {{LesNoms ""} {Keep ""}} { global RepertoireDuGenome set RepRapports "$RepertoireDuGenome/rapportsaccess" if { ! [file exists $RepRapports]} { File mkdir $RepRapports } if {$Keep==""} { set Keep 0 } else { set Keep 1 } if {$LesNoms==""} {set Liste [ListeDesPABs]} else {set Liste [split $LesNoms " "]} foreach Nom $Liste { if {$Keep && [file exists "$RepRapports/$Nom"]} { continue } Espionne $Nom set Rapport {} #Generalites lappend Rapport "GscopeCode: $Nom" set codeCl [CodeClone $Nom] Espionne "code clone: $codeCl" lappend Rapport "CodeClone: $codeCl" set Longueur [SeqLength $Nom] lappend Rapport "Length: $Longueur" if {[OnTraiteDesAffymetrix]} { set Access [AffymetrixAccess $Nom] lappend Rapport "AffymetrixAccess: $Access" set DE [ExtraitInfo $Nom "GBtagsDefinition"] lappend Rapport "Description: $DE" } else { set User [OwnerOfCDNA $Nom] lappend Rapport "User: $User" } #Clusters set FichierClusters "$RepertoireDuGenome/fiches/clusters" if {[file exists $FichierClusters]} { #le fichier jumeaux est une copie de jumeaux_Overlap if {[NombreDeJumeauxOuListeDesJumeaux $Nom $FichierClusters]!="0"} { set JR [JumeauRepresentatif $Nom] set CC [CodeClone $JR] lappend Rapport "JR: $JR $CC" } } #RepeatMasker set TypeMask [QuelMask $Nom] Espionne $TypeMask lappend Rapport "MaskType: $TypeMask" set PourcentMask [ExtraitInfo $Nom "RMPourcent"] lappend Rapport "MaskedProportion: $PourcentMask" set TypeRepeat [ExtraitInfo $Nom "RM"] if {$TypeRepeat!=""} { lappend Rapport "RepeatType: $TypeRepeat" } #BlastN contre le genome humain set PolyLoc [PolyLocalise $Nom] Espionne $PolyLoc lappend Rapport "LocType: $loc" if { $PolyLoc!="NoBlastFile" && $PolyLoc!="NoLocalization"} { set MeilleureLoc [MeilleureLocalisationSurChroContig $Nom] scan $MeilleureLoc "%s %s %d %d %s" Chro Contig Debut Fin Orient regsub "HS" $Chro "" Chro lappend Rapport "Chromosome: $Chro" lappend Rapport "Contig: $Contig" lappend Rapport "Begin: $Debut" lappend Rapport "End: $Fin" lappend Rapport "Orientation: $Orient" } #BlastN contre genembl et est, et TBlastN contre est foreach {Banque Titre} {blastngenembl Genembl} { set LesCops [LesMeilleursCopainsDuBlast $Nom $Banque] if {$LesCops=={}} { lappend Rapport "${Titre}Def: values not yet available" } elseif {[lindex $LesCops 0]=="File not yet available"} { lappend Rapport "${Titre}Def: values not yet available" } elseif {[lindex $LesCops 0]=="No value"} { lappend Rapport "${Titre}Def: no value available" } elseif {[lindex $LesCops 0]=="No hit"} { lappend Rapport "${Titre}Def: no hit" } else { set PremiereFois 1 set Autre 0 foreach Cop $LesCops { set Genre "Inconnu" set Espece "inconnu" scan $Cop "%s %s %s %s %s" BID Access Expect Genre Espece set OS "$Genre $Espece" set DE [join [lrange [split $Cop " "] 5 end] " "] if { ! [regexp -nocase "Homo sapiens" $OS]} { continue } if {$PremiereFois} { lappend Rapport "${Titre}Def: $DE" lappend Rapport "${Titre}Access: $BID" set PremDE $DE set PremiereFois 0 continue } if {$DE!=$PremDE} { incr Autre } } lappend Rapport "${Titre}More: [expr $Autre > 0]" } } #Affymetrix overlaps if {![OnTraiteDesAffymetrix]} { set LesCC [LesCodeCloneDesAffymetrixEnOverlap $Nom] if {$LesCC!={}} { set TexteAffy "Affymetrix: [join $LesCC " "]" } else { if {[AffymetrixAssocie]=="NoAssociatedAffymetrix"} { set TexteAffy "Affymetrix: not tested" } else { set TexteAffy "Affymetrix: not detected" } } lappend Rapport $TexteAffy } Espionne "fin" SauveLesLignes $Rapport dans "$RepRapports/$Nom" } return "" } proc acCrossValidationPourTous {{NomATraiter ""} {Save ""}} { global RepertoireDuGenome set EspecesSelectionnees "" set LesOrganismesAEtudier [LaSelectionDeNoe] foreach OrganismeAEtudier $LesOrganismesAEtudier { if {$EspecesSelectionnees != ""} {append EspecesSelectionnees "|"} scan $OrganismeAEtudier "%s %s" Genre Espece append EspecesSelectionnees "$Espece" } if {$NomATraiter == ""} { set Liste [ListeDesPABs] } else { if {[regexp " " $NomATraiter]} { regsub -all " " $NomATraiter " " NomATraiter set Liste [split $NomATraiter " "] } else { set Liste [list $NomATraiter] } } set Resultats "" foreach Nom $Liste { Espionne "$Nom" set MeilleurTirCroise [join [CrossValidation $Nom $EspecesSelectionnees] "\t"] append Resultats "$MeilleurTirCroise\n" } Espionne $Resultats set RepFiches "$RepertoireDuGenome/fiches" set File "$RepFiches/CrossValidation" if {$Save == ""} { if {[OuiOuNon "Would you want to save this results in $File?"]} {set Save "Save"} } if {$Save == "Save"} {Sauve $Resultats dans $File} return "$Resultats\n\nSave in $File" } proc acDbClustalPourTous {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] DbClustalPourTous $Liste } proc acFichierContigAndProtPourTous {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] FichierContigAndProtPourTous $Liste } proc acFichierProtAndmRNAPourTous {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] FichierProtAndmRNAPourTous $Liste } proc acFichierRecapitulatif {Nom {Projet ""} {Lab ""} {Protocol ""} {Def spe} {Nature DNA} {Orga ""} {IdMin 0.8} {IdMax 0.95}} { if {$Nom==""} {return} set RepRecap "[RepertoireDuGenome]/bilan" if {![file exists $RepRecap]} {File mkdir $RepRecap} set FichierRecap "$RepRecap/$Nom" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierNuctfa "[RepertoireDuGenome]/nuctfa/$Nom" set FichierLocHumanG "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human" set FichierLocHumanG_mrna "[RepertoireDuGenome]/Localisation/mRNAHsapLocalisation_Human" set FichierLocHumanG_prot "[RepertoireDuGenome]/Localisation/ProttfaLocalisation_Human" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" #set FichierProttfaExonicMap "[RepertoireDuGenome]/prottfaexonicmap/$Nom" set FichiermRNAHumanExonicMap "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap/$Nom" set FichiermRNAMurinExonicMap "[RepertoireDuGenome]/mrnatfa_Mus_musculus_exonicmap/$Nom" set FichiermRNARatExonicMap "[RepertoireDuGenome]/mrnatfa_Rattus_norvegicus_exonicmap/$Nom" set FichierClustMSF "[RepertoireDuGenome]/msf/$Nom.clust" set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set FichierDefinition "[RepertoireDuGenome]/fiches/DefinitionsConsensus" set FichierBest "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" set FichierPF "[RepertoireDuGenome]/pestfind/pest$Nom.embl" set FichierFEF "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_promoter/$Nom.firstef" set FichierHydrophobicity "[RepertoireDuGenome]/fiches/hydrophobicity" ########## #PROJET### ########## if {$Projet!=""} { set LeTexte [list "*********************************************************************"] lappend LeTexte "PROJECT: $Projet" } else { set Projet [RepertoireDuGenome] set Projet [file tail $Projet] set LeTexte [list "PROJECT: $Projet"] } lappend LeTexte "" lappend LeTexte "*********************************************************************" ############################################################################# ######## #INPUT## ######## lappend LeTexte "INPUT:" Espionne "$Nom -> From ; Protocol; Access ; Definition ; Organism; Nature; Length" if {$Lab==""} { set Lab $Projet } lappend LeTexte " From: $Lab" #Suppressive Subtractive Hybridization (SSH) if {$Protocol!=""} {lappend LeTexte " Protocol: $Protocol" } if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] != ""} { set AccessSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] lappend LeTexte " Access/Clone: $AccessSeq" } if {$Def=="spe"} { if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] != ""} { set DefinitionSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] lappend LeTexte " Infos: $DefinitionSeq" } } else { if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] != ""} { set DefinitionSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] lappend LeTexte " Definition: $DefinitionSeq" } } if {$Nature=="Protein"} { if {[file exists $FichierProttfa]} { set TailleSeq [TailleDeLaSequenceDuFichierTFA $FichierProttfa] lappend LeTexte " Length: $TailleSeq AA" } } elseif {[file exists $FichierNuctfa]} { set TailleSeq [TailleDeLaSequenceDuFichierTFA $FichierNuctfa] lappend LeTexte " Length: $TailleSeq pb" } if {$Orga=="mouse"} {lappend LeTexte " Organism: Mus musculus"} if {$Orga=="rat"} {lappend LeTexte " Organism: Rattus norvegicus"} if {$Orga=="human"} {lappend LeTexte " Organism: Homo sapiens"} lappend LeTexte " Nature: $Nature" #set OrganismeSeq [OrganismeDuPAB $Nom] #lappend LeTexte " Organism: $OrganismeSeq" #if {$OrganismeSeq == "Homo sapiens"} {set IdDeRef $IdMax} else {set IdDeRef $IdMin} set IdDeRef $IdMin set PIdDeRef [format "%.1f" [expr $IdDeRef * 100]] ###Cluster dans lequel se trouve la sequence#### Espionne "$Nom -> cluster" if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] != ""} { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] lappend LeTexte " Cluster: $Cluster" } ###Les expressions sur les puces affymetrix##### Espionne "$Nom -> expression" if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom LesExpressions] != ""} { set LesTemps [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesPointsTemporels] set LesConditions [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesConditions ] set LaLigneTemps [list [format "%-6s" ""]] foreach Temps $LesTemps {lappend LaLigneTemps [format "%-6s" $Temps]} lappend LeTexte "" lappend LeTexte " Expression:" lappend LeTexte [join $LaLigneTemps ""] foreach Condition $LesConditions { set LaLigneCondition [list [format "%-6s" $Condition]] foreach Temps $LesTemps { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Condition $Condition PointTemporel $Temps Expression] if {$Expr == ""} {lappend LaLigneCondition [format "%-6s" ""];continue} lappend LaLigneCondition [format "%-6.0f" $Expr] } lappend LeTexte [join $LaLigneCondition ""] } } ###Composition ATCG### #....................# ###Les informations relatives au masking, remasking et mrm#### Espionne "$Nom -> Masking ; ReMasking ; Masking and ReMasking" if {[InterrogeBilanMasking $Nom LesEtats] != ""} { lappend LeTexte "" foreach Etat [InterrogeBilanMasking $Nom LesEtats] { if {[InterrogeBilanMasking $Nom Etat $Etat PMasked] == ""} {continue} set PMasked [InterrogeBilanMasking $Nom Etat $Etat PMasked ] set NbRepeat [InterrogeBilanMasking $Nom Etat $Etat NbRepeat] lappend LeTexte " $Etat PMasked: ${PMasked}%" lappend LeTexte " $Etat NbRepeat: $NbRepeat" set LesRepeatsEtLeurEffectif {} foreach Repeat [InterrogeBilanMasking $Nom Etat $Etat LesRepeats] { set n [InterrogeBilanMasking $Nom Etat $Etat Repeat $Repeat n] lappend LesRepeatsEtLeurEffectif [list $Repeat $n] } set LesRepeats {} foreach LeRepeat [lsort -index 1 -integer -decreasing $LesRepeatsEtLeurEffectif] { lappend LesRepeats "[lindex $LeRepeat 0] ([lindex $LeRepeat 1])" } if {$LesRepeats != {}} { lappend LeTexte " $Etat Repeat: [join $LesRepeats " ; "]" #lappend LeTexte [join $LesRepeats " ; "] } } } lappend LeTexte "" lappend LeTexte "**********************************************************************" ######## #OUTPUT# ######## lappend LeTexte "OUTPUT:" #lappend LeTexte " **********************************************" #lappend LeTexte " General points:" lappend LeTexte "" lappend LeTexte " GScopeName: $Nom" lappend LeTexte "" ############################################################################## ###Localisation de la sequence sur le genome humain### Espionne "$Nom -> localisation on human genome" if {[file exists $FichierLocHumanG]} { lappend LeTexte "" lappend LeTexte " Input sequence localisation:" if {[InterrogeLocalisation $FichierLocHumanG Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichierLocHumanG Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] if {$InfoLoc != "MonoLoc"} { lappend LeTexte " WARNING $InfoLoc" } foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation end-1] != "BestLoc" && [lindex $LaLocalisation end-1] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10 ] set F [lindex $LaLocalisation 11 ] set Sens [lindex $LaLocalisation 12 ] set Contig [lindex $LaLocalisation 13 ] set BCyto [lindex $LaLocalisation end-2] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } } } else { lappend LeTexte " WARNING NoLoc" } } if {[file exists $FichierLocHumanG_mrna]} { lappend LeTexte "" lappend LeTexte " Human mRNA sequence localisation:" if {[InterrogeLocalisation $FichierLocHumanG_mrna Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichierLocHumanG_mrna Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] if {$InfoLoc != "MonoLoc"} { lappend LeTexte " WARNING $InfoLoc" } foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation end-1] != "BestLoc" && [lindex $LaLocalisation end-1] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10 ] set F [lindex $LaLocalisation 11 ] set Sens [lindex $LaLocalisation 12 ] set Contig [lindex $LaLocalisation 13 ] set BCyto [lindex $LaLocalisation end-2] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } } } else { lappend LeTexte " WARNING NoLoc" } } if {[file exists $FichierLocHumanG_mrna]} { lappend LeTexte "" lappend LeTexte " Protein sequence localisation:" if {[InterrogeLocalisation $FichierLocHumanG_prot Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichierLocHumanG_prot Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] if {$InfoLoc != "MonoLoc"} { lappend LeTexte " WARNING $InfoLoc" } foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation end-1] != "BestLoc" && [lindex $LaLocalisation end-1] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10 ] set F [lindex $LaLocalisation 11 ] set Sens [lindex $LaLocalisation 12 ] set Contig [lindex $LaLocalisation 13 ] set BCyto [lindex $LaLocalisation end-2] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } } } else { lappend LeTexte " WARNING NoLoc" } } #lappend LeTexte "" lappend LeTexte " **********************************************" #lappend LeTexte " Your protein:" #lappend LeTexte "" ########################### EST mouse###################################### ### Tissue Type ### Espionne "$Nom -> Tissue Type" set TT "no" if {[InterrogeTissueType $Nom LesTissues] != ""} { set TT "yes" lappend LeTexte "" #lappend LeTexte " **********************************************" lappend LeTexte " EST:" lappend LeTexte "" set LesTissues {} foreach Tissue [InterrogeTissueType $Nom LesTissues] { if {$Tissue == ""} {continue} if {$Projet=="Confidential" && [regexp -nocase "liver" $Tissue]} { lappend LesFoies [list $Tissue [InterrogeTissueType $Nom Tissue $Tissue n]] continue } lappend LesTissues [list $Tissue [InterrogeTissueType $Nom Tissue $Tissue n]] } if {$LesTissues != {}} { set LesTissuesEtLeurEffectif {} foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { lappend LesTissuesEtLeurEffectif "[lindex $LeTissue 0] ([lindex $LeTissue 1])" } if {$Projet=="Confidential"} { if {[info exists LesFoies]} { set LesFoiesEtLeurEffectif {} foreach LeFoie [lsort -index 1 -decreasing -integer $LesFoies] { lappend LesFoiesEtLeurEffectif "[lindex $LeFoie 0] ([lindex $LeFoie 1])" } lappend LeTexte " Tissue type: [join $LesFoiesEtLeurEffectif " ; "]" lappend LeTexte " [join $LesTissuesEtLeurEffectif " ; "]" lappend LeTexte "" } else { lappend LeTexte " Tissue type: -" lappend LeTexte " [join $LesTissuesEtLeurEffectif " ; "]" lappend LeTexte "" } } else { lappend LeTexte " Tissue type: [join $LesTissuesEtLeurEffectif " ; "]" } } } ### Development Stage ### Espionne "$Nom -> Development stage" if {[InterrogeDevStage $Nom LesDevStages] != ""} { if {$TT=="no"} { lappend LeTexte "" lappend LeTexte " **********************************************" #lappend LeTexte " Complementary informations:" #lappend LeTexte "" lappend LeTexte " EST:" lappend LeTexte "" } set LesDevStage {} foreach DevStage [InterrogeDevStage $Nom LesDevStages] { if {$DevStage == ""} {continue} lappend LesDevStage [list $DevStage [InterrogeDevStage $Nom DevStage $DevStage n]] } if {$LesDevStage != {}} { set LesDevStageEtLeurEffectif {} foreach LeDevStage [lsort -index 1 -decreasing -integer $LesDevStage] { lappend LesDevStageEtLeurEffectif "[lindex $LeDevStage 0] ([lindex $LeDevStage 1])" } lappend LeTexte " Developpement stage: [join $LesDevStageEtLeurEffectif " ; "]" lappend LeTexte "" } } ############################# PESTFIND ############################## if {[file exists $FichierPF]} { set ContenuPF [ContenuDuFichier $FichierPF] if {[regexp "No PEST motif was identified" $ContenuPF]} { lappend LeTexte " **********************************************" lappend LeTexte " PEST motifs:" lappend LeTexte "" lappend LeTexte " No PEST motif was identified in your sequence" } else { foreach Ligne [LesLignesDuFichier $FichierPF] { if {[regexp "Potential PEST motif" $Ligne] && ![info exists Vu]} { lappend LeTexte " **********************************************" lappend LeTexte " PEST motifs:" lappend LeTexte "" set n 0 set Vu 1 } if {[info exists Vu] && $n<5} { incr n lappend LeTexte " $Ligne" } } if {![info exists Vu]} { lappend LeTexte " **********************************************" lappend LeTexte " PEST motifs:" lappend LeTexte "" lappend LeTexte " No potential PEST motif was identified in your sequence" } lappend LeTexte "" } } ########################### Hydrophobicity ########################## if {[file exists $FichierHydrophobicity]} { set Nhelices [Hydrophobicity $Nom] set HydrophobiciteDuMSF [Hydrophobicity $Nom Hydro] set Hydrophobicite [Hydrophobicity $Nom OwnHydro] if {$Nhelices!="-2"} { lappend LeTexte " **********************************************" lappend LeTexte " Transmembrane helices:" lappend LeTexte "" lappend LeTexte " Nb_helices in your protein: $Nhelices" lappend LeTexte " Hydrophobicity of your protein: $Hydrophobicite" lappend LeTexte " Hydrophobicity average in MACS: $HydrophobiciteDuMSF" } } ########################## le MSF ################################### Espionne "$Nom -> informations about multiple alignment" set AvecMSF 0 if {[file exists $FichierMSF] && [DecortiqueUnMSF $FichierMSF LesAccess Sequences]} { set AvecMSF 1 set NbAccess [llength $LesAccess ] set NormMDTot [MDScore $FichierMSF "CalculeMoi"] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Protein family:" lappend LeTexte "" lappend LeTexte " Multiple alignment (MACS):" lappend LeTexte " Nb proteins: $NbAccess" lappend LeTexte " NormMD: $NormMDTot" if { $NormMDTot < 0.3} {lappend LeTexte " WARNING the quality of the alignment is bad" } if {0.3 <= $NormMDTot && $NormMDTot < 0.5} {lappend LeTexte " WARNING the quality of the alignment is medium"} } if {[InterrogeLesClustersDesMSF $FichierClustMSF LesClusters] != "" && $AvecMSF} { set LesClusters [InterrogeLesClustersDesMSF $FichierClustMSF LesClusters] set NbClusters [llength $LesClusters] set ClusterDeLaProt [InterrogeLesClustersDesMSF $FichierClustMSF Access $Nom Cluster ] set LesAccess [InterrogeLesClustersDesMSF $FichierClustMSF Cluster $ClusterDeLaProt LesAccess] set NbAccess [llength $LesAccess] set NormMDDuClust [MDScoreAvecSelectionDuFichier $FichierMSF $LesAccess] lappend LeTexte " Nb clusters: $NbClusters" lappend LeTexte " Cluster of our protein: $ClusterDeLaProt" lappend LeTexte " Nb proteins in our cluster: $NbAccess" lappend LeTexte " NormMD of our Cluster: $NormMDDuClust" if {$NormMDDuClust < 0.3} {lappend LeTexte " WARNING the quality of the alignment is bad" } if {0.3 <= $NormMDDuClust && $NormMDDuClust < 0.5} {lappend LeTexte " WARNING the quality of the alignment is medium"} InterrogeLesClustersDesMSF unset ###Your MACS cluster lappend LeTexte "" lappend LeTexte " **************************************" lappend LeTexte " Your cluster:" lappend LeTexte "" } ###Definition moyenne### Espionne "$Nom -> mean definition" if {[InterrogeDefinitionsConsensus $Nom Definition]!=""} { set DefMoy [InterrogeDefinitionsConsensus $Nom Definition] lappend LeTexte " Mean definition: $DefMoy" } ###Les noms des genes des proteines du meme cluster de msf que la proteine de ref### Espionne "$Nom -> Gene name" if {[InterrogeGeneName $Nom LesGeneNames] != ""} { set LesGeneNames {} foreach GN [InterrogeGeneName $Nom LesGeneNames] { if {$GN == ""} {continue} lappend LesGeneNames [list $GN [InterrogeGeneName $Nom GeneName $GN n]] } if {$LesGeneNames != {}} { set LesGeneNamesEtLeurEffectif {} foreach LeGN [lsort -index 1 -decreasing -integer $LesGeneNames] { lappend LesGeneNamesEtLeurEffectif "[lindex $LeGN 0] ([lindex $LeGN 1])" } lappend LeTexte "" lappend LeTexte " GeneName: [join $LesGeneNamesEtLeurEffectif " ; "]" #lappend LeTexte " [join $LesGeneNamesEtLeurEffectif " ; "]" } } ###Recherche des proteines identiques a 98%################# set LesAccessDesChoisi {} #if {$AccessDuChoisi != ""} {lappend LesAccessDesChoisi $AccessDuChoisi} Espionne "$Nom -> proteins with 98% of identity with the best protein" if {$AvecMSF} { set LesAccessDesIdentiques {} foreach Access [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $Nom 0.98] { set Access [string toupper $Access] if {[info exists DejaVu($Access)]} {continue} set DejaVu($Access) 1 lappend LesAccessDesChoisi $Access set PageInfo [PageInfo $Access protein "id acc des org"] set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] set Taille [TailleDeLaProt_PageInfo $PageInfo] foreach Org $LesOrgas { lappend LesAccessDesIdentiques " $Access ; Protein ; $Taille AA ; $Org ; $Def" } } if {$LesAccessDesIdentiques != {}} { lappend LeTexte "" #lappend LeTexte "Proteins with 98% of identity with our protein:" #lappend LeTexte " **************************************" #lappend LeTexte "" lappend LeTexte " Identical or quasi-identical proteins:" foreach LAccessIdentique $LesAccessDesIdentiques { lappend LeTexte $LAccessIdentique } } } ###recherche des mRNAs et des proteines CrossLinked#### Espionne "$Nom -> mRNAs and proteins cross-linked" if {$LesAccessDesChoisi != {}} { set LesAccessCrossLinked {} foreach Access $LesAccessDesChoisi { if {$Access == ""} {continue} set LesAccessCrossLinked [concat $LesAccessCrossLinked [LesCrossLinkedDeLAccess_Recursif $Access]] } if {$LesAccessCrossLinked != {}} { set LeTexteDesCrossLinked {} foreach LAccessCL [lsort -index 1 $LesAccessCrossLinked] { set Access [string toupper [lindex $LAccessCL 0]] if {[info exists DejaVu($Access)]} {continue} set Quoi [lindex $LAccessCL 1] set Taille [lindex $LAccessCL 2] if {$Quoi == "mRNA" } {set Taille "$Taille bp"} if {$Quoi == "Protein"} {set Taille "$Taille AA"} set Org [lindex $LAccessCL 3] set Def [lindex $LAccessCL 4] lappend LeTexteDesCrossLinked " $Quoi ; $Access ; $Taille ; $Org ; $Def" } if {$LeTexteDesCrossLinked != {}} { lappend LeTexte "" lappend LeTexte " Others CrossLinked Accessions:" set LeTexte [concat $LeTexte $LeTexteDesCrossLinked] } } } lappend LeTexte "" ###Domaines### Espionne "$Nom -> Domaines" if {[InterrogeDomaines $Nom LesDomaines]!=""} { set LesDomaines [InterrogeDomaines $Nom LesDomaines] lappend LeTexte " Mean domains:" foreach Domaine $LesDomaines { if {[regexp "CHAIN" $Domaine] && [regexp "\{\}]" $Domaine]} {continue} regsub -all {\{} $Domaine "" Domaine regsub -all {\}} $Domaine "" Domaine if {[regexp "STRAND" $Domaine] || [regexp "HELIX" $Domaine] || [regexp "TURN" $Domaine]} { continue } if {![regexp {1\.0} $Domaine]} {continue} lappend LeTexte " $Domaine" } } lappend LeTexte "" ### ontologie #### Espionne "$Nom -> ontology" if {[InterrogeGeneOntology $FichierGO $Nom LesGO] != ""} { #lappend LeTexte " **********************************************" lappend LeTexte " Mean Gene Ontology:" set LesGOFunction {} set LesGOProcess {} set LesGOComponent {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {$GO == ""} {continue} set Type [InterrogeGeneOntology $FichierGO GO $GO Type] if {$Type == "function" } {lappend LesGOFunction $GO} if {$Type == "process" } {lappend LesGOProcess $GO} if {$Type == "component"} {lappend LesGOComponent $GO} } foreach GO $LesGOFunction { lappend LeTexte " Function $GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } foreach GO $LesGOProcess { lappend LeTexte " Process $GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } foreach GO $LesGOComponent { lappend LeTexte " Component $GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } } ##Pathways KEGG## Espionne "$Nom -> KEGG" if {[InterrogeMesKEGG $Nom LesPathwayEtKeggEtEC]!=""} { lappend LeTexte "" lappend LeTexte " Mean KEGG:" } if {[InterrogeMesKEGG $Nom LesPathway]!=""} { set LesNumerosDesPathways [InterrogeMesKEGG $Nom LesPathway] foreach Pathway $LesNumerosDesPathways { set DefPathway [InterrogeMesKEGG Pathway $Pathway Definition] lappend LeTexte " Pathway $Pathway $DefPathway" } } if {[InterrogeMesKEGG $Nom LesEC]!=""} { set LesEC [InterrogeMesKEGG $Nom LesEC] foreach EC $LesEC { lappend LeTexte " EC $EC" } } if {[InterrogeMesKEGG $Nom LesKegg]!=""} { set LesKegg [InterrogeMesKEGG $Nom LesKegg] foreach Kegg $LesKegg { set DefKegg [InterrogeMesKEGG Kegg $Kegg Definition] lappend LeTexte " Kegg $Kegg $DefKegg" } } lappend LeTexte "" ####Si projet proteine if {$Nature=="Protein"} { Espionne coucou1 if {[file exists $FichierBest]} { Espionne coucou2 if {$Orga=="rat"} { Espionne coucou3 #special pour ProteoSys #rat protein set ProteinAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Rattus norvegicus" Protein Access] if {$ProteinAccess!=""} { Espionne "$Nom -> rat protein" set ProteinDef [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Definition] set ProteinTaille [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Taille] set ProteinId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $ProteinAccess Identity] #lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Rat protein:" lappend LeTexte " Protein Access: $ProteinAccess" lappend LeTexte " Protein Definition: $ProteinDef" lappend LeTexte " Protein Organism: Rattus norvegicus" lappend LeTexte " Protein Length: $ProteinTaille AA" lappend LeTexte " Percent Identity: $ProteinId" } #rat mRNA set mRNAAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Rattus norvegicus" mRNA Access] if {$mRNAAccess!=""} { set mRNADef [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Definition] set mRNATaille [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Taille] set mRNAId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $mRNAAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Rat mRNA complete cds:" lappend LeTexte " mRNA Access: $mRNAAccess" lappend LeTexte " mRNA Definition: $mRNADef" lappend LeTexte " mRNA Organism: Rattus norvegicus" lappend LeTexte " mRNA Length: $mRNATaille bp" lappend LeTexte " Percent Identity: $mRNAId" } ###Localisation du mRNA full length rat sur le genome humain### Espionne "$Nom -> Localisation du mRNA rat sur le genome humain" if {[file exists $FichiermRNARatExonicMap]} { lappend LeTexte "" #lappend LeTexte " **********************************************" lappend LeTexte " Localisation on the human genome:" if {[InterrogeFichierExonicMap $FichiermRNARatExonicMap LesRangs] != ""} { #nb exons set NbExons [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang 1 NbExonicAreas] if {$NbExons>0} { set Contig [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang 1 Contig] set LesDebEtFin {} set n 1 while {$n<[expr $NbExons+1]} { set DS [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang 1 ExonArea $n DS] set FS [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang 1 ExonArea $n FS] set Sens [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang 1 ExonArea $n Sens] lappend LesDebEtFin "Exon $n From $DS To $FS ($Sens) on Contig $Contig" incr n } } set LesRangs [InterrogeFichierExonicMap $FichiermRNARatExonicMap LesRangs] if {1 < [llength $LesRangs]} { lappend LeTexte " WARNING PolyLoc" } foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang Chromosome] set Contig [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang Contig] set DebCont [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang ContigLocalisation Debut] set FinCont [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang ContigLocalisation Fin ] set SensCont [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang Sens ] set LesCoordonneesSurChro [CoordonneesSurChromosome $Contig $DebCont $FinCont $SensCont] set D [lindex $LesCoordonneesSurChro 1] set F [lindex $LesCoordonneesSurChro 2] set Sens [lindex $LesCoordonneesSurChro 3] set BCyto [join [LesBandesCytologiquesDeLaLocalisation $Contig $DebCont $FinCont] " ; "] set n 0 set nTot 0 set NbAreas [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang NbExonicAreas] for {set i 1} {$i <= $NbAreas} {incr i} { incr n [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang ExonArea $i nAli ] incr nTot [InterrogeFichierExonicMap $FichiermRNARatExonicMap Rang $Rang ExonArea $i nAliTot] } if {$nTot == 0} {continue} set Id [expr $n * 1.0 / $nTot] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } if {[info exists NbExons]&& $Rang==1} { lappend LeTexte " Nb_Exons: $NbExons" foreach DebFin $LesDebEtFin { lappend LeTexte " $DebFin" } lappend LeTexte "" } } } else { lappend LeTexte " WARNING NoLoc" } InterrogeFichierExonicMap unset } else { lappend LeTexte " WARNING NoLoc" } InterrogeFichierExonicMap unset } #fin du si rat #special pour ProteoSys #mouse protein set ProteinAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Mus musculus" Protein Access] if {$ProteinAccess!=""} { set ProteinDef [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Definition] set ProteinTaille [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Taille] set ProteinId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $ProteinAccess Identity] #lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Mouse protein:" lappend LeTexte " Protein Access: $ProteinAccess" lappend LeTexte " Protein Definition: $ProteinDef" lappend LeTexte " Protein Organism: Mus musculus" lappend LeTexte " Protein Length: $ProteinTaille AA" lappend LeTexte " Percent Identity: $ProteinId" } #mouse mRNA set mRNAAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Mus musculus" mRNA Access] if {$mRNAAccess!=""} { set mRNADef [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Definition] set mRNATaille [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Taille] set mRNAId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $mRNAAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Mouse mRNA complete cds:" lappend LeTexte " mRNA Access: $mRNAAccess" lappend LeTexte " mRNA Definition: $mRNADef" lappend LeTexte " mRNA Organism: Mus musculus" lappend LeTexte " mRNA Length: $mRNATaille bp" lappend LeTexte " Percent Identity: $mRNAId" } ###Localisation de la proteine mouse sur le genome humain### Espionne "$Nom -> Localisation de la proteine mouse sur le genome humain" if {[file exists $FichiermRNAMurinExonicMap]} { lappend LeTexte "" #lappend LeTexte " **********************************************" lappend LeTexte " Localisation on the human genome:" if {[InterrogeFichierExonicMap $FichiermRNAMurinExonicMap LesRangs] != ""} { #nb exons set NbExons [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang 1 NbExonicAreas] if {$NbExons>0} { set Contig [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang 1 Contig] set LesDebEtFin {} set n 1 while {$n<[expr $NbExons+1]} { set DS [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang 1 ExonArea $n DS] set FS [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang 1 ExonArea $n FS] set Sens [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang 1 ExonArea $n Sens] lappend LesDebEtFin "Exon $n From $DS To $FS ($Sens) on Contig $Contig" incr n } } set LesRangs [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap LesRangs] if {1 < [llength $LesRangs]} { lappend LeTexte " WARNING PolyLoc" } foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang Chromosome] set Contig [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang Contig] set DebCont [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang ContigLocalisation Debut] set FinCont [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang ContigLocalisation Fin ] set SensCont [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang Sens ] set LesCoordonneesSurChro [CoordonneesSurChromosome $Contig $DebCont $FinCont $SensCont] set D [lindex $LesCoordonneesSurChro 1] set F [lindex $LesCoordonneesSurChro 2] set Sens [lindex $LesCoordonneesSurChro 3] set BCyto [join [LesBandesCytologiquesDeLaLocalisation $Contig $DebCont $FinCont] " ; "] set n 0 set nTot 0 set NbAreas [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang NbExonicAreas] for {set i 1} {$i <= $NbAreas} {incr i} { incr n [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang ExonArea $i nAli ] incr nTot [InterrogeFichierExonicMap $FichiermRNAMurinExonicMap Rang $Rang ExonArea $i nAliTot] } if {$nTot == 0} {continue} set Id [expr $n * 1.0 / $nTot] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } if {[info exists NbExons]&& $Rang==1} { lappend LeTexte " Nb_Exons: $NbExons" foreach DebFin $LesDebEtFin { lappend LeTexte " $DebFin" } lappend LeTexte "" } } } else { lappend LeTexte " WARNING NoLoc" } InterrogeFichierExonicMap unset } #human protein set ProteinAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$ProteinAccess!=""} { set ProteinDef [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Definition] set ProteinTaille [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Taille] set ProteinId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $ProteinAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Human protein:" lappend LeTexte " Protein Access: $ProteinAccess" lappend LeTexte " Protein Definition: $ProteinDef" lappend LeTexte " Protein Organism: Homo sapiens" lappend LeTexte " Protein Length: $ProteinTaille AA" lappend LeTexte " Percent Identity: $ProteinId" } #human mRNA set mRNAAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$mRNAAccess!=""} { set mRNADef [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Definition] set mRNATaille [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Taille] set mRNAId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $mRNAAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Human mRNA complete cds:" lappend LeTexte " mRNA Access: $mRNAAccess" lappend LeTexte " mRNA Definition: $mRNADef" lappend LeTexte " mRNA Organism: Homo sapiens" lappend LeTexte " mRNA Length: $mRNATaille bp" lappend LeTexte " Percent Identity: $mRNAId" } ###Localisation du human complete cds mRNA sur le genome humain### Espionne "$Nom -> Localisation du human complete cds mRNA sur le genome humain" if {[file exists $FichiermRNAHumanExonicMap]} { lappend LeTexte "" lappend LeTexte " Localisation on the human genome:" if {[InterrogeFichierExonicMap $FichiermRNAHumanExonicMap LesRangs] != ""} { #nb exons set NbExons [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang 1 NbExonicAreas] if {$NbExons>0} { set Contig [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang 1 Contig] set LesDebEtFin {} set n 1 while {$n<[expr $NbExons+1]} { set DS [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang 1 ExonArea $n DS] set FS [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang 1 ExonArea $n FS] set Sens [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang 1 ExonArea $n Sens] lappend LesDebEtFin "Exon $n From $DS To $FS ($Sens) on Contig $Contig" incr n } } set LesRangs [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap LesRangs] if {1 < [llength $LesRangs]} { lappend LeTexte " WARNING PolyLoc" #lappend LeTexte "" } foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang Chromosome] set Contig [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang Contig] set DebCont [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang ContigLocalisation Debut] set FinCont [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang ContigLocalisation Fin ] set SensCont [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang Sens] set LesCoordonneesSurChro [CoordonneesSurChromosome $Contig $DebCont $FinCont $SensCont] set D [lindex $LesCoordonneesSurChro 1] set F [lindex $LesCoordonneesSurChro 2] set Sens [lindex $LesCoordonneesSurChro 3] set BCyto [join [LesBandesCytologiquesDeLaLocalisation $Contig $DebCont $FinCont] " ; "] set n 0 set nTot 0 set NbAreas [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang NbExonicAreas] for {set i 1} {$i <= $NbAreas} {incr i} { incr n [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang ExonArea $i nAli] incr nTot [InterrogeFichierExonicMap $FichiermRNAHumanExonicMap Rang $Rang ExonArea $i nAliTot] } if {$nTot == 0} {continue} set Id [expr $n * 1.0 / $nTot] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" set IdDeRef $IdMax if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } if {[info exists NbExons] && $Rang==1} { lappend LeTexte " Nb_Exons: $NbExons" foreach DebFin $LesDebEtFin { lappend LeTexte " $DebFin" } lappend LeTexte "" } } } else { lappend LeTexte " WARNING NoLoc" } InterrogeFichierExonicMap unset } } } ################### PROMOTER ################################################ #Espionne "$Nom -> promoter" #if {[file exists $FichierFEF]} { #lappend Letexte "" #lappend LeTexte " **********************************************" #lappend LeTexte " Promoter predicted from human mRNA complete cds:" #lappend LeTexte "" #foreach Ligne [LesLignesDuFichier $FichierFEF] { #lappend LeTexte " $Ligne" #} #lappend LeTexte "" #} lappend LeTexte "" EspionneL $LeTexte Sauve [join $LeTexte "\n"] dans $FichierRecap return } proc acFichierRecapitulatifPourTous {NomATraiter {Projet ""} {Lab ""} {Protocol ""} {Def spe} {Nature DNA} {Orga ""} {IdMin 0.8} {IdMax 0.95}} { JeMeSignale if {$NomATraiter==""} { set Liste [ListeDesPABs] } elseif {[string equal -nocase $NomATraiter "AskForSubList"]} { set Liste [SousListe [ListeDesPABs]] } elseif {[llength $NomATraiter]>1} { set Liste $NomATraiter } else { set Liste [list $NomATraiter] } set RepRecap "[RepertoireDuGenome]/bilan" set Keep 0 if {![file exists $RepRecap]} { File mkdir $RepRecap set Keep 0 } elseif {[OuiOuNon "If some file exists in $RepRecap, Do you want to conserv them?"]} { set Keep 1 } foreach Nom $Liste { Espionne $Nom if {[file exists "$RepRecap/$Nom"] && $Keep} {continue} Espionne "$Nom -> Bilan" acFichierRecapitulatif $Nom $Projet $Lab $Protocol $Def $Nature $Orga $IdMin $IdMax Espionne "$Nom -> Bilan done" } return } proc acFichierTFADesProteinesChoisiesPourTous {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] FichierTFADesProteinesChoisiesPourTous $Liste } proc acFichierTFADesProteinesDesContigsPourTous {FichierClusters} { set Liste [ListeMinimumDesJR $FichierClusters] FichierTFADesProteinesDesContigsPourTous $Liste } proc acInformeIdentitesDuCDNA {Nom} { global RepertoireDuGenome set FichierTFA "[RepertoireDuGenome]/nuctfa/$Nom" if { ! [file exists $FichierTFA]} { return "" } set CC "" set Ow "" set Entete [PremiereLigneDuFichier $FichierTFA] if {[regexp -nocase "Affy" $RepertoireDuGenome]} { regsub " target:HG-U95Av2:" $Entete "" Entete set AC [lindex [split $Entete ";"] 1] #FaireLire $AC set Definition1 [lindex [split $Entete "/"] 0] set Definition [lindex [split $Definition1 ":"] 2] #FaireLire $Definition set CC1 [lindex [split $Entete ";"] 0] set CC [lindex [split $CC1 ":"] 1] #FaireLire $CC InformeSansDemander $Nom "=AffymetrixAccess: $AC" InformeSansDemander $Nom "=OwnerOfCDNA: Affymetrix" InformeSansDemander $Nom "=GBtagsDefinition: $Definition" } else { scan $Entete "%s %s %s" NomLu CC Ow if {$Ow!=""} { InformeSansDemander $Nom "=OwnerOfCDNA: $Ow" } if {$CC==""} { return "" } } return [InformeSansDemander $Nom "=CodeClone: $CC"] } proc acInformeIdentitesDuCDNAPourTous {} { foreach Nom [ListeDesPABs] { Espionne [acInformeIdentitesDuCDNA $Nom] } } proc acLesProteinesEtLesmRNAsPourTous {{NomATraiter ""} {Expect 0.001} {NbSubject 500}} { global RepertoireDuGenome set LesOrganismes [LaSelectionDeNoe] set UnFichierACompleter 0 if {[OuiOuNon "Would you want to complete existing files?"]} { set UnFichierACompleter 1 if {[OuiOuNon "Do I use $RepertoireDuGenome/infos"]} { set RepInfo "$RepertoireDuGenome/infos" } else { set RepInfo [ChoisirUnRepertoire "$RepertoireDuGenome/infos"] } } set RepInfoAuto "$RepertoireDuGenome/mRNAAndProt" if {![file exists $RepInfoAuto]} {File mkdir $RepInfoAuto} set Reponse 0 if {[OuiOuNon "Would you want to conserve your work?"]} {set Reponse 1} if {$NomATraiter == ""} { set Liste [ListeDesPABs] } else { if {[regexp " " $NomATraiter]} { regsub -all " " $NomATraiter " " NomATraiter set Liste [split $NomATraiter " "] } else { set Liste [list $NomATraiter] } } foreach Nom $Liste { if {[file exists "$RepInfoAuto/$Nom"] && $Reponse} {continue} Espionne "$Nom in progress..." if {$UnFichierACompleter == 0} { set Info "" } else { if {![file exists "$RepInfo/$Nom"] } { Espionne "$Nom stop..." continue } else { set Info [ContenuDuFichier "$RepInfo/$Nom"] } } set Taille [TailleDeLaSequenceDuFichierTFA "$RepertoireDuGenome/nuctfa/$Nom"] append Info "\nLength: $Taille" PourcentagesDeMasking Repeat $Nom if {[info exists Repeat(Masking)] } {append Info "\nMasking: [set Repeat(Masking)]"} if {[info exists Repeat(ReMasking)]} {append Info "\nReMasking: [set Repeat(ReMasking)]"} if {[info exists Repeat(MRM)] } {append Info "\nMRM: [set Repeat(MRM)]"} Sauve $Info dans "$RepInfoAuto/$Nom" set Resultats [LesProteinesEtLesmRNAs $Nom $LesOrganismes $Expect $NbSubject] if {[regexp -nocase {[a-z0-9]} $Resultats]} { append Info "\n\nBEGINNING OF THE AUTOMATIC PROTOCOL\n" append Info "$Resultats\n" append Info "\nEND OF THE AUTOMATIC PROTOCOL" } Espionne $Info Sauve $Info dans "$RepInfoAuto/$Nom" } return "The End" } proc acMeilleursCopainsDuBlastPourTous {{NomATraiter ""} {Rep blastngenembl}} { global RepertoireDuGenome Wup "Creates the file and returns its name. Returns an empty string if nothing found" set Fichier "$RepertoireDuGenome/fiches/cops_$Rep" if {[file exists $Fichier]} { if {[OuiOuNon "Do I keep existing results found in $Fichier ?"]} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom lappend LesOldCops($Nom) $Ligne } if {[info exists Nom]} { unset LesOldCops($Nom) } } File rename -force $Fichier $Fichier.copie File delete -force $Fichier } if {$NomATraiter == ""} { set Liste [ListeDesPABs] } else { if {[regexp " " $NomATraiter]} { regsub -all " " $NomATraiter " " NomATraiter set Liste [split $NomATraiter " "] } else { set Liste [list $NomATraiter] } } foreach Nom $Liste { Espionne "Je vais chercher les cops dans $Rep de $Nom" if {[info exists LesOldCops($Nom)]} { AppendAuFichier $Fichier [join $LesOldCops($Nom) "\n"] continue } set LesCops [MeilleursCopainsDuBlast $Nom $Rep] if {$LesCops=={}} { continue } AppendAuFichier $Fichier [join $LesCops "\n"] } if {[file exists $Fichier]} { return $Fichier } else { return "" } } proc acMeilleursCopainsDuBlastPourUneListe {{Liste ""} {Rep blastngenembl}} { global RepertoireDuGenome Wup "Creates the file and returns its name. Returns an empty string if nothing found" set Fichier "$RepertoireDuGenome/fiches/cops_$Rep" if {[file exists $Fichier]} { if {[OuiOuNon "Do I keep existing results found in $Fichier ?"]} { foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s" Nom lappend LesOldCops($Nom) $Ligne } if {[info exists Nom]} { unset LesOldCops($Nom) } } File rename -force $Fichier $Fichier.copie File delete -force $Fichier } if {$Liste == {}} { set Liste [ListeDesPABs] } foreach Nom $Liste { if {$Nom == ""} {continue} Espionne "Je vais chercher les cops dans $Rep de $Nom" if {[info exists LesOldCops($Nom)]} { AppendAuFichier $Fichier [join $LesOldCops($Nom) "\n"] continue } set LesCops [MeilleursCopainsDuBlast $Nom $Rep] if {$LesCops=={}} { continue } AppendAuFichier $Fichier [join $LesCops "\n"] } if {[file exists $Fichier]} { return $Fichier } else { return "" } } proc acTailleDeLaSequenceDuFichierTFA {FichierTFA} { if {![file exists $FichierTFA]} {return ""} set Sequence "" foreach Ligne [LesLignesDuFichier $FichierTFA] { if {[regexp -nocase "^>" $Ligne]} {continue} regsub -all "\n" $Ligne "" Ligne regsub -all " " $Ligne "" Ligne append Sequence $Ligne } set Taille [string length $Sequence] return $Taille } proc ac_AfficheVariable {Page {Maniere ""} {NomDuFichierOrigine ""}} { Wup "Cette proc est le coeur de Gscope" Wup "Most used procedure ... : " Wup "Shows the text Page in a listbox, with a lot of buttons." Wup "Copyright 1999 Raymond Ripp" Gs "Frame" if {$Page==""} { return "" } global VariableDeRetour global LesFenetresDePAB global PagePropre global CurrentGenome set Nom "" set Queue [file tail $NomDuFichierOrigine] set w [NomDe fenetre] regsub -all {\t} $Page " " PagePropre($w) if { [EstPABouTROUouTRNAouARN [file tail $NomDuFichierOrigine]] } { set Nom $Queue } lappend LesFenetresDePAB($Queue) $w if { $NomDuFichierOrigine == "" } { set NomDuFichierOrigine "Tsointsoin" } if {$Maniere=="AutoManiere" || $Maniere==""} { set Maniere [LaManierePourAffiche $NomDuFichierOrigine] } toplevel $w if {$Nom!="" && [NomDeScene $Nom]!=""} { set Titre "[NomDeScene $Nom] $NomDuFichierOrigine" } else { set Titre "$NomDuFichierOrigine" } wm title $w "$Titre" wm iconname $w "$Titre" label $w.msg -wraplength 4i -justify left -text "$Titre" pack $w.msg -side top set Clavier $w.buttons frame $Clavier pack $Clavier -side bottom -fill x -padx 3m -pady 1m TouchePour $Clavier NouvelleGamme TouchePour $Clavier NouvelleCouleur "red" if { [regexp "AvecRetour" $Maniere] } { TouchePour $Clavier "Validate sel." "set VariableDeRetour($w) \[selection get\]" "" "green" TouchePour <2> " /All" "set VariableDeRetour($w) \[set PagePropre($w)\]" "" TouchePour <3> " / No!" "set VariableDeRetour($w) {}" TouchePour $Clavier NouvelleCouleur "pink" } TouchePour $Clavier "Dismiss" "unset PagePropre($w) ; after 10 destroy $w" TouchePour $Clavier "Dismiss_all" "DismissToutCePAB $Queue" frame $w.frame -borderwidth 10 pack $w.frame -side top -expand yes -fill both scrollbar $w.frame.yscroll -command "$w.frame.list yview" scrollbar $w.frame.xscroll -command "$w.frame.list xview" -orient horizontal #set Largeur 80 set Largeur 100 set Hauteur 35 if { [regexp "GrandeLargeur" $Maniere] } { set Largeur 128 } listbox $w.frame.list -width $Largeur -height $Hauteur -setgrid 1 -yscroll "$w.frame.yscroll set" -xscroll "$w.frame.xscroll set" -selectmode extended -background "LightGrey" -foreground "Black" -selectbackground "LightYellow" -selectforeground "Black" -font [list Courier [PolicePourListBox]] grid $w.frame.list -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew grid rowconfig $w.frame 0 -weight 1 -minsize 0 grid columnconfig $w.frame 0 -weight 1 -minsize 0 set nLignes 0 foreach Ligne [split [set PagePropre($w)] "\n"] { incr nLignes #if { [regexp "AvecSegAlignement" $Maniere] && [regexp {^>[\./a-zA-Z]} $Ligne]} { break } $w.frame.list insert end $Ligne } if {$nLignes<30} { $w.frame.list configure -height [expr $nLignes+3] } bind $w.frame.list <3> "DecrisLaLigne %W %x %y" bind $w.frame.list "DecrisLaLigne %W %x %y Efface" } proc ac_BlastXDuFichier {FichierTFA {Banque protall} {NbSubject 10} {Expect 10.0} {Filtre 1} {FichierBlast ""} {EditCommand 0}} { global RepertoireDuGenome AttendreTantQueExiste "/gcg/Update/.updtgcgnew_running" if {$Filtre} { set Filtre "T" } else { set Filtre "F"} ##ac #if {$Banque != "protall"} {AttendreTantQueExiste "/gcg/Update/.updtgcgnew_running"} if {[regexp "/" $Banque]} { set NomDeLaBanque "$Banque" } else { set NomDeLaBanque "/blast/$Banque" } ## set CommandeBlastX "eval exec blastall -p blastx -i \$FichierTFA -o \$FichierBlast -d \$NomDeLaBanque -F \$Filtre -e $Expect -v $NbSubject -b $NbSubject -a 4" if {$EditCommand == 1 && [OuiOuNon "Do You want to edit the BlastX command ?" 0]} { set CommandeBlastX [Entre $CommandeBlastX] } if {$FichierBlast == ""} { set RepBlast [RepertoireDeTravail] set FichierBlast "$RepBlast/[file tail $FichierTFA]" } if { ! [file exists $FichierTFA]} { Warne "$FichierTFA doesn't exist.";exit} eval $CommandeBlastX return $FichierBlast } proc ac_ChromosomeSelectionne {K} { set Liste [$K find withtag current] foreach Id $Liste { set Chromosome [lindex [$K gettags $Id] 0] set FichierCourbeBAC [lindex [$K gettags $Id] 1] set FichierCourbeOligo [lindex [$K gettags $Id] 2] set RepFichierLocCGHBAC [lindex [$K gettags $Id] 3] set RepFichierLocCGHOligo [lindex [$K gettags $Id] 4] ac_IllustreUnChromosome $Chromosome $FichierCourbeBAC $FichierCourbeOligo $RepFichierLocCGHBAC $RepFichierLocCGHOligo } } proc ac_ChromosomeSelectionneAvtEtApresSeg {K} { Espionne "chro selectionne" set Liste [$K find withtag current] foreach Id $Liste { set Chromosome [lindex [$K gettags $Id] 0] set FichierCourbeCGH [lindex [$K gettags $Id] 1] set FichierCourbeSEG [lindex [$K gettags $Id] 2] ac_IllustreUnChromosomeAvtEtApresSeg $Chromosome $FichierCourbeCGH $FichierCourbeSEG } } proc ac_ChromosomeSelectionneCGH {K} { set Liste [$K find withtag current] foreach Id $Liste { set Chromosome [lindex [$K gettags $Id] 0] set LesCas [lindex [$K gettags $Id] 1] ac_IllustreUnChromosomeCGH $Chromosome $LesCas } } proc ac_ChromosomeSelectionneCGH_seg {K} { # pour la vue All set Liste [$K find withtag current] foreach Id $Liste { set Chromosome [lindex [$K gettags $Id] 0] set LesCas [lindex [$K gettags $Id] 1] ac_IllustreUnChromosomeCGH_seg $Chromosome $LesCas } } proc ac_ChromosomeSelectionneSEG {K} { Espionne "chro selectionne" set Liste [$K find withtag current] foreach Id $Liste { set Chromosome [lindex [$K gettags $Id] 0] set FichierCourbeCGH [lindex [$K gettags $Id] 1] set FichierCourbeSEG [lindex [$K gettags $Id] 2] ac_IllustreUnChromosome_SEG $Chromosome $FichierCourbeCGH $FichierCourbeSEG } } proc ac_IllustreUnChromosome {Chromosome FichierCourbeBAC FichierCourbeOligo RepFichierLocCGHBAC RepFichierLocCGHOligo {FichierBACfou ""} {LesPos ""} {LesNoms ""}} { FaireAttendreAnnaick .fenetre "Running" "Please wait..." #Espionne "IllustreUnchromosome en cours" Espionne "$Chromosome $FichierCourbeBAC $FichierCourbeOligo $RepFichierLocCGHBAC $RepFichierLocCGHOligo" #choix du cas if {$Chromosome==""} {set Chromosome [ChoixDuChromosome]} if {$FichierCourbeBAC==""} { FaireLire "Please, Choose your BAC CGH array file. Thank you!" set FichierCourbeBAC [tk_getOpenFile -title "BAC CGH array file to open"] } # Modif MG set BACfile 1 if {$FichierCourbeBAC=="null" && $RepFichierLocCGHBAC=="null"} { Espionne "No BAC data file" set BACfile 0 } if {$FichierCourbeOligo==""} { FaireLire "Please, Choose your Oligo CGH array file. Thank you!" set FichierCourbeOligo [tk_getOpenFile -title "Oligo CGH array file to open"] } if {$BACfile!=0} { set NomFichierBAC [file tail $FichierCourbeBAC] set FichierLocCGHBAC "[RepertoireDuGenome]/$RepFichierLocCGHBAC/CGH_BAC_localisation" } set NomFichierOligo [file tail $FichierCourbeOligo] set FichierLocCGHOligo "[RepertoireDuGenome]/$RepFichierLocCGHOligo/CGH_Oligo_localisation" #if {![file exists $FichierCourbeBAC] || ![file exists $FichierCourbeOligo] || ![file exists $FichierLocCGHBAC] || ![file exists $FichierLocCGHOligo]} {Espionne "Sorry, one file is missing";return} # attention il doit exister le rep PRIMA_Affichage dans le rep de mon prog.tcl set FichierLocGenes "[RepertoireDuGenome]/PRIMA_Affichage/HumanAllGenesUCSC" if {![file exists $FichierLocGenes] || $FichierLocGenes == ""} {return} #set FichierLocmiRNA "[RepertoireDuGenome]/PRIMA_Affichage/HumanmiRNAloc" #if {![file exists $FichierLocmiRNA] || $FichierLocmiRNA == ""} {return ""} #set FichierLocRefSeq "[RepertoireDuGenome]/PRIMA_Affichage/RefSeqLocalisation_ucsc" #if {![file exists $FichierLocRefSeq] || $FichierLocRefSeq == ""} {return ""} #ChargeFichierLoc TabM $FichierLocmiRNA $Chromosome $LesNoms # Modif MG if {$BACfile!=0} { ChargeFichierLoc TabB $FichierLocCGHBAC $Chromosome $LesNoms } ChargeFichierLoc TabO $FichierLocCGHOligo $Chromosome $LesNoms #Espionne "[array names TabB]" #ChargeFichierLoc TabR $FichierLocRefSeq $Chromosome $LesNoms ChargeFichierLoc TabG $FichierLocGenes $Chromosome $LesNoms # Mofid MG if {$BACfile!=0} { ChargeFichierCourbeCGH TabC $FichierCourbeBAC $Chromosome $LesPos } ChargeFichierCourbeCGH TabL $FichierCourbeOligo $Chromosome $LesPos set nChromosome [NumeroDuChromosome $Chromosome] #Voir proc CreeFichierCytologicMapUCSC set FichierBandesCytos "[RepertoireDuGenome]/PRIMA_Affichage/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 if {$BACfile!=0} { set HauteurMax [expr $BordY + $HauteurBoiteChromo + 6*$HauteurBoite + 7*$EcartEntreRepresentations] } else { set HauteurMax [expr $BordY + $HauteurBoiteChromo + 3*$HauteurBoite + 4*$EcartEntreRepresentations] } if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] #$K configure -background "lightgrey" $K configure -background "white" set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] set Taille [expr round($TailleChromo * 1.0/1.e6)] set Facteur [expr $LargeurAffichage / $TailleChromo] ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos if {![info exist LesBandesCytos($Chromosome,TailleP)]} {return ""} set LesBandesP [lsort -decreasing [set LesBandesCytos($Chromosome,LesBandesP)]] set LesBandesQ [lsort [set LesBandesCytos($Chromosome,LesBandesQ)]] set LesBandesCytologiques $LesBandesP foreach BandeQ $LesBandesQ {lappend LesBandesCytologiques $BandeQ} set PosYMin [expr $HauteurMax - $BordY - $HauteurBoiteChromo] set PosYMax [expr $HauteurMax - $BordY ] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set i 0 set PosIni 0 ### Mapper le chromosome et ses bandes cytologiques ### foreach Bande $LesBandesCytologiques { set LesInfos [set LesBandesCytos($Chromosome,$Bande)] set Position [expr [lindex $LesInfos 0] * 1.e6] set TailleBande [expr round(($Position-$PosIni)/1.e6)] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosXMax [expr $BordX + ($Position*$Facteur)] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$Bande" "$TailleBande" "BandesCytologiques"] if {$i == 40} {set i 0} else {incr i 10} set PosXMin $PosXMax set PosIni $Position } $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "blue" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "blue" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*1/3] -text "$Chromosome" -font "$PoliceTitre" -fill "blue" ################## Tracer le plot by position for 1 given patient ### BAC ### # Mofif MG if {$BACfile!=0} { set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set VMax [LaValeurMaxCGHBAC $FichierCourbeBAC $Chromosome] #vmax formate set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMin [LaValeurMinCGHBAC $FichierCourbeBAC $Chromosome] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set X1 0;set Y1 0 if {[info exists TabC($FichierCourbeBAC,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbeBAC,Chromosome,$Chromosome,LesPos)] { foreach LInfo [set TabC($FichierCourbeBAC,Chromosome,$Chromosome,$Pos)] { set PosMid [lindex $LInfo 1] set Val [lindex $LInfo 2] #val transformee set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere #($X1>$DebutCentro && $X1<$FinCentro)||($PosMid>$DebutCentro && $PosMid<$FinCentro) # Ne pas oublier de prevoir le cas ou aucun point dans le centromere #($X1<$DebutCentro && $PosMid>=$DebutCentro && $PosMid<=$FinCentro)||($X1>=$DebutCentro && $X1<=$FinCentro && $PosMid>=$FinCentro) || ($X1>=$DebutCentro && $X1<=$FinCentro && $PosMid>=$DebutCentro && $PosMid<=$FinCentro) #if {$X1>=43200000 && $X1<=48000000} {Espionne "0- je suis la - x1=$X1 x2=$PosMid debcentro=$DebutCentro fincentro=$FinCentro"} if {$X1<=$DebutCentro && $PosMid>=$DebutCentro && $PosMid<=$FinCentro} { # x1 est avant le debut du centro et x2 dedans set X1 $PosMid set Y1 $Value continue } if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { # aucun point dans le centromere set X1 $PosMid set Y1 $Value } if {($X1>=$DebutCentro && $X1<=$FinCentro) && ($PosMid>=$DebutCentro && $PosMid<=$FinCentro)} { # x1 et x2 sont dans le centromere set X1 $PosMid set Y1 $Value continue } if {$X1<=$FinCentro && $PosMid>=$FinCentro && $X1>=$DebutCentro} { # x1 est avant la fin du centro et x2 apres le centromere set X1 $PosMid set Y1 $Value } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 3 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierBAC CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } } ### Tracer le plot by position for 1 given patient ### Oligo ### set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] #set x [InterrogeFichierCourbeCGH $FichierCourbeOligo "unset"] #set VMin [InterrogeFichierCourbeCGH $FichierCourbeOligo VMin] #set VMax [InterrogeFichierCourbeCGH $FichierCourbeOligo VMax] set VMax [LaValeurMaxCGHOligo $FichierCourbeOligo $Chromosome] set VMin [LaValeurMinCGHOligo $FichierCourbeOligo $Chromosome] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] ### set X1 0;set Y1 0 if {[info exists TabL($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabL($FichierCourbeOligo,Chromosome,$Chromosome,LesPos)] { set PosMid $Pos foreach LInfo [set TabL($FichierCourbeOligo,Chromosome,$Chromosome,$Pos)] { set Val [lindex $LInfo 3] set Val [expr ($Val*log(10)/log(2))*1.0] #val transformee pour l'affichage set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGHOligo" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # Interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { set X1 $PosMid set Y1 $Value continue } if {($X1>$DebutCentro && $X1<$FinCentro)||($PosMid>$DebutCentro && $PosMid<$FinCentro)} { set X1 $PosMid set Y1 $Value continue } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 3 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] #set AfficheVMin -0 set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 2 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX -10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierOligo CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } ### Tracer le plot Affy by position for 1 given patient # RMA value ### U133 Plus2.0 ### #set FichierCourbeAffy [ChoixDuFichierRMA] if {![info exists TabRMA]} { if {[OuiOuNon "Do you have the corresponding RMA file?"]} { FaireLire "Please, Choose your Affymetrix file. Thank you!" set FichierCourbeAffy [tk_getOpenFile -title "Affymetrix (RMA) file to open"] Espionne "fichieraffy: $FichierCourbeAffy" set NomFichierAffy [file tail $FichierCourbeAffy] ChargeFichierAffyRMA TabRMA $FichierCourbeAffy } } if {[info exists TabRMA]} { set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set VMax [InterrogeFichierAffyRMA $FichierCourbeAffy ValMax] set VMax [format "%.2f" [expr $VMax*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/$VMax] set VMin [InterrogeFichierAffyRMA $FichierCourbeAffy ValMin] set VMin [format "%.2f" [expr $VMin*1.0]] set X1 0;set Y1 0 regsub "HS" $Chromosome "" num if {[regexp "^0" $num]} {regsub "0" $num "" num} set Chrom "chr$num" set LesProbeSets [InterrogeAffy_UCSC "" human $Chrom LesProbeSets] foreach ProbeSet $LesProbeSets { set LesChros [InterrogeAffy_UCSC "" human $ProbeSet Chromosome] ## cas ou pls chros if {[llength $LesChros]>1} { set Warning($ProbeSet) 1 regsub " " $LesChros "" LesChros set C($ProbeSet) $LesChros } set LesDebuts [InterrogeAffy_UCSC "" human $ProbeSet $Chrom Debut] set LesFins [InterrogeAffy_UCSC "" human $ProbeSet $Chrom Fin] #si [llength $LesDebuts]>1 || [llength $LesFins]>1 set Warning($ProbeSet) 1 if {[llength $LesDebuts]!=[llength $LesFins]} {Espionne "pb loc de $ProbeSet"; continue} foreach Debut $LesDebuts Fin $LesFins { set PosMid [expr ($Fin-$Debut)/2 + $Debut] lappend L "$ProbeSet\t$PosMid" } #set Deb [lrange $LesDebuts 0 0] #set Fin [lrange $LesFins 0 0] #set PosMid [expr ($Fin-$Deb)/2 + $Deb] #lappend L "$ProbeSet\t$PosMid" } set Ltriee [lsort -integer -increasing -index 1 $L] if {$Ltriee!=""} { foreach Elt $Ltriee { set LesInfos [split $Elt "\t"] set PosMid [lindex $LesInfos 1] set ProbeSet [lindex $LesInfos 0] set Val [InterrogeFichierAffyRMA $FichierCourbeAffy $ProbeSet Val] set Value -[format "%.2f" [expr $Val*1.0]] lappend LesInfos $Val if {[info exists Warning($ProbeSet)]} { set ColorFill "Red" lappend LesInfos "$C($ProbeSet)" } else { set ColorFill "Mediumblue" } set LInfoAffy [join $LesInfos "\t"] lappend LInfoAffy "Affy" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # Interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { set X1 $PosMid set Y1 $Value continue } if {($X1>$DebutCentro && $X1<$FinCentro)||($PosMid>$DebutCentro && $PosMid<$FinCentro)} { set X1 $PosMid set Y1 $Value continue } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 4 -tags $LInfoAffy $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill "Mediumblue" -width 1 #$K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 1 set X1 $PosMid set Y1 $Value } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr $VMax*1.0]] set AfficheVMin -[format "%.2f" [expr $VMin*1.0]] #ligne repere a 2 en pointille #$K create line $BordX [expr $PosYMin + (-2* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-2* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMax" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMin" -font "$Police" -fill "Mediumblue" #echelle horizontale #$K create text [expr $LargeurMax - $BordX+10] [expr $PosYMin + (-2* $FacteurY) + $Var] -text "2" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierAffy Affy U133 Plus2.0 plot" -font "$PoliceTitre" -fill "Mediumblue" } } ########## Mapper nos sequences: les BAC et les oligos de CGH + les miRNAs + RefSeq ############ # Localisation des miRNAs #set PosYMax [expr $PosYMin - $EcartEntreRepresentations] #set PosYMin [expr $PosYMax - $HauteurBoite] #set PosYCenter [expr ($PosYMax + $PosYMin)/2] #if {[info exists TabM($FichierLocmiRNA,Chromosome,$Chromosome,LesNoms)]} { #foreach Nom [set TabM($FichierLocmiRNA,Chromosome,$Chromosome,LesNoms)] { #foreach LInfo [set TabM($FichierLocmiRNA,Chromosome,$Chromosome,$Nom)] { #set Debut [lindex $LInfo 1] #set Fin [lindex $LInfo 2] #lappend LInfo "Box" #set ColorFill "Red" #set PosXMin [expr $BordX + ($Debut*$Facteur)] #set PosXMax [expr $BordX + ($Fin*$Facteur)] #set Var -10 #$K create oval $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline $ColorFill -fill $ColorFill -tags $LInfo #} #} #} #$K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #$K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "Red" #$K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "Red" #$K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "Homo sapiens miRNAs" -font "$PoliceTitre" -fill "Red" # Localisation des CGH BAC # Modif MG if {$BACfile!=0} { # les BACs "fous" if {$FichierBACfou!=""} { foreach Ligne [LesLignesDuFichier $FichierBACfou] { set LesElts [split $Ligne " "] set sample [lindex $LesElts 0] set chromosome [lindex $LesElts 1] set posmid [lindex $LesElts 3] if {$sample==$NomFichierBAC && $chromosome==$Chromosome} { set posmid [expr $posmid*1.0] set Vu($posmid) 1 } } } set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] if {[info exists TabB($FichierLocCGHBAC,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabB($FichierLocCGHBAC,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabB($FichierLocCGHBAC,Chromosome,$Chromosome,$Nom)] { set DebutBAC [lindex $LInfo 1] set FinBAC [lindex $LInfo 2] set PosMidBAC [expr $DebutBAC*1.0 + (($FinBAC*1.0-$DebutBAC*1.0)/2)] if {[info exists Vu($PosMidBAC)]} { set ColorFill "blue" } else { set ColorFill "darkorange" } lappend LInfo "BAC" #set ColorFill "yellow" if {($DebutBAC>=$DebutCentro && $DebutBAC<=$FinCentro) && ($FinBAC>=$DebutCentro && $FinBAC<=$FinCentro)} { # x1 et x2 sont dans le centromere set X1 $PosMid set Y1 $Value continue } set Var -10 set PosXMin [expr $BordX + ($DebutBAC*$Facteur)] set PosXMax [expr $BordX + ($FinBAC*$Facteur)] $K create rectangle $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline "$ColorFill" -fill $ColorFill -tags $LInfo } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #$K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "yellow" $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "darkorange" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "darkorange" #$K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "yellow" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "CGH BAC" -font "$PoliceTitre" -fill "darkorange" #$K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "CGH BAC" -font "$PoliceTitre" -fill "yellow" } } # Localisation des CGH Oligo set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] if {[info exists TabO($FichierLocCGHOligo,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabO($FichierLocCGHOligo,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabO($FichierLocCGHOligo,Chromosome,$Chromosome,$Nom)] { set DebutOli [lindex $LInfo 1] set FinOli [lindex $LInfo 2] #set Id [lindex $LInfo 3] #set Fold [set Expression($Nom)] #lappend LInfo $Fold lappend LInfo "Oli" #set ColorFill [CouleurDuFold $Fold] set ColorFill "darkgreen" set PosXMin [expr $BordX + ($DebutOli*$Facteur)] set PosXMax [expr $BordX + ($FinOli*$Facteur)] #if {$Sens == "+"} {set Var -10} elseif {$Sens == "-"} {set Var 10} set Var -10 #if {$Qui != "OnlyTheBest" && $Info != "BestLoc"} {set Var [expr $Var * 3]} $K create rectangle $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline $ColorFill -fill $ColorFill -tags $LInfo } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "darkgreen" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "darkgreen" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "CGH Oligo" -font "$PoliceTitre" -fill "darkgreen" } # Localisation des RefSeq UCSC #set PosYMax [expr $PosYMin - $EcartEntreRepresentations] #set PosYMin [expr $PosYMax - $HauteurBoite] #set PosXCenter [expr $LargeurMax/2] #set PosYCenter [expr ($PosYMax + $PosYMin)/2] #if {[info exists TabR($FichierLocRefSeq,Chromosome,$Chromosome,LesNoms)]} { #foreach Nom [set TabR($FichierLocRefSeq,Chromosome,$Chromosome,LesNoms)] { #foreach LInfo [set TabR($FichierLocRefSeq,Chromosome,$Chromosome,$Nom)] { #set DebutRef [lindex $LInfo 1] #set FinRef [lindex $LInfo 2] #set Id [lindex $LInfo 3] #set Fold [set Expression($Nom)] #lappend LInfo $Fold #lappend LInfo "Ref" #set ColorFill [CouleurDuFold $Fold] #set ColorFill "darkorange" #set PosXMin [expr $BordX + ($DebutRef*$Facteur)] #set PosXMax [expr $BordX + ($FinRef*$Facteur)] #if {$Sens == "+"} {set Var -10} elseif {$Sens == "-"} {set Var 10} #set Var -10 #if {$Qui != "OnlyTheBest" && $Info != "BestLoc"} {set Var [expr $Var * 3]} #$K create rectangle $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline $ColorFill -fill $ColorFill -tags $LInfo #} #} #$K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #$K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "darkorange" #$K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "darkorange" #$K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "RefSeq UCSC sept.2005" -font "$PoliceTitre" -fill "darkorange" #} # Localisation des Human genes UCSC set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabG($FichierLocGenes,Chromosome,$Chromosome,$Nom)] { #Espionne coucou set DebutGene [lindex $LInfo 1] set FinGene [lindex $LInfo 2] #set Id [lindex $LInfo 3] #set Fold [set Expression($Nom)] #lappend LInfo $Fold lappend LInfo "Gene" #set ColorFill [CouleurDuFold $Fold] #set ColorFill "purple" set ColorFill "darkorange" set PosXMin [expr $BordX + ($DebutGene*$Facteur)] set PosXMax [expr $BordX + ($FinGene*$Facteur)] #if {$Sens == "+"} {set Var -10} elseif {$Sens == "-"} {set Var 10} set Var -10 #if {$Qui != "OnlyTheBest" && $Info != "BestLoc"} {set Var [expr $Var * 3]} $K create rectangle $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline $ColorFill -fill $ColorFill -tags $LInfo } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "darkorange" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "darkorange" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "All Human genes UCSC" -font "$PoliceTitre" -fill "darkorange" } ################ Fin localisation CGH BAC Oligo et miRNAs et RefSeq et genes ########################## LesNomsEnStock $K $LesNoms #$K bind "Contig" "DevoileLesContigs $K %x %y Enter" #$K bind "Contig" "DevoileLesContigs $K %x %y Leave" #$K bind "Box" "DevoileLesBoites $K %x %y Enter" #$K bind "Box" "DevoileLesBoites $K %x %y Leave" $K bind "Affy" "DevoileLePlotAffy $K %x %y Enter" $K bind "Affy" "DevoileLePlotAffy $K %x %y Leave" $K bind "Affy" <1> "AfficheLePlotAffy $K" $K bind "CGHOligo" "DevoileLePlot $K %x %y Enter" $K bind "CGHOligo" "DevoileLePlot $K %x %y Leave" $K bind "CGHOligo" <1> "AfficheLePlot $K" $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "CGH" <1> "AfficheLePlot $K" #$K bind "Ref" "DevoileLesRefSeq $K %x %y Enter" #$K bind "Ref" "DevoileLesRefSeq $K %x %y Leave" $K bind "Gene" "DevoileLesGenes $K %x %y Enter" $K bind "Gene" "DevoileLesGenes $K %x %y Leave" $K bind "Gene" <1> "AfficheLesGenes $K" $K bind "Oli" "DevoileLesOligo $K %x %y Enter" $K bind "Oli" "DevoileLesOligo $K %x %y Leave" $K bind "Oli" <1> "AfficheLesOligo $K" $K bind "BAC" "DevoileLesBAC $K %x %y Enter" $K bind "BAC" "DevoileLesBAC $K %x %y Leave" $K bind "BAC" <1> "AfficheLesBAC $K" $K bind "Box" "DevoileLesmiRNAs $K %x %y Enter" $K bind "Box" "DevoileLesmiRNAs $K %x %y Leave" $K bind "Box" <1> "AfficheLesmiRNAs $K" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" #$K bind "BandesCytologiques" <1> "AfficheRequeteSurLaMeilleureLocalisation $K $FichierLocalisation $Qui \[LesNomsEnStock $K\]" #$K bind "Box" <1> "AfficheFicheInfo $K" regsub {\.canvas} $K "" w #set B [BoutonneLaFenetre $w "WithMapViewer/WithoutMapViewer\nOnlyBestLoc/All"] #bind $B <1> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] WithMapViewer" #bind $B <2> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] WithoutMapViewer" #bind $B "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] $WithoutOrWithMapViewer" #bind $B "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] $WithoutOrWithMapViewer" #set C [BoutonneLaFenetre $w "Histogramm"] #bind $C <1> "ChoixHistogramme" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" FaireLaSuiteAnnaick .fenetre return $K } proc ac_IllustreUnChromosomeAvtEtApresSeg {{Chromosome ""} {FichierCourbeCGH ""} {FichierCourbeSEG ""} {LesPos ""} {LesNoms ""}} { #choix du cas if {$Chromosome==""} {set Chromosome [ChoixDuChromosome]} if {$FichierCourbeCGH==""} {set FichierCourbeCGH [ChoixDuFichierCourbeCGH]} if {$FichierCourbeSEG==""} {set FichierCourbeSEG [ChoixDuFichierCourbeSEG]} #chro posmid val if {![file exists $FichierCourbeCGH] || $FichierCourbeCGH == ""} {return ""} if {![file exists $FichierCourbeSEG] || $FichierCourbeSEG == ""} {return ""} set NomFichierCGH [file tail $FichierCourbeCGH] set NomFichierSEG [file tail $FichierCourbeSEG] ChargeFichierCourbeCGH TabC $FichierCourbeCGH $Chromosome $LesPos ChargeFichierSEG TabL $FichierCourbeSEG $Chromosome $LesPos set nChromosome [NumeroDuChromosome $Chromosome] #Voir proc CreeFichierCytologicMapUCSC set FichierBandesCytos "[RepertoireDuGenome]/PRIMA_Affichage/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 #set HauteurMax [expr $BordY + $HauteurBoiteChromo + 4*$HauteurBoite + 3*$EcartEntreRepresentations] # modif MG: Ajout des oligo et des genes set HauteurMax [expr $BordY + $HauteurBoiteChromo + 6*$HauteurBoite + 5*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] set Taille [expr round($TailleChromo * 1.0/1.e6)] set Facteur [expr $LargeurAffichage / $TailleChromo] ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos if {![info exist LesBandesCytos($Chromosome,TailleP)]} {return ""} set LesBandesP [lsort -decreasing [set LesBandesCytos($Chromosome,LesBandesP)]] set LesBandesQ [lsort [set LesBandesCytos($Chromosome,LesBandesQ)]] set LesBandesCytologiques $LesBandesP foreach BandeQ $LesBandesQ {lappend LesBandesCytologiques $BandeQ} set PosYMin [expr $HauteurMax - $BordY - $HauteurBoiteChromo] set PosYMax [expr $HauteurMax - $BordY ] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set i 0 set PosIni 0 ### Mapper le chromosome et ses bandes cytologiques ### foreach Bande $LesBandesCytologiques { set LesInfos [set LesBandesCytos($Chromosome,$Bande)] set Position [expr [lindex $LesInfos 0] * 1.e6] set TailleBande [expr round(($Position-$PosIni)/1.e6)] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosXMax [expr $BordX + ($Position*$Facteur)] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$Bande" "$TailleBande" "BandesCytologiques"] if {$i == 40} {set i 0} else {incr i 10} set PosXMin $PosXMax set PosIni $Position } $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "blue" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "blue" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*1/3] -text "$Chromosome" -font "$PoliceTitre" -fill "blue" ################## Tracer le plot by position for 1 given patient ### CGH ### set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set x [InterrogeFichierCourbeCGH $FichierCourbeCGH "unset"] if {[regexp "Oligo" $NomFichierCGH]|| [regexp "CL" $NomFichierCGH]} { set VMax [LaValeurMaxCGHOligo $FichierCourbeCGH $Chromosome] #vmax formate set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMin [LaValeurMinCGHOligo $FichierCourbeCGH $Chromosome] set VMinf [format "%.2f" [expr $VMin*1.0]] set VuOligo 1 } else { set VMax [LaValeurMaxCGHBAC $FichierCourbeCGH $Chromosome] #vmax formate set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMin [LaValeurMinCGHBAC $FichierCourbeCGH $Chromosome] set VMinf [format "%.2f" [expr $VMin*1.0]] set VuBAC 1 } set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] set X1 0;set Y1 0 if {[info exists TabC($FichierCourbeCGH,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbeCGH,Chromosome,$Chromosome,LesPos)] { set PosMid $Pos foreach LInfo [set TabC($FichierCourbeCGH,Chromosome,$Chromosome,$Pos)] { if {[regexp "Oligo" $NomFichierCGH] || [regexp "CL" $NomFichierCGH]} { set Val [lindex $LInfo 3] set Val [expr ($Val*log(10)/log(2))*1.0] } else { set Val [lindex $LInfo 2] } set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { set X1 $PosMid set Y1 $Value continue } if {($X1>$DebutCentro && $X1<$FinCentro)||($PosMid>$DebutCentro && $PosMid<$FinCentro)} { set X1 $PosMid set Y1 $Value continue } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 3 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierCGH CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } ### Tracer le plot by position for 1 given patient ### SEG ### set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set VMin [LaValeurMinCGHSeg $FichierCourbeSEG $Chromosome] set VMax [LaValeurMaxCGHSeg $FichierCourbeSEG $Chromosome] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] ### set X1 0;set Y1 0 if {[info exists TabL($FichierCourbeSEG,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabL($FichierCourbeSEG,Chromosome,$Chromosome,LesPos)] { #set PosMid $Pos foreach LInfo [set TabL($FichierCourbeSEG,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] #FaireLire "$FichierCourbeSEG $Chromosome $PosMid $Val" set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -0 #ligne repere a 2 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX -10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierSEG CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } ################ Fin plots ########################## set FichierLocCGHOligo "[RepertoireDuGenome]/PRIMA_CGH/CGH_Oligo_localisation" set FichierLocCGHBAC "[RepertoireDuGenome]/PRIMA_CGH/CGH_BAC_localisation" # Localisation des CGH BAC if {[info exists VuBAC]} { ChargeFichierLoc TabB $FichierLocCGHBAC $Chromosome $LesNoms set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] if {[info exists TabB($FichierLocCGHBAC,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabB($FichierLocCGHBAC,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabB($FichierLocCGHBAC,Chromosome,$Chromosome,$Nom)] { set DebutBAC [lindex $LInfo 1] set FinBAC [lindex $LInfo 2] set PosMidBAC [expr $DebutBAC*1.0 + (($FinBAC*1.0-$DebutBAC*1.0)/2)] if {[info exists Vu($PosMidBAC)]} { set ColorFill "blue" } else { set ColorFill "darkorange" } lappend LInfo "BAC" #set ColorFill "yellow" if {($DebutBAC>=$DebutCentro && $DebutBAC<=$FinCentro) && ($FinBAC>=$DebutCentro && $FinBAC<=$FinCentro)} { # x1 et x2 sont dans le centromere set X1 $PosMid set Y1 $Value continue } set Var -10 set PosXMin [expr $BordX + ($DebutBAC*$Facteur)] set PosXMax [expr $BordX + ($FinBAC*$Facteur)] $K create rectangle $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline "$ColorFill" -fill $ColorFill -tags $LInfo } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #$K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "yellow" $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "darkorange" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "darkorange" #$K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "yellow" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "CGH BAC" -font "$PoliceTitre" -fill "darkorange" #$K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "CGH BAC" -font "$PoliceTitre" -fill "yellow" } } # Localisation des CGH Oligo if {[info exists VuOligo]} { ChargeFichierLoc TabO $FichierLocCGHOligo $Chromosome $LesNoms set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] if {[info exists TabO($FichierLocCGHOligo,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabO($FichierLocCGHOligo,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabO($FichierLocCGHOligo,Chromosome,$Chromosome,$Nom)] { set DebutOli [lindex $LInfo 1] set FinOli [lindex $LInfo 2] #set Id [lindex $LInfo 3] #set Fold [set Expression($Nom)] #lappend LInfo $Fold lappend LInfo "Oli" #set ColorFill [CouleurDuFold $Fold] set ColorFill "darkgreen" set PosXMin [expr $BordX + ($DebutOli*$Facteur)] set PosXMax [expr $BordX + ($FinOli*$Facteur)] #if {$Sens == "+"} {set Var -10} elseif {$Sens == "-"} {set Var 10} set Var -10 #if {$Qui != "OnlyTheBest" && $Info != "BestLoc"} {set Var [expr $Var * 3]} $K create rectangle $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline $ColorFill -fill $ColorFill -tags $LInfo } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "darkgreen" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "darkgreen" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "CGH Oligo" -font "$PoliceTitre" -fill "darkgreen" } } # Localisation des Human genes UCSC set FichierLocGenes "[RepertoireDuGenome]/PRIMA_Affichage/HumanAllGenesUCSC" ChargeFichierLoc TabG $FichierLocGenes $Chromosome $LesNoms set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] if {[info exists TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)]} { foreach Nom [set TabG($FichierLocGenes,Chromosome,$Chromosome,LesNoms)] { foreach LInfo [set TabG($FichierLocGenes,Chromosome,$Chromosome,$Nom)] { #Espionne coucou set DebutGene [lindex $LInfo 1] set FinGene [lindex $LInfo 2] #set Id [lindex $LInfo 3] #set Fold [set Expression($Nom)] #lappend LInfo $Fold lappend LInfo "Gene" #set ColorFill [CouleurDuFold $Fold] #set ColorFill "purple" set ColorFill "darkorange" set PosXMin [expr $BordX + ($DebutGene*$Facteur)] set PosXMax [expr $BordX + ($FinGene*$Facteur)] #if {$Sens == "+"} {set Var -10} elseif {$Sens == "-"} {set Var 10} set Var -10 #if {$Qui != "OnlyTheBest" && $Info != "BestLoc"} {set Var [expr $Var * 3]} $K create rectangle $PosXMin [expr $PosYMin + $Var] $PosXMax [expr $PosYMax + $Var] -outline $ColorFill -fill $ColorFill -tags $LInfo } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "darkorange" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "darkorange" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations/2] -text "All Human genes UCSC" -font "$PoliceTitre" -fill "darkorange" } ################ Fin localisation des boites et des genes ########################## LesNomsEnStock $K $LesNoms $K bind "CGHSEG" "DevoileLePlot $K %x %y Enter" $K bind "CGHSEG" "DevoileLePlot $K %x %y Leave" $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "Gene" "DevoileLesGenes $K %x %y Enter" $K bind "Gene" "DevoileLesGenes $K %x %y Leave" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc ac_IllustreUnChromosomeCGH {{Chromosome ""} {LesCas ""} {LesPos ""} {LesNoms ""}} { Espionne "ac_IllustreUnChromosomeCGH $Chromosome $LesCas , en cours" if {$Chromosome==""} {set Chromosome [ChoixDuChromosome]} set nChromosome [NumeroDuChromosome $Chromosome] set FichierBandesCytos "[RepertoireDuGenome]/PRIMA_Affichage/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 set HauteurMax [expr $BordY + $HauteurBoiteChromo + [expr [llength $LesCas]-1] *$HauteurBoite + [expr [llength $LesCas]+1]*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] set Taille [expr round($TailleChromo * 1.0/1.e6)] set Facteur [expr $LargeurAffichage / $TailleChromo] ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos if {![info exist LesBandesCytos($Chromosome,TailleP)]} {return ""} set LesBandesP [lsort -decreasing [set LesBandesCytos($Chromosome,LesBandesP)]] set LesBandesQ [lsort [set LesBandesCytos($Chromosome,LesBandesQ)]] set LesBandesCytologiques $LesBandesP foreach BandeQ $LesBandesQ {lappend LesBandesCytologiques $BandeQ} set PosYMin [expr $HauteurMax - $BordY - $HauteurBoiteChromo] set PosYMax [expr $HauteurMax - $BordY ] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set PosIni 0 set i 0 ### Mapper le chromosome et ses bandes cytologiques ### foreach Bande $LesBandesCytologiques { set LesInfos [set LesBandesCytos($Chromosome,$Bande)] set Position [expr [lindex $LesInfos 0] * 1.e6] set TailleBande [expr round(($Position-$PosIni)/1.e6)] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosXMax [expr $BordX + ($Position*$Facteur)] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$Bande" "$TailleBande" "BandesCytologiques"] if {$i == 40} {set i 0} else {incr i 10} set PosXMin $PosXMax set PosIni $Position } $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "blue" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "blue" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*1/3] -text "$Chromosome" -font "$PoliceTitre" -fill "blue" ### Tracer les plot BAC ### # pour chaque cas foreach Cas $LesCas { Espionne $Cas set FichierCourbe $Cas if {![file exists $FichierCourbe]} {Espionne "$FichierCourbe does not exist"; return} set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set NomFichier [file tail $FichierCourbe] if {[regexp "BAC" $Cas]} {set TypeCGH "BAC"} if {[regexp "Oligo" $Cas]} {set TypeCGH "Oligo"} if {[regexp "CL" $Cas]} {set TypeCGH "CL"} if {$TypeCGH=="Oligo" || $TypeCGH=="CL"} { # meta: min 817 max 819 #set VMax 2.97 #set VMin -2.48 # HR: min 823 max 823 set VMax 2.61 set VMin -2.49 } else { #set VMax [LaValeurMaxCGHBAC $FichierCourbe $Chromosome] #set VMin [LaValeurMinCGHBAC $FichierCourbe $Chromosome] # meta: min 806 max 819 #set VMax 2.20 #set VMin -1.05 # HR: min 821 max 823 set VMax 1.31 set VMin -1.01 } set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] if {[info exists TabC]} {unset TabC} ChargeFichierCourbeCGH TabC $FichierCourbe $Chromosome $LesPos set X1 0;set Y1 0 if {[info exists TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbe,Chromosome,$Chromosome,LesPos)] { set PosMid $Pos foreach LInfo [set TabC($FichierCourbe,Chromosome,$Chromosome,$Pos)] { if {$TypeCGH=="BAC"} { set Val [lindex $LInfo 2] lappend LInfo "CGH" } else { set Val [lindex $LInfo 3] set Val [expr ($Val*log(10)/log(2))*1.0] lappend LInfo "CGHOligo" } set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] set ColorFill "Mediumblue" set Var -10 if {$X1==0 && $Y1==0} { set X1 $PosMid set Y1 $Value continue } # interrompre la courbe quand centromere if {$X1<=$DebutCentro && $PosMid>=$FinCentro} { set X1 $PosMid set Y1 $Value continue } if {($X1>$DebutCentro && $X1<$FinCentro)||($PosMid>$DebutCentro && $PosMid<$FinCentro)} { set X1 $PosMid set Y1 $Value continue } set PosX1 [expr $BordX + ($X1*$Facteur)] set PosY1 [expr $PosYMin + ($Y1*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosMid*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 3 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 set X1 $PosMid set Y1 $Value } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -0 #ligne repere a 0 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" #echelle horizontale $K create text [expr $BordX-10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichier CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } } ################ Fin Courbes ########################## LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "CGH" <1> "AfficheLePlot $K" $K bind "CGHOligo" "DevoileLePlot $K %x %y Enter" $K bind "CGHOligo" "DevoileLePlot $K %x %y Leave" $K bind "CGHOligo" <1> "AfficheLePlot $K" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc ac_IllustreUnChromosomeCGH_seg {{Chromosome ""} {LesCas ""} {LesPos ""} {LesNoms ""}} { Espionne "ac_IllustreUnChromosomeCGH_seg $Chromosome $LesCas , en cours" if {$Chromosome==""} {set Chromosome [ChoixDuChromosome]} set nChromosome [NumeroDuChromosome $Chromosome] set FichierBandesCytos "[RepertoireDuGenome]/PRIMA_Affichage/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 set HauteurMax [expr $BordY + $HauteurBoiteChromo + [expr [llength $LesCas]-1] *$HauteurBoite + [expr [llength $LesCas]+1]*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] set Taille [expr round($TailleChromo * 1.0/1.e6)] set Facteur [expr $LargeurAffichage / $TailleChromo] ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos if {![info exist LesBandesCytos($Chromosome,TailleP)]} {return ""} set LesBandesP [lsort -decreasing [set LesBandesCytos($Chromosome,LesBandesP)]] set LesBandesQ [lsort [set LesBandesCytos($Chromosome,LesBandesQ)]] set LesBandesCytologiques $LesBandesP foreach BandeQ $LesBandesQ {lappend LesBandesCytologiques $BandeQ} set PosYMin [expr $HauteurMax - $BordY - $HauteurBoiteChromo] set PosYMax [expr $HauteurMax - $BordY ] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set PosIni 0 set i 0 ### Mapper le chromosome et ses bandes cytologiques ### foreach Bande $LesBandesCytologiques { set LesInfos [set LesBandesCytos($Chromosome,$Bande)] set Position [expr [lindex $LesInfos 0] * 1.e6] set TailleBande [expr round(($Position-$PosIni)/1.e6)] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosXMax [expr $BordX + ($Position*$Facteur)] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$Bande" "$TailleBande" "BandesCytologiques"] if {$i == 40} {set i 0} else {incr i 10} set PosXMin $PosXMax set PosIni $Position } $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "blue" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "blue" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*1/3] -text "$Chromosome" -font "$PoliceTitre" -fill "blue" ## BAC ou oligo? foreach cas $LesCas { if {[regexp -nocase "BAC" $cas]} {set Type "BAC";break} else {set Type "Oligo";break} } Espionne "type :$Type" ### Tracer les plot ### ### BAC # pour chaque cas Espionne "liste: $LesCas" if {$Type=="BAC"} { foreach Cas $LesCas { Espionne $Cas set FichierCourbeBACSeg $Cas set NomFichierBACSeg [file tail $FichierCourbeBACSeg] ChargeFichierSEG TabC $FichierCourbeBACSeg $Chromosome $LesPos set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] # chro8 meta: min 806 max 819 #set VMin -0.70 #set VMax 1.84 # chro8 hr: min 821 max 815 set VMin -0.54 set VMax 0.96 set VMaxf $VMax set VMinf $VMin if {$VMaxf==0.00 || $VMinf==0.00} { set FacteurY [expr ($EcartEntreRepresentations/2)/1.50] } else { set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] } ### set X1 0;set Y1 0 if {[info exists TabC($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)] { #set PosMid $Pos foreach LInfo [set TabC($FichierCourbeBACSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 2 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min if {$VMax!=0.00 && $VMin!=0.00} { $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 if {$VMin==$VMax} { $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "$VMaxf" -font "$Police" -fill "Mediumblue" } else { #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" } } #echelle horizontale $K create text [expr $BordX -10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierBACSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } } } else { foreach Cas $LesCas { Espionne $Cas set FichierCourbeOligoSeg $Cas set NomFichierOligoSeg [file tail $FichierCourbeOligoSeg] ChargeFichierSEG TabL $FichierCourbeOligoSeg $Chromosome $LesPos set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] # meta: min 819 max 819 #set VMin -0.94 #set VMax 2.13 # hr: min 823 max 823 set VMin -1.49 set VMax 1.85 set VMaxf $VMax set VMinf $VMin if {$VMaxf==0.00 || $VMinf==0.00} { set FacteurY [expr ($EcartEntreRepresentations/2)/1.50] } else { set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] } ### set X1 0;set Y1 0 if {[info exists TabL($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabL($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)] { #set PosMid $Pos foreach LInfo [set TabL($FichierCourbeOligoSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -0 #ligne repere a 2 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min if {$VMax!=0.00 && $VMin!=0.00} { $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 if {$VMin==$VMax} { $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "$VMaxf" -font "$Police" -fill "Mediumblue" } else { #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" } } #echelle horizontale $K create text [expr $BordX -10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierOligoSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } } } ################ Fin Courbes ########################## LesNomsEnStock $K $LesNoms $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "CGH" <1> "AfficheLePlot $K" $K bind "CGHOligo" "DevoileLePlot $K %x %y Enter" $K bind "CGHOligo" "DevoileLePlot $K %x %y Leave" $K bind "CGHOligo" <1> "AfficheLePlot $K" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc ac_IllustreUnChromosome_SEG {{Chromosome ""} {FichierCourbeBACSeg ""} {FichierCourbeOligoSeg ""} {LesPos ""} {LesNoms ""}} { #choix du cas if {$Chromosome==""} {set Chromosome [ChoixDuChromosome]} #chro posmid val #modif MG if {(![file exists $FichierCourbeBACSeg] || $FichierCourbeBACSeg == "") && (![file exists $FichierCourbeOligoSeg] || $FichierCourbeOligoSeg == "")} {return ""} if {[file exists $FichierCourbeBACSeg]} { set NomFichierBACSeg [file tail $FichierCourbeBACSeg] ChargeFichierSEG TabC $FichierCourbeBACSeg $Chromosome $LesPos } if {[file exists $FichierCourbeOligoSeg]} { set NomFichierOligoSeg [file tail $FichierCourbeOligoSeg] ChargeFichierSEG TabL $FichierCourbeOligoSeg $Chromosome $LesPos } set nChromosome [NumeroDuChromosome $Chromosome] #Voir proc CreeFichierCytologicMapUCSC set FichierBandesCytos "[RepertoireDuGenome]/PRIMA_Affichage/CytologicMap" if {![file exists $FichierBandesCytos]} { Espionne "$FichierBandesCytos does not exist" return "" } set FichierPosCentro "[RepertoireDuGenome]/PRIMA_Affichage/PosCentromeres" set DebutCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome DebutCentro] set FinCentro [InterrogeFichierCentromere $FichierPosCentro $Chromosome FinCentro] set PolicePetite "Courier 8" set Police "Courier 8" set PoliceTitre "Courier 12 bold" set BordY 30.0 set BordX 75.0 set HauteurFenetre [expr [winfo screenwidth .] - 200] set LargeurMax [expr [winfo screenwidth .] - 100] set LargeurFenetre [expr [winfo screenwidth .] - 100 ] set LargeurAffichage [expr ($LargeurMax - 2*$BordX)*1.0] set HauteurBoiteChromo 30 set HauteurBoite 10 set EcartEntreRepresentations 100 set HauteurMax [expr $BordY + $HauteurBoiteChromo + 4*$HauteurBoite + 3*$EcartEntreRepresentations] if {$HauteurMax < $HauteurFenetre} {set HauteurFenetre $HauteurMax} set HauteurAffichage [expr ($HauteurMax - 2*$BordY)*1.0] set K [UnCanva $LargeurMax $HauteurMax $LargeurFenetre $HauteurFenetre] set FichierChros "[RepertoireDuGenome]/PRIMA_Affichage/chromInfo" set x [InterrogeFichierHumanChromos $FichierChros "unset"] set TailleChromo [InterrogeFichierHumanChromos $FichierChros $nChromosome Taille] set TailleChromo [expr $TailleChromo*1.0] set Taille [expr round($TailleChromo * 1.0/1.e6)] set Facteur [expr $LargeurAffichage / $TailleChromo] ChargeBandesCytologiques LesBandesCytos $FichierBandesCytos if {![info exist LesBandesCytos($Chromosome,TailleP)]} {return ""} set LesBandesP [lsort -decreasing [set LesBandesCytos($Chromosome,LesBandesP)]] set LesBandesQ [lsort [set LesBandesCytos($Chromosome,LesBandesQ)]] set LesBandesCytologiques $LesBandesP foreach BandeQ $LesBandesQ {lappend LesBandesCytologiques $BandeQ} set PosYMin [expr $HauteurMax - $BordY - $HauteurBoiteChromo] set PosYMax [expr $HauteurMax - $BordY ] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set PosXCenter [expr $LargeurMax/2] set PosXMin $BordX set i 0 set PosIni 0 ### Mapper le chromosome et ses bandes cytologiques ### foreach Bande $LesBandesCytologiques { set LesInfos [set LesBandesCytos($Chromosome,$Bande)] set Position [expr [lindex $LesInfos 0] * 1.e6] set TailleBande [expr round(($Position-$PosIni)/1.e6)] set Type [lindex $LesInfos 2] set ColorFill [CouleurDeLaBandeCytologique $Type] set PosXMax [expr $BordX + ($Position*$Facteur)] $K create rectangle $PosXMin $PosYMin $PosXMax $PosYMax -outline black -fill $ColorFill -tags [list "$Bande" "$TailleBande" "BandesCytologiques"] if {$i == 40} {set i 0} else {incr i 10} set PosXMin $PosXMax set PosIni $Position } $K create text [expr $BordX/2] $PosYCenter -text "0 Mpb" -font "$Police" -fill "blue" $K create text [expr $LargeurMax - $BordX/2] $PosYCenter -text "$Taille Mpb" -font "$Police" -fill "blue" $K create text $PosXCenter [expr $PosYMin - $EcartEntreRepresentations*1/3] -text "$Chromosome" -font "$PoliceTitre" -fill "blue" ################## chro display BAC ############################### # modif MG if {$FichierCourbeBACSeg!="" && [file exists $FichierCourbeBACSeg]} { set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set VMin [LaValeurMinCGHSeg $FichierCourbeBACSeg $Chromosome] set VMax [LaValeurMaxCGHSeg $FichierCourbeBACSeg $Chromosome] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] if {$VMaxf==0.00 || $VMinf==0.00} { set FacteurY [expr ($EcartEntreRepresentations/2)/1.50] } else { set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] } ### set X1 0;set Y1 0 if {[info exists TabC($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabC($FichierCourbeBACSeg,Chromosome,$Chromosome,LesPos)] { #set PosMid $Pos foreach LInfo [set TabC($FichierCourbeBACSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] #FaireLire "$FichierCourbeSEG $Chromosome $PosMid $Val" set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -[format "%.2f" [expr ($VMin+abs($VMin))*1.0]] #ligne repere a 2 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min if {$VMax!=0.00 && $VMin!=0.00} { $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 if {$VMin==$VMax} { $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "$VMaxf" -font "$Police" -fill "Mediumblue" } else { #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" } } #echelle horizontale $K create text [expr $BordX -10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierBACSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } } ######################### chro display Oligo ####################### # Modif MG if {$FichierCourbeOligoSeg!="" && [file exists $FichierCourbeOligoSeg]} { set PosYMax [expr $PosYMin - $EcartEntreRepresentations] set PosYMin [expr $PosYMax - $HauteurBoite] set PosXCenter [expr $LargeurMax/2] set PosYCenter [expr ($PosYMax + $PosYMin)/2] set VMin [LaValeurMinCGHSeg $FichierCourbeOligoSeg $Chromosome] set VMax [LaValeurMaxCGHSeg $FichierCourbeOligoSeg $Chromosome] set VMaxf [format "%.2f" [expr $VMax*1.0]] set VMinf [format "%.2f" [expr $VMin*1.0]] if {$VMaxf==0.00 || $VMinf==0.00} { set FacteurY [expr ($EcartEntreRepresentations/2)/1.50] } else { set FacteurY [expr ($EcartEntreRepresentations/2)/($VMaxf+abs($VMinf))] } ### set X1 0;set Y1 0 if {[info exists TabL($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)]} { foreach Pos [set TabL($FichierCourbeOligoSeg,Chromosome,$Chromosome,LesPos)] { #set PosMid $Pos foreach LInfo [set TabL($FichierCourbeOligoSeg,Chromosome,$Chromosome,$Pos)] { set PosInf [lindex $LInfo 3] set PosSup [lindex $LInfo 4] set Val [lindex $LInfo 6] #FaireLire "$FichierCourbeSEG $Chromosome $PosMid $Val" set Valt [expr abs($VMin)+$Val] set Value -[format "%.2f" [expr $Valt*1.0]] lappend LInfo "CGH" set ColorFill "Mediumblue" set Var -10 set PosX1 [expr $BordX + ($PosInf*$Facteur)] set PosY1 [expr $PosYMin + ($Value*$FacteurY) + $Var] set PosX2 [expr $BordX + ($PosSup*$Facteur)] set PosY2 [expr $PosYMin + ($Value*$FacteurY) + $Var] $K create oval $PosX2 $PosY2 $PosX2 $PosY2 -outline $ColorFill -fill $ColorFill -width 1 -tags $LInfo $K create line $PosX1 $PosY1 $PosX2 $PosY2 -fill $ColorFill -width 2 } } $K create line $BordX $PosYCenter [expr $LargeurMax-$BordX] $PosYCenter -fill black -width 2 #echelle set AfficheVMax -[format "%.2f" [expr ($VMax+abs($VMin))*1.0]] set AfficheVMin -0 #ligne repere a 2 en pointille $K create line $BordX [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] [expr $LargeurMax-$BordX] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -fill red -width 1 -dash {2 2} #lignes verticales $K create line $BordX $PosYCenter $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $LargeurMax-$BordX] $PosYCenter [expr $LargeurMax-$BordX] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 #petit trait repere max et min if {$VMax!=0.00 && $VMin!=0.00} { $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -fill black -width 2 $K create line [expr $BordX-10] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] $BordX [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -fill black -width 2 if {$VMin==$VMax} { $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "$VMaxf" -font "$Police" -fill "Mediumblue" } else { #val max $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMax * $FacteurY) + $Var] -text "max $VMaxf" -font "$Police" -fill "Mediumblue" #val min $K create text [expr $BordX/2] [expr $PosYMin + ($AfficheVMin * $FacteurY) + $Var] -text "min $VMinf" -font "$Police" -fill "Mediumblue" } } #echelle horizontale $K create text [expr $BordX -10] [expr $PosYMin + (-[expr abs($VMinf)]* $FacteurY) + $Var] -text "0" -font "$Police" -fill "Red" $K create text $PosXCenter [expr $PosYCenter + 10] -text "$NomFichierOligoSeg CGH plot" -font "$PoliceTitre" -fill "Mediumblue" } } ################ Fin localisation CGH CGH Oligo et SEG ########################## LesNomsEnStock $K $LesNoms $K bind "CGHSEG" "DevoileLePlot $K %x %y Enter" $K bind "CGHSEG" "DevoileLePlot $K %x %y Leave" $K bind "CGH" "DevoileLePlot $K %x %y Enter" $K bind "CGH" "DevoileLePlot $K %x %y Leave" $K bind "Gene" "DevoileLesGenes $K %x %y Enter" $K bind "Gene" "DevoileLesGenes $K %x %y Leave" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Enter" $K bind "BandesCytologiques" "DevoileLesBandesCytologiques $K %x %y Leave" #regsub {\.canvas} $K "" w #set B [BoutonneLaFenetre $w "WithMapViewer/WithoutMapViewer\nOnlyBestLoc/All"] #bind $B <1> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] WithMapViewer" #bind $B <2> "IllustreUnChromosome $Chromosome \[LesNomsEnStock $K\] WithoutMapViewer" #set C [BoutonneLaFenetre $w "Histogramm"] #bind $C <1> "ChoixHistogramme" bind $K "Viseur $K %x %y" bind $K "Viseur $K %x %y" return $K } proc ac_JumeauRepresentatif {Nom} { global JumeauRepresentatif if {[info exists JumeauRepresentatif($Nom)]} { return [set JumeauRepresentatif($Nom)] } if {[info exists JumeauRepresentatif("EstCharge")]} { return "" } set FichierDesJumeaux "[RepertoireDuGenome]/fiches/ClustersNew" if { $FichierDesJumeaux=={} || ! [file exists $FichierDesJumeaux]} {return ""} foreach Ligne [LesLignesDuFichier $FichierDesJumeaux] { set LesJumeaux [split $Ligne " "] set JR [lindex $LesJumeaux 0] lappend JumeauRepresentatif(LaListeMerci) $JR foreach J [lrange $LesJumeaux 0 end] { set JumeauRepresentatif($J) $JR } } set JumeauRepresentatif("EstCharge") 1 return [JumeauRepresentatif $Nom] } proc ac_LesProchesDansLeBlast {FichierBlast {DirDesJumeaux ""} {Identity ""} {PCoverQuery ""} {PCoverSubject ""} {FichierLog ""}} { Wup "Determine dans un fichier blast les BIds tres proches en fonction du IdGlobal puis du IdEtendu" ##ac set NomFichier [file tail $FichierBlast] #set DirDesJumeaux "[RepertoireDuGenome]/Jumeaux" if {![file exists $DirDesJumeaux]} {file mkdir $DirDesJumeaux} if {$Identity == ""} {set Identity 0.95} if {$PCoverQuery == ""} {set PCoverQuery 0.95} if {$PCoverSubject == ""} {set PCoverSubject 0.95} if {$FichierLog == ""} {set FichierLog "$DirDesJumeaux/TousLesJumeaux_${Identity}_${PCoverQuery}_${PCoverSubject}.log"} DepouilleLeBlast TabBlast $FichierBlast "1e-3" set NbSbjct [set TabBlast(NbSubject)] set TailleQuery [set TabBlast(Taille)] set NomQuery [set TabBlast(Query)] set LesProches "" #ac #if {$NbSbjct=="0"} {Espionne "Petit probleme pas de hit";return ""} if {$NbSbjct=="0"} {return ""} AppendAuFichier $FichierLog "\nQuery: $NomFichier $NomQuery" #AppendAuFichier $FichierLog "\nQuery: $NomQuery" for {set i 1} {$i <=$NbSbjct} {incr i} { set IdGlobal 0 set PRecouvrementQuery 0 set PRecouvrementSubject 0 set BId [set TabBlast($i)] set IdGlobal [PourcentageDIdentiteGlobal_TabBlast TabBlast $BId] if {$IdGlobal<=$Identity} {continue} #PCoverQuery Query par rapport a Subject set PRecouvrementQuery [PourcentageDeRecouvrement_TabBlast TabBlast $BId "Query"] #PCoverSubject Subject par rapport a Query set PRecouvrementSubject [PourcentageDeRecouvrement_TabBlast TabBlast $BId "Subject"] if {$PRecouvrementQuery <= $PCoverQuery || $PRecouvrementSubject <= $PCoverSubject} {continue} #set IdEtendu [PourcentageDesBasesAligneesSurToutesLesBasesAlignables_TabBlast TabBlast $BId] #set P2 [PourcentageDesRegionsAligneesSurToutesLesRegionsAlignables_TabBlast TabBlast $BId] lappend LesProches $BId AppendAuFichier $FichierLog ">>$BId IdGlobal $IdGlobal Cover S/Q $PRecouvrementQuery Cover Q/S $PRecouvrementSubject" } if {[info exists TabBlast]} {unset TabBlast} return $LesProches } proc ac_LesProchesDansLeBlastBis {FichierBlast {Identity ""} {PCoverQuery ""} {PCoverSubject ""}} { Wup "Determine dans un fichier blast les BIds tres proches en fonction du IdGlobal et des 2 covers: PCoverQuery et PCoverSubject" ##ac set NomFichier [file tail $FichierBlast] if {$Identity == ""} {set Identity 0.95} if {$PCoverQuery == ""} {set PCoverQuery 0.95} if {$PCoverSubject == ""} {set PCoverSubject 0.95} #### Seuil Expect DepouilleLeBlast TabBlast $FichierBlast "1e-3" set NbSbjct [set TabBlast(NbSubject)] set TailleQuery [set TabBlast(Taille)] set NomQuery [set TabBlast(Query)] set LesProches "" #ac #if {$NbSbjct=="0"} {Espionne "Petit probleme pas de hit";return ""} if {$NbSbjct=="0"} {return 0} set Proches 0 for {set i 1} {$i <=$NbSbjct} {incr i} { set IdGlobal 0 set PRecouvrementQuery 0 set PRecouvrementSubject 0 set BId [set TabBlast($i)] set IdGlobal [PourcentageDIdentiteGlobal_TabBlast TabBlast $BId] if {$IdGlobal<=$Identity} {continue} #PCoverQuery: Query par rapport a Subject set PRecouvrementQuery [PourcentageDeRecouvrement_TabBlast TabBlast $BId "Query"] #PCoverSubject: Subject par rapport a Query set PRecouvrementSubject [PourcentageDeRecouvrement_TabBlast TabBlast $BId "Subject"] if {$PRecouvrementQuery <= $PCoverQuery || $PRecouvrementSubject <= $PCoverSubject} {continue} set Proches 1 break #lappend LesProches $BId } if {[info exists TabBlast]} {unset TabBlast} #return $LesProches return $Proches } proc ac_LocalisationPourAnnaick {FichierDesPABs} { #from Frederic C. set RepEM "[RepertoireDuGenome]/nuctfa_exonicmap" if {![file exists $RepEM]} {file mkdir $RepEM} set RepLoc "[RepertoireDuGenome]/Localisation" if {![file exists $RepLoc]} {file mkdir $RepLoc} set FichierBoxLoc "$RepLoc/NuctfaLocalisation_Human" set LeTexte {} #set L [CreeListePourFichierAUneColonne $FichierDesPABs] #Espionne [llength $L] foreach Nom [ListeDesPABs] { InterrogeFichierExonicMap unset set FileTFA "[RepertoireDuGenome]/nucmask/$Nom" set FileBlast "[RepertoireDuGenome]/blastnhuman/$Nom" if {![file exists $FileTFA] || ![file exists $FileBlast]} {continue} Espionne $Nom set FileEM "$RepEM/$Nom" if {![file exists $FileEM]} { ExonicMapHuman $FileTFA $FileBlast $FileEM "SansBlast" 0.05 0.0 "Yes" 0.95 10 150 0.1 } if {![file exists $FileEM]} {continue} foreach Ligne [mRNAHsapLocalisation $Nom $FileEM] { lappend LeTexte $Ligne } } SauveLesLignes $LeTexte dans $FichierBoxLoc return } proc ac_LocalisationPourAnnaick_miRNAs {FichierDesmiRNAs} { # from Frederic C. # FichierDesmiRNAs=ANALYSE/miRNAs/LesM (colonne des noms) set RepEM "[RepertoireDuGenome]/miRNAtfa_exonicmap" if {![file exists $RepEM]} {file mkdir $RepEM} set RepLoc "[RepertoireDuGenome]/Localisation" if {![file exists $RepLoc]} {file mkdir $RepLoc} set FichierBoxLoc "$RepLoc/miRNAtfaLocalisation_Human" set LeTexte {} set L [CreeListePourFichierAUneColonne $FichierDesmiRNAs] #Espionne [llength $L] foreach Nom $L { InterrogeFichierExonicMap unset set FileTFA "[RepertoireDuGenome]/mirnatfa/$Nom" set FileBlast "[RepertoireDuGenome]/mirnatfa_blastnhuman/$Nom" if {![file exists $FileTFA] || ![file exists $FileBlast]} {continue} Espionne $Nom set FileEM "$RepEM/$Nom" if {![file exists $FileEM]} { ExonicMapHuman $FileTFA $FileBlast $FileEM "SansBlast" 0.05 0.0 "Yes" 0.95 10 150 0.1 } if {![file exists $FileEM]} {continue} foreach Ligne [mRNAHsapLocalisation $Nom $FileEM] { lappend LeTexte $Ligne } } SauveLesLignes $LeTexte dans $FichierBoxLoc return } proc acc2 {} { set La [LesLignesDuFichier /home/moumou/rrps/sel.acc] set o [open sel.acc2 w] puts $o [join $La " "] close $o exit } proc accelerateMenu {menu {topWin .} {modBase Control-Key} disableVarName} { set i 0 set UCharsList {} while { $i <= [$menu index end] } { set type [ $menu type $i ] if { $type == "separator" } {incr i; continue} if { $type == "cascade" } { accelerateMenu [$menu entrycget $i -menu] $topWin $modBase $disableVarName; incr i ;continue} ; # Recursively follow cascades set label [ $menu entrycget $i -label] set underLineIndex [ $menu entrycget $i -underline] if {$underLineIndex < 0 } { incr i ;continue } set char [string index $label $underLineIndex] if { [lsearch $UCharsList $char] >= 0 } { puts "skipping $label" incr i continue } bind $topWin <$modBase-$char> [format "if \{\$%s\} \{%s invoke %d\}" $disableVarName $menu $i ] $menu entryconfigure $i -accelerator <$modBase-$char> lappend UCharsList incr i } } proc addToXmlMac {Fichier} { ReadRawFeatureFile $Fichier SauveLAlignement XML JLeSauveAs } proc add_quats {q1 q2} { set t1 [lrange $q1 0 2] set t1 [vscale $t1 [lindex $q2 3]] set t2 [lrange $q2 0 2] set t2 [vscale $t2 [lindex $q1 3]] set t3 [Vectoriel [lrange $q2 0 2] [lrange $q1 0 2]] set tf [vadd $t1 $t2] set tf [vadd $t3 $tf] lappend tf [expr {[lindex $q1 3] * [lindex $q2 3] - [vdot $q1 $q2]}] set dest $tf if {[incr ::qCount] > 97} { set ::qCount 0 set dest [normalize_quat $dest] } return $dest } proc addtb {} { global db set tb " - results : resultat de test { . pk_results P . pk_tests I . cm T clustering method . gapthr R threshold pour gap . pos T positions list } " set db [FabriqueDeTables $tb "" bench.sql 1] DumpSqliteDB $db close exit } proc adrs {} { set Ll [LesLignesDuFichier tmpp] set lem [list] foreach l $Ll { set l [string map {";" " " "," " "} $l] set Lv [split $l " "] set res [lsearch -inline -glob -all $Lv "*@*"] if {$res eq ""} {continue} lappend Lem {*}[split $res " "] } set o [open "nogonz.dat" w] puts $o [join $Lem \n] close $o exit } proc affichageHitsWeb {FichierEntree {Type Subj}} { set Type [string tolower $Type] if {[regexp mid $Type]} { set var lignesMid } elseif {[regexp sub $Type]} { set var lignesSubject } else { throw 2 {Type must be "Mid" or "Subject"} } puts stderr "[clock seconds] Parsing" set d [grouperHitsParTaxid [parserFichierBlast $FichierEntree]] puts stderr "[clock seconds] Done" set res {
    }
    	puts stderr "[clock seconds] Making groups"
    	dict for {taxid groupe} $d {
    		append res "Groupe OX=$taxid\n"
    		#puts "groupe isoformes pour OX=$taxid"
    		if {$taxid eq "unknown"} {
    			set tmpGroupes [list $groupe]
    		} else {
    			set tmpGroupes [grouperIsoformesScore $groupe estIsoformeFenetre $Type]
    		}
    		# affichage
    		foreach g $tmpGroupes {
    			set g [triHitsParNbTirets $g $Type]
    			set class ""
    			if {[llength $g] > 1} {
    				set class "ref"
    			}
    			foreach h $g {
    				append res ""
    				set shortid [$h getShortid]
    				for {set i 0} {$i<[$h getNbBlocks]} {incr i} {
    					append res "[format {%-20s} $shortid][string repeat " " [$h getOffset $i]][$h enleverTirets $Type $i]\n"
    					set shortid "    |"
    				}
    				append res ""
    				set class "iso"
    			}
    		}
    	}
    	puts stderr "[clock seconds] Done"
    	append res {
    } return $res } proc ale {} { for {set i 0} {$i < 1000000} {incr i} { set nv [expr {int(rand()*18)+2}] set Lv [list] for {set j 0} {$j < $nv} {incr j} { lappend Lv [expr {int(rand()*100)}] } set tot [::tcl::mathop::+ {*}$Lv] if {$tot == 0} {continue} set nb [expr {int(rand()*100)+1}] puts "" puts "nb = $nb" set s "" foreach v $Lv { append s [format %6d $v] } puts "$s" tvn $nb $Lv } exit } proc alignSequencesToConsensus {aContig} { upvar $aContig contig # Calculate and set the consensus left offset if {$contig(lowestRelativeConsensusPosition) < 1} { set consensusOffset [expr abs($contig(lowestRelativeConsensusPosition))+1] } else { set consensusOffset 0 } # Add gaps before the consensus sequence if needed if {$consensusOffset != 0} { set contig(consensus) "[string repeat "." $consensusOffset]$contig(consensus)" } # Let's do the same for each reads foreach readIdx $contig(index) { set contig($readIdx,sequence) "[string repeat "." [expr $consensusOffset - 1 + $contig($readIdx,consensusPosition)]]$contig($readIdx,sequence)" } } proc alignmentToSequenceIndex {alignedSequence} { array set index {} for {set i 0; set counter 0; set length [string length $alignedSequence]} {$i < $length} {incr i} { if {[regexp -nocase {[a-z]} [string index $alignedSequence $i]]} { incr counter set index([expr $i + 1]) $counter } } return [array get index] } proc anaa {} { package require sqlite3 sqlite3 d res.sql set Lf0 [d eval {select distinct nom from file as f, ln_file_block as lfb, ln_block_segment as lbs, segment as s where s.motiflen = 13 and s.rank = 0.0 and s.pk_segment = lbs.pk_segment and lbs.pk_block = lfb.pk_block and lfb.pk_file = f.pk_file and f.nbSeqs < 20 }] set Lf [d eval {select distinct nom from file where nbSeqs < 20}] puts "Lf0 [llength $Lf0]" puts "Lf [llength $Lf]" set diff [lor $Lf0 $Lf] puts "\n[join [lsort $diff] \n]" exit } proc anab {} { package require sqlite3 sqlite3 d res.sql set Ls [d eval {select b.start,b.stop,s.rank, s.min, s.max from segment as s, ln_block_segment as lbs, block as b, ln_file_block as lfb, file as f where f.nom = 'BB11003.xml' and f.pk_file = lfb.pk_file and lfb.pk_block = b.pk_block and b.pk_block = lbs.pk_block and lbs.pk_segment = s.pk_segment and s.motiflen = 13}] foreach {d f r min max} $Ls { puts "$d $f $r $min $max" } exit } proc anadb {} { global db InitTaxDB $db eval {begin transaction} set Lp [$db eval {select distinct(Parent) from taxonomy where isGold=1}] set Lv [$db eval "select NbKeep from taxonomy where taxid in ([join $Lp ,])"] set tot [+ {*}$Lv] puts "tot $tot" set Lp [$db eval {select distinct(Parent) from taxonomy where isGold=1 and NbGold=1}] set Lv [$db eval "select NbKeep from taxonomy where taxid in ([join $Lp ,])"] set tot [+ {*}$Lv] puts "tot $tot" set Lp [$db eval {select distinct(Parent) from taxonomy where isGold=1 and NbKeep=1}] set Lv [$db eval "select NbKeep from taxonomy where taxid in ([join $Lp ,])"] set tot [+ {*}$Lv] puts "tot $tot" # Model set Lv [$db eval {select t.taxid,t.Rank,t.Name from taxonomy as t , gold as g where g.Model=1 and g.taxid=t.taxid}] foreach {t r n} $Lv { puts "$n $r" set par [$db eval {select Parent from taxonomy where taxid=$t}] set rkp [$db eval {select Rank from taxonomy where taxid=$par}] set nf [$db eval {select count(*) from taxonomy where Parent=$par}] #puts " nb freres $nf" #puts " rk parent $rkp" } puts "" # check nbgold set Lgi [$db eval {select distinct Parent,NbGold from taxonomy where isGold=1 and NbGold=1}] set tot 0 foreach {t n} $Lgi { incr tot $n } set Ngold [$db eval {select count(*) from taxonomy where isGold = 1}] puts "NbGold $tot ngold $Ngold" set nG [$db eval {select count(*) from taxonomy where isGold=1 and NbGold=1}] puts "nG $nG" set Lr [$db eval {select distinct Rank from taxonomy}] foreach r [lsort $Lr] { puts "$r [$db eval {select count(*) from taxonomy where Rank=$r}]" } $db eval {commit} exit set Ln [$db eval {select NbGold from taxonomy where Rank="Genus"}] foreach n $Ln { incr tot $n } puts "total $tot" $db eval {commit} exit set euk [$db eval {select taxid from taxonomy where Name="Eukaryota"}] set Ltv [$db eval {select taxid,NbChildCum from taxonomy where Parent=$euk}] while {1} { set Lp [list] set max -1 ; set tmax 0 #puts "" foreach {t v} $Ltv { if {$v > $max} { set max $v set tmax $t set imax [format "%6d %-32s %6d | %d" {*}[$db eval {select taxid,Name,Parent,NbChildCum from taxonomy where taxid=$t}]] } } if {$max == 1} { break } puts $imax set Lp $tmax if {[llength $Lp] == 0} { break } set Ltv [$db eval "select taxid,NbChildCum from taxonomy where Parent in ([join $Lp ,])"] } $db eval {commit} $db close update return } proc anagold {} { package require sqlite3 set db root sqlite3 $db taxo.sql $db eval {begin transaction} set Ltnp [$db eval {select t.taxid, t.Name, t.Parent from sotol as s, taxonomy as t where s.isGold=1 and t.Rank='no rank' and s.taxid=t.taxid}] puts "[expr {[llength $Ltnp]/3}]" puts "" set Ltnp [lsort -stride 3 -index 1 $Ltnp] foreach {t n p} $Ltnp { lassign [$db eval {select Rank,Name,Parent from taxonomy where taxid=$p}] rk nm pr set ig [$db eval {select isGold from sotol where taxid=$p}] if {$rk ne "Species"} { incr no lappend Lrk $rk puts "no rank : $n" puts " par : $ig $rk $nm" lassign [$db eval {select Rank,Name,Parent from taxonomy where taxid=$pr}] rkp nmp prp set igp [$db eval {select isGold from sotol where taxid=$pr}] puts " Gpr : $igp $rkp $nmp" set lvp 0 while {$rkp ne "Species" && $prp > 0} { lassign [$db eval {select Rank,Parent from taxonomy where taxid=$prp}] rkp prp incr lvp } lappend Lanc $lvp puts "" if {$rkp eq "Species"} { lappend Lsig [$db eval {select isGold from sotol where taxid=$prp}] } } } $db eval {commit} puts "" puts "$no" puts "[lsort -unique $Lrk]" puts "[join [DenombreLaListe $Lanc] \n]" puts "" puts "[join [DenombreLaListe $Lsig] \n]" exit puts [$db eval {select count(s.isGold) from sotol as s, taxonomy as t where t.Name like 'escherichia coli%' and t.taxid=s.taxid and s.isGold=1}] exit } proc anal {} { global LNOrdali set Lf [LesFichiersDeBalibase] foreach l $Lf { unset -nocomplain LNOrdali DecortiqueXmlAgent $l set lgt [llength $LNOrdali] puts "$l $lgt" lappend Lg $lgt } array set Tres [CreeHistogramme $Lg 20] foreach k [lsort -real [array names Tres]] { puts "$k $Tres($k)" } exit } proc anald {} { global db InitTaxDB set Ld [$db eval {select g.domaine from sotol as s, gold as g where s.isComp = 1 and s.taxid = g. taxid}] set Ld [DenombreLaListe $Ld] puts "[join $Ld \n]" set Le [$db eval {select distinct g.taxid from gold as g, sotol as s where g.Domaine = 'EUKARYAL' and s.isComp=1 and s.taxid = g.taxid}] puts "toto [llength $Le]" $db close exit } proc analyseSuite {} { #Ajouter Espionne "Bilan Orthologie" DeleteDoublonFastaFilePourTous #mettre le BilanOrthologiePourTous dans analyse2 et doit faire le bilan avec les sequences dans le repertoire newtfas... #BilanOrthologiePourTous #Premier alignement multiple CreeLesBanquesBlastDesTFAsPourTous BlastPPourTous "" _dedicated_banquesdescopains exec ln -s blastp_dedicated_banquesdescopains blastp Espionne "Premier DbClustalPourTous" DbClustalPourTous Espionne "Sauvegarde first alignment" SauveFirstAlignmentPourTous #prepare le format d'entre pour psiblast Espionne "clustalConvertForpsiblast" clustalConvertForpsiblastPourTous ######### Deux psiblat avec pour l'instant une iteration demande d'information a l'utilisateur #premier pisblat contre protpdb Espionne "PsiBlastPXavierPourTous 1" #Peut-etre revoir la procedure PsiBlastPXavierPourTous???????? PsiBlastPXavierPourTous #deuxieme contre pdb onlyCreateFileResumePourTous global GardeToutPsiBlastPPourTous; unset GardeToutPsiBlastPPourTous global CommandePsiBlastPPourTous; unset CommandePsiBlastPPourTous Espionne "PsiBlastPXavierPourTous 2" PsiBlastPXavierPourTous #pour chaque SU creation d'un fihier contenant la liste des pdb trouver Espionne "parsePsiblastPourTous" parsePsiblastPourTous exec rm -R [RepertoireDuGenome]/banquesdescopains exec rm -R [RepertoireDuGenome]/blastp_dedicated_banquesdescopains exec rm -R [RepertoireDuGenome]/blastp exec rm -R [RepertoireDuGenome]/ballast Espionne "Second DbClustal" CreeLesBanquesBlastDesTFAsPourTous BlastPPourTous "" _dedicated_banquesdescopains exec ln -s blastp_dedicated_banquesdescopains blastp Espionne "DbClustalPourTous" DbClustalPourTous #Ajoute les noms des Organismes aux sequences des msf Espionne "Msf2MsfOrgPourTous" Msf2MsfOrgPourTous2 } proc analyseSuite2 {} { #Enleve les noms des Organimse aux sequence des msf Espionne "MsfOrg2MsfPourTous" MsfOrg2MsfPourTous2 Espionne "clustalConvertForMacsim" #Interproscan clustalConvertForMacsimPourTous Espionne "LeonEtMacsimPourTousX" LeonEtMacsimPourTousX #test programme pour remettre dans l'ordre le fichier macsimXml Espionne "reorder1PourTous" reorder1PourTous Espionne "KoAnnoPourTous" KoAnnoPourTous Espionne "tfadescopainsSansSw" tfadescopainsSansSwPourTous ########################################### VOIR AVEC LAETITIA POUR RAJOUTER DES PASTOUCHE AVEC INTERPROSCAN ET LITETCOMPLETEXML ################################ Espionne "Interproscan" Interproscan #reecris les fichiers xml avec les organismes Espionne "LitEtCompleteXML" LitEtCompleteXML Espionne "ReecritTousLesMacsimsAcOrga" ReecritTousLesMacsimsAcOrga ################################################################################################################################################################# Espionne "LesCopainsPourInterpro" SauveTfasPourInterproPourTous Espionne "StringPourTous" StringPourTous #Creation d'un repertoire qui contient un fichier tfasdescopains pour chaque SU en accord avec les modifications apporter dans l'analyse des alignements NettoiTfasDesCopainsPourTous #creation du bilan Orthologie fichier csv BilanOrthologiePourTous Espionne "Fichier Bilan" #Bilan fichier resumer pour l'ensemble des SUs FileBilanPourTous #creation d'un fichier texte r¨¦capitulatif pour chaque SUs Espionne "CreateFileResume" CreateFileResumePourTous #Sauvegarde pour chaque SU les sequence tfadescopains utilise pour l'analyse Interproscan dans lesCopainsPourInterpro #Creation pour chaque protein des images pfma domain pdb etc... #createImageScView Espionne "Fin des analyses" ###################### A ajouter dans la procedure.... ######################### #ajouter la commande /biolo/macsim/macsim2jal fileentry fileout #exemple: /biolo/macsim/macsim2jal PUZ01 PUZ01 #le programme genere les fichier PUZ01.html, PUZ01.tfa et PUZ01.txt #avec procedure pour Tous!!! } proc ancbi {} { set Ll [LesLignesDuFichier ../SoTOL/toto] foreach l $Ll { if {[string index $l 0] eq "#"} {continue} set Lv [split $l \t] set sca [lindex $Lv end-7] set sta [lindex $Lv end-2] if {[regexp -nocase {complete} $sta]} { puts "$sca" } lappend Lc [lindex $Lv end-7] lappend Ls [lindex $Lv end-2] } #puts [join [DenombreLaListe $Lc] \n] #puts [join [DenombreLaListe $Ls] \n] exit } proc ani {} { set in [LesLignesDuFichier file.surf] foreach l $in { lappend Ls [string range $l 21 end] } set in [LesLignesDuFichier file.alni] foreach l $in { lappend La [string range $l 21 end] } set fs [open f.surf w] puts $fs [join $Ls \n] close $fs set fa [open f.alni w] puts $fa [join $La \n] close $fa exit } proc anneClassementParBandeDesNseqPlusBiais {} { set Fichier "[GscopeDatabaseDir DDetAffy2]/Localisation/cyto_Distribution" set NbGenesTotal 0 set NbSeqTotal 0 foreach Ligne [LesLignesDuFichier "[GscopeDatabaseDir DDetAffy2]/Localisation/chr_Distribution"] { scan $Ligne "%s %s %s %s %s %s %s %s %s" chro long seq1 seq2 seq3 seq4 gene1 gene2 gene3 if {$chro=="Chromosome" || $chro=="Total" || $chro=="Remaining"} {continue} set NbSeqTotal [expr [expr $seq1+$seq2+$seq3+$seq4]+$NbSeqTotal] set NbGenesTotal [expr [expr $gene1+$gene2+$gene3]+$NbGenesTotal] } #Espionne $NbSeqTotal #Espionne $NbGenesTotal set ListeBande {} set ListeNbSeq {} set ListeNbGenes {} foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s %s" chro long type var set n 0 if {$var=="Var"} { foreach Elt $Ligne { if {$Elt!=" "} { incr n if {$n>4} {lappend ListeBande "$Elt"} } } } if {$var=="NbSeq"} { foreach Elt $Ligne { if {$Elt!=" "} { incr n if {$n>4} {lappend ListeNbSeq "$Elt"} } } } if {$var=="NbGenes"} { foreach Elt $Ligne { if {$Elt!=" "} { incr n if {$n>4} {lappend ListeNbGenes "$Elt"} } } } } set ListeTotale {} foreach Band $ListeBande Nseq $ListeNbSeq Ngene $ListeNbGenes { if {$Ngene!=0} { set BiaisBande [expr round((100*$Nseq*$NbGenesTotal)/($NbSeqTotal*$Ngene))] } set Somme [expr $BiaisBande+$Nseq] lappend ListeTotale "$Band $Nseq $Ngene $BiaisBande $Somme" } set ListeTriee [lsort -decreasing -integer -index 4 $ListeTotale] set Final [format "%-12s %-5s %-5s %-5s %-5s %-10s\n" Band NSeq NGene Biais Somme Expr] foreach Elt $ListeTriee { scan $Elt "%s %s %s %s %s" band nseq ngene biais somme set Expr [ProfilDExpressionPourUneBande $band] append Final [format "%-12s %-5s %-5s %-5s %-5s %-10s\n" $band $nseq $ngene $biais $somme $Expr] } #Espionne $Final Sauve $Final dans "[GscopeDatabaseDir DDetAffy2]/Classements/NbSeqPlusBiaisParBande" } proc annoterIsoformesDansXmlMacsims {FichierBlast FichierMacsims FichierResultat} { # BLAST set dic [dict create] set isoforms [dict create] set hits [parserFichierBlast $FichierBlast] foreach h $hits { dict set dic [$h getShortid] $h } set groupes [grouperHitsParTaxid $hits] dict for {taxid g} $groupes { set sousGroupes [grouperIsoformesScore $g estIsoformeFenetre Subj] foreach sg $sousGroupes { if {[llength $sg] > 1} { set sg [triHitsParNbTirets $sg Subj] set refid [[lindex $sg 0] getShortid] dict set isoforms $refid $refid foreach h [lrange $sg 1 end] { dict set isoforms [$h getShortid] $refid } } } } # MACSIMS package require tdom set f [open $FichierMacsims r] dom parse -channel $f mac close $f $mac documentElement root set i 0 foreach seq [$root selectNodes "//sequence"] { set seqname [[$seq child 1 "seq-name"] text] set length [expr [[$seq descendant 1 "length"] text]-1] set ftable [$seq descendant 1 "ftable"] if {[dict exists $isoforms $seqname]} { set color 0 set note "Isoforme choisi" if {[dict get $isoforms $seqname] ne [$h getShortid]} { set color 1 set note "Isoforme de [dict get $isoforms $seqname]" } $ftable appendXML "ISOFORM1$length$color0.00$note" } } set f [open $FichierResultat w] puts -nonewline $f { } puts -nonewline $f [$mac asXML] close $f return 1 } proc areRangeOverlapping {range1 range2} { set start1 [lindex $range1 0] set start2 [lindex $range2 0] set stop1 [lindex $range1 1] set stop2 [lindex $range2 1] if {$start1 >= $start2 && $start1 <= $stop2} { return 1 } elseif {$stop1 >= $start2 && $stop1 <= $stop2} { return 1 } elseif {$start2 >= $start1 && $start2 <= $stop1} { return 1 } elseif {$stop2 >= $start1 && $stop2 <= $stop1} { return 1 } return 0 } proc arit {} { set a [list -1.25 -3.0 2.5 12.1 0.05] set b [lsort -real $a] set min [lindex $b 0] set max [lindex $b end] set eps 0.01 set s 0.0 foreach v $a { set x [expr {($v - $min + $eps)/($max - $min + $eps)}] lappend Lx $x set s [expr {$s + $x}] } set sum 0.0 foreach x $Lx { set n [expr {$x / $s}] lappend Ln $n set sum [expr {$sum + $n}] } puts "s= $s" puts "sum= $sum" foreach q $a s $Ln { puts "$q $s" } exit } proc arno {} { set str "grep \"|\" arno" set var [eval exec $str] #set var [exec grep "|" arno] puts $var exit } proc atmp {} { package require sqlite3 sqlite3 d res.sql d eval {begin transaction} set Lv [d eval {select f.nom,f.nbSeqs,f.length,b.start,b.stop,s.rank,s.min,s.max from file as f, ln_file_block as lfb, block as b, ln_block_segment as lbs, segment as s where f.nbSeqs < 20 and f.pk_file = lfb.pk_file and lfb.pk_block = b.pk_block and b.pk_block = lbs.pk_block and lbs.pk_segment = s.pk_segment and s.motiflen = 13 and s.rank <= 0.05 }] set Lv [lsort -real -stride 8 -index 3 $Lv] foreach {nom nbs lgt start stop rank min max} $Lv { if {$rank == 0.0} {continue} puts [format "%s %3d %4d %5.3f %-3d %-3d %-3d %-3d" $nom $nbs $lgt $rank $start $stop $min $max] } d eval {commit} d close exit } proc atnw {} { set Ll [LesLignesDuFichier out] set idtnw [lsearch -regexp $Ll {^DTNW}] set iftnw [lsearch -regexp $Ll {^FTNW}] set idtor [lsearch -regexp $Ll {^DTOR}] set iftor [lsearch -regexp $Ll {^FTOR}] set verif [list [list A 5 5 5 5 5 6 5 5 5 5 6 4 4 4 5 3 3 2 2 0] [list T 4 4 4 4 5 4 4 4 5 4 4 5 4 4 3 4 3 2 1 1] [list A 4 3 3 3 3 4 3 3 3 3 4 3 3 3 4 3 3 2 2 0] [list G 2 2 3 2 2 2 3 2 2 3 2 2 2 3 2 2 2 3 1 0] [list A 2 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 0] [list T 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1]] set i 0 foreach l1 [lrange $Ll $idtnw+1 $iftnw-1] l2 [lrange $Ll $idtor+1 $iftor-1] { regsub -all { +} [string trim $l1] " " l1 regsub -all { +} [string trim $l2] " " l2 if {$l1 ne $l2} { puts "- $i ------------" puts "$l1" puts "$l2\n" } incr i } exit } proc attend {} { set version "na27" set FichierMG430A "[RepertoireAffyAnnot $version]/MG430A_2.0/Mouse430A_2.na27.annot.csv" set FichierMG430 "[RepertoireAffyAnnot $version]/MG430_2.0/Mouse430_2.na27.annot.csv" set FichierMGU74A "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Av2.na26.annot.csv" set FichierMGU74B "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Bv2.na26.annot.csv" set FichierMGU74C "[RepertoireAffyAnnot $version]/MGU74v2/MG_U74Cv2.na26.annot.csv" set FichierRGU34A "[RepertoireAffyAnnot $version]/RG-U34/RG_U34A.na27.annot.csv" set FichierHGU1332 "[RepertoireAffyAnnot $version]/HG-U133+2/HG-U133_Plus_2.na27.annot.csv" set FichierHGU133A "[RepertoireAffyAnnot $version]/HG-U133/HG-U133A.na27.annot.csv" set FichierZebra "[RepertoireAffyAnnot $version]/Zebrafish/Zebrafish.na27.annot.csv" set FichierDroso "[RepertoireAffyAnnot $version]/Drosophila/DrosGenome1.na27.annot.csv" set FichierChick "[RepertoireAffyAnnot $version]/Chicken/Chicken.na27.annot.csv" set LesFichiers [list $FichierMG430A $FichierMG430 $FichierMGU74A $FichierMGU74B $FichierMGU74C $FichierRGU34A $FichierHGU1332 $FichierHGU133A $FichierZebra $FichierDroso $FichierChick] } proc attend_OBSOLETE {} { if {$LesAcsDeLaLigne == ""} { set LignePauvre "ligne $I Ac1=$Ac1 Ac2=$Ac2 Ac3=$Ac3 Ac4=$Ac4" lappend LesLignesPauvres $LignePauvre Espionne ">bidon trouve pas \natgc" } else { foreach Acs $LesAcsDeLaLigne { if { [regexp "^NM_" $Acs] || [regexp "^XM_" $Acs] || [regexp "^NR_" $Acs] } { set GetzOut "" set Commande "getz \"\\\[refseq-acc:$Acs\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} {Espionne ">bidon fiche n'existe plus\natgc" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { #Espionne "ATTENTION AU - 2 SEQ FASTA" } Espionne $GetzOut } } else { set GetzOut "" set Commande "getz \"\\\[genbankfull-acc:$Acs\\\]\" \-view FastaSeqs" set GetzOut [eval exec $Commande] if {$GetzOut == ""} {Espionne ">bidon fiche n'existe plus\natgc" } if {$GetzOut != ""} { set GetzOut [string range $GetzOut [string last ">" $GetzOut] end] if { [regexp {^>ref.+>ref} $GetzOut] } { #Espionne "ATTENTION AU - 2 SEQ FASTA" } Espionne $GetzOut } } } } } proc audrey {} { DecortiqueUnTFA audrey.tfa Ln Seq set Ljobs [list] foreach n [lrange $Ln 0 end] { puts "$n" set s [string map {"." ""} $Seq($n)] #set rep($n) [BlastService -p blastp -d nr -expect 1e-100 -query ">$n\n$s" -nlist 10 -f 1] set query ">$n $s " lappend Ljobs [list -p blastp -d nr -expect 1e-100 -query $query -nlist 10 -f 1] #puts "\n$rep($n)" } array set rep [ThreadedBlastService $Ljobs] # lookup job id <-> query set Ljid [array names rep *,query] foreach k $Ljid { lassign [split $k ,] jid tmp set rep($query) $jid } #parray rep puts "" set Lnew [list] foreach n [lrange $Ln 0 end] { puts "" if {! [info exists rep($n)]} { puts "pas $n" continue } set jid $rep($n) set Lres $rep($jid,Res) puts "[join $Lres \n]" DecortiqueBlast $Lres "" "" "" LBbid LBacc LBde "" LBPN LAli foreach a $LBacc p $LBPN ali $LAli { if {$p == 0.0} { puts "=> OK $n $a $p" lappend Lnew $a break } else { puts " $n $a $p" } } puts "" } puts "\n[join $Lnew \n]" exit } proc austra {} { LoadTkAndPackages set ph [image create photo] #$ph read map_of_australia2.jpg -format jpeg #$ph read roads_australia2.jpg -format jpeg $ph read roads_australia3.gif -format gif set wdt [image width $ph] set hgt [image height $ph] set str [$ph data] foreach a $str { foreach d $a { if {! [info exists t($d)]} { set t($d) 1 } else { incr t($d) } } } #parray t set lt [array get t] set lt [lsort -stride 2 -decreasing -index 1 -integer $lt] canvas .c -width 500 -height 500 pack .c set i 0 ; set j 0 puts "compage nbr pixels / couleur" foreach {a b} $lt { puts "$a $b" set x1 [expr {$i*25}] set y1 [expr {$j*25}] set x2 [expr {($i+1)*25}] set y2 [expr {($j+1)*25}] .c create rectangle $x1 $y1 $x2 $y2 -fill $a incr i if {$i > 19} { set i 0 incr j } if {$j > 19} {break} } # liste color ordered by presence set Lcol [list] foreach {a b} $lt { lappend Lcol $a } # threshold for color differences set thr 5 set i 0 foreach a [lrange $Lcol 0 49] { incr i if {[string index $a 0] ne "#"} {continue} lassign [CouleurHexa2Int $a] ra ga ba foreach c [lrange $Lcol $i 49] { if {$c eq $a} {continue} if {[string index $c 0] ne "#"} {continue} lassign [CouleurHexa2Int $c] rc gc bc # calc diff if { abs($ra - $rc) < $thr && abs($ga - $gc) < $thr && abs($ba - $bc) < $thr} { if {[set t($a)] > [set t($c)]} { lappend cg($a) $c } else { lappend cg($c) $a } } } } # trie les cg qui ont le plus de couleurs proches set Ll [list] puts "" puts "--> cg in [llength [array names cg]]" foreach c [array names cg] { set cg($c) [lsort -unique [set cg($c)]] update lappend Ll $c [llength [set cg($c)]] } set Ll [lsort -stride 2 -index 1 -integer -decreasing $Ll] # elimine ceux deja pris puts "" puts "couleurs proches" set Lok [list] foreach {c n} $Ll { puts "$c $n" if {[info exists cg($c)]} { lappend Lok $c puts "[set cg($c)]" set Lv [set cg($c)] foreach v $Lv { if {$v in $Lok} {continue} unset -nocomplain cg($v) } update } } puts "\nAfter reduction :" puts "cg [llength [array names cg]]" # Quandtite a enleve a chaque couleur set fdim 100 foreach c [array names cg] { set Lcol [set cg($c)] # assombrit c lassign [CouleurHexa2Int $c] nr ng nb set nr [expr {$nr - $fdim}] if {$nr < 0} {set nr 0} set ng [expr {$ng - $fdim}] if {$ng < 0} {set ng 0} set nb [expr {$nb - $fdim}] if {$nb < 0} {set nb 0} set cout [CouleurInt2Hexa [list $nr $ng $nb]] puts "$c $cout" set fmt [list] foreach col $Lcol { lappend fmt $col $cout } set str [string map $fmt $str] } set nw [image create photo] $nw put $str puts "in $wdt $hgt" puts "out [$nw cget -width] [$nw cget -height]" # images avant et apres set wfc .t toplevel $wfc canvas $wfc.c -width 400 -height 400 -scrollregion [list 0 0 $wdt $hgt] set ItImg [$wfc.c create image 0 0 -image $nw -anchor nw] scrollbar $wfc.vs -command "$wfc.c yview" -width 8 scrollbar $wfc.hs -orient horiz -command "$wfc.c xview" -width 8 button $wfc.bold -command "$wfc.c itemconfigure $ItImg -image $ph" -bg blue -fg white -text " OLD " button $wfc.bnew -command "$wfc.c itemconfigure $ItImg -image $nw" -bg blue -fg white -text " NEW " grid $wfc.c -row 0 -column 0 -sticky news grid $wfc.vs -row 0 -column 1 -sticky ns grid $wfc.hs -row 1 -column 0 -sticky ew grid $wfc.bold -row 2 -column 0 -sticky w grid $wfc.bnew -row 2 -column 1 -sticky e grid rowconfig $wfc 0 -weight 1 grid columnconfig $wfc 0 -weight 1 grid columnconfig $wfc 1 -weight 0 bind $wfc.c {%W scan mark %x %y} bind $wfc.c {%W scan dragto %x %y 1} update idletasks #$nw write new.gif return exit } proc auto_mkindex {dir args} { if {[interp issafe]} { error "can't generate index within safe interpreter" } set oldDir [pwd] cd $dir append index "# Tcl autoload index file, version 2.0\n" append index "# This file is generated by the \"auto_mkindex\" command\n" append index "# and sourced to set up indexing information for one or\n" append index "# more commands. Typically each line is a command that\n" append index "# sets an element in the auto_index array, where the\n" append index "# element name is the name of a command and the value is\n" append index "# a script that loads the command.\n\n" if {![llength $args]} { set args *.tcl } auto_mkindex_parser::init foreach file [glob -- {*}$args] { try { append index [auto_mkindex_parser::mkindex $file] } on error {msg opts} { cd $oldDir return -options $opts $msg } } auto_mkindex_parser::cleanup set fid [open "tclIndex" w] puts -nonewline $fid $index close $fid cd $oldDir } proc auto_mkindex_old {dir args} { set oldDir [pwd] cd $dir set dir [pwd] append index "# Tcl autoload index file, version 2.0\n" append index "# This file is generated by the \"auto_mkindex\" command\n" append index "# and sourced to set up indexing information for one or\n" append index "# more commands. Typically each line is a command that\n" append index "# sets an element in the auto_index array, where the\n" append index "# element name is the name of a command and the value is\n" append index "# a script that loads the command.\n\n" if {![llength $args]} { set args *.tcl } foreach file [glob -- {*}$args] { set f "" set error [catch { set f [open $file] while {[gets $f line] >= 0} { if {[regexp {^proc[ ]+([^ ]*)} $line match procName]} { set procName [lindex [auto_qualify $procName "::"] 0] append index "set [list auto_index($procName)]" append index " \[list source \[file join \$dir [list $file]\]\]\n" } } close $f } msg opts] if {$error} { catch {close $f} cd $oldDir return -options $opts $msg } } set f "" set error [catch { set f [open tclIndex w] puts -nonewline $f $index close $f cd $oldDir } msg opts] if {$error} { catch {close $f} cd $oldDir error $msg $info $code return -options $opts $msg } } proc auto_reset {} { global auto_execs auto_index auto_path if {[array exists auto_index]} { foreach cmdName [array names auto_index] { set fqcn [namespace which $cmdName] if {$fqcn eq ""} { continue } rename $fqcn {} } } unset -nocomplain auto_execs auto_index ::tcl::auto_oldpath if {[catch {llength $auto_path}]} { set auto_path [list [info library]] } elseif {[info library] ni $auto_path} { lappend auto_path [info library] } } proc autre_CreeLaListeDesPFAMUniques {} { # more Domaines | gr PFAM | grep PF | gr -v PB | grep "1\.0" | wc set Fichier "[RepertoireDuGenome]/fiches/Domaines" foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} if {![regexp "PFAM" $Ligne]} {continue} set Ligne [split $Ligne "\t"] set Acc [lindex $Ligne 2] #FaireLire [lindex $Ligne 3] set Id [lindex $Ligne 6] if {[regexp "^PF" $Acc] && $Id=="1.0"} { lappend Liste $Acc lappend ListeComplete $Ligne } else { #Espionne $Ligne } } Espionne [llength $Liste] set Liste [lsort -unique $Liste] SauveLesLignes $ListeComplete dans "[RepertoireDuGenome]/fiches/pfamA100avecDes" #SauveLesLignes $Liste dans "[RepertoireDuGenome]/fiches/pfamA100" } proc axis_to_quat {a phi} { set a [vnormal $a] set q $a set q [vscale $q [expr {sin($phi/2.0)}]] lappend q [expr {cos($phi/2.0)}] return $q } proc balloon {target message {cx 0} {cy 0}} { global Bulle if {$Bulle(first) == 1 } { set Bulle(first) 2 if { $cx == 0 && $cy == 0 } { set X [winfo rootx $target] set Y [winfo rooty $target] } else { set X $cx set Y $cy } set Xmin [winfo rootx $target] set Xmax [expr $Xmin + [winfo width $target]] set Ymin [winfo rooty $target] set Ymax [expr $Ymin + [winfo height $target]] toplevel .balloon -bg black wm overrideredirect .balloon 1 label .balloon.l -text $message -relief flat -bg #ffffaa -fg black -padx 2 -pady 0 -anchor w pack .balloon.l -side left -padx 1 -pady 1 wm withdraw .balloon update set MessageLargeur [winfo width .balloon] set MessageHauteur [winfo height .balloon] if {$MessageLargeur=="1" && $MessageHauteur=="1"} { set MessageLargeur [winfo reqwidth .balloon] set MessageHauteur [winfo reqheight .balloon] } #Ajustement des positions de l InfoBulle #Sur Beaufort le withdraw empeche d avoir la taille de la fenetre voir mise a jour #Mais le reqwidth et le reqheight contourne le pb set OnForceADroite 1 set OnForceEnBas 0 if {$MessageHauteur==1} {set OnForceADroite 0} if {$MessageLargeur==1} {set OnForceEnBas 1} set EcranHauteur [winfo screenheight .] set EcranLargeur [winfo screenwidth .] if {$OnForceADroite && $X> [expr $EcranLargeur/2]} { #On affiche a gauche incr X -10 #while {$X>$Xmin} {incr X -1} set PosX [expr $X - $MessageLargeur] } else { #On affiche a droite incr X 10 #while {$X<$Xmax} {incr X 1} set PosX $X } if {$OnForceEnBas || $Y< 50} { #On affiche en bas incr Y 5 #set PosY $Y set PosY $Ymax } else { #On affiche en haut incr Y -5 set PosY [expr $Ymin -$MessageHauteur] } set PosX [format "%.0f" $PosX] set PosY [format "%.0f" $PosY] #Ajustement final des positions de l InfoBulle et positionnement if {$PosX<0} { #On sort de l ecran par la gauche set PosX 0 } elseif {[expr $PosX + $MessageLargeur]> $EcranLargeur} { #On sort de l ecran par le droite set PosX [expr $EcranLargeur - $MessageLargeur] } if {$PosY<0} { #On sort de l ecran par le dessus set PosY 0 } elseif {[expr $PosY + $MessageHauteur]> $EcranHauteur} { #On sort de l ecran par le dessous set PosY [expr $EcranHauteur - $MessageHauteur] } wm geometry .balloon +${PosX}+${PosY} #wm geometry .balloon +${x}+${y} set Bulle(set) 1 #5 Apres l avoir oublie on se souvient wm deiconify .balloon } } proc bb1 {} { set Fichier "[RepertoireDuGenome]/fiches/tubgroupe3" set NbD 0 set NbE 0 set Nb 0 foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s %s %s" A B C D E incr Nb if {$D != "None"} {incr NbD} if {$E != "None"} {incr NbE} } Espionne "$NbD $NbE $Nb" } proc bb12044 {} { global T TAg LNOrdali Lspy Sref InitialiseRosace #lululu DecortiqueXmlAgent BB12044.xml set Lbck [CoreBlocksDuXML] foreach {deb fin} [lrange $Lbck 0 1] { puts "BB12044.xml 13 $deb $fin blosum62_p sop" AnalyseFichierBalibase BB12044.xml 13 $deb $fin blosum62_p bild } exit # agents pour pos 150 set Lspy {} foreach n [array names Sref] { set x [AbsRef2Seq $n 150] foreach k [array names TAg "*,$n,dep"] { if {$TAg($k) == $x} { lassign [split $k ,] ag tmp tmp lappend Lspy $n $ag } } } puts "Lspy [llength $Lspy]" set nv 0 ; set srk 0.0 foreach {n1 ag1} $Lspy { foreach {n2 ag2} $Lspy { if {$n1 eq $n2 && $ag1 == $ag2} { continue } set idx [lsearch -exact -index 0 $T($n1,$ag1,$n2) $ag2] set srk [expr {$srk + $idx}] incr nv if {$idx == 0} { continue } puts "$n1 - $n2 : [Seq2AbsRef $n1 $ag1]" set ipos 0 foreach cpl [lrange $T($n1,$ag1,$n2) 0 $idx] { lassign $cpl agx score puts " $TAg($ag1,$n1,seq) $ipos [format %6.2f $score]" puts " $TAg($agx,$n2,seq) [Seq2AbsRef $n2 $agx]" puts "" incr ipos } puts "" puts "" } } set srk [expr {$srk/$nv}] puts "srk $srk" exit } proc bgerror_togl {msg} { tk_messageBox -icon error -type ok -message "Error: $msg\n\n$::errorInfo" ExitProg } proc bidon2 {} { global Defauts global LesPCI LesDefauts LesDefauts Mode batch DecortiqueEtAfficheUnMSF "toto.msf" EspionneL $LesPCI exit } proc bidouille {} { set Lf [LesLignesDuFichier "listeMs2ph"] set foo [open "listeMs2ph_new" w] foreach l $Lf { puts $foo "set ExistsM([string trim $l]) 1" } close $foo set Lf [LesLignesDuFichier "listeHomol"] set foo [open "listeHomol_new" w] foreach l $Lf { puts $foo "set ExistsH([string trim $l]) 1" } close $foo exit } proc bidouilleListes {} { set Lf [LesLignesDuFichier "listeMs2ph"] set foo [open "listeMs2ph_new" w] foreach l $Lf { puts $foo "set ExistsM([string trim $l]) 1" } close $foo set Lf [LesLignesDuFichier "listeHomol"] set foo [open "listeHomol_new" w] foreach l $Lf { puts $foo "set ExistsH([string trim $l]) 1" } close $foo exit } proc biotextbutton1 {w x y} { $w index @$x,$y focus $w return } proc bmpr {} { LitLeTFA bactos_prot.tfa Lbp Sbp LitLeTFA mito_prot.tfa Lmp Smp LitLeTFA 250ori_prot.tfa Lop Sop LitLeTFA 250ori_rna.tfa Lor Sor foreach n $Lbp { set i [lsearch $Lop $n] set nr [lindex $Lor $i] lappend Lnr $nr lappend Lsr [set Sor($nr)] } EcritLeTfa bactos_rna.tfa $Lnr $Lsr set Lnr [list] ; set Lsr [list] foreach n $Lmp { set i [lsearch $Lop $n] set nr [lindex $Lor $i] lappend Lnr $nr lappend Lsr [set Sor($nr)] } EcritLeTfa mito_rna.tfa $Lnr $Lsr exit } proc btest {} { global LNOrdali LSOrdali Sequences ListeDesPiliersDuGroupe SDG LNDG LongueurTotale TbScores ListeScore ConsMeth # soit executable -> exe ou library -> lib #set how "lib" set how "exe" set Lpcgap [list 0.01 0.25 0.5 0.75] set Lmscore [list [list Dist Kabat Entrop1]] set Lcm [list mixturemodel dpc secator] #set Lf [list PF04045.9 PF09327.6 PF14464.1_smp PF04046.11 PF09328.5 PF14465.1 PF04048.9 PF09329.6 PF14466.1 PF04049.8 PF09330.6 PF14467.1] set Lf PF02273.10 foreach f $Lf { set f [file join /home/moumou/work/moumou/BenchPfam/ $f] puts "\nf= $f" unset -nocomplain ListeDesPiliersDuGroupe LNOrdali Sequences DecortiqueUnTFA $f LNOrdali Sequences set LongueurTotale [string length [set Sequences([lindex [array names Sequences] 0])]] set LNDG GroupeToutLeMonde set SDG(GroupeToutLeMonde) $LNOrdali CreeLesPiliers # prepare pour scores set Lrcm [list] foreach pcgap $Lpcgap { LesDefauts PCThrGap $pcgap puts "pc thr gap $pcgap" foreach mscore $Lmscore { puts "$mscore" if {[llength $mscore] > 1} { set Scale 1 } else { set Scale 0 } unset -nocomplain ListeScore TbScores set TbScores(Lcols) $mscore foreach msc $mscore { set sco [ScoreDe$msc [set ListeDesPiliersDuGroupe(GroupeToutLeMonde)]] if {$Scale} { set sco [CentreData $sco -999.0] } set TbScores(Score,$msc) $sco } CreeListeScore if {[llength $ListeScore] < 2} { puts "\nListeScore < 2\n" continue } set Lori $ListeScore set LgS [llength $ListeScore] puts "LgS $LgS" if {$how eq "exe"} { set fdat cpk set o [open $fdat w] foreach l $Lori { puts $o [join $l \t] } close $o } # pour chaque meth clustering foreach cm $Lcm { set Lval $Lori # Fait clusters switch $cm { "dpc" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm kmeans -nbc dpc -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=kmeans -nbc=dpc -wc] } set lab dpc } "secator" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm hierar -nbc secator -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=hierar -nbc=secator -wc] } set lab secator } "mixturemodel" { if {$how eq "lib"} { set Lgr [Tclcluspack $Lval -dt coordinates -cm mm -nbc aic -wc] } else { set cmd [list /biolo/cluspack/binNew/cluspack $fdat -dt=coordinates -cm=mm -nbc=aic -wc] } set lab mm } } if {$how eq "exe"} { if {[catch {exec {*}$cmd >& ${fdat}.log} Msg]} { puts stderr "Pb Cluspack\n$Msg" flush stderr } if {! [file exists ${fdat}.clu]} { puts "[ContenuDuFichier ${fdat}.log]" continue } # lit nombre clusters set Lc [LesLignesDuFichier ${fdat}.clu] puts "[lindex $Lc 0]" set Lres [TraiteResultatClustering ${fdat}.clu ""] file delete -force ${fdat}.clu ${fdat}.log } else { set Lres [TraiteResultatClusteringTcl $Lgr ""] } puts "$Lres" set Ltrouve [lindex $Lres 1] puts "lab $lab [llength $Ltrouve]" } if {$how eq "exe"} { file delete -force $fdat } } } } exit } proc bufferNTimes {what {n ""}} { global BufNTimes set res 1 switch $what { "add" {append BufNTimes $n} "empty" { if {$BufNTimes ne ""} { set res $BufNTimes set BufNTimes "" } } } return $res } proc build_rotmatrix {q} { lassign $q q0 q1 q2 q3 set m00 [expr { 1.0 - 2.0 * ($q1 * $q1 + $q2 * $q2)}] set m01 [expr { 2.0 * ($q0 * $q1 - $q2 * $q3)}] set m02 [expr { 2.0 * ($q2 * $q0 + $q1 * $q3)}] set m03 0.0 set m10 [expr { 2.0 * ($q0 * $q1 + $q2 * $q3)}] set m11 [expr { 1.0 - 2.0 * ($q2 * $q2 + $q0 * $q0)}] set m12 [expr { 2.0 * ($q1 * $q2 - $q0 * $q3)}] set m13 [expr { 0.0}] set m20 [expr { 2.0 * ($q2 * $q0 - $q1 * $q3)}] set m21 [expr { 2.0 * ($q1 * $q2 + $q0 * $q3)}] set m22 [expr { 1.0 - 2.0 * ($q1 * $q1 + $q0 * $q0)}] set m23 [expr { 0.0}] set m30 0.0 set m31 0.0 set m32 0.0 set m33 1.0 return [list $m00 $m01 $m02 $m03 $m10 $m11 $m12 $m13 $m20 $m21 $m22 $m23 $m30 $m31 $m32 $m33] } proc bx {} { set pdbid 1bbr Structure create $pdbid set cok [$pdbid new $pdbid "" 0 0] foreach c [$pdbid _chains] { if {[$pdbid _chainIs $c] eq "Protein"} { puts [$pdbid _resnumber -chain $c -polymer] } } #exit } proc c2u {} { global LNOrdali TDesAccess Defauts TDesSeqnames set lc [Convert2UniProtAcc $LNOrdali] foreach n $LNOrdali c $lc { puts "$n $c" set TDesAccess($n) $c set TDesSeqnames($n) $c } SauveLeMac 0 set fic "[file rootname [set Defauts(FichierTFA)]].xml" CreeLeXml $fic return #exit } proc calc_normd_for_subgroup {grp score_win conserved} { global CpB CBPCI DistBlosum Sequences ListeDesAcidesAmines puts "conserved $conserved" set Lseqs [set CpB($grp)] set nseqs [llength $Lseqs] set Ltot $CpB(Ltot) set Lpil [set CpB($grp,Lpil)] set ListeAA $ListeDesAcidesAmines # distance matrix between residue vectors InitTBlosum gon250 # Inits for {set i 0} {$i < $Ltot} {incr i} { set p [lindex $Lpil $i] set n [string length [string map [list "." ""] $p]] set CpB(ns,$i) $n set CpB(ntot,$i) 0 } foreach n $Lseqs { set s [set Sequences($n)] set start [expr {[string length $s] - [string length [string trimleft $s "."]]}] set stop [expr {[string length [string trimright $s "."]]-1}] for {set i $start} {$i <= $stop} {incr i} { incr CpB(ntot,$i) } set CpB(startstop,$n) [list $start $stop] } for {set i 0} {$i < $Ltot} {incr i} { set pori [lindex $Lpil $i] set p [string map [list X "" Z "" "." "" " " ""] $pori] set nres [string length $p] if {[set CpB(ntot,$i)] < 1} { set ColScore($i) 0.0 continue } set d 0.0 ; set j 0 foreach a [lrange $ListeAA 0 end-1] { incr j set n [expr {[string length $p] - [string length [string map [list $a ""] $p]]}] if {! $n} {continue} foreach b [lrange $ListeAA $j end] { set m [expr {[string length $p] - [string length [string map [list $b ""] $p]]}] if {! $m} {continue} set d [expr {$d+($n*$m)*[set DistBlosum($a,$b)]}] } } set nbr [expr {double($nres)*($nres-1)/2.}] if {$nbr > 0.0} { set d [expr {$d/$nbr}] } set ColScore($i) [expr {exp(-1.*$d/2.)*100.}] if {$conserved > 0.0} { set ntot [set CpB(ntot,$i)] set ns [set CpB(ns,$i)] # standardise scores if {$ns > 0} { set ColScore($i) [expr {[set ColScore($i)]*exp(-10.0*($ntot-$ns)/$ntot)}] } else { set ColScore($i) 0.0 } } } for {set i 0} {$i < $Ltot} {incr i} { set ColScore($i) [expr {int([set ColScore($i)])}] } for {set i 0} {$i < $Ltot} {incr i} { set winscore($i) 0.0 } set half_win [expr {$score_win / 2}] if {$half_win == 0} {set half_win 1} for {set i 0} {$i < ($half_win+1) && $i < $Ltot} {incr i} { for {set j 0} {$j < $score_win} {incr j} { set ij [expr {$i+$j}] set winscore($i) [expr {[set winscore($i)] + [set ColScore($ij)]}] } set winscore($i) [expr {[set winscore($i)]/$score_win}] if {[set winscore($i)] > 100} { set winscore($i) 100.0 } if {[set CpB(ns,$i)] < 1} { set winscore($i) 0.0 } } for {set i 0} {($i+$score_win) < $Ltot} {incr i} { set ih [expr {$i+$half_win}] for {set j 0} {$j < $score_win} {incr j} { set ij [expr {$i+$j}] set winscore($ih) [expr {[set winscore($ih)] + [set ColScore($ij)]}] } set winscore($ih) [expr {[set winscore($ih)]/$score_win}] if {[set winscore($ih)] > 100} { set winscore($ih) 100.0 } if {[set CpB(ns,$ih)] < 1} { set winscore($ih) 0.0 } } for {set i [expr {$Ltot-$score_win}]} {($i+$half_win) < $Ltot} {incr i} { set ih [expr {$i+$half_win}] for {set j 0} {$j < $half_win} {incr j} { set ij [expr {$i+$j}] set winscore($ih) [expr {[set winscore($ih)] + [set ColScore($ij)]}] } set winscore($ih) [expr {[set winscore($ih)]/$score_win}] if {[set winscore($ih)] > 100} { set winscore($ih) 100.0 } if {[set CpB(ns,$ih)] < 1} { set winscore($ih) 0 } } if {$conserved > 0.0} { for {set i 0} {$i < $Ltot} {incr i} { if {[set CpB(ns,$i)] != 0 && ([set CpB(ns,$i)] < [set CpB(ntot,$i)]*$conserved || [set CpB(ntot,$i)] < $nseqs*$conserved)} { set winscore($i) 0.0 } } } return [array get winscore] } proc calc_normd_global {grp score_win conserved} { global CpB CBPCI TableScore Sequences ListeDesAcidesAmines DistBlosum set Lseqs [set CpB($grp)] set nseqs [llength $Lseqs] set Ltot $CpB(Ltot) set ListeAA $ListeDesAcidesAmines set Lpil [set CpB($grp,Lpil)] # distance matrix between residue vectors InitTBlosum gon250 1 # Inits for {set i 0} {$i < $Ltot} {incr i} { set CpB(ntot,$i) 0 set p [lindex $Lpil $i] set n [string length [string map [list "." ""] $p]] set CpB(ns,$i) $n } foreach n $Lseqs { set s [set Sequences($n)] set start [expr {[string length $s] - [string length [string trimleft $s "."]]}] set stop [string length [string trimright $s "."]] for {set i $start} {$i <= $stop} {incr i} { incr CpB(ntot,$i) } set CpB(startstop,$n) [list $start $stop] } for {set i 0} {$i < $Ltot} {incr i} { set pori [lindex $Lpil $i] set p [string map [list X "" Z "" "." "" " " ""] $pori] if {[set ntot [string length $p]] < 2} { set ColScore($i) 0.0 continue } set d 0.0 ; set j 0 foreach a [lrange $ListeAA 0 end-1] { incr j set n [expr {[string length $p] - [string length [string map [list $a ""] $p]]}] if {! $n} {continue} foreach b [lrange $ListeAA $j end] { set m [expr {[string length $p] - [string length [string map [list $b ""] $p]]}] if {! $m} {continue} set d [expr {$d+($n*$m)*[set DistBlosum($a,$b)]}] } } set d [expr {$d/double(($ntot*($ntot-1)/2.))}] set dist [expr {exp(-1.*$d/2.)*100.}] # Standardise scores set ntot [set CpB(ntot,$i)] set ns [set CpB(ns,$i)] set ColScore($i) [expr {$dist*exp(-10.0*($ntot-$ns)/$ntot)}] } for {set i 0} {$i < $Ltot} {incr i} { set winscore($i) 0.0 } set half_win [expr {$score_win / 2}] if {$half_win == 0} {set half_win 1} for {set i 0} {$i < ($half_win+1) && $i < $Ltot} {incr i} { for {set j 0} {$j < $half_win} {incr j} { set ij [expr {$i+$j}] set winscore($i) [expr {[set winscore($i)] + [set ColScore($ij)]}] } set winscore($i) [expr {[set winscore($i)]/$score_win}] if {[set winscore($i)] > 100} { set winscore($i) 100 } if {[set CpB(ns,$i)] < [set CpB(ntot,$i)]/2.0} { set winscore($i) 0.0 } } for {set i 0} {($i+$score_win) < $Ltot} {incr i} { set ih [expr {$i+$half_win}] for {set j 0} {$j < $score_win} {incr j} { set ij [expr {$i+$j}] set winscore($ih) [expr {[set winscore($ih)] + [set ColScore($ij)]}] } set winscore($ih) [expr {[set winscore($ih)]/$score_win}] if {[set winscore($ih)] > 100} { set winscore($ih) 100 } if {[set CpB(ns,$ih)] < [set CpB(ntot,$ih)]/2.0} { set winscore($ih) 0.0 } } for {set i [expr {$Ltot-$score_win}]} {($i+$half_win) < $Ltot} {incr i} { set ih [expr {$i+$half_win}] for {set j 0} {$j < $half_win} {incr j} { set ij [expr {$i+$j}] set winscore($ih) [expr {[set winscore($ih)] + [set ColScore($ij)]}] } set winscore($ih) [expr {[set winscore($ih)]/$score_win}] if {[set winscore($ih)] > 100} { set winscore($ih) 100 } if {[set CpB(ns,$ih)] < [set CpB(ntot,$ih)]/2.0} { set winscore($ih) 0 } } if {$grp eq "GroupeToutLeMonde" && $conserved > 1.0} { for {set i 0} {$i < $Ltot} {incr i} { if {[set CpB(ns,$i)] < $nseqs*($conserved - 1.0)} { set winscore($i) 0 } } } elseif {$conserved > 0.} { for {set i 0} {$i < $Ltot} {incr i} { if {$grp eq "GroupeToutLeMonde"} { if {[set CpB(ns,$i)] < [set CpB(ntot,$i)]*$conserved} { set winscore($i) 0 } } else { if {[set CpB(ns,$i)] != 0 && ([set CpB(ns,$i)] < [set CpB(ntot,$i)]*$conserved || [set CpB(ntot,$i)] < $nseqs*$conserved)} { set winscore($i) 0 } } } } foreach k [lsort -integer [array names winscore]] { puts "ITEM $k [set winscore($k)]" } return [array get winscore] } proc canalSqlAssemblyDb {} { # pour mon pc # set pgHost 130.79.79.89 # set pgDb assembly # set pgUser alvinella # set pgPass bdp67fr set pgHost [LbgiUrl] set pgDb assembly set pgUser alvinella set pgPass 7tytOpnA97 # set pgUser mouse # set pgPass 2Mqlv3v17G return [CanalSql "host=$pgHost dbname=$pgDb user=$pgUser password=$pgPass"] } proc canid {} { set w .c pack [canvas .c -width 500 -height 500 -background SlateGrey] set idx 0 for {set i 0} {$i < 50} {incr i} { set x1 [expr {$i*10}] set x2 [expr {($i+1)*10-1}] for {set j 0} {$j < 50} {incr j} { set y1 [expr {$j*10}] set y2 [expr {($j+1)*10-1}] $w create rectangle $x1 $y1 $x2 $y2 -fill blue -tags [list R$idx toto] incr idx } } set Ls [$w find withtag toto] foreach e $Ls {lappend Lt "R$e"} puts "with toto [llength $Ls]" $w dtag "\{[join $Ls ||]\}" toto update puts "verif ids [llength [$w find withtag toto]]" $w dtag "\{[join $Lt ||]\}" toto update puts "verif tag [llength [$w find withtag toto]]" $w itemconfig "[join $Lt ||]" -fill green return } proc canva2png {K FilePNG} { set FilePS "$FilePNG.ps" set Width [$K cget -width ] set Height [$K cget -height] canva2ps $K $FilePS $Width $Height return [ps2png $FilePS $FilePNG $Width $Height] } proc canva2ps {K {FilePS ""} {Width ""} {Height ""}} { if {$Width != ""} {set Width [$K cget -width ]} if {$Height != ""} {set Height [$K cget -height]} set TextPostScript [$K postscript -width $Width -height $Height -x 0 -y 0 -pageanchor center -pagewidth $Width -pageheight $Height -pagex [expr $Width * 1.0 / 2] -pagey [expr $Height * 1.0 / 2]] if {$FilePS != ""} {Sauve $TextPostScript dans $FilePS} return $TextPostScript } proc cava {} { return [CaVa] } proc cboot {} { package require tcc tcc::ccode doboot {char** seqs} char** { int i for (i==0;i<;i++) { pil[i]= } } return } proc cgncbi {} { if {0} { set url "http://ftp.ncbi.nlm.nih.gov/genomes/GENOME_REPORTS/eukaryotes.txt" set euk [HttpCopy $url] set o [open eukaryotes.txt w] puts $o $euk close $o set url "http://ftp.ncbi.nlm.nih.gov/genomes/GENOME_REPORTS/prokaryotes.txt" set pro [HttpCopy $url] set o [open prokaryotes.txt w] puts $o $pro close $o set Le [split $euk \n] set Lp [split $pro \n] } else { set Le [LesLignesDuFichier eukaryotes.txt] set Lp [LesLignesDuFichier prokaryotes.txt] } set Lce [split [lindex $Le 0] \t] set Lcp [split [lindex $Lp 0] \t] puts "And" puts "[land $Lce $Lcp]" puts "from euk" puts "[lor $Lce $Lcp from1]" puts "rom pro" puts "[lor $Lce $Lcp from2]" set Lins [list] # PROKARYOTES processing # --- set nbchrom 0 ; set nborganels 0 ; set nbplasmid 0 foreach l $Lp { if {$l eq "" || [string index $l 0] eq "#"} { continue } set Lv [split $l \t] lassign $Lv Name TaxID bioprojacc bioprojid group subgroup size gcpc chromrefseq chrominsdc plasmidrefseq plasmidinsdc wgs scaffolds genes proteins reldate moddate status center biosampleacc assemblyacc reference ftppath pubmedid set assacc [lindex $Lv end-3] set Lv [lreplace $Lv end-3 end-3] set Lv [linsert $Lv 8 $assacc $nbchrom] set Lv [linsert $Lv 12 $nbplasmid] set Lv [linsert $Lv 15 $nborganels] lappend Lins $Lv } set p1 [lindex $Lins 67] # EUKARYOTES processing # -- set chromrefseq "-" ; set chrominsdc "-" set plamidrefseq "-" ; set plasmidinsdc "-" set ftppath "-" ; set pubmedid "-" ; set reference "-" foreach l $Le { if {[string index $l 0] eq "#"} { continue } set Lv [split $l \t] lassign $Lv Name TaxID bioprojacc bioprojid group subgroup size gcpc assemblyacc nbchrom nborganels nbplasmid wgs scaffolds genes proteins reldate moddate status center biosampleacc set nborganels [lindex $Lv 10] set Lv [lreplace $Lv 10 10] set Lv [linsert $Lv end $reference $ftppath $pubmedid] set Lv [linsert $Lv 10 $chromrefseq $chrominsdc] set Lv [linsert $Lv 13 $plasmidrefseq $plasmidinsdc $nborganels] lappend Lins $Lv } puts "" set e1 [lindex $Lins end-67] puts "" foreach a $p1 b $e1 { puts "$a ||| $b" } exit } proc changeColorSpace {space P} { global label1 label2 label3 if {$space == "rgb"} { set label1 Red set label2 Green set label3 Blue tc_setScales $P return } if {$space == "cmy"} { set label1 Cyan set label2 Magenta set label3 Yellow tc_setScales $P return } if {$space == "hsb"} { set label1 Hue set label2 Saturation set label3 Brightness tc_setScales $P return } } proc changeFontSize {font direction} { set size [font configure $font -size] if {$direction == "+"} { incr size 2 } else { incr size -2 } font configure $font -size $size } proc chcb {} { package require Tk ChangeTkOptions toplevel .t set val [list msldkfj sldfj sdklfjskdf sldmkfjslfj] ttk::combobox .t.c -style vdx.TCombobox -state readonly -values $val -width 12 grid .t.c -row 0 -column 0 -padx 20 -pady 20 .t.c current 0 set ::var 0 tkwait variable var return } proc checkBlast {disque projet {nomRepBlast ""} {prefix ""}} { set Prob 0 set count 0 foreach elt [ListeDesPABs2] { if {(![file exists "/genomics/$disque/$projet/$nomRepBlast/$elt"]) & $nomRepBlast!=""} { puts "$elt absent (blast)" set Prob 1 } if {![file exists "/genomics/$disque/$projet/prottfa/$elt"]} { puts "$elt absent (prottfa)" set Prob 1 } incr count } if {!$Prob} {puts "aucuns problèmes"} } proc cherchespeciaux {} { set FileCibles "/genomics/link/SafeAcne/FichiersInitiaux/KRZYZOSIAK_SummarizedList.csv" set LesLignesDuFichier [LesLignesDuFichier $FileCibles] foreach Ligne [lrange $LesLignesDuFichier 2 end] { set n -1 foreach Elmt [split $Ligne ";"] { incr n if {$n==1} { set Gn $Elmt if {[regexp "/" $Gn]} { Espionne "$Gn" set NvGn [lindex [split $Gn "/"] 0] Espionne "$NvGn" } set Gn [string trim $Gn] } } } } proc chkt {} { global db InitTaxDB set Lt [LesLignesDuFichier marie.tax] array set T [eFetchREST taxonomy $Lt] set LNotFound [list] set Lok [list] foreach id $Lt { if {[string trim $id] eq ""} {continue} if {! [info exists T($id,ScientificName)]} { lappend LNotFound $id continue } set Ln [split $T($id,ScientificName) " "] lappend Lgenre [lindex $Ln 0] lappend Lespece [lrange $Ln 0 1] lappend Lok $id } puts "Doublon [DonneDoublons $Lespece]" set Lgenre [lsort -unique $Lgenre] set Lespece [lsort -unique $Lespece] puts "Lt [llength $Lt]" puts "Lgenre [llength $Lgenre]" puts "Lespece [llength $Lespece]" puts "LNotFound $LNotFound" puts "Lok [llength $Lok]" exit } proc chooseCouple {} { global LNOrdali TAg NbSeq set iAg1 {} while {$iAg1 == {}} { set iSeq1 [expr {round(rand()*($NbSeq-1))}] set seq1 [lindex $LNOrdali $iSeq1] set iAg1 [expr {round(rand()*([llength $TAg($seq1)]-1))}] set Ag1 [lindex $TAg($seq1) $iAg1] if {! $TAg($Ag1,$seq1,active)} { set iAg1 {} } } # select seq 2 set iSeq2 [expr {round(rand()*($NbSeq - 1))}] while {$iSeq2 == $iSeq1} { set iSeq2 [expr {int(rand()*$::NbSeq)}] } set seq2 [lindex $LNOrdali $iSeq2] if {0} { set iAgn2 [expr {int(rand()*[llength $TAg($seq2)])}] set Ag2 [lindex $TAg($seq2) $iAgn2] while {! $TAg($Ag2,active)} { set iAgn2 [expr {int(rand()*[llength $TAg($seq2)])}] set Ag2 [lindex $TAg($seq2) $iAgn2] } } return [list $seq1 $Ag1 $seq2] } proc ck2 {} { parray ::TDesSeqnames puts [join [$::db eval {select pk_seqali, seqname from seqali}] \n] exit } proc ckdb {} { global db LNOrdali foreach n $LNOrdali { if {$n eq ""} {continue} set Lp [$db eval {select pk_seqinfo from seqinfo where access=$n}] if {[llength $Lp] == 1} { continue } lassign $Lp a b set L1 [$db eval {select * from seqinfo where pk_seqinfo=$a}] set L2 [$db eval {select * from seqinfo where pk_seqinfo=$b}] set pka [lindex $L1 0] set pkb [lindex $L2 0] set dif 0 puts "pka $pka pkb $pkb" foreach a [lrange $L1 1 end] b [lrange $L2 1 end] { if {$a ne $b} { puts "a= $a\nb= $b" set dif 1 } } # recupere seqali correspondant set Ls1 [$db eval {select * from seqali where pk_seqinfo=$pka}] set Ls2 [$db eval {select * from seqali where pk_seqinfo=$pkb}] if {$Ls1 == {}} { puts "$pka - $pkb : pas seqali pour A" continue } if {$Ls2 == {}} { puts "$pka - $pkb : pas seqali pour B" continue } set dif 0 foreach a [lrange $Ls1 2 end] b [lrange $Ls2 2 end] { if {$a ne $b} { puts "sa= $a\nsb= $b" set dif 1 } } } exit } proc cleanE {} { global TabSF #2cuz 2dxi Dis-bact_4 Discri foreach n [list "PDB_2dxi_A" "PDB_2cuz_A"] { puts "" puts "$n :" set Ld [set TabSF($n,Discri)] set Lb [set TabSF($n,Dis-bact_4)] set Li [list] set i 0 foreach fb [lsort -unique -index 1 -integer $Lb] { DecortiqueUneFeature $fb db fb cb sb nb set ya 0 foreach fd $Ld { DecortiqueUneFeature $fd dd fd cd sd nd if {($db >= $dd && $db <= $fd) && ($fb >= $dd && $fb <= $fd) } { set ya 1 } } puts " $db $fb $ya" if {! $ya} { lappend Li $i } incr i } set Li [lsort -integer -decreasing $Li] foreach i $Li { set Lb [lreplace $Lb $i $i] } set TabSF($n,Dis-bact_4) $Lb } return } proc cleanPhd {keepedSequence keepedRange phdFile keepStatus} { # we need lower case sequence set keepedSequence [string tolower $keepedSequence] # revert to saved if exists if {[file isfile "$phdFile.backup"]} { file rename -force "$phdFile.backup" $phdFile } # read the file array set phd [readPhd $phdFile] # build the sequence of phd file set phdSequence {} foreach callInfo $phd(dna) { lappend phdSequence [string index $callInfo 0] } set phdSequence [string tolower [join $phdSequence ""]] # only backup and modify if needed if {$keepedSequence ne $phdSequence && $keepStatus} { # only keep the specified range set phd(dna) [lrange $phd(dna) [lindex $keepedRange 0] [lindex $keepedRange 1]] # synchronize sequence letters for {set i 0} {$i < [llength $phd(dna)]} {incr i} { set callInfo [lindex $phd(dna) $i] set callInfo [string replace $callInfo 0 0 [string index $keepedSequence $i]] lset phd(dna) $i $callInfo } # modify trim header for {set i 0} {$i < [llength $phd(comment)]} {incr i} { set headerProperty [lindex $phd(comment) $i] if {[regexp -nocase {^trim:} $headerProperty]} { lset phd(comment) $i "TRIM: 0 [expr [llength $phd(dna)] - 1] -1.00" break } } # do a backup file rename $phdFile "$phdFile.backup" # write the cleaned phd writePhd [array get phd] $phdFile } } proc cleanScf {phdFile scfFile} { # revert to saved if exists if {[file isfile "$scfFile.backup"]} { file rename -force "$scfFile.backup" $scfFile } if {[file isfile $phdFile] && [file isfile $scfFile]} { # read files array set phd [readPhd $phdFile] array set scf [readScf $scfFile] # build the sequence of phd file set phdSequence {} foreach callInfo $phd(dna) { lappend phdSequence [string index $callInfo 0] } set phdSequence [string toupper [join $phdSequence ""]] # build the sequence of scf file set scfSequence [string toupper [join $scf(calledBases) ""]] # only modify if needed if {$phdSequence ne $scfSequence} { # do a backup file copy $scfFile "$scfFile.backup" # clear all calling informations lset scf(peakIdx) {} lset scf(probA) {} lset scf(probC) {} lset scf(probG) {} lset scf(probT) {} lset scf(calledBases) {} lset scf(probSub) {} lset scf(probIns) {} lset scf(probDel) {} # set calling informations base by base foreach callInfo $phd(dna) { regexp -nocase {([a-z]) [0-9]+ ([0-9]+)} $callInfo regMatch base peakIdx lappend scf(calledBases) [string toupper $base] lappend scf(peakIdx) $peakIdx lappend scf(probA) 0 lappend scf(probC) 0 lappend scf(probG) 0 lappend scf(probT) 0 lappend scf(probSub) 0 lappend scf(probIns) 0 lappend scf(probDel) 0 } # set the number of bases set scf(bases) [llength $scf(calledBases)] # clear left and rigth clippings set scf(basesLeftClip) 0 set scf(basesRightClip) [expr $scf(bases) - 1] # (samplesOffset don't change) # (basesOffset don't change) # set changed offsets set scf(commentsOffset) [expr $scf(basesOffset) + ($scf(bases) * 12)] set scf(privateOffset) [expr $scf(commentsOffset) + $scf(commentsSize)] # write the cleaned scf writeScf [array get scf] $scfFile # success !! remove backup file delete "$scfFile.backup" } } } proc clockSet {var} { global $var global maclock # set $var [clock format [clock seconds] -format %H-%M-%S] set maclock [clock format [clock seconds] -format %H-%M-%S] after 999 [list clockSet maclock] } proc clustalConvertForMacsimPourTous {{Repertoire ""}} { if {$Repertoire == ""} { set Repertoire [RepertoireDuGenome]/msf } set r [glob -directory $Repertoire *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } clustalConvertTestForMacsim $fichier FinPasTouche $f } } proc clustalConvertForpsiblast {fichier} { if { ! [file exists "alignClustal"]} { File mkdir alignClustal } set newRep [RepertoireDuGenome]/alignClustal/ set list [split $fichier "/"] set newFile $newRep[lindex $list [llength $list]-1] exec clustalw $fichier -convert -outfile=$newFile set ma_list [LesLignesDuFichier $newFile] set newList [lrange $ma_list 1 end] SauveLesLignes $newList dans $newFile } proc clustalConvertForpsiblastPourTous {{Repertoire ""}} { if {$Repertoire == ""} { set Repertoire [RepertoireDuGenome]/msf } set r [glob -directory $Repertoire *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } clustalConvertForpsiblast $fichier FinPasTouche $f } } proc clustalConvertTestForMacsim {fichier} { if { ! [file exists "alignFasta"]} { File mkdir alignFasta } set newRep [RepertoireDuGenome]/alignFasta/ set list [split $fichier "/"] set newFile $newRep[lindex $list [llength $list]-1] exec clustalw $fichier -convert -output=FASTA -outfile=$newFile #faut faire des duplications selon les cas qd rencontre un PUZquelque chose set ma_list [LesLignesDuFichier $newFile] set sauve "no" set newList {} set newSeq {} foreach Ligne $ma_list { if {$Ligne==">[lindex $list [llength $list]-1]"} { lappend newList $Ligne set sauve "yes" } elseif {$sauve eq "yes" && [regexp {^[^>].*} $Ligne]} { lappend newSeq $Ligne lappend newList $Ligne } elseif {$sauve eq "yes" && [regexp {^[>].*} $Ligne]} { set ma_list [LesLignesDuFichier [RepertoireDuGenome]/prottfa/[lindex $list [llength $list]-1]] set ID [lindex [split [lindex $ma_list 0] ] 1] lappend newList ">$ID" foreach l $newSeq { lappend newList "$l" } lappend newList "$Ligne" set sauve "no" } else { lappend newList $Ligne } } SauveLesLignes $newList dans $newFile } proc cmptf {} { for {set i 4} {$i <=9} {incr i} { set n [expr {[factorial1 10]/([factorial1 $i]*[factorial1 (10-$i)])}] puts "i=$i $n" } exit } proc coeursDispos {{min ""} {max ""}} { set perc [exec vmstat 1 2 | tail -1] set perc [lindex [regsub -all {\s+} $perc " "] 14] set np [expr $perc*[exec nproc]/100] if {$min != ""} { set np [expr max($np, $min)] } if {$max != ""} { set np [expr min($np, $max)] } return $np } proc coherenceParSelfBlastN {{minOverlap 200} {minIdentity 95} {ecritDansFichier 1}} { if { ! [file isdirectory [RepertoireDuGenome]/selfblastn] } { puts "pas de repertoire selfblastn" exit 1 } set listeDesBlastN [lsort -dictionary [glob [RepertoireDuGenome]/selfblastn/*]] set fichierSortie [RepertoireDuGenome]/fiches/coherenceParSelfBlastN set nombreBlastNAvecOverlap 0 if { $ecritDansFichier } { set fh [open $fichierSortie w] } # pour chaque blast foreach blastN $listeDesBlastN { puts "Analyse $blastN" set currentId [regsub {^.*/} $blastN {}] set overlappingHits {} DecortiqueBlast $blastN 0.001 "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN lAli #pour chaque hit foreach banqueId $lBanqueId access $lAccess DE $lDE profil $lProfil PN $lPN ali $lAli { if { $banqueId eq $currentId } { foreach ligneAli $ali { # chope la taille de la query et prenant celle du subject si les IDs sont identiques if { [regexp -nocase {length = ([0-9]+)} $ligneAli regMatch queryLength] } { break } } } else { set queryBegin 0 set sbjctBegin 0 foreach ligneAli $ali { # chope la taille du hit regexp -nocase {length = ([0-9]+)} $ligneAli regMatch sbjctLength if { [regexp -nocase {score =} $ligneAli] && ($queryBegin != 0) } { # le premier HSP est deja traite, quitte la boucle break } elseif { [regexp -nocase {identities = ([0-9]+)/([0-9]+) \(([0-9]+)} $ligneAli regMatch identities overlap percentIdent] } { if { ($overlap < $minOverlap) || ($percentIdent < $minIdentity) } { # ca colle pas, pas besoin de continuer break } } elseif { [regexp -nocase {query[^0-9]*([0-9]+)[^0-9]*([0-9]+)} $ligneAli regMatch qLeft queryEnd] } { if { $queryBegin == 0 } { set queryBegin $qLeft } } elseif { [regexp -nocase {sbjct[^0-9]*([0-9]+)[^0-9]*([0-9]+)} $ligneAli regMatch sLeft sbjctEnd] } { if { $sbjctBegin == 0 } { set sbjctBegin $sLeft } } } # foreach ligneAli $ali # teste les conditions pour ce hit if { ($overlap >= $minOverlap) && ($percentIdent >= $minIdentity) } { # teste l'overlap des extremites (on s'accroche, car c'est plutot rigolo) set morceauQueryGaucheAlign [expr $queryBegin - 1] set morceauQueryDroiteAlign [expr $queryLength - $queryEnd] if { $sbjctBegin < $sbjctEnd } { set morceauSbjctGaucheAlign [expr $sbjctBegin - 1] set morceauSbjctDroiteAlign [expr $sbjctLength - $sbjctEnd] } else { set morceauSbjctGaucheAlign [expr $sbjctLength - $sbjctBegin] set morceauSbjctDroiteAlign [expr $sbjctEnd - 1] } # au moins un petit 'morceau' apres l'alignement de chaque cote if { ($morceauQueryGaucheAlign <= 10) || ($morceauSbjctGaucheAlign <= 10) } { if { ($morceauQueryDroiteAlign <= 10) || ($morceauSbjctDroiteAlign <= 10) } { # teste les 2 cas ou ca colle pas restants if { ($morceauQueryGaucheAlign <= 10) && ($morceauQueryDroiteAlign <= 10) && ($morceauSbjctGaucheAlign > 10) && ($morceauSbjctDroiteAlign > 10) } { # ne fait rien puts -nonewline {} } elseif { ($morceauSbjctGaucheAlign <= 10) && ($morceauSbjctDroiteAlign <= 10) && ($morceauQueryGaucheAlign > 10) && ($morceauQueryDroiteAlign > 10) } { # ne fait rien non plus puts -nonewline {} } else { # ok c'est bon lappend overlappingHits $banqueId } } } } } # else L.149 } # foreach banqueId $lBanqueId... puts $overlappingHits if { $ecritDansFichier } { puts $fh "${currentId}: [llength $overlappingHits] ends overlapping hits" if { [llength $overlappingHits] != 0 } { puts $fh "${currentId}: $overlappingHits" } flush $fh } if { [llength $overlappingHits] != 0 } { incr nombreBlastNAvecOverlap } } # foreach blastN $listeDesBlastN if { $ecritDansFichier } { close $fh } return $nombreBlastNAvecOverlap } proc comp {a b} { set La [LesLignesDuFichier $a] set Lb [LesLignesDuFichier $b] foreach s $La r $Lb { if {$s != $r} {puts $s} } exit } proc compIUPAC {IUPAC} { set tab [split $IUPAC ""] set compIUPAC "" foreach letter $tab { if {$letter == "A"} { append compIUPAC "T" } if {$letter == "T"} { append compIUPAC "A" } if {$letter == "C"} { append compIUPAC "G" } if {$letter == "G"} { append compIUPAC "C" } if {$letter == "V"} { append compIUPAC "B" } if {$letter == "B"} { append compIUPAC "V" } if {$letter == "D"} { append compIUPAC "H" } if {$letter == "H"} { append compIUPAC "D" } if {$letter == "R"} { append compIUPAC "Y" } if {$letter == "Y"} { append compIUPAC "R" } if {$letter == "S"} { append compIUPAC "S" } if {$letter == "W"} { append compIUPAC "W" } if {$letter == "M"} { append compIUPAC "K" } if {$letter == "K"} { append compIUPAC "M" } if {$letter == "N"} { append compIUPAC "N" } } return $compIUPAC; } proc compar {} { set i [lsearch $::LNOrdali "Smito_Homo.sapi"] set seq [lindex $::LSOrdali $i] set sdg [string map {. ""} $seq] DecortiqueUnTFA h.tfa Lh Sh set seh $Sh($Lh) if {$seh != $sdg} { ShowProtDiff seh sdg } set Lid Q9NP81 #set Lid [IDMapping P_REFSEQ_AC ACC NP_001139373] puts $Lid set Le [split [DbFetchGET uniprot $Lid] \n] DecortiqueLesLignesEMBL $Le id ac de gn os oc ox squ puts $squ if {$squ != $sdg} { ShowProtDiff squ sdg } puts "" lassign [NW $squ $sdg] nu ng ShowProtDiff nu ng exit } proc compareFeatures {a b} { array set ftA $a array set ftB $b set typeCmp [string compare $ftA(type) $ftB(type)] if {$typeCmp != 0} {return $typeCmp} if {$ftA(start) < $ftB(start)} { return -1 } elseif {$ftA(start) > $ftB(start)} { return 1 } return 0 } proc comparePDB {l1 lBest} { set toAdd 0 set x 0 if {$lBest == ""} { lappend lBest $l1 return $lBest } else { set lgl1 [expr [lindex $l1 1] - [lindex $l1 0]] foreach e $lBest { set lge [expr [lindex $e 1] - [lindex $e 0]] #determine le + long segment des 2 if {$lge > $lgl1} { set maxlg $lge } else { set maxlg $lgl1 } set diffLg [expr [expr abs($lgl1 - $lge)] / $maxlg.] # si l1 commence apres e if {[lindex $l1 0] > [lindex $e 0]} { #puts "l1 commence apres e" #si l1 finit avant e : empreinte incluse if {[lindex $l1 1] < [lindex $e 1]} { if {[lindex $e 2] > 0.3 && [lindex $l1 2] < 0.3} { return $lBest } if {[lindex $l1 2] > 0.3 && [lindex $e 2] < 0.3} { set lBest [lreplace $lBest $x $x $l1] return $lBest } elseif {[expr [lindex $l1 2] - [lindex $e 2]] > 0.2 && $diffLg < 0.1} { set lBest [lreplace $lBest $x $x $l1] return $lBest } else { #puts "l1 finit avant e, je bouge pas lbest" return $lBest } # sinon, si empreinte chevauchante a droite } elseif {[lindex $l1 0] < [lindex $e 1]} { #puts "chevauchement a droite" if {[lindex $e 2] > 0.3 && [lindex $l1 2] < 0.3} { return $lBest } if {[lindex $l1 2] > 0.3 && [lindex $e 2] < 0.3} { set lBest [lreplace $lBest $x $x $l1] return $lBest } #si + de 10% d'ecart entre les 2 identite if { [expr abs([lindex $l1 2] - [lindex $e 2])] > 0.1 } { #puts "+ 10% diff" #si l1 a le + grand % id, on remplace e par l1 if {[lindex $l1 2] > [lindex $e 2]} { #puts "c'est l1 le + grand, je remplace" set lBest [lreplace $lBest $x $x $l1] return $lBest # sinon, on garde e } else { #puts "c'est e le + grand, je garde" return $lBest } # si - de 10% id d'ecart, on prend le plus long } else { #puts "moins de 10% diff" # si l1 est le plus long, on remplace e par l1 if {$lgl1 > $lge} { #puts "le + gd est l1, je remplace" set lBest [lreplace $lBest $x $x $l1] return $lBest # sinon, on garde e } else { #puts "le + gd est e, je garde" return $lBest } } # sinon, empreinte a l'exterieur, on va voir les suivants } else { #puts "empreinte a l'ext, je vois avec les suivants" set toAdd 1 incr x #break continue } # si l1 commence avant e (chevauchante gauche, excluse ou e compris ds l1) } else { #si e est compris ds l1 if {[lindex $l1 1] >= [lindex $e 1]} { if {[lindex $e 2] > 0.3 && [lindex $l1 2] < 0.3} { return $lBest } if {[lindex $l1 2] > 0.3 && [lindex $e 2] < 0.3} { set lBest [lreplace $lBest $x $x $l1] return $lBest } elseif {[expr [lindex $e 2] - [lindex $l1 2]] > 0.2 && $diffLg < 0.1} { return $lBest } else { set lBest [lreplace $lBest $x $x $l1] return $lBest } # sinon, si empreinte a l'exterieur, on va voir les suivants } elseif {[lindex $l1 1] <= [lindex $e 0]} { #puts "l1 est a l'ext, je vois avec les suivants" set toAdd 1 #break incr x continue # sinon, si empreinte chevauchante gauche } else { if {[lindex $e 2] > 0.3 && [lindex $l1 2] < 0.3} { return $lBest } #puts "chevauchemant gauche" if {[lindex $l1 2] > 0.3 && [lindex $e 2] < 0.3} { set lBest [lreplace $lBest $x $x $l1] return $lBest } #si + de 10% d'ecart entre les 2 identites if { [expr abs([lindex $l1 2] - [lindex $e 2])] > 0.1 } { #puts "+ de 10% diff" #si l1 a le + grand % id, on remplace e par l1 if {[lindex $l1 2] > [lindex $e 2]} { #puts "l1 est mieux, je remplace" set lBest [lreplace $lBest $x $x $l1] return $lBest # sinon, on garde e } else { #puts "e est mieux, je garde" return $lBest } # si - de 10% id d'ecart, on prend le plus long } else { #puts "moins de 10% diff" # si l1 est le plus long, on remplace e par l1 if {$lgl1 > $lge} { #puts "l1 est + grand, je remplace" set lBest [lreplace $lBest $x $x $l1] return $lBest # sinon, on garde e } else { #puts "e est + grand, je garde" return $lBest } } } } incr x } } if {$toAdd == 1} { #puts "en fin de compte j'ajoute l1" lappend lBest $l1 } return $lBest } proc compcsv {} { set Lold [LesLignesDuFichier participants.csv_bak] set Lnew [LesLignesDuFichier participants.csv] set nbo 0 set nbn 0 foreach l $Lold { set ix [lsearch $Lnew $l] if {$ix == -1} { puts "NOT FOUND !" incr nbn continue } set Lnew [lreplace $Lnew $ix $ix] incr nbo update } #puts "[join $Lnew \n]" puts "nbo $nbo nbn $nbn" exit } proc comptNbOrtho {orthofile} { Espionne "Calcul le nombre d'orthologue" if { ! [file exists $orthofile]} { return 0 } set compteur 0 #Espionne "$orthofile" set Lignes [LesLignesDuFichier $orthofile] foreach ligne $Lignes { if {[regexp {^[>]} $ligne]} { set para [split $ligne ";"] if {[lindex $para 2] ne "NOTHING"} { incr compteur } } } return $compteur } proc computeCombinedScore {lScores} { set products 1.0 foreach score $lScores { set products [expr $products * (1.0 - double($score) / 1000.0)] } return [expr (1.0 - $products) * 1000.0] } proc computeConsensusFeature {identicalFeatures {popFraction 0.6}} { array set positionsCount {} foreach aFt $identicalFeatures { array unset ft array set ft $aFt for {set i $ft(start)} {$i <= $ft(stop)} {incr i} { if {[info exists positionsCount($i)]} { incr positionsCount($i) } else { set positionsCount($i) 1 } } } array unset ft array set ft [lindex $identicalFeatures 0] set ft(start) 0 set ft(stop) 0 set ft(note) [regsub -nocase {^PROP_} $ft(note) ""] set ft(note) [regsub -nocase {\s*PARTIAL\s*} $ft(note) " "] set ft(score) "0.0" foreach pos [lsort -integer [array names positionsCount]] { if {[expr double($positionsCount($pos)) / [llength $identicalFeatures]] >= $popFraction} { set ft(start) $pos break } } foreach pos [lsort -integer -decreasing [array names positionsCount]] { if {[expr double($positionsCount($pos)) / [llength $identicalFeatures]] >= $popFraction} { set ft(stop) $pos break } } return [array get ft] } proc consensusPosition {list {popToSelect 0.8}} { # Compte le nombre d'individus par élement foreach e $list { if {![info exists a($e)]} {set a($e) 1 } else {incr a($e)} } # Crée une liste triée set lCounts {} foreach e [array names a] { lappend lCounts [list $e $a($e)] } set lCounts [lsort -integer -decreasing -index 1 $lCounts] # Sélectionne à partir de l'élément qui à le + d'individus jusqu'à popToSelect % de population set selectedPop 0 set selectedElements {} foreach e $lCounts { set elem [lindex $e 0] set nb [lindex $e 1] for {set i 0} {$i < $nb} {incr i} {lappend selectedElements $elem} incr selectedPop $nb if {[expr double($selectedPop) / [llength $list]] >= $popToSelect} {break} } return [integersMeanCeil $selectedElements] } proc consensusQualityColoring {consensus basesQuality} { # Find segments of same base and store the result in t array array set t [runLengthCount $basesQuality] # Create a clean array to return array set returned {} set returned(count) $t(count) for {set i 1} {$i <= $t(count)} {incr i} { if {$t($i,value) < 33} { #Red set qualityColor 3 set qualityComment "Low quality \[0,33\[" } elseif {$t($i,value) < 66} { #Orange set qualityColor 1 set qualityComment "Medium quality \[33,66\[" } else { #LimeGreen set qualityColor 5 set qualityComment "High quality \[66,99\]" } set returned($i,ftype) $qualityComment set returned($i,fstart) [expr $t($i,start) + 1] set returned($i,fstop) [expr $t($i,stop) + 1] set returned($i,fscore) $t($i,value) set returned($i,fcolor) $qualityColor } return [array get returned] } proc console {args} { } proc copytt {} { set RepertoireSource "/genomics/link/EVI3Old/protembl" set RepertoireDestination "/genomics/link/EVI3/protembl" foreach F [glob -nocomplain "$RepertoireSource/*"] { puts $F File copy -force $F "$RepertoireDestination/." } } proc corbo {} { package require sqlite3 sqlite3 d /home/moumou/www/perso/books/books.sql set Lvoy [list a e i o u y] set Lcon [list b c d f g h j k l m n p q r s t v w x z] set Lpnpt [d eval {select pk_books,Nom,Prenom,Titre from books order by Nom}] puts "Nb books : [expr {[llength $Lpnpt]/4}]" set LToDel [list] foreach {pk nom pre tit} $Lpnpt { puts -nonewline "$nom | $pre | $tit :" set c4 0 foreach v {nom pre tit} { set $v [string tolower [set $v]] set nc 0 for {set i 0} {$i < [string length [set $v]]} {incr i} { if {[string index [set $v] $i] in $Lcon} { incr nc } else { set nc 0 } if {$nc == 3} { set c4 1 break } } if {$c4} { break } } puts " $c4" if {$c4} { update idletasks while {1} { gets stdin rep if {$rep eq "y" || $rep eq "n"} { break } } if {$rep eq "y"} { lappend LToDel $pk } } } if {$LToDel != {} } { d eval "delete from books where pk_books in ([join $LToDel ,])" } d close exit } proc cordis {} { global TabSF foreach k [array names TabSF "*,Dis-bact_4"] { foreach f [set TabSF($k)] { DecortiqueUneFeature $f dg fg c tmp note if {[regexp {^indel} $note]} {continue} lappend Lf [list $dg $fg $note] } } set Lf [lsort -unique -integer -index 0 $Lf] puts "[join $Lf \n]" return } proc corrdb {} { sqlite3 o bench_bak.sql o eval {begin transaction} set Lid [o eval {select pfamid from pfam}] set Lid [lsort -unique -dictionary $Lid] foreach i $Lid { set Lpk [o eval {select pk_pfam from pfam where pfamid=$i}] if {[llength $Lpk] < 2} { continue } set ppk [lindex $Lpk 0] set dpk [lindex $Lpk end] set Lv [o eval {select * from pfam where pk_pfam=$dpk}] lassign $Lv tmp tmp tmp nseqs lgt idm idsd o eval {update pfam set nseqs=$nseqs,idm=$idm,idsd=$idsd where pk_pfam=$ppk} } o eval {delete from residues} set Lo [LesLignesDuFichier tb.o] foreach l $Lo { if {[string trim $l] eq ""} {continue} set Lv [split $l " "] lassign $Lv pk pkp s g t o eval {insert into residues values ($pk,$pkp,$s,$g,$t)} } o eval {commit} exit } proc correspMSPHid {id} { set fic "/genomics/link/MS2PHdbEucaGridMarch08/listeCorresp" set LesLignes [LesLignesDuFichier $fic] set prefix [string range [lindex $LesLignes [lsearch -regexp $LesLignes $id]] 0 7] return $prefix } proc correspPosPdbQuery {pos seq1 seq2} { set posAli [CorrespSeqAli $seq1 $pos] set posSeq2 [CorrespAliSeq $seq2 $posAli] return $posSeq2 } proc correspondanceIndex {inputAceFile inputSingletsFile} { set prefix [PreFixe] set numerotation [FormatDesNumerosPourCollection] set correspFile [RepertoireDuGenome]/fiches/corresp.idx array set ace [readACEfile $inputAceFile] array set sing [readFasta $inputSingletsFile] set ORFnumber 1 set fh [open $correspFile w] foreach contigIdx $ace(index) { puts $fh [format "CO %s %s%${numerotation} %s" $ace($contigIdx,name) $prefix $ORFnumber $ace($contigIdx,reads)] foreach readIdx $ace($contigIdx,index) { puts $fh [format "RD %s %d" $ace($contigIdx,$readIdx,name) [getUnpaddedSequencePosition $ace($contigIdx,consensus) $ace($contigIdx,$readIdx,consensusPosition)]] } incr ORFnumber } foreach singIdx $sing(index) { puts $fh [format "SI %s %s%${numerotation}" $singIdx $prefix $ORFnumber] incr ORFnumber } close $fh } proc correspondanceIndexOld {inputAceFile inputSingletsFile} { set prefix [PreFixe] set numerotation [FormatDesNumerosPourCollection] set correspFile [RepertoireDuGenome]/fiches/corresp.idx array set ace [readACEfile $inputAceFile] array set sing [readFasta $inputSingletsFile] set ORFnumber 1 set fh [open $correspFile w] foreach contigIdx $ace(index) { puts $fh [format "CO %s %s%${numerotation}" $ace($contigIdx,name) $prefix $ORFnumber] foreach readIdx $ace($contigIdx,index) { puts $fh [format "RD %s" $ace($contigIdx,$readIdx,name)] } incr ORFnumber } foreach singIdx $sing(index) { puts $fh [format "SI %s %s%${numerotation}" $singIdx $prefix $ORFnumber] incr ORFnumber } close $fh } proc corrigefichierjumeauxtemp {Fichier266 FichierJum} { foreach Ligne [LesLignesDuFichier $Fichier266] { if {$Ligne==""} {continue} set Vu($Ligne) 1 } foreach Ligne [LesLignesDuFichier $FichierJum] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] set V 0 foreach Jumeau $LesJumeaux { if {[info exists Vu($Jumeau)]} { #Espionne $Ligne set V 1; break } } if {$V==0} {lappend Liste $Ligne} } Espionne [llength $Liste] SauveLesLignes $Liste dans "[RepertoireDuGenome]/fiches/929" } proc corrmod {} { global TabSF LNOrdali Defauts set f [file tail [set Defauts(FichierXML)]] set root [file rootname [set Defauts(FichierXML)]] set sys [string range $f 0 [string first "_" $f]-1] set hmt "${sys}mito_Homo.sapi" foreach sqn $LNOrdali { if {$sqn eq ""} {continue} set Lnew [list] set Lft [set TabSF($sqn,MODULE)] foreach ft $Lft { DecortiqueUneFeature $ft d f col sc note csys if {$note ne "Putative_MTS"} { lappend Lnew $ft continue } if {$sqn eq $hmt} { lappend Lnew $ft } } set TabSF($sqn,MODULE) $Lnew } SauveLAlignement XML "${root}_corr.xml" exit } proc corrrna {} { LitLeTFA 250_rna.tfa Ln Sq set lmax -999 foreach n $Ln { set s [set Sq($n)] set l [string length $s] #set s [string map [list "." ""] $s] lappend Ls $s lappend Ll $l } puts "[DenombreLaListe $Ll]" #EcritLeTfa 250_rna_deg.tfa $Ln $Ls set f [open 250_nrna.tfa w] foreach n $Ln s $Ls { set s [string map [list "." "-"] $s] puts $f ">$n" puts $f $s } close $f exit } proc corrx2 {} { set L [LesLignesDuFichier DARS2_DARS_uniprot.xml2] set Li [lsearch -all -regexp $L "PROP_PF01336_tRNA_anti_from_B3MK45"] foreach i [lsort -integer -decreasing $Li] { set L [lreplace $L $i-6 $i+1] } set o [open last.xml w] puts $o [join $L \n] close $o exit } proc createImageScView {} { #SchematicViewPourTous "" domain #SchematicViewPourTous "" domain "" position #SchematicViewPourTous "" pfam #SchematicViewPourTous "" pfam "" position #faire un test pour voir si PFAM&DOMAIN fonctionne... SchematicViewPourTous "" DomPfam SchematicViewPourTous "" DomPfam "" position ##fin du test SchematicViewPourTous "" koanno globulaire SchematicViewPourTous "" koanno globulaire position SchematicViewPourTous "" koanno Ronn_DR SchematicViewPourTous "" koanno Ronn_DR position SchematicViewPourTous "" koanno GlobPlot_Disorder SchematicViewPourTous "" koanno GlobPlot_Disorder position SchematicViewPourTous "" koanno FoldIndex_pds SchematicViewPourTous "" koanno FoldIndex_pds position SchematicViewPourTous "" pdb filtre SchematicViewPourTous "" pdb filtre position SchematicViewPourTousPDB SchematicViewPourTousPDB "" position } proc creeAliPir {pab lgEmpreinte pdb chn} { global DefautsPipe global PipeCollection global repModele global toAdd if {$PipeCollection} { set ficAli [file join $repModele "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.ali"] set ficScript [file join $repModele "model${pab}.py"] set ficPDB [file join $repModele "${pdb}.pdb"] } else { set ficAli "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.ali" set ficScript "model${pab}.py" set ficPDB "${pdb}.pdb" } set lgPDB [LesLignesDuFichier $ficPDB] set listAt [lsearch -all -regexp $lgPDB "^ATOM|^HETATM"] set pdbF [string trim [string range [lindex $lgPDB [lindex $listAt 0]] 22 25]] set pdbL [string trim [string range [lindex $lgPDB [lindex $listAt end]] 22 25]] set fs [open $ficScript w] puts $fs "from modeller import *\nfrom modeller.automodel import *\nenv = environ()\nenv.io.hetatm = True\na = automodel(env, alnfile='[file tail $ficAli]',knowns=('$pdb$chaine'), sequence='$pab', assess_methods=assess.normalized_dope)\na.starting_model = 1\na.ending_model = 5\na.make()\nok_models = filter(lambda x: x\['failure'\] is None, a.outputs)\nkey = 'Normalized DOPE score'\nok_models.sort(lambda a,b: cmp(a\[key\], b\[key\]))\ntry:\n\tm = ok_models\[0\]\n\tprint \"Top model: %s (Normalized DOPE score %.3f)\" % (m\['name'\], m\[key\])\nexcept IndexError:\n\tprint \"no 3D model created\"" close $fs set sqQueO [string range [lindex $lgEmpreinte 1] 8 end] set sqPDBO [string range [lindex $lgEmpreinte 2] 11 end] #regsub -all "X" $sqPDBO {-} sqPDBO regsub -all {\-} $sqQueO "" seqQueI set sqQueO [split $sqQueO ""] set sqPDBO [split $sqPDBO ""] # il ne faut integrer que la partie couverte de la query dans l'alignement PIR # on va chercher la 1er position a laquelle on a un lettre dans un PDB, ainsi que la derniere # on va ensuite travailler uniquement sur cet intervalle # ATTENTION : la sequence PDB dans .ali doit correspondre en tous points a celle du fichier pdb de reference # meme si la query s arrete avant, la totalite du PDB est alignee... set lidx [lsearch -regexp -all $sqPDBO {[A-Z]}] if {[llength $lidx] != 0} { set lidx [lsearch -regexp -all $sqPDBO {[A-Z]}] set idxD [lindex $lidx 0] set idxF [lindex $lidx end] set debQ [lrange $sqQueO 0 [expr $idxD - 1]] set nbDec [llength [lsearch -regexp -all $debQ {[A-Z]}]] set sqQueO [lrange $sqQueO $idxD $idxF] set sqPDBO [lrange $sqPDBO $idxD $idxF] set sqQue "" set sqPDB "" set sqM [creePDBAvecX $pdb ${pdb}_$chn 0] set lPosH [lsearch -all $sqM "."] set posPDB 0 foreach q $sqQueO p $sqPDBO { if {$q eq "-" && $p eq "-"} { continue } elseif {$q eq "-" && $p eq "X"} { continue } else { append sqQue $q if {$p ne "-" && [lsearch $lPosH $posPDB] != -1} { append sqPDB "." incr posPDB } elseif {$p eq "X"} { append sqPDB "-" incr posPDB } else { append sqPDB $p if {$p ne "-"} { incr posPDB } } } } regsub -all {\-} $sqQue "" sqQQ set sqQlength [string length $sqQQ] if {$sqQlength == 0} { return "noAli" } set fa [open $ficAli w] puts $fa ">P1;$pab\nsequence:${pab}:[expr 1 + $nbDec]:${chn}:[expr $sqQlength + $nbDec]::::-1.00:-1.00" set identity 0 lappend toAdd "FIRST_1=[expr 1 + $nbDec]" lappend toAdd "END_1=[expr $sqQlength + $nbDec]" lappend toAdd "SPECIES_1=Human" lappend toAdd "FULL_SEQ_1=$seqQueI" lappend toAdd "ALL_TEMP_1=$pdb$chn" lappend toAdd "PDB_CODE_1=$pdb$chn" lappend toAdd "SOV=0.0" lappend toAdd "MODPROT_1=$sqQue" lappend toAdd "PDBPROT_1=$sqPDB" set i 0 while {$i < [string length $sqQue]} { puts $fa [string range $sqQue $i [expr $i + 59]] incr i 60 } puts $fa "*\n>P1;$pdb$chaine\nstructureX:${pdb}${chaine}:${pdbF}:${chn}:${pdbL}:::::-1.00" set i 0 while {$i < [string length $sqPDB]} { puts $fa [string range $sqPDB $i [expr $i + 59]] incr i 60 } puts $fa "*" close $fa return $nbDec } else { return "noAli" } } proc creeEmpPdb {pdb chn} { global DefautsPipe global PipeCollection global repModele if {$PipeCollection} { set ficTmp [file join $repModele "${pdb}.tmp"] set ficBirdQ [file join $repModele "rqBird.ql"] set ficPDB [file join $repModele "${pdb}.pdb"] } else { set ficTmp "${pdb}.tmp" set ficBirdQ "rqBird.ql" set ficPDB "${pdb}.pdb" } if {$chn eq ""} { set chaine "_" } else { set chaine $chn } # cree la requete birdb set fq [open $ficBirdQ w] puts $fq "ID $pdb DB PDB\nFM FLAT" close $fq set cmd "[BirdqlExe] $ficBirdQ > $ficTmp" catch {eval exec $cmd} if {[file exists $ficTmp]} { set LesLignes [LesLignesDuFichier $ficTmp] set fp [open $ficPDB w] set numX "-500" foreach lg $LesLignes { if {![regexp "^ATOM" $lg] && ![regexp "^TER" $lg] && ![regexp "^HETATM" $lg] } { puts $fp $lg } elseif {[string trim [string range $lg 20 21]] eq $chn} { set numY [string trim [string range $lg 22 26]] if {[regexp {[A-Z]} $numY]} { continue } elseif {$numX == -500} { puts $fp $lg set numX $numY } elseif {[expr abs ($numX)] != [expr abs ($numY)] && [string range $numX end-1 end] eq [string range $numY end-1 end]} { continue } else { puts $fp $lg set numX $numY } if {[regexp "^TER" $lg]} { puts $fp "END" break } } } close $fp return 1 } else { return 0 } } proc creeListeCorresp {file} { set lignes [LesLignesDuFichier $file] set long [llength $lignes] for {set i 0} {$i < $long} {incr i} { if {[regexp {^==>} [lindex $lignes $i]]} { puts "[string range [lindex $lignes $i] 4 11]\t[string range [lindex $lignes [expr $i + 1]] 1 6]" } } return 1 } proc creeListeMs2phAvecSynonymes {} { set file [file join [RepertoireDuGenome] "liste" "listeMs2ph"] set lMsphInit "" set lMsphComplete "" set lPab [ListeDesPABs] foreach pab $lPab { set fic [file join [RepertoireDuGenome] "prottfa" $pab] set lignes [LesLignesDuFichier $fic] set acc [string range [lindex $lignes 0] 1 end] lappend lMsphInit $acc } foreach msph $lMsphInit { set url "http://www.expasy.org/uniprot/$msph" set x [HttpCopy $url LesLignes] set lAccNum [recupUniprotListAccNum2 $LesLignes] lappend lMsphComplete $msph foreach syn $lAccNum { if {$syn != "None"} { lappend lMsphComplete $syn } } set lMsphCompletelHomol [lsort -uniq $lMsphComplete] } Espionne $lMsphCompletelHomol set l [llength $lMsphCompletelHomol] puts $l set f [open $file w] foreach e $lMsphCompletelHomol { puts $f $e } close $f return 1 } proc creeModeleSelonEmpreinte {ficEmpreinte} { # prend en entree un fichier empreinte global DefautsPipe global PipeCollection global repModele global toAdd set toAdd "" set pab [file rootname [file tail $ficEmpreinte]] set lgEmpreinte [LesLignesDuFichier $ficEmpreinte] set pdb [string range [lindex $lgEmpreinte 0] 6 9] set chn [string range [lindex $lgEmpreinte 0] 11 end] switch $chn { "aa" { set chn 1 } "ab" { set chn 2 } "a" { set chn "" } } if {$PipeCollection} { set repModele "[RepertoireDuGenome]/modeles3D/" set ficScript [file join $repModele "model$pab.py"] set ficLog [file join $repModele "model$pab.log"] set ficMod [file join $repModele "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.pdb"] set ficInfo [file join $repModele "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.info"] set ficAli [file join $repModele "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.ali"] } else { set repModele "" set ficScript "model$pab.py" set ficLog "model$pab.log" set ficMod "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.pdb" set ficInfo "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.info"] set ficAli "[string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.ali" } if {[file exists $ficMod]} { puts "modele [string range $pab 0 [expr [string first "_" $pab] - 1]]_${pdb}${chn}.pdb existe deja" return 0 } else { set toAdd "DBCODE_1=[string range $pab 0 5]_${pdb}${chn}" # creation du fichier PDB template utilise par modeller creeEmpPdb $pdb $chn # creation du fichier pab.ali qui va contenir alignement empreinte/query au format PIR # + creation du fichier de script model.py # en sorite de creeAliPir, on obtient le nombre de residu de decalage entre seqQuery et la parti qui a ete modelisee set decal [creeAliPir $pab $lgEmpreinte $pdb $chn] if {$decal eq "noAli"} { puts "default in alignment" return 0 } else { if {[file exists $ficScript]} { set cmd "[ModellerExe] $ficScript" catch {eval exec $cmd} message set message [split $message "\n"] # par defaut, 4 lignes de warning dans message... # si on a plus que ces 4 lignes, on affiche le message if {[llength $message] > 4} { puts "etape modelisation:" foreach lgM [lrange $message 4 end] { puts $lgM } } if {[glob -nocomplain "${pab}*.pdb"] != ""} { set lgFicLog [LesLignesDuFichier $ficLog] set idx [lsearch -regexp $lgFicLog "^Top model:"] if {$idx != -1} { set lgTopMod [lindex $lgFicLog $idx] puts "$lgTopMod" set bModel [string trim [string range $lgTopMod [expr [string first ":" $lgTopMod] + 1] [expr [string first "(" $lgTopMod] - 1]]] set ficBModel [string trim [string range $lgTopMod [expr [string first ":" $lgTopMod] + 1] [expr [string first "(" $lgTopMod] - 1]]] set dope [string trim [string range $lgTopMod [expr [string first "score" $lgTopMod] + 6] [expr [string last ")" $lgTopMod] - 1]]] # modification de la numerotation des residus dans le fichier PDB decaleFicModele $ficBModel $ficMod $decal $dope $chn set lfLog [LesLignesDuFichier $ficLog] set lIdx [lsearch -regexp -all $lfLog "^DOPE score"] set idx [lindex $lIdx [expr [string index $ficBModel end-4] - 1]] set lener [lindex $lfLog $idx] set ener [string trim [string range $lener [expr [string first ":" $lener] + 1] end]] set lgIdent [lindex [LesLignesDuFichier $ficMod] 3] set ident [string trim [string range $lgIdent [expr [string first ":" $lgIdent] + 1] end]] set toAdd [lreplace $toAdd 3 3 "IDENTITY_1=[string range $ident 0 [expr [string first "." $ident] - 1]]"] lappend toAdd "ENERGY_1=$ener" # efface les modeles temporaires cree par modeller foreach mod [glob -nocomplain "${pab}.*.pdb"] { catch {file delete -force $mod} } } set fI [open $ficInfo w] foreach add $toAdd { puts $fI $add } close $fI } else { puts "Modeller : no 3D model generated" } if {[file exists $ficScript]} { file delete -force $ficScript } if {[file exists $ficLog]} { file delete -force $ficLog } if {[file exists $ficAli]} { file delete -force $ficAli } } } return 1 } } proc creePDBAvecX {id1 id2 {het 1}} { set chain "" set MolId [string range $id1 0 3] set chain [string range [string trim $id2] 5 end] switch $chain { "" { set chain "a" } "aa" { set chain "1" } "ab" { set chain "2" } } global PDB_${MolId}_NomRes global PDB_${MolId}_NmrRes global PDB_${MolId}_TypAtm DecortiqueUnPDB $id1 $id2 set NmrRes [array get PDB_${MolId}_NmrRes] set NomRes [array get PDB_${MolId}_NomRes] set TypAtm [array get PDB_${MolId}_TypAtm] set idx [lsearch [set NmrRes] "$chain"] set numResidu [lindex [set NmrRes] [expr $idx + 1]] set nomResidu [lindex [set NomRes] [expr $idx + 1]] set atmTyp [lindex [set TypAtm] [expr $idx + 1]] set listeRes "" # first est la numerotation du 1er res (le premier qui finit par un entier) set first [lindex $numResidu [lsearch -regexp $numResidu {[[:digit:]]\M}]] #set nbT 0 puts $first set z [expr $first + 1] foreach x $numResidu y $nomResidu t $atmTyp { if {$y eq "XXX"} { set y "X" } set x [string trim $x] #pour gestion des insertions notees genre 28-28A-29 # on ne recupere pas le residu 28A dans ce cas # on continue le parsing if {[regexp {[A-Z]} $x]} { #lappend listeRes $y set a $x continue } # si on ne souhaite pas integrer les heteroatome # on met un "." dans la sequence... --> necessaire pour modeller if {$het == 0 && $t eq "HETA"} { set y "." } # pour gestion des insertions notees genre 28-328-29 # on ne recupere pas le residu 28A dans ce cas # on continue le parsing if {[expr abs ($x - $z)] > 100} { set lgX [string length $x] #if {[string index $a end] eq [string index $x end]} {} if {[string range $a end-[expr $lgX - 2] end] eq [string range $x end-[expr $lgX - 2] end]} { #set a $x continue } } if {[expr abs ($x - $z)] > 1000} { lappend listeRes $y set a $x continue } if {$x == [expr $z - 1]} { lappend listeRes $y incr z set a $x } else { if {$x == 1} { lappend listeRes $y incr z 2 set a $x } else { set i 0 while {$x != [expr $z - 1]} { if { $i > 500} { # si on se retrouve avec des insertion de plus de 500X # on considere qu il y a erreur dans la gestion du fichier # on retourne la liste des noms de residus de la chaine tel quel... return $nomResidu } lappend listeRes "X" incr i incr z } #puts "enfin ajoute $y" lappend listeRes $y incr z set a $x } } } foreach v [info globals "*${MolId}*"] { global $v catch {unset $v} } return $listeRes } proc creeRapportHTMLfromAli {{ficAli ""}} { LesDefauts if {$ficAli == ""} { puts "USAGE : creeRapportHTMLfromAli ficAli" puts "ficAli format : MSF, FASTA or MACSIMS" exit } if {[EstLeBonFormat $ficAli "XML"]} { set lAcc [getListAccGpFromMacsims $ficAli] } elseif {[EstLeBonFormat $ficAli "MSF"]} { DecortiqueUnMSF $ficAli lAcc Sequences } elseif {[EstLeBonFormat $ficAli "TFA"]} { DecortiqueUnTFA $ficAli lAcc Sequences } else { puts "Problem with the file format.\nficAli supported format : MSF, FASTA or MACSIMS\nPlease verify!" } set ficOut "[file tail ${ficAli}].report.html" set of [open $ficOut w] puts $of "$ficAli sequences descriptions\n\n\n\n\n" set gpAff 99 foreach acc $lAcc { set gp "" if {[regexp "_gp" $acc]} { set gp [string range $acc [expr [string last "_" $acc] + 3] end] set acc [string range $acc 0 [expr [string last "_" $acc] - 1]] } # set InfoAcc [recupInfoBirdF $acc] set InfoAcc [recupInfoBirdF [EnlevePrefixeBank $acc]] if {$InfoAcc != ""} { set ID [lindex [lindex $InfoAcc 0] 1] set InfoAcc [lrange $InfoAcc 1 end] set def "" foreach lg $InfoAcc { if {[regexp "^DE" $lg]} { append def "[string trim [string range $lg 4 end]]
    " } } set idxOS [lsearch -regexp $InfoAcc "^OS"] if {$idxOS != -1} { set lgOrga [lindex $InfoAcc $idxOS] set orga [string range $lgOrga 5 end] } if {$gp != "" && $gp != $gpAff} { puts $of "" set gpAff $gp } puts $of "" } else { if {$gp != "" && $gp != $gpAff} { puts $of "" set gpAff $gp } puts $of "" } } puts $of "
    \n
    Groupe ${gp}
    $acc${ID}${def}${orga}
    Groupe ${gp}
    $accno informationno informationno information
    " close $of return 1 } proc csasql {} { set Ll [LesLignesDuFichier csa.sql] set out [open out.sql w] set tmp "" foreach l $Ll { set l [string trim $l] if {$l eq ""} {continue} regsub -all "`" $l "'" l append tmp "$l " if {[string index $l end] eq ";"} { puts $out $tmp set tmp "" } } close $out exit } proc ctcs {} { set s [string repeat "sldkjfljfsdfjsdfsdfqsffsldf" 1] proc sreg {s c} { return [regsub -all $c $s $c tmp] } proc sstm {s c} { return [expr {[string length $s]-[string length [string map [list $c ""] $s]]}] } puts "sreg [time {sreg $s a}]" puts "sstm [time {sreg $s a}]" exit } proc ctmp {} { set Ll [LesLignesDuFichier tmp.txt] foreach l [lsort $Ll] { set l [string range $l [string first "Sauvegarde/" $l]+11 end] set l [string trim $l] puts $l } exit } proc cube {} { set f [open /home/moumou/tmp/polyr/test2 w] for {set i 0} {$i < 5} {incr i} { for {set j 0} {$j < 5} {incr j} { for {set k 0} {$k < 5} {incr k} { if {($i == 0 || $i == 4) || ($j == 0 || $j == 4) || ($k == 0 || $k == 4)} { puts -nonewline $f 0 } else { puts -nonewline $f 5 } } } } close $f exit } proc dao {} { set pdbid 3kbu Structure create $pdbid set ok [$pdbid new 3kbu.pdb B] return } proc dbSize {B} { JeMeSignale if { ! [regexp "^/" $B]} { set B "/blast/$B" } set queue [file tail $B] set fichierTest "/home/joly/BlastTest/$queue.test.blast" if {[file exists $fichierTest]} { if {[regexp {([0-9\,]+) sequences} [ContenuDuFichier $fichierTest] Match NAV]} { regsub -all "\," $NAV "" N return $N } } else { if {[OuiOuNon "$fichierTest does not exist ... Do I create it ... It will take some time" 0]} { set fichierQuery "/home/joly/BlastTest/queryBidon.tfa" set creationBlast [monBlast $fichierQuery $fichierTest $B] set dbSize [dbSize $B] return $dbSize } else { return 0 } } return -2 set FicFormat "$B.formatdb.log" set total 0 if {[file exists $FicFormat]} { foreach Ligne [LesLignesDuFichier $FicFormat] { if {![regexp {Formatted ([0-9]+) sequences} $Ligne Match N]} {continue} incr total $N } return $total } set FicPal "$B.pal" Espionne $FicPal set total 0 if {[file exists $FicPal]} { set Dir [file dirname $FicPal] foreach Ligne [LesLignesDuFichier $FicPal] { if {![regexp {^DBLIST } $Ligne]} {continue} regsub -all {[ \t]+} $Ligne " " Ligne set LesMots [split $Ligne " "] foreach B [lrange $LesMots 1 end] { if {! [regexp "^/" $B]} { set B "$Dir/$B" } Espionne $B set N [dbSize $B] incr total $N Espionne $N } } return $total } } proc dblock {{len ""}} { global TColScore LNOrdali LSOrdali if {[TypeAli] eq "XML"} { set Lbornes [CoreBlocksDuXML] } else { set Lbornes [list 3 7 16 20] } if {$Lbornes == {}} { puts "Error ! No blocks in $::Defauts(FichierXML)" return [list] } array set ::Sref [array get Sequences] if {$len ne ""} { set ok [AlA "" -lenmotif $len] } else { set ok [AlA ""] } if {$ok == 0} { puts "Problem in AlA !" return 0 } set rep [AnalyseCoreBlocksAgent $Lbornes] return $rep #exit } proc dbmis {} { cd /home/moumou/dbmarie/ package require sqlite3 set db "rold" sqlite3 $db misypat.sql $db eval {alter table mutation add column comment TEXT} $db eval {vacuum} exit } proc ddl {} { for {set i 0} {$i < 100} {incr i} { set n [expr {round(100*rand())}] lappend L "Node-$n" } puts [time {lsort $L} 100] puts [time {lsort -dictionary $L} 100] exit } proc ddoc {} { set Ld [LesLignesDuFichier doc.txt] set Lt [LesLignesDuFichier tmp.txt] foreach l $Ld { set l [string trim $l] if {$l eq ""} {continue} lappend nd $l } foreach l $Lt { set l [string trim $l] if {$l eq ""} {continue} lappend nt $l } foreach d $nd t $nt { if {$d ne $t} { puts "doc :\n$d\ntmp :\n$t\n" } } exit } proc debB {} { set d toto sqlite3 $d bench.sql foreach {ar gp lgt} [$d eval {select args,gapthr,lgt from results where job='PF00001' order by gapthr}] { lassign [lindex $ar 0] tmp tmp mth puts "$lgt $gp $mth" } puts "" foreach {job ar cm pos} [$d eval {select job,args,cm,pos from results where cm='''secator''' and gapthr=0.1 order by job DESC}] { lassign [lindex $ar 0] tmp tmp mth puts "$job $mth $cm $pos" } exit } proc debcb {{f1 mlog} {f2 llog}} { set l1 [LesLignesDuFichier $f1] set l2 [LesLignesDuFichier $f2] foreach l $l1 { switch -regexp -- $l { {^DEBITEM } { set item [lindex [split $l " "] 1] } {^ITEM } { lappend T(1,$item) [lrange [split $l " "] 1 end] } } } foreach l $l2 { switch -regexp -- $l { {^DEBITEM } { set item [lindex [split $l " "] 1] lappend Litem $item } {^ITEM } { lappend T(2,$item) [lrange [split $l " "] 1 end] } } } set Litem [lsort -unique $Litem] foreach item $Litem { if {! [info exists T(1,$item)]} { puts "\nWARNING : $item n'existe pas dans $f1 !\n" continue } if {! [info exists T(2,$item)]} { puts "\nWARNING : $item n'existe pas dans $f2 !\n" continue } puts "item $item" set l1 [lsort [set T(1,$item)]] set l2 [lsort [set T(2,$item)]] #puts "l1 $l1" #puts "l2 $l2" #puts "lor [lor $l1 $l2]" puts "from1" puts "[join [lor $l1 $l2 from1] \n]" puts "from2" puts "[join [lor $l1 $l2 from2] \n]" puts "" } exit } proc decaleFicModele {ficModOri ficModFin decal dope chn} { set lgModel [LesLignesDuFichier $ficModOri] set of [open $ficModFin w] puts $of [lindex $lgModel 0] puts $of "REMARK 6 MODELLER NORMALIZED DOPE SCORE : $dope" foreach lg [lrange $lgModel 1 end] { if {[regexp "^ATOM" $lg]} { set posO [string trim [string range $lg 22 25]] set pos [expr $posO + $decal] switch [string length $pos] { 4 { set posF $chn$pos } 3 { set posF "$chn $pos" } 2 { set posF "$chn $pos"} default { set posF "$chn $pos" } } set lg [string replace $lg 21 25 $posF] } puts $of $lg } close $of return 1 } proc decode {file} { global debug if {! [catch {set f [open $file r]}]} { set l {} set decode 0 set encoding text set data {} while {! [eof $f]} { gets $f l set l $l if {! $decode} { if {! [string length $l]} { set decode 1 } elseif {[lindex [string map {\" {}} $l] 0] == "Content-Transfer-Encoding:"} { set encoding [lindex [string map {\" {}} $l] 1] } } else { set data "[set data]\n$l" } } seek $f 0 start close $f if {$decode && $encoding == "base64"} { set f [open $file w+] fconfigure $f -translation binary set data [base64::decode $data] puts -nonewline $f $data close $f } elseif {$decode} { set f [open $file w+] #fconfigure $f -translation binary #set data [base64::decode $data] puts -nonewline $f $data close $f } } } proc df {} { set db [InitTaxDB] set Ltmp [LesLignesDuFichier marie.tax] #set Ltmp [LesLignesDuFichier tax.txt] #set Ltmp [LesLignesDuFichier out_html.tax] set Lmar [list] foreach id $Ltmp { if {$id ne ""} { lappend Lmar $id } } #set L2 [LesLignesDuFichier sotol-taxids.csv] set L2 [LesLignesDuFichier out.tax] set Lsot [list] foreach l $L2 { set Lv [split $l "\t"] lappend Lsot [lindex $Lv 0] } puts "Lmar [llength $Lmar]" puts "Lsot [llength $Lsot]" set Land [land $Lmar $Lsot] puts "and [llength $Land]" set Lor [lor $Lmar $Lsot from1] puts "Lor [llength $Lor]" foreach nm [$db eval "select Name from taxonomy where taxid in ([join $Lor ,])"] { puts $nm } exit } proc diffMat {aA aB} { upvar $aA A $aB B set Laa {A C D E F G H I K L M N P Q R S T V W Y} set diff 0.0 ; set dp 0.0 set sa 0.0 ; set sb 0.0 foreach a $Laa { foreach b $Laa { if {$a eq $b} {continue} set diff [expr {$diff + $A($a,$b) - $B($a,$b)}] set dp [expr {$dp + abs($A($a,$b) - $B($a,$b))}] set sa [expr {$sa + $A($a,$b)}] set sb [expr {$sb + $B($a,$b)}] } } set diff [expr {$diff/2.}] set dp [expr {$dp/2.}] set sa [expr {$sa/2.}] set sb [expr {$sb/2.}] set fmt "%6.2f %6.2f" puts "diff [format $fmt $diff $dp]" puts "sum [format $fmt $sa $sb]" return } proc disp_string {} { global mol AtmPick AtomePique TypeRep Pck Cor # dont_use_light foreach a $AtmPick { if {$TypeRep eq "fildefer"} { lassign [set PDB_[set mol]_Labels($a)] text Lx } if {$TypeRep eq "benjilamalice"} { lassign [set Cor($a)] text Lx } lassign $Lx x y z # recup de la matrice de modelisation set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set modmat [tcl3dVectorToList $mvmatrix 16] # recup de la matrice de projection set pjmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_PROJECTION_MATRIX $pjmatrix set projmat [tcl3dVectorToList $pjmatrix 16] # Recup du viewport set viewmat [tcl3dVector GLint 4] glGetIntegerv GL_VIEWPORT $viewmat set viewport [tcl3dVectorToList $viewmat 4] # print the string glMatrixMode GL_MODELVIEW glPushMatrix glLoadIdentity set xa [expr {[lindex $modmat 0]*$x + [lindex $modmat 4]*$y + [lindex $modmat 8]*$z + [lindex $modmat 12]}] set ya [expr {[lindex $modmat 1]*$x + [lindex $modmat 5]*$y + [lindex $modmat 9]*$z + [lindex $modmat 13]}] set za [expr {[lindex $modmat 2]*$x + [lindex $modmat 6]*$y + [lindex $modmat 10]*$z + [lindex $modmat 14]}] glColor3f 0.0 1.0 0.0 glRasterPos3f $xa $ya $za printString $text glPopMatrix glFlush } return } proc distributionDesLongueursDesSequencesFichier {fichierTFA fichierSortieCSV {tailleClasse 10}} { if { $tailleClasse < 2 } { set tailleClasse 2 } array set tfa [readFasta $fichierTFA] array set distrib {} foreach index $tfa(index) { set sequence [join [lrange $tfa($index) 1 end] {}] set taille [string length $sequence] set classe [expr $taille / $tailleClasse] if { ! [info exists distrib($classe)] } { set distrib($classe) 1 } else { incr distrib($classe) } } foreach classe [lsort -integer [array names distrib]] { lappend classesCSV "\[[expr $classe * $tailleClasse]-[expr ($classe + 1) * $tailleClasse]\[" lappend distribCSV $distrib($classe) } set fh [open $fichierSortieCSV w] puts $fh [join $classesCSV {;}] puts $fh [join $distribCSV {;}] close $fh } proc distributionDuPourcentGCdesSequencesFichier {fichierTFA fichierSortieCSV {tailleClasse 10}} { if { $tailleClasse < 2 } { set tailleClasse 2 } elseif { $tailleClasse > 100 } { set tailleClasse 100 } array set tfa [readFasta $fichierTFA] array set distrib {} foreach index $tfa(index) { set sequence [join [lrange $tfa($index) 1 end] {}] set taille [string length $sequence] set nbGC [regexp -all -nocase {g|c} $sequence] set pourcentGC [expr int((double($nbGC) / $taille) * 100)] set classe [expr $pourcentGC / $tailleClasse] if { ! [info exists distrib($classe)] } { set distrib($classe) 1 } else { incr distrib($classe) } } foreach classe [lsort -integer [array names distrib]] { lappend classesCSV "\[[expr $classe * $tailleClasse]-[expr ($classe + 1) * $tailleClasse]\[" lappend distribCSV $distrib($classe) } set fh [open $fichierSortieCSV w] puts $fh [join $classesCSV {;}] puts $fh [join $distribCSV {;}] close $fh } proc dnic {} { set home [pwd] cd /home/moumou/ordali/Extensions/tclcluspack0.1/Linux-x86_64 set Lf [glob ../src/*.c] file copy -force {*}$Lf "[pwd]" puts "copy done ..." set warn [exec make] puts "make done ..." file copy -force libtclcluspack0.1.so /home/moumou/ordali/lib/tclcluspack0.1/. file copy -force libtclcluspack0.1.so /usr/local/ActiveTcl/lib/tclcluspack0.1/. cd $home package require tclcluspack set Ll [LesLignesDuFichier plantage.dat] set Lval [list] foreach l $Ll { lassign [split $l "\t"] idx v lappend Lval [list $idx $v] } set Lgr [Tclcluspack $Lval -dt coordinates -cm mm -nbc aic -wc] puts "nb cl [llength $Lgr]" set i 0 foreach gr $Lgr { puts "gr $i [llength $gr]\n[join $gr \n]" } exit } proc do {body keyword expression} { if {$keyword eq "while"} { set expression "!($expression)" } elseif {$keyword ne "until"} { return -code error "unknown keyword \"$keyword\": must be until or while" } set condition [list expr $expression] while 1 { uplevel 1 $body if {[uplevel 1 $condition]} { break } } return } proc dont_use_light {} { global pgl # glDisable GL_COLOR_MATERIAL return glMaterialfv GL_FRONT_AND_BACK GL_SPECULAR [list 0.0 0.0 0.0 1.0] glMaterialfv GL_FRONT_AND_BACK GL_DIFFUSE [list 0.0 0.0 0.0 1.0] # glMaterialfv GL_FRONT_AND_BACK GL_SPECULAR [list 0.0 0.0 0.0 1.0] # glMaterialfv GL_FRONT_AND_BACK GL_AMBIENT [list 0.0 0.0 0.0 1.0] # next calls to glColor will affect GL_AMBIENT composante #glColorMaterial GL_FRONT_AND_BACK GL_AMBIENT glColorMaterial GL_FRONT GL_AMBIENT glColorMaterial GL_FRONT GL_SPECULAR return } proc dosvg {} { global WOrdali ChangeMode arbres tkwait window $WOrdali(Tree,SelectAll) update idletasks $WOrdali(Tree,SelectAll) invoke update idletasks WOrdali(Tree,Draw) invoke return } proc drna {} { LitLeTFA 250_rna.tfa Ln Sq set f [open 250_rna1l.tfa w] set i 1 foreach n $Ln { set s [string map [list "." ""] $Sq($n)] if {$s eq ""} { puts "$n vide" } set l [string length $s] if {$l%3} { puts "$n $l [expr {$l%3}]" } puts $f ">seqn$i" puts $f $s incr i #lappend Ls [string map [list "." ""] [set Sq($n)]] } close $f LitLeTFA 250_prot.tfa Lp Sp set f [open 250_prot1l.tfa w] set i 1 foreach p $Lp { set s [string map [list "." "-"] [set Sp($p)]] puts $f ">seq$i" puts $f $s incr i } close $f #EcritLeTfa 250_rna_deg.tfa $Ln $Ls exit } proc dumpstruct {} { global TabSF set n "PDB_1eov_A" set Lft [lsort -integer -index 1 [set TabSF(${n},STRUCT)]] puts "lgt [llength $Lft]" foreach f $Lft { DecortiqueUneFeature $f dg fg col sco no cs puts "$dg $fg $col" } return } proc eFch {str} { global TParser set type [lindex $TParser(S) end] switch $type { GBSeq_locus { set TParser(Id) $str lappend TParser(LId) $str } GBSeq_definition { set id [set TParser(Id)] set TParser($id,des) $str } GBSeq_taxonomy { set id [set TParser(Id)] set TParser($id,lineage) $str set phy [lindex [split $str ";"] 0] set TParser($id,phylum) $phy } GBSeq_organism { set id [set TParser(Id)] set TParser($id,organism) $str } } } proc eFed {name} { set ::TParser(S) [lrange $::TParser(S) 0 end-1] ;# pop } proc eFetchPeel {l} { global eFiLevel eFLval set eFiLevel 0 set eFLval [list] DoeFetchPeeling $l if {$eFLval != {} } { puts " : [join $Lval]" } unset eFLval eFiLevel return } proc eFetchProcessXML-SAX {Lxml} { global TParser unset -nocomplain TParse set p [expat -elementstartcommand eFst -characterdatacommand eFch -elementendcommand eFed ] if [catch {$p parse $Lxml} res] { puts "ERROR while parsing XML !" puts "$res" $p delete update return "" } $p delete update return [array get TParser] } proc eFetchProcessXML-tDOM {Lxml} { set Lfd [list taxonomy organism definition] set Id [dom parse $Lxml] set doc [$Id documentElement] foreach ns [$doc selectNodes //GBSeq] { set id [$ns selectNode //GBSeq_locus/string(.)] foreach fd $Lfd { set v [$ns selectnode //GBSeq_$fd/string(.)] set T($id,$fd) $v if {$fd eq taxonomy} { set lfd [lindex [split $lin ";"] 0] set T($id,phylum) $lfd } } } return [array get T] } proc eFetchREST {db Lid {what ""}} { # part of eUtils service from NCBI. # # the type and format of returning data depends on # the rettype (gb entry, cds sequence, ...) and # retmode value (asn.1, xml, txt ...) # rettype and retmode are defined in table # http://www.ncbi.nlm.nih.gov/books/NBK25499/table/chapter4.chapter4_table1/?report=objectonly if {$what eq ""} {set what "gb"} set url "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi" set db [string tolower $db] switch $db { "protein" { switch $what { "tiny" { set rettype fasta set retmode xml } "gb" { set rettype native #set rettype gb set retmode "" } "xml" { set rettype gb set retmode xml } default { set rettype "null" set retmode "null" } } } "nucleotide" { switch $what { "gb" { set rettype "gb" #set retmode "xml" set retmode "text" } "cds" { set rettype "fasta_cds_na" set retmode "text" } } } "taxonomy" { set rettype "null" set retmode "xml" } "pubmed" { set rettype "full" set retmode "xml" } "pmc" { set rettype "full" set retmode "null" } "genome" { set retmode "raw" #set rettype "gb" set rettype "" } } set paquets 200 set ni [expr {int([llength $Lid]/$paquets)+1}] for {set i 0} {$i < $ni} {incr i} { set d [expr {$i*$paquets}] set f [expr {($i+1)*$paquets-1}] set LidNow [lrange $Lid $d $f] if {$retmode ne ""} { set query [::http::formatQuery db $db id [join $LidNow ,] rettype $rettype retmode $retmode] } else { set query [::http::formatQuery db $db id [join $LidNow ,] rettype $rettype] } set ddb [HttpCopy $url "" $query] if {$ddb eq ""} { return "" } switch $db { "taxonomy" { lappend ret {*}[TaxonomyProcessXML $ddb $LidNow] } "pubmed" { lappend ret {*}[PubMedProcessXML $ddb $LidNow] } default { lappend ret $ddb } } } return $ret } proc eFetchSOAP {db Lid01} { # the eFetch SOAP service only returns XML data set xml [::WS::Client::DoRawCall eFetchSequenceService run_eFetch [list db $db id [join $Lid ,]]] return $xml } proc eFst {name atts} { global TParser lappend TParser(S) $name ;# push } proc eLinkProcess {Lxml what} { #puts "$Lxml" if {[catch {set RId [dom parse $Lxml]} Msg]} { puts "$Msg" puts "$Lxml" return ReDo } set doc [$RId documentElement] set Lid {} set Nerr [$doc selectNodes //eLinkResult/ERROR] if {$Nerr != {} } { set err [$Nerr selectNode string(.)] $RId delete if {[regexp {timed out} $err]} { return "ReDo" } else { return -1 } } set nid [lindex [$doc selectNodes //IdList/Id] 0] if {[$nid selectNode string(.)] == -1} { $RId delete return -1 } switch $what { "cross" { set Lnd [$doc selectNodes //LinkSetDb/Link/Id] } "ngb" { set lsd [lindex [$doc selectNodes //eLinkResult/LinkSet/LinkSetDb] 0] if {$lsd eq ""} { $RId delete return -1 } set Lnd [lrange [$lsd selectNodes ./Link/Id] 0 10] } } set Lid [list] foreach n $Lnd { lappend Lid [$n selectNode string(.)] } $RId delete update return $Lid } proc eLinkREST {dbfrom dbto Lid} { # Part of eUtils from NCBI # eLink only accepts GI numbers as input set url "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi" set Paquet 200 set Lres [list] set ni [expr {int([llength $Lid]/$Paquet)+1}] for {set i 0} {$i < $ni} {incr i} { set d [expr {$i*$Paquet}] set f [expr {($i+1)*$Paquet-1}] set Ln [lrange $Lid $d $f] set cmd "" if {$dbfrom eq $dbto} { set cmd ncheck } else { set cmd acheck } # cmd $cmd set query [::http::formatQuery dbfrom $dbfrom db $dbto id [join $Ln ,]] set xml [HttpCopy $url "" $query] if {$dbfrom eq $dbto} { set rpro [eLinkProcess $xml ngb] } else { set rpro [eLinkProcess $xml cross] } if {$rpro == "ReDo"} { set Lres [eLinkREST $dbfrom $dbto $Lid] break } if {$rpro == -1} { puts "\nError in eLink !" } else { lappend Lres {*}$rpro } } return $Lres } proc eSearchProcessXML {Lxml} { set rep [list] set RId [dom parse $Lxml] set doc [$RId documentElement] set Lnid [$doc selectNodes //Id] if {$Lnid eq ""} { set rep "" } else { foreach n $Lnid { lappend rep [$n selectNode string(.)] } } $RId delete update return $rep } proc eSearchREST {db Lid} { # Part of eUtils from NCBI # eSearch returns a possible UID corresponding to # the entered term # db = protein nucleotide pubmed taxonomy # # proceed ONE By ONE !! # Returns a list in the same order as input. # Item not found remain unchanged in the output list if {$db ni [list protein nucleotide pubmed taxonomy]} { puts "Bad Database !" return "" } set url "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi" set Lres [list] foreach id $Lid { # version 2.0 set query [::http::formatQuery db $db retmax 1000 term $id] set ddb [HttpCopy $url "" $query] lappend Lres {*}[eSearchProcessXML $ddb] } if {$db eq "pubmed" && $Lres=={}} { return "" } set Lret [list] foreach id $Lid rs $Lres { if {$rs eq ""} { lappend Lret $id } else { lappend Lret $rs } } return $Lret } proc eSummaryProcess {Lsum {what all}} { set Ls [dict get $Lsum DocSum] foreach p $Ls { set id [lindex $p 1] set Lit [lindex $p 3] lassign [lindex $Lit 0] tmp T($id,acc) lassign [lindex $Lit 1] tmp T($id,def) lassign [lindex $Lit 2] tmp T($id,crs) } if {$what eq "all"} { return [array get T] } else { return [array get T *$what] } } proc eSummaryProcessXML {Lxml} { array set T [list] #Espionne "\neSummary\n$Lxml" set RId [dom parse $Lxml] set doc [$RId documentElement] foreach nd [$doc selectNodes //DocSum] { foreach nc [$nd childNodes] { if {[$nc nodeName] eq "Id"} { set id [$nc selectNode string(.)] } else { set t [$nc getAttribute Name unk] set v [$nc selectNode string(.)] set T($id,$t) $v } foreach dbn {refseq genbank embl} { set T($id,$dbn) "" } if {[info exists T($id,Extra)]} { set Lr [split [set T($id,Extra)] "|"] foreach pfx {ref gb emb} dbn {refseq genbank embl} { set i [lsearch $Lr $pfx] if {$i != -1} { set seqid [lindex $Lr $i+1] set T($id,$dbn) $seqid } } } if {[set T($id,refseq)] eq "" && [info exists T($id,Caption)]} { set T($id,refseq) [set T($id,Caption)] } } } $RId delete update return [array get T] } proc eSummaryREST {db Lid {GetXml ""}} { # Part of eUtils from NCBI # # ==> WARNING !!!! # ==> eSummary only accepts GI numbers # # db = protein nucleotide pubmed taxonomy # # proceed by 200 IDs batches set url "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi" set Lres [list] set Paquet 200 set ni [expr {int([llength $Lid]/$Paquet)+1}] set LesXml {} for {set i 0} {$i < $ni} {incr i} { set d [expr {$i*$Paquet}] set f [expr {($i+1)*$Paquet-1}] # version 2.0 set query [::http::formatQuery db $db id [lrange $Lid $d $f] retmax 1000] set ddb [HttpCopy $url "" $query] if {$GetXml=="GetXml"} { lappend LesXml $ddb continue } lappend Lres {*}[eSummaryProcessXML $ddb] } if {$GetXml=="GetXml"} { return $LesXml } return $Lres } proc eSummarySOAP {db Lid} { # eSummary with db=protein only accepts GI numbers # proceed by 200 ids batches set Lres [list] set i 0 set lg [llength $Lid] while {$i < $lg} { set Ln [lrange $Lid $i $i+199] set ddb [::eUtilsService::run_eSummary $db "" [join $Ln ,] "" "" "" "" ""] lappend Lres {*}[eSummaryProcess $ddb acc] incr i 200 } return $Lres } proc ecrireListeIsoforme {FichierSortie data} { set fo [open "$FichierSortie" w] dict for {taxid g} $data { foreach sg $g { puts $fo [[lindex $sg 0] get id] } } close $fo } proc ecrireLogIsoforme {Log data} { set fl [open "$Log" w] dict for {taxid g} $data { if {$taxid ne "unknown"} { foreach sg $g { if {[llength $sg] > 1} { puts $fl "[[lindex $sg 0] get id] has following isoforms:" } foreach h [lreplace $sg 0 0] { puts $fl " [$h get id]" } } } } close $fl } proc ecrireRapportIsoforme {Rapport data} { set f [open "$Rapport" w] puts -nonewline $f {
    }
    	dict for {taxid g} $data {
    		puts $f "TaxId $taxid"
    		foreach sg $g {
    			set class ""
    			if {$taxid ne "unknown" && [llength $sg] > 1} {
    				set class "ref"
    			}
    			set i 0
    	#for {set i 0} {$i<[$h getNbBlocks]} {incr i}
    			foreach h $sg {
    				set shortid [$h getShortid]
    				puts -nonewline $f ""
    				for {set i 0} {$i<[$h getNbBlocks]} {incr i} {
    					puts $f "[format {%-20s} $shortid][string repeat " " [$h getOffset $i]][$h enleverTirets Subj $i]"
    					set shortid " |"
    				}
    				puts -nonewline $f ""
    				if {$taxid ne "unknown" && [llength $sg] > 1} {
    					set class "iso"
    				}
    			}
    		}
    	}
    	puts -nonewline $f {
    } close $f } proc eft {} { set Lid [list Q55C99 xp_570076 SYDC_HUMAN P13368 ZP_01623730.1 YP_003326263.1 XP_001267188.1] array set T [InfosFromRefSeq $Lid] parray T exit } proc emptyStr {args} { return "" } proc enattendant {} { set Fichier "[RepertoireDuGenome]/transcriptomique/ConeSpe/ListeRMAExp2J15Cond" foreach Ligne [LesLignesDuFichier $Fichier] { set GeneName [AffyAnnoMG430 $Ligne "Gene_Symbol"] Espionne "$Ligne $GeneName" } } proc encoursClassement {{TypeDistri area1e6bp} {NbSeq 0} {Biais 1}} { #1 signifie que l'on veut classer en fonction du biais #0 non if {$TypeDistri=="area1e6bp"} { set FichierDistributionDesSeq "[RepertoireDuGenome]/Localisation/area1e6bp_Distribution" set FichierDistributionDesGenes "[HumanGenomeDir]/Localisation/Gene_area1e6bp_Distribution" } elseif {$TypeDistri=="area1e7bp"} { set FichierDistributionDesSeq "[RepertoireDuGenome]/Localisation/area1e7bp_Distribution" set FichierDistributionDesGenes "[HumanGenomeDir]/Localisation/Gene_area1e7bp_Distribution" } elseif {$TypeDistri=="chr"} { set FichierDistributionDesSeq "[RepertoireDuGenome]/Localisation/chr_Distribution" set FichierDistributionDesGenes "[HumanGenomeDir]/Localisation/Gene_chr_Distribution" } elseif {$TypeDistri=="ctg"} { set FichierDistributionDesSeq "[RepertoireDuGenome]/Localisation/ctg_Distribution" set FichierDistributionDesGenes "[HumanGenomeDir]/Localisation/Gene_ctg_Distribution" } elseif {$TypeDistri=="cyto"} { set FichierDistributionDesSeq "[RepertoireDuGenome]/Localisation/cyto_Distribution" set FichierDistributionDesGenes "[HumanGenomeDir]/Localisation/Gene_cyto_Distribution" } set ListeClassee {} set NbSeqTotal 0 set NbGenesTotal 0 foreach Ligne [LesLignesDuFichier $FichierDistributionDesGenes] { if {$TypeDistri=="chr"} { scan $Ligne "%s %s %s %s %s %s %s %s %s" chro long seq1 seq2 seq3 seq4 gene1 gene2 gene3 if {$chro=="Chromosome" || $chro=="Total" || $chro=="Remaining"} {continue} set NbGenesTotal [expr [expr $gene1+$gene2+$gene3]+$NbGenesTotal] } } foreach Ligne [LesLignesDuFichier $FichierDistributionDesSeq] { if {$TypeDistri=="chr"} { scan $Ligne "%s %s %s %s %s %s %s %s %s" chro long seq1 seq2 seq3 seq4 gene1 gene2 gene3 if {$chro=="Chromosome" || $chro=="Total" || $chro=="Remaining"} {continue} set NbSeqTotal [expr [expr $seq1+$seq2+$seq3+$seq4]+$NbSeqTotal] } } #Espionne $NbSeqTotal #Espionne $NbGenesTotal foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s %s %s %s %s %s %s" chro long seq1 seq2 seq3 seq4 gene1 gene2 gene3 if {$chro=="Chromosome" || $chro=="Total" || $chro=="Remaining"} {continue} set NseqChro [expr $seq1+$seq2+$seq3+$seq4] set NgenesChro [expr $gene1+$gene2+$gene3] set BiaisChromo [expr round((100*$NseqChro*$NbGenesTotal)/($NbSeqTotal*$NgenesChro))] #Espionne "$chro:$BiaisChromo" set Somme [expr $NseqChro+$BiaisChromo] lappend ListeClassee "$chro\t$NseqChro\t$BiaisChromo\t$Somme" } set ListeClassee [lsort -decreasing -index 3 -integer $ListeClassee] #set ListeClassee [lrange $ListeClassee 0 2] set ListeClassee [join $ListeClassee "\n"] set Titres "Chromo NSeq Skew Skew+Nseq\n" set Classement "$Titres$ListeClassee" Sauve $Classement dans "[GscopeDatabaseDir DDetAffy]/Classements/NbSeqPlusBiaisParChromo" } proc ensGtpUcscMouse {{Qui ""} {Quoi ""}} { global ensGtpUcscMouse if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists ensGtpUcscMouse($Qui,$Quoi)]} {return $ensGtpUcscMouse($Qui,$Quoi)} if {[info exists ensGtpUcscMouse("EstCharge")]} {return ""} set ensGtpUcscMouse("EstCharge") 1 set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/ensGtp.txt" set LesLignes [LesLignesDuFichier $Fichier] set LesHeaders [list EnsGene EnsTran EnsProt] set ensGtpUcscMouse(ListOf,headers) $LesHeaders foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set EnsGene [lindex $LesMots 0] set EnsTran [lindex $LesMots 1] set EnsProt [lindex $LesMots 2] lappend ensGtpUcscMouse(ListOf,EnsGene) $EnsGene lappend ensGtpUcscMouse($EnsGene,EnsTran) $EnsTran lappend ensGtpUcscMouse($EnsTran,EnsGene) $EnsGene lappend ensGtpUcscMouse($EnsGene,EnsProt) $EnsProt lappend ensGtpUcscMouse($EnsProt,EnsGene) $EnsGene lappend ensGtpUcscMouse($EnsTran,EnsProt) $EnsProt lappend ensGtpUcscMouse($EnsProt,EnsTran) $EnsTran } return [ensGtpUcscMouse $Qui $Quoi] } proc entryLimit {entry traceProc {init ""}} { if [string match {} [set var [$entry cget -textvariable]]] { return -code error "-textvariable not set for entry \"$entry\"" } if {[string compare $traceProc {}]} { ## TextVars are always considered global uplevel \#0 [list set $var $init] uplevel \#0 [list trace variable $var w $traceProc] if {[catch {uplevel \#0 [list set $var $init]} err]} { ## If this errors out, the $init value was bad, or ## something was wrong with the traceProc return -code error "an error was received setting the initial value of \"$var\" to \"$init\". Make sure the value is valid and the traceProc is functional:\n$err" } else { ## Do you really want to delete the trace when ## destroying the entry? #bind $entry [list + trace vdelete $var w $traceProc] return } } foreach p [uplevel \#0 [list trace vinfo $var]] { if {[string match w [lindex $p 0]]} { uplevel \#0 trace vdelete [list $var] $p } } } proc essai4994 {} { set RepEntree "[RepertoireDuGenome]/protemblRecupere" set FichierProtEmblRecupere "$RepEntree/EVI04994" set Nom [file tail $FichierProtEmblRecupere] puts $Nom set FichierProtTfa "[GscopeFile $Nom prottfaRecupere]" set FichierNucTfa "[GscopeFile $Nom nuctfa]" if {[FileExists $FichierProtTfa]} { continue } set LesLignesEMBL [LesLignesDuFichier $FichierProtEmblRecupere] Espionne $LesLignesEMBL } proc essai_AjouteLesDescriptions {FichierDomainesSpec FichierPFA100avecDes} { foreach Ligne [LesLignesDuFichier $FichierPFA100avecDes] { if {$Ligne==""} {continue} set Nom [lindex $Ligne 0] set PFAM [lindex $Ligne 2] set Des [lindex $Ligne 3] set DE($PFAM) $Des } foreach Ligne [LesLignesDuFichier $FichierDomainesSpec] { if {$Ligne==""} {continue} set PFAM [lindex $Ligne 0] if {[info exists DE($PFAM)]} {lappend L "$PFAM\t$DE($PFAM)"} } Espionne [llength $L] set L [lsort -index 1 -dictionary $L] SauveLesLignes $L dans "[RepertoireDuGenome]/fiches/DomainesSpecifAvecDes" } proc essai_SelectionFichierRequete {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set PFAM [lindex $Ligne 0] set NbSupp [lindex $Ligne 1] set NbPABs [lindex $Ligne 2] set S [expr $NbSupp + $NbPABs] set Percent [expr ($NbPABs*1.0)/$S] if {$NbSupp<$NbPABs && $Percent>0.5} {lappend LesPFAMSpecifiques $Ligne} } Espionne [llength $LesPFAMSpecifiques] set L [lsort -index 2 -integer $LesPFAMSpecifiques] SauveLesLignes $L dans "[RepertoireDuGenome]/fiches/Domaines-essai" } proc essaiarray {} { set liste {100 100 98 95 98 4 100 1 5 4} foreach elmt $liste { if {[info exists DejaVu($elmt)]} { incr DejaVu($elmt) continue } set DejaVu($elmt) 1 } array get DejaVu } proc essaidecortique {Texte} { set LesElmt {} set i 0 set oldi 0 #set i [string first "///" $Texte] #Espionne "++$i" while {[set i [string first "///" $Texte]]} { } } proc essaidix {} { set A 0; set B 0; set C 0; set D 0; set E 0; set G 0 foreach F [glob -nocomplain "[RepertoireDuGenome]/protemblRecupere/EVI*"] {incr A} foreach F [glob -nocomplain "[RepertoireDuGenome]/prottfaRecupere/EVI*"] {incr B} foreach F [glob -nocomplain "[RepertoireDuGenome]/protembl/EVI*"] {incr C} foreach F [glob -nocomplain "[RepertoireDuGenome]/prottfaBEST/EVI*"] {incr D} foreach F [glob -nocomplain "[RepertoireDuGenome]/prottfaBEST2/EVI*"] {incr E} foreach F [glob -nocomplain "[RepertoireDuGenome]/prottfa/EVI*"] {incr G} puts "A= $A"; puts "B= $B"; puts "C= $C"; puts "D= $D"; puts "E= $E"; puts "G= $G" } proc essaireplace {} { set L [list a b c] Espionne $L set Lnew [lreplace $L 1 1 "toto"] Espionne $Lnew } proc essaitfarecupe {fichier NomSeq} { RecupereUnTFA $fichier $NomSeq os seq Espionne $fichier Espionne $NomSeq Espionne "os: $os" Espionne "seq: $seq" } proc essaitoto {} { set Liste [lrange [ListeDesPABs] 1164 end] set Rep "[RepertoireDuGenome]/mrnatfa_Homo_sapiens" foreach PAB $Liste { set File "$Rep/$PAB" if {[file exists $File]} { file copy -force $File "[RepertoireDuGenome]/Jumeaux/NewmRNAtfa" } } return "" } proc essaivingt {{Liste ""}} { set pls 0; set seul 0; set recupere 0 if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } foreach Nom $Liste { set FichierProtEmblun "[GscopeFile $Nom protembl]_1" set FichierProtEmbldeux "[GscopeFile $Nom protembl]_2" set FichierProtEmblRecupere "[GscopeFile $Nom protemblRecupere]" if {[file exists $FichierProtEmblun] && [file exists $FichierProtEmbldeux]} {incr pls} if {[file exists $FichierProtEmblun] && ![file exists $FichierProtEmbldeux]} {incr seul} if {[file exists $FichierProtEmblRecupere]} {incr recupere} } puts "pls $pls" puts "seul $seul" puts "recupere $recupere" } proc euka {} { set Ll [LesLignesDuFichier euka.txt] foreach l $Ll { set Lv [split $l \t] set i 0 foreach v $Lv { lappend T($i) $v incr i } } foreach k [lsort -integer [array names T]] { puts "$k [llength [lsort -unique $T($k)]]" if {[lsearch $T($k) "*Scaffold*"] != -1} { puts "[lsort -unique $T($k)]" } } puts "" foreach n $T(0) t $T(1) s $T(18) { if {! [regexp -nocase "complete" $s]} { continue } lappend Lcomp [list $n $t $s] incr nCmp } puts "nCmp $nCmp" exit } proc extm {} { DecortiqueUnMSF BB11038.msf Ln Sq foreach n $Ln { set s $Sq($n) lappend Ls [string range $s 370 600] } EcritLeTfa court.tfa $Ln $Ls exit } proc extraitHomologuesMS2PH {} { global OuiOuNonToujoursParDefaut ; set OuiOuNonToujoursParDefaut 1 set repBlast "[RepertoireDuGenome]/blastp5000" set ficOut "listeHomol2" set lHomol "" set lPab [ListeDesPABs] foreach pab $lPab { puts $pab set bfile [file join $repBlast $pab] set LBlast [LesLignesDuFichier $bfile] #DecortiqueBlast $LBlast 0.001 5000 Query lBanqueId lAccess lDE lProfil lPN "LongDescription" DecortiqueBlast $LBlast 0.001 5000 Query lBanqueId lAccess foreach a [lrange $lAccess 0 end-1] b [lrange $lBanqueId 0 end-1] { if {![regexp {^PDB:} $b] && ![regexp {^VARSPLIC:} $b]} { lappend lHomol $a } } set lHomol [lsort -uniq $lHomol] } EspionneL $lHomol set f [open $ficOut w] foreach homol $lHomol { puts $f $homol } close $f return 1 } proc factorial1 {n} { expr {$n>1?$n*[factorial1 [expr {$n-1}]]:1} } proc factorial2 {n} { # n! = sqrt(2*pi)*n^(n+1/2)*e^-n return [expr {sqrt(2.*3.1415926)*pow($n,($n+0.5))*exp(-1.*$n)}] } proc fballs {} { global TFB LoadTkAndPackages # parametres set TFB(step) 5 set TFB(lenFourmi) 30 set TFB(widFourmi) 20 set TFB(headFourmi) 10 set TFB(colFourmi) white set TFB(nFourmis) 10 set TFB(rad) 10 set TFB(nRouges) 30 set TFB(nJaunes) 30 set TFB(nBleues) 20 set TFB(dimX) 1200 set TFB(dimY) 1000 set TFB(mur) 1 Plateau InitFourmis StartFourmis return } proc fillResAgentsDB {} { global dbR AlATables LesDefsAlA package require sqlite3 file delete res.sql set dbR [FabriqueDeTables $AlATables "" res.sql] $dbR eval {begin transaction} set Lout [lsort [glob /home/moumou/Agents/jobs/out*]] puts "out files [llength $Lout]" foreach f [lrange $Lout 0 end] { set Ll [LesLignesDuFichier $f] set Lres [lindex $Ll end] ResAnaBalAgents tmp tmp $Lres "" } $dbR eval {commit} $dbR close exit } proc finLaTrace {} { global ListeProc set ListeProc [lsort -unique $ListeProc] set f [open "touteslesprocs.tcl" w] foreach e $ListeProc { set a [info args $e] set b [info body $e] set sar "" foreach g $a { if {[info default $e $g Def]} { if {$Def == ""} { set Def "\"\"" } append sar "{$g $Def} " } else { append sar "$g " } } set sar [string trim $sar] puts $f $b puts $f "\}" puts $f "" } close $f return } proc firstef {Nom} { set FichierFEF "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_promoter/$Nom.firstef" set LeTexte {} if {[file exists $FichierFEF]} { lappend Letexte "" lappend LeTexte " **********************************************" lappend LeTexte " Promoter predicted from human mRNA full length:" lappend LeTexte "" #set ContenuFEF [ContenuDuFichier $FichierFEF] foreach Ligne [LesLignesDuFichier $FichierFEF] { lappend LeTexte " $Ligne" } lappend LeTexte "" } EspionneL $LeTexte } proc forceAlpha {name el op} { global $name ${name}_alpha if [string comp {} $el] { set old ${name}_alpha\($el) set name $name\($el) } else { set old ${name}_alpha } if ![regexp {^[a-zA-Z]*$} [set $name]] { set $name [set $old] bell; return } set $old [set $name] } proc forceInt {name el op} { global $name ${name}_int if [string comp {} $el] { set old ${name}_int\($el) set name $name\($el) } else { set old ${name}_int } if ![regexp {^[-+]?[0-9]*$} [set $name]] { set $name [set $old] bell; return } set $old [set $name] } proc forceLen {len name el op} { global $name ${name}_len if [string comp $el {}] { set old ${name}_len\($el) set name $name\($el) } else { set old ${name}_len } if {[string length [set $name]] > $len} { set $name [set $old] bell; return } set $old [set $name] } proc forceReal {name el op} { global $name ${name}_real if [string comp {} $el] { set old ${name}_real\($el) set name $name\($el) } else { set old ${name}_real } if ![regexp {^[-+]?[0-9]*\.?[0-9]*([0-9]\.?e[-+]?[0-9]*)?$} [set $name]] { set $name [set $old] bell; return } set $old [set $name] } proc forceRegexp {regexp name el op} { global $name ${name}_regexp if [string comp {} $el] { set old ${name}_regexp\($el) set name $name\($el) } else { set old ${name}_regexp } if ![regexp $regexp [set $name]] { set $name [set $old] bell; return } set $old [set $name] } proc forceValue {default name el op} { global $name if [string comp {} $el] { set name $name\($el) } if ![info exists $name] { set $name $default } } proc formatFasta {description sequence {lineWidth 50}} { if { ! [regexp {^>} $description] } { set description ">$description" } lappend tfa $description # au cas ou sequence est une liste set sequence [join $sequence ""] while {[string length $sequence] != 0} { lappend tfa [string range $sequence 0 [expr $lineWidth - 1]] set sequence [string replace $sequence 0 [expr $lineWidth - 1]] } return [join $tfa "\n"] } proc formatQualFasta {{description ""} {lQual ""} {lineWidth 50}} { if { ! [regexp {^>} $description] } { set description ">$description" } lappend tfa $description # au cas ou quality est une liste de listes set lQual [join $lQual " "] while {[llength $lQual] != 0} { lappend line [lindex $lQual 0] set lQual [lreplace $lQual 0 0] if {[string length [join $line]] >= $lineWidth || [llength $lQual] == 0} { if {[string length [join $line]] > $lineWidth} { set lQual [linsert $lQual 0 [lindex $line end]] set line [lreplace $line end end] } lappend tfa [join $line] lset line {} } } return [join $tfa "\n"] } proc frat {} { global TabSF Sequences Cons set Cons(PDB) 1 set Cons(Method) Threshold set Cons(Title) "" set Cons(OnlyGlobal) 1 set Cons(Entry) "" set Cons(ComboSel) "" LanceCalculConservation SauveConservation foreach k [array names TabSF "*,Cons*"] { #puts "$k" set n [lindex [split $k ,] 0] foreach f $TabSF($k) { DecortiqueUneFeature $f d f col sc nt if {$nt eq "IdenGlob"} { puts "[string index $Sequences($n) $d] $d $f $col $nt" } } } exit } proc gamma {x} { if {$x <= 0} { error "Invalid input" $x } # Split the function domain into three intervals: # (0, 0.001), [0.001, 12), and (12, infinity) ########################################################################### # First interval: (0, 0.001) # # For small x, 1/Gamma(x) has power series x + gamma x^2 - ... # So in this range, 1/Gamma(x) = x + gamma x^2 with error on the order of x^3. # The relative error over this interval is less than 6e-7. # Euler's gamma constant set gamma 0.577215664901532860606512090 if {$x < 0.001} { return [expr {1.0/($x*(1.0 + $gamma*$x))}] } ########################################################################### # Second interval: [0.001, 12) if {$x < 12.0} { # The algorithm directly approximates gamma over (1,2) and uses # reduction identities to reduce other arguments to this interval. set y $x set n 0 set arg_was_less_than_one [expr {$y < 1.0}] # Add or subtract integers as necessary to bring y into (1,2) # Will correct for this below if {$arg_was_less_than_one} { set y [expr {$y + 1.0}] } else { # will use n later set n [expr {entier($y) - 1}] set y [expr {$y - $n}] } # numerator coefficients for approximation over the interval (1,2) set p [list -1.71618513886549492533811E+0 2.47656508055759199108314E+1 -3.79804256470945635097577E+2 6.29331155312818442661052E+2 8.66966202790413211295064E+2 -3.14512729688483675254357E+4 -3.61444134186911729807069E+4 6.64561438202405440627855E+4 ] # denominator coefficients for approximation over the interval (1,2) set q [list -3.08402300119738975254353E+1 3.15350626979604161529144E+2 -1.01515636749021914166146E+3 -3.10777167157231109440444E+3 2.25381184209801510330112E+4 4.75584627752788110767815E+3 -1.34659959864969306392456E+5 -1.15132259675553483497211E+5 ] set num 0.0 set den 1.0 set z [expr {$y - 1}] for {set i 0} {$i < 8} {incr i} { set num [expr {($num + [lindex $p $i])*$z}] set den [expr {$den*$z + [lindex $q $i]}] } set result [expr {$num/$den + 1.0}] # Apply correction if argument was not initially in (1,2) if {$arg_was_less_than_one} { # Use identity gamma(z) = gamma(z+1)/z # The variable "result" now holds gamma of the original y + 1 # Thus we use y-1 to get back the orginal y. set result [expr {$result / ($y-1.0)}] } else { # Use the identity gamma(z+n) = z*(z+1)* ... *(z+n-1)*gamma(z) for {set i 0} {$i < $n} {incr i} { set result [expr {$result * $y}] set y [expr {$y + 1}] } } return $result } ########################################################################### # Third interval: [12, infinity) if {$x > 171.624} { # Correct answer too large to display. return 1.0/0 # float infinity } return [expr {exp([log_gamma $x])}] } proc gapQualityValues {seq qual} { for {set i 0} {$i < [string length $seq]} {incr i} { if {[string index $seq $i] eq "*"} { set qual [linsert $qual $i "*"] } } if {[string length $seq] != [llength $qual]} { puts "ERROR: gapped sequence length differs from gapped quality values length" exit 1 } return $qual } proc gcd {u v} { expr {$u? [gcd [expr $v%$u] $u]: $v} } proc generateXMLmacsim {aContig} { package require tdom upvar $aContig contig set xmlHeader "\n\n" # Create XML document and his root element 'macsim' dom createDocument macsim XMLdoc # Get the root element $XMLdoc documentElement root # Create the commands to build up the XML document dom createNodeCmd elementNode alignment dom createNodeCmd elementNode aln-name dom createNodeCmd elementNode sequence dom createNodeCmd elementNode seq-name dom createNodeCmd elementNode seq-info dom createNodeCmd elementNode ftable dom createNodeCmd elementNode fitem dom createNodeCmd elementNode ftype dom createNodeCmd elementNode fstart dom createNodeCmd elementNode fstop dom createNodeCmd elementNode fcolor dom createNodeCmd elementNode fscore dom createNodeCmd elementNode fnote dom createNodeCmd elementNode length dom createNodeCmd elementNode seq-data dom createNodeCmd elementNode sense dom createNodeCmd textNode t # Build the document $root appendFromScript { alignment { aln-name { t "$contig(alignmentName)_$contig(contigIdx)" } sequence {seq-type DNA} { seq-name { t $contig(name) } seq-info { array set feat {} array set feat [consensusQualityColoring $contig(consensus) $contig(basesQuality)] if {$feat(count) != 0} { ftable { for {set j 1} {$j <= $feat(count)} {incr j} { fitem { ftype { t $feat($j,ftype) } fstart { t $feat($j,fstart) } fstop { t $feat($j,fstop) } fcolor { t $feat($j,fcolor) } fscore { t $feat($j,fscore) } fnote { t "Phred quality: $feat($j,fscore)" } } } } } length { t $contig(length) } sense { if {$contig(strand) eq "U"} { t 1 } else { t -1 } } } seq-data { t $contig(consensus) } } foreach readIdx $contig(index) { sequence {seq-type DNA} { seq-name { t $contig($readIdx,name) } seq-info { ftable { fitem { ftype { t quality } fstart { t $contig($readIdx,qualityStart) } fstop { t $contig($readIdx,qualityEnd) } fcolor { # Orange t 1 } } fitem { ftype { t alignment } fstart { t $contig($readIdx,alignmentStart) } fstop { t $contig($readIdx,alignmentEnd) } fcolor { # Forest Green t 0 } } } length { t $contig($readIdx,length) } sense { if {$contig($readIdx,strand) eq "U"} { t 1 } else { t -1 } } } seq-data { t $contig($readIdx,sequence) } } } } } return "$xmlHeader[$XMLdoc asXML]" } proc gestionOrthologues {} { set Alicia "yes" puts $Alicia foreach Fichier [glob -nocomplain "/home/depulp2/orthoinspector/orthologuesMiniProteome/*"] { set Id [file tail $Fichier] regsub {_fm5$} $Id "" Id set Nom [LesPABsAvecInfo "Id: $Id"] if {$Nom == ""} {continue} Espionne $Nom lappend LesOk $Nom file copy $Fichier "[RepertoireDuGenome]/orthologue/$Nom" } return $LesOk } proc gestionOrthologues2 {DirSource} { set Alicia "yes" puts $Alicia foreach Fichier [glob -nocomplain "$DirSource/*"] { set Id [file tail $Fichier] regsub {_fm5$} $Id "" Id set Nom [LesPABsAvecInfo "Id: $Id"] if {$Nom == ""} {continue} Espionne $Nom lappend LesOk $Nom file copy $Fichier "$DirSource/$Nom" } return $LesOk } proc getContigAlignment {aAce contig {complement 0}} { upvar $aAce ace array set align {index {} consensus ""} set align(consensus) $ace($contig,name) lappend align(index) $ace($contig,name) set align($ace($contig,name)) "[string repeat "-" $ace($contig,padding)]$ace($contig,consensus)" if {$ace($contig,strand) eq "C"} { set align($ace($contig,name),complemented) 1 } else { set align($ace($contig,name),complemented) 0 } set align($ace($contig,name),complemented) 0 set maxLength [string length $align($ace($contig,name))] foreach read $ace($contig,index) { lappend align(index) $ace($contig,$read,name) set align($ace($contig,$read,name)) "[string repeat "-" $ace($contig,$read,padding)]$ace($contig,$read,sequence)" if {$ace($contig,$read,strand) eq "C"} { set align($ace($contig,$read,name),complemented) 1 } else { set align($ace($contig,$read,name),complemented) 0 } array unset posIndex array set posIndex [alnPos2SeqPosIndex $ace($contig,$read,sequence)] set align($ace($contig,$read,name),aligned) [list $posIndex($ace($contig,$read,alignmentStart)) $posIndex($ace($contig,$read,alignmentEnd))] set length [string length $align($ace($contig,$read,name))] if {$length > $maxLength} {set maxLength $length} } # Rajoute le gaps de fin foreach access $align(index) { set aRajouter [expr $maxLength - [string length $align($access)]] set align($access) "$align($access)[string repeat "-" $aRajouter]" } # Complemente tout le contig si besoin if {$complement} { foreach access $align(index) { set align($access) [NucToReverseAndComplementNuc $align($access)] set align($access,complemented) [expr ! $align($access,complemented)] if {$access ne $align(consensus)} { set length [string length [regsub -all -nocase {[^a-z]} $align($access)]] set previousAlignStart [lindex $align($access,aligned) 0] set previousAlignEnd [lindex $align($access,aligned) 1] set align($access,aligned) [list [expr $length - $previousAlignEnd + 1] [expr $length - $previousAlignStart + 1]] } } } return [array get align] } proc getGraphHubString {g n {reset 0}} { if {$reset} { foreach n [$g nodes] { $g node unset $n "passed" } } if {![$g node keyexists $n "passed"]} { $g node set $n "passed" 1 set neighbours {} foreach tmp [$g nodes -adj $n] { if {!([$g node keyexists $n "stopRecursion"] && [$g node keyexists $tmp "stopRecursion"])} { set neighbours [concat $neighbours [getGraphHubString $g $tmp 0]] } } return [concat $n $neighbours] } return {} } proc getGroupMeanFeatures {lSequenceNodes {type REGION} {minHaving 0.6}} { # Vérification que ce sont bien les séquences d'un même groupe foreach n $lSequenceNodes { set seqGroup [string trim [$n selectNodes "string(.//group\[1\])"]] if {[info exists group]} { if {$seqGroup != $group} { puts "Sequences are not from the same group" exit 1 } } else { set group $seqGroup } } # Extrait les features et les convertit en coordonées d'alignement set features {} foreach n $lSequenceNodes { set seq [string trim [$n selectNodes "string(seq-data)"]] foreach item [$n selectNodes ".//fitem\[ftype=\"$type\"\]"] { set ft {} # lappend ft [seqPos2AlnPos $seq [string trim [$item selectNodes "string(fstart)"]]] # lappend ft [seqPos2AlnPos $seq [string trim [$item selectNodes "string(fstop)"]]] set fStart [seqPos2AlnPos $seq [string trim [$item selectNodes "string(fstart)"]]] set fStop [seqPos2AlnPos $seq [string trim [$item selectNodes "string(fstop)"]]] if {$fStart > $fStop} { set tmp $fStart set fStart $fStop set fStop $tmp } if {$fStart < 1} {continue} lappend ft $fStart lappend ft $fStop lappend ft [string trim [$item selectNodes "string(fnote)"]] lappend features $ft } } # Regroupe les features qui se chevauchent set fGroups {} foreach f $features { set isAdded 0 set breakLoop 0 for {set i 0} {!$breakLoop && $i < [llength $fGroups]} {incr i} { foreach f2 [lindex $fGroups $i] { if {[areRangeOverlapping [lrange $f 0 1] [lrange $f2 0 1]]} { lset fGroups $i [concat [lindex $fGroups $i] [list $f]] set isAdded 1 set breakLoop 1 break } } } if {!$isAdded} {lappend fGroups [list $f]} } # Calcule un feature consensus pour chaque groupe # sauf si pas assez de sequences forment ce groupe set mFeatures {} foreach g $fGroups { if {[expr double([llength $g]) / [llength $lSequenceNodes]] < $minHaving} {continue} set allStarts {} set allStops {} set note "" foreach f $g { lappend allStarts [lindex $f 0] lappend allStops [lindex $f 1] if {![regexp -nocase {^PROP_(.*)\s+from \w+$} [lindex $f 2] regMatch tmpNote]} {set tmpNote [lindex $f 2]} if {$note eq ""} { set note $tmpNote } elseif {$tmpNote ne $note} { puts "Some of the overlapping features are not the same" exit 1 } } lappend mFeatures [list [consensusPosition $allStarts] [consensusPosition $allStops] $note] } set mFeatures [lsort -integer -index 0 $mFeatures] return $mFeatures } proc getHubs {lProteinId {minCombinedScore 700} {fuseHubs 1}} { set lProteinId [lsort -unique $lProteinId] array set interact {} set count 0 set total [llength $lProteinId] set procName [lindex [info level 0] 0] foreach proteinId $lProteinId { set interact($proteinId) [list $proteinId] set sql "SELECT protein_id_b, combined_score FROM network.protein_protein_links WHERE protein_id_a = $proteinId AND combined_score >= $minCombinedScore" incr count Espionne "$procName: Retrieving $proteinId... ($count/$total)" foreach {proteinIdB score} [SqlExec $sql "GetList"] { if {[lsearch -exact $lProteinId $proteinIdB] != -1} { lappend interact($proteinId) $proteinIdB } } } set hasChanged $fuseHubs while {$hasChanged} { set hasChanged 0 foreach key [array names interact] { if {![info exists interact($key)]} {continue} foreach proteinId $interact($key) { if {$proteinId ne $key} { foreach key2 [array names interact] { if {![info exists interact($key2)]} {continue} if {$key2 ne $key && [lsearch -exact $interact($key2) $proteinId] != -1} { set interact($key) [lsort -unique [concat $interact($key) $interact($key2)]] unset interact($key2) set hasChanged 1 #break } } } } #if {$hasChanged} {break} } } set hubs {} foreach key [array names interact] {lappend hubs $interact($key)} if {[llength $lProteinId] != [llength [join $hubs]]} { error "IN [llength $lProteinId] != OUT [llength [join $hubs]]" } return [lsort -decreasing -command "lsortBySublistsLengths" $hubs] } proc getHubsWithLevel {lProteinId {depth 1} {minCombinedScore 700}} { set lProteinId [lsort -unique $lProteinId] set hubs {} foreach proteinId $lProteinId { set tmp {} foreach interact [getInteracts $proteinId $depth $minCombinedScore] { if {[lsearch -exact $lProteinId $interact] != -1} {lappend tmp $interact} } lappend hubs [lsort -unique [concat $proteinId $tmp]] } if {[llength $lProteinId] != [llength $hubs]} { error "IN [llength $lProteinId] != OUT [llength $hubs]" } return [lsort -unique -decreasing -command "lsortBySublistsLengths" $hubs] } proc getHyperconnectedHubs {lProteinId {depth 1} {minCombinedScore 700} {minConnections 3}} { package require struct::graph set g [::struct::graph] set lProteinId [lsort -unique $lProteinId] foreach proteinId $lProteinId { if {![$g node exists $proteinId]} { $g node insert $proteinId } #foreach interact [getInteractsWithoutTextMining $proteinId $depth $minCombinedScore] {} foreach interact [getInteractsWithoutTextMining $proteinId 1 $minCombinedScore] { if {![$g node exists $interact]} { $g node insert $interact } if {[lsearch -exact [$g nodes -adj $proteinId] $interact] == -1} { $g arc insert $proteinId $interact $g arc insert $interact $proteinId } } } # Vire les noeuds qui ne sont pas en entrée Espionne "Removing nodes not in input dataset..." foreach n [$g nodes] { if {[lsearch -exact $lProteinId $n] == -1} { $g node delete $n } } # Tag les noeuds qui n'ont pas assez de connexions Espionne "Taging nodes whithout enough connections..." foreach n [$g nodes] { if {[llength [$g nodes -adj $n]] < $minConnections} { $g node set $n "stopRecursion" 1 } } # Recherche les hubs set hubs {} foreach n [$g nodes] { set hub [getGraphHubString $g $n] if {[llength $hub] != 0} { lappend hubs [lsort $hub] } } $g destroy if {[llength $lProteinId] != [llength [join $hubs]]} { error "IN [llength $lProteinId] != OUT [llength [join $hubs]]" } return [lsort -decreasing -command "lsortBySublistsLengths" $hubs] } proc getInteracts {lProteinId depth {minCombinedScore 700}} { global GAGNIERE_DEBUG if {$depth <= 0} {return {}} set lProteinId [lsort -unique $lProteinId] set count 0 set total [llength $lProteinId] set procName [lindex [info level 0] 0] set fromProcName [lindex [info level -1] 0] set interacts {} foreach proteinId $lProteinId { set sql "SELECT protein_id_b, combined_score FROM network.protein_protein_links WHERE protein_id_a = $proteinId AND combined_score >= $minCombinedScore" incr count if {[info exists GAGNIERE_DEBUG] && $GAGNIERE_DEBUG} { Espionne "$procName (From $fromProcName Depth$depth): Retrieving $proteinId... ($count/$total)" } foreach {proteinIdB score} [SqlExec $sql "GetList"] { lappend interacts $proteinIdB } } set interacts [lsort -unique [concat $interacts [getInteracts $interacts [expr $depth - 1] $minCombinedScore]]] return $interacts } proc getInteractsFromStringGraph {g lProteinId {depth 1}} { global GAGNIERE_DEBUG if {$depth < 1} {return {}} set lProteinId [lsort -unique $lProteinId] set count 0 set total [llength $lProteinId] set procName [lindex [info level 0] 0] set fromProcName [lindex [info level -1] 0] set interacts {} foreach proteinId $lProteinId { incr count if {[info exists GAGNIERE_DEBUG] && $GAGNIERE_DEBUG == 2} { Espionne "$procName (From $fromProcName Depth$depth): Retrieving $proteinId... ($count/$total)" } set interacts [lsort -unique [concat $interacts [$g nodes -adj $proteinId]]] } set interacts [lsort -unique [concat $interacts [getInteractsFromStringGraph $g $interacts [expr $depth - 1]]]] return $interacts } proc getListAccGpFromMacsims {ficMacsims} { set lxml [LesLignesDuFichier $ficMacsims] set lAcc "" foreach lg $lxml { if {[regexp {^} $lg]} { set acc [string range $lg [expr [string first ">" $lg] + 1] [expr [string last "<" $lg] -1]] } elseif {[regexp {^} $lg]} { set gp [string range $lg [expr [string first ">" $lg] + 1] [expr [string last "<" $lg] -1]] lappend lAcc ${acc}_gp$gp } } return $lAcc } proc getMacsimsInf {filename ConcatPfam {option ""}} { #Espionne "getMacsimsInf" #Espionne "ConcatPfam: $ConcatPfam" set directory [RepertoireDuGenome] #liste des infos a recupere dans le fichier macsimXML #set infoParse {"ConcatDomain" "ConcatPfam" "ConcatStruct" "ConcatKoanno"} set infoParse $ConcatPfam if {$ConcatPfam == "ConcatDomPf"} { set infoParse {"ConcatPfam" "ConcatDomain"} } #Espionne "infoParse $infoParse" set filetmp {} set pdbList {} #lappend filetmp "Annotation Macsim" if { [file exists "[RepertoireDuGenome]/macsimXml/$filename.aj"]} { set fileMacsim "[RepertoireDuGenome]/macsimXml/$filename.aj" } else { set fileMacsim "[RepertoireDuGenome]/macsimXml/$filename" } if {$ConcatPfam=="pdb"} { if { [file exists "[RepertoireDuGenome]/macsimXml/$filename.aj"]} { set annotation [FromMacsims "$fileMacsim" "$filename" "SeqData"] set SeqInt [split $annotation ""] } else { set annotation [FromMacsims "$fileMacsim" "$filename" "SeqData"] set SeqInt [split $annotation ""] } #recuperation des pdb set ListProt [FromMacsims "$fileMacsim" "ListOf" "Names"] foreach l $ListProt { if {[regexp {^[1-9][A-Z0-9]{3}_[A-Z]} $l]} { lappend pdbList $l } } #parcours la liste des PDBs foreach lpdb $pdbList { set ty 0 if { [file exists "[RepertoireDuGenome]/macsimXml/$filename.aj"]} { set annotation [FromMacsims "$fileMacsim" "$lpdb" "SeqData"] set SeqPdb [split [string trim $annotation] ""] } else { set annotation [FromMacsims "$fileMacsim" "$lpdb" "SeqData"] set SeqPdb [split [string trim $annotation] ""] } #creation d'un pocedure pour calculer le recouvrement entre deux sequences. #recouvrement position de debut et de fin du pbd par rapport ¨¤ une sequene cible (dan l'alignement) set recouvrement [RecouvrementDesSequences $SeqInt $SeqPdb] set position [split $recouvrement "/"] set deb [lindex $position 0] set fin [lindex $position 1] #Espionne "PDB: $lpdb" #Espionne "deb; $deb" #Espionne "fin: $fin" if {$option=="filtre"} { if {$filetmp==""} {lappend filetmp " $lpdb;$deb;$fin"} set i 0 set indice -1 #Espionne "filetmp: [llength $filetmp]" set listeIndice {} foreach li $filetmp { #Espionne "i: $i" set position [split $li ";"] set debA [lindex $position 1] set finA [lindex $position 2] Espionne "LI: $li" #Espionne "debA: $debA" #Espionne "finA: $finA" if {$deb<=$debA && $fin>=$finA} { #Espionne "on retire $li" lappend listeIndice $i set indice -2 } elseif {$deb>=$debA && $fin<=$finA} { #Espionne "on fait rien avec $lpdb" set indice -2 } else { #Espionne "-1 On ajoute la pdb $lpdb" } incr i } if {$listeIndice!=""} { foreach l $listeIndice { set filetmp [lreplace $filetmp $l $l " $lpdb;$deb;$fin"] } } elseif {$indice==-1} { lappend filetmp " $lpdb;$deb;$fin" } } else { lappend filetmp " $lpdb;$deb;$fin" } incr ty if {$ty==2} {exit} } #lsort vire les doublons... set filetmp [lsort -unique $filetmp] } else { foreach Iparse $infoParse { #Espionne "Dans le else pas de PDB pour: $Iparse" if { [regexp {Concat(.*)} $Iparse p ip]} { #lappend filetmp "ip: $ip:" #Espionne "p: $p" #Espionne "ip: $ip" #Espionne "option: $option" #Espionne "fileMacsim: $fileMacsim" #Espionne "filename $filename" #Espionne "Iparse: $Iparse" set annotation [FromMacsims "$fileMacsim" "$filename" "$Iparse"] foreach an $annotation { #Espionne "an!!!!!!!!! ----> $an" set pos [split [lindex [split $an "/"] 1] "-"] set deb [lindex $pos 0] set end [lindex $pos 1] set long [expr $end-$deb+1] set inf [lindex [split $an "/"] 0] if {$ip=="Koanno"} { Espionne "Dans le KoAnno" switch $option { globulaire { if {[lindex [split $inf "_"] 1]=="GlobDoms"} { lappend filetmp " $inf;$deb;$end" Espionne "----------------------------> les valeur --> $inf;$deb;$end" } } disorder { switch $inf { FoldIndex_pds { lappend filetmp " $inf;$deb;$end" } GlobPlot_Disorder { lappend filetmp " $inf;$deb;$end" } Ronn_DR { lappend filetmp " $inf;$deb;$end" } default {} } } FoldIndex_pds { if {$inf=="FoldIndex_pds"} { lappend filetmp " $inf;$deb;$end" } } Ronn_DR { if {$inf=="Ronn_DR"} { lappend filetmp " $inf;$deb;$end" } } GlobPlot_Disorder { if {[lindex [split $inf "_"] 1]=="Disorder"} { lappend filetmp " $inf;$deb;$end" } } } } else { #faire ici difference entre domaine et pfam #je dois parcourir le lappend et regarder pour chaque couple $deb et $end si varie moins de 10 alors garde pas... #le if else test pour virer les informations de domaines fusionne avec pfam set dejavue "no" if {$ip=="Domain"} { #peut pas fonctionne car vas rentre les memes plusieur fois... #pour une deja vue alors que pour les autres rien a voir... foreach valeur $filetmp { set valeurs [split $valeur ";"] set debut [lindex $valeurs 1] set fin [lindex $valeurs 2] #Espionne "[expr $debut-10]<=$deb && $deb<=[expr $debut+10] && [expr $fin-10]<=$end && $end<=[expr $fin+10]" if {[expr $debut-10]<=$deb && $deb<=[expr $debut+10] && [expr $fin-10]<=$end && $end<=[expr $fin+10]} { set dejavue "OK" break; } } if {$dejavue!="OK"} { lappend filetmp " $ip;$deb;$end;$inf" } } else { lappend filetmp " $ip;$deb;$end;$inf" } } } } } } #ici si infoparse CompDomPfam alors regarde si pas plusieurs fois les memes... set filetmp [lsort -unique $filetmp] return $filetmp #foreach l $filetmp { # Espionne "--> $l" #} } proc getMacsimsInfNew {fileMac MaProt ConcatPfam {option ""}} { set directory [RepertoireDuGenome] #set infoParse {"ConcatDomain" "ConcatPfam" "ConcatStruct" "ConcatKoanno"} set infoParse $ConcatPfam if {$ConcatPfam == "ConcatDomPf"} { set infoParse {"ConcatPfam" "ConcatDomain"} } set filetmp {} set pdbList {} #lappend filetmp "Annotation Macsim" if { [file exists "[RepertoireDuGenome]/macsimXml/$fileMac.aj"]} { set fileMacsim "[RepertoireDuGenome]/macsimXml/$fileMac.aj" } else { set fileMacsim "[RepertoireDuGenome]/macsimXml/$fileMac" } if {$ConcatPfam=="pdb"} { #if { [file exists "[RepertoireDuGenome]/macsimXml/$fileMac.aj"]} { set annotation [FromMacsims "$fileMacsim" "$MaProt" "SeqData"] set SeqInt [split $annotation ""] #} else { #set annotation [FromMacsims "$fileMacsim" "$MaProt" "SeqData"] #set SeqInt [split $annotation ""] #} #recuperation des pdb set ListProt [FromMacsims "$fileMacsim" "ListOf" "Names"] foreach l $ListProt { if {[regexp {^[1-9][A-Z0-9]{3}_[A-Z]} $l]} { lappend pdbList $l } } #parcours la liste des PDBs foreach lpdb $pdbList { set ty 0 #if { [file exists "[RepertoireDuGenome]/macsimXml/$fileMac.aj"]} { set annotation [FromMacsims "$fileMacsim" "$lpdb" "SeqData"] set SeqPdb [split [string trim $annotation] ""] #} else { #set annotation [FromMacsims "$fileMacsim" "$lpdb" "SeqData"] #set SeqPdb [split [string trim $annotation] ""] #} #creation d'un pocedure pour calculer le recouvrement entre deux sequences. #recouvrement position de debut et de fin du pbd par rapport ¨¤ une sequene cible (dan l'alignement) set recouvrement [RecouvrementDesSequences $SeqInt $SeqPdb] set position [split $recouvrement "/"] set deb [lindex $position 0] set fin [lindex $position 1] if {$option=="filtre"} { if {$filetmp==""} {lappend filetmp " $lpdb;$deb;$fin"} set i 0 set indice -1 set listeIndice {} foreach li $filetmp { set position [split $li ";"] set debA [lindex $position 1] set finA [lindex $position 2] if {$deb<=$debA && $fin>=$finA} { #Espionne "on retire $li" lappend listeIndice $i set indice -2 } elseif {$deb>=$debA && $fin<=$finA} { set indice -2 } else { #Espionne "-1 On ajoute la pdb $lpdb" } incr i } if {$listeIndice!=""} { foreach l $listeIndice { set filetmp [lreplace $filetmp $l $l " $lpdb;$deb;$fin"] } } elseif {$indice==-1} { lappend filetmp " $lpdb;$deb;$fin" } } else { lappend filetmp " $lpdb;$deb;$fin" } incr ty if {$ty==2} {exit} } #lsort vire les doublons... set filetmp [lsort -unique $filetmp] } else { foreach Iparse $infoParse { Espionne "pour: $Iparse" if { [regexp {Concat(.*)} $Iparse p ip]} { #lappend filetmp "ip: $ip:" #Espionne "p: $p" #Espionne "ip: $ip" #Espionne "option: $option" #Espionne "fileMacsim: $fileMacsim" #Espionne "filename $filename" #Espionne "Iparse: $Iparse" set annotation [FromMacsims "$fileMacsim" "$MaProt" "$Iparse"] foreach an $annotation { #Espionne "an ----> $an" set pos [split [lindex [split $an "/"] 1] "-"] set deb [lindex $pos 0] set end [lindex $pos 1] set long [expr $end-$deb+1] set inf [lindex [split $an "/"] 0] #set recouvrement [expr ($long*100)/$taille] #lappend filetmp " $ip;$deb;$end;$inf" #Espionne "inf ------> $inf" if {$ip=="Koanno"} { switch $option { globulaire { if {[lindex [split $inf "_"] 1]=="GlobDoms"} { lappend filetmp " $inf;$deb;$end" } } disorder { switch $inf { FoldIndex_pds { lappend filetmp " $inf;$deb;$end" } GlobPlot_Disorder { lappend filetmp " $inf;$deb;$end" } Ronn_DR { lappend filetmp " $inf;$deb;$end" } default {} } } FoldIndex_pds { if {$inf=="FoldIndex_pds"} { lappend filetmp " $inf;$deb;$end" } } Ronn_DR { if {$inf=="Ronn_DR"} { lappend filetmp " $inf;$deb;$end" } } GlobPlot_Disorder { if {[lindex [split $inf "_"] 1]=="Disorder"} { lappend filetmp " $inf;$deb;$end" } } } } else { #faire ici difference entre domaine et pfam #je dois parcourir le lappend et regarder pour chaque couple $deb et $end si varie moins de 10 alors garde pas... #le if else test pour virer les informations de domaines fusionne avec pfam set dejavue "no" if {$ip=="Domain"} { #peut pas fonctionne car vas rentre les memes plusieur fois... #pour une deja vue alors que pour les autres rien a voir... foreach valeur $filetmp { set valeurs [split $valeur ";"] set debut [lindex $valeurs 1] set fin [lindex $valeurs 2] #Espionne "[expr $debut-10]<=$deb && $deb<=[expr $debut+10] && [expr $fin-10]<=$end && $end<=[expr $fin+10]" if {[expr $debut-10]<=$deb && $deb<=[expr $debut+10] && [expr $fin-10]<=$end && $end<=[expr $fin+10]} { set dejavue "OK" break; } } if {$dejavue!="OK"} { lappend filetmp " $ip;$deb;$end;$inf" } } else { lappend filetmp " $ip;$deb;$end;$inf" } } } } } } return $filetmp #foreach l $filetmp { # Espionne "--> $l" #} } proc getProteinIdAndPreferredNameByAccessionRefSeqP {Acc} { set taxId "9031" set InfoFiche [TraiteLesRefSeqP $Acc] if {$InfoFiche==""} { error "BirdEntry: '$Acc' non trouve" } set LesInfos [split $InfoFiche "|"] set Gn [lindex $LesInfos 0] set NM [lindex $LesInfos 1] set GeneID [lindex $LesInfos 2] set taxId [lindex $LesInfos 3] #Espionne "Acc:$Acc\nGn:$Gn\nNM:$NM\nGeneID:$GeneID" set sqlWhere {} foreach access [concat $Acc $Gn $NM $GeneID] { lappend sqlWhere "pn.protein_name = '$access'" } set sqlWhere [join $sqlWhere " OR "] set sql "SELECT p.protein_id, p.preferred_name FROM items.proteins_names pn, items.proteins p WHERE ($sqlWhere) AND pn.species_id = $taxId AND pn.protein_id = p.protein_id LIMIT 1" set list [SqlExec $sql "GetList"] return $list } proc getProteinIdAndPreferredNameByUniprotIdOrAccessString {IdOuAc {aEMBL ""}} { error "!!! NETTOYER FIN DE [lindex [info level 0] 0] !!!" error "!!! UTILISER BLASTP STRING AVEC EXPECT !!!" error "!!! RECHERCHE HOMOLOGUE AVEC SEQUENCE EN PARAM PLUTOT QUE SEQUENCE DE L'ACCESS !!!" set entries [BirdEntry $IdOuAc] if {$entries eq ""} { error "BirdEntry: '$IdOuAc' non trouvé" } elseif {[llength $entries] > 1} { error "BirdEntry: 1+ trouvés pour '$IdOuAc'" } set entry [lindex $entries 0] if {$aEMBL ne ""} {upvar $aEMBL embl} ParseEMBL $entry embl set id $embl(ID) set lAccessions $embl(AC) set taxId $embl(TaxId) set lEnsembl {} set lRefSeq {} set lGenomeReviews {} if {[info exists embl(DR)]} { foreach dbxref $embl(DR) { foreach {db primary secondary tertiary quaternary} $dbxref {} switch -exact $db { "Ensembl" { lappend lEnsembl $primary } "RefSeq" { lappend lRefSeq $primary } "GenomeReviews" { lappend lGenomeReviews $secondary } } } } set lGN {} if {[info exists embl(GN)]} { foreach list $embl(GN) { foreach {name synonyms loci ORFs} $list {} set lGN [concat $lGN $name $synonyms] } } Espionne "ID:$id\nAC:$lAccessions\nEnsembl:$lEnsembl\nRefSeq:$lRefSeq\nGenomeReviews:$lGenomeReviews\nGN:$lGN" set sqlWhere {} foreach access [concat $id $lAccessions $lEnsembl $lRefSeq $lGenomeReviews $lGN] { lappend sqlWhere "pn.protein_name = '$access'" } set sqlWhere [join $sqlWhere " OR "] set sql "SELECT p.protein_id, p.preferred_name FROM items.proteins_names pn, items.proteins p WHERE ($sqlWhere) AND pn.species_id = $taxId AND pn.protein_id = p.protein_id LIMIT 1" set list [SqlExec $sql "GetList"] if {[llength $list] == 0} { set fichierFasta "/tmp/$embl(ID).fasta" set out [open $fichierFasta "w"] puts $out [formatFasta $embl(ID) $embl(Sequence)] close $out set list [BlastPString $fichierFasta $embl(TaxId)] file delete $fichierFasta } Espionne "\t$list\n" return $list } proc getResAgents {} { package require sqlite3 set db "root" sqlite3 $db res.sql $db eval {begin transaction} puts "Nb files [llength [$db eval {select distinct(nom) from file}]]" set Llen [$db eval {select distinct(motiflen) from segment}] puts "Llen $Llen" foreach len $Llen { puts "\nlen $len :" foreach rk {0.0 0.05 0.1 0.2} { set Lv [$db eval {select f.nom,s.min,s.max from file as f, block as b, ln_file_block as lfb, segment as s, ln_block_segment as lbs where s.rank <= $rk and s.motiflen = $len and s.pk_segment = lbs.pk_segment and lbs.pk_block = lfb.pk_block and f.pk_file = lfb.pk_file}] set Lf {} ; set Lmin {} ; set Lmax {} foreach {f min max} $Lv { lappend Lf $f lappend Lmin $min lappend Lmax $max } set nf [llength [lsort -unique $Lf]] set min [lindex [lsort -integer $Lmin] 0] set max [lindex [lsort -integer $Lmax] end] puts "rank $rk | $nf | $min $max" } } puts "" exit set ilen 0 foreach l1 $Llen { foreach l2 $Llen { if {$l1 == $l2} { continue } puts "$l1 - $l2 : [llength [land $T($l1) $T($l2)]] [lor $T($l1) $T($l2)]" } } set Lf [$db eval {select distinct(nom) from file where nom like 'BB%'}] puts "\nfile [llength $Lf]" puts "[lsort -dictionary [lor $T(5) $Lf]]" $db eval {commit} $db close exit } proc getSequence {seqNode} { if {[$seqNode nodeType] ne "ELEMENT_NODE" || [$seqNode nodeName] ne "sequence"} { puts "This is not a sequence node" exit 1 } return [string trim [$seqNode selectNodes "string(seq-data)"]] } proc getSequenceFeatures {seqNode {type ""} {withAlignementPositions 1}} { if {[$seqNode nodeType] ne "ELEMENT_NODE" || [$seqNode nodeName] ne "sequence"} { puts "This is not a sequence node" exit 1 } if {$withAlignementPositions} { array set index [seqPos2AlnPosIndex [getSequence $seqNode]] } if {$type ne ""} { set xpath ".//fitem\[ftype=\"$type\"\]" } else { set xpath ".//fitem" } set lFeatures {} foreach n [$seqNode selectNodes $xpath] { set type [string trim [$n selectNodes "string(ftype)"]] set start [string trim [$n selectNodes "string(fstart)"]] set stop [string trim [$n selectNodes "string(fstop)"]] set color [string trim [$n selectNodes "string(fcolor)"]] set score [string trim [$n selectNodes "string(fscore)"]] set note [string trim [$n selectNodes "string(fnote)"]] # Macsims bugs !!! if {$start > $stop} { set tmp $start set start $stop set stop $tmp } if {$start < 1} {continue} # /Macsims bugs if {$withAlignementPositions} { set start $index($start) set stop $index($stop) } lappend lFeatures [list "type" $type "start" $start "stop" $stop "color" $color "score" $score "note" $note] } return [lsort -command compareFeatures $lFeatures] } proc getSequenceGroup {seqNode} { if {[$seqNode nodeType] ne "ELEMENT_NODE" || [$seqNode nodeName] ne "sequence"} { puts "This is not a sequence node" exit 1 } return [string trim [$seqNode selectNodes "string(.//group\[1\])"]] } proc getSequenceName {seqNode} { if {[$seqNode nodeType] ne "ELEMENT_NODE" || [$seqNode nodeName] ne "sequence"} { puts "This is not a sequence node" exit 1 } return [string trim [$seqNode selectNodes "string(seq-name)"]] } proc getSequenceNode {node name} { return [$node selectNodes "//sequence\[seq-name=\"$name\"\]"] } proc getStringGraph {lProteinId {minCombinedScore 700} {lTagsProteinId ""}} { package require struct::graph set g [::struct::graph] set lProteinId [lsort -unique $lProteinId] foreach proteinId $lProteinId { if {![$g node exists $proteinId]} { $g node insert $proteinId } foreach interact [getInteracts $proteinId 1 $minCombinedScore] { if {![$g node exists $interact]} { $g node insert $interact } if {[lsearch -exact [$g nodes -adj $proteinId] $interact] == -1} { $g arc insert $proteinId $interact $g arc insert $interact $proteinId } } } # Vire les noeuds qui ne sont pas en entrée foreach n [$g nodes] { if {[lsearch -exact $lProteinId $n] == -1} { $g node delete $n } } # Tag les noeuds spécifiés foreach {tag lProteinIdToTag} $lTagsProteinId { foreach n [$g nodes] { if {[lsearch -exact $lProteinIdToTag $n] != -1} { $g node set $n $tag 1 } } } # Rajoute le nom préféré et l'annotation foreach n [$g nodes] { set sql "SELECT preferred_name, annotation FROM items.proteins WHERE protein_id = $n" foreach {preferred_name annotation} [SqlExec $sql "GetList"] {} $g node set $n "preferred_name" $preferred_name $g node set $n "annotation" $annotation } return $g } proc getStringGraphMoi {lProteinId {minCombinedScore 700} {lTagsProteinId ""}} { package require struct::graph CanalSqlString set g [::struct::graph] set lProteinId [lsort -unique $lProteinId] foreach proteinId $lProteinId { if {![$g node exists $proteinId]} { $g node insert $proteinId } foreach interact [getInteracts $proteinId 1 $minCombinedScore] { if {![$g node exists $interact]} { $g node insert $interact } if {[lsearch -exact [$g nodes -adj $proteinId] $interact] == -1} { $g arc insert $proteinId $interact $g arc insert $interact $proteinId } } } # Vire les noeuds qui ne sont pas en entrée foreach n [$g nodes] { if {[lsearch -exact $lProteinId $n] == -1} { $g node delete $n } } # Tag les noeuds spécifiés foreach {tag lProteinIdToTag} $lTagsProteinId { foreach n [$g nodes] { if {[lsearch -exact $lProteinIdToTag $n] != -1} { $g node set $n $tag 1 } } } # Rajoute le nom préféré et l'annotation foreach n [$g nodes] { set sql "SELECT preferred_name, annotation FROM items.proteins WHERE protein_id = $n" Espionne "$sql" set result [SqlExec $sql "GetFirstValue"] Espionne "$result" foreach {preferred_name annotation} [SqlExec $sql "GetList"] {} Espionne "$preferred_name" Espionne "$annotation" $g node set $n "preferred_name" $preferred_name $g node set $n "annotation" $annotation } return $g } proc getStringGraphWithLevel {lProteinId {minCombinedScore 700} {level 0}} { set lProteinId [lsort -unique $lProteinId] set interacts {} foreach proteinId $lProteinId { if {$level > 0} { set interacts [lsort -unique [concat $interacts [getInteracts $proteinId $level $minCombinedScore]]] } } set lProteinId [lsort -unique [concat $lProteinId $interacts]] return [getStringGraph $lProteinId $minCombinedScore] } proc getStringSubGraph {g lProteinId} { package require struct::graph # Crée une copie set sg [::struct::graph] $sg = $g # Vire les noeuds qui ne sont pas en entrée foreach n [$sg nodes] { if {[lsearch -exact $lProteinId $n] == -1} { $sg node delete $n } } return $sg } proc getUnpaddedSequencePosition {sequence paddedPosition} { if { $paddedPosition <= 1 } { return $paddedPosition } set unpaddedPosition 1 set strlen [string length $sequence] for { set i 0 } { $i < $strlen } { incr i } { if { [expr $i + 1] == $paddedPosition } { return $unpaddedPosition } if { [string index $sequence $i] ne "*" } { incr unpaddedPosition } } return 0 } proc get_blocks {grp block_cutoff window conserved minlength} { global TableScore CpB set nseqs [llength [set CpB($grp)]] if {$grp eq "GroupeToutLeMonde"} { array set colscore [calc_normd_global $grp $window $conserved] } else { if {[llength [set CpB($grp)]] < 2} { return 0 } array set colscore [calc_normd_for_subgroup $grp $window $conserved] } set inregion 0 set Ltot $CpB(Ltot) set nblocks 0 set CpB(Blocks,$grp) [list] for {set i 0} {$i < $Ltot} {incr i} { if {[set colscore($i)] >= $block_cutoff} { if {! $inregion} { set first $i set inregion 1 } } else { if {$inregion} { set last [expr {$i-1}] if {$last >= ($first+$minlength)} { lappend CpB(Blocks,$grp) [list $first $last] } set inregion 0 } } } if {$inregion} { set last $Ltot if {$last >= ($first+$minlength)} { lappend CpB(Blocks,$grp) [list $first $last] } } if {$grp eq "GroupeToutLeMonde"} { puts "DEBITEM BTous" foreach b [set CpB(Blocks,$grp)] { lassign $b f d puts "ITEM $f $d" } } return [llength $CpB(Blocks,$grp)] } proc glMultiDrawElements {mode count type indices primcount} { for { set i 0 } { $i < $primcount } { incr i } { if { [$count get $i] > 0 } { glDrawElements $mode [$count get $i] $type [lindex $indices $i] } } } proc globXB {directory} { set directory [RepertoireDuGenome]/$directory #set directory [RepertoireDuGenome]/GroupeDomain/PUZ03 #set n [split $directory "/"] #set fichier [lindex $n [llength $n]-1] #if { [file exists "[RepertoireDuGenome]/macsimXml/$fichier.aj"]} { #set FichierMacsim "[RepertoireDuGenome]/macsimXml/$fichier.aj" #} else { # set FichierMacsim "[RepertoireDuGenome]/macsimXml/$fichier" #} set r [glob -directory $directory *] set ListeDesRpertoires {} foreach rep $r { #Espionne "rep:$rep" set re [glob -directory $rep *.png] foreach monFichier $re { set n [split $monFichier "/"] set f1 [lindex $n [llength $n]-2] set f2 [lindex $n [llength $n]-1] if {[regexp {(.*)Domain.png} $f2 p na]} { set name $na } elseif {[regexp {(.*)Pfam.png} $f2 p na]} { set name $na } #set OS [OrgaDuAccess $na] #pour les pdb regarde dans le fichiers macsim et pour les ensembl regarde dans le fichier newtfasdescopains.... #normalement devrai fonctionne mais erreur dans le code de Laetitia lui demander de regarder qd reviens.... #set Organism "" #if {$OS=="Inconnu inconnu"} { #set OS [FromMacsims $FichierMacsim $na "Organism"] #} #if {$OS=="" || $OS=="Inconnu inconnu"} { #set OS [getOrgaTfasDesCopains "" $fichier $na] #} #set f2bis [lindex [split $f2 "Pfam"] 0] #faut pas faire un split.... if {[regexp {^(.*)Pfam.*} $f2 tmp access]} { set f2bis $access } elseif {[regexp {^(.*)Domain.*} $f2 tmp access]} { set f2bis $access } elseif {[regexp {^(.*)Region.*} $f2 tmp access]} { set f2bis $access } #Espionne "F1: $f1; F2: $f2; F2bis:$f2bis" lappend groupeProt "$f2bis;" #lappend ListeDesRpertoires "$f1/$f2bis;" set groupeProt [lsort -unique $groupeProt] } lappend ListeDesRpertoires "#$f1/[join $groupeProt ""]" set groupeProt "" } set ListeDesRpertoires [lsort -unique $ListeDesRpertoires] #Espionne $ListeDesRpertoires #foreach l $ListeDesRpertoires { # Espionne $l #} return $ListeDesRpertoires } proc globXBAncien {directory} { set directory [RepertoireDuGenome]/$directory set r [glob -directory $directory *] set ListeDesRpertoires {} foreach rep $r { set re [glob -directory $rep *.png] #Espionne "--->>>$rep:" foreach fichier $re { Espionne "fichier: $fichier" set n [split $fichier "/"] set f1 [lindex $n [llength $n]-2] set f2 [lindex $n [llength $n]-1] lappend ListeDesRpertoires "$f1/$f2;" } lappend ListeDesRpertoires "#" } #Espionne $ListeDesRpertoires # foreach l $ListeDesRpertoires { # Espionne $l # } #return $ListeDesRpertoires } proc glutSolidCone {base height slices stacks} { set quadObj [gluNewQuadric] gluQuadricDrawStyle $quadObj GLU_FILL gluQuadricNormals $quadObj GLU_SMOOTH gluCylinder $quadObj $base 0.0 $height $slices $stacks gluDeleteQuadric $quadObj } proc glutSolidCube {size} { tcl3dDrawBox $size GL_QUADS } proc glutSolidDodecahedron {} { tcl3dDodecahedron GL_TRIANGLE_FAN } proc glutSolidIcosahedron {} { tcl3dIcosahedron GL_TRIANGLES } proc glutSolidOctahedron {} { tcl3dOctahedron GL_TRIANGLES } proc glutSolidSphere {radius slices stacks} { set quadObj [gluNewQuadric] gluQuadricDrawStyle $quadObj GLU_FILL gluQuadricNormals $quadObj GLU_SMOOTH gluSphere $quadObj $radius $slices $stacks gluDeleteQuadric $quadObj } proc glutSolidTeapot {scale {grid 14}} { tcl3dTeapot $grid $scale GL_FILL } proc glutSolidTetrahedron {} { tcl3dTetrahedron GL_TRIANGLES } proc glutSolidTorus {innerRadius outerRadius nsides rings} { tcl3dDoughnut $innerRadius $outerRadius $nsides $rings } proc glutWireCone {base height slices stacks} { set quadObj [gluNewQuadric] gluQuadricDrawStyle $quadObj GLU_LINE gluQuadricNormals $quadObj GLU_SMOOTH gluCylinder $quadObj $base 0.0 $height $slices $stacks gluDeleteQuadric $quadObj } proc glutWireCube {size} { tcl3dDrawBox $size GL_LINE_LOOP } proc glutWireDodecahedron {} { tcl3dDodecahedron GL_LINE_LOOP } proc glutWireIcosahedron {} { tcl3dIcosahedron GL_LINE_LOOP } proc glutWireOctahedron {} { tcl3dOctahedron GL_LINE_LOOP } proc glutWireSphere {radius slices stacks} { set quadObj [gluNewQuadric] gluQuadricDrawStyle $quadObj GLU_LINE gluQuadricNormals $quadObj GLU_SMOOTH gluSphere $quadObj $radius $slices $stacks gluDeleteQuadric $quadObj } proc glutWireTeapot {scale {grid 10}} { tcl3dTeapot $grid $scale GL_LINE } proc glutWireTetrahedron {} { tcl3dTetrahedron GL_LINE_LOOP } proc glutWireTorus {innerRadius outerRadius nsides rings} { glPushAttrib GL_POLYGON_BIT glPolygonMode GL_FRONT_AND_BACK GL_LINE tcl3dDoughnut $innerRadius $outerRadius $nsides $rings glPopAttrib } proc groupIdenticalFeatures {features} { # Regroupement des features identiques (recouvrement + même color) set groups {} while {[llength $features] != 0} { set newFeatures {} # Crée un nouveau groupe à partir du premier element set current [lindex $features 0] set newGroup [list $current] # Ajoute au groupe les elements identiques à celui ci # et met de côté les autres for {set i 1} {$i < [llength $features]} {incr i} { set ft [lindex $features $i] if {[isSameFeature $current $ft]} { lappend newGroup $ft } else { lappend newFeatures $ft } } # Tente de fusionner ce nouveau groupe avec un précédent # sinon il est juste ajouté en tant que tel set fused 0 for {set i 0} {$i < [llength $groups]} {incr i} { set grp [lindex $groups $i] foreach ftA $grp { foreach ftB $newGroup { if {[isSameFeature $ftA $ftB]} { set grp [concat $grp $newGroup] lset groups $i $grp set fused 1 break } } if {$fused} {break} } if {$fused} {break} } if {!$fused} {lappend groups $newGroup} set features $newFeatures } return $groups } proc grouperHitsParTaxid {hits} { set res [dict create] foreach h $hits { set taxid [$h get taxid] dict lappend res $taxid $h } return $res } proc grouperIsoformes {hits Fonction {Type Subj}} { proc do {code while cond} { tailcall try $code\n[list $while $cond $code] } set res {} set curGroup $hits do { set tmpGroup {} set ref [lindex $curGroup 0] set isoformes [list $ref] foreach el [lrange $curGroup 1 end] { if {[$ref $Fonction $el $Type]} { lappend isoformes $el } else { lappend tmpGroup $el } } lappend res $isoformes set curGroup $tmpGroup } while {[llength $curGroup] > 0} return $res } proc grouperIsoformesScore {hits Fonction Type} { set scores [dict create] set i 0 foreach refh $hits { set j [expr $i+1] foreach h [lrange $hits [expr $i+1] end] { #puts "($i,$j) [$refh getShortid] against [$h getShortid]: [$refh estIsoformeFenetre $h Subject]" dict set scores "$i,$j" [$refh estIsoformeFenetre $h Subject] incr j } incr i } set groups {} set indexes [dict create] set i 0 foreach h $hits { set max 0 set copain "" for {set j 0} {$j<[llength $hits]} {incr j} { set key [join [lsort -increasing -integer [list $i $j]] ","] if {[dict exists $scores $key] && [dict get $scores $key] > $max} { set max [dict get $scores $key] set copain $j } } if {$copain == "" || ![dict exists $indexes $copain]} { lappend groups [list $h] dict set indexes $i [expr [llength $groups]-1] } else { set idx [dict get $indexes $copain] lset groups $idx end+1 $h dict set indexes $i $idx } incr i } #foreach g $groups { # puts "=====" # foreach h $g { # puts [$h getShortid] # } #} return $groups } proc grpm {} { global LNOrdali # Article M.Sissler splice variant AspRS # # proc pour remettre les bons numeros de groupes # dans fichier xml output de macsim # entre avec fichier tfa ordonne d'olivier # Groupes : numerotation 0 -> # 0-39 Fungi # 40-70 Animaux # 71-79 Plants # 80-184 Bacteria # 185-193 cyto (outgroup) LitLeTFA DARS2_DARS_uniprot.tfa tmp St foreach n $tmp { lappend Lt [string toupper $n] } puts "Lt [llength $Lt]" puts "[join $Lt \n]" set SDG(1) [lrange $Lt 0 39] set SDG(2) [lrange $Lt 40 70] set SDG(3) [lrange $Lt 71 79] set SDG(4) [lrange $Lt 80 184] set SDG(5) [lrange $Lt 185 end] set Lxml [ContenuDuFichier DARS2_DARS_uniprot.xml] set RId [dom parse $Lxml] set doc [$RId documentElement] set Lsq [$doc selectNodes //sequence] puts "xml lsq [llength $Lsq]" foreach ns $Lsq { set nn [$ns selectNodes seq-name] set name [$nn selectNode string(.)] set g -1 foreach i {1 2 3 4 5} { set name [string toupper $name] if {$name in [set SDG($i)]} { set g $i set done 1 break } } if {$g == -1} { puts "Pb ! Seq $name has no group" } set ng [$ns selectNodes ./seq-info/group/text()] $ng nodeValue $g } set out t.xml set fout [open $out w] puts $fout "" puts $fout "" $doc asXML -channel $fout close $fout $RId delete parray SDG exit } proc haveFeature {seqNode feature {type REGION}} { set seq [string trim [$seqNode selectNodes "string(seq-data)"]] foreach f [$seqNode selectNodes ".//fitem\[ftype=\"$type\"\]"] { set fStart [seqPos2AlnPos $seq [string trim [$f selectNodes "string(fstart)"]]] set fStop [seqPos2AlnPos $seq [string trim [$f selectNodes "string(fstop)"]]] if {$fStart > $fStop} { set tmp $fStart set fStart $fStop set fStop $tmp } if {$fStart < 1} {continue} set fNote [string trim [$f selectNodes "string(fnote)"]] if {[regexp -nocase {^PROP_(.*)\s+from \w+$} $fNote regMatch tmpNote]} {set fNote $tmpNote} if {[areRangeOverlapping [list $fStart $fStop $fNote] $feature] && $fNote eq [lindex $feature 2]} {return 1} } return 0 } proc helcomp {} { foreach FichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsimsOld/*.xml"] { set fin [file tail $FichierMacsim] #regsub {\.[^\.]+$} $fin "" fin #regsub {\.[^\.]+$} $fin "" fin if {![file exists "[RepertoireDuGenome]/macsims/$fin"]} { incr i; Espionne "manque dans macsims $fin" } } } proc helcompInv {} { foreach FichierMacsim [glob -nocomplain "[RepertoireDuGenome]/macsims/*.xml"] { set fin [file tail $FichierMacsim] #Espionne "[RepertoireDuGenome]/macsimsOld/$fin" if {![file exists "[RepertoireDuGenome]/macsimsOld/$fin"]} { incr i; Espionne "manque dans macsims $fin" } } } proc helplog {} { foreach FichierLog [glob -nocomplain "[RepertoireDuGenome]/log/*"] { foreach Ligne [LesLignesDuFichier $FichierLog] { if {[regexp "addSeq" $Ligne]} { lappend LesElus "$FichierLog" } } } set LesElus [lsort $LesElus] EspionneL "$LesElus" } proc histdescore {} { global ready set ready 0 set d [list 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 10 5 0 1 2 35 3 5 1 9 20 2 0 27 7 0 23 0 7 0 5 59 2 2 0 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 5 6 0 4 1 12 24 33 8 18 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 36 27 11 44 19 67 39 54 5 31 20 4 53 38 40 14 50 65 38 2 45 55 25 6 7 6 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 100 1 0 0 4 0 0 8 8 1 6 43 0 3 3 23 5 4 52 8 2 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] set ld [split $d " "] puts "nval = [llength $ld]" for {set i 10} {$i <= 100} {incr i 10} { set r($i) 0 } foreach e $ld { if {$e == 0} { incr r(10) continue } for {set i 10} {$i <= 100} {incr i 10} { if {double($e)/$i <= 1.} { incr r($i) break } } } set dh [array get r] parray r histogram $dh 500 400 return } proc histogram {slist wid ht} { # render a histogram global ready array set scores $slist set nms [lsort -integer [array names scores]] catch {destroy .h} {} catch {destroy .b} {} canvas .h -width $wid -height $ht -bg beige pack .h set nbars [array size scores] #how many histogram bars set nax [expr $nbars/10] ;# axis spacing set hwid [expr $wid/ $nbars] set i 0 set hmax -9999999 ;# largest y value set hmin 9999999 ;# smallest y value while {$i<$nbars} { set f $scores([lindex $nms $i]) set hmax [ expr {$f>$hmax} ? $f : $hmax] set hmin [ expr {$f<$hmin} ? $f : $hmin] incr i } if {$hmax>$hmin} { set i 0 set nay 100 while {$nay<$hmax} { set yp [expr $ht-0.75*$nay-20] .h create line 0 $yp $wid $yp -fill red incr nay 100 } set nax 10 while {$i<$nbars} { set x [expr $hwid*$i] set rhs [expr $x+$hwid/2] set f [expr $ht-20-.75*$ht*$scores([lindex $nms $i])/$hmax] .h create rectangle $x [expr $ht-20] $rhs $f -fill gray if {[expr $i>=$nax]} { .h create line $x [expr $ht-20] $x 0 -fill red incr nax 10 } incr i incr x $hwid } update # button .b -text "Next" -command "incr ready" ;# when ready is changed, proceeds with commands # pack .b } } proc hopla {} { set dir "/home/moumou" foreach {i d} {1 "clustal" 2 "cluspack" 3 "rascal"} { cd [file join $dir $d] set lc$i {} set lc$i [glob -nocomplain -- *.c] lappend lc$i [glob -nocomplain -- *.h] } foreach i {1 2} { foreach j {2 3} { if {$i == $j} {continue} set rep [land [set lc$i] [set lc$j]] puts "$i $j $rep" } } return } proc hsbToRgb {hue sat value} { set v [format %.0f [expr {65535.0*$value}]] if {$sat == 0} { return "$v $v $v" } else { set hue [expr {$hue*6.0}] if {$hue >= 6.0} { set hue 0.0 } scan $hue. %d i set f [expr {$hue-$i}] set p [format %.0f [expr {65535.0*$value*(1 - $sat)}]] set q [format %.0f [expr {65535.0*$value*(1 - ($sat*$f))}]] set t [format %.0f [expr {65535.0*$value*(1 - ($sat*(1 - $f)))}]] case $i 0 {return "$v $t $p"} 1 {return "$q $v $p"} 2 {return "$p $v $t"} 3 {return "$p $q $v"} 4 {return "$t $p $v"} 5 {return "$v $p $q"} error "i value $i is out of range" } } proc httpCallback {token} { upvar #0 $token State # Access State as a Tcl array if {[info exists State(error)]} { return [set State(error)] } else { return "pasmarche" } } proc ihr {} { set Header "genename humangenesymbol altnames species detectionmethod stage1 stage2 stage3 stage4 moumsechromodist mgd humanchromoloc omim mousemappingref humanmappingref expressionref typeofprotein abnormalitiesinmutant" set LesHeader [split $Header "\t"] set NewHeader [join $LesHeader ";"] lappend LeNew $NewHeader foreach Ligne [LesLignesDuFichier "[HomeRipp]/GenoretWww/ImAnno/ImAnnoEar/mousegene.txt"] { if { ! [regexp -nocase {[a-z]} $Ligne]} { continue } regsub -all {\;} $Ligne ".," Ligne set LesMots [split $Ligne "\t"] set N [llength $LesMots] Espionne [lindex $LesMots 14] if {$N==14} { lappend LesMots "" } if {$N>15} { set LesMots [lrange $LesMots 0 14] } set New [join $LesMots ";"] lappend LeNew $New } SauveLesLignes $LeNew dans "[HomeRipp]/GenoretWww/ImAnno/ImAnnoEar/mousegeneRR.txt" AfficheVariable [join $LeNew "\n"] } proc iii {} { global Bornes return [dict info $Bornes] } proc image.bitmap.to.photo {bmp} { set options {} foreach opt {-background -data -file -foreground -maskdata -maskfile} { lappend options $opt [$bmp cget $opt] } return [eval image.create.xbm $options] } proc image.create.xbm {args} { array set a $args if {[array names a -exact -file] ne {}} { set fid [open $a(-file) r] set a(-data) [read $fid] close $fid } if {[array names a -exact -maskfile] ne {}} { set fid [open $a(-maskfile) r] set a(-maskdata) [read $fid] close $fid } if {[array names a -exact -foreground] eq {}} {set a(-foreground) black} if {[array names a -exact -background] eq {}} {set a(-background) {}} if {$a(-background) eq {}} { set a(-maskdata) $a(-data) set a(-background) white } set width [set a(-width)] set height [set a(-height)] set result [image create photo -width $width -height $height] set data [join [split [set a(-data)] " "]] set line {} set ycntr0 0 set ycntr1 1 foreach datum $data { foreach cntr {0 1 2 3 4 5 6 7} { if {($datum %2) == 0} then {lappend line $a(-background)} else {lappend line $a(-foreground)} set datum [expr {$datum >> 1}] } if {[llength $line] >= $width} { $result put [list $line] -to 0 $ycntr0 $width $ycntr1 incr ycntr0 incr ycntr1 set line {} } } if {[array names a -exact -maskdata] ne {}} { set w [lindex [regexp -inline -- {width\s+(\d+)} $a(-data)] 1] set h [lindex [regexp -inline -- {height\s+(\d+)} $a(-data)] 1] if {($w != $width) || ($h != $height)} { error {bitmap and mask have different sizes} } regexp -indices -- {\{\s*(0x[^\}]*)} $a(-maskdata) r1 range foreach {b e} $range break set data [join [split [string trim [string range $a(-maskdata) $b $e]] ,]] set ycntr 0 set xcntr 0 foreach datum $data { foreach cntr {0 1 2 3 4 5 6 7} { if {($datum %2) == 0} { $result transparency set $xcntr $ycntr true } set datum [expr {$datum >> 1}] incr xcntr if {$xcntr >= $width} { incr ycntr set xcntr 0 break } } } } return $result } proc initbooks {} { package require sqlite3 set tbl " - books { . pk_books P . prenom V256 . nom V256 . titre V256 }" set f /home/moumou/www/perso/books/books.sql file delete $f set d [FabriqueDeTables $tbl roo $f] puts "d= $d" exit } proc inittrace {} { set Lp [info procs] foreach e $Lp { if {$e == "LaTrace"} {continue} if {[regexp {^[A-Z]} $e]} {trace add execution $e enter LaTrace} } return } proc integersMeanCeil {list} { set sum 0 foreach e $list {incr sum $e} return [expr int( ceil( double($sum) / [llength $list] ) )] } proc invcol {f} { LoadTkAndPackages package require Img set ph [image create photo -file $f] set Ldata [$ph data] puts "width [$ph cget -width]" puts "heigh [$ph cget -height]" puts "[llength $Ldata]" puts "[llength [lindex $Ldata 0]]" puts [lrange [lindex $Ldata 0] 0 10] set out [image create photo] set newI [list] foreach l $Ldata { set newL [list] foreach p $l { lassign [CouleurHexa2Int $p] r g b set nr [expr {255-$r}] set ng [expr {255-$g}] set nb [expr {255-$b}] set c [CouleurInt2Hexa [list $nr $ng $nb]] lappend newL $c } lappend newI $newL } $out put $newI $out write out.png -format png exit } proc ip:external {} { #this uses the TCP DNS port of the DNS root-servers. #If these aren't reachable, you probably don't #have a working external internet connection anyway. set MyIP "" foreach a {a b c d e f g h i j k} { catch { set external [socket $a.root-servers.net 53] set MyIP [lindex [fconfigure $external -sockname] 0] close $external } if { ![string equal $MyIP ""] } { break } } return $MyIP } proc isPdb {access} { return [regexp -nocase {^\d\w{3}_[a-z]?$} $access] } proc isPeakInCentromere {PathPeaks PathCentromeres} { set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "isPeakInCentromere : Start" set FichierPeaks [open "$PathPeaks.coord" "r"] set FichierPeaksEnrichi [open "$PathPeaks.csv" "w"] set I 0 set O 0 set ListeDesID {} while { [gets $FichierPeaks LignePeak] >=0 } { incr I ScanLaListe $LignePeak chrom start end length summit tags peak fold set FichierCentromeres [open "$PathCentromeres.coord" "r"] while { [gets $FichierCentromeres LigneCentromeres] >=0 } { ScanLaListe $LigneCentromeres chromCentromeres startCentromeres endCentromeres if { $chrom == $chromCentromeres && $start >= $startCentromeres && $end <= $endCentromeres } { set LignePeak "$LignePeak Centromere" incr O break } } if {![regexp -all -nocase {Centromere} $LignePeak]} { set LignePeak "$LignePeak NoCentro" } puts $FichierPeaksEnrichi $LignePeak close $FichierCentromeres } close $FichierPeaks close $FichierPeaksEnrichi set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "$timestamp|isPeakInCentromere: End ($I/$O)" } proc isRegionComplete {rQuery rRef {minRefCoverage 0.9} {tolerance 2}} { if {[areRangeOverlapping [lrange $rQuery 0 1] [lrange $rRef 0 1]]} { # calcule longeurs set lQuery [expr abs([lindex $rQuery 1] - [lindex $rQuery 0]) + 1] set lRef [expr abs([lindex $rRef 1] - [lindex $rRef 0]) + 1] # calcule couverture if {[lindex $rQuery 0] < [lindex $rRef 0]} {set do [lindex $rRef 0]} else {set do [lindex $rQuery 0]} if {[lindex $rQuery 1] < [lindex $rRef 1]} {set fo [lindex $rQuery 1]} else {set fo [lindex $rRef 1]} set coverage [expr abs($do - $fo) + 1] set refCover [expr double($coverage) / $lRef] if {$refCover >= $minRefCoverage} {return 1} } return 0 } proc isSameFeature {featureA featureB} { array set a $featureA array set b $featureB if {$a(color) != $b(color)} {return 0} if {$a(start) >= $b(start) && $a(start) <= $b(stop) || $a(stop) >= $b(start) && $a(stop) <= $b(stop) || $b(start) >= $a(start) && $b(start) <= $a(stop) || $b(stop) >= $a(start) && $b(stop) <= $a(stop)} { return 1 } return 0 } proc itemScale {c x y} { global lastX lastY Vrp set dx [expr { $x - $lastX}] set dy [expr {-$y + $lastY}] set d [expr {sqrt($dx*$dx + $dy*$dy)}] if {$d < 10.} {return} if {$dy < 0} {set zoomIn 1} {set zoomIn 0} if {$zoomIn} { set scale [expr {1.0 + $d/500.0}] } else { set scale [expr {1.0/(1.0 + $d/500.0)}] } set Vrp(Scale) [expr {$Vrp(Scale) * $scale}] $c scale all $Vrp(CX) $Vrp(CY) $scale $scale ConfigureVrp $c set lastX $x set lastY $y return } proc itemStartDrag {c x y} { global lastX lastY set lastX $x set lastY $y $c scan mark $x $y return } proc itemStartScale {c x y} { global lastX lastY set lastX $x set lastY $y return } proc jROTATE {aa i j k l s ag ah tau} { upvar $aa a upvar $ah h upvar $ag g set g [expr {[set a($i,$j)]}] set h [expr {[set a($k,$l)]}] set a($i,$j) [expr {$g - $s * ($h + $g * $tau)}] set a($k,$l) [expr {$h + $s * ($g - $h * $tau)}] return } proc jacobi {aa av ad n} { upvar $aa a upvar $ad d upvar $av v set ERROR [expr {1.0 / 16777216.0}] set converge 0 # cree la matrice unitaire set Un [M_unit] T_M v $Un for {set ip 0} {$ip < $n} {incr ip} { set b($ip) [set a($ip,$ip)] set d($ip) [set a($ip,$ip)] set z($ip) 0.0 } # iteration pour converger set nrot 0 for {set i 0} {$i < 128} {incr i} { set sm 0.0 for {set ip 0} {$ip < $n - 1} {incr ip} { for {set iq [expr {$ip+1}]} {$iq<$n} {incr iq} { set sm [expr {$sm + abs([set a($ip,$iq)])}] } } if {$sm == 0.0} { set converge 1 break } if {$i < 3} { set thresh [expr {0.2 * $sm / ($n * $n)}] } else { set thresh 0.0 } for {set ip 0} {$ip < $n - 1} {incr ip} { for {set iq [expr {$ip+1}]} {$iq<$n} {incr iq} { set g [expr {1000000.0 * abs([set a($ip,$iq)])}] if {$i > 3 && abs([set d($ip)]) + $g == abs([set d($ip)]) && abs([set d($iq)]) + $g == abs([set d($iq)])} { set a($ip,$iq) 0.0 } elseif {abs([set a($ip,$iq)]) > $thresh} { set h [expr {[set d($iq)] - [set d($ip)]}] if {(abs($h) + $g) == abs($h)} { set t [expr {[set a($ip,$iq)] / $h}] } else { set theta [expr {0.5*$h/[set a($ip,$iq)]}] set t [expr {1.0 / (abs($theta) + sqrt(1.0 + $theta**2))}] if {$theta < 0.0} { set t [expr {-1.*$t}] } } set c [expr {1.0 / sqrt(1.0 + $t * $t)}] set s [expr {$t * $c}] set tau [expr {$s / (1.0 + $c)}] set h [expr {$t*[set a($ip,$iq)]}] set z($ip) [expr {[set z($ip)] - $h}] set z($iq) [expr {[set z($iq)] + $h}] set d($ip) [expr {[set d($ip)] - $h}] set d($iq) [expr {[set d($iq)] + $h}] set a($ip,$iq) 0.0 for {set j 0} {$j < $ip} {incr j} { jROTATE a $j $ip $j $iq $s g h $tau } for {set j [expr {$ip+1}]} {$j < $iq} {incr j} { jROTATE a $ip $j $j $iq $s g h $tau } for {set j [expr {$iq+1}]} {$j < $n} {incr j} { jROTATE a $ip $j $iq $j $s g h $tau } for {set j 0} {$j < $n} {incr j} { jROTATE v $j $ip $j $iq $s g h $tau } incr nrot } } } for {set ip 0} {$ip < $n} {incr ip} { set b(ip) [expr {[set b($ip)] + [set z($ip)]}] set d($ip) [set b($ip)] set z($ip) 0.0 } } if { $converge } { return $nrot } else { puts "Error: too many iterations to compute eigen vectors and eigen values." } return } proc jemenommelaetitia {} { Espionne "jemenommelaetitia" } proc jumprot95 {} { foreach Ligne [LesLignesDuFichier $FichierRedondance] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { set Vu($DD) 1 } } foreach Ligne [LesLignesDuFichier $FichierJumeaux] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach DD $LesJumeaux { set JumP($DD) 1 } #verifier s'ils sont deja ensemble ou pas } } proc kgXrefUcscMouse {{Qui ""} {Quoi ""}} { global kgXrefUcscMouse if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists kgXrefUcscMouse($Qui,$Quoi)]} {return $kgXrefUcscMouse($Qui,$Quoi)} if {[info exists kgXrefUcscMouse("EstCharge")]} {return ""} set kgXrefUcscMouse("EstCharge") 1 set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/kgXref.txt" set LesLignes [LesLignesDuFichier $Fichier] set LesHeaders [list KgId mRNA SwAcc SwId Gn RsAcc ProtAcc Des] set kgXrefUcscMouse(ListOf,headers) $LesHeaders foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set KgId [lindex $LesMots 0] set mRNA [lindex $LesMots 1] set SwAcc [lindex $LesMots 2] set SwId [lindex $LesMots 3] set Gn [lindex $LesMots 4] set GnMaj [string toupper $Gn] set GnMin [string tolower $Gn] set RsAcc [lindex $LesMots 5] set ProtAcc [lindex $LesMots 6] set Des [lindex $LesMots 7] regsub -all " " $Des "_" Des lappend kgXrefUcscMouse(ListOf,KgId) $KgId set kgXrefUcscMouse($KgId,Ligne) $Ligne set kgXrefUcscMouse($KgId,mRNA) $mRNA set kgXrefUcscMouse($KgId,SwAcc) $SwAcc set kgXrefUcscMouse($KgId,SwId) $SwId set kgXrefUcscMouse($KgId,Gn) $Gn set kgXrefUcscMouse($KgId,GnMaj) $GnMaj set kgXrefUcscMouse($KgId,GnMin) $GnMin set kgXrefUcscMouse($KgId,RsAcc) $RsAcc set kgXrefUcscMouse($KgId,ProtAcc) $ProtAcc set kgXrefUcscMouse($KgId,Des) $Des lappend kgXrefUcscMouse($mRNA,KgId) $KgId lappend kgXrefUcscMouse($SwAcc,KgId) $KgId lappend kgXrefUcscMouse($SwId,KgId) $KgId lappend kgXrefUcscMouse($Gn,KgId) $KgId lappend kgXrefUcscMouse($GnMaj,KgId) $KgId lappend kgXrefUcscMouse($GnMin,KgId) $KgId lappend kgXrefUcscMouse($RsAcc,KgId) $KgId lappend kgXrefUcscMouse($ProtAcc,KgId) $KgId lappend kgXrefUcscMouse($Des,KgId) $KgId #lien avec le Gn set kgXrefUcscMouse($RsAcc,Gn) $Gn lappend kgXrefUcscMouse($Gn,RsAcc) $RsAcc set kgXrefUcscMouse($ProtAcc,Gn) $Gn lappend kgXrefUcscMouse($Gn,ProtAcc) $ProtAcc set kgXrefUcscMouse($mRNA,Gn) $Gn lappend kgXrefUcscMouse($Gn,mRNA) $mRNA set kgXrefUcscMouse($SwAcc,Gn) $Gn lappend kgXrefUcscMouse($Gn,SwAcc) $SwAcc set kgXrefUcscMouse($RsAcc,GnMaj) $GnMaj lappend kgXrefUcscMouse($GnMaj,RsAcc) $RsAcc set kgXrefUcscMouse($ProtAcc,GnMaj) $GnMaj lappend kgXrefUcscMouse($GnMaj,ProtAcc) $ProtAcc set kgXrefUcscMouse($mRNA,GnMaj) $GnMaj lappend kgXrefUcscMouse($GnMaj,mRNA) $mRNA set kgXrefUcscMouse($SwAcc,GnMaj) $GnMaj lappend kgXrefUcscMouse($GnMaj,SwAcc) $SwAcc set kgXrefUcscMouse($RsAcc,GnMin) $GnMin lappend kgXrefUcscMouse($GnMin,RsAcc) $RsAcc set kgXrefUcscMouse($ProtAcc,GnMin) $GnMin lappend kgXrefUcscMouse($GnMin,ProtAcc) $ProtAcc set kgXrefUcscMouse($mRNA,GnMin) $GnMin lappend kgXrefUcscMouse($GnMin,mRNA) $mRNA set kgXrefUcscMouse($SwAcc,GnMin) $GnMin lappend kgXrefUcscMouse($GnMin,SwAcc) $SwAcc #lien avec la Des set kgXrefUcscMouse($RsAcc,Des) $Des lappend kgXrefUcscMouse($Des,RsAcc) $RsAcc set kgXrefUcscMouse($ProtAcc,Des) $Des lappend kgXrefUcscMouse($Des,ProtAcc) $ProtAcc set kgXrefUcscMouse($mRNA,Des) $Des lappend kgXrefUcscMouse($Des,mRNA) $mRNA set kgXrefUcscMouse($SwAcc,Des) $Des lappend kgXrefUcscMouse($Des,SwAcc) $SwAcc #lien entre Gn et Des lappend kgXrefUcscMouse($Gn,Des) $Des lappend kgXrefUcscMouse($Des,Gn) $Gn lappend kgXrefUcscMouse($GnMaj,Des) $Des lappend kgXrefUcscMouse($Des,GnMaj) $GnMaj lappend kgXrefUcscMouse($GnMin,Des) $Des lappend kgXrefUcscMouse($Des,GnMin) $GnMin #lien entre nucleique lappend kgXrefUcscMouse($RsAcc,mRNA) $mRNA lappend kgXrefUcscMouse($mRNA,RsAcc) $RsAcc #lien entre proteique lappend kgXrefUcscMouse($ProtAcc,SwAcc) $SwAcc lappend kgXrefUcscMouse($SwAcc,ProtAcc) $ProtAcc #lien entre nucleique et proteique lappend kgXrefUcscMouse($RsAcc,SwAcc) $SwAcc lappend kgXrefUcscMouse($SwAcc,RsAcc) $RsAcc lappend kgXrefUcscMouse($RsAcc,ProtAcc) $ProtAcc lappend kgXrefUcscMouse($ProtAcc,RsAcc) $RsAcc lappend kgXrefUcscMouse($mRNA,SwAcc) $SwAcc lappend kgXrefUcscMouse($SwAcc,mRNA) $mRNA lappend kgXrefUcscMouse($mRNA,ProtAcc) $ProtAcc lappend kgXrefUcscMouse($ProtAcc,mRNA) $mRNA } return [kgXrefUcscMouse $Qui $Quoi] } proc kill_balloon {} { global Bulle after cancel $Bulle(id) if {[winfo exists .balloon] == 1} { destroy .balloon } set Bulle(set) 0 } proc killjid {} { set Ll [LesLignesDuFichier jid] set Lid [list] foreach l [lrange $Ll 1 end] { set l [string trim $l] regsub -all { +} $l " " l set id [lindex [split $l " "] 0] lappend Lid $id if {[llength $Lid] > 100} { exec scancel {*}$Lid set Lid {} } } exit } proc knownToEnsemblUcscMouse {{Qui ""} {Quoi ""}} { global knownToEnsemblUcscMouse if {$Qui==""} { set Qui "ListOf" ; set Quoi "headers" } if {[info exists knownToEnsemblUcscMouse($Qui,$Quoi)]} {return $knownToEnsemblUcscMouse($Qui,$Quoi)} if {[info exists knownToEnsemblUcscMouse("EstCharge")]} {return ""} set knownToEnsemblUcscMouse("EstCharge") 1 set Fichier "/genomics/link/UCSCGenomes/Mus_musculus/database/knownToEnsembl.txt" set LesLignes [LesLignesDuFichier $Fichier] set LesHeaders [list Acc EnsTran] set knownToEnsemblUcscMouse(ListOf,headers) $LesHeaders foreach Ligne $LesLignes { set LesMots [split $Ligne "\t"] set Acc [lindex $LesMots 0] set EnsTranComp [lindex $LesMots 1] set EnsTran [lindex [split $EnsTranComp "."] 0] lappend knownToEnsemblUcscMouse($Acc,EnsTran) $EnsTran lappend knownToEnsemblUcscMouse($EnsTran,Acc) $Acc } return [knownToEnsemblUcscMouse $Qui $Quoi] } proc krs {} { set ali [Mafft_AddSequences D_WithModules.tfa syk.tfa] set o [open kd.tfa w] puts $o [join $ali \n] close $o exit } proc krs2 {} { global TDesPCI ListePDB set s Q15046 foreach p $ListePDB { lassign [set TDesPCI($s,$p)] pc l1 l2 set pc [expr {100.*$pc}] puts "$p [format %6.2f $pc] $l2" } exit } proc lanceAjoutCons {ficMacsims} { global PipeCollection set PipeCollection 1 AjoutConservationMacsims $ficMacsims Cluster return 1 } proc lanceblast5000ForMS2PHdb {} { foreach pab [ListeDesPABs] { puts "traite $pab" set ficBl5000 [file join [RepertoireDuGenome] "blastp5000" $pab] if { ![file exists $ficBl5000] } { puts "lance blastp pour $pab" set ficIn [file join [RepertoireDuGenome] "prottfa" $pab] set cmd "blastall -p blastp -d protein -v 5000 -b 0 -e 0.001 -i $ficIn -o $ficBl5000" eval exec $cmd } } return 1 } proc land {a b} { set la {} foreach e $a { set Vu($e) 1 } foreach e $b { if {[info exists Vu($e)]} { lappend la $e } } return $la } proc landInd {a b} { set la {} foreach e $a { set n [lsearch $b $e] if {$n != -1} { # puts "commun : $e" lappend la $n } } return $la } proc lengthFilter {sequence {XminLength 200} {minLength 100}} { # initialize return value array set retArray {sequence "" range {} keep -1 messages {}} # check if sequence if masked set haveX [regexp -nocase {x} $sequence] # find sequence ranges without mask set noMaskRanges [regexp -indices -inline -all -nocase {[^x]+} $sequence] # set return value if {$haveX} { # find the largest range without mask set largestRange {} set largestRangeLength 0 foreach r $noMaskRanges { set length [expr [lindex $r 1] - [lindex $r 0] + 1] if {$length > $largestRangeLength} { set largestRange $r set largestRangeLength $length } } if {$largestRangeLength >= $XminLength} { set lIdx [lindex $largestRange 0] set rIdx [lindex $largestRange 1] set retArray(sequence) [string range $sequence $lIdx $rIdx] set retArray(range) $largestRange set retArray(keep) 1 lappend retArray(messages) "Selecting sequence from [expr $lIdx + 1] to [expr $rIdx + 1], length $largestRangeLength" } else { # initialize return value set retArray(sequence) $sequence set retArray(range) [list 0 [expr [string length $sequence] - 1]] set retArray(keep) 0 lappend retArray(messages) "Length $largestRangeLength < XminLength $XminLength" } } else { set length [string length $sequence] if {$length >= $minLength} { set retArray(sequence) $sequence set retArray(range) [list 0 [expr [string length $sequence] - 1]] set retArray(keep) 1 lappend retArray(messages) "Selecting whole sequence, length $length" } else { set retArray(sequence) $sequence set retArray(range) [list 0 [expr [string length $sequence] - 1]] set retArray(keep) 0 lappend retArray(messages) "Length $length < minLength $minLength" } } if {$retArray(keep) == -1} { puts "ERROR: Problem with length filter" exit 1 } return [array get retArray] } proc lequal {a b} { set rep 1 foreach e $a f $b { if {$e != $f} { set rep 0 break } } return $rep } proc lesOrthologs {nomRepertoireBlast {listOrgas ""}} { if {$listOrgas==""} {set liste {"Saccharomyces cerevisiae" "Xenopus tropicalis"}} GiveMeThisOrthologs $nomRepertoireBlast $liste "toLogs" } proc lesOrthologsTous {nomRepertoireBlast} { #set liste [ConcernedOrganisms "proteomeToBlast.fasta"] set liste {"Anopheles gambiae" "Alvinella pompejana" "Arabidopsis thaliana" "Caenorhabditis elegans" "Dictyostelium discoideum" "Drosophila melanogaster" "Encephalitozoon cuniculi" "Entamoeba histolytica" "Gallus gallus" "Giardia lamblia" "Homo sapiens" "Mus musculus" "Nematostella vectensis" "Plasmodium falciparum" "Saccharomyces cerevisiae" "Schistosoma japonicum" "Strongylocentrotus purpuratus" "Trypanosoma brucei" "Tetraodon nigroviridis" "Theileria parva" "Xenopus tropicalis"} GiveMeThisOrthologs2 $nomRepertoireBlast $liste "toLogs" } proc lesParalogs {nomRepertoireBlast {listOrgas ""}} { if {$listOrgas==""} {set liste {"Saccharomyces cerevisiae" "Xenopus tropicalis"}} GiveMeThisParalogs $nomRepertoireBlast $liste "toLogs" } proc lesParalogsTous {nomRepertoireBlast} { set liste [ConcernedOrganisms "proteomeToBlast.fasta"] #set liste {"Anopheles gambiae" "Alvinella pompejana" "Arabidopsis thaliana" "Caenorhabditis elegans" "Dictyostelium discoideum" "Drosophila melanogaster" "Encephalitozoon cuniculi" "Entamoeba histolytica" "Gallus gallus" "Giardia lamblia" "Homo sapiens" "Mus musculus" "Nematostella vectensis" "Plasmodium falciparum" "Saccharomyces cerevisiae" "Schistosoma japonicum" "Strongylocentrotus purpuratus" "Trypanosoma brucei" "Tetraodon nigroviridis" "Theileria parva" "Xenopus tropicalis"} GiveMeThisParalogs2 $nomRepertoireBlast $liste "toLogs" } proc light_color3f {a b c} { set le [list $a $b $c 1.0] glMaterialfv GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE $le glMaterialfv GL_FRONT_AND_BACK GL_SPECULAR [list 1.0 1.0 1.0 1.0] glMaterialfv GL_FRONT_AND_BACK GL_EMISSION [list 0.0 0.0 0.0 1.0] glMaterialfv GL_FRONT_AND_BACK GL_SHININESS 100. return } proc light_color3fv {a} { lappend a 1.0 glMaterialfv GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE $a glMaterialfv GL_FRONT GL_SPECULAR [list 1.0 1.0 1.0 1.0] #glMaterialfv GL_FRONT GL_EMISSION [list 0.0 0.0 0.0 1.0] glMaterialfv GL_FRONT GL_SHININESS 100. return } proc lireFichierIds {Fichier} { set Liste {} if {$Fichier ne ""} { set f [open $Fichier r] while {[gets $f line] >= 0} { lappend Liste $line } close $f } return $Liste } proc listMean {list} { set sum 0 foreach e $list {incr sum $e} return [expr double($sum) / [llength $list]] } proc listePdbs {{prot ""}} { if {$prot==""} {Espionne "vous devez indiquer la sequence souhaiter:"; exit} #set r [glob -directory [RepertoireDuGenome]/pdb/$prot] set FichierDepart [RepertoireDuGenome]/pdb/$prot foreach Ligne [LesLignesDuFichier $FichierDepart] { if {[regexp {^>(\w*)} $Ligne tmp access]} { lappend listSeq $access } } return $listSeq } proc listedes931 {Fichier931etjum} { foreach Ligne [LesLignesDuFichier $Fichier931etjum] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] set JR [lindex $LesJumeaux 0] lappend Liste $JR } Espionne [llength $Liste] return $Liste } proc listeles30ok {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set Ligne [split $Ligne "\t"] set DD [lindex $Ligne 1] lappend Liste $DD } return $Liste } proc ll {} { puts [ContenuDuFichier [RepertoireDuGenome]] } proc llower {l} { set o [list] foreach e $l { lappend o [string tolower $e] } return $o } proc lmPDBSearch {} { package require http ::http::config -urlencoding utf-8 # set xml "\" 0 head org.pdb.query.simple.EnzymeClassificationQuery Enzyme Classification Search : EC=6.1.1.* 6.1.1.* 1 and head org.pdb.query.simple.ExpTypeQuery Experimental Method is X-RAY X-RAY \"" set xml " B0907 org.pdb.query.simple.ExpTypeQuery Experimental Method Search : Experimental Method=SOLID-STATE NMR SOLID-STATE NMR " set url "http://www.rcsb.org/pdb/rest/search/" # set url "http://lbgi.fr" set query [::http::formatQuery data "$xml"] puts "[string range $query 0 end]" #set query [string range $query 6 end] # set rep [HttpCopy $url -query $query] set rep [::http::geturl $url -query $query] exit puts "$rep" puts "[info body ::http::geturl]" #set rep [::http::data [::http::geturl $url]] #exit #set rep [::http::data [::http::geturl $url -query $query]] exit } proc ln_arraytype_analysissoftware {} { WithWebService "Gx" 0 set LesTetes "pk_arraytype,pk_analysissoftware" #set LesChipAcLesAs [list Mouse430_2 Mouse430A_2 MG_U74Av2 MG_U74Bv2 MG_U74Cv2 MG_U74ABv2 MG_U74ABCv2 HG-U133_Plus_2 HG-U133A HG-U133B HG_U95Av2 HG_U95A HG_U95B HG_U95C HG_U95D HG_U95E HG_U95ABCDE HG_U95Av2BCDE RG_U34A Chicken DrosGenome1 Zebrafish Xenopus_laevis Celegans] set LesChipAcLesAs [list Celegans] set LesAs [list RMA gcRMA MAS5.0 dChip PLIER VSN] foreach Chip $LesChipAcLesAs { set PkAt [GxDbSqlExec "select pk_arraytype from arraytype where name='$Chip';" "GetFirstValue"] foreach As $LesAs { set PkAs [GxDbSqlExec "select pk_analysissoftware from analysissoftware where name='$As';" "GetFirstValue"] set Ligne "$PkAt,$PkAs" set status [GxDbSqlExec "insert into ln_arraytype_analysissoftware ($LesTetes) values ($Ligne);"] } } } proc log_gamma {x} { if {$x <= 0} { error "Invalid input" } if {$x < 12.0} { return [expr {log(abs([gamma $x]))}] } # Abramowitz and Stegun 6.1.41 # Asymptotic series should be good to at least 11 or 12 figures # For error analysis, see Whittiker and Watson # A Course in Modern Analysis (1927), page 252 set c [list 1.0/12.0 -1.0/360.0 1.0/1260.0 -1.0/1680.0 1.0/1188.0 -691.0/360360.0 1.0/156.0 -3617.0/122400.0 ] set z [expr {1.0/($x*$x)}] set sum [lindex $c 7] for {set i 6} {$i >= 0} {incr i -1} { set sum [expr $sum * $z] set sum [expr $sum + [lindex $c $i]] } set series [expr $sum/$x] set halfLogTwoPi 0.91893853320467274178032973640562 set logGamma [expr {($x - 0.5)*log($x) - $x + $halfLogTwoPi + $series}] return $logGamma } proc logrr {what w h} { puts "\n$what" puts "request $w $h" puts "actual [winfo width .t] [winfo height .t]" puts "full [wm attributes .t -fullscreen]" puts "zoomed [wm attributes .t -zoomed]" return } proc longueurMoyenneSequencesFichier {fichierTFA} { array set tfa [readFasta $fichierTFA] set longueurTotale 0 set nombreDeSequences [llength $tfa(index)] foreach seqIdx $tfa(index) { incr longueurTotale [string length [join [lrange $tfa($seqIdx) 1 end] {}]] } return [expr $longueurTotale / $nombreDeSequences] } proc lor {a b {what all}} { if {$what eq "from1" || $what eq "all"} { foreach elt $b { set tb($elt) 1 } set l1 {} foreach elt $a { if {! [info exists tb($elt)]} { lappend l1 $elt } } } if {$what eq "from2" || $what eq "all"} { foreach elt $a { set ta($elt) 1 } set l2 {} foreach elt $b { if {! [info exists ta($elt)]} { lappend l2 $elt } } } switch $what { "from1" {return $l1} "from2" {return $l2} "all" {return [concat $l1 $l2]} } } proc lorga {} { global TDesOrganismes SDG LNDG TDuLineage foreach g $LNDG { set Lo [list] foreach s [set SDG($g)] { lappend Lo [set TDesOrganismes($s)] } set Lo [lsort -unique $Lo] puts "groupe $g\n[join $Lo \n]\n" } return } proc lscan {liste elt} { set i 0 foreach s $liste { if {[regexp $elt $s]} {lappend lhit $i} incr i } return $lhit } proc lsearchNodeKeyGraphFilter {args} { # lsearchNodeKeyGraphFilter ? lsearch_options ? node_key pattern foreach {key pattern graph node} [lrange $args end-3 end] {} regsub -all {\"} $pattern {\\\0} pattern set lsearchOptions [lrange $args 0 end-4] if {[$graph node keyexists $node $key] && [eval "lsearch $lsearchOptions \[$graph node get $node $key\] \"$pattern\""] != -1} { return 1 } return 0 } proc lso {} { set L [LesLignesDuFichier lso] set FichierCommande "usethisname_/genomics/link/ProGS/atelier/Arnaud/AFaire20061010.txt" CommandeOligos $L $FichierCommande } proc lsortBySublistsLengths {a b} { set lengthA [llength $a] set lengthB [llength $b] if {$lengthA < $lengthB} { return -1 } elseif {$lengthA > $lengthB} { return 1 } return 0 } proc lsqsup {sys p1} { # activer lsqman par : setusf # if {! [file exists "${p1}.pdb"]} { set pdb [TextePDB $p1 ALL OnTheWeb] set f [open "${p1}.pdb" w] puts $f $pdb close $f } else { set pdb [ContenuDuFichier "${p1}.pdb"] } set o [open "|lsqman " w] #fconfigure $o -buffering line #fileevent $o readable [list LogSup $o] file delete ${sys}1.pdb ${sys}2.pdb set cmd "re m1 ${p1}.pdb re m2 ${sys}_mon1.pdb br m1 A m2 A 50 25 100 im m1 A1-999 m2 A1-999 ap m1 m2 wr m2 ${sys}1.pdb re m3 ${sys}_mon2.pdb br m1 B m3 A 50 25 100 im m1 B1-999 m3 A1-999 ap m1 m3 wr m3 ${sys}2.pdb qu " puts $o $cmd flush $o catch {close $o} set l2 [ContenuDuFichier ${sys}2.pdb] set l2 [string map {" A " " B "} $l2] set L2 [split $l2 \n] set L1 [LesLignesDuFichier ${sys}1.pdb] set Ldim [lrange $L1 0 end-1] lappend Ldim "TER " lappend Ldim {*}$L2 set f [open ${sys}_model.pdb w] puts $f [join $Ldim \n] close $f puts "" puts "All done !!" puts "" exit } proc lsublist {l n} { set nl {} foreach e $l { lappend nl [lindex $e $n] } return $nl } proc lunique {l} { set res {} foreach e $l { if {! [info exists t($e)]} { set t($e) 1 lappend res $e } } return $res } proc lupper {l} { set o [list] foreach e $l { lappend o [string toupper $e] } return $o } proc mRNAChoisiOuPas {FichierDesPABs FichierSortie} { #FichierDesPABs=fiches/LesPABsSansJumeauxSeqSansCourts set L [CreeListePourFichierAUneColonne $FichierDesPABs] Espionne [llength $L] set Zero 0; set Un 0; set NoHuman 0 foreach Nom $L { set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] set Orga [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] if {$AccessmRNA=="" || $AccessmRNA=="NOMRNA"} { set mRNA 0 incr Zero } elseif {$Orga=="Homo sapiens"} {set mRNA 1; incr Un; lappend LesAccessmRNAHuman $AccessmRNA} if {$AccessmRNA!="NOMRNA" && $AccessmRNA!="" && $Orga!="Homo sapiens"} {set mRNA 1; incr NoHuman; lappend LesAccessmRNANotHuman $AccessmRNA} lappend Liste "$Nom\t$mRNA" } Espionne [llength $Liste] set ListeTriee [lsort -unique $Liste] Espionne [llength $ListeTriee] Espionne "Nb sans: $Zero - Nb mrna_human: $Un - Nb mrna_nothuman: $NoHuman" #set ListeTriee2 [lsort -index 1 $ListeTriee] SauveLesLignes $ListeTriee dans $FichierSortie Espionne "nb mrna human avt tri : [llength $LesAccessmRNAHuman]" set LesAccessmRNAHumanUnique [lsort -unique $LesAccessmRNAHuman] Espionne "nb mrna human sans doublons : [llength $LesAccessmRNAHumanUnique]" Espionne "nb mrna NOT human avt tri : [llength $LesAccessmRNANotHuman]" set LesAccessmRNANotHumanUnique [lsort -unique $LesAccessmRNANotHuman] Espionne "nb mrna NOT human sans doublons : [llength $LesAccessmRNANotHumanUnique]" } proc mRNAHsapLocalisation {Nom FileExonicMap {mRNAouBox mRNA}} { set FileEM $FileExonicMap if {![file exists $FileEM]} {return} set TailleFragment 100000 set LeTexte {} set LesRangs [InterrogeFichierExonicMap $FileEM LesRangs] set BestLoc "BestLoc" set InfoLoc "MonoLoc" if {1 < [llength $LesRangs]} {set InfoLoc "PolyLoc";set BestLoc "BestPolyLoc"} foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FileEM Rang $Rang Chromosome] set Contig [InterrogeFichierExonicMap $FileEM Rang $Rang Contig ] set LesContigsFrag [InterrogeFichierExonicMap $FileEM Rang $Rang ContigFragments] set nChiffresFragContig [string length [lindex $LesContigsFrag 0]] set NbExonicAreas [InterrogeFichierExonicMap $FileEM Rang $Rang NbExonicAreas] if {$NbExonicAreas <= 0} {continue} set LesRegions {} for {set i 1} {$i <= $NbExonicAreas} {incr i} { set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i nAli ] set Id [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $i Identity] lappend LesRegions [list $i $nAli $Id] } set LesRegions [lsort -index 1 -real -decreasing [lsort -index 2 -real -decreasing $LesRegions]] set nAliMax [lindex [lindex $LesRegions 0] 1] set EstCeLePremier 1 foreach LaRegion $LesRegions { set Info "" if {$EstCeLePremier} {set Info $BestLoc;set EstCeLePremier 0} set ExonArea [lindex $LaRegion 0] set nAli [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea nAli ] set Id [expr [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Identity]/100] set DQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DQ ] set FQ [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FQ ] set DS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea DS ] set FS [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea FS ] set Orient [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Orientation] set Sens [InterrogeFichierExonicMap $FileEM Rang $Rang ExonArea $ExonArea Sens ] set Fragments "" if {0 < $nChiffresFragContig} { set FragmentMin [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Mini $DS $FS] / $TailleFragment)]] set FragmentMax [format "%${nChiffresFragContig}.${nChiffresFragContig}d" [expr round([Maxi $DS $FS] / $TailleFragment)]] set Fragments $FragmentMin if {$FragmentMin != $FragmentMax} {set Fragments [string trim "$FragmentMin $FragmentMax"]} } set LaLocSurLeChrom [CoordonneesSurChromosome $Contig $DS $FS $Sens] set DChrom [lindex $LaLocSurLeChrom 1] set FChrom [lindex $LaLocSurLeChrom 2] set SensChrom [lindex $LaLocSurLeChrom 3] set BandesCyto {} foreach LaBC [LesBandesCytologiquesDeLaRegion [NumeroDuChromosome $Chromosome] $DChrom $FChrom] { lappend BandesCyto [lindex $LaBC 0] } set BandesCyto [join $BandesCyto " "] set EMax "" set E "" set Ligne "$Nom\t$InfoLoc\t$EMax\t$E\t$nAliMax\t$nAli\t$Id\t$DQ\t$FQ\t$Chromosome\t$DChrom\t$FChrom\t$SensChrom\t$Contig\t$Fragments\t$DS\t$FS\t$Orient\t$Sens\t$BandesCyto\t$Info" if {$mRNAouBox == "mRNA"} {set Ligne "$Ligne\tmrnatfa_Homo_sapiens"} lappend LeTexte $Ligne } } InterrogeFichierExonicMap unset return $LeTexte } proc mama {} { package require sqlite3 set db "root" sqlite3 $db misynpat.sql set Lm [$db eval {select distinct(ldisease) from disease}] set o [open maladies.txt w] puts $o [join $Lm \n] close $o $db close exit } proc mapuce {} { LoadTkAndPackages set w .puce frame $w -background black grid $w -row 0 -column 0 -sticky news set c $w.can canvas $c -background black -width 800 -height 800 grid $c -row 0 -column 0 -sticky news set off 20 set diam 600 set ray [expr {$diam/2}] set cenx [expr {$off+$ray}] set ceny [expr {$off+$ray}] $c create oval $off $off [expr {$off+$diam}] [expr {$off+$diam}] -outline white -width 1 for {set i 0} {$i < 5} {incr i} { set ang [expr {(72.*$i)*[2Pi]/360.}] set p($i,x) [expr {int($ray*cos($ang)+$cenx)}] set p($i,y) [expr {int($ray*sin($ang)+$ceny)}] $c create oval $p($i,x) $p($i,y) $p($i,x) $p($i,y) -width 15 -fill white -outline white } # trace etoile for {set i 0} {$i < 5} {incr i} { set dep [expr {$i+2}] if {$dep >= 5} {set dep [expr {$dep - 5}]} set fin [expr {$i-2}] if {$fin < 0} {set fin [expr {5 + $fin}]} # etoile $c create line $p($i,x) $p($i,y) $p($dep,x) $p($dep,y) -fill white -tags etoile $c create line $p($i,x) $p($i,y) $p($fin,x) $p($fin,y) -fill white -tags etoile # le verre set vecxd [expr {int(($p($dep,x)-$p($i,x))*0.2+$p($i,x))}] set vecyd [expr {int(($p($dep,y)-$p($i,y))*0.2+$p($i,y))}] set vecxf [expr {int(($p($fin,x)-$p($i,x))*0.2+$p($i,x))}] set vecyf [expr {int(($p($fin,y)-$p($i,y))*0.2+$p($i,y))}] $c create polygon $p($i,x) $p($i,y) $vecxd $vecyd $vecxf $vecyf -width 20 -fill grey -tags verre set midxd [expr {int(($p($i,x)+$p($dep,x))/2)}] set midyd [expr {int(($p($i,y)+$p($dep,y))/2)}] $c create line $p($i,x) $p($i,y) $midxd $midyd -width 10 -fill cyan -tags bcyan set midxf [expr {int(($p($i,x)+$p($fin,x))/2)}] set midyf [expr {int(($p($i,y)+$p($fin,y))/2)}] $c create line $p($i,x) $p($i,y) $midxf $midyf -width 10 -fill red -tags bred } set ::FaireLireNon 0 $c raise verre $c itemconfig verre -fill black -width 0 $c itemconfig bred -fill black -width 0 $c itemconfig bcyan -fill black -width 0 $c raise etoile PrintCanvas $c "" etoile.png FaireLire "next" $c itemconfig verre -fill grey -width 20 $c raise verre PrintCanvas $c "" verre.png FaireLire "next" $c itemconfig bred -fill red -width 15 $c itemconfig bcyan -fill cyan -width 15 $c raise bred bcyan $c lower etoile PrintCanvas $c "" all.png FaireLire "next" $c itemconfig bred -width 25 $c itemconfig bcyan -width 5 PrintCanvas $c "" desusdessous.png FaireLire "next" $c configure -width 1500 -height 1000 # profil droit $c delete all set Lverre [list 50 150 500 150 500 650 250 650 250 450 50 350] $c create polygon $Lverre -fill grey -tags verre set Lgauche [list 300 300 800 580 1000 580 1200 300] $c create line $Lgauche -width 10 -tags gauche -fill cyan set Ldroit [list 300 300 800 20 1000 20 1200 300] $c create line $Ldroit -width 50 -tags droit -fill red $c raise gauche $c raise verre $c raise droit PrintCanvas $c "" profil_droit.png FaireLire "next" # profil gauche $c delete all set Lverre [list 50 150 500 150 500 650 250 650 250 450 50 350] set tmp [list] foreach {x y} $Lverre { lappend tmp [expr {1500-$x}] $y } set Lverre $tmp $c create polygon $Lverre -fill grey -tags verre set Lgauche [list 300 300 800 580 1000 580 1200 300] set tmp [list] foreach {x y} $Lgauche { lappend tmp [expr {1500-$x}] $y } set Lgauche $tmp $c create line $Lgauche -width 50 -tags gauche -fill cyan set Ldroit [list 300 300 800 20 1000 20 1200 300] set tmp [list] foreach {x y} $Ldroit { lappend tmp [expr {1500-$x}] $y } set Ldroit $tmp $c create line $Ldroit -width 10 -tags droit -fill red $c raise droit $c raise verre $c raise gauche PrintCanvas $c "" profil_gauche.png FaireLire "next" return } proc marieid {} { set Ll [LesLignesDuFichier ListeOG.txt] foreach l $Ll { regsub -all {\t+} $l "\t" l set Lv [split $l "\t"] lappend Lid [lindex $Lv 2] } set o [open marie.id w] puts $o [join $Lid \n] close $o exit } proc matDefine {FichierSequence} { set FileIn [open "$FichierSequence.txt" "r"] set A0 0 set T0 0 set C0 0 set G0 0 set A1 0 set T1 0 set C1 0 set G1 0 set A2 0 set T2 0 set C2 0 set G2 0 set A3 0 set T3 0 set C3 0 set G3 0 set A4 0 set T4 0 set C4 0 set G4 0 set A5 0 set T5 0 set C5 0 set G5 0 set A6 0 set T6 0 set C6 0 set G6 0 set A7 0 set T7 0 set C7 0 set G7 0 set A8 0 set T8 0 set C8 0 set G8 0 set A9 0 set T9 0 set C9 0 set G9 0 set A10 0 set T10 0 set C10 0 set G10 0 set A11 0 set T11 0 set C11 0 set G11 0 set A12 0 set T12 0 set C12 0 set G12 0 set A13 0 set T13 0 set C13 0 set G13 0 set A14 0 set T14 0 set C14 0 set G14 0 set A15 0 set T15 0 set C15 0 set G15 0 set A16 0 set T16 0 set C16 0 set G16 0 set A17 0 set T17 0 set C17 0 set G17 0 set A18 0 set T18 0 set C18 0 set G18 while { [gets $FileIn Ligne] >=0 } { set seqSplit [split $Ligne ""] if {$seqSplit[0] = "A"} { incr A0 } if {$seqSplit[0] = "T"} { incr T0 } if {$seqSplit[0] = "C"} { incr C0 } if {$seqSplit[0] = "G"} { incr G0 } if {$seqSplit[1] = "A"} { incr A1 } if {$seqSplit[1] = "T"} { incr T1 } if {$seqSplit[1] = "C"} { incr C1 } if {$seqSplit[1] = "G"} { incr G1 } if {$seqSplit[2] = "A"} { incr A2 } if {$seqSplit[2] = "T"} { incr T2 } if {$seqSplit[2] = "C"} { incr C2 } if {$seqSplit[2] = "G"} { incr G2 } if {$seqSplit[3] = "A"} { incr A3 } if {$seqSplit[3] = "T"} { incr T3 } if {$seqSplit[3] = "C"} { incr C3 } if {$seqSplit[3] = "G"} { incr G3 } if {$seqSplit[4] = "A"} { incr A4 } if {$seqSplit[4] = "T"} { incr T4 } if {$seqSplit[4] = "C"} { incr C4 } if {$seqSplit[4] = "G"} { incr G4 } if {$seqSplit[5] = "A"} { incr A5 } if {$seqSplit[5] = "T"} { incr T5 } if {$seqSplit[5] = "C"} { incr C5 } if {$seqSplit[5] = "G"} { incr G5 } if {$seqSplit[6] = "A"} { incr A6 } if {$seqSplit[6] = "T"} { incr T6 } if {$seqSplit[6] = "C"} { incr C6 } if {$seqSplit[6] = "G"} { incr G6 } if {$seqSplit[7] = "A"} { incr A7 } if {$seqSplit[7] = "T"} { incr T7 } if {$seqSplit[7] = "C"} { incr C7 } if {$seqSplit[7] = "G"} { incr G7 } if {$seqSplit[8] = "A"} { incr A8 } if {$seqSplit[8] = "T"} { incr T8 } if {$seqSplit[8] = "C"} { incr C8 } if {$seqSplit[8] = "G"} { incr G8 } if {$seqSplit[9] = "A"} { incr A9 } if {$seqSplit[9] = "T"} { incr T9 } if {$seqSplit[9] = "C"} { incr C9 } if {$seqSplit[9] = "G"} { incr G9 } if {$seqSplit[10] = "A"} { incr A10 } if {$seqSplit[10] = "T"} { incr T10 } if {$seqSplit[10] = "C"} { incr C10 } if {$seqSplit[10] = "G"} { incr G10 } if {$seqSplit[11] = "A"} { incr A11 } if {$seqSplit[11] = "T"} { incr T11 } if {$seqSplit[11] = "C"} { incr C11 } if {$seqSplit[11] = "G"} { incr G11 } if {$seqSplit[12] = "A"} { incr A12 } if {$seqSplit[12] = "T"} { incr T12 } if {$seqSplit[12] = "C"} { incr C12 } if {$seqSplit[12] = "G"} { incr G12 } if {$seqSplit[13] = "A"} { incr A13 } if {$seqSplit[13] = "T"} { incr T13 } if {$seqSplit[13] = "C"} { incr C13 } if {$seqSplit[13] = "G"} { incr G13 } if {$seqSplit[14] = "A"} { incr A14 } if {$seqSplit[14] = "T"} { incr T14 } if {$seqSplit[14] = "C"} { incr C14 } if {$seqSplit[14] = "G"} { incr G14 } if {$seqSplit[15] = "A"} { incr A15 } if {$seqSplit[15] = "T"} { incr T15 } if {$seqSplit[15] = "C"} { incr C15 } if {$seqSplit[15] = "G"} { incr G15 } if {$seqSplit[16] = "A"} { incr A16 } if {$seqSplit[16] = "T"} { incr T16 } if {$seqSplit[16] = "C"} { incr C16 } if {$seqSplit[16] = "G"} { incr G16 } if {$seqSplit[17] = "A"} { incr A17 } if {$seqSplit[17] = "T"} { incr T17 } if {$seqSplit[17] = "C"} { incr C17 } if {$seqSplit[17] = "G"} { incr G17 } if {$seqSplit[18] = "A"} { incr A18 } if {$seqSplit[18] = "T"} { incr T18 } if {$seqSplit[18] = "C"} { incr C18 } if {$seqSplit[18] = "G"} { incr G18 } } close $FileIn Espionne "A: $A0 $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9 $A10 $A0 $A11 $A12 $A13 $A14 $A15 $A16 $A17 $A18" Espionne "T: $T0 $T1 $T2 $T3 $T4 $T5 $T6 $T7 $T8 $T9 $T10 $T0 $T11 $T12 $T13 $T14 $T15 $T16 $T17 $T18" Espionne "C: $C0 $C1 $C2 $C3 $C4 $C5 $C6 $C7 $C8 $C9 $C10 $C0 $C11 $C12 $C13 $C14 $C15 $C16 $C17 $C18" Espionne "G: $G0 $G1 $G2 $G3 $G4 $G5 $G6 $G7 $G8 $G9 $G10 $G0 $G11 $G12 $G13 $G14 $G15 $G16 $G17 $G18" } proc matecg {} { set tot 78089 set Lv [list 46 447 75505 1263 828] foreach v $Lv { incr tmp $v } puts "tot $tot $tmp" set n 23 set sx 0.0 set sr 0 while {1} { puts "n=$n" foreach v $Lv { set x [expr {double($v)/$tot*$n}] set sx [expr {$sx+$x}] set r [expr {round($x)}] set i [expr {int($x)}] puts "$v $x $r $i" incr sr $r incr si $i } puts "$sx" puts "$sr" puts "$si" if {$sr < $n} { incr n } else { break } puts "" } exit } proc maxSNP {} { CanalSqlUcscHuman set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "maxSNP|$timestamp : Start" set max 0 foreach chrom {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y} { Espionne "maxSNP|$timestamp : Scanning chromosome $chrom" set oldEnd 0 foreach Ligne [SqlExec "SELECT chrom, chromStart, chromEnd FROM ucschuman.snp130 WHERE chrom='chr$chrom' ORDER BY chromStart ASC" "-list"] { ScanLaListe $Ligne chrom chromStart chromEnd set distance [expr $chromStart - $oldEnd] if {$distance > $max} { set max $distance Espionne "====> New max = $max" } set oldEnd $chromEnd } } set timestamp [clock format [clock seconds] -format "%H:%M:%S"] Espionne "maxSNP|$timestamp : End. Maximum distance is $max" } proc mimeGetPartName {token} { set params [mime::getproperty $token params] set i [lsearch -exact $params name] if {$i >= 0} { incr i return [lindex $params $i] } return "" } proc mimeGetParts {token} { set parts {} if {! [catch {mime::getproperty $token parts}]} { foreach p [mime::getproperty $token parts] { lappend parts $p foreach p1 [mimeGetParts $p] { lappend parts $p1 } } } return $parts } proc mimeSaveFile {token} { global outdir debug typeExts totalAttachments #get the attachment name set name [mimeGetPartName $token] #if attachment does not have a name return. if {! [string length $name]} { return } set name [string map {\\ _ / _ : _ * _ ? _ \" _ < _ > _ | _} $name] #make unique filename #break up file name if {[llength [split $name .]] > 1} { set fn [join [lrange [split $name .] 0 end-1] .] set ext [lindex [split $name .] end] } else { set fn $name set ext txt } if {[lsearch -glob $typeExts "[mime::getproperty $token content] *"] > -1} { set ext [lindex [lsearch -glob -inline $typeExts "[mime::getproperty $token content] *"] 1] } #filename set file [file normalize [file join $outdir $fn.$ext]] #create a new filename for {set i 0} {[file exists $file]} {incr i} { set file [file join $outdir $fn.$i.$ext] } #save attachment set f [open $file w+] mime::copymessage $token $f close $f #decode attachment decode $file incr totalAttachments return } proc minMaxRangeOfList {list} { if {[llength $list] == 0} {return ""} set min [lindex $list 0] set max [lindex $list 1] foreach i [lrange $list 1 end] { if {$i < $min} {set min $i} if {$i > $max} {set max $i} } return [list $min $max] } proc mlog {} { set Ll [LesLignesDuFichier "mlog"] foreach l $Ll { set l [string trim $l] while {[regsub -all " " $l " " tmp]} {set l $tmp} set Le [split $l " "] lappend meme [lindex $Le 6] } set meme [lsort -unique $meme] puts "[join $meme "\n"]" exit } proc modifFic {file} { set fileOut [file join [RepertoireDuGenome] "msf_nature" "Rascal" "Leon" "out"] set f [open $fileOut w] foreach li [LesLignesDuFichier $file] { if {[regexp "pour " $li]} { regsub -all "pour " $li "" li } if {[regexp "norMD : " $li]} { regsub -all "norMD : " $li "" li } puts $f $li } close $f return 1 } proc modifFic2 {file} { set l {} set fileOut [file join [RepertoireDuGenome] "msf_nature" "Rascal" "Leon" "out2"] set f [open $fileOut w] foreach li [LesLignesDuFichier $file] { if {$l == "" && [regexp "nPDB" $li]} { set l $li } elseif {![regexp "nPDB" $li]} { puts $f "$l\t$li" set l {} } else { puts $f $l set l $li } } close $f return 1 } proc modifInform {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/protembl} Espionne "Repertoire : $directory" set r [glob -directory $directory *] foreach fichier $r { Espionne $fichier set tmp [split $fichier "/"] set nom [lindex $tmp 5] set f [open $fichier r] set full_text [read $f] set record [split $full_text "\n"] foreach ligne $record { if {[regexp {^GN\s*Name=(\w*);} $ligne string val]} { Espionne $val InformeSansDemander $nom "=ValiGN: $val" } } } } proc modifOrthoFile2 {orthofile newfile} { if { [file exists $orthofile]} { Espionne "$orthofile existe" set myacc [lindex [split [lindex [split $orthofile "/"] 5] "."] 0] set newList {} set ma_list [LesLignesDuFichier $orthofile] #set newList [linsert $newList 0 $myseq] #set newList [linsert $newList 0 >$myacc] lappend newList >$myacc set TFA [LaSequenceDuTFAs [RepertoireDuGenome]/prottfa/$myacc $myacc] lappend newList [QueLaSequenceDuTexteTFA $TFA] foreach Ligne $ma_list { if {[regexp {^[^#].*} $Ligne] && [regexp {^>} $Ligne]} { set defaultseq "no" set para [split $Ligne ";"] set species [lindex $para 1] if {[lindex $para 2] ne "NOTHING"} { set parse [lindex $para 5] if {$parse == ""} { #set tmp "no" } elseif {[regexp {.* GN=} $parse] || [regexp {.*\]\. $} $parse] } { set spID ">[lindex $parse 1] [lindex $parse 1] $species" set spSeq [string toupper [QueLaSequenceDesBanques [lindex $parse 1]]] #voir si pas un probleme la... if {$spSeq != ""} { lappend newList $spID lappend newList $spSeq } else { set defaultseq "yes" lappend newList ">[lindex $parse 0] [lindex $parse 0] $species" } } else { #if {[regexp ^ENS.* $parse]} set xref [split $parse ":"] set trSeq "" set spSeq "" set xpSeq "" set npSeq "" foreach ID $xref { if { [regexp {sp=(\w*)} $parse sw swp] && $swp != "" } { set spID ">$swp $swp $species" set spSeq [string toupper [QueLaSequenceDesBanques $swp]] break } elseif { [regexp {xp=(XP_\w*)} $ID sw xp] && $xp != "" } { set xpID ">$xp $xp $species" set xpSeq [string toupper [QueLaSequenceDesBanques $xp]] break } elseif { [regexp {np=(NP_\w*)} $ID sw np] && $np != "" } { set npID ">$np $np $species" set npSeq [string toupper [QueLaSequenceDesBanques $np]] break } elseif { [regexp {tr=(\w*)} $ID sw tr] && $tr != "" } { set id ">$tr $tr $species" set tmpseq [string toupper [QueLaSequenceDesBanques $tr]] set leng [string length $tmpseq] Espionne "leng: $leng ------ taille seq: [string length $trSeq]" if {[expr $leng > [string length $trSeq]]} { set trID ">$tr $tr $species" set trSeq [string toupper [QueLaSequenceDesBanques $tr]] } } } if {$spSeq != ""} { lappend newList $spID lappend newList $spSeq } elseif {$xpSeq != ""} { lappend newList $xpID lappend newList $xpSeq } elseif {$npSeq != ""} { lappend newList $npID lappend newList $npSeq } elseif {$trSeq != ""} { lappend newList $trID lappend newList $trSeq } else { if {[lindex $parse 3]!="pompejana"} { set defaultseq "yes" lappend newList ">[lindex $parse 3] [lindex $parse 3] $species" } } } } } elseif {[regexp {^[^#].*} $Ligne] && [regexp {^[^>]} $Ligne]} { if {$defaultseq eq "yes" } { lappend newList [string toupper $Ligne] } } } set redondant "" set finalList "" set seqwrite "NO" foreach ligne $newList { if {[regexp {^[>]} $ligne]} { #si pas egale alors je charge la liste if {$redondant ne $ligne} { lappend finalList $ligne set seqwrite "OK" } else { set seqwrite "NO" } set redondant $ligne } elseif {$seqwrite eq "OK"} { lappend finalList $ligne } } #SauveLesLignes $newList dans [RepertoireDuGenome]/totoXavier.tfa SauveLesLignes $finalList dans $newfile } else { Espionne "Fichier introuvable:\n $orthofile" } } proc modiftfa {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/protembl} Espionne "Repertoire : $directory" set r [glob -directory $directory *] foreach fichier $r { Espionne $fichier set LL [LaSequenceDesBanques $fichier] DecortiqueLesLignesEMBL $LL ID AC DE GN OS OC OX SequenceBrute LaDETotal #EspionneL [list $ID $AC $DE $GN $OS $OC $OX $LaDETotal] #Espionne $SequenceBrute #Espionne >$ID #Espionne $AC #Espionne $OS #Espionne $DE set Entete ">$ID $AC $OS $DE" #sauve ou sauveligne #Espionne "Entete: $Entete" Sauve [SequenceFormatTFA $SequenceBrute $Entete "protbrut"] dans [RepertoireDuGenome]/prottfa/$ID } } proc monBlast {fichierEntree {fichierSortie ""} {banque ""} {ecrase ""} {Wait ""}} { set Wait [string equal -nocase $Wait "Wait"] if { ! [regexp "BlastTest" $fichierEntree]} { regsub "^magasin/" $fichierEntree "/home/joly/magasin/" fichierEntree if {$fichierSortie == ""} { set fichierSortie $fichierEntree regsub "\.tfa$" $fichierSortie "" fichierSortie append fichierSortie ".blast" } regsub "^magasin/" $fichierSortie "/home/joly/magasin/" fichierSortie if {![regexp "^/home/joly/magasin/" $fichierEntree]} {return "$fichierEntree sorry you're not allowed to use this file"} if {![regexp "^/home/joly/magasin/" $fichierSortie]} {return " $fichierSortie sorry you're not allowed to use this file"} if { [regexp {\.\.} $fichierSortie]} {return " $fichierSortie sorry you're not allowed to use this file"} } Espionne "$fichierEntree $fichierSortie $banque" if {$ecrase=="lire" && [file exist $fichierSortie]} {return [ContenuDuFichier $fichierSortie]} if {$ecrase!="ecrase" && [file exist $fichierSortie]} {return "ecrasement"} if {$banque == ""} {set banque /blast/swissprot} set commande "tcsh -c \"/biolo/ncbi/bin/blastall -i $fichierEntree -d $banque -p blastp -F T -o $fichierSortie.tmp -K 0 -v 5000 -b 5000 -e 10; mv $fichierSortie.tmp $fichierSortie;\"" if {$Wait} { Espionne "I'll launch $commande" eval exec $commande Espionne "Done" return $fichierSortie } set pid [eval exec $commande &] return "blast was launched with command\n$commande\npid $pid result will be available in $fichierSortie" } proc mrnabiscorrige {FichierSortie} { set n 0 foreach DD [ListeDesPABs] { set FichierProttfa "[RepertoireDuGenome]/prottfa/$DD" if {[file exists $FichierProttfa]} { set EnteteProttfa [EnteteDuFichierTFA $FichierProttfa] if {[regexp "from Homo sapiens" $EnteteProttfa]} { set AccessHumanProt [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" Protein Access] if {$AccessHumanProt!=""} { incr n if {[regexp $AccessHumanProt $EnteteProttfa]} {lappend Liste $DD} } } } } Espionne $n Espionne [llength $Liste] set Lt [lsort -unique $Liste] Espionne [llength $Lt] SauveLesLignes $Lt dans $FichierSortie exit foreach Nom $Lt { set FichiermRNAHomo "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {[file exists $FichiermRNAHomo]} {lappend LesDDAvecProtEtmRNAHuman $Nom} } Espionne [llength $LesDDAvecProtEtmRNAHuman] set L [lsort -unique $LesDDAvecProtEtmRNAHuman] Espionne [llength $L] } proc mrnatfahuman {} { foreach Nom [ListeDesPABs] { set FichiermRNAHomo "[RepertoireDuGenome]/mrnatfa_Homo_sapiens/$Nom" if {[file exists $FichiermRNAHomo]} {lappend LesDDAvecmRNAHuman $Nom} } Espionne [llength $LesDDAvecmRNAHuman] set L [lsort -unique $LesDDAvecmRNAHuman] Espionne [llength $L] } proc myIP {} { if { [ catch { set ip 127.0.0.1 set sid [ socket -async [ info hostname ] 22 ] set ip [ lindex [ fconfigure $sid -sockname ] 0 ] ::close $sid } err ] } { catch { ::close $sid } puts stderr "myIP error: '$err' on port 22 (sshd). using 127.0.0.1" } return $ip } proc myReadBlast {path {full 0}} { set infile [open $path r] set lines {} if { !$full } { while { ![regexp "Sequences producing significant alignments" [gets $infile]] } {} gets $infile } while { [gets $infile line] >= 0 && ($full || $line != "") } { lappend lines $line } close $infile return $lines } proc nUplet {args} { return $args } proc nblocks {} { set Lf [LesFichiersDeBalibase] foreach f $Lf { DecortiqueXmlAgent $f set Lbck [CoreBlocksDuXML] foreach {deb fin} $Lbck { set len [expr {$fin - $deb + 1}] if {$len < 5} { continue } lappend Llen $len } } puts "ntot [llength $Llen]" set Lx {} for {set i 0} {$i <= 100} {incr i 10} { lappend Lx $i } set Lx [linsert $Lx 1 7] set Lx [list 5 7 9 11 13 15 17 19 100] lappend Lx 1000 set ix 0 foreach x [lrange $Lx 0 end-1] { incr ix set xp [lindex $Lx $ix] foreach v $Llen { if {$v >= $x && $v < $xp} { incr H($x) } } } parray H LoadTkAndPackages package require Plotchart canvas .c -width 550 -height 550 -scrollregion [list 0 0 550 550] -yscrollcommand ".y set" -xscrollcommand ".x set" scrollbar .x -orient horiz -command ".c xview " scrollbar .y -orient vertical -command ".c yview " grid .c -row 0 -column 0 -sticky news grid .y -row 0 -column 1 -sticky ns grid .x -row 1 -column 0 -sticky ew grid columnconfigure . 0 -weight 1 grid rowconfigure . 0 -weight 1 set Lx {} ; set Ly {} foreach k [lsort -integer [array names H]] { lappend Lx $k lappend Ly $H($k) } puts "[llength $Lx] | $Lx" puts "[llength $Ly] | $Ly" set Lxaxis [list 0 100 10] set tmp [lsort -integer $Ly] set Lyaxis [list [lindex $tmp 0] [lindex $tmp end] 9] ::Plotchart::plotconfig vertbars leftaxis color white ::Plotchart::plotconfig vertbars bottomaxis color white ::Plotchart::plotconfig vertbars text textcolor white ::Plotchart::plotconfig vertbars text background cyan ::Plotchart::plotconfig vertbars bar outline white ::Plotchart::plotconfig vertbars title textcolor white ::Plotchart::plotconfig vertbars title background black ::Plotchart::plotconfig vertbars title font "Helvetica 32 bold" ::Plotchart::plotconfig vertbars legend background black set p [::Plotchart::createBarchart .c $Lx $Lyaxis 1] $p config -showvalues 1 -valuecolour white $p background axes black $p background plot black $p title "Distribution of blocks lengths" $p plot toto $Ly magenta $p legend toto "Ceci est la légende" .c itemconfig legend -fill white FenetreAuCentre . if {0} { set Lhis [CreeHistogramme $Llen 50] array set Tres $Lhis set Lv [list] foreach {k v} $Lhis { lappend Lv $v } set K [Graphe $Lv] bind all {destroy $k} $K configure -background black $K itemconfig Cadre -fill black #return $K itemconfig oval -fill white #parray Tres } #exit } proc nettoieLecturesPourTous {{pasDeChromato 0} {suffixe ""}} { # Ask parameters FaireLire "Please select screened fasta file containing the sequences" set fastaFilename [ButineArborescence "All" [RepertoireDuGenome]/edit_dir] FaireLire "Please select fasta file containing the quality" set qualityFilename [ButineArborescence "All" [RepertoireDuGenome]/edit_dir] set XminLength 0 while { $XminLength < 1 } { set XminLength [Entre "Minimal length for vector trimmed sequence (XminLength): 200"] set XminLength [string trim [lindex [split $XminLength ":"] 1]] if { ! [regexp {^[0-9]+$} $XminLength XminLength] } { set XminLength 0 } } set minLength 0 while { $minLength < 1 } { set minLength [Entre "Minimal sequence length (minLength): 100"] set minLength [string trim [lindex [split $minLength ":"] 1]] if { ! [regexp {^[0-9]+$} $minLength minLength] } { set minLength 0 } } if {!$pasDeChromato} { set phdDirectory [RepertoireDuGenome]/phd_dir if { ! [OuiOuNon "Are phd files in $phdDirectory ?"] } { FaireLire "Please select the directory containing phd files" set phdDirectory [ChoixDuRepertoire [RepertoireDuGenome]] } set scfDirectory [RepertoireDuGenome]/chromat_dir if { ! [OuiOuNon "Are scf files in $scfDirectory ?"] } { FaireLire "Please select the directory containing scf files" set scfDirectory [ChoixDuRepertoire [RepertoireDuGenome]] } } set logFile "" while {$logFile eq ""} { set logFile [Entre "Log file: [RepertoireDuGenome]/nettoieLecturesPourTous$suffixe.log"] set logFile [string trim [lindex [split $logFile ":"] 1]] } # Read files array set fasta [readFasta $fastaFilename] array set quality [readFasta $qualityFilename] # Open output files set cleanFasta [open "$fastaFilename.clean$suffixe" w] set discardFasta [open "$fastaFilename.discard$suffixe" w] set cleanQuality [open "$qualityFilename.clean$suffixe" w] set discardQuality [open "$qualityFilename.discard$suffixe" w] set log [open $logFile w] # Print a header in log file puts $log "nettoieLecturesPourTous parameters:" puts $log "-----------------------------------" puts $log "Sequence file: $fastaFilename" puts $log "Quality file: $qualityFilename" puts $log "Output sequence file: $fastaFilename.clean$suffixe" puts $log "Output quality file: $qualityFilename.clean$suffixe" puts $log "Minimal length for vector trimmed sequence: $XminLength" puts $log "Minimal sequence length: $minLength" if {!$pasDeChromato} { puts $log ".phd files directory: $phdDirectory" puts $log ".scf files directory: $scfDirectory" } puts $log {} # Set statistics variables set keepedSeqs [llength $fasta(index)] set discardedByLengthFilter 0 set discardedByPolyFilter 0 # Clean for each read foreach r $fasta(index) { set description [lindex $fasta($r) 0] # build the sequence from the file lines set sequence [join [lrange $fasta($r) 1 end] ""] # handle post filter results array set currentRead [list sequence $sequence keep 1] # used to range for initial sequence with ranges given by filters # to clean quality, phd and scf files set rangeStack {} # length filtering if {$currentRead(keep)} { array set fRes [lengthFilter $currentRead(sequence) $XminLength $minLength] set currentRead(sequence) $fRes(sequence) set currentRead(keep) $fRes(keep) lappend rangeStack $fRes(range) if {$fRes(keep)} { set status "KEEP" } else { set status "DISCARD" incr keepedSeqs -1 incr discardedByLengthFilter } puts "$r -> LENGTH FILTER: $status" puts $log "$r -> LENGTH FILTER: $status" foreach msg $fRes(messages) { puts "\t* $msg" puts $log "\t* $msg" } array unset fRes } # poly filtering if {$currentRead(keep)} { array set fRes [polyFilter $currentRead(sequence) 50 100] set currentRead(sequence) $fRes(sequence) set currentRead(keep) $fRes(keep) lappend rangeStack $fRes(range) if {$fRes(keep)} { set status "KEEP" } else { set status "DISCARD" incr keepedSeqs -1 incr discardedByPolyFilter } puts "$r -> POLY FILTER: $status" puts $log "$r -> POLY FILTER: $status" foreach msg $fRes(messages) { puts "\t* $msg" puts $log "\t* $msg" } array unset fRes } # compute range for initial sequence set iniRange {0 0} foreach rng $rangeStack { set iniRngLIdx [lindex $iniRange 0] set rngLIdx [lindex $rng 0] lset iniRange 0 [expr $iniRngLIdx + $rngLIdx] } set iniRngLIdx [lindex $iniRange 0] set lastRng [lindex $rangeStack end] set rngLIdx [lindex $lastRng 0] set rngRIdx [lindex $lastRng 1] lset iniRange 1 [expr $iniRngLIdx + $rngRIdx - $rngLIdx] ## puts "++ $rangeStack -> $iniRange" # Output results - useful computations set lIdx [lindex $iniRange 0] set rIdx [lindex $iniRange 1] set currentQual [join [lrange $quality($r) 1 end]] # Output results - output if {$currentRead(keep)} { # Write clean fasta puts "$r -> WRITE SEQUENCE FASTA" puts $cleanFasta [formatFasta $description $currentRead(sequence)] # Write clean quality fasta puts "$r -> WRITE QUALITY FASTA" puts $cleanQuality [formatQualFasta [lindex $quality($r) 0] [lrange $currentQual $lIdx $rIdx]] } else { # Write discard fasta puts "$r -> WRITE SEQUENCE FASTA" # puts $discardFasta [formatFasta $description $currentRead(sequence)] puts $discardFasta [formatFasta $description $sequence] # Write discard quality fasta puts "$r -> WRITE QUALITY FASTA" # puts $discardQuality [formatQualFasta [lindex $quality($r) 0] [lrange $currentQual $lIdx $rIdx]] puts $discardQuality [formatQualFasta [lindex $quality($r) 0] $currentQual] } if {!$pasDeChromato} { # Clean and write phd puts "$r -> CLEAN AND WRITE .PHD FILE" cleanPhd $currentRead(sequence) $iniRange "$phdDirectory/$r.phd.1" $currentRead(keep) # Clean and write scf puts "$r -> CLEAN AND WRITE .SCF FILE" cleanScf "$phdDirectory/${r}.phd.1" "$scfDirectory/$r" } array unset currentRead } # Print a footer in log file puts $log {} puts $log "nettoieLecturesPourTous results:" puts $log "--------------------------------" puts $log "Keeped sequences: $keepedSeqs" puts $log "Discarded by length filter: $discardedByLengthFilter" puts $log "Discarded by poly filter: $discardedByPolyFilter" puts $log "Total sequences: [llength $fasta(index)]" # Close output files close $cleanFasta close $discardFasta close $cleanQuality close $discardQuality close $log puts "FINISHED." } proc newGetHubs {lProteinId {minCombinedScore 700} {getGraphVar ""}} { package require struct::graph set g [::struct::graph] set lProteinId [lsort -unique $lProteinId] foreach proteinId $lProteinId { if {![$g node exists $proteinId]} { $g node insert $proteinId } foreach interact [getInteracts $proteinId 1 $minCombinedScore] { if {![$g node exists $interact]} { $g node insert $interact } if {[lsearch -exact [$g nodes -adj $proteinId] $interact] == -1} { $g arc insert $proteinId $interact $g arc insert $interact $proteinId } } } # Vire les noeuds qui ne sont pas en entrée Espionne "Removing nodes not in input dataset..." foreach n [$g nodes] { if {[lsearch -exact $lProteinId $n] == -1} { $g node delete $n } } # # Tag les noeuds qui n'ont pas assez de connexions # Espionne "Taging nodes whithout enough connections..." # foreach n [$g nodes] { # if {[llength [$g nodes -adj $n]] < $minConnections} { # $g node set $n "stopRecursion" 1 # } # } # Recherche les hubs set hubs {} foreach n [$g nodes] { set hub [getGraphHubString $g $n] if {[llength $hub] != 0} { lappend hubs [lsort $hub] } } if {$getGraphVar ne ""} { upvar $getGraphVar extG set extG $g } else { $g destroy } if {[llength $lProteinId] != [llength [join $hubs]]} { # On devrait obtenir autant de proteinId composant les hubs que de proteinId d'entrée error "IN [llength $lProteinId] != OUT [llength [join $hubs]]" } return [lsort -decreasing -command "lsortBySublistsLengths" $hubs] } proc newGetHubsWithLevel {lProteinId {depth 1} {minCombinedScore 700}} { set lProteinId [lsort -unique $lProteinId] set hubs {} foreach proteinId $lProteinId { set tmp {} foreach interact [getInteracts $proteinId $depth $minCombinedScore] { if {[lsearch -exact $lProteinId $interact] != -1} {lappend tmp $interact} } if {$depth == 1} { # Ici pas de besoin du traitement un plus lourd d'en dessous lappend hubs [lsort -unique [concat $proteinId $tmp]] } else { # Rajoute uniquement le hub contenant proteinId foreach hub [newGetHubs [concat $proteinId $tmp] $minCombinedScore] { if {[lsearch -exact $hub $proteinId] != -1} { lappend hubs $hub } } } } if {[llength $lProteinId] != [llength $hubs]} { # On devrait obtenir autant de hubs que de proteinId d'entrée error "IN [llength $lProteinId] != OUT [llength $hubs]" } return [lsort -unique -decreasing -command "lsortBySublistsLengths" $hubs] } proc newLesBestProteinesHumanAvecLoc2EtGO {FichierClusters {ListeNoms ""}} { if {![file exists $FichierClusters] && $ListeNoms==""} { set Liste [ListeDesPABs] } if {[file exists $FichierClusters] && $ListeNoms==""} { set Liste [ListeDesJR $FichierClusters] } if {$ListeNoms!=""} {set Liste [split $ListeNoms " "]} set FichierBest "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" if {![file exists $FichierBest]} {return} set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" if {![file exists $FichierGO]} {return} set FichierBestLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" if {![file exists $FichierBestLoc] } {return} set Entete "Name\tTwins\tClone\tCytoBand\tSource Loc.\tAcc. Protein\tId. Prot\tDefinition Prot.\tOrganism P.\tLength Prot\tAcc. mRNA\tId. mRNA\tDefinition mRNA\tOrganism mRNA\tLength mRNA\tGO" lappend LApercu $Entete foreach Nom $Liste { #pb dans les infos de exonhit et de SSH2 #set CodeExonhit [ExtraitInfo $Nom "OwnerOfCDNA"] set CodeExonhit [ExtraitInfo $Nom "CodeClone"] if {[file exists $FichierClusters]} { set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] } set LesDefinitionsGO {} set LesGO [InterrogeGeneOntology $FichierGO $Nom LesGO] if {$LesGO!={}} { foreach GO $LesGO { set LaDefinitionGO [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] lappend LesDefinitionsGO $LaDefinitionGO } } set Loc [InterrogeLocalisation $FichierBestLoc Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [string toupper $AccessmRNA] set AccessProt [string toupper $AccessProt] set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessmRNA Identity] set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessProt Identity] set LesOrgasP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt LesOrganismes] set DefP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Definition] set TailleP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Taille] set LesOrgasR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA LesOrganismes] set DefR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Definition] set TailleR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Taille] #if {$AccessmRNA!="" || $AccessProt!=""} { #lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR\t$LesDefinitionsGO" #} if {[info exists LesJumeaux]} { lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR\t$LesDefinitionsGO" } else { lappend LApercu "$Nom\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR\t$LesDefinitionsGO" } } return $LApercu } proc newLesBestProteinesHumanAvecLocEtGO {FichierClusters {ListeNoms ""}} { if {![file exists $FichierClusters] && $ListeNoms==""} { set Liste [ListeDesPABs] } if {[file exists $FichierClusters] && $ListeNoms==""} { set Liste [ListeDesJR $FichierClusters] } if {$ListeNoms!=""} {set Liste [split $ListeNoms " "]} set FichierBest "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" if {![file exists $FichierBest]} {return} set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" if {![file exists $FichierGO]} {return} #set FichierBestLocNuctfa "[RepertoireDuGenome]/Localisation/BestLocalisation_Human_Box" #set FichierBestLocNuctfa "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" set FichierBestLocProttfa "[RepertoireDuGenome]/Localisation/BestProttfaLocalisation_Human" set FichierBestLocmRNA "[RepertoireDuGenome]/Localisation/BestmRNAHsapLocalisation_Human" if {![file exists $FichierBestLocNuctfa] || ![file exists $FichierBestLocProttfa] || ![file exists $FichierBestLocmRNA]} {return} set Entete "Name\tTwins\tClone\tCytoBand\tSource Loc.\tAcc. Protein\tId. Prot\tDefinition Prot.\tOrganism P.\tLength Prot\tAcc. mRNA\tId. mRNA\tDefinition mRNA\tOrganism mRNA\tLength mRNA\tGO" lappend LApercu $Entete foreach Nom $Liste { #pb dans les infos de exonhit et de SSH2 set CodeExonhit [ExtraitInfo $Nom "OwnerOfCDNA"] if {[file exists $FichierClusters]} { set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] } set LesDefinitionsGO {} set LesGO [InterrogeGeneOntology $FichierGO $Nom LesGO] if {$LesGO!={}} { foreach GO $LesGO { set LaDefinitionGO [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] lappend LesDefinitionsGO $LaDefinitionGO } } set Loc [InterrogeLocalisation $FichierBestLocNuctfa Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } else { set Loc [InterrogeLocalisation $FichierBestLocProttfa Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } else { set Loc [InterrogeLocalisation $FichierBestLocmRNA Nom $Nom] if {$Loc!=""} { set Loc [lindex $Loc 0] set Band [lindex $Loc 19] set Source [lindex $Loc 21] } } } set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [string toupper $AccessmRNA] set AccessProt [string toupper $AccessProt] set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessmRNA Identity] set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessProt Identity] set LesOrgasP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt LesOrganismes] set DefP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Definition] set TailleP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessProt Taille] set LesOrgasR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA LesOrganismes] set DefR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Definition] set TailleR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessmRNA Taille] #if {$AccessmRNA!="" || $AccessProt!=""} { #lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR\t$LesDefinitionsGO" #} lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Band\t$Source\t$AccessProt\t$IdProt\t$DefP\t$LesOrgasP\t$TailleP\t$AccessmRNA\t$IdmRNA\t$DefR\t$LesOrgasR\t$TailleR\t$LesDefinitionsGO" } return $LApercu } proc newNewGetHubsWithLevel {lProteinId {level 1} {minCombinedScore 700}} { set lProteinId [lsort -unique $lProteinId] set procName [lindex [info level 0] 0] set todo [llength $lProteinId] set hubs {} set count 0 foreach proteinId $lProteinId { incr count Espionne "$procName: $count/$todo" set g [getStringGraphWithLevel $proteinId $minCombinedScore $level] # Renvoie le hub à partir de proteinId lappend hubs [lsort -unique [getGraphHubString $g $proteinId]] $g destroy } if {[llength $lProteinId] != [llength $hubs]} { # On devrait obtenir autant de hubs que de proteinId d'entrée error "IN [llength $lProteinId] != OUT [llength $hubs]" } return [lsort -unique -decreasing -command "lsortBySublistsLengths" $hubs] } proc newr {} { LitLeTFA 250_nrna.tfa Ln Sq set Li [list 0 1 5 7 8 41 50 85 125 130 132 133 150] foreach i $Li { set n [lindex $Ln $i] lappend Nn $n lappend Ns [set Sq($n)] } EcritLeTfa new.tfa $Nn $Ns puts "[string length [set Sq($n)]] [expr {[string length [set Sq($n)]] / 3}]" exit } proc nicotax {} { global T Lfils #set Ll [LesLignesDuFichier ins.tab] set Ll [LesLignesDuFichier nico.tab] #set T(0,nom) "ZeRoot" #set T(-1,nom) "ZeRoot" foreach l $Ll { set Lv [split $l "\t"] set id [lindex $Lv 0] set par [lindex $Lv end-1] set nom [lindex $Lv 2] set T($id,nom) $nom set T($id,par) $par lappend T($par,child) $id lappend Lpar $par lappend Lall $id } set Lpar [lsort -unique -integer $Lpar] set Lall [lsort -unique -integer $Lall] set Lfbr [lsort -integer -unique [lor $Lall $Lpar from1]] set Llvs [list] foreach f $Lall { if {! [info exists T($f,child)]} { lappend Llvs $f set T($f,child) {} } } puts "Llgn [llength $Ll]" puts "Lall [llength $Lall]" puts "Lpar [llength $Lpar]" puts "Lfbr [llength $Lfbr]" puts "Llvs [llength $Llvs]" puts "orfb [llength [lor $Lfbr $Llvs]]" exit foreach f $T(131567,child) { if {$f ni {2157 2 2759}} { set T($f,par) 0 } } set icmp 0 ; set itot 0 foreach f $Llvs { if {131567 in [set Lanc [AncetresDe $f]]} { lappend Lco {*}$Lanc } incr icmp incr itot if {$icmp == 10000} { set Lco [lsort -unique $Lco] set icmp 0 puts "done $itot" } } set Lco [lsort -unique $Lco] foreach f $Lco { set out($f) 1 } set o [open nico.tab w] foreach l $Ll { set Lv [split $l "\t"] set id [lindex $Lv 0] if {[info exists out($id)]} { puts $o $l } } close $o exit } proc nist_pca {X} { # set X {2 10 3 7 4 3 4 1 8 6 3 5 8 6 1 8 5 7 7 2 9 5 3 3 9 5 8 7 4 5 8 2 2} set nlin [lindex $X 1] set ncol [lindex $X 2] puts "Matrix of observation data X\[$nlin,$ncol\]" puts [show $X] puts {Compute column norms} mnorms_br X Xmeans Xsigmas puts "Means=[show $Xmeans]" puts "Sigmas=[show $Xsigmas %.6f]" puts "Normalize observation data creating Z\[$nlin,$ncol\]" puts [show [set Z [mnormalize $X $Xmeans $Xsigmas]] %10.6f]\n puts {Naive computation method that is sensitive to round-off error} puts {ZZ is (Ztranspose)(Z) } puts "ZZ=\n[show [set ZZ [mmult [transpose $Z] $Z]] %10.6f]" puts {the correlation matrix, R = (Zt)(Z)/(n-1)} puts "R=\n[show [set R [mscale $ZZ [expr 1/9.0]]] %8.4f]" puts {Continuing the naive example use R for the eigensolution} set V $R mevsvd_br V evals puts "eigenvalues=[show $evals %8.4f]" puts "eigenvectors:\n[show $V %8.4f]\n" puts "Good computation method- perform SVD of Z" #lm : on retourne eigenvalue et eigenvectors set Eval $evals set Evec $V set U $Z msvd_br U S V puts "Singular values, S=[show $S]" puts "square S and divide by (number of observations)-1 to get the eigenvalues" set SS [mprod $S $S] set evals [mscale $SS [expr 1.0/9.0]] puts "eigenvalues=[show $evals %8.4f]" puts "eigenvectors:\n[show $V %8.4f]" puts "(the 3rd vector/column has inverted signs, thats ok the math still works)" puts "\nverify V x transpose = I" puts "As computed\n[show [mmult $V [transpose $V]] %20g]\n" puts "Rounded off\n[show [mround [mmult $V [transpose $V]]]]" #puts "Diagonal matrix of eigenvalues, L" #set L [mdiag $evals] # puts "\nsquare root of eigenvalues as a diagonal matrix" proc sqrt x { return [expr sqrt($x)] } set evals_sr [mat_unary_op $evals sqrt] set Lhalf [mdiag $evals_sr] puts [show $Lhalf %8.4f] puts "Factor Structure Matrix S" set S [mmult $V $Lhalf] puts [show $S %8.4f]\n set S2 [mrange $S 0 1] puts "Use first two eigenvalues\n[show $S2 %8.4f]" # Nash discusses better ways to compute this than multiplying SSt # the NIST method is sensitive to round-off error set S2S2 [mmult $S2 [transpose $S2]] puts "SSt for first two components, communality is the diagonal" puts [show $S2S2 %8.4f]\n # define reciprocal square root function proc recipsqrt x { return [expr 1.0/sqrt($x)] } # use it for Lrhalf calculation set Lrhalf [mdiag [mat_unary_op $evals recipsqrt]] set B [mmult $V $Lrhalf] puts "Factor score coefficients B Matrix:\n[show $B %12.4f]" puts "NIST shows B with a mistake, -.18 for -1.2 (-1.18 with a typo)" puts "\nWork with first normalized observation row" # set z1 {2 3 0 0.065621795889 0.316227766017 -0.7481995314} set z1 "2 $ncol 0" for {set li 0} {$li < $ncol} {incr li} { lappend z1 [lindex $Z [expr $li + 3]] } puts [show $z1 %.4f] puts "compute the \"factor scores\" from multiplying by B" set t [mmult [transpose $z1] $B] puts [show $t %.4f] puts "NIST implies you might chart these" #set T2 [dotprod $t $t] #puts "Hotelling T2=[format %.4f $T2]" puts "Compute the scores using V, these are more familiar" set t [mmult [transpose $z1] $V] puts [show $t %.4f] puts "Calculate T2 from the scores, sum ti*ti/evi" set T2 [msum [transpose [mdiv [mprod $t $t] [transpose $evals]]]] puts "Hotelling T2=[format %.4f $T2]" puts "Fit z1 using first two principal components" set p [mrange $V 0 1] puts p=\n[show $p %10.4f] set t [mmult [transpose $z1] $p] set zhat [mmult $t [transpose $p]] puts " z1=[show $z1 %10.6f]" puts "zhat=[show $zhat %10.6f]" set diffs [msub [transpose $z1] $zhat] puts "diff=[show $diffs %10.6f]" puts "Q statistic - distance from the model measurement for the first observation" set Q [dotprod $diffs $diffs] puts Q=[format %.4f $Q] puts "Some experts would compute a corrected Q that is larger since the observation was used in building the model. The Q calculation just used properly applies to the analysis of new observations." set corr [expr 10.0/(10.0 - 2 -1)] ;# N/(N - Ncomp - 1) puts "Corrected Q=[format %.4f [expr $Q * $corr]] (factor=[format %.4f $corr])" return [list $Eval $Evec] } proc nogonz {} { set Ll [LesLignesDuFichier nogonz.dat] set f [list] foreach a $Ll { lappend f [string trim $a] } puts [join $f ";"] exit } proc nolight_color3f {r g b} { global pgl set c $pgl(coeff_ambient) glColor3f [expr {$r/$c}] [expr {$g/$c}] [expr {$b/$c}] return } proc nolight_color3fv {col} { global pgl lassign $col r g b a set c $pgl(coeff_ambient) glColor3f [expr {$r/$c}] [expr {$g/$c}] [expr {$b/$c}] return } proc nombreCaracteristiqueAnalyse {{sequence ""} {information ""}} { #if {$directory==""} {set directory [RepertoireDuGenome]/protembl} if {$sequence==""} {Espionne "vous devez donner la sequence" exit} if {$information==""} {Espionne "devez donner l'information souhaiter" exit} if {$information=="orthologie"} {return [expr [comptNbOrtho "[RepertoireDuGenome]/NewTfasDesCopains/$sequence"] -1] } if {$information=="pfam"} {return [NBPfam "[RepertoireDuGenome]/macsimXml/$sequence"]} if {$information=="pdb"} {return [NbPdb [RepertoireDuGenome]/pdb/$sequence]} if {$information=="interaction"} {return [NbInt [RepertoireDuGenome]/StringRep/String/$sequence]} } proc nombreRA {} { set A 0 set B 0 set C 0 set T 0 foreach I [RetChip2 ListOf Index] { set Des [RetChip2 $I "description_customer"] set Ac1 [RetChip2 $I "refseq_PIQOR"] set Ac2 [RetChip2 $I "DNA_acc"] set Ac3 [RetChip2 $I "prot_acc_PIQOR"] set Ac4 [RetChip2 $I "prot_acc"] if { ![regexp {^RA[0-9]+} $Des] } { continue } incr T puts "RA=$Des=>$T" if { $Ac1=="" && $Ac2=="" && $Ac3=="" && $Ac4=="" } { incr A puts "Aucun access=$A" } if { $Ac1!="" || $Ac2!="" } { incr B puts "A access dna=$B" } if { $Ac1=="" && $Ac2=="" } { if {$Ac3!="" || $Ac4!="" } { incr C puts "N'a pas access dna, a access prot=$C" } } } Espionne "$T =nb de RA" Espionne "$A =nb de RA ss aucun acces" Espionne "$B =nb de RA ac un access dna" Espionne "$C =nb de RA ss access dna ms ac un access prot" } proc normalize_quat {q} { lassign $q a b c d set mag [expr {$a*$a + $b*$b + $c*$c + $d*$d}] foreach v $q { lappend r [expr {$v/$mag}] } return $r } proc number_processors {} { global tcl_platform package require fileutil set max_jobs 0 if { [string equal -nocase "windows" "$tcl_platform(platform)"] } { set max_jobs $::env(NUMBER_OF_PROCESSORS) } elseif { [file readable /proc/cpuinfo] } { set np [llength [::fileutil::grep processor /proc/cpuinfo]] set max_jobs $np } else { # Unknown OS } return $max_jobs } proc oldApercuDesGenesDuProjet {FichierClusters} { set Liste [ListeDesJR $FichierClusters] foreach Nom $Liste { set Definition [InterrogeProtAndmRNA $Nom Rang 1 Definition] if {$Definition==""} {continue} lappend LApercu "$Nom\t$Definition\n" } Espionne "nb pabs avec une def: [llength $LApercu]" return $LApercu } proc oldCompareLocalisations {FichierLesDDLocsSansFct FichierDesmiRNAs} { foreach Nom [CreeListePourFichierAUneColonne $FichierLesDDLocsSansFct] { if {$Nom==""} {continue} set Vu($Nom) 1 } set FichierFinal "[RepertoireDuGenome]/ANALYSE/finaaal_6jul05_avecMAetSel_mitoch" foreach Ligne [LesLignesDuFichier $FichierFinal] { if {$Ligne==""} {continue} set LesInfos [split $Ligne "\t"] set JR [lindex $LesInfos 1] if {![info exists Vu($JR)]} {continue} set Chro [lindex $LesInfos 29] set Deb [lindex $LesInfos 30] set Fin [lindex $LesInfos 31] #set Sens [lindex $LesInfos 32] lappend LesLocsNom "$Chro $Deb $Fin $JR" } Espionne "lesDD: [llength $LesLocsNom]" set L [CreeListePourFichierAUneColonne $FichierDesmiRNAs] set FichierLoc "[RepertoireDuGenome]/Localisation/miRNAtfaLocalisation_Human" foreach M $L { set Locs [InterrogeLocalisation $FichierLoc Nom $M] if {$Locs==""} {continue} #if {[llength $Loc]>=2} {continue} foreach Loc $Locs { #set L [join $L ""] #EspionneL $Loc set Chro [lindex $Loc 9] set DSurChro [lindex $Loc 10] set FSurChro [lindex $Loc 11] lappend LesLocsNom "$Chro $DSurChro $FSurChro $M" } } Espionne "lesDD et les M: [llength $LesLocsNom]" set LesLocsNomPreTriees [lsort -command CompareChroDebut $LesLocsNom] set LesLocsNomTriees [lsort -command CompareChroFin $LesLocsNomPreTriees] lappend LesLocsNomTriees "bidon bidon bidon bidon bidon" ######### set FichierBob "[RepertoireDuGenome]/bob" SauveLesLignes $LesLocsNomTriees dans $FichierBob exit ######### set OldChromo "zzzz" set OldInf 1111111111111111 set OldSup 0 set LaSortie {} foreach Loc $LesLocsNomTriees { if {$Loc!="bidon bidon bidon bidon bidon"} { scan $Loc "%s %d %d %s" chromo inf sup code if {($chromo == $OldChromo) && ($inf <= $OldSup)} { if {![info exists LesMemes]} { set LesMemes $Oldcode } lappend LesMemes $code } else { if {[info exists LesMemes]} { lappend LaSortie [join $LesMemes " "] unset LesMemes } } set OldChromo $chromo set OldInf $inf set OldSup $sup set Oldcode $code } } set FichierDesClonesEnOverlap "[RepertoireDuGenome]/LocOverlapDDmiRNAs" if {![file exists $FichierDesClonesEnOverlap] || [file exists $FichierDesClonesEnOverlap] && [OuiOuNon "Do you want to replace $FichierDesClonesEnOverlap"]} { if {$LaSortie=={}} { Sauve "No overlaps were found" dans $FichierDesClonesEnOverlap } else { #set Sortie [TrieLaSortie $LaSortie] Espionne "fin" SauveLesLignes $LaSortie dans $FichierDesClonesEnOverlap } } return $FichierDesClonesEnOverlap } proc oldCreeFichierFinal {FichierTot FichierUniq FichierOverlap FichierAffy FichierRefSeq FichierSortie} { #FichierTot "[RepertoireDuGenome]/OVERLAP931NEW/TotalDesData" #FichierUniq "[RepertoireDuGenome]/OVERLAP931NEW/DataUniques" #FichierOverlap "/OVERLAP931NEW/bestoverlaps" #FichierAffy "/genomics/link/AffyTarget/OVERLAP/TotalDesData" #oldFichierRefSeq "OverlapRefSeq/new/DDRefSeqDef" #FichierRefSeq "overlapHumanmRNARefSeq/DDNMDef" #Presence ou absence d'un affy en overlap. foreach Ligne [LesLignesDuFichier $FichierOverlap] { if {$Ligne==""} {continue} set LesCodes [split $Ligne "\t"] set DD [lindex $LesCodes 0] set CodeAffy [lindex $Ligne 1] set Affy($DD) $CodeAffy } #Profil Virtual Northern et Northern set FichierProfilDDValidation "[RepertoireDuGenome]/totalite/ValidationProfil.txt" if {![file exists $FichierProfilDDValidation]} {return} foreach Ligne [LesLignesDuFichier $FichierProfilDDValidation] { if {$Ligne=="" || [regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set Owner [lindex $Ligne 0] set CC [lindex $Ligne 2] if {$Owner=="F"} {set CC [string toupper $CC]} if {$Owner=="I"} {regsub -all "\'" $CC "_" CC} set ProfVN [lindex $Ligne 3] set ProfNorthern [lindex $Ligne 5] set PVN($Owner,$CC) $ProfVN set PN($Owner,$CC) $ProfNorthern } #profil Macroarray set FichierMacroarray "[RepertoireDuGenome]/MembranesRegine/compar_profils_mb_gscope" foreach Ligne [LesLignesDuFichier $FichierMacroarray] { if {$Ligne==""} {continue} set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 1] set ProfMb [lindex $LesChamps 2] set PMb($DD) $ProfMb } set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology_GPO" set n 0 foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/931"] { Espionne $Ligne set LesJumeaux [split $Ligne " "] set NbJumeaux [llength $LesJumeaux] #Espionne "nb jum : $NbJumeaux" set ProfilVN ""; set ProfilNorthern ""; set ProfilMb ""; set LesGO ""; set LesPathwaysKegg ""; set LesDomainesPFAMA "" foreach Jumeau $LesJumeaux { set CodeClone [InterrogeFichierTotalDataDD $FichierTot $Jumeau Code] set User [InterrogeFichierTotalDataDD $FichierTot $Jumeau User] #virtual northern if {[info exists PVN($User,$CodeClone)] && $ProfilVN==""} {set ProfilVN $PVN($User,$CodeClone)} set ProfilVN [string trim $ProfilVN] if {[info exists PVN($User,$CodeClone)] && $ProfilVN!="" && [string trim $PVN($User,$CodeClone)]!="" && $ProfilVN!=$PVN($User,$CodeClone)} { if {$ProfilVN==0 && $PVN($User,$CodeClone)!=0} { set ProfilVN $PVN($User,$CodeClone) } } #northern if {[info exists PN($User,$CodeClone)] && $ProfilNorthern==""} {set ProfilNorthern $PN($User,$CodeClone)} set ProfilNorthern [string trim $ProfilNorthern] #membrane nylon Regine if {[info exists PMb($Jumeau)] && $ProfilMb==""} {set ProfilMb $PMb($Jumeau)} set ProfilMb [string trim $ProfilMb] #Les GOs if {$LesGO==""} {set LesGO [InterrogeGeneOntology $FichierGO $Jumeau LesGO]} #Les Pathways KEGG if {$LesPathwaysKegg==""} {set LesPathwaysKegg [InterrogeMesKEGG $Jumeau LesPathway]} #Les Domaines PFAMA (Id>0.8) if {$LesDomainesPFAMA==""} {set LesDomainesPFAMA [InterrogeDomaines $Jumeau LesDomaines]} } set JR [lindex $LesJumeaux 0] #Espionne $JR set LesJumeauxDuJR [lreplace $LesJumeaux 0 0] ### INFOS JR ############# incr n set NumGeneDD [InterrogeFichierTotalDataDD $FichierTot $JR N] set CodeClone [InterrogeFichierTotalDataDD $FichierTot $JR Code] set User [InterrogeFichierTotalDataDD $FichierTot $JR User] set Band [InterrogeFichierTotalDataDD $FichierTot $JR Bande] #les profils set ProfilCalc [InterrogeFichierTotalDataDD $FichierTot $JR Profil] set ProfilConsensus [InterrogeFichierTotalDataDD $FichierTot $JR ProfCons] #Sequence set FichierNuctfa "[RepertoireDuGenome]/nuctfa/$JR" if {![file exists $FichierNuctfa]} {Espionne "$FichierNuctfa doesn t exist";set Seq ""; set LSeq ""} else {set Seq [QueLaSequenceDuFichierTFA $FichierNuctfa];set LSeq [string length $Seq]} #Masking if {[InterrogeBilanMasking $JR LesEtats] != ""} { set PercentMask [InterrogeBilanMasking $JR Etat MRM PMasked ] set LesRepeatsMasques [InterrogeBilanMasking $JR Etat MRM LesRepeats] } #localisation bande cyto (from proc CreeListeTotaleDD) set BandeCyto "" set FichierLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" if {![file exists $FichierLoc]} {Espionne "$FichierLoc doesn t exist"} set LesLocs [InterrogeLocalisation $FichierLoc Nom $JR] if {$LesLocs!=""} { foreach Loc $LesLocs { if {[regexp "Best" [lindex $Loc 20]]} { set BandeCyto [lindex $Loc 19] break } set Vu($Bande,$Ow) 1 } } #Espionne $BandeCyto #if {$JR=="DD0004"} {FaireLire "$FichierLoc - [llength $Loc] - $BandeCyto"} #RefSeq set AccessRefSeq [InterrogeFichierBestNMavecDef $FichierRefSeq $JR NM] set DefRefSeq [InterrogeFichierBestNMavecDef $FichierRefSeq $JR Def] if {$AccessRefSeq==""} {set AccessRefSeq "";set DefRefSeq ""} #Best Human Prot set AccBestProtHuman [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD AccProt] set DefBestProtHuman [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DefProt] set AccBestRNAHuman [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD AccRNA] set DefBestRNAHuman [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DefRNA] #Gel DD pour le JR set DifE [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifE] set ProfE [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD ProfE] set DifS [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifS] set ProfS [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD ProfS] set DifU [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifU] set ProfU [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD ProfU] set DifMoy [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD DifMoy] set ProfMoy [InterrogeFichierDDUniques3T $FichierUniq $NumGeneDD Pmoy] #Les GO if {$AccBestProtHuman!=""} { if {$LesGO==""} {set Ontology ""} else { set Ontology "" foreach GO $LesGO { set LaDefinitionGO [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] append Ontology "$GO $LaDefinitionGO /" } } #LesPathways Kegg if {$LesPathwaysKegg==""} {set Pathways ""} else { foreach Pathway $LesPathwaysKegg { set Pathways "" set LaDefinitionKEGG [InterrogeMesKEGG Pathway $Pathway Definition] append Pathways "$Pathway $LaDefinitionKEGG /" } } #Les Domaines if {$LesDomainesPFAMA==""} {set DomainesPFAMA ""} else { set DomainesPFAMA "" foreach LeDomaine $LesDomainesPFAMA { set i 0; set Liste "" foreach Do $LeDomaine { incr i if {$i<4} {lappend Liste $Do} } append DomainesPFAMA "$Liste /" } #set DomainesPFAMA [join $LesDomaines " /"] } } else {set Ontology ""; set Pathways ""; set DomainesPFAMA ""} #INFOS AFFY ### if {[info exists Affy($JR)]} { set MA 1 set CodeAffy [InterrogeFichierDataAffyPourTous3T $FichierAffy $Affy($JR) Code] set Def [InterrogeFichierDataAffyPourTous3T $FichierAffy $Affy($JR) Def] set FoldMoy [InterrogeFichierDataAffyPourTous3T $FichierAffy $Affy($JR) FoldMoy] set ProfilMoyAffy [InterrogeFichierDataAffyPourTous3T $FichierAffy $Affy($JR) ProfMoy] } else {set MA 0;set CodeAffy ""; set Def ""; set FoldMoy ""; set ProfilMoyAffy ""} AppendAuFichier $FichierSortie "$n\t$JR\t$CodeClone\t$Band\t$User\t$LesJumeauxDuJR\t$LSeq\t$Seq\t$PercentMask\t$LesRepeatsMasques\t$DifE\t$ProfE\t$DifS\t$ProfS\t$DifU\t$ProfU\t$DifMoy\t$ProfMoy\t$ProfilCalc\t$ProfilConsensus\t$ProfilVN\t$ProfilNorthern\t$ProfilMb\t$ProfilMoyAffy\t$BandeCyto\t$AccBestProtHuman\t$DefBestProtHuman\t$AccBestRNAHuman\t$DefBestRNAHuman\t$AccessRefSeq\t$DefRefSeq\t$Ontology\t$Pathways\t$DomainesPFAMA\t$MA\t$CodeAffy\t$Def\t$FoldMoy" } } proc oldCreeFichierJumeauxLocs {} { # basee sur fichier BestLocalisation_Human SEULEMENT!!!voir proc au-dessous # Cree le fichier jumeaux_Overlap dans le dir fiches. # Jumeaux = Clones localises sur le meme chromosome avec des locs chevauchantes. # Attention : Considere la best localisation. # Premiere best si cas polyloc. # Trie les clones d'un meme cluster par ordre decroissant de leur longueur (nuctfa) set ListeDesPABsApresJumSeq [CreeLaNouvelleListeDesPABsApresJumeauxSeq] if { ! [file exists "[RepertoireDuGenome]/fiches"]} { File mkdir "[RepertoireDuGenome]/fiches" } set FichierDesClonesEnOverlap "[RepertoireDuGenome]/fiches/jumeaux_Overlap" set FichierBestLoc "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" if {![file exists $FichierBestLoc]} {return "I need the file /Localisation/BestLocalisation_Human"} set LesLocsNom {} foreach Nom $ListeDesPABsApresJumSeq { #FaireLire $Nom set Loc [InterrogeLocalisation $FichierBestLoc Nom $Nom] if {$Loc==""} {continue} if {[llength $Loc]>=2} { set Loc [lindex $Loc 0] } else { set Loc [join $Loc ""] } set Chro [lindex $Loc 9] set DSurChro [lindex $Loc 10] set FSurChro [lindex $Loc 11] if {$Chro==""} {Espionne $Nom} lappend LesLocsNom "$Chro $DSurChro $FSurChro $Nom" } #commande vue avec Raymond #permet de trier en fonction de la borne inferieure "a" set LesLocsNomPreTriees [lsort -command CompareChroDebut $LesLocsNom] set LesLocsNomTriees [lsort -command CompareChroFin $LesLocsNomPreTriees] lappend LesLocsNomTriees "bidon bidon bidon bidon bidon" set OldChromo "zzzz" set OldInf 1111111111111111 set OldSup 0 set LaSortie {} foreach Loc $LesLocsNomTriees { if {$Loc!="bidon bidon bidon bidon bidon"} { scan $Loc "%s %d %d %s" chromo inf sup code if {($chromo == $OldChromo) && ($inf <= $OldSup)} { if {![info exists LesMemes]} { set LesMemes $Oldcode } lappend LesMemes $code } else { if {[info exists LesMemes]} { lappend LaSortie [join $LesMemes " "] unset LesMemes } } set OldChromo $chromo set OldInf $inf set OldSup $sup set Oldcode $code } } if {![file exists $FichierDesClonesEnOverlap] || [file exists $FichierDesClonesEnOverlap] && [OuiOuNon "Do you want to replace the file jumeaux_Overlap"]} { if {$LaSortie=={}} { Sauve "No overlap were found" dans $FichierDesClonesEnOverlap } else { set Sortie [TrieLaSortie $LaSortie] Espionne "fin" Sauve $Sortie dans $FichierDesClonesEnOverlap } } return $FichierDesClonesEnOverlap } proc oldCreeFichierTous {FichierSortie1} { #Sortie: /ANALYSE/TousComplete #---Courts, conta et N foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/LesPABsCourts"] { set Court($Ligne) 1 } foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/LesPABsContamines.28"] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach Nom $LesJumeaux { set Conta($Nom) 1 } } foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/LesPABsAvecN.26avr05"] { if {$Ligne==""} {continue} set LesJumeaux [split $Ligne " "] foreach Nom $LesJumeaux { set N($Nom) 1 } } #--- paper1 set FichierCorres "[RepertoireDuGenome]/lacorrespondance" foreach Ligne [LesLignesDuFichier $FichierCorres] { if {$Ligne==""} {continue} set Ligne [split $Ligne "\t"] set New [lindex $Ligne 0]; set Old [lindex $Ligne 1] set O($Old) $New } foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/paper1"] { if {[info exists O($Ligne)]} {set DD $O($Ligne); set Paper($DD) 1} else {Espionne "no correspondance pour $Ligne"} } #--- #la bande pour un couple (user, codeclone) foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Clones_bandes_new"] { ## (rq: pas de user R dans ce fichier) if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set U [lindex $LesChamps 0] ### ATTENTION: enlever les espaces qui sont parfois apres le codeclone ###### set CodeClone [string trim [lindex $LesChamps 1]] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } set B [lindex $LesChamps 2] set Band($U,$CodeClone) $B } #Espionne "[array names Band]" #Profil foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/FoldExpression_tous"] { set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 0] set Prof [lindex $LesChamps 1] if {$Prof=="+"} {set P($DD) "T"} if {$Prof=="-"} {set P($DD) "N"} if {$Prof=="0"} {set P($DD) "C"} } #Profil_consensus foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/ResolutionTotaleDesConflits_pourGscope.txt"] { if {[regexp "gscopecode" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 1] set ProfCons [lindex $LesChamps 5] set Pc($DD) $ProfCons } #Intensites ############################################# # Attention! # # les numeros de bandes ne sont pas uniques # # Exemple: J PM et CW ont fait une bande 48 # ############################################# foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Bands_intensiteDD.txt"] { if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set User [lindex $LesChamps 0] set B [lindex $LesChamps 1] regsub -all "\'" $B "" B set I_TE($User,$B) [lindex $LesChamps 3] set I_NE($User,$B) [lindex $LesChamps 4] set I_TS($User,$B) [lindex $LesChamps 5] set I_NS($User,$B) [lindex $LesChamps 6] set I_TU($User,$B) [lindex $LesChamps 7] set I_NU($User,$B) [lindex $LesChamps 8] } set FichierLocBox "[RepertoireDuGenome]/Localisation/oldBoxLocalisation_Human_Best" set FichierLocBox2 "[RepertoireDuGenome]/Localisation/BoxLoc" if {![file exists $FichierLocBox]} {Espionne "$FichierLocBox does not exist"} if {![file exists $FichierLocBox2]} {Espionne "$FichierLocBox2 does not exist"} set FichierLocBest "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" if {![file exists $FichierLocBest]} {Espionne "$FichierLocBest does not exist"} set FichierSelectEST "[RepertoireDuGenome]/fiches/SelectedEST" foreach DD [ListeDesPABs] { Espionne $DD #--- set JR [JumeauRepresentatif $DD] # Listes speciales if {[info exists Court($DD)]} {set InfoCourt 1} else {set InfoCourt 0} if {[info exists Conta($DD)]} {set InfoConta 1} else {set InfoConta 0} if {[info exists N($DD)]} {set InfoN 1} else {set InfoN 0} # Localisation set LesLocBest [InterrogeLocalisation $FichierLocBest Nom $DD] if {$LesLocBest==""} { set LesLocBox [InterrogeLocalisation $FichierLocBox Nom $DD] if {$LesLocBox==""} { set LesLocBox2 [InterrogeLocalisation $FichierLocBox2 Nom $JR] if {$LesLocBox2==""} { set Chro ""; set Deb ""; set Fin ""; set Sens ""; set BandeCyto "" Espionne "$JR est sans loc!" } else { foreach Loc $LesLocBox2 { if {[regexp "Best" [lindex $Loc 20]]} { set BandeCyto [lindex $Loc 19] set Chro [lindex $Loc 9] set Deb [lindex $Loc 10] set Fin [lindex $Loc 11] set Sens [lindex $Loc 12] break } } } } else { foreach Loc $LesLocBox { if {[regexp "Best" [lindex $Loc 20]]} { set BandeCyto [lindex $Loc 19] set Chro [lindex $Loc 9] set Deb [lindex $Loc 10] set Fin [lindex $Loc 11] set Sens [lindex $Loc 12] break } } } } else { foreach Loc $LesLocBest { if {[regexp "Best" [lindex $Loc 20]]} { set BandeCyto [lindex $Loc 19] set Chro [lindex $Loc 9] set Deb [lindex $Loc 10] set Fin [lindex $Loc 11] set Sens [lindex $Loc 12] break } } } # EST set EST [InterrogeSelectedEST $FichierSelectEST Nom $DD LesAccess] if {$EST==""} {set SiEST 0} else {set SiEST 1} # Papier Lemaire et al. if {[info exists Paper($DD)]} {set Papier 1} else {set Papier 0} # profil moyen (Jumeaux) set FichierFinal "[RepertoireDuGenome]/ANALYSE/final" set PMoy [InterrogeFichierFinal $DD PMoy] set IMoy [InterrogeFichierFinal $DD IMoy] # set CC [ExtraitInfo $DD "CodeClone"] set Ow [ExtraitInfo $DD "OwnerOfCDNA"] if {$Ow=="R"} {set Ow "I"} if {$Ow=="F"} {set CC [string toupper $CC]} set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" Protein Access] set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" mRNA Access] # JR if {$JR!=""} { if {$AccBestProtHuman==""} { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $JR Organisme "Homo sapiens" Protein Access] } } # -- if {$AccBestProtHuman!=""} { set DefBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestProtHuman Definition] } else {set DefBestProtHuman ""} # JR if {$JR!=""} { if {$AccBestmRNAHuman==""} { set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $JR Organisme "Homo sapiens" mRNA Access] } } # -- if {$AccBestmRNAHuman!=""} { set DefBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestmRNAHuman Definition] } else {set DefBestmRNAHuman ""} if {[info exists Band($Ow,$CC)]} { set Bande $Band($Ow,$CC) #Bandes de Fred du type H16B sans profil alors que H16 avec profil et meme bande if {$Ow=="F" && [regexp -nocase {[A-Z]+[0-9]+[A-Z]} $Bande]} { regexp -nocase -indices {[A-Z]+[0-9]+} $Bande tmp set NewBande [string range $Bande 0 [lindex $tmp 1]] set Bande $NewBande } # Donnees manquantes (pour la plupart, clones de Fred) if {(![info exists I_TE($Ow,$Bande)] || ([info exists I_TE($Ow,$Bande)] && $I_TE($Ow,$Bande)=="")) || (![info exists I_NE($Ow,$Bande)] || ([info exists I_NE($Ow,$Bande)] && $I_NE($Ow,$Bande)==""))} { set Ite "" set Ine "" } if {(![info exists I_TS($Ow,$Bande)] || ([info exists I_TS($Ow,$Bande)] && $I_TS($Ow,$Bande)=="")) || (![info exists I_NS($Ow,$Bande)] || ([info exists I_NS($Ow,$Bande)] && $I_NS($Ow,$Bande)==""))} { set Its "" set Ins "" } if {(![info exists I_TU($Ow,$Bande)] || ([info exists I_TU($Ow,$Bande)] && $I_TU($Ow,$Bande)==""))|| (![info exists I_NU($Ow,$Bande)] || ([info exists I_NU($Ow,$Bande)] && $I_NU($Ow,$Bande)==""))} { set Itu "" set Inu "" } if {([info exists I_TE($Ow,$Bande)] && $I_TE($Ow,$Bande)!="") && ([info exists I_NE($Ow,$Bande)] && $I_NE($Ow,$Bande)!="")} { set Ite $I_TE($Ow,$Bande) set Ine $I_NE($Ow,$Bande) } if {([info exists I_TS($Ow,$Bande)] && $I_TS($Ow,$Bande)!="") && ([info exists I_NS($Ow,$Bande)] && $I_NS($Ow,$Bande)!="")} { set Its $I_TS($Ow,$Bande) set Ins $I_NS($Ow,$Bande) } if {([info exists I_TU($Ow,$Bande)] && $I_TU($Ow,$Bande)!="") && ([info exists I_NU($Ow,$Bande)] && $I_NU($Ow,$Bande)!="")} { set Itu $I_TU($Ow,$Bande) set Inu $I_NU($Ow,$Bande) } if {$Ite=="" && $Ine=="" && $Its=="" && $Ins=="" && $Itu=="" && $Inu==""} { Espionne "aucune valeur de gel DD pour cette bande: $Bande" } } else { Espionne "$DD : no band" #AppendAuFichier $FichierPbsBand "$DD $CC $Ow" set Bande ""; set Ite "";set Ine "";set Its "";set Ins "";set Itu "";set Inu "" } if {[info exists P($DD)]} {set Profil $P($DD)} else {set Profil ""} if {[info exists Pc($DD)]} {set Pcons $Pc($DD)} else {set Pcons ""} AppendAuFichier $FichierSortie1 "$DD\t$JR\t$CC\t$Ow\t$Bande\t$InfoCourt\t$InfoConta\t$InfoN\t$Chro\t$Deb\t$Fin\t$Sens\t$BandeCyto\t$SiEST\t$AccBestProtHuman\t$DefBestProtHuman\t$AccBestmRNAHuman\t$DefBestmRNAHuman\t$Profil\t$Pcons\t$PMoy\t$IMoy\t$Ite\t$Ine\t$Its\t$Ins\t$Itu\t$Inu\t$Papier" } } proc oldCreeLesFichiersDataDD {FichierSortie1 FichierSortie2 FichierPbsBand FichierPbsExpr} { #FichierSortie1 TotalData #FichierSortie2 DataUniques #FichierPbsBand Pbs_band #FichierPbsExpr Pbs_expr #Attention au fichier avec les jumeaux. foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Clones_bandes_new"] { ## (rq: pas de user R dans ce fichier) if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set U [lindex $LesChamps 0] ### ATTENTION: enlever les espaces qui sont parfois apres le codeclone ###### set CodeClone [string trim [lindex $LesChamps 1]] if {$U=="F"} { set CodeClone [string toupper $CodeClone] } set B [lindex $LesChamps 2] set Band($U,$CodeClone) $B } #Espionne "[array names Band]" #Profil foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/FoldExpression_tous"] { set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 0] set Prof [lindex $LesChamps 1] if {$Prof=="+"} {set P($DD) "T"} if {$Prof=="-"} {set P($DD) "N"} if {$Prof=="0"} {set P($DD) "C"} } #Profil_consensus foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/ResolutionTotaleDesConflits_pourGscope.txt"] { if {[regexp "gscopecode" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set DD [lindex $LesChamps 1] set ProfCons [lindex $LesChamps 5] set Pc($DD) $ProfCons } #Intensites ############################################# # Attention! # # les numeros de bandes ne sont pas uniques # # Exemple: J PM et CW ont fait une bande 48 # ############################################# foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/OVERLAP/Bands_intensiteDD.txt"] { if {[regexp "user" $Ligne]} {continue} set LesChamps [split $Ligne "\t"] set User [lindex $LesChamps 0] set B [lindex $LesChamps 1] regsub -all "\'" $B "" B set I_TE($User,$B) [lindex $LesChamps 3] set I_NE($User,$B) [lindex $LesChamps 4] set I_TS($User,$B) [lindex $LesChamps 5] set I_NS($User,$B) [lindex $LesChamps 6] set I_TU($User,$B) [lindex $LesChamps 7] set I_NU($User,$B) [lindex $LesChamps 8] } set n 0 #j ai remplace LesLignesDuFichier "[RepertoireDuGenome]/fiches/ClustersNew" #par listedespabs foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/931"] { Espionne $Ligne set LesJumeaux [split $Ligne " "] set NbJumeaux [llength $LesJumeaux] #Espionne "nb jum : $NbJumeaux" set Pena 0 incr n #Espionne "nb jum : $LesJumeaux" set SommeIte 0 set SommeIne 0 set SommeIts 0 set SommeIns 0 set SommeItu 0 set SommeInu 0 set VuProt 0 set VuRNA 0 foreach DD $LesJumeaux { Espionne $DD set CC [ExtraitInfo $DD "CodeClone"] set Ow [ExtraitInfo $DD "OwnerOfCDNA"] if {$Ow=="R"} {set Ow "I"} if {$Ow=="F"} {set CC [string toupper $CC]} set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" Protein Access] set AccBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $DD Organisme "Homo sapiens" mRNA Access] if {$AccBestProtHuman!=""} { set DefBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestProtHuman Definition] set VuProt 1 set AccProt $AccBestProtHuman set DefProt $DefBestProtHuman } else {set DefBestProtHuman ""} if {$AccBestmRNAHuman!=""} { set DefBestmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestmRNAHuman Definition] set VuRNA 1 set AccRNA $AccBestmRNAHuman set DefRNA $DefBestmRNAHuman } else {set DefBestmRNAHuman ""} if {[info exists Band($Ow,$CC)]} { set Bande $Band($Ow,$CC) #Donnees manquantes #"Pena" compte les bandes pour lesquelles y a des data manquantes if {(![info exists I_TE($Ow,$Bande)] || ([info exists I_TE($Ow,$Bande)] && $I_TE($Ow,$Bande)=="")) || (![info exists I_NE($Ow,$Bande)] || ([info exists I_NE($Ow,$Bande)] && $I_NE($Ow,$Bande)=="")) || (![info exists I_TS($Ow,$Bande)] || ([info exists I_TS($Ow,$Bande)] && $I_TS($Ow,$Bande)=="")) || (![info exists I_NS($Ow,$Bande)] || ([info exists I_NS($Ow,$Bande)] && $I_NS($Ow,$Bande)=="")) || (![info exists I_TU($Ow,$Bande)] || ([info exists I_TU($Ow,$Bande)] && $I_TU($Ow,$Bande)=="")) || (![info exists I_NU($Ow,$Bande)] || ([info exists I_NU($Ow,$Bande)] && $I_NU($Ow,$Bande)=="")) } { set Ite "";set Ine "";set Its "";set Ins "";set Itu "";set Inu ""; incr Pena if {[info exists P($DD)]} {set Profil $P($DD)} else {set Profil ""} if {[info exists Pc($DD)]} {set Pcons $Pc($DD)} else {set Pcons ""} AppendAuFichier $FichierSortie1 "$n\t$DD\t$CC\t$Ow\t$Bande\t$AccBestProtHuman\t$DefBestProtHuman\t$AccBestmRNAHuman\t$DefBestmRNAHuman\t$Profil\t$Pcons\t$Ite\t$Ine\t$Its\t$Ins\t$Itu\t$Inu" #Espionne "$DD : pas de donnees d expression" AppendAuFichier $FichierPbsExpr "$DD $CC $Ow" continue } set Ite $I_TE($Ow,$Bande) set Ine $I_NE($Ow,$Bande) set Its $I_TS($Ow,$Bande) set Ins $I_NS($Ow,$Bande) set Itu $I_TU($Ow,$Bande) set Inu $I_NU($Ow,$Bande) #[info exists Vu($Bande,$Ow)] #le profil d'une bande deja vue ne compte pas. #incr Pena #else set SommeIte [expr $SommeIte + $Ite] set SommeIne [expr $SommeIne + $Ine] set SommeIts [expr $SommeIts + $Its] set SommeIns [expr $SommeIns + $Ins] set SommeItu [expr $SommeItu + $Itu] set SommeInu [expr $SommeInu + $Inu] } else { #Espionne "$DD : no band" AppendAuFichier $FichierPbsBand "$DD $CC $Ow" set Bande ""; set Ite "";set Ine "";set Its "";set Ins "";set Itu "";set Inu "" incr Pena } if {[info exists P($DD)]} {set Profil $P($DD)} else {set Profil ""} if {[info exists Pc($DD)]} {set Pcons $Pc($DD)} else {set Pcons ""} AppendAuFichier $FichierSortie1 "$n\t$DD\t$CC\t$Ow\t$Bande\t$AccBestProtHuman\t$DefBestProtHuman\t$AccBestmRNAHuman\t$DefBestmRNAHuman\t$Profil\t$Pcons\t$Ite\t$Ine\t$Its\t$Ins\t$Itu\t$Inu" set Vu($Bande,$Ow) 1 } if {$VuProt==0} {set AccProt ""; set DefProt ""} if {$VuRNA==0} {set AccRNA "";set DefRNA ""} set Total [expr $NbJumeaux-$Pena] if {$Total==0} { #Espionne "total nul pour $Ligne" AppendAuFichier $FichierSortie2 "$n\t$AccProt\t$DefProt\t$AccRNA\t$DefRNA" if {[info exists Vu]} {unset Vu} continue } ####### E S U distincts ############## set TNE [expr $SommeIte-$SommeIne] set TNS [expr $SommeIts-$SommeIns] set TNU [expr $SommeItu-$SommeInu] if {$TNE>0} {set PE "T"} ; if {$TNE<0} {set PE "N"} ;if {$TNE==0} {set PE "0"} if {$TNS>0} {set PS "T"} ; if {$TNS<0} {set PS "N"} ;if {$TNS==0} {set PS "0"} if {$TNU>0} {set PU "T"} ; if {$TNU<0} {set PU "N"} ;if {$TNU==0} {set PU "0"} ######## MOYENNES ################## set SommeDesMoyennesN [format "%.3f" [expr ($SommeIne*1.0/$Total*1.0)+($SommeIns*1.0/$Total*1.0)+($SommeInu*1.0/$Total*1.0)]] set SommeDesMoyennesT [format "%.3f" [expr ($SommeIte*1.0/$Total*1.0)+($SommeIts*1.0/$Total*1.0)+($SommeItu*1.0/$Total*1.0)]] set TNmoy [expr ($SommeDesMoyennesT-$SommeDesMoyennesN)] if {$TNmoy>0} {set Pmoy "T"} if {$TNmoy<0} {set Pmoy "N"} if {$TNmoy==0} {set Pmoy "0"} AppendAuFichier $FichierSortie2 "$n\t$AccProt\t$DefProt\t$AccRNA\t$DefRNA\t$TNE\t$PE\t$TNS\t$PS\t$TNU\t$PU\t$TNmoy\t$Pmoy" if {[info exists Vu]} {unset Vu} } } proc oldLesAutresJumeaux {FichierClusters {RepCollection ""}} { #Autres jumeaux = JR ayant le meme mRNA ou la meme proteine. if {$RepCollection==""} {set RepCollection [RepertoireDuGenome]} set LesDefinitons {} foreach Nom [ListeDesJR $FichierClusters] { set Proteine [ExtraitLaProteineDesInfosAutomatiques $Nom $RepCollection] if {$Proteine !=""} { lappend LesDefinitons "$Proteine $Nom" } else { set mRNA [ExtraitDefinitionRNADesInfosAutomatiques $Nom $RepCollection] if {$mRNA!=""} { lappend LesDefinitons "$mRNA $Nom" } } } set LesDefinitonsTriees [lsort -dictionary $LesDefinitons] set DefinitionPrec "" set LesDoublons {} foreach Definition $LesDefinitonsTriees { if {[regexp " " $Definition]} {regsub " " $Definition " " Definition} set l [llength $Definition] set Nom [lindex $Definition [expr $l-1]] regsub "$Nom" $Definition "" Def if {$DefinitionPrec!=""} { set lprec [llength $DefinitionPrec] set NomPrec [lindex $DefinitionPrec [expr $lprec-1]] regsub "$NomPrec" $DefinitionPrec "" DefPrec } else {set DefPrec $DefinitionPrec} if {$Def==$DefPrec} { #lappend LesDoublons "$Nom = $NomPrec" lappend LesDoublons $Nom } set DefinitionPrec $Definition } #Espionne [llength $LesDoublons] return $LesDoublons } proc oldM_invM {M} { T_M T $M 1 return [M_T [T33_invT33 TI T]] } proc oldTailleEchantillon {FichierTfa} { set LongueurTfa [LongueurSeqTfa $FichierTfa] set NbCodons [expr $LongueurTfa/3] return $NbCodons } proc old_CreeFichierDaedalus {} { foreach Nom [ListeDesPABs] { Espionne $Nom #set AccessProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "Protein" Access] set FichierTFA "[RepertoireDuGenome]/prottfa/$Nom" set ID [AccessDuTFADeLaProteine $FichierTFA] if {$AccessProtHuman==""} {set AccessProtHuman $ID; lappend LesIDAccessProtHuman $AccessProtHuman} #FaireLire "$Nom $AccessProtHuman $ID" #AppendAuFichier "[RepertoireDuGenome]/PremierFichierDaedalus" "ID $ID\nDR prot;$AccessProtHuman;prot.\n//" } foreach ID $ } proc old_InterrogeFichierRequete {Fichier} { foreach Ligne [LesLignesDuFichier $Fichier] { if {$Ligne==""} {continue} set PFAM [lindex $Ligne 0] set Nb [lindex $Ligne 1] if {$Nb==0} {lappend LesPFAMSpecifiques $PFAM} } Espionne [llength $LesPFAMSpecifiques] SauveLesLignes $LesPFAMSpecifiques dans "[RepertoireDuGenome]/fiches/DomainesSpecifiques" } proc old_ListeDesDatas {FichierClusters {Selec "EXH-PPRB PP00"}} { set Liste [ListeDesJR $FichierClusters] set LesDatas {} set LesSelec [split $Selec " "] foreach Nom $Liste { set CodeClone [ExtraitInfo $Nom OwnerOfCDNA] foreach Sel $LesSelec { if {[regexp "^$Sel" $CodeClone]} {lappend LesDatas $Nom} } } Espionne "nb uniques: [llength $LesDatas]" SauveLesLignes $LesDatas dans "[RepertoireDuGenome]/DatasBPH" } proc old_ListeLesSansRien {} { set ListeNo {} set Fichier "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human_Best" #set Fichier "[RepertoireDuGenome]/Localisation/BestLocalisation_Human" if {![file exists $Fichier]} {return "$Fichier doesn t exist"} foreach Nom [ListeDesPABs] { #Espionne $Nom set FMRM "[RepertoireDuGenome]/nucmask/$Nom.mrm" if {![file exists $FMRM]} {return "$Nom -> pas de nucmask!"} set SeqMRM [QueLaSequenceDuFichierTFA $FMRM] #set LAvtMRM [string length $SeqMRM] regsub -all -nocase "N" $SeqMRM "" SeqSansNMRM set LApresMRM [string length $SeqSansNMRM] if {$LApresMRM>=25} { Espionne $Nom #la loc des seq DD est tellement difficile qu'il ne faut pas en tenir compte! #sauf si elle est nulle. Voir proc CompteLesSequencesDDBizarres set Loc [InterrogeLocalisation $Fichier Nom $Nom] #set AccRNACh [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] #set AccProtCh [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] #set OrgaChoisi [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] set AccessmRNAHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "mRNA" Access] set AccessProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" "Protein" Access] set FichierBlastnest "[RepertoireDuGenome]/blastnest-human/$Nom" if {$Loc==""} {set L 0} else {set L 1} if {$AccessmRNAHuman==""} {set R 0} else {set R 1} if {$AccessProtHuman==""} {set P 0} else {set P 1} if {$L==0 && $R==0 && $P==0} { if {[file exists $FichierBlastnest]} { #set Test [TestBlast $FichierBlastnest] #95% pour test par defaut set Test [MatchWithESTsOuiOuNon $Nom $FichierBlastnest] #if {$Test==0} {lappend ListeNo $Nom} if {$Test==0} { lappend ListeNo $Nom AppendAuFichier "[RepertoireDuGenome]/lessansrien2" $Nom } #if {$Test==1} {lappend ListeNoAvecEST $Nom} } else { lappend ListeNo $Nom AppendAuFichier "[RepertoireDuGenome]/lessansrien2" $Nom } } } } #Espionne "avec est: [llength $ListeNoAvecEST]" Espionne "sans rien:[llength $ListeNo]" return $ListeNo } proc oldacFichierRecapitulatif {Nom {Projet ""} {Lab ""} {Protocol ""} {Def spe} {Nature DNA} {Orga ""} {IdMin 0.8} {IdMax 0.95}} { if {$Nom==""} {return} set RepRecap "[RepertoireDuGenome]/bilan" if {![file exists $RepRecap]} {File mkdir $RepRecap} set FichierRecap "$RepRecap/$Nom" set FichierOCADE "[RepertoireDuGenome]/fiches/Orf2Cluster2Access2Def2Expression" set FichierNuctfa "[RepertoireDuGenome]/nuctfa/$Nom" set FichierLocHumanG "[RepertoireDuGenome]/Localisation/BoxLocalisation_Human" set FichierProttfa "[RepertoireDuGenome]/prottfa/$Nom" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" #set FichierProttfaExonicMap "[RepertoireDuGenome]/prottfaexonicmap/$Nom" set FichiermRNAExonicMap "[RepertoireDuGenome]/mrnatfa_Homo_sapiens_exonicmap/$Nom" set FichierClustMSF "[RepertoireDuGenome]/msf/$Nom.clust" set FichierMSF "[RepertoireDuGenome]/msf/$Nom" set FichierDefinition "[RepertoireDuGenome]/fiches/DefinitionsConsensus" set FichierBest "[RepertoireDuGenome]/fiches/BestProteinAndmRNAForeachOrga" ########## #PROJET### ########## if {$Projet!=""} { set LeTexte [list "PROJECT: $Projet"] } else { set Projet [RepertoireDuGenome] set Projet [file tail $Projet] set LeTexte [list "PROJECT: $Projet"] } lappend LeTexte "" lappend LeTexte "******************************************************" ############################################################################# ######## #INPUT## ######## lappend LeTexte "INPUT:" Espionne "$Nom -> From ; Protocol; Access ; Definition ; Organism; Nature; Length" if {$Lab==""} { set Lab $Projet } lappend LeTexte " From: $Lab" #Suppressive Subtractive Hybridization (SSH) if {$Protocol!=""} {lappend LeTexte " Protocol: $Protocol" } if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] != ""} { set AccessSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Access] lappend LeTexte " Access/Clone: $AccessSeq" } if {$Def=="spe"} { if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] != ""} { set DefinitionSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] lappend LeTexte " Infos: $DefinitionSeq" } } else { if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] != ""} { set DefinitionSeq [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Definition] lappend LeTexte " Definition: $DefinitionSeq" } } if {$Nature=="Protein"} { if {[file exists $FichierProttfa]} { set TailleSeq [TailleDeLaSequenceDuFichierTFA $FichierProttfa] lappend LeTexte " Length: $TailleSeq pb" } } elseif {[file exists $FichierNuctfa]} { set TailleSeq [TailleDeLaSequenceDuFichierTFA $FichierNuctfa] lappend LeTexte " Length: $TailleSeq pb" } lappend LeTexte " Nature: $Nature" set OrganismeSeq [OrganismeDuPAB $Nom] lappend LeTexte " Organism: $OrganismeSeq" if {$OrganismeSeq == "Homo sapiens"} {set IdDeRef $IdMax} else {set IdDeRef $IdMin} set PIdDeRef [format "%.1f" [expr $IdDeRef * 100]] ###Cluster dans lequel se trouve la sequence#### Espionne "$Nom -> cluster" if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] != ""} { set Cluster [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Cluster] lappend LeTexte " Cluster: $Cluster" } ###Les expressions sur les puces affymetrix##### Espionne "$Nom -> expression" if {[InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom LesExpressions] != ""} { set LesTemps [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesPointsTemporels] set LesConditions [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE LesConditions ] set LaLigneTemps [list [format "%-6s" ""]] foreach Temps $LesTemps {lappend LaLigneTemps [format "%-6s" $Temps]} lappend LeTexte "" lappend LeTexte " Expression:" lappend LeTexte [join $LaLigneTemps ""] foreach Condition $LesConditions { set LaLigneCondition [list [format "%-6s" $Condition]] foreach Temps $LesTemps { set Expr [InterrogeOrf2Cluster2Access2Def2Expression $FichierOCADE $Nom Condition $Condition PointTemporel $Temps Expression] if {$Expr == ""} {lappend LaLigneCondition [format "%-6s" ""];continue} lappend LaLigneCondition [format "%-6.0f" $Expr] } lappend LeTexte [join $LaLigneCondition ""] } } ###Composition ATCG### #....................# ###Les informations relatives au masking, remasking et mrm#### Espionne "$Nom -> Masking ; ReMasking ; Masking and ReMasking" if {[InterrogeBilanMasking $Nom LesEtats] != ""} { lappend LeTexte "" foreach Etat [InterrogeBilanMasking $Nom LesEtats] { if {[InterrogeBilanMasking $Nom Etat $Etat PMasked] == ""} {continue} set PMasked [InterrogeBilanMasking $Nom Etat $Etat PMasked ] set NbRepeat [InterrogeBilanMasking $Nom Etat $Etat NbRepeat] lappend LeTexte " $Etat PMasked: ${PMasked}%" lappend LeTexte " $Etat NbRepeat: $NbRepeat" set LesRepeatsEtLeurEffectif {} foreach Repeat [InterrogeBilanMasking $Nom Etat $Etat LesRepeats] { set n [InterrogeBilanMasking $Nom Etat $Etat Repeat $Repeat n] lappend LesRepeatsEtLeurEffectif [list $Repeat $n] } set LesRepeats {} foreach LeRepeat [lsort -index 1 -integer -decreasing $LesRepeatsEtLeurEffectif] { lappend LesRepeats "[lindex $LeRepeat 0] ([lindex $LeRepeat 1])" } if {$LesRepeats != {}} { lappend LeTexte " $Etat Repeat: [join $LesRepeats " ; "]" #lappend LeTexte [join $LesRepeats " ; "] } } } lappend LeTexte "" lappend LeTexte "******************************************************" ############################################################################# ######## #OUTPUT# ######## lappend LeTexte "OUTPUT:" lappend LeTexte " **********************************************" lappend LeTexte " General points:" lappend LeTexte "" lappend LeTexte " GScopeName: $Nom" ###Definition moyenne### Espionne "$Nom -> mean definition" if {[InterrogeDefinitionsConsensus $Nom Definition]!=""} { set DefMoy [InterrogeDefinitionsConsensus $Nom Definition] lappend LeTexte " Mean definition: $DefMoy" } ###Les noms des genes des proteines du meme cluster de msf que la proteine de ref### Espionne "$Nom -> Gene name" if {[InterrogeGeneName $Nom LesGeneNames] != ""} { set LesGeneNames {} foreach GN [InterrogeGeneName $Nom LesGeneNames] { if {$GN == ""} {continue} lappend LesGeneNames [list $GN [InterrogeGeneName $Nom GeneName $GN n]] } if {$LesGeneNames != {}} { set LesGeneNamesEtLeurEffectif {} foreach LeGN [lsort -index 1 -decreasing -integer $LesGeneNames] { lappend LesGeneNamesEtLeurEffectif "[lindex $LeGN 0] ([lindex $LeGN 1])" } #lappend LeTexte "" lappend LeTexte " GeneName: [join $LesGeneNamesEtLeurEffectif " ; "]" #lappend LeTexte " [join $LesGeneNamesEtLeurEffectif " ; "]" } } lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Chromosomal localisation" ############################################################################## ###Localisation de la sequence sur le genome humain### Espionne "$Nom -> localisation on human genome" if {[file exists $FichierLocHumanG]} { lappend LeTexte "" lappend LeTexte " Input sequence localisation:" if {[InterrogeLocalisation $FichierLocHumanG Nom $Nom] != ""} { set LesLocalisations [InterrogeLocalisation $FichierLocHumanG Nom $Nom] set InfoLoc [lindex [lindex $LesLocalisations 0] 1] if {$InfoLoc != "MonoLoc"} { lappend LeTexte " WARNING $InfoLoc" } foreach LaLocalisation $LesLocalisations { if {[lindex $LaLocalisation end] != "BestLoc" && [lindex $LaLocalisation end] != "BestPolyLoc"} {continue} set Chromosome [lindex $LaLocalisation 9 ] set D [lindex $LaLocalisation 10 ] set F [lindex $LaLocalisation 11 ] set Sens [lindex $LaLocalisation 12 ] set Contig [lindex $LaLocalisation 13 ] set BCyto [lindex $LaLocalisation end-1] set Id [lindex $LaLocalisation 6 ] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } } } else { lappend LeTexte " WARNING NoLoc" } } ###Localisation du human mRNA sur le genome humain### Espionne "$Nom -> localisation of the human complete cds mRNA" if {[file exists $FichiermRNAExonicMap]} { lappend LeTexte "" lappend LeTexte " Complete cds human mRNA localisation:" if {[InterrogeFichierExonicMap $FichiermRNAExonicMap LesRangs] != ""} { #nb exons set NbExons [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang 1 NbExonicAreas] if {$NbExons>0} { set Contig [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang 1 Contig] set LesDebEtFin {} set n 1 while {$n<[expr $NbExons+1]} { set DS [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang 1 ExonArea $n DS] set FS [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang 1 ExonArea $n FS] set Sens [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang 1 ExonArea $n Sens] lappend LesDebEtFin "Exon $n From $DS To $FS ($Sens) on Contig $Contig" incr n } } set LesRangs [InterrogeFichierExonicMap $FichiermRNAExonicMap LesRangs] if {1 < [llength $LesRangs]} {lappend LeTexte " WARNING PolyLoc"} foreach Rang $LesRangs { set Chromosome [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang Chromosome ] set Contig [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang Contig ] set DebCont [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang ContigLocalisation Debut] set FinCont [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang ContigLocalisation Fin ] set SensCont [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang Sens ] set LesCoordonneesSurChro [CoordonneesSurChromosome $Contig $DebCont $FinCont $SensCont] set D [lindex $LesCoordonneesSurChro 1] set F [lindex $LesCoordonneesSurChro 2] set Sens [lindex $LesCoordonneesSurChro 3] set BCyto [join [LesBandesCytologiquesDeLaLocalisation $Contig $DebCont $FinCont] " ; "] set n 0 set nTot 0 set NbAreas [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang NbExonicAreas] for {set i 1} {$i <= $NbAreas} {incr i} { incr n [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang ExonArea $i nAli ] incr nTot [InterrogeFichierExonicMap $FichiermRNAExonicMap Rang $Rang ExonArea $i nAliTot] } if {$nTot == 0} {continue} set Id [expr $n * 1.0 / $nTot] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Chromosome $Chromosome from $D to $F in $Sens strand ; Contig $Contig ; CytoBand $BCyto" lappend LeTexte " Human Identity: ${PId}%" set IdDeRef $IdMax if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the human genome is only $PId% (< $PIdDeRef%)" } } } else { lappend LeTexte " WARNING NoLoc" } InterrogeFichierExonicMap unset } if {[info exists NbExons]} { lappend LeTexte " Nb_Exons: $NbExons" foreach DebFin $LesDebEtFin { lappend LeTexte " $DebFin" } } ######################################################################## ####Si projet proteine if {$Nature=="Protein"} { if {[file exists $FichierBest]} { if {$Orga=="mouse"} { #special pour ProteoSys #mouse protein set ProteinAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Mus musculus" Protein Access] if {$ProteinAccess!=""} { set ProteinDef [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Definition] set ProteinTaille [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Taille] set ProteinId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $ProteinAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Mouse protein:" lappend LeTexte " Protein Access: $ProteinAccess" lappend LeTexte " Protein Definition: $ProteinDef" lappend LeTexte " Protein Organism: Mus musculus" lappend LeTexte " Protein Length: $ProteinTaille AA" lappend LeTexte " Percent Identity: $ProteinId" } #mouse mRNA set mRNAAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Mus musculus" mRNA Access] if {$mRNAAccess!=""} { set mRNADef [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Definition] set mRNATaille [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Taille] set mRNAId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $mRNAAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Mouse mRNA full length:" lappend LeTexte " mRNA Access: $mRNAAccess" lappend LeTexte " mRNA Definition: $mRNADef" lappend LeTexte " mRNA Organism: Mus musculus" lappend LeTexte " mRNA Length: $mRNATaille bp" lappend LeTexte " Percent Identity: $mRNAId" } } #human protein set ProteinAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$ProteinAccess!=""} { set ProteinDef [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Definition] set ProteinTaille [InterrogeBestProteinAndmRNAForeachOrga Access $ProteinAccess Taille] set ProteinId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $ProteinAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Human protein:" lappend LeTexte " Protein Access: $ProteinAccess" lappend LeTexte " Protein Definition: $ProteinDef" lappend LeTexte " Protein Organism: Homo sapiens" lappend LeTexte " Protein Length: $ProteinTaille AA" lappend LeTexte " Percent Identity: $ProteinId" } #human mRNA set mRNAAccess [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] if {$mRNAAccess!=""} { set mRNADef [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Definition] set mRNATaille [InterrogeBestProteinAndmRNAForeachOrga Access $mRNAAccess Taille] set mRNAId [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $mRNAAccess Identity] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Human mRNA full length:" lappend LeTexte " mRNA Access: $mRNAAccess" lappend LeTexte " mRNA Definition: $mRNADef" lappend LeTexte " mRNA Organism: Homo sapiens" lappend LeTexte " mRNA Length: $mRNATaille bp" lappend LeTexte " Percent Identity: $mRNAId" } } } ######################################################################### ###Commencons maintenant le boulot pour la meilleure proteine trouvee#### ##fichier accessdesprotetdesmrnaschoisis absent dans projet protein Espionne "$Nom -> best protein found" set AccessDuChoisi "" set InfoSeq [InterrogeProtAndmRNAChoisis $Nom SeqChoisie] set TailleProt [TailleDeLaSequenceDuFichierTFA $FichierProttfa] if {$InfoSeq != ""} { if {$InfoSeq == "SeqOK"} { lappend LeTexte "" lappend LeTexte " **********************************************" set AccessProt [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessmRNA [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] if {![string equal -nocase $AccessProt "NoProtein"]} { set AccessDuChoisi $AccessProt set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LesOrganismes [LesOrgasDeLaPage_PageInfo $PageInfoProt] if {$LesOrganismes == ""} { set LesOrganismes [list [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi]] } } if {[string equal -nocase $AccessProt "NoProtein"] && ![string equal -nocase $AccessmRNA "NomRNA"]} { set AccessProt "NoAccess" set DefProt "NoDef" set LesOrganismes [list [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi]] set From "mRNA complete CDS of BLASTN against genembl DB" set AccessDuChoisi $AccessmRNA } if {![string equal -nocase $AccessProt "NoProtein"] || ![string equal -nocase $AccessmRNA "NomRNA"]} { set Rang [lindex [InterrogeProtAndmRNA $Nom Access $AccessDuChoisi LesRangs] 0] set Type [InterrogeProtAndmRNA $Nom Rang $Rang Type ] if {$Type == "mRNA"} {set From "mRNA complete CDS from BLASTN against genembl DB"} else {set From "BLASTX against protein DB"} lappend LeTexte " Protein:" lappend LeTexte " Protein Access: $AccessProt" lappend LeTexte " Protein Definition: $DefProt" lappend LeTexte " Protein Organisms: [join $LesOrganismes " ; "]" lappend LeTexte " Protein Length: $TailleProt AA" lappend LeTexte " Protein From: $From" set DejaVu($AccessProt) 1 set IdDeLaProtAvecSeq $IdMin foreach Orga $LesOrganismes { if {$Orga == $OrganismeSeq} {set IdDeLaProtAvecSeq $IdMax} } set PIdDeLaProtAvecSeq [format "%.1f" [expr $IdDeLaProtAvecSeq * 100]] set Id [InterrogeProtAndmRNA $Nom Rang $Rang Id] set PId [format "%.1f" [expr $Id * 100]] if {$Type != "mRNA"} { lappend LeTexte " Protein Identity: $PId%" if {$Id < $IdDeLaProtAvecSeq} { lappend LeTexte " WARNING the identity with the sequence is only $PId% (< $PIdDeLaProtAvecSeq%)" } } if {$AccessmRNA != "NomRNA" && $Type == "mRNA"} { set PageInfomRNA [PageInfo $AccessmRNA genbankfull "id acc des org"] set DefmRNA [join [LaDefinitionDeLAcNuc_PageInfo $PageInfomRNA] " " ] set Organismes [join [LesOrgasDeLaPage_PageInfo $PageInfomRNA] " ; "] set TaillemRNA [TailleDeLAcNuc_PageInfo $PageInfomRNA] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " mRNA:" lappend LeTexte " mRNA Access: $AccessmRNA" lappend LeTexte " mRNA Definition: $DefmRNA" lappend LeTexte " mRNA Organisms: $Organismes" lappend LeTexte " mRNA Length: $TaillemRNA pb" lappend LeTexte " mRNA Identity: $PId%" if {$Id < $IdDeLaProtAvecSeq} { lappend LeTexte " WARNING the identity with the sequence is only $PId% (< $PIdDeLaProtAvecSeq%)" } set DejaVu($AccessmRNA) 1 } } InterrogeProtAndmRNA unset } else { set AccessProt [string toupper [InterrogeContigAndProt $Nom Protein Access]] if {$AccessProt != ""} { lappend LeTexte "" lappend LeTexte " **********************************************" set AccessDuChoisi $AccessProt set PageInfoProt [PageInfo $AccessProt protein "ID ORG DES"] set DefProt [join [LaDefinitionDeLaProt_PageInfo $PageInfoProt] " " ] set LesOrganismes [LesOrgasDeLaPage_PageInfo $PageInfoProt] set Organismes [join $LesOrganismes " ; " ] set From " Contig from BLASTN against genembl DB" set AccessContig [string toupper [InterrogeContigAndProt $Nom Contig Access ]] set TailleContig [InterrogeContigAndProt $Nom Contig Taille ] set OrgaContig [InterrogeContigAndProt $Nom Contig Organisme] lappend LeTexte " Protein:" lappend LeTexte " Protein Access: $AccessProt" lappend LeTexte " Protein Definition: $DefProt" lappend LeTexte " Protein Organism: $Organismes" lappend LeTexte " Protein Length: $TailleProt AA" lappend LeTexte " Protein From: $From" set DejaVu($AccessProt) 1 set Id [InterrogeContigAndProt $Nom Protein Identity ] set PId [format "%.1f" [expr $Id * 100]] set IdDeRefDeLaProtAvecContig $IdMin foreach Orga $LesOrganismes { if {$Orga == $OrgaContig} {set IdDeRefDeLaProtAvecContig $IdMax} } set PIdDeRefDeLaProtAvecContig [format "%.1f" [expr $IdDeRefDeLaProtAvecContig * 100]] lappend LeTexte " Identity with Contig: $PId%" if {$Id < $IdDeRefDeLaProtAvecContig} { lappend LeTexte " WARNING the identity with the se is only $PId% (< $PIdDeRefDeLaProtAvecContig%)" } lappend LeTexte "" lappend LeTexte " Contig:" lappend LeTexte " Contig Access: $AccessContig" lappend LeTexte " Contig Organism: $OrgaContig" lappend LeTexte " Contig Length: $TailleContig pb" set DejaVu($AccessContig) 1 set Id [InterrogeContigAndProt $Nom Contig Identity ] set PId [format "%.1f" [expr $Id * 100]] lappend LeTexte " Identity with sequence: $PId%" if {$Id < $IdDeRef} { lappend LeTexte " WARNING the identity with the sequence is only $PId% (< $PIdDeRef%)" } } } } ######################################################################## ###Enfin le MSF c'etait pas trop tot#### Espionne "$Nom -> informations about multiple alignment" set AvecMSF 0 if {[file exists $FichierMSF] && [DecortiqueUnMSF $FichierMSF LesAccess Sequences]} { set AvecMSF 1 set NbAccess [llength $LesAccess ] set NormMDTot [MDScore $FichierMSF "CalculeMoi"] lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Protein family:" lappend LeTexte "" lappend LeTexte " Multiple alignment:" lappend LeTexte " Nb proteins: $NbAccess" lappend LeTexte " NormMD: $NormMDTot" if { $NormMDTot < 0.3} {lappend LeTexte " WARNING the quality of the alignment is bad" } if {0.3 <= $NormMDTot && $NormMDTot < 0.5} {lappend LeTexte " WARNING the quality of the alignment is medium"} } if {[InterrogeLesClustersDesMSF $FichierClustMSF LesClusters] != "" && $AvecMSF} { set LesClusters [InterrogeLesClustersDesMSF $FichierClustMSF LesClusters] set NbClusters [llength $LesClusters] set ClusterDeLaProt [InterrogeLesClustersDesMSF $FichierClustMSF Access $Nom Cluster ] set LesAccess [InterrogeLesClustersDesMSF $FichierClustMSF Cluster $ClusterDeLaProt LesAccess] set NbAccess [llength $LesAccess] set NormMDDuClust [MDScoreAvecSelectionDuFichier $FichierMSF $LesAccess] lappend LeTexte " Nb clusters: $NbClusters" lappend LeTexte " Cluster of our protein: $ClusterDeLaProt" lappend LeTexte " Nb proteins in our cluster: $NbAccess" lappend LeTexte " NormMD of our Cluster: $NormMDDuClust" if { $NormMDDuClust < 0.3} {lappend LeTexte " WARNING the quality of the alignment is bad" } if {0.3 <= $NormMDDuClust && $NormMDDuClust < 0.5} {lappend LeTexte " WARNING the quality of the alignment is medium"} InterrogeLesClustersDesMSF unset } ###Recherche des proteines identiques a 98%" set LesAccessDesChoisi {} if {$AccessDuChoisi != ""} {lappend LesAccessDesChoisi $AccessDuChoisi} Espionne "$Nom -> proteins with 98% of identity with the best protein" if {$AvecMSF} { set LesAccessDesIdentiques {} foreach Access [LesAccessDesProteinesIdentiquesDansMSF $FichierMSF $Nom 0.98] { set Access [string toupper $Access] if {[info exists DejaVu($Access)]} {continue} set DejaVu($Access) 1 lappend LesAccessDesChoisi $Access set PageInfo [PageInfo $Access protein "id acc des org"] set LesOrgas [LesOrgasDeLaPage_PageInfo $PageInfo] set Def [join [LaDefinitionDeLaProt_PageInfo $PageInfo] " "] set Taille [TailleDeLaProt_PageInfo $PageInfo] foreach Orga $LesOrgas { lappend LesAccessDesIdentiques " $Access ; Protein ; $Taille AA ; $Orga ; $Def" } } if {$LesAccessDesIdentiques != {}} { lappend LeTexte "" #lappend LeTexte "Proteins with 98% of identity with our protein:" lappend LeTexte " Identical or quasi-identical proteins:" foreach LAccessIdentique $LesAccessDesIdentiques { lappend LeTexte $LAccessIdentique } } } ###recherche des mRNAs et des proteines CrossLinked#### Espionne "$Nom -> mRNAs and proteins cross-linked" if {$LesAccessDesChoisi != {}} { set LesAccessCrossLinked {} foreach Access $LesAccessDesChoisi { if {$Access == ""} {continue} set LesAccessCrossLinked [concat $LesAccessCrossLinked [LesCrossLinkedDeLAccess_Recursif $Access]] } if {$LesAccessCrossLinked != {}} { set LeTexteDesCrossLinked {} foreach LAccessCL [lsort -index 1 $LesAccessCrossLinked] { set Access [string toupper [lindex $LAccessCL 0]] if {[info exists DejaVu($Access)]} {continue} set Quoi [lindex $LAccessCL 1] set Taille [lindex $LAccessCL 2] if {$Quoi == "mRNA" } {set Taille "$Taille bp"} if {$Quoi == "Protein"} {set Taille "$Taille AA"} set Orga [lindex $LAccessCL 3] set Def [lindex $LAccessCL 4] lappend LeTexteDesCrossLinked " $Quoi ; $Access ; $Taille ; $Orga ; $Def" } if {$LeTexteDesCrossLinked != {}} { lappend LeTexte "" lappend LeTexte " Others CrossLinked Accessions:" set LeTexte [concat $LeTexte $LeTexteDesCrossLinked] } } } lappend LeTexte "" ###Domaines### Espionne "$Nom -> Domaines" if {[InterrogeDomaines $Nom LesDomaines]!=""} { set LesDomaines [InterrogeDomaines $Nom LesDomaines] lappend LeTexte " Domains:" foreach Domaine $LesDomaines { if {[regexp "^INTERPRO" $Domaine] || [regexp "^PFAM" $Domaine]} { regsub -all {\{.*\}} $Domaine "" Domaine lappend LeTexte " $Domaine" } } } lappend LeTexte "" ###Et maintenant, TATATATA (roulements de tambours), l'ontologie#### Espionne "$Nom -> ontology" if {[InterrogeGeneOntology $FichierGO $Nom LesGO] != ""} { #lappend LeTexte " **********************************************" lappend LeTexte " Mean Gene Ontology:" set LesGOFunction {} set LesGOProcess {} set LesGOComponent {} foreach GO [InterrogeGeneOntology $FichierGO $Nom LesGO] { if {$GO == ""} {continue} set Type [InterrogeGeneOntology $FichierGO GO $GO Type] if {$Type == "function" } {lappend LesGOFunction $GO} if {$Type == "process" } {lappend LesGOProcess $GO} if {$Type == "component"} {lappend LesGOComponent $GO} } foreach GO $LesGOFunction { lappend LeTexte " Function $GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } foreach GO $LesGOProcess { lappend LeTexte " Process $GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } foreach GO $LesGOComponent { lappend LeTexte " Component $GO [join [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] ""]" } } ##Pathways KEGG## Espionne "$Nom -> KEGG" if {[InterrogeMesKEGG $Nom LesPathwayEtKeggEtEC]!=""} { lappend LeTexte "" lappend LeTexte " Mean KEGG:" } if {[InterrogeMesKEGG $Nom LesPathway]!=""} { set LesNumerosDesPathways [InterrogeMesKEGG $Nom LesPathway] foreach Pathway $LesNumerosDesPathways { set DefPathway [InterrogeMesKEGG Pathway $Pathway Definition] lappend LeTexte " Pathway $Pathway $DefPathway" } } if {[InterrogeMesKEGG $Nom LesEC]!=""} { set LesEC [InterrogeMesKEGG $Nom LesEC] foreach EC $LesEC { lappend LeTexte " EC $EC" } } if {[InterrogeMesKEGG $Nom LesKegg]!=""} { set LesKegg [InterrogeMesKEGG $Nom LesKegg] foreach Kegg $LesKegg { set DefKegg [InterrogeMesKEGG Kegg $Kegg Definition] lappend LeTexte " Kegg $Kegg $DefKegg" } } ###Tissue Type######### Espionne "$Nom -> Tissue Type" set TT "no" if {[InterrogeTissueType $Nom LesTissues] != ""} { set TT "yes" lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Complementary informations:" lappend LeTexte "" lappend LeTexte " EST of the input sequence:" set LesTissues {} foreach Tissue [InterrogeTissueType $Nom LesTissues] { if {$Tissue == ""} {continue} lappend LesTissues [list $Tissue [InterrogeTissueType $Nom Tissue $Tissue n]] } if {$LesTissues != {}} { set LesTissuesEtLeurEffectif {} foreach LeTissue [lsort -index 1 -decreasing -integer $LesTissues] { lappend LesTissuesEtLeurEffectif "[lindex $LeTissue 0] ([lindex $LeTissue 1])" } lappend LeTexte " TissueType: [join $LesTissuesEtLeurEffectif " ; "]" #lappend LeTexte " [join $LesTissuesEtLeurEffectif " ; "]" } } ###Development Stage######### Espionne "$Nom -> Development stage" if {[InterrogeDevStage $Nom LesDevStages] != ""} { if {$TT=="no"} { lappend LeTexte "" lappend LeTexte " **********************************************" lappend LeTexte " Complementary informations:" lappend LeTexte "" lappend LeTexte " EST of the input sequence:" } set LesDevStage {} foreach DevStage [InterrogeDevStage $Nom LesDevStages] { if {$DevStage == ""} {continue} lappend LesDevStage [list $DevStage [InterrogeDevStage $Nom DevStage $DevStage n]] } if {$LesDevStage != {}} { set LesDevStageEtLeurEffectif {} foreach LeDevStage [lsort -index 1 -decreasing -integer $LesDevStage] { lappend LesDevStageEtLeurEffectif "[lindex $LeDevStage 0] ([lindex $LeDevStage 1])" } lappend LeTexte " DevStage: [join $LesDevStageEtLeurEffectif " ; "]" #lappend LeTexte " [join $LesDevStageEtLeurEffectif " ; "]" } } EspionneL $LeTexte Sauve [join $LeTexte "\n"] dans $FichierRecap return } proc oldhsbToRgb {hue sat value} { # The procedure converts an HSB value to RGB. It takes hue, saturation, # and value components (floating-point, 0-1.0) as arguments, and returns a # list containing RGB components (integers, 0-65535) as result. The code # here is a copy of the code on page 616 of "Fundamentals of Interactive # Computer Graphics" by Foley and Van Dam. set v [format %.0f [expr 65535.0*$value]] if {$sat == 0} { return "$v $v $v" } else { set hue [expr $hue*6.0] if {$hue >= 6.0} { set hue 0.0 } scan $hue. %d i set f [expr $hue-$i] set p [format %.0f [expr {65535.0*$value*(1 - $sat)}]] set q [format %.0f [expr {65535.0*$value*(1 - ($sat*$f))}]] set t [format %.0f [expr {65535.0*$value*(1 - ($sat*(1 - $f)))}]] case $i 0 {return "$v $t $p"} 1 {return "$q $v $p"} 2 {return "$p $v $t"} 3 {return "$p $q $v"} 4 {return "$t $p $v"} 5 {return "$v $p $q"} error "i value $i is out of range" } } proc oldtmplistedespabs {} { set L [tempCompteNO] foreach Nom $L { set Vu($Nom) 1 } set FichierLDP "/genomics/link/HeadNecknonrnr/fiches/ListeDesPABs" foreach PAB [ListeDesPABs] { if {[info exists Vu($PAB)]} {continue} AppendAuFichier $FichierLDP $PAB } } proc optim {image coef} { set coef [expr {int($coef)}] if {$coef == 1} { return $image } set width [image width $image] set height [image height $image] set data [$image data] set data2 {} for {set y 0} {$y < $height} {incr y} { set row [lindex $data $y] set row2 {} for {set x 0} {$x < $width} {incr x} { set pixel [lindex $row $x] for {set i 0} {$i < $coef} {incr i} { lappend row2 $pixel } } for {set j 0} {$j < $coef} {incr j} { lappend data2 $row2 } } set image2 [image create photo] $image2 put $data2 return $image2 } proc orga {FichierClusters} { set FichierProtAndmRNA "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" if {![file exists $FichierProtAndmRNA]} {return} set Liste [ListeDesJR $FichierClusters] set Entete "Name\tTwins\tClone\tOrganism\tAcc. Protein\tId. Prot\tDefinition Prot.\tAcc. mRNA\tId. mRNA\tDefinition mRNA" lappend LApercu $Entete foreach Nom $Liste { set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [string toupper $AccessmRNA] set AccessProt [string toupper $AccessProt] if {$AccessmRNA=="" && $AccessProt==""} { set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] set CodeExonhit [ExtraitInfo $Nom "OwnerOfCDNA"] set Orga [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] if {$Orga=="NoOrganism"} {continue} set AccessP [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessR [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessR Identity] set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessP Identity] set DefP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessP Definition] set DefR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessR Definition] lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Orga\t$AccessP\t$IdProt\t$DefP\t$AccessR\t$IdmRNA\t$DefR" } } return $LApercu } proc orgaEtGO {FichierClusters} { set FichierProtAndmRNA "[RepertoireDuGenome]/fiches/AccessDesProteinesEtDesmRNAsChoisis" set FichierGO "[RepertoireDuGenome]/fiches/GeneOntology" if {![file exists $FichierProtAndmRNA]} {return} if {![file exists $FichierGO]} {return} set Liste [ListeDesJR $FichierClusters] set Entete "Name\tTwins\tClone\tOrganism\tAcc. Protein\tId. Prot\tDefinition Prot.\tAcc. mRNA\tId. mRNA\tDefinition mRNA\tGO" lappend LApercu $Entete foreach Nom $Liste { set LesGO [InterrogeGeneOntology $FichierGO $Nom LesGO] if {$LesGO!={}} { foreach GO $LesGO { set LaDefinitionGO [InterrogeGeneOntology $FichierGO GO $GO LaDefinition] lappend LesDefinitionsGO $LaDefinitionGO } } set AccessmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" mRNA Access] set AccessProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] set AccessmRNA [string toupper $AccessmRNA] set AccessProt [string toupper $AccessProt] if {$AccessmRNA=="" && $AccessProt==""} { set LesJumeaux [LesJumeauxDuPAB $Nom $FichierClusters] set CodeExonhit [ExtraitInfo $Nom "OwnerOfCDNA"] set Orga [InterrogeProtAndmRNAChoisis $Nom OrganismeChoisi] if {$Orga=="NoOrganism"} {continue} set AccessP [InterrogeProtAndmRNAChoisis $Nom ProteineChoisie Access] set AccessR [InterrogeProtAndmRNAChoisis $Nom mRNAChoisi Access] set IdmRNA [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessR Identity] set IdProt [InterrogeBestProteinAndmRNAForeachOrga $Nom Access $AccessP Identity] set DefP [InterrogeBestProteinAndmRNAForeachOrga Access $AccessP Definition] set DefR [InterrogeBestProteinAndmRNAForeachOrga Access $AccessR Definition] lappend LApercu "$Nom\t$LesJumeaux\t$CodeExonhit\t$Orga\t$AccessP\t$IdProt\t$DefP\t$AccessR\t$IdmRNA\t$DefR\t$LesDefinitionsGO" } } return $LApercu } proc orgmsf2 {FichierMsf} { set TFADep [CreeLeTFAsDuMSF $FichierMsf] set TFAFin [list] set FichierDescri "" if {$FichierDescri==""} { puts "CreeLesDescriptifsAvecLeMSF" CreeLesDescriptifsAvecLeMSF $FichierMsf file_${FichierMsf}.descriptif set Descri [LitFichier "${FichierMsf}.descriptif"] } else { set Descri [LitFichier $FichierDescri] } set Nom [lindex [split $FichierMsf {\.}] 0] set FichierTFAModifie ${Nom}.orgtfa set FichierMSFFinal ${Nom}.orgmsf foreach Ligne $Descri { if {$Ligne==""} continue scan $Ligne "%s %s %s" AccessAccess Genre Espece set Access [lindex [split $AccessAccess "="] 0] regsub "OS:" $Genre "" Genre if {[info exists Nb($Genre,$Espece)]} { set Nb($Genre,$Espece) [expr [set Nb($Genre,$Espece)]+1] set GnSp($Access) "[string range $Genre 0 2]_[string range $Espece 0 2][set Nb($Genre,$Espece)]_$Access" } else { set Nb($Genre,$Espece) 1 set GnSp($Access) "[string range $Genre 0 2]_[string range $Espece 0 2]_$Access" } puts [set GnSp($Access)] } foreach Ligne $TFADep { if {[regexp "^>" $Ligne ]} { scan $Ligne "%s" a regsub ">" $a "" Access if {[info exists GnSp($Access)]} { lappend TFAFin ">[set GnSp($Access)]" } else { lappend TFAFin $Ligne } } else { regsub -all {\.} $Ligne "-" Ligne lappend TFAFin $Ligne } } EcritFichier $TFAFin $FichierTFAModifie exec clustalw $FichierTFAModifie -convert -output=gcg -outfile=$FichierMSFFinal } proc orthoinspector {Liste} { set FileNonAnalyse {} set directory [RepertoireDuGenome]/prottfa if { ! [file exists "OrthoResult"]} { File mkdir OrthoResult } if { ! [file exists "tfasdescopains"]} { File mkdir tfasdescopains } foreach fichier $Liste { #Espionne $fichier set f [open $fichier r] set full_text [read $f] set seq [lindex [split $full_text " "] 1] set seqOut ortho[lindex [split $full_text " "] 1] regexp {^>(\w*) |} $full_text string seqMod testOrtho "$seq" "[RepertoireDuGenome]/OrthoResult/$seqMod" "$directory" "$fichier" modifOrthoFile2 "[RepertoireDuGenome]/OrthoResult/$seqMod.fasta" "[RepertoireDuGenome]/tfasdescopains/$seqMod" if {![file exist "[RepertoireDuGenome]/tfasdescopains/$seqMod"]} { lappend FileNonAnalyse $seqMod } close $f } if {$FileNonAnalyse!=""} { SauveLesLignes $FileNonAnalyse dans [RepertoireDuGenome]/OrthoResult/Error.txt } } proc orthoinspectorPourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/prottfa} set r [glob -directory $directory *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } lappend listSeq $fichier FinPasTouche $f } orthoinspector $listSeq } proc p2rtree {} { # change labels de l'arbre. # met ID rna a la place prot. LitLeTFA 78ori_rna.tfa Lr Sr LitLeTFA 78ori_uniprot.tfa Lp Sp set tree [ContenuDuFichier 78ori_uniprot.ph] set t $tree foreach p $Lp r $Lr { set t [string map [list $p $r] $t] } set f [open 78ori_rna.ph w] puts $f $t close $f exit } proc pNW {a b LM {n 1} {With0 0}} { puts "" puts "A hori : $a" puts "B vert : $b" set la [split $a ""] set lga [llength $la] set sa [join $la [string repeat " " $n]] set lb [split $b ""] set ns [string repeat " " $n] puts " $sa" set i 0 foreach e $lb row $LM { puts -nonewline "$e" foreach x $row { if {$n < 2 && $x == 0} { puts -nonewline "$ns " } else { puts -nonewline [format " %${n}d" $x] } } puts "" } return } proc pNW_old {a b aM {n 1}} { upvar $aM M puts "" puts "A vert : $a" puts "B hori : $b" set la [split $a ""] set lb [split $b ""] set lgb [llength $lb] set sb [join $lb [string repeat " " $n]] set ns [string repeat " " $n] puts " $sb" set i 0 foreach e $la { puts -nonewline "$e " for {set j 0} {$j < $lgb} {incr j} { set x $M($i,$j) if {$n < 2 && $x == 0} { puts -nonewline "$ns " } else { puts -nonewline [format "%${n}d " $x] } } incr i puts "" } return } proc pagesMutation {gene type} { set url1 "[LbgiUrl]/~friedric/mutation.php" set Query [::http::formatQuery gene $gene database $type] set url "${url1}?$Query" set LesLignes {} set x [HttpCopy $url LesLignes] return $LesLignes } proc parseCoRearr {lignes file} { #pas finalise set l0 [lindex $lignes 0] set l0 [string range $l0 [expr [string first "left" $l0] + 5] end] set Descr [string range $l0 0 [expr [string first {<} $l0] - 1]] set l0 [string range $l0 [expr [string first {<} $l0] + 20] end] set Pheno [string range $l0 0 [expr [string first {<} $l0] - 1]] set l0 [string range $l0 [expr [string first {href} $l0] + 6] end] set Addr [string range $l0 0 [expr [string first {'} $l0] -1]] set l0 [string range $l0 [expr [string first {'} $l0] + 2] end] set Ref [string range $l0 0 [expr [string first {<} $l0] - 1]] set f [open $file a+] puts $f "\nComplex Rearrangements\n" puts $f "$Descr\t$Pheno\t$Addr\t$Ref" foreach l $lignes { set Descr "" set Pheno "" set Addr "" set Ref "" if {[regexp "^"] set LesLignes [lrange $LesLignes $tpx end] while {[lsearch -regexp $LesLignes "$id"] != -1} { set idx [lsearch -regexp $LesLignes "$id"] set ligne [lindex $LesLignes $idx] if {[string first "$id" $ligne] == 0} { set idx1 [expr [string first "/" $ligne] + 1] set idx2 [string first "-" $ligne] set idx3 [expr [string first "\t" $ligne] - 1] set debPDB [string range $ligne $idx1 [expr $idx2 - 1]] set finPDB [string range $ligne [expr $idx2 + 1] $idx3] set deb [correspPosPdbQuery $debPDB $seqPDB $seqQuery] set fin [correspPosPdbQuery $finPDB $seqPDB $seqQuery] set tmp [string first "?fold=" $ligne] if {$tmp != -1} { set ligne [string range $ligne $tmp end] set idx4 [expr [string first ">" $ligne] + 1] set idx5 [expr [string first "<" $ligne] - 1] set numFssp [string trim [string range $ligne $idx4 $idx5]] set idx6 [expr [string first "a>" $ligne] + 4] } else { set numFssp "" set idx6 [expr [string first "interact<\/a>" $ligne] + 13] } set descFssp [string trim [string range $ligne $idx6 end]] # lappend toWrite "fold@@$debPDB@@$finPDB@@$numFssp@@$descFssp" # lappend toWrite "fold@@$deb@@$fin@@$numFssp@@$descFssp" puts $file "fold:$deb@@$fin@@$numFssp@@$descFssp" } set LesLignes [lrange $LesLignes [expr $idx + 1] end] } } #EspionneL $toWrite return 1 } proc parseFicUniprot {id {f ""}} { #recupere la fiche uniprot set url "http://www.expasy.org/uniprot/$id" set x [HttpCopy $url LesLignes] set EName [recupUniprotEntryName $LesLignes] set lAccNum2 [recupUniprotListAccNum2 $LesLignes] set ProtName [recupUniprotProtname $LesLignes] set lSynProtName [recupUniprotListSynProtName $LesLignes] set GeneName [recupUniprotGeneName $LesLignes] set lSynGeneName [recupUniprotListSynGeneName $LesLignes] set Function [recupUniprotFunction $LesLignes] set lGO [recupUniprotListGO $LesLignes] set lOmimGene [recupRefGeneOmim $LesLignes] set lOmimPheno [recupRefPhenoOmim $LesLignes] puts $f "${id}@@${EName}@@${lAccNum2}@@${ProtName}@@${lSynProtName}@@${GeneName}@@${lSynGeneName}@@${Function}@@${lGO}@@${lOmimGene}@@${lOmimPheno}@@" return 1 } proc parseGrDeletion {lignes file} { #set lignes [lrange $lignes [lsearch -regexp $lignes "Number of results"] end] set l0 [lindex $lignes 0] set l0 [string range $l0 [expr [string first "left" $l0] + 5] end] set Descr [string range $l0 0 [expr [string first {<} $l0] - 1]] set l0 [string range $l0 [expr [string first {<} $l0] + 20] end] set Pheno [string range $l0 0 [expr [string first {<} $l0] - 1]] set l0 [string range $l0 [expr [string first {href} $l0] + 6] end] set Addr [string range $l0 0 [expr [string first {'} $l0] -1]] set l0 [string range $l0 [expr [string first {'} $l0] + 2] end] set Ref [string range $l0 0 [expr [string first {<} $l0] - 1]] set f [open $file a+] puts $f "\nGross Deletions\n" puts $f "$Descr\t$Pheno\t$Addr\t$Ref" foreach l $lignes { set Descr "" set Pheno "" set Addr "" set Ref "" if {[regexp "^$access" lappend Lpdb $seq puts $f >$access puts $f $seq } } else { set res [ResolutionUnPDB $access] #plus petit que 0 alors il n'y a pas de resolution -> donc RMN #plus grand que 4 pas bon Espionne "res: $res" if {$res<0 || $res<=$resolution} { set seq [QueLaSequenceDesBanques $access] if {$seq != ""} { #faire un lappend ici puis sauve dans un fichier!! lappend Lpdb ">$access" lappend Lpdb $seq puts $f >$access puts $f $seq } } } } } close $f # ici sauve les fichier pdb... SauveLesLignes $Lpdb dans [RepertoireDuGenome]/pdb/[lindex $list [llength $list]-1] } proc parsePsiblastPourTous {{Repertoire ""}} { if {$Repertoire == ""} { set Repertoire [RepertoireDuGenome]/psiblastp } set r [glob -directory $Repertoire *] foreach fichier $r { set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } parsePsiblast $fichier FinPasTouche $f } } proc parseRegulatory {lignes} { #pas finalise set l0 [lindex $lignes 0] set l0 [string range $l0 [expr [string first "center" $l0] + 24] end] set Seq [string range $l0 0 [expr [string first {$idProt"] set idx2 [lsearch -regexp $LesLignes "<\/seq-data><\/sequence>"] set LesLignes [lrange $LesLignes $idx1 $idx2] set seq [string range [lindex $LesLignes [lsearch -regexp $LesLignes ""]] 10 end] foreach l $LesLignes { set toAdd [recupDonneesMacsims $l $seq] if {$toAdd != ""} { puts $f "macsims:$toAdd" } } return 1 } proc parseSmDeletion {lignes file} { # set lignes [lrange $lignes [lsearch -regexp $lignes "Number of results"] end] set l0 [lindex $lignes 0] set l0 [string range $l0 [expr [string first "left" $l0] + 5] end] set Del [string range $l0 0 [expr [string first {<} $l0] - 1]] set l0 [string range $l0 [expr [string first {<} $l0] + 21] end] set Codon [string range $l0 0 [expr [string first {<} $l0] - 1]] set l0 [string range $l0 [expr [string first {<} $l0] + 20] end] set Pheno [string range $l0 0 [expr [string first {<} $l0] - 1]] set l0 [string range $l0 [expr [string first {href} $l0] + 6] end] set Addr [string range $l0 0 [expr [string first {'} $l0] -1]] set l0 [string range $l0 [expr [string first {'} $l0] + 2] end] set Ref [string range $l0 0 [expr [string first {<} $l0] - 1]] set f [open $file a+] puts $f "\nSmall Deletions\n" puts $f "$Del\t$Codon\t$Pheno\t$Addr\t$Ref" foreach l $lignes { set Del "" set Codon "" set Pheno "" set Addr "" set Ref "" if {[regexp "^= 0 && ![regexp {^>} $line]} {} set hits {} set curhead "" set curblock "" set tmphead "" do { set chevron 0 if {[regexp {^>} $line]} { append tmphead $line set chevron 1 } if {[regexp {OX=[0-9]+} $line] && !$chevron} { append tmphead $line } if {[regexp {^[ ]+Length =} $line] || [regexp {^ Database:} $line]} { if {$curhead != ""} { set tmphit [hit new $curhead $curblock] if {[llength $Liste]==0 || [lsearch $Liste [$tmphit get id]]>=0} { lappend hits $tmphit } } if {[regexp {^ Database:} $line]} { break } set curhead $tmphead set tmphead "" set curblock "" } elseif {$line ne ""} { append curblock "$line\n" } } while {[gets $f line] >= 0} return $hits } proc pb2469ou2467 {Fichier2467} { #comprendre pourquoi on est passe de 2469 a 2467 foreach Ligne [LesLignesDuFichier $Fichier2467] { set Vu($Ligne) 1 } set Rep "[RepertoireDuGenome]/nucmask" foreach Fichier [glob -nocomplain -directory $Rep "DD*.mrm"] { set Nom [NomDeFichierSansExtension [file tail $Fichier]] if {![info exists Vu($Nom)]} {Espionne $Nom} } } proc pcapam {} { LesDefauts global TBlosum package require La 1.0 catch {namespace import La::*} InitTBlosum "etc/pam250.bla" set AA "ACDEFGHIKLMNPQRSTVWY" set LAA [split $AA ""] set X "2 20 20" foreach a $LAA { foreach b $LAA { append X " [set TBlosum($a,$b)]" } } nist_pca $X exit } proc pchart {} { LoadTkAndPackages package require Plotchart foreach k [lsort [::Plotchart::plotconfig vertbars]] { puts "$k :" foreach v [lsort [::Plotchart::plotconfig vertbars $k]] { puts " $v" } puts "" } exit } proc pdbhu {} { set Lid [PDBQuery -organism human -identity 75] puts "[llength $Lid]" puts "$Lid" exit } proc pdict {d {i 0} {p " "} {s " -> "}} { set errorInfo $::errorInfo set errorCode $::errorCode set fRepExist [expr {0 < [llength [info commands tcl::unsupported::representation]]}] while 1 { if { [catch {dict keys $d}] } { if {! [info exists dName] && [uplevel 1 [list info exists $d]]} { set dName $d unset d upvar 1 $dName d continue } return -code error "error: pdict - argument is not a dict" } break } if {[info exists dName]} { puts "dict $dName" } set prefix [string repeat $p $i] set max 0 foreach key [dict keys $d] { if { [string length $key] > $max } { set max [string length $key] } } dict for {key val} ${d} { puts -nonewline "${prefix}[format "%-${max}s" $key]$s" if { $fRepExist && ! [string match "value is a dict*" [tcl::unsupported::representation $val]] || ! $fRepExist && [catch {dict keys $val}] } { puts "'${val}'" } else { puts "" pdict $val [expr {$i+1}] $p $s } } set ::errorInfo $errorInfo set ::errorCode $errorCode return "" } proc pestfind {Nom} { set FichierPF "[RepertoireDuGenome]/pestfind/pest$Nom.embl" set LeTexte {} if {[file exists $FichierPF]} { lappend Letexte "" lappend LeTexte " **********************************************" lappend LeTexte " PEST motifs in your sequence:" lappend LeTexte "" set ContenuPF [ContenuDuFichier $FichierPF] if {[regexp "No PEST motif was identified" $ContenuPF]} { lappend LeTexte " No PEST motif was identified" } else { foreach Ligne [LesLignesDuFichier $FichierPF] { if {[regexp "Potential PEST motif" $Ligne]} { set n 0 set Vu 1 } if {[info exists Vu] && $n<5} { incr n lappend LeTexte " $Ligne" } } } } EspionneL $LeTexte } proc pfamito {} { LoadTkAndPackages cd /home/moumou/synmito/3Data/test set Lf [lsort [glob *_maj.xml]] foreach f $Lf { global TabSF puts "file $f" set sys [string range $f 0 [string first "_" $f]-1] puts "system $sys" DecortiqueUnXml2 $f InitSequences InitInfoSeqs AssignSeqToGroup DonneTabFeature TabSF global {*}[info globals "TD*"] set seq "${sys}mito_Homo.sapi" if {[info exists TabSF(${seq},PFAM-A)]} { set Lft [set TabSF(${seq},PFAM-A)] foreach ft $Lft { DecortiqueUneFeature $ft dg fg col sc nt puts " $dg $fg $nt" } } else { puts " => pas de ${sys}mito_Homo.sapi" } unset -nocomplain TabSF {*}[info globals "TD*"] puts "" } exit } proc pkg_mkIndex {args} { set usage {"pkg_mkIndex ?-direct? ?-lazy? ?-load pattern? ?-verbose? ?--? dir ?pattern ...?"} set argCount [llength $args] if {$argCount < 1} { return -code error "wrong # args: should be\n$usage" } set more "" set direct 1 set doVerbose 0 set loadPat "" for {set idx 0} {$idx < $argCount} {incr idx} { set flag [lindex $args $idx] switch -glob -- $flag { -- { # done with the flags incr idx break } -verbose { set doVerbose 1 } -lazy { set direct 0 append more " -lazy" } -direct { append more " -direct" } -load { incr idx set loadPat [lindex $args $idx] append more " -load $loadPat" } -* { return -code error "unknown flag $flag: should be\n$usage" } default { # done with the flags break } } } set dir [lindex $args $idx] set patternList [lrange $args [expr {$idx + 1}] end] if {![llength $patternList]} { set patternList [list "*.tcl" "*[info sharedlibextension]"] } try { set fileList [glob -directory $dir -tails -types {r f} -- {*}$patternList] } on error {msg opt} { return -options $opt $msg } foreach file $fileList { # For each file, figure out what commands and packages it provides. # To do this, create a child interpreter, load the file into the # interpreter, and get a list of the new commands and packages that # are defined. if {$file eq "pkgIndex.tcl"} { continue } set c [interp create] # Load into the child any packages currently loaded in the parent # interpreter that match the -load pattern. if {$loadPat ne ""} { if {$doVerbose} { tclLog "currently loaded packages: '[info loaded]'" tclLog "trying to load all packages matching $loadPat" } if {![llength [info loaded]]} { tclLog "warning: no packages are currently loaded, nothing" tclLog "can possibly match '$loadPat'" } } foreach pkg [info loaded] { if {![string match -nocase $loadPat [lindex $pkg 1]]} { continue } if {$doVerbose} { tclLog "package [lindex $pkg 1] matches '$loadPat'" } try { load [lindex $pkg 0] [lindex $pkg 1] $c } on error err { if {$doVerbose} { tclLog "warning: load [lindex $pkg 0] [lindex $pkg 1]\nfailed with: $err" } } on ok {} { if {$doVerbose} { tclLog "loaded [lindex $pkg 0] [lindex $pkg 1]" } } if {[lindex $pkg 1] eq "Tk"} { # Withdraw . if Tk was loaded, to avoid showing a window. $c eval [list wm withdraw .] } } $c eval { # Stub out the package command so packages can require other # packages. rename package __package_orig proc package {what args} { switch -- $what { require { return; # Ignore transitive requires } default { __package_orig $what {*}$args } } } proc tclPkgUnknown args {} package unknown tclPkgUnknown # Stub out the unknown command so package can call into each other # during their initialilzation. proc unknown {args} {} # Stub out the auto_import mechanism proc auto_import {args} {} # reserve the ::tcl namespace for support procs and temporary # variables. This might make it awkward to generate a # pkgIndex.tcl file for the ::tcl namespace. namespace eval ::tcl { variable dir ;# Current directory being processed variable file ;# Current file being processed variable direct ;# -direct flag value variable x ;# Loop variable variable debug ;# For debugging variable type ;# "load" or "source", for -direct variable namespaces ;# Existing namespaces (e.g., ::tcl) variable packages ;# Existing packages (e.g., Tcl) variable origCmds ;# Existing commands variable newCmds ;# Newly created commands variable newPkgs {} ;# Newly created packages } } $c eval [list set ::tcl::dir $dir] $c eval [list set ::tcl::file $file] $c eval [list set ::tcl::direct $direct] # Download needed procedures into the slave because we've just deleted # the unknown procedure. This doesn't handle procedures with default # arguments. foreach p {::tcl::Pkg::CompareExtension} { $c eval [list namespace eval [namespace qualifiers $p] {}] $c eval [list proc $p [info args $p] [info body $p]] } try { $c eval { set ::tcl::debug "loading or sourcing" # we need to track command defined by each package even in the # -direct case, because they are needed internally by the # "partial pkgIndex.tcl" step above. proc ::tcl::GetAllNamespaces {{root ::}} { set list $root foreach ns [namespace children $root] { lappend list {*}[::tcl::GetAllNamespaces $ns] } return $list } # init the list of existing namespaces, packages, commands foreach ::tcl::x [::tcl::GetAllNamespaces] { set ::tcl::namespaces($::tcl::x) 1 } foreach ::tcl::x [package names] { if {[package provide $::tcl::x] ne ""} { set ::tcl::packages($::tcl::x) 1 } } set ::tcl::origCmds [info commands] # Try to load the file if it has the shared library extension, # otherwise source it. It's important not to try to load # files that aren't shared libraries, because on some systems # (like SunOS) the loader will abort the whole application # when it gets an error. if {[::tcl::Pkg::CompareExtension $::tcl::file [info sharedlibextension]]} { # The "file join ." command below is necessary. Without # it, if the file name has no \'s and we're on UNIX, the # load command will invoke the LD_LIBRARY_PATH search # mechanism, which could cause the wrong file to be used. set ::tcl::debug loading load [file join $::tcl::dir $::tcl::file] set ::tcl::type load } else { set ::tcl::debug sourcing source [file join $::tcl::dir $::tcl::file] set ::tcl::type source } # As a performance optimization, if we are creating direct # load packages, don't bother figuring out the set of commands # created by the new packages. We only need that list for # setting up the autoloading used in the non-direct case. if {!$::tcl::direct} { # See what new namespaces appeared, and import commands # from them. Only exported commands go into the index. foreach ::tcl::x [::tcl::GetAllNamespaces] { if {![info exists ::tcl::namespaces($::tcl::x)]} { namespace import -force ${::tcl::x}::* } # Figure out what commands appeared foreach ::tcl::x [info commands] { set ::tcl::newCmds($::tcl::x) 1 } foreach ::tcl::x $::tcl::origCmds { unset -nocomplain ::tcl::newCmds($::tcl::x) } foreach ::tcl::x [array names ::tcl::newCmds] { # determine which namespace a command comes from set ::tcl::abs [namespace origin $::tcl::x] # special case so that global names have no # leading ::, this is required by the unknown # command set ::tcl::abs [lindex [auto_qualify $::tcl::abs ::] 0] if {$::tcl::x ne $::tcl::abs} { # Name changed during qualification set ::tcl::newCmds($::tcl::abs) 1 unset ::tcl::newCmds($::tcl::x) } } } } # Look through the packages that appeared, and if there is a # version provided, then record it foreach ::tcl::x [package names] { if {[package provide $::tcl::x] ne "" && ![info exists ::tcl::packages($::tcl::x)]} { lappend ::tcl::newPkgs [list $::tcl::x [package provide $::tcl::x]] } } } } on error msg { set what [$c eval set ::tcl::debug] if {$doVerbose} { tclLog "warning: error while $what $file: $msg" } } on ok {} { set what [$c eval set ::tcl::debug] if {$doVerbose} { tclLog "successful $what of $file" } set type [$c eval set ::tcl::type] set cmds [lsort [$c eval array names ::tcl::newCmds]] set pkgs [$c eval set ::tcl::newPkgs] if {$doVerbose} { if {!$direct} { tclLog "commands provided were $cmds" } tclLog "packages provided were $pkgs" } if {[llength $pkgs] > 1} { tclLog "warning: \"$file\" provides more than one package ($pkgs)" } foreach pkg $pkgs { # cmds is empty/not used in the direct case lappend files($pkg) [list $file $type $cmds] } if {$doVerbose} { tclLog "processed $file" } } interp delete $c } append index "# Tcl package index file, version 1.1\n" append index "# This file is generated by the \"pkg_mkIndex$more\" command\n" append index "# and sourced either when an application starts up or\n" append index "# by a \"package unknown\" script. It invokes the\n" append index "# \"package ifneeded\" command to set up package-related\n" append index "# information so that packages will be loaded automatically\n" append index "# in response to \"package require\" commands. When this\n" append index "# script is sourced, the variable \$dir must contain the\n" append index "# full path name of this file's directory.\n" foreach pkg [lsort [array names files]] { set cmd {} lassign $pkg name version lappend cmd ::tcl::Pkg::Create -name $name -version $version foreach spec [lsort -index 0 $files($pkg)] { foreach {file type procs} $spec { if {$direct} { set procs {} } lappend cmd "-$type" [list $file $procs] } } append index "\n[eval $cmd]" } set f [open [file join $dir pkgIndex.tcl] w] puts $f $index close $f } proc plantage {} { set Ll [LesLignesDuFichier plantage.dat] set m 0.0 ; set m2 0.0 set nv 0 foreach l [lrange $Ll 1 end] { lassign [split $l "\t"] tmp v set m [expr {$m + $v}] set m2 [expr {$m2 + $v*$v}] incr nv } puts "m= $m" puts "m2= $m2" puts "nv= $nv" set m [expr {$m/$nv}] puts "moy : $m" set m2 [expr {$m2/$nv}] puts "moy2 : $m2" set sd [expr {sqrt($m2 - $m*$m)}] puts "sd : $sd" exit } proc plid {} { set Lid [LesLignesDuFichier coli.ids] foreach id $Lid { lappend Lok [string range $id 0 3] } set Lok [lsort -unique $Lok] puts "Lok [llength $Lok]" set o [open coli.ids_ok w] puts $o [join $Lok \n] close $o exit } proc pmc {} { set Ll [LesLignesDuFichier /home/moumou/liste.csv] set Lkey [list gene path tissue frep pubid hohezy mutation exon protein domain ref pid] foreach l [lrange $Ll 1 end] { if {[string trim $l] eq ""} {continue} lassign [ParseLigneCSV $l] {*}$Lkey regsub -all { +} [string trim $gene] " " gene if {$gene ne ""} { puts "$gene" } if {[regexp {^pubmed} $pid] && ! [regexp {record} $pid]} { lappend Lpid [string range $pid 7 end] } } puts [join $Lpid \n] puts "\n[llength $Lpid]" set f [open list.pid w] puts $f [join $Lpid \n] close $f exit } proc polyFilter {sequence {extrCutoff 50} {minNoMaskRangeLength 100}} { # initialize return value array set retArray [list sequence $sequence range [list 0 [expr [string length $sequence] - 1]] keep -1 messages {}] # searching polyA set polyAList [polySlidingWindow $sequence "a"] # searching polyT set polyTList [polySlidingWindow $sequence "t"] if {[llength $polyAList] == 0 && [llength $polyTList] == 0} { set retArray(keep) 1 lappend retArray(messages) "No poly detected" return [array get retArray] } # detect chimera with internal polyA if {[llength $polyAList] > 0} { set length [string length $sequence] foreach poly $polyAList { set lIdx [lindex $poly 0] set rIdx [lindex $poly 1] if {($lIdx >= $extrCutoff) && ($rIdx < [expr $length - $extrCutoff])} { set retArray(keep) 0 lappend retArray(messages) "Chimera with internal polyA from [expr $lIdx + 1] to [expr $rIdx + 1]" return [array get retArray] } } } # mask 5' polyA with Ns if {$retArray(keep) != 0 && [llength $polyAList] > 0} { set length [string length $sequence] foreach poly $polyAList { set lIdx [lindex $poly 0] set rIdx [lindex $poly 1] if {$lIdx < $extrCutoff} { set mask [string repeat "N" [expr $rIdx - $lIdx + 1]] set retArray(sequence) [string replace $sequence $lIdx $rIdx $mask] set retArray(range) [list 0 [expr $length - 1]] set retArray(keep) 1 lappend retArray(messages) "Masking 5' polyA from [expr $lIdx + 1] to [expr $rIdx + 1]" } } # check if there is enough non masked consecutives bases if {![regexp -nocase "\[^n\]{${minNoMaskRangeLength},}" $retArray(sequence)]} { set retArray(keep) 0 lappend retArray(messages) "Too many masked sequence" return [array get retArray] } } # trim 5' polyT and 3' polyA extremities if {$retArray(keep) != 0} { set length [string length $retArray(sequence)] if {[llength $polyAList] > 0} { set lastPolyA [lindex $polyAList end] set rIdx [lindex $lastPolyA 1] if {$rIdx >= [expr $length - $extrCutoff] && $rIdx < [expr $length - 1]} { lset retArray(range) 1 $rIdx set trimmedSeq [string range $retArray(sequence) [expr $rIdx + 1] end] lappend retArray(messages) "Trimming sequence \"$trimmedSeq\" after 3' polyA" } } if {[llength $polyTList] > 0} { set firstPolyT [lindex $polyTList 0] set lIdx [lindex $firstPolyT 0] if {$lIdx < $extrCutoff && $lIdx > 0} { lset retArray(range) 0 $lIdx set trimmedSeq [string range $retArray(sequence) 0 [expr $lIdx - 1]] lappend retArray(messages) "Trimming sequence \"$trimmedSeq\" before 5' polyT" } } set retArray(sequence) [string range $retArray(sequence) [lindex $retArray(range) 0] [lindex $retArray(range) 1]] set retArray(keep) 1 } if {$retArray(keep) == -1} { puts "ERROR: Problem with poly filter" exit 1 } return [array get retArray] } proc polySlidingWindow {sequence {polyType a} {winSize 25} {minScore 20}} { set seqLength [string length $sequence] set winLeftIdx 0 set polyFlags [string repeat 0 $seqLength] if { $winSize > $seqLength } { return {} } while { [expr $winLeftIdx + $winSize] <= $seqLength } { set window [string range $sequence $winLeftIdx [expr $winLeftIdx + $winSize - 1]] if { [regexp -nocase -all $polyType $window] >= $minScore } { set polyFlags [string replace $polyFlags $winLeftIdx [expr $winLeftIdx + $winSize - 1] [string repeat 1 $winSize]] } incr winLeftIdx } #correction des extremite des poly set start 0 while { [regexp -indices -start $start -- {1+} $polyFlags polyIdx] } { set poly [string range $sequence [lindex $polyIdx 0] [lindex $polyIdx 1]] regexp -nocase -indices "${polyType}.*${polyType}" $poly regMatch set leftCorrect [lindex $regMatch 0] set rigthCorrect [expr [string length $poly] - [lindex $regMatch 1] - 1] set polyFlags [string replace $polyFlags [lindex $polyIdx 0] [expr [lindex $polyIdx 0] + $leftCorrect - 1] [string repeat 0 $leftCorrect]] set polyFlags [string replace $polyFlags [expr [lindex $polyIdx 1] - $rigthCorrect + 1] [lindex $polyIdx 1] [string repeat 0 $rigthCorrect]] set start [expr [lindex $polyIdx 1] + 1] } set start 0 set result {} while { [regexp -indices -start $start -- {1+} $polyFlags regMatch] } { lappend result $regMatch set start [expr [lindex $regMatch 1] + 1] } return $result } proc posttt {} { global classes_default classes CodeGenetique set classes_default {helix sheet turn coil} set classes {helix coil} InitialisationResultats InitialisationTableaux #InitialisationWobble global {*}[info globals Acide_*] {*}[info globals Wobble_*] set dcdn "cdn" sqlite3 $dcdn wobble.sql # cherche aa avec nbCodon >= 4 set Laa [list] set min 9999999 foreach acide [array names Ribo] { if {[llength $Ribo($acide)] < 4} { continue } set Lcdn [set Ribo($acide)] set cdt [list] foreach cdn $Lcdn { lappend cdt "$cdn > 0" } set cdt [join $cdt " and "] set Lpk$acide [$dcdn eval "select pk_items from codons where $cdt"] if {[set nb [llength [set Lpk$acide]]] > 0} { lappend Laa $acide } } puts "Laa [llength $Laa]" set Laa [lsort $Laa] set Lan [list] foreach aa $Laa { lappend Lan $aa [llength [set Lpk$aa]] } set Lan [lsort -stride 2 -index 1 -integer $Lan] puts "$Lan" # enleve aa avec plus faible nb de seq set Laa [list] foreach {a n} $Lan { lappend Laa $a } set Laa [lrange $Laa 2 end] # prend les commun set Ltmp [set Lpk[lindex $Laa 0]] foreach aa [lrange $Laa 2 end] { set Ltmp [land $Ltmp [set Lpk$aa]] } puts "communs [llength $Ltmp]" exit return } proc poubelle {} { if { ! [regexp {^NM_[0-9]+$} $NM]} { set NM [RetChip "DNA_acc" $I] } if { ! [regexp {^NM_[0-9]+$} $NM]} { #Espionne "la ligne $I n'a pas de NM" continue set GB [NmEnStock $NM] if {$GB!=""} { continue } Espionne "$NM n'existe pas dans refseq" } #exit set Commande "getz \"\\\[refseq-acc:$Nm\\\]\" \-vf gid" set GetzOut [eval exec $Commande] #puts $GetzOut set NmLu "" set GiLu "" scan $GetzOut "%s %s" NmLu GiLu #puts "$GiLu" } proc pourlesjr {FichierClusters} { set liste [ListeDesJR $FichierClusters] acFichierRecapitulatifPourTous $liste "ProCureBioPharm" "ExonHit" "DATAS" "" } proc preFiltrerGroupeIsoformes {hits} { } proc prepmds {} { global TBlosum LesDefauts InitTBlosum "etc/pam250.bla" set LAA [split "ACDEFGHIKLMNPQRSTVWY" ""] set f [open "pam.dat" w] puts $f "20" foreach a $LAA { set X {} foreach b $LAA { lappend X "[set TBlosum($a,$b)]" } set e [join $X "\t"] puts $f $e } close $f exec /biolo/secator/mds pam.dat pam.out 2 set Lf [LesLignesDuFichier "pam.out"] set f [open "mds.dat" w] foreach l [lrange $Lf 1 end] a $LAA { set l [string trim $l] regsub -all "\t" $l " " l regsub -all " " $l " " l puts $f "$a $l" } close $f exit } proc printString {str} { glDisable GL_DEPTH_TEST glListBase $::pgl(FontBase) set len [string length $str] set sa [tcl3dVectorFromString GLubyte $str] glCallLists $len GL_UNSIGNED_BYTE $sa $sa delete glEnable GL_DEPTH_TEST return } proc processHits {hits} { set AtmPick [list] set count 0 for {set i 0} {$i < $hits} {incr i} { # 1st rec : nbr of Nnames in this hit set NbrNames [$::selectBuffer get $count] incr count # 2nd rec : min z-depth div par # set minz [$::selectBuffer get $count] incr count # 3rd rec : max z incr count # 4th rec : noms set MOA [list] for {set j 0} {$j < $NbrNames} { incr j } { set unom [$::selectBuffer get $count] lappend MOA $unom incr count } lappend AtmPick $MOA } # return si le unom n'est pas > a 6 char if {[llength [lindex $AtmPick end]] < 3} { return } lassign [lindex $AtmPick end] mol obj atm # conversion mol as number to command set ZePicked [format "%d%02d%02d" $atm $obj $mol] lassign [Tag2MolObjAtm $ZePicked] mol obj atm set rnra [$::db eval {select r.rnbr,r.rname3l, a.aname from atoms as a , residues as r where a.pk_atoms=$atm and r.pk_residues=a.pk_residues}] puts "pick -> $mol $obj $rnra" lassign $rnra rnmr rnom natm set rnmr [string trimleft $rnmr 0] set ::pgl(TextInfo) "Mol $mol Res $rnmr $rnom $natm" $mol AddPicked $obj $atm DefineLabels2Show set ::AtomePique $ZePicked return } proc processSelectItemBy {} { return } proc profilePkgSetup {dir} { source $dir/profile.tcl tclPkgSetup $dir profile 0.1 {{profile.tcl source {}}} } proc protcomputed {} { #liste des 931 foreach Nom [ListeDesPABs] { set AccBestProtHuman [InterrogeBestProteinAndmRNAForeachOrga $Nom Organisme "Homo sapiens" Protein Access] if {$AccBestProtHuman!=""} { set DefinitionProtHuman [InterrogeBestProteinAndmRNAForeachOrga Access $AccBestProtHuman Definition] if {[regexp -nocase "HYPOTHETICAL" $DefinitionProtHuman] || [regexp -nocase "PREDICTED" $DefinitionProtHuman] || [regexp -nocase "SIMILAR TO" $DefinitionProtHuman] || [regexp -nocase "KIAA" $DefinitionProtHuman] || [regexp -nocase "DKFZp" $DefinitionProtHuman]|| [regexp -nocase "FLJ" $DefinitionProtHuman]} { #Espionne $DefinitionProtHuman lappend LpourAffy $AccBestProtHuman lappend L $Nom } } } Espionne [llength $L] #return $LpourAffy return $L } proc ps2png {FilePS FilePNG Width Height} { if {![file exists $FilePS]} {return 0} set Commande "eval exec [ProgPathway gs] -sDEVICE=png256 -sOutputFile=$FilePNG -g${Width}x${Height} -q -dNOPAUSE -dBATCH $FilePS" if {[catch {eval $Commande} Message]} {Espionne $Message;return 0} return 1 } proc pseq {} { DecortiqueUnTFA FRAT01.tfa Lnom Seq set Lnom [lrange $Lnom 0 12] set Lseq [list] set Lref [list] foreach n $Lnom { set s [string range $Seq($n) 0 200] lappend Lref $s set s [string map {- "" "." ""} $s] lappend Lseq $s } EcritLeTfa tst.tfa $Lnom $Lseq EcritLeTfa tstref.tfa $Lnom $Lref exit } proc putLog {aString {logFileName ""}} { if {$logFileName==""} { set chan [open "log" a] } else { set chan [open "$logFileName" a] } #puts $aString puts $chan $aString close $chan } proc putlog {text} { puts $text return } proc qds {Science args} { set Question [join $args " "] if {[string range $Question 0 2] ne "ret"} { set Question "ret $Question" } return [QuestionDeScience $Science $Question] } proc rangedimer {} { set Ldim [glob *_dim.pdb] set dirdim [MiSynPatDir]/data/structures foreach fd $Ldim { set sys [string range $fd 0 [string first "_" $fd]-1] if {$sys eq "gars2"} {set sys "gars"} set fin [file join $dirdim $sys $sys.pdb] set fmon [file join $dirdim $sys ${sys}_mon.pdb] if {[file exists $fmon]} { file delete $fin } if {[file exists $fin]} { file rename $fin $fmon } file copy $fd $fin } exit } proc reAss {contig} { #puts [canalSqlAssemblyDb] puts [NSAssemblyDb::getCanal] set seqFh [open $contig w] set qualFh [open $contig.qual w] set sql "SELECT sequence.name, sequence.gapped_sequence, sequence.gapped_quality_values, sequence.consed_informations, sequence.reverse FROM contig, sequence WHERE contig.name = '$contig' AND contig.pk_contig = sequence.pk_contig" set result [SqlExec $sql GetList] puts $result foreach {name seq qual consed reverse } $result { if {$reverse eq "f"} { puts $seqFh [formatFasta "$name $consed" [ungapSequence $seq]] puts $qualFh [formatQualFasta "$name $consed " [ungapQualityValues $qual]] } else { puts $seqFh [formatFasta "$name $consed" [ungapSequence [RetourneLaChaine $seq]]] puts $qualFh [formatQualFasta "$name $consed " [ungapQualityValues [RetourneLaListeIter $qual]]] } } close $seqFh close $qualFh } proc read35 {} { set lb [split "ACDEFGHIKLMNPQRSTVWY" ""] set Lf [LesLignesDuFichier "3_5.cmp"] set i 0 foreach l $Lf { if {[regexp {\.\.} $l]} {break} incr i } set aa [string trim [lindex $Lf $i]] regsub -all " " $aa "" aa regsub -all "\t" $aa "" aa regsub -all {\.} $aa "" aa set LAA [split $aa ""] set d [expr $i+1] set i 0 foreach a $LAA { set bon 0 while {! $bon} { set l [lindex $Lf $d] set l [string trim $l] regsub -all " " $l " " l puts $l if {$l != ""} { set bon 1 break } incr d } set min 999. set le [split $l " "] foreach b [lrange $LAA $i end] e [lrange $le 0 end-1] { set t($a,$b) $e set t($b,$a) $e if {$e <= $min} {set min $e} } incr i incr d } foreach e [array names t] {set t($e) [expr [set t($e)] - $min]} set dg [set t(A,A)] foreach e [array names t] {set t($e) [expr [set t($e)] - $dg]} set f [open "p35.dat" w] set pca "2 20 20" puts $f "20" foreach a $lb { set x {} foreach b $lb {lappend x [set t($a,$b)]} set p [join $x " "] puts $f $p append pca " $p" } close $f package require La 1.0 catch {namespace import La::*} nist_pca $pca exit exec /biolo/secator/mds p35.dat p35.out 2 set Lf [LesLignesDuFichier "p35.out"] set f [open "p35m.dat" w] foreach l [lrange $Lf 1 end] a $lb { set l [string trim $l] regsub -all "\t" $l " " l regsub -all " " $l " " l puts $f "$a $l" } close $f exit } proc readACEfile {fileName {computeLeftPadding 0} {showProgress 1}} { set fh [open $fileName "r"] set nextContigID 1 set currentContig "none" set ace(alignmentName) [regsub {^.*/} $fileName {}] #rR debut rajout pour tenir copte d'un fichier vide set ace(index) {} #rR fin rajout if {$showProgress} {Espionne "Reading ACE file: $fileName"} while {![eof $fh]} { gets $fh line # Read the AS line if { [regexp {^AS +([0-9]+) +([0-9]+)} $line regMatch ace(numContigs) ace(numReads)] } { if {$showProgress} {Espionne "$ace(numReads) reads in $ace(numContigs) contigs..."} } elseif { [regexp {^CO +([^ ]+) +([0-9]+) +([0-9]+) +([0-9]+) +(U|C)} $line regMatch contig(name) contig(length) contig(reads) contig(segments) contig(strand)] } { # Read a CO line # we are in a new contig, so update the current name set currentContig $contig(name) if {$showProgress} {Espionne "Reading $currentContig..."} # add contig name to index lappend ace(index) $currentContig # reset the next read id set nextReadID 1 # add a few informations set ace($currentContig,name) $contig(name) set ace($currentContig,length) $contig(length) set ace($currentContig,reads) $contig(reads) set ace($currentContig,segments) $contig(segments) set ace($currentContig,strand) $contig(strand) # read the consensus sequence set ace($currentContig,consensus) [readSequence $fh] } elseif { [regexp {^BQ} $line] } { # Read BQ block set ace($currentContig,basesQuality) [readBasesQuality $fh] } elseif { [regexp {^AF +([^ ]+) +(U|C) +(-?[0-9]+)} $line regMatch read(name) read(strand) read(consensusPosition)] } { # Read an AF line # like contig but for reads set currentRead $read(name) # add the id to index lappend ace($currentContig,index) $currentRead # store informations set ace($currentContig,$currentRead,name) $read(name) set ace($currentContig,$currentRead,strand) $read(strand) set ace($currentContig,$currentRead,consensusPosition) $read(consensusPosition) # Whe need later to know the lowest relative consensus position, following code do the job if { [info exists ace($currentContig,lowestRelativeConsensusPosition)] } { if { $read(consensusPosition) < $ace($currentContig,lowestRelativeConsensusPosition) } { set ace($currentContig,lowestRelativeConsensusPosition) $read(consensusPosition) } } else { set ace($currentContig,lowestRelativeConsensusPosition) $read(consensusPosition) } } elseif { [regexp {^RD +([^ ]+) +([0-9]+) +([0-9]+) +([0-9]+)} $line regMatch read(name) read(length) read(numWholeReads) read(numTagReads)] } { # Read an RD line set currentRead $read(name) # store results with the help of reads index set ace($currentContig,$currentRead,length) $read(length) set ace($currentContig,$currentRead,numWholeReads) $read(numWholeReads) set ace($currentContig,$currentRead,numTagReads) $read(numTagReads) # read the sequence set ace($currentContig,$currentRead,sequence) [readSequence $fh] } elseif { [regexp {^QA +(-?[0-9]+) +(-?[0-9]+) +(-?[0-9]+) +(-?[0-9]+)} $line regMatch read(qualityStart) read(qualityEnd) read(alignmentStart) read(alignmentEnd)] } { # Read a QA line # currentRead should contains the good id (see in the Read RD line bloc) set ace($currentContig,$currentRead,qualityStart) $read(qualityStart) set ace($currentContig,$currentRead,qualityEnd) $read(qualityEnd) set ace($currentContig,$currentRead,alignmentStart) $read(alignmentStart) set ace($currentContig,$currentRead,alignmentEnd) $read(alignmentEnd) } elseif { [regexp {^DS +(.*)} $line regMatch read(consedInfos)] } { # Read a DS line set ace($currentContig,$currentRead,consedInfos) $read(consedInfos) } } if {$computeLeftPadding} { array unset contig array unset read foreach contig $ace(index) { if {$showProgress} {Espionne "Compute padding for $contig"} if {$ace($contig,lowestRelativeConsensusPosition) < 1} { set ace($contig,padding) [expr abs($ace($contig,lowestRelativeConsensusPosition))+1] } else { set ace($contig,padding) 0 } set ace($contig,alignmentLength) [expr [string length $ace($contig,consensus)] + $ace($contig,padding)] foreach read $ace($contig,index) { set ace($contig,$read,padding) [expr $ace($contig,padding) - 1 + $ace($contig,$read,consensusPosition)] set alnLength [expr [string length $ace($contig,$read,sequence)] + $ace($contig,$read,padding)] if {$alnLength > $ace($contig,alignmentLength)} {set ace($contig,alignmentLength) $alnLength} } } } close $fh return [array get ace] } proc readBasesQuality {fh} { set basesQuality "" while {! [eof $fh] } { gets $fh line set line [string trim $line] if { [string length $line] != 0 } { lappend sequence $line } else { break } } return [join $sequence] } proc readCorrespIdx {} { set fichierCorresp "[RepertoireDuGenome]/fiches/corresp.idx" foreach ligne [LesLignesDuFichier $fichierCorresp] { if {[regexp {^CO\s+(\S+)\s+(\S+)\s+(\d+)$} $ligne regMatch nomContig nomGscope nbReads]} { set currentContig $nomContig set tab($nomGscope,type) CO set tab($nomGscope,contig) $nomContig set tab($nomContig,gscope) $nomGscope } elseif {[regexp {^RD\s+(\S+)\s+(\d+)$} $ligne regMatch nom posConsensus]} { lappend tab($currentContig,reads) $nom set tab($nom,type) RD set tab($nom,consensusPosition) $posConsensus } elseif {[regexp {^SI\s+(\S+)\s+(\S+)} $ligne regMatch nom nomGscope]} { set tab($nomGscope,type) SI set tab($nomGscope,read) $nom set tab($nom,gscope) $nomGscope } } return [array get tab] } proc readFasta {filename {showProgress 1}} { array set fasta {index {}} set fh [open $filename "r"] unset -nocomplain currentAccess while {![eof $fh]} { gets $fh line set line [string trim $line] if {[regexp {^>(\S+)(?:\s+(.*))?} $line regMatch access description]} { set currentAccess $access lappend fasta(index) $access set fasta($access) {} regsub -all {\s+} $line " " line set fasta($access,header) $line set fasta($access,description) [string trim $description] if {$showProgress} {Espionne "Reading ${access}..."} } if { [info exists currentAccess] && ([string length $line] != 0) } { lappend fasta($currentAccess) $line } } close $fh foreach access $fasta(index) { set fasta($access,sequence) [join [lrange $fasta($access) 1 end] ""] } return [array get fasta] } proc readPhd {filename} { set fh [open $filename "r"] set section 0 while {![eof $fh]} { gets $fh line if { [regexp -nocase {begin_sequence[[:space:]]+([^[:space:]]+)} $line regMatch sequence] } { set phd(sequence) $sequence } elseif { [regexp -nocase {begin_comment} $line] } { set section comment continue } elseif { [regexp -nocase {end_comment} $line] } { set section 0 } elseif { [regexp -nocase {begin_dna} $line] } { set section dna continue } elseif { [regexp -nocase {end_dna} $line] } { set section 0 } if { ([string length $line] != 0) && ($section != 0) } { lappend phd($section) $line } } close $fh return [array get phd] } proc readScf {filename} { set fh [open $filename "r"] fconfigure $fh -translation binary #---------------------------------------------------------------------------- # lecture en tete #---------------------------------------------------------------------------- set scf(magic) [read $fh 4] binary scan [read $fh 4] I scf(samples) binary scan [read $fh 4] I scf(samplesOffset) binary scan [read $fh 4] I scf(bases) binary scan [read $fh 4] I scf(basesLeftClip) binary scan [read $fh 4] I scf(basesRightClip) binary scan [read $fh 4] I scf(basesOffset) binary scan [read $fh 4] I scf(commentsSize) binary scan [read $fh 4] I scf(commentsOffset) set scf(version) [read $fh 4] binary scan [read $fh 4] I scf(sampleSize) binary scan [read $fh 4] I scf(codeSet) binary scan [read $fh 4] I scf(privateSize) binary scan [read $fh 4] I scf(privateOffset) binary scan [read $fh [expr 4 * 18]] I* scf(headerSpare) # convertion en entiers non signes set scf(samples) [expr {$scf(samples) & 0xFFFFFFFF}] set scf(samplesOffset) [expr {$scf(samplesOffset) & 0xFFFFFFFF}] set scf(bases) [expr {$scf(bases) & 0xFFFFFFFF}] set scf(basesLeftClip) [expr {$scf(basesLeftClip) & 0xFFFFFFFF}] set scf(basesRightClip) [expr {$scf(basesRightClip) & 0xFFFFFFFF}] set scf(basesOffset) [expr {$scf(basesOffset) & 0xFFFFFFFF}] set scf(commentsSize) [expr {$scf(commentsSize) & 0xFFFFFFFF}] set scf(commentsOffset) [expr {$scf(commentsOffset) & 0xFFFFFFFF}] set scf(sampleSize) [expr {$scf(sampleSize) & 0xFFFFFFFF}] set scf(codeSet) [expr {$scf(codeSet) & 0xFFFFFFFF}] set scf(privateSize) [expr {$scf(privateSize) & 0xFFFFFFFF}] set scf(privateOffset) [expr {$scf(privateOffset) & 0xFFFFFFFF}] for {set i 0} {$i < [llength $scf(headerSpare)]} {incr i} { set uint [lindex $scf(headerSpare) $i] set uint [expr {$uint & 0xFFFFFFFF}] lset scf(headerSpare) $i $uint } #---------------------------------------------------------------------------- # verification de version #---------------------------------------------------------------------------- if {$scf(version) > "3.10"} { puts "SCF version: $scf(version)" puts "Can only read SCF versions <= 3.10" close $fh exit 1 } #---------------------------------------------------------------------------- # lecture des donnees echantillons # !!!!! pour version >= 3.0 !!!! # il faut encore decoder les valeurs des echantillons # voir: http://staden.sourceforge.net/manual/formats_unix_4.html #---------------------------------------------------------------------------- if {$scf(version) >= "3.00" && $scf(sampleSize) == 2} { # SCF >= 3.00 16 bits samples binary scan [read $fh [expr 2 * $scf(samples)]] S* scf(samplesA) binary scan [read $fh [expr 2 * $scf(samples)]] S* scf(samplesC) binary scan [read $fh [expr 2 * $scf(samples)]] S* scf(samplesG) binary scan [read $fh [expr 2 * $scf(samples)]] S* scf(samplesT) # convertion en entiers non signes for {set i 0} {$i < $scf(samples)} {incr i} { set uint [lindex $scf(samplesA) $i] set uint [expr {$uint & 0xFFFF}] lset scf(samplesA) $i $uint set uint [lindex $scf(samplesC) $i] set uint [expr {$uint & 0xFFFF}] lset scf(samplesC) $i $uint set uint [lindex $scf(samplesG) $i] set uint [expr {$uint & 0xFFFF}] lset scf(samplesG) $i $uint set uint [lindex $scf(samplesT) $i] set uint [expr {$uint & 0xFFFF}] lset scf(samplesT) $i $uint } } elseif {$scf(version) >= "3.00"} { # SCF >= 3.00 8 bits samples binary scan [read $fh $scf(samples)] c* scf(samplesA) binary scan [read $fh $scf(samples)] c* scf(samplesC) binary scan [read $fh $scf(samples)] c* scf(samplesG) binary scan [read $fh $scf(samples)] c* scf(samplesT) # convertion en entiers non signes for {set i 0} {$i < $scf(samples)} {incr i} { set uint [lindex $scf(samplesA) $i] set uint [expr {$uint & 0xFF}] lset scf(samplesA) $i $uint set uint [lindex $scf(samplesC) $i] set uint [expr {$uint & 0xFF}] lset scf(samplesC) $i $uint set uint [lindex $scf(samplesG) $i] set uint [expr {$uint & 0xFF}] lset scf(samplesG) $i $uint set uint [lindex $scf(samplesT) $i] set uint [expr {$uint & 0xFF}] lset scf(samplesT) $i $uint } } elseif {$scf(sampleSize) == 2} { # SCF < 3.00 16 bits samples for {set i 0} {$i < $scf(samples)} {incr i} { binary scan [read $fh 8] S* smplA smplC smplG smplT # convertion en entiers non signes avant d'ajouter les valeurs set smplA [expr {$smplA & 0xFFFF}] set smplC [expr {$smplC & 0xFFFF}] set smplG [expr {$smplG & 0xFFFF}] set smplT [expr {$smplT & 0xFFFF}] # ajout des valeurs lappend scf(samplesA) $smplA lappend scf(samplesC) $smplC lappend scf(samplesG) $smplG lappend scf(samplesT) $smplT } } else { # SCF < 3.00 8 bits samples for {set i 0} {$i < $scf(samples)} {incr i} { binary scan [read $fh 4] c* smplA smplC smplG smplT # convertion en entiers non signes avant d'ajouter les valeurs set smplA [expr {$smplA & 0xFF}] set smplC [expr {$smplC & 0xFF}] set smplG [expr {$smplG & 0xFF}] set smplT [expr {$smplT & 0xFF}] # ajout des valeurs lappend scf(samplesA) $smplA lappend scf(samplesC) $smplC lappend scf(samplesG) $smplG lappend scf(samplesT) $smplT } } #---------------------------------------------------------------------------- # lecture des bases #---------------------------------------------------------------------------- if {$scf(version) >= "3.00"} { binary scan [read $fh [expr 4 * $scf(bases)]] I* scf(peakIdx) binary scan [read $fh $scf(bases)] c* scf(probA) binary scan [read $fh $scf(bases)] c* scf(probC) binary scan [read $fh $scf(bases)] c* scf(probG) binary scan [read $fh $scf(bases)] c* scf(probT) set scf(calledBases) [split [read $fh $scf(bases)] {}] # lecture des probas specifiques a version 3.10 binary scan [read $fh $scf(bases)] c* scf(probSub) binary scan [read $fh $scf(bases)] c* scf(probIns) binary scan [read $fh $scf(bases)] c* scf(probDel) # convertion en entiers non signes for {set i 0} {$i < $scf(bases)} {incr i} { set uint [lindex $scf(peakIdx) $i] set uint [expr {$uint & 0xFFFFFFFF}] lset scf(peakIdx) $i $uint set uint [lindex $scf(probA) $i] set uint [expr {$uint & 0xFF}] lset scf(probA) $i $uint set uint [lindex $scf(probC) $i] set uint [expr {$uint & 0xFF}] lset scf(probC) $i $uint set uint [lindex $scf(probG) $i] set uint [expr {$uint & 0xFF}] lset scf(probG) $i $uint set uint [lindex $scf(probT) $i] set uint [expr {$uint & 0xFF}] lset scf(probT) $i $uint set uint [lindex $scf(probSub) $i] set uint [expr {$uint & 0xFF}] lset scf(probSub) $i $uint set uint [lindex $scf(probIns) $i] set uint [expr {$uint & 0xFF}] lset scf(probIns) $i $uint set uint [lindex $scf(probDel) $i] set uint [expr {$uint & 0xFF}] lset scf(probDel) $i $uint } } else { #pour version <= 2 for {set i 0} {$i < $scf(bases)} {incr i} { binary scan [read $fh 8] Ic4 peakIdx probA probC probG probT # convertion en entiers non signes avant d'ajouter les valeurs set peakIdx [expr {$peakIdx & 0xFFFFFFFF}] set probA [expr {$probA & 0xFF}] set probC [expr {$probC & 0xFF}] set probG [expr {$probG & 0xFF}] set probT [expr {$probT & 0xFF}] # ajout des valeurs lappend scf(peakIdx) $peakIdx lappend scf(probA) $probA lappend scf(probC) $probC lappend scf(probG) $probG lappend scf(probT) $probT lappend scf(calledBases) [read $fh 1] # passe l'espace libre read $fh 3 # ajoute des 0 pour rester homogene avec la sortie de la version 3.1 lappend scf(probSub) 0 lappend scf(probIns) 0 lappend scf(probDel) 0 } } #---------------------------------------------------------------------------- # lecture des commentaires #---------------------------------------------------------------------------- set scf(comments) [read $fh $scf(commentsSize)] #---------------------------------------------------------------------------- # lecture des donnees privees #---------------------------------------------------------------------------- set scf(private) [read $fh $scf(privateSize)] close $fh return [array get scf] } proc readSequence {fh} { set sequence "" while {! [eof $fh] } { gets $fh line set line [string trim $line] if { [string length $line] != 0 } { lappend sequence $line } else { break } } return [join $sequence ""] } proc read_sock {} { global SckR # [eof $sock] == 1 || [catch {gets $sock l}] || $l == "\f" if {[eof $SckR(socket)] == 1} { puts "eof pout $SckR(socket)" fileevent $SckR(socket) readable {} close $SckR(socket) } else { while {[gets $SckR(socket) l] > 0} { append SckR(tmp) "$l\n" flush $SckR(socket) } append SckR(tmp) $l #puts "tmp : $SckR(tmp)" if {[regexp "turlututu" $SckR(tmp)]} { set tmp [set SckR(tmp)] set SckR(tmp) "" set SckR(Reponse) $tmp } } return } proc recupDonneesMacsims {ligne seq} { if {[string first "DOMAIN" $ligne] != -1} { set toAdd "domain" } elseif {[string first "PFAM-A" $ligne] != -1} { set toAdd "pfam-A" } elseif {[string first "PROSITE" $ligne] != -1} { set toAdd "prosite" } elseif {[string first "SITE" $ligne] != -1} { set toAdd "site" } elseif {[string first "SIGNAL" $ligne] != -1} { set toAdd "signal" } else { return "" } set idx1 [expr [string first "" $ligne] + 8] set idx2 [string first "<\/fstart>" $ligne] set posDeb [string range $ligne $idx1 [expr $idx2 - 1]] set idx3 [expr [string first "<\/fstop>" $ligne] - 1] set posFin [string range $ligne [expr $idx2 + 16] $idx3] set idx4 [expr [string first "" $ligne] + 7] set idx5 [expr [string first "<\/fnote>" $ligne] - 1] set desc [string range $ligne $idx4 $idx5] if {[string first "ERROR" $desc] != -1} { set toAdd "" } else { set toAdd "$toAdd@@$posDeb@@$posFin@@$desc" } return $toAdd } proc recupFold {pab file} { foreach f [glob -nocomplain /genomics/link/MS2PH-dbEuca/empreinte/${pab}_*.empreinte] { set lignes [LesLignesDuFichier $f] set pdb [string range [lindex $lignes 0] 6 end] if {[string index $pdb end] == "a"} { set pdb [string range $pdb 0 3] } else { regsub "_" $pdb "" pdb } set seqPDB [string range [lindex $lignes 2] 11 end] set seqQuery [string range [lindex $lignes 1] 8 end] set info [parseFSSP $pdb $seqPDB $seqQuery $file] } # EspionneL $info return 1 } proc recupGene {gdb} { set url1 "[LbgiUrl]/~friedric/searchHgmd.php" set Query [::http::formatQuery search "$gdb"] set url "${url1}?$Query" set LesLignes {} set x [HttpCopy $url LesLignes] set gene [parsePourGene $LesLignes] return $gene } proc recupInfoBirdF {access} { set ficIn "$access.ql" set ficOut "$access.bird" set fi [open $ficIn w] # recuperation de la fiche UP de l access # recuperation des variants de splicing dans varsplic en fasta # recuperation de la sequence UP de l access en fasta puts $fi "ID $access DB uniprot\nFD ID,OS,DE\nFM FLAT\n" close $fi set cmd "/home/friedric/bin/birdql_http.sh $ficIn > $ficOut" catch {eval exec $cmd} Message set lignes [LesLignesDuFichier $ficOut] file delete -force $ficIn file delete -force $ficOut return $lignes } proc recupPheno {} { set ficIn [file join [RepertoireDuGenome] "list" "listeEquivalence"] set lineIn [LesLignesDuFichier $ficIn] set ListeGdb "" foreach l $lineIn { lappend ListeGdb [string range [lindex $l 2] 4 end] } foreach gdb $ListeGdb { set gene [recupGene $gdb] puts $gene set fileName [lindex [lindex $lineIn [lsearch -regexp $lineIn $gdb]] 0] set file [file join [RepertoireDuGenome] "mutation" $fileName] #pour chaque type de mutation, sachant qu on zappe Splice, Regulatory, Complex rearrangements et Repeat variations foreach type {"Missense/nonsense" "Small deletions" "Small insertions" "Small indels" "Gross deletions" "Gross insertions"} { set lignes [pagesMutation $gene $type] # si on a des mutations connues if {[lsearch -regexp $lignes {Error.....no results returned}] == -1} { set lignes [lrange $lignes [lsearch -regexp $lignes "Number of results"] end] if {$type == "Missense/nonsense"} { parseMissense $lignes $file} if {$type == "Splice"} { parseSplice $lignes $file} if {$type == "Regulatory"} { parseRegulatory $lignes $file} if {$type == "Small deletions"} { parseSmDeletion $lignes $file} if {$type == "Small insertions"} { parseSmInsertion $lignes $file} if {$type == "Small indels"} { parseSmIndel $lignes $file} if {$type == "Gross deletions"} { parseGrDeletion $lignes $file} if {$type == "Gross insertions"} { parseGrInsertion $lignes $file} if {$type == "Complex rearrangements"} { parseCoRearr $lignes $file} if {$type == "Repeat variations"} { parseRepeat $lignes $file} } } } return 1 } proc recupRefGeneOmim {lignes} { set lGene "" set idx [lsearch -regexp $lignes ">MIM<"] set lignes [lrange $lignes [expr $idx + 1] end] set idxf [lsearch -regexp $lignes ""] set lignes [lrange $lignes 0 [expr $idxf - 1]] foreach l $lignes { if {[regexp "gene" $l]} { set idx1 [string first ";" $l] set toAdd [string range $l [expr $idx1 - 7] [expr $idx1 - 1]] set toAdd [string trim $toAdd ">"] set desc [recupereDescOmim $toAdd] append toAdd ".${desc}" lappend lGene $toAdd } } return $lGene } proc recupRefOmim {id type} { set url "http://www.genome.jp/dbget-bin/www_linkdbsub?dbkey=linkdb&mode=single2db&sort=to&targetdb=mim&keywords=uniprot%3A$id" set x [HttpCopy $url LesLignes] set idxA [expr [lsearch -regexp $LesLignes "-----"] + 1] set LesLignes [lrange $LesLignes $idxA end] set idxB [expr [lsearch -regexp $LesLignes ""] - 1] set LesLignes [lrange $LesLignes 0 $idxB] if { $type == "Gene" } { set list [RefGeneOmim $LesLignes] } if { $type == "Pheno" } { set list [RefPhenoOmim $LesLignes] } return $list } proc recupRefPhenoOmim {lignes} { set lPheno "" set idx [lsearch -regexp $lignes ">MIM<"] set lignes [lrange $lignes [expr $idx + 1] end] set idxf [lsearch -regexp $lignes ""] set lignes [lrange $lignes 0 [expr $idxf - 1]] foreach l $lignes { if {[regexp "phenotype" $l]} { set idx1 [string first ";" $l] set toAdd [string range $l [expr $idx1 - 7] [expr $idx1 - 1]] set toAdd [string trim $toAdd ">"] set desc [recupereDescOmim $toAdd] append toAdd ".${desc}" lappend lPheno $toAdd } } return $lPheno } proc recupUniprotEntryName {lignes} { set name "" set idx [lsearch -regexp $lignes ">Entry name<"] set ligne [lindex $lignes [expr $idx + 1]] set idx1 [expr [string first "" $ligne] + 3] set idx2 [expr [string first "" $ligne] - 1] set name [string range $ligne $idx1 $idx2] return $name } proc recupUniprotFunction {lignes} { set fct "" set idx [lsearch -regexp $lignes ">FUNCTION<"] set ligne [lindex $lignes $idx] set idx1 [expr [string first ":" $ligne] + 6] set idx2 [expr [string first "
  • " $ligne] - 1] set fct [string range $ligne $idx1 $idx2] return $fct } proc recupUniprotGeneName {lignes} { set name "" set idx [lsearch -regexp $lignes ">Gene name<"] set ligne [lindex $lignes [expr $idx + 2]] set idx1 [expr [string first "" $ligne] + 12] set name [string range $ligne $idx1 end] set idx2 [expr [string first "" $name] - 1] set name [string range $name 0 $idx2] return $name } proc recupUniprotListAccNum2 {lignes} { set laccNum "" set idx [lsearch -regexp $lignes ">Secondary accession number"] set ligne [lindex $lignes [expr $idx + 1]] set idx1 [expr [string first "" $ligne] + 4] set idx2 [expr [string first "" $ligne] - 1] set laccNum [string range $ligne $idx1 $idx2] set laccNum [split $laccNum " "] return $laccNum } proc recupUniprotListGO {lignes} { set idxA [expr [lsearch -regexp $lignes ">GO<"] + 1] set idxB [lsearch -regexp $lignes ">QuickGo view.<"] set Lignes [lrange $lignes $idxA $idxB] if { $Lignes == ""} { return "none" } set lGO "" foreach l $Lignes { set idx1 [string first "" $toAdd "" toAdd lappend lGO $toAdd } return $lGO } proc recupUniprotListSynGeneName {lignes} { set lSyn "" set idx [lsearch -regexp $lignes ">Gene name<"] set ligne [lindex $lignes [expr $idx + 3]] if { [regexp "Synonym" $ligne] } { set idx1 [expr [string first "" $ligne] + 9] set lSyn [string range $ligne $idx1 end] set idx2 [expr [string first "" $lSyn] - 1] set lSyn [string range $lSyn 0 $idx2] regsub -all " " $lSyn "" lSyn set lSyn [split $lSyn ","] } else { set lSyn "none" } return $lSyn } proc recupUniprotListSynProtName {lignes} { set lprotName "" set idx [lsearch -regexp $lignes ">Protein name<"] set lignes [lrange $lignes [expr $idx + 4] end] if { [lsearch -regexp $lignes ">Synonym"] == 0 } { if { [lsearch -regexp $lignes "None"] == 1 } { set lprotName "none" } else { set lignes [lrange $lignes 2 end] set idx2 [lsearch -regexp $lignes ""] set lignes [lrange $lignes 0 $idx2] set lprotName "" foreach l $lignes { if { [regexp "href" $l] } { set idxE [expr [string first "" $l] + 3] lappend lprotName [string trimleft [string range $l 0 $idxE]] } else { set idxE [expr [string first "<" $l] - 1] lappend lprotName [string trimleft [string range $l 0 $idxE]] } } } } else { set lprotName "none" } return $lprotName } proc recupUniprotProtname {lignes} { set name "" set idx [lsearch -regexp $lignes ">Protein name<"] set ligne [lindex $lignes [expr $idx + 1]] set idx1 [expr [string first "" $ligne] + 3] set idx2 [expr [string first "" $ligne] - 1] set name [string range $ligne $idx1 $idx2] return $name } proc recupereDescOmim {id} { set url "http://srs6.ebi.ac.uk/srs6bin/cgi-bin/wgetz?-e+\[omim-id:$id\]" set x [HttpCopy $url lignes] set ligne [lindex $lignes [expr [lsearch -regexp $lignes ">Title<"] + 1]] set desc [string range $ligne [expr [string first "

    " $ligne] + 4] end] set desc [string trim $desc] return $desc } proc regExpMistake {regExp positions} { set mistaken "" set IUPACcomp "" #Quand on demande deux mutations au meme endroit, elles s'annulent donc, on les fusionne en une seule for {set I 0} {$I <= 9} {incr I} { regsub -all "$I $I" $positions "$I" positions } regsub {^\_} $regExp "" regExp regsub {\_$} $regExp "" regExp set tab [split $regExp "_"] set positionArray [split $positions " "] foreach position $positionArray { if {$position != ""} { set fragmentRegExp [lindex $tab $position] if {$fragmentRegExp == "A"} { set IUPACcomp {[TCG]} } elseif {$fragmentRegExp == "T"} { set IUPACcomp {[AGC]} } elseif {$fragmentRegExp == "C"} { set IUPACcomp {[AGT]} } elseif {$fragmentRegExp == "G"} { set IUPACcomp {[CTA]} } elseif {$fragmentRegExp == {[AG]} || $fragmentRegExp == {[GA]} } { set IUPACcomp {[TC]} } elseif {$fragmentRegExp == {[TC]} || $fragmentRegExp == {[CT]} } { set IUPACcomp {[AG]} } elseif {$fragmentRegExp == {[CA]} || $fragmentRegExp == {[AC]} } { set IUPACcomp {[TG]} } elseif {$fragmentRegExp == {[TG]} || $fragmentRegExp == {[GT]} } { set IUPACcomp {[AC]} } elseif {$fragmentRegExp == {[AT]} || $fragmentRegExp == {[TA]} } { set IUPACcomp {[GC]} } elseif {$fragmentRegExp == {[CG]} || $fragmentRegExp == {[GC]} } { set IUPACcomp {[AT]} } elseif {$fragmentRegExp == {[CTG]} || $fragmentRegExp == {[TGC]} || $fragmentRegExp == {[GCT]} || $fragmentRegExp == {[CGT]} || $fragmentRegExp == {[CTG]} || $fragmentRegExp == {[TCG]} } { set IUPACcomp "A" } elseif {$fragmentRegExp == {[ATG]} || $fragmentRegExp == {[TGA]} || $fragmentRegExp == {[GAT]} || $fragmentRegExp == {[GTA]} || $fragmentRegExp == {[TAG]} || $fragmentRegExp == {[AGT]} } { set IUPACcomp "C" } elseif {$fragmentRegExp == {[ATC]} || $fragmentRegExp == {[TCA]} || $fragmentRegExp == {[CAT]} || $fragmentRegExp == {[CTA]} || $fragmentRegExp == {[ACT]} || $fragmentRegExp == {[TAC]} } { set IUPACcomp "G" } elseif {$fragmentRegExp == {[ACG]} || $fragmentRegExp == {[CGA]} || $fragmentRegExp == {[GAC]} || $fragmentRegExp == {[AGC]} || $fragmentRegExp == {[GCA]} || $fragmentRegExp == {[CAG]} } { set IUPACcomp "T" } elseif {$fragmentRegExp == {[ATCG]} || $fragmentRegExp == {[ATGC]} || $fragmentRegExp == {[AGCT]} || $fragmentRegExp == {[AGTC]} || $fragmentRegExp == {[ACTG]} || $fragmentRegExp == {[ACGT]} || $fragmentRegExp == {[TAGC]} || $fragmentRegExp == {[TACG]} || $fragmentRegExp == {[TCAG]} || $fragmentRegExp == {[TCGA]} || $fragmentRegExp == {[TGCA]} || $fragmentRegExp == {[TGAC]} || $fragmentRegExp == {[GACT]} || $fragmentRegExp == {[GATC]} || $fragmentRegExp == {[GCTA]} || $fragmentRegExp == {[GCAT]} || $fragmentRegExp == {[GTCA]} || $fragmentRegExp == {[GTAC]} || $fragmentRegExp == {[CTAG]} || $fragmentRegExp == {[CTGA]} || $fragmentRegExp == {[CAGT]} || $fragmentRegExp == {[CATG]} || $fragmentRegExp == {[CGAT]} || $fragmentRegExp == {[CGTA]} } { set IUPACcomp {[ATCG]} } else { Espionne "Erreur regExpMistake : fragmentRegexp '$fragmentRegExp' inconnu dans $tab a la position $position" exit } set tab [lreplace $tab $position $position $IUPACcomp] } } set mistaken [join $tab ""] #Espionne "mis $mistaken" return $mistaken } proc regeccb {} { set pr(early,etudiants) [list 350 300 250] set pr(early,academics) [list 600 550 500] set pr(early,corporate) [list 850 800 750] set pr(late,etudiants) [list 470 420 370] set pr(late,academics) [list 720 670 620] set pr(late,corporate) [list 970 920 870] fconfigure stdout -buffering none fconfigure stdin -blocking 1 puts "" puts -nonewline "total people ......: " gets stdin total puts -nonewline "%age late .........: " gets stdin plate set pearly [expr {100-$plate}] puts -nonewline "%age students .....: " gets stdin pstu puts -nonewline "%age academics ....: " gets stdin paca puts -nonewline "%age corporate ....: " gets stdin pcor set nstu [expr {$total*$pstu/100}] set naca [expr {$total*$paca/100}] set ncor [expr {$total*$pcor/100}] set sum 0 foreach d {late early} { foreach q {stu aca cor} cl {etudiants academics corporate} { foreach fee [set pr($d,$cl)] pc {50 15 35} { set mt [expr {[set n$q]*[set p$d]/100*$pc/100*$fee}] puts "$d $q $pc $fee -> $mt" set sum [expr {$sum + $mt}] } } } puts "sum = $sum" exit } proc regtestt {exp exp2} { set test ">CELE00100 NP_492842 Caenorhabditis eleganserpentine Receptor, class T family member (srt-61) Caenorhabditis elegans" regexp -indices $exp $test res puts $res puts [string replace $test [lindex $res 0] [lindex $res 1] $exp2] } proc removeLotsOfFile {} { set Lfile [glob -nocomplain *.tfalelog] foreach file $Lfile { set pref [file rootname $file] foreach fic [glob -nocomplain ${pref}*] { puts $fic eval exec "rm $fic" } } return 1 } proc reorder1PourTous {{directory ""}} { if {$directory==""} {set directory [RepertoireDuGenome]/infos} set r [glob -directory $directory *] foreach fichier $r { #if {![regexp {_Org} $fichier]} { continue } set n [split $fichier "/"] set f [lindex $n [llength $n]-1] if {[PasTouche $f]} { continue } set newf $f append newf "_Order" Espionne "f: $f" Espionne "newf: $newf" Espionne "/biolo/macsim/reorder1 [RepertoireDuGenome]/macsimXml/$f [RepertoireDuGenome]/msf/$f [RepertoireDuGenome]/macsimXml/$newf" exec /biolo/macsim/reorder1 [RepertoireDuGenome]/macsimXml/$f [RepertoireDuGenome]/msf/$f [RepertoireDuGenome]/macsimXml/$f FinPasTouche $f } } proc repeatmasker {FichierTFA {OptionSpecies ""} {AvecNoLow 1}} { if { ! [file exists $FichierTFA]} {return ""} set OptionNoLow "" if {$AvecNoLow} {set OptionNoLow "-nolow"} AppendAuFichier [Fiches]/qds.log "tototitit" set Rep [RepRepeatMasker "Prog"] if {[regexp ".lib$|.ref$" $OptionSpecies]} { AppendAuFichier [Fiches]/qds.log "1 repeatmasker $FichierTFA $OptionNoLow -lib $OptionSpecies" catch {exec repeatmasker $FichierTFA $OptionNoLow -lib $OptionSpecies} Message } elseif {$OptionSpecies != ""} { set OptionSpecies "-$OptionSpecies" AppendAuFichier [Fiches]/qds.log "2 repeatmasker $FichierTFA $OptionNoLow $OptionSpecies" catch {exec repeatmasker $FichierTFA $OptionNoLow $OptionSpecies} Message } else { AppendAuFichier [Fiches]/qds.log "3 repeatmasker $FichierTFA $OptionNoLow " catch {exec repeatmasker $FichierTFA $OptionNoLow } Message } AppendAuFichier [Fiches]/qds.log "onsort1" if {[file exists "$FichierTFA.masked"]} { return "$FichierTFA.masked" } AppendAuFichier [Fiches]/qds.log "onsort2" return "" } proc res35 {} { #array set Mbl [InitClustalMatrix blosum62 0 1.] #array set Mbl [OriginalDayhoff] array set Mbl [InitClustalMatrix pam250 1 1.] set laa {A C D E F G H I K L M N P Q R S T V W Y} # make a positive matrix array unset Mbl laa array unset Mbl min array unset Mbl max set min [lindex [lsort -real -stride 2 -index 1 [array get Mbl]] 1] if {$min < 0.0} { puts "min = $min : Make positive matrix" foreach k [array names Mbl "*,*"] { set Mbl($k) [expr {$Mbl($k) - $min}] } } # A B C D # A 5 1 -2 -3 # B 4 0 1 # C 6 4 # D 5 # AA AB AC AD , CA CB CC CD # AA AB AC AD , AC BC CC CD set ia 0 foreach a1 [lrange $laa 0 end] { foreach a2 [lrange $laa 0 end] { set sum 0.0 foreach x $laa { set sum [expr {$sum + $Mbl($x,$a2)}] set sum [expr {$sum + $Mbl($a1,$x)}] } #set sum [expr {$sum - $Mbl($a1,$a1) - $Mbl($a2,$a2)}] #set sum [expr {$sum - 2. * $Mbl($a1,$a2)}] set sum [expr {$Mbl($a1,$a2)/$sum}] set T($a1,$a2) $sum #set T($a2,$a1) $sum } incr ia } #parray T #exit set nv 0 ; set sT 0.0 ; set sT2 0.0 set ia 0 foreach a [lrange $laa 0 end] { foreach b [lrange $laa $ia end] { if {1 && $a eq $b} { continue } set sT [expr {$sT + $T($a,$b)}] set sT2 [expr {$sT2 + $T($a,$b)**2}] incr nv } #incr ia } #incr nv -1 set sT [expr {$sT/2.}] set sT2 [expr {$sT2/2.}] set nv [expr {$nv/2.}] set moy [expr {$sT / $nv}] set sd [expr {sqrt($sT2/$nv - $moy*$moy)}] set min 999. ; set max -999. foreach a $laa { foreach b $laa { set T($a,$b) [expr {($T($a,$b) - $moy)/$sd}] if {$T($a,$b) < $min} { set min $T($a,$b) } if {$T($a,$b) > $max} { set max $T($a,$b) } } } puts "" #parray T #array set pam35 [InitPAM35] array set pam35 [InitPAM15] foreach aa {W G} { set s1 "$aa " ; set s2 "$aa " ; set s3 "$aa " foreach a $laa { append s1 [format "%5.2f " $Mbl($aa,$a)] append s2 [format "%5.2f " $T($aa,$a)] append s3 [format "%5.2f " $pam35($aa,$a)] } puts "origine" puts $s1 puts "modifie" puts $s2 puts "pam35" puts $s3 } puts "" diffMat pam35 T puts "" exit } proc retournerIsoformes {FichierEntree FichierSortie Log Rapport {FichierId ""}} { set data {} set Liste [lireFichierIds $FichierId] set groupes [grouperHitsParTaxid [parserFichierBlast $FichierEntree $Liste]] dict for {taxid g} $groupes { if {$taxid eq "unknown"} { set sousGroupes [list $g] set listeSS [list $g] } else { set listeSS {} set sousGroupes [grouperIsoformesScore $g estIsoformeFenetre Subj] foreach sg $sousGroupes { set sg [triHitsParNbTirets $sg Subj] lappend listeSS $sg } } dict set data $taxid $listeSS } ecrireLogIsoforme $Log $data ecrireListeIsoforme $FichierSortie $data ecrireRapportIsoforme $Rapport $data return } proc retournerIsoformesParallele {FichierEntree FichierSortie Log Rapport {FichierId ""}} { set data {} set Liste [lireFichierIds $FichierId] set groupes [grouperHitsParTaxid [parserFichierBlast $FichierEntree $Liste]] package require Thread set initscript {global GscopeDir; set GscopeDir /home/ripp/gscope; global RepertoireDuGenome ; set RepertoireDuGenome "/genomics/link/Zero"; #source /home/ripp/gscope/gscope_source.tcl source /home/kress/sandbox/gscope_isoforme.tcl #PourWscope 1 #InteractiveMode Off proc grouperIsoformesThread {taxid} { set debut [clock seconds] set g {} set hits [tsv::pop groups $taxid] foreach h $hits { lappend g [::hit new $h] } if {$taxid eq "unknown"} { set sousGroupes [list $g] set listeSS [list $g] } else { set listeSS {} set sousGroupes [grouperIsoformesScore $g estIsoformeFenetre Subj] foreach sg $sousGroupes { set sg [triHitsParNbTirets $sg Subj] lappend listeSS $sg } } set res {} foreach sg $listeSS { set tmp {} foreach h $sg { lappend tmp [$h serialize] } lappend res $tmp } #puts "End $taxid ([expr [clock seconds]-$debut]s), [llength $hits] sequences" return $res } } set nthreads [coeursDispos 1 [dict size $groupes]] set tp [tpool::create -minworkers $nthreads -initcmd $initscript] set nb 0 set total 0 dict for {taxid g} $groupes { set len [llength $g] if {$len > 1} { incr nb incr total $len } } puts "$total sequences in [dict size $groupes] groups" set idToTaxid [dict create] set jobs {} set data [dict create] dict for {taxid g} $groupes { if {[llength $g]==1} { dict set data $taxid [list [list $g]] continue } elseif {$taxid eq "unknown"} { dict set data $taxid $g continue } set hits {} foreach h $g { lappend hits [$h serialize] } tsv::set groups $taxid $hits set id [tpool::post -nowait $tp "grouperIsoformesThread $taxid"] dict set idToTaxid $id $taxid lappend jobs $id } while {[llength $jobs]>0} { foreach id [tpool::wait $tp $jobs jobs] { set serial [tpool::get $tp $id] set listeSS {} foreach sg $serial { set tmp {} foreach h $sg { lappend tmp [::hit new $h] } lappend listeSS $tmp } dict set data [dict get $idToTaxid $id] $listeSS } } ecrireLogIsoforme $Log $data ecrireListeIsoforme $FichierSortie $data ecrireRapportIsoforme $Rapport $data puts "Done" return } proc rgbToHsv {red green blue} { if {$red > $green} { set max $red.0 set min $green.0 } else { set max $green.0 set min $red.0 } if {$blue > $max} { set max $blue.0 } else { if {$blue < $min} { set min $blue.0 } } set range [expr $max-$min] if {$max == 0} { set sat 0 } else { set sat [expr {($max-$min)/$max}] } if {$sat == 0} { set hue 0 } else { set rc [expr {($max - $red)/$range}] set gc [expr {($max - $green)/$range}] set bc [expr {($max - $blue)/$range}] if {$red == $max} { set hue [expr {.166667*($bc - $gc)}] } else { if {$green == $max} { set hue [expr {.166667*(2 + $rc - $bc)}] } else { set hue [expr {.166667*(4 + $gc - $rc)}] } } if {$hue < 0.0} { set hue [expr $hue + 1.0] } } return [list $hue $sat [expr {$max/65535}]] } proc rpw {} { package require Expect if {$::tcl_platform(platform) eq "windows"} { set Rexe [file join c:/ PROGRA~1 R R-2.15.2 bin i386 Rterm.exe] } else { set Rexe "/biolo/R_surf/R-2.15.2/lib64/R/bin/R" } spawn $Rexe --vanilla expect -re "\>" { exp_send_user "on a prompt !" exp_send "# TURLUTUTU" puts "rep = $expect_out(buffer)" } eof { exp_send_user "eof !" break } return } proc rrQuelMask {Nom {Color ""}} { global RepertoireDuGenome global CouleurDuFond set Color [string equal -nocase $Color "ColorPlease"] set FichierTFA "$RepertoireDuGenome/nuctfa/$Nom" set FichierMAS "$RepertoireDuGenome/nucmask/$Nom" set CouleurDuMask(NoSequenceToMask) "white" set CouleurDuMask(NoMaskFile) "grey" set CouleurDuMask(NoRepeatToMask) "green" set CouleurDuMask(PartiallyMasked) "orange" set CouleurDuMask(TotallyMasked) "red" if { ! [file exists $FichierMAS]} { set Annotation "NoMaskFile" if {$Color} { return [set CouleurDuMask($Annotation)] } else { return $Annotation } } set LeTFA [LesLignesDuFichier $FichierTFA] set TFA [join [lrange $LeTFA 1 end] ""] set LeMAS [LesLignesDuFichier $FichierMAS] set Entete [lindex $LeMAS 0] set Annotation "" scan $Entete "%s %s" NomLu Annotation if {[regexp "NoSequenceToMask|NoRepeatToMask|TotallyMasked|PartiallyMasked" $Annotation]} { if {$Color} { return [set CouleurDuMask($Annotation)] } else { return $Annotation } } set ToutMAS [join [lrange $LeMAS 0 end] "\n"] set MAS [join [lrange $LeMAS 1 end] ""] if {[string equal $TFA $MAS]} { set Annotation "NoRepeatToMask" } else { set LongueurInitiale [string length $TFA] if {$LongueurInitiale==0} { set Annotation NoSequenceToMask } else { set SeuilPourcentage 90 regsub -all -nocase "N" $MAS "" SeqMaskSansN regsub -all -nocase "N" $TFA "" SeqSansN set LongSeqMaskSansN [string length $SeqMaskSansN] set LongSeqSansN [string length $SeqSansN] set NbNuclMasques [expr $LongSeqSansN-$LongSeqMaskSansN] set PourcentageMasque [expr $NbNuclMasques*100/$LongueurInitiale] if {[expr $PourcentageMasque>$SeuilPourcentage]} { set Annotation "TotallyMasked" } else { set Annotation "PartiallyMasked" } } } regsub ">$Nom " $ToutMAS ">$Nom $Annotation " ToutMAS Sauve $ToutMAS dans $FichierMAS if {$Color} { return [set CouleurDuMask($Annotation)] } else { return $Annotation } } proc rrps {{orga yeast} {userid ""}} { global TInf taxid organism PourWscope 1 SetupRRPSOrga $orga # PreTraite homo.ids set Linterdit [list 1B7X] if {$userid ne ""} { set Lpdbid $userid } else { set Lpdbid [PDBQuery -organism $taxid -experiment x-ray -identity 70] puts "[join $Lpdbid \n]" } set Lok [list] puts "Nombre IDs : [llength $Lpdbid]\n" foreach pdbid $Lpdbid { if {[string trim $pdbid] eq ""} { puts "VIDE >$pdbid<\n" continue } set aTInf [rrps_traitement $pdbid] array set TInf $aTInf set ok 0 foreach k [array names TInf *,ok] { # une chaine ok -> bon pdb if {$TInf($k)} { set ok 1 break } } if {$ok} { BilanProt $pdbid } puts "PDB ok : $ok" puts "\n\n" lappend Lok $pdbid } puts "Lok [llength $Lok]" puts "[DonneDateEtHeure]" #exit } proc rrpsDir {} { return "/home/moumou/rrps" } proc rrps_InitDB {} { global dbR package require sqlite3 set tables " - items { . pk_items P . pdbid V4 . chain V1 . length I . taxid I . accession V16 . bid V16 . gbid T . rsid T . offset I . seqpdb T . seqpdbal T . seqresori T . seqres T . seqresal T . sequnpori T . sequnp T . sequnpal T . seqadn T . seqpdn T . binhe T . binsh T . bintu T . seqrsa T . seqnac T . ssi T . seqssi T } - secstr { . pk_secstr P . pk_items I . type V6 helix sheet turn . start I . stop I . length I } " set dbR [FabriqueDeTables $tables "" rrps.sql] $dbR eval {create index idx_items on items (pdbid,chain,taxid,accession,bid)} $dbR eval {create index idx_secstr on secstr(type,length)} return $dbR } proc rrps_Liste {} { set Lf [glob kmdpc/sel*_50..acc] set Lid [list] foreach f $Lf { lappend Lid {*}[LesLignesDuFichier $f] } set embl [DbFetchGET uniprotkb $Lid] set Lembl [SplitLesEMBL $embl] set o [open "ListeACC.txt" w] foreach embl $Lembl { DecortiqueLesLignesEMBL $embl ID AC DE GN OS OC OX puts $o "$AC $ID $GN $DE" } return } proc rrps_TCree {} { set GscopeDir $env(GSCOPEDIR) set OrdaliDejaSource 1 source [file join $GscopeDir gscope_source.tcl] set OrdaliDir $env(ORDALIDIR) set OrdaliDejaSource 0 source [file join $OrdaliDir src ordali_source.tcl] package require Thread package require http #LoadTclPackages package require tclcluspack #package require tclordalie package require sqlite3 #set VariablesAuDepart [info globals] InitLesDefauts LesDefauts OnlyTLog 1 LesDefauts Mode batch set ::OuiOuNonToujoursParDefaut 1 PourWscope 1 } proc rrps_TExe {pdbid} { set res [rrps_traitement $pdbid] return $res } proc rrps_TResults {pktest pdbid Lval} { global dbR if {$Lval == {} } { puts "PDB ok : 0" return [list] } array set TInf $Lval set ok 0 foreach c [set TInf($pdbid,LChains)] { if {! $TInf($pdbid,$c,ok)} { continue } set ok 1 set lgt $TInf($pdbid,$c,length) set acc $TInf($pdbid,$c,up_acc) set bid $TInf($pdbid,$c,up_bid) set gbid $TInf($pdbid,$c,gb_acc) set rsid $TInf($pdbid,$c,rs_acc) set offset $TInf($pdbid,$c,offset) set seqpdb $TInf($pdbid,$c,seqpdb) set seqpdbal $TInf($pdbid,$c,seqpdbal) set seqresori $TInf($pdbid,$c,seqresori) set seqres $TInf($pdbid,$c,seqres) set seqresal $TInf($pdbid,$c,seqresal) set sequnp $TInf($pdbid,$c,sequnp) set sequnpal $TInf($pdbid,$c,sequnpal) set sequnpori $TInf($pdbid,$c,sequnpori) set seqadn $TInf($pdbid,$c,seqadn) set seqpdn $TInf($pdbid,$c,seqpdn) set binhe $TInf($pdbid,$c,bin_he) set binsh $TInf($pdbid,$c,bin_sh) set bintu $TInf($pdbid,$c,bin_tu) set seqrsa $TInf($pdbid,$c,seqrsa) set seqnac $TInf($pdbid,$c,seqnac) set ssi $TInf($pdbid,$c,SSi) set sss $TInf($pdbid,$c,sSS) $dbR eval {insert into items values (NULL,$pdbid,$c,$lgt,$::taxid,$acc,$bid,$gbid,$rsid,$offset,$seqpdb,$seqpdbal,$seqresori,$seqres,$seqresal,$sequnpori,$sequnp,$sequnpal,$seqadn,$seqpdn,$binhe,$binsh,$bintu,$seqrsa,$seqnac,$ssi,$sss)} set pki [$dbR last_insert_rowid] # record sec. str. foreach ss $TInf($pdbid,$c,secstr) { lassign $ss type tmp tmp chn dep tmp fin tmp tmp set lgt [expr {$fin - $dep + 1}] $dbR eval {insert into secstr values (NULL,$pki,$type,$dep,$fin,$lgt)} } } if {$ok} { BilanProt $pdbid $Lval } puts "PDB ok : $ok" return [list] } proc rrps_ana_hub {{thr ""} {orga yeast}} { global traiteglobal taxid organism classes_default classes ThresholdRSA SetupRRPSOrga $orga if {$thr eq ""} { set ThresholdRSA 70. } else { set ThresholdRSA $thr } set classes_default {expose buried} set classes {expose buried} set traiteglobal 0 #rrps_analyse "hubert" #ClusteringRRPS hie sec CreeSummary #StatsCdn #OutputData #OutputListeACC #HistoLongueur return } proc rrps_ana_struc {{orga yeast}} { global traiteglobal taxid organism classes_default classes ThrHelix VariablesAuDepart nbCodon nbCodOK set ::typeAnalyse "structure" SetupRRPSOrga $orga set nbCodon 0 set nbCodOK 0 set classes_default {helix sheet turn coil} set classes {helix coil} #set classes {turn coil} set traiteglobal 0 # 1BFT : error needleman wunsch dans comparaison # seqres uniprot #set LThrHelix [list 3 4 5] set LThrHelix 5 set acides "ACDEFGHIKLMNPQRSTVWY" set emax -1.0 ; set amax "" set ::DeleteDone 0 set VariablesAuDepart [info globals] foreach ThrHelix $LThrHelix { rrps_analyse "structure" global {*}[info globals "Wobble_*"] update foreach aa [split $acides ""] { if {$aa eq "W"} {continue} # recup codons set Lcds [list] foreach k [array names Wobble_${aa}] { lassign [split $k ,] cd tmp lappend Lcds $cd } set Lcds [lsort -unique $Lcds] if {[llength $Lcds] == 1} {continue} set i 1 foreach c1 [lrange $Lcds 0 end-1] { foreach c2 [lrange $Lcds $i end] { set dc [expr {abs([set Wobble_pourcentC_${aa}($c1,coil)] - [set Wobble_pourcentC_${aa}($c2,coil)])}] puts "$c1 $c2 $dc" if {$dc > $emax} { set emax $dc set amax $aa set dmax "$c1-$c2" } } incr i } } ClusteringRRPS mm aic DetruitVariablesSaufDepart update } puts "emax $emax" puts "amax $amax" puts "dmax $dmax" puts "" puts "nbCodon $nbCodon" puts "nbCodOK $nbCodOK" return } proc rrps_analyse {typeAnalyse} { global traiteglobal taxid organism classes_default classes set db [rrps_setup] $db eval {begin transaction} InitGeneticCode InitialisationResultats InitialisationTableaux InitialisationWobble global {*}[info globals Acide_*] {*}[info globals Wobble_*] dcdn set LongueurMin 200 set Lacc [$db eval {select distinct accession from items where taxid=$taxid}] puts "Nbr accessions uniques : [llength $Lacc]" set o [open ${organism}.acc w] puts $o [join $Lacc \n] close $o set Lpk [list] foreach acc $Lacc { set Lpseq [$db eval {select pk_items,seqpdbal from items where accession=$acc}] set Lpl [list] foreach {pk seq} $Lpseq { set seq [string map {- "" X "" 0 ""} $seq] lappend Lpl $pk [string length $seq] } set Lpl [lsort -stride 2 -index 1 -integer $Lpl] if {[lindex $Lpl end] >= $LongueurMin} { lappend Lpk [lindex $Lpl end-1] } #lappend Lpk [$db eval {select pk_items from items where accession=$acc and length > 100 order by length DESC limit 1}] } puts "Longueur minimale : $LongueurMin" puts "Nbr chains >= $LongueurMin : [llength $Lpk]" # database de resultats pour clustering set dcdn "cdn" file delete wobble.sql # cree table pour tous les codons # valeurs butes pour toutes prot set table "" global {*}[info globals Wobble*] puts "\nDefinit codons :" foreach aa [lsort [array names Wobble]] { if {[llength $Wobble($aa)] < 2} { continue } puts "$aa [llength $Wobble($aa)]" append table " - ${aa}_AA : { . pk_items I " foreach scdn $Wobble($aa) { set Lsc [split $scdn " "] set cdn [lindex $Lsc 0] puts "\t$cdn | {*}[lrange $Lsc 1 end]" foreach cl [lsort $classes] { append table " . ${aa}_${cdn}_$cl R \n" } } append table " } \n" } puts "" FabriqueDeTables $table $dcdn wobble.sql # setup specific options switch $typeAnalyse { "hubert" { global SA ThresholdRSA set strRSA "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx" set req "pdbid,chain,seqpdb,sequnp,seqadn,offset,seqrsa,seqnac,seqpdbal,seqssi" set lass [list pdbid chn seqpdb sequnp seqadn offset seqrsa seqnac seqpdbal seqssi] } "structure" { global ThrHelix if {! [info exists ThrHelix]} { set ThrHelix 5 } set req "pdbid,chain,seqpdb,seqres,sequnp,seqadn,offset,binhe,binsh,bintu,ssi,seqssi,seqpdbal,seqresal,sequnpal" set lass [list pdbid chn seqpdb seqres sequnp seqadn offset binhe binsh bintu Lssi seqssi seqpdbal seqresal sequnpal] } } # boucle sur toutes les structures foreach pk $Lpk { set Lv [$db eval "select $req from items where pk_items=$pk"] lassign $Lv {*}$lass set sdegap [string map {X "" - "" 0 ""} $seqpdbal] set lgt [string length $sdegap] puts "\nPDB $pdbid $chn | $lgt" set seqpdn [SeqNucToSeqPro $seqadn] set Lseqpdbal [split $seqpdbal ""] set Lseqpdn [split $seqpdn ""] set Lseqssi [split $seqssi ""] # split seqadn en codon set Lseqadn [list] for {set i 0} {$i < [string length $seqadn]} {incr i 3} { lappend Lseqadn [string range $seqadn $i $i+2] } # longueur totale = long pdb set lgt [llength $Lseqpdbal] set Lseqadn [lrange $Lseqadn 0 $lgt-1] set Lseqpdn [lrange $Lseqpdn 0 $lgt-1] switch $typeAnalyse { "structure" { if {$seqssi eq ""} { puts "Pas de SSi !" continue } set binhe [string repeat "0" $lgt] set binsh [string repeat "0" $lgt] set bintu [string repeat "0" $lgt] set Lssi [split $seqssi ""] # type de SS dans Stride : # 310Helix AlphaHelix Disulfide GammaClassic # GammaInv PiHelix Strand TurnI TurnI' TurnII # TurnII' TurnIV TurnVIII TurnVIa TurnVIb set i 0 foreach ss $Lssi { switch $ss { "H" - "G" - "I" { set binhe [string replace $binhe $i $i 1] } "E" { set binsh [string replace $binsh $i $i 1] } "T" { set bintu [string replace $bintu $i $i 1] } } incr i } set binhe [FiltreHelix $binhe] set Lbinhe [split $binhe ""] set Lbinsh [split $binsh ""] set Lbintu [split $bintu ""] #CodonsDeProt init InitialisationTableauxPourProt set i -1 puts "lgt $lgt spdbal [llength $Lseqpdbal] sadn [llength $Lseqadn] sbhe [llength $Lbinhe] spdn [llength $Lseqpdn]" foreach a $Lseqpdbal cdn $Lseqadn ih $Lbinhe is $Lbinsh it $Lbintu t $Lseqpdn { incr ::nbCodon incr i if {$a eq "" || $cdn eq "" || $t eq ""} { puts "END [format %3d $i] pdbal $a cg $cdn pdn $t" break } puts "[format %3d $i] pdbal $a cg [set ::CodeGen($cdn)] pdn $t" # gap dans pdb if {$a eq "-" || $a eq "X" || $t eq "X"} { continue } if {$ih} { set classe helix } elseif {$is} { set classe sheet } elseif {$it} { set classe turn } else { set classe coil } # aa pdb != aa traduit if {$a ne "X" && $a ne "0" && $a ne $t} { puts "$a != >$t< ..." continue } #puts "ok $a $cdn $classe" incr ::nbCodOK incr Acide_${a}($cdn,$classe) incr ::Aprot_${a}($cdn,$classe) incr ::Nbr$aa } # sauve codons pour prot courante #CodonsDeProt sauve $pk RegroupementWobblePourProt SauveWobblePourProt $pk } "hubert" { InitialisationTableauxPourProt #if {$seqrsa eq ""} { # continue #} #set Lseqrsa [split $seqrsa ""] if {$seqnac eq ""} { continue } set Lseqrsa [split $seqnac ""] set i -1 foreach a $Lseqpdbal cdn $Lseqadn rsa $Lseqrsa t $Lseqpdn { incr ::nbCodon incr i if {$a eq "" || $cdn eq "" || $t eq ""} { puts "END [format %3d $i] pdbal $a cg $cdn pdn $t" break } #puts "[format %3d $i] pdbal $a cg [set ::CodeGen($cdn)] pdn $t" # gap dans pdb if {$a eq "-" || $a eq "X" || $t eq "X" || $rsa eq ""} { continue } # aa pdb != aa traduit if {$a ne "X" && $a ne "0" && $a ne $t} { puts "$a != >$t< ..." continue } set val [expr {2.*([string first $rsa $strRSA]+1)}] #puts ">$a< $rsa $val" if {$val >= $ThresholdRSA} { set classe expose } else { set classe buried } #puts "ok $a $cdn $classe" incr ::nbCodOK incr Acide_${a}($cdn,$classe) incr ::Aprot_${a}($cdn,$classe) incr ::Nbr$aa } # sauve codons pour prot courante #CodonsDeProt sauve $pk RegroupementWobblePourProt SauveWobblePourProt $pk } } } $db eval {commit} $db close puts "Statistic globales :" foreach a [lsort [info globals Acide_*]] { parray $a puts "" } RegroupementWobble puts "WOBBLE global :" foreach w [lsort [info globals Wobble_*]] { global $w if {! [info exists $w]} { continue } #parray $w foreach {a b} [lsort [array names $w]] { if {! [info exists ${w}($a)] || ! [info exists ${w}($b)]} { continue } puts "${w}($a) = [set ${w}($a)]" puts "${w}($b) = [set ${w}($b)]" puts " [expr {abs([set ${w}($a)]-[set ${w}($b)])}]" } puts "" } if {$typeAnalyse eq "structure"} { $dcdn close } #exit return } proc rrps_optihub {{orga yeast}} { global VariablesAuDepart set Acides "ACDEFGHIKLMNPQRSTVWY" set Lacides [split $Acides ""] set Lclasses {buried expose} set ::typeAnalyse "hubert" set ::DeleteDone 0 set VariablesAuDepart [info globals] set dmax -1. ; set aamax "" ; set thrmax 0.0 set emax -1. ; set eamax "" ; set ehrmax 0.0 set Lthr [list 30. 40. 50. 60. 70. 80.] #set Lthr [list 50.] foreach thr $Lthr { puts "\n\nTHRESHOLD : $thr" puts "---------------\n" rrps_ana_hub $thr $orga DetruitVariablesSaufDepart update } return } proc rrps_setup {{args yeast}} { global dbR SetupRRPSOrga $args set dbR "root" if {! [file exists rrps.sql]} { set dbR [rrps_InitDB] } else { sqlite3 $dbR rrps.sql } return $dbR } proc rrps_traitement {pdbid} { set pdbid [string range $pdbid 0 3] unset -nocomplain ::TInf update puts "=> $pdbid :" puts "----------" set ok [TraitePdbId $pdbid] if {! $ok} { puts "pdb traitement failed" if {[info commands $pdbid] ne ""} { $pdbid destroy update } return {} } set ok [TraiteUniProtId $pdbid] # on n'en a plus besoin if {[info commands $pdbid] ne ""} { $pdbid destroy update } if {! $ok} { puts "uniprot traitement failed" return {} } set ok [TraiteGenBankId $pdbid] if {! $ok} { puts "genbank traitement failed" return {} } # on doit re-aligner seqrsa, seqnacc, et seqstr PolishSequences return [array get ::TInf] } proc rrpsthr {args} { global dbR taxid organism PourWscope 1 set dbR [rrps_setup $args] #set Lpdbid [LesLignesDuFichier $organism.ids_ok] set Lpdbid [PDBQuery -organism $taxid -experiment x-ray] puts "Initial PDB list : [llength $Lpdbid]" set Ljobs [list] set Linterdit [list 1B7X] foreach id $Lpdbid { if {$id in $Linterdit || $id eq ""} { continue } lappend Ljobs [list $id [list $id]] } set bCree [info body ::rrps_TCree] append bCree "global organism OrgaScientific taxid\n" append bCree "set organism $::organism\n" append bCree "set OrgaScientific $::OrgaScientific\n" append bCree "set taxid $::taxid\n" proc ::rrps_TCree {} $bCree Thr_Submit -joblist $Ljobs -proccreate rrps_TCree -procexe rrps_TExe -procresults rrps_TResults $dbR close exit } proc rrpstst {} { package require sqlite3 set dbR rootR sqlite3 $dbR rrps.sql set pk 7165 set Lv [$dbR eval {select * from items where pk_items=$pk}] lassign $Lv pk pdbid chn lgt taxid acc bid gbid rsid seqpdb sequnp seqadn binhe binsh bintu puts "$pdbid $chn $lgt" puts "$acc $bid" puts "" puts "pdb [string length $seqpdb]" set seqpdn [SeqNucToSeqPro $seqadn] puts "unp [string length $sequnp]" puts "adn [string length $seqpdn]" puts "" puts "pdb [string range $seqpdb 0 50]" puts "unp [string range $sequnp 0 50]" puts "adn [string range $seqpdn 0 50]" puts "" puts "pdb [string range $seqpdb 50 end]" puts "unp [string range $sequnp 50 end]" puts "adn [string range $seqpdn 50 end]" exit } proc rspf {} { LitLeTFA bactos_rna.tfa Lr Sr puts "seq. rna. test : [string length [set Sr([lindex $Lr 0])]]" LitLeTFA bactos_prot.tfa Lp Sp puts "seq. rna. prot : [string length [set Sp([lindex $Lp 0])]]" set Ll [LesLignesDuFichier bactos.neg] set f [open bactos.feat w] foreach thr [list 0.1 0.0001 0.0000001 0.0000000001] tag [list 0,1 10e-4 10e-7 10e-10] { puts $f "FEATURE dNdS-$tag" foreach r $Lr p $Lp { foreach l $Ll { set l [string map [list "\t" " "] $l] regsub -all { +} $l " " l if {[string trim $l] eq ""} {continue} set Lv [split $l " "] set x [lindex $Lv 0] set pval [lindex $Lv end] if {$pval <= $thr} { puts $f "$p;GLOBAL;$x;$x;green;0.0;$pval" } } } } close $f exit } proc runLengthCount {intList} { set count 0 set start 0 set previousValue [lindex $intList 0] for {set i 1} {$i < [llength $intList]} {incr i} { if { [lindex $intList $i] != $previousValue } { incr count set returned($count,start) $start set returned($count,stop) [expr $i - 1] set returned($count,value) $previousValue set start $i set previousValue [lindex $intList $i] } if { $i == [expr [llength $intList] - 1] } { incr count set returned($count,start) $start set returned($count,stop) $i set returned($count,value) $previousValue } } set returned(count) $count return [array get returned] } proc sE {} { global TabSF SM_KillFeat array unset TabSF "PDB_2dxi_A,Discri" global db set del "1 20920 371 371 R/K 0 20921 372 372 R/K 1 20922 377 377 S 0 20923 378 378 S 1 20924 392 392 F/Y 0 20925 393 393 F/Y 1 20926 420 420 D 0 20927 421 421 D 1 20928 444 444 W 0 20929 446 446 W 1 20930 452 452 E 1 20931 453 472 indel_yes 0 20932 454 473 indel_yes 1 20933 472 472 ~G 1 20934 473 473 P 0 20935 474 474 P 1 20936 476 476 Q 0 20937 477 477 Q 1 20938 483 483 Y 0 20939 484 484 Y 1 20940 499 499 C_(~C) 1 20941 500 500 Y/F 0 20942 501 501 Y/F 1 20943 517 663 indel_type1 0 20944 527 665 indel_type1 1 20945 675 675 D 0 20946 676 676 D 1 20947 687 687 G/A 0 20948 688 688 G/A 1 20949 733 737 KLSKR 0 20950 734 738 KLSKR" set del "0 11111 445 445 W" foreach e [split $del \n] { set e [string trim $e] if {$e eq ""} {continue} lassign [split $e " "] i pk d f n if {$i} { lappend Lgrd $pk } else { lappend Ldel [list $d $f $n] } } set g [set ::GroupeDeLaSequence(PDB_2dxi_A)] puts "PDB_2dxi_A $g" foreach nm [set ::SDG($g)] { set Lpk [list] set pkf [lindex [$db eval {select pk_seqinfo from seqinfo where access=$nm}] end] puts "nm= $nm $pkf" foreach e $Ldel { lassign $e d f n if {! [regexp {^PDB\_} $nm]} { incr d -1 incr f -1 set res [$db eval {select fi.pk_featali from featali as fi, seqali as si, ln_seqali_featali as ln where si.pk_seqinfo=$pkf and ln.pk_seqali=si.pk_seqali and fi.pk_featali=ln.pk_featali and fi.ftype='Discri' and fi.fstart=$d and fi.fstop=$f and fi.fnote=$n}] if {$res != {}} { lappend Lpk $res } } else { puts "EST UN PDB" set res [$db eval {select fi.pk_featali from featali as fi, seqali as si, ln_seqali_featali as ln where si.pk_seqinfo=$pkf and ln.pk_seqali=si.pk_seqali and fi.pk_featali=ln.pk_featali and fi.ftype='Discri' and fi.fnote=$n}] puts "res= $res" lappend Lpk {*}$res } } set Lpk [lsort -unique $Lpk] if {$Lpk == {} } {continue} puts "Lpk= $Lpk" $db eval "delete from featali where pk_featali in ([join $Lpk ,])" $db eval "delete from ln_seqali_featali where pk_featali in ([join $Lpk ,])" } exit return } proc scoreNormAgents {s1 s2} { global Rosace Wg InitialiseRosace set score 0.0 set i 0 set lg [string length $s1] foreach c1 [split $s1 ""] c2 [split $s2 ""] { lassign [set Rosace($c1)] x1 y1 lassign [set Rosace($c2)] x2 y2 set xVp [expr {$x1 + $x2}] set yVp [expr {$y1 + $y2}] set sn [expr {[set Rosace(Norm$c1)] + [set Rosace(Norm$c2)]}] # norme vecteur resultant set nVp [expr {sqrt($xVp**2 + $yVp**2)}] set norm [expr {$nVp/$sn}] set score [expr {$score + $Wg($lg,$i) * $norm}] incr i } set score [expr {$score / $Wg($lg)}] return $score } proc scrollTxt {t args} { $Vrp(WText) xview {*}$args return } proc send_simple_message {recipient email_server subject body {originator ""}} { package require smtp package require mime set token [mime::initialize -canonical "text/plain" -string $body] mime::setheader $token Subject $subject set Lopt [list -recipients $recipient -servers $email_server] if {$originator ne ""} { lappend Lopt -originator $originator } smtp::sendmessage $token {*}$Lopt mime::finalize $token return } proc seqPos2AlnPos {seq pos} { set len [string length $seq] set seqPos 0 for {set i 0} {$i < $len} {incr i} { if {[regexp -nocase {[^.-]} [string index $seq $i]]} { incr seqPos } if {$seqPos == $pos} { return [expr $i + 1] } } return "" } proc sequenceToAlignmentIndex {alignedSequence} { array set index {} for {set i 0; set counter 0; set length [string length $alignedSequence]} {$i < $length} {incr i} { if {[regexp -nocase {[a-z]} [string index $alignedSequence $i]]} { incr counter set index($counter) [expr $i + 1] } } return [array get index] } proc setLCD {} { # The shapes of individual elements of a digit global lcdshape global lcdelems array set lcdshape { a {3.0 5 5.2 3 7.0 5 6.0 15 3.8 17 2.0 15} b {6.3 2 8.5 0 18.5 0 20.3 2 18.1 4 8.1 4} c {19.0 5 21.2 3 23.0 5 22.0 15 19.8 17 18.0 15} d {17.4 21 19.6 19 21.4 21 20.4 31 18.2 33 16.4 31} e {3.1 34 5.3 32 15.3 32 17.1 34 14.9 36 4.9 36} f {1.4 21 3.6 19 5.4 21 4.4 31 2.2 33 0.4 31} g {4.7 18 6.9 16 16.9 16 18.7 18 16.5 20 6.5 20} } # Which elements are turned on/off for a given digit? foreach {digit onElems offElems} { 0 {a b c d e f} {g} 1 {c d} {a b e f g} 2 {b c e f g} {a d} 3 {b c d e g} {a f} 4 {a c d g} {b e f} 5 {a b d e g} {c f} 6 {a b d e f g} {c} 7 {b c d} {a e f g} 8 {a b c d e f g} {} 9 {a b c d e g} {f} - {g} {a b c d e f} { } {} {a b c d e f g} } { set lcdelems(on-$digit) $onElems set lcdelems(off-$digit) $offElems } } proc setTooltip {widget text} { if { $text != "" } { # 2) Adjusted timings and added key and button bindings. These seem to # make artifacts tolerably rare. bind $widget [list after 500 [list showTooltip %W $text]] bind $widget [list after 500 [list destroy %W.tooltip]] bind $widget [list after 500 [list destroy %W.tooltip]] bind $widget [list after 500 [list destroy %W.tooltip]] } } proc set_balloon {target message} { global Bulle if {! [info exists Bulle]} {BindBulle} set Bulle($target) $message bindtags $target "[bindtags $target] Bulle" } proc showLCD {w num {width 5} {colours "#ff0000 #ff0000 #000000 #000000"}} { global lcdshape global lcdelems set lcdoffset 0 $w delete lcd lassign $colours onRim onFill offRim offFill lassign [split $num "-"] H M S foreach e {H M S} { foreach glyph [split [set $e] {}] { foreach symbol $lcdelems(on-$glyph) { $w move [eval $w create polygon $lcdshape($symbol) -tags lcd -outline $onRim -fill $onFill] $lcdoffset 0 } incr lcdoffset 22 } if {$e eq "S"} {continue} $w create oval [list [expr {$lcdoffset+ 5}] 23 [expr {$lcdoffset+11}] 29] -fill red $w create oval [list [expr {$lcdoffset+ 8}] 8 [expr {$lcdoffset+14}] 14] -fill red incr lcdoffset 22 } } proc showStatus {frm index} { global tk_library set tags [$frm tag names $index] set i [lsearch -glob $tags help-*] set cursor [$frm cget -cursor] if {$i < 0} { .help.statusBar.lab config -text " " set newcursor xterm } else { set demo [string range [lindex $tags $i] 5 end] .help.statusBar.lab config -text "load the \"$demo\" help page" set newcursor hand2 } if [string compare $cursor $newcursor] { $frm config -cursor $newcursor } } proc showTooltip {widget text} { global tcl_platform if { [string match $widget* [winfo containing [winfo pointerx .] [winfo pointery .]] ] == 0 } { return } catch { destroy $widget.tooltip } set scrh [winfo screenheight $widget] ; # 1) flashing window fix set scrw [winfo screenwidth $widget] ; # 1) flashing window fix set tooltip [toplevel $widget.tooltip -bd 1 -bg black] wm geometry $tooltip +$scrh+$scrw ; # 1) flashing window fix wm overrideredirect $tooltip 1 if {$tcl_platform(platform) == {windows}} { # 3) wm attributes... wm attributes $tooltip -topmost 1 # 3) assumes... } # 3) Windows pack [label $tooltip.label -bg lightyellow -fg black -text $text -justify left] set width [winfo reqwidth $tooltip.label] set height [winfo reqheight $tooltip.label] set positionX [winfo pointerx .] set positionY [expr [winfo pointery .] + 25] # a.) Ad-hockery: Set positionX so the entire tooltip widget will be displayed. if {[expr $positionX + $width] > [winfo screenwidth .]} { set positionX [expr ($positionX - (($positionX + $width) - [winfo screenwidth .]))] } wm geometry $tooltip [join "$width x $height + $positionX + $positionY" {}] raise $tooltip # 2) Kludge: defeat rare artifact by passing mouse over a tooltip to destroy it. bind $widget.tooltip {destroy %W} bind $widget.tooltip {destroy %W} } proc singleProc {} { foreach p [info procs] { if {$p in $::ProcsAuDepart} {continue} set res [exec moueo $p | wc] set res [lindex [split [string trim $res] " "] 0] if {$res == 1} { lappend Ls $p } } puts "\n[llength $Ls]\n[join [lsort $Ls] \n]" exit } proc spi {} { set a [string repeat "A" 5000] set la [split $a ""] puts "[time {string index $a 3021} 10000]" puts "[time {lindex $la 3021} 10000]" exit } proc splitEmblOlida {getzOut} { set entries {} set entry "" foreach line [split $getzOut "\n"] { set line [string trimright $line] if {[string length $line] != 0} { append entry "$line\n" if {[regexp {^//} $line] && [string length $entry] != 0} { lappend entries [string trimright $entry] set entry "" } } } if {[string length $entry] != 0} {lappend entries [string trimright $entry]} return $entries } proc splitFastaOlida {getzOut} { set entries {} set entry "" foreach line [split $getzOut "\n"] { set line [string trimright $line] if {[string length $line] != 0} { if {[regexp {^>} $line] && [string length $entry] != 0} { lappend entries [string trimright $entry] set entry "" } append entry "$line\n" } } if {[string length $entry] != 0} {lappend entries [string trimright $entry]} return $entries } proc stambl {} { array set Mbl [InitClustalMatrix blosum62] set Laa [list A C D E F G H I K L M N P Q R S T V W Y] set nel [llength [array names Mbl "*,*"]] set sum 0.0 set i 0 set nel 0 foreach a1 [lrange $Laa 0 end] { foreach a2 [lrange $Laa $i end] { set sum [expr {$sum + $Mbl($a1,$a2)}] incr nel } incr i } set sum [expr {$sum/$nel}] puts "nel $nel" puts "sum $sum" foreach a $Laa { set sum 0. foreach b $Laa { if {$a eq $b} {continue} set sum [expr {$sum + $Mbl($a,$b)}] } puts "$a $Mbl($a,$a) $sum" } exit } proc stl {} { set Ll [LesLignesDuFichier "scene(1).stl"] set nv 0 set sx 0.0 ; set sy 0.0 ; set sz 0.0 foreach l $Ll { if {[string first "vertex" [string trim $l]] == 0} { lassign $l tmp x y z set sx [expr {$sx + $x}] set sy [expr {$sy + $y}] set sz [expr {$sz + $z}] incr nv } } set sx [expr {$sx/$nv}] set sy [expr {$sy/$nv}] set sz [expr {$sz/$nv}] puts "$sx\n$sy\n$sz" exit } proc sunday {} { foreach f [lsort [glob *.ord]] { sqlite db $f db eval {begin transaction} if {0} { set Lft [list] foreach pkm [db eval {select pk_mac from mac}] { set Ls [db eval {select pk_seqali from ln_mac_seqali where pk_mac=$pkm}] set Lf [db eval "select pk_featali from ln_seqali_featali where pk_seqali in ([join $Ls ,])"] set Lft [concat $Lft $Lf] } set Li [db eval {select pk_featali from featali}] set dif1 [lor $Li $Lft from1] puts "$f" puts "[llength $dif1]" puts "" db eval "delete from featali where pk_featali in ([join $dif1 ,])" } # feature Cons set Lc [db eval {select pk_featali from featali where ftype like '%Cons-%'}] if {$Lc != {} } { puts "$f\ndelete [llength $Lc] features\n" db eval "delete from ln_seqali_featali where pk_featali in ([join $Lc ,])" db eval "delete from featali where pk_featali in ([join $Lc ,])" } # colmeasure set Ltbl [db eval "select tbl_name from sqlite_master where (type = \"table\")"] foreach t [list colmeasure colscore ln_mac_colmeasure ln_seqali_colscore ln_cluster_colscore] { if {$t in $Ltbl} { db eval "delete from $t" } } db eval {commit} db eval {vacuum} db close } exit } proc superpose {} { set l1 [LesLignesDuFichier h1c.pdb] set l2 [LesLignesDuFichier h2c.pdb] set i 1 foreach e1 $l1 { if {[string range $e1 0 2] eq "END"} {continue} set W($i) 1. set x1 [string trim [string range $e1 30 37]] set x2 [string trim [string range $e1 38 45]] set x3 [string trim [string range $e1 46 53]] foreach j {1 2 3} { set XX($j,$i,1) [set x$j] } incr i } # 2eme fichier set i 1 foreach e1 $l2 { if {[string range $e1 0 2] eq "END"} {continue} set W($i) 1. set x1 [string trim [string range $e1 30 37]] set x2 [string trim [string range $e1 38 45]] set x3 [string trim [string range $e1 46 53]] foreach j {1 2 3} { set XX($j,$i,2) [set x$j] } incr i } COMPARORTHO XX W R T exit return } proc svgcanvas {w args} { source uriencode.tcl source tinyfileutils.tcl source can2svg.tcl eval canvas $w $args ;# create the "base" thing rename $w _$w ;# keep the original widget command # Here comes the overloaded widget proc: proc $w {cmd args} { set self [lindex [info level 0] 0] ;# get name I was called with puts "self $self" puts "cmd $cmd" puts "infl 0 [info level 0]" puts "infl 1 [info level 1]" #set rep [uplevel 1 set ::repSVG [_$self $cmd $args]] set status1 [catch { uplevel 1 _$self $cmd $args } ::repSVG] puts "rep $::repSVG" puts "" set Dont [list delete itemcget itemconfig configure cget bbox find gettags addtag bind raise lower type itemconfigure coords] if {$cmd ni $Dont} { can2svg::can2svg $cmd {*}$args } return $::repSVG } return $w ;# like the original "text" command } proc t11 {} { foreach len {5 7 9 11 13 15 17 19} { set log [exec ordali exe AnalyseFichierBalibase BB11001.xml $len] set log [split $log \n] set lr [lsearch -all -inline -glob $log "rank all*"] set min 999. foreach l $lr { regsub -all { +} $l " " l lassign [split $l " "] tmp tmp rk if {$rk < $min} { set lmin $l set min $rk } } puts "$lmin" } exit } proc tClassementGlobal {} { set LesPremiersGOs [TousLesPremiersGOsDesClassements 1] set LesMeilleurs {} set LesResultats {} foreach Premier $LesPremiersGOs { Espionne $Premier scan $Premier "%s %f" go n lappend LesMeilleurs $go if {[info exists DejaVu($go)]} {set N($go) [expr $n + $N($go)]} set DejaVu($go) 1 set N($go) $n regsub "$go" $Premier "" Premier regsub "$n" $Premier "" Premier set D($go) $Premier } foreach GO $LesMeilleurs { Espionne $GO Espionne $N($GO) lappend LesResultats "$GO $N($GO) $D($GO)" } set LeClassementFinal [lsort -decreasing -index 1 $LesResultats] return $LeClassementFinal } proc tDis {} { set p "YMMAAAAAYAAKCAQRQ" puts "$p" lassign [DispersionDeColonne $p] v a e puts "v $v" puts "vn [V_nV $v]" puts "a $a" puts "e $e" puts "[join \n]" set v2 [list 0.207 -0.978] puts [ColonneOverlap $v $v2 1.03 0.0 1.06 0.0] exit } proc tNW {} { #set S "ACTAGCTGATCGATCGAT" set S "ACGCTAGCTGATCGATCGAT" #set T "CTAGCTATATAGAT" set T "CGCTAGCTATATAGATGCGC" lassign [NW $S $T] al bl puts "$al" puts "$bl" exit #set S "ESIRMVLIGPPGAGKGTQAPNLQERFHAAHLATGDMLRSQIAKGTQLGLEAKKIMDQGGLVSDDIM" #set T "SSESIRMVLIGPPGAGKGTQAPNLQERFHAAHLATGDMLRSQIAKGTQLGLEAKKIMDQGGLVSDDIM" puts "\nS= [string length $S] T= [string length $T]" set time [time {set al [NW $S $T]}] puts $time lassign $al s1 s2 puts "$s1" puts "$s2" #exit set S [string repeat $S 2] set T [string repeat $T 2] puts "\nS= [string length $S] T= [string length $T]" set time [time {set al [NW $S $T]}] puts $time set S [string repeat $S 2] set T [string repeat $T 2] puts "\nS= [string length $S] T= [string length $T]" set time [time {set al [NW $S $T]}] puts $time set S [string repeat $S 2] set T [string repeat $T 2] puts "\nS= [string length $S] T= [string length $T]" set time [time {set al [NW $S $T]}] puts $time set S [string repeat $S 2] set T [string repeat $T 2] puts "\nS= [string length $S] T= [string length $T]" set time [time {set al [NW $S $T]}] puts $time set S [string repeat $S 2] set T [string repeat $T 2] puts "\nS= [string length $S] T= [string length $T]" set time [time {set al [NW $S $T]}] puts $time exit } proc tRI {} { set xml [PDBeInterface 1OCP] puts "$xml" puts "[ResiduesInterface $xml 1OCP A]" exit } proc tRp {} { #package require Tk package require Expect set txt [list 1.1 2.2 3.4] puts "Rpipe [Rpipe "print('[join $txt ,]')"]" puts "Rpipe [Rpipe "toto <- c([join $txt ,])"]" puts "Rpipe [Rpipe "(min(toto))"]" #exit set ListeVal [list 1.0 2.0 3.0 4.0 1.1 2.1 3.1 4.1 1.2 2.2 3.2 4.2 1.3 2.3 3.3 4.3] set NbRow 3 set NbGagne 1 set NbPerdu 1 set NbNul 1 set size 2 set decay 0.0075 Rpipe "All <- c([join $ListeVal ,])" Rpipe "All <- matrix(All,nrow=$NbRow)" Rpipe "fac <- rep( factor( c('gagne', 'perdu','nul')), c($NbGagne,$NbPerdu,$NbNul))" Rpipe "library(nnet)" ## index des etiquettes Rpipe "T <- class.ind(fac)" ### size = taille couche cachee, decay= vitesse d'apprentissage, maxit = nbre iteration puts [Rpipe "model <- nnet(All,T,size=$size,decay=$decay,softmax=TRUE,maxit=500)"] exit } proc taa {} { LoadTkAndPackages AskAddSeqs return } proc talc {} { foreach v {1.0 2.0 3.0} { set i 0 foreach k {toto titi tata} { if {[regexp {i} $k]} { set res $k break } incr i } puts "$res $i" } exit } proc tanac {} { set Ll [LesLignesDuFichier prokaryotes.txt] foreach l $Ll { set Lv [split $l \t] lappend Lr [lindex $Lv end-2] } puts "[join [DenombreLaListe $Lr] \n]" exit } proc tangle {a b op} { puts "[info level -1]" puts " ang $::TFB(F5,angle)" return } proc tarno {} { package require Thread set pool [tpool::create -idletime 30 -minworkers 1 -maxworkers 8] set program {puts begin after 5000 puts ok } set joblist {} # calculé un par un lappend joblist [tpool::post -nowait $pool $program] lappend joblist [tpool::post -nowait $pool $program] lappend joblist [tpool::post -nowait $pool $program] # calculé en parallèle lappend joblist [tpool::post $pool $program] lappend joblist [tpool::post $pool $program] lappend joblist [tpool::post $pool $program] while {[llength $joblist] > 0} { puts $joblist tpool::wait $pool $joblist joblist } exit } proc tars {} { set Laa [list a c d e f g h i k l m n p q r s t v w y] foreach aa $Laa { lappend Lid "sy${aa}m_human" } set Lrep [IDMapping "ACC+ID" ACC $Lid] LesDefauts DonwloadPDB dont foreach aa $Laa id $Lid acc $Lrep { set aa [string toupper $aa] if {$aa eq "F"} {set af "Fb"} {set af $aa} set f [MiSynPatDir]/data/alignments/${af}_WithModules.xml if {! [file exists $f]} {continue} DecortiqueUnXml2 $f InitSequences InitInfoSeqs AssignSeqToGroup global LNOrdali {*}[info globals "TD*"] set sqn "${aa}mito_Homo.sapi" if {$sqn ni $LNOrdali} { set ali "NONE" set equi "NONE" } else { set ali [set TDesAccess($sqn)] if {! [EstUnUniProt $ali]} { set gi [Convert2GI protein $ali] set equi [IDMapping P_GI ACC $gi] } else { set equi $ali } } puts "$aa | $id | $acc |>> $ali <-->$equi" } exit } proc tartine {} { array set T [InfosFromRefSeq XP_001332388.5] parray T array set R [InfosFromUniProt P21889] parray R foreach k [array names T] { lassign [split $k ,] tmp c lappend LT $c } foreach k [array names R] { lassign [split $k ,] tmp c lappend LR $c } set LT [lsort $LT] set LR [lsort $LR] puts "$LR" puts "$LT" exit } proc tatito {} { LitLeTFA court4.tfa ::LNOrdali ::Sequences foreach n $::LNOrdali { lappend ::LSOrdali $::Sequences($n) } AgentsRemoveColsGaps foreach n $::LNOrdali s $::LSOrdali { if {[string trim $n] eq ""} {continue} lappend Lnom $n lappend Lseq $s } EcritLeTfa tatito $Lnom $Lseq exit } proc tatom2 {} { set o [open "|lsqman " w] #fconfigure $o -buffering line #fileevent $o readable [list LogSup $o] set ref 4phc set phy hars2 set cmd "re m1 $ref.pdb re m2 $phy.pdb br m1 A m2 A 50 25 100 im m1 A1-999 m2 A1-999 ap m1 m2 wr m2 ${phy}_rt.pdb re m3 $atm br m1 A m3 A 50 25 100 im m1 A1-999 m3 A1-999 ap m1 m3 wr m3 ${atm}_rt.pdb qu " puts $o $cmd flush $o catch {close $o} exit } proc tauxi {} { #m = [(K*t)/12] / [1-(1+(t/12))^-n foreach an {10 15 20} { puts "\n" puts "$an ans" set n [expr {$an*12}] foreach K {100000. 110000. 120000. 130000.} { puts -nonewline "$K " foreach t {0.028 0.03 0.032 0.035} { set m [expr { (($K*$t)/12) / (1-pow(1+($t/12),-$n))}] puts -nonewline [format %8.2f $m] } puts "" } puts "" } exit } proc tax {} { global TDesTaxId LNOrdali ListePDB set o [open tax w] foreach n $LNOrdali { if {$n in $ListePDB || $n eq ""} {continue} lappend tax $TDesTaxId($n) } set tax [lsort -unique $tax] puts $o [join $tax \n] close $o exit } proc taxma {} { global LNOrdali TDesTaxId ListePDB cd /home/moumou/synmito/3Data/test set Ltax [list] lappend ::VariablesAuDepart Ltax set Lf [glob *_maj.xml] foreach f $Lf { puts "[file rootname [file tail $f]]" LesDefauts LesDefauts Mode batch DecortiqueUnXml2 $f InitSequences foreach n $LNOrdali { if {$n eq "" || $n in $ListePDB} { continue } lappend Ltax $TDesTaxId($n) } FermeFichier } set Ltax [lsort -unique $Ltax] puts "Ltax [llength $Ltax]" cd /home/moumou/SoTOL set o [open tax.txt w] puts $o [join $Ltax \n] close $o exit } proc tb11 {} { package require sqlite3 set db [sqlite3 "" res.sql] $db eval {begin transaction} set res [$db eval {select s.* from segment as s, file as f, ln_file_block as lfb, ln_block_segment as lbs where f.nom = 'BB11008.xml' and f.pk_file=lfb.pk_file and lfb.pk_block = lbs.pk_block and lbs.pk_segment = s.pk_segment}] set res [lsort -stride 5 -index 2 -decreasing $res] puts [join $res \n] exit } proc tb_project_to_sphere {x y} { # !! r= 1.0 set d [expr {sqrt($x*$x + $y*$y)}] #inside sphere if {$d < 0.70710678118654752440} { set z [expr {sqrt(1. - $d*$d)}] } else { set t [expr {1.0 / 1.41421356237309504880}] set z [expr {$t*$t / $d}] } return $z } proc tbal {} { set f BB11034.xml AnalyseFichierBalibase $f exit } proc tbd {} { LoadTkAndPackages toplevel .tbd text .tbd.t1 -bg black -fg white -font "Helvetica 32 bold" -width 40 -height 2 -wrap none grid .tbd.t1 -row 0 -column 0 -pady 10 -sticky news .tbd.t1 tag configure toto -background green -foreground white -borderwidth 10 -underline 1 .tbd.t1 insert end "Et voici qu'arrive la lumiere !\n" .tbd.t1 insert end "Y li zouli li lumiire hein ?" .tbd.t1 tag add toto 1.5 1.12 2.3 2.7 # deuxieme text .tbd.t2 -bg black -fg white -font "Helvetica 32 bold" -width 40 -height 2 -wrap none grid .tbd.t2 -row 1 -column 0 -pady 10 -sticky news .tbd.t2 tag configure tata -background red -foreground white .tbd.t2 insert end "Et voici qu'arrive la lumiere !\n" .tbd.t2 insert end "Y li zouli li lumiire hein ?" .tbd.t2 tag add tata 1.5 1.12 2.3 2.7 update puts "t1 [winfo height .tbd.t1] [winfo reqheight .tbd.t1]" puts "t2 [winfo height .tbd.t2] [winfo reqheight .tbd.t2]" return } proc tbloc {orga} { global taxid SetupRRPSOrga $orga set i 0 set s1 [string repeat "ACDEFGHILMNPQQQRST" 10] set s2 [string repeat "ACCDEFFGHIKKLMNPQRST" 10] set o [open f1 w] puts $o $s1 close $o set o [open f2 w] puts $o $s2 close $o exit while {1} { set Lpdbid [PDBQuery -organism $taxid -experiment x-ray -identity 70] lassign [NWalign $s1 $s2] s1al s2al incr i puts "done $i" } exit } proc tbls {} { set seq "...............................................................................................................................................................M............................................................................................................................YFP......................................................SWLSQLYRGLSRP...............................................................................IRRTTQPIWGSLYRSLLQSS.QRRIPEF..........................................SSFVVR...TNTCGELR....S.SH.....LGQEVTLCGWIQYRRQ....N.TFLVLRDFDG.LVQVIIPQDES........A......ASVKKIL....CEAPVESVVQVSGTVISRPAGQENPKMPTGEIEIKVKTAELLNAC.K............KLPFEIK.NF...................VK.......................................................KTEALRLQYRYLDLRSFQMQYNLRLRSQMVMKMREYLCNLHGFVDIETPTLFKRTPGGAKEFLVPSR.EPG....KFYSLPQSPQQFKQLLMV.GGLDRYFQVARCYRDEGSRPDRQP.EFTQIDIEMSFVD.QTGIQSLIEGLLQYSWPNDK..DPVV...................VPFPTMTFAEVLATYGT.DKPDTRFGMKIIDISDVFR..NTE...IGFLQDALSK..PHG.......TVKAICIPEGAK....YLKRKDIESIRNFA.A..DH.FNQEILPVFLNAN.........RN....WN...SPVANFIMES....QRLELIRL..........METQEEDVVLLTAGE.HN...KACSLLGKLRLECADLLETRGVVLRD...PT.LFSFLWVVDFPLFL...PKEE............NPRELESAHHPF.TAP..............HPSDI......HLL................Y....TE.PKKARSQHYDLVLNGNEIGGGSIRIHNAELQRYILATLLK.......................EDVKMLSHLLQALDYGAPPHGGIALGLDR....LICLVTGSPSIRDVIAFPKSFRGHDLMSNTPDSVPPEELKPYHIRVSKP..................................................................................TDSKAERAH.............................................................................................................................................................................................................................................................................................................................." set seq [string map {. ""} $seq] set Lblast [BlastService -p blastp -d nr -expect 0.00001 -query ">toto\n$seq" -nlist 10 -f 1 -qdef yes] DecortiqueBlast $Lblast "" "" "" Lbid Lacc Lde "" LPN set i 0 foreach b $Lbid a $Lacc d $Lde p $LPN { puts "$b $a $p $d" incr i if {$i > 10} { break } } exit } proc tbulle {} { LoadTkAndPackages pack [canvas .c -width 400 -height 200 -bg black] set id [.c create text 50 50 -text "Hello everybody" -fill white -tags {thello ttest} -font "Helvetica 10" -justify left -anchor nw] .c create rectangle [.c bbox $id] -fill black -outline white -tags {trect ttest} .c raise $id if {1} { set rk [.c create rect [.c bbox $id] -fill "" -outline "" -tags sensor] .c raise sensor } .c bind sensor {ShowRank %W %x %y} .c bind sensor {%W delete balloon} return } proc tbusy {} { set tbl " - test : { . pk P . i1 I . i2 I . i3 I . i4 I . i5 I . i6 I } " catch {file delete test.sql} set dres [FabriqueDeTables $tbl d test.sql] } proc tbut {} { LoadTkAndPackages label .l -text "this is a very very very very very long label" frame .f button .f.b1 -text "button ONE" -bg green1 button .f.b2 -text "button TWO" -bg red grid .l -row 0 -column 0 -sticky news grid .f -row 1 -column 0 -sticky news grid columnconfig .f all -weight 1 grid .f.b1 -row 0 -column 0 -sticky w grid .f.b2 -row 0 -column 1 -sticky e #grid columnconfig .f all -weight 1 FenetreAuCentre . return } proc tc_loadNamedColor {name P} { global red green blue color autoUpdate global LaCouleurDePaletteDeCouleurs if {[string index $name 0] != "#"} { if {[catch {set list [winfo rgb $P.swatch $name]} Message]} { FaireLire "Error in color name with message\n$Message" return "" } set red [lindex $list 0] set green [lindex $list 1] set blue [lindex $list 2] } else { case [string length $name] { 4 {set format "#%1x%1x%1x"; set shift 12} 7 {set format "#%2x%2x%2x"; set shift 8} 10 {set format "#%3x%3x%3x"; set shift 4} 13 {set format "#%4x%4x%4x"; set shift 0} default {error "syntax error in color name \"$name\""} } if {[scan $name $format red green blue] != 3} { error "syntax error in color name \"$name\"" } set red [expr $red<<$shift] set green [expr $green<<$shift] set blue [expr $blue<<$shift] } tc_setScales $P set color [format "#%04x%04x%04x" $red $green $blue] $P.swatch config -bg $color if { $autoUpdate } { set LaCouleurDePaletteDeCouleurs $color } } proc tc_scaleChanged {P args} { global red green blue colorSpace color updating autoUpdate global LaCouleurDePaletteDeCouleurs if $updating { return } if {$colorSpace == "rgb"} { set red [format %.0f [expr [$P.scale1 get]*65.535]] set green [format %.0f [expr [$P.scale2 get]*65.535]] set blue [format %.0f [expr [$P.scale3 get]*65.535]] } else { if {$colorSpace == "cmy"} { set red [format %.0f [expr {65535 - [$P.scale1 get]*65.535}]] set green [format %.0f [expr {65535 - [$P.scale2 get]*65.535}]] set blue [format %.0f [expr {65535 - [$P.scale3 get]*65.535}]] } else { set list [hsbToRgb [expr {[$P.scale1 get]/1000.0}] [expr {[$P.scale2 get]/1000.0}] [expr {[$P.scale3 get]/1000.0}]] set red [lindex $list 0] set green [lindex $list 1] set blue [lindex $list 2] } } set color [format "#%04x%04x%04x" $red $green $blue] $P.swatch config -bg $color if { $autoUpdate } { set LaCouleurDePaletteDeCouleurs $color } update idletasks } proc tc_setScales {P} { global red green blue colorSpace updating set updating 1 if {$colorSpace == "rgb"} { $P.scale1 set [format %.0f [expr $red/65.535]] $P.scale2 set [format %.0f [expr $green/65.535]] $P.scale3 set [format %.0f [expr $blue/65.535]] } else { if {$colorSpace == "cmy"} { $P.scale1 set [format %.0f [expr (65535-$red)/65.535]] $P.scale2 set [format %.0f [expr (65535-$green)/65.535]] $P.scale3 set [format %.0f [expr (65535-$blue)/65.535]] } else { set list [rgbToHsv $red $green $blue] $P.scale1 set [format %.0f [expr {[lindex $list 0] * 1000.0}]] $P.scale2 set [format %.0f [expr {[lindex $list 1] * 1000.0}]] $P.scale3 set [format %.0f [expr {[lindex $list 2] * 1000.0}]] } } set updating 0 } proc tcaret {} { cd /home/moumou/ter source d.data puts "lit [lindex $Lit 0]" puts "Lot [lindex $Lot 0]" puts "lie [lindex $Lie 0]" puts "loe [lindex $Loe 0]" #exit set NbRow [llength $Lit] set NbRowT [llength $Lie] puts "NbRow $NbRow NbRowT $NbRowT" #exit set NbCol [llength [lindex $Lit 0]] set scol "" for {set i 1} {$i <= $NbCol} {incr i} { append scol "col$i + " } set scol [string range $scol 0 end-2] Rpipe "library(nnet)" Rpipe "library(caret)" #Rpipe "rm(list = ls(all.names = TRUE))" Rpipe "All <- c([join [concat {*}$Lit] ,])" Rpipe "All <- matrix(All,nrow=$NbRow,byrow=T)" Rpipe "Val <- c([join [concat {*}$Lot] ,])" Rpipe "Val <- matrix(Val,nrow=$NbRow,byrow=T)" Rpipe "Test <- c([join [concat {*}$Lie] ,])" Rpipe "Test <- matrix(Test,nrow=$NbRowT, byrow=T)" set Lvtst [list] for {set i 0; set j 0} {$i < $NbRowT} {incr i ; incr j} { if {$j == 3} {set j 0} switch $j { 0 {lappend Lvtst [list 1.0 0.0 0.0]} 1 {lappend Lvtst [list 0.0 1.0 0.0]} 2 {lappend Lvtst [list 0.0 0.0 1.0]} } } Rpipe "VTst <- c([join [concat {*}$Lvtst] ,])" Rpipe "VTst <- matrix(VTst,nrow=$NbRowT, byrow=T)" Rpipe "colnames(All) <- paste('col',1:ncol(All),sep='')" Rpipe "colnames(Val) <- paste('cls',1:ncol(Val),sep='')" Rpipe "colnames(Test) <- paste('col',1:ncol(Test),sep='')" Rpipe "colnames(VTst) <- paste('cls',1:ncol(VTst),sep='')" Rpipe "dt1 <- data.frame(Val,All)" Rpipe "dt1\$class = as.factor(paste0(\"v\",dt1\$cls1 ,dt1\$cls2, dt1\$cls3))" #Rpipe "dt2 <- as.data.frame(Test)" Rpipe "dt2 <- data.frame(VTst,Test)" Rpipe "dt2\$class = as.factor(paste0(\"v\",dt2\$cls1 ,dt2\$cls2 ,dt2\$cls3))" Rpipe "dt1" Rpipe "dt2" #exit Rpipe "set.seed(101112)" set out [Rpipe "fitControl <- trainControl(method = \"repeatedcv\", number = 10, repeats = 10)"] puts "out control = \n$out\n" puts "[DonneDateEtHeure]" set out [Rpipe "mod <- train(class ~ $scol, data = dt1, method='gbm',trControl = fitControl, verbose = TRUE)"] puts "[DonneDateEtHeure]" puts "out model =\n$out" set out [Rpipe "mod"] puts "out mod =\n$out" Rpipe "pred <- predict(mod,newdata = dt2,type='prob')" set out [Rpipe "print(pred)"] puts "$out" Rpipe "rm(list = ls(all.names = TRUE))" Rclose exit } proc tchar {} { set out [MapCharSet octal char "\311"] puts $out set s "\311tude d'ét\311" puts [Html2Char $s] exit set o [open cat.html r] fconfigure $o -encoding ascii set l [read -nonewline $o] set Ll [split $l "\n"] close $o set Lres {} foreach l $Ll { lappend Lres [Html2Char $l] } exit } proc tcl3dAddEvents {} { event add <> event add <> event add <> if { $::tcl_platform(os) eq "Darwin" } { event add <> event add <> event add <> event add <> event add <> event add <> event add <> } else { event add <> event add <> event add <> event add <> event add <> event add <> } } proc tcl3dCanvas2File {canv fileName {fmt JPEG} {opts ""}} { set img [tcl3dCanvas2Img $canv] if { [string length $fileName] != 0 } { $img write $fileName -format "$fmt $opts" } image delete $img } proc tcl3dCanvas2Img {canv} { global __tcl3dCaptureInt set region [$canv cget -scrollregion] set xsize [lindex $region 2] set ysize [lindex $region 3] set img [image create photo -width $xsize -height $ysize] if { !$__tcl3dCaptureInt(Img,avail) } { $img blank } else { $canv xview moveto 0 $canv yview moveto 0 update set xr 0.0 set yr 0.0 set px 0 set py 0 while { $xr < 1.0 } { while { $yr < 1.0 } { set tmpImg [image create photo -format window -data $canv] $img copy $tmpImg -to $px $py image delete $tmpImg set yr [lindex [$canv yview] 1] $canv yview moveto $yr set py [expr round ($ysize * [lindex [$canv yview] 0])] update } $canv yview moveto 0 set yr 0.0 set py 0 set xr [lindex [$canv xview] 1] $canv xview moveto $xr set px [expr round ($xsize * [lindex [$canv xview] 0])] update } } return $img } proc tcl3dCgGetVersion {} { if { [info commands cgGetString] ne "" } { return [cgGetString CG_VERSION] } else { return "" } } proc tcl3dCharToNum {char} { scan $char %c value return $value } proc tcl3dCheckGlError {msg} { set err [glGetError] if { $err == $::GL_NO_ERROR } { return 0 } puts [format "%s: GL error: 0X%X (%s)" $msg $err [gluErrorString $err]] return 1 } proc tcl3dClipboard2File {fileName {fmt JPEG} {opts ""}} { set img [tcl3dClipboard2Img] if { [string length $fileName] != 0 } { $img write $fileName -format "$fmt $opts" } image delete $img } proc tcl3dClipboard2Img {} { global __tcl3dCaptureInt if { !$__tcl3dCaptureInt(twapi,avail) } { error "Twapi extension not available" } twapi::open_clipboard # Assume clipboard content is in format 8 (CF_DIB) set retVal [catch {twapi::read_clipboard 8} clipData] if { $retVal != 0 } { error "Invalid or no content in clipboard" } # First parse the bitmap data to collect header information binary scan $clipData "iiissiiiiii" size width height planes bitcount compression sizeimage xpelspermeter ypelspermeter clrused clrimportant # We only handle BITMAPINFOHEADER right now (size must be 40) if {$size != 40} { error "Unsupported bitmap format. Header size=$size" } # We need to figure out the offset to the actual bitmap data # from the start of the file header. For this we need to know the # size of the color table which directly follows the BITMAPINFOHEADER if {$bitcount == 0} { error "Unsupported format: implicit JPEG or PNG" } elseif {$bitcount == 1} { set color_table_size 2 } elseif {$bitcount == 4} { # TBD - Not sure if this is the size or the max size set color_table_size 16 } elseif {$bitcount == 8} { # TBD - Not sure if this is the size or the max size set color_table_size 256 } elseif {$bitcount == 16 || $bitcount == 32} { if {$compression == 0} { # BI_RGB set color_table_size $clrused } elseif {$compression == 3} { # BI_BITFIELDS set color_table_size 3 } else { error "Unsupported compression type '$compression' for bitcount value $bitcount" } } elseif {$bitcount == 24} { set color_table_size $clrused } else { error "Unsupported value '$bitcount' in bitmap bitcount field" } set phImg [image create photo] set filehdr_size 14 ; # sizeof(BITMAPFILEHEADER) set bitmap_file_offset [expr {$filehdr_size+$size+($color_table_size*4)}] set filehdr [binary format "a2 i x2 x2 i" "BM" [expr {$filehdr_size + [string length $clipData]}] $bitmap_file_offset] append filehdr $clipData $phImg put $filehdr -format bmp twapi::close_clipboard return $phImg } proc tcl3dConsoleCreate {w prompt title} { upvar #0 $w.t v if {[winfo exists $w]} {destroy $w} if {[info exists v]} {unset v} toplevel $w wm title $w $title wm iconname $w $title set mnu $w.mb menu $mnu -borderwidth 2 -relief sunken $mnu add cascade -menu $mnu.file -label File -underline 0 $mnu add cascade -menu $mnu.edit -label Edit -underline 0 set fileMenu $mnu.file set editMenu $mnu.edit menu $fileMenu -tearoff 0 __tcl3dAddMenuCmd $fileMenu "Save as ..." "" "__tcl3dConsoleSaveFile $w.t" __tcl3dAddMenuCmd $fileMenu "Close" "" "destroy $w" __tcl3dAddMenuCmd $fileMenu "Quit" "" "exit" __tcl3dConsoleCreateChild $w $prompt $editMenu $w configure -menu $mnu } proc tcl3dCreatePdf {toglwin filename {title "Tcl3D Screenshot"} {drawBackground 0} {producer Tcl3D}} { tcl3dGl2psCreatePdf $toglwin $filename $title $drawBackground $producer } proc tcl3dCreateScrolledCanvas {wid titleStr args} { return [eval {tcl3dCreateScrolledWidget canvas $wid $titleStr} $args ] } proc tcl3dCreateScrolledFrame {wid titleStr args} { frame $wid.par pack $wid.par -fill both -expand 1 if { [string compare $titleStr ""] != 0 } { label $wid.par.label -text "$titleStr" -borderwidth 2 -relief raised } eval {canvas $wid.par.canv -xscrollcommand [list $wid.par.xscroll set] -yscrollcommand [list $wid.par.yscroll set]} $args scrollbar $wid.par.xscroll -orient horizontal -command "$wid.par.canv xview" scrollbar $wid.par.yscroll -orient vertical -command "$wid.par.canv yview" set fr [frame $wid.par.canv.fr -borderwidth 0 -highlightthickness 0] $wid.par.canv create window 0 0 -anchor nw -window $fr set rowNo 0 if { [string compare $titleStr ""] != 0 } { set rowNo 1 grid $wid.par.label -sticky ew -columnspan 2 } grid $wid.par.canv $wid.par.yscroll -sticky news grid $wid.par.xscroll -sticky ew grid rowconfigure $wid.par $rowNo -weight 1 grid columnconfigure $wid.par 0 -weight 1 # This binding makes the scroll-region of the canvas behave correctly as # you place more things in the content frame. bind $fr [list __tcl3dScrolledFrameCfgCB $wid.par %w %h] $wid.par.canv configure -borderwidth 0 -highlightthickness 0 return $fr } proc tcl3dCreateScrolledListbox {wid titleStr args} { return [eval {tcl3dCreateScrolledWidget listbox $wid $titleStr} $args ] } proc tcl3dCreateScrolledTable {wid titleStr args} { return [eval {tcl3dCreateScrolledWidget table $wid $titleStr} $args ] } proc tcl3dCreateScrolledTablelist {wid titleStr args} { return [eval {tcl3dCreateScrolledWidget tablelist::tablelist $wid $titleStr} $args ] } proc tcl3dCreateScrolledText {wid titleStr args} { return [eval {tcl3dCreateScrolledWidget text $wid $titleStr} $args ] } proc tcl3dCreateScrolledWidget {wType wid titleStr args} { if { [winfo exists $wid.par] } { destroy $wid.par } frame $wid.par pack $wid.par -side top -fill both -expand 1 if { [string compare $titleStr ""] != 0 } { label $wid.par.label -text "$titleStr" } eval { $wType $wid.par.widget -xscrollcommand "$wid.par.xscroll set" -yscrollcommand "$wid.par.yscroll set" } $args scrollbar $wid.par.xscroll -command "$wid.par.widget xview" -orient horizontal -takefocus 0 scrollbar $wid.par.yscroll -command "$wid.par.widget yview" -orient vertical -takefocus 0 set rowNo 0 if { [string compare $titleStr ""] != 0 } { set rowNo 1 grid $wid.par.label -sticky ew -columnspan 2 } grid $wid.par.widget $wid.par.yscroll -sticky news grid $wid.par.xscroll -sticky ew grid rowconfigure $wid.par $rowNo -weight 1 grid columnconfigure $wid.par 0 -weight 1 ::tcl3dAutoscroll::autoscroll $wid.par.xscroll ::tcl3dAutoscroll::autoscroll $wid.par.yscroll return $wid.par.widget } proc tcl3dCreateTmpDir {} { set masterTmpDir [tcl3dGetTmpDir] set i 0 while { 1 } { set tmpDirName [format "tcl3d_%05d.tmp" $i] set tmpDir [file join $masterTmpDir $tmpDirName] # puts "Checking for directory $masterTmpDir" if { [file exists $tmpDir] } { # Directory already exists. Try to delete it and recreate it first, # before attempting to create new number. set retVal [catch { file delete -force $tmpDir } ] if { $retVal != 0 } { incr i continue } } file mkdir $tmpDir # puts "\tCreating directory $tmpDir" return $tmpDir } } proc tcl3dDegToRad {ang} { return [expr {$ang * 3.1415926535 / 180.0}] } proc tcl3dDemoUtilHeightmapFromPhoto {phImg flHeightScale flResolution} { set w [image width $phImg] set h [image height $phImg] set n [tcl3dPhotoChans $phImg] if { $n < 3 } { error "Photo must have 3 or more channels" } set numVtx [expr {int ($w * $h * 6 / ($flResolution * $flResolution))}] set vtxVec [tcl3dVector GLfloat [expr {3 * $numVtx}]] set texVec [tcl3dVector GLfloat [expr {2 * $numVtx}]] tcl3dDemoUtilPhoto2Heightmap $phImg $vtxVec $texVec $flHeightScale $flResolution return [list $vtxVec $texVec $numVtx] } proc tcl3dDesktop2Clipboard {} { global __tcl3dCaptureInt if { !$__tcl3dCaptureInt(twapi,avail) } { error "Twapi extension not available" } twapi::send_keys {{PRTSC}} update } proc tcl3dFTGLGetVersion {} { if { [info commands FTGLBitmapFont] ne "" } { return [format "%d.%d.%d" 2 1 2] } else { return "" } } proc tcl3dFindColorName {colorName} { global __tcl3dColorList return [lsearch -inline $__tcl3dColorList $colorName] } proc tcl3dGenExtName {fileName} { if { [string first "vfs" [file system $fileName]] >= 0 } { set extDirName [file join [tcl3dGetTmpDir] "tcl3dData.tmp"] if { ! [file isdirectory $extDirName] } { file mkdir $extDirName } return [file join $extDirName [file tail $fileName]] } else { return $fileName } } proc tcl3dGetColorNames {} { global __tcl3dColorList set len [llength $__tcl3dColorList] for { set i 0 } { $i < $len } { incr i 4 } { lappend l [lindex $__tcl3dColorList $i] } return $l } proc tcl3dGetExtFile {fileName} { if { [string first "vfs" [file system $fileName]] >= 0 } { set extDirName [file join [tcl3dGetTmpDir] "tcl3dData.tmp"] if { ! [file isdirectory $extDirName] } { file mkdir $extDirName } set extFileName [file join $extDirName [file tail $fileName]] if { [file exists $extFileName] } { # puts "\t$extFileName already exists. No action." } else { # puts "\tCopy $fileName to $extDirName" file copy $fileName $extDirName } # puts "\tReturning <$extFileName>" return $extFileName } # puts "No Starpack: Returning <$fileName>" return $fileName } proc tcl3dGetExtensions {} { return [tcl3dOglGetExtensions] } proc tcl3dGetLibraryInfo {pkgName} { set retVal "" switch $pkgName { "tcl3dcg" { if { [info procs tcl3dCgGetVersion] ne "" } { return [tcl3dCgGetVersion] } } "tcl3dftgl" { if { [info procs tcl3dFTGLGetVersion] ne "" } { return [tcl3dFTGLGetVersion] } } "tcl3dgl2ps" { if { [info procs tcl3dGl2psGetVersion] ne "" } { return [tcl3dGl2psGetVersion] } } "tcl3dode" { if { [info procs tcl3dOdeGetVersion] ne "" } { return [tcl3dOdeGetVersion] } } "tcl3dogl" { if { [info procs tcl3dOglGetVersion] ne "" } { return [tcl3dOglGetVersion] } } "tcl3dosg" { if { [info procs tcl3dOsgGetVersion] ne "" } { return [tcl3dOsgGetVersion] } } "tcl3dsdl" { if { [info procs tcl3dSDLGetVersion] ne "" } { return [tcl3dSDLGetVersion] } } } return $retVal } proc tcl3dGetPackageInfo {} { set msgList {} foreach name [lsort [array names ::__tcl3dPkgInfo "*,avail"]] { set pkg [lindex [split $name ","] 0] set libVersion [tcl3dGetLibraryInfo $pkg] lappend msgList [list $pkg $::__tcl3dPkgInfo($pkg,avail) $::__tcl3dPkgInfo($pkg,version) $libVersion] } return $msgList } proc tcl3dGetStateList {} { return { { glGetFloatv GL_CURRENT_COLOR 4 1,1,1,1 } { glGetFloatv GL_CURRENT_SECONDARY_COLOR 4 0,0,0,1 } { glGetFloatv GL_CURRENT_INDEX 1 1 } { glGetFloatv GL_CURRENT_TEXTURE_COORDS 4 0,0,0,1 } { glGetFloatv GL_CURRENT_NORMAL 3 0,0,1 } { glGetFloatv GL_CURRENT_FOG_COORD 1 0 } { glGetFloatv GL_CURRENT_RASTER_POSITION 4 0,0,0,1 } { glGetFloatv GL_CURRENT_RASTER_DISTANCE 1 0 } { glGetFloatv GL_CURRENT_RASTER_COLOR 4 1,1,1,1 } { glGetIntegerv GL_CURRENT_RASTER_INDEX 1 1 } { glGetFloatv GL_CURRENT_RASTER_TEXTURE_COORDS 4 0,0,0,1 } { glGetBooleanv GL_CURRENT_RASTER_POSITION_VALID 1 True } { glGetBooleanv GL_EDGE_FLAG 1 True } { glGetIntegerv GL_CLIENT_ACTIVE_TEXTURE 1 TEXTURE0 } { glIsEnabled GL_VERTEX_ARRAY 1 False } { glGetIntegerv GL_VERTEX_ARRAY_SIZE 1 4 } { glGetIntegerv GL_VERTEX_ARRAY_TYPE 1 FLOAT } { glGetIntegerv GL_VERTEX_ARRAY_STRIDE 1 0 } { glGetPointerv GL_VERTEX_ARRAY_POINTER 1 0 } { glIsEnabled GL_NORMAL_ARRAY 1 False } { glGetIntegerv GL_NORMAL_ARRAY_TYPE 1 FLOAT } { glGetIntegerv GL_NORMAL_ARRAY_STRIDE 1 0 } { glGetPointerv GL_NORMAL_ARRAY_POINTER 1 0 } { glIsEnabled GL_FOG_COORD_ARRAY 1 False } { glGetIntegerv GL_FOG_COORD_ARRAY_TYPE 1 FLOAT } { glGetIntegerv GL_FOG_COORD_ARRAY_STRIDE 1 0 } { glGetPointerv GL_FOG_COORD_ARRAY_POINTER 1 0 } { glIsEnabled GL_COLOR_ARRAY 1 False } { glGetIntegerv GL_COLOR_ARRAY_SIZE 1 4 } { glGetIntegerv GL_COLOR_ARRAY_TYPE 1 FLOAT } { glGetIntegerv GL_COLOR_ARRAY_STRIDE 1 0 } { glGetPointerv GL_COLOR_ARRAY_POINTER 1 0 } { glIsEnabled GL_SECONDARY_COLOR_ARRAY 1 False } { glGetIntegerv GL_SECONDARY_COLOR_ARRAY_SIZE 1 3 } { glGetIntegerv GL_SECONDARY_COLOR_ARRAY_TYPE 1 FLOAT } { glGetIntegerv GL_SECONDARY_COLOR_ARRAY_STRIDE 1 0 } { glGetPointerv GL_SECONDARY_COLOR_ARRAY_POINTER 1 0 } { glIsEnabled GL_INDEX_ARRAY 1 False } { glGetIntegerv GL_INDEX_ARRAY_TYPE 1 FLOAT } { glGetIntegerv GL_INDEX_ARRAY_STRIDE 1 0 } { glGetPointerv GL_INDEX_ARRAY_POINTER 1 0 } { glIsEnabled GL_TEXTURE_COORD_ARRAY 1 False } { glGetIntegerv GL_TEXTURE_COORD_ARRAY_SIZE 1 4 } { glGetIntegerv GL_TEXTURE_COORD_ARRAY_TYPE 1 FLOAT } { glGetIntegerv GL_TEXTURE_COORD_ARRAY_STRIDE 1 0 } { glGetPointerv GL_TEXTURE_COORD_ARRAY_POINTER 1 0 } { glGetVertexAttribiv GL_VERTEX_ATTRIB_ARRAY_ENABLED 1 False } { glGetVertexAttribiv GL_VERTEX_ATTRIB_ARRAY_SIZE 1 4 } { glGetVertexAttribiv GL_VERTEX_ATTRIB_ARRAY_STRIDE 1 0 } { glGetVertexAttribiv GL_VERTEX_ATTRIB_ARRAY_TYPE 1 FLOAT } { glGetVertexAttribiv GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 1 False } { glGetVertexAttribPointerv GL_VERTEX_ATTRIB_ARRAY_POINTER 1 NULL } { glIsEnabled GL_EDGE_FLAG_ARRAY 1 False } { glGetIntegerv GL_EDGE_FLAG_ARRAY_STRIDE 1 0 } { glGetPointerv GL_EDGE_FLAG_ARRAY_POINTER 1 0 } { glGetIntegerv GL_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_VERTEX_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_NORMAL_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_COLOR_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_INDEX_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_FOG_COORD_ARRAY_BUFFER_BINDING 1 0 } { glGetIntegerv GL_ELEMENT_ARRAY_BUFFER_BINDING 1 0 } { glGetBufferSubData - 1 - } { glGetBufferParameteriv GL_BUFFER_SIZE 1 0 } { glGetBufferParameteriv GL_BUFFER_USAGE 1 STATIC_DRAW } { glGetBufferParameteriv GL_BUFFER_ACCESS 1 READ_WRITE } { glGetBufferParameteriv GL_BUFFER_MAPPED 1 FALSE } { glGetBufferPointerv GL_BUFFER_MAP_POINTER 1 NULL } { glGetFloatv GL_COLOR_MATRIX 16 Identity } { glGetFloatv GL_TRANSPOSE_COLOR_MATRIX 16 Identity } { glGetFloatv GL_MODELVIEW_MATRIX 16 Identity } { glGetFloatv GL_TRANSPOSE_MODELVIEW_MATRIX 16 Identity } { glGetFloatv GL_PROJECTION_MATRIX 16 Identity } { glGetFloatv GL_TRANSPOSE_PROJECTION_MATRIX 16 Identity } { glGetFloatv GL_TEXTURE_MATRIX 16 Identity } { glGetFloatv GL_TRANSPOSE_TEXTURE_MATRIX 16 Identity } { glGetIntegerv GL_VIEWPORT 1 {see 2.11.1} } { glGetFloatv GL_DEPTH_RANGE 2 0,1 } { glGetIntegerv GL_COLOR_MATRIX_STACK_DEPTH 1 1 } { glGetIntegerv GL_MODELVIEW_STACK_DEPTH 1 1 } { glGetIntegerv GL_PROJECTION_STACK_DEPTH 1 1 } { glGetIntegerv GL_TEXTURE_STACK_DEPTH 1 1 } { glGetIntegerv GL_MATRIX_MODE 1 MODELVIEW } { glIsEnabled GL_NORMALIZE 1 False } { glIsEnabled GL_RESCALE_NORMAL 1 False } { glGetClipPlane GL_CLIP_PLANE0 4 0,0,0,0 } { glGetClipPlane GL_CLIP_PLANE1 4 0,0,0,0 } { glGetClipPlane GL_CLIP_PLANE2 4 0,0,0,0 } { glGetClipPlane GL_CLIP_PLANE3 4 0,0,0,0 } { glGetClipPlane GL_CLIP_PLANE4 4 0,0,0,0 } { glGetClipPlane GL_CLIP_PLANE5 4 0,0,0,0 } { glIsEnabled GL_CLIP_PLANE0 1 False } { glIsEnabled GL_CLIP_PLANE1 1 False } { glIsEnabled GL_CLIP_PLANE2 1 False } { glIsEnabled GL_CLIP_PLANE3 1 False } { glIsEnabled GL_CLIP_PLANE4 1 False } { glIsEnabled GL_CLIP_PLANE5 1 False } { glGetFloatv GL_FOG_COLOR 4 0,0,0,0 } { glGetFloatv GL_FOG_INDEX 1 0 } { glGetFloatv GL_FOG_DENSITY 1 1.0 } { glGetFloatv GL_FOG_START 1 0.0 } { glGetFloatv GL_FOG_END 1 1.0 } { glGetIntegerv GL_FOG_MODE 1 EXP } { glIsEnabled GL_FOG 1 False } { glGetIntegerv GL_FOG_COORD_SOURCE 1 FRAGMENT_DEPTH } { glIsEnabled GL_COLOR_SUM 1 False } { glGetIntegerv GL_SHADE_MODEL 1 SMOOTH } { glIsEnabled GL_LIGHTING 1 False } { glIsEnabled GL_COLOR_MATERIAL 1 False } { glGetIntegerv GL_COLOR_MATERIAL_PARAMETER 1 AMBIENT_AND_DIFFUSE } { glGetIntegerv GL_COLOR_MATERIAL_FACE 1 FRONT_AND_BACK } { glGetMaterialfv GL_AMBIENT 4 0.2,0.2,0.2,1.0 } { glGetMaterialfv GL_DIFFUSE 4 0.8,0.8,0.8,1.0 } { glGetMaterialfv GL_SPECULAR 4 0.0,0.0,0.0,1.0 } { glGetMaterialfv GL_EMISSION 4 0.0,0.0,0.0,1.0 } { glGetMaterialfv GL_SHININESS 1 0.0 } { glGetFloatv GL_LIGHT_MODEL_AMBIENT 4 0.2,0.2,0.2,1.0 } { glGetBooleanv GL_LIGHT_MODEL_LOCAL_VIEWER 1 False } { glGetBooleanv GL_LIGHT_MODEL_TWO_SIDE 1 False } { glGetIntegerv GL_LIGHT_MODEL_COLOR_CONTROL 1 SINGLE_COLOR } { glGetLightfv GL_AMBIENT 4 0.0,0.0,0.0,1.0 } { glGetLightfv GL_DIFFUSE 1 {see table 2.10} } { glGetLightfv GL_SPECULAR 1 {see table 2.10} } { glGetLightfv GL_POSITION 4 0.0,0.0,1.0,0.0 } { glGetLightfv GL_CONSTANT_ATTENUATION 1 1.0 } { glGetLightfv GL_LINEAR_ATTENUATION 1 0.0 } { glGetLightfv GL_QUADRATIC_ATTENUATION 1 0.0 } { glGetLightfv GL_SPOT_DIRECTION 3 0.0,0.0,-1.0 } { glGetLightfv GL_SPOT_EXPONENT 1 0.0 } { glGetLightfv GL_SPOT_CUTOFF 1 180.0 } { glIsEnabled GL_LIGHT0 1 False } { glIsEnabled GL_LIGHT1 1 False } { glIsEnabled GL_LIGHT2 1 False } { glIsEnabled GL_LIGHT3 1 False } { glIsEnabled GL_LIGHT4 1 False } { glIsEnabled GL_LIGHT5 1 False } { glIsEnabled GL_LIGHT6 1 False } { glIsEnabled GL_LIGHT7 1 False } { glGetMaterialfv GL_COLOR_INDEXES 3 0,1,1 } { glGetFloatv GL_POINT_SIZE 1 1.0 } { glIsEnabled GL_POINT_SMOOTH 1 False } { glIsEnabled GL_POINT_SPRITE 1 False } { glGetFloatv GL_POINT_SIZE_MIN 1 0.0 } { glGetFloatv GL_POINT_SIZE_MAX 1 1 } { glGetFloatv GL_POINT_FADE_THRESHOLD_SIZE 1 1.0 } { glGetFloatv GL_POINT_DISTANCE_ATTENUATION 3 1,0,0 } { glGetIntegerv GL_POINT_SPRITE_COORD_ORIGIN 1 UPPER_LEFT } { glGetFloatv GL_LINE_WIDTH 1 1.0 } { glIsEnabled GL_LINE_SMOOTH 1 False } { glGetIntegerv GL_LINE_STIPPLE_PATTERN 1 1's } { glGetIntegerv GL_LINE_STIPPLE_REPEAT 1 1 } { glIsEnabled GL_LINE_STIPPLE 1 False } { glIsEnabled GL_CULL_FACE 1 False } { glGetIntegerv GL_CULL_FACE_MODE 1 BACK } { glGetIntegerv GL_FRONT_FACE 1 CCW } { glIsEnabled GL_POLYGON_SMOOTH 1 False } { glGetIntegerv GL_POLYGON_MODE 1 FILL } { glGetFloatv GL_POLYGON_OFFSET_FACTOR 1 0 } { glGetFloatv GL_POLYGON_OFFSET_UNITS 1 0 } { glIsEnabled GL_POLYGON_OFFSET_POINT 1 False } { glIsEnabled GL_POLYGON_OFFSET_LINE 1 False } { glIsEnabled GL_POLYGON_OFFSET_FILL 1 False } { glGetPolygonStipple - 1 1's } { glIsEnabled GL_POLYGON_STIPPLE 1 False } { glIsEnabled GL_MULTISAMPLE 1 True } { glIsEnabled GL_SAMPLE_ALPHA_TO_COVERAGE 1 False } { glIsEnabled GL_SAMPLE_ALPHA_TO_ONE 1 False } { glIsEnabled GL_SAMPLE_COVERAGE 1 False } { glGetFloatv GL_SAMPLE_COVERAGE_VALUE 1 1 } { glGetBooleanv GL_SAMPLE_COVERAGE_INVERT 1 False } { glIsEnabled GL_TEXTURE_1D 1 False } { glIsEnabled GL_TEXTURE_2D 1 False } { glIsEnabled GL_TEXTURE_3D 1 False } { glIsEnabled GL_TEXTURE_CUBE_MAP 1 False } { glGetIntegerv GL_TEXTURE_BINDING_1D 1 0 } { glGetIntegerv GL_TEXTURE_BINDING_2D 1 0 } { glGetIntegerv GL_TEXTURE_BINDING_3D 1 0 } { glGetIntegerv GL_TEXTURE_BINDING_CUBE_MAP 1 0 } { glGetTexImage GL_TEXTURE_1D 1 {see 3.8} } { glGetTexImage GL_TEXTURE_2D 1 {see 3.8} } { glGetTexImage GL_TEXTURE_3D 1 {see 3.8} } { glGetTexImage GL_TEXTURE_CUBE_MAP_POSITIVE_X 1 {see 3.8.1} } { glGetTexImage GL_TEXTURE_CUBE_MAP_NEGATIVE_X 1 {see 3.8.1} } { glGetTexImage GL_TEXTURE_CUBE_MAP_POSITIVE_Y 1 {see 3.8.1} } { glGetTexImage GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 1 {see 3.8.1} } { glGetTexImage GL_TEXTURE_CUBE_MAP_POSITIVE_Z 1 {see 3.8.1} } { glGetTexImage GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 1 {see 3.8.1} } { glGetTexParameterfv GL_TEXTURE_BORDER_COLOR 4 0,0,0,0 } { glGetTexParameteriv GL_TEXTURE_MIN_FILTER 1 {see 3.8} } { glGetTexParameteriv GL_TEXTURE_MAG_FILTER 1 {see 3.8} } { glGetTexParameteriv GL_TEXTURE_WRAP_S 1 REPEAT } { glGetTexParameteriv GL_TEXTURE_WRAP_T 1 REPEAT } { glGetTexParameteriv GL_TEXTURE_WRAP_R 1 REPEAT } { glGetTexParameterfv GL_TEXTURE_PRIORITY 1 1 } { glGetTexParameteriv GL_TEXTURE_RESIDENT 1 {see 3.8.12} } { glGetTexParameterfv GL_TEXTURE_MIN_LOD 1 -1000 } { glGetTexParameterfv GL_TEXTURE_MAX_LOD 1 1000 } { glGetTexParameteriv GL_TEXTURE_BASE_LEVEL 1 0 } { glGetTexParameteriv GL_TEXTURE_MAX_LEVEL 1 1000 } { glGetTexParameterfv GL_TEXTURE_LOD_BIAS 1 0.0 } { glGetTexParameteriv GL_DEPTH_TEXTURE_MODE 1 LUMINANCE } { glGetTexParameteriv GL_TEXTURE_COMPARE_MODE 1 NONE } { glGetTexParameteriv GL_TEXTURE_COMPARE_FUNC 1 LEQUAL } { glGetTexParameteriv GL_GENERATE_MIPMAP 1 FALSE } { glGetTexLevelParameteriv GL_TEXTURE_WIDTH 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_HEIGHT 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_DEPTH 1 {0 3D} } { glGetTexLevelParameteriv GL_TEXTURE_BORDER 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_INTERNAL_FORMAT 1 1 } { glGetTexLevelParameteriv GL_TEXTURE_RED_SIZE 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_GREEN_SIZE 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_BLUE_SIZE 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_ALPHA_SIZE 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_LUMINANCE_SIZE 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_INTENSITY_SIZE 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_DEPTH_SIZE 1 0 } { glGetTexLevelParameteriv GL_TEXTURE_COMPRESSED 1 False } { glGetTexLevelParameteriv GL_TEXTURE_COMPRESSED_IMAGE_SIZE 1 0 } { glGetTexEnviv GL_COORD_REPLACE 1 False } { glGetIntegerv GL_ACTIVE_TEXTURE 1 TEXTURE0 } { glGetTexEnviv GL_TEXTURE_ENV_MODE 1 MODULATE } { glGetTexEnvfv GL_TEXTURE_ENV_COLOR 4 0,0,0,0 } { glGetTexEnvfv GL_TEXTURE_LOD_BIAS 1 0.0 } { glIsEnabled GL_TEXTURE_GEN_S 1 False } { glIsEnabled GL_TEXTURE_GEN_T 1 False } { glIsEnabled GL_TEXTURE_GEN_R 1 False } { glIsEnabled GL_TEXTURE_GEN_Q 1 False } { glGetTexGenfv GL_EYE_PLANE 1 {see 2.11.4} } { glGetTexGenfv GL_OBJECT_PLANE 1 {see 2.11.4} } { glGetTexGeniv GL_TEXTURE_GEN_MODE 1 EYE_LINEAR } { glGetTexEnviv GL_COMBINE_RGB 1 MODULATE } { glGetTexEnviv GL_COMBINE_ALPHA 1 MODULATE } { glGetTexEnviv GL_SRC0_RGB 1 TEXTURE } { glGetTexEnviv GL_SRC1_RGB 1 PREVIOUS } { glGetTexEnviv GL_SRC2_RGB 1 CONSTANT } { glGetTexEnviv GL_SRC0_ALPHA 1 TEXTURE } { glGetTexEnviv GL_SRC1_ALPHA 1 PREVIOUS } { glGetTexEnviv GL_SRC2_ALPHA 1 CONSTANT } { glGetTexEnviv GL_OPERAND0_RGB 1 SRC_COLOR } { glGetTexEnviv GL_OPERAND1_RGB 1 SRC_COLOR } { glGetTexEnviv GL_OPERAND2_RGB 1 {SRC ALPHA} } { glGetTexEnviv GL_OPERAND0_ALPHA 1 {SRC ALPHA} } { glGetTexEnviv GL_OPERAND1_ALPHA 1 {SRC ALPHA} } { glGetTexEnviv GL_OPERAND2_ALPHA 1 SRC_ALPHA } { glGetTexEnvfv GL_RGB_SCALE 1 1.0 } { glGetTexEnvfv GL_ALPHA_SCALE 1 1.0 } { glIsEnabled GL_SCISSOR_TEST 1 False } { glGetIntegerv GL_SCISSOR_BOX 1 {see 4.1.2} } { glIsEnabled GL_ALPHA_TEST 1 False } { glGetIntegerv GL_ALPHA_TEST_FUNC 1 ALWAYS } { glGetIntegerv GL_ALPHA_TEST_REF 1 0 } { glIsEnabled GL_STENCIL_TEST 1 False } { glGetIntegerv GL_STENCIL_FUNC 1 ALWAYS } { glGetIntegerv GL_STENCIL_VALUE_MASK 1 1's } { glGetIntegerv GL_STENCIL_REF 1 0 } { glGetIntegerv GL_STENCIL_FAIL 1 KEEP } { glGetIntegerv GL_STENCIL_PASS_DEPTH_FAIL 1 KEEP } { glGetIntegerv GL_STENCIL_PASS_DEPTH_PASS 1 KEEP } { glGetIntegerv GL_STENCIL_BACK_FUNC 1 ALWAYS } { glGetIntegerv GL_STENCIL_BACK_VALUE_MASK 1 1's } { glGetIntegerv GL_STENCIL_BACK_REF 1 0 } { glGetIntegerv GL_STENCIL_BACK_FAIL 1 KEEP } { glGetIntegerv GL_STENCIL_BACK_PASS_DEPTH_FAIL 1 KEEP } { glGetIntegerv GL_STENCIL_BACK_PASS_DEPTH_PASS 1 KEEP } { glIsEnabled GL_DEPTH_TEST 1 False } { glGetIntegerv GL_DEPTH_FUNC 1 LESS } { glIsEnabled GL_BLEND 1 False } { glGetIntegerv GL_BLEND_SRC_RGB 1 ONE } { glGetIntegerv GL_BLEND_SRC 1 ONE } { glGetIntegerv GL_BLEND_SRC_ALPHA 1 ONE } { glGetIntegerv GL_BLEND_DST_RGB 1 ZERO } { glGetIntegerv GL_BLEND_DST 1 ZERO } { glGetIntegerv GL_BLEND_DST_ALPHA 1 ZERO } { glGetIntegerv GL_BLEND_EQUATION_RGB 1 FUNC_ADD } { glGetIntegerv GL_BLEND_EQUATION 1 FUNC_ADD } { glGetIntegerv GL_BLEND_EQUATION_ALPHA 1 FUNC_ADD } { glGetFloatv GL_BLEND_COLOR 4 0,0,0,0 } { glIsEnabled GL_DITHER 1 True } { glIsEnabled GL_INDEX_LOGIC_OP 1 False } { glIsEnabled GL_LOGIC_OP 1 False } { glIsEnabled GL_COLOR_LOGIC_OP 1 False } { glGetIntegerv GL_LOGIC_OP_MODE 1 COPY } { glGetIntegerv GL_DRAW_BUFFER_i 1 {see 4.2.1} } { glGetIntegerv GL_INDEX_WRITEMASK 1 1's } { glGetBooleanv GL_COLOR_WRITEMASK 1 True } { glGetBooleanv GL_DEPTH_WRITEMASK 1 True } { glGetIntegerv GL_STENCIL_WRITEMASK 1 1's } { glGetIntegerv GL_STENCIL_BACK_WRITEMASK 1 1's } { glGetFloatv GL_COLOR_CLEAR_VALUE 4 0,0,0,0 } { glGetFloatv GL_INDEX_CLEAR_VALUE 1 0 } { glGetIntegerv GL_DEPTH_CLEAR_VALUE 1 1 } { glGetIntegerv GL_STENCIL_CLEAR_VALUE 1 0 } { glGetFloatv GL_ACCUM_CLEAR_VALUE 1 0 } { glGetBooleanv GL_UNPACK_SWAP_BYTES 1 False } { glGetBooleanv GL_UNPACK_LSB_FIRST 1 False } { glGetIntegerv GL_UNPACK_IMAGE_HEIGHT 1 0 } { glGetIntegerv GL_UNPACK_SKIP_IMAGES 1 0 } { glGetIntegerv GL_UNPACK_ROW_LENGTH 1 0 } { glGetIntegerv GL_UNPACK_SKIP_ROWS 1 0 } { glGetIntegerv GL_UNPACK_SKIP_PIXELS 1 0 } { glGetIntegerv GL_UNPACK_ALIGNMENT 1 4 } { glGetBooleanv GL_PACK_SWAP_BYTES 1 False } { glGetBooleanv GL_PACK_LSB_FIRST 1 False } { glGetIntegerv GL_PACK_IMAGE_HEIGHT 1 0 } { glGetIntegerv GL_PACK_SKIP_IMAGES 1 0 } { glGetIntegerv GL_PACK_ROW_LENGTH 1 0 } { glGetIntegerv GL_PACK_SKIP_ROWS 1 0 } { glGetIntegerv GL_PACK_SKIP_PIXELS 1 0 } { glGetIntegerv GL_PACK_ALIGNMENT 1 4 } { glGetBooleanv GL_MAP_COLOR 1 False } { glGetBooleanv GL_MAP_STENCIL 1 False } { glGetIntegerv GL_INDEX_SHIFT 1 0 } { glGetIntegerv GL_INDEX_OFFSET 1 0 } { glGetFloatv GL_RED_SCALE 1 1 } { glGetFloatv GL_GREEN_SCALE 1 1 } { glGetFloatv GL_BLUE_SCALE 1 1 } { glGetFloatv GL_ALPHA_SCALE 1 1 } { glGetFloatv GL_DEPTH_SCALE 1 1 } { glGetFloatv GL_RED_BIAS 1 0 } { glGetFloatv GL_GREEN_BIAS 1 0 } { glGetFloatv GL_BLUE_BIAS 1 0 } { glGetFloatv GL_ALPHA_BIAS 1 0 } { glGetFloatv GL_DEPTH_BIAS 1 0 } { glIsEnabled GL_COLOR_TABLE 1 False } { glIsEnabled GL_POST_CONVOLUTION_COLOR_TABLE 1 False } { glIsEnabled GL_POST_COLOR_MATRIX_COLOR_TABLE 1 False } { glGetColorTable GL_COLOR_TABLE 1 empty } { glGetColorTable GL_POST_CONVOLUTION_COLOR_TABLE 1 empty } { glGetColorTable GL_POST_COLOR_MATRIX_COLOR_TABLE 1 empty } { glGetColorTableParameteriv GL_COLOR_TABLE_FORMAT 1 RGBA } { glGetColorTableParameteriv GL_COLOR_TABLE_WIDTH 1 0 } { glGetColorTableParameteriv GL_COLOR_TABLE_RED_SIZE 1 0 } { glGetColorTableParameteriv GL_COLOR_TABLE_GREEN_SIZE 1 0 } { glGetColorTableParameteriv GL_COLOR_TABLE_BLUE_SIZE 1 0 } { glGetColorTableParameteriv GL_COLOR_TABLE_ALPHA_SIZE 1 0 } { glGetColorTableParameteriv GL_COLOR_TABLE_LUMINANCE_SIZE 1 0 } { glGetColorTableParameteriv GL_COLOR_TABLE_INTENSITY_SIZE 1 0 } { glGetColorTableParameterfv GL_COLOR_TABLE_SCALE 4 1,1,1,1 } { glGetColorTableParameterfv GL_COLOR_TABLE_BIAS 4 0,0,0,0 } { glIsEnabled GL_CONVOLUTION_1D 1 False } { glIsEnabled GL_CONVOLUTION_2D 1 False } { glIsEnabled GL_SEPARABLE_2D 1 False } { glGetConvolutionFilter GL_CONVOLUTION_1D 1 empty } { glGetConvolutionFilter GL_CONVOLUTION_2D 1 empty } { glGetSeparableFilter GL_SEPARABLE_2D 1 empty } { glGetConvolutionParameterfv GL_CONVOLUTION_BORDER_COLOR 4 0,0,0,0 } { glGetConvolutionParameteriv GL_CONVOLUTION_BORDER_MODE 1 REDUCE } { glGetConvolutionParameterfv GL_CONVOLUTION_FILTER_SCALE 4 1,1,1,1 } { glGetConvolutionParameterfv GL_CONVOLUTION_FILTER_BIAS 4 0,0,0,0 } { glGetConvolutionParameteriv GL_CONVOLUTION_FORMAT 1 RGBA } { glGetConvolutionParameteriv GL_CONVOLUTION_WIDTH 1 0 } { glGetConvolutionParameteriv GL_CONVOLUTION_HEIGHT 1 0 } { glGetFloatv GL_POST_CONVOLUTION_RED_SCALE 1 1 } { glGetFloatv GL_POST_CONVOLUTION_GREEN_SCALE 1 1 } { glGetFloatv GL_POST_CONVOLUTION_BLUE_SCALE 1 1 } { glGetFloatv GL_POST_CONVOLUTION_ALPHA_SCALE 1 1 } { glGetFloatv GL_POST_CONVOLUTION_RED_BIAS 1 0 } { glGetFloatv GL_POST_CONVOLUTION_GREEN_BIAS 1 0 } { glGetFloatv GL_POST_CONVOLUTION_BLUE_BIAS 1 0 } { glGetFloatv GL_POST_CONVOLUTION_ALPHA_BIAS 1 0 } { glGetFloatv GL_POST_COLOR_MATRIX_RED_SCALE 1 1 } { glGetFloatv GL_POST_COLOR_MATRIX_GREEN_SCALE 1 1 } { glGetFloatv GL_POST_COLOR_MATRIX_BLUE_SCALE 1 1 } { glGetFloatv GL_POST_COLOR_MATRIX_ALPHA_SCALE 1 1 } { glGetFloatv GL_POST_COLOR_MATRIX_RED_BIAS 1 0 } { glGetFloatv GL_POST_COLOR_MATRIX_GREEN_BIAS 1 0 } { glGetFloatv GL_POST_COLOR_MATRIX_BLUE_BIAS 1 0 } { glGetFloatv GL_POST_COLOR_MATRIX_ALPHA_BIAS 1 0 } { glIsEnabled GL_HISTOGRAM 1 False } { glGetHistogram GL_HISTOGRAM 1 empty } { glGetHistogramParameteriv GL_HISTOGRAM_WIDTH 1 0 } { glGetHistogramParameteriv GL_HISTOGRAM_FORMAT 1 RGBA } { glGetHistogramParameteriv GL_HISTOGRAM_RED_SIZE 1 0 } { glGetHistogramParameteriv GL_HISTOGRAM_GREEN_SIZE 1 0 } { glGetHistogramParameteriv GL_HISTOGRAM_BLUE_SIZE 1 0 } { glGetHistogramParameteriv GL_HISTOGRAM_ALPHA_SIZE 1 0 } { glGetHistogramParameteriv GL_HISTOGRAM_LUMINANCE_SIZE 1 0 } { glGetHistogramParameteriv GL_HISTOGRAM SINK 1 False } { glIsEnabled GL_MINMAX 1 False } { glGetMinmax GL_MINMAX 8 M,M,M,M),(m,m,m,m } { glGetMinmaxParameteriv GL_MINMAX_FORMAT 1 RGBA } { glGetMinmaxParameteriv GL_MINMAX_SINK 1 False } { glGetFloatv GL_ZOOM_X 1 1.0 } { glGetFloatv GL_ZOOM_Y 1 1.0 } { glGetPixelMapfv GL_PIXEL_MAP_I_TO_I 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_S_TO_S 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_I_TO_R 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_I_TO_G 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_I_TO_B 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_I_TO_A 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_R_TO_R 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_G_TO_G 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_B_TO_B 1 0's } { glGetPixelMapfv GL_PIXEL_MAP_A_TO_A 1 0's } { glGetIntegerv GL_PIXEL_MAP_I_TO_I_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_S_TO_S_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_I_TO_R_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_I_TO_G_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_I_TO_B_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_I_TO_A_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_R_TO_R_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_G_TO_G_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_B_TO_B_SIZE 1 1 } { glGetIntegerv GL_PIXEL_MAP_A_TO_A_SIZE 1 1 } { glGetIntegerv GL_READ_BUFFER 1 {see 4.3.2} } { glGetMapiv GL_ORDER 1 1 } { glGetMapiv GL_ORDER 2 1,1 } { glGetMapfv GL_COEFF 1 {see 5.1} } { glGetMapfv GL_COEFF 1 {see 5.1} } { glGetMapfv GL_DOMAIN 1 {see 5.1} } { glGetMapfv GL_DOMAIN 1 {see 5.1} } { glIsEnabled GL_MAP1_NORMAL 1 False } { glIsEnabled GL_MAP2_NORMAL 1 False } { glGetFloatv GL_MAP1_GRID_DOMAIN 2 0,1 } { glGetFloatv GL_MAP2_GRID_DOMAIN 3 {0,1;0,1} } { glGetFloatv GL_MAP1_GRID_SEGMENTS 1 1 } { glGetFloatv GL_MAP2_GRID_SEGMENTS 2 1,1 } { glIsEnabled GL_AUTO_NORMAL 1 False } { glGetShaderSource - 1 empty } { glGetIntegerv GL_CURRENT_PROGRAM 1 0 } { glGetProgramiv GL_DELETE_STATUS 1 False } { glGetProgramiv GL_LINK_STATUS 1 False } { glGetProgramiv GL_VALIDATE_STATUS 1 False } { glGetProgramiv GL_ATTACHED_SHADERS 1 0 } { glGetAttachedObjects - 1 empty } { glGetProgramiv GL_INFO_LOG_LENGTH 1 0 } { glGetProgramiv GL_ACTIVE_UNIFORMS 1 0 } { glGetUniformLocation - 1 - } { glGetActiveUniform - 1 - } { glGetActiveUniform - 1 - } { glGetActiveUniform - 1 empty } { glGetProgramiv GL_ACTIVE_UNIFORM_MAX_LENGTH 1 0 } { glGetUniformfv - 1 0 } { glGetProgramiv GL_ACTIVE_ATTRIBUTES 1 0 } { glGetAttribLocation - 1 - } { glGetActiveAttrib - 1 - } { glGetActiveAttrib - 1 - } { glGetActiveAttrib - 1 empty } { glGetProgramiv GL_ACTIVE_ATTRIBUTES_MAX_LENGTH 1 0 } { glIsEnabled GL_VERTEX_PROGRAM_TWO_SIDE 1 False } { glGetVertexAttribfv GL_CURRENT_VERTEX_ATTRIB 4 0,0,0,1 } { glIsEnabled GL_VERTEX_PROGRAM_POINT_SIZE 1 False } { glGetIntegerv GL_PERSPECTIVE_CORRECTION_HINT 1 DONT_CARE } { glGetIntegerv GL_POINT_SMOOTH_HINT 1 DONT_CARE } { glGetIntegerv GL_LINE_SMOOTH_HINT 1 DONT_CARE } { glGetIntegerv GL_POLYGON_SMOOTH_HINT 1 DONT_CARE } { glGetIntegerv GL_FOG_HINT 1 DONT_CARE } { glGetIntegerv GL_GENERATE_MIPMAP_HINT 1 DONT_CARE } { glGetIntegerv GL_TEXTURE_COMPRESSION_HINT 1 DONT_CARE } { glGetIntegerv GL_FRAGMENT_SHADER_DERIVATIVE_HINT 1 DONT_CARE } { glGetIntegerv GL_MAX_LIGHTS 1 8 } { glGetIntegerv GL_MAX_CLIP_PLANES 1 6 } { glGetIntegerv GL_MAX_COLOR_MATRIX_STACK_DEPTH 1 2 } { glGetIntegerv GL_MAX_MODELVIEW_STACK_DEPTH 1 32 } { glGetIntegerv GL_MAX_PROJECTION_STACK_DEPTH 1 2 } { glGetIntegerv GL_MAX_TEXTURE_STACK_DEPTH 1 2 } { glGetIntegerv GL_SUBPIXEL_BITS 1 4 } { glGetIntegerv GL_MAX_3D_TEXTURE_SIZE 1 16 } { glGetIntegerv GL_MAX_TEXTURE_SIZE 1 64 } { glGetFloatv GL_MAX_TEXTURE_LOD_BIAS 1 2.0 } { glGetIntegerv GL_MAX_CUBE_MAP_TEXTURE_SIZE 1 16 } { glGetIntegerv GL_MAX_PIXEL_MAP_TABLE 1 32 } { glGetIntegerv GL_MAX_NAME_STACK_DEPTH 1 64 } { glGetIntegerv GL_MAX_LIST_NESTING 1 64 } { glGetIntegerv GL_MAX_EVAL_ORDER 1 8 } { glGetIntegerv GL_MAX_VIEWPORT_DIMS 1 {see 2.11.1} } { glGetIntegerv GL_MAX_ATTRIB_STACK_DEPTH 1 16 } { glGetIntegerv GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 1 16 } { gl- - 1 32 } { gl- - 1 32 } { glGetIntegerv GL_AUX_BUFFERS 1 0 } { glGetBooleanv GL_RGBA_MODE 1 - } { glGetBooleanv GL_INDEX_MODE 1 - } { glGetBooleanv GL_DOUBLEBUFFER 1 - } { glGetBooleanv GL_STEREO 1 - } { glGetFloatv GL_ALIASED_POINT_SIZE_RANGE 2 1,1 } { glGetFloatv GL_SMOOTH_POINT_SIZE_RANGE 2 1,1 } { glGetFloatv GL_POINT_SIZE_RANGE 2 1,1 } { glGetFloatv GL_SMOOTH_POINT_SIZE_GRANULARITY 1 - } { glGetFloatv GL_POINT_SIZE_GRANULARITY 1 - } { glGetFloatv GL_ALIASED_LINE_WIDTH_RANGE 2 1,1 } { glGetFloatv GL_SMOOTH_LINE_WIDTH_RANGE 2 1,1 } { glGetFloatv GL_LINE_WIDTH_RANGE 2 1,1 } { glGetFloatv GL_SMOOTH_LINE_WIDTH_GRANULARITY 1 - } { glGetFloatv GL_LINE_WIDTH_GRANULARITY 1 - } { glGetConvolutionParameteriv GL_MAX_CONVOLUTION_WIDTH 1 3 } { glGetConvolutionParameteriv GL_MAX_CONVOLUTION_HEIGHT 1 3 } { glGetIntegerv GL_MAX_ELEMENTS_INDICES 1 - } { glGetIntegerv GL_MAX_ELEMENTS_VERTICES 1 - } { glGetIntegerv GL_SAMPLE_BUFFERS 1 0 } { glGetIntegerv GL_SAMPLES 1 0 } { glGetIntegerv GL_COMPRESSED_TEXTURE_FORMATS 1 - } { glGetIntegerv GL_NUM_COMPRESSED_TEXTURE_FORMATS 1 0 } { glGetQueryiv GL_QUERYCOUNTER_BITS 1 {see 6.1.12} } { glGetString GL_EXTENSIONS 1 - } { glGetString GL_RENDERER 1 - } { glGetString GL_SHADING_LANGUAGE_VERSION 1 - } { glGetString GL_VENDOR 1 - } { glGetString GL_VERSION 1 - } { glGetIntegerv GL_MAX_TEXTURE_UNITS 1 2 } { glGetIntegerv GL_MAX_VERTEX_ATTRIBS 1 16 } { glGetIntegerv GL_MAX_VERTEX_UNIFORM_COMPONENTS 1 512 } { glGetIntegerv GL_MAX_VARYING_FLOATS 1 32 } { glGetIntegerv GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 1 2 } { glGetIntegerv GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 1 0 } { glGetIntegerv GL_MAX_TEXTURE_IMAGE_UNITS 1 2 } { glGetIntegerv GL_MAX_TEXTURE_COORDS 1 2 } { glGetIntegerv GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 1 64 } { glGetIntegerv GL_MAX_DRAW_BUFFERS 1 1+ } { glGetIntegerv GL_RED_BITS 1 - } { glGetIntegerv GL_GREEN_BITS 1 - } { glGetIntegerv GL_BLUE_BITS 1 - } { glGetIntegerv GL_ALPHA_BITS 1 - } { glGetIntegerv GL_INDEX_BITS 1 - } { glGetIntegerv GL_DEPTH_BITS 1 - } { glGetIntegerv GL_STENCIL_BITS 1 - } { glGetIntegerv GL_ACCUM_RED_BITS 1 - } { glGetIntegerv GL_ACCUM_GREEN_BITS 1 - } { glGetIntegerv GL_ACCUM_BLUE_BITS 1 - } { glGetIntegerv GL_ACCUM_ALPHA_BITS 1 - } { glGetIntegerv GL_LIST_BASE 1 0 } { glGetIntegerv GL_LIST_INDEX 1 0 } { glGetIntegerv GL_LIST_MODE 1 0 } { gl- - 1 empty } { glGetIntegerv GL_ATTRIB_STACK_DEPTH 1 0 } { gl- - 1 empty } { glGetIntegerv GL_CLIENT_ATTRIB_STACK_DEPTH 1 0 } { glGetIntegerv GL_NAME_STACK_DEPTH 1 0 } { glGetIntegerv GL_RENDER_MODE 1 RENDER } { glGetPointerv GL_SELECTION_BUFFER_POINTER 1 0 } { glGetIntegerv GL_SELECTION_BUFFER_SIZE 1 0 } { glGetPointerv GL_FEEDBACK_BUFFER_POINTER 1 0 } { glGetIntegerv GL_FEEDBACK_BUFFER_SIZE 1 0 } { glGetIntegerv GL_FEEDBACK_BUFFER_TYPE 1 2D } { glGetError - 1 0 } { gl- - 1 False } { gl- - 1 False } { glGetQueryiv GL_CURRENT_QUERY 1 0 } { gl- - 1 0 } } } proc tcl3dGetStates {{sortFlag none}} { return [tcl3dOglGetStates $sortFlag] } proc tcl3dGetTmpDir {} { global tcl_platform env set tmpDir "" # Try different environment variables. if { [info exists env(TMP)] && [file isdirectory $env(TMP)] } { set tmpDir $env(TMP) } elseif { [info exists env(TEMP)] && [file isdirectory $env(TEMP)] } { set tmpDir $env(TEMP) } elseif { [info exists env(TMPDIR)] && [file isdirectory $env(TMPDIR)] } { set tmpDir $env(TMPDIR) } else { # Last resort. These directories should be available at least. switch $tcl_platform(platform) { windows { if { [file isdirectory "C:/Windows/Temp"] } { set tmpDir "C:/Windows/Temp" } elseif { [file isdirectory "C:/Winnt/Temp"] } { set tmpDir "C:/Winnt/Temp" } } unix { if { [file isdirectory "/tmp"] } { set tmpDir "/tmp" } } } } return [file nativename $tmpDir] } proc tcl3dGetVersions {} { return [tcl3dOglGetVersions] } proc tcl3dGl2psCreatePdf {toglwin filename {title "Tcl3D Screenshot"} {drawBackground 0} {producer Tcl3D}} { set retVal [catch {fopen $filename wb} fp] if { $retVal != 0 } { error "Could not open file $filename for writing" } set opt [expr {$::GL2PS_OCCLUSION_CULL | $::GL2PS_USE_CURRENT_VIEWPORT | $::GL2PS_SILENT}] if { $drawBackground } { set opt [expr {$opt | $::GL2PS_DRAW_BACKGROUND}] } set bufSize 0 set state $::GL2PS_OVERFLOW while { $state == $::GL2PS_OVERFLOW } { set bufSize [expr {$bufSize + 1024*1024}] set retVal [gl2psBeginPage $title $producer NULL $::GL2PS_PDF $::GL2PS_SIMPLE_SORT $opt $::GL_RGBA 0 NULL 0 0 0 $bufSize $fp $title] if { $retVal == $::GL2PS_ERROR } { error "Could not initialize PDF creation: gl2psBeginPage" } $toglwin render set state [gl2psEndPage] if { $retVal == $::GL2PS_ERROR } { error "Could not write PDF: gl2psEndPage" } } fclose $fp } proc tcl3dGl2psGetVersion {} { if { [info exists ::GL2PS_MAJOR_VERSION] } { return [format "%d.%d.%d" $::GL2PS_MAJOR_VERSION $::GL2PS_MINOR_VERSION $::GL2PS_PATCH_VERSION] } else { return "" } } proc tcl3dHaveAqua {} { if { [tk windowingsystem] eq "aqua" } { return true } else { return false } } proc tcl3dHaveCg {} { return $::__tcl3dPkgInfo(tcl3dcg,avail) } proc tcl3dHaveExtension {extensionName} { return [tcl3dOglHaveExtension $extensionName] } proc tcl3dHaveFTGL {} { return $::__tcl3dPkgInfo(tcl3dftgl,avail) } proc tcl3dHaveGl2ps {} { return $::__tcl3dPkgInfo(tcl3dgl2ps,avail) } proc tcl3dHaveOde {} { return $::__tcl3dPkgInfo(tcl3dode,avail) } proc tcl3dHaveOsg {} { return $::__tcl3dPkgInfo(tcl3dosg,avail) } proc tcl3dHavePackage {pkgName version} { uplevel #0 [package unknown] [list $pkgName $version] foreach found [package versions $pkgName] { if {[package vsatisfies $found $version]} { return 1 } } return 0 } proc tcl3dHaveSDL {} { return $::__tcl3dPkgInfo(tcl3dsdl,avail) } proc tcl3dHaveVersion {majorWanted {minorWanted 0} {patchWanted 0}} { return [tcl3dOglHaveVersion $majorWanted $minorWanted $patchWanted] } proc tcl3dHeightmapFromPhoto {phImg flHeightScale flResolution} { return [tcl3dDemoUtilHeightmapFromPhoto $phImg $flHeightScale $flResolution] } proc tcl3dImg2Clipboard {phImg} { global __tcl3dCaptureInt if { !$__tcl3dCaptureInt(base64,avail) } { error "Base64 extension not available" } if { !$__tcl3dCaptureInt(twapi,avail) } { error "Twapi extension not available" } # First 14 bytes are bitmapfileheader - get rid of this set data [string range [base64::decode [$phImg data -format bmp]] 14 end] twapi::open_clipboard twapi::empty_clipboard twapi::write_clipboard 8 $data twapi::close_clipboard } proc tcl3dInit {} { tcl3dOglExtInit } proc tcl3dLogoDestroyPoSoft {} { global __tcl3dLogoWackel global __tcl3dLogoWinId global __tcl3dLogoWithdrawnWinId if { [info exists __tcl3dLogoWinId] && [winfo exists $__tcl3dLogoWinId] } { __tcl3dLogoShrinkWindow $__tcl3dLogoWinId x set __tcl3dLogoWackel(onoff) 0 image delete $__tcl3dLogoWackel(0) image delete $__tcl3dLogoWackel(1) destroy $__tcl3dLogoWinId if { [winfo exists $__tcl3dLogoWithdrawnWinId] } { wm deiconify $__tcl3dLogoWithdrawnWinId } } } proc tcl3dLogoDestroyTcl {w img} { __tcl3dLogoShrinkWindow $w y image delete $img destroy $w } proc tcl3dLogoShowPoSoft {version copyright {withdrawWin ""}} { global __tcl3dLogoWackel global __tcl3dLogoWinId global __tcl3dLogoWithdrawnWinId set t ".poShowLogo" set __tcl3dLogoWinId $t set __tcl3dLogoWithdrawnWinId $withdrawWin if { [winfo exists $t] } { tcl3dWinRaise $t return } set __tcl3dLogoWackel(0) [image create photo -data [__tcl3dLogoPoLogo200_text]] set __tcl3dLogoWackel(1) [image create photo -data [__tcl3dLogoPoLogo200_text_flip]] set __tcl3dLogoWackel(onoff) 0 set __tcl3dLogoWackel(curImg) 0 set __tcl3dLogoWackel(wackelSpeed) 500 if { [catch {toplevel $t -visual truecolor}] } { toplevel $t } frame $t.f pack $t.f wm resizable $t false false if { [string compare $withdrawWin ""] == 0 } { wm title $t "poSoft Information" } else { if { [string compare $withdrawWin "."] != 0 } { wm withdraw . } if { [winfo exists $withdrawWin] } { wm withdraw $withdrawWin set __tcl3dLogoWithdrawnWinId $withdrawWin } wm overrideredirect $t 1 set xmax [winfo screenwidth $t] set ymax [winfo screenheight $t] set x0 [expr {($xmax - [image width $__tcl3dLogoWackel(0)])/2}] set y0 [expr {($ymax - [image height $__tcl3dLogoWackel(0)])/2}] wm geometry $t "+$x0+$y0" $t.f configure -borderwidth 10 raise $t update } label $t.f.l1 -text "Paul Obermeier's Portable Software" pack $t.f.l1 -fill x button $t.f.l2 -image $__tcl3dLogoWackel(0) bind $t.f.l2 { __tcl3dLogoSetWackelDelay %x %y } bind $t.f.l2 "__tcl3dLogoStartWackel $t.f.l2" bind $t.f.l2 "__tcl3dLogoSwitchLogo $t.f.l2" pack $t.f.l2 label $t.f.l3 -text $version pack $t.f.l3 -fill x label $t.f.l4 -text $copyright pack $t.f.l4 -fill x if { [string compare $withdrawWin ""] == 0 } { button $t.f.b -text "OK" -command "tcl3dLogoDestroyPoSoft" pack $t.f.b -fill x bind $t "tcl3dLogoDestroyPoSoft" bind $t "tcl3dLogoDestroyPoSoft" focus $t update } else { focus $t update after 500 __tcl3dLogoSwitchLogo $t.f.l2 update after 300 } } proc tcl3dLogoShowTcl {args} { global __url set t ".tcl3dLogoShowTcl" if { [winfo exists $t] } { tcl3dWinRaise $t return } if { [catch {toplevel $t -visual truecolor}] } { toplevel $t } wm title $t "Tcl/Tk Information" wm resizable $t false false set ph [image create photo -data [__tcl3dLogoPwrdLogo200]] button $t.img -image $ph pack $t.img label $t.l1 -anchor w -text "With a little help from my Tcl friends ..." pack $t.l1 set row 0 frame $t.f -relief sunken -borderwidth 2 pack $t.f -fill both -expand 1 foreach extension $args { set retVal [catch {package present $extension} versionStr] if { $retVal != 0 } { set versionStr "(not loaded)" } switch $extension { Tk { set progName "Tcl/Tk [info patchlevel]" set __url($row) "http://www.tcl.tk" set author "all Tcl/Tk core developers" } Img { set progName "Img $versionStr" set __url($row) "http://sourceforge.net/projects/tkImg/" set author "Jan Nijtmans, Andreas Kupries" } Tktable { set progName "Tktable $versionStr" set __url($row) "https://sourceforge.net/projects/tktable/" set author "Jeffrey Hobbs" } mktclapp { set progName "mktclapp 3.9" set __url($row) "http://www.hwaci.com/sw/mktclapp" set author "D. Richard Hipp" } combobox { set progName "combobox $versionStr" set __url($row) "http://www2.clearlight.com/~oakley" set author "Bryan Oakley" } mysqltcl { set progName "mysqltcl $versionStr" set __url($row) "http://www.xdobry.de/mysqltcl" set author "Hakan Soderlund, Tobias Ritzau ..." } tcom { set progName "tcom $versionStr" set __url($row) "http://www.vex.net/~cthuang/tcom" set author "Chin Huang" } tablelist { set progName "tablelist $versionStr" set __url($row) "http://www.nemethi.de" set author "Csaba Nemethi" } } label $t.f.lext$row -text $progName set bgColor [$t.f.lext$row cget -bg] eval entry $t.f.rext$row -state normal -width 35 -relief flat -bg $bgColor -textvariable __url($row) grid $t.f.lext$row -row $row -column 0 -sticky w grid $t.f.rext$row -row $row -column 1 -sticky w incr row } button $t.b -text "OK" -command "tcl3dLogoDestroyTcl $t $ph" pack $t.b -fill x bind $t "tcl3dLogoDestroyTcl $t $ph" bind $t "tcl3dLogoDestroyTcl $t $ph" focus $t } proc tcl3dMatfPrint {mat {precisionString %6.3f}} { for { set i 0 } { $i < 4 } { incr i } { for { set j 0 } { $j < 4 } { incr j } { puts -nonewline [format "$precisionString " [$mat get [expr 4*$j + $i]]] } puts "" } } proc tcl3dName2Hex {colorName} { global __tcl3dColorList if {[string index $colorName 0] eq "#" } { return $colorName } else { set ind [lsearch $__tcl3dColorList $colorName] if { $ind >= 0 } { set rgb [lrange $__tcl3dColorList [expr $ind+1] [expr $ind+3]] return [eval "format \#%02X%02X%02X $rgb"] } } error "Invalid color name \"$colorName\" specified" } proc tcl3dName2Hexa {colorName} { return [eval "format %s%02X [tcl3dName2Hex $colorName] 255"] } proc tcl3dName2rgb {colorName} { global __tcl3dColorList if {[string index $colorName 0] eq "#" } { scan $colorName "#%2x%2x%2x" r g b return [list $r $g $b] } else { set ind [lsearch $__tcl3dColorList $colorName] if { $ind >= 0 } { return [lrange $__tcl3dColorList [expr $ind+1] [expr $ind+3]] } } error "Invalid color name \"$colorName\" specified" } proc tcl3dName2rgba {colorName} { return [linsert [tcl3dName2rgb $colorName] end 255] } proc tcl3dName2rgbaf {colorName} { foreach elem [tcl3dName2rgba $colorName] { lappend l [expr {$elem / 255.0}] } return $l } proc tcl3dName2rgbf {colorName} { foreach elem [tcl3dName2rgb $colorName] { lappend l [expr {$elem / 255.0}] } return $l } proc tcl3dNumToChar {num} { return [format "%c" $num] } proc tcl3dOdeGetVersion {} { if { [info commands dWorldCreate] ne "" } { return [format "%d.%d.%d" 0 7 0] } else { return "" } } proc tcl3dOglExtInit {} { if { [info commands glewInit] ne "" } { # GLEW based wrapper. Tcl3D Version >= 0.4 glewInit } elseif { [info commands glexGetVersion] ne "" } { # OglExt based wrapper. Tcl3D Version >= 0.2 glexGetVersion } else { error "OpenGL extension library not wrapped" } } proc tcl3dOglFindFunc {glFunc} { if { [tcl3dOglHaveFunc $glFunc] } { return $glFunc } else { foreach ext [tcl3dOglGetExtSuffixes] { set func "${glFunc}${ext}" if { [tcl3dOglHaveFunc $func] } { return $func } } } return "" } proc tcl3dOglGetDoubleState {state {numVals 1}} { if { $numVals <= 0 } { error "Number of values must be greater than zero" } set vec [tcl3dVector GLdouble $numVals] glGetDoublev $state $vec if { $numVals == 1 } { set val [$vec get 0] } else { set val [tcl3dVectorToList $vec $numVals] } $vec delete return $val } proc tcl3dOglGetError {} { set err [glGetError] if { $err == $::GL_NO_ERROR } { return "" } return [format "GL error: 0X%X (%s)" $err [gluErrorString $err]] } proc tcl3dOglGetExtSuffixes {} { return { "ARB" "EXT" "NV" "ATI" "SGI" "SGIX" "SGIS" "SUN" "WIN" "MESA" "INTEL" "IBM" "HP" } } proc tcl3dOglGetExtensions {} { set versList {} set version [string trim [glGetString GL_EXTENSIONS]] lappend versList [list GL_EXTENSIONS $version] if { [info exists ::GLU_VERSION_1_1] } { set version [string trim [gluGetString GLU_EXTENSIONS]] lappend versList [list GLU_EXTENSIONS $version] } return $versList } proc tcl3dOglGetFloatState {state {numVals 1}} { if { $numVals <= 0 } { error "Number of values must be greater than zero" } set vec [tcl3dVector GLfloat $numVals] glGetFloatv $state $vec if { $numVals == 1 } { set val [$vec get 0] } else { set val [tcl3dVectorToList $vec $numVals] } $vec delete return $val } proc tcl3dOglGetFuncList {} { return [list glAccum glAlphaFunc glAreTexturesResident glArrayElement glBegin glBindTexture glBitmap glBlendFunc glCallList glCallLists glClear glClearAccum glClearColor glClearDepth glClearIndex glClearStencil glClipPlane glColor3b glColor3bv glColor3d glColor3dv glColor3f glColor3fv glColor3i glColor3iv glColor3s glColor3sv glColor3ub glColor3ubv glColor3ui glColor3uiv glColor3us glColor3usv glColor4b glColor4bv glColor4d glColor4dv glColor4f glColor4fv glColor4i glColor4iv glColor4s glColor4sv glColor4ub glColor4ubv glColor4ui glColor4uiv glColor4us glColor4usv glColorMask glColorMaterial glColorPointer glCopyPixels glCopyTexImage1D glCopyTexImage2D glCopyTexSubImage1D glCopyTexSubImage2D glCullFace glDeleteLists glDeleteTextures glDepthFunc glDepthMask glDepthRange glDisable glDisableClientState glDrawArrays glDrawBuffer glDrawElements glDrawPixels glEdgeFlag glEdgeFlagPointer glEdgeFlagv glEnable glEnableClientState glEnd glEndList glEvalCoord1d glEvalCoord1dv glEvalCoord1f glEvalCoord1fv glEvalCoord2d glEvalCoord2dv glEvalCoord2f glEvalCoord2fv glEvalMesh1 glEvalMesh2 glEvalPoint1 glEvalPoint2 glFeedbackBuffer glFinish glFlush glFogf glFogfv glFogi glFogiv glFrontFace glFrustum glGenLists glGenTextures glGetBooleanv glGetClipPlane glGetDoublev glGetError glGetFloatv glGetIntegerv glGetLightfv glGetLightiv glGetMapdv glGetMapfv glGetMapiv glGetMaterialfv glGetMaterialiv glGetPixelMapfv glGetPixelMapuiv glGetPixelMapusv glGetPointerv glGetPolygonStipple glGetString glGetTexEnvfv glGetTexEnviv glGetTexGendv glGetTexGenfv glGetTexGeniv glGetTexImage glGetTexLevelParameterfv glGetTexLevelParameteriv glGetTexParameterfv glGetTexParameteriv glHint glIndexMask glIndexPointer glIndexd glIndexdv glIndexf glIndexfv glIndexi glIndexiv glIndexs glIndexsv glIndexub glIndexubv glInitNames glInterleavedArrays glIsEnabled glIsList glIsTexture glLightModelf glLightModelfv glLightModeli glLightModeliv glLightf glLightfv glLighti glLightiv glLineStipple glLineWidth glListBase glLoadIdentity glLoadMatrixd glLoadMatrixf glLoadName glLogicOp glMap1d glMap1f glMap2d glMap2f glMapGrid1d glMapGrid1f glMapGrid2d glMapGrid2f glMaterialf glMaterialfv glMateriali glMaterialiv glMatrixMode glMultMatrixd glMultMatrixf glNewList glNormal3b glNormal3bv glNormal3d glNormal3dv glNormal3f glNormal3fv glNormal3i glNormal3iv glNormal3s glNormal3sv glNormalPointer glOrtho glPassThrough glPixelMapfv glPixelMapuiv glPixelMapusv glPixelStoref glPixelStorei glPixelTransferf glPixelTransferi glPixelZoom glPointSize glPolygonMode glPolygonOffset glPolygonStipple glPopAttrib glPopClientAttrib glPopMatrix glPopName glPrioritizeTextures glPushAttrib glPushClientAttrib glPushMatrix glPushName glRasterPos2d glRasterPos2dv glRasterPos2f glRasterPos2fv glRasterPos2i glRasterPos2iv glRasterPos2s glRasterPos2sv glRasterPos3d glRasterPos3dv glRasterPos3f glRasterPos3fv glRasterPos3i glRasterPos3iv glRasterPos3s glRasterPos3sv glRasterPos4d glRasterPos4dv glRasterPos4f glRasterPos4fv glRasterPos4i glRasterPos4iv glRasterPos4s glRasterPos4sv glReadBuffer glReadPixels glRectd glRectdv glRectf glRectfv glRecti glRectiv glRects glRectsv glRenderMode glRotated glRotatef glScaled glScalef glScissor glSelectBuffer glShadeModel glStencilFunc glStencilMask glStencilOp glTexCoord1d glTexCoord1dv glTexCoord1f glTexCoord1fv glTexCoord1i glTexCoord1iv glTexCoord1s glTexCoord1sv glTexCoord2d glTexCoord2dv glTexCoord2f glTexCoord2fv glTexCoord2i glTexCoord2iv glTexCoord2s glTexCoord2sv glTexCoord3d glTexCoord3dv glTexCoord3f glTexCoord3fv glTexCoord3i glTexCoord3iv glTexCoord3s glTexCoord3sv glTexCoord4d glTexCoord4dv glTexCoord4f glTexCoord4fv glTexCoord4i glTexCoord4iv glTexCoord4s glTexCoord4sv glTexCoordPointer glTexEnvf glTexEnvfv glTexEnvi glTexEnviv glTexGend glTexGendv glTexGenf glTexGenfv glTexGeni glTexGeniv glTexImage1D glTexImage2D glTexParameterf glTexParameterfv glTexParameteri glTexParameteriv glTexSubImage1D glTexSubImage2D glTranslated glTranslatef glVertex2d glVertex2dv glVertex2f glVertex2fv glVertex2i glVertex2iv glVertex2s glVertex2sv glVertex3d glVertex3dv glVertex3f glVertex3fv glVertex3i glVertex3iv glVertex3s glVertex3sv glVertex4d glVertex4dv glVertex4f glVertex4fv glVertex4i glVertex4iv glVertex4s glVertex4sv glVertexPointer glViewport glCopyTexSubImage3D glDrawRangeElements glTexImage3D glTexSubImage3D glActiveTexture glClientActiveTexture glCompressedTexImage1D glCompressedTexImage2D glCompressedTexImage3D glCompressedTexSubImage1D glCompressedTexSubImage2D glCompressedTexSubImage3D glGetCompressedTexImage glLoadTransposeMatrixd glLoadTransposeMatrixf glMultTransposeMatrixd glMultTransposeMatrixf glMultiTexCoord1d glMultiTexCoord1dv glMultiTexCoord1f glMultiTexCoord1fv glMultiTexCoord1i glMultiTexCoord1iv glMultiTexCoord1s glMultiTexCoord1sv glMultiTexCoord2d glMultiTexCoord2dv glMultiTexCoord2f glMultiTexCoord2fv glMultiTexCoord2i glMultiTexCoord2iv glMultiTexCoord2s glMultiTexCoord2sv glMultiTexCoord3d glMultiTexCoord3dv glMultiTexCoord3f glMultiTexCoord3fv glMultiTexCoord3i glMultiTexCoord3iv glMultiTexCoord3s glMultiTexCoord3sv glMultiTexCoord4d glMultiTexCoord4dv glMultiTexCoord4f glMultiTexCoord4fv glMultiTexCoord4i glMultiTexCoord4iv glMultiTexCoord4s glMultiTexCoord4sv glSampleCoverage glBlendColor glBlendEquation glBlendFuncSeparate glFogCoordPointer glFogCoordd glFogCoorddv glFogCoordf glFogCoordfv glMultiDrawArrays glMultiDrawElements glPointParameterf glPointParameterfv glPointParameteri glPointParameteriv glSecondaryColor3b glSecondaryColor3bv glSecondaryColor3d glSecondaryColor3dv glSecondaryColor3f glSecondaryColor3fv glSecondaryColor3i glSecondaryColor3iv glSecondaryColor3s glSecondaryColor3sv glSecondaryColor3ub glSecondaryColor3ubv glSecondaryColor3ui glSecondaryColor3uiv glSecondaryColor3us glSecondaryColor3usv glSecondaryColorPointer glWindowPos2d glWindowPos2dv glWindowPos2f glWindowPos2fv glWindowPos2i glWindowPos2iv glWindowPos2s glWindowPos2sv glWindowPos3d glWindowPos3dv glWindowPos3f glWindowPos3fv glWindowPos3i glWindowPos3iv glWindowPos3s glWindowPos3sv glBeginQuery glBindBuffer glBufferData glBufferSubData glDeleteBuffers glDeleteQueries glEndQuery glGenBuffers glGenQueries glGetBufferParameteriv glGetBufferPointerv glGetBufferSubData glGetQueryObjectiv glGetQueryObjectuiv glGetQueryiv glIsBuffer glIsQuery glMapBuffer glUnmapBuffer glAttachShader glBindAttribLocation glBlendEquationSeparate glCompileShader glCreateProgram glCreateShader glDeleteProgram glDeleteShader glDetachShader glDisableVertexAttribArray glDrawBuffers glEnableVertexAttribArray glGetActiveAttrib glGetActiveUniform glGetAttachedShaders glGetAttribLocation glGetProgramInfoLog glGetProgramiv glGetShaderInfoLog glGetShaderSource glGetShaderiv glGetUniformLocation glGetUniformfv glGetUniformiv glGetVertexAttribPointerv glGetVertexAttribdv glGetVertexAttribfv glGetVertexAttribiv glIsProgram glIsShader glLinkProgram glShaderSource glStencilFuncSeparate glStencilMaskSeparate glStencilOpSeparate glUniform1f glUniform1fv glUniform1i glUniform1iv glUniform2f glUniform2fv glUniform2i glUniform2iv glUniform3f glUniform3fv glUniform3i glUniform3iv glUniform4f glUniform4fv glUniform4i glUniform4iv glUniformMatrix2fv glUniformMatrix3fv glUniformMatrix4fv glUseProgram glValidateProgram glVertexAttrib1d glVertexAttrib1dv glVertexAttrib1f glVertexAttrib1fv glVertexAttrib1s glVertexAttrib1sv glVertexAttrib2d glVertexAttrib2dv glVertexAttrib2f glVertexAttrib2fv glVertexAttrib2s glVertexAttrib2sv glVertexAttrib3d glVertexAttrib3dv glVertexAttrib3f glVertexAttrib3fv glVertexAttrib3s glVertexAttrib3sv glVertexAttrib4Nbv glVertexAttrib4Niv glVertexAttrib4Nsv glVertexAttrib4Nub glVertexAttrib4Nubv glVertexAttrib4Nuiv glVertexAttrib4Nusv glVertexAttrib4bv glVertexAttrib4d glVertexAttrib4dv glVertexAttrib4f glVertexAttrib4fv glVertexAttrib4iv glVertexAttrib4s glVertexAttrib4sv glVertexAttrib4ubv glVertexAttrib4uiv glVertexAttrib4usv glVertexAttribPointer glUniformMatrix2x3fv glUniformMatrix2x4fv glUniformMatrix3x2fv glUniformMatrix3x4fv glUniformMatrix4x2fv glUniformMatrix4x3fv glBeginConditionalRender glBeginTransformFeedback glBindBufferBase glBindBufferRange glBindFragDataLocation glClampColor glClearBufferfi glClearBufferfv glClearBufferiv glClearBufferuiv glColorMaski glDisablei glEnablei glEndConditionalRender glEndTransformFeedback glGetBooleani_v glGetFragDataLocation glGetIntegeri_v glGetStringi glGetTexParameterIiv glGetTexParameterIuiv glGetTransformFeedbackVarying glGetUniformuiv glGetVertexAttribIiv glGetVertexAttribIuiv glIsEnabledi glTexParameterIiv glTexParameterIuiv glTransformFeedbackVaryings glUniform1ui glUniform1uiv glUniform2ui glUniform2uiv glUniform3ui glUniform3uiv glUniform4ui glUniform4uiv glVertexAttribI1i glVertexAttribI1iv glVertexAttribI1ui glVertexAttribI1uiv glVertexAttribI2i glVertexAttribI2iv glVertexAttribI2ui glVertexAttribI2uiv glVertexAttribI3i glVertexAttribI3iv glVertexAttribI3ui glVertexAttribI3uiv glVertexAttribI4bv glVertexAttribI4i glVertexAttribI4iv glVertexAttribI4sv glVertexAttribI4ubv glVertexAttribI4ui glVertexAttribI4uiv glVertexAttribI4usv glVertexAttribIPointer glTbufferMask3DFX glDrawElementArrayAPPLE glDrawRangeElementArrayAPPLE glElementPointerAPPLE glMultiDrawElementArrayAPPLE glMultiDrawRangeElementArrayAPPLE glDeleteFencesAPPLE glFinishFenceAPPLE glFinishObjectAPPLE glGenFencesAPPLE glIsFenceAPPLE glSetFenceAPPLE glTestFenceAPPLE glTestObjectAPPLE glBufferParameteriAPPLE glFlushMappedBufferRangeAPPLE glGetTexParameterPointervAPPLE glTextureRangeAPPLE glBindVertexArrayAPPLE glDeleteVertexArraysAPPLE glGenVertexArraysAPPLE glIsVertexArrayAPPLE glFlushVertexArrayRangeAPPLE glVertexArrayParameteriAPPLE glVertexArrayRangeAPPLE glClampColorARB glDrawBuffersARB glDrawArraysInstancedARB glDrawElementsInstancedARB glBindFramebuffer glBindRenderbuffer glBlitFramebuffer glCheckFramebufferStatus glDeleteFramebuffers glDeleteRenderbuffers glFramebufferRenderbuffer glFramebufferTexturLayer glFramebufferTexture1D glFramebufferTexture2D glFramebufferTexture3D glGenFramebuffers glGenRenderbuffers glGenerateMipmap glGetFramebufferAttachmentParameteriv glGetRenderbufferParameteriv glIsFramebuffer glIsRenderbuffer glRenderbufferStorage glRenderbufferStorageMultisample glFramebufferTextureARB glFramebufferTextureFaceARB glFramebufferTextureLayerARB glProgramParameteriARB glColorSubTable glColorTable glColorTableParameterfv glColorTableParameteriv glConvolutionFilter1D glConvolutionFilter2D glConvolutionParameterf glConvolutionParameterfv glConvolutionParameteri glConvolutionParameteriv glCopyColorSubTable glCopyColorTable glCopyConvolutionFilter1D glCopyConvolutionFilter2D glGetColorTable glGetColorTableParameterfv glGetColorTableParameteriv glGetConvolutionFilter glGetConvolutionParameterfv glGetConvolutionParameteriv glGetHistogram glGetHistogramParameterfv glGetHistogramParameteriv glGetMinmax glGetMinmaxParameterfv glGetMinmaxParameteriv glGetSeparableFilter glHistogram glMinmax glResetHistogram glResetMinmax glSeparableFilter2D glVertexAttribDivisorARB glFlushMappedBufferRange glMapBufferRange glCurrentPaletteMatrixARB glMatrixIndexPointerARB glMatrixIndexubvARB glMatrixIndexuivARB glMatrixIndexusvARB glSampleCoverageARB glActiveTextureARB glClientActiveTextureARB glMultiTexCoord1dARB glMultiTexCoord1dvARB glMultiTexCoord1fARB glMultiTexCoord1fvARB glMultiTexCoord1iARB glMultiTexCoord1ivARB glMultiTexCoord1sARB glMultiTexCoord1svARB glMultiTexCoord2dARB glMultiTexCoord2dvARB glMultiTexCoord2fARB glMultiTexCoord2fvARB glMultiTexCoord2iARB glMultiTexCoord2ivARB glMultiTexCoord2sARB glMultiTexCoord2svARB glMultiTexCoord3dARB glMultiTexCoord3dvARB glMultiTexCoord3fARB glMultiTexCoord3fvARB glMultiTexCoord3iARB glMultiTexCoord3ivARB glMultiTexCoord3sARB glMultiTexCoord3svARB glMultiTexCoord4dARB glMultiTexCoord4dvARB glMultiTexCoord4fARB glMultiTexCoord4fvARB glMultiTexCoord4iARB glMultiTexCoord4ivARB glMultiTexCoord4sARB glMultiTexCoord4svARB glBeginQueryARB glDeleteQueriesARB glEndQueryARB glGenQueriesARB glGetQueryObjectivARB glGetQueryObjectuivARB glGetQueryivARB glIsQueryARB glPointParameterfARB glPointParameterfvARB glAttachObjectARB glCompileShaderARB glCreateProgramObjectARB glCreateShaderObjectARB glDeleteObjectARB glDetachObjectARB glGetActiveUniformARB glGetAttachedObjectsARB glGetHandleARB glGetInfoLogARB glGetObjectParameterfvARB glGetObjectParameterivARB glGetShaderSourceARB glGetUniformLocationARB glGetUniformfvARB glGetUniformivARB glLinkProgramARB glShaderSourceARB glUniform1fARB glUniform1fvARB glUniform1iARB glUniform1ivARB glUniform2fARB glUniform2fvARB glUniform2iARB glUniform2ivARB glUniform3fARB glUniform3fvARB glUniform3iARB glUniform3ivARB glUniform4fARB glUniform4fvARB glUniform4iARB glUniform4ivARB glUniformMatrix2fvARB glUniformMatrix3fvARB glUniformMatrix4fvARB glUseProgramObjectARB glValidateProgramARB glTexBufferARB glCompressedTexImage1DARB glCompressedTexImage2DARB glCompressedTexImage3DARB glCompressedTexSubImage1DARB glCompressedTexSubImage2DARB glCompressedTexSubImage3DARB glGetCompressedTexImageARB glLoadTransposeMatrixdARB glLoadTransposeMatrixfARB glMultTransposeMatrixdARB glMultTransposeMatrixfARB glBindVertexArray glDeleteVertexArrays glGenVertexArrays glIsVertexArray glVertexBlendARB glWeightPointerARB glWeightbvARB glWeightdvARB glWeightfvARB glWeightivARB glWeightsvARB glWeightubvARB glWeightuivARB glWeightusvARB glBindBufferARB glBufferDataARB glBufferSubDataARB glDeleteBuffersARB glGenBuffersARB glGetBufferParameterivARB glGetBufferPointervARB glGetBufferSubDataARB glIsBufferARB glMapBufferARB glUnmapBufferARB glBindProgramARB glDeleteProgramsARB glDisableVertexAttribArrayARB glEnableVertexAttribArrayARB glGenProgramsARB glGetProgramEnvParameterdvARB glGetProgramEnvParameterfvARB glGetProgramLocalParameterdvARB glGetProgramLocalParameterfvARB glGetProgramStringARB glGetProgramivARB glGetVertexAttribPointervARB glGetVertexAttribdvARB glGetVertexAttribfvARB glGetVertexAttribivARB glIsProgramARB glProgramEnvParameter4dARB glProgramEnvParameter4dvARB glProgramEnvParameter4fARB glProgramEnvParameter4fvARB glProgramLocalParameter4dARB glProgramLocalParameter4dvARB glProgramLocalParameter4fARB glProgramLocalParameter4fvARB glProgramStringARB glVertexAttrib1dARB glVertexAttrib1dvARB glVertexAttrib1fARB glVertexAttrib1fvARB glVertexAttrib1sARB glVertexAttrib1svARB glVertexAttrib2dARB glVertexAttrib2dvARB glVertexAttrib2fARB glVertexAttrib2fvARB glVertexAttrib2sARB glVertexAttrib2svARB glVertexAttrib3dARB glVertexAttrib3dvARB glVertexAttrib3fARB glVertexAttrib3fvARB glVertexAttrib3sARB glVertexAttrib3svARB glVertexAttrib4NbvARB glVertexAttrib4NivARB glVertexAttrib4NsvARB glVertexAttrib4NubARB glVertexAttrib4NubvARB glVertexAttrib4NuivARB glVertexAttrib4NusvARB glVertexAttrib4bvARB glVertexAttrib4dARB glVertexAttrib4dvARB glVertexAttrib4fARB glVertexAttrib4fvARB glVertexAttrib4ivARB glVertexAttrib4sARB glVertexAttrib4svARB glVertexAttrib4ubvARB glVertexAttrib4uivARB glVertexAttrib4usvARB glVertexAttribPointerARB glBindAttribLocationARB glGetActiveAttribARB glGetAttribLocationARB glWindowPos2dARB glWindowPos2dvARB glWindowPos2fARB glWindowPos2fvARB glWindowPos2iARB glWindowPos2ivARB glWindowPos2sARB glWindowPos2svARB glWindowPos3dARB glWindowPos3dvARB glWindowPos3fARB glWindowPos3fvARB glWindowPos3iARB glWindowPos3ivARB glWindowPos3sARB glWindowPos3svARB glDrawBuffersATI glDrawElementArrayATI glDrawRangeElementArrayATI glElementPointerATI glGetTexBumpParameterfvATI glGetTexBumpParameterivATI glTexBumpParameterfvATI glTexBumpParameterivATI glAlphaFragmentOp1ATI glAlphaFragmentOp2ATI glAlphaFragmentOp3ATI glBeginFragmentShaderATI glBindFragmentShaderATI glColorFragmentOp1ATI glColorFragmentOp2ATI glColorFragmentOp3ATI glDeleteFragmentShaderATI glEndFragmentShaderATI glGenFragmentShadersATI glPassTexCoordATI glSampleMapATI glSetFragmentShaderConstantATI glMapObjectBufferATI glUnmapObjectBufferATI glPNTrianglesfATI glPNTrianglesiATI glStencilFuncSeparateATI glStencilOpSeparateATI glArrayObjectATI glFreeObjectBufferATI glGetArrayObjectfvATI glGetArrayObjectivATI glGetObjectBufferfvATI glGetObjectBufferivATI glGetVariantArrayObjectfvATI glGetVariantArrayObjectivATI glIsObjectBufferATI glNewObjectBufferATI glUpdateObjectBufferATI glVariantArrayObjectATI glGetVertexAttribArrayObjectfvATI glGetVertexAttribArrayObjectivATI glVertexAttribArrayObjectATI glClientActiveVertexStreamATI glNormalStream3bATI glNormalStream3bvATI glNormalStream3dATI glNormalStream3dvATI glNormalStream3fATI glNormalStream3fvATI glNormalStream3iATI glNormalStream3ivATI glNormalStream3sATI glNormalStream3svATI glVertexBlendEnvfATI glVertexBlendEnviATI glVertexStream2dATI glVertexStream2dvATI glVertexStream2fATI glVertexStream2fvATI glVertexStream2iATI glVertexStream2ivATI glVertexStream2sATI glVertexStream2svATI glVertexStream3dATI glVertexStream3dvATI glVertexStream3fATI glVertexStream3fvATI glVertexStream3iATI glVertexStream3ivATI glVertexStream3sATI glVertexStream3svATI glVertexStream4dATI glVertexStream4dvATI glVertexStream4fATI glVertexStream4fvATI glVertexStream4iATI glVertexStream4ivATI glVertexStream4sATI glVertexStream4svATI glGetUniformBufferSizeEXT glGetUniformOffsetEXT glUniformBufferEXT glBlendColorEXT glBlendEquationSeparateEXT glBlendFuncSeparateEXT glBlendEquationEXT glColorSubTableEXT glCopyColorSubTableEXT glLockArraysEXT glUnlockArraysEXT glConvolutionFilter1DEXT glConvolutionFilter2DEXT glConvolutionParameterfEXT glConvolutionParameterfvEXT glConvolutionParameteriEXT glConvolutionParameterivEXT glCopyConvolutionFilter1DEXT glCopyConvolutionFilter2DEXT glGetConvolutionFilterEXT glGetConvolutionParameterfvEXT glGetConvolutionParameterivEXT glGetSeparableFilterEXT glSeparableFilter2DEXT glBinormalPointerEXT glTangentPointerEXT glCopyTexImage1DEXT glCopyTexImage2DEXT glCopyTexSubImage1DEXT glCopyTexSubImage2DEXT glCopyTexSubImage3DEXT glCullParameterdvEXT glCullParameterfvEXT glDepthBoundsEXT glBindMultiTextureEXT glCheckNamedFramebufferStatusEXT glClientAttribDefaultEXT glCompressedMultiTexImage1DEXT glCompressedMultiTexImage2DEXT glCompressedMultiTexImage3DEXT glCompressedMultiTexSubImage1DEXT glCompressedMultiTexSubImage2DEXT glCompressedMultiTexSubImage3DEXT glCompressedTextureImage1DEXT glCompressedTextureImage2DEXT glCompressedTextureImage3DEXT glCompressedTextureSubImage1DEXT glCompressedTextureSubImage2DEXT glCompressedTextureSubImage3DEXT glCopyMultiTexImage1DEXT glCopyMultiTexImage2DEXT glCopyMultiTexSubImage1DEXT glCopyMultiTexSubImage2DEXT glCopyMultiTexSubImage3DEXT glCopyTextureImage1DEXT glCopyTextureImage2DEXT glCopyTextureSubImage1DEXT glCopyTextureSubImage2DEXT glCopyTextureSubImage3DEXT glDisableClientStateIndexedEXT glEnableClientStateIndexedEXT glFramebufferDrawBufferEXT glFramebufferDrawBuffersEXT glFramebufferReadBufferEXT glGenerateMultiTexMipmapEXT glGenerateTextureMipmapEXT glGetCompressedMultiTexImageEXT glGetCompressedTextureImageEXT glGetDoubleIndexedvEXT glGetFloatIndexedvEXT glGetFramebufferParameterivEXT glGetMultiTexEnvfvEXT glGetMultiTexEnvivEXT glGetMultiTexGendvEXT glGetMultiTexGenfvEXT glGetMultiTexGenivEXT glGetMultiTexImageEXT glGetMultiTexLevelParameterfvEXT glGetMultiTexLevelParameterivEXT glGetMultiTexParameterIivEXT glGetMultiTexParameterIuivEXT glGetMultiTexParameterfvEXT glGetMultiTexParameterivEXT glGetNamedBufferParameterivEXT glGetNamedBufferPointervEXT glGetNamedBufferSubDataEXT glGetNamedFramebufferAttachmentParameterivEXT glGetNamedProgramLocalParameterIivEXT glGetNamedProgramLocalParameterIuivEXT glGetNamedProgramLocalParameterdvEXT glGetNamedProgramLocalParameterfvEXT glGetNamedProgramStringEXT glGetNamedProgramivEXT glGetNamedRenderbufferParameterivEXT glGetPointerIndexedvEXT glGetTextureImageEXT glGetTextureLevelParameterfvEXT glGetTextureLevelParameterivEXT glGetTextureParameterIivEXT glGetTextureParameterIuivEXT glGetTextureParameterfvEXT glGetTextureParameterivEXT glMapNamedBufferEXT glMatrixFrustumEXT glMatrixLoadIdentityEXT glMatrixLoadTransposedEXT glMatrixLoadTransposefEXT glMatrixLoaddEXT glMatrixLoadfEXT glMatrixMultTransposedEXT glMatrixMultTransposefEXT glMatrixMultdEXT glMatrixMultfEXT glMatrixOrthoEXT glMatrixPopEXT glMatrixPushEXT glMatrixRotatedEXT glMatrixRotatefEXT glMatrixScaledEXT glMatrixScalefEXT glMatrixTranslatedEXT glMatrixTranslatefEXT glMultiTexBufferEXT glMultiTexCoordPointerEXT glMultiTexEnvfEXT glMultiTexEnvfvEXT glMultiTexEnviEXT glMultiTexEnvivEXT glMultiTexGendEXT glMultiTexGendvEXT glMultiTexGenfEXT glMultiTexGenfvEXT glMultiTexGeniEXT glMultiTexGenivEXT glMultiTexImage1DEXT glMultiTexImage2DEXT glMultiTexImage3DEXT glMultiTexParameterIivEXT glMultiTexParameterIuivEXT glMultiTexParameterfEXT glMultiTexParameterfvEXT glMultiTexParameteriEXT glMultiTexParameterivEXT glMultiTexRenderbufferEXT glMultiTexSubImage1DEXT glMultiTexSubImage2DEXT glMultiTexSubImage3DEXT glNamedBufferDataEXT glNamedBufferSubDataEXT glNamedFramebufferRenderbufferEXT glNamedFramebufferTexture1DEXT glNamedFramebufferTexture2DEXT glNamedFramebufferTexture3DEXT glNamedFramebufferTextureEXT glNamedFramebufferTextureFaceEXT glNamedFramebufferTextureLayerEXT glNamedProgramLocalParameter4dEXT glNamedProgramLocalParameter4dvEXT glNamedProgramLocalParameter4fEXT glNamedProgramLocalParameter4fvEXT glNamedProgramLocalParameterI4iEXT glNamedProgramLocalParameterI4ivEXT glNamedProgramLocalParameterI4uiEXT glNamedProgramLocalParameterI4uivEXT glNamedProgramLocalParameters4fvEXT glNamedProgramLocalParametersI4ivEXT glNamedProgramLocalParametersI4uivEXT glNamedProgramStringEXT glNamedRenderbufferStorageEXT glNamedRenderbufferStorageMultisampleCoverageEXT glNamedRenderbufferStorageMultisampleEXT glProgramUniform1fEXT glProgramUniform1fvEXT glProgramUniform1iEXT glProgramUniform1ivEXT glProgramUniform1uiEXT glProgramUniform1uivEXT glProgramUniform2fEXT glProgramUniform2fvEXT glProgramUniform2iEXT glProgramUniform2ivEXT glProgramUniform2uiEXT glProgramUniform2uivEXT glProgramUniform3fEXT glProgramUniform3fvEXT glProgramUniform3iEXT glProgramUniform3ivEXT glProgramUniform3uiEXT glProgramUniform3uivEXT glProgramUniform4fEXT glProgramUniform4fvEXT glProgramUniform4iEXT glProgramUniform4ivEXT glProgramUniform4uiEXT glProgramUniform4uivEXT glProgramUniformMatrix2fvEXT glProgramUniformMatrix2x3fvEXT glProgramUniformMatrix2x4fvEXT glProgramUniformMatrix3fvEXT glProgramUniformMatrix3x2fvEXT glProgramUniformMatrix3x4fvEXT glProgramUniformMatrix4fvEXT glProgramUniformMatrix4x2fvEXT glProgramUniformMatrix4x3fvEXT glPushClientAttribDefaultEXT glTextureBufferEXT glTextureImage1DEXT glTextureImage2DEXT glTextureImage3DEXT glTextureParameterIivEXT glTextureParameterIuivEXT glTextureParameterfEXT glTextureParameterfvEXT glTextureParameteriEXT glTextureParameterivEXT glTextureRenderbufferEXT glTextureSubImage1DEXT glTextureSubImage2DEXT glTextureSubImage3DEXT glUnmapNamedBufferEXT glColorMaskIndexedEXT glDisableIndexedEXT glEnableIndexedEXT glGetBooleanIndexedvEXT glGetIntegerIndexedvEXT glIsEnabledIndexedEXT glDrawArraysInstancedEXT glDrawElementsInstancedEXT glDrawRangeElementsEXT glFogCoordPointerEXT glFogCoorddEXT glFogCoorddvEXT glFogCoordfEXT glFogCoordfvEXT glFragmentColorMaterialEXT glFragmentLightModelfEXT glFragmentLightModelfvEXT glFragmentLightModeliEXT glFragmentLightModelivEXT glFragmentLightfEXT glFragmentLightfvEXT glFragmentLightiEXT glFragmentLightivEXT glFragmentMaterialfEXT glFragmentMaterialfvEXT glFragmentMaterialiEXT glFragmentMaterialivEXT glGetFragmentLightfvEXT glGetFragmentLightivEXT glGetFragmentMaterialfvEXT glGetFragmentMaterialivEXT glLightEnviEXT glBlitFramebufferEXT glRenderbufferStorageMultisampleEXT glBindFramebufferEXT glBindRenderbufferEXT glCheckFramebufferStatusEXT glDeleteFramebuffersEXT glDeleteRenderbuffersEXT glFramebufferRenderbufferEXT glFramebufferTexture1DEXT glFramebufferTexture2DEXT glFramebufferTexture3DEXT glGenFramebuffersEXT glGenRenderbuffersEXT glGenerateMipmapEXT glGetFramebufferAttachmentParameterivEXT glGetRenderbufferParameterivEXT glIsFramebufferEXT glIsRenderbufferEXT glRenderbufferStorageEXT glFramebufferTextureEXT glFramebufferTextureFaceEXT glFramebufferTextureLayerEXT glProgramParameteriEXT glProgramEnvParameters4fvEXT glProgramLocalParameters4fvEXT glBindFragDataLocationEXT glGetFragDataLocationEXT glGetUniformuivEXT glGetVertexAttribIivEXT glGetVertexAttribIuivEXT glUniform1uiEXT glUniform1uivEXT glUniform2uiEXT glUniform2uivEXT glUniform3uiEXT glUniform3uivEXT glUniform4uiEXT glUniform4uivEXT glVertexAttribI1iEXT glVertexAttribI1ivEXT glVertexAttribI1uiEXT glVertexAttribI1uivEXT glVertexAttribI2iEXT glVertexAttribI2ivEXT glVertexAttribI2uiEXT glVertexAttribI2uivEXT glVertexAttribI3iEXT glVertexAttribI3ivEXT glVertexAttribI3uiEXT glVertexAttribI3uivEXT glVertexAttribI4bvEXT glVertexAttribI4iEXT glVertexAttribI4ivEXT glVertexAttribI4svEXT glVertexAttribI4ubvEXT glVertexAttribI4uiEXT glVertexAttribI4uivEXT glVertexAttribI4usvEXT glVertexAttribIPointerEXT glGetHistogramEXT glGetHistogramParameterfvEXT glGetHistogramParameterivEXT glGetMinmaxEXT glGetMinmaxParameterfvEXT glGetMinmaxParameterivEXT glHistogramEXT glMinmaxEXT glResetHistogramEXT glResetMinmaxEXT glIndexFuncEXT glIndexMaterialEXT glApplyTextureEXT glTextureLightEXT glTextureMaterialEXT glMultiDrawArraysEXT glMultiDrawElementsEXT glSampleMaskEXT glSamplePatternEXT glColorTableEXT glGetColorTableEXT glGetColorTableParameterfvEXT glGetColorTableParameterivEXT glGetPixelTransformParameterfvEXT glGetPixelTransformParameterivEXT glPixelTransformParameterfEXT glPixelTransformParameterfvEXT glPixelTransformParameteriEXT glPixelTransformParameterivEXT glPointParameterfEXT glPointParameterfvEXT glPolygonOffsetEXT glBeginSceneEXT glEndSceneEXT glSecondaryColor3bEXT glSecondaryColor3bvEXT glSecondaryColor3dEXT glSecondaryColor3dvEXT glSecondaryColor3fEXT glSecondaryColor3fvEXT glSecondaryColor3iEXT glSecondaryColor3ivEXT glSecondaryColor3sEXT glSecondaryColor3svEXT glSecondaryColor3ubEXT glSecondaryColor3ubvEXT glSecondaryColor3uiEXT glSecondaryColor3uivEXT glSecondaryColor3usEXT glSecondaryColor3usvEXT glSecondaryColorPointerEXT glActiveStencilFaceEXT glTexSubImage1DEXT glTexSubImage2DEXT glTexSubImage3DEXT glTexImage3DEXT glTexBufferEXT glClearColorIiEXT glClearColorIuiEXT glGetTexParameterIivEXT glGetTexParameterIuivEXT glTexParameterIivEXT glTexParameterIuivEXT glAreTexturesResidentEXT glBindTextureEXT glDeleteTexturesEXT glGenTexturesEXT glIsTextureEXT glPrioritizeTexturesEXT glTextureNormalEXT glGetQueryObjecti64vEXT glGetQueryObjectui64vEXT glBeginTransformFeedbackEXT glBindBufferBaseEXT glBindBufferOffsetEXT glBindBufferRangeEXT glEndTransformFeedbackEXT glGetTransformFeedbackVaryingEXT glTransformFeedbackVaryingsEXT glArrayElementEXT glColorPointerEXT glDrawArraysEXT glEdgeFlagPointerEXT glGetPointervEXT glIndexPointerEXT glNormalPointerEXT glTexCoordPointerEXT glVertexPointerEXT glBeginVertexShaderEXT glBindLightParameterEXT glBindMaterialParameterEXT glBindParameterEXT glBindTexGenParameterEXT glBindTextureUnitParameterEXT glBindVertexShaderEXT glDeleteVertexShaderEXT glDisableVariantClientStateEXT glEnableVariantClientStateEXT glEndVertexShaderEXT glExtractComponentEXT glGenSymbolsEXT glGenVertexShadersEXT glGetInvariantBooleanvEXT glGetInvariantFloatvEXT glGetInvariantIntegervEXT glGetLocalConstantBooleanvEXT glGetLocalConstantFloatvEXT glGetLocalConstantIntegervEXT glGetVariantBooleanvEXT glGetVariantFloatvEXT glGetVariantIntegervEXT glGetVariantPointervEXT glInsertComponentEXT glIsVariantEnabledEXT glSetInvariantEXT glSetLocalConstantEXT glShaderOp1EXT glShaderOp2EXT glShaderOp3EXT glSwizzleEXT glVariantPointerEXT glVariantbvEXT glVariantdvEXT glVariantfvEXT glVariantivEXT glVariantsvEXT glVariantubvEXT glVariantuivEXT glVariantusvEXT glWriteMaskEXT glVertexWeightPointerEXT glVertexWeightfEXT glVertexWeightfvEXT glFrameTerminatorGREMEDY glStringMarkerGREMEDY glGetImageTransformParameterfvHP glGetImageTransformParameterivHP glImageTransformParameterfHP glImageTransformParameterfvHP glImageTransformParameteriHP glImageTransformParameterivHP glMultiModeDrawArraysIBM glMultiModeDrawElementsIBM glColorPointerListIBM glEdgeFlagPointerListIBM glFogCoordPointerListIBM glIndexPointerListIBM glNormalPointerListIBM glSecondaryColorPointerListIBM glTexCoordPointerListIBM glVertexPointerListIBM glColorPointervINTEL glNormalPointervINTEL glTexCoordPointervINTEL glVertexPointervINTEL glTexScissorFuncINTEL glTexScissorINTEL glBufferRegionEnabledEXT glDeleteBufferRegionEXT glDrawBufferRegionEXT glNewBufferRegionEXT glReadBufferRegionEXT glResizeBuffersMESA glWindowPos2dMESA glWindowPos2dvMESA glWindowPos2fMESA glWindowPos2fvMESA glWindowPos2iMESA glWindowPos2ivMESA glWindowPos2sMESA glWindowPos2svMESA glWindowPos3dMESA glWindowPos3dvMESA glWindowPos3fMESA glWindowPos3fvMESA glWindowPos3iMESA glWindowPos3ivMESA glWindowPos3sMESA glWindowPos3svMESA glWindowPos4dMESA glWindowPos4dvMESA glWindowPos4fMESA glWindowPos4fvMESA glWindowPos4iMESA glWindowPos4ivMESA glWindowPos4sMESA glWindowPos4svMESA glBeginConditionalRenderNV glEndConditionalRenderNV glClearDepthdNV glDepthBoundsdNV glDepthRangedNV glEvalMapsNV glGetMapAttribParameterfvNV glGetMapAttribParameterivNV glGetMapControlPointsNV glGetMapParameterfvNV glGetMapParameterivNV glMapControlPointsNV glMapParameterfvNV glMapParameterivNV glGetMultisamplefvNV glSampleMaskIndexedNV glTexRenderbufferNV glDeleteFencesNV glFinishFenceNV glGenFencesNV glGetFenceivNV glIsFenceNV glSetFenceNV glTestFenceNV glGetProgramNamedParameterdvNV glGetProgramNamedParameterfvNV glProgramNamedParameter4dNV glProgramNamedParameter4dvNV glProgramNamedParameter4fNV glProgramNamedParameter4fvNV glRenderbufferStorageMultisampleCoverageNV glProgramVertexLimitNV glProgramEnvParameterI4iNV glProgramEnvParameterI4ivNV glProgramEnvParameterI4uiNV glProgramEnvParameterI4uivNV glProgramEnvParametersI4ivNV glProgramEnvParametersI4uivNV glProgramLocalParameterI4iNV glProgramLocalParameterI4ivNV glProgramLocalParameterI4uiNV glProgramLocalParameterI4uivNV glProgramLocalParametersI4ivNV glProgramLocalParametersI4uivNV glColor3hNV glColor3hvNV glColor4hNV glColor4hvNV glFogCoordhNV glFogCoordhvNV glMultiTexCoord1hNV glMultiTexCoord1hvNV glMultiTexCoord2hNV glMultiTexCoord2hvNV glMultiTexCoord3hNV glMultiTexCoord3hvNV glMultiTexCoord4hNV glMultiTexCoord4hvNV glNormal3hNV glNormal3hvNV glSecondaryColor3hNV glSecondaryColor3hvNV glTexCoord1hNV glTexCoord1hvNV glTexCoord2hNV glTexCoord2hvNV glTexCoord3hNV glTexCoord3hvNV glTexCoord4hNV glTexCoord4hvNV glVertex2hNV glVertex2hvNV glVertex3hNV glVertex3hvNV glVertex4hNV glVertex4hvNV glVertexAttrib1hNV glVertexAttrib1hvNV glVertexAttrib2hNV glVertexAttrib2hvNV glVertexAttrib3hNV glVertexAttrib3hvNV glVertexAttrib4hNV glVertexAttrib4hvNV glVertexAttribs1hvNV glVertexAttribs2hvNV glVertexAttribs3hvNV glVertexAttribs4hvNV glVertexWeighthNV glVertexWeighthvNV glBeginOcclusionQueryNV glDeleteOcclusionQueriesNV glEndOcclusionQueryNV glGenOcclusionQueriesNV glGetOcclusionQueryivNV glGetOcclusionQueryuivNV glIsOcclusionQueryNV glProgramBufferParametersIivNV glProgramBufferParametersIuivNV glProgramBufferParametersfvNV glFlushPixelDataRangeNV glPixelDataRangeNV glPointParameteriNV glPointParameterivNV glGetVideoi64vNV glGetVideoivNV glGetVideoui64vNV glGetVideouivNV glPresentFrameDualFillNV glPresentFrameKeyedNV glVideoParameterivNV glPrimitiveRestartIndexNV glPrimitiveRestartNV glCombinerInputNV glCombinerOutputNV glCombinerParameterfNV glCombinerParameterfvNV glCombinerParameteriNV glCombinerParameterivNV glFinalCombinerInputNV glGetCombinerInputParameterfvNV glGetCombinerInputParameterivNV glGetCombinerOutputParameterfvNV glGetCombinerOutputParameterivNV glGetFinalCombinerInputParameterfvNV glGetFinalCombinerInputParameterivNV glCombinerStageParameterfvNV glGetCombinerStageParameterfvNV glActiveVaryingNV glBeginTransformFeedbackNV glBindBufferBaseNV glBindBufferOffsetNV glBindBufferRangeNV glEndTransformFeedbackNV glGetActiveVaryingNV glGetTransformFeedbackVaryingNV glGetVaryingLocationNV glTransformFeedbackAttribsNV glTransformFeedbackVaryingsNV glFlushVertexArrayRangeNV glVertexArrayRangeNV glAreProgramsResidentNV glBindProgramNV glDeleteProgramsNV glExecuteProgramNV glGenProgramsNV glGetProgramParameterdvNV glGetProgramParameterfvNV glGetProgramStringNV glGetProgramivNV glGetTrackMatrixivNV glGetVertexAttribPointervNV glGetVertexAttribdvNV glGetVertexAttribfvNV glGetVertexAttribivNV glIsProgramNV glLoadProgramNV glProgramParameter4dNV glProgramParameter4dvNV glProgramParameter4fNV glProgramParameter4fvNV glProgramParameters4dvNV glProgramParameters4fvNV glRequestResidentProgramsNV glTrackMatrixNV glVertexAttrib1dNV glVertexAttrib1dvNV glVertexAttrib1fNV glVertexAttrib1fvNV glVertexAttrib1sNV glVertexAttrib1svNV glVertexAttrib2dNV glVertexAttrib2dvNV glVertexAttrib2fNV glVertexAttrib2fvNV glVertexAttrib2sNV glVertexAttrib2svNV glVertexAttrib3dNV glVertexAttrib3dvNV glVertexAttrib3fNV glVertexAttrib3fvNV glVertexAttrib3sNV glVertexAttrib3svNV glVertexAttrib4dNV glVertexAttrib4dvNV glVertexAttrib4fNV glVertexAttrib4fvNV glVertexAttrib4sNV glVertexAttrib4svNV glVertexAttrib4ubNV glVertexAttrib4ubvNV glVertexAttribPointerNV glVertexAttribs1dvNV glVertexAttribs1fvNV glVertexAttribs1svNV glVertexAttribs2dvNV glVertexAttribs2fvNV glVertexAttribs2svNV glVertexAttribs3dvNV glVertexAttribs3fvNV glVertexAttribs3svNV glVertexAttribs4dvNV glVertexAttribs4fvNV glVertexAttribs4svNV glVertexAttribs4ubvNV glClearDepthfOES glClipPlanefOES glDepthRangefOES glFrustumfOES glGetClipPlanefOES glOrthofOES glDetailTexFuncSGIS glGetDetailTexFuncSGIS glFogFuncSGIS glGetFogFuncSGIS glSampleMaskSGIS glSamplePatternSGIS glGetSharpenTexFuncSGIS glSharpenTexFuncSGIS glTexImage4DSGIS glTexSubImage4DSGIS glGetTexFilterFuncSGIS glTexFilterFuncSGIS glAsyncMarkerSGIX glDeleteAsyncMarkersSGIX glFinishAsyncSGIX glGenAsyncMarkersSGIX glIsAsyncMarkerSGIX glPollAsyncSGIX glFlushRasterSGIX glTextureFogSGIX glFragmentColorMaterialSGIX glFragmentLightModelfSGIX glFragmentLightModelfvSGIX glFragmentLightModeliSGIX glFragmentLightModelivSGIX glFragmentLightfSGIX glFragmentLightfvSGIX glFragmentLightiSGIX glFragmentLightivSGIX glFragmentMaterialfSGIX glFragmentMaterialfvSGIX glFragmentMaterialiSGIX glFragmentMaterialivSGIX glGetFragmentLightfvSGIX glGetFragmentLightivSGIX glGetFragmentMaterialfvSGIX glGetFragmentMaterialivSGIX glFrameZoomSGIX glPixelTexGenSGIX glReferencePlaneSGIX glSpriteParameterfSGIX glSpriteParameterfvSGIX glSpriteParameteriSGIX glSpriteParameterivSGIX glTagSampleBufferSGIX glColorTableParameterfvSGI glColorTableParameterivSGI glColorTableSGI glCopyColorTableSGI glGetColorTableParameterfvSGI glGetColorTableParameterivSGI glGetColorTableSGI glFinishTextureSUNX glGlobalAlphaFactorbSUN glGlobalAlphaFactordSUN glGlobalAlphaFactorfSUN glGlobalAlphaFactoriSUN glGlobalAlphaFactorsSUN glGlobalAlphaFactorubSUN glGlobalAlphaFactoruiSUN glGlobalAlphaFactorusSUN glReadVideoPixelsSUN glReplacementCodePointerSUN glReplacementCodeubSUN glReplacementCodeubvSUN glReplacementCodeuiSUN glReplacementCodeuivSUN glReplacementCodeusSUN glReplacementCodeusvSUN glColor3fVertex3fSUN glColor3fVertex3fvSUN glColor4fNormal3fVertex3fSUN glColor4fNormal3fVertex3fvSUN glColor4ubVertex2fSUN glColor4ubVertex2fvSUN glColor4ubVertex3fSUN glColor4ubVertex3fvSUN glNormal3fVertex3fSUN glNormal3fVertex3fvSUN glReplacementCodeuiColor3fVertex3fSUN glReplacementCodeuiColor3fVertex3fvSUN glReplacementCodeuiColor4fNormal3fVertex3fSUN glReplacementCodeuiColor4fNormal3fVertex3fvSUN glReplacementCodeuiColor4ubVertex3fSUN glReplacementCodeuiColor4ubVertex3fvSUN glReplacementCodeuiNormal3fVertex3fSUN glReplacementCodeuiNormal3fVertex3fvSUN glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN glReplacementCodeuiTexCoord2fVertex3fSUN glReplacementCodeuiTexCoord2fVertex3fvSUN glReplacementCodeuiVertex3fSUN glReplacementCodeuiVertex3fvSUN glTexCoord2fColor3fVertex3fSUN glTexCoord2fColor3fVertex3fvSUN glTexCoord2fColor4fNormal3fVertex3fSUN glTexCoord2fColor4fNormal3fVertex3fvSUN glTexCoord2fColor4ubVertex3fSUN glTexCoord2fColor4ubVertex3fvSUN glTexCoord2fNormal3fVertex3fSUN glTexCoord2fNormal3fVertex3fvSUN glTexCoord2fVertex3fSUN glTexCoord2fVertex3fvSUN glTexCoord4fColor4fNormal3fVertex4fSUN glTexCoord4fColor4fNormal3fVertex4fvSUN glTexCoord4fVertex4fSUN glTexCoord4fVertex4fvSUN glAddSwapHintRectWIN ] } proc tcl3dOglGetFuncSignatureList {} { return [list "void glAccum (GLenum op, GLfloat value)" "void glAlphaFunc (GLenum func, GLclampf ref)" "GLboolean glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences)" "void glArrayElement (GLint i)" "void glBegin (GLenum mode)" "void glBindTexture (GLenum target, GLuint texture)" "void glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)" "void glBlendFunc (GLenum sfactor, GLenum dfactor)" "void glCallList (GLuint list)" "void glCallLists (GLsizei n, GLenum type, const GLvoid *lists)" "void glClear (GLbitfield mask)" "void glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)" "void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)" "void glClearDepth (GLclampd depth)" "void glClearIndex (GLfloat c)" "void glClearStencil (GLint s)" "void glClipPlane (GLenum plane, const GLdouble *equation)" "void glColor3b (GLbyte red, GLbyte green, GLbyte blue)" "void glColor3bv (const GLbyte *v)" "void glColor3d (GLdouble red, GLdouble green, GLdouble blue)" "void glColor3dv (const GLdouble *v)" "void glColor3f (GLfloat red, GLfloat green, GLfloat blue)" "void glColor3fv (const GLfloat *v)" "void glColor3i (GLint red, GLint green, GLint blue)" "void glColor3iv (const GLint *v)" "void glColor3s (GLshort red, GLshort green, GLshort blue)" "void glColor3sv (const GLshort *v)" "void glColor3ub (GLubyte red, GLubyte green, GLubyte blue)" "void glColor3ubv (const GLubyte *v)" "void glColor3ui (GLuint red, GLuint green, GLuint blue)" "void glColor3uiv (const GLuint *v)" "void glColor3us (GLushort red, GLushort green, GLushort blue)" "void glColor3usv (const GLushort *v)" "void glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)" "void glColor4bv (const GLbyte *v)" "void glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)" "void glColor4dv (const GLdouble *v)" "void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)" "void glColor4fv (const GLfloat *v)" "void glColor4i (GLint red, GLint green, GLint blue, GLint alpha)" "void glColor4iv (const GLint *v)" "void glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha)" "void glColor4sv (const GLshort *v)" "void glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)" "void glColor4ubv (const GLubyte *v)" "void glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha)" "void glColor4uiv (const GLuint *v)" "void glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha)" "void glColor4usv (const GLushort *v)" "void glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)" "void glColorMaterial (GLenum face, GLenum mode)" "void glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)" "void glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)" "void glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)" "void glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)" "void glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)" "void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glCullFace (GLenum mode)" "void glDeleteLists (GLuint list, GLsizei range)" "void glDeleteTextures (GLsizei n, const GLuint *textures)" "void glDepthFunc (GLenum func)" "void glDepthMask (GLboolean flag)" "void glDepthRange (GLclampd zNear, GLclampd zFar)" "void glDisable (GLenum cap)" "void glDisableClientState (GLenum array)" "void glDrawArrays (GLenum mode, GLint first, GLsizei count)" "void glDrawBuffer (GLenum mode)" "void glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)" "void glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)" "void glEdgeFlag (GLboolean flag)" "void glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer)" "void glEdgeFlagv (const GLboolean *flag)" "void glEnable (GLenum cap)" "void glEnableClientState (GLenum array)" "void glEnd (void)" "void glEndList (void)" "void glEvalCoord1d (GLdouble u)" "void glEvalCoord1dv (const GLdouble *u)" "void glEvalCoord1f (GLfloat u)" "void glEvalCoord1fv (const GLfloat *u)" "void glEvalCoord2d (GLdouble u, GLdouble v)" "void glEvalCoord2dv (const GLdouble *u)" "void glEvalCoord2f (GLfloat u, GLfloat v)" "void glEvalCoord2fv (const GLfloat *u)" "void glEvalMesh1 (GLenum mode, GLint i1, GLint i2)" "void glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)" "void glEvalPoint1 (GLint i)" "void glEvalPoint2 (GLint i, GLint j)" "void glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer)" "void glFinish (void)" "void glFlush (void)" "void glFogf (GLenum pname, GLfloat param)" "void glFogfv (GLenum pname, const GLfloat *params)" "void glFogi (GLenum pname, GLint param)" "void glFogiv (GLenum pname, const GLint *params)" "void glFrontFace (GLenum mode)" "void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)" "GLuint glGenLists (GLsizei range)" "void glGenTextures (GLsizei n, GLuint *textures)" "void glGetBooleanv (GLenum pname, GLboolean *params)" "void glGetClipPlane (GLenum plane, GLdouble *equation)" "void glGetDoublev (GLenum pname, GLdouble *params)" "GLenum glGetError (void)" "void glGetFloatv (GLenum pname, GLfloat *params)" "void glGetIntegerv (GLenum pname, GLint *params)" "void glGetLightfv (GLenum light, GLenum pname, GLfloat *params)" "void glGetLightiv (GLenum light, GLenum pname, GLint *params)" "void glGetMapdv (GLenum target, GLenum query, GLdouble *v)" "void glGetMapfv (GLenum target, GLenum query, GLfloat *v)" "void glGetMapiv (GLenum target, GLenum query, GLint *v)" "void glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params)" "void glGetMaterialiv (GLenum face, GLenum pname, GLint *params)" "void glGetPixelMapfv (GLenum map, GLfloat *values)" "void glGetPixelMapuiv (GLenum map, GLuint *values)" "void glGetPixelMapusv (GLenum map, GLushort *values)" "void glGetPointerv (GLenum pname, GLvoid* *params)" "void glGetPolygonStipple (GLubyte *mask)" "const GLubyte * glGetString (GLenum name)" "void glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params)" "void glGetTexEnviv (GLenum target, GLenum pname, GLint *params)" "void glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params)" "void glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params)" "void glGetTexGeniv (GLenum coord, GLenum pname, GLint *params)" "void glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)" "void glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params)" "void glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params)" "void glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params)" "void glGetTexParameteriv (GLenum target, GLenum pname, GLint *params)" "void glHint (GLenum target, GLenum mode)" "void glIndexMask (GLuint mask)" "void glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer)" "void glIndexd (GLdouble c)" "void glIndexdv (const GLdouble *c)" "void glIndexf (GLfloat c)" "void glIndexfv (const GLfloat *c)" "void glIndexi (GLint c)" "void glIndexiv (const GLint *c)" "void glIndexs (GLshort c)" "void glIndexsv (const GLshort *c)" "void glIndexub (GLubyte c)" "void glIndexubv (const GLubyte *c)" "void glInitNames (void)" "void glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer)" "GLboolean glIsEnabled (GLenum cap)" "GLboolean glIsList (GLuint list)" "GLboolean glIsTexture (GLuint texture)" "void glLightModelf (GLenum pname, GLfloat param)" "void glLightModelfv (GLenum pname, const GLfloat *params)" "void glLightModeli (GLenum pname, GLint param)" "void glLightModeliv (GLenum pname, const GLint *params)" "void glLightf (GLenum light, GLenum pname, GLfloat param)" "void glLightfv (GLenum light, GLenum pname, const GLfloat *params)" "void glLighti (GLenum light, GLenum pname, GLint param)" "void glLightiv (GLenum light, GLenum pname, const GLint *params)" "void glLineStipple (GLint factor, GLushort pattern)" "void glLineWidth (GLfloat width)" "void glListBase (GLuint base)" "void glLoadIdentity (void)" "void glLoadMatrixd (const GLdouble *m)" "void glLoadMatrixf (const GLfloat *m)" "void glLoadName (GLuint name)" "void glLogicOp (GLenum opcode)" "void glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)" "void glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)" "void glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)" "void glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)" "void glMapGrid1d (GLint un, GLdouble u1, GLdouble u2)" "void glMapGrid1f (GLint un, GLfloat u1, GLfloat u2)" "void glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)" "void glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)" "void glMaterialf (GLenum face, GLenum pname, GLfloat param)" "void glMaterialfv (GLenum face, GLenum pname, const GLfloat *params)" "void glMateriali (GLenum face, GLenum pname, GLint param)" "void glMaterialiv (GLenum face, GLenum pname, const GLint *params)" "void glMatrixMode (GLenum mode)" "void glMultMatrixd (const GLdouble *m)" "void glMultMatrixf (const GLfloat *m)" "void glNewList (GLuint list, GLenum mode)" "void glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz)" "void glNormal3bv (const GLbyte *v)" "void glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz)" "void glNormal3dv (const GLdouble *v)" "void glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz)" "void glNormal3fv (const GLfloat *v)" "void glNormal3i (GLint nx, GLint ny, GLint nz)" "void glNormal3iv (const GLint *v)" "void glNormal3s (GLshort nx, GLshort ny, GLshort nz)" "void glNormal3sv (const GLshort *v)" "void glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer)" "void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)" "void glPassThrough (GLfloat token)" "void glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values)" "void glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values)" "void glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values)" "void glPixelStoref (GLenum pname, GLfloat param)" "void glPixelStorei (GLenum pname, GLint param)" "void glPixelTransferf (GLenum pname, GLfloat param)" "void glPixelTransferi (GLenum pname, GLint param)" "void glPixelZoom (GLfloat xfactor, GLfloat yfactor)" "void glPointSize (GLfloat size)" "void glPolygonMode (GLenum face, GLenum mode)" "void glPolygonOffset (GLfloat factor, GLfloat units)" "void glPolygonStipple (const GLubyte *mask)" "void glPopAttrib (void)" "void glPopClientAttrib (void)" "void glPopMatrix (void)" "void glPopName (void)" "void glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities)" "void glPushAttrib (GLbitfield mask)" "void glPushClientAttrib (GLbitfield mask)" "void glPushMatrix (void)" "void glPushName (GLuint name)" "void glRasterPos2d (GLdouble x, GLdouble y)" "void glRasterPos2dv (const GLdouble *v)" "void glRasterPos2f (GLfloat x, GLfloat y)" "void glRasterPos2fv (const GLfloat *v)" "void glRasterPos2i (GLint x, GLint y)" "void glRasterPos2iv (const GLint *v)" "void glRasterPos2s (GLshort x, GLshort y)" "void glRasterPos2sv (const GLshort *v)" "void glRasterPos3d (GLdouble x, GLdouble y, GLdouble z)" "void glRasterPos3dv (const GLdouble *v)" "void glRasterPos3f (GLfloat x, GLfloat y, GLfloat z)" "void glRasterPos3fv (const GLfloat *v)" "void glRasterPos3i (GLint x, GLint y, GLint z)" "void glRasterPos3iv (const GLint *v)" "void glRasterPos3s (GLshort x, GLshort y, GLshort z)" "void glRasterPos3sv (const GLshort *v)" "void glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glRasterPos4dv (const GLdouble *v)" "void glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glRasterPos4fv (const GLfloat *v)" "void glRasterPos4i (GLint x, GLint y, GLint z, GLint w)" "void glRasterPos4iv (const GLint *v)" "void glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w)" "void glRasterPos4sv (const GLshort *v)" "void glReadBuffer (GLenum mode)" "void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)" "void glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)" "void glRectdv (const GLdouble *v1, const GLdouble *v2)" "void glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)" "void glRectfv (const GLfloat *v1, const GLfloat *v2)" "void glRecti (GLint x1, GLint y1, GLint x2, GLint y2)" "void glRectiv (const GLint *v1, const GLint *v2)" "void glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2)" "void glRectsv (const GLshort *v1, const GLshort *v2)" "GLint glRenderMode (GLenum mode)" "void glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z)" "void glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z)" "void glScaled (GLdouble x, GLdouble y, GLdouble z)" "void glScalef (GLfloat x, GLfloat y, GLfloat z)" "void glScissor (GLint x, GLint y, GLsizei width, GLsizei height)" "void glSelectBuffer (GLsizei size, GLuint *buffer)" "void glShadeModel (GLenum mode)" "void glStencilFunc (GLenum func, GLint ref, GLuint mask)" "void glStencilMask (GLuint mask)" "void glStencilOp (GLenum fail, GLenum zfail, GLenum zpass)" "void glTexCoord1d (GLdouble s)" "void glTexCoord1dv (const GLdouble *v)" "void glTexCoord1f (GLfloat s)" "void glTexCoord1fv (const GLfloat *v)" "void glTexCoord1i (GLint s)" "void glTexCoord1iv (const GLint *v)" "void glTexCoord1s (GLshort s)" "void glTexCoord1sv (const GLshort *v)" "void glTexCoord2d (GLdouble s, GLdouble t)" "void glTexCoord2dv (const GLdouble *v)" "void glTexCoord2f (GLfloat s, GLfloat t)" "void glTexCoord2fv (const GLfloat *v)" "void glTexCoord2i (GLint s, GLint t)" "void glTexCoord2iv (const GLint *v)" "void glTexCoord2s (GLshort s, GLshort t)" "void glTexCoord2sv (const GLshort *v)" "void glTexCoord3d (GLdouble s, GLdouble t, GLdouble r)" "void glTexCoord3dv (const GLdouble *v)" "void glTexCoord3f (GLfloat s, GLfloat t, GLfloat r)" "void glTexCoord3fv (const GLfloat *v)" "void glTexCoord3i (GLint s, GLint t, GLint r)" "void glTexCoord3iv (const GLint *v)" "void glTexCoord3s (GLshort s, GLshort t, GLshort r)" "void glTexCoord3sv (const GLshort *v)" "void glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q)" "void glTexCoord4dv (const GLdouble *v)" "void glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q)" "void glTexCoord4fv (const GLfloat *v)" "void glTexCoord4i (GLint s, GLint t, GLint r, GLint q)" "void glTexCoord4iv (const GLint *v)" "void glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q)" "void glTexCoord4sv (const GLshort *v)" "void glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)" "void glTexEnvf (GLenum target, GLenum pname, GLfloat param)" "void glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params)" "void glTexEnvi (GLenum target, GLenum pname, GLint param)" "void glTexEnviv (GLenum target, GLenum pname, const GLint *params)" "void glTexGend (GLenum coord, GLenum pname, GLdouble param)" "void glTexGendv (GLenum coord, GLenum pname, const GLdouble *params)" "void glTexGenf (GLenum coord, GLenum pname, GLfloat param)" "void glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params)" "void glTexGeni (GLenum coord, GLenum pname, GLint param)" "void glTexGeniv (GLenum coord, GLenum pname, const GLint *params)" "void glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)" "void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)" "void glTexParameterf (GLenum target, GLenum pname, GLfloat param)" "void glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params)" "void glTexParameteri (GLenum target, GLenum pname, GLint param)" "void glTexParameteriv (GLenum target, GLenum pname, const GLint *params)" "void glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels)" "void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)" "void glTranslated (GLdouble x, GLdouble y, GLdouble z)" "void glTranslatef (GLfloat x, GLfloat y, GLfloat z)" "void glVertex2d (GLdouble x, GLdouble y)" "void glVertex2dv (const GLdouble *v)" "void glVertex2f (GLfloat x, GLfloat y)" "void glVertex2fv (const GLfloat *v)" "void glVertex2i (GLint x, GLint y)" "void glVertex2iv (const GLint *v)" "void glVertex2s (GLshort x, GLshort y)" "void glVertex2sv (const GLshort *v)" "void glVertex3d (GLdouble x, GLdouble y, GLdouble z)" "void glVertex3dv (const GLdouble *v)" "void glVertex3f (GLfloat x, GLfloat y, GLfloat z)" "void glVertex3fv (const GLfloat *v)" "void glVertex3i (GLint x, GLint y, GLint z)" "void glVertex3iv (const GLint *v)" "void glVertex3s (GLshort x, GLshort y, GLshort z)" "void glVertex3sv (const GLshort *v)" "void glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glVertex4dv (const GLdouble *v)" "void glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glVertex4fv (const GLfloat *v)" "void glVertex4i (GLint x, GLint y, GLint z, GLint w)" "void glVertex4iv (const GLint *v)" "void glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w)" "void glVertex4sv (const GLshort *v)" "void glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)" "void glViewport (GLint x, GLint y, GLsizei width, GLsizei height)" "void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices)" "void glTexImage3D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)" "void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels)" "void glActiveTexture (GLenum texture)" "void glClientActiveTexture (GLenum texture)" "void glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data)" "void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)" "void glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data)" "void glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data)" "void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)" "void glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data)" "void glGetCompressedTexImage (GLenum target, GLint lod, GLvoid *img)" "void glLoadTransposeMatrixd (const GLdouble m\[16\])" "void glLoadTransposeMatrixf (const GLfloat m\[16\])" "void glMultTransposeMatrixd (const GLdouble m\[16\])" "void glMultTransposeMatrixf (const GLfloat m\[16\])" "void glMultiTexCoord1d (GLenum target, GLdouble s)" "void glMultiTexCoord1dv (GLenum target, const GLdouble *v)" "void glMultiTexCoord1f (GLenum target, GLfloat s)" "void glMultiTexCoord1fv (GLenum target, const GLfloat *v)" "void glMultiTexCoord1i (GLenum target, GLint s)" "void glMultiTexCoord1iv (GLenum target, const GLint *v)" "void glMultiTexCoord1s (GLenum target, GLshort s)" "void glMultiTexCoord1sv (GLenum target, const GLshort *v)" "void glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t)" "void glMultiTexCoord2dv (GLenum target, const GLdouble *v)" "void glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t)" "void glMultiTexCoord2fv (GLenum target, const GLfloat *v)" "void glMultiTexCoord2i (GLenum target, GLint s, GLint t)" "void glMultiTexCoord2iv (GLenum target, const GLint *v)" "void glMultiTexCoord2s (GLenum target, GLshort s, GLshort t)" "void glMultiTexCoord2sv (GLenum target, const GLshort *v)" "void glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r)" "void glMultiTexCoord3dv (GLenum target, const GLdouble *v)" "void glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r)" "void glMultiTexCoord3fv (GLenum target, const GLfloat *v)" "void glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r)" "void glMultiTexCoord3iv (GLenum target, const GLint *v)" "void glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r)" "void glMultiTexCoord3sv (GLenum target, const GLshort *v)" "void glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)" "void glMultiTexCoord4dv (GLenum target, const GLdouble *v)" "void glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)" "void glMultiTexCoord4fv (GLenum target, const GLfloat *v)" "void glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q)" "void glMultiTexCoord4iv (GLenum target, const GLint *v)" "void glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)" "void glMultiTexCoord4sv (GLenum target, const GLshort *v)" "void glSampleCoverage (GLclampf value, GLboolean invert)" "void glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)" "void glBlendEquation (GLenum mode)" "void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)" "void glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer)" "void glFogCoordd (GLdouble coord)" "void glFogCoorddv (const GLdouble *coord)" "void glFogCoordf (GLfloat coord)" "void glFogCoordfv (const GLfloat *coord)" "void glMultiDrawArrays (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount)" "void glMultiDrawElements (GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)" "void glPointParameterf (GLenum pname, GLfloat param)" "void glPointParameterfv (GLenum pname, const GLfloat *params)" "void glPointParameteri (GLenum pname, GLint param)" "void glPointParameteriv (GLenum pname, const GLint *params)" "void glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue)" "void glSecondaryColor3bv (const GLbyte *v)" "void glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue)" "void glSecondaryColor3dv (const GLdouble *v)" "void glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue)" "void glSecondaryColor3fv (const GLfloat *v)" "void glSecondaryColor3i (GLint red, GLint green, GLint blue)" "void glSecondaryColor3iv (const GLint *v)" "void glSecondaryColor3s (GLshort red, GLshort green, GLshort blue)" "void glSecondaryColor3sv (const GLshort *v)" "void glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue)" "void glSecondaryColor3ubv (const GLubyte *v)" "void glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue)" "void glSecondaryColor3uiv (const GLuint *v)" "void glSecondaryColor3us (GLushort red, GLushort green, GLushort blue)" "void glSecondaryColor3usv (const GLushort *v)" "void glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, GLvoid *pointer)" "void glWindowPos2d (GLdouble x, GLdouble y)" "void glWindowPos2dv (const GLdouble *p)" "void glWindowPos2f (GLfloat x, GLfloat y)" "void glWindowPos2fv (const GLfloat *p)" "void glWindowPos2i (GLint x, GLint y)" "void glWindowPos2iv (const GLint *p)" "void glWindowPos2s (GLshort x, GLshort y)" "void glWindowPos2sv (const GLshort *p)" "void glWindowPos3d (GLdouble x, GLdouble y, GLdouble z)" "void glWindowPos3dv (const GLdouble *p)" "void glWindowPos3f (GLfloat x, GLfloat y, GLfloat z)" "void glWindowPos3fv (const GLfloat *p)" "void glWindowPos3i (GLint x, GLint y, GLint z)" "void glWindowPos3iv (const GLint *p)" "void glWindowPos3s (GLshort x, GLshort y, GLshort z)" "void glWindowPos3sv (const GLshort *p)" "void glBeginQuery (GLenum target, GLuint id)" "void glBindBuffer (GLenum target, GLuint buffer)" "void glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)" "void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)" "void glDeleteBuffers (GLsizei n, const GLuint* buffers)" "void glDeleteQueries (GLsizei n, const GLuint* ids)" "void glEndQuery (GLenum target)" "void glGenBuffers (GLsizei n, GLuint* buffers)" "void glGenQueries (GLsizei n, GLuint* ids)" "void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params)" "void glGetBufferPointerv (GLenum target, GLenum pname, GLvoid** params)" "void glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data)" "void glGetQueryObjectiv (GLuint id, GLenum pname, GLint* params)" "void glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint* params)" "void glGetQueryiv (GLenum target, GLenum pname, GLint* params)" "GLboolean glIsBuffer (GLuint buffer)" "GLboolean glIsQuery (GLuint id)" "GLvoid* glMapBuffer (GLenum target, GLenum access)" "GLboolean glUnmapBuffer (GLenum target)" "void glAttachShader (GLuint program, GLuint shader)" "void glBindAttribLocation (GLuint program, GLuint index, const GLchar* name)" "void glBlendEquationSeparate (GLenum, GLenum)" "void glCompileShader (GLuint shader)" "GLuint glCreateProgram (void)" "GLuint glCreateShader (GLenum type)" "void glDeleteProgram (GLuint program)" "void glDeleteShader (GLuint shader)" "void glDetachShader (GLuint program, GLuint shader)" "void glDisableVertexAttribArray (GLuint)" "void glDrawBuffers (GLsizei n, const GLenum* bufs)" "void glEnableVertexAttribArray (GLuint)" "void glGetActiveAttrib (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name)" "void glGetActiveUniform (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name)" "void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders)" "GLint glGetAttribLocation (GLuint program, const GLchar* name)" "void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog)" "void glGetProgramiv (GLuint program, GLenum pname, GLint* param)" "void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog)" "void glGetShaderSource (GLint obj, GLsizei maxLength, GLsizei* length, GLchar* source)" "void glGetShaderiv (GLuint shader, GLenum pname, GLint* param)" "GLint glGetUniformLocation (GLuint program, const GLchar* name)" "void glGetUniformfv (GLuint program, GLint location, GLfloat* params)" "void glGetUniformiv (GLuint program, GLint location, GLint* params)" "void glGetVertexAttribPointerv (GLuint, GLenum, GLvoid*)" "void glGetVertexAttribdv (GLuint, GLenum, GLdouble*)" "void glGetVertexAttribfv (GLuint, GLenum, GLfloat*)" "void glGetVertexAttribiv (GLuint, GLenum, GLint*)" "GLboolean glIsProgram (GLuint program)" "GLboolean glIsShader (GLuint shader)" "void glLinkProgram (GLuint program)" "void glShaderSource (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths)" "void glStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)" "void glStencilMaskSeparate (GLenum, GLuint)" "void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)" "void glUniform1f (GLint location, GLfloat v0)" "void glUniform1fv (GLint location, GLsizei count, const GLfloat* value)" "void glUniform1i (GLint location, GLint v0)" "void glUniform1iv (GLint location, GLsizei count, const GLint* value)" "void glUniform2f (GLint location, GLfloat v0, GLfloat v1)" "void glUniform2fv (GLint location, GLsizei count, const GLfloat* value)" "void glUniform2i (GLint location, GLint v0, GLint v1)" "void glUniform2iv (GLint location, GLsizei count, const GLint* value)" "void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)" "void glUniform3fv (GLint location, GLsizei count, const GLfloat* value)" "void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2)" "void glUniform3iv (GLint location, GLsizei count, const GLint* value)" "void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)" "void glUniform4fv (GLint location, GLsizei count, const GLfloat* value)" "void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)" "void glUniform4iv (GLint location, GLsizei count, const GLint* value)" "void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glUseProgram (GLuint program)" "void glValidateProgram (GLuint program)" "void glVertexAttrib1d (GLuint index, GLdouble x)" "void glVertexAttrib1dv (GLuint index, const GLdouble* v)" "void glVertexAttrib1f (GLuint index, GLfloat x)" "void glVertexAttrib1fv (GLuint index, const GLfloat* v)" "void glVertexAttrib1s (GLuint index, GLshort x)" "void glVertexAttrib1sv (GLuint index, const GLshort* v)" "void glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y)" "void glVertexAttrib2dv (GLuint index, const GLdouble* v)" "void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y)" "void glVertexAttrib2fv (GLuint index, const GLfloat* v)" "void glVertexAttrib2s (GLuint index, GLshort x, GLshort y)" "void glVertexAttrib2sv (GLuint index, const GLshort* v)" "void glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z)" "void glVertexAttrib3dv (GLuint index, const GLdouble* v)" "void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z)" "void glVertexAttrib3fv (GLuint index, const GLfloat* v)" "void glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z)" "void glVertexAttrib3sv (GLuint index, const GLshort* v)" "void glVertexAttrib4Nbv (GLuint index, const GLbyte* v)" "void glVertexAttrib4Niv (GLuint index, const GLint* v)" "void glVertexAttrib4Nsv (GLuint index, const GLshort* v)" "void glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)" "void glVertexAttrib4Nubv (GLuint index, const GLubyte* v)" "void glVertexAttrib4Nuiv (GLuint index, const GLuint* v)" "void glVertexAttrib4Nusv (GLuint index, const GLushort* v)" "void glVertexAttrib4bv (GLuint index, const GLbyte* v)" "void glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glVertexAttrib4dv (GLuint index, const GLdouble* v)" "void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glVertexAttrib4fv (GLuint index, const GLfloat* v)" "void glVertexAttrib4iv (GLuint index, const GLint* v)" "void glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)" "void glVertexAttrib4sv (GLuint index, const GLshort* v)" "void glVertexAttrib4ubv (GLuint index, const GLubyte* v)" "void glVertexAttrib4uiv (GLuint index, const GLuint* v)" "void glVertexAttrib4usv (GLuint index, const GLushort* v)" "void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer)" "void glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)" "void glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)" "void glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)" "void glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)" "void glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)" "void glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)" "void glBeginConditionalRender (GLuint, GLenum)" "void glBeginTransformFeedback (GLenum)" "void glBindBufferBase (GLenum, GLuint, GLuint)" "void glBindBufferRange (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr)" "void glBindFragDataLocation (GLuint, GLuint, const GLchar*)" "void glClampColor (GLenum, GLenum)" "void glClearBufferfi (GLenum, GLint, GLfloat, GLint)" "void glClearBufferfv (GLenum, GLint, const GLfloat*)" "void glClearBufferiv (GLenum, GLint, const GLint*)" "void glClearBufferuiv (GLenum, GLint, const GLuint*)" "void glColorMaski (GLuint, GLboolean, GLboolean, GLboolean, GLboolean)" "void glDisablei (GLenum, GLuint)" "void glEnablei (GLenum, GLuint)" "void glEndConditionalRender (void)" "void glEndTransformFeedback (void)" "void glGetBooleani_v (GLenum, GLuint, GLboolean*)" "GLint glGetFragDataLocation (GLuint, const GLchar*)" "void glGetIntegeri_v (GLenum, GLuint, GLint*)" "const GLubyte* glGetStringi (GLenum, GLuint)" "void glGetTexParameterIiv (GLenum, GLenum, GLint*)" "void glGetTexParameterIuiv (GLenum, GLenum, GLuint*)" "void glGetTransformFeedbackVarying (GLuint, GLuint, GLint*)" "void glGetUniformuiv (GLuint, GLint, GLuint*)" "void glGetVertexAttribIiv (GLuint, GLenum, GLint*)" "void glGetVertexAttribIuiv (GLuint, GLenum, GLuint*)" "GLboolean glIsEnabledi (GLenum, GLuint)" "void glTexParameterIiv (GLenum, GLenum, const GLint*)" "void glTexParameterIuiv (GLenum, GLenum, const GLuint*)" "void glTransformFeedbackVaryings (GLuint, GLsizei, const GLint*, GLenum)" "void glUniform1ui (GLint, GLuint)" "void glUniform1uiv (GLint, GLsizei, const GLuint*)" "void glUniform2ui (GLint, GLuint, GLuint)" "void glUniform2uiv (GLint, GLsizei, const GLuint*)" "void glUniform3ui (GLint, GLuint, GLuint, GLuint)" "void glUniform3uiv (GLint, GLsizei, const GLuint*)" "void glUniform4ui (GLint, GLuint, GLuint, GLuint, GLuint)" "void glUniform4uiv (GLint, GLsizei, const GLuint*)" "void glVertexAttribI1i (GLuint, GLint)" "void glVertexAttribI1iv (GLuint, const GLint*)" "void glVertexAttribI1ui (GLuint, GLuint)" "void glVertexAttribI1uiv (GLuint, const GLuint*)" "void glVertexAttribI2i (GLuint, GLint, GLint)" "void glVertexAttribI2iv (GLuint, const GLint*)" "void glVertexAttribI2ui (GLuint, GLuint, GLuint)" "void glVertexAttribI2uiv (GLuint, const GLuint*)" "void glVertexAttribI3i (GLuint, GLint, GLint, GLint)" "void glVertexAttribI3iv (GLuint, const GLint*)" "void glVertexAttribI3ui (GLuint, GLuint, GLuint, GLuint)" "void glVertexAttribI3uiv (GLuint, const GLuint*)" "void glVertexAttribI4bv (GLuint, const GLbyte*)" "void glVertexAttribI4i (GLuint, GLint, GLint, GLint, GLint)" "void glVertexAttribI4iv (GLuint, const GLint*)" "void glVertexAttribI4sv (GLuint, const GLshort*)" "void glVertexAttribI4ubv (GLuint, const GLubyte*)" "void glVertexAttribI4ui (GLuint, GLuint, GLuint, GLuint, GLuint)" "void glVertexAttribI4uiv (GLuint, const GLuint*)" "void glVertexAttribI4usv (GLuint, const GLushort*)" "void glVertexAttribIPointer (GLuint, GLint, GLenum, GLsizei, const GLvoid*)" "void glTbufferMask3DFX (GLuint mask)" "void glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count)" "void glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count)" "void glElementPointerAPPLE (GLenum type, const void* pointer)" "void glMultiDrawElementArrayAPPLE (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount)" "void glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount)" "void glDeleteFencesAPPLE (GLsizei n, const GLuint* fences)" "void glFinishFenceAPPLE (GLuint fence)" "void glFinishObjectAPPLE (GLenum object, GLint name)" "void glGenFencesAPPLE (GLsizei n, GLuint* fences)" "GLboolean glIsFenceAPPLE (GLuint fence)" "void glSetFenceAPPLE (GLuint fence)" "GLboolean glTestFenceAPPLE (GLuint fence)" "GLboolean glTestObjectAPPLE (GLenum object, GLuint name)" "void glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param)" "void glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size)" "void glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid **params)" "void glTextureRangeAPPLE (GLenum target, GLsizei length, GLvoid *pointer)" "void glBindVertexArrayAPPLE (GLuint array)" "void glDeleteVertexArraysAPPLE (GLsizei n, const GLuint* arrays)" "void glGenVertexArraysAPPLE (GLsizei n, const GLuint* arrays)" "GLboolean glIsVertexArrayAPPLE (GLuint array)" "void glFlushVertexArrayRangeAPPLE (GLsizei length, void* pointer)" "void glVertexArrayParameteriAPPLE (GLenum pname, GLint param)" "void glVertexArrayRangeAPPLE (GLsizei length, void* pointer)" "void glClampColorARB (GLenum target, GLenum clamp)" "void glDrawBuffersARB (GLsizei n, const GLenum* bufs)" "void glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount)" "void glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount)" "void glBindFramebuffer (GLenum target, GLuint framebuffer)" "void glBindRenderbuffer (GLenum target, GLuint renderbuffer)" "void glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)" "GLenum glCheckFramebufferStatus (GLenum target)" "void glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers)" "void glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers)" "void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)" "void glFramebufferTexturLayer (GLenum target,GLenum attachment, GLuint texture,GLint level,GLint layer)" "void glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)" "void glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)" "void glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer)" "void glGenFramebuffers (GLsizei n, GLuint* framebuffers)" "void glGenRenderbuffers (GLsizei n, GLuint* renderbuffers)" "void glGenerateMipmap (GLenum target)" "void glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params)" "void glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params)" "GLboolean glIsFramebuffer (GLuint framebuffer)" "GLboolean glIsRenderbuffer (GLuint renderbuffer)" "void glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)" "void glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)" "void glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level)" "void glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face)" "void glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)" "void glProgramParameteriARB (GLuint program, GLenum pname, GLint value)" "void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data)" "void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table)" "void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params)" "void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params)" "void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image)" "void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image)" "void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params)" "void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params)" "void glConvolutionParameteri (GLenum target, GLenum pname, GLint params)" "void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params)" "void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width)" "void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)" "void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)" "void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height)" "void glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table)" "void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params)" "void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params)" "void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image)" "void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params)" "void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params)" "void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)" "void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params)" "void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params)" "void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values)" "void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params)" "void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params)" "void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span)" "void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink)" "void glMinmax (GLenum target, GLenum internalformat, GLboolean sink)" "void glResetHistogram (GLenum target)" "void glResetMinmax (GLenum target)" "void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column)" "void glVertexAttribDivisorARB (GLuint index, GLuint divisor)" "void glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length)" "GLvoid * glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)" "void glCurrentPaletteMatrixARB (GLint index)" "void glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer)" "void glMatrixIndexubvARB (GLint size, GLubyte *indices)" "void glMatrixIndexuivARB (GLint size, GLuint *indices)" "void glMatrixIndexusvARB (GLint size, GLushort *indices)" "void glSampleCoverageARB (GLclampf value, GLboolean invert)" "void glActiveTextureARB (GLenum texture)" "void glClientActiveTextureARB (GLenum texture)" "void glMultiTexCoord1dARB (GLenum target, GLdouble s)" "void glMultiTexCoord1dvARB (GLenum target, const GLdouble *v)" "void glMultiTexCoord1fARB (GLenum target, GLfloat s)" "void glMultiTexCoord1fvARB (GLenum target, const GLfloat *v)" "void glMultiTexCoord1iARB (GLenum target, GLint s)" "void glMultiTexCoord1ivARB (GLenum target, const GLint *v)" "void glMultiTexCoord1sARB (GLenum target, GLshort s)" "void glMultiTexCoord1svARB (GLenum target, const GLshort *v)" "void glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t)" "void glMultiTexCoord2dvARB (GLenum target, const GLdouble *v)" "void glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t)" "void glMultiTexCoord2fvARB (GLenum target, const GLfloat *v)" "void glMultiTexCoord2iARB (GLenum target, GLint s, GLint t)" "void glMultiTexCoord2ivARB (GLenum target, const GLint *v)" "void glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t)" "void glMultiTexCoord2svARB (GLenum target, const GLshort *v)" "void glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r)" "void glMultiTexCoord3dvARB (GLenum target, const GLdouble *v)" "void glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r)" "void glMultiTexCoord3fvARB (GLenum target, const GLfloat *v)" "void glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r)" "void glMultiTexCoord3ivARB (GLenum target, const GLint *v)" "void glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r)" "void glMultiTexCoord3svARB (GLenum target, const GLshort *v)" "void glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)" "void glMultiTexCoord4dvARB (GLenum target, const GLdouble *v)" "void glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)" "void glMultiTexCoord4fvARB (GLenum target, const GLfloat *v)" "void glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q)" "void glMultiTexCoord4ivARB (GLenum target, const GLint *v)" "void glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)" "void glMultiTexCoord4svARB (GLenum target, const GLshort *v)" "void glBeginQueryARB (GLenum target, GLuint id)" "void glDeleteQueriesARB (GLsizei n, const GLuint* ids)" "void glEndQueryARB (GLenum target)" "void glGenQueriesARB (GLsizei n, GLuint* ids)" "void glGetQueryObjectivARB (GLuint id, GLenum pname, GLint* params)" "void glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint* params)" "void glGetQueryivARB (GLenum target, GLenum pname, GLint* params)" "GLboolean glIsQueryARB (GLuint id)" "void glPointParameterfARB (GLenum pname, GLfloat param)" "void glPointParameterfvARB (GLenum pname, const GLfloat* params)" "void glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj)" "void glCompileShaderARB (GLhandleARB shaderObj)" "GLhandleARB glCreateProgramObjectARB (void)" "GLhandleARB glCreateShaderObjectARB (GLenum shaderType)" "void glDeleteObjectARB (GLhandleARB obj)" "void glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj)" "void glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name)" "void glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj)" "GLhandleARB glGetHandleARB (GLenum pname)" "void glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog)" "void glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat* params)" "void glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint* params)" "void glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source)" "GLint glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB* name)" "void glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat* params)" "void glGetUniformivARB (GLhandleARB programObj, GLint location, GLint* params)" "void glLinkProgramARB (GLhandleARB programObj)" "void glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length)" "void glUniform1fARB (GLint location, GLfloat v0)" "void glUniform1fvARB (GLint location, GLsizei count, const GLfloat* value)" "void glUniform1iARB (GLint location, GLint v0)" "void glUniform1ivARB (GLint location, GLsizei count, const GLint* value)" "void glUniform2fARB (GLint location, GLfloat v0, GLfloat v1)" "void glUniform2fvARB (GLint location, GLsizei count, const GLfloat* value)" "void glUniform2iARB (GLint location, GLint v0, GLint v1)" "void glUniform2ivARB (GLint location, GLsizei count, const GLint* value)" "void glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)" "void glUniform3fvARB (GLint location, GLsizei count, const GLfloat* value)" "void glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2)" "void glUniform3ivARB (GLint location, GLsizei count, const GLint* value)" "void glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)" "void glUniform4fvARB (GLint location, GLsizei count, const GLfloat* value)" "void glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)" "void glUniform4ivARB (GLint location, GLsizei count, const GLint* value)" "void glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glUseProgramObjectARB (GLhandleARB programObj)" "void glValidateProgramARB (GLhandleARB programObj)" "void glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer)" "void glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data)" "void glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)" "void glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data)" "void glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data)" "void glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)" "void glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data)" "void glGetCompressedTexImageARB (GLenum target, GLint lod, void* img)" "void glLoadTransposeMatrixdARB (GLdouble m\[16\])" "void glLoadTransposeMatrixfARB (GLfloat m\[16\])" "void glMultTransposeMatrixdARB (GLdouble m\[16\])" "void glMultTransposeMatrixfARB (GLfloat m\[16\])" "void glBindVertexArray (GLuint array)" "void glDeleteVertexArrays (GLsizei n, const GLuint* arrays)" "void glGenVertexArrays (GLsizei n, GLuint* arrays)" "GLboolean glIsVertexArray (GLuint array)" "void glVertexBlendARB (GLint count)" "void glWeightPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer)" "void glWeightbvARB (GLint size, GLbyte *weights)" "void glWeightdvARB (GLint size, GLdouble *weights)" "void glWeightfvARB (GLint size, GLfloat *weights)" "void glWeightivARB (GLint size, GLint *weights)" "void glWeightsvARB (GLint size, GLshort *weights)" "void glWeightubvARB (GLint size, GLubyte *weights)" "void glWeightuivARB (GLint size, GLuint *weights)" "void glWeightusvARB (GLint size, GLushort *weights)" "void glBindBufferARB (GLenum target, GLuint buffer)" "void glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid* data, GLenum usage)" "void glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid* data)" "void glDeleteBuffersARB (GLsizei n, const GLuint* buffers)" "void glGenBuffersARB (GLsizei n, GLuint* buffers)" "void glGetBufferParameterivARB (GLenum target, GLenum pname, GLint* params)" "void glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid** params)" "void glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid* data)" "GLboolean glIsBufferARB (GLuint buffer)" "GLvoid * glMapBufferARB (GLenum target, GLenum access)" "GLboolean glUnmapBufferARB (GLenum target)" "void glBindProgramARB (GLenum target, GLuint program)" "void glDeleteProgramsARB (GLsizei n, const GLuint* programs)" "void glDisableVertexAttribArrayARB (GLuint index)" "void glEnableVertexAttribArrayARB (GLuint index)" "void glGenProgramsARB (GLsizei n, GLuint* programs)" "void glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble* params)" "void glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat* params)" "void glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble* params)" "void glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat* params)" "void glGetProgramStringARB (GLenum target, GLenum pname, void* string)" "void glGetProgramivARB (GLenum target, GLenum pname, GLint* params)" "void glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid** pointer)" "void glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble* params)" "void glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat* params)" "void glGetVertexAttribivARB (GLuint index, GLenum pname, GLint* params)" "GLboolean glIsProgramARB (GLuint program)" "void glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble* params)" "void glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat* params)" "void glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble* params)" "void glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat* params)" "void glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void* string)" "void glVertexAttrib1dARB (GLuint index, GLdouble x)" "void glVertexAttrib1dvARB (GLuint index, const GLdouble* v)" "void glVertexAttrib1fARB (GLuint index, GLfloat x)" "void glVertexAttrib1fvARB (GLuint index, const GLfloat* v)" "void glVertexAttrib1sARB (GLuint index, GLshort x)" "void glVertexAttrib1svARB (GLuint index, const GLshort* v)" "void glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y)" "void glVertexAttrib2dvARB (GLuint index, const GLdouble* v)" "void glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y)" "void glVertexAttrib2fvARB (GLuint index, const GLfloat* v)" "void glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y)" "void glVertexAttrib2svARB (GLuint index, const GLshort* v)" "void glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z)" "void glVertexAttrib3dvARB (GLuint index, const GLdouble* v)" "void glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z)" "void glVertexAttrib3fvARB (GLuint index, const GLfloat* v)" "void glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z)" "void glVertexAttrib3svARB (GLuint index, const GLshort* v)" "void glVertexAttrib4NbvARB (GLuint index, const GLbyte* v)" "void glVertexAttrib4NivARB (GLuint index, const GLint* v)" "void glVertexAttrib4NsvARB (GLuint index, const GLshort* v)" "void glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)" "void glVertexAttrib4NubvARB (GLuint index, const GLubyte* v)" "void glVertexAttrib4NuivARB (GLuint index, const GLuint* v)" "void glVertexAttrib4NusvARB (GLuint index, const GLushort* v)" "void glVertexAttrib4bvARB (GLuint index, const GLbyte* v)" "void glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glVertexAttrib4dvARB (GLuint index, const GLdouble* v)" "void glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glVertexAttrib4fvARB (GLuint index, const GLfloat* v)" "void glVertexAttrib4ivARB (GLuint index, const GLint* v)" "void glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)" "void glVertexAttrib4svARB (GLuint index, const GLshort* v)" "void glVertexAttrib4ubvARB (GLuint index, const GLubyte* v)" "void glVertexAttrib4uivARB (GLuint index, const GLuint* v)" "void glVertexAttrib4usvARB (GLuint index, const GLushort* v)" "void glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer)" "void glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB* name)" "void glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name)" "GLint glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB* name)" "void glWindowPos2dARB (GLdouble x, GLdouble y)" "void glWindowPos2dvARB (const GLdouble* p)" "void glWindowPos2fARB (GLfloat x, GLfloat y)" "void glWindowPos2fvARB (const GLfloat* p)" "void glWindowPos2iARB (GLint x, GLint y)" "void glWindowPos2ivARB (const GLint* p)" "void glWindowPos2sARB (GLshort x, GLshort y)" "void glWindowPos2svARB (const GLshort* p)" "void glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z)" "void glWindowPos3dvARB (const GLdouble* p)" "void glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z)" "void glWindowPos3fvARB (const GLfloat* p)" "void glWindowPos3iARB (GLint x, GLint y, GLint z)" "void glWindowPos3ivARB (const GLint* p)" "void glWindowPos3sARB (GLshort x, GLshort y, GLshort z)" "void glWindowPos3svARB (const GLshort* p)" "void glDrawBuffersATI (GLsizei n, const GLenum* bufs)" "void glDrawElementArrayATI (GLenum mode, GLsizei count)" "void glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count)" "void glElementPointerATI (GLenum type, const void* pointer)" "void glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param)" "void glGetTexBumpParameterivATI (GLenum pname, GLint *param)" "void glTexBumpParameterfvATI (GLenum pname, GLfloat *param)" "void glTexBumpParameterivATI (GLenum pname, GLint *param)" "void glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod)" "void glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod)" "void glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod)" "void glBeginFragmentShaderATI (void)" "void glBindFragmentShaderATI (GLuint id)" "void glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod)" "void glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod)" "void glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod)" "void glDeleteFragmentShaderATI (GLuint id)" "void glEndFragmentShaderATI (void)" "GLuint glGenFragmentShadersATI (GLuint range)" "void glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle)" "void glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle)" "void glSetFragmentShaderConstantATI (GLuint dst, const GLfloat* value)" "void* glMapObjectBufferATI (GLuint buffer)" "void glUnmapObjectBufferATI (GLuint buffer)" "void glPNTrianglesfATI (GLenum pname, GLfloat param)" "void glPNTrianglesiATI (GLenum pname, GLint param)" "void glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)" "void glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)" "void glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset)" "void glFreeObjectBufferATI (GLuint buffer)" "void glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat* params)" "void glGetArrayObjectivATI (GLenum array, GLenum pname, GLint* params)" "void glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat* params)" "void glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint* params)" "void glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat* params)" "void glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint* params)" "GLboolean glIsObjectBufferATI (GLuint buffer)" "GLuint glNewObjectBufferATI (GLsizei size, const void* pointer, GLenum usage)" "void glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve)" "void glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset)" "void glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat* params)" "void glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint* params)" "void glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset)" "void glClientActiveVertexStreamATI (GLenum stream)" "void glNormalStream3bATI (GLenum stream, GLbyte x, GLbyte y, GLbyte z)" "void glNormalStream3bvATI (GLenum stream, const GLbyte *v)" "void glNormalStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z)" "void glNormalStream3dvATI (GLenum stream, const GLdouble *v)" "void glNormalStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z)" "void glNormalStream3fvATI (GLenum stream, const GLfloat *v)" "void glNormalStream3iATI (GLenum stream, GLint x, GLint y, GLint z)" "void glNormalStream3ivATI (GLenum stream, const GLint *v)" "void glNormalStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z)" "void glNormalStream3svATI (GLenum stream, const GLshort *v)" "void glVertexBlendEnvfATI (GLenum pname, GLfloat param)" "void glVertexBlendEnviATI (GLenum pname, GLint param)" "void glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y)" "void glVertexStream2dvATI (GLenum stream, const GLdouble *v)" "void glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y)" "void glVertexStream2fvATI (GLenum stream, const GLfloat *v)" "void glVertexStream2iATI (GLenum stream, GLint x, GLint y)" "void glVertexStream2ivATI (GLenum stream, const GLint *v)" "void glVertexStream2sATI (GLenum stream, GLshort x, GLshort y)" "void glVertexStream2svATI (GLenum stream, const GLshort *v)" "void glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z)" "void glVertexStream3dvATI (GLenum stream, const GLdouble *v)" "void glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z)" "void glVertexStream3fvATI (GLenum stream, const GLfloat *v)" "void glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z)" "void glVertexStream3ivATI (GLenum stream, const GLint *v)" "void glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z)" "void glVertexStream3svATI (GLenum stream, const GLshort *v)" "void glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glVertexStream4dvATI (GLenum stream, const GLdouble *v)" "void glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glVertexStream4fvATI (GLenum stream, const GLfloat *v)" "void glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w)" "void glVertexStream4ivATI (GLenum stream, const GLint *v)" "void glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w)" "void glVertexStream4svATI (GLenum stream, const GLshort *v)" "GLint glGetUniformBufferSizeEXT (GLuint program, GLint location)" "GLintptr glGetUniformOffsetEXT (GLuint program, GLint location)" "void glUniformBufferEXT (GLuint program, GLint location, GLuint buffer)" "void glBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)" "void glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha)" "void glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)" "void glBlendEquationEXT (GLenum mode)" "void glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void* data)" "void glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width)" "void glLockArraysEXT (GLint first, GLsizei count)" "void glUnlockArraysEXT (void)" "void glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* image)" "void glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* image)" "void glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat param)" "void glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params)" "void glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint param)" "void glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint* params)" "void glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)" "void glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height)" "void glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void* image)" "void glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat* params)" "void glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint* params)" "void glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void* row, void* column, void* span)" "void glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* row, const void* column)" "void glBinormalPointerEXT (GLenum type, GLsizei stride, void* pointer)" "void glTangentPointerEXT (GLenum type, GLsizei stride, void* pointer)" "void glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)" "void glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)" "void glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)" "void glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glCullParameterdvEXT (GLenum pname, GLdouble* params)" "void glCullParameterfvEXT (GLenum pname, GLfloat* params)" "void glDepthBoundsEXT (GLclampd zmin, GLclampd zmax)" "void glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture)" "GLenum glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target)" "void glClientAttribDefaultEXT (GLbitfield mask)" "void glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data)" "void glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)" "void glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data)" "void glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data)" "void glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)" "void glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data)" "void glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data)" "void glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)" "void glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data)" "void glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data)" "void glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)" "void glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data)" "void glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)" "void glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)" "void glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)" "void glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)" "void glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)" "void glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)" "void glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)" "void glDisableClientStateIndexedEXT (GLenum array, GLuint index)" "void glEnableClientStateIndexedEXT (GLenum array, GLuint index)" "void glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode)" "void glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum* bufs)" "void glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode)" "void glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target)" "void glGenerateTextureMipmapEXT (GLuint texture, GLenum target)" "void glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, void* img)" "void glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint level, void* img)" "void glGetDoubleIndexedvEXT (GLenum pname, GLuint index, GLdouble* params)" "void glGetFloatIndexedvEXT (GLenum pname, GLuint index, GLfloat* params)" "void glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint* param)" "void glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat* params)" "void glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params)" "void glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params)" "void glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params)" "void glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint* params)" "void glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void* pixels)" "void glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params)" "void glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params)" "void glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params)" "void glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint* params)" "void glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat* params)" "void glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params)" "void glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint* params)" "void glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void** params)" "void glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void* data)" "void glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params)" "void glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint* params)" "void glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint* params)" "void glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble* params)" "void glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat* params)" "void glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void* string)" "void glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint* params)" "void glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint* params)" "void glGetPointerIndexedvEXT (GLenum pname, GLuint index, GLvoid** params)" "void glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void* pixels)" "void glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params)" "void glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params)" "void glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint* params)" "void glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint* params)" "void glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat* params)" "void glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint* params)" "GLvoid * glMapNamedBufferEXT (GLuint buffer, GLenum access)" "void glMatrixFrustumEXT (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f)" "void glMatrixLoadIdentityEXT (GLenum matrixMode)" "void glMatrixLoadTransposedEXT (GLenum matrixMode, const GLdouble* m)" "void glMatrixLoadTransposefEXT (GLenum matrixMode, const GLfloat* m)" "void glMatrixLoaddEXT (GLenum matrixMode, const GLdouble* m)" "void glMatrixLoadfEXT (GLenum matrixMode, const GLfloat* m)" "void glMatrixMultTransposedEXT (GLenum matrixMode, const GLdouble* m)" "void glMatrixMultTransposefEXT (GLenum matrixMode, const GLfloat* m)" "void glMatrixMultdEXT (GLenum matrixMode, const GLdouble* m)" "void glMatrixMultfEXT (GLenum matrixMode, const GLfloat* m)" "void glMatrixOrthoEXT (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f)" "void glMatrixPopEXT (GLenum matrixMode)" "void glMatrixPushEXT (GLenum matrixMode)" "void glMatrixRotatedEXT (GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z)" "void glMatrixRotatefEXT (GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)" "void glMatrixScaledEXT (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z)" "void glMatrixScalefEXT (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z)" "void glMatrixTranslatedEXT (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z)" "void glMatrixTranslatefEXT (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z)" "void glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer)" "void glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void* pointer)" "void glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param)" "void glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params)" "void glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param)" "void glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* params)" "void glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param)" "void glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params)" "void glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param)" "void glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params)" "void glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param)" "void glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint* params)" "void glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels)" "void glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)" "void glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels)" "void glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* params)" "void glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint* params)" "void glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param)" "void glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat* param)" "void glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param)" "void glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* param)" "void glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer)" "void glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels)" "void glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)" "void glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels)" "void glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void* data, GLenum usage)" "void glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data)" "void glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)" "void glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level)" "void glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level)" "void glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)" "void glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level)" "void glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face)" "void glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer)" "void glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble* params)" "void glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat* params)" "void glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w)" "void glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint* params)" "void glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)" "void glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint* params)" "void glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params)" "void glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params)" "void glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params)" "void glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void* string)" "void glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height)" "void glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height)" "void glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)" "void glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0)" "void glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value)" "void glProgramUniform1iEXT (GLuint program, GLint location, GLint v0)" "void glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value)" "void glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0)" "void glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value)" "void glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1)" "void glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value)" "void glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1)" "void glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value)" "void glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1)" "void glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value)" "void glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)" "void glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value)" "void glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2)" "void glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value)" "void glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)" "void glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value)" "void glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)" "void glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value)" "void glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)" "void glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value)" "void glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)" "void glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value)" "void glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)" "void glPushClientAttribDefaultEXT (GLbitfield mask)" "void glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer)" "void glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels)" "void glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)" "void glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels)" "void glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint* params)" "void glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint* params)" "void glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param)" "void glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat* param)" "void glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param)" "void glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint* param)" "void glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer)" "void glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels)" "void glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)" "void glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels)" "GLboolean glUnmapNamedBufferEXT (GLuint buffer)" "void glColorMaskIndexedEXT (GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)" "void glDisableIndexedEXT (GLenum target, GLuint index)" "void glEnableIndexedEXT (GLenum target, GLuint index)" "void glGetBooleanIndexedvEXT (GLenum value, GLuint index, GLboolean* data)" "void glGetIntegerIndexedvEXT (GLenum value, GLuint index, GLint* data)" "GLboolean glIsEnabledIndexedEXT (GLenum target, GLuint index)" "void glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount)" "void glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)" "void glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices)" "void glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer)" "void glFogCoorddEXT (GLdouble coord)" "void glFogCoorddvEXT (const GLdouble *coord)" "void glFogCoordfEXT (GLfloat coord)" "void glFogCoordfvEXT (const GLfloat *coord)" "void glFragmentColorMaterialEXT (GLenum face, GLenum mode)" "void glFragmentLightModelfEXT (GLenum pname, GLfloat param)" "void glFragmentLightModelfvEXT (GLenum pname, GLfloat* params)" "void glFragmentLightModeliEXT (GLenum pname, GLint param)" "void glFragmentLightModelivEXT (GLenum pname, GLint* params)" "void glFragmentLightfEXT (GLenum light, GLenum pname, GLfloat param)" "void glFragmentLightfvEXT (GLenum light, GLenum pname, GLfloat* params)" "void glFragmentLightiEXT (GLenum light, GLenum pname, GLint param)" "void glFragmentLightivEXT (GLenum light, GLenum pname, GLint* params)" "void glFragmentMaterialfEXT (GLenum face, GLenum pname, const GLfloat param)" "void glFragmentMaterialfvEXT (GLenum face, GLenum pname, const GLfloat* params)" "void glFragmentMaterialiEXT (GLenum face, GLenum pname, const GLint param)" "void glFragmentMaterialivEXT (GLenum face, GLenum pname, const GLint* params)" "void glGetFragmentLightfvEXT (GLenum light, GLenum pname, GLfloat* params)" "void glGetFragmentLightivEXT (GLenum light, GLenum pname, GLint* params)" "void glGetFragmentMaterialfvEXT (GLenum face, GLenum pname, const GLfloat* params)" "void glGetFragmentMaterialivEXT (GLenum face, GLenum pname, const GLint* params)" "void glLightEnviEXT (GLenum pname, GLint param)" "void glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)" "void glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)" "void glBindFramebufferEXT (GLenum target, GLuint framebuffer)" "void glBindRenderbufferEXT (GLenum target, GLuint renderbuffer)" "GLenum glCheckFramebufferStatusEXT (GLenum target)" "void glDeleteFramebuffersEXT (GLsizei n, const GLuint* framebuffers)" "void glDeleteRenderbuffersEXT (GLsizei n, const GLuint* renderbuffers)" "void glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)" "void glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)" "void glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)" "void glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)" "void glGenFramebuffersEXT (GLsizei n, GLuint* framebuffers)" "void glGenRenderbuffersEXT (GLsizei n, GLuint* renderbuffers)" "void glGenerateMipmapEXT (GLenum target)" "void glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint* params)" "void glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint* params)" "GLboolean glIsFramebufferEXT (GLuint framebuffer)" "GLboolean glIsRenderbufferEXT (GLuint renderbuffer)" "void glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)" "void glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level)" "void glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face)" "void glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)" "void glProgramParameteriEXT (GLuint program, GLenum pname, GLint value)" "void glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params)" "void glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params)" "void glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name)" "GLint glGetFragDataLocationEXT (GLuint program, const GLchar *name)" "void glGetUniformuivEXT (GLuint program, GLint location, GLuint *params)" "void glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params)" "void glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params)" "void glUniform1uiEXT (GLint location, GLuint v0)" "void glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value)" "void glUniform2uiEXT (GLint location, GLuint v0, GLuint v1)" "void glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value)" "void glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2)" "void glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value)" "void glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)" "void glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value)" "void glVertexAttribI1iEXT (GLuint index, GLint x)" "void glVertexAttribI1ivEXT (GLuint index, const GLint *v)" "void glVertexAttribI1uiEXT (GLuint index, GLuint x)" "void glVertexAttribI1uivEXT (GLuint index, const GLuint *v)" "void glVertexAttribI2iEXT (GLuint index, GLint x, GLint y)" "void glVertexAttribI2ivEXT (GLuint index, const GLint *v)" "void glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y)" "void glVertexAttribI2uivEXT (GLuint index, const GLuint *v)" "void glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z)" "void glVertexAttribI3ivEXT (GLuint index, const GLint *v)" "void glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z)" "void glVertexAttribI3uivEXT (GLuint index, const GLuint *v)" "void glVertexAttribI4bvEXT (GLuint index, const GLbyte *v)" "void glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w)" "void glVertexAttribI4ivEXT (GLuint index, const GLint *v)" "void glVertexAttribI4svEXT (GLuint index, const GLshort *v)" "void glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v)" "void glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)" "void glVertexAttribI4uivEXT (GLuint index, const GLuint *v)" "void glVertexAttribI4usvEXT (GLuint index, const GLushort *v)" "void glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)" "void glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values)" "void glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat* params)" "void glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint* params)" "void glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values)" "void glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat* params)" "void glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint* params)" "void glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink)" "void glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink)" "void glResetHistogramEXT (GLenum target)" "void glResetMinmaxEXT (GLenum target)" "void glIndexFuncEXT (GLenum func, GLfloat ref)" "void glIndexMaterialEXT (GLenum face, GLenum mode)" "void glApplyTextureEXT (GLenum mode)" "void glTextureLightEXT (GLenum pname)" "void glTextureMaterialEXT (GLenum face, GLenum mode)" "void glMultiDrawArraysEXT (GLenum mode, GLint* first, GLsizei *count, GLsizei primcount)" "void glMultiDrawElementsEXT (GLenum mode, GLsizei* count, GLenum type, const GLvoid **indices, GLsizei primcount)" "void glSampleMaskEXT (GLclampf value, GLboolean invert)" "void glSamplePatternEXT (GLenum pattern)" "void glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void* data)" "void glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void* data)" "void glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat* params)" "void glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint* params)" "void glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params)" "void glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint* params)" "void glPixelTransformParameterfEXT (GLenum target, GLenum pname, const GLfloat param)" "void glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params)" "void glPixelTransformParameteriEXT (GLenum target, GLenum pname, const GLint param)" "void glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint* params)" "void glPointParameterfEXT (GLenum pname, GLfloat param)" "void glPointParameterfvEXT (GLenum pname, const GLfloat* params)" "void glPolygonOffsetEXT (GLfloat factor, GLfloat bias)" "void glBeginSceneEXT (void)" "void glEndSceneEXT (void)" "void glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue)" "void glSecondaryColor3bvEXT (const GLbyte *v)" "void glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue)" "void glSecondaryColor3dvEXT (const GLdouble *v)" "void glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue)" "void glSecondaryColor3fvEXT (const GLfloat *v)" "void glSecondaryColor3iEXT (GLint red, GLint green, GLint blue)" "void glSecondaryColor3ivEXT (const GLint *v)" "void glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue)" "void glSecondaryColor3svEXT (const GLshort *v)" "void glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue)" "void glSecondaryColor3ubvEXT (const GLubyte *v)" "void glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue)" "void glSecondaryColor3uivEXT (const GLuint *v)" "void glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue)" "void glSecondaryColor3usvEXT (const GLushort *v)" "void glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLvoid *pointer)" "void glActiveStencilFaceEXT (GLenum face)" "void glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels)" "void glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)" "void glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels)" "void glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels)" "void glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer)" "void glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha)" "void glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha)" "void glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params)" "void glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params)" "void glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params)" "void glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params)" "GLboolean glAreTexturesResidentEXT (GLsizei n, const GLuint* textures, GLboolean* residences)" "void glBindTextureEXT (GLenum target, GLuint texture)" "void glDeleteTexturesEXT (GLsizei n, const GLuint* textures)" "void glGenTexturesEXT (GLsizei n, GLuint* textures)" "GLboolean glIsTextureEXT (GLuint texture)" "void glPrioritizeTexturesEXT (GLsizei n, const GLuint* textures, const GLclampf* priorities)" "void glTextureNormalEXT (GLenum mode)" "void glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params)" "void glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params)" "void glBeginTransformFeedbackEXT (GLenum primitiveMode)" "void glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer)" "void glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset)" "void glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)" "void glEndTransformFeedbackEXT (void)" "void glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, char *name)" "void glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode)" "void glArrayElementEXT (GLint i)" "void glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer)" "void glDrawArraysEXT (GLenum mode, GLint first, GLsizei count)" "void glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean* pointer)" "void glGetPointervEXT (GLenum pname, void** params)" "void glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void* pointer)" "void glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void* pointer)" "void glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer)" "void glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer)" "void glBeginVertexShaderEXT (void)" "GLuint glBindLightParameterEXT (GLenum light, GLenum value)" "GLuint glBindMaterialParameterEXT (GLenum face, GLenum value)" "GLuint glBindParameterEXT (GLenum value)" "GLuint glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value)" "GLuint glBindTextureUnitParameterEXT (GLenum unit, GLenum value)" "void glBindVertexShaderEXT (GLuint id)" "void glDeleteVertexShaderEXT (GLuint id)" "void glDisableVariantClientStateEXT (GLuint id)" "void glEnableVariantClientStateEXT (GLuint id)" "void glEndVertexShaderEXT (void)" "void glExtractComponentEXT (GLuint res, GLuint src, GLuint num)" "GLuint glGenSymbolsEXT (GLenum dataType, GLenum storageType, GLenum range, GLuint components)" "GLuint glGenVertexShadersEXT (GLuint range)" "void glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data)" "void glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data)" "void glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data)" "void glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data)" "void glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data)" "void glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data)" "void glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data)" "void glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data)" "void glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data)" "void glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid **data)" "void glInsertComponentEXT (GLuint res, GLuint src, GLuint num)" "GLboolean glIsVariantEnabledEXT (GLuint id, GLenum cap)" "void glSetInvariantEXT (GLuint id, GLenum type, GLvoid *addr)" "void glSetLocalConstantEXT (GLuint id, GLenum type, GLvoid *addr)" "void glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1)" "void glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2)" "void glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3)" "void glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW)" "void glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, GLvoid *addr)" "void glVariantbvEXT (GLuint id, GLbyte *addr)" "void glVariantdvEXT (GLuint id, GLdouble *addr)" "void glVariantfvEXT (GLuint id, GLfloat *addr)" "void glVariantivEXT (GLuint id, GLint *addr)" "void glVariantsvEXT (GLuint id, GLshort *addr)" "void glVariantubvEXT (GLuint id, GLubyte *addr)" "void glVariantuivEXT (GLuint id, GLuint *addr)" "void glVariantusvEXT (GLuint id, GLushort *addr)" "void glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW)" "void glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, void* pointer)" "void glVertexWeightfEXT (GLfloat weight)" "void glVertexWeightfvEXT (GLfloat* weight)" "void glFrameTerminatorGREMEDY (void)" "void glStringMarkerGREMEDY (GLsizei len, const void* string)" "void glGetImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat* params)" "void glGetImageTransformParameterivHP (GLenum target, GLenum pname, const GLint* params)" "void glImageTransformParameterfHP (GLenum target, GLenum pname, const GLfloat param)" "void glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat* params)" "void glImageTransformParameteriHP (GLenum target, GLenum pname, const GLint param)" "void glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint* params)" "void glMultiModeDrawArraysIBM (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride)" "void glMultiModeDrawElementsIBM (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride)" "void glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride)" "void glEdgeFlagPointerListIBM (GLint stride, const GLboolean ** pointer, GLint ptrstride)" "void glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride)" "void glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride)" "void glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride)" "void glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride)" "void glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride)" "void glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride)" "void glColorPointervINTEL (GLint size, GLenum type, const void** pointer)" "void glNormalPointervINTEL (GLenum type, const void** pointer)" "void glTexCoordPointervINTEL (GLint size, GLenum type, const void** pointer)" "void glVertexPointervINTEL (GLint size, GLenum type, const void** pointer)" "void glTexScissorFuncINTEL (GLenum target, GLenum lfunc, GLenum hfunc)" "void glTexScissorINTEL (GLenum target, GLclampf tlow, GLclampf thigh)" "GLuint glBufferRegionEnabledEXT (void)" "void glDeleteBufferRegionEXT (GLenum region)" "void glDrawBufferRegionEXT (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest)" "GLuint glNewBufferRegionEXT (GLenum region)" "void glReadBufferRegionEXT (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height)" "void glResizeBuffersMESA (void)" "void glWindowPos2dMESA (GLdouble x, GLdouble y)" "void glWindowPos2dvMESA (const GLdouble* p)" "void glWindowPos2fMESA (GLfloat x, GLfloat y)" "void glWindowPos2fvMESA (const GLfloat* p)" "void glWindowPos2iMESA (GLint x, GLint y)" "void glWindowPos2ivMESA (const GLint* p)" "void glWindowPos2sMESA (GLshort x, GLshort y)" "void glWindowPos2svMESA (const GLshort* p)" "void glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z)" "void glWindowPos3dvMESA (const GLdouble* p)" "void glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z)" "void glWindowPos3fvMESA (const GLfloat* p)" "void glWindowPos3iMESA (GLint x, GLint y, GLint z)" "void glWindowPos3ivMESA (const GLint* p)" "void glWindowPos3sMESA (GLshort x, GLshort y, GLshort z)" "void glWindowPos3svMESA (const GLshort* p)" "void glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble)" "void glWindowPos4dvMESA (const GLdouble* p)" "void glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glWindowPos4fvMESA (const GLfloat* p)" "void glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w)" "void glWindowPos4ivMESA (const GLint* p)" "void glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w)" "void glWindowPos4svMESA (const GLshort* p)" "void glBeginConditionalRenderNV (GLuint id, GLenum mode)" "void glEndConditionalRenderNV (void)" "void glClearDepthdNV (GLdouble depth)" "void glDepthBoundsdNV (GLdouble zmin, GLdouble zmax)" "void glDepthRangedNV (GLdouble zNear, GLdouble zFar)" "void glEvalMapsNV (GLenum target, GLenum mode)" "void glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat* params)" "void glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint* params)" "void glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void* points)" "void glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat* params)" "void glGetMapParameterivNV (GLenum target, GLenum pname, GLint* params)" "void glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void* points)" "void glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat* params)" "void glMapParameterivNV (GLenum target, GLenum pname, const GLint* params)" "void glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat* val)" "void glSampleMaskIndexedNV (GLuint index, GLbitfield mask)" "void glTexRenderbufferNV (GLenum target, GLuint renderbuffer)" "void glDeleteFencesNV (GLsizei n, const GLuint* fences)" "void glFinishFenceNV (GLuint fence)" "void glGenFencesNV (GLsizei n, GLuint* fences)" "void glGetFenceivNV (GLuint fence, GLenum pname, GLint* params)" "GLboolean glIsFenceNV (GLuint fence)" "void glSetFenceNV (GLuint fence, GLenum condition)" "GLboolean glTestFenceNV (GLuint fence)" "void glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params)" "void glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params)" "void glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte* name, const GLdouble *v)" "void glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte* name, const GLfloat *v)" "void glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height)" "void glProgramVertexLimitNV (GLenum target, GLint limit)" "void glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w)" "void glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params)" "void glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)" "void glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params)" "void glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params)" "void glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params)" "void glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w)" "void glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params)" "void glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)" "void glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params)" "void glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params)" "void glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params)" "void glColor3hNV (GLhalf red, GLhalf green, GLhalf blue)" "void glColor3hvNV (const GLhalf* v)" "void glColor4hNV (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha)" "void glColor4hvNV (const GLhalf* v)" "void glFogCoordhNV (GLhalf fog)" "void glFogCoordhvNV (const GLhalf* fog)" "void glMultiTexCoord1hNV (GLenum target, GLhalf s)" "void glMultiTexCoord1hvNV (GLenum target, const GLhalf* v)" "void glMultiTexCoord2hNV (GLenum target, GLhalf s, GLhalf t)" "void glMultiTexCoord2hvNV (GLenum target, const GLhalf* v)" "void glMultiTexCoord3hNV (GLenum target, GLhalf s, GLhalf t, GLhalf r)" "void glMultiTexCoord3hvNV (GLenum target, const GLhalf* v)" "void glMultiTexCoord4hNV (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q)" "void glMultiTexCoord4hvNV (GLenum target, const GLhalf* v)" "void glNormal3hNV (GLhalf nx, GLhalf ny, GLhalf nz)" "void glNormal3hvNV (const GLhalf* v)" "void glSecondaryColor3hNV (GLhalf red, GLhalf green, GLhalf blue)" "void glSecondaryColor3hvNV (const GLhalf* v)" "void glTexCoord1hNV (GLhalf s)" "void glTexCoord1hvNV (const GLhalf* v)" "void glTexCoord2hNV (GLhalf s, GLhalf t)" "void glTexCoord2hvNV (const GLhalf* v)" "void glTexCoord3hNV (GLhalf s, GLhalf t, GLhalf r)" "void glTexCoord3hvNV (const GLhalf* v)" "void glTexCoord4hNV (GLhalf s, GLhalf t, GLhalf r, GLhalf q)" "void glTexCoord4hvNV (const GLhalf* v)" "void glVertex2hNV (GLhalf x, GLhalf y)" "void glVertex2hvNV (const GLhalf* v)" "void glVertex3hNV (GLhalf x, GLhalf y, GLhalf z)" "void glVertex3hvNV (const GLhalf* v)" "void glVertex4hNV (GLhalf x, GLhalf y, GLhalf z, GLhalf w)" "void glVertex4hvNV (const GLhalf* v)" "void glVertexAttrib1hNV (GLuint index, GLhalf x)" "void glVertexAttrib1hvNV (GLuint index, const GLhalf* v)" "void glVertexAttrib2hNV (GLuint index, GLhalf x, GLhalf y)" "void glVertexAttrib2hvNV (GLuint index, const GLhalf* v)" "void glVertexAttrib3hNV (GLuint index, GLhalf x, GLhalf y, GLhalf z)" "void glVertexAttrib3hvNV (GLuint index, const GLhalf* v)" "void glVertexAttrib4hNV (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w)" "void glVertexAttrib4hvNV (GLuint index, const GLhalf* v)" "void glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalf* v)" "void glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalf* v)" "void glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalf* v)" "void glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalf* v)" "void glVertexWeighthNV (GLhalf weight)" "void glVertexWeighthvNV (const GLhalf* weight)" "void glBeginOcclusionQueryNV (GLuint id)" "void glDeleteOcclusionQueriesNV (GLsizei n, const GLuint* ids)" "void glEndOcclusionQueryNV (void)" "void glGenOcclusionQueriesNV (GLsizei n, GLuint* ids)" "void glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint* params)" "void glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint* params)" "GLboolean glIsOcclusionQueryNV (GLuint id)" "void glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params)" "void glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params)" "void glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params)" "void glFlushPixelDataRangeNV (GLenum target)" "void glPixelDataRangeNV (GLenum target, GLsizei length, void* pointer)" "void glPointParameteriNV (GLenum pname, GLint param)" "void glPointParameterivNV (GLenum pname, const GLint* params)" "void glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT* params)" "void glGetVideoivNV (GLuint video_slot, GLenum pname, GLint* params)" "void glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT* params)" "void glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint* params)" "void glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3)" "void glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1)" "void glVideoParameterivNV (GLuint video_slot, GLenum pname, const GLint* params)" "void glPrimitiveRestartIndexNV (GLuint index)" "void glPrimitiveRestartNV (void)" "void glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)" "void glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum)" "void glCombinerParameterfNV (GLenum pname, GLfloat param)" "void glCombinerParameterfvNV (GLenum pname, const GLfloat* params)" "void glCombinerParameteriNV (GLenum pname, GLint param)" "void glCombinerParameterivNV (GLenum pname, const GLint* params)" "void glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)" "void glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params)" "void glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params)" "void glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat* params)" "void glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint* params)" "void glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat* params)" "void glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint* params)" "void glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat* params)" "void glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat* params)" "void glActiveVaryingNV (GLuint program, const GLchar *name)" "void glBeginTransformFeedbackNV (GLenum primitiveMode)" "void glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer)" "void glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset)" "void glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)" "void glEndTransformFeedbackNV (void)" "void glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)" "void glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location)" "GLint glGetVaryingLocationNV (GLuint program, const GLchar *name)" "void glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode)" "void glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode)" "void glFlushVertexArrayRangeNV (void)" "void glVertexArrayRangeNV (GLsizei length, void* pointer)" "GLboolean glAreProgramsResidentNV (GLsizei n, const GLuint* ids, GLboolean *residences)" "void glBindProgramNV (GLenum target, GLuint id)" "void glDeleteProgramsNV (GLsizei n, const GLuint* ids)" "void glExecuteProgramNV (GLenum target, GLuint id, const GLfloat* params)" "void glGenProgramsNV (GLsizei n, GLuint* ids)" "void glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble* params)" "void glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat* params)" "void glGetProgramStringNV (GLuint id, GLenum pname, GLubyte* program)" "void glGetProgramivNV (GLuint id, GLenum pname, GLint* params)" "void glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint* params)" "void glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid** pointer)" "void glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble* params)" "void glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat* params)" "void glGetVertexAttribivNV (GLuint index, GLenum pname, GLint* params)" "GLboolean glIsProgramNV (GLuint id)" "void glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte* program)" "void glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble* params)" "void glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat* params)" "void glProgramParameters4dvNV (GLenum target, GLuint index, GLuint num, const GLdouble* params)" "void glProgramParameters4fvNV (GLenum target, GLuint index, GLuint num, const GLfloat* params)" "void glRequestResidentProgramsNV (GLsizei n, GLuint* ids)" "void glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform)" "void glVertexAttrib1dNV (GLuint index, GLdouble x)" "void glVertexAttrib1dvNV (GLuint index, const GLdouble* v)" "void glVertexAttrib1fNV (GLuint index, GLfloat x)" "void glVertexAttrib1fvNV (GLuint index, const GLfloat* v)" "void glVertexAttrib1sNV (GLuint index, GLshort x)" "void glVertexAttrib1svNV (GLuint index, const GLshort* v)" "void glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y)" "void glVertexAttrib2dvNV (GLuint index, const GLdouble* v)" "void glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y)" "void glVertexAttrib2fvNV (GLuint index, const GLfloat* v)" "void glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y)" "void glVertexAttrib2svNV (GLuint index, const GLshort* v)" "void glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z)" "void glVertexAttrib3dvNV (GLuint index, const GLdouble* v)" "void glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z)" "void glVertexAttrib3fvNV (GLuint index, const GLfloat* v)" "void glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z)" "void glVertexAttrib3svNV (GLuint index, const GLshort* v)" "void glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)" "void glVertexAttrib4dvNV (GLuint index, const GLdouble* v)" "void glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glVertexAttrib4fvNV (GLuint index, const GLfloat* v)" "void glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)" "void glVertexAttrib4svNV (GLuint index, const GLshort* v)" "void glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)" "void glVertexAttrib4ubvNV (GLuint index, const GLubyte* v)" "void glVertexAttribPointerNV (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer)" "void glVertexAttribs1dvNV (GLuint index, GLsizei n, const GLdouble* v)" "void glVertexAttribs1fvNV (GLuint index, GLsizei n, const GLfloat* v)" "void glVertexAttribs1svNV (GLuint index, GLsizei n, const GLshort* v)" "void glVertexAttribs2dvNV (GLuint index, GLsizei n, const GLdouble* v)" "void glVertexAttribs2fvNV (GLuint index, GLsizei n, const GLfloat* v)" "void glVertexAttribs2svNV (GLuint index, GLsizei n, const GLshort* v)" "void glVertexAttribs3dvNV (GLuint index, GLsizei n, const GLdouble* v)" "void glVertexAttribs3fvNV (GLuint index, GLsizei n, const GLfloat* v)" "void glVertexAttribs3svNV (GLuint index, GLsizei n, const GLshort* v)" "void glVertexAttribs4dvNV (GLuint index, GLsizei n, const GLdouble* v)" "void glVertexAttribs4fvNV (GLuint index, GLsizei n, const GLfloat* v)" "void glVertexAttribs4svNV (GLuint index, GLsizei n, const GLshort* v)" "void glVertexAttribs4ubvNV (GLuint index, GLsizei n, const GLubyte* v)" "void glClearDepthfOES (GLclampd depth)" "void glClipPlanefOES (GLenum plane, const GLfloat* equation)" "void glDepthRangefOES (GLclampf n, GLclampf f)" "void glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f)" "void glGetClipPlanefOES (GLenum plane, GLfloat* equation)" "void glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f)" "void glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat* points)" "void glGetDetailTexFuncSGIS (GLenum target, GLfloat* points)" "void glFogFuncSGIS (GLsizei n, const GLfloat* points)" "void glGetFogFuncSGIS (GLfloat* points)" "void glSampleMaskSGIS (GLclampf value, GLboolean invert)" "void glSamplePatternSGIS (GLenum pattern)" "void glGetSharpenTexFuncSGIS (GLenum target, GLfloat* points)" "void glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat* points)" "void glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const void* pixels)" "void glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const void* pixels)" "void glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat* weights)" "void glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights)" "void glAsyncMarkerSGIX (GLuint marker)" "void glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range)" "GLint glFinishAsyncSGIX (GLuint* markerp)" "GLuint glGenAsyncMarkersSGIX (GLsizei range)" "GLboolean glIsAsyncMarkerSGIX (GLuint marker)" "GLint glPollAsyncSGIX (GLuint* markerp)" "void glFlushRasterSGIX (void)" "void glTextureFogSGIX (GLenum pname)" "void glFragmentColorMaterialSGIX (GLenum face, GLenum mode)" "void glFragmentLightModelfSGIX (GLenum pname, GLfloat param)" "void glFragmentLightModelfvSGIX (GLenum pname, GLfloat* params)" "void glFragmentLightModeliSGIX (GLenum pname, GLint param)" "void glFragmentLightModelivSGIX (GLenum pname, GLint* params)" "void glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param)" "void glFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat* params)" "void glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param)" "void glFragmentLightivSGIX (GLenum light, GLenum pname, GLint* params)" "void glFragmentMaterialfSGIX (GLenum face, GLenum pname, const GLfloat param)" "void glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat* params)" "void glFragmentMaterialiSGIX (GLenum face, GLenum pname, const GLint param)" "void glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint* params)" "void glGetFragmentLightfvSGIX (GLenum light, GLenum value, GLfloat* data)" "void glGetFragmentLightivSGIX (GLenum light, GLenum value, GLint* data)" "void glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat* data)" "void glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint* data)" "void glFrameZoomSGIX (GLint factor)" "void glPixelTexGenSGIX (GLenum mode)" "void glReferencePlaneSGIX (const GLdouble* equation)" "void glSpriteParameterfSGIX (GLenum pname, GLfloat param)" "void glSpriteParameterfvSGIX (GLenum pname, GLfloat* params)" "void glSpriteParameteriSGIX (GLenum pname, GLint param)" "void glSpriteParameterivSGIX (GLenum pname, GLint* params)" "void glTagSampleBufferSGIX (void)" "void glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat* params)" "void glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint* params)" "void glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* table)" "void glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)" "void glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat* params)" "void glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint* params)" "void glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void* table)" "void glFinishTextureSUNX (void)" "void glGlobalAlphaFactorbSUN (GLbyte factor)" "void glGlobalAlphaFactordSUN (GLdouble factor)" "void glGlobalAlphaFactorfSUN (GLfloat factor)" "void glGlobalAlphaFactoriSUN (GLint factor)" "void glGlobalAlphaFactorsSUN (GLshort factor)" "void glGlobalAlphaFactorubSUN (GLubyte factor)" "void glGlobalAlphaFactoruiSUN (GLuint factor)" "void glGlobalAlphaFactorusSUN (GLushort factor)" "void glReadVideoPixelsSUN (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)" "void glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void* pointer)" "void glReplacementCodeubSUN (GLubyte code)" "void glReplacementCodeubvSUN (const GLubyte* code)" "void glReplacementCodeuiSUN (GLuint code)" "void glReplacementCodeuivSUN (const GLuint* code)" "void glReplacementCodeusSUN (GLushort code)" "void glReplacementCodeusvSUN (const GLushort* code)" "void glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z)" "void glColor3fVertex3fvSUN (const GLfloat* c, const GLfloat *v)" "void glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glColor4fNormal3fVertex3fvSUN (const GLfloat* c, const GLfloat *n, const GLfloat *v)" "void glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y)" "void glColor4ubVertex2fvSUN (const GLubyte* c, const GLfloat *v)" "void glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z)" "void glColor4ubVertex3fvSUN (const GLubyte* c, const GLfloat *v)" "void glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glNormal3fVertex3fvSUN (const GLfloat* n, const GLfloat *v)" "void glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiColor3fVertex3fvSUN (const GLuint* rc, const GLfloat *c, const GLfloat *v)" "void glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v)" "void glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint* rc, const GLubyte *c, const GLfloat *v)" "void glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *n, const GLfloat *v)" "void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v)" "void glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v)" "void glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *v)" "void glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z)" "void glReplacementCodeuiVertex3fvSUN (const GLuint* rc, const GLfloat *v)" "void glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z)" "void glTexCoord2fColor3fVertex3fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *v)" "void glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v)" "void glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z)" "void glTexCoord2fColor4ubVertex3fvSUN (const GLfloat* tc, const GLubyte *c, const GLfloat *v)" "void glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z)" "void glTexCoord2fNormal3fVertex3fvSUN (const GLfloat* tc, const GLfloat *n, const GLfloat *v)" "void glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z)" "void glTexCoord2fVertex3fvSUN (const GLfloat* tc, const GLfloat *v)" "void glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v)" "void glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w)" "void glTexCoord4fVertex4fvSUN (const GLfloat* tc, const GLfloat *v)" "void glAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height)" ] } proc tcl3dOglGetFuncVersionList {} { return [list GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_1 GL_VERSION_1_2 GL_VERSION_1_2 GL_VERSION_1_2 GL_VERSION_1_2 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_3 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_4 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_1_5 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_0 GL_VERSION_2_1 GL_VERSION_2_1 GL_VERSION_2_1 GL_VERSION_2_1 GL_VERSION_2_1 GL_VERSION_2_1 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_VERSION_3_0 GL_3DFX_tbuffer GL_APPLE_element_array GL_APPLE_element_array GL_APPLE_element_array GL_APPLE_element_array GL_APPLE_element_array GL_APPLE_fence GL_APPLE_fence GL_APPLE_fence GL_APPLE_fence GL_APPLE_fence GL_APPLE_fence GL_APPLE_fence GL_APPLE_fence GL_APPLE_flush_buffer_range GL_APPLE_flush_buffer_range GL_APPLE_texture_range GL_APPLE_texture_range GL_APPLE_vertex_array_object GL_APPLE_vertex_array_object GL_APPLE_vertex_array_object GL_APPLE_vertex_array_object GL_APPLE_vertex_array_range GL_APPLE_vertex_array_range GL_APPLE_vertex_array_range GL_ARB_color_buffer_float GL_ARB_draw_buffers GL_ARB_draw_instanced GL_ARB_draw_instanced GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_framebuffer_object GL_ARB_geometry_shader4 GL_ARB_geometry_shader4 GL_ARB_geometry_shader4 GL_ARB_geometry_shader4 GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_imaging GL_ARB_instanced_arrays GL_ARB_map_buffer_range GL_ARB_map_buffer_range GL_ARB_matrix_palette GL_ARB_matrix_palette GL_ARB_matrix_palette GL_ARB_matrix_palette GL_ARB_matrix_palette GL_ARB_multisample GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_occlusion_query GL_ARB_occlusion_query GL_ARB_occlusion_query GL_ARB_occlusion_query GL_ARB_occlusion_query GL_ARB_occlusion_query GL_ARB_occlusion_query GL_ARB_point_parameters GL_ARB_point_parameters GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_shader_objects GL_ARB_texture_buffer_object GL_ARB_texture_compression GL_ARB_texture_compression GL_ARB_texture_compression GL_ARB_texture_compression GL_ARB_texture_compression GL_ARB_texture_compression GL_ARB_texture_compression GL_ARB_transpose_matrix GL_ARB_transpose_matrix GL_ARB_transpose_matrix GL_ARB_transpose_matrix GL_ARB_vertex_array_object GL_ARB_vertex_array_object GL_ARB_vertex_array_object GL_ARB_vertex_array_object GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_blend GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_program GL_ARB_vertex_shader GL_ARB_vertex_shader GL_ARB_vertex_shader GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ARB_window_pos GL_ATI_draw_buffers GL_ATI_element_array GL_ATI_element_array GL_ATI_element_array GL_ATI_envmap_bumpmap GL_ATI_envmap_bumpmap GL_ATI_envmap_bumpmap GL_ATI_envmap_bumpmap GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_fragment_shader GL_ATI_map_object_buffer GL_ATI_map_object_buffer GL_ATI_pn_triangles GL_ATI_pn_triangles GL_ATI_separate_stencil GL_ATI_separate_stencil GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_array_object GL_ATI_vertex_attrib_array_object GL_ATI_vertex_attrib_array_object GL_ATI_vertex_attrib_array_object GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_ATI_vertex_streams GL_EXT_bindable_uniform GL_EXT_bindable_uniform GL_EXT_bindable_uniform GL_EXT_blend_color GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_color_subtable GL_EXT_color_subtable GL_EXT_compiled_vertex_array GL_EXT_compiled_vertex_array GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_convolution GL_EXT_coordinate_frame GL_EXT_coordinate_frame GL_EXT_copy_texture GL_EXT_copy_texture GL_EXT_copy_texture GL_EXT_copy_texture GL_EXT_copy_texture GL_EXT_cull_vertex GL_EXT_cull_vertex GL_EXT_depth_bounds_test GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_direct_state_access GL_EXT_draw_buffers2 GL_EXT_draw_buffers2 GL_EXT_draw_buffers2 GL_EXT_draw_buffers2 GL_EXT_draw_buffers2 GL_EXT_draw_buffers2 GL_EXT_draw_instanced GL_EXT_draw_instanced GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_fog_coord GL_EXT_fog_coord GL_EXT_fog_coord GL_EXT_fog_coord GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_fragment_lighting GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_framebuffer_object GL_EXT_geometry_shader4 GL_EXT_geometry_shader4 GL_EXT_geometry_shader4 GL_EXT_geometry_shader4 GL_EXT_gpu_program_parameters GL_EXT_gpu_program_parameters GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_gpu_shader4 GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_histogram GL_EXT_index_func GL_EXT_index_material GL_EXT_light_texture GL_EXT_light_texture GL_EXT_light_texture GL_EXT_multi_draw_arrays GL_EXT_multi_draw_arrays GL_EXT_multisample GL_EXT_multisample GL_EXT_paletted_texture GL_EXT_paletted_texture GL_EXT_paletted_texture GL_EXT_paletted_texture GL_EXT_pixel_transform GL_EXT_pixel_transform GL_EXT_pixel_transform GL_EXT_pixel_transform GL_EXT_pixel_transform GL_EXT_pixel_transform GL_EXT_point_parameters GL_EXT_point_parameters GL_EXT_polygon_offset GL_EXT_scene_marker GL_EXT_scene_marker GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_secondary_color GL_EXT_stencil_two_side GL_EXT_subtexture GL_EXT_subtexture GL_EXT_subtexture GL_EXT_texture3D GL_EXT_texture_buffer_object GL_EXT_texture_integer GL_EXT_texture_integer GL_EXT_texture_integer GL_EXT_texture_integer GL_EXT_texture_integer GL_EXT_texture_integer GL_EXT_texture_object GL_EXT_texture_object GL_EXT_texture_object GL_EXT_texture_object GL_EXT_texture_object GL_EXT_texture_object GL_EXT_texture_perturb_normal GL_EXT_timer_query GL_EXT_timer_query GL_EXT_transform_feedback GL_EXT_transform_feedback GL_EXT_transform_feedback GL_EXT_transform_feedback GL_EXT_transform_feedback GL_EXT_transform_feedback GL_EXT_transform_feedback GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_array GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_shader GL_EXT_vertex_weighting GL_EXT_vertex_weighting GL_EXT_vertex_weighting GL_GREMEDY_frame_terminator GL_GREMEDY_string_marker GL_HP_image_transform GL_HP_image_transform GL_HP_image_transform GL_HP_image_transform GL_HP_image_transform GL_HP_image_transform GL_IBM_multimode_draw_arrays GL_IBM_multimode_draw_arrays GL_IBM_vertex_array_lists GL_IBM_vertex_array_lists GL_IBM_vertex_array_lists GL_IBM_vertex_array_lists GL_IBM_vertex_array_lists GL_IBM_vertex_array_lists GL_IBM_vertex_array_lists GL_IBM_vertex_array_lists GL_INTEL_parallel_arrays GL_INTEL_parallel_arrays GL_INTEL_parallel_arrays GL_INTEL_parallel_arrays GL_INTEL_texture_scissor GL_INTEL_texture_scissor GL_KTX_buffer_region GL_KTX_buffer_region GL_KTX_buffer_region GL_KTX_buffer_region GL_KTX_buffer_region GL_MESA_resize_buffers GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_MESA_window_pos GL_NV_conditional_render GL_NV_conditional_render GL_NV_depth_buffer_float GL_NV_depth_buffer_float GL_NV_depth_buffer_float GL_NV_evaluators GL_NV_evaluators GL_NV_evaluators GL_NV_evaluators GL_NV_evaluators GL_NV_evaluators GL_NV_evaluators GL_NV_evaluators GL_NV_evaluators GL_NV_explicit_multisample GL_NV_explicit_multisample GL_NV_explicit_multisample GL_NV_fence GL_NV_fence GL_NV_fence GL_NV_fence GL_NV_fence GL_NV_fence GL_NV_fence GL_NV_fragment_program GL_NV_fragment_program GL_NV_fragment_program GL_NV_fragment_program GL_NV_fragment_program GL_NV_fragment_program GL_NV_framebuffer_multisample_coverage GL_NV_geometry_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_gpu_program4 GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_half_float GL_NV_occlusion_query GL_NV_occlusion_query GL_NV_occlusion_query GL_NV_occlusion_query GL_NV_occlusion_query GL_NV_occlusion_query GL_NV_occlusion_query GL_NV_parameter_buffer_object GL_NV_parameter_buffer_object GL_NV_parameter_buffer_object GL_NV_pixel_data_range GL_NV_pixel_data_range GL_NV_point_sprite GL_NV_point_sprite GL_NV_present_video GL_NV_present_video GL_NV_present_video GL_NV_present_video GL_NV_present_video GL_NV_present_video GL_NV_present_video GL_NV_primitive_restart GL_NV_primitive_restart GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners GL_NV_register_combiners2 GL_NV_register_combiners2 GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_transform_feedback GL_NV_vertex_array_range GL_NV_vertex_array_range GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_NV_vertex_program GL_OES_single_precision GL_OES_single_precision GL_OES_single_precision GL_OES_single_precision GL_OES_single_precision GL_OES_single_precision GL_SGIS_detail_texture GL_SGIS_detail_texture GL_SGIS_fog_function GL_SGIS_fog_function GL_SGIS_multisample GL_SGIS_multisample GL_SGIS_sharpen_texture GL_SGIS_sharpen_texture GL_SGIS_texture4D GL_SGIS_texture4D GL_SGIS_texture_filter4 GL_SGIS_texture_filter4 GL_SGIX_async GL_SGIX_async GL_SGIX_async GL_SGIX_async GL_SGIX_async GL_SGIX_async GL_SGIX_flush_raster GL_SGIX_fog_texture GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_fragment_specular_lighting GL_SGIX_framezoom GL_SGIX_pixel_texture GL_SGIX_reference_plane GL_SGIX_sprite GL_SGIX_sprite GL_SGIX_sprite GL_SGIX_sprite GL_SGIX_tag_sample_buffer GL_SGI_color_table GL_SGI_color_table GL_SGI_color_table GL_SGI_color_table GL_SGI_color_table GL_SGI_color_table GL_SGI_color_table GL_SUNX_constant_data GL_SUN_global_alpha GL_SUN_global_alpha GL_SUN_global_alpha GL_SUN_global_alpha GL_SUN_global_alpha GL_SUN_global_alpha GL_SUN_global_alpha GL_SUN_global_alpha GL_SUN_read_video_pixels GL_SUN_triangle_list GL_SUN_triangle_list GL_SUN_triangle_list GL_SUN_triangle_list GL_SUN_triangle_list GL_SUN_triangle_list GL_SUN_triangle_list GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_SUN_vertex GL_WIN_swap_hint ] } proc tcl3dOglGetInfoLogARB {object} { set infoLenVec [tcl3dVector GLint 1] glGetObjectParameterivARB $object GL_OBJECT_INFO_LOG_LENGTH_ARB $infoLenVec set infoLen [$infoLenVec get 0] set infoStr "" if { $infoLen > 0 } { set infoStrVec [tcl3dVector GLubyte $infoLen] glGetInfoLogARB $object $infoLen "NULL" $infoStrVec set infoStr [tcl3dVectorToString $infoStrVec] $infoStrVec delete } $infoLenVec delete return $infoStr } proc tcl3dOglGetIntState {state {numVals 1}} { if { $numVals <= 0 } { error "Number of values must be greater than zero" } set vec [tcl3dVector GLint $numVals] glGetIntegerv $state $vec if { $numVals == 1 } { set val [$vec get 0] } else { set val [tcl3dVectorToList $vec $numVals] } $vec delete return $val } proc tcl3dOglGetMaxTextureSize {} { return [tcl3dOglGetIntState GL_MAX_TEXTURE_SIZE] } proc tcl3dOglGetMaxTextureUnits {} { return [tcl3dOglGetIntState GL_MAX_TEXTURE_UNITS] } proc tcl3dOglGetProgramInfoLog {program} { set infoLenVec [tcl3dVector GLint 1] glGetProgramiv $program GL_INFO_LOG_LENGTH $infoLenVec set infoLen [$infoLenVec get 0] set infoStr "" if { $infoLen > 0 } { set infoStrVec [tcl3dVector GLubyte $infoLen] glGetProgramInfoLog $program $infoLen "NULL" $infoStrVec set infoStr [tcl3dVectorToString $infoStrVec] $infoStrVec delete } $infoLenVec delete return $infoStr } proc tcl3dOglGetShaderInfoLog {shader} { set infoLenVec [tcl3dVector GLint 1] glGetShaderiv $shader GL_INFO_LOG_LENGTH $infoLenVec set infoLen [$infoLenVec get 0] set infoStr "" if { $infoLen > 0 } { set infoStrVec [tcl3dVector GLubyte $infoLen] glGetShaderInfoLog $shader $infoLen "NULL" $infoStrVec set infoStr [tcl3dVectorToString $infoStrVec] $infoStrVec delete } $infoLenVec delete return $infoStr } proc tcl3dOglGetShaderSource {shader} { set srcLenVec [tcl3dVector GLint 1] glGetShaderiv $shader GL_SHADER_SOURCE_LENGTH $srcLenVec set srcLen [$srcLenVec get 0] set srcStr "" if { $srcLen > 0 } { set srcStrVec [tcl3dVector GLubyte $srcLen] glGetShaderSource $shader $srcLen "NULL" $srcStrVec set srcStr [tcl3dVectorToString $srcStrVec] $srcStrVec delete } $srcLenVec delete return $srcStr } proc tcl3dOglGetStates {{sortFlag none}} { set maxSize 20 set intVec [tcl3dVector GLint $maxSize] set boolVec [tcl3dVector GLboolean $maxSize] set ubyteVec [tcl3dVector GLubyte $maxSize] set floatVec [tcl3dVector GLfloat $maxSize] set doubleVec [tcl3dVector GLdouble $maxSize] set stateList [tcl3dGetStateList] set row 0 set globalResult {} foreach line $stateList { for { set i 0 } { $i < $maxSize } { incr i } { $intVec set $i -10000 $ubyteVec set $i 100 $boolVec set $i 100 $floatVec set $i -10000.0 $doubleVec set $i -10000.0 } set glCmd [lindex $line 0] set enumVal [lindex $line 1] set numVals [lindex $line 2] set initVal [lindex $line 3] if { [llength [info commands $glCmd]] == 0 } { puts "Not found cmd: $glCmd" lappend globalResult [list 0 $glCmd $enumVal "Not available"] set cmdList [__tcl3dOglFindExtension "cmd" $glCmd] puts "\tFound $cmdList instead" } else { set cmdList $glCmd } if { [llength [info globals $enumVal]] == 0 } { puts "Not found enum: $enumVal" set enumList [__tcl3dOglFindExtension "enum" $enumVal] puts "\tFound $enumList instead" } else { set enumList $enumVal } # Put all functions ending with "fv" which need special handling # at the top. All others are handled with the default case used # for glGetFloatv. foreach glCmd $cmdList { set result {} if { [string equal "glGetPixelMapfv" $glCmd] } { set sizeEnum [format "%s_SIZE" $enumVal] glGetIntegerv $sizeEnum $intVec set numMapEntries [$intVec get 0] set mapTable [tcl3dVector GLfloat $numMapEntries] $glCmd $enumVal $mapTable set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numMapEntries } { incr i } { lappend result [$mapTable get $i] } $mapTable delete # puts "\t$enumVal is $result (Should be $initVal)" } elseif { [string equal "glGetMaterialfv" $glCmd] } { foreach face { GL_FRONT GL_BACK GL_FRONT_AND_BACK } { $glCmd $face $enumVal $floatVec set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend result [$floatVec get $i] } # puts "\t$face $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetLightfv" $glCmd] } { for {set lgtNum 0 } { $lgtNum < 8 } { incr lgtNum } { set light [format "GL_LIGHT%d" $lgtNum] $glCmd $light $enumVal $floatVec set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend result [$floatVec get $i] } # puts "\t$light $enumVal is $result (Shoud be $initVal)" } } elseif { [string match "glGetTexLevel*iv" $glCmd] } { foreach target { GL_TEXTURE_1D GL_TEXTURE_2D } { $glCmd $target 0 $enumVal $intVec set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend result [$intVec get $i] } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string match "glGetTex*fv" $glCmd] } { foreach target { GL_TEXTURE_1D GL_TEXTURE_2D } { $glCmd $target $enumVal $floatVec set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend result [$floatVec get $i] } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string match "glGetTex*iv" $glCmd] } { foreach enumVal $enumList { foreach target { GL_TEXTURE_1D GL_TEXTURE_2D } { $glCmd $target $enumVal $intVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$intVec get $i] } set result $tmpResult } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetColorTableParameterfv" $glCmd] } { foreach enumVal $enumList { foreach target { GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE } { $glCmd $target $enumVal $floatVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$floatVec get $i] } set result $tmpResult } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetColorTableParameteriv" $glCmd] } { foreach enumVal $enumList { foreach target { GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE } { $glCmd $target $enumVal $intVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$intVec get $i] } set result $tmpResult } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetConvolutionParameterfv" $glCmd] } { foreach enumVal $enumList { foreach target { GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D } { $glCmd $target $enumVal $floatVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$floatVec get $i] } set result $tmpResult } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetConvolutionParameteriv" $glCmd] } { foreach enumVal $enumList { foreach target { GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D } { $glCmd $target $enumVal $intVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$intVec get $i] } set result $tmpResult } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetVertexAttribiv" $glCmd] } { if { [llength [info globals GL_MAX_VERTEX_ATTRIBS]] == 0 } { set enumName [lindex [__tcl3dOglFindExtension "enum" GL_MAX_VERTEX_ATTRIBS] 0] } else { set enumName GL_MAX_VERTEX_ATTRIBS } glGetIntegerv $enumName $intVec set numAttributes [$intVec get 0] foreach enumVal $enumList { set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numAttributes } { incr i } { $glCmd $i $enumVal $intVec for { set j 0 } { $j < 4 } { incr j } { lappend tmpResult [$intVec get $j] } } set result $tmpResult # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetVertexAttribfv" $glCmd] } { if { [llength [info globals GL_MAX_VERTEX_ATTRIBS]] == 0 } { set enumName [lindex [__tcl3dOglFindExtension "enum" GL_MAX_VERTEX_ATTRIBS] 0] } else { set enumName GL_MAX_VERTEX_ATTRIBS } glGetFloatv $enumName $floatVec set numAttributes [$floatVec get 0] foreach enumVal $enumList { set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numAttributes } { incr i } { $glCmd $i $enumVal $floatVec for { set j 0 } { $j < 4 } { incr j } { lappend tmpResult [$floatVec get $j] } } set result $tmpResult # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetMapfv" $glCmd] } { foreach enumVal $enumList { foreach target { GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP1_INDEX GL_MAP1_COLOR_4 GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 } { $glCmd $target $enumVal $floatVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$floatVec get $i] } set result $tmpResult } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string equal "glGetMapiv" $glCmd] } { foreach enumVal $enumList { foreach target { GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP1_INDEX GL_MAP1_COLOR_4 GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 } { $glCmd $target $enumVal $intVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$intVec get $i] } set result $tmpResult } # puts "\t$target $enumVal is $result (Shoud be $initVal)" } } elseif { [string match "glGetUniform*v" $glCmd] } { puts "NOT handled glCmd <$glCmd $enumVal $numVals>" set result [list 0 $glCmd $enumVal "--"] } elseif { [string equal "glGetFloatv" $glCmd] || [string match "*fv" $glCmd] } { $glCmd $enumVal $floatVec set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend result [$floatVec get $i] } # puts "\t$enumVal is $result (Should be $initVal)" } elseif { [string equal "glGetIntegerv" $glCmd] } { foreach enumVal $enumList { $glCmd $enumVal $intVec set tmpResult [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend tmpResult [$intVec get $i] } set result $tmpResult } # puts "\t$enumVal is $result (Shoud be $initVal)" } elseif { [string equal "glGetBooleanv" $glCmd] } { $glCmd $enumVal $boolVec set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend result [$boolVec get $i] } # puts "\t$enumVal is $result (Shoud be $initVal)" } elseif { [string equal "glGetClipPlane" $glCmd] } { $glCmd $enumVal $doubleVec set result [list 1 $glCmd $enumVal] for { set i 0 } { $i < $numVals } { incr i } { lappend result [$doubleVec get $i] } # puts "\t$enumVal is $result (Should be $initVal)" } elseif { [string equal "glIsEnabled" $glCmd] } { foreach enumVal $enumList { set tmpResult [list 1 $glCmd $enumVal] lappend tmpResult [$glCmd $enumVal] set result $tmpResult } # puts "\t$enumVal is $result (Shoud be $initVal)" } elseif { [string equal "glGetPolygonStipple" $glCmd] } { # OPA TODO Core dump on Windows # $glCmd $ubyteVec # set result [list 1 $glCmd $enumVal] # for { set i 0 } { $i < $numVals } { incr i } { # lappend result [$ubyteVec get $i] # } # puts "\t$enumVal is $result (Shoud be $initVal)" } else { puts "NOT handled glCmd <$glCmd $enumVal $numVals>" set result [list 0 $glCmd $enumVal "--"] } lappend globalResult $result incr row } } if { $sortFlag eq "increasing" || $sortFlag eq "decreasing" } { return [lsort -index 1 -$sortFlag $globalResult] } else { return $globalResult } } proc tcl3dOglGetVersion {} { if { [info commands glGetString] ne "" } { return [glGetString GL_VERSION] } else { return "" } } proc tcl3dOglGetVersions {} { set versList {} set version [glGetString GL_VENDOR] lappend versList [list GL_VENDOR $version] set version [glGetString GL_RENDERER] lappend versList [list GL_RENDERER $version] set version [glGetString GL_VERSION] lappend versList [list GL_VERSION $version] if { [info exists ::GLU_VERSION_1_1] } { set version [gluGetString GLU_VERSION] lappend versList [list GLU_VERSION $version] } else { lappend versList [list GLU_VERSION "1.0"] } if { [info global GL_SHADING_LANGUAGE_VERSION] ne "" } { set version [glGetString GL_SHADING_LANGUAGE_VERSION] lappend versList [list GL_SHADING_LANGUAGE_VERSION $version] } return $versList } proc tcl3dOglGetViewport {} { return [tcl3dOglGetIntState GL_VIEWPORT 4] } proc tcl3dOglHaveExtension {extensionName} { foreach glInfo [tcl3dOglGetExtensions] { set found [lsearch -exact [lindex $glInfo 1] $extensionName] if { $found >= 0 } { return 1 } } return 0 } proc tcl3dOglHaveFunc {glFuncName} { set checkCmd [format "__%sAvail" $glFuncName] if { [info commands $checkCmd] eq "" } { if { [info commands $glFuncName] eq "" } { return 0 } else { return 1 } } else { return [$checkCmd] } } proc tcl3dOglHaveVersion {majorWanted {minorWanted 0} {patchWanted 0}} { set versionStr [glGetString GL_VERSION] # Add Mac OSX specific match: Version string looks like "1.2 APPLE-1.4.56" set index [string first "APPLE-" $versionStr] if { $index >= 0 } { set versionStr [string range $versionStr [expr $index + 6] end] } if {3 != [scan $versionStr "%d.%d.%d" majorHave minorHave patchHave] } { set patchHave 0 if {2 != [scan $versionStr "%d.%d" majorHave minorHave] } { set minorHave 0 if {1 != [scan $versionStr "%d" majorHave] } { error "Could not determine GL version from $versionStr" } } } set numberHave [expr $majorHave*100 + $minorHave*10 + $patchHave] set numberWanted [expr $majorWanted*100 + $minorWanted*10 + $patchWanted] if { $numberHave >= $numberWanted } { return 1 } return 0 } proc tcl3dOglSetDebugMode {{printCmd puts}} { foreach glFunc [tcl3dOglGetFuncList] { __tcl3dOglCreateSafeOrDebugFunc $glFunc 1 0 } } proc tcl3dOglSetMode {mode {printCmd puts}} { if { $mode eq "normal" } { tcl3dOglSetNormalMode $printCmd } elseif { $mode eq "safe" } { tcl3dOglSetSafeMode $printCmd } elseif { $mode eq "debug" } { tcl3dOglSetDebugMode $printCmd } else { error "Unknown OpenGL mode: $mode" } } proc tcl3dOglSetNormalMode {{printCmd puts}} { foreach glFunc [tcl3dOglGetFuncList] { __tcl3dOglCreateSafeOrDebugFunc $glFunc 0 1 } } proc tcl3dOglSetSafeMode {{printCmd puts}} { foreach glFunc [tcl3dOglGetFuncList] { __tcl3dOglCreateSafeOrDebugFunc $glFunc 0 0 } } proc tcl3dOglShaderSource {shaderId shaderString} { set shaderStringList [list $shaderString] set lenList [list [string length $shaderString]] glShaderSource $shaderId 1 $shaderStringList $lenList } proc tcl3dOsgGetVersion {} { if { [info commands osg::osgGetVersion] ne "" } { return [osg::osgGetVersion] } else { return "" } } proc tcl3dRadToDeg {ang} { return [expr {$ang * 180.0 / 3.1415926535}] } proc tcl3dRgb2Name {r g b} { return [format "\#%02X%02X%02X" $r $g $b] } proc tcl3dRgba2Name {r g b a} { return [format "\#%02X%02X%02X%02X" $r $g $b $a] } proc tcl3dRgbaf2Name {r g b a} { return [format "\#%02X%02X%02X%02X" [expr {int ($r*255.0)}] [expr {int ($g*255.0)}] [expr {int ($b*255.0)}] [expr {int ($a*255.0)}]] } proc tcl3dRgbf2Name {r g b} { return [format "\#%02X%02X%02X" [expr {int ($r*255.0)}] [expr {int ($g*255.0)}] [expr {int ($b*255.0)}]] } proc tcl3dSDLGetVersion {} { if { [info commands SDL_Linked_Version] ne "" } { set vers [SDL_Linked_Version] return [format "%d.%d.%d" [$vers cget -major] [$vers cget -minor] [$vers cget -patch]] } else { return "" } } proc tcl3dSetFullScreenMode {wid} { set sh [winfo screenheight $wid] set sw [winfo screenwidth $wid] wm minsize $wid $sw $sh wm maxsize $wid $sw $sh set fmtStr [format "%dx%d+0+0" $sw $sh] wm geometry $wid $fmtStr wm overrideredirect $wid 1 focus -force $wid } proc tcl3dSetScrolledTitle {wid titleStr {fgColor black}} { set pathList [split $wid "."] # Index -3 is needed for CreateScrolledFrame. # Index -2 is needed for all other widget types. foreach ind { -2 -3 } { set parList [lrange $pathList 0 [expr [llength $pathList] $ind]] set parPath [join $parList "."] set labelPath $parPath append labelPath ".label" if { [winfo exists $labelPath] } { $labelPath configure -text $titleStr -foreground $fgColor break } } } proc tcl3dSetWindowMode {wid w h} { set sh [winfo screenheight $wid] set sw [winfo screenwidth $wid] wm minsize $wid 10 10 wm maxsize $wid $sw $sh set fmtStr [format "%dx%d+0+25" $w $h] wm geometry $wid $fmtStr wm overrideredirect $wid 0 focus -force $wid } proc tcl3dShowIndicator {} { if { [tcl3dHaveAqua] } { return true } else { return false } } proc tcl3dShowPackageInfo {} { set tw .tcl3d:PkgInfoWin catch { destroy $tw } toplevel $tw wm title $tw "Tcl3D Packages" wm resizable $tw true true frame $tw.fr0 -relief sunken -borderwidth 1 grid $tw.fr0 -row 0 -column 0 -sticky nwse set pkgInfoList [tcl3dGetPackageInfo] set numPkgs [llength $pkgInfoList] set textId [tcl3dCreateScrolledText $tw.fr0 "" -wrap word -height $numPkgs] foreach pkgInfo $pkgInfoList { set msgStr "Package [lindex $pkgInfo 0]: [lindex $pkgInfo 2] [lindex $pkgInfo 3]\n" if { [lindex $pkgInfo 1] == 1} { set tag avail } else { set tag unavail } $textId insert end $msgStr $tag } $textId tag configure avail -background green $textId tag configure unavail -background red $textId configure -state disabled # Create OK button frame $tw.fr1 -relief sunken -borderwidth 1 grid $tw.fr1 -row 1 -column 0 -sticky nwse button $tw.fr1.b -text "OK" -command "destroy $tw" -default active bind $tw.fr1.b "destroy $tw" pack $tw.fr1.b -side left -fill x -padx 2 -expand 1 grid columnconfigure $tw 0 -weight 1 grid rowconfigure $tw 0 -weight 1 bind $tw "destroy $tw" bind $tw "destroy $tw" focus $tw } proc tcl3dTbAnimate {toglwin animate} { global __tcl3dTB set __tcl3dTB(animate,$toglwin) $animate } proc tcl3dTbInit {toglwin} { global __tcl3dTB set __tcl3dTB(swatch,$toglwin) [tcl3dNewSwatch] tcl3dStartSwatch $__tcl3dTB(swatch,$toglwin) set __tcl3dTB(lasttime,$toglwin) [_tcl3dTbGetTimeMS $toglwin] set __tcl3dTB(tracking,$toglwin) 0 set __tcl3dTB(animate,$toglwin) 1 set __tcl3dTB(curQuat,$toglwin) [tcl3dVector GLfloat 4] set __tcl3dTB(lastQuat,$toglwin) [tcl3dVector GLfloat 4] tcl3dTrackball $__tcl3dTB(curQuat,$toglwin) 0.0 0.0 0.0 0.0 } proc tcl3dTbMatrix {toglwin} { global __tcl3dTB set m [tcl3dVector GLfloat 16] tcl3dTrackballBuildRotMatrix $m $__tcl3dTB(curQuat,$toglwin) set ml [tcl3dVectorToList $m 16] glMultMatrixf $ml $m delete } proc tcl3dTbMotion {toglwin x y} { global __tcl3dTB if { $__tcl3dTB(tracking,$toglwin) } { set __tcl3dTB(lasttime,$toglwin) [_tcl3dTbGetTimeMS $toglwin] set w $__tcl3dTB(width,$toglwin) set h $__tcl3dTB(height,$toglwin) set bx $__tcl3dTB(beginx,$toglwin) set by $__tcl3dTB(beginy,$toglwin) tcl3dTrackball $__tcl3dTB(lastQuat,$toglwin) [expr {(2.0 * $bx - $w) / $w}] [expr {($h - 2.0 * $by) / $h}] [expr {(2.0 * $x - $w) / $w}] [expr {($h - 2.0 * $y) / $h}] set __tcl3dTB(beginx,$toglwin) $x set __tcl3dTB(beginy,$toglwin) $y tcl3dTrackballAddQuats $__tcl3dTB(lastQuat,$toglwin) $__tcl3dTB(curQuat,$toglwin) $__tcl3dTB(curQuat,$toglwin) $toglwin postredisplay } } proc tcl3dTbReshape {toglwin w h} { global __tcl3dTB set __tcl3dTB(width,$toglwin) $w set __tcl3dTB(height,$toglwin) $h } proc tcl3dTbStartMotion {toglwin x y} { global __tcl3dTB _tcl3dTbStopIdleFunc $toglwin set __tcl3dTB(tracking,$toglwin) 1 set __tcl3dTB(lasttime,$toglwin) [_tcl3dTbGetTimeMS $toglwin ] set __tcl3dTB(beginx,$toglwin) $x set __tcl3dTB(beginy,$toglwin) $y } proc tcl3dTbStopMotion {toglwin} { global __tcl3dTB set __tcl3dTB(tracking,$toglwin) 0 set t [_tcl3dTbGetTimeMS $toglwin ] if { ($t == $__tcl3dTB(lasttime,$toglwin)) && $__tcl3dTB(animate,$toglwin) } { _tcl3dTbAnimate $toglwin } else { _tcl3dTbStopIdleFunc $toglwin } } proc tcl3dToolhelpAddBinding {w str} { global __tcl3dToolhelpWidget if { ![info exists __tcl3dToolhelpWidget]} { tcl3dToolhelpInit .tcl3dToolhelp } bind $w "tcl3dToolhelpShow %X %Y [list $str]" bind $w "tcl3dToolhelpHide" bind $w